]> git.djapps.eu Git - pkg/ggml/sources/whisper.cpp/commitdiff
whisper : reorganize source code + improve CMake (#2256)
authorGeorgi Gerganov <redacted>
Wed, 26 Jun 2024 16:34:09 +0000 (19:34 +0300)
committerGitHub <redacted>
Wed, 26 Jun 2024 16:34:09 +0000 (19:34 +0300)
* scripts : update sync [no ci]

* files : reorganize [no ci]

* sync : llama.cpp

* cmake : link math library

* cmake : build normal ggml library

* files : move headers to include

* objc : fix path to ggml-metal.h

* ci : fix WHISPER_CUDA -> GGML_CUDA

* scripts : sync LICENSE [no ci]

570 files changed:
.devops/cublas.Dockerfile
.devops/main-cuda.Dockerfile
.github/workflows/build.yml
.gitignore
.gitmodules
CMakeLists.txt
Makefile
Package.swift
README.md
bindings/ios [deleted submodule]
cmake/BuildTypes.cmake [deleted file]
cmake/GitVars.cmake [deleted file]
cmake/build-info.cmake [new file with mode: 0644]
cmake/git-vars.cmake [new file with mode: 0644]
cmake/whisper-config.cmake.in [new file with mode: 0644]
cmake/whisper.pc.in [new file with mode: 0644]
coreml/whisper-decoder-impl.h [deleted file]
coreml/whisper-decoder-impl.m [deleted file]
coreml/whisper-encoder-impl.h [deleted file]
coreml/whisper-encoder-impl.m [deleted file]
coreml/whisper-encoder.h [deleted file]
coreml/whisper-encoder.mm [deleted file]
examples/bench/bench.cpp
examples/command/command.cpp
examples/common-sdl.cpp
examples/grammar-parser.cpp
examples/lsp/lsp.cpp
examples/main/main.cpp
examples/quantize/quantize.cpp
examples/stream/stream.cpp
examples/talk-llama/llama.cpp
examples/talk-llama/llama.h
examples/talk-llama/talk-llama.cpp
examples/talk-llama/unicode-data.cpp
examples/talk-llama/unicode.cpp
examples/talk/gpt-2.cpp
examples/talk/talk.cpp
examples/whisper.android.java/app/src/main/jni/whisper/CMakeLists.txt
examples/whisper.android/lib/src/main/jni/whisper/CMakeLists.txt
examples/whisper.objc/whisper.objc.xcodeproj/project.pbxproj
examples/whisper.swiftui/whisper.swiftui.demo/Models/WhisperState.swift
ggml-alloc.c [deleted file]
ggml-alloc.h [deleted file]
ggml-backend-impl.h [deleted file]
ggml-backend.c [deleted file]
ggml-backend.h [deleted file]
ggml-blas.cpp [deleted file]
ggml-blas.h [deleted file]
ggml-common.h [deleted file]
ggml-cuda.cu [deleted file]
ggml-cuda.h [deleted file]
ggml-cuda/acc.cu [deleted file]
ggml-cuda/acc.cuh [deleted file]
ggml-cuda/arange.cu [deleted file]
ggml-cuda/arange.cuh [deleted file]
ggml-cuda/argsort.cu [deleted file]
ggml-cuda/argsort.cuh [deleted file]
ggml-cuda/binbcast.cu [deleted file]
ggml-cuda/binbcast.cuh [deleted file]
ggml-cuda/clamp.cu [deleted file]
ggml-cuda/clamp.cuh [deleted file]
ggml-cuda/common.cuh [deleted file]
ggml-cuda/concat.cu [deleted file]
ggml-cuda/concat.cuh [deleted file]
ggml-cuda/convert.cu [deleted file]
ggml-cuda/convert.cuh [deleted file]
ggml-cuda/cpy.cu [deleted file]
ggml-cuda/cpy.cuh [deleted file]
ggml-cuda/dequantize.cuh [deleted file]
ggml-cuda/diagmask.cu [deleted file]
ggml-cuda/diagmask.cuh [deleted file]
ggml-cuda/dmmv.cu [deleted file]
ggml-cuda/dmmv.cuh [deleted file]
ggml-cuda/fattn-common.cuh [deleted file]
ggml-cuda/fattn-tile-f16.cu [deleted file]
ggml-cuda/fattn-tile-f16.cuh [deleted file]
ggml-cuda/fattn-tile-f32.cu [deleted file]
ggml-cuda/fattn-tile-f32.cuh [deleted file]
ggml-cuda/fattn-vec-f16.cuh [deleted file]
ggml-cuda/fattn-vec-f32.cuh [deleted file]
ggml-cuda/fattn-wmma-f16.cuh [deleted file]
ggml-cuda/fattn.cu [deleted file]
ggml-cuda/fattn.cuh [deleted file]
ggml-cuda/getrows.cu [deleted file]
ggml-cuda/getrows.cuh [deleted file]
ggml-cuda/im2col.cu [deleted file]
ggml-cuda/im2col.cuh [deleted file]
ggml-cuda/mma.cuh [deleted file]
ggml-cuda/mmq.cu [deleted file]
ggml-cuda/mmq.cuh [deleted file]
ggml-cuda/mmvq.cu [deleted file]
ggml-cuda/mmvq.cuh [deleted file]
ggml-cuda/norm.cu [deleted file]
ggml-cuda/norm.cuh [deleted file]
ggml-cuda/pad.cu [deleted file]
ggml-cuda/pad.cuh [deleted file]
ggml-cuda/pool2d.cu [deleted file]
ggml-cuda/pool2d.cuh [deleted file]
ggml-cuda/quantize.cu [deleted file]
ggml-cuda/quantize.cuh [deleted file]
ggml-cuda/rope.cu [deleted file]
ggml-cuda/rope.cuh [deleted file]
ggml-cuda/scale.cu [deleted file]
ggml-cuda/scale.cuh [deleted file]
ggml-cuda/softmax.cu [deleted file]
ggml-cuda/softmax.cuh [deleted file]
ggml-cuda/sumrows.cu [deleted file]
ggml-cuda/sumrows.cuh [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs256-f16-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs256-f16-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-f16.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_0.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_1.cu [deleted file]
ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q8_0.cu [deleted file]
ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb16.cu [deleted file]
ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb32.cu [deleted file]
ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb16.cu [deleted file]
ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb32.cu [deleted file]
ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb8.cu [deleted file]
ggml-cuda/template-instances/generate_cu_files.py [deleted file]
ggml-cuda/template-instances/mmq-instance-q2_k.cu [deleted file]
ggml-cuda/template-instances/mmq-instance-q3_k.cu [deleted file]
ggml-cuda/template-instances/mmq-instance-q4_0.cu [deleted file]
ggml-cuda/template-instances/mmq-instance-q4_1.cu [deleted file]
ggml-cuda/template-instances/mmq-instance-q4_k.cu [deleted file]
ggml-cuda/template-instances/mmq-instance-q5_0.cu [deleted file]
ggml-cuda/template-instances/mmq-instance-q5_1.cu [deleted file]
ggml-cuda/template-instances/mmq-instance-q5_k.cu [deleted file]
ggml-cuda/template-instances/mmq-instance-q6_k.cu [deleted file]
ggml-cuda/template-instances/mmq-instance-q8_0.cu [deleted file]
ggml-cuda/tsembd.cu [deleted file]
ggml-cuda/tsembd.cuh [deleted file]
ggml-cuda/unary.cu [deleted file]
ggml-cuda/unary.cuh [deleted file]
ggml-cuda/upscale.cu [deleted file]
ggml-cuda/upscale.cuh [deleted file]
ggml-cuda/vecdotq.cuh [deleted file]
ggml-impl.h [deleted file]
ggml-kompute.cpp [deleted file]
ggml-kompute.h [deleted file]
ggml-metal.h [deleted file]
ggml-metal.m [deleted file]
ggml-metal.metal [deleted file]
ggml-quants.c [deleted file]
ggml-quants.h [deleted file]
ggml-rpc.cpp [deleted file]
ggml-rpc.h [deleted file]
ggml-sycl.cpp [deleted file]
ggml-sycl.h [deleted file]
ggml-sycl/backend.hpp [deleted file]
ggml-sycl/common.cpp [deleted file]
ggml-sycl/common.hpp [deleted file]
ggml-sycl/dpct/helper.hpp [deleted file]
ggml-sycl/presets.hpp [deleted file]
ggml-vulkan.cpp [deleted file]
ggml-vulkan.h [deleted file]
ggml.c [deleted file]
ggml.h [deleted file]
ggml/.gitignore [new file with mode: 0644]
ggml/CMakeLists.txt [new file with mode: 0644]
ggml/cmake/FindSIMD.cmake [new file with mode: 0644]
ggml/ggml_vk_generate_shaders.py [new file with mode: 0644]
ggml/include/ggml-alloc.h [new file with mode: 0644]
ggml/include/ggml-backend.h [new file with mode: 0644]
ggml/include/ggml-blas.h [new file with mode: 0644]
ggml/include/ggml-cuda.h [new file with mode: 0644]
ggml/include/ggml-kompute.h [new file with mode: 0644]
ggml/include/ggml-metal.h [new file with mode: 0644]
ggml/include/ggml-rpc.h [new file with mode: 0644]
ggml/include/ggml-sycl.h [new file with mode: 0644]
ggml/include/ggml-vulkan.h [new file with mode: 0644]
ggml/include/ggml.h [new file with mode: 0644]
ggml/src/CMakeLists.txt [new file with mode: 0644]
ggml/src/ggml-alloc.c [new file with mode: 0644]
ggml/src/ggml-backend-impl.h [new file with mode: 0644]
ggml/src/ggml-backend.c [new file with mode: 0644]
ggml/src/ggml-blas.cpp [new file with mode: 0644]
ggml/src/ggml-common.h [new file with mode: 0644]
ggml/src/ggml-cuda.cu [new file with mode: 0644]
ggml/src/ggml-cuda/acc.cu [new file with mode: 0644]
ggml/src/ggml-cuda/acc.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/arange.cu [new file with mode: 0644]
ggml/src/ggml-cuda/arange.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/argsort.cu [new file with mode: 0644]
ggml/src/ggml-cuda/argsort.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/binbcast.cu [new file with mode: 0644]
ggml/src/ggml-cuda/binbcast.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/clamp.cu [new file with mode: 0644]
ggml/src/ggml-cuda/clamp.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/common.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/concat.cu [new file with mode: 0644]
ggml/src/ggml-cuda/concat.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/convert.cu [new file with mode: 0644]
ggml/src/ggml-cuda/convert.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/cpy.cu [new file with mode: 0644]
ggml/src/ggml-cuda/cpy.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/dequantize.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/diagmask.cu [new file with mode: 0644]
ggml/src/ggml-cuda/diagmask.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/dmmv.cu [new file with mode: 0644]
ggml/src/ggml-cuda/dmmv.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/fattn-common.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/fattn-tile-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/fattn-tile-f16.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/fattn-tile-f32.cu [new file with mode: 0644]
ggml/src/ggml-cuda/fattn-tile-f32.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/fattn-vec-f16.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/fattn-vec-f32.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/fattn-wmma-f16.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/fattn.cu [new file with mode: 0644]
ggml/src/ggml-cuda/fattn.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/getrows.cu [new file with mode: 0644]
ggml/src/ggml-cuda/getrows.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/im2col.cu [new file with mode: 0644]
ggml/src/ggml-cuda/im2col.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/mma.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/mmq.cu [new file with mode: 0644]
ggml/src/ggml-cuda/mmq.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/mmvq.cu [new file with mode: 0644]
ggml/src/ggml-cuda/mmvq.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/norm.cu [new file with mode: 0644]
ggml/src/ggml-cuda/norm.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/pad.cu [new file with mode: 0644]
ggml/src/ggml-cuda/pad.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/pool2d.cu [new file with mode: 0644]
ggml/src/ggml-cuda/pool2d.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/quantize.cu [new file with mode: 0644]
ggml/src/ggml-cuda/quantize.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/rope.cu [new file with mode: 0644]
ggml/src/ggml-cuda/rope.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/scale.cu [new file with mode: 0644]
ggml/src/ggml-cuda/scale.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/softmax.cu [new file with mode: 0644]
ggml/src/ggml-cuda/softmax.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/sumrows.cu [new file with mode: 0644]
ggml/src/ggml-cuda/sumrows.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs256-f16-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs256-f16-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-f16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb32.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb16.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb32.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb8.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/generate_cu_files.py [new file with mode: 0755]
ggml/src/ggml-cuda/template-instances/mmq-instance-q2_k.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/mmq-instance-q3_k.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/mmq-instance-q4_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/mmq-instance-q4_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/mmq-instance-q4_k.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/mmq-instance-q5_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/mmq-instance-q5_1.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/mmq-instance-q5_k.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/mmq-instance-q6_k.cu [new file with mode: 0644]
ggml/src/ggml-cuda/template-instances/mmq-instance-q8_0.cu [new file with mode: 0644]
ggml/src/ggml-cuda/tsembd.cu [new file with mode: 0644]
ggml/src/ggml-cuda/tsembd.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/unary.cu [new file with mode: 0644]
ggml/src/ggml-cuda/unary.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/upscale.cu [new file with mode: 0644]
ggml/src/ggml-cuda/upscale.cuh [new file with mode: 0644]
ggml/src/ggml-cuda/vecdotq.cuh [new file with mode: 0644]
ggml/src/ggml-impl.h [new file with mode: 0644]
ggml/src/ggml-kompute.cpp [new file with mode: 0644]
ggml/src/ggml-metal.m [new file with mode: 0644]
ggml/src/ggml-metal.metal [new file with mode: 0644]
ggml/src/ggml-quants.c [new file with mode: 0644]
ggml/src/ggml-quants.h [new file with mode: 0644]
ggml/src/ggml-rpc.cpp [new file with mode: 0644]
ggml/src/ggml-sycl.cpp [new file with mode: 0644]
ggml/src/ggml-sycl/backend.hpp [new file with mode: 0644]
ggml/src/ggml-sycl/common.cpp [new file with mode: 0644]
ggml/src/ggml-sycl/common.hpp [new file with mode: 0644]
ggml/src/ggml-sycl/convert.cpp [new file with mode: 0644]
ggml/src/ggml-sycl/convert.hpp [new file with mode: 0644]
ggml/src/ggml-sycl/dequantize.hpp [new file with mode: 0644]
ggml/src/ggml-sycl/dmmv.cpp [new file with mode: 0644]
ggml/src/ggml-sycl/dmmv.hpp [new file with mode: 0644]
ggml/src/ggml-sycl/dpct/helper.hpp [new file with mode: 0644]
ggml/src/ggml-sycl/mmq.cpp [new file with mode: 0644]
ggml/src/ggml-sycl/mmq.hpp [new file with mode: 0644]
ggml/src/ggml-sycl/mmvq.cpp [new file with mode: 0644]
ggml/src/ggml-sycl/mmvq.hpp [new file with mode: 0644]
ggml/src/ggml-sycl/presets.hpp [new file with mode: 0644]
ggml/src/ggml-sycl/vecdotq.hpp [new file with mode: 0644]
ggml/src/ggml-vulkan-shaders.hpp [new file with mode: 0644]
ggml/src/ggml-vulkan.cpp [new file with mode: 0644]
ggml/src/ggml.c [new file with mode: 0644]
ggml/src/kompute-shaders/common.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_add.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_addrow.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_cpy_f16_f16.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_cpy_f16_f32.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_cpy_f32_f16.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_cpy_f32_f32.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_diagmask.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_gelu.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_getrows.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_getrows_f16.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_getrows_f32.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_getrows_q4_0.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_getrows_q4_1.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_getrows_q6_k.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_mul.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_mul_mat_f16.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_mul_mat_mat_f32.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_mul_mat_q4_0.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_mul_mat_q4_1.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_mul_mat_q6_k.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_mul_mat_q8_0.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_mul_mv_q_n.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_mul_mv_q_n_pre.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_norm.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_relu.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_rmsnorm.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_rope_f16.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_rope_f32.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_scale.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_scale_8.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_silu.comp [new file with mode: 0644]
ggml/src/kompute-shaders/op_softmax.comp [new file with mode: 0644]
ggml/src/kompute-shaders/rope_common.comp [new file with mode: 0644]
ggml/src/sgemm.cpp [new file with mode: 0644]
ggml/src/sgemm.h [new file with mode: 0644]
ggml/src/vulkan-shaders/add.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/argsort.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/clamp.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/copy.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_f32.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_funcs.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_head.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_q2_k.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_q3_k.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_q4_0.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_q4_1.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_q4_k.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_q5_0.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_q5_1.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_q5_k.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_q6_k.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/dequant_q8_0.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/diag_mask_inf.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/div.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/gelu.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/generic_binary_head.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/generic_head.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/generic_unary_head.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/get_rows.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/get_rows_quant.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mat_split_k_reduce.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mat_vec.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mat_vec_base.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mat_vec_nc.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mat_vec_p021.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mat_vec_q2_k.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mat_vec_q3_k.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mat_vec_q4_k.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mat_vec_q5_k.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mat_vec_q6_k.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/mul_mm.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/norm.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/relu.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/rms_norm.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/rope_head.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/rope_neox.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/rope_norm.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/scale.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/silu.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/soft_max.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/square.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/sum_rows.comp [new file with mode: 0644]
ggml/src/vulkan-shaders/types.comp [new file with mode: 0644]
include/whisper.h [new file with mode: 0644]
models/generate-coreml-interface.sh
openvino/whisper-openvino-encoder.cpp [deleted file]
openvino/whisper-openvino-encoder.h [deleted file]
scripts/build-info.sh [new file with mode: 0755]
scripts/get-flags.mk [new file with mode: 0644]
scripts/sync-ggml-am.sh
scripts/sync-ggml.sh
scripts/sync-llama.sh
spm-headers/ggml-alloc.h [new symlink]
spm-headers/ggml-backend.h [new symlink]
spm-headers/ggml-metal.h [new symlink]
spm-headers/ggml.h
spm-headers/whisper.h
src/CMakeLists.txt [new file with mode: 0644]
src/coreml/whisper-decoder-impl.h [new file with mode: 0644]
src/coreml/whisper-decoder-impl.m [new file with mode: 0644]
src/coreml/whisper-encoder-impl.h [new file with mode: 0644]
src/coreml/whisper-encoder-impl.m [new file with mode: 0644]
src/coreml/whisper-encoder.h [new file with mode: 0644]
src/coreml/whisper-encoder.mm [new file with mode: 0644]
src/openvino/whisper-openvino-encoder.cpp [new file with mode: 0644]
src/openvino/whisper-openvino-encoder.h [new file with mode: 0644]
src/whisper-mel-cuda.cu [new file with mode: 0644]
src/whisper-mel-cuda.hpp [new file with mode: 0644]
src/whisper-mel.hpp [new file with mode: 0644]
src/whisper.cpp [new file with mode: 0644]
tests/test-backend-ops.cpp [new file with mode: 0644]
tests/test-c.c [new file with mode: 0644]
whisper-mel-cuda.cu [deleted file]
whisper-mel-cuda.hpp [deleted file]
whisper-mel.hpp [deleted file]
whisper.cpp [deleted file]
whisper.h [deleted file]

index ae3da75f5c784314f029b7a61f9dc0effc012e49..ca87fdda086a23c3aa05d7f3bb4d86366090713f 100644 (file)
@@ -21,7 +21,7 @@ COPY . .
 # Set nvcc architecture
 ENV CUDA_DOCKER_ARCH=${CUDA_DOCKER_ARCH}
 # Enable cuBLAS
-ENV WHISPER_CUBLAS=1
+ENV GGML_CUDA=1
 
 RUN make
 
index bd9a43adb7a33116ff0b43bd8dbe93485a5892b4..674b64c23df2a67b871698b5a4bd5007c00d9f71 100644 (file)
@@ -14,7 +14,7 @@ ARG CUDA_DOCKER_ARCH=all
 # Set nvcc architecture
 ENV CUDA_DOCKER_ARCH=${CUDA_DOCKER_ARCH}
 # Enable cuBLAS
-ENV WHISPER_CUBLAS=1
+ENV GGML_CUDA=1
 
 RUN apt-get update && \
     apt-get install -y build-essential \
index 2b51051848f36e5f26193f3465e088a6e9f03855..b9ab80fd2b964119fce243c97811e82022f42a2c 100644 (file)
@@ -101,7 +101,10 @@ jobs:
       fail-fast: false
       matrix:
         build: [Debug, Release]
-        arch: [linux/amd64, linux/arm64, linux/arm/v7, linux/ppc64le]
+        #arch: [linux/amd64, linux/arm64, linux/arm/v7, linux/ppc64le]
+        # TODO: arm/v7 disabled due to clang bug
+        #       https://github.com/ggerganov/whisper.cpp/actions/runs/9657764109/job/26637633042?pr=2256#step:4:1990
+        arch: [linux/amd64, linux/arm64, linux/ppc64le]
 
     steps:
       - name: Clone
@@ -197,7 +200,7 @@ jobs:
           source /opt/intel/oneapi/setvars.sh
           mkdir build
           cd build
-          cmake -DWHISPER_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx ..
+          cmake -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx ..
           cmake --build . --config Release -j $(nproc)
 
   ubuntu-22-cmake-sycl-fp16:
@@ -247,7 +250,7 @@ jobs:
           source /opt/intel/oneapi/setvars.sh
           mkdir build
           cd build
-          cmake -DWHISPER_SYCL_F16=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx ..
+          cmake -DGGML_SYCL_F16=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx ..
           cmake --build . --config Release -j $(nproc)
 
   windows-msys2:
@@ -289,7 +292,7 @@ jobs:
       - name: Build using make w/ OpenBLAS
         shell: msys2 {0}
         run: |
-            make WHISPER_OPENBLAS=1 -j $(nproc)
+            make GGML_OPENBLAS=1 -j $(nproc)
 
       - name: Build using CMake
         shell: msys2 {0}
@@ -305,7 +308,7 @@ jobs:
       - name: Build using CMake w/ OpenBLAS
         shell: msys2 {0}
         run: |
-            cmake -B build -DWHISPER_OPENBLAS=ON
+            cmake -B build -DGGML_OPENBLAS=ON
             cmake --build build --config ${{ matrix.build }} -j $(nproc)
 
   windows:
@@ -381,12 +384,9 @@ jobs:
           - arch: Win32
             obzip: https://github.com/OpenMathLib/OpenBLAS/releases/download/v0.3.25/OpenBLAS-0.3.25-x86.zip
             s2arc: x86
-            clblast: OFF
           - arch: x64
             obzip: https://github.com/OpenMathLib/OpenBLAS/releases/download/v0.3.25/OpenBLAS-0.3.25-x64.zip
             s2arc: x64
-            clblast: ON
-            clver: 1.6.1
           - sdl2: ON
             s2ver: 2.28.5
 
@@ -413,26 +413,13 @@ jobs:
           7z x sdl2.zip
           echo "SDL2_DIR=$env:GITHUB_WORKSPACE/SDL2-${{ matrix.s2ver }}/cmake" >> $env:GITHUB_ENV
 
-      - name: Install OpenCL
-        if: matrix.clblast == 'ON'
-        run: vcpkg.exe --triplet=${{ matrix.arch }}-windows install opencl
-
-      - name: Fetch CLBlast and set CLBlast_DIR
-        if: matrix.clblast == 'ON'
-        run: |
-          C:/msys64/usr/bin/wget.exe -qO clblast.zip https://github.com/CNugteren/CLBlast/releases/download/${{ matrix.clver }}/CLBlast-${{ matrix.clver }}-windows-x64.zip
-          7z x clblast.zip
-          7z x CLBlast-${{ matrix.clver }}-windows-x64.7z
-          echo "CLBlast_DIR=$env:GITHUB_WORKSPACE/CLBlast-${{ matrix.clver }}-windows-x64/lib/cmake/CLBlast" >> $env:GITHUB_ENV
-
       - name: Configure
         run: >
           cmake -S . -B ./build -A ${{ matrix.arch }}
           -DCMAKE_BUILD_TYPE=${{ matrix.build }}
-          -DWHISPER_OPENBLAS=${{ matrix.blas }}
+          -DGGML_OPENBLAS=${{ matrix.blas }}
           -DCMAKE_LIBRARY_PATH="$env:OPENBLAS_PATH/lib"
           -DWHISPER_SDL2=${{ matrix.sdl2 }}
-          -DWHISPER_CLBLAST=${{ matrix.clblast }}
 
       - name: Build
         run: |
@@ -447,15 +434,11 @@ jobs:
         if: matrix.sdl2 == 'ON'
         run: copy "$env:SDL2_DIR/../lib/${{ matrix.s2arc }}/SDL2.dll" build/bin/${{ matrix.build }}
 
-      - name: Copy clblast.dll
-        if: matrix.clblast == 'ON'
-        run: copy "$env:CLBlast_DIR/../../clblast.dll" build/bin/${{ matrix.build }}
-
       - name: Upload binaries
         if: matrix.blas == 'ON' && matrix.sdl2 == 'ON'
         uses: actions/upload-artifact@v4
         with:
-          name: whisper-blas${{ matrix.clblast == 'ON' && '-clblast' || ''}}-bin-${{ matrix.arch }}
+          name: whisper-blas-bin-${{ matrix.arch }}
           path: build/bin/${{ matrix.build }}
 
   windows-cublas:
@@ -498,7 +481,7 @@ jobs:
         run: >
           cmake -S . -B ./build -A ${{ matrix.arch }}
           -DCMAKE_BUILD_TYPE=${{ matrix.build }}
-          -DWHISPER_CUDA=${{ matrix.cublas }}
+          -DGGML_CUDA=${{ matrix.cublas }}
           -DWHISPER_SDL2=${{ matrix.sdl2 }}
 
       - name: Build ${{ matrix.cuda-toolkit }}
index e3319ad0329f792fbd318e6e28e0afb15fd2520a..44648fa7ba010b3392e9f7b3c4e903c7ab1fb0ee 100644 (file)
 /CMakeSettings.json
 
 build/
-build-blas/
-build-coreml/
-build-em/
-build-debug/
-build-release/
-build-rwdi/
-build-static/
-build-cublas/
-build-no-accel/
-build-sanitize-addr/
-build-sanitize-thread/
+build-*/
 
 # SPM
 .build/
index 94d7ce1b3cc8a9a08a4163300ec1df0a69fa3f6b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,3 +0,0 @@
-[submodule "bindings/ios"]
-       path = bindings/ios
-       url = https://github.com/ggerganov/whisper.spm
index 4055c2bbd87dbbc1cfb684d2af23385505afd71d..0f6935b0d968656e5ff3179e642fd8e64d16d9d1 100644 (file)
@@ -1,25 +1,31 @@
-cmake_minimum_required (VERSION 3.5)
+cmake_minimum_required(VERSION 3.5) # for add_link_options and implicit target directories.
+project("whisper.cpp" C CXX)
+project("whisper.cpp" VERSION 1.6.2)
+include(CheckIncludeFileCXX)
 
-# Allow for the creation of solution folders.
-set_property(GLOBAL PROPERTY USE_FOLDERS ON)
-
-project(whisper.cpp VERSION 1.6.2)
 set(SOVERSION 1)
 
+#set(CMAKE_WARN_DEPRECATED YES)
+set(CMAKE_WARN_UNUSED_CLI YES)
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+
+if (NOT XCODE AND NOT MSVC AND NOT CMAKE_BUILD_TYPE)
+    set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
+    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
+endif()
+
 # Add path to modules
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
 
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
 
-if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
     set(WHISPER_STANDALONE ON)
-    include(GitVars)
-    include(BuildTypes)
+
+    include(git-vars)
 
     # configure project version
-    if (EXISTS "${CMAKE_SOURCE_DIR}/bindings/ios/Makefile-tmpl")
-        configure_file(${CMAKE_SOURCE_DIR}/bindings/ios/Makefile-tmpl ${CMAKE_SOURCE_DIR}/bindings/ios/Makefile @ONLY)
-    endif()
     configure_file(${CMAKE_SOURCE_DIR}/bindings/javascript/package-tmpl.json ${CMAKE_SOURCE_DIR}/bindings/javascript/package.json @ONLY)
 else()
     set(WHISPER_STANDALONE OFF)
@@ -29,6 +35,11 @@ if (EMSCRIPTEN)
     set(BUILD_SHARED_LIBS_DEFAULT OFF)
 
     option(WHISPER_WASM_SINGLE_FILE "whisper: embed WASM inside the generated whisper.js" ON)
+
+    # TODO: without these, we get the following error:
+    #       wasm-ld: error: --shared-memory is disallowed by whisper.cpp.o because it was not compiled with 'atomics' or 'bulk-memory' features.
+    set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   -pthread -s TOTAL_STACK=5242880")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -s TOTAL_STACK=5242880")
 else()
     if (MINGW)
         set(BUILD_SHARED_LIBS_DEFAULT OFF)
@@ -37,793 +48,145 @@ else()
     endif()
 endif()
 
-# options
+option(BUILD_SHARED_LIBS "build shared libraries" ${BUILD_SHARED_LIBS_DEFAULT})
 
-if (APPLE)
-    set(WHISPER_METAL_DEFAULT ON)
-else()
-    set(WHISPER_METAL_DEFAULT OFF)
-endif()
+#
+# option list
+#
 
-option(BUILD_SHARED_LIBS              "whisper: build shared libs" ${BUILD_SHARED_LIBS_DEFAULT})
+# general
+option(WHISPER_CCACHE "whisper: use ccache if available" ON)
 
+# debug
 option(WHISPER_ALL_WARNINGS           "whisper: enable all compiler warnings"                   ON)
 option(WHISPER_ALL_WARNINGS_3RD_PARTY "whisper: enable all compiler warnings in 3rd party libs" OFF)
 
-option(WHISPER_SANITIZE_THREAD        "whisper: enable thread sanitizer"    OFF)
-option(WHISPER_SANITIZE_ADDRESS       "whisper: enable address sanitizer"   OFF)
-option(WHISPER_SANITIZE_UNDEFINED     "whisper: enable undefined sanitizer" OFF)
-
-option(WHISPER_BUILD_TESTS            "whisper: build tests"    ${WHISPER_STANDALONE})
-option(WHISPER_BUILD_EXAMPLES         "whisper: build examples" ${WHISPER_STANDALONE})
-
-option(WHISPER_SDL2                   "whisper: support for libSDL2" OFF)
-
-if (CMAKE_SYSTEM_NAME MATCHES "Linux")
-    option(WHISPER_FFMPEG                 "whisper: support building and linking with ffmpeg libs (avcodec, swresample, ...)" OFF)
-endif()
-
-option(WHISPER_NO_AVX                 "whisper: disable AVX"         OFF)
-option(WHISPER_NO_AVX2                "whisper: disable AVX2"        OFF)
-option(WHISPER_NO_AVX512              "whisper: disable AVX512"      ON)
-option(WHISPER_NO_AVX512_VBMI         "whisper: disable AVX512-VBMI" ON)
-option(WHISPER_NO_AVX512_VNNI         "whisper: disable AVX512-VNNI" ON)
-option(WHISPER_NO_FMA                 "whisper: disable FMA"         OFF)
-option(WHISPER_NO_F16C                "whisper: disable F16c"        OFF)
-
-option(WHISPER_OPENVINO               "whisper: support for OpenVINO" OFF)
-
-if (APPLE)
-    option(WHISPER_NO_ACCELERATE         "whisper: disable Accelerate framework" OFF)
-    option(WHISPER_METAL                 "whisper: use Metal"                    ${WHISPER_METAL_DEFAULT})
-    option(WHISPER_METAL_NDEBUG          "whisper: disable Metal debugging"      OFF)
-    option(WHISPER_COREML                "whisper: enable Core ML framework"     OFF)
-    option(WHISPER_COREML_ALLOW_FALLBACK "whisper: allow non-CoreML fallback"    OFF)
-    option(WHISPER_METAL_EMBED_LIBRARY   "whisper: embed Metal library"          OFF)
-    option(WHISPER_BLAS                  "whisper: use BLAS"                     ON)
-    set   (WHISPER_BLAS_VENDOR "Apple" CACHE STRING
-                                         "whisper: BLAS library vendor")
-else()
-    option(WHISPER_CUDA                  "whisper: support for CUDA"                          OFF)
-    option(WHISPER_CUDA_FA_ALL_QUANTS    "whisper: compile all quants for FlashAttention"     OFF)
-    option(WHISPER_CUBLAS                "whisper: support for CUDA (deprecated)"             OFF)
-    option(WHISPER_HIPBLAS               "whisper: support for hipBLAS"                       OFF)
-    option(WHISPER_CLBLAST               "whisper: use CLBlast"                               OFF)
-    option(WHISPER_MKL                   "whisper: use Intel Math Kernel Library (MKL)"       OFF)
-    option(WHISPER_SYCL                  "whisper: use SYCL"                                  OFF)
-    option(WHISPER_SYCL_F16              "whisper: use 16 bit floats for sycl calculations"   OFF)
-    option(WHISPER_BLAS                  "whisper: use BLAS"                                  OFF)
-    set   (WHISPER_BLAS_VENDOR "Generic" CACHE STRING
-                                         "whisper: BLAS library vendor")
-endif()
-
-option(WHISPER_PERF "whisper: enable perf timings" OFF)
+# build
+option(WHISPER_FATAL_WARNINGS "whisper: enable -Werror flag" OFF)
 
 # sanitizers
+option(WHISPER_SANITIZE_THREAD    "whisper: enable thread sanitizer"    OFF)
+option(WHISPER_SANITIZE_ADDRESS   "whisper: enable address sanitizer"   OFF)
+option(WHISPER_SANITIZE_UNDEFINED "whisper: enable undefined sanitizer" OFF)
 
-if (NOT MSVC)
-    if (WHISPER_SANITIZE_THREAD)
-        set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   -fsanitize=thread")
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
-    endif()
-
-    if (WHISPER_SANITIZE_ADDRESS)
-        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}     -fsanitize=address -fno-omit-frame-pointer")
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
-    endif()
-
-    if (WHISPER_SANITIZE_UNDEFINED)
-        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}     -fsanitize=undefined")
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
-    endif()
-endif()
-
-#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math")
-#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native")
-
-# dependencies
-
-find_package(Threads REQUIRED)
-
-#compile flag sycl
-if (WHISPER_SYCL)
-    set(CMAKE_CXX_STANDARD 17)
-else()
-    set(CMAKE_CXX_STANDARD 11)
-endif()
-
-if (WHISPER_FFMPEG)
-    # As of cmake 3.27, there is no official cmake support for FindFFmpeg.
-    # Consequnelty we added a FindFFmpeg.cmake script the cmake subfolder:
-    # whisper.cpp does not need the full ffmpeg libs, just AVFORMAT AVCODEC AVUTIL SWRESAMPLE
-    # libswresample  performs highly optimized audio resampling, rematrixing and sample format conversion operations
-    # libavcodec provides a generic encoding/decoding framework and contains multiple decoders and encoders for audio, video and subtitle streams, and several bitstream filters.
-    # libavformat provides a generic framework for multiplexing and demultiplexing (muxing and demuxing) audio, video and subtitle streams.
-    find_package(FFmpeg REQUIRED)
-    if (NOT ${FFMPEG_FOUND})
-        message(FATAL_ERROR "Cannot find ffmpeg libs/headers")
-    endif()
-    message(STATUS "Found ffmpeg libs: ${FFMPEG_LIBRARIES}")
-    message(STATUS "Found ffmpeg headers in: ${FFMPEG_INCLUDE_DIRS}")
-    message(STATUS "ffmpeg definitions: ${FFMPEG_DEFINITIONS}")
-    message(STATUS "Found avformat ${AVFORMAT_VERSION}")
-    include_directories(${FFMPEG_INCLUDE_DIRS})
-    add_compile_definitions(WHISPER_FFMPEG)
-    set(WHISPER_EXTRA_LIBS  ${WHISPER_EXTRA_LIBS} ${FFMPEG_LIBRARIES})
-endif()
-
-# on APPLE
-if (APPLE)
-    # include Accelerate framework
-    if (NOT WHISPER_NO_ACCELERATE)
-        find_library(ACCELERATE_FRAMEWORK Accelerate)
-
-        if (ACCELERATE_FRAMEWORK)
-            message(STATUS "Accelerate framework found")
-
-            set(WHISPER_EXTRA_LIBS  ${WHISPER_EXTRA_LIBS}  ${ACCELERATE_FRAMEWORK})
-            set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_USE_ACCELERATE -DACCELERATE_NEW_LAPACK -DACCELERATE_LAPACK_ILP64)
-        else()
-            message(FATAL_ERROR "Accelerate framework not found")
-        endif()
-    endif()
-
-    if (WHISPER_METAL)
-        find_library(FOUNDATION_LIBRARY         Foundation              REQUIRED)
-        find_library(METAL_FRAMEWORK            Metal                   REQUIRED)
-        find_library(METALKIT_FRAMEWORK         MetalKit                REQUIRED)
-
-        if (METAL_FRAMEWORK)
-            message(STATUS "Metal framework found")
-
-            set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS}
-                ${FOUNDATION_LIBRARY}
-                ${METAL_FRAMEWORK}
-                ${METALKIT_FRAMEWORK}
-                )
-            set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_USE_METAL)
-
-            if (WHISPER_METAL_NDEBUG)
-                set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_METAL_NDEBUG)
-            endif()
-        else()
-            message(FATAL_ERROR "Metal framework not found")
-        endif()
-
-        set(GGML_SOURCES_METAL ggml-metal.m ggml-metal.h)
-
-        # copy ggml-common.h and ggml-metal.metal to bin directory
-        configure_file(ggml-common.h    bin/ggml-common.h    COPYONLY)
-        configure_file(ggml-metal.metal bin/ggml-metal.metal COPYONLY)
-
-        if (WHISPER_METAL_EMBED_LIBRARY)
-            enable_language(ASM)
-            set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_METAL_EMBED_LIBRARY)
-
-            set(METALLIB_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/ggml-metal.metal")
-            set(COMMON_HEADER   "${CMAKE_CURRENT_SOURCE_DIR}/ggml-common.h")
-
-            file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
-            set(EMBED_METALLIB_ASSEMBLY "${CMAKE_BINARY_DIR}/autogenerated/ggml-embed-metallib.s")
-            set(EMBED_METALLIB_SOURCE "${CMAKE_BINARY_DIR}/autogenerated/ggml-metal-combined.metal")
-
-            add_custom_command(
-                OUTPUT ${EMBED_METALLIB_SOURCE}
-                COMMAND sed -e "/^#include \\\"ggml-common.h\\\"/r ${COMMON_HEADER}" -e "/^#include \\\"ggml-common.h\\\"/d" ${METALLIB_SOURCE} > ${EMBED_METALLIB_SOURCE}
-                DEPENDS ${METALLIB_SOURCE} ${COMMON_HEADER}
-                COMMENT "Generating combined Metal library for embedding"
-            )
-
-            add_custom_command(
-                OUTPUT ${EMBED_METALLIB_ASSEMBLY}
-                COMMAND echo ".section __DATA,__ggml_metallib" > ${EMBED_METALLIB_ASSEMBLY}
-                COMMAND echo ".globl _ggml_metallib_start" >> ${EMBED_METALLIB_ASSEMBLY}
-                COMMAND echo "_ggml_metallib_start:" >> ${EMBED_METALLIB_ASSEMBLY}
-                COMMAND echo ".incbin \\\"${EMBED_METALLIB_SOURCE}\\\"" >> ${EMBED_METALLIB_ASSEMBLY}
-                COMMAND echo ".globl _ggml_metallib_end" >> ${EMBED_METALLIB_ASSEMBLY}
-                COMMAND echo "_ggml_metallib_end:" >> ${EMBED_METALLIB_ASSEMBLY}
-                DEPENDS ${EMBED_METALLIB_SOURCE}
-                COMMENT "Generate assembly for embedded Metal library"
-            )
-
-            set(GGML_SOURCES_METAL ${GGML_SOURCES_METAL} ${EMBED_METALLIB_ASSEMBLY})
-        endif()
-    endif()
-
-    if (WHISPER_COREML)
-        find_library(FOUNDATION_FRAMEWORK Foundation)
-        find_library(COREML_FRAMEWORK CoreML)
-
-        if (COREML_FRAMEWORK)
-            message(STATUS "CoreML framework found")
-
-            set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DWHISPER_USE_COREML)
-        else()
-            message(FATAL_ERROR "CoreML framework not found")
-        endif()
-
-        if (WHISPER_COREML_ALLOW_FALLBACK)
-            set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DWHISPER_COREML_ALLOW_FALLBACK)
-        endif()
-    endif()
-endif()
-
-if (WHISPER_BLAS)
-    if (WHISPER_STATIC)
-        set(BLA_STATIC ON)
-    endif()
-    #if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.22)
-    #    set(BLA_SIZEOF_INTEGER 8)
-    #endif()
-
-    set(BLA_VENDOR ${WHISPER_BLAS_VENDOR})
-    find_package(BLAS)
-
-    if (BLAS_FOUND)
-        message(STATUS "BLAS found, Libraries: ${BLAS_LIBRARIES}")
-
-        if (("${BLAS_INCLUDE_DIRS}" STREQUAL "") AND NOT (${WHISPER_BLAS_VENDOR} MATCHES "Apple"))
-            # BLAS_INCLUDE_DIRS is missing in FindBLAS.cmake.
-            # see https://gitlab.kitware.com/cmake/cmake/-/issues/20268
-            find_package(PkgConfig REQUIRED)
-            if (${WHISPER_BLAS_VENDOR} MATCHES "Generic")
-                pkg_check_modules(DepBLAS REQUIRED blas)
-            elseif (${WHISPER_BLAS_VENDOR} MATCHES "OpenBLAS")
-                # As of openblas v0.3.22, the 64-bit is named openblas64.pc
-                pkg_check_modules(DepBLAS openblas64)
-                if (NOT DepBLAS_FOUND)
-                    pkg_check_modules(DepBLAS REQUIRED openblas)
-                endif()
-            elseif (${WHISPER_BLAS_VENDOR} MATCHES "FLAME")
-                pkg_check_modules(DepBLAS REQUIRED blis)
-            elseif (${WHISPER_BLAS_VENDOR} MATCHES "ATLAS")
-                pkg_check_modules(DepBLAS REQUIRED blas-atlas)
-            elseif (${WHISPER_BLAS_VENDOR} MATCHES "FlexiBLAS")
-                pkg_check_modules(DepBLAS REQUIRED flexiblas_api)
-            elseif (${WHISPER_BLAS_VENDOR} MATCHES "Intel")
-                # all Intel* libraries share the same include path
-                pkg_check_modules(DepBLAS REQUIRED mkl-sdl)
-            elseif (${WHISPER_BLAS_VENDOR} MATCHES "NVHPC")
-                # this doesn't provide pkg-config
-                # suggest to assign BLAS_INCLUDE_DIRS on your own
-                if ("${NVHPC_VERSION}" STREQUAL "")
-                    message(WARNING "Better to set NVHPC_VERSION")
-                else()
-                    set(DepBLAS_FOUND ON)
-                    set(DepBLAS_INCLUDE_DIRS "/opt/nvidia/hpc_sdk/${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}/${NVHPC_VERSION}/math_libs/include")
-                endif()
-            endif()
-            if (DepBLAS_FOUND)
-                set(BLAS_INCLUDE_DIRS ${DepBLAS_INCLUDE_DIRS})
-            else()
-                message(WARNING "BLAS_INCLUDE_DIRS neither been provided nor been automatically"
-                " detected by pkgconfig, trying to find cblas.h from possible paths...")
-                find_path(BLAS_INCLUDE_DIRS
-                    NAMES cblas.h
-                    HINTS
-                        /usr/include
-                        /usr/local/include
-                        /usr/include/openblas
-                        /opt/homebrew/opt/openblas/include
-                        /usr/local/opt/openblas/include
-                        /usr/include/x86_64-linux-gnu/openblas/include
-                )
-            endif()
-        endif()
-
-        message(STATUS "BLAS found, Includes: ${BLAS_INCLUDE_DIRS}")
-
-        add_compile_options(${BLAS_LINKER_FLAGS})
-
-        add_compile_definitions(GGML_USE_BLAS)
-
-        if (${BLAS_INCLUDE_DIRS} MATCHES "mkl" AND (${WHISPER_BLAS_VENDOR} MATCHES "Generic" OR ${WHISPER_BLAS_VENDOR} MATCHES "Intel"))
-            add_compile_definitions(GGML_BLAS_USE_MKL)
-        endif()
-
-        set(GGML_HEADERS_BLAS ggml-blas.h)
-        set(GGML_SOURCES_BLAS ggml-blas.cpp)
-
-        set(WHISPER_EXTRA_LIBS     ${WHISPER_EXTRA_LIBS}     ${BLAS_LIBRARIES})
-        set(WHISPER_EXTRA_INCLUDES ${WHISPER_EXTRA_INCLUDES} ${BLAS_INCLUDE_DIRS})
-    else()
-        message(WARNING "BLAS not found, please refer to "
-        "https://cmake.org/cmake/help/latest/module/FindBLAS.html#blas-lapack-vendors"
-        " to set correct WHISPER_BLAS_VENDOR")
-    endif()
-endif()
-
-if (WHISPER_MKL)
-    find_package(MKL CONFIG REQUIRED PATHS $ENV{MKLROOT})
-    message(STATUS "Imported oneMKL targets: ${MKL_IMPORTED_TARGETS}")
-    set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_USE_OPENBLAS)
-    set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_BLAS_USE_MKL)
-endif()
-
-if (WHISPER_CUBLAS)
-    message(WARNING "WHISPER_CUBLAS is deprecated and will be removed in the future.\nUse WHISPER_CUDA instead")
-    set(WHISPER_CUDA ON)
-endif()
-
-if (WHISPER_CUDA)
-    cmake_minimum_required(VERSION 3.18)  # for CMAKE_CUDA_ARCHITECTURES
-
-    find_package(CUDAToolkit)
-
-    if (CUDAToolkit_FOUND)
-        message(STATUS "cuBLAS found")
-
-        if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
-            # 52 == lowest CUDA 12 standard
-            # 60 == f16 CUDA intrinsics
-            # 61 == integer CUDA intrinsics
-            # 70 == compute capability at which unrolling a loop in mul_mat_q kernels is faster
-            if (WHISPER_CUDA_F16 OR WHISPER_CUDA_DMMV_F16)
-                set(CMAKE_CUDA_ARCHITECTURES "60;61;70") # needed for f16 CUDA intrinsics
-            else()
-                set(CMAKE_CUDA_ARCHITECTURES "52;61;70") # lowest CUDA 12 standard + lowest for integer intrinsics
-                #set(CMAKE_CUDA_ARCHITECTURES "OFF") # use this to compile much faster, but only F16 models work
-            endif()
-        endif()
-        message(STATUS "Using CUDA architectures: ${CMAKE_CUDA_ARCHITECTURES}")
-
-        enable_language(CUDA)
-
-        file(GLOB   GGML_SOURCES_CUDA "ggml-cuda/*.cu")
-        list(APPEND GGML_SOURCES_CUDA  ggml-cuda.h)
-        list(APPEND GGML_SOURCES_CUDA  ggml-cuda.cu)
-
-        file(GLOB SRCS "ggml-cuda/template-instances/fattn-wmma*.cu")
-        list(APPEND GGML_SOURCES_CUDA ${SRCS})
-        file(GLOB SRCS "ggml-cuda/template-instances/mmq*.cu")
-        list(APPEND GGML_SOURCES_CUDA ${SRCS})
-
-        if (WHISPER_CUDA_FA_ALL_QUANTS)
-            file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*.cu")
-            list(APPEND GGML_SOURCES_CUDA ${SRCS})
-            add_compile_definitions(GGML_CUDA_FA_ALL_QUANTS)
-        else()
-            file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu")
-            list(APPEND GGML_SOURCES_CUDA ${SRCS})
-            file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu")
-            list(APPEND GGML_SOURCES_CUDA ${SRCS})
-            file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*f16-f16.cu")
-            list(APPEND GGML_SOURCES_CUDA ${SRCS})
-        endif()
-
-        add_compile_definitions(GGML_USE_CUDA)
-        add_compile_definitions(GGML_CUDA_USE_GRAPHS)
-
-        if (WHISPER_STATIC)
-            if (WIN32)
-                # As of 12.3.1 CUDA Tookit for Windows does not offer a static cublas library
-                set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas CUDA::cublasLt CUDA::cufft)
-            else ()
-                set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static CUDA::cufft_static)
-            endif()
-        else()
-            set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS} CUDA::cudart CUDA::cublas CUDA::cublasLt CUDA::cufft)
-        endif()
-
-        set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS} CUDA::cuda_driver)
-    else()
-        message(FATAL_ERROR "cuBLAS not found")
-    endif()
-endif()
-
-
-if (WHISPER_HIPBLAS)
-    list(APPEND CMAKE_PREFIX_PATH /opt/rocm)
-    if (NOT ${CMAKE_C_COMPILER_ID} MATCHES "Clang")
-        message(WARNING "Only LLVM is supported for HIP, hint: CC=/opt/rocm/llvm/bin/clang")
-    endif()
-    if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
-        message(WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++")
-    endif()
-
-    find_package(hip)
-    find_package(hipblas)
-    find_package(rocblas)
-
-    if (${hipblas_FOUND} AND ${hip_FOUND})
-        message(STATUS "HIP and hipBLAS found")
-        set(GGML_HEADERS_ROCM "ggml-cuda.h")
-
-        file(GLOB GGML_SOURCES_ROCM "ggml-cuda/*.cu")
-        list(APPEND GGML_SOURCES_ROCM "ggml-cuda.cu")
-
-        file(GLOB SRCS "ggml-cuda/template-instances/fattn-wmma*.cu")
-        list(APPEND GGML_SOURCES_CUDA ${SRCS})
-        file(GLOB SRCS "ggml-cuda/template-instances/mmq*.cu")
-        list(APPEND GGML_SOURCES_CUDA ${SRCS})
-
-        if (WHISPER_CUDA_FA_ALL_QUANTS)
-            file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*.cu")
-            list(APPEND GGML_SOURCES_CUDA ${SRCS})
-            add_compile_definitions(GGML_CUDA_FA_ALL_QUANTS)
-        else()
-            file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu")
-            list(APPEND GGML_SOURCES_CUDA ${SRCS})
-            file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu")
-            list(APPEND GGML_SOURCES_CUDA ${SRCS})
-            file(GLOB SRCS "ggml-cuda/template-instances/fattn-vec*f16-f16.cu")
-            list(APPEND GGML_SOURCES_CUDA ${SRCS})
-        endif()
-
-        add_compile_definitions(GGML_USE_HIPBLAS GGML_USE_CUDA)
-
-        set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE CXX)
-        if (WHISPER_STATIC)
-            message(FATAL_ERROR "Static linking not supported for HIP/ROCm")
-        endif()
-        set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS} hip::device PUBLIC hip::host roc::rocblas roc::hipblas)
-    else()
-        message(FATAL_ERROR "hipBLAS or HIP not found. Try setting CMAKE_PREFIX_PATH=/opt/rocm")
-    endif()
-endif()
-
-if( WHISPER_OPENVINO )
-    find_package(OpenVINO REQUIRED COMPONENTS Runtime)
-endif()
-
-if (WHISPER_SYCL)
-    if ( NOT DEFINED ENV{ONEAPI_ROOT})
-        message(FATAL_ERROR "Not detect ENV {ONEAPI_ROOT}, please install oneAPI & source it, like: source /opt/intel/oneapi/setvars.sh")
-    endif()
-    #todo: AOT
-
-    find_package(IntelSYCL REQUIRED)
-    if (WHISPER_SYCL_F16)
-        add_compile_definitions(GGML_SYCL_F16)
-    endif()
-    add_compile_definitions(GGML_USE_SYCL)
-
-    add_compile_options(-I./) #include DPCT
-    add_compile_options(-I/${SYCL_INCLUDE_DIR})
+# extra artifacts
+option(WHISPER_BUILD_TESTS    "whisper: build tests"          ${WHISPER_STANDALONE})
+option(WHISPER_BUILD_EXAMPLES "whisper: build examples"       ${WHISPER_STANDALONE})
+option(WHISPER_BUILD_SERVER   "whisper: build server example" ${WHISPER_STANDALONE})
 
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl -L${MKLROOT}/lib")
+# 3rd party libs
+option(WHISPER_CURL "whisper: use libcurl to download model from an URL" OFF)
+option(WHISPER_SDL2 "whisper: support for libSDL2" OFF)
 
-    set(GGML_HEADERS_SYCL ggml-sycl.h)
-    file(GLOB GGML_SOURCES_SYCL "ggml-sycl/*.cpp")
-    list(APPEND GGML_SOURCES_SYCL "ggml-sycl.cpp")
-
-    set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS} sycl OpenCL mkl_core pthread m dl mkl_sycl_blas mkl_intel_ilp64 mkl_tbb_thread)
-endif()
-# compiler flags
-
-if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
-    set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
-    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo")
-endif ()
-
-if (WHISPER_ALL_WARNINGS)
-    if (NOT MSVC)
-        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
-            -Wall                           \
-            -Wextra                         \
-            -Wpedantic                      \
-            -Wshadow                        \
-            -Wcast-qual                     \
-            -Wstrict-prototypes             \
-            -Wpointer-arith                 \
-            -Wno-unused-function            \
-        ")
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
-            -Wall                           \
-            -Wextra                         \
-            -Wpedantic                      \
-            -Wcast-qual                     \
-        ")
-    else()
-        # todo : msvc
-    endif()
-endif()
-
-if (NOT MSVC)
-    # TODO: temporary disabled until we figure out ggml-metal.m
-    #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=vla")
-    #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-math-errno -ffinite-math-only -funsafe-math-optimizations")
-endif()
-
-message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
-
-if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64")
-    message(STATUS "ARM detected")
-elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64le")
-    message(STATUS "PowerPC detected")
-else()
-    message(STATUS "x86 detected")
-    if (MSVC)
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
-        set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /utf-8")
-        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8")
-        if(NOT WHISPER_NO_AVX512)
-            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX512")
-            set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX512")
-            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX512")
-            # MSVC has no compile-time flags enabling specific
-            # AVX512 extensions, neither it defines the
-            # macros corresponding to the extensions.
-            # Do it manually.
-            if (NOT WHISPER_NO_AVX512_VBMI)
-                add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VBMI__>)
-                add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VBMI__>)
-            endif()
-            if (NOT WHISPER_NO_AVX512_VNNI)
-                add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VNNI__>)
-                add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VNNI__>)
-            endif()
-        elseif(NOT WHISPER_NO_AVX2)
-            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
-            set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX2")
-            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX2")
-        elseif(NOT WHISPER_NO_AVX)
-            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX")
-            set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:AVX")
-            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /arch:AVX")
-        endif()
-    else()
-        if (EMSCRIPTEN)
-            set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   -pthread -s TOTAL_STACK=5242880")
-            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -s TOTAL_STACK=5242880")
-        else()
-            if(NOT WHISPER_NO_AVX)
-                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx")
-            endif()
-            if(NOT WHISPER_NO_AVX2)
-                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx2")
-            endif()
-            if(NOT WHISPER_NO_AVX512)
-                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw")
-                if(NOT WHISPER_NO_AVX512_VBMI)
-                    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vbmi")
-                endif()
-                if(NOT WHISPER_NO_AVX512_VNNI)
-                    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mavx512vnni")
-                endif()
-            endif()
-            if(NOT WHISPER_NO_FMA)
-                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfma")
-            endif()
-            if(NOT WHISPER_NO_F16C)
-                set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mf16c")
-            endif()
-        endif()
-    endif()
-endif()
-
-#
-# POSIX conformance
-#
-
-# clock_gettime came in POSIX.1b (1993)
-# CLOCK_MONOTONIC came in POSIX.1-2001 / SUSv3 as optional
-# posix_memalign came in POSIX.1-2001 / SUSv3
-# M_PI is an XSI extension since POSIX.1-2001 / SUSv3, came in XPG1 (1985)
-add_compile_definitions(_XOPEN_SOURCE=600)
-
-# Somehow in OpenBSD whenever POSIX conformance is specified
-# some string functions rely on locale_t availability,
-# which was introduced in POSIX.1-2008, forcing us to go higher
-if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
-    remove_definitions(-D_XOPEN_SOURCE=600)
-    add_compile_definitions(_XOPEN_SOURCE=700)
-endif()
-
-# Data types, macros and functions related to controlling CPU affinity
-# are available on Linux through GNU extensions in libc
 if (CMAKE_SYSTEM_NAME MATCHES "Linux")
-    add_compile_definitions(_GNU_SOURCE)
-endif()
-
-# RLIMIT_MEMLOCK came in BSD, is not specified in POSIX.1,
-# and on macOS its availability depends on enabling Darwin extensions
-# similarly on DragonFly, enabling BSD extensions is necessary
-if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
-    add_compile_definitions(_DARWIN_C_SOURCE)
-endif()
-if (CMAKE_SYSTEM_NAME MATCHES "DragonFly")
-    add_compile_definitions(_DARWIN_C_SOURCE)
-endif()
-
-# alloca is a non-standard interface that is not visible on BSDs when
-# POSIX conformance is specified, but not all of them provide a clean way
-# to enable it in such cases
-if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
-    add_compile_definitions(__BSD_VISIBLE)
-endif()
-if (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
-    add_compile_definitions(_NETBSD_SOURCE)
-endif()
-if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
-    add_compile_definitions(_BSD_SOURCE)
-endif()
-
-if (WHISPER_PERF)
-    set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_PERF)
-endif()
+    option(WHISPER_FFMPEG "whisper: support building and linking with ffmpeg libs (avcodec, swresample, ...)" OFF)
+endif()
+
+option(WHISPER_COREML                "whisper: enable Core ML framework"  OFF)
+option(WHISPER_COREML_ALLOW_FALLBACK "whisper: allow non-CoreML fallback" OFF)
+option(WHISPER_OPENVINO              "whisper: support for OpenVINO"      OFF)
+
+# Required for relocatable CMake package
+include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/build-info.cmake)
+
+# override ggml options
+set(GGML_CCACHE             ${WHISPER_CCACHE})
+set(GGML_SANITIZE_THREAD    ${WHISPER_SANITIZE_THREAD})
+set(GGML_SANITIZE_ADDRESS   ${WHISPER_SANITIZE_ADDRESS})
+set(GGML_SANITIZE_UNDEFINED ${WHISPER_SANITIZE_UNDEFINED})
+set(GGML_ALL_WARNINGS       ${WHISPER_ALL_WARNINGS})
+set(GGML_FATAL_WARNINGS     ${WHISPER_FATAL_WARNINGS})
+
+# transition helpers
+function (whisper_option_depr TYPE OLD NEW)
+    if (${OLD})
+        message(${TYPE} "${OLD} is deprecated and will be removed in the future.\nUse ${NEW} instead\n")
+        set(${NEW} ON)
+    endif()
+endfunction()
+
+whisper_option_depr(FATAL_ERROR WHISPER_CUBLAS              GGML_CUDA)
+whisper_option_depr(WARNING     WHISPER_CUDA                GGML_CUDA)
+whisper_option_depr(WARNING     WHISPER_KOMPUTE             GGML_KOMPUTE)
+whisper_option_depr(WARNING     WHISPER_METAL               GGML_METAL)
+whisper_option_depr(WARNING     WHISPER_METAL_EMBED_LIBRARY GGML_METAL_EMBED_LIBRARY)
+whisper_option_depr(WARNING     WHISPER_NATIVE              GGML_NATIVE)
+whisper_option_depr(WARNING     WHISPER_OPENMP              GGML_OPENMP)
+whisper_option_depr(WARNING     WHISPER_RPC                 GGML_RPC)
+whisper_option_depr(WARNING     WHISPER_SYCL                GGML_SYCL)
+whisper_option_depr(WARNING     WHISPER_SYCL_F16            GGML_SYCL_F16)
 
 #
-# whisper.coreml - Core ML support
+# build the library
 #
 
-if (WHISPER_COREML)
-    set(TARGET whisper.coreml)
-
-    add_library(${TARGET}
-        coreml/whisper-encoder.h
-        coreml/whisper-encoder.mm
-        coreml/whisper-encoder-impl.h
-        coreml/whisper-encoder-impl.m
-        )
-
-    include(DefaultTargetOptions)
-
-    target_include_directories(${TARGET} PUBLIC
-        .
-        )
-
-    target_link_libraries(${TARGET} PRIVATE ${FOUNDATION_FRAMEWORK} ${COREML_FRAMEWORK})
-
-    set_target_properties(${TARGET} PROPERTIES
-        COMPILE_FLAGS "-fobjc-arc"
-        )
-    set_target_properties(${TARGET} PROPERTIES FOLDER "libs")
-endif()
-
-if (WHISPER_OPENVINO)
-    set(TARGET whisper.openvino)
-
-    add_library(${TARGET} OBJECT
-        openvino/whisper-openvino-encoder.h
-        openvino/whisper-openvino-encoder.cpp
-        )
-
-    target_include_directories(${TARGET} PUBLIC
-        .
-        )
-
-    set_property(TARGET ${TARGET} PROPERTY POSITION_INDEPENDENT_CODE ON)
-    set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DWHISPER_USE_OPENVINO)
-
-    target_link_libraries(${TARGET} PRIVATE openvino::runtime)
-    set_target_properties(${TARGET} PROPERTIES FOLDER "libs")
-endif()
+add_subdirectory(ggml)
+add_subdirectory(src)
 
 #
-# whisper - this is the main library of the project
+# install
 #
 
-set(TARGET whisper)
-
-add_library(${TARGET}
-    ggml.h
-    ggml.c
-    ggml-alloc.h
-    ggml-alloc.c
-    ggml-backend.h
-    ggml-backend.c
-    ggml-quants.h
-    ggml-quants.c
-    ${GGML_SOURCES_METAL}
-    ${GGML_SOURCES_CUDA}
-    ${GGML_SOURCES_SYCL}  ${GGML_HEADERS_SYCL}
-    ${GGML_SOURCES_ROCM}  ${GGML_HEADERS_ROCM}
-    ${GGML_SOURCES_BLAS}  ${GGML_HEADERS_BLAS}
-    whisper.h
-    whisper.cpp
-    )
-
-if (WHISPER_CUDA)
-    target_sources(${TARGET} PRIVATE whisper-mel-cuda.cu)
-endif()
-
-include_directories (
-    .
-)
-# Set the version numbers
-set_target_properties(whisper PROPERTIES
-    VERSION ${PROJECT_VERSION}
-    SOVERSION ${SOVERSION}
-)
-
-include(DefaultTargetOptions)
-
-target_include_directories(${TARGET} PUBLIC
-    .
-    )
-
-if (WHISPER_COREML)
-    target_link_libraries(${TARGET} PRIVATE whisper.coreml)
-endif()
-
-if (WHISPER_OPENVINO)
-    target_link_libraries(${TARGET} PRIVATE whisper.openvino)
-endif()
-
-if (WHISPER_MKL)
-    target_link_libraries(${TARGET} PUBLIC MKL::MKL)
-endif()
-
-if (MSVC)
-    target_link_libraries(${TARGET} PRIVATE ${WHISPER_EXTRA_LIBS} ${CMAKE_THREAD_LIBS_INIT})
-
-    set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -D_CRT_SECURE_NO_WARNINGS)
-else()
-    target_link_libraries(${TARGET} PRIVATE m ${WHISPER_EXTRA_LIBS} ${CMAKE_THREAD_LIBS_INIT})
-endif()
-
-if (BUILD_SHARED_LIBS)
-    set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON)
-    target_link_libraries(${TARGET} PUBLIC
-        ${CMAKE_DL_LIBS}
-        )
-
-    target_compile_definitions(${TARGET} PUBLIC
-        WHISPER_SHARED
-        GGML_SHARED
-        )
-
-    target_compile_definitions(${TARGET} PRIVATE
-        WHISPER_BUILD
-        GGML_BUILD
-        )
-
-    if (WHISPER_METAL)
-        # TODO: I think this should make ggml-metal.m "see" the ggml-metal.metal file from the "bin" directory
-        #       but for some reason it does not work here like it does in llama.cpp
-        set_target_properties(${TARGET} PROPERTIES RESOURCE "${CMAKE_CURRENT_SOURCE_DIR}/ggml-metal.metal")
-    endif()
-endif()
-
-if (GGML_SOURCES_CUDA)
-    message(STATUS "GGML CUDA sources found, configuring CUDA architecture")
-    # Only configure gmml CUDA architectures is not globally set
-    if (NOT DEFINED GGML_CUDA_ARCHITECTURES)
-        # Not overriden by user, so set defaults
-        set(GGML_CUDA_ARCHITECTURES 52 61 70)
-    endif()
-    message(STATUS "GGML Configuring CUDA architectures ${GGML_CUDA_ARCHITECTURES}")
-    set_property(TARGET whisper PROPERTY CUDA_ARCHITECTURES ${GGML_CUDA_ARCHITECTURES})
-    set_property(TARGET whisper PROPERTY CUDA_SELECT_NVCC_ARCH_FLAGS "Auto")
-endif()
-
-if (EMSCRIPTEN)
-    set_target_properties(${TARGET} PROPERTIES COMPILE_FLAGS "-msimd128")
-endif()
-
-target_compile_definitions(${TARGET} PUBLIC
-    ${WHISPER_EXTRA_FLAGS}
-    )
-
-set_target_properties(${TARGET} PROPERTIES PUBLIC_HEADER "ggml.h;whisper.h")
-set_target_properties(${TARGET} PROPERTIES FOLDER "libs")
-
 include(GNUInstallDirs)
-
-install(TARGETS ${TARGET}
-    LIBRARY  DESTINATION lib
-    ARCHIVE  DESTINATION lib/static
-    RUNTIME  DESTINATION bin
-    RESOURCE DESTINATION bin
-    PUBLIC_HEADER DESTINATION include
-    )
-
-#
-# bindings
-#
-
-add_subdirectory(bindings)
+include(CMakePackageConfigHelpers)
+
+set(WHISPER_BUILD_NUMBER        ${BUILD_NUMBER})
+set(WHISPER_BUILD_COMMIT        ${BUILD_COMMIT})
+set(WHISPER_INSTALL_VERSION     ${CMAKE_PROJECT_VERSION})
+
+set(WHISPER_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Location of header  files")
+set(WHISPER_LIB_INSTALL_DIR     ${CMAKE_INSTALL_LIBDIR}     CACHE PATH "Location of library files")
+set(WHISPER_BIN_INSTALL_DIR     ${CMAKE_INSTALL_BINDIR}     CACHE PATH "Location of binary  files")
+
+get_directory_property(WHISPER_TRANSIENT_DEFINES COMPILE_DEFINITIONS)
+
+set_target_properties(whisper PROPERTIES PUBLIC_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/include/whisper.h)
+install(TARGETS whisper LIBRARY PUBLIC_HEADER)
+
+configure_package_config_file(
+        ${CMAKE_CURRENT_SOURCE_DIR}/cmake/whisper-config.cmake.in
+        ${CMAKE_CURRENT_BINARY_DIR}/whisper-config.cmake
+    INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/whisper
+    PATH_VARS
+    WHISPER_INCLUDE_INSTALL_DIR
+    WHISPER_LIB_INSTALL_DIR
+    WHISPER_BIN_INSTALL_DIR )
+
+write_basic_package_version_file(
+    ${CMAKE_CURRENT_BINARY_DIR}/whisper-version.cmake
+    VERSION ${WHISPER_INSTALL_VERSION}
+    COMPATIBILITY SameMajorVersion)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/whisper-config.cmake
+              ${CMAKE_CURRENT_BINARY_DIR}/whisper-version.cmake
+        DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/whisper)
+
+install(
+    FILES convert-hf-to-gguf.py
+    PERMISSIONS
+        OWNER_READ
+        OWNER_WRITE
+        OWNER_EXECUTE
+        GROUP_READ
+        GROUP_EXECUTE
+        WORLD_READ
+        WORLD_EXECUTE
+    DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+configure_file(cmake/whisper.pc.in
+        "${CMAKE_CURRENT_BINARY_DIR}/whisper.pc"
+        @ONLY)
+
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/whisper.pc"
+        DESTINATION lib/pkgconfig)
 
 #
 # programs, examples and tests
 #
 
 if (WHISPER_BUILD_TESTS AND NOT CMAKE_JS_VERSION)
-    enable_testing()
-    add_subdirectory(tests)
+    #include(CTest)
+    #add_subdirectory(tests)
 endif ()
 
 if (WHISPER_BUILD_EXAMPLES)
index adcbdbfe80d2b4bbe48bfaa7498c7a6244796e3c..ea51ef6a32751614933ef6c3eff5abe31c81c8e8 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,89 @@
-default: main bench quantize server
+# Define the default target now so that it is always the first target
+BUILD_TARGETS = \
+       main \
+       bench \
+       quantize \
+       server \
+       tests/test-c.o
+
+# Binaries only useful for tests
+TEST_TARGETS = \
+       tests/test-backend-ops
+
+# Deprecation aliases
+ifdef WHISPER_CUBLAS
+$(error WHISPER_CUBLAS is removed. Use GGML_CUDA instead.)
+endif
+
+ifdef WHISPER_CUDA
+GGML_CUDA := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_KOMPUTE
+GGML_KOMPUTE := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_METAL
+GGML_METAL := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_OPENMP
+GGML_OPENMP := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_RPC
+GGML_RPC := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_SYCL
+GGML_SYCL := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_SYCL_F16
+GGML_SYCL_F16 := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_OPENBLAS
+GGML_OPENBLAS := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_OPENBLAS64
+GGML_OPENBLAS64 := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_BLIS
+GGML_BLIS := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_NO_WHISPERFILE
+GGML_NO_WHISPERFILE := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_NO_ACCELERATE
+GGML_NO_ACCELERATE := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_NO_OPENMP
+GGML_NO_OPENMP := 1
+DEPRECATE_WARNING := 1
+endif
+
+ifdef WHISPER_NO_METAL
+GGML_NO_METAL := 1
+DEPRECATE_WARNING := 1
+endif
 
 ifndef UNAME_S
 UNAME_S := $(shell uname -s)
@@ -12,12 +97,6 @@ ifndef UNAME_M
 UNAME_M := $(shell uname -m)
 endif
 
-ifndef NVCC_VERSION
-       ifeq ($(call,$(shell which nvcc))$(.SHELLSTATUS),0)
-               NVCC_VERSION := $(shell nvcc --version | egrep -o "V[0-9]+.[0-9]+.[0-9]+" | cut -c2-)
-       endif
-endif
-
 # In GNU make default CXX is g++ instead of c++.  Let's fix that so that users
 # of non-gcc compilers don't have to provide g++ alias or wrapper.
 DEFCC  := cc
@@ -29,16 +108,17 @@ ifeq ($(origin CXX),default)
 CXX := $(DEFCXX)
 endif
 
-CCV  := $(shell $(CC) --version | head -n 1)
-CXXV := $(shell $(CXX) --version | head -n 1)
-
 # Mac OS + Arm can report x86_64
 # ref: https://github.com/ggerganov/whisper.cpp/issues/66#issuecomment-1282546789
 ifeq ($(UNAME_S),Darwin)
-       WHISPER_NO_OPENMP := 1
+       ifndef GGML_NO_METAL
+               GGML_METAL := 1
+       endif
+
+       GGML_NO_OPENMP := 1
 
        ifneq ($(UNAME_P),arm)
-               SYSCTL_M := $(shell sysctl -n hw.optional.arm64)
+               SYSCTL_M := $(shell sysctl -n hw.optional.arm64 2>/dev/null)
                ifeq ($(SYSCTL_M),1)
                        # UNAME_P := arm
                        # UNAME_M := arm64
@@ -47,75 +127,201 @@ ifeq ($(UNAME_S),Darwin)
        endif
 endif
 
+ifdef GGML_METAL
+       GGML_METAL_EMBED_LIBRARY := 1
+endif
+
+ifdef GGML_RPC
+       BUILD_TARGETS += rpc-server
+endif
+
+ifeq ($(shell sdl2-config --cflags --libs 2>/dev/null),)
+else
+       BUILD_TARGETS += \
+               command \
+               stream \
+               lsp \
+               talk \
+               talk-llama
+endif
+
+default: $(BUILD_TARGETS)
+
+test: $(TEST_TARGETS)
+       @failures=0; \
+       for test_target in $(TEST_TARGETS); do \
+               echo "Running test $$test_target..."; \
+               ./$$test_target; \
+               if [ $$? -ne 0 ]; then \
+                       printf 'Test %s FAILED!\n\n' $$test_target; \
+                       failures=$$(( failures + 1 )); \
+               else \
+                       printf 'Test %s passed.\n\n' $$test_target; \
+               fi; \
+       done; \
+       failures=$$(( failures + $$? )); \
+       if [ $$failures -gt 0 ]; then \
+               printf '\n%s tests failed.\n' $$failures; \
+               exit 1; \
+       fi
+       @echo 'All tests passed.'
+
+all: $(BUILD_TARGETS) $(TEST_TARGETS)
+
+ifdef RISCV_CROSS_COMPILE
+       CC      := riscv64-unknown-linux-gnu-gcc
+       CXX     := riscv64-unknown-linux-gnu-g++
+endif
+
 #
 # Compile flags
 #
 
-CFLAGS   = -I.              -O3 -DNDEBUG -std=c11   -fPIC
-CXXFLAGS = -I. -I./examples -O3 -DNDEBUG -std=c++11 -fPIC
-LDFLAGS  =
-
-ifdef MACOSX_DEPLOYMENT_TARGET
-       CFLAGS   += -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
-       CXXFLAGS += -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
-       LDFLAGS  += -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
-endif
+# keep standard at C11 and C++11
+MK_CPPFLAGS  = -Iggml/include -Iggml/src -Iinclude -Isrc -Iexamples
+MK_CFLAGS    = -std=c11   -fPIC
+MK_CXXFLAGS  = -std=c++11 -fPIC
+MK_NVCCFLAGS = -std=c++11
+
+ifndef WHISPER_NO_CCACHE
+CCACHE := $(shell which ccache)
+ifdef CCACHE
+export CCACHE_SLOPPINESS = time_macros
+$(info I ccache found, compilation results will be cached. Disable with WHISPER_NO_CCACHE.)
+CC    := $(CCACHE) $(CC)
+CXX   := $(CCACHE) $(CXX)
+else
+$(info I ccache not found. Consider installing it for faster compilation.)
+endif # CCACHE
+endif # WHISPER_NO_CCACHE
 
 # clock_gettime came in POSIX.1b (1993)
 # CLOCK_MONOTONIC came in POSIX.1-2001 / SUSv3 as optional
 # posix_memalign came in POSIX.1-2001 / SUSv3
 # M_PI is an XSI extension since POSIX.1-2001 / SUSv3, came in XPG1 (1985)
-CFLAGS   += -D_XOPEN_SOURCE=600
-CXXFLAGS += -D_XOPEN_SOURCE=600
+MK_CPPFLAGS += -D_XOPEN_SOURCE=600
 
 # Somehow in OpenBSD whenever POSIX conformance is specified
 # some string functions rely on locale_t availability,
 # which was introduced in POSIX.1-2008, forcing us to go higher
 ifeq ($(UNAME_S),OpenBSD)
-       CFLAGS   += -U_XOPEN_SOURCE -D_XOPEN_SOURCE=700
-       CXXFLAGS += -U_XOPEN_SOURCE -D_XOPEN_SOURCE=700
+       MK_CPPFLAGS += -U_XOPEN_SOURCE -D_XOPEN_SOURCE=700
 endif
 
-# Data types, macros and functions related to controlling CPU affinity
-# are available on Linux through GNU extensions in libc
+# Data types, macros and functions related to controlling CPU affinity and
+# some memory allocation are available on Linux through GNU extensions in libc
 ifeq ($(UNAME_S),Linux)
-       CFLAGS   += -D_GNU_SOURCE
-       CXXFLAGS += -D_GNU_SOURCE
+       MK_CPPFLAGS += -D_GNU_SOURCE
 endif
 
 # RLIMIT_MEMLOCK came in BSD, is not specified in POSIX.1,
 # and on macOS its availability depends on enabling Darwin extensions
 # similarly on DragonFly, enabling BSD extensions is necessary
 ifeq ($(UNAME_S),Darwin)
-       CFLAGS   += -D_DARWIN_C_SOURCE
-       CXXFLAGS += -D_DARWIN_C_SOURCE
+       MK_CPPFLAGS += -D_DARWIN_C_SOURCE
 endif
 ifeq ($(UNAME_S),DragonFly)
-       CFLAGS   += -D__BSD_VISIBLE
-       CXXFLAGS += -D__BSD_VISIBLE
+       MK_CPPFLAGS += -D__BSD_VISIBLE
 endif
 
 # alloca is a non-standard interface that is not visible on BSDs when
 # POSIX conformance is specified, but not all of them provide a clean way
 # to enable it in such cases
 ifeq ($(UNAME_S),FreeBSD)
-       CFLAGS   += -D__BSD_VISIBLE
-       CXXFLAGS += -D__BSD_VISIBLE
+       MK_CPPFLAGS += -D__BSD_VISIBLE
 endif
 ifeq ($(UNAME_S),NetBSD)
-       CFLAGS   += -D_NETBSD_SOURCE
-       CXXFLAGS += -D_NETBSD_SOURCE
+       MK_CPPFLAGS += -D_NETBSD_SOURCE
 endif
 ifeq ($(UNAME_S),OpenBSD)
-       CFLAGS   += -D_BSD_SOURCE
-       CXXFLAGS += -D_BSD_SOURCE
+       MK_CPPFLAGS += -D_BSD_SOURCE
+endif
+
+ifdef GGML_SCHED_MAX_COPIES
+       MK_CPPFLAGS += -DGGML_SCHED_MAX_COPIES=$(GGML_SCHED_MAX_COPIES)
+endif
+
+ifdef WHISPER_DEBUG
+       MK_CFLAGS    += -O0 -g
+       MK_CXXFLAGS  += -O0 -g
+       MK_LDFLAGS   += -g
+       MK_NVCCFLAGS += -O0 -g
+
+       ifeq ($(UNAME_S),Linux)
+               MK_CPPFLAGS += -D_GLIBCXX_ASSERTIONS
+       endif
+else
+       MK_CPPFLAGS += -DNDEBUG
+endif
+
+ifdef WHISPER_SANITIZE_THREAD
+       MK_CFLAGS   += -fsanitize=thread -g
+       MK_CXXFLAGS += -fsanitize=thread -g
+       MK_LDFLAGS  += -fsanitize=thread -g
+endif
+
+ifdef WHISPER_SANITIZE_ADDRESS
+       MK_CFLAGS   += -fsanitize=address -fno-omit-frame-pointer -g
+       MK_CXXFLAGS += -fsanitize=address -fno-omit-frame-pointer -g
+       MK_LDFLAGS  += -fsanitize=address -fno-omit-frame-pointer -g
+endif
+
+ifdef WHISPER_SANITIZE_UNDEFINED
+       MK_CFLAGS   += -fsanitize=undefined -g
+       MK_CXXFLAGS += -fsanitize=undefined -g
+       MK_LDFLAGS  += -fsanitize=undefined -g
+endif
+
+ifdef WHISPER_SERVER_VERBOSE
+       MK_CPPFLAGS += -DSERVER_VERBOSE=$(WHISPER_SERVER_VERBOSE)
+endif
+
+ifdef WHISPER_SERVER_SSL
+       MK_CPPFLAGS += -DCPPHTTPLIB_OPENSSL_SUPPORT
+       MK_LDFLAGS  += -lssl -lcrypto
+endif
+
+ifdef WHISPER_DISABLE_LOGS
+       MK_CPPFLAGS += -DLOG_DISABLE_LOGS
+endif # WHISPER_DISABLE_LOGS
+
+# warnings
+WARN_FLAGS = \
+       -Wall \
+       -Wextra \
+       -Wpedantic \
+       -Wcast-qual \
+       -Wno-unused-function
+
+MK_CFLAGS += \
+       $(WARN_FLAGS) \
+       -Wshadow \
+       -Wstrict-prototypes \
+       -Wpointer-arith \
+       -Wmissing-prototypes \
+       -Werror=implicit-int \
+       -Werror=implicit-function-declaration
+
+MK_CXXFLAGS += \
+       $(WARN_FLAGS) \
+       -Wmissing-declarations \
+       -Wmissing-noreturn
+
+ifeq ($(WHISPER_FATAL_WARNINGS),1)
+       MK_CFLAGS   += -Werror
+       MK_CXXFLAGS += -Werror
+endif
+
+# this version of Apple ld64 is buggy
+ifneq '' '$(findstring dyld-1015.7,$(shell $(CC) $(LDFLAGS) -Wl,-v 2>&1))'
+       MK_CPPFLAGS += -DHAVE_BUGGY_APPLE_LINKER
 endif
 
 # OS specific
 # TODO: support Windows
-ifeq ($(filter $(UNAME_S),Linux Darwin DragonFly FreeBSD NetBSD OpenBSD Haiku),$(UNAME_S))
-       CFLAGS   += -pthread
-       CXXFLAGS += -pthread
+ifneq '' '$(filter $(UNAME_S),Linux Darwin FreeBSD NetBSD OpenBSD Haiku)'
+       MK_CFLAGS   += -pthread
+       MK_CXXFLAGS += -pthread
 endif
 
 # detect Windows
@@ -123,253 +329,508 @@ ifneq ($(findstring _NT,$(UNAME_S)),)
        _WIN32 := 1
 endif
 
+# library name prefix
+ifneq ($(_WIN32),1)
+       LIB_PRE := lib
+endif
+
+# Dynamic Shared Object extension
+ifneq ($(_WIN32),1)
+       DSO_EXT := .so
+else
+       DSO_EXT := .dll
+endif
+
 # Windows Sockets 2 (Winsock) for network-capable apps
 ifeq ($(_WIN32),1)
        LWINSOCK2 := -lws2_32
 endif
 
+ifdef WHISPER_GPROF
+       MK_CFLAGS   += -pg
+       MK_CXXFLAGS += -pg
+endif
+
 # Architecture specific
 # TODO: probably these flags need to be tweaked on some architectures
 #       feel free to update the Makefile for your architecture and send a pull request or issue
-ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686 amd64))
-       ifeq ($(UNAME_S),Darwin)
-               CPUINFO_CMD := sysctl machdep.cpu.features machdep.cpu.leaf7_features
-       else ifeq ($(UNAME_S),Linux)
-               CPUINFO_CMD := cat /proc/cpuinfo
-       else ifneq (,$(filter MINGW32_NT% MINGW64_NT% MSYS_NT%,$(UNAME_S)))
-               CPUINFO_CMD := cat /proc/cpuinfo
-       else ifneq (,$(filter DragonFly FreeBSD,$(UNAME_S)))
-               CPUINFO_CMD := grep Features /var/run/dmesg.boot
-       else ifeq ($(UNAME_S),Haiku)
-               CPUINFO_CMD := sysinfo -cpu
-       endif
 
-       # x86 ISA extensions (chronological order)
-       ifdef CPUINFO_CMD
-               SSE3_M := $(shell $(CPUINFO_CMD) | grep -iwE 'PNI|SSE3')
-               SSSE3_M := $(shell $(CPUINFO_CMD) | grep -iw 'SSSE3')
-               AVX_M := $(shell $(CPUINFO_CMD) | grep -iwE 'AVX|AVX1.0')
-               F16C_M := $(shell $(CPUINFO_CMD) | grep -iw 'F16C')
-               FMA_M := $(shell $(CPUINFO_CMD) | grep -iw 'FMA')
-               AVX2_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX2')
-               AVX512F_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX512F')
-               AVX512VBMI_M := $(shell $(CPUINFO_CMD) | grep -iw 'AVX512VBMI')
-               AVX512VNNI_M := $(shell $(CPUINFO_CMD) | grep -iwE 'AVX512_VNNI|AVX512VNNI')
-
-               # AVX-512 has many subsets, so let's make it easy to disable them all
-               ifneq ($(filter-out 0,$(WHISPER_NO_AVX512)),)
-                       AVX512F_M :=
-                       AVX512VBMI_M :=
-                       AVX512VNNI_M :=
-               endif
+ifndef RISCV
 
-               ifneq (,$(SSE3_M))
-                       CFLAGS   += -msse3
-                       CXXFLAGS += -msse3
-               endif
+ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686 amd64))
+       # Use all CPU extensions that are available:
+       MK_CFLAGS     += -march=native -mtune=native
+       HOST_CXXFLAGS += -march=native -mtune=native
 
-               ifneq (,$(SSSE3_M))
-                       CFLAGS   += -mssse3
-                       CXXFLAGS += -mssse3
-               endif
+       # Usage AVX-only
+       #MK_CFLAGS   += -mfma -mf16c -mavx
+       #MK_CXXFLAGS += -mfma -mf16c -mavx
 
-               ifneq (,$(AVX_M))
-                       CFLAGS   += -mavx
-                       CXXFLAGS += -mavx
-               endif
+       # Usage SSSE3-only (Not is SSE3!)
+       #MK_CFLAGS   += -mssse3
+       #MK_CXXFLAGS += -mssse3
+endif
 
-               ifneq (,$(F16C_M))
-                       CFLAGS   += -mf16c
-                       CXXFLAGS += -mf16c
-               endif
+ifneq '' '$(findstring mingw,$(shell $(CC) -dumpmachine))'
+       # The stack is only 16-byte aligned on Windows, so don't let gcc emit aligned moves.
+       # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54412
+       # https://github.com/ggerganov/llama.cpp/issues/2922
+       MK_CFLAGS   += -Xassembler -muse-unaligned-vector-move
+       MK_CXXFLAGS += -Xassembler -muse-unaligned-vector-move
 
-               ifneq (,$(FMA_M))
-                       CFLAGS   += -mfma
-                       CXXFLAGS += -mfma
-               endif
+       # Target Windows 8 for PrefetchVirtualMemory
+       MK_CPPFLAGS += -D_WIN32_WINNT=0x602
+endif
 
-               ifneq (,$(AVX2_M))
-                       CFLAGS   += -mavx2
-                       CXXFLAGS += -mavx2
+ifneq ($(filter aarch64%,$(UNAME_M)),)
+       # Apple M1, M2, etc.
+       # Raspberry Pi 3, 4, Zero 2 (64-bit)
+       # Nvidia Jetson
+       MK_CFLAGS   += -mcpu=native
+       MK_CXXFLAGS += -mcpu=native
+       JETSON_RELEASE_INFO = $(shell jetson_release)
+       ifdef JETSON_RELEASE_INFO
+               ifneq ($(filter TX2%,$(JETSON_RELEASE_INFO)),)
+                       JETSON_EOL_MODULE_DETECT = 1
+                       CC = aarch64-unknown-linux-gnu-gcc
+                       cxx = aarch64-unknown-linux-gnu-g++
                endif
+       endif
+endif
 
-               ifneq (,$(AVX512F_M))
-                       CFLAGS   += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw
-                       CXXFLAGS += -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw
-               endif
+ifneq ($(filter armv6%,$(UNAME_M)),)
+       # Raspberry Pi 1, Zero
+       MK_CFLAGS   += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access
+       MK_CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access
+endif
 
-               ifneq (,$(AVX512VBMI_M))
-                       CFLAGS   += -mavx512vbmi
-                       CXXFLAGS += -mavx512vbmi
-               endif
+ifneq ($(filter armv7%,$(UNAME_M)),)
+       # Raspberry Pi 2
+       MK_CFLAGS   += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations
+       MK_CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations
+endif
 
-               ifneq (,$(AVX512VNNI_M))
-                       CFLAGS   += -mavx512vnni
-                       CXXFLAGS += -mavx512vnni
-               endif
-       endif
+ifneq ($(filter armv8%,$(UNAME_M)),)
+       # Raspberry Pi 3, 4, Zero 2 (32-bit)
+       MK_CFLAGS   += -mfp16-format=ieee -mno-unaligned-access
+       MK_CXXFLAGS += -mfp16-format=ieee -mno-unaligned-access
 endif
 
 ifneq ($(filter ppc64%,$(UNAME_M)),)
        POWER9_M := $(shell grep "POWER9" /proc/cpuinfo)
        ifneq (,$(findstring POWER9,$(POWER9_M)))
-               CFLAGS += -mpower9-vector
-       endif
-       # Require c++23's std::byteswap for big-endian support.
-       ifeq ($(UNAME_M),ppc64)
-               CXXFLAGS += -std=c++23 -DGGML_BIG_ENDIAN
+               MK_CFLAGS   += -mcpu=power9
+               MK_CXXFLAGS += -mcpu=power9
        endif
 endif
 
-ifndef WHISPER_NO_ACCELERATE
-       # Mac M1 - include Accelerate framework
-       ifeq ($(UNAME_S),Darwin)
-               CFLAGS      += -DGGML_USE_ACCELERATE -DGGML_USE_BLAS
-               CFLAGS      += -DACCELERATE_NEW_LAPACK
-               CFLAGS      += -DACCELERATE_LAPACK_ILP64
-               CXXFLAGS    += -DGGML_USE_ACCELERATE -DGGML_USE_BLAS
-               CXXFLAGS    += -DACCELERATE_NEW_LAPACK
-               CXXFLAGS    += -DACCELERATE_LAPACK_ILP64
-               LDFLAGS     += -framework Accelerate
-               WHISPER_OBJ += ggml-blas.o
-       endif
+ifneq ($(filter ppc64le%,$(UNAME_M)),)
+       MK_CFLAGS   += -mcpu=powerpc64le
+       MK_CXXFLAGS += -mcpu=powerpc64le
+       CUDA_POWER_ARCH = 1
 endif
 
-ifdef WHISPER_COREML
-       CXXFLAGS += -DWHISPER_USE_COREML
-       LDFLAGS  += -framework Foundation -framework CoreML
-
-ifdef WHISPER_COREML_ALLOW_FALLBACK
-       CXXFLAGS += -DWHISPER_COREML_ALLOW_FALLBACK
+ifneq ($(filter loongarch64%,$(UNAME_M)),)
+       MK_CFLAGS   += -mlasx
+       MK_CXXFLAGS += -mlasx
 endif
+
+else
+       MK_CFLAGS   += -march=rv64gcv -mabi=lp64d
+       MK_CXXFLAGS += -march=rv64gcv -mabi=lp64d
 endif
 
-ifndef WHISPER_NO_METAL
+ifndef GGML_NO_ACCELERATE
+       # Mac OS - include Accelerate framework.
+       # `-framework Accelerate` works both with Apple Silicon and Mac Intel
        ifeq ($(UNAME_S),Darwin)
-               WHISPER_METAL := 1
-
-               CFLAGS   += -DGGML_USE_METAL
-               CXXFLAGS += -DGGML_USE_METAL
-               LDFLAGS  += -framework Foundation -framework Metal -framework MetalKit
+               MK_CPPFLAGS += -DGGML_USE_ACCELERATE -DGGML_USE_BLAS
+               MK_CPPFLAGS += -DACCELERATE_NEW_LAPACK
+               MK_CPPFLAGS += -DACCELERATE_LAPACK_ILP64
+               MK_LDFLAGS  += -framework Accelerate
+               OBJ_GGML    += ggml/src/ggml-blas.o
+       endif
+endif # GGML_NO_ACCELERATE
+
+ifndef GGML_NO_OPENMP
+       MK_CPPFLAGS += -DGGML_USE_OPENMP
+       MK_CFLAGS   += -fopenmp
+       MK_CXXFLAGS += -fopenmp
+endif # GGML_NO_OPENMP
+
+ifdef GGML_OPENBLAS
+       MK_CPPFLAGS += -DGGML_USE_BLAS $(shell pkg-config --cflags-only-I openblas)
+       MK_CFLAGS   += $(shell pkg-config --cflags-only-other openblas)
+       MK_LDFLAGS  += $(shell pkg-config --libs openblas)
+       OBJ_GGML    += ggml/src/ggml-blas.o
+endif # GGML_OPENBLAS
+
+ifdef GGML_OPENBLAS64
+       MK_CPPFLAGS += -DGGML_USE_BLAS $(shell pkg-config --cflags-only-I openblas64)
+       MK_CFLAGS   += $(shell pkg-config --cflags-only-other openblas64)
+       MK_LDFLAGS  += $(shell pkg-config --libs openblas64)
+       OBJ_GGML    += ggml/src/ggml-blas.o
+endif # GGML_OPENBLAS64
+
+ifdef GGML_BLIS
+       MK_CPPFLAGS += -DGGML_USE_BLAS -I/usr/local/include/blis -I/usr/include/blis
+       MK_LDFLAGS  += -lblis -L/usr/local/lib
+       OBJ_GGML    += ggml/src/ggml-blas.o
+endif # GGML_BLIS
+
+ifdef GGML_RPC
+       MK_CPPFLAGS += -DGGML_USE_RPC
+       OBJ_GGML    += ggml/src/ggml-rpc.o
+endif # GGML_RPC
+
+OBJ_CUDA_TMPL      = $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-wmma*.cu))
+OBJ_CUDA_TMPL     += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/mmq*.cu))
+
+ifdef GGML_CUDA_FA_ALL_QUANTS
+       OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*.cu))
+else
+       OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu))
+       OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu))
+       OBJ_CUDA_TMPL += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*f16-f16.cu))
+endif # GGML_CUDA_FA_ALL_QUANTS
+
+ifdef GGML_CUDA
+       ifneq ('', '$(wildcard /opt/cuda)')
+               CUDA_PATH ?= /opt/cuda
+       else
+               CUDA_PATH ?= /usr/local/cuda
        endif
-endif
 
-ifndef WHISPER_NO_OPENMP
-       CXXFLAGS += -DGGML_USE_OPENMP
-       CFLAGS   += -fopenmp
-       CXXFLAGS += -fopenmp
-endif # WHISPER_NO_OPENMP
+       MK_CPPFLAGS  += -DGGML_USE_CUDA -I$(CUDA_PATH)/include -I$(CUDA_PATH)/targets/$(UNAME_M)-linux/include -DGGML_CUDA_USE_GRAPHS
+       MK_LDFLAGS   += -lcuda -lcublas -lculibos -lcudart -lcufft -lcublasLt -lpthread -ldl -lrt -L$(CUDA_PATH)/lib64 -L/usr/lib64 -L$(CUDA_PATH)/targets/$(UNAME_M)-linux/lib -L$(CUDA_PATH)/lib64/stubs -L/usr/lib/wsl/lib
+       MK_NVCCFLAGS += -use_fast_math
 
-ifdef WHISPER_OPENBLAS
-       CXXFLAGS    += -DGGML_USE_BLAS $(shell pkg-config --cflags-only-I openblas)
-       CFLAGS      += $(shell pkg-config --cflags-only-other openblas)
-       LDFLAGS     += $(shell pkg-config --libs openblas)
-       WHISPER_OBJ += ggml-blas.o
-endif # WHISPER_OPENBLAS
+       OBJ_GGML += ggml/src/ggml-cuda.o
+       OBJ_GGML += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/*.cu))
+       OBJ_GGML += $(OBJ_CUDA_TMPL)
 
-ifdef WHISPER_OPENBLAS64
-       CXXFLAGS    += -DGGML_USE_BLAS $(shell pkg-config --cflags-only-I openblas64)
-       CFLAGS      += $(shell pkg-config --cflags-only-other openblas64)
-       LDFLAGS     += $(shell pkg-config --libs openblas64)
-       WHISPER_OBJ += ggml-blas.o
-endif # WHISPER_OPENBLAS64
+       OBJ_WHISPER += src/whisper-mel-cuda.o
 
-ifdef WHISPER_BLIS
-       CXXFLAGS    += -DGGML_USE_BLAS -I/usr/local/include/blis -I/usr/include/blis
-       LDFLAGS     += -lblis -L/usr/local/lib
-       WHISPER_OBJ += ggml-blas.o
-endif # WHISPER_BLIS
+ifdef WHISPER_FATAL_WARNINGS
+       MK_NVCCFLAGS += -Werror all-warnings
+endif # WHISPER_FATAL_WARNINGS
 
-ifdef WHISPER_CUBLAS
-# WHISPER_CUBLAS is deprecated and will be removed in the future
-       WHISPER_CUDA := 1
+ifndef JETSON_EOL_MODULE_DETECT
+       MK_NVCCFLAGS += --forward-unknown-to-host-compiler
+endif # JETSON_EOL_MODULE_DETECT
+
+ifdef WHISPER_DEBUG
+       MK_NVCCFLAGS += -lineinfo
+endif # WHISPER_DEBUG
+
+ifdef GGML_CUDA_DEBUG
+       MK_NVCCFLAGS += --device-debug
+endif # GGML_CUDA_DEBUG
+
+ifdef GGML_CUDA_NVCC
+       NVCC = $(CCACHE) $(GGML_CUDA_NVCC)
+else
+       NVCC = $(CCACHE) nvcc
+endif #GGML_CUDA_NVCC
+
+ifdef CUDA_DOCKER_ARCH
+       MK_NVCCFLAGS += -Wno-deprecated-gpu-targets -arch=$(CUDA_DOCKER_ARCH)
+else ifndef CUDA_POWER_ARCH
+       MK_NVCCFLAGS += -arch=native
+endif # CUDA_DOCKER_ARCH
+
+ifdef GGML_CUDA_FORCE_DMMV
+       MK_NVCCFLAGS += -DGGML_CUDA_FORCE_DMMV
+endif # GGML_CUDA_FORCE_DMMV
+
+ifdef GGML_CUDA_FORCE_MMQ
+       MK_NVCCFLAGS += -DGGML_CUDA_FORCE_MMQ
+endif # GGML_CUDA_FORCE_MMQ
+
+ifdef GGML_CUDA_DMMV_X
+       MK_NVCCFLAGS += -DGGML_CUDA_DMMV_X=$(GGML_CUDA_DMMV_X)
+else
+       MK_NVCCFLAGS += -DGGML_CUDA_DMMV_X=32
+endif # GGML_CUDA_DMMV_X
+
+ifdef GGML_CUDA_MMV_Y
+       MK_NVCCFLAGS += -DGGML_CUDA_MMV_Y=$(GGML_CUDA_MMV_Y)
+else ifdef GGML_CUDA_DMMV_Y
+       MK_NVCCFLAGS += -DGGML_CUDA_MMV_Y=$(GGML_CUDA_DMMV_Y) # for backwards compatibility
+else
+       MK_NVCCFLAGS += -DGGML_CUDA_MMV_Y=1
+endif # GGML_CUDA_MMV_Y
+
+ifdef GGML_CUDA_F16
+       MK_NVCCFLAGS += -DGGML_CUDA_F16
+endif # GGML_CUDA_F16
+
+ifdef GGML_CUDA_DMMV_F16
+       MK_NVCCFLAGS += -DGGML_CUDA_F16
+endif # GGML_CUDA_DMMV_F16
+
+ifdef GGML_CUDA_KQUANTS_ITER
+       MK_NVCCFLAGS += -DK_QUANTS_PER_ITERATION=$(GGML_CUDA_KQUANTS_ITER)
+else
+       MK_NVCCFLAGS += -DK_QUANTS_PER_ITERATION=2
 endif
 
-OBJS_CUDA_TEMP_INST      = $(patsubst %.cu,%.o,$(wildcard ggml-cuda/template-instances/fattn-wmma*.cu))
-OBJS_CUDA_TEMP_INST     += $(patsubst %.cu,%.o,$(wildcard ggml-cuda/template-instances/mmq*.cu))
-ifdef WHISPER_CUDA_FA_ALL_QUANTS
-       OBJS_CUDA_TEMP_INST += $(patsubst %.cu,%.o,$(wildcard ggml-cuda/template-instances/fattn-vec*.cu))
+ifdef GGML_CUDA_PEER_MAX_BATCH_SIZE
+       MK_NVCCFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE=$(GGML_CUDA_PEER_MAX_BATCH_SIZE)
 else
-       OBJS_CUDA_TEMP_INST += $(patsubst %.cu,%.o,$(wildcard ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu))
-       OBJS_CUDA_TEMP_INST += $(patsubst %.cu,%.o,$(wildcard ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu))
-       OBJS_CUDA_TEMP_INST += $(patsubst %.cu,%.o,$(wildcard ggml-cuda/template-instances/fattn-vec*f16-f16.cu))
-endif # WHISPER_CUDA_FA_ALL_QUANTS
+       MK_NVCCFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE=128
+endif # GGML_CUDA_PEER_MAX_BATCH_SIZE
 
-ifdef WHISPER_CUDA
-       ifeq ($(shell expr $(NVCC_VERSION) \>= 11.6), 1)
-               CUDA_ARCH_FLAG ?= native
+ifdef GGML_CUDA_NO_PEER_COPY
+       MK_NVCCFLAGS += -DGGML_CUDA_NO_PEER_COPY
+endif # GGML_CUDA_NO_PEER_COPY
+
+ifdef GGML_CUDA_CCBIN
+       MK_NVCCFLAGS += -ccbin $(GGML_CUDA_CCBIN)
+endif # GGML_CUDA_CCBIN
+
+ifdef GGML_CUDA_FA_ALL_QUANTS
+       MK_NVCCFLAGS += -DGGML_CUDA_FA_ALL_QUANTS
+endif # GGML_CUDA_FA_ALL_QUANTS
+
+ifdef JETSON_EOL_MODULE_DETECT
+define NVCC_COMPILE
+       $(NVCC) -I. -Icommon -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -DNDEBUG -DGGML_USE_CUDA -I/usr/local/cuda/include -I/opt/cuda/include -I/usr/local/cuda/targets/aarch64-linux/include -std=c++11 -O3 $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(CUDA_CXXFLAGS)" -c $< -o $@
+endef # NVCC_COMPILE
+else
+define NVCC_COMPILE
+       $(NVCC) $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(CUDA_CXXFLAGS)" -c $< -o $@
+endef # NVCC_COMPILE
+endif # JETSON_EOL_MODULE_DETECT
+
+ggml/src/ggml-cuda/%.o: \
+       ggml/src/ggml-cuda/%.cu \
+       ggml/include/ggml.h \
+       ggml/src/ggml-common.h \
+       ggml/src/ggml-cuda/common.cuh
+       $(NVCC_COMPILE)
+
+ggml/src/ggml-cuda.o: \
+       ggml/src/ggml-cuda.cu \
+       ggml/include/ggml.h \
+       ggml/include/ggml-backend.h \
+       ggml/include/ggml-cuda.h \
+       ggml/src/ggml-backend-impl.h \
+       ggml/src/ggml-common.h \
+       $(wildcard ggml/src/ggml-cuda/*.cuh)
+       $(NVCC_COMPILE)
+
+src/whisper-mel-cuda.o: src/whisper-mel-cuda.cu src/whisper-mel-cuda.hpp
+       $(NVCC) $(NVCCFLAGS) $(CPPFLAGS) -Xcompiler "$(CUDA_CXXFLAGS)" -c $< -o $@
+
+endif # GGML_CUDA
+
+ifdef GGML_VULKAN
+       MK_CPPFLAGS += -DGGML_USE_VULKAN
+       MK_LDFLAGS  += -lvulkan
+       OBJ_GGML    += ggml/src/ggml-vulkan.o
+
+ifdef GGML_VULKAN_CHECK_RESULTS
+       MK_CPPFLAGS  += -DGGML_VULKAN_CHECK_RESULTS
+endif
+
+ifdef GGML_VULKAN_DEBUG
+       MK_CPPFLAGS  += -DGGML_VULKAN_DEBUG
+endif
+
+ifdef GGML_VULKAN_MEMORY_DEBUG
+       MK_CPPFLAGS  += -DGGML_VULKAN_MEMORY_DEBUG
+endif
+
+ifdef GGML_VULKAN_VALIDATE
+       MK_CPPFLAGS  += -DGGML_VULKAN_VALIDATE
+endif
+
+ifdef GGML_VULKAN_RUN_TESTS
+       MK_CPPFLAGS  += -DGGML_VULKAN_RUN_TESTS
+endif
+
+ggml/src/ggml-vulkan.o: \
+       ggml/src/ggml-vulkan.cpp \
+       ggml/include/ggml-vulkan.h
+       $(CXX) $(CXXFLAGS) -c $< -o $@
+endif # GGML_VULKAN
+
+ifdef GGML_HIPBLAS
+       ifeq ($(wildcard /opt/rocm),)
+               ROCM_PATH      ?= /usr
+               AMDGPU_TARGETS ?= $(shell $(shell which amdgpu-arch))
        else
-               CUDA_ARCH_FLAG ?= all
+               ROCM_PATH       ?= /opt/rocm
+               AMDGPU_TARGETS ?= $(shell $(ROCM_PATH)/llvm/bin/amdgpu-arch)
        endif
 
-       CFLAGS      += -DGGML_USE_CUDA -I/usr/local/cuda/include -I/opt/cuda/include -I$(CUDA_PATH)/targets/$(UNAME_M)-linux/include
-       CXXFLAGS    += -DGGML_USE_CUDA -I/usr/local/cuda/include -I/opt/cuda/include -I$(CUDA_PATH)/targets/$(UNAME_M)-linux/include -DGGML_CUDA_USE_GRAPHS
-       LDFLAGS     += -lcuda -lcublas -lculibos -lcudart -lcublasLt -lcufft -lpthread -ldl -lrt -L/usr/local/cuda/lib64 -L/opt/cuda/lib64 -L$(CUDA_PATH)/targets/$(UNAME_M)-linux/lib -L/usr/lib/wsl/lib
-       WHISPER_OBJ += ggml-cuda.o whisper-mel-cuda.o
-       WHISPER_OBJ += $(patsubst %.cu,%.o,$(wildcard ggml-cuda/*.cu))
-       WHISPER_OBJ += $(OBJS_CUDA_TEMP_INST)
-       NVCC        = nvcc
-       NVCCFLAGS   = --forward-unknown-to-host-compiler -arch=$(CUDA_ARCH_FLAG)
-
-ggml-cuda/%.o: ggml-cuda/%.cu ggml.h ggml-common.h ggml-cuda/common.cuh
-       $(NVCC) $(NVCCFLAGS) $(CXXFLAGS) -c $< -o $@
-
-ggml-cuda.o: ggml-cuda.cu ggml-cuda.h ggml.h ggml-backend.h ggml-backend-impl.h ggml-common.h $(wildcard ggml-cuda/*.cuh)
-       $(NVCC) $(NVCCFLAGS) $(CXXFLAGS) -Wno-pedantic -c $< -o $@
-
-whisper-mel-cuda.o: whisper-mel-cuda.cu whisper.h ggml.h ggml-backend.h whisper-mel.hpp whisper-mel-cuda.hpp
-       $(NVCC) $(NVCCFLAGS) $(CXXFLAGS) -Wno-pedantic -c $< -o $@
-endif
-
-ifdef WHISPER_HIPBLAS
-       ROCM_PATH   ?= /opt/rocm
-       HIPCC       ?= $(ROCM_PATH)/bin/hipcc
-       GPU_TARGETS ?= $(shell $(ROCM_PATH)/llvm/bin/amdgpu-arch)
-       CFLAGS      += -DGGML_USE_HIPBLAS -DGGML_USE_CUDA
-       CXXFLAGS    += -DGGML_USE_HIPBLAS -DGGML_USE_CUDA
-       LDFLAGS     += -L$(ROCM_PATH)/lib -Wl,-rpath=$(ROCM_PATH)/lib
-       LDFLAGS     += -lhipblas -lamdhip64 -lrocblas
-       HIPFLAGS    += $(addprefix --offload-arch=,$(GPU_TARGETS))
-       WHISPER_OBJ += ggml-cuda.o
-       WHISPER_OBJ += $(patsubst %.cu,%.o,$(wildcard ggml-cuda/*.cu))
-       WHISPER_OBJ += $(OBJS_CUDA_TEMP_INST)
-
-ggml-cuda/%.o: ggml-cuda/%.cu ggml-cuda/%.cuh ggml.h ggml-common.h ggml-cuda/common.cuh
+       GGML_CUDA_DMMV_X       ?= 32
+       GGML_CUDA_MMV_Y        ?= 1
+       GGML_CUDA_KQUANTS_ITER ?= 2
+
+       MK_CPPFLAGS += -DGGML_USE_HIPBLAS -DGGML_USE_CUDA
+
+ifdef GGML_HIP_UMA
+       MK_CPPFLAGS += -DGGML_HIP_UMA
+endif # GGML_HIP_UMA
+
+       MK_LDFLAGS += -L$(ROCM_PATH)/lib -Wl,-rpath=$(ROCM_PATH)/lib
+       MK_LDFLAGS += -L$(ROCM_PATH)/lib64 -Wl,-rpath=$(ROCM_PATH)/lib64
+       MK_LDFLAGS += -lhipblas -lamdhip64 -lrocblas
+
+       HIPCC ?= $(CCACHE) $(ROCM_PATH)/bin/hipcc
+
+       HIPFLAGS += $(addprefix --offload-arch=,$(AMDGPU_TARGETS))
+       HIPFLAGS += -DGGML_CUDA_DMMV_X=$(GGML_CUDA_DMMV_X)
+       HIPFLAGS += -DGGML_CUDA_MMV_Y=$(GGML_CUDA_MMV_Y)
+       HIPFLAGS += -DK_QUANTS_PER_ITERATION=$(GGML_CUDA_KQUANTS_ITER)
+
+ifdef GGML_CUDA_FORCE_DMMV
+       HIPFLAGS += -DGGML_CUDA_FORCE_DMMV
+endif # GGML_CUDA_FORCE_DMMV
+
+ifdef GGML_CUDA_NO_PEER_COPY
+       HIPFLAGS += -DGGML_CUDA_NO_PEER_COPY
+endif # GGML_CUDA_NO_PEER_COPY
+
+       OBJ_GGML += ggml/src/ggml-cuda.o
+       OBJ_GGML += $(patsubst %.cu,%.o,$(wildcard ggml/src/ggml-cuda/*.cu))
+       OBJ_GGML += $(OBJ_CUDA_TMPL)
+
+ggml/src/ggml-cuda.o: \
+       ggml/src/ggml-cuda.cu \
+       ggml/include/ggml.h \
+       ggml/include/ggml-backend.h \
+       ggml/include/ggml-cuda.h \
+       ggml/src/ggml-backend-impl.h \
+       ggml/src/ggml-common.h \
+       $(wildcard ggml/src/ggml-cuda/*.cuh)
        $(HIPCC) $(CXXFLAGS) $(HIPFLAGS) -x hip -c -o $@ $<
 
-ggml-cuda.o: ggml-cuda.cu ggml-cuda.h ggml.h ggml-backend.h ggml-backend-impl.h ggml-common.h $(wildcard ggml-cuda/*.cuh)
+ggml/src/ggml-cuda/%.o: \
+       ggml/src/ggml-cuda/%.cu \
+       ggml/include/ggml.h \
+       ggml/src/ggml-common.h \
+       ggml/src/ggml-cuda/common.cuh
        $(HIPCC) $(CXXFLAGS) $(HIPFLAGS) -x hip -c -o $@ $<
+endif # GGML_HIPBLAS
+
+ifdef GGML_METAL
+       MK_CPPFLAGS += -DGGML_USE_METAL
+       MK_LDFLAGS  += -framework Foundation -framework Metal -framework MetalKit
+       OBJ_GGML        += ggml/src/ggml-metal.o
+ifdef GGML_METAL_NDEBUG
+       MK_CPPFLAGS += -DGGML_METAL_NDEBUG
 endif
 
-ifdef WHISPER_GPROF
-       CFLAGS   += -pg
-       CXXFLAGS += -pg
+ifdef GGML_METAL_EMBED_LIBRARY
+       MK_CPPFLAGS += -DGGML_METAL_EMBED_LIBRARY
+       OBJ_GGML    += ggml/src/ggml-metal-embed.o
 endif
+endif # GGML_METAL
 
-ifneq ($(filter aarch64%,$(UNAME_M)),)
-       CFLAGS   += -mcpu=native
-       CXXFLAGS += -mcpu=native
+ifdef WHISPER_COREML
+       MK_CXXFLAGS += -DWHISPER_USE_COREML
+       LDFLAGS     += -framework Foundation -framework CoreML
+
+ifdef WHISPER_COREML_ALLOW_FALLBACK
+       MK_CXXFLAGS += -DWHISPER_COREML_ALLOW_FALLBACK
+endif
 endif
 
-ifneq ($(filter armv6%,$(UNAME_M)),)
-       # 32-bit Raspberry Pi 1, 2, 3
-       CFLAGS += -mfpu=neon -mfp16-format=ieee -mno-unaligned-access
+# ===
+
+ifdef GGML_METAL
+ggml/src/ggml-metal.o: \
+       ggml/src/ggml-metal.m \
+       ggml/include/ggml-metal.h \
+       ggml/include/ggml.h
+       $(CC) $(CFLAGS) -c $< -o $@
+
+ifdef GGML_METAL_EMBED_LIBRARY
+ggml/src/ggml-metal-embed.o: \
+       ggml/src/ggml-metal.metal \
+       ggml/src/ggml-common.h
+       @echo "Embedding Metal library"
+       @sed -e '/#include "ggml-common.h"/r ggml/src/ggml-common.h' -e '/#include "ggml-common.h"/d' < ggml/src/ggml-metal.metal > ggml/src/ggml-metal-embed.metal
+       $(eval TEMP_ASSEMBLY=$(shell mktemp))
+       @echo ".section __DATA, __ggml_metallib"            >  $(TEMP_ASSEMBLY)
+       @echo ".globl _ggml_metallib_start"                 >> $(TEMP_ASSEMBLY)
+       @echo "_ggml_metallib_start:"                       >> $(TEMP_ASSEMBLY)
+       @echo ".incbin \"ggml/src/ggml-metal-embed.metal\"" >> $(TEMP_ASSEMBLY)
+       @echo ".globl _ggml_metallib_end"                   >> $(TEMP_ASSEMBLY)
+       @echo "_ggml_metallib_end:"                         >> $(TEMP_ASSEMBLY)
+       @$(AS) $(TEMP_ASSEMBLY) -o $@
+       @rm -f ${TEMP_ASSEMBLY}
 endif
+endif # GGML_METAL
 
-ifneq ($(filter armv7%,$(UNAME_M)),)
-       # 32-bit ARM, for example on Armbian or possibly raspbian
-       #CFLAGS   += -mfpu=neon -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
-       #CXXFLAGS += -mfpu=neon -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
+ifdef WHISPER_COREML
+src/coreml/whisper-encoder.o: src/coreml/whisper-encoder.mm src/coreml/whisper-encoder.h
+       $(CXX) -O3 -I . -fobjc-arc -c src/coreml/whisper-encoder.mm -o src/coreml/whisper-encoder.o
+
+src/coreml/whisper-encoder-impl.o: src/coreml/whisper-encoder-impl.m src/coreml/whisper-encoder-impl.h
+       $(CXX) -O3 -I . -fobjc-arc -c src/coreml/whisper-encoder-impl.m -o src/coreml/whisper-encoder-impl.o
 
-       # 64-bit ARM on 32-bit OS, use these (TODO: auto-detect 64-bit)
-       CFLAGS   += -mfpu=neon-fp-armv8 -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
-       CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
+OBJ_WHISPER += src/coreml/whisper-encoder.o src/coreml/whisper-encoder-impl.o
 endif
 
-ifneq ($(filter armv8%,$(UNAME_M)),)
-       # Raspberry Pi 4
-       CFLAGS   += -mfpu=neon-fp-armv8 -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
-       CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
+OBJ_GGML += \
+       ggml/src/ggml.o \
+       ggml/src/ggml-alloc.o \
+       ggml/src/ggml-backend.o \
+       ggml/src/ggml-quants.o
+
+OBJ_WHISPER += \
+       src/whisper.o
+
+OBJ_COMMON += \
+       examples/common.o \
+       examples/common-ggml.o \
+       examples/grammar-parser.o
+
+OBJ_SDL += \
+       examples/common-sdl.o
+
+OBJ_ALL = $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
+
+LIB_GGML   = $(LIB_PRE)ggml$(DSO_EXT)
+LIB_GGML_S = $(LIB_PRE)ggml.a
+
+LIB_WHISPER   = $(LIB_PRE)whisper$(DSO_EXT)
+LIB_WHISPER_S = $(LIB_PRE)whisper.a
+
+LIB_COMMON   = $(LIB_PRE)common$(DSO_EXT)
+LIB_COMMON_S = $(LIB_PRE)common.a
+
+LIB_COMMON_SDL   = $(LIB_PRE)common-sdl$(DSO_EXT)
+LIB_COMMON_SDL_S = $(LIB_PRE)common-sdl.a
+
+LIB_ALL   = $(LIB_GGML)   $(LIB_WHISPER)   $(LIB_COMMON)   $(LIB_COMMON_SDL)
+LIB_ALL_S = $(LIB_GGML_S) $(LIB_WHISPER_S) $(LIB_COMMON_S) $(LIB_COMMON_SDL_S)
+
+GF_CC := $(CC)
+include scripts/get-flags.mk
+
+# combine build flags with cmdline overrides
+override CPPFLAGS  := $(MK_CPPFLAGS) $(CPPFLAGS)
+override CFLAGS    := $(CPPFLAGS) $(MK_CFLAGS) $(GF_CFLAGS) $(CFLAGS)
+BASE_CXXFLAGS      := $(MK_CXXFLAGS) $(CXXFLAGS)
+override CXXFLAGS  := $(BASE_CXXFLAGS) $(HOST_CXXFLAGS) $(GF_CXXFLAGS) $(CPPFLAGS)
+override NVCCFLAGS := $(MK_NVCCFLAGS) $(NVCCFLAGS)
+override LDFLAGS   := $(MK_LDFLAGS) $(LDFLAGS)
+
+# identify CUDA host compiler
+ifdef GGML_CUDA
+GF_CC := $(NVCC) $(NVCCFLAGS) 2>/dev/null .c -Xcompiler
+include scripts/get-flags.mk
+CUDA_CXXFLAGS := $(BASE_CXXFLAGS) $(GF_CXXFLAGS) -Wno-pedantic
+endif
+
+ifdef WHISPER_CURL
+override CXXFLAGS := $(CXXFLAGS) -DWHISPER_USE_CURL
+override LDFLAGS  := $(LDFLAGS) -lcurl
 endif
 
 #
@@ -377,133 +838,260 @@ endif
 #
 
 $(info I whisper.cpp build info: )
-$(info I UNAME_S:  $(UNAME_S))
-$(info I UNAME_P:  $(UNAME_P))
-$(info I UNAME_M:  $(UNAME_M))
-$(info I CFLAGS:   $(CFLAGS))
-$(info I CXXFLAGS: $(CXXFLAGS))
-$(info I LDFLAGS:  $(LDFLAGS))
-$(info I CC:       $(CCV))
-$(info I CXX:      $(CXXV))
+$(info I UNAME_S:   $(UNAME_S))
+$(info I UNAME_P:   $(UNAME_P))
+$(info I UNAME_M:   $(UNAME_M))
+$(info I CFLAGS:    $(CFLAGS))
+$(info I CXXFLAGS:  $(CXXFLAGS))
+$(info I NVCCFLAGS: $(NVCCFLAGS))
+$(info I LDFLAGS:   $(LDFLAGS))
+$(info I CC:        $(shell $(CC)   --version | head -n 1))
+$(info I CXX:       $(shell $(CXX)  --version | head -n 1))
+ifdef GGML_CUDA
+$(info I NVCC:      $(shell $(NVCC) --version | tail -n 1))
+CUDA_VERSION := $(shell $(NVCC) --version | grep -oP 'release (\K[0-9]+\.[0-9])')
+ifeq ($(shell awk -v "v=$(CUDA_VERSION)" 'BEGIN { print (v < 11.7) }'),1)
+
+ifndef CUDA_DOCKER_ARCH
+ifndef CUDA_POWER_ARCH
+$(error I ERROR: For CUDA versions < 11.7 a target CUDA architecture must be explicitly provided via environment variable CUDA_DOCKER_ARCH, e.g. by running "export CUDA_DOCKER_ARCH=compute_XX" on Unix-like systems, where XX is the minimum compute capability that the code needs to run on. A list with compute capabilities can be found here: https://developer.nvidia.com/cuda-gpus )
+endif # CUDA_POWER_ARCH
+endif # CUDA_DOCKER_ARCH
+
+endif # eq ($(shell echo "$(CUDA_VERSION) < 11.7" | bc),1)
+endif # GGML_CUDA
 $(info )
 
-ifdef WHISPER_CUBLAS
-$(info !!!!)
-$(info WHISPER_CUBLAS is deprecated and will be removed in the future. Use WHISPER_CUDA instead.)
-$(info !!!!)
+ifdef DEPRECATE_WARNING
+$(info !!! DEPRECATION WARNING !!!)
+$(info The following WHISPER_ options are deprecated and will be removed in the future. Use the GGML_ prefix instead)
+$(info   - WHISPER_CUDA)
+$(info   - WHISPER_METAL)
+$(info   - WHISPER_OPENMP)
+$(info   - WHISPER_RPC)
+$(info   - WHISPER_SYCL)
+$(info   - WHISPER_SYCL_F16)
+$(info   - WHISPER_OPENBLAS)
+$(info   - WHISPER_OPENBLAS64)
+$(info   - WHISPER_BLIS)
+$(info   - WHISPER_NO_LLAMAFILE)
+$(info   - WHISPER_NO_ACCELERATE)
+$(info   - WHISPER_NO_OPENMP)
+$(info   - WHISPER_NO_METAL)
 $(info )
 endif
 
 #
-# Build library
+# Build libraries
 #
 
-ggml.o: ggml.c ggml.h ggml-cuda.h
-       $(CC)  $(CFLAGS)   -c $< -o $@
+# ggml
 
-ggml-alloc.o: ggml-alloc.c ggml.h ggml-alloc.h
+ggml/src/ggml.o: \
+       ggml/src/ggml.c \
+       ggml/include/ggml.h
        $(CC)  $(CFLAGS)   -c $< -o $@
 
-ggml-backend.o: ggml-backend.c ggml.h ggml-backend.h
+ggml/src/ggml-alloc.o: \
+       ggml/src/ggml-alloc.c \
+       ggml/include/ggml.h \
+       ggml/include/ggml-alloc.h
        $(CC)  $(CFLAGS)   -c $< -o $@
 
-ggml-quants.o: ggml-quants.c ggml.h ggml-quants.h
+ggml/src/ggml-backend.o: \
+       ggml/src/ggml-backend.c \
+       ggml/include/ggml.h \
+       ggml/include/ggml-backend.h
        $(CC)  $(CFLAGS)   -c $< -o $@
 
-ggml-blas.o: ggml-blas.cpp ggml-blas.h
+ggml/src/ggml-quants.o: \
+       ggml/src/ggml-quants.c \
+       ggml/include/ggml.h \
+       ggml/src/ggml-quants.h \
+       ggml/src/ggml-common.h
+       $(CC) $(CFLAGS)    -c $< -o $@
+
+ggml/src/ggml-blas.o: \
+       ggml/src/ggml-blas.cpp \
+       ggml/include/ggml-blas.h
        $(CXX) $(CXXFLAGS) -c $< -o $@
 
-WHISPER_OBJ += ggml.o ggml-alloc.o ggml-backend.o ggml-quants.o
+ifdef GGML_LLAMAFILE
+ggml/src/sgemm.o: \
+       ggml/src/sgemm.cpp \
+       ggml/src/sgemm.h \
+       ggml/include/ggml.h
+       $(CXX) $(CXXFLAGS) -c $< -o $@
+endif # GGML_LLAMAFILE
 
-whisper.o: whisper.cpp whisper.h whisper-mel.hpp ggml.h ggml-cuda.h
+ifdef GGML_RPC
+ggml/src/ggml-rpc.o: \
+       ggml/src/ggml-rpc.cpp \
+       ggml/include/ggml-rpc.h
+       $(CXX) $(CXXFLAGS) -c $< -o $@
+endif # GGML_RPC
+
+$(LIB_GGML): \
+       $(OBJ_GGML)
+       $(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS)
+
+$(LIB_GGML_S): \
+       $(OBJ_GGML)
+       ar rcs $(LIB_GGML_S) $^
+
+# whisper
+
+src/whisper.o: \
+       src/whisper.cpp \
+       src/whisper-mel.hpp \
+       include/whisper.h \
+       ggml/include/ggml.h \
+       ggml/include/ggml-alloc.h \
+       ggml/include/ggml-backend.h \
+       ggml/include/ggml-cuda.h \
+       ggml/include/ggml-metal.h
        $(CXX) $(CXXFLAGS) -c $< -o $@
 
-ifndef WHISPER_COREML
-WHISPER_OBJ += whisper.o
-else
-whisper-encoder.o: coreml/whisper-encoder.mm coreml/whisper-encoder.h
-       $(CXX) -O3 -I . -fobjc-arc -c coreml/whisper-encoder.mm -o whisper-encoder.o
+$(LIB_WHISPER): \
+       $(OBJ_WHISPER) \
+       $(LIB_GGML)
+       $(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS)
 
-whisper-encoder-impl.o: coreml/whisper-encoder-impl.m coreml/whisper-encoder-impl.h
-       $(CXX) -O3 -I . -fobjc-arc -c coreml/whisper-encoder-impl.m -o whisper-encoder-impl.o
+$(LIB_WHISPER_S): \
+       $(OBJ_WHISPER)
+       ar rcs $(LIB_WHISPER_S) $^
 
-WHISPER_OBJ += whisper.o whisper-encoder.o whisper-encoder-impl.o
-endif
+# common
 
-ifdef WHISPER_METAL
-ggml-metal.o: ggml-metal.m ggml-metal.h
-       $(CC) $(CFLAGS) -c $< -o $@
+examples/common.o: \
+       examples/common.cpp \
+       examples/common.h
+       $(CXX) $(CXXFLAGS) -c $< -o $@
+
+examples/common-ggml.o: \
+       examples/common-ggml.cpp \
+       examples/common-ggml.h
+       $(CXX) $(CXXFLAGS) -c $< -o $@
 
-WHISPER_OBJ += ggml-metal.o
+$(LIB_COMMON): \
+       $(OBJ_COMMON)
+       $(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS)
 
-ifdef WHISPER_METAL_EMBED_LIBRARY
-CFLAGS += -DGGML_METAL_EMBED_LIBRARY
+$(LIB_COMMON_S): \
+       $(OBJ_COMMON)
+       ar rcs $(LIB_COMMON_S) $^
 
-ggml-metal-embed.o: ggml-metal.metal ggml-common.h
-       @echo "Embedding Metal library"
-       $(eval TEMP_ASSEMBLY=$(shell mktemp))
-       $(eval TEMP_METALLIB=$(shell mktemp))
-       @sed "/^#include \"ggml-common.h\"/{r ggml-common.h"$$'\n'"d;}" ggml-metal.metal > $(TEMP_METALLIB)
-       @echo ".section __DATA, __ggml_metallib" > $(TEMP_ASSEMBLY)
-       @echo ".globl _ggml_metallib_start" >> $(TEMP_ASSEMBLY)
-       @echo "_ggml_metallib_start:" >> $(TEMP_ASSEMBLY)
-       @echo ".incbin \"$(TEMP_METALLIB)\"" >> $(TEMP_ASSEMBLY)
-       @echo ".globl _ggml_metallib_end" >> $(TEMP_ASSEMBLY)
-       @echo "_ggml_metallib_end:" >> $(TEMP_ASSEMBLY)
-       @$(AS) $(TEMP_ASSEMBLY) -o $@
-       @rm -f $(TEMP_ASSEMBLY) $(TEMP_METALLIB)
+# common-sdl
 
-WHISPER_OBJ += ggml-metal-embed.o
-endif
-endif
+CFLAGS_SDL=$(shell sdl2-config --cflags)
+LDFLAGS_SDL=$(shell sdl2-config --libs)
+
+examples/common-sdl.o: \
+       examples/common-sdl.cpp \
+       examples/common-sdl.h
+       $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $@
 
-libwhisper.a: $(WHISPER_OBJ)
-       $(AR) rcs libwhisper.a $(WHISPER_OBJ)
+$(LIB_COMMON_SDL): \
+       $(OBJ_SDL)
+       $(CXX) $(CXXFLAGS) -shared -fPIC -o $@ $^ $(LDFLAGS) $(LDFLAGS_SDL)
 
-libwhisper.so: $(WHISPER_OBJ)
-       $(CXX) $(CXXFLAGS) -shared -o libwhisper.so $(WHISPER_OBJ) $(LDFLAGS)
+$(LIB_COMMON_SDL_S): \
+       $(OBJ_SDL)
+       ar rcs $(LIB_COMMON_SDL_S) $^
 
 clean:
-       rm -f *.o main stream command talk talk-llama bench quantize server lsp libwhisper.a libwhisper.so
-       rm -vrf ggml-cuda/*.o
-       rm -vrf ggml-cuda/template-instances/*.o
+       rm -vrf *.dot $(BUILD_TARGETS) $(TEST_TARGETS)
+       rm -rvf src/*.o
+       rm -rvf src/coreml/*.o
+       rm -rvf tests/*.o
+       rm -rvf examples/*.o
+       rm -rvf *.a
+       rm -rvf *.dll
+       rm -rvf *.so
+       rm -rvf *.dot
+       rm -rvf ggml/*.a
+       rm -rvf ggml/*.dll
+       rm -rvf ggml/*.so
+       rm -vrf ggml/src/*.o
+       rm -vrf ggml/src/ggml-metal-embed.metal
+       rm -vrf ggml/src/ggml-cuda/*.o
+       rm -vrf ggml/src/ggml-cuda/template-instances/*.o
+       rm -rvf $(BUILD_TARGETS)
+       rm -rvf $(TEST_TARGETS)
+       find examples -type f -name "*.o" -delete
 
 #
 # Examples
 #
 
-CC_SDL=`sdl2-config --cflags --libs`
+# $< is the first prerequisite, i.e. the source file.
+# Explicitly compile this to an object file so that it can be cached with ccache.
+# The source file is then filtered out from $^ (the list of all prerequisites) and the object file is added instead.
+
+# Helper function that replaces .c, .cpp, and .cu file endings with .o:
+GET_OBJ_FILE = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(patsubst %.cu,%.o,$(1))))
+
+main: examples/main/main.cpp \
+       $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON)
+       $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
+       $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
+       @echo
+       @echo '====  Run ./llama-cli -h for help.  ===='
+       @echo
+
+bench: examples/bench/bench.cpp \
+       $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON)
+       $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
+       $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
+
+quantize: examples/quantize/quantize.cpp \
+       $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON)
+       $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
+       $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
+
+server: examples/server/server.cpp \
+       $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON)
+       $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
+       $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LWINSOCK2)
+
+command: examples/command/command.cpp \
+       $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
+       $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $(call GET_OBJ_FILE, $<)
+       $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LDFLAGS_SDL)
+
+stream: examples/stream/stream.cpp \
+       $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
+       $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $(call GET_OBJ_FILE, $<)
+       $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LDFLAGS_SDL)
+
+lsp: examples/lsp/lsp.cpp \
+       $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
+       $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $(call GET_OBJ_FILE, $<)
+       $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LDFLAGS_SDL)
+
+talk: examples/talk/talk.cpp examples/talk/gpt-2.cpp \
+       $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
+       $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $(call GET_OBJ_FILE, $<)
+       $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LDFLAGS_SDL)
+
+talk-llama: examples/talk-llama/talk-llama.cpp examples/talk-llama/llama.cpp examples/talk-llama/unicode.cpp examples/talk-llama/unicode-data.cpp \
+       $(OBJ_GGML) $(OBJ_WHISPER) $(OBJ_COMMON) $(OBJ_SDL)
+       $(CXX) $(CXXFLAGS) $(CFLAGS_SDL) -c $< -o $(call GET_OBJ_FILE, $<)
+       $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS) $(LDFLAGS_SDL)
 
-SRC_COMMON     = examples/common.cpp examples/common-ggml.cpp examples/grammar-parser.cpp
-SRC_COMMON_SDL = examples/common-sdl.cpp
-
-main: examples/main/main.cpp $(SRC_COMMON) $(WHISPER_OBJ)
-       $(CXX) $(CXXFLAGS) examples/main/main.cpp $(SRC_COMMON) $(WHISPER_OBJ) -o main $(LDFLAGS)
-       ./main -h
-
-bench: examples/bench/bench.cpp $(WHISPER_OBJ)
-       $(CXX) $(CXXFLAGS) examples/bench/bench.cpp $(WHISPER_OBJ) -o bench $(LDFLAGS)
-
-quantize: examples/quantize/quantize.cpp $(WHISPER_OBJ) $(SRC_COMMON)
-       $(CXX) $(CXXFLAGS) examples/quantize/quantize.cpp $(SRC_COMMON) $(WHISPER_OBJ) -o quantize $(LDFLAGS)
-
-server: examples/server/server.cpp $(SRC_COMMON) $(WHISPER_OBJ)
-       $(CXX) $(CXXFLAGS) examples/server/server.cpp $(SRC_COMMON) $(WHISPER_OBJ) -o server $(LDFLAGS) $(LWINSOCK2)
-
-stream: examples/stream/stream.cpp $(SRC_COMMON) $(SRC_COMMON_SDL) $(WHISPER_OBJ)
-       $(CXX) $(CXXFLAGS) examples/stream/stream.cpp $(SRC_COMMON) $(SRC_COMMON_SDL) $(WHISPER_OBJ) -o stream $(CC_SDL) $(LDFLAGS)
-
-command: examples/command/command.cpp $(SRC_COMMON) $(SRC_COMMON_SDL) $(WHISPER_OBJ)
-       $(CXX) $(CXXFLAGS) examples/command/command.cpp $(SRC_COMMON) $(SRC_COMMON_SDL) $(WHISPER_OBJ) -o command $(CC_SDL) $(LDFLAGS)
+#
+# Tests
+#
 
-lsp: examples/lsp/lsp.cpp $(SRC_COMMON) $(SRC_COMMON_SDL) $(WHISPER_OBJ)
-       $(CXX) $(CXXFLAGS) examples/lsp/lsp.cpp $(SRC_COMMON) $(SRC_COMMON_SDL) $(WHISPER_OBJ) -o lsp $(CC_SDL) $(LDFLAGS)
+tests: $(TEST_TARGETS)
 
-talk: examples/talk/talk.cpp examples/talk/gpt-2.cpp $(SRC_COMMON) $(SRC_COMMON_SDL) $(WHISPER_OBJ)
-       $(CXX) $(CXXFLAGS) examples/talk/talk.cpp examples/talk/gpt-2.cpp $(SRC_COMMON) $(SRC_COMMON_SDL) $(WHISPER_OBJ) -o talk $(CC_SDL) $(LDFLAGS)
+tests/test-c.o: tests/test-c.c include/whisper.h
+       $(CC) $(CFLAGS) -c $(filter-out %.h,$^) -o $@
 
-talk-llama: examples/talk-llama/talk-llama.cpp examples/talk-llama/llama.cpp examples/talk-llama/unicode.cpp examples/talk-llama/unicode-data.cpp $(SRC_COMMON) $(SRC_COMMON_SDL) $(WHISPER_OBJ)
-       $(CXX) $(CXXFLAGS) examples/talk-llama/talk-llama.cpp examples/talk-llama/llama.cpp examples/talk-llama/unicode.cpp examples/talk-llama/unicode-data.cpp $(SRC_COMMON) $(SRC_COMMON_SDL) $(WHISPER_OBJ) -o talk-llama $(CC_SDL) $(LDFLAGS)
+tests/test-backend-ops: tests/test-backend-ops.cpp \
+       $(OBJ_GGML)
+       $(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
+       $(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
 
 #
 # Audio samples
@@ -566,11 +1154,3 @@ tiny.en tiny base.en base small.en small medium.en medium large-v1 large-v2 larg
                ./main -m models/ggml-$@.bin -f $$f ; \
                echo "" ; \
        done
-
-#
-# Tests
-#
-
-.PHONY: tests
-tests:
-       bash ./tests/run-tests.sh $(word 2, $(MAKECMDGOALS))
index bbb7fb03b9972d543ad254992f4213512c096471..fc47249389e016fee3365711232494fd3f381232 100644 (file)
@@ -27,17 +27,15 @@ let package = Package(
                "samples",
                "tests",
                "CMakeLists.txt",
-               "ggml-cuda.cu",
-               "ggml-cuda.h",
                "Makefile"
             ],
             sources: [
-                "ggml.c",
-                "whisper.cpp",
-                "ggml-alloc.c",
-                "ggml-backend.c",
-                "ggml-quants.c",
-                "ggml-metal.m"
+                "ggml/src/ggml.c",
+                "src/whisper.cpp",
+                "ggml/src/ggml-alloc.c",
+                "ggml/src/ggml-backend.c",
+                "ggml/src/ggml-quants.c",
+                "ggml/src/ggml-metal.m"
             ],
             resources: [.process("ggml-metal.metal")],
             publicHeadersPath: "spm-headers",
index 289869d861c4fe072228e79c524172fab3d1991f..d1d66acede42b21f2c641fa659b0262c0e50a240 100644 (file)
--- a/README.md
+++ b/README.md
@@ -418,7 +418,7 @@ Now build `whisper.cpp` with CUDA support:
 
 ```
 make clean
-WHISPER_CUDA=1 make -j
+GGML_CUDA=1 make -j
 ```
 
 ## BLAS CPU support via OpenBLAS
@@ -430,7 +430,7 @@ Now build `whisper.cpp` with OpenBLAS support:
 
 ```
 make clean
-WHISPER_OPENBLAS=1 make -j
+GGML_OPENBLAS=1 make -j
 ```
 
 ## BLAS CPU support via Intel MKL
diff --git a/bindings/ios b/bindings/ios
deleted file mode 160000 (submodule)
index a208543..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit a2085436c2eb796af90956b62bd64731f5e5b823
diff --git a/cmake/BuildTypes.cmake b/cmake/BuildTypes.cmake
deleted file mode 100644 (file)
index a9c7b6c..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# Add new build types
-
-# ReleaseGG - Release with enabled asserts
-
-SET(CMAKE_CXX_FLAGS_RELEASEGG
-    "-O3"
-    CACHE STRING "Flags used by the c++ compiler during release builds with enabled asserts."
-    FORCE )
-SET(CMAKE_C_FLAGS_RELEASEGG
-    "-O3"
-    CACHE STRING "Flags used by the compiler during release builds with enabled asserts."
-    FORCE )
-SET(CMAKE_EXE_LINKER_FLAGS_RELEASEGG
-    ""
-    CACHE STRING "Flags used for linking binaries during release builds with enabled asserts."
-    FORCE )
-SET(CMAKE_SHARED_LINKER_FLAGS_RELEASEGG
-    ""
-    CACHE STRING "Flags used by the shared libraries linker during release builds with enabled asserts."
-    FORCE )
-MARK_AS_ADVANCED(
-    CMAKE_CXX_FLAGS_RELEASEGG
-    CMAKE_C_FLAGS_RELEASEGG
-    CMAKE_EXE_LINKER_FLAGS_RELEASEGG
-    CMAKE_SHARED_LINKER_FLAGS_RELEASEGG )
-
-# RelWithDebInfoGG - RelWithDebInfo with enabled asserts
-
-SET(CMAKE_CXX_FLAGS_RELWITHDEBINFOGG
-    "-O2 -g"
-    CACHE STRING "Flags used by the c++ compiler during release builds with debug symbols and enabled asserts."
-    FORCE )
-SET(CMAKE_C_FLAGS_RELWITHDEBINFOGG
-    "-O2 -g"
-    CACHE STRING "Flags used by the compiler during release builds with debug symbols and enabled asserts."
-    FORCE )
-SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFOGG
-    ""
-    CACHE STRING "Flags used for linking binaries during release builds with debug symbols and enabled asserts."
-    FORCE )
-SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFOGG
-    ""
-    CACHE STRING "Flags used by the shared libraries linker during release builds with debug symbols and enabled asserts."
-    FORCE )
-MARK_AS_ADVANCED(
-    CMAKE_CXX_FLAGS_RELWITHDEBINFOGG
-    CMAKE_C_FLAGS_RELWITHDEBINFOGG
-    CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFOGG
-    CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFOGG )
-
-if (NOT XCODE AND NOT MSVC AND NOT CMAKE_BUILD_TYPE)
-    set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
-    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" "ReleaseGG" "RelWithDebInfoGG")
-endif()
diff --git a/cmake/GitVars.cmake b/cmake/GitVars.cmake
deleted file mode 100644 (file)
index 1a4c24e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-find_package(Git)
-
-# the commit's SHA1
-execute_process(COMMAND
-    "${GIT_EXECUTABLE}" describe --match=NeVeRmAtCh --always --abbrev=8
-    WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
-    OUTPUT_VARIABLE GIT_SHA1
-    ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-# the date of the commit
-execute_process(COMMAND
-    "${GIT_EXECUTABLE}" log -1 --format=%ad --date=local
-    WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
-    OUTPUT_VARIABLE GIT_DATE
-    ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-# the subject of the commit
-execute_process(COMMAND
-    "${GIT_EXECUTABLE}" log -1 --format=%s
-    WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
-    OUTPUT_VARIABLE GIT_COMMIT_SUBJECT
-    ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
diff --git a/cmake/build-info.cmake b/cmake/build-info.cmake
new file mode 100644 (file)
index 0000000..ea3dc55
--- /dev/null
@@ -0,0 +1,58 @@
+set(BUILD_NUMBER 0)
+set(BUILD_COMMIT "unknown")
+set(BUILD_COMPILER "unknown")
+set(BUILD_TARGET "unknown")
+
+# Look for git
+find_package(Git)
+if(NOT Git_FOUND)
+    find_program(GIT_EXECUTABLE NAMES git git.exe)
+    if(GIT_EXECUTABLE)
+        set(Git_FOUND TRUE)
+        message(STATUS "Found Git: ${GIT_EXECUTABLE}")
+    else()
+        message(WARNING "Git not found. Build info will not be accurate.")
+    endif()
+endif()
+
+# Get the commit count and hash
+if(Git_FOUND)
+    execute_process(
+        COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+        OUTPUT_VARIABLE HEAD
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        RESULT_VARIABLE RES
+    )
+    if (RES EQUAL 0)
+        set(BUILD_COMMIT ${HEAD})
+    endif()
+    execute_process(
+        COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+        OUTPUT_VARIABLE COUNT
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        RESULT_VARIABLE RES
+    )
+    if (RES EQUAL 0)
+        set(BUILD_NUMBER ${COUNT})
+    endif()
+endif()
+
+if(MSVC)
+    set(BUILD_COMPILER "${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}")
+    set(BUILD_TARGET ${CMAKE_VS_PLATFORM_NAME})
+else()
+    execute_process(
+        COMMAND sh -c "$@ --version | head -1" _ ${CMAKE_C_COMPILER}
+        OUTPUT_VARIABLE OUT
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    set(BUILD_COMPILER ${OUT})
+    execute_process(
+        COMMAND ${CMAKE_C_COMPILER} -dumpmachine
+        OUTPUT_VARIABLE OUT
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    set(BUILD_TARGET ${OUT})
+endif()
diff --git a/cmake/git-vars.cmake b/cmake/git-vars.cmake
new file mode 100644 (file)
index 0000000..1a4c24e
--- /dev/null
@@ -0,0 +1,22 @@
+find_package(Git)
+
+# the commit's SHA1
+execute_process(COMMAND
+    "${GIT_EXECUTABLE}" describe --match=NeVeRmAtCh --always --abbrev=8
+    WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+    OUTPUT_VARIABLE GIT_SHA1
+    ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+# the date of the commit
+execute_process(COMMAND
+    "${GIT_EXECUTABLE}" log -1 --format=%ad --date=local
+    WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+    OUTPUT_VARIABLE GIT_DATE
+    ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+# the subject of the commit
+execute_process(COMMAND
+    "${GIT_EXECUTABLE}" log -1 --format=%s
+    WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+    OUTPUT_VARIABLE GIT_COMMIT_SUBJECT
+    ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
diff --git a/cmake/whisper-config.cmake.in b/cmake/whisper-config.cmake.in
new file mode 100644 (file)
index 0000000..2e7da2f
--- /dev/null
@@ -0,0 +1,65 @@
+set(LLAMA_VERSION      @LLAMA_INSTALL_VERSION@)
+set(LLAMA_BUILD_COMMIT @LLAMA_BUILD_COMMIT@)
+set(LLAMA_BUILD_NUMBER @LLAMA_BUILD_NUMBER@)
+set(LLAMA_SHARED_LIB   @BUILD_SHARED_LIBS@)
+
+set(GGML_BLAS       @GGML_BLAS@)
+set(GGML_CUDA       @GGML_CUDA@)
+set(GGML_METAL      @GGML_METAL@)
+set(GGML_HIPBLAS    @GGML_HIPBLAS@)
+set(GGML_ACCELERATE @GGML_ACCELERATE@)
+
+@PACKAGE_INIT@
+
+set_and_check(LLAMA_INCLUDE_DIR "@PACKAGE_LLAMA_INCLUDE_INSTALL_DIR@")
+set_and_check(LLAMA_LIB_DIR     "@PACKAGE_LLAMA_LIB_INSTALL_DIR@")
+set_and_check(LLAMA_BIN_DIR     "@PACKAGE_LLAMA_BIN_INSTALL_DIR@")
+
+# Ensure transient dependencies satisfied
+
+find_package(Threads REQUIRED)
+
+if (APPLE AND GGML_ACCELERATE)
+    find_library(ACCELERATE_FRAMEWORK Accelerate REQUIRED)
+endif()
+
+if (GGML_BLAS)
+    find_package(BLAS REQUIRED)
+endif()
+
+if (GGML_CUDA)
+    find_package(CUDAToolkit REQUIRED)
+endif()
+
+if (GGML_METAL)
+    find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
+    find_library(METAL_FRAMEWORK Metal REQUIRED)
+    find_library(METALKIT_FRAMEWORK MetalKit REQUIRED)
+endif()
+
+if (GGML_HIPBLAS)
+    find_package(hip REQUIRED)
+    find_package(hipblas REQUIRED)
+    find_package(rocblas REQUIRED)
+endif()
+
+find_library(llama_LIBRARY llama
+    REQUIRED
+    HINTS ${LLAMA_LIB_DIR})
+
+set(_llama_link_deps "Threads::Threads" "@LLAMA_EXTRA_LIBS@")
+set(_llama_transient_defines "@LLAMA_TRANSIENT_DEFINES@")
+
+add_library(llama UNKNOWN IMPORTED)
+
+set_target_properties(llama
+    PROPERTIES
+        INTERFACE_INCLUDE_DIRECTORIES "${LLAMA_INCLUDE_DIR}"
+        INTERFACE_LINK_LIBRARIES "${_llama_link_deps}"
+        INTERFACE_COMPILE_DEFINITIONS "${_llama_transient_defines}"
+        IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+        IMPORTED_LOCATION "${llama_LIBRARY}"
+        INTERFACE_COMPILE_FEATURES cxx_std_11
+        POSITION_INDEPENDENT_CODE ON )
+
+check_required_components(Llama)
diff --git a/cmake/whisper.pc.in b/cmake/whisper.pc.in
new file mode 100644 (file)
index 0000000..67aaafd
--- /dev/null
@@ -0,0 +1,10 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: whisper
+Description: Port of OpenAI's Whisper model in C/C++
+Version: @PROJECT_VERSION@
+Libs: -L${libdir} -lwhisper
+Cflags: -I${includedir}
diff --git a/coreml/whisper-decoder-impl.h b/coreml/whisper-decoder-impl.h
deleted file mode 100644 (file)
index c6f2e85..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-//
-// whisper-decoder-impl.h
-//
-// This file was automatically generated and should not be edited.
-//
-
-#import <Foundation/Foundation.h>
-#import <CoreML/CoreML.h>
-#include <stdint.h>
-#include <os/log.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-
-/// Model Prediction Input Type
-API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
-@interface whisper_decoder_implInput : NSObject<MLFeatureProvider>
-
-/// token_data as 1 by 1 matrix of 32-bit integers
-@property (readwrite, nonatomic, strong) MLMultiArray * token_data;
-
-/// audio_data as 1 × 384 × 1 × 1500 4-dimensional array of floats
-@property (readwrite, nonatomic, strong) MLMultiArray * audio_data;
-- (instancetype)init NS_UNAVAILABLE;
-- (instancetype)initWithToken_data:(MLMultiArray *)token_data audio_data:(MLMultiArray *)audio_data NS_DESIGNATED_INITIALIZER;
-
-@end
-
-
-/// Model Prediction Output Type
-API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
-@interface whisper_decoder_implOutput : NSObject<MLFeatureProvider>
-
-/// var_1346 as multidimensional array of floats
-@property (readwrite, nonatomic, strong) MLMultiArray * var_1346;
-- (instancetype)init NS_UNAVAILABLE;
-- (instancetype)initWithVar_1346:(MLMultiArray *)var_1346 NS_DESIGNATED_INITIALIZER;
-
-@end
-
-
-/// Class for model loading and prediction
-API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
-@interface whisper_decoder_impl : NSObject
-@property (readonly, nonatomic, nullable) MLModel * model;
-
-/**
-    URL of the underlying .mlmodelc directory.
-*/
-+ (nullable NSURL *)URLOfModelInThisBundle;
-
-/**
-    Initialize whisper_decoder_impl instance from an existing MLModel object.
-
-    Usually the application does not use this initializer unless it makes a subclass of whisper_decoder_impl.
-    Such application may want to use `-[MLModel initWithContentsOfURL:configuration:error:]` and `+URLOfModelInThisBundle` to create a MLModel object to pass-in.
-*/
-- (instancetype)initWithMLModel:(MLModel *)model NS_DESIGNATED_INITIALIZER;
-
-/**
-    Initialize whisper_decoder_impl instance with the model in this bundle.
-*/
-- (nullable instancetype)init;
-
-/**
-    Initialize whisper_decoder_impl instance with the model in this bundle.
-
-    @param configuration The model configuration object
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithConfiguration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Initialize whisper_decoder_impl instance from the model URL.
-
-    @param modelURL URL to the .mlmodelc directory for whisper_decoder_impl.
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Initialize whisper_decoder_impl instance from the model URL.
-
-    @param modelURL URL to the .mlmodelc directory for whisper_decoder_impl.
-    @param configuration The model configuration object
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Construct whisper_decoder_impl instance asynchronously with configuration.
-    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
-
-    @param configuration The model configuration
-    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_decoder_impl instance or NSError object.
-*/
-+ (void)loadWithConfiguration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_decoder_impl * _Nullable model, NSError * _Nullable error))handler;
-
-/**
-    Construct whisper_decoder_impl instance asynchronously with URL of .mlmodelc directory and optional configuration.
-
-    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
-
-    @param modelURL The model URL.
-    @param configuration The model configuration
-    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_decoder_impl instance or NSError object.
-*/
-+ (void)loadContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_decoder_impl * _Nullable model, NSError * _Nullable error))handler;
-
-/**
-    Make a prediction using the standard interface
-    @param input an instance of whisper_decoder_implInput to predict from
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-    @return the prediction as whisper_decoder_implOutput
-*/
-- (nullable whisper_decoder_implOutput *)predictionFromFeatures:(whisper_decoder_implInput *)input error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Make a prediction using the standard interface
-    @param input an instance of whisper_decoder_implInput to predict from
-    @param options prediction options
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-    @return the prediction as whisper_decoder_implOutput
-*/
-- (nullable whisper_decoder_implOutput *)predictionFromFeatures:(whisper_decoder_implInput *)input options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Make a prediction using the convenience interface
-    @param token_data as 1 by 1 matrix of 32-bit integers:
-    @param audio_data as 1 × 384 × 1 × 1500 4-dimensional array of floats:
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-    @return the prediction as whisper_decoder_implOutput
-*/
-- (nullable whisper_decoder_implOutput *)predictionFromToken_data:(MLMultiArray *)token_data audio_data:(MLMultiArray *)audio_data error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Batch prediction
-    @param inputArray array of whisper_decoder_implInput instances to obtain predictions from
-    @param options prediction options
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-    @return the predictions as NSArray<whisper_decoder_implOutput *>
-*/
-- (nullable NSArray<whisper_decoder_implOutput *> *)predictionsFromInputs:(NSArray<whisper_decoder_implInput*> *)inputArray options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/coreml/whisper-decoder-impl.m b/coreml/whisper-decoder-impl.m
deleted file mode 100644 (file)
index 34060e4..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-//
-// whisper-decoder-impl.m
-//
-// This file was automatically generated and should not be edited.
-//
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with automatic reference counting enabled (-fobjc-arc)
-#endif
-
-#import "whisper-decoder-impl.h"
-
-@implementation whisper_decoder_implInput
-
-- (instancetype)initWithToken_data:(MLMultiArray *)token_data audio_data:(MLMultiArray *)audio_data {
-    self = [super init];
-    if (self) {
-        _token_data = token_data;
-        _audio_data = audio_data;
-    }
-    return self;
-}
-
-- (NSSet<NSString *> *)featureNames {
-    return [NSSet setWithArray:@[@"token_data", @"audio_data"]];
-}
-
-- (nullable MLFeatureValue *)featureValueForName:(NSString *)featureName {
-    if ([featureName isEqualToString:@"token_data"]) {
-        return [MLFeatureValue featureValueWithMultiArray:self.token_data];
-    }
-    if ([featureName isEqualToString:@"audio_data"]) {
-        return [MLFeatureValue featureValueWithMultiArray:self.audio_data];
-    }
-    return nil;
-}
-
-@end
-
-@implementation whisper_decoder_implOutput
-
-- (instancetype)initWithVar_1346:(MLMultiArray *)var_1346 {
-    self = [super init];
-    if (self) {
-        _var_1346 = var_1346;
-    }
-    return self;
-}
-
-- (NSSet<NSString *> *)featureNames {
-    return [NSSet setWithArray:@[@"var_1346"]];
-}
-
-- (nullable MLFeatureValue *)featureValueForName:(NSString *)featureName {
-    if ([featureName isEqualToString:@"var_1346"]) {
-        return [MLFeatureValue featureValueWithMultiArray:self.var_1346];
-    }
-    return nil;
-}
-
-@end
-
-@implementation whisper_decoder_impl
-
-
-/**
-    URL of the underlying .mlmodelc directory.
-*/
-+ (nullable NSURL *)URLOfModelInThisBundle {
-    NSString *assetPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"whisper_decoder_impl" ofType:@"mlmodelc"];
-    if (nil == assetPath) { os_log_error(OS_LOG_DEFAULT, "Could not load whisper-decoder-impl.mlmodelc in the bundle resource"); return nil; }
-    return [NSURL fileURLWithPath:assetPath];
-}
-
-
-/**
-    Initialize whisper_decoder_impl instance from an existing MLModel object.
-
-    Usually the application does not use this initializer unless it makes a subclass of whisper_decoder_impl.
-    Such application may want to use `-[MLModel initWithContentsOfURL:configuration:error:]` and `+URLOfModelInThisBundle` to create a MLModel object to pass-in.
-*/
-- (instancetype)initWithMLModel:(MLModel *)model {
-    self = [super init];
-    if (!self) { return nil; }
-    _model = model;
-    if (_model == nil) { return nil; }
-    return self;
-}
-
-
-/**
-    Initialize whisper_decoder_impl instance with the model in this bundle.
-*/
-- (nullable instancetype)init {
-    return [self initWithContentsOfURL:(NSURL * _Nonnull)self.class.URLOfModelInThisBundle error:nil];
-}
-
-
-/**
-    Initialize whisper_decoder_impl instance with the model in this bundle.
-
-    @param configuration The model configuration object
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithConfiguration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    return [self initWithContentsOfURL:(NSURL * _Nonnull)self.class.URLOfModelInThisBundle configuration:configuration error:error];
-}
-
-
-/**
-    Initialize whisper_decoder_impl instance from the model URL.
-
-    @param modelURL URL to the .mlmodelc directory for whisper_decoder_impl.
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    MLModel *model = [MLModel modelWithContentsOfURL:modelURL error:error];
-    if (model == nil) { return nil; }
-    return [self initWithMLModel:model];
-}
-
-
-/**
-    Initialize whisper_decoder_impl instance from the model URL.
-
-    @param modelURL URL to the .mlmodelc directory for whisper_decoder_impl.
-    @param configuration The model configuration object
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    MLModel *model = [MLModel modelWithContentsOfURL:modelURL configuration:configuration error:error];
-    if (model == nil) { return nil; }
-    return [self initWithMLModel:model];
-}
-
-
-/**
-    Construct whisper_decoder_impl instance asynchronously with configuration.
-    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
-
-    @param configuration The model configuration
-    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_decoder_impl instance or NSError object.
-*/
-+ (void)loadWithConfiguration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_decoder_impl * _Nullable model, NSError * _Nullable error))handler {
-    [self loadContentsOfURL:(NSURL * _Nonnull)[self URLOfModelInThisBundle]
-              configuration:configuration
-          completionHandler:handler];
-}
-
-
-/**
-    Construct whisper_decoder_impl instance asynchronously with URL of .mlmodelc directory and optional configuration.
-
-    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
-
-    @param modelURL The model URL.
-    @param configuration The model configuration
-    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_decoder_impl instance or NSError object.
-*/
-+ (void)loadContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_decoder_impl * _Nullable model, NSError * _Nullable error))handler {
-    [MLModel loadContentsOfURL:modelURL
-                 configuration:configuration
-             completionHandler:^(MLModel *model, NSError *error) {
-        if (model != nil) {
-            whisper_decoder_impl *typedModel = [[whisper_decoder_impl alloc] initWithMLModel:model];
-            handler(typedModel, nil);
-        } else {
-            handler(nil, error);
-        }
-    }];
-}
-
-- (nullable whisper_decoder_implOutput *)predictionFromFeatures:(whisper_decoder_implInput *)input error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    return [self predictionFromFeatures:input options:[[MLPredictionOptions alloc] init] error:error];
-}
-
-- (nullable whisper_decoder_implOutput *)predictionFromFeatures:(whisper_decoder_implInput *)input options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    id<MLFeatureProvider> outFeatures = [self.model predictionFromFeatures:input options:options error:error];
-    if (!outFeatures) { return nil; }
-    return [[whisper_decoder_implOutput alloc] initWithVar_1346:(MLMultiArray *)[outFeatures featureValueForName:@"var_1346"].multiArrayValue];
-}
-
-- (nullable whisper_decoder_implOutput *)predictionFromToken_data:(MLMultiArray *)token_data audio_data:(MLMultiArray *)audio_data error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    whisper_decoder_implInput *input_ = [[whisper_decoder_implInput alloc] initWithToken_data:token_data audio_data:audio_data];
-    return [self predictionFromFeatures:input_ error:error];
-}
-
-- (nullable NSArray<whisper_decoder_implOutput *> *)predictionsFromInputs:(NSArray<whisper_decoder_implInput*> *)inputArray options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    id<MLBatchProvider> inBatch = [[MLArrayBatchProvider alloc] initWithFeatureProviderArray:inputArray];
-    id<MLBatchProvider> outBatch = [self.model predictionsFromBatch:inBatch options:options error:error];
-    if (!outBatch) { return nil; }
-    NSMutableArray<whisper_decoder_implOutput*> *results = [NSMutableArray arrayWithCapacity:(NSUInteger)outBatch.count];
-    for (NSInteger i = 0; i < outBatch.count; i++) {
-        id<MLFeatureProvider> resultProvider = [outBatch featuresAtIndex:i];
-        whisper_decoder_implOutput * result = [[whisper_decoder_implOutput alloc] initWithVar_1346:(MLMultiArray *)[resultProvider featureValueForName:@"var_1346"].multiArrayValue];
-        [results addObject:result];
-    }
-    return results;
-}
-
-@end
diff --git a/coreml/whisper-encoder-impl.h b/coreml/whisper-encoder-impl.h
deleted file mode 100644 (file)
index 7b83cd9..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-//
-// whisper-encoder-impl.h
-//
-// This file was automatically generated and should not be edited.
-//
-
-#import <Foundation/Foundation.h>
-#import <CoreML/CoreML.h>
-#include <stdint.h>
-#include <os/log.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-
-/// Model Prediction Input Type
-API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
-@interface whisper_encoder_implInput : NSObject<MLFeatureProvider>
-
-/// logmel_data as 1 × 80 × 3000 3-dimensional array of floats
-@property (readwrite, nonatomic, strong) MLMultiArray * logmel_data;
-- (instancetype)init NS_UNAVAILABLE;
-- (instancetype)initWithLogmel_data:(MLMultiArray *)logmel_data NS_DESIGNATED_INITIALIZER;
-
-@end
-
-
-/// Model Prediction Output Type
-API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
-@interface whisper_encoder_implOutput : NSObject<MLFeatureProvider>
-
-/// output as multidimensional array of floats
-@property (readwrite, nonatomic, strong) MLMultiArray * output;
-- (instancetype)init NS_UNAVAILABLE;
-- (instancetype)initWithOutput:(MLMultiArray *)output NS_DESIGNATED_INITIALIZER;
-
-@end
-
-
-/// Class for model loading and prediction
-API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
-@interface whisper_encoder_impl : NSObject
-@property (readonly, nonatomic, nullable) MLModel * model;
-
-/**
-    URL of the underlying .mlmodelc directory.
-*/
-+ (nullable NSURL *)URLOfModelInThisBundle;
-
-/**
-    Initialize whisper_encoder_impl instance from an existing MLModel object.
-
-    Usually the application does not use this initializer unless it makes a subclass of whisper_encoder_impl.
-    Such application may want to use `-[MLModel initWithContentsOfURL:configuration:error:]` and `+URLOfModelInThisBundle` to create a MLModel object to pass-in.
-*/
-- (instancetype)initWithMLModel:(MLModel *)model NS_DESIGNATED_INITIALIZER;
-
-/**
-    Initialize whisper_encoder_impl instance with the model in this bundle.
-*/
-- (nullable instancetype)init;
-
-/**
-    Initialize whisper_encoder_impl instance with the model in this bundle.
-
-    @param configuration The model configuration object
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithConfiguration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Initialize whisper_encoder_impl instance from the model URL.
-
-    @param modelURL URL to the .mlmodelc directory for whisper_encoder_impl.
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Initialize whisper_encoder_impl instance from the model URL.
-
-    @param modelURL URL to the .mlmodelc directory for whisper_encoder_impl.
-    @param configuration The model configuration object
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Construct whisper_encoder_impl instance asynchronously with configuration.
-    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
-
-    @param configuration The model configuration
-    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_encoder_impl instance or NSError object.
-*/
-+ (void)loadWithConfiguration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_encoder_impl * _Nullable model, NSError * _Nullable error))handler;
-
-/**
-    Construct whisper_encoder_impl instance asynchronously with URL of .mlmodelc directory and optional configuration.
-
-    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
-
-    @param modelURL The model URL.
-    @param configuration The model configuration
-    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_encoder_impl instance or NSError object.
-*/
-+ (void)loadContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_encoder_impl * _Nullable model, NSError * _Nullable error))handler;
-
-/**
-    Make a prediction using the standard interface
-    @param input an instance of whisper_encoder_implInput to predict from
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-    @return the prediction as whisper_encoder_implOutput
-*/
-- (nullable whisper_encoder_implOutput *)predictionFromFeatures:(whisper_encoder_implInput *)input error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Make a prediction using the standard interface
-    @param input an instance of whisper_encoder_implInput to predict from
-    @param options prediction options
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-    @return the prediction as whisper_encoder_implOutput
-*/
-- (nullable whisper_encoder_implOutput *)predictionFromFeatures:(whisper_encoder_implInput *)input options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Make a prediction using the convenience interface
-    @param logmel_data as 1 × n_mel × 3000 3-dimensional array of floats:
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-    @return the prediction as whisper_encoder_implOutput
-*/
-- (nullable whisper_encoder_implOutput *)predictionFromLogmel_data:(MLMultiArray *)logmel_data error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-
-/**
-    Batch prediction
-    @param inputArray array of whisper_encoder_implInput instances to obtain predictions from
-    @param options prediction options
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-    @return the predictions as NSArray<whisper_encoder_implOutput *>
-*/
-- (nullable NSArray<whisper_encoder_implOutput *> *)predictionsFromInputs:(NSArray<whisper_encoder_implInput*> *)inputArray options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error;
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/coreml/whisper-encoder-impl.m b/coreml/whisper-encoder-impl.m
deleted file mode 100644 (file)
index ee8e506..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-//
-// whisper-encoder-impl.m
-//
-// This file was automatically generated and should not be edited.
-//
-
-#if !__has_feature(objc_arc)
-#error This file must be compiled with automatic reference counting enabled (-fobjc-arc)
-#endif
-
-#import "whisper-encoder-impl.h"
-
-@implementation whisper_encoder_implInput
-
-- (instancetype)initWithLogmel_data:(MLMultiArray *)logmel_data {
-    self = [super init];
-    if (self) {
-        _logmel_data = logmel_data;
-    }
-    return self;
-}
-
-- (NSSet<NSString *> *)featureNames {
-    return [NSSet setWithArray:@[@"logmel_data"]];
-}
-
-- (nullable MLFeatureValue *)featureValueForName:(NSString *)featureName {
-    if ([featureName isEqualToString:@"logmel_data"]) {
-        return [MLFeatureValue featureValueWithMultiArray:self.logmel_data];
-    }
-    return nil;
-}
-
-@end
-
-@implementation whisper_encoder_implOutput
-
-- (instancetype)initWithOutput:(MLMultiArray *)output {
-    self = [super init];
-    if (self) {
-        _output = output;
-    }
-    return self;
-}
-
-- (NSSet<NSString *> *)featureNames {
-    return [NSSet setWithArray:@[@"output"]];
-}
-
-- (nullable MLFeatureValue *)featureValueForName:(NSString *)featureName {
-    if ([featureName isEqualToString:@"output"]) {
-        return [MLFeatureValue featureValueWithMultiArray:self.output];
-    }
-    return nil;
-}
-
-@end
-
-@implementation whisper_encoder_impl
-
-
-/**
-    URL of the underlying .mlmodelc directory.
-*/
-+ (nullable NSURL *)URLOfModelInThisBundle {
-    NSString *assetPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"whisper_encoder_impl" ofType:@"mlmodelc"];
-    if (nil == assetPath) { os_log_error(OS_LOG_DEFAULT, "Could not load whisper-encoder-impl.mlmodelc in the bundle resource"); return nil; }
-    return [NSURL fileURLWithPath:assetPath];
-}
-
-
-/**
-    Initialize whisper_encoder_impl instance from an existing MLModel object.
-
-    Usually the application does not use this initializer unless it makes a subclass of whisper_encoder_impl.
-    Such application may want to use `-[MLModel initWithContentsOfURL:configuration:error:]` and `+URLOfModelInThisBundle` to create a MLModel object to pass-in.
-*/
-- (instancetype)initWithMLModel:(MLModel *)model {
-    self = [super init];
-    if (!self) { return nil; }
-    _model = model;
-    if (_model == nil) { return nil; }
-    return self;
-}
-
-
-/**
-    Initialize whisper_encoder_impl instance with the model in this bundle.
-*/
-- (nullable instancetype)init {
-    return [self initWithContentsOfURL:(NSURL * _Nonnull)self.class.URLOfModelInThisBundle error:nil];
-}
-
-
-/**
-    Initialize whisper_encoder_impl instance with the model in this bundle.
-
-    @param configuration The model configuration object
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithConfiguration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    return [self initWithContentsOfURL:(NSURL * _Nonnull)self.class.URLOfModelInThisBundle configuration:configuration error:error];
-}
-
-
-/**
-    Initialize whisper_encoder_impl instance from the model URL.
-
-    @param modelURL URL to the .mlmodelc directory for whisper_encoder_impl.
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    MLModel *model = [MLModel modelWithContentsOfURL:modelURL error:error];
-    if (model == nil) { return nil; }
-    return [self initWithMLModel:model];
-}
-
-
-/**
-    Initialize whisper_encoder_impl instance from the model URL.
-
-    @param modelURL URL to the .mlmodelc directory for whisper_encoder_impl.
-    @param configuration The model configuration object
-    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
-*/
-- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    MLModel *model = [MLModel modelWithContentsOfURL:modelURL configuration:configuration error:error];
-    if (model == nil) { return nil; }
-    return [self initWithMLModel:model];
-}
-
-
-/**
-    Construct whisper_encoder_impl instance asynchronously with configuration.
-    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
-
-    @param configuration The model configuration
-    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_encoder_impl instance or NSError object.
-*/
-+ (void)loadWithConfiguration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_encoder_impl * _Nullable model, NSError * _Nullable error))handler {
-    [self loadContentsOfURL:(NSURL * _Nonnull)[self URLOfModelInThisBundle]
-              configuration:configuration
-          completionHandler:handler];
-}
-
-
-/**
-    Construct whisper_encoder_impl instance asynchronously with URL of .mlmodelc directory and optional configuration.
-
-    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
-
-    @param modelURL The model URL.
-    @param configuration The model configuration
-    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_encoder_impl instance or NSError object.
-*/
-+ (void)loadContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_encoder_impl * _Nullable model, NSError * _Nullable error))handler {
-    [MLModel loadContentsOfURL:modelURL
-                 configuration:configuration
-             completionHandler:^(MLModel *model, NSError *error) {
-        if (model != nil) {
-            whisper_encoder_impl *typedModel = [[whisper_encoder_impl alloc] initWithMLModel:model];
-            handler(typedModel, nil);
-        } else {
-            handler(nil, error);
-        }
-    }];
-}
-
-- (nullable whisper_encoder_implOutput *)predictionFromFeatures:(whisper_encoder_implInput *)input error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    return [self predictionFromFeatures:input options:[[MLPredictionOptions alloc] init] error:error];
-}
-
-- (nullable whisper_encoder_implOutput *)predictionFromFeatures:(whisper_encoder_implInput *)input options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    id<MLFeatureProvider> outFeatures = [self.model predictionFromFeatures:input options:options error:error];
-    if (!outFeatures) { return nil; }
-    return [[whisper_encoder_implOutput alloc] initWithOutput:(MLMultiArray *)[outFeatures featureValueForName:@"output"].multiArrayValue];
-}
-
-- (nullable whisper_encoder_implOutput *)predictionFromLogmel_data:(MLMultiArray *)logmel_data error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    whisper_encoder_implInput *input_ = [[whisper_encoder_implInput alloc] initWithLogmel_data:logmel_data];
-    return [self predictionFromFeatures:input_ error:error];
-}
-
-- (nullable NSArray<whisper_encoder_implOutput *> *)predictionsFromInputs:(NSArray<whisper_encoder_implInput*> *)inputArray options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error {
-    id<MLBatchProvider> inBatch = [[MLArrayBatchProvider alloc] initWithFeatureProviderArray:inputArray];
-    id<MLBatchProvider> outBatch = [self.model predictionsFromBatch:inBatch options:options error:error];
-    if (!outBatch) { return nil; }
-    NSMutableArray<whisper_encoder_implOutput*> *results = [NSMutableArray arrayWithCapacity:(NSUInteger)outBatch.count];
-    for (NSInteger i = 0; i < outBatch.count; i++) {
-        id<MLFeatureProvider> resultProvider = [outBatch featuresAtIndex:i];
-        whisper_encoder_implOutput * result = [[whisper_encoder_implOutput alloc] initWithOutput:(MLMultiArray *)[resultProvider featureValueForName:@"output"].multiArrayValue];
-        [results addObject:result];
-    }
-    return results;
-}
-
-@end
diff --git a/coreml/whisper-encoder.h b/coreml/whisper-encoder.h
deleted file mode 100644 (file)
index 508df7c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-// Wrapper of the Core ML Whisper Encoder model
-//
-// Code is derived from the work of Github user @wangchou
-// ref: https://github.com/wangchou/callCoreMLFromCpp
-
-#include <stdint.h>
-
-#if __cplusplus
-extern "C" {
-#endif
-
-struct whisper_coreml_context;
-
-struct whisper_coreml_context * whisper_coreml_init(const char * path_model);
-void whisper_coreml_free(struct whisper_coreml_context * ctx);
-
-void whisper_coreml_encode(
-        const whisper_coreml_context * ctx,
-                             int64_t   n_ctx,
-                             int64_t   n_mel,
-                               float * mel,
-                               float * out);
-
-#if __cplusplus
-}
-#endif
diff --git a/coreml/whisper-encoder.mm b/coreml/whisper-encoder.mm
deleted file mode 100644 (file)
index 81a5a6a..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#if !__has_feature(objc_arc)
-#error This file must be compiled with automatic reference counting enabled (-fobjc-arc)
-#endif
-
-#import "whisper-encoder.h"
-#import "whisper-encoder-impl.h"
-
-#import <CoreML/CoreML.h>
-
-#include <stdlib.h>
-
-#if __cplusplus
-extern "C" {
-#endif
-
-struct whisper_coreml_context {
-    const void * data;
-};
-
-struct whisper_coreml_context * whisper_coreml_init(const char * path_model) {
-    NSString * path_model_str = [[NSString alloc] initWithUTF8String:path_model];
-
-    NSURL * url_model = [NSURL fileURLWithPath: path_model_str];
-
-    // select which device to run the Core ML model on
-    MLModelConfiguration *config = [[MLModelConfiguration alloc] init];
-    // config.computeUnits = MLComputeUnitsCPUAndGPU;
-    //config.computeUnits = MLComputeUnitsCPUAndNeuralEngine;
-    config.computeUnits = MLComputeUnitsAll;
-
-    const void * data = CFBridgingRetain([[whisper_encoder_impl alloc] initWithContentsOfURL:url_model configuration:config error:nil]);
-
-    if (data == NULL) {
-        return NULL;
-    }
-
-    whisper_coreml_context * ctx = new whisper_coreml_context;
-
-    ctx->data = data;
-
-    return ctx;
-}
-
-void whisper_coreml_free(struct whisper_coreml_context * ctx) {
-    CFRelease(ctx->data);
-    delete ctx;
-}
-
-void whisper_coreml_encode(
-        const whisper_coreml_context * ctx,
-                             int64_t   n_ctx,
-                             int64_t   n_mel,
-                               float * mel,
-                               float * out) {
-    MLMultiArray * inMultiArray = [
-        [MLMultiArray alloc] initWithDataPointer: mel
-                                           shape: @[@1, @(n_mel), @(n_ctx)]
-                                        dataType: MLMultiArrayDataTypeFloat32
-                                         strides: @[@(n_ctx*n_mel), @(n_ctx), @1]
-                                     deallocator: nil
-                                           error: nil
-    ];
-
-    @autoreleasepool {
-        whisper_encoder_implOutput * outCoreML = [(__bridge id) ctx->data predictionFromLogmel_data:inMultiArray error:nil];
-
-        memcpy(out, outCoreML.output.dataPointer, outCoreML.output.count * sizeof(float));
-    }
-}
-
-#if __cplusplus
-}
-#endif
index cac9385c82f272f5735b21226f5f9d2929c59c60..d19c8ac54af62940abdd56fb3851cbafe8c03339 100644 (file)
@@ -18,7 +18,7 @@ struct whisper_params {
 
 void whisper_print_usage(int argc, char ** argv, const whisper_params & params);
 
-bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
+static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
     for (int i = 1; i < argc; i++) {
         std::string arg = argv[i];
 
@@ -58,7 +58,7 @@ void whisper_print_usage(int /*argc*/, char ** argv, const whisper_params & para
     fprintf(stderr, "\n");
 }
 
-int whisper_bench_full(const whisper_params & params) {
+static int whisper_bench_full(const whisper_params & params) {
     // whisper init
 
     struct whisper_context_params cparams = whisper_context_default_params();
index 84424d4331b2aeca3be4331963523dfd0625c15f..11ed9ed6bd3ce8e02855fd21e0c24e7330a873d9 100644 (file)
@@ -59,7 +59,7 @@ struct whisper_params {
 
 void whisper_print_usage(int argc, char ** argv, const whisper_params & params);
 
-bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
+static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
     for (int i = 1; i < argc; i++) {
         std::string arg = argv[i];
 
@@ -130,7 +130,7 @@ void whisper_print_usage(int /*argc*/, char ** argv, const whisper_params & para
     fprintf(stderr, "\n");
 }
 
-std::string transcribe(
+static std::string transcribe(
                  whisper_context * ctx,
             const whisper_params & params,
         const std::vector<float> & pcmf32,
@@ -216,7 +216,7 @@ std::string transcribe(
     return result;
 }
 
-std::vector<std::string> read_allowed_commands(const std::string & fname) {
+static std::vector<std::string> read_allowed_commands(const std::string & fname) {
     std::vector<std::string> allowed_commands;
 
     std::ifstream ifs(fname);
@@ -238,7 +238,7 @@ std::vector<std::string> read_allowed_commands(const std::string & fname) {
     return allowed_commands;
 }
 
-std::vector<std::string> get_words(const std::string &txt) {
+static std::vector<std::string> get_words(const std::string &txt) {
     std::vector<std::string> words;
 
     std::istringstream iss(txt);
@@ -252,7 +252,7 @@ std::vector<std::string> get_words(const std::string &txt) {
 
 // command-list mode
 // guide the transcription to match the most likely command from a provided list
-int process_command_list(struct whisper_context * ctx, audio_async &audio, const whisper_params &params) {
+static int process_command_list(struct whisper_context * ctx, audio_async &audio, const whisper_params &params) {
     fprintf(stderr, "\n");
     fprintf(stderr, "%s: guided mode\n", __func__);
 
@@ -463,7 +463,7 @@ int process_command_list(struct whisper_context * ctx, audio_async &audio, const
 
 // always-prompt mode
 // transcribe the voice into text after valid prompt
-int always_prompt_transcription(struct whisper_context * ctx, audio_async & audio, const whisper_params & params) {
+static int always_prompt_transcription(struct whisper_context * ctx, audio_async & audio, const whisper_params & params) {
     bool is_running = true;
     bool ask_prompt = true;
 
@@ -543,7 +543,7 @@ int always_prompt_transcription(struct whisper_context * ctx, audio_async & audi
 
 // general-purpose mode
 // freely transcribe the voice into text
-int process_general_transcription(struct whisper_context * ctx, audio_async & audio, const whisper_params & params) {
+static int process_general_transcription(struct whisper_context * ctx, audio_async & audio, const whisper_params & params) {
     bool is_running  = true;
     bool have_prompt = false;
     bool ask_prompt  = true;
index 5fc28e53f44bb31bd52b83ecb36d7d643832c329..5329ec739b602bb118852e9d1dcba564fd97dc9f 100644 (file)
@@ -219,7 +219,7 @@ bool sdl_poll_events() {
             case SDL_QUIT:
                 {
                     return false;
-                } break;
+                }
             default:
                 break;
         }
index 6133b8c7fc27de4cda8321cce59b043689f505d2..e282fc7bf56169831f18c11afe64c28dd9203903 100644 (file)
@@ -9,7 +9,7 @@
 namespace grammar_parser {
     // NOTE: assumes valid utf8 (but checks for overrun)
     // copied from whisper.cpp
-    std::pair<uint32_t, const char *> decode_utf8(const char * src) {
+    static std::pair<uint32_t, const char *> decode_utf8(const char * src) {
         static const int lookup[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4 };
         uint8_t  first_byte = static_cast<uint8_t>(*src);
         uint8_t  highbits   = first_byte >> 4;
@@ -24,19 +24,19 @@ namespace grammar_parser {
         return std::make_pair(value, pos);
     }
 
-    uint32_t get_symbol_id(parse_state & state, const char * src, size_t len) {
+    static uint32_t get_symbol_id(parse_state & state, const char * src, size_t len) {
         uint32_t next_id = static_cast<uint32_t>(state.symbol_ids.size());
         auto result = state.symbol_ids.insert(std::make_pair(std::string(src, len), next_id));
         return result.first->second;
     }
 
-    uint32_t generate_symbol_id(parse_state & state, const std::string & base_name) {
+    static uint32_t generate_symbol_id(parse_state & state, const std::string & base_name) {
         uint32_t next_id = static_cast<uint32_t>(state.symbol_ids.size());
         state.symbol_ids[base_name + '_' + std::to_string(next_id)] = next_id;
         return next_id;
     }
 
-    void add_rule(
+    static void add_rule(
             parse_state & state,
             uint32_t      rule_id,
             const std::vector<whisper_grammar_element> & rule) {
@@ -46,11 +46,11 @@ namespace grammar_parser {
         state.rules[rule_id] = rule;
     }
 
-    bool is_word_char(char c) {
+    static bool is_word_char(char c) {
         return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '-' || ('0' <= c && c <= '9');
     }
 
-    std::pair<uint32_t, const char *> parse_hex(const char * src, int size) {
+    static std::pair<uint32_t, const char *> parse_hex(const char * src, int size) {
         const char * pos   = src;
         const char * end   = src + size;
         uint32_t     value = 0;
@@ -73,7 +73,7 @@ namespace grammar_parser {
         return std::make_pair(value, pos);
     }
 
-    const char * parse_space(const char * src, bool newline_ok) {
+    static const char * parse_space(const char * src, bool newline_ok) {
         const char * pos = src;
         while (*pos == ' ' || *pos == '\t' || *pos == '#' ||
                 (newline_ok && (*pos == '\r' || *pos == '\n'))) {
@@ -88,7 +88,7 @@ namespace grammar_parser {
         return pos;
     }
 
-    const char * parse_name(const char * src) {
+    static const char * parse_name(const char * src) {
         const char * pos = src;
         while (is_word_char(*pos)) {
             pos++;
@@ -99,7 +99,7 @@ namespace grammar_parser {
         return pos;
     }
 
-    std::pair<uint32_t, const char *> parse_char(const char * src) {
+    static std::pair<uint32_t, const char *> parse_char(const char * src) {
         if (*src == '\\') {
             switch (src[1]) {
                 case 'x': return parse_hex(src + 2, 2);
@@ -122,14 +122,14 @@ namespace grammar_parser {
         throw std::runtime_error("unexpected end of input");
     }
 
-    const char * parse_alternates(
+    static const char * parse_alternates(
             parse_state       & state,
             const char        * src,
             const std::string & rule_name,
             uint32_t            rule_id,
             bool                is_nested);
 
-    const char * parse_sequence(
+    static const char * parse_sequence(
             parse_state                        & state,
             const char                         * src,
             const std::string                  & rule_name,
@@ -229,7 +229,7 @@ namespace grammar_parser {
         return pos;
     }
 
-    const char * parse_alternates(
+    static const char * parse_alternates(
             parse_state       & state,
             const char        * src,
             const std::string & rule_name,
@@ -247,7 +247,7 @@ namespace grammar_parser {
         return pos;
     }
 
-    const char * parse_rule(parse_state & state, const char * src) {
+    static const char * parse_rule(parse_state & state, const char * src) {
         const char * name_end = parse_name(src);
         const char * pos      = parse_space(name_end, false);
         size_t       name_len = name_end - src;
@@ -285,7 +285,7 @@ namespace grammar_parser {
         }
     }
 
-    void print_grammar_char(FILE * file, uint32_t c) {
+    static void print_grammar_char(FILE * file, uint32_t c) {
         if (0x20 <= c && c <= 0x7f) {
             fprintf(file, "%c", static_cast<char>(c));
         } else {
@@ -294,7 +294,7 @@ namespace grammar_parser {
         }
     }
 
-    bool is_char_element(whisper_grammar_element elem) {
+    static bool is_char_element(whisper_grammar_element elem) {
         switch (elem.type) {
             case WHISPER_GRETYPE_CHAR:           return true;
             case WHISPER_GRETYPE_CHAR_NOT:       return true;
@@ -304,7 +304,7 @@ namespace grammar_parser {
         }
     }
 
-    void print_rule_binary(FILE * file, const std::vector<whisper_grammar_element> & rule) {
+    static void print_rule_binary(FILE * file, const std::vector<whisper_grammar_element> & rule) {
         for (auto elem : rule) {
             switch (elem.type) {
                 case WHISPER_GRETYPE_END:            fprintf(file, "END");            break;
@@ -334,7 +334,7 @@ namespace grammar_parser {
         fprintf(file, "\n");
     }
 
-    void print_rule(
+    static void print_rule(
             FILE     * file,
             uint32_t   rule_id,
             const std::vector<whisper_grammar_element> & rule,
@@ -413,7 +413,7 @@ namespace grammar_parser {
         }
     }
 
-    std::vector<const whisper_grammar_element *> parse_state::c_rules() const{
+    std::vector<const whisper_grammar_element *> parse_state::c_rules() const {
         std::vector<const whisper_grammar_element *> ret;
         for (const auto & rule : rules) {
             ret.push_back(rule.data());
index 8cca87151bf9fda39213e90b6449b43da79f20f1..1afc159f60395cf6ed44d9dcfbb7c275e3745a30 100644 (file)
@@ -53,7 +53,7 @@ struct commandset {
 
 void whisper_print_usage(int argc, char ** argv, const whisper_params & params);
 
-bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
+static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
     for (int i = 1; i < argc; i++) {
         std::string arg = argv[i];
 
@@ -109,7 +109,7 @@ void whisper_print_usage(int /*argc*/, char ** argv, const whisper_params & para
     fprintf(stderr, "  -m FNAME,   --model FNAME    [%-7s] model path\n",                                  params.model.c_str());
     fprintf(stderr, "\n");
 }
-uint64_t wait_for_vad(audio_async & audio, json jparams, const whisper_params & params, uint64_t maxlength_ms, std::vector<float> & pcmf32) {
+static uint64_t wait_for_vad(audio_async & audio, json jparams, const whisper_params & params, uint64_t maxlength_ms, std::vector<float> & pcmf32) {
     using namespace std::chrono;
     uint64_t time_now = time_point_cast<milliseconds>(system_clock::now()).time_since_epoch().count();
     uint64_t start_time = time_now;
@@ -153,7 +153,7 @@ uint64_t wait_for_vad(audio_async & audio, json jparams, const whisper_params &
     return time_now;
 }
 
-json unguided_transcription(struct whisper_context * ctx, audio_async &audio, json jparams, const whisper_params &params) {
+static json unguided_transcription(struct whisper_context * ctx, audio_async &audio, json jparams, const whisper_params &params) {
     std::vector<whisper_token> prompt_tokens;
     std::vector<float> pcmf32;
     uint64_t unprocessed_audio_timestamp = wait_for_vad(audio, jparams, params, 10000U, pcmf32);
@@ -199,7 +199,7 @@ json unguided_transcription(struct whisper_context * ctx, audio_async &audio, js
 
 // command-list mode
 // guide the transcription to match the most likely command from a provided list
-json guided_transcription(struct whisper_context * ctx, audio_async &audio, const whisper_params &params, json jparams, std::vector<struct commandset> commandset_list) {
+static json guided_transcription(struct whisper_context * ctx, audio_async &audio, const whisper_params &params, json jparams, std::vector<struct commandset> commandset_list) {
     struct commandset cs = commandset_list[jparams.value("commandset_index", commandset_list.size()-1)];
     std::vector<float> pcmf32;
     uint64_t unprocessed_audio_timestamp = wait_for_vad(audio, jparams, params, 2000U, pcmf32);
@@ -285,7 +285,7 @@ json guided_transcription(struct whisper_context * ctx, audio_async &audio, cons
     }
 }
 
-json register_commandset(struct whisper_context * ctx, json jparams, std::vector<struct commandset> &commandset_list) {
+static json register_commandset(struct whisper_context * ctx, json jparams, std::vector<struct commandset> &commandset_list) {
     // TODO: check for token collision
     struct commandset cs;
 
@@ -325,7 +325,8 @@ json register_commandset(struct whisper_context * ctx, json jparams, std::vector
     commandset_list.push_back(cs);
     return json{{"index",index}};
 }
-json seek(struct whisper_context * /*ctx*/, audio_async & /*audio*/, json /*params*/) {
+
+static json seek(struct whisper_context * /*ctx*/, audio_async & /*audio*/, json /*params*/) {
     // whisper_state has the pertinent offsets, but there also seem to be a large
     // number of scratch buffers that would prevent rewinding context in a manner similar to llama
     // I'll give this a another pass once everything else is implemented,
@@ -335,7 +336,8 @@ json seek(struct whisper_context * /*ctx*/, audio_async & /*audio*/, json /*para
             {"message", "Seeking is not yet supported."}
     };
 }
-json parse_job(const json &body, struct whisper_context * ctx, audio_async &audio, const whisper_params &params, std::vector<struct commandset> &commandset_list) {
+
+static json parse_job(const json &body, struct whisper_context * ctx, audio_async &audio, const whisper_params &params, std::vector<struct commandset> &commandset_list) {
     // See: https://www.jsonrpc.org/specification
     json id = body.at("id");
     try {
@@ -375,7 +377,7 @@ json parse_job(const json &body, struct whisper_context * ctx, audio_async &audi
     }
 }
 
-void process_loop(struct whisper_context * ctx, audio_async &audio, const whisper_params &params) {
+static void process_loop(struct whisper_context * ctx, audio_async &audio, const whisper_params &params) {
     std::deque<json> jobqueue;
     std::vector<struct commandset> commandset_list;
     while (true) {
index bb9b7b79ce5e68a314138ae89a2547f64d82081a..8847e9d37a04183559d3bf8716f934c24ba18f1b 100644 (file)
@@ -17,7 +17,7 @@
 #endif
 
 // helper function to replace substrings
-void replace_all(std::string & s, const std::string & search, const std::string & replace) {
+static void replace_all(std::string & s, const std::string & search, const std::string & replace) {
     for (size_t pos = 0; ; pos += replace.length()) {
         pos = s.find(search, pos);
         if (pos == std::string::npos) break;
@@ -94,17 +94,17 @@ struct whisper_params {
     grammar_parser::parse_state grammar_parsed;
 };
 
-void whisper_print_usage(int argc, char ** argv, const whisper_params & params);
+static void whisper_print_usage(int argc, char ** argv, const whisper_params & params);
 
-char* whisper_param_turn_lowercase(char* in){
+static char * whisper_param_turn_lowercase(char * in){
     int string_len = strlen(in);
-    for(int i = 0; i < string_len; i++){
+    for (int i = 0; i < string_len; i++){
         *(in+i) = tolower((unsigned char)*(in+i));
     }
     return in;
 }
 
-bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
+static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
     for (int i = 1; i < argc; i++) {
         std::string arg = argv[i];
 
@@ -182,7 +182,7 @@ bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
     return true;
 }
 
-void whisper_print_usage(int /*argc*/, char ** argv, const whisper_params & params) {
+static void whisper_print_usage(int /*argc*/, char ** argv, const whisper_params & params) {
     fprintf(stderr, "\n");
     fprintf(stderr, "usage: %s [options] file0.wav file1.wav ...\n", argv[0]);
     fprintf(stderr, "\n");
@@ -248,7 +248,7 @@ struct whisper_print_user_data {
     int progress_prev;
 };
 
-std::string estimate_diarization_speaker(std::vector<std::vector<float>> pcmf32s, int64_t t0, int64_t t1, bool id_only = false) {
+static std::string estimate_diarization_speaker(std::vector<std::vector<float>> pcmf32s, int64_t t0, int64_t t1, bool id_only = false) {
     std::string speaker = "";
     const int64_t n_samples = pcmf32s[0].size();
 
@@ -280,7 +280,8 @@ std::string estimate_diarization_speaker(std::vector<std::vector<float>> pcmf32s
 
     return speaker;
 }
-void whisper_print_progress_callback(struct whisper_context * /*ctx*/, struct whisper_state * /*state*/, int progress, void * user_data) {
+
+static void whisper_print_progress_callback(struct whisper_context * /*ctx*/, struct whisper_state * /*state*/, int progress, void * user_data) {
     int progress_step = ((whisper_print_user_data *) user_data)->params->progress_step;
     int * progress_prev  = &(((whisper_print_user_data *) user_data)->progress_prev);
     if (progress >= *progress_prev + progress_step) {
@@ -289,7 +290,7 @@ void whisper_print_progress_callback(struct whisper_context * /*ctx*/, struct wh
     }
 }
 
-void whisper_print_segment_callback(struct whisper_context * ctx, struct whisper_state * /*state*/, int n_new, void * user_data) {
+static void whisper_print_segment_callback(struct whisper_context * ctx, struct whisper_state * /*state*/, int n_new, void * user_data) {
     const auto & params  = *((whisper_print_user_data *) user_data)->params;
     const auto & pcmf32s = *((whisper_print_user_data *) user_data)->pcmf32s;
 
@@ -358,7 +359,7 @@ void whisper_print_segment_callback(struct whisper_context * ctx, struct whisper
     }
 }
 
-bool output_txt(struct whisper_context * ctx, const char * fname, const whisper_params & params, std::vector<std::vector<float>> pcmf32s) {
+static bool output_txt(struct whisper_context * ctx, const char * fname, const whisper_params & params, std::vector<std::vector<float>> pcmf32s) {
     std::ofstream fout(fname);
     if (!fout.is_open()) {
         fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname);
@@ -385,7 +386,7 @@ bool output_txt(struct whisper_context * ctx, const char * fname, const whisper_
     return true;
 }
 
-bool output_vtt(struct whisper_context * ctx, const char * fname, const whisper_params & params, std::vector<std::vector<float>> pcmf32s) {
+static bool output_vtt(struct whisper_context * ctx, const char * fname, const whisper_params & params, std::vector<std::vector<float>> pcmf32s) {
     std::ofstream fout(fname);
     if (!fout.is_open()) {
         fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname);
@@ -417,7 +418,7 @@ bool output_vtt(struct whisper_context * ctx, const char * fname, const whisper_
     return true;
 }
 
-bool output_srt(struct whisper_context * ctx, const char * fname, const whisper_params & params, std::vector<std::vector<float>> pcmf32s) {
+static bool output_srt(struct whisper_context * ctx, const char * fname, const whisper_params & params, std::vector<std::vector<float>> pcmf32s) {
     std::ofstream fout(fname);
     if (!fout.is_open()) {
         fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname);
@@ -446,7 +447,7 @@ bool output_srt(struct whisper_context * ctx, const char * fname, const whisper_
     return true;
 }
 
-char *escape_double_quotes_and_backslashes(const char *str) {
+static char * escape_double_quotes_and_backslashes(const char * str) {
     if (str == NULL) {
         return NULL;
     }
@@ -459,7 +460,7 @@ char *escape_double_quotes_and_backslashes(const char *str) {
         }
     }
 
-    char *escaped = (char *)calloc(escaped_length, 1); // pre-zeroed
+    char * escaped = (char *)calloc(escaped_length, 1); // pre-zeroed
     if (escaped == NULL) {
         return NULL;
     }
@@ -478,7 +479,7 @@ char *escape_double_quotes_and_backslashes(const char *str) {
 }
 
 // double quote should be escaped by another double quote. (rfc4180)
-char *escape_double_quotes_in_csv(const char *str) {
+static char * escape_double_quotes_in_csv(const char * str) {
     if (str == NULL) {
         return NULL;
     }
@@ -509,7 +510,7 @@ char *escape_double_quotes_in_csv(const char *str) {
     return escaped;
 }
 
-bool output_csv(struct whisper_context * ctx, const char * fname, const whisper_params & params, std::vector<std::vector<float>> pcmf32s) {
+static bool output_csv(struct whisper_context * ctx, const char * fname, const whisper_params & params, std::vector<std::vector<float>> pcmf32s) {
     std::ofstream fout(fname);
     if (!fout.is_open()) {
         fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname);
@@ -544,7 +545,7 @@ bool output_csv(struct whisper_context * ctx, const char * fname, const whisper_
     return true;
 }
 
-bool output_score(struct whisper_context * ctx, const char * fname, const whisper_params & /*params*/, std::vector<std::vector<float>> /*pcmf32s*/) {
+static bool output_score(struct whisper_context * ctx, const char * fname, const whisper_params & /*params*/, std::vector<std::vector<float>> /*pcmf32s*/) {
     std::ofstream fout(fname);
     fprintf(stderr, "%s: saving output to '%s'\n", __func__, fname);
 
@@ -563,7 +564,7 @@ bool output_score(struct whisper_context * ctx, const char * fname, const whispe
     return true;
 }
 
-bool output_json(
+static bool output_json(
              struct whisper_context * ctx,
                          const char * fname,
                const whisper_params & params,
@@ -734,7 +735,7 @@ bool output_json(
 // karaoke video generation
 // outputs a bash script that uses ffmpeg to generate a video with the subtitles
 // TODO: font parameter adjustments
-bool output_wts(struct whisper_context * ctx, const char * fname, const char * fname_inp, const whisper_params & params, float t_sec, std::vector<std::vector<float>> pcmf32s) {
+static bool output_wts(struct whisper_context * ctx, const char * fname, const char * fname_inp, const whisper_params & params, float t_sec, std::vector<std::vector<float>> pcmf32s) {
     std::ofstream fout(fname);
 
     fprintf(stderr, "%s: saving output to '%s'\n", __func__, fname);
@@ -859,7 +860,7 @@ bool output_wts(struct whisper_context * ctx, const char * fname, const char * f
     return true;
 }
 
-bool output_lrc(struct whisper_context * ctx, const char * fname, const whisper_params & params, std::vector<std::vector<float>> pcmf32s) {
+static bool output_lrc(struct whisper_context * ctx, const char * fname, const whisper_params & params, std::vector<std::vector<float>> pcmf32s) {
     std::ofstream fout(fname);
     if (!fout.is_open()) {
         fprintf(stderr, "%s: failed to open '%s' for writing\n", __func__, fname);
@@ -900,7 +901,7 @@ bool output_lrc(struct whisper_context * ctx, const char * fname, const whisper_
 }
 
 
-void cb_log_disable(enum ggml_log_level , const char * , void * ) { }
+static void cb_log_disable(enum ggml_log_level , const char * , void * ) { }
 
 int main(int argc, char ** argv) {
     whisper_params params;
index b01d61431086eaab0fcdd73418e95077fa4750b6..176883803b4d6975e49da0de750487a60d4ba0ea 100644 (file)
@@ -36,7 +36,7 @@ struct whisper_filters {
 };
 
 // quantize a model
-bool whisper_model_quantize(const std::string & fname_inp, const std::string & fname_out, ggml_ftype ftype) {
+static bool whisper_model_quantize(const std::string & fname_inp, const std::string & fname_out, ggml_ftype ftype) {
     gpt_vocab vocab;
 
     printf("%s: loading model from '%s'\n", __func__, fname_inp.c_str());
index 50797e96daa5aaff8a5e3742342f527373ed703f..190f68a2c3be8fddaded2a0c900eb47d8c032221 100644 (file)
@@ -44,7 +44,7 @@ struct whisper_params {
 
 void whisper_print_usage(int argc, char ** argv, const whisper_params & params);
 
-bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
+static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
     for (int i = 1; i < argc; i++) {
         std::string arg = argv[i];
 
index e06c851ad5b6c25eea86bb1e111a3f937874d3f7..49bc93c028a2a66ef34498a0c80ee4400a9bd934 100644 (file)
@@ -225,6 +225,7 @@ enum llm_arch {
     LLM_ARCH_OLMO,
     LLM_ARCH_ARCTIC,
     LLM_ARCH_DEEPSEEK2,
+    LLM_ARCH_BITNET,
     LLM_ARCH_UNKNOWN,
 };
 
@@ -263,6 +264,7 @@ static const std::map<llm_arch, const char *> LLM_ARCH_NAMES = {
     { LLM_ARCH_OLMO,            "olmo"         },
     { LLM_ARCH_ARCTIC,          "arctic"       },
     { LLM_ARCH_DEEPSEEK2,       "deepseek2"    },
+    { LLM_ARCH_BITNET,          "bitnet"       },
     { LLM_ARCH_UNKNOWN,         "(unknown)"    },
 };
 
@@ -500,6 +502,8 @@ enum llm_tensor {
     LLM_TENSOR_ATTN_KV_B,
     LLM_TENSOR_ATTN_Q_A_NORM,
     LLM_TENSOR_ATTN_KV_A_NORM,
+    LLM_TENSOR_ATTN_SUB_NORM,
+    LLM_TENSOR_FFN_SUB_NORM,
 };
 
 static const std::map<llm_arch, std::map<llm_tensor, std::string>> LLM_TENSOR_NAMES = {
@@ -1113,6 +1117,24 @@ static const std::map<llm_arch, std::map<llm_tensor, std::string>> LLM_TENSOR_NA
             { LLM_TENSOR_FFN_UP_SHEXP,       "blk.%d.ffn_up_shexp" },
         },
     },
+    {
+        LLM_ARCH_BITNET,
+        {
+            { LLM_TENSOR_TOKEN_EMBD,         "token_embd" },
+            { LLM_TENSOR_OUTPUT_NORM,        "output_norm" },
+            { LLM_TENSOR_ATTN_Q,             "blk.%d.attn_q" },
+            { LLM_TENSOR_ATTN_K,             "blk.%d.attn_k" },
+            { LLM_TENSOR_ATTN_V,             "blk.%d.attn_v" },
+            { LLM_TENSOR_ATTN_OUT,           "blk.%d.attn_output" },
+            { LLM_TENSOR_ATTN_NORM,          "blk.%d.attn_norm" },
+            { LLM_TENSOR_ATTN_SUB_NORM,      "blk.%d.attn_sub_norm" },
+            { LLM_TENSOR_FFN_GATE,           "blk.%d.ffn_gate" },
+            { LLM_TENSOR_FFN_DOWN,           "blk.%d.ffn_down" },
+            { LLM_TENSOR_FFN_UP,             "blk.%d.ffn_up" },
+            { LLM_TENSOR_FFN_NORM,           "blk.%d.ffn_norm" },
+            { LLM_TENSOR_FFN_SUB_NORM,       "blk.%d.ffn_sub_norm" },
+        },
+    },
     {
         LLM_ARCH_UNKNOWN,
         {
@@ -2118,6 +2140,8 @@ struct llama_layer {
     struct ggml_tensor * attn_out_norm_b;
     struct ggml_tensor * attn_q_a_norm;
     struct ggml_tensor * attn_kv_a_norm;
+    struct ggml_tensor * attn_sub_norm;
+    struct ggml_tensor * ffn_sub_norm;
 
     // attention
     struct ggml_tensor * wq;
@@ -2185,6 +2209,15 @@ struct llama_layer {
     // long rope factors
     struct ggml_tensor * rope_long  = nullptr;
     struct ggml_tensor * rope_short = nullptr;
+
+    // bitnet scale
+    struct ggml_tensor * wq_scale;
+    struct ggml_tensor * wk_scale;
+    struct ggml_tensor * wv_scale;
+    struct ggml_tensor * wo_scale;
+    struct ggml_tensor * ffn_gate_scale;
+    struct ggml_tensor * ffn_up_scale;
+    struct ggml_tensor * ffn_down_scale;
 };
 
 struct llama_kv_cell {
@@ -2293,6 +2326,8 @@ struct llama_vocab {
     enum llama_vocab_type     type     = LLAMA_VOCAB_TYPE_SPM;
     enum llama_vocab_pre_type type_pre = LLAMA_VOCAB_PRE_TYPE_DEFAULT;
 
+    int max_token_len = 0; // used for optimizing longest token search
+
     std::unordered_map<token, id> token_to_id;
     std::vector<token_data>       id_to_token;
 
@@ -2310,16 +2345,17 @@ struct llama_vocab {
     id special_cls_id  = -1;
     id special_mask_id = -1;
 
-    int special_add_bos = -1; // -1 unknown, 1 add, 0 don't add.
-    int special_add_eos = -1; // -1 unknown, 1 add, 0 don't add.
-
     id linefeed_id       = 13;
     id special_prefix_id = -1;
     id special_suffix_id = -1;
     id special_middle_id = -1;
     id special_eot_id    = -1; // TODO: move above after "eos_id", and here add "file separator" token
 
-    bool add_space_prefix = true;
+    // tokenizer flags
+    bool tokenizer_add_space_prefix = true;
+    bool tokenizer_add_bos          = false;
+    bool tokenizer_add_eos          = false;
+    bool tokenizer_ignore_merges    = false;
 
     int find_bpe_rank(const std::string & token_left, const std::string & token_right) const {
         GGML_ASSERT(token_left.find(' ') == std::string::npos);
@@ -4707,6 +4743,15 @@ static void llm_load_hparams(
                     default: model.type = e_model::MODEL_UNKNOWN;
                 }
             } break;
+        case LLM_ARCH_BITNET:
+            {
+                ml.get_key(LLM_KV_ATTENTION_LAYERNORM_RMS_EPS, hparams.f_norm_rms_eps);
+
+                switch (hparams.n_layer) {
+                    case 26: model.type = e_model::MODEL_3B; break;
+                    default: model.type = e_model::MODEL_UNKNOWN;
+                }
+            } break;
         default: (void)0;
     }
 
@@ -4770,7 +4815,7 @@ static void llm_load_vocab(
 
             const int add_space_prefix_keyidx = gguf_find_key(ctx, kv(LLM_KV_TOKENIZER_ADD_PREFIX).c_str());
             if (add_space_prefix_keyidx != -1) {
-                vocab.add_space_prefix = gguf_get_val_bool(ctx, add_space_prefix_keyidx);
+                vocab.tokenizer_add_space_prefix = gguf_get_val_bool(ctx, add_space_prefix_keyidx);
             } // The default value of add_space_prefix is true.
         } else if (tokenizer_model == "bert") {
             vocab.type = LLAMA_VOCAB_TYPE_WPM;
@@ -4783,13 +4828,13 @@ static void llm_load_vocab(
             vocab.special_pad_id  = 0;
             vocab.special_cls_id  = 101;
             vocab.special_mask_id = 103;
-            vocab.add_space_prefix = false;
+            vocab.tokenizer_add_space_prefix = false;
         } else if (tokenizer_model == "gpt2") {
             vocab.type = LLAMA_VOCAB_TYPE_BPE;
 
             const int add_space_prefix_keyidx = gguf_find_key(ctx, kv(LLM_KV_TOKENIZER_ADD_PREFIX).c_str());
             if (add_space_prefix_keyidx != -1) {
-                vocab.add_space_prefix = gguf_get_val_bool(ctx, add_space_prefix_keyidx);
+                vocab.tokenizer_add_space_prefix = gguf_get_val_bool(ctx, add_space_prefix_keyidx);
             }
 
             // read bpe merges and populate bpe ranks
@@ -4847,6 +4892,8 @@ static void llm_load_vocab(
                     tokenizer_pre == "llama-v3" ||
                     tokenizer_pre == "llama-bpe") {
                 vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_LLAMA3;
+                vocab.tokenizer_ignore_merges = true;
+                vocab.tokenizer_add_bos = true;
             } else if (
                     tokenizer_pre == "deepseek-llm") {
                 vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_DEEPSEEK_LLM;
@@ -4897,6 +4944,14 @@ static void llm_load_vocab(
             } else {
                 throw std::runtime_error(format("unknown pre-tokenizer type: '%s'", tokenizer_pre.c_str()));
             }
+        } else if (vocab.type == LLAMA_VOCAB_TYPE_SPM) {
+            vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_DEFAULT;
+            vocab.tokenizer_add_bos = true;
+            vocab.tokenizer_add_eos = false;
+        } else if (vocab.type == LLAMA_VOCAB_TYPE_WPM) {
+            vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_DEFAULT;
+            vocab.tokenizer_add_bos = true;
+            vocab.tokenizer_add_eos = false;
         } else {
             vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_DEFAULT;
         }
@@ -4928,6 +4983,7 @@ static void llm_load_vocab(
         GGML_ASSERT(unicode_cpts_from_utf8(word).size() > 0);
 
         vocab.token_to_id[word] = i;
+        vocab.max_token_len = std::max(vocab.max_token_len, (int) word.size());
 
         auto & token_data = vocab.id_to_token[i];
         token_data.text  = std::move(word);
@@ -5041,10 +5097,10 @@ static void llm_load_vocab(
             bool temp = true;
 
             if (ml.get_key(LLM_KV_TOKENIZER_ADD_BOS, temp, false)) {
-                vocab.special_add_bos = int(temp);
+                vocab.tokenizer_add_bos = temp;
             }
             if (ml.get_key(LLM_KV_TOKENIZER_ADD_EOS, temp, false)) {
-                vocab.special_add_eos = int(temp);
+                vocab.tokenizer_add_eos = temp;
             }
         }
 
@@ -5144,7 +5200,7 @@ static void llm_load_vocab(
         );
 
         // set attributes by model/tokenizer name
-        if (_contains_any(tokenizer_pre, {"jina-v2-es", "jina-v2-de"})) {
+        if (_contains_any(tokenizer_pre, {"jina-v2-de", "jina-v2-es", "jina-v2-code"})) {
             _set_token_attr("<mask>", LLAMA_TOKEN_ATTR_LSTRIP, true);
         } else if (_contains_any(model_name, {"phi-3", "phi3"})) {
             for (auto id : vocab.cache_special_tokens) {
@@ -5238,6 +5294,8 @@ static void llm_load_print_meta(llama_model_loader & ml, llama_model & model) {
     if (vocab.special_middle_id != -1) { LLAMA_LOG_INFO( "%s: MID token        = %d '%s'\n", __func__, vocab.special_middle_id, vocab.id_to_token[vocab.special_middle_id].text.c_str() ); }
     if (vocab.special_eot_id    != -1) { LLAMA_LOG_INFO( "%s: EOT token        = %d '%s'\n", __func__, vocab.special_eot_id,    vocab.id_to_token[vocab.special_eot_id].text.c_str() );    }
 
+    LLAMA_LOG_INFO("%s: max token length = %d\n", __func__, vocab.max_token_len);
+
     if (model.arch == LLM_ARCH_DEEPSEEK2) {
         LLAMA_LOG_INFO("%s: n_layer_dense_lead   = %d\n",     __func__, hparams.n_layer_dense_lead);
         LLAMA_LOG_INFO("%s: n_lora_q             = %d\n",     __func__, hparams.n_lora_q);
@@ -6639,6 +6697,44 @@ static bool llm_load_tensors(
                         }
                     }
                 } break;
+            case LLM_ARCH_BITNET:
+                {
+                    model.tok_embd = ml.create_tensor(ctx_input, tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab});
+
+                    // output
+                    {
+                        model.output_norm = ml.create_tensor(ctx_output,       tn(LLM_TENSOR_OUTPUT_NORM, "weight"), {n_embd});
+                    }
+
+                    for (int i = 0; i < n_layer; ++i) {
+                        ggml_context * ctx_layer = ctx_for_layer(i);
+                        ggml_context * ctx_split = ctx_for_layer_split(i);
+
+                        auto & layer = model.layers[i];
+
+                        layer.attn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_NORM, "weight", i), {n_embd});
+                        layer.attn_sub_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_SUB_NORM, "weight", i), {n_embd});
+
+                        layer.wq = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_Q, "weight", i), {n_embd, n_embd});
+                        layer.wq_scale = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_Q, "scale", i), {1});
+                        layer.wk = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_K, "weight", i), {n_embd, n_embd_gqa});
+                        layer.wk_scale = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_K, "scale", i), {1});
+                        layer.wv = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_V, "weight", i), {n_embd, n_embd_gqa});
+                        layer.wv_scale = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_V, "scale", i), {1});
+                        layer.wo = ml.create_tensor(ctx_split, tn(LLM_TENSOR_ATTN_OUT, "weight", i), {n_embd, n_embd});
+                        layer.wo_scale = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_ATTN_OUT, "scale", i), {1});
+
+                        layer.ffn_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_NORM, "weight", i), {n_embd});
+                        layer.ffn_sub_norm = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_SUB_NORM, "weight", i), {n_ff});
+
+                        layer.ffn_gate = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff});
+                        layer.ffn_gate_scale = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_GATE, "scale", i), {1});
+                        layer.ffn_down = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd});
+                        layer.ffn_down_scale = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_DOWN, "scale", i), {1});
+                        layer.ffn_up   = ml.create_tensor(ctx_split, tn(LLM_TENSOR_FFN_UP,   "weight", i), {n_embd, n_ff});
+                        layer.ffn_up_scale = ml.create_tensor(ctx_layer, tn(LLM_TENSOR_FFN_UP, "scale", i), {1});
+                    }
+                } break;
             default:
                 throw std::runtime_error("unknown architecture");
         }
@@ -7279,7 +7375,10 @@ static struct ggml_tensor * llm_build_kqv(
 
     ggml_build_forward_expand(graph, cur);
 
-    cur = ggml_mul_mat(ctx, wo, cur);
+    if (wo) {
+        cur = ggml_mul_mat(ctx, wo, cur);
+    }
+
     if (wo_b) {
         cb(cur, "kqv_wo", il);
     }
@@ -7638,6 +7737,50 @@ struct llm_build_context {
         return lctx.inp_s_seq;
     }
 
+    struct ggml_cgraph * append_pooling(struct ggml_cgraph * gf) {
+        // find result_norm tensor for input
+        struct ggml_tensor * inp = nullptr;
+        for (int i = gf->n_nodes - 1; i >= 0; --i) {
+            inp = gf->nodes[i];
+            if (strcmp(inp->name, "result_norm") == 0 || strcmp(inp->name, "result_embd") == 0) {
+                break;
+            } else {
+                inp = nullptr;
+            }
+        }
+        GGML_ASSERT(inp != nullptr && "missing result_norm/result_embd tensor");
+
+        struct ggml_tensor * cur;
+
+        switch (pooling_type) {
+            case LLAMA_POOLING_TYPE_MEAN:
+                {
+                    struct ggml_tensor * inp_mean = build_inp_mean();
+                    cur = ggml_mul_mat(ctx0, ggml_cont(ctx0, ggml_transpose(ctx0, inp)), inp_mean);
+                } break;
+            case LLAMA_POOLING_TYPE_CLS:
+            case LLAMA_POOLING_TYPE_LAST:
+                {
+                    struct ggml_tensor * inp_cls = build_inp_cls();
+                    cur = ggml_get_rows(ctx0, inp, inp_cls);
+                } break;
+            case LLAMA_POOLING_TYPE_NONE:
+                {
+                    cur = inp;
+                } break;
+            default:
+                {
+                    GGML_ASSERT(false && "unknown pooling type");
+                } break;
+        }
+
+        cb(cur, "result_embd_pooled", -1);
+
+        ggml_build_forward_expand(gf, cur);
+
+        return gf;
+    }
+
     struct ggml_cgraph * build_llama() {
         struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false);
 
@@ -8618,8 +8761,6 @@ struct llm_build_context {
         if (model.arch != LLM_ARCH_JINA_BERT_V2) {
             inp_pos = build_inp_pos();
         }
-        struct ggml_tensor * inp_mean = build_inp_mean();
-        struct ggml_tensor * inp_cls  = build_inp_cls();
 
         // construct input embeddings (token, type, position)
         inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb);
@@ -8794,28 +8935,6 @@ struct llm_build_context {
         cur = inpL;
         cb(cur, "result_embd", -1);
 
-        // pooling layer
-        switch (pooling_type) {
-            case LLAMA_POOLING_TYPE_NONE:
-                {
-                    // nop
-                } break;
-            case LLAMA_POOLING_TYPE_MEAN:
-                {
-                    cur = ggml_mul_mat(ctx0, ggml_cont(ctx0, ggml_transpose(ctx0, cur)), inp_mean);
-                    cb(cur, "result_embd_pooled", -1);
-                } break;
-            case LLAMA_POOLING_TYPE_CLS:
-                {
-                    cur = ggml_get_rows(ctx0, cur, inp_cls);
-                    cb(cur, "result_embd_pooled", -1);
-                } break;
-            case LLAMA_POOLING_TYPE_UNSPECIFIED:
-                {
-                    GGML_ASSERT(false && "Invalid pooling type");
-                } break;
-        }
-
         ggml_build_forward_expand(gf, cur);
 
         return gf;
@@ -11673,6 +11792,153 @@ struct llm_build_context {
         return gf;
     }
 
+    struct ggml_cgraph * build_bitnet() {
+        struct ggml_cgraph * gf = ggml_new_graph_custom(ctx0, LLAMA_MAX_NODES, false);
+
+        const int64_t n_embd_head = hparams.n_embd_head_v;
+        GGML_ASSERT(n_embd_head == hparams.n_embd_head_k);
+
+        struct ggml_tensor * cur;
+        struct ggml_tensor * inpL;
+
+        inpL = llm_build_inp_embd(ctx0, lctx, hparams, batch, model.tok_embd, cb);
+
+        // inp_pos - contains the positions
+        struct ggml_tensor * inp_pos = build_inp_pos();
+
+        // KQ_mask (mask for 1 head, it will be broadcasted to all heads)
+        struct ggml_tensor * KQ_mask = build_inp_KQ_mask();
+
+        for (int il = 0; il < n_layer; ++il) {
+            struct ggml_tensor * inpSA = inpL;
+
+            cur = llm_build_norm(ctx0, inpL, hparams,
+                    model.layers[il].attn_norm, NULL,
+                    LLM_NORM_RMS, cb, il);
+            cb(cur, "attn_norm", il);
+
+            // self-attention
+            {
+                // compute Q and K and RoPE them
+                struct ggml_tensor * Qcur = ggml_mul_mat(ctx0, model.layers[il].wq, cur);
+                Qcur = ggml_mul(ctx0, Qcur, model.layers[il].wq_scale);
+                cb(Qcur, "Qcur", il);
+                if (model.layers[il].bq) {
+                    Qcur = ggml_add(ctx0, Qcur, model.layers[il].bq);
+                    cb(Qcur, "Qcur", il);
+                }
+
+                // B1.K
+                struct ggml_tensor * Kcur = ggml_mul_mat(ctx0, model.layers[il].wk, cur);
+                Kcur = ggml_mul(ctx0, Kcur, model.layers[il].wk_scale);
+                cb(Kcur, "Kcur", il);
+                if (model.layers[il].bk) {
+                    Kcur = ggml_add(ctx0, Kcur, model.layers[il].bk);
+                    cb(Kcur, "Kcur", il);
+                }
+
+                // B1.V
+                struct ggml_tensor * Vcur = ggml_mul_mat(ctx0, model.layers[il].wv, cur);
+                Vcur = ggml_mul(ctx0, Vcur, model.layers[il].wv_scale);
+                cb(Vcur, "Vcur", il);
+                if (model.layers[il].bv) {
+                    Vcur = ggml_add(ctx0, Vcur, model.layers[il].bv);
+                    cb(Vcur, "Vcur", il);
+                }
+
+                Qcur = ggml_rope_ext(
+                    ctx0, ggml_reshape_3d(ctx0, Qcur, n_embd_head, n_head, n_tokens), inp_pos, nullptr,
+                    n_rot, rope_type, n_ctx_orig, freq_base, freq_scale,
+                    ext_factor, attn_factor, beta_fast, beta_slow
+                );
+                cb(Qcur, "Qcur", il);
+
+                Kcur = ggml_rope_ext(
+                    ctx0, ggml_reshape_3d(ctx0, Kcur, n_embd_head, n_head_kv, n_tokens), inp_pos, nullptr,
+                    n_rot, rope_type, n_ctx_orig, freq_base, freq_scale,
+                    ext_factor, attn_factor, beta_fast, beta_slow
+                );
+                cb(Kcur, "Kcur", il);
+
+                cur = llm_build_kv(ctx0, model, hparams, cparams, kv_self, gf,
+                        nullptr, nullptr,
+                        Kcur, Vcur, Qcur, KQ_mask, n_tokens, kv_head, n_kv, 1.0f/sqrtf(float(n_embd_head)), cb, il);
+
+                cur = llm_build_norm(ctx0, cur, hparams,
+                        model.layers[il].attn_sub_norm, NULL,
+                        LLM_NORM_RMS, cb, il);
+                cb(cur, "attn_sub_norm", il);
+
+                cur = ggml_mul_mat(ctx0, model.layers[il].wo, cur);
+                cur = ggml_mul(ctx0, cur, model.layers[il].wo_scale);
+                if (model.layers[il].bo) {
+                    cur = ggml_add(ctx0, cur, model.layers[il].bo);
+                }
+                cb(cur, "attn_o_out", il);
+            }
+
+            if (il == n_layer - 1) {
+                // skip computing output for unused tokens
+                struct ggml_tensor * inp_out_ids = build_inp_out_ids();
+                cur   = ggml_get_rows(ctx0,   cur, inp_out_ids);
+                inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids);
+            }
+
+            struct ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA);
+            cb(ffn_inp, "ffn_inp", il);
+
+            // feed-forward forward
+            if (model.layers[il].ffn_gate_inp == nullptr) {
+                cur = llm_build_norm(ctx0, ffn_inp, hparams,
+                        model.layers[il].ffn_norm, NULL,
+                        LLM_NORM_RMS, cb, il);
+                cb(cur, "ffn_norm", il);
+
+                struct ggml_tensor *tmp = ggml_mul_mat(ctx0, model.layers[il].ffn_up, cur);
+                tmp = ggml_mul(ctx0, tmp, model.layers[il].ffn_up_scale);
+                cb(tmp, "ffn_up", il);
+
+                cur = ggml_mul_mat(ctx0, model.layers[il].ffn_gate, cur);
+                cur = ggml_mul(ctx0, cur, model.layers[il].ffn_gate_scale);
+                cb(cur, "ffn_gate", il);
+
+                cur = ggml_silu(ctx0, cur);
+                cb(cur, "ffn_silu", il);
+
+                cur = ggml_mul(ctx0, cur, tmp);
+                cb(cur, "ffn_gate_par", il);
+
+                cur = llm_build_norm(ctx0, cur, hparams,
+                                model.layers[il].ffn_sub_norm, NULL,
+                                LLM_NORM_RMS, cb, il);
+                cb(cur, "ffn_sub_norm", il);
+
+                cur = ggml_mul_mat(ctx0, model.layers[il].ffn_down, cur);
+                cur = ggml_mul(ctx0, cur, model.layers[il].ffn_down_scale);
+                cb(cur, "ffn_down", il);
+            }
+            cur = ggml_add(ctx0, cur, ffn_inp);
+            cb(cur, "l_out", il);
+
+            // input for next layer
+            inpL = cur;
+        }
+
+        cur = inpL;
+
+        cur = llm_build_norm(ctx0, cur, hparams,
+                model.output_norm, NULL,
+                LLM_NORM_RMS, cb, -1);
+        cb(cur, "result_norm", -1);
+
+        // lm_head
+        cur = ggml_mul_mat(ctx0, model.tok_embd, cur);
+        cb(cur, "result_output", -1);
+
+        ggml_build_forward_expand(gf, cur);
+        return gf;
+    }
+
 };
 
 static struct ggml_cgraph * llama_build_graph_defrag(llama_context & lctx, const std::vector<uint32_t> & ids) {
@@ -11896,10 +12162,19 @@ static struct ggml_cgraph * llama_build_graph(
             {
                 result = llm.build_deepseek2();
             } break;
+        case LLM_ARCH_BITNET:
+            {
+                result = llm.build_bitnet();
+            } break;
         default:
             GGML_ASSERT(false);
     }
 
+    // add on pooling layer
+    if (lctx.cparams.embeddings) {
+        result = llm.append_pooling(result);
+    }
+
     llm.free();
 
     return result;
@@ -11989,7 +12264,7 @@ static void llama_set_inputs(llama_context & lctx, const llama_batch & batch) {
         // (!a || b) is a logical implication (a -> b)
         // !hparams.causal_attn -> !cparams.causal_attn
         (hparams.causal_attn || !cparams.causal_attn) &&
-        "causal attention with embedding models is not supported"
+        "causal attention is not supported by this model"
     );
 
     if (lctx.inp_KQ_mask) {
@@ -12121,6 +12396,37 @@ static void llama_set_inputs(llama_context & lctx, const llama_batch & batch) {
         }
     }
 
+    if (cparams.pooling_type == LLAMA_POOLING_TYPE_LAST) {
+        const int64_t n_tokens = batch.n_tokens;
+
+        GGML_ASSERT(lctx.inp_cls);
+        GGML_ASSERT(ggml_backend_buffer_is_host(lctx.inp_cls->buffer));
+
+        uint32_t * data = (uint32_t *) lctx.inp_cls->data;
+        memset(lctx.inp_cls->data, 0, n_tokens * ggml_element_size(lctx.inp_cls));
+
+        std::vector<int> last_pos(n_tokens, -1);
+        std::vector<int> last_row(n_tokens, -1);
+
+        for (int i = 0; i < n_tokens; ++i) {
+            const llama_seq_id seq_id = batch.seq_id[i][0];
+            const llama_pos    pos    = batch.pos[i];
+
+            GGML_ASSERT(seq_id < n_tokens && "seq_id cannot be larger than n_tokens with pooling_type == LAST");
+
+            if (pos >= last_pos[seq_id]) {
+                last_pos[seq_id] = pos;
+                last_row[seq_id] = i;
+            }
+        }
+
+        for (int i = 0; i < n_tokens; ++i) {
+            if (last_row[i] >= 0) {
+                data[i] = last_row[i];
+            }
+        }
+    }
+
     if (kv_self.recurrent) {
         const int64_t n_kv = kv_self.n;
 
@@ -12182,8 +12488,8 @@ static size_t llama_output_reserve(llama_context & lctx, size_t n_outputs) {
     const auto n_embd  = hparams.n_embd;
 
     // TODO: use a per-batch flag for logits presence instead
-    const bool has_logits = cparams.causal_attn;
-    const bool has_embd   = cparams.embeddings && (hparams.causal_attn || cparams.pooling_type == LLAMA_POOLING_TYPE_NONE);
+    const bool has_logits = !cparams.embeddings;
+    const bool has_embd   =  cparams.embeddings && (cparams.pooling_type == LLAMA_POOLING_TYPE_NONE);
 
     const size_t logits_size = has_logits ? n_vocab*n_outputs_max : 0;
     const size_t embd_size   = has_embd   ?  n_embd*n_outputs_max : 0;
@@ -12313,11 +12619,13 @@ static int llama_decode_internal(
     std::vector<std::vector<llama_seq_id>> seq_id;
 
     // count outputs
-    if (batch_all.logits) {
+    if (cparams.embeddings && cparams.pooling_type != LLAMA_POOLING_TYPE_NONE) {
+        n_outputs = n_tokens_all;
+    } else if (batch_all.logits) {
         for (uint32_t i = 0; i < n_tokens_all; ++i) {
             n_outputs += batch_all.logits[i] != 0;
         }
-    } else if (lctx.logits_all || (cparams.embeddings && cparams.pooling_type != LLAMA_POOLING_TYPE_NONE)) {
+    } else if (lctx.logits_all) {
         n_outputs = n_tokens_all;
     } else {
         // keep last output only
@@ -12448,30 +12756,13 @@ static int llama_decode_internal(
             // no output
             res  = nullptr;
             embd = nullptr;
-        } else if (!hparams.causal_attn) {
-            res = nullptr; // do not extract logits for embedding models such as BERT
-
-            // token or sequence embeddings
-            embd = gf->nodes[gf->n_nodes - 1];
-
-            GGML_ASSERT(strcmp(embd->name, "result_embd") == 0 || strcmp(embd->name, "result_embd_pooled") == 0);
         } else if (cparams.embeddings) {
-            // the embeddings could be in the second to last tensor, or any of the previous tensors
-            int i_embd = gf->n_nodes - 2;
-            for (int i = 3; strcmp(embd->name, "result_norm") != 0; ++i) {
-                i_embd = gf->n_nodes - i;
-                if (i_embd < 0) { break; }
-                embd = gf->nodes[i_embd];
-            }
-            GGML_ASSERT(i_embd >= 0 && "missing result_norm tensor");
-
-            // TODO: use a per-batch flag to know when to skip logits while keeping embeddings
-            if (!cparams.causal_attn) {
-                res = nullptr; // do not extract logits when not needed
-                // skip computing logits
-                // TODO: is this safe?
-                gf->n_nodes = i_embd + 1;
+            res = nullptr; // do not extract logits for embedding case
+            embd = gf->nodes[gf->n_nodes - 1];
+            if (strcmp(embd->name, "result_embd_pooled") != 0) {
+                embd = gf->nodes[gf->n_nodes - 2];
             }
+            GGML_ASSERT(strcmp(embd->name, "result_embd_pooled") == 0 && "missing embeddings tensor");
         } else {
             embd = nullptr; // do not extract embeddings when not needed
             GGML_ASSERT(strcmp(res->name, "result_output") == 0 && "missing result_output tensor");
@@ -12494,12 +12785,6 @@ static int llama_decode_internal(
             }
         }
 
-#ifdef GGML_PERF
-        // print timing information per ggml operation (for debugging purposes)
-        // requires GGML_PERF to be defined
-        ggml_graph_print(gf);
-#endif
-
         // plot the computation graph in dot format (for debugging purposes)
         //if (n_past%100 == 0) {
         //    ggml_graph_dump_dot(gf, NULL, "llama.dot");
@@ -12540,11 +12825,10 @@ static int llama_decode_internal(
                             ggml_backend_tensor_get_async(backend_embd, embd, embd_out, 0, n_outputs_new*n_embd*sizeof(float));
                         }
                     } break;
-                case LLAMA_POOLING_TYPE_CLS:
                 case LLAMA_POOLING_TYPE_MEAN:
+                case LLAMA_POOLING_TYPE_CLS:
+                case LLAMA_POOLING_TYPE_LAST:
                     {
-                        GGML_ASSERT(strcmp(embd->name, "result_embd_pooled") == 0);
-
                         // extract sequence embeddings
                         auto & embd_seq_out = lctx.embd_seq;
                         embd_seq_out.clear();
@@ -13158,112 +13442,142 @@ struct llm_bigram_bpe {
 };
 
 struct llm_tokenizer_bpe {
-    llm_tokenizer_bpe(const llama_vocab & vocab): vocab(vocab) {}
-
-    void tokenize(const std::string & text, std::vector<llama_vocab::id> & output) {
-        int final_prev_index = -1;
-        bool ignore_merges = false;
-
-        std::vector<std::string> word_collection;
-        switch (vocab.type) {
-            case LLAMA_VOCAB_TYPE_BPE:
-                switch (vocab.type_pre) {
-                    case LLAMA_VOCAB_PRE_TYPE_LLAMA3:
-                        ignore_merges = true;
-                        word_collection = unicode_regex_split(text, {
-                            // original regex from tokenizer.json
-                            //"(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}{1,3}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
-
-                            // adapted: https://github.com/ggerganov/llama.cpp/pull/6920#issuecomment-2080233989
-                            "(?:'[sS]|'[tT]|'[rR][eE]|'[vV][eE]|'[mM]|'[lL][lL]|'[dD])|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}{1,3}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
-                        });
-                        break;
-                    case LLAMA_VOCAB_PRE_TYPE_DBRX:
-                    case LLAMA_VOCAB_PRE_TYPE_SMAUG:
-                        word_collection = unicode_regex_split(text, {
-                            // same as llama3
-                            "(?:'[sS]|'[tT]|'[rR][eE]|'[vV][eE]|'[mM]|'[lL][lL]|'[dD])|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}{1,3}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
-                        });
-                        break;
-                    case LLAMA_VOCAB_PRE_TYPE_DEEPSEEK_LLM:
-                        word_collection = unicode_regex_split(text, {
-                            "[\r\n]",
-                            "\\s?[A-Za-zµÀ-ÖØ-öø-ƺƼ-ƿDŽ-ʓʕ-ʯͰ-ͳͶͷͻ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-ՖႠ-ჅᎠ-Ᏽᏸ-ᏽᲐ-ᲺᲽ-Ჿᴀ-ᴫᵫ-ᵷᵹ-ᶚḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℴℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-ⱻⱾ-ⳤⳫ-ⳮⳲⳳꙀ-ꙭꚀ-ꚛꜢ-ꝯꝱ-ꞇꞋ-ꞎꭰ-ꮿff-stﬓ-ﬗA-Za-z𐐀-𐑏𐒰-𐓓𐓘-𐓻𐲀-𐲲𐳀-𐳲𑢠-𑣟𞤀-𞥃]+",
-                            "\\s?[!-/:-~!-/:-~‘-‟ -。]+",
-                            "\\s+$",
-                            "[一-龥ࠀ-一가-퟿]+",
-                            "\\p{N}+",
-                        });
-                        break;
-                    case LLAMA_VOCAB_PRE_TYPE_DEEPSEEK_CODER:
-                        word_collection = unicode_regex_split(text, {
-                            "[\r\n]",
-                            "\\s?\\p{L}+",
-                            "\\s?\\p{P}+",
-                            "[一-龥ࠀ-一가-퟿]+",
-                            "\\p{N}",
-                        });
-                        break;
-                    case LLAMA_VOCAB_PRE_TYPE_FALCON:
-                        word_collection = unicode_regex_split(text, {
-                            "[\\p{P}\\$\\+<=>\\^~\\|]+",
-                            "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)",
-                            "[0-9][0-9][0-9]",
-                        });
-                        break;
-                    case LLAMA_VOCAB_PRE_TYPE_MPT:
-                        // TODO: MPT pre-tokenization regexes are unknown
-                        //       the following are close, but not exact. run the following:
-                        //       ./bin/test-tokenizer-0 ../models/ggml-vocab-mpt.gguf
-                        GGML_ASSERT("MPT pre-tokenization regexes are unknown - fixes needed");
-                        word_collection = unicode_regex_split(text, {
-                            "\\s?\\p{L}+",
-                            "\\s?\\p{P}+",
-                            "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)",
-                        });
-                        break;
-                    case LLAMA_VOCAB_PRE_TYPE_STARCODER:
-                    case LLAMA_VOCAB_PRE_TYPE_REFACT:
-                    case LLAMA_VOCAB_PRE_TYPE_COMMAND_R:
-                        word_collection = unicode_regex_split(text, {
-                            "\\p{N}",
-                            "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)",
-                        });
-                        break;
-                    case LLAMA_VOCAB_PRE_TYPE_GPT2:
-                    case LLAMA_VOCAB_PRE_TYPE_OLMO:
-                        word_collection = unicode_regex_split(text, {
-                            "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)",
-                        });
-                        break;
-                    case LLAMA_VOCAB_PRE_TYPE_STABLELM2:
-                    case LLAMA_VOCAB_PRE_TYPE_QWEN2:
-                        word_collection = unicode_regex_split(text, {
-                            // original regex from tokenizer.json
-                            // "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+"
-                            "(?:'[sS]|'[tT]|'[rR][eE]|'[vV][eE]|'[mM]|'[lL][lL]|'[dD])|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
-                        });
-                        break;
-                    case LLAMA_VOCAB_PRE_TYPE_PORO:
-                        word_collection = unicode_regex_split(text, {
-                            " ?[^(\\s|.,!?…。,、।۔،)]+",
-                        });
-                        break;
-                    default:
-                        // default regex for BPE tokenization pre-processing
-                        word_collection = unicode_regex_split(text, {
-                            "[\\p{P}\\$\\+<=>\\^~\\|]+",
-                            "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)",
-                            "\\p{N}+",
-                            "[0-9][0-9][0-9]",
-                        });
-                        break;
-                }
+    llm_tokenizer_bpe(const llama_vocab & vocab): vocab(vocab) {
+        GGML_ASSERT(vocab.type == LLAMA_VOCAB_TYPE_BPE);
+        switch (vocab.type_pre) {
+            case LLAMA_VOCAB_PRE_TYPE_LLAMA3:
+                regex_exprs = {
+                    // original regex from tokenizer.json
+                    //"(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}{1,3}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
+
+                    // adapted: https://github.com/ggerganov/llama.cpp/pull/6920#issuecomment-2080233989
+                    "(?:'[sS]|'[tT]|'[rR][eE]|'[vV][eE]|'[mM]|'[lL][lL]|'[dD])|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}{1,3}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
+                };
+                break;
+            case LLAMA_VOCAB_PRE_TYPE_DBRX:
+            case LLAMA_VOCAB_PRE_TYPE_SMAUG:
+                regex_exprs = {
+                    // same as llama3
+                    "(?:'[sS]|'[tT]|'[rR][eE]|'[vV][eE]|'[mM]|'[lL][lL]|'[dD])|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}{1,3}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
+                };
+                break;
+            case LLAMA_VOCAB_PRE_TYPE_DEEPSEEK_LLM:
+                regex_exprs = {
+                    "[\r\n]",
+                    "\\s?[A-Za-zµÀ-ÖØ-öø-ƺƼ-ƿDŽ-ʓʕ-ʯͰ-ͳͶͷͻ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-ՖႠ-ჅᎠ-Ᏽᏸ-ᏽᲐ-ᲺᲽ-Ჿᴀ-ᴫᵫ-ᵷᵹ-ᶚḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℴℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-ⱻⱾ-ⳤⳫ-ⳮⳲⳳꙀ-ꙭꚀ-ꚛꜢ-ꝯꝱ-ꞇꞋ-ꞎꭰ-ꮿff-stﬓ-ﬗA-Za-z𐐀-𐑏𐒰-𐓓𐓘-𐓻𐲀-𐲲𐳀-𐳲𑢠-𑣟𞤀-𞥃]+",
+                    "\\s?[!-/:-~!-/:-~‘-‟ -。]+",
+                    "\\s+$",
+                    "[一-龥ࠀ-一가-퟿]+",
+                    "\\p{N}+",
+                };
+                break;
+            case LLAMA_VOCAB_PRE_TYPE_DEEPSEEK_CODER:
+                regex_exprs = {
+                    "[\r\n]",
+                    "\\s?\\p{L}+",
+                    "\\s?\\p{P}+",
+                    "[一-龥ࠀ-一가-퟿]+",
+                    "\\p{N}",
+                };
+                break;
+            case LLAMA_VOCAB_PRE_TYPE_FALCON:
+                regex_exprs = {
+                    "[\\p{P}\\$\\+<=>\\^~\\|`]+",
+                    "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)",
+                    "[0-9][0-9][0-9]",
+                };
+                break;
+            case LLAMA_VOCAB_PRE_TYPE_MPT:
+                // TODO: MPT pre-tokenization regexes are unknown
+                //       the following are close, but not exact. run the following:
+                //       ./bin/test-tokenizer-0 ../models/ggml-vocab-mpt.gguf
+                GGML_ASSERT("MPT pre-tokenization regexes are unknown - fixes needed");
+                regex_exprs = {
+                    "\\s?\\p{L}+",
+                    "\\s?\\p{P}+",
+                    "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)",
+                };
+                break;
+            case LLAMA_VOCAB_PRE_TYPE_STARCODER:
+            case LLAMA_VOCAB_PRE_TYPE_REFACT:
+            case LLAMA_VOCAB_PRE_TYPE_COMMAND_R:
+                regex_exprs = {
+                    "\\p{N}",
+                    "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)",
+                };
+                break;
+            case LLAMA_VOCAB_PRE_TYPE_GPT2:
+            case LLAMA_VOCAB_PRE_TYPE_OLMO:
+                regex_exprs = {
+                    "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)",
+                };
+                break;
+            case LLAMA_VOCAB_PRE_TYPE_STABLELM2:
+            case LLAMA_VOCAB_PRE_TYPE_QWEN2:
+                regex_exprs = {
+                    // original regex from tokenizer.json
+                    // "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+"
+                    "(?:'[sS]|'[tT]|'[rR][eE]|'[vV][eE]|'[mM]|'[lL][lL]|'[dD])|[^\\r\\n\\p{L}\\p{N}]?\\p{L}+|\\p{N}| ?[^\\s\\p{L}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
+                };
+                break;
+            case LLAMA_VOCAB_PRE_TYPE_PORO:
+                regex_exprs = {
+                    " ?[^(\\s|.,!?…。,、।۔،)]+",
+                };
                 break;
             default:
-                GGML_ASSERT(false);
+                // default regex for BPE tokenization pre-processing
+                regex_exprs = {
+                    "[\\p{P}\\$\\+<=>\\^~\\|]+",
+                    "'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)",
+                    "\\p{N}+",
+                    "[0-9][0-9][0-9]",
+                };
                 break;
         }
+    }
+
+    void append(const llama_vocab::id token_id, std::vector<llama_vocab::id> & output) const {
+        output.push_back(token_id);
+    }
+
+    bool append_bos(std::vector<llama_vocab::id> & output) const {
+        if (vocab.tokenizer_add_bos) {
+            GGML_ASSERT(vocab.special_bos_id != -1);
+            output.push_back(vocab.special_bos_id);
+            return true;
+        }
+        return false;
+    }
+
+    bool append_eos(std::vector<llama_vocab::id> & output) const {
+        if (vocab.tokenizer_add_eos) {
+            GGML_ASSERT(vocab.special_eos_id != -1);
+            output.push_back(vocab.special_eos_id);
+            return true;
+        }
+        return false;
+    }
+
+    void check_double_bos_eos(const std::vector<llama_vocab::id> & output) const {
+        if (vocab.tokenizer_add_bos && output.size() >= 2 && output[1] == vocab.special_bos_id) {
+            LLAMA_LOG_WARN(
+                "%s: Added a BOS token to the prompt as specified by the model but the prompt "
+                "also starts with a BOS token. So now the final prompt starts with 2 BOS tokens. "
+                "Are you sure this is what you want?\n", __FUNCTION__);
+        }
+        if (vocab.tokenizer_add_eos && output.size() >= 2 && *(output.end()-2) == vocab.special_eos_id) {
+            LLAMA_LOG_WARN(
+                "%s: Added a EOS token to the prompt as specified by the model but the prompt "
+                "also ends with a EOS token. So now the final prompt ends with 2 EOS tokens. "
+                "Are you sure this is what you want?\n", __FUNCTION__);
+        }
+    }
+
+    void tokenize(const std::string & text, std::vector<llama_vocab::id> & output) {
+        int final_prev_index = -1;
+
+        const auto word_collection = unicode_regex_split(text, regex_exprs);
 
         symbols_final.clear();
 
@@ -13274,7 +13588,7 @@ struct llm_tokenizer_bpe {
             int index = 0;
             size_t offset = 0;
 
-            if (ignore_merges && vocab.token_to_id.find(word) != vocab.token_to_id.end()) {
+            if (vocab.tokenizer_ignore_merges && vocab.token_to_id.find(word) != vocab.token_to_id.end()) {
                 symbols.emplace_back(llm_symbol{-1, -1, word.c_str(), word.size()});
                 offset = word.size();
             }
@@ -13355,10 +13669,9 @@ struct llm_tokenizer_bpe {
                     for (auto j = str.begin(); j != str.end(); ++j) {
                         std::string byte_str(1, *j);
                         auto token_multibyte = vocab.token_to_id.find(byte_str);
-                        if (token_multibyte == vocab.token_to_id.end()) {
-                            throw std::runtime_error("ERROR: byte not found in vocab");
+                        if (token_multibyte != vocab.token_to_id.end()) {
+                            output.push_back(token_multibyte->second);
                         }
-                        output.push_back((*token_multibyte).second);
                     }
                 } else {
                     output.push_back((*token).second);
@@ -13397,6 +13710,8 @@ private:
 
     const llama_vocab & vocab;
 
+    std::vector<std::string> regex_exprs;
+
     std::vector<llm_symbol> symbols;
     std::vector<llm_symbol> symbols_final;
 
@@ -13406,7 +13721,7 @@ private:
 struct llm_tokenizer_wpm {
     llm_tokenizer_wpm(const llama_vocab & vocab): vocab(vocab) {}
 
-    void tokenize(const std::string & text, std::vector<llama_vocab::id> & output) {
+    void tokenize(const std::string & text, std::vector<llama_vocab::id> & output) const {
         const auto & token_map = vocab.token_to_id;
 
         // normalize and split by whitespace
@@ -13415,7 +13730,7 @@ struct llm_tokenizer_wpm {
         // bos token prepended already
 
         // find the longest tokens that form the words
-        for (const std::string &word : words) {
+        for (const std::string & word : words) {
             // skip empty words
             if (word.size() == 0) {
                 continue;
@@ -13432,7 +13747,7 @@ struct llm_tokenizer_wpm {
             for (int i = 0; i < n; ++i) {
                 // loop through possible match length
                 bool match = false;
-                for (int j = n; j > i; j--) {
+                for (int j = std::min(n, i + vocab.max_token_len + 1); j > i; j--) {
                     auto it = token_map.find(word1.substr(i, j - i));
                     if (it != token_map.end()) {
                         output.push_back(it->second);
@@ -13455,7 +13770,8 @@ struct llm_tokenizer_wpm {
         }
     }
 
-    std::vector<std::string> preprocess(const std::string & text) {
+    // TODO: reduce string copies by using cpts_offs array
+    std::vector<std::string> preprocess(const std::string & text) const {
         const std::vector<uint32_t> cpts_nfd = unicode_cpts_normalize_nfd(unicode_cpts_from_utf8(text));
         std::vector<std::string> words(1, "");
 
@@ -13677,7 +13993,7 @@ static std::vector<llama_vocab::id> llama_tokenize_internal(const llama_vocab &
 
                 bool is_prev_special = false;
 
-                if (add_special && vocab.special_add_bos != 0) {
+                if (add_special && vocab.tokenizer_add_bos) {
                     GGML_ASSERT(vocab.special_bos_id != -1);
                     output.push_back(vocab.special_bos_id);
                     is_prev_special = true;
@@ -13687,7 +14003,7 @@ static std::vector<llama_vocab::id> llama_tokenize_internal(const llama_vocab &
                     if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_RAW_TEXT) {
                         auto raw_text = fragment.raw_text.substr(fragment.offset, fragment.length);
 
-                        if (vocab.add_space_prefix) {
+                        if (vocab.tokenizer_add_space_prefix) {
                             if (!output.size() || is_prev_special) {  // prefix with space if first token
                                 raw_text = " " + raw_text;
                             }
@@ -13705,23 +14021,24 @@ static std::vector<llama_vocab::id> llama_tokenize_internal(const llama_vocab &
                     }
                 }
 
-                if (add_special && vocab.special_add_bos != 0 && output.size() >= 2 && output[1] == vocab.special_bos_id) {
+                if (add_special && vocab.tokenizer_add_bos && output.size() >= 2 && output[1] == vocab.special_bos_id) {
                     LLAMA_LOG_WARN(
                         "%s: Added a BOS token to the prompt as specified by the model but the prompt "
                         "also starts with a BOS token. So now the final prompt starts with 2 BOS tokens. "
                         "Are you sure this is what you want?\n", __FUNCTION__);
                 }
 
-                if (add_special && vocab.special_add_eos == 1) {
+                if (add_special && vocab.tokenizer_add_eos) {
                     GGML_ASSERT(vocab.special_eos_id != -1);
                     output.push_back(vocab.special_eos_id);
                 }
             } break;
         case LLAMA_VOCAB_TYPE_BPE:
             {
-                if (add_special && vocab.special_add_bos != 0) {
-                    GGML_ASSERT(vocab.special_bos_id != -1);
-                    output.push_back(vocab.special_bos_id);
+                llm_tokenizer_bpe tokenizer(vocab);
+
+                if (add_special) {
+                    tokenizer.append_bos(output);
                 }
 
                 for (const auto & fragment : fragment_buffer) {
@@ -13731,23 +14048,15 @@ static std::vector<llama_vocab::id> llama_tokenize_internal(const llama_vocab &
 #ifdef PRETOKENIZERDEBUG
                         LLAMA_LOG_WARN("TT: (%ld %ld %ld) '%s'\n", raw_text.length(), fragment.offset, fragment.length, raw_text.c_str());
 #endif
-                        llm_tokenizer_bpe tokenizer(vocab);
                         tokenizer.tokenize(raw_text, output);
                     } else { // if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_TOKEN)
-                        output.push_back(fragment.token);
+                        tokenizer.append(fragment.token, output);
                     }
                 }
 
-                if (add_special && vocab.special_add_bos != 0 && output.size() >= 2 && output[1] == vocab.special_bos_id) {
-                    LLAMA_LOG_WARN(
-                        "%s: Added a BOS token to the prompt as specified by the model but the prompt "
-                        "also starts with a BOS token. So now the final prompt starts with 2 BOS tokens. "
-                        "Are you sure this is what you want?\n", __FUNCTION__);
-                }
-
-                if (add_special && vocab.special_add_eos == 1) {
-                    GGML_ASSERT(vocab.special_add_eos != -1);
-                    output.push_back(vocab.special_eos_id);
+                if (add_special) {
+                    tokenizer.append_eos(output);
+                    tokenizer.check_double_bos_eos(output);
                 }
             } break;
         case LLAMA_VOCAB_TYPE_WPM:
@@ -13757,6 +14066,8 @@ static std::vector<llama_vocab::id> llama_tokenize_internal(const llama_vocab &
                     output.push_back(vocab.special_cls_id);
                 }
 
+                llm_tokenizer_wpm tokenizer(vocab);
+
                 for (const auto & fragment : fragment_buffer) {
                     if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_RAW_TEXT) {
                         auto raw_text = fragment.raw_text.substr(fragment.offset, fragment.length);
@@ -13764,7 +14075,6 @@ static std::vector<llama_vocab::id> llama_tokenize_internal(const llama_vocab &
 #ifdef PRETOKENIZERDEBUG
                         LLAMA_LOG_WARN("TT: (%ld %ld %ld) '%s'\n", raw_text.length(), fragment.offset, fragment.length, raw_text.c_str());
 #endif
-                        llm_tokenizer_wpm tokenizer(vocab);
                         tokenizer.tokenize(raw_text, output);
                     } else { // if (fragment.type == FRAGMENT_BUFFER_VARIANT_TYPE_TOKEN)
                         output.push_back(fragment.token);
@@ -16678,6 +16988,7 @@ enum llama_rope_type llama_rope_type(const struct llama_model * model) {
         case LLM_ARCH_BERT:
         case LLM_ARCH_NOMIC_BERT:
         case LLM_ARCH_STABLELM:
+        case LLM_ARCH_BITNET:
         case LLM_ARCH_QWEN:
         case LLM_ARCH_QWEN2:
         case LLM_ARCH_QWEN2MOE:
@@ -18077,6 +18388,10 @@ void llama_set_abort_callback(struct llama_context * ctx, bool (*abort_callback)
     ctx->abort_callback_data = abort_callback_data;
 }
 
+void llama_set_embeddings(struct llama_context * ctx, bool embeddings) {
+    ctx->cparams.embeddings = embeddings;
+}
+
 void llama_set_causal_attn(struct llama_context * ctx, bool causal_attn) {
     ctx->cparams.causal_attn = causal_attn;
 }
@@ -18320,11 +18635,11 @@ llama_token llama_token_nl(const struct llama_model * model) {
 }
 
 int32_t llama_add_bos_token(const struct llama_model * model) {
-    return model->vocab.special_add_bos;
+    return model->vocab.tokenizer_add_bos;
 }
 
 int32_t llama_add_eos_token(const struct llama_model * model) {
-    return model->vocab.special_add_eos;
+    return model->vocab.tokenizer_add_eos;
 }
 
 llama_token llama_token_prefix(const struct llama_model * model) {
index da310ffaf9ad9989afde157c4bf55698a0888254..53e06d9db52733d1c779a77b7b2d9e348e58d610 100644 (file)
@@ -174,6 +174,7 @@ extern "C" {
         LLAMA_POOLING_TYPE_NONE = 0,
         LLAMA_POOLING_TYPE_MEAN = 1,
         LLAMA_POOLING_TYPE_CLS  = 2,
+        LLAMA_POOLING_TYPE_LAST = 3,
     };
 
     enum llama_split_mode {
@@ -293,7 +294,6 @@ extern "C" {
 
         enum llama_rope_scaling_type rope_scaling_type; // RoPE scaling type, from `enum llama_rope_scaling_type`
         enum llama_pooling_type      pooling_type;      // whether to pool (sum) embedding results by sequence id
-                                                        // (ignored if no pooling layer)
 
         // ref: https://github.com/ggerganov/llama.cpp/pull/2054
         float    rope_freq_base;   // RoPE base frequency, 0 = from model
@@ -786,6 +786,10 @@ extern "C" {
     // Get the number of threads used for prompt and batch processing (multiple token).
     LLAMA_API uint32_t llama_n_threads_batch(struct llama_context * ctx);
 
+    // Set whether the model is in embeddings mode or not
+    // If true, embeddings will be returned but logits will not
+    LLAMA_API void llama_set_embeddings(struct llama_context * ctx, bool embeddings);
+
     // Set whether to use causal attention or not
     // If set to true, the model will only attend to the past tokens
     LLAMA_API void llama_set_causal_attn(struct llama_context * ctx, bool causal_attn);
index b15be0b2789e05b698d962c3e10e03f9e8e25a92..8064e9378f17b34c02ede95826e883c4500bb0d1 100644 (file)
@@ -16,7 +16,7 @@
 #include <regex>
 #include <sstream>
 
-std::vector<llama_token> llama_tokenize(struct llama_context * ctx, const std::string & text, bool add_bos) {
+static std::vector<llama_token> llama_tokenize(struct llama_context * ctx, const std::string & text, bool add_bos) {
     auto * model = llama_get_model(ctx);
 
     // upper limit for the number of tokens
@@ -33,7 +33,7 @@ std::vector<llama_token> llama_tokenize(struct llama_context * ctx, const std::s
     return result;
 }
 
-std::string llama_token_to_piece(const struct llama_context * ctx, llama_token token) {
+static std::string llama_token_to_piece(const struct llama_context * ctx, llama_token token) {
     std::vector<char> result(8, 0);
     const int n_tokens = llama_token_to_piece(llama_get_model(ctx), token, result.data(), result.size(), false);
     if (n_tokens < 0) {
@@ -83,7 +83,7 @@ struct whisper_params {
 
 void whisper_print_usage(int argc, char ** argv, const whisper_params & params);
 
-bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
+static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
     for (int i = 1; i < argc; i++) {
         std::string arg = argv[i];
 
@@ -168,7 +168,7 @@ void whisper_print_usage(int /*argc*/, char ** argv, const whisper_params & para
     fprintf(stderr, "\n");
 }
 
-std::string transcribe(
+static std::string transcribe(
         whisper_context * ctx,
         const whisper_params & params,
         const std::vector<float> & pcmf32,
@@ -235,7 +235,7 @@ std::string transcribe(
     return result;
 }
 
-std::vector<std::string> get_words(const std::string &txt) {
+static std::vector<std::string> get_words(const std::string &txt) {
     std::vector<std::string> words;
 
     std::istringstream iss(txt);
index d7c1c898d8828fb706c80e2eb4982742ea403d82..4a939898b367f5a24db8286cc8f46272b2d9ceca 100644 (file)
@@ -68,36 +68,36 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x000370, 0x0004},
 {0x000375, 0x0040},
 {0x000376, 0x0004},
-{0x000378, 0x0080},
+{0x000378, 0x0001},
 {0x00037A, 0x0004},
 {0x00037E, 0x0020},
 {0x00037F, 0x0004},
-{0x000380, 0x0080},
+{0x000380, 0x0001},
 {0x000384, 0x0040},
 {0x000386, 0x0004},
 {0x000387, 0x0020},
 {0x000388, 0x0004},
-{0x00038B, 0x0080},
+{0x00038B, 0x0001},
 {0x00038C, 0x0004},
-{0x00038D, 0x0080},
+{0x00038D, 0x0001},
 {0x00038E, 0x0004},
-{0x0003A2, 0x0080},
+{0x0003A2, 0x0001},
 {0x0003A3, 0x0004},
 {0x0003F6, 0x0040},
 {0x0003F7, 0x0004},
 {0x000482, 0x0040},
 {0x000483, 0x0010},
 {0x00048A, 0x0004},
-{0x000530, 0x0080},
+{0x000530, 0x0001},
 {0x000531, 0x0004},
-{0x000557, 0x0080},
+{0x000557, 0x0001},
 {0x000559, 0x0004},
 {0x00055A, 0x0020},
 {0x000560, 0x0004},
 {0x000589, 0x0020},
-{0x00058B, 0x0080},
+{0x00058B, 0x0001},
 {0x00058D, 0x0040},
-{0x000590, 0x0080},
+{0x000590, 0x0001},
 {0x000591, 0x0010},
 {0x0005BE, 0x0020},
 {0x0005BF, 0x0010},
@@ -107,12 +107,13 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x0005C4, 0x0010},
 {0x0005C6, 0x0020},
 {0x0005C7, 0x0010},
-{0x0005C8, 0x0080},
+{0x0005C8, 0x0001},
 {0x0005D0, 0x0004},
-{0x0005EB, 0x0080},
+{0x0005EB, 0x0001},
 {0x0005EF, 0x0004},
 {0x0005F3, 0x0020},
-{0x0005F5, 0x0080},
+{0x0005F5, 0x0001},
+{0x000600, 0x0080},
 {0x000606, 0x0040},
 {0x000609, 0x0020},
 {0x00060B, 0x0040},
@@ -145,16 +146,17 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x0006FD, 0x0040},
 {0x0006FF, 0x0004},
 {0x000700, 0x0020},
-{0x00070E, 0x0080},
+{0x00070E, 0x0001},
+{0x00070F, 0x0080},
 {0x000710, 0x0004},
 {0x000711, 0x0010},
 {0x000712, 0x0004},
 {0x000730, 0x0010},
-{0x00074B, 0x0080},
+{0x00074B, 0x0001},
 {0x00074D, 0x0004},
 {0x0007A6, 0x0010},
 {0x0007B1, 0x0004},
-{0x0007B2, 0x0080},
+{0x0007B2, 0x0001},
 {0x0007C0, 0x0002},
 {0x0007CA, 0x0004},
 {0x0007EB, 0x0010},
@@ -162,7 +164,7 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x0007F6, 0x0040},
 {0x0007F7, 0x0020},
 {0x0007FA, 0x0004},
-{0x0007FB, 0x0080},
+{0x0007FB, 0x0001},
 {0x0007FD, 0x0010},
 {0x0007FE, 0x0040},
 {0x000800, 0x0004},
@@ -173,20 +175,22 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x000825, 0x0010},
 {0x000828, 0x0004},
 {0x000829, 0x0010},
-{0x00082E, 0x0080},
+{0x00082E, 0x0001},
 {0x000830, 0x0020},
-{0x00083F, 0x0080},
+{0x00083F, 0x0001},
 {0x000840, 0x0004},
 {0x000859, 0x0010},
-{0x00085C, 0x0080},
+{0x00085C, 0x0001},
 {0x00085E, 0x0020},
-{0x00085F, 0x0080},
+{0x00085F, 0x0001},
 {0x000860, 0x0004},
-{0x00086B, 0x0080},
+{0x00086B, 0x0001},
 {0x000870, 0x0004},
 {0x000888, 0x0040},
 {0x000889, 0x0004},
-{0x00088F, 0x0080},
+{0x00088F, 0x0001},
+{0x000890, 0x0080},
+{0x000892, 0x0001},
 {0x000898, 0x0010},
 {0x0008A0, 0x0004},
 {0x0008CA, 0x0010},
@@ -205,35 +209,35 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x000970, 0x0020},
 {0x000971, 0x0004},
 {0x000981, 0x0010},
-{0x000984, 0x0080},
+{0x000984, 0x0001},
 {0x000985, 0x0004},
-{0x00098D, 0x0080},
+{0x00098D, 0x0001},
 {0x00098F, 0x0004},
-{0x000991, 0x0080},
+{0x000991, 0x0001},
 {0x000993, 0x0004},
-{0x0009A9, 0x0080},
+{0x0009A9, 0x0001},
 {0x0009AA, 0x0004},
-{0x0009B1, 0x0080},
+{0x0009B1, 0x0001},
 {0x0009B2, 0x0004},
-{0x0009B3, 0x0080},
+{0x0009B3, 0x0001},
 {0x0009B6, 0x0004},
-{0x0009BA, 0x0080},
+{0x0009BA, 0x0001},
 {0x0009BC, 0x0010},
 {0x0009BD, 0x0004},
 {0x0009BE, 0x0010},
-{0x0009C5, 0x0080},
+{0x0009C5, 0x0001},
 {0x0009C7, 0x0010},
-{0x0009C9, 0x0080},
+{0x0009C9, 0x0001},
 {0x0009CB, 0x0010},
 {0x0009CE, 0x0004},
-{0x0009CF, 0x0080},
+{0x0009CF, 0x0001},
 {0x0009D7, 0x0010},
-{0x0009D8, 0x0080},
+{0x0009D8, 0x0001},
 {0x0009DC, 0x0004},
-{0x0009DE, 0x0080},
+{0x0009DE, 0x0001},
 {0x0009DF, 0x0004},
 {0x0009E2, 0x0010},
-{0x0009E4, 0x0080},
+{0x0009E4, 0x0001},
 {0x0009E6, 0x0002},
 {0x0009F0, 0x0004},
 {0x0009F2, 0x0040},
@@ -242,173 +246,173 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x0009FC, 0x0004},
 {0x0009FD, 0x0020},
 {0x0009FE, 0x0010},
-{0x0009FF, 0x0080},
+{0x0009FF, 0x0001},
 {0x000A01, 0x0010},
-{0x000A04, 0x0080},
+{0x000A04, 0x0001},
 {0x000A05, 0x0004},
-{0x000A0B, 0x0080},
+{0x000A0B, 0x0001},
 {0x000A0F, 0x0004},
-{0x000A11, 0x0080},
+{0x000A11, 0x0001},
 {0x000A13, 0x0004},
-{0x000A29, 0x0080},
+{0x000A29, 0x0001},
 {0x000A2A, 0x0004},
-{0x000A31, 0x0080},
+{0x000A31, 0x0001},
 {0x000A32, 0x0004},
-{0x000A34, 0x0080},
+{0x000A34, 0x0001},
 {0x000A35, 0x0004},
-{0x000A37, 0x0080},
+{0x000A37, 0x0001},
 {0x000A38, 0x0004},
-{0x000A3A, 0x0080},
+{0x000A3A, 0x0001},
 {0x000A3C, 0x0010},
-{0x000A3D, 0x0080},
+{0x000A3D, 0x0001},
 {0x000A3E, 0x0010},
-{0x000A43, 0x0080},
+{0x000A43, 0x0001},
 {0x000A47, 0x0010},
-{0x000A49, 0x0080},
+{0x000A49, 0x0001},
 {0x000A4B, 0x0010},
-{0x000A4E, 0x0080},
+{0x000A4E, 0x0001},
 {0x000A51, 0x0010},
-{0x000A52, 0x0080},
+{0x000A52, 0x0001},
 {0x000A59, 0x0004},
-{0x000A5D, 0x0080},
+{0x000A5D, 0x0001},
 {0x000A5E, 0x0004},
-{0x000A5F, 0x0080},
+{0x000A5F, 0x0001},
 {0x000A66, 0x0002},
 {0x000A70, 0x0010},
 {0x000A72, 0x0004},
 {0x000A75, 0x0010},
 {0x000A76, 0x0020},
-{0x000A77, 0x0080},
+{0x000A77, 0x0001},
 {0x000A81, 0x0010},
-{0x000A84, 0x0080},
+{0x000A84, 0x0001},
 {0x000A85, 0x0004},
-{0x000A8E, 0x0080},
+{0x000A8E, 0x0001},
 {0x000A8F, 0x0004},
-{0x000A92, 0x0080},
+{0x000A92, 0x0001},
 {0x000A93, 0x0004},
-{0x000AA9, 0x0080},
+{0x000AA9, 0x0001},
 {0x000AAA, 0x0004},
-{0x000AB1, 0x0080},
+{0x000AB1, 0x0001},
 {0x000AB2, 0x0004},
-{0x000AB4, 0x0080},
+{0x000AB4, 0x0001},
 {0x000AB5, 0x0004},
-{0x000ABA, 0x0080},
+{0x000ABA, 0x0001},
 {0x000ABC, 0x0010},
 {0x000ABD, 0x0004},
 {0x000ABE, 0x0010},
-{0x000AC6, 0x0080},
+{0x000AC6, 0x0001},
 {0x000AC7, 0x0010},
-{0x000ACA, 0x0080},
+{0x000ACA, 0x0001},
 {0x000ACB, 0x0010},
-{0x000ACE, 0x0080},
+{0x000ACE, 0x0001},
 {0x000AD0, 0x0004},
-{0x000AD1, 0x0080},
+{0x000AD1, 0x0001},
 {0x000AE0, 0x0004},
 {0x000AE2, 0x0010},
-{0x000AE4, 0x0080},
+{0x000AE4, 0x0001},
 {0x000AE6, 0x0002},
 {0x000AF0, 0x0020},
 {0x000AF1, 0x0040},
-{0x000AF2, 0x0080},
+{0x000AF2, 0x0001},
 {0x000AF9, 0x0004},
 {0x000AFA, 0x0010},
-{0x000B00, 0x0080},
+{0x000B00, 0x0001},
 {0x000B01, 0x0010},
-{0x000B04, 0x0080},
+{0x000B04, 0x0001},
 {0x000B05, 0x0004},
-{0x000B0D, 0x0080},
+{0x000B0D, 0x0001},
 {0x000B0F, 0x0004},
-{0x000B11, 0x0080},
+{0x000B11, 0x0001},
 {0x000B13, 0x0004},
-{0x000B29, 0x0080},
+{0x000B29, 0x0001},
 {0x000B2A, 0x0004},
-{0x000B31, 0x0080},
+{0x000B31, 0x0001},
 {0x000B32, 0x0004},
-{0x000B34, 0x0080},
+{0x000B34, 0x0001},
 {0x000B35, 0x0004},
-{0x000B3A, 0x0080},
+{0x000B3A, 0x0001},
 {0x000B3C, 0x0010},
 {0x000B3D, 0x0004},
 {0x000B3E, 0x0010},
-{0x000B45, 0x0080},
+{0x000B45, 0x0001},
 {0x000B47, 0x0010},
-{0x000B49, 0x0080},
+{0x000B49, 0x0001},
 {0x000B4B, 0x0010},
-{0x000B4E, 0x0080},
+{0x000B4E, 0x0001},
 {0x000B55, 0x0010},
-{0x000B58, 0x0080},
+{0x000B58, 0x0001},
 {0x000B5C, 0x0004},
-{0x000B5E, 0x0080},
+{0x000B5E, 0x0001},
 {0x000B5F, 0x0004},
 {0x000B62, 0x0010},
-{0x000B64, 0x0080},
+{0x000B64, 0x0001},
 {0x000B66, 0x0002},
 {0x000B70, 0x0040},
 {0x000B71, 0x0004},
 {0x000B72, 0x0002},
-{0x000B78, 0x0080},
+{0x000B78, 0x0001},
 {0x000B82, 0x0010},
 {0x000B83, 0x0004},
-{0x000B84, 0x0080},
+{0x000B84, 0x0001},
 {0x000B85, 0x0004},
-{0x000B8B, 0x0080},
+{0x000B8B, 0x0001},
 {0x000B8E, 0x0004},
-{0x000B91, 0x0080},
+{0x000B91, 0x0001},
 {0x000B92, 0x0004},
-{0x000B96, 0x0080},
+{0x000B96, 0x0001},
 {0x000B99, 0x0004},
-{0x000B9B, 0x0080},
+{0x000B9B, 0x0001},
 {0x000B9C, 0x0004},
-{0x000B9D, 0x0080},
+{0x000B9D, 0x0001},
 {0x000B9E, 0x0004},
-{0x000BA0, 0x0080},
+{0x000BA0, 0x0001},
 {0x000BA3, 0x0004},
-{0x000BA5, 0x0080},
+{0x000BA5, 0x0001},
 {0x000BA8, 0x0004},
-{0x000BAB, 0x0080},
+{0x000BAB, 0x0001},
 {0x000BAE, 0x0004},
-{0x000BBA, 0x0080},
+{0x000BBA, 0x0001},
 {0x000BBE, 0x0010},
-{0x000BC3, 0x0080},
+{0x000BC3, 0x0001},
 {0x000BC6, 0x0010},
-{0x000BC9, 0x0080},
+{0x000BC9, 0x0001},
 {0x000BCA, 0x0010},
-{0x000BCE, 0x0080},
+{0x000BCE, 0x0001},
 {0x000BD0, 0x0004},
-{0x000BD1, 0x0080},
+{0x000BD1, 0x0001},
 {0x000BD7, 0x0010},
-{0x000BD8, 0x0080},
+{0x000BD8, 0x0001},
 {0x000BE6, 0x0002},
 {0x000BF3, 0x0040},
-{0x000BFB, 0x0080},
+{0x000BFB, 0x0001},
 {0x000C00, 0x0010},
 {0x000C05, 0x0004},
-{0x000C0D, 0x0080},
+{0x000C0D, 0x0001},
 {0x000C0E, 0x0004},
-{0x000C11, 0x0080},
+{0x000C11, 0x0001},
 {0x000C12, 0x0004},
-{0x000C29, 0x0080},
+{0x000C29, 0x0001},
 {0x000C2A, 0x0004},
-{0x000C3A, 0x0080},
+{0x000C3A, 0x0001},
 {0x000C3C, 0x0010},
 {0x000C3D, 0x0004},
 {0x000C3E, 0x0010},
-{0x000C45, 0x0080},
+{0x000C45, 0x0001},
 {0x000C46, 0x0010},
-{0x000C49, 0x0080},
+{0x000C49, 0x0001},
 {0x000C4A, 0x0010},
-{0x000C4E, 0x0080},
+{0x000C4E, 0x0001},
 {0x000C55, 0x0010},
-{0x000C57, 0x0080},
+{0x000C57, 0x0001},
 {0x000C58, 0x0004},
-{0x000C5B, 0x0080},
+{0x000C5B, 0x0001},
 {0x000C5D, 0x0004},
-{0x000C5E, 0x0080},
+{0x000C5E, 0x0001},
 {0x000C60, 0x0004},
 {0x000C62, 0x0010},
-{0x000C64, 0x0080},
+{0x000C64, 0x0001},
 {0x000C66, 0x0002},
-{0x000C70, 0x0080},
+{0x000C70, 0x0001},
 {0x000C77, 0x0020},
 {0x000C78, 0x0002},
 {0x000C7F, 0x0040},
@@ -416,124 +420,124 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x000C81, 0x0010},
 {0x000C84, 0x0020},
 {0x000C85, 0x0004},
-{0x000C8D, 0x0080},
+{0x000C8D, 0x0001},
 {0x000C8E, 0x0004},
-{0x000C91, 0x0080},
+{0x000C91, 0x0001},
 {0x000C92, 0x0004},
-{0x000CA9, 0x0080},
+{0x000CA9, 0x0001},
 {0x000CAA, 0x0004},
-{0x000CB4, 0x0080},
+{0x000CB4, 0x0001},
 {0x000CB5, 0x0004},
-{0x000CBA, 0x0080},
+{0x000CBA, 0x0001},
 {0x000CBC, 0x0010},
 {0x000CBD, 0x0004},
 {0x000CBE, 0x0010},
-{0x000CC5, 0x0080},
+{0x000CC5, 0x0001},
 {0x000CC6, 0x0010},
-{0x000CC9, 0x0080},
+{0x000CC9, 0x0001},
 {0x000CCA, 0x0010},
-{0x000CCE, 0x0080},
+{0x000CCE, 0x0001},
 {0x000CD5, 0x0010},
-{0x000CD7, 0x0080},
+{0x000CD7, 0x0001},
 {0x000CDD, 0x0004},
-{0x000CDF, 0x0080},
+{0x000CDF, 0x0001},
 {0x000CE0, 0x0004},
 {0x000CE2, 0x0010},
-{0x000CE4, 0x0080},
+{0x000CE4, 0x0001},
 {0x000CE6, 0x0002},
-{0x000CF0, 0x0080},
+{0x000CF0, 0x0001},
 {0x000CF1, 0x0004},
 {0x000CF3, 0x0010},
-{0x000CF4, 0x0080},
+{0x000CF4, 0x0001},
 {0x000D00, 0x0010},
 {0x000D04, 0x0004},
-{0x000D0D, 0x0080},
+{0x000D0D, 0x0001},
 {0x000D0E, 0x0004},
-{0x000D11, 0x0080},
+{0x000D11, 0x0001},
 {0x000D12, 0x0004},
 {0x000D3B, 0x0010},
 {0x000D3D, 0x0004},
 {0x000D3E, 0x0010},
-{0x000D45, 0x0080},
+{0x000D45, 0x0001},
 {0x000D46, 0x0010},
-{0x000D49, 0x0080},
+{0x000D49, 0x0001},
 {0x000D4A, 0x0010},
 {0x000D4E, 0x0004},
 {0x000D4F, 0x0040},
-{0x000D50, 0x0080},
+{0x000D50, 0x0001},
 {0x000D54, 0x0004},
 {0x000D57, 0x0010},
 {0x000D58, 0x0002},
 {0x000D5F, 0x0004},
 {0x000D62, 0x0010},
-{0x000D64, 0x0080},
+{0x000D64, 0x0001},
 {0x000D66, 0x0002},
 {0x000D79, 0x0040},
 {0x000D7A, 0x0004},
-{0x000D80, 0x0080},
+{0x000D80, 0x0001},
 {0x000D81, 0x0010},
-{0x000D84, 0x0080},
+{0x000D84, 0x0001},
 {0x000D85, 0x0004},
-{0x000D97, 0x0080},
+{0x000D97, 0x0001},
 {0x000D9A, 0x0004},
-{0x000DB2, 0x0080},
+{0x000DB2, 0x0001},
 {0x000DB3, 0x0004},
-{0x000DBC, 0x0080},
+{0x000DBC, 0x0001},
 {0x000DBD, 0x0004},
-{0x000DBE, 0x0080},
+{0x000DBE, 0x0001},
 {0x000DC0, 0x0004},
-{0x000DC7, 0x0080},
+{0x000DC7, 0x0001},
 {0x000DCA, 0x0010},
-{0x000DCB, 0x0080},
+{0x000DCB, 0x0001},
 {0x000DCF, 0x0010},
-{0x000DD5, 0x0080},
+{0x000DD5, 0x0001},
 {0x000DD6, 0x0010},
-{0x000DD7, 0x0080},
+{0x000DD7, 0x0001},
 {0x000DD8, 0x0010},
-{0x000DE0, 0x0080},
+{0x000DE0, 0x0001},
 {0x000DE6, 0x0002},
-{0x000DF0, 0x0080},
+{0x000DF0, 0x0001},
 {0x000DF2, 0x0010},
 {0x000DF4, 0x0020},
-{0x000DF5, 0x0080},
+{0x000DF5, 0x0001},
 {0x000E01, 0x0004},
 {0x000E31, 0x0010},
 {0x000E32, 0x0004},
 {0x000E34, 0x0010},
-{0x000E3B, 0x0080},
+{0x000E3B, 0x0001},
 {0x000E3F, 0x0040},
 {0x000E40, 0x0004},
 {0x000E47, 0x0010},
 {0x000E4F, 0x0020},
 {0x000E50, 0x0002},
 {0x000E5A, 0x0020},
-{0x000E5C, 0x0080},
+{0x000E5C, 0x0001},
 {0x000E81, 0x0004},
-{0x000E83, 0x0080},
+{0x000E83, 0x0001},
 {0x000E84, 0x0004},
-{0x000E85, 0x0080},
+{0x000E85, 0x0001},
 {0x000E86, 0x0004},
-{0x000E8B, 0x0080},
+{0x000E8B, 0x0001},
 {0x000E8C, 0x0004},
-{0x000EA4, 0x0080},
+{0x000EA4, 0x0001},
 {0x000EA5, 0x0004},
-{0x000EA6, 0x0080},
+{0x000EA6, 0x0001},
 {0x000EA7, 0x0004},
 {0x000EB1, 0x0010},
 {0x000EB2, 0x0004},
 {0x000EB4, 0x0010},
 {0x000EBD, 0x0004},
-{0x000EBE, 0x0080},
+{0x000EBE, 0x0001},
 {0x000EC0, 0x0004},
-{0x000EC5, 0x0080},
+{0x000EC5, 0x0001},
 {0x000EC6, 0x0004},
-{0x000EC7, 0x0080},
+{0x000EC7, 0x0001},
 {0x000EC8, 0x0010},
-{0x000ECF, 0x0080},
+{0x000ECF, 0x0001},
 {0x000ED0, 0x0002},
-{0x000EDA, 0x0080},
+{0x000EDA, 0x0001},
 {0x000EDC, 0x0004},
-{0x000EE0, 0x0080},
+{0x000EE0, 0x0001},
 {0x000F00, 0x0004},
 {0x000F01, 0x0040},
 {0x000F04, 0x0020},
@@ -552,26 +556,26 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x000F3A, 0x0020},
 {0x000F3E, 0x0010},
 {0x000F40, 0x0004},
-{0x000F48, 0x0080},
+{0x000F48, 0x0001},
 {0x000F49, 0x0004},
-{0x000F6D, 0x0080},
+{0x000F6D, 0x0001},
 {0x000F71, 0x0010},
 {0x000F85, 0x0020},
 {0x000F86, 0x0010},
 {0x000F88, 0x0004},
 {0x000F8D, 0x0010},
-{0x000F98, 0x0080},
+{0x000F98, 0x0001},
 {0x000F99, 0x0010},
-{0x000FBD, 0x0080},
+{0x000FBD, 0x0001},
 {0x000FBE, 0x0040},
 {0x000FC6, 0x0010},
 {0x000FC7, 0x0040},
-{0x000FCD, 0x0080},
+{0x000FCD, 0x0001},
 {0x000FCE, 0x0040},
 {0x000FD0, 0x0020},
 {0x000FD5, 0x0040},
 {0x000FD9, 0x0020},
-{0x000FDB, 0x0080},
+{0x000FDB, 0x0001},
 {0x001000, 0x0004},
 {0x00102B, 0x0010},
 {0x00103F, 0x0004},
@@ -595,56 +599,56 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x00109A, 0x0010},
 {0x00109E, 0x0040},
 {0x0010A0, 0x0004},
-{0x0010C6, 0x0080},
+{0x0010C6, 0x0001},
 {0x0010C7, 0x0004},
-{0x0010C8, 0x0080},
+{0x0010C8, 0x0001},
 {0x0010CD, 0x0004},
-{0x0010CE, 0x0080},
+{0x0010CE, 0x0001},
 {0x0010D0, 0x0004},
 {0x0010FB, 0x0020},
 {0x0010FC, 0x0004},
-{0x001249, 0x0080},
+{0x001249, 0x0001},
 {0x00124A, 0x0004},
-{0x00124E, 0x0080},
+{0x00124E, 0x0001},
 {0x001250, 0x0004},
-{0x001257, 0x0080},
+{0x001257, 0x0001},
 {0x001258, 0x0004},
-{0x001259, 0x0080},
+{0x001259, 0x0001},
 {0x00125A, 0x0004},
-{0x00125E, 0x0080},
+{0x00125E, 0x0001},
 {0x001260, 0x0004},
-{0x001289, 0x0080},
+{0x001289, 0x0001},
 {0x00128A, 0x0004},
-{0x00128E, 0x0080},
+{0x00128E, 0x0001},
 {0x001290, 0x0004},
-{0x0012B1, 0x0080},
+{0x0012B1, 0x0001},
 {0x0012B2, 0x0004},
-{0x0012B6, 0x0080},
+{0x0012B6, 0x0001},
 {0x0012B8, 0x0004},
-{0x0012BF, 0x0080},
+{0x0012BF, 0x0001},
 {0x0012C0, 0x0004},
-{0x0012C1, 0x0080},
+{0x0012C1, 0x0001},
 {0x0012C2, 0x0004},
-{0x0012C6, 0x0080},
+{0x0012C6, 0x0001},
 {0x0012C8, 0x0004},
-{0x0012D7, 0x0080},
+{0x0012D7, 0x0001},
 {0x0012D8, 0x0004},
-{0x001311, 0x0080},
+{0x001311, 0x0001},
 {0x001312, 0x0004},
-{0x001316, 0x0080},
+{0x001316, 0x0001},
 {0x001318, 0x0004},
-{0x00135B, 0x0080},
+{0x00135B, 0x0001},
 {0x00135D, 0x0010},
 {0x001360, 0x0020},
 {0x001369, 0x0002},
-{0x00137D, 0x0080},
+{0x00137D, 0x0001},
 {0x001380, 0x0004},
 {0x001390, 0x0040},
-{0x00139A, 0x0080},
+{0x00139A, 0x0001},
 {0x0013A0, 0x0004},
-{0x0013F6, 0x0080},
+{0x0013F6, 0x0001},
 {0x0013F8, 0x0004},
-{0x0013FE, 0x0080},
+{0x0013FE, 0x0001},
 {0x001400, 0x0020},
 {0x001401, 0x0004},
 {0x00166D, 0x0040},
@@ -653,28 +657,28 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x001680, 0x0008},
 {0x001681, 0x0004},
 {0x00169B, 0x0020},
-{0x00169D, 0x0080},
+{0x00169D, 0x0001},
 {0x0016A0, 0x0004},
 {0x0016EB, 0x0020},
 {0x0016EE, 0x0002},
 {0x0016F1, 0x0004},
-{0x0016F9, 0x0080},
+{0x0016F9, 0x0001},
 {0x001700, 0x0004},
 {0x001712, 0x0010},
-{0x001716, 0x0080},
+{0x001716, 0x0001},
 {0x00171F, 0x0004},
 {0x001732, 0x0010},
 {0x001735, 0x0020},
-{0x001737, 0x0080},
+{0x001737, 0x0001},
 {0x001740, 0x0004},
 {0x001752, 0x0010},
-{0x001754, 0x0080},
+{0x001754, 0x0001},
 {0x001760, 0x0004},
-{0x00176D, 0x0080},
+{0x00176D, 0x0001},
 {0x00176E, 0x0004},
-{0x001771, 0x0080},
+{0x001771, 0x0001},
 {0x001772, 0x0010},
-{0x001774, 0x0080},
+{0x001774, 0x0001},
 {0x001780, 0x0004},
 {0x0017B4, 0x0010},
 {0x0017D4, 0x0020},
@@ -683,80 +687,80 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x0017DB, 0x0040},
 {0x0017DC, 0x0004},
 {0x0017DD, 0x0010},
-{0x0017DE, 0x0080},
+{0x0017DE, 0x0001},
 {0x0017E0, 0x0002},
-{0x0017EA, 0x0080},
+{0x0017EA, 0x0001},
 {0x0017F0, 0x0002},
-{0x0017FA, 0x0080},
+{0x0017FA, 0x0001},
 {0x001800, 0x0020},
 {0x00180B, 0x0010},
 {0x00180E, 0x0080},
 {0x00180F, 0x0010},
 {0x001810, 0x0002},
-{0x00181A, 0x0080},
+{0x00181A, 0x0001},
 {0x001820, 0x0004},
-{0x001879, 0x0080},
+{0x001879, 0x0001},
 {0x001880, 0x0004},
 {0x001885, 0x0010},
 {0x001887, 0x0004},
 {0x0018A9, 0x0010},
 {0x0018AA, 0x0004},
-{0x0018AB, 0x0080},
+{0x0018AB, 0x0001},
 {0x0018B0, 0x0004},
-{0x0018F6, 0x0080},
+{0x0018F6, 0x0001},
 {0x001900, 0x0004},
-{0x00191F, 0x0080},
+{0x00191F, 0x0001},
 {0x001920, 0x0010},
-{0x00192C, 0x0080},
+{0x00192C, 0x0001},
 {0x001930, 0x0010},
-{0x00193C, 0x0080},
+{0x00193C, 0x0001},
 {0x001940, 0x0040},
-{0x001941, 0x0080},
+{0x001941, 0x0001},
 {0x001944, 0x0020},
 {0x001946, 0x0002},
 {0x001950, 0x0004},
-{0x00196E, 0x0080},
+{0x00196E, 0x0001},
 {0x001970, 0x0004},
-{0x001975, 0x0080},
+{0x001975, 0x0001},
 {0x001980, 0x0004},
-{0x0019AC, 0x0080},
+{0x0019AC, 0x0001},
 {0x0019B0, 0x0004},
-{0x0019CA, 0x0080},
+{0x0019CA, 0x0001},
 {0x0019D0, 0x0002},
-{0x0019DB, 0x0080},
+{0x0019DB, 0x0001},
 {0x0019DE, 0x0040},
 {0x001A00, 0x0004},
 {0x001A17, 0x0010},
-{0x001A1C, 0x0080},
+{0x001A1C, 0x0001},
 {0x001A1E, 0x0020},
 {0x001A20, 0x0004},
 {0x001A55, 0x0010},
-{0x001A5F, 0x0080},
+{0x001A5F, 0x0001},
 {0x001A60, 0x0010},
-{0x001A7D, 0x0080},
+{0x001A7D, 0x0001},
 {0x001A7F, 0x0010},
 {0x001A80, 0x0002},
-{0x001A8A, 0x0080},
+{0x001A8A, 0x0001},
 {0x001A90, 0x0002},
-{0x001A9A, 0x0080},
+{0x001A9A, 0x0001},
 {0x001AA0, 0x0020},
 {0x001AA7, 0x0004},
 {0x001AA8, 0x0020},
-{0x001AAE, 0x0080},
+{0x001AAE, 0x0001},
 {0x001AB0, 0x0010},
-{0x001ACF, 0x0080},
+{0x001ACF, 0x0001},
 {0x001B00, 0x0010},
 {0x001B05, 0x0004},
 {0x001B34, 0x0010},
 {0x001B45, 0x0004},
-{0x001B4D, 0x0080},
+{0x001B4D, 0x0001},
 {0x001B50, 0x0002},
 {0x001B5A, 0x0020},
 {0x001B61, 0x0040},
 {0x001B6B, 0x0010},
 {0x001B74, 0x0040},
 {0x001B7D, 0x0020},
-{0x001B7F, 0x0080},
+{0x001B7F, 0x0001},
 {0x001B80, 0x0010},
 {0x001B83, 0x0004},
 {0x001BA1, 0x0010},
@@ -764,25 +768,25 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x001BB0, 0x0002},
 {0x001BBA, 0x0004},
 {0x001BE6, 0x0010},
-{0x001BF4, 0x0080},
+{0x001BF4, 0x0001},
 {0x001BFC, 0x0020},
 {0x001C00, 0x0004},
 {0x001C24, 0x0010},
-{0x001C38, 0x0080},
+{0x001C38, 0x0001},
 {0x001C3B, 0x0020},
 {0x001C40, 0x0002},
-{0x001C4A, 0x0080},
+{0x001C4A, 0x0001},
 {0x001C4D, 0x0004},
 {0x001C50, 0x0002},
 {0x001C5A, 0x0004},
 {0x001C7E, 0x0020},
 {0x001C80, 0x0004},
-{0x001C89, 0x0080},
+{0x001C89, 0x0001},
 {0x001C90, 0x0004},
-{0x001CBB, 0x0080},
+{0x001CBB, 0x0001},
 {0x001CBD, 0x0004},
 {0x001CC0, 0x0020},
-{0x001CC8, 0x0080},
+{0x001CC8, 0x0001},
 {0x001CD0, 0x0010},
 {0x001CD3, 0x0020},
 {0x001CD4, 0x0010},
@@ -793,50 +797,50 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x001CF5, 0x0004},
 {0x001CF7, 0x0010},
 {0x001CFA, 0x0004},
-{0x001CFB, 0x0080},
+{0x001CFB, 0x0001},
 {0x001D00, 0x0004},
 {0x001DC0, 0x0010},
 {0x001E00, 0x0004},
-{0x001F16, 0x0080},
+{0x001F16, 0x0001},
 {0x001F18, 0x0004},
-{0x001F1E, 0x0080},
+{0x001F1E, 0x0001},
 {0x001F20, 0x0004},
-{0x001F46, 0x0080},
+{0x001F46, 0x0001},
 {0x001F48, 0x0004},
-{0x001F4E, 0x0080},
+{0x001F4E, 0x0001},
 {0x001F50, 0x0004},
-{0x001F58, 0x0080},
+{0x001F58, 0x0001},
 {0x001F59, 0x0004},
-{0x001F5A, 0x0080},
+{0x001F5A, 0x0001},
 {0x001F5B, 0x0004},
-{0x001F5C, 0x0080},
+{0x001F5C, 0x0001},
 {0x001F5D, 0x0004},
-{0x001F5E, 0x0080},
+{0x001F5E, 0x0001},
 {0x001F5F, 0x0004},
-{0x001F7E, 0x0080},
+{0x001F7E, 0x0001},
 {0x001F80, 0x0004},
-{0x001FB5, 0x0080},
+{0x001FB5, 0x0001},
 {0x001FB6, 0x0004},
 {0x001FBD, 0x0040},
 {0x001FBE, 0x0004},
 {0x001FBF, 0x0040},
 {0x001FC2, 0x0004},
-{0x001FC5, 0x0080},
+{0x001FC5, 0x0001},
 {0x001FC6, 0x0004},
 {0x001FCD, 0x0040},
 {0x001FD0, 0x0004},
-{0x001FD4, 0x0080},
+{0x001FD4, 0x0001},
 {0x001FD6, 0x0004},
-{0x001FDC, 0x0080},
+{0x001FDC, 0x0001},
 {0x001FDD, 0x0040},
 {0x001FE0, 0x0004},
 {0x001FED, 0x0040},
-{0x001FF0, 0x0080},
+{0x001FF0, 0x0001},
 {0x001FF2, 0x0004},
-{0x001FF5, 0x0080},
+{0x001FF5, 0x0001},
 {0x001FF6, 0x0004},
 {0x001FFD, 0x0040},
-{0x001FFF, 0x0080},
+{0x001FFF, 0x0001},
 {0x002000, 0x0008},
 {0x00200B, 0x0080},
 {0x002010, 0x0020},
@@ -850,9 +854,11 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x002053, 0x0020},
 {0x00205F, 0x0008},
 {0x002060, 0x0080},
+{0x002065, 0x0001},
+{0x002066, 0x0080},
 {0x002070, 0x0002},
 {0x002071, 0x0004},
-{0x002072, 0x0080},
+{0x002072, 0x0001},
 {0x002074, 0x0002},
 {0x00207A, 0x0040},
 {0x00207D, 0x0020},
@@ -860,13 +866,13 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x002080, 0x0002},
 {0x00208A, 0x0040},
 {0x00208D, 0x0020},
-{0x00208F, 0x0080},
+{0x00208F, 0x0001},
 {0x002090, 0x0004},
-{0x00209D, 0x0080},
+{0x00209D, 0x0001},
 {0x0020A0, 0x0040},
-{0x0020C1, 0x0080},
+{0x0020C1, 0x0001},
 {0x0020D0, 0x0010},
-{0x0020F1, 0x0080},
+{0x0020F1, 0x0001},
 {0x002100, 0x0040},
 {0x002102, 0x0004},
 {0x002103, 0x0040},
@@ -898,15 +904,15 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x002183, 0x0004},
 {0x002185, 0x0002},
 {0x00218A, 0x0040},
-{0x00218C, 0x0080},
+{0x00218C, 0x0001},
 {0x002190, 0x0040},
 {0x002308, 0x0020},
 {0x00230C, 0x0040},
 {0x002329, 0x0020},
 {0x00232B, 0x0040},
-{0x002427, 0x0080},
+{0x002427, 0x0001},
 {0x002440, 0x0040},
-{0x00244B, 0x0080},
+{0x00244B, 0x0001},
 {0x002460, 0x0002},
 {0x00249C, 0x0040},
 {0x0024EA, 0x0002},
@@ -924,62 +930,62 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x0029DC, 0x0040},
 {0x0029FC, 0x0020},
 {0x0029FE, 0x0040},
-{0x002B74, 0x0080},
+{0x002B74, 0x0001},
 {0x002B76, 0x0040},
-{0x002B96, 0x0080},
+{0x002B96, 0x0001},
 {0x002B97, 0x0040},
 {0x002C00, 0x0004},
 {0x002CE5, 0x0040},
 {0x002CEB, 0x0004},
 {0x002CEF, 0x0010},
 {0x002CF2, 0x0004},
-{0x002CF4, 0x0080},
+{0x002CF4, 0x0001},
 {0x002CF9, 0x0020},
 {0x002CFD, 0x0002},
 {0x002CFE, 0x0020},
 {0x002D00, 0x0004},
-{0x002D26, 0x0080},
+{0x002D26, 0x0001},
 {0x002D27, 0x0004},
-{0x002D28, 0x0080},
+{0x002D28, 0x0001},
 {0x002D2D, 0x0004},
-{0x002D2E, 0x0080},
+{0x002D2E, 0x0001},
 {0x002D30, 0x0004},
-{0x002D68, 0x0080},
+{0x002D68, 0x0001},
 {0x002D6F, 0x0004},
 {0x002D70, 0x0020},
-{0x002D71, 0x0080},
+{0x002D71, 0x0001},
 {0x002D7F, 0x0010},
 {0x002D80, 0x0004},
-{0x002D97, 0x0080},
+{0x002D97, 0x0001},
 {0x002DA0, 0x0004},
-{0x002DA7, 0x0080},
+{0x002DA7, 0x0001},
 {0x002DA8, 0x0004},
-{0x002DAF, 0x0080},
+{0x002DAF, 0x0001},
 {0x002DB0, 0x0004},
-{0x002DB7, 0x0080},
+{0x002DB7, 0x0001},
 {0x002DB8, 0x0004},
-{0x002DBF, 0x0080},
+{0x002DBF, 0x0001},
 {0x002DC0, 0x0004},
-{0x002DC7, 0x0080},
+{0x002DC7, 0x0001},
 {0x002DC8, 0x0004},
-{0x002DCF, 0x0080},
+{0x002DCF, 0x0001},
 {0x002DD0, 0x0004},
-{0x002DD7, 0x0080},
+{0x002DD7, 0x0001},
 {0x002DD8, 0x0004},
-{0x002DDF, 0x0080},
+{0x002DDF, 0x0001},
 {0x002DE0, 0x0010},
 {0x002E00, 0x0020},
 {0x002E2F, 0x0004},
 {0x002E30, 0x0020},
 {0x002E50, 0x0040},
 {0x002E52, 0x0020},
-{0x002E5E, 0x0080},
+{0x002E5E, 0x0001},
 {0x002E80, 0x0040},
-{0x002E9A, 0x0080},
+{0x002E9A, 0x0001},
 {0x002E9B, 0x0040},
-{0x002EF4, 0x0080},
+{0x002EF4, 0x0001},
 {0x002F00, 0x0040},
-{0x002FD6, 0x0080},
+{0x002FD6, 0x0001},
 {0x002FF0, 0x0040},
 {0x003000, 0x0008},
 {0x003001, 0x0020},
@@ -999,9 +1005,9 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x00303B, 0x0004},
 {0x00303D, 0x0020},
 {0x00303E, 0x0040},
-{0x003040, 0x0080},
+{0x003040, 0x0001},
 {0x003041, 0x0004},
-{0x003097, 0x0080},
+{0x003097, 0x0001},
 {0x003099, 0x0010},
 {0x00309B, 0x0040},
 {0x00309D, 0x0004},
@@ -1009,21 +1015,21 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x0030A1, 0x0004},
 {0x0030FB, 0x0020},
 {0x0030FC, 0x0004},
-{0x003100, 0x0080},
+{0x003100, 0x0001},
 {0x003105, 0x0004},
-{0x003130, 0x0080},
+{0x003130, 0x0001},
 {0x003131, 0x0004},
-{0x00318F, 0x0080},
+{0x00318F, 0x0001},
 {0x003190, 0x0040},
 {0x003192, 0x0002},
 {0x003196, 0x0040},
 {0x0031A0, 0x0004},
 {0x0031C0, 0x0040},
-{0x0031E4, 0x0080},
+{0x0031E4, 0x0001},
 {0x0031EF, 0x0040},
 {0x0031F0, 0x0004},
 {0x003200, 0x0040},
-{0x00321F, 0x0080},
+{0x00321F, 0x0001},
 {0x003220, 0x0002},
 {0x00322A, 0x0040},
 {0x003248, 0x0002},
@@ -1037,9 +1043,9 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x003400, 0x0004},
 {0x004DC0, 0x0040},
 {0x004E00, 0x0004},
-{0x00A48D, 0x0080},
+{0x00A48D, 0x0001},
 {0x00A490, 0x0040},
-{0x00A4C7, 0x0080},
+{0x00A4C7, 0x0001},
 {0x00A4D0, 0x0004},
 {0x00A4FE, 0x0020},
 {0x00A500, 0x0004},
@@ -1047,7 +1053,7 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x00A610, 0x0004},
 {0x00A620, 0x0002},
 {0x00A62A, 0x0004},
-{0x00A62C, 0x0080},
+{0x00A62C, 0x0001},
 {0x00A640, 0x0004},
 {0x00A66F, 0x0010},
 {0x00A673, 0x0020},
@@ -1059,20 +1065,20 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x00A6E6, 0x0002},
 {0x00A6F0, 0x0010},
 {0x00A6F2, 0x0020},
-{0x00A6F8, 0x0080},
+{0x00A6F8, 0x0001},
 {0x00A700, 0x0040},
 {0x00A717, 0x0004},
 {0x00A720, 0x0040},
 {0x00A722, 0x0004},
 {0x00A789, 0x0040},
 {0x00A78B, 0x0004},
-{0x00A7CB, 0x0080},
+{0x00A7CB, 0x0001},
 {0x00A7D0, 0x0004},
-{0x00A7D2, 0x0080},
+{0x00A7D2, 0x0001},
 {0x00A7D3, 0x0004},
-{0x00A7D4, 0x0080},
+{0x00A7D4, 0x0001},
 {0x00A7D5, 0x0004},
-{0x00A7DA, 0x0080},
+{0x00A7DA, 0x0001},
 {0x00A7F2, 0x0004},
 {0x00A802, 0x0010},
 {0x00A803, 0x0004},
@@ -1083,20 +1089,20 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x00A823, 0x0010},
 {0x00A828, 0x0040},
 {0x00A82C, 0x0010},
-{0x00A82D, 0x0080},
+{0x00A82D, 0x0001},
 {0x00A830, 0x0002},
 {0x00A836, 0x0040},
-{0x00A83A, 0x0080},
+{0x00A83A, 0x0001},
 {0x00A840, 0x0004},
 {0x00A874, 0x0020},
-{0x00A878, 0x0080},
+{0x00A878, 0x0001},
 {0x00A880, 0x0010},
 {0x00A882, 0x0004},
 {0x00A8B4, 0x0010},
-{0x00A8C6, 0x0080},
+{0x00A8C6, 0x0001},
 {0x00A8CE, 0x0020},
 {0x00A8D0, 0x0002},
-{0x00A8DA, 0x0080},
+{0x00A8DA, 0x0001},
 {0x00A8E0, 0x0010},
 {0x00A8F2, 0x0004},
 {0x00A8F8, 0x0020},
@@ -1110,35 +1116,35 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x00A92E, 0x0020},
 {0x00A930, 0x0004},
 {0x00A947, 0x0010},
-{0x00A954, 0x0080},
+{0x00A954, 0x0001},
 {0x00A95F, 0x0020},
 {0x00A960, 0x0004},
-{0x00A97D, 0x0080},
+{0x00A97D, 0x0001},
 {0x00A980, 0x0010},
 {0x00A984, 0x0004},
 {0x00A9B3, 0x0010},
 {0x00A9C1, 0x0020},
-{0x00A9CE, 0x0080},
+{0x00A9CE, 0x0001},
 {0x00A9CF, 0x0004},
 {0x00A9D0, 0x0002},
-{0x00A9DA, 0x0080},
+{0x00A9DA, 0x0001},
 {0x00A9DE, 0x0020},
 {0x00A9E0, 0x0004},
 {0x00A9E5, 0x0010},
 {0x00A9E6, 0x0004},
 {0x00A9F0, 0x0002},
 {0x00A9FA, 0x0004},
-{0x00A9FF, 0x0080},
+{0x00A9FF, 0x0001},
 {0x00AA00, 0x0004},
 {0x00AA29, 0x0010},
-{0x00AA37, 0x0080},
+{0x00AA37, 0x0001},
 {0x00AA40, 0x0004},
 {0x00AA43, 0x0010},
 {0x00AA44, 0x0004},
 {0x00AA4C, 0x0010},
-{0x00AA4E, 0x0080},
+{0x00AA4E, 0x0001},
 {0x00AA50, 0x0002},
-{0x00AA5A, 0x0080},
+{0x00AA5A, 0x0001},
 {0x00AA5C, 0x0020},
 {0x00AA60, 0x0004},
 {0x00AA77, 0x0040},
@@ -1155,7 +1161,7 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x00AAC0, 0x0004},
 {0x00AAC1, 0x0010},
 {0x00AAC2, 0x0004},
-{0x00AAC3, 0x0080},
+{0x00AAC3, 0x0001},
 {0x00AADB, 0x0004},
 {0x00AADE, 0x0020},
 {0x00AAE0, 0x0004},
@@ -1163,90 +1169,93 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x00AAF0, 0x0020},
 {0x00AAF2, 0x0004},
 {0x00AAF5, 0x0010},
-{0x00AAF7, 0x0080},
+{0x00AAF7, 0x0001},
 {0x00AB01, 0x0004},
-{0x00AB07, 0x0080},
+{0x00AB07, 0x0001},
 {0x00AB09, 0x0004},
-{0x00AB0F, 0x0080},
+{0x00AB0F, 0x0001},
 {0x00AB11, 0x0004},
-{0x00AB17, 0x0080},
+{0x00AB17, 0x0001},
 {0x00AB20, 0x0004},
-{0x00AB27, 0x0080},
+{0x00AB27, 0x0001},
 {0x00AB28, 0x0004},
-{0x00AB2F, 0x0080},
+{0x00AB2F, 0x0001},
 {0x00AB30, 0x0004},
 {0x00AB5B, 0x0040},
 {0x00AB5C, 0x0004},
 {0x00AB6A, 0x0040},
-{0x00AB6C, 0x0080},
+{0x00AB6C, 0x0001},
 {0x00AB70, 0x0004},
 {0x00ABE3, 0x0010},
 {0x00ABEB, 0x0020},
 {0x00ABEC, 0x0010},
-{0x00ABEE, 0x0080},
+{0x00ABEE, 0x0001},
 {0x00ABF0, 0x0002},
-{0x00ABFA, 0x0080},
+{0x00ABFA, 0x0001},
 {0x00AC00, 0x0004},
-{0x00D7A4, 0x0080},
+{0x00D7A4, 0x0001},
 {0x00D7B0, 0x0004},
-{0x00D7C7, 0x0080},
+{0x00D7C7, 0x0001},
 {0x00D7CB, 0x0004},
-{0x00D7FC, 0x0080},
+{0x00D7FC, 0x0001},
+{0x00D800, 0x0080},
 {0x00F900, 0x0004},
-{0x00FA6E, 0x0080},
+{0x00FA6E, 0x0001},
 {0x00FA70, 0x0004},
-{0x00FADA, 0x0080},
+{0x00FADA, 0x0001},
 {0x00FB00, 0x0004},
-{0x00FB07, 0x0080},
+{0x00FB07, 0x0001},
 {0x00FB13, 0x0004},
-{0x00FB18, 0x0080},
+{0x00FB18, 0x0001},
 {0x00FB1D, 0x0004},
 {0x00FB1E, 0x0010},
 {0x00FB1F, 0x0004},
 {0x00FB29, 0x0040},
 {0x00FB2A, 0x0004},
-{0x00FB37, 0x0080},
+{0x00FB37, 0x0001},
 {0x00FB38, 0x0004},
-{0x00FB3D, 0x0080},
+{0x00FB3D, 0x0001},
 {0x00FB3E, 0x0004},
-{0x00FB3F, 0x0080},
+{0x00FB3F, 0x0001},
 {0x00FB40, 0x0004},
-{0x00FB42, 0x0080},
+{0x00FB42, 0x0001},
 {0x00FB43, 0x0004},
-{0x00FB45, 0x0080},
+{0x00FB45, 0x0001},
 {0x00FB46, 0x0004},
 {0x00FBB2, 0x0040},
-{0x00FBC3, 0x0080},
+{0x00FBC3, 0x0001},
 {0x00FBD3, 0x0004},
 {0x00FD3E, 0x0020},
 {0x00FD40, 0x0040},
 {0x00FD50, 0x0004},
-{0x00FD90, 0x0080},
+{0x00FD90, 0x0001},
 {0x00FD92, 0x0004},
-{0x00FDC8, 0x0080},
+{0x00FDC8, 0x0001},
 {0x00FDCF, 0x0040},
-{0x00FDD0, 0x0080},
+{0x00FDD0, 0x0001},
 {0x00FDF0, 0x0004},
 {0x00FDFC, 0x0040},
 {0x00FE00, 0x0010},
 {0x00FE10, 0x0020},
-{0x00FE1A, 0x0080},
+{0x00FE1A, 0x0001},
 {0x00FE20, 0x0010},
 {0x00FE30, 0x0020},
-{0x00FE53, 0x0080},
+{0x00FE53, 0x0001},
 {0x00FE54, 0x0020},
 {0x00FE62, 0x0040},
 {0x00FE63, 0x0020},
 {0x00FE64, 0x0040},
-{0x00FE67, 0x0080},
+{0x00FE67, 0x0001},
 {0x00FE68, 0x0020},
 {0x00FE69, 0x0040},
 {0x00FE6A, 0x0020},
-{0x00FE6C, 0x0080},
+{0x00FE6C, 0x0001},
 {0x00FE70, 0x0004},
-{0x00FE75, 0x0080},
+{0x00FE75, 0x0001},
 {0x00FE76, 0x0004},
-{0x00FEFD, 0x0080},
+{0x00FEFD, 0x0001},
+{0x00FEFF, 0x0080},
+{0x00FF00, 0x0001},
 {0x00FF01, 0x0020},
 {0x00FF04, 0x0040},
 {0x00FF05, 0x0020},
@@ -1268,260 +1277,261 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x00FF5E, 0x0040},
 {0x00FF5F, 0x0020},
 {0x00FF66, 0x0004},
-{0x00FFBF, 0x0080},
+{0x00FFBF, 0x0001},
 {0x00FFC2, 0x0004},
-{0x00FFC8, 0x0080},
+{0x00FFC8, 0x0001},
 {0x00FFCA, 0x0004},
-{0x00FFD0, 0x0080},
+{0x00FFD0, 0x0001},
 {0x00FFD2, 0x0004},
-{0x00FFD8, 0x0080},
+{0x00FFD8, 0x0001},
 {0x00FFDA, 0x0004},
-{0x00FFDD, 0x0080},
+{0x00FFDD, 0x0001},
 {0x00FFE0, 0x0040},
-{0x00FFE7, 0x0080},
+{0x00FFE7, 0x0001},
 {0x00FFE8, 0x0040},
-{0x00FFEF, 0x0080},
+{0x00FFEF, 0x0001},
+{0x00FFF9, 0x0080},
 {0x00FFFC, 0x0040},
-{0x00FFFE, 0x0080},
+{0x00FFFE, 0x0001},
 {0x010000, 0x0004},
-{0x01000C, 0x0080},
+{0x01000C, 0x0001},
 {0x01000D, 0x0004},
-{0x010027, 0x0080},
+{0x010027, 0x0001},
 {0x010028, 0x0004},
-{0x01003B, 0x0080},
+{0x01003B, 0x0001},
 {0x01003C, 0x0004},
-{0x01003E, 0x0080},
+{0x01003E, 0x0001},
 {0x01003F, 0x0004},
-{0x01004E, 0x0080},
+{0x01004E, 0x0001},
 {0x010050, 0x0004},
-{0x01005E, 0x0080},
+{0x01005E, 0x0001},
 {0x010080, 0x0004},
-{0x0100FB, 0x0080},
+{0x0100FB, 0x0001},
 {0x010100, 0x0020},
-{0x010103, 0x0080},
+{0x010103, 0x0001},
 {0x010107, 0x0002},
-{0x010134, 0x0080},
+{0x010134, 0x0001},
 {0x010137, 0x0040},
 {0x010140, 0x0002},
 {0x010179, 0x0040},
 {0x01018A, 0x0002},
 {0x01018C, 0x0040},
-{0x01018F, 0x0080},
+{0x01018F, 0x0001},
 {0x010190, 0x0040},
-{0x01019D, 0x0080},
+{0x01019D, 0x0001},
 {0x0101A0, 0x0040},
-{0x0101A1, 0x0080},
+{0x0101A1, 0x0001},
 {0x0101D0, 0x0040},
 {0x0101FD, 0x0010},
-{0x0101FE, 0x0080},
+{0x0101FE, 0x0001},
 {0x010280, 0x0004},
-{0x01029D, 0x0080},
+{0x01029D, 0x0001},
 {0x0102A0, 0x0004},
-{0x0102D1, 0x0080},
+{0x0102D1, 0x0001},
 {0x0102E0, 0x0010},
 {0x0102E1, 0x0002},
-{0x0102FC, 0x0080},
+{0x0102FC, 0x0001},
 {0x010300, 0x0004},
 {0x010320, 0x0002},
-{0x010324, 0x0080},
+{0x010324, 0x0001},
 {0x01032D, 0x0004},
 {0x010341, 0x0002},
 {0x010342, 0x0004},
 {0x01034A, 0x0002},
-{0x01034B, 0x0080},
+{0x01034B, 0x0001},
 {0x010350, 0x0004},
 {0x010376, 0x0010},
-{0x01037B, 0x0080},
+{0x01037B, 0x0001},
 {0x010380, 0x0004},
-{0x01039E, 0x0080},
+{0x01039E, 0x0001},
 {0x01039F, 0x0020},
 {0x0103A0, 0x0004},
-{0x0103C4, 0x0080},
+{0x0103C4, 0x0001},
 {0x0103C8, 0x0004},
 {0x0103D0, 0x0020},
 {0x0103D1, 0x0002},
-{0x0103D6, 0x0080},
+{0x0103D6, 0x0001},
 {0x010400, 0x0004},
-{0x01049E, 0x0080},
+{0x01049E, 0x0001},
 {0x0104A0, 0x0002},
-{0x0104AA, 0x0080},
+{0x0104AA, 0x0001},
 {0x0104B0, 0x0004},
-{0x0104D4, 0x0080},
+{0x0104D4, 0x0001},
 {0x0104D8, 0x0004},
-{0x0104FC, 0x0080},
+{0x0104FC, 0x0001},
 {0x010500, 0x0004},
-{0x010528, 0x0080},
+{0x010528, 0x0001},
 {0x010530, 0x0004},
-{0x010564, 0x0080},
+{0x010564, 0x0001},
 {0x01056F, 0x0020},
 {0x010570, 0x0004},
-{0x01057B, 0x0080},
+{0x01057B, 0x0001},
 {0x01057C, 0x0004},
-{0x01058B, 0x0080},
+{0x01058B, 0x0001},
 {0x01058C, 0x0004},
-{0x010593, 0x0080},
+{0x010593, 0x0001},
 {0x010594, 0x0004},
-{0x010596, 0x0080},
+{0x010596, 0x0001},
 {0x010597, 0x0004},
-{0x0105A2, 0x0080},
+{0x0105A2, 0x0001},
 {0x0105A3, 0x0004},
-{0x0105B2, 0x0080},
+{0x0105B2, 0x0001},
 {0x0105B3, 0x0004},
-{0x0105BA, 0x0080},
+{0x0105BA, 0x0001},
 {0x0105BB, 0x0004},
-{0x0105BD, 0x0080},
+{0x0105BD, 0x0001},
 {0x010600, 0x0004},
-{0x010737, 0x0080},
+{0x010737, 0x0001},
 {0x010740, 0x0004},
-{0x010756, 0x0080},
+{0x010756, 0x0001},
 {0x010760, 0x0004},
-{0x010768, 0x0080},
+{0x010768, 0x0001},
 {0x010780, 0x0004},
-{0x010786, 0x0080},
+{0x010786, 0x0001},
 {0x010787, 0x0004},
-{0x0107B1, 0x0080},
+{0x0107B1, 0x0001},
 {0x0107B2, 0x0004},
-{0x0107BB, 0x0080},
+{0x0107BB, 0x0001},
 {0x010800, 0x0004},
-{0x010806, 0x0080},
+{0x010806, 0x0001},
 {0x010808, 0x0004},
-{0x010809, 0x0080},
+{0x010809, 0x0001},
 {0x01080A, 0x0004},
-{0x010836, 0x0080},
+{0x010836, 0x0001},
 {0x010837, 0x0004},
-{0x010839, 0x0080},
+{0x010839, 0x0001},
 {0x01083C, 0x0004},
-{0x01083D, 0x0080},
+{0x01083D, 0x0001},
 {0x01083F, 0x0004},
-{0x010856, 0x0080},
+{0x010856, 0x0001},
 {0x010857, 0x0020},
 {0x010858, 0x0002},
 {0x010860, 0x0004},
 {0x010877, 0x0040},
 {0x010879, 0x0002},
 {0x010880, 0x0004},
-{0x01089F, 0x0080},
+{0x01089F, 0x0001},
 {0x0108A7, 0x0002},
-{0x0108B0, 0x0080},
+{0x0108B0, 0x0001},
 {0x0108E0, 0x0004},
-{0x0108F3, 0x0080},
+{0x0108F3, 0x0001},
 {0x0108F4, 0x0004},
-{0x0108F6, 0x0080},
+{0x0108F6, 0x0001},
 {0x0108FB, 0x0002},
 {0x010900, 0x0004},
 {0x010916, 0x0002},
-{0x01091C, 0x0080},
+{0x01091C, 0x0001},
 {0x01091F, 0x0020},
 {0x010920, 0x0004},
-{0x01093A, 0x0080},
+{0x01093A, 0x0001},
 {0x01093F, 0x0020},
-{0x010940, 0x0080},
+{0x010940, 0x0001},
 {0x010980, 0x0004},
-{0x0109B8, 0x0080},
+{0x0109B8, 0x0001},
 {0x0109BC, 0x0002},
 {0x0109BE, 0x0004},
 {0x0109C0, 0x0002},
-{0x0109D0, 0x0080},
+{0x0109D0, 0x0001},
 {0x0109D2, 0x0002},
 {0x010A00, 0x0004},
 {0x010A01, 0x0010},
-{0x010A04, 0x0080},
+{0x010A04, 0x0001},
 {0x010A05, 0x0010},
-{0x010A07, 0x0080},
+{0x010A07, 0x0001},
 {0x010A0C, 0x0010},
 {0x010A10, 0x0004},
-{0x010A14, 0x0080},
+{0x010A14, 0x0001},
 {0x010A15, 0x0004},
-{0x010A18, 0x0080},
+{0x010A18, 0x0001},
 {0x010A19, 0x0004},
-{0x010A36, 0x0080},
+{0x010A36, 0x0001},
 {0x010A38, 0x0010},
-{0x010A3B, 0x0080},
+{0x010A3B, 0x0001},
 {0x010A3F, 0x0010},
 {0x010A40, 0x0002},
-{0x010A49, 0x0080},
+{0x010A49, 0x0001},
 {0x010A50, 0x0020},
-{0x010A59, 0x0080},
+{0x010A59, 0x0001},
 {0x010A60, 0x0004},
 {0x010A7D, 0x0002},
 {0x010A7F, 0x0020},
 {0x010A80, 0x0004},
 {0x010A9D, 0x0002},
-{0x010AA0, 0x0080},
+{0x010AA0, 0x0001},
 {0x010AC0, 0x0004},
 {0x010AC8, 0x0040},
 {0x010AC9, 0x0004},
 {0x010AE5, 0x0010},
-{0x010AE7, 0x0080},
+{0x010AE7, 0x0001},
 {0x010AEB, 0x0002},
 {0x010AF0, 0x0020},
-{0x010AF7, 0x0080},
+{0x010AF7, 0x0001},
 {0x010B00, 0x0004},
-{0x010B36, 0x0080},
+{0x010B36, 0x0001},
 {0x010B39, 0x0020},
 {0x010B40, 0x0004},
-{0x010B56, 0x0080},
+{0x010B56, 0x0001},
 {0x010B58, 0x0002},
 {0x010B60, 0x0004},
-{0x010B73, 0x0080},
+{0x010B73, 0x0001},
 {0x010B78, 0x0002},
 {0x010B80, 0x0004},
-{0x010B92, 0x0080},
+{0x010B92, 0x0001},
 {0x010B99, 0x0020},
-{0x010B9D, 0x0080},
+{0x010B9D, 0x0001},
 {0x010BA9, 0x0002},
-{0x010BB0, 0x0080},
+{0x010BB0, 0x0001},
 {0x010C00, 0x0004},
-{0x010C49, 0x0080},
+{0x010C49, 0x0001},
 {0x010C80, 0x0004},
-{0x010CB3, 0x0080},
+{0x010CB3, 0x0001},
 {0x010CC0, 0x0004},
-{0x010CF3, 0x0080},
+{0x010CF3, 0x0001},
 {0x010CFA, 0x0002},
 {0x010D00, 0x0004},
 {0x010D24, 0x0010},
-{0x010D28, 0x0080},
+{0x010D28, 0x0001},
 {0x010D30, 0x0002},
-{0x010D3A, 0x0080},
+{0x010D3A, 0x0001},
 {0x010E60, 0x0002},
-{0x010E7F, 0x0080},
+{0x010E7F, 0x0001},
 {0x010E80, 0x0004},
-{0x010EAA, 0x0080},
+{0x010EAA, 0x0001},
 {0x010EAB, 0x0010},
 {0x010EAD, 0x0020},
-{0x010EAE, 0x0080},
+{0x010EAE, 0x0001},
 {0x010EB0, 0x0004},
-{0x010EB2, 0x0080},
+{0x010EB2, 0x0001},
 {0x010EFD, 0x0010},
 {0x010F00, 0x0004},
 {0x010F1D, 0x0002},
 {0x010F27, 0x0004},
-{0x010F28, 0x0080},
+{0x010F28, 0x0001},
 {0x010F30, 0x0004},
 {0x010F46, 0x0010},
 {0x010F51, 0x0002},
 {0x010F55, 0x0020},
-{0x010F5A, 0x0080},
+{0x010F5A, 0x0001},
 {0x010F70, 0x0004},
 {0x010F82, 0x0010},
 {0x010F86, 0x0020},
-{0x010F8A, 0x0080},
+{0x010F8A, 0x0001},
 {0x010FB0, 0x0004},
 {0x010FC5, 0x0002},
-{0x010FCC, 0x0080},
+{0x010FCC, 0x0001},
 {0x010FE0, 0x0004},
-{0x010FF7, 0x0080},
+{0x010FF7, 0x0001},
 {0x011000, 0x0010},
 {0x011003, 0x0004},
 {0x011038, 0x0010},
 {0x011047, 0x0020},
-{0x01104E, 0x0080},
+{0x01104E, 0x0001},
 {0x011052, 0x0002},
 {0x011070, 0x0010},
 {0x011071, 0x0004},
 {0x011073, 0x0010},
 {0x011075, 0x0004},
-{0x011076, 0x0080},
+{0x011076, 0x0001},
 {0x01107F, 0x0010},
 {0x011083, 0x0004},
 {0x0110B0, 0x0010},
@@ -1529,26 +1539,28 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x0110BD, 0x0080},
 {0x0110BE, 0x0020},
 {0x0110C2, 0x0010},
-{0x0110C3, 0x0080},
+{0x0110C3, 0x0001},
+{0x0110CD, 0x0080},
+{0x0110CE, 0x0001},
 {0x0110D0, 0x0004},
-{0x0110E9, 0x0080},
+{0x0110E9, 0x0001},
 {0x0110F0, 0x0002},
-{0x0110FA, 0x0080},
+{0x0110FA, 0x0001},
 {0x011100, 0x0010},
 {0x011103, 0x0004},
 {0x011127, 0x0010},
-{0x011135, 0x0080},
+{0x011135, 0x0001},
 {0x011136, 0x0002},
 {0x011140, 0x0020},
 {0x011144, 0x0004},
 {0x011145, 0x0010},
 {0x011147, 0x0004},
-{0x011148, 0x0080},
+{0x011148, 0x0001},
 {0x011150, 0x0004},
 {0x011173, 0x0010},
 {0x011174, 0x0020},
 {0x011176, 0x0004},
-{0x011177, 0x0080},
+{0x011177, 0x0001},
 {0x011180, 0x0010},
 {0x011183, 0x0004},
 {0x0111B3, 0x0010},
@@ -1562,159 +1574,159 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x0111DB, 0x0020},
 {0x0111DC, 0x0004},
 {0x0111DD, 0x0020},
-{0x0111E0, 0x0080},
+{0x0111E0, 0x0001},
 {0x0111E1, 0x0002},
-{0x0111F5, 0x0080},
+{0x0111F5, 0x0001},
 {0x011200, 0x0004},
-{0x011212, 0x0080},
+{0x011212, 0x0001},
 {0x011213, 0x0004},
 {0x01122C, 0x0010},
 {0x011238, 0x0020},
 {0x01123E, 0x0010},
 {0x01123F, 0x0004},
 {0x011241, 0x0010},
-{0x011242, 0x0080},
+{0x011242, 0x0001},
 {0x011280, 0x0004},
-{0x011287, 0x0080},
+{0x011287, 0x0001},
 {0x011288, 0x0004},
-{0x011289, 0x0080},
+{0x011289, 0x0001},
 {0x01128A, 0x0004},
-{0x01128E, 0x0080},
+{0x01128E, 0x0001},
 {0x01128F, 0x0004},
-{0x01129E, 0x0080},
+{0x01129E, 0x0001},
 {0x01129F, 0x0004},
 {0x0112A9, 0x0020},
-{0x0112AA, 0x0080},
+{0x0112AA, 0x0001},
 {0x0112B0, 0x0004},
 {0x0112DF, 0x0010},
-{0x0112EB, 0x0080},
+{0x0112EB, 0x0001},
 {0x0112F0, 0x0002},
-{0x0112FA, 0x0080},
+{0x0112FA, 0x0001},
 {0x011300, 0x0010},
-{0x011304, 0x0080},
+{0x011304, 0x0001},
 {0x011305, 0x0004},
-{0x01130D, 0x0080},
+{0x01130D, 0x0001},
 {0x01130F, 0x0004},
-{0x011311, 0x0080},
+{0x011311, 0x0001},
 {0x011313, 0x0004},
-{0x011329, 0x0080},
+{0x011329, 0x0001},
 {0x01132A, 0x0004},
-{0x011331, 0x0080},
+{0x011331, 0x0001},
 {0x011332, 0x0004},
-{0x011334, 0x0080},
+{0x011334, 0x0001},
 {0x011335, 0x0004},
-{0x01133A, 0x0080},
+{0x01133A, 0x0001},
 {0x01133B, 0x0010},
 {0x01133D, 0x0004},
 {0x01133E, 0x0010},
-{0x011345, 0x0080},
+{0x011345, 0x0001},
 {0x011347, 0x0010},
-{0x011349, 0x0080},
+{0x011349, 0x0001},
 {0x01134B, 0x0010},
-{0x01134E, 0x0080},
+{0x01134E, 0x0001},
 {0x011350, 0x0004},
-{0x011351, 0x0080},
+{0x011351, 0x0001},
 {0x011357, 0x0010},
-{0x011358, 0x0080},
+{0x011358, 0x0001},
 {0x01135D, 0x0004},
 {0x011362, 0x0010},
-{0x011364, 0x0080},
+{0x011364, 0x0001},
 {0x011366, 0x0010},
-{0x01136D, 0x0080},
+{0x01136D, 0x0001},
 {0x011370, 0x0010},
-{0x011375, 0x0080},
+{0x011375, 0x0001},
 {0x011400, 0x0004},
 {0x011435, 0x0010},
 {0x011447, 0x0004},
 {0x01144B, 0x0020},
 {0x011450, 0x0002},
 {0x01145A, 0x0020},
-{0x01145C, 0x0080},
+{0x01145C, 0x0001},
 {0x01145D, 0x0020},
 {0x01145E, 0x0010},
 {0x01145F, 0x0004},
-{0x011462, 0x0080},
+{0x011462, 0x0001},
 {0x011480, 0x0004},
 {0x0114B0, 0x0010},
 {0x0114C4, 0x0004},
 {0x0114C6, 0x0020},
 {0x0114C7, 0x0004},
-{0x0114C8, 0x0080},
+{0x0114C8, 0x0001},
 {0x0114D0, 0x0002},
-{0x0114DA, 0x0080},
+{0x0114DA, 0x0001},
 {0x011580, 0x0004},
 {0x0115AF, 0x0010},
-{0x0115B6, 0x0080},
+{0x0115B6, 0x0001},
 {0x0115B8, 0x0010},
 {0x0115C1, 0x0020},
 {0x0115D8, 0x0004},
 {0x0115DC, 0x0010},
-{0x0115DE, 0x0080},
+{0x0115DE, 0x0001},
 {0x011600, 0x0004},
 {0x011630, 0x0010},
 {0x011641, 0x0020},
 {0x011644, 0x0004},
-{0x011645, 0x0080},
+{0x011645, 0x0001},
 {0x011650, 0x0002},
-{0x01165A, 0x0080},
+{0x01165A, 0x0001},
 {0x011660, 0x0020},
-{0x01166D, 0x0080},
+{0x01166D, 0x0001},
 {0x011680, 0x0004},
 {0x0116AB, 0x0010},
 {0x0116B8, 0x0004},
 {0x0116B9, 0x0020},
-{0x0116BA, 0x0080},
+{0x0116BA, 0x0001},
 {0x0116C0, 0x0002},
-{0x0116CA, 0x0080},
+{0x0116CA, 0x0001},
 {0x011700, 0x0004},
-{0x01171B, 0x0080},
+{0x01171B, 0x0001},
 {0x01171D, 0x0010},
-{0x01172C, 0x0080},
+{0x01172C, 0x0001},
 {0x011730, 0x0002},
 {0x01173C, 0x0020},
 {0x01173F, 0x0040},
 {0x011740, 0x0004},
-{0x011747, 0x0080},
+{0x011747, 0x0001},
 {0x011800, 0x0004},
 {0x01182C, 0x0010},
 {0x01183B, 0x0020},
-{0x01183C, 0x0080},
+{0x01183C, 0x0001},
 {0x0118A0, 0x0004},
 {0x0118E0, 0x0002},
-{0x0118F3, 0x0080},
+{0x0118F3, 0x0001},
 {0x0118FF, 0x0004},
-{0x011907, 0x0080},
+{0x011907, 0x0001},
 {0x011909, 0x0004},
-{0x01190A, 0x0080},
+{0x01190A, 0x0001},
 {0x01190C, 0x0004},
-{0x011914, 0x0080},
+{0x011914, 0x0001},
 {0x011915, 0x0004},
-{0x011917, 0x0080},
+{0x011917, 0x0001},
 {0x011918, 0x0004},
 {0x011930, 0x0010},
-{0x011936, 0x0080},
+{0x011936, 0x0001},
 {0x011937, 0x0010},
-{0x011939, 0x0080},
+{0x011939, 0x0001},
 {0x01193B, 0x0010},
 {0x01193F, 0x0004},
 {0x011940, 0x0010},
 {0x011941, 0x0004},
 {0x011942, 0x0010},
 {0x011944, 0x0020},
-{0x011947, 0x0080},
+{0x011947, 0x0001},
 {0x011950, 0x0002},
-{0x01195A, 0x0080},
+{0x01195A, 0x0001},
 {0x0119A0, 0x0004},
-{0x0119A8, 0x0080},
+{0x0119A8, 0x0001},
 {0x0119AA, 0x0004},
 {0x0119D1, 0x0010},
-{0x0119D8, 0x0080},
+{0x0119D8, 0x0001},
 {0x0119DA, 0x0010},
 {0x0119E1, 0x0004},
 {0x0119E2, 0x0020},
 {0x0119E3, 0x0004},
 {0x0119E4, 0x0010},
-{0x0119E5, 0x0080},
+{0x0119E5, 0x0001},
 {0x011A00, 0x0004},
 {0x011A01, 0x0010},
 {0x011A0B, 0x0004},
@@ -1723,7 +1735,7 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x011A3B, 0x0010},
 {0x011A3F, 0x0020},
 {0x011A47, 0x0010},
-{0x011A48, 0x0080},
+{0x011A48, 0x0001},
 {0x011A50, 0x0004},
 {0x011A51, 0x0010},
 {0x011A5C, 0x0004},
@@ -1731,117 +1743,117 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x011A9A, 0x0020},
 {0x011A9D, 0x0004},
 {0x011A9E, 0x0020},
-{0x011AA3, 0x0080},
+{0x011AA3, 0x0001},
 {0x011AB0, 0x0004},
-{0x011AF9, 0x0080},
+{0x011AF9, 0x0001},
 {0x011B00, 0x0020},
-{0x011B0A, 0x0080},
+{0x011B0A, 0x0001},
 {0x011C00, 0x0004},
-{0x011C09, 0x0080},
+{0x011C09, 0x0001},
 {0x011C0A, 0x0004},
 {0x011C2F, 0x0010},
-{0x011C37, 0x0080},
+{0x011C37, 0x0001},
 {0x011C38, 0x0010},
 {0x011C40, 0x0004},
 {0x011C41, 0x0020},
-{0x011C46, 0x0080},
+{0x011C46, 0x0001},
 {0x011C50, 0x0002},
-{0x011C6D, 0x0080},
+{0x011C6D, 0x0001},
 {0x011C70, 0x0020},
 {0x011C72, 0x0004},
-{0x011C90, 0x0080},
+{0x011C90, 0x0001},
 {0x011C92, 0x0010},
-{0x011CA8, 0x0080},
+{0x011CA8, 0x0001},
 {0x011CA9, 0x0010},
-{0x011CB7, 0x0080},
+{0x011CB7, 0x0001},
 {0x011D00, 0x0004},
-{0x011D07, 0x0080},
+{0x011D07, 0x0001},
 {0x011D08, 0x0004},
-{0x011D0A, 0x0080},
+{0x011D0A, 0x0001},
 {0x011D0B, 0x0004},
 {0x011D31, 0x0010},
-{0x011D37, 0x0080},
+{0x011D37, 0x0001},
 {0x011D3A, 0x0010},
-{0x011D3B, 0x0080},
+{0x011D3B, 0x0001},
 {0x011D3C, 0x0010},
-{0x011D3E, 0x0080},
+{0x011D3E, 0x0001},
 {0x011D3F, 0x0010},
 {0x011D46, 0x0004},
 {0x011D47, 0x0010},
-{0x011D48, 0x0080},
+{0x011D48, 0x0001},
 {0x011D50, 0x0002},
-{0x011D5A, 0x0080},
+{0x011D5A, 0x0001},
 {0x011D60, 0x0004},
-{0x011D66, 0x0080},
+{0x011D66, 0x0001},
 {0x011D67, 0x0004},
-{0x011D69, 0x0080},
+{0x011D69, 0x0001},
 {0x011D6A, 0x0004},
 {0x011D8A, 0x0010},
-{0x011D8F, 0x0080},
+{0x011D8F, 0x0001},
 {0x011D90, 0x0010},
-{0x011D92, 0x0080},
+{0x011D92, 0x0001},
 {0x011D93, 0x0010},
 {0x011D98, 0x0004},
-{0x011D99, 0x0080},
+{0x011D99, 0x0001},
 {0x011DA0, 0x0002},
-{0x011DAA, 0x0080},
+{0x011DAA, 0x0001},
 {0x011EE0, 0x0004},
 {0x011EF3, 0x0010},
 {0x011EF7, 0x0020},
-{0x011EF9, 0x0080},
+{0x011EF9, 0x0001},
 {0x011F00, 0x0010},
 {0x011F02, 0x0004},
 {0x011F03, 0x0010},
 {0x011F04, 0x0004},
-{0x011F11, 0x0080},
+{0x011F11, 0x0001},
 {0x011F12, 0x0004},
 {0x011F34, 0x0010},
-{0x011F3B, 0x0080},
+{0x011F3B, 0x0001},
 {0x011F3E, 0x0010},
 {0x011F43, 0x0020},
 {0x011F50, 0x0002},
-{0x011F5A, 0x0080},
+{0x011F5A, 0x0001},
 {0x011FB0, 0x0004},
-{0x011FB1, 0x0080},
+{0x011FB1, 0x0001},
 {0x011FC0, 0x0002},
 {0x011FD5, 0x0040},
-{0x011FF2, 0x0080},
+{0x011FF2, 0x0001},
 {0x011FFF, 0x0020},
 {0x012000, 0x0004},
-{0x01239A, 0x0080},
+{0x01239A, 0x0001},
 {0x012400, 0x0002},
-{0x01246F, 0x0080},
+{0x01246F, 0x0001},
 {0x012470, 0x0020},
-{0x012475, 0x0080},
+{0x012475, 0x0001},
 {0x012480, 0x0004},
-{0x012544, 0x0080},
+{0x012544, 0x0001},
 {0x012F90, 0x0004},
 {0x012FF1, 0x0020},
-{0x012FF3, 0x0080},
+{0x012FF3, 0x0001},
 {0x013000, 0x0004},
 {0x013430, 0x0080},
 {0x013440, 0x0010},
 {0x013441, 0x0004},
 {0x013447, 0x0010},
-{0x013456, 0x0080},
+{0x013456, 0x0001},
 {0x014400, 0x0004},
-{0x014647, 0x0080},
+{0x014647, 0x0001},
 {0x016800, 0x0004},
-{0x016A39, 0x0080},
+{0x016A39, 0x0001},
 {0x016A40, 0x0004},
-{0x016A5F, 0x0080},
+{0x016A5F, 0x0001},
 {0x016A60, 0x0002},
-{0x016A6A, 0x0080},
+{0x016A6A, 0x0001},
 {0x016A6E, 0x0020},
 {0x016A70, 0x0004},
-{0x016ABF, 0x0080},
+{0x016ABF, 0x0001},
 {0x016AC0, 0x0002},
-{0x016ACA, 0x0080},
+{0x016ACA, 0x0001},
 {0x016AD0, 0x0004},
-{0x016AEE, 0x0080},
+{0x016AEE, 0x0001},
 {0x016AF0, 0x0010},
 {0x016AF5, 0x0020},
-{0x016AF6, 0x0080},
+{0x016AF6, 0x0001},
 {0x016B00, 0x0004},
 {0x016B30, 0x0010},
 {0x016B37, 0x0020},
@@ -1849,81 +1861,82 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x016B40, 0x0004},
 {0x016B44, 0x0020},
 {0x016B45, 0x0040},
-{0x016B46, 0x0080},
+{0x016B46, 0x0001},
 {0x016B50, 0x0002},
-{0x016B5A, 0x0080},
+{0x016B5A, 0x0001},
 {0x016B5B, 0x0002},
-{0x016B62, 0x0080},
+{0x016B62, 0x0001},
 {0x016B63, 0x0004},
-{0x016B78, 0x0080},
+{0x016B78, 0x0001},
 {0x016B7D, 0x0004},
-{0x016B90, 0x0080},
+{0x016B90, 0x0001},
 {0x016E40, 0x0004},
 {0x016E80, 0x0002},
 {0x016E97, 0x0020},
-{0x016E9B, 0x0080},
+{0x016E9B, 0x0001},
 {0x016F00, 0x0004},
-{0x016F4B, 0x0080},
+{0x016F4B, 0x0001},
 {0x016F4F, 0x0010},
 {0x016F50, 0x0004},
 {0x016F51, 0x0010},
-{0x016F88, 0x0080},
+{0x016F88, 0x0001},
 {0x016F8F, 0x0010},
 {0x016F93, 0x0004},
-{0x016FA0, 0x0080},
+{0x016FA0, 0x0001},
 {0x016FE0, 0x0004},
 {0x016FE2, 0x0020},
 {0x016FE3, 0x0004},
 {0x016FE4, 0x0010},
-{0x016FE5, 0x0080},
+{0x016FE5, 0x0001},
 {0x016FF0, 0x0010},
-{0x016FF2, 0x0080},
+{0x016FF2, 0x0001},
 {0x017000, 0x0004},
-{0x0187F8, 0x0080},
+{0x0187F8, 0x0001},
 {0x018800, 0x0004},
-{0x018CD6, 0x0080},
+{0x018CD6, 0x0001},
 {0x018D00, 0x0004},
-{0x018D09, 0x0080},
+{0x018D09, 0x0001},
 {0x01AFF0, 0x0004},
-{0x01AFF4, 0x0080},
+{0x01AFF4, 0x0001},
 {0x01AFF5, 0x0004},
-{0x01AFFC, 0x0080},
+{0x01AFFC, 0x0001},
 {0x01AFFD, 0x0004},
-{0x01AFFF, 0x0080},
+{0x01AFFF, 0x0001},
 {0x01B000, 0x0004},
-{0x01B123, 0x0080},
+{0x01B123, 0x0001},
 {0x01B132, 0x0004},
-{0x01B133, 0x0080},
+{0x01B133, 0x0001},
 {0x01B150, 0x0004},
-{0x01B153, 0x0080},
+{0x01B153, 0x0001},
 {0x01B155, 0x0004},
-{0x01B156, 0x0080},
+{0x01B156, 0x0001},
 {0x01B164, 0x0004},
-{0x01B168, 0x0080},
+{0x01B168, 0x0001},
 {0x01B170, 0x0004},
-{0x01B2FC, 0x0080},
+{0x01B2FC, 0x0001},
 {0x01BC00, 0x0004},
-{0x01BC6B, 0x0080},
+{0x01BC6B, 0x0001},
 {0x01BC70, 0x0004},
-{0x01BC7D, 0x0080},
+{0x01BC7D, 0x0001},
 {0x01BC80, 0x0004},
-{0x01BC89, 0x0080},
+{0x01BC89, 0x0001},
 {0x01BC90, 0x0004},
-{0x01BC9A, 0x0080},
+{0x01BC9A, 0x0001},
 {0x01BC9C, 0x0040},
 {0x01BC9D, 0x0010},
 {0x01BC9F, 0x0020},
 {0x01BCA0, 0x0080},
+{0x01BCA4, 0x0001},
 {0x01CF00, 0x0010},
-{0x01CF2E, 0x0080},
+{0x01CF2E, 0x0001},
 {0x01CF30, 0x0010},
-{0x01CF47, 0x0080},
+{0x01CF47, 0x0001},
 {0x01CF50, 0x0040},
-{0x01CFC4, 0x0080},
+{0x01CFC4, 0x0001},
 {0x01D000, 0x0040},
-{0x01D0F6, 0x0080},
+{0x01D0F6, 0x0001},
 {0x01D100, 0x0040},
-{0x01D127, 0x0080},
+{0x01D127, 0x0001},
 {0x01D129, 0x0040},
 {0x01D165, 0x0010},
 {0x01D16A, 0x0040},
@@ -1935,57 +1948,57 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x01D18C, 0x0040},
 {0x01D1AA, 0x0010},
 {0x01D1AE, 0x0040},
-{0x01D1EB, 0x0080},
+{0x01D1EB, 0x0001},
 {0x01D200, 0x0040},
 {0x01D242, 0x0010},
 {0x01D245, 0x0040},
-{0x01D246, 0x0080},
+{0x01D246, 0x0001},
 {0x01D2C0, 0x0002},
-{0x01D2D4, 0x0080},
+{0x01D2D4, 0x0001},
 {0x01D2E0, 0x0002},
-{0x01D2F4, 0x0080},
+{0x01D2F4, 0x0001},
 {0x01D300, 0x0040},
-{0x01D357, 0x0080},
+{0x01D357, 0x0001},
 {0x01D360, 0x0002},
-{0x01D379, 0x0080},
+{0x01D379, 0x0001},
 {0x01D400, 0x0004},
-{0x01D455, 0x0080},
+{0x01D455, 0x0001},
 {0x01D456, 0x0004},
-{0x01D49D, 0x0080},
+{0x01D49D, 0x0001},
 {0x01D49E, 0x0004},
-{0x01D4A0, 0x0080},
+{0x01D4A0, 0x0001},
 {0x01D4A2, 0x0004},
-{0x01D4A3, 0x0080},
+{0x01D4A3, 0x0001},
 {0x01D4A5, 0x0004},
-{0x01D4A7, 0x0080},
+{0x01D4A7, 0x0001},
 {0x01D4A9, 0x0004},
-{0x01D4AD, 0x0080},
+{0x01D4AD, 0x0001},
 {0x01D4AE, 0x0004},
-{0x01D4BA, 0x0080},
+{0x01D4BA, 0x0001},
 {0x01D4BB, 0x0004},
-{0x01D4BC, 0x0080},
+{0x01D4BC, 0x0001},
 {0x01D4BD, 0x0004},
-{0x01D4C4, 0x0080},
+{0x01D4C4, 0x0001},
 {0x01D4C5, 0x0004},
-{0x01D506, 0x0080},
+{0x01D506, 0x0001},
 {0x01D507, 0x0004},
-{0x01D50B, 0x0080},
+{0x01D50B, 0x0001},
 {0x01D50D, 0x0004},
-{0x01D515, 0x0080},
+{0x01D515, 0x0001},
 {0x01D516, 0x0004},
-{0x01D51D, 0x0080},
+{0x01D51D, 0x0001},
 {0x01D51E, 0x0004},
-{0x01D53A, 0x0080},
+{0x01D53A, 0x0001},
 {0x01D53B, 0x0004},
-{0x01D53F, 0x0080},
+{0x01D53F, 0x0001},
 {0x01D540, 0x0004},
-{0x01D545, 0x0080},
+{0x01D545, 0x0001},
 {0x01D546, 0x0004},
-{0x01D547, 0x0080},
+{0x01D547, 0x0001},
 {0x01D54A, 0x0004},
-{0x01D551, 0x0080},
+{0x01D551, 0x0001},
 {0x01D552, 0x0004},
-{0x01D6A6, 0x0080},
+{0x01D6A6, 0x0001},
 {0x01D6A8, 0x0004},
 {0x01D6C1, 0x0040},
 {0x01D6C2, 0x0004},
@@ -2007,7 +2020,7 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x01D7AA, 0x0004},
 {0x01D7C3, 0x0040},
 {0x01D7C4, 0x0004},
-{0x01D7CC, 0x0080},
+{0x01D7CC, 0x0001},
 {0x01D7CE, 0x0002},
 {0x01D800, 0x0040},
 {0x01DA00, 0x0010},
@@ -2019,251 +2032,283 @@ const std::vector<std::pair<uint32_t, uint16_t>> unicode_ranges_flags = {  // st
 {0x01DA84, 0x0010},
 {0x01DA85, 0x0040},
 {0x01DA87, 0x0020},
-{0x01DA8C, 0x0080},
+{0x01DA8C, 0x0001},
 {0x01DA9B, 0x0010},
-{0x01DAA0, 0x0080},
+{0x01DAA0, 0x0001},
 {0x01DAA1, 0x0010},
-{0x01DAB0, 0x0080},
+{0x01DAB0, 0x0001},
 {0x01DF00, 0x0004},
-{0x01DF1F, 0x0080},
+{0x01DF1F, 0x0001},
 {0x01DF25, 0x0004},
-{0x01DF2B, 0x0080},
+{0x01DF2B, 0x0001},
 {0x01E000, 0x0010},
-{0x01E007, 0x0080},
+{0x01E007, 0x0001},
 {0x01E008, 0x0010},
-{0x01E019, 0x0080},
+{0x01E019, 0x0001},
 {0x01E01B, 0x0010},
-{0x01E022, 0x0080},
+{0x01E022, 0x0001},
 {0x01E023, 0x0010},
-{0x01E025, 0x0080},
+{0x01E025, 0x0001},
 {0x01E026, 0x0010},
-{0x01E02B, 0x0080},
+{0x01E02B, 0x0001},
 {0x01E030, 0x0004},
-{0x01E06E, 0x0080},
+{0x01E06E, 0x0001},
 {0x01E08F, 0x0010},
-{0x01E090, 0x0080},
+{0x01E090, 0x0001},
 {0x01E100, 0x0004},
-{0x01E12D, 0x0080},
+{0x01E12D, 0x0001},
 {0x01E130, 0x0010},
 {0x01E137, 0x0004},
-{0x01E13E, 0x0080},
+{0x01E13E, 0x0001},
 {0x01E140, 0x0002},
-{0x01E14A, 0x0080},
+{0x01E14A, 0x0001},
 {0x01E14E, 0x0004},
 {0x01E14F, 0x0040},
-{0x01E150, 0x0080},
+{0x01E150, 0x0001},
 {0x01E290, 0x0004},
 {0x01E2AE, 0x0010},
-{0x01E2AF, 0x0080},
+{0x01E2AF, 0x0001},
 {0x01E2C0, 0x0004},
 {0x01E2EC, 0x0010},
 {0x01E2F0, 0x0002},
-{0x01E2FA, 0x0080},
+{0x01E2FA, 0x0001},
 {0x01E2FF, 0x0040},
-{0x01E300, 0x0080},
+{0x01E300, 0x0001},
 {0x01E4D0, 0x0004},
 {0x01E4EC, 0x0010},
 {0x01E4F0, 0x0002},
-{0x01E4FA, 0x0080},
+{0x01E4FA, 0x0001},
 {0x01E7E0, 0x0004},
-{0x01E7E7, 0x0080},
+{0x01E7E7, 0x0001},
 {0x01E7E8, 0x0004},
-{0x01E7EC, 0x0080},
+{0x01E7EC, 0x0001},
 {0x01E7ED, 0x0004},
-{0x01E7EF, 0x0080},
+{0x01E7EF, 0x0001},
 {0x01E7F0, 0x0004},
-{0x01E7FF, 0x0080},
+{0x01E7FF, 0x0001},
 {0x01E800, 0x0004},
-{0x01E8C5, 0x0080},
+{0x01E8C5, 0x0001},
 {0x01E8C7, 0x0002},
 {0x01E8D0, 0x0010},
-{0x01E8D7, 0x0080},
+{0x01E8D7, 0x0001},
 {0x01E900, 0x0004},
 {0x01E944, 0x0010},
 {0x01E94B, 0x0004},
-{0x01E94C, 0x0080},
+{0x01E94C, 0x0001},
 {0x01E950, 0x0002},
-{0x01E95A, 0x0080},
+{0x01E95A, 0x0001},
 {0x01E95E, 0x0020},
-{0x01E960, 0x0080},
+{0x01E960, 0x0001},
 {0x01EC71, 0x0002},
 {0x01ECAC, 0x0040},
 {0x01ECAD, 0x0002},
 {0x01ECB0, 0x0040},
 {0x01ECB1, 0x0002},
-{0x01ECB5, 0x0080},
+{0x01ECB5, 0x0001},
 {0x01ED01, 0x0002},
 {0x01ED2E, 0x0040},
 {0x01ED2F, 0x0002},
-{0x01ED3E, 0x0080},
+{0x01ED3E, 0x0001},
 {0x01EE00, 0x0004},
-{0x01EE04, 0x0080},
+{0x01EE04, 0x0001},
 {0x01EE05, 0x0004},
-{0x01EE20, 0x0080},
+{0x01EE20, 0x0001},
 {0x01EE21, 0x0004},
-{0x01EE23, 0x0080},
+{0x01EE23, 0x0001},
 {0x01EE24, 0x0004},
-{0x01EE25, 0x0080},
+{0x01EE25, 0x0001},
 {0x01EE27, 0x0004},
-{0x01EE28, 0x0080},
+{0x01EE28, 0x0001},
 {0x01EE29, 0x0004},
-{0x01EE33, 0x0080},
+{0x01EE33, 0x0001},
 {0x01EE34, 0x0004},
-{0x01EE38, 0x0080},
+{0x01EE38, 0x0001},
 {0x01EE39, 0x0004},
-{0x01EE3A, 0x0080},
+{0x01EE3A, 0x0001},
 {0x01EE3B, 0x0004},
-{0x01EE3C, 0x0080},
+{0x01EE3C, 0x0001},
 {0x01EE42, 0x0004},
-{0x01EE43, 0x0080},
+{0x01EE43, 0x0001},
 {0x01EE47, 0x0004},
-{0x01EE48, 0x0080},
+{0x01EE48, 0x0001},
 {0x01EE49, 0x0004},
-{0x01EE4A, 0x0080},
+{0x01EE4A, 0x0001},
 {0x01EE4B, 0x0004},
-{0x01EE4C, 0x0080},
+{0x01EE4C, 0x0001},
 {0x01EE4D, 0x0004},
-{0x01EE50, 0x0080},
+{0x01EE50, 0x0001},
 {0x01EE51, 0x0004},
-{0x01EE53, 0x0080},
+{0x01EE53, 0x0001},
 {0x01EE54, 0x0004},
-{0x01EE55, 0x0080},
+{0x01EE55, 0x0001},
 {0x01EE57, 0x0004},
-{0x01EE58, 0x0080},
+{0x01EE58, 0x0001},
 {0x01EE59, 0x0004},
-{0x01EE5A, 0x0080},
+{0x01EE5A, 0x0001},
 {0x01EE5B, 0x0004},
-{0x01EE5C, 0x0080},
+{0x01EE5C, 0x0001},
 {0x01EE5D, 0x0004},
-{0x01EE5E, 0x0080},
+{0x01EE5E, 0x0001},
 {0x01EE5F, 0x0004},
-{0x01EE60, 0x0080},
+{0x01EE60, 0x0001},
 {0x01EE61, 0x0004},
-{0x01EE63, 0x0080},
+{0x01EE63, 0x0001},
 {0x01EE64, 0x0004},
-{0x01EE65, 0x0080},
+{0x01EE65, 0x0001},
 {0x01EE67, 0x0004},
-{0x01EE6B, 0x0080},
+{0x01EE6B, 0x0001},
 {0x01EE6C, 0x0004},
-{0x01EE73, 0x0080},
+{0x01EE73, 0x0001},
 {0x01EE74, 0x0004},
-{0x01EE78, 0x0080},
+{0x01EE78, 0x0001},
 {0x01EE79, 0x0004},
-{0x01EE7D, 0x0080},
+{0x01EE7D, 0x0001},
 {0x01EE7E, 0x0004},
-{0x01EE7F, 0x0080},
+{0x01EE7F, 0x0001},
 {0x01EE80, 0x0004},
-{0x01EE8A, 0x0080},
+{0x01EE8A, 0x0001},
 {0x01EE8B, 0x0004},
-{0x01EE9C, 0x0080},
+{0x01EE9C, 0x0001},
 {0x01EEA1, 0x0004},
-{0x01EEA4, 0x0080},
+{0x01EEA4, 0x0001},
 {0x01EEA5, 0x0004},
-{0x01EEAA, 0x0080},
+{0x01EEAA, 0x0001},
 {0x01EEAB, 0x0004},
-{0x01EEBC, 0x0080},
+{0x01EEBC, 0x0001},
 {0x01EEF0, 0x0040},
-{0x01EEF2, 0x0080},
+{0x01EEF2, 0x0001},
 {0x01F000, 0x0040},
-{0x01F02C, 0x0080},
+{0x01F02C, 0x0001},
 {0x01F030, 0x0040},
-{0x01F094, 0x0080},
+{0x01F094, 0x0001},
 {0x01F0A0, 0x0040},
-{0x01F0AF, 0x0080},
+{0x01F0AF, 0x0001},
 {0x01F0B1, 0x0040},
-{0x01F0C0, 0x0080},
+{0x01F0C0, 0x0001},
 {0x01F0C1, 0x0040},
-{0x01F0D0, 0x0080},
+{0x01F0D0, 0x0001},
 {0x01F0D1, 0x0040},
-{0x01F0F6, 0x0080},
+{0x01F0F6, 0x0001},
 {0x01F100, 0x0002},
 {0x01F10D, 0x0040},
-{0x01F1AE, 0x0080},
+{0x01F1AE, 0x0001},
 {0x01F1E6, 0x0040},
-{0x01F203, 0x0080},
+{0x01F203, 0x0001},
 {0x01F210, 0x0040},
-{0x01F23C, 0x0080},
+{0x01F23C, 0x0001},
 {0x01F240, 0x0040},
-{0x01F249, 0x0080},
+{0x01F249, 0x0001},
 {0x01F250, 0x0040},
-{0x01F252, 0x0080},
+{0x01F252, 0x0001},
 {0x01F260, 0x0040},
-{0x01F266, 0x0080},
+{0x01F266, 0x0001},
 {0x01F300, 0x0040},
-{0x01F6D8, 0x0080},
+{0x01F6D8, 0x0001},
 {0x01F6DC, 0x0040},
-{0x01F6ED, 0x0080},
+{0x01F6ED, 0x0001},
 {0x01F6F0, 0x0040},
-{0x01F6FD, 0x0080},
+{0x01F6FD, 0x0001},
 {0x01F700, 0x0040},
-{0x01F777, 0x0080},
+{0x01F777, 0x0001},
 {0x01F77B, 0x0040},
-{0x01F7DA, 0x0080},
+{0x01F7DA, 0x0001},
 {0x01F7E0, 0x0040},
-{0x01F7EC, 0x0080},
+{0x01F7EC, 0x0001},
 {0x01F7F0, 0x0040},
-{0x01F7F1, 0x0080},
+{0x01F7F1, 0x0001},
 {0x01F800, 0x0040},
-{0x01F80C, 0x0080},
+{0x01F80C, 0x0001},
 {0x01F810, 0x0040},
-{0x01F848, 0x0080},
+{0x01F848, 0x0001},
 {0x01F850, 0x0040},
-{0x01F85A, 0x0080},
+{0x01F85A, 0x0001},
 {0x01F860, 0x0040},
-{0x01F888, 0x0080},
+{0x01F888, 0x0001},
 {0x01F890, 0x0040},
-{0x01F8AE, 0x0080},
+{0x01F8AE, 0x0001},
 {0x01F8B0, 0x0040},
-{0x01F8B2, 0x0080},
+{0x01F8B2, 0x0001},
 {0x01F900, 0x0040},
-{0x01FA54, 0x0080},
+{0x01FA54, 0x0001},
 {0x01FA60, 0x0040},
-{0x01FA6E, 0x0080},
+{0x01FA6E, 0x0001},
 {0x01FA70, 0x0040},
-{0x01FA7D, 0x0080},
+{0x01FA7D, 0x0001},
 {0x01FA80, 0x0040},
-{0x01FA89, 0x0080},
+{0x01FA89, 0x0001},
 {0x01FA90, 0x0040},
-{0x01FABE, 0x0080},
+{0x01FABE, 0x0001},
 {0x01FABF, 0x0040},
-{0x01FAC6, 0x0080},
+{0x01FAC6, 0x0001},
 {0x01FACE, 0x0040},
-{0x01FADC, 0x0080},
+{0x01FADC, 0x0001},
 {0x01FAE0, 0x0040},
-{0x01FAE9, 0x0080},
+{0x01FAE9, 0x0001},
 {0x01FAF0, 0x0040},
-{0x01FAF9, 0x0080},
+{0x01FAF9, 0x0001},
 {0x01FB00, 0x0040},
-{0x01FB93, 0x0080},
+{0x01FB93, 0x0001},
 {0x01FB94, 0x0040},
-{0x01FBCB, 0x0080},
+{0x01FBCB, 0x0001},
 {0x01FBF0, 0x0002},
-{0x01FBFA, 0x0080},
+{0x01FBFA, 0x0001},
 {0x020000, 0x0004},
-{0x02A6E0, 0x0080},
+{0x02A6E0, 0x0001},
 {0x02A700, 0x0004},
-{0x02B73A, 0x0080},
+{0x02B73A, 0x0001},
 {0x02B740, 0x0004},
-{0x02B81E, 0x0080},
+{0x02B81E, 0x0001},
 {0x02B820, 0x0004},
-{0x02CEA2, 0x0080},
+{0x02CEA2, 0x0001},
 {0x02CEB0, 0x0004},
-{0x02EBE1, 0x0080},
+{0x02EBE1, 0x0001},
 {0x02EBF0, 0x0004},
-{0x02EE5E, 0x0080},
+{0x02EE5E, 0x0001},
 {0x02F800, 0x0004},
-{0x02FA1E, 0x0080},
+{0x02FA1E, 0x0001},
 {0x030000, 0x0004},
-{0x03134B, 0x0080},
+{0x03134B, 0x0001},
 {0x031350, 0x0004},
-{0x0323B0, 0x0080},
+{0x0323B0, 0x0001},
+{0x0E0001, 0x0080},
+{0x0E0002, 0x0001},
+{0x0E0020, 0x0080},
+{0x0E0080, 0x0001},
 {0x0E0100, 0x0010},
-{0x0E01F0, 0x0080},
+{0x0E01F0, 0x0001},
+{0x0F0000, 0x0080},
+{0x0FFFFE, 0x0001},
+{0x100000, 0x0080},
+{0x10FFFE, 0x0001},
 {0x110000, 0x0000},
 };
 
 const std::unordered_set<uint32_t> unicode_set_whitespace = {
-0x000009, 0x00000A, 0x00000B, 0x00000C, 0x00000D, 0x000020, 0x000085, 0x0000A0, 0x001680, 0x002000, 0x002001, 0x002002, 0x002003, 0x002004, 0x002005, 0x002006, 0x002007, 0x002008, 0x002009, 0x00200A, 0x002028, 0x002029, 0x00202F, 0x00205F, 0x003000
+0x000009,
+0x00000A,
+0x00000B,
+0x00000C,
+0x00000D,
+0x000020,
+0x000085,
+0x0000A0,
+0x001680,
+0x002000,
+0x002001,
+0x002002,
+0x002003,
+0x002004,
+0x002005,
+0x002006,
+0x002007,
+0x002008,
+0x002009,
+0x00200A,
+0x002028,
+0x002029,
+0x00202F,
+0x00205F,
+0x003000,
 };
 
 const std::unordered_map<uint32_t, uint32_t> unicode_map_lowercase = {
@@ -3222,6 +3267,7 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_lowercase = {
 {0x002C2C, 0x002C5C},
 {0x002C2D, 0x002C5D},
 {0x002C2E, 0x002C5E},
+{0x002C2F, 0x002C5F},
 {0x002C60, 0x002C61},
 {0x002C62, 0x00026B},
 {0x002C63, 0x001D7D},
@@ -3402,12 +3448,16 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_lowercase = {
 {0x00A7BA, 0x00A7BB},
 {0x00A7BC, 0x00A7BD},
 {0x00A7BE, 0x00A7BF},
+{0x00A7C0, 0x00A7C1},
 {0x00A7C2, 0x00A7C3},
 {0x00A7C4, 0x00A794},
 {0x00A7C5, 0x000282},
 {0x00A7C6, 0x001D8E},
 {0x00A7C7, 0x00A7C8},
 {0x00A7C9, 0x00A7CA},
+{0x00A7D0, 0x00A7D1},
+{0x00A7D6, 0x00A7D7},
+{0x00A7D8, 0x00A7D9},
 {0x00A7F5, 0x00A7F6},
 {0x00FF21, 0x00FF41},
 {0x00FF22, 0x00FF42},
@@ -3511,6 +3561,41 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_lowercase = {
 {0x0104D1, 0x0104F9},
 {0x0104D2, 0x0104FA},
 {0x0104D3, 0x0104FB},
+{0x010570, 0x010597},
+{0x010571, 0x010598},
+{0x010572, 0x010599},
+{0x010573, 0x01059A},
+{0x010574, 0x01059B},
+{0x010575, 0x01059C},
+{0x010576, 0x01059D},
+{0x010577, 0x01059E},
+{0x010578, 0x01059F},
+{0x010579, 0x0105A0},
+{0x01057A, 0x0105A1},
+{0x01057C, 0x0105A3},
+{0x01057D, 0x0105A4},
+{0x01057E, 0x0105A5},
+{0x01057F, 0x0105A6},
+{0x010580, 0x0105A7},
+{0x010581, 0x0105A8},
+{0x010582, 0x0105A9},
+{0x010583, 0x0105AA},
+{0x010584, 0x0105AB},
+{0x010585, 0x0105AC},
+{0x010586, 0x0105AD},
+{0x010587, 0x0105AE},
+{0x010588, 0x0105AF},
+{0x010589, 0x0105B0},
+{0x01058A, 0x0105B1},
+{0x01058C, 0x0105B3},
+{0x01058D, 0x0105B4},
+{0x01058E, 0x0105B5},
+{0x01058F, 0x0105B6},
+{0x010590, 0x0105B7},
+{0x010591, 0x0105B8},
+{0x010592, 0x0105B9},
+{0x010594, 0x0105BB},
+{0x010595, 0x0105BC},
 {0x010C80, 0x010CC0},
 {0x010C81, 0x010CC1},
 {0x010C82, 0x010CC2},
@@ -3690,7 +3775,6 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x000079, 0x000059},
 {0x00007A, 0x00005A},
 {0x0000B5, 0x00039C},
-{0x0000DF, 0x000053},
 {0x0000E0, 0x0000C0},
 {0x0000E1, 0x0000C1},
 {0x0000E2, 0x0000C2},
@@ -3758,7 +3842,6 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x000144, 0x000143},
 {0x000146, 0x000145},
 {0x000148, 0x000147},
-{0x000149, 0x0002BC},
 {0x00014B, 0x00014A},
 {0x00014D, 0x00014C},
 {0x00014F, 0x00014E},
@@ -3831,7 +3914,6 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x0001EB, 0x0001EA},
 {0x0001ED, 0x0001EC},
 {0x0001EF, 0x0001EE},
-{0x0001F0, 0x00004A},
 {0x0001F2, 0x0001F1},
 {0x0001F3, 0x0001F1},
 {0x0001F5, 0x0001F4},
@@ -3917,12 +3999,10 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x00037B, 0x0003FD},
 {0x00037C, 0x0003FE},
 {0x00037D, 0x0003FF},
-{0x000390, 0x000399},
 {0x0003AC, 0x000386},
 {0x0003AD, 0x000388},
 {0x0003AE, 0x000389},
 {0x0003AF, 0x00038A},
-{0x0003B0, 0x0003A5},
 {0x0003B1, 0x000391},
 {0x0003B2, 0x000392},
 {0x0003B3, 0x000393},
@@ -4163,7 +4243,6 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x000584, 0x000554},
 {0x000585, 0x000555},
 {0x000586, 0x000556},
-{0x000587, 0x000535},
 {0x0010D0, 0x001C90},
 {0x0010D1, 0x001C91},
 {0x0010D2, 0x001C92},
@@ -4303,11 +4382,6 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x001E91, 0x001E90},
 {0x001E93, 0x001E92},
 {0x001E95, 0x001E94},
-{0x001E96, 0x000048},
-{0x001E97, 0x000054},
-{0x001E98, 0x000057},
-{0x001E99, 0x000059},
-{0x001E9A, 0x000041},
 {0x001E9B, 0x001E60},
 {0x001EA1, 0x001EA0},
 {0x001EA3, 0x001EA2},
@@ -4393,13 +4467,9 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x001F43, 0x001F4B},
 {0x001F44, 0x001F4C},
 {0x001F45, 0x001F4D},
-{0x001F50, 0x0003A5},
 {0x001F51, 0x001F59},
-{0x001F52, 0x0003A5},
 {0x001F53, 0x001F5B},
-{0x001F54, 0x0003A5},
 {0x001F55, 0x001F5D},
-{0x001F56, 0x0003A5},
 {0x001F57, 0x001F5F},
 {0x001F60, 0x001F68},
 {0x001F61, 0x001F69},
@@ -4423,89 +4493,41 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x001F7B, 0x001FEB},
 {0x001F7C, 0x001FFA},
 {0x001F7D, 0x001FFB},
-{0x001F80, 0x001F08},
-{0x001F81, 0x001F09},
-{0x001F82, 0x001F0A},
-{0x001F83, 0x001F0B},
-{0x001F84, 0x001F0C},
-{0x001F85, 0x001F0D},
-{0x001F86, 0x001F0E},
-{0x001F87, 0x001F0F},
-{0x001F88, 0x001F08},
-{0x001F89, 0x001F09},
-{0x001F8A, 0x001F0A},
-{0x001F8B, 0x001F0B},
-{0x001F8C, 0x001F0C},
-{0x001F8D, 0x001F0D},
-{0x001F8E, 0x001F0E},
-{0x001F8F, 0x001F0F},
-{0x001F90, 0x001F28},
-{0x001F91, 0x001F29},
-{0x001F92, 0x001F2A},
-{0x001F93, 0x001F2B},
-{0x001F94, 0x001F2C},
-{0x001F95, 0x001F2D},
-{0x001F96, 0x001F2E},
-{0x001F97, 0x001F2F},
-{0x001F98, 0x001F28},
-{0x001F99, 0x001F29},
-{0x001F9A, 0x001F2A},
-{0x001F9B, 0x001F2B},
-{0x001F9C, 0x001F2C},
-{0x001F9D, 0x001F2D},
-{0x001F9E, 0x001F2E},
-{0x001F9F, 0x001F2F},
-{0x001FA0, 0x001F68},
-{0x001FA1, 0x001F69},
-{0x001FA2, 0x001F6A},
-{0x001FA3, 0x001F6B},
-{0x001FA4, 0x001F6C},
-{0x001FA5, 0x001F6D},
-{0x001FA6, 0x001F6E},
-{0x001FA7, 0x001F6F},
-{0x001FA8, 0x001F68},
-{0x001FA9, 0x001F69},
-{0x001FAA, 0x001F6A},
-{0x001FAB, 0x001F6B},
-{0x001FAC, 0x001F6C},
-{0x001FAD, 0x001F6D},
-{0x001FAE, 0x001F6E},
-{0x001FAF, 0x001F6F},
+{0x001F80, 0x001F88},
+{0x001F81, 0x001F89},
+{0x001F82, 0x001F8A},
+{0x001F83, 0x001F8B},
+{0x001F84, 0x001F8C},
+{0x001F85, 0x001F8D},
+{0x001F86, 0x001F8E},
+{0x001F87, 0x001F8F},
+{0x001F90, 0x001F98},
+{0x001F91, 0x001F99},
+{0x001F92, 0x001F9A},
+{0x001F93, 0x001F9B},
+{0x001F94, 0x001F9C},
+{0x001F95, 0x001F9D},
+{0x001F96, 0x001F9E},
+{0x001F97, 0x001F9F},
+{0x001FA0, 0x001FA8},
+{0x001FA1, 0x001FA9},
+{0x001FA2, 0x001FAA},
+{0x001FA3, 0x001FAB},
+{0x001FA4, 0x001FAC},
+{0x001FA5, 0x001FAD},
+{0x001FA6, 0x001FAE},
+{0x001FA7, 0x001FAF},
 {0x001FB0, 0x001FB8},
 {0x001FB1, 0x001FB9},
-{0x001FB2, 0x001FBA},
-{0x001FB3, 0x000391},
-{0x001FB4, 0x000386},
-{0x001FB6, 0x000391},
-{0x001FB7, 0x000391},
-{0x001FBC, 0x000391},
+{0x001FB3, 0x001FBC},
 {0x001FBE, 0x000399},
-{0x001FC2, 0x001FCA},
-{0x001FC3, 0x000397},
-{0x001FC4, 0x000389},
-{0x001FC6, 0x000397},
-{0x001FC7, 0x000397},
-{0x001FCC, 0x000397},
+{0x001FC3, 0x001FCC},
 {0x001FD0, 0x001FD8},
 {0x001FD1, 0x001FD9},
-{0x001FD2, 0x000399},
-{0x001FD3, 0x000399},
-{0x001FD6, 0x000399},
-{0x001FD7, 0x000399},
 {0x001FE0, 0x001FE8},
 {0x001FE1, 0x001FE9},
-{0x001FE2, 0x0003A5},
-{0x001FE3, 0x0003A5},
-{0x001FE4, 0x0003A1},
 {0x001FE5, 0x001FEC},
-{0x001FE6, 0x0003A5},
-{0x001FE7, 0x0003A5},
-{0x001FF2, 0x001FFA},
-{0x001FF3, 0x0003A9},
-{0x001FF4, 0x00038F},
-{0x001FF6, 0x0003A9},
-{0x001FF7, 0x0003A9},
-{0x001FFC, 0x0003A9},
+{0x001FF3, 0x001FFC},
 {0x00214E, 0x002132},
 {0x002170, 0x002160},
 {0x002171, 0x002161},
@@ -4597,6 +4619,7 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x002C5C, 0x002C2C},
 {0x002C5D, 0x002C2D},
 {0x002C5E, 0x002C2E},
+{0x002C5F, 0x002C2F},
 {0x002C61, 0x002C60},
 {0x002C65, 0x00023A},
 {0x002C66, 0x00023E},
@@ -4800,9 +4823,13 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x00A7BB, 0x00A7BA},
 {0x00A7BD, 0x00A7BC},
 {0x00A7BF, 0x00A7BE},
+{0x00A7C1, 0x00A7C0},
 {0x00A7C3, 0x00A7C2},
 {0x00A7C8, 0x00A7C7},
 {0x00A7CA, 0x00A7C9},
+{0x00A7D1, 0x00A7D0},
+{0x00A7D7, 0x00A7D6},
+{0x00A7D9, 0x00A7D8},
 {0x00A7F6, 0x00A7F5},
 {0x00AB53, 0x00A7B3},
 {0x00AB70, 0x0013A0},
@@ -4885,18 +4912,6 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x00ABBD, 0x0013ED},
 {0x00ABBE, 0x0013EE},
 {0x00ABBF, 0x0013EF},
-{0x00FB00, 0x000046},
-{0x00FB01, 0x000046},
-{0x00FB02, 0x000046},
-{0x00FB03, 0x000046},
-{0x00FB04, 0x000046},
-{0x00FB05, 0x000053},
-{0x00FB06, 0x000053},
-{0x00FB13, 0x000544},
-{0x00FB14, 0x000544},
-{0x00FB15, 0x000544},
-{0x00FB16, 0x00054E},
-{0x00FB17, 0x000544},
 {0x00FF41, 0x00FF21},
 {0x00FF42, 0x00FF22},
 {0x00FF43, 0x00FF23},
@@ -4999,6 +5014,41 @@ const std::unordered_map<uint32_t, uint32_t> unicode_map_uppercase = {
 {0x0104F9, 0x0104D1},
 {0x0104FA, 0x0104D2},
 {0x0104FB, 0x0104D3},
+{0x010597, 0x010570},
+{0x010598, 0x010571},
+{0x010599, 0x010572},
+{0x01059A, 0x010573},
+{0x01059B, 0x010574},
+{0x01059C, 0x010575},
+{0x01059D, 0x010576},
+{0x01059E, 0x010577},
+{0x01059F, 0x010578},
+{0x0105A0, 0x010579},
+{0x0105A1, 0x01057A},
+{0x0105A3, 0x01057C},
+{0x0105A4, 0x01057D},
+{0x0105A5, 0x01057E},
+{0x0105A6, 0x01057F},
+{0x0105A7, 0x010580},
+{0x0105A8, 0x010581},
+{0x0105A9, 0x010582},
+{0x0105AA, 0x010583},
+{0x0105AB, 0x010584},
+{0x0105AC, 0x010585},
+{0x0105AD, 0x010586},
+{0x0105AE, 0x010587},
+{0x0105AF, 0x010588},
+{0x0105B0, 0x010589},
+{0x0105B1, 0x01058A},
+{0x0105B3, 0x01058C},
+{0x0105B4, 0x01058D},
+{0x0105B5, 0x01058E},
+{0x0105B6, 0x01058F},
+{0x0105B7, 0x010590},
+{0x0105B8, 0x010591},
+{0x0105B9, 0x010592},
+{0x0105BB, 0x010594},
+{0x0105BC, 0x010595},
 {0x010CC0, 0x010C80},
 {0x010CC1, 0x010C81},
 {0x010CC2, 0x010C82},
index 2f8d73832d107eca81e87600cdb50dd1dbeb10e1..c0b76bf20aedef4a9d3385d39e7ecb7ed84351a5 100644 (file)
@@ -226,8 +226,9 @@ static std::vector<size_t> unicode_regex_split_custom_gpt2(const std::string & t
         assert(offset_end <= cpts.size());
         start = offset_end;
 
+        static const uint32_t OUT_OF_RANGE = 0xFFFFFFFF;
         auto _get_cpt = [&] (const size_t pos) -> uint32_t {
-            return (offset_ini <= pos && pos < offset_end) ? cpts[pos] : 0;
+            return (offset_ini <= pos && pos < offset_end) ? cpts[pos] : OUT_OF_RANGE;
         };
 
         auto _get_flags = [&] (const size_t pos) -> codepoint_flags {
@@ -309,7 +310,7 @@ static std::vector<size_t> unicode_regex_split_custom_gpt2(const std::string & t
             }
 
             // regex: \s+(?!\S)
-            if (num_whitespaces > 1 && _get_cpt(pos+num_whitespaces) != 0) {
+            if (num_whitespaces > 1 && _get_cpt(pos+num_whitespaces) != OUT_OF_RANGE) {
                 pos += num_whitespaces - 1;
                 _add_token(pos);
                 continue;
@@ -344,8 +345,9 @@ static std::vector<size_t> unicode_regex_split_custom_llama3(const std::string &
         assert(offset_end <= cpts.size());
         start = offset_end;
 
+        static const uint32_t OUT_OF_RANGE = 0xFFFFFFFF;
         auto _get_cpt = [&] (const size_t pos) -> uint32_t {
-            return (offset_ini <= pos && pos < offset_end) ? cpts[pos] : 0;
+            return (offset_ini <= pos && pos < offset_end) ? cpts[pos] : OUT_OF_RANGE;
         };
 
         auto _get_flags = [&] (const size_t pos) -> codepoint_flags {
@@ -450,7 +452,7 @@ static std::vector<size_t> unicode_regex_split_custom_llama3(const std::string &
             }
 
             // regex: \s+(?!\S)
-            if (num_whitespaces > 1 && _get_cpt(pos+num_whitespaces) != 0) {
+            if (num_whitespaces > 1 && _get_cpt(pos+num_whitespaces) != OUT_OF_RANGE) {
                 pos += num_whitespaces - 1;
                 _add_token(pos);
                 continue;
@@ -594,6 +596,7 @@ std::vector<uint32_t> unicode_cpts_normalize_nfd(const std::vector<uint32_t> & c
 
 std::vector<uint32_t> unicode_cpts_from_utf8(const std::string & utf8) {
     std::vector<uint32_t> result;
+    result.reserve(utf8.size());
     size_t offset = 0;
     while (offset < utf8.size()) {
         result.push_back(unicode_cpt_from_utf8(utf8, offset));
@@ -679,10 +682,14 @@ std::vector<std::string> unicode_regex_split(const std::string & text, const std
                 continue;
             }
 
-            const int cpt_flag = unicode_cpt_flags(cpts[i]).category_flag();
+            const auto flags = unicode_cpt_flags(cpts[i]);
 
-            if (k_ucat_cpt.find(cpt_flag) != k_ucat_cpt.end()) {
-                text_collapsed[i] = k_ucat_cpt.at(cpt_flag);
+            if (flags.is_whitespace) {
+                //NOTE: C++ std::regex \s does not mach 0x85, Rust and Python regex does.
+                //text_collapsed[i] = (char) 0x85;  // <Next Line> as whitespace fallback
+                text_collapsed[i] = (char) 0x0B;    // <vertical tab> as whitespace fallback
+            } else if (k_ucat_cpt.find(flags.category_flag()) != k_ucat_cpt.end()) {
+                text_collapsed[i] = k_ucat_cpt.at(flags.category_flag());
             } else {
                 text_collapsed[i] = (char) 0xD0; // fallback
             }
@@ -766,9 +773,16 @@ std::vector<std::string> unicode_regex_split(const std::string & text, const std
                 bpe_offsets = unicode_regex_split_stl(text_collapsed, regex_expr_collapsed, bpe_offsets);
             } else {
                 // no unicode category used, we can use std::wregex directly
-                const std::wstring wtext       = unicode_wstring_from_utf8(text);
                 const std::wstring wregex_expr = unicode_wstring_from_utf8(regex_expr);
 
+                // std::wregex \s does not mach non-ASCII whitespaces, using 0x0B as fallback
+                std::wstring wtext(cpts.begin(), cpts.end());
+                for (size_t i = 0; i < wtext.size(); ++i) {
+                    if (wtext[i] > 0x7F && unicode_cpt_flags(wtext[i]).is_whitespace) {
+                        wtext[i] = 0x0B;
+                    }
+                }
+
                 //printf("text: %s\n", text.c_str());
                 //printf("regex_expr: %s\n", regex_expr.c_str());
                 bpe_offsets = unicode_regex_split_stl(wtext, wregex_expr, bpe_offsets);
index feb3a7523acb63de2f7fc9e1da20601f85a0981e..43ca8fa04f9abb7d26bb4b629f10c47fbc242516 100644 (file)
@@ -72,7 +72,7 @@ struct gpt2_model {
 };
 
 // load the model's weights from a file
-bool gpt2_model_load(const std::string & fname, gpt2_model & model, gpt_vocab & vocab) {
+static bool gpt2_model_load(const std::string & fname, gpt2_model & model, gpt_vocab & vocab) {
     printf("%s: loading model from '%s'\n", __func__, fname.c_str());
 
     auto fin = std::ifstream(fname, std::ios::binary);
@@ -380,7 +380,7 @@ bool gpt2_model_load(const std::string & fname, gpt2_model & model, gpt_vocab &
 //   - embd_w:    the predicted logits for the next token
 //
 // TODO: sync latest version from ggml repo
-bool gpt2_eval(
+static bool gpt2_eval(
         const gpt2_model & model,
         const int n_threads,
         const int n_past,
index b34fad6c2bb55504cbc4e44e9ec52510d4cbe14a..428f38b7898c17a8f94143d0e7bccb1f005baa1c 100644 (file)
@@ -44,7 +44,7 @@ struct whisper_params {
 
 void whisper_print_usage(int argc, char ** argv, const whisper_params & params);
 
-bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
+static bool whisper_params_parse(int argc, char ** argv, whisper_params & params) {
     for (int i = 1; i < argc; i++) {
         std::string arg = argv[i];
 
@@ -109,7 +109,7 @@ void whisper_print_usage(int /*argc*/, char ** argv, const whisper_params & para
     fprintf(stderr, "\n");
 }
 
-std::string transcribe(whisper_context * ctx, const whisper_params & params, const std::vector<float> & pcmf32, float & prob, int64_t & t_ms) {
+static std::string transcribe(whisper_context * ctx, const whisper_params & params, const std::vector<float> & pcmf32, float & prob, int64_t & t_ms) {
     const auto t_start = std::chrono::high_resolution_clock::now();
 
     prob = 0.0f;
index 668cd4a72bb30d9e0e36a98cfb61c710ed024685..c53672e432360c36524825d7ab492c9a55305a19 100644 (file)
@@ -5,15 +5,14 @@ project(whisper.cpp)
 set(CMAKE_CXX_STANDARD 11)
 set(WHISPER_LIB_DIR ${CMAKE_SOURCE_DIR}/../../../../../../../)
 
-set(
-        SOURCE_FILES
-        ${WHISPER_LIB_DIR}/ggml.c
-        ${WHISPER_LIB_DIR}/ggml-alloc.c
-        ${WHISPER_LIB_DIR}/ggml-backend.c
-        ${WHISPER_LIB_DIR}/ggml-quants.c
-        ${WHISPER_LIB_DIR}/whisper.cpp
-        ${CMAKE_SOURCE_DIR}/jni.c
-)
+set(SOURCE_FILES
+    ${WHISPER_LIB_DIR}/ggml/src/ggml.c
+    ${WHISPER_LIB_DIR}/ggml/src/ggml-alloc.c
+    ${WHISPER_LIB_DIR}/ggml/src/ggml-backend.c
+    ${WHISPER_LIB_DIR}/ggml/src/ggml-quants.c
+    ${WHISPER_LIB_DIR}/src/whisper.cpp
+    ${CMAKE_SOURCE_DIR}/jni.c
+    )
 
 find_library(LOG_LIB log)
 
@@ -41,7 +40,6 @@ function(build_library target_name)
         #target_link_options(${target_name} PRIVATE -Wl,--gc-sections)
         #target_link_options(${target_name} PRIVATE -Wl,--exclude-libs,ALL)
         #target_link_options(${target_name} PRIVATE -flto)
-
     endif ()
 endfunction()
 
@@ -54,3 +52,7 @@ elseif (${ANDROID_ABI} STREQUAL "armeabi-v7a")
 endif ()
 
 include_directories(${WHISPER_LIB_DIR})
+include_directories(${WHISPER_LIB_DIR}/src)
+include_directories(${WHISPER_LIB_DIR}/include)
+include_directories(${WHISPER_LIB_DIR}/ggml/include)
+include_directories(${WHISPER_LIB_DIR}/ggml/src)
index faaa7b662cf0bb79f664f7683280421794369f0b..cb8c88112f8da13cee5f806f46f7c55907c2c590 100644 (file)
@@ -10,7 +10,7 @@ option(GGML_HOME       "whisper: Path to external GGML source" OFF)
 
 set(
     SOURCE_FILES
-    ${WHISPER_LIB_DIR}/whisper.cpp
+    ${WHISPER_LIB_DIR}/src/whisper.cpp
     ${CMAKE_SOURCE_DIR}/jni.c
     )
 
@@ -18,10 +18,10 @@ if (NOT GGML_HOME)
     set(
         SOURCE_FILES
         ${SOURCE_FILES}
-        ${WHISPER_LIB_DIR}/ggml.c
-        ${WHISPER_LIB_DIR}/ggml-alloc.c
-        ${WHISPER_LIB_DIR}/ggml-backend.c
-        ${WHISPER_LIB_DIR}/ggml-quants.c
+        ${WHISPER_LIB_DIR}/ggml/src/ggml.c
+        ${WHISPER_LIB_DIR}/ggml/src/ggml-alloc.c
+        ${WHISPER_LIB_DIR}/ggml/src/ggml-backend.c
+        ${WHISPER_LIB_DIR}/ggml/src/ggml-quants.c
         )
 endif()
 
@@ -75,3 +75,7 @@ endif ()
 build_library("whisper") # Default target
 
 include_directories(${WHISPER_LIB_DIR})
+include_directories(${WHISPER_LIB_DIR}/src)
+include_directories(${WHISPER_LIB_DIR}/include)
+include_directories(${WHISPER_LIB_DIR}/ggml/include)
+include_directories(${WHISPER_LIB_DIR}/ggml/src)
index fd884cf379fdfd719ecff7fc8c8e0638ce9aeabc..044e9fc072fec30a5640e30d27e7006c1ad88541 100644 (file)
@@ -9,7 +9,6 @@
 /* Begin PBXBuildFile section */
                1844471A2AB211A2007D6BFE /* ggml-alloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 184447182AB211A2007D6BFE /* ggml-alloc.c */; };
                1844471C2AB21655007D6BFE /* ggml-metal.m in Sources */ = {isa = PBXBuildFile; fileRef = 1844471B2AB21655007D6BFE /* ggml-metal.m */; settings = {COMPILER_FLAGS = "-framework Foundation -framework Metal -framework MetalKit -fno-objc-arc"; }; };
-               184447212AB21B43007D6BFE /* ggml-metal.metal in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1844471D2AB2195F007D6BFE /* ggml-metal.metal */; };
                18627C7B29052BDF00BD2A04 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 18627C7A29052BDF00BD2A04 /* AppDelegate.m */; };
                18627C7E29052BDF00BD2A04 /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 18627C7D29052BDF00BD2A04 /* SceneDelegate.m */; };
                18627C8129052BDF00BD2A04 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18627C8029052BDF00BD2A04 /* ViewController.m */; };
@@ -20,6 +19,8 @@
                18627C9429052C4900BD2A04 /* whisper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18627C9329052C4900BD2A04 /* whisper.cpp */; settings = {COMPILER_FLAGS = "-DWHISPER_USE_COREML -DWHISPER_COREML_ALLOW_FALLBACK -DGGML_USE_METAL"; }; };
                18627C9629052C5800BD2A04 /* ggml.c in Sources */ = {isa = PBXBuildFile; fileRef = 18627C9529052C5800BD2A04 /* ggml.c */; settings = {COMPILER_FLAGS = "-DGGML_USE_ACCELERATE -DGGML_USE_METAL"; }; };
                18627C9B29052CFF00BD2A04 /* ggml-base.en.bin in Resources */ = {isa = PBXBuildFile; fileRef = 18627C9A29052CFF00BD2A04 /* ggml-base.en.bin */; };
+               18A276062C2A98A5001C8D37 /* ggml-metal.metal in Copy Files */ = {isa = PBXBuildFile; fileRef = 1844471D2AB2195F007D6BFE /* ggml-metal.metal */; };
+               18A2760B2C2A9B43001C8D37 /* ggml-metal.metal in Resources */ = {isa = PBXBuildFile; fileRef = 1844471D2AB2195F007D6BFE /* ggml-metal.metal */; };
                18ABE15A2AF556340044A204 /* ggml-backend.c in Sources */ = {isa = PBXBuildFile; fileRef = 18ABE1572AF556340044A204 /* ggml-backend.c */; };
                18ABE15B2AF556340044A204 /* ggml-quants.c in Sources */ = {isa = PBXBuildFile; fileRef = 18ABE1592AF556340044A204 /* ggml-quants.c */; };
                7FE3424B2A0C3FA20015A058 /* whisper-encoder-impl.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FE342452A0C3FA20015A058 /* whisper-encoder-impl.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
-               184447202AB21B25007D6BFE /* CopyFiles */ = {
+               184447202AB21B25007D6BFE /* Copy Files */ = {
                        isa = PBXCopyFilesBuildPhase;
                        buildActionMask = 2147483647;
                        dstPath = "";
                        dstSubfolderSpec = 7;
                        files = (
-                               184447212AB21B43007D6BFE /* ggml-metal.metal in CopyFiles */,
+                               18A276062C2A98A5001C8D37 /* ggml-metal.metal in Copy Files */,
                        );
+                       name = "Copy Files";
                        runOnlyForDeploymentPostprocessing = 0;
                };
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
-               184447182AB211A2007D6BFE /* ggml-alloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ggml-alloc.c"; path = "../../../ggml-alloc.c"; sourceTree = "<group>"; };
-               184447192AB211A2007D6BFE /* ggml-alloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-alloc.h"; path = "../../../ggml-alloc.h"; sourceTree = "<group>"; };
-               1844471B2AB21655007D6BFE /* ggml-metal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "ggml-metal.m"; path = "../../../ggml-metal.m"; sourceTree = "<group>"; };
-               1844471D2AB2195F007D6BFE /* ggml-metal.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; name = "ggml-metal.metal"; path = "../../../ggml-metal.metal"; sourceTree = "<group>"; };
+               184447182AB211A2007D6BFE /* ggml-alloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ggml-alloc.c"; path = "../../../ggml/src/ggml-alloc.c"; sourceTree = "<group>"; };
+               184447192AB211A2007D6BFE /* ggml-alloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-alloc.h"; path = "../../../ggml/include/ggml-alloc.h"; sourceTree = "<group>"; };
+               1844471B2AB21655007D6BFE /* ggml-metal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "ggml-metal.m"; path = "../../../ggml/src/ggml-metal.m"; sourceTree = "<group>"; };
+               1844471D2AB2195F007D6BFE /* ggml-metal.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; name = "ggml-metal.metal"; path = "../../../ggml/src/ggml-metal.metal"; sourceTree = "<group>"; };
                18627C7629052BDF00BD2A04 /* whisper.objc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = whisper.objc.app; sourceTree = BUILT_PRODUCTS_DIR; };
                18627C7929052BDF00BD2A04 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
                18627C7A29052BDF00BD2A04 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
                18627C8829052BE000BD2A04 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
                18627C8A29052BE000BD2A04 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
                18627C8B29052BE000BD2A04 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
-               18627C9229052C2B00BD2A04 /* whisper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = whisper.h; path = ../../../whisper.h; sourceTree = "<group>"; };
-               18627C9329052C4900BD2A04 /* whisper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = whisper.cpp; path = ../../../whisper.cpp; sourceTree = "<group>"; };
-               18627C9529052C5800BD2A04 /* ggml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ggml.c; path = ../../../ggml.c; sourceTree = "<group>"; };
-               18627C9729052C6600BD2A04 /* ggml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ggml.h; path = ../../../ggml.h; sourceTree = "<group>"; };
+               18627C9229052C2B00BD2A04 /* whisper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = whisper.h; path = ../../../include/whisper.h; sourceTree = "<group>"; };
+               18627C9329052C4900BD2A04 /* whisper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = whisper.cpp; path = ../../../src/whisper.cpp; sourceTree = "<group>"; };
+               18627C9529052C5800BD2A04 /* ggml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ggml.c; path = ../../../ggml/src/ggml.c; sourceTree = "<group>"; };
+               18627C9729052C6600BD2A04 /* ggml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ggml.h; path = ../../../ggml/include/ggml.h; sourceTree = "<group>"; };
                18627C9A29052CFF00BD2A04 /* ggml-base.en.bin */ = {isa = PBXFileReference; lastKnownFileType = archive.macbinary; name = "ggml-base.en.bin"; path = "../../../models/ggml-base.en.bin"; sourceTree = "<group>"; };
-               18ABE1542AF556340044A204 /* ggml-quants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-quants.h"; path = "../../../ggml-quants.h"; sourceTree = "<group>"; };
-               18ABE1552AF556340044A204 /* ggml-backend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-backend.h"; path = "../../../ggml-backend.h"; sourceTree = "<group>"; };
-               18ABE1562AF556340044A204 /* ggml-backend-impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-backend-impl.h"; path = "../../../ggml-backend-impl.h"; sourceTree = "<group>"; };
-               18ABE1572AF556340044A204 /* ggml-backend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ggml-backend.c"; path = "../../../ggml-backend.c"; sourceTree = "<group>"; };
-               18ABE1582AF556340044A204 /* ggml-impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-impl.h"; path = "../../../ggml-impl.h"; sourceTree = "<group>"; };
-               18ABE1592AF556340044A204 /* ggml-quants.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ggml-quants.c"; path = "../../../ggml-quants.c"; sourceTree = "<group>"; };
+               18A275FE2C2A94DE001C8D37 /* ggml-metal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-metal.h"; path = "../../../ggml/include/ggml-metal.h"; sourceTree = "<group>"; };
+               18A275FF2C2A9563001C8D37 /* ggml-common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-common.h"; path = "../../../ggml/src/ggml-common.h"; sourceTree = "<group>"; };
+               18ABE1542AF556340044A204 /* ggml-quants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-quants.h"; path = "../../../ggml/src/ggml-quants.h"; sourceTree = "<group>"; };
+               18ABE1552AF556340044A204 /* ggml-backend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-backend.h"; path = "../../../ggml/include/ggml-backend.h"; sourceTree = "<group>"; };
+               18ABE1562AF556340044A204 /* ggml-backend-impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-backend-impl.h"; path = "../../../ggml/src/ggml-backend-impl.h"; sourceTree = "<group>"; };
+               18ABE1572AF556340044A204 /* ggml-backend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ggml-backend.c"; path = "../../../ggml/src/ggml-backend.c"; sourceTree = "<group>"; };
+               18ABE1582AF556340044A204 /* ggml-impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "ggml-impl.h"; path = "../../../ggml/src/ggml-impl.h"; sourceTree = "<group>"; };
+               18ABE1592AF556340044A204 /* ggml-quants.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "ggml-quants.c"; path = "../../../ggml/src/ggml-quants.c"; sourceTree = "<group>"; };
                7FE342452A0C3FA20015A058 /* whisper-encoder-impl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "whisper-encoder-impl.m"; sourceTree = "<group>"; };
                7FE342462A0C3FA20015A058 /* whisper-encoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "whisper-encoder.h"; sourceTree = "<group>"; };
                7FE342472A0C3FA20015A058 /* whisper-encoder.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "whisper-encoder.mm"; sourceTree = "<group>"; };
                18627C7829052BDF00BD2A04 /* whisper.objc */ = {
                        isa = PBXGroup;
                        children = (
+                               18A275FF2C2A9563001C8D37 /* ggml-common.h */,
+                               18A275FE2C2A94DE001C8D37 /* ggml-metal.h */,
                                18ABE1562AF556340044A204 /* ggml-backend-impl.h */,
                                18ABE1572AF556340044A204 /* ggml-backend.c */,
                                18ABE1552AF556340044A204 /* ggml-backend.h */,
                                7FE3424A2A0C3FA20015A058 /* whisper-decoder-impl.m */,
                        );
                        name = coreml;
-                       path = ../../../coreml;
+                       path = ../../../src/coreml;
                        sourceTree = "<group>";
                };
 /* End PBXGroup section */
                                18627C7229052BDF00BD2A04 /* Sources */,
                                18627C7329052BDF00BD2A04 /* Frameworks */,
                                18627C7429052BDF00BD2A04 /* Resources */,
-                               184447202AB21B25007D6BFE /* CopyFiles */,
+                               184447202AB21B25007D6BFE /* Copy Files */,
                        );
                        buildRules = (
                        );
                        isa = PBXProject;
                        attributes = {
                                BuildIndependentTargetsInParallel = 1;
-                               LastUpgradeCheck = 1400;
+                               LastUpgradeCheck = 1540;
                                TargetAttributes = {
                                        18627C7529052BDF00BD2A04 = {
                                                CreatedOnToolsVersion = 14.0.1;
                        isa = PBXResourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
+                               18A2760B2C2A9B43001C8D37 /* ggml-metal.metal in Resources */,
                                18627C8929052BE000BD2A04 /* LaunchScreen.storyboard in Resources */,
                                7FE3424F2A0C418A0015A058 /* ggml-base.en-encoder.mlmodelc in Resources */,
                                18627C8629052BE000BD2A04 /* Assets.xcassets in Resources */,
                                DEBUG_INFORMATION_FORMAT = dwarf;
                                ENABLE_STRICT_OBJC_MSGSEND = YES;
                                ENABLE_TESTABILITY = YES;
+                               ENABLE_USER_SCRIPT_SANDBOXING = YES;
                                GCC_C_LANGUAGE_STANDARD = gnu11;
                                GCC_DYNAMIC_NO_PIC = NO;
                                GCC_NO_COMMON_BLOCKS = YES;
                                DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
                                ENABLE_NS_ASSERTIONS = NO;
                                ENABLE_STRICT_OBJC_MSGSEND = YES;
+                               ENABLE_USER_SCRIPT_SANDBOXING = YES;
                                GCC_C_LANGUAGE_STANDARD = gnu11;
                                GCC_NO_COMMON_BLOCKS = YES;
                                GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
                                        "@executable_path/Frameworks",
                                );
                                MARKETING_VERSION = 1.0;
+                               MTL_HEADER_SEARCH_PATHS = "";
                                PRODUCT_BUNDLE_IDENTIFIER = "com.ggerganov.whisper-objc";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SWIFT_EMIT_LOC_STRINGS = YES;
                                        "@executable_path/Frameworks",
                                );
                                MARKETING_VERSION = 1.0;
+                               MTL_HEADER_SEARCH_PATHS = "";
                                PRODUCT_BUNDLE_IDENTIFIER = "com.ggerganov.whisper-objc";
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                SWIFT_EMIT_LOC_STRINGS = YES;
index 0142a6f3b7281b0db12f4dcd1b867fe325e2fd27..59fba8971e0c8c0ed9cdd618d865ba169fb93d77 100644 (file)
@@ -15,7 +15,7 @@ class WhisperState: NSObject, ObservableObject, AVAudioRecorderDelegate {
     private var audioPlayer: AVAudioPlayer?
     
     private var modelUrl: URL? {
-        Bundle.main.url(forResource: "ggml-tiny.en", withExtension: "bin", subdirectory: "models")
+        Bundle.main.url(forResource: "ggml-base.en", withExtension: "bin", subdirectory: "models")
     }
     
     private var sampleUrl: URL? {
diff --git a/ggml-alloc.c b/ggml-alloc.c
deleted file mode 100644 (file)
index bd367c4..0000000
+++ /dev/null
@@ -1,1041 +0,0 @@
-#include "ggml-alloc.h"
-#include "ggml-backend-impl.h"
-#include "ggml.h"
-#include "ggml-impl.h"
-#include <assert.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#define MAX_FREE_BLOCKS 256
-
-//#define GGML_ALLOCATOR_DEBUG
-
-//#define AT_PRINTF(...) fprintf(stderr, __VA_ARGS__)
-#define AT_PRINTF(...)
-
-
-static bool ggml_is_view(const struct ggml_tensor * t) {
-    return t->view_src != NULL;
-}
-
-static bool ggml_are_same_layout(const struct ggml_tensor * a, const struct ggml_tensor * b) {
-    if (a->type != b->type) {
-        return false;
-    }
-    for (int i = 0; i < GGML_MAX_DIMS; i++) {
-        if (a->ne[i] != b->ne[i]) {
-            return false;
-        }
-        if (a->nb[i] != b->nb[i]) {
-            return false;
-        }
-    }
-    return true;
-}
-
-static bool ggml_op_can_inplace(enum ggml_op op) {
-    switch (op) {
-        case GGML_OP_SCALE:
-        case GGML_OP_DIAG_MASK_ZERO:
-        case GGML_OP_DIAG_MASK_INF:
-        case GGML_OP_ADD:
-        case GGML_OP_ADD1:
-        case GGML_OP_SUB:
-        case GGML_OP_MUL:
-        case GGML_OP_DIV:
-        case GGML_OP_SQR:
-        case GGML_OP_SQRT:
-        case GGML_OP_LOG:
-        case GGML_OP_UNARY:
-        case GGML_OP_ROPE:
-        case GGML_OP_RMS_NORM:
-        case GGML_OP_SOFT_MAX:
-            return true;
-
-        default:
-            return false;
-    }
-}
-
-static size_t aligned_offset(const void * buffer, size_t offset, size_t alignment) {
-    assert(alignment && !(alignment & (alignment - 1))); // power of 2
-    size_t align = (alignment - (((uintptr_t)buffer + offset) % alignment)) % alignment;
-    return offset + align;
-}
-
-// tallocr
-
-struct ggml_tallocr ggml_tallocr_new(ggml_backend_buffer_t buffer) {
-    void * base = ggml_backend_buffer_get_base(buffer);
-    size_t align = ggml_backend_buffer_get_alignment(buffer);
-
-    assert(align && !(align & (align - 1))); // power of 2
-
-    struct ggml_tallocr talloc = (struct ggml_tallocr) {
-        /*.buffer    = */ buffer,
-        /*.base      = */ base,
-        /*.alignment = */ align,
-        /*.offset    = */ aligned_offset(base, 0, align),
-    };
-    return talloc;
-}
-
-void ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor) {
-    size_t size = ggml_backend_buffer_get_alloc_size(talloc->buffer, tensor);
-    size = GGML_PAD(size, talloc->alignment);
-
-    if (talloc->offset + size > ggml_backend_buffer_get_size(talloc->buffer)) {
-        fprintf(stderr, "%s: not enough space in the buffer to allocate %s (needed %zu, available %zu)\n",
-                __func__, tensor->name, size, ggml_backend_buffer_get_size(talloc->buffer) - talloc->offset);
-        GGML_ASSERT(!"not enough space in the buffer");
-        return;
-    }
-
-    void * addr = (char *)ggml_backend_buffer_get_base(talloc->buffer) + talloc->offset;
-    talloc->offset += size;
-
-    assert(((uintptr_t)addr % talloc->alignment) == 0);
-
-    ggml_backend_tensor_alloc(talloc->buffer, tensor, addr);
-}
-
-// dynamic tensor allocator
-
-struct free_block {
-    size_t offset;
-    size_t size;
-};
-
-struct ggml_dyn_tallocr {
-    size_t alignment;
-    int n_free_blocks;
-    struct free_block free_blocks[MAX_FREE_BLOCKS];
-    size_t max_size;
-
-#ifdef GGML_ALLOCATOR_DEBUG
-    struct {
-        const struct ggml_tensor * tensor;
-        size_t offset;
-    } allocated_tensors[1024];
-#endif
-};
-
-#ifdef GGML_ALLOCATOR_DEBUG
-static void add_allocated_tensor(struct ggml_dyn_tallocr * alloc, size_t offset, const struct ggml_tensor * tensor) {
-    for (int i = 0; i < 1024; i++) {
-        if (alloc->allocated_tensors[i].tensor == NULL) {
-            alloc->allocated_tensors[i].tensor = tensor;
-            alloc->allocated_tensors[i].offset = offset;
-            return;
-        }
-    }
-    GGML_ASSERT(!"out of allocated_tensors");
-}
-static void remove_allocated_tensor(struct ggml_dyn_tallocr * alloc, size_t offset, const struct ggml_tensor * tensor) {
-    for (int i = 0; i < 1024; i++) {
-        if (alloc->allocated_tensors[i].offset == offset) {
-            alloc->allocated_tensors[i].tensor = NULL;
-            return;
-        }
-    }
-    fprintf(stderr, "tried to free tensor %s not found\n", tensor->name);
-    GGML_ASSERT(!"tensor not found");
-}
-#endif
-
-static size_t ggml_dyn_tallocr_alloc(struct ggml_dyn_tallocr * alloc, size_t size, const struct ggml_tensor * tensor) {
-    size = aligned_offset(NULL, size, alloc->alignment);
-
-    AT_PRINTF("%s: allocating %s (%zu bytes) - ", __func__, tensor->name, size);
-
-    size_t max_avail = 0;
-
-    // find the best fitting free block besides the last block
-    int best_fit_block = -1;
-    size_t best_fit_size = SIZE_MAX;
-    for (int i = 0; i < alloc->n_free_blocks - 1; i++) {
-        struct free_block * block = &alloc->free_blocks[i];
-        max_avail = MAX(max_avail, block->size);
-        if (block->size >= size && block->size <= best_fit_size) {
-            best_fit_block = i;
-            best_fit_size = block->size;
-        }
-    }
-
-    if (best_fit_block == -1) {
-        // the last block is our last resort
-        struct free_block * block = &alloc->free_blocks[alloc->n_free_blocks - 1];
-        max_avail = MAX(max_avail, block->size);
-        if (block->size >= size) {
-            best_fit_block = alloc->n_free_blocks - 1;
-        } else {
-            // this should never happen
-            fprintf(stderr, "%s: not enough space in the buffer to allocate %zu bytes, largest block available %zu bytes\n",
-                    __func__, size, max_avail);
-            GGML_ASSERT(!"not enough space in the buffer");
-            GGML_UNREACHABLE();
-        }
-    }
-
-    struct free_block * block = &alloc->free_blocks[best_fit_block];
-    size_t offset = block->offset;
-    block->offset = offset + size;
-    block->size -= size;
-    if (block->size == 0) {
-        // remove block if empty
-        alloc->n_free_blocks--;
-        for (int j = best_fit_block; j < alloc->n_free_blocks; j++) {
-            alloc->free_blocks[j] = alloc->free_blocks[j+1];
-        }
-    }
-
-    AT_PRINTF("block %d, offset %zu\n", best_fit_block, offset);
-
-#ifdef GGML_ALLOCATOR_DEBUG
-    add_allocated_tensor(alloc, offset, tensor);
-    size_t cur_max = offset + size;
-    if (cur_max > alloc->max_size) {
-        // sort allocated_tensors by offset
-        for (int i = 0; i < 1024; i++) {
-            for (int j = i + 1; j < 1024; j++) {
-                if (alloc->allocated_tensors[i].offset > alloc->allocated_tensors[j].offset) {
-                    const struct ggml_tensor * tmp_tensor = alloc->allocated_tensors[i].tensor;
-                    size_t tmp_offset = alloc->allocated_tensors[i].offset;
-                    alloc->allocated_tensors[i].tensor = alloc->allocated_tensors[j].tensor;
-                    alloc->allocated_tensors[i].offset = alloc->allocated_tensors[j].offset;
-                    alloc->allocated_tensors[j].tensor = tmp_tensor;
-                    alloc->allocated_tensors[j].offset = tmp_offset;
-                }
-            }
-        }
-        fprintf(stderr, "max_size = %.2f MB: tensors: ", cur_max / 1024.0 / 1024.0);
-        for (int i = 0; i < 1024; i++) {
-            if (alloc->allocated_tensors[i].tensor) {
-                fprintf(stderr, "%s [%zx-%zx] (%.2f MB) ", alloc->allocated_tensors[i].tensor->name,
-                    alloc->allocated_tensors[i].offset,
-                    alloc->allocated_tensors[i].offset + ggml_nbytes(alloc->allocated_tensors[i].tensor),
-                    ggml_nbytes(alloc->allocated_tensors[i].tensor) / 1024.0 / 1024.0);
-            }
-        }
-        fprintf(stderr, "\n");
-    }
-#endif
-
-    alloc->max_size = MAX(alloc->max_size, offset + size);
-
-    return offset;
-
-    GGML_UNUSED(tensor);
-}
-
-// this is a very naive implementation, but for our case the number of free blocks should be very small
-static void ggml_dyn_tallocr_free_tensor(struct ggml_dyn_tallocr * alloc, size_t offset, size_t size, const struct ggml_tensor * tensor) {
-    size = aligned_offset(NULL, size, alloc->alignment);
-
-    AT_PRINTF("%s: freeing %s at %zu (%zu bytes) - n_free_blocks = %d\n", __func__, tensor->name, offset, size, alloc->n_free_blocks);
-
-#ifdef GGML_ALLOCATOR_DEBUG
-    remove_allocated_tensor(alloc, offset, tensor);
-#endif
-
-    // see if we can merge with an existing block
-    for (int i = 0; i < alloc->n_free_blocks; i++) {
-        struct free_block * block = &alloc->free_blocks[i];
-        // check if ptr is at the end of the block
-        if (block->offset + block->size == offset) {
-            block->size += size;
-            // check if we can merge with the next block
-            if (i < alloc->n_free_blocks - 1 && block->offset + block->size == alloc->free_blocks[i+1].offset) {
-                block->size += alloc->free_blocks[i+1].size;
-                alloc->n_free_blocks--;
-                for (int j = i+1; j < alloc->n_free_blocks; j++) {
-                    alloc->free_blocks[j] = alloc->free_blocks[j+1];
-                }
-            }
-            return;
-        }
-        // check if ptr is at the beginning of the block
-        if (offset + size == block->offset) {
-            block->offset = offset;
-            block->size += size;
-            // check if we can merge with the previous block
-            if (i > 0 && alloc->free_blocks[i-1].offset + alloc->free_blocks[i-1].size == block->offset) {
-                alloc->free_blocks[i-1].size += block->size;
-                alloc->n_free_blocks--;
-                for (int j = i; j < alloc->n_free_blocks; j++) {
-                    alloc->free_blocks[j] = alloc->free_blocks[j+1];
-                }
-            }
-            return;
-        }
-    }
-    // otherwise, add a new block
-    GGML_ASSERT(alloc->n_free_blocks < MAX_FREE_BLOCKS && "out of free blocks");
-    // insert the new block in the correct position to keep the array sorted by address (to make merging blocks faster)
-    int insert_pos = 0;
-    while (insert_pos < alloc->n_free_blocks && alloc->free_blocks[insert_pos].offset < offset) {
-        insert_pos++;
-    }
-    // shift all blocks from insert_pos onward to make room for the new block
-    for (int i = alloc->n_free_blocks; i > insert_pos; i--) {
-        alloc->free_blocks[i] = alloc->free_blocks[i-1];
-    }
-    // insert the new block
-    alloc->free_blocks[insert_pos].offset = offset;
-    alloc->free_blocks[insert_pos].size = size;
-    alloc->n_free_blocks++;
-
-    GGML_UNUSED(tensor);
-}
-
-static void ggml_dyn_tallocr_reset(struct ggml_dyn_tallocr * alloc) {
-    alloc->n_free_blocks = 1;
-    alloc->free_blocks[0].offset = 0;
-    alloc->free_blocks[0].size = SIZE_MAX/2; // restrict maximum size of a measure allocator to half size_t max to avoid overflows
-    alloc->max_size = 0;
-}
-
-static struct ggml_dyn_tallocr * ggml_dyn_tallocr_new(size_t alignment) {
-    struct ggml_dyn_tallocr * alloc = (struct ggml_dyn_tallocr *)malloc(sizeof(struct ggml_dyn_tallocr));
-
-    *alloc = (struct ggml_dyn_tallocr) {
-        /*.alignment     = */ alignment,
-        /*.n_free_blocks = */ 0,
-        /*.free_blocks   = */ {{0}},
-        /*.max_size      = */ 0,
-#ifdef GGML_ALLOCATOR_DEBUG
-        /*.allocated_tensors = */ {{0}},
-#endif
-    };
-
-    ggml_dyn_tallocr_reset(alloc);
-
-    return alloc;
-}
-
-static void ggml_dyn_tallocr_free(struct ggml_dyn_tallocr * alloc) {
-    free(alloc);
-}
-
-static size_t ggml_dyn_tallocr_max_size(struct ggml_dyn_tallocr * alloc) {
-    return alloc->max_size;
-}
-
-
-/////////////////////////////////////
-
-// graph allocator
-
-struct hash_node {
-    int n_children;
-    int n_views;
-    int buffer_id;
-    size_t offset; // offset within the buffer
-    bool allocated;
-};
-
-struct tensor_alloc {
-    int buffer_id;
-    size_t offset;
-    size_t size_max; // 0 = pre-allocated, unused, or view
-};
-
-struct leaf_alloc {
-    int buffer_id;
-    struct tensor_alloc leaf;
-};
-
-struct node_alloc {
-    struct tensor_alloc dst;
-    struct tensor_alloc src[GGML_MAX_SRC];
-};
-
-struct ggml_gallocr {
-    ggml_backend_buffer_type_t * bufts; // [n_buffers]
-    ggml_backend_buffer_t * buffers; // [n_buffers]
-    struct ggml_dyn_tallocr ** buf_tallocs; // [n_buffers]
-    int n_buffers;
-
-    struct ggml_hash_set hash_set;
-    struct hash_node * hash_values; // [hash_set.size]
-
-    struct node_alloc * node_allocs; // [n_nodes]
-    int n_nodes;
-
-    struct leaf_alloc * leaf_allocs; // [n_leafs]
-    int n_leafs;
-};
-
-ggml_gallocr_t ggml_gallocr_new_n(ggml_backend_buffer_type_t * bufts, int n_bufs) {
-    ggml_gallocr_t galloc = (ggml_gallocr_t)calloc(1, sizeof(struct ggml_gallocr));
-    GGML_ASSERT(galloc != NULL);
-
-    galloc->bufts = calloc(n_bufs, sizeof(ggml_backend_buffer_type_t));
-    GGML_ASSERT(galloc->bufts != NULL);
-
-    galloc->buffers = calloc(n_bufs, sizeof(ggml_backend_buffer_t));
-    GGML_ASSERT(galloc->buffers != NULL);
-
-    galloc->buf_tallocs = calloc(n_bufs, sizeof(struct ggml_dyn_tallocr *));
-    GGML_ASSERT(galloc->buf_tallocs != NULL);
-
-    for (int i = 0; i < n_bufs; i++) {
-        galloc->bufts[i] = bufts[i];
-        galloc->buffers[i] = NULL;
-
-        // check if the same buffer type is used multiple times and reuse the same allocator
-        for (int j = 0; j < i; j++) {
-            if (bufts[i] == bufts[j]) {
-                galloc->buf_tallocs[i] = galloc->buf_tallocs[j];
-                break;
-            }
-        }
-
-        if (galloc->buf_tallocs[i] == NULL) {
-            size_t alignment = ggml_backend_buft_get_alignment(bufts[i]);
-            galloc->buf_tallocs[i] = ggml_dyn_tallocr_new(alignment);
-        }
-    }
-    galloc->n_buffers = n_bufs;
-
-    return galloc;
-}
-
-ggml_gallocr_t ggml_gallocr_new(ggml_backend_buffer_type_t buft) {
-    return ggml_gallocr_new_n(&buft, 1);
-}
-
-void ggml_gallocr_free(ggml_gallocr_t galloc) {
-    if (galloc == NULL) {
-        return;
-    }
-
-    for (int i = 0; i < galloc->n_buffers; i++) {
-        if (galloc->buffers != NULL) {
-            // skip if already freed
-            bool freed = false;
-            for (int j = 0; j < i; j++) {
-                if (galloc->buffers[j] == galloc->buffers[i]) {
-                    freed = true;
-                    break;
-                }
-            }
-            if (!freed) {
-                ggml_backend_buffer_free(galloc->buffers[i]);
-            }
-        }
-        if (galloc->buf_tallocs != NULL) {
-            // skip if already freed
-            bool freed = false;
-            for (int j = 0; j < i; j++) {
-                if (galloc->buf_tallocs[j] == galloc->buf_tallocs[i]) {
-                    freed = true;
-                    break;
-                }
-            }
-            if (!freed) {
-                ggml_dyn_tallocr_free(galloc->buf_tallocs[i]);
-            }
-        }
-    }
-
-    free(galloc->hash_set.keys);
-    free(galloc->hash_values);
-    free(galloc->bufts);
-    free(galloc->buffers);
-    free(galloc->buf_tallocs);
-    free(galloc->node_allocs);
-    free(galloc->leaf_allocs);
-    free(galloc);
-}
-
-typedef struct ggml_gallocr * ggml_gallocr_t;
-
-static struct hash_node * ggml_gallocr_hash_get(ggml_gallocr_t galloc, struct ggml_tensor * t) {
-    size_t i = ggml_hash_find_or_insert(galloc->hash_set, t);
-    return &galloc->hash_values[i];
-}
-
-static bool ggml_gallocr_is_own(ggml_gallocr_t galloc, struct ggml_tensor * t) {
-    return ggml_gallocr_hash_get(galloc, t)->allocated;
-}
-
-static void ggml_gallocr_set_node_offset(ggml_gallocr_t galloc, struct ggml_tensor * node, int buffer_id, size_t offset) {
-    struct hash_node * hn = ggml_gallocr_hash_get(galloc, node);
-    hn->buffer_id = buffer_id;
-    hn->offset = offset;
-    hn->allocated = true;
-}
-
-static bool ggml_gallocr_is_allocated(ggml_gallocr_t galloc, struct ggml_tensor * t) {
-    return t->data != NULL || ggml_gallocr_hash_get(galloc, t)->allocated;
-}
-
-static void ggml_gallocr_allocate_node(ggml_gallocr_t galloc, struct ggml_tensor * node, int buffer_id) {
-    struct hash_node * hn = ggml_gallocr_hash_get(galloc, node);
-
-    if (!ggml_gallocr_is_allocated(galloc, node) && !ggml_is_view(node)) {
-        hn->allocated = true;
-        assert(hn->offset == 0);
-
-        // try to reuse a parent's buffer (inplace)
-        if (ggml_op_can_inplace(node->op)) {
-            for (int i = 0; i < GGML_MAX_SRC; i++) {
-                struct ggml_tensor * parent = node->src[i];
-                if (parent == NULL) {
-                    continue;
-                }
-
-                // if the node's data is external, then we cannot re-use it
-                if (!ggml_gallocr_is_own(galloc, parent)) {
-                    AT_PRINTF("not reusing parent %s for %s as %p is external\n", parent->name, node->name, parent->data);
-                    continue;
-                }
-
-                // outputs cannot be reused
-                if (parent->flags & GGML_TENSOR_FLAG_OUTPUT || (parent->view_src != NULL && parent->view_src->flags & GGML_TENSOR_FLAG_OUTPUT)) {
-                    AT_PRINTF("not reusing parent %s for %s as it is an output\n", parent->name, node->name);
-                    continue;
-                }
-
-                if (!ggml_are_same_layout(node, parent)) {
-                    AT_PRINTF("not reusing parent %s for %s as layouts are different\n", parent->name, node->name);
-                    continue;
-                }
-
-                struct hash_node * p_hn = ggml_gallocr_hash_get(galloc, parent);
-                if (p_hn->n_children == 1 && p_hn->n_views == 0) {
-                    if (ggml_is_view(parent)) {
-                        struct ggml_tensor * view_src = parent->view_src;
-                        struct hash_node * view_src_hn = ggml_gallocr_hash_get(galloc, view_src);
-                        if (view_src_hn->n_views == 1 && view_src_hn->n_children == 0 && view_src->data == parent->data) {
-                            AT_PRINTF("reusing view parent %s (%s) for %s\n", parent->name, view_src->name, node->name);
-                            assert(view_src_hn->offset == p_hn->offset);
-                            hn->buffer_id = p_hn->buffer_id;
-                            hn->offset = p_hn->offset;
-                            p_hn->allocated = false; // avoid freeing the parent
-                            view_src_hn->allocated = false;
-                            return;
-                        }
-                    } else {
-                        AT_PRINTF("reusing parent %s for %s\n", parent->name, node->name);
-                        hn->buffer_id = p_hn->buffer_id;
-                        hn->offset = p_hn->offset;
-                        p_hn->allocated = false; // avoid freeing the parent
-                        return;
-                    }
-                }
-            }
-        }
-        // allocate tensor from the buffer
-        struct ggml_dyn_tallocr * alloc = galloc->buf_tallocs[buffer_id];
-        ggml_backend_buffer_type_t buft = galloc->bufts[buffer_id];
-        size_t size = ggml_backend_buft_get_alloc_size(buft, node);
-        size_t offset = ggml_dyn_tallocr_alloc(alloc, size, node);
-        hn->buffer_id = buffer_id;
-        hn->offset = offset;
-        return;
-    }
-}
-
-static void ggml_gallocr_free_node(ggml_gallocr_t galloc, struct ggml_tensor * node) {
-    // graph outputs are never freed
-    if (node->flags & GGML_TENSOR_FLAG_OUTPUT) {
-        AT_PRINTF("not freeing output %s\n", node->name);
-        return;
-    }
-
-    struct hash_node * hn = ggml_gallocr_hash_get(galloc, node);
-    size_t offset = hn->offset;
-    int buffer_id = hn->buffer_id;
-    struct ggml_dyn_tallocr * alloc = galloc->buf_tallocs[buffer_id];
-    ggml_backend_buffer_type_t buft = galloc->bufts[buffer_id];
-    size_t size = ggml_backend_buft_get_alloc_size(buft, node);
-    ggml_dyn_tallocr_free_tensor(alloc, offset, size, node);
-    hn->allocated = false;
-}
-
-static int get_node_buffer_id(const int * node_buffer_ids, int i) {
-    return node_buffer_ids ? node_buffer_ids[i] : 0;
-}
-
-static void ggml_gallocr_alloc_graph_impl(ggml_gallocr_t galloc, struct ggml_cgraph * graph, const int * node_buffer_ids, const int * leaf_buffer_ids) {
-    // clear hash tables
-    memset(galloc->hash_set.keys, 0, galloc->hash_set.size * sizeof(struct ggml_tensor *));
-    memset(galloc->hash_values,   0, galloc->hash_set.size * sizeof(struct hash_node));
-
-    // allocate leafs
-    // these may be tensors that the application is not using in the graph, but may still want to allocate for other purposes
-    for (int i = 0; i < graph->n_leafs; i++) {
-        struct ggml_tensor * leaf = graph->leafs[i];
-        ggml_gallocr_allocate_node(galloc, leaf, get_node_buffer_id(leaf_buffer_ids, i));
-    }
-
-    // count number of children and views
-    // allocate other graph inputs and leafs first to avoid overwriting them
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-
-        // TODO: better way to add external dependencies
-        // GGML_OP_NONE does not appear normally in the graph nodes, but is used by ggml-backend to add dependencies to
-        // control when some tensors are allocated and freed. in this case, the dependencies are in `src`, but the node
-        // itself is never used and should not be considered a dependency
-        if (ggml_is_view(node) && node->op != GGML_OP_NONE) {
-            struct ggml_tensor * view_src = node->view_src;
-            ggml_gallocr_hash_get(galloc, view_src)->n_views += 1;
-        }
-
-        if (node->flags & GGML_TENSOR_FLAG_INPUT) {
-            ggml_gallocr_allocate_node(galloc, graph->nodes[i], get_node_buffer_id(node_buffer_ids, i));
-        }
-
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            struct ggml_tensor * src = node->src[j];
-            if (src == NULL) {
-                continue;
-            }
-
-            ggml_gallocr_hash_get(galloc, src)->n_children += 1;
-
-            // allocate explicit inputs
-            if (src->flags & GGML_TENSOR_FLAG_INPUT) {
-                ggml_gallocr_allocate_node(galloc, src, get_node_buffer_id(node_buffer_ids, i));
-            }
-        }
-    }
-
-    // allocate tensors
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-        int buffer_id = get_node_buffer_id(node_buffer_ids, i);
-
-        // allocate parents (only leafs need to be allocated at this point)
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            struct ggml_tensor * parent = node->src[j];
-            if (parent == NULL) {
-                continue;
-            }
-            ggml_gallocr_allocate_node(galloc, parent, buffer_id);
-        }
-
-        // allocate node
-        ggml_gallocr_allocate_node(galloc, node, buffer_id);
-
-        AT_PRINTF("exec: %s (%s) <= ", ggml_op_desc(node), node->name);
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            struct ggml_tensor * parent = node->src[j];
-            if (parent == NULL) {
-                continue;
-            }
-            AT_PRINTF("%s", parent->name);
-            if (j < GGML_MAX_SRC - 1 && node->src[j + 1] != NULL) {
-                AT_PRINTF(", ");
-            }
-        }
-        AT_PRINTF("\n");
-
-        // update parents
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            struct ggml_tensor * parent = node->src[j];
-            if (parent == NULL) {
-                continue;
-            }
-            struct hash_node * p_hn = ggml_gallocr_hash_get(galloc, parent);
-            p_hn->n_children -= 1;
-
-            AT_PRINTF("parent %s: %d children, %d views, allocated: %d\n",
-                parent->name, p_hn->n_children, p_hn->n_views, p_hn->allocated);
-
-            if (p_hn->n_children == 0 && p_hn->n_views == 0) {
-                if (ggml_is_view(parent)) {
-                    struct ggml_tensor * view_src = parent->view_src;
-                    struct hash_node * view_src_hn = ggml_gallocr_hash_get(galloc, view_src);
-                    view_src_hn->n_views -= 1;
-                    AT_PRINTF("view_src %s: %d children, %d views\n",
-                        view_src->name, view_src_hn->n_children, view_src_hn->n_views);
-                    if (view_src_hn->n_views == 0 && view_src_hn->n_children == 0 && view_src_hn->allocated) {
-                        ggml_gallocr_free_node(galloc, view_src);
-                    }
-                }
-                else if (p_hn->allocated) {
-                    ggml_gallocr_free_node(galloc, parent);
-                }
-            }
-            AT_PRINTF("\n");
-        }
-    }
-}
-
-bool ggml_gallocr_reserve_n(ggml_gallocr_t galloc, struct ggml_cgraph * graph, const int * node_buffer_ids, const int * leaf_buffer_ids) {
-    size_t hash_size = graph->visited_hash_table.size;
-
-    // initialize hash table
-    if (galloc->hash_set.size < hash_size) {
-        free(galloc->hash_set.keys);
-        free(galloc->hash_values);
-        galloc->hash_set.size = hash_size;
-        galloc->hash_set.keys = calloc(hash_size, sizeof(struct ggml_tensor *));
-        galloc->hash_values   = calloc(hash_size, sizeof(struct hash_node));
-        GGML_ASSERT(galloc->hash_set.keys != NULL);
-        GGML_ASSERT(galloc->hash_values != NULL);
-    } else {
-        // reset hash table
-        memset(galloc->hash_set.keys, 0, sizeof(struct ggml_tensor *) * galloc->hash_set.size);
-        memset(galloc->hash_values,   0, sizeof(struct hash_node) * galloc->hash_set.size);
-    }
-
-    // reset allocators
-    for (int i = 0; i < galloc->n_buffers; i++) {
-        ggml_dyn_tallocr_reset(galloc->buf_tallocs[i]);
-    }
-
-    // allocate in hash table
-    ggml_gallocr_alloc_graph_impl(galloc, graph, node_buffer_ids, leaf_buffer_ids);
-
-    // set the node_allocs from the hash table
-    if (galloc->n_nodes < graph->n_nodes) {
-        free(galloc->node_allocs);
-        galloc->node_allocs = calloc(graph->n_nodes, sizeof(struct node_alloc));
-        GGML_ASSERT(galloc->node_allocs != NULL);
-    }
-    galloc->n_nodes = graph->n_nodes;
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-        struct node_alloc * node_alloc = &galloc->node_allocs[i];
-        if (node->view_src || node->data) {
-            node_alloc->dst.buffer_id = -1;
-            node_alloc->dst.offset = SIZE_MAX;
-            node_alloc->dst.size_max = 0;
-        } else {
-            struct hash_node * hn = ggml_gallocr_hash_get(galloc, node);
-            node_alloc->dst.buffer_id = hn->buffer_id;
-            node_alloc->dst.offset    = hn->offset;
-            node_alloc->dst.size_max  = ggml_backend_buft_get_alloc_size(galloc->bufts[hn->buffer_id], node);
-        }
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            struct ggml_tensor * src = node->src[j];
-            if (!src || src->view_src || src->data) {
-                node_alloc->src[j].buffer_id = -1;
-                node_alloc->src[j].offset = SIZE_MAX;
-                node_alloc->src[j].size_max = 0;
-            } else {
-                struct hash_node * hn = ggml_gallocr_hash_get(galloc, src);
-                node_alloc->src[j].buffer_id = hn->buffer_id;
-                node_alloc->src[j].offset   = hn->offset;
-                node_alloc->src[j].size_max = ggml_backend_buft_get_alloc_size(galloc->bufts[hn->buffer_id], src);
-            }
-        }
-    }
-    if (galloc->n_leafs < graph->n_leafs) {
-        free(galloc->leaf_allocs);
-        galloc->leaf_allocs = calloc(graph->n_leafs, sizeof(galloc->leaf_allocs[0]));
-        GGML_ASSERT(galloc->leaf_allocs != NULL);
-    }
-    galloc->n_leafs = graph->n_leafs;
-    for (int i = 0; i < graph->n_leafs; i++) {
-        struct ggml_tensor * leaf = graph->leafs[i];
-        struct hash_node * hn = ggml_gallocr_hash_get(galloc, leaf);
-        galloc->leaf_allocs[i].buffer_id = hn->buffer_id;
-        if (leaf->view_src || leaf->data) {
-            galloc->leaf_allocs[i].leaf.buffer_id = -1;
-            galloc->leaf_allocs[i].leaf.offset = SIZE_MAX;
-            galloc->leaf_allocs[i].leaf.size_max = 0;
-        } else {
-            galloc->leaf_allocs[i].leaf.buffer_id = hn->buffer_id;
-            galloc->leaf_allocs[i].leaf.offset = hn->offset;
-            galloc->leaf_allocs[i].leaf.size_max = ggml_backend_buft_get_alloc_size(galloc->bufts[hn->buffer_id], leaf);
-        }
-    }
-
-    // reallocate buffers if needed
-    for (int i = 0; i < galloc->n_buffers; i++) {
-        // if the buffer type is used multiple times, we reuse the same buffer
-        for (int j = 0; j < i; j++) {
-            if (galloc->buf_tallocs[j] == galloc->buf_tallocs[i]) {
-                galloc->buffers[i] = galloc->buffers[j];
-                break;
-            }
-        }
-
-        size_t cur_size = galloc->buffers[i] ? ggml_backend_buffer_get_size(galloc->buffers[i]) : 0;
-        size_t new_size = ggml_dyn_tallocr_max_size(galloc->buf_tallocs[i]);
-
-        // even if there are no tensors allocated in this buffer, we still need to allocate it to initialize views
-        if (new_size > cur_size || galloc->buffers[i] == NULL) {
-#ifndef NDEBUG
-            fprintf(stderr, "%s: reallocating %s buffer from size %.02f MiB to %.02f MiB\n", __func__, ggml_backend_buft_name(galloc->bufts[i]), cur_size / 1024.0 / 1024.0, new_size / 1024.0 / 1024.0);
-#endif
-
-            ggml_backend_buffer_free(galloc->buffers[i]);
-            galloc->buffers[i] = ggml_backend_buft_alloc_buffer(galloc->bufts[i], new_size);
-            if (galloc->buffers[i] == NULL) {
-                fprintf(stderr, "%s: failed to allocate %s buffer of size %zu\n", __func__, ggml_backend_buft_name(galloc->bufts[i]), new_size);
-                return false;
-            }
-        }
-    }
-
-    return true;
-}
-
-bool ggml_gallocr_reserve(ggml_gallocr_t galloc, struct ggml_cgraph *graph) {
-    return ggml_gallocr_reserve_n(galloc, graph, NULL, NULL);
-}
-
-static void ggml_gallocr_init_tensor(ggml_gallocr_t galloc, struct ggml_tensor * tensor, struct tensor_alloc * tensor_alloc) {
-    int buffer_id = tensor_alloc->buffer_id;
-    assert(tensor->data || tensor->view_src || ggml_backend_buffer_get_alloc_size(galloc->buffers[buffer_id], tensor) <= tensor_alloc->size_max);
-
-    if (tensor->view_src != NULL) {
-        if (tensor->buffer == NULL) {
-            assert(tensor_alloc->offset == SIZE_MAX);
-            if (tensor->view_src->buffer == NULL) {
-                // this tensor was allocated without ggml-backend
-                return;
-            }
-            ggml_backend_view_init(tensor);
-        }
-    } else {
-        if (tensor->data == NULL) {
-            assert(tensor_alloc->offset != SIZE_MAX);
-            assert(ggml_backend_buffer_get_alloc_size(galloc->buffers[buffer_id], tensor) <= tensor_alloc->size_max);
-            void * base = ggml_backend_buffer_get_base(galloc->buffers[buffer_id]);
-            void * addr = (char *)base + tensor_alloc->offset;
-            ggml_backend_tensor_alloc(galloc->buffers[buffer_id], tensor, addr);
-        } else {
-            if (tensor->buffer == NULL) {
-                // this tensor was allocated without ggml-backend
-                return;
-            }
-        }
-    }
-}
-
-static bool ggml_gallocr_node_needs_realloc(ggml_gallocr_t galloc, struct ggml_tensor * node, struct tensor_alloc * talloc) {
-    ggml_backend_buffer_type_t buft = talloc->buffer_id != -1 ? galloc->bufts[talloc->buffer_id] : NULL;
-    size_t node_size = (node->data || node->view_src) ? 0 : ggml_backend_buft_get_alloc_size(buft, node);
-    return talloc->size_max >= node_size;
-}
-
-static bool ggml_gallocr_needs_realloc(ggml_gallocr_t galloc, struct ggml_cgraph * graph) {
-    if (galloc->n_nodes != graph->n_nodes) {
-#ifndef NDEBUG
-        fprintf(stderr, "%s: graph has different number of nodes\n", __func__);
-#endif
-        return true;
-    }
-
-    if (galloc->n_leafs != graph->n_leafs) {
-#ifndef NDEBUG
-        fprintf(stderr, "%s: graph has different number of leafs\n", __func__);
-#endif
-        return true;
-    }
-
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-        struct node_alloc * node_alloc = &galloc->node_allocs[i];
-
-        if (!ggml_gallocr_node_needs_realloc(galloc, node, &node_alloc->dst)) {
-#ifndef NDEBUG
-            fprintf(stderr, "%s: node %s is not valid\n", __func__, node->name);
-#endif
-            return true;
-        }
-
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            struct ggml_tensor * src = node->src[j];
-            if (src == NULL) {
-                continue;
-            }
-            if (!ggml_gallocr_node_needs_realloc(galloc, src, &node_alloc->src[j])) {
-#ifndef NDEBUG
-                fprintf(stderr, "%s: src %d (%s) of node %s is not valid\n", __func__, j, src->name, node->name);
-#endif
-                return true;
-            }
-        }
-    }
-
-    return false;
-}
-
-bool ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, struct ggml_cgraph * graph) {
-    if (ggml_gallocr_needs_realloc(galloc, graph)) {
-        if (galloc->n_buffers == 1) {
-#ifndef NDEBUG
-            fprintf(stderr, "%s: reallocating buffers automatically\n", __func__);
-#endif
-            if (!ggml_gallocr_reserve(galloc, graph)) {
-                return false;
-            }
-        } else {
-#ifndef NDEBUG
-            fprintf(stderr, "%s: cannot reallocate multi buffer graph automatically, call reserve\n", __func__);
-#endif
-            return false;
-        }
-    }
-
-    // reset buffers
-    for (int i = 0; i < galloc->n_buffers; i++) {
-        if (galloc->buffers[i] != NULL) {
-            ggml_backend_buffer_reset(galloc->buffers[i]);
-        }
-    }
-
-    // allocate the graph tensors from the previous assignments
-    // leafs
-    for (int i = 0; i < graph->n_leafs; i++) {
-        struct ggml_tensor * leaf = graph->leafs[i];
-        struct leaf_alloc * leaf_alloc = &galloc->leaf_allocs[i];
-        ggml_gallocr_init_tensor(galloc, leaf, &leaf_alloc->leaf);
-    }
-    // nodes
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-        struct node_alloc * node_alloc = &galloc->node_allocs[i];
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            struct ggml_tensor * src = node->src[j];
-            if (src == NULL) {
-                continue;
-            }
-            ggml_gallocr_init_tensor(galloc, src, &node_alloc->src[j]);
-        }
-        ggml_gallocr_init_tensor(galloc, node, &node_alloc->dst);
-    }
-
-    return true;
-}
-
-size_t ggml_gallocr_get_buffer_size(ggml_gallocr_t galloc, int buffer_id) {
-    GGML_ASSERT(buffer_id >= 0 && buffer_id < galloc->n_buffers);
-
-    if (galloc->buffers[buffer_id] == NULL) {
-        return 0;
-    }
-
-    for (int i = 0; i < buffer_id; i++) {
-        if (galloc->buffers[i] == galloc->buffers[buffer_id]) {
-            // this buffer is the same as a previous one due to the same buffer type being used multiple times
-            // only return the buffer size the first time it appears to avoid double counting
-            return 0;
-        }
-    }
-
-    return ggml_backend_buffer_get_size(galloc->buffers[buffer_id]);
-}
-
-// utils
-
-static bool alloc_tensor_range(struct ggml_context * ctx,
-        struct ggml_tensor * first, struct ggml_tensor * last,
-        ggml_backend_buffer_type_t buft, size_t size,
-        ggml_backend_buffer_t ** buffers, size_t * n_buffers) {
-    ggml_backend_buffer_t buffer = ggml_backend_buft_alloc_buffer(buft, size);
-    if (buffer == NULL) {
-#ifndef NDEBUG
-        fprintf(stderr, "%s: failed to allocate %s buffer of size %zu\n", __func__, ggml_backend_buft_name(buft), size);
-#endif
-        for (size_t i = 0; i < *n_buffers; i++) {
-            ggml_backend_buffer_free((*buffers)[i]);
-        }
-        free(*buffers);
-        return false;
-    }
-
-    struct ggml_tallocr tallocr = ggml_tallocr_new(buffer);
-
-    for (struct ggml_tensor * t = first; t != last; t = ggml_get_next_tensor(ctx, t)) {
-        if (t->data == NULL) {
-            if (t->view_src == NULL) {
-                ggml_tallocr_alloc(&tallocr, t);
-            } else if (t->buffer == NULL) {
-                ggml_backend_view_init(t);
-            }
-        } else {
-            if (t->view_src != NULL && t->buffer == NULL) {
-                // view of a pre-allocated tensor
-                ggml_backend_view_init(t);
-            }
-        }
-    }
-
-    *buffers = realloc(*buffers, sizeof(ggml_backend_buffer_t) * (*n_buffers + 1));
-    (*buffers)[(*n_buffers)++] = buffer;
-
-    return true;
-}
-
-ggml_backend_buffer_t ggml_backend_alloc_ctx_tensors_from_buft(struct ggml_context * ctx, ggml_backend_buffer_type_t buft) {
-    GGML_ASSERT(ggml_get_no_alloc(ctx) == true);
-
-    size_t alignment = ggml_backend_buft_get_alignment(buft);
-    size_t max_size = ggml_backend_buft_get_max_size(buft);
-
-    ggml_backend_buffer_t * buffers = NULL;
-    size_t n_buffers = 0;
-
-    size_t cur_buf_size = 0;
-    struct ggml_tensor * first = ggml_get_first_tensor(ctx);
-    for (struct ggml_tensor * t = first; t != NULL; t = ggml_get_next_tensor(ctx, t)) {
-        size_t this_size = 0;
-        if (t->data == NULL && t->view_src == NULL) {
-            this_size = GGML_PAD(ggml_backend_buft_get_alloc_size(buft, t), alignment);
-        }
-
-        if (this_size > max_size) {
-            fprintf(stderr, "%s: tensor %s is too large to fit in a %s buffer (tensor size: %zu, max buffer size: %zu)\n",
-                    __func__, t->name,
-                    ggml_backend_buft_name(buft),
-                    this_size, max_size);
-            for (size_t i = 0; i < n_buffers; i++) {
-                ggml_backend_buffer_free(buffers[i]);
-            }
-            free(buffers);
-            return NULL;
-        }
-
-        if ((cur_buf_size + this_size) > max_size) {
-            // allocate tensors in the current buffer
-            if (!alloc_tensor_range(ctx, first, t, buft, cur_buf_size, &buffers, &n_buffers)) {
-                return NULL;
-            }
-            first = t;
-            cur_buf_size = this_size;
-        } else {
-            cur_buf_size += this_size;
-        }
-    }
-
-    // allocate remaining tensors
-    if (cur_buf_size > 0) {
-        if (!alloc_tensor_range(ctx, first, NULL, buft, cur_buf_size, &buffers, &n_buffers)) {
-            return NULL;
-        }
-    }
-
-    if (n_buffers == 0) {
-#ifndef NDEBUG
-        fprintf(stderr, "%s: all tensors in the context are already allocated\n", __func__);
-#endif
-        return NULL;
-    }
-
-    ggml_backend_buffer_t buffer;
-    if (n_buffers == 1) {
-        buffer = buffers[0];
-    } else {
-        buffer = ggml_backend_multi_buffer_alloc_buffer(buffers, n_buffers);
-    }
-    free(buffers);
-    return buffer;
-}
-
-ggml_backend_buffer_t ggml_backend_alloc_ctx_tensors(struct ggml_context * ctx, ggml_backend_t backend) {
-    return ggml_backend_alloc_ctx_tensors_from_buft(ctx, ggml_backend_get_default_buffer_type(backend));
-}
diff --git a/ggml-alloc.h b/ggml-alloc.h
deleted file mode 100644 (file)
index 434c13b..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-#pragma once
-
-#include "ggml.h"
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-typedef struct ggml_backend_buffer_type * ggml_backend_buffer_type_t;
-typedef struct ggml_backend_buffer * ggml_backend_buffer_t;
-typedef struct ggml_backend * ggml_backend_t;
-
-// Tensor allocator
-struct ggml_tallocr {
-    ggml_backend_buffer_t buffer;
-    void * base;
-    size_t alignment;
-    size_t offset;
-};
-
-GGML_API struct ggml_tallocr ggml_tallocr_new(ggml_backend_buffer_t buffer);
-GGML_API void                ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor);
-
-// Graph allocator
-/*
-  Example usage:
-    ggml_gallocr_t galloc = ggml_gallocr_new(ggml_bacckend_cpu_buffer_type());
-
-    // optional: create a worst-case graph and reserve the buffers to avoid reallocations
-    ggml_gallocr_reserve(galloc, build_graph(max_batch));
-
-    // allocate the graph
-    struct ggml_cgraph * graph = build_graph(batch);
-    ggml_gallocr_alloc_graph(galloc, graph);
-
-    printf("compute buffer size: %zu bytes\n", ggml_gallocr_get_buffer_size(galloc, 0));
-
-    // evaluate the graph
-    ggml_backend_graph_compute(backend, graph);
-*/
-
-// special tensor flags for use with the graph allocator:
-//   ggml_set_input(): all input tensors are allocated at the beginning of the graph in non-overlapping addresses
-//   ggml_set_output(): output tensors are never freed and never overwritten
-
-typedef struct ggml_gallocr * ggml_gallocr_t;
-
-GGML_API ggml_gallocr_t ggml_gallocr_new(ggml_backend_buffer_type_t buft);
-GGML_API ggml_gallocr_t ggml_gallocr_new_n(ggml_backend_buffer_type_t * bufts, int n_bufs);
-GGML_API void           ggml_gallocr_free(ggml_gallocr_t galloc);
-
-// pre-allocate buffers from a measure graph - does not allocate or modify the graph
-// call with a worst-case graph to avoid buffer reallocations
-// not strictly required for single buffer usage: ggml_gallocr_alloc_graph will reallocate the buffers automatically if needed
-// returns false if the buffer allocation failed
-GGML_API bool ggml_gallocr_reserve(ggml_gallocr_t galloc, struct ggml_cgraph * graph);
-GGML_API bool ggml_gallocr_reserve_n(
-    ggml_gallocr_t galloc,
-    struct ggml_cgraph * graph,
-    const int * node_buffer_ids,
-    const int * leaf_buffer_ids);
-
-// automatic reallocation if the topology changes when using a single buffer
-// returns false if using multiple buffers and a re-allocation is needed (call ggml_gallocr_reserve_n first to set the node buffers)
-GGML_API bool ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, struct ggml_cgraph * graph);
-
-GGML_API size_t ggml_gallocr_get_buffer_size(ggml_gallocr_t galloc, int buffer_id);
-
-// Utils
-// Create a buffer and allocate all the tensors in a ggml_context
-GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors_from_buft(struct ggml_context * ctx, ggml_backend_buffer_type_t buft);
-GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors(struct ggml_context * ctx, ggml_backend_t backend);
-
-#ifdef  __cplusplus
-}
-#endif
diff --git a/ggml-backend-impl.h b/ggml-backend-impl.h
deleted file mode 100644 (file)
index 36ca370..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-#pragma once
-
-// ggml-backend internal header
-
-#include "ggml-backend.h"
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-    //
-    // Backend buffer
-    //
-
-    // buffer type
-    typedef void * ggml_backend_buffer_type_context_t;
-
-    struct ggml_backend_buffer_type_i {
-        const char *          (*GGML_CALL get_name)        (ggml_backend_buffer_type_t buft);
-        // allocate a buffer of this type
-        ggml_backend_buffer_t (*GGML_CALL alloc_buffer)    (ggml_backend_buffer_type_t buft, size_t size);
-        // tensor alignment
-        size_t                (*GGML_CALL get_alignment)   (ggml_backend_buffer_type_t buft);
-        // max buffer size that can be allocated
-        size_t                (*GGML_CALL get_max_size)    (ggml_backend_buffer_type_t buft);
-        // data size needed to allocate the tensor, including padding
-        size_t                (*GGML_CALL get_alloc_size)  (ggml_backend_buffer_type_t buft, const struct ggml_tensor * tensor);
-        // check if tensor data is in host memory
-        bool                  (*GGML_CALL is_host)         (ggml_backend_buffer_type_t buft);
-    };
-
-    struct ggml_backend_buffer_type {
-        struct ggml_backend_buffer_type_i  iface;
-        ggml_backend_buffer_type_context_t context;
-    };
-
-    // buffer
-    typedef void * ggml_backend_buffer_context_t;
-
-    struct ggml_backend_buffer_i {
-        const char * (*GGML_CALL get_name)   (ggml_backend_buffer_t buffer);
-        void         (*GGML_CALL free_buffer)(ggml_backend_buffer_t buffer);
-        void *       (*GGML_CALL get_base)   (ggml_backend_buffer_t buffer);
-        void         (*GGML_CALL init_tensor)(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
-        void         (*GGML_CALL set_tensor) (ggml_backend_buffer_t buffer,       struct ggml_tensor * tensor, const void * data, size_t offset, size_t size);
-        void         (*GGML_CALL get_tensor) (ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor,       void * data, size_t offset, size_t size);
-        bool         (*GGML_CALL cpy_tensor) (ggml_backend_buffer_t buffer, const struct ggml_tensor * src, struct ggml_tensor * dst); // dst is in the buffer, src may be in any buffer
-        void         (*GGML_CALL clear)      (ggml_backend_buffer_t buffer, uint8_t value);
-        void         (*GGML_CALL reset)      (ggml_backend_buffer_t buffer); // reset any internal state due to tensor initialization, such as tensor extras
-    };
-
-    struct ggml_backend_buffer {
-        struct ggml_backend_buffer_i  iface;
-        ggml_backend_buffer_type_t    buft;
-        ggml_backend_buffer_context_t context;
-        size_t size;
-        enum ggml_backend_buffer_usage usage;
-    };
-
-    GGML_CALL ggml_backend_buffer_t ggml_backend_buffer_init(
-                   ggml_backend_buffer_type_t      buft,
-            struct ggml_backend_buffer_i           iface,
-                   ggml_backend_buffer_context_t   context,
-                   size_t                          size);
-
-    // do not use directly, use ggml_backend_tensor_copy instead
-    bool ggml_backend_buffer_copy_tensor(const struct ggml_tensor * src, struct ggml_tensor * dst);
-
-    // buffer that contains a collection of buffers
-    GGML_CALL ggml_backend_buffer_t ggml_backend_multi_buffer_alloc_buffer(ggml_backend_buffer_t * buffers, size_t n_buffers);
-    GGML_CALL bool                  ggml_backend_buffer_is_multi_buffer(ggml_backend_buffer_t buffer);
-    GGML_CALL void                  ggml_backend_multi_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage);
-
-    //
-    // Backend
-    //
-
-    typedef void * ggml_backend_context_t;
-
-    struct ggml_backend_i {
-        const char * (*GGML_CALL get_name)(ggml_backend_t backend);
-
-        void (*GGML_CALL free)(ggml_backend_t backend);
-
-        // buffer allocation
-        ggml_backend_buffer_type_t (*GGML_CALL get_default_buffer_type)(ggml_backend_t backend);
-
-        // (optional) asynchronous tensor data access
-        void (*GGML_CALL set_tensor_async)(ggml_backend_t backend,       struct ggml_tensor * tensor, const void * data, size_t offset, size_t size);
-        void (*GGML_CALL get_tensor_async)(ggml_backend_t backend, const struct ggml_tensor * tensor,       void * data, size_t offset, size_t size);
-        bool (*GGML_CALL cpy_tensor_async)(ggml_backend_t backend_src, ggml_backend_t backend_dst, const struct ggml_tensor * src, struct ggml_tensor * dst);
-
-        // (optional) complete all pending operations
-        void (*GGML_CALL synchronize)(ggml_backend_t backend);
-
-        // compute graph with a plan (not used currently)
-        // create a new plan for a graph
-        ggml_backend_graph_plan_t (*GGML_CALL graph_plan_create) (ggml_backend_t backend, const struct ggml_cgraph * cgraph);
-        void                      (*GGML_CALL graph_plan_free)   (ggml_backend_t backend, ggml_backend_graph_plan_t plan);
-        // update the plan with a new graph - this should be faster than creating a new plan when the graph has the same topology
-        void                      (*GGML_CALL graph_plan_update) (ggml_backend_t backend, ggml_backend_graph_plan_t plan, const struct ggml_cgraph * cgraph);
-        // compute the graph with the plan
-        enum ggml_status          (*GGML_CALL graph_plan_compute)(ggml_backend_t backend, ggml_backend_graph_plan_t plan);
-
-        // compute graph without a plan (async)
-        enum ggml_status (*GGML_CALL graph_compute)     (ggml_backend_t backend, struct ggml_cgraph * cgraph);
-
-        // check if the backend can compute an operation
-        bool (*GGML_CALL supports_op)(ggml_backend_t backend, const struct ggml_tensor * op);
-
-        // check if the backend can use tensors allocated in a buffer type
-        bool (*GGML_CALL supports_buft)(ggml_backend_t backend, ggml_backend_buffer_type_t buft);
-
-        // check if the backend wants to run an operation, even if the weights are allocated in a CPU buffer
-        // these should be expensive operations with large batch sizes that may benefit from running on this backend
-        // even if the weight has to be copied from the CPU temporarily
-        bool (*GGML_CALL offload_op)(ggml_backend_t backend, const struct ggml_tensor * op);
-
-        // (optional) event synchronization
-        // create a new event that can record events on this backend instance
-        ggml_backend_event_t (*GGML_CALL event_new)         (ggml_backend_t backend);
-        void                 (*GGML_CALL event_free)        (ggml_backend_event_t event);
-        // record an event on the backend instance that created it
-        void                 (*GGML_CALL event_record)      (ggml_backend_event_t event);
-        // wait for an event on on a different backend instance
-        void                 (*GGML_CALL event_wait)        (ggml_backend_t backend, ggml_backend_event_t event);
-        // block until an event is recorded
-        void                 (*GGML_CALL event_synchronize) (ggml_backend_event_t event);
-    };
-
-    struct ggml_backend {
-        ggml_guid_t guid;
-
-        struct ggml_backend_i iface;
-        ggml_backend_context_t context;
-    };
-
-    struct ggml_backend_event {
-        ggml_backend_t backend;
-        void * context;
-    };
-
-    //
-    // Backend registry
-    //
-
-    typedef ggml_backend_t (*GGML_CALL ggml_backend_init_fn)(const char * params, void * user_data);
-
-    GGML_CALL void ggml_backend_register(const char * name, ggml_backend_init_fn init_fn, ggml_backend_buffer_type_t default_buffer_type, void * user_data);
-
-#ifdef  __cplusplus
-}
-#endif
diff --git a/ggml-backend.c b/ggml-backend.c
deleted file mode 100644 (file)
index 1742979..0000000
+++ /dev/null
@@ -1,2225 +0,0 @@
-#include "ggml-backend-impl.h"
-#include "ggml-alloc.h"
-#include "ggml-impl.h"
-
-#include <assert.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-
-// backend buffer type
-
-const char * ggml_backend_buft_name(ggml_backend_buffer_type_t buft) {
-    return buft->iface.get_name(buft);
-}
-
-GGML_CALL ggml_backend_buffer_t ggml_backend_buft_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    return buft->iface.alloc_buffer(buft, size);
-}
-
-size_t ggml_backend_buft_get_alignment(ggml_backend_buffer_type_t buft) {
-    return buft->iface.get_alignment(buft);
-}
-
-size_t ggml_backend_buft_get_max_size(ggml_backend_buffer_type_t buft) {
-    // get_max_size is optional, defaults to SIZE_MAX
-    if (buft->iface.get_max_size) {
-        return buft->iface.get_max_size(buft);
-    }
-    return SIZE_MAX;
-}
-
-GGML_CALL size_t ggml_backend_buft_get_alloc_size(ggml_backend_buffer_type_t buft, struct ggml_tensor * tensor) {
-    // get_alloc_size is optional, defaults to ggml_nbytes
-    if (buft->iface.get_alloc_size) {
-        size_t size = buft->iface.get_alloc_size(buft, tensor);
-        assert(size >= ggml_nbytes(tensor));
-        return size;
-    }
-    return ggml_nbytes(tensor);
-}
-
-bool ggml_backend_buft_is_host(ggml_backend_buffer_type_t buft) {
-    if (buft->iface.is_host) {
-        return buft->iface.is_host(buft);
-    }
-    return false;
-}
-
-// backend buffer
-
-GGML_CALL ggml_backend_buffer_t ggml_backend_buffer_init(
-               ggml_backend_buffer_type_t      buft,
-        struct ggml_backend_buffer_i           iface,
-               ggml_backend_buffer_context_t   context,
-               size_t                          size) {
-    ggml_backend_buffer_t buffer = malloc(sizeof(struct ggml_backend_buffer));
-
-    (*buffer) = (struct ggml_backend_buffer) {
-        /* .interface = */ iface,
-        /* .buft      = */ buft,
-        /* .context   = */ context,
-        /* .size      = */ size,
-        /* .usage     = */ GGML_BACKEND_BUFFER_USAGE_ANY
-    };
-
-    return buffer;
-}
-
-const char * ggml_backend_buffer_name(ggml_backend_buffer_t buffer) {
-    return buffer->iface.get_name(buffer);
-}
-
-void ggml_backend_buffer_free(ggml_backend_buffer_t buffer) {
-    if (buffer == NULL) {
-        return;
-    }
-
-    if (buffer->iface.free_buffer != NULL) {
-        buffer->iface.free_buffer(buffer);
-    }
-    free(buffer);
-}
-
-size_t ggml_backend_buffer_get_size(ggml_backend_buffer_t buffer) {
-    return buffer->size;
-}
-
-void * ggml_backend_buffer_get_base(ggml_backend_buffer_t buffer) {
-    void * base = buffer->iface.get_base(buffer);
-
-    GGML_ASSERT(base != NULL && "backend buffer base cannot be NULL");
-
-    return base;
-}
-
-GGML_CALL void ggml_backend_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
-    // init_tensor is optional
-    if (buffer->iface.init_tensor) {
-        buffer->iface.init_tensor(buffer, tensor);
-    }
-}
-
-size_t ggml_backend_buffer_get_alignment (ggml_backend_buffer_t buffer) {
-    return ggml_backend_buft_get_alignment(ggml_backend_buffer_get_type(buffer));
-}
-
-size_t ggml_backend_buffer_get_max_size(ggml_backend_buffer_t buffer) {
-    return ggml_backend_buft_get_max_size(ggml_backend_buffer_get_type(buffer));
-}
-
-size_t ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
-    return ggml_backend_buft_get_alloc_size(ggml_backend_buffer_get_type(buffer), tensor);
-}
-
-void ggml_backend_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
-    buffer->iface.clear(buffer, value);
-}
-
-bool ggml_backend_buffer_is_host(ggml_backend_buffer_t buffer) {
-    return ggml_backend_buft_is_host(ggml_backend_buffer_get_type(buffer));
-}
-
-void ggml_backend_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage) {
-    buffer->usage = usage;
-
-    // FIXME: add a generic callback to the buffer interface
-    if (ggml_backend_buffer_is_multi_buffer(buffer)) {
-        ggml_backend_multi_buffer_set_usage(buffer, usage);
-    }
-}
-
-ggml_backend_buffer_type_t ggml_backend_buffer_get_type(ggml_backend_buffer_t buffer) {
-    return buffer->buft;
-}
-
-void ggml_backend_buffer_reset(ggml_backend_buffer_t buffer) {
-    if (buffer->iface.reset) {
-        buffer->iface.reset(buffer);
-    }
-}
-
-bool ggml_backend_buffer_copy_tensor(const struct ggml_tensor * src, struct ggml_tensor * dst) {
-    ggml_backend_buffer_t dst_buf = dst->view_src ? dst->view_src->buffer : dst->buffer;
-    if (dst_buf->iface.cpy_tensor) {
-        return dst_buf->iface.cpy_tensor(dst_buf, src, dst);
-    }
-    return false;
-}
-
-// backend
-
-ggml_guid_t ggml_backend_guid(ggml_backend_t backend) {
-    if (backend == NULL) {
-        return NULL;
-    }
-    return backend->guid;
-}
-
-const char * ggml_backend_name(ggml_backend_t backend) {
-    if (backend == NULL) {
-        return "NULL";
-    }
-    return backend->iface.get_name(backend);
-}
-
-void ggml_backend_free(ggml_backend_t backend) {
-    if (backend == NULL) {
-        return;
-    }
-
-    backend->iface.free(backend);
-}
-
-ggml_backend_buffer_type_t ggml_backend_get_default_buffer_type(ggml_backend_t backend) {
-    return backend->iface.get_default_buffer_type(backend);
-}
-
-ggml_backend_buffer_t ggml_backend_alloc_buffer(ggml_backend_t backend, size_t size) {
-    return ggml_backend_buft_alloc_buffer(ggml_backend_get_default_buffer_type(backend), size);
-}
-
-size_t ggml_backend_get_alignment(ggml_backend_t backend) {
-    return ggml_backend_buft_get_alignment(ggml_backend_get_default_buffer_type(backend));
-}
-
-size_t ggml_backend_get_max_size(ggml_backend_t backend) {
-    return ggml_backend_buft_get_max_size(ggml_backend_get_default_buffer_type(backend));
-}
-
-void ggml_backend_tensor_set_async(ggml_backend_t backend, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    GGML_ASSERT(tensor->data != NULL && "tensor not allocated");
-    GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor write out of bounds");
-
-    if (backend->iface.set_tensor_async == NULL) {
-        ggml_backend_tensor_set(tensor, data, offset, size);
-    } else {
-        backend->iface.set_tensor_async(backend, tensor, data, offset, size);
-    }
-}
-
-void ggml_backend_tensor_get_async(ggml_backend_t backend, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    GGML_ASSERT(tensor->data != NULL && "tensor not allocated");
-    GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor read out of bounds");
-
-    if (backend->iface.get_tensor_async == NULL) {
-        ggml_backend_tensor_get(tensor, data, offset, size);
-    } else {
-        backend->iface.get_tensor_async(backend, tensor, data, offset, size);
-    }
-}
-
-GGML_CALL void ggml_backend_tensor_set(struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
-
-    GGML_ASSERT(buf != NULL && "tensor buffer not set");
-    GGML_ASSERT(tensor->data != NULL && "tensor not allocated");
-    GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor write out of bounds");
-
-    if (!size) {
-        return;
-    }
-
-    buf->iface.set_tensor(buf, tensor, data, offset, size);
-}
-
-GGML_CALL void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
-
-    GGML_ASSERT(buf != NULL && "tensor buffer not set");
-    GGML_ASSERT(tensor->data != NULL && "tensor not allocated");
-    GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor read out of bounds");
-
-    if (!size) {
-        return;
-    }
-
-    buf->iface.get_tensor(buf, tensor, data, offset, size);
-}
-
-void ggml_backend_synchronize(ggml_backend_t backend) {
-    if (backend->iface.synchronize == NULL) {
-        return;
-    }
-
-    backend->iface.synchronize(backend);
-}
-
-ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
-    GGML_ASSERT(backend->iface.graph_plan_create != NULL);
-
-    return backend->iface.graph_plan_create(backend, cgraph);
-}
-
-void ggml_backend_graph_plan_free(ggml_backend_t backend, ggml_backend_graph_plan_t plan) {
-    GGML_ASSERT(backend->iface.graph_plan_free != NULL);
-
-    backend->iface.graph_plan_free(backend, plan);
-}
-
-enum ggml_status ggml_backend_graph_plan_compute(ggml_backend_t backend, ggml_backend_graph_plan_t plan) {
-    GGML_ASSERT(backend->iface.graph_plan_compute != NULL);
-
-    return backend->iface.graph_plan_compute(backend, plan);
-}
-
-enum ggml_status ggml_backend_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
-    enum ggml_status err = ggml_backend_graph_compute_async(backend, cgraph);
-    ggml_backend_synchronize(backend);
-    return err;
-}
-
-enum ggml_status ggml_backend_graph_compute_async(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
-    return backend->iface.graph_compute(backend, cgraph);
-}
-
-bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
-    return backend->iface.supports_op(backend, op);
-}
-
-bool ggml_backend_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
-    return backend->iface.supports_buft(backend, buft);
-}
-
-bool ggml_backend_offload_op(ggml_backend_t backend, const struct ggml_tensor * op) {
-    if (backend->iface.offload_op != NULL) {
-        return backend->iface.offload_op(backend, op);
-    }
-    return false;
-}
-
-// backend copy
-
-static bool ggml_are_same_layout(const struct ggml_tensor * a, const struct ggml_tensor * b) {
-    if (a->type != b->type) {
-        return false;
-    }
-    for (int i = 0; i < GGML_MAX_DIMS; i++) {
-        if (a->ne[i] != b->ne[i]) {
-            return false;
-        }
-        if (a->nb[i] != b->nb[i]) {
-            return false;
-        }
-    }
-    return true;
-}
-
-void ggml_backend_tensor_copy(struct ggml_tensor * src, struct ggml_tensor * dst) {
-    GGML_ASSERT(ggml_are_same_layout(src, dst) && "cannot copy tensors with different layouts");
-
-    if (src == dst) {
-        return;
-    }
-
-    if (ggml_backend_buffer_is_host(src->buffer)) {
-        ggml_backend_tensor_set(dst, src->data, 0, ggml_nbytes(src));
-    } else if (ggml_backend_buffer_is_host(dst->buffer)) {
-        ggml_backend_tensor_get(src, dst->data, 0, ggml_nbytes(src));
-    } else if (!ggml_backend_buffer_copy_tensor(src, dst)) {
-#ifndef NDEBUG
-        fprintf(stderr, "%s: warning: slow copy from %s to %s\n", __func__, ggml_backend_buffer_name(src->buffer), ggml_backend_buffer_name(dst->buffer));
-#endif
-        size_t nbytes = ggml_nbytes(src);
-        void * data = malloc(nbytes);
-        ggml_backend_tensor_get(src, data, 0, nbytes);
-        ggml_backend_tensor_set(dst, data, 0, nbytes);
-        free(data);
-    }
-}
-
-void ggml_backend_tensor_copy_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, struct ggml_tensor * src, struct ggml_tensor * dst) {
-    GGML_ASSERT(ggml_are_same_layout(src, dst) && "cannot copy tensors with different layouts");
-
-    if (src == dst) {
-        return;
-    }
-
-    if (backend_dst->iface.cpy_tensor_async != NULL) {
-        if (backend_dst->iface.cpy_tensor_async(backend_src, backend_dst, src, dst)) {
-            return;
-        }
-    }
-
-    // an async copy would normally happen after all the queued operations on both backends are completed
-    // sync src, set_async dst
-    if (ggml_backend_buffer_is_host(src->buffer)) {
-        ggml_backend_synchronize(backend_src);
-        ggml_backend_tensor_set_async(backend_dst, dst, src->data, 0, ggml_nbytes(src));
-    } else {
-        ggml_backend_synchronize(backend_src);
-        ggml_backend_tensor_copy(src, dst);
-        ggml_backend_synchronize(backend_dst);
-    }
-}
-
-// events
-
-ggml_backend_event_t ggml_backend_event_new(ggml_backend_t backend) {
-    if (backend->iface.event_new == NULL) {
-        return NULL;
-    }
-    return backend->iface.event_new(backend);
-}
-
-void ggml_backend_event_free(ggml_backend_event_t event) {
-    if (event == NULL) {
-        return;
-    }
-    event->backend->iface.event_free(event);
-}
-
-void ggml_backend_event_record(ggml_backend_event_t event) {
-    GGML_ASSERT(event->backend->iface.event_record != NULL);
-
-    event->backend->iface.event_record(event);
-}
-
-void ggml_backend_event_synchronize(ggml_backend_event_t event) {
-    GGML_ASSERT(event->backend->iface.event_synchronize != NULL);
-
-    event->backend->iface.event_synchronize(event);
-}
-
-void ggml_backend_event_wait(ggml_backend_t backend, ggml_backend_event_t event) {
-    GGML_ASSERT(backend->iface.event_wait != NULL);
-
-    backend->iface.event_wait(backend, event);
-}
-
-// backend registry
-
-#define GGML_REG_MAX_BACKENDS 16
-
-struct ggml_backend_reg {
-    char name[128];
-    ggml_backend_init_fn init_fn;
-    ggml_backend_buffer_type_t default_buffer_type;
-    void * user_data;
-};
-
-static struct ggml_backend_reg ggml_backend_registry[GGML_REG_MAX_BACKENDS];
-static size_t ggml_backend_registry_count = 0;
-
-GGML_CALL static ggml_backend_t ggml_backend_reg_cpu_init(const char * params, void * user_data);
-
-GGML_CALL static void ggml_backend_registry_init(void) {
-    static bool initialized = false;
-
-    if (initialized) {
-        return;
-    }
-
-    initialized = true;
-
-    ggml_backend_register("CPU", ggml_backend_reg_cpu_init, ggml_backend_cpu_buffer_type(), NULL);
-
-    // add forward decls here to avoid including the backend headers
-#ifdef GGML_USE_CUDA
-    extern GGML_CALL void ggml_backend_cuda_reg_devices(void);
-    ggml_backend_cuda_reg_devices();
-#endif
-
-#ifdef GGML_USE_SYCL
-    extern void ggml_backend_sycl_reg_devices(void);
-    ggml_backend_sycl_reg_devices();
-#endif
-
-#ifdef GGML_USE_METAL
-    extern GGML_CALL ggml_backend_t ggml_backend_reg_metal_init(const char * params, void * user_data);
-    extern GGML_CALL ggml_backend_buffer_type_t ggml_backend_metal_buffer_type(void);
-    ggml_backend_register("Metal", ggml_backend_reg_metal_init, ggml_backend_metal_buffer_type(), NULL);
-#endif
-
-#ifdef GGML_USE_VULKAN
-    extern GGML_CALL int ggml_backend_vk_reg_devices(void);
-    ggml_backend_vk_reg_devices();
-#endif
-
-#ifdef GGML_USE_KOMPUTE
-    extern GGML_CALL void ggml_backend_kompute_reg_devices(void);
-    ggml_backend_kompute_reg_devices();
-#endif
-}
-
-GGML_CALL void ggml_backend_register(const char * name, ggml_backend_init_fn init_fn, ggml_backend_buffer_type_t default_buffer_type, void * user_data) {
-    GGML_ASSERT(ggml_backend_registry_count < GGML_REG_MAX_BACKENDS);
-
-    size_t id = ggml_backend_registry_count;
-
-    ggml_backend_registry[id] = (struct ggml_backend_reg) {
-        /* .name                = */ {0},
-        /* .fn                  = */ init_fn,
-        /* .default_buffer_type = */ default_buffer_type,
-        /* .user_data           = */ user_data,
-    };
-
-    snprintf(ggml_backend_registry[id].name, sizeof(ggml_backend_registry[id].name), "%s", name);
-
-#ifndef NDEBUG
-    fprintf(stderr, "%s: registered backend %s\n", __func__, name);
-#endif
-
-    ggml_backend_registry_count++;
-}
-
-size_t ggml_backend_reg_get_count(void) {
-    ggml_backend_registry_init();
-
-    return ggml_backend_registry_count;
-}
-
-size_t ggml_backend_reg_find_by_name(const char * name) {
-    ggml_backend_registry_init();
-
-    for (size_t i = 0; i < ggml_backend_registry_count; i++) {
-        // TODO: case insensitive in a portable way
-        if (strcmp(ggml_backend_registry[i].name, name) == 0) {
-            return i;
-        }
-    }
-
-    // not found
-    return SIZE_MAX;
-}
-
-// init from backend:params string
-ggml_backend_t ggml_backend_reg_init_backend_from_str(const char * backend_str) {
-    ggml_backend_registry_init();
-
-    const char * params = strchr(backend_str, ':');
-    char backend_name[128];
-    if (params == NULL) {
-        snprintf(backend_name, sizeof(backend_name), "%s", backend_str);
-        params = "";
-    } else {
-        snprintf(backend_name, sizeof(backend_name), "%.*s", (int)(params - backend_str), backend_str);
-        params++;
-    }
-
-    size_t backend_i = ggml_backend_reg_find_by_name(backend_name);
-
-    if (backend_i == SIZE_MAX) {
-        fprintf(stderr, "%s: backend %s not found\n", __func__, backend_name);
-        return NULL;
-    }
-
-    return ggml_backend_reg_init_backend(backend_i, params);
-}
-
-const char * ggml_backend_reg_get_name(size_t i) {
-    ggml_backend_registry_init();
-
-    GGML_ASSERT(i < ggml_backend_registry_count);
-    return ggml_backend_registry[i].name;
-}
-
-ggml_backend_t ggml_backend_reg_init_backend(size_t i, const char * params) {
-    ggml_backend_registry_init();
-
-    GGML_ASSERT(i < ggml_backend_registry_count);
-    return ggml_backend_registry[i].init_fn(params, ggml_backend_registry[i].user_data);
-}
-
-ggml_backend_buffer_type_t ggml_backend_reg_get_default_buffer_type(size_t i) {
-    ggml_backend_registry_init();
-
-    GGML_ASSERT(i < ggml_backend_registry_count);
-    return ggml_backend_registry[i].default_buffer_type;
-}
-
-ggml_backend_buffer_t ggml_backend_reg_alloc_buffer(size_t i, size_t size) {
-    ggml_backend_registry_init();
-
-    GGML_ASSERT(i < ggml_backend_registry_count);
-    return ggml_backend_buft_alloc_buffer(ggml_backend_registry[i].default_buffer_type, size);
-}
-
-// backend CPU
-
-static const size_t TENSOR_ALIGNMENT = 32; // required for mmap as gguf only guarantees 32-byte alignment
-
-GGML_CALL static const char * ggml_backend_cpu_buffer_name(ggml_backend_buffer_t buffer) {
-    return "CPU";
-
-    GGML_UNUSED(buffer);
-}
-
-GGML_CALL static void * ggml_backend_cpu_buffer_get_base(ggml_backend_buffer_t buffer) {
-    uintptr_t data = (uintptr_t)buffer->context;
-
-    // align the buffer
-    if (data % TENSOR_ALIGNMENT != 0) {
-        data = GGML_PAD(data, TENSOR_ALIGNMENT);
-    }
-
-    return (void *)data;
-}
-
-GGML_CALL static void ggml_backend_cpu_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    free(buffer->context);
-}
-
-GGML_CALL static void ggml_backend_cpu_buffer_set_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    memcpy((char *)tensor->data + offset, data, size);
-
-    GGML_UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_cpu_buffer_get_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    memcpy(data, (const char *)tensor->data + offset, size);
-
-    GGML_UNUSED(buffer);
-}
-
-GGML_CALL static bool ggml_backend_cpu_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * src, struct ggml_tensor * dst) {
-    if (ggml_backend_buffer_is_host(src->buffer)) {
-        memcpy(dst->data, src->data, ggml_nbytes(src));
-        return true;
-    }
-    return false;
-
-    GGML_UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_cpu_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
-    memset(buffer->context, value, buffer->size);
-}
-
-static struct ggml_backend_buffer_i cpu_backend_buffer_i = {
-    /* .get_name        = */ ggml_backend_cpu_buffer_name,
-    /* .free_buffer     = */ ggml_backend_cpu_buffer_free_buffer,
-    /* .get_base        = */ ggml_backend_cpu_buffer_get_base,
-    /* .init_tensor     = */ NULL, // no initialization required
-    /* .set_tensor      = */ ggml_backend_cpu_buffer_set_tensor,
-    /* .get_tensor      = */ ggml_backend_cpu_buffer_get_tensor,
-    /* .cpy_tensor      = */ ggml_backend_cpu_buffer_cpy_tensor,
-    /* .clear           = */ ggml_backend_cpu_buffer_clear,
-    /* .reset           = */ NULL,
-};
-
-// for buffers from ptr, free is not called
-static struct ggml_backend_buffer_i cpu_backend_buffer_i_from_ptr = {
-    /* .get_name        = */ ggml_backend_cpu_buffer_name,
-    /* .free_buffer     = */ NULL, // ptr is not owned by the buffer, so it does not need to be freed
-    /* .get_base        = */ ggml_backend_cpu_buffer_get_base,
-    /* .init_tensor     = */ NULL, // no initialization required
-    /* .set_tensor      = */ ggml_backend_cpu_buffer_set_tensor,
-    /* .get_tensor      = */ ggml_backend_cpu_buffer_get_tensor,
-    /* .cpy_tensor      = */ ggml_backend_cpu_buffer_cpy_tensor,
-    /* .clear           = */ ggml_backend_cpu_buffer_clear,
-    /* .reset           = */ NULL,
-};
-
-GGML_CALL static const char * ggml_backend_cpu_buffer_type_get_name(ggml_backend_buffer_type_t buft) {
-    return "CPU";
-
-    GGML_UNUSED(buft);
-}
-
-GGML_CALL static ggml_backend_buffer_t ggml_backend_cpu_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    size += TENSOR_ALIGNMENT;   // malloc may return an address that is not aligned
-    void * data = malloc(size); // TODO: use GGML_ALIGNED_MALLOC (move to ggml-impl.h)
-    if (data == NULL) {
-        fprintf(stderr, "%s: failed to allocate buffer of size %zu\n", __func__, size);
-        return NULL;
-    }
-
-    return ggml_backend_buffer_init(buft, cpu_backend_buffer_i, data, size);
-}
-
-GGML_CALL static size_t ggml_backend_cpu_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
-    return TENSOR_ALIGNMENT;
-
-    GGML_UNUSED(buft);
-}
-
-GGML_CALL static bool ggml_backend_cpu_buffer_type_is_host(ggml_backend_buffer_type_t buft) {
-    return true;
-
-    GGML_UNUSED(buft);
-}
-
-GGML_CALL ggml_backend_buffer_type_t ggml_backend_cpu_buffer_type(void) {
-    static struct ggml_backend_buffer_type ggml_backend_cpu_buffer_type = {
-        /* .iface = */ {
-            /* .get_name         = */ ggml_backend_cpu_buffer_type_get_name,
-            /* .alloc_buffer     = */ ggml_backend_cpu_buffer_type_alloc_buffer,
-            /* .get_alignment    = */ ggml_backend_cpu_buffer_type_get_alignment,
-            /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
-            /* .get_alloc_size   = */ NULL, // defaults to ggml_nbytes
-            /* .is_host          = */ ggml_backend_cpu_buffer_type_is_host,
-        },
-        /* .context = */ NULL,
-    };
-
-    return &ggml_backend_cpu_buffer_type;
-}
-
-#ifdef GGML_USE_CPU_HBM
-
-// buffer type HBM
-
-#include <hbwmalloc.h>
-
-GGML_CALL static const char * ggml_backend_cpu_hbm_buffer_type_get_name(ggml_backend_buffer_type_t buft) {
-    return "CPU_HBM";
-
-    GGML_UNUSED(buft);
-}
-
-GGML_CALL static const char * ggml_backend_cpu_hbm_buffer_get_name(ggml_backend_buffer_t buf) {
-    return "CPU_HBM";
-
-    GGML_UNUSED(buf);
-}
-
-GGML_CALL static void ggml_backend_cpu_hbm_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    hbw_free(buffer->context);
-}
-
-GGML_CALL static ggml_backend_buffer_t ggml_backend_cpu_hbm_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    //void * ptr = hbw_malloc(size);
-    void * ptr;
-    int result = hbw_posix_memalign(&ptr, ggml_backend_cpu_buffer_type_get_alignment(buft), size);
-    if (result != 0) {
-        fprintf(stderr, "failed to allocate HBM buffer of size %zu\n", size);
-        return NULL;
-    }
-
-    ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size);
-    buffer->buft = buft;
-    buffer->iface.get_name = ggml_backend_cpu_hbm_buffer_get_name;
-    buffer->iface.free_buffer = ggml_backend_cpu_hbm_buffer_free_buffer;
-
-    return buffer;
-}
-
-ggml_backend_buffer_type_t ggml_backend_cpu_hbm_buffer_type(void) {
-    static struct ggml_backend_buffer_type ggml_backend_cpu_buffer_type_hbm = {
-        /* .iface    = */ {
-            /* .get_name         = */ ggml_backend_cpu_hbm_buffer_type_get_name,
-            /* .alloc_buffer     = */ ggml_backend_cpu_hbm_buffer_type_alloc_buffer,
-            /* .get_alignment    = */ ggml_backend_cpu_buffer_type_get_alignment,
-            /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
-            /* .get_alloc_size   = */ NULL, // defaults to ggml_nbytes
-            /* .is_host          = */ ggml_backend_cpu_buffer_type_is_host,
-        },
-        /* .context  = */ NULL,
-    };
-
-    return &ggml_backend_cpu_buffer_type_hbm;
-}
-#endif
-
-struct ggml_backend_cpu_context {
-    int n_threads;
-    void * work_data;
-    size_t work_size;
-
-    ggml_abort_callback abort_callback;
-    void *              abort_callback_data;
-};
-
-GGML_CALL static const char * ggml_backend_cpu_name(ggml_backend_t backend) {
-    return "CPU";
-
-    GGML_UNUSED(backend);
-}
-
-GGML_CALL static void ggml_backend_cpu_free(ggml_backend_t backend) {
-    struct ggml_backend_cpu_context * cpu_ctx = (struct ggml_backend_cpu_context *)backend->context;
-    free(cpu_ctx->work_data);
-    free(cpu_ctx);
-    free(backend);
-}
-
-GGML_CALL static ggml_backend_buffer_type_t ggml_backend_cpu_get_default_buffer_type(ggml_backend_t backend) {
-    return ggml_backend_cpu_buffer_type();
-
-    GGML_UNUSED(backend);
-}
-
-struct ggml_backend_plan_cpu {
-    struct ggml_cplan cplan;
-    struct ggml_cgraph cgraph;
-};
-
-GGML_CALL static ggml_backend_graph_plan_t ggml_backend_cpu_graph_plan_create(ggml_backend_t backend, const struct ggml_cgraph * cgraph) {
-    struct ggml_backend_cpu_context * cpu_ctx = (struct ggml_backend_cpu_context *)backend->context;
-
-    struct ggml_backend_plan_cpu * cpu_plan = malloc(sizeof(struct ggml_backend_plan_cpu));
-
-    cpu_plan->cplan = ggml_graph_plan(cgraph, cpu_ctx->n_threads);
-    cpu_plan->cgraph = *cgraph; // FIXME: deep copy
-
-    if (cpu_plan->cplan.work_size > 0) {
-        cpu_plan->cplan.work_data = malloc(cpu_plan->cplan.work_size);
-        if (cpu_plan->cplan.work_data == NULL) {
-            free(cpu_plan);
-            return NULL;
-        }
-    }
-
-    cpu_plan->cplan.abort_callback      = cpu_ctx->abort_callback;
-    cpu_plan->cplan.abort_callback_data = cpu_ctx->abort_callback_data;
-
-    return cpu_plan;
-}
-
-GGML_CALL static void ggml_backend_cpu_graph_plan_free(ggml_backend_t backend, ggml_backend_graph_plan_t plan) {
-    struct ggml_backend_plan_cpu * cpu_plan = (struct ggml_backend_plan_cpu *)plan;
-
-    free(cpu_plan->cplan.work_data);
-    free(cpu_plan);
-
-    GGML_UNUSED(backend);
-}
-
-GGML_CALL static enum ggml_status ggml_backend_cpu_graph_plan_compute(ggml_backend_t backend, ggml_backend_graph_plan_t plan) {
-    struct ggml_backend_plan_cpu * cpu_plan = (struct ggml_backend_plan_cpu *)plan;
-
-    return ggml_graph_compute(&cpu_plan->cgraph, &cpu_plan->cplan);
-
-    GGML_UNUSED(backend);
-}
-
-GGML_CALL static enum ggml_status ggml_backend_cpu_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
-    struct ggml_backend_cpu_context * cpu_ctx = (struct ggml_backend_cpu_context *)backend->context;
-
-    struct ggml_cplan cplan = ggml_graph_plan(cgraph, cpu_ctx->n_threads);
-
-    if (cpu_ctx->work_size < cplan.work_size) {
-        free(cpu_ctx->work_data);
-        cpu_ctx->work_data = malloc(cplan.work_size);
-        if (cpu_ctx->work_data == NULL) {
-            cpu_ctx->work_size = 0;
-            return GGML_STATUS_ALLOC_FAILED;
-        }
-        cpu_ctx->work_size = cplan.work_size;
-    }
-    cplan.work_data = cpu_ctx->work_data;
-
-    cplan.abort_callback      = cpu_ctx->abort_callback;
-    cplan.abort_callback_data = cpu_ctx->abort_callback_data;
-
-    return ggml_graph_compute(cgraph, &cplan);
-}
-
-GGML_CALL static bool ggml_backend_cpu_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
-    switch (op->op) {
-        case GGML_OP_CPY:
-            return
-                op->type != GGML_TYPE_IQ2_XXS &&
-                op->type != GGML_TYPE_IQ2_XS  &&
-                op->type != GGML_TYPE_IQ1_S   &&
-                op->type != GGML_TYPE_IQ1_M; // missing type_traits.from_float
-        case GGML_OP_MUL_MAT:
-            return op->src[1]->type == GGML_TYPE_F32 || op->src[1]->type == ggml_internal_get_type_traits(op->src[0]->type).vec_dot_type;
-        default:
-            return true;
-    }
-
-    GGML_UNUSED(backend);
-}
-
-GGML_CALL static bool ggml_backend_cpu_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
-    return ggml_backend_buft_is_host(buft);
-
-    GGML_UNUSED(backend);
-}
-
-static struct ggml_backend_i cpu_backend_i = {
-    /* .get_name                = */ ggml_backend_cpu_name,
-    /* .free                    = */ ggml_backend_cpu_free,
-    /* .get_default_buffer_type = */ ggml_backend_cpu_get_default_buffer_type,
-    /* .set_tensor_async        = */ NULL,
-    /* .get_tensor_async        = */ NULL,
-    /* .cpy_tensor_async        = */ NULL,
-    /* .synchronize             = */ NULL,
-    /* .graph_plan_create       = */ ggml_backend_cpu_graph_plan_create,
-    /* .graph_plan_free         = */ ggml_backend_cpu_graph_plan_free,
-    /* .graph_plan_update       = */ NULL,
-    /* .graph_plan_compute      = */ ggml_backend_cpu_graph_plan_compute,
-    /* .graph_compute           = */ ggml_backend_cpu_graph_compute,
-    /* .supports_op             = */ ggml_backend_cpu_supports_op,
-    /* .supports_buft           = */ ggml_backend_cpu_supports_buft,
-    /* .offload_op              = */ NULL,
-    /* .event_new               = */ NULL,
-    /* .event_free              = */ NULL,
-    /* .event_record            = */ NULL,
-    /* .event_wait              = */ NULL,
-    /* .event_synchronize       = */ NULL,
-};
-
-static ggml_guid_t ggml_backend_cpu_guid(void) {
-    static ggml_guid guid = { 0xaa, 0x67, 0xc7, 0x43, 0x96, 0xe6, 0xa3, 0x8a, 0xe3, 0xaf, 0xea, 0x92, 0x36, 0xbc, 0xfc, 0x89 };
-    return &guid;
-}
-
-ggml_backend_t ggml_backend_cpu_init(void) {
-    struct ggml_backend_cpu_context * ctx = malloc(sizeof(struct ggml_backend_cpu_context));
-    if (ctx == NULL) {
-        return NULL;
-    }
-
-    ctx->n_threads           = GGML_DEFAULT_N_THREADS;
-    ctx->work_data           = NULL;
-    ctx->work_size           = 0;
-    ctx->abort_callback      = NULL;
-    ctx->abort_callback_data = NULL;
-
-    ggml_backend_t cpu_backend = malloc(sizeof(struct ggml_backend));
-    if (cpu_backend == NULL) {
-        free(ctx);
-        return NULL;
-    }
-
-    *cpu_backend = (struct ggml_backend) {
-        /* .guid      = */ ggml_backend_cpu_guid(),
-        /* .interface = */ cpu_backend_i,
-        /* .context   = */ ctx
-    };
-    return cpu_backend;
-}
-
-GGML_CALL bool ggml_backend_is_cpu(ggml_backend_t backend) {
-    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_cpu_guid());
-}
-
-void ggml_backend_cpu_set_n_threads(ggml_backend_t backend_cpu, int n_threads) {
-    GGML_ASSERT(ggml_backend_is_cpu(backend_cpu));
-
-    struct ggml_backend_cpu_context * ctx = (struct ggml_backend_cpu_context *)backend_cpu->context;
-    ctx->n_threads = n_threads;
-}
-
-void ggml_backend_cpu_set_abort_callback(ggml_backend_t backend_cpu, ggml_abort_callback abort_callback, void * abort_callback_data) {
-    GGML_ASSERT(ggml_backend_is_cpu(backend_cpu));
-
-    struct ggml_backend_cpu_context * ctx = (struct ggml_backend_cpu_context *)backend_cpu->context;
-    ctx->abort_callback = abort_callback;
-    ctx->abort_callback_data = abort_callback_data;
-}
-
-GGML_CALL ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_t size) {
-    GGML_ASSERT((uintptr_t)ptr % TENSOR_ALIGNMENT == 0 && "buffer pointer must be aligned");
-    return ggml_backend_buffer_init(ggml_backend_cpu_buffer_type(), cpu_backend_buffer_i_from_ptr, ptr, size);
-}
-
-GGML_CALL static ggml_backend_t ggml_backend_reg_cpu_init(const char * params, void * user_data) {
-    return ggml_backend_cpu_init();
-
-    GGML_UNUSED(params);
-    GGML_UNUSED(user_data);
-}
-
-// multi-buffer buffer
-
-struct ggml_backend_multi_buffer_context {
-    ggml_backend_buffer_t * buffers;
-    size_t n_buffers;
-};
-
-typedef struct ggml_backend_multi_buffer_context * ggml_backend_multi_buffer_context_t;
-
-GGML_CALL static const char * ggml_backend_multi_buffer_get_name(ggml_backend_buffer_t buffer) {
-    ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context;
-
-    return ctx->buffers[0]->iface.get_name(ctx->buffers[0]);
-}
-
-GGML_CALL static void ggml_backend_multi_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context;
-    for (size_t i = 0; i < ctx->n_buffers; i++) {
-        ggml_backend_buffer_free(ctx->buffers[i]);
-    }
-
-    free(ctx->buffers);
-    free(ctx);
-}
-
-GGML_CALL static void ggml_backend_multi_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
-    ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context;
-    for (size_t i = 0; i < ctx->n_buffers; i++) {
-        ggml_backend_buffer_clear(ctx->buffers[i], value);
-    }
-}
-
-static struct ggml_backend_buffer_i ggml_backend_multi_buffer_context_interface(void) {
-    static struct ggml_backend_buffer_i multi_backend_buffer_i = {
-        /* .get_name        = */ ggml_backend_multi_buffer_get_name,
-        /* .free_buffer     = */ ggml_backend_multi_buffer_free_buffer,
-        /* .get_base        = */ NULL,
-        /* .init_tensor     = */ NULL,
-        /* .set_tensor      = */ NULL,
-        /* .get_tensor      = */ NULL,
-        /* .cpy_tensor      = */ NULL,
-        /* .clear           = */ ggml_backend_multi_buffer_clear,
-        /* .reset           = */ NULL,
-    };
-
-    return multi_backend_buffer_i;
-}
-
-GGML_CALL ggml_backend_buffer_t ggml_backend_multi_buffer_alloc_buffer(ggml_backend_buffer_t * buffers, size_t n_buffers) {
-    ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) malloc(sizeof(struct ggml_backend_multi_buffer_context));
-    ctx->n_buffers = n_buffers;
-    ctx->buffers = (ggml_backend_buffer_t *) malloc(n_buffers * sizeof(ggml_backend_buffer_t));
-
-    GGML_ASSERT(ctx->buffers != NULL);
-
-    size_t total_size = 0;
-    for (size_t i = 0; i < n_buffers; i++) {
-        ctx->buffers[i] = buffers[i];
-        total_size += ggml_backend_buffer_get_size(buffers[i]);
-    }
-
-    return ggml_backend_buffer_init(buffers[0]->buft, ggml_backend_multi_buffer_context_interface(), ctx, total_size);
-}
-
-GGML_CALL bool ggml_backend_buffer_is_multi_buffer(ggml_backend_buffer_t buffer) {
-    return buffer->iface.get_name == ggml_backend_multi_buffer_get_name;
-}
-
-GGML_CALL void ggml_backend_multi_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage) {
-    GGML_ASSERT(ggml_backend_buffer_is_multi_buffer(buffer));
-    ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context;
-    for (size_t i = 0; i < ctx->n_buffers; i++) {
-        ggml_backend_buffer_set_usage(ctx->buffers[i], usage);
-    }
-}
-
-// creates a copy of the tensor with the same memory layout
-static struct ggml_tensor * ggml_dup_tensor_layout(struct ggml_context * ctx, const struct ggml_tensor * tensor) {
-    struct ggml_tensor * dup = ggml_dup_tensor(ctx, tensor);
-    for (int i = 0; i < GGML_MAX_DIMS; i++) {
-        dup->nb[i] = tensor->nb[i];
-    }
-    return dup;
-}
-
-static bool ggml_is_view_op(enum ggml_op op) {
-    return op == GGML_OP_VIEW || op == GGML_OP_RESHAPE || op == GGML_OP_PERMUTE || op == GGML_OP_TRANSPOSE;
-}
-
-// scheduler
-
-#ifndef GGML_SCHED_MAX_BACKENDS
-#define GGML_SCHED_MAX_BACKENDS 16
-#endif
-
-#ifndef GGML_SCHED_MAX_SPLITS
-#define GGML_SCHED_MAX_SPLITS 2048
-#endif
-
-#ifndef GGML_SCHED_MAX_SPLIT_INPUTS
-#define GGML_SCHED_MAX_SPLIT_INPUTS GGML_MAX_SRC
-#endif
-
-#ifndef GGML_SCHED_MAX_COPIES
-#define GGML_SCHED_MAX_COPIES 4
-#endif
-
-struct ggml_backend_sched_split {
-    int backend_id;
-    int i_start;
-    int i_end;
-    struct ggml_tensor * inputs[GGML_SCHED_MAX_SPLIT_INPUTS];
-    int n_inputs;
-    // graph view of this split
-    struct ggml_cgraph graph;
-};
-
-struct ggml_backend_sched {
-    bool is_reset; // true if the scheduler has been reset since the last graph split
-    bool is_alloc;
-
-    int n_backends;
-
-    ggml_backend_t backends[GGML_SCHED_MAX_BACKENDS];
-    ggml_backend_buffer_type_t bufts[GGML_SCHED_MAX_BACKENDS];
-    ggml_gallocr_t galloc;
-
-    // hash keys of the nodes in the graph
-    struct ggml_hash_set    hash_set;
-    // hash values
-    int * tensor_backend_id;
-    struct ggml_tensor * (* tensor_copies)[GGML_SCHED_MAX_BACKENDS][GGML_SCHED_MAX_COPIES];
-
-    int * node_backend_ids; // [graph_size]
-    int * leaf_backend_ids; // [graph_size]
-
-    int * prev_node_backend_ids; // [graph_size]
-    int * prev_leaf_backend_ids; // [graph_size]
-
-    // copy of the graph with modified inputs
-    struct ggml_cgraph * graph;
-
-    // graph splits
-    struct ggml_backend_sched_split * splits;
-    int n_splits;
-    int splits_capacity;
-
-    // pipeline parallelism support
-    int n_copies;
-    int cur_copy;
-    ggml_backend_event_t events[GGML_SCHED_MAX_BACKENDS][GGML_SCHED_MAX_COPIES];
-    struct ggml_tensor * graph_inputs[GGML_SCHED_MAX_SPLIT_INPUTS];
-    int n_graph_inputs;
-
-    struct ggml_context * ctx;
-
-    ggml_backend_sched_eval_callback callback_eval;
-    void * callback_eval_user_data;
-
-    bool debug;
-
-    // align context_buffer to GGML_MEM_ALIGN
-#ifdef _MSC_VER
-    __declspec(align(GGML_MEM_ALIGN))
-#else
-    __attribute__((aligned(GGML_MEM_ALIGN)))
-#endif
-    char context_buffer[GGML_SCHED_MAX_SPLITS*GGML_SCHED_MAX_SPLIT_INPUTS*2*sizeof(struct ggml_tensor) + sizeof(struct ggml_cgraph)];
-};
-
-#define hash_id(tensor) ggml_hash_find_or_insert(sched->hash_set, tensor)
-#define tensor_backend_id(tensor) sched->tensor_backend_id[hash_id(tensor)]
-
-// returns the priority of the backend, lower id is higher priority
-static int ggml_backend_sched_backend_id(ggml_backend_sched_t sched, ggml_backend_t backend) {
-    for (int i = 0; i < sched->n_backends; i++) {
-        if (sched->backends[i] == backend) {
-            return i;
-        }
-    }
-    return -1;
-}
-
-static int ggml_backend_sched_backend_from_buffer(ggml_backend_sched_t sched, const struct ggml_tensor * tensor, const struct ggml_tensor * op) {
-    ggml_backend_buffer_t buffer = tensor->buffer;
-    if (buffer == NULL) {
-        return -1;
-    }
-
-    // find highest prio backend that supports the buffer type and the op
-    for (int i = 0; i < sched->n_backends; i++) {
-        if (ggml_backend_supports_buft(sched->backends[i], buffer->buft) &&
-            ggml_backend_supports_op(sched->backends[i], op)) {
-            return i;
-        }
-    }
-
-#ifndef NDEBUG
-    fprintf(stderr, "%s: warning: no backend supports op %s with a weight with buffer type %s used in tensor %s, the weight will need to be copied\n",
-        __func__, ggml_op_desc(tensor), ggml_backend_buffer_name(buffer), tensor->name);
-#endif
-
-    return -1;
-}
-
-#if 0
-static char causes[GGML_DEFAULT_GRAPH_SIZE*16 + GGML_SCHED_MAX_SPLITS*GGML_SCHED_MAX_SPLIT_INPUTS][128]; // debug only
-#define SET_CAUSE(node, ...) sprintf(causes[hash_id(node)], __VA_ARGS__)
-#define GET_CAUSE(node) causes[hash_id(node)]
-#else
-#define SET_CAUSE(node, ...)
-#define GET_CAUSE(node) ""
-#endif
-
-// returns the backend that should be used for the node based on the current locations
-static int ggml_backend_sched_backend_id_from_cur(ggml_backend_sched_t sched, struct ggml_tensor * tensor) {
-    // TODO: use supports_op to check if the backend supports the op
-
-    // assign pre-allocated nodes to their backend
-    int cur_backend_id = ggml_backend_sched_backend_from_buffer(sched, tensor, tensor);
-    if (cur_backend_id != -1) {
-        SET_CAUSE(tensor, "1.dst");
-        return cur_backend_id;
-    }
-
-    // view_src
-    if (tensor->view_src != NULL) {
-        cur_backend_id = ggml_backend_sched_backend_from_buffer(sched, tensor->view_src, tensor);
-        if (cur_backend_id != -1) {
-            SET_CAUSE(tensor, "1.vsrc");
-            return cur_backend_id;
-        }
-    }
-
-    // graph input
-    if (tensor->flags & GGML_TENSOR_FLAG_INPUT) {
-        cur_backend_id = sched->n_backends - 1; // last backend (assumed CPU)
-        SET_CAUSE(tensor, "1.inp");
-        return cur_backend_id;
-    }
-
-    // assign nodes that use weights to the backend of the weights
-    // operations with weights are preferably run on the same backend as the weights
-    for (int i = 0; i < GGML_MAX_SRC; i++) {
-        const struct ggml_tensor * src = tensor->src[i];
-        if (src == NULL) {
-            continue;
-        }
-        if (src->buffer != NULL && src->buffer->usage == GGML_BACKEND_BUFFER_USAGE_WEIGHTS) {
-            int src_backend_id = ggml_backend_sched_backend_from_buffer(sched, src, tensor);
-            // check if a backend with higher prio wants to offload the op
-            if (src_backend_id == sched->n_backends - 1) {
-                for (int b = 0; b < src_backend_id; b++) {
-                    if (ggml_backend_offload_op(sched->backends[b], tensor)) {
-                        SET_CAUSE(tensor, "1.off");
-                        return b;
-                    }
-                }
-            }
-            SET_CAUSE(tensor, "1.wgt%d", i);
-            return src_backend_id;
-        }
-    }
-
-    return -1;
-}
-
-static char * fmt_size(size_t size) {
-    static char buffer[128];
-    if (size >= 1024*1024) {
-        snprintf(buffer, sizeof(buffer), "%zuM", size/1024/1024);
-    } else {
-        snprintf(buffer, sizeof(buffer), "%zuK", size/1024);
-    }
-    return buffer;
-}
-
-static void ggml_backend_sched_print_assignments(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
-    int cur_split = 0;
-    for (int i = 0; i < graph->n_nodes; i++) {
-        if (cur_split < sched->n_splits && i == sched->splits[cur_split].i_start) {
-            ggml_backend_t split_backend = sched->backends[sched->splits[cur_split].backend_id];
-            fprintf(stderr, "\n## SPLIT #%d: %s # %d inputs: ", cur_split, ggml_backend_name(split_backend),
-                sched->splits[cur_split].n_inputs);
-            for (int j = 0; j < sched->splits[cur_split].n_inputs; j++) {
-                fprintf(stderr, "[%s (%5.5s)] ", sched->splits[cur_split].inputs[j]->name,
-                    fmt_size(ggml_nbytes(sched->splits[cur_split].inputs[j])));
-            }
-            fprintf(stderr, "\n");
-            cur_split++;
-        }
-        struct ggml_tensor * node = graph->nodes[i];
-        if (ggml_is_view_op(node->op)) {
-            continue;
-        }
-        ggml_backend_t tensor_backend = ggml_backend_sched_get_tensor_backend(sched, node);
-        fprintf(stderr, "node #%3d (%10.10s): %20.20s (%5.5s) [%5.5s %8.8s]:", i, ggml_op_name(node->op), node->name,
-            fmt_size(ggml_nbytes(node)), tensor_backend ? ggml_backend_name(tensor_backend) : "NULL", GET_CAUSE(node));
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            struct ggml_tensor * src = node->src[j];
-            if (src == NULL) {
-                continue;
-            }
-            ggml_backend_t src_backend = ggml_backend_sched_get_tensor_backend(sched, src);
-            fprintf(stderr, " %20.20s (%5.5s) [%5.5s %8.8s]", src->name,
-                fmt_size(ggml_nbytes(src)), src_backend ? ggml_backend_name(src_backend) : "NULL", GET_CAUSE(src));
-        }
-        fprintf(stderr, "\n");
-    }
-}
-
-static bool ggml_backend_sched_buffer_supported(ggml_backend_sched_t sched, struct ggml_tensor * t, int backend_id) {
-    ggml_backend_buffer_t buf = t->view_src ? t->view_src->buffer : t->buffer;
-    ggml_backend_buffer_type_t buft = NULL;
-
-    if (buf) {
-        // the tensor is already allocated
-        buft = buf->buft;
-    } else {
-        // see if the tensor already has a backend assigned, and use the buffer type of that backend
-        int tensor_backend_id = tensor_backend_id(t);
-        if (tensor_backend_id == -1 && t->view_src) {
-            tensor_backend_id = tensor_backend_id(t->view_src);
-        }
-        if (tensor_backend_id != -1) {
-            buft = sched->bufts[tensor_backend_id];
-        }
-    }
-
-    return buft != NULL && ggml_backend_supports_buft(sched->backends[backend_id], buft);
-}
-
-static void ggml_backend_sched_set_if_supported(ggml_backend_sched_t sched, struct ggml_tensor * node, int cur_backend_id, int * node_backend_id) {
-    if (ggml_backend_supports_op(sched->backends[cur_backend_id], node)) {
-        *node_backend_id = cur_backend_id;
-        SET_CAUSE(node, "2.sup");
-    }
-}
-
-// assigns backends to ops and splits the graph into subgraphs that can be computed on the same backend
-static void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
-    // reset splits
-    sched->n_splits = 0;
-    sched->n_graph_inputs = 0;
-    sched->is_reset = false;
-
-    struct ggml_init_params params = {
-        /* .mem_size =   */ sizeof(sched->context_buffer),
-        /* .mem_buffer = */ sched->context_buffer,
-        /* .no_alloc =   */ true
-    };
-
-    ggml_free(sched->ctx);
-
-    sched->ctx = ggml_init(params);
-    if (sched->ctx == NULL) {
-        fprintf(stderr, "%s: failed to initialize context\n", __func__);
-        GGML_ASSERT(false);
-    }
-
-    // pass 1: assign backends to ops with pre-allocated inputs
-    for (int i = 0; i < graph->n_leafs; i++) {
-        struct ggml_tensor * leaf = graph->leafs[i];
-        int * leaf_backend_id = &tensor_backend_id(leaf);
-        if (*leaf_backend_id != -1) {
-            // do not overwrite user assignments
-            continue;
-        }
-        *leaf_backend_id = ggml_backend_sched_backend_id_from_cur(sched, leaf);
-    }
-
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-        int * node_backend_id = &tensor_backend_id(node);
-        if (*node_backend_id != -1) {
-            // do not overwrite user assignments
-            continue;
-        }
-        *node_backend_id = ggml_backend_sched_backend_id_from_cur(sched, node);
-        // src
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            struct ggml_tensor * src = node->src[j];
-            if (src == NULL) {
-                continue;
-            }
-            int * src_backend_id = &tensor_backend_id(src);
-            if (*src_backend_id == -1) {
-                *src_backend_id = ggml_backend_sched_backend_id_from_cur(sched, src);
-            }
-        }
-    }
-
-    // pass 2: expand current backend assignments
-    // assign the same backend to adjacent nodes
-    // expand gpu backends (i.e. non last prio) up and down, ignoring cpu (the lowest priority backend)
-    // thus, cpu will never be used unless weights are on cpu, or there are no gpu ops between cpu ops
-    // ops unsupported by the backend being expanded will be left unassigned so that they can be assigned later when the locations of its inputs are known
-    // expand gpu down
-    {
-        int cur_backend_id = -1;
-        for (int i = 0; i < graph->n_nodes; i++) {
-            struct ggml_tensor * node = graph->nodes[i];
-            if (ggml_is_view_op(node->op)) {
-                continue;
-            }
-            int * node_backend_id = &tensor_backend_id(node);
-            if (*node_backend_id != -1) {
-                if (*node_backend_id == sched->n_backends - 1) {
-                    // skip cpu (lowest prio backend)
-                    cur_backend_id = -1;
-                } else {
-                    cur_backend_id = *node_backend_id;
-                }
-            } else if (cur_backend_id != -1) {
-                ggml_backend_sched_set_if_supported(sched, node, cur_backend_id, node_backend_id);
-            }
-        }
-    }
-    // expand gpu up
-    {
-        int cur_backend_id = -1;
-        for (int i = graph->n_nodes - 1; i >= 0; i--) {
-            struct ggml_tensor * node = graph->nodes[i];
-            if (ggml_is_view_op(node->op)) {
-                continue;
-            }
-            int * node_backend_id = &tensor_backend_id(node);
-            if (*node_backend_id != -1) {
-                if (*node_backend_id == sched->n_backends - 1) {
-                    // skip cpu (lowest prio backend)
-                    cur_backend_id = -1;
-                } else {
-                    cur_backend_id = *node_backend_id;
-                }
-            } else if (cur_backend_id != -1) {
-                ggml_backend_sched_set_if_supported(sched, node, cur_backend_id, node_backend_id);
-            }
-        }
-    }
-    // expand rest down
-    {
-        int cur_backend_id = -1;
-        for (int i = 0; i < graph->n_nodes; i++) {
-            struct ggml_tensor * node = graph->nodes[i];
-            if (ggml_is_view_op(node->op)) {
-                continue;
-            }
-            int * node_backend_id = &tensor_backend_id(node);
-            if (*node_backend_id != -1) {
-                cur_backend_id = *node_backend_id;
-            } else if (cur_backend_id != -1) {
-                ggml_backend_sched_set_if_supported(sched, node, cur_backend_id, node_backend_id);
-            }
-        }
-    }
-    // expand rest up
-    {
-        int cur_backend_id = -1;
-        for (int i = graph->n_nodes - 1; i >= 0; i--) {
-            struct ggml_tensor * node = graph->nodes[i];
-            if (ggml_is_view_op(node->op)) {
-                continue;
-            }
-            int * node_backend_id = &tensor_backend_id(node);
-            if (*node_backend_id != -1) {
-                cur_backend_id = *node_backend_id;
-            } else if (cur_backend_id != -1) {
-                ggml_backend_sched_set_if_supported(sched, node, cur_backend_id, node_backend_id);
-            }
-        }
-    }
-
-    // pass 3: upgrade nodes to higher prio backends with compatible buffer types
-    // if the tensor is already in the same buffer type (*) as another higher priority backend, we should move it there
-    // however, we also need to verify that the sources are in compatible buffer types
-    // (*) the actual requirement is more relaxed, the buffer type of the backend should be supported by all the users of this tensor further down the graph
-    // however, this is slow to verify, so we have a more strict requirement that the buffer type is the same
-    // this is not uncommon since multiple backends can use host memory, with the same buffer type (eg. BLAS and CPU)
-    // additionally, set remaining unassigned nodes to the backend with the most supported inputs
-    // only nodes that could not be assigned during expansion due to the backend not supporting the op should be unassigned at this point
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-        if (ggml_is_view_op(node->op)) {
-            continue;
-        }
-        int * node_backend_id = &tensor_backend_id(node);
-        if (*node_backend_id == -1) {
-            // unassigned node: find the backend with the most supported inputs
-            int n_supported_best = -1;
-            for (int b = 0; b < sched->n_backends; b++) {
-                if (ggml_backend_supports_op(sched->backends[b], node)) {
-                    int n_supported = 0;
-                    for (int j = 0; j < GGML_MAX_SRC; j++) {
-                        struct ggml_tensor * src = node->src[j];
-                        if (src == NULL) {
-                            continue;
-                        }
-                        if ((tensor_backend_id(src) != -1 || tensor_backend_id(src->view_src) != -1) && ggml_backend_sched_buffer_supported(sched, src, b)) {
-                            n_supported++;
-                        }
-                    }
-                    if (n_supported > n_supported_best) {
-                        n_supported_best = n_supported;
-                        *node_backend_id = b;
-                        SET_CAUSE(node, "3.best");
-                    }
-                }
-            }
-        } else {
-            // assigned node: upgrade to higher prio backend if possible
-            for (int b = 0; b < *node_backend_id; b++) {
-                if (sched->bufts[b] == sched->bufts[*node_backend_id] && ggml_backend_supports_op(sched->backends[b], node)) {
-                    bool supported = true;
-                    for (int j = 0; j < GGML_MAX_SRC; j++) {
-                        struct ggml_tensor * src = node->src[j];
-                        if (src == NULL) {
-                            continue;
-                        }
-                        if (!ggml_backend_sched_buffer_supported(sched, src, b)) {
-                            supported = false;
-                            break;
-                        }
-                    }
-                    if (supported) {
-                        *node_backend_id = b;
-                        SET_CAUSE(node, "3.upg");
-                        break;
-                    }
-                }
-            }
-        }
-    }
-
-    // pass 4: assign backends to remaining src from dst and view_src
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-        int * cur_backend_id = &tensor_backend_id(node);
-        if (node->view_src != NULL && *cur_backend_id == -1) {
-            *cur_backend_id = tensor_backend_id(node->view_src);
-            SET_CAUSE(node, "4.vsrc");
-        }
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            struct ggml_tensor * src = node->src[j];
-            if (src == NULL) {
-                continue;
-            }
-            int * src_backend_id = &tensor_backend_id(src);
-            if (*src_backend_id == -1) {
-                if (src->view_src != NULL) {
-                    // views are always on the same backend as the source
-                    *src_backend_id = tensor_backend_id(src->view_src);
-                    SET_CAUSE(src, "4.vsrc");
-                } else {
-                    *src_backend_id = *cur_backend_id;
-                    SET_CAUSE(src, "4.cur");
-                }
-            }
-        }
-    }
-
-    // pass 4: split graph, find tensors that need to be copied
-    {
-        int i_split = 0;
-        struct ggml_backend_sched_split * split = &sched->splits[0];
-        // find the backend of the first split, skipping view ops
-        for (int i = 0; i < graph->n_nodes; i++) {
-            struct ggml_tensor * node = graph->nodes[i];
-            if (!ggml_is_view_op(node->op)) {
-                split->backend_id = tensor_backend_id(node);
-                break;
-            }
-        }
-        split->i_start = 0;
-        split->n_inputs = 0;
-        memset(split->inputs, 0, sizeof(split->inputs)); //HACK
-        int cur_backend_id = split->backend_id;
-        for (int i = 0; i < graph->n_nodes; i++) {
-            struct ggml_tensor * node = graph->nodes[i];
-
-            if (ggml_is_view_op(node->op)) {
-                continue;
-            }
-
-            const int node_backend_id = tensor_backend_id(node);
-
-            GGML_ASSERT(node_backend_id != -1); // all nodes should be assigned by now
-
-            // check if we should start a new split based on the sources of the current node
-            bool need_new_split = false;
-            if (node_backend_id == cur_backend_id && split->n_inputs > 0) {
-                for (int j = 0; j < GGML_MAX_SRC; j++) {
-                    struct ggml_tensor * src = node->src[j];
-                    if (src == NULL) {
-                        continue;
-                    }
-                    // check if a weight is on a different backend
-                    // by starting a new split, the memory of the previously offloaded weights can be reused
-                    if (src->buffer != NULL && src->buffer->usage == GGML_BACKEND_BUFFER_USAGE_WEIGHTS) {
-                        int src_backend_id = tensor_backend_id(src);
-                        if (src_backend_id != -1 && src_backend_id != cur_backend_id) {
-                            need_new_split = true;
-                            break;
-                        }
-                    }
-                    // check if the split has too many inputs
-                    // FIXME: count the number of inputs instead of only checking when full
-                    if (split->n_inputs == GGML_SCHED_MAX_SPLIT_INPUTS) {
-                        const size_t id = hash_id(src);
-                        int src_backend_id = sched->tensor_backend_id[id];
-                        bool supported = ggml_backend_sched_buffer_supported(sched, src, cur_backend_id);
-                        if (src_backend_id != cur_backend_id && sched->tensor_copies[hash_id(src)][cur_backend_id][0] == NULL && !supported) {
-                            //printf("starting new split because of too many inputs: node %s, input %s\n", node->name, src->name);
-                            need_new_split = true;
-                            break;
-                        }
-                    }
-                }
-            }
-
-            if (node_backend_id != cur_backend_id || need_new_split) {
-                split->i_end = i;
-                i_split++;
-                if (i_split >= sched->splits_capacity) {
-                    sched->splits_capacity *= 2;
-                    sched->splits = realloc(sched->splits, sched->splits_capacity * sizeof(struct ggml_backend_sched_split));
-                    GGML_ASSERT(sched->splits != NULL);
-                }
-                GGML_ASSERT(i_split < GGML_SCHED_MAX_SPLITS);
-                split = &sched->splits[i_split];
-                split->backend_id = node_backend_id;
-                split->i_start = i;
-                split->n_inputs = 0;
-                cur_backend_id = node_backend_id;
-            }
-
-            // find inputs that are not on the same backend
-            for (int j = 0; j < GGML_MAX_SRC; j++) {
-                struct ggml_tensor * src = node->src[j];
-                if (src == NULL) {
-                    continue;
-                }
-
-                const int src_backend_id = tensor_backend_id(src);
-                assert(src_backend_id != -1); // all inputs should be assigned by now
-
-                if (src->flags & GGML_TENSOR_FLAG_INPUT && sched->n_copies > 1) {
-                    size_t id = hash_id(src);
-                    if (sched->tensor_copies[id][src_backend_id][0] == NULL) {
-                        ggml_backend_t backend = sched->backends[src_backend_id];
-                        for (int c = 0; c < sched->n_copies; c++) {
-                            struct ggml_tensor * tensor_copy;
-                            if (c == sched->cur_copy) {
-                                tensor_copy = src; // use the original tensor as the current copy
-                            } else {
-                                tensor_copy = ggml_dup_tensor_layout(sched->ctx, src);
-                                ggml_format_name(tensor_copy, "%s#%s#%d", ggml_backend_name(backend), src->name, c);
-                            }
-                            if (sched->n_copies > 1) {
-                                ggml_set_input(tensor_copy);
-                                ggml_set_output(tensor_copy); // prevent ggml-alloc from overwriting the tensor
-                            }
-                            sched->tensor_copies[id][src_backend_id][c] = tensor_copy;
-                            SET_CAUSE(tensor_copy, "4.cpy");
-                        }
-                        int n_graph_inputs = sched->n_graph_inputs++;
-                        GGML_ASSERT(n_graph_inputs < GGML_SCHED_MAX_SPLIT_INPUTS);
-                        sched->graph_inputs[n_graph_inputs] = src;
-                    }
-                }
-
-                bool supported = ggml_backend_sched_buffer_supported(sched, src, cur_backend_id);
-                if (src_backend_id != cur_backend_id && !supported) {
-                    // create a copy of the input in the split's backend
-                    const size_t id = hash_id(src);
-                    if (sched->tensor_copies[id][cur_backend_id][0] == NULL) {
-                        ggml_backend_t backend = sched->backends[cur_backend_id];
-                        for (int c = 0; c < sched->n_copies; c++) {
-                            struct ggml_tensor * tensor_copy = ggml_dup_tensor_layout(sched->ctx, src);
-                            ggml_format_name(tensor_copy, "%s#%s#%d", ggml_backend_name(backend), src->name, c);
-                            if (sched->n_copies > 1) {
-                                ggml_set_input(tensor_copy);
-                                ggml_set_output(tensor_copy); // prevent ggml-alloc from overwriting the tensor
-                            }
-                            sched->tensor_copies[id][cur_backend_id][c] = tensor_copy;
-                            SET_CAUSE(tensor_copy, "4.cpy");
-                        }
-                        int n_inputs = split->n_inputs++;
-                        GGML_ASSERT(n_inputs < GGML_SCHED_MAX_SPLIT_INPUTS);
-                        split->inputs[n_inputs] = src;
-                    }
-                    node->src[j] = sched->tensor_copies[id][cur_backend_id][sched->cur_copy];
-                }
-            }
-        }
-        split->i_end = graph->n_nodes;
-        sched->n_splits = i_split + 1;
-    }
-
-    if (sched->debug) {
-        ggml_backend_sched_print_assignments(sched, graph);
-    }
-
-    // swap node_backend_ids and leaf_backend_ids and prevs
-    {
-        int * tmp = sched->node_backend_ids;
-        sched->node_backend_ids = sched->prev_node_backend_ids;
-        sched->prev_node_backend_ids = tmp;
-
-        tmp = sched->leaf_backend_ids;
-        sched->leaf_backend_ids = sched->prev_leaf_backend_ids;
-        sched->prev_leaf_backend_ids = tmp;
-    }
-
-    // create copies of the graph for each split
-    // TODO: avoid this copy
-    struct ggml_cgraph * graph_copy = ggml_new_graph_custom(sched->ctx, graph->n_nodes + sched->n_splits*GGML_SCHED_MAX_SPLIT_INPUTS*2, false);
-    for (int i = 0; i < sched->n_splits; i++) {
-        struct ggml_backend_sched_split * split = &sched->splits[i];
-        split->graph = ggml_graph_view(graph, split->i_start, split->i_end);
-
-        // add inputs to the graph copy so that they are allocated by ggml-alloc at the start of the split
-        for (int j = 0; j < split->n_inputs; j++) {
-            assert(graph_copy->size > (graph_copy->n_nodes + 1));
-
-            struct ggml_tensor * input = split->inputs[j];
-            const size_t input_id = hash_id(input);
-            struct ggml_tensor * input_cpy = sched->tensor_copies[input_id][split->backend_id][sched->cur_copy];
-
-            // add a dependency to the input source so that it is not freed before the copy is done
-            struct ggml_tensor * input_dep = ggml_view_tensor(sched->ctx, input);
-            input_dep->src[0] = input;
-            sched->node_backend_ids[graph_copy->n_nodes] = sched->tensor_backend_id[input_id];
-            graph_copy->nodes[graph_copy->n_nodes++] = input_dep;
-
-            // add a dependency to the input copy so that it is allocated at the start of the split
-            sched->node_backend_ids[graph_copy->n_nodes] = split->backend_id;
-            graph_copy->nodes[graph_copy->n_nodes++] = input_cpy;
-        }
-
-        for (int j = split->i_start; j < split->i_end; j++) {
-            assert(graph_copy->size > graph_copy->n_nodes);
-            sched->node_backend_ids[graph_copy->n_nodes] = tensor_backend_id(graph->nodes[j]);
-            graph_copy->nodes[graph_copy->n_nodes++] = graph->nodes[j];
-        }
-    }
-
-    if (sched->n_copies > 1) {
-        // add input copies as leafs so that they are allocated first
-        for (int i = 0; i < sched->n_graph_inputs; i++) {
-            struct ggml_tensor * input = sched->graph_inputs[i];
-            size_t id = hash_id(input);
-            int backend_id = tensor_backend_id(input);
-            for (int c = 0; c < sched->n_copies; c++) {
-                struct ggml_tensor * input_cpy = sched->tensor_copies[id][backend_id][c];
-                sched->leaf_backend_ids[graph_copy->n_leafs] = backend_id;
-                graph_copy->leafs[graph_copy->n_leafs++] = input_cpy;
-            }
-        }
-
-        for (int i = 0; i < sched->n_splits; i++) {
-            struct ggml_backend_sched_split * split = &sched->splits[i];
-            int backend_id = split->backend_id;
-            for (int j = 0; j < split->n_inputs; j++) {
-                struct ggml_tensor * input = split->inputs[j];
-                size_t id = hash_id(input);
-                for (int c = 0; c < sched->n_copies; c++) {
-                    struct ggml_tensor * input_cpy = sched->tensor_copies[id][backend_id][c];
-                    sched->leaf_backend_ids[graph_copy->n_leafs] = backend_id;
-                    graph_copy->leafs[graph_copy->n_leafs++] = input_cpy;
-                }
-            }
-        }
-    }
-
-    // add leafs from the original graph
-    for (int i = 0; i < graph->n_leafs; i++) {
-        struct ggml_tensor * leaf = graph->leafs[i];
-        sched->leaf_backend_ids[graph_copy->n_leafs] = tensor_backend_id(leaf);
-        graph_copy->leafs[graph_copy->n_leafs++] = leaf;
-    }
-
-    sched->graph = graph_copy;
-}
-
-static bool ggml_backend_sched_alloc_splits(ggml_backend_sched_t sched) {
-    bool backend_ids_changed = false;
-    for (int i = 0; i < sched->graph->n_nodes; i++) {
-        if (sched->node_backend_ids[i] != sched->prev_node_backend_ids[i] &&
-            sched->bufts[sched->node_backend_ids[i]] != sched->bufts[sched->prev_node_backend_ids[i]]) {
-            backend_ids_changed = true;
-            break;
-        }
-    }
-    if (!backend_ids_changed) {
-        for (int i = 0; i < sched->graph->n_leafs; i++) {
-            if (sched->leaf_backend_ids[i] != sched->prev_leaf_backend_ids[i] &&
-                sched->bufts[sched->leaf_backend_ids[i]] != sched->bufts[sched->prev_leaf_backend_ids[i]]) {
-                backend_ids_changed = true;
-                break;
-            }
-        }
-    }
-
-    // allocate graph
-    if (backend_ids_changed || !ggml_gallocr_alloc_graph(sched->galloc, sched->graph)) {
-        // the re-allocation may cause the split inputs to be moved to a different address
-        ggml_backend_sched_synchronize(sched);
-#ifndef NDEBUG
-        fprintf(stderr, "%s: failed to allocate graph, reserving\n", __func__);
-#endif
-        ggml_gallocr_reserve_n(sched->galloc, sched->graph, sched->node_backend_ids, sched->leaf_backend_ids);
-        if (!ggml_gallocr_alloc_graph(sched->galloc, sched->graph)) {
-            fprintf(stderr, "%s: failed to allocate graph\n", __func__);
-            return false;
-        }
-    }
-
-    return true;
-}
-
-static enum ggml_status ggml_backend_sched_compute_splits(ggml_backend_sched_t sched) {
-    struct ggml_backend_sched_split * splits = sched->splits;
-
-    for (int i = 0; i < sched->n_splits; i++) {
-        struct ggml_backend_sched_split * split = &splits[i];
-        int split_backend_id = split->backend_id;
-        ggml_backend_t split_backend = sched->backends[split_backend_id];
-
-        // copy the input tensors to the split backend
-        for (int j = 0; j < split->n_inputs; j++) {
-            ggml_backend_t input_backend = ggml_backend_sched_get_tensor_backend(sched, split->inputs[j]);
-            struct ggml_tensor * input = split->inputs[j];
-            struct ggml_tensor * input_cpy = sched->tensor_copies[hash_id(input)][split_backend_id][sched->cur_copy];
-
-            if (input->flags & GGML_TENSOR_FLAG_INPUT) {
-                // inputs from the user must be copied immediately to prevent the user overwriting the data before the copy is done
-                if (sched->events[split_backend_id][sched->cur_copy] != NULL) {
-                    ggml_backend_event_synchronize(sched->events[split_backend_id][sched->cur_copy]);
-                } else {
-                    ggml_backend_synchronize(split_backend);
-                }
-                ggml_backend_tensor_copy(input, input_cpy);
-            } else {
-                // wait for the split backend to finish using the input before overwriting it
-                if (sched->events[split_backend_id][sched->cur_copy] != NULL) {
-                    ggml_backend_event_wait(split_backend, sched->events[split_backend_id][sched->cur_copy]);
-                } else {
-                    ggml_backend_synchronize(split_backend);
-                }
-                ggml_backend_tensor_copy_async(input_backend, split_backend, input, input_cpy);
-            }
-        }
-
-        if (!sched->callback_eval) {
-            enum ggml_status ec = ggml_backend_graph_compute_async(split_backend, &split->graph);
-            if (ec != GGML_STATUS_SUCCESS) {
-                return ec;
-            }
-        } else {
-            // similar to ggml_backend_compare_graph_backend
-            for (int j0 = 0; j0 < split->graph.n_nodes; j0++) {
-                struct ggml_tensor * t = split->graph.nodes[j0];
-
-                // check if the user needs data from this node
-                bool need = sched->callback_eval(t, true, sched->callback_eval_user_data);
-
-                int j1 = j0;
-
-                // determine the range [j0, j1] of nodes that can be computed together
-                while (!need && j1 < split->graph.n_nodes - 1) {
-                    t = split->graph.nodes[++j1];
-                    need = sched->callback_eval(t, true, sched->callback_eval_user_data);
-                }
-
-                struct ggml_cgraph gv = ggml_graph_view(&split->graph, j0, j1 + 1);
-
-                enum ggml_status ec = ggml_backend_graph_compute_async(split_backend, &gv);
-                if (ec != GGML_STATUS_SUCCESS) {
-                    return ec;
-                }
-
-                // TODO: pass backend to the callback, then the user can decide if they want to synchronize
-                ggml_backend_synchronize(split_backend);
-
-                if (need && !sched->callback_eval(t, false, sched->callback_eval_user_data)) {
-                    break;
-                }
-
-                j0 = j1;
-            }
-        }
-
-        // record the event of this copy
-        if (split->n_inputs > 0) {
-            if (sched->events[split_backend_id][sched->cur_copy] != NULL) {
-                ggml_backend_event_record(sched->events[split_backend_id][sched->cur_copy]);
-            }
-        }
-    }
-
-    sched->cur_copy = (sched->cur_copy + 1) % sched->n_copies;
-
-    return GGML_STATUS_SUCCESS;
-}
-
-ggml_backend_sched_t ggml_backend_sched_new(
-        ggml_backend_t * backends,
-        ggml_backend_buffer_type_t * bufts,
-        int n_backends,
-        size_t graph_size,
-        bool parallel) {
-    GGML_ASSERT(n_backends > 0);
-    GGML_ASSERT(n_backends <= GGML_SCHED_MAX_BACKENDS);
-    GGML_ASSERT(ggml_backend_is_cpu(backends[n_backends - 1])); // last backend must be CPU
-
-    struct ggml_backend_sched * sched = calloc(1, sizeof(struct ggml_backend_sched));
-
-    sched->debug = getenv("GGML_SCHED_DEBUG") != NULL;
-
-    // initialize hash table
-    sched->hash_set          = ggml_hash_set_new(graph_size);
-    sched->tensor_backend_id = calloc(sched->hash_set.size, sizeof(sched->tensor_backend_id[0]));
-    sched->tensor_copies     = calloc(sched->hash_set.size, sizeof(sched->tensor_copies[0]));
-
-    const size_t nodes_size = graph_size + GGML_SCHED_MAX_SPLITS*GGML_SCHED_MAX_SPLIT_INPUTS*2;
-    sched->node_backend_ids  = calloc(nodes_size, sizeof(sched->node_backend_ids[0]));
-    sched->leaf_backend_ids  = calloc(nodes_size, sizeof(sched->leaf_backend_ids[0]));
-    sched->prev_node_backend_ids = calloc(nodes_size, sizeof(sched->prev_node_backend_ids[0]));
-    sched->prev_leaf_backend_ids = calloc(nodes_size, sizeof(sched->prev_leaf_backend_ids[0]));
-
-    sched->n_backends = n_backends;
-
-    sched->n_copies = parallel ? GGML_SCHED_MAX_COPIES : 1;
-
-    const int initial_splits_capacity = 16;
-    sched->splits = calloc(initial_splits_capacity, sizeof(sched->splits[0]));
-    sched->splits_capacity = initial_splits_capacity;
-
-    for (int b = 0; b < n_backends; b++) {
-        sched->backends[b] = backends[b];
-        sched->bufts[b] = bufts ? bufts[b] : ggml_backend_get_default_buffer_type(backends[b]);
-        GGML_ASSERT(ggml_backend_supports_buft(backends[b], sched->bufts[b]));
-        if (sched->n_copies > 1) {
-            for (int c = 0; c < sched->n_copies; c++) {
-                sched->events[b][c] = ggml_backend_event_new(backends[b]);
-            }
-        }
-    }
-
-    sched->galloc = ggml_gallocr_new_n(sched->bufts, n_backends);
-
-    ggml_backend_sched_reset(sched);
-
-    return sched;
-}
-
-void ggml_backend_sched_free(ggml_backend_sched_t sched) {
-    if (sched == NULL) {
-        return;
-    }
-    for (int b = 0; b < sched->n_backends; b++) {
-        for (int c = 0; c < sched->n_copies; c++) {
-            ggml_backend_event_free(sched->events[b][c]);
-        }
-    }
-    ggml_gallocr_free(sched->galloc);
-    ggml_free(sched->ctx);
-    free(sched->splits);
-    free(sched->hash_set.keys);
-    free(sched->tensor_backend_id);
-    free(sched->tensor_copies);
-    free(sched->node_backend_ids);
-    free(sched->leaf_backend_ids);
-    free(sched->prev_node_backend_ids);
-    free(sched->prev_leaf_backend_ids);
-    free(sched);
-}
-
-void ggml_backend_sched_reset(ggml_backend_sched_t sched) {
-    // reset state for the next run
-    if (!sched->is_reset) {
-        size_t hash_size = sched->hash_set.size;
-        memset(sched->hash_set.keys,      0, sizeof(sched->hash_set.keys[0])     * hash_size); // NOLINT
-        memset(sched->tensor_backend_id, -1, sizeof(sched->tensor_backend_id[0]) * hash_size);
-        memset(sched->tensor_copies,      0, sizeof(sched->tensor_copies[0])     * hash_size);
-
-        sched->is_reset = true;
-    }
-    sched->is_alloc = false;
-}
-
-bool ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph) {
-    GGML_ASSERT((int)sched->hash_set.size >= measure_graph->n_nodes);
-
-    ggml_backend_sched_split_graph(sched, measure_graph);
-
-    // TODO: extract this to a separate function
-    if (!ggml_gallocr_reserve_n(sched->galloc, sched->graph, sched->node_backend_ids, sched->leaf_backend_ids)) {
-        return false;
-    }
-
-    ggml_backend_sched_reset(sched);
-    ggml_backend_sched_synchronize(sched);
-
-    return true;
-}
-
-bool ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
-    GGML_ASSERT((int)sched->hash_set.size >= graph->n_nodes);
-
-    ggml_backend_sched_split_graph(sched, graph);
-
-    if (!ggml_backend_sched_alloc_splits(sched)) {
-        return false;
-    }
-
-    sched->is_alloc = true;
-
-    return true;
-}
-
-enum ggml_status ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
-    enum ggml_status err = ggml_backend_sched_graph_compute_async(sched, graph);
-    ggml_backend_sched_synchronize(sched);
-    return err;
-}
-
-enum ggml_status ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
-    if (!sched->is_reset && !sched->is_alloc) {
-        ggml_backend_sched_reset(sched);
-    }
-
-    if (!sched->is_alloc) {
-        if (!ggml_backend_sched_alloc_graph(sched, graph)) {
-            return GGML_STATUS_ALLOC_FAILED;
-        }
-    }
-
-    return ggml_backend_sched_compute_splits(sched);
-}
-
-void ggml_backend_sched_synchronize(ggml_backend_sched_t sched) {
-    for (int i = 0; i < sched->n_backends; i++) {
-        ggml_backend_synchronize(sched->backends[i]);
-    }
-}
-
-void ggml_backend_sched_set_eval_callback(ggml_backend_sched_t sched, ggml_backend_sched_eval_callback callback, void * user_data) {
-    sched->callback_eval = callback;
-    sched->callback_eval_user_data = user_data;
-}
-
-int ggml_backend_sched_get_n_splits(ggml_backend_sched_t sched) {
-    return sched->n_splits;
-}
-
-int ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched) {
-    return sched->n_copies;
-}
-
-int ggml_backend_sched_get_n_backends(ggml_backend_sched_t sched) {
-    return sched->n_backends;
-}
-
-ggml_backend_t ggml_backend_sched_get_backend(ggml_backend_sched_t sched, int i) {
-    GGML_ASSERT(i >= 0 && i < sched->n_backends);
-    return sched->backends[i];
-}
-
-size_t ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend) {
-    int backend_index = ggml_backend_sched_backend_id(sched, backend);
-    GGML_ASSERT(backend_index >= 0 && backend_index < sched->n_backends);
-
-    return ggml_gallocr_get_buffer_size(sched->galloc, backend_index);
-}
-
-void ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend) {
-    int backend_index = ggml_backend_sched_backend_id(sched, backend);
-    GGML_ASSERT(backend_index >= 0 && backend_index < sched->n_backends);
-    tensor_backend_id(node) = backend_index;
-    SET_CAUSE(node, "usr");
-}
-
-ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node) {
-    int backend_index = tensor_backend_id(node);
-    if (backend_index == -1) {
-        return NULL;
-    }
-    return sched->backends[backend_index];
-}
-
-// utils
-
-void ggml_backend_view_init(struct ggml_tensor * tensor) {
-    GGML_ASSERT(tensor->buffer == NULL);
-    GGML_ASSERT(tensor->view_src != NULL);
-    GGML_ASSERT(tensor->view_src->buffer != NULL);
-    GGML_ASSERT(tensor->view_src->data != NULL);
-
-    tensor->buffer = tensor->view_src->buffer;
-    tensor->data = (char *)tensor->view_src->data + tensor->view_offs;
-    ggml_backend_buffer_init_tensor(tensor->buffer, tensor);
-}
-
-void ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr) {
-    GGML_ASSERT(tensor->buffer == NULL);
-    GGML_ASSERT(tensor->data == NULL);
-    GGML_ASSERT(tensor->view_src == NULL);
-    GGML_ASSERT(addr >= ggml_backend_buffer_get_base(buffer));
-    GGML_ASSERT((char *)addr + ggml_backend_buffer_get_alloc_size(buffer, tensor) <=
-                (char *)ggml_backend_buffer_get_base(buffer) + ggml_backend_buffer_get_size(buffer));
-
-    tensor->buffer = buffer;
-    tensor->data = addr;
-    ggml_backend_buffer_init_tensor(buffer, tensor);
-}
-
-static struct ggml_tensor * graph_copy_dup_tensor(struct ggml_hash_set hash_set, struct ggml_tensor ** node_copies,
-    struct ggml_context * ctx_allocated, struct ggml_context * ctx_unallocated, struct ggml_tensor * src) {
-
-    GGML_ASSERT(src != NULL);
-    GGML_ASSERT(src->data && "graph must be allocated");
-
-    size_t id = ggml_hash_insert(hash_set, src);
-    if (id == GGML_HASHTABLE_ALREADY_EXISTS) {
-        return node_copies[ggml_hash_find(hash_set, src)];
-    }
-
-    struct ggml_tensor * dst = ggml_dup_tensor_layout(src->data && !src->view_src ? ctx_allocated : ctx_unallocated, src);
-    if (src->view_src != NULL) {
-        dst->view_src = graph_copy_dup_tensor(hash_set, node_copies, ctx_allocated, ctx_unallocated, src->view_src);
-        dst->view_offs = src->view_offs;
-    }
-    dst->op = src->op;
-    memcpy(dst->op_params, src->op_params, sizeof(dst->op_params));
-    ggml_set_name(dst, src->name);
-
-    // copy src
-    for (int i = 0; i < GGML_MAX_SRC; i++) {
-        struct ggml_tensor * s = src->src[i];
-        if (s == NULL) {
-            continue;
-        }
-        dst->src[i] = graph_copy_dup_tensor(hash_set, node_copies, ctx_allocated, ctx_unallocated, s);
-    }
-
-    node_copies[id] = dst;
-    return dst;
-}
-
-static void graph_copy_init_tensor(struct ggml_hash_set hash_set, struct ggml_tensor ** node_copies, bool * node_init, struct ggml_tensor * src) {
-    size_t id = ggml_hash_find(hash_set, src);
-    if (node_init[id]) {
-        return;
-    }
-    node_init[id] = true;
-
-    struct ggml_tensor * dst = node_copies[id];
-    if (dst->view_src != NULL) {
-        graph_copy_init_tensor(hash_set, node_copies, node_init, src->view_src);
-        ggml_backend_view_init(dst);
-    }
-    else {
-        ggml_backend_tensor_copy(src, dst);
-    }
-
-    // init src
-    for (int i = 0; i < GGML_MAX_SRC; i++) {
-        struct ggml_tensor * s = src->src[i];
-        if (s == NULL) {
-            continue;
-        }
-        graph_copy_init_tensor(hash_set, node_copies, node_init, s);
-    }
-}
-
-struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t backend, struct ggml_cgraph * graph) {
-    struct ggml_hash_set hash_set = {
-        /* .size = */ graph->visited_hash_table.size,
-        /* .keys = */ calloc(graph->visited_hash_table.size, sizeof(hash_set.keys[0])) // NOLINT
-    };
-    struct ggml_tensor ** node_copies = calloc(hash_set.size, sizeof(node_copies[0])); // NOLINT
-    bool * node_init = calloc(hash_set.size, sizeof(node_init[0]));
-
-    struct ggml_init_params params = {
-        /* .mem_size   = */ ggml_tensor_overhead()*hash_set.size + ggml_graph_overhead_custom(graph->size, false),
-        /* .mem_buffer = */ NULL,
-        /* .no_alloc   = */ true
-    };
-
-    struct ggml_context * ctx_allocated = ggml_init(params);
-    struct ggml_context * ctx_unallocated = ggml_init(params);
-
-    if (ctx_allocated == NULL || ctx_unallocated == NULL) {
-        fprintf(stderr, "failed to allocate context for graph copy\n");
-        free(hash_set.keys);
-        free(node_copies);
-        free(node_init);
-        ggml_free(ctx_allocated);
-        ggml_free(ctx_unallocated);
-        return (struct ggml_backend_graph_copy) {
-            /* .buffer           = */ NULL,
-            /* .ctx_allocated    = */ NULL,
-            /* .ctx_unallocated  = */ NULL,
-            /* .graph            = */ NULL,
-        };
-    }
-
-    // dup nodes
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-        graph_copy_dup_tensor(hash_set, node_copies, ctx_allocated, ctx_unallocated, node);
-    }
-
-    // allocate nodes
-    ggml_backend_buffer_t buffer = ggml_backend_alloc_ctx_tensors(ctx_allocated, backend);
-    if (buffer == NULL) {
-        fprintf(stderr, "failed to allocate buffer for graph copy\n");
-        free(hash_set.keys);
-        free(node_copies);
-        free(node_init);
-        ggml_free(ctx_allocated);
-        ggml_free(ctx_unallocated);
-        return (struct ggml_backend_graph_copy) {
-            /* .buffer           = */ NULL,
-            /* .ctx_allocated    = */ NULL,
-            /* .ctx_unallocated  = */ NULL,
-            /* .graph            = */ NULL,
-        };
-    }
-
-    //printf("copy buffer size: %zu MB\n", ggml_backend_buffer_get_size(buffer) / 1024 / 1024);
-
-    // copy data and init views
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-        graph_copy_init_tensor(hash_set, node_copies, node_init, node);
-    }
-
-    // build graph copy
-    struct ggml_cgraph * graph_copy = ggml_new_graph_custom(ctx_allocated, graph->size, false);
-    for (int i = 0; i < graph->n_nodes; i++) {
-        struct ggml_tensor * node = graph->nodes[i];
-        struct ggml_tensor * node_copy = node_copies[ggml_hash_find(hash_set, node)];
-        graph_copy->nodes[i] = node_copy;
-    }
-    graph_copy->n_nodes = graph->n_nodes;
-
-    free(hash_set.keys);
-    free(node_copies);
-    free(node_init);
-
-    return (struct ggml_backend_graph_copy) {
-        /* .buffer           = */ buffer,
-        /* .ctx_allocated    = */ ctx_allocated,
-        /* .ctx_unallocated  = */ ctx_unallocated,
-        /* .graph            = */ graph_copy,
-    };
-}
-
-void ggml_backend_graph_copy_free(struct ggml_backend_graph_copy copy) {
-    ggml_backend_buffer_free(copy.buffer);
-    ggml_free(copy.ctx_allocated);
-    ggml_free(copy.ctx_unallocated);
-}
-
-bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t backend2, struct ggml_cgraph * graph, ggml_backend_eval_callback callback, void * user_data) {
-    struct ggml_backend_graph_copy copy = ggml_backend_graph_copy(backend2, graph);
-    if (copy.buffer == NULL) {
-        return false;
-    }
-
-    struct ggml_cgraph * g1 = graph;
-    struct ggml_cgraph * g2 = copy.graph;
-
-    assert(g1->n_nodes == g2->n_nodes);
-
-    for (int i = 0; i < g1->n_nodes; i++) {
-        //printf("eval %d/%d\n", i, g1->n_nodes);
-        struct ggml_tensor * t1 = g1->nodes[i];
-        struct ggml_tensor * t2 = g2->nodes[i];
-
-        assert(t1->op == t2->op && ggml_are_same_layout(t1, t2));
-
-        struct ggml_cgraph g1v = ggml_graph_view(g1, i, i + 1);
-        struct ggml_cgraph g2v = ggml_graph_view(g2, i, i + 1);
-
-        ggml_backend_graph_compute(backend1, &g1v);
-        ggml_backend_graph_compute(backend2, &g2v);
-
-        if (ggml_is_view_op(t1->op)) {
-            continue;
-        }
-
-        // compare results, calculate rms etc
-        if (!callback(i, t1, t2, user_data)) {
-            break;
-        }
-    }
-
-    ggml_backend_graph_copy_free(copy);
-
-    return true;
-}
diff --git a/ggml-backend.h b/ggml-backend.h
deleted file mode 100644 (file)
index 4a38eeb..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-#pragma once
-
-#include "ggml.h"
-#include "ggml-alloc.h"
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-    typedef struct ggml_backend_buffer_type * ggml_backend_buffer_type_t;
-    typedef struct ggml_backend_buffer * ggml_backend_buffer_t;
-    typedef struct ggml_backend_event * ggml_backend_event_t;
-    typedef struct ggml_backend * ggml_backend_t;
-    typedef void * ggml_backend_graph_plan_t;
-
-    //
-    // Backend buffer
-    //
-
-    // buffer type
-    GGML_API           const char *          ggml_backend_buft_name            (ggml_backend_buffer_type_t buft);
-    GGML_API GGML_CALL ggml_backend_buffer_t ggml_backend_buft_alloc_buffer    (ggml_backend_buffer_type_t buft, size_t size);
-    GGML_API           size_t                ggml_backend_buft_get_alignment   (ggml_backend_buffer_type_t buft);
-    GGML_API           size_t                ggml_backend_buft_get_max_size    (ggml_backend_buffer_type_t buft);
-    GGML_API GGML_CALL size_t                ggml_backend_buft_get_alloc_size  (ggml_backend_buffer_type_t buft, struct ggml_tensor * tensor);
-    GGML_API           bool                  ggml_backend_buft_is_host         (ggml_backend_buffer_type_t buft);
-
-    // buffer
-    enum ggml_backend_buffer_usage {
-        GGML_BACKEND_BUFFER_USAGE_ANY = 0,
-        GGML_BACKEND_BUFFER_USAGE_WEIGHTS = 1,
-    };
-
-    GGML_API           const char *               ggml_backend_buffer_name          (ggml_backend_buffer_t buffer);
-    GGML_API           void                       ggml_backend_buffer_free          (ggml_backend_buffer_t buffer);
-    GGML_API           void *                     ggml_backend_buffer_get_base      (ggml_backend_buffer_t buffer);
-    GGML_API           size_t                     ggml_backend_buffer_get_size      (ggml_backend_buffer_t buffer);
-    GGML_API GGML_CALL void                       ggml_backend_buffer_init_tensor   (ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
-    GGML_API           size_t                     ggml_backend_buffer_get_alignment (ggml_backend_buffer_t buffer);
-    GGML_API           size_t                     ggml_backend_buffer_get_max_size  (ggml_backend_buffer_t buffer);
-    GGML_API           size_t                     ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
-    GGML_API           void                       ggml_backend_buffer_clear         (ggml_backend_buffer_t buffer, uint8_t value);
-    GGML_API           bool                       ggml_backend_buffer_is_host       (ggml_backend_buffer_t buffer);
-    GGML_API           void                       ggml_backend_buffer_set_usage     (ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage);
-    GGML_API           ggml_backend_buffer_type_t ggml_backend_buffer_get_type      (ggml_backend_buffer_t buffer);
-    GGML_API           void                       ggml_backend_buffer_reset         (ggml_backend_buffer_t buffer);
-
-    //
-    // Backend
-    //
-
-    GGML_API ggml_guid_t  ggml_backend_guid(ggml_backend_t backend);
-    GGML_API const char * ggml_backend_name(ggml_backend_t backend);
-    GGML_API void         ggml_backend_free(ggml_backend_t backend);
-
-    GGML_API ggml_backend_buffer_type_t ggml_backend_get_default_buffer_type(ggml_backend_t backend);
-    GGML_API ggml_backend_buffer_t      ggml_backend_alloc_buffer(ggml_backend_t backend, size_t size);
-    GGML_API size_t                     ggml_backend_get_alignment(ggml_backend_t backend);
-    GGML_API size_t                     ggml_backend_get_max_size(ggml_backend_t backend);
-
-    GGML_API void ggml_backend_tensor_set_async(ggml_backend_t backend,       struct ggml_tensor * tensor, const void * data, size_t offset, size_t size);
-    GGML_API void ggml_backend_tensor_get_async(ggml_backend_t backend, const struct ggml_tensor * tensor,       void * data, size_t offset, size_t size);
-
-    GGML_API GGML_CALL void ggml_backend_tensor_set(      struct ggml_tensor * tensor, const void * data, size_t offset, size_t size);
-    GGML_API GGML_CALL void ggml_backend_tensor_get(const struct ggml_tensor * tensor,       void * data, size_t offset, size_t size);
-
-    GGML_API void ggml_backend_synchronize(ggml_backend_t backend);
-
-    GGML_API ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph);
-    GGML_API void                      ggml_backend_graph_plan_free  (ggml_backend_t backend, ggml_backend_graph_plan_t plan);
-
-    GGML_API enum ggml_status ggml_backend_graph_plan_compute (ggml_backend_t backend, ggml_backend_graph_plan_t plan);
-    GGML_API enum ggml_status ggml_backend_graph_compute      (ggml_backend_t backend, struct ggml_cgraph * cgraph);
-    GGML_API enum ggml_status ggml_backend_graph_compute_async(ggml_backend_t backend, struct ggml_cgraph * cgraph);
-    GGML_API bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op);
-    GGML_API bool ggml_backend_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft);
-    GGML_API bool ggml_backend_offload_op(ggml_backend_t backend, const struct ggml_tensor * op);
-
-    // tensor copy between different backends
-    GGML_API void ggml_backend_tensor_copy(struct ggml_tensor * src, struct ggml_tensor * dst);
-
-    // asynchronous copy
-    // the copy is performed after all the currently queued operations in backend_src
-    // backend_dst will wait for the copy to complete before performing other operations
-    // automatic fallback to sync copy if async is not supported
-    GGML_API void ggml_backend_tensor_copy_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, struct ggml_tensor * src, struct ggml_tensor * dst);
-
-    // events
-    GGML_API ggml_backend_event_t   ggml_backend_event_new        (ggml_backend_t backend);
-    GGML_API void                   ggml_backend_event_free       (ggml_backend_event_t event);
-    GGML_API void                   ggml_backend_event_record     (ggml_backend_event_t event);
-    GGML_API void                   ggml_backend_event_synchronize(ggml_backend_event_t event);
-    GGML_API void                   ggml_backend_event_wait       (ggml_backend_t backend, ggml_backend_event_t event);
-
-    //
-    // CPU backend
-    //
-
-    GGML_API ggml_backend_t ggml_backend_cpu_init(void);
-
-    GGML_API GGML_CALL bool ggml_backend_is_cpu                (ggml_backend_t backend);
-    GGML_API           void ggml_backend_cpu_set_n_threads     (ggml_backend_t backend_cpu, int n_threads);
-    GGML_API           void ggml_backend_cpu_set_abort_callback(ggml_backend_t backend_cpu, ggml_abort_callback abort_callback, void * abort_callback_data);
-
-    // Create a backend buffer from an existing pointer
-    GGML_API GGML_CALL ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_t size);
-
-    GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cpu_buffer_type(void);
-
-#ifdef GGML_USE_CPU_HBM
-    GGML_API ggml_backend_buffer_type_t ggml_backend_cpu_hbm_buffer_type(void);
-#endif
-
-    //
-    // Backend registry
-    //
-
-    // The backend registry is a registry of all the available backends, and allows initializing backends in a generic way
-
-    GGML_API size_t                     ggml_backend_reg_get_count(void);
-    GGML_API size_t                     ggml_backend_reg_find_by_name(const char * name);
-    GGML_API ggml_backend_t             ggml_backend_reg_init_backend_from_str(const char * backend_str); // str is backend_name:params (params is optional)
-    GGML_API const char *               ggml_backend_reg_get_name(size_t i);
-    GGML_API ggml_backend_t             ggml_backend_reg_init_backend(size_t i, const char * params); // params is backend-specific
-    GGML_API ggml_backend_buffer_type_t ggml_backend_reg_get_default_buffer_type(size_t i);
-    GGML_API ggml_backend_buffer_t      ggml_backend_reg_alloc_buffer(size_t i, size_t size);
-
-    //
-    // Backend scheduler
-    //
-
-    // The backend scheduler allows for multiple backends to be used together
-    // Handles compute buffer allocation, assignment of tensors to backends, and copying of tensors between backends
-    // The backends are selected based on:
-    // - the backend that supports the operation
-    // - the location of the pre-allocated tensors (e.g. the weights)
-    /*
-      Example usage:
-
-        // operations that use tensors allocated in a buffer with USAGE_WEIGHTS will be assigned
-        // preferrably to run on the same backend as the buffer
-        ggml_backend_buffer_set_usage(buf_weights, GGML_BACKEND_BUFFER_USAGE_WEIGHTS);
-
-        sched = ggml_backend_sched_new({backend_gpu, backend_gpu2, backend_cpu}, NULL, num_backends, GGML_DEFAULT_GRAPH_SIZE, false);
-
-        // initialize buffers from a max size graph (optional)
-        reserve_graph = build_graph(sched, max_batch_size);
-
-        // manually assign nodes to a backend (optional, should not be needed in most cases)
-        struct ggml_tensor * node = ggml_mul_mat(ctx, ...);
-        ggml_backend_sched_set_tensor_backend(sched, node, backend_gpu);
-
-        ggml_backend_sched_reserve(sched, reserve_graph);
-
-        // compute
-        graph = build_graph(sched);
-        ggml_backend_sched_graph_compute(sched, graph);
-
-        // if there are graph inputs:
-        ggml_backend_sched_reset(sched);
-        ggml_backend_sched_alloc_graph(sched, graph);
-        ggml_backend_tensor_set(input_tensor, ...);
-        ggml_backend_sched_graph_compute(sched, graph);
-    }
-    */
-
-    struct ggml_backend_sched;
-    typedef struct ggml_backend_sched * ggml_backend_sched_t;
-
-    // when ask == true, the scheduler wants to know if the user wants to observe this node
-    // this allows the scheduler to batch nodes together in order to evaluate them in a single call
-    //
-    // when ask == false, the scheduler is passing the node tensor to the user for observation
-    // if the user returns false, the scheduler will cancel the graph compute
-    //
-    typedef bool (*ggml_backend_sched_eval_callback)(struct ggml_tensor * t, bool ask, void * user_data);
-
-    // Initialize a backend scheduler
-    GGML_API ggml_backend_sched_t ggml_backend_sched_new(ggml_backend_t * backends, ggml_backend_buffer_type_t * bufts, int n_backends, size_t graph_size, bool parallel);
-    GGML_API void                 ggml_backend_sched_free(ggml_backend_sched_t sched);
-
-    // Initialize backend buffers from a measure graph
-    GGML_API bool                 ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph);
-
-    GGML_API int                  ggml_backend_sched_get_n_backends(ggml_backend_sched_t sched);
-    GGML_API ggml_backend_t       ggml_backend_sched_get_backend(ggml_backend_sched_t sched, int i);
-
-    // Get the number of splits of the last graph
-    GGML_API int                  ggml_backend_sched_get_n_splits(ggml_backend_sched_t sched);
-    GGML_API int                  ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched);
-
-    GGML_API size_t               ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend);
-
-    GGML_API void                 ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend);
-    GGML_API ggml_backend_t       ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node);
-
-    // Allocate and compute graph on the backend scheduler
-    GGML_API bool                 ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph);
-    GGML_API enum ggml_status     ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct ggml_cgraph * graph);
-    GGML_API enum ggml_status     ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph);
-    GGML_API void                 ggml_backend_sched_synchronize(ggml_backend_sched_t sched);
-
-    // Reset all assignments and allocators - must be called before changing the node backends
-    GGML_API void                 ggml_backend_sched_reset(ggml_backend_sched_t sched);
-
-    // Set a callback to be called for each resulting node during graph compute
-    GGML_API void                 ggml_backend_sched_set_eval_callback(ggml_backend_sched_t sched, ggml_backend_sched_eval_callback callback, void * user_data);
-
-    //
-    // Utils
-    //
-
-    struct ggml_backend_graph_copy {
-        ggml_backend_buffer_t buffer;
-        struct ggml_context * ctx_allocated;
-        struct ggml_context * ctx_unallocated;
-        struct ggml_cgraph * graph;
-    };
-
-    // Copy a graph to a different backend
-    GGML_API struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t backend, struct ggml_cgraph * graph);
-    GGML_API void                           ggml_backend_graph_copy_free(struct ggml_backend_graph_copy copy);
-
-    typedef bool (*GGML_CALL ggml_backend_eval_callback)(int node_index, struct ggml_tensor * t1, struct ggml_tensor * t2, void * user_data);
-
-    // Compare the output of two backends
-    GGML_API bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t backend2, struct ggml_cgraph * graph, ggml_backend_eval_callback callback, void * user_data);
-
-    // Tensor initialization
-    GGML_API void ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr);
-    GGML_API void ggml_backend_view_init(struct ggml_tensor * tensor);
-
-
-#ifdef  __cplusplus
-}
-#endif
diff --git a/ggml-blas.cpp b/ggml-blas.cpp
deleted file mode 100644 (file)
index d709a35..0000000
+++ /dev/null
@@ -1,363 +0,0 @@
-#include "ggml-blas.h"
-#include "ggml-backend-impl.h"
-
-#include <future>
-#include <vector>
-
-#if defined(GGML_USE_ACCELERATE)
-#   include <Accelerate/Accelerate.h>
-#elif defined(GGML_BLAS_USE_MKL)
-#   include <mkl.h>
-#else
-#   include <cblas.h>
-#   ifdef BLIS_ENABLE_CBLAS
-#       include <blis.h>
-#   endif
-#endif
-
-struct ggml_backend_blas_context {
-    int n_threads = GGML_DEFAULT_N_THREADS;
-    std::unique_ptr<char[]> work_data;
-    size_t work_size = 0;
-#ifndef GGML_USE_OPENMP
-    std::vector<std::future<void>> tasks;
-#endif
-};
-
-// helper function to determine if it is better to use BLAS or not
-// for large matrices, BLAS is faster
-static bool ggml_backend_blas_use_blas(const struct ggml_tensor * dst) {
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    const int64_t ne10 = src1->ne[0];
-
-    const int64_t ne0 = dst->ne[0];
-    const int64_t ne1 = dst->ne[1];
-
-    // TODO: find the optimal values for these
-    if (ggml_is_contiguous(src0) &&
-        ggml_is_contiguous(src1) &&
-        src1->type == GGML_TYPE_F32 &&
-        (ne0 >= 32 && ne1 >= 32 && ne10 >= 32)) {
-
-        /*printf("BLAS: %d %d %d %d %d\n", ne0, ne1, ne10, ne00, ne01);*/
-        return true;
-    }
-
-    return false;
-}
-
-static void ggml_backend_blas_mul_mat(ggml_backend_blas_context * ctx, struct ggml_tensor * dst) {
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const enum ggml_type type = src0->type;
-
-    GGML_ASSERT(ne0 == ne01);
-    GGML_ASSERT(ne1 == ne11);
-    GGML_ASSERT(ne2 == ne12);
-    GGML_ASSERT(ne3 == ne13);
-
-    // we don't support permuted src0 or src1
-    GGML_ASSERT(nb00 == ggml_type_size(type));
-    GGML_ASSERT(nb10 == ggml_type_size(src1->type));
-
-    // dst cannot be transposed or permuted
-    GGML_ASSERT(nb0 == sizeof(float));
-    GGML_ASSERT(nb0 <= nb1);
-    GGML_ASSERT(nb1 <= nb2);
-    GGML_ASSERT(nb2 <= nb3);
-
-    // broadcast factors
-    const int64_t r2 = ne12/ne02;
-    const int64_t r3 = ne13/ne03;
-
-    const int64_t ne_plane      = ne01*ne00;
-    const size_t  desired_wsize = type == GGML_TYPE_F32 ? 0 : ne03*ne02*ne_plane*sizeof(float);
-
-    if (ctx->work_size < desired_wsize) {
-        ctx->work_data.reset(new char[desired_wsize]);
-        ctx->work_size = desired_wsize;
-    }
-    void * wdata = ctx->work_data.get();
-
-    // convert src0 to float
-    if (type != GGML_TYPE_F32) {
-        ggml_type_traits_t type_traits = ggml_internal_get_type_traits(type);
-        ggml_to_float_t const to_float = type_traits.to_float;
-
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                const void  *       x      = (char *)  src0->data + i02*nb02          + i03*nb03;
-                      float * const wplane = (float *) wdata      + i02*ne_plane      + i03*ne02*ne_plane;
-
-                const int min_cols_per_thread = 4096;
-                const int min_rows_per_thread = std::max((int)(min_cols_per_thread/ne00), 1);
-                const int n_threads = std::max(std::min(ctx->n_threads, (int)(ne01/min_rows_per_thread)), 1);
-
-#ifdef GGML_USE_OPENMP
-                #pragma omp parallel for num_threads(n_threads)
-                for (int64_t i01 = 0; i01 < ne01; i01++) {
-                    to_float((const char *) x + i01*nb01, wplane + i01*ne00, ne00);
-                }
-#else
-                for (int i = 1; i < n_threads; i++) {
-                    const int64_t start =       i*ne01/n_threads;
-                    const int64_t end   = (i + 1)*ne01/n_threads;
-                    if (start < end) {
-                        ctx->tasks.push_back(std::async(std::launch::async, [=]() {
-                            for (int64_t i01 = start; i01 < end; i01++) {
-                                to_float((const char *) x + i01*nb01, wplane + i01*ne00, ne00);
-                            }
-                        }));
-                    }
-                }
-                {
-                    // reuse the current thread for the first task
-                    const int64_t start = 0;
-                    const int64_t end   = ne01/n_threads;
-                    for (int64_t i01 = start; i01 < end; i01++) {
-                        to_float((const char *) x + i01*nb01, wplane + i01*ne00, ne00);
-                    }
-                }
-#endif
-            }
-        }
-
-#ifndef GGML_USE_OPENMP
-        // wait for all tasks to finish
-        for (auto & task : ctx->tasks) {
-            task.get();
-        }
-        ctx->tasks.clear();
-#endif
-    }
-
-#if defined(OPENBLAS_VERSION)
-    openblas_set_num_threads(ctx->n_threads);
-#endif
-
-#if defined(BLIS_ENABLE_CBLAS)
-    bli_thread_set_num_threads(ctx->n_threads);
-#endif
-
-    for (int64_t i13 = 0; i13 < ne13; i13++) {
-        for (int64_t i12 = 0; i12 < ne12; i12++) {
-            const int64_t i03 = i13/r3;
-            const int64_t i02 = i12/r2;
-
-            const float * x = (float *) ((char *) src0->data + i02*nb02 + i03*nb03);
-            const float * y = (float *) ((char *) src1->data + i12*nb12 + i13*nb13);
-                  float * d = (float *) ((char *)  dst->data + i12*nb2  + i13*nb3);
-
-            if (type != GGML_TYPE_F32) {
-                x = (float *) wdata + i02*ne_plane + i03*ne02*ne_plane;
-            }
-
-            cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans,
-                        ne1, ne01, ne10,
-                        1.0f,   y, ne10,
-                                x, ne00,
-                        0.0f,   d, ne01);
-        }
-    }
-}
-
-static void ggml_backend_blas_out_prod(ggml_backend_blas_context * ctx, struct ggml_tensor * dst) {
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    GGML_ASSERT(ne0  == ne00);
-    GGML_ASSERT(ne1  == ne10);
-    GGML_ASSERT(ne2  == ne02);
-    GGML_ASSERT(ne02 == ne12);
-    GGML_ASSERT(ne3  == ne13);
-    GGML_ASSERT(ne03 == ne13);
-
-    // we don't support permuted src0 or src1
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    // dst cannot be transposed or permuted
-    GGML_ASSERT(nb0 == sizeof(float));
-    // GGML_ASSERT(nb0 <= nb1);
-    // GGML_ASSERT(nb1 <= nb2);
-    // GGML_ASSERT(nb2 <= nb3);
-
-    // Arguments to ggml_compute_forward_out_prod (expressed as major,minor)
-    // src0: (k,n)
-    // src1: (k,m)
-    // dst:  (m,n)
-    //
-    // Arguments to sgemm (see https://github.com/Reference-LAPACK/lapack/blob/master/BLAS/SRC/sgemm.f)
-    // Also expressed as (major,minor)
-    // a: (m,k): so src1 transposed
-    // b: (k,n): so src0
-    // c: (m,n)
-    //
-    // However, if ggml_is_transposed(src1) is true, then
-    // src1->data already contains a transposed version, so sgemm mustn't
-    // transpose it further.
-
-    int n = src0->ne[0];
-    int k = src0->ne[1];
-    int m = src1->ne[0];
-
-    CBLAS_TRANSPOSE transposeA;
-    int lda;
-
-    if (!ggml_is_transposed(src1)) {
-        transposeA = CblasTrans;
-        lda = m;
-    } else {
-        transposeA = CblasNoTrans;
-        lda = k;
-    }
-
-    float * a = (float *) ((char *) src1->data);
-    float * b = (float *) ((char *) src0->data);
-    float * c = (float *) ((char *) dst->data);
-
-    cblas_sgemm(CblasRowMajor, transposeA, CblasNoTrans, m, n, k, 1.0, a, lda, b, n, 0.0, c, n);
-
-    GGML_UNUSED(ctx);
-}
-
-// backend interface
-
-GGML_CALL static const char * ggml_backend_blas_name(ggml_backend_t backend) {
-    return "BLAS";
-
-    GGML_UNUSED(backend);
-}
-
-GGML_CALL static void ggml_backend_blas_free(ggml_backend_t backend) {
-    ggml_backend_blas_context * ctx = (ggml_backend_blas_context *)backend->context;
-    delete ctx;
-    delete backend;
-}
-
-GGML_CALL static ggml_backend_buffer_type_t ggml_backend_blas_get_default_buffer_type(ggml_backend_t backend) {
-    return ggml_backend_cpu_buffer_type();
-
-    GGML_UNUSED(backend);
-}
-
-GGML_CALL static enum ggml_status ggml_backend_blas_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
-    ggml_backend_blas_context * ctx = (ggml_backend_blas_context *)backend->context;
-
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        struct ggml_tensor * node = cgraph->nodes[i];
-
-        switch (node->op) {
-            case GGML_OP_MUL_MAT:
-                ggml_backend_blas_mul_mat(ctx, node);
-                break;
-
-            case GGML_OP_OUT_PROD:
-                ggml_backend_blas_out_prod(ctx, node);
-                break;
-
-            case GGML_OP_NONE:
-            case GGML_OP_RESHAPE:
-            case GGML_OP_VIEW:
-            case GGML_OP_PERMUTE:
-            case GGML_OP_TRANSPOSE:
-                break;
-
-            default:
-                fprintf(stderr, "%s: unsupported op %s\n", __func__, ggml_op_desc(node));
-                GGML_ASSERT(false);
-        }
-    }
-
-    return GGML_STATUS_SUCCESS;
-
-    GGML_UNUSED(backend);
-}
-
-GGML_CALL static bool ggml_backend_blas_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
-    const struct ggml_tensor * src0 = op->src[0];
-    const struct ggml_tensor * src1 = op->src[1];
-
-    return (op->op == GGML_OP_MUL_MAT  && ggml_backend_blas_use_blas(op)) ||
-           (op->op == GGML_OP_OUT_PROD && op->src[0]->type == GGML_TYPE_F32 &&
-                                          op->src[1]->type == GGML_TYPE_F32 &&
-                                          ggml_is_matrix(src0) &&
-                                          ggml_is_matrix(src1) &&
-                                          ggml_is_contiguous(src0) &&
-                                          (ggml_is_contiguous(src1) || ggml_is_transposed(src1)));
-
-    GGML_UNUSED(backend);
-}
-
-GGML_CALL static bool ggml_backend_blas_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
-    return ggml_backend_buft_is_host(buft);
-
-    GGML_UNUSED(backend);
-}
-
-static struct ggml_backend_i blas_backend_i = {
-    /* .get_name                = */ ggml_backend_blas_name,
-    /* .free                    = */ ggml_backend_blas_free,
-    /* .get_default_buffer_type = */ ggml_backend_blas_get_default_buffer_type,
-    /* .set_tensor_async        = */ NULL,
-    /* .get_tensor_async        = */ NULL,
-    /* .cpy_tensor_async        = */ NULL,
-    /* .synchronize             = */ NULL,
-    /* .graph_plan_create       = */ NULL,
-    /* .graph_plan_free         = */ NULL,
-    /* .graph_plan_update       = */ NULL,
-    /* .graph_plan_compute      = */ NULL,
-    /* .graph_compute           = */ ggml_backend_blas_graph_compute,
-    /* .supports_op             = */ ggml_backend_blas_supports_op,
-    /* .supports_buft           = */ ggml_backend_blas_supports_buft,
-    /* .offload_op              = */ NULL,
-    /* .event_new               = */ NULL,
-    /* .event_free              = */ NULL,
-    /* .event_record            = */ NULL,
-    /* .event_wait              = */ NULL,
-    /* .event_synchronize       = */ NULL,
-};
-
-static ggml_guid_t ggml_backend_blas_guid(void) {
-    static ggml_guid guid = { 0x12, 0xa8, 0xae, 0xf4, 0xc0, 0x1e, 0x61, 0x97, 0x8f, 0xeb, 0x33, 0x04, 0xa1, 0x33, 0x51, 0x2d };
-    return &guid;
-}
-
-ggml_backend_t ggml_backend_blas_init(void) {
-    ggml_backend_blas_context * ctx = new ggml_backend_blas_context;
-
-    ggml_backend_t backend = new ggml_backend {
-        /* .guid      = */ ggml_backend_blas_guid(),
-        /* .interface = */ blas_backend_i,
-        /* .context   = */ ctx,
-    };
-
-#if !defined(NDEBUG) && defined(OPENBLAS_VERSION) && defined(GGML_USE_OPENMP)
-    if (openblas_get_parallel() != OPENBLAS_OPENMP) {
-        fprintf(stderr, "%s: warning: ggml is using OpenMP, but OpenBLAS was compiled without OpenMP support\n", __func__);
-    }
-#endif
-
-#if !defined(NDEBUG) && defined(BLIS_ENABLE_CBLAS) && defined(GGML_USE_OPENMP) && !defined(BLIS_ENABLE_OPENMP)
-    fprintf(stderr, "%s: warning: ggml is using OpenMP, but BLIS was compiled without OpenMP support\n", __func__);
-#endif
-
-    return backend;
-}
-
-GGML_CALL bool ggml_backend_is_blas(ggml_backend_t backend) {
-    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_blas_guid());
-}
-
-void ggml_backend_blas_set_n_threads(ggml_backend_t backend_blas, int n_threads) {
-    GGML_ASSERT(ggml_backend_is_blas(backend_blas));
-
-    ggml_backend_blas_context * ctx = (ggml_backend_blas_context *)backend_blas->context;
-    ctx->n_threads = n_threads;
-}
diff --git a/ggml-blas.h b/ggml-blas.h
deleted file mode 100644 (file)
index f2e37de..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include "ggml.h"
-#include "ggml-backend.h"
-
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-// backend API
-GGML_API GGML_CALL ggml_backend_t ggml_backend_blas_init(void);
-
-GGML_API GGML_CALL bool ggml_backend_is_blas(ggml_backend_t backend);
-
-// number of threads used for conversion to float
-// for openblas and blis, this will also set the number of threads used for blas operations
-GGML_API GGML_CALL void ggml_backend_blas_set_n_threads(ggml_backend_t backend_blas, int n_threads);
-
-
-#ifdef  __cplusplus
-}
-#endif
diff --git a/ggml-common.h b/ggml-common.h
deleted file mode 100644 (file)
index e8efceb..0000000
+++ /dev/null
@@ -1,1805 +0,0 @@
-#ifndef GGML_COMMON_DECL
-
-#if defined(GGML_COMMON_DECL_C)
-#include <stdint.h>
-
-typedef uint16_t ggml_half;
-typedef uint32_t ggml_half2;
-
-#define GGML_COMMON_AGGR
-
-#define GGML_COMMON_DECL
-#elif defined(GGML_COMMON_DECL_METAL)
-#include <metal_stdlib>
-
-typedef half  ggml_half;
-typedef half2 ggml_half2;
-
-#define GGML_COMMON_AGGR
-
-#define GGML_COMMON_DECL
-#elif defined(GGML_COMMON_DECL_CUDA)
-#include <cuda_fp16.h>
-#include <cstdint>
-
-typedef half  ggml_half;
-typedef half2 ggml_half2;
-
-#define GGML_COMMON_AGGR data
-
-#define GGML_COMMON_DECL
-#elif defined(GGML_COMMON_DECL_HIP)
-#include <hip/hip_fp16.h>
-#include <cstdint>
-
-typedef half  ggml_half;
-typedef half2 ggml_half2;
-
-#define GGML_COMMON_AGGR data
-
-#define GGML_COMMON_DECL
-#elif defined(GGML_COMMON_DECL_SYCL)
-#include <sycl/half_type.hpp>
-#include <cstdint>
-
-typedef sycl::half  ggml_half;
-typedef sycl::half2 ggml_half2;
-
-#define GGML_COMMON_AGGR data
-
-#define GGML_COMMON_DECL
-#endif
-
-#if defined(GGML_COMMON_DECL)
-
-#ifndef __cplusplus
-#ifndef static_assert
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L)
-#define static_assert(cond, msg) _Static_assert(cond, msg)
-#else
-#define static_assert(cond, msg) struct global_scope_noop_trick
-#endif
-#endif
-#endif // __cplusplus
-
-// QK = number of values after dequantization
-// QK_K = super-block size
-
-#define QK_K 256
-#define K_SCALE_SIZE 12
-
-#if defined(GGML_COMMON_DECL_CUDA) || defined(GGML_COMMON_DECL_HIP) || defined(GGML_COMMON_DECL_SYCL)
-// QR = QK / number of values before dequantization
-// QI = number of 32 bit integers before dequantization
-
-#define QI4_0 (QK4_0 / (4 * QR4_0))
-#define QR4_0 2
-
-#define QI4_1 (QK4_1 / (4 * QR4_1))
-#define QR4_1 2
-
-#define QI5_0 (QK5_0 / (4 * QR5_0))
-#define QR5_0 2
-
-#define QI5_1 (QK5_1 / (4 * QR5_1))
-#define QR5_1 2
-
-#define QI8_0 (QK8_0 / (4 * QR8_0))
-#define QR8_0 1
-
-#define QI8_1 (QK8_1 / (4 * QR8_1))
-#define QR8_1 1
-
-#define QI2_K (QK_K / (4*QR2_K))
-#define QR2_K 4
-
-#define QI3_K (QK_K / (4*QR3_K))
-#define QR3_K 4
-
-#define QI4_K (QK_K / (4*QR4_K))
-#define QR4_K 2
-
-#define QI5_K (QK_K / (4*QR5_K))
-#define QR5_K 2
-
-#define QI6_K (QK_K / (4*QR6_K))
-#define QR6_K 2
-
-#define QI2_XXS (QK_K / (4*QR2_XXS))
-#define QR2_XXS 8
-
-#define QI2_XS (QK_K / (4*QR2_XS))
-#define QR2_XS 8
-
-#define QI2_S (QK_K / (4*QR2_S))
-#define QR2_S 8
-
-#define QI3_XXS (QK_K / (4*QR3_XXS))
-#define QR3_XXS 8
-
-#define QI3_XS (QK_K / (4*QR3_XS))
-#define QR3_XS 8
-
-#define QI1_S (QK_K / (4*QR1_S))
-#define QR1_S 8
-
-#define QI1_M (QK_K / (4*QR1_M))
-#define QR1_M 8
-
-#define QI4_NL (QK4_NL / (4*QR4_NL))
-#define QR4_NL 2
-
-#define QI4_XS (QK_K / (4*QR4_XS))
-#define QR4_XS 8
-
-#define QI3_S (QK_K / (4*QR3_S))
-#define QR3_S 8
-
-#endif // GGML_COMMON_DECL_CUDA || GGML_COMMON_DECL_HIP
-
-#define QK4_0 32
-typedef struct {
-    ggml_half d;           // delta
-    uint8_t qs[QK4_0 / 2]; // nibbles / quants
-} block_q4_0;
-static_assert(sizeof(block_q4_0) == sizeof(ggml_half) + QK4_0 / 2, "wrong q4_0 block size/padding");
-
-#define QK4_1 32
-typedef struct {
-    union {
-        struct {
-            ggml_half d; // delta
-            ggml_half m; // min
-        } GGML_COMMON_AGGR;
-        ggml_half2 dm;
-    };
-    uint8_t qs[QK4_1 / 2]; // nibbles / quants
-} block_q4_1;
-static_assert(sizeof(block_q4_1) == 2 * sizeof(ggml_half) + QK4_1 / 2, "wrong q4_1 block size/padding");
-
-#define QK5_0 32
-typedef struct {
-    ggml_half d;           // delta
-    uint8_t qh[4];         // 5-th bit of quants
-    uint8_t qs[QK5_0 / 2]; // nibbles / quants
-} block_q5_0;
-static_assert(sizeof(block_q5_0) == sizeof(ggml_half) + sizeof(uint32_t) + QK5_0 / 2, "wrong q5_0 block size/padding");
-
-#define QK5_1 32
-typedef struct {
-    union {
-        struct {
-            ggml_half d; // delta
-            ggml_half m; // min
-        } GGML_COMMON_AGGR;
-        ggml_half2 dm;
-    };
-    uint8_t qh[4];         // 5-th bit of quants
-    uint8_t qs[QK5_1 / 2]; // nibbles / quants
-} block_q5_1;
-static_assert(sizeof(block_q5_1) == 2 * sizeof(ggml_half) + sizeof(uint32_t) + QK5_1 / 2, "wrong q5_1 block size/padding");
-
-#define QK8_0 32
-typedef struct {
-    ggml_half d;       // delta
-    int8_t  qs[QK8_0]; // quants
-} block_q8_0;
-static_assert(sizeof(block_q8_0) == sizeof(ggml_half) + QK8_0, "wrong q8_0 block size/padding");
-
-#define QK8_1 32
-typedef struct {
-    union {
-        struct {
-            ggml_half d; // delta
-            ggml_half s; // d * sum(qs[i])
-        } GGML_COMMON_AGGR;
-        ggml_half2 ds;
-    };
-    int8_t qs[QK8_1]; // quants
-} block_q8_1;
-static_assert(sizeof(block_q8_1) == 2*sizeof(ggml_half) + QK8_1, "wrong q8_1 block size/padding");
-
-//
-// Super-block quantization structures
-//
-
-// 2-bit quantization
-// weight is represented as x = a * q + b
-// 16 blocks of 16 elements each
-// Effectively 2.625 bits per weight
-typedef struct {
-    uint8_t scales[QK_K/16]; // scales and mins, quantized with 4 bits
-    uint8_t qs[QK_K/4];      // quants
-    union {
-        struct {
-            ggml_half d;    // super-block scale for quantized scales
-            ggml_half dmin; // super-block scale for quantized mins
-        } GGML_COMMON_AGGR;
-        ggml_half2 dm;
-    };
-} block_q2_K;
-static_assert(sizeof(block_q2_K) == 2*sizeof(ggml_half) + QK_K/16 + QK_K/4, "wrong q2_K block size/padding");
-
-// 3-bit quantization
-// weight is represented as x = a * q
-// 16 blocks of 16 elements each
-// Effectively 3.4375 bits per weight
-typedef struct {
-    uint8_t hmask[QK_K/8]; // quants - high bit
-    uint8_t qs[QK_K/4];    // quants - low 2 bits
-    uint8_t scales[12];    // scales, quantized with 6 bits
-    ggml_half d;           // super-block scale
-} block_q3_K;
-static_assert(sizeof(block_q3_K) == sizeof(ggml_half) + QK_K / 4 + QK_K / 8 + 12, "wrong q3_K block size/padding");
-
-// 4-bit quantization
-// 8 blocks of 32 elements each
-// weight is represented as x = a * q + b
-// Effectively 4.5 bits per weight
-typedef struct {
-    union {
-        struct {
-            ggml_half d;    // super-block scale for quantized scales
-            ggml_half dmin; // super-block scale for quantized mins
-        } GGML_COMMON_AGGR;
-        ggml_half2 dm;
-    };
-    uint8_t scales[K_SCALE_SIZE]; // scales and mins, quantized with 6 bits
-    uint8_t qs[QK_K/2];           // 4--bit quants
-} block_q4_K;
-static_assert(sizeof(block_q4_K) == 2*sizeof(ggml_half) + K_SCALE_SIZE + QK_K/2, "wrong q4_K block size/padding");
-
-// 5-bit quantization
-// 8 blocks of 32 elements each
-// weight is represented as x = a * q + b
-// Effectively 5.5 bits per weight
-typedef struct {
-    union {
-        struct {
-            ggml_half d;    // super-block scale for quantized scales
-            ggml_half dmin; // super-block scale for quantized mins
-        } GGML_COMMON_AGGR;
-        ggml_half2 dm;
-    };
-    uint8_t scales[K_SCALE_SIZE]; // scales and mins, quantized with 6 bits
-    uint8_t qh[QK_K/8];           // quants, high bit
-    uint8_t qs[QK_K/2];           // quants, low 4 bits
-} block_q5_K;
-static_assert(sizeof(block_q5_K) == 2*sizeof(ggml_half) + K_SCALE_SIZE + QK_K/2 + QK_K/8, "wrong q5_K block size/padding");
-
-// 6-bit quantization
-// weight is represented as x = a * q
-// 16 blocks of 16 elements each
-// Effectively 6.5625 bits per weight
-typedef struct {
-    uint8_t ql[QK_K/2];      // quants, lower 4 bits
-    uint8_t qh[QK_K/4];      // quants, upper 2 bits
-    int8_t  scales[QK_K/16]; // scales, quantized with 8 bits
-    ggml_half d;             // super-block scale
-} block_q6_K;
-static_assert(sizeof(block_q6_K) == sizeof(ggml_half) + QK_K / 16 + 3*QK_K/4, "wrong q6_K block size/padding");
-
-// This is only used for intermediate quantization and dot products
-typedef struct {
-    float   d;              // delta
-    int8_t  qs[QK_K];       // quants
-    int16_t bsums[QK_K/16]; // sum of quants in groups of 16
-} block_q8_K;
-static_assert(sizeof(block_q8_K) == sizeof(float) + QK_K + QK_K/16*sizeof(int16_t), "wrong q8_K block size/padding");
-
-// (Almost) "true" 2-bit quantization.
-// Due to the need to use blocks as per ggml design, it ends up using
-// 2.0625 bpw because of the 16-bit scale for each block of 256.
-typedef struct {
-    ggml_half d;
-    uint16_t qs[QK_K/8];
-} block_iq2_xxs;
-static_assert(sizeof(block_iq2_xxs) == sizeof(ggml_half) + QK_K/8*sizeof(uint16_t), "wrong iq2_xxs block size/padding");
-
-// 2.3125 bpw quants
-typedef struct {
-    ggml_half d;
-    uint16_t qs[QK_K/8];
-    uint8_t  scales[QK_K/32];
-} block_iq2_xs;
-static_assert(sizeof(block_iq2_xs) == sizeof(ggml_half) + QK_K/8*sizeof(uint16_t) + QK_K/32, "wrong iq2_xs block size/padding");
-
-// 2.5625 bpw quants
-typedef struct {
-    ggml_half d;
-    uint8_t qs[QK_K/4];
-    uint8_t qh[QK_K/32];
-    uint8_t scales[QK_K/32];
-} block_iq2_s;
-static_assert(sizeof(block_iq2_s) == sizeof(ggml_half) + QK_K/4 + QK_K/16, "wrong iq2_s block size/padding");
-
-// (Almost) "true" 3-bit quantization.
-// Due to the need to use blocks as per ggml design, it ends up using
-// 3.0625 bpw because of the 16-bit scale for each block of 256.
-typedef struct {
-    ggml_half d;
-    uint8_t qs[3*QK_K/8];
-} block_iq3_xxs;
-static_assert(sizeof(block_iq3_xxs) == sizeof(ggml_half) + 3*(QK_K/8), "wrong iq3_xxs block size/padding");
-
-// 3.4375 bpw
-#define IQ3S_N_SCALE QK_K/64
-typedef struct {
-    ggml_half d;
-    uint8_t qs[QK_K/4];
-    uint8_t qh[QK_K/32];
-    uint8_t signs[QK_K/8];
-    uint8_t scales[IQ3S_N_SCALE];
-} block_iq3_s;
-static_assert(sizeof(block_iq3_s) == sizeof(ggml_half) + 13*(QK_K/32) + IQ3S_N_SCALE, "wrong iq3_s block size/padding");
-
-typedef struct {
-    ggml_half d;
-    uint8_t  qs[QK_K/8];
-    uint16_t qh[QK_K/32];
-} block_iq1_s;
-static_assert(sizeof(block_iq1_s) == sizeof(ggml_half) + QK_K/8 + QK_K/16, "wrong iq1_s block size/padding");
-
-// 1.75 bpw
-typedef struct {
-    uint8_t  qs[QK_K/8];      // grid index, low 8 bits
-    uint8_t  qh[QK_K/16];     // grid index, high 3 bits + grid shift bit (for two groups of 8)
-    uint8_t  scales[QK_K/32]; // 3-bit block scales (4-bit if QK_K == 64)
-} block_iq1_m;
-static_assert(sizeof(block_iq1_m) == QK_K/8 + QK_K/16 + QK_K/32, "wrong iq1_m block size/padding");
-
-// Used by IQ1_M quants
-typedef union {
-    ggml_half f16;
-    uint16_t  u16;
-} iq1m_scale_t;
-
-// Non-linear quants
-#define QK4_NL 32
-typedef struct {
-    ggml_half d;
-    uint8_t qs[QK4_NL/2];
-} block_iq4_nl;
-static_assert(sizeof(block_iq4_nl) == sizeof(ggml_half) + QK4_NL/2, "wrong iq4_nl block size/padding");
-
-typedef struct {
-    ggml_half d;
-    uint16_t scales_h;
-    uint8_t  scales_l[QK_K/64];
-    uint8_t  qs[QK_K/2];
-} block_iq4_xs;
-static_assert(sizeof(block_iq4_xs) == sizeof(ggml_half) + sizeof(uint16_t) + QK_K/64 + QK_K/2, "wrong iq4_xs block size/padding");
-
-#endif // GGML_COMMON_DECL
-#endif // GGML_COMMON_DECL
-
-////////////////////////////////////////////////////////////////////////////////
-
-#ifndef GGML_COMMON_IMPL
-
-#if defined(GGML_COMMON_IMPL_C)
-#include <stdint.h>
-
-#define GGML_TABLE_BEGIN(type, name, size) static const type name[size] = {
-#define GGML_TABLE_END() };
-
-#define GGML_COMMON_IMPL
-#elif defined(GGML_COMMON_IMPL_METAL)
-#include <metal_stdlib>
-
-#define GGML_TABLE_BEGIN(type, name, size) static const constant type name[size] = {
-#define GGML_TABLE_END() };
-
-#define GGML_COMMON_IMPL
-#elif defined(GGML_COMMON_IMPL_CUDA) || defined(GGML_COMMON_IMPL_HIP)
-#include <cstdint>
-
-#define GGML_TABLE_BEGIN(type, name, size) static const __device__ type name[size] = {
-#define GGML_TABLE_END() };
-
-#define GGML_COMMON_IMPL
-#elif defined(GGML_COMMON_IMPL_SYCL)
-
-#include <cstdint>
-
-#define GGML_TABLE_BEGIN(type, name, size) static const type name[size] = {
-#define GGML_TABLE_END() };
-
-#define GGML_COMMON_IMPL
-#endif
-
-#if defined(GGML_COMMON_IMPL)
-
-GGML_TABLE_BEGIN(uint8_t, kmask_iq2xs, 8)
-    1, 2, 4, 8, 16, 32, 64, 128
-GGML_TABLE_END()
-
-GGML_TABLE_BEGIN(uint8_t, ksigns_iq2xs, 128)
-      0, 129, 130,   3, 132,   5,   6, 135, 136,   9,  10, 139,  12, 141, 142,  15,
-    144,  17,  18, 147,  20, 149, 150,  23,  24, 153, 154,  27, 156,  29,  30, 159,
-    160,  33,  34, 163,  36, 165, 166,  39,  40, 169, 170,  43, 172,  45,  46, 175,
-     48, 177, 178,  51, 180,  53,  54, 183, 184,  57,  58, 187,  60, 189, 190,  63,
-    192,  65,  66, 195,  68, 197, 198,  71,  72, 201, 202,  75, 204,  77,  78, 207,
-     80, 209, 210,  83, 212,  85,  86, 215, 216,  89,  90, 219,  92, 221, 222,  95,
-     96, 225, 226,  99, 228, 101, 102, 231, 232, 105, 106, 235, 108, 237, 238, 111,
-    240, 113, 114, 243, 116, 245, 246, 119, 120, 249, 250, 123, 252, 125, 126, 255,
-GGML_TABLE_END()
-
-//#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-GGML_TABLE_BEGIN(uint64_t, ksigns64, 128)
-    0x0000000000000000, 0xff000000000000ff, 0xff0000000000ff00, 0x000000000000ffff,
-    0xff00000000ff0000, 0x0000000000ff00ff, 0x0000000000ffff00, 0xff00000000ffffff,
-    0xff000000ff000000, 0x00000000ff0000ff, 0x00000000ff00ff00, 0xff000000ff00ffff,
-    0x00000000ffff0000, 0xff000000ffff00ff, 0xff000000ffffff00, 0x00000000ffffffff,
-    0xff0000ff00000000, 0x000000ff000000ff, 0x000000ff0000ff00, 0xff0000ff0000ffff,
-    0x000000ff00ff0000, 0xff0000ff00ff00ff, 0xff0000ff00ffff00, 0x000000ff00ffffff,
-    0x000000ffff000000, 0xff0000ffff0000ff, 0xff0000ffff00ff00, 0x000000ffff00ffff,
-    0xff0000ffffff0000, 0x000000ffffff00ff, 0x000000ffffffff00, 0xff0000ffffffffff,
-    0xff00ff0000000000, 0x0000ff00000000ff, 0x0000ff000000ff00, 0xff00ff000000ffff,
-    0x0000ff0000ff0000, 0xff00ff0000ff00ff, 0xff00ff0000ffff00, 0x0000ff0000ffffff,
-    0x0000ff00ff000000, 0xff00ff00ff0000ff, 0xff00ff00ff00ff00, 0x0000ff00ff00ffff,
-    0xff00ff00ffff0000, 0x0000ff00ffff00ff, 0x0000ff00ffffff00, 0xff00ff00ffffffff,
-    0x0000ffff00000000, 0xff00ffff000000ff, 0xff00ffff0000ff00, 0x0000ffff0000ffff,
-    0xff00ffff00ff0000, 0x0000ffff00ff00ff, 0x0000ffff00ffff00, 0xff00ffff00ffffff,
-    0xff00ffffff000000, 0x0000ffffff0000ff, 0x0000ffffff00ff00, 0xff00ffffff00ffff,
-    0x0000ffffffff0000, 0xff00ffffffff00ff, 0xff00ffffffffff00, 0x0000ffffffffffff,
-    0xffff000000000000, 0x00ff0000000000ff, 0x00ff00000000ff00, 0xffff00000000ffff,
-    0x00ff000000ff0000, 0xffff000000ff00ff, 0xffff000000ffff00, 0x00ff000000ffffff,
-    0x00ff0000ff000000, 0xffff0000ff0000ff, 0xffff0000ff00ff00, 0x00ff0000ff00ffff,
-    0xffff0000ffff0000, 0x00ff0000ffff00ff, 0x00ff0000ffffff00, 0xffff0000ffffffff,
-    0x00ff00ff00000000, 0xffff00ff000000ff, 0xffff00ff0000ff00, 0x00ff00ff0000ffff,
-    0xffff00ff00ff0000, 0x00ff00ff00ff00ff, 0x00ff00ff00ffff00, 0xffff00ff00ffffff,
-    0xffff00ffff000000, 0x00ff00ffff0000ff, 0x00ff00ffff00ff00, 0xffff00ffff00ffff,
-    0x00ff00ffffff0000, 0xffff00ffffff00ff, 0xffff00ffffffff00, 0x00ff00ffffffffff,
-    0x00ffff0000000000, 0xffffff00000000ff, 0xffffff000000ff00, 0x00ffff000000ffff,
-    0xffffff0000ff0000, 0x00ffff0000ff00ff, 0x00ffff0000ffff00, 0xffffff0000ffffff,
-    0xffffff00ff000000, 0x00ffff00ff0000ff, 0x00ffff00ff00ff00, 0xffffff00ff00ffff,
-    0x00ffff00ffff0000, 0xffffff00ffff00ff, 0xffffff00ffffff00, 0x00ffff00ffffffff,
-    0xffffffff00000000, 0x00ffffff000000ff, 0x00ffffff0000ff00, 0xffffffff0000ffff,
-    0x00ffffff00ff0000, 0xffffffff00ff00ff, 0xffffffff00ffff00, 0x00ffffff00ffffff,
-    0x00ffffffff000000, 0xffffffffff0000ff, 0xffffffffff00ff00, 0x00ffffffff00ffff,
-    0xffffffffffff0000, 0x00ffffffffff00ff, 0x00ffffffffffff00, 0xffffffffffffffff,
-GGML_TABLE_END()
-//#endif
-
-
-GGML_TABLE_BEGIN(uint64_t, iq2xxs_grid, 256)
-    0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08,
-    0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x08080808082b0808,
-    0x08080808082b082b, 0x08080808082b2b08, 0x08080808082b2b2b, 0x0808080819080819,
-    0x0808080819081908, 0x0808080819190808, 0x0808080819192b08, 0x08080808192b0819,
-    0x08080808192b1908, 0x080808082b080808, 0x080808082b08082b, 0x080808082b082b2b,
-    0x080808082b2b082b, 0x0808081908080819, 0x0808081908081908, 0x0808081908190808,
-    0x0808081908191919, 0x0808081919080808, 0x080808192b081908, 0x080808192b192b08,
-    0x0808082b08080808, 0x0808082b0808082b, 0x0808082b082b082b, 0x0808082b2b08082b,
-    0x0808190808080819, 0x0808190808081908, 0x0808190808190808, 0x08081908082b0819,
-    0x08081908082b1908, 0x0808190819080808, 0x080819081908082b, 0x0808190819082b08,
-    0x08081908192b0808, 0x080819082b080819, 0x080819082b081908, 0x080819082b190808,
-    0x080819082b2b1908, 0x0808191908080808, 0x080819190808082b, 0x0808191908082b08,
-    0x08081919082b0808, 0x080819191908192b, 0x08081919192b2b19, 0x080819192b080808,
-    0x080819192b190819, 0x0808192b08082b19, 0x0808192b08190808, 0x0808192b19080808,
-    0x0808192b2b081908, 0x0808192b2b2b1908, 0x08082b0808080808, 0x08082b0808081919,
-    0x08082b0808082b08, 0x08082b0808191908, 0x08082b08082b2b08, 0x08082b0819080819,
-    0x08082b0819081908, 0x08082b0819190808, 0x08082b081919082b, 0x08082b082b082b08,
-    0x08082b1908081908, 0x08082b1919080808, 0x08082b2b0808082b, 0x08082b2b08191908,
-    0x0819080808080819, 0x0819080808081908, 0x0819080808190808, 0x08190808082b0819,
-    0x0819080819080808, 0x08190808192b0808, 0x081908082b081908, 0x081908082b190808,
-    0x081908082b191919, 0x0819081908080808, 0x0819081908082b08, 0x08190819082b0808,
-    0x0819081919190808, 0x0819081919192b2b, 0x081908192b080808, 0x0819082b082b1908,
-    0x0819082b19081919, 0x0819190808080808, 0x0819190808082b08, 0x08191908082b0808,
-    0x08191908082b1919, 0x0819190819082b19, 0x081919082b080808, 0x0819191908192b08,
-    0x08191919192b082b, 0x0819192b08080808, 0x0819192b0819192b, 0x08192b0808080819,
-    0x08192b0808081908, 0x08192b0808190808, 0x08192b0819080808, 0x08192b082b080819,
-    0x08192b1908080808, 0x08192b1908081919, 0x08192b192b2b0808, 0x08192b2b19190819,
-    0x082b080808080808, 0x082b08080808082b, 0x082b080808082b2b, 0x082b080819081908,
-    0x082b0808192b0819, 0x082b08082b080808, 0x082b08082b08082b, 0x082b0819082b2b19,
-    0x082b081919082b08, 0x082b082b08080808, 0x082b082b0808082b, 0x082b190808080819,
-    0x082b190808081908, 0x082b190808190808, 0x082b190819080808, 0x082b19081919192b,
-    0x082b191908080808, 0x082b191919080819, 0x082b1919192b1908, 0x082b192b2b190808,
-    0x082b2b0808082b08, 0x082b2b08082b0808, 0x082b2b082b191908, 0x082b2b2b19081908,
-    0x1908080808080819, 0x1908080808081908, 0x1908080808190808, 0x1908080808192b08,
-    0x19080808082b0819, 0x19080808082b1908, 0x1908080819080808, 0x1908080819082b08,
-    0x190808081919192b, 0x19080808192b0808, 0x190808082b080819, 0x190808082b081908,
-    0x190808082b190808, 0x1908081908080808, 0x19080819082b0808, 0x19080819192b0819,
-    0x190808192b080808, 0x190808192b081919, 0x1908082b08080819, 0x1908082b08190808,
-    0x1908082b19082b08, 0x1908082b1919192b, 0x1908082b192b2b08, 0x1908190808080808,
-    0x1908190808082b08, 0x19081908082b0808, 0x190819082b080808, 0x190819082b192b19,
-    0x190819190819082b, 0x19081919082b1908, 0x1908192b08080808, 0x19082b0808080819,
-    0x19082b0808081908, 0x19082b0808190808, 0x19082b0819080808, 0x19082b0819081919,
-    0x19082b1908080808, 0x19082b1919192b08, 0x19082b19192b0819, 0x19082b192b08082b,
-    0x19082b2b19081919, 0x19082b2b2b190808, 0x1919080808080808, 0x1919080808082b08,
-    0x1919080808190819, 0x1919080808192b19, 0x19190808082b0808, 0x191908082b080808,
-    0x191908082b082b08, 0x1919081908081908, 0x191908191908082b, 0x191908192b2b1908,
-    0x1919082b2b190819, 0x191919082b190808, 0x191919082b19082b, 0x1919191908082b2b,
-    0x1919192b08080819, 0x1919192b19191908, 0x19192b0808080808, 0x19192b0808190819,
-    0x19192b0808192b19, 0x19192b08192b1908, 0x19192b1919080808, 0x19192b2b08082b08,
-    0x192b080808081908, 0x192b080808190808, 0x192b080819080808, 0x192b0808192b2b08,
-    0x192b081908080808, 0x192b081919191919, 0x192b082b08192b08, 0x192b082b192b0808,
-    0x192b190808080808, 0x192b190808081919, 0x192b191908190808, 0x192b19190819082b,
-    0x192b19192b081908, 0x192b2b081908082b, 0x2b08080808080808, 0x2b0808080808082b,
-    0x2b08080808082b2b, 0x2b08080819080819, 0x2b0808082b08082b, 0x2b08081908081908,
-    0x2b08081908192b08, 0x2b08081919080808, 0x2b08082b08190819, 0x2b08190808080819,
-    0x2b08190808081908, 0x2b08190808190808, 0x2b08190808191919, 0x2b08190819080808,
-    0x2b081908192b0808, 0x2b08191908080808, 0x2b0819191908192b, 0x2b0819192b191908,
-    0x2b08192b08082b19, 0x2b08192b19080808, 0x2b08192b192b0808, 0x2b082b080808082b,
-    0x2b082b1908081908, 0x2b082b2b08190819, 0x2b19080808081908, 0x2b19080808190808,
-    0x2b190808082b1908, 0x2b19080819080808, 0x2b1908082b2b0819, 0x2b1908190819192b,
-    0x2b1908192b080808, 0x2b19082b19081919, 0x2b19190808080808, 0x2b191908082b082b,
-    0x2b19190819081908, 0x2b19191919190819, 0x2b192b082b080819, 0x2b192b19082b0808,
-    0x2b2b08080808082b, 0x2b2b080819190808, 0x2b2b08082b081919, 0x2b2b081908082b19,
-    0x2b2b082b08080808, 0x2b2b190808192b08, 0x2b2b2b0819190808, 0x2b2b2b1908081908,
-GGML_TABLE_END()
-
-GGML_TABLE_BEGIN(uint64_t, iq2xs_grid, 512)
-    0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08,
-    0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x080808080819192b,
-    0x0808080808192b19, 0x08080808082b0808, 0x08080808082b082b, 0x08080808082b1919,
-    0x08080808082b2b08, 0x0808080819080819, 0x0808080819081908, 0x080808081908192b,
-    0x0808080819082b19, 0x0808080819190808, 0x080808081919082b, 0x0808080819191919,
-    0x0808080819192b08, 0x08080808192b0819, 0x08080808192b1908, 0x080808082b080808,
-    0x080808082b08082b, 0x080808082b081919, 0x080808082b082b08, 0x080808082b190819,
-    0x080808082b191908, 0x080808082b192b19, 0x080808082b2b0808, 0x0808081908080819,
-    0x0808081908081908, 0x080808190808192b, 0x0808081908082b19, 0x0808081908190808,
-    0x080808190819082b, 0x0808081908191919, 0x0808081908192b08, 0x0808081908192b2b,
-    0x08080819082b0819, 0x08080819082b1908, 0x0808081919080808, 0x080808191908082b,
-    0x0808081919081919, 0x0808081919082b08, 0x0808081919190819, 0x0808081919191908,
-    0x08080819192b0808, 0x08080819192b2b08, 0x080808192b080819, 0x080808192b081908,
-    0x080808192b190808, 0x0808082b08080808, 0x0808082b0808082b, 0x0808082b08081919,
-    0x0808082b08082b08, 0x0808082b08190819, 0x0808082b08191908, 0x0808082b082b0808,
-    0x0808082b19080819, 0x0808082b19081908, 0x0808082b19190808, 0x0808082b19191919,
-    0x0808082b2b080808, 0x0808082b2b082b2b, 0x0808190808080819, 0x0808190808081908,
-    0x080819080808192b, 0x0808190808082b19, 0x0808190808190808, 0x080819080819082b,
-    0x0808190808191919, 0x0808190808192b08, 0x08081908082b0819, 0x08081908082b1908,
-    0x0808190819080808, 0x080819081908082b, 0x0808190819081919, 0x0808190819082b08,
-    0x0808190819190819, 0x0808190819191908, 0x080819081919192b, 0x08081908192b0808,
-    0x080819082b080819, 0x080819082b081908, 0x080819082b190808, 0x0808191908080808,
-    0x080819190808082b, 0x0808191908081919, 0x0808191908082b08, 0x0808191908190819,
-    0x0808191908191908, 0x08081919082b0808, 0x0808191919080819, 0x0808191919081908,
-    0x0808191919190808, 0x08081919192b0819, 0x080819192b080808, 0x0808192b08080819,
-    0x0808192b08081908, 0x0808192b08190808, 0x0808192b082b192b, 0x0808192b19080808,
-    0x0808192b1908082b, 0x0808192b2b081908, 0x08082b0808080808, 0x08082b080808082b,
-    0x08082b0808081919, 0x08082b0808082b08, 0x08082b0808082b2b, 0x08082b0808190819,
-    0x08082b0808191908, 0x08082b08082b0808, 0x08082b08082b1919, 0x08082b0819080819,
-    0x08082b0819081908, 0x08082b0819190808, 0x08082b0819192b08, 0x08082b082b080808,
-    0x08082b082b2b0808, 0x08082b082b2b2b2b, 0x08082b1908080819, 0x08082b1908081908,
-    0x08082b1908190808, 0x08082b1919080808, 0x08082b192b080819, 0x08082b192b082b19,
-    0x08082b2b08080808, 0x08082b2b082b0808, 0x08082b2b082b2b08, 0x08082b2b2b19192b,
-    0x08082b2b2b2b0808, 0x0819080808080819, 0x0819080808081908, 0x081908080808192b,
-    0x0819080808082b19, 0x0819080808190808, 0x081908080819082b, 0x0819080808191919,
-    0x0819080808192b08, 0x08190808082b0819, 0x08190808082b1908, 0x0819080819080808,
-    0x081908081908082b, 0x0819080819081919, 0x0819080819082b08, 0x0819080819190819,
-    0x0819080819191908, 0x08190808192b0808, 0x08190808192b2b2b, 0x081908082b080819,
-    0x081908082b081908, 0x081908082b190808, 0x0819081908080808, 0x081908190808082b,
-    0x0819081908081919, 0x0819081908082b08, 0x0819081908190819, 0x0819081908191908,
-    0x08190819082b0808, 0x0819081919080819, 0x0819081919081908, 0x0819081919190808,
-    0x081908192b080808, 0x081908192b191908, 0x081908192b19192b, 0x0819082b08080819,
-    0x0819082b08081908, 0x0819082b0808192b, 0x0819082b08190808, 0x0819082b19080808,
-    0x0819082b192b0808, 0x0819190808080808, 0x081919080808082b, 0x0819190808081919,
-    0x0819190808082b08, 0x0819190808190819, 0x0819190808191908, 0x08191908082b0808,
-    0x0819190819080819, 0x0819190819081908, 0x0819190819082b19, 0x0819190819190808,
-    0x08191908192b1908, 0x081919082b080808, 0x0819191908080819, 0x0819191908081908,
-    0x0819191908190808, 0x0819191919080808, 0x0819192b08080808, 0x0819192b08191908,
-    0x0819192b19082b19, 0x08192b0808080819, 0x08192b0808081908, 0x08192b0808190808,
-    0x08192b080819082b, 0x08192b0819080808, 0x08192b0819191908, 0x08192b082b08192b,
-    0x08192b1908080808, 0x08192b1908081919, 0x08192b19192b192b, 0x08192b2b19190819,
-    0x08192b2b2b2b2b19, 0x082b080808080808, 0x082b08080808082b, 0x082b080808081919,
-    0x082b080808082b08, 0x082b080808082b2b, 0x082b080808190819, 0x082b080808191908,
-    0x082b0808082b0808, 0x082b080819080819, 0x082b080819081908, 0x082b080819190808,
-    0x082b08082b080808, 0x082b08082b2b0808, 0x082b081908080819, 0x082b081908081908,
-    0x082b081908190808, 0x082b081919080808, 0x082b081919082b08, 0x082b0819192b1919,
-    0x082b082b08080808, 0x082b082b082b082b, 0x082b082b2b080808, 0x082b082b2b2b2b08,
-    0x082b190808080819, 0x082b190808081908, 0x082b190808190808, 0x082b1908082b2b19,
-    0x082b190819080808, 0x082b191908080808, 0x082b191919080819, 0x082b19191919082b,
-    0x082b19192b192b19, 0x082b192b08080819, 0x082b192b08192b2b, 0x082b192b2b2b192b,
-    0x082b2b0808080808, 0x082b2b0808082b08, 0x082b2b0808082b2b, 0x082b2b08082b0808,
-    0x082b2b0819191919, 0x082b2b082b082b08, 0x082b2b082b2b082b, 0x082b2b19192b2b08,
-    0x082b2b192b190808, 0x082b2b2b08082b08, 0x082b2b2b082b0808, 0x082b2b2b2b08082b,
-    0x082b2b2b2b082b08, 0x082b2b2b2b082b2b, 0x1908080808080819, 0x1908080808081908,
-    0x190808080808192b, 0x1908080808082b19, 0x1908080808190808, 0x190808080819082b,
-    0x1908080808191919, 0x1908080808192b08, 0x19080808082b0819, 0x19080808082b1908,
-    0x1908080819080808, 0x190808081908082b, 0x1908080819081919, 0x1908080819082b08,
-    0x1908080819082b2b, 0x1908080819190819, 0x1908080819191908, 0x19080808192b0808,
-    0x19080808192b1919, 0x190808082b080819, 0x190808082b081908, 0x190808082b190808,
-    0x1908081908080808, 0x190808190808082b, 0x1908081908081919, 0x1908081908082b08,
-    0x1908081908190819, 0x1908081908191908, 0x19080819082b0808, 0x1908081919080819,
-    0x1908081919081908, 0x1908081919190808, 0x190808192b080808, 0x190808192b081919,
-    0x190808192b2b082b, 0x1908082b08080819, 0x1908082b08081908, 0x1908082b08190808,
-    0x1908082b0819082b, 0x1908082b082b2b19, 0x1908082b19080808, 0x1908190808080808,
-    0x190819080808082b, 0x1908190808081919, 0x1908190808082b08, 0x1908190808190819,
-    0x1908190808191908, 0x1908190808192b19, 0x19081908082b0808, 0x1908190819080819,
-    0x1908190819081908, 0x1908190819190808, 0x190819082b080808, 0x190819082b191908,
-    0x1908191908080819, 0x1908191908081908, 0x1908191908190808, 0x19081919082b1908,
-    0x1908191919080808, 0x190819192b192b2b, 0x1908192b08080808, 0x1908192b08082b2b,
-    0x1908192b19081908, 0x1908192b19190808, 0x19082b0808080819, 0x19082b0808081908,
-    0x19082b0808190808, 0x19082b0819080808, 0x19082b0819081919, 0x19082b0819191908,
-    0x19082b08192b082b, 0x19082b1908080808, 0x19082b1908190819, 0x19082b1919081908,
-    0x19082b1919190808, 0x19082b19192b2b19, 0x19082b2b08081908, 0x1919080808080808,
-    0x191908080808082b, 0x1919080808081919, 0x1919080808082b08, 0x1919080808190819,
-    0x1919080808191908, 0x19190808082b0808, 0x19190808082b2b08, 0x1919080819080819,
-    0x1919080819081908, 0x1919080819190808, 0x191908082b080808, 0x1919081908080819,
-    0x1919081908081908, 0x1919081908190808, 0x1919081908191919, 0x1919081919080808,
-    0x191908191908082b, 0x1919082b08080808, 0x1919082b19081908, 0x1919082b2b2b2b2b,
-    0x1919190808080819, 0x1919190808081908, 0x1919190808190808, 0x19191908082b0819,
-    0x1919190819080808, 0x19191908192b0808, 0x191919082b080819, 0x191919082b2b0819,
-    0x1919191908080808, 0x1919191908082b08, 0x191919192b080808, 0x191919192b082b08,
-    0x1919192b082b0819, 0x1919192b192b2b08, 0x1919192b2b2b0819, 0x19192b0808080808,
-    0x19192b0808191908, 0x19192b0819080819, 0x19192b0819190808, 0x19192b082b192b19,
-    0x19192b1908192b2b, 0x19192b1919080808, 0x19192b191908082b, 0x19192b2b2b081919,
-    0x192b080808080819, 0x192b080808081908, 0x192b080808190808, 0x192b080819080808,
-    0x192b080819191908, 0x192b0808192b082b, 0x192b08082b08192b, 0x192b08082b2b2b19,
-    0x192b081908080808, 0x192b082b082b1908, 0x192b082b19082b2b, 0x192b082b2b19082b,
-    0x192b190808080808, 0x192b19080819192b, 0x192b191908190808, 0x192b191919080808,
-    0x192b191919081919, 0x192b19192b2b1908, 0x192b2b0808080819, 0x192b2b08192b2b2b,
-    0x192b2b19082b1919, 0x192b2b2b0808192b, 0x192b2b2b19191908, 0x192b2b2b192b082b,
-    0x2b08080808080808, 0x2b0808080808082b, 0x2b08080808081919, 0x2b08080808082b08,
-    0x2b08080808190819, 0x2b08080808191908, 0x2b080808082b0808, 0x2b080808082b2b2b,
-    0x2b08080819080819, 0x2b08080819081908, 0x2b08080819190808, 0x2b0808082b080808,
-    0x2b0808082b08082b, 0x2b0808082b2b2b08, 0x2b0808082b2b2b2b, 0x2b08081908080819,
-    0x2b08081908081908, 0x2b0808190808192b, 0x2b08081908190808, 0x2b08081919080808,
-    0x2b08081919190819, 0x2b08081919192b19, 0x2b08082b08080808, 0x2b08082b082b0808,
-    0x2b08082b2b080808, 0x2b08082b2b08082b, 0x2b08082b2b2b0808, 0x2b08082b2b2b2b08,
-    0x2b08190808080819, 0x2b08190808081908, 0x2b08190808190808, 0x2b0819080819082b,
-    0x2b08190808191919, 0x2b08190819080808, 0x2b081908192b0808, 0x2b0819082b082b19,
-    0x2b08191908080808, 0x2b08191919081908, 0x2b0819192b2b1919, 0x2b08192b08192b08,
-    0x2b08192b192b2b2b, 0x2b082b0808080808, 0x2b082b0808082b08, 0x2b082b08082b1919,
-    0x2b082b0819192b2b, 0x2b082b082b080808, 0x2b082b082b08082b, 0x2b082b082b2b2b08,
-    0x2b082b190808192b, 0x2b082b2b082b082b, 0x2b082b2b2b080808, 0x2b082b2b2b082b08,
-    0x2b082b2b2b19192b, 0x2b082b2b2b2b2b08, 0x2b19080808080819, 0x2b19080808081908,
-    0x2b19080808190808, 0x2b19080819080808, 0x2b1908081919192b, 0x2b1908082b081908,
-    0x2b19081908080808, 0x2b190819082b082b, 0x2b190819192b1908, 0x2b19082b1919192b,
-    0x2b19082b2b082b19, 0x2b19190808080808, 0x2b19190808081919, 0x2b19190819081908,
-    0x2b19190819190808, 0x2b19190819192b08, 0x2b191919082b2b19, 0x2b1919192b190808,
-    0x2b1919192b19082b, 0x2b19192b19080819, 0x2b192b0819190819, 0x2b192b082b2b192b,
-    0x2b192b1919082b19, 0x2b192b2b08191919, 0x2b192b2b192b0808, 0x2b2b080808080808,
-    0x2b2b08080808082b, 0x2b2b080808082b08, 0x2b2b080808082b2b, 0x2b2b0808082b0808,
-    0x2b2b0808082b2b2b, 0x2b2b08082b2b0808, 0x2b2b081919190819, 0x2b2b081919192b19,
-    0x2b2b08192b2b192b, 0x2b2b082b08080808, 0x2b2b082b0808082b, 0x2b2b082b08082b08,
-    0x2b2b082b082b2b2b, 0x2b2b082b2b080808, 0x2b2b082b2b2b0808, 0x2b2b190819080808,
-    0x2b2b19082b191919, 0x2b2b192b192b1919, 0x2b2b192b2b192b08, 0x2b2b2b0808082b2b,
-    0x2b2b2b08082b0808, 0x2b2b2b08082b082b, 0x2b2b2b08082b2b08, 0x2b2b2b082b2b0808,
-    0x2b2b2b082b2b2b08, 0x2b2b2b1908081908, 0x2b2b2b192b081908, 0x2b2b2b192b08192b,
-    0x2b2b2b2b082b2b08, 0x2b2b2b2b082b2b2b, 0x2b2b2b2b2b190819, 0x2b2b2b2b2b2b2b2b,
-GGML_TABLE_END()
-
-GGML_TABLE_BEGIN(uint64_t, iq2s_grid, 1024)
-    0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08,
-    0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x080808080819192b,
-    0x0808080808192b19, 0x08080808082b0808, 0x08080808082b082b, 0x08080808082b1919,
-    0x08080808082b2b08, 0x0808080819080819, 0x0808080819081908, 0x080808081908192b,
-    0x0808080819082b19, 0x0808080819190808, 0x080808081919082b, 0x0808080819191919,
-    0x0808080819192b08, 0x08080808192b0819, 0x08080808192b1908, 0x08080808192b192b,
-    0x08080808192b2b19, 0x080808082b080808, 0x080808082b08082b, 0x080808082b081919,
-    0x080808082b082b08, 0x080808082b190819, 0x080808082b191908, 0x080808082b2b0808,
-    0x080808082b2b1919, 0x080808082b2b2b2b, 0x0808081908080819, 0x0808081908081908,
-    0x080808190808192b, 0x0808081908082b19, 0x0808081908190808, 0x080808190819082b,
-    0x0808081908191919, 0x0808081908192b08, 0x08080819082b0819, 0x08080819082b1908,
-    0x0808081919080808, 0x080808191908082b, 0x0808081919081919, 0x0808081919082b08,
-    0x0808081919190819, 0x0808081919191908, 0x080808191919192b, 0x0808081919192b19,
-    0x08080819192b0808, 0x08080819192b1919, 0x08080819192b2b08, 0x080808192b080819,
-    0x080808192b081908, 0x080808192b190808, 0x080808192b19082b, 0x080808192b191919,
-    0x080808192b2b0819, 0x080808192b2b1908, 0x0808082b08080808, 0x0808082b0808082b,
-    0x0808082b08081919, 0x0808082b08082b08, 0x0808082b08190819, 0x0808082b08191908,
-    0x0808082b082b0808, 0x0808082b082b2b2b, 0x0808082b19080819, 0x0808082b19081908,
-    0x0808082b1908192b, 0x0808082b19082b19, 0x0808082b19190808, 0x0808082b19191919,
-    0x0808082b2b080808, 0x0808082b2b081919, 0x0808082b2b082b2b, 0x0808082b2b191908,
-    0x0808082b2b2b082b, 0x0808190808080819, 0x0808190808081908, 0x080819080808192b,
-    0x0808190808082b19, 0x0808190808190808, 0x080819080819082b, 0x0808190808191919,
-    0x0808190808192b08, 0x08081908082b0819, 0x08081908082b1908, 0x08081908082b192b,
-    0x08081908082b2b19, 0x0808190819080808, 0x080819081908082b, 0x0808190819081919,
-    0x0808190819082b08, 0x0808190819082b2b, 0x0808190819190819, 0x0808190819191908,
-    0x080819081919192b, 0x0808190819192b19, 0x08081908192b0808, 0x08081908192b082b,
-    0x08081908192b1919, 0x080819082b080819, 0x080819082b081908, 0x080819082b08192b,
-    0x080819082b082b19, 0x080819082b190808, 0x080819082b191919, 0x080819082b192b08,
-    0x080819082b2b0819, 0x080819082b2b1908, 0x0808191908080808, 0x080819190808082b,
-    0x0808191908081919, 0x0808191908082b08, 0x0808191908082b2b, 0x0808191908190819,
-    0x0808191908191908, 0x080819190819192b, 0x0808191908192b19, 0x08081919082b0808,
-    0x08081919082b1919, 0x08081919082b2b08, 0x0808191919080819, 0x0808191919081908,
-    0x080819191908192b, 0x0808191919082b19, 0x0808191919190808, 0x080819191919082b,
-    0x0808191919191919, 0x0808191919192b08, 0x08081919192b0819, 0x08081919192b1908,
-    0x080819192b080808, 0x080819192b08082b, 0x080819192b081919, 0x080819192b082b08,
-    0x080819192b190819, 0x080819192b191908, 0x080819192b2b0808, 0x0808192b08080819,
-    0x0808192b08081908, 0x0808192b0808192b, 0x0808192b08082b19, 0x0808192b08190808,
-    0x0808192b08191919, 0x0808192b19080808, 0x0808192b19081919, 0x0808192b19082b08,
-    0x0808192b19190819, 0x0808192b19191908, 0x0808192b192b0808, 0x0808192b2b080819,
-    0x0808192b2b081908, 0x0808192b2b190808, 0x08082b0808080808, 0x08082b080808082b,
-    0x08082b0808081919, 0x08082b0808082b08, 0x08082b0808190819, 0x08082b0808191908,
-    0x08082b080819192b, 0x08082b0808192b19, 0x08082b08082b0808, 0x08082b08082b1919,
-    0x08082b08082b2b2b, 0x08082b0819080819, 0x08082b0819081908, 0x08082b081908192b,
-    0x08082b0819082b19, 0x08082b0819190808, 0x08082b081919082b, 0x08082b0819191919,
-    0x08082b0819192b08, 0x08082b08192b0819, 0x08082b08192b1908, 0x08082b082b080808,
-    0x08082b082b081919, 0x08082b082b191908, 0x08082b082b2b2b2b, 0x08082b1908080819,
-    0x08082b1908081908, 0x08082b1908190808, 0x08082b190819082b, 0x08082b1908191919,
-    0x08082b1908192b08, 0x08082b19082b0819, 0x08082b1919080808, 0x08082b1919081919,
-    0x08082b1919082b08, 0x08082b1919190819, 0x08082b1919191908, 0x08082b19192b0808,
-    0x08082b192b080819, 0x08082b192b190808, 0x08082b2b08080808, 0x08082b2b08190819,
-    0x08082b2b08191908, 0x08082b2b082b082b, 0x08082b2b082b2b08, 0x08082b2b082b2b2b,
-    0x08082b2b19190808, 0x08082b2b2b192b19, 0x0819080808080819, 0x0819080808081908,
-    0x081908080808192b, 0x0819080808082b19, 0x0819080808190808, 0x081908080819082b,
-    0x0819080808191919, 0x0819080808192b08, 0x08190808082b0819, 0x08190808082b1908,
-    0x08190808082b192b, 0x0819080819080808, 0x081908081908082b, 0x0819080819081919,
-    0x0819080819082b08, 0x0819080819190819, 0x0819080819191908, 0x081908081919192b,
-    0x0819080819192b19, 0x08190808192b0808, 0x08190808192b082b, 0x08190808192b1919,
-    0x08190808192b2b08, 0x081908082b080819, 0x081908082b081908, 0x081908082b08192b,
-    0x081908082b190808, 0x081908082b191919, 0x081908082b192b08, 0x081908082b2b0819,
-    0x081908082b2b1908, 0x0819081908080808, 0x081908190808082b, 0x0819081908081919,
-    0x0819081908082b08, 0x0819081908082b2b, 0x0819081908190819, 0x0819081908191908,
-    0x081908190819192b, 0x0819081908192b19, 0x08190819082b0808, 0x08190819082b082b,
-    0x08190819082b1919, 0x08190819082b2b08, 0x0819081919080819, 0x0819081919081908,
-    0x081908191908192b, 0x0819081919082b19, 0x0819081919190808, 0x081908191919082b,
-    0x0819081919191919, 0x0819081919192b08, 0x08190819192b0819, 0x08190819192b1908,
-    0x081908192b080808, 0x081908192b08082b, 0x081908192b081919, 0x081908192b082b08,
-    0x081908192b190819, 0x081908192b191908, 0x0819082b08080819, 0x0819082b08081908,
-    0x0819082b08082b19, 0x0819082b08190808, 0x0819082b08191919, 0x0819082b082b0819,
-    0x0819082b082b1908, 0x0819082b19080808, 0x0819082b19081919, 0x0819082b19190819,
-    0x0819082b19191908, 0x0819082b2b080819, 0x0819082b2b081908, 0x0819082b2b190808,
-    0x0819190808080808, 0x081919080808082b, 0x0819190808081919, 0x0819190808082b08,
-    0x0819190808190819, 0x0819190808191908, 0x081919080819192b, 0x0819190808192b19,
-    0x08191908082b0808, 0x08191908082b1919, 0x08191908082b2b08, 0x0819190819080819,
-    0x0819190819081908, 0x081919081908192b, 0x0819190819082b19, 0x0819190819190808,
-    0x081919081919082b, 0x0819190819191919, 0x0819190819192b08, 0x08191908192b0819,
-    0x08191908192b1908, 0x081919082b080808, 0x081919082b08082b, 0x081919082b081919,
-    0x081919082b082b08, 0x081919082b190819, 0x081919082b191908, 0x081919082b2b0808,
-    0x0819191908080819, 0x0819191908081908, 0x081919190808192b, 0x0819191908082b19,
-    0x0819191908190808, 0x081919190819082b, 0x0819191908191919, 0x0819191908192b08,
-    0x08191919082b0819, 0x08191919082b1908, 0x0819191919080808, 0x081919191908082b,
-    0x0819191919081919, 0x0819191919082b08, 0x0819191919190819, 0x0819191919191908,
-    0x08191919192b0808, 0x081919192b080819, 0x081919192b081908, 0x081919192b190808,
-    0x0819192b08080808, 0x0819192b08081919, 0x0819192b08082b08, 0x0819192b08190819,
-    0x0819192b08191908, 0x0819192b082b0808, 0x0819192b19080819, 0x0819192b19081908,
-    0x0819192b19190808, 0x0819192b2b080808, 0x0819192b2b2b2b2b, 0x08192b0808080819,
-    0x08192b0808081908, 0x08192b080808192b, 0x08192b0808082b19, 0x08192b0808190808,
-    0x08192b0808191919, 0x08192b0808192b08, 0x08192b08082b0819, 0x08192b0819080808,
-    0x08192b081908082b, 0x08192b0819081919, 0x08192b0819082b08, 0x08192b0819190819,
-    0x08192b0819191908, 0x08192b08192b0808, 0x08192b082b080819, 0x08192b082b081908,
-    0x08192b1908080808, 0x08192b190808082b, 0x08192b1908081919, 0x08192b1908082b08,
-    0x08192b1908190819, 0x08192b1908191908, 0x08192b19082b0808, 0x08192b1919080819,
-    0x08192b1919081908, 0x08192b1919190808, 0x08192b19192b2b19, 0x08192b192b2b082b,
-    0x08192b2b08081908, 0x08192b2b08190808, 0x08192b2b19080808, 0x08192b2b1919192b,
-    0x082b080808080808, 0x082b08080808082b, 0x082b080808081919, 0x082b080808082b08,
-    0x082b080808190819, 0x082b080808191908, 0x082b08080819192b, 0x082b080808192b19,
-    0x082b0808082b0808, 0x082b0808082b1919, 0x082b0808082b2b2b, 0x082b080819080819,
-    0x082b080819081908, 0x082b080819190808, 0x082b08081919082b, 0x082b080819191919,
-    0x082b0808192b1908, 0x082b08082b080808, 0x082b08082b082b2b, 0x082b08082b191908,
-    0x082b08082b2b2b2b, 0x082b081908080819, 0x082b081908081908, 0x082b081908190808,
-    0x082b08190819082b, 0x082b081908191919, 0x082b0819082b0819, 0x082b081919080808,
-    0x082b08191908082b, 0x082b081919081919, 0x082b081919190819, 0x082b081919191908,
-    0x082b0819192b0808, 0x082b08192b080819, 0x082b08192b081908, 0x082b08192b190808,
-    0x082b082b08080808, 0x082b082b08082b2b, 0x082b082b082b082b, 0x082b082b082b2b08,
-    0x082b082b082b2b2b, 0x082b082b19081908, 0x082b082b19190808, 0x082b082b2b082b08,
-    0x082b082b2b082b2b, 0x082b082b2b2b2b08, 0x082b190808080819, 0x082b190808081908,
-    0x082b19080808192b, 0x082b190808082b19, 0x082b190808190808, 0x082b190808191919,
-    0x082b190808192b08, 0x082b1908082b0819, 0x082b1908082b1908, 0x082b190819080808,
-    0x082b19081908082b, 0x082b190819081919, 0x082b190819082b08, 0x082b190819190819,
-    0x082b190819191908, 0x082b1908192b0808, 0x082b19082b080819, 0x082b19082b081908,
-    0x082b19082b190808, 0x082b191908080808, 0x082b191908081919, 0x082b191908082b08,
-    0x082b191908190819, 0x082b191908191908, 0x082b1919082b0808, 0x082b191919080819,
-    0x082b191919081908, 0x082b191919190808, 0x082b1919192b192b, 0x082b19192b080808,
-    0x082b192b08080819, 0x082b192b08081908, 0x082b192b08190808, 0x082b192b19080808,
-    0x082b192b19192b19, 0x082b2b0808080808, 0x082b2b0808081919, 0x082b2b0808190819,
-    0x082b2b0808191908, 0x082b2b0819080819, 0x082b2b0819081908, 0x082b2b0819190808,
-    0x082b2b082b082b2b, 0x082b2b082b2b2b2b, 0x082b2b1908080819, 0x082b2b1908081908,
-    0x082b2b1908190808, 0x082b2b192b191919, 0x082b2b2b08082b2b, 0x082b2b2b082b082b,
-    0x082b2b2b192b1908, 0x082b2b2b2b082b08, 0x082b2b2b2b082b2b, 0x1908080808080819,
-    0x1908080808081908, 0x190808080808192b, 0x1908080808082b19, 0x1908080808190808,
-    0x190808080819082b, 0x1908080808191919, 0x1908080808192b08, 0x1908080808192b2b,
-    0x19080808082b0819, 0x19080808082b1908, 0x19080808082b192b, 0x1908080819080808,
-    0x190808081908082b, 0x1908080819081919, 0x1908080819082b08, 0x1908080819082b2b,
-    0x1908080819190819, 0x1908080819191908, 0x190808081919192b, 0x1908080819192b19,
-    0x19080808192b0808, 0x19080808192b082b, 0x19080808192b1919, 0x190808082b080819,
-    0x190808082b081908, 0x190808082b190808, 0x190808082b191919, 0x190808082b192b08,
-    0x190808082b2b0819, 0x190808082b2b1908, 0x1908081908080808, 0x190808190808082b,
-    0x1908081908081919, 0x1908081908082b08, 0x1908081908190819, 0x1908081908191908,
-    0x190808190819192b, 0x1908081908192b19, 0x19080819082b0808, 0x19080819082b082b,
-    0x19080819082b1919, 0x1908081919080819, 0x1908081919081908, 0x190808191908192b,
-    0x1908081919082b19, 0x1908081919190808, 0x190808191919082b, 0x1908081919191919,
-    0x1908081919192b08, 0x19080819192b0819, 0x19080819192b1908, 0x190808192b080808,
-    0x190808192b08082b, 0x190808192b081919, 0x190808192b082b08, 0x190808192b190819,
-    0x190808192b191908, 0x190808192b2b0808, 0x1908082b08080819, 0x1908082b08081908,
-    0x1908082b08190808, 0x1908082b0819082b, 0x1908082b08191919, 0x1908082b08192b08,
-    0x1908082b082b1908, 0x1908082b19080808, 0x1908082b19081919, 0x1908082b19082b08,
-    0x1908082b19190819, 0x1908082b19191908, 0x1908082b192b0808, 0x1908082b2b080819,
-    0x1908082b2b081908, 0x1908190808080808, 0x190819080808082b, 0x1908190808081919,
-    0x1908190808082b08, 0x1908190808082b2b, 0x1908190808190819, 0x1908190808191908,
-    0x190819080819192b, 0x1908190808192b19, 0x19081908082b0808, 0x19081908082b082b,
-    0x19081908082b1919, 0x19081908082b2b08, 0x1908190819080819, 0x1908190819081908,
-    0x190819081908192b, 0x1908190819082b19, 0x1908190819190808, 0x190819081919082b,
-    0x1908190819191919, 0x1908190819192b08, 0x19081908192b0819, 0x19081908192b1908,
-    0x190819082b080808, 0x190819082b08082b, 0x190819082b081919, 0x190819082b082b08,
-    0x190819082b190819, 0x190819082b191908, 0x190819082b2b0808, 0x1908191908080819,
-    0x1908191908081908, 0x190819190808192b, 0x1908191908082b19, 0x1908191908190808,
-    0x190819190819082b, 0x1908191908191919, 0x1908191908192b08, 0x19081919082b0819,
-    0x19081919082b1908, 0x1908191919080808, 0x190819191908082b, 0x1908191919081919,
-    0x1908191919082b08, 0x1908191919190819, 0x1908191919191908, 0x19081919192b0808,
-    0x19081919192b2b2b, 0x190819192b080819, 0x190819192b081908, 0x190819192b190808,
-    0x1908192b08080808, 0x1908192b0808082b, 0x1908192b08081919, 0x1908192b08082b08,
-    0x1908192b08190819, 0x1908192b08191908, 0x1908192b082b0808, 0x1908192b19080819,
-    0x1908192b19081908, 0x1908192b19190808, 0x1908192b2b080808, 0x1908192b2b2b1919,
-    0x19082b0808080819, 0x19082b0808081908, 0x19082b0808082b19, 0x19082b0808190808,
-    0x19082b080819082b, 0x19082b0808191919, 0x19082b0808192b08, 0x19082b08082b0819,
-    0x19082b08082b1908, 0x19082b0819080808, 0x19082b081908082b, 0x19082b0819081919,
-    0x19082b0819082b08, 0x19082b0819190819, 0x19082b0819191908, 0x19082b08192b0808,
-    0x19082b082b081908, 0x19082b082b190808, 0x19082b1908080808, 0x19082b190808082b,
-    0x19082b1908081919, 0x19082b1908082b08, 0x19082b1908190819, 0x19082b1908191908,
-    0x19082b19082b0808, 0x19082b1919080819, 0x19082b1919081908, 0x19082b1919190808,
-    0x19082b192b080808, 0x19082b192b19192b, 0x19082b2b08080819, 0x19082b2b08081908,
-    0x19082b2b08190808, 0x19082b2b19080808, 0x1919080808080808, 0x191908080808082b,
-    0x1919080808081919, 0x1919080808082b08, 0x1919080808190819, 0x1919080808191908,
-    0x191908080819192b, 0x1919080808192b19, 0x19190808082b0808, 0x19190808082b082b,
-    0x19190808082b1919, 0x19190808082b2b08, 0x1919080819080819, 0x1919080819081908,
-    0x191908081908192b, 0x1919080819082b19, 0x1919080819190808, 0x191908081919082b,
-    0x1919080819191919, 0x1919080819192b08, 0x19190808192b0819, 0x19190808192b1908,
-    0x191908082b080808, 0x191908082b08082b, 0x191908082b081919, 0x191908082b082b08,
-    0x191908082b190819, 0x191908082b191908, 0x1919081908080819, 0x1919081908081908,
-    0x191908190808192b, 0x1919081908082b19, 0x1919081908190808, 0x191908190819082b,
-    0x1919081908191919, 0x1919081908192b08, 0x19190819082b0819, 0x19190819082b1908,
-    0x1919081919080808, 0x191908191908082b, 0x1919081919081919, 0x1919081919082b08,
-    0x1919081919190819, 0x1919081919191908, 0x19190819192b0808, 0x191908192b080819,
-    0x191908192b081908, 0x191908192b190808, 0x1919082b08080808, 0x1919082b08081919,
-    0x1919082b08082b08, 0x1919082b08190819, 0x1919082b08191908, 0x1919082b082b0808,
-    0x1919082b19080819, 0x1919082b19081908, 0x1919082b19190808, 0x1919082b192b2b19,
-    0x1919082b2b080808, 0x1919190808080819, 0x1919190808081908, 0x191919080808192b,
-    0x1919190808082b19, 0x1919190808190808, 0x191919080819082b, 0x1919190808191919,
-    0x1919190808192b08, 0x19191908082b0819, 0x19191908082b1908, 0x1919190819080808,
-    0x191919081908082b, 0x1919190819081919, 0x1919190819082b08, 0x1919190819190819,
-    0x1919190819191908, 0x19191908192b0808, 0x191919082b080819, 0x191919082b081908,
-    0x191919082b190808, 0x1919191908080808, 0x191919190808082b, 0x1919191908081919,
-    0x1919191908082b08, 0x1919191908190819, 0x1919191908191908, 0x19191919082b0808,
-    0x1919191919080819, 0x1919191919081908, 0x1919191919190808, 0x191919192b080808,
-    0x1919192b08080819, 0x1919192b08081908, 0x1919192b08190808, 0x1919192b082b192b,
-    0x1919192b19080808, 0x19192b0808080808, 0x19192b080808082b, 0x19192b0808081919,
-    0x19192b0808082b08, 0x19192b0808190819, 0x19192b0808191908, 0x19192b08082b0808,
-    0x19192b0819080819, 0x19192b0819081908, 0x19192b0819190808, 0x19192b0819192b2b,
-    0x19192b082b080808, 0x19192b1908080819, 0x19192b1908081908, 0x19192b1908190808,
-    0x19192b1919080808, 0x19192b2b08080808, 0x19192b2b08192b19, 0x19192b2b2b081919,
-    0x19192b2b2b2b2b08, 0x192b080808080819, 0x192b080808081908, 0x192b08080808192b,
-    0x192b080808190808, 0x192b08080819082b, 0x192b080808191919, 0x192b080808192b08,
-    0x192b0808082b0819, 0x192b0808082b1908, 0x192b080819080808, 0x192b080819081919,
-    0x192b080819082b08, 0x192b080819190819, 0x192b080819191908, 0x192b0808192b0808,
-    0x192b08082b081908, 0x192b08082b190808, 0x192b081908080808, 0x192b08190808082b,
-    0x192b081908081919, 0x192b081908082b08, 0x192b081908190819, 0x192b081908191908,
-    0x192b0819082b0808, 0x192b081919080819, 0x192b081919081908, 0x192b081919190808,
-    0x192b08192b080808, 0x192b08192b192b19, 0x192b082b08081908, 0x192b082b08190808,
-    0x192b082b19080808, 0x192b082b1919192b, 0x192b082b2b2b0819, 0x192b190808080808,
-    0x192b190808081919, 0x192b190808082b08, 0x192b190808190819, 0x192b190808191908,
-    0x192b1908082b0808, 0x192b190819080819, 0x192b190819081908, 0x192b190819190808,
-    0x192b19082b080808, 0x192b191908080819, 0x192b191908081908, 0x192b191908190808,
-    0x192b191919080808, 0x192b191919082b2b, 0x192b1919192b2b08, 0x192b19192b19082b,
-    0x192b192b08080808, 0x192b192b2b191908, 0x192b2b0808080819, 0x192b2b0808081908,
-    0x192b2b0808190808, 0x192b2b08192b1919, 0x192b2b082b192b08, 0x192b2b1908080808,
-    0x192b2b19082b2b2b, 0x192b2b2b1908082b, 0x192b2b2b2b2b0819, 0x2b08080808080808,
-    0x2b0808080808082b, 0x2b08080808081919, 0x2b08080808082b08, 0x2b08080808190819,
-    0x2b08080808191908, 0x2b08080808192b19, 0x2b080808082b0808, 0x2b080808082b1919,
-    0x2b08080819080819, 0x2b08080819081908, 0x2b08080819190808, 0x2b0808081919082b,
-    0x2b08080819191919, 0x2b08080819192b08, 0x2b080808192b0819, 0x2b0808082b080808,
-    0x2b0808082b081919, 0x2b0808082b190819, 0x2b0808082b191908, 0x2b08081908080819,
-    0x2b08081908081908, 0x2b08081908082b19, 0x2b08081908190808, 0x2b0808190819082b,
-    0x2b08081908191919, 0x2b08081908192b08, 0x2b080819082b0819, 0x2b080819082b1908,
-    0x2b08081919080808, 0x2b0808191908082b, 0x2b08081919081919, 0x2b08081919082b08,
-    0x2b08081919190819, 0x2b08081919191908, 0x2b0808192b080819, 0x2b0808192b081908,
-    0x2b0808192b190808, 0x2b0808192b2b2b19, 0x2b08082b08080808, 0x2b08082b08081919,
-    0x2b08082b08082b2b, 0x2b08082b08190819, 0x2b08082b08191908, 0x2b08082b19080819,
-    0x2b08082b19081908, 0x2b08082b19190808, 0x2b08190808080819, 0x2b08190808081908,
-    0x2b0819080808192b, 0x2b08190808082b19, 0x2b08190808190808, 0x2b0819080819082b,
-    0x2b08190808191919, 0x2b08190808192b08, 0x2b081908082b0819, 0x2b08190819080808,
-    0x2b0819081908082b, 0x2b08190819081919, 0x2b08190819082b08, 0x2b08190819190819,
-    0x2b08190819191908, 0x2b081908192b0808, 0x2b0819082b080819, 0x2b0819082b081908,
-    0x2b0819082b190808, 0x2b08191908080808, 0x2b0819190808082b, 0x2b08191908081919,
-    0x2b08191908082b08, 0x2b08191908190819, 0x2b08191908191908, 0x2b081919082b0808,
-    0x2b08191919080819, 0x2b08191919081908, 0x2b08191919190808, 0x2b0819192b080808,
-    0x2b0819192b082b2b, 0x2b08192b08080819, 0x2b08192b08081908, 0x2b08192b08190808,
-    0x2b08192b082b2b19, 0x2b08192b19080808, 0x2b082b0808080808, 0x2b082b0808081919,
-    0x2b082b0808190819, 0x2b082b0808191908, 0x2b082b0819080819, 0x2b082b0819081908,
-    0x2b082b0819190808, 0x2b082b082b2b082b, 0x2b082b1908080819, 0x2b082b1908081908,
-    0x2b082b1919080808, 0x2b082b19192b1919, 0x2b082b2b082b082b, 0x2b082b2b19192b08,
-    0x2b082b2b19192b2b, 0x2b082b2b2b08082b, 0x2b082b2b2b2b082b, 0x2b19080808080819,
-    0x2b19080808081908, 0x2b19080808082b19, 0x2b19080808190808, 0x2b1908080819082b,
-    0x2b19080808191919, 0x2b19080808192b08, 0x2b190808082b1908, 0x2b19080819080808,
-    0x2b1908081908082b, 0x2b19080819081919, 0x2b19080819082b08, 0x2b19080819190819,
-    0x2b19080819191908, 0x2b190808192b0808, 0x2b1908082b080819, 0x2b1908082b081908,
-    0x2b1908082b190808, 0x2b19081908080808, 0x2b19081908081919, 0x2b19081908190819,
-    0x2b19081908191908, 0x2b19081919080819, 0x2b19081919081908, 0x2b19081919190808,
-    0x2b19081919192b2b, 0x2b19082b08080819, 0x2b19082b08081908, 0x2b19082b08190808,
-    0x2b19082b19080808, 0x2b19082b2b2b192b, 0x2b19190808080808, 0x2b1919080808082b,
-    0x2b19190808081919, 0x2b19190808082b08, 0x2b19190808190819, 0x2b19190808191908,
-    0x2b191908082b0808, 0x2b19190819080819, 0x2b19190819081908, 0x2b19190819190808,
-    0x2b1919082b080808, 0x2b1919082b19192b, 0x2b19191908080819, 0x2b19191908081908,
-    0x2b19191908190808, 0x2b19191919080808, 0x2b1919192b192b08, 0x2b1919192b2b0819,
-    0x2b19192b08080808, 0x2b19192b1908192b, 0x2b19192b192b1908, 0x2b192b0808080819,
-    0x2b192b0808081908, 0x2b192b0808190808, 0x2b192b08082b192b, 0x2b192b0819080808,
-    0x2b192b082b2b2b19, 0x2b192b1908080808, 0x2b192b1919082b19, 0x2b192b191919082b,
-    0x2b192b2b2b190808, 0x2b2b080808080808, 0x2b2b080808081919, 0x2b2b080808082b2b,
-    0x2b2b080808191908, 0x2b2b0808082b082b, 0x2b2b0808082b2b2b, 0x2b2b080819080819,
-    0x2b2b080819081908, 0x2b2b080819190808, 0x2b2b08082b2b082b, 0x2b2b08082b2b2b2b,
-    0x2b2b081919080808, 0x2b2b0819192b1919, 0x2b2b082b0808082b, 0x2b2b082b08082b2b,
-    0x2b2b082b082b082b, 0x2b2b082b082b2b08, 0x2b2b082b082b2b2b, 0x2b2b082b2b08082b,
-    0x2b2b082b2b082b08, 0x2b2b082b2b082b2b, 0x2b2b082b2b2b2b08, 0x2b2b190808080819,
-    0x2b2b190808081908, 0x2b2b190808190808, 0x2b2b190819080808, 0x2b2b19082b082b19,
-    0x2b2b19082b2b1908, 0x2b2b191908080808, 0x2b2b191908192b19, 0x2b2b192b19190819,
-    0x2b2b2b0808082b2b, 0x2b2b2b08082b2b08, 0x2b2b2b082b2b082b, 0x2b2b2b1919191908,
-    0x2b2b2b192b08192b, 0x2b2b2b2b08082b08, 0x2b2b2b2b08082b2b, 0x2b2b2b2b082b0808,
-    0x2b2b2b2b082b082b, 0x2b2b2b2b082b2b08, 0x2b2b2b2b2b082b08, 0x2b2b2b2b2b2b2b2b,
-GGML_TABLE_END()
-
-GGML_TABLE_BEGIN(uint32_t, iq3xxs_grid, 256)
-    0x04040404, 0x04040414, 0x04040424, 0x04040c0c, 0x04040c1c, 0x04040c3e, 0x04041404, 0x04041414,
-    0x04041c0c, 0x04042414, 0x04043e1c, 0x04043e2c, 0x040c040c, 0x040c041c, 0x040c0c04, 0x040c0c14,
-    0x040c140c, 0x040c142c, 0x040c1c04, 0x040c1c14, 0x040c240c, 0x040c2c24, 0x040c3e04, 0x04140404,
-    0x04140414, 0x04140424, 0x04140c0c, 0x04141404, 0x04141414, 0x04141c0c, 0x04141c1c, 0x04141c3e,
-    0x04142c0c, 0x04142c3e, 0x04143e2c, 0x041c040c, 0x041c043e, 0x041c0c04, 0x041c0c14, 0x041c142c,
-    0x041c3e04, 0x04240c1c, 0x04241c3e, 0x04242424, 0x04242c3e, 0x04243e1c, 0x04243e2c, 0x042c040c,
-    0x042c043e, 0x042c1c14, 0x042c2c14, 0x04341c2c, 0x04343424, 0x043e0c04, 0x043e0c24, 0x043e0c34,
-    0x043e241c, 0x043e340c, 0x0c04040c, 0x0c04041c, 0x0c040c04, 0x0c040c14, 0x0c04140c, 0x0c04141c,
-    0x0c041c04, 0x0c041c14, 0x0c041c24, 0x0c04243e, 0x0c042c04, 0x0c0c0404, 0x0c0c0414, 0x0c0c0c0c,
-    0x0c0c1404, 0x0c0c1414, 0x0c14040c, 0x0c14041c, 0x0c140c04, 0x0c140c14, 0x0c14140c, 0x0c141c04,
-    0x0c143e14, 0x0c1c0404, 0x0c1c0414, 0x0c1c1404, 0x0c1c1c0c, 0x0c1c2434, 0x0c1c3434, 0x0c24040c,
-    0x0c24042c, 0x0c242c04, 0x0c2c1404, 0x0c2c1424, 0x0c2c2434, 0x0c2c3e0c, 0x0c34042c, 0x0c3e1414,
-    0x0c3e2404, 0x14040404, 0x14040414, 0x14040c0c, 0x14040c1c, 0x14041404, 0x14041414, 0x14041434,
-    0x14041c0c, 0x14042414, 0x140c040c, 0x140c041c, 0x140c042c, 0x140c0c04, 0x140c0c14, 0x140c140c,
-    0x140c1c04, 0x140c341c, 0x140c343e, 0x140c3e04, 0x14140404, 0x14140414, 0x14140c0c, 0x14140c3e,
-    0x14141404, 0x14141414, 0x14141c3e, 0x14142404, 0x14142c2c, 0x141c040c, 0x141c0c04, 0x141c0c24,
-    0x141c3e04, 0x141c3e24, 0x14241c2c, 0x14242c1c, 0x142c041c, 0x142c143e, 0x142c240c, 0x142c3e24,
-    0x143e040c, 0x143e041c, 0x143e0c34, 0x143e242c, 0x1c04040c, 0x1c040c04, 0x1c040c14, 0x1c04140c,
-    0x1c04141c, 0x1c042c04, 0x1c04342c, 0x1c043e14, 0x1c0c0404, 0x1c0c0414, 0x1c0c1404, 0x1c0c1c0c,
-    0x1c0c2424, 0x1c0c2434, 0x1c14040c, 0x1c14041c, 0x1c140c04, 0x1c14142c, 0x1c142c14, 0x1c143e14,
-    0x1c1c0c0c, 0x1c1c1c1c, 0x1c241c04, 0x1c24243e, 0x1c243e14, 0x1c2c0404, 0x1c2c0434, 0x1c2c1414,
-    0x1c2c2c2c, 0x1c340c24, 0x1c341c34, 0x1c34341c, 0x1c3e1c1c, 0x1c3e3404, 0x24040424, 0x24040c3e,
-    0x24041c2c, 0x24041c3e, 0x24042c1c, 0x24042c3e, 0x240c3e24, 0x24141404, 0x24141c3e, 0x24142404,
-    0x24143404, 0x24143434, 0x241c043e, 0x241c242c, 0x24240424, 0x24242c0c, 0x24243424, 0x242c142c,
-    0x242c241c, 0x242c3e04, 0x243e042c, 0x243e0c04, 0x243e0c14, 0x243e1c04, 0x2c040c14, 0x2c04240c,
-    0x2c043e04, 0x2c0c0404, 0x2c0c0434, 0x2c0c1434, 0x2c0c2c2c, 0x2c140c24, 0x2c141c14, 0x2c143e14,
-    0x2c1c0414, 0x2c1c2c1c, 0x2c240c04, 0x2c24141c, 0x2c24143e, 0x2c243e14, 0x2c2c0414, 0x2c2c1c0c,
-    0x2c342c04, 0x2c3e1424, 0x2c3e2414, 0x34041424, 0x34042424, 0x34042434, 0x34043424, 0x340c140c,
-    0x340c340c, 0x34140c3e, 0x34143424, 0x341c1c04, 0x341c1c34, 0x34242424, 0x342c042c, 0x342c2c14,
-    0x34341c1c, 0x343e041c, 0x343e140c, 0x3e04041c, 0x3e04042c, 0x3e04043e, 0x3e040c04, 0x3e041c14,
-    0x3e042c14, 0x3e0c1434, 0x3e0c2404, 0x3e140c14, 0x3e14242c, 0x3e142c14, 0x3e1c0404, 0x3e1c0c2c,
-    0x3e1c1c1c, 0x3e1c3404, 0x3e24140c, 0x3e24240c, 0x3e2c0404, 0x3e2c0414, 0x3e2c1424, 0x3e341c04,
-GGML_TABLE_END()
-
-GGML_TABLE_BEGIN(uint32_t, iq3s_grid, 512)
-    0x01010101, 0x01010103, 0x01010105, 0x0101010b, 0x0101010f, 0x01010301, 0x01010303, 0x01010305,
-    0x01010309, 0x0101030d, 0x01010501, 0x01010503, 0x0101050b, 0x01010707, 0x01010901, 0x01010905,
-    0x0101090b, 0x0101090f, 0x01010b03, 0x01010b07, 0x01010d01, 0x01010d05, 0x01010f03, 0x01010f09,
-    0x01010f0f, 0x01030101, 0x01030103, 0x01030105, 0x01030109, 0x01030301, 0x01030303, 0x0103030b,
-    0x01030501, 0x01030507, 0x0103050f, 0x01030703, 0x0103070b, 0x01030909, 0x01030d03, 0x01030d0b,
-    0x01030f05, 0x01050101, 0x01050103, 0x0105010b, 0x0105010f, 0x01050301, 0x01050307, 0x0105030d,
-    0x01050503, 0x0105050b, 0x01050701, 0x01050709, 0x01050905, 0x0105090b, 0x0105090f, 0x01050b03,
-    0x01050b07, 0x01050f01, 0x01050f07, 0x01070107, 0x01070303, 0x0107030b, 0x01070501, 0x01070505,
-    0x01070703, 0x01070707, 0x0107070d, 0x01070909, 0x01070b01, 0x01070b05, 0x01070d0f, 0x01070f03,
-    0x01070f0b, 0x01090101, 0x01090307, 0x0109030f, 0x01090503, 0x01090509, 0x01090705, 0x01090901,
-    0x01090907, 0x01090b03, 0x01090f01, 0x010b0105, 0x010b0109, 0x010b0501, 0x010b0505, 0x010b050d,
-    0x010b0707, 0x010b0903, 0x010b090b, 0x010b090f, 0x010b0d0d, 0x010b0f07, 0x010d010d, 0x010d0303,
-    0x010d0307, 0x010d0703, 0x010d0b05, 0x010d0f03, 0x010f0101, 0x010f0105, 0x010f0109, 0x010f0501,
-    0x010f0505, 0x010f050d, 0x010f0707, 0x010f0b01, 0x010f0b09, 0x03010101, 0x03010103, 0x03010105,
-    0x03010109, 0x03010301, 0x03010303, 0x03010307, 0x0301030b, 0x0301030f, 0x03010501, 0x03010505,
-    0x03010703, 0x03010709, 0x0301070d, 0x03010b09, 0x03010b0d, 0x03010d03, 0x03010f05, 0x03030101,
-    0x03030103, 0x03030107, 0x0303010d, 0x03030301, 0x03030309, 0x03030503, 0x03030701, 0x03030707,
-    0x03030903, 0x03030b01, 0x03030b05, 0x03030f01, 0x03030f0d, 0x03050101, 0x03050305, 0x0305030b,
-    0x0305030f, 0x03050501, 0x03050509, 0x03050705, 0x03050901, 0x03050907, 0x03050b0b, 0x03050d01,
-    0x03050f05, 0x03070103, 0x03070109, 0x0307010f, 0x03070301, 0x03070307, 0x03070503, 0x0307050f,
-    0x03070701, 0x03070709, 0x03070903, 0x03070d05, 0x03070f01, 0x03090107, 0x0309010b, 0x03090305,
-    0x03090309, 0x03090703, 0x03090707, 0x03090905, 0x0309090d, 0x03090b01, 0x03090b09, 0x030b0103,
-    0x030b0301, 0x030b0307, 0x030b0503, 0x030b0701, 0x030b0705, 0x030b0b03, 0x030d0501, 0x030d0509,
-    0x030d050f, 0x030d0909, 0x030d090d, 0x030f0103, 0x030f0107, 0x030f0301, 0x030f0305, 0x030f0503,
-    0x030f070b, 0x030f0903, 0x030f0d05, 0x030f0f01, 0x05010101, 0x05010103, 0x05010107, 0x0501010b,
-    0x0501010f, 0x05010301, 0x05010305, 0x05010309, 0x0501030d, 0x05010503, 0x05010507, 0x0501050f,
-    0x05010701, 0x05010705, 0x05010903, 0x05010907, 0x0501090b, 0x05010b01, 0x05010b05, 0x05010d0f,
-    0x05010f01, 0x05010f07, 0x05010f0b, 0x05030101, 0x05030105, 0x05030301, 0x05030307, 0x0503030f,
-    0x05030505, 0x0503050b, 0x05030703, 0x05030709, 0x05030905, 0x05030b03, 0x05050103, 0x05050109,
-    0x0505010f, 0x05050503, 0x05050507, 0x05050701, 0x0505070f, 0x05050903, 0x05050b07, 0x05050b0f,
-    0x05050f03, 0x05050f09, 0x05070101, 0x05070105, 0x0507010b, 0x05070303, 0x05070505, 0x05070509,
-    0x05070703, 0x05070707, 0x05070905, 0x05070b01, 0x05070d0d, 0x05090103, 0x0509010f, 0x05090501,
-    0x05090507, 0x05090705, 0x0509070b, 0x05090903, 0x05090f05, 0x05090f0b, 0x050b0109, 0x050b0303,
-    0x050b0505, 0x050b070f, 0x050b0901, 0x050b0b07, 0x050b0f01, 0x050d0101, 0x050d0105, 0x050d010f,
-    0x050d0503, 0x050d0b0b, 0x050d0d03, 0x050f010b, 0x050f0303, 0x050f050d, 0x050f0701, 0x050f0907,
-    0x050f0b01, 0x07010105, 0x07010303, 0x07010307, 0x0701030b, 0x0701030f, 0x07010505, 0x07010703,
-    0x07010707, 0x0701070b, 0x07010905, 0x07010909, 0x0701090f, 0x07010b03, 0x07010d07, 0x07010f03,
-    0x07030103, 0x07030107, 0x0703010b, 0x07030309, 0x07030503, 0x07030507, 0x07030901, 0x07030d01,
-    0x07030f05, 0x07030f0d, 0x07050101, 0x07050305, 0x07050501, 0x07050705, 0x07050709, 0x07050b01,
-    0x07070103, 0x07070301, 0x07070309, 0x07070503, 0x07070507, 0x0707050f, 0x07070701, 0x07070903,
-    0x07070907, 0x0707090f, 0x07070b0b, 0x07070f07, 0x07090107, 0x07090303, 0x0709030d, 0x07090505,
-    0x07090703, 0x07090b05, 0x07090d01, 0x07090d09, 0x070b0103, 0x070b0301, 0x070b0305, 0x070b050b,
-    0x070b0705, 0x070b0909, 0x070b0b0d, 0x070b0f07, 0x070d030d, 0x070d0903, 0x070f0103, 0x070f0107,
-    0x070f0501, 0x070f0505, 0x070f070b, 0x09010101, 0x09010109, 0x09010305, 0x09010501, 0x09010509,
-    0x0901050f, 0x09010705, 0x09010903, 0x09010b01, 0x09010f01, 0x09030105, 0x0903010f, 0x09030303,
-    0x09030307, 0x09030505, 0x09030701, 0x0903070b, 0x09030907, 0x09030b03, 0x09030b0b, 0x09050103,
-    0x09050107, 0x09050301, 0x0905030b, 0x09050503, 0x09050707, 0x09050901, 0x09050b0f, 0x09050d05,
-    0x09050f01, 0x09070109, 0x09070303, 0x09070307, 0x09070501, 0x09070505, 0x09070703, 0x0907070b,
-    0x09090101, 0x09090105, 0x09090509, 0x0909070f, 0x09090901, 0x09090f03, 0x090b010b, 0x090b010f,
-    0x090b0503, 0x090b0d05, 0x090d0307, 0x090d0709, 0x090d0d01, 0x090f0301, 0x090f030b, 0x090f0701,
-    0x090f0907, 0x090f0b03, 0x0b010105, 0x0b010301, 0x0b010309, 0x0b010505, 0x0b010901, 0x0b010909,
-    0x0b01090f, 0x0b010b05, 0x0b010d0d, 0x0b010f09, 0x0b030103, 0x0b030107, 0x0b03010b, 0x0b030305,
-    0x0b030503, 0x0b030705, 0x0b030f05, 0x0b050101, 0x0b050303, 0x0b050507, 0x0b050701, 0x0b05070d,
-    0x0b050b07, 0x0b070105, 0x0b07010f, 0x0b070301, 0x0b07050f, 0x0b070909, 0x0b070b03, 0x0b070d0b,
-    0x0b070f07, 0x0b090103, 0x0b090109, 0x0b090501, 0x0b090705, 0x0b09090d, 0x0b0b0305, 0x0b0b050d,
-    0x0b0b0b03, 0x0b0b0b07, 0x0b0d0905, 0x0b0f0105, 0x0b0f0109, 0x0b0f0505, 0x0d010303, 0x0d010307,
-    0x0d01030b, 0x0d010703, 0x0d010707, 0x0d010d01, 0x0d030101, 0x0d030501, 0x0d03050f, 0x0d030d09,
-    0x0d050305, 0x0d050709, 0x0d050905, 0x0d050b0b, 0x0d050d05, 0x0d050f01, 0x0d070101, 0x0d070309,
-    0x0d070503, 0x0d070901, 0x0d09050b, 0x0d090907, 0x0d090d05, 0x0d0b0101, 0x0d0b0107, 0x0d0b0709,
-    0x0d0b0d01, 0x0d0d010b, 0x0d0d0901, 0x0d0f0303, 0x0d0f0307, 0x0f010101, 0x0f010109, 0x0f01010f,
-    0x0f010501, 0x0f010505, 0x0f01070d, 0x0f010901, 0x0f010b09, 0x0f010d05, 0x0f030105, 0x0f030303,
-    0x0f030509, 0x0f030907, 0x0f03090b, 0x0f050103, 0x0f050109, 0x0f050301, 0x0f05030d, 0x0f050503,
-    0x0f050701, 0x0f050b03, 0x0f070105, 0x0f070705, 0x0f07070b, 0x0f070b07, 0x0f090103, 0x0f09010b,
-    0x0f090307, 0x0f090501, 0x0f090b01, 0x0f0b0505, 0x0f0b0905, 0x0f0d0105, 0x0f0d0703, 0x0f0f0101,
-GGML_TABLE_END()
-
-#define NGRID_IQ1S 2048
-#define IQ1S_DELTA 0.125f
-#define IQ1M_DELTA 0.125f
-#if defined(GGML_COMMON_IMPL_C)
-GGML_TABLE_BEGIN(uint64_t, iq1s_grid, NGRID_IQ1S)
-    0xffffffffffffffff, 0xffffffffffffff01, 0xffffffffffff0000, 0xffffffffffff01ff,
-    0xffffffffffff0101, 0xffffffffff00ff00, 0xffffffffff000000, 0xffffffffff01ffff,
-    0xffffffffff01ff01, 0xffffffffff0101ff, 0xffffffffff010101, 0xffffffff00ff0000,
-    0xffffffff0000ff00, 0xffffffff000000ff, 0xffffffff00000001, 0xffffffff00010000,
-    0xffffffff01ffffff, 0xffffffff01ffff01, 0xffffffff01ff01ff, 0xffffffff01ff0101,
-    0xffffffff01000000, 0xffffffff0101ffff, 0xffffffff0101ff01, 0xffffffff010101ff,
-    0xffffffff01010101, 0xffffff00ffff00ff, 0xffffff00ffff0000, 0xffffff00ff00ff00,
-    0xffffff00ff0000ff, 0xffffff00ff000001, 0xffffff00ff000100, 0xffffff00ff000101,
-    0xffffff00ff010000, 0xffffff0000ffff00, 0xffffff0000ff0001, 0xffffff0000ff0100,
-    0xffffff000000ff01, 0xffffff0000000000, 0xffffff0000000101, 0xffffff000001ff00,
-    0xffffff00000100ff, 0xffffff0000010001, 0xffffff00000101ff, 0xffffff0001ff0000,
-    0xffffff000100ff00, 0xffffff00010000ff, 0xffffff0001000001, 0xffffff0001010000,
-    0xffffff01ffffffff, 0xffffff01ffffff01, 0xffffff01ffff01ff, 0xffffff01ffff0101,
-    0xffffff01ff000000, 0xffffff01ff01ffff, 0xffffff01ff01ff01, 0xffffff01ff0101ff,
-    0xffffff01ff010101, 0xffffff0100ff0000, 0xffffff010000ff00, 0xffffff0100000100,
-    0xffffff01000100ff, 0xffffff0100010100, 0xffffff0101ffffff, 0xffffff0101ffff01,
-    0xffffff0101ff01ff, 0xffffff0101ff0101, 0xffffff010100ff00, 0xffffff0101000000,
-    0xffffff0101000100, 0xffffff010101ffff, 0xffffff010101ff01, 0xffffff01010101ff,
-    0xffffff0101010101, 0xffff00ffff00ff00, 0xffff00ffff0000ff, 0xffff00ffff000001,
-    0xffff00ffff010000, 0xffff00ff00ffff00, 0xffff00ff00ff0100, 0xffff00ff00000000,
-    0xffff00ff00000101, 0xffff00ff000100ff, 0xffff00ff00010000, 0xffff00ff0100ff00,
-    0xffff00ff01000100, 0xffff00ff01010000, 0xffff0000ffffff00, 0xffff0000ffff00ff,
-    0xffff0000ffff0000, 0xffff0000ffff0001, 0xffff0000ff000000, 0xffff0000ff0001ff,
-    0xffff0000ff000101, 0xffff0000ff010100, 0xffff000000ffffff, 0xffff000000ff0000,
-    0xffff000000ff0101, 0xffff00000000ffff, 0xffff00000000ff00, 0xffff0000000000ff,
-    0xffff000000000000, 0xffff000000000001, 0xffff000000000100, 0xffff00000001ffff,
-    0xffff00000001ff01, 0xffff000000010000, 0xffff0000000101ff, 0xffff000000010101,
-    0xffff000001ffff00, 0xffff00000100ff00, 0xffff000001000000, 0xffff0000010001ff,
-    0xffff000001000101, 0xffff00000101ff00, 0xffff0000010100ff, 0xffff000001010000,
-    0xffff000001010001, 0xffff000001010100, 0xffff0001ff0000ff, 0xffff0001ff000100,
-    0xffff000100ffff00, 0xffff000100ff00ff, 0xffff00010000ffff, 0xffff00010000ff01,
-    0xffff000100000000, 0xffff0001000001ff, 0xffff00010001ffff, 0xffff00010001ff00,
-    0xffff000100010001, 0xffff000100010100, 0xffff000101ff0000, 0xffff00010100ff00,
-    0xffff0001010000ff, 0xffff000101000100, 0xffff01ffffffffff, 0xffff01ffffffff01,
-    0xffff01ffffff01ff, 0xffff01ffffff0101, 0xffff01ffff000000, 0xffff01ffff01ffff,
-    0xffff01ffff01ff01, 0xffff01ffff0101ff, 0xffff01ffff010101, 0xffff01ff00ff0000,
-    0xffff01ff0000ff00, 0xffff01ff00000001, 0xffff01ff00010000, 0xffff01ff01ffffff,
-    0xffff01ff01ffff01, 0xffff01ff01ff01ff, 0xffff01ff01ff0101, 0xffff01ff01000000,
-    0xffff01ff0101ffff, 0xffff01ff0101ff01, 0xffff01ff010101ff, 0xffff01ff01010101,
-    0xffff0100ffff0000, 0xffff0100ff00ff00, 0xffff0100ff0000ff, 0xffff0100ff000100,
-    0xffff0100ff0100ff, 0xffff0100ff010000, 0xffff010000ffff00, 0xffff01000000ffff,
-    0xffff01000000ff00, 0xffff010000000000, 0xffff01000001ff00, 0xffff0100000100ff,
-    0xffff010000010100, 0xffff01000100ff00, 0xffff0100010000ff, 0xffff010001000001,
-    0xffff010001000100, 0xffff010001010000, 0xffff0101ffffffff, 0xffff0101ffffff01,
-    0xffff0101ffff01ff, 0xffff0101ffff0101, 0xffff0101ff000000, 0xffff0101ff01ffff,
-    0xffff0101ff01ff01, 0xffff0101ff0101ff, 0xffff0101ff010101, 0xffff010100ff0000,
-    0xffff01010000ff00, 0xffff010100000100, 0xffff01010001ff00, 0xffff010100010000,
-    0xffff010101ffffff, 0xffff010101ffff01, 0xffff010101ff0000, 0xffff010101ff01ff,
-    0xffff010101ff0101, 0xffff010101000000, 0xffff01010101ffff, 0xffff01010101ff01,
-    0xffff0101010101ff, 0xffff010101010101, 0xff00ffffff00ffff, 0xff00ffffff00ff00,
-    0xff00ffffff0000ff, 0xff00ffffff000100, 0xff00ffffff0100ff, 0xff00ffffff010000,
-    0xff00ffff00ffff00, 0xff00ffff00ff00ff, 0xff00ffff0000ffff, 0xff00ffff00000000,
-    0xff00ffff000001ff, 0xff00ffff0001ff00, 0xff00ffff000100ff, 0xff00ffff00010000,
-    0xff00ffff00010100, 0xff00ffff0100ff00, 0xff00ffff010000ff, 0xff00ffff01000001,
-    0xff00ffff0101ff00, 0xff00ffff01010000, 0xff00ff00ffffff00, 0xff00ff00ffff00ff,
-    0xff00ff00ffff0001, 0xff00ff00ffff0100, 0xff00ff00ff00ffff, 0xff00ff00ff00ff01,
-    0xff00ff00ff000000, 0xff00ff00ff0001ff, 0xff00ff00ff01ff00, 0xff00ff00ff0100ff,
-    0xff00ff00ff010100, 0xff00ff0000ff0000, 0xff00ff0000ff0101, 0xff00ff000000ffff,
-    0xff00ff000000ff00, 0xff00ff000000ff01, 0xff00ff00000000ff, 0xff00ff0000000000,
-    0xff00ff0000000001, 0xff00ff0000000100, 0xff00ff000001ffff, 0xff00ff0000010000,
-    0xff00ff0001ff00ff, 0xff00ff000100ff01, 0xff00ff0001000000, 0xff00ff000101ff00,
-    0xff00ff00010100ff, 0xff00ff01ff00ff00, 0xff00ff01ff0000ff, 0xff00ff01ff000001,
-    0xff00ff01ff010000, 0xff00ff0100ffffff, 0xff00ff0100ff0001, 0xff00ff0100ff0100,
-    0xff00ff010000ff01, 0xff00ff0100000000, 0xff00ff01000001ff, 0xff00ff0100000101,
-    0xff00ff01000100ff, 0xff00ff0100010001, 0xff00ff0101ff0000, 0xff00ff010100ff00,
-    0xff00ff01010000ff, 0xff00ff0101000001, 0xff00ff0101010000, 0xff0000ffffffff00,
-    0xff0000ffffff0001, 0xff0000ffffff0100, 0xff0000ffff0000ff, 0xff0000ffff000000,
-    0xff0000ffff0001ff, 0xff0000ffff000100, 0xff0000ffff01ff00, 0xff0000ffff010001,
-    0xff0000ff00ffff00, 0xff0000ff00ff0000, 0xff0000ff00ff0001, 0xff0000ff00ff01ff,
-    0xff0000ff00ff0101, 0xff0000ff0000ff00, 0xff0000ff000000ff, 0xff0000ff00000000,
-    0xff0000ff00000001, 0xff0000ff00000100, 0xff0000ff0001ff01, 0xff0000ff00010000,
-    0xff0000ff000101ff, 0xff0000ff01ff00ff, 0xff0000ff01ff0100, 0xff0000ff0100ffff,
-    0xff0000ff010000ff, 0xff0000ff01000000, 0xff0000ff010001ff, 0xff0000ff01000100,
-    0xff0000ff01000101, 0xff0000ff0101ff00, 0xff0000ff010100ff, 0xff0000ff01010000,
-    0xff0000ff01010100, 0xff000000ffffff01, 0xff000000ffff0000, 0xff000000ffff0101,
-    0xff000000ff00ff00, 0xff000000ff0000ff, 0xff000000ff000000, 0xff000000ff000001,
-    0xff000000ff000100, 0xff000000ff01ffff, 0xff000000ff01ff01, 0xff000000ff010000,
-    0xff000000ff0101ff, 0xff000000ff010101, 0xff00000000ffff00, 0xff00000000ff00ff,
-    0xff00000000ff0000, 0xff00000000ff0001, 0xff0000000000ff00, 0xff0000000000ff01,
-    0xff000000000000ff, 0xff00000000000000, 0xff00000000000001, 0xff00000000000100,
-    0xff00000000000101, 0xff0000000001ff00, 0xff000000000100ff, 0xff00000000010000,
-    0xff00000000010001, 0xff00000000010100, 0xff00000001ffffff, 0xff00000001ffff01,
-    0xff00000001ff00ff, 0xff00000001ff0000, 0xff00000001ff01ff, 0xff00000001ff0101,
-    0xff0000000100ffff, 0xff0000000100ff00, 0xff000000010000ff, 0xff00000001000000,
-    0xff00000001000001, 0xff00000001000100, 0xff00000001000101, 0xff0000000101ffff,
-    0xff0000000101ff01, 0xff00000001010000, 0xff000001ffffff00, 0xff000001ffff00ff,
-    0xff000001ffff0000, 0xff000001ffff0001, 0xff000001ff000000, 0xff000001ff000001,
-    0xff000001ff0001ff, 0xff000001ff000101, 0xff000001ff01ff00, 0xff000001ff010001,
-    0xff00000100ffffff, 0xff00000100ffff01, 0xff00000100ff00ff, 0xff00000100ff0000,
-    0xff00000100ff01ff, 0xff00000100ff0101, 0xff0000010000ff00, 0xff00000100000000,
-    0xff00000100000001, 0xff000001000001ff, 0xff00000100000100, 0xff0000010001ff00,
-    0xff000001000100ff, 0xff00000100010000, 0xff000001000101ff, 0xff00000100010100,
-    0xff00000100010101, 0xff00000101ff0001, 0xff00000101ff0101, 0xff0000010100ff01,
-    0xff00000101000000, 0xff000001010100ff, 0xff00000101010100, 0xff0001ffff00ff00,
-    0xff0001ffff000001, 0xff0001ffff010000, 0xff0001ff00ffff00, 0xff0001ff00ff00ff,
-    0xff0001ff00ff0001, 0xff0001ff00ff0100, 0xff0001ff0000ffff, 0xff0001ff00000000,
-    0xff0001ff000001ff, 0xff0001ff00000101, 0xff0001ff0001ffff, 0xff0001ff0001ff00,
-    0xff0001ff000100ff, 0xff0001ff00010001, 0xff0001ff00010100, 0xff0001ff01ff0000,
-    0xff0001ff0100ff00, 0xff0001ff010000ff, 0xff0001ff01010000, 0xff000100ff00ffff,
-    0xff000100ff00ff01, 0xff000100ff000000, 0xff000100ff000101, 0xff000100ff01ff00,
-    0xff000100ff010000, 0xff00010000ffff01, 0xff00010000ff00ff, 0xff00010000ff0000,
-    0xff00010000ff01ff, 0xff0001000000ff00, 0xff000100000000ff, 0xff00010000000000,
-    0xff00010000000001, 0xff00010000000100, 0xff00010000000101, 0xff0001000001ffff,
-    0xff00010000010000, 0xff00010000010101, 0xff00010001ff0100, 0xff0001000100ff00,
-    0xff0001000100ff01, 0xff00010001000000, 0xff000100010001ff, 0xff0001000101ff00,
-    0xff00010001010001, 0xff00010001010100, 0xff000101ffff0100, 0xff000101ff000001,
-    0xff000101ff0100ff, 0xff000101ff010001, 0xff00010100ff00ff, 0xff00010100ff0001,
-    0xff00010100ff0100, 0xff0001010000ffff, 0xff0001010000ff01, 0xff00010100000000,
-    0xff000101000001ff, 0xff0001010001ff00, 0xff00010100010001, 0xff00010100010100,
-    0xff00010101ff0000, 0xff0001010100ff00, 0xff00010101000001, 0xff00010101000101,
-    0xff01ffffffffffff, 0xff01ffffffffff01, 0xff01ffffffff01ff, 0xff01ffffffff0101,
-    0xff01ffffff000000, 0xff01ffffff01ffff, 0xff01ffffff01ff01, 0xff01ffffff010000,
-    0xff01ffffff0101ff, 0xff01ffffff010101, 0xff01ffff00ff0000, 0xff01ffff0000ff00,
-    0xff01ffff00000100, 0xff01ffff0001ff00, 0xff01ffff00010000, 0xff01ffff01ffffff,
-    0xff01ffff01ffff01, 0xff01ffff01ff01ff, 0xff01ffff01ff0101, 0xff01ffff01000000,
-    0xff01ffff0101ffff, 0xff01ffff0101ff01, 0xff01ffff01010000, 0xff01ffff010101ff,
-    0xff01ffff01010101, 0xff01ff00ffff0000, 0xff01ff00ff00ff00, 0xff01ff00ff0000ff,
-    0xff01ff00ff000100, 0xff01ff00ff010000, 0xff01ff0000ffff01, 0xff01ff0000ff00ff,
-    0xff01ff0000ff0100, 0xff01ff0000000000, 0xff01ff00000001ff, 0xff01ff0000000101,
-    0xff01ff000001ff00, 0xff01ff00000100ff, 0xff01ff0000010000, 0xff01ff0000010001,
-    0xff01ff0001ff0000, 0xff01ff000100ffff, 0xff01ff0001000001, 0xff01ff0001000100,
-    0xff01ff0001010000, 0xff01ff01ffffff00, 0xff01ff01ffff01ff, 0xff01ff01ffff0101,
-    0xff01ff01ff00ff00, 0xff01ff01ff000000, 0xff01ff01ff01ffff, 0xff01ff01ff01ff01,
-    0xff01ff01ff0101ff, 0xff01ff01ff010101, 0xff01ff0100ff0000, 0xff01ff010000ff00,
-    0xff01ff0100000001, 0xff01ff0100000100, 0xff01ff0100010000, 0xff01ff0101ffff00,
-    0xff01ff0101ff01ff, 0xff01ff0101ff0101, 0xff01ff010100ff00, 0xff01ff0101000000,
-    0xff01ff010101ffff, 0xff01ff010101ff01, 0xff01ff01010101ff, 0xff01ff0101010101,
-    0xff0100ffffff0000, 0xff0100ffff0000ff, 0xff0100ffff000001, 0xff0100ffff000100,
-    0xff0100ffff010000, 0xff0100ff00ff00ff, 0xff0100ff00ff0000, 0xff0100ff00ff0001,
-    0xff0100ff00ff0100, 0xff0100ff0000ff01, 0xff0100ff00000000, 0xff0100ff000001ff,
-    0xff0100ff00000101, 0xff0100ff00010001, 0xff0100ff01ff0000, 0xff0100ff0100ff00,
-    0xff0100ff010000ff, 0xff0100ff01000100, 0xff0100ff0101ff00, 0xff0100ff01010000,
-    0xff010000ffff0100, 0xff010000ff000000, 0xff010000ff01ff00, 0xff010000ff010100,
-    0xff01000000ffffff, 0xff01000000ff0000, 0xff01000000ff01ff, 0xff0100000000ff00,
-    0xff010000000000ff, 0xff01000000000000, 0xff01000000000100, 0xff0100000001ff01,
-    0xff01000000010000, 0xff010000000101ff, 0xff01000001ff0100, 0xff0100000100ffff,
-    0xff010000010000ff, 0xff01000001000000, 0xff010000010001ff, 0xff01000001000101,
-    0xff0100000101ff00, 0xff010000010100ff, 0xff01000001010001, 0xff01000001010100,
-    0xff010001ffff0000, 0xff010001ff00ffff, 0xff010001ff00ff01, 0xff010001ff000100,
-    0xff010001ff010000, 0xff01000100ffff00, 0xff01000100ff0100, 0xff01000100000000,
-    0xff0100010001ffff, 0xff0100010001ff00, 0xff01000100010100, 0xff01000101ff00ff,
-    0xff01000101ff0001, 0xff0100010100ffff, 0xff01000101000101, 0xff0101ffffffffff,
-    0xff0101ffffffff01, 0xff0101ffffff01ff, 0xff0101ffffff0101, 0xff0101ffff000000,
-    0xff0101ffff01ffff, 0xff0101ffff01ff01, 0xff0101ffff0101ff, 0xff0101ffff010101,
-    0xff0101ff00ff0000, 0xff0101ff0000ff00, 0xff0101ff000000ff, 0xff0101ff00010000,
-    0xff0101ff01ffffff, 0xff0101ff01ffff01, 0xff0101ff01ff01ff, 0xff0101ff01ff0101,
-    0xff0101ff0101ffff, 0xff0101ff0101ff01, 0xff0101ff010101ff, 0xff0101ff01010101,
-    0xff010100ffff0100, 0xff010100ff00ff00, 0xff010100ff0000ff, 0xff010100ff000100,
-    0xff010100ff010000, 0xff01010000ff0001, 0xff01010000ff0100, 0xff0101000000ff01,
-    0xff01010000000000, 0xff0101000001ff00, 0xff010100000100ff, 0xff01010000010001,
-    0xff01010000010100, 0xff01010001ff0000, 0xff0101000100ffff, 0xff01010001000001,
-    0xff01010001000100, 0xff010100010100ff, 0xff01010001010000, 0xff010101ffffffff,
-    0xff010101ffffff01, 0xff010101ffff01ff, 0xff010101ffff0101, 0xff010101ff01ffff,
-    0xff010101ff01ff01, 0xff010101ff0101ff, 0xff010101ff010101, 0xff01010100ff0000,
-    0xff0101010000ff00, 0xff01010100000001, 0xff01010100000100, 0xff01010100010000,
-    0xff01010101ffffff, 0xff01010101ffff01, 0xff01010101ff01ff, 0xff01010101ff0101,
-    0xff01010101000000, 0xff0101010101ffff, 0xff0101010101ff01, 0xff010101010101ff,
-    0xff01010101010101, 0x00ffffffffff0000, 0x00ffffffff00ff00, 0x00ffffffff000001,
-    0x00ffffffff010000, 0x00ffffff00ff0100, 0x00ffffff0000ff01, 0x00ffffff00000000,
-    0x00ffffff000001ff, 0x00ffffff00000101, 0x00ffffff0001ff00, 0x00ffffff000100ff,
-    0x00ffffff00010001, 0x00ffffff010000ff, 0x00ffffff01000100, 0x00ffffff0101ff00,
-    0x00ffffff01010001, 0x00ffff00ffffffff, 0x00ffff00ffffff00, 0x00ffff00ffff00ff,
-    0x00ffff00ffff0001, 0x00ffff00ffff0100, 0x00ffff00ff00ff01, 0x00ffff00ff000000,
-    0x00ffff00ff000001, 0x00ffff00ff0001ff, 0x00ffff00ff000101, 0x00ffff00ff01ff00,
-    0x00ffff00ff010001, 0x00ffff00ff010100, 0x00ffff0000ff0000, 0x00ffff0000ff01ff,
-    0x00ffff0000ff0101, 0x00ffff000000ff00, 0x00ffff00000000ff, 0x00ffff0000000000,
-    0x00ffff0000000001, 0x00ffff0000000100, 0x00ffff0000000101, 0x00ffff0000010000,
-    0x00ffff00000101ff, 0x00ffff0000010101, 0x00ffff0001ffff00, 0x00ffff0001ff00ff,
-    0x00ffff0001ff0001, 0x00ffff000100ffff, 0x00ffff000100ff01, 0x00ffff0001000000,
-    0x00ffff000101ffff, 0x00ffff000101ff00, 0x00ffff000101ff01, 0x00ffff01ffff0000,
-    0x00ffff01ff00ff00, 0x00ffff01ff0000ff, 0x00ffff01ff000001, 0x00ffff01ff010000,
-    0x00ffff0100ffff00, 0x00ffff010000ff01, 0x00ffff0100000000, 0x00ffff0100000101,
-    0x00ffff01000100ff, 0x00ffff0100010100, 0x00ffff0101ff0100, 0x00ffff01010000ff,
-    0x00ffff0101010000, 0x00ff00ffffffff00, 0x00ff00ffff000000, 0x00ff00ffff000100,
-    0x00ff00ffff010100, 0x00ff00ff00ff0000, 0x00ff00ff00ff01ff, 0x00ff00ff00ff0101,
-    0x00ff00ff0000ff00, 0x00ff00ff000000ff, 0x00ff00ff00000000, 0x00ff00ff00000001,
-    0x00ff00ff0001ff00, 0x00ff00ff0001ff01, 0x00ff00ff00010000, 0x00ff00ff000101ff,
-    0x00ff00ff00010101, 0x00ff00ff01ffff00, 0x00ff00ff01ff0001, 0x00ff00ff01ff0100,
-    0x00ff00ff0100ffff, 0x00ff00ff0100ff01, 0x00ff00ff01000000, 0x00ff00ff0101ffff,
-    0x00ff00ff0101ff00, 0x00ff00ff01010100, 0x00ff0000ffffff00, 0x00ff0000ffffff01,
-    0x00ff0000ffff0000, 0x00ff0000ffff0101, 0x00ff0000ff00ff00, 0x00ff0000ff0000ff,
-    0x00ff0000ff000000, 0x00ff0000ff000001, 0x00ff0000ff000100, 0x00ff0000ff01ffff,
-    0x00ff0000ff010000, 0x00ff0000ff010101, 0x00ff000000ffff00, 0x00ff000000ff00ff,
-    0x00ff000000ff0000, 0x00ff000000ff0001, 0x00ff000000ff0100, 0x00ff00000000ffff,
-    0x00ff00000000ff00, 0x00ff0000000000ff, 0x00ff000000000000, 0x00ff000000000001,
-    0x00ff0000000001ff, 0x00ff000000000100, 0x00ff00000001ff00, 0x00ff0000000100ff,
-    0x00ff000000010000, 0x00ff000000010001, 0x00ff000000010100, 0x00ff000001ffff01,
-    0x00ff000001ff00ff, 0x00ff000001ff0000, 0x00ff000001ff01ff, 0x00ff00000100ff00,
-    0x00ff0000010000ff, 0x00ff000001000000, 0x00ff000001000001, 0x00ff000001000100,
-    0x00ff000001000101, 0x00ff000001010000, 0x00ff0000010101ff, 0x00ff000001010101,
-    0x00ff0001ffffff00, 0x00ff0001ffff0000, 0x00ff0001ffff0100, 0x00ff0001ff0000ff,
-    0x00ff0001ff000000, 0x00ff0001ff0001ff, 0x00ff0001ff000101, 0x00ff0001ff01ff00,
-    0x00ff0001ff0100ff, 0x00ff0001ff010100, 0x00ff000100ffffff, 0x00ff000100ffff01,
-    0x00ff000100ff0000, 0x00ff000100ff01ff, 0x00ff00010000ffff, 0x00ff00010000ff00,
-    0x00ff00010000ff01, 0x00ff000100000000, 0x00ff000100000001, 0x00ff000100000100,
-    0x00ff00010001ff01, 0x00ff000100010000, 0x00ff0001000101ff, 0x00ff000101ffff00,
-    0x00ff000101ff0000, 0x00ff000101ff0101, 0x00ff0001010000ff, 0x00ff000101000000,
-    0x00ff00010101ff00, 0x00ff0001010100ff, 0x00ff000101010001, 0x00ff01ffffff0000,
-    0x00ff01ffff00ff00, 0x00ff01ffff000000, 0x00ff01ffff000101, 0x00ff01ffff010000,
-    0x00ff01ff00ffff01, 0x00ff01ff00ff0100, 0x00ff01ff0000ffff, 0x00ff01ff00000000,
-    0x00ff01ff000001ff, 0x00ff01ff0001ff00, 0x00ff01ff000100ff, 0x00ff01ff00010001,
-    0x00ff01ff00010100, 0x00ff01ff01ff0000, 0x00ff01ff0100ff00, 0x00ff01ff010000ff,
-    0x00ff01ff01000001, 0x00ff01ff01000100, 0x00ff01ff01010000, 0x00ff0100ffffff00,
-    0x00ff0100ffff0000, 0x00ff0100ffff0001, 0x00ff0100ffff0101, 0x00ff0100ff00ffff,
-    0x00ff0100ff0000ff, 0x00ff0100ff000000, 0x00ff0100ff0001ff, 0x00ff0100ff01ff00,
-    0x00ff0100ff0100ff, 0x00ff0100ff010001, 0x00ff010000ffffff, 0x00ff010000ff0000,
-    0x00ff010000ff0101, 0x00ff01000000ff00, 0x00ff01000000ff01, 0x00ff0100000000ff,
-    0x00ff010000000000, 0x00ff010000000001, 0x00ff010000000100, 0x00ff01000001ffff,
-    0x00ff01000001ff01, 0x00ff010000010000, 0x00ff010000010001, 0x00ff010000010101,
-    0x00ff010001ff0001, 0x00ff010001ff0100, 0x00ff01000100ff01, 0x00ff010001000000,
-    0x00ff010001000001, 0x00ff0100010001ff, 0x00ff01000101ff00, 0x00ff0100010100ff,
-    0x00ff010001010001, 0x00ff010001010100, 0x00ff0101ff000001, 0x00ff010100ff00ff,
-    0x00ff010100ff0001, 0x00ff010100ff0100, 0x00ff010100000000, 0x00ff0101000001ff,
-    0x00ff010100000101, 0x00ff0101000100ff, 0x00ff010100010100, 0x00ff0101010000ff,
-    0x00ff010101010000, 0x0000ffffffffff00, 0x0000ffffffff00ff, 0x0000ffffffff0000,
-    0x0000ffffffff0001, 0x0000ffffffff0100, 0x0000ffffff00ff01, 0x0000ffffff000000,
-    0x0000ffffff000101, 0x0000ffffff01ff00, 0x0000ffffff0100ff, 0x0000ffffff010100,
-    0x0000ffff00ffffff, 0x0000ffff00ff0000, 0x0000ffff00ff01ff, 0x0000ffff0000ff00,
-    0x0000ffff000000ff, 0x0000ffff00000000, 0x0000ffff00000001, 0x0000ffff00000100,
-    0x0000ffff00010000, 0x0000ffff000101ff, 0x0000ffff01ff0001, 0x0000ffff01ff0100,
-    0x0000ffff01000000, 0x0000ffff010001ff, 0x0000ffff0101ffff, 0x0000ffff0101ff00,
-    0x0000ffff01010001, 0x0000ffff01010100, 0x0000ff00ffff0000, 0x0000ff00ffff01ff,
-    0x0000ff00ffff0100, 0x0000ff00ffff0101, 0x0000ff00ff00ff00, 0x0000ff00ff0000ff,
-    0x0000ff00ff000000, 0x0000ff00ff000001, 0x0000ff00ff0001ff, 0x0000ff00ff000100,
-    0x0000ff00ff01ffff, 0x0000ff00ff010000, 0x0000ff00ff010001, 0x0000ff00ff0101ff,
-    0x0000ff00ff010101, 0x0000ff0000ffff00, 0x0000ff0000ff00ff, 0x0000ff0000ff0000,
-    0x0000ff0000ff0001, 0x0000ff0000ff0100, 0x0000ff000000ffff, 0x0000ff000000ff00,
-    0x0000ff000000ff01, 0x0000ff00000000ff, 0x0000ff0000000000, 0x0000ff0000000001,
-    0x0000ff00000001ff, 0x0000ff0000000100, 0x0000ff0000000101, 0x0000ff000001ff00,
-    0x0000ff00000100ff, 0x0000ff0000010000, 0x0000ff0000010001, 0x0000ff0000010100,
-    0x0000ff0001ffff01, 0x0000ff0001ff0000, 0x0000ff000100ff00, 0x0000ff00010000ff,
-    0x0000ff0001000000, 0x0000ff0001000001, 0x0000ff0001000100, 0x0000ff000101ffff,
-    0x0000ff0001010000, 0x0000ff0001010101, 0x0000ff01ffffff00, 0x0000ff01ffff0001,
-    0x0000ff01ff00ff01, 0x0000ff01ff000000, 0x0000ff01ff000101, 0x0000ff01ff01ff00,
-    0x0000ff01ff0100ff, 0x0000ff0100ffff01, 0x0000ff0100ff0000, 0x0000ff0100ff0101,
-    0x0000ff010000ff00, 0x0000ff01000000ff, 0x0000ff0100000000, 0x0000ff0100000001,
-    0x0000ff0100000100, 0x0000ff010001ff01, 0x0000ff0100010000, 0x0000ff0101ff0000,
-    0x0000ff010100ffff, 0x0000ff010100ff01, 0x0000ff0101000000, 0x0000ff0101000100,
-    0x0000ff0101000101, 0x0000ff01010100ff, 0x000000ffffff00ff, 0x000000ffffff0000,
-    0x000000ffff00ff00, 0x000000ffff0000ff, 0x000000ffff000000, 0x000000ffff000001,
-    0x000000ffff0001ff, 0x000000ffff000100, 0x000000ffff01ff00, 0x000000ffff010000,
-    0x000000ffff0101ff, 0x000000ffff010101, 0x000000ff00ffff00, 0x000000ff00ff00ff,
-    0x000000ff00ff0000, 0x000000ff00ff0001, 0x000000ff00ff0100, 0x000000ff00ff0101,
-    0x000000ff0000ffff, 0x000000ff0000ff00, 0x000000ff000000ff, 0x000000ff00000000,
-    0x000000ff00000001, 0x000000ff000001ff, 0x000000ff00000100, 0x000000ff00000101,
-    0x000000ff0001ff00, 0x000000ff0001ff01, 0x000000ff000100ff, 0x000000ff00010000,
-    0x000000ff00010001, 0x000000ff00010100, 0x000000ff01ffffff, 0x000000ff01ff01ff,
-    0x000000ff01ff0101, 0x000000ff0100ff00, 0x000000ff010000ff, 0x000000ff01000000,
-    0x000000ff01000001, 0x000000ff01000100, 0x000000ff0101ff00, 0x000000ff010100ff,
-    0x000000ff01010000, 0x000000ff01010101, 0x00000000ffffff00, 0x00000000ffffff01,
-    0x00000000ffff00ff, 0x00000000ffff0000, 0x00000000ffff0001, 0x00000000ffff0100,
-    0x00000000ff00ffff, 0x00000000ff00ff00, 0x00000000ff00ff01, 0x00000000ff0000ff,
-    0x00000000ff000000, 0x00000000ff000001, 0x00000000ff000100, 0x00000000ff000101,
-    0x00000000ff01ff00, 0x00000000ff0100ff, 0x00000000ff010000, 0x00000000ff010001,
-    0x00000000ff010100, 0x0000000000ffffff, 0x0000000000ffff00, 0x0000000000ffff01,
-    0x0000000000ff00ff, 0x0000000000ff0000, 0x0000000000ff0001, 0x0000000000ff01ff,
-    0x0000000000ff0100, 0x000000000000ffff, 0x000000000000ff00, 0x000000000000ff01,
-    0x00000000000000ff, 0x0000000000000000, 0x0000000000000001, 0x00000000000001ff,
-    0x0000000000000100, 0x0000000000000101, 0x000000000001ffff, 0x000000000001ff00,
-    0x00000000000100ff, 0x0000000000010000, 0x0000000000010001, 0x00000000000101ff,
-    0x0000000000010100, 0x0000000000010101, 0x0000000001ffff00, 0x0000000001ff00ff,
-    0x0000000001ff0000, 0x0000000001ff0100, 0x0000000001ff0101, 0x000000000100ffff,
-    0x000000000100ff00, 0x00000000010000ff, 0x0000000001000000, 0x0000000001000001,
-    0x00000000010001ff, 0x0000000001000100, 0x000000000101ff00, 0x00000000010100ff,
-    0x0000000001010000, 0x0000000001010001, 0x0000000001010100, 0x00000001ffffffff,
-    0x00000001ffffff00, 0x00000001ffffff01, 0x00000001ffff00ff, 0x00000001ffff0001,
-    0x00000001ffff01ff, 0x00000001ffff0100, 0x00000001ff00ff00, 0x00000001ff0000ff,
-    0x00000001ff000000, 0x00000001ff0001ff, 0x00000001ff000100, 0x00000001ff01ffff,
-    0x00000001ff01ff00, 0x00000001ff01ff01, 0x00000001ff0100ff, 0x00000001ff010000,
-    0x00000001ff010001, 0x00000001ff0101ff, 0x00000001ff010100, 0x0000000100ffff00,
-    0x0000000100ff0000, 0x0000000100ff0001, 0x0000000100ff01ff, 0x0000000100ff0100,
-    0x0000000100ff0101, 0x000000010000ffff, 0x000000010000ff00, 0x000000010000ff01,
-    0x00000001000000ff, 0x0000000100000000, 0x0000000100000001, 0x00000001000001ff,
-    0x0000000100000100, 0x0000000100000101, 0x000000010001ff00, 0x00000001000100ff,
-    0x0000000100010000, 0x0000000100010100, 0x0000000101ffff01, 0x0000000101ff0000,
-    0x0000000101ff0001, 0x0000000101ff01ff, 0x0000000101ff0100, 0x0000000101ff0101,
-    0x000000010100ff00, 0x0000000101000000, 0x0000000101000101, 0x000000010101ff01,
-    0x0000000101010000, 0x0000000101010001, 0x00000001010101ff, 0x0000000101010100,
-    0x000001ffffff00ff, 0x000001ffffff0000, 0x000001ffffff0001, 0x000001ffffff0100,
-    0x000001ffff00ffff, 0x000001ffff000000, 0x000001ffff0001ff, 0x000001ffff01ff00,
-    0x000001ffff010101, 0x000001ff00ff0000, 0x000001ff00ff01ff, 0x000001ff00ff0101,
-    0x000001ff0000ff00, 0x000001ff000000ff, 0x000001ff00000000, 0x000001ff00000001,
-    0x000001ff000001ff, 0x000001ff00000100, 0x000001ff0001ffff, 0x000001ff0001ff01,
-    0x000001ff000100ff, 0x000001ff00010000, 0x000001ff01ffff01, 0x000001ff01ff0100,
-    0x000001ff0100ffff, 0x000001ff0100ff01, 0x000001ff01000000, 0x000001ff010001ff,
-    0x000001ff0101ff00, 0x000001ff01010100, 0x00000100ffffff00, 0x00000100ffffff01,
-    0x00000100ffff0000, 0x00000100ffff0101, 0x00000100ff00ff00, 0x00000100ff0000ff,
-    0x00000100ff000000, 0x00000100ff000001, 0x00000100ff000100, 0x00000100ff010000,
-    0x0000010000ffff00, 0x0000010000ff00ff, 0x0000010000ff0000, 0x0000010000ff0001,
-    0x0000010000ff0100, 0x000001000000ffff, 0x000001000000ff00, 0x000001000000ff01,
-    0x00000100000000ff, 0x0000010000000000, 0x0000010000000001, 0x00000100000001ff,
-    0x0000010000000100, 0x0000010000000101, 0x000001000001ff00, 0x00000100000100ff,
-    0x0000010000010000, 0x0000010000010001, 0x0000010000010100, 0x0000010001ffff00,
-    0x0000010001ff0000, 0x0000010001ff0100, 0x000001000100ff00, 0x00000100010000ff,
-    0x0000010001000000, 0x0000010001000001, 0x00000100010001ff, 0x0000010001000100,
-    0x0000010001010000, 0x00000101ffff00ff, 0x00000101ffff01ff, 0x00000101ff000000,
-    0x00000101ff000101, 0x00000101ff01ffff, 0x00000101ff010000, 0x00000101ff010001,
-    0x00000101ff010100, 0x0000010100ff0000, 0x0000010100ff01ff, 0x0000010100ff0100,
-    0x000001010000ff00, 0x0000010100000000, 0x0000010100000001, 0x00000101000001ff,
-    0x0000010100000100, 0x000001010001ff01, 0x0000010100010000, 0x00000101000101ff,
-    0x0000010100010101, 0x0000010101ffff00, 0x0000010101ff0101, 0x000001010100ff01,
-    0x0000010101000000, 0x0000010101000001, 0x00000101010001ff, 0x0000010101000101,
-    0x000001010101ff00, 0x0001ffffffff0000, 0x0001ffffff0000ff, 0x0001ffffff000001,
-    0x0001ffffff000100, 0x0001ffffff010000, 0x0001ffff00ff00ff, 0x0001ffff0000ffff,
-    0x0001ffff00000000, 0x0001ffff00000001, 0x0001ffff000001ff, 0x0001ffff00000101,
-    0x0001ffff0001ff00, 0x0001ffff000100ff, 0x0001ffff00010001, 0x0001ffff00010100,
-    0x0001ffff01ffff00, 0x0001ffff01000001, 0x0001ffff01010000, 0x0001ff00ffffff00,
-    0x0001ff00ffff00ff, 0x0001ff00ffff0001, 0x0001ff00ffff0100, 0x0001ff00ff00ff01,
-    0x0001ff00ff000000, 0x0001ff00ff01ff00, 0x0001ff00ff01ff01, 0x0001ff00ff010001,
-    0x0001ff00ff010100, 0x0001ff0000ff0000, 0x0001ff0000ff0100, 0x0001ff000000ff00,
-    0x0001ff0000000000, 0x0001ff0000000001, 0x0001ff0000000100, 0x0001ff0000010000,
-    0x0001ff0000010001, 0x0001ff0000010101, 0x0001ff0001ff00ff, 0x0001ff0001ff0101,
-    0x0001ff000100ff01, 0x0001ff0001000000, 0x0001ff000101ff00, 0x0001ff0001010001,
-    0x0001ff0001010100, 0x0001ff01ff00ff00, 0x0001ff01ff000001, 0x0001ff01ff000100,
-    0x0001ff0100ffffff, 0x0001ff0100ffff00, 0x0001ff0100ff0001, 0x0001ff0100000000,
-    0x0001ff0100000001, 0x0001ff01000001ff, 0x0001ff010001ffff, 0x0001ff0101ff0000,
-    0x0001ff010100ff00, 0x0001ff0101000001, 0x0001ff0101010000, 0x000100ffff00ff00,
-    0x000100ffff00ff01, 0x000100ffff000000, 0x000100ffff000001, 0x000100ffff000101,
-    0x000100ffff01ff00, 0x000100ffff010001, 0x000100ffff010100, 0x000100ff00ffffff,
-    0x000100ff00ffff01, 0x000100ff00ff0000, 0x000100ff00ff01ff, 0x000100ff00ff0101,
-    0x000100ff0000ff00, 0x000100ff000000ff, 0x000100ff00000000, 0x000100ff00000001,
-    0x000100ff00000100, 0x000100ff00000101, 0x000100ff0001ffff, 0x000100ff0001ff01,
-    0x000100ff00010000, 0x000100ff01ff00ff, 0x000100ff01ff0000, 0x000100ff01ff0100,
-    0x000100ff0100ffff, 0x000100ff0100ff01, 0x000100ff010000ff, 0x000100ff01000000,
-    0x000100ff01000001, 0x000100ff010001ff, 0x000100ff01000101, 0x000100ff0101ff00,
-    0x000100ff010100ff, 0x000100ff01010100, 0x00010000ffff0000, 0x00010000ffff01ff,
-    0x00010000ffff0101, 0x00010000ff00ff00, 0x00010000ff000000, 0x00010000ff000001,
-    0x00010000ff000100, 0x0001000000ff00ff, 0x0001000000ff0000, 0x0001000000ff0001,
-    0x0001000000ff0100, 0x000100000000ffff, 0x000100000000ff00, 0x00010000000000ff,
-    0x0001000000000000, 0x0001000000000001, 0x0001000000000100, 0x000100000001ff00,
-    0x00010000000100ff, 0x0001000000010000, 0x0001000000010001, 0x0001000000010100,
-    0x0001000001ff0001, 0x0001000001ff0100, 0x0001000001ff0101, 0x000100000100ff00,
-    0x0001000001000000, 0x0001000001000001, 0x0001000001000100, 0x0001000001000101,
-    0x000100000101ff01, 0x0001000001010000, 0x0001000001010001, 0x00010000010101ff,
-    0x00010001ffffff01, 0x00010001ffff0100, 0x00010001ff000000, 0x00010001ff01ffff,
-    0x00010001ff010001, 0x00010001ff0101ff, 0x00010001ff010100, 0x0001000100ffffff,
-    0x0001000100ff0000, 0x0001000100ff01ff, 0x0001000100ff0101, 0x000100010000ff00,
-    0x00010001000000ff, 0x0001000100000000, 0x0001000100000001, 0x00010001000001ff,
-    0x0001000100000101, 0x000100010001ffff, 0x0001000100010000, 0x00010001000101ff,
-    0x0001000101ffffff, 0x0001000101ffff01, 0x0001000101ff0000, 0x0001000101ff0101,
-    0x00010001010000ff, 0x0001000101000001, 0x00010001010001ff, 0x0001000101000100,
-    0x000100010101ffff, 0x00010001010100ff, 0x0001000101010001, 0x0001000101010101,
-    0x000101ffff000001, 0x000101ffff000100, 0x000101ffff010000, 0x000101ff00ffff00,
-    0x000101ff0000ff01, 0x000101ff00000000, 0x000101ff00000101, 0x000101ff0001ff00,
-    0x000101ff00010100, 0x000101ff01ff0000, 0x000101ff0100ff00, 0x000101ff010001ff,
-    0x000101ff01010001, 0x00010100ffffff00, 0x00010100ffff00ff, 0x00010100ff00ffff,
-    0x00010100ff000000, 0x00010100ff01ff00, 0x00010100ff0100ff, 0x00010100ff010001,
-    0x00010100ff010100, 0x0001010000ffffff, 0x0001010000ffff00, 0x0001010000ff0000,
-    0x0001010000ff0001, 0x0001010000ff01ff, 0x000101000000ff00, 0x00010100000000ff,
-    0x0001010000000000, 0x0001010000000001, 0x0001010000000100, 0x000101000001ffff,
-    0x0001010000010000, 0x0001010000010101, 0x0001010001ffff01, 0x0001010001ff00ff,
-    0x0001010001ff0101, 0x0001010001000000, 0x000101000101ff00, 0x00010100010100ff,
-    0x0001010001010000, 0x0001010001010100, 0x00010101ff00ff00, 0x00010101ff000001,
-    0x00010101ff0001ff, 0x0001010100ffff00, 0x0001010100ff00ff, 0x0001010100ff0100,
-    0x000101010000ffff, 0x0001010100000000, 0x00010101000001ff, 0x0001010100000101,
-    0x00010101000100ff, 0x0001010100010000, 0x0001010100010100, 0x0001010101ff0001,
-    0x00010101010000ff, 0x00010101010001ff, 0x0001010101000101, 0x0001010101010001,
-    0x01ffffffffffffff, 0x01ffffffffffff01, 0x01ffffffffff01ff, 0x01ffffffffff0101,
-    0x01ffffffff01ffff, 0x01ffffffff01ff01, 0x01ffffffff0101ff, 0x01ffffffff010101,
-    0x01ffffff00ff0000, 0x01ffffff0000ffff, 0x01ffffff0000ff00, 0x01ffffff000000ff,
-    0x01ffffff00000001, 0x01ffffff00000100, 0x01ffffff00010000, 0x01ffffff01ffffff,
-    0x01ffffff01ffff01, 0x01ffffff01ff01ff, 0x01ffffff01ff0101, 0x01ffffff01000000,
-    0x01ffffff0101ffff, 0x01ffffff0101ff01, 0x01ffffff010101ff, 0x01ffffff01010101,
-    0x01ffff00ffff0000, 0x01ffff00ff00ff00, 0x01ffff00ff0000ff, 0x01ffff00ff000001,
-    0x01ffff00ff000100, 0x01ffff00ff010000, 0x01ffff0000ffff00, 0x01ffff0000ff00ff,
-    0x01ffff0000ff0100, 0x01ffff000000ffff, 0x01ffff000000ff01, 0x01ffff0000000000,
-    0x01ffff0000000001, 0x01ffff00000001ff, 0x01ffff0000000100, 0x01ffff00000100ff,
-    0x01ffff0000010001, 0x01ffff0000010100, 0x01ffff0001ff0000, 0x01ffff0001ff0100,
-    0x01ffff00010000ff, 0x01ffff0001000001, 0x01ffff0001000100, 0x01ffff0001010000,
-    0x01ffff01ffffffff, 0x01ffff01ffffff01, 0x01ffff01ffff01ff, 0x01ffff01ffff0101,
-    0x01ffff01ff000000, 0x01ffff01ff01ffff, 0x01ffff01ff01ff01, 0x01ffff01ff0101ff,
-    0x01ffff01ff010101, 0x01ffff010000ff00, 0x01ffff01000000ff, 0x01ffff0100000100,
-    0x01ffff0100010000, 0x01ffff0101ffffff, 0x01ffff0101ffff01, 0x01ffff0101ff01ff,
-    0x01ffff0101ff0101, 0x01ffff0101000000, 0x01ffff010101ffff, 0x01ffff010101ff01,
-    0x01ffff01010101ff, 0x01ffff0101010101, 0x01ff00ffff0000ff, 0x01ff00ffff000100,
-    0x01ff00ff00ffff00, 0x01ff00ff00ff00ff, 0x01ff00ff0000ff00, 0x01ff00ff00000000,
-    0x01ff00ff00000101, 0x01ff00ff0001ff00, 0x01ff00ff000100ff, 0x01ff00ff00010100,
-    0x01ff00ff010000ff, 0x01ff00ff01000100, 0x01ff0000ffffff00, 0x01ff0000ffff0100,
-    0x01ff0000ff00ff01, 0x01ff0000ff000000, 0x01ff0000ff000101, 0x01ff0000ff010001,
-    0x01ff0000ff010100, 0x01ff000000ffffff, 0x01ff000000ffff00, 0x01ff000000ff0000,
-    0x01ff000000ff01ff, 0x01ff00000000ff00, 0x01ff0000000000ff, 0x01ff000000000000,
-    0x01ff000000000001, 0x01ff000000000100, 0x01ff000000000101, 0x01ff000000010000,
-    0x01ff000000010001, 0x01ff0000000101ff, 0x01ff000000010101, 0x01ff000001ffff00,
-    0x01ff000001ff00ff, 0x01ff000001ff0001, 0x01ff000001ff0100, 0x01ff00000100ffff,
-    0x01ff00000100ff01, 0x01ff000001000000, 0x01ff0000010001ff, 0x01ff000001010001,
-    0x01ff0001ff00ff00, 0x01ff0001ff000001, 0x01ff0001ff000100, 0x01ff0001ff010000,
-    0x01ff000100ffff00, 0x01ff000100ff00ff, 0x01ff000100ff0100, 0x01ff000100ff0101,
-    0x01ff00010000ffff, 0x01ff000100000000, 0x01ff000100000100, 0x01ff000100000101,
-    0x01ff00010001ff00, 0x01ff000100010001, 0x01ff000100010101, 0x01ff000101ff0000,
-    0x01ff00010100ff00, 0x01ff000101000101, 0x01ff0001010100ff, 0x01ff01ffffffffff,
-    0x01ff01ffffffff01, 0x01ff01ffffff01ff, 0x01ff01ffffff0101, 0x01ff01ffff000000,
-    0x01ff01ffff01ffff, 0x01ff01ffff01ff01, 0x01ff01ffff0101ff, 0x01ff01ffff010101,
-    0x01ff01ff00ffff00, 0x01ff01ff00ff0000, 0x01ff01ff0000ff00, 0x01ff01ff000000ff,
-    0x01ff01ff00000100, 0x01ff01ff00010000, 0x01ff01ff00010100, 0x01ff01ff01ffffff,
-    0x01ff01ff01ffff01, 0x01ff01ff01ff01ff, 0x01ff01ff01ff0101, 0x01ff01ff01000000,
-    0x01ff01ff0101ffff, 0x01ff01ff0101ff01, 0x01ff01ff010101ff, 0x01ff01ff01010101,
-    0x01ff0100ffff0000, 0x01ff0100ffff0001, 0x01ff0100ff00ff00, 0x01ff0100ff0000ff,
-    0x01ff0100ff000001, 0x01ff0100ff010000, 0x01ff010000ffff00, 0x01ff010000ff00ff,
-    0x01ff010000ff0001, 0x01ff010000ff0100, 0x01ff01000000ffff, 0x01ff01000000ff01,
-    0x01ff010000000000, 0x01ff010000000101, 0x01ff01000001ff00, 0x01ff0100000100ff,
-    0x01ff010001ff0000, 0x01ff010001000001, 0x01ff010001000100, 0x01ff010001010000,
-    0x01ff0101ffffffff, 0x01ff0101ffffff01, 0x01ff0101ffff01ff, 0x01ff0101ffff0101,
-    0x01ff0101ff000000, 0x01ff0101ff01ffff, 0x01ff0101ff01ff01, 0x01ff0101ff0101ff,
-    0x01ff0101ff010101, 0x01ff010100ff0000, 0x01ff01010000ff00, 0x01ff0101000000ff,
-    0x01ff010100000001, 0x01ff010101ffffff, 0x01ff010101ffff01, 0x01ff010101ff01ff,
-    0x01ff010101ff0101, 0x01ff010101000000, 0x01ff01010101ffff, 0x01ff01010101ff01,
-    0x01ff0101010101ff, 0x01ff010101010101, 0x0100ffffffff0000, 0x0100ffffff00ff00,
-    0x0100ffffff000001, 0x0100ffffff0001ff, 0x0100ffffff000100, 0x0100ffffff010000,
-    0x0100ffff00ffff00, 0x0100ffff00ff0001, 0x0100ffff00ff0100, 0x0100ffff00000000,
-    0x0100ffff000001ff, 0x0100ffff00000101, 0x0100ffff00010100, 0x0100ffff00010101,
-    0x0100ffff01ff0000, 0x0100ffff0100ff00, 0x0100ffff010000ff, 0x0100ffff01000001,
-    0x0100ffff01000100, 0x0100ffff01010000, 0x0100ff00ffffff00, 0x0100ff00ffff00ff,
-    0x0100ff00ffff0001, 0x0100ff00ffff0100, 0x0100ff00ff00ffff, 0x0100ff00ff000000,
-    0x0100ff00ff0001ff, 0x0100ff00ff000101, 0x0100ff00ff01ff00, 0x0100ff00ff0100ff,
-    0x0100ff00ff010001, 0x0100ff00ff010100, 0x0100ff0000ffffff, 0x0100ff0000ff0000,
-    0x0100ff000000ffff, 0x0100ff000000ff00, 0x0100ff00000000ff, 0x0100ff0000000000,
-    0x0100ff0000000001, 0x0100ff0000000100, 0x0100ff000001ff01, 0x0100ff0000010000,
-    0x0100ff0001ff00ff, 0x0100ff0001ff0001, 0x0100ff000100ff01, 0x0100ff0001000000,
-    0x0100ff00010001ff, 0x0100ff000101ff00, 0x0100ff00010100ff, 0x0100ff0001010001,
-    0x0100ff0001010100, 0x0100ff01ffff0000, 0x0100ff01ff00ff00, 0x0100ff01ff0000ff,
-    0x0100ff01ff000100, 0x0100ff01ff010000, 0x0100ff0100ff00ff, 0x0100ff0100ff0001,
-    0x0100ff0100ff0100, 0x0100ff010000ffff, 0x0100ff010000ff01, 0x0100ff0100000000,
-    0x0100ff01000001ff, 0x0100ff0100010001, 0x0100ff0100010100, 0x0100ff0101ff0000,
-    0x0100ff01010000ff, 0x0100ff0101000001, 0x0100ff0101010100, 0x010000ffffffff00,
-    0x010000ffffff00ff, 0x010000ffffff0001, 0x010000ffff00ffff, 0x010000ffff000000,
-    0x010000ffff0001ff, 0x010000ffff010001, 0x010000ff00ffffff, 0x010000ff00ff0101,
-    0x010000ff0000ff00, 0x010000ff000000ff, 0x010000ff00000000, 0x010000ff00000001,
-    0x010000ff000001ff, 0x010000ff00000100, 0x010000ff0001ffff, 0x010000ff0001ff00,
-    0x010000ff0001ff01, 0x010000ff00010000, 0x010000ff01ff00ff, 0x010000ff01ff0001,
-    0x010000ff0100ff01, 0x010000ff010000ff, 0x010000ff01000000, 0x010000ff010001ff,
-    0x010000ff0101ff00, 0x010000ff01010100, 0x01000000ffffffff, 0x01000000ffff0000,
-    0x01000000ffff01ff, 0x01000000ffff0101, 0x01000000ff00ffff, 0x01000000ff00ff00,
-    0x01000000ff0000ff, 0x01000000ff000000, 0x01000000ff000001, 0x01000000ff000100,
-    0x01000000ff01ff00, 0x01000000ff010000, 0x01000000ff010100, 0x01000000ff010101,
-    0x0100000000ffff00, 0x0100000000ff00ff, 0x0100000000ff0000, 0x0100000000ff0001,
-    0x0100000000ff0100, 0x010000000000ffff, 0x010000000000ff00, 0x010000000000ff01,
-    0x01000000000000ff, 0x0100000000000000, 0x0100000000000001, 0x01000000000001ff,
-    0x0100000000000100, 0x0100000000000101, 0x010000000001ff00, 0x01000000000100ff,
-    0x0100000000010000, 0x0100000000010001, 0x0100000000010100, 0x0100000001ffff00,
-    0x0100000001ff0000, 0x0100000001ff01ff, 0x010000000100ff00, 0x010000000100ff01,
-    0x01000000010000ff, 0x0100000001000000, 0x0100000001000001, 0x0100000001000100,
-    0x0100000001000101, 0x010000000101ffff, 0x010000000101ff01, 0x0100000001010000,
-    0x01000000010101ff, 0x0100000001010101, 0x01000001ffffff00, 0x01000001ffff00ff,
-    0x01000001ff00ffff, 0x01000001ff000000, 0x01000001ff000100, 0x01000001ff01ffff,
-    0x01000001ff010001, 0x01000001ff010100, 0x0100000100ff0000, 0x0100000100ff01ff,
-    0x0100000100ff0100, 0x010000010000ff00, 0x010000010000ff01, 0x0100000100000000,
-    0x0100000100000001, 0x0100000100000100, 0x0100000100010000, 0x01000001000101ff,
-    0x0100000101ffff01, 0x0100000101ff00ff, 0x0100000101ff0100, 0x0100000101ff0101,
-    0x010000010100ff01, 0x01000001010000ff, 0x0100000101000000, 0x01000001010100ff,
-    0x0100000101010001, 0x0100000101010100, 0x010001ffffff0000, 0x010001ffff000001,
-    0x010001ffff000100, 0x010001ffff010000, 0x010001ff00ffff00, 0x010001ff00ff0001,
-    0x010001ff0000ffff, 0x010001ff0000ff01, 0x010001ff00000000, 0x010001ff00000001,
-    0x010001ff00000101, 0x010001ff000100ff, 0x010001ff00010000, 0x010001ff01ff0000,
-    0x010001ff0100ff00, 0x010001ff01000001, 0x010001ff01000100, 0x010001ff01010000,
-    0x01000100ffff00ff, 0x01000100ffff0001, 0x01000100ffff0100, 0x01000100ff00ffff,
-    0x01000100ff00ff01, 0x01000100ff000000, 0x01000100ff0001ff, 0x01000100ff000101,
-    0x01000100ff01ffff, 0x01000100ff01ff00, 0x01000100ff0100ff, 0x01000100ff010001,
-    0x0100010000ffffff, 0x0100010000ffff01, 0x0100010000ff0000, 0x0100010000ff01ff,
-    0x0100010000ff0101, 0x010001000000ff00, 0x01000100000000ff, 0x0100010000000000,
-    0x0100010000000001, 0x0100010000000100, 0x010001000001ff01, 0x0100010000010000,
-    0x0100010000010001, 0x0100010000010101, 0x0100010001ffff00, 0x0100010001ff00ff,
-    0x010001000100ffff, 0x010001000100ff01, 0x0100010001000000, 0x0100010001000101,
-    0x010001000101ff00, 0x0100010001010001, 0x01000101ffff0000, 0x01000101ff000000,
-    0x01000101ff010000, 0x0100010100ff00ff, 0x0100010100ff0001, 0x0100010100ff0100,
-    0x010001010000ffff, 0x0100010100000000, 0x01000101000001ff, 0x010001010001ff00,
-    0x0100010101ff0000, 0x010001010100ff00, 0x01000101010000ff, 0x0100010101000000,
-    0x0100010101000001, 0x0101ffffffffffff, 0x0101ffffffffff01, 0x0101ffffffff01ff,
-    0x0101ffffffff0101, 0x0101ffffff000000, 0x0101ffffff01ffff, 0x0101ffffff01ff01,
-    0x0101ffffff0101ff, 0x0101ffffff010101, 0x0101ffff00ff0000, 0x0101ffff0000ff00,
-    0x0101ffff000000ff, 0x0101ffff00000001, 0x0101ffff00000100, 0x0101ffff01ffffff,
-    0x0101ffff01ffff01, 0x0101ffff01ff01ff, 0x0101ffff01ff0101, 0x0101ffff01000000,
-    0x0101ffff0101ffff, 0x0101ffff0101ff01, 0x0101ffff010101ff, 0x0101ffff01010101,
-    0x0101ff00ffff0000, 0x0101ff00ffff0100, 0x0101ff00ff00ff00, 0x0101ff00ff0000ff,
-    0x0101ff00ff000001, 0x0101ff00ff000100, 0x0101ff00ff000101, 0x0101ff0000ff0001,
-    0x0101ff0000ff0100, 0x0101ff000000ff00, 0x0101ff0000000000, 0x0101ff00000001ff,
-    0x0101ff0000000101, 0x0101ff000001ff00, 0x0101ff00000100ff, 0x0101ff0001ff0000,
-    0x0101ff000100ffff, 0x0101ff000100ff01, 0x0101ff0001000001, 0x0101ff0001000100,
-    0x0101ff01ffffff01, 0x0101ff01ffff01ff, 0x0101ff01ffff0101, 0x0101ff01ff00ffff,
-    0x0101ff01ff000100, 0x0101ff01ff01ff01, 0x0101ff01ff0101ff, 0x0101ff01ff010101,
-    0x0101ff0100ff0000, 0x0101ff010000ff00, 0x0101ff0100000001, 0x0101ff0100000100,
-    0x0101ff0100010000, 0x0101ff0101ffffff, 0x0101ff0101ffff01, 0x0101ff0101ff01ff,
-    0x0101ff0101ff0101, 0x0101ff0101000000, 0x0101ff010101ffff, 0x0101ff010101ff01,
-    0x0101ff01010101ff, 0x0101ff0101010101, 0x010100ffff000100, 0x010100ffff010000,
-    0x010100ff00ffff00, 0x010100ff00ff00ff, 0x010100ff0000ffff, 0x010100ff000000ff,
-    0x010100ff00000000, 0x010100ff000001ff, 0x010100ff00000101, 0x010100ff0001ff00,
-    0x010100ff00010000, 0x010100ff00010001, 0x010100ff000101ff, 0x010100ff00010100,
-    0x010100ff01ff0000, 0x01010000ffff0001, 0x01010000ffff0100, 0x01010000ff00ffff,
-    0x01010000ff00ff01, 0x01010000ff000000, 0x01010000ff0001ff, 0x01010000ff010001,
-    0x01010000ff010100, 0x0101000000ffff01, 0x0101000000ff0000, 0x010100000000ff00,
-    0x01010000000000ff, 0x0101000000000000, 0x0101000000000001, 0x0101000000000100,
-    0x0101000000010000, 0x0101000000010101, 0x0101000001ffff00, 0x0101000001ff00ff,
-    0x0101000001ff0000, 0x0101000001ff0001, 0x0101000001ff0100, 0x010100000100ff01,
-    0x0101000001000000, 0x01010000010001ff, 0x01010001ffff0000, 0x01010001ff00ff00,
-    0x01010001ff000001, 0x01010001ff000101, 0x01010001ff01ff00, 0x01010001ff010000,
-    0x0101000100ff00ff, 0x0101000100ff0001, 0x0101000100ff0101, 0x010100010000ff01,
-    0x0101000100000000, 0x0101000100000001, 0x01010001000001ff, 0x010100010001ffff,
-    0x010100010001ff01, 0x0101000101ff0001, 0x010100010100ffff, 0x0101000101000000,
-    0x0101000101000001, 0x0101000101000100, 0x010100010101ff00, 0x01010001010100ff,
-    0x0101000101010001, 0x010101ffffffffff, 0x010101ffffffff01, 0x010101ffffff01ff,
-    0x010101ffffff0101, 0x010101ffff01ffff, 0x010101ffff01ff01, 0x010101ffff0101ff,
-    0x010101ffff010101, 0x010101ff0000ff00, 0x010101ff000000ff, 0x010101ff00000001,
-    0x010101ff00000100, 0x010101ff01ffffff, 0x010101ff01ffff01, 0x010101ff01ff01ff,
-    0x010101ff01ff0101, 0x010101ff01000000, 0x010101ff0101ffff, 0x010101ff0101ff01,
-    0x010101ff010101ff, 0x010101ff01010101, 0x01010100ffff0000, 0x01010100ff0000ff,
-    0x01010100ff000100, 0x01010100ff01ff00, 0x01010100ff010000, 0x0101010000ffff00,
-    0x010101000000ffff, 0x0101010000000000, 0x0101010000000101, 0x010101000001ff00,
-    0x0101010000010001, 0x0101010000010100, 0x010101000100ffff, 0x0101010001000001,
-    0x01010101ffffffff, 0x01010101ffffff01, 0x01010101ffff01ff, 0x01010101ffff0101,
-    0x01010101ff01ffff, 0x01010101ff01ff01, 0x01010101ff0101ff, 0x01010101ff010101,
-    0x010101010000ff00, 0x01010101000000ff, 0x0101010100000001, 0x0101010101ffffff,
-    0x0101010101ffff01, 0x0101010101ff01ff, 0x0101010101ff0101, 0x0101010101000000,
-    0x010101010101ffff, 0x010101010101ff01, 0x01010101010101ff, 0x0101010101010101,
-GGML_TABLE_END()
-#else
-GGML_TABLE_BEGIN(uint32_t, iq1s_grid_gpu, NGRID_IQ1S)
-    0x00000000, 0x00000002, 0x00000101, 0x00000200, 0x00000202, 0x00010001, 0x00010101, 0x00020000,
-    0x00020002, 0x00020200, 0x00020202, 0x01000101, 0x01010001, 0x01010100, 0x01010102, 0x01020101,
-    0x02000000, 0x02000002, 0x02000200, 0x02000202, 0x02010101, 0x02020000, 0x02020002, 0x02020200,
-    0x02020202, 0x00000110, 0x00000111, 0x00010011, 0x00010110, 0x00010112, 0x00010211, 0x00010212,
-    0x00020111, 0x01000011, 0x01000112, 0x01000211, 0x01010012, 0x01010111, 0x01010212, 0x01020011,
-    0x01020110, 0x01020112, 0x01020210, 0x02000111, 0x02010011, 0x02010110, 0x02010112, 0x02020111,
-    0x00000020, 0x00000022, 0x00000220, 0x00000222, 0x00010121, 0x00020020, 0x00020022, 0x00020220,
-    0x00020222, 0x01000121, 0x01010021, 0x01010221, 0x01020120, 0x01020221, 0x02000020, 0x02000022,
-    0x02000220, 0x02000222, 0x02010021, 0x02010121, 0x02010221, 0x02020020, 0x02020022, 0x02020220,
-    0x02020222, 0x00011001, 0x00011100, 0x00011102, 0x00021101, 0x01001001, 0x01001201, 0x01011101,
-    0x01011202, 0x01021100, 0x01021101, 0x02011001, 0x02011201, 0x02021101, 0x00001011, 0x00001110,
-    0x00001111, 0x00001112, 0x00011111, 0x00011210, 0x00011212, 0x00021211, 0x01001010, 0x01001111,
-    0x01001212, 0x01011010, 0x01011011, 0x01011110, 0x01011111, 0x01011112, 0x01011211, 0x01021010,
-    0x01021012, 0x01021111, 0x01021210, 0x01021212, 0x02001011, 0x02011011, 0x02011111, 0x02011210,
-    0x02011212, 0x02021011, 0x02021110, 0x02021111, 0x02021112, 0x02021211, 0x00011120, 0x00011221,
-    0x01001021, 0x01001120, 0x01011020, 0x01011022, 0x01011121, 0x01011220, 0x01021020, 0x01021021,
-    0x01021122, 0x01021221, 0x02001121, 0x02011021, 0x02011120, 0x02011221, 0x00002000, 0x00002002,
-    0x00002200, 0x00002202, 0x00012101, 0x00022000, 0x00022002, 0x00022200, 0x00022202, 0x01002101,
-    0x01012001, 0x01012102, 0x01022101, 0x02002000, 0x02002002, 0x02002200, 0x02002202, 0x02012101,
-    0x02022000, 0x02022002, 0x02022200, 0x02022202, 0x00002111, 0x00012011, 0x00012110, 0x00012211,
-    0x00022110, 0x00022111, 0x01002011, 0x01012010, 0x01012011, 0x01012111, 0x01022011, 0x01022110,
-    0x01022211, 0x02012011, 0x02012110, 0x02012112, 0x02012211, 0x02022111, 0x00002020, 0x00002022,
-    0x00002220, 0x00002222, 0x00012121, 0x00022020, 0x00022022, 0x00022220, 0x00022222, 0x01002121,
-    0x01012021, 0x01012221, 0x01022021, 0x01022121, 0x02002020, 0x02002022, 0x02002121, 0x02002220,
-    0x02002222, 0x02012121, 0x02022020, 0x02022022, 0x02022220, 0x02022222, 0x00110000, 0x00110001,
-    0x00110100, 0x00110201, 0x00120100, 0x00120101, 0x01100001, 0x01100100, 0x01110000, 0x01110101,
-    0x01110200, 0x01120001, 0x01120100, 0x01120101, 0x01120201, 0x02110001, 0x02110100, 0x02110102,
-    0x02120001, 0x02120101, 0x00100011, 0x00100110, 0x00100112, 0x00100211, 0x00110010, 0x00110012,
-    0x00110111, 0x00110210, 0x00120011, 0x00120110, 0x00120211, 0x01100111, 0x01100212, 0x01110010,
-    0x01110011, 0x01110012, 0x01110110, 0x01110111, 0x01110112, 0x01110211, 0x01120010, 0x01120111,
-    0x02100110, 0x02110012, 0x02110111, 0x02120011, 0x02120110, 0x00110021, 0x00110120, 0x00110122,
-    0x00120121, 0x01100020, 0x01100122, 0x01100221, 0x01110022, 0x01110121, 0x01110220, 0x01110222,
-    0x01120120, 0x01120122, 0x02100121, 0x02110021, 0x02110120, 0x02110122, 0x02120121, 0x00101001,
-    0x00101102, 0x00101201, 0x00111100, 0x00111101, 0x00111200, 0x00111201, 0x00121001, 0x00121102,
-    0x01101001, 0x01101101, 0x01101102, 0x01101200, 0x01101202, 0x01111001, 0x01111100, 0x01111101,
-    0x01111102, 0x01111201, 0x01121002, 0x01121101, 0x01121200, 0x02101100, 0x02101201, 0x02111000,
-    0x02111100, 0x02111101, 0x02111200, 0x02111201, 0x02111202, 0x02121001, 0x02121100, 0x02121101,
-    0x02121201, 0x00101012, 0x00101111, 0x00101212, 0x00111011, 0x00111110, 0x00111111, 0x00111112,
-    0x00111211, 0x00121010, 0x00121012, 0x00121111, 0x00121210, 0x00121212, 0x01101011, 0x01101110,
-    0x01101111, 0x01101112, 0x01111011, 0x01111012, 0x01111110, 0x01111111, 0x01111112, 0x01111211,
-    0x01111212, 0x01121011, 0x01121110, 0x01121111, 0x01121112, 0x01121211, 0x02101010, 0x02101012,
-    0x02101110, 0x02101111, 0x02101210, 0x02101212, 0x02111010, 0x02111011, 0x02111110, 0x02111111,
-    0x02111112, 0x02111211, 0x02111212, 0x02121010, 0x02121012, 0x02121111, 0x00101021, 0x00101120,
-    0x00101121, 0x00101122, 0x00111121, 0x00111122, 0x00111220, 0x00111222, 0x00121021, 0x00121122,
-    0x01101020, 0x01101022, 0x01101120, 0x01101121, 0x01101220, 0x01101222, 0x01111021, 0x01111121,
-    0x01111122, 0x01111220, 0x01111221, 0x01121021, 0x01121120, 0x01121121, 0x01121220, 0x01121221,
-    0x01121222, 0x02101122, 0x02101222, 0x02111022, 0x02111121, 0x02121120, 0x02121221, 0x00112001,
-    0x00112102, 0x00122101, 0x01102001, 0x01102100, 0x01102102, 0x01102201, 0x01112000, 0x01112101,
-    0x01112200, 0x01112202, 0x01122000, 0x01122001, 0x01122100, 0x01122102, 0x01122201, 0x02102101,
-    0x02112001, 0x02112100, 0x02122101, 0x00112010, 0x00112012, 0x00112111, 0x00112212, 0x00122011,
-    0x00122111, 0x01102012, 0x01102110, 0x01102111, 0x01102210, 0x01112011, 0x01112110, 0x01112111,
-    0x01112112, 0x01112211, 0x01112212, 0x01122010, 0x01122111, 0x01122212, 0x02102211, 0x02112011,
-    0x02112012, 0x02112111, 0x02112210, 0x02122011, 0x02122112, 0x02122211, 0x00102221, 0x00112122,
-    0x00122120, 0x00122122, 0x01102120, 0x01102122, 0x01102221, 0x01112020, 0x01112022, 0x01112121,
-    0x01112220, 0x01122021, 0x01122122, 0x01122221, 0x02102121, 0x02112021, 0x02112122, 0x02112222,
-    0x00200000, 0x00200002, 0x00200200, 0x00200202, 0x00210101, 0x00220000, 0x00220002, 0x00220101,
-    0x00220200, 0x00220202, 0x01200101, 0x01210001, 0x01210201, 0x01220001, 0x01220101, 0x02200000,
-    0x02200002, 0x02200200, 0x02200202, 0x02210101, 0x02220000, 0x02220002, 0x02220101, 0x02220200,
-    0x02220202, 0x00200111, 0x00210011, 0x00210110, 0x00210211, 0x00220111, 0x01200012, 0x01200110,
-    0x01200211, 0x01210111, 0x01210210, 0x01210212, 0x01220011, 0x01220110, 0x01220111, 0x01220112,
-    0x02200111, 0x02210010, 0x02210112, 0x02210211, 0x02220111, 0x00200021, 0x00200220, 0x00200222,
-    0x00210021, 0x00210121, 0x00220020, 0x00220022, 0x00220220, 0x00220222, 0x01200121, 0x01210021,
-    0x01210122, 0x01210221, 0x01220121, 0x02200021, 0x02200220, 0x02200222, 0x02210021, 0x02210121,
-    0x02220020, 0x02220022, 0x02220220, 0x02220222, 0x00201101, 0x00211100, 0x00211102, 0x00211201,
-    0x00221101, 0x01201100, 0x01201101, 0x01201102, 0x01201201, 0x01211002, 0x01211101, 0x01211200,
-    0x01211202, 0x01221102, 0x02201101, 0x02211001, 0x02211100, 0x02211201, 0x02221001, 0x02221101,
-    0x00201211, 0x00211111, 0x00221011, 0x00221211, 0x01201010, 0x01201111, 0x01201210, 0x01211011,
-    0x01211110, 0x01211111, 0x01211211, 0x01221012, 0x01221111, 0x01221210, 0x02201211, 0x02211010,
-    0x02211110, 0x02211111, 0x02211210, 0x02211212, 0x02221011, 0x02221110, 0x02221112, 0x02221211,
-    0x00201121, 0x00211020, 0x00211022, 0x00211221, 0x00221121, 0x01201021, 0x01201221, 0x01211121,
-    0x01221020, 0x01221021, 0x01221221, 0x02201120, 0x02201122, 0x02211020, 0x02211222, 0x00202000,
-    0x00202002, 0x00202200, 0x00202202, 0x00212101, 0x00222000, 0x00222002, 0x00222200, 0x00222202,
-    0x01202101, 0x01212001, 0x01212100, 0x01222101, 0x02202000, 0x02202002, 0x02202200, 0x02202202,
-    0x02222000, 0x02222002, 0x02222200, 0x02222202, 0x00202211, 0x00212011, 0x00212110, 0x00212211,
-    0x00222111, 0x01202112, 0x01202211, 0x01212012, 0x01212111, 0x01222011, 0x01222110, 0x01222112,
-    0x01222211, 0x02202111, 0x02212010, 0x02212112, 0x02212211, 0x02222110, 0x02222111, 0x00202020,
-    0x00202022, 0x00202220, 0x00202222, 0x00222020, 0x00222022, 0x00222220, 0x00222222, 0x01202121,
-    0x01212021, 0x01212122, 0x01212221, 0x01222121, 0x02202020, 0x02202022, 0x02202220, 0x02202222,
-    0x02212121, 0x02222020, 0x02222022, 0x02222220, 0x02222222, 0x10000101, 0x10010001, 0x10010102,
-    0x10020101, 0x11000201, 0x11010002, 0x11010101, 0x11010200, 0x11010202, 0x11020001, 0x11020100,
-    0x11020102, 0x12010100, 0x12010201, 0x12020001, 0x12020102, 0x10000010, 0x10000011, 0x10000110,
-    0x10000112, 0x10000211, 0x10010012, 0x10010111, 0x10010112, 0x10010210, 0x10010212, 0x10020011,
-    0x10020112, 0x10020211, 0x11000111, 0x11000210, 0x11000212, 0x11010011, 0x11010110, 0x11010111,
-    0x11010112, 0x11010211, 0x11010212, 0x11020111, 0x11020210, 0x11020212, 0x12000011, 0x12000110,
-    0x12000112, 0x12010010, 0x12010012, 0x12010111, 0x12020010, 0x12020011, 0x12020012, 0x10000121,
-    0x10010021, 0x10010120, 0x10010122, 0x10020121, 0x11000021, 0x11010022, 0x11010121, 0x11010222,
-    0x11020120, 0x11020221, 0x12000221, 0x12010120, 0x12020121, 0x10001001, 0x10011101, 0x10011201,
-    0x10021201, 0x11001101, 0x11001200, 0x11001202, 0x11011001, 0x11011100, 0x11011101, 0x11011102,
-    0x11021001, 0x11021002, 0x11021101, 0x11021200, 0x11021202, 0x12001001, 0x12001102, 0x12001201,
-    0x12011000, 0x12011002, 0x12011101, 0x12021000, 0x12021001, 0x12021201, 0x10001011, 0x10001012,
-    0x10001111, 0x10001212, 0x10011011, 0x10011110, 0x10011111, 0x10011112, 0x10011211, 0x10021010,
-    0x10021111, 0x10021212, 0x11001011, 0x11001110, 0x11001111, 0x11001112, 0x11001211, 0x11011010,
-    0x11011011, 0x11011110, 0x11011111, 0x11011112, 0x11011210, 0x11011211, 0x11021011, 0x11021110,
-    0x11021111, 0x11021112, 0x11021211, 0x12001012, 0x12001110, 0x12001111, 0x12001210, 0x12011011,
-    0x12011110, 0x12011111, 0x12011112, 0x12011211, 0x12011212, 0x12021111, 0x12021210, 0x12021212,
-    0x10001021, 0x10001121, 0x10001221, 0x10011120, 0x10011121, 0x10011220, 0x10011222, 0x10021021,
-    0x10021120, 0x10021221, 0x11001020, 0x11001022, 0x11001121, 0x11001220, 0x11011020, 0x11011021,
-    0x11011022, 0x11011121, 0x11011122, 0x11011221, 0x11021022, 0x11021121, 0x11021220, 0x12001021,
-    0x12001121, 0x12001222, 0x12011120, 0x12011121, 0x12021021, 0x12021120, 0x12021122, 0x10002101,
-    0x10012001, 0x10012101, 0x10012202, 0x10022101, 0x11002002, 0x11002201, 0x11012000, 0x11012101,
-    0x11012200, 0x11022001, 0x11022100, 0x11022102, 0x11022201, 0x12002101, 0x12012001, 0x12012100,
-    0x12012102, 0x12012201, 0x12022101, 0x10002011, 0x10002111, 0x10002112, 0x10002212, 0x10012010,
-    0x10012110, 0x10012111, 0x10012210, 0x10022011, 0x10022110, 0x10022112, 0x11002010, 0x11002111,
-    0x11002212, 0x11012011, 0x11012012, 0x11012110, 0x11012111, 0x11012112, 0x11012211, 0x11022010,
-    0x11022012, 0x11022111, 0x11022112, 0x11022212, 0x12002112, 0x12002211, 0x12012012, 0x12012111,
-    0x12012112, 0x12012210, 0x12022011, 0x12022110, 0x12022112, 0x12022211, 0x10012122, 0x11002120,
-    0x11002122, 0x11002221, 0x11012121, 0x11012220, 0x11012222, 0x11022120, 0x11022221, 0x12012120,
-    0x12022121, 0x10100001, 0x10100100, 0x10100101, 0x10100102, 0x10100201, 0x10110002, 0x10110101,
-    0x10110202, 0x10120001, 0x10120100, 0x10120201, 0x11100000, 0x11100101, 0x11100200, 0x11110001,
-    0x11110100, 0x11110101, 0x11110102, 0x11110201, 0x11120101, 0x11120200, 0x12100102, 0x12100201,
-    0x12110101, 0x12110200, 0x12120000, 0x12120001, 0x12120102, 0x12120201, 0x10100111, 0x10100210,
-    0x10100211, 0x10100212, 0x10110011, 0x10110110, 0x10110111, 0x10110112, 0x10110210, 0x10110211,
-    0x10120010, 0x10120111, 0x10120112, 0x10120210, 0x10120212, 0x11100011, 0x11100110, 0x11100111,
-    0x11100112, 0x11100211, 0x11110010, 0x11110011, 0x11110012, 0x11110110, 0x11110111, 0x11110112,
-    0x11110210, 0x11110211, 0x11110212, 0x11120011, 0x11120110, 0x11120111, 0x11120112, 0x11120211,
-    0x12100012, 0x12100111, 0x12110011, 0x12110110, 0x12110111, 0x12110112, 0x12110211, 0x12120010,
-    0x12120111, 0x12120212, 0x10100021, 0x10100122, 0x10110022, 0x10110121, 0x10110222, 0x10120021,
-    0x10120120, 0x11100022, 0x11100121, 0x11100222, 0x11110021, 0x11110120, 0x11110121, 0x11110122,
-    0x11110221, 0x11120022, 0x11120121, 0x12100121, 0x12110020, 0x12110022, 0x12110121, 0x12110221,
-    0x12110222, 0x12120120, 0x10101100, 0x10101101, 0x10111001, 0x10111100, 0x10111101, 0x10111102,
-    0x10111200, 0x10111201, 0x10121001, 0x10121101, 0x10121200, 0x10121202, 0x11101001, 0x11101100,
-    0x11101101, 0x11101102, 0x11101201, 0x11101202, 0x11111000, 0x11111001, 0x11111100, 0x11111101,
-    0x11111102, 0x11111200, 0x11111201, 0x11111202, 0x11121001, 0x11121002, 0x11121100, 0x11121101,
-    0x11121102, 0x11121201, 0x12101000, 0x12101200, 0x12101202, 0x12111001, 0x12111100, 0x12111101,
-    0x12111102, 0x12111201, 0x12121001, 0x12121100, 0x12121101, 0x12121202, 0x10101011, 0x10101012,
-    0x10101110, 0x10101111, 0x10101112, 0x10101211, 0x10111010, 0x10111011, 0x10111012, 0x10111110,
-    0x10111111, 0x10111112, 0x10111211, 0x10111212, 0x10121011, 0x10121110, 0x10121111, 0x10121112,
-    0x10121211, 0x11101010, 0x11101011, 0x11101012, 0x11101110, 0x11101111, 0x11101112, 0x11101210,
-    0x11101211, 0x11111010, 0x11111011, 0x11111012, 0x11111110, 0x11111111, 0x11111112, 0x11111210,
-    0x11111211, 0x11111212, 0x11121010, 0x11121011, 0x11121110, 0x11121111, 0x11121112, 0x11121210,
-    0x11121211, 0x11121212, 0x12101011, 0x12101110, 0x12101111, 0x12101211, 0x12101212, 0x12111010,
-    0x12111011, 0x12111110, 0x12111111, 0x12111112, 0x12111210, 0x12111211, 0x12121011, 0x12121110,
-    0x12121111, 0x12121112, 0x12121211, 0x10101020, 0x10101021, 0x10101022, 0x10101120, 0x10101122,
-    0x10101220, 0x10101221, 0x10111021, 0x10111120, 0x10111121, 0x10111220, 0x10111221, 0x10121020,
-    0x10121021, 0x10121022, 0x10121120, 0x10121121, 0x10121122, 0x10121220, 0x10121221, 0x11101021,
-    0x11101121, 0x11101122, 0x11101220, 0x11101221, 0x11101222, 0x11111020, 0x11111021, 0x11111022,
-    0x11111120, 0x11111121, 0x11111122, 0x11111220, 0x11111221, 0x11111222, 0x11121021, 0x11121120,
-    0x11121121, 0x11121221, 0x12101022, 0x12101121, 0x12101122, 0x12101220, 0x12101221, 0x12101222,
-    0x12111021, 0x12111121, 0x12111222, 0x12121022, 0x12121121, 0x12121122, 0x12121220, 0x12121221,
-    0x10102100, 0x10102101, 0x10102102, 0x10102201, 0x10112000, 0x10112101, 0x10112200, 0x10122001,
-    0x10122202, 0x11102101, 0x11102200, 0x11102202, 0x11112001, 0x11112100, 0x11112101, 0x11112102,
-    0x11112200, 0x11112201, 0x11122000, 0x11122002, 0x11122100, 0x11122101, 0x12102002, 0x12102201,
-    0x12112000, 0x12112002, 0x12112101, 0x12112200, 0x12122001, 0x12122201, 0x10102011, 0x10102012,
-    0x10102111, 0x10102212, 0x10112011, 0x10112110, 0x10112111, 0x10112112, 0x10112211, 0x10122111,
-    0x11102011, 0x11102110, 0x11102111, 0x11102112, 0x11102211, 0x11112010, 0x11112011, 0x11112012,
-    0x11112110, 0x11112111, 0x11112112, 0x11112210, 0x11112211, 0x11112212, 0x11122011, 0x11122110,
-    0x11122111, 0x11122112, 0x11122211, 0x12102011, 0x12102111, 0x12102211, 0x12112011, 0x12112110,
-    0x12112111, 0x12112112, 0x12112210, 0x12112211, 0x12122111, 0x10102120, 0x10102220, 0x10112121,
-    0x10112222, 0x10122020, 0x10122121, 0x10122122, 0x10122221, 0x11102121, 0x11102220, 0x11102221,
-    0x11112021, 0x11112121, 0x11112122, 0x11112220, 0x11112221, 0x11122022, 0x11122121, 0x11122220,
-    0x11122222, 0x12102021, 0x12102222, 0x12112022, 0x12112121, 0x12112122, 0x12112220, 0x12112222,
-    0x12122021, 0x10200101, 0x10210100, 0x10210102, 0x10210201, 0x10220101, 0x11200100, 0x11210000,
-    0x11210101, 0x11210102, 0x11210200, 0x11210202, 0x11220001, 0x11220100, 0x11220102, 0x11220201,
-    0x12200001, 0x12210102, 0x12220101, 0x10200011, 0x10200110, 0x10200112, 0x10200211, 0x10210012,
-    0x10210111, 0x10220011, 0x10220012, 0x10220112, 0x10220211, 0x11200111, 0x11200211, 0x11210011,
-    0x11210111, 0x11210112, 0x11210211, 0x11220111, 0x11220112, 0x11220212, 0x12200110, 0x12200212,
-    0x12210012, 0x12210111, 0x12220011, 0x12220112, 0x12220211, 0x10210021, 0x10210122, 0x10210221,
-    0x11200020, 0x11200021, 0x11200122, 0x11210121, 0x11210122, 0x11210220, 0x11220020, 0x12200121,
-    0x12210021, 0x12210122, 0x12220121, 0x10211001, 0x10211002, 0x10211101, 0x10211102, 0x10211202,
-    0x10221001, 0x10221102, 0x10221201, 0x11201000, 0x11201002, 0x11201101, 0x11201200, 0x11201202,
-    0x11211001, 0x11211100, 0x11211101, 0x11211102, 0x11211201, 0x11211202, 0x11221000, 0x11221002,
-    0x11221101, 0x12201100, 0x12201101, 0x12201201, 0x12211000, 0x12211002, 0x12211100, 0x12211101,
-    0x12211102, 0x12211200, 0x12211202, 0x12221001, 0x12221100, 0x12221201, 0x10201111, 0x10201210,
-    0x10201212, 0x10211011, 0x10211111, 0x10211112, 0x10211211, 0x11201110, 0x11201111, 0x11201112,
-    0x11201211, 0x11211010, 0x11211011, 0x11211110, 0x11211111, 0x11211112, 0x11211211, 0x11221011,
-    0x11221110, 0x11221111, 0x11221112, 0x11221211, 0x12201112, 0x12201211, 0x12201212, 0x12211011,
-    0x12211111, 0x12211112, 0x12211211, 0x12211212, 0x12221012, 0x12221111, 0x12221112, 0x12221210,
-    0x10201022, 0x10201221, 0x10211121, 0x10221020, 0x10221122, 0x10221220, 0x10221221, 0x11201020,
-    0x11201121, 0x11201220, 0x11201222, 0x11211021, 0x11211120, 0x11211121, 0x11211122, 0x11211220,
-    0x11211222, 0x11221020, 0x11221121, 0x11221220, 0x12201020, 0x12201022, 0x12201121, 0x12201222,
-    0x12211120, 0x12211122, 0x12211220, 0x12211221, 0x12221020, 0x12221120, 0x12221122, 0x12221222,
-    0x10212102, 0x10212201, 0x10222101, 0x11202001, 0x11212002, 0x11212101, 0x11212202, 0x11222001,
-    0x11222201, 0x12202101, 0x12212001, 0x12212200, 0x12222102, 0x10202011, 0x10202110, 0x10212010,
-    0x10212111, 0x10222011, 0x10222110, 0x10222112, 0x10222211, 0x11202010, 0x11202011, 0x11202111,
-    0x11202112, 0x11202210, 0x11212011, 0x11212110, 0x11212111, 0x11212112, 0x11212211, 0x11222010,
-    0x11222111, 0x11222212, 0x12202012, 0x12202110, 0x12202212, 0x12212111, 0x12222011, 0x12222110,
-    0x12222111, 0x12222211, 0x10212021, 0x10212122, 0x10212220, 0x11202021, 0x11202120, 0x11202221,
-    0x11212020, 0x11212121, 0x11212220, 0x11212222, 0x11222120, 0x11222121, 0x11222221, 0x12202122,
-    0x12212120, 0x12212220, 0x12212222, 0x12222122, 0x20000000, 0x20000002, 0x20000200, 0x20000202,
-    0x20020000, 0x20020002, 0x20020200, 0x20020202, 0x21000101, 0x21010000, 0x21010001, 0x21010100,
-    0x21010102, 0x21010201, 0x21020101, 0x22000000, 0x22000002, 0x22000200, 0x22000202, 0x22010101,
-    0x22020000, 0x22020002, 0x22020200, 0x22020202, 0x20000111, 0x20010011, 0x20010110, 0x20010112,
-    0x20010211, 0x20020111, 0x21000011, 0x21000110, 0x21000211, 0x21010010, 0x21010012, 0x21010111,
-    0x21010112, 0x21010210, 0x21010211, 0x21020110, 0x21020112, 0x21020211, 0x22000111, 0x22000211,
-    0x22010110, 0x22010112, 0x22010211, 0x22020111, 0x20000020, 0x20000022, 0x20000220, 0x20000222,
-    0x20010121, 0x20020020, 0x20020022, 0x20020220, 0x20020222, 0x21010021, 0x21010120, 0x21010221,
-    0x21020121, 0x22000020, 0x22000022, 0x22000220, 0x22000222, 0x22010121, 0x22020020, 0x22020022,
-    0x22020220, 0x22020222, 0x20011100, 0x20011201, 0x21001001, 0x21001100, 0x21011001, 0x21011101,
-    0x21011202, 0x21021001, 0x21021100, 0x21021201, 0x22011100, 0x22011201, 0x20001011, 0x20001211,
-    0x20011012, 0x20011111, 0x20011212, 0x20021112, 0x20021211, 0x21001010, 0x21001011, 0x21001111,
-    0x21001210, 0x21011011, 0x21011110, 0x21011111, 0x21011112, 0x21011211, 0x21011212, 0x21021111,
-    0x21021112, 0x21021210, 0x21021212, 0x22001011, 0x22001110, 0x22001112, 0x22001211, 0x22011010,
-    0x22011012, 0x22011111, 0x22011210, 0x22021112, 0x20011021, 0x20011122, 0x20011221, 0x20021121,
-    0x21001021, 0x21001120, 0x21001221, 0x21001222, 0x21011020, 0x21011121, 0x21011221, 0x21011222,
-    0x21021021, 0x21021122, 0x21021222, 0x22001121, 0x22011021, 0x22011222, 0x22021120, 0x20002000,
-    0x20002002, 0x20002200, 0x20002202, 0x20012101, 0x20022000, 0x20022002, 0x20022200, 0x20022202,
-    0x21002001, 0x21002101, 0x21012001, 0x21012100, 0x21012201, 0x21022101, 0x21022201, 0x22002000,
-    0x22002002, 0x22002200, 0x22002202, 0x22012101, 0x22022000, 0x22022002, 0x22022200, 0x22022202,
-    0x20002111, 0x20002112, 0x20012011, 0x20012110, 0x20012112, 0x20022111, 0x21002011, 0x21002110,
-    0x21002112, 0x21002211, 0x21012010, 0x21012012, 0x21012111, 0x21012212, 0x21022011, 0x21022110,
-    0x22002111, 0x22012112, 0x22012211, 0x22022111, 0x20002020, 0x20002022, 0x20002220, 0x20002222,
-    0x20012121, 0x20022020, 0x20022022, 0x20022220, 0x20022222, 0x21002121, 0x21012021, 0x21012120,
-    0x21012122, 0x22002020, 0x22002022, 0x22002220, 0x22002222, 0x22012121, 0x22022020, 0x22022022,
-    0x22022220, 0x22022222, 0x20100101, 0x20110001, 0x20110102, 0x20110200, 0x20110201, 0x20120101,
-    0x21100001, 0x21100102, 0x21100201, 0x21110101, 0x21110200, 0x21110202, 0x21120201, 0x21120202,
-    0x22100101, 0x22110001, 0x22110100, 0x22110102, 0x22110201, 0x22120101, 0x20100011, 0x20100110,
-    0x20100112, 0x20100211, 0x20110010, 0x20110111, 0x20110210, 0x20110212, 0x20120011, 0x20120110,
-    0x20120112, 0x20120211, 0x21100010, 0x21100111, 0x21110010, 0x21110011, 0x21110110, 0x21110111,
-    0x21110112, 0x21110211, 0x21120012, 0x21120111, 0x22100110, 0x22100112, 0x22110012, 0x22110111,
-    0x22110210, 0x22120011, 0x22120110, 0x22120112, 0x22120211, 0x20100121, 0x20110021, 0x20110120,
-    0x20110221, 0x20120121, 0x21100120, 0x21100122, 0x21100221, 0x21110020, 0x21110022, 0x21110121,
-    0x21110220, 0x21120122, 0x21120221, 0x22100121, 0x22110120, 0x22110122, 0x22120221, 0x20101001,
-    0x20101100, 0x20101102, 0x20111000, 0x20111101, 0x20111200, 0x20121102, 0x21101000, 0x21101202,
-    0x21111001, 0x21111100, 0x21111101, 0x21111102, 0x21111200, 0x21111201, 0x21121000, 0x21121001,
-    0x21121002, 0x21121101, 0x22101100, 0x22101102, 0x22111002, 0x22111100, 0x22111101, 0x22111200,
-    0x22121001, 0x22121201, 0x20101010, 0x20101111, 0x20101210, 0x20101212, 0x20111010, 0x20111011,
-    0x20111110, 0x20111111, 0x20111112, 0x20111211, 0x20121011, 0x20121111, 0x20121211, 0x20121212,
-    0x21101011, 0x21101110, 0x21101111, 0x21101112, 0x21101211, 0x21111010, 0x21111011, 0x21111012,
-    0x21111110, 0x21111111, 0x21111112, 0x21111210, 0x21111211, 0x21111212, 0x21121011, 0x21121110,
-    0x21121111, 0x21121112, 0x21121211, 0x22101011, 0x22101111, 0x22101210, 0x22111011, 0x22111012,
-    0x22111110, 0x22111111, 0x22111112, 0x22111211, 0x22111212, 0x22121010, 0x22121012, 0x22121111,
-    0x22121210, 0x22121212, 0x20101021, 0x20101120, 0x20111020, 0x20111121, 0x20111221, 0x20121020,
-    0x20121122, 0x20121221, 0x21101121, 0x21101220, 0x21101221, 0x21111021, 0x21111022, 0x21111121,
-    0x21111122, 0x21111221, 0x21121121, 0x21121220, 0x22101022, 0x22101120, 0x22101221, 0x22101222,
-    0x22111022, 0x22111120, 0x22111121, 0x22121120, 0x22121122, 0x22121221, 0x20102101, 0x20112102,
-    0x20112201, 0x20122101, 0x21102001, 0x21102102, 0x21112000, 0x21112002, 0x21112101, 0x21112102,
-    0x21112202, 0x21122100, 0x21122101, 0x22102101, 0x22112001, 0x22112102, 0x22112201, 0x22122101,
-    0x20102110, 0x20102112, 0x20102211, 0x20112010, 0x20112012, 0x20112111, 0x20112210, 0x20112212,
-    0x20122010, 0x20122011, 0x20122110, 0x20122112, 0x21102010, 0x21102012, 0x21102111, 0x21102210,
-    0x21102212, 0x21112011, 0x21112110, 0x21112111, 0x21112112, 0x21112211, 0x21122012, 0x21122111,
-    0x21122112, 0x21122212, 0x22102011, 0x22102110, 0x22112010, 0x22112012, 0x22112111, 0x22112212,
-    0x22122011, 0x22122112, 0x20102121, 0x20112121, 0x20122121, 0x21102120, 0x21102122, 0x21102221,
-    0x21112020, 0x21112121, 0x21112220, 0x21122021, 0x22102121, 0x22112021, 0x22112120, 0x22112121,
-    0x22112122, 0x20200000, 0x20200002, 0x20200200, 0x20200202, 0x20210101, 0x20220000, 0x20220002,
-    0x20220200, 0x20220202, 0x21200101, 0x21210001, 0x21210100, 0x21210102, 0x21210201, 0x22200000,
-    0x22200002, 0x22200200, 0x22200202, 0x22210101, 0x22220000, 0x22220002, 0x22220200, 0x22220202,
-    0x20200111, 0x20200211, 0x20210011, 0x20210110, 0x20210112, 0x20210211, 0x20210212, 0x21200112,
-    0x21200211, 0x21210011, 0x21210111, 0x21210210, 0x21210212, 0x21220011, 0x21220110, 0x22200111,
-    0x22210010, 0x22210012, 0x22210112, 0x22210211, 0x20200022, 0x20200220, 0x20200222, 0x20210020,
-    0x20210221, 0x20220022, 0x20220220, 0x20220222, 0x21200121, 0x21210021, 0x21210122, 0x21210221,
-    0x21220121, 0x22200020, 0x22200022, 0x22200220, 0x22200222, 0x22210121, 0x22220020, 0x22220022,
-    0x22220220, 0x22220222, 0x20211201, 0x20221101, 0x21201001, 0x21201100, 0x21211000, 0x21211100,
-    0x21211101, 0x21211200, 0x21211202, 0x21221001, 0x21221101, 0x21221102, 0x21221200, 0x21221201,
-    0x22201101, 0x20201112, 0x20201211, 0x20211010, 0x20211012, 0x20211111, 0x20211210, 0x20221112,
-    0x20221211, 0x21201012, 0x21201111, 0x21211011, 0x21211110, 0x21211111, 0x21211112, 0x21211211,
-    0x21221111, 0x21221212, 0x22201011, 0x22201110, 0x22201111, 0x22201112, 0x22201211, 0x22211012,
-    0x22211111, 0x22211210, 0x20201121, 0x20211021, 0x20211122, 0x20211222, 0x20221021, 0x20221121,
-    0x21201120, 0x21201122, 0x21201222, 0x21211022, 0x21211121, 0x21211122, 0x21211220, 0x21221020,
-    0x21221022, 0x22201122, 0x22211020, 0x22211121, 0x22211122, 0x22211221, 0x22221021, 0x22221120,
-    0x22221122, 0x20202000, 0x20202002, 0x20202200, 0x20202202, 0x20222000, 0x20222002, 0x20222200,
-    0x20222202, 0x21212001, 0x21212100, 0x21212102, 0x21212201, 0x22202000, 0x22202002, 0x22202200,
-    0x22202202, 0x22212101, 0x22222000, 0x22222002, 0x22222200, 0x22222202, 0x20202111, 0x20212110,
-    0x20212211, 0x20222011, 0x20222111, 0x21202011, 0x21212010, 0x21212111, 0x21212212, 0x21222011,
-    0x21222112, 0x21222211, 0x22212010, 0x22212112, 0x20202020, 0x20202022, 0x20202220, 0x20202222,
-    0x20222020, 0x20222022, 0x20222220, 0x20222222, 0x21212021, 0x21212120, 0x21212122, 0x22202020,
-    0x22202022, 0x22202220, 0x22202222, 0x22212121, 0x22222020, 0x22222022, 0x22222220, 0x22222222,
-GGML_TABLE_END()
-#endif
-
-#endif // GGML_COMMON_IMPL
-#endif // GGML_COMMON_IMPL
diff --git a/ggml-cuda.cu b/ggml-cuda.cu
deleted file mode 100644 (file)
index 593fa4c..0000000
+++ /dev/null
@@ -1,3069 +0,0 @@
-#include "ggml-cuda.h"
-#include "ggml.h"
-#include "ggml-backend-impl.h"
-
-#include "ggml-cuda/common.cuh"
-#include "ggml-cuda/acc.cuh"
-#include "ggml-cuda/arange.cuh"
-#include "ggml-cuda/argsort.cuh"
-#include "ggml-cuda/binbcast.cuh"
-#include "ggml-cuda/clamp.cuh"
-#include "ggml-cuda/concat.cuh"
-#include "ggml-cuda/convert.cuh"
-#include "ggml-cuda/cpy.cuh"
-#include "ggml-cuda/diagmask.cuh"
-#include "ggml-cuda/dmmv.cuh"
-#include "ggml-cuda/fattn.cuh"
-#include "ggml-cuda/getrows.cuh"
-#include "ggml-cuda/im2col.cuh"
-#include "ggml-cuda/mmq.cuh"
-#include "ggml-cuda/mmvq.cuh"
-#include "ggml-cuda/norm.cuh"
-#include "ggml-cuda/pad.cuh"
-#include "ggml-cuda/pool2d.cuh"
-#include "ggml-cuda/quantize.cuh"
-#include "ggml-cuda/rope.cuh"
-#include "ggml-cuda/scale.cuh"
-#include "ggml-cuda/softmax.cuh"
-#include "ggml-cuda/sumrows.cuh"
-#include "ggml-cuda/tsembd.cuh"
-#include "ggml-cuda/unary.cuh"
-#include "ggml-cuda/upscale.cuh"
-
-#include <algorithm>
-#include <array>
-#include <atomic>
-#include <cinttypes>
-#include <cstddef>
-#include <cstdint>
-#include <float.h>
-#include <limits>
-#include <map>
-#include <memory>
-#include <mutex>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string>
-#include <vector>
-
-static_assert(sizeof(half) == sizeof(ggml_fp16_t), "wrong fp16 size");
-
-static void ggml_cuda_default_log_callback(enum ggml_log_level level, const char * msg, void * user_data) {
-    GGML_UNUSED(level);
-    GGML_UNUSED(user_data);
-    fprintf(stderr, "%s", msg);
-}
-
-ggml_log_callback ggml_cuda_log_callback = ggml_cuda_default_log_callback;
-void * ggml_cuda_log_user_data = NULL;
-
-GGML_API void ggml_backend_cuda_log_set_callback(ggml_log_callback log_callback, void * user_data) {
-    ggml_cuda_log_callback = log_callback;
-    ggml_cuda_log_user_data = user_data;
-}
-
-#define GGML_CUDA_LOG_INFO(...) ggml_cuda_log(GGML_LOG_LEVEL_INFO, __VA_ARGS__)
-#define GGML_CUDA_LOG_WARN(...) ggml_cuda_log(GGML_LOG_LEVEL_WARN, __VA_ARGS__)
-#define GGML_CUDA_LOG_ERROR(...) ggml_cuda_log(GGML_LOG_LEVEL_ERROR, __VA_ARGS__)
-
-GGML_ATTRIBUTE_FORMAT(2, 3)
-static void ggml_cuda_log(enum ggml_log_level level, const char * format, ...) {
-    if (ggml_cuda_log_callback != NULL) {
-        va_list args;
-        va_start(args, format);
-        char buffer[128];
-        int len = vsnprintf(buffer, 128, format, args);
-        if (len < 128) {
-            ggml_cuda_log_callback(level, buffer, ggml_cuda_log_user_data);
-        } else {
-            std::vector<char> buffer2(len + 1);  // vsnprintf adds a null terminator
-            va_end(args);
-            va_start(args, format);
-            vsnprintf(&buffer2[0], buffer2.size(), format, args);
-            ggml_cuda_log_callback(level, buffer2.data(), ggml_cuda_log_user_data);
-        }
-        va_end(args);
-    }
-}
-
-[[noreturn]]
-void ggml_cuda_error(const char * stmt, const char * func, const char * file, int line, const char * msg) {
-    int id = -1; // in case cudaGetDevice fails
-    cudaGetDevice(&id);
-
-    GGML_CUDA_LOG_ERROR("CUDA error: %s\n", msg);
-    GGML_CUDA_LOG_ERROR("  current device: %d, in function %s at %s:%d\n", id, func, file, line);
-    GGML_CUDA_LOG_ERROR("  %s\n", stmt);
-    // abort with GGML_ASSERT to get a stack trace
-    GGML_ASSERT(!"CUDA error");
-}
-
-// this is faster on Windows
-// probably because the Windows CUDA libraries forget to make this check before invoking the drivers
-void ggml_cuda_set_device(int device) {
-    int current_device;
-    CUDA_CHECK(cudaGetDevice(&current_device));
-
-    if (device == current_device) {
-        return;
-    }
-
-    CUDA_CHECK(cudaSetDevice(device));
-}
-
-int ggml_cuda_get_device() {
-    int id;
-    CUDA_CHECK(cudaGetDevice(&id));
-    return id;
-}
-
-static cudaError_t ggml_cuda_device_malloc(void ** ptr, size_t size, int device) {
-    ggml_cuda_set_device(device);
-#if defined(GGML_USE_HIPBLAS) && defined(GGML_HIP_UMA)
-    auto res = hipMallocManaged(ptr, size);
-    if (res == hipSuccess) {
-        // if error we "need" to know why...
-        CUDA_CHECK(hipMemAdvise(*ptr, size, hipMemAdviseSetCoarseGrain, device));
-    }
-    return res;
-#else
-    return cudaMalloc(ptr, size);
-#endif
-}
-
-static ggml_cuda_device_info ggml_cuda_init() {
-#ifdef __HIP_PLATFORM_AMD__
-    // Workaround for a rocBLAS bug when using multiple graphics cards:
-    // https://github.com/ROCmSoftwarePlatform/rocBLAS/issues/1346
-    rocblas_initialize();
-    CUDA_CHECK(cudaDeviceSynchronize());
-#endif
-
-    ggml_cuda_device_info info = {};
-
-    cudaError_t err = cudaGetDeviceCount(&info.device_count);
-    if (err != cudaSuccess) {
-        GGML_CUDA_LOG_ERROR("%s: failed to initialize " GGML_CUDA_NAME ": %s\n", __func__, cudaGetErrorString(err));
-        return info;
-    }
-
-    GGML_ASSERT(info.device_count <= GGML_CUDA_MAX_DEVICES);
-
-    int64_t total_vram = 0;
-#if defined(GGML_CUDA_FORCE_MMQ)
-    GGML_CUDA_LOG_INFO("%s: GGML_CUDA_FORCE_MMQ:   yes\n", __func__);
-#else
-    GGML_CUDA_LOG_INFO("%s: GGML_CUDA_FORCE_MMQ:   no\n", __func__);
-#endif
-#if defined(CUDA_USE_TENSOR_CORES)
-    GGML_CUDA_LOG_INFO("%s: CUDA_USE_TENSOR_CORES: yes\n", __func__);
-#else
-    GGML_CUDA_LOG_INFO("%s: CUDA_USE_TENSOR_CORES: no\n", __func__);
-#endif
-    GGML_CUDA_LOG_INFO("%s: found %d " GGML_CUDA_NAME " devices:\n", __func__, info.device_count);
-    for (int id = 0; id < info.device_count; ++id) {
-        int device_vmm = 0;
-
-#if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM)
-        CUdevice device;
-        CU_CHECK(cuDeviceGet(&device, id));
-        CU_CHECK(cuDeviceGetAttribute(&device_vmm, CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED, device));
-
-        if (device_vmm) {
-            CUmemAllocationProp alloc_prop = {};
-            alloc_prop.type = CU_MEM_ALLOCATION_TYPE_PINNED;
-            alloc_prop.location.type = CU_MEM_LOCATION_TYPE_DEVICE;
-            alloc_prop.location.id = id;
-            CU_CHECK(cuMemGetAllocationGranularity(&info.devices[id].vmm_granularity, &alloc_prop, CU_MEM_ALLOC_GRANULARITY_RECOMMENDED));
-        }
-#endif // !defined(GGML_USE_HIPBLAS)
-        info.devices[id].vmm = !!device_vmm;
-
-        cudaDeviceProp prop;
-        CUDA_CHECK(cudaGetDeviceProperties(&prop, id));
-        GGML_CUDA_LOG_INFO("  Device %d: %s, compute capability %d.%d, VMM: %s\n", id, prop.name, prop.major, prop.minor, device_vmm ? "yes" : "no");
-
-        info.default_tensor_split[id] = total_vram;
-        total_vram += prop.totalGlobalMem;
-
-        info.devices[id].nsm   = prop.multiProcessorCount;
-        info.devices[id].smpb  = prop.sharedMemPerBlock;
-#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-        info.devices[id].smpbo = prop.sharedMemPerBlock;
-        info.devices[id].cc = 100*prop.major + 10*prop.minor + CC_OFFSET_AMD;
-#else
-        info.devices[id].smpbo = prop.sharedMemPerBlockOptin;
-        info.devices[id].cc = 100*prop.major + 10*prop.minor;
-#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-    }
-
-    for (int id = 0; id < info.device_count; ++id) {
-        info.default_tensor_split[id] /= total_vram;
-    }
-
-    // configure logging to stdout
-    // CUBLAS_CHECK(cublasLoggerConfigure(1, 1, 0, nullptr));
-
-    return info;
-}
-
-const ggml_cuda_device_info & ggml_cuda_info() {
-    static ggml_cuda_device_info info = ggml_cuda_init();
-    return info;
-}
-
-// #define DEBUG_CUDA_MALLOC
-
-// buffer pool for cuda (legacy)
-struct ggml_cuda_pool_leg : public ggml_cuda_pool {
-    static const int MAX_BUFFERS = 256;
-
-    int device;
-    struct ggml_cuda_buffer {
-        void * ptr = nullptr;
-        size_t size = 0;
-    };
-
-    ggml_cuda_buffer buffer_pool[MAX_BUFFERS] = {};
-    size_t pool_size = 0;
-
-    explicit ggml_cuda_pool_leg(int device) :
-        device(device) {
-    }
-
-    ~ggml_cuda_pool_leg() {
-        ggml_cuda_set_device(device);
-        for (int i = 0; i < MAX_BUFFERS; ++i) {
-            ggml_cuda_buffer & b = buffer_pool[i];
-            if (b.ptr != nullptr) {
-                CUDA_CHECK(cudaFree(b.ptr));
-                pool_size -= b.size;
-            }
-        }
-        GGML_ASSERT(pool_size == 0);
-    }
-
-    void * alloc(size_t size, size_t * actual_size) override {
-#ifdef DEBUG_CUDA_MALLOC
-        int nnz = 0;
-        size_t max_size = 0;
-#endif
-        size_t best_diff = 1ull << 36;
-        int ibest = -1;
-        for (int i = 0; i < MAX_BUFFERS; ++i) {
-            ggml_cuda_buffer& b = buffer_pool[i];
-            if (b.ptr != nullptr) {
-#ifdef DEBUG_CUDA_MALLOC
-                ++nnz;
-                if (b.size > max_size) max_size = b.size;
-#endif
-                if (b.size >= size) {
-                    size_t diff = b.size - size;
-                    if (diff < best_diff) {
-                        best_diff = diff;
-                        ibest = i;
-                        if (!best_diff) {
-                            void * ptr = b.ptr;
-                            *actual_size = b.size;
-                            b.ptr = nullptr;
-                            b.size = 0;
-                            return ptr;
-                        }
-                    }
-                }
-            }
-        }
-        if (ibest >= 0) {
-            ggml_cuda_buffer& b = buffer_pool[ibest];
-            void * ptr = b.ptr;
-            *actual_size = b.size;
-            b.ptr = nullptr;
-            b.size = 0;
-            return ptr;
-        }
-        void * ptr;
-        size_t look_ahead_size = (size_t) (1.05 * size);
-        look_ahead_size = 256 * ((look_ahead_size + 255)/256);
-        ggml_cuda_set_device(device);
-        CUDA_CHECK(ggml_cuda_device_malloc(&ptr, look_ahead_size, device));
-        *actual_size = look_ahead_size;
-        pool_size += look_ahead_size;
-#ifdef DEBUG_CUDA_MALLOC
-        GGML_CUDA_LOG_INFO("%s[%d]: %d buffers, max_size = %u MB, pool_size = %u MB, requested %u MB\n", __func__, device, nnz,
-                           (uint32_t)(max_size / 1024 / 1024), (uint32_t)(pool_size / 1024 / 1024), (uint32_t)(size / 1024 / 1024));
-#endif
-        return ptr;
-    }
-
-    void free(void * ptr, size_t size) override {
-        for (int i = 0; i < MAX_BUFFERS; ++i) {
-            ggml_cuda_buffer& b = buffer_pool[i];
-            if (b.ptr == nullptr) {
-                b.ptr = ptr;
-                b.size = size;
-                return;
-            }
-        }
-        GGML_CUDA_LOG_WARN("Cuda buffer pool full, increase MAX_CUDA_BUFFERS\n");
-        ggml_cuda_set_device(device);
-        CUDA_CHECK(cudaFree(ptr));
-        pool_size -= size;
-    }
-};
-
-// pool with virtual memory
-#if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM)
-struct ggml_cuda_pool_vmm : public ggml_cuda_pool {
-    static const size_t CUDA_POOL_VMM_MAX_SIZE = 1ull << 35; // 32 GB
-
-    int device;
-    CUdeviceptr pool_addr = 0;
-    size_t pool_used = 0;
-    size_t pool_size = 0;
-    size_t granularity;
-
-    explicit ggml_cuda_pool_vmm(int device) :
-        device(device),
-        granularity(ggml_cuda_info().devices[device].vmm_granularity) {
-    }
-
-    ~ggml_cuda_pool_vmm() {
-        if (pool_addr != 0) {
-            CU_CHECK(cuMemUnmap(pool_addr, pool_size));
-            CU_CHECK(cuMemAddressFree(pool_addr, CUDA_POOL_VMM_MAX_SIZE));
-        }
-    }
-
-    void * alloc(size_t size, size_t * actual_size) override {
-        // round up the allocation size to the alignment to ensure that all allocations are aligned for all data types
-        const size_t alignment = 128;
-        size = alignment * ((size + alignment - 1) / alignment);
-
-        size_t avail = pool_size - pool_used;
-
-        if (size > avail) {
-            // round up to the next multiple of the granularity
-            size_t reserve_size = size - avail;
-            reserve_size = granularity * ((reserve_size + granularity - 1) / granularity);
-
-            GGML_ASSERT(pool_size + reserve_size <= CUDA_POOL_VMM_MAX_SIZE);
-
-            // allocate more physical memory
-            CUmemAllocationProp prop = {};
-            prop.type = CU_MEM_ALLOCATION_TYPE_PINNED;
-            prop.location.type = CU_MEM_LOCATION_TYPE_DEVICE;
-            prop.location.id = device;
-            CUmemGenericAllocationHandle handle;
-            CU_CHECK(cuMemCreate(&handle, reserve_size, &prop, 0));
-
-            // reserve virtual address space (if not already reserved)
-            if (pool_addr == 0) {
-                CU_CHECK(cuMemAddressReserve(&pool_addr, CUDA_POOL_VMM_MAX_SIZE, 0, 0, 0));
-            }
-
-            // map at the end of the pool
-            CU_CHECK(cuMemMap(pool_addr + pool_size, reserve_size, 0, handle, 0));
-
-            // the memory allocation handle is no longer needed after mapping
-            CU_CHECK(cuMemRelease(handle));
-
-            // set access
-            CUmemAccessDesc access = {};
-            access.location.type = CU_MEM_LOCATION_TYPE_DEVICE;
-            access.location.id = device;
-            access.flags = CU_MEM_ACCESS_FLAGS_PROT_READWRITE;
-            CU_CHECK(cuMemSetAccess(pool_addr + pool_size, reserve_size, &access, 1));
-
-            // add to the pool
-            pool_size += reserve_size;
-
-            //printf("cuda pool[%d]: size increased to %llu MB (reserved %llu MB)\n",
-            //       device, (unsigned long long) (pool_size/1024/1024),
-            //       (unsigned long long) (reserve_size/1024/1024));
-        }
-
-        GGML_ASSERT(pool_addr != 0);
-
-        void * ptr = (void *) (pool_addr + pool_used);
-        *actual_size = size;
-        pool_used += size;
-
-#ifdef DEBUG_CUDA_MALLOC
-        printf("cuda pool[%d]: allocated %llu bytes at %llx\n", device, (unsigned long long) size, ptr);
-#endif
-
-        return ptr;
-    }
-
-    void free(void * ptr, size_t size) override {
-#ifdef DEBUG_CUDA_MALLOC
-        printf("cuda pool[%d]: freed %llu bytes at %llx\n", device, (unsigned long long) size, ptr);
-#endif
-
-        pool_used -= size;
-
-        // all deallocations must be in reverse order of the allocations
-        GGML_ASSERT(ptr == (void *) (pool_addr + pool_used));
-    }
-};
-#endif // !defined(GGML_USE_HIPBLAS)
-
-std::unique_ptr<ggml_cuda_pool> ggml_backend_cuda_context::new_pool_for_device(int device) {
-#if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM)
-    if (ggml_cuda_info().devices[device].vmm) {
-        return std::unique_ptr<ggml_cuda_pool>(new ggml_cuda_pool_vmm(device));
-    }
-#endif
-    return std::unique_ptr<ggml_cuda_pool>(new ggml_cuda_pool_leg(device));
-}
-
-// cuda buffer
-
-struct ggml_backend_cuda_buffer_context {
-    int device;
-    void * dev_ptr = nullptr;
-    std::string name;
-
-    ggml_backend_cuda_buffer_context(int device, void * dev_ptr) :
-        device(device), dev_ptr(dev_ptr),
-        name(GGML_CUDA_NAME + std::to_string(device)) {
-    }
-
-    ~ggml_backend_cuda_buffer_context() {
-        CUDA_CHECK(cudaFree(dev_ptr));
-    }
-};
-
-GGML_CALL static const char * ggml_backend_cuda_buffer_get_name(ggml_backend_buffer_t buffer) {
-    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
-    return ctx->name.c_str();
-}
-
-GGML_CALL static bool ggml_backend_buffer_is_cuda(ggml_backend_buffer_t buffer) {
-    return buffer->iface.get_name == ggml_backend_cuda_buffer_get_name;
-}
-
-GGML_CALL static void ggml_backend_cuda_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
-    delete ctx;
-}
-
-GGML_CALL static void * ggml_backend_cuda_buffer_get_base(ggml_backend_buffer_t buffer) {
-    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
-    return ctx->dev_ptr;
-}
-
-GGML_CALL static void ggml_backend_cuda_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
-    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
-
-    if (tensor->view_src != NULL) {
-        assert(tensor->view_src->buffer->buft == buffer->buft);
-        return;
-    }
-
-    if (ggml_is_quantized(tensor->type)) {
-        // initialize padding to 0 to avoid possible NaN values
-        size_t original_size = ggml_nbytes(tensor);
-        size_t padded_size = ggml_backend_buft_get_alloc_size(buffer->buft, tensor);
-
-        if (padded_size > original_size && tensor->view_src == nullptr) {
-            ggml_cuda_set_device(ctx->device);
-            CUDA_CHECK(cudaMemset((char *)tensor->data + original_size, 0, padded_size - original_size));
-        }
-    }
-}
-
-GGML_CALL static void ggml_backend_cuda_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
-
-    ggml_cuda_set_device(ctx->device);
-    CUDA_CHECK(cudaMemcpyAsync((char *)tensor->data + offset, data, size, cudaMemcpyHostToDevice, cudaStreamPerThread));
-    CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread));
-}
-
-GGML_CALL static void ggml_backend_cuda_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
-
-    ggml_cuda_set_device(ctx->device);
-    CUDA_CHECK(cudaMemcpyAsync(data, (const char *)tensor->data + offset, size, cudaMemcpyDeviceToHost, cudaStreamPerThread));
-    CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread));
-}
-
-GGML_CALL static bool ggml_backend_cuda_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * src, ggml_tensor * dst) {
-    if (ggml_backend_buffer_is_cuda(src->buffer)) {
-        ggml_backend_cuda_buffer_context * src_ctx = (ggml_backend_cuda_buffer_context *)src->buffer->context;
-        ggml_backend_cuda_buffer_context * dst_ctx = (ggml_backend_cuda_buffer_context *)dst->buffer->context;
-        if (src_ctx->device == dst_ctx->device) {
-            CUDA_CHECK(cudaMemcpyAsync(dst->data, src->data, ggml_nbytes(src), cudaMemcpyDeviceToDevice, cudaStreamPerThread));
-        } else {
-#ifdef GGML_CUDA_NO_PEER_COPY
-            return false;
-#else
-            CUDA_CHECK(cudaMemcpyPeerAsync(dst->data, dst_ctx->device, src->data, src_ctx->device, ggml_nbytes(src), cudaStreamPerThread));
-#endif
-        }
-        CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread));
-        return true;
-    }
-    return false;
-
-    GGML_UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_cuda_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
-    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
-
-    ggml_cuda_set_device(ctx->device);
-    CUDA_CHECK(cudaDeviceSynchronize());
-    CUDA_CHECK(cudaMemset(ctx->dev_ptr, value, buffer->size));
-    CUDA_CHECK(cudaDeviceSynchronize());
-}
-
-static ggml_backend_buffer_i ggml_backend_cuda_buffer_interface = {
-    /* .get_name        = */ ggml_backend_cuda_buffer_get_name,
-    /* .free_buffer     = */ ggml_backend_cuda_buffer_free_buffer,
-    /* .get_base        = */ ggml_backend_cuda_buffer_get_base,
-    /* .init_tensor     = */ ggml_backend_cuda_buffer_init_tensor,
-    /* .set_tensor      = */ ggml_backend_cuda_buffer_set_tensor,
-    /* .get_tensor      = */ ggml_backend_cuda_buffer_get_tensor,
-    /* .cpy_tensor      = */ ggml_backend_cuda_buffer_cpy_tensor,
-    /* .clear           = */ ggml_backend_cuda_buffer_clear,
-    /* .reset           = */ NULL,
-};
-
-// cuda buffer type
-struct ggml_backend_cuda_buffer_type_context {
-    int device;
-    std::string name;
-};
-
-GGML_CALL static const char * ggml_backend_cuda_buffer_type_name(ggml_backend_buffer_type_t buft) {
-    ggml_backend_cuda_buffer_type_context * ctx = (ggml_backend_cuda_buffer_type_context *)buft->context;
-
-    return ctx->name.c_str();
-}
-
-static bool ggml_backend_buft_is_cuda(ggml_backend_buffer_type_t buft) {
-    return buft->iface.get_name == ggml_backend_cuda_buffer_type_name;
-}
-
-GGML_CALL static ggml_backend_buffer_t ggml_backend_cuda_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    ggml_backend_cuda_buffer_type_context * buft_ctx = (ggml_backend_cuda_buffer_type_context *)buft->context;
-
-    ggml_cuda_set_device(buft_ctx->device);
-
-    size = std::max(size, (size_t)1); // cudaMalloc returns null for size 0
-
-    void * dev_ptr;
-    cudaError_t err = ggml_cuda_device_malloc(&dev_ptr, size, buft_ctx->device);
-    if (err != cudaSuccess) {
-        // clear the error
-        cudaGetLastError();
-        GGML_CUDA_LOG_ERROR("%s: allocating %.2f MiB on device %d: cudaMalloc failed: %s\n", __func__, size / 1024.0 / 1024.0, buft_ctx->device, cudaGetErrorString(err));
-        return nullptr;
-    }
-
-    ggml_backend_cuda_buffer_context * ctx = new ggml_backend_cuda_buffer_context(buft_ctx->device, dev_ptr);
-
-    return ggml_backend_buffer_init(buft, ggml_backend_cuda_buffer_interface, ctx, size);
-}
-
-GGML_CALL static size_t ggml_backend_cuda_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
-    return 128;
-
-    GGML_UNUSED(buft);
-}
-
-GGML_CALL static size_t ggml_backend_cuda_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
-    size_t size = ggml_nbytes(tensor);
-    int64_t ne0 = tensor->ne[0];
-
-    if (ggml_is_quantized(tensor->type)) {
-        if (ne0 % MATRIX_ROW_PADDING != 0) {
-            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
-        }
-    }
-
-    return size;
-
-    GGML_UNUSED(buft);
-}
-
-static ggml_backend_buffer_type_i ggml_backend_cuda_buffer_type_interface = {
-    /* .get_name         = */ ggml_backend_cuda_buffer_type_name,
-    /* .alloc_buffer     = */ ggml_backend_cuda_buffer_type_alloc_buffer,
-    /* .get_alignment    = */ ggml_backend_cuda_buffer_type_get_alignment,
-    /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
-    /* .get_alloc_size   = */ ggml_backend_cuda_buffer_type_get_alloc_size,
-    /* .is_host          = */ NULL,
-};
-
-GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_buffer_type(int device) {
-    static std::mutex mutex;
-    std::lock_guard<std::mutex> lock(mutex);
-
-    if (device >= ggml_backend_cuda_get_device_count()) {
-        return nullptr;
-    }
-
-    static ggml_backend_buffer_type ggml_backend_cuda_buffer_types[GGML_CUDA_MAX_DEVICES];
-
-    static bool ggml_backend_cuda_buffer_type_initialized = false;
-
-    if (!ggml_backend_cuda_buffer_type_initialized) {
-        for (int i = 0; i < GGML_CUDA_MAX_DEVICES; i++) {
-            ggml_backend_cuda_buffer_types[i] = {
-                /* .iface    = */ ggml_backend_cuda_buffer_type_interface,
-                /* .context  = */ new ggml_backend_cuda_buffer_type_context{i, GGML_CUDA_NAME + std::to_string(i)},
-            };
-        }
-        ggml_backend_cuda_buffer_type_initialized = true;
-    }
-
-    return &ggml_backend_cuda_buffer_types[device];
-}
-
-// cuda split buffer
-
-static int64_t get_row_rounding(const std::array<float, GGML_CUDA_MAX_DEVICES> & tensor_split) {
-    int64_t row_rounding = 0;
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        if (tensor_split[id] >= (id + 1 < ggml_backend_cuda_get_device_count() ? tensor_split[id + 1] : 1.0f)) {
-            continue;
-        }
-
-        const int cc = ggml_cuda_info().devices[id].cc;
-        row_rounding = std::max(row_rounding, (int64_t)get_mmq_y_host(cc, get_mmq_x_max_host(cc)));
-    }
-    return row_rounding;
-}
-
-static void get_row_split(int64_t * row_low, int64_t * row_high, const ggml_tensor * tensor, const std::array<float, GGML_CUDA_MAX_DEVICES> & tensor_split, int id) {
-    const int64_t nrows = ggml_nrows(tensor);
-    const int64_t rounding = get_row_rounding(tensor_split);
-
-    *row_low = id == 0 ? 0 : nrows*tensor_split[id];
-    *row_low -= *row_low % rounding;
-
-    if (id == ggml_backend_cuda_get_device_count() - 1) {
-        *row_high = nrows;
-    } else {
-        *row_high = nrows*tensor_split[id + 1];
-        *row_high -= *row_high % rounding;
-    }
-}
-
-static size_t ggml_nbytes_split(const struct ggml_tensor * tensor, int nrows_split) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return nrows_split*ggml_row_size(tensor->type, tensor->ne[0]);
-}
-
-struct ggml_backend_cuda_split_buffer_type_context {
-    std::array<float, GGML_CUDA_MAX_DEVICES> tensor_split;
-};
-
-struct ggml_backend_cuda_split_buffer_context {
-    ~ggml_backend_cuda_split_buffer_context() {
-        for (ggml_tensor_extra_gpu * extra : tensor_extras) {
-            for (int id = 0; id < GGML_CUDA_MAX_DEVICES; ++id) {
-                for (int64_t is = 0; is < GGML_CUDA_MAX_STREAMS; ++is) {
-                    if (extra->events[id][is] != nullptr) {
-                        CUDA_CHECK(cudaEventDestroy(extra->events[id][is]));
-                    }
-                }
-                if (extra->data_device[id] != nullptr) {
-                    CUDA_CHECK(cudaFree(extra->data_device[id]));
-                }
-            }
-            delete extra;
-        }
-    }
-
-    std::vector<ggml_tensor_extra_gpu *> tensor_extras;
-};
-
-GGML_CALL static const char * ggml_backend_cuda_split_buffer_get_name(ggml_backend_buffer_t buffer) {
-    return GGML_CUDA_NAME "_Split";
-
-    GGML_UNUSED(buffer);
-}
-
-static bool ggml_backend_buffer_is_cuda_split(ggml_backend_buffer_t buffer) {
-    return buffer->iface.get_name == ggml_backend_cuda_split_buffer_get_name;
-    GGML_UNUSED(ggml_backend_buffer_is_cuda_split); // only used in debug builds currently, avoid unused function warning in release builds
-}
-
-GGML_CALL static void ggml_backend_cuda_split_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    ggml_backend_cuda_split_buffer_context * ctx = (ggml_backend_cuda_split_buffer_context *)buffer->context;
-    delete ctx;
-}
-
-GGML_CALL static void * ggml_backend_cuda_split_buffer_get_base(ggml_backend_buffer_t buffer) {
-    // the pointers are stored in the tensor extras, this is just a dummy address and never dereferenced
-    return (void *)0x1000;
-
-    GGML_UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_cuda_split_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
-    GGML_ASSERT(tensor->view_src == nullptr); // views of split tensors are not supported
-
-    ggml_backend_cuda_split_buffer_context * ctx = (ggml_backend_cuda_split_buffer_context *)buffer->context;
-    ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *)buffer->buft->context;
-
-    const int64_t ne0 = tensor->ne[0];
-
-    ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu{};
-    ctx->tensor_extras.push_back(extra);
-
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        int64_t row_low, row_high;
-        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, id);
-
-        int64_t nrows_split = row_high - row_low;
-        if (nrows_split == 0) {
-            continue;
-        }
-
-        size_t size = ggml_nbytes_split(tensor, nrows_split);
-        const size_t original_size = size;
-
-        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
-        if (ne0 % MATRIX_ROW_PADDING != 0) {
-            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
-        }
-
-        // FIXME: do not crash if cudaMalloc fails
-        // currently, init_tensor cannot fail, it needs to be fixed in ggml-backend first
-        ggml_cuda_set_device(id);
-        char * buf;
-        CUDA_CHECK(ggml_cuda_device_malloc((void**)&buf, size, id));
-
-        // set padding to 0 to avoid possible NaN values
-        if (size > original_size) {
-            CUDA_CHECK(cudaMemset(buf + original_size, 0, size - original_size));
-        }
-
-        extra->data_device[id] = buf;
-
-        for (int64_t is = 0; is < GGML_CUDA_MAX_STREAMS; ++is) {
-            CUDA_CHECK(cudaEventCreateWithFlags(&extra->events[id][is], cudaEventDisableTiming));
-        }
-    }
-    tensor->extra = extra;
-}
-
-GGML_CALL static void ggml_backend_cuda_split_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    // split tensors must always be set in their entirety at once
-    GGML_ASSERT(offset == 0);
-    GGML_ASSERT(size == ggml_nbytes(tensor));
-
-    ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *)buffer->buft->context;
-
-    const int64_t ne0 = tensor->ne[0];
-    const size_t nb1 = tensor->nb[1];
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra;
-
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        int64_t row_low, row_high;
-        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, id);
-
-        int64_t nrows_split = row_high - row_low;
-        if (nrows_split == 0) {
-            continue;
-        }
-
-        const size_t offset_split = row_low*nb1;
-        size_t size = ggml_nbytes_split(tensor, nrows_split);
-        const size_t original_size = size;
-
-        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
-        if (ne0 % MATRIX_ROW_PADDING != 0) {
-            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
-        }
-
-        const char * buf_host = (const char *)data + offset_split;
-        CUDA_CHECK(cudaMemcpyAsync(extra->data_device[id], buf_host, original_size, cudaMemcpyHostToDevice, cudaStreamPerThread));
-    }
-
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread));
-    }
-}
-
-GGML_CALL static void ggml_backend_cuda_split_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    // split tensors must always be set in their entirety at once
-    GGML_ASSERT(offset == 0);
-    GGML_ASSERT(size == ggml_nbytes(tensor));
-
-    ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *)buffer->buft->context;
-
-    const int64_t ne0 = tensor->ne[0];
-    const size_t nb1 = tensor->nb[1];
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra;
-
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        int64_t row_low, row_high;
-        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, id);
-
-        int64_t nrows_split = row_high - row_low;
-        if (nrows_split == 0) {
-            continue;
-        }
-
-        const size_t offset_split = row_low*nb1;
-        size_t size = ggml_nbytes_split(tensor, nrows_split);
-        const size_t original_size = size;
-
-        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
-        if (ne0 % MATRIX_ROW_PADDING != 0) {
-            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
-        }
-
-        char * buf_host = (char *)data + offset_split;
-        CUDA_CHECK(cudaMemcpyAsync(buf_host, extra->data_device[id], original_size, cudaMemcpyDeviceToHost, cudaStreamPerThread));
-    }
-
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread));
-    }
-}
-
-GGML_CALL static void ggml_backend_cuda_split_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
-    GGML_UNUSED(buffer);
-    GGML_UNUSED(value);
-}
-
-static struct ggml_backend_buffer_i ggml_backend_cuda_split_buffer_interface = {
-    /* .get_name        = */ ggml_backend_cuda_split_buffer_get_name,
-    /* .free_buffer     = */ ggml_backend_cuda_split_buffer_free_buffer,
-    /* .get_base        = */ ggml_backend_cuda_split_buffer_get_base,
-    /* .init_tensor     = */ ggml_backend_cuda_split_buffer_init_tensor,
-    /* .set_tensor      = */ ggml_backend_cuda_split_buffer_set_tensor,
-    /* .get_tensor      = */ ggml_backend_cuda_split_buffer_get_tensor,
-    /* .cpy_tensor      = */ NULL,
-    /* .clear           = */ ggml_backend_cuda_split_buffer_clear,
-    /* .reset           = */ NULL,
-};
-
-// cuda split buffer type
-
-GGML_CALL static const char * ggml_backend_cuda_split_buffer_type_name(ggml_backend_buffer_type_t buft) {
-    return GGML_CUDA_NAME "_Split";
-
-    GGML_UNUSED(buft);
-}
-
-static bool ggml_backend_buft_is_cuda_split(ggml_backend_buffer_type_t buft) {
-    return buft->iface.get_name == ggml_backend_cuda_split_buffer_type_name;
-}
-
-GGML_CALL static ggml_backend_buffer_t ggml_backend_cuda_split_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    // since we don't know the exact split after rounding, we cannot allocate the device buffers at this point
-    // instead, we allocate them for each tensor separately in init_tensor
-    // however, the size still represents the maximum cumulative size of all the device buffers after the tensors are allocated,
-    // as returned by get_alloc_size. this limit is enforced during tensor allocation by ggml-alloc, so it must be correct.
-    ggml_backend_cuda_split_buffer_context * ctx = new ggml_backend_cuda_split_buffer_context();
-
-    return ggml_backend_buffer_init(buft, ggml_backend_cuda_split_buffer_interface, ctx, size);
-}
-
-GGML_CALL static size_t ggml_backend_cuda_split_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
-    return 128;
-
-    GGML_UNUSED(buft);
-}
-
-GGML_CALL static size_t ggml_backend_cuda_split_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
-    ggml_backend_cuda_split_buffer_type_context * ctx = (ggml_backend_cuda_split_buffer_type_context *)buft->context;
-
-    size_t total_size = 0;
-
-    const int64_t ne0 = tensor->ne[0];
-
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        int64_t row_low, row_high;
-        get_row_split(&row_low, &row_high, tensor, ctx->tensor_split, id);
-
-        int64_t nrows_split = row_high - row_low;
-        if (nrows_split == 0) {
-            continue;
-        }
-
-        total_size += ggml_nbytes_split(tensor, nrows_split);
-
-        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
-        if (ne0 % MATRIX_ROW_PADDING != 0) {
-            total_size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
-        }
-    }
-
-    return total_size;
-}
-
-GGML_CALL static bool ggml_backend_cuda_split_buffer_type_is_host(ggml_backend_buffer_type_t buft) {
-    return false;
-
-    GGML_UNUSED(buft);
-}
-
-static ggml_backend_buffer_type_i ggml_backend_cuda_split_buffer_type_interface = {
-    /* .get_name         = */ ggml_backend_cuda_split_buffer_type_name,
-    /* .alloc_buffer     = */ ggml_backend_cuda_split_buffer_type_alloc_buffer,
-    /* .get_alignment    = */ ggml_backend_cuda_split_buffer_type_get_alignment,
-    /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
-    /* .get_alloc_size   = */ ggml_backend_cuda_split_buffer_type_get_alloc_size,
-    /* .is_host          = */ ggml_backend_cuda_split_buffer_type_is_host,
-};
-
-GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_split_buffer_type(const float * tensor_split) {
-    static std::mutex mutex;
-    std::lock_guard<std::mutex> lock(mutex);
-
-    static std::map<std::array<float, GGML_CUDA_MAX_DEVICES>, struct ggml_backend_buffer_type> buft_map;
-
-    std::array<float, GGML_CUDA_MAX_DEVICES> tensor_split_arr = {};
-
-    bool all_zero = tensor_split == nullptr || std::all_of(tensor_split, tensor_split + GGML_CUDA_MAX_DEVICES, [](float x) { return x == 0.0f; });
-    if (all_zero) {
-        tensor_split_arr = ggml_cuda_info().default_tensor_split;
-    } else {
-        float split_sum = 0.0f;
-        for (int i = 0; i < ggml_backend_cuda_get_device_count(); ++i) {
-            tensor_split_arr[i] = split_sum;
-            split_sum += tensor_split[i];
-        }
-        for (int i = 0; i < ggml_backend_cuda_get_device_count(); ++i) {
-            tensor_split_arr[i] /= split_sum;
-        }
-    }
-
-    auto it = buft_map.find(tensor_split_arr);
-    if (it != buft_map.end()) {
-        return &it->second;
-    }
-
-    struct ggml_backend_buffer_type buft {
-        /* .iface   = */ ggml_backend_cuda_split_buffer_type_interface,
-        /* .context = */ new ggml_backend_cuda_split_buffer_type_context{tensor_split_arr},
-    };
-
-    auto result = buft_map.emplace(tensor_split_arr, buft);
-    return &result.first->second;
-}
-
-// host buffer type
-
-GGML_CALL static const char * ggml_backend_cuda_host_buffer_type_name(ggml_backend_buffer_type_t buft) {
-    return GGML_CUDA_NAME "_Host";
-
-    GGML_UNUSED(buft);
-}
-
-GGML_CALL static const char * ggml_backend_cuda_host_buffer_name(ggml_backend_buffer_t buffer) {
-    return GGML_CUDA_NAME "_Host";
-
-    GGML_UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_cuda_host_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    CUDA_CHECK(cudaFreeHost(buffer->context));
-}
-
-static void * ggml_cuda_host_malloc(size_t size) {
-    if (getenv("GGML_CUDA_NO_PINNED") != nullptr) {
-        return nullptr;
-    }
-
-    void * ptr = nullptr;
-    cudaError_t err = cudaMallocHost((void **) &ptr, size);
-    if (err != cudaSuccess) {
-        // clear the error
-        cudaGetLastError();
-        GGML_CUDA_LOG_WARN("%s: failed to allocate %.2f MiB of pinned memory: %s\n", __func__,
-                           size / 1024.0 / 1024.0, cudaGetErrorString(err));
-        return nullptr;
-    }
-
-    return ptr;
-}
-
-GGML_CALL static ggml_backend_buffer_t ggml_backend_cuda_host_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    void * ptr = ggml_cuda_host_malloc(size);
-
-    if (ptr == nullptr) {
-        // fallback to cpu buffer
-        return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size);
-    }
-
-    ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size);
-    buffer->buft = buft;
-    buffer->iface.get_name = ggml_backend_cuda_host_buffer_name;
-    buffer->iface.free_buffer = ggml_backend_cuda_host_buffer_free_buffer;
-
-    return buffer;
-}
-
-GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_host_buffer_type() {
-    static struct ggml_backend_buffer_type ggml_backend_cuda_buffer_type_host = {
-        /* .iface    = */ {
-            /* .get_name         = */ ggml_backend_cuda_host_buffer_type_name,
-            /* .alloc_buffer     = */ ggml_backend_cuda_host_buffer_type_alloc_buffer,
-            /* .get_alignment    = */ ggml_backend_cpu_buffer_type()->iface.get_alignment,
-            /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
-            /* .get_alloc_size   = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size,
-            /* .is_host          = */ ggml_backend_cpu_buffer_type()->iface.is_host,
-        },
-        /* .context  = */ nullptr,
-    };
-
-    return &ggml_backend_cuda_buffer_type_host;
-}
-
-//static bool ggml_backend_buffer_is_cuda_host(ggml_backend_buffer_t buffer) {
-//    return buffer->buft->iface.get_name == ggml_backend_cuda_host_buffer_type_name;
-//}
-
-/// kernels
-
-typedef void (*ggml_cuda_op_mul_mat_t)(
-    ggml_backend_cuda_context & ctx,
-    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
-    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
-    const int64_t src1_padded_row_size, cudaStream_t stream);
-
-#ifndef GGML_CUDA_PEER_MAX_BATCH_SIZE
-#define GGML_CUDA_PEER_MAX_BATCH_SIZE 128
-#endif // GGML_CUDA_PEER_MAX_BATCH_SIZE
-
-#define MUL_MAT_SRC1_COL_STRIDE 128
-
-static __global__ void mul_mat_p021_f16_f32(
-    const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int nchannels_x, const int nchannels_y) {
-
-    const half * x = (const half *) vx;
-
-    const int row_x = blockDim.y*blockIdx.y + threadIdx.y;
-    const int channel = blockDim.z*blockIdx.z + threadIdx.z;
-    const int channel_x = channel / (nchannels_y / nchannels_x);
-
-    const int nrows_y = ncols_x;
-    const int nrows_dst = nrows_x;
-    const int row_dst = row_x;
-
-    float tmp = 0.0f;
-
-    for (int col_x0 = 0; col_x0 < ncols_x; col_x0 += blockDim.x) {
-        const int col_x = col_x0 + threadIdx.x;
-
-        if (col_x >= ncols_x) {
-            break;
-        }
-
-        // x is transposed and permuted
-        const int ix = row_x*nchannels_x*ncols_x + channel_x*ncols_x + col_x;
-        const float xi = __half2float(x[ix]);
-
-        const int row_y = col_x;
-
-        // y is not transposed but permuted
-        const int iy = channel*nrows_y + row_y;
-
-        tmp += xi * y[iy];
-    }
-
-    // dst is not transposed and not permuted
-    const int idst = channel*nrows_dst + row_dst;
-
-    // sum up partial sums and write back result
-    tmp = warp_reduce_sum(tmp);
-
-    if (threadIdx.x == 0) {
-        dst[idst] = tmp;
-    }
-}
-
-static __global__ void mul_mat_vec_nc_f16_f32( // nc == non-contiguous
-    const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst, const int ncols_x, const int nrows_x,
-    const int row_stride_x, const int channel_stride_x, const int channel_x_divisor) {
-
-    const half * x = (const half *) vx;
-
-    const int row_x     = blockDim.y*blockIdx.y + threadIdx.y;
-    const int channel   = blockDim.z*blockIdx.z + threadIdx.z;
-    const int channel_x = channel / channel_x_divisor;
-
-    const int nrows_y   = ncols_x;
-    const int nrows_dst = nrows_x;
-    const int row_dst   = row_x;
-
-    const int idst = channel*nrows_dst + row_dst;
-
-    float tmp = 0.0f;
-
-    for (int col_x0 = 0; col_x0 < ncols_x; col_x0 += blockDim.x) {
-        const int col_x = col_x0 + threadIdx.x;
-
-        if (col_x >= ncols_x) {
-            break;
-        }
-
-        const int row_y = col_x;
-
-        const int ix = channel_x*channel_stride_x + row_x*row_stride_x + col_x;
-        const int iy = channel*nrows_y + row_y;
-
-        const float xi = __half2float(x[ix]);
-
-        tmp += xi * y[iy];
-    }
-
-    // sum up partial sums and write back result
-    tmp = warp_reduce_sum(tmp);
-
-    if (threadIdx.x == 0) {
-        dst[idst] = tmp;
-    }
-}
-
-static void ggml_mul_mat_p021_f16_f32_cuda(
-    const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x,
-    const int nchannels_x, const int nchannels_y, cudaStream_t stream) {
-
-    const dim3 block_nums(1, nrows_x, nchannels_y);
-    const dim3 block_dims(WARP_SIZE, 1, 1);
-    mul_mat_p021_f16_f32<<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols_x, nrows_x, nchannels_x, nchannels_y);
-}
-
-static void ggml_mul_mat_vec_nc_f16_f32_cuda(
-    const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x, const int row_stride_x,
-    const int nchannels_x, const int nchannels_y, const int channel_stride_x, cudaStream_t stream) {
-
-    const dim3 block_nums(1, nrows_x, nchannels_y);
-    const dim3 block_dims(WARP_SIZE, 1, 1);
-    mul_mat_vec_nc_f16_f32<<<block_nums, block_dims, 0, stream>>>
-        (vx, y, dst, ncols_x, nrows_x, row_stride_x, channel_stride_x, nchannels_y/nchannels_x);
-}
-
-static cudaError_t ggml_cuda_cpy_tensor_2d(
-    void * dst, const struct ggml_tensor * src, int64_t i3, int64_t i2, int64_t i1_low, int64_t i1_high, cudaStream_t stream) {
-
-    GGML_ASSERT(ggml_backend_buffer_is_cuda(src->buffer));
-    char * src_ptr = (char *) src->data;
-    char * dst_ptr = (char *) dst;
-
-    const int64_t ne0 = src->ne[0];
-    const int64_t nb0 = src->nb[0];
-    const int64_t nb1 = src->nb[1];
-    const int64_t nb2 = src->nb[2];
-    const int64_t nb3 = src->nb[3];
-    const enum ggml_type type = src->type;
-    const int64_t ts = ggml_type_size(type);
-    const int64_t bs = ggml_blck_size(type);
-    int64_t i1_diff = i1_high - i1_low;
-
-    const char * x = src_ptr + i1_low*nb1 + i2*nb2 + i3*nb3;
-    if (nb0 == ts && nb1 == ts*ne0/bs) {
-        return cudaMemcpyAsync(dst_ptr, x, i1_diff*nb1, cudaMemcpyDeviceToDevice, stream);
-    } else if (nb0 == ts) {
-        return cudaMemcpy2DAsync(dst_ptr, ts*ne0/bs, x, nb1, ts*ne0/bs, i1_diff, cudaMemcpyDeviceToDevice, stream);
-    } else {
-        for (int64_t i1 = 0; i1 < i1_diff; i1++) {
-            const void * rx = (const void *) ((const char *) x + i1*nb1);
-            void * rd = (void *) (dst_ptr + i1*ts*ne0/bs);
-            // pretend the row is a matrix with cols=1
-            cudaError_t r = cudaMemcpy2DAsync(rd, ts/bs, rx, nb0, ts/bs, ne0, cudaMemcpyDeviceToDevice, stream);
-            if (r != cudaSuccess) {
-                return r;
-            }
-        }
-        return cudaSuccess;
-    }
-}
-
-static void ggml_cuda_op_mul_mat_cublas(
-    ggml_backend_cuda_context & ctx,
-    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
-    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
-    const int64_t src1_padded_row_size, cudaStream_t stream) {
-
-    GGML_ASSERT(src0_dd_i  != nullptr);
-    GGML_ASSERT(src1_ddf_i != nullptr);
-    GGML_ASSERT(dst_dd_i   != nullptr);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne10 = src1->ne[0];
-
-    const int64_t ne0 = dst->ne[0];
-
-    const int64_t row_diff = row_high - row_low;
-
-    int id = ggml_cuda_get_device();
-
-    // the main device has a larger memory buffer to hold the results from all GPUs
-    // ldc == nrows of the matrix that cuBLAS writes into
-    int64_t ldc = id == ctx.device ? ne0 : row_diff;
-
-    const int compute_capability = ggml_cuda_info().devices[id].cc;
-
-    if (compute_capability >= CC_VOLTA && (src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) && ggml_is_contiguous(src0) && row_diff == src0->ne[1] && dst->op_params[0] == GGML_PREC_DEFAULT) {
-        // convert src0 and src1 to fp16, multiply as fp16, convert dst to fp32
-        ggml_cuda_pool_alloc<half> src0_as_f16(ctx.pool(id));
-        if (src0->type != GGML_TYPE_F16) {
-            const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src0->type);
-            GGML_ASSERT(to_fp16_cuda != nullptr);
-            size_t ne = row_diff*ne00;
-            src0_as_f16.alloc(ne);
-            to_fp16_cuda(src0_dd_i, src0_as_f16.get(), ne, stream);
-        }
-        const half * src0_ptr = src0->type == GGML_TYPE_F16 ? (const half *) src0_dd_i : src0_as_f16.get();
-
-        ggml_cuda_pool_alloc<half> src1_as_f16(ctx.pool(id));
-        if (src1->type != GGML_TYPE_F16) {
-            const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type);
-            GGML_ASSERT(to_fp16_cuda != nullptr);
-            size_t ne = src1_ncols*ne10;
-            src1_as_f16.alloc(ne);
-            to_fp16_cuda(src1_ddf_i, src1_as_f16.get(), ne, stream);
-        }
-        const half * src1_ptr = src1->type == GGML_TYPE_F16 ? (const half *) src1_ddf_i : src1_as_f16.get();
-        ggml_cuda_pool_alloc<half> dst_f16(ctx.pool(id), row_diff*src1_ncols);
-
-        const half alpha_f16 = 1.0f;
-        const half beta_f16 = 0.0f;
-
-        CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(id), stream));
-        CUBLAS_CHECK(
-            cublasGemmEx(ctx.cublas_handle(id), CUBLAS_OP_T, CUBLAS_OP_N,
-                    row_diff, src1_ncols, ne10,
-                    &alpha_f16, src0_ptr,       CUDA_R_16F, ne00,
-                                src1_ptr,       CUDA_R_16F, ne10,
-                    &beta_f16,   dst_f16.get(), CUDA_R_16F, ldc,
-                    CUBLAS_COMPUTE_16F,
-                    CUBLAS_GEMM_DEFAULT_TENSOR_OP));
-
-        const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16);
-        to_fp32_cuda(dst_f16.get(), dst_dd_i, row_diff*src1_ncols, stream);
-    } else {
-        ggml_cuda_pool_alloc<float> src0_ddq_as_f32(ctx.pool(id));
-        ggml_cuda_pool_alloc<float> src1_ddq_as_f32(ctx.pool(id));
-
-        if (src0->type != GGML_TYPE_F32) {
-            const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(src0->type);
-            GGML_ASSERT(to_fp32_cuda != nullptr);
-            src0_ddq_as_f32.alloc(row_diff*ne00);
-            to_fp32_cuda(src0_dd_i, src0_ddq_as_f32.get(), row_diff*ne00, stream);
-        }
-        if (src1->type != GGML_TYPE_F32) {
-            const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(src1->type);
-            GGML_ASSERT(to_fp32_cuda != nullptr);
-            src1_ddq_as_f32.alloc(src1_ncols*ne10);
-            to_fp32_cuda(src1_ddf_i, src1_ddq_as_f32.get(), src1_ncols*ne10, stream);
-        }
-
-        const float * src0_ddf_i = src0->type == GGML_TYPE_F32 ? (const float *) src0_dd_i : src0_ddq_as_f32.get();
-        const float * src1_ddf1_i = src1->type == GGML_TYPE_F32 ? (const float *) src1_ddf_i : src1_ddq_as_f32.get();
-
-        const float alpha = 1.0f;
-        const float beta = 0.0f;
-
-        CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(id), stream));
-        CUBLAS_CHECK(
-            cublasSgemm(ctx.cublas_handle(id), CUBLAS_OP_T, CUBLAS_OP_N,
-                    row_diff, src1_ncols, ne10,
-                    &alpha, src0_ddf_i,  ne00,
-                            src1_ddf1_i, ne10,
-                    &beta,  dst_dd_i,    ldc));
-    }
-
-    GGML_UNUSED(dst);
-    GGML_UNUSED(src1_ddq_i);
-    GGML_UNUSED(src1_padded_row_size);
-}
-
-static void ggml_cuda_set_peer_access(const int n_tokens, int main_device) {
-    static bool peer_access_enabled = false;
-
-    const bool enable_peer_access = n_tokens <= GGML_CUDA_PEER_MAX_BATCH_SIZE;
-
-    if (peer_access_enabled == enable_peer_access) {
-        return;
-    }
-
-#ifdef NDEBUG
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        ggml_cuda_set_device(id);
-        CUDA_CHECK(cudaDeviceSynchronize());
-    }
-
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        ggml_cuda_set_device(id);
-
-        for (int id_other = 0; id_other < ggml_backend_cuda_get_device_count(); ++id_other) {
-            if (id == id_other) {
-                continue;
-            }
-            if (id != main_device && id_other != main_device) {
-                continue;
-            }
-
-            int can_access_peer;
-            CUDA_CHECK(cudaDeviceCanAccessPeer(&can_access_peer, id, id_other));
-            if (can_access_peer) {
-                if (enable_peer_access) {
-                    cudaError_t err = cudaDeviceEnablePeerAccess(id_other, 0);
-                    if (err != cudaErrorPeerAccessAlreadyEnabled) {
-                        CUDA_CHECK(err);
-                    }
-                } else {
-                    cudaError_t err = cudaDeviceDisablePeerAccess(id_other);
-                    if (err != cudaErrorPeerAccessNotEnabled) {
-                        CUDA_CHECK(err);
-                    }
-                }
-            }
-        }
-    }
-
-    ggml_cuda_set_device(main_device);
-#endif // NDEBUG
-
-    peer_access_enabled = enable_peer_access;
-
-    GGML_UNUSED(main_device);
-}
-
-static cudaError_t ggml_cuda_Memcpy2DPeerAsync(
-    void * dst, int dstDevice, size_t dpitch, void * src, int srcDevice, size_t spitch, size_t width, size_t height, cudaStream_t stream) {
-
-#if !defined(GGML_USE_HIPBLAS)
-    // cudaMemcpy2DAsync may fail with copies between vmm pools of different devices
-    cudaMemcpy3DPeerParms p = {};
-    p.dstDevice = dstDevice;
-    p.dstPtr = make_cudaPitchedPtr(dst, dpitch, dpitch, height);
-    p.srcDevice = srcDevice;
-    p.srcPtr = make_cudaPitchedPtr(src, spitch, spitch, height);
-    p.extent = make_cudaExtent(width, height, 1);
-    return cudaMemcpy3DPeerAsync(&p, stream);
-#else
-    // HIP does not support cudaMemcpy3DPeerAsync or vmm pools
-    GGML_UNUSED(dstDevice);
-    GGML_UNUSED(srcDevice);
-    return cudaMemcpy2DAsync(dst, dpitch, src, spitch, width, height, cudaMemcpyDeviceToDevice, stream);
-#endif // !defined(GGML_USE_HIPBLAS)
-}
-
-static void ggml_cuda_op_mul_mat(
-    ggml_backend_cuda_context & ctx,
-    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, ggml_cuda_op_mul_mat_t op,
-    quantize_cuda_t quantize_src1) {
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-    const int64_t ne02 = src0->ne[2];
-    const int64_t ne03 = src0->ne[3];
-
-    const int64_t ne10 = src1->ne[0];
-    const int64_t ne11 = src1->ne[1];
-    const int64_t ne12 = src1->ne[2];
-    const int64_t ne13 = src1->ne[3];
-    const int64_t nrows1 = ggml_nrows(src1);
-
-    GGML_ASSERT(ne03 == ne13);
-
-    const int64_t ne0 = dst->ne[0];
-    const int64_t ne1 = dst->ne[1];
-
-    const int64_t nb2 = dst->nb[2];
-    const int64_t nb3 = dst->nb[3];
-
-    GGML_ASSERT(ggml_backend_buffer_is_cuda(dst->buffer));
-    GGML_ASSERT(ggml_backend_buffer_is_cuda(src1->buffer));
-    ggml_backend_cuda_buffer_context * src1_ctx = (ggml_backend_cuda_buffer_context *) src1->buffer->context;
-    ggml_backend_cuda_buffer_context * dst_ctx  = (ggml_backend_cuda_buffer_context *) dst->buffer->context;
-
-    GGML_ASSERT(src1->type == GGML_TYPE_F32 || (src1->ne[2] == 1 && src1->ne[3] == 1));
-
-    GGML_ASSERT(ne12 >= ne02 && ne12 % ne02 == 0);
-
-    const int64_t i02_divisor = ne12 / ne02;
-
-    const size_t src0_ts = ggml_type_size(src0->type);
-    const size_t src0_bs = ggml_blck_size(src0->type);
-    const size_t q8_1_ts = sizeof(block_q8_1);
-    const size_t q8_1_bs = QK8_1;
-
-    const bool src0_is_contiguous = ggml_is_contiguous(src0);
-    const bool src1_is_contiguous = ggml_is_contiguous(src1);
-
-    const int64_t src1_padded_col_size = GGML_PAD(ne10, MATRIX_ROW_PADDING);
-
-    const bool split = ggml_backend_buffer_is_cuda_split(src0->buffer);
-    GGML_ASSERT(!(split && ne02 > 1));
-    GGML_ASSERT(!(split && ne03 > 1));
-    GGML_ASSERT(!(split && ne02 < ne12));
-
-    ggml_tensor_extra_gpu * src0_extra = split ? (ggml_tensor_extra_gpu *) src0->extra : nullptr;
-
-
-    std::array<float, GGML_CUDA_MAX_DEVICES> tensor_split;
-    if (split) {
-        ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *) src0->buffer->buft->context;
-        tensor_split = buft_ctx->tensor_split;
-    }
-
-    struct dev_data {
-        int cc;
-
-        ggml_cuda_pool_alloc<char>   src0_dd_alloc;
-        ggml_cuda_pool_alloc<float> src1_ddf_alloc;
-        ggml_cuda_pool_alloc<char>  src1_ddq_alloc;
-        ggml_cuda_pool_alloc<float>   dst_dd_alloc;
-
-        char  *  src0_dd = nullptr;
-        float * src1_ddf = nullptr; // float
-        char  * src1_ddq = nullptr; // q8_1
-        float *   dst_dd = nullptr;
-
-        int64_t  row_low;
-        int64_t row_high;
-    };
-
-    dev_data dev[GGML_CUDA_MAX_DEVICES];
-
-    int used_devices = 0;
-
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        dev[id].cc = ggml_cuda_info().devices[id].cc;
-
-        // by default, use all rows
-        dev[id].row_low  = 0;
-        dev[id].row_high = ne01;
-
-        // for multi GPU, get the row boundaries from tensor split
-        // and round to mul_mat_q tile sizes
-        if (split) {
-            const int64_t rounding = get_row_rounding(tensor_split);
-
-            if (id != 0) {
-                dev[id].row_low  = ne01*tensor_split[id];
-                if (dev[id].row_low < ne01) {
-                    dev[id].row_low -= dev[id].row_low % rounding;
-                }
-            }
-
-            if (id != ggml_backend_cuda_get_device_count() - 1) {
-                dev[id].row_high  = ne01*tensor_split[id + 1];
-                if (dev[id].row_high < ne01) {
-                    dev[id].row_high -= dev[id].row_high % rounding;
-                }
-            }
-        }
-    }
-
-    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-        if ((!split && id != ctx.device) || dev[id].row_low == dev[id].row_high) {
-            continue;
-        }
-
-        used_devices++;
-
-        const bool src1_on_device = id == src1_ctx->device;
-        const bool  dst_on_device = id == dst_ctx->device;
-
-        ggml_cuda_set_device(id);
-        cudaStream_t stream = ctx.stream(id, 0);
-
-        if (src0_is_contiguous) {
-            dev[id].src0_dd = split ? (char *) src0_extra->data_device[id] : (char *) src0->data;
-        } else {
-            dev[id].src0_dd = dev[id].src0_dd_alloc.alloc(ctx.pool(id), ggml_nbytes(src0));
-        }
-
-        if (src1_on_device && src1_is_contiguous) {
-            dev[id].src1_ddf = (float *) src1->data;
-        } else {
-            dev[id].src1_ddf = dev[id].src1_ddf_alloc.alloc(ctx.pool(id), ggml_nelements(src1));
-        }
-
-        if (quantize_src1) {
-            size_t src_1_ddq_size = nrows1*src1_padded_col_size*q8_1_ts/q8_1_bs;
-            if (quantize_src1 == quantize_mmq_q8_1_cuda) {
-                src_1_ddq_size += get_mmq_x_max_host(dev[id].cc)*sizeof(block_q8_1_mmq);
-            }
-            dev[id].src1_ddq = dev[id].src1_ddq_alloc.alloc(ctx.pool(id), src_1_ddq_size);
-
-            if (src1_on_device && src1_is_contiguous) {
-                quantize_src1(dev[id].src1_ddf, dev[id].src1_ddq, ne10, ne11, ne12*ne13, src1_padded_col_size, src0->type, stream);
-                CUDA_CHECK(cudaGetLastError());
-            }
-        }
-
-        if (dst_on_device) {
-            dev[id].dst_dd = (float *) dst->data;
-        } else {
-            const size_t size_dst_ddf = split ? (dev[id].row_high - dev[id].row_low)*ne1 : ggml_nelements(dst);
-            dev[id].dst_dd = dev[id].dst_dd_alloc.alloc(ctx.pool(id), size_dst_ddf);
-        }
-    }
-
-    // if multiple devices are used they need to wait for the main device
-    // here an event is recorded that signals that the main device has finished calculating the input data
-    if (split && used_devices > 1) {
-        ggml_cuda_set_device(ctx.device);
-        CUDA_CHECK(cudaEventRecord(src0_extra->events[ctx.device][0], ctx.stream()));
-    }
-
-    const int64_t src1_col_stride = split && used_devices > 1 ? MUL_MAT_SRC1_COL_STRIDE : ne11;
-    for (int64_t src1_col_0 = 0; src1_col_0 < ne11; src1_col_0 += src1_col_stride) {
-        const int64_t is = split ? (src1_col_0/src1_col_stride) % GGML_CUDA_MAX_STREAMS : 0;
-        const int64_t src1_ncols = src1_col_0 + src1_col_stride > ne11 ? ne11 - src1_col_0 : src1_col_stride;
-
-        for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-            if ((!split && id != ctx.device) || dev[id].row_low == dev[id].row_high) {
-                continue;
-            }
-
-            const bool src1_on_device = id == src1_ctx->device;
-            const bool  dst_on_device = id == dst_ctx->device;
-            const int64_t row_diff = dev[id].row_high - dev[id].row_low;
-
-            ggml_cuda_set_device(id);
-            cudaStream_t stream = ctx.stream(id, is);
-
-            // wait for main GPU data if necessary
-            if (split && (id != ctx.device || is != 0)) {
-                CUDA_CHECK(cudaStreamWaitEvent(stream, src0_extra->events[ctx.device][0], 0));
-            }
-
-            for (int64_t i0 = 0; i0 < ne13*ne12; ++i0) {
-                const int64_t i03 = i0 / ne12;
-                const int64_t i02 = i0 % ne12;
-
-                size_t src1_ddq_i_offset = i0*ne11 * src1_padded_col_size*q8_1_ts/q8_1_bs;
-                if (quantize_src1 == quantize_mmq_q8_1_cuda) {
-                    src1_ddq_i_offset += src1_col_0 * sizeof(block_q8_1_mmq);
-                } else {
-                    src1_ddq_i_offset += src1_col_0 * src1_padded_col_size*q8_1_ts/q8_1_bs;
-                }
-
-                // for split tensors the data begins at i0 == i0_offset_low
-                char  *  src0_dd_i =  dev[id].src0_dd + (i0/i02_divisor) * (ne01*ne00*src0_ts)/src0_bs;
-                float * src1_ddf_i = dev[id].src1_ddf + (i0*ne11 + src1_col_0) * ne10;
-                char  * src1_ddq_i = dev[id].src1_ddq +  src1_ddq_i_offset;
-                float *   dst_dd_i =   dev[id].dst_dd + (i0*ne1  + src1_col_0) * (dst_on_device ? ne0 : row_diff);
-
-                // the main device memory buffer can be on VRAM scratch, with space for all partial results
-                // in that case an offset on dst_ddf_i is needed
-                if (id == ctx.device) {
-                    dst_dd_i += dev[id].row_low; // offset is 0 if no tensor split
-                }
-
-                // copy src0, src1 to device if necessary
-                if (src1_is_contiguous) {
-                    if (id != ctx.device) {
-                        if (quantize_src1) {
-                            char * src1_ddq_i_source = dev[ctx.device].src1_ddq + src1_ddq_i_offset;
-                            if (quantize_src1 == quantize_mmq_q8_1_cuda) {
-                                const size_t pitch = ne11*sizeof(block_q8_1_mmq);
-                                const size_t width = src1_ncols*sizeof(block_q8_1_mmq);
-                                const size_t height = src1_padded_col_size/(4*QK8_1);
-                                CUDA_CHECK(ggml_cuda_Memcpy2DPeerAsync(src1_ddq_i, id, pitch, src1_ddq_i_source, ctx.device, pitch, width, height, stream));
-                            } else {
-                                CUDA_CHECK(cudaMemcpyPeerAsync(
-                                    src1_ddq_i, id, src1_ddq_i_source, ctx.device, src1_ncols*src1_padded_col_size*q8_1_ts/q8_1_bs, stream));
-                            }
-                        } else {
-                            float * src1_ddf_i_source = (float *) src1->data;
-                            src1_ddf_i_source += (i0*ne11 + src1_col_0) * ne10;
-                            CUDA_CHECK(cudaMemcpyPeerAsync(src1_ddf_i, id, src1_ddf_i_source, ctx.device,
-                                                            src1_ncols*ne10*sizeof(float), stream));
-                        }
-                    }
-                } else if (src1_on_device && !src1_is_contiguous) {
-                    CUDA_CHECK(ggml_cuda_cpy_tensor_2d(
-                                src1_ddf_i, src1, i03, i02, src1_col_0, src1_col_0+src1_ncols, stream));
-                } else {
-                    GGML_ASSERT(false);
-                }
-
-                if (quantize_src1 && !src1_is_contiguous) {
-                    quantize_src1(src1_ddf_i, src1_ddq_i, ne10, src1_ncols, 1, src1_padded_col_size, src0->type, stream);
-                    CUDA_CHECK(cudaGetLastError());
-                }
-
-                if (src1_col_0 == 0 && !src0_is_contiguous && i02 % i02_divisor == 0) {
-                    CUDA_CHECK(ggml_cuda_cpy_tensor_2d(src0_dd_i, src0, i03, i02/i02_divisor, dev[id].row_low, dev[id].row_high, stream));
-                }
-
-                // do the computation
-                op(ctx, src0, src1, dst, src0_dd_i, src1_ddf_i, src1_ddq_i, dst_dd_i,
-                    dev[id].row_low, dev[id].row_high, src1_ncols, src1_padded_col_size, stream);
-                CUDA_CHECK(cudaGetLastError());
-
-                // copy dst to host or other device if necessary
-                if (!dst_on_device) {
-                    void * dst_off_device = dst->data;
-                    if (split) {
-                        // src0 = weight matrix is saved as a transposed matrix for better memory layout.
-                        // dst is NOT transposed.
-                        // The outputs of matrix matrix multiplications can therefore NOT simply be concatenated for >1 GPU.
-                        // Instead they need to be copied to the correct slice in ne0 = dst row index.
-                        // If dst is a vector with ne0 == 1 then you don't have to do this but it still produces correct results.
-                        float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3);
-                        GGML_ASSERT(dst->nb[1] == ne0*sizeof(float));
-                        dhf_dst_i += src1_col_0*ne0 + dev[id].row_low;
-                        CUDA_CHECK(ggml_cuda_Memcpy2DPeerAsync(
-                            dhf_dst_i, ctx.device, ne0*sizeof(float), dst_dd_i, id, row_diff*sizeof(float), row_diff*sizeof(float), src1_ncols, stream));
-                    } else {
-                        float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3);
-                        GGML_ASSERT(dst->nb[1] == ne0*sizeof(float));
-                        dhf_dst_i += src1_col_0*ne0;
-                        CUDA_CHECK(cudaMemcpyAsync(dhf_dst_i, dst_dd_i, src1_ncols*ne0*sizeof(float), cudaMemcpyDeviceToDevice, stream));
-                    }
-                }
-
-                // add event for the main device to wait on until other device is done
-                if (split && (id != ctx.device || is != 0)) {
-                    CUDA_CHECK(cudaEventRecord(src0_extra->events[id][is], stream));
-                }
-            }
-        }
-    }
-
-    // main device waits for all other devices to be finished
-    if (split && ggml_backend_cuda_get_device_count() > 1) {
-        int64_t is_max = (ne11 + MUL_MAT_SRC1_COL_STRIDE - 1) / MUL_MAT_SRC1_COL_STRIDE;
-        is_max = is_max <= GGML_CUDA_MAX_STREAMS ? is_max : GGML_CUDA_MAX_STREAMS;
-
-        ggml_cuda_set_device(ctx.device);
-        for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-            if (dev[id].row_low == dev[id].row_high) {
-                continue;
-            }
-            for (int64_t is = 0; is < is_max; ++is) {
-                CUDA_CHECK(cudaStreamWaitEvent(ctx.stream(), src0_extra->events[id][is], 0));
-            }
-        }
-    }
-}
-
-static void ggml_cuda_mul_mat_vec_p021(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_ASSERT(ggml_is_permuted(src0) && ggml_is_permuted(src1));
-    GGML_ASSERT(ggml_backend_buffer_is_cuda(src0->buffer));
-    GGML_ASSERT(src0->nb[0] <= src0->nb[1] && src0->nb[2] <= src0->nb[3]); // 0213 permutation
-    GGML_ASSERT(src1->nb[0] <= src1->nb[1] && src1->nb[2] <= src1->nb[3]); // 0213 permutation
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-    const int64_t ne02 = src0->ne[2];
-
-    const int64_t ne12 = src1->ne[2];
-
-    cudaStream_t main_stream = ctx.stream();
-
-    void  * src0_ddq = src0->data;
-    float * src1_ddf = (float *) src1->data;
-    float * dst_ddf  = (float *) dst->data;
-
-    ggml_mul_mat_p021_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, ne02, ne12, main_stream);
-}
-
-static void ggml_cuda_mul_mat_vec_nc(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_ASSERT(!ggml_is_transposed(src0));
-    GGML_ASSERT(!ggml_is_transposed(src1));
-    GGML_ASSERT(!ggml_is_permuted(src0));
-    GGML_ASSERT(ggml_backend_buffer_is_cuda(src0->buffer));
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-    const int64_t ne02 = src0->ne[2];
-
-    const int64_t nb01 = src0->nb[1];
-    const int64_t nb02 = src0->nb[2];
-
-    const int64_t ne12 = src1->ne[2];
-
-    cudaStream_t main_stream = ctx.stream();
-
-    void  * src0_ddq = src0->data;
-    float * src1_ddf = (float *) src1->data;
-    float * dst_ddf  = (float *) dst->data;
-
-    const int64_t row_stride_x = nb01 / sizeof(half);
-    const int64_t channel_stride_x = nb02 / sizeof(half);
-
-    ggml_mul_mat_vec_nc_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, ne12, channel_stride_x, main_stream);
-}
-
-static __global__ void k_compute_batched_ptrs(
-        const half * src0_as_f16, const half * src1_as_f16, char * dst,
-        const void ** ptrs_src, void ** ptrs_dst,
-        int64_t ne12, int64_t ne13,
-        int64_t ne23,
-        size_t  nb02, size_t  nb03,
-        size_t  nb12, size_t  nb13,
-        size_t  nbd2, size_t  nbd3,
-        int64_t r2,   int64_t r3) {
-    int64_t i13 = blockIdx.x * blockDim.x + threadIdx.x;
-    int64_t i12 = blockIdx.y * blockDim.y + threadIdx.y;
-
-    if (i13 >= ne13 || i12 >= ne12) {
-        return;
-    }
-
-    int64_t i03 = i13 / r3;
-    int64_t i02 = i12 / r2;
-
-    ptrs_src[0*ne23 + i12 + i13*ne12] = (const char *) src0_as_f16 + i02*nb02 + i03*nb03;
-    ptrs_src[1*ne23 + i12 + i13*ne12] = (const char *) src1_as_f16 + i12*nb12 + i13*nb13;
-    ptrs_dst[0*ne23 + i12 + i13*ne12] = (      char *)         dst + i12*nbd2 + i13*nbd3;
-}
-
-static void ggml_cuda_mul_mat_batched_cublas(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_ASSERT(!ggml_is_transposed(src0));
-    GGML_ASSERT(!ggml_is_transposed(src1));
-
-    GGML_ASSERT(ggml_backend_buffer_is_cuda(src0->buffer));
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int64_t ne_dst = ggml_nelements(dst);
-
-    cudaStream_t main_stream = ctx.stream();
-
-    CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(), main_stream));
-
-    void * src0_ddq = src0->data;
-    half * src0_f16 = (half *) src0_ddq;
-    float * src1_ddf = (float *) src1->data;
-    float * dst_ddf  = (float *) dst->data;
-
-    // convert src1 to fp16
-    ggml_cuda_pool_alloc<half> src1_f16_alloc(ctx.pool());
-    if (src1->type != GGML_TYPE_F16) {
-        const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type);
-        const int64_t ne_src1 = ggml_nelements(src1);
-        src1_f16_alloc.alloc(ne_src1);
-        GGML_ASSERT(to_fp16_cuda != nullptr);
-        to_fp16_cuda(src1_ddf, src1_f16_alloc.get(), ne_src1, main_stream);
-    }
-    half * src1_f16 = src1->type == GGML_TYPE_F16 ? (half *) src1_ddf : src1_f16_alloc.get();
-
-    ggml_cuda_pool_alloc<half> dst_f16(ctx.pool());
-    char * dst_t;
-
-    cublasComputeType_t cu_compute_type = CUBLAS_COMPUTE_16F;
-    cudaDataType_t      cu_data_type    = CUDA_R_16F;
-
-    // dst strides
-    size_t nbd2 = dst->nb[2];
-    size_t nbd3 = dst->nb[3];
-
-    const half  alpha_f16 = 1.0f;
-    const half  beta_f16  = 0.0f;
-
-    const float alpha_f32 = 1.0f;
-    const float beta_f32  = 0.0f;
-
-    const void * alpha = &alpha_f16;
-    const void * beta  = &beta_f16;
-
-    if (dst->op_params[0] == GGML_PREC_DEFAULT) {
-        dst_t = (char *) dst_f16.alloc(ne_dst);
-
-        nbd2 /= sizeof(float) / sizeof(half);
-        nbd3 /= sizeof(float) / sizeof(half);
-    } else {
-        dst_t = (char *) dst_ddf;
-
-        cu_compute_type = CUBLAS_COMPUTE_32F;
-        cu_data_type    = CUDA_R_32F;
-
-        alpha = &alpha_f32;
-        beta  = &beta_f32;
-    }
-
-    GGML_ASSERT(ne12 % ne02 == 0);
-    GGML_ASSERT(ne13 % ne03 == 0);
-
-    // broadcast factors
-    const int64_t r2 = ne12/ne02;
-    const int64_t r3 = ne13/ne03;
-
-#if 0
-    // use cublasGemmEx
-    {
-        for (int i13 = 0; i13 < ne13; ++i13) {
-            for (int i12 = 0; i12 < ne12; ++i12) {
-                int i03 = i13 / r3;
-                int i02 = i12 / r2;
-
-                CUBLAS_CHECK(
-                        cublasGemmEx(g_cublas_handles[g_main_device], CUBLAS_OP_T, CUBLAS_OP_N,
-                            ne01, ne11, ne10,
-                            alpha, (const char *) src0_as_f16 + i02*src0->nb[2]   + i03*src0->nb[3]  , CUDA_R_16F,   nb01/sizeof(half),
-                                   (const char *) src1_as_f16 + i12*src1->nb[2]/2 + i13*src1->nb[3]/2, CUDA_R_16F,   nb11/sizeof(float),
-                            beta,  (      char *)       dst_t + i12*nbd2          + i13*nbd3,          cu_data_type, ne01,
-                            cu_compute_type,
-                            CUBLAS_GEMM_DEFAULT_TENSOR_OP));
-            }
-        }
-    }
-#else
-    if (r2 == 1 && r3 == 1 && ggml_is_contiguous_2(src0) && ggml_is_contiguous_2(src1)) {
-        // there is no broadcast and src0, src1 are contiguous across dims 2, 3
-        // use cublasGemmStridedBatchedEx
-        CUBLAS_CHECK(
-        cublasGemmStridedBatchedEx(ctx.cublas_handle(), CUBLAS_OP_T, CUBLAS_OP_N,
-                ne01, ne11, ne10,
-                alpha, (const char *) src0_f16, CUDA_R_16F,   nb01/nb00, nb02/nb00,  // strideA
-                       (const char *) src1_f16, CUDA_R_16F,   nb11/nb10, nb12/nb10,  // strideB
-                beta,  (      char *)    dst_t, cu_data_type, ne01,       nb2/nb0,   // strideC
-                ne12*ne13,
-                cu_compute_type,
-                CUBLAS_GEMM_DEFAULT_TENSOR_OP));
-    } else {
-        // use cublasGemmBatchedEx
-        const int ne23 = ne12*ne13;
-
-        ggml_cuda_pool_alloc<const void *> ptrs_src(ctx.pool(), 2*ne23);
-        ggml_cuda_pool_alloc<      void *> ptrs_dst(ctx.pool(), 1*ne23);
-
-        dim3 block_dims(ne13, ne12);
-        k_compute_batched_ptrs<<<1, block_dims, 0, main_stream>>>(
-                src0_f16, src1_f16, dst_t,
-                ptrs_src.get(), ptrs_dst.get(),
-                ne12, ne13,
-                ne23,
-                nb02, nb03,
-                src1->type == GGML_TYPE_F16 ? nb12 : nb12/2,
-                src1->type == GGML_TYPE_F16 ? nb13 : nb13/2,
-                nbd2, nbd3,
-                r2, r3);
-        CUDA_CHECK(cudaGetLastError());
-
-        CUBLAS_CHECK(
-        cublasGemmBatchedEx(ctx.cublas_handle(), CUBLAS_OP_T, CUBLAS_OP_N,
-                ne01, ne11, ne10,
-                alpha, (const void **) (ptrs_src.get() + 0*ne23), CUDA_R_16F,   nb01/nb00,
-                       (const void **) (ptrs_src.get() + 1*ne23), CUDA_R_16F,   nb11/nb10,
-                beta,  (      void **) (ptrs_dst.get() + 0*ne23), cu_data_type, ne01,
-                ne23,
-                cu_compute_type,
-                CUBLAS_GEMM_DEFAULT_TENSOR_OP));
-    }
-#endif
-
-    if (dst->op_params[0] == GGML_PREC_DEFAULT) {
-        const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16);
-        to_fp32_cuda(dst_f16.get(), dst_ddf, ne_dst, main_stream);
-    }
-}
-
-static void ggml_cuda_mul_mat(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    const bool split = ggml_backend_buffer_is_cuda_split(src0->buffer);
-
-    int64_t min_compute_capability = INT_MAX;
-
-    bool any_pascal_with_slow_fp16 = false;
-    if (split) {
-        ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *) src0->buffer->buft->context;
-        auto & tensor_split = buft_ctx->tensor_split;
-        for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
-            // skip devices that are not going to do any work:
-            if (tensor_split[id] >= (id + 1 < ggml_backend_cuda_get_device_count() ? tensor_split[id + 1] : 1.0f)) {
-                continue;
-            }
-
-            if (min_compute_capability > ggml_cuda_info().devices[id].cc) {
-                min_compute_capability = ggml_cuda_info().devices[id].cc;
-            }
-            if (ggml_cuda_info().devices[id].cc == 610) {
-                any_pascal_with_slow_fp16 = true;
-            }
-        }
-    } else {
-        min_compute_capability    = ggml_cuda_info().devices[ctx.device].cc;
-        any_pascal_with_slow_fp16 = ggml_cuda_info().devices[ctx.device].cc == 610;
-    }
-
-    // check data types and tensor shapes for custom matrix multiplication kernels:
-    bool use_dequantize_mul_mat_vec = (ggml_is_quantized(src0->type) || src0->type == GGML_TYPE_F16)
-        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32
-        && src0->ne[0] % GGML_CUDA_DMMV_X == 0 && src1->ne[1] == 1;
-
-    bool          use_mul_mat_vec_q =  ggml_is_quantized(src0->type)
-        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32
-        && src1->ne[1] <= MMVQ_MAX_BATCH_SIZE;
-
-    bool              use_mul_mat_q =  ggml_cuda_supports_mmq(src0->type)
-        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32;
-
-#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-
-    const bool fp16_performance_good = min_compute_capability >= CC_RDNA1;
-
-#ifdef CUDA_USE_TENSOR_CORES
-    use_mul_mat_q = use_mul_mat_q && min_compute_capability < CC_RDNA3;
-#endif // CUDA_USE_TENSOR_CORES
-
-#else
-
-    // fp16 performance is good on Volta or newer and on P100 (compute capability 6.0)
-    const bool fp16_performance_good = min_compute_capability >= CC_PASCAL && !any_pascal_with_slow_fp16;
-
-    // mmvq and mmq need the __dp4a instruction which on NVIDIA is only available for CC >= 6.1
-    use_mul_mat_vec_q = use_mul_mat_vec_q && min_compute_capability >= MIN_CC_DP4A;
-    use_mul_mat_q     = use_mul_mat_q     && min_compute_capability >= MIN_CC_DP4A;
-
-#ifdef CUDA_USE_TENSOR_CORES
-    // when tensor cores are available, use them for large batch size
-    // ref: https://github.com/ggerganov/llama.cpp/pull/3776
-    use_mul_mat_q     = use_mul_mat_q     && (!fp16_performance_good || src1->ne[1] <= MMQ_MAX_BATCH_SIZE);
-#endif // CUDA_USE_TENSOR_CORES
-
-#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-
-    // if mmvq is available it's a better choice than dmmv:
-#ifndef GGML_CUDA_FORCE_DMMV
-    use_dequantize_mul_mat_vec = use_dequantize_mul_mat_vec && !use_mul_mat_vec_q;
-#endif // GGML_CUDA_FORCE_DMMV
-
-    // debug helpers
-    //printf("src0: %8d %8d %8d %8d\n", src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3]);
-    //printf("      %8d %8d %8d %8d\n", src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3]);
-    //printf("src1: %8d %8d %8d %8d\n", src1->ne[0], src1->ne[1], src1->ne[2], src1->ne[3]);
-    //printf("      %8d %8d %8d %8d\n", src1->nb[0], src1->nb[1], src1->nb[2], src1->nb[3]);
-    //printf("src0 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src0), ggml_is_transposed(src0), ggml_type_name(src0->type), src0->name);
-    //printf("src1 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src1), ggml_is_transposed(src1), ggml_type_name(src1->type), src1->name);
-
-    if (!split && !fp16_performance_good && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) {
-        // KQ single-batch
-        ggml_cuda_mul_mat_vec_p021(ctx, src0, src1, dst);
-    } else if (!split && !fp16_performance_good && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) {
-        // KQV single-batch
-        ggml_cuda_mul_mat_vec_nc(ctx, src0, src1, dst);
-    } else if (!split && src0->type == GGML_TYPE_F16 && (src1->type == GGML_TYPE_F16 || fp16_performance_good) && !ggml_is_transposed(src0) && !ggml_is_transposed(src1) && src1->ne[2]*src1->ne[3] > 1) {
-        // KQ + KQV multi-batch
-        ggml_cuda_mul_mat_batched_cublas(ctx, src0, src1, dst);
-    } else if (use_dequantize_mul_mat_vec) {
-        ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_dequantize_mul_mat_vec, nullptr);
-    } else if (use_mul_mat_vec_q) {
-        ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_mul_mat_vec_q, quantize_row_q8_1_cuda);
-    } else if (use_mul_mat_q) {
-        ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_mul_mat_q, quantize_mmq_q8_1_cuda);
-    } else {
-        ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_mul_mat_cublas, nullptr);
-    }
-}
-
-struct mmid_row_mapping {
-    int32_t i1;
-    int32_t i2;
-};
-
-static __global__ void k_copy_src1_to_contiguous(const char * __restrict__ src1_original, char * __restrict__ src1_contiguous,
-                                                 int * __restrict__ cur_src1_row, mmid_row_mapping * __restrict__ row_mapping,
-                                                 const char * __restrict ids, int64_t i02, size_t ids_nb1, size_t ids_nb0,
-                                                 int64_t ne11, int64_t ne10,
-                                                 size_t nb11, size_t nb12) {
-    int32_t iid1 = blockIdx.x;
-    int32_t id = blockIdx.y;
-
-    const int32_t row_id_i = *(const int32_t *) (ids + iid1*ids_nb1 + id*ids_nb0);
-
-    if (row_id_i != i02) {
-        return;
-    }
-
-    const int64_t i11 = id % ne11;
-    const int64_t i12 = iid1;
-
-    __shared__ int src1_row;
-    if (threadIdx.x == 0) {
-        src1_row = atomicAdd(cur_src1_row, 1);
-        row_mapping[src1_row] = {id, iid1};
-    }
-    __syncthreads();
-
-    const float * src1_row_original = (const float *)(src1_original + i11*nb11 + i12*nb12);
-    float * src1_row_contiguous = (float *)(src1_contiguous + src1_row*nb11);
-
-    for (int i = threadIdx.x; i < ne10; i += blockDim.x) {
-        src1_row_contiguous[i] = src1_row_original[i];
-    }
-}
-
-static __global__ void k_copy_dst_from_contiguous(char * __restrict__ dst_original, const char * __restrict__ dst_contiguous,
-                                                  const mmid_row_mapping * __restrict__ row_mapping,
-                                                  int64_t ne0,
-                                                  size_t nb1, size_t nb2) {
-    int32_t i = blockIdx.x;
-
-    const int32_t i1 = row_mapping[i].i1;
-    const int32_t i2 = row_mapping[i].i2;
-
-    const float * dst_row_contiguous = (const float *)(dst_contiguous + i*nb1);
-    float * dst_row_original = (float *)(dst_original + i1*nb1 + i2*nb2);
-
-    for (int j = threadIdx.x; j < ne0; j += blockDim.x) {
-        dst_row_original[j] = dst_row_contiguous[j];
-    }
-}
-
-static void ggml_cuda_mul_mat_id(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const ggml_tensor * src1 = dst->src[1];
-    const ggml_tensor * ids  = dst->src[2];
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    GGML_ASSERT(!ggml_backend_buffer_is_cuda_split(src0->buffer) && "mul_mat_id does not support split buffers");
-
-    cudaStream_t stream = ctx.stream();
-
-    const int64_t n_as = ne02;
-    const int64_t n_ids = ids->ne[0];
-
-    std::vector<char> ids_host(ggml_nbytes(ids));
-    const char * ids_dev = (const char *) ids->data;
-    CUDA_CHECK(cudaMemcpyAsync(ids_host.data(), ids_dev, ggml_nbytes(ids), cudaMemcpyDeviceToHost, stream));
-    CUDA_CHECK(cudaStreamSynchronize(stream));
-
-    ggml_tensor src0_row = *src0;
-    ggml_tensor src1_row = *src1;
-    ggml_tensor dst_row  = *dst;
-
-    char * src0_original = (char *) src0->data;
-    char * src1_original = (char *) src1->data;
-    char * dst_original  = (char *)  dst->data;
-
-    src0_row.ne[2] = 1;
-    src0_row.ne[3] = 1;
-    src0_row.nb[3] = nb02;
-
-    src1_row.ne[1] = 1;
-    src1_row.ne[2] = 1;
-    src1_row.ne[3] = 1;
-    src1_row.nb[2] = nb11;
-    src1_row.nb[3] = nb11;
-
-    dst_row.ne[1] = 1;
-    dst_row.ne[2] = 1;
-    dst_row.ne[3] = 1;
-    dst_row.nb[2] = nb1;
-    dst_row.nb[3] = nb1;
-
-    if (ne12 == 1) {
-        for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) {
-            for (int64_t id = 0; id < n_ids; id++) {
-                const int32_t i02 = *(const int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]);
-
-                GGML_ASSERT(i02 >= 0 && i02 < n_as);
-
-                const int64_t i11 = id % ne11;
-                const int64_t i12 = iid1;
-
-                const int64_t i1 = id;
-                const int64_t i2 = i12;
-
-                src0_row.data = src0_original + i02*nb02;
-                src1_row.data = src1_original + i11*nb11 + i12*nb12;
-                dst_row.data  =  dst_original + i1*nb1   + i2*nb2;
-
-                ggml_cuda_mul_mat(ctx, &src0_row, &src1_row, &dst_row);
-            }
-        }
-    } else {
-        ggml_cuda_pool_alloc<char> src1_contiguous(ctx.pool(), sizeof(float)*ggml_nelements(src1));
-        ggml_cuda_pool_alloc<char>  dst_contiguous(ctx.pool(), sizeof(float)*ggml_nelements(dst));
-
-        src1_row.data = src1_contiguous.get();
-        dst_row.data  =  dst_contiguous.get();
-
-        for (int64_t i02 = 0; i02 < n_as; i02++) {
-            int64_t num_src1_rows = 0;
-
-            for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) {
-                for (int64_t id = 0; id < n_ids; id++) {
-                    const int32_t row_id_i = *(const int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]);
-
-                    GGML_ASSERT(row_id_i >= 0 && row_id_i < n_as);
-
-                    if (row_id_i != i02) {
-                        continue;
-                    }
-
-                    num_src1_rows++;
-                }
-            }
-
-            if (num_src1_rows == 0) {
-                continue;
-            }
-
-            ggml_cuda_pool_alloc<int> dev_cur_src1_row(ctx.pool(), 1);
-            ggml_cuda_pool_alloc<mmid_row_mapping> dev_row_mapping(ctx.pool(), num_src1_rows);
-            CUDA_CHECK(cudaMemsetAsync(dev_cur_src1_row.get(), 0, sizeof(int), stream));
-
-            {
-                dim3 block_dims(std::min((unsigned int)ne10, 768u));
-                dim3 grid_dims(ids->ne[1], n_ids);
-                k_copy_src1_to_contiguous<<<grid_dims, block_dims, 0, stream>>>(
-                        src1_original, src1_contiguous.get(),
-                        dev_cur_src1_row.get(), dev_row_mapping.get(),
-                        ids_dev, i02, ids->nb[1], ids->nb[0],
-                        ne11, ne10,
-                        nb11, nb12);
-                CUDA_CHECK(cudaGetLastError());
-            }
-
-            src0_row.data = src0_original + i02*nb02;
-
-            GGML_ASSERT(nb11 == sizeof(float)*ne10);
-            GGML_ASSERT(nb1 == sizeof(float)*ne0);
-
-            src1_row.ne[1] = num_src1_rows;
-            src1_row.nb[1] = nb11;
-            src1_row.nb[2] = num_src1_rows*nb11;
-            src1_row.nb[3] = num_src1_rows*nb11;
-
-            dst_row.ne[1] = num_src1_rows;
-            dst_row.nb[1] = nb1;
-            dst_row.nb[2] = num_src1_rows*nb1;
-            dst_row.nb[3] = num_src1_rows*nb1;
-
-            ggml_cuda_mul_mat(ctx, &src0_row, &src1_row, &dst_row);
-
-            {
-                dim3 block_dims(std::min((unsigned int)ne0, 768u));
-                dim3 grid_dims(num_src1_rows);
-                k_copy_dst_from_contiguous<<<grid_dims, block_dims, 0, stream>>>(
-                        dst_original, dst_contiguous.get(),
-                        dev_row_mapping.get(),
-                        ne0,
-                        nb1, nb2);
-                CUDA_CHECK(cudaGetLastError());
-            }
-        }
-    }
-}
-
-static bool ggml_cuda_compute_forward(ggml_backend_cuda_context & ctx, struct ggml_tensor * dst) {
-    // why is this here instead of mul_mat?
-    if (dst->src[0] != nullptr && ggml_backend_buffer_is_cuda_split(dst->src[0]->buffer)) {
-        ggml_cuda_set_peer_access(dst->src[1]->ne[1], ctx.device);
-    }
-
-    switch (dst->op) {
-        case GGML_OP_REPEAT:
-            ggml_cuda_op_repeat(ctx, dst);
-            break;
-        case GGML_OP_GET_ROWS:
-            ggml_cuda_op_get_rows(ctx, dst);
-            break;
-        case GGML_OP_DUP:
-            ggml_cuda_dup(ctx, dst);
-            break;
-        case GGML_OP_CPY:
-            ggml_cuda_cpy(ctx, dst->src[0], dst->src[1]);
-            break;
-        case GGML_OP_CONT:
-            ggml_cuda_dup(ctx, dst);
-            break;
-        case GGML_OP_ADD:
-            ggml_cuda_op_add(ctx, dst);
-            break;
-        case GGML_OP_ACC:
-            ggml_cuda_op_acc(ctx, dst);
-            break;
-        case GGML_OP_MUL:
-            ggml_cuda_op_mul(ctx, dst);
-            break;
-        case GGML_OP_DIV:
-            ggml_cuda_op_div(ctx, dst);
-            break;
-        case GGML_OP_UNARY:
-            switch (ggml_get_unary_op(dst)) {
-                case GGML_UNARY_OP_GELU:
-                    ggml_cuda_op_gelu(ctx, dst);
-                    break;
-                case GGML_UNARY_OP_SILU:
-                    ggml_cuda_op_silu(ctx, dst);
-                    break;
-                case GGML_UNARY_OP_GELU_QUICK:
-                    ggml_cuda_op_gelu_quick(ctx, dst);
-                    break;
-                case GGML_UNARY_OP_TANH:
-                    ggml_cuda_op_tanh(ctx, dst);
-                    break;
-                case GGML_UNARY_OP_RELU:
-                    ggml_cuda_op_relu(ctx, dst);
-                    break;
-                case GGML_UNARY_OP_SIGMOID:
-                    ggml_cuda_op_sigmoid(ctx, dst);
-                    break;
-                case GGML_UNARY_OP_HARDSIGMOID:
-                    ggml_cuda_op_hardsigmoid(ctx, dst);
-                    break;
-                case GGML_UNARY_OP_HARDSWISH:
-                    ggml_cuda_op_hardswish(ctx, dst);
-                    break;
-                default:
-                    return false;
-            }
-            break;
-        case GGML_OP_NORM:
-            ggml_cuda_op_norm(ctx, dst);
-            break;
-        case GGML_OP_GROUP_NORM:
-            ggml_cuda_op_group_norm(ctx, dst);
-            break;
-        case GGML_OP_CONCAT:
-            ggml_cuda_op_concat(ctx, dst);
-            break;
-        case GGML_OP_UPSCALE:
-            ggml_cuda_op_upscale(ctx, dst);
-            break;
-        case GGML_OP_PAD:
-            ggml_cuda_op_pad(ctx, dst);
-            break;
-        case GGML_OP_ARANGE:
-            ggml_cuda_op_arange(ctx, dst);
-            break;
-        case GGML_OP_TIMESTEP_EMBEDDING:
-            ggml_cuda_op_timestep_embedding(ctx, dst);
-            break;
-        case GGML_OP_LEAKY_RELU:
-            ggml_cuda_op_leaky_relu(ctx, dst);
-            break;
-        case GGML_OP_RMS_NORM:
-            ggml_cuda_op_rms_norm(ctx, dst);
-            break;
-        case GGML_OP_MUL_MAT:
-            if (dst->src[0]->ne[3] != dst->src[1]->ne[3]) {
-                GGML_CUDA_LOG_ERROR("%s: cannot compute %s: src0->ne[3] = %" PRId64 ", src1->ne[3] = %" PRId64 " - fallback to CPU\n", __func__, dst->name, dst->src[0]->ne[3], dst->src[1]->ne[3]);
-                return false;
-            } else {
-                ggml_cuda_mul_mat(ctx, dst->src[0], dst->src[1], dst);
-            }
-            break;
-        case GGML_OP_MUL_MAT_ID:
-            ggml_cuda_mul_mat_id(ctx, dst);
-            break;
-        case GGML_OP_SCALE:
-            ggml_cuda_op_scale(ctx, dst);
-            break;
-        case GGML_OP_SQR:
-            ggml_cuda_op_sqr(ctx, dst);
-            break;
-        case GGML_OP_CLAMP:
-            ggml_cuda_op_clamp(ctx, dst);
-            break;
-        case GGML_OP_NONE:
-        case GGML_OP_RESHAPE:
-        case GGML_OP_VIEW:
-        case GGML_OP_PERMUTE:
-        case GGML_OP_TRANSPOSE:
-                break;
-        case GGML_OP_DIAG_MASK_INF:
-            ggml_cuda_op_diag_mask_inf(ctx, dst);
-            break;
-        case GGML_OP_SOFT_MAX:
-            ggml_cuda_op_soft_max(ctx, dst);
-            break;
-        case GGML_OP_ROPE:
-            ggml_cuda_op_rope(ctx, dst);
-            break;
-        case GGML_OP_IM2COL:
-            ggml_cuda_op_im2col(ctx, dst);
-            break;
-        case GGML_OP_POOL_2D:
-            ggml_cuda_op_pool2d(ctx, dst);
-            break;
-        case GGML_OP_SUM_ROWS:
-            ggml_cuda_op_sum_rows(ctx, dst);
-            break;
-        case GGML_OP_ARGSORT:
-            ggml_cuda_op_argsort(ctx, dst);
-            break;
-        case GGML_OP_FLASH_ATTN_EXT:
-            ggml_cuda_flash_attn_ext(ctx, dst);
-            break;
-        default:
-            return false;
-    }
-
-    cudaError_t err = cudaGetLastError();
-    if (err != cudaSuccess) {
-        GGML_CUDA_LOG_ERROR("%s: %s failed\n", __func__, ggml_op_desc(dst));
-        CUDA_CHECK(err);
-    }
-
-    return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-// backend
-
-GGML_CALL static const char * ggml_backend_cuda_name(ggml_backend_t backend) {
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
-
-    return cuda_ctx->name.c_str();
-}
-
-GGML_CALL static void ggml_backend_cuda_free(ggml_backend_t backend) {
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
-
-    delete cuda_ctx;
-    delete backend;
-}
-
-GGML_CALL static ggml_backend_buffer_type_t ggml_backend_cuda_get_default_buffer_type(ggml_backend_t backend) {
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
-
-    return ggml_backend_cuda_buffer_type(cuda_ctx->device);
-}
-
-GGML_CALL static void ggml_backend_cuda_set_tensor_async(ggml_backend_t backend, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
-    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
-
-    GGML_ASSERT(buf->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device) && "unsupported buffer type");
-
-    CUDA_CHECK(cudaMemcpyAsync((char *)tensor->data + offset, data, size, cudaMemcpyHostToDevice, cuda_ctx->stream()));
-}
-
-GGML_CALL static void ggml_backend_cuda_get_tensor_async(ggml_backend_t backend, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
-    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
-
-    GGML_ASSERT(buf->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device) && "unsupported buffer type");
-
-    CUDA_CHECK(cudaMemcpyAsync(data, (const char *)tensor->data + offset, size, cudaMemcpyDeviceToHost, cuda_ctx->stream()));
-}
-
-GGML_CALL static bool ggml_backend_cuda_cpy_tensor_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, const ggml_tensor * src, ggml_tensor * dst) {
-    GGML_ASSERT(ggml_backend_is_cuda(backend_src) || ggml_backend_is_cuda(backend_dst));
-
-    ggml_backend_buffer_t buf_src = src->view_src ? src->view_src->buffer : src->buffer;
-    ggml_backend_buffer_t buf_dst = dst->view_src ? dst->view_src->buffer : dst->buffer;
-
-    if (!ggml_backend_buffer_is_cuda(src->buffer)) {
-        return false;
-    }
-
-    if (!ggml_backend_buffer_is_cuda(dst->buffer)) {
-        return false;
-    }
-
-    // device -> device
-    ggml_backend_cuda_context * cuda_ctx_src = (ggml_backend_cuda_context *)backend_src->context;
-    ggml_backend_cuda_context * cuda_ctx_dst = (ggml_backend_cuda_context *)backend_dst->context;
-
-    if (backend_src != backend_dst) {
-        ggml_backend_cuda_buffer_context * buf_ctx_src = (ggml_backend_cuda_buffer_context *)buf_src->context;
-        ggml_backend_cuda_buffer_context * buf_ctx_dst = (ggml_backend_cuda_buffer_context *)buf_dst->context;
-
-        GGML_ASSERT(cuda_ctx_src->device == buf_ctx_src->device);
-        GGML_ASSERT(cuda_ctx_dst->device == buf_ctx_dst->device);
-
-        // copy on src stream
-        if (cuda_ctx_src->device == cuda_ctx_dst->device) {
-            CUDA_CHECK(cudaMemcpyAsync(dst->data, src->data, ggml_nbytes(dst), cudaMemcpyDeviceToDevice, cuda_ctx_dst->stream()));
-        } else {
-#ifdef GGML_CUDA_NO_PEER_COPY
-            return false;
-#else
-            CUDA_CHECK(cudaMemcpyPeerAsync(dst->data, cuda_ctx_dst->device, src->data, cuda_ctx_src->device, ggml_nbytes(dst), cuda_ctx_src->stream()));
-#endif
-        }
-
-        // record event on src stream
-        if (!cuda_ctx_src->copy_event) {
-            ggml_cuda_set_device(cuda_ctx_src->device);
-            CUDA_CHECK(cudaEventCreateWithFlags(&cuda_ctx_src->copy_event, cudaEventDisableTiming));
-        }
-
-        CUDA_CHECK(cudaEventRecord(cuda_ctx_src->copy_event, cuda_ctx_src->stream()));
-
-        // wait on dst stream for the copy to complete
-        CUDA_CHECK(cudaStreamWaitEvent(cuda_ctx_dst->stream(), cuda_ctx_src->copy_event, 0));
-    } else {
-        // src and dst are on the same backend
-        CUDA_CHECK(cudaMemcpyAsync(dst->data, src->data, ggml_nbytes(dst), cudaMemcpyDeviceToDevice, cuda_ctx_dst->stream()));
-    }
-    return true;
-}
-
-GGML_CALL static void ggml_backend_cuda_synchronize(ggml_backend_t backend) {
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
-
-    CUDA_CHECK(cudaStreamSynchronize(cuda_ctx->stream()));
-
-    GGML_UNUSED(backend);
-}
-
-static void set_ggml_graph_node_properties(ggml_tensor * node, ggml_graph_node_properties * graph_node_properties) {
-    graph_node_properties->node_address = node->data;
-    graph_node_properties->node_op = node->op;
-    for (int i = 0; i < GGML_MAX_DIMS; i++) {
-        graph_node_properties->ne[i] = node->ne[i];
-        graph_node_properties->nb[i] = node->nb[i];
-    }
-    for (int i = 0; i < GGML_MAX_SRC; i++) {
-        graph_node_properties->src_address[i] = node->src[i] ? node->src[i]->data : nullptr;
-    }
-}
-
-static bool ggml_graph_node_has_matching_properties(ggml_tensor * node, ggml_graph_node_properties * graph_node_properties) {
-    if (node->data != graph_node_properties->node_address &&
-          node->op != GGML_OP_CPY &&
-          node->op != GGML_OP_VIEW) {
-        return false;
-    }
-
-    if (node->op != graph_node_properties->node_op) {
-        return false;
-    }
-
-    for (int i = 0; i < GGML_MAX_DIMS; i++) {
-        if (node->ne[i] != graph_node_properties->ne[i]) {
-            return false;
-        }
-        if (node->nb[i] != graph_node_properties->nb[i]) {
-            return false;
-        }
-    }
-
-    for (int i = 0; i < GGML_MAX_SRC; i++) {
-        if (node->src[i] &&
-            node->src[i]->data != graph_node_properties->src_address[i] &&
-            node->op != GGML_OP_CPY &&
-            node->op != GGML_OP_VIEW
-        ) {
-            return false;
-        }
-    }
-    return true;
-}
-
-GGML_CALL static enum ggml_status ggml_backend_cuda_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
-
-    ggml_cuda_set_device(cuda_ctx->device);
-
-#ifdef USE_CUDA_GRAPH
-    static const bool disable_cuda_graphs_due_to_env = (getenv("GGML_CUDA_DISABLE_GRAPHS") != nullptr);
-
-    // Objects required for CUDA Graph
-    if (cuda_ctx->cuda_graph == nullptr) {
-        cuda_ctx->cuda_graph.reset(new ggml_cuda_graph());
-    }
-
-    bool use_cuda_graph = true;
-    bool cuda_graph_update_required = false;
-    // vector of pointers to CUDA cpy kernels, which are required to identify
-    // kernel parameters which need updated in the graph for each token
-    std::vector<void *> ggml_cuda_cpy_fn_ptrs;
-
-    if (cuda_ctx->cuda_graph->graph == nullptr) {
-        if (ggml_cuda_info().devices[cuda_ctx->device].cc < CC_AMPERE) {
-            cuda_ctx->cuda_graph->disable_due_to_gpu_arch = true;
-#ifndef NDEBUG
-            GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to GPU architecture\n", __func__);
-#endif
-        }
-    }
-
-    // Disable CUDA graphs in presence of env var, old GPU, use-case which is changing too rapidly,
-    // or previous graph capture failure.
-    // Also disable for multi-gpu for now. TO DO investigate
-    if (disable_cuda_graphs_due_to_env
-        || cuda_ctx->cuda_graph->disable_due_to_gpu_arch
-        || cuda_ctx->cuda_graph->disable_due_to_too_many_updates
-        || cuda_ctx->cuda_graph->disable_due_to_failed_graph_capture) {
-        use_cuda_graph = false;
-    }
-
-    if (use_cuda_graph) {
-        if (cuda_ctx->cuda_graph->instance == nullptr) {
-            cuda_graph_update_required = true;
-        }
-
-        // Check if the graph size has changed
-        if (cuda_ctx->cuda_graph->ggml_graph_properties.size() != (size_t)cgraph->n_nodes) {
-            cuda_graph_update_required = true;
-            cuda_ctx->cuda_graph->ggml_graph_properties.resize(cgraph->n_nodes);
-        }
-
-        // Loop over nodes in GGML graph to determine if CUDA graph update is required
-        // and store properties to allow this comparison for the next token
-        for (int i = 0; i < cgraph->n_nodes; i++) {
-            bool has_matching_properties = true;
-            if (!cuda_graph_update_required) {
-                has_matching_properties = ggml_graph_node_has_matching_properties(cgraph->nodes[i], &cuda_ctx->cuda_graph->ggml_graph_properties[i]);
-            }
-            if (!has_matching_properties) {
-                cuda_graph_update_required = true;
-            }
-            set_ggml_graph_node_properties(cgraph->nodes[i], &cuda_ctx->cuda_graph->ggml_graph_properties[i]);
-        }
-
-        // Loop over nodes in GGML graph to obtain info needed for CUDA graph
-        cuda_ctx->cuda_graph->updated_kernel_arg.clear();
-        for (int i = 0; i < cgraph->n_nodes; i++) {
-            ggml_tensor * node = cgraph->nodes[i];
-
-            if (node->src[0] && ggml_backend_buffer_is_cuda_split(node->src[0]->buffer)) {
-                use_cuda_graph = false; // Split buffers are not supported by CUDA graph capture
-#ifndef NDEBUG
-                GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to split buffer\n", __func__);
-#endif
-            }
-
-            if (node->op == GGML_OP_MUL_MAT_ID) {
-                use_cuda_graph = false; // This node type is not supported by CUDA graph capture
-#ifndef NDEBUG
-                GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to mul_mat_id\n", __func__);
-#endif
-            }
-
-            if (node->op == GGML_OP_ADD && node->src[1] && node->src[1]->ne[1] > 1) {
-                // disable CUDA graphs for batch size > 1 for now.
-                // Changes in batch size or context size can cause changes to the grid size of some kernels.
-                use_cuda_graph = false;
-#ifndef NDEBUG
-                GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to batch size > 1 [%s] [%ld %ld %ld %ld]\n", __func__, node->name, node->ne[0], node->ne[1], node->ne[2], node->ne[3]);
-#endif
-            }
-
-            if (node->op == GGML_OP_CPY) {
-                // store the copy op parameter which changes with each token.
-                cuda_ctx->cuda_graph->updated_kernel_arg.push_back((char **) &(node->src[1]->data));
-                // store a pointer to each copy op CUDA kernel to identify it later
-                void * ptr = ggml_cuda_cpy_fn(node->src[0], node->src[1]);
-                if (std::find(ggml_cuda_cpy_fn_ptrs.begin(), ggml_cuda_cpy_fn_ptrs.end(), ptr) == ggml_cuda_cpy_fn_ptrs.end()) {
-                    ggml_cuda_cpy_fn_ptrs.push_back(ptr);
-                }
-            }
-
-            if (!use_cuda_graph) {
-                break;
-            }
-        }
-
-        // Disable CUDA graphs (from the next token) if the use-case is demanding too many consecutive graph updates.
-        if (use_cuda_graph && cuda_graph_update_required) {
-            cuda_ctx->cuda_graph->number_consecutive_updates++;
-        } else {
-            cuda_ctx->cuda_graph->number_consecutive_updates = 0;
-        }
-
-        if (cuda_ctx->cuda_graph->number_consecutive_updates >= 4) {
-            cuda_ctx->cuda_graph->disable_due_to_too_many_updates = true;
-#ifndef NDEBUG
-            GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to too many consecutive updates\n", __func__);
-#endif
-        }
-    }
-
-    if (use_cuda_graph && cuda_graph_update_required) { // Start CUDA graph capture
-        CUDA_CHECK(cudaStreamBeginCapture(cuda_ctx->stream(), cudaStreamCaptureModeRelaxed));
-    }
-
-#else
-    bool use_cuda_graph = false;
-    bool cuda_graph_update_required = false;
-#endif // USE_CUDA_GRAPH
-
-    bool graph_evaluated_or_captured = false;
-
-    while (!graph_evaluated_or_captured) {
-        // Only perform the graph execution if CUDA graphs are not enabled, or we are capturing the graph.
-        // With the use of CUDA graphs, the execution will be performed by the graph launch.
-        if (!use_cuda_graph || cuda_graph_update_required) {
-            for (int i = 0; i < cgraph->n_nodes; i++) {
-                ggml_tensor * node = cgraph->nodes[i];
-
-                if (ggml_is_empty(node) || node->op == GGML_OP_RESHAPE || node->op == GGML_OP_TRANSPOSE || node->op == GGML_OP_VIEW || node->op == GGML_OP_PERMUTE || node->op == GGML_OP_NONE) {
-                    continue;
-                }
-
-#ifndef NDEBUG
-                assert(node->buffer->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device));
-                for (int j = 0; j < GGML_MAX_SRC; j++) {
-                    if (node->src[j] != nullptr) {
-                        assert(node->src[j]->buffer->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device) || ggml_backend_buffer_is_cuda_split(node->src[j]->buffer));
-                    }
-                }
-#endif
-
-                bool ok = ggml_cuda_compute_forward(*cuda_ctx, node);
-                if (!ok) {
-                    GGML_CUDA_LOG_ERROR("%s: op not supported %s (%s)\n", __func__, node->name, ggml_op_name(node->op));
-                }
-                GGML_ASSERT(ok);
-            }
-        }
-
-#ifdef USE_CUDA_GRAPH
-        if (use_cuda_graph && cuda_graph_update_required) { // End CUDA graph capture
-            if (cuda_ctx->cuda_graph->graph != nullptr) {
-                CUDA_CHECK(cudaGraphDestroy(cuda_ctx->cuda_graph->graph));
-                cuda_ctx->cuda_graph->graph = nullptr;
-            }
-            CUDA_CHECK(cudaStreamEndCapture(cuda_ctx->stream(), &cuda_ctx->cuda_graph->graph));
-
-#if 0
-            if (disable_cuda_graphs_due_to_failed_capture) {
-                use_cuda_graph = false;
-                cuda_ctx->cuda_graph->disable_due_to_failed_graph_capture = true;
-#ifndef NDEBUG
-                GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to failed graph capture\n", __func__);
-#endif
-            } else {
-                graph_evaluated_or_captured = true; // CUDA graph has been captured
-            }
-#endif
-            graph_evaluated_or_captured = true; // CUDA graph has been captured
-        } else {
-            graph_evaluated_or_captured = true; // ggml graph has been directly evaluated
-        }
-    }
-
-    if (use_cuda_graph) {
-        if (cuda_ctx->cuda_graph->instance == nullptr) { // Create executable graph from captured graph.
-            CUDA_CHECK(cudaGraphInstantiate(&cuda_ctx->cuda_graph->instance, cuda_ctx->cuda_graph->graph, NULL, NULL, 0));
-        }
-
-        // Perform update to graph (if required for this token), and change copy parameter (required for every token)
-
-        if (cuda_graph_update_required) {
-            // Extract nodes from graph
-            // First call with null argument gets number of nodes in graph
-            CUDA_CHECK(cudaGraphGetNodes(cuda_ctx->cuda_graph->graph, nullptr, &cuda_ctx->cuda_graph->num_nodes));
-            // Subsequent call with non-null argument gets nodes
-            cuda_ctx->cuda_graph->nodes.resize(cuda_ctx->cuda_graph->num_nodes);
-            cuda_ctx->cuda_graph->params.resize(cuda_ctx->cuda_graph->num_nodes);
-            if (cuda_ctx->cuda_graph->num_nodes > 0) {
-                CUDA_CHECK(cudaGraphGetNodes(cuda_ctx->cuda_graph->graph, cuda_ctx->cuda_graph->nodes.data(), &cuda_ctx->cuda_graph->num_nodes));
-
-                // Loop over nodes, and extract kernel parameters from each node
-                for (size_t i = 0; i < cuda_ctx->cuda_graph->num_nodes; i++) {
-                    cudaGraphNodeType node_type;
-                    CUDA_CHECK(cudaGraphNodeGetType(cuda_ctx->cuda_graph->nodes[i], &node_type));
-                    if (node_type == cudaGraphNodeTypeKernel) {
-                        cudaError_t stat = cudaGraphKernelNodeGetParams(cuda_ctx->cuda_graph->nodes[i], &cuda_ctx->cuda_graph->params[i]); // Get params using runtime
-                        if (stat == cudaErrorInvalidDeviceFunction) {
-                            // Fails due to incorrect handling by CUDA runtime of CUDA BLAS node.
-                            // We don't need to update blas nodes, so clear error and move on.
-                            cudaGetLastError();
-                        } else {
-                            GGML_ASSERT(stat == cudaSuccess);
-                        }
-                    }
-                }
-            }
-        }
-
-        // One of the arguments to the copy kernel is updated for each token, hence we need to
-        // replace that argument with the updated value in the CUDA graph
-        if (!cuda_graph_update_required) { // on update steps, the live parameters will already be captured
-            int k = 0;
-            for (size_t i = 0; i < cuda_ctx->cuda_graph->num_nodes; i++) {
-                if(count(ggml_cuda_cpy_fn_ptrs.begin(), ggml_cuda_cpy_fn_ptrs.end(), cuda_ctx->cuda_graph->params[i].func) > 0) {
-                    char ** updated_kernel_arg_ptr = cuda_ctx->cuda_graph->updated_kernel_arg.at(k++);
-                    cuda_ctx->cuda_graph->params[i].kernelParams[1] = updated_kernel_arg_ptr;
-                    CUDA_CHECK(cudaGraphKernelNodeSetParams(cuda_ctx->cuda_graph->nodes[i], &cuda_ctx->cuda_graph->params[i]));
-                }
-            }
-        }
-
-        // Update graph executable
-        cudaGraphExecUpdateResultInfo result_info;
-        cudaError_t stat = cudaGraphExecUpdate(cuda_ctx->cuda_graph->instance, cuda_ctx->cuda_graph->graph, &result_info);
-        if (stat == cudaErrorGraphExecUpdateFailure) {
-#ifndef NDEBUG
-            GGML_CUDA_LOG_ERROR("%s: CUDA graph update failed\n", __func__);
-#endif
-            // The pre-existing graph exec cannot be updated due to violated constraints
-            // so instead clear error and re-instantiate
-            cudaGetLastError();
-            CUDA_CHECK(cudaGraphExecDestroy(cuda_ctx->cuda_graph->instance));
-            cuda_ctx->cuda_graph->instance = nullptr;
-            CUDA_CHECK(cudaGraphInstantiate(&cuda_ctx->cuda_graph->instance, cuda_ctx->cuda_graph->graph, NULL, NULL, 0));
-        } else {
-            GGML_ASSERT(stat == cudaSuccess);
-        }
-        // Launch graph
-        CUDA_CHECK(cudaGraphLaunch(cuda_ctx->cuda_graph->instance, cuda_ctx->stream()));
-#else
-        graph_evaluated_or_captured = true;
-#endif // USE_CUDA_GRAPH
-    }
-
-    return GGML_STATUS_SUCCESS;
-}
-
-GGML_CALL static bool ggml_backend_cuda_supports_op(ggml_backend_t backend, const ggml_tensor * op) {
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *) backend->context;
-    switch (op->op) {
-        case GGML_OP_UNARY:
-            switch (ggml_get_unary_op(op)) {
-                case GGML_UNARY_OP_GELU:
-                case GGML_UNARY_OP_SILU:
-                case GGML_UNARY_OP_RELU:
-                case GGML_UNARY_OP_SIGMOID:
-                case GGML_UNARY_OP_HARDSIGMOID:
-                case GGML_UNARY_OP_HARDSWISH:
-                case GGML_UNARY_OP_GELU_QUICK:
-                case GGML_UNARY_OP_TANH:
-                    return ggml_is_contiguous(op->src[0]);
-                default:
-                    return false;
-            }
-            break;
-        case GGML_OP_MUL_MAT:
-        case GGML_OP_MUL_MAT_ID:
-            {
-                struct ggml_tensor * a;
-                struct ggml_tensor * b;
-                if (op->op == GGML_OP_MUL_MAT) {
-                    a = op->src[0];
-                    b = op->src[1];
-                } else {
-                    a = op->src[2];
-                    b = op->src[1];
-                }
-                if (a->ne[3] != b->ne[3]) {
-                    return false;
-                }
-                ggml_type a_type = a->type;
-                if (a_type == GGML_TYPE_IQ2_XXS || a_type == GGML_TYPE_IQ2_XS || a_type == GGML_TYPE_IQ3_XXS ||
-                    a_type == GGML_TYPE_IQ1_S   || a_type == GGML_TYPE_IQ4_NL || a_type == GGML_TYPE_IQ3_S   ||
-                    a_type == GGML_TYPE_IQ1_M   || a_type == GGML_TYPE_IQ2_S  || a_type == GGML_TYPE_IQ4_XS) {
-                    if (b->ne[1] == 1 && ggml_nrows(b) > 1) {
-                        return false;
-                    }
-                }
-                return true;
-            } break;
-        case GGML_OP_GET_ROWS:
-            {
-                switch (op->src[0]->type) {
-                    case GGML_TYPE_F16:
-                    case GGML_TYPE_F32:
-                    case GGML_TYPE_Q4_0:
-                    case GGML_TYPE_Q4_1:
-                    case GGML_TYPE_Q5_0:
-                    case GGML_TYPE_Q5_1:
-                    case GGML_TYPE_Q8_0:
-                        return true;
-                    default:
-                        return false;
-                }
-            } break;
-        case GGML_OP_CPY:
-            {
-                ggml_type src0_type = op->src[0]->type;
-                ggml_type src1_type = op->src[1]->type;
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q8_0) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_0) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_1) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q5_0) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q5_1) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_IQ4_NL) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) {
-                    return true;
-                }
-                return false;
-            } break;
-        case GGML_OP_DUP:
-        case GGML_OP_REPEAT:
-        case GGML_OP_CONCAT:
-            {
-                ggml_type src0_type = op->src[0]->type;
-                return src0_type != GGML_TYPE_I32 && src0_type != GGML_TYPE_I16;
-            } break;
-        case GGML_OP_NONE:
-        case GGML_OP_RESHAPE:
-        case GGML_OP_VIEW:
-        case GGML_OP_PERMUTE:
-        case GGML_OP_TRANSPOSE:
-        case GGML_OP_NORM:
-        case GGML_OP_ADD:
-        case GGML_OP_MUL:
-        case GGML_OP_DIV:
-        case GGML_OP_RMS_NORM:
-        case GGML_OP_SCALE:
-        case GGML_OP_SQR:
-        case GGML_OP_CLAMP:
-        case GGML_OP_CONT:
-        case GGML_OP_DIAG_MASK_INF:
-        case GGML_OP_SOFT_MAX:
-            return true;
-        case GGML_OP_ROPE:
-            return ggml_is_contiguous(op->src[0]);
-        case GGML_OP_IM2COL:
-        case GGML_OP_POOL_2D:
-        case GGML_OP_SUM_ROWS:
-        case GGML_OP_ARGSORT:
-        case GGML_OP_ACC:
-        case GGML_OP_GROUP_NORM:
-        case GGML_OP_UPSCALE:
-        case GGML_OP_PAD:
-        case GGML_OP_ARANGE:
-        case GGML_OP_TIMESTEP_EMBEDDING:
-        case GGML_OP_LEAKY_RELU:
-            return true;
-        case GGML_OP_FLASH_ATTN_EXT:
-#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-            return op->src[0]->ne[0] == 64 || op->src[0]->ne[0] == 128;
-#else
-            if (op->src[0]->ne[0] == 128) {
-                return true;
-            }
-            if (op->src[0]->ne[0] ==  64 && op->src[1]->type == GGML_TYPE_F16) {
-                return true;
-            }
-            return ggml_cuda_info().devices[cuda_ctx->device].cc >= CC_VOLTA &&
-                op->src[1]->type == GGML_TYPE_F16 && op->src[2]->type == GGML_TYPE_F16;
-#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-        default:
-            return false;
-    }
-
-    GGML_UNUSED(backend);
-}
-
-GGML_CALL static bool ggml_backend_cuda_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
-    if (ggml_backend_buft_is_cuda_split(buft)) {
-        return true;
-    }
-
-    if (ggml_backend_buft_is_cuda(buft)) {
-        ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
-        ggml_backend_cuda_buffer_type_context * buft_ctx = (ggml_backend_cuda_buffer_type_context *)buft->context;
-        return buft_ctx->device == cuda_ctx->device;
-    }
-
-    return false;
-}
-
-GGML_CALL static bool ggml_backend_cuda_offload_op(ggml_backend_t backend, const ggml_tensor * op) {
-    const int min_batch_size = 32;
-
-    return (op->ne[1] >= min_batch_size && op->op != GGML_OP_GET_ROWS) ||
-           (op->ne[2] >= min_batch_size && op->op == GGML_OP_MUL_MAT_ID);
-
-    GGML_UNUSED(backend);
-}
-
-static ggml_backend_event_t ggml_backend_cuda_event_new(ggml_backend_t backend) {
-#ifdef GGML_CUDA_NO_PEER_COPY
-    return nullptr;
-#else
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
-
-    ggml_cuda_set_device(cuda_ctx->device);
-
-    cudaEvent_t event;
-    CUDA_CHECK(cudaEventCreateWithFlags(&event, cudaEventDisableTiming));
-
-    return new ggml_backend_event {
-        /* .backend = */ backend,
-        /* .context = */ event,
-    };
-#endif
-}
-
-static void ggml_backend_cuda_event_free(ggml_backend_event_t event) {
-    CUDA_CHECK(cudaEventDestroy((cudaEvent_t)event->context));
-
-    delete event;
-}
-
-static void ggml_backend_cuda_event_record(ggml_backend_event_t event) {
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)event->backend->context;
-
-    CUDA_CHECK(cudaEventRecord((cudaEvent_t)event->context, cuda_ctx->stream()));
-}
-
-static void ggml_backend_cuda_event_wait(ggml_backend_t backend, ggml_backend_event_t event) {
-    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
-
-    if (ggml_backend_is_cuda(event->backend)) {
-        CUDA_CHECK(cudaStreamWaitEvent(cuda_ctx->stream(), (cudaEvent_t)event->context, 0));
-    } else {
-#if 0
-        // untested
-        auto wait_fn = [](void * user_data) {
-            ggml_backend_event_t event = (ggml_backend_event_t)user_data;
-            ggml_backend_event_synchronize(event);
-        };
-
-        CUDA_CHECK(cudaLaunchHostFunc(cuda_ctx->stream(), wait_fn, event));
-#endif
-        GGML_ASSERT(false);
-    }
-}
-
-static void ggml_backend_cuda_event_synchronize(ggml_backend_event_t event) {
-    CUDA_CHECK(cudaEventSynchronize((cudaEvent_t)event->context));
-}
-
-static ggml_backend_i ggml_backend_cuda_interface = {
-    /* .get_name                = */ ggml_backend_cuda_name,
-    /* .free                    = */ ggml_backend_cuda_free,
-    /* .get_default_buffer_type = */ ggml_backend_cuda_get_default_buffer_type,
-    /* .set_tensor_async        = */ ggml_backend_cuda_set_tensor_async,
-    /* .get_tensor_async        = */ ggml_backend_cuda_get_tensor_async,
-    /* .cpy_tensor_async        = */ ggml_backend_cuda_cpy_tensor_async,
-    /* .synchronize             = */ ggml_backend_cuda_synchronize,
-    /* .graph_plan_create       = */ NULL,
-    /* .graph_plan_free         = */ NULL,
-    /* .graph_plan_update       = */ NULL,
-    /* .graph_plan_compute      = */ NULL,
-    /* .graph_compute           = */ ggml_backend_cuda_graph_compute,
-    /* .supports_op             = */ ggml_backend_cuda_supports_op,
-    /* .supports_buft           = */ ggml_backend_cuda_supports_buft,
-    /* .offload_op              = */ ggml_backend_cuda_offload_op,
-    /* .event_new               = */ ggml_backend_cuda_event_new,
-    /* .event_free              = */ ggml_backend_cuda_event_free,
-    /* .event_record            = */ ggml_backend_cuda_event_record,
-    /* .event_wait              = */ ggml_backend_cuda_event_wait,
-    /* .event_synchronize       = */ ggml_backend_cuda_event_synchronize,
-};
-
-static ggml_guid_t ggml_backend_cuda_guid() {
-    static ggml_guid guid = { 0x2c, 0xdd, 0xe8, 0x1c, 0x65, 0xb3, 0x65, 0x73, 0x6a, 0x12, 0x88, 0x61, 0x1c, 0xc9, 0xdc, 0x25 };
-    return &guid;
-}
-
-GGML_CALL ggml_backend_t ggml_backend_cuda_init(int device) {
-    if (device < 0 || device >= ggml_backend_cuda_get_device_count()) {
-        GGML_CUDA_LOG_ERROR("%s: invalid device %d\n", __func__, device);
-        return nullptr;
-    }
-
-    ggml_backend_cuda_context * ctx = new ggml_backend_cuda_context(device);
-    if (ctx == nullptr) {
-        GGML_CUDA_LOG_ERROR("%s: failed to allocate context\n", __func__);
-        return nullptr;
-    }
-
-    ggml_backend_t cuda_backend = new ggml_backend {
-        /* .guid      = */ ggml_backend_cuda_guid(),
-        /* .interface = */ ggml_backend_cuda_interface,
-        /* .context   = */ ctx
-    };
-
-    return cuda_backend;
-}
-
-GGML_CALL bool ggml_backend_is_cuda(ggml_backend_t backend) {
-    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_cuda_guid());
-}
-
-GGML_CALL int ggml_backend_cuda_get_device_count() {
-    return ggml_cuda_info().device_count;
-}
-
-GGML_CALL void ggml_backend_cuda_get_device_description(int device, char * description, size_t description_size) {
-    cudaDeviceProp prop;
-    CUDA_CHECK(cudaGetDeviceProperties(&prop, device));
-    snprintf(description, description_size, "%s", prop.name);
-}
-
-GGML_CALL void ggml_backend_cuda_get_device_memory(int device, size_t * free, size_t * total) {
-    ggml_cuda_set_device(device);
-
-    CUDA_CHECK(cudaMemGetInfo(free, total));
-}
-
-GGML_CALL bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size) {
-    if (getenv("GGML_CUDA_REGISTER_HOST") == nullptr) {
-        return false;
-    }
-
-#if CUDART_VERSION >= 11100
-    cudaError_t err = cudaHostRegister(buffer, size, cudaHostRegisterPortable | cudaHostRegisterReadOnly);
-    if (err != cudaSuccess) {
-        // clear the error
-        cudaGetLastError();
-
-        GGML_CUDA_LOG_WARN("%s: failed to register %.2f MiB of pinned memory: %s\n", __func__,
-                           size / 1024.0 / 1024.0, cudaGetErrorString(err));
-        return false;
-    }
-    return true;
-#else
-    return false;
-#endif
-}
-
-GGML_CALL void ggml_backend_cuda_unregister_host_buffer(void * buffer) {
-    if (getenv("GGML_CUDA_REGISTER_HOST") == nullptr) {
-        return;
-    }
-
-    cudaError_t err = cudaHostUnregister(buffer);
-    if (err != cudaSuccess) {
-        // clear the error
-        cudaGetLastError();
-    }
-}
-
-// backend registry
-GGML_CALL static ggml_backend_t ggml_backend_reg_cuda_init(const char * params, void * user_data) {
-    ggml_backend_t cuda_backend = ggml_backend_cuda_init((int) (intptr_t) user_data);
-    return cuda_backend;
-
-    GGML_UNUSED(params);
-}
-
-extern "C" GGML_CALL int ggml_backend_cuda_reg_devices();
-
-GGML_CALL int ggml_backend_cuda_reg_devices() {
-    int device_count = ggml_backend_cuda_get_device_count();
-    //int device_count = 1; // DEBUG: some tools require delaying CUDA initialization
-    for (int i = 0; i < device_count; i++) {
-        char name[128];
-        snprintf(name, sizeof(name), "%s%d", GGML_CUDA_NAME, i);
-        ggml_backend_register(name, ggml_backend_reg_cuda_init, ggml_backend_cuda_buffer_type(i), (void *) (intptr_t) i);
-    }
-    return device_count;
-}
diff --git a/ggml-cuda.h b/ggml-cuda.h
deleted file mode 100644 (file)
index d7903c6..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#pragma once
-
-#include "ggml.h"
-#include "ggml-backend.h"
-
-#ifdef GGML_USE_HIPBLAS
-#define GGML_CUDA_NAME "ROCm"
-#define GGML_CUBLAS_NAME "hipBLAS"
-#else
-#define GGML_CUDA_NAME "CUDA"
-#define GGML_CUBLAS_NAME "cuBLAS"
-#endif
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-#define GGML_CUDA_MAX_DEVICES       16
-
-// backend API
-GGML_API GGML_CALL ggml_backend_t ggml_backend_cuda_init(int device);
-
-GGML_API GGML_CALL bool ggml_backend_is_cuda(ggml_backend_t backend);
-
-// device buffer
-GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_buffer_type(int device);
-
-// split tensor buffer that splits matrices by rows across multiple devices
-GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_split_buffer_type(const float * tensor_split);
-
-// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU
-GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_host_buffer_type(void);
-
-GGML_API GGML_CALL int  ggml_backend_cuda_get_device_count(void);
-GGML_API GGML_CALL void ggml_backend_cuda_get_device_description(int device, char * description, size_t description_size);
-GGML_API GGML_CALL void ggml_backend_cuda_get_device_memory(int device, size_t * free, size_t * total);
-
-GGML_API GGML_CALL bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size);
-GGML_API GGML_CALL void ggml_backend_cuda_unregister_host_buffer(void * buffer);
-
-GGML_API void ggml_backend_cuda_log_set_callback(ggml_log_callback log_callback, void * user_data);
-#ifdef  __cplusplus
-}
-#endif
diff --git a/ggml-cuda/acc.cu b/ggml-cuda/acc.cu
deleted file mode 100644 (file)
index 96bfe1c..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#include "acc.cuh"
-
-static __global__ void acc_f32(const float * x, const float * y, float * dst, const int ne,
-    const int ne10, const int ne11, const int ne12,
-    const int nb1, const int nb2, int offset) {
-    const int i = blockDim.x * blockIdx.x + threadIdx.x;
-    if (i >= ne) {
-        return;
-    }
-    int src1_idx = i - offset;
-    int oz = src1_idx / nb2;
-    int oy = (src1_idx - (oz * nb2)) / nb1;
-    int ox = src1_idx % nb1;
-    if (src1_idx >= 0 && ox < ne10 && oy < ne11 && oz < ne12) {
-        dst[i] = x[i] + y[ox + oy * ne10 + oz * ne10 * ne11];
-    } else {
-        dst[i] = x[i];
-    }
-}
-
-static void acc_f32_cuda(const float * x, const float * y, float * dst, const int n_elements,
-    const int ne10, const int ne11, const int ne12,
-    const int nb1, const int nb2, const int offset, cudaStream_t stream) {
-    int num_blocks = (n_elements + CUDA_ACC_BLOCK_SIZE - 1) / CUDA_ACC_BLOCK_SIZE;
-    acc_f32<<<num_blocks, CUDA_ACC_BLOCK_SIZE, 0, stream>>>(x, y, dst, n_elements, ne10, ne11, ne12, nb1, nb2, offset);
-}
-
-void ggml_cuda_op_acc(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const ggml_tensor * src1 = dst->src[1];
-    const float * src0_d = (const float *)src0->data;
-    const float * src1_d = (const float *)src1->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-    GGML_ASSERT(dst->ne[3] == 1); // just 3D tensors supported
-
-    int nb1 = dst->op_params[0] / 4; // 4 bytes of float32
-    int nb2 = dst->op_params[1] / 4; // 4 bytes of float32
-    // int nb3 = dst->op_params[2] / 4; // 4 bytes of float32 - unused
-    int offset = dst->op_params[3] / 4; // offset in bytes
-
-    acc_f32_cuda(src0_d, src1_d, dst_d, ggml_nelements(dst), src1->ne[0], src1->ne[1], src1->ne[2], nb1, nb2, offset, stream);
-}
diff --git a/ggml-cuda/acc.cuh b/ggml-cuda/acc.cuh
deleted file mode 100644 (file)
index 1168ea1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_ACC_BLOCK_SIZE 256
-
-void ggml_cuda_op_acc(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/arange.cu b/ggml-cuda/arange.cu
deleted file mode 100644 (file)
index b5e495a..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "arange.cuh"
-
-static __global__ void arange_f32(float * dst, const int ne0, const float start, const float step) {
-    // blockIDx.x: idx of ne0 / BLOCK_SIZE
-    int nidx = threadIdx.x + blockIdx.x * blockDim.x;
-    if (nidx >= ne0) {
-        return;
-    }
-    dst[nidx] = start + step * nidx;
-}
-
-static void arange_f32_cuda(float * dst, const int ne0, const float start, const float step, cudaStream_t stream) {
-    int num_blocks = (ne0 + CUDA_ARANGE_BLOCK_SIZE - 1) / CUDA_ARANGE_BLOCK_SIZE;
-    arange_f32<<<num_blocks, CUDA_ARANGE_BLOCK_SIZE, 0, stream>>>(dst, ne0, start,  step);
-}
-
-void ggml_cuda_op_arange(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(dst->type == GGML_TYPE_F32);
-
-    float start;
-    float stop;
-    float step;
-    memcpy(&start, (float *)dst->op_params + 0, sizeof(float));
-    memcpy(&stop,  (float *)dst->op_params + 1, sizeof(float));
-    memcpy(&step,  (float *)dst->op_params + 2, sizeof(float));
-
-    int64_t steps = (int64_t)ceil((stop - start) / step);
-    GGML_ASSERT(ggml_nelements(dst) == steps);
-
-    arange_f32_cuda(dst_d, dst->ne[0], start, step, stream);
-}
diff --git a/ggml-cuda/arange.cuh b/ggml-cuda/arange.cuh
deleted file mode 100644 (file)
index 41e74fd..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_ARANGE_BLOCK_SIZE 256
-
-void ggml_cuda_op_arange(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/argsort.cu b/ggml-cuda/argsort.cu
deleted file mode 100644 (file)
index 15757ca..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "argsort.cuh"
-
-template<typename T>
-static inline __device__ void ggml_cuda_swap(T & a, T & b) {
-    T tmp = a;
-    a = b;
-    b = tmp;
-}
-
-template<ggml_sort_order order>
-static __global__ void k_argsort_f32_i32(const float * x, int * dst, const int ncols, int ncols_pad) {
-    // bitonic sort
-    int col = threadIdx.x;
-    int row = blockIdx.y;
-
-    if (col >= ncols_pad) {
-        return;
-    }
-
-    const float * x_row = x + row * ncols;
-    extern __shared__ int dst_row[];
-
-    // initialize indices
-    dst_row[col] = col;
-
-    __syncthreads();
-
-    for (int k = 2; k <= ncols_pad; k *= 2) {
-        for (int j = k / 2; j > 0; j /= 2) {
-            int ixj = col ^ j;
-            if (ixj > col) {
-                if ((col & k) == 0) {
-                    if (dst_row[col] >= ncols ||
-                        (dst_row[ixj] < ncols && (order == GGML_SORT_ORDER_ASC ?
-                            x_row[dst_row[col]] > x_row[dst_row[ixj]] :
-                            x_row[dst_row[col]] < x_row[dst_row[ixj]]))
-                    ) {
-                        ggml_cuda_swap(dst_row[col], dst_row[ixj]);
-                    }
-                } else {
-                    if (dst_row[ixj] >= ncols ||
-                        (dst_row[col] < ncols && (order == GGML_SORT_ORDER_ASC ?
-                            x_row[dst_row[col]] < x_row[dst_row[ixj]] :
-                            x_row[dst_row[col]] > x_row[dst_row[ixj]]))
-                    ) {
-                        ggml_cuda_swap(dst_row[col], dst_row[ixj]);
-                    }
-                }
-            }
-            __syncthreads();
-        }
-    }
-
-    // copy the result to dst without the padding
-    if (col < ncols) {
-        dst[row * ncols + col] = dst_row[col];
-    }
-}
-
-static int next_power_of_2(int x) {
-    int n = 1;
-    while (n < x) {
-        n *= 2;
-    }
-    return n;
-}
-
-static void argsort_f32_i32_cuda(const float * x, int * dst, const int ncols, const int nrows, ggml_sort_order order, cudaStream_t stream) {
-    // bitonic sort requires ncols to be power of 2
-    const int ncols_pad = next_power_of_2(ncols);
-
-    const dim3 block_dims(ncols_pad, 1, 1);
-    const dim3 block_nums(1, nrows, 1);
-    const size_t shared_mem = ncols_pad * sizeof(int);
-
-    // FIXME: this limit could be raised by ~2-4x on Ampere or newer
-    GGML_ASSERT(shared_mem <= ggml_cuda_info().devices[ggml_cuda_get_device()].smpb);
-
-    if (order == GGML_SORT_ORDER_ASC) {
-        k_argsort_f32_i32<GGML_SORT_ORDER_ASC><<<block_nums, block_dims, shared_mem, stream>>>(x, dst, ncols, ncols_pad);
-    } else if (order == GGML_SORT_ORDER_DESC) {
-        k_argsort_f32_i32<GGML_SORT_ORDER_DESC><<<block_nums, block_dims, shared_mem, stream>>>(x, dst, ncols, ncols_pad);
-    } else {
-        GGML_ASSERT(false);
-    }
-}
-
-void ggml_cuda_op_argsort(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_I32);
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    const int64_t ncols = src0->ne[0];
-    const int64_t nrows = ggml_nrows(src0);
-
-    enum ggml_sort_order order = (enum ggml_sort_order) dst->op_params[0];
-
-    argsort_f32_i32_cuda(src0_d, (int *)dst_d, ncols, nrows, order, stream);
-}
diff --git a/ggml-cuda/argsort.cuh b/ggml-cuda/argsort.cuh
deleted file mode 100644 (file)
index 68a0015..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "common.cuh"
-
-void ggml_cuda_op_argsort(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/binbcast.cu b/ggml-cuda/binbcast.cu
deleted file mode 100644 (file)
index 19b08b7..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-#include "binbcast.cuh"
-
-static __device__ __forceinline__ float op_repeat(const float a, const float b) {
-    return b;
-    GGML_UNUSED(a);
-}
-
-static __device__ __forceinline__ float op_add(const float a, const float b) {
-    return a + b;
-}
-
-static __device__ __forceinline__ float op_mul(const float a, const float b) {
-    return a * b;
-}
-
-static __device__ __forceinline__ float op_div(const float a, const float b) {
-    return a / b;
-}
-
-template<float (*bin_op)(const float, const float), typename src0_t, typename src1_t, typename dst_t>
-static __global__ void k_bin_bcast(const src0_t * src0, const src1_t * src1, dst_t * dst,
-        int ne0, int ne1, int ne2, int ne3,
-        int ne10, int ne11, int ne12, int ne13,
-        /*int s0, */ int s1,  int s2,  int s3,
-        /*int s00,*/ int s01, int s02, int s03,
-        /*int s10,*/ int s11, int s12, int s13) {
-    const int i0s = blockDim.x*blockIdx.x + threadIdx.x;
-    const int i1 = (blockDim.y*blockIdx.y + threadIdx.y);
-    const int i2 = (blockDim.z*blockIdx.z + threadIdx.z) / ne3;
-    const int i3 = (blockDim.z*blockIdx.z + threadIdx.z) % ne3;
-
-    if (i0s >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) {
-        return;
-    }
-
-    const int i11 = i1 % ne11;
-    const int i12 = i2 % ne12;
-    const int i13 = i3 % ne13;
-
-    const size_t i_src0 =  i3*s03 +  i2*s02 +  i1*s01;
-    const size_t i_src1 = i13*s13 + i12*s12 + i11*s11;
-    const size_t i_dst  =  i3*s3  +  i2*s2  +  i1*s1;
-
-    const src0_t * src0_row = src0 + i_src0;
-    const src1_t * src1_row = src1 + i_src1;
-    dst_t * dst_row = dst + i_dst;
-
-    for (int i0 = i0s; i0 < ne0; i0 += blockDim.x*gridDim.x) {
-        const int i10 = i0 % ne10;
-        dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]);
-    }
-}
-
-template<float (*bin_op)(const float, const float), typename src0_t, typename src1_t, typename dst_t>
-static __global__ void k_bin_bcast_unravel(const src0_t * src0, const src1_t * src1, dst_t * dst,
-        int ne0, int ne1, int ne2, int ne3,
-        int ne10, int ne11, int ne12, int ne13,
-        /*int s0, */ int s1,  int s2,  int s3,
-        /*int s00,*/ int s01, int s02, int s03,
-        /*int s10,*/ int s11, int s12, int s13) {
-
-    const int i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    const int i3 = i/(ne2*ne1*ne0);
-    const int i2 = (i/(ne1*ne0)) % ne2;
-    const int i1 = (i/ne0) % ne1;
-    const int i0 = i % ne0;
-
-    if (i0 >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) {
-        return;
-    }
-
-    const int i11 = i1 % ne11;
-    const int i12 = i2 % ne12;
-    const int i13 = i3 % ne13;
-
-    const size_t i_src0 =  i3*s03 +  i2*s02 +  i1*s01;
-    const size_t i_src1 = i13*s13 + i12*s12 + i11*s11;
-    const size_t i_dst  =  i3*s3  +  i2*s2  +  i1*s1;
-
-    const src0_t * src0_row = src0 + i_src0;
-    const src1_t * src1_row = src1 + i_src1;
-    dst_t * dst_row = dst + i_dst;
-
-    const int i10 = i0 % ne10;
-    dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]);
-}
-
-template<float (*bin_op)(const float, const float)>
-struct bin_bcast_cuda {
-    template<typename src0_t, typename src1_t, typename dst_t>
-    void operator()(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst,
-            const src0_t * src0_dd, const src1_t * src1_dd, dst_t * dst_dd,
-            cudaStream_t stream) {
-
-        GGML_TENSOR_BINARY_OP_LOCALS
-
-        int nr0 = ne10/ne0;
-        int nr1 = ne11/ne1;
-        int nr2 = ne12/ne2;
-        int nr3 = ne13/ne3;
-
-        int nr[4] = { nr0, nr1, nr2, nr3 };
-
-        // collapse dimensions until first broadcast dimension
-        int64_t cne[] = {ne0, ne1, ne2, ne3};
-        int64_t cne0[] = {ne00, ne01, ne02, ne03};
-        int64_t cne1[] = {ne10, ne11, ne12, ne13};
-
-        size_t cnb[] = {nb0, nb1, nb2, nb3};
-        size_t cnb0[] = {nb00, nb01, nb02, nb03};
-        size_t cnb1[] = {nb10, nb11, nb12, nb13};
-
-        auto collapse = [](int64_t cne[]) {
-            cne[0] *= cne[1];
-            cne[1] = cne[2];
-            cne[2] = cne[3];
-            cne[3] = 1;
-        };
-
-        auto collapse_nb = [](size_t cnb[], const int64_t cne[]) {
-            cnb[1] *= cne[1];
-            cnb[2] *= cne[2];
-            cnb[3] *= cne[3];
-        };
-
-        if (ggml_is_contiguous(src0) && ggml_is_contiguous(src1) && ggml_is_contiguous(dst)) {
-            for (int i = 0; i < 4; i++) {
-                if (nr[i] != 1) {
-                    break;
-                }
-                if (i > 0) {
-                    collapse_nb(cnb, cne);
-                    collapse_nb(cnb0, cne0);
-                    collapse_nb(cnb1, cne1);
-                    collapse(cne);
-                    collapse(cne0);
-                    collapse(cne1);
-                }
-            }
-        }
-
-        {
-            int64_t ne0 = cne[0];
-            int64_t ne1 = cne[1];
-            int64_t ne2 = cne[2];
-            int64_t ne3 = cne[3];
-
-            //int64_t ne00 = cne0[0]; GGML_UNUSED(ne00);
-            //int64_t ne01 = cne0[1]; GGML_UNUSED(ne01);
-            //int64_t ne02 = cne0[2]; GGML_UNUSED(ne02);
-            //int64_t ne03 = cne0[3]; GGML_UNUSED(ne03);
-
-            int64_t ne10 = cne1[0];
-            int64_t ne11 = cne1[1];
-            int64_t ne12 = cne1[2];
-            int64_t ne13 = cne1[3];
-
-            size_t nb0 = cnb[0];
-            size_t nb1 = cnb[1];
-            size_t nb2 = cnb[2];
-            size_t nb3 = cnb[3];
-
-            size_t nb00 = cnb0[0];
-            size_t nb01 = cnb0[1];
-            size_t nb02 = cnb0[2];
-            size_t nb03 = cnb0[3];
-
-            size_t nb10 = cnb1[0];
-            size_t nb11 = cnb1[1];
-            size_t nb12 = cnb1[2];
-            size_t nb13 = cnb1[3];
-
-            size_t s0 = nb0 / sizeof(dst_t);
-            size_t s1 = nb1 / sizeof(dst_t);
-            size_t s2 = nb2 / sizeof(dst_t);
-            size_t s3 = nb3 / sizeof(dst_t);
-
-            size_t s10 = nb10 / sizeof(src1_t);
-            size_t s11 = nb11 / sizeof(src1_t);
-            size_t s12 = nb12 / sizeof(src1_t);
-            size_t s13 = nb13 / sizeof(src1_t);
-
-            size_t s00 = nb00 / sizeof(src0_t);
-            size_t s01 = nb01 / sizeof(src0_t);
-            size_t s02 = nb02 / sizeof(src0_t);
-            size_t s03 = nb03 / sizeof(src0_t);
-
-            GGML_ASSERT(nb0 % sizeof(dst_t) == 0);
-            GGML_ASSERT(nb1 % sizeof(dst_t) == 0);
-            GGML_ASSERT(nb2 % sizeof(dst_t) == 0);
-            GGML_ASSERT(nb3 % sizeof(dst_t) == 0);
-
-            GGML_ASSERT(nb00 % sizeof(src0_t) == 0);
-            GGML_ASSERT(nb01 % sizeof(src0_t) == 0);
-            GGML_ASSERT(nb02 % sizeof(src0_t) == 0);
-            GGML_ASSERT(nb03 % sizeof(src0_t) == 0);
-
-            GGML_ASSERT(nb10 % sizeof(src1_t) == 0);
-            GGML_ASSERT(nb11 % sizeof(src1_t) == 0);
-            GGML_ASSERT(nb12 % sizeof(src1_t) == 0);
-            GGML_ASSERT(nb13 % sizeof(src1_t) == 0);
-
-            GGML_ASSERT(s0 == 1);
-            GGML_ASSERT(s00 == 1);
-            GGML_ASSERT(s10 == 1);
-
-            const int block_size = 128;
-
-            int64_t hne0 = std::max(ne0/2LL, 1LL);
-
-            dim3 block_dims;
-            block_dims.x = std::min<unsigned int>(hne0, block_size);
-            block_dims.y = std::min<unsigned int>(ne1, block_size / block_dims.x);
-            block_dims.z = std::min(std::min<unsigned int>(ne2*ne3, block_size / block_dims.x / block_dims.y), 64U);
-
-            dim3 block_nums(
-                (hne0 + block_dims.x - 1) / block_dims.x,
-                (ne1 + block_dims.y - 1) / block_dims.y,
-                (ne2*ne3 + block_dims.z - 1) / block_dims.z
-            );
-
-            if (block_nums.z > 65535) {
-                // this is the maximum number of blocks in z dimension, fallback to 1D grid kernel
-                int block_num = (ne0*ne1*ne2*ne3 + block_size - 1) / block_size;
-                k_bin_bcast_unravel<bin_op><<<block_num, block_size, 0, stream>>>(
-                    src0_dd, src1_dd, dst_dd,
-                    ne0, ne1, ne2, ne3,
-                    ne10, ne11, ne12, ne13,
-                    /* s0, */ s1, s2, s3,
-                    /* s00, */ s01, s02, s03,
-                    /* s10, */ s11, s12, s13);
-            } else {
-                k_bin_bcast<bin_op><<<block_nums, block_dims, 0, stream>>>(
-                    src0_dd, src1_dd, dst_dd,
-                    ne0, ne1, ne2, ne3,
-                    ne10, ne11, ne12, ne13,
-                    /* s0, */ s1, s2, s3,
-                    /* s00, */ s01, s02, s03,
-                    /* s10, */ s11, s12, s13);
-            }
-        }
-    }
-};
-
-template<class op>
-static void ggml_cuda_op_bin_bcast(
-    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst,
-    const void * src0_dd, const void * src1_dd, void * dst_dd, cudaStream_t stream) {
-
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-        op()(src0, src1, dst, (const float *)src0_dd, (const float *)src1_dd, (float *)dst_dd, stream);
-    } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) {
-        op()(src0, src1, dst, (const half *) src0_dd, (const float *)src1_dd, (half *) dst_dd, stream);
-    } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) {
-        op()(src0, src1, dst, (const half *) src0_dd, (const float *)src1_dd, (float *)dst_dd, stream);
-    } else {
-        fprintf(stderr, "%s: unsupported types: dst: %s, src0: %s, src1: %s\n", __func__,
-            ggml_type_name(dst->type), ggml_type_name(src0->type), ggml_type_name(src1->type));
-        GGML_ASSERT(false);
-    }
-}
-
-void ggml_cuda_op_repeat(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    ggml_cuda_op_bin_bcast<bin_bcast_cuda<op_repeat>>(dst, dst->src[0], dst, nullptr, dst->src[0]->data, dst->data, ctx.stream());
-}
-
-void ggml_cuda_op_add(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    ggml_cuda_op_bin_bcast<bin_bcast_cuda<op_add>>(dst->src[0], dst->src[1], dst, dst->src[0]->data, dst->src[1]->data, dst->data, ctx.stream());
-}
-
-void ggml_cuda_op_mul(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    ggml_cuda_op_bin_bcast<bin_bcast_cuda<op_mul>>(dst->src[0], dst->src[1], dst, dst->src[0]->data, dst->src[1]->data, dst->data, ctx.stream());
-}
-
-void ggml_cuda_op_div(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    ggml_cuda_op_bin_bcast<bin_bcast_cuda<op_div>>(dst->src[0], dst->src[1], dst, dst->src[0]->data, dst->src[1]->data, dst->data, ctx.stream());
-}
diff --git a/ggml-cuda/binbcast.cuh b/ggml-cuda/binbcast.cuh
deleted file mode 100644 (file)
index 4f63d63..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#include "common.cuh"
-
-void ggml_cuda_op_repeat(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-void ggml_cuda_op_add(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-void ggml_cuda_op_mul(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-void ggml_cuda_op_div(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/clamp.cu b/ggml-cuda/clamp.cu
deleted file mode 100644 (file)
index 8009a3e..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "clamp.cuh"
-
-static __global__ void clamp_f32(const float * x, float * dst, const float min, const float max, const int k) {
-    const int i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= k) {
-        return;
-    }
-
-    dst[i] = x[i] < min ? min : (x[i] > max ? max : x[i]);
-}
-
-static void clamp_f32_cuda(const float * x, float * dst, const float min, const float max, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_CLAMP_BLOCK_SIZE - 1) / CUDA_CLAMP_BLOCK_SIZE;
-    clamp_f32<<<num_blocks, CUDA_CLAMP_BLOCK_SIZE, 0, stream>>>(x, dst, min, max, k);
-}
-
-
-void ggml_cuda_op_clamp(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    float min;
-    float max;
-    memcpy(&min, dst->op_params, sizeof(float));
-    memcpy(&max, (float *) dst->op_params + 1, sizeof(float));
-
-    clamp_f32_cuda(src0_d, dst_d, min, max, ggml_nelements(src0), stream);
-}
diff --git a/ggml-cuda/clamp.cuh b/ggml-cuda/clamp.cuh
deleted file mode 100644 (file)
index 7f9559d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_CLAMP_BLOCK_SIZE 256
-
-void ggml_cuda_op_clamp(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/common.cuh b/ggml-cuda/common.cuh
deleted file mode 100644 (file)
index de7c2e4..0000000
+++ /dev/null
@@ -1,851 +0,0 @@
-#pragma once
-
-#include "ggml.h"
-#include "ggml-cuda.h"
-
-#include <memory>
-
-#if defined(GGML_USE_HIPBLAS)
-#define GGML_COMMON_DECL_HIP
-#define GGML_COMMON_IMPL_HIP
-#else
-#define GGML_COMMON_DECL_CUDA
-#define GGML_COMMON_IMPL_CUDA
-#endif
-#include "ggml-common.h"
-
-#include <cstdio>
-#include <array>
-#include <cassert>
-#include <cfloat>
-#include <string>
-#include <vector>
-
-#if defined(GGML_USE_HIPBLAS)
-#include <hip/hip_runtime.h>
-#include <hipblas/hipblas.h>
-#include <hip/hip_fp16.h>
-#ifdef __HIP_PLATFORM_AMD__
-// for rocblas_initialize()
-#include "rocblas/rocblas.h"
-#endif // __HIP_PLATFORM_AMD__
-#define CUBLAS_COMPUTE_16F HIPBLAS_R_16F
-#define CUBLAS_COMPUTE_32F HIPBLAS_R_32F
-#define CUBLAS_COMPUTE_32F_FAST_16F HIPBLAS_R_32F
-#define CUBLAS_GEMM_DEFAULT HIPBLAS_GEMM_DEFAULT
-#define CUBLAS_GEMM_DEFAULT_TENSOR_OP HIPBLAS_GEMM_DEFAULT
-#define CUBLAS_OP_N HIPBLAS_OP_N
-#define CUBLAS_OP_T HIPBLAS_OP_T
-#define CUBLAS_STATUS_SUCCESS HIPBLAS_STATUS_SUCCESS
-#define CUBLAS_TF32_TENSOR_OP_MATH 0
-#define CUDA_R_16F  HIPBLAS_R_16F
-#define CUDA_R_32F  HIPBLAS_R_32F
-#define __shfl_xor_sync(mask, var, laneMask, width) __shfl_xor(var, laneMask, width)
-#define cublasComputeType_t hipblasDatatype_t //deprecated, new hipblasComputeType_t not in 5.6
-#define cublasCreate hipblasCreate
-#define cublasDestroy hipblasDestroy
-#define cublasGemmEx hipblasGemmEx
-#define cublasGemmBatchedEx hipblasGemmBatchedEx
-#define cublasGemmStridedBatchedEx hipblasGemmStridedBatchedEx
-#define cublasHandle_t hipblasHandle_t
-#define cublasSetMathMode(handle, mode) CUBLAS_STATUS_SUCCESS
-#define cublasSetStream hipblasSetStream
-#define cublasSgemm hipblasSgemm
-#define cublasStatus_t hipblasStatus_t
-#define cudaDataType_t hipblasDatatype_t //deprecated, new hipblasDatatype not in 5.6
-#define cudaDeviceCanAccessPeer hipDeviceCanAccessPeer
-#define cudaDeviceDisablePeerAccess hipDeviceDisablePeerAccess
-#define cudaDeviceEnablePeerAccess hipDeviceEnablePeerAccess
-#define cudaDeviceProp hipDeviceProp_t
-#define cudaDeviceSynchronize hipDeviceSynchronize
-#define cudaError_t hipError_t
-#define cudaErrorPeerAccessAlreadyEnabled hipErrorPeerAccessAlreadyEnabled
-#define cudaErrorPeerAccessNotEnabled hipErrorPeerAccessNotEnabled
-#define cudaEventCreateWithFlags hipEventCreateWithFlags
-#define cudaEventDisableTiming hipEventDisableTiming
-#define cudaEventRecord hipEventRecord
-#define cudaEventSynchronize hipEventSynchronize
-#define cudaEvent_t hipEvent_t
-#define cudaEventDestroy hipEventDestroy
-#define cudaFree hipFree
-#define cudaFreeHost hipHostFree
-#define cudaGetDevice hipGetDevice
-#define cudaGetDeviceCount hipGetDeviceCount
-#define cudaGetDeviceProperties hipGetDeviceProperties
-#define cudaGetErrorString hipGetErrorString
-#define cudaGetLastError hipGetLastError
-#define cudaHostRegister hipHostRegister
-#define cudaHostRegisterPortable hipHostRegisterPortable
-#define cudaHostRegisterReadOnly hipHostRegisterReadOnly
-#define cudaHostUnregister hipHostUnregister
-#define cudaLaunchHostFunc hipLaunchHostFunc
-#define cudaMalloc hipMalloc
-#define cudaMallocHost(ptr, size) hipHostMalloc(ptr, size, hipHostMallocDefault)
-#define cudaMemcpy hipMemcpy
-#define cudaMemcpyAsync hipMemcpyAsync
-#define cudaMemcpyPeerAsync hipMemcpyPeerAsync
-#define cudaMemcpy2DAsync hipMemcpy2DAsync
-#define cudaMemcpyDeviceToDevice hipMemcpyDeviceToDevice
-#define cudaMemcpyDeviceToHost hipMemcpyDeviceToHost
-#define cudaMemcpyHostToDevice hipMemcpyHostToDevice
-#define cudaMemcpyKind hipMemcpyKind
-#define cudaMemset hipMemset
-#define cudaMemsetAsync hipMemsetAsync
-#define cudaMemGetInfo hipMemGetInfo
-#define cudaOccupancyMaxPotentialBlockSize hipOccupancyMaxPotentialBlockSize
-#define cudaSetDevice hipSetDevice
-#define cudaStreamCreateWithFlags hipStreamCreateWithFlags
-#define cudaStreamDestroy hipStreamDestroy
-#define cudaStreamFireAndForget hipStreamFireAndForget
-#define cudaStreamNonBlocking hipStreamNonBlocking
-#define cudaStreamPerThread hipStreamPerThread
-#define cudaStreamSynchronize hipStreamSynchronize
-#define cudaStreamWaitEvent(stream, event, flags) hipStreamWaitEvent(stream, event, flags)
-#define cudaStream_t hipStream_t
-#define cudaSuccess hipSuccess
-#define __trap abort
-#define CUBLAS_STATUS_SUCCESS HIPBLAS_STATUS_SUCCESS
-#define CUBLAS_STATUS_NOT_INITIALIZED HIPBLAS_STATUS_NOT_INITIALIZED
-#define CUBLAS_STATUS_ALLOC_FAILED HIPBLAS_STATUS_ALLOC_FAILED
-#define CUBLAS_STATUS_INVALID_VALUE HIPBLAS_STATUS_INVALID_VALUE
-#define CUBLAS_STATUS_ARCH_MISMATCH HIPBLAS_STATUS_ARCH_MISMATCH
-#define CUBLAS_STATUS_MAPPING_ERROR HIPBLAS_STATUS_MAPPING_ERROR
-#define CUBLAS_STATUS_EXECUTION_FAILED HIPBLAS_STATUS_EXECUTION_FAILED
-#define CUBLAS_STATUS_INTERNAL_ERROR HIPBLAS_STATUS_INTERNAL_ERROR
-#define CUBLAS_STATUS_NOT_SUPPORTED HIPBLAS_STATUS_NOT_SUPPORTED
-#else
-#include <cuda_runtime.h>
-#include <cuda.h>
-#include <cublas_v2.h>
-#include <cuda_fp16.h>
-
-#if CUDART_VERSION < 11020
-#define CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED
-#define CUBLAS_TF32_TENSOR_OP_MATH CUBLAS_TENSOR_OP_MATH
-#define CUBLAS_COMPUTE_16F CUDA_R_16F
-#define CUBLAS_COMPUTE_32F CUDA_R_32F
-#define cublasComputeType_t cudaDataType_t
-#endif // CUDART_VERSION < 11020
-
-#endif // defined(GGML_USE_HIPBLAS)
-
-#define STRINGIZE_IMPL(...) #__VA_ARGS__
-#define STRINGIZE(...) STRINGIZE_IMPL(__VA_ARGS__)
-
-#define WARP_SIZE 32
-#define CUDART_HMAX   11070 // CUDA 11.7, min. ver. for which __hmax and __hmax2 are known to work (may be higher than needed)
-#define CUDART_HMASK  12000 // CUDA 12.0, min. ver. for half2 -> uint mask comparisons
-
-#define CC_PASCAL     600
-#define MIN_CC_DP4A   610 // minimum compute capability for __dp4a, an intrinsic for byte-wise dot products
-#define CC_VOLTA      700
-#define CC_TURING     750
-#define CC_AMPERE     800
-#define CC_OFFSET_AMD 1000000
-#define CC_RDNA1      (CC_OFFSET_AMD + 1010)
-#define CC_RDNA2      (CC_OFFSET_AMD + 1030)
-#define CC_RDNA3      (CC_OFFSET_AMD + 1100)
-
-// define this if you want to always fallback to MMQ kernels and not use cuBLAS for matrix multiplication
-// on modern hardware, using cuBLAS is recommended as it utilizes F16 tensor cores which are very performant
-// for large computational tasks. the drawback is that this requires some extra amount of VRAM:
-// -  7B quantum model: +100-200 MB
-// - 13B quantum model: +200-400 MB
-//
-//#define GGML_CUDA_FORCE_MMQ
-
-// TODO: improve this to be correct for more hardware
-//       for example, currently fails for GeForce GTX 1660 which is TURING arch (> VOLTA) but does not have tensor cores
-#if !defined(GGML_CUDA_FORCE_MMQ)
-#define CUDA_USE_TENSOR_CORES
-#endif
-
-#define MMVQ_MAX_BATCH_SIZE  8 // max batch size to use MMVQ kernels
-#define  MMQ_MAX_BATCH_SIZE 64 // max batch size to use MMQ kernels when tensor cores are available
-
-#define MATRIX_ROW_PADDING 512 // last row of quant. matrices is a multiple of this to avoid out-of-bounds memory accesses
-
-#if defined(_MSC_VER)
-#pragma warning(disable: 4244 4267) // possible loss of data
-#endif
-
-#define GGML_CUDA_MAX_STREAMS 8
-
-[[noreturn]]
-void ggml_cuda_error(const char * stmt, const char * func, const char * file, int line, const char * msg);
-
-#define CUDA_CHECK_GEN(err, success, error_fn)                                      \
-     do {                                                                           \
-        auto err_ = (err);                                                          \
-        if (err_ != (success)) {                                                    \
-            ggml_cuda_error(#err, __func__, __FILE__, __LINE__, error_fn(err_));    \
-        }                                                                           \
-    } while (0)
-
-#define CUDA_CHECK(err) CUDA_CHECK_GEN(err, cudaSuccess, cudaGetErrorString)
-
-#if CUDART_VERSION >= 12000
-    static const char * cublas_get_error_str(const cublasStatus_t err) {
-        return cublasGetStatusString(err);
-    }
-#else
-    static const char * cublas_get_error_str(const cublasStatus_t err) {
-        switch (err) {
-            case CUBLAS_STATUS_SUCCESS: return "CUBLAS_STATUS_SUCCESS";
-            case CUBLAS_STATUS_NOT_INITIALIZED: return "CUBLAS_STATUS_NOT_INITIALIZED";
-            case CUBLAS_STATUS_ALLOC_FAILED: return "CUBLAS_STATUS_ALLOC_FAILED";
-            case CUBLAS_STATUS_INVALID_VALUE: return "CUBLAS_STATUS_INVALID_VALUE";
-            case CUBLAS_STATUS_ARCH_MISMATCH: return "CUBLAS_STATUS_ARCH_MISMATCH";
-            case CUBLAS_STATUS_MAPPING_ERROR: return "CUBLAS_STATUS_MAPPING_ERROR";
-            case CUBLAS_STATUS_EXECUTION_FAILED: return "CUBLAS_STATUS_EXECUTION_FAILED";
-            case CUBLAS_STATUS_INTERNAL_ERROR: return "CUBLAS_STATUS_INTERNAL_ERROR";
-            case CUBLAS_STATUS_NOT_SUPPORTED: return "CUBLAS_STATUS_NOT_SUPPORTED";
-            default: return "unknown error";
-        }
-    }
-#endif // CUDART_VERSION >= 12000
-
-#define CUBLAS_CHECK(err) CUDA_CHECK_GEN(err, CUBLAS_STATUS_SUCCESS, cublas_get_error_str)
-
-#if !defined(GGML_USE_HIPBLAS)
-static const char * cu_get_error_str(CUresult err) {
-    const char * err_str;
-    cuGetErrorString(err, &err_str);
-    return err_str;
-}
-#define CU_CHECK(err) CUDA_CHECK_GEN(err, CUDA_SUCCESS, cu_get_error_str)
-#endif
-
-#if CUDART_VERSION >= 11100
-#define GGML_CUDA_ASSUME(x) __builtin_assume(x)
-#else
-#define GGML_CUDA_ASSUME(x)
-#endif // CUDART_VERSION >= 11100
-
-#ifdef GGML_CUDA_F16
-typedef half dfloat; // dequantize float
-typedef half2 dfloat2;
-#else
-typedef float dfloat; // dequantize float
-typedef float2 dfloat2;
-#endif //GGML_CUDA_F16
-
-#if defined(GGML_USE_HIPBLAS)
-#define __CUDA_ARCH__ 1300
-
-#if defined(__gfx1100__) || defined(__gfx1101__) || defined(__gfx1102__) || defined(__gfx1103__) || \
-    defined(__gfx1150__) || defined(__gfx1151__)
-#define RDNA3
-#endif
-
-#if defined(__gfx1030__) || defined(__gfx1031__) || defined(__gfx1032__) || defined(__gfx1033__) || \
-    defined(__gfx1034__) || defined(__gfx1035__) || defined(__gfx1036__) || defined(__gfx1037__)
-#define RDNA2
-#endif
-
-#ifndef __has_builtin
-    #define __has_builtin(x) 0
-#endif
-
-typedef int8_t int8x4_t __attribute__((ext_vector_type(4)));
-typedef uint8_t uint8x4_t __attribute__((ext_vector_type(4)));
-static __device__ __forceinline__ int __vsubss4(const int a, const int b) {
-    const int8x4_t va = reinterpret_cast<const int8x4_t&>(a);
-    const int8x4_t vb = reinterpret_cast<const int8x4_t&>(b);
-#if __has_builtin(__builtin_elementwise_sub_sat)
-    const int8x4_t c = __builtin_elementwise_sub_sat(va, vb);
-    return reinterpret_cast<const int &>(c);
-#else
-    int8x4_t c;
-    int16_t tmp;
-#pragma unroll
-    for (int i = 0; i < 4; i++) {
-        tmp = va[i] - vb[i];
-        if(tmp > std::numeric_limits<int8_t>::max()) tmp = std::numeric_limits<int8_t>::max();
-        if(tmp < std::numeric_limits<int8_t>::min()) tmp = std::numeric_limits<int8_t>::min();
-        c[i] = tmp;
-    }
-    return reinterpret_cast<int &>(c);
-#endif // __has_builtin(__builtin_elementwise_sub_sat)
-}
-
-static __device__ __forceinline__ int __vsub4(const int a, const int b) {
-    return __vsubss4(a, b);
-}
-
-static __device__ __forceinline__ unsigned int __vcmpeq4(unsigned int a, unsigned int b) {
-    const uint8x4_t& va = reinterpret_cast<const uint8x4_t&>(a);
-    const uint8x4_t& vb = reinterpret_cast<const uint8x4_t&>(b);
-    unsigned int c;
-    uint8x4_t& vc = reinterpret_cast<uint8x4_t&>(c);
-#pragma unroll
-    for (int i = 0; i < 4; ++i) {
-        vc[i] = va[i] == vb[i] ? 0xff : 0x00;
-    }
-    return c;
-}
-
-static __device__ __forceinline__ int __dp4a(const int a, const int b, int c) {
-#if defined(__gfx906__) || defined(__gfx908__) || defined(__gfx90a__) || defined(__gfx1030__)
-    c = __builtin_amdgcn_sdot4(a, b, c, false);
-#elif defined(RDNA3)
-    c = __builtin_amdgcn_sudot4( true, a, true, b, c, false);
-#elif defined(__gfx1010__) || defined(__gfx900__)
-    int tmp1;
-    int tmp2;
-    asm("\n \
-        v_mul_i32_i24 %1, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:BYTE_0 \n \
-        v_mul_i32_i24 %2, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1 \n \
-        v_add3_u32 %0, %1, %2, %0 \n \
-        v_mul_i32_i24 %1, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_2 \n \
-        v_mul_i32_i24 %2, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_3 \n \
-        v_add3_u32 %0, %1, %2, %0 \n \
-        "
-        : "+v"(c), "=&v"(tmp1), "=&v"(tmp2)
-        : "v"(a), "v"(b)
-    );
-#else
-    const int8x4_t va = reinterpret_cast<const int8x4_t&>(a);
-    const int8x4_t vb = reinterpret_cast<const int8x4_t&>(b);
-    c += va[0] * vb[0] + va[1] * vb[1] + va[2] * vb[2] + va[3] * vb[3];
-#endif
-    return c;
-}
-
-#if defined(__HIP_PLATFORM_AMD__) && HIP_VERSION < 50600000
-// __shfl_xor() for half2 was added in ROCm 5.6
-static __device__ __forceinline__ half2 __shfl_xor(half2 var, int laneMask, int width) {
-    typedef union half2_b32 {
-        half2 val;
-        int   b32;
-    } half2_b32_t;
-    half2_b32_t tmp;
-    tmp.val = var;
-    tmp.b32 = __shfl_xor(tmp.b32, laneMask, width);
-    return tmp.val;
-}
-#endif // defined(__HIP_PLATFORM_AMD__) && HIP_VERSION < 50600000
-#endif // defined(GGML_USE_HIPBLAS)
-
-#if (defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) || __CUDA_ARCH__ >= CC_PASCAL
-#define FP16_AVAILABLE
-#endif // (defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) || __CUDA_ARCH__ >= CC_PASCAL
-
-#if defined(FP16_AVAILABLE) && __CUDA_ARCH__ != 610
-#define FAST_FP16_AVAILABLE
-#endif // defined(FP16_AVAILABLE) && __CUDA_ARCH__ != 610
-
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_VOLTA
-#define FP16_MMA_AVAILABLE
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_VOLTA
-
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_TURING
-#define INT8_MMA_AVAILABLE
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_TURING
-
-static bool fast_fp16_available(const int cc) {
-    return cc >= CC_PASCAL && cc != 610;
-}
-
-static bool fp16_mma_available(const int cc) {
-    return cc < CC_OFFSET_AMD && cc >= CC_VOLTA;
-}
-
-static bool int8_mma_available(const int cc) {
-    return cc < CC_OFFSET_AMD && cc >= CC_TURING;
-}
-
-[[noreturn]]
-static __device__ void no_device_code(
-    const char * file_name, const int line, const char * function_name, const int arch, const char * arch_list) {
-
-#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-    printf("%s:%d: ERROR: HIP kernel %s has no device code compatible with HIP arch %d.\n",
-           file_name, line, function_name, arch);
-    GGML_UNUSED(arch_list);
-#else
-    printf("%s:%d: ERROR: CUDA kernel %s has no device code compatible with CUDA arch %d. ggml-cuda.cu was compiled for: %s\n",
-           file_name, line, function_name, arch, arch_list);
-#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-    __trap();
-
-    GGML_UNUSED(no_device_code); // suppress unused function warning
-}
-
-#ifdef __CUDA_ARCH__
-#define NO_DEVICE_CODE no_device_code(__FILE__, __LINE__, __FUNCTION__, __CUDA_ARCH__, STRINGIZE(__CUDA_ARCH_LIST__))
-#else
-#define NO_DEVICE_CODE //GGML_ASSERT(false && "NO_DEVICE_CODE not valid in host code.")
-#endif // __CUDA_ARCH__
-
-static __device__ __forceinline__ float warp_reduce_sum(float x) {
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        x += __shfl_xor_sync(0xffffffff, x, mask, 32);
-    }
-    return x;
-}
-
-static __device__ __forceinline__ float2 warp_reduce_sum(float2 a) {
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        a.x += __shfl_xor_sync(0xffffffff, a.x, mask, 32);
-        a.y += __shfl_xor_sync(0xffffffff, a.y, mask, 32);
-    }
-    return a;
-}
-
-static __device__ __forceinline__ half2 warp_reduce_sum(half2 a) {
-#ifdef FP16_AVAILABLE
-
-#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        const half2 a_other = __shfl_xor_sync(0xffffffff, a, mask, 32);
-        reinterpret_cast<half&>(a.x) +=  __low2half(a_other);
-        reinterpret_cast<half&>(a.y) += __high2half(a_other);
-    }
-    return a;
-#else
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        a = __hadd2(a, __shfl_xor_sync(0xffffffff, a, mask, 32));
-    }
-    return a;
-#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-
-#else
-    NO_DEVICE_CODE;
-    return a;
-#endif // FP16_AVAILABLE
-}
-
-static __device__ __forceinline__ float warp_reduce_max(float x) {
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        x = fmaxf(x, __shfl_xor_sync(0xffffffff, x, mask, 32));
-    }
-    return x;
-}
-
-static __device__ __forceinline__ half ggml_cuda_hmax(const half a, const half b) {
-#ifdef FP16_AVAILABLE
-
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && CUDART_VERSION < CUDART_HMAX
-    return __float2half(fmaxf(__half2float(a), __half2float(b)));
-#else
-    return __hmax(a, b);
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && CUDART_VERSION < CUDART_HMAX
-
-#else
-   NO_DEVICE_CODE;
-   GGML_UNUSED(b);
-   return a;
-#endif // FP16_AVAILABLE
-}
-
-static __device__ __forceinline__ half2 ggml_cuda_hmax2(const half2 a, const half2 b) {
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-
-#if CUDART_VERSION >= CUDART_HMAX
-    return __hmax2(a, b);
-#else
-    half2 ret;
-    reinterpret_cast<half&>(ret.x) = __float2half(fmaxf( __low2float(a),  __low2float(b)));
-    reinterpret_cast<half&>(ret.y) = __float2half(fmaxf(__high2float(a), __high2float(b)));
-    return ret;
-#endif // CUDART_VERSION >= CUDART_HMAX
-
-#else
-    GGML_UNUSED(a);
-    GGML_UNUSED(b);
-    NO_DEVICE_CODE;
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-}
-
-static __device__ __forceinline__ half2 warp_reduce_max(half2 x) {
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_PASCAL
-#pragma unroll
-   for (int mask = 16; mask > 0; mask >>= 1) {
-       x = ggml_cuda_hmax2(x, __shfl_xor_sync(0xffffffff, x, mask, 32));
-   }
-   return x;
-#else
-   GGML_UNUSED(x);
-   NO_DEVICE_CODE;
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_PASCAL
-}
-
-#if CUDART_VERSION < CUDART_HMASK
-static __device__ __forceinline__ uint32_t __hgt2_mask(const half2 a, const half2 b) {
-    const uint32_t mask_low  = 0x0000FFFF * (float( __low2half(a)) > float( __low2half(b)));
-    const uint32_t mask_high = 0xFFFF0000 * (float(__high2half(a)) > float(__high2half(b)));
-    return mask_low | mask_high;
-}
-#endif // CUDART_VERSION < 12000
-
-// TODO: move to ggml-common.h
-static const __device__ int8_t kvalues_iq4nl[16] = {-127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113};
-
-typedef void (*dequantize_kernel_t)(const void * vx, const int64_t ib, const int iqs, dfloat2 & v);
-
-static __device__ __forceinline__ float get_alibi_slope(
-    const float max_bias, const uint32_t h, const uint32_t n_head_log2, const float m0, const float m1
-) {
-    if (max_bias <= 0.0f) {
-        return 1.0f;
-    }
-    const float base = h < n_head_log2 ? m0 : m1;
-    const int   exph = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
-
-    return powf(base, exph);
-}
-
-template <ggml_type type>
-struct ggml_cuda_type_traits;
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_F16> {
-    static constexpr int qk = 1;
-    static constexpr int qr = 1;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_Q4_0> {
-    static constexpr int qk = QK4_0;
-    static constexpr int qr = QR4_0;
-    static constexpr int qi = QI4_0;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_Q4_1> {
-    static constexpr int qk = QK4_1;
-    static constexpr int qr = QR4_1;
-    static constexpr int qi = QI4_1;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_Q5_0> {
-    static constexpr int qk = QK5_0;
-    static constexpr int qr = QR5_0;
-    static constexpr int qi = QI5_0;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_Q5_1> {
-    static constexpr int qk = QK5_1;
-    static constexpr int qr = QR5_1;
-    static constexpr int qi = QI5_1;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_Q8_0> {
-    static constexpr int qk = QK8_0;
-    static constexpr int qr = QR8_0;
-    static constexpr int qi = QI8_0;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_Q2_K> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR2_K;
-    static constexpr int qi = QI2_K;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_Q3_K> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR3_K;
-    static constexpr int qi = QI3_K;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_Q4_K> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR4_K;
-    static constexpr int qi = QI4_K;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_Q5_K> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR5_K;
-    static constexpr int qi = QI5_K;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_Q6_K> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR6_K;
-    static constexpr int qi = QI6_K;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_IQ2_XXS> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR2_XXS;
-    static constexpr int qi = QI2_XXS;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_IQ2_XS> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR2_XS;
-    static constexpr int qi = QI2_XS;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_IQ2_S> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR2_S;
-    static constexpr int qi = QI2_S;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_IQ3_XXS> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR3_XXS;
-    static constexpr int qi = QI3_XXS;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_IQ1_S> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR1_S;
-    static constexpr int qi = QI1_S;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_IQ1_M> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR1_M;
-    static constexpr int qi = QI1_M;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_IQ4_NL> {
-    static constexpr int qk = QK4_NL;
-    static constexpr int qr = QR4_NL;
-    static constexpr int qi = QI4_NL;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_IQ4_XS> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR4_XS;
-    static constexpr int qi = QI4_XS;
-};
-
-template<>
-struct ggml_cuda_type_traits<GGML_TYPE_IQ3_S> {
-    static constexpr int qk = QK_K;
-    static constexpr int qr = QR3_S;
-    static constexpr int qi = QI3_S;
-};
-
-static int get_mmq_x_max_host(const int cc) {
-#ifdef CUDA_USE_TENSOR_CORES
-    return cc >= CC_VOLTA && cc < CC_OFFSET_AMD ? MMQ_MAX_BATCH_SIZE : 64;
-#else
-    return cc >= CC_VOLTA && cc < CC_OFFSET_AMD ? 128 : 64;
-#endif // CUDA_USE_TENSOR_CORES
-}
-
-// Round rows to this value for --split-mode row:
-static int get_mmq_y_host(const int cc, const int mmq_x) {
-    return cc >= CC_VOLTA && mmq_x >= 32 ? 128 : 64;
-}
-
-//////////////////////
-
-struct ggml_cuda_device_info {
-    int device_count;
-
-    struct cuda_device_info {
-        int     cc;                 // compute capability
-        int     nsm;                // number of streaming multiprocessors
-        size_t  smpb;               // max. shared memory per block
-        size_t  smpbo;              // max. shared memory per block (with opt-in)
-        bool    vmm;                // virtual memory support
-        size_t  vmm_granularity;    // granularity of virtual memory
-        size_t  total_vram;
-    };
-
-    cuda_device_info devices[GGML_CUDA_MAX_DEVICES] = {};
-
-    std::array<float, GGML_CUDA_MAX_DEVICES> default_tensor_split = {};
-};
-
-const ggml_cuda_device_info & ggml_cuda_info();
-
-void ggml_cuda_set_device(int device);
-int ggml_cuda_get_device();
-
-struct ggml_cuda_pool {
-    virtual ~ggml_cuda_pool() = default;
-
-    virtual void * alloc(size_t size, size_t * actual_size) = 0;
-    virtual void free(void * ptr, size_t size) = 0;
-};
-
-template<typename T>
-struct ggml_cuda_pool_alloc {
-    ggml_cuda_pool * pool = nullptr;
-    T * ptr = nullptr;
-    size_t actual_size = 0;
-
-    ggml_cuda_pool_alloc() = default;
-
-    explicit ggml_cuda_pool_alloc(ggml_cuda_pool & pool) : pool(&pool) {
-    }
-
-    ggml_cuda_pool_alloc(ggml_cuda_pool & pool, size_t size) : pool(&pool) {
-        alloc(size);
-    }
-
-    ~ggml_cuda_pool_alloc() {
-        if (ptr != nullptr) {
-            pool->free(ptr, actual_size);
-        }
-    }
-
-    // size is in number of elements
-    T * alloc(size_t size) {
-        GGML_ASSERT(pool != nullptr);
-        GGML_ASSERT(ptr == nullptr);
-        ptr = (T *) pool->alloc(size * sizeof(T), &this->actual_size);
-        return ptr;
-    }
-
-    T * alloc(ggml_cuda_pool & pool, size_t size) {
-        this->pool = &pool;
-        return alloc(size);
-    }
-
-    T * get() {
-        return ptr;
-    }
-
-    ggml_cuda_pool_alloc(const ggml_cuda_pool_alloc &) = delete;
-    ggml_cuda_pool_alloc(ggml_cuda_pool_alloc &&) = delete;
-    ggml_cuda_pool_alloc& operator=(const ggml_cuda_pool_alloc &) = delete;
-    ggml_cuda_pool_alloc& operator=(ggml_cuda_pool_alloc &&) = delete;
-};
-
-
-// backend interface
-
-struct ggml_tensor_extra_gpu {
-    void * data_device[GGML_CUDA_MAX_DEVICES]; // 1 pointer for each device for split tensors
-    cudaEvent_t events[GGML_CUDA_MAX_DEVICES][GGML_CUDA_MAX_STREAMS]; // events for synchronizing multiple GPUs
-};
-
-
-#if (CUDART_VERSION >= 12000) && defined(GGML_CUDA_USE_GRAPHS)
-#define USE_CUDA_GRAPH
-#endif
-
-struct ggml_graph_node_properties {
-    void * node_address;
-    ggml_op node_op;
-    int64_t ne[GGML_MAX_DIMS];
-    size_t nb[GGML_MAX_DIMS];
-    void * src_address[GGML_MAX_SRC];
-};
-
-struct ggml_cuda_graph {
-#ifdef USE_CUDA_GRAPH
-    ~ggml_cuda_graph() {
-        if (instance != nullptr) {
-            CUDA_CHECK(cudaGraphExecDestroy(instance));
-        }
-        if (graph != nullptr) {
-            CUDA_CHECK(cudaGraphDestroy(graph));
-        }
-    }
-    cudaGraph_t graph = nullptr;
-    cudaGraphExec_t instance = nullptr;
-    size_t num_nodes = 0;
-    std::vector<cudaGraphNode_t> nodes;
-    std::vector<cudaKernelNodeParams> params;
-    bool disable_due_to_gpu_arch = false;
-    bool disable_due_to_too_many_updates = false;
-    bool disable_due_to_failed_graph_capture = false;
-    int number_consecutive_updates = 0;
-    std::vector<ggml_graph_node_properties> ggml_graph_properties;
-    std::vector<char **> updated_kernel_arg;
-#endif
-};
-
-struct ggml_backend_cuda_context {
-    int device;
-    std::string name;
-    cudaEvent_t copy_event = nullptr;
-
-    cudaStream_t streams[GGML_CUDA_MAX_DEVICES][GGML_CUDA_MAX_STREAMS] = { { nullptr } };
-    cublasHandle_t cublas_handles[GGML_CUDA_MAX_DEVICES] = {nullptr};
-
-    std::unique_ptr<ggml_cuda_graph> cuda_graph;
-
-    explicit ggml_backend_cuda_context(int device) :
-        device(device),
-        name(GGML_CUDA_NAME + std::to_string(device)) {
-    }
-
-    ~ggml_backend_cuda_context() {
-        if (copy_event != nullptr) {
-            CUDA_CHECK(cudaEventDestroy(copy_event));
-        }
-        for (int i = 0; i < GGML_CUDA_MAX_DEVICES; ++i) {
-            for (int j = 0; j < GGML_CUDA_MAX_STREAMS; ++j) {
-                if (streams[i][j] != nullptr) {
-                    CUDA_CHECK(cudaStreamDestroy(streams[i][j]));
-                }
-            }
-            if (cublas_handles[i] != nullptr) {
-                CUBLAS_CHECK(cublasDestroy(cublas_handles[i]));
-            }
-        }
-    }
-
-    cudaStream_t stream(int device, int stream) {
-        if (streams[device][stream] == nullptr) {
-            ggml_cuda_set_device(device);
-            CUDA_CHECK(cudaStreamCreateWithFlags(&streams[device][stream], cudaStreamNonBlocking));
-        }
-        return streams[device][stream];
-    }
-
-    cudaStream_t stream() {
-        return stream(device, 0);
-    }
-
-    cublasHandle_t cublas_handle(int device) {
-        if (cublas_handles[device] == nullptr) {
-            ggml_cuda_set_device(device);
-            CUBLAS_CHECK(cublasCreate(&cublas_handles[device]));
-            CUBLAS_CHECK(cublasSetMathMode(cublas_handles[device], CUBLAS_TF32_TENSOR_OP_MATH));
-        }
-        return cublas_handles[device];
-    }
-
-    cublasHandle_t cublas_handle() {
-        return cublas_handle(device);
-    }
-
-    // pool
-    std::unique_ptr<ggml_cuda_pool> pools[GGML_CUDA_MAX_DEVICES];
-
-    static std::unique_ptr<ggml_cuda_pool> new_pool_for_device(int device);
-
-    ggml_cuda_pool & pool(int device) {
-        if (pools[device] == nullptr) {
-            pools[device] = new_pool_for_device(device);
-        }
-        return *pools[device];
-    }
-
-    ggml_cuda_pool & pool() {
-        return pool(device);
-    }
-};
diff --git a/ggml-cuda/concat.cu b/ggml-cuda/concat.cu
deleted file mode 100644 (file)
index dac10ec..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-#include "concat.cuh"
-
-// contiguous kernels
-static __global__ void concat_f32_dim0(const float * x, const float * y, float * dst, const int ne0, const int ne00) {
-    int nidx = threadIdx.x + blockIdx.x * blockDim.x;
-    if (nidx >= ne0) {
-        return;
-    }
-
-    int offset_dst =
-        nidx +
-        blockIdx.y * ne0 +
-        blockIdx.z * ne0 * gridDim.y;
-
-    if (nidx < ne00) { // src0
-        int offset_src =
-            nidx +
-            blockIdx.y * ne00 +
-            blockIdx.z * ne00 * gridDim.y;
-        dst[offset_dst] = x[offset_src];
-    } else {
-        int offset_src =
-            (nidx - ne00) +
-            blockIdx.y * (ne0 - ne00) +
-            blockIdx.z * (ne0 - ne00) * gridDim.y;
-        dst[offset_dst] = y[offset_src];
-    }
-}
-
-static __global__ void concat_f32_dim1(const float * x, const float * y, float * dst, const int ne0, const int ne01) {
-    int nidx = threadIdx.x + blockIdx.x * blockDim.x;
-    if (nidx >= ne0) {
-        return;
-    }
-
-    int offset_dst =
-        nidx +
-        blockIdx.y * ne0 +
-        blockIdx.z * ne0 * gridDim.y;
-
-    if (blockIdx.y < ne01) { // src0
-        int offset_src =
-            nidx +
-            blockIdx.y * ne0 +
-            blockIdx.z * ne0 * ne01;
-        dst[offset_dst] = x[offset_src];
-    } else {
-        int offset_src =
-            nidx +
-            (blockIdx.y - ne01) * ne0 +
-            blockIdx.z * ne0 * (gridDim.y - ne01);
-        dst[offset_dst] = y[offset_src];
-    }
-}
-
-static __global__ void concat_f32_dim2(const float * x, const float * y, float * dst, const int ne0, const int ne02) {
-    int nidx = threadIdx.x + blockIdx.x * blockDim.x;
-    if (nidx >= ne0) {
-        return;
-    }
-
-    int offset_dst =
-        nidx +
-        blockIdx.y * ne0 +
-        blockIdx.z * ne0 * gridDim.y;
-
-    if (blockIdx.z < ne02) { // src0
-        int offset_src =
-            nidx +
-            blockIdx.y * ne0 +
-            blockIdx.z * ne0 * gridDim.y;
-        dst[offset_dst] = x[offset_src];
-    } else {
-        int offset_src =
-            nidx +
-            blockIdx.y * ne0 +
-            (blockIdx.z - ne02) * ne0 *  gridDim.y;
-        dst[offset_dst] = y[offset_src];
-    }
-}
-
-static void concat_f32_cuda(const float * x, const float * y, float * dst, int ne00, int ne01, int ne02, int ne0, int ne1, int ne2, int dim, cudaStream_t stream) {
-    int num_blocks = (ne0 + CUDA_CONCAT_BLOCK_SIZE - 1) / CUDA_CONCAT_BLOCK_SIZE;
-    dim3 gridDim(num_blocks, ne1, ne2);
-    if (dim == 0) {
-        concat_f32_dim0<<<gridDim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne0, ne00);
-        return;
-    }
-    if (dim == 1) {
-        concat_f32_dim1<<<gridDim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne0, ne01);
-        return;
-    }
-    concat_f32_dim2<<<gridDim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne0, ne02);
-}
-
-// non-contiguous kernel (slow)
-static __global__ void concat_f32_non_cont(
-        const char * src0,
-        const char * src1,
-              char * dst,
-           int64_t   ne00,
-           int64_t   ne01,
-           int64_t   ne02,
-           int64_t   ne03,
-          uint64_t   nb00,
-          uint64_t   nb01,
-          uint64_t   nb02,
-          uint64_t   nb03,
-           int64_t /*ne10*/,
-           int64_t /*ne11*/,
-           int64_t /*ne12*/,
-           int64_t /*ne13*/,
-          uint64_t   nb10,
-          uint64_t   nb11,
-          uint64_t   nb12,
-          uint64_t   nb13,
-           int64_t   ne0,
-           int64_t /*ne1*/,
-           int64_t /*ne2*/,
-           int64_t /*ne3*/,
-          uint64_t   nb0,
-          uint64_t   nb1,
-          uint64_t   nb2,
-          uint64_t   nb3,
-          int32_t   dim) {
-    const int64_t i3 = blockIdx.z;
-    const int64_t i2 = blockIdx.y;
-    const int64_t i1 = blockIdx.x;
-
-    int64_t o[4] = {0, 0, 0, 0};
-    o[dim] = dim == 0 ? ne00 : (dim == 1 ? ne01 : (dim == 2 ? ne02 : ne03));
-
-    const float * x;
-
-    for (int i0 = threadIdx.x; i0 < ne0; i0 += blockDim.x) {
-        if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) {
-            x = (const float *)(src0 + (i3       )*nb03 + (i2       )*nb02 + (i1       )*nb01 + (i0       )*nb00);
-        } else {
-            x = (const float *)(src1 + (i3 - o[3])*nb13 + (i2 - o[2])*nb12 + (i1 - o[1])*nb11 + (i0 - o[0])*nb10);
-        }
-
-        float * y = (float *)(dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-        *y = *x;
-    }
-}
-
-
-void ggml_cuda_op_concat(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const ggml_tensor * src1 = dst->src[1];
-
-    cudaStream_t stream = ctx.stream();
-
-    const int32_t dim = ((int32_t *) dst->op_params)[0];
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT(dst->type  == GGML_TYPE_F32);
-
-    if (ggml_is_contiguous(src0) && ggml_is_contiguous(src1)) {
-        const float * src0_d = (const float *)src0->data;
-        const float * src1_d = (const float *)src1->data;
-
-        float * dst_d = (float *)dst->data;
-
-        if (dim != 3) {
-            for (int i3 = 0; i3 < dst->ne[3]; i3++) {
-                concat_f32_cuda(
-                        src0_d + i3 * (src0->nb[3] / 4),
-                        src1_d + i3 * (src1->nb[3] / 4),
-                        dst_d + i3 * ( dst->nb[3] / 4),
-                        src0->ne[0], src0->ne[1], src0->ne[2],
-                        dst->ne[0],  dst->ne[1],  dst->ne[2], dim, stream);
-            }
-        } else {
-            const size_t size0 = ggml_nbytes(src0);
-            const size_t size1 = ggml_nbytes(src1);
-
-            CUDA_CHECK(cudaMemcpyAsync(dst_d,           src0_d, size0, cudaMemcpyDeviceToDevice, stream));
-            CUDA_CHECK(cudaMemcpyAsync(dst_d + size0/4, src1_d, size1, cudaMemcpyDeviceToDevice, stream));
-        }
-    } else {
-        dim3 grid_dim(dst->ne[1], dst->ne[2], dst->ne[3]);
-        concat_f32_non_cont<<<grid_dim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(
-                (const char *)src0->data,
-                (const char *)src1->data,
-                (      char *)dst->data,
-                src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3],
-                src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3],
-                src1->ne[0], src1->ne[1], src1->ne[2], src1->ne[3],
-                src1->nb[0], src1->nb[1], src1->nb[2], src1->nb[3],
-                dst->ne[0],  dst->ne[1],  dst->ne[2],  dst->ne[3],
-                dst->nb[0],  dst->nb[1],  dst->nb[2],  dst->nb[3], dim);
-    }
-}
diff --git a/ggml-cuda/concat.cuh b/ggml-cuda/concat.cuh
deleted file mode 100644 (file)
index aa506a0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_CONCAT_BLOCK_SIZE 256
-
-void ggml_cuda_op_concat(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/convert.cu b/ggml-cuda/convert.cu
deleted file mode 100644 (file)
index c0a4447..0000000
+++ /dev/null
@@ -1,686 +0,0 @@
-#include "convert.cuh"
-#include "dequantize.cuh"
-
-#define CUDA_Q8_0_NE_ALIGN 2048
-
-template <int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
-static __global__ void dequantize_block(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k) {
-    const int64_t i = (int64_t)2*(blockDim.x*blockIdx.x + threadIdx.x);
-
-    if (i >= k) {
-        return;
-    }
-
-    const int64_t ib = i/qk; // block index
-    const int64_t iqs = (i%qk)/qr; // quant index
-    const int64_t iybs = i - i%qk; // y block start index
-    const int64_t y_offset = qr == 1 ? 1 : qk/2;
-
-    // dequantize
-    dfloat2 v;
-    dequantize_kernel(vx, ib, iqs, v);
-
-    y[iybs + iqs + 0]        = v.x;
-    y[iybs + iqs + y_offset] = v.y;
-}
-
-template <bool need_check>
-static __global__ void dequantize_block_q8_0_f16(const void * __restrict__ vx, half * __restrict__ y, const int64_t k) {
-#if __CUDA_ARCH__ >= CC_PASCAL
-    constexpr int nint = CUDA_Q8_0_NE_ALIGN/sizeof(int) + WARP_SIZE;
-
-    const int64_t   i0 = CUDA_Q8_0_NE_ALIGN*blockIdx.x;
-    const int * x0 = ((int *) vx) + blockIdx.x * nint;
-    half2 * y2 = (half2 *) (y + i0);
-
-    __shared__ int vals[nint];
-
-#pragma unroll
-    for (int ix0 = 0; ix0 < nint; ix0 += WARP_SIZE) {
-        if (need_check && i0*sizeof(block_q8_0)/QK8_0 + sizeof(int)*(ix0 + threadIdx.x) >= k*sizeof(block_q8_0)/QK8_0) {
-            break;
-        }
-
-        const int ix = ix0 + threadIdx.x;
-        vals[ix] = x0[ix];
-    }
-
-    __syncthreads();
-
-#pragma unroll
-    for (int iy = 0; iy < CUDA_Q8_0_NE_ALIGN; iy += 2*WARP_SIZE) {
-        if (need_check && i0 + iy + 2*threadIdx.x >= k) {
-            return;
-        }
-
-        const half * b0 = ((const half  *) vals) + (sizeof(block_q8_0)/sizeof(half)) * ((iy + 2*threadIdx.x)/QK8_0);
-        const half    d = *b0;
-        const char2  qs = ((const char2 *) (b0 + 1))[threadIdx.x % (QK8_0/2)];
-
-        y2[iy/2 + threadIdx.x] = __hmul2(make_half2(qs.x, qs.y), __half2half2(d));
-    }
-#else
-    GGML_UNUSED(vx);
-    GGML_UNUSED(y);
-    GGML_UNUSED(k);
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= CC_PASCAL
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_q4_0(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32) {
-
-    const int64_t i = blockIdx.x;
-
-    // assume 32 threads
-    const int64_t tid = threadIdx.x;
-    const int64_t il  = tid/8;
-    const int64_t ir  = tid%8;
-    const int64_t ib = 8*i + ir;
-    if (ib >= nb32) {
-        return;
-    }
-
-    dst_t * y = yy + 256*i + 32*ir + 4*il;
-
-    const block_q4_0 * x = (const block_q4_0 *)vx + ib;
-    const float d = __half2float(x->d);
-    const float dm = -8*d;
-
-    const uint8_t * q = x->qs + 4*il;
-
-    for (int l = 0; l < 4; ++l) {
-        y[l+ 0] = d * (q[l] & 0xF) + dm;
-        y[l+16] = d * (q[l] >>  4) + dm;
-    }
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_q4_1(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32) {
-
-    const int64_t i = blockIdx.x;
-
-    // assume 32 threads
-    const int64_t tid = threadIdx.x;
-    const int64_t il  = tid/8;
-    const int64_t ir  = tid%8;
-    const int64_t ib = 8*i + ir;
-    if (ib >= nb32) {
-        return;
-    }
-
-    dst_t * y = yy + 256*i + 32*ir + 4*il;
-
-    const block_q4_1 * x = (const block_q4_1 *)vx + ib;
-    const float2 d = __half22float2(x->dm);
-
-    const uint8_t * q = x->qs + 4*il;
-
-    for (int l = 0; l < 4; ++l) {
-        y[l+ 0] = d.x * (q[l] & 0xF) + d.y;
-        y[l+16] = d.x * (q[l] >>  4) + d.y;
-    }
-}
-
-//================================== k-quants
-
-template<typename dst_t>
-static __global__ void dequantize_block_q2_K(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-
-    const int64_t i   = blockIdx.x;
-    const block_q2_K * x = (const block_q2_K *) vx;
-
-    const int64_t tid = threadIdx.x;
-    const int64_t n   = tid/32;
-    const int64_t l   = tid - 32*n;
-    const int64_t is  = 8*n + l/16;
-
-    const uint8_t q = x[i].qs[32*n + l];
-    dst_t * y = yy + i*QK_K + 128*n;
-
-    float dall = __low2half(x[i].dm);
-    float dmin = __high2half(x[i].dm);
-    y[l+ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4);
-    y[l+32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 2) & 3) - dmin * (x[i].scales[is+2] >> 4);
-    y[l+64] = dall * (x[i].scales[is+4] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+4] >> 4);
-    y[l+96] = dall * (x[i].scales[is+6] & 0xF) * ((q >> 6) & 3) - dmin * (x[i].scales[is+6] >> 4);
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_q3_K(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-
-    const int64_t i = blockIdx.x;
-    const block_q3_K * x = (const block_q3_K *) vx;
-
-    const int64_t r = threadIdx.x/4;
-    const int64_t tid = r/2;
-    const int64_t is0 = r%2;
-    const int64_t l0 = 16*is0 + 4*(threadIdx.x%4);
-    const int64_t n = tid / 4;
-    const int64_t j = tid - 4*n;
-
-    uint8_t m = 1 << (4*n + j);
-    int64_t is = 8*n + 2*j + is0;
-    int shift = 2*j;
-
-    int8_t us = is <  4 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+8] >> 0) & 3) << 4) :
-                is <  8 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+4] >> 2) & 3) << 4) :
-                is < 12 ? (x[i].scales[is-8] >>  4) | (((x[i].scales[is+0] >> 4) & 3) << 4) :
-                          (x[i].scales[is-8] >>  4) | (((x[i].scales[is-4] >> 6) & 3) << 4);
-    float d_all = x[i].d;
-    float dl = d_all * (us - 32);
-
-    dst_t * y = yy + i*QK_K + 128*n + 32*j;
-    const uint8_t * q = x[i].qs + 32*n;
-    const uint8_t * hm = x[i].hmask;
-
-    for (int l = l0; l < l0+4; ++l) y[l] = dl * ((int8_t)((q[l] >> shift) & 3) - ((hm[l] & m) ? 0 : 4));
-}
-
-static inline __device__ void get_scale_min_k4(int j, const uint8_t * q, uint8_t & d, uint8_t & m) {
-    if (j < 4) {
-        d = q[j] & 63; m = q[j + 4] & 63;
-    } else {
-        d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4);
-        m = (q[j+4] >>  4) | ((q[j-0] >> 6) << 4);
-    }
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_q4_K(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-    const block_q4_K * x = (const block_q4_K *) vx;
-
-    const int64_t i = blockIdx.x;
-
-    // assume 32 threads
-    const int64_t tid = threadIdx.x;
-    const int64_t il  = tid/8;
-    const int64_t ir  = tid%8;
-    const int64_t is  = 2*il;
-    const int64_t n   = 4;
-
-    dst_t * y = yy + i*QK_K + 64*il + n*ir;
-
-    const float dall = __low2half(x[i].dm);
-    const float dmin = __high2half(x[i].dm);
-
-    const uint8_t * q = x[i].qs + 32*il + n*ir;
-
-    uint8_t sc, m;
-    get_scale_min_k4(is + 0, x[i].scales, sc, m);
-    const float d1 = dall * sc; const float m1 = dmin * m;
-    get_scale_min_k4(is + 1, x[i].scales, sc, m);
-    const float d2 = dall * sc; const float m2 = dmin * m;
-    for (int l = 0; l < n; ++l) {
-        y[l + 0] = d1 * (q[l] & 0xF) - m1;
-        y[l +32] = d2 * (q[l] >>  4) - m2;
-    }
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_q5_K(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-    const block_q5_K * x = (const block_q5_K *) vx;
-
-    const int64_t i = blockIdx.x;
-
-    // assume 64 threads - this is very slightly better than the one below
-    const int64_t tid = threadIdx.x;
-    const int64_t il  = tid/16;   // il is in 0...3
-    const int64_t ir  = tid%16;   // ir is in 0...15
-    const int64_t is  = 2*il;     // is is in 0...6
-
-    dst_t * y = yy + i*QK_K + 64*il + 2*ir;
-
-    const float dall = __low2half(x[i].dm);
-    const float dmin = __high2half(x[i].dm);
-
-    const uint8_t * ql = x[i].qs + 32*il + 2*ir;
-    const uint8_t * qh = x[i].qh + 2*ir;
-
-    uint8_t sc, m;
-    get_scale_min_k4(is + 0, x[i].scales, sc, m);
-    const float d1 = dall * sc; const float m1 = dmin * m;
-    get_scale_min_k4(is + 1, x[i].scales, sc, m);
-    const float d2 = dall * sc; const float m2 = dmin * m;
-
-    uint8_t   hm  = 1 << (2*il);
-    y[ 0] = d1 * ((ql[ 0] & 0xF) + (qh[ 0] & hm ? 16 : 0)) - m1;
-    y[ 1] = d1 * ((ql[ 1] & 0xF) + (qh[ 1] & hm ? 16 : 0)) - m1;
-    hm <<= 1;
-    y[32] = d2 * ((ql[ 0] >>  4) + (qh[ 0] & hm ? 16 : 0)) - m2;
-    y[33] = d2 * ((ql[ 1] >>  4) + (qh[ 1] & hm ? 16 : 0)) - m2;
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_q6_K(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-    const block_q6_K * x = (const block_q6_K *) vx;
-
-    const int64_t i = blockIdx.x;
-
-    // assume 64 threads - this is very slightly better than the one below
-    const int64_t tid = threadIdx.x;
-    const int64_t ip  = tid/32;   // ip is 0 or 1
-    const int64_t il  = tid - 32*ip; // 0...32
-    const int64_t is  = 8*ip + il/16;
-
-    dst_t * y = yy + i*QK_K + 128*ip + il;
-
-    const float d = x[i].d;
-
-    const uint8_t * ql = x[i].ql + 64*ip + il;
-    const uint8_t   qh = x[i].qh[32*ip + il];
-    const int8_t  * sc = x[i].scales + is;
-
-    y[ 0] = d * sc[0] * ((int8_t)((ql[ 0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32);
-    y[32] = d * sc[2] * ((int8_t)((ql[32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32);
-    y[64] = d * sc[4] * ((int8_t)((ql[ 0]  >> 4) | (((qh >> 4) & 3) << 4)) - 32);
-    y[96] = d * sc[6] * ((int8_t)((ql[32]  >> 4) | (((qh >> 6) & 3) << 4)) - 32);
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_iq2_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-
-    const int64_t i   = blockIdx.x;
-    const block_iq2_xxs * x = (const block_iq2_xxs  *) vx;
-
-    const int64_t tid = threadIdx.x;
-    const int64_t il = tid/8; // 0...3
-    const int64_t ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint16_t * q2 = x[i].qs + 4*ib;
-    const uint8_t  * aux8 = (const uint8_t *)q2;
-    const uint8_t  * grid = (const uint8_t *)(iq2xxs_grid + aux8[il]);
-    const uint32_t aux32 = q2[2] | (q2[3] << 16);
-    const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.25f;
-    const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*il) & 127];
-    for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_iq2_xs(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-
-    const int64_t i   = blockIdx.x;
-    const block_iq2_xs * x = (const block_iq2_xs *) vx;
-
-    const int64_t tid = threadIdx.x;
-    const int64_t il = tid/8; // 0...3
-    const int64_t ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint16_t * q2 = x[i].qs + 4*ib;
-    const uint8_t  * grid = (const uint8_t *)(iq2xs_grid + (q2[il] & 511));
-    const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f;
-    const uint8_t signs = ksigns_iq2xs[q2[il] >> 9];
-    for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_iq2_s(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-
-    const int64_t i   = blockIdx.x;
-    const block_iq2_s * x = (const block_iq2_s *) vx;
-
-    const int64_t tid = threadIdx.x;
-    const int64_t il = tid/8; // 0...3
-    const int64_t ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint8_t * grid = (const uint8_t *)(iq2s_grid + (x[i].qs[4*ib+il] | ((x[i].qh[ib] << (8-2*il)) & 0x300)));
-    const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f;
-    const uint8_t signs = x[i].qs[QK_K/8+4*ib+il];
-    for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_iq3_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-
-    const int64_t i   = blockIdx.x;
-    const block_iq3_xxs * x = (const block_iq3_xxs  *) vx;
-
-    const int64_t tid = threadIdx.x;
-    const int64_t il = tid/8; // 0...3
-    const int64_t ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint8_t  * q3 = x[i].qs + 8*ib;
-    const uint16_t * gas = (const uint16_t *)(x[i].qs + QK_K/4) + 2*ib;
-    const uint8_t  * grid1 = (const uint8_t *)(iq3xxs_grid + q3[2*il+0]);
-    const uint8_t  * grid2 = (const uint8_t *)(iq3xxs_grid + q3[2*il+1]);
-    const uint32_t aux32 = gas[0] | (gas[1] << 16);
-    const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.5f;
-    const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*il) & 127];
-    for (int j = 0; j < 4; ++j) {
-        y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
-        y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
-    }
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_iq3_s(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-
-    const int64_t i   = blockIdx.x;
-    const block_iq3_s * x = (const block_iq3_s *) vx;
-
-    const int64_t tid = threadIdx.x;
-    const int64_t il = tid/8; // 0...3
-    const int64_t ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint8_t * qs = x[i].qs + 8*ib;
-    const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*il+0] | ((x[i].qh[ib] << (8-2*il)) & 256)));
-    const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*il+1] | ((x[i].qh[ib] << (7-2*il)) & 256)));
-    const float d = (float)x[i].d * (1 + 2*((x[i].scales[ib/2] >> 4*(ib%2)) & 0xf));
-    const uint8_t signs = x[i].signs[4*ib + il];
-    for (int j = 0; j < 4; ++j) {
-        y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
-        y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
-    }
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_iq1_s(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-
-    const int64_t i   = blockIdx.x;
-    const block_iq1_s * x = (const block_iq1_s  *) vx;
-
-    const int64_t tid = threadIdx.x;
-    const int64_t il = tid/8; // 0...3
-    const int64_t ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const float delta = x[i].qh[ib] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA;
-    const float d = (float)x[i].d * (2*((x[i].qh[ib] >> 12) & 7) + 1);
-    uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32;
-    grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[ib] >> 3*il) & 7) << 8)];
-    grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f;
-    grid32[0] &= 0x0f0f0f0f;
-    for (int j = 0; j < 8; ++j) {
-        y[j] = d * (q[j] + delta);
-    }
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_iq1_m(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-
-    const int64_t i   = blockIdx.x;
-    const block_iq1_m * x = (const block_iq1_m  *) vx;
-
-    const int64_t tid = threadIdx.x;
-    const int64_t il = tid/8; // 0...3
-    const int64_t ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint16_t * sc = (const uint16_t *)x[i].scales;
-    iq1m_scale_t scale;
-    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-    const int64_t ib16 = 2*ib + il/2; // sc[ib16/4] >> 3*(ib16%4) -> sc[ib/2] >> 3*((2*ib+il/2)%4);
-    const float d = (float)scale.f16 * (2*((sc[ib16/4] >> 3*(ib16%4)) & 0x7) + 1);
-    const float delta = x[i].qh[2*ib+il/2] & (0x08 << 4*(il%2)) ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA;
-    uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32;
-    grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[2*ib+il/2] >> 4*(il%2)) & 7) << 8)];
-    grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f;
-    grid32[0] &= 0x0f0f0f0f;
-    for (int j = 0; j < 8; ++j) {
-        y[j] = d * (q[j] + delta);
-    }
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_iq4_nl(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-
-    const int64_t i   = blockIdx.x;
-    const block_iq4_nl * x = (const block_iq4_nl *) vx + i*(QK_K/QK4_NL);
-
-    const int64_t tid = threadIdx.x;
-    const int64_t il = tid/8; // 0...3
-    const int64_t ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 4*il;
-    const uint8_t  * q4 = x[ib].qs + 4*il;
-    const float d = (float)x[ib].d;
-    for (int j = 0; j < 4; ++j) {
-        y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf];
-        y[j+16] = d * kvalues_iq4nl[q4[j] >>  4];
-    }
-}
-
-template<typename dst_t>
-static __global__ void dequantize_block_iq4_xs(const void * __restrict__ vx, dst_t * __restrict__ yy) {
-    const int64_t i   = blockIdx.x;
-    const block_iq4_xs * x = (const block_iq4_xs *)vx;
-
-    const int64_t tid = threadIdx.x;
-    const int64_t il = tid/8; // 0...3
-    const int64_t ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 4*il;
-    const uint8_t  * q4 = x[i].qs + 16*ib + 4*il;
-    const float d = (float)x[i].d * ((((x[i].scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((x[i].scales_h >> 2*ib) & 3) << 4)) - 32);
-    for (int j = 0; j < 4; ++j) {
-        y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf];
-        y[j+16] = d * kvalues_iq4nl[q4[j] >>  4];
-    }
-}
-
-template <int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
-static void dequantize_block_cuda(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k, cudaStream_t stream) {
-    const int num_blocks = (k + 2*CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / (2*CUDA_DEQUANTIZE_BLOCK_SIZE);
-    dequantize_block<qk, qr, dequantize_kernel><<<num_blocks, CUDA_DEQUANTIZE_BLOCK_SIZE, 0, stream>>>(vx, y, k);
-}
-
-static void dequantize_block_q8_0_f16_cuda(const void * __restrict__ vx, half * __restrict__ y, const int64_t k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_Q8_0_NE_ALIGN - 1) / CUDA_Q8_0_NE_ALIGN;
-    if (k % CUDA_Q8_0_NE_ALIGN == 0) {
-        const bool need_check = false;
-        dequantize_block_q8_0_f16<need_check><<<num_blocks, WARP_SIZE, 0, stream>>>(vx, y, k);
-    } else {
-        const bool need_check = true;
-        dequantize_block_q8_0_f16<need_check><<<num_blocks, WARP_SIZE, 0, stream>>>(vx, y, k);
-    }
-}
-
-template<typename dst_t>
-static void dequantize_row_q2_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_q2_K<<<nb, 64, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_q3_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_q3_K<<<nb, 64, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_q4_0_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb32 = k / 32;
-    const int nb = (k + 255) / 256;
-    dequantize_block_q4_0<<<nb, 32, 0, stream>>>(vx, y, nb32);
-}
-
-template<typename dst_t>
-static void dequantize_row_q4_1_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb32 = k / 32;
-    const int nb = (k + 255) / 256;
-    dequantize_block_q4_1<<<nb, 32, 0, stream>>>(vx, y, nb32);
-}
-
-template<typename dst_t>
-static void dequantize_row_q4_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_q4_K<<<nb, 32, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_q5_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_q5_K<<<nb, 64, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_q6_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_q6_K<<<nb, 64, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_iq2_xxs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_iq2_xxs<<<nb, 32, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_iq2_xs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_iq2_xs<<<nb, 32, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_iq2_s_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_iq2_s<<<nb, 32, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_iq3_xxs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_iq3_xxs<<<nb, 32, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_iq3_s_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_iq3_s<<<nb, 32, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_iq1_s_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_iq1_s<<<nb, 32, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_iq4_nl_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = (k + QK_K - 1) / QK_K;
-    dequantize_block_iq4_nl<<<nb, 32, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_iq1_m_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = k / QK_K;
-    dequantize_block_iq1_m<<<nb, 32, 0, stream>>>(vx, y);
-}
-
-template<typename dst_t>
-static void dequantize_row_iq4_xs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
-    const int nb = (k + QK_K - 1) / QK_K;
-    dequantize_block_iq4_xs<<<nb, 32, 0, stream>>>(vx, y);
-}
-
-template <typename src_t, typename dst_t>
-static __global__ void convert_unary(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k) {
-    const int64_t i = (int64_t)blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= k) {
-        return;
-    }
-
-    const src_t * x = (src_t *) vx;
-
-    y[i] = x[i];
-}
-
-template <typename src_t, typename dst_t>
-static void convert_unary_cuda(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / CUDA_DEQUANTIZE_BLOCK_SIZE;
-    convert_unary<src_t><<<num_blocks, CUDA_DEQUANTIZE_BLOCK_SIZE, 0, stream>>>(vx, y, k);
-}
-
-to_fp16_cuda_t ggml_get_to_fp16_cuda(ggml_type type) {
-    switch (type) {
-        case GGML_TYPE_Q4_0:
-            return dequantize_row_q4_0_cuda;
-        case GGML_TYPE_Q4_1:
-            return dequantize_row_q4_1_cuda;
-        case GGML_TYPE_Q5_0:
-            return dequantize_block_cuda<QK5_0, QR5_0, dequantize_q5_0>;
-        case GGML_TYPE_Q5_1:
-            return dequantize_block_cuda<QK5_1, QR5_1, dequantize_q5_1>;
-        case GGML_TYPE_Q8_0:
-            if (ggml_cuda_info().devices[ggml_cuda_get_device()].cc >= CC_PASCAL) {
-                return dequantize_block_q8_0_f16_cuda;
-            }
-            return dequantize_block_cuda<QK8_0, QR8_0, dequantize_q8_0>;
-        case GGML_TYPE_Q2_K:
-            return dequantize_row_q2_K_cuda;
-        case GGML_TYPE_Q3_K:
-            return dequantize_row_q3_K_cuda;
-        case GGML_TYPE_Q4_K:
-            return dequantize_row_q4_K_cuda;
-        case GGML_TYPE_Q5_K:
-            return dequantize_row_q5_K_cuda;
-        case GGML_TYPE_Q6_K:
-            return dequantize_row_q6_K_cuda;
-        case GGML_TYPE_IQ2_XXS:
-            return dequantize_row_iq2_xxs_cuda;
-        case GGML_TYPE_IQ2_XS:
-            return dequantize_row_iq2_xs_cuda;
-        case GGML_TYPE_IQ2_S:
-            return dequantize_row_iq2_s_cuda;
-        case GGML_TYPE_IQ3_XXS:
-            return dequantize_row_iq3_xxs_cuda;
-        case GGML_TYPE_IQ1_S:
-            return dequantize_row_iq1_s_cuda;
-        case GGML_TYPE_IQ1_M:
-            return dequantize_row_iq1_m_cuda;
-        case GGML_TYPE_IQ4_NL:
-            return dequantize_row_iq4_nl_cuda;
-        case GGML_TYPE_IQ4_XS:
-            return dequantize_row_iq4_xs_cuda;
-        case GGML_TYPE_IQ3_S:
-            return dequantize_row_iq3_s_cuda;
-        case GGML_TYPE_F32:
-            return convert_unary_cuda<float>;
-        default:
-            return nullptr;
-    }
-}
-
-to_fp32_cuda_t ggml_get_to_fp32_cuda(ggml_type type) {
-    switch (type) {
-        case GGML_TYPE_Q4_0:
-            return dequantize_row_q4_0_cuda;
-        case GGML_TYPE_Q4_1:
-            return dequantize_row_q4_1_cuda;
-        case GGML_TYPE_Q5_0:
-            return dequantize_block_cuda<QK5_0, QR5_0, dequantize_q5_0>;
-        case GGML_TYPE_Q5_1:
-            return dequantize_block_cuda<QK5_1, QR5_1, dequantize_q5_1>;
-        case GGML_TYPE_Q8_0:
-            return dequantize_block_cuda<QK8_0, QR8_0, dequantize_q8_0>;
-        case GGML_TYPE_Q2_K:
-            return dequantize_row_q2_K_cuda;
-        case GGML_TYPE_Q3_K:
-            return dequantize_row_q3_K_cuda;
-        case GGML_TYPE_Q4_K:
-            return dequantize_row_q4_K_cuda;
-        case GGML_TYPE_Q5_K:
-            return dequantize_row_q5_K_cuda;
-        case GGML_TYPE_Q6_K:
-            return dequantize_row_q6_K_cuda;
-        case GGML_TYPE_IQ2_XXS:
-            return dequantize_row_iq2_xxs_cuda;
-        case GGML_TYPE_IQ2_XS:
-            return dequantize_row_iq2_xs_cuda;
-        case GGML_TYPE_IQ2_S:
-            return dequantize_row_iq2_s_cuda;
-        case GGML_TYPE_IQ3_XXS:
-            return dequantize_row_iq3_xxs_cuda;
-        case GGML_TYPE_IQ1_S:
-            return dequantize_row_iq1_s_cuda;
-        case GGML_TYPE_IQ1_M:
-            return dequantize_row_iq1_m_cuda;
-        case GGML_TYPE_IQ4_NL:
-            return dequantize_row_iq4_nl_cuda;
-        case GGML_TYPE_IQ4_XS:
-            return dequantize_row_iq4_xs_cuda;
-        case GGML_TYPE_IQ3_S:
-            return dequantize_row_iq3_s_cuda;
-        case GGML_TYPE_F16:
-            return convert_unary_cuda<half>;
-        default:
-            return nullptr;
-    }
-}
diff --git a/ggml-cuda/convert.cuh b/ggml-cuda/convert.cuh
deleted file mode 100644 (file)
index 5394be9..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_DEQUANTIZE_BLOCK_SIZE 256
-
-template<typename T>
-using to_t_cuda_t = void (*)(const void * __restrict__ x, T * __restrict__ y, int64_t k, cudaStream_t stream);
-
-typedef to_t_cuda_t<float> to_fp32_cuda_t;
-typedef to_t_cuda_t<half> to_fp16_cuda_t;
-
-to_fp16_cuda_t ggml_get_to_fp16_cuda(ggml_type type);
-
-to_fp32_cuda_t ggml_get_to_fp32_cuda(ggml_type type);
diff --git a/ggml-cuda/cpy.cu b/ggml-cuda/cpy.cu
deleted file mode 100644 (file)
index 12d741f..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-#include "cpy.cuh"
-
-typedef void (*cpy_kernel_t)(const char * cx, char * cdst);
-
-static __device__ void cpy_1_f32_f32(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    float * dsti = (float *) cdsti;
-
-    *dsti = *xi;
-}
-
-static __device__ void cpy_1_f32_f16(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    half * dsti = (half *) cdsti;
-
-    *dsti = __float2half(*xi);
-}
-
-static __device__ void cpy_1_f16_f16(const char * cxi, char * cdsti) {
-    const half * xi = (const half *) cxi;
-    half * dsti = (half *) cdsti;
-
-    *dsti = *xi;
-}
-
-static __device__ void cpy_1_f16_f32(const char * cxi, char * cdsti) {
-    const half * xi = (const half *) cxi;
-    float * dsti = (float *) cdsti;
-
-    *dsti = *xi;
-}
-
-template <cpy_kernel_t cpy_1>
-static __global__ void cpy_f32_f16(const char * cx, char * cdst, const int ne,
-                                   const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-                                   const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11,
-                                   const int nb12, const int nb13) {
-    const int64_t i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= ne) {
-        return;
-    }
-
-    // determine indices i03/i13, i02/i12, i01/i11, i00/i10 as a function of index i of flattened tensor
-    // then combine those indices with the corresponding byte offsets to get the total offsets
-    const int64_t i03 = i/(ne00 * ne01 * ne02);
-    const int64_t i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01);
-    const int64_t i01 = (i - i03*ne00*ne01*ne02  -  i02*ne01*ne00) / ne00;
-    const int64_t i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00;
-    const int64_t x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03;
-
-    const int64_t i13 = i/(ne10 * ne11 * ne12);
-    const int64_t i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11);
-    const int64_t i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10;
-    const int64_t i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10;
-    const int64_t dst_offset = i10*nb10 + i11*nb11 + i12*nb12 + i13 * nb13;
-
-    cpy_1(cx + x_offset, cdst + dst_offset);
-}
-
-static __device__ void cpy_blck_f32_q8_0(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    block_q8_0 * dsti = (block_q8_0 *) cdsti;
-
-    float amax = 0.0f; // absolute max
-
-    for (int j = 0; j < QK8_0; j++) {
-        const float v = xi[j];
-        amax = fmaxf(amax, fabsf(v));
-    }
-
-    const float d = amax / ((1 << 7) - 1);
-    const float id = d ? 1.0f/d : 0.0f;
-
-    dsti->d = d;
-
-    for (int j = 0; j < QK8_0; ++j) {
-        const float x0 = xi[j]*id;
-
-        dsti->qs[j] = roundf(x0);
-    }
-}
-
-static __device__ void cpy_blck_f32_q4_0(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    block_q4_0 * dsti = (block_q4_0 *) cdsti;
-
-    float amax = 0.0f;
-    float vmax = 0.0f;
-
-    for (int j = 0; j < QK4_0; ++j) {
-        const float v = xi[j];
-        if (amax < fabsf(v)) {
-            amax = fabsf(v);
-            vmax = v;
-        }
-    }
-
-    const float d  = vmax / -8;
-    const float id = d ? 1.0f/d : 0.0f;
-
-    dsti->d = d;
-
-    for (int j = 0; j < QK4_0/2; ++j) {
-        const float x0 = xi[0       + j]*id;
-        const float x1 = xi[QK4_0/2 + j]*id;
-
-        const uint8_t xi0 = min(15, (int8_t)(x0 + 8.5f));
-        const uint8_t xi1 = min(15, (int8_t)(x1 + 8.5f));
-
-        dsti->qs[j]  = xi0;
-        dsti->qs[j] |= xi1 << 4;
-    }
-}
-
-static __device__ void cpy_blck_f32_q4_1(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    block_q4_1 * dsti = (block_q4_1 *) cdsti;
-
-    float vmin = FLT_MAX;
-    float vmax = -FLT_MAX;
-
-    for (int j = 0; j < QK4_1; ++j) {
-        const float v = xi[j];
-
-        if (v < vmin) vmin = v;
-        if (v > vmax) vmax = v;
-    }
-
-    const float d  = (vmax - vmin) / ((1 << 4) - 1);
-    const float id = d ? 1.0f/d : 0.0f;
-
-    dsti->dm.x = d;
-    dsti->dm.y = vmin;
-
-    for (int j = 0; j < QK4_1/2; ++j) {
-        const float x0 = (xi[0       + j] - vmin)*id;
-        const float x1 = (xi[QK4_1/2 + j] - vmin)*id;
-
-        const uint8_t xi0 = min(15, (int8_t)(x0 + 0.5f));
-        const uint8_t xi1 = min(15, (int8_t)(x1 + 0.5f));
-
-        dsti->qs[j]  = xi0;
-        dsti->qs[j] |= xi1 << 4;
-    }
-}
-
-static __device__ void cpy_blck_f32_q5_0(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    block_q5_0 * dsti = (block_q5_0 *) cdsti;
-
-    float amax = 0.0f;
-    float vmax = 0.0f;
-
-    for (int j = 0; j < QK5_0; ++j) {
-        const float v = xi[j];
-        if (amax < fabsf(v)) {
-            amax = fabsf(v);
-            vmax = v;
-        }
-    }
-
-    const float d  = vmax / -16;
-    const float id = d ? 1.0f/d : 0.0f;
-
-    dsti->d = d;
-
-    uint32_t qh = 0;
-    for (int j = 0; j < QK5_0/2; ++j) {
-        const float x0 = xi[0       + j]*id;
-        const float x1 = xi[QK5_0/2 + j]*id;
-
-        const uint8_t xi0 = min(31, (int8_t)(x0 + 16.5f));
-        const uint8_t xi1 = min(31, (int8_t)(x1 + 16.5f));
-
-        dsti->qs[j]  = (xi0 & 0xf) | ((xi1 & 0xf) << 4);
-        qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
-        qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2);
-    }
-    memcpy(dsti->qh, &qh, sizeof(qh));
-}
-
-static __device__ void cpy_blck_f32_q5_1(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    block_q5_1 * dsti = (block_q5_1 *) cdsti;
-
-    float min = xi[0];
-    float max = xi[0];
-
-    for (int j = 1; j < QK5_1; ++j) {
-        const float v = xi[j];
-        min = v < min ? v : min;
-        max = v > max ? v : max;
-    }
-
-    const float d  = (max - min) / 31;
-    const float id = d ? 1.0f/d : 0.0f;
-
-    dsti->dm.x = d;
-    dsti->dm.y = min;
-
-    uint32_t qh = 0;
-    for (int j = 0; j < QK5_1/2; ++j) {
-        const float x0 = (xi[0       + j] - min)*id;
-        const float x1 = (xi[QK5_1/2 + j] - min)*id;
-
-        const uint8_t xi0 = (uint8_t)(x0 + 0.5f);
-        const uint8_t xi1 = (uint8_t)(x1 + 0.5f);
-
-        dsti->qs[j]  = (xi0 & 0xf) | ((xi1 & 0xf) << 4);
-        qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
-        qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_1/2);
-    }
-    memcpy(dsti->qh, &qh, sizeof(qh));
-}
-
-
-static __device__ __forceinline__ int best_index_int8(int n, const int8_t * val, float x) {
-    if (x <= val[0]) return 0;
-    if (x >= val[n-1]) return n-1;
-    int ml = 0, mu = n-1;
-    while (mu-ml > 1) {
-        int mav = (ml+mu)/2;
-        if (x < val[mav]) mu = mav; else ml = mav;
-    }
-    return x - val[mu-1] < val[mu] - x ? mu-1 : mu;
-}
-
-static __device__ void cpy_blck_f32_iq4_nl(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    block_iq4_nl * dsti = (block_iq4_nl *) cdsti;
-
-    float amax = 0.0f;
-    float vmax = 0.0f;
-
-    for (int j = 0; j < QK4_NL; ++j) {
-        const float v = xi[j];
-        if (amax < fabsf(v)) {
-            amax = fabsf(v);
-            vmax = v;
-        }
-    }
-
-    float d = vmax / kvalues_iq4nl[0];
-    const float id = d ? 1.0f/d : 0.0f;
-
-    float sumqx = 0, sumq2 = 0;
-    for (int j = 0; j < QK4_NL/2; ++j) {
-        const float x0 = xi[0        + j]*id;
-        const float x1 = xi[QK4_NL/2 + j]*id;
-        const uint8_t xi0 = best_index_int8(16, kvalues_iq4nl, x0);
-        const uint8_t xi1 = best_index_int8(16, kvalues_iq4nl, x1);
-        dsti->qs[j] = xi0 | (xi1 << 4);
-        const float v0 = kvalues_iq4nl[xi0];
-        const float v1 = kvalues_iq4nl[xi1];
-        const float w0 = xi[0        + j]*xi[0        + j];
-        const float w1 = xi[QK4_NL/2 + j]*xi[QK4_NL/2 + j];
-        sumqx += w0*v0*xi[j] + w1*v1*xi[QK4_NL/2 + j];
-        sumq2 += w0*v0*v0 + w1*v1*v1;
-    }
-
-    dsti->d = sumq2 > 0 ? sumqx/sumq2 : d;
-}
-
-template <cpy_kernel_t cpy_blck, int qk>
-static __global__ void cpy_f32_q(const char * cx, char * cdst, const int ne,
-                                 const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-                                 const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11,
-                                 const int nb12, const int nb13) {
-    const int i = (blockDim.x*blockIdx.x + threadIdx.x)*qk;
-
-    if (i >= ne) {
-        return;
-    }
-
-    const int i03 = i/(ne00 * ne01 * ne02);
-    const int i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01);
-    const int i01 = (i - i03*ne00*ne01*ne02  -  i02*ne01*ne00) / ne00;
-    const int i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00;
-    const int x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03;
-
-    const int i13 = i/(ne10 * ne11 * ne12);
-    const int i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11);
-    const int i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10;
-    const int i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10;
-    const int dst_offset = (i10/qk)*nb10 + i11*nb11 + i12*nb12 + i13*nb13;
-
-    cpy_blck(cx + x_offset, cdst + dst_offset);
-}
-
-static void ggml_cpy_f16_f32_cuda(
-    const char * cx, char * cdst, const int ne,
-    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
-
-    const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE;
-    cpy_f32_f16<cpy_1_f16_f32><<<num_blocks, CUDA_CPY_BLOCK_SIZE, 0, stream>>>
-        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
-}
-
-static void ggml_cpy_f32_f32_cuda(
-    const char * cx, char * cdst, const int ne,
-    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
-
-    const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE;
-    cpy_f32_f16<cpy_1_f32_f32><<<num_blocks, CUDA_CPY_BLOCK_SIZE, 0, stream>>>
-        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
-}
-
-static void ggml_cpy_f32_f16_cuda(
-    const char * cx, char * cdst, const int ne,
-    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
-
-    const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE;
-    cpy_f32_f16<cpy_1_f32_f16><<<num_blocks, CUDA_CPY_BLOCK_SIZE, 0, stream>>>
-        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
-}
-
-static void ggml_cpy_f32_q8_0_cuda(
-    const char * cx, char * cdst, const int ne,
-    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
-
-    GGML_ASSERT(ne % QK8_0 == 0);
-    const int num_blocks = ne / QK8_0;
-    cpy_f32_q<cpy_blck_f32_q8_0, QK8_0><<<num_blocks, 1, 0, stream>>>
-        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
-}
-
-static void ggml_cpy_f32_q4_0_cuda(
-    const char * cx, char * cdst, const int ne,
-    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
-
-    GGML_ASSERT(ne % QK4_0 == 0);
-    const int num_blocks = ne / QK4_0;
-    cpy_f32_q<cpy_blck_f32_q4_0, QK4_0><<<num_blocks, 1, 0, stream>>>
-        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
-}
-
-static void ggml_cpy_f32_q4_1_cuda(
-    const char * cx, char * cdst, const int ne,
-    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
-
-    GGML_ASSERT(ne % QK4_1 == 0);
-    const int num_blocks = ne / QK4_1;
-    cpy_f32_q<cpy_blck_f32_q4_1, QK4_1><<<num_blocks, 1, 0, stream>>>
-        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
-}
-
-static void ggml_cpy_f32_q5_0_cuda(
-    const char * cx, char * cdst, const int ne,
-    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
-
-    GGML_ASSERT(ne % QK5_0 == 0);
-    const int num_blocks = ne / QK5_0;
-    cpy_f32_q<cpy_blck_f32_q5_0, QK5_0><<<num_blocks, 1, 0, stream>>>
-        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
-}
-
-static void ggml_cpy_f32_q5_1_cuda(
-    const char * cx, char * cdst, const int ne,
-    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
-
-    GGML_ASSERT(ne % QK5_1 == 0);
-    const int num_blocks = ne / QK5_1;
-    cpy_f32_q<cpy_blck_f32_q5_1, QK5_1><<<num_blocks, 1, 0, stream>>>
-        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
-}
-
-static void ggml_cpy_f32_iq4_nl_cuda(
-    const char * cx, char * cdst, const int ne,
-    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
-
-    GGML_ASSERT(ne % QK4_NL == 0);
-    const int num_blocks = ne / QK4_NL;
-    cpy_f32_q<cpy_blck_f32_iq4_nl, QK4_NL><<<num_blocks, 1, 0, stream>>>
-        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
-}
-
-static void ggml_cpy_f16_f16_cuda(
-    const char * cx, char * cdst, const int ne,
-    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
-
-    const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE;
-    cpy_f32_f16<cpy_1_f16_f16><<<num_blocks, CUDA_CPY_BLOCK_SIZE, 0, stream>>>
-        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
-}
-
-void ggml_cuda_cpy(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, ggml_tensor * src1) {
-    const int64_t ne = ggml_nelements(src0);
-    GGML_ASSERT(ne == ggml_nelements(src1));
-
-    GGML_ASSERT(ggml_nbytes(src0) <= INT_MAX);
-    GGML_ASSERT(ggml_nbytes(src1) <= INT_MAX);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-    const int64_t ne02 = src0->ne[2];
-
-    //GGML_ASSERT(src0->ne[3] == 1);
-
-    const int64_t nb00 = src0->nb[0];
-    const int64_t nb01 = src0->nb[1];
-    const int64_t nb02 = src0->nb[2];
-    const int64_t nb03 = src0->nb[3];
-
-    const int64_t ne10 = src1->ne[0];
-    const int64_t ne11 = src1->ne[1];
-    const int64_t ne12 = src1->ne[2];
-
-    //GGML_ASSERT(src1->ne[3] == 1);
-
-    const int64_t nb10 = src1->nb[0];
-    const int64_t nb11 = src1->nb[1];
-    const int64_t nb12 = src1->nb[2];
-    const int64_t nb13 = src1->nb[3];
-
-    cudaStream_t main_stream = ctx.stream();
-
-    char * src0_ddc = (char *) src0->data;
-    char * src1_ddc = (char *) src1->data;
-
-    if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32) {
-        ggml_cpy_f32_f32_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F16) {
-        ggml_cpy_f32_f16_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q8_0) {
-        ggml_cpy_f32_q8_0_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_0) {
-        ggml_cpy_f32_q4_0_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_1) {
-        ggml_cpy_f32_q4_1_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q5_0) {
-        ggml_cpy_f32_q5_0_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_IQ4_NL) {
-        ggml_cpy_f32_iq4_nl_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q5_1) {
-        ggml_cpy_f32_q5_1_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16) {
-        ggml_cpy_f16_f16_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32) {
-        ggml_cpy_f16_f32_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else {
-        fprintf(stderr, "%s: unsupported type combination (%s to %s)\n", __func__,
-                ggml_type_name(src0->type), ggml_type_name(src1->type));
-        GGML_ASSERT(false);
-    }
-}
-
-void ggml_cuda_dup(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    ggml_cuda_cpy(ctx, src0, dst);
-}
-
-void* ggml_cuda_cpy_fn(const ggml_tensor * src0, ggml_tensor * src1) {
-    if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32) {
-            return (void*) cpy_f32_f16<cpy_1_f32_f32>;
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F16) {
-            return (void*) cpy_f32_f16<cpy_1_f32_f16>;
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q8_0) {
-            return (void*) cpy_f32_q<cpy_blck_f32_q8_0, QK8_0>;
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_0) {
-            return (void*) cpy_f32_q<cpy_blck_f32_q4_0, QK4_0>;
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_1) {
-            return (void*) cpy_f32_q<cpy_blck_f32_q4_1, QK4_1>;
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q5_0) {
-            return (void*) cpy_f32_q<cpy_blck_f32_q5_0, QK5_0>;
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_IQ4_NL) {
-            return (void*) cpy_f32_q<cpy_blck_f32_iq4_nl, QK4_NL>;
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q5_1) {
-            return (void*) cpy_f32_q<cpy_blck_f32_q5_1, QK5_1>;
-    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16) {
-            return (void*) cpy_f32_f16<cpy_1_f32_f16>;
-    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32) {
-            return (void*) cpy_f32_f16<cpy_1_f16_f32>;
-    } else {
-        fprintf(stderr, "%s: unsupported type combination (%s to %s)\n", __func__,
-                ggml_type_name(src0->type), ggml_type_name(src1->type));
-        GGML_ASSERT(false);
-    }
-}
-
diff --git a/ggml-cuda/cpy.cuh b/ggml-cuda/cpy.cuh
deleted file mode 100644 (file)
index 7961674..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_CPY_BLOCK_SIZE 32
-
-void ggml_cuda_cpy(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, ggml_tensor * src1);
-
-void ggml_cuda_dup(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void* ggml_cuda_cpy_fn(const ggml_tensor * src0, ggml_tensor * src1);
diff --git a/ggml-cuda/dequantize.cuh b/ggml-cuda/dequantize.cuh
deleted file mode 100644 (file)
index bd3c2d9..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#include "common.cuh"
-
-static __device__ __forceinline__ void dequantize_q4_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
-    const block_q4_0 * x = (const block_q4_0 *) vx;
-
-    const dfloat d = x[ib].d;
-
-    const int vui = x[ib].qs[iqs];
-
-    v.x = vui & 0xF;
-    v.y = vui >> 4;
-
-#ifdef GGML_CUDA_F16
-    v = __hsub2(v, {8.0f, 8.0f});
-    v = __hmul2(v, {d, d});
-#else
-    v.x = (v.x - 8.0f) * d;
-    v.y = (v.y - 8.0f) * d;
-#endif // GGML_CUDA_F16
-}
-
-static __device__ __forceinline__ void dequantize_q4_1(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
-    const block_q4_1 * x = (const block_q4_1 *) vx;
-
-    const dfloat d = __low2half(x[ib].dm);
-    const dfloat m = __high2half(x[ib].dm);
-
-    const int vui = x[ib].qs[iqs];
-
-    v.x = vui & 0xF;
-    v.y = vui >> 4;
-
-#ifdef GGML_CUDA_F16
-    v = __hmul2(v, {d, d});
-    v = __hadd2(v, {m, m});
-#else
-    v.x = (v.x * d) + m;
-    v.y = (v.y * d) + m;
-#endif // GGML_CUDA_F16
-}
-
-static __device__ __forceinline__ void dequantize_q5_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
-    const block_q5_0 * x = (const block_q5_0 *) vx;
-
-    const dfloat d = x[ib].d;
-
-    uint32_t qh;
-    memcpy(&qh, x[ib].qh, sizeof(qh));
-
-    const int xh_0 = ((qh >> (iqs +  0)) << 4) & 0x10;
-    const int xh_1 = ((qh >> (iqs + 12))     ) & 0x10;
-
-    v.x = ((x[ib].qs[iqs] & 0xf) | xh_0);
-    v.y = ((x[ib].qs[iqs] >>  4) | xh_1);
-
-#ifdef GGML_CUDA_F16
-    v = __hsub2(v, {16.0f, 16.0f});
-    v = __hmul2(v, {d, d});
-#else
-    v.x = (v.x - 16.0f) * d;
-    v.y = (v.y - 16.0f) * d;
-#endif // GGML_CUDA_F16
-}
-
-static __device__ __forceinline__ void dequantize_q5_1(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
-    const block_q5_1 * x = (const block_q5_1 *) vx;
-
-    const dfloat d = __low2half(x[ib].dm);
-    const dfloat m = __high2half(x[ib].dm);
-
-    uint32_t qh;
-    memcpy(&qh, x[ib].qh, sizeof(qh));
-
-    const int xh_0 = ((qh >> (iqs +  0)) << 4) & 0x10;
-    const int xh_1 = ((qh >> (iqs + 12))     ) & 0x10;
-
-    v.x = ((x[ib].qs[iqs] & 0xf) | xh_0);
-    v.y = ((x[ib].qs[iqs] >>  4) | xh_1);
-
-#ifdef GGML_CUDA_F16
-    v = __hmul2(v, {d, d});
-    v = __hadd2(v, {m, m});
-#else
-    v.x = (v.x * d) + m;
-    v.y = (v.y * d) + m;
-#endif // GGML_CUDA_F16
-}
-
-static __device__ __forceinline__ void dequantize_q8_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
-    const block_q8_0 * x = (const block_q8_0 *) vx;
-
-    const dfloat d = x[ib].d;
-
-    v.x = x[ib].qs[iqs + 0];
-    v.y = x[ib].qs[iqs + 1];
-
-#ifdef GGML_CUDA_F16
-    v = __hmul2(v, {d, d});
-#else
-    v.x *= d;
-    v.y *= d;
-#endif // GGML_CUDA_F16
-}
diff --git a/ggml-cuda/diagmask.cu b/ggml-cuda/diagmask.cu
deleted file mode 100644 (file)
index 4b713ba..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "diagmask.cuh"
-
-static __global__ void diag_mask_inf_f32(const float * x, float * dst, const int ncols, const int rows_per_channel, const int n_past) {
-    const int col = blockDim.y*blockIdx.y + threadIdx.y;
-    const int row = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (col >= ncols) {
-        return;
-    }
-
-    const int i = row*ncols + col;
-    //dst[i] = col > (n_past + row % rows_per_channel) ? -INFINITY : x[i];
-    //dst[i] = x[i] - (col > n_past + row % rows_per_channel) * INT_MAX; // equivalent within rounding error but slightly faster on GPU
-    dst[i] = x[i] - (col > n_past + row % rows_per_channel) * FLT_MAX;
-}
-
-static void diag_mask_inf_f32_cuda(const float * x, float * dst, const int ncols_x, const int nrows_x, const int rows_per_channel, const int n_past, cudaStream_t stream) {
-    const dim3 block_dims(1, CUDA_DIAG_MASK_INF_BLOCK_SIZE, 1);
-    const int block_num_x = (ncols_x + CUDA_DIAG_MASK_INF_BLOCK_SIZE - 1) / CUDA_DIAG_MASK_INF_BLOCK_SIZE;
-    const dim3 block_nums(nrows_x, block_num_x, 1);
-    diag_mask_inf_f32<<<block_nums, block_dims, 0, stream>>>(x, dst, ncols_x, rows_per_channel, n_past);
-}
-
-void ggml_cuda_op_diag_mask_inf(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-    const int nrows0 = ggml_nrows(src0);
-
-    const int n_past = ((int32_t *) dst->op_params)[0];
-
-    diag_mask_inf_f32_cuda(src0_d, dst_d, ne00, nrows0, ne01, n_past, stream);
-}
diff --git a/ggml-cuda/diagmask.cuh b/ggml-cuda/diagmask.cuh
deleted file mode 100644 (file)
index 6cdbef1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_DIAG_MASK_INF_BLOCK_SIZE 32
-
-void ggml_cuda_op_diag_mask_inf(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/dmmv.cu b/ggml-cuda/dmmv.cu
deleted file mode 100644 (file)
index 174489e..0000000
+++ /dev/null
@@ -1,674 +0,0 @@
-#include "dmmv.cuh"
-#include "dequantize.cuh"
-#include "convert.cuh"
-
-#ifndef K_QUANTS_PER_ITERATION
-#define K_QUANTS_PER_ITERATION 2
-#else
-static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2");
-#endif
-
-static __global__ void dequantize_mul_mat_vec_q2_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) {
-
-    static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION");
-
-    const int row = blockIdx.x*blockDim.y + threadIdx.y;
-    if (row > nrows) return;
-
-    const int num_blocks_per_row = ncols / QK_K;
-    const int ib0 = row*num_blocks_per_row;
-
-    const block_q2_K * x = (const block_q2_K *)vx + ib0;
-
-    float tmp = 0; // partial sum for thread in warp
-
-    const int tid = threadIdx.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...15
-    const int ix  = threadIdx.x%K_QUANTS_PER_ITERATION;  // 0 or 0,1
-
-    const int step = 16/K_QUANTS_PER_ITERATION;
-
-    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
-    const int in = tid - step*im;                        // 0...15 or 0...7
-
-    const int l0 = K_QUANTS_PER_ITERATION*in;            // 0...15 or 0...14 in steps of 2
-    const int q_offset = 32*im + l0;
-    const int s_offset = 8*im;
-    const int y_offset = 128*im + l0;
-
-    uint32_t aux[4];
-    const uint8_t * d = (const uint8_t *)aux;
-    const uint8_t * m = (const uint8_t *)(aux + 2);
-
-    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
-
-        const float   * y = yy + i * QK_K + y_offset;
-        const uint8_t * q = x[i].qs + q_offset;
-
-        const float dall = __low2half(x[i].dm);
-        const float dmin = __high2half(x[i].dm);
-
-        const uint32_t * a = (const uint32_t *)(x[i].scales + s_offset);
-        aux[0] = a[0] & 0x0f0f0f0f;
-        aux[1] = a[1] & 0x0f0f0f0f;
-        aux[2] = (a[0] >> 4) & 0x0f0f0f0f;
-        aux[3] = (a[1] >> 4) & 0x0f0f0f0f;
-
-        float sum1 = 0, sum2 = 0;
-        for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) {
-            sum1 += y[l+ 0] * d[0] * ((q[l+ 0] >> 0) & 3)
-                  + y[l+32] * d[2] * ((q[l+ 0] >> 2) & 3)
-                  + y[l+64] * d[4] * ((q[l+ 0] >> 4) & 3)
-                  + y[l+96] * d[6] * ((q[l+ 0] >> 6) & 3)
-                  + y[l+16] * d[1] * ((q[l+16] >> 0) & 3)
-                  + y[l+48] * d[3] * ((q[l+16] >> 2) & 3)
-                  + y[l+80] * d[5] * ((q[l+16] >> 4) & 3)
-                  +y[l+112] * d[7] * ((q[l+16] >> 6) & 3);
-            sum2 += y[l+ 0] * m[0] + y[l+32] * m[2] + y[l+64] * m[4] + y[ l+96] * m[6]
-                  + y[l+16] * m[1] + y[l+48] * m[3] + y[l+80] * m[5] + y[l+112] * m[7];
-
-        }
-        tmp += dall * sum1 - dmin * sum2;
-
-    }
-
-    // sum up partial sums and write back result
-    tmp = warp_reduce_sum(tmp);
-
-    if (threadIdx.x == 0) {
-        dst[row] = tmp;
-    }
-}
-
-static __global__ void dequantize_mul_mat_vec_q3_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) {
-
-    const int row = blockIdx.x*blockDim.y + threadIdx.y;
-    if (row > nrows) return;
-
-    const int num_blocks_per_row = ncols / QK_K;
-    const int ib0 = row*num_blocks_per_row;
-
-    const block_q3_K * x = (const block_q3_K *)vx + ib0;
-
-    float tmp = 0; // partial sum for thread in warp
-
-    const uint16_t kmask1 = 0x0303;
-    const uint16_t kmask2 = 0x0f0f;
-
-    const int tid = threadIdx.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...16
-    const int ix  = threadIdx.x%K_QUANTS_PER_ITERATION;  // 0 or 0,1
-
-    const int n  = K_QUANTS_PER_ITERATION;               // iterations in the inner loop
-    const int step = 16/K_QUANTS_PER_ITERATION;
-    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
-    const int in = tid - step*im;                        // 0....15 or 0...7
-
-    const uint8_t m = 1 << (4*im);
-
-    const int l0 = n*in;                                 // 0...15 or 0...14 in steps of 2
-    const int q_offset =  32*im + l0;
-    const int y_offset = 128*im + l0;
-
-    uint16_t utmp[4];
-    const int8_t * s = (const int8_t *)utmp;
-
-    const uint16_t s_shift = 4*im;
-
-    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
-
-        const float   * y  = yy + i * QK_K + y_offset;
-        const uint8_t * q = x[i].qs + q_offset;
-        const uint8_t * h = x[i].hmask + l0;
-
-        const uint16_t * a = (const uint16_t *)x[i].scales;
-        utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4);
-        utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4);
-        utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4);
-        utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4);
-
-        const float d = x[i].d;
-
-        float sum = 0;
-        for (int l = 0; l < n; ++l) {
-            sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4))
-                 + y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4))
-                 + y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4))
-                 + y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4));
-            sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4))
-                 + y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4))
-                 + y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4))
-                + y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4));
-        }
-        tmp += d * sum;
-
-    }
-
-    // sum up partial sums and write back result
-    tmp = warp_reduce_sum(tmp);
-
-    if (threadIdx.x == 0) {
-        dst[row] = tmp;
-    }
-}
-
-static __global__ void dequantize_mul_mat_vec_q4_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) {
-
-    const int row = blockIdx.x*blockDim.y + threadIdx.y;
-    if (row > nrows) return;
-    const int num_blocks_per_row = ncols / QK_K;
-    const int ib0 = row*num_blocks_per_row;
-
-    const block_q4_K * x = (const block_q4_K *)vx + ib0;
-
-    const uint16_t kmask1 = 0x3f3f;
-    const uint16_t kmask2 = 0x0f0f;
-    const uint16_t kmask3 = 0xc0c0;
-
-    const int tid = threadIdx.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...16
-    const int ix  = threadIdx.x%K_QUANTS_PER_ITERATION;  // 0 or 0,1
-
-    const int step = 8/K_QUANTS_PER_ITERATION;           // 8 or 4
-
-    const int il  = tid/step;                            // 0...3
-    const int ir  = tid - step*il;                       // 0...7 or 0...3
-    const int n   = 2 * K_QUANTS_PER_ITERATION;          // 2 or 4
-
-    const int im = il/2;  // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
-    const int in = il%2;
-
-    const int l0 = n*(2*ir + in);
-    const int q_offset = 32*im + l0;
-    const int y_offset = 64*im + l0;
-
-    uint16_t aux[4];
-    const uint8_t * sc = (const uint8_t *)aux;
-
-#if K_QUANTS_PER_ITERATION == 2
-    uint32_t q32[4];
-    const uint8_t * q4 = (const uint8_t *)q32;
-#else
-    uint16_t q16[4];
-    const uint8_t * q4 = (const uint8_t *)q16;
-#endif
-
-    float tmp = 0; // partial sum for thread in warp
-
-    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
-
-        const float   * y1 = yy + i*QK_K + y_offset;
-        const float   * y2 = y1 + 128;
-
-        const float dall = __low2half(x[i].dm);
-        const float dmin = __high2half(x[i].dm);
-
-        const uint16_t * a = (const uint16_t *)x[i].scales;
-        aux[0] = a[im+0] & kmask1;
-        aux[1] = a[im+2] & kmask1;
-        aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
-        aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
-
-#if K_QUANTS_PER_ITERATION == 2
-        const uint32_t * q1 = (const uint32_t *)(x[i].qs + q_offset);
-        const uint32_t * q2 = q1 + 16;
-
-        q32[0] = q1[0] & 0x0f0f0f0f;
-        q32[1] = q1[0] & 0xf0f0f0f0;
-        q32[2] = q2[0] & 0x0f0f0f0f;
-        q32[3] = q2[0] & 0xf0f0f0f0;
-
-        float4 s = {0.f, 0.f, 0.f, 0.f};
-        float smin = 0;
-        for (int l = 0; l < 4; ++l) {
-            s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+ 4];
-            s.z += y2[l] * q4[l+8]; s.w += y2[l+32] * q4[l+12];
-            smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
-        }
-        tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin;
-#else
-        const uint16_t * q1 = (const uint16_t *)(x[i].qs + q_offset);
-        const uint16_t * q2 = q1 + 32;
-
-        q16[0] = q1[0] & 0x0f0f;
-        q16[1] = q1[0] & 0xf0f0;
-        q16[2] = q2[0] & 0x0f0f;
-        q16[3] = q2[0] & 0xf0f0;
-
-        float4 s = {0.f, 0.f, 0.f, 0.f};
-        float smin = 0;
-        for (int l = 0; l < 2; ++l) {
-            s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+2];
-            s.z += y2[l] * q4[l+4]; s.w += y2[l+32] * q4[l+6];
-            smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
-        }
-        tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin;
-#endif
-
-    }
-
-    // sum up partial sums and write back result
-    tmp = warp_reduce_sum(tmp);
-
-    if (tid == 0) {
-        dst[row] = tmp;
-    }
-}
-
-static __global__ void dequantize_mul_mat_vec_q5_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols) {
-
-    const int row = blockIdx.x;
-    const int num_blocks_per_row = ncols / QK_K;
-    const int ib0 = row*num_blocks_per_row;
-
-    const block_q5_K * x = (const block_q5_K *)vx + ib0;
-
-    float tmp = 0; // partial sum for thread in warp
-
-    const uint16_t kmask1 = 0x3f3f;
-    const uint16_t kmask2 = 0x0f0f;
-    const uint16_t kmask3 = 0xc0c0;
-
-    const int tid = threadIdx.x/2;  // 0...15
-    const int ix  = threadIdx.x%2;
-
-    const int il  = tid/4;     // 0...3
-    const int ir  = tid - 4*il;// 0...3
-    const int n   = 2;
-
-    const int im = il/2;  // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
-    const int in = il%2;
-
-    const int l0 = n*(2*ir + in);
-    const int q_offset = 32*im + l0;
-    const int y_offset = 64*im + l0;
-
-    const uint8_t hm1  = 1 << (2*im);
-    const uint8_t hm2  = hm1 << 4;
-
-    uint16_t aux[4];
-    const uint8_t * sc = (const uint8_t *)aux;
-
-    uint16_t q16[8];
-    const uint8_t * q4 = (const uint8_t *)q16;
-
-    for (int i = ix; i < num_blocks_per_row; i += 2) {
-
-        const uint8_t * ql1 = x[i].qs + q_offset;
-        const uint8_t * qh  = x[i].qh + l0;
-        const float   * y1  = yy + i*QK_K + y_offset;
-        const float   * y2  = y1 + 128;
-
-        const float dall = __low2half(x[i].dm);
-        const float dmin = __high2half(x[i].dm);
-
-        const uint16_t * a = (const uint16_t *)x[i].scales;
-        aux[0] = a[im+0] & kmask1;
-        aux[1] = a[im+2] & kmask1;
-        aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
-        aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
-
-        float4 sum = {0.f, 0.f, 0.f, 0.f};
-        float smin = 0;
-        const uint16_t * q1 = (const uint16_t *)ql1;
-        const uint16_t * q2 = q1 + 32;
-        q16[0] = q1[0] & 0x0f0f;
-        q16[1] = q1[8] & 0x0f0f;
-        q16[2] = (q1[0] >> 4) & 0x0f0f;
-        q16[3] = (q1[8] >> 4) & 0x0f0f;
-        q16[4] = q2[0] & 0x0f0f;
-        q16[5] = q2[8] & 0x0f0f;
-        q16[6] = (q2[0] >> 4) & 0x0f0f;
-        q16[7] = (q2[8] >> 4) & 0x0f0f;
-        for (int l = 0; l < n; ++l) {
-            sum.x += y1[l+ 0] * (q4[l +0] + (qh[l+ 0] & (hm1 << 0) ? 16 : 0))
-                   + y1[l+16] * (q4[l +2] + (qh[l+16] & (hm1 << 0) ? 16 : 0));
-            sum.y += y1[l+32] * (q4[l +4] + (qh[l+ 0] & (hm1 << 1) ? 16 : 0))
-                   + y1[l+48] * (q4[l +6] + (qh[l+16] & (hm1 << 1) ? 16 : 0));
-            sum.z += y2[l+ 0] * (q4[l +8] + (qh[l+ 0] & (hm2 << 0) ? 16 : 0))
-                   + y2[l+16] * (q4[l+10] + (qh[l+16] & (hm2 << 0) ? 16 : 0));
-            sum.w += y2[l+32] * (q4[l+12] + (qh[l+ 0] & (hm2 << 1) ? 16 : 0))
-                   + y2[l+48] * (q4[l+14] + (qh[l+16] & (hm2 << 1) ? 16 : 0));
-            smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3]
-                  + (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7];
-        }
-        tmp += dall * (sum.x * sc[0] + sum.y * sc[1] + sum.z * sc[4] + sum.w * sc[5]) - dmin * smin;
-    }
-
-    // sum up partial sums and write back result
-    tmp = warp_reduce_sum(tmp);
-
-    if (threadIdx.x == 0) {
-        dst[row] = tmp;
-    }
-}
-
-static __global__ void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) {
-
-    static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION");
-
-    const int row = blockIdx.x*blockDim.y + threadIdx.y;
-    if (row > nrows) return;
-
-    const int num_blocks_per_row = ncols / QK_K;
-    const int ib0 = row*num_blocks_per_row;
-
-    const block_q6_K * x = (const block_q6_K *)vx + ib0;
-
-    const int tid = threadIdx.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...16
-    const int ix  = threadIdx.x%K_QUANTS_PER_ITERATION;  // 0 or 0, 1
-
-    const int step = 16/K_QUANTS_PER_ITERATION;          // 16 or 8
-
-    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
-    const int in = tid - step*im;                        // 0...15 or 0...7
-
-#if K_QUANTS_PER_ITERATION == 1
-    const int l0 = K_QUANTS_PER_ITERATION*in;            // 0...15
-    const int is = 0;
-#else
-    const int l0 = 4 * in;                               // 0, 4, 8, ..., 28
-    const int is = in / 4;
-#endif
-    const int ql_offset = 64*im + l0;
-    const int qh_offset = 32*im + l0;
-    const int s_offset  =  8*im + is;
-    const int y_offset = 128*im + l0;
-
-    float tmp = 0; // partial sum for thread in warp
-
-    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
-
-        const float   * y  = yy + i * QK_K + y_offset;
-        const uint8_t * ql = x[i].ql + ql_offset;
-        const uint8_t * qh = x[i].qh + qh_offset;
-        const int8_t  * s  = x[i].scales + s_offset;
-
-        const float d = x[i].d;
-
-#if K_QUANTS_PER_ITERATION == 1
-        float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32)
-                  + y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32)
-                  + y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32)
-                  + y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32)
-                  + y[64] * s[4] * d * ((int8_t)((ql[ 0]  >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32)
-                  + y[80] * s[5] * d * ((int8_t)((ql[16]  >> 4) | ((qh[16] & 0x30) >> 0)) - 32)
-                  + y[96] * s[6] * d * ((int8_t)((ql[32]  >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32)
-                  +y[112] * s[7] * d * ((int8_t)((ql[48]  >> 4) | ((qh[16] & 0xc0) >> 2)) - 32);
-        tmp += sum;
-#else
-        float sum = 0;
-        for (int l = 0; l < 4; ++l) {
-            sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32)
-                 + y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32)
-                 + y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0]  >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32)
-                 + y[l+96] * s[6] * d * ((int8_t)((ql[l+32]  >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32);
-        }
-        tmp += sum;
-#endif
-
-    }
-
-    // sum up partial sums and write back result
-    tmp = warp_reduce_sum(tmp);
-
-    if (tid == 0) {
-        dst[row] = tmp;
-    }
-}
-
-static __device__ void convert_f16(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
-    const half * x = (const half *) vx;
-
-    // automatic half -> float type cast if dfloat == float
-    v.x = x[ib + iqs + 0];
-    v.y = x[ib + iqs + 1];
-}
-
-static constexpr __device__ dequantize_kernel_t get_dequantize_kernel(ggml_type type) {
-    return type == GGML_TYPE_Q4_0 ? dequantize_q4_0 :
-        type == GGML_TYPE_Q4_1 ? dequantize_q4_1 :
-        type == GGML_TYPE_Q5_0 ? dequantize_q5_0 :
-        type == GGML_TYPE_Q5_1 ? dequantize_q5_1 :
-        type == GGML_TYPE_Q8_0 ? dequantize_q8_0 :
-        type == GGML_TYPE_F16 ? convert_f16 :
-        nullptr;
-}
-
-template <ggml_type type>
-static __global__ void dequantize_mul_mat_vec(const void * __restrict__ vx, const dfloat * __restrict__ y, float * __restrict__ dst, const int ncols, const int nrows) {
-    constexpr int qk = ggml_cuda_type_traits<type>::qk; // quantized weights per x block
-    constexpr int qr = ggml_cuda_type_traits<type>::qr; // number of quantized weights per data value in x block
-    constexpr dequantize_kernel_t dequantize_kernel = get_dequantize_kernel(type);
-
-    const int64_t row = (int64_t)blockIdx.x*blockDim.y + threadIdx.y;
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int tid = threadIdx.x;
-
-    const int iter_stride = 2*GGML_CUDA_DMMV_X;
-    const int vals_per_iter = iter_stride / WARP_SIZE; // num quantized vals per thread and i iter
-    const int y_offset = qr == 1 ? 1 : qk/2;
-
-// partial sum for each thread
-#ifdef GGML_CUDA_F16
-    half2 tmp = {0.0f, 0.0f}; // two sums for f16 to take advantage of half2 intrinsics
-#else
-    float tmp = 0.0f;
-#endif // GGML_CUDA_F16
-
-    for (int i = 0; i < ncols; i += iter_stride) {
-        const int col = i + vals_per_iter*tid;
-        const int64_t ib = ((int64_t)row*ncols + col)/qk; // x block index
-        const int iqs = (col%qk)/qr; // x quant index
-        const int iybs = col - col%qk; // y block start index
-
-// processing >2 values per i iter is faster for fast GPUs
-#pragma unroll
-        for (int j = 0; j < vals_per_iter; j += 2) {
-            // process 2 vals per j iter
-
-            // dequantize
-            // for qr = 2 the iqs needs to increase by 1 per j iter because 2 weights per data val
-            dfloat2 v;
-            dequantize_kernel(vx, ib, iqs + j/qr, v);
-
-            // matrix multiplication
-            // for qr = 2 the y index needs to increase by 1 per j iter because of y_offset = qk/2
-#ifdef GGML_CUDA_F16
-            tmp += __hmul2(v, {
-                y[iybs + iqs + j/qr + 0],
-                y[iybs + iqs + j/qr + y_offset]
-            });
-#else
-            tmp += v.x * y[iybs + iqs + j/qr + 0];
-            tmp += v.y * y[iybs + iqs + j/qr + y_offset];
-#endif // GGML_CUDA_F16
-        }
-    }
-
-    // sum up partial sums and write back result
-    tmp = warp_reduce_sum(tmp);
-
-    if (tid == 0) {
-#ifdef GGML_CUDA_F16
-        dst[row] = tmp.x + tmp.y;
-#else
-        dst[row] = tmp;
-#endif // GGML_CUDA_F16
-    }
-}
-
-static void dequantize_mul_mat_vec_q4_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
-    // the number of rows may exceed maximum grid size in the y or z dimensions, use the x dimension instead
-    const dim3 block_nums(block_num_y, 1, 1);
-    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
-    dequantize_mul_mat_vec<GGML_TYPE_Q4_0>
-        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
-}
-
-static void dequantize_mul_mat_vec_q4_1_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
-    const dim3 block_nums(block_num_y, 1, 1);
-    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
-    dequantize_mul_mat_vec<GGML_TYPE_Q4_1>
-        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
-}
-
-static void dequantize_mul_mat_vec_q5_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
-    const dim3 block_nums(block_num_y, 1, 1);
-    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
-    dequantize_mul_mat_vec<GGML_TYPE_Q5_0>
-        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
-}
-
-static void dequantize_mul_mat_vec_q5_1_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
-    const dim3 block_nums(block_num_y, 1, 1);
-    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
-    dequantize_mul_mat_vec<GGML_TYPE_Q5_1>
-        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
-}
-
-static void dequantize_mul_mat_vec_q8_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
-    const dim3 block_nums(block_num_y, 1, 1);
-    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
-    dequantize_mul_mat_vec<GGML_TYPE_Q8_0>
-        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
-}
-
-static void dequantize_mul_mat_vec_q2_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int ny = 2; // very slightly faster than 1 even when K_QUANTS_PER_ITERATION = 2
-    const int block_num_y = (nrows + ny - 1) / ny;
-    const dim3 block_nums(block_num_y, 1, 1);
-    const dim3 block_dims(32, ny, 1);
-    dequantize_mul_mat_vec_q2_k<<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
-}
-
-static void dequantize_mul_mat_vec_q3_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int ny = 2 / K_QUANTS_PER_ITERATION;
-    const int block_num_y = (nrows + ny - 1) / ny;
-    const dim3 block_nums(block_num_y, 1, 1);
-    const dim3 block_dims(32, ny, 1);
-    dequantize_mul_mat_vec_q3_k<<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
-}
-
-static void dequantize_mul_mat_vec_q4_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int ny = 2 / K_QUANTS_PER_ITERATION;
-    const int block_num_y = (nrows + ny - 1) / ny;
-    const dim3 block_nums(block_num_y, 1, 1);
-    const dim3 block_dims(32, ny, 1);
-    dequantize_mul_mat_vec_q4_k<<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
-}
-
-static void dequantize_mul_mat_vec_q5_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const dim3 block_dims(32, 1, 1);
-    dequantize_mul_mat_vec_q5_k<<<nrows, block_dims, 0, stream>>>(vx, y, dst, ncols);
-}
-
-static void dequantize_mul_mat_vec_q6_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int ny = 2 / K_QUANTS_PER_ITERATION;
-    const int block_num_y = (nrows + ny - 1) / ny;
-    const dim3 block_nums(block_num_y, 1, 1);
-    const dim3 block_dims(32, ny, 1);
-    dequantize_mul_mat_vec_q6_k<<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
-}
-
-static void convert_mul_mat_vec_f16_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
-    const dim3 block_nums(block_num_y, 1, 1);
-    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
-    dequantize_mul_mat_vec<GGML_TYPE_F16>
-        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
-}
-
-void ggml_cuda_op_dequantize_mul_mat_vec(
-    ggml_backend_cuda_context & ctx,
-    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
-    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
-    const int64_t src1_padded_row_size, cudaStream_t stream) {
-    GGML_UNUSED(ctx);
-    const int64_t ne00 = src0->ne[0];
-    const int64_t row_diff = row_high - row_low;
-
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    // on some GPUs it is faster to convert src1 to half and to use half precision intrinsics
-#ifdef GGML_CUDA_F16
-    ggml_cuda_pool_alloc<half> src1_dfloat_a(ctx.pool());
-    half * src1_dfloat = nullptr; // dfloat == half
-
-    bool src1_convert_f16 =
-        src0->type == GGML_TYPE_Q4_0 || src0->type == GGML_TYPE_Q4_1 ||
-        src0->type == GGML_TYPE_Q5_0 || src0->type == GGML_TYPE_Q5_1 ||
-        src0->type == GGML_TYPE_Q8_0 || src0->type == GGML_TYPE_F16;
-
-    if (src1_convert_f16) {
-        src1_dfloat = src1_dfloat_a.alloc(ne00);
-        const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type);
-        GGML_ASSERT(to_fp16_cuda != nullptr);
-        to_fp16_cuda(src1_ddf_i, src1_dfloat, ne00, stream);
-    }
-#else
-    const dfloat * src1_dfloat = (const dfloat *) src1_ddf_i; // dfloat == float, no conversion
-#endif // GGML_CUDA_F16
-
-    switch (src0->type) {
-        case GGML_TYPE_Q4_0:
-            dequantize_mul_mat_vec_q4_0_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q4_1:
-            dequantize_mul_mat_vec_q4_1_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q5_0:
-            dequantize_mul_mat_vec_q5_0_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q5_1:
-            dequantize_mul_mat_vec_q5_1_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q8_0:
-            dequantize_mul_mat_vec_q8_0_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q2_K:
-            dequantize_mul_mat_vec_q2_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q3_K:
-            dequantize_mul_mat_vec_q3_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q4_K:
-            dequantize_mul_mat_vec_q4_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q5_K:
-            dequantize_mul_mat_vec_q5_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q6_K:
-            dequantize_mul_mat_vec_q6_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_F16:
-            convert_mul_mat_vec_f16_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        default:
-            GGML_ASSERT(false);
-            break;
-    }
-
-    GGML_UNUSED(src1);
-    GGML_UNUSED(dst);
-    GGML_UNUSED(src1_ddq_i);
-    GGML_UNUSED(src1_ncols);
-    GGML_UNUSED(src1_padded_row_size);
-}
diff --git a/ggml-cuda/dmmv.cuh b/ggml-cuda/dmmv.cuh
deleted file mode 100644 (file)
index 4c5ebd4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "common.cuh"
-
-// dmmv = dequantize_mul_mat_vec
-
-// TODO: remove this?
-#ifndef GGML_CUDA_DMMV_X
-#define GGML_CUDA_DMMV_X 32
-#endif
-
-#ifndef GGML_CUDA_MMV_Y
-#define GGML_CUDA_MMV_Y 1
-#endif
-
-void ggml_cuda_op_dequantize_mul_mat_vec(
-    ggml_backend_cuda_context & ctx,
-    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
-    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
-    const int64_t src1_padded_row_size, cudaStream_t stream);
diff --git a/ggml-cuda/fattn-common.cuh b/ggml-cuda/fattn-common.cuh
deleted file mode 100644 (file)
index 37b3b99..0000000
+++ /dev/null
@@ -1,741 +0,0 @@
-#pragma once
-
-#include "common.cuh"
-#include "convert.cuh"
-#include "vecdotq.cuh"
-
-#include <cstdint>
-
-#define FATTN_KQ_STRIDE       256
-#define HALF_MAX_HALF         __float2half(65504.0f/2) // Use neg. of this instead of -INFINITY to initialize KQ max vals to avoid NaN upon subtraction.
-#define SOFTMAX_FTZ_THRESHOLD -20.0f                   // Softmax exp. of values smaller than this are flushed to zero to avoid NaNs.
-
-typedef void (* fattn_kernel_t)(
-        const char * __restrict__ Q,
-        const char * __restrict__ K,
-        const char * __restrict__ V,
-        const char * __restrict__ mask,
-        float      * __restrict__ dst,
-        float2     * __restrict__ dst_meta,
-        const float scale,
-        const float max_bias,
-        const float m0,
-        const float m1,
-        const uint32_t n_head_log2,
-        const int ne00,
-        const int ne01,
-        const int ne02,
-        const int ne03,
-        const int ne10,
-        const int ne11,
-        const int ne12,
-        const int ne13,
-        const int ne31,
-        const int nb31,
-        const int nb01,
-        const int nb02,
-        const int nb03,
-        const int nb11,
-        const int nb12,
-        const int nb13,
-        const int nb21,
-        const int nb22,
-        const int nb23,
-        const int ne0,
-        const int ne1,
-        const int ne2,
-        const int ne3);
-
-typedef half (*vec_dot_KQ_f16_t)(
-    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8 , const void * __restrict__ Q_ds);
-typedef float (*vec_dot_KQ_f32_t)(
-    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8 , const void * __restrict__ Q_ds);
-
-template<typename T, int D>
-static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_q4_0(
-    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8, const void * __restrict__ Q_ds_v) {
-#if __CUDA_ARCH__ >= MIN_CC_DP4A
-
-    const block_q4_0 * K_q4_0 = (const block_q4_0 *) K_c;
-    GGML_UNUSED(Q_v);
-
-    half sum = 0.0f;
-
-#pragma unroll
-    for (int k_KQ_0 = 0; k_KQ_0 < D/sizeof(int); k_KQ_0 += WARP_SIZE) {
-        const int k_KQ = k_KQ_0 + threadIdx.x;
-
-        const int ib    = k_KQ /  QI8_1;
-        const int iqs4  = k_KQ %  QI4_0;
-        const int shift = k_KQ & (QI8_1/2);
-
-        const int v = (get_int_from_uint8(K_q4_0[ib].qs, iqs4) >> shift) & 0x0F0F0F0F;
-        const int u = Q_q8[k_KQ_0/WARP_SIZE];
-
-        const int sumi = __dp4a(v, u, 0);
-
-#ifdef FP16_AVAILABLE
-        if (std::is_same<T, half>::value) {
-            const half2  * Q_ds = (const half2  *) Q_ds_v;
-
-            const half2 sum2 = __half2half2(K_q4_0[ib].d) * Q_ds[k_KQ_0/WARP_SIZE];
-            sum += (T) (((half) sumi)*__low2half(sum2) - __high2half(sum2) /* *8/QI8_1 == 1 */);
-        } else
-#endif // FP16_AVAILABLE
-        {
-            const float2 * Q_ds = (const float2 *) Q_ds_v;
-
-            sum += (T) (__half2float(K_q4_0[ib].d) * (sumi*Q_ds[k_KQ_0/WARP_SIZE].x - (8/QI8_1)*Q_ds[k_KQ_0/WARP_SIZE].y));
-        }
-    }
-
-    return sum;
-#else
-    GGML_UNUSED(K_c);
-    GGML_UNUSED(Q_v);
-    GGML_UNUSED(Q_q8);
-    GGML_UNUSED(Q_ds_v);
-    NO_DEVICE_CODE;
-#endif  // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-template<typename T, int D>
-static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_q4_1(
-    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8, const void * __restrict__ Q_ds_v) {
-#if __CUDA_ARCH__ >= MIN_CC_DP4A
-
-    const block_q4_1 * K_q4_1 = (const block_q4_1 *) K_c;
-    GGML_UNUSED(Q_v);
-
-    T sum = 0.0f;
-
-#pragma unroll
-    for (int k_KQ_0 = 0; k_KQ_0 < D/sizeof(int); k_KQ_0 += WARP_SIZE) {
-        const int k_KQ = k_KQ_0 + threadIdx.x;
-
-        const int ib    = k_KQ /  QI8_1;
-        const int iqs4  = k_KQ %  QI4_1;
-        const int shift = k_KQ & (QI8_1/2);
-
-        const int v = (get_int_from_uint8_aligned(K_q4_1[ib].qs, iqs4) >> shift) & 0x0F0F0F0F;
-        const int u = Q_q8[k_KQ_0/WARP_SIZE];
-
-        const int sumi = __dp4a(v, u, 0);
-
-#ifdef FP16_AVAILABLE
-        if (std::is_same<T, half>::value) {
-            const half2  * Q_ds = (const half2  *) Q_ds_v;
-
-            const half2 d4d8_m4s8 = K_q4_1[ib].dm * Q_ds[k_KQ_0/WARP_SIZE];
-            const half2 sumid4d8_m4s8scaled = d4d8_m4s8 * make_half2(sumi, 1.0f/QI8_1);
-            sum += (T) (__low2half(sumid4d8_m4s8scaled) + __high2half(sumid4d8_m4s8scaled));
-        } else
-#endif // FP16_AVAILABLE
-        {
-            const float2 * Q_ds = (const float2 *) Q_ds_v;
-
-            const float sumid4d8   =  __low2float(K_q4_1[ib].dm)*Q_ds[k_KQ_0/WARP_SIZE].x * sumi;
-            const float m4s8scaled = __high2float(K_q4_1[ib].dm)*Q_ds[k_KQ_0/WARP_SIZE].y / QI8_1;
-
-            sum += (T) (sumid4d8 + m4s8scaled);
-        }
-    }
-
-    return sum;
-#else
-    GGML_UNUSED(K_c);
-    GGML_UNUSED(Q_v);
-    GGML_UNUSED(Q_q8);
-    GGML_UNUSED(Q_ds_v);
-    NO_DEVICE_CODE;
-#endif  // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-template<typename T, int D>
-static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_q5_0(
-    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8, const void * __restrict__ Q_ds_v) {
-#if __CUDA_ARCH__ >= MIN_CC_DP4A
-
-    const block_q5_0 * K_q5_0 = (const block_q5_0 *) K_c;
-    GGML_UNUSED(Q_v);
-
-    T sum = 0.0f;
-
-#pragma unroll
-    for (int k_KQ_0 = 0; k_KQ_0 < D/sizeof(int); k_KQ_0 += WARP_SIZE) {
-        const int k_KQ = k_KQ_0 + threadIdx.x;
-
-        const int ib    = k_KQ /  QI8_1;
-        const int iqs4  = k_KQ %  QI5_0;
-        const int iqs8  = k_KQ %  QI8_1;
-        const int shift = k_KQ & (QI8_1/2);
-
-        int v = (get_int_from_uint8(K_q5_0[ib].qs, iqs4) >> shift) & 0x0F0F0F0F;
-        const int vh = get_int_from_uint8(K_q5_0[ib].qh, 0) >> (iqs8 * QI5_0);
-        v |= (vh <<  4) & 0x00000010; // 0 ->  4
-        v |= (vh << 11) & 0x00001000; // 1 -> 12
-        v |= (vh << 18) & 0x00100000; // 2 -> 20
-        v |= (vh << 25) & 0x10000000; // 3 -> 28
-
-        const int u = Q_q8[k_KQ_0/WARP_SIZE];
-
-        const int sumi = __dp4a(v, u, 0);
-
-#ifdef FP16_AVAILABLE
-        if (std::is_same<T, half>::value) {
-            const half2  * Q_ds = (const half2  *) Q_ds_v;
-
-            const half2 sum2 = __half2half2(K_q5_0[ib].d) * Q_ds[k_KQ_0/WARP_SIZE];
-            sum += (T) (((half) sumi)*__low2half(sum2) - __high2half(sum2)*__float2half(2.0f)) /* *16/QI8_1 == 2 */;
-        } else
-#endif // FP16_AVAILABLE
-        {
-            const float2 * Q_ds = (const float2 *) Q_ds_v;
-
-            sum += (T) (__half2float(K_q5_0[ib].d) * (sumi*Q_ds[k_KQ_0/WARP_SIZE].x - (16/QI8_1)*Q_ds[k_KQ_0/WARP_SIZE].y));
-        }
-    }
-
-    return sum;
-#else
-    GGML_UNUSED(K_c);
-    GGML_UNUSED(Q_v);
-    GGML_UNUSED(Q_q8);
-    GGML_UNUSED(Q_ds_v);
-    NO_DEVICE_CODE;
-#endif  // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-template<typename T, int D>
-static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_q5_1(
-    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8, const void * __restrict__ Q_ds_v) {
-#if __CUDA_ARCH__ >= MIN_CC_DP4A
-
-    const block_q5_1 * K_q5_1 = (const block_q5_1 *) K_c;
-    GGML_UNUSED(Q_v);
-
-    T sum = 0.0f;
-
-#pragma unroll
-    for (int k_KQ_0 = 0; k_KQ_0 < D/sizeof(int); k_KQ_0 += WARP_SIZE) {
-        const int k_KQ = k_KQ_0 + threadIdx.x;
-
-        const int ib    = k_KQ /  QI8_1;
-        const int iqs4  = k_KQ %  QI5_1;
-        const int iqs8  = k_KQ %  QI8_1;
-        const int shift = k_KQ & (QI8_1/2);
-
-        int v = (get_int_from_uint8(K_q5_1[ib].qs, iqs4) >> shift) & 0x0F0F0F0F;
-        const int vh = get_int_from_uint8(K_q5_1[ib].qh, 0) >> (iqs8 * QI5_1);
-        v |= (vh <<  4) & 0x00000010; // 0 ->  4
-        v |= (vh << 11) & 0x00001000; // 1 -> 12
-        v |= (vh << 18) & 0x00100000; // 2 -> 20
-        v |= (vh << 25) & 0x10000000; // 3 -> 28
-
-        const int u = Q_q8[k_KQ_0/WARP_SIZE];
-
-        const int sumi = __dp4a(v, u, 0);
-
-#ifdef FP16_AVAILABLE
-        if (std::is_same<T, half>::value) {
-            const half2  * Q_ds = (const half2  *) Q_ds_v;
-
-            const half2 d5d8_m5s8 = K_q5_1[ib].dm * Q_ds[k_KQ_0/WARP_SIZE];
-            const half2 sumid5d8_m5s8scaled = d5d8_m5s8 * make_half2(sumi, 1.0f/QI8_1);
-            sum += (T) (__low2half(sumid5d8_m5s8scaled) + __high2half(sumid5d8_m5s8scaled));
-        } else
-#endif // FP16_AVAILABLE
-        {
-            const float2 * Q_ds = (const float2 *) Q_ds_v;
-
-            const float sumid5d8   =  __low2float(K_q5_1[ib].dm)*Q_ds[k_KQ_0/WARP_SIZE].x * sumi;
-            const float m5s8scaled = __high2float(K_q5_1[ib].dm)*Q_ds[k_KQ_0/WARP_SIZE].y / QI8_1;
-
-            sum += (T) (sumid5d8 + m5s8scaled);
-        }
-    }
-
-    return sum;
-#else
-    GGML_UNUSED(K_c);
-    GGML_UNUSED(Q_v);
-    GGML_UNUSED(Q_q8);
-    GGML_UNUSED(Q_ds_v);
-    NO_DEVICE_CODE;
-#endif  // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-template <typename T, int D>
-static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_q8_0(
-    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8, const void * __restrict__ Q_ds_v) {
-#if __CUDA_ARCH__ >= MIN_CC_DP4A
-
-    const block_q8_0 * K_q8_0 = (const block_q8_0 *) K_c;
-    GGML_UNUSED(Q_v);
-
-    T sum = 0.0f;
-
-#pragma unroll
-    for (int k_KQ_0 = 0; k_KQ_0 < D/sizeof(int); k_KQ_0 += WARP_SIZE) {
-        const int k_KQ = k_KQ_0 + threadIdx.x;
-
-        const int ib  = k_KQ / QI8_0;
-        const int iqs = k_KQ % QI8_0;
-
-        const int v = get_int_from_int8(K_q8_0[ib].qs, iqs);
-
-        T Q_d;
-        if (std::is_same<T, half>::value) {
-            const half2  * Q_ds = (const half2  *) Q_ds_v;
-            Q_d = __low2half(Q_ds[k_KQ_0/WARP_SIZE]);
-        } else {
-            const float2 * Q_ds = (const float2 *) Q_ds_v;
-            Q_d = Q_ds[k_KQ_0/WARP_SIZE].x;
-        }
-
-        sum += vec_dot_q8_0_q8_1_impl<T, 1>(&v, &Q_q8[k_KQ_0/WARP_SIZE], K_q8_0[ib].d, Q_d);
-    }
-
-    return sum;
-#else
-    GGML_UNUSED(K_c);
-    GGML_UNUSED(Q_v);
-    GGML_UNUSED(Q_q8);
-    GGML_UNUSED(Q_ds_v);
-    NO_DEVICE_CODE;
-#endif  // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-template <typename T, int D>
-static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_f16(
-    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8 , const void * __restrict__ Q_ds_v) {
-
-    const half2 * K_h2 = (const half2 *) K_c;
-    GGML_UNUSED(Q_q8);
-    GGML_UNUSED(Q_ds_v);
-
-#ifdef FP16_AVAILABLE
-    if (std::is_same<T, half>::value) {
-        const half2 * Q_h2 = (const half2 *) Q_v;
-
-        half2 sum2 = make_half2(0.0f, 0.0f);
-
-#pragma unroll
-        for (int k_KQ_0 = 0; k_KQ_0 < D/2; k_KQ_0 += WARP_SIZE) {
-            const int k_KQ = k_KQ_0 + threadIdx.x;
-
-            const half2 K_ik = K_h2[k_KQ];
-            sum2 += K_ik * Q_h2[k_KQ_0/WARP_SIZE];
-        }
-
-        return __low2half(sum2) + __high2half(sum2);
-    }
-#endif // FP16_AVAILABLE
-
-    const float2 * Q_f2 = (const float2 *) Q_v;
-
-    float sum = 0.0f;
-
-#pragma unroll
-    for (int k_KQ_0 = 0; k_KQ_0 < D/2; k_KQ_0 += WARP_SIZE) {
-        const int k_KQ = k_KQ_0 + threadIdx.x;
-
-        const half2 K_ik = K_h2[k_KQ];
-        sum +=  __low2float(K_ik) * Q_f2[k_KQ_0/WARP_SIZE].x;
-        sum += __high2float(K_ik) * Q_f2[k_KQ_0/WARP_SIZE].y;
-    }
-
-    return sum;
-}
-
-template <typename Tds>
-static __device__ __forceinline__ void quantize_q8_1_to_shared(
-    const float * __restrict__ x, const float scale, int * __restrict__ yq32, void * __restrict__ yds) {
-
-    float vals[sizeof(int)] = {0.0f};
-#pragma unroll
-    for (int l = 0; l < sizeof(int); ++l) {
-        vals[l] = scale * x[4*threadIdx.x + l];
-    }
-
-    float amax = fabsf(vals[0]);
-    float sum  = vals[0];
-#pragma unroll
-    for (int l = 1; l < sizeof(int); ++l) {
-        amax = fmaxf(amax, fabsf(vals[l]));
-        sum += vals[l];
-    }
-#pragma unroll
-    for (int mask = QI8_1/2; mask > 0; mask >>= 1) {
-        amax = fmaxf(amax, __shfl_xor_sync(0xFFFFFFFF, amax, mask, 32));
-        sum +=             __shfl_xor_sync(0xFFFFFFFF, sum,  mask, 32);
-    }
-
-    const float d = amax / 127;
-    int q32 = 0;
-    int8_t * q8 = (int8_t *) &q32;
-
-    if (d != 0.0f) {
-#pragma unroll
-        for (int l = 0; l < sizeof(int); ++l) {
-            q8[l] = roundf(vals[l] / d);
-        }
-    }
-
-    yq32[threadIdx.x] = q32;
-    if (threadIdx.x % QI8_1 == 0) {
-        if (std::is_same<Tds, half2>::value) {
-            ((half2  *) yds)[threadIdx.x/QI8_1] =  make_half2(d, sum);
-        } else {
-            ((float2 *) yds)[threadIdx.x/QI8_1] = make_float2(d, sum);
-        }
-    }
-}
-
-typedef half  (*dequantize_1_f16_t)(const void *, const int64_t);
-typedef float (*dequantize_1_f32_t)(const void *, const int64_t);
-
-template <typename T>
-static __device__ __forceinline__ T dequantize_1_q4_0(const void * __restrict__ vx, const int64_t i) {
-    const block_q4_0 * x = (const block_q4_0 *) vx;
-
-    const int64_t ib    =  i          /  QK4_0;
-    const int     iqs   =  i          % (QK4_0/2);
-    const int     shift = (i % QK4_0) / (QK4_0/2);
-
-    const T   d  = x[ib].d;
-    const int q0 = x[ib].qs[iqs];
-    const int q  = ((q0 >> (4*shift)) & 0x0F) - 8;
-
-#ifdef FP16_AVAILABLE
-    if (std::is_same<T, half>::value) {
-        return ((half) d)*((half) q);
-    }
-#endif // FP16_AVAILABLE
-
-    return ((float) d)*((float) q);
-}
-
-template <typename T>
-static __device__ __forceinline__ T dequantize_1_q4_1(const void * __restrict__ vx, const int64_t i) {
-    const block_q4_1 * x = (const block_q4_1 *) vx;
-
-    const int64_t ib    =  i          /  QK4_1;
-    const int     iqs   =  i          % (QK4_1/2);
-    const int     shift = (i % QK4_1) / (QK4_1/2);
-
-    const half2 dm = x[ib].dm;
-    const int   q0 = x[ib].qs[iqs];
-    const int   q  = ((q0 >> (4*shift)) & 0x0F);
-
-#ifdef FP16_AVAILABLE
-    if (std::is_same<T, half>::value) {
-        return __low2half(dm)*((half) q) + __high2half(dm);
-    }
-#endif // FP16_AVAILABLE
-
-    return __low2float(dm)*((float) q) + __high2float(dm);
-}
-
-template <typename T>
-static __device__ __forceinline__ T dequantize_1_q5_0(const void * __restrict__ vx, const int64_t i) {
-    const block_q5_0 * x = (const block_q5_0 *) vx;
-
-    const int64_t ib    =  i          /  QK5_0;
-    const int     idq   =  i          %  QK5_0;
-    const int     iqs   =  i          % (QK5_0/2);
-    const int     shift = (i % QK5_0) / (QK5_0/2);
-
-    const T   d   = x[ib].d;
-    const int ql0 = x[ib].qs[iqs];
-    const int qh0 = get_int_from_uint8(x[ib].qh, 0);
-    const int ql  = ((ql0 >> (4*shift)) & 0x0F);
-    const int qh  = ((qh0 >> idq) << 4) & 0x10;
-    const int q   = (ql | qh) - 16;
-
-#ifdef FP16_AVAILABLE
-    if (std::is_same<T, half>::value) {
-        return ((half) d)*((half) q);
-    }
-#endif // FP16_AVAILABLE
-
-    return ((float) d)*((float) q);
-}
-
-template <typename T>
-static __device__ __forceinline__ T dequantize_1_q5_1(const void * __restrict__ vx, const int64_t i) {
-    const block_q5_1 * x = (const block_q5_1 *) vx;
-
-    const int64_t ib    =  i          /  QK5_1;
-    const int     idq   =  i          %  QK5_1;
-    const int     iqs   =  i          % (QK5_1/2);
-    const int     shift = (i % QK5_1) / (QK5_1/2);
-
-    const half2 dm  = x[ib].dm;
-    const int   ql0 = x[ib].qs[iqs];
-    const int   qh0 = get_int_from_uint8_aligned(x[ib].qh, 0);
-    const int   ql  = ((ql0 >> (4*shift)) & 0x0F);
-    const int   qh  = ((qh0 >> idq) << 4) & 0x10;
-    const int   q   = (ql | qh);
-
-#ifdef FP16_AVAILABLE
-    if (std::is_same<T, half>::value) {
-        return __low2half(dm)*((half) q) + __high2half(dm);
-    }
-#endif // FP16_AVAILABLE
-
-    return __low2float(dm)*((float) q) + __high2float(dm);
-}
-
-template <typename T>
-static __device__ __forceinline__ T dequantize_1_q8_0(const void * __restrict__ vx, const int64_t i) {
-    const block_q8_0 * x = (const block_q8_0 *) vx;
-
-    const int64_t ib  = i / QK8_0;
-    const int     iqs = i % QK8_0;
-
-    const T   d = x[ib].d;
-    const int q = x[ib].qs[iqs];
-
-#ifdef FP16_AVAILABLE
-    if (std::is_same<T, half>::value) {
-        return ((half) d)*((half) q);
-    }
-#endif // FP16_AVAILABLE
-
-    return ((float) d)*((float) q);
-}
-
-template <typename T>
-static __device__ __forceinline__ T dequantize_1_f16(const void * __restrict__ vx, const int64_t i) {
-    const half * x = (const half *) vx;
-
-    return x[i];
-}
-
-template <int D>
-constexpr __device__ vec_dot_KQ_f16_t get_vec_dot_KQ_f16(ggml_type type_K) {
-    return type_K == GGML_TYPE_Q4_0 ? vec_dot_fattn_vec_KQ_q4_0<half, D> :
-        type_K == GGML_TYPE_Q4_1 ? vec_dot_fattn_vec_KQ_q4_1<half, D> :
-        type_K == GGML_TYPE_Q5_0 ? vec_dot_fattn_vec_KQ_q5_0<half, D> :
-        type_K == GGML_TYPE_Q5_1 ? vec_dot_fattn_vec_KQ_q5_1<half, D> :
-        type_K == GGML_TYPE_Q8_0 ? vec_dot_fattn_vec_KQ_q8_0<half, D> :
-        type_K == GGML_TYPE_F16 ? vec_dot_fattn_vec_KQ_f16<half, D> :
-        nullptr;
-}
-
-template <int D>
-constexpr __device__ vec_dot_KQ_f32_t get_vec_dot_KQ_f32(ggml_type type_K) {
-    return type_K == GGML_TYPE_Q4_0 ? vec_dot_fattn_vec_KQ_q4_0<float, D> :
-        type_K == GGML_TYPE_Q4_1 ? vec_dot_fattn_vec_KQ_q4_1<float, D> :
-        type_K == GGML_TYPE_Q5_0 ? vec_dot_fattn_vec_KQ_q5_0<float, D> :
-        type_K == GGML_TYPE_Q5_1 ? vec_dot_fattn_vec_KQ_q5_1<float, D> :
-        type_K == GGML_TYPE_Q8_0 ? vec_dot_fattn_vec_KQ_q8_0<float, D> :
-        type_K == GGML_TYPE_F16 ? vec_dot_fattn_vec_KQ_f16<float, D> :
-        nullptr;
-}
-
-constexpr __device__ dequantize_1_f16_t get_dequantize_1_f16(ggml_type type_V) {
-    return type_V == GGML_TYPE_Q4_0 ? dequantize_1_q4_0<half> :
-        type_V == GGML_TYPE_Q4_1 ? dequantize_1_q4_1<half> :
-        type_V == GGML_TYPE_Q5_0 ? dequantize_1_q5_0<half> :
-        type_V == GGML_TYPE_Q5_1 ? dequantize_1_q5_1<half> :
-        type_V == GGML_TYPE_Q8_0 ? dequantize_1_q8_0<half> :
-        type_V == GGML_TYPE_F16 ? dequantize_1_f16<half> :
-        nullptr;
-}
-
-constexpr __device__ dequantize_1_f32_t get_dequantize_1_f32(ggml_type type_V) {
-    return type_V == GGML_TYPE_Q4_0 ? dequantize_1_q4_0<float> :
-        type_V == GGML_TYPE_Q4_1 ? dequantize_1_q4_1<float> :
-        type_V == GGML_TYPE_Q5_0 ? dequantize_1_q5_0<float> :
-        type_V == GGML_TYPE_Q5_1 ? dequantize_1_q5_1<float> :
-        type_V == GGML_TYPE_Q8_0 ? dequantize_1_q8_0<float> :
-        type_V == GGML_TYPE_F16 ? dequantize_1_f16<float> :
-        nullptr;
-}
-
-template<int D, int parallel_blocks> // D == head size
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-__launch_bounds__(D, 1)
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-static __global__ void flash_attn_combine_results(
-        const float  * __restrict__ VKQ_parts,
-        const float2 * __restrict__ VKQ_meta,
-        float * __restrict__ dst) {
-    VKQ_parts += parallel_blocks*D * gridDim.y*blockIdx.x;
-    VKQ_meta  += parallel_blocks   * gridDim.y*blockIdx.x;
-    dst       +=                 D * gridDim.y*blockIdx.x;
-
-    const int tid = threadIdx.x;
-    __builtin_assume(tid < D);
-
-    __shared__ float2 meta[parallel_blocks];
-    if (tid < 2*parallel_blocks) {
-        ((float *) meta)[threadIdx.x] = ((const float *)VKQ_meta) [blockIdx.y*(2*parallel_blocks) + tid];
-    }
-
-    __syncthreads();
-
-    float kqmax = meta[0].x;
-#pragma unroll
-    for (int l = 1; l < parallel_blocks; ++l) {
-        kqmax = max(kqmax, meta[l].x);
-    }
-
-    float VKQ_numerator   = 0.0f;
-    float VKQ_denominator = 0.0f;
-#pragma unroll
-    for (int l = 0; l < parallel_blocks; ++l) {
-        const float diff = meta[l].x - kqmax;
-        const float KQ_max_scale = expf(diff);
-        const uint32_t ftz_mask = 0xFFFFFFFF * (diff > SOFTMAX_FTZ_THRESHOLD);
-        *((uint32_t *) &KQ_max_scale) &= ftz_mask;
-
-        VKQ_numerator   += KQ_max_scale * VKQ_parts[l*gridDim.y*D + blockIdx.y*D + tid];
-        VKQ_denominator += KQ_max_scale * meta[l].y;
-    }
-
-    dst[blockIdx.y*D + tid] = VKQ_numerator / VKQ_denominator;
-}
-
-static void on_no_fattn_vec_case(const int D) {
-    if (D == 64) {
-        fprintf(stderr, "Unsupported KV type combination for head_size 64.\n");
-        fprintf(stderr, "By default only f16 KV cache is supported.\n");
-        fprintf(stderr, "Compile with LLAMA_CUDA_FA_ALL_QUANTS for V cache quantization support.\n");
-        GGML_ASSERT(false);
-    } else if (D == 128) {
-        fprintf(stderr, "Unsupported KV type combination for head_size 128.\n");
-        fprintf(stderr, "Supported combinations:\n");
-        fprintf(stderr, "  - K == q4_0, V == q4_0,  4.50 BPV\n");
-        fprintf(stderr, "  - K == q8_0, V == q8_0,  8.50 BPV\n");
-        fprintf(stderr, "  - K == f16,  V == f16,  16.00 BPV\n");
-        fprintf(stderr, "Compile with LLAMA_CUDA_FA_ALL_QUANTS for all combinations of q4_0, q4_1, q5_0, q5_1, q8_0, and f16.\n");
-        GGML_ASSERT(false);
-    } else {
-        fprintf(stderr, "Unsupported KV type combination for head_size 256.\n");
-        fprintf(stderr, "Only f16 is supported.\n");
-        GGML_ASSERT(false);
-    }
-}
-
-template <int D, int parallel_blocks>
-void launch_fattn(
-    ggml_backend_cuda_context & ctx, ggml_tensor * dst, fattn_kernel_t fattn_kernel,
-    const int nwarps, const int cols_per_block, const bool need_f16_K, const bool need_f16_V
-) {
-    const ggml_tensor * Q = dst->src[0];
-    const ggml_tensor * K = dst->src[1];
-    const ggml_tensor * V = dst->src[2];
-
-    const ggml_tensor * mask = dst->src[3];
-
-    ggml_tensor * KQV = dst;
-
-    GGML_ASSERT(Q->type == GGML_TYPE_F32);
-    GGML_ASSERT(KQV->type == GGML_TYPE_F32);
-
-    GGML_ASSERT(!mask || mask->type == GGML_TYPE_F16);
-    GGML_ASSERT(!mask || mask->ne[1] >= GGML_PAD(Q->ne[1], 16) &&
-                                "the Flash-Attention CUDA kernel requires the mask to be padded to 16 and at least n_queries big");
-
-    GGML_ASSERT(K->ne[1] % FATTN_KQ_STRIDE == 0 && "Incorrect KV cache padding.");
-
-    ggml_cuda_pool & pool = ctx.pool();
-    cudaStream_t main_stream = ctx.stream();
-
-    ggml_cuda_pool_alloc<half>   K_f16(pool);
-    ggml_cuda_pool_alloc<half>   V_f16(pool);
-    ggml_cuda_pool_alloc<float>  dst_tmp(pool);
-    ggml_cuda_pool_alloc<float2> dst_tmp_meta(pool);
-
-    char * K_data = (char *) K->data;
-    size_t nb11 = K->nb[1];
-    size_t nb12 = K->nb[2];
-    size_t nb13 = K->nb[3];
-
-    char * V_data = (char *) V->data;
-    size_t nb21 = V->nb[1];
-    size_t nb22 = V->nb[2];
-    size_t nb23 = V->nb[3];
-
-    if (need_f16_K && K->type != GGML_TYPE_F16) {
-        K_f16.alloc(ggml_nelements(K));
-        to_fp16_cuda_t to_fp16 = ggml_get_to_fp16_cuda(K->type);
-        to_fp16(K_data, K_f16.ptr, ggml_nelements(K), main_stream);
-        K_data = (char *) K_f16.ptr;
-
-        const size_t bs = ggml_blck_size(K->type);
-        const size_t ts = ggml_type_size(K->type);
-
-        nb11 = nb11*bs*sizeof(half)/ts;
-        nb12 = nb12*bs*sizeof(half)/ts;
-        nb13 = nb13*bs*sizeof(half)/ts;
-    }
-
-    if (need_f16_V && V->type != GGML_TYPE_F16) {
-        V_f16.alloc(ggml_nelements(V));
-        to_fp16_cuda_t to_fp16 = ggml_get_to_fp16_cuda(V->type);
-        to_fp16(V_data, V_f16.ptr, ggml_nelements(V), main_stream);
-        V_data = (char *) V_f16.ptr;
-
-        const size_t bs = ggml_blck_size(V->type);
-        const size_t ts = ggml_type_size(V->type);
-
-        nb21 = nb21*bs*sizeof(half)/ts;
-        nb22 = nb22*bs*sizeof(half)/ts;
-        nb23 = nb23*bs*sizeof(half)/ts;
-    }
-
-    if (parallel_blocks > 1) {
-        dst_tmp.alloc(parallel_blocks*ggml_nelements(KQV));
-        dst_tmp_meta.alloc(parallel_blocks*ggml_nrows(KQV));
-    }
-
-    const dim3 block_dim(WARP_SIZE, nwarps, 1);
-    const dim3 blocks_num(parallel_blocks*((Q->ne[1] + cols_per_block - 1) / cols_per_block), Q->ne[2], Q->ne[3]);
-    const int  shmem = 0;
-
-    float scale    = 1.0f;
-    float max_bias = 0.0f;
-
-    memcpy(&scale,    (float *) KQV->op_params + 0, sizeof(float));
-    memcpy(&max_bias, (float *) KQV->op_params + 1, sizeof(float));
-
-    const uint32_t n_head      = Q->ne[2];
-    const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head));
-
-    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
-    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
-
-    fattn_kernel<<<blocks_num, block_dim, shmem, main_stream>>>(
-        (const char *) Q->data,
-        K_data,
-        V_data,
-        mask ? ((const char *) mask->data) : nullptr,
-        (parallel_blocks) == 1 ? (float *) KQV->data : dst_tmp.ptr, dst_tmp_meta.ptr,
-        scale, max_bias, m0, m1, n_head_log2,
-        Q->ne[0], Q->ne[1], Q->ne[2], Q->ne[3],
-        K->ne[0], K->ne[1], K->ne[2], K->ne[3],
-        mask ? mask->ne[1] : 0, mask ?  mask->nb[1] : 0,
-        Q->nb[1], Q->nb[2], Q->nb[3],
-        nb11, nb12, nb13,
-        nb21, nb22, nb23,
-        KQV->ne[0], KQV->ne[1], KQV->ne[2], KQV->ne[3]
-    );
-    CUDA_CHECK(cudaGetLastError());
-
-    if ((parallel_blocks) == 1) {
-        return;
-    }
-
-    const dim3 block_dim_combine(D, 1, 1);
-    const dim3 blocks_num_combine(Q->ne[1], blocks_num.y, blocks_num.z);
-    const int  shmem_combine = 0;
-
-    flash_attn_combine_results<D, parallel_blocks>
-        <<<blocks_num_combine, block_dim_combine, shmem_combine, main_stream>>>
-        (dst_tmp.ptr, dst_tmp_meta.ptr, (float *) KQV->data);
-    CUDA_CHECK(cudaGetLastError());
-}
diff --git a/ggml-cuda/fattn-tile-f16.cu b/ggml-cuda/fattn-tile-f16.cu
deleted file mode 100644 (file)
index c6c3513..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-#include "common.cuh"
-#include "fattn-common.cuh"
-#include "fattn-tile-f16.cuh"
-
-#define FATTN_KQ_STRIDE_TILE_F16 64
-
-template<int D, int ncols, int nwarps, int parallel_blocks> // D == head size
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-__launch_bounds__(nwarps*WARP_SIZE, 1)
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-static __global__ void flash_attn_tile_ext_f16(
-        const char * __restrict__ Q,
-        const char * __restrict__ K,
-        const char * __restrict__ V,
-        const char * __restrict__ mask,
-        float      * __restrict__ dst,
-        float2     * __restrict__ dst_meta,
-        const float scale,
-        const float max_bias,
-        const float m0,
-        const float m1,
-        const uint32_t n_head_log2,
-        const int ne00,
-        const int ne01,
-        const int ne02,
-        const int ne03,
-        const int ne10,
-        const int ne11,
-        const int ne12,
-        const int ne13,
-        const int ne31,
-        const int nb31,
-        const int nb01,
-        const int nb02,
-        const int nb03,
-        const int nb11,
-        const int nb12,
-        const int nb13,
-        const int nb21,
-        const int nb22,
-        const int nb23,
-        const int ne0,
-        const int ne1,
-        const int ne2,
-        const int ne3) {
-#ifdef FP16_AVAILABLE
-    //In this kernel Q, K, V are matrices while i, j, k are matrix indices.
-
-    const int ic0 = (blockIdx.x / parallel_blocks) * ncols; // Index of the Q/QKV column to work on.
-    const int ip  =  blockIdx.x % parallel_blocks; // Index in group of blocks running for the same column in parallel.
-
-    const int gqa_ratio = ne02 / ne12; // With grouped query attention there are > 1 Q matrices per K, V matrix.
-    const float2 * Q_f2  = (const float2 *) (Q    + nb02* blockIdx.y              + nb01*ic0);
-    const half2  * K_h2  = (const half2  *) (K    + nb12*(blockIdx.y / gqa_ratio));
-    const half2  * V_h2  = (const half2  *) (V    + nb12*(blockIdx.y / gqa_ratio)); // K and V have same shape
-    const half   * maskh = (const half   *)  mask + ne11*ic0;
-
-    const int stride_KV2 = nb11 / sizeof(half2);
-
-    const float slopef = get_alibi_slope(max_bias, blockIdx.y, n_head_log2, m0, m1);
-    const half  slopeh = __float2half(slopef);
-
-    static_assert(D % (2*WARP_SIZE) == 0, "D not divisible by 2*WARP_SIZE == 64.");
-
-    __shared__ half KQ[ncols*FATTN_KQ_STRIDE_TILE_F16];
-    half2 * KQ2 = (half2 *) KQ;
-
-    __shared__ half2 KV_tmp[FATTN_KQ_STRIDE_TILE_F16][D/2 + 1]; // Pad D to avoid memory bank conflicts.
-
-    half kqmax[ncols/nwarps];
-#pragma unroll
-    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-        kqmax[j0/nwarps] = -HALF_MAX_HALF;
-    }
-    half2 kqsum[ncols/nwarps] = {{0.0f, 0.0f}};
-
-    half2 VKQ[ncols/nwarps][(D/2)/WARP_SIZE] = {{{0.0f, 0.0f}}};
-
-    // Convert Q to half2 and store in registers:
-    __shared__ half2 Q_h2[ncols][D/2];
-#pragma unroll
-    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            const float2 tmp = ic0 + j < ne01 ? Q_f2[j*(nb01/sizeof(float2)) + i] : make_float2(0.0f, 0.0f);
-            Q_h2[j][i] = make_half2(scale, scale) * make_half2(tmp.x, tmp.y);
-        }
-    }
-
-    __syncthreads();
-
-    const int k_start = parallel_blocks == 1 ? 0 : ip*FATTN_KQ_STRIDE_TILE_F16;
-    for (int k_VKQ_0 = k_start; k_VKQ_0 < ne11; k_VKQ_0 += parallel_blocks*FATTN_KQ_STRIDE_TILE_F16) {
-        // Calculate KQ tile and keep track of new maximum KQ values:
-
-        half kqmax_new[ncols/nwarps];
-#pragma unroll
-        for (int j = 0; j < ncols/nwarps; ++j) {
-            kqmax_new[j] = kqmax[j];
-        }
-
-#pragma unroll
-        for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F16; i_KQ_0 += nwarps) {
-            const int i_KQ = i_KQ_0 + threadIdx.y;
-
-#pragma unroll
-            for (int k_KQ_0 = 0; k_KQ_0 < D/2; k_KQ_0 += WARP_SIZE) {
-                const int k_KQ = k_KQ_0 + threadIdx.x;
-
-                KV_tmp[i_KQ][k_KQ] = K_h2[(k_VKQ_0 + i_KQ)*stride_KV2 + k_KQ];
-            }
-        }
-
-        __syncthreads();
-
-        half2 sum2[FATTN_KQ_STRIDE_TILE_F16/WARP_SIZE][ncols/nwarps] = {{{0.0f, 0.0f}}};
-
-#pragma unroll
-        for (int k_KQ = 0; k_KQ < D/2; ++k_KQ) {
-            half2 K_k[FATTN_KQ_STRIDE_TILE_F16/WARP_SIZE];
-            half2 Q_k[ncols/nwarps];
-
-#pragma unroll
-            for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F16; i_KQ_0 += WARP_SIZE) {
-                const int i_KQ = i_KQ_0 + threadIdx.x;
-
-                K_k[i_KQ_0/WARP_SIZE] = KV_tmp[i_KQ][k_KQ];
-            }
-#pragma unroll
-            for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
-                const int j_KQ = j_KQ_0 + threadIdx.y;
-
-                Q_k[j_KQ_0/nwarps] = Q_h2[j_KQ][k_KQ];
-            }
-
-#pragma unroll
-            for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F16; i_KQ_0 += WARP_SIZE) {
-#pragma unroll
-                for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
-                    sum2[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps] += K_k[i_KQ_0/WARP_SIZE]*Q_k[j_KQ_0/nwarps];
-                }
-            }
-        }
-
-#pragma unroll
-        for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F16; i_KQ_0 += WARP_SIZE) {
-            const int i_KQ = i_KQ_0 + threadIdx.x;
-
-#pragma unroll
-            for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
-                const int j_KQ = j_KQ_0 + threadIdx.y;
-
-                half sum = __low2half(sum2[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps]) + __high2half(sum2[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps]);
-                sum += mask ? slopeh*maskh[j_KQ*ne11 + k_VKQ_0 + i_KQ] : __float2half(0.0f);
-
-                kqmax_new[j_KQ_0/nwarps] = ggml_cuda_hmax(kqmax_new[j_KQ_0/nwarps], sum);
-
-                KQ[j_KQ*FATTN_KQ_STRIDE_TILE_F16 + i_KQ] = sum;
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-            const int j = j0 + threadIdx.y;
-
-            kqmax_new[j0/nwarps] = warp_reduce_max(kqmax_new[j0/nwarps]);
-            const half2 KQ_max_scale = __half2half2(hexp(kqmax[j0/nwarps] - kqmax_new[j0/nwarps]));
-            kqmax[j0/nwarps] = kqmax_new[j0/nwarps];
-
-#pragma unroll
-            for (int i0 = 0; i0 < FATTN_KQ_STRIDE_TILE_F16/2; i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-
-                const half2 diff = KQ2[j*(FATTN_KQ_STRIDE_TILE_F16/2) + i] - __half2half2(kqmax[j0/nwarps]);
-                const half2 val = h2exp(diff);
-                kqsum[j0/nwarps] = kqsum[j0/nwarps]*KQ_max_scale + val;
-                KQ2[j*(FATTN_KQ_STRIDE_TILE_F16/2) + i] = val;
-            }
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-                VKQ[j0/nwarps][i0/WARP_SIZE] *= KQ_max_scale;
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int k0 = 0; k0 < FATTN_KQ_STRIDE_TILE_F16; k0 += nwarps) {
-            const int k = k0 + threadIdx.y;
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-
-                KV_tmp[k][i] = V_h2[(k_VKQ_0 + k)*stride_KV2 + i];
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int k0 = 0; k0 < FATTN_KQ_STRIDE_TILE_F16; k0 += 2) {
-            half2  V_k[(D/2)/WARP_SIZE][2];
-            half2 KQ_k[ncols/nwarps];
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-
-                V_k[i0/WARP_SIZE][0] = KV_tmp[k0 + 0][i];
-                V_k[i0/WARP_SIZE][1] = KV_tmp[k0 + 1][i];
-            }
-#pragma unroll
-            for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-                const int j = j0 + threadIdx.y;
-
-                KQ_k[j0/nwarps] = KQ2[j*(FATTN_KQ_STRIDE_TILE_F16/2) + k0/2];
-            }
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-#pragma unroll
-                for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-                    VKQ[j0/nwarps][i0/WARP_SIZE] += V_k[i0/WARP_SIZE][0]* __low2half2(KQ_k[j0/nwarps]);
-                    VKQ[j0/nwarps][i0/WARP_SIZE] += V_k[i0/WARP_SIZE][1]*__high2half2(KQ_k[j0/nwarps]);
-                }
-            }
-        }
-
-        __syncthreads();
-    }
-
-#pragma unroll
-    for (int j_VKQ_0 = 0; j_VKQ_0 < ncols; j_VKQ_0 += nwarps) {
-        const int j_VKQ = j_VKQ_0 + threadIdx.y;
-
-        if (ic0 + j_VKQ >= ne01) {
-            return;
-        }
-
-        half kqsum_j = __low2half(kqsum[j_VKQ_0/nwarps]) + __high2half(kqsum[j_VKQ_0/nwarps]);
-        kqsum_j = warp_reduce_sum(kqsum_j);
-
-#pragma unroll
-        for (int i00 = 0; i00 < D; i00 += 2*WARP_SIZE) {
-            const int i0 = i00 + 2*threadIdx.x;
-
-            half2 dst_val = VKQ[j_VKQ_0/nwarps][i0/(2*WARP_SIZE)];
-            if (parallel_blocks == 1) {
-                dst_val /= __half2half2(kqsum_j);
-            }
-            const int j_dst = (ic0 + j_VKQ)*parallel_blocks + ip;
-            dst[j_dst*D*gridDim.y + D*blockIdx.y + i0 + 0] =  __low2float(dst_val);
-            dst[j_dst*D*gridDim.y + D*blockIdx.y + i0 + 1] = __high2float(dst_val);
-        }
-
-        if (parallel_blocks != 1 && threadIdx.x == 0) {
-            dst_meta[(ic0 + j_VKQ)*gridDim.y*parallel_blocks + blockIdx.y*parallel_blocks + ip] = make_float2(kqmax[j_VKQ_0/nwarps], kqsum_j);
-        }
-    }
-#else
-   NO_DEVICE_CODE;
-#endif // FP16_AVAILABLE
-}
-
-template <int cols_per_block, int parallel_blocks>
-void launch_fattn_tile_f16_64_128(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * Q = dst->src[0];
-    switch (Q->ne[0]) {
-        case  64: {
-            constexpr int      D = 64;
-            constexpr int nwarps = 8;
-            fattn_kernel_t fattn_kernel = flash_attn_tile_ext_f16<D, cols_per_block, nwarps, parallel_blocks>;
-            launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
-        } break;
-        case 128: {
-            constexpr int      D = 128;
-            constexpr int nwarps = 8;
-            fattn_kernel_t fattn_kernel = flash_attn_tile_ext_f16<D, cols_per_block, nwarps, parallel_blocks>;
-            launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
-        } break;
-        default: {
-            GGML_ASSERT(false && "FlashAttention without tensor cores only supports head sizes 64 and 128.");
-        } break;
-    }
-}
-
-void ggml_cuda_flash_attn_ext_tile_f16(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * KQV = dst;
-    const ggml_tensor * Q   = dst->src[0];
-
-    const int32_t precision = KQV->op_params[2];
-    GGML_ASSERT(precision == GGML_PREC_DEFAULT);
-
-    if (Q->ne[1] <= 16) {
-        constexpr int cols_per_block = 16;
-        constexpr int parallel_blocks = 4;
-        launch_fattn_tile_f16_64_128<cols_per_block, parallel_blocks>(ctx, dst);
-        return;
-    }
-
-    if (Q->ne[1] <= 32) {
-        constexpr int cols_per_block = 32;
-        constexpr int parallel_blocks = 4;
-        launch_fattn_tile_f16_64_128<cols_per_block, parallel_blocks>(ctx, dst);
-        return;
-    }
-
-    constexpr int cols_per_block = 32;
-    constexpr int parallel_blocks = 1;
-    launch_fattn_tile_f16_64_128<cols_per_block, parallel_blocks>(ctx, dst);
-}
diff --git a/ggml-cuda/fattn-tile-f16.cuh b/ggml-cuda/fattn-tile-f16.cuh
deleted file mode 100644 (file)
index ffc5878..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "common.cuh"
-
-void ggml_cuda_flash_attn_ext_tile_f16(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/fattn-tile-f32.cu b/ggml-cuda/fattn-tile-f32.cu
deleted file mode 100644 (file)
index 15e22f4..0000000
+++ /dev/null
@@ -1,312 +0,0 @@
-#include "common.cuh"
-#include "fattn-common.cuh"
-#include "fattn-tile-f32.cuh"
-
-#define FATTN_KQ_STRIDE_TILE_F32 32
-
-template<int D, int ncols, int nwarps, int parallel_blocks> // D == head size
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-__launch_bounds__(nwarps*WARP_SIZE, 1)
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-static __global__ void flash_attn_tile_ext_f32(
-        const char * __restrict__ Q,
-        const char * __restrict__ K,
-        const char * __restrict__ V,
-        const char * __restrict__ mask,
-        float      * __restrict__ dst,
-        float2     * __restrict__ dst_meta,
-        const float scale,
-        const float max_bias,
-        const float m0,
-        const float m1,
-        const uint32_t n_head_log2,
-        const int ne00,
-        const int ne01,
-        const int ne02,
-        const int ne03,
-        const int ne10,
-        const int ne11,
-        const int ne12,
-        const int ne13,
-        const int ne31,
-        const int nb31,
-        const int nb01,
-        const int nb02,
-        const int nb03,
-        const int nb11,
-        const int nb12,
-        const int nb13,
-        const int nb21,
-        const int nb22,
-        const int nb23,
-        const int ne0,
-        const int ne1,
-        const int ne2,
-        const int ne3) {
-    //In this kernel Q, K, V are matrices while i, j, k are matrix indices.
-
-    const int ic0 = (blockIdx.x / parallel_blocks) * ncols; // Index of the Q/QKV column to work on.
-    const int ip  =  blockIdx.x % parallel_blocks; // Index in group of blocks running for the same column in parallel.
-
-    const int gqa_ratio = ne02 / ne12; // With grouped query attention there are > 1 Q matrices per K, V matrix.
-    const float2 * Q_f2  = (const float2 *) (Q    + nb02* blockIdx.y              + nb01*ic0);
-    const half2  * K_h2  = (const half2  *) (K    + nb12*(blockIdx.y / gqa_ratio));
-    const half2  * V_h2  = (const half2  *) (V    + nb12*(blockIdx.y / gqa_ratio)); // K and V have same shape
-    const half   * maskh = (const half   *)  mask + ne11*ic0;
-
-    const int stride_KV2 = nb11 / sizeof(half2);
-
-    const float slope = get_alibi_slope(max_bias, blockIdx.y, n_head_log2, m0, m1);
-
-    static_assert(D % (2*WARP_SIZE) == 0, "D not divisible by 2*WARP_SIZE == 64.");
-
-    __shared__ float KQ[ncols*FATTN_KQ_STRIDE_TILE_F32];
-
-    __shared__ float KV_tmp[FATTN_KQ_STRIDE_TILE_F32][D + 1]; // Pad D to avoid memory bank conflicts.
-    float2 * KV_tmp2 = (float2 *) KV_tmp;
-
-    float kqmax[ncols/nwarps];
-#pragma unroll
-    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-        kqmax[j0/nwarps] = -FLT_MAX/2.0f;
-    }
-    float kqsum[ncols/nwarps] = {0.0f};
-
-    float2 VKQ[ncols/nwarps][(D/2)/WARP_SIZE] = {{{0.0f, 0.0f}}};
-
-    // Convert Q to half2 and store in registers:
-    __shared__ float Q_f[ncols][D];
-#pragma unroll
-    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < D; i0 += 2*WARP_SIZE) {
-            float2 tmp = ic0 + j < ne01 ? Q_f2[j*(nb01/sizeof(float2)) + i0/2 + threadIdx.x] : make_float2(0.0f, 0.0f);
-            Q_f[j][i0 + 0*WARP_SIZE + threadIdx.x] = tmp.x * scale;
-            Q_f[j][i0 + 1*WARP_SIZE + threadIdx.x] = tmp.y * scale;
-        }
-    }
-
-    __syncthreads();
-
-    const int k_start = parallel_blocks == 1 ? 0 : ip*FATTN_KQ_STRIDE_TILE_F32;
-    for (int k_VKQ_0 = k_start; k_VKQ_0 < ne11; k_VKQ_0 += parallel_blocks*FATTN_KQ_STRIDE_TILE_F32) {
-        // Calculate KQ tile and keep track of new maximum KQ values:
-
-        float kqmax_new[ncols/nwarps];
-#pragma unroll
-        for (int j = 0; j < ncols/nwarps; ++j) {
-            kqmax_new[j] = kqmax[j];
-        }
-
-#pragma unroll
-        for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F32; i_KQ_0 += nwarps) {
-            const int i_KQ = i_KQ_0 + threadIdx.y;
-
-#pragma unroll
-            for (int k_KQ_0 = 0; k_KQ_0 < D; k_KQ_0 += 2*WARP_SIZE) {
-                const half2 tmp = K_h2[(k_VKQ_0 + i_KQ)*stride_KV2 + k_KQ_0/2 + threadIdx.x];
-                KV_tmp[i_KQ][k_KQ_0 + 0*WARP_SIZE + threadIdx.x] =  __low2float(tmp);
-                KV_tmp[i_KQ][k_KQ_0 + 1*WARP_SIZE + threadIdx.x] = __high2float(tmp);
-            }
-        }
-
-        __syncthreads();
-
-        float sum[FATTN_KQ_STRIDE_TILE_F32/WARP_SIZE][ncols/nwarps] = {{0.0f}};
-
-#pragma unroll
-        for (int k_KQ = 0; k_KQ < D; ++k_KQ) {
-            float K_k[FATTN_KQ_STRIDE_TILE_F32/WARP_SIZE];
-            float Q_k[ncols/nwarps];
-
-#pragma unroll
-            for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F32; i_KQ_0 += WARP_SIZE) {
-                const int i_KQ = i_KQ_0 + threadIdx.x;
-
-                K_k[i_KQ_0/WARP_SIZE] = KV_tmp[i_KQ][k_KQ];
-            }
-#pragma unroll
-            for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
-                const int j_KQ = j_KQ_0 + threadIdx.y;
-
-                Q_k[j_KQ_0/nwarps] = Q_f[j_KQ][k_KQ];
-            }
-
-#pragma unroll
-            for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F32; i_KQ_0 += WARP_SIZE) {
-#pragma unroll
-                for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
-                    sum[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps] += K_k[i_KQ_0/WARP_SIZE] * Q_k[j_KQ_0/nwarps];
-                }
-            }
-        }
-
-#pragma unroll
-        for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F32; i_KQ_0 += WARP_SIZE) {
-            const int i_KQ = i_KQ_0 + threadIdx.x;
-
-#pragma unroll
-            for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
-                const int j_KQ = j_KQ_0 + threadIdx.y;
-
-                sum[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps] += mask ? slope*__half2float(maskh[j_KQ*ne11 + k_VKQ_0 + i_KQ]) : 0.0f;
-
-                kqmax_new[j_KQ_0/nwarps] = fmaxf(kqmax_new[j_KQ_0/nwarps], sum[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps]);
-
-                KQ[j_KQ*FATTN_KQ_STRIDE_TILE_F32 + i_KQ] = sum[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps];
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-            const int j = j0 + threadIdx.y;
-
-            kqmax_new[j0/nwarps] = warp_reduce_max(kqmax_new[j0/nwarps]);
-            const float KQ_max_scale = expf(kqmax[j0/nwarps] - kqmax_new[j0/nwarps]);
-            kqmax[j0/nwarps] = kqmax_new[j0/nwarps];
-
-            float kqsum_add = 0.0f;
-#pragma unroll
-            for (int i0 = 0; i0 < FATTN_KQ_STRIDE_TILE_F32; i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-
-                const float diff = KQ[j*FATTN_KQ_STRIDE_TILE_F32 + i] - kqmax[j0/nwarps];
-                const float val = expf(diff);
-                kqsum_add += val;
-                KQ[j*FATTN_KQ_STRIDE_TILE_F32 + i] = val;
-            }
-            kqsum[j0/nwarps] = kqsum[j0/nwarps]*KQ_max_scale + kqsum_add;
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-                VKQ[j0/nwarps][i0/WARP_SIZE].x *= KQ_max_scale;
-                VKQ[j0/nwarps][i0/WARP_SIZE].y *= KQ_max_scale;
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int k0 = 0; k0 < FATTN_KQ_STRIDE_TILE_F32; k0 += nwarps) {
-            const int k = k0 + threadIdx.y;
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-
-                KV_tmp2[k*(D/2) + i].x =  __low2float(V_h2[(k_VKQ_0 + k)*stride_KV2 + i]);
-                KV_tmp2[k*(D/2) + i].y = __high2float(V_h2[(k_VKQ_0 + k)*stride_KV2 + i]);
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int k = 0; k < FATTN_KQ_STRIDE_TILE_F32; ++k) {
-            float2 V_k[(D/2)/WARP_SIZE];
-            float  KQ_k[ncols/nwarps];
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-
-                V_k[i0/WARP_SIZE] = KV_tmp2[k*(D/2) + i];
-            }
-#pragma unroll
-            for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-                const int j = j0 + threadIdx.y;
-
-                KQ_k[j0/nwarps] = KQ[j*FATTN_KQ_STRIDE_TILE_F32 + k];
-            }
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-#pragma unroll
-                for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-                    VKQ[j0/nwarps][i0/WARP_SIZE].x += V_k[i0/WARP_SIZE].x*KQ_k[j0/nwarps];
-                    VKQ[j0/nwarps][i0/WARP_SIZE].y += V_k[i0/WARP_SIZE].y*KQ_k[j0/nwarps];
-                }
-            }
-        }
-
-        __syncthreads();
-    }
-
-#pragma unroll
-    for (int j_VKQ_0 = 0; j_VKQ_0 < ncols; j_VKQ_0 += nwarps) {
-        const int j_VKQ = j_VKQ_0 + threadIdx.y;
-
-        if (ic0 + j_VKQ >= ne01) {
-            return;
-        }
-
-        float kqsum_j = kqsum[j_VKQ_0/nwarps];
-        kqsum_j = warp_reduce_sum(kqsum_j);
-
-#pragma unroll
-        for (int i00 = 0; i00 < D; i00 += 2*WARP_SIZE) {
-            const int i0 = i00 + 2*threadIdx.x;
-
-            float2 dst_val = VKQ[j_VKQ_0/nwarps][i0/(2*WARP_SIZE)];
-            if (parallel_blocks == 1) {
-                dst_val.x /= kqsum_j;
-                dst_val.y /= kqsum_j;
-            }
-            const int j_dst = (ic0 + j_VKQ)*parallel_blocks + ip;
-            dst[j_dst*D*gridDim.y + D*blockIdx.y + i0 + 0] = dst_val.x;
-            dst[j_dst*D*gridDim.y + D*blockIdx.y + i0 + 1] = dst_val.y;
-        }
-
-        if (parallel_blocks != 1 && threadIdx.x == 0) {
-            dst_meta[(ic0 + j_VKQ)*gridDim.y*parallel_blocks + blockIdx.y*parallel_blocks + ip] = make_float2(kqmax[j_VKQ_0/nwarps], kqsum_j);
-        }
-    }
-}
-
-template <int cols_per_block, int parallel_blocks>
-void launch_fattn_tile_f32_64_128(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * Q = dst->src[0];
-    switch (Q->ne[0]) {
-        case  64: {
-            constexpr int      D = 64;
-            constexpr int nwarps = 8;
-            fattn_kernel_t fattn_kernel = flash_attn_tile_ext_f32<D, cols_per_block, nwarps, parallel_blocks>;
-            launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
-        } break;
-        case 128: {
-            constexpr int      D = 128;
-            constexpr int nwarps = 8;
-            fattn_kernel_t fattn_kernel = flash_attn_tile_ext_f32<D, cols_per_block, nwarps, parallel_blocks>;
-            launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
-        } break;
-        default: {
-            GGML_ASSERT(false && "FlashAttention without tensor cores only supports head sizes 64 and 128.");
-        } break;
-    }
-}
-
-void ggml_cuda_flash_attn_ext_tile_f32(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * Q = dst->src[0];
-
-    if (Q->ne[1] <= 16) {
-        constexpr int cols_per_block = 16;
-        constexpr int parallel_blocks = 4;
-        launch_fattn_tile_f32_64_128<cols_per_block, parallel_blocks>(ctx, dst);
-        return;
-    }
-
-    if (Q->ne[1] <= 32) {
-        constexpr int cols_per_block = 32;
-        constexpr int parallel_blocks = 4;
-        launch_fattn_tile_f32_64_128<cols_per_block, parallel_blocks>(ctx, dst);
-        return;
-    }
-
-    constexpr int cols_per_block = 32;
-    constexpr int parallel_blocks = 1;
-    launch_fattn_tile_f32_64_128<cols_per_block, parallel_blocks>(ctx, dst);
-}
diff --git a/ggml-cuda/fattn-tile-f32.cuh b/ggml-cuda/fattn-tile-f32.cuh
deleted file mode 100644 (file)
index b1c546c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "common.cuh"
-
-void ggml_cuda_flash_attn_ext_tile_f32(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/fattn-vec-f16.cuh b/ggml-cuda/fattn-vec-f16.cuh
deleted file mode 100644 (file)
index 02a4ad0..0000000
+++ /dev/null
@@ -1,397 +0,0 @@
-#include "common.cuh"
-#include "fattn-common.cuh"
-
-template<int D, int ncols, int parallel_blocks, ggml_type type_K, ggml_type type_V> // D == head size
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-__launch_bounds__(D, 1)
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-static __global__ void flash_attn_vec_ext_f16(
-        const char * __restrict__ Q,
-        const char * __restrict__ K,
-        const char * __restrict__ V,
-        const char * __restrict__ mask,
-        float      * __restrict__ dst,
-        float2     * __restrict__ dst_meta,
-        const float scale,
-        const float max_bias,
-        const float m0,
-        const float m1,
-        const uint32_t n_head_log2,
-        const int ne00,
-        const int ne01,
-        const int ne02,
-        const int ne03,
-        const int ne10,
-        const int ne11,
-        const int ne12,
-        const int ne13,
-        const int ne31,
-        const int nb31,
-        const int nb01,
-        const int nb02,
-        const int nb03,
-        const int nb11,
-        const int nb12,
-        const int nb13,
-        const int nb21,
-        const int nb22,
-        const int nb23,
-        const int ne0,
-        const int ne1,
-        const int ne2,
-        const int ne3) {
-#ifdef FP16_AVAILABLE
-    //In this kernel Q, K, V are matrices while i, j, k are matrix indices.
-
-    constexpr vec_dot_KQ_f16_t vec_dot_KQ = get_vec_dot_KQ_f16<D>(type_K);
-    constexpr bool Q_q8_1 = type_K != GGML_TYPE_F16;
-    constexpr dequantize_1_f16_t dequantize_1_v = get_dequantize_1_f16(type_V);
-
-    const int ic0 = (blockIdx.x / parallel_blocks) * ncols; // Index of the Q/QKV column to work on.
-    const int ip  =  blockIdx.x % parallel_blocks; // Index in group of blocks running for the same column in parallel.
-
-    const int gqa_ratio = ne02 / ne12; // With grouped query attention there are > 1 Q matrices per K, V matrix.
-    Q += nb02* blockIdx.y              + nb01*ic0;
-    K += nb12*(blockIdx.y / gqa_ratio);
-    V += nb22*(blockIdx.y / gqa_ratio);
-
-    const half * maskh = (const half   *)  mask + ne11*ic0;
-
-    const float slopef = get_alibi_slope(max_bias, blockIdx.y, n_head_log2, m0, m1);
-    const half  slopeh = __float2half(slopef);
-
-    static_assert(D % (2*WARP_SIZE) == 0, "D not divisible by 2*WARP_SIZE == 64.");
-    constexpr int nwarps = D / WARP_SIZE;
-    const int tid = WARP_SIZE*threadIdx.y + threadIdx.x;
-    __builtin_assume(tid < D);
-
-    __shared__ half KQ[ncols*D];
-    half2 * KQ2 = (half2 *) KQ;
-
-    half kqmax[ncols];
-#pragma unroll
-    for (int j = 0; j < ncols; ++j) {
-        kqmax[j] = -HALF_MAX_HALF;
-    }
-    half kqsum[ncols] = {0.0f};
-
-    __shared__ half kqmax_shared[ncols][WARP_SIZE];
-    __shared__ half kqsum_shared[ncols][WARP_SIZE];
-#pragma unroll
-    for (int j = 0; j < ncols; ++j) {
-        if (threadIdx.y == 0) {
-            kqmax_shared[j][threadIdx.x] = -HALF_MAX_HALF;
-            kqsum_shared[j][threadIdx.x] = 0.0f;
-        }
-    }
-    __syncthreads();
-
-    // Convert Q to half2 (f16 K) or q8_1 (quantized K) and store in registers:
-    half2  Q_h2[ncols][D/(2*WARP_SIZE)];
-    int   Q_i32[ncols][D/(sizeof(int)*QK8_1) == 0 ? 1 : D/(sizeof(int)*QK8_1)];
-    half2  Q_ds[ncols][D/QK8_1 == 0 ? 1 : D/QK8_1];
-    if (Q_q8_1) {
-#pragma unroll
-        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-            const int j = j0 + threadIdx.y;
-
-            if (j0 + nwarps > ncols && j >= ncols) {
-                break;
-            }
-
-            // Reuse KQ as temporary storage for converting Q to q8_1:
-            int   * tmp_q_i32 = (int   *) &KQ[j*D];
-            half2 * tmp_q_ds  = (half2 *) (tmp_q_i32 + D/sizeof(int));
-
-            // Set memory to zero if out of bounds:
-            if (ncols > 2 && ic0 + j >= ne01) {
-#pragma unroll
-                for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
-                    const int i = i0 + threadIdx.x;
-
-                    tmp_q_i32[i] = 0;
-                }
-                if (threadIdx.x < D/QK8_1) {
-                    tmp_q_ds[threadIdx.x] = make_half2(0.0f, 0.0f);
-                }
-                continue;
-            }
-
-            const float * Q_f = (const float *) (Q + j*nb01);
-#pragma unroll
-            for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
-                quantize_q8_1_to_shared<half2>(Q_f + 4*i0, scale, tmp_q_i32, tmp_q_ds);
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int j = 0; j < ncols; ++j) {
-            int   * tmp_q_i32 = (int   *) &KQ[j*D];
-            half2 * tmp_q_ds  = (half2 *) (tmp_q_i32 + D/sizeof(int));
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-
-                Q_i32[j][i0/WARP_SIZE] = tmp_q_i32[i];
-                Q_ds[j][i0/WARP_SIZE]  = tmp_q_ds[i/QI8_1];
-            }
-        }
-
-        __syncthreads();
-    } else {
-#pragma unroll
-        for (int j = 0; j < ncols; ++j) {
-            const float2 * Q_f2_j = (const float2 *) (Q + j*nb01);
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-
-                const float2 tmp = ncols <= 2 || ic0 + j < ne01 ? Q_f2_j[i] : make_float2(0.0f, 0.0f);
-                Q_h2[j][i0/WARP_SIZE] = make_half2(scale, scale) * make_half2(tmp.x, tmp.y);
-            }
-        }
-    }
-
-
-#pragma unroll
-    for (int j = 0; j < ncols; ++j) {
-        KQ[j*D + tid] = -HALF_MAX_HALF;
-    }
-
-    half2 VKQ[ncols] = {{0.0f, 0.0f}};
-
-    const int k_start = parallel_blocks == 1 ? 0 : ip*D;
-    for (int k_VKQ_0 = k_start; k_VKQ_0 < ne11; k_VKQ_0 += parallel_blocks*D) {
-        // Calculate KQ tile and keep track of new maximum KQ values:
-
-        // For unknown reasons using a half array of size 1 for kqmax_new causes a performance regression,
-        // see https://github.com/ggerganov/llama.cpp/pull/7061 .
-        // Therefore this variable is defined twice but only used once (so that the compiler can optimize out the unused variable).
-        half kqmax_new = kqmax[0];
-        half kqmax_new_arr[ncols];
-#pragma unroll
-        for (int j = 0; j < ncols; ++j) {
-            kqmax_new_arr[j] = kqmax[j];
-        }
-
-#pragma unroll
-        for (int i_KQ_0 = 0; i_KQ_0 < D; i_KQ_0 += nwarps) {
-            const int i_KQ = i_KQ_0 + threadIdx.y;
-
-            if ((i_KQ_0 + nwarps > D && i_KQ >= D) || (FATTN_KQ_STRIDE % D != 0 && k_VKQ_0 + i_KQ >= ne11)) {
-                break;
-            }
-
-#pragma unroll
-            for (int j = 0; j < ncols; ++j) {
-                half sum = vec_dot_KQ(K + (k_VKQ_0 + i_KQ)*nb11, Q_h2[j], Q_i32[j], Q_ds[j]);
-                sum = warp_reduce_sum(sum);
-                sum += mask ? slopeh*maskh[j*ne11 + k_VKQ_0 + i_KQ] : __float2half(0.0f);
-
-                if (ncols == 1) {
-                    kqmax_new        = ggml_cuda_hmax(kqmax_new,        sum);
-                } else {
-                    kqmax_new_arr[j] = ggml_cuda_hmax(kqmax_new_arr[j], sum);
-                }
-
-                if (threadIdx.x == 0) {
-                    KQ[j*D + i_KQ] = sum;
-                }
-            }
-        }
-
-#pragma unroll
-        for (int j = 0; j < ncols; ++j) {
-            half kqmax_new_j = ncols == 1 ? kqmax_new : kqmax_new_arr[j];
-
-            kqmax_new_j = warp_reduce_max(kqmax_new_j);
-            if (threadIdx.x == 0) {
-                kqmax_shared[j][threadIdx.y] = kqmax_new_j;
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int j = 0; j < ncols; ++j) {
-            half kqmax_new_j = kqmax_shared[j][threadIdx.x];
-            kqmax_new_j = warp_reduce_max(kqmax_new_j);
-
-            const half KQ_max_scale = hexp(kqmax[j] - kqmax_new_j);
-            kqmax[j] = kqmax_new_j;
-
-            const half val = hexp(KQ[j*D + tid] - kqmax[j]);
-            kqsum[j] = kqsum[j]*KQ_max_scale + val;
-            KQ[j*D + tid] = val;
-
-            VKQ[j] *= __half2half2(KQ_max_scale);
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int k0 = 0; k0 < D; k0 += 2) {
-            if (FATTN_KQ_STRIDE % D != 0 && k_VKQ_0 + k0 >= ne11) {
-                break;
-            }
-
-            half2 V_k;
-            reinterpret_cast<half&>(V_k.x) = dequantize_1_v(V + (k_VKQ_0 + k0 + 0)*nb21, tid);
-            reinterpret_cast<half&>(V_k.y) = dequantize_1_v(V + (k_VKQ_0 + k0 + 1)*nb21, tid);
-#pragma unroll
-            for (int j = 0; j < ncols; ++j) {
-                VKQ[j] += V_k*KQ2[j*(D/2) + k0/2];
-            }
-        }
-
-        __syncthreads();
-    }
-
-#pragma unroll
-    for (int j = 0; j < ncols; ++j) {
-        kqsum[j] = warp_reduce_sum(kqsum[j]);
-        if (threadIdx.x == 0) {
-            kqsum_shared[j][threadIdx.y] = kqsum[j];
-        }
-    }
-
-    __syncthreads();
-
-#pragma unroll
-    for (int j_VKQ = 0; j_VKQ < ncols; ++j_VKQ) {
-        if (ncols > 2 && ic0 + j_VKQ >= ne01) {
-            break;
-        }
-
-        kqsum[j_VKQ] = kqsum_shared[j_VKQ][threadIdx.x];
-        kqsum[j_VKQ] = warp_reduce_sum(kqsum[j_VKQ]);
-
-        half dst_val = (__low2half(VKQ[j_VKQ]) + __high2half(VKQ[j_VKQ]));
-        if (parallel_blocks == 1) {
-            dst_val /= kqsum[j_VKQ];
-        }
-        const int j_dst = (ic0 + j_VKQ)*parallel_blocks + ip;
-        dst[j_dst*D*gridDim.y + D*blockIdx.y + tid] = dst_val;
-    }
-
-    if (parallel_blocks != 1 && tid < ncols && (ncols <= 2 || ic0 + tid < ne01)) {
-        dst_meta[(ic0 + tid)*gridDim.y*parallel_blocks + blockIdx.y*parallel_blocks + ip] = make_float2(kqmax[tid], kqsum[tid]);
-    }
-#else
-   NO_DEVICE_CODE;
-#endif // FP16_AVAILABLE
-}
-
-template <int D, int cols_per_block, int parallel_blocks, ggml_type type_K, ggml_type type_V>
-void ggml_cuda_flash_attn_ext_vec_f16_case_impl(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    constexpr int nwarps = D/WARP_SIZE;
-    fattn_kernel_t fattn_kernel = flash_attn_vec_ext_f16<D, cols_per_block, parallel_blocks, type_K, type_V>;
-    constexpr bool need_f16_K = D != 128;
-    constexpr bool need_f16_V = D != 128 && D != 64;
-    launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, need_f16_K, need_f16_V);
-}
-
-template <int D, ggml_type type_K, ggml_type type_V>
-void ggml_cuda_flash_attn_ext_vec_f16_case(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    ggml_tensor * KQV = dst;
-    ggml_tensor * Q   = dst->src[0];
-    ggml_tensor * K   = dst->src[1];
-    ggml_tensor * V   = dst->src[2];
-
-    const int32_t precision = KQV->op_params[2];
-    GGML_ASSERT(precision == GGML_PREC_DEFAULT);
-
-    GGML_ASSERT(K->type == type_K);
-    GGML_ASSERT(V->type == type_V);
-
-    if (Q->ne[1] == 1) {
-        constexpr int cols_per_block  = 1;
-        constexpr int parallel_blocks = 4;
-        ggml_cuda_flash_attn_ext_vec_f16_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
-        return;
-    }
-
-    if (Q->ne[1] == 2) {
-        constexpr int cols_per_block  = 2;
-        constexpr int parallel_blocks = 4;
-        ggml_cuda_flash_attn_ext_vec_f16_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
-        return;
-    }
-
-    if (Q->ne[1] <= 4) {
-        constexpr int cols_per_block  = 4;
-        constexpr int parallel_blocks = 4;
-        ggml_cuda_flash_attn_ext_vec_f16_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
-        return;
-    }
-
-    if (Q->ne[1] <= 8) {
-        constexpr int cols_per_block  = 8;
-        constexpr int parallel_blocks = 4;
-        ggml_cuda_flash_attn_ext_vec_f16_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
-        return;
-    }
-
-    constexpr int cols_per_block  = 8;
-    constexpr int parallel_blocks = 1;
-    ggml_cuda_flash_attn_ext_vec_f16_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
-}
-
-#define DECL_FATTN_VEC_F16_CASE(D, type_K, type_V)                          \
-    template void ggml_cuda_flash_attn_ext_vec_f16_case                     \
-    <D, type_K, type_V>(ggml_backend_cuda_context & ctx, ggml_tensor * dst) \
-
-extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16);
-
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_0);
-
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_1);
-
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_0);
-
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_1);
-
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q8_0);
-
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16);
-extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_F16);
-
-extern DECL_FATTN_VEC_F16_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml-cuda/fattn-vec-f32.cuh b/ggml-cuda/fattn-vec-f32.cuh
deleted file mode 100644 (file)
index 11a5e35..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-#include "common.cuh"
-#include "fattn-common.cuh"
-
-template<int D, int ncols, int parallel_blocks, ggml_type type_K, ggml_type type_V> // D == head size
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-__launch_bounds__(D, 1)
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-static __global__ void flash_attn_vec_ext_f32(
-        const char * __restrict__ Q,
-        const char * __restrict__ K,
-        const char * __restrict__ V,
-        const char * __restrict__ mask,
-        float      * __restrict__ dst,
-        float2     * __restrict__ dst_meta,
-        const float scale,
-        const float max_bias,
-        const float m0,
-        const float m1,
-        const uint32_t n_head_log2,
-        const int ne00,
-        const int ne01,
-        const int ne02,
-        const int ne03,
-        const int ne10,
-        const int ne11,
-        const int ne12,
-        const int ne13,
-        const int ne31,
-        const int nb31,
-        const int nb01,
-        const int nb02,
-        const int nb03,
-        const int nb11,
-        const int nb12,
-        const int nb13,
-        const int nb21,
-        const int nb22,
-        const int nb23,
-        const int ne0,
-        const int ne1,
-        const int ne2,
-        const int ne3) {
-    //In this kernel Q, K, V are matrices while i, j, k are matrix indices.
-
-    constexpr vec_dot_KQ_f32_t vec_dot_KQ = get_vec_dot_KQ_f32<D>(type_K);
-    constexpr bool Q_q8_1 = type_K != GGML_TYPE_F16;
-    constexpr dequantize_1_f32_t dequantize_1_v = get_dequantize_1_f32(type_V);
-
-    const int ic0 = (blockIdx.x / parallel_blocks) * ncols; // Index of the Q/QKV column to work on.
-    const int ip  =  blockIdx.x % parallel_blocks; // Index in group of blocks running for the same column in parallel.
-
-    const int gqa_ratio = ne02 / ne12; // With grouped query attention there are > 1 Q matrices per K, V matrix.
-    Q += nb02* blockIdx.y              + nb01*ic0;
-    K += nb12*(blockIdx.y / gqa_ratio);
-    V += nb22*(blockIdx.y / gqa_ratio); // K and V have same shape
-    const half * maskh = (const half   *)  mask + ne11*ic0;
-
-    const float slope = get_alibi_slope(max_bias, blockIdx.y, n_head_log2, m0, m1);
-
-    static_assert(D % (2*WARP_SIZE) == 0, "D not divisible by 2*WARP_SIZE == 64.");
-    constexpr int nwarps = D / WARP_SIZE;
-    const int tid = WARP_SIZE*threadIdx.y + threadIdx.x;
-    __builtin_assume(tid < D);
-
-    __shared__ float KQ[ncols*D];
-#pragma unroll
-    for (int j = 0; j < ncols; ++j) {
-        KQ[j*D + tid] = -FLT_MAX/2.0f;
-    }
-
-    float kqmax[ncols];
-#pragma unroll
-    for (int j = 0; j < ncols; ++j) {
-        kqmax[j] = -FLT_MAX/2.0f;
-    }
-    float kqsum[ncols] = {0.0f};
-
-    __shared__ float kqmax_shared[ncols][WARP_SIZE];
-    __shared__ float kqsum_shared[ncols][WARP_SIZE];
-#pragma unroll
-    for (int j = 0; j < ncols; ++j) {
-        if (threadIdx.y == 0) {
-            kqmax_shared[j][threadIdx.x] = -FLT_MAX/2.0f;
-            kqsum_shared[j][threadIdx.x] = 0.0f;
-        }
-    }
-    __syncthreads();
-
-    // Convert Q to float2 (f16 K) or q8_1 (quantized K) and store in registers:
-    float2  Q_f2[ncols][D/(2*WARP_SIZE)];
-    int    Q_i32[ncols][D/(sizeof(int)*QK8_1) == 0 ? 1 : D >= D/(sizeof(int)*QK8_1)];
-    float2  Q_ds[ncols][D/QK8_1 == 0 ? 1 : D/QK8_1];
-    if (Q_q8_1) {
-#pragma unroll
-        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-            const int j = j0 + threadIdx.y;
-
-            if (j0 + nwarps > ncols && j >= ncols) {
-                break;
-            }
-
-            // Reuse KQ as temporary storage for converting Q to q8_1:
-            int    * tmp_q_i32 = (int    *) &KQ[j*D];
-            float2 * tmp_q_ds  = (float2 *) (tmp_q_i32 + D/sizeof(int));
-
-            // Set memory to zero if out of bounds:
-            if (ncols > 2 && ic0 + j >= ne01) {
-#pragma unroll
-                for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
-                    const int i = i0 + threadIdx.x;
-
-                    tmp_q_i32[i] = 0;
-                }
-                if (threadIdx.x < D/QK8_1) {
-                    tmp_q_ds[threadIdx.x] = make_float2(0.0f, 0.0f);
-                }
-                continue;
-            }
-
-            const float * Q_f = (const float *) (Q + j*nb01);
-#pragma unroll
-            for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
-                quantize_q8_1_to_shared<float2>(Q_f + 4*i0, scale, tmp_q_i32, tmp_q_ds);
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int j = 0; j < ncols; ++j) {
-            int    * tmp_q_i32 = (int    *) &KQ[j*D];
-            float2 * tmp_q_ds  = (float2 *) (tmp_q_i32 + D/sizeof(int));
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-
-                Q_i32[j][i0/WARP_SIZE] = tmp_q_i32[i];
-                Q_ds[j][i0/WARP_SIZE]  = tmp_q_ds[i/QI8_1];
-            }
-        }
-
-        __syncthreads();
-    } else {
-#pragma unroll
-        for (int j = 0; j < ncols; ++j) {
-            const float2 * Q_f2_j = (const float2 *) (Q + j*nb01);
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-
-                Q_f2[j][i0/WARP_SIZE]    = ncols <= 2 || ic0 + j < ne01 ? Q_f2_j[i] : make_float2(0.0f, 0.0f);
-                Q_f2[j][i0/WARP_SIZE].x *= scale;
-                Q_f2[j][i0/WARP_SIZE].y *= scale;
-            }
-        }
-    }
-
-    float VKQ[ncols] = {0.0f};
-
-    const int k_start = parallel_blocks == 1 ? 0 : ip*D;
-    for (int k_VKQ_0 = k_start; k_VKQ_0 < ne11; k_VKQ_0 += parallel_blocks*D) {
-        // Calculate KQ tile and keep track of new maximum KQ values:
-
-        float kqmax_new_arr[ncols];
-#pragma unroll
-        for (int j = 0; j < ncols; ++j) {
-            kqmax_new_arr[j] = kqmax[j];
-        }
-
-#pragma unroll
-        for (int i_KQ_0 = 0; i_KQ_0 < D; i_KQ_0 += nwarps) {
-            const int i_KQ = i_KQ_0 + threadIdx.y;
-
-            if ((i_KQ_0 + nwarps > D && i_KQ >= D) || (FATTN_KQ_STRIDE % D != 0 && k_VKQ_0 + i_KQ >= ne11)) {
-                break;
-            }
-
-#pragma unroll
-            for (int j = 0; j < ncols; ++j) {
-                float sum = vec_dot_KQ(K + (k_VKQ_0 + i_KQ)*nb11, Q_f2[j], Q_i32[j], Q_ds[j]);
-                sum = warp_reduce_sum(sum);
-                sum += mask ? slope*__half2float(maskh[j*ne11 + k_VKQ_0 + i_KQ]) : 0.0f;
-
-                kqmax_new_arr[j] = fmaxf(kqmax_new_arr[j], sum);
-
-                if (threadIdx.x == 0) {
-                    KQ[j*D + i_KQ] = sum;
-                }
-            }
-        }
-
-#pragma unroll
-        for (int j = 0; j < ncols; ++j) {
-            float kqmax_new_j = kqmax_new_arr[j];
-
-            kqmax_new_j = warp_reduce_max(kqmax_new_j);
-            if (threadIdx.x == 0) {
-                kqmax_shared[j][threadIdx.y] = kqmax_new_j;
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int j = 0; j < ncols; ++j) {
-            float kqmax_new_j = kqmax_shared[j][threadIdx.x];
-            kqmax_new_j = warp_reduce_max(kqmax_new_j);
-
-            const float KQ_max_scale = expf(kqmax[j] - kqmax_new_j);
-            kqmax[j] = kqmax_new_j;
-
-            const float val = expf(KQ[j*D + tid] - kqmax[j]);
-            kqsum[j] = kqsum[j]*KQ_max_scale + val;
-            KQ[j*D + tid] = val;
-
-            VKQ[j] *= KQ_max_scale;
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int k = 0; k < D; ++k) {
-            if (FATTN_KQ_STRIDE % D != 0 && k_VKQ_0 + k >= ne11) {
-                break;
-            }
-
-            const float V_ki = dequantize_1_v(V + (k_VKQ_0 + k)*nb21, tid);
-#pragma unroll
-            for (int j = 0; j < ncols; ++j) {
-                VKQ[j] += V_ki*KQ[j*D + k];
-            }
-        }
-
-        __syncthreads();
-    }
-
-#pragma unroll
-    for (int j = 0; j < ncols; ++j) {
-        kqsum[j] = warp_reduce_sum(kqsum[j]);
-        if (threadIdx.x == 0) {
-            kqsum_shared[j][threadIdx.y] = kqsum[j];
-        }
-    }
-
-    __syncthreads();
-
-#pragma unroll
-    for (int j_VKQ = 0; j_VKQ < ncols; ++j_VKQ) {
-        if (ncols > 2 && ic0 + j_VKQ >= ne01) {
-            break;
-        }
-
-        kqsum[j_VKQ] = kqsum_shared[j_VKQ][threadIdx.x];
-        kqsum[j_VKQ] = warp_reduce_sum(kqsum[j_VKQ]);
-
-        float dst_val = VKQ[j_VKQ];
-        if (parallel_blocks == 1) {
-            dst_val /= kqsum[j_VKQ];
-        }
-        const int j_dst = (ic0 + j_VKQ)*parallel_blocks + ip;
-        dst[j_dst*D*gridDim.y + D*blockIdx.y + tid] = dst_val;
-    }
-
-    if (parallel_blocks != 1 && tid < ncols && (ncols <= 2 || ic0 + tid < ne01)) {
-        dst_meta[(ic0 + tid)*gridDim.y*parallel_blocks + blockIdx.y*parallel_blocks + ip] = make_float2(kqmax[tid], kqsum[tid]);
-    }
-}
-
-template <int D, int cols_per_block, int parallel_blocks, ggml_type type_K, ggml_type type_V>
-void ggml_cuda_flash_attn_ext_vec_f32_case_impl(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    constexpr int nwarps = D/WARP_SIZE;
-    fattn_kernel_t fattn_kernel = flash_attn_vec_ext_f32<D, cols_per_block, parallel_blocks, type_K, type_V>;
-    constexpr bool need_f16_K = D != 128;
-    constexpr bool need_f16_V = D != 128 && D != 64;
-    launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, need_f16_K, need_f16_V);
-}
-
-template <int D, ggml_type type_K, ggml_type type_V>
-void ggml_cuda_flash_attn_ext_vec_f32_case(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    ggml_tensor * Q   = dst->src[0];
-    ggml_tensor * K   = dst->src[1];
-    ggml_tensor * V   = dst->src[2];
-
-    GGML_ASSERT(K->type == type_K);
-    GGML_ASSERT(V->type == type_V);
-
-    if (Q->ne[1] == 1) {
-        constexpr int cols_per_block  = 1;
-        constexpr int parallel_blocks = 4;
-        ggml_cuda_flash_attn_ext_vec_f32_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
-        return;
-    }
-
-    if (Q->ne[1] == 2) {
-        constexpr int cols_per_block  = 2;
-        constexpr int parallel_blocks = 4;
-        ggml_cuda_flash_attn_ext_vec_f32_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
-        return;
-    }
-
-    if (Q->ne[1] <= 4) {
-        constexpr int cols_per_block  = 4;
-        constexpr int parallel_blocks = 4;
-        ggml_cuda_flash_attn_ext_vec_f32_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
-        return;
-    }
-
-    if (Q->ne[1] <= 8) {
-        constexpr int cols_per_block  = 8;
-        constexpr int parallel_blocks = 4;
-        ggml_cuda_flash_attn_ext_vec_f32_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
-        return;
-    }
-
-    constexpr int cols_per_block  = 8;
-    constexpr int parallel_blocks = 1;
-    ggml_cuda_flash_attn_ext_vec_f32_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
-}
-
-#define DECL_FATTN_VEC_F32_CASE(D, type_K, type_V)                          \
-    template void ggml_cuda_flash_attn_ext_vec_f32_case                     \
-    <D, type_K, type_V>(ggml_backend_cuda_context & ctx, ggml_tensor * dst) \
-
-extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16);
-
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_0);
-
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_1);
-
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_0);
-
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_1);
-
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q8_0);
-
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16);
-extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_F16);
-
-extern DECL_FATTN_VEC_F32_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml-cuda/fattn-wmma-f16.cuh b/ggml-cuda/fattn-wmma-f16.cuh
deleted file mode 100644 (file)
index ae23222..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-#include "common.cuh"
-#include "fattn-common.cuh"
-
-#ifdef FP16_MMA_AVAILABLE
-#include <mma.h>
-#endif // FP16_MMA_AVAILABLE
-
-// D == head size, VKQ_stride == num VKQ rows calculated in parallel:
-template<int D, int ncols, int nwarps, int VKQ_stride, int parallel_blocks, typename KQ_acc_t>
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-__launch_bounds__(nwarps*WARP_SIZE, 1)
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-static __global__ void flash_attn_ext_f16(
-        const char * __restrict__ Q,
-        const char * __restrict__ K,
-        const char * __restrict__ V,
-        const char * __restrict__ mask,
-        float      * __restrict__ dst,
-        float2     * __restrict__ dst_meta,
-        const float scale,
-        const float max_bias,
-        const float m0,
-        const float m1,
-        const uint32_t n_head_log2,
-        const int ne00,
-        const int ne01,
-        const int ne02,
-        const int ne03,
-        const int ne10,
-        const int ne11,
-        const int ne12,
-        const int ne13,
-        const int ne31,
-        const int nb31,
-        const int nb01,
-        const int nb02,
-        const int nb03,
-        const int nb11,
-        const int nb12,
-        const int nb13,
-        const int nb21,
-        const int nb22,
-        const int nb23,
-        const int ne0,
-        const int ne1,
-        const int ne2,
-        const int ne3) {
-#ifdef FP16_MMA_AVAILABLE
-    //In this kernel Q, K, V are matrices while i, j, k are matrix indices.
-
-    const int ic0 = ncols*(blockIdx.x / parallel_blocks); // Index of the first Q/QKV column to work on.
-    const int ip  =        blockIdx.x % parallel_blocks;  // Index in group of blocks running for the same column in parallel.
-
-    static_assert(D <= FATTN_KQ_STRIDE, "D must be <= FATTN_KQ_STRIDE.");
-    static_assert(ncols == 8 || ncols % 16 == 0, "ncols must be 8 or a multiple of 16.");
-    constexpr int frag_m = ncols == 8 ? 32 : 16;
-    constexpr int frag_n = ncols == 8 ?  8 : 16;
-    static_assert(D % frag_m == 0, "If ncols == 8 then D % frag_m must be 0.");
-    typedef nvcuda::wmma::fragment<nvcuda::wmma::matrix_a,    frag_m, frag_n, 16, half, nvcuda::wmma::row_major> frag_a_K;
-    typedef nvcuda::wmma::fragment<nvcuda::wmma::matrix_a,    frag_m, frag_n, 16, half, nvcuda::wmma::col_major> frag_a_V;
-    typedef nvcuda::wmma::fragment<nvcuda::wmma::matrix_b,    frag_m, frag_n, 16, half, nvcuda::wmma::col_major> frag_b;
-    typedef nvcuda::wmma::fragment<nvcuda::wmma::accumulator, frag_m, frag_n, 16, KQ_acc_t>                      frag_c_KQ;
-    typedef nvcuda::wmma::fragment<nvcuda::wmma::accumulator, frag_m, frag_n, 16, half>                          frag_c_VKQ;
-
-    constexpr int KQ_stride_tc  = nwarps*frag_m; // Number of KQ rows calculated in parallel.
-    constexpr int VKQ_ratio = KQ_stride_tc/VKQ_stride; // Number of parallel VKQ accumulators needed to keep all warps busy.
-    static_assert(VKQ_ratio <= nwarps, "VKQ_ratio must be <= nwarps.");
-
-    // Pad internal representation of KQ, KQV to reduce shared memory bank conflicts:
-    constexpr int D_padded = D + 8;
-    constexpr int kqs_padded = FATTN_KQ_STRIDE + 8;
-    constexpr int kqar = sizeof(KQ_acc_t)/sizeof(half);
-
-    const int gqa_ratio = ne02 / ne12; // With grouped query attention there are > 1 Q matrices per K, V matrix.
-    const float * Q_f   = (const float *) (Q + nb02* blockIdx.y              + nb01*ic0);
-    const half  * K_h   = (const half  *) (K + nb12*(blockIdx.y / gqa_ratio));
-    const half  * V_h   = (const half  *) (V + nb12*(blockIdx.y / gqa_ratio)); // K and V have same shape
-    const half  * maskh = (const half  *)  mask + (nb31/sizeof(half))* ic0;
-    const half2 * mask2 = (const half2 *)  mask + (nb31/sizeof(half))*(ic0/2);
-
-    const int stride_Q  = nb01 / sizeof(float);
-    const int stride_KV = nb11 / sizeof(half);
-
-    const float slopef = get_alibi_slope(max_bias, blockIdx.y, n_head_log2, m0, m1);
-    const half  slopeh = __float2half(slopef);
-    const half2 slope2 = make_half2(slopef, slopef);
-
-    frag_b Q_b[D/16][ncols/frag_n];
-
-    // A single buffer for temporarily holding tiles of KQ and VKQ parts:
-    constexpr int mem_KQ = ncols*kqs_padded*kqar;
-    constexpr int mem_VKQ_parts = VKQ_ratio*ncols*D_padded;
-    __shared__ half KQ[mem_KQ >= mem_VKQ_parts ? mem_KQ : mem_VKQ_parts];
-    float * KQ_f = (float *) KQ;
-    half2 * KQ2 = (half2 *) KQ;
-
-    float    KQ_rowsum_f[ncols/nwarps] = {0.0f};
-    float       KQ_max_f[ncols/nwarps];
-    float KQ_max_scale_f[ncols/nwarps] = {0.0f};
-
-#pragma unroll
-    for (int j = 0; j < ncols/nwarps; ++j) {
-        KQ_max_f[j] = -FLT_MAX/2.0f;
-    }
-
-    half2    KQ_rowsum_h2[ncols/nwarps] = {{0.0f, 0.0f}};
-    half2       KQ_max_h2[ncols/nwarps];
-    half2 KQ_max_scale_h2[ncols/nwarps] = {{0.0f, 0.0f}};
-
-#pragma unroll
-    for (int j = 0; j < ncols/nwarps; ++j) {
-        KQ_max_h2[j] = make_half2(-HALF_MAX_HALF, -HALF_MAX_HALF);
-    }
-
-    __shared__ half VKQ[ncols*D_padded]; // Accumulator for final VKQ slice.
-    half2 * VKQ2 = (half2 *) VKQ;
-#pragma unroll
-    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-#pragma unroll
-        for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-            if (i0 + WARP_SIZE > D/2 && i >= D/2) {
-                break;
-            }
-            VKQ2[j*(D_padded/2) + i] = make_half2(0.0f, 0.0f);
-        }
-    }
-
-    // Convert Q to half and apply scale, temporarily store in KQ:
-#pragma unroll
-    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-#pragma unroll
-        for (int i0 = 0; i0 < D; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-            if (i0 + WARP_SIZE > D && i >= D) {
-                break;
-            }
-            KQ[j*D_padded + i] = ic0 + j < ne01 ? Q_f[j*stride_Q + i] * scale : 0.0f;
-        }
-    }
-
-    __syncthreads();
-
-    // Load Q into tensor core fragments/registers since it will be used frequently:
-#pragma unroll
-    for (int i0 = 0; i0 < D; i0 += 16) {
-#pragma unroll
-        for (int j0 = 0; j0 < ncols; j0 += frag_n) {
-            nvcuda::wmma::load_matrix_sync(Q_b[i0/16][j0/frag_n], KQ + j0*D_padded + i0, D_padded);
-        }
-    }
-
-    __syncthreads();
-
-    // Iterate over ne11 == previous tokens:
-    for (int k_VKQ_0 = ip*FATTN_KQ_STRIDE; k_VKQ_0 < ne11; k_VKQ_0 += parallel_blocks*FATTN_KQ_STRIDE) {
-        // Calculate tile of KQ:
-#pragma unroll
-        for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE; i_KQ_0 += KQ_stride_tc) {
-            frag_c_KQ KQ_c[ncols/frag_n];
-#pragma unroll
-            for (int j = 0; j < ncols/frag_n; ++j) {
-                nvcuda::wmma::fill_fragment(KQ_c[j], 0.0f);
-            }
-#pragma unroll
-            for (int k_KQ_0 = 0; k_KQ_0 < D; k_KQ_0 += 16) {
-                frag_a_K K_a;
-                nvcuda::wmma::load_matrix_sync(K_a, K_h + (k_VKQ_0 + i_KQ_0 + frag_m*threadIdx.y)*stride_KV + k_KQ_0, stride_KV);
-#pragma unroll
-                for (int j = 0; j < ncols/frag_n; ++j) {
-                    nvcuda::wmma::mma_sync(KQ_c[j], K_a, Q_b[k_KQ_0/16][j], KQ_c[j]);
-                }
-            }
-#pragma unroll
-            for (int j0 = 0; j0 < ncols; j0 += frag_n) {
-                nvcuda::wmma::store_matrix_sync((KQ_acc_t *) KQ + j0*kqs_padded + i_KQ_0 + frag_m*threadIdx.y, KQ_c[j0/frag_n], kqs_padded, nvcuda::wmma::mem_col_major);
-            }
-        }
-
-        __syncthreads();
-
-        // Calculate softmax for each KQ column using the current max. value.
-        // The divisor is stored in KQ_rowsum and will be applied at the end.
-#pragma unroll
-        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-            const int j = j0 + threadIdx.y;
-
-            if (std::is_same<KQ_acc_t, float>::value) {
-                float KQ_f_tmp[FATTN_KQ_STRIDE / WARP_SIZE];
-#pragma unroll
-                for (int k0 = 0; k0 < FATTN_KQ_STRIDE; k0 += WARP_SIZE) {
-                    const int k = k0 + threadIdx.x;
-
-                    KQ_f_tmp[k0/WARP_SIZE] = KQ_f[j*kqs_padded + k];
-                }
-
-                float KQ_max_new = KQ_max_f[j0/nwarps];
-#pragma unroll
-                for (int k0 = 0; k0 < FATTN_KQ_STRIDE; k0 += WARP_SIZE) {
-                    const int k = k0 + threadIdx.x;
-
-                    KQ_f_tmp[k0/WARP_SIZE] += mask ? __half2float(slopeh*maskh[j*(nb31/sizeof(half)) + k_VKQ_0 + k]) : 0.0f;
-                    KQ_max_new = max(KQ_max_new, KQ_f_tmp[k0/WARP_SIZE]);
-                }
-                KQ_max_new = warp_reduce_max(KQ_max_new);
-
-                const float diff = KQ_max_f[j0/nwarps] - KQ_max_new;
-                KQ_max_scale_f[j0/nwarps] = expf(diff);
-                if (diff <= SOFTMAX_FTZ_THRESHOLD) {
-                    KQ_max_scale_f[j0/nwarps] = 0.0f;
-                }
-                KQ_max_f[j0/nwarps] = KQ_max_new;
-
-                float KQ_rowsum_add = 0.0f;
-#pragma unroll
-                for (int k0 = 0; k0 < FATTN_KQ_STRIDE; k0 += WARP_SIZE) {
-                    const int k = k0 + threadIdx.x;
-
-                    const float diff = KQ_f_tmp[k0/WARP_SIZE] - KQ_max_f[j0/nwarps];
-                    KQ_f_tmp[k0/WARP_SIZE] = expf(diff);
-                    if (diff <= SOFTMAX_FTZ_THRESHOLD) {
-                        KQ_f_tmp[k0/WARP_SIZE] = 0.0f;
-                    }
-                    KQ_rowsum_add += KQ_f_tmp[k0/WARP_SIZE];
-                    KQ[j*(kqar*kqs_padded) + k] = KQ_f_tmp[k0/WARP_SIZE];
-                }
-                KQ_rowsum_add = warp_reduce_sum(KQ_rowsum_add);
-
-                // Scale previous KQ_rowsum to account for a potential increase in KQ_max:
-                KQ_rowsum_f[j0/nwarps] = KQ_max_scale_f[j0/nwarps]*KQ_rowsum_f[j0/nwarps] + KQ_rowsum_add;
-            } else {
-                half2 KQ2_tmp[FATTN_KQ_STRIDE/(2*WARP_SIZE)];
-#pragma unroll
-                for (int k0 = 0; k0 < FATTN_KQ_STRIDE/2; k0 += WARP_SIZE) {
-                    const int k = k0 + threadIdx.x;
-
-                    KQ2_tmp[k0/WARP_SIZE] = KQ2[j*(kqs_padded/2) + k];
-                }
-
-                half2 KQ_max_new = KQ_max_h2[j0/nwarps];
-#pragma unroll
-                for (int k0 = 0; k0 < FATTN_KQ_STRIDE/2; k0 += WARP_SIZE) {
-                    const int k = k0 + threadIdx.x;
-
-                    KQ2_tmp[k0/WARP_SIZE] += mask ? slope2*mask2[(j*ne11 + k_VKQ_0)/2 + k] : make_half2(0.0f, 0.0f);
-                    KQ_max_new = ggml_cuda_hmax2(KQ_max_new, KQ2_tmp[k0/WARP_SIZE]);
-                }
-                KQ_max_new = __half2half2(warp_reduce_max(ggml_cuda_hmax(__low2half(KQ_max_new), __high2half(KQ_max_new))));
-                const half2 diff = KQ_max_h2[j0/nwarps] - KQ_max_new;
-                KQ_max_scale_h2[j0/nwarps] = h2exp(diff);
-                const uint32_t ftz_mask = __hgt2_mask(diff, make_half2(SOFTMAX_FTZ_THRESHOLD, SOFTMAX_FTZ_THRESHOLD));
-                *((uint32_t *) &KQ_max_scale_h2[j0/nwarps]) &= ftz_mask;
-                KQ_max_h2[j0/nwarps] = KQ_max_new;
-
-                half2 KQ_rowsum_add = make_half2(0.0f, 0.0f);
-#pragma unroll
-                for (int k0 = 0; k0 < FATTN_KQ_STRIDE/2; k0 += WARP_SIZE) {
-                    const int k = k0 + threadIdx.x;
-
-                    const half2 diff = KQ2_tmp[k0/WARP_SIZE] - KQ_max_h2[j0/nwarps];
-                    KQ2_tmp[k0/WARP_SIZE] = h2exp(diff);
-                    const uint32_t ftz_mask = __hgt2_mask(diff, make_half2(SOFTMAX_FTZ_THRESHOLD, SOFTMAX_FTZ_THRESHOLD));
-                    *((uint32_t *) &KQ2_tmp[k0/WARP_SIZE]) &= ftz_mask;
-                    KQ_rowsum_add += KQ2_tmp[k0/WARP_SIZE];
-                    KQ2[j*(kqs_padded/2) + k] = KQ2_tmp[k0/WARP_SIZE];
-                }
-                KQ_rowsum_add = warp_reduce_sum(KQ_rowsum_add);
-
-                // Scale previous KQ_rowsum to account for a potential increase in KQ_max:
-                KQ_rowsum_h2[j0/nwarps] = KQ_max_scale_h2[j0/nwarps]*KQ_rowsum_h2[j0/nwarps] + KQ_rowsum_add;
-            }
-        }
-
-        __syncthreads();
-
-        frag_b KQ_b[FATTN_KQ_STRIDE/(VKQ_ratio*16)][ncols/frag_n];
-#pragma unroll
-        for (int j0 = 0; j0 < ncols; j0 += frag_n) {
-#pragma unroll
-            for (int k0 = 0; k0 < FATTN_KQ_STRIDE; k0 += VKQ_ratio*16) {
-                const int k = k0 + (threadIdx.y % VKQ_ratio)*16;
-                nvcuda::wmma::load_matrix_sync(
-                    KQ_b[k0/(VKQ_ratio*16)][j0/frag_n],
-                    KQ + j0*(kqar*kqs_padded) + k,
-                    kqar*kqs_padded);
-            }
-        }
-
-        frag_c_VKQ VKQ_c[D/VKQ_stride][ncols/frag_n];
-#pragma unroll
-        for (int i_VKQ_0 = 0; i_VKQ_0 < D; i_VKQ_0 += VKQ_stride) {
-#pragma unroll
-            for (int j = 0; j < ncols/frag_n; ++j) {
-                nvcuda::wmma::fill_fragment(VKQ_c[i_VKQ_0/VKQ_stride][j], 0.0f);
-            }
-
-#pragma unroll
-            for (int k0 = 0; k0 < FATTN_KQ_STRIDE; k0 += VKQ_ratio*16) {
-                const int k = k0 + (threadIdx.y % VKQ_ratio)*16;
-
-                frag_a_V v_a;
-                nvcuda::wmma::load_matrix_sync(v_a, V_h + (k_VKQ_0 + k)*stride_KV + i_VKQ_0 + frag_m*(threadIdx.y/VKQ_ratio), stride_KV);
-#pragma unroll
-                for (int j = 0; j < ncols/frag_n; ++j) {
-                    nvcuda::wmma::mma_sync(VKQ_c[i_VKQ_0/VKQ_stride][j], v_a, KQ_b[k0/(VKQ_ratio*16)][j], VKQ_c[i_VKQ_0/VKQ_stride][j]);
-                }
-            }
-        }
-
-        __syncthreads();
-
-        const int offset_k = (threadIdx.y % VKQ_ratio) * (ncols*D_padded);
-#pragma unroll
-        for (int i_KQ_0 = 0; i_KQ_0 < D; i_KQ_0 += VKQ_stride) {
-#pragma unroll
-            for (int j0 = 0; j0 < ncols; j0 += frag_n) {
-                nvcuda::wmma::store_matrix_sync(
-                    KQ + offset_k + j0*D_padded + i_KQ_0 + frag_m*(threadIdx.y/VKQ_ratio),
-                    VKQ_c[i_KQ_0/VKQ_stride][j0/frag_n],
-                    D_padded, nvcuda::wmma::mem_col_major);
-            }
-        }
-
-        __syncthreads();
-
-#pragma unroll
-        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-            const int j = j0 + threadIdx.y;
-
-            half2 VKQ_scale;
-            if (std::is_same<KQ_acc_t, float>::value) {
-                VKQ_scale = make_half2(KQ_max_scale_f[j0/nwarps], KQ_max_scale_f[j0/nwarps]);
-            } else {
-                VKQ_scale = KQ_max_scale_h2[j0/nwarps];
-            }
-
-#pragma unroll
-            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
-                const int i = i0 + threadIdx.x;
-                if (i0 + WARP_SIZE > D/2 && i >= D/2) {
-                    break;
-                }
-
-                half2 VKQ_add = make_half2(0.0f, 0.0f);
-#pragma unroll
-                for (int l = 0; l < VKQ_ratio; ++l) {
-                    VKQ_add += KQ2[l*(ncols*D_padded/2) + j*(D_padded/2) + i];
-                }
-                VKQ2[j*(D_padded/2) + i] = VKQ_scale*VKQ2[j*(D_padded/2) + i] + VKQ_add;
-            }
-        }
-
-        __syncthreads();
-    }
-
-#pragma unroll
-    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
-        const int j_VKQ = j0 + threadIdx.y;
-        if (ic0 + j_VKQ >= ne01) {
-            return;
-        }
-        const int j_dst = (ic0 + j_VKQ)*parallel_blocks + ip;
-
-        float KQ_rowsum_j;
-        if (std::is_same<KQ_acc_t, float>::value) {
-            KQ_rowsum_j = KQ_rowsum_f[j0/nwarps];
-        } else {
-            KQ_rowsum_j = __low2float(KQ_rowsum_h2[j0/nwarps]) + __high2float(KQ_rowsum_h2[j0/nwarps]);
-        }
-
-#pragma unroll
-        for (int i0 = 0; i0 < D; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-            if (i0 + WARP_SIZE > D && i >= D) {
-                break;
-            }
-            float dst_val = VKQ[j_VKQ*D_padded + i];
-            if (parallel_blocks == 1) {
-                dst_val /= KQ_rowsum_j;
-            }
-            dst[j_dst*gridDim.y*D + blockIdx.y*D + i] = dst_val;
-        }
-
-        if (parallel_blocks == 1 || threadIdx.x != 0) {
-            continue;
-        }
-
-        float2 dst_meta_val;
-        if (std::is_same<KQ_acc_t, float>::value) {
-            dst_meta_val.x = KQ_max_f[j0/nwarps];
-        } else {
-            dst_meta_val.x = __low2float(KQ_max_h2[j0/nwarps]);
-        }
-        dst_meta_val.y = KQ_rowsum_j;
-        dst_meta[(ic0 + j_VKQ)*gridDim.y*parallel_blocks + blockIdx.y*parallel_blocks + ip] = dst_meta_val;
-    }
-#else
-   NO_DEVICE_CODE;
-#endif // FP16_MMA_AVAILABLE
-}
-
-constexpr int get_max_power_of_2(int x) {
-    return x % 2 == 0 ? 2*get_max_power_of_2(x/2) : 1;
-}
-
-static_assert(get_max_power_of_2(1) == 1, "Test failed.");
-static_assert(get_max_power_of_2(2) == 2, "Test failed.");
-static_assert(get_max_power_of_2(4) == 4, "Test failed.");
-static_assert(get_max_power_of_2(6) == 2, "Test failed.");
-
-// Number of VKQ rows calculated in parallel:
-constexpr int get_VKQ_stride(int D, int nwarps, int frag_m) {
-    return (get_max_power_of_2(D/frag_m) < nwarps ? get_max_power_of_2(D/frag_m) : nwarps)*frag_m;
-}
-
-static_assert(get_VKQ_stride(128, 1, 32) ==  32, "Test failed.");
-static_assert(get_VKQ_stride(128, 2, 32) ==  64, "Test failed.");
-static_assert(get_VKQ_stride(128, 4, 32) == 128, "Test failed.");
-static_assert(get_VKQ_stride( 64, 1, 32) ==  32, "Test failed.");
-static_assert(get_VKQ_stride( 64, 2, 32) ==  64, "Test failed.");
-static_assert(get_VKQ_stride( 64, 4, 32) ==  64, "Test failed.");
-static_assert(get_VKQ_stride( 80, 1, 16) ==  16, "Test failed.");
-static_assert(get_VKQ_stride( 80, 2, 16) ==  16, "Test failed.");
-static_assert(get_VKQ_stride( 80, 4, 16) ==  16, "Test failed.");
-
-template <int D, int cols_per_block, typename KQ_acc_t>
-void ggml_cuda_flash_attn_ext_wmma_f16_case(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * Q = dst->src[0];
-
-    constexpr int nwarps = 4;
-
-    constexpr int frag_m = cols_per_block == 8 && D % 32 == 0 ? 32 : 16;
-    const int blocks_num_pb1 = ((Q->ne[1] + cols_per_block - 1) / cols_per_block)*Q->ne[2]*Q->ne[3];
-    const int nsm = ggml_cuda_info().devices[ggml_cuda_get_device()].nsm;
-
-    if (4*blocks_num_pb1 < 2*nsm) {
-        constexpr int parallel_blocks = 4;
-        fattn_kernel_t fattn_kernel = flash_attn_ext_f16<D, cols_per_block, nwarps, get_VKQ_stride(D, nwarps, frag_m), parallel_blocks, KQ_acc_t>;
-        launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
-        return;
-    }
-    if (2*blocks_num_pb1 < 2*nsm) {
-        constexpr int parallel_blocks = 2;
-        fattn_kernel_t fattn_kernel = flash_attn_ext_f16<D, cols_per_block, nwarps, get_VKQ_stride(D, nwarps, frag_m), parallel_blocks, KQ_acc_t>;
-        launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
-        return;
-    }
-    constexpr int parallel_blocks = 1;
-    fattn_kernel_t fattn_kernel = flash_attn_ext_f16<D, cols_per_block, nwarps, get_VKQ_stride(D, nwarps, frag_m), parallel_blocks, KQ_acc_t>;
-    launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
-}
-
-#define DECL_FATTN_WMMA_F16_CASE(D, cols_per_block, KQ_acc_t)                         \
-    template void ggml_cuda_flash_attn_ext_wmma_f16_case                              \
-    <D, cols_per_block, KQ_acc_t>(ggml_backend_cuda_context & ctx, ggml_tensor * dst) \
-
-extern DECL_FATTN_WMMA_F16_CASE( 64, 16, float);
-extern DECL_FATTN_WMMA_F16_CASE( 80, 16, float);
-extern DECL_FATTN_WMMA_F16_CASE( 96, 16, float);
-extern DECL_FATTN_WMMA_F16_CASE(112, 16, float);
-extern DECL_FATTN_WMMA_F16_CASE(128, 16, float);
-extern DECL_FATTN_WMMA_F16_CASE(256, 16, float);
-
-extern DECL_FATTN_WMMA_F16_CASE( 64, 32, float);
-extern DECL_FATTN_WMMA_F16_CASE( 80, 32, float);
-extern DECL_FATTN_WMMA_F16_CASE( 96, 32, float);
-extern DECL_FATTN_WMMA_F16_CASE(112, 32, float);
-extern DECL_FATTN_WMMA_F16_CASE(128, 32, float);
-// extern DECL_FATTN_WMMA_F16_CASE(256, 16, float);
-
-extern DECL_FATTN_WMMA_F16_CASE( 64,  8, half);
-extern DECL_FATTN_WMMA_F16_CASE( 96,  8, half);
-extern DECL_FATTN_WMMA_F16_CASE(128,  8, half);
-extern DECL_FATTN_WMMA_F16_CASE(256,  8, half);
-
-extern DECL_FATTN_WMMA_F16_CASE( 64, 16, half);
-extern DECL_FATTN_WMMA_F16_CASE( 80, 16, half);
-extern DECL_FATTN_WMMA_F16_CASE( 96, 16, half);
-extern DECL_FATTN_WMMA_F16_CASE(112, 16, half);
-extern DECL_FATTN_WMMA_F16_CASE(128, 16, half);
-extern DECL_FATTN_WMMA_F16_CASE(256, 16, half);
-
-extern DECL_FATTN_WMMA_F16_CASE( 64, 32, half);
-extern DECL_FATTN_WMMA_F16_CASE( 80, 32, half);
-extern DECL_FATTN_WMMA_F16_CASE( 96, 32, half);
-extern DECL_FATTN_WMMA_F16_CASE(112, 32, half);
-extern DECL_FATTN_WMMA_F16_CASE(128, 32, half);
-extern DECL_FATTN_WMMA_F16_CASE(256, 16, half);
diff --git a/ggml-cuda/fattn.cu b/ggml-cuda/fattn.cu
deleted file mode 100644 (file)
index 38d30b2..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-#include "common.cuh"
-#include "fattn-common.cuh"
-#include "fattn-tile-f16.cuh"
-#include "fattn-tile-f32.cuh"
-#include "fattn-vec-f16.cuh"
-#include "fattn-vec-f32.cuh"
-#include "fattn-wmma-f16.cuh"
-#include "fattn.cuh"
-
-#include <cstdint>
-
-static void ggml_cuda_flash_attn_ext_wmma_f16(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * KQV = dst;
-    const ggml_tensor * Q   = dst->src[0];
-
-    const int32_t precision = KQV->op_params[2];
-
-    if (precision != GGML_PREC_DEFAULT) {
-        if (Q->ne[1] <= 32 || Q->ne[0] > 128) {
-            constexpr int cols_per_block = 16;
-            switch (Q->ne[0]) {
-                case 64:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case< 64, cols_per_block, float>(ctx, dst);
-                    break;
-                case 80:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case< 80, cols_per_block, float>(ctx, dst);
-                    break;
-                case 96:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case< 96, cols_per_block, float>(ctx, dst);
-                    break;
-                case 112:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case<112, cols_per_block, float>(ctx, dst);
-                    break;
-                case 128:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, float>(ctx, dst);
-                    break;
-                case 256:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case<256, cols_per_block, float>(ctx, dst);
-                    break;
-                default:
-                    GGML_ASSERT(false);
-                    break;
-            }
-        } else {
-            constexpr int cols_per_block = 32;
-            switch (Q->ne[0]) {
-                case 64:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case< 64, cols_per_block, float>(ctx, dst);
-                    break;
-                case 80:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case< 80, cols_per_block, float>(ctx, dst);
-                    break;
-                case 96:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case< 96, cols_per_block, float>(ctx, dst);
-                    break;
-                case 112:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case<112, cols_per_block, float>(ctx, dst);
-                    break;
-                case 128:
-                    ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, float>(ctx, dst);
-                    break;
-                // case 256:
-                //     ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, float>(ctx, dst);
-                //     break;
-                default:
-                    GGML_ASSERT(false);
-                    break;
-            }
-        }
-        return;
-    }
-
-    if (Q->ne[1] <= 8 && Q->ne[0] % WARP_SIZE == 0) {
-        constexpr int cols_per_block = 8;
-        switch (Q->ne[0]) {
-            case 64:
-                ggml_cuda_flash_attn_ext_wmma_f16_case< 64, cols_per_block, half>(ctx, dst);
-                break;
-            case 96:
-                ggml_cuda_flash_attn_ext_wmma_f16_case< 96, cols_per_block, half>(ctx, dst);
-                break;
-            case 128:
-                ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, half>(ctx, dst);
-                break;
-            case 256:
-                ggml_cuda_flash_attn_ext_wmma_f16_case<256, cols_per_block, half>(ctx, dst);
-                break;
-            default:
-                GGML_ASSERT(false);
-                break;
-        }
-        return;
-    }
-
-    if (Q->ne[1] <= 32) {
-        constexpr int cols_per_block = 16;
-        switch (Q->ne[0]) {
-            case 64:
-                ggml_cuda_flash_attn_ext_wmma_f16_case< 64, cols_per_block, half>(ctx, dst);
-                break;
-            case 80:
-                ggml_cuda_flash_attn_ext_wmma_f16_case< 80, cols_per_block, half>(ctx, dst);
-                break;
-            case 96:
-                ggml_cuda_flash_attn_ext_wmma_f16_case< 96, cols_per_block, half>(ctx, dst);
-                break;
-            case 112:
-                ggml_cuda_flash_attn_ext_wmma_f16_case<112, cols_per_block, half>(ctx, dst);
-                break;
-            case 128:
-                ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, half>(ctx, dst);
-                break;
-            case 256:
-                ggml_cuda_flash_attn_ext_wmma_f16_case<256, cols_per_block, half>(ctx, dst);
-                break;
-            default:
-                GGML_ASSERT(false);
-                break;
-        }
-        return;
-    }
-
-    constexpr int cols_per_block = 32;
-    switch (Q->ne[0]) {
-        case 64:
-            ggml_cuda_flash_attn_ext_wmma_f16_case< 64, cols_per_block, half>(ctx, dst);
-            break;
-        case 80:
-            ggml_cuda_flash_attn_ext_wmma_f16_case< 80, cols_per_block, half>(ctx, dst);
-            break;
-        case 96:
-            ggml_cuda_flash_attn_ext_wmma_f16_case< 96, cols_per_block, half>(ctx, dst);
-            break;
-        case 112:
-            ggml_cuda_flash_attn_ext_wmma_f16_case<112, cols_per_block, half>(ctx, dst);
-            break;
-        case 128:
-            ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, half>(ctx, dst);
-            break;
-        case 256:
-            ggml_cuda_flash_attn_ext_wmma_f16_case<256, cols_per_block, half>(ctx, dst);
-            break;
-        default:
-            GGML_ASSERT(false);
-            break;
-    }
-}
-#define FATTN_VEC_F16_CASE(D, type_K, type_V)                               \
-    if (Q->ne[0] == (D) && K->type == (type_K) && V->type == (type_V)) {    \
-        ggml_cuda_flash_attn_ext_vec_f16_case<D, type_K, type_V>(ctx, dst); \
-        return;                                                             \
-    }                                                                       \
-
-static void ggml_cuda_flash_attn_ext_vec_f16(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    ggml_tensor * Q = dst->src[1];
-    ggml_tensor * K = dst->src[1];
-    ggml_tensor * V = dst->src[2];
-
-#ifdef GGML_CUDA_FA_ALL_QUANTS
-    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_0)
-    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_1)
-    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_0)
-    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_1)
-    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q8_0)
-    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16 )
-
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_0)
-
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_1)
-
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_0)
-
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_1)
-
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q8_0)
-
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_F16)
-
-    FATTN_VEC_F16_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16)
-#else
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0)
-
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0)
-
-    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16)
-    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_F16)
-    FATTN_VEC_F16_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16)
-#endif // GGML_CUDA_FA_ALL_QUANTS
-
-    on_no_fattn_vec_case(Q->ne[0]);
-}
-
-#define FATTN_VEC_F32_CASE(D, type_K, type_V)                               \
-    if (Q->ne[0] == (D) && K->type == (type_K) && V->type == (type_V)) {    \
-        ggml_cuda_flash_attn_ext_vec_f32_case<D, type_K, type_V>(ctx, dst); \
-        return;                                                             \
-    }                                                                       \
-
-static void ggml_cuda_flash_attn_ext_vec_f32(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    ggml_tensor * Q = dst->src[1];
-    ggml_tensor * K = dst->src[1];
-    ggml_tensor * V = dst->src[2];
-
-#ifdef GGML_CUDA_FA_ALL_QUANTS
-    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_0)
-    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_1)
-    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_0)
-    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_1)
-    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q8_0)
-    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16)
-
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_0)
-
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_1)
-
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_0)
-
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_1)
-
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q8_0)
-
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_F16)
-
-    FATTN_VEC_F32_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16)
-#else
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0)
-
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0)
-
-    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16)
-    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_F16)
-    FATTN_VEC_F32_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16)
-#endif // GGML_CUDA_FA_ALL_QUANTS
-
-    on_no_fattn_vec_case(Q->ne[0]);
-}
-
-void ggml_cuda_flash_attn_ext(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * KQV = dst;
-    const ggml_tensor * Q   = dst->src[0];
-
-    ggml_cuda_set_device(ctx.device);
-    const int cc = ggml_cuda_info().devices[ggml_cuda_get_device()].cc;
-    const int32_t precision = KQV->op_params[2];
-
-    // On AMD the tile kernels perform poorly, use the vec kernel instead:
-    if (cc >= CC_OFFSET_AMD) {
-        if (precision == GGML_PREC_DEFAULT && fast_fp16_available(cc)) {
-            ggml_cuda_flash_attn_ext_vec_f16(ctx, dst);
-        } else {
-            ggml_cuda_flash_attn_ext_vec_f32(ctx, dst);
-        }
-        return;
-    }
-
-    if (!fast_fp16_available(cc)) {
-        if (Q->ne[1] <= 8) {
-            ggml_cuda_flash_attn_ext_vec_f32(ctx, dst);
-        } else {
-            ggml_cuda_flash_attn_ext_tile_f32(ctx, dst);
-        }
-        return;
-    }
-
-    if (!fp16_mma_available(cc)) {
-        if (Q->ne[1] <= 8) {
-            ggml_cuda_flash_attn_ext_vec_f16(ctx, dst);
-        } else {
-            ggml_cuda_flash_attn_ext_tile_f16(ctx, dst);
-        }
-        return;
-    }
-
-    if (Q->ne[1] == 1 && Q->ne[0] % (2*WARP_SIZE) == 0) {
-        if (precision == GGML_PREC_DEFAULT) {
-            ggml_cuda_flash_attn_ext_vec_f16(ctx, dst);
-            return;
-        } else if(Q->ne[0] <= 128) {
-            ggml_cuda_flash_attn_ext_vec_f32(ctx, dst);
-            return;
-        }
-    }
-
-    ggml_cuda_flash_attn_ext_wmma_f16(ctx, dst);
-}
diff --git a/ggml-cuda/fattn.cuh b/ggml-cuda/fattn.cuh
deleted file mode 100644 (file)
index ad3ca7a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "common.cuh"
-
-void ggml_cuda_flash_attn_ext(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/getrows.cu b/ggml-cuda/getrows.cu
deleted file mode 100644 (file)
index 55af195..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-#include "getrows.cuh"
-#include "dequantize.cuh"
-
-template<int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
-static __global__ void k_get_rows(
-            const void * src0, const int32_t * src1, dst_t * dst,
-            int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/
-            /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/
-            /*size_t s0,*/ size_t s1, size_t s2, size_t s3,
-            /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03,
-            size_t s10, size_t s11, size_t s12/*, size_t s13*/) {
-
-    const int i00 = (blockIdx.x*blockDim.x + threadIdx.x)*2;
-    const int i10 = blockDim.y*blockIdx.y + threadIdx.y;
-    const int i11 = (blockIdx.z*blockDim.z + threadIdx.z)/ne12;
-    const int i12 = (blockIdx.z*blockDim.z + threadIdx.z)%ne12;
-
-    if (i00 >= ne00) {
-        return;
-    }
-
-    const int i01 = src1[i10*s10 + i11*s11 + i12*s12];
-
-    dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3;
-    const void * src0_row = (const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03;
-
-    const int ib = i00/qk; // block index
-    const int iqs = (i00%qk)/qr; // quant index
-    const int iybs = i00 - i00%qk; // dst block start index
-    const int y_offset = qr == 1 ? 1 : qk/2;
-
-    // dequantize
-    dfloat2 v;
-    dequantize_kernel(src0_row, ib, iqs, v);
-
-    dst_row[iybs + iqs + 0]        = v.x;
-    dst_row[iybs + iqs + y_offset] = v.y;
-}
-
-template<typename src0_t, typename dst_t>
-static __global__ void k_get_rows_float(
-            const src0_t * src0, const int32_t * src1, dst_t * dst,
-            int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/
-            /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/
-            /*size_t s0,*/ size_t s1, size_t s2, size_t s3,
-            /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03,
-            size_t s10, size_t s11, size_t s12/*, size_t s13*/) {
-
-    const int i00 = blockIdx.x*blockDim.x + threadIdx.x;
-    const int i10 = blockDim.y*blockIdx.y + threadIdx.y;
-    const int i11 = (blockIdx.z*blockDim.z + threadIdx.z)/ne12;
-    const int i12 = (blockIdx.z*blockDim.z + threadIdx.z)%ne12;
-
-    if (i00 >= ne00) {
-        return;
-    }
-
-    const int i01 = src1[i10*s10 + i11*s11 + i12*s12];
-
-    dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3;
-    const src0_t * src0_row = (const src0_t *)((const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03);
-
-    dst_row[i00] = src0_row[i00];
-}
-
-template<int qk, int qr, dequantize_kernel_t dq>
-static void get_rows_cuda(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst,
-                            const void * src0_dd, const int32_t * src1_dd, float * dst_dd, cudaStream_t stream) {
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const dim3 block_dims(CUDA_GET_ROWS_BLOCK_SIZE, 1, 1);
-    const int block_num_x = (ne00 + 2*CUDA_GET_ROWS_BLOCK_SIZE - 1) / (2*CUDA_GET_ROWS_BLOCK_SIZE);
-    const dim3 block_nums(block_num_x, ne10, ne11*ne12);
-
-    // strides in elements
-    //const size_t s0 = nb0 / ggml_element_size(dst);
-    const size_t s1 = nb1 / ggml_element_size(dst);
-    const size_t s2 = nb2 / ggml_element_size(dst);
-    const size_t s3 = nb3 / ggml_element_size(dst);
-
-    const size_t s10 = nb10 / ggml_element_size(src1);
-    const size_t s11 = nb11 / ggml_element_size(src1);
-    const size_t s12 = nb12 / ggml_element_size(src1);
-    //const size_t s13 = nb13 / ggml_element_size(src1);
-
-    GGML_ASSERT(ne00 % 2 == 0);
-
-    k_get_rows<qk, qr, dq><<<block_nums, block_dims, 0, stream>>>(
-            src0_dd, src1_dd, dst_dd,
-            ne00, /*ne01, ne02, ne03,*/
-            /*ne10, ne11,*/ ne12, /*ne13,*/
-            /* s0,*/ s1, s2, s3,
-            /* nb00,*/ nb01, nb02, nb03,
-            s10, s11, s12/*, s13*/);
-
-    GGML_UNUSED(dst);
-}
-
-template<typename src0_t>
-static void get_rows_cuda_float(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst,
-                                const src0_t * src0_dd, const int32_t * src1_dd, float * dst_dd, cudaStream_t stream) {
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const dim3 block_dims(CUDA_GET_ROWS_BLOCK_SIZE, 1, 1);
-    const int block_num_x = (ne00 + CUDA_GET_ROWS_BLOCK_SIZE - 1) / CUDA_GET_ROWS_BLOCK_SIZE;
-    const dim3 block_nums(block_num_x, ne10, ne11*ne12);
-
-    // strides in elements
-    //const size_t s0 = nb0 / ggml_element_size(dst);
-    const size_t s1 = nb1 / ggml_element_size(dst);
-    const size_t s2 = nb2 / ggml_element_size(dst);
-    const size_t s3 = nb3 / ggml_element_size(dst);
-
-    const size_t s10 = nb10 / ggml_element_size(src1);
-    const size_t s11 = nb11 / ggml_element_size(src1);
-    const size_t s12 = nb12 / ggml_element_size(src1);
-    //const size_t s13 = nb13 / ggml_element_size(src1);
-
-    k_get_rows_float<<<block_nums, block_dims, 0, stream>>>(
-            src0_dd, src1_dd, dst_dd,
-            ne00, /*ne01, ne02, ne03,*/
-            /*ne10, ne11,*/ ne12, /*ne13,*/
-            /* s0,*/ s1, s2, s3,
-            /* nb00,*/ nb01, nb02, nb03,
-            s10, s11, s12/*, s13*/);
-
-    GGML_UNUSED(dst);
-}
-
-void ggml_cuda_op_get_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const ggml_tensor * src1 = dst->src[1];
-    const float * src0_d = (const float *)src0->data;
-    const float * src1_d = (const float *)src1->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-
-    GGML_ASSERT(src1->type == GGML_TYPE_I32);
-    GGML_ASSERT(dst->type == GGML_TYPE_F32);
-
-    GGML_ASSERT(src0->nb[0] == ggml_type_size(src0->type));
-    GGML_ASSERT(src1->nb[0] == ggml_type_size(src1->type));
-    GGML_ASSERT(dst->nb[0] == ggml_type_size(dst->type));
-
-    const int32_t * src1_i32 = (const int32_t *) src1_d;
-
-    switch (src0->type) {
-        case GGML_TYPE_F16:
-            get_rows_cuda_float(src0, src1, dst, (const half *)src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_F32:
-            get_rows_cuda_float(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_Q4_0:
-            get_rows_cuda<QK4_0, QR4_0, dequantize_q4_0>(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_Q4_1:
-            get_rows_cuda<QK4_1, QR4_1, dequantize_q4_1>(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_Q5_0:
-            get_rows_cuda<QK5_0, QR5_0, dequantize_q5_0>(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_Q5_1:
-            get_rows_cuda<QK5_1, QR5_1, dequantize_q5_1>(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_Q8_0:
-            get_rows_cuda<QK8_0, QR8_0, dequantize_q8_0>(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        default:
-            // TODO: k-quants
-            fprintf(stderr, "%s: unsupported type: %s\n", __func__, ggml_type_name(src0->type));
-            GGML_ASSERT(false);
-            break;
-    }
-}
diff --git a/ggml-cuda/getrows.cuh b/ggml-cuda/getrows.cuh
deleted file mode 100644 (file)
index bbf1302..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_GET_ROWS_BLOCK_SIZE 256
-
-void ggml_cuda_op_get_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/im2col.cu b/ggml-cuda/im2col.cu
deleted file mode 100644 (file)
index 3d0d8d4..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "im2col.cuh"
-
-template <typename T>
-static  __global__ void im2col_kernel(
-        const float * x, T * dst, int64_t batch_offset,
-        int64_t offset_delta, int64_t IC, int64_t IW, int64_t IH, int64_t OH, int64_t OW, int64_t KW, int64_t KH, int64_t pelements, int64_t CHW,
-        int s0, int s1, int p0, int p1, int d0, int d1) {
-    const int64_t i = threadIdx.x + blockIdx.x * blockDim.x;
-    if (i >= pelements) {
-        return;
-    }
-
-    const int64_t  ksize = OW * (KH > 1 ? KW : 1);
-    const int64_t  kx = i / ksize;
-    const int64_t  kd = kx * ksize;
-    const int64_t  ky = (i - kd) / OW;
-    const int64_t  ix = i % OW;
-
-    const int64_t  oh = blockIdx.y;
-    const int64_t  batch = blockIdx.z / IC;
-    const int64_t  ic = blockIdx.z % IC;
-
-    const int64_t iiw = ix * s0 + kx * d0 - p0;
-    const int64_t iih = oh * s1 + ky * d1 - p1;
-
-    const int64_t offset_dst =
-        ((batch * OH + oh) * OW + ix) * CHW +
-        (ic * (KW * KH) + ky * KW + kx);
-
-    if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
-        dst[offset_dst] = 0.0f;
-    } else {
-        const int64_t offset_src = ic * offset_delta + batch * batch_offset;
-        dst[offset_dst] = x[offset_src + iih * IW + iiw];
-    }
-}
-
-template <typename T>
-static void im2col_cuda(const float * x, T* dst,
-    int64_t IW, int64_t IH, int64_t OW, int64_t OH, int64_t KW, int64_t KH, int64_t IC,
-    int64_t batch, int64_t batch_offset, int64_t offset_delta,
-    int s0,int s1,int p0,int p1,int d0,int d1, cudaStream_t stream) {
-    const int parallel_elements = OW * KW * KH;
-    const int num_blocks = (parallel_elements + CUDA_IM2COL_BLOCK_SIZE - 1) / CUDA_IM2COL_BLOCK_SIZE;
-    dim3 block_nums(num_blocks, OH, batch * IC);
-    im2col_kernel<<<block_nums, CUDA_IM2COL_BLOCK_SIZE, 0, stream>>>(x, dst, batch_offset, offset_delta, IC, IW, IH, OH, OW, KW, KH, parallel_elements, (IC * KH * KW), s0, s1, p0, p1, d0, d1);
-}
-
-static void im2col_cuda_f16(const float * x, half * dst,
-    int64_t IW, int64_t IH, int64_t OW, int64_t OH, int64_t KW, int64_t KH, int64_t IC,
-    int64_t batch, int64_t batch_offset, int64_t offset_delta,
-    int s0,int s1,int p0,int p1,int d0,int d1, cudaStream_t stream) {
-
-    im2col_cuda<half>(x, dst, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, offset_delta, s0, s1, p0, p1, d0, d1, stream);
-}
-
-static void im2col_cuda_f32(const float * x, float * dst,
-    int64_t IW, int64_t IH, int64_t OW, int64_t OH, int64_t KW, int64_t KH, int64_t IC,
-    int64_t batch, int64_t batch_offset, int64_t offset_delta,
-    int s0,int s1,int p0,int p1,int d0,int d1, cudaStream_t stream) {
-
-    im2col_cuda<float>(x, dst, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, offset_delta, s0, s1, p0, p1, d0, d1, stream);
-}
-
-void ggml_cuda_op_im2col(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const ggml_tensor * src1 = dst->src[1];
-    const float * src1_d = (const float *)src1->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32);
-
-    const int32_t s0 = ((const int32_t*)(dst->op_params))[0];
-    const int32_t s1 = ((const int32_t*)(dst->op_params))[1];
-    const int32_t p0 = ((const int32_t*)(dst->op_params))[2];
-    const int32_t p1 = ((const int32_t*)(dst->op_params))[3];
-    const int32_t d0 = ((const int32_t*)(dst->op_params))[4];
-    const int32_t d1 = ((const int32_t*)(dst->op_params))[5];
-
-    const bool is_2D = ((const int32_t*)(dst->op_params))[6] == 1;
-
-    const int64_t IC = src1->ne[is_2D ? 2 : 1];
-    const int64_t IH = is_2D ? src1->ne[1] : 1;
-    const int64_t IW =         src1->ne[0];
-
-    const int64_t KH = is_2D ? src0->ne[1] : 1;
-    const int64_t KW =         src0->ne[0];
-
-    const int64_t OH = is_2D ? dst->ne[2] : 1;
-    const int64_t OW =         dst->ne[1];
-
-    const size_t delta_offset = src1->nb[is_2D ? 2 : 1] / 4; // nb is byte offset, src is type float32
-    const int64_t batch = src1->ne[3];
-    const size_t batch_offset = src1->nb[3] / 4; // nb is byte offset, src is type float32
-
-    if(dst->type == GGML_TYPE_F16) {
-        im2col_cuda_f16(src1_d, (half *) dst_d, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, delta_offset, s0, s1, p0, p1, d0, d1, stream);
-    } else {
-        im2col_cuda_f32(src1_d, (float *) dst_d, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, delta_offset, s0, s1, p0, p1, d0, d1, stream);
-    }
-}
diff --git a/ggml-cuda/im2col.cuh b/ggml-cuda/im2col.cuh
deleted file mode 100644 (file)
index 1ce8fae..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_IM2COL_BLOCK_SIZE 256
-
-void ggml_cuda_op_im2col(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/mma.cuh b/ggml-cuda/mma.cuh
deleted file mode 100644 (file)
index 63e07fb..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-#include "common.cuh"
-
-struct mma_int_A_I16K4 {
-    static constexpr int I  = 16;
-    static constexpr int K  = 4;
-    static constexpr int ne = 2;
-
-    int x[ne] = {0};
-
-    static __device__ __forceinline__ int get_i(const int l) {
-        const int ret = (l%2) * (I/2) + threadIdx.x / K;
-        GGML_CUDA_ASSUME(ret >= 0);
-        GGML_CUDA_ASSUME(ret <  I);
-        return ret;
-    }
-
-    static __device__ __forceinline__ int get_k(const int /* l */) {
-        const int ret = threadIdx.x % K;
-        GGML_CUDA_ASSUME(ret >= 0);
-        GGML_CUDA_ASSUME(ret <  K);
-        return ret;
-    }
-};
-
-struct mma_int_A_I16K8 {
-    static constexpr int I  = 16;
-    static constexpr int K  = 8;
-    static constexpr int ne = 4;
-
-    int x[ne] = {0};
-
-    static __device__ __forceinline__ int get_i(const int l) {
-        const int ret = (l%2) * (I/2) + threadIdx.x / (K/2);
-        GGML_CUDA_ASSUME(ret >= 0);
-        GGML_CUDA_ASSUME(ret <  I);
-        return ret;
-    }
-
-    static __device__ __forceinline__ int get_k(const int l) {
-        const int ret = (l/2) * (K/2) + threadIdx.x % (K/2);
-        GGML_CUDA_ASSUME(ret >= 0);
-        GGML_CUDA_ASSUME(ret <  K);
-        return ret;
-    }
-};
-
-struct mma_int_B_J8K4 {
-    static constexpr int J  = 8;
-    static constexpr int K  = 4;
-    static constexpr int ne = 1;
-
-    int x[ne] = {0};
-
-    static __device__ __forceinline__ int get_j(const int /* l */) {
-        const int ret = threadIdx.x / K;
-        GGML_CUDA_ASSUME(ret >= 0);
-        GGML_CUDA_ASSUME(ret <  J);
-        return ret;
-    }
-
-    static __device__ __forceinline__ int get_k(const int /* l */) {
-        const int ret = threadIdx.x % K;
-        GGML_CUDA_ASSUME(ret >= 0);
-        GGML_CUDA_ASSUME(ret <  K);
-        return ret;
-    }
-};
-
-struct mma_int_B_J8K8 {
-    static constexpr int J  = 8;
-    static constexpr int K  = 8;
-    static constexpr int ne = 2;
-
-    int x[ne] = {0};
-
-    static __device__ __forceinline__ int get_j(const int /* l */) {
-        const int ret = threadIdx.x / (K/2);
-        GGML_CUDA_ASSUME(ret >= 0);
-        GGML_CUDA_ASSUME(ret <  J);
-        return ret;
-    }
-
-    static __device__ __forceinline__ int get_k(const int l) {
-        const int ret = l * (K/2) + threadIdx.x % (K/2);
-        GGML_CUDA_ASSUME(ret >= 0);
-        GGML_CUDA_ASSUME(ret <  K);
-        return ret;
-    }
-};
-
-struct mma_int_C_I16J8 {
-    static constexpr int I  = 16;
-    static constexpr int J  = 8;
-    static constexpr int ne = 4;
-
-    int x[ne] = {0};
-
-    static __device__ __forceinline__ int get_i(const int l) {
-        const int ret = (l/2) * (I/2) + threadIdx.x / (J/2);
-        GGML_CUDA_ASSUME(ret >= 0);
-        GGML_CUDA_ASSUME(ret <  I);
-        return ret;
-    }
-
-    static __device__ __forceinline__ int get_j(const int l) {
-        const int ret = 2 * (threadIdx.x % (J/2)) + l%2;
-        GGML_CUDA_ASSUME(ret >= 0);
-        GGML_CUDA_ASSUME(ret <  J);
-        return ret;
-    }
-
-    __device__ __forceinline__ void mma_K4(const mma_int_A_I16K4 & mma_A, const mma_int_B_J8K4 & mma_B) {
-#ifdef INT8_MMA_AVAILABLE
-#if __CUDA_ARCH__ >= CC_AMPERE
-        asm("mma.sync.aligned.m16n8k16.row.col.s32.s8.s8.s32 {%0, %1, %2, %3}, {%4, %5}, {%6}, {%0, %1, %2, %3};"
-            : "+r"(x[0]), "+r"(x[1]), "+r"(x[2]), "+r"(x[3])
-            : "r"(mma_A.x[0]), "r"(mma_A.x[1]), "r"(mma_B.x[0]));
-#else
-        // On Turing m16n8k16 mma is not available, use 2x m8n8k16 mma instead:
-        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
-            : "+r"(x[0]), "+r"(x[1])
-            : "r"(mma_A.x[0]), "r"(mma_B.x[0]));
-        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
-            : "+r"(x[2]), "+r"(x[3])
-            : "r"(mma_A.x[1]), "r"(mma_B.x[0]));
-#endif // __CUDA_ARCH__ >= CC_AMPERE
-#else
-        GGML_UNUSED(mma_A);
-        GGML_UNUSED(mma_B);
-        NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-    }
-
-    __device__ __forceinline__ void mma_K8(const mma_int_A_I16K8 & mma_A, const mma_int_B_J8K8 & mma_B) {
-#ifdef INT8_MMA_AVAILABLE
-#if __CUDA_ARCH__ >= CC_AMPERE
-        asm("mma.sync.aligned.m16n8k32.row.col.s32.s8.s8.s32 {%0, %1, %2, %3}, {%4, %5, %6, %7}, {%8, %9}, {%0, %1, %2, %3};"
-            : "+r"(x[0]), "+r"(x[1]), "+r"(x[2]), "+r"(x[3])
-            : "r"(mma_A.x[0]), "r"(mma_A.x[1]), "r"(mma_A.x[2]), "r"(mma_A.x[3]), "r"(mma_B.x[0]), "r"(mma_B.x[1]));
-#else
-        // On Turing m16n8k32 mma is not available, use 4x m8n8k16 mma instead:
-        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
-            : "+r"(x[0]), "+r"(x[1])
-            : "r"(mma_A.x[0]), "r"(mma_B.x[0]));
-        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
-            : "+r"(x[2]), "+r"(x[3])
-            : "r"(mma_A.x[1]), "r"(mma_B.x[0]));
-        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
-            : "+r"(x[0]), "+r"(x[1])
-            : "r"(mma_A.x[2]), "r"(mma_B.x[1]));
-        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
-            : "+r"(x[2]), "+r"(x[3])
-            : "r"(mma_A.x[3]), "r"(mma_B.x[1]));
-#endif // __CUDA_ARCH__ >= CC_AMPERE
-#else
-        GGML_UNUSED(mma_A);
-        GGML_UNUSED(mma_B);
-        NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-    }
-};
diff --git a/ggml-cuda/mmq.cu b/ggml-cuda/mmq.cu
deleted file mode 100644 (file)
index 1d6b9e6..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#include "mmq.cuh"
-
-void ggml_cuda_op_mul_mat_q(
-    ggml_backend_cuda_context & ctx,
-    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
-    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
-    const int64_t src1_padded_row_size, cudaStream_t stream) {
-
-    const int64_t ne00 = src0->ne[0];
-
-    const int64_t nb01 = src0->nb[1];
-
-    const int64_t ne10 = src1->ne[0];
-    const int64_t ne11 = src1->ne[1];
-    GGML_ASSERT(ne10 % QK8_1 == 0);
-
-    const int64_t ne0 = dst->ne[0];
-
-    const int64_t row_diff = row_high - row_low;
-    const int64_t stride00 = nb01 / ggml_type_size(src0->type);
-
-    int id = ggml_cuda_get_device();
-    const int compute_capability = ggml_cuda_info().devices[id].cc;
-
-    // the main device has a larger memory buffer to hold the results from all GPUs
-    // nrows_dst == nrows of the matrix that the kernel writes into
-    const int64_t nrows_dst = id == ctx.device ? ne0 : row_diff;
-
-    const mmq_args args = {src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stride00, src1_padded_row_size, src1_ncols, ne11, nrows_dst};
-
-    switch (src0->type) {
-        case GGML_TYPE_Q4_0:
-            mul_mat_q_case<GGML_TYPE_Q4_0>(args, stream);
-            break;
-        case GGML_TYPE_Q4_1:
-            mul_mat_q_case<GGML_TYPE_Q4_1>(args, stream);
-            break;
-        case GGML_TYPE_Q5_0:
-            mul_mat_q_case<GGML_TYPE_Q5_0>(args, stream);
-            break;
-        case GGML_TYPE_Q5_1:
-            mul_mat_q_case<GGML_TYPE_Q5_1>(args, stream);
-            break;
-        case GGML_TYPE_Q8_0:
-            mul_mat_q_case<GGML_TYPE_Q8_0>(args, stream);
-            break;
-        case GGML_TYPE_Q2_K:
-            mul_mat_q_case<GGML_TYPE_Q2_K>(args, stream);
-            break;
-        case GGML_TYPE_Q3_K:
-            mul_mat_q_case<GGML_TYPE_Q3_K>(args, stream);
-            break;
-        case GGML_TYPE_Q4_K:
-            mul_mat_q_case<GGML_TYPE_Q4_K>(args, stream);
-            break;
-        case GGML_TYPE_Q5_K:
-            mul_mat_q_case<GGML_TYPE_Q5_K>(args, stream);
-            break;
-        case GGML_TYPE_Q6_K:
-            mul_mat_q_case<GGML_TYPE_Q6_K>(args, stream);
-            break;
-        default:
-            GGML_ASSERT(false);
-            break;
-    }
-
-    GGML_UNUSED(src1);
-    GGML_UNUSED(dst);
-    GGML_UNUSED(src1_ddf_i);
-}
-
-bool ggml_cuda_supports_mmq(enum ggml_type type) {
-    switch (type) {
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-            return true;
-        default:
-            return false;
-    }
-}
diff --git a/ggml-cuda/mmq.cuh b/ggml-cuda/mmq.cuh
deleted file mode 100644 (file)
index 6d57974..0000000
+++ /dev/null
@@ -1,2138 +0,0 @@
-#pragma once
-
-#include "common.cuh"
-#include "vecdotq.cuh"
-#include "mma.cuh"
-
-#include <climits>
-#include <cstdint>
-
-#define MMQ_TILE_Y_K (WARP_SIZE + WARP_SIZE/QI8_1)
-
-typedef void (*load_tiles_mmq_t)(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride);
-typedef void (*vec_dot_mmq_t)(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0);
-typedef void (*mmq_write_back_t)(const float * __restrict__ sum, float * __restrict__ dst, const int & ne0, const int & ne1);
-
-struct block_q8_1_mmq {
-    half2  ds[4];
-    int8_t qs[4*QK8_1];
-};
-static_assert(sizeof(block_q8_1_mmq) == 4*QK8_1 + 4*sizeof(half2), "Unexpected block_q8_1_mmq size");
-static_assert(sizeof(block_q8_1_mmq) == 4*sizeof(block_q8_1),      "Unexpected block_q8_1_mmq size");
-
-struct tile_x_sizes {
-    int qs;
-    int dm;
-    int sc;
-};
-
-// get_mmq_x_max_host is in common.cuh so that it can be used to determine the correct way to round for --split-mode row
-
-static constexpr __device__ int get_mmq_x_max_device() {
-#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-    return 64;
-#else
-#if __CUDA_ARCH__ >= CC_VOLTA
-#ifdef CUDA_USE_TENSOR_CORES
-    return MMQ_MAX_BATCH_SIZE;
-#else
-    return 128;
-#endif // CUDA_USE_TENSOR_CORES
-#else
-    return 64;
-#endif // __CUDA_ARCH__ >= CC_VOLTA
-#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-}
-
-// get_mmq_y_host is in common.cuh so that it can be used to determine the correct way to round for --split-mode row
-
-#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-static constexpr __device__ int get_mmq_y_device(int mmq_x) {
-    return mmq_x >= 32 ? 128 : 64;
-}
-#else
-#if __CUDA_ARCH__ >= CC_VOLTA
-static constexpr __device__ int get_mmq_y_device(int mmq_x) {
-    return mmq_x >= 32 ? 128 : 64;
-}
-#else
-static constexpr __device__ int get_mmq_y_device(int /*mmq_x*/) {
-    return 64;
-}
-#endif // __CUDA_ARCH__ >= CC_VOLTA
-#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-
-#define TILE_X_SIZES_Q4_0 tile_x_sizes{mmq_y*WARP_SIZE   + mmq_y, mmq_y*WARP_SIZE/QI4_0 + mmq_y/QI4_0, 0}
-#define TILE_X_SIZES_Q4_1 tile_x_sizes{mmq_y*WARP_SIZE   + mmq_y, mmq_y*WARP_SIZE/QI4_1 + mmq_y/QI4_1, 0}
-#define TILE_X_SIZES_Q5_0 tile_x_sizes{mmq_y*WARP_SIZE*2 + mmq_y, mmq_y*WARP_SIZE/QI5_0 + mmq_y/QI5_0, 0}
-#define TILE_X_SIZES_Q5_1 tile_x_sizes{mmq_y*WARP_SIZE*2 + mmq_y, mmq_y*WARP_SIZE/QI5_1 + mmq_y/QI5_1, 0}
-#define TILE_X_SIZES_Q8_0 tile_x_sizes{mmq_y*WARP_SIZE   + mmq_y, mmq_y*WARP_SIZE/QI8_0 + mmq_y/QI8_0, 0}
-#define TILE_X_SIZES_Q2_K tile_x_sizes{mmq_y*WARP_SIZE   + mmq_y, mmq_y*WARP_SIZE       + mmq_y,       0}
-#define TILE_X_SIZES_Q3_K tile_x_sizes{mmq_y*WARP_SIZE*2 + mmq_y, mmq_y*WARP_SIZE/QI3_K + mmq_y/QI3_K, mmq_y*WARP_SIZE/4 + mmq_y/4}
-#define TILE_X_SIZES_Q4_K tile_x_sizes{mmq_y*WARP_SIZE   + mmq_y, mmq_y*WARP_SIZE/QI4_K + mmq_y/QI4_K, mmq_y*WARP_SIZE/8 + mmq_y/8}
-#define TILE_X_SIZES_Q5_K tile_x_sizes{mmq_y*WARP_SIZE*2 + mmq_y, mmq_y*WARP_SIZE/QI5_K + mmq_y/QI5_K, mmq_y*WARP_SIZE/8 + mmq_y/8}
-#define TILE_X_SIZES_Q6_K tile_x_sizes{mmq_y*WARP_SIZE*2 + mmq_y, mmq_y*WARP_SIZE/QI6_K + mmq_y/QI6_K, mmq_y*WARP_SIZE/8 + mmq_y/8}
-
-#define GET_TILE_X_SIZES_BODY                           \
-    return type == GGML_TYPE_Q4_0 ? TILE_X_SIZES_Q4_0 : \
-        type == GGML_TYPE_Q4_1 ? TILE_X_SIZES_Q4_1 :    \
-        type == GGML_TYPE_Q5_0 ? TILE_X_SIZES_Q5_0 :    \
-        type == GGML_TYPE_Q5_1 ? TILE_X_SIZES_Q5_1 :    \
-        type == GGML_TYPE_Q8_0 ? TILE_X_SIZES_Q8_0 :    \
-        type == GGML_TYPE_Q2_K ? TILE_X_SIZES_Q2_K :    \
-        type == GGML_TYPE_Q3_K ? TILE_X_SIZES_Q3_K :    \
-        type == GGML_TYPE_Q4_K ? TILE_X_SIZES_Q4_K :    \
-        type == GGML_TYPE_Q5_K ? TILE_X_SIZES_Q5_K :    \
-        type == GGML_TYPE_Q6_K ? TILE_X_SIZES_Q6_K :    \
-        tile_x_sizes{0, 0, 0}
-
-static tile_x_sizes get_tile_x_sizes_host(const ggml_type type, const int mmq_y) {
-    GET_TILE_X_SIZES_BODY;
-}
-
-template <int mmq_y>
-static constexpr __device__ tile_x_sizes get_tile_x_sizes_device(ggml_type type) {
-    GET_TILE_X_SIZES_BODY;
-}
-
-// ------------------------------------------------------------
-
-template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q4_0(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride) {
-    GGML_UNUSED(x_sc);
-
-    const int kbx  = threadIdx.x / QI4_0;
-    const int kqsx = threadIdx.x % QI4_0;
-
-    float * x_dmf = (float *) x_dm;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + threadIdx.y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q4_0 * bxi = (const block_q4_0 *) x + kbx0 + i*stride + kbx;
-
-        x_qs[i * (WARP_SIZE + 1) + threadIdx.x] = get_int_from_uint8(bxi->qs, kqsx);
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI4_0;
-    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_0) {
-        int i = i0 + threadIdx.y * QI4_0 + threadIdx.x / blocks_per_tile_x_row;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q4_0 * bxi = (const block_q4_0 *) x + kbx0 + i*stride + kbxd;
-
-        x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbxd] = bxi->d;
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q4_0_q8_1_dp4a(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-    GGML_UNUSED(x_sc);
-
-    const float * x_df = (const float *) x_dm;
-    const int   * y_qs = (const int   *) y + 4;
-    const half2 * y_ds = (const half2 *) y;
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            const int kyqs = k0 % (QI8_1/2) + QI8_1 * (k0 / (QI8_1/2));
-
-            int u[2*VDR_Q4_0_Q8_1_MMQ];
-
-#pragma unroll
-            for (int l = 0; l < VDR_Q4_0_Q8_1_MMQ; ++l) {
-                u[2*l+0] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l)         % WARP_SIZE];
-                u[2*l+1] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l + QI4_0) % WARP_SIZE];
-            }
-
-            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q4_0_q8_1_impl<VDR_Q4_0_Q8_1_MMQ>
-                (&x_qs[i*(WARP_SIZE + 1) + k0], u, x_df[i*(WARP_SIZE/QI4_0) + i/QI4_0 + k0/QI4_0],
-                y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)]);
-        }
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q4_0_q8_1_mma(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-#ifdef INT8_MMA_AVAILABLE
-    GGML_UNUSED(x_sc);
-
-    typedef mma_int_A_I16K8 mma_A;
-    typedef mma_int_B_J8K8  mma_B;
-    typedef mma_int_C_I16J8 mma_C;
-
-    const float * x_df = (const float *) x_dm;
-    const int   * y_qs = (const int   *) y + 4;
-    const half2 * y_ds = (const half2 *) y;
-
-    mma_A A;
-    float dA[mma_C::ne/2];
-
-    const int i0 = threadIdx.y*mma_A::I;
-    static_assert(nwarps*mma_A::I == mmq_y, "nwarps*mma_A::I != mmq_y");
-
-#pragma unroll
-    for (int l = 0; l < mma_A::ne; ++l) {
-        const int i     = i0 + mma_A::get_i(l);
-        const int k     = k0 + mma_A::get_k(l) % QI4_0;
-        const int shift =   4*(mma_A::get_k(l) / QI4_0);
-
-        A.x[l] = __vsubss4((x_qs[i*(WARP_SIZE + 1) + k] >> shift) & 0x0F0F0F0F, 0x08080808);
-    }
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-        dA[l] = x_df[i*(WARP_SIZE/QI4_0) + i/QI4_0 + k0/QI4_0];
-    }
-
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_int_B_J8K8::J) {
-        mma_C C;
-        mma_B B;
-        half2 dsB[mma_C::ne/2];
-
-#pragma unroll
-        for (int l = 0; l < mma_B::ne; ++l) {
-            const int j =    j0 + mma_B::get_j(l);
-            const int k = (2*k0 + mma_B::get_k(l)) % WARP_SIZE;
-
-            B.x[l] = y_qs[j*MMQ_TILE_Y_K + k];
-        }
-#pragma unroll
-        for (int l = 0; l < mma_C::ne/2; ++l) {
-            const int j = j0 + mma_C::get_j(l);
-
-            dsB[l] = y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)];
-        }
-
-        C.mma_K8(A, B);
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            sum[(j0/B.J)*C.ne + l] += dA[l/2]*__low2float(dsB[l%2])*C.x[l];
-        }
-    }
-#else
-    GGML_UNUSED(x_qs); GGML_UNUSED(x_dm); GGML_UNUSED(x_sc); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k0);
-    NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-}
-
-template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q4_1(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride) {
-    GGML_UNUSED(x_sc);
-
-    const int kbx  = threadIdx.x / QI4_1;
-    const int kqsx = threadIdx.x % QI4_1;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + threadIdx.y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q4_1 * bxi = (const block_q4_1 *) x + kbx0 + i*stride + kbx;
-
-        x_qs[i * (WARP_SIZE + 1) + threadIdx.x] = get_int_from_uint8_aligned(bxi->qs, kqsx);
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI4_1;
-    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_1) {
-        int i = i0 + threadIdx.y * QI4_1 + threadIdx.x / blocks_per_tile_x_row;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q4_1 * bxi = (const block_q4_1 *) x + kbx0 + i*stride + kbxd;
-
-        x_dm[i * (WARP_SIZE/QI4_1) + i / QI4_1 + kbxd] = bxi->dm;
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q4_1_q8_1_dp4a(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-    GGML_UNUSED(x_sc);
-
-    const int   * y_qs = (const int   *) y + 4;
-    const half2 * y_ds = (const half2 *) y;
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            const int kyqs = k0 % (QI8_1/2) + QI8_1 * (k0 / (QI8_1/2));
-
-            int u[2*VDR_Q4_1_Q8_1_MMQ];
-
-#pragma unroll
-            for (int l = 0; l < VDR_Q4_1_Q8_1_MMQ; ++l) {
-                u[2*l+0] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l)         % WARP_SIZE];
-                u[2*l+1] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l + QI4_1) % WARP_SIZE];
-            }
-
-            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q4_1_q8_1_impl<VDR_Q4_1_Q8_1_MMQ>
-                (&x_qs[i*(WARP_SIZE + 1) + k0], u, x_dm[i*(WARP_SIZE/QI4_1) + i/QI4_1 + k0/QI4_1],
-                y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)]);
-        }
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q4_1_q8_1_mma(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-#ifdef INT8_MMA_AVAILABLE
-    GGML_UNUSED(x_sc);
-
-    typedef mma_int_A_I16K8 mma_A;
-    typedef mma_int_B_J8K8  mma_B;
-    typedef mma_int_C_I16J8 mma_C;
-
-    const int   * y_qs = (const int   *) y + 4;
-    const half2 * y_ds = (const half2 *) y;
-
-    mma_A A;
-    half2 dmA[mma_C::ne/2];
-
-    const int i0 = threadIdx.y*mma_A::I;
-    static_assert(nwarps*mma_A::I == mmq_y, "nwarps*mma_A::I != mmq_y");
-
-#pragma unroll
-    for (int l = 0; l < mma_A::ne; ++l) {
-        const int i     = i0 + mma_A::get_i(l);
-        const int k     = k0 + mma_A::get_k(l) % QI4_0;
-        const int shift =   4*(mma_A::get_k(l) / QI4_0);
-
-        A.x[l] = (x_qs[i*(WARP_SIZE + 1) + k] >> shift) & 0x0F0F0F0F;
-    }
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-        dmA[l] = x_dm[i*(WARP_SIZE/QI4_0) + i/QI4_0 + k0/QI4_0];
-    }
-
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_int_B_J8K8::J) {
-        mma_C C;
-        mma_B B;
-        half2 dsB[mma_C::ne/2];
-
-#pragma unroll
-        for (int l = 0; l < mma_B::ne; ++l) {
-            const int j =    j0 + mma_B::get_j(l);
-            const int k = (2*k0 + mma_B::get_k(l)) % WARP_SIZE;
-
-            B.x[l] = y_qs[j*MMQ_TILE_Y_K + k];
-        }
-#pragma unroll
-        for (int l = 0; l < mma_C::ne/2; ++l) {
-            const int j = j0 + mma_C::get_j(l);
-
-            dsB[l] = y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)];
-        }
-
-        C.mma_K8(A, B);
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            const half2 dmA_dsB = dmA[l/2]*dsB[l%2];
-            sum[(j0/B.J)*C.ne + l] += __low2float(dmA_dsB)*C.x[l] + __high2float(dmA_dsB);
-        }
-    }
-#else
-    GGML_UNUSED(x_qs); GGML_UNUSED(x_dm); GGML_UNUSED(x_sc); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k0);
-    NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-}
-
-template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q5_0(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride) {
-    GGML_UNUSED(x_sc);
-
-    const int kbx  = threadIdx.x / QI5_0;
-    const int kqsx = threadIdx.x % QI5_0;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + threadIdx.y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q5_0 * bxi = (const block_q5_0 *) x + kbx0 + i*stride + kbx;
-
-        const int ql = get_int_from_uint8(bxi->qs, kqsx);
-        const int qh = get_int_from_uint8(bxi->qh, 0) >> (4 * (threadIdx.x % QI5_0));
-
-        int qs0 = (ql >>  0)   & 0x0F0F0F0F;
-        qs0    |= (qh <<  4)   & 0x00000010;  // 0 ->  4
-        qs0    |= (qh << 11)   & 0x00001000;  // 1 -> 12
-        qs0    |= (qh << 18)   & 0x00100000;  // 2 -> 20
-        qs0    |= (qh << 25)   & 0x10000000;  // 3 -> 28
-        qs0     = __vsubss4(qs0, 0x10101010); // subtract 16
-
-        x_qs[i * (2*WARP_SIZE + 1) + 2*threadIdx.x+0] = qs0;
-
-        int qs1 = (ql >>  4)   & 0x0F0F0F0F;
-        qs1    |= (qh >> 12)   & 0x00000010;  // 16 ->  4
-        qs1    |= (qh >>  5)   & 0x00001000;  // 17 -> 12
-        qs1    |= (qh <<  2)   & 0x00100000;  // 18 -> 20
-        qs1    |= (qh <<  9)   & 0x10000000;  // 19 -> 28
-        qs1     = __vsubss4(qs1, 0x10101010); // subtract 16
-
-        x_qs[i * (2*WARP_SIZE + 1) + 2*threadIdx.x+1] = qs1;
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI5_0;
-    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
-    float * x_dmf = (float *) x_dm;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_0) {
-        int i = i0 + threadIdx.y * QI5_0 + threadIdx.x / blocks_per_tile_x_row;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q5_0 * bxi = (const block_q5_0 *) x + kbx0 + i*stride + kbxd;
-
-        x_dmf[i * (WARP_SIZE/QI5_0) + i / QI5_0 + kbxd] = bxi->d;
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q5_0_q8_1_dp4a(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-    GGML_UNUSED(x_sc);
-
-    const float * x_dmf = (const float *) x_dm;
-    const int   * y_qs  = (const int   *) y + 4;
-    const float * y_df  = (const float *) y;
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            const int kyqs = k0 % (QI8_1/2) + QI8_1 * (k0 / (QI8_1/2));
-            const int index_bx = i*(WARP_SIZE/QI5_0) + i/QI5_0 + k0/QI5_0;
-
-            int u[2*VDR_Q5_0_Q8_1_MMQ];
-
-#pragma unroll
-            for (int l = 0; l < VDR_Q5_0_Q8_1_MMQ; ++l) {
-                u[2*l+0] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l)         % WARP_SIZE];
-                u[2*l+1] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l + QI5_0) % WARP_SIZE];
-            }
-
-            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q8_0_q8_1_impl<float, QR5_0*VDR_Q5_0_Q8_1_MMQ>
-                (&x_qs[i*(2*WARP_SIZE + 1) + 2*k0], u, x_dmf[index_bx], y_df[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)]);
-        }
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q5_0_q8_1_mma(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-#ifdef INT8_MMA_AVAILABLE
-    GGML_UNUSED(x_sc);
-
-    typedef mma_int_A_I16K8 mma_A;
-    typedef mma_int_B_J8K8  mma_B;
-    typedef mma_int_C_I16J8 mma_C;
-
-    const float * x_df = (const float *) x_dm;
-    const int   * y_qs = (const int   *) y + 4;
-    const float * y_df = (const float *) y;
-
-    mma_A A;
-    float dA[mma_C::ne/2];
-
-    const int i0 = threadIdx.y*mma_A::I;
-    static_assert(nwarps*mma_A::I == mmq_y, "nwarps*mma_A::I != mmq_y");
-
-#pragma unroll
-    for (int l = 0; l < mma_A::ne; ++l) {
-        const int i     =    i0 + mma_A::get_i(l);
-        const int k     = 2*(k0 + mma_A::get_k(l) % QI5_0) + mma_A::get_k(l) / QI5_0;
-
-        A.x[l] = x_qs[i*(2*WARP_SIZE + 1) + k];
-    }
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-        dA[l] = x_df[i*(WARP_SIZE/QI5_0) + i/QI5_0 + k0/QI5_0];
-    }
-
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_int_B_J8K8::J) {
-        mma_C C;
-        mma_B B;
-        float dB[mma_C::ne/2];
-
-#pragma unroll
-        for (int l = 0; l < mma_B::ne; ++l) {
-            const int j =    j0 + mma_B::get_j(l);
-            const int k = (2*k0 + mma_B::get_k(l)) % WARP_SIZE;
-
-            B.x[l] = y_qs[j*MMQ_TILE_Y_K + k];
-        }
-#pragma unroll
-        for (int l = 0; l < mma_C::ne/2; ++l) {
-            const int j = j0 + mma_C::get_j(l);
-
-            dB[l] = y_df[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)];
-        }
-
-        C.mma_K8(A, B);
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            sum[(j0/B.J)*C.ne + l] += dA[l/2]*dB[l%2]*C.x[l];
-        }
-    }
-#else
-    GGML_UNUSED(x_qs); GGML_UNUSED(x_dm); GGML_UNUSED(x_sc); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k0);
-    NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-}
-
-template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q5_1(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride) {
-    GGML_UNUSED(x_sc);
-
-    const int kbx  = threadIdx.x / QI5_1;
-    const int kqsx = threadIdx.x % QI5_1;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + threadIdx.y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q5_1 * bxi = (const block_q5_1 *) x + kbx0 + i*stride + kbx;
-
-        const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx);
-        const int qh = get_int_from_uint8_aligned(bxi->qh, 0) >> (4 * (threadIdx.x % QI5_1));
-
-        int qs0 = (ql >>  0) & 0x0F0F0F0F;
-        qs0    |= (qh <<  4) & 0x00000010; // 0 ->  4
-        qs0    |= (qh << 11) & 0x00001000; // 1 -> 12
-        qs0    |= (qh << 18) & 0x00100000; // 2 -> 20
-        qs0    |= (qh << 25) & 0x10000000; // 3 -> 28
-
-        x_qs[i * (2*WARP_SIZE + 1) + 2*threadIdx.x+0] = qs0;
-
-        int qs1 = (ql >>  4) & 0x0F0F0F0F;
-        qs1    |= (qh >> 12) & 0x00000010; // 16 ->  4
-        qs1    |= (qh >>  5) & 0x00001000; // 17 -> 12
-        qs1    |= (qh <<  2) & 0x00100000; // 18 -> 20
-        qs1    |= (qh <<  9) & 0x10000000; // 19 -> 28
-
-        x_qs[i * (2*WARP_SIZE + 1) + 2*threadIdx.x+1] = qs1;
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI5_1;
-    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_1) {
-        int i = i0 + threadIdx.y * QI5_1 + threadIdx.x / blocks_per_tile_x_row;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q5_1 * bxi = (const block_q5_1 *) x + kbx0 + i*stride + kbxd;
-
-        x_dm[i * (WARP_SIZE/QI5_1) + i / QI5_1 + kbxd] = bxi->dm;
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q5_1_q8_1_dp4a(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-    GGML_UNUSED(x_sc);
-
-    const int   * y_qs  = (const int   *) y + 4;
-    const half2 * y_ds  = (const half2 *) y;
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            const int kyqs = k0 % (QI8_1/2) + QI8_1 * (k0 / (QI8_1/2));
-            const int index_bx = i*(WARP_SIZE/QI5_1) + i/QI5_1 + k0/QI5_1;
-
-            int u[2*VDR_Q5_1_Q8_1_MMQ];
-
-#pragma unroll
-            for (int l = 0; l < VDR_Q5_1_Q8_1_MMQ; ++l) {
-                u[2*l+0] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l)         % WARP_SIZE];
-                u[2*l+1] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l + QI5_1) % WARP_SIZE];
-            }
-
-            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q8_1_q8_1_impl<QR5_1*VDR_Q5_1_Q8_1_MMQ>
-                (&x_qs[i*(2*WARP_SIZE + 1) + 2*k0], u, x_dm[index_bx], y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)]);
-        }
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q5_1_q8_1_mma(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-#ifdef INT8_MMA_AVAILABLE
-    GGML_UNUSED(x_sc);
-
-    typedef mma_int_A_I16K8 mma_A;
-    typedef mma_int_B_J8K8  mma_B;
-    typedef mma_int_C_I16J8 mma_C;
-
-    const int   * y_qs = (const int   *) y + 4;
-    const half2 * y_ds = (const half2 *) y;
-
-    mma_A A;
-    half2 dmA[mma_C::ne/2];
-
-    const int i0 = threadIdx.y*mma_A::I;
-    static_assert(nwarps*mma_A::I == mmq_y, "nwarps*mma_A::I != mmq_y");
-
-#pragma unroll
-    for (int l = 0; l < mma_A::ne; ++l) {
-        const int i     =    i0 + mma_A::get_i(l);
-        const int k     = 2*(k0 + mma_A::get_k(l) % QI5_1) + mma_A::get_k(l) / QI5_1;
-
-        A.x[l] = x_qs[i*(2*WARP_SIZE + 1) + k];
-    }
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-        dmA[l] = x_dm[i*(WARP_SIZE/QI5_1) + i/QI5_1 + k0/QI5_1];
-    }
-
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_int_B_J8K8::J) {
-        mma_C C;
-        mma_B B;
-        half2 dsB[mma_C::ne/2];
-
-#pragma unroll
-        for (int l = 0; l < mma_B::ne; ++l) {
-            const int j =    j0 + mma_B::get_j(l);
-            const int k = (2*k0 + mma_B::get_k(l)) % WARP_SIZE;
-
-            B.x[l] = y_qs[j*MMQ_TILE_Y_K + k];
-        }
-#pragma unroll
-        for (int l = 0; l < mma_C::ne/2; ++l) {
-            const int j = j0 + mma_C::get_j(l);
-
-            dsB[l] = y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)];
-        }
-
-        C.mma_K8(A, B);
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            const half2 dmA_dsB = dmA[l/2]*dsB[l%2];
-            sum[(j0/B.J)*C.ne + l] += __low2float(dmA_dsB)*C.x[l] + __high2float(dmA_dsB);
-        }
-    }
-#else
-    GGML_UNUSED(x_qs); GGML_UNUSED(x_dm); GGML_UNUSED(x_sc); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k0);
-    NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-}
-
-template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q8_0(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride) {
-    GGML_UNUSED(x_sc);
-
-    const int kbx  = threadIdx.x / QI8_0;
-    const int kqsx = threadIdx.x % QI8_0;
-    float * x_dmf = (float *) x_dm;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + threadIdx.y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q8_0 * bxi = (const block_q8_0 *) x + kbx0 + i*stride + kbx;
-
-        x_qs[i * (WARP_SIZE + 1) + threadIdx.x] = get_int_from_int8(bxi->qs, kqsx);
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI8_0;
-    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI8_0) {
-        int i = i0 + threadIdx.y * QI8_0 + threadIdx.x / blocks_per_tile_x_row;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q8_0 * bxi = (const block_q8_0 *) x + kbx0 + i*stride + kbxd;
-
-        x_dmf[i * (WARP_SIZE/QI8_0) + i / QI8_0 + kbxd] = bxi->d;
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q8_0_q8_1_dp4a(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-    GGML_UNUSED(x_sc);
-
-    const float * x_dmf = (const float *) x_dm;
-    const int   * y_qs  = (const int   *) y + 4;
-    const float * y_df  = (const float *) y;
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q8_0_q8_1_impl<float, VDR_Q8_0_Q8_1_MMQ>
-                (&x_qs[i*(WARP_SIZE + 1) + k0], &y_qs[j*MMQ_TILE_Y_K + k0], x_dmf[i*(WARP_SIZE/QI8_0) + i/QI8_0 + k0/QI8_0],
-                y_df[j*MMQ_TILE_Y_K + k0/QI8_1]);
-        }
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q8_0_q8_1_mma(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-#ifdef INT8_MMA_AVAILABLE
-    GGML_UNUSED(x_sc);
-
-    typedef mma_int_A_I16K8 mma_A;
-    typedef mma_int_B_J8K8  mma_B;
-    typedef mma_int_C_I16J8 mma_C;
-
-    const float * x_df = (const float *) x_dm;
-    const int   * y_qs = (const int   *) y + 4;
-    const float * y_df = (const float *) y;
-
-    mma_A A;
-    float dA[mma_C::ne/2];
-
-    const int i0 = threadIdx.y*mma_A::I;
-    static_assert(nwarps*mma_A::I == mmq_y, "nwarps*mma_A::I != mmq_y");
-
-#pragma unroll
-    for (int l = 0; l < mma_A::ne; ++l) {
-        const int i = i0 + mma_A::get_i(l);
-        const int k = k0 + mma_A::get_k(l);
-
-        A.x[l] = x_qs[i*(WARP_SIZE + 1) + k];
-    }
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-        dA[l] = x_df[i*(WARP_SIZE/QI8_0) + i/QI8_0 + k0/QI8_0];
-    }
-
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_int_B_J8K8::J) {
-        mma_C C;
-        mma_B B;
-        float dB[mma_C::ne/2];
-
-#pragma unroll
-        for (int l = 0; l < mma_B::ne; ++l) {
-            const int j = j0 + mma_B::get_j(l);
-            const int k = k0 + mma_B::get_k(l);
-
-            B.x[l] = y_qs[j*MMQ_TILE_Y_K + k];
-        }
-#pragma unroll
-        for (int l = 0; l < mma_C::ne/2; ++l) {
-            const int j = j0 + mma_C::get_j(l);
-
-            dB[l] = y_df[j*MMQ_TILE_Y_K + k0/QI8_1];
-        }
-
-        C.mma_K8(A, B);
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            sum[(j0/B.J)*C.ne + l] += C.x[l]*dA[l/2]*dB[l%2];
-        }
-    }
-#else
-    GGML_UNUSED(x_qs); GGML_UNUSED(x_dm); GGML_UNUSED(x_sc); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k0);
-    NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-}
-
-template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q2_K(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride) {
-
-    const int kbx  = threadIdx.x / QI2_K;
-    const int kqsx = threadIdx.x % QI2_K;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + threadIdx.y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q2_K * bxi = (const block_q2_K *) x + kbx0 + i*stride + kbx;
-
-        const int x_ql_0 = get_int_from_uint8(bxi->qs, kqsx);
-
-#pragma unroll
-        for (int l = 0; l < QR2_K; ++l) {
-            const int k = kbx*QI2_K + (kqsx/8)*8 + l*2 + (kqsx % 8)/4;
-
-            int x_qs_k = ((x_ql_0 >> (2*l)) & 0x03030303) << (2*(kqsx % 4));
-            x_qs_k |= __shfl_xor_sync(0xFFFFFFFF, x_qs_k, 1, WARP_SIZE);
-            x_qs_k |= __shfl_xor_sync(0xFFFFFFFF, x_qs_k, 2, WARP_SIZE);
-
-            if (kqsx % QR2_K != 0) {
-                continue;
-            }
-
-            x_qs[i*(WARP_SIZE + 1) + k] = x_qs_k;
-        }
-
-        const int sc_m = bxi->scales[kqsx];
-#ifdef FAST_FP16_AVAILABLE
-        const half2 x_dm_ik = __hmul2(bxi->dm, make_half2(sc_m & 0x0F, sc_m >> 4));
-#else
-        const float2 bxi_dmf = __half22float2(bxi->dm);
-        const half2 x_dm_ik = make_half2(bxi_dmf.x*(sc_m & 0x0F), bxi_dmf.y*(sc_m >> 4));
-#endif // FAST_FP16_AVAILABLE
-
-        x_dm[i*(WARP_SIZE + 1) + threadIdx.x] = x_dm_ik;
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q2_K_q8_1_dp4a(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-
-    const int   * y_qs = (const int   *) y + 4;
-    const float * y_df = (const float *) y;
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q2_K_q8_1_impl_mmq(
-                &x_qs[i*(WARP_SIZE + 1) + k0], &y_qs[j*MMQ_TILE_Y_K + (QR2_K*k0) % WARP_SIZE],
-                &x_dm[i*(WARP_SIZE + 1) + k0], y_df[j*MMQ_TILE_Y_K + ((QR2_K*k0) % WARP_SIZE)/QI8_1]);
-        }
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q2_K_q8_1_mma(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-#ifdef INT8_MMA_AVAILABLE
-
-    typedef mma_int_A_I16K4 mma_A;
-    typedef mma_int_B_J8K4  mma_B;
-    typedef mma_int_C_I16J8 mma_C;
-
-    const int   * y_qs = (const int   *) y + 4;
-    const float * y_df = (const float *) y;
-
-    const int i0 = threadIdx.y*mma_A::I;
-    static_assert(nwarps*mma_A::I == mmq_y, "nwarps*mma_A::I != mmq_y");
-
-    mma_A   A[2];
-    float  dA[mma_C::ne/2][2];
-    float  mA[mma_C::ne/2][2];
-
-#pragma unroll
-    for (int l = 0; l < mma_A::ne; ++l) {
-        const int i = i0 + mma_A::get_i(l);
-        const int shift = 2*mma_A::get_k(l);
-
-        A[0].x[l] = (x_qs[i*(WARP_SIZE + 1) + k0 + 0] >> shift) & 0x03030303;
-        A[1].x[l] = (x_qs[i*(WARP_SIZE + 1) + k0 + 1] >> shift) & 0x03030303;
-    }
-
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-#pragma unroll
-        for (int kk = 0; kk < 2; ++kk) {
-            const float2 dm = __half22float2(x_dm[i*(WARP_SIZE + 1) + k0 + kk]);
-
-            dA[l][kk] = dm.x;
-            mA[l][kk] = dm.y;
-        }
-    }
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_int_B_J8K8::J) {
-        mma_C Cd[2];
-        mma_C Cm[2];
-        mma_B B[2];
-        float dB[mma_C::ne/2];
-
-#pragma unroll
-        for (int l = 0; l < mma_B::ne; ++l) {
-            const int j = j0 + mma_B::get_j(l);
-            const int k = (4*k0 + mma_B::get_k(l)) % WARP_SIZE;
-
-            B[0].x[l] = y_qs[j*MMQ_TILE_Y_K + k + 0];
-            B[1].x[l] = y_qs[j*MMQ_TILE_Y_K + k + mma_B::K];
-        }
-#pragma unroll
-        for (int l = 0; l < mma_C::ne/2; ++l) {
-            const int j = j0 + mma_C::get_j(l);
-
-            dB[l] = y_df[j*MMQ_TILE_Y_K + ((4*k0)/QI8_1) % (WARP_SIZE/QI8_1)];
-        }
-
-        Cd[0].mma_K4(A[0], B[0]);
-        Cd[1].mma_K4(A[1], B[1]);
-
-        mma_A A1;
-        A1.x[0] = 0x01010101;
-        A1.x[1] = 0x01010101;
-        Cm[0].mma_K4(A1, B[0]);
-        Cm[1].mma_K4(A1, B[1]);
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            sum[(j0/mma_B::J)*mma_C::ne + l] += (Cd[0].x[l]*dA[l/2][0] + Cd[1].x[l]*dA[l/2][1] - Cm[0].x[l]*mA[l/2][0] - Cm[1].x[l]*mA[l/2][1])*dB[l%2];
-        }
-    }
-#else
-    GGML_UNUSED(x_qs); GGML_UNUSED(x_dm); GGML_UNUSED(x_sc); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k0);
-    NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-}
-
-template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q3_K(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride) {
-
-    const int kbx  = threadIdx.x / QI3_K;
-    const int kqsx = threadIdx.x % QI3_K;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + threadIdx.y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q3_K * bxi = (const block_q3_K *) x + kbx0 + i*stride + kbx;
-
-        const int x_ql_0 = get_int_from_uint8(bxi->qs,    kqsx);
-        const int x_qh_0 = get_int_from_uint8(bxi->hmask, kqsx % (QI3_K/2)) >> (4 * (kqsx / (QI3_K/2)));
-
-#pragma unroll
-        for (int l = 0; l < QR3_K; ++l) {
-            const int k = kbx*(QR3_K*QI3_K) + (kqsx/8)*32 + l*8 + kqsx % 8;
-
-            const int x_ql_k =  (x_ql_0 >> (2*l))       & 0x03030303;
-            const int x_qh_k = ((x_qh_0 >>    l)  << 2) & 0x04040404;
-
-            int x_qs_k = (x_ql_k | x_qh_k) << (4*(k%2));
-            x_qs_k |= __shfl_xor_sync(0xFFFFFFFF, x_qs_k, 1, WARP_SIZE);
-
-            if (kqsx % 2 != 0) {
-                continue;
-            }
-
-            x_qs[i*(2*WARP_SIZE + 1) + k/2] = x_qs_k;
-        }
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI3_K;
-    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
-    float * x_dmf = (float *) x_dm;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI3_K) {
-        int i = (i0 + threadIdx.y * QI3_K + threadIdx.x / blocks_per_tile_x_row) % mmq_y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q3_K * bxi = (const block_q3_K *) x + kbx0 + i*stride + kbxd;
-
-        x_dmf[i * (WARP_SIZE/QI3_K) + i / QI3_K + kbxd] = bxi->d;
-    }
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) {
-        int i = i0 + threadIdx.y * 4 + threadIdx.x / (WARP_SIZE/4);
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q3_K * bxi = (const block_q3_K *) x + kbx0 + i*stride + (threadIdx.x % (WARP_SIZE/4)) / (QI3_K/4);
-
-        const int ksc = threadIdx.x % (QI3_K/4);
-
-        const int ksc_low = ksc % (QI3_K/8);
-        const int shift_low = 4 * (ksc / (QI3_K/8));
-        const int sc_low = (get_int_from_uint8(bxi->scales, ksc_low) >> shift_low) & 0x0F0F0F0F;
-
-        const int ksc_high = QI3_K/8;
-        const int shift_high = 2 * ksc;
-        const int sc_high = ((get_int_from_uint8(bxi->scales, ksc_high) >> shift_high) << 4) & 0x30303030;
-
-        const int sc = __vsubss4(sc_low | sc_high, 0x20202020);
-
-        x_sc[i * (WARP_SIZE/4) + i / 4 + threadIdx.x % (WARP_SIZE/4)] = sc;
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q3_K_q8_1_dp4a(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-
-    const float * x_df = (const float *) x_dm;
-    const int   * y_qs = (const int   *) y + 4;
-    const float * y_df = (const float *) y;
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            const int kbx  = k0 / QI3_K;
-            const int ky  = (k0 % QI3_K) * QR3_K;
-
-            const int8_t * scales = ((const int8_t *) (x_sc + i * (WARP_SIZE/4) + i/4 + kbx*4)) + ky/4;
-
-            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q3_K_q8_1_impl_mmq(
-                &x_qs[i*(2*WARP_SIZE + 1) + 2*k0], &y_qs[j*MMQ_TILE_Y_K + (k0*QR3_K) % WARP_SIZE], scales,
-                x_df[i*(WARP_SIZE/QI3_K) + i/QI3_K + kbx], y_df[j*MMQ_TILE_Y_K + ((k0*QR3_K) % WARP_SIZE)/QI8_1]);
-        }
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q3_K_q8_1_mma(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-#ifdef INT8_MMA_AVAILABLE
-
-    typedef mma_int_A_I16K4 mma_A;
-    typedef mma_int_B_J8K4  mma_B;
-    typedef mma_int_C_I16J8 mma_C;
-
-    const float * x_df = (const float *) x_dm;
-    const int   * y_qs = (const int   *) y + 4;
-    const float * y_df = (const float *) y;
-
-    const int i0 = threadIdx.y*mma_A::I;
-    static_assert(nwarps*mma_A::I == mmq_y, "nwarps*mma_A::I != mmq_y");
-
-    mma_A   A[2];
-    int   scA[mma_C::ne/2][2];
-    float  dA[mma_C::ne/2];
-
-#pragma unroll
-    for (int l = 0; l < mma_A::ne; ++l) {
-        const int i = i0 + mma_A::get_i(l);
-        const int k = QR3_K*k0 + mma_A::get_k(l);
-
-        A[0].x[l] = (x_qs[i*(2*WARP_SIZE + 1) + k/2 + 0]          >> (4*(k%2))) & 0x0F0F0F0F;
-        A[1].x[l] = (x_qs[i*(2*WARP_SIZE + 1) + k/2 + mma_A::K/2] >> (4*(k%2))) & 0x0F0F0F0F;
-        A[0].x[l] = __vsubss4(A[0].x[l], 0x04040404);
-        A[1].x[l] = __vsubss4(A[1].x[l], 0x04040404);
-    }
-
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-        const int kbx  = k0 / QI3_K;
-        const int ky  = (k0 % QI3_K) * QR3_K;
-        const int8_t * sc = ((const int8_t *) (x_sc + i * (WARP_SIZE/4) + i/4 + kbx*4)) + ky/4;
-
-        scA[l][0] = sc[0];
-        scA[l][1] = sc[1];
-    }
-
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-        dA[l] = x_df[i*(WARP_SIZE/QI3_K) + i/QI3_K + k0/QI3_K];
-    }
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_int_B_J8K8::J) {
-        mma_C C[2];
-        mma_B B[2];
-        float dB[mma_C::ne/2];
-
-#pragma unroll
-        for (int l = 0; l < mma_B::ne; ++l) {
-            const int j = j0 + mma_B::get_j(l);
-            const int k = (4*k0 + mma_B::get_k(l)) % WARP_SIZE;
-
-            B[0].x[l] = y_qs[j*MMQ_TILE_Y_K + k + 0];
-            B[1].x[l] = y_qs[j*MMQ_TILE_Y_K + k + mma_B::K];
-        }
-#pragma unroll
-        for (int l = 0; l < mma_C::ne/2; ++l) {
-            const int j = j0 + mma_C::get_j(l);
-
-            dB[l] = y_df[j*MMQ_TILE_Y_K + ((4*k0)/QI8_1) % (WARP_SIZE/QI8_1)];
-        }
-
-        C[0].mma_K4(A[0], B[0]);
-        C[1].mma_K4(A[1], B[1]);
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            sum[(j0/mma_B::J)*mma_C::ne + l] += (C[0].x[l]*scA[l/2][0] + C[1].x[l]*scA[l/2][1])*dA[l/2]*dB[l%2];
-        }
-    }
-#else
-    GGML_UNUSED(x_qs); GGML_UNUSED(x_dm); GGML_UNUSED(x_sc); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k0);
-    NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-}
-
-template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q4_K(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride) {
-
-    const int kbx  = 0;           // threadIdx.x / QI4_K
-    const int kqsx = threadIdx.x; // threadIdx.x % QI4_K
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + threadIdx.y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q4_K * bxi = (const block_q4_K *) x + kbx0 + i*stride + kbx;
-
-        x_qs[i * (WARP_SIZE + 1) + threadIdx.x] = get_int_from_uint8_aligned(bxi->qs, kqsx);
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI4_K;  // == 1 if QK_K == 256
-    const int kbxd = threadIdx.x % blocks_per_tile_x_row; // == 0 if QK_K == 256
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_K) {
-        int i = (i0 + threadIdx.y * QI4_K + threadIdx.x / blocks_per_tile_x_row) % mmq_y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q4_K * bxi = (const block_q4_K *) x + kbx0 + i*stride + kbxd;
-
-        x_dm[i * (WARP_SIZE/QI4_K) + i / QI4_K + kbxd] = bxi->dm;
-    }
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
-        int i = (i0 + threadIdx.y * 8 + threadIdx.x / (WARP_SIZE/8)) % mmq_y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q4_K * bxi = (const block_q4_K *) x + kbx0 + i*stride + (threadIdx.x % (WARP_SIZE/8)) / (QI4_K/8);
-
-        const int * scales = (const int *) bxi->scales;
-
-        const int ksc = threadIdx.x % (WARP_SIZE/8);
-
-        // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8
-        int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits
-        scales8    |= (scales[ksc/2]              >> (2 * (ksc % 2)))       & 0x30303030; // upper 2 bits
-
-        x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8;
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q4_K_q8_1_dp4a(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-
-    const int   * y_qs = (const int   *) y + 4;
-    const half2 * y_ds = (const half2 *) y;
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k0/16]) + 2*((k0 % 16) / 8);
-
-            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q4_K_q8_1_impl_mmq(
-                &x_qs[i*(WARP_SIZE + 1) + k0], &y_qs[j*MMQ_TILE_Y_K + (QR4_K*k0) % WARP_SIZE], sc, sc+8,
-                x_dm[i*(WARP_SIZE/QI4_K) + i/QI4_K], &y_ds[j*MMQ_TILE_Y_K + ((QR4_K*k0) % WARP_SIZE)/QI8_1]);
-        }
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q4_K_q8_1_mma(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-#ifdef INT8_MMA_AVAILABLE
-
-    typedef mma_int_A_I16K8 mma_A;
-    typedef mma_int_B_J8K8  mma_B;
-    typedef mma_int_C_I16J8 mma_C;
-
-    const int   * y_qs = (const int   *) y + 4;
-    const half2 * y_ds = (const half2 *) y;
-
-    const int i0 = threadIdx.y*mma_A::I;
-    static_assert(nwarps*mma_A::I == mmq_y, "nwarps*mma_A::I != mmq_y");
-
-    mma_A   A[2];
-    int   scA[mma_C::ne/2][2];
-    int    mA[mma_C::ne/2][2];
-    half2 dmA[mma_C::ne/2];
-#pragma unroll
-    for (int kvdr = 0; kvdr < VDR_Q4_K_Q8_1_MMQ; kvdr += 4) {
-#pragma unroll
-        for (int l = 0; l < mma_A::ne; ++l) {
-            const int i = i0 + mma_A::get_i(l);
-            const int k = k0 + mma_A::get_k(l);
-
-            A[kvdr/4].x[l] = (x_qs[i*(WARP_SIZE + 1) + k] >> kvdr) & 0x0F0F0F0F;
-        }
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne/2; ++l) {
-            const int i = i0 + mma_C::get_i(2*l);
-
-            const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k0/16]) + 2 * ((k0 % 16) / 8);
-            const uint8_t *  m = sc + 8;
-
-            scA[l][kvdr/4] = sc[kvdr/4];
-            mA[l][kvdr/4]  =  m[kvdr/4];
-        }
-    }
-
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-        dmA[l] = x_dm[i*(WARP_SIZE/QI5_K) + i/QI5_K + k0/QI5_K];
-    }
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_int_B_J8K8::J) {
-        float tmpd[mma_C::ne] = {0.0f};
-        float tmpm[mma_C::ne] = {0.0f};
-
-#pragma unroll
-        for (int kvdr = 0; kvdr < VDR_Q5_K_Q8_1_MMQ; kvdr += 4) {
-            mma_C   C;
-            mma_B   B;
-            half2 dsB[mma_C::ne/2];
-
-#pragma unroll
-            for (int l = 0; l < mma_B::ne; ++l) {
-                const int j = j0 + mma_B::get_j(l);
-                const int k = (2*k0 + 2*kvdr + mma_B::get_k(l)) % WARP_SIZE;
-
-                B.x[l] = y_qs[j*MMQ_TILE_Y_K + k];
-            }
-#pragma unroll
-            for (int l = 0; l < mma_C::ne/2; ++l) {
-                const int j = j0 + mma_C::get_j(l);
-
-                dsB[l] = y_ds[j*MMQ_TILE_Y_K + ((2*k0 + 2*kvdr)/QI8_1) % (WARP_SIZE/QI8_1)];
-            }
-
-            C.mma_K8(A[kvdr/4], B);
-
-#pragma unroll
-            for (int l = 0; l < mma_C::ne; ++l) {
-                tmpd[l] += (C.x[l]*scA[l/2][kvdr/4]) *  __low2float(dsB[l%2]);
-                tmpm[l] += mA[l/2][kvdr/4]           * __high2float(dsB[l%2]);
-            }
-        }
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            sum[(j0/mma_B::J)*mma_C::ne + l] += __low2float(dmA[l/2])*tmpd[l] - __high2float(dmA[l/2])*tmpm[l];
-        }
-    }
-#else
-    GGML_UNUSED(x_qs); GGML_UNUSED(x_dm); GGML_UNUSED(x_sc); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k0);
-    NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-}
-
-template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q5_K(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride) {
-
-    const int kbx  = 0;           // threadIdx.x / QI5_K
-    const int kqsx = threadIdx.x; // threadIdx.x % QI5_K
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + threadIdx.y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q5_K * bxi = (const block_q5_K *) x + kbx0 + i*stride + kbx;
-        const int ky = QR5_K*kqsx;
-
-        const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx);
-        const int ql0 = (ql >> 0) & 0x0F0F0F0F;
-        const int ql1 = (ql >> 4) & 0x0F0F0F0F;
-
-        const int qh = get_int_from_uint8_aligned(bxi->qh, kqsx % (QI5_K/4));
-        const int qh0 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 0)) << 4) & 0x10101010;
-        const int qh1 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 1)) << 4) & 0x10101010;
-
-        const int kq0 = ky - ky % (QI5_K/2) + threadIdx.x % (QI5_K/4) + 0;
-        const int kq1 = ky - ky % (QI5_K/2) + threadIdx.x % (QI5_K/4) + (QI5_K/4);
-
-        x_qs[i * (2*WARP_SIZE + 1) + kq0] = ql0 | qh0;
-        x_qs[i * (2*WARP_SIZE + 1) + kq1] = ql1 | qh1;
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI5_K;  // == 1 if QK_K == 256
-    const int kbxd = threadIdx.x % blocks_per_tile_x_row; // == 0 if QK_K == 256
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_K) {
-        int i = (i0 + threadIdx.y * QI5_K + threadIdx.x / blocks_per_tile_x_row) % mmq_y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q5_K * bxi = (const block_q5_K *) x + kbx0 + i*stride + kbxd;
-
-        x_dm[i * (WARP_SIZE/QI5_K) + i / QI5_K + kbxd] = bxi->dm;
-    }
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
-        int i = (i0 + threadIdx.y * 8 + threadIdx.x / (WARP_SIZE/8)) % mmq_y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q5_K * bxi = (const block_q5_K *) x + kbx0 + i*stride + (threadIdx.x % (WARP_SIZE/8)) / (QI5_K/8);
-
-        const int * scales = (const int *) bxi->scales;
-
-        const int ksc = threadIdx.x % (WARP_SIZE/8);
-
-        // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8
-        int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits
-        scales8    |= (scales[ksc/2]              >> (2 * (ksc % 2)))       & 0x30303030; // upper 2 bits
-
-        x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8;
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q5_K_q8_1_dp4a(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-
-    const int   * y_qs  = (const int   *) y + 4;
-    const half2 * y_ds  = (const half2 *) y;
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k0/16]) + 2 * ((k0 % 16) / 8);
-
-            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q5_K_q8_1_impl_mmq(
-                &x_qs[i*(QR5_K*WARP_SIZE + 1) + QR5_K*k0], &y_qs[j*MMQ_TILE_Y_K + (QR5_K*k0) % WARP_SIZE], sc, sc+8,
-                x_dm[i*(WARP_SIZE/QI5_K) + i/QI5_K], &y_ds[j*MMQ_TILE_Y_K + ((QR5_K*k0) % WARP_SIZE)/QI8_1]);
-        }
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q5_K_q8_1_mma(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-#ifdef INT8_MMA_AVAILABLE
-
-    typedef mma_int_A_I16K8 mma_A;
-    typedef mma_int_B_J8K8  mma_B;
-    typedef mma_int_C_I16J8 mma_C;
-
-    const int   * y_qs = (const int   *) y + 4;
-    const half2 * y_ds = (const half2 *) y;
-
-    const int i0 = threadIdx.y*mma_A::I;
-    static_assert(nwarps*mma_A::I == mmq_y, "nwarps*mma_A::I != mmq_y");
-
-    mma_A   A[2];
-    int   scA[mma_C::ne/2][2];
-    int    mA[mma_C::ne/2][2];
-    half2 dmA[mma_C::ne/2];
-#pragma unroll
-    for (int kvdr = 0; kvdr < VDR_Q5_K_Q8_1_MMQ; kvdr += 4) {
-#pragma unroll
-        for (int l = 0; l < mma_A::ne; ++l) {
-            const int i = i0 + mma_A::get_i(l);
-            const int k = QR5_K*k0 + QR5_K*kvdr + mma_A::get_k(l);
-
-            A[kvdr/4].x[l] = x_qs[i*(QR5_K*WARP_SIZE + 1) + k];
-        }
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne/2; ++l) {
-            const int i = i0 + mma_C::get_i(2*l);
-
-            const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k0/16]) + 2 * ((k0 % 16) / 8);
-            const uint8_t *  m = sc + 8;
-
-            scA[l][kvdr/4] = sc[kvdr/4];
-            mA[l][kvdr/4]  =  m[kvdr/4];
-        }
-    }
-
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-        dmA[l] = x_dm[i*(WARP_SIZE/QI5_K) + i/QI5_K + k0/QI5_K];
-    }
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_int_B_J8K8::J) {
-        float tmpd[mma_C::ne] = {0.0f};
-        float tmpm[mma_C::ne] = {0.0f};
-
-#pragma unroll
-        for (int kvdr = 0; kvdr < VDR_Q5_K_Q8_1_MMQ; kvdr += 4) {
-            mma_C   C;
-            mma_B   B;
-            half2 dsB[mma_C::ne/2];
-
-#pragma unroll
-            for (int l = 0; l < mma_B::ne; ++l) {
-                const int j = j0 + mma_B::get_j(l);
-                const int k = (2*k0 + 2*kvdr + mma_B::get_k(l)) % WARP_SIZE;
-
-                B.x[l] = y_qs[j*MMQ_TILE_Y_K + k];
-            }
-#pragma unroll
-            for (int l = 0; l < mma_C::ne/2; ++l) {
-                const int j = j0 + mma_C::get_j(l);
-
-                dsB[l] = y_ds[j*MMQ_TILE_Y_K + ((2*k0 + 2*kvdr)/QI8_1) % (WARP_SIZE/QI8_1)];
-            }
-
-            C.mma_K8(A[kvdr/4], B);
-
-#pragma unroll
-            for (int l = 0; l < mma_C::ne; ++l) {
-                tmpd[l] += (C.x[l]*scA[l/2][kvdr/4]) *  __low2float(dsB[l%2]);
-                tmpm[l] += mA[l/2][kvdr/4]           * __high2float(dsB[l%2]);
-            }
-        }
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            sum[(j0/mma_B::J)*mma_C::ne + l] += __low2float(dmA[l/2])*tmpd[l] - __high2float(dmA[l/2])*tmpm[l];
-        }
-    }
-#else
-    GGML_UNUSED(x_qs); GGML_UNUSED(x_dm); GGML_UNUSED(x_sc); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k0);
-    NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-}
-
-template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q6_K(
-    const char * __restrict__ x, int * __restrict__ x_qs, half2 * __restrict__ x_dm,
-    int * __restrict__ x_sc, const int & kbx0, const int & i_max, const int & stride) {
-
-    const int kbx  = 0;           // threadIdx.x / QI6_K
-    const int kqsx = threadIdx.x; // threadIdx.x % QI6_K
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + threadIdx.y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q6_K * bxi = (const block_q6_K *) x + kbx0 + i*stride + kbx;
-        const int ky = QR6_K*kqsx;
-
-        const int ql = get_int_from_uint8(bxi->ql, kqsx);
-        const int ql0 = (ql >> 0) & 0x0F0F0F0F;
-        const int ql1 = (ql >> 4) & 0x0F0F0F0F;
-
-        const int qh = get_int_from_uint8(bxi->qh, (QI6_K/4) * (kqsx / (QI6_K/2)) + kqsx % (QI6_K/4));
-        const int qh0 = ((qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4)))) << 4) & 0x30303030;
-        const int qh1 =  (qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4))))       & 0x30303030;
-
-        const int kq0 = ky - ky % QI6_K + threadIdx.x % (QI6_K/2) + 0;
-        const int kq1 = ky - ky % QI6_K + threadIdx.x % (QI6_K/2) + (QI6_K/2);
-
-        x_qs[i * (2*WARP_SIZE + 1) + kq0] = __vsubss4(ql0 | qh0, 0x20202020);
-        x_qs[i * (2*WARP_SIZE + 1) + kq1] = __vsubss4(ql1 | qh1, 0x20202020);
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI6_K;  // == 1 if QK_K == 256
-    const int kbxd = threadIdx.x % blocks_per_tile_x_row; // == 0 if QK_K == 256
-    float * x_dmf = (float *) x_dm;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI6_K) {
-        int i = (i0 + threadIdx.y * QI6_K + threadIdx.x / blocks_per_tile_x_row) % mmq_y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q6_K * bxi = (const block_q6_K *) x + kbx0 + i*stride + kbxd;
-
-        x_dmf[i * (WARP_SIZE/QI6_K) + i / QI6_K + kbxd] = bxi->d;
-    }
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
-        int i = (i0 + threadIdx.y * 8 + threadIdx.x / (WARP_SIZE/8)) % mmq_y;
-
-        if (need_check) {
-            i = min(i, i_max);
-        }
-
-        const block_q6_K * bxi = (const block_q6_K *) x + kbx0 + i*stride + (threadIdx.x % (WARP_SIZE/8)) / 4;
-
-        x_sc[i * (WARP_SIZE/8) + i / 8 + threadIdx.x % (WARP_SIZE/8)] = get_int_from_int8(bxi->scales, threadIdx.x % (QI6_K/8));
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q6_K_q8_1_dp4a(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-
-    const float * x_dmf = (const float *) x_dm;
-    const int   * y_qs  = (const int   *) y + 4;
-    const float * y_df  = (const float *) y;
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = j0 + threadIdx.y;
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = i0 + threadIdx.x;
-
-            const int8_t * sc = ((const int8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k0/8]);
-
-            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q6_K_q8_1_impl_mmq(
-                &x_qs[i*(QR6_K*WARP_SIZE + 1) + QR6_K*k0], &y_qs[j*MMQ_TILE_Y_K + (QR6_K*k0) % WARP_SIZE], sc,
-                x_dmf[i*(WARP_SIZE/QI6_K) + i/QI6_K], &y_df[j*MMQ_TILE_Y_K + ((QR6_K*k0) % WARP_SIZE)/QI8_1]);
-        }
-    }
-}
-
-template <int mmq_x, int mmq_y, int nwarps>
-static __device__ __forceinline__ void vec_dot_q6_K_q8_1_mma(
-    const int * __restrict__ x_qs, const half2 * __restrict__ x_dm, const int * __restrict__ x_sc,
-    const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
-#ifdef INT8_MMA_AVAILABLE
-
-    typedef mma_int_A_I16K4 mma_A;
-    typedef mma_int_B_J8K4  mma_B;
-    typedef mma_int_C_I16J8 mma_C;
-
-    const float * x_df = (const float *) x_dm;
-    const int   * y_qs = (const int   *) y + 4;
-    const float * y_df = (const float *) y;
-
-    const int i0 = threadIdx.y*mma_A::I;
-#ifdef INT8_MMA_AVAILABLE
-    static_assert(nwarps*mma_A::I == mmq_y, "nwarps*mma_A::I != mmq_y");
-#endif // INT8_MMA_AVAILABLE
-
-    mma_A   A[4];
-    int   scA[mma_C::ne/2][4];
-    float  dA[mma_C::ne/2];
-#pragma unroll
-    for (int kvdr = 0; kvdr < VDR_Q6_K_Q8_1_MMQ; kvdr += 4) {
-#pragma unroll
-        for (int l = 0; l < mma_A::ne; ++l) {
-            const int i = i0 + mma_A::get_i(l);
-            const int k = QR6_K*k0 + QR6_K*kvdr + mma_A::get_k(l);
-
-            A[kvdr/2 + 0].x[l] = x_qs[i*(QR6_K*WARP_SIZE + 1) + k + 0];
-            A[kvdr/2 + 1].x[l] = x_qs[i*(QR6_K*WARP_SIZE + 1) + k + mma_A::K];
-        }
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne/2; ++l) {
-            const int i = i0 + mma_C::get_i(2*l);
-
-            const int8_t * sc = ((const int8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k0/8]);
-
-            scA[l][kvdr/2 + 0] = sc[kvdr/2 + 0];
-            scA[l][kvdr/2 + 1] = sc[kvdr/2 + 1];
-        }
-    }
-
-#pragma unroll
-    for (int l = 0; l < mma_C::ne/2; ++l) {
-        const int i = i0 + mma_C::get_i(2*l);
-
-        dA[l] = x_df[i*(WARP_SIZE/QI6_K) + i/QI6_K + k0/QI6_K];
-    }
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_int_B_J8K8::J) {
-        float tmp[mma_C::ne] = {0.0f};
-
-#pragma unroll
-        for (int kvdr = 0; kvdr < VDR_Q6_K_Q8_1_MMQ; kvdr += 4) {
-            mma_C C[2];
-            mma_B B[2];
-            float dB[mma_C::ne/2];
-
-#pragma unroll
-            for (int l = 0; l < mma_B::ne; ++l) {
-                const int j = j0 + mma_B::get_j(l);
-                const int k = (2*k0 + 2*kvdr + mma_B::get_k(l)) % WARP_SIZE;
-
-                B[0].x[l] = y_qs[j*MMQ_TILE_Y_K + k + 0];
-                B[1].x[l] = y_qs[j*MMQ_TILE_Y_K + k + mma_B::K];
-            }
-#pragma unroll
-            for (int l = 0; l < mma_C::ne/2; ++l) {
-                const int j = j0 + mma_C::get_j(l);
-
-                dB[l] = y_df[j*MMQ_TILE_Y_K + ((2*k0 + 2*kvdr)/QI8_1) % (WARP_SIZE/QI8_1)];
-            }
-
-            C[0].mma_K4(A[kvdr/2 + 0], B[0]);
-            C[1].mma_K4(A[kvdr/2 + 1], B[1]);
-
-#pragma unroll
-            for (int l = 0; l < mma_C::ne; ++l) {
-                tmp[l] += (C[0].x[l]*scA[l/2][kvdr/2 + 0] + C[1].x[l]*scA[l/2][kvdr/2 + 1])*dB[l%2];
-            }
-        }
-
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            sum[(j0/mma_B::J)*mma_C::ne + l] += tmp[l]*dA[l/2];
-        }
-    }
-#else
-    GGML_UNUSED(x_qs); GGML_UNUSED(x_dm); GGML_UNUSED(x_sc); GGML_UNUSED(y); GGML_UNUSED(sum); GGML_UNUSED(k0);
-    NO_DEVICE_CODE;
-#endif // INT8_MMA_AVAILABLE
-}
-
-template<int mmq_x, int mmq_y, int nwarps, bool need_check>
-static __device__ __forceinline__ void mmq_write_back_dp4a(const float * __restrict__ sum, float * __restrict__ dst, const int & ne0, const int & ne1) {
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
-        const int j = blockIdx.y*mmq_x + j0 + threadIdx.y;
-
-        if (j >= ne1) {
-            return;
-        }
-
-#pragma unroll
-        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
-            const int i = blockIdx.x*mmq_y + i0 + threadIdx.x;
-
-            if (need_check && i >= ne0) {
-                continue;
-            }
-
-            dst[j*ne0 + i] = sum[(j0/nwarps) * (mmq_y/WARP_SIZE) + i0/WARP_SIZE];
-        }
-    }
-}
-
-template<int mmq_x, int mmq_y, int nwarps, bool need_check>
-static __device__ __forceinline__ void mmq_write_back_mma(const float * __restrict__ sum, float * __restrict__ dst, const int & ne0, const int & ne1) {
-    typedef mma_int_C_I16J8 mma_C;
-
-    const int i0 = threadIdx.y*mma_C::I;
-#ifdef INT8_MMA_AVAILABLE
-    static_assert(nwarps*mma_C::I == mmq_y, "nwarps*mma_C::I != mmq_y");
-#endif // INT8_MMA_AVAILABLE
-
-#pragma unroll
-    for (int j0 = 0; j0 < mmq_x; j0 += mma_C::J) {
-#pragma unroll
-        for (int l = 0; l < mma_C::ne; ++l) {
-            const int j = blockIdx.y*mmq_x + j0 + mma_C::get_j(l);
-
-            if (j >= ne1) {
-                continue;
-            }
-
-            const int i = blockIdx.x*mmq_y + i0 + mma_C::get_i(l);
-
-            if (need_check && i >= ne0) {
-                continue;
-            }
-
-            dst[j*ne0 + i] = sum[(j0/mma_C::J)*mma_C::ne + l];
-        }
-    }
-}
-
-// -------------------------------------------------------------------------------------------------------------------------------------
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check, ggml_type type>
-struct mmq_type_traits;
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check>
-struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q4_0> {
-    static constexpr int              vdr          = VDR_Q4_0_Q8_1_MMQ;
-    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q4_0<mmq_y, nwarps, need_check>;
-    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q4_0_q8_1_mma<mmq_x, mmq_y, nwarps>;
-    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q4_0_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
-};
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check>
-struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q4_1> {
-    static constexpr int              vdr          = VDR_Q4_1_Q8_1_MMQ;
-    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q4_1<mmq_y, nwarps, need_check>;
-    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q4_1_q8_1_mma<mmq_x, mmq_y, nwarps>;
-    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q4_1_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
-};
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check>
-struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q5_0> {
-    static constexpr int              vdr          = VDR_Q5_0_Q8_1_MMQ;
-    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q5_0<mmq_y, nwarps, need_check>;
-    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q5_0_q8_1_mma<mmq_x, mmq_y, nwarps>;
-    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q5_0_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
-};
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check>
-struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q5_1> {
-    static constexpr int              vdr          = VDR_Q5_1_Q8_1_MMQ;
-    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q5_1<mmq_y, nwarps, need_check>;
-    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q5_1_q8_1_mma<mmq_x, mmq_y, nwarps>;
-    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q5_1_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
-};
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check>
-struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q8_0> {
-    static constexpr int              vdr          = VDR_Q8_0_Q8_1_MMQ;
-    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q8_0<mmq_y, nwarps, need_check>;
-    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q8_0_q8_1_mma<mmq_x, mmq_y, nwarps>;
-    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q8_0_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
-};
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check>
-struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q2_K> {
-    static constexpr int              vdr          = VDR_Q2_K_Q8_1_MMQ;
-    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q2_K<mmq_y, nwarps, need_check>;
-    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q2_K_q8_1_mma<mmq_x, mmq_y, nwarps>;
-    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q2_K_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
-};
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check>
-struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q3_K> {
-    static constexpr int              vdr          = VDR_Q3_K_Q8_1_MMQ;
-    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q3_K<mmq_y, nwarps, need_check>;
-    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q3_K_q8_1_mma<mmq_x, mmq_y, nwarps>;
-    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q3_K_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
-};
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check>
-struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q4_K> {
-    static constexpr int              vdr          = VDR_Q4_K_Q8_1_MMQ;
-    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q4_K<mmq_y, nwarps, need_check>;
-    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q4_K_q8_1_mma<mmq_x, mmq_y, nwarps>;
-    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q4_K_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
-};
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check>
-struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q5_K> {
-    static constexpr int              vdr          = VDR_Q5_K_Q8_1_MMQ;
-    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q5_K<mmq_y, nwarps, need_check>;
-    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q5_K_q8_1_mma<mmq_x, mmq_y, nwarps>;
-    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q5_K_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
-};
-
-template <int mmq_x, int mmq_y, int nwarps, bool need_check>
-struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q6_K> {
-    static constexpr int              vdr          = VDR_Q6_K_Q8_1_MMQ;
-    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q6_K<mmq_y, nwarps, need_check>;
-    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q6_K_q8_1_mma<mmq_x, mmq_y, nwarps>;
-    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q6_K_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
-};
-
-static bool mmq_need_sum(const ggml_type type_x) {
-    switch (type_x) {
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-            return true;
-        case GGML_TYPE_Q5_0:
-            return false;
-        case GGML_TYPE_Q5_1:
-            return true;
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-            return false;
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-            return true;
-        case GGML_TYPE_Q6_K:
-            return false;
-        default:
-            GGML_ASSERT(false);
-            break;
-    }
-    return false;
-}
-
-template <ggml_type type, int mmq_x, int nwarps, bool need_check>
-#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-#if defined(RDNA3) || defined(RDNA2)
-    __launch_bounds__(WARP_SIZE*nwarps, 2)
-#endif // defined(RDNA3) || defined(RDNA2)
-#else
-#if __CUDA_ARCH__ >= CC_VOLTA
-    __launch_bounds__(WARP_SIZE*nwarps, 1)
-#else
-    __launch_bounds__(WARP_SIZE*nwarps, 2)
-#endif // __CUDA_ARCH__ >= CC_VOLTA
-#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
-static __global__ void mul_mat_q(
-    const char * __restrict__ x, const char * __restrict__ yc, float * __restrict__ dst,
-    const int ne00, const int ne01, const int stride01, const int ne10, const int ne11, const int stride11, const int ne0) {
-
-    // Skip unused template specializations for faster compilation:
-    if (mmq_x > get_mmq_x_max_device()) {
-        NO_DEVICE_CODE;
-        return;
-    }
-
-    constexpr int              qk         = ggml_cuda_type_traits<type>::qk;
-    constexpr int              qr         = ggml_cuda_type_traits<type>::qr;
-    constexpr int              qi         = ggml_cuda_type_traits<type>::qi;
-    constexpr int              mmq_y      = get_mmq_y_device(mmq_x);
-    constexpr int              vdr        = mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, type>::vdr;
-    constexpr load_tiles_mmq_t load_tiles = mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, type>::load_tiles;
-
-#ifdef INT8_MMA_AVAILABLE
-    constexpr vec_dot_mmq_t    vec_dot    = mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, type>::vec_dot_mma;
-    constexpr mmq_write_back_t write_back = mmq_write_back_mma<mmq_x, mmq_y, nwarps, need_check>;
-#else
-    constexpr vec_dot_mmq_t    vec_dot    = mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, type>::vec_dot_dp4a;
-    constexpr mmq_write_back_t write_back = mmq_write_back_dp4a<mmq_x, mmq_y, nwarps, need_check>;
-#endif // INT8_MMA_AVAILABLE
-
-    constexpr tile_x_sizes txs = get_tile_x_sizes_device<mmq_y>(type);
-
-    extern __shared__ char data_mul_mat_q[];
-    int   * tile_x_qs = (int   *)  data_mul_mat_q;
-    half2 * tile_x_dm = (half2 *) (tile_x_qs + txs.qs);
-    int   * tile_x_sc = (int   *) (tile_x_dm + txs.dm);
-    int   * tile_y    = (int   *) (tile_x_sc + txs.sc); // [mmq_x * (WARP_SIZE + WARP_SIZE/QI8_1)]
-
-    const int blocks_per_row_x = ne00 / qk;
-    const int blocks_per_warp = WARP_SIZE / qi;
-
-    const int & ne1 = ne11;
-
-    const int tile_x_max_i = ne01 - blockIdx.x*mmq_y - 1;
-
-    const int * y = (const int *) yc + blockIdx.y*(mmq_x*sizeof(block_q8_1_mmq)/sizeof(int));
-
-    float sum[mmq_x*mmq_y / (nwarps*WARP_SIZE)] = {0.0f};
-
-    for (int kb0 = 0; kb0 < blocks_per_row_x; kb0 += blocks_per_warp) {
-
-        load_tiles(x, tile_x_qs, tile_x_dm, tile_x_sc, stride01*blockIdx.x*mmq_y + kb0, tile_x_max_i, stride01);
-
-#pragma unroll
-        for (int kr = 0; kr < qr; ++kr) {
-            const int * by0 = y + stride11*(kb0*(qk*sizeof(block_q8_1_mmq) / (4*QK8_1*sizeof(int))) + kr*sizeof(block_q8_1_mmq)/sizeof(int));
-#pragma unroll
-            for (int l0 = 0; l0 < mmq_x*MMQ_TILE_Y_K; l0 += nwarps*WARP_SIZE) {
-                int l = l0 + threadIdx.y*WARP_SIZE + threadIdx.x;
-
-                tile_y[l] = by0[l];
-            }
-
-            __syncthreads();
-
-// #pragma unroll // unrolling this loop causes too much register pressure
-            for (int k0 = kr*WARP_SIZE/qr; k0 < (kr+1)*WARP_SIZE/qr; k0 += vdr) {
-                vec_dot(tile_x_qs, tile_x_dm, tile_x_sc, tile_y, sum, k0);
-            }
-
-            __syncthreads();
-        }
-    }
-
-    write_back(sum, dst, ne0, ne1);
-}
-
-struct mmq_args {
-    const char * x; const char * y; float * dst;
-    int64_t ne00; int64_t ne01; int64_t stride01;
-    int64_t ne10; int64_t ne11; int64_t stride11;
-    int64_t ne0;
-};
-
-constexpr int mmq_get_nwarps(int mmq_x) {
-    return mmq_x >= 32 ? 8 : 4;
-}
-
-static int mmq_get_shmem(const ggml_type type, const int mmq_x, const int mmq_y) {
-    const tile_x_sizes txs = get_tile_x_sizes_host(type, mmq_y);
-    const int nwarps = mmq_get_nwarps(mmq_x);
-
-    const int shmem_x = txs.qs*sizeof(int) + txs.dm*sizeof(half2) + txs.sc*sizeof(int);
-    const int shmem_y = mmq_x*WARP_SIZE*sizeof(int) + mmq_x*(WARP_SIZE/QI8_1)*sizeof(half2);
-    return shmem_x + GGML_PAD(shmem_y, nwarps*WARP_SIZE*sizeof(int));
-}
-
-template <ggml_type type, int mmq_x, int nwarps>
-static void launch_mul_mat_q(const mmq_args & args, cudaStream_t stream) {
-    const int id = ggml_cuda_get_device();
-    const int cc = ggml_cuda_info().devices[id].cc;
-    const int mmq_y = get_mmq_y_host(cc, mmq_x);
-
-    const int block_num_x = (args.ne01 + mmq_y - 1) / mmq_y;
-    const int block_num_y = (args.ne11 + mmq_x - 1) / mmq_x;
-    const dim3 block_nums(block_num_x, block_num_y, 1);
-    const dim3 block_dims(WARP_SIZE, nwarps, 1);
-
-    const int shmem = mmq_get_shmem(type, mmq_x, mmq_y);
-
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-    static bool shmem_limit_raised[GGML_CUDA_MAX_DEVICES] = {false};
-    if (!shmem_limit_raised[id]) {
-        CUDA_CHECK(cudaFuncSetAttribute(mul_mat_q<type, mmq_x, nwarps, false>, cudaFuncAttributeMaxDynamicSharedMemorySize, shmem));
-        CUDA_CHECK(cudaFuncSetAttribute(mul_mat_q<type, mmq_x, nwarps, true>,  cudaFuncAttributeMaxDynamicSharedMemorySize, shmem));
-        shmem_limit_raised[id] = true;
-    }
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-
-    if (args.ne01 % mmq_y == 0) {
-        const bool need_check = false;
-        mul_mat_q<type, mmq_x, nwarps, need_check><<<block_nums, block_dims, shmem, stream>>>
-            (args.x, args.y, args.dst, args.ne00, args.ne01, args.stride01, args.ne10, args.ne11, args.stride11, args.ne0);
-    } else {
-        const bool need_check = true;
-        mul_mat_q<type, mmq_x, nwarps, need_check><<<block_nums, block_dims, shmem, stream>>>
-            (args.x, args.y, args.dst, args.ne00, args.ne01, args.stride01, args.ne10, args.ne11, args.stride11, args.ne0);
-    }
-}
-
-template <ggml_type type>
-void mul_mat_q_case(const mmq_args & args, cudaStream_t stream) {
-    const int id    = ggml_cuda_get_device();
-    const int nsm   = ggml_cuda_info().devices[id].nsm;
-    const int cc    = ggml_cuda_info().devices[id].cc;
-    const int smpbo = ggml_cuda_info().devices[id].smpbo;
-
-    const int mmq_x_max = get_mmq_x_max_host(cc);
-    const int mmq_y = get_mmq_y_host(cc, mmq_x_max);
-    const int block_num_y = (args.ne01 + mmq_y - 1) / mmq_y;
-
-    int mmq_x_best  = 0;
-    int nwaves_best = INT_MAX;
-
-    for (int mmq_x = 8; mmq_x <= mmq_x_max && nwaves_best > 1; mmq_x += 8) {
-        const int block_num_x = (args.ne11 + mmq_x - 1) / mmq_x;
-        const int nwaves = (block_num_x*block_num_y + nsm - 1) / nsm;
-
-        if (nwaves < nwaves_best && mmq_get_shmem(type, mmq_x, mmq_y) <= smpbo) {
-            mmq_x_best  = mmq_x;
-            nwaves_best = nwaves;
-        }
-    }
-
-    switch (mmq_x_best) {
-        case   8:
-            launch_mul_mat_q<type,   8, mmq_get_nwarps(  8)>(args, stream);
-            break;
-        case  16:
-            launch_mul_mat_q<type,  16, mmq_get_nwarps( 16)>(args, stream);
-            break;
-        case  24:
-            launch_mul_mat_q<type,  24, mmq_get_nwarps( 24)>(args, stream);
-            break;
-        case  32:
-            launch_mul_mat_q<type,  32, mmq_get_nwarps( 32)>(args, stream);
-            break;
-        case  40:
-            launch_mul_mat_q<type,  40, mmq_get_nwarps( 40)>(args, stream);
-            break;
-        case  48:
-            launch_mul_mat_q<type,  48, mmq_get_nwarps( 48)>(args, stream);
-            break;
-        case  56:
-            launch_mul_mat_q<type,  56, mmq_get_nwarps( 56)>(args, stream);
-            break;
-        case  64:
-            launch_mul_mat_q<type,  64, mmq_get_nwarps( 64)>(args, stream);
-            break;
-        case  72:
-            launch_mul_mat_q<type,  72, mmq_get_nwarps( 72)>(args, stream);
-            break;
-        case  80:
-            launch_mul_mat_q<type,  80, mmq_get_nwarps( 80)>(args, stream);
-            break;
-        case  88:
-            launch_mul_mat_q<type,  88, mmq_get_nwarps( 88)>(args, stream);
-            break;
-        case  96:
-            launch_mul_mat_q<type,  96, mmq_get_nwarps( 96)>(args, stream);
-            break;
-        case 104:
-            launch_mul_mat_q<type, 104, mmq_get_nwarps(104)>(args, stream);
-            break;
-        case 112:
-            launch_mul_mat_q<type, 112, mmq_get_nwarps(112)>(args, stream);
-            break;
-        case 120:
-            launch_mul_mat_q<type, 120, mmq_get_nwarps(120)>(args, stream);
-            break;
-        case 128:
-            launch_mul_mat_q<type, 128, mmq_get_nwarps(128)>(args, stream);
-            break;
-        default:
-            fprintf(stderr, "mmq_x_best=%d\n", mmq_x_best);
-            GGML_ASSERT(false);
-            break;
-    }
-}
-
-#define DECL_MMQ_CASE(type)                                                        \
-    template void mul_mat_q_case<type>(const mmq_args & args, cudaStream_t stream) \
-
-extern DECL_MMQ_CASE(GGML_TYPE_Q4_0);
-extern DECL_MMQ_CASE(GGML_TYPE_Q4_1);
-extern DECL_MMQ_CASE(GGML_TYPE_Q5_0);
-extern DECL_MMQ_CASE(GGML_TYPE_Q5_1);
-extern DECL_MMQ_CASE(GGML_TYPE_Q8_0);
-extern DECL_MMQ_CASE(GGML_TYPE_Q2_K);
-extern DECL_MMQ_CASE(GGML_TYPE_Q3_K);
-extern DECL_MMQ_CASE(GGML_TYPE_Q4_K);
-extern DECL_MMQ_CASE(GGML_TYPE_Q5_K);
-extern DECL_MMQ_CASE(GGML_TYPE_Q6_K);
-
-// -------------------------------------------------------------------------------------------------------------------------
-
-void ggml_cuda_op_mul_mat_q(
-    ggml_backend_cuda_context & ctx,
-    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
-    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
-    const int64_t src1_padded_row_size, cudaStream_t stream);
-
-bool ggml_cuda_supports_mmq(enum ggml_type type);
diff --git a/ggml-cuda/mmvq.cu b/ggml-cuda/mmvq.cu
deleted file mode 100644 (file)
index e8d1571..0000000
+++ /dev/null
@@ -1,419 +0,0 @@
-#include "mmvq.cuh"
-#include "vecdotq.cuh"
-
-typedef float (*vec_dot_q_cuda_t)(const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs);
-
-static constexpr __device__ vec_dot_q_cuda_t get_vec_dot_q_cuda(ggml_type type) {
-    return type == GGML_TYPE_Q4_0 ? vec_dot_q4_0_q8_1 :
-        type == GGML_TYPE_Q4_1 ? vec_dot_q4_1_q8_1 :
-        type == GGML_TYPE_Q5_0 ? vec_dot_q5_0_q8_1 :
-        type == GGML_TYPE_Q5_1 ? vec_dot_q5_1_q8_1 :
-        type == GGML_TYPE_Q8_0 ? vec_dot_q8_0_q8_1 :
-        type == GGML_TYPE_Q2_K ? vec_dot_q2_K_q8_1 :
-        type == GGML_TYPE_Q3_K ? vec_dot_q3_K_q8_1 :
-        type == GGML_TYPE_Q4_K ? vec_dot_q4_K_q8_1 :
-        type == GGML_TYPE_Q5_K ? vec_dot_q5_K_q8_1 :
-        type == GGML_TYPE_Q6_K ? vec_dot_q6_K_q8_1 :
-        type == GGML_TYPE_IQ2_XXS ? vec_dot_iq2_xxs_q8_1 :
-        type == GGML_TYPE_IQ2_XS ? vec_dot_iq2_xs_q8_1 :
-        type == GGML_TYPE_IQ2_S ? vec_dot_iq2_s_q8_1 :
-        type == GGML_TYPE_IQ3_XXS ? vec_dot_iq3_xxs_q8_1 :
-        type == GGML_TYPE_IQ1_S ? vec_dot_iq1_s_q8_1 :
-        type == GGML_TYPE_IQ1_M ? vec_dot_iq1_m_q8_1 :
-        type == GGML_TYPE_IQ4_NL ? vec_dot_iq4_nl_q8_1 :
-        type == GGML_TYPE_IQ4_XS ? vec_dot_iq4_xs_q8_1 :
-        type == GGML_TYPE_IQ3_S ? vec_dot_iq3_s_q8_1 :
-        nullptr;
-}
-
-static constexpr __device__ int get_vdr_mmvq(ggml_type type) {
-    return type == GGML_TYPE_Q4_0 ? VDR_Q4_0_Q8_1_MMVQ :
-        type == GGML_TYPE_Q4_1 ? VDR_Q4_1_Q8_1_MMVQ :
-        type == GGML_TYPE_Q5_0 ? VDR_Q5_0_Q8_1_MMVQ :
-        type == GGML_TYPE_Q5_1 ? VDR_Q5_1_Q8_1_MMVQ :
-        type == GGML_TYPE_Q8_0 ? VDR_Q8_0_Q8_1_MMVQ :
-        type == GGML_TYPE_Q2_K ? VDR_Q2_K_Q8_1_MMVQ :
-        type == GGML_TYPE_Q3_K ? VDR_Q3_K_Q8_1_MMVQ :
-        type == GGML_TYPE_Q4_K ? VDR_Q4_K_Q8_1_MMVQ :
-        type == GGML_TYPE_Q5_K ? VDR_Q5_K_Q8_1_MMVQ :
-        type == GGML_TYPE_Q6_K ? VDR_Q6_K_Q8_1_MMVQ :
-        type == GGML_TYPE_IQ4_NL ? VDR_Q4_K_Q8_1_MMVQ :
-        1;
-}
-
-template <ggml_type type, int ncols_y>
-#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-// tell the compiler to use as many registers as it wants, see nwarps definition below
-__launch_bounds__((ncols_y <= 4 ? 4 : 2)*WARP_SIZE, 1)
-#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
-static __global__ void mul_mat_vec_q(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int nrows_dst) {
-
-    constexpr int qk  = ggml_cuda_type_traits<type>::qk;
-    constexpr int qi  = ggml_cuda_type_traits<type>::qi;
-    constexpr int vdr = get_vdr_mmvq(type);
-
-    constexpr vec_dot_q_cuda_t vec_dot_q_cuda = get_vec_dot_q_cuda(type);
-
-#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) && (defined(RDNA2) || defined(RDNA3))
-    constexpr int nwarps              = 1;
-    constexpr int rows_per_cuda_block = 1;
-#else
-    constexpr int nwarps              = ncols_y <= 4 ? 4 : 2;
-    constexpr int rows_per_cuda_block = ncols_y == 1 ? 1 : 2;
-#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) && !defined(RDNA2) && !defined(RDNA3)
-
-    const     int tid = WARP_SIZE*threadIdx.y + threadIdx.x;
-    const     int row0 = rows_per_cuda_block*blockIdx.x;
-    const     int blocks_per_row_x = ncols_x / qk;
-    const     int blocks_per_col_y = nrows_y / QK8_1;
-    constexpr int blocks_per_iter = vdr * nwarps*WARP_SIZE / qi;
-
-// partial sum for each thread
-    float tmp[ncols_y][rows_per_cuda_block] = {0.0f};
-
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int kbx = tid / (qi/vdr); kbx < blocks_per_row_x; kbx += blocks_per_iter) {
-        const int kby = kbx * (qk/QK8_1); // y block index that aligns with kbx
-
-        // x block quant index when casting the quants to int
-        const int kqs = vdr * (tid % (qi/vdr));
-
-#pragma unroll
-        for (int j = 0; j < ncols_y; ++j) {
-#pragma unroll
-            for (int i = 0; i < rows_per_cuda_block; ++i) {
-                tmp[j][i] += vec_dot_q_cuda(vx, &y[j*blocks_per_col_y + kby], (row0 + i)*blocks_per_row_x + kbx, kqs);
-            }
-        }
-    }
-
-    __shared__ float tmp_shared[nwarps-1 > 0 ? nwarps-1 : 1][ncols_y][rows_per_cuda_block][WARP_SIZE];
-    if (threadIdx.y > 0) {
-#pragma unroll
-        for (int j = 0; j < ncols_y; ++j) {
-#pragma unroll
-            for (int i = 0; i < rows_per_cuda_block; ++i) {
-                tmp_shared[threadIdx.y-1][j][i][threadIdx.x] = tmp[j][i];
-            }
-        }
-    }
-    __syncthreads();
-    if (threadIdx.y > 0) {
-        return;
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int j = 0; j < ncols_y; ++j) {
-#pragma unroll
-        for (int i = 0; i < rows_per_cuda_block; ++i) {
-#pragma unroll
-            for (int l = 0; l < nwarps-1; ++l) {
-                tmp[j][i] += tmp_shared[l][j][i][threadIdx.x];
-            }
-            tmp[j][i] = warp_reduce_sum(tmp[j][i]);
-        }
-
-        if (threadIdx.x < rows_per_cuda_block && (rows_per_cuda_block == 1 || row0 + threadIdx.x < nrows_dst)) {
-            dst[j*nrows_dst + row0 + threadIdx.x] = tmp[j][threadIdx.x];
-        }
-    }
-}
-
-template <ggml_type type>
-static void mul_mat_vec_q_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    GGML_ASSERT(ncols_x % ggml_blck_size(type) == 0);
-    GGML_ASSERT(ncols_y <= MMVQ_MAX_BATCH_SIZE);
-
-    int id = ggml_cuda_get_device();
-
-    int64_t nwarps = 1;
-    int64_t rows_per_cuda_block = 1;
-
-    if (ggml_cuda_info().devices[id].cc < CC_RDNA2) { // NVIDIA and AMD older than RDNA2
-        switch(ncols_y) {
-            case 1:
-                nwarps = 4;
-                rows_per_cuda_block = 1;
-                break;
-            case 2:
-            case 3:
-            case 4:
-                nwarps = 4;
-                rows_per_cuda_block = 2;
-                break;
-            case 5:
-            case 6:
-            case 7:
-            case 8:
-                nwarps = 2;
-                rows_per_cuda_block = 2;
-                break;
-            default:
-                GGML_ASSERT(false);
-                break;
-        }
-    }
-    const int64_t nblocks = (nrows_x + rows_per_cuda_block - 1) / rows_per_cuda_block;
-    const dim3 block_nums(nblocks, 1, 1);
-    const dim3 block_dims(WARP_SIZE, nwarps, 1);
-
-    switch (ncols_y) {
-        case 1:
-            mul_mat_vec_q<type, 1><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
-            break;
-        case 2:
-            mul_mat_vec_q<type, 2><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
-            break;
-        case 3:
-            mul_mat_vec_q<type, 3><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
-            break;
-        case 4:
-            mul_mat_vec_q<type, 4><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
-            break;
-        case 5:
-            mul_mat_vec_q<type, 5><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
-            break;
-        case 6:
-            mul_mat_vec_q<type, 6><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
-            break;
-        case 7:
-            mul_mat_vec_q<type, 7><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
-            break;
-        case 8:
-            mul_mat_vec_q<type, 8><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
-            break;
-        default:
-            GGML_ASSERT(false);
-            break;
-    }
-}
-
-static void mul_mat_vec_q4_0_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_Q4_0>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_q4_1_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_Q4_1>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_q5_0_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_Q5_0>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_q5_1_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_Q5_1>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_q8_0_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_Q8_0>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_q2_K_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_Q2_K>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_q3_K_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_Q3_K>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_q4_K_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_Q4_K>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_q5_K_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_Q5_K>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_q6_K_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_Q6_K>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_iq2_xxs_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_IQ2_XXS>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_iq2_xs_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_IQ2_XS>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_iq2_s_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_IQ2_S>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_iq3_xxs_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_IQ3_XXS>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_iq1_s_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_IQ1_S>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_iq1_m_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_IQ1_M>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_iq4_nl_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_IQ4_NL>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_iq4_xs_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_IQ4_XS>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-static void mul_mat_vec_iq3_s_q8_1_cuda(
-    const void * vx, const void * vy, float * dst,
-    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
-
-    mul_mat_vec_q_cuda<GGML_TYPE_IQ3_S>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
-}
-
-void ggml_cuda_op_mul_mat_vec_q(
-    ggml_backend_cuda_context & ctx,
-    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
-    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
-    const int64_t src1_padded_row_size, cudaStream_t stream) {
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t row_diff = row_high - row_low;
-
-    const int64_t ne10 = src1->ne[0];
-    GGML_ASSERT(ne10 % QK8_1 == 0);
-
-    const int64_t ne0 = dst->ne[0];
-
-    int id = ggml_cuda_get_device();
-
-    // the main device has a larger memory buffer to hold the results from all GPUs
-    // nrows_dst == nrows of the matrix that the kernel writes into
-    const int64_t nrows_dst = id == ctx.device ? ne0 : row_diff;
-
-    switch (src0->type) {
-        case GGML_TYPE_Q4_0:
-            mul_mat_vec_q4_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q4_1:
-            mul_mat_vec_q4_1_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q5_0:
-            mul_mat_vec_q5_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q5_1:
-            mul_mat_vec_q5_1_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q8_0:
-            mul_mat_vec_q8_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q2_K:
-            mul_mat_vec_q2_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q3_K:
-            mul_mat_vec_q3_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q4_K:
-            mul_mat_vec_q4_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q5_K:
-            mul_mat_vec_q5_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q6_K:
-            mul_mat_vec_q6_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_IQ2_XXS:
-            mul_mat_vec_iq2_xxs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_IQ2_XS:
-            mul_mat_vec_iq2_xs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_IQ2_S:
-            mul_mat_vec_iq2_s_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_IQ3_XXS:
-            mul_mat_vec_iq3_xxs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_IQ1_S:
-            mul_mat_vec_iq1_s_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_IQ1_M:
-            mul_mat_vec_iq1_m_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_IQ4_NL:
-            mul_mat_vec_iq4_nl_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_IQ4_XS:
-            mul_mat_vec_iq4_xs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        case GGML_TYPE_IQ3_S:
-            mul_mat_vec_iq3_s_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
-            break;
-        default:
-            GGML_ASSERT(false);
-            break;
-    }
-
-    GGML_UNUSED(src1);
-    GGML_UNUSED(dst);
-    GGML_UNUSED(src1_ddf_i);
-    GGML_UNUSED(src1_ncols);
-    GGML_UNUSED(src1_padded_row_size);
-}
diff --git a/ggml-cuda/mmvq.cuh b/ggml-cuda/mmvq.cuh
deleted file mode 100644 (file)
index 88c42c4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "common.cuh"
-
-void ggml_cuda_op_mul_mat_vec_q(
-    ggml_backend_cuda_context & ctx,
-    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
-    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
-    const int64_t src1_padded_row_size, cudaStream_t stream);
diff --git a/ggml-cuda/norm.cu b/ggml-cuda/norm.cu
deleted file mode 100644 (file)
index 30866d5..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-#include "norm.cuh"
-
-template <int block_size>
-static __global__ void norm_f32(const float * x, float * dst, const int ncols, const float eps) {
-    const int row = blockIdx.x*blockDim.y + threadIdx.y;
-    const int tid = threadIdx.x;
-
-    float2 mean_var = make_float2(0.f, 0.f);
-
-    for (int col = tid; col < ncols; col += block_size) {
-        const float xi = x[row*ncols + col];
-        mean_var.x += xi;
-        mean_var.y += xi * xi;
-    }
-
-    // sum up partial sums
-    mean_var = warp_reduce_sum(mean_var);
-    if (block_size > WARP_SIZE) {
-        __shared__ float2 s_sum[32];
-        int warp_id = threadIdx.x / WARP_SIZE;
-        int lane_id = threadIdx.x % WARP_SIZE;
-        if (lane_id == 0) {
-            s_sum[warp_id] = mean_var;
-        }
-        __syncthreads();
-        mean_var = s_sum[lane_id];
-        mean_var = warp_reduce_sum(mean_var);
-    }
-
-    const float mean = mean_var.x / ncols;
-    const float var = mean_var.y / ncols - mean * mean;
-    const float inv_std = rsqrtf(var + eps);
-
-    for (int col = tid; col < ncols; col += block_size) {
-        dst[row*ncols + col] = (x[row*ncols + col] - mean) * inv_std;
-    }
-}
-
-template <int block_size>
-static __global__ void group_norm_f32(const float * x, float * dst, const int group_size, const int ne_elements, const float eps) {
-    // blockIdx.x: num_groups idx
-    // threadIdx.x: block_size idx
-    int start = blockIdx.x * group_size;
-    int end = start + group_size;
-
-    start += threadIdx.x;
-
-    if (end >= ne_elements) {
-        end = ne_elements;
-    }
-
-    float tmp = 0.0f; // partial sum for thread in warp
-
-    for (int j = start; j < end; j += block_size) {
-        tmp += x[j];
-    }
-
-    tmp = warp_reduce_sum(tmp);
-    if (block_size > WARP_SIZE) {
-        __shared__ float s_sum[32];
-        int warp_id = threadIdx.x / WARP_SIZE;
-        int lane_id = threadIdx.x % WARP_SIZE;
-        if (lane_id == 0) {
-            s_sum[warp_id] = tmp;
-        }
-        __syncthreads();
-        tmp = s_sum[lane_id];
-        tmp = warp_reduce_sum(tmp);
-    }
-
-    float mean = tmp / group_size;
-    tmp = 0.0f;
-
-    for (int j = start; j < end; j += block_size) {
-        float xi = x[j] - mean;
-        dst[j] = xi;
-        tmp += xi * xi;
-    }
-
-    tmp = warp_reduce_sum(tmp);
-    if (block_size > WARP_SIZE) {
-        __shared__ float s_sum[32];
-        int warp_id = threadIdx.x / WARP_SIZE;
-        int lane_id = threadIdx.x % WARP_SIZE;
-        if (lane_id == 0) {
-            s_sum[warp_id] = tmp;
-        }
-        __syncthreads();
-        tmp = s_sum[lane_id];
-        tmp = warp_reduce_sum(tmp);
-    }
-
-    float variance = tmp / group_size;
-    float scale = rsqrtf(variance + eps);
-    for (int j = start; j < end; j += block_size) {
-        dst[j] *= scale;
-    }
-}
-
-template <int block_size>
-static __global__ void rms_norm_f32(const float * x, float * dst, const int ncols, const float eps) {
-    const int row = blockIdx.x*blockDim.y + threadIdx.y;
-    const int tid = threadIdx.x;
-
-    float tmp = 0.0f; // partial sum for thread in warp
-
-    for (int col = tid; col < ncols; col += block_size) {
-        const float xi = x[row*ncols + col];
-        tmp += xi * xi;
-    }
-
-    // sum up partial sums
-    tmp = warp_reduce_sum(tmp);
-    if (block_size > WARP_SIZE) {
-        __shared__ float s_sum[32];
-        int warp_id = threadIdx.x / WARP_SIZE;
-        int lane_id = threadIdx.x % WARP_SIZE;
-        if (lane_id == 0) {
-            s_sum[warp_id] = tmp;
-        }
-        __syncthreads();
-        tmp = s_sum[lane_id];
-        tmp = warp_reduce_sum(tmp);
-    }
-
-    const float mean = tmp / ncols;
-    const float scale = rsqrtf(mean + eps);
-
-    for (int col = tid; col < ncols; col += block_size) {
-        dst[row*ncols + col] = scale * x[row*ncols + col];
-    }
-}
-
-static void norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float eps, cudaStream_t stream) {
-    GGML_ASSERT(ncols % WARP_SIZE == 0);
-    if (ncols < 1024) {
-        const dim3 block_dims(WARP_SIZE, 1, 1);
-        norm_f32<WARP_SIZE><<<nrows, block_dims, 0, stream>>>(x, dst, ncols, eps);
-    } else {
-        const dim3 block_dims(1024, 1, 1);
-        norm_f32<1024><<<nrows, block_dims, 0, stream>>>(x, dst, ncols, eps);
-    }
-}
-
-static void group_norm_f32_cuda(const float * x, float * dst, const int num_groups, const int group_size, const int ne_elements, cudaStream_t stream) {
-    static const float eps = 1e-6f;
-    if (group_size < 1024) {
-        const dim3 block_dims(WARP_SIZE, 1, 1);
-        group_norm_f32<WARP_SIZE><<<num_groups, block_dims, 0, stream>>>(x, dst, group_size, ne_elements, eps);
-    } else {
-        const dim3 block_dims(1024, 1, 1);
-        group_norm_f32<1024><<<num_groups, block_dims, 0, stream>>>(x, dst, group_size, ne_elements, eps);
-    }
-}
-
-static void rms_norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float eps, cudaStream_t stream) {
-    GGML_ASSERT(ncols % WARP_SIZE == 0);
-    if (ncols < 1024) {
-        const dim3 block_dims(WARP_SIZE, 1, 1);
-        rms_norm_f32<WARP_SIZE><<<nrows, block_dims, 0, stream>>>(x, dst, ncols, eps);
-    } else {
-        const dim3 block_dims(1024, 1, 1);
-        rms_norm_f32<1024><<<nrows, block_dims, 0, stream>>>(x, dst, ncols, eps);
-    }
-}
-
-void ggml_cuda_op_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t nrows = ggml_nrows(src0);
-
-    float eps;
-    memcpy(&eps, dst->op_params, sizeof(float));
-
-    norm_f32_cuda(src0_d, dst_d, ne00, nrows, eps, stream);
-}
-
-void ggml_cuda_op_group_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    int num_groups = dst->op_params[0];
-    int group_size = src0->ne[0] * src0->ne[1] * ((src0->ne[2] + num_groups - 1) / num_groups);
-    group_norm_f32_cuda(src0_d, dst_d, num_groups * src0->ne[3], group_size, ggml_nelements(src0), stream);
-}
-
-void ggml_cuda_op_rms_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t nrows = ggml_nrows(src0);
-
-    float eps;
-    memcpy(&eps, dst->op_params, sizeof(float));
-
-    rms_norm_f32_cuda(src0_d, dst_d, ne00, nrows, eps, stream);
-}
diff --git a/ggml-cuda/norm.cuh b/ggml-cuda/norm.cuh
deleted file mode 100644 (file)
index 431a8f7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "common.cuh"
-
-void ggml_cuda_op_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_group_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_rms_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/pad.cu b/ggml-cuda/pad.cu
deleted file mode 100644 (file)
index aba539e..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#include "pad.cuh"
-
-static __global__ void pad_f32(const float * x, float * dst, const int ne0, const int ne00, const int ne01, const int ne02, const int ne03) {
-    // blockIdx.z: idx of ne2*ne3, aka ne02*ne03
-    // blockIdx.y: idx of ne1
-    // blockIDx.x: idx of ne0 / BLOCK_SIZE
-    int nidx = threadIdx.x + blockIdx.x * blockDim.x;
-    if (nidx >= ne0) {
-        return;
-    }
-
-    // operation
-    int offset_dst =
-        nidx +
-        blockIdx.y * ne0 +
-        blockIdx.z * ne0 * gridDim.y;
-    if (nidx < ne00 && blockIdx.y < ne01 && blockIdx.z < ne02*ne03) {
-        int offset_src =
-            nidx +
-            blockIdx.y * ne00 +
-            blockIdx.z * ne00 * ne01;
-        dst[offset_dst] = x[offset_src];
-    } else {
-        dst[offset_dst] = 0.0f;
-    }
-}
-
-static void pad_f32_cuda(const float * x, float * dst,
-    const int ne00, const int ne01, const int ne02, const int ne03,
-    const int ne0, const int ne1, const int ne2, const int ne3, cudaStream_t stream) {
-    int num_blocks = (ne0 + CUDA_PAD_BLOCK_SIZE - 1) / CUDA_PAD_BLOCK_SIZE;
-    dim3 gridDim(num_blocks, ne1, ne2*ne3);
-    pad_f32<<<gridDim, CUDA_PAD_BLOCK_SIZE, 0, stream>>>(x, dst, ne0, ne00, ne01, ne02, ne03);
-}
-
-void ggml_cuda_op_pad(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT(dst->type == GGML_TYPE_F32);
-    GGML_ASSERT(src0->ne[3] == 1 && dst->ne[3] == 1); // just 3D tensors
-
-    pad_f32_cuda(src0_d, dst_d,
-        src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3],
-        dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], stream);
-}
diff --git a/ggml-cuda/pad.cuh b/ggml-cuda/pad.cuh
deleted file mode 100644 (file)
index 8fd386b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_PAD_BLOCK_SIZE 256
-
-void ggml_cuda_op_pad(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/pool2d.cu b/ggml-cuda/pool2d.cu
deleted file mode 100644 (file)
index c6d51e4..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "pool2d.cuh"
-
-template <typename Ti, typename To>
-static  __global__ void pool2d_nchw_kernel(
-        const int ih, const int iw, const int oh, const int ow,
-        const int kh, const int kw, const int sh, const int sw,
-        const int ph, const int pw, const int parallel_elements,
-        const Ti* src, To* dst, const enum ggml_op_pool op) {
-    int idx = threadIdx.x + blockIdx.x * blockDim.x;
-    if (idx >= parallel_elements) {
-        return;
-    }
-
-    const int I_HW = ih * iw;
-    const int O_HW = oh * ow;
-    const int nc = idx / O_HW;
-    const int cur_oh = idx % O_HW / ow;
-    const int cur_ow = idx % O_HW % ow;
-    const Ti* i_ptr = src + nc * I_HW;
-    To* o_ptr = dst + nc * O_HW;
-    const int start_h = cur_oh * sh - ph;
-    const int bh = max(0, start_h);
-    const int eh = min(ih, start_h + kh);
-    const int start_w = cur_ow * sw - pw;
-    const int bw = max(0, start_w);
-    const int ew = min(iw, start_w + kw);
-    const To scale = 1. / (kh * kw);
-    To res = 0;
-
-    switch (op) {
-        case GGML_OP_POOL_AVG: res = 0; break;
-        case GGML_OP_POOL_MAX: res = -FLT_MAX; break;
-        default: assert(false);
-    }
-
-    for (int i = bh; i < eh; i += 1) {
-        for (int j = bw; j < ew; j += 1) {
-#if __CUDA_ARCH__ >= 350
-            Ti cur = __ldg(i_ptr + i * iw + j);
-#else
-            Ti cur = i_ptr[i * iw + j];
-#endif
-            switch (op) {
-                case GGML_OP_POOL_AVG: res += cur * scale; break;
-                case GGML_OP_POOL_MAX: res = max(res, (To)cur); break;
-                default: assert(false);
-            }
-        }
-    }
-    o_ptr[cur_oh * ow + cur_ow] = res;
-}
-
-static void pool2d_nchw_kernel_f32_f32_cuda(
-        const int ih, const int iw, const int oh, const int ow,
-        const int kh, const int kw, const int sh, const int sw,
-        const int ph, const int pw, const int parallel_elements,
-        const float * src, float * dst, const enum ggml_op_pool op,
-        cudaStream_t stream) {
-
-    const int num_blocks = (parallel_elements + CUDA_POOL2D_BLOCK_SIZE - 1) / CUDA_POOL2D_BLOCK_SIZE;
-    dim3 block_nums(num_blocks);
-    pool2d_nchw_kernel<<<block_nums, CUDA_POOL2D_BLOCK_SIZE, 0, stream>>>(ih, iw, oh, ow, kh, kw, sh, sw, ph, pw, parallel_elements, src, dst, op);
-}
-
-void ggml_cuda_op_pool2d(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    const int32_t * opts = (const int32_t *)dst->op_params;
-    enum ggml_op_pool op = static_cast<ggml_op_pool>(opts[0]);
-    const int k0 = opts[1];
-    const int k1 = opts[2];
-    const int s0 = opts[3];
-    const int s1 = opts[4];
-    const int p0 = opts[5];
-    const int p1 = opts[6];
-
-    const int64_t IH = src0->ne[1];
-    const int64_t IW = src0->ne[0];
-
-    const int64_t N = dst->ne[3];
-    const int64_t OC = dst->ne[2];
-    const int64_t OH = dst->ne[1];
-    const int64_t OW = dst->ne[0];
-
-    const int parallel_elements = N * OC * OH * OW;
-
-    pool2d_nchw_kernel_f32_f32_cuda(IH, IW, OH, OW, k1, k0, s1, s0, p1, p0, parallel_elements, src0_d, dst_d, op, stream);
-}
diff --git a/ggml-cuda/pool2d.cuh b/ggml-cuda/pool2d.cuh
deleted file mode 100644 (file)
index 7841292..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_POOL2D_BLOCK_SIZE 256
-
-void ggml_cuda_op_pool2d(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/quantize.cu b/ggml-cuda/quantize.cu
deleted file mode 100644 (file)
index b467868..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#include "quantize.cuh"
-#include <cstdint>
-
-static __global__ void quantize_q8_1(const float * __restrict__ x, void * __restrict__ vy, const int64_t kx, const int64_t kx0_padded) {
-    const int64_t ix0 = (int64_t)blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (ix0 >= kx0_padded) {
-        return;
-    }
-
-    const int64_t ix1 = blockIdx.y;
-
-    const int64_t i_padded = ix1*kx0_padded + ix0;
-
-    block_q8_1 * y = (block_q8_1 *) vy;
-
-    const int64_t ib = i_padded / QK8_1; // block index
-    const int64_t iqs = i_padded % QK8_1; // quant index
-
-    const float xi = ix0 < kx ? x[ix1*kx + ix0] : 0.0f;
-    float amax = fabsf(xi);
-    float sum = xi;
-
-    amax = warp_reduce_max(amax);
-    sum = warp_reduce_sum(sum);
-
-    const float d = amax / 127;
-    const int8_t q = amax == 0.0f ? 0 : roundf(xi / d);
-
-    y[ib].qs[iqs] = q;
-
-    if (iqs > 0) {
-        return;
-    }
-
-    reinterpret_cast<half&>(y[ib].ds.x) = d;
-    reinterpret_cast<half&>(y[ib].ds.y) = sum;
-}
-
-template <bool need_sum>
-static __global__ void quantize_mmq_q8_1(
-    const float * __restrict__ x, void * __restrict__ vy, const int64_t kx0, const int64_t kx1, const int64_t kx0_padded) {
-
-    const int64_t ix0 = (int64_t)blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (ix0 >= kx0_padded) {
-        return;
-    }
-
-    const int64_t ix1 = kx1*blockIdx.z + blockIdx.y;
-
-    block_q8_1_mmq * y = (block_q8_1_mmq *) vy;
-
-    const int64_t ib0 = blockIdx.z*(gridDim.y*gridDim.x*blockDim.x/(4*QK8_1)); // first block of channel
-    const int64_t ib  = ib0 + (ix0 / (4*QK8_1))*kx1 + blockIdx.y;              // block index in channel
-    const int64_t iqs = ix0 % (4*QK8_1);                                       // quant index in block
-
-    const float xi = ix0 < kx0 ? x[ix1*kx0 + ix0] : 0.0f;
-    float amax = fabsf(xi);
-
-    amax = warp_reduce_max(amax);
-
-    float sum;
-    if (need_sum) {
-        sum = warp_reduce_sum(xi);
-    }
-
-    const float d = amax / 127;
-    const int8_t q = amax == 0.0f ? 0 : roundf(xi / d);
-
-    y[ib].qs[iqs] = q;
-
-    if (iqs % QK8_1 != 0) {
-        return;
-    }
-
-    if (need_sum) {
-        y[ib].ds[iqs/QK8_1] = make_half2(d, sum);
-    } else {
-        ((float *) y[ib].ds)[iqs/QK8_1] = d;
-    }
-}
-
-void quantize_row_q8_1_cuda(
-    const float * x, void * vy, const int64_t kx0, const int64_t kx1, const int64_t channels,
-    const int64_t kx0_padded, const ggml_type type_x, cudaStream_t stream) {
-
-    GGML_ASSERT(kx0_padded % QK8_1 == 0);
-
-    const int64_t block_num_x = (kx0_padded + CUDA_QUANTIZE_BLOCK_SIZE - 1) / CUDA_QUANTIZE_BLOCK_SIZE;
-    const dim3 num_blocks(block_num_x, kx1*channels, 1);
-    const dim3 block_size(CUDA_QUANTIZE_BLOCK_SIZE, 1, 1);
-    quantize_q8_1<<<num_blocks, block_size, 0, stream>>>(x, vy, kx0, kx0_padded);
-
-    GGML_UNUSED(type_x);
-}
-
-void quantize_mmq_q8_1_cuda(
-    const float * x, void * vy, const int64_t kx0, const int64_t kx1, const int64_t channels,
-    const int64_t kx0_padded, const ggml_type type_x, cudaStream_t stream) {
-
-    GGML_ASSERT(kx0_padded % (4*QK8_1) == 0);
-
-    const int64_t block_num_x = (kx0_padded + CUDA_QUANTIZE_BLOCK_SIZE - 1) / CUDA_QUANTIZE_BLOCK_SIZE;
-    const dim3 num_blocks(block_num_x, kx1, channels);
-    const dim3 block_size(CUDA_QUANTIZE_BLOCK_SIZE, 1, 1);
-    if (mmq_need_sum(type_x)) {
-        quantize_mmq_q8_1<true><<<num_blocks, block_size, 0, stream>>>(x, vy, kx0, kx1, kx0_padded);
-    } else {
-        quantize_mmq_q8_1<false><<<num_blocks, block_size, 0, stream>>>(x, vy, kx0, kx1, kx0_padded);
-    }
-}
diff --git a/ggml-cuda/quantize.cuh b/ggml-cuda/quantize.cuh
deleted file mode 100644 (file)
index 486c936..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#pragma once
-
-#include "common.cuh"
-#include "mmq.cuh"
-
-#include <cstdint>
-
-#define CUDA_QUANTIZE_BLOCK_SIZE 256
-
-typedef void (*quantize_cuda_t)(
-    const float * x, void * vy, const int64_t kx0, const int64_t kx1, const int64_t channels, const int64_t kx0_padded,
-    const ggml_type type_x, cudaStream_t stream);
-
-void quantize_row_q8_1_cuda(
-    const float * x, void * vy, const int64_t kx0, const int64_t kx1, const int64_t channels, const int64_t kx0_padded,
-    const ggml_type type_x, cudaStream_t stream);
-
-void quantize_mmq_q8_1_cuda(
-    const float * x, void * vy, const int64_t kx0, const int64_t kx1, const int64_t channels, const int64_t kx0_padded,
-    const ggml_type type_x, cudaStream_t stream);
diff --git a/ggml-cuda/rope.cu b/ggml-cuda/rope.cu
deleted file mode 100644 (file)
index 596fb7c..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-#include "rope.cuh"
-
-struct rope_corr_dims {
-    float v[2];
-};
-
-static __device__ float rope_yarn_ramp(const float low, const float high, const int i0) {
-    const float y = (i0 / 2 - low) / max(0.001f, high - low);
-    return 1.0f - min(1.0f, max(0.0f, y));
-}
-
-// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn
-// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng.
-static __device__ void rope_yarn(
-    float theta_extrap, float freq_scale, rope_corr_dims corr_dims, int64_t i0, float ext_factor, float mscale,
-    float * cos_theta, float * sin_theta) {
-    // Get n-d rotational scaling corrected for extrapolation
-    float theta_interp = freq_scale * theta_extrap;
-    float theta = theta_interp;
-    if (ext_factor != 0.0f) {
-        float ramp_mix = rope_yarn_ramp(corr_dims.v[0], corr_dims.v[1], i0) * ext_factor;
-        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;
-
-        // Get n-d magnitude scaling corrected for interpolation
-        mscale *= 1.0f + 0.1f * logf(1.0f / freq_scale);
-    }
-    *cos_theta = cosf(theta) * mscale;
-    *sin_theta = sinf(theta) * mscale;
-}
-
-template<typename T, bool has_ff>
-static __global__ void rope_norm(
-    const T * x, T * dst, int ne0, int n_dims, const int32_t * pos, float freq_scale, int p_delta_rows,
-    float ext_factor, float attn_factor, rope_corr_dims corr_dims, float theta_scale, const float * freq_factors) {
-    const int i0 = 2*(blockDim.y*blockIdx.y + threadIdx.y);
-
-    if (i0 >= ne0) {
-        return;
-    }
-
-    const int row = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i0 >= n_dims) {
-        const int i = row*ne0 + i0;
-
-        dst[i + 0] = x[i + 0];
-        dst[i + 1] = x[i + 1];
-
-        return;
-    }
-
-    const int i  = row*ne0 + i0;
-    const int i2 = row/p_delta_rows;
-
-    const float theta_base = pos[i2]*powf(theta_scale, i0/2.0f);
-
-    const float freq_factor = has_ff ? freq_factors[i0/2] : 1.0f;
-
-    float cos_theta;
-    float sin_theta;
-
-    rope_yarn(theta_base/freq_factor, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta);
-
-    const float x0 = x[i + 0];
-    const float x1 = x[i + 1];
-
-    dst[i + 0] = x0*cos_theta - x1*sin_theta;
-    dst[i + 1] = x0*sin_theta + x1*cos_theta;
-}
-
-template<typename T, bool has_ff>
-static __global__ void rope_neox(
-    const T * x, T * dst, int ne0, int n_dims, const int32_t * pos, float freq_scale, int p_delta_rows,
-    float ext_factor, float attn_factor, rope_corr_dims corr_dims, float theta_scale, const float * freq_factors) {
-    const int i0 = 2*(blockDim.y*blockIdx.y + threadIdx.y);
-
-    if (i0 >= ne0) {
-        return;
-    }
-
-    const int row = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i0 >= n_dims) {
-        const int i = row*ne0 + i0;
-
-        dst[i + 0] = x[i + 0];
-        dst[i + 1] = x[i + 1];
-
-        return;
-    }
-
-    const int i  = row*ne0 + i0/2;
-    const int i2 = row/p_delta_rows;
-
-    const float theta_base = pos[i2]*powf(theta_scale, i0/2.0f);
-
-    const float freq_factor = has_ff ? freq_factors[i0/2] : 1.0f;
-
-    float cos_theta;
-    float sin_theta;
-
-    rope_yarn(theta_base/freq_factor, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta);
-
-    const float x0 = x[i + 0];
-    const float x1 = x[i + n_dims/2];
-
-    dst[i + 0]        = x0*cos_theta - x1*sin_theta;
-    dst[i + n_dims/2] = x0*sin_theta + x1*cos_theta;
-}
-
-template<typename T>
-static void rope_norm_cuda(
-    const T * x, T * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
-    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream) {
-    GGML_ASSERT(ne0 % 2 == 0);
-    const dim3 block_dims(1, CUDA_ROPE_BLOCK_SIZE, 1);
-    const int n_blocks_x = (ne0 + 2*CUDA_ROPE_BLOCK_SIZE - 1) / (2*CUDA_ROPE_BLOCK_SIZE);
-    const dim3 block_nums(nr, n_blocks_x, 1);
-
-    const float theta_scale = powf(freq_base, -2.0f/n_dims);
-
-    if (freq_factors == nullptr) {
-        rope_norm<T, false><<<block_nums, block_dims, 0, stream>>>(
-                x, dst, ne0, n_dims, pos, freq_scale, p_delta_rows, ext_factor, attn_factor, corr_dims,
-                theta_scale, freq_factors
-                );
-    } else {
-        rope_norm<T, true><<<block_nums, block_dims, 0, stream>>>(
-                x, dst, ne0, n_dims, pos, freq_scale, p_delta_rows, ext_factor, attn_factor, corr_dims,
-                theta_scale, freq_factors
-                );
-    }
-}
-
-template<typename T>
-static void rope_neox_cuda(
-    const T * x, T * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
-    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream) {
-    GGML_ASSERT(ne0 % 2 == 0);
-    const dim3 block_dims(1, CUDA_ROPE_BLOCK_SIZE, 1);
-    const int n_blocks_x = (ne0 + 2*CUDA_ROPE_BLOCK_SIZE - 1) / (2*CUDA_ROPE_BLOCK_SIZE);
-    const dim3 block_nums(nr, n_blocks_x, 1);
-
-    const float theta_scale = powf(freq_base, -2.0f/n_dims);
-
-    if (freq_factors == nullptr) {
-        rope_neox<T, false><<<block_nums, block_dims, 0, stream>>>(
-                x, dst, ne0, n_dims, pos, freq_scale, p_delta_rows, ext_factor, attn_factor, corr_dims,
-                theta_scale, freq_factors
-                );
-    } else {
-        rope_neox<T, true><<<block_nums, block_dims, 0, stream>>>(
-                x, dst, ne0, n_dims, pos, freq_scale, p_delta_rows, ext_factor, attn_factor, corr_dims,
-                theta_scale, freq_factors
-                );
-    }
-}
-
-static void rope_norm_cuda_f16(
-    const half * x, half * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
-    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream) {
-
-    rope_norm_cuda<half>(x, dst, ne0, n_dims, nr, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, freq_factors, stream);
-}
-
-static void rope_norm_cuda_f32(
-    const float * x, float * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
-    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream) {
-
-    rope_norm_cuda<float>(x, dst, ne0, n_dims, nr, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, freq_factors, stream);
-}
-
-static void rope_neox_cuda_f16(
-    const half * x, half * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
-    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream) {
-
-    rope_neox_cuda<half>(x, dst, ne0, n_dims, nr, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, freq_factors, stream);
-}
-
-static void rope_neox_cuda_f32(
-    const float * x, float * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
-    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream
-) {
-
-    rope_neox_cuda<float>(x, dst, ne0, n_dims, nr, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, freq_factors, stream);
-}
-
-void ggml_cuda_op_rope(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const ggml_tensor * src1 = dst->src[1];
-    const ggml_tensor * src2 = dst->src[2];
-
-    const float * src0_d = (const float *)src0->data;
-    const float * src1_d = (const float *)src1->data;
-
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-    GGML_ASSERT(src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32 ||  dst->type == GGML_TYPE_F16);
-    GGML_ASSERT(src0->type == dst->type);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-    const int64_t nr = ggml_nrows(src0);
-
-    //const int n_past     = ((int32_t *) dst->op_params)[0];
-    const int n_dims     = ((int32_t *) dst->op_params)[1];
-    const int mode       = ((int32_t *) dst->op_params)[2];
-    //const int n_ctx      = ((int32_t *) dst->op_params)[3];
-    const int n_ctx_orig = ((int32_t *) dst->op_params)[4];
-
-    // RoPE alteration for extended context
-    float freq_base;
-    float freq_scale;
-    float ext_factor;
-    float attn_factor;
-    float beta_fast;
-    float beta_slow;
-
-    memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
-    memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
-    memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
-    memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
-    memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
-    memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
-
-    const bool is_neox = mode & 2;
-
-    const int32_t * pos = (const int32_t *) src1_d;
-
-    const float * freq_factors = nullptr;
-    if (src2 != nullptr) {
-        freq_factors = (const float *) src2->data;
-    }
-
-    rope_corr_dims corr_dims;
-    ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims.v);
-
-    // compute
-    if (is_neox) {
-        if (src0->type == GGML_TYPE_F32) {
-            rope_neox_cuda_f32(
-                (const float *)src0_d, (float *)dst_d, ne00, n_dims, nr, pos, freq_scale, ne01, freq_base, ext_factor,
-                attn_factor, corr_dims, freq_factors, stream
-            );
-        } else if (src0->type == GGML_TYPE_F16) {
-            rope_neox_cuda_f16(
-                (const half *)src0_d, (half *)dst_d, ne00, n_dims, nr, pos, freq_scale, ne01, freq_base, ext_factor,
-                attn_factor, corr_dims, freq_factors, stream
-            );
-        } else {
-            GGML_ASSERT(false);
-        }
-    } else {
-        if (src0->type == GGML_TYPE_F32) {
-            rope_norm_cuda_f32(
-                (const float *)src0_d, (float *)dst_d, ne00, n_dims, nr, pos, freq_scale, ne01, freq_base, ext_factor,
-                attn_factor, corr_dims, freq_factors, stream
-            );
-        } else if (src0->type == GGML_TYPE_F16) {
-            rope_norm_cuda_f16(
-                (const half *)src0_d, (half *)dst_d, ne00, n_dims, nr, pos, freq_scale, ne01, freq_base, ext_factor,
-                attn_factor, corr_dims, freq_factors, stream
-            );
-        } else {
-            GGML_ASSERT(false);
-        }
-    }
-}
diff --git a/ggml-cuda/rope.cuh b/ggml-cuda/rope.cuh
deleted file mode 100644 (file)
index 0f787a0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_ROPE_BLOCK_SIZE 256
-
-void ggml_cuda_op_rope(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/scale.cu b/ggml-cuda/scale.cu
deleted file mode 100644 (file)
index 1405e06..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "scale.cuh"
-
-static __global__ void scale_f32(const float * x, float * dst, const float scale, const int k) {
-    const int i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= k) {
-        return;
-    }
-
-    dst[i] = scale * x[i];
-}
-
-static void scale_f32_cuda(const float * x, float * dst, const float scale, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_SCALE_BLOCK_SIZE - 1) / CUDA_SCALE_BLOCK_SIZE;
-    scale_f32<<<num_blocks, CUDA_SCALE_BLOCK_SIZE, 0, stream>>>(x, dst, scale, k);
-}
-
-void ggml_cuda_op_scale(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    float scale;
-    memcpy(&scale, dst->op_params, sizeof(float));
-
-    scale_f32_cuda(src0_d, dst_d, scale, ggml_nelements(src0), stream);
-}
diff --git a/ggml-cuda/scale.cuh b/ggml-cuda/scale.cuh
deleted file mode 100644 (file)
index 8ff75c8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_SCALE_BLOCK_SIZE 256
-
-void ggml_cuda_op_scale(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/softmax.cu b/ggml-cuda/softmax.cu
deleted file mode 100644 (file)
index c24abae..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-#include "common.cuh"
-#include "softmax.cuh"
-
-template <typename T>
-static __device__ __forceinline__ float t2f32(T val) {
-    return (float) val;
-}
-
-template <>
-__device__ float __forceinline__ t2f32<half>(half val) {
-    return __half2float(val);
-}
-
-template <bool vals_smem, int ncols_template, int block_size_template, typename T>
-static __global__ void soft_max_f32(const float * x, const T * mask, float * dst, const int ncols_par, const int nrows_y, const float scale, const float max_bias, const float m0, const float m1, uint32_t n_head_log2) {
-    const int ncols = ncols_template == 0 ? ncols_par : ncols_template;
-
-    const int tid  = threadIdx.x;
-    const int rowx = blockIdx.x;
-    const int rowy = rowx % nrows_y; // broadcast the mask in the row dimension
-
-    const int block_size = block_size_template == 0 ? blockDim.x : block_size_template;
-
-    const int warp_id = threadIdx.x / WARP_SIZE;
-    const int lane_id = threadIdx.x % WARP_SIZE;
-
-    const float slope = get_alibi_slope(max_bias, rowx/nrows_y, n_head_log2, m0, m1);
-
-    extern __shared__ float data_soft_max_f32[];
-    float * buf_iw = data_soft_max_f32; // shared memory buffer for inter-warp communication
-    // shared memory buffer to cache values between iterations:
-    float * vals = vals_smem ? buf_iw + WARP_SIZE : dst + (int64_t)rowx*ncols;
-
-    float max_val = -INFINITY;
-
-#pragma unroll
-    for (int col0 = 0; col0 < ncols; col0 += block_size) {
-        const int col = col0 + tid;
-
-        if (ncols_template == 0 && col >= ncols) {
-            break;
-        }
-
-        const int64_t ix = (int64_t)rowx*ncols + col;
-        const int64_t iy = (int64_t)rowy*ncols + col;
-
-        const float val = x[ix]*scale + (mask ? slope*t2f32(mask[iy]) : 0.0f);
-
-        vals[col] = val;
-        max_val = max(max_val, val);
-    }
-
-    // find the max value in the block
-    max_val = warp_reduce_max(max_val);
-    if (block_size > WARP_SIZE) {
-        if (warp_id == 0) {
-            buf_iw[lane_id] = -INFINITY;
-        }
-        __syncthreads();
-
-        if (lane_id == 0) {
-            buf_iw[warp_id] = max_val;
-        }
-        __syncthreads();
-
-        max_val = buf_iw[lane_id];
-        max_val = warp_reduce_max(max_val);
-    }
-
-    float tmp = 0.0f; // partial sum
-
-#pragma unroll
-    for (int col0 = 0; col0 < ncols; col0 += block_size) {
-        const int col = col0 + tid;
-
-        if (ncols_template == 0 && col >= ncols) {
-            break;
-        }
-
-        const float val = expf(vals[col] - max_val);
-        tmp += val;
-        vals[col] = val;
-    }
-
-    // find the sum of exps in the block
-    tmp = warp_reduce_sum(tmp);
-    if (block_size > WARP_SIZE) {
-        __syncthreads();
-        if (warp_id == 0) {
-            buf_iw[lane_id] = 0.0f;
-        }
-        __syncthreads();
-
-        if (lane_id == 0) {
-            buf_iw[warp_id] = tmp;
-        }
-        __syncthreads();
-
-        tmp = buf_iw[lane_id];
-        tmp = warp_reduce_sum(tmp);
-    }
-
-    const float inv_sum = 1.0f / tmp;
-
-#pragma unroll
-    for (int col0 = 0; col0 < ncols; col0 += block_size) {
-        const int col = col0 + tid;
-
-        if (ncols_template == 0 && col >= ncols) {
-            return;
-        }
-
-        const int64_t idst = (int64_t)rowx*ncols + col;
-        dst[idst] = vals[col] * inv_sum;
-    }
-}
-
-template<typename T>
-static void soft_max_f32_cuda(const float * x, const T * mask, float * dst, const int ncols_x, const int nrows_x, const int nrows_y, const float scale, const float max_bias, cudaStream_t stream) {
-    int nth = WARP_SIZE;
-    while (nth < ncols_x && nth < CUDA_SOFT_MAX_BLOCK_SIZE) nth *= 2;
-    const dim3 block_dims(nth,     1, 1);
-    const dim3 block_nums(nrows_x, 1, 1);
-    const size_t shmem = (GGML_PAD(ncols_x, WARP_SIZE) + WARP_SIZE)*sizeof(float);
-    static_assert(CUDA_SOFT_MAX_BLOCK_SIZE == 1024, "These values need to be adjusted.");
-
-    const uint32_t n_head      = nrows_x/nrows_y;
-    const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head));
-
-    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
-    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
-
-    // FIXME: this limit could be raised by ~2-4x on Ampere or newer
-    if (shmem < ggml_cuda_info().devices[ggml_cuda_get_device()].smpb) {
-        switch (ncols_x) {
-            case 32:
-                soft_max_f32<true, 32, 32><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
-                break;
-            case 64:
-                soft_max_f32<true, 64, 64><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
-                break;
-            case 128:
-                soft_max_f32<true, 128, 128><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
-                break;
-            case 256:
-                soft_max_f32<true, 256, 256><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
-                break;
-            case 512:
-                soft_max_f32<true, 512, 512><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
-                break;
-            case 1024:
-                soft_max_f32<true, 1024, 1024><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
-                break;
-            case 2048:
-                soft_max_f32<true, 2048, 1024><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
-                break;
-            case 4096:
-                soft_max_f32<true, 4096, 1024><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
-                break;
-            default:
-                soft_max_f32<true, 0, 0><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
-                break;
-        }
-    } else {
-        const size_t shmem_low = WARP_SIZE*sizeof(float);
-        soft_max_f32<false, 0, 0><<<block_nums, block_dims, shmem_low, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
-    }
-}
-
-void ggml_cuda_op_soft_max(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const ggml_tensor * src1 = dst->src[1];
-
-    const float * src0_d = (const float *)src0->data;
-    const void  * src1_d = src1 ? (const void *)src1->data : nullptr;
-
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    GGML_ASSERT(!src1 || src1->type == GGML_TYPE_F16 || src1->type == GGML_TYPE_F32); // src1 contains mask and it is optional
-
-    const int64_t ne00    = src0->ne[0];
-    const int64_t nrows_x = ggml_nrows(src0);
-    const int64_t nrows_y = src0->ne[1];
-
-    float scale    = 1.0f;
-    float max_bias = 0.0f;
-
-    memcpy(&scale,    (float *) dst->op_params + 0, sizeof(float));
-    memcpy(&max_bias, (float *) dst->op_params + 1, sizeof(float));
-
-    const bool use_f16 = (src1 && src1->type == GGML_TYPE_F16);
-
-    if (use_f16) {
-        const half * src1_dd = (const half *)src1_d;
-
-        soft_max_f32_cuda(src0_d, src1_dd, dst_d, ne00, nrows_x, nrows_y, scale, max_bias, stream);
-    } else {
-        const float * src1_dd = (const float *)src1_d;
-
-        soft_max_f32_cuda(src0_d, src1_dd, dst_d, ne00, nrows_x, nrows_y, scale, max_bias, stream);
-    }
-}
diff --git a/ggml-cuda/softmax.cuh b/ggml-cuda/softmax.cuh
deleted file mode 100644 (file)
index 4ef4ff8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_SOFT_MAX_BLOCK_SIZE 1024
-
-void ggml_cuda_op_soft_max(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/sumrows.cu b/ggml-cuda/sumrows.cu
deleted file mode 100644 (file)
index 82e8e87..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "sumrows.cuh"
-
-static __global__ void k_sum_rows_f32(const float * x, float * dst, const int ncols) {
-    const int row = blockIdx.x;
-    const int col = threadIdx.x;
-
-    float sum = 0.0f;
-    for (int i = col; i < ncols; i += blockDim.x) {
-        sum += x[row * ncols + i];
-    }
-
-    sum = warp_reduce_sum(sum);
-
-    if (col == 0) {
-        dst[row] = sum;
-    }
-}
-
-static void sum_rows_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
-    const dim3 block_dims(WARP_SIZE, 1, 1);
-    const dim3 block_nums(nrows, 1, 1);
-    k_sum_rows_f32<<<block_nums, block_dims, 0, stream>>>(x, dst, ncols);
-}
-
-void ggml_cuda_op_sum_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-
-    const int64_t ncols = src0->ne[0];
-    const int64_t nrows = ggml_nrows(src0);
-
-    sum_rows_f32_cuda(src0_d, dst_d, ncols, nrows, stream);
-}
diff --git a/ggml-cuda/sumrows.cuh b/ggml-cuda/sumrows.cuh
deleted file mode 100644 (file)
index e7545f8..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "common.cuh"
-
-void ggml_cuda_op_sum_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-f16.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-f16.cu
deleted file mode 100644 (file)
index 6696a23..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_0.cu
deleted file mode 100644 (file)
index dd070db..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_1.cu
deleted file mode 100644 (file)
index 54dcde6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_0.cu
deleted file mode 100644 (file)
index 4ec22f7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_1.cu
deleted file mode 100644 (file)
index 3c15bf7..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q8_0.cu
deleted file mode 100644 (file)
index 7e61b5f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-f16.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-f16.cu
deleted file mode 100644 (file)
index fdb15b5..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_0.cu
deleted file mode 100644 (file)
index 0f7c417..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_1.cu
deleted file mode 100644 (file)
index 851f33c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_0.cu
deleted file mode 100644 (file)
index 763809c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_1.cu
deleted file mode 100644 (file)
index f2a276e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q8_0.cu
deleted file mode 100644 (file)
index cb227f6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-f16.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-f16.cu
deleted file mode 100644 (file)
index 97ac052..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_0.cu
deleted file mode 100644 (file)
index c772b42..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_1.cu
deleted file mode 100644 (file)
index 5cb7430..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_0.cu
deleted file mode 100644 (file)
index 98a709d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_1.cu
deleted file mode 100644 (file)
index 4f2f947..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q8_0.cu
deleted file mode 100644 (file)
index 11f96b6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-f16.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-f16.cu
deleted file mode 100644 (file)
index b39bdc0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_0.cu
deleted file mode 100644 (file)
index bbd6a2c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_1.cu
deleted file mode 100644 (file)
index 9d84ff2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_0.cu
deleted file mode 100644 (file)
index bc8a5bf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_1.cu
deleted file mode 100644 (file)
index a679100..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q8_0.cu
deleted file mode 100644 (file)
index 8f21bcc..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-f16.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-f16.cu
deleted file mode 100644 (file)
index 858b00f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_0.cu
deleted file mode 100644 (file)
index 0fc8011..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_1.cu
deleted file mode 100644 (file)
index 261fdf6..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_0.cu
deleted file mode 100644 (file)
index 0fb8247..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_1.cu
deleted file mode 100644 (file)
index a9d9d08..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q8_0.cu
deleted file mode 100644 (file)
index 7d7b279..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-f16.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-f16.cu
deleted file mode 100644 (file)
index a092ee2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_0.cu
deleted file mode 100644 (file)
index db55927..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_1.cu
deleted file mode 100644 (file)
index c3c21ce..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_0.cu
deleted file mode 100644 (file)
index 35dd9f5..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_1.cu
deleted file mode 100644 (file)
index 050c22a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q8_0.cu
deleted file mode 100644 (file)
index de4866c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs256-f16-f16.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs256-f16-f16.cu
deleted file mode 100644 (file)
index 57a10bc..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-f16.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-f16.cu
deleted file mode 100644 (file)
index e0f08b4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_0.cu
deleted file mode 100644 (file)
index 1c8e8a4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_1.cu
deleted file mode 100644 (file)
index cefed83..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_0.cu
deleted file mode 100644 (file)
index aede6e3..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_1.cu
deleted file mode 100644 (file)
index 1a1a92c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q8_0.cu
deleted file mode 100644 (file)
index ad66747..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f16.cuh"
-
-DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-f16.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-f16.cu
deleted file mode 100644 (file)
index c499f45..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_0.cu
deleted file mode 100644 (file)
index 8286ebf..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_1.cu
deleted file mode 100644 (file)
index 4587868..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_0.cu
deleted file mode 100644 (file)
index d89103c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_1.cu
deleted file mode 100644 (file)
index bb75fd4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q8_0.cu
deleted file mode 100644 (file)
index b162981..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-f16.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-f16.cu
deleted file mode 100644 (file)
index d865760..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_0.cu
deleted file mode 100644 (file)
index 2e5bd2f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_1.cu
deleted file mode 100644 (file)
index be5f302..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_0.cu
deleted file mode 100644 (file)
index 8dd91cd..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_1.cu
deleted file mode 100644 (file)
index 4cb7915..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q8_0.cu
deleted file mode 100644 (file)
index 09dea42..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-f16.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-f16.cu
deleted file mode 100644 (file)
index 0fbb607..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_0.cu
deleted file mode 100644 (file)
index 2aeab83..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_1.cu
deleted file mode 100644 (file)
index 599415b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_0.cu
deleted file mode 100644 (file)
index e4f8e30..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_1.cu
deleted file mode 100644 (file)
index 34d1665..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q8_0.cu
deleted file mode 100644 (file)
index 4bebef4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-f16.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-f16.cu
deleted file mode 100644 (file)
index 326468d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_0.cu
deleted file mode 100644 (file)
index 511b58f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_1.cu
deleted file mode 100644 (file)
index d9906d1..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_0.cu
deleted file mode 100644 (file)
index f61c183..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_1.cu
deleted file mode 100644 (file)
index c10450f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q8_0.cu
deleted file mode 100644 (file)
index 2d5cb19..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-f16.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-f16.cu
deleted file mode 100644 (file)
index b384f34..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_0.cu
deleted file mode 100644 (file)
index 446e293..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_1.cu
deleted file mode 100644 (file)
index 6f43029..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_0.cu
deleted file mode 100644 (file)
index 1cd8ba8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_1.cu
deleted file mode 100644 (file)
index 1ee2eab..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q8_0.cu
deleted file mode 100644 (file)
index 2bc7781..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-f16.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-f16.cu
deleted file mode 100644 (file)
index d55ced0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_0.cu
deleted file mode 100644 (file)
index 8361e99..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_1.cu
deleted file mode 100644 (file)
index 7507a67..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_0.cu
deleted file mode 100644 (file)
index 61f050b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_1.cu
deleted file mode 100644 (file)
index d4a49d9..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q8_0.cu
deleted file mode 100644 (file)
index d146278..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs256-f16-f16.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs256-f16-f16.cu
deleted file mode 100644 (file)
index e73f917..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-f16.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-f16.cu
deleted file mode 100644 (file)
index d40825d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_0.cu
deleted file mode 100644 (file)
index b5c6869..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_1.cu
deleted file mode 100644 (file)
index 4e21b0c..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_0.cu
deleted file mode 100644 (file)
index 2eac321..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_1.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_1.cu
deleted file mode 100644 (file)
index f7d2c3b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q8_0.cu b/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q8_0.cu
deleted file mode 100644 (file)
index a013f40..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f32.cuh"
-
-DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb16.cu b/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb16.cu
deleted file mode 100644 (file)
index 2d94e65..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-wmma-f16.cuh"
-
-DECL_FATTN_WMMA_F16_CASE(64, 16, float);
-DECL_FATTN_WMMA_F16_CASE(80, 16, float);
-DECL_FATTN_WMMA_F16_CASE(96, 16, float);
-DECL_FATTN_WMMA_F16_CASE(112, 16, float);
-DECL_FATTN_WMMA_F16_CASE(128, 16, float);
-DECL_FATTN_WMMA_F16_CASE(256, 16, float);
diff --git a/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb32.cu b/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb32.cu
deleted file mode 100644 (file)
index c3d9df3..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-wmma-f16.cuh"
-
-DECL_FATTN_WMMA_F16_CASE(64, 32, float);
-DECL_FATTN_WMMA_F16_CASE(80, 32, float);
-DECL_FATTN_WMMA_F16_CASE(96, 32, float);
-DECL_FATTN_WMMA_F16_CASE(112, 32, float);
-DECL_FATTN_WMMA_F16_CASE(128, 32, float);
diff --git a/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb16.cu b/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb16.cu
deleted file mode 100644 (file)
index bb680e4..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-wmma-f16.cuh"
-
-DECL_FATTN_WMMA_F16_CASE(64, 16, half);
-DECL_FATTN_WMMA_F16_CASE(80, 16, half);
-DECL_FATTN_WMMA_F16_CASE(96, 16, half);
-DECL_FATTN_WMMA_F16_CASE(112, 16, half);
-DECL_FATTN_WMMA_F16_CASE(128, 16, half);
-DECL_FATTN_WMMA_F16_CASE(256, 16, half);
diff --git a/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb32.cu b/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb32.cu
deleted file mode 100644 (file)
index 073f71b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-wmma-f16.cuh"
-
-DECL_FATTN_WMMA_F16_CASE(64, 32, half);
-DECL_FATTN_WMMA_F16_CASE(80, 32, half);
-DECL_FATTN_WMMA_F16_CASE(96, 32, half);
-DECL_FATTN_WMMA_F16_CASE(112, 32, half);
-DECL_FATTN_WMMA_F16_CASE(128, 32, half);
-DECL_FATTN_WMMA_F16_CASE(256, 32, half);
diff --git a/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb8.cu b/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb8.cu
deleted file mode 100644 (file)
index d30710c..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-wmma-f16.cuh"
-
-DECL_FATTN_WMMA_F16_CASE(64, 8, half);
-DECL_FATTN_WMMA_F16_CASE(96, 8, half);
-DECL_FATTN_WMMA_F16_CASE(128, 8, half);
-DECL_FATTN_WMMA_F16_CASE(256, 8, half);
diff --git a/ggml-cuda/template-instances/generate_cu_files.py b/ggml-cuda/template-instances/generate_cu_files.py
deleted file mode 100755 (executable)
index ea58d09..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/env python3
-
-from glob import glob
-import os
-
-TYPES_KV = ["GGML_TYPE_Q4_0", "GGML_TYPE_Q4_1", "GGML_TYPE_Q5_0", "GGML_TYPE_Q5_1", "GGML_TYPE_Q8_0", "GGML_TYPE_F16"]
-
-SOURCE_FATTN_VEC = """// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-vec-f{vkq_size}.cuh"
-
-DECL_FATTN_VEC_F{vkq_size}_CASE({head_size}, {type_k}, {type_v});
-"""
-
-SOURCE_FATTN_WMMA_START = """// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../fattn-wmma-f16.cuh"
-
-"""
-
-SOURCE_FATTN_WMMA_CASE = "DECL_FATTN_WMMA_F16_CASE({head_size}, {cols_per_block}, {kq_acc_t});\n"
-
-TYPES_MMQ = [
-    "GGML_TYPE_Q4_0", "GGML_TYPE_Q4_1", "GGML_TYPE_Q5_0", "GGML_TYPE_Q5_1", "GGML_TYPE_Q8_0",
-    "GGML_TYPE_Q2_K", "GGML_TYPE_Q3_K", "GGML_TYPE_Q4_K", "GGML_TYPE_Q5_K", "GGML_TYPE_Q6_K"
-]
-
-SOURCE_MMQ = """// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE({type});
-"""
-
-
-def get_short_name(long_quant_name):
-    return long_quant_name.replace("GGML_TYPE_", "").lower()
-
-
-def get_head_sizes(type_k, type_v):
-    if type_k == "GGML_TYPE_F16" and type_v == "GGML_TYPE_F16":
-        return [64, 128, 256]
-    if type_k == "GGML_TYPE_F16":
-        return [64, 128]
-    return [128]
-
-
-for filename in glob("*.cu"):
-    os.remove(filename)
-
-for vkq_size in [16, 32]:
-    for type_k in TYPES_KV:
-        for type_v in TYPES_KV:
-            for head_size in get_head_sizes(type_k, type_v):
-                with open(f"fattn-vec-f{vkq_size}-instance-hs{head_size}-{get_short_name(type_k)}-{get_short_name(type_v)}.cu", "w") as f:
-                    f.write(SOURCE_FATTN_VEC.format(vkq_size=vkq_size, head_size=head_size, type_k=type_k, type_v=type_v))
-
-for kq_acc_t in ["half", "float"]:
-    for cols_per_block in [8, 16, 32]:
-        if kq_acc_t == "float" and cols_per_block == 8:
-            continue
-
-        with open(f"fattn-wmma-f16-instance-kq{kq_acc_t}-cpb{cols_per_block}.cu", "w") as f:
-            f.write(SOURCE_FATTN_WMMA_START)
-
-            for head_size in [64, 80, 96, 112, 128, 256]:
-                if cols_per_block == 8 and head_size % 32 != 0: # wmma fragment is 8x32
-                    continue
-                if kq_acc_t == "float" and cols_per_block == 32 and head_size == 256: # register spilling, bad performance
-                    continue
-                f.write(SOURCE_FATTN_WMMA_CASE.format(kq_acc_t=kq_acc_t, cols_per_block=cols_per_block, head_size=head_size))
-
-for type in TYPES_MMQ:
-    with open(f"mmq-instance-{get_short_name(type)}.cu", "w") as f:
-        f.write(SOURCE_MMQ.format(type=type))
diff --git a/ggml-cuda/template-instances/mmq-instance-q2_k.cu b/ggml-cuda/template-instances/mmq-instance-q2_k.cu
deleted file mode 100644 (file)
index 6415369..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE(GGML_TYPE_Q2_K);
diff --git a/ggml-cuda/template-instances/mmq-instance-q3_k.cu b/ggml-cuda/template-instances/mmq-instance-q3_k.cu
deleted file mode 100644 (file)
index ffb6213..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE(GGML_TYPE_Q3_K);
diff --git a/ggml-cuda/template-instances/mmq-instance-q4_0.cu b/ggml-cuda/template-instances/mmq-instance-q4_0.cu
deleted file mode 100644 (file)
index 0c0b0c8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE(GGML_TYPE_Q4_0);
diff --git a/ggml-cuda/template-instances/mmq-instance-q4_1.cu b/ggml-cuda/template-instances/mmq-instance-q4_1.cu
deleted file mode 100644 (file)
index ee67f69..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE(GGML_TYPE_Q4_1);
diff --git a/ggml-cuda/template-instances/mmq-instance-q4_k.cu b/ggml-cuda/template-instances/mmq-instance-q4_k.cu
deleted file mode 100644 (file)
index 9eeb3cd..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE(GGML_TYPE_Q4_K);
diff --git a/ggml-cuda/template-instances/mmq-instance-q5_0.cu b/ggml-cuda/template-instances/mmq-instance-q5_0.cu
deleted file mode 100644 (file)
index cc57fb9..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE(GGML_TYPE_Q5_0);
diff --git a/ggml-cuda/template-instances/mmq-instance-q5_1.cu b/ggml-cuda/template-instances/mmq-instance-q5_1.cu
deleted file mode 100644 (file)
index 721ac79..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE(GGML_TYPE_Q5_1);
diff --git a/ggml-cuda/template-instances/mmq-instance-q5_k.cu b/ggml-cuda/template-instances/mmq-instance-q5_k.cu
deleted file mode 100644 (file)
index a2e90ff..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE(GGML_TYPE_Q5_K);
diff --git a/ggml-cuda/template-instances/mmq-instance-q6_k.cu b/ggml-cuda/template-instances/mmq-instance-q6_k.cu
deleted file mode 100644 (file)
index 470938f..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE(GGML_TYPE_Q6_K);
diff --git a/ggml-cuda/template-instances/mmq-instance-q8_0.cu b/ggml-cuda/template-instances/mmq-instance-q8_0.cu
deleted file mode 100644 (file)
index 974477b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-// This file has been autogenerated by generate_cu_files.py, do not edit manually.
-
-#include "../mmq.cuh"
-
-DECL_MMQ_CASE(GGML_TYPE_Q8_0);
diff --git a/ggml-cuda/tsembd.cu b/ggml-cuda/tsembd.cu
deleted file mode 100644 (file)
index 153ddbc..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#include "tsembd.cuh"
-
-static __global__ void timestep_embedding_f32(const float * timesteps, float * dst, const int nb1, const int dim, const int max_period) {
-    // blockIDx.y: idx of timesteps->ne[0]
-    // blockIDx.x: idx of ((dim + 1) / 2) / BLOCK_SIZE
-    int i = blockIdx.y;
-    int j = threadIdx.x + blockIdx.x * blockDim.x;
-    float * embed_data = (float *)((char *)dst +  i*nb1);
-
-    if (dim % 2 != 0 && j == ((dim + 1) / 2)) {
-        embed_data[dim] = 0.f;
-    }
-
-    int half = dim / 2;
-    if (j >= half) {
-        return;
-    }
-
-    float timestep = timesteps[i];
-    float freq = (float)expf(-logf(max_period) * j / half);
-    float arg = timestep * freq;
-    embed_data[j] = cosf(arg);
-    embed_data[j + half] = sinf(arg);
-}
-
-static void timestep_embedding_f32_cuda(const float * x, float * dst, const int ne00, const int nb1,
-                                        const int dim, const int max_period, cudaStream_t stream) {
-    int half_ceil = (dim + 1) / 2;
-    int num_blocks = (half_ceil + CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE - 1) / CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE;
-    dim3 gridDim(num_blocks, ne00, 1);
-    timestep_embedding_f32<<<gridDim, CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE, 0, stream>>>(x, dst, nb1, dim, max_period);
-}
-
-void ggml_cuda_op_timestep_embedding(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT(dst->type == GGML_TYPE_F32);
-
-    const int dim = dst->op_params[0];
-    const int max_period = dst->op_params[1];
-
-    timestep_embedding_f32_cuda(src0_d, dst_d, src0->ne[0], dst->nb[1], dim, max_period, stream);
-}
diff --git a/ggml-cuda/tsembd.cuh b/ggml-cuda/tsembd.cuh
deleted file mode 100644 (file)
index 84340e3..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE 256
-
-void ggml_cuda_op_timestep_embedding(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/unary.cu b/ggml-cuda/unary.cu
deleted file mode 100644 (file)
index a5ff963..0000000
+++ /dev/null
@@ -1,286 +0,0 @@
-#include "unary.cuh"
-
-static __global__ void gelu_f32(const float * x, float * dst, const int k) {
-    const float GELU_COEF_A    = 0.044715f;
-    const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f;
-    const int i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= k) {
-        return;
-    }
-
-    float xi = x[i];
-    dst[i] = 0.5f*xi*(1.0f + tanhf(SQRT_2_OVER_PI*xi*(1.0f + GELU_COEF_A*xi*xi)));
-}
-
-static __global__ void gelu_quick_f32(const float * x, float * dst, int k) {
-    const float GELU_QUICK_COEF = -1.702f;
-    const int i  = blockDim.x*blockIdx.x + threadIdx.x;
-    if (i >= k) {
-        return;
-    }
-    dst[i] = x[i] * (1.0f / (1.0f + expf(GELU_QUICK_COEF * x[i])));
-}
-
-static __global__ void silu_f32(const float * x, float * dst, const int k) {
-    const int i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = x[i] / (1.0f + expf(-x[i]));
-}
-
-static __global__ void tanh_f32(const float * x, float * dst, int k) {
-    const int i  = blockDim.x*blockIdx.x + threadIdx.x;
-    if (i >= k) {
-        return;
-    }
-    dst[i] = tanhf(x[i]);
-}
-
-static __global__ void relu_f32(const float * x, float * dst, const int k) {
-    const int i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = fmaxf(x[i], 0);
-}
-
-static __global__ void sigmoid_f32(const float * x, float * dst, const int k) {
-    const int i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = 1.0f / (1.0f + expf(-x[i]));
-}
-
-static __global__ void hardsigmoid_f32(const float * x, float * dst, const int k) {
-    const int i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f));
-}
-
-static __global__ void hardswish_f32(const float * x, float * dst, const int k) {
-    const int i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = x[i] * fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f));
-}
-
-static __global__ void leaky_relu_f32(const float * x, float * dst, const int k, const float negative_slope) {
-    const int i  = blockDim.x*blockIdx.x + threadIdx.x;
-    if (i >= k) {
-        return;
-    }
-    dst[i] = fmaxf(x[i], 0) + fminf(x[i], 0.0f) * negative_slope;
-}
-
-static __global__ void sqr_f32(const float * x, float * dst, const int k) {
-    const int i = blockDim.x*blockIdx.x + threadIdx.x;
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = x[i] * x[i];
-}
-
-static void gelu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_GELU_BLOCK_SIZE - 1) / CUDA_GELU_BLOCK_SIZE;
-    gelu_f32<<<num_blocks, CUDA_GELU_BLOCK_SIZE, 0, stream>>>(x, dst, k);
-}
-
-static void gelu_quick_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_GELU_BLOCK_SIZE - 1) / CUDA_GELU_BLOCK_SIZE;
-    gelu_quick_f32<<<num_blocks, CUDA_GELU_BLOCK_SIZE, 0, stream>>>(x, dst, k);
-}
-
-static void silu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_SILU_BLOCK_SIZE - 1) / CUDA_SILU_BLOCK_SIZE;
-    silu_f32<<<num_blocks, CUDA_SILU_BLOCK_SIZE, 0, stream>>>(x, dst, k);
-}
-
-static void tanh_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_TANH_BLOCK_SIZE - 1) / CUDA_TANH_BLOCK_SIZE;
-    tanh_f32<<<num_blocks, CUDA_TANH_BLOCK_SIZE, 0, stream>>>(x, dst, k);
-}
-
-static void relu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_RELU_BLOCK_SIZE - 1) / CUDA_RELU_BLOCK_SIZE;
-    relu_f32<<<num_blocks, CUDA_RELU_BLOCK_SIZE, 0, stream>>>(x, dst, k);
-}
-
-static void sigmoid_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_SIGMOID_BLOCK_SIZE - 1) / CUDA_SIGMOID_BLOCK_SIZE;
-    sigmoid_f32<<<num_blocks, CUDA_SIGMOID_BLOCK_SIZE, 0, stream>>>(x, dst, k);
-}
-
-static void hardsigmoid_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_HARDSIGMOID_BLOCK_SIZE - 1) / CUDA_HARDSIGMOID_BLOCK_SIZE;
-    hardsigmoid_f32<<<num_blocks, CUDA_HARDSIGMOID_BLOCK_SIZE, 0, stream>>>(x, dst, k);
-}
-
-static void hardswish_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_HARDSWISH_BLOCK_SIZE - 1) / CUDA_HARDSWISH_BLOCK_SIZE;
-    hardswish_f32<<<num_blocks, CUDA_HARDSWISH_BLOCK_SIZE, 0, stream>>>(x, dst, k);
-}
-
-static void leaky_relu_f32_cuda(const float * x, float * dst, const int k, const float negative_slope, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_RELU_BLOCK_SIZE - 1) / CUDA_RELU_BLOCK_SIZE;
-    leaky_relu_f32<<<num_blocks, CUDA_RELU_BLOCK_SIZE, 0, stream>>>(x, dst, k, negative_slope);
-}
-
-static void sqr_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
-    const int num_blocks = (k + CUDA_SQR_BLOCK_SIZE - 1) / CUDA_SQR_BLOCK_SIZE;
-    sqr_f32<<<num_blocks, CUDA_SQR_BLOCK_SIZE, 0, stream>>>(x, dst, k);
-}
-
-void ggml_cuda_op_gelu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    gelu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
-}
-
-void ggml_cuda_op_silu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    silu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
-}
-
-void ggml_cuda_op_gelu_quick(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    gelu_quick_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
-}
-
-void ggml_cuda_op_tanh(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    tanh_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
-}
-
-void ggml_cuda_op_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    relu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
-}
-
-void ggml_cuda_op_sigmoid(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    sigmoid_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
-}
-
-void ggml_cuda_op_hardsigmoid(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    hardsigmoid_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
-}
-
-void ggml_cuda_op_hardswish(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    hardswish_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
-}
-
-void ggml_cuda_op_leaky_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    float negative_slope;
-    memcpy(&negative_slope, dst->op_params, sizeof(float));
-
-    leaky_relu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), negative_slope, stream);
-}
-
-void ggml_cuda_op_sqr(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    sqr_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
-}
diff --git a/ggml-cuda/unary.cuh b/ggml-cuda/unary.cuh
deleted file mode 100644 (file)
index a1d07c0..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_GELU_BLOCK_SIZE 256
-#define CUDA_SILU_BLOCK_SIZE 256
-#define CUDA_TANH_BLOCK_SIZE 256
-#define CUDA_RELU_BLOCK_SIZE 256
-#define CUDA_SIGMOID_BLOCK_SIZE 256
-#define CUDA_HARDSIGMOID_BLOCK_SIZE 256
-#define CUDA_HARDSWISH_BLOCK_SIZE 256
-#define CUDA_SQR_BLOCK_SIZE 256
-
-void ggml_cuda_op_gelu(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_silu(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_gelu_quick(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_tanh(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_sigmoid(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_hardsigmoid(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_hardswish(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_leaky_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
-
-void ggml_cuda_op_sqr(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/upscale.cu b/ggml-cuda/upscale.cu
deleted file mode 100644 (file)
index cf513c3..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "upscale.cuh"
-
-static __global__ void upscale_f32(const float * x, float * dst,
-        const int nb00, const int nb01, const int nb02, const int nb03,
-        const int ne10, const int ne11, const int ne12, const int ne13,
-        const float sf0, const float sf1, const float sf2, const float sf3) {
-    int index = threadIdx.x + blockIdx.x * blockDim.x;
-    if (index >= ne10 * ne11 * ne12 * ne13) {
-        return;
-    }
-
-    int i10 = index % ne10;
-    int i11 = (index / ne10) % ne11;
-    int i12 = (index / (ne10 * ne11)) % ne12;
-    int i13 = (index / (ne10 * ne11 * ne12)) % ne13;
-
-    int i00 = i10 / sf0;
-    int i01 = i11 / sf1;
-    int i02 = i12 / sf2;
-    int i03 = i13 / sf3;
-
-    dst[index] = *(float *)((char *)x + i03 * nb03 + i02 * nb02 + i01 * nb01 + i00 * nb00);
-}
-
-static void upscale_f32_cuda(const float * x, float * dst,
-        const int nb00, const int nb01, const int nb02, const int nb03,
-        const int ne10, const int ne11, const int ne12, const int ne13,
-        const float sf0, const float sf1, const float sf2, const float sf3,
-        cudaStream_t stream) {
-    int dst_size = ne10 * ne11 * ne12 * ne13;
-    int num_blocks = (dst_size + CUDA_UPSCALE_BLOCK_SIZE - 1) / CUDA_UPSCALE_BLOCK_SIZE;
-
-    upscale_f32<<<num_blocks, CUDA_UPSCALE_BLOCK_SIZE,0,stream>>>(x, dst, nb00, nb01, nb02, nb03, ne10, ne11, ne12, ne13, sf0, sf1, sf2, sf3);
-}
-
-void ggml_cuda_op_upscale(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
-    const ggml_tensor * src0 = dst->src[0];
-    const float * src0_d = (const float *)src0->data;
-    float * dst_d = (float *)dst->data;
-    cudaStream_t stream = ctx.stream();
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    const float sf0 = (float)dst->ne[0]/src0->ne[0];
-    const float sf1 = (float)dst->ne[1]/src0->ne[1];
-    const float sf2 = (float)dst->ne[2]/src0->ne[2];
-    const float sf3 = (float)dst->ne[3]/src0->ne[3];
-
-    upscale_f32_cuda(src0_d, dst_d, src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3], dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], sf0, sf1, sf2, sf3, stream);
-}
diff --git a/ggml-cuda/upscale.cuh b/ggml-cuda/upscale.cuh
deleted file mode 100644 (file)
index d4d7652..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "common.cuh"
-
-#define CUDA_UPSCALE_BLOCK_SIZE 256
-
-void ggml_cuda_op_upscale(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml-cuda/vecdotq.cuh b/ggml-cuda/vecdotq.cuh
deleted file mode 100644 (file)
index 3b12d65..0000000
+++ /dev/null
@@ -1,1151 +0,0 @@
-#include "common.cuh"
-
-static __device__ __forceinline__ int get_int_from_int8(const int8_t * x8, const int & i32) {
-    const uint16_t * x16 = (const uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment
-
-    int x32 = 0;
-    x32 |= x16[0] <<  0;
-    x32 |= x16[1] << 16;
-
-    return x32;
-}
-
-static __device__ __forceinline__ int get_int_from_uint8(const uint8_t * x8, const int & i32) {
-    const uint16_t * x16 = (const uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment
-
-    int x32 = 0;
-    x32 |= x16[0] <<  0;
-    x32 |= x16[1] << 16;
-
-    return x32;
-}
-
-static __device__ __forceinline__ int get_int_from_int8_aligned(const int8_t * x8, const int & i32) {
-    return *((const int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment
-}
-
-static __device__ __forceinline__ int get_int_from_uint8_aligned(const uint8_t * x8, const int & i32) {
-    return *((const int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment
-}
-
-
-// VDR = vec dot ratio, how many contiguous integers each thread processes when the vec dot kernel is called
-// MMVQ = mul_mat_vec_q, MMQ = mul_mat_q
-
-#define VDR_Q4_0_Q8_1_MMVQ 2
-#define VDR_Q4_0_Q8_1_MMQ  4
-
-template <int vdr> static __device__ __forceinline__ float vec_dot_q4_0_q8_1_impl(
-    const int * v, const int * u, const float & d4, const half2 & ds8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        const int vi0 = (v[i] >> 0) & 0x0F0F0F0F;
-        const int vi1 = (v[i] >> 4) & 0x0F0F0F0F;
-
-        // SIMD dot product of quantized values
-        sumi = __dp4a(vi0, u[2*i+0], sumi);
-        sumi = __dp4a(vi1, u[2*i+1], sumi);
-    }
-
-    const float2 ds8f = __half22float2(ds8);
-
-    // second part effectively subtracts 8 from each quant value
-    return d4 * (sumi * ds8f.x - (8*vdr/QI4_0) * ds8f.y);
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-#define VDR_Q4_1_Q8_1_MMVQ 2
-#define VDR_Q4_1_Q8_1_MMQ  4
-
-template <int vdr> static __device__ __forceinline__ float vec_dot_q4_1_q8_1_impl(
-    const int * v, const int * u, const half2 & dm4, const half2 & ds8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        const int vi0 = (v[i] >> 0) & 0x0F0F0F0F;
-        const int vi1 = (v[i] >> 4) & 0x0F0F0F0F;
-
-        // SIMD dot product of quantized values
-        sumi = __dp4a(vi0, u[2*i+0], sumi);
-        sumi = __dp4a(vi1, u[2*i+1], sumi);
-    }
-
-#ifdef GGML_CUDA_F16
-    const float2 tmp = __half22float2(__hmul2(dm4, ds8));
-    const float d4d8 = tmp.x;
-    const float m4s8 = tmp.y;
-#else
-    const float2 dm4f = __half22float2(dm4);
-    const float2 ds8f = __half22float2(ds8);
-    const float d4d8 = dm4f.x * ds8f.x;
-    const float m4s8 = dm4f.y * ds8f.y;
-#endif // GGML_CUDA_F16
-
-    // scale second part of sum by QI8_1/(vdr * QR4_1) to compensate for multiple threads adding it
-    return sumi * d4d8 + m4s8 / (QI8_1 / (vdr * QR4_1));
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-#define VDR_Q5_0_Q8_1_MMVQ 2
-#define VDR_Q5_0_Q8_1_MMQ  4
-
-template <int vdr> static __device__ __forceinline__ float vec_dot_q5_0_q8_1_impl(
-    const int * vl, const int * vh, const int * u, const float & d5, const half2 & ds8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        int vi0 = (vl[i] >>  0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits
-        vi0    |= (vh[i] <<  4) & 0x00000010; // 0 ->  4
-        vi0    |= (vh[i] << 11) & 0x00001000; // 1 -> 12
-        vi0    |= (vh[i] << 18) & 0x00100000; // 2 -> 20
-        vi0    |= (vh[i] << 25) & 0x10000000; // 3 -> 28
-        sumi = __dp4a(vi0, u[2*i+0], sumi); // SIMD dot product of quantized values
-
-        int vi1 = (vl[i] >>  4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits
-        vi1    |= (vh[i] >> 12) & 0x00000010; // 16 ->  4
-        vi1    |= (vh[i] >>  5) & 0x00001000; // 17 -> 12
-        vi1    |= (vh[i] <<  2) & 0x00100000; // 18 -> 20
-        vi1    |= (vh[i] <<  9) & 0x10000000; // 19 -> 28
-        sumi = __dp4a(vi1, u[2*i+1], sumi); // SIMD dot product of quantized values
-    }
-
-    const float2 ds8f = __half22float2(ds8);
-
-    // second part effectively subtracts 16 from each quant value
-    return d5 * (sumi * ds8f.x - (16*vdr/QI5_0) * ds8f.y);
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-#define VDR_Q5_1_Q8_1_MMVQ 2
-#define VDR_Q5_1_Q8_1_MMQ  4
-
-template <int vdr> static __device__ __forceinline__ float vec_dot_q5_1_q8_1_impl(
-    const int * vl, const int * vh, const int * u, const half2 & dm5, const half2 & ds8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        int vi0 = (vl[i] >>  0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits
-        vi0    |= (vh[i] <<  4) & 0x00000010; // 0 ->  4
-        vi0    |= (vh[i] << 11) & 0x00001000; // 1 -> 12
-        vi0    |= (vh[i] << 18) & 0x00100000; // 2 -> 20
-        vi0    |= (vh[i] << 25) & 0x10000000; // 3 -> 28
-        sumi = __dp4a(vi0, u[2*i+0], sumi); // SIMD dot product of quantized values
-
-        int vi1 = (vl[i] >>  4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits
-        vi1    |= (vh[i] >> 12) & 0x00000010; // 16 ->  4
-        vi1    |= (vh[i] >>  5) & 0x00001000; // 17 -> 12
-        vi1    |= (vh[i] <<  2) & 0x00100000; // 18 -> 20
-        vi1    |= (vh[i] <<  9) & 0x10000000; // 19 -> 28
-        sumi = __dp4a(vi1, u[2*i+1], sumi); // SIMD dot product of quantized values
-    }
-
-#ifdef GGML_CUDA_F16
-    const float2 tmp = __half22float2(__hmul2(dm5, ds8));
-    const float d5d8 = tmp.x;
-    const float m5s8 = tmp.y;
-#else
-    const float2 dm5f = __half22float2(dm5);
-    const float2 ds8f = __half22float2(ds8);
-    const float d5d8 = dm5f.x * ds8f.x;
-    const float m5s8 = dm5f.y * ds8f.y;
-#endif // GGML_CUDA_F16
-
-    // scale second part of sum by QI5_1 / vdr to compensate for multiple threads adding it
-    return sumi*d5d8 + m5s8 / (QI5_1 / vdr);
-
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-#define VDR_Q8_0_Q8_1_MMVQ 2
-#define VDR_Q8_0_Q8_1_MMQ 8
-
-template <typename T, int vdr> static __device__ __forceinline__ T vec_dot_q8_0_q8_1_impl(
-    const int * v, const int * u, const T & d8_0, const T & d8_1) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        // SIMD dot product of quantized values
-        sumi = __dp4a(v[i], u[i], sumi);
-    }
-
-    return d8_0*d8_1 * ((T) sumi);
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-template <int vdr> static __device__ __forceinline__ float vec_dot_q8_1_q8_1_impl(
-    const int * v, const int * u, const half2 & dm8, const half2 & ds8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        // SIMD dot product of quantized values
-        sumi = __dp4a(v[i], u[i], sumi);
-    }
-
-#ifdef GGML_CUDA_F16
-    const float2 tmp = __half22float2(__hmul2(dm8, ds8));
-    const float d8d8 = tmp.x;
-    const float m8s8 = tmp.y;
-#else
-    const float2 dm8f = __half22float2(dm8);
-    const float2 ds8f = __half22float2(ds8);
-    const float d8d8 = dm8f.x * ds8f.x;
-    const float m8s8 = dm8f.y * ds8f.y;
-#endif // GGML_CUDA_F16
-
-    // scale second part of sum by QI8_1/ vdr to compensate for multiple threads adding it
-    return sumi*d8d8 + m8s8 / (QI8_1 / vdr);
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-#define VDR_Q2_K_Q8_1_MMVQ 1
-#define VDR_Q2_K_Q8_1_MMQ  2
-
-// contiguous v/x values
-static __device__ __forceinline__ float vec_dot_q2_K_q8_1_impl_mmvq(
-    const int & v, const int * __restrict__ u, const uint8_t * __restrict__ scales,
-    const half2 & dm2, const float * __restrict__ d8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR2_K; ++i) {
-        const int sc = scales[2*i];
-
-        const int vi = (v >> (2*i)) & 0x03030303;
-
-        sumf_d += d8[i] * (__dp4a(vi, u[i], 0) * (sc & 0xF)); // SIMD dot product
-
-        // fill int with 4x m
-        int m = sc >> 4;
-        m |= m <<  8;
-        m |= m << 16;
-        sumf_m += d8[i] * __dp4a(m, u[i], 0); // multiply constant q2_K part with sum of q8_1 values
-    }
-
-    const float2 dm2f = __half22float2(dm2);
-
-    return dm2f.x*sumf_d - dm2f.y*sumf_m;
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-// contiguous u/y values
-static __device__ __forceinline__ float vec_dot_q2_K_q8_1_impl_mmq(
-    const int * __restrict__ v, const int * __restrict__ u, const half2 * dm2, const float & d8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i0 = 0; i0 < QI8_1; i0 += QI8_1/2) {
-        const float2 dm2f = __half22float2(dm2[i0/(QI8_1/2)]);
-        int sumi_d = 0;
-        int sumi_m = 0;
-
-        const int vi0 = v[i0/(QI8_1/2)];
-#pragma unroll
-        for (int i = i0; i < i0 + QI8_1/2; ++i) {
-            const int vi = (vi0 >> (2*(i % (QI8_1/2)))) & 0x03030303;
-            sumi_d = __dp4a(vi,         u[i], sumi_d); // SIMD dot product
-            sumi_m = __dp4a(0x01010101, u[i], sumi_m);
-        }
-
-        sumf_d += dm2f.x * sumi_d;
-        sumf_m += dm2f.y * sumi_m;
-    }
-
-    return d8*(sumf_d - sumf_m);
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-#define VDR_Q3_K_Q8_1_MMVQ 1
-#define VDR_Q3_K_Q8_1_MMQ  2
-
-// contiguous v/x values
-static __device__ __forceinline__ float vec_dot_q3_K_q8_1_impl_mmvq(
-    const int & vl, const int & vh, const int * __restrict__ u, const uint8_t * __restrict__ scales,
-    const int & scale_offset, const float & d3, const float * __restrict__ d8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    float sumf = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR3_K; ++i) {
-        const int isc = scale_offset + 2*i;
-
-        const int isc_low = isc % (QK_K/32);
-        const int sc_shift_low = 4 * (isc / (QK_K/32));
-        const int sc_low  = (scales[isc_low] >> sc_shift_low) & 0xF;
-
-        const int isc_high = isc % (QK_K/64);
-        const int sc_shift_high = 2 * (isc / (QK_K/64));
-        const int sc_high = ((scales[(QK_K/32) + isc_high] >> sc_shift_high) & 3) << 4;
-
-        const int sc = (sc_low | sc_high) - 32;
-
-        const int vil = (vl >> (2*i)) & 0x03030303;
-
-        const int vih = ((vh >> i) << 2) & 0x04040404;
-
-        const int vi = __vsubss4(vil, vih);
-
-        sumf += d8[i] * (__dp4a(vi, u[i], 0) * sc); // SIMD dot product
-    }
-
-    return d3 * sumf;
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-// contiguous u/y values
-static __device__ __forceinline__ float vec_dot_q3_K_q8_1_impl_mmq(
-    const int * __restrict__ v, const int * __restrict__ u, const int8_t * __restrict__ scales,
-    const float & d3, const float & d8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    int sumi = 0;
-
-#pragma unroll
-    for (int i0 = 0; i0 < QR3_K*VDR_Q3_K_Q8_1_MMQ; i0 += QI8_1/2) {
-        int sumi_sc = 0;
-
-#pragma unroll
-        for (int i = i0; i < i0 + QI8_1/2; ++i) {
-            const int vi = __vsubss4((v[i/2] >> (4*(i%2))) & 0x0F0F0F0F, 0x04040404);
-            sumi_sc = __dp4a(vi, u[i], sumi_sc); // SIMD dot product
-        }
-
-        sumi += sumi_sc * scales[i0 / (QI8_1/2)];
-    }
-
-    return d3*d8 * sumi;
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-#define VDR_Q4_K_Q8_1_MMVQ 2
-#define VDR_Q4_K_Q8_1_MMQ  8
-
-// contiguous v/x values
-static __device__ __forceinline__ float vec_dot_q4_K_q8_1_impl_vmmq(
-    const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc,
-    const uint8_t * __restrict__ m, const half2 & dm4, const float * __restrict__ d8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR4_K; ++i) {
-        const int v0i = (v[0] >> (4*i)) & 0x0F0F0F0F;
-        const int v1i = (v[1] >> (4*i)) & 0x0F0F0F0F;
-
-        const int dot1 = __dp4a(v1i, u[2*i+1], __dp4a(v0i, u[2*i+0], 0)); // SIMD dot product
-        const int dot2 = __dp4a(0x01010101, u[2*i+1], __dp4a(0x01010101, u[2*i+0], 0)); // sum of u
-
-        sumf_d += d8[i] * (dot1 * sc[i]);
-        sumf_m += d8[i] * (dot2 * m[i]);  // multiply constant part of q4_K with sum of q8_1 values
-    }
-
-    const float2 dm4f = __half22float2(dm4);
-
-    return dm4f.x*sumf_d - dm4f.y*sumf_m;
-
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-// contiguous u/y values
-static __device__ __forceinline__ float vec_dot_q4_K_q8_1_impl_mmq(
-    const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc,
-    const uint8_t * __restrict__ m, const half2 & dm4, const half2 * __restrict__ ds8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR4_K*VDR_Q4_K_Q8_1_MMQ/QI8_1; ++i) {
-        int sumi_d = 0;
-
-#pragma unroll
-        for (int j = 0; j < QI8_1; ++j) {
-            sumi_d = __dp4a((v[j] >> (4*i)) & 0x0F0F0F0F, u[i*QI8_1 + j], sumi_d); // SIMD dot product
-        }
-
-        const float2 ds8f = __half22float2(ds8[i]);
-
-        sumf_d += ds8f.x * (sc[i] * sumi_d);
-        sumf_m += ds8f.y *   m[i]; // sum of q8_1 block * q4_K min val
-    }
-
-    const float2 dm4f = __half22float2(dm4);
-
-    return dm4f.x*sumf_d - dm4f.y*sumf_m;
-
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-#define VDR_Q5_K_Q8_1_MMVQ 2
-#define VDR_Q5_K_Q8_1_MMQ  8
-
-// contiguous v/x values
-static __device__ __forceinline__ float vec_dot_q5_K_q8_1_impl_vmmq(
-    const int * __restrict__ vl, const int * __restrict__ vh, const int * __restrict__ u, const uint8_t * __restrict__ sc,
-    const uint8_t * __restrict__ m, const half2 & dm5, const float * __restrict__ d8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR5_K; ++i) {
-        const int vl0i = (vl[0] >> (4*i)) & 0x0F0F0F0F;
-        const int vl1i = (vl[1] >> (4*i)) & 0x0F0F0F0F;
-
-        const int vh0i = ((vh[0] >> i) << 4) & 0x10101010;
-        const int vh1i = ((vh[1] >> i) << 4) & 0x10101010;
-
-        const int v0i = vl0i | vh0i;
-        const int v1i = vl1i | vh1i;
-
-        const int dot1 = __dp4a(v0i, u[2*i+0], __dp4a(v1i, u[2*i+1], 0)); // SIMD dot product
-        const int dot2 = __dp4a(0x01010101, u[2*i+0], __dp4a(0x01010101, u[2*i+1], 0)); // sum of u
-
-        sumf_d += d8[i] * (dot1 * sc[i]);
-        sumf_m += d8[i] * (dot2 * m[i]);
-
-    }
-
-    const float2 dm5f = __half22float2(dm5);
-
-    return dm5f.x*sumf_d - dm5f.y*sumf_m;
-
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-// contiguous u/y values
-static __device__ __forceinline__ float vec_dot_q5_K_q8_1_impl_mmq(
-    const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc,
-    const uint8_t * __restrict__ m, const half2 & dm4, const half2 * __restrict__ ds8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR5_K*VDR_Q5_K_Q8_1_MMQ/QI8_1; ++i) {
-        int sumi_d = 0;
-
-#pragma unroll
-        for (int j = 0; j < QI8_1; ++j) {
-            sumi_d = __dp4a(v[i*QI8_1 + j], u[i*QI8_1 + j], sumi_d); // SIMD dot product
-        }
-
-        const float2 ds8f = __half22float2(ds8[i]);
-
-        sumf_d += ds8f.x * (sc[i] * sumi_d);
-        sumf_m += ds8f.y *   m[i]; // sum of q8_1 block * q4_K min val
-    }
-
-    const float2 dm4f = __half22float2(dm4);
-
-    return dm4f.x*sumf_d - dm4f.y*sumf_m;
-
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-#define VDR_Q6_K_Q8_1_MMVQ 1
-#define VDR_Q6_K_Q8_1_MMQ  8
-
-// contiguous v/x values
-static __device__ __forceinline__ float vec_dot_q6_K_q8_1_impl_mmvq(
-    const int & vl, const int & vh, const int * __restrict__ u, const int8_t * __restrict__ scales,
-    const float & d, const float * __restrict__ d8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    float sumf = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR6_K; ++i) {
-        const int sc = scales[4*i];
-
-        const int vil = (vl >> (4*i)) & 0x0F0F0F0F;
-
-        const int vih = ((vh >> (4*i)) << 4) & 0x30303030;
-
-        const int vi = __vsubss4((vil | vih), 0x20202020); // vi = (vil | vih) - 32
-
-        sumf += d8[i] * (__dp4a(vi, u[i], 0) * sc); // SIMD dot product
-    }
-
-    return d*sumf;
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-// contiguous u/y values
-static __device__ __forceinline__ float vec_dot_q6_K_q8_1_impl_mmq(
-    const int * __restrict__ v, const int * __restrict__ u, const int8_t * __restrict__ sc,
-    const float & d6, const float * __restrict__ d8) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    float sumf_d = 0.0f;
-
-#pragma unroll
-    for (int i0 = 0; i0 < VDR_Q6_K_Q8_1_MMQ; i0 += 4) {
-        int2 sumi_d = {0, 0}; // 2 q6_K scales per q8_1 scale
-
-#pragma unroll
-        for (int i = i0; i < i0 + 2; ++i) {
-            sumi_d.x = __dp4a(v[2*i+0], u[2*i+0], sumi_d.x); // SIMD dot product
-            sumi_d.x = __dp4a(v[2*i+1], u[2*i+1], sumi_d.x); // SIMD dot product
-
-            sumi_d.y = __dp4a(v[2*i+4], u[2*i+4], sumi_d.y); // SIMD dot product
-            sumi_d.y = __dp4a(v[2*i+5], u[2*i+5], sumi_d.y); // SIMD dot product
-        }
-
-        sumf_d += d8[i0/4] * (sc[i0/2+0]*sumi_d.x + sc[i0/2+1]*sumi_d.y);
-    }
-
-    return d6 * sumf_d;
-
-#else
-    NO_DEVICE_CODE;
-#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
-}
-
-static __device__ __forceinline__ float vec_dot_q4_0_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_q4_0 * bq4_0 = (const block_q4_0 *) vbq + kbx;
-
-    int v[VDR_Q4_0_Q8_1_MMVQ];
-    int u[2*VDR_Q4_0_Q8_1_MMVQ];
-
-#pragma unroll
-    for (int i = 0; i < VDR_Q4_0_Q8_1_MMVQ; ++i) {
-        v[i]     = get_int_from_uint8(bq4_0->qs, iqs + i);
-        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
-        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_0);
-    }
-
-    return vec_dot_q4_0_q8_1_impl<VDR_Q4_0_Q8_1_MMVQ>(v, u, bq4_0->d, bq8_1->ds);
-}
-
-
-static __device__ __forceinline__ float vec_dot_q4_1_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_q4_1 * bq4_1 = (const block_q4_1 *) vbq + kbx;
-
-    int v[VDR_Q4_1_Q8_1_MMVQ];
-    int u[2*VDR_Q4_1_Q8_1_MMVQ];
-
-#pragma unroll
-    for (int i = 0; i < VDR_Q4_1_Q8_1_MMVQ; ++i) {
-        v[i]    = get_int_from_uint8_aligned(bq4_1->qs, iqs + i);
-        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
-        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_1);
-    }
-
-    return vec_dot_q4_1_q8_1_impl<VDR_Q4_1_Q8_1_MMVQ>(v, u, bq4_1->dm, bq8_1->ds);
-}
-
-static __device__ __forceinline__ float vec_dot_q5_0_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_q5_0 * bq5_0 = (const block_q5_0 *) vbq + kbx;
-
-    int vl[VDR_Q5_0_Q8_1_MMVQ];
-    int vh[VDR_Q5_0_Q8_1_MMVQ];
-    int  u[2*VDR_Q5_0_Q8_1_MMVQ];
-
-#pragma unroll
-    for (int i = 0; i < VDR_Q5_0_Q8_1_MMVQ; ++i) {
-        vl[i]    = get_int_from_uint8(bq5_0->qs, iqs + i);
-        vh[i]    = get_int_from_uint8(bq5_0->qh, 0) >> (4 * (iqs + i));
-        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
-        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_0);
-    }
-
-    return vec_dot_q5_0_q8_1_impl<VDR_Q5_0_Q8_1_MMVQ>(vl, vh, u, bq5_0->d, bq8_1->ds);
-}
-
-static __device__ __forceinline__ float vec_dot_q5_1_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_q5_1 * bq5_1 = (const block_q5_1 *) vbq + kbx;
-
-    int vl[VDR_Q5_1_Q8_1_MMVQ];
-    int vh[VDR_Q5_1_Q8_1_MMVQ];
-    int  u[2*VDR_Q5_1_Q8_1_MMVQ];
-
-#pragma unroll
-    for (int i = 0; i < VDR_Q5_1_Q8_1_MMVQ; ++i) {
-        vl[i]   = get_int_from_uint8_aligned(bq5_1->qs, iqs + i);
-        vh[i]   = get_int_from_uint8_aligned(bq5_1->qh, 0) >> (4 * (iqs + i));
-        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
-        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_1);
-    }
-
-    return vec_dot_q5_1_q8_1_impl<VDR_Q5_1_Q8_1_MMVQ>(vl, vh, u, bq5_1->dm, bq8_1->ds);
-}
-
-static __device__ __forceinline__ float vec_dot_q8_0_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_q8_0 * bq8_0 = (const block_q8_0 *) vbq + kbx;
-
-    int v[VDR_Q8_0_Q8_1_MMVQ];
-    int u[VDR_Q8_0_Q8_1_MMVQ];
-
-#pragma unroll
-    for (int i = 0; i < VDR_Q8_0_Q8_1_MMVQ; ++i) {
-        v[i] = get_int_from_int8(bq8_0->qs, iqs + i);
-        u[i] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
-    }
-
-    return vec_dot_q8_0_q8_1_impl<float, VDR_Q8_0_Q8_1_MMVQ>(v, u, bq8_0->d, __low2half(bq8_1->ds));
-}
-
-static __device__ __forceinline__ float vec_dot_q2_K_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_q2_K * bq2_K = (const block_q2_K *) vbq + kbx;
-
-    const int bq8_offset = QR2_K * (iqs / QI8_1);
-    const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2);
-
-    const uint8_t * scales = bq2_K->scales + scale_offset;
-
-    const int v = get_int_from_uint8_aligned(bq2_K->qs, iqs);
-    int    u[QR2_K];
-    float d8[QR2_K];
-
-#pragma unroll
-    for (int i = 0; i < QR2_K; ++ i) {
-        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1);
-        d8[i] = __low2float(bq8_1[bq8_offset + i].ds);
-    }
-
-    return vec_dot_q2_K_q8_1_impl_mmvq(v, u, scales, bq2_K->dm, d8);
-}
-
-static __device__ __forceinline__ float vec_dot_q3_K_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_q3_K * bq3_K = (const block_q3_K *) vbq + kbx;
-
-    const int bq8_offset = QR3_K * (iqs / (QI3_K/2));
-    const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2);
-
-    const float d = bq3_K->d;
-
-    const int vl = get_int_from_uint8(bq3_K->qs, iqs);
-
-    // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted
-    const int vh = ~get_int_from_uint8(bq3_K->hmask, iqs % (QI3_K/2)) >> bq8_offset;
-
-    int    u[QR3_K];
-    float d8[QR3_K];
-
-#pragma unroll
-    for (int i = 0; i < QR3_K; ++i) {
-        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1);
-        d8[i] = __low2float(bq8_1[bq8_offset + i].ds);
-    }
-
-    return vec_dot_q3_K_q8_1_impl_mmvq(vl, vh, u, bq3_K->scales, scale_offset, d, d8);
-}
-
-static __device__ __forceinline__ float vec_dot_q4_K_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_q4_K * bq4_K = (const block_q4_K *) vbq + kbx;
-
-    int    v[2];
-    int    u[2*QR4_K];
-    float d8[QR4_K];
-
-    // iqs is in 0,2..30. bq8_offset = iqs/4 -> bq8_offset = 0, 2, 4, 6
-    const int bq8_offset = QR4_K * ((iqs/2) / (QI8_1/2));
-
-    // iqs = 0....3 -> bq8_offset = 0, want q4_offset = 0, 4, 8, 12
-    // iqs = 4....7 -> bq8_offset = 2, want q4_offset = 32, 36, 40, 44
-    // iqs = 8...11 -> bq8_offset = 4, want q4_offset = 64, 68, 72, 76
-    // iqs = 12..15 -> bq8_offset = 6, want q4_offset = 96, 100, 104, 108
-
-    const int * q4 = (const int *)(bq4_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4));
-    v[0] = q4[0];
-    v[1] = q4[4];
-
-    const uint16_t * scales = (const uint16_t *)bq4_K->scales;
-    uint16_t aux[2];
-    const int j = bq8_offset/2;
-    if (j < 2) {
-        aux[0] = scales[j+0] & 0x3f3f;
-        aux[1] = scales[j+2] & 0x3f3f;
-    } else {
-        aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2);
-        aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2);
-    }
-    const uint8_t * sc = (const uint8_t *)aux;
-    const uint8_t * m  = sc + 2;
-
-    for (int i = 0; i < QR4_K; ++i) {
-        const block_q8_1 * bq8i = bq8_1 + bq8_offset + i;
-        d8[i] = __low2float(bq8i->ds);
-
-        const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4);
-        u[2*i+0] = q8[0];
-        u[2*i+1] = q8[4];
-    }
-
-    return vec_dot_q4_K_q8_1_impl_vmmq(v, u, sc, m, bq4_K->dm, d8);
-}
-
-static __device__ __forceinline__ float vec_dot_q5_K_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_q5_K * bq5_K = (const block_q5_K *) vbq + kbx;
-
-    int   vl[2];
-    int   vh[2];
-    int    u[2*QR5_K];
-    float d8[QR5_K];
-
-    const int bq8_offset = QR5_K * ((iqs/2) / (QI8_1/2));
-    const int * ql = (const int *)(bq5_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4));
-    const int * qh = (const int *)(bq5_K->qh + 4 * ((iqs/2)%4));
-
-    vl[0] = ql[0];
-    vl[1] = ql[4];
-
-    vh[0] = qh[0] >> bq8_offset;
-    vh[1] = qh[4] >> bq8_offset;
-
-    const uint16_t * scales = (const uint16_t *)bq5_K->scales;
-    uint16_t aux[2];
-    const int j = bq8_offset/2;
-    if (j < 2) {
-        aux[0] = scales[j+0] & 0x3f3f;
-        aux[1] = scales[j+2] & 0x3f3f;
-    } else {
-        aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2);
-        aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2);
-    }
-    const uint8_t * sc = (const uint8_t *)aux;
-    const uint8_t * m  = sc + 2;
-
-#pragma unroll
-    for (int i = 0; i < QR5_K; ++i) {
-        const block_q8_1 * bq8i = bq8_1 + bq8_offset + i;
-        d8[i] = __low2float(bq8i->ds);
-
-        const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4);
-        u[2*i+0] = q8[0];
-        u[2*i+1] = q8[4];
-    }
-
-    return vec_dot_q5_K_q8_1_impl_vmmq(vl, vh, u, sc, m, bq5_K->dm, d8);
-}
-
-static __device__ __forceinline__ float vec_dot_q6_K_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_q6_K * bq6_K = (const block_q6_K *) vbq + kbx;
-
-    const int bq8_offset = 2 * QR6_K * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/4);
-    const int scale_offset = (QI6_K/4) * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/8);
-    const int vh_shift = 2 * ((iqs % (QI6_K/2)) / (QI6_K/4));
-
-    const int vl = get_int_from_uint8(bq6_K->ql, iqs);
-    const int vh = get_int_from_uint8(bq6_K->qh, (QI6_K/4) * (iqs / (QI6_K/2)) + iqs % (QI6_K/4)) >> vh_shift;
-
-    const int8_t * scales = bq6_K->scales + scale_offset;
-
-    int    u[QR6_K];
-    float d8[QR6_K];
-
-#pragma unroll
-    for (int i = 0; i < QR6_K; ++i) {
-        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + 2*i].qs, iqs % QI8_1);
-        d8[i] = __low2float(bq8_1[bq8_offset + 2*i].ds);
-    }
-
-    return vec_dot_q6_K_q8_1_impl_mmvq(vl, vh, u, scales, bq6_K->d, d8);
-}
-
-static __device__ __forceinline__ float vec_dot_iq2_xxs_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-    const block_iq2_xxs * bq2 = (const block_iq2_xxs *) vbq + kbx;
-
-#if QR2_XXS == 8
-    const int ib32 = iqs;
-    const uint16_t * q2 = bq2->qs + 4*ib32;
-    const uint8_t  * aux8 = (const uint8_t *)q2;
-    const int8_t   * q8 = bq8_1[ib32].qs;
-    uint32_t aux32 = q2[2] | (q2[3] << 16);
-    int sumi = 0;
-    for (int l = 0; l < 4; ++l) {
-        const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]);
-        const uint8_t  signs = ksigns_iq2xs[aux32 & 127];
-        for (int j = 0; j < 8; ++j) {
-            sumi += q8[j] * grid[j] * (signs & kmask_iq2xs[j] ? -1 : 1);
-        }
-        q8 += 8;
-        aux32 >>= 7;
-    }
-    const float d = (float)bq2->d * (0.5f + aux32) * __low2float(bq8_1[ib32].ds) * 0.25f;
-    return d * sumi;
-#else
-    // iqs is 0...15
-    const int ib32 = iqs/2;
-    const int il = iqs%2;
-    const uint16_t * q2 = bq2->qs + 4*ib32;
-    const uint8_t  * aux8 = (const uint8_t *)q2;
-    const uint8_t  * grid1 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+0]);
-    const uint8_t  * grid2 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+1]);
-    const uint32_t aux32 = q2[2] | (q2[3] << 16);
-    const float d = (float)bq2->d * (0.5f + (aux32 >> 28)) * __low2float(bq8_1[ib32].ds) * 0.25f;
-    const uint8_t signs1 = ksigns_iq2xs[(aux32 >> 14*il) & 127];
-    const uint8_t signs2 = ksigns_iq2xs[(aux32 >> (14*il + 7)) & 127];
-    const int8_t * q8 = bq8_1[ib32].qs + 16*il;
-    int sumi1 = 0, sumi2 = 0;
-    for (int j = 0; j < 8; ++j) {
-        sumi1 += q8[j+0] * grid1[j] * (signs1 & kmask_iq2xs[j] ? -1 : 1);
-        sumi2 += q8[j+8] * grid2[j] * (signs2 & kmask_iq2xs[j] ? -1 : 1);
-    }
-    return d * (sumi1 + sumi2);
-#endif
-}
-
-static __device__ __forceinline__ float vec_dot_iq2_xs_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    const block_iq2_xs * bq2 = (const block_iq2_xs *) vbq + kbx;
-
-    const int ib32 = iqs;
-    const uint16_t * q2 = bq2->qs + 4*ib32;
-    const int8_t   * q8 = bq8_1[ib32].qs;
-    const uint8_t ls1 = bq2->scales[ib32] & 0xf;
-    const uint8_t ls2 = bq2->scales[ib32] >>  4;
-    int sumi1 = 0;
-    for (int l = 0; l < 2; ++l) {
-        const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511));
-        const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9));
-        const int grid_l = __vsub4(grid[0] ^ signs[0], signs[0]);
-        const int grid_h = __vsub4(grid[1] ^ signs[1], signs[1]);
-        sumi1 = __dp4a(grid_l, *((const int *)q8 + 0), sumi1);
-        sumi1 = __dp4a(grid_h, *((const int *)q8 + 1), sumi1);
-        q8 += 8;
-    }
-    int sumi2 = 0;
-    for (int l = 2; l < 4; ++l) {
-        const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511));
-        const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9));
-        const int grid_l = __vsub4(grid[0] ^ signs[0], signs[0]);
-        const int grid_h = __vsub4(grid[1] ^ signs[1], signs[1]);
-        sumi2 = __dp4a(grid_l, *((const int *)q8 + 0), sumi2);
-        sumi2 = __dp4a(grid_h, *((const int *)q8 + 1), sumi2);
-        q8 += 8;
-    }
-    const float d = (float)bq2->d * __low2float(bq8_1[ib32].ds) * 0.25f;
-    return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2);
-#else
-    GGML_UNUSED(ksigns64);
-    NO_DEVICE_CODE;
-#endif
-}
-
-// TODO
-static __device__ __forceinline__ float vec_dot_iq2_s_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    const block_iq2_s * bq2 = (const block_iq2_s *) vbq + kbx;
-
-    const int ib32 = iqs;
-    const int8_t  * q8 = bq8_1[ib32].qs;
-    const uint8_t * signs = bq2->qs + QK_K/8 + 4*ib32;
-    const uint8_t ls1 = bq2->scales[ib32] & 0xf;
-    const uint8_t ls2 = bq2->scales[ib32] >>  4;
-    int sumi1 = 0;
-    for (int l = 0; l < 2; ++l) {
-        const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300)));
-        const uint32_t signs0 = __vcmpeq4(((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201);
-        const uint32_t signs1 = __vcmpeq4(((signs[l] >>  4) * 0x01010101) & 0x08040201, 0x08040201);
-        const int grid_l = __vsub4(grid[0] ^ signs0, signs0);
-        const int grid_h = __vsub4(grid[1] ^ signs1, signs1);
-        sumi1 = __dp4a(grid_l, *((const int *)q8 + 0), sumi1);
-        sumi1 = __dp4a(grid_h, *((const int *)q8 + 1), sumi1);
-        q8 += 8;
-    }
-    int sumi2 = 0;
-    for (int l = 2; l < 4; ++l) {
-        const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300)));
-        const uint32_t signs0 = __vcmpeq4(((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201);
-        const uint32_t signs1 = __vcmpeq4(((signs[l] >>  4) * 0x01010101) & 0x08040201, 0x08040201);
-        const int grid_l = __vsub4(grid[0] ^ signs0, signs0);
-        const int grid_h = __vsub4(grid[1] ^ signs1, signs1);
-        sumi2 = __dp4a(grid_l, *((const int *)q8 + 0), sumi2);
-        sumi2 = __dp4a(grid_h, *((const int *)q8 + 1), sumi2);
-        q8 += 8;
-    }
-    const float d = (float)bq2->d * __low2float(bq8_1[ib32].ds) * 0.25f;
-    return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2);
-#else
-    GGML_UNUSED(ksigns64);
-    NO_DEVICE_CODE;
-#endif
-}
-
-static __device__ __forceinline__ float vec_dot_iq3_xxs_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    const block_iq3_xxs * bq2 = (const block_iq3_xxs *) vbq + kbx;
-
-    const int ib32 = iqs;
-    const uint8_t  * q3 = bq2->qs + 8*ib32;
-    const uint16_t * gas = (const uint16_t *)(bq2->qs + QK_K/4) + 2*ib32;
-    const int8_t   * q8 = bq8_1[ib32].qs;
-    uint32_t aux32 = gas[0] | (gas[1] << 16);
-    int sumi = 0;
-    for (int l = 0; l < 4; ++l) {
-        const uint32_t * grid1 = iq3xxs_grid + q3[2*l+0];
-        const uint32_t * grid2 = iq3xxs_grid + q3[2*l+1];
-        const uint32_t * signs = (const uint32_t *)(ksigns64 + (aux32 & 127));
-        const int grid_l = __vsub4(grid1[0] ^ signs[0], signs[0]);
-        const int grid_h = __vsub4(grid2[0] ^ signs[1], signs[1]);
-        sumi = __dp4a(grid_l, *((int *)q8+0), sumi);
-        sumi = __dp4a(grid_h, *((int *)q8+1), sumi);
-        q8 += 8;
-        aux32 >>= 7;
-    }
-    const float d = (float)bq2->d * (0.5f + aux32) * __low2float(bq8_1[ib32].ds) * 0.5f;
-    return d * sumi;
-#else
-    NO_DEVICE_CODE;
-#endif
-}
-
-// TODO: don't use lookup table for signs
-static __device__ __forceinline__ float vec_dot_iq3_s_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    const block_iq3_s * bq2 = (const block_iq3_s *) vbq + kbx;
-
-    const int ib32 = iqs;
-    const uint8_t  * qs = bq2->qs + 8*ib32;
-    const int8_t   * q8 = bq8_1[ib32].qs;
-    int sumi = 0;
-    for (int l = 0; l < 4; ++l) {
-        const uint32_t * grid1 = iq3s_grid + (qs[2*l+0] | ((bq2->qh[ib32] << (8 - 2*l)) & 256));
-        const uint32_t * grid2 = iq3s_grid + (qs[2*l+1] | ((bq2->qh[ib32] << (7 - 2*l)) & 256));
-        uint32_t signs0 = __vcmpeq4(((bq2->signs[4*ib32+l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201);
-        uint32_t signs1 = __vcmpeq4(((bq2->signs[4*ib32+l] >>  4) * 0x01010101) & 0x08040201, 0x08040201);
-        const int grid_l = __vsub4(grid1[0] ^ signs0, signs0);
-        const int grid_h = __vsub4(grid2[0] ^ signs1, signs1);
-        sumi = __dp4a(grid_l, *((int *)q8+0), sumi);
-        sumi = __dp4a(grid_h, *((int *)q8+1), sumi);
-        q8 += 8;
-    }
-    const float d = (float)bq2->d * (1 + 2*((bq2->scales[ib32/2] >> 4*(ib32%2)) & 0xf)) * __low2float(bq8_1[ib32].ds);
-    return d * sumi;
-#else
-    NO_DEVICE_CODE;
-#endif
-}
-
-static __device__ __forceinline__ float vec_dot_iq1_s_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-    const block_iq1_s * bq1 = (const block_iq1_s *) vbq + kbx;
-
-    const int ib32 = iqs;
-    int sumi = 0;
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    const int * q8 = (const int *)bq8_1[ib32].qs;
-    for (int l = 0; l < 4; ++l) {
-        const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8)));
-        int grid0 = grid[0] & 0x0f0f0f0f;
-        int grid1 = (grid[0] >> 4) & 0x0f0f0f0f;
-        sumi = __dp4a(q8[2*l+1], grid1, __dp4a(q8[2*l+0], grid0, sumi));
-    }
-#else
-    const int8_t * q8 = bq8_1[ib32].qs;
-    for (int l = 0; l < 4; ++l) {
-        const uint8_t * grid = (const uint8_t *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8)));
-        for (int j = 0; j < 4; ++j) {
-            sumi += q8[j] * (grid[j] & 0xf) + q8[j+4] * (grid[j] >> 4);
-        }
-        q8 += 8;
-    }
-#endif
-    const float delta = bq1->qh[ib32] & 0x8000 ? -1-IQ1S_DELTA : -1+IQ1S_DELTA;
-    const float d1q = (float)bq1->d * (2*((bq1->qh[ib32] >> 12) & 7) + 1);
-    const float d = d1q * __low2float (bq8_1[ib32].ds);
-    const float m = d1q * __high2float(bq8_1[ib32].ds);
-    return d * sumi + m * delta;
-}
-
-static __device__ __forceinline__ float vec_dot_iq1_m_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-    const block_iq1_m * bq1 = (const block_iq1_m *) vbq + kbx;
-
-    const int ib32 = iqs;
-    int   sumi[2] = {0, 0};
-    float sumf[2] = {0.f, 0.f};
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    const int * q8 = (const int *)bq8_1[ib32].qs;
-    for (int l = 0; l < 4; ++l) {
-        const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 7) << 8)));
-        int grid0 = grid[0] & 0x0f0f0f0f;
-        int grid1 = (grid[0] >> 4) & 0x0f0f0f0f;
-        sumi[l/2] = __dp4a(q8[2*l+1], grid1, __dp4a(q8[2*l+0], grid0, sumi[l/2]));
-        const float delta = (bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 0x08 ? -1-IQ1M_DELTA : -1+IQ1M_DELTA;
-        const int sumy = __dp4a(q8[2*l+1], 0x01010101, __dp4a(q8[2*l+0], 0x01010101, 0));
-        sumf[l/2] += delta*sumy;
-    }
-#else
-    const int8_t * q8 = bq8_1[ib32].qs;
-    for (int l = 0; l < 4; ++l) {
-        const uint8_t * grid = (const uint8_t *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8)));
-        int sumy = 0;
-        for (int j = 0; j < 4; ++j) {
-            sumi[l/2] += q8[j] * (grid[j] & 0xf) + q8[j+4] * (grid[j] >> 4);
-            sumy += q8[j] + q8[j+4];
-        }
-        const float delta = (bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 0x08 ? -1-IQ1M_DELTA : -1+IQ1M_DELTA;
-        sumf[l/2] += delta*sumy;
-        q8 += 8;
-    }
-#endif
-    iq1m_scale_t scale;
-    const uint16_t * sc = (const uint16_t *)bq1->scales;
-    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-    const float d = (float)scale.f16 * __low2float (bq8_1[ib32].ds);
-    return d * ((sumi[0] + sumf[0]) * (2*((sc[ib32/2] >> 6*(ib32%2)) & 0x7) + 1) + (sumi[1] + sumf[1]) * (2*((sc[ib32/2] >> (6*(ib32%2)+3)) & 0x7) + 1));
-}
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-static __device__ __forceinline__ void get_int_from_table_16(const uint32_t & q4, const uint8_t * values,
-        int & val1, int & val2) {
-
-    uint32_t aux32; const uint8_t * q8 = (const uint8_t *)&aux32;
-    aux32 = q4 & 0x0f0f0f0f;
-    uint16_t v1 = values[q8[0]] | (values[q8[1]] << 8);
-    uint16_t v2 = values[q8[2]] | (values[q8[3]] << 8);
-    val1 = v1 | (v2 << 16);
-    aux32 = (q4 >> 4) & 0x0f0f0f0f;
-    v1 = values[q8[0]] | (values[q8[1]] << 8);
-    v2 = values[q8[2]] | (values[q8[3]] << 8);
-    val2 = v1 | (v2 << 16);
-}
-#endif
-
-static __device__ __forceinline__ float vec_dot_iq4_nl_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-    const block_iq4_nl * bq = (const block_iq4_nl *) vbq + kbx;
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    const uint16_t * q4 = (const uint16_t *)bq->qs + 2*iqs;
-    const int32_t  * q8 = (const int32_t  *)bq8_1->qs + iqs;
-
-    const uint8_t * values = (const uint8_t *)kvalues_iq4nl;
-
-    int v1, v2;
-    int sumi1 = 0, sumi2 = 0;
-    for (int l = 0; l < VDR_Q4_0_Q8_1_MMVQ; ++l) {
-        const uint32_t aux = q4[2*l] | (q4[2*l+1] << 16);
-        get_int_from_table_16(aux, values, v1, v2);
-        sumi1 = __dp4a(v1, q8[l+0], sumi1);
-        sumi2 = __dp4a(v2, q8[l+4], sumi2);
-    }
-
-#else
-    const uint8_t * q4 = bq->qs + 4*iqs;
-    const int8_t  * q8 = bq8_1->qs + 4*iqs;
-
-    int sumi1 = 0, sumi2 = 0;
-    for (int l = 0; l < 4*VDR_Q4_0_Q8_1_MMVQ; ++l) {
-        sumi1 += q8[l+ 0] * kvalues_iq4nl[q4[l] & 0xf];
-        sumi2 += q8[l+16] * kvalues_iq4nl[q4[l] >>  4];
-    }
-#endif
-    const float d = (float)bq->d * __low2float(bq8_1->ds);
-    return d * (sumi1 + sumi2);
-}
-
-static __device__ __forceinline__ float vec_dot_iq4_xs_q8_1(
-    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
-
-#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    const block_iq4_xs * bq4 = (const block_iq4_xs *) vbq + kbx;
-    const uint8_t * values = (const uint8_t *)kvalues_iq4nl;
-
-    // iqs is 0...7
-    const int ib32 = iqs;
-    const int32_t  * q8 = (const int *)bq8_1[ib32].qs;
-    const uint32_t * q4 = (const uint32_t *)bq4->qs + 4*ib32;
-    const int8_t ls = ((bq4->scales_l[ib32/2] >> 4*(ib32%2)) & 0xf) | (((bq4->scales_h >> 2*ib32) & 3) << 4);
-    const float d = (float)bq4->d * (ls - 32) * __low2float(bq8_1[ib32].ds);
-    int v1, v2;
-    int sumi1 = 0, sumi2 = 0;
-    for (int j = 0; j < 4; ++j) {
-        get_int_from_table_16(q4[j], values, v1, v2);
-        sumi1 = __dp4a(v1, q8[j+0], sumi1);
-        sumi2 = __dp4a(v2, q8[j+4], sumi2);
-    }
-    return d * (sumi1 + sumi2);
-#else
-    return vec_dot_iq4_xs_q8_1(vbq, bq8_1, kbx, iqs);
-#endif
-}
diff --git a/ggml-impl.h b/ggml-impl.h
deleted file mode 100644 (file)
index 5e77471..0000000
+++ /dev/null
@@ -1,651 +0,0 @@
-#pragma once
-
-#include "ggml.h"
-
-// GGML internal header
-
-#include <assert.h>
-#include <stdlib.h> // load `stdlib.h` before other headers to work around MinGW bug: https://sourceforge.net/p/mingw-w64/bugs/192/
-#include <stddef.h>
-#include <stdbool.h>
-#include <string.h> // memcpy
-#include <math.h>   // fabsf
-
-#undef MIN
-#undef MAX
-
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-
-#if defined(_WIN32)
-
-#define m512bh(p) p
-#define m512i(p) p
-
-#else
-
-#define m512bh(p) (__m512bh)(p)
-#define m512i(p) (__m512i)(p)
-
-#endif
-
-/**
- * Converts brain16 to float32.
- *
- * The bfloat16 floating point format has the following structure:
- *
- *       ┌sign
- *       │
- *       │   ┌exponent
- *       │   │
- *       │   │      ┌mantissa
- *       │   │      │
- *       │┌──┴───┐┌─┴───┐
- *     0b0000000000000000 brain16
- *
- * Since bf16 has the same number of exponent bits as a 32bit float,
- * encoding and decoding numbers becomes relatively straightforward.
- *
- *       ┌sign
- *       │
- *       │   ┌exponent
- *       │   │
- *       │   │      ┌mantissa
- *       │   │      │
- *       │┌──┴───┐┌─┴───────────────────┐
- *     0b00000000000000000000000000000000 IEEE binary32
- *
- * For comparison, the standard fp16 format has fewer exponent bits.
- *
- *       ┌sign
- *       │
- *       │  ┌exponent
- *       │  │
- *       │  │    ┌mantissa
- *       │  │    │
- *       │┌─┴─┐┌─┴──────┐
- *     0b0000000000000000 IEEE binary16
- *
- * @see IEEE 754-2008
- */
-static inline float ggml_compute_bf16_to_fp32(ggml_bf16_t h) {
-    union {
-        float f;
-        uint32_t i;
-    } u;
-    u.i = (uint32_t)h.bits << 16;
-    return u.f;
-}
-
-/**
- * Converts float32 to brain16.
- *
- * This function is binary identical to AMD Zen4 VCVTNEPS2BF16.
- * Subnormals shall be flushed to zero, and NANs will be quiet.
- * This code should vectorize nicely if using modern compilers.
- */
-static inline ggml_bf16_t ggml_compute_fp32_to_bf16(float s) {
-    ggml_bf16_t h;
-    union {
-        float f;
-        uint32_t i;
-    } u;
-    u.f = s;
-    if ((u.i & 0x7fffffff) > 0x7f800000) { /* nan */
-        h.bits = (u.i >> 16) | 64; /* force to quiet */
-        return h;
-    }
-    if (!(u.i & 0x7f800000)) { /* subnormal */
-        h.bits = (u.i & 0x80000000) >> 16; /* flush to zero */
-        return h;
-    }
-    h.bits = (u.i + (0x7fff + ((u.i >> 16) & 1))) >> 16;
-    return h;
-}
-
-#define GGML_FP32_TO_BF16(x) ggml_compute_fp32_to_bf16(x)
-#define GGML_BF16_TO_FP32(x) ggml_compute_bf16_to_fp32(x)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// static_assert should be a #define, but if it's not,
-// fall back to the _Static_assert C11 keyword.
-// if C99 - static_assert is noop
-// ref: https://stackoverflow.com/a/53923785/4039976
-#ifndef __cplusplus
-#ifndef static_assert
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L)
-#define static_assert(cond, msg) _Static_assert(cond, msg)
-#else
-#define static_assert(cond, msg) struct global_scope_noop_trick
-#endif
-#endif
-#endif
-
-// __FMA__ and __F16C__ are not defined in MSVC, however they are implied with AVX2/AVX512
-#if defined(_MSC_VER) && (defined(__AVX2__) || defined(__AVX512F__))
-#ifndef __FMA__
-#define __FMA__
-#endif
-#ifndef __F16C__
-#define __F16C__
-#endif
-#endif
-
-// __SSE3__ and __SSSE3__ are not defined in MSVC, but SSE3/SSSE3 are present when AVX/AVX2/AVX512 are available
-#if defined(_MSC_VER) && (defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__))
-#ifndef __SSE3__
-#define __SSE3__
-#endif
-#ifndef __SSSE3__
-#define __SSSE3__
-#endif
-#endif
-
-#if defined(__ARM_FEATURE_SVE)
-#include <arm_sve.h>
-#endif
-
-// 16-bit float
-// on Arm, we use __fp16
-// on x86, we use uint16_t
-#if defined(__ARM_NEON)
-
-// if YCM cannot find <arm_neon.h>, make a symbolic link to it, for example:
-//
-//   $ ln -sfn /Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/arm_neon.h ./src/
-//
-#include <arm_neon.h>
-
-#ifdef _MSC_VER
-
-typedef uint16_t ggml_fp16_internal_t;
-
-#define ggml_vld1q_u32(w,x,y,z) { ((w) + ((uint64_t)(x) << 32)), ((y) + ((uint64_t)(z) << 32)) }
-
-#else
-
-typedef __fp16 ggml_fp16_internal_t;
-
-#define ggml_vld1q_u32(w,x,y,z) { (w), (x), (y), (z) }
-
-#endif // _MSC_VER
-
-#if !defined(__aarch64__)
-
-// 32-bit ARM compatibility
-
-// vaddvq_s16
-// vpaddq_s16
-// vpaddq_s32
-// vaddvq_s32
-// vaddvq_f32
-// vmaxvq_f32
-// vcvtnq_s32_f32
-// vzip1_u8
-// vzip2_u8
-
-inline static int32_t vaddvq_s16(int16x8_t v) {
-    return
-        (int32_t)vgetq_lane_s16(v, 0) + (int32_t)vgetq_lane_s16(v, 1) +
-        (int32_t)vgetq_lane_s16(v, 2) + (int32_t)vgetq_lane_s16(v, 3) +
-        (int32_t)vgetq_lane_s16(v, 4) + (int32_t)vgetq_lane_s16(v, 5) +
-        (int32_t)vgetq_lane_s16(v, 6) + (int32_t)vgetq_lane_s16(v, 7);
-}
-
-inline static int16x8_t vpaddq_s16(int16x8_t a, int16x8_t b) {
-    int16x4_t a0 = vpadd_s16(vget_low_s16(a), vget_high_s16(a));
-    int16x4_t b0 = vpadd_s16(vget_low_s16(b), vget_high_s16(b));
-    return vcombine_s16(a0, b0);
-}
-
-inline static int32x4_t vpaddq_s32(int32x4_t a, int32x4_t b) {
-    int32x2_t a0 = vpadd_s32(vget_low_s32(a), vget_high_s32(a));
-    int32x2_t b0 = vpadd_s32(vget_low_s32(b), vget_high_s32(b));
-    return vcombine_s32(a0, b0);
-}
-
-inline static int32_t vaddvq_s32(int32x4_t v) {
-    return vgetq_lane_s32(v, 0) + vgetq_lane_s32(v, 1) + vgetq_lane_s32(v, 2) + vgetq_lane_s32(v, 3);
-}
-
-inline static float vaddvq_f32(float32x4_t v) {
-    return vgetq_lane_f32(v, 0) + vgetq_lane_f32(v, 1) + vgetq_lane_f32(v, 2) + vgetq_lane_f32(v, 3);
-}
-
-inline static float vmaxvq_f32(float32x4_t v) {
-    return
-        MAX(MAX(vgetq_lane_f32(v, 0), vgetq_lane_f32(v, 1)),
-            MAX(vgetq_lane_f32(v, 2), vgetq_lane_f32(v, 3)));
-}
-
-inline static int32x4_t vcvtnq_s32_f32(float32x4_t v) {
-    int32x4_t res;
-
-    res[0] = roundf(vgetq_lane_f32(v, 0));
-    res[1] = roundf(vgetq_lane_f32(v, 1));
-    res[2] = roundf(vgetq_lane_f32(v, 2));
-    res[3] = roundf(vgetq_lane_f32(v, 3));
-
-    return res;
-}
-
-inline static uint8x8_t vzip1_u8(uint8x8_t a, uint8x8_t b) {
-    uint8x8_t res;
-
-    res[0] = a[0]; res[1] = b[0];
-    res[2] = a[1]; res[3] = b[1];
-    res[4] = a[2]; res[5] = b[2];
-    res[6] = a[3]; res[7] = b[3];
-
-    return res;
-}
-
-inline static uint8x8_t vzip2_u8(uint8x8_t a, uint8x8_t b) {
-    uint8x8_t res;
-
-    res[0] = a[4]; res[1] = b[4];
-    res[2] = a[5]; res[3] = b[5];
-    res[4] = a[6]; res[5] = b[6];
-    res[6] = a[7]; res[7] = b[7];
-
-    return res;
-}
-
-// vld1q_s16_x2
-// vld1q_u8_x2
-// vld1q_u8_x4
-// vld1q_s8_x2
-// vld1q_s8_x4
-// TODO: double-check these work correctly
-
-typedef struct ggml_int16x8x2_t {
-    int16x8_t val[2];
-} ggml_int16x8x2_t;
-
-inline static ggml_int16x8x2_t ggml_vld1q_s16_x2(const int16_t * ptr) {
-    ggml_int16x8x2_t res;
-
-    res.val[0] = vld1q_s16(ptr + 0);
-    res.val[1] = vld1q_s16(ptr + 8);
-
-    return res;
-}
-
-typedef struct ggml_uint8x16x2_t {
-    uint8x16_t val[2];
-} ggml_uint8x16x2_t;
-
-inline static ggml_uint8x16x2_t ggml_vld1q_u8_x2(const uint8_t * ptr) {
-    ggml_uint8x16x2_t res;
-
-    res.val[0] = vld1q_u8(ptr + 0);
-    res.val[1] = vld1q_u8(ptr + 16);
-
-    return res;
-}
-
-typedef struct ggml_uint8x16x4_t {
-    uint8x16_t val[4];
-} ggml_uint8x16x4_t;
-
-inline static ggml_uint8x16x4_t ggml_vld1q_u8_x4(const uint8_t * ptr) {
-    ggml_uint8x16x4_t res;
-
-    res.val[0] = vld1q_u8(ptr + 0);
-    res.val[1] = vld1q_u8(ptr + 16);
-    res.val[2] = vld1q_u8(ptr + 32);
-    res.val[3] = vld1q_u8(ptr + 48);
-
-    return res;
-}
-
-typedef struct ggml_int8x16x2_t {
-    int8x16_t val[2];
-} ggml_int8x16x2_t;
-
-inline static ggml_int8x16x2_t ggml_vld1q_s8_x2(const int8_t * ptr) {
-    ggml_int8x16x2_t res;
-
-    res.val[0] = vld1q_s8(ptr + 0);
-    res.val[1] = vld1q_s8(ptr + 16);
-
-    return res;
-}
-
-typedef struct ggml_int8x16x4_t {
-    int8x16_t val[4];
-} ggml_int8x16x4_t;
-
-inline static ggml_int8x16x4_t ggml_vld1q_s8_x4(const int8_t * ptr) {
-    ggml_int8x16x4_t res;
-
-    res.val[0] = vld1q_s8(ptr + 0);
-    res.val[1] = vld1q_s8(ptr + 16);
-    res.val[2] = vld1q_s8(ptr + 32);
-    res.val[3] = vld1q_s8(ptr + 48);
-
-    return res;
-}
-
-// NOTE: not tested
-inline static int8x16_t ggml_vqtbl1q_s8(int8x16_t a, uint8x16_t b) {
-    int8x16_t res;
-
-    res[ 0] = a[b[ 0]];
-    res[ 1] = a[b[ 1]];
-    res[ 2] = a[b[ 2]];
-    res[ 3] = a[b[ 3]];
-    res[ 4] = a[b[ 4]];
-    res[ 5] = a[b[ 5]];
-    res[ 6] = a[b[ 6]];
-    res[ 7] = a[b[ 7]];
-    res[ 8] = a[b[ 8]];
-    res[ 9] = a[b[ 9]];
-    res[10] = a[b[10]];
-    res[11] = a[b[11]];
-    res[12] = a[b[12]];
-    res[13] = a[b[13]];
-    res[14] = a[b[14]];
-    res[15] = a[b[15]];
-
-    return res;
-}
-
-// NOTE: not tested
-inline static uint8x16_t ggml_vqtbl1q_u8(uint8x16_t a, uint8x16_t b) {
-    uint8x16_t res;
-
-    res[ 0] = a[b[ 0]];
-    res[ 1] = a[b[ 1]];
-    res[ 2] = a[b[ 2]];
-    res[ 3] = a[b[ 3]];
-    res[ 4] = a[b[ 4]];
-    res[ 5] = a[b[ 5]];
-    res[ 6] = a[b[ 6]];
-    res[ 7] = a[b[ 7]];
-    res[ 8] = a[b[ 8]];
-    res[ 9] = a[b[ 9]];
-    res[10] = a[b[10]];
-    res[11] = a[b[11]];
-    res[12] = a[b[12]];
-    res[13] = a[b[13]];
-    res[14] = a[b[14]];
-    res[15] = a[b[15]];
-
-    return res;
-}
-
-#else
-
-#define ggml_int16x8x2_t  int16x8x2_t
-#define ggml_uint8x16x2_t uint8x16x2_t
-#define ggml_uint8x16x4_t uint8x16x4_t
-#define ggml_int8x16x2_t  int8x16x2_t
-#define ggml_int8x16x4_t  int8x16x4_t
-
-#define ggml_vld1q_s16_x2 vld1q_s16_x2
-#define ggml_vld1q_u8_x2  vld1q_u8_x2
-#define ggml_vld1q_u8_x4  vld1q_u8_x4
-#define ggml_vld1q_s8_x2  vld1q_s8_x2
-#define ggml_vld1q_s8_x4  vld1q_s8_x4
-#define ggml_vqtbl1q_s8   vqtbl1q_s8
-#define ggml_vqtbl1q_u8   vqtbl1q_u8
-
-#endif // !defined(__aarch64__)
-
-#if !defined(__ARM_FEATURE_DOTPROD)
-
-inline static int32x4_t ggml_vdotq_s32(int32x4_t acc, int8x16_t a, int8x16_t b) {
-    const int16x8_t p0 = vmull_s8(vget_low_s8 (a), vget_low_s8 (b));
-    const int16x8_t p1 = vmull_s8(vget_high_s8(a), vget_high_s8(b));
-
-    return vaddq_s32(acc, vaddq_s32(vpaddlq_s16(p0), vpaddlq_s16(p1)));
-}
-
-#else
-
-#define ggml_vdotq_s32(a, b, c) vdotq_s32(a, b, c)
-
-#endif // !defined(__ARM_FEATURE_DOTPROD)
-
-#endif // defined(__ARM_NEON)
-
-#if defined(__ARM_NEON) && !defined(_MSC_VER)
-
-#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x)
-#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x)
-
-#define GGML_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x)
-
-static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) {
-    ggml_fp16_internal_t tmp;
-    memcpy(&tmp, &h, sizeof(ggml_fp16_t));
-    return (float)tmp;
-}
-
-static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) {
-    ggml_fp16_t res;
-    ggml_fp16_internal_t tmp = f;
-    memcpy(&res, &tmp, sizeof(ggml_fp16_t));
-    return res;
-}
-
-#else
-
-#ifdef __wasm_simd128__
-#include <wasm_simd128.h>
-#else
-#ifdef __POWER9_VECTOR__
-#include <altivec.h>
-#undef bool
-#define bool _Bool
-#else
-#if defined(_MSC_VER) || defined(__MINGW32__)
-#include <intrin.h>
-#else
-#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) || defined(__SSE3__) || defined(__SSE__)
-#if !defined(__riscv)
-#include <immintrin.h>
-#endif
-#endif
-#endif
-#endif
-#endif
-
-#ifdef __riscv_v_intrinsic
-#include <riscv_vector.h>
-#endif
-
-#if defined(__loongarch64)
-#if defined(__loongarch_asx)
-#include <lasxintrin.h>
-#endif
-#if defined(__loongarch_sx)
-#include <lsxintrin.h>
-#endif
-#endif
-
-#if defined(__loongarch_asx)
-
-typedef union {
-    int32_t i;
-    float f;
-} ft_union;
-
-/* float type data load instructions */
-static __m128 __lsx_vreplfr2vr_s(float val) {
-    ft_union fi_tmpval = {.f = val};
-    return (__m128)__lsx_vreplgr2vr_w(fi_tmpval.i);
-}
-
-static __m256 __lasx_xvreplfr2vr_s(float val) {
-    ft_union fi_tmpval = {.f = val};
-    return (__m256)__lasx_xvreplgr2vr_w(fi_tmpval.i);
-}
-#endif
-
-#ifdef __F16C__
-
-#ifdef _MSC_VER
-#define GGML_COMPUTE_FP16_TO_FP32(x) _mm_cvtss_f32(_mm_cvtph_ps(_mm_cvtsi32_si128(x)))
-#define GGML_COMPUTE_FP32_TO_FP16(x) _mm_extract_epi16(_mm_cvtps_ph(_mm_set_ss(x), 0), 0)
-#else
-#define GGML_COMPUTE_FP16_TO_FP32(x) _cvtsh_ss(x)
-#define GGML_COMPUTE_FP32_TO_FP16(x) _cvtss_sh(x, 0)
-#endif
-
-#elif defined(__POWER9_VECTOR__)
-
-#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x)
-#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x)
-/* the inline asm below is about 12% faster than the lookup method */
-#define GGML_FP16_TO_FP32(x) GGML_COMPUTE_FP16_TO_FP32(x)
-#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x)
-
-static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) {
-    register float f;
-    register double d;
-    __asm__(
-        "mtfprd %0,%2\n"
-        "xscvhpdp %0,%0\n"
-        "frsp %1,%0\n" :
-        /* temp */ "=d"(d),
-        /* out */  "=f"(f):
-        /* in */   "r"(h));
-    return f;
-}
-
-static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) {
-    register double d;
-    register ggml_fp16_t r;
-    __asm__( /* xscvdphp can work on double or single precision */
-        "xscvdphp %0,%2\n"
-        "mffprd %1,%0\n" :
-        /* temp */ "=d"(d),
-        /* out */  "=r"(r):
-        /* in */   "f"(f));
-    return r;
-}
-
-#else
-
-// FP16 <-> FP32
-// ref: https://github.com/Maratyszcza/FP16
-
-static inline float fp32_from_bits(uint32_t w) {
-    union {
-        uint32_t as_bits;
-        float as_value;
-    } fp32;
-    fp32.as_bits = w;
-    return fp32.as_value;
-}
-
-static inline uint32_t fp32_to_bits(float f) {
-    union {
-        float as_value;
-        uint32_t as_bits;
-    } fp32;
-    fp32.as_value = f;
-    return fp32.as_bits;
-}
-
-static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) {
-    const uint32_t w = (uint32_t) h << 16;
-    const uint32_t sign = w & UINT32_C(0x80000000);
-    const uint32_t two_w = w + w;
-
-    const uint32_t exp_offset = UINT32_C(0xE0) << 23;
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__)
-    const float exp_scale = 0x1.0p-112f;
-#else
-    const float exp_scale = fp32_from_bits(UINT32_C(0x7800000));
-#endif
-    const float normalized_value = fp32_from_bits((two_w >> 4) + exp_offset) * exp_scale;
-
-    const uint32_t magic_mask = UINT32_C(126) << 23;
-    const float magic_bias = 0.5f;
-    const float denormalized_value = fp32_from_bits((two_w >> 17) | magic_mask) - magic_bias;
-
-    const uint32_t denormalized_cutoff = UINT32_C(1) << 27;
-    const uint32_t result = sign |
-        (two_w < denormalized_cutoff ? fp32_to_bits(denormalized_value) : fp32_to_bits(normalized_value));
-    return fp32_from_bits(result);
-}
-
-static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) {
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__)
-    const float scale_to_inf = 0x1.0p+112f;
-    const float scale_to_zero = 0x1.0p-110f;
-#else
-    const float scale_to_inf = fp32_from_bits(UINT32_C(0x77800000));
-    const float scale_to_zero = fp32_from_bits(UINT32_C(0x08800000));
-#endif
-    float base = (fabsf(f) * scale_to_inf) * scale_to_zero;
-
-    const uint32_t w = fp32_to_bits(f);
-    const uint32_t shl1_w = w + w;
-    const uint32_t sign = w & UINT32_C(0x80000000);
-    uint32_t bias = shl1_w & UINT32_C(0xFF000000);
-    if (bias < UINT32_C(0x71000000)) {
-        bias = UINT32_C(0x71000000);
-    }
-
-    base = fp32_from_bits((bias >> 1) + UINT32_C(0x07800000)) + base;
-    const uint32_t bits = fp32_to_bits(base);
-    const uint32_t exp_bits = (bits >> 13) & UINT32_C(0x00007C00);
-    const uint32_t mantissa_bits = bits & UINT32_C(0x00000FFF);
-    const uint32_t nonsign = exp_bits + mantissa_bits;
-    return (sign >> 16) | (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign);
-}
-
-#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x)
-#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x)
-
-#endif // __F16C__
-
-#endif // defined(__ARM_NEON) && (!defined(__MSC_VER)
-
-// precomputed f32 table for f16 (256 KB)
-// defined in ggml.c, initialized in ggml_init()
-extern float ggml_table_f32_f16[1 << 16];
-
-// On ARM NEON, it's quicker to directly convert x -> x instead of calling into ggml_lookup_fp16_to_fp32,
-// so we define GGML_FP16_TO_FP32 and GGML_FP32_TO_FP16 elsewhere for NEON.
-// This is also true for POWER9.
-#if !defined(GGML_FP16_TO_FP32)
-inline static float ggml_lookup_fp16_to_fp32(ggml_fp16_t f) {
-    uint16_t s;
-    memcpy(&s, &f, sizeof(uint16_t));
-    return ggml_table_f32_f16[s];
-}
-
-#define GGML_FP16_TO_FP32(x) ggml_lookup_fp16_to_fp32(x)
-#endif
-
-#if !defined(GGML_FP32_TO_FP16)
-#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x)
-#endif
-
-#define GGML_HASHTABLE_FULL ((size_t)-1)
-#define GGML_HASHTABLE_ALREADY_EXISTS ((size_t)-2)
-
-struct ggml_hash_set ggml_hash_set_new(size_t size);
-
-bool   ggml_hash_contains      (const struct ggml_hash_set hash_set, struct ggml_tensor * key);
-
-// returns GGML_HASHTABLE_FULL if table is full, otherwise the current index of the key or where it should be inserted
-size_t ggml_hash_find          (const struct ggml_hash_set hash_set, struct ggml_tensor * key);
-
-// returns GGML_HASHTABLE_ALREADY_EXISTS if key already exists, index otherwise, asserts if table is full
-size_t ggml_hash_insert        (      struct ggml_hash_set hash_set, struct ggml_tensor * key);
-
-// return index, asserts if table is full
-size_t ggml_hash_find_or_insert(      struct ggml_hash_set hash_set, struct ggml_tensor * key);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/ggml-kompute.cpp b/ggml-kompute.cpp
deleted file mode 100644 (file)
index ed5f2e3..0000000
+++ /dev/null
@@ -1,2038 +0,0 @@
-#include "ggml.h"
-#include "ggml-backend.h"
-#include "ggml-backend-impl.h"
-#include "ggml-kompute.h"
-
-// These are generated at build time by cmake custom command
-#include "shaderop_scale.h"
-#include "shaderop_scale_8.h"
-#include "shaderop_add.h"
-#include "shaderop_addrow.h"
-#include "shaderop_mul.h"
-#include "shaderop_silu.h"
-#include "shaderop_relu.h"
-#include "shaderop_gelu.h"
-#include "shaderop_softmax.h"
-#include "shaderop_norm.h"
-#include "shaderop_rmsnorm.h"
-#include "shaderop_diagmask.h"
-#include "shaderop_mul_mat_f16.h"
-#include "shaderop_mul_mat_q8_0.h"
-#include "shaderop_mul_mat_q4_0.h"
-#include "shaderop_mul_mat_q4_1.h"
-#include "shaderop_mul_mat_q6_k.h"
-#include "shaderop_mul_mat_mat_f32.h"
-#include "shaderop_getrows_f32.h"
-#include "shaderop_getrows_f16.h"
-#include "shaderop_getrows_q4_0.h"
-#include "shaderop_getrows_q4_1.h"
-#include "shaderop_getrows_q6_k.h"
-#include "shaderop_rope_f16.h"
-#include "shaderop_rope_f32.h"
-#include "shaderop_cpy_f16_f16.h"
-#include "shaderop_cpy_f16_f32.h"
-#include "shaderop_cpy_f32_f16.h"
-#include "shaderop_cpy_f32_f32.h"
-
-#include <algorithm>
-#include <array>
-#include <cassert>
-#include <cstdint>
-#include <cstdio>
-#include <cstring>
-#include <iostream>
-#include <memory>
-#include <stdexcept>
-#include <string>
-#include <unordered_map>
-#include <utility>
-#include <vector>
-
-#include <kompute/Kompute.hpp>
-#include <vulkan/vulkan.hpp>
-
-#ifdef __linux__
-#include <cstdlib> // for setenv
-#endif
-
-#define QK4_0 32
-#define QR4_0 2
-#define QK4_1 32
-#define QK_NL 16
-
-typedef ggml_fp16_t half;
-
-static std::string ggml_kompute_format_name(int device) {
-    return "Kompute" + std::to_string(device);
-}
-
-struct ggml_kompute_context {
-    int device;
-    std::string name;
-    std::shared_ptr<vk::DescriptorPool> pool;
-
-    ggml_kompute_context(int device)
-        : device(device), name(ggml_kompute_format_name(device)) {}
-};
-
-// FIXME: It would be good to consolidate the kompute manager and the kompute context into one object
-// and consolidate the init functions and simplify object lifetime management. As it currently stands,
-// we *have* to have the kompute manager no matter what for device discovery, but the kompute context
-// is only created when a device is set and vulkan is explicitly turned on.
-static ggml_kompute_context *s_kompute_context = nullptr;
-
-class kompute_manager {
-    kp::Manager *s_mgr = nullptr;
-
-public:
-    kp::Manager *operator()() {
-        if (s_mgr && !s_mgr->hasInstance()) {
-            destroy();
-        }
-        if (!s_mgr) {
-            s_mgr = new kp::Manager;
-        }
-        return s_mgr;
-    }
-
-    void destroy() {
-        delete s_mgr;
-        s_mgr = nullptr;
-    }
-};
-
-static kompute_manager komputeManager;
-
-struct ggml_vk_memory {
-    void *data = nullptr;
-    size_t size = 0;
-    vk::DeviceMemory *primaryMemory = nullptr;
-    vk::Buffer *primaryBuffer = nullptr;
-    vk::DeviceMemory *stagingMemory = nullptr;
-    vk::Buffer *stagingBuffer = nullptr;
-};
-
-#ifdef __linux__
-__attribute__((constructor))
-static void enable_sam() {
-    setenv("RADV_PERFTEST", "sam", false);
-}
-#endif
-
-static bool ggml_vk_checkPhysicalDeviceFeatures(vk::PhysicalDevice physical_device) {
-    vk::PhysicalDeviceFeatures availableFeatures;
-    physical_device.getFeatures(&availableFeatures);
-
-    if (!availableFeatures.shaderInt16)
-        return false;
-
-    vk::PhysicalDeviceVulkan11Features availableFeatures11;
-    vk::PhysicalDeviceVulkan12Features availableFeatures12;
-
-    availableFeatures11.pNext = &availableFeatures12;
-    availableFeatures12.pNext = nullptr;
-
-    vk::PhysicalDeviceFeatures2 features2;
-    features2.pNext = &availableFeatures11;
-
-    physical_device.getFeatures2(&features2);
-
-    if (!availableFeatures11.uniformAndStorageBuffer16BitAccess ||
-        !availableFeatures11.storageBuffer16BitAccess) {
-        return false;
-    }
-
-    if (!availableFeatures12.storageBuffer8BitAccess ||
-        !availableFeatures12.uniformAndStorageBuffer8BitAccess ||
-        !availableFeatures12.shaderFloat16 ||
-        !availableFeatures12.shaderInt8) {
-        return false;
-    }
-
-    return true;
-}
-
-static const char * ggml_vk_getVendorName(uint32_t vendorID) {
-    switch (vendorID) {
-        case 0x10DE:
-            return "nvidia";
-        case 0x1002:
-            return "amd";
-        case 0x8086:
-            return "intel";
-        default:
-            return "unknown";
-    }
-}
-
-static std::vector<ggml_vk_device> ggml_vk_available_devices_internal(size_t memoryRequired) {
-    std::vector<ggml_vk_device> results;
-    if (!komputeManager()->hasVulkan() || !komputeManager()->hasInstance())
-        return results;
-
-    std::vector<vk::PhysicalDevice> physical_devices;
-    try {
-        physical_devices = komputeManager()->listDevices();
-    } catch (vk::SystemError & err) {
-        std::cerr << __func__ << ": ignoring Vulkan exception: " << err.what() << "\n";
-        return results;
-    }
-
-    uint32_t deviceCount = physical_devices.size();
-    if (deviceCount == 0)
-        return results;
-
-    std::unordered_map<std::string, size_t> count_by_name;
-
-    for (uint32_t i = 0; i < deviceCount; i++) {
-        const auto & physical_device = physical_devices[i];
-
-        VkPhysicalDeviceProperties dev_props = physical_device.getProperties();
-        VkPhysicalDeviceMemoryProperties memoryProperties = physical_device.getMemoryProperties();
-        const uint32_t major = VK_VERSION_MAJOR(dev_props.apiVersion);
-        const uint32_t minor = VK_VERSION_MINOR(dev_props.apiVersion);
-        if (major < 1 || minor < 2)
-            continue;
-
-        if (!ggml_vk_checkPhysicalDeviceFeatures(physical_device))
-            continue;
-
-        size_t heapSize = 0;
-        for (uint32_t j = 0; j < memoryProperties.memoryHeapCount; ++j) {
-            VkMemoryHeap heap = memoryProperties.memoryHeaps[j];
-            if (heap.flags & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) {
-                heapSize = heap.size;
-                break;
-            }
-        }
-
-        if (heapSize < memoryRequired)
-            continue;
-
-        auto ext_props = physical_device.enumerateDeviceExtensionProperties();
-        bool has_maintenance4 = false;
-
-        // Check if maintenance4 is supported
-        for (const auto & properties : ext_props) {
-            if (strcmp("VK_KHR_maintenance4", properties.extensionName) == 0) {
-                has_maintenance4 = true;
-            }
-        }
-
-        vk::PhysicalDeviceSubgroupProperties subgroup_props;
-        vk::PhysicalDeviceProperties2 dev_props2;
-        vk::PhysicalDeviceMaintenance3Properties dev_props3;
-        vk::PhysicalDeviceMaintenance4Properties dev_props4;
-        dev_props2.pNext = &dev_props3;
-        dev_props3.pNext = &subgroup_props;
-        if (has_maintenance4) {
-            subgroup_props.pNext = &dev_props4;
-        }
-        physical_device.getProperties2(&dev_props2);
-
-        if (subgroup_props.subgroupSize < 32)
-            continue;
-
-        ggml_vk_device d;
-        d.index = i;
-        d.type = dev_props.deviceType;
-        d.heapSize = heapSize;
-        d.vendor = strdup(ggml_vk_getVendorName(dev_props.vendorID));
-        d.subgroupSize = subgroup_props.subgroupSize;
-        d.bufferAlignment = dev_props.limits.minStorageBufferOffsetAlignment;
-
-        if (has_maintenance4) {
-            d.maxAlloc = std::min(dev_props3.maxMemoryAllocationSize, dev_props4.maxBufferSize);
-        } else {
-            d.maxAlloc = dev_props3.maxMemoryAllocationSize;
-        }
-
-        std::string name(dev_props.deviceName);
-        size_t n_idx = ++count_by_name[name];
-        if (n_idx > 1) {
-            name += " (" + std::to_string(n_idx) + ")";
-        }
-        d.name = strdup(name.c_str());
-
-        results.push_back(d);
-    }
-
-    std::stable_sort(results.begin(), results.end(),
-        [](const ggml_vk_device& lhs, const ggml_vk_device& rhs) -> bool {
-            if (lhs.type != rhs.type) {
-                if (lhs.type == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) return true;
-                if (rhs.type == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) return false;
-
-                if (lhs.type == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) return true;
-                if (rhs.type == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) return false;
-            }
-            return lhs.heapSize < rhs.heapSize;
-        }
-    );
-
-    return results;
-}
-
-// public API returns a C-style array
-ggml_vk_device * ggml_vk_available_devices(size_t memoryRequired, size_t * count) {
-    auto devices = ggml_vk_available_devices_internal(memoryRequired);
-    *count = devices.size();
-    if (devices.empty()) {
-        return nullptr;
-    }
-
-    size_t nbytes = sizeof (ggml_vk_device) * (devices.size());
-    auto * arr = static_cast<ggml_vk_device *>(malloc(nbytes));
-    memcpy(arr, devices.data(), nbytes);
-    return arr;
-}
-
-static void ggml_vk_filterByVendor(std::vector<ggml_vk_device>& devices, const std::string& targetVendor) {
-    devices.erase(
-        std::remove_if(devices.begin(), devices.end(),
-            [&targetVendor](const ggml_vk_device& device) {
-                return device.vendor != targetVendor;
-            }),
-        devices.end()
-    );
-}
-
-static void ggml_vk_filterByName(std::vector<ggml_vk_device>& devices, const std::string& targetName) {
-    devices.erase(
-        std::remove_if(devices.begin(), devices.end(),
-            [&targetName](const ggml_vk_device& device) {
-                return device.name != targetName;
-            }),
-        devices.end()
-    );
-}
-
-static bool ggml_vk_get_device(ggml_vk_device * device, size_t memoryRequired, const std::string & name) {
-    if (name.empty())
-        return false;
-
-    auto devices = ggml_vk_available_devices_internal(memoryRequired);
-    if (name == "amd" || name == "nvidia" || name == "intel") {
-        ggml_vk_filterByVendor(devices, name);
-    } else if (name != "gpu") {
-        ggml_vk_filterByName(devices, name);
-    }
-
-    if (devices.empty())
-        return false;
-
-    *device = devices.front();
-    return true;
-}
-
-bool ggml_vk_get_device(ggml_vk_device * device, size_t memoryRequired, const char * name) {
-    return ggml_vk_get_device(device, memoryRequired, std::string(name));
-}
-
-bool ggml_vk_has_vulkan() {
-    return komputeManager()->hasVulkan();
-}
-
-bool ggml_vk_has_device() {
-    return komputeManager()->hasDevice();
-}
-
-ggml_vk_device ggml_vk_current_device() {
-    if (!komputeManager()->hasDevice())
-        return ggml_vk_device();
-
-    auto devices = ggml_vk_available_devices_internal(0);
-    ggml_vk_filterByName(devices, komputeManager()->physicalDevice()->getProperties().deviceName.data());
-    GGML_ASSERT(!devices.empty());
-    return devices.front();
-}
-
-static
-void ggml_vk_allocate_descriptor_pool(struct ggml_kompute_context * ctx, size_t size) {
-    std::vector<vk::DescriptorPoolSize> descriptorPoolSizes = {
-        vk::DescriptorPoolSize(
-          vk::DescriptorType::eStorageBuffer,
-          3 * size // Descriptor count is number of possible tensors to pass into an algorithm
-          )
-    };
-
-    vk::DescriptorPoolCreateInfo descriptorPoolInfo(
-      vk::DescriptorPoolCreateFlags(),
-      size, // Max sets
-      static_cast<uint32_t>(descriptorPoolSizes.size()),
-      descriptorPoolSizes.data());
-
-    ctx->pool = std::make_shared<vk::DescriptorPool>();
-    vk::Result r = komputeManager()->device()->createDescriptorPool(
-      &descriptorPoolInfo, nullptr, ctx->pool.get());
-    if (r != vk::Result::eSuccess)
-        std::cerr << "Error allocating descriptor pool" << vk::to_string(r);
-}
-
-static
-void ggml_vk_free_descriptor_pool(struct ggml_kompute_context * ctx) {
-    if (ctx->pool) {
-        komputeManager()->device()->destroy(
-          *ctx->pool,
-          (vk::Optional<const vk::AllocationCallbacks>)nullptr);
-        ctx->pool = nullptr;
-    }
-}
-
-static
-vk::Buffer *ggml_vk_allocate_buffer(size_t size) {
-    vk::BufferCreateInfo bufferCreateInfo;
-    bufferCreateInfo.size = size;
-    bufferCreateInfo.usage = vk::BufferUsageFlagBits::eStorageBuffer |
-                             vk::BufferUsageFlagBits::eTransferSrc |
-                             vk::BufferUsageFlagBits::eTransferDst;
-    bufferCreateInfo.sharingMode = vk::SharingMode::eExclusive;
-
-    vk::Buffer *vkBuffer = new vk::Buffer;
-    vk::Result r = komputeManager()->device()->createBuffer(&bufferCreateInfo, nullptr, vkBuffer);
-    if (r != vk::Result::eSuccess)
-        std::cerr << "Error allocating buffer " << vk::to_string(r) << std::endl;
-    return vkBuffer;
-}
-
-static
-vk::DeviceMemory *ggml_vk_allocate(size_t size, vk::MemoryPropertyFlags flags, vk::MemoryRequirements requirements, bool *isHostVisible) {
-
-    uint32_t memoryTypeIndex = -1;
-    bool memoryTypeIndexFound = false;
-    vk::PhysicalDeviceMemoryProperties memoryProperties = komputeManager()->physicalDevice()->getMemoryProperties();
-    for (uint32_t i = 0; i < memoryProperties.memoryTypeCount; i++) {
-        const vk::MemoryType &memoryType = memoryProperties.memoryTypes[i];
-        const vk::MemoryHeap &memoryHeap = memoryProperties.memoryHeaps[memoryType.heapIndex];
-        if (memoryHeap.size < size) {
-            continue;
-        }
-
-        if (requirements.memoryTypeBits & (1 << i)) {
-            if (((memoryProperties.memoryTypes[i]).propertyFlags &
-                 flags) == flags) {
-                memoryTypeIndex = i;
-                memoryTypeIndexFound = true;
-                if (isHostVisible && (memoryProperties.memoryTypes[i].propertyFlags & vk::MemoryPropertyFlagBits::eHostVisible)) {
-                    *isHostVisible = true;
-                }
-                break;
-            }
-        }
-    }
-    if (!memoryTypeIndexFound) {
-        throw std::runtime_error(
-          "Memory type index for buffer creation not found");
-    }
-
-    vk::MemoryAllocateInfo allocInfo;
-    allocInfo.allocationSize = size;
-    allocInfo.memoryTypeIndex = memoryTypeIndex;
-    vk::DeviceMemory *vkDeviceMemory =  new vk::DeviceMemory;
-    vk::Result r = komputeManager()->device()->allocateMemory(&allocInfo, nullptr, vkDeviceMemory);
-    if (r != vk::Result::eSuccess) {
-        std::cerr << "Error allocating memory " << vk::to_string(r) << std::endl;
-        throw std::runtime_error("Error allocating vulkan memory.");
-    }
-    return vkDeviceMemory;
-}
-
-static size_t ggml_vk_aligned_offset(ggml_backend_buffer_t buffer, size_t offset) {
-    size_t minStorageBufferOffsetAlignment = ggml_backend_buffer_get_alignment(buffer);
-
-    // If offset is already aligned, return it directly
-    if (offset % minStorageBufferOffsetAlignment == 0) {
-        return offset;
-    }
-
-    // Otherwise, return the largest multiple of minStorageBufferOffsetAlignment less than offset
-    return (offset / minStorageBufferOffsetAlignment) * minStorageBufferOffsetAlignment;
-}
-
-static ggml_vk_memory ggml_vk_allocate(size_t size) {
-    ggml_vk_memory memory;
-    bool isHostVisible = false;
-    {
-        memory.primaryBuffer = ggml_vk_allocate_buffer(size);
-        vk::MemoryRequirements memoryRequirements = komputeManager()->device()->getBufferMemoryRequirements(*memory.primaryBuffer);
-        vk::MemoryPropertyFlags memoryPropertyFlags = vk::MemoryPropertyFlagBits::eDeviceLocal;
-        memory.primaryMemory = ggml_vk_allocate(size, memoryPropertyFlags, memoryRequirements, &isHostVisible);
-        komputeManager()->device()->bindBufferMemory(*memory.primaryBuffer, *memory.primaryMemory, 0);
-        if (isHostVisible) {
-            vk::Result r = komputeManager()->device()->mapMemory(*memory.primaryMemory, 0, size, vk::MemoryMapFlags(), &memory.data);
-            if (r != vk::Result::eSuccess)
-                std::cerr << "Error mapping memory" << vk::to_string(r);
-        }
-    }
-
-    if (!isHostVisible) {
-        memory.stagingBuffer = ggml_vk_allocate_buffer(size);
-        vk::MemoryRequirements memoryRequirements = komputeManager()->device()->getBufferMemoryRequirements(*memory.stagingBuffer);
-        vk::MemoryPropertyFlags memoryPropertyFlags = vk::MemoryPropertyFlagBits::eHostVisible |
-                                                      vk::MemoryPropertyFlagBits::eHostCoherent |
-                                                      vk::MemoryPropertyFlagBits::eHostCached;
-        memory.stagingMemory = ggml_vk_allocate(size, memoryPropertyFlags, memoryRequirements, &isHostVisible);
-        komputeManager()->device()->bindBufferMemory(*memory.stagingBuffer, *memory.stagingMemory, 0);
-        vk::Result r = komputeManager()->device()->mapMemory(*memory.stagingMemory, 0, size, vk::MemoryMapFlags(), &memory.data);
-        if (r != vk::Result::eSuccess)
-            std::cerr << "Error mapping memory" << vk::to_string(r);
-    }
-
-    memory.size = size;
-    return memory;
-}
-
-static void ggml_vk_free_memory(ggml_vk_memory &memory)
-{
-    komputeManager()->device()->destroy(
-      *memory.primaryBuffer,
-      (vk::Optional<const vk::AllocationCallbacks>)nullptr);
-    if (memory.stagingBuffer) {
-        komputeManager()->device()->destroy(
-          *memory.stagingBuffer,
-          (vk::Optional<const vk::AllocationCallbacks>)nullptr);
-    }
-    komputeManager()->device()->freeMemory(
-      *memory.primaryMemory,
-      (vk::Optional<const vk::AllocationCallbacks>)nullptr);
-    if (memory.stagingMemory) {
-        komputeManager()->device()->freeMemory(
-          *memory.stagingMemory,
-          (vk::Optional<const vk::AllocationCallbacks>)nullptr);
-    }
-}
-
-static const char * ggml_backend_kompute_buffer_type_get_name(ggml_backend_buffer_type_t buft);
-
-static
-ggml_vk_memory * ggml_vk_find_tensor(const struct ggml_tensor * t, uint64_t & offset) {
-    ggml_backend_buffer_t buffer = t->view_src ? t->view_src->buffer : t->buffer;
-
-    // compatibility with ggml-backend
-    GGML_ASSERT(buffer && buffer->buft->iface.get_name == ggml_backend_kompute_buffer_type_get_name);
-
-    ggml_vk_memory * buf_ctx = static_cast<ggml_vk_memory *>(buffer->context);
-
-    const intptr_t ioffs = intptr_t(t->data) - intptr_t(buf_ctx->data);
-
-    GGML_ASSERT(ioffs >= 0 && ioffs + int64_t(ggml_nbytes(t)) <= int64_t(buffer->size));
-
-    offset = uint64_t(ioffs);
-    return buf_ctx;
-}
-
-static
-const std::shared_ptr<kp::Tensor> ggml_vk_get_tensor(const struct ggml_tensor * t, uint32_t * alignedOffset = nullptr) {
-    uint64_t originalOffset = 0;
-    auto * res = ggml_vk_find_tensor(t, originalOffset);
-    if (!res) {
-        static std::shared_ptr<kp::Tensor> nullTensor = nullptr;
-        return nullTensor;
-    }
-
-    // Create a tensor whose memory will be composed of our buffers at the correct offset
-    const size_t nelements = ggml_nelements(t);
-    size_t nbytes = ggml_nbytes(t);
-
-    size_t vulkanOffset = ggml_vk_aligned_offset(t->buffer, originalOffset);
-    if (alignedOffset) {
-        *alignedOffset = originalOffset - vulkanOffset;
-        nbytes += *alignedOffset;
-    }
-
-    return komputeManager()->tensor(
-        t->data,
-        nelements,
-        nbytes, kp::Tensor::TensorDataTypes::eFloat,
-        res->primaryMemory, res->primaryBuffer,
-        res->stagingMemory, res->stagingBuffer,
-        vulkanOffset);
-}
-
-static std::vector<uint32_t> getSpirvShader(const unsigned char* rawData, size_t size) {
-    if (size % sizeof(uint32_t) != 0) {
-        throw std::runtime_error("Invalid size: must be divisible by sizeof(uint32_t)");
-    }
-
-    const uint32_t* data_ptr = reinterpret_cast<const uint32_t*>(rawData);
-    size_t count = size / sizeof(uint32_t);
-    return std::vector<uint32_t>(data_ptr, data_ptr + count);
-}
-
-inline static
-uint32_t safe_divide(uint32_t a, uint32_t b) {
-    if (b <= 1) {
-        return a;
-    }
-    if ((a % b) != 0) {
-        fprintf(stderr, "((%u %% %u) == %u) != 0\n", a, b, a % b);
-        GGML_ASSERT(!"safe_divide result would've had remainder");
-    }
-    return a / b;
-}
-
-static void ggml_vk_add(
-    kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& inA,
-    const std::shared_ptr<kp::Tensor>& inB,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
-    int32_t ne00, int32_t ne01, int32_t ne02, int32_t ne03,
-    int32_t nb00, int32_t nb01, int32_t nb02, int32_t nb03,
-    int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13,
-    int32_t nb10, int32_t nb11, int32_t nb12, int32_t nb13,
-    int32_t ne0,
-    int32_t nb0,  int32_t nb1,  int32_t nb2,  int32_t nb3
-) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_add_comp_spv,
-        kp::shader_data::op_add_comp_spv_len);
-
-    struct PushConstants {
-        uint32_t inAOff, inBOff, outOff;
-        int32_t ne00;
-        int32_t nb00, nb01, nb02, nb03;
-        int32_t ne10, ne11, ne12, ne13;
-        int32_t nb10, nb11, nb12, nb13;
-        int32_t ne0;
-        int32_t nb0, nb1, nb2, nb3;
-    } const pushConsts {
-        safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4),
-        ne00,
-        nb00, nb01, nb02, nb03,
-        ne10, ne11, ne12, ne13,
-        nb10, nb11, nb12, nb13,
-        ne0,
-        nb0, nb1, nb2, nb3
-    };
-
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(__func__)) {
-        s_algo = komputeManager()->algorithm<float, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(__func__);
-        s_algo->setTensors({inA, inB, out});
-        s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-static void ggml_vk_addrow(kp::Sequence& seq,
-                 const std::shared_ptr<kp::Tensor>& inA,
-                 const std::shared_ptr<kp::Tensor>& inB,
-                 const std::shared_ptr<kp::Tensor>& out,
-                 uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
-                 uint32_t size, uint32_t row = 0) {
-
-    const static auto spirv = getSpirvShader(kp::shader_data::op_addrow_comp_spv,
-        kp::shader_data::op_addrow_comp_spv_len);
-
-    struct PushConstants {
-        uint32_t inAOff, inBOff, outOff;
-        uint32_t row;
-    } const pushConsts {
-        safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4),
-        row
-    };
-
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(__func__))
-        s_algo = komputeManager()->algorithm<float, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {size}, {}, {pushConsts});
-    else {
-        s_algo = komputeManager()->getAlgorithm(__func__);
-        s_algo->setTensors({inA, inB, out});
-        s_algo->setWorkgroup({size});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-static void ggml_vk_mul(
-    kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& inA,
-    const std::shared_ptr<kp::Tensor>& inB,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
-    int32_t ne00, int32_t ne01, int32_t ne02, int32_t ne03,
-    int32_t nb00, int32_t nb01, int32_t nb02, int32_t nb03,
-    int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13,
-    int32_t nb10, int32_t nb11, int32_t nb12, int32_t nb13,
-    int32_t ne0,
-    int32_t nb0,  int32_t nb1,  int32_t nb2,  int32_t nb3
-) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_comp_spv,
-        kp::shader_data::op_mul_comp_spv_len);
-
-    struct PushConstants {
-        uint32_t inAOff, inBOff, outOff;
-        int32_t ne00;
-        int32_t nb00, nb01, nb02, nb03;
-        int32_t ne10, ne11, ne12, ne13;
-        int32_t nb10, nb11, nb12, nb13;
-        int32_t ne0;
-        int32_t nb0, nb1, nb2, nb3;
-    } const pushConsts {
-        safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4),
-        ne00,
-        nb00, nb01, nb02, nb03,
-        ne10, ne11, ne12, ne13,
-        nb10, nb11, nb12, nb13,
-        ne0,
-        nb0, nb1, nb2, nb3
-    };
-
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(__func__)) {
-        s_algo = komputeManager()->algorithm<float, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(__func__);
-        s_algo->setTensors({inA, inB, out});
-        s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-static void ggml_vk_scale(kp::Sequence& seq,
-                   const std::shared_ptr<kp::Tensor>& in,
-                   const std::shared_ptr<kp::Tensor>& out,
-                   uint32_t inOff, uint32_t outOff,
-                   uint32_t size, float scale) {
-    const static auto spirv_1 = getSpirvShader(
-        kp::shader_data::op_scale_comp_spv, kp::shader_data::op_scale_comp_spv_len
-    );
-    const static auto spirv_8 = getSpirvShader(
-        kp::shader_data::op_scale_8_comp_spv, kp::shader_data::op_scale_8_comp_spv_len
-    );
-
-    struct PushConstants {
-        uint32_t inOff, outOff;
-        float scale;
-    } const pushConsts {
-        safe_divide(inOff, 4), safe_divide(outOff, 4),
-        scale
-    };
-
-    const auto * spirv = &spirv_1;
-    std::string name(__func__);
-    if (size % 8 == 0) {
-        size /= 8;
-        name += "_8";
-        spirv = &spirv_8;
-    }
-
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(name)) {
-        s_algo = komputeManager()->algorithm<float, PushConstants>(name, s_kompute_context->pool.get(), {in, out}, *spirv, {size}, {}, {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(name);
-        s_algo->setTensors({in, out});
-        s_algo->setWorkgroup({size});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-static void ggml_vk_xxlu(
-    const std::vector<uint32_t>& spirv, const char * suffix, kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& in,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inOff, uint32_t outOff,
-    uint32_t size
-) {
-    struct PushConstants {
-        uint32_t inOff, outOff;
-    } const pushConsts {
-        safe_divide(inOff, 4), safe_divide(outOff, 4),
-    };
-
-    auto name = std::string(__func__) + "_" + suffix;
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(name)) {
-        s_algo = komputeManager()->algorithm<float, PushConstants>(name, s_kompute_context->pool.get(), {in, out}, spirv, {size}, {}, {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(name);
-        s_algo->setTensors({in, out});
-        s_algo->setWorkgroup({size});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-template <typename... Args>
-static void ggml_vk_silu(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_silu_comp_spv,
-        kp::shader_data::op_silu_comp_spv_len);
-
-    ggml_vk_xxlu(spirv, "silu", std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_relu(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_relu_comp_spv,
-        kp::shader_data::op_relu_comp_spv_len);
-
-    ggml_vk_xxlu(spirv, "relu", std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_gelu(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_gelu_comp_spv,
-        kp::shader_data::op_gelu_comp_spv_len);
-
-    ggml_vk_xxlu(spirv, "gelu", std::forward<Args>(args)...);
-}
-
-static void ggml_vk_soft_max(
-    kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& inA,
-    const std::shared_ptr<kp::Tensor>& inB,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
-    int32_t ne00, int32_t ne01, int32_t ne02, uint32_t ne03,
-    float scale
-) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_softmax_comp_spv,
-        kp::shader_data::op_softmax_comp_spv_len);
-
-    struct PushConstants {
-        uint32_t inAOff, inBOff, outOff;
-        int32_t ne00, ne01, ne02;
-        float scale;
-        int32_t mask;
-    } pushConsts {
-        safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4),
-        ne00, ne01, ne02,
-        scale,
-        bool(inB)
-    };
-
-    auto & inB_ = inB ? inB : inA;
-
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(__func__)) {
-        // FIXME: The softmax kernel needs to be fixed to use the subgroupsize which can vary by device
-        const uint32_t local_x = 32;
-        s_algo = komputeManager()->algorithm<uint32_t, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB_, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {local_x}, {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(__func__);
-        s_algo->setTensors({inA, inB_, out});
-        s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-static void ggml_vk_norm_(
-    const std::vector<uint32_t>& spirv, const char * suffix, kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& in,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inOff, uint32_t outOff,
-    int32_t ne00, int32_t nb01,
-    int32_t nrows, float epsilon
-) {
-    GGML_ASSERT(nb01%sizeof(float) == 0);
-    GGML_ASSERT(ne00%sizeof(float) == 0);
-
-    struct PushConstants {
-        uint32_t inOff, outOff;
-        uint32_t ne00, nb01;
-        float eps;
-    } pushConsts {
-        safe_divide(inOff, 4), safe_divide(outOff, 4),
-        (uint32_t)ne00, (uint32_t)nb01, epsilon
-    };
-
-    auto name = std::string(__func__) + "_" + suffix;
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(name)) {
-        s_algo = komputeManager()->algorithm<float, PushConstants>(name, s_kompute_context->pool.get(), {in, out}, spirv, {(uint32_t)nrows}, {}, {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(name);
-        s_algo->setTensors({in, out});
-        s_algo->setWorkgroup({(uint32_t)nrows});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-template <typename... Args>
-static void ggml_vk_norm(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_norm_comp_spv,
-        kp::shader_data::op_norm_comp_spv_len);
-
-    ggml_vk_norm_(spirv, "norm", std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_rms_norm(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_rmsnorm_comp_spv,
-        kp::shader_data::op_rmsnorm_comp_spv_len);
-
-    ggml_vk_norm_(spirv, "rms", std::forward<Args>(args)...);
-}
-
-static void ggml_vk_diag_mask_inf(kp::Sequence& seq,
-                           const std::shared_ptr<kp::Tensor>& in,
-                           const std::shared_ptr<kp::Tensor>& out,
-                           uint32_t inOff, uint32_t outOff,
-                           uint32_t n_past,
-                           int32_t ne00, int32_t ne01, int32_t ne02) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_diagmask_comp_spv,
-        kp::shader_data::op_diagmask_comp_spv_len);
-
-    struct PushConstants {
-        uint32_t inOff, outOff;
-        uint32_t n_past;
-        int32_t ne00, ne01;
-    } pushConsts {
-        safe_divide(inOff, 4), safe_divide(outOff, 4),
-        n_past,
-        ne00, ne01
-    };
-
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(__func__))
-        s_algo = komputeManager()->algorithm<float, PushConstants>(__func__, s_kompute_context->pool.get(), {in, out}, spirv, {unsigned(ne00), unsigned(ne01), unsigned(ne02)}, {}, {pushConsts});
-    else {
-        s_algo = komputeManager()->getAlgorithm(__func__);
-        s_algo->setTensors({in, out});
-        s_algo->setWorkgroup({unsigned(ne00), unsigned(ne01), unsigned(ne02)});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-static void ggml_vk_mul_mat_f16(
-    kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& inA,
-    const std::shared_ptr<kp::Tensor>& inB,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
-    int32_t ne00, int32_t ne01, int32_t ne02,
-    uint32_t nb00, uint32_t nb01, uint32_t nb02,
-    int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13,
-    uint32_t nb10, uint32_t nb11, uint32_t nb12,
-    int32_t ne0, int32_t ne1,
-    uint32_t r2, uint32_t r3
-) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_f16_comp_spv,
-        kp::shader_data::op_mul_mat_f16_comp_spv_len);
-
-    struct PushConstants {
-        uint32_t inAOff, inBOff, outOff;
-        int32_t ne00, ne01, ne02;
-        uint32_t nb00, nb01, nb02;
-        int32_t ne10, ne11, ne12;
-        uint32_t nb10, nb11, nb12;
-        int32_t ne0, ne1;
-        uint32_t r2, r3;
-    } pushConsts {
-        safe_divide(inAOff, 2), safe_divide(inBOff, 4), safe_divide(outOff, 4),
-        ne00, ne01, ne02,
-        nb00, nb01, nb02,
-        ne10, ne11, ne12,
-        nb10, nb11, nb12,
-        ne0, ne1,
-        r2, r3
-    };
-
-    const unsigned ny = unsigned((ne11 + 4 - 1)/4);
-
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(__func__)) {
-        const uint32_t local_x = ggml_vk_current_device().subgroupSize * 2;
-        s_algo = komputeManager()->algorithm<uint32_t, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned(ne01), ny, unsigned(ne12*ne13)}, {local_x}, {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(__func__);
-        s_algo->setTensors({inA, inB, out});
-        s_algo->setWorkgroup({unsigned(ne01), ny, unsigned(ne12*ne13)});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-static void ggml_vk_mul_mat_mat_f32(kp::Sequence& seq,
-                         const std::shared_ptr<kp::Tensor>& inA,
-                         const std::shared_ptr<kp::Tensor>& inB,
-                         const std::shared_ptr<kp::Tensor>& out,
-                         uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
-                         int32_t ne00, int32_t ne01, int32_t ne02,
-                         uint32_t nb01, uint32_t nb02,
-                         int32_t ne11, int32_t ne12,
-                         uint32_t nb11, uint32_t nb12,
-                         uint32_t nb1, uint32_t nb2) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_mat_f32_comp_spv,
-        kp::shader_data::op_mul_mat_mat_f32_comp_spv_len);
-
-    struct PushConstants {
-        uint32_t inAOff, inBOff, outOff;
-        int32_t ne00, ne01, ne02, ne11, ne12;
-        uint32_t nb01, nb02;
-        uint32_t nb11, nb12;
-        uint32_t nb1, nb2;
-    } pushConsts {
-        safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4),
-        ne00, ne01, ne02, ne11, ne12,
-        nb01, nb02, nb11, nb12,
-        nb1, nb2
-    };
-
-    const uint32_t local_x = ggml_vk_current_device().subgroupSize;
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(__func__)) {
-        s_algo = komputeManager()->algorithm<uint32_t, PushConstants>(__func__, s_kompute_context->pool.get(),
-        {inA, inB, out}, spirv,
-        {unsigned(ne01),
-         unsigned(ne11),
-         unsigned(std::max(ne12, ne02))
-         },
-        {local_x},
-        {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(__func__);
-        s_algo->setTensors({inA, inB, out});
-        s_algo->setWorkgroup({unsigned(ne01),
-                              unsigned(ne11),
-                              unsigned(std::max(ne12, ne02)),
-                              });
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-static void ggml_vk_mul_mat_impl(
-    const std::vector<uint32_t>& spirv, const char * suffix, uint32_t block_size, kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& inA,
-    const std::shared_ptr<kp::Tensor>& inB,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
-    int32_t ne00, int32_t ne01, int32_t ne02,
-    int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13,
-    int32_t ne0, int32_t ne1,
-    uint32_t r2, uint32_t r3
-) {
-    struct PushConstants {
-        uint32_t inAOff, inBOff, outOff;
-        int32_t ne00, ne01, ne02;
-        int32_t ne10, ne12;
-        int32_t ne0, ne1;
-        uint32_t r2, r3;
-    } pushConsts {
-        safe_divide(inAOff, block_size), safe_divide(inBOff, 4), safe_divide(outOff, 4),
-        ne00, ne01, ne02,
-        ne10, ne12,
-        ne0, ne1,
-        r2, r3
-    };
-
-    auto name = std::string(__func__) + "_" + suffix;
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(name)) {
-        const uint32_t local_x = ggml_vk_current_device().subgroupSize * 2;
-        s_algo = komputeManager()->algorithm<uint32_t, PushConstants>(name, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned((ne01 + 7)/8), unsigned(ne11), unsigned(ne12*ne13)}, {local_x}, {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(name);
-        s_algo->setTensors({inA, inB, out});
-        s_algo->setWorkgroup({unsigned((ne01 + 7)/8), unsigned(ne11), unsigned(ne12*ne13)});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-template <typename... Args>
-static void ggml_vk_mul_mat_q4_0(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q4_0_comp_spv,
-        kp::shader_data::op_mul_mat_q4_0_comp_spv_len);
-
-    ggml_vk_mul_mat_impl(spirv, "q4_0", 1/*We access blocks unaligned*/, std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_mul_mat_q4_1(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q4_1_comp_spv,
-        kp::shader_data::op_mul_mat_q4_1_comp_spv_len);
-
-    ggml_vk_mul_mat_impl(spirv, "q4_1", 1/*We access blocks unaligned*/, std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_mul_mat_q8_0(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q8_0_comp_spv,
-        kp::shader_data::op_mul_mat_q8_0_comp_spv_len);
-
-    ggml_vk_mul_mat_impl(spirv, "q8_0", 1/*We access blocks unaligned*/, std::forward<Args>(args)...);
-}
-
-static void ggml_vk_mul_mat_q6_k(
-    kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& inA,
-    const std::shared_ptr<kp::Tensor>& inB,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
-    int32_t ne00, int32_t ne10, int32_t ne0, int32_t ne1,
-    int32_t ne01, int32_t ne11, int32_t ne12, int32_t ne02
-) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q6_k_comp_spv,
-        kp::shader_data::op_mul_mat_q6_k_comp_spv_len);
-
-    struct PushConstants {
-        uint32_t inAOff, inBOff, outOff;
-        int32_t ne00, ne10, ne0, ne1, ne01, gqa;
-    } pushConsts {
-        inAOff, safe_divide(inBOff, 4), safe_divide(outOff, 4),
-        ne00, ne10, ne0, ne1, ne01, ne12/ne02
-    };
-
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(__func__)) {
-        const uint32_t local_x = ggml_vk_current_device().subgroupSize * 2;
-        s_algo = komputeManager()->algorithm<uint32_t, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned((ne01 + 1)/2), unsigned(ne11), unsigned(ne12)}, {local_x}, {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(__func__);
-        s_algo->setTensors({inA, inB, out});
-        s_algo->setWorkgroup({unsigned((ne01 + 1)/2), unsigned(ne11), unsigned(ne12)});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-static void ggml_vk_get_rows(
-    const std::vector<uint32_t>& spirv,
-    const char * suffix,
-    unsigned element_size, unsigned qk,
-    kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& inA,
-    const std::shared_ptr<kp::Tensor>& inB,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
-    int32_t ne00, int32_t nb01, int32_t nb1,
-    uint32_t size
-) {
-    GGML_ASSERT(nb01%element_size == 0);
-    GGML_ASSERT(nb1%sizeof(float) == 0);
-    if (qk) GGML_ASSERT(ne00%qk == 0);
-
-    struct PushConstants {
-        uint32_t inAOff, inBOff, outOff;
-        int32_t ne00, nb01, nb1;
-    } pushConsts {
-        safe_divide(inAOff, element_size), safe_divide(inBOff, 4), safe_divide(outOff, 4),
-        ne00, nb01, nb1
-    };
-
-    auto name = std::string(__func__) + "_" + suffix;
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(name)) {
-        s_algo = komputeManager()->algorithm<float, PushConstants>(name, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {size}, {}, {pushConsts});
-    } else {
-        s_algo = komputeManager()->getAlgorithm(name);
-        s_algo->setTensors({inA, inB, out});
-        s_algo->setWorkgroup({size});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-template <typename... Args>
-static void ggml_vk_get_rows_f32(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_f32_comp_spv,
-        kp::shader_data::op_getrows_f32_comp_spv_len);
-
-    ggml_vk_get_rows(spirv, "f32", sizeof(float), 0, std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_get_rows_f16(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_f16_comp_spv,
-        kp::shader_data::op_getrows_f16_comp_spv_len);
-
-    ggml_vk_get_rows(spirv, "f16", sizeof(half), 0, std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_get_rows_q4_0(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_q4_0_comp_spv,
-        kp::shader_data::op_getrows_q4_0_comp_spv_len);
-
-    ggml_vk_get_rows(spirv, "q4_0", 1/*We access blocks unaligned*/, QK4_0, std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_get_rows_q4_1(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_q4_1_comp_spv,
-        kp::shader_data::op_getrows_q4_1_comp_spv_len);
-
-    ggml_vk_get_rows(spirv, "q4_1", 1/*We access blocks unaligned*/, QK4_1, std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_get_rows_q6_k(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_q6_k_comp_spv,
-        kp::shader_data::op_getrows_q6_k_comp_spv_len);
-    ggml_vk_get_rows(spirv, "q6_k", 1/*We access blocks unaligned*/, QK_NL, std::forward<Args>(args)...);
-}
-
-static void ggml_vk_rope(
-    kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& inA,
-    const std::shared_ptr<kp::Tensor>& inB,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
-    ggml_type src0t, int32_t n_dims, int32_t mode, int32_t n_ctx_orig,
-    float freq_base, float freq_scale, float ext_factor, float attn_factor, float beta_fast, float beta_slow,
-    int32_t ne01, int32_t ne02, int32_t ne03,
-    uint32_t nb00, uint32_t nb01, uint32_t nb02, uint32_t nb03,
-    int32_t ne0,
-    uint32_t nb0, uint32_t nb1, uint32_t nb2, uint32_t nb3
-) {
-    GGML_ASSERT(src0t == GGML_TYPE_F16 || src0t == GGML_TYPE_F32);
-
-    static const auto spirv_f16 = getSpirvShader(
-        kp::shader_data::op_rope_f16_comp_spv, kp::shader_data::op_rope_f16_comp_spv_len
-    );
-    static const auto spirv_f32 = getSpirvShader(
-        kp::shader_data::op_rope_f32_comp_spv, kp::shader_data::op_rope_f32_comp_spv_len
-    );
-
-    int type_size = src0t == GGML_TYPE_F16 ? 2 : 4;
-
-    GGML_ASSERT(nb03 % type_size == 0);
-    GGML_ASSERT(nb02 % type_size == 0);
-    GGML_ASSERT(nb01 % type_size == 0);
-    GGML_ASSERT(nb00 % type_size == 0);
-    GGML_ASSERT(nb3  % type_size == 0);
-    GGML_ASSERT(nb2  % type_size == 0);
-    GGML_ASSERT(nb1  % type_size == 0);
-    GGML_ASSERT(nb0  % type_size == 0);
-
-    struct PushConstants {
-        uint32_t inAOff, inBOff, outOff;
-        int32_t n_dims, mode, n_ctx_orig;
-        float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
-        uint32_t nb00, nb01, nb02, nb03;
-        int32_t ne0;
-        uint32_t nb0, nb1, nb2, nb3;
-    } pushConsts {
-        safe_divide(inAOff, type_size), safe_divide(inBOff, 4), safe_divide(outOff, type_size),
-        n_dims, mode, n_ctx_orig,
-        freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow,
-        nb00, nb01, nb02, nb03,
-        ne0,
-        nb0, nb1, nb2, nb3
-    };
-
-    auto name = std::string(__func__) + (src0t == GGML_TYPE_F16 ? "_f16" : "_f32");
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(name)) {
-        s_algo = komputeManager()->algorithm<float, PushConstants>(
-            name, s_kompute_context->pool.get(), {inA, inB, out},
-            src0t == GGML_TYPE_F16 ? spirv_f16 : spirv_f32,
-            {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts}
-        );
-    } else {
-        s_algo = komputeManager()->getAlgorithm(name);
-        s_algo->setTensors({inA, inB, out});
-        s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-static void ggml_vk_cpy(
-    const std::vector<uint32_t>& spirv,
-    uint32_t in_element_size, uint32_t out_element_size,
-    kp::Sequence& seq,
-    const std::shared_ptr<kp::Tensor>& in,
-    const std::shared_ptr<kp::Tensor>& out,
-    uint32_t inOff, uint32_t outOff,
-    int32_t ne00, int32_t ne01, int32_t ne02, int32_t ne03,
-    uint32_t nb00, uint32_t nb01, uint32_t nb02, uint32_t nb03,
-    int32_t ne0, int32_t ne1, int32_t ne2,
-    uint32_t nb0, uint32_t nb1, uint32_t nb2, uint32_t nb3
-) {
-    struct PushConstants {
-        uint32_t inOff, outOff;
-        int32_t ne00, ne01, ne02;
-        uint32_t nb00, nb01, nb02, nb03;
-        int32_t ne0, ne1, ne2;
-        uint32_t nb0, nb1, nb2, nb3;
-    } pushConsts {
-        safe_divide(inOff, in_element_size), safe_divide(outOff, out_element_size),
-        ne00, ne01, ne02,
-        nb00, nb01, nb02, nb03,
-        ne0, ne1, ne2,
-        nb0, nb1, nb2, nb3
-    };
-
-    std::string name = std::string(__func__)
-                       + "_i_" + std::to_string(in_element_size)
-                       + "_o_" + std::to_string(out_element_size);
-    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
-    if (!komputeManager()->hasAlgorithm(name))
-        s_algo = komputeManager()->algorithm<float, PushConstants>(name, s_kompute_context->pool.get(), {in, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts});
-    else {
-        s_algo = komputeManager()->getAlgorithm(name);
-        s_algo->setTensors({in, out});
-        s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)});
-        s_algo->setPushConstants<PushConstants>({pushConsts});
-        s_algo->updateDescriptors(s_kompute_context->pool.get());
-    }
-    seq.record<kp::OpAlgoDispatch>(s_algo);
-}
-
-template <typename... Args>
-static void ggml_vk_cpy_f32_f16(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f32_f16_comp_spv,
-        kp::shader_data::op_cpy_f32_f16_comp_spv_len);
-    ggml_vk_cpy(spirv, 4, 2, std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_cpy_f32_f32(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f32_f32_comp_spv,
-        kp::shader_data::op_cpy_f32_f32_comp_spv_len);
-    ggml_vk_cpy(spirv, 4, 4, std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_cpy_f16_f16(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f16_f16_comp_spv,
-        kp::shader_data::op_cpy_f16_f16_comp_spv_len);
-    ggml_vk_cpy(spirv, 2, 2, std::forward<Args>(args)...);
-}
-
-template <typename... Args>
-static void ggml_vk_cpy_f16_f32(Args&&... args) {
-    const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f16_f32_comp_spv,
-        kp::shader_data::op_cpy_f16_f32_comp_spv_len);
-    ggml_vk_cpy(spirv, 2, 4, std::forward<Args>(args)...);
-}
-
-static bool ggml_vk_supports_op(const struct ggml_tensor * op) {
-    switch (op->type) {
-        case GGML_TYPE_F16:
-        case GGML_TYPE_F32:
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-            break;
-        default:
-            return false;
-    }
-
-    switch (op->op) {
-        case GGML_OP_UNARY:
-            switch (ggml_get_unary_op(op)) {
-                case GGML_UNARY_OP_RELU:
-                case GGML_UNARY_OP_GELU:
-                case GGML_UNARY_OP_SILU:
-                    return ggml_is_contiguous(op->src[0]);
-                default:
-                    ;
-            }
-            break;
-        case GGML_OP_NONE:
-        case GGML_OP_RESHAPE:
-        case GGML_OP_VIEW:
-        case GGML_OP_TRANSPOSE:
-        case GGML_OP_PERMUTE:
-        case GGML_OP_ADD:
-        case GGML_OP_MUL:
-        case GGML_OP_SCALE:
-        case GGML_OP_SOFT_MAX:
-        case GGML_OP_RMS_NORM:
-        case GGML_OP_NORM:
-        case GGML_OP_ROPE:
-            return true;
-        case GGML_OP_DUP:
-        case GGML_OP_CPY:
-        case GGML_OP_CONT:
-            switch (op->src[0]->type) {
-                case GGML_TYPE_F32:
-                case GGML_TYPE_F16:
-                    break;
-                default:
-                    return false;
-            }
-            switch (op->type) {
-                case GGML_TYPE_F32:
-                case GGML_TYPE_F16:
-                    break;
-                default:
-                    return false;
-            }
-            return true;
-        case GGML_OP_DIAG_MASK_INF:
-            return op->ne[3] == 1;
-        case GGML_OP_GET_ROWS:
-            switch (op->src[0]->type) {
-                case GGML_TYPE_F32:
-                case GGML_TYPE_F16:
-                case GGML_TYPE_Q4_0:
-                case GGML_TYPE_Q4_1:
-                case GGML_TYPE_Q6_K:
-                    return op->ne[2] == 1 && op->ne[3] == 1;
-                default:
-                    ;
-            }
-            return false;
-        case GGML_OP_MUL_MAT:
-            if (op->src[1]->type != GGML_TYPE_F32 || ggml_is_transposed(op->src[0]) || ggml_is_transposed(op->src[1]))
-                return false;
-
-            switch (op->src[0]->type) {
-                case GGML_TYPE_F32:
-                case GGML_TYPE_Q6_K:
-                    return op->ne[3] == 1;
-                case GGML_TYPE_F16:
-                case GGML_TYPE_Q8_0:
-                case GGML_TYPE_Q4_0:
-                case GGML_TYPE_Q4_1:
-                    return true;
-                default:
-                    ;
-            }
-        default:
-            ;
-    }
-    return false;
-}
-
-static void ggml_vk_graph_compute(struct ggml_kompute_context * ctx, struct ggml_cgraph * gf) {
-    const int n_seq = 8;
-
-    // FIXME: Figure out if we can somehow optimize the size of the pool... right now we're setting
-    // it to the size of the graph, but I think it can be made smaller?
-    ggml_vk_allocate_descriptor_pool(ctx, gf->n_nodes);
-
-    std::vector<std::shared_ptr<kp::Sequence>> sequences(n_seq);
-
-    for (auto& sequence : sequences) {
-        sequence = komputeManager()->sequence();
-    }
-    for (int seq_idx = 0; seq_idx < n_seq; ++seq_idx) {
-        const int n_nodes_per_seq = (gf->n_nodes + n_seq - 1) / n_seq;
-
-        auto& seq = *sequences[seq_idx];
-
-        const int node_start = (seq_idx + 0) * n_nodes_per_seq;
-        const int node_end   = std::min((seq_idx == n_seq - 1) ? gf->n_nodes : (seq_idx + 1) * n_nodes_per_seq, gf->n_nodes);
-
-        bool any_commands_recorded = false;
-
-        for (int i = node_start; i < node_end; ++i) {
-            struct ggml_tensor * src0 = gf->nodes[i]->src[0];
-            struct ggml_tensor * src1 = gf->nodes[i]->src[1];
-            struct ggml_tensor * src2 = gf->nodes[i]->src[2]; GGML_UNUSED(src2);
-            struct ggml_tensor * dst = gf->nodes[i];
-            GGML_ASSERT(dst->data != nullptr);
-
-            if (ggml_is_empty(dst)) {
-                continue;
-            }
-
-            switch (dst->op) {
-                case GGML_OP_NONE:
-                case GGML_OP_RESHAPE:
-                case GGML_OP_VIEW:
-                case GGML_OP_TRANSPOSE:
-                case GGML_OP_PERMUTE:
-                    continue; // noop -> next node
-                default:
-                    break;
-            }
-
-            any_commands_recorded = true;
-
-            if (!ggml_vk_supports_op(dst)) {
-                 fprintf(stderr, "%s: error: unsupported op '%s'\n", __func__, ggml_op_desc(dst));
-                 GGML_ASSERT(!"unsupported op");
-            }
-
-            const int32_t ne00 = src0 ? src0->ne[0] : 0;
-            const int32_t ne01 = src0 ? src0->ne[1] : 0;
-            const int32_t ne02 = src0 ? src0->ne[2] : 0;
-            const int32_t ne03 = src0 ? src0->ne[3] : 0;
-
-            const uint32_t nb00 = src0 ? src0->nb[0] : 0;
-            const uint32_t nb01 = src0 ? src0->nb[1] : 0;
-            const uint32_t nb02 = src0 ? src0->nb[2] : 0;
-            const uint32_t nb03 = src0 ? src0->nb[3] : 0;
-
-            const int32_t ne10 = src1 ? src1->ne[0] : 0;
-            const int32_t ne11 = src1 ? src1->ne[1] : 0;
-            const int32_t ne12 = src1 ? src1->ne[2] : 0;
-            const int32_t ne13 = src1 ? src1->ne[3] : 0;
-
-            const uint32_t nb10 = src1 ? src1->nb[0] : 0;
-            const uint32_t nb11 = src1 ? src1->nb[1] : 0;
-            const uint32_t nb12 = src1 ? src1->nb[2] : 0;
-            const uint32_t nb13 = src1 ? src1->nb[3] : 0;
-
-            const int32_t ne0 = dst ? dst->ne[0] : 0;
-            const int32_t ne1 = dst ? dst->ne[1] : 0;
-            const int32_t ne2 = dst ? dst->ne[2] : 0;
-//            const int32_t ne3 = dst ? dst->ne[3] : 0;
-
-            const uint32_t nb0 = dst ? dst->nb[0] : 0;
-            const uint32_t nb1 = dst ? dst->nb[1] : 0;
-            const uint32_t nb2 = dst ? dst->nb[2] : 0;
-            const uint32_t nb3 = dst ? dst->nb[3] : 0;
-
-            const enum ggml_type src0t = src0 ? src0->type : GGML_TYPE_COUNT;
-            const enum ggml_type src1t = src1 ? src1->type : GGML_TYPE_COUNT;
-            const enum ggml_type dstt = dst ? dst->type : GGML_TYPE_COUNT;
-
-            const static std::shared_ptr<kp::Tensor> nullTensor = nullptr;
-            uint32_t off_src0 = 0;
-            uint32_t off_src1 = 0;
-            uint32_t off_dst  = 0;
-            const std::shared_ptr<kp::Tensor>& id_src0 = src0 ? ggml_vk_get_tensor(src0, &off_src0) : nullTensor;
-            const std::shared_ptr<kp::Tensor>& id_src1 = src1 ? ggml_vk_get_tensor(src1, &off_src1) : nullTensor;
-            const std::shared_ptr<kp::Tensor>& id_dst  = dst  ? ggml_vk_get_tensor(dst,  &off_dst)  : nullTensor;
-
-            switch (dst->op) {
-                case GGML_OP_ADD:
-                    {
-                        if (ggml_nelements(src1) == ne10 && ggml_is_contiguous(src1) && ne00 % 4 == 0 && ne10 % 4 == 0) {
-                            // src1 is a row
-                            ggml_vk_addrow(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ggml_nelements(dst)/4, ne00);
-                        } else {
-                            ggml_vk_add(
-                                seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
-                                ne00, ne01, ne02, ne03,
-                                nb00, nb01, nb02, nb03,
-                                ne10, ne11, ne12, ne13,
-                                nb10, nb11, nb12, nb13,
-                                ne0,
-                                nb0, nb1, nb2, nb3
-                            );
-                        }
-                    } break;
-                case GGML_OP_MUL:
-                    {
-                        ggml_vk_mul(
-                            seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
-                            ne00, ne01, ne02, ne03,
-                            nb00, nb01, nb02, nb03,
-                            ne10, ne11, ne12, ne13,
-                            nb10, nb11, nb12, nb13,
-                            ne0,
-                            nb0, nb1, nb2, nb3
-                        );
-                    } break;
-                case GGML_OP_SCALE:
-                    {
-                        float scale; memcpy(&scale, dst->op_params, sizeof(float));
-
-                        ggml_vk_scale(seq, id_src0, id_dst, off_src0, off_dst, ggml_nelements(dst), scale);
-                    } break;
-                case GGML_OP_UNARY:
-                    {
-                        int64_t n = ggml_nelements(dst);
-                        GGML_ASSERT(n % 4 == 0);
-                        switch (ggml_get_unary_op(gf->nodes[i])) {
-                            case GGML_UNARY_OP_SILU:
-                                {
-                                    ggml_vk_silu(seq, id_src0, id_dst, off_src0, off_dst, n/4);
-                                } break;
-                            case GGML_UNARY_OP_RELU:
-                                {
-                                    ggml_vk_relu(seq, id_src0, id_dst, off_src0, off_dst, n/4);
-                                } break;
-                            case GGML_UNARY_OP_GELU:
-                                {
-                                    GGML_ASSERT(n % 8 == 0);
-                                    ggml_vk_gelu(seq, id_src0, id_dst, off_src0, off_dst, n/8);
-                                } break;
-                            default:
-                                {
-                                    fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op));
-                                    GGML_ASSERT(false);
-                                }
-                        }
-                    } break;
-                case GGML_OP_SOFT_MAX:
-                    {
-                        float scale;
-                        float max_bias;
-
-                        memcpy(&scale,    (float *)dst->op_params + 0, sizeof(float));
-                        memcpy(&max_bias, (float *)dst->op_params + 1, sizeof(float));
-
-#pragma message("TODO: add ggml_vk_soft_max() F16 src1 support")
-#pragma message("ref:  https://github.com/ggerganov/llama.cpp/pull/5021")
-                        GGML_ASSERT(!src1 || src1t == GGML_TYPE_F32);
-
-#pragma message("TODO: add ALiBi support")
-#pragma message("ref:  https://github.com/ggerganov/llama.cpp/pull/7192")
-                        GGML_ASSERT(max_bias == 0.0f);
-
-                        ggml_vk_soft_max(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, ne01, ne02, ne03, scale);
-                    } break;
-                case GGML_OP_DIAG_MASK_INF:
-                    {
-                        const int n_past = ((int32_t *)(dst->op_params))[0];
-                        ggml_vk_diag_mask_inf(seq, id_src0, id_dst, off_src0, off_dst, n_past, ne00, ne01, ne02);
-                    } break;
-                case GGML_OP_NORM:
-                    {
-                        float eps;
-                        memcpy(&eps, dst->op_params, sizeof(float));
-                        ggml_vk_norm(seq, id_src0, id_dst, off_src0, off_dst, ne00, nb01, ggml_nrows(src0), eps);
-                    } break;
-                case GGML_OP_RMS_NORM:
-                    {
-                        GGML_ASSERT(ne00 % 4 == 0);
-
-                        float eps;
-                        memcpy(&eps, dst->op_params, sizeof(float));
-                        ggml_vk_rms_norm(seq, id_src0, id_dst, off_src0, off_dst, ne00, nb01, ggml_nrows(src0), eps);
-                    } break;
-                case GGML_OP_MUL_MAT:
-                    {
-                        GGML_ASSERT(ne00 == ne10);
-
-                        GGML_ASSERT(ne12 % ne02 == 0);
-                        GGML_ASSERT(ne13 % ne03 == 0);
-
-                        const uint32_t r2 = ne12/ne02;
-                        const uint32_t r3 = ne13/ne03;
-
-                        if (src1t != GGML_TYPE_F32) {
-                            fprintf(stderr, "%s: %s: Unsupported src1 type: %u/%u\n", __func__, ggml_op_name(dst->op), src0t, src1t);
-                            goto not_implemented;
-                        }
-
-                        if (ggml_is_transposed(src0) ||
-                            ggml_is_transposed(src1)) {
-                            fprintf(stderr, "%s: %s: matmul on tranposed tensor not supported: %u/%u\n", __func__, ggml_op_name(dst->op), src0t, src1t);
-                            goto not_implemented;
-                        }
-
-                        switch (src0t) {
-                            case GGML_TYPE_F32:
-                                ggml_vk_mul_mat_mat_f32(
-                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
-                                    ne00, ne01, ne02, nb01, nb02, ne11, ne12, nb11, nb12, nb1, nb2
-                                );
-                                break;
-                            case GGML_TYPE_F16:
-                                ggml_vk_mul_mat_f16(
-                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
-                                    ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, ne13, nb10, nb11, nb12,
-                                    ne0, ne1, r2, r3
-                                );
-                                break;
-                            case GGML_TYPE_Q8_0:
-                                ggml_vk_mul_mat_q8_0(
-                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
-                                    ne00, ne01, ne02, ne10, ne11, ne12, ne13, ne0, ne1, r2, r3
-                                );
-                                break;
-                            case GGML_TYPE_Q4_0:
-                                ggml_vk_mul_mat_q4_0(
-                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
-                                    ne00, ne01, ne02, ne10, ne11, ne12, ne13, ne0, ne1, r2, r3
-                                );
-                                break;
-                            case GGML_TYPE_Q4_1:
-                                ggml_vk_mul_mat_q4_1(
-                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
-                                    ne00, ne01, ne02, ne10, ne11, ne12, ne13, ne0, ne1, r2, r3
-                                );
-                                break;
-                            case GGML_TYPE_Q6_K:
-                                ggml_vk_mul_mat_q6_k(
-                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
-                                    ne00, ne10, ne0, ne1, ne01, ne11, ne12, ne02
-                                );
-                                break;
-                            default: {
-                                fprintf(stderr, "%s: %s: Unsupported quantization: %u/%u\n", __func__, ggml_op_name(dst->op), src0t, src1t);
-                                goto not_implemented;
-                            }
-                        }
-
-                    } break;
-                case GGML_OP_GET_ROWS:
-                    {
-                        if (src0t == GGML_TYPE_F32) {
-                            ggml_vk_get_rows_f32(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1));
-                        } else if (src0t == GGML_TYPE_F16) {
-                            ggml_vk_get_rows_f16(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1));
-                        } else if (src0t == GGML_TYPE_Q4_0) {
-                            ggml_vk_get_rows_q4_0(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1));
-                        } else if (src0t == GGML_TYPE_Q4_1) {
-                            ggml_vk_get_rows_q4_1(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1));
-                        } else if (src0t == GGML_TYPE_Q6_K) {
-                            ggml_vk_get_rows_q6_k(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1));
-                        } else {
-                            fprintf(stderr, "%s: %s: Unsupported quantization: %u\n", __func__, ggml_op_name(dst->op), src0t);
-                            goto not_implemented;
-                        }
-                    } break;
-                case GGML_OP_ROPE:
-                    {
-#pragma message("TODO: implement phi3 frequency factors support")
-#pragma message("      https://github.com/ggerganov/llama.cpp/pull/7225")
-                        GGML_ASSERT(dst->src[2] == nullptr && "phi3 frequency factors not implemented yet");
-
-#pragma message("TODO: update rope NORM mode to match NEOX mode")
-#pragma message("      https://github.com/ggerganov/llama.cpp/pull/7634")
-
-                        GGML_ASSERT(ne10 == ne02);
-                        GGML_ASSERT(src0t == dstt);
-                        // const int n_past = ((int32_t *) dst->op_params)[0];
-                        const int n_dims     = ((int32_t *) dst->op_params)[1];
-                        const int mode       = ((int32_t *) dst->op_params)[2];
-                        // skip 3, n_ctx used in GLM RoPE, unimplemented in Vulkan
-                        const int n_ctx_orig = ((int32_t *) dst->op_params)[4];
-
-                        float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
-                        memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
-                        memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
-                        memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
-                        memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
-                        memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
-                        memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
-                        ggml_vk_rope(
-                            seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, src0t, n_dims, mode, n_ctx_orig,
-                            freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow,
-                            ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, nb0, nb1, nb2, nb3
-                        );
-                    } break;
-                case GGML_OP_DUP:
-                case GGML_OP_CPY:
-                case GGML_OP_CONT:
-                    {
-                        switch (src0t) {
-                            case GGML_TYPE_F32:
-                                {
-                                    switch (dstt) {
-                                        case GGML_TYPE_F16: ggml_vk_cpy_f32_f16(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break;
-                                        case GGML_TYPE_F32: ggml_vk_cpy_f32_f32(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break;
-                                        default: goto not_implemented;
-                                    }
-                                } break;
-                            case GGML_TYPE_F16:
-                                {
-                                    switch (dstt) {
-                                        case GGML_TYPE_F16: ggml_vk_cpy_f16_f16(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break;
-                                        case GGML_TYPE_F32: ggml_vk_cpy_f16_f32(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break;
-                                    default: goto not_implemented;
-                                } break;
-                            default: goto not_implemented;
-                            }
-                        }
-                    } break;
-                default: goto not_implemented;
-            }
-            continue;
-            not_implemented: {}
-            fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op));
-            //GGML_ASSERT(false);
-        }
-
-        // Evaluate sequence
-        if (any_commands_recorded) {
-            seq.evalAsync();
-        }
-    }
-
-    // Wait for all sequences to finish
-    for (auto& sequence : sequences) {
-        if (sequence->isRunning())
-            sequence->evalAwait();
-    }
-
-    ggml_vk_free_descriptor_pool(ctx);
-}
-
-template<>
-kp::Tensor::TensorDataTypes
-kp::TensorT<half>::dataType()
-{
-    return TensorDataTypes::eFloat;
-}
-
-template<>
-kp::Tensor::TensorDataTypes
-kp::TensorT<uint8_t>::dataType()
-{
-    return TensorDataTypes::eUnsignedInt;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-// backend interface
-
-struct ggml_backend_kompute_buffer_type_context {
-    int         device;
-    int         device_ref = 0;
-    uint64_t    buffer_alignment;
-    uint64_t    max_alloc;
-    std::string name;
-
-    ggml_backend_kompute_buffer_type_context(int device, uint64_t buffer_alignment, uint64_t max_alloc)
-        : device(device), buffer_alignment(buffer_alignment), max_alloc(max_alloc), name(ggml_kompute_format_name(device)) {}
-};
-
-static void ggml_backend_kompute_device_ref(ggml_backend_buffer_type_t buft) {
-    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buft->context);
-
-    if (!ctx->device_ref) {
-        komputeManager()->initializeDevice(
-            ctx->device, {}, {
-                "VK_KHR_shader_float16_int8", "VK_KHR_8bit_storage",
-                "VK_KHR_16bit_storage", "VK_KHR_shader_non_semantic_info"
-            }
-        );
-    }
-
-    assert(ggml_vk_has_device());
-    ctx->device_ref++;
-}
-
-static void ggml_backend_kompute_device_unref(ggml_backend_buffer_type_t buft) {
-    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buft->context);
-
-    assert(ctx->device_ref > 0);
-
-    ctx->device_ref--;
-
-    if (!ctx->device_ref) {
-        komputeManager.destroy();
-    }
-}
-
-static const char * ggml_backend_kompute_buffer_get_name(ggml_backend_buffer_t buffer) {
-    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buffer->buft->context);
-    return ctx->name.c_str();
-}
-
-static void ggml_backend_kompute_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    auto * memory = (ggml_vk_memory *)buffer->context;
-    if (ggml_vk_has_device()) {
-        ggml_vk_free_memory(*memory);
-    }
-    delete memory;
-}
-
-static void * ggml_backend_kompute_buffer_get_base(ggml_backend_buffer_t buffer) {
-    return ((ggml_vk_memory *)buffer->context)->data;
-}
-
-static void ggml_backend_kompute_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    GGML_UNUSED(buffer);
-
-    const auto res = ggml_vk_get_tensor(tensor);
-    GGML_ASSERT(res);
-
-    memcpy((char *)tensor->data + offset, data, size);
-
-    komputeManager()->sequence()->eval<kp::OpTensorSyncDevice>({res});
-}
-
-static void ggml_backend_kompute_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    GGML_UNUSED(buffer);
-
-    const auto res = ggml_vk_get_tensor(tensor);
-    GGML_ASSERT(res);
-
-    komputeManager()->sequence()->eval<kp::OpTensorSyncLocal>({res});
-
-    memcpy(data, (const char *)tensor->data + offset, size);
-}
-
-static void ggml_backend_kompute_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
-    auto * memory = (ggml_vk_memory *)buffer->context;
-    memset(memory->data, value, buffer->size);
-
-    if (memory->stagingBuffer)
-        komputeManager()->sequence()->eval<kp::OpBufferSyncDevice>(memory->primaryBuffer, memory->stagingBuffer, memory->size);
-}
-
-static ggml_backend_buffer_i ggml_backend_kompute_buffer_i = {
-    /* .get_name        = */ ggml_backend_kompute_buffer_get_name,
-    /* .free_buffer     = */ ggml_backend_kompute_buffer_free_buffer,
-    /* .get_base        = */ ggml_backend_kompute_buffer_get_base,
-    /* .init_tensor     = */ NULL,
-    /* .set_tensor      = */ ggml_backend_kompute_buffer_set_tensor,
-    /* .get_tensor      = */ ggml_backend_kompute_buffer_get_tensor,
-    /* .cpy_tensor      = */ NULL,
-    /* .clear           = */ ggml_backend_kompute_buffer_clear,
-    /* .reset           = */ NULL,
-};
-
-// default buffer type
-
-static const char * ggml_backend_kompute_buffer_type_get_name(ggml_backend_buffer_type_t buft) {
-    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buft->context);
-    return ctx->name.c_str();
-}
-
-static ggml_backend_buffer_t ggml_backend_kompute_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    ggml_backend_kompute_device_ref(buft);
-    auto * ctx = new ggml_vk_memory(ggml_vk_allocate(size));
-    return ggml_backend_buffer_init(buft, ggml_backend_kompute_buffer_i, ctx, size);
-}
-
-static size_t ggml_backend_kompute_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
-    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buft->context);
-    return ctx->buffer_alignment;
-}
-
-static size_t ggml_backend_vk_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) {
-    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buft->context);
-    return ctx->max_alloc;
-}
-
-static ggml_backend_buffer_type_i ggml_backend_kompute_buffer_type_interface = {
-    /* .get_name         = */ ggml_backend_kompute_buffer_type_get_name,
-    /* .alloc_buffer     = */ ggml_backend_kompute_buffer_type_alloc_buffer,
-    /* .get_alignment    = */ ggml_backend_kompute_buffer_type_get_alignment,
-    /* .get_max_size     = */ ggml_backend_vk_buffer_type_get_max_size,
-    /* .get_alloc_size   = */ NULL, // defaults to ggml_nbytes
-    /* .is_host          = */ NULL,
-};
-
-ggml_backend_buffer_type_t ggml_backend_kompute_buffer_type(int device) {
-    static std::vector<ggml_backend_buffer_type> bufts = []() {
-        std::vector<ggml_backend_buffer_type> vec;
-        auto devices = ggml_vk_available_devices_internal(0);
-        vec.reserve(devices.size());
-
-        for (const auto & dev : devices) {
-            vec.push_back({
-                /* .iface   = */ ggml_backend_kompute_buffer_type_interface,
-                /* .context = */ new ggml_backend_kompute_buffer_type_context(dev.index, dev.bufferAlignment, dev.maxAlloc)
-            });
-        }
-        return vec;
-    }();
-
-    auto it = std::find_if(bufts.begin(), bufts.end(), [device](const ggml_backend_buffer_type & t) {
-        return device == static_cast<ggml_backend_kompute_buffer_type_context *>(t.context)->device;
-    });
-    return it < bufts.end() ? &*it : nullptr;
-}
-
-// backend
-
-static const char * ggml_backend_kompute_name(ggml_backend_t backend) {
-    auto * ctx = static_cast<ggml_kompute_context *>(backend->context);
-    return ctx->name.c_str();
-}
-
-static void ggml_backend_kompute_free(ggml_backend_t backend) {
-    auto * ctx = static_cast<ggml_kompute_context *>(backend->context);
-
-    assert(ctx == s_kompute_context);
-    s_kompute_context = nullptr;
-    if (ctx != nullptr) {
-        delete ctx;
-    }
-
-    delete backend;
-}
-
-static ggml_backend_buffer_type_t ggml_backend_kompute_get_default_buffer_type(ggml_backend_t backend) {
-    auto * ctx = static_cast<ggml_kompute_context *>(backend->context);
-    return ggml_backend_kompute_buffer_type(ctx->device);
-}
-
-static ggml_status ggml_backend_kompute_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
-    auto * ctx = static_cast<ggml_kompute_context *>(backend->context);
-    ggml_vk_graph_compute(ctx, cgraph);
-    return GGML_STATUS_SUCCESS;
-}
-
-static bool ggml_backend_kompute_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
-    GGML_UNUSED(backend);
-    return ggml_vk_supports_op(op);
-}
-
-static bool ggml_backend_kompute_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
-    GGML_UNUSED(backend);
-    return buft->iface.get_name == ggml_backend_kompute_buffer_type_get_name;
-}
-
-static struct ggml_backend_i kompute_backend_i = {
-    /* .get_name                = */ ggml_backend_kompute_name,
-    /* .free                    = */ ggml_backend_kompute_free,
-    /* .get_default_buffer_type = */ ggml_backend_kompute_get_default_buffer_type,
-    /* .set_tensor_async        = */ NULL,
-    /* .get_tensor_async        = */ NULL,
-    /* .cpy_tensor_async        = */ NULL,
-    /* .synchronize             = */ NULL,
-    /* .graph_plan_create       = */ NULL,
-    /* .graph_plan_free         = */ NULL,
-    /* .graph_plan_update       = */ NULL,
-    /* .graph_plan_compute      = */ NULL,
-    /* .graph_compute           = */ ggml_backend_kompute_graph_compute,
-    /* .supports_op             = */ ggml_backend_kompute_supports_op,
-    /* .supports_buft           = */ ggml_backend_kompute_supports_buft,
-    /* .offload_op              = */ NULL,
-    /* .event_new               = */ NULL,
-    /* .event_free              = */ NULL,
-    /* .event_record            = */ NULL,
-    /* .event_wait              = */ NULL,
-    /* .event_synchronize       = */ NULL,
-};
-
-static ggml_guid_t ggml_backend_kompute_guid() {
-    static ggml_guid guid = { 0x7b, 0x57, 0xdc, 0xaf, 0xde, 0x12, 0x1d, 0x49, 0xfb, 0x35, 0xfa, 0x9b, 0x18, 0x31, 0x1d, 0xca };
-    return &guid;
-}
-
-ggml_backend_t ggml_backend_kompute_init(int device) {
-    GGML_ASSERT(s_kompute_context == nullptr);
-    s_kompute_context = new ggml_kompute_context(device);
-
-    ggml_backend_t kompute_backend = new ggml_backend {
-        /* .guid      = */ ggml_backend_kompute_guid(),
-        /* .interface = */ kompute_backend_i,
-        /* .context   = */ s_kompute_context,
-    };
-
-    return kompute_backend;
-}
-
-bool ggml_backend_is_kompute(ggml_backend_t backend) {
-    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_kompute_guid());
-}
-
-static ggml_backend_t ggml_backend_reg_kompute_init(const char * params, void * user_data) {
-    GGML_UNUSED(params);
-    return ggml_backend_kompute_init(intptr_t(user_data));
-}
-
-extern "C" int ggml_backend_kompute_reg_devices();
-
-int ggml_backend_kompute_reg_devices() {
-    auto devices = ggml_vk_available_devices_internal(0);
-    for (const auto & device : devices) {
-        ggml_backend_register(
-            ggml_kompute_format_name(device.index).c_str(),
-            ggml_backend_reg_kompute_init,
-            ggml_backend_kompute_buffer_type(device.index),
-            reinterpret_cast<void *>(intptr_t(device.index))
-        );
-    }
-    return devices.size();
-}
diff --git a/ggml-kompute.h b/ggml-kompute.h
deleted file mode 100644 (file)
index 1714654..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#pragma once
-
-#include "ggml.h"
-#include "ggml-backend.h"
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct ggml_vk_device {
-    int index;
-    int type; // same as VkPhysicalDeviceType
-    size_t heapSize;
-    const char * name;
-    const char * vendor;
-    int subgroupSize;
-    uint64_t bufferAlignment;
-    uint64_t maxAlloc;
-};
-
-struct ggml_vk_device * ggml_vk_available_devices(size_t memoryRequired, size_t * count);
-bool ggml_vk_get_device(struct ggml_vk_device * device, size_t memoryRequired, const char * name);
-bool ggml_vk_has_vulkan(void);
-bool ggml_vk_has_device(void);
-struct ggml_vk_device ggml_vk_current_device(void);
-
-//
-// backend API
-//
-
-// forward declaration
-typedef struct ggml_backend * ggml_backend_t;
-
-GGML_API ggml_backend_t ggml_backend_kompute_init(int device);
-
-GGML_API bool ggml_backend_is_kompute(ggml_backend_t backend);
-
-GGML_API ggml_backend_buffer_type_t ggml_backend_kompute_buffer_type(int device);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/ggml-metal.h b/ggml-metal.h
deleted file mode 100644 (file)
index e7543ae..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-// An interface allowing to compute ggml_cgraph with Metal
-//
-// This is a fully functional interface that extends ggml with GPU support for Apple devices.
-// A similar interface can be created for other GPU backends (e.g. Vulkan, CUDA, etc.)
-//
-// How it works?
-//
-// As long as your program can create and evaluate a ggml_cgraph on the CPU, you can use this
-// interface to evaluate the same graph on the GPU. Instead of using ggml_graph_compute(), you
-// use ggml_metal_graph_compute() (or ggml_vulkan_graph_compute(), etc.)
-//
-// You only need to make sure that all memory buffers that you used during the graph creation
-// are mapped to the device memory with the ggml_metal_add_buffer() function. This mapping is
-// used during the graph evaluation to determine the arguments of the compute kernels.
-//
-// Synchronization between device and host memory (for example for input and output tensors)
-// is done with the ggml_metal_set_tensor() and ggml_metal_get_tensor() functions.
-//
-
-#pragma once
-
-#include "ggml.h"
-#include "ggml-backend.h"
-
-#include <stddef.h>
-#include <stdbool.h>
-
-// max memory buffers that can be mapped to the device
-#define GGML_METAL_MAX_BUFFERS 64
-
-struct ggml_tensor;
-struct ggml_cgraph;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//
-// backend API
-// user-code should use only these functions
-//
-
-GGML_API void ggml_backend_metal_log_set_callback(ggml_log_callback log_callback, void * user_data);
-
-GGML_API ggml_backend_t ggml_backend_metal_init(void);
-
-GGML_API bool ggml_backend_is_metal(ggml_backend_t backend);
-
-GGML_API GGML_CALL ggml_backend_buffer_t ggml_backend_metal_buffer_from_ptr(void * data, size_t size, size_t max_size);
-
-GGML_API void ggml_backend_metal_set_n_cb(ggml_backend_t backend, int n_cb);
-
-GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_metal_buffer_type(void);
-
-// helper to check if the device supports a specific family
-// ideally, the user code should be doing these checks
-// ref: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf
-GGML_API bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family);
-
-// capture all command buffers committed the next time `ggml_backend_graph_compute` is called
-GGML_API void ggml_backend_metal_capture_next_compute(ggml_backend_t backend);
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/ggml-metal.m b/ggml-metal.m
deleted file mode 100644 (file)
index f894274..0000000
+++ /dev/null
@@ -1,3267 +0,0 @@
-#import "ggml-metal.h"
-
-#import "ggml-backend-impl.h"
-#import "ggml.h"
-
-#import <Foundation/Foundation.h>
-
-#import <Metal/Metal.h>
-
-#undef MIN
-#undef MAX
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-
-#ifdef GGML_METAL_NDEBUG
-#define GGML_METAL_LOG_INFO(...)
-#define GGML_METAL_LOG_WARN(...)
-#define GGML_METAL_LOG_ERROR(...)
-#else
-#define GGML_METAL_LOG_INFO(...)  ggml_metal_log(GGML_LOG_LEVEL_INFO, __VA_ARGS__)
-#define GGML_METAL_LOG_WARN(...)  ggml_metal_log(GGML_LOG_LEVEL_WARN, __VA_ARGS__)
-#define GGML_METAL_LOG_ERROR(...) ggml_metal_log(GGML_LOG_LEVEL_ERROR, __VA_ARGS__)
-#endif
-
-#define UNUSED(x) (void)(x)
-
-struct ggml_metal_kernel {
-    id<MTLComputePipelineState> pipeline;
-};
-
-enum ggml_metal_kernel_type {
-    GGML_METAL_KERNEL_TYPE_ADD,
-    GGML_METAL_KERNEL_TYPE_ADD_ROW,
-    GGML_METAL_KERNEL_TYPE_MUL,
-    GGML_METAL_KERNEL_TYPE_MUL_ROW,
-    GGML_METAL_KERNEL_TYPE_DIV,
-    GGML_METAL_KERNEL_TYPE_DIV_ROW,
-    GGML_METAL_KERNEL_TYPE_REPEAT_F32,
-    GGML_METAL_KERNEL_TYPE_REPEAT_F16,
-    GGML_METAL_KERNEL_TYPE_REPEAT_I32,
-    GGML_METAL_KERNEL_TYPE_REPEAT_I16,
-    GGML_METAL_KERNEL_TYPE_SCALE,
-    GGML_METAL_KERNEL_TYPE_SCALE_4,
-    GGML_METAL_KERNEL_TYPE_CLAMP,
-    GGML_METAL_KERNEL_TYPE_TANH,
-    GGML_METAL_KERNEL_TYPE_RELU,
-    GGML_METAL_KERNEL_TYPE_SIGMOID,
-    GGML_METAL_KERNEL_TYPE_GELU,
-    GGML_METAL_KERNEL_TYPE_GELU_4,
-    GGML_METAL_KERNEL_TYPE_GELU_QUICK,
-    GGML_METAL_KERNEL_TYPE_GELU_QUICK_4,
-    GGML_METAL_KERNEL_TYPE_SILU,
-    GGML_METAL_KERNEL_TYPE_SILU_4,
-    GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16,
-    GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16_4,
-    GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32,
-    GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32_4,
-    GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF,
-    GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF_8,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_F32,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_F16,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_0,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_1,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_0,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_1,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q8_0,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q2_K,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q3_K,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_K,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_K,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q6_K,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XXS,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XS,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_XXS,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_S,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_S,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_S,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_M,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_NL,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_XS,
-    GGML_METAL_KERNEL_TYPE_GET_ROWS_I32,
-    GGML_METAL_KERNEL_TYPE_RMS_NORM,
-    GGML_METAL_KERNEL_TYPE_GROUP_NORM,
-    GGML_METAL_KERNEL_TYPE_NORM,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_F32_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F16,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_1ROW,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_L4,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_1_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_Q2_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_Q3_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_Q6_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XXS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_XXS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_M_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_NL_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_XS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F32_F32,
-  //GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F16,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32,
-  //GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_1ROW,
-  //GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_L4,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_1_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_1_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q8_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q2_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q3_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q6_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XXS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_XXS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_M_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_NL_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_XS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_F32_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_F16_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_1_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_1_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_Q8_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_Q2_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_Q3_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_Q6_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XXS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_XXS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_1_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_1_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q8_0_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q2_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q3_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q6_K_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XXS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_XXS_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_S_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_M_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_NL_F32,
-    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_XS_F32,
-    GGML_METAL_KERNEL_TYPE_ROPE_NORM_F32,
-    GGML_METAL_KERNEL_TYPE_ROPE_NORM_F16,
-    GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F32,
-    GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F16,
-    GGML_METAL_KERNEL_TYPE_IM2COL_F16,
-    GGML_METAL_KERNEL_TYPE_IM2COL_F32,
-    GGML_METAL_KERNEL_TYPE_UPSCALE_F32,
-    GGML_METAL_KERNEL_TYPE_PAD_F32,
-    GGML_METAL_KERNEL_TYPE_ARANGE_F32,
-    GGML_METAL_KERNEL_TYPE_TIMESTEP_EMBEDDING_F32,
-    GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC,
-    GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC,
-    GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32,
-    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H64,
-    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H80,
-    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H96,
-    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H112,
-    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H128,
-  //GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H256,     // https://github.com/ggerganov/llama.cpp/issues/7261
-    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H128,
-  //GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H256, // https://github.com/ggerganov/llama.cpp/issues/7261
-    GGML_METAL_KERNEL_TYPE_CPY_F32_F16,
-    GGML_METAL_KERNEL_TYPE_CPY_F32_F32,
-    GGML_METAL_KERNEL_TYPE_CPY_F32_Q8_0,
-    GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_0,
-    GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_1,
-    GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_0,
-    GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_1,
-    GGML_METAL_KERNEL_TYPE_CPY_F32_IQ4_NL,
-    GGML_METAL_KERNEL_TYPE_CPY_F16_F16,
-    GGML_METAL_KERNEL_TYPE_CPY_F16_F32,
-    GGML_METAL_KERNEL_TYPE_CONCAT,
-    GGML_METAL_KERNEL_TYPE_SQR,
-    GGML_METAL_KERNEL_TYPE_SUM_ROWS,
-
-    GGML_METAL_KERNEL_TYPE_COUNT
-};
-
-struct ggml_metal_context {
-    int n_cb;
-
-    id<MTLDevice>       device;
-    id<MTLCommandQueue> queue;
-
-    dispatch_queue_t d_queue;
-
-    struct ggml_metal_kernel kernels[GGML_METAL_KERNEL_TYPE_COUNT];
-
-    bool support_simdgroup_reduction;
-    bool support_simdgroup_mm;
-
-    bool should_capture_next_compute;
-};
-
-// MSL code
-// TODO: move the contents here when ready
-//       for now it is easier to work in a separate file
-// static NSString * const msl_library_source = @"see metal.metal";
-
-// Here to assist with NSBundle Path Hack
-@interface GGMLMetalClass : NSObject
-@end
-@implementation GGMLMetalClass
-@end
-
-static void ggml_metal_default_log_callback(enum ggml_log_level level, const char * msg, void * user_data) {
-    fprintf(stderr, "%s", msg);
-
-    UNUSED(level);
-    UNUSED(user_data);
-}
-
-ggml_log_callback ggml_metal_log_callback = ggml_metal_default_log_callback;
-void * ggml_metal_log_user_data = NULL;
-
-GGML_ATTRIBUTE_FORMAT(2, 3)
-static void ggml_metal_log(enum ggml_log_level level, const char * format, ...){
-    if (ggml_metal_log_callback != NULL) {
-        va_list args;
-        va_start(args, format);
-        char buffer[128];
-        int len = vsnprintf(buffer, 128, format, args);
-        if (len < 128) {
-            ggml_metal_log_callback(level, buffer, ggml_metal_log_user_data);
-        } else {
-            char* buffer2 = malloc(len+1);
-            va_end(args);
-            va_start(args, format);
-            vsnprintf(buffer2, len+1, format, args);
-            buffer2[len] = 0;
-            ggml_metal_log_callback(level, buffer2, ggml_metal_log_user_data);
-            free(buffer2);
-        }
-        va_end(args);
-    }
-}
-
-static void * ggml_metal_host_malloc(size_t n) {
-    void * data = NULL;
-
-#if TARGET_OS_OSX
-    kern_return_t err = vm_allocate((vm_map_t) mach_task_self(), (void *) &data, n, VM_FLAGS_ANYWHERE);
-    if (err != KERN_SUCCESS) {
-        GGML_METAL_LOG_ERROR("%s: error: vm_allocate failed\n", __func__);
-        return NULL;
-    }
-#else
-    const int result = posix_memalign((void **) &data, sysconf(_SC_PAGESIZE), n);
-    if (result != 0) {
-        GGML_METAL_LOG_ERROR("%s: error: posix_memalign failed\n", __func__);
-        return NULL;
-    }
-#endif
-
-    return data;
-}
-
-static struct ggml_metal_context * ggml_metal_init(int n_cb) {
-    GGML_METAL_LOG_INFO("%s: allocating\n", __func__);
-
-#if TARGET_OS_OSX && !GGML_METAL_NDEBUG
-    // Show all the Metal device instances in the system
-    NSArray * devices = MTLCopyAllDevices();
-    for (id<MTLDevice> device in devices) {
-        GGML_METAL_LOG_INFO("%s: found device: %s\n", __func__, [[device name] UTF8String]);
-    }
-    [devices release]; // since it was created by a *Copy* C method
-#endif
-
-    // Pick and show default Metal device
-    id<MTLDevice> device = MTLCreateSystemDefaultDevice();
-    GGML_METAL_LOG_INFO("%s: picking default device: %s\n", __func__, [[device name] UTF8String]);
-
-    // Configure context
-    struct ggml_metal_context * ctx = malloc(sizeof(struct ggml_metal_context));
-    ctx->device = device;
-    ctx->n_cb   = MIN(n_cb, GGML_METAL_MAX_BUFFERS);
-    ctx->queue  = [ctx->device newCommandQueue];
-    ctx->d_queue = dispatch_queue_create("ggml-metal", DISPATCH_QUEUE_CONCURRENT);
-
-    id<MTLLibrary> metal_library;
-
-    // load library
-    //
-    // - first check if the library is embedded
-    // - then check if the library is in the bundle
-    // - if not found, load the source and compile it
-    // - if that fails, return NULL
-    {
-        NSBundle * bundle = nil;
-#ifdef SWIFT_PACKAGE
-        bundle = SWIFTPM_MODULE_BUNDLE;
-#else
-        bundle = [NSBundle bundleForClass:[GGMLMetalClass class]];
-#endif
-
-        NSError * error = nil;
-
-#if GGML_METAL_EMBED_LIBRARY
-        const bool try_metallib = false;
-#else
-        const bool try_metallib = true;
-#endif
-
-        NSString * path_lib = [bundle pathForResource:@"default" ofType:@"metallib"];
-        if (try_metallib && path_lib != nil) {
-            // pre-compiled library found
-            NSURL * libURL = [NSURL fileURLWithPath:path_lib];
-            GGML_METAL_LOG_INFO("%s: loading '%s'\n", __func__, [path_lib UTF8String]);
-
-            metal_library = [ctx->device newLibraryWithURL:libURL error:&error];
-            if (error) {
-                GGML_METAL_LOG_ERROR("%s: error: %s\n", __func__, [[error description] UTF8String]);
-                return NULL;
-            }
-        } else {
-#if GGML_METAL_EMBED_LIBRARY
-            GGML_METAL_LOG_INFO("%s: using embedded metal library\n", __func__);
-
-            extern const char ggml_metallib_start[];
-            extern const char ggml_metallib_end[];
-
-            NSString * src = [[NSString alloc] initWithBytes:ggml_metallib_start length:(ggml_metallib_end-ggml_metallib_start) encoding:NSUTF8StringEncoding];
-#else
-            GGML_METAL_LOG_INFO("%s: default.metallib not found, loading from source\n", __func__);
-
-            NSString * path_source;
-            NSString * path_resource = [[NSProcessInfo processInfo].environment objectForKey:@"GGML_METAL_PATH_RESOURCES"];
-
-            GGML_METAL_LOG_INFO("%s: GGML_METAL_PATH_RESOURCES = %s\n", __func__, path_resource ? [path_resource UTF8String] : "nil");
-
-            if (path_resource) {
-                path_source = [path_resource stringByAppendingPathComponent:@"ggml-metal.metal"];
-            } else {
-                path_source = [bundle pathForResource:@"ggml-metal" ofType:@"metal"];
-            }
-
-            if (path_source == nil) {
-                GGML_METAL_LOG_WARN("%s: error: could not use bundle path to find ggml-metal.metal, falling back to trying cwd\n", __func__);
-                path_source = @"ggml-metal.metal";
-            }
-
-            GGML_METAL_LOG_INFO("%s: loading '%s'\n", __func__, [path_source UTF8String]);
-
-            NSString * src = [NSString stringWithContentsOfFile:path_source encoding:NSUTF8StringEncoding error:&error];
-            if (error) {
-                GGML_METAL_LOG_ERROR("%s: error: %s\n", __func__, [[error description] UTF8String]);
-                return NULL;
-            }
-#endif // GGML_METAL_EMBED_LIBRARY
-
-            @autoreleasepool {
-                // dictionary of preprocessor macros
-                NSMutableDictionary * prep = [NSMutableDictionary dictionary];
-
-                MTLCompileOptions* options = [MTLCompileOptions new];
-                options.preprocessorMacros = prep;
-
-                //[options setFastMathEnabled:false];
-
-                metal_library = [ctx->device newLibraryWithSource:src options:options error:&error];
-                if (error) {
-                    GGML_METAL_LOG_ERROR("%s: error: %s\n", __func__, [[error description] UTF8String]);
-                    return NULL;
-                }
-            }
-        }
-    }
-
-    // print MTL GPU family:
-    GGML_METAL_LOG_INFO("%s: GPU name:   %s\n", __func__, [[ctx->device name] UTF8String]);
-
-    const NSInteger MTLGPUFamilyMetal3 = 5001;
-
-    // determine max supported GPU family
-    // https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf
-    // https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf
-    {
-        for (int i = MTLGPUFamilyApple1 + 20; i >= MTLGPUFamilyApple1; --i) {
-            if ([ctx->device supportsFamily:i]) {
-                GGML_METAL_LOG_INFO("%s: GPU family: MTLGPUFamilyApple%d  (%d)\n", __func__, i - (int) MTLGPUFamilyApple1 + 1, i);
-                break;
-            }
-        }
-
-        for (int i = MTLGPUFamilyCommon1 + 5; i >= MTLGPUFamilyCommon1; --i) {
-            if ([ctx->device supportsFamily:i]) {
-                GGML_METAL_LOG_INFO("%s: GPU family: MTLGPUFamilyCommon%d (%d)\n", __func__, i - (int) MTLGPUFamilyCommon1 + 1, i);
-                break;
-            }
-        }
-
-        for (int i = MTLGPUFamilyMetal3 + 5; i >= MTLGPUFamilyMetal3; --i) {
-            if ([ctx->device supportsFamily:i]) {
-                GGML_METAL_LOG_INFO("%s: GPU family: MTLGPUFamilyMetal%d  (%d)\n", __func__, i - (int) MTLGPUFamilyMetal3 + 3, i);
-                break;
-            }
-        }
-    }
-
-    ctx->support_simdgroup_reduction  = [ctx->device supportsFamily:MTLGPUFamilyApple7];
-    ctx->support_simdgroup_reduction |= [ctx->device supportsFamily:MTLGPUFamilyMetal3];
-
-    ctx->support_simdgroup_mm = [ctx->device supportsFamily:MTLGPUFamilyApple7];
-
-    GGML_METAL_LOG_INFO("%s: simdgroup reduction support   = %s\n",       __func__, ctx->support_simdgroup_reduction ? "true" : "false");
-    GGML_METAL_LOG_INFO("%s: simdgroup matrix mul. support = %s\n",       __func__, ctx->support_simdgroup_mm ? "true" : "false");
-    GGML_METAL_LOG_INFO("%s: hasUnifiedMemory              = %s\n",       __func__, ctx->device.hasUnifiedMemory ? "true" : "false");
-
-    ctx->should_capture_next_compute = false;
-
-#if TARGET_OS_OSX || (TARGET_OS_IOS && __clang_major__ >= 15)
-    if (@available(macOS 10.12, iOS 16.0, *)) {
-        GGML_METAL_LOG_INFO("%s: recommendedMaxWorkingSetSize  = %8.2f MB\n", __func__, ctx->device.recommendedMaxWorkingSetSize / 1e6);
-    }
-#elif TARGET_OS_OSX
-    if (ctx->device.maxTransferRate != 0) {
-        GGML_METAL_LOG_INFO("%s: maxTransferRate               = %8.2f MB/s\n", __func__, ctx->device.maxTransferRate / 1e6);
-    } else {
-        GGML_METAL_LOG_INFO("%s: maxTransferRate               = built-in GPU\n", __func__);
-    }
-#endif
-
-    // load kernels
-    {
-        NSError * error = nil;
-
-        for (int i = 0; i < GGML_METAL_KERNEL_TYPE_COUNT; ++i) {
-            ctx->kernels[i].pipeline = nil;
-        }
-
-        /*
-            GGML_METAL_LOG_INFO("%s: loaded %-40s %16p | th_max = %4d | th_width = %4d\n", __func__, "kernel_"#name, (void *) kernel->pipeline, \
-                    (int) kernel->pipeline.maxTotalThreadsPerThreadgroup, \
-                    (int) kernel->pipeline.threadExecutionWidth); \
-        */
-#define GGML_METAL_ADD_KERNEL(e, name, supported) \
-        if (supported) { \
-            struct ggml_metal_kernel * kernel = &ctx->kernels[e]; \
-            id<MTLFunction> metal_function = [metal_library newFunctionWithName:@"kernel_"#name]; \
-            kernel->pipeline = [ctx->device newComputePipelineStateWithFunction:metal_function error:&error]; \
-            [metal_function release]; \
-            if (error) { \
-                GGML_METAL_LOG_ERROR("%s: error: load pipeline error: %s\n", __func__, [[error description] UTF8String]); \
-                [metal_library release]; \
-                return NULL; \
-            } \
-        } else { \
-            GGML_METAL_LOG_WARN("%s: skipping %-40s (not supported)\n", __func__, "kernel_"#name); \
-        }
-
-        // simd_sum and simd_max requires MTLGPUFamilyApple7
-
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ADD,                           add,                            true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ADD_ROW,                       add_row,                        true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL,                           mul,                            true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_ROW,                       mul_row,                        true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIV,                           div,                            true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIV_ROW,                       div_row,                        true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_REPEAT_F32,                    repeat_f32,                     true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_REPEAT_F16,                    repeat_f16,                     true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_REPEAT_I32,                    repeat_i32,                     true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_REPEAT_I16,                    repeat_i16,                     true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SCALE,                         scale,                          true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SCALE_4,                       scale_4,                        true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CLAMP,                         clamp,                          true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_TANH,                          tanh,                           true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_RELU,                          relu,                           true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SIGMOID,                       sigmoid,                        true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU,                          gelu,                           true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU_4,                        gelu_4,                         true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU_QUICK,                    gelu_quick,                     true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU_QUICK_4,                  gelu_quick_4,                   true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SILU,                          silu,                           true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SILU_4,                        silu_4,                         true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16,                  soft_max_f16,                   ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16_4,                soft_max_f16_4,                 ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32,                  soft_max_f32,                   ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32_4,                soft_max_f32_4,                 ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF,                 diag_mask_inf,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF_8,               diag_mask_inf_8,                true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_F32,                  get_rows_f32,                   true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_F16,                  get_rows_f16,                   true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_0,                 get_rows_q4_0,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_1,                 get_rows_q4_1,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_0,                 get_rows_q5_0,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_1,                 get_rows_q5_1,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q8_0,                 get_rows_q8_0,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q2_K,                 get_rows_q2_K,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q3_K,                 get_rows_q3_K,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_K,                 get_rows_q4_K,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_K,                 get_rows_q5_K,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q6_K,                 get_rows_q6_K,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XXS,              get_rows_iq2_xxs,               true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XS,               get_rows_iq2_xs,                true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_XXS,              get_rows_iq3_xxs,               true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_S,                get_rows_iq3_s,                 true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_S,                get_rows_iq2_s,                 true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_S,                get_rows_iq1_s,                 true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_M,                get_rows_iq1_m,                 true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_NL,               get_rows_iq4_nl,                true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_XS,               get_rows_iq4_xs,                true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_I32,                  get_rows_i32,                   true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_RMS_NORM,                      rms_norm,                       ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GROUP_NORM,                    group_norm,                     ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_NORM,                          norm,                           true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F32_F32,                mul_mv_f32_f32,                 ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F16,                mul_mv_f16_f16,                 ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32,                mul_mv_f16_f32,                 ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_1ROW,           mul_mv_f16_f32_1row,            ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_L4,             mul_mv_f16_f32_l4,              ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_0_F32,               mul_mv_q4_0_f32,                ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_1_F32,               mul_mv_q4_1_f32,                ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_0_F32,               mul_mv_q5_0_f32,                ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32,               mul_mv_q5_1_f32,                ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32,               mul_mv_q8_0_f32,                ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q2_K_F32,               mul_mv_q2_K_f32,                ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q3_K_F32,               mul_mv_q3_K_f32,                ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_K_F32,               mul_mv_q4_K_f32,                ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_K_F32,               mul_mv_q5_K_f32,                ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q6_K_F32,               mul_mv_q6_K_f32,                ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XXS_F32,            mul_mv_iq2_xxs_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XS_F32,             mul_mv_iq2_xs_f32,              ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_XXS_F32,            mul_mv_iq3_xxs_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_S_F32,              mul_mv_iq3_s_f32,               ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_S_F32,              mul_mv_iq2_s_f32,               ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_S_F32,              mul_mv_iq1_s_f32,               ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_M_F32,              mul_mv_iq1_m_f32,               ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_NL_F32,             mul_mv_iq4_nl_f32,              ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_XS_F32,             mul_mv_iq4_xs_f32,              ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F32_F32,             mul_mv_id_f32_f32,              ctx->support_simdgroup_reduction);
-      //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F16,             mul_mv_id_f16_f16,              ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32,             mul_mv_id_f16_f32,              ctx->support_simdgroup_reduction);
-      //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_1ROW,        mul_mv_id_f16_f32_1row,         ctx->support_simdgroup_reduction);
-      //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_L4,          mul_mv_id_f16_f32_l4,           ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_0_F32,            mul_mv_id_q4_0_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_1_F32,            mul_mv_id_q4_1_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_0_F32,            mul_mv_id_q5_0_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_1_F32,            mul_mv_id_q5_1_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q8_0_F32,            mul_mv_id_q8_0_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q2_K_F32,            mul_mv_id_q2_K_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q3_K_F32,            mul_mv_id_q3_K_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_K_F32,            mul_mv_id_q4_K_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_K_F32,            mul_mv_id_q5_K_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q6_K_F32,            mul_mv_id_q6_K_f32,             ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XXS_F32,         mul_mv_id_iq2_xxs_f32,          ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XS_F32,          mul_mv_id_iq2_xs_f32,           ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_XXS_F32,         mul_mv_id_iq3_xxs_f32,          ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_S_F32,           mul_mv_id_iq3_s_f32,            ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_S_F32,           mul_mv_id_iq2_s_f32,            ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_S_F32,           mul_mv_id_iq1_s_f32,            ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_M_F32,           mul_mv_id_iq1_m_f32,            ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_NL_F32,          mul_mv_id_iq4_nl_f32,           ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_XS_F32,          mul_mv_id_iq4_xs_f32,           ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_F32_F32,                mul_mm_f32_f32,                 ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_F16_F32,                mul_mm_f16_f32,                 ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_0_F32,               mul_mm_q4_0_f32,                ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_1_F32,               mul_mm_q4_1_f32,                ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_0_F32,               mul_mm_q5_0_f32,                ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_1_F32,               mul_mm_q5_1_f32,                ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q8_0_F32,               mul_mm_q8_0_f32,                ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q2_K_F32,               mul_mm_q2_K_f32,                ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q3_K_F32,               mul_mm_q3_K_f32,                ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_K_F32,               mul_mm_q4_K_f32,                ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_K_F32,               mul_mm_q5_K_f32,                ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q6_K_F32,               mul_mm_q6_K_f32,                ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XXS_F32,            mul_mm_iq2_xxs_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XS_F32,             mul_mm_iq2_xs_f32,              ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_XXS_F32,            mul_mm_iq3_xxs_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_S_F32,              mul_mm_iq3_s_f32,               ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_S_F32,              mul_mm_iq2_s_f32,               ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_S_F32,              mul_mm_iq1_s_f32,               ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32,              mul_mm_iq1_m_f32,               ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32,             mul_mm_iq4_nl_f32,              ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32,             mul_mm_iq4_xs_f32,              ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F32,             mul_mm_id_f32_f32,              ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F32,             mul_mm_id_f16_f32,              ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_0_F32,            mul_mm_id_q4_0_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_1_F32,            mul_mm_id_q4_1_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_0_F32,            mul_mm_id_q5_0_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_1_F32,            mul_mm_id_q5_1_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q8_0_F32,            mul_mm_id_q8_0_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q2_K_F32,            mul_mm_id_q2_K_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q3_K_F32,            mul_mm_id_q3_K_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_K_F32,            mul_mm_id_q4_K_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_K_F32,            mul_mm_id_q5_K_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q6_K_F32,            mul_mm_id_q6_K_f32,             ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XXS_F32,         mul_mm_id_iq2_xxs_f32,          ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XS_F32,          mul_mm_id_iq2_xs_f32,           ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_XXS_F32,         mul_mm_id_iq3_xxs_f32,          ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_S_F32,           mul_mm_id_iq3_s_f32,            ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_S_F32,           mul_mm_id_iq2_s_f32,            ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_S_F32,           mul_mm_id_iq1_s_f32,            ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_M_F32,           mul_mm_id_iq1_m_f32,            ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_NL_F32,          mul_mm_id_iq4_nl_f32,           ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_XS_F32,          mul_mm_id_iq4_xs_f32,           ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ROPE_NORM_F32,                 rope_norm_f32,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ROPE_NORM_F16,                 rope_norm_f16,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F32,                 rope_neox_f32,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F16,                 rope_neox_f16,                  true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_IM2COL_F16,                    im2col_f16,                     true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_IM2COL_F32,                    im2col_f32,                     true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_UPSCALE_F32,                   upscale_f32,                    true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_PAD_F32,                       pad_f32,                        true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_TIMESTEP_EMBEDDING_F32,        timestep_embedding_f32,         true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARANGE_F32,                    arange_f32,                     true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC,           argsort_f32_i32_asc,            true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC,          argsort_f32_i32_desc,           true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32,                leaky_relu_f32,                 true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H64,        flash_attn_ext_f16_h64,         ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H80,        flash_attn_ext_f16_h80,         ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H96,        flash_attn_ext_f16_h96,         ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H112,       flash_attn_ext_f16_h112,        ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H128,       flash_attn_ext_f16_h128,        ctx->support_simdgroup_mm);
-      //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H256,       flash_attn_ext_f16_h256,        ctx->support_simdgroup_mm);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H128,   flash_attn_ext_vec_f16_h128,    ctx->support_simdgroup_reduction);
-      //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H256,   flash_attn_ext_vec_f16_h256,    ctx->support_simdgroup_reduction);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_F16,                   cpy_f32_f16,                    true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_F32,                   cpy_f32_f32,                    true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q8_0,                  cpy_f32_q8_0,                   true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_0,                  cpy_f32_q4_0,                   true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_1,                  cpy_f32_q4_1,                   true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_0,                  cpy_f32_q5_0,                   true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_1,                  cpy_f32_q5_1,                   true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_IQ4_NL,                cpy_f32_iq4_nl,                 true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F16_F16,                   cpy_f16_f16,                    true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F16_F32,                   cpy_f16_f32,                    true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CONCAT,                        concat,                         true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SQR,                           sqr,                            true);
-        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SUM_ROWS,                      sum_rows,                       true);
-    }
-
-    [metal_library release];
-    return ctx;
-}
-
-static void ggml_metal_free(struct ggml_metal_context * ctx) {
-    GGML_METAL_LOG_INFO("%s: deallocating\n", __func__);
-
-    for (int i = 0; i < GGML_METAL_KERNEL_TYPE_COUNT; ++i) {
-        [ctx->kernels[i].pipeline release];
-    }
-
-    [ctx->queue release];
-    [ctx->device release];
-
-    dispatch_release(ctx->d_queue);
-
-    free(ctx);
-}
-
-// temporarily defined here for compatibility between ggml-backend and the old API
-
-struct ggml_backend_metal_buffer {
-    void   * data;
-    size_t   size;
-
-    id<MTLBuffer> metal;
-};
-
-struct ggml_backend_metal_buffer_context {
-    void * all_data;
-    size_t all_size;
-    bool owned;
-
-    // multiple buffers are used only to avoid the maximum buffer size limitation when using mmap
-    int n_buffers;
-    struct ggml_backend_metal_buffer buffers[GGML_METAL_MAX_BUFFERS];
-};
-
-// finds the Metal buffer that contains the tensor data on the GPU device
-// the assumption is that there is 1-to-1 mapping between the host and device memory buffers, so we can find the
-// Metal buffer based on the host memory pointer
-//
-static id<MTLBuffer> ggml_metal_get_buffer(struct ggml_tensor * t, size_t * offs) {
-    //GGML_METAL_LOG_INFO("%s: data tensor '%16s', offs_data = %8ld, offs_eval = %8ld, offs_cach = %8ld\n", __func__, t->name, offs_data, offs_eval, offs_cach);
-
-    const int64_t tsize = ggml_nbytes(t);
-
-    ggml_backend_buffer_t buffer = t->view_src ? t->view_src->buffer : t->buffer;
-
-    struct ggml_backend_metal_buffer_context * buf_ctx = (struct ggml_backend_metal_buffer_context *) buffer->context;
-
-    // find the view that contains the tensor fully
-    for (int i = 0; i < buf_ctx->n_buffers; ++i) {
-        const int64_t ioffs = (int64_t) t->data - (int64_t) buf_ctx->buffers[i].data;
-
-        //GGML_METAL_LOG_INFO("ioffs = %10ld, tsize = %10ld, sum = %10ld, buf_ctx->buffers[%d].size = %10ld\n", ioffs, tsize, ioffs + tsize, i, buf_ctx->buffers[i].size);
-        if (ioffs >= 0 && ioffs + tsize <= (int64_t) buf_ctx->buffers[i].size) {
-            *offs = (size_t) ioffs;
-
-            //GGML_METAL_LOG_INFO("%s: tensor '%16s', offs = %8ld\n", __func__, t->name, *offs);
-
-            return buf_ctx->buffers[i].metal;
-        }
-    }
-
-    GGML_METAL_LOG_ERROR("%s: error: tensor '%s' buffer is nil\n", __func__, t->name);
-
-    return nil;
-}
-
-static bool ggml_metal_supports_op(const struct ggml_metal_context * ctx, const struct ggml_tensor * op) {
-    switch (op->op) {
-        case GGML_OP_UNARY:
-            switch (ggml_get_unary_op(op)) {
-                case GGML_UNARY_OP_TANH:
-                case GGML_UNARY_OP_RELU:
-                case GGML_UNARY_OP_SIGMOID:
-                case GGML_UNARY_OP_GELU:
-                case GGML_UNARY_OP_GELU_QUICK:
-                case GGML_UNARY_OP_SILU:
-                    return ggml_is_contiguous(op->src[0]);
-                default:
-                    return false;
-            }
-        case GGML_OP_NONE:
-        case GGML_OP_RESHAPE:
-        case GGML_OP_VIEW:
-        case GGML_OP_TRANSPOSE:
-        case GGML_OP_PERMUTE:
-        case GGML_OP_CONCAT:
-        case GGML_OP_ADD:
-        case GGML_OP_ACC:
-        case GGML_OP_MUL:
-        case GGML_OP_DIV:
-        case GGML_OP_REPEAT:
-        case GGML_OP_SCALE:
-        case GGML_OP_CLAMP:
-        case GGML_OP_SQR:
-        case GGML_OP_SUM_ROWS:
-            return true;
-        case GGML_OP_SOFT_MAX:
-        case GGML_OP_RMS_NORM:
-        case GGML_OP_GROUP_NORM:
-            return ctx->support_simdgroup_reduction;
-        case GGML_OP_NORM:
-        case GGML_OP_ROPE:
-        case GGML_OP_IM2COL:
-            return true;
-        case GGML_OP_POOL_1D:
-        case GGML_OP_POOL_2D:
-            return false;
-        case GGML_OP_UPSCALE:
-        case GGML_OP_PAD:
-        case GGML_OP_ARANGE:
-        case GGML_OP_TIMESTEP_EMBEDDING:
-        case GGML_OP_ARGSORT:
-        case GGML_OP_LEAKY_RELU:
-            return true;
-        case GGML_OP_FLASH_ATTN_EXT:
-            if (op->src[1]->type != GGML_TYPE_F16) {
-                return false;
-            }
-            if (op->src[2]->type != GGML_TYPE_F16) {
-                return false;
-            }
-            if (op->src[0]->ne[0] == 256) {
-                return false;
-            }
-            return ctx->support_simdgroup_mm; // TODO: over-restricted for vec-kernels
-        case GGML_OP_MUL_MAT:
-        case GGML_OP_MUL_MAT_ID:
-            return ctx->support_simdgroup_reduction &&
-                (op->src[0]->type != GGML_TYPE_F32 || op->src[1]->type == GGML_TYPE_F32);
-        case GGML_OP_CPY:
-        case GGML_OP_DUP:
-        case GGML_OP_CONT:
-            {
-                switch (op->src[0]->type) {
-                    case GGML_TYPE_F32:
-                        switch (op->type) {
-                           case GGML_TYPE_F16:
-                           case GGML_TYPE_F32:
-                           case GGML_TYPE_Q8_0:
-                           case GGML_TYPE_Q4_0:
-                           case GGML_TYPE_Q4_1:
-                           case GGML_TYPE_Q5_0:
-                           case GGML_TYPE_Q5_1:
-                           case GGML_TYPE_IQ4_NL:
-                                return true;
-                           default:
-                                return false;
-                        }
-                    case GGML_TYPE_F16:
-                        switch (op->type) {
-                           case GGML_TYPE_F16:
-                           case GGML_TYPE_F32:
-                                return true;
-                           default:
-                                return false;
-                        }
-                    default:
-                        return false;
-                };
-            }
-        case GGML_OP_DIAG_MASK_INF:
-        case GGML_OP_GET_ROWS:
-            {
-                return op->src[0]->type != GGML_TYPE_BF16 && op->ne[3] == 1;
-            }
-        default:
-            return false;
-    }
-}
-
-static enum ggml_status ggml_metal_graph_compute(
-        struct ggml_metal_context * ctx,
-               struct ggml_cgraph * gf) {
-
-    @autoreleasepool {
-    MTLComputePassDescriptor * edesc = MTLComputePassDescriptor.computePassDescriptor;
-    edesc.dispatchType = MTLDispatchTypeSerial;
-
-    // create multiple command buffers and enqueue them
-    // then, we encode the graph into the command buffers in parallel
-
-    const int n_nodes  = gf->n_nodes;
-    const int n_cb = ctx->n_cb;
-    const int n_nodes_per_cb = (n_nodes + n_cb - 1) / n_cb;
-
-    const bool should_capture = ctx->should_capture_next_compute;
-    if (should_capture) {
-        ctx->should_capture_next_compute = false;
-
-        MTLCaptureDescriptor * descriptor = [MTLCaptureDescriptor new];
-        descriptor.captureObject = ctx->queue;
-
-        NSError * error = nil;
-        if (![[MTLCaptureManager sharedCaptureManager] startCaptureWithDescriptor:descriptor error:&error]) {
-            GGML_METAL_LOG_ERROR("%s: error: unable to start capture '%s'\n", __func__, [[error localizedDescription] UTF8String]);
-            GGML_ASSERT(!"capture failed");
-        }
-    }
-
-    id<MTLCommandBuffer> command_buffer_builder[n_cb];
-    for (int cb_idx = 0; cb_idx < n_cb; ++cb_idx) {
-        id<MTLCommandBuffer> command_buffer  = [ctx->queue commandBufferWithUnretainedReferences];
-        command_buffer_builder[cb_idx] = command_buffer;
-
-        // enqueue the command buffers in order to specify their execution order
-        [command_buffer enqueue];
-    }
-
-    const id<MTLCommandBuffer> *command_buffers = command_buffer_builder;
-
-    dispatch_apply(n_cb, ctx->d_queue, ^(size_t iter) {
-        const int cb_idx = iter;
-
-        size_t offs_src0 = 0;
-        size_t offs_src1 = 0;
-        size_t offs_src2 = 0;
-        size_t offs_dst  = 0;
-
-        id<MTLCommandBuffer> command_buffer  = command_buffers[cb_idx];
-        id<MTLComputeCommandEncoder> encoder = [command_buffer computeCommandEncoderWithDescriptor: edesc];
-
-        const int node_start =                                      (cb_idx + 0) * n_nodes_per_cb;
-        const int node_end   = MIN((cb_idx == n_cb - 1) ? n_nodes : (cb_idx + 1) * n_nodes_per_cb, n_nodes);
-
-        for (int i = node_start; i < node_end; ++i) {
-            if (i == -1) {
-                [encoder memoryBarrierWithScope:MTLBarrierScopeBuffers];
-                continue;
-            }
-
-            //GGML_METAL_LOG_INFO("%s: encoding node %3d, op = %8s\n", __func__, i, ggml_op_name(gf->nodes[i]->op));
-
-            struct ggml_tensor * src0 = gf->nodes[i]->src[0];
-            struct ggml_tensor * src1 = gf->nodes[i]->src[1];
-            struct ggml_tensor * src2 = gf->nodes[i]->src[2];
-            struct ggml_tensor * dst  = gf->nodes[i];
-
-            if (ggml_is_empty(dst)) {
-                continue;
-            }
-
-            switch (dst->op) {
-                case GGML_OP_NONE:
-                case GGML_OP_RESHAPE:
-                case GGML_OP_VIEW:
-                case GGML_OP_TRANSPOSE:
-                case GGML_OP_PERMUTE:
-                    {
-                        // noop -> next node
-                    } continue;
-                default:
-                    {
-                    } break;
-            }
-
-            if (!ggml_metal_supports_op(ctx, dst)) {
-                GGML_METAL_LOG_ERROR("%s: error: unsupported op '%s'\n", __func__, ggml_op_desc(dst));
-                GGML_ASSERT(!"unsupported op");
-            }
-
-            if (should_capture) {
-                [encoder pushDebugGroup:[NSString stringWithCString:ggml_op_desc(dst) encoding:NSUTF8StringEncoding]];
-            }
-
-            const int64_t  ne00 = src0 ? src0->ne[0] : 0;
-            const int64_t  ne01 = src0 ? src0->ne[1] : 0;
-            const int64_t  ne02 = src0 ? src0->ne[2] : 0;
-            const int64_t  ne03 = src0 ? src0->ne[3] : 0;
-
-            const uint64_t nb00 = src0 ? src0->nb[0] : 0;
-            const uint64_t nb01 = src0 ? src0->nb[1] : 0;
-            const uint64_t nb02 = src0 ? src0->nb[2] : 0;
-            const uint64_t nb03 = src0 ? src0->nb[3] : 0;
-
-            const int64_t  ne10 = src1 ? src1->ne[0] : 0;
-            const int64_t  ne11 = src1 ? src1->ne[1] : 0;
-            const int64_t  ne12 = src1 ? src1->ne[2] : 0;
-            const int64_t  ne13 = src1 ? src1->ne[3] : 0;
-
-            const uint64_t nb10 = src1 ? src1->nb[0] : 0;
-            const uint64_t nb11 = src1 ? src1->nb[1] : 0;
-            const uint64_t nb12 = src1 ? src1->nb[2] : 0;
-            const uint64_t nb13 = src1 ? src1->nb[3] : 0;
-
-            const int64_t  ne20 = src2 ? src2->ne[0] : 0;
-            const int64_t  ne21 = src2 ? src2->ne[1] : 0;
-            const int64_t  ne22 = src2 ? src2->ne[2] : 0; GGML_UNUSED(ne22);
-            const int64_t  ne23 = src2 ? src2->ne[3] : 0; GGML_UNUSED(ne23);
-
-            const uint64_t nb20 = src2 ? src2->nb[0] : 0; GGML_UNUSED(nb20);
-            const uint64_t nb21 = src2 ? src2->nb[1] : 0;
-            const uint64_t nb22 = src2 ? src2->nb[2] : 0;
-            const uint64_t nb23 = src2 ? src2->nb[3] : 0;
-
-            const int64_t  ne0  =  dst ?  dst->ne[0] : 0;
-            const int64_t  ne1  =  dst ?  dst->ne[1] : 0;
-            const int64_t  ne2  =  dst ?  dst->ne[2] : 0;
-            const int64_t  ne3  =  dst ?  dst->ne[3] : 0;
-
-            const uint64_t nb0  =  dst ?  dst->nb[0] : 0;
-            const uint64_t nb1  =  dst ?  dst->nb[1] : 0;
-            const uint64_t nb2  =  dst ?  dst->nb[2] : 0;
-            const uint64_t nb3  =  dst ?  dst->nb[3] : 0;
-
-            const enum ggml_type src0t = src0 ? src0->type : GGML_TYPE_COUNT;
-            const enum ggml_type src1t = src1 ? src1->type : GGML_TYPE_COUNT;
-            const enum ggml_type dstt  = dst  ? dst->type  : GGML_TYPE_COUNT;
-
-            id<MTLBuffer> id_src0 = src0 ? ggml_metal_get_buffer(src0, &offs_src0) : nil;
-            id<MTLBuffer> id_src1 = src1 ? ggml_metal_get_buffer(src1, &offs_src1) : nil;
-            id<MTLBuffer> id_src2 = src2 ? ggml_metal_get_buffer(src2, &offs_src2) : nil;
-            id<MTLBuffer> id_dst  = dst  ? ggml_metal_get_buffer(dst,  &offs_dst)  : nil;
-
-            //GGML_METAL_LOG_INFO("%s: op - %s\n", __func__, ggml_op_name(dst->op));
-            //if (src0) {
-            //    GGML_METAL_LOG_INFO("%s: src0 - %4s [%5lld, %5lld, %5lld], %d, %s\n", __func__, ggml_type_name(src0t), ne00, ne01, ne02,
-            //            ggml_is_contiguous(src0), src0->name);
-            //}
-            //if (src1) {
-            //    GGML_METAL_LOG_INFO("%s: src1 - %4s [%5lld, %5lld, %5lld], %d, %s\n", __func__, ggml_type_name(src1t), ne10, ne11, ne12,
-            //            ggml_is_contiguous(src1), src1->name);
-            //}
-            //if (dst) {
-            //    GGML_METAL_LOG_INFO("%s: dst  - %4s [%5lld, %5lld, %5lld], 1, %s\n",  __func__, ggml_type_name(dstt),  ne0,  ne1,  ne2,
-            //            dst->name);
-            //}
-
-            switch (dst->op) {
-                case GGML_OP_CONCAT:
-                    {
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CONCAT].pipeline;
-
-                        const int32_t dim = ((int32_t *) dst->op_params)[0];
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1];
-                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:2];
-                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3];
-                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4];
-                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5];
-                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:6];
-                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:7];
-                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:8];
-                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:9];
-                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:10];
-                        [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:11];
-                        [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:12];
-                        [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:13];
-                        [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:14];
-                        [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:15];
-                        [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:16];
-                        [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:17];
-                        [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:18];
-                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:19];
-                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:20];
-                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:21];
-                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:22];
-                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:23];
-                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:24];
-                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:25];
-                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:26];
-                        [encoder setBytes:&dim  length:sizeof(dim)  atIndex:27];
-
-                        const int nth = MIN(1024, ne0);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_ADD:
-                case GGML_OP_MUL:
-                case GGML_OP_DIV:
-                    {
-                        GGML_ASSERT(src0t == GGML_TYPE_F32);
-                        GGML_ASSERT(src1t == GGML_TYPE_F32);
-
-                        const size_t offs = 0;
-
-                        bool bcast_row = false;
-
-                        int64_t nb = ne00; // used by the "row" kernels
-
-                        id<MTLComputePipelineState> pipeline = nil;
-
-                        if (ggml_nelements(src1) == ne10 && ggml_is_contiguous(src1) && ne00 % 4 == 0 && ne10 % 4 == 0) {
-                            GGML_ASSERT(ggml_is_contiguous(src0));
-
-                            // src1 is a row
-                            GGML_ASSERT(ne11 == 1);
-
-                            nb = ne00 / 4;
-                            switch (dst->op) {
-                                case GGML_OP_ADD: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ADD_ROW].pipeline; break;
-                                case GGML_OP_MUL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_ROW].pipeline; break;
-                                case GGML_OP_DIV: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIV_ROW].pipeline; break;
-                                default: GGML_ASSERT(false);
-                            }
-
-                            bcast_row = true;
-                        } else {
-                            switch (dst->op) {
-                                case GGML_OP_ADD: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ADD].pipeline; break;
-                                case GGML_OP_MUL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL].pipeline; break;
-                                case GGML_OP_DIV: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIV].pipeline; break;
-                                default: GGML_ASSERT(false);
-                            }
-                        }
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1];
-                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:2];
-                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3];
-                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4];
-                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5];
-                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:6];
-                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:7];
-                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:8];
-                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:9];
-                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:10];
-                        [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:11];
-                        [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:12];
-                        [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:13];
-                        [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:14];
-                        [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:15];
-                        [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:16];
-                        [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:17];
-                        [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:18];
-                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:19];
-                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:20];
-                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:21];
-                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:22];
-                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:23];
-                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:24];
-                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:25];
-                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:26];
-                        [encoder setBytes:&offs length:sizeof(offs) atIndex:27];
-                        [encoder setBytes:&nb   length:sizeof(nb)   atIndex:28];
-
-                        if (bcast_row) {
-                            const int64_t n = ggml_nelements(dst)/4;
-
-                            [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                        } else {
-                            const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne0);
-
-                            [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                        }
-                    } break;
-                case GGML_OP_REPEAT:
-                    {
-                        id<MTLComputePipelineState> pipeline;
-
-                        switch (src0t) {
-                            case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_REPEAT_F32].pipeline; break;
-                            case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_REPEAT_F16].pipeline; break;
-                            case GGML_TYPE_I32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_REPEAT_I32].pipeline; break;
-                            case GGML_TYPE_I16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_REPEAT_I16].pipeline; break;
-                            default: GGML_ASSERT(false);
-                        }
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2];
-                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3];
-                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4];
-                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5];
-                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6];
-                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7];
-                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8];
-                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9];
-                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:10];
-                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:11];
-                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:12];
-                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:13];
-                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:14];
-                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:15];
-                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:16];
-                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:17];
-
-                        const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne0);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_ACC:
-                    {
-                        GGML_ASSERT(src0t == GGML_TYPE_F32);
-                        GGML_ASSERT(src1t == GGML_TYPE_F32);
-                        GGML_ASSERT(dstt  == GGML_TYPE_F32);
-
-                        GGML_ASSERT(ggml_is_contiguous(src0));
-                        GGML_ASSERT(ggml_is_contiguous(src1));
-
-                        const size_t pnb1 = ((int32_t *) dst->op_params)[0];
-                        const size_t pnb2 = ((int32_t *) dst->op_params)[1];
-                        const size_t pnb3 = ((int32_t *) dst->op_params)[2];
-                        const size_t offs = ((int32_t *) dst->op_params)[3];
-
-                        const bool inplace = (bool) ((int32_t *) dst->op_params)[4];
-
-                        if (!inplace) {
-                            // run a separete kernel to cpy src->dst
-                            // not sure how to avoid this
-                            // TODO: make a simpler cpy_bytes kernel
-
-                            const id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_F32].pipeline;
-
-                            [encoder setComputePipelineState:pipeline];
-                            [encoder setBuffer:id_src0 offset:offs_src0        atIndex:0];
-                            [encoder setBuffer:id_dst  offset:offs_dst         atIndex:1];
-                            [encoder setBytes:&ne00    length:sizeof( int64_t) atIndex:2];
-                            [encoder setBytes:&ne01    length:sizeof( int64_t) atIndex:3];
-                            [encoder setBytes:&ne02    length:sizeof( int64_t) atIndex:4];
-                            [encoder setBytes:&ne03    length:sizeof( int64_t) atIndex:5];
-                            [encoder setBytes:&nb00    length:sizeof(uint64_t) atIndex:6];
-                            [encoder setBytes:&nb01    length:sizeof(uint64_t) atIndex:7];
-                            [encoder setBytes:&nb02    length:sizeof(uint64_t) atIndex:8];
-                            [encoder setBytes:&nb03    length:sizeof(uint64_t) atIndex:9];
-                            [encoder setBytes:&ne0     length:sizeof( int64_t) atIndex:10];
-                            [encoder setBytes:&ne1     length:sizeof( int64_t) atIndex:11];
-                            [encoder setBytes:&ne2     length:sizeof( int64_t) atIndex:12];
-                            [encoder setBytes:&ne3     length:sizeof( int64_t) atIndex:13];
-                            [encoder setBytes:&nb0     length:sizeof(uint64_t) atIndex:14];
-                            [encoder setBytes:&nb1     length:sizeof(uint64_t) atIndex:15];
-                            [encoder setBytes:&nb2     length:sizeof(uint64_t) atIndex:16];
-                            [encoder setBytes:&nb3     length:sizeof(uint64_t) atIndex:17];
-
-                            const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne00);
-
-                            [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                        }
-
-                        const id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ADD].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1];
-                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:2];
-                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3];
-                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4];
-                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5];
-                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:6];
-                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:7];
-                        [encoder setBytes:&pnb1 length:sizeof(pnb1) atIndex:8];
-                        [encoder setBytes:&pnb2 length:sizeof(pnb2) atIndex:9];
-                        [encoder setBytes:&pnb3 length:sizeof(pnb3) atIndex:10];
-                        [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:11];
-                        [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:12];
-                        [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:13];
-                        [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:14];
-                        [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:15];
-                        [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:16];
-                        [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:17];
-                        [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:18];
-                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:19];
-                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:20];
-                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:21];
-                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:22];
-                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:23];
-                        [encoder setBytes:&pnb1 length:sizeof(pnb1) atIndex:24];
-                        [encoder setBytes:&pnb2 length:sizeof(pnb2) atIndex:25];
-                        [encoder setBytes:&pnb3 length:sizeof(pnb3) atIndex:26];
-                        [encoder setBytes:&offs length:sizeof(offs) atIndex:27];
-
-                        const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne00);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne11, ne12, ne13) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_SCALE:
-                    {
-                        GGML_ASSERT(ggml_is_contiguous(src0));
-
-                        float scale;
-                        memcpy(&scale, dst->op_params, sizeof(scale));
-
-                        int64_t n = ggml_nelements(dst);
-
-                        id<MTLComputePipelineState> pipeline = nil;
-
-                        if (n % 4 == 0) {
-                            n /= 4;
-                            pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SCALE_4].pipeline;
-                        } else {
-                            pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SCALE].pipeline;
-                        }
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0   offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_dst    offset:offs_dst  atIndex:1];
-                        [encoder setBytes:&scale length:sizeof(scale) atIndex:2];
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                    } break;
-                case GGML_OP_CLAMP:
-                    {
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CLAMP].pipeline;
-
-                        float min;
-                        float max;
-                        memcpy(&min, ((int32_t *) dst->op_params) + 0, sizeof(float));
-                        memcpy(&max, ((int32_t *) dst->op_params) + 1, sizeof(float));
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0   offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_dst    offset:offs_dst  atIndex:1];
-                        [encoder setBytes:&min length:sizeof(min) atIndex:2];
-                        [encoder setBytes:&max length:sizeof(max) atIndex:3];
-
-                        const int64_t n = ggml_nelements(dst);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                    } break;
-                case GGML_OP_UNARY:
-                    switch (ggml_get_unary_op(gf->nodes[i])) {
-                        // we are not taking into account the strides, so for now require contiguous tensors
-                        GGML_ASSERT(ggml_is_contiguous(src0));
-
-                        case GGML_UNARY_OP_TANH:
-                            {
-                                id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_TANH].pipeline;
-
-                                [encoder setComputePipelineState:pipeline];
-                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-
-                                const int64_t n = ggml_nelements(dst);
-
-                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                            } break;
-                        case GGML_UNARY_OP_RELU:
-                            {
-                                id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_RELU].pipeline;
-
-                                [encoder setComputePipelineState:pipeline];
-                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-
-                                const int64_t n = ggml_nelements(dst);
-
-                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                            } break;
-                        case GGML_UNARY_OP_SIGMOID:
-                            {
-                                id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SIGMOID].pipeline;
-
-                                [encoder setComputePipelineState:pipeline];
-                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-
-                                const int64_t n = ggml_nelements(dst);
-
-                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                            } break;
-                        case GGML_UNARY_OP_GELU:
-                            {
-                                int64_t n = ggml_nelements(dst);
-
-                                id<MTLComputePipelineState> pipeline = nil;
-
-                                if (n % 4 == 0) {
-                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU_4].pipeline;
-                                    n /= 4;
-                                } else {
-                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU].pipeline;
-                                }
-
-                                [encoder setComputePipelineState:pipeline];
-                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-
-                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                            } break;
-                        case GGML_UNARY_OP_GELU_QUICK:
-                            {
-                                int64_t n = ggml_nelements(dst);
-
-                                id<MTLComputePipelineState> pipeline = nil;
-
-                                if (n % 4 == 0) {
-                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU_QUICK_4].pipeline;
-                                    n /= 4;
-                                } else {
-                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU_QUICK].pipeline;
-                                }
-
-                                [encoder setComputePipelineState:pipeline];
-                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-
-                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                            } break;
-                        case GGML_UNARY_OP_SILU:
-                            {
-                                int64_t n = ggml_nelements(dst);
-
-                                id<MTLComputePipelineState> pipeline = nil;
-
-                                if (n % 4 == 0) {
-                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SILU_4].pipeline;
-                                    n /= 4;
-                                } else {
-                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SILU].pipeline;
-                                }
-
-                                [encoder setComputePipelineState:pipeline];
-                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-
-                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                            } break;
-                        default:
-                            {
-                                GGML_METAL_LOG_WARN("%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op));
-                                GGML_ASSERT(false);
-                            }
-                    } break;
-                case GGML_OP_SQR:
-                    {
-                        GGML_ASSERT(ggml_is_contiguous(src0));
-
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SQR].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst atIndex:1];
-
-                        const int64_t n = ggml_nelements(dst);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                    } break;
-                case GGML_OP_SUM_ROWS:
-                    {
-                        GGML_ASSERT(src0->nb[0] == ggml_type_size(src0->type));
-
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SUM_ROWS].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2];
-                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3];
-                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4];
-                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5];
-                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6];
-                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7];
-                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8];
-                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9];
-                        [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:10];
-                        [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:11];
-                        [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:12];
-                        [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:13];
-                        [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:14];
-                        [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:15];
-                        [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:16];
-                        [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:17];
-                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:18];
-                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:19];
-                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:20];
-                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:21];
-                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:22];
-                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:23];
-                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:24];
-                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:25];
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                    } break;
-                case GGML_OP_SOFT_MAX:
-                    {
-                        GGML_ASSERT(!src1 || src1->type == GGML_TYPE_F16 || src1->type == GGML_TYPE_F32);
-
-                        int nth = 32; // SIMD width
-
-                        id<MTLComputePipelineState> pipeline = nil;
-
-                        const bool use_f16 = (src1 && src1->type == GGML_TYPE_F16);
-
-                        if (ne00%4 == 0) {
-                            while (nth < ne00/4 && nth*ne01*ne02*ne03 < 256) {
-                                nth *= 2;
-                            }
-                            if (use_f16) {
-                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16_4].pipeline;
-                            } else {
-                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32_4].pipeline;
-                            }
-                        } else {
-                            while (nth < ne00 && nth*ne01*ne02*ne03 < 256) {
-                                nth *= 2;
-                            }
-                            if (use_f16) {
-                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16].pipeline;
-                            } else {
-                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32].pipeline;
-                            }
-                        }
-
-                        float scale;
-                        float max_bias;
-
-                        memcpy(&scale,    ((int32_t *) dst->op_params) + 0, sizeof(scale));
-                        memcpy(&max_bias, ((int32_t *) dst->op_params) + 1, sizeof(max_bias));
-
-                        const int64_t nrows_x = ggml_nrows(src0);
-                        const int64_t nrows_y = src0->ne[1];
-
-                        const uint32_t n_head      = nrows_x/nrows_y;
-                        const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head));
-
-                        const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
-                        const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0   atIndex:0];
-                        if (id_src1) {
-                            [encoder setBuffer:id_src1 offset:offs_src1   atIndex:1];
-                        } else {
-                            [encoder setBuffer:id_src0 offset:offs_src0   atIndex:1];
-                        }
-                        [encoder setBuffer:id_dst      offset:offs_dst            atIndex:2];
-                        [encoder setBytes:&ne00        length:sizeof(ne00)        atIndex:3];
-                        [encoder setBytes:&ne01        length:sizeof(ne01)        atIndex:4];
-                        [encoder setBytes:&ne02        length:sizeof(ne02)        atIndex:5];
-                        [encoder setBytes:&scale       length:sizeof(scale)       atIndex:6];
-                        [encoder setBytes:&max_bias    length:sizeof(max_bias)    atIndex:7];
-                        [encoder setBytes:&m0          length:sizeof(m0)          atIndex:8];
-                        [encoder setBytes:&m1          length:sizeof(m1)          atIndex:9];
-                        [encoder setBytes:&n_head_log2 length:sizeof(n_head_log2) atIndex:10];
-                        [encoder setThreadgroupMemoryLength:32*sizeof(float) atIndex:0];
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne01*ne02*ne03, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_DIAG_MASK_INF:
-                    {
-                        const int n_past = ((int32_t *)(dst->op_params))[0];
-
-                        id<MTLComputePipelineState> pipeline = nil;
-
-                        if (ne00%8 == 0) {
-                            pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF_8].pipeline;
-                        } else {
-                            pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF].pipeline;
-                        }
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-                        [encoder setBytes:&ne00   length:sizeof(ne00) atIndex:2];
-                        [encoder setBytes:&ne01   length:sizeof(ne01) atIndex:3];
-                        [encoder setBytes:&n_past length:sizeof(int)  atIndex:4];
-
-                        if (ne00%8 == 0) {
-                            [encoder dispatchThreadgroups:MTLSizeMake(ne00*ne01*ne02/8, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                        }
-                        else {
-                            [encoder dispatchThreadgroups:MTLSizeMake(ne00, ne01, ne02) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                        }
-                    } break;
-                case GGML_OP_MUL_MAT:
-                    {
-                        GGML_ASSERT(ne00 == ne10);
-
-                        GGML_ASSERT(ne12 % ne02 == 0);
-                        GGML_ASSERT(ne13 % ne03 == 0);
-
-                        const uint r2 = ne12/ne02;
-                        const uint r3 = ne13/ne03;
-
-                        // find the break-even point where the matrix-matrix kernel becomes more efficient compared
-                        // to the matrix-vector kernel
-                        int ne11_mm_min = 1;
-
-#if 0
-                        // the numbers below are measured on M2 Ultra for 7B and 13B models
-                        // these numbers do not translate to other devices or model sizes
-                        // TODO: need to find a better approach
-                        if ([ctx->device.name isEqualToString:@"Apple M2 Ultra"]) {
-                            switch (src0t) {
-                                case GGML_TYPE_F16:  ne11_mm_min = 2;  break;
-                                case GGML_TYPE_Q8_0: ne11_mm_min = 7;  break;
-                                case GGML_TYPE_Q2_K: ne11_mm_min = 15; break;
-                                case GGML_TYPE_Q3_K: ne11_mm_min = 7;  break;
-                                case GGML_TYPE_Q4_0:
-                                case GGML_TYPE_Q4_1: ne11_mm_min = 15; break;
-                                case GGML_TYPE_Q4_K: ne11_mm_min = 11; break;
-                                case GGML_TYPE_Q5_0:                          // not tested yet
-                                case GGML_TYPE_Q5_1: ne11_mm_min = 13; break; // not tested yet
-                                case GGML_TYPE_Q5_K: ne11_mm_min = 7;  break;
-                                case GGML_TYPE_Q6_K: ne11_mm_min = 7;  break;
-                                default:             ne11_mm_min = 1;  break;
-                            }
-                        }
-#endif
-
-                        // for now the matrix-matrix multiplication kernel only works on A14+/M1+ SoCs
-                        // AMD GPU and older A-chips will reuse matrix-vector multiplication kernel
-                        if ([ctx->device supportsFamily:MTLGPUFamilyApple7] &&
-                            !ggml_is_transposed(src0) &&
-                            !ggml_is_transposed(src1) &&
-                            src1t == GGML_TYPE_F32 &&
-                            ne00 % 32 == 0 && ne00 >= 64 &&
-                            (ne11 > ne11_mm_min || (ggml_is_quantized(src0t) && ne12 > 1))) {
-                            //printf("matrix: ne00 = %6d, ne01 = %6d, ne02 = %6d, ne11 = %6d, ne12 = %6d\n", ne00, ne01, ne02, ne11, ne12);
-
-                            // some Metal matrix data types require aligned pointers
-                            // ref: https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf (Table 2.5)
-                            switch (src0->type) {
-                                case GGML_TYPE_F32: GGML_ASSERT(nb01 % 16 == 0); break;
-                                case GGML_TYPE_F16: GGML_ASSERT(nb01 % 8  == 0); break;
-                                default: break;
-                            }
-
-                            id<MTLComputePipelineState> pipeline = nil;
-
-                            switch (src0->type) {
-                                case GGML_TYPE_F32:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_F32_F32    ].pipeline; break;
-                                case GGML_TYPE_F16:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_F16_F32    ].pipeline; break;
-                                case GGML_TYPE_Q4_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_0_F32   ].pipeline; break;
-                                case GGML_TYPE_Q4_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_1_F32   ].pipeline; break;
-                                case GGML_TYPE_Q5_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_0_F32   ].pipeline; break;
-                                case GGML_TYPE_Q5_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_1_F32   ].pipeline; break;
-                                case GGML_TYPE_Q8_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q8_0_F32   ].pipeline; break;
-                                case GGML_TYPE_Q2_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q2_K_F32   ].pipeline; break;
-                                case GGML_TYPE_Q3_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q3_K_F32   ].pipeline; break;
-                                case GGML_TYPE_Q4_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_K_F32   ].pipeline; break;
-                                case GGML_TYPE_Q5_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_K_F32   ].pipeline; break;
-                                case GGML_TYPE_Q6_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q6_K_F32   ].pipeline; break;
-                                case GGML_TYPE_IQ2_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XXS_F32].pipeline; break;
-                                case GGML_TYPE_IQ2_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XS_F32 ].pipeline; break;
-                                case GGML_TYPE_IQ3_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_XXS_F32].pipeline; break;
-                                case GGML_TYPE_IQ3_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_S_F32  ].pipeline; break;
-                                case GGML_TYPE_IQ2_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_S_F32  ].pipeline; break;
-                                case GGML_TYPE_IQ1_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_S_F32  ].pipeline; break;
-                                case GGML_TYPE_IQ1_M:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32  ].pipeline; break;
-                                case GGML_TYPE_IQ4_NL:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32 ].pipeline; break;
-                                case GGML_TYPE_IQ4_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32 ].pipeline; break;
-                                default: GGML_ASSERT(false && "MUL MAT-MAT not implemented");
-                            }
-
-                            [encoder setComputePipelineState:pipeline];
-                            [encoder setBuffer:id_src0 offset:offs_src0    atIndex:0];
-                            [encoder setBuffer:id_src1 offset:offs_src1    atIndex:1];
-                            [encoder setBuffer:id_dst  offset:offs_dst     atIndex:2];
-                            [encoder setBytes:&ne00    length:sizeof(ne00) atIndex:3];
-                            [encoder setBytes:&ne02    length:sizeof(ne02) atIndex:4];
-                            [encoder setBytes:&nb01    length:sizeof(nb01) atIndex:5];
-                            [encoder setBytes:&nb02    length:sizeof(nb02) atIndex:6];
-                            [encoder setBytes:&ne12    length:sizeof(ne12) atIndex:7];
-                            [encoder setBytes:&nb10    length:sizeof(nb10) atIndex:8];
-                            [encoder setBytes:&nb11    length:sizeof(nb11) atIndex:9];
-                            [encoder setBytes:&nb12    length:sizeof(nb12) atIndex:10];
-                            [encoder setBytes:&ne0     length:sizeof(ne0)  atIndex:11];
-                            [encoder setBytes:&ne1     length:sizeof(ne1)  atIndex:12];
-                            [encoder setBytes:&r2      length:sizeof(r2)   atIndex:13];
-                            [encoder setBytes:&r3      length:sizeof(r3)   atIndex:14];
-                            [encoder setThreadgroupMemoryLength:8192 atIndex:0];
-                            [encoder dispatchThreadgroups:MTLSizeMake( (ne11 + 31)/32, (ne01 + 63)/64, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(128, 1, 1)];
-                        } else {
-                            int nth0 = 32;
-                            int nth1 = 1;
-                            int nrows = 1;
-                            //printf("vector: ne00 = %6d, ne01 = %6d, ne02 = %6d, ne11 = %6d, ne12 = %6d\n", ne00, ne01, ne02, ne11, ne12);
-
-                            id<MTLComputePipelineState> pipeline = nil;
-
-                            // use custom matrix x vector kernel
-                            switch (src0t) {
-                                case GGML_TYPE_F32:
-                                    {
-                                        GGML_ASSERT(src1t == GGML_TYPE_F32);
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F32_F32].pipeline;
-                                        nrows = 4;
-                                    } break;
-                                case GGML_TYPE_F16:
-                                    {
-                                        nth0 = 32;
-                                        nth1 = 1;
-                                        if (src1t == GGML_TYPE_F32) {
-                                            if (ne11 * ne12 < 4) {
-                                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_1ROW].pipeline;
-                                            } else if (ne00 >= 128 && ne01 >= 8 && ne00%4 == 0) {
-                                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_L4].pipeline;
-                                                nrows = ne11;
-                                            } else {
-                                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32].pipeline;
-                                                nrows = 4;
-                                            }
-                                        } else {
-                                            pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F16].pipeline;
-                                            nrows = 4;
-                                        }
-                                    } break;
-                                case GGML_TYPE_Q4_0:
-                                    {
-                                        nth0 = 8;
-                                        nth1 = 8;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_0_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q4_1:
-                                    {
-                                        nth0 = 8;
-                                        nth1 = 8;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_1_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q5_0:
-                                    {
-                                        nth0 = 8;
-                                        nth1 = 8;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_0_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q5_1:
-                                    {
-                                        nth0 = 8;
-                                        nth1 = 8;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q8_0:
-                                    {
-                                        nth0 = 8;
-                                        nth1 = 8;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q2_K:
-                                    {
-                                        nth0 = 2;
-                                        nth1 = 32;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q2_K_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q3_K:
-                                    {
-                                        nth0 = 2;
-                                        nth1 = 32;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q3_K_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q4_K:
-                                    {
-                                        nth0 = 4; //1;
-                                        nth1 = 8; //32;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_K_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q5_K:
-                                    {
-                                        nth0 = 2;
-                                        nth1 = 32;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_K_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q6_K:
-                                    {
-                                        nth0 = 2;
-                                        nth1 = 32;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q6_K_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ2_XXS:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XXS_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ2_XS:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XS_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ3_XXS:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_XXS_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ3_S:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_S_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ2_S:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_S_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ1_S:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_S_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ1_M:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_M_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ4_NL:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_NL_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ4_XS:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_XS_F32].pipeline;
-                                    } break;
-                                default:
-                                    {
-                                        GGML_METAL_LOG_ERROR("Asserting on type %d\n", (int)src0t);
-                                        GGML_ASSERT(false && "not implemented");
-                                    }
-                            };
-
-                            if (ggml_is_quantized(src0t)) {
-                                GGML_ASSERT(ne00 >= nth0*nth1);
-                            }
-
-                            [encoder setComputePipelineState:pipeline];
-                            [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                            [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1];
-                            [encoder setBuffer:id_dst  offset:offs_dst  atIndex:2];
-                            [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3];
-                            [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4];
-                            [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5];
-                            [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6];
-                            [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7];
-                            [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8];
-                            [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:9];
-                            [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:10];
-                            [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:11];
-                            [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:12];
-                            [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:13];
-                            [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:14];
-                            [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:15];
-                            [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:16];
-                            [encoder setBytes:&r2   length:sizeof(r2)   atIndex:17];
-                            [encoder setBytes:&r3   length:sizeof(r3)   atIndex:18];
-
-                            if (src0t == GGML_TYPE_Q4_0  || src0t == GGML_TYPE_Q4_1  || src0t == GGML_TYPE_Q5_0 ||
-                                src0t == GGML_TYPE_Q5_1  || src0t == GGML_TYPE_Q8_0  || src0t == GGML_TYPE_Q2_K ||
-                                src0t == GGML_TYPE_IQ1_S || src0t == GGML_TYPE_IQ1_M || src0t == GGML_TYPE_IQ2_S) {
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_IQ2_XXS || src0t == GGML_TYPE_IQ2_XS) {
-                                const int mem_size = src0t == GGML_TYPE_IQ2_XXS ? 256*8+128 : 512*8+128;
-                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_IQ3_XXS || src0t == GGML_TYPE_IQ3_S) {
-                                const int mem_size = src0t == GGML_TYPE_IQ3_XXS ? 256*4+128 : 512*4;
-                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_IQ4_NL || src0t == GGML_TYPE_IQ4_XS) {
-                                const int mem_size = 32*sizeof(float);
-                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_Q4_K) {
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_Q3_K) {
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_Q5_K) {
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_Q6_K) {
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            } else {
-                                const int64_t ny = (ne11 + nrows - 1)/nrows;
-                                [encoder dispatchThreadgroups:MTLSizeMake(ne01, ny, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                        }
-                    } break;
-                case GGML_OP_MUL_MAT_ID:
-                    {
-                        const int n_as = src0->ne[2];
-
-                        // src2 = ids
-                        const enum ggml_type src2t = src2->type; GGML_UNUSED(src2t);
-
-                        GGML_ASSERT(src2t == GGML_TYPE_I32);
-
-                        GGML_ASSERT(!ggml_is_transposed(src0));
-                        GGML_ASSERT(!ggml_is_transposed(src1));
-
-                        GGML_ASSERT(src1t == GGML_TYPE_F32);
-
-                        // find the break-even point where the matrix-matrix kernel becomes more efficient compared
-                        // to the matrix-vector kernel
-                        // ne20 = n_used_experts
-                        // ne21 = n_rows
-                        const int dst_rows = ne20*ne21;
-                        const int dst_rows_min = n_as;
-                        const int dst_rows_max = (ctx->device.maxThreadgroupMemoryLength - 32 - 8192)/4;
-
-                        // max size of the rowids array in the kernel shared buffer
-                        GGML_ASSERT(dst_rows <= dst_rows_max);
-
-                        // for now the matrix-matrix multiplication kernel only works on A14+/M1+ SoCs
-                        // AMD GPU and older A-chips will reuse matrix-vector multiplication kernel
-                        // !!!
-                        // TODO: for now, always use mat-vec kernels until we figure out how to improve the
-                        //       indirect matrix multiplication
-                        // !!!
-                        if ([ctx->device supportsFamily:MTLGPUFamilyApple7] &&
-                            ne00 % 32 == 0 && ne00 >= 64 &&
-                            dst_rows > dst_rows_min) {
-
-                            // some Metal matrix data types require aligned pointers
-                            // ref: https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf (Table 2.5)
-                            switch (src0->type) {
-                                case GGML_TYPE_F32: GGML_ASSERT(nb01 % 16 == 0); break;
-                                case GGML_TYPE_F16: GGML_ASSERT(nb01 % 8  == 0); break;
-                                default: break;
-                            }
-
-                            id<MTLComputePipelineState> pipeline = nil;
-
-                            switch (src0->type) {
-                                case GGML_TYPE_F32:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F32    ].pipeline; break;
-                                case GGML_TYPE_F16:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F32    ].pipeline; break;
-                                case GGML_TYPE_Q4_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_0_F32   ].pipeline; break;
-                                case GGML_TYPE_Q4_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_1_F32   ].pipeline; break;
-                                case GGML_TYPE_Q5_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_0_F32   ].pipeline; break;
-                                case GGML_TYPE_Q5_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_1_F32   ].pipeline; break;
-                                case GGML_TYPE_Q8_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q8_0_F32   ].pipeline; break;
-                                case GGML_TYPE_Q2_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q2_K_F32   ].pipeline; break;
-                                case GGML_TYPE_Q3_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q3_K_F32   ].pipeline; break;
-                                case GGML_TYPE_Q4_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_K_F32   ].pipeline; break;
-                                case GGML_TYPE_Q5_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_K_F32   ].pipeline; break;
-                                case GGML_TYPE_Q6_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q6_K_F32   ].pipeline; break;
-                                case GGML_TYPE_IQ2_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XXS_F32].pipeline; break;
-                                case GGML_TYPE_IQ2_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XS_F32 ].pipeline; break;
-                                case GGML_TYPE_IQ3_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_XXS_F32].pipeline; break;
-                                case GGML_TYPE_IQ3_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_S_F32  ].pipeline; break;
-                                case GGML_TYPE_IQ2_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_S_F32  ].pipeline; break;
-                                case GGML_TYPE_IQ1_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_S_F32  ].pipeline; break;
-                                case GGML_TYPE_IQ1_M:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_M_F32  ].pipeline; break;
-                                case GGML_TYPE_IQ4_NL:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_NL_F32 ].pipeline; break;
-                                case GGML_TYPE_IQ4_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_XS_F32 ].pipeline; break;
-                                default: GGML_ASSERT(false && "MUL_MAT_ID not implemented");
-                            }
-
-                            [encoder setComputePipelineState:pipeline];
-                            [encoder setBuffer:id_src0 offset:offs_src0    atIndex:0];
-                            [encoder setBuffer:id_src1 offset:offs_src1    atIndex:1];
-                            [encoder setBuffer:id_dst  offset:offs_dst     atIndex:2];
-                            [encoder setBuffer:id_src2 offset:offs_src2    atIndex:3];
-                            [encoder setBytes:&ne20    length:sizeof(ne20) atIndex:4];
-                            [encoder setBytes:&ne21    length:sizeof(ne21) atIndex:5];
-                            [encoder setBytes:&nb21    length:sizeof(nb21) atIndex:6];
-                            [encoder setBytes:&ne00    length:sizeof(ne00) atIndex:7];
-                            [encoder setBytes:&ne02    length:sizeof(ne02) atIndex:8];
-                            [encoder setBytes:&nb01    length:sizeof(nb01) atIndex:9];
-                            [encoder setBytes:&nb02    length:sizeof(nb02) atIndex:10];
-                            [encoder setBytes:&ne11    length:sizeof(ne11) atIndex:11];
-                            [encoder setBytes:&ne12    length:sizeof(ne12) atIndex:12];
-                            [encoder setBytes:&ne13    length:sizeof(ne13) atIndex:13];
-                            [encoder setBytes:&nb10    length:sizeof(nb10) atIndex:14];
-                            [encoder setBytes:&nb11    length:sizeof(nb11) atIndex:15];
-                            [encoder setBytes:&nb12    length:sizeof(nb12) atIndex:16];
-                            [encoder setBytes:&ne0     length:sizeof(ne0)  atIndex:17];
-                            [encoder setBytes:&ne1     length:sizeof(ne1)  atIndex:18];
-                            [encoder setBytes:&nb1     length:sizeof(nb1)  atIndex:19];
-
-                            [encoder setThreadgroupMemoryLength:GGML_PAD(8192 + dst_rows*4/*sizeof(ushort2)*/, 16) atIndex:0];
-
-                            [encoder dispatchThreadgroups:MTLSizeMake((ne21 + 31)/32, (ne01 + 63)/64, n_as) threadsPerThreadgroup:MTLSizeMake(128, 1, 1)];
-                        } else {
-                            int nth0 = 32;
-                            int nth1 = 1;
-                            int nrows = 1;
-                            //printf("vector: ne00 = %6d, ne01 = %6d, ne02 = %6d, ne11 = %6d, ne12 = %6d\n", ne00, ne01, ne02, ne11, ne12);
-
-                            id<MTLComputePipelineState> pipeline = nil;
-
-                            // use custom matrix x vector kernel
-                            switch (src0t) {
-                                case GGML_TYPE_F32:
-                                    {
-                                        GGML_ASSERT(src1t == GGML_TYPE_F32);
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F32_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_F16:
-                                    {
-                                        GGML_ASSERT(src1t == GGML_TYPE_F32);
-                                        nth0 = 32;
-                                        nth1 = 1;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q4_0:
-                                    {
-                                        nth0 = 8;
-                                        nth1 = 8;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_0_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q4_1:
-                                    {
-                                        nth0 = 8;
-                                        nth1 = 8;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_1_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q5_0:
-                                    {
-                                        nth0 = 8;
-                                        nth1 = 8;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_0_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q5_1:
-                                    {
-                                        nth0 = 8;
-                                        nth1 = 8;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_1_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q8_0:
-                                    {
-                                        nth0 = 8;
-                                        nth1 = 8;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q8_0_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q2_K:
-                                    {
-                                        nth0 = 2;
-                                        nth1 = 32;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q2_K_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q3_K:
-                                    {
-                                        nth0 = 2;
-                                        nth1 = 32;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q3_K_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q4_K:
-                                    {
-                                        nth0 = 4; //1;
-                                        nth1 = 8; //32;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_K_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q5_K:
-                                    {
-                                        nth0 = 2;
-                                        nth1 = 32;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_K_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_Q6_K:
-                                    {
-                                        nth0 = 2;
-                                        nth1 = 32;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q6_K_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ2_XXS:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XXS_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ2_XS:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XS_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ3_XXS:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_XXS_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ3_S:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_S_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ2_S:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_S_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ1_S:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_S_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ1_M:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_M_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ4_NL:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_NL_F32].pipeline;
-                                    } break;
-                                case GGML_TYPE_IQ4_XS:
-                                    {
-                                        nth0 = 4;
-                                        nth1 = 16;
-                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_XS_F32].pipeline;
-                                    } break;
-                                default:
-                                    {
-                                        GGML_METAL_LOG_ERROR("Asserting on type %d\n", (int)src2t);
-                                        GGML_ASSERT(false && "not implemented");
-                                    }
-                            };
-
-                            if (ggml_is_quantized(src0t)) {
-                                GGML_ASSERT(ne00 >= nth0*nth1);
-                            }
-
-                            [encoder setComputePipelineState:pipeline];
-                            [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                            [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1];
-                            [encoder setBuffer:id_dst  offset:offs_dst  atIndex:2];
-                            [encoder setBuffer:id_src2 offset:offs_src2 atIndex:3];
-                            [encoder setBytes:&ne20 length:sizeof(ne20) atIndex:4];
-                            [encoder setBytes:&ne21 length:sizeof(ne21) atIndex:5];
-                            [encoder setBytes:&nb21 length:sizeof(nb21) atIndex:6];
-                            [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:7];
-                            [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:8];
-                            [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:9];
-                            [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:10];
-                            [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:11];
-                            [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:12];
-                            [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:13];
-                            [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:14];
-                            [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:15];
-                            [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:16];
-                            [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:17];
-                            [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:18];
-                            [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:19];
-                            [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:20];
-                            [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:21];
-                            [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:22];
-
-                            const int64_t _ne1 = 1;
-                            const int tgz = dst_rows;
-
-                            if (src0t == GGML_TYPE_Q4_0  || src0t == GGML_TYPE_Q4_1  || src0t == GGML_TYPE_Q5_0 ||
-                                src0t == GGML_TYPE_Q5_1  || src0t == GGML_TYPE_Q8_0  || src0t == GGML_TYPE_Q2_K ||
-                                src0t == GGML_TYPE_IQ1_S || src0t == GGML_TYPE_IQ1_M || src0t == GGML_TYPE_IQ2_S) {
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_IQ2_XXS || src0t == GGML_TYPE_IQ2_XS) {
-                                const int mem_size = src0t == GGML_TYPE_IQ2_XXS ? 256*8+128 : 512*8+128;
-                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_IQ3_XXS || src0t == GGML_TYPE_IQ3_S) {
-                                const int mem_size = src0t == GGML_TYPE_IQ3_XXS ? 256*4+128 : 512*4;
-                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_IQ4_NL || src0t == GGML_TYPE_IQ4_XS) {
-                                const int mem_size = 32*sizeof(float);
-                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_Q4_K) {
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_Q3_K) {
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_Q5_K) {
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                            else if (src0t == GGML_TYPE_Q6_K) {
-                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            } else {
-                                const int64_t ny = (_ne1 + nrows - 1)/nrows; // = _ne1
-                                [encoder dispatchThreadgroups:MTLSizeMake(ne01, ny, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
-                            }
-                        }
-                    } break;
-                case GGML_OP_GET_ROWS:
-                    {
-                        id<MTLComputePipelineState> pipeline = nil;
-
-                        switch (src0->type) {
-                            case GGML_TYPE_F32:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_F32    ].pipeline; break;
-                            case GGML_TYPE_F16:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_F16    ].pipeline; break;
-                            case GGML_TYPE_Q4_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_0   ].pipeline; break;
-                            case GGML_TYPE_Q4_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_1   ].pipeline; break;
-                            case GGML_TYPE_Q5_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_0   ].pipeline; break;
-                            case GGML_TYPE_Q5_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_1   ].pipeline; break;
-                            case GGML_TYPE_Q8_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q8_0   ].pipeline; break;
-                            case GGML_TYPE_Q2_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q2_K   ].pipeline; break;
-                            case GGML_TYPE_Q3_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q3_K   ].pipeline; break;
-                            case GGML_TYPE_Q4_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_K   ].pipeline; break;
-                            case GGML_TYPE_Q5_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_K   ].pipeline; break;
-                            case GGML_TYPE_Q6_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q6_K   ].pipeline; break;
-                            case GGML_TYPE_IQ2_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XXS].pipeline; break;
-                            case GGML_TYPE_IQ2_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XS ].pipeline; break;
-                            case GGML_TYPE_IQ3_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_XXS].pipeline; break;
-                            case GGML_TYPE_IQ3_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_S  ].pipeline; break;
-                            case GGML_TYPE_IQ2_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_S  ].pipeline; break;
-                            case GGML_TYPE_IQ1_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_S  ].pipeline; break;
-                            case GGML_TYPE_IQ1_M:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_M  ].pipeline; break;
-                            case GGML_TYPE_IQ4_NL:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_NL ].pipeline; break;
-                            case GGML_TYPE_IQ4_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_XS ].pipeline; break;
-                            case GGML_TYPE_I32:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_I32    ].pipeline; break;
-                            default: GGML_ASSERT(false && "not implemented");
-                        }
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0     offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_src1     offset:offs_src1 atIndex:1];
-                        [encoder setBuffer:id_dst      offset:offs_dst  atIndex:2];
-                        [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:3];
-                        [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:4];
-                        [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:5];
-                        [encoder setBytes:&ne10 length:sizeof( int64_t) atIndex:6];
-                        [encoder setBytes:&nb10 length:sizeof( int64_t) atIndex:7];
-                        [encoder setBytes:&nb11 length:sizeof( int64_t) atIndex:8];
-                        [encoder setBytes:&nb1  length:sizeof(uint64_t) atIndex:9];
-                        [encoder setBytes:&nb2  length:sizeof(uint64_t) atIndex:10];
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne10, ne11, 1) threadsPerThreadgroup:MTLSizeMake(32, 1, 1)];
-                    } break;
-                case GGML_OP_RMS_NORM:
-                    {
-                        GGML_ASSERT(ne00 % 4 == 0);
-                        GGML_ASSERT(ggml_is_contiguous_1(src0));
-
-                        float eps;
-                        memcpy(&eps, dst->op_params, sizeof(float));
-
-                        int nth = 32; // SIMD width
-
-                        while (nth < ne00/4 && nth < 1024) {
-                            nth *= 2;
-                        }
-
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_RMS_NORM].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0        atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst         atIndex:1];
-                        [encoder setBytes:&ne00    length:sizeof( int64_t) atIndex:2];
-                        [encoder setBytes:&nb01    length:sizeof(uint64_t) atIndex:3];
-                        [encoder setBytes:&eps     length:sizeof(   float) atIndex:4];
-                        [encoder setThreadgroupMemoryLength:32*sizeof(float) atIndex:0];
-
-                        const int64_t nrows = ggml_nrows(src0);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(nrows, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_GROUP_NORM:
-                    {
-                        GGML_ASSERT(ne00 % 4 == 0);
-                        GGML_ASSERT(ggml_is_contiguous(src0));
-
-                        //float eps;
-                        //memcpy(&eps, dst->op_params, sizeof(float));
-
-                        const float eps = 1e-6f; // TODO: temporarily hardcoded
-
-                        const int32_t n_groups = ((int32_t *) dst->op_params)[0];
-
-                        int nth = 32; // SIMD width
-
-                        //while (nth < ne00/4 && nth < 1024) {
-                        //    nth *= 2;
-                        //}
-
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GROUP_NORM].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0  offset:offs_src0        atIndex:0];
-                        [encoder setBuffer:id_dst   offset:offs_dst         atIndex:1];
-                        [encoder setBytes:&ne00     length:sizeof( int64_t) atIndex:2];
-                        [encoder setBytes:&ne01     length:sizeof( int64_t) atIndex:3];
-                        [encoder setBytes:&ne02     length:sizeof( int64_t) atIndex:4];
-                        [encoder setBytes:&nb00     length:sizeof(uint64_t) atIndex:5];
-                        [encoder setBytes:&nb01     length:sizeof(uint64_t) atIndex:6];
-                        [encoder setBytes:&nb02     length:sizeof(uint64_t) atIndex:7];
-                        [encoder setBytes:&n_groups length:sizeof( int32_t) atIndex:8];
-                        [encoder setBytes:&eps      length:sizeof(   float) atIndex:9];
-                        [encoder setThreadgroupMemoryLength:32*sizeof(float) atIndex:0];
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(n_groups, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_NORM:
-                    {
-                        GGML_ASSERT(ggml_is_contiguous_1(src0));
-
-                        float eps;
-                        memcpy(&eps, dst->op_params, sizeof(float));
-
-                        const int nth = MIN(256, ne00);
-
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_NORM].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0        atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst         atIndex:1];
-                        [encoder setBytes:&ne00    length:sizeof( int64_t) atIndex:2];
-                        [encoder setBytes:&nb01    length:sizeof(uint64_t) atIndex:3];
-                        [encoder setBytes:&eps     length:sizeof(   float) atIndex:4];
-                        [encoder setThreadgroupMemoryLength:GGML_PAD(nth*sizeof(float), 16) atIndex:0];
-
-                        const int64_t nrows = ggml_nrows(src0);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(nrows, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_ROPE:
-                    {
-                        GGML_ASSERT(ne10 == ne02);
-
-                        const int nth = MIN(1024, ne00);
-
-                        const int n_past     = ((int32_t *) dst->op_params)[0];
-                        const int n_dims     = ((int32_t *) dst->op_params)[1];
-                        const int mode       = ((int32_t *) dst->op_params)[2];
-                        // skip 3, n_ctx, used in GLM RoPE, unimplemented in metal
-                        const int n_ctx_orig = ((int32_t *) dst->op_params)[4];
-
-                        float freq_base;
-                        float freq_scale;
-                        float ext_factor;
-                        float attn_factor;
-                        float beta_fast;
-                        float beta_slow;
-
-                        memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
-                        memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
-                        memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
-                        memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
-                        memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
-                        memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
-
-                        const bool is_neox = mode & 2;
-
-                        id<MTLComputePipelineState> pipeline = nil;
-
-                        if (!is_neox) {
-                            switch (src0->type) {
-                                case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ROPE_NORM_F32].pipeline; break;
-                                case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ROPE_NORM_F16].pipeline; break;
-                                default: GGML_ASSERT(false);
-                            };
-                        } else {
-                            switch (src0->type) {
-                                case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F32].pipeline; break;
-                                case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F16].pipeline; break;
-                                default: GGML_ASSERT(false);
-                            };
-                        }
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0     offset:offs_src0        atIndex:0];
-                        [encoder setBuffer:id_src1     offset:offs_src1        atIndex:1];
-                        if (id_src2 != nil) {
-                            [encoder setBuffer:id_src2 offset:offs_src2        atIndex:2];
-                        } else {
-                            [encoder setBuffer:id_src0 offset:offs_src0        atIndex:2];
-                        }
-                        [encoder setBuffer:id_dst      offset:offs_dst         atIndex:3];
-                        [encoder setBytes:&ne00        length:sizeof( int64_t) atIndex:4];
-                        [encoder setBytes:&ne01        length:sizeof( int64_t) atIndex:5];
-                        [encoder setBytes:&ne02        length:sizeof( int64_t) atIndex:6];
-                        [encoder setBytes:&ne03        length:sizeof( int64_t) atIndex:7];
-                        [encoder setBytes:&nb00        length:sizeof(uint64_t) atIndex:8];
-                        [encoder setBytes:&nb01        length:sizeof(uint64_t) atIndex:9];
-                        [encoder setBytes:&nb02        length:sizeof(uint64_t) atIndex:10];
-                        [encoder setBytes:&nb03        length:sizeof(uint64_t) atIndex:11];
-                        [encoder setBytes:&ne0         length:sizeof( int64_t) atIndex:12];
-                        [encoder setBytes:&ne1         length:sizeof( int64_t) atIndex:13];
-                        [encoder setBytes:&ne2         length:sizeof( int64_t) atIndex:14];
-                        [encoder setBytes:&ne3         length:sizeof( int64_t) atIndex:15];
-                        [encoder setBytes:&nb0         length:sizeof(uint64_t) atIndex:16];
-                        [encoder setBytes:&nb1         length:sizeof(uint64_t) atIndex:17];
-                        [encoder setBytes:&nb2         length:sizeof(uint64_t) atIndex:18];
-                        [encoder setBytes:&nb3         length:sizeof(uint64_t) atIndex:19];
-                        [encoder setBytes:&n_past      length:sizeof(     int) atIndex:20];
-                        [encoder setBytes:&n_dims      length:sizeof(     int) atIndex:21];
-                        [encoder setBytes:&n_ctx_orig  length:sizeof(     int) atIndex:22];
-                        [encoder setBytes:&freq_base   length:sizeof(   float) atIndex:23];
-                        [encoder setBytes:&freq_scale  length:sizeof(   float) atIndex:24];
-                        [encoder setBytes:&ext_factor  length:sizeof(   float) atIndex:25];
-                        [encoder setBytes:&attn_factor length:sizeof(   float) atIndex:26];
-                        [encoder setBytes:&beta_fast   length:sizeof(   float) atIndex:27];
-                        [encoder setBytes:&beta_slow   length:sizeof(   float) atIndex:28];
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_IM2COL:
-                    {
-                        GGML_ASSERT(src0->type == GGML_TYPE_F16);
-                        GGML_ASSERT(src1->type == GGML_TYPE_F32);
-                        GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32);
-
-                        const int32_t s0 = ((const int32_t *)(dst->op_params))[0];
-                        const int32_t s1 = ((const int32_t *)(dst->op_params))[1];
-                        const int32_t p0 = ((const int32_t *)(dst->op_params))[2];
-                        const int32_t p1 = ((const int32_t *)(dst->op_params))[3];
-                        const int32_t d0 = ((const int32_t *)(dst->op_params))[4];
-                        const int32_t d1 = ((const int32_t *)(dst->op_params))[5];
-
-                        const bool is_2D = ((const int32_t *)(dst->op_params))[6] == 1;
-
-                        const int32_t N  = src1->ne[is_2D ? 3 : 2];
-                        const int32_t IC = src1->ne[is_2D ? 2 : 1];
-                        const int32_t IH = is_2D ? src1->ne[1] : 1;
-                        const int32_t IW =         src1->ne[0];
-
-                        const int32_t KH = is_2D ? src0->ne[1] : 1;
-                        const int32_t KW =         src0->ne[0];
-
-                        const int32_t OH = is_2D ? dst->ne[2] : 1;
-                        const int32_t OW =         dst->ne[1];
-
-                        const int32_t CHW = IC * KH * KW;
-
-                        const int32_t ofs0 = src1->nb[is_2D ? 3 : 2] / 4;
-                        const int32_t ofs1 = src1->nb[is_2D ? 2 : 1] / 4;
-
-                        id<MTLComputePipelineState> pipeline = nil;
-
-                        switch (dst->type) {
-                            case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_IM2COL_F32].pipeline; break;
-                            case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_IM2COL_F16].pipeline; break;
-                            default: GGML_ASSERT(false);
-                        };
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src1 offset:offs_src1        atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst         atIndex:1];
-                        [encoder setBytes:&ofs0    length:sizeof( int32_t) atIndex:2];
-                        [encoder setBytes:&ofs1    length:sizeof( int32_t) atIndex:3];
-                        [encoder setBytes:&IW      length:sizeof( int32_t) atIndex:4];
-                        [encoder setBytes:&IH      length:sizeof( int32_t) atIndex:5];
-                        [encoder setBytes:&CHW     length:sizeof( int32_t) atIndex:6];
-                        [encoder setBytes:&s0      length:sizeof( int32_t) atIndex:7];
-                        [encoder setBytes:&s1      length:sizeof( int32_t) atIndex:8];
-                        [encoder setBytes:&p0      length:sizeof( int32_t) atIndex:9];
-                        [encoder setBytes:&p1      length:sizeof( int32_t) atIndex:10];
-                        [encoder setBytes:&d0      length:sizeof( int32_t) atIndex:11];
-                        [encoder setBytes:&d1      length:sizeof( int32_t) atIndex:12];
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(IC, OH, OW) threadsPerThreadgroup:MTLSizeMake(N, KH, KW)];
-                    } break;
-                case GGML_OP_UPSCALE:
-                    {
-                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
-
-                        const float sf0 = (float)ne0/src0->ne[0];
-                        const float sf1 = (float)ne1/src0->ne[1];
-                        const float sf2 = (float)ne2/src0->ne[2];
-                        const float sf3 = (float)ne3/src0->ne[3];
-
-                        const id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_UPSCALE_F32].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2];
-                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3];
-                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4];
-                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5];
-                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6];
-                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7];
-                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8];
-                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9];
-                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:10];
-                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:11];
-                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:12];
-                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:13];
-                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:14];
-                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:15];
-                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:16];
-                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:17];
-                        [encoder setBytes:&sf0  length:sizeof(sf0)  atIndex:18];
-                        [encoder setBytes:&sf1  length:sizeof(sf1)  atIndex:19];
-                        [encoder setBytes:&sf2  length:sizeof(sf2)  atIndex:20];
-                        [encoder setBytes:&sf3  length:sizeof(sf3)  atIndex:21];
-
-                        const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne0);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_PAD:
-                    {
-                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
-
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_PAD_F32].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2];
-                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3];
-                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4];
-                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5];
-                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6];
-                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7];
-                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8];
-                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9];
-                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:10];
-                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:11];
-                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:12];
-                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:13];
-                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:14];
-                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:15];
-                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:16];
-                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:17];
-
-                        const int nth = MIN(1024, ne0);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_ARANGE:
-                    {
-                        GGML_ASSERT(dst->type == GGML_TYPE_F32);
-
-                        float start;
-                        float step;
-
-                        memcpy(&start, ((int32_t *) dst->op_params) + 0, sizeof(float));
-                        memcpy(&step,  ((int32_t *) dst->op_params) + 2, sizeof(float));
-
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ARANGE_F32].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_dst  offset:offs_dst    atIndex:0];
-                        [encoder setBytes:&ne0   length:sizeof(ne0)   atIndex:1];
-                        [encoder setBytes:&start length:sizeof(start) atIndex:2];
-                        [encoder setBytes:&step  length:sizeof(step)  atIndex:3];
-
-                        const int nth = MIN(1024, ne0);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(1, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_TIMESTEP_EMBEDDING:
-                    {
-                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
-
-                        const int dim        = dst->op_params[0];
-                        const int max_period = dst->op_params[1];
-
-                        const int half = dim / 2;
-
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_TIMESTEP_EMBEDDING_F32].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
-                        [encoder setBytes:&nb1   length:sizeof(nb1) atIndex:2];
-                        [encoder setBytes:&dim   length:sizeof(dim) atIndex:3];
-                        [encoder setBytes:&max_period length:sizeof(max_period) atIndex:4];
-
-                        const int nth = MIN(1024, half);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne00, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                case GGML_OP_ARGSORT:
-                    {
-                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
-                        GGML_ASSERT( dst->type == GGML_TYPE_I32);
-
-                        const int nrows = ggml_nrows(src0);
-
-                        enum ggml_sort_order order = (enum ggml_sort_order) dst->op_params[0];
-
-                        // bitonic sort requires the number of elements to be power of 2
-                        int64_t ne00_padded = 1;
-                        while (ne00_padded < ne00) {
-                            ne00_padded *= 2;
-                        }
-
-                        // Metal kernels require the buffer size to be multiple of 16 bytes
-                        // https://developer.apple.com/documentation/metal/mtlcomputecommandencoder/1443142-setthreadgroupmemorylength
-                        const int mem_size = GGML_PAD(ne00_padded*sizeof(int32_t), 16);
-
-                        id<MTLComputePipelineState> pipeline = nil;
-
-                        switch (order) {
-                            case GGML_SORT_ORDER_ASC:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC].pipeline;  break;
-                            case GGML_SORT_ORDER_DESC: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC].pipeline; break;
-                            default: GGML_ASSERT(false);
-                        };
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0     offset:offs_src0        atIndex:0];
-                        [encoder setBuffer:id_dst      offset:offs_dst         atIndex:1];
-                        [encoder setBytes:&ne00        length:sizeof( int64_t) atIndex:2];
-                        [encoder setBytes:&ne00_padded length:sizeof( int64_t) atIndex:3];
-                        [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(1, nrows, 1) threadsPerThreadgroup:MTLSizeMake(ne00_padded, 1, 1)];
-                    } break;
-                case GGML_OP_LEAKY_RELU:
-                    {
-                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
-
-                        float slope;
-                        memcpy(&slope, dst->op_params, sizeof(float));
-
-                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32].pipeline;
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0   atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst    atIndex:1];
-                        [encoder setBytes:&slope length:sizeof(slope) atIndex:2];
-
-                        const int64_t n = ggml_nelements(dst);
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
-                    } break;
-                case GGML_OP_FLASH_ATTN_EXT:
-                    {
-                        GGML_ASSERT(ne00 % 4  == 0);
-                        GGML_ASSERT(ne11 % 32 == 0);
-
-                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
-
-                        GGML_ASSERT(ggml_are_same_shape (src1, src2));
-
-                        struct ggml_tensor * src3 = gf->nodes[i]->src[3];
-
-                        size_t offs_src3 = 0;
-
-                        id<MTLBuffer> id_src3 = src3 ? ggml_metal_get_buffer(src3, &offs_src3) : nil;
-
-                        GGML_ASSERT(!src3 || src3->type == GGML_TYPE_F16);
-                        GGML_ASSERT(!src3 || src3->ne[1] >= GGML_PAD(src0->ne[1], 8) &&
-                                "the Flash-Attention Metal kernel requires the mask to be padded to 8 and at least n_queries big");
-
-                        const int64_t  ne30 = src3 ? src3->ne[0] : 0; GGML_UNUSED(ne30);
-                      //const int64_t  ne31 = src3 ? src3->ne[1] : 0;
-                        const int64_t  ne32 = src3 ? src3->ne[2] : 0; GGML_UNUSED(ne32);
-                        const int64_t  ne33 = src3 ? src3->ne[3] : 0; GGML_UNUSED(ne33);
-
-                        const uint64_t nb30 = src3 ? src3->nb[0] : 0; GGML_UNUSED(nb30);
-                        const uint64_t nb31 = src3 ? src3->nb[1] : 0;
-                        const uint64_t nb32 = src3 ? src3->nb[2] : 0; GGML_UNUSED(nb32);
-                        const uint64_t nb33 = src3 ? src3->nb[3] : 0; GGML_UNUSED(nb33);
-
-                        const enum ggml_type src2t = src2 ? src2->type : GGML_TYPE_COUNT; GGML_UNUSED(src2t);
-
-                        float scale;
-                        float max_bias;
-
-                        memcpy(&scale,    ((int32_t *) dst->op_params) + 0, sizeof(scale));
-                        memcpy(&max_bias, ((int32_t *) dst->op_params) + 1, sizeof(max_bias));
-
-                        const uint32_t n_head      = src0->ne[2];
-                        const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head));
-
-                        const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
-                        const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
-
-                        id<MTLComputePipelineState> pipeline = nil;
-
-                        bool use_vec_kernel = false;
-
-                        if (ne01 >= 4 || (ne00%128 != 0)) {
-                            switch (ne00) {
-                                case 64:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H64 ].pipeline; break;
-                                case 80:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H80 ].pipeline; break;
-                                case 96:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H96 ].pipeline; break;
-                                case 112: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H112].pipeline; break;
-                                case 128: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H128].pipeline; break;
-                              //case 256: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H256].pipeline; break;
-                                default:
-                                          {
-                                              GGML_METAL_LOG_ERROR("unsupported size: %lld\n", ne00);
-                                              GGML_METAL_LOG_ERROR("add template specialization for this size\n");
-                                              GGML_ASSERT(false && "add template specialization for this size");
-                                          }
-                            }
-                        } else {
-                            use_vec_kernel = true;
-
-                            switch (ne00) {
-                                case 128: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H128].pipeline; break;
-                              //case 256: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H256].pipeline; break;
-                                default:
-                                          {
-                                              GGML_METAL_LOG_ERROR("unsupported size: %lld\n", ne00);
-                                              GGML_METAL_LOG_ERROR("add template specialization for this size\n");
-                                              GGML_ASSERT(false && "add template specialization for this size");
-                                          }
-                            }
-                        }
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0     offset:offs_src0           atIndex:0];
-                        [encoder setBuffer:id_src1     offset:offs_src1           atIndex:1];
-                        [encoder setBuffer:id_src2     offset:offs_src2           atIndex:2];
-                        if (id_src3) {
-                            [encoder setBuffer:id_src3     offset:offs_src3           atIndex:3];
-                        } else {
-                            [encoder setBuffer:id_src0     offset:offs_src0           atIndex:3];
-                        }
-                        [encoder setBuffer:id_dst      offset:offs_dst            atIndex:4];
-                        [encoder setBytes:&ne01        length:sizeof( int64_t)    atIndex:5];
-                        [encoder setBytes:&ne02        length:sizeof( int64_t)    atIndex:6];
-                        [encoder setBytes:&ne03        length:sizeof( int64_t)    atIndex:7];
-                        [encoder setBytes:&nb01        length:sizeof(uint64_t)    atIndex:8];
-                        [encoder setBytes:&nb02        length:sizeof(uint64_t)    atIndex:9];
-                        [encoder setBytes:&nb03        length:sizeof(uint64_t)    atIndex:10];
-                        [encoder setBytes:&ne11        length:sizeof( int64_t)    atIndex:11];
-                        [encoder setBytes:&ne12        length:sizeof( int64_t)    atIndex:12];
-                        [encoder setBytes:&ne13        length:sizeof( int64_t)    atIndex:13];
-                        [encoder setBytes:&nb11        length:sizeof(uint64_t)    atIndex:14];
-                        [encoder setBytes:&nb12        length:sizeof(uint64_t)    atIndex:15];
-                        [encoder setBytes:&nb13        length:sizeof(uint64_t)    atIndex:16];
-                        [encoder setBytes:&nb21        length:sizeof(uint64_t)    atIndex:17];
-                        [encoder setBytes:&nb22        length:sizeof(uint64_t)    atIndex:18];
-                        [encoder setBytes:&nb23        length:sizeof(uint64_t)    atIndex:19];
-                        [encoder setBytes:&nb31        length:sizeof(uint64_t)    atIndex:20];
-                        [encoder setBytes:&ne1         length:sizeof( int64_t)    atIndex:21];
-                        [encoder setBytes:&ne2         length:sizeof( int64_t)    atIndex:22];
-                        [encoder setBytes:&scale       length:sizeof(   float)    atIndex:23];
-                        [encoder setBytes:&max_bias    length:sizeof(   float)    atIndex:24];
-                        [encoder setBytes:&m0          length:sizeof(m0)          atIndex:25];
-                        [encoder setBytes:&m1          length:sizeof(m1)          atIndex:26];
-                        [encoder setBytes:&n_head_log2 length:sizeof(n_head_log2) atIndex:27];
-
-                        if (!use_vec_kernel) {
-                            // half8x8 kernel
-                            const int64_t nqptg = 8;  // queries per threadgroup    !! sync with kernel template arguments !!
-                            const int64_t ncpsg = 32; // cache values per simdgroup !! sync with kernel template arguments !!
-
-                            GGML_ASSERT(nqptg <= 32);
-                            GGML_ASSERT(nqptg  % 8  == 0);
-                            GGML_ASSERT(ncpsg  % 32 == 0);
-
-                            int64_t nsgmax = 2;
-
-                            while (true) {
-                                const size_t smem = nqptg*(ne00 + 2*nsgmax*(ncpsg + nqptg))*(sizeof(float)/2);
-                                if (smem > ctx->device.maxThreadgroupMemoryLength) {
-                                    break;
-                                }
-                                nsgmax *= 2;
-                            }
-                            nsgmax /= 2;
-
-                            // simdgroups per threadgroup (a.k.a. warps)
-                            const int64_t nsg = ne01 <= nqptg ? MAX(4, MIN(nsgmax, MIN(ne11/ncpsg, (int64_t) pipeline.maxTotalThreadsPerThreadgroup/32))) : 4;
-
-                            const size_t smem = nqptg*(ne00 + 2*nsg*(ncpsg + nqptg))*(sizeof(float)/2);
-
-                            //printf("smem: %zu, max: %zu\n", smem, ctx->device.maxThreadgroupMemoryLength);
-                            GGML_ASSERT(smem <= ctx->device.maxThreadgroupMemoryLength);
-
-                            [encoder setThreadgroupMemoryLength:GGML_PAD(smem, 16) atIndex:0];
-
-                            [encoder dispatchThreadgroups:MTLSizeMake((ne01 + nqptg - 1)/nqptg, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(32, nsg, 1)];
-                        } else {
-                            // half1x4 kernel
-                            const int64_t nqptg = 1;  // queries per threadgroup    !! sync with kernel template arguments !!
-                            const int64_t ncpsg = 32; // cache values per simdgroup !! sync with kernel template arguments !!
-
-                            GGML_ASSERT(nqptg <= 32);
-                            GGML_ASSERT(nqptg  % 1  == 0);
-                            GGML_ASSERT(ncpsg  % 32 == 0);
-
-                            // simdgroups per threadgroup (a.k.a. warps)
-                            const int64_t nsgt = MAX(2, MIN(ne11/ncpsg, (int64_t) pipeline.maxTotalThreadsPerThreadgroup/32));
-
-                            int64_t nsg = 1;
-                            while (nsg <= nsgt) {
-                                nsg *= 2;
-                            }
-                            nsg /= 2;
-
-                            const size_t smem = (nqptg*(ne00 + 2*nsg*(ncpsg + nqptg)) + nsg*ne00)*(sizeof(float)/2);
-
-                            //printf("smem: %zu, max: %zu\n", smem, ctx->device.maxThreadgroupMemoryLength);
-                            GGML_ASSERT(smem <= ctx->device.maxThreadgroupMemoryLength);
-                            [encoder setThreadgroupMemoryLength:GGML_PAD(smem, 16) atIndex:0];
-
-                            [encoder dispatchThreadgroups:MTLSizeMake((ne01 + nqptg - 1)/nqptg, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(32, nsg, 1)];
-                        }
-                    } break;
-                case GGML_OP_DUP:
-                case GGML_OP_CPY:
-                case GGML_OP_CONT:
-                    {
-                        GGML_ASSERT(ne00 % ggml_blck_size(src0->type) == 0);
-
-                        int nth = MIN(1024, ne00/ggml_blck_size(src0->type));
-
-                        id<MTLComputePipelineState> pipeline = nil;
-
-                        switch (src0t) {
-                            case GGML_TYPE_F32:
-                                {
-                                    GGML_ASSERT(ne0 % ggml_blck_size(dst->type) == 0);
-
-                                    switch (dstt) {
-                                        case GGML_TYPE_F16:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_F16].pipeline;  break;
-                                        case GGML_TYPE_F32:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_F32].pipeline;  break;
-                                        case GGML_TYPE_Q8_0:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q8_0].pipeline; break;
-                                        case GGML_TYPE_Q4_0:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_0].pipeline; break;
-                                        case GGML_TYPE_Q4_1:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_1].pipeline; break;
-                                        case GGML_TYPE_Q5_0:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_0].pipeline; break;
-                                        case GGML_TYPE_Q5_1:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_1].pipeline; break;
-                                        case GGML_TYPE_IQ4_NL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_IQ4_NL].pipeline; break;
-                                        default: GGML_ASSERT(false && "not implemented");
-                                    };
-                                } break;
-                            case GGML_TYPE_F16:
-                                {
-                                    switch (dstt) {
-                                        case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F16_F16].pipeline; break;
-                                        case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F16_F32].pipeline; break;
-                                        default: GGML_ASSERT(false && "not implemented");
-                                    };
-                                } break;
-                            default: GGML_ASSERT(false && "not implemented");
-                        }
-
-                        [encoder setComputePipelineState:pipeline];
-                        [encoder setBuffer:id_src0 offset:offs_src0        atIndex:0];
-                        [encoder setBuffer:id_dst  offset:offs_dst         atIndex:1];
-                        [encoder setBytes:&ne00    length:sizeof( int64_t) atIndex:2];
-                        [encoder setBytes:&ne01    length:sizeof( int64_t) atIndex:3];
-                        [encoder setBytes:&ne02    length:sizeof( int64_t) atIndex:4];
-                        [encoder setBytes:&ne03    length:sizeof( int64_t) atIndex:5];
-                        [encoder setBytes:&nb00    length:sizeof(uint64_t) atIndex:6];
-                        [encoder setBytes:&nb01    length:sizeof(uint64_t) atIndex:7];
-                        [encoder setBytes:&nb02    length:sizeof(uint64_t) atIndex:8];
-                        [encoder setBytes:&nb03    length:sizeof(uint64_t) atIndex:9];
-                        [encoder setBytes:&ne0     length:sizeof( int64_t) atIndex:10];
-                        [encoder setBytes:&ne1     length:sizeof( int64_t) atIndex:11];
-                        [encoder setBytes:&ne2     length:sizeof( int64_t) atIndex:12];
-                        [encoder setBytes:&ne3     length:sizeof( int64_t) atIndex:13];
-                        [encoder setBytes:&nb0     length:sizeof(uint64_t) atIndex:14];
-                        [encoder setBytes:&nb1     length:sizeof(uint64_t) atIndex:15];
-                        [encoder setBytes:&nb2     length:sizeof(uint64_t) atIndex:16];
-                        [encoder setBytes:&nb3     length:sizeof(uint64_t) atIndex:17];
-
-                        [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
-                    } break;
-                default:
-                    {
-                        GGML_METAL_LOG_ERROR("%s: error: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op));
-                        GGML_ASSERT(false);
-                    }
-            }
-
-            if (should_capture) {
-                [encoder popDebugGroup];
-            }
-        }
-
-        [encoder endEncoding];
-
-        [command_buffer commit];
-    });
-
-    // Wait for completion and check status of each command buffer
-    // needed to detect if the device ran out-of-memory for example (#1881)
-
-    for (int i = 0; i < n_cb; ++i) {
-        id<MTLCommandBuffer> command_buffer = command_buffers[i];
-        [command_buffer waitUntilCompleted];
-
-        MTLCommandBufferStatus status = [command_buffer status];
-        if (status != MTLCommandBufferStatusCompleted) {
-            GGML_METAL_LOG_INFO("%s: command buffer %d failed with status %lu\n", __func__, i, status);
-            if (status == MTLCommandBufferStatusError) {
-                NSString * error_code = [command_buffer error].localizedDescription;
-                GGML_METAL_LOG_INFO("error: %s\n", [error_code UTF8String]);
-            }
-
-            return GGML_STATUS_FAILED;
-        }
-    }
-
-    if (should_capture) {
-        [[MTLCaptureManager sharedCaptureManager] stopCapture];
-    }
-
-    }
-    return GGML_STATUS_SUCCESS;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-// backend interface
-
-// default buffer
-static id<MTLDevice> g_backend_device = nil;
-static int g_backend_device_ref_count = 0;
-
-static id<MTLDevice> ggml_backend_metal_get_device(void) {
-    if (g_backend_device == nil) {
-        g_backend_device = MTLCreateSystemDefaultDevice();
-    }
-
-    g_backend_device_ref_count++;
-
-    return g_backend_device;
-}
-
-static void ggml_backend_metal_free_device(void) {
-    assert(g_backend_device_ref_count > 0);
-
-    g_backend_device_ref_count--;
-
-    if (g_backend_device_ref_count == 0) {
-        [g_backend_device release];
-        g_backend_device = nil;
-    }
-}
-
-GGML_CALL static const char * ggml_backend_metal_buffer_get_name(ggml_backend_buffer_t buffer) {
-    return "Metal";
-
-    UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_metal_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    struct ggml_backend_metal_buffer_context * ctx = (struct ggml_backend_metal_buffer_context *)buffer->context;
-
-    for (int i = 0; i < ctx->n_buffers; i++) {
-        [ctx->buffers[i].metal release];
-    }
-    ggml_backend_metal_free_device();
-
-    if (ctx->owned) {
-#if TARGET_OS_OSX
-        vm_deallocate((vm_map_t)mach_task_self(), (vm_address_t)ctx->all_data, ctx->all_size);
-#else
-        free(ctx->all_data);
-#endif
-    }
-
-    free(ctx);
-}
-
-GGML_CALL static void * ggml_backend_metal_buffer_get_base(ggml_backend_buffer_t buffer) {
-    struct ggml_backend_metal_buffer_context * ctx = (struct ggml_backend_metal_buffer_context *)buffer->context;
-
-    return ctx->all_data;
-}
-
-GGML_CALL static void ggml_backend_metal_buffer_set_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    memcpy((char *)tensor->data + offset, data, size);
-
-    UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_metal_buffer_get_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    memcpy(data, (const char *)tensor->data + offset, size);
-
-    UNUSED(buffer);
-}
-
-GGML_CALL static bool ggml_backend_metal_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * src, struct ggml_tensor * dst) {
-    if (ggml_backend_buffer_is_host(src->buffer)) {
-        memcpy(dst->data, src->data, ggml_nbytes(src));
-        return true;
-    }
-    return false;
-
-    UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_metal_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
-    struct ggml_backend_metal_buffer_context * ctx = (struct ggml_backend_metal_buffer_context *)buffer->context;
-
-    memset(ctx->all_data, value, ctx->all_size);
-}
-
-static struct ggml_backend_buffer_i ggml_backend_metal_buffer_i = {
-    /* .get_name        = */ ggml_backend_metal_buffer_get_name,
-    /* .free_buffer     = */ ggml_backend_metal_buffer_free_buffer,
-    /* .get_base        = */ ggml_backend_metal_buffer_get_base,
-    /* .init_tensor     = */ NULL,
-    /* .set_tensor      = */ ggml_backend_metal_buffer_set_tensor,
-    /* .get_tensor      = */ ggml_backend_metal_buffer_get_tensor,
-    /* .cpy_tensor      = */ ggml_backend_metal_buffer_cpy_tensor,
-    /* .clear           = */ ggml_backend_metal_buffer_clear,
-    /* .reset           = */ NULL,
-};
-
-// default buffer type
-
-GGML_CALL static const char * ggml_backend_metal_buffer_type_get_name(ggml_backend_buffer_type_t buft) {
-    return "Metal";
-
-    UNUSED(buft);
-}
-
-static void ggml_backend_metal_log_allocated_size(id<MTLDevice> device, size_t size_aligned) {
-#ifndef GGML_METAL_NDEBUG
-#if TARGET_OS_OSX || (TARGET_OS_IOS && __clang_major__ >= 15)
-    if (@available(macOS 10.12, iOS 16.0, *)) {
-        GGML_METAL_LOG_INFO("%s: allocated buffer, size = %8.2f MiB, (%8.2f / %8.2f)",
-                __func__,
-                size_aligned / 1024.0 / 1024.0,
-                device.currentAllocatedSize / 1024.0 / 1024.0,
-                device.recommendedMaxWorkingSetSize / 1024.0 / 1024.0);
-
-        if (device.currentAllocatedSize > device.recommendedMaxWorkingSetSize) {
-            GGML_METAL_LOG_WARN("%s: warning: current allocated size is greater than the recommended max working set size\n", __func__);
-        } else {
-            GGML_METAL_LOG_INFO("\n");
-        }
-    } else {
-        GGML_METAL_LOG_INFO("%s: allocated buffer, size = %8.2f MiB, (%8.2f)\n",
-                __func__,
-                size_aligned / 1024.0 / 1024.0,
-                device.currentAllocatedSize / 1024.0 / 1024.0);
-    }
-#endif
-#endif
-    UNUSED(device);
-    UNUSED(size_aligned);
-}
-
-GGML_CALL static ggml_backend_buffer_t ggml_backend_metal_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    struct ggml_backend_metal_buffer_context * ctx = malloc(sizeof(struct ggml_backend_metal_buffer_context));
-
-    const size_t size_page = sysconf(_SC_PAGESIZE);
-
-    size_t size_aligned = size;
-    if ((size_aligned % size_page) != 0) {
-        size_aligned += (size_page - (size_aligned % size_page));
-    }
-
-    id<MTLDevice> device = ggml_backend_metal_get_device();
-
-    ctx->all_data = ggml_metal_host_malloc(size_aligned);
-    ctx->all_size = size_aligned;
-    ctx->owned = true;
-    ctx->n_buffers = 1;
-
-    if (ctx->all_data != NULL) {
-        ctx->buffers[0].data = ctx->all_data;
-        ctx->buffers[0].size = size;
-        ctx->buffers[0].metal = [device newBufferWithBytesNoCopy:ctx->all_data
-                        length:size_aligned
-                        options:MTLResourceStorageModeShared
-                        deallocator:nil];
-    }
-
-    if (ctx->all_data == NULL || ctx->buffers[0].metal == nil) {
-        GGML_METAL_LOG_ERROR("%s: error: failed to allocate buffer, size = %8.2f MiB\n", __func__, size_aligned / 1024.0 / 1024.0);
-        free(ctx);
-        ggml_backend_metal_free_device();
-        return NULL;
-    }
-
-    //ggml_backend_metal_log_allocated_size(device, size_aligned);
-
-    return ggml_backend_buffer_init(buft, ggml_backend_metal_buffer_i, ctx, size);
-}
-
-GGML_CALL static size_t ggml_backend_metal_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
-    return 32;
-    UNUSED(buft);
-}
-
-GGML_CALL static size_t ggml_backend_metal_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) {
-    id<MTLDevice> device = ggml_backend_metal_get_device();
-    size_t max_size = device.maxBufferLength;
-    ggml_backend_metal_free_device();
-
-    return max_size;
-
-    UNUSED(buft);
-}
-
-GGML_CALL static bool ggml_backend_metal_buffer_type_is_host(ggml_backend_buffer_type_t buft) {
-    return true;
-
-    UNUSED(buft);
-}
-
-GGML_CALL ggml_backend_buffer_type_t ggml_backend_metal_buffer_type(void) {
-    static struct ggml_backend_buffer_type ggml_backend_buffer_type_metal = {
-        /* .iface = */ {
-            /* .get_name         = */ ggml_backend_metal_buffer_type_get_name,
-            /* .alloc_buffer     = */ ggml_backend_metal_buffer_type_alloc_buffer,
-            /* .get_alignment    = */ ggml_backend_metal_buffer_type_get_alignment,
-            /* .get_max_size     = */ ggml_backend_metal_buffer_type_get_max_size,
-            /* .get_alloc_size   = */ NULL, // defaults to ggml_nbytes
-            /* .is_host          = */ ggml_backend_metal_buffer_type_is_host,
-        },
-        /* .context = */ NULL,
-    };
-
-    return &ggml_backend_buffer_type_metal;
-}
-
-// buffer from ptr
-
-GGML_CALL ggml_backend_buffer_t ggml_backend_metal_buffer_from_ptr(void * data, size_t size, size_t max_size) {
-    struct ggml_backend_metal_buffer_context * ctx = malloc(sizeof(struct ggml_backend_metal_buffer_context));
-
-    ctx->all_data = data;
-    ctx->all_size = size;
-    ctx->owned = false;
-    ctx->n_buffers = 0;
-
-    const size_t size_page = sysconf(_SC_PAGESIZE);
-
-    // page-align the data ptr
-    {
-        const uintptr_t offs = (uintptr_t) data % size_page;
-        data  = (void *) ((char *) data - offs);
-        size += offs;
-    }
-
-    size_t size_aligned = size;
-    if ((size_aligned % size_page) != 0) {
-        size_aligned += (size_page - (size_aligned % size_page));
-    }
-
-    id<MTLDevice> device = ggml_backend_metal_get_device();
-
-    // the buffer fits into the max buffer size allowed by the device
-    if (size_aligned <= device.maxBufferLength) {
-        ctx->buffers[ctx->n_buffers].data = data;
-        ctx->buffers[ctx->n_buffers].size = size;
-
-        ctx->buffers[ctx->n_buffers].metal = [device newBufferWithBytesNoCopy:data length:size_aligned options:MTLResourceStorageModeShared deallocator:nil];
-
-        if (ctx->buffers[ctx->n_buffers].metal == nil) {
-            GGML_METAL_LOG_ERROR("%s: error: failed to allocate buffer, size = %8.2f MiB\n", __func__, size_aligned / 1024.0 / 1024.0);
-            return false;
-        }
-
-        ggml_backend_metal_log_allocated_size(device, size_aligned);
-
-        ++ctx->n_buffers;
-    } else {
-        // this overlap between the views will guarantee that the tensor with the maximum size will fully fit into
-        // one of the views
-        const size_t size_ovlp = ((max_size + size_page - 1) / size_page + 1) * size_page; // round-up 2 pages just in case
-        const size_t size_step = device.maxBufferLength - size_ovlp;
-        const size_t size_view = device.maxBufferLength;
-
-        for (size_t i = 0; i < size; i += size_step) {
-            const size_t size_step_aligned = (i + size_view <= size) ? size_view : (size_aligned - i);
-
-            ctx->buffers[ctx->n_buffers].data = (void *) ((uint8_t *) data + i);
-            ctx->buffers[ctx->n_buffers].size = size_step_aligned;
-
-            ctx->buffers[ctx->n_buffers].metal = [device newBufferWithBytesNoCopy:(void *) ((uint8_t *) data + i) length:size_step_aligned options:MTLResourceStorageModeShared deallocator:nil];
-
-            if (ctx->buffers[ctx->n_buffers].metal == nil) {
-                GGML_METAL_LOG_ERROR("%s: error: failed to allocate buffer, size = %8.2f MiB\n", __func__, size_step_aligned / 1024.0 / 1024.0);
-                return false;
-            }
-
-            ggml_backend_metal_log_allocated_size(device, size_step_aligned);
-
-            if (i + size_step < size) {
-                GGML_METAL_LOG_INFO("\n");
-            }
-
-            ++ctx->n_buffers;
-        }
-    }
-
-    return ggml_backend_buffer_init(ggml_backend_metal_buffer_type(), ggml_backend_metal_buffer_i, ctx, size);
-}
-
-// backend
-
-GGML_CALL static const char * ggml_backend_metal_name(ggml_backend_t backend) {
-    return "Metal";
-
-    UNUSED(backend);
-}
-
-GGML_CALL static void ggml_backend_metal_free(ggml_backend_t backend) {
-    struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context;
-    ggml_metal_free(ctx);
-    free(backend);
-}
-
-GGML_CALL static ggml_backend_buffer_type_t ggml_backend_metal_get_default_buffer_type(ggml_backend_t backend) {
-    return ggml_backend_metal_buffer_type();
-
-    UNUSED(backend);
-}
-
-GGML_CALL static enum ggml_status ggml_backend_metal_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
-    struct ggml_metal_context * metal_ctx = (struct ggml_metal_context *)backend->context;
-
-    return ggml_metal_graph_compute(metal_ctx, cgraph);
-}
-
-GGML_CALL static bool ggml_backend_metal_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
-    struct ggml_metal_context * metal_ctx = (struct ggml_metal_context *)backend->context;
-
-    return ggml_metal_supports_op(metal_ctx, op);
-}
-
-GGML_CALL static bool ggml_backend_metal_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
-    return buft->iface.get_name == ggml_backend_metal_buffer_type_get_name;
-
-    UNUSED(backend);
-}
-
-static struct ggml_backend_i ggml_backend_metal_i = {
-    /* .get_name                = */ ggml_backend_metal_name,
-    /* .free                    = */ ggml_backend_metal_free,
-    /* .get_default_buffer_type = */ ggml_backend_metal_get_default_buffer_type,
-    /* .set_tensor_async        = */ NULL,
-    /* .get_tensor_async        = */ NULL,
-    /* .cpy_tensor_async        = */ NULL,
-    /* .synchronize             = */ NULL,
-    /* .graph_plan_create       = */ NULL,
-    /* .graph_plan_free         = */ NULL,
-    /* .graph_plan_update       = */ NULL,
-    /* .graph_plan_compute      = */ NULL,
-    /* .graph_compute           = */ ggml_backend_metal_graph_compute,
-    /* .supports_op             = */ ggml_backend_metal_supports_op,
-    /* .supports_buft           = */ ggml_backend_metal_supports_buft,
-    /* .offload_op              = */ NULL,
-    /* .event_new               = */ NULL,
-    /* .event_free              = */ NULL,
-    /* .event_record            = */ NULL,
-    /* .event_wait              = */ NULL,
-    /* .event_synchronize       = */ NULL,
-};
-
-void ggml_backend_metal_log_set_callback(ggml_log_callback log_callback, void * user_data) {
-    ggml_metal_log_callback  = log_callback;
-    ggml_metal_log_user_data = user_data;
-}
-
-static ggml_guid_t ggml_backend_metal_guid(void) {
-    static ggml_guid guid = { 0x81, 0xa1, 0x8b, 0x1e, 0x71, 0xec, 0x79, 0xed, 0x2b, 0x85, 0xdc, 0x8a, 0x61, 0x98, 0x30, 0xe6 };
-    return &guid;
-}
-
-ggml_backend_t ggml_backend_metal_init(void) {
-    struct ggml_metal_context * ctx = ggml_metal_init(GGML_DEFAULT_N_THREADS);
-
-    if (ctx == NULL) {
-        return NULL;
-    }
-
-    ggml_backend_t metal_backend = malloc(sizeof(struct ggml_backend));
-
-    *metal_backend = (struct ggml_backend) {
-        /* .guid      = */ ggml_backend_metal_guid(),
-        /* .interface = */ ggml_backend_metal_i,
-        /* .context   = */ ctx,
-    };
-
-    return metal_backend;
-}
-
-bool ggml_backend_is_metal(ggml_backend_t backend) {
-    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_metal_guid());
-}
-
-void ggml_backend_metal_set_n_cb(ggml_backend_t backend, int n_cb) {
-    GGML_ASSERT(ggml_backend_is_metal(backend));
-
-    struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context;
-
-    ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS);
-}
-
-bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family) {
-    GGML_ASSERT(ggml_backend_is_metal(backend));
-
-    struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context;
-
-    return [ctx->device supportsFamily:(MTLGPUFamilyApple1 + family - 1)];
-}
-
-void ggml_backend_metal_capture_next_compute(ggml_backend_t backend) {
-    GGML_ASSERT(ggml_backend_is_metal(backend));
-
-    struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context;
-    ctx->should_capture_next_compute = true;
-}
-
-GGML_CALL ggml_backend_t ggml_backend_reg_metal_init(const char * params, void * user_data); // silence warning
-
-GGML_CALL ggml_backend_t ggml_backend_reg_metal_init(const char * params, void * user_data) {
-    return ggml_backend_metal_init();
-
-    GGML_UNUSED(params);
-    GGML_UNUSED(user_data);
-}
diff --git a/ggml-metal.metal b/ggml-metal.metal
deleted file mode 100644 (file)
index e2796fd..0000000
+++ /dev/null
@@ -1,6540 +0,0 @@
-#define GGML_COMMON_DECL_METAL
-#define GGML_COMMON_IMPL_METAL
-#include "ggml-common.h"
-
-#include <metal_stdlib>
-
-using namespace metal;
-
-#define MAX(x, y) ((x) > (y) ? (x) : (y))
-#define MIN(x, y) ((x) < (y) ? (x) : (y))
-#define SWAP(x, y) { auto tmp = (x); (x) = (y); (y) = tmp; }
-
-#define N_SIMDWIDTH 32 // assuming SIMD group size is 32
-
-enum ggml_sort_order {
-    GGML_SORT_ORDER_ASC,
-    GGML_SORT_ORDER_DESC,
-};
-
-// general-purpose kernel for addition, multiplication and division of two tensors
-// pros: works for non-contiguous tensors, supports broadcast across all dims
-// cons: not very efficient
-kernel void kernel_add(
-        device const char * src0,
-        device const char * src1,
-        device       char * dst,
-        constant  int64_t & ne00,
-        constant  int64_t & ne01,
-        constant  int64_t & ne02,
-        constant  int64_t & ne03,
-        constant uint64_t & nb00,
-        constant uint64_t & nb01,
-        constant uint64_t & nb02,
-        constant uint64_t & nb03,
-        constant  int64_t & ne10,
-        constant  int64_t & ne11,
-        constant  int64_t & ne12,
-        constant  int64_t & ne13,
-        constant uint64_t & nb10,
-        constant uint64_t & nb11,
-        constant uint64_t & nb12,
-        constant uint64_t & nb13,
-        constant  int64_t & ne0,
-        constant  int64_t & ne1,
-        constant  int64_t & ne2,
-        constant  int64_t & ne3,
-        constant uint64_t & nb0,
-        constant uint64_t & nb1,
-        constant uint64_t & nb2,
-        constant uint64_t & nb3,
-        constant  int64_t & offs,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig.z;
-    const int64_t i02 = tgpig.y;
-    const int64_t i01 = tgpig.x;
-
-    const int64_t i13 = i03 % ne13;
-    const int64_t i12 = i02 % ne12;
-    const int64_t i11 = i01 % ne11;
-
-    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01 + offs;
-    device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11;
-    device       char * dst_ptr  = dst  + i03*nb3  + i02*nb2  + i01*nb1  + offs;
-
-    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
-        const int i10 = i0 % ne10;
-        *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) + *((device float *)(src1_ptr + i10*nb10));
-    }
-}
-
-kernel void kernel_mul(
-        device const char * src0,
-        device const char * src1,
-        device       char * dst,
-        constant  int64_t & ne00,
-        constant  int64_t & ne01,
-        constant  int64_t & ne02,
-        constant  int64_t & ne03,
-        constant uint64_t & nb00,
-        constant uint64_t & nb01,
-        constant uint64_t & nb02,
-        constant uint64_t & nb03,
-        constant  int64_t & ne10,
-        constant  int64_t & ne11,
-        constant  int64_t & ne12,
-        constant  int64_t & ne13,
-        constant uint64_t & nb10,
-        constant uint64_t & nb11,
-        constant uint64_t & nb12,
-        constant uint64_t & nb13,
-        constant  int64_t & ne0,
-        constant  int64_t & ne1,
-        constant  int64_t & ne2,
-        constant  int64_t & ne3,
-        constant uint64_t & nb0,
-        constant uint64_t & nb1,
-        constant uint64_t & nb2,
-        constant uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig.z;
-    const int64_t i02 = tgpig.y;
-    const int64_t i01 = tgpig.x;
-
-    const int64_t i13 = i03 % ne13;
-    const int64_t i12 = i02 % ne12;
-    const int64_t i11 = i01 % ne11;
-
-    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01;
-    device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11;
-    device       char * dst_ptr  = dst  + i03*nb3  + i02*nb2  + i01*nb1;
-
-    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
-        const int i10 = i0 % ne10;
-        *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) * *((device float *)(src1_ptr + i10*nb10));
-    }
-}
-
-kernel void kernel_div(
-        device const char * src0,
-        device const char * src1,
-        device       char * dst,
-        constant  int64_t & ne00,
-        constant  int64_t & ne01,
-        constant  int64_t & ne02,
-        constant  int64_t & ne03,
-        constant uint64_t & nb00,
-        constant uint64_t & nb01,
-        constant uint64_t & nb02,
-        constant uint64_t & nb03,
-        constant  int64_t & ne10,
-        constant  int64_t & ne11,
-        constant  int64_t & ne12,
-        constant  int64_t & ne13,
-        constant uint64_t & nb10,
-        constant uint64_t & nb11,
-        constant uint64_t & nb12,
-        constant uint64_t & nb13,
-        constant  int64_t & ne0,
-        constant  int64_t & ne1,
-        constant  int64_t & ne2,
-        constant  int64_t & ne3,
-        constant uint64_t & nb0,
-        constant uint64_t & nb1,
-        constant uint64_t & nb2,
-        constant uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig.z;
-    const int64_t i02 = tgpig.y;
-    const int64_t i01 = tgpig.x;
-
-    const int64_t i13 = i03 % ne13;
-    const int64_t i12 = i02 % ne12;
-    const int64_t i11 = i01 % ne11;
-
-    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01;
-    device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11;
-    device       char * dst_ptr  = dst  + i03*nb3  + i02*nb2  + i01*nb1;
-
-    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
-        const int i10 = i0 % ne10;
-        *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) / *((device float *)(src1_ptr + i10*nb10));
-    }
-}
-
-template<typename T>
-kernel void kernel_repeat(
-        device const char * src0,
-        device       char * dst,
-        constant  int64_t & ne00,
-        constant  int64_t & ne01,
-        constant  int64_t & ne02,
-        constant  int64_t & ne03,
-        constant uint64_t & nb00,
-        constant uint64_t & nb01,
-        constant uint64_t & nb02,
-        constant uint64_t & nb03,
-        constant  int64_t & ne0,
-        constant  int64_t & ne1,
-        constant  int64_t & ne2,
-        constant  int64_t & ne3,
-        constant uint64_t & nb0,
-        constant uint64_t & nb1,
-        constant uint64_t & nb2,
-        constant uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i3 = tgpig.z;
-    const int64_t i2 = tgpig.y;
-    const int64_t i1 = tgpig.x;
-
-    const int64_t i03 = i3 % ne03;
-    const int64_t i02 = i2 % ne02;
-    const int64_t i01 = i1 % ne01;
-
-    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01;
-    device       char * dst_ptr  = dst  +  i3*nb3  +  i2*nb2  +  i1*nb1 ;
-
-    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
-        const int i00 = i0 % ne00;
-        *((device T *)(dst_ptr + i0*nb0)) = *((device T *)(src0_ptr + i00*nb00));
-    }
-}
-
-typedef decltype(kernel_repeat<float>) kernel_repeat_t;
-
-template [[host_name("kernel_repeat_f32")]] kernel kernel_repeat_t kernel_repeat<float>;
-template [[host_name("kernel_repeat_f16")]] kernel kernel_repeat_t kernel_repeat<half>;
-template [[host_name("kernel_repeat_i32")]] kernel kernel_repeat_t kernel_repeat<int>;
-template [[host_name("kernel_repeat_i16")]] kernel kernel_repeat_t kernel_repeat<short>;
-
-// assumption: src1 is a row
-// broadcast src1 into src0
-kernel void kernel_add_row(
-        device const float4 * src0,
-        device const float4 * src1,
-        device       float4 * dst,
-        constant   uint64_t & nb [[buffer(28)]],
-        uint tpig[[thread_position_in_grid]]) {
-    dst[tpig] = src0[tpig] + src1[tpig % nb];
-}
-
-kernel void kernel_mul_row(
-        device const float4 * src0,
-        device const float4 * src1,
-        device       float4 * dst,
-        constant   uint64_t & nb  [[buffer(28)]],
-        uint tpig[[thread_position_in_grid]]) {
-    dst[tpig] = src0[tpig] * src1[tpig % nb];
-}
-
-kernel void kernel_div_row(
-        device const float4 * src0,
-        device const float4 * src1,
-        device       float4 * dst,
-        constant   uint64_t & nb  [[buffer(28)]],
-        uint tpig[[thread_position_in_grid]]) {
-    dst[tpig] = src0[tpig] / src1[tpig % nb];
-}
-
-kernel void kernel_scale(
-        device const float * src0,
-        device       float * dst,
-        constant     float & scale,
-        uint tpig[[thread_position_in_grid]]) {
-    dst[tpig] = src0[tpig] * scale;
-}
-
-kernel void kernel_scale_4(
-        device const float4 * src0,
-        device       float4 * dst,
-        constant     float  & scale,
-        uint tpig[[thread_position_in_grid]]) {
-    dst[tpig] = src0[tpig] * scale;
-}
-
-kernel void kernel_clamp(
-        device const float * src0,
-        device       float * dst,
-        constant     float & min,
-        constant     float & max,
-        uint tpig[[thread_position_in_grid]]) {
-    dst[tpig] = src0[tpig] < min ? min : (src0[tpig] > max ? max : src0[tpig]);
-}
-
-kernel void kernel_relu(
-        device const float * src0,
-        device       float * dst,
-        uint tpig[[thread_position_in_grid]]) {
-    dst[tpig] = max(0.0f, src0[tpig]);
-}
-
-kernel void kernel_sigmoid(
-        device const float * src0,
-        device       float * dst,
-        uint tpig[[thread_position_in_grid]]) {
-    dst[tpig] = 1.0f / (1.0f + exp(-src0[tpig]));
-}
-
-kernel void kernel_tanh(
-        device const float * src0,
-        device       float * dst,
-        uint tpig[[thread_position_in_grid]]) {
-    device const float & x = src0[tpig];
-    dst[tpig] = precise::tanh(x);
-}
-
-constant float GELU_COEF_A     = 0.044715f;
-constant float GELU_QUICK_COEF = -1.702f;
-constant float SQRT_2_OVER_PI  = 0.79788456080286535587989211986876f;
-
-kernel void kernel_gelu(
-    device const float * src0,
-    device       float * dst,
-    uint tpig[[thread_position_in_grid]]) {
-    device const float & x = src0[tpig];
-
-    dst[tpig] = 0.5f*x*(1.0f + precise::tanh(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x)));
-}
-
-kernel void kernel_gelu_4(
-    device const float4 * src0,
-    device       float4 * dst,
-    uint tpig[[thread_position_in_grid]]) {
-    device const float4 & x = src0[tpig];
-
-    // BEWARE !!!
-    // Simply using "tanh" instead of "precise::tanh" will sometimes results in NaNs!
-    // This was observed with Falcon 7B and 40B models
-    //
-    dst[tpig] = 0.5f*x*(1.0f + precise::tanh(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x)));
-}
-
-kernel void kernel_gelu_quick(
-    device const float * src0,
-    device       float * dst,
-    uint tpig[[thread_position_in_grid]]) {
-    device const float & x = src0[tpig];
-
-    dst[tpig] = x*(1.0f/(1.0f+exp(GELU_QUICK_COEF*x)));
-}
-
-kernel void kernel_gelu_quick_4(
-    device const float4 * src0,
-    device       float4 * dst,
-    uint tpig[[thread_position_in_grid]]) {
-    device const float4 & x = src0[tpig];
-
-    dst[tpig] = x*(1.0f/(1.0f+exp(GELU_QUICK_COEF*x)));
-}
-
-kernel void kernel_silu(
-        device const float * src0,
-        device       float * dst,
-        uint tpig[[thread_position_in_grid]]) {
-    device const float & x = src0[tpig];
-    dst[tpig] = x / (1.0f + exp(-x));
-}
-
-kernel void kernel_silu_4(
-        device const float4 * src0,
-        device       float4 * dst,
-        uint tpig[[thread_position_in_grid]]) {
-    device const float4 & x = src0[tpig];
-    dst[tpig] = x / (1.0f + exp(-x));
-}
-
-kernel void kernel_sqr(
-        device const float * src0,
-        device       float * dst,
-        uint tpig[[thread_position_in_grid]]) {
-    dst[tpig] = src0[tpig] * src0[tpig];
-}
-
-kernel void kernel_sum_rows(
-        device const float * src0,
-        device       float * dst,
-        constant  int64_t & ne00,
-        constant  int64_t & ne01,
-        constant  int64_t & ne02,
-        constant  int64_t & ne03,
-        constant uint64_t & nb00,
-        constant uint64_t & nb01,
-        constant uint64_t & nb02,
-        constant uint64_t & nb03,
-        constant  int64_t & ne10,
-        constant  int64_t & ne11,
-        constant  int64_t & ne12,
-        constant  int64_t & ne13,
-        constant uint64_t & nb10,
-        constant uint64_t & nb11,
-        constant uint64_t & nb12,
-        constant uint64_t & nb13,
-        constant  int64_t & ne0,
-        constant  int64_t & ne1,
-        constant  int64_t & ne2,
-        constant  int64_t & ne3,
-        constant uint64_t & nb0,
-        constant uint64_t & nb1,
-        constant uint64_t & nb2,
-        constant uint64_t & nb3,
-        uint3 tpig[[thread_position_in_grid]]) {
-    int64_t i3 = tpig.z;
-    int64_t i2 = tpig.y;
-    int64_t i1 = tpig.x;
-
-    if (i3 >= ne03 || i2 >= ne02 || i1 >= ne01) {
-        return;
-    }
-
-    device const float * src_row = (device const float *) ((device const char *) src0 + i1*nb01 + i2*nb02 + i3*nb03);
-    device       float * dst_row = (device       float *) ((device       char *) dst  + i1*nb1  + i2*nb2  + i3*nb3);
-
-    float row_sum = 0;
-
-    for (int64_t i0 = 0; i0 < ne00; i0++) {
-        row_sum += src_row[i0];
-    }
-
-    dst_row[0] = row_sum;
-}
-
-template<typename T>
-kernel void kernel_soft_max(
-        device const  char * src0,
-        device const  char * src1,
-        device        char * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant     float & scale,
-        constant     float & max_bias,
-        constant     float & m0,
-        constant     float & m1,
-        constant  uint32_t & n_head_log2,
-        threadgroup  float * buf [[threadgroup(0)]],
-        uint  tgpig[[threadgroup_position_in_grid]],
-        uint  tpitg[[thread_position_in_threadgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint    ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = (tgpig) / (ne02*ne01);
-    const int64_t i02 = (tgpig - i03*ne02*ne01) / ne01;
-    const int64_t i01 = (tgpig - i03*ne02*ne01 - i02*ne01);
-
-    device const float * psrc0 = (device const float *) src0 + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00);
-    device const     T * pmask = src1 != src0 ? (device const    T *) src1         + i01*ne00 : nullptr;
-    device       float * pdst  = (device       float *) dst  + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00);
-
-    float slope = 1.0f;
-
-    // ALiBi
-    if (max_bias > 0.0f) {
-        const int64_t h = i02;
-
-        const float base = h < n_head_log2 ? m0 : m1;
-        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
-
-        slope = pow(base, exp);
-    }
-
-    // parallel max
-    float lmax = -INFINITY;
-
-    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
-        lmax = MAX(lmax, psrc0[i00]*scale + (pmask ? slope*pmask[i00] : 0.0f));
-    }
-
-    // find the max value in the block
-    float max_val = simd_max(lmax);
-    if (ntg > N_SIMDWIDTH) {
-        if (sgitg == 0) {
-            buf[tiisg] = -INFINITY;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        if (tiisg == 0) {
-            buf[sgitg] = max_val;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        max_val = buf[tiisg];
-        max_val = simd_max(max_val);
-    }
-
-    // parallel sum
-    float lsum = 0.0f;
-    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
-        const float exp_psrc0 = exp((psrc0[i00]*scale + (pmask ? slope*pmask[i00] : 0.0f)) - max_val);
-        lsum += exp_psrc0;
-        pdst[i00] = exp_psrc0;
-    }
-
-    // This barrier fixes a failing test
-    // ref: https://github.com/ggerganov/ggml/pull/621#discussion_r1425156335
-    threadgroup_barrier(mem_flags::mem_none);
-
-    float sum = simd_sum(lsum);
-
-    if (ntg > N_SIMDWIDTH) {
-        if (sgitg == 0) {
-            buf[tiisg] = 0.0f;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        if (tiisg == 0) {
-            buf[sgitg] = sum;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        sum = buf[tiisg];
-        sum = simd_sum(sum);
-    }
-
-    const float inv_sum = 1.0f/sum;
-
-    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
-        pdst[i00] *= inv_sum;
-    }
-}
-
-template<typename T>
-kernel void kernel_soft_max_4(
-        device const  char * src0,
-        device const  char * src1,
-        device        char * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant     float & scale,
-        constant     float & max_bias,
-        constant     float & m0,
-        constant     float & m1,
-        constant  uint32_t & n_head_log2,
-        threadgroup  float * buf [[threadgroup(0)]],
-        uint  tgpig[[threadgroup_position_in_grid]],
-        uint  tpitg[[thread_position_in_threadgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint    ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = (tgpig) / (ne02*ne01);
-    const int64_t i02 = (tgpig - i03*ne02*ne01) / ne01;
-    const int64_t i01 = (tgpig - i03*ne02*ne01 - i02*ne01);
-
-    device const float4 * psrc4 = (device const float4 *) src0 + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00)/4;
-    device const      T * pmask = src1 != src0 ? (device const     T *) src1         + i01*ne00/4 : nullptr;
-    device       float4 * pdst4 = (device       float4 *) dst  + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00)/4;
-
-    float slope = 1.0f;
-
-    if (max_bias > 0.0f) {
-        const int64_t h = i02;
-
-        const float base = h < n_head_log2 ? m0 : m1;
-        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
-
-        slope = pow(base, exp);
-    }
-
-    // parallel max
-    float4 lmax4 = -INFINITY;
-
-    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
-        lmax4 = fmax(lmax4, psrc4[i00]*scale + (float4)((pmask ? slope*pmask[i00] : 0.0f)));
-    }
-
-    const float lmax = MAX(MAX(lmax4[0], lmax4[1]), MAX(lmax4[2], lmax4[3]));
-
-    float max_val = simd_max(lmax);
-    if (ntg > N_SIMDWIDTH) {
-        if (sgitg == 0) {
-            buf[tiisg] = -INFINITY;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        if (tiisg == 0) {
-            buf[sgitg] = max_val;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        max_val = buf[tiisg];
-        max_val = simd_max(max_val);
-    }
-
-    // parallel sum
-    float4 lsum4 = 0.0f;
-    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
-        const float4 exp_psrc4 = exp((psrc4[i00]*scale + (float4)((pmask ? slope*pmask[i00] : 0.0f))) - max_val);
-        lsum4 += exp_psrc4;
-        pdst4[i00] = exp_psrc4;
-    }
-
-    const float lsum = lsum4[0] + lsum4[1] + lsum4[2] + lsum4[3];
-
-    // This barrier fixes a failing test
-    // ref: https://github.com/ggerganov/ggml/pull/621#discussion_r1425156335
-    threadgroup_barrier(mem_flags::mem_none);
-
-    float sum = simd_sum(lsum);
-
-    if (ntg > N_SIMDWIDTH) {
-        if (sgitg == 0) {
-            buf[tiisg] = 0.0f;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        if (tiisg == 0) {
-            buf[sgitg] = sum;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        sum = buf[tiisg];
-        sum = simd_sum(sum);
-    }
-
-    const float inv_sum = 1.0f/sum;
-
-    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
-        pdst4[i00] *= inv_sum;
-    }
-}
-
-typedef decltype(kernel_soft_max<float>)    kernel_soft_max_t;
-typedef decltype(kernel_soft_max_4<float4>) kernel_soft_max_4_t;
-
-template [[host_name("kernel_soft_max_f16")]]   kernel kernel_soft_max_t   kernel_soft_max<half>;
-template [[host_name("kernel_soft_max_f32")]]   kernel kernel_soft_max_t   kernel_soft_max<float>;
-template [[host_name("kernel_soft_max_f16_4")]] kernel kernel_soft_max_4_t kernel_soft_max_4<half4>;
-template [[host_name("kernel_soft_max_f32_4")]] kernel kernel_soft_max_4_t kernel_soft_max_4<float4>;
-
-kernel void kernel_diag_mask_inf(
-        device const float * src0,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant       int & n_past,
-        uint3 tpig[[thread_position_in_grid]]) {
-    const int64_t i02 = tpig[2];
-    const int64_t i01 = tpig[1];
-    const int64_t i00 = tpig[0];
-
-    if (i00 > n_past + i01) {
-        dst[i02*ne01*ne00 + i01*ne00 + i00] = -INFINITY;
-    } else {
-        dst[i02*ne01*ne00 + i01*ne00 + i00] = src0[i02*ne01*ne00 + i01*ne00 + i00];
-    }
-}
-
-kernel void kernel_diag_mask_inf_8(
-        device const float4 * src0,
-        device       float4 * dst,
-        constant    int64_t & ne00,
-        constant    int64_t & ne01,
-        constant        int & n_past,
-        uint3 tpig[[thread_position_in_grid]]) {
-
-    const int64_t i = 2*tpig[0];
-
-    dst[i+0] = src0[i+0];
-    dst[i+1] = src0[i+1];
-    int64_t i4 = 4*i;
-    const int64_t i02 = i4/(ne00*ne01); i4 -= i02*ne00*ne01;
-    const int64_t i01 = i4/(ne00);      i4 -= i01*ne00;
-    const int64_t i00 = i4;
-    for (int k = 3; k >= 0; --k) {
-        if (i00 + 4 + k <= n_past + i01) {
-            break;
-        }
-        dst[i+1][k] = -INFINITY;
-        if (i00 + k > n_past + i01) {
-            dst[i][k] = -INFINITY;
-        }
-    }
-}
-
-kernel void kernel_norm(
-        device const  void * src0,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant  uint64_t & nb01,
-        constant     float & eps,
-        threadgroup float  * sum [[threadgroup(0)]],
-        uint tgpig[[threadgroup_position_in_grid]],
-        uint tpitg[[thread_position_in_threadgroup]],
-        uint   ntg[[threads_per_threadgroup]]) {
-    device const float * x = (device const float *) ((device const char *) src0 + tgpig*nb01);
-    // MEAN
-    // parallel sum
-    sum[tpitg] = 0.0f;
-    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
-        sum[tpitg] += x[i00];
-    }
-    // reduce
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    for (uint i = ntg/2; i > 0; i /= 2) {
-        if (tpitg < i) {
-            sum[tpitg] += sum[tpitg + i];
-        }
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-    }
-    const float mean  = sum[0] / ne00;
-
-    // recenter and VARIANCE
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    device float * y = dst + tgpig*ne00;
-    sum[tpitg] = 0.0f;
-    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
-        y[i00] = x[i00] - mean;
-        sum[tpitg] += y[i00] * y[i00];
-    }
-
-    // reduce
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    for (uint i = ntg/2; i > 0; i /= 2) {
-        if (tpitg < i) {
-            sum[tpitg] += sum[tpitg + i];
-        }
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-    }
-    const float variance = sum[0] / ne00;
-
-    const float scale = 1.0f/sqrt(variance + eps);
-    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
-        y[i00] = y[i00] * scale;
-    }
-}
-
-kernel void kernel_rms_norm(
-        device const  void * src0,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant  uint64_t & nb01,
-        constant     float & eps,
-        threadgroup float  * buf [[threadgroup(0)]],
-        uint tgpig[[threadgroup_position_in_grid]],
-        uint tpitg[[thread_position_in_threadgroup]],
-        uint sgitg[[simdgroup_index_in_threadgroup]],
-        uint tiisg[[thread_index_in_simdgroup]],
-        uint   ntg[[threads_per_threadgroup]]) {
-    device const float4 * x = (device const float4 *) ((device const char *) src0 + tgpig*nb01);
-
-    float4 sumf = 0;
-    float all_sum = 0;
-
-    // parallel sum
-    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
-        sumf += x[i00] * x[i00];
-    }
-    all_sum = sumf[0] + sumf[1] + sumf[2] + sumf[3];
-    all_sum = simd_sum(all_sum);
-    if (ntg > N_SIMDWIDTH) {
-        if (sgitg == 0) {
-            buf[tiisg] = 0.0f;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        if (tiisg == 0) {
-            buf[sgitg] = all_sum;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        all_sum = buf[tiisg];
-        all_sum = simd_sum(all_sum);
-    }
-
-    const float mean  = all_sum/ne00;
-    const float scale = 1.0f/sqrt(mean + eps);
-
-    device float4 * y = (device float4 *) (dst + tgpig*ne00);
-    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
-        y[i00] = x[i00] * scale;
-    }
-}
-
-kernel void kernel_group_norm(
-        device const float * src0,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int32_t & n_groups,
-        constant     float & eps,
-        threadgroup float  * buf [[threadgroup(0)]],
-        uint tgpig[[threadgroup_position_in_grid]],
-        uint tpitg[[thread_position_in_threadgroup]],
-        uint sgitg[[simdgroup_index_in_threadgroup]],
-        uint tiisg[[thread_index_in_simdgroup]],
-        uint   ntg[[threads_per_threadgroup]]) {
-    const int64_t ne = ne00*ne01*ne02;
-    const int64_t gs = ne00*ne01*((ne02 + n_groups - 1) / n_groups);
-
-    int start = tgpig * gs;
-    int end   = start + gs;
-
-    start += tpitg;
-
-    if (end >= ne) {
-        end = ne;
-    }
-
-    float tmp = 0.0f; // partial sum for thread in warp
-
-    for (int j = start; j < end; j += ntg) {
-        tmp += src0[j];
-    }
-
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-    tmp = simd_sum(tmp);
-    if (ntg > N_SIMDWIDTH) {
-        if (sgitg == 0) {
-            buf[tiisg] = 0.0f;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        if (tiisg == 0) {
-            buf[sgitg] = tmp;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        tmp = buf[tiisg];
-        tmp = simd_sum(tmp);
-    }
-
-    const float mean = tmp / gs;
-    tmp = 0.0f;
-
-    for (int j = start; j < end; j += ntg) {
-        float xi = src0[j] - mean;
-        dst[j] = xi;
-        tmp += xi * xi;
-    }
-
-    tmp = simd_sum(tmp);
-    if (ntg > N_SIMDWIDTH) {
-        if (sgitg == 0) {
-            buf[tiisg] = 0.0f;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        if (tiisg == 0) {
-            buf[sgitg] = tmp;
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        tmp = buf[tiisg];
-        tmp = simd_sum(tmp);
-    }
-
-    const float variance = tmp / gs;
-    const float scale = 1.0f/sqrt(variance + eps);
-    for (int j = start; j < end; j += ntg) {
-        dst[j] *= scale;
-    }
-}
-
-// function for calculate inner product between half a q4_0 block and 16 floats (yl), sumy is SUM(yl[i])
-// il indicates where the q4 quants begin (0 or QK4_0/4)
-// we assume that the yl's have been multiplied with the appropriate scale factor
-// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
-inline float block_q_n_dot_y(device const block_q4_0 * qb_curr, float sumy, thread float * yl, int il) {
-    float d = qb_curr->d;
-
-    float2 acc = 0.f;
-
-    device const uint16_t * qs = ((device const uint16_t *)qb_curr + 1 + il/2);
-
-    for (int i = 0; i < 8; i+=2) {
-        acc[0] += yl[i + 0] * (qs[i / 2] & 0x000F)
-                + yl[i + 1] * (qs[i / 2] & 0x0F00);
-        acc[1] += yl[i + 8] * (qs[i / 2] & 0x00F0)
-                + yl[i + 9] * (qs[i / 2] & 0xF000);
-    }
-    return d * (sumy * -8.f + acc[0] + acc[1]);
-}
-
-// function for calculate inner product between half a q4_1 block and 16 floats (yl), sumy is SUM(yl[i])
-// il indicates where the q4 quants begin (0 or QK4_0/4)
-// we assume that the yl's have been multiplied with the appropriate scale factor
-// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
-inline float block_q_n_dot_y(device const block_q4_1 * qb_curr, float sumy, thread float * yl, int il) {
-    float d = qb_curr->d;
-    float m = qb_curr->m;
-
-    float2 acc = 0.f;
-
-    device const uint16_t * qs = ((device const uint16_t *)qb_curr + 2 + il/2);
-
-    for (int i = 0; i < 8; i+=2) {
-        acc[0] += yl[i + 0] * (qs[i / 2] & 0x000F)
-                + yl[i + 1] * (qs[i / 2] & 0x0F00);
-        acc[1] += yl[i + 8] * (qs[i / 2] & 0x00F0)
-                + yl[i + 9] * (qs[i / 2] & 0xF000);
-    }
-    return d * (acc[0] + acc[1]) + sumy * m;
-}
-
-// function for calculate inner product between half a q5_0 block and 16 floats (yl), sumy is SUM(yl[i])
-// il indicates where the q5 quants begin (0 or QK5_0/4)
-// we assume that the yl's have been multiplied with the appropriate scale factor
-// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
-inline float block_q_n_dot_y(device const block_q5_0 * qb_curr, float sumy, thread float * yl, int il) {
-    float d = qb_curr->d;
-
-    float2 acc = 0.f;
-
-    device const uint16_t * qs =  ((device const uint16_t *)qb_curr + 3 + il/2);
-           const uint32_t   qh = *((device const uint32_t *)qb_curr->qh);
-
-    for (int i = 0; i < 8; i+=2) {
-        acc[0] += yl[i + 0] * ((qs[i / 2] & 0x000F) | ((qh >> (i+0+il        ) << 4 ) & 0x00010))
-                + yl[i + 1] * ((qs[i / 2] & 0x0F00) | ((qh >> (i+1+il        ) << 12) & 0x01000));
-        acc[1] += yl[i + 8] * ((qs[i / 2] & 0x00F0) | ((qh >> (i+0+il+QK5_0/2) << 8 ) & 0x00100))
-                + yl[i + 9] * ((qs[i / 2] & 0xF000) | ((qh >> (i+1+il+QK5_0/2) << 16) & 0x10000));
-    }
-    return d * (sumy * -16.f + acc[0] + acc[1]);
-}
-
-// function for calculate inner product between half a q5_1 block and 16 floats (yl), sumy is SUM(yl[i])
-// il indicates where the q5 quants begin (0 or QK5_1/4)
-// we assume that the yl's have been multiplied with the appropriate scale factor
-// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
-inline float block_q_n_dot_y(device const block_q5_1 * qb_curr, float sumy, thread float * yl, int il) {
-    float d = qb_curr->d;
-    float m = qb_curr->m;
-
-    float2 acc = 0.f;
-
-    device const uint16_t * qs =  ((device const uint16_t *)qb_curr + 4 + il/2);
-           const uint32_t   qh = *((device const uint32_t *)qb_curr->qh);
-
-    for (int i = 0; i < 8; i+=2) {
-        acc[0] += yl[i + 0] * ((qs[i / 2] & 0x000F) | ((qh >> (i+0+il        ) << 4 ) & 0x00010))
-                + yl[i + 1] * ((qs[i / 2] & 0x0F00) | ((qh >> (i+1+il        ) << 12) & 0x01000));
-        acc[1] += yl[i + 8] * ((qs[i / 2] & 0x00F0) | ((qh >> (i+0+il+QK5_0/2) << 8 ) & 0x00100))
-                + yl[i + 9] * ((qs[i / 2] & 0xF000) | ((qh >> (i+1+il+QK5_0/2) << 16) & 0x10000));
-    }
-    return d * (acc[0] + acc[1]) + sumy * m;
-}
-
-// putting them in the kernel cause a significant performance penalty
-#define N_DST 4        // each SIMD group works on 4 rows
-#define N_SIMDGROUP 2  // number of SIMD groups in a thread group
-//Note: This is a template, but strictly speaking it only applies to
-//      quantizations where the block size is 32. It also does not
-//      guard against the number of rows not being divisible by
-//      N_DST, so this is another explicit assumption of the implementation.
-template<typename block_q_type, int nr, int nsg, int nw>
-void mul_vec_q_n_f32_impl(
-        device const void  * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3 tgpig, uint tiisg, uint sgitg) {
-    const int nb = ne00/QK4_0;
-
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * nsg + sgitg) * nr;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_q_type * x = (device const block_q_type *) src0 + offset0;
-    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[16]; // src1 vector cache
-    float sumf[nr] = {0.f};
-
-    const int ix = (tiisg/2);
-    const int il = (tiisg%2)*8;
-
-    device const float * yb = y + ix * QK4_0 + il;
-
-    // each thread in a SIMD group deals with half a block.
-    for (int ib = ix; ib < nb; ib += nw/2) {
-        float sumy = 0;
-        for (int i = 0; i < 8; i += 2) {
-            sumy += yb[i] + yb[i+1];
-            yl[i+0] = yb[i+ 0];
-            yl[i+1] = yb[i+ 1]/256.f;
-
-            sumy += yb[i+16] + yb[i+17];
-            yl[i+8] = yb[i+16]/16.f;
-            yl[i+9] = yb[i+17]/4096.f;
-        }
-
-        for (int row = 0; row < nr; row++) {
-            sumf[row] += block_q_n_dot_y(x+ib+row*nb, sumy, yl, il);
-        }
-
-        yb += QK4_0 * 16;
-    }
-
-    for (int row = 0; row < nr; ++row) {
-        const float tot = simd_sum(sumf[row]);
-        if (tiisg == 0 && first_row + row < ne01) {
-            dst[im*ne0*ne1 + r1*ne0 + first_row + row] = tot;
-        }
-    }
-}
-
-kernel void kernel_mul_mv_q4_0_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-    mul_vec_q_n_f32_impl<block_q4_0, N_DST, N_SIMDGROUP, N_SIMDWIDTH>(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
-}
-
-kernel void kernel_mul_mv_q4_1_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint tiisg[[thread_index_in_simdgroup]],
-        uint sgitg[[simdgroup_index_in_threadgroup]]) {
-     mul_vec_q_n_f32_impl<block_q4_1, N_DST, N_SIMDGROUP, N_SIMDWIDTH>(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
-}
-
-kernel void kernel_mul_mv_q5_0_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-    mul_vec_q_n_f32_impl<block_q5_0, N_DST, N_SIMDGROUP, N_SIMDWIDTH>(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
-}
-
-kernel void kernel_mul_mv_q5_1_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-    mul_vec_q_n_f32_impl<block_q5_1, N_DST, N_SIMDGROUP, N_SIMDWIDTH>(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
-}
-
-
-#define NB_Q8_0 8
-
-void kernel_mul_mv_q8_0_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-    const int nr  = N_DST;
-    const int nsg = N_SIMDGROUP;
-    const int nw  = N_SIMDWIDTH;
-
-    const int nb = ne00/QK8_0;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * nsg + sgitg) * nr;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_q8_0 * x = (device const block_q8_0 *) src0 + offset0;
-    device const float      * y = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[NB_Q8_0];
-    float sumf[nr]={0.f};
-
-    const int ix = tiisg/4;
-    const int il = tiisg%4;
-
-    device const float * yb = y + ix * QK8_0 + NB_Q8_0*il;
-
-    // each thread in a SIMD group deals with NB_Q8_0 quants at a time
-    for (int ib = ix; ib < nb; ib += nw/4) {
-        for (int i = 0; i < NB_Q8_0; ++i) {
-            yl[i] = yb[i];
-        }
-
-        for (int row = 0; row < nr; row++) {
-            device const int8_t * qs = x[ib+row*nb].qs + NB_Q8_0*il;
-            float sumq = 0.f;
-            for (int iq = 0; iq < NB_Q8_0; ++iq) {
-                sumq += qs[iq] * yl[iq];
-            }
-            sumf[row] += sumq*x[ib+row*nb].d;
-        }
-
-        yb += NB_Q8_0 * nw;
-    }
-
-    for (int row = 0; row < nr; ++row) {
-        const float tot = simd_sum(sumf[row]);
-        if (tiisg == 0 && first_row + row < ne01) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_q8_0_f32")]]
-kernel void kernel_mul_mv_q8_0_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-    kernel_mul_mv_q8_0_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
-}
-
-#define N_F32_F32 4
-
-void kernel_mul_mv_f32_f32_impl(
-        device const  char * src0,
-        device const  char * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                  uint64_t   nb00,
-                  uint64_t   nb01,
-                  uint64_t   nb02,
-                   int64_t   ne10,
-                   int64_t   ne11,
-                   int64_t   ne12,
-                  uint64_t   nb10,
-                  uint64_t   nb11,
-                  uint64_t   nb12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                     uint    r2,
-                     uint    r3,
-                     uint3   tgpig,
-                     uint    tiisg) {
-
-    const int64_t r0 = tgpig.x;
-    const int64_t rb = tgpig.y*N_F32_F32;
-    const int64_t im = tgpig.z;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;
-
-    device const float * x = (device const float *) (src0 + offset0);
-
-    if (ne00 < 128) {
-        for (int row = 0; row < N_F32_F32; ++row) {
-            int r1 = rb + row;
-            if (r1 >= ne11) {
-                break;
-            }
-
-            device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12);
-
-            float sumf = 0;
-            for (int i = tiisg; i < ne00; i += 32) {
-                sumf += (float) x[i] * (float) y[i];
-            }
-
-            float all_sum = simd_sum(sumf);
-            if (tiisg == 0) {
-                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
-            }
-        }
-    } else {
-        device const float4 * x4 = (device const float4 *)x;
-        for (int row = 0; row < N_F32_F32; ++row) {
-            int r1 = rb + row;
-            if (r1 >= ne11) {
-                break;
-            }
-
-            device const float  * y  = (device const float  *) (src1 + r1*nb11 + im*nb12);
-            device const float4 * y4 = (device const float4 *) y;
-
-            float sumf = 0;
-            for (int i = tiisg; i < ne00/4; i += 32) {
-                for (int k = 0; k < 4; ++k) sumf += (float) x4[i][k] * y4[i][k];
-            }
-
-            float all_sum = simd_sum(sumf);
-            if (tiisg == 0) {
-                for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i];
-                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
-            }
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_f32_f32")]]
-kernel void kernel_mul_mv_f32_f32(
-        device const  char * src0,
-        device const  char * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]]) {
-    kernel_mul_mv_f32_f32_impl(src0, src1, dst, ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, nb10, nb11, nb12, ne0, ne1, r2, r3, tgpig, tiisg);
-}
-
-#define N_F16_F16 4
-
-kernel void kernel_mul_mv_f16_f16(
-        device const  char * src0,
-        device const  char * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]]) {
-
-    const int64_t r0 = tgpig.x;
-    const int64_t rb = tgpig.y*N_F16_F16;
-    const int64_t im = tgpig.z;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;
-
-    device const half * x = (device const half *) (src0 + offset0);
-
-    if (ne00 < 128) {
-        for (int row = 0; row < N_F16_F16; ++row) {
-            int r1 = rb + row;
-            if (r1 >= ne11) {
-                break;
-            }
-
-            device const half * y = (device const half *) (src1 + r1*nb11 + im*nb12);
-
-            float sumf = 0;
-            for (int i = tiisg; i < ne00; i += 32) {
-                sumf += (half) x[i] * (half) y[i];
-            }
-
-            float all_sum = simd_sum(sumf);
-            if (tiisg == 0) {
-                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
-            }
-        }
-    } else {
-        device const half4 * x4 = (device const half4 *)x;
-        for (int row = 0; row < N_F16_F16; ++row) {
-            int r1 = rb + row;
-            if (r1 >= ne11) {
-                break;
-            }
-
-            device const half  * y  = (device const half  *) (src1 + r1*nb11 + im*nb12);
-            device const half4 * y4 = (device const half4 *) y;
-
-            float sumf = 0;
-            for (int i = tiisg; i < ne00/4; i += 32) {
-                for (int k = 0; k < 4; ++k) sumf += (half) x4[i][k] * y4[i][k];
-            }
-
-            float all_sum = simd_sum(sumf);
-            if (tiisg == 0) {
-                for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (half) x[i] * y[i];
-                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
-            }
-        }
-    }
-}
-
-void kernel_mul_mv_f16_f32_1row_impl(
-        device const  char * src0,
-        device const  char * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]]) {
-
-    const int64_t r0 = tgpig.x;
-    const int64_t r1 = tgpig.y;
-    const int64_t im = tgpig.z;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;
-
-    device const half  * x = (device const half  *) (src0 + offset0);
-    device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12);
-
-    float sumf = 0;
-    if (ne00 < 128) {
-        for (int i = tiisg; i < ne00; i += 32) {
-            sumf += (float) x[i] * (float) y[i];
-        }
-        float all_sum = simd_sum(sumf);
-        if (tiisg == 0) {
-            dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
-        }
-    } else {
-        device const half4  * x4 = (device const half4  *) x;
-        device const float4 * y4 = (device const float4 *) y;
-        for (int i = tiisg; i < ne00/4; i += 32) {
-            for (int k = 0; k < 4; ++k) sumf += (float)x4[i][k] * y4[i][k];
-        }
-        float all_sum = simd_sum(sumf);
-        if (tiisg == 0) {
-            for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i];
-            dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_f16_f32_1row")]]
-kernel void kernel_mul_mv_f16_f32_1row(
-        device const  char * src0,
-        device const  char * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]]) {
-    kernel_mul_mv_f16_f32_1row_impl(src0, src1, dst, ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, nb10, nb11, nb12, ne0, ne1, r2, r3, tgpig, tiisg);
-}
-
-#define N_F16_F32 4
-
-void kernel_mul_mv_f16_f32_impl(
-        device const  char * src0,
-        device const  char * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                  uint64_t   nb00,
-                  uint64_t   nb01,
-                  uint64_t   nb02,
-                   int64_t   ne10,
-                   int64_t   ne11,
-                   int64_t   ne12,
-                  uint64_t   nb10,
-                  uint64_t   nb11,
-                  uint64_t   nb12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-                   uint3     tgpig,
-                   uint      tiisg) {
-
-    const int64_t r0 = tgpig.x;
-    const int64_t rb = tgpig.y*N_F16_F32;
-    const int64_t im = tgpig.z;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;
-
-    device const half * x = (device const half *) (src0 + offset0);
-
-    if (ne00 < 128) {
-        for (int row = 0; row < N_F16_F32; ++row) {
-            int r1 = rb + row;
-            if (r1 >= ne11) {
-                break;
-            }
-
-            device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12);
-
-            float sumf = 0;
-            for (int i = tiisg; i < ne00; i += 32) {
-                sumf += (float) x[i] * (float) y[i];
-            }
-
-            float all_sum = simd_sum(sumf);
-            if (tiisg == 0) {
-                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
-            }
-        }
-    } else {
-        device const half4 * x4 = (device const half4 *)x;
-        for (int row = 0; row < N_F16_F32; ++row) {
-            int r1 = rb + row;
-            if (r1 >= ne11) {
-                break;
-            }
-
-            device const float  * y  = (device const float  *) (src1 + r1*nb11 + im*nb12);
-            device const float4 * y4 = (device const float4 *) y;
-
-            float sumf = 0;
-            for (int i = tiisg; i < ne00/4; i += 32) {
-                for (int k = 0; k < 4; ++k) sumf += (float) x4[i][k] * y4[i][k];
-            }
-
-            float all_sum = simd_sum(sumf);
-            if (tiisg == 0) {
-                for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i];
-                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
-            }
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_f16_f32")]]
-kernel void kernel_mul_mv_f16_f32(
-        device const  char * src0,
-        device const  char * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint tiisg[[thread_index_in_simdgroup]]) {
-    kernel_mul_mv_f16_f32_impl(src0, src1, dst, ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, nb10, nb11, nb12, ne0, ne1, r2, r3, tgpig, tiisg);
-}
-
-// Assumes row size (ne00) is a multiple of 4
-kernel void kernel_mul_mv_f16_f32_l4(
-        device const  char * src0,
-        device const  char * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint tiisg[[thread_index_in_simdgroup]]) {
-
-    const int nrows = ne11;
-    const int64_t r0 = tgpig.x;
-    const int64_t im = tgpig.z;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;
-
-    device const half4 * x4 = (device const half4 *) (src0 + offset0);
-
-    for (int r1 = 0; r1 < nrows; ++r1) {
-        device const float4 * y4 = (device const float4 *) (src1 + r1*nb11 + im*nb12);
-
-        float sumf = 0;
-        for (int i = tiisg; i < ne00/4; i += 32) {
-            for (int k = 0; k < 4; ++k) sumf += (float) x4[i][k] * y4[i][k];
-        }
-
-        float all_sum = simd_sum(sumf);
-        if (tiisg == 0) {
-            dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
-        }
-    }
-}
-
-static float rope_yarn_ramp(const float low, const float high, const int i0) {
-    const float y = (i0 / 2 - low) / max(0.001f, high - low);
-    return 1.0f - min(1.0f, max(0.0f, y));
-}
-
-// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn
-// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng.
-static void rope_yarn(
-    float theta_extrap, float freq_scale, float corr_dims[2], int64_t i0, float ext_factor, float mscale,
-    thread float * cos_theta, thread float * sin_theta) {
-    // Get n-d rotational scaling corrected for extrapolation
-    float theta_interp = freq_scale * theta_extrap;
-    float theta = theta_interp;
-    if (ext_factor != 0.0f) {
-        float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor;
-        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;
-
-        // Get n-d magnitude scaling corrected for interpolation
-        mscale *= 1.0f + 0.1f * log(1.0f / freq_scale);
-    }
-    *cos_theta = cos(theta) * mscale;
-    *sin_theta = sin(theta) * mscale;
-}
-
-// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get
-// `corr_fac(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))`
-static float rope_yarn_corr_factor(int n_dims, int n_ctx_orig, float n_rot, float base) {
-    return n_dims * log(n_ctx_orig / (n_rot * 2 * M_PI_F)) / (2 * log(base));
-}
-
-static void rope_yarn_corr_dims(
-    int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, float dims[2]
-) {
-    // start and end correction dims
-    dims[0] = max(0.0f,         floor(rope_yarn_corr_factor(n_dims, n_ctx_orig, beta_fast, freq_base)));
-    dims[1] = min(n_dims - 1.0f, ceil(rope_yarn_corr_factor(n_dims, n_ctx_orig, beta_slow, freq_base)));
-}
-
-template<typename T>
-kernel void kernel_rope_norm(
-        device const    void * src0,
-        device const int32_t * src1,
-        device const   float * src2,
-        device         float * dst,
-        constant     int64_t & ne00,
-        constant     int64_t & ne01,
-        constant     int64_t & ne02,
-        constant     int64_t & ne03,
-        constant    uint64_t & nb00,
-        constant    uint64_t & nb01,
-        constant    uint64_t & nb02,
-        constant    uint64_t & nb03,
-        constant     int64_t & ne0,
-        constant     int64_t & ne1,
-        constant     int64_t & ne2,
-        constant     int64_t & ne3,
-        constant    uint64_t & nb0,
-        constant    uint64_t & nb1,
-        constant    uint64_t & nb2,
-        constant    uint64_t & nb3,
-        constant         int & n_past,
-        constant         int & n_dims,
-        constant         int & n_ctx_orig,
-        constant       float & freq_base,
-        constant       float & freq_scale,
-        constant       float & ext_factor,
-        constant       float & attn_factor,
-        constant       float & beta_fast,
-        constant       float & beta_slow,
-        uint  tiitg[[thread_index_in_threadgroup]],
-        uint3 tptg[[threads_per_threadgroup]],
-        uint3 tgpig[[threadgroup_position_in_grid]]) {
-    const int64_t i3 = tgpig[2];
-    const int64_t i2 = tgpig[1];
-    const int64_t i1 = tgpig[0];
-
-    float corr_dims[2];
-    rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);
-
-    device const int32_t * pos = src1;
-
-    const float theta_base = (float) pos[i2];
-    const float inv_ndims = -1.f/n_dims;
-
-    float cos_theta;
-    float sin_theta;
-
-    for (int64_t i0 = 2*tiitg; i0 < ne0; i0 += 2*tptg.x) {
-        if (i0 < n_dims) {
-            const int64_t ic = i0/2;
-
-            const float theta = theta_base * pow(freq_base, inv_ndims*i0);
-
-            const float freq_factor = src2 != src0 ? src2[ic] : 1.0f;
-
-            rope_yarn(theta/freq_factor, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta);
-
-            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
-            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
-
-            const float x0 = src[0];
-            const float x1 = src[1];
-
-            dst_data[0] = x0*cos_theta - x1*sin_theta;
-            dst_data[1] = x0*sin_theta + x1*cos_theta;
-        } else {
-            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
-            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
-
-            dst_data[0] = src[0];
-            dst_data[1] = src[1];
-        }
-    }
-}
-
-template<typename T>
-kernel void kernel_rope_neox(
-        device const    void * src0,
-        device const int32_t * src1,
-        device const   float * src2,
-        device         float * dst,
-        constant     int64_t & ne00,
-        constant     int64_t & ne01,
-        constant     int64_t & ne02,
-        constant     int64_t & ne03,
-        constant    uint64_t & nb00,
-        constant    uint64_t & nb01,
-        constant    uint64_t & nb02,
-        constant    uint64_t & nb03,
-        constant     int64_t & ne0,
-        constant     int64_t & ne1,
-        constant     int64_t & ne2,
-        constant     int64_t & ne3,
-        constant    uint64_t & nb0,
-        constant    uint64_t & nb1,
-        constant    uint64_t & nb2,
-        constant    uint64_t & nb3,
-        constant         int & n_past,
-        constant         int & n_dims,
-        constant         int & n_ctx_orig,
-        constant       float & freq_base,
-        constant       float & freq_scale,
-        constant       float & ext_factor,
-        constant       float & attn_factor,
-        constant       float & beta_fast,
-        constant       float & beta_slow,
-        uint  tiitg[[thread_index_in_threadgroup]],
-        uint3 tptg[[threads_per_threadgroup]],
-        uint3 tgpig[[threadgroup_position_in_grid]]) {
-    const int64_t i3 = tgpig[2];
-    const int64_t i2 = tgpig[1];
-    const int64_t i1 = tgpig[0];
-
-    float corr_dims[2];
-    rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);
-
-    device const int32_t * pos = src1;
-
-    const float theta_base = (float) pos[i2];
-    const float inv_ndims = -1.f/n_dims;
-
-    float cos_theta;
-    float sin_theta;
-
-    for (int64_t i0 = 2*tiitg; i0 < ne0; i0 += 2*tptg.x) {
-        if (i0 < n_dims) {
-            const int64_t ic = i0/2;
-
-            const float theta = theta_base * pow(freq_base, inv_ndims*i0);
-
-            const float freq_factor = src2 != src0 ? src2[ic] : 1.0f;
-
-            rope_yarn(theta/freq_factor, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta);
-
-            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00);
-            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + ic*nb0);
-
-            const float x0 = src[0];
-            const float x1 = src[n_dims/2];
-
-            dst_data[0]        = x0*cos_theta - x1*sin_theta;
-            dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta;
-        } else {
-            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
-            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
-
-            dst_data[0] = src[0];
-            dst_data[1] = src[1];
-        }
-    }
-}
-
-typedef decltype(kernel_rope_norm<float>) kernel_rope_norm_t;
-typedef decltype(kernel_rope_neox<float>) kernel_rope_neox_t;
-
-template [[host_name("kernel_rope_norm_f32")]] kernel kernel_rope_norm_t kernel_rope_norm<float>;
-template [[host_name("kernel_rope_norm_f16")]] kernel kernel_rope_norm_t kernel_rope_norm<half>;
-
-template [[host_name("kernel_rope_neox_f32")]] kernel kernel_rope_neox_t kernel_rope_neox<float>;
-template [[host_name("kernel_rope_neox_f16")]] kernel kernel_rope_neox_t kernel_rope_neox<half>;
-
-typedef void (im2col_t)(
-        device const float * x,
-        device        char * dst,
-        constant   int32_t & ofs0,
-        constant   int32_t & ofs1,
-        constant   int32_t & IW,
-        constant   int32_t & IH,
-        constant   int32_t & CHW,
-        constant   int32_t & s0,
-        constant   int32_t & s1,
-        constant   int32_t & p0,
-        constant   int32_t & p1,
-        constant   int32_t & d0,
-        constant   int32_t & d1,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3  tgpg[[threadgroups_per_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]);
-
-template <typename T>
-kernel void kernel_im2col(
-        device const float * x,
-        device        char * dst,
-        constant   int32_t & ofs0,
-        constant   int32_t & ofs1,
-        constant   int32_t & IW,
-        constant   int32_t & IH,
-        constant   int32_t & CHW,
-        constant   int32_t & s0,
-        constant   int32_t & s1,
-        constant   int32_t & p0,
-        constant   int32_t & p1,
-        constant   int32_t & d0,
-        constant   int32_t & d1,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3  tgpg[[threadgroups_per_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int32_t iiw = tgpig[2] * s0 + tpitg[2] * d0 - p0;
-    const int32_t iih = tgpig[1] * s1 + tpitg[1] * d1 - p1;
-
-    const int32_t offset_dst =
-        (tpitg[0] * tgpg[1] * tgpg[2] + tgpig[1] * tgpg[2] + tgpig[2]) * CHW +
-        (tgpig[0] * (ntg[1] * ntg[2]) + tpitg[1] * ntg[2] + tpitg[2]);
-
-    device T * pdst = (device T *) (dst);
-
-    if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
-        pdst[offset_dst] = 0.0f;
-    } else {
-        const int32_t offset_src = tpitg[0] * ofs0 + tgpig[0] * ofs1;
-        pdst[offset_dst] = x[offset_src + iih * IW + iiw];
-    }
-}
-
-template [[host_name("kernel_im2col_f32")]] kernel im2col_t kernel_im2col<float>;
-template [[host_name("kernel_im2col_f16")]] kernel im2col_t kernel_im2col<half>;
-
-kernel void kernel_upscale_f32(
-    device  const char * src0,
-    device        char * dst,
-    constant   int64_t & ne00,
-    constant   int64_t & ne01,
-    constant   int64_t & ne02,
-    constant   int64_t & ne03,
-    constant  uint64_t & nb00,
-    constant  uint64_t & nb01,
-    constant  uint64_t & nb02,
-    constant  uint64_t & nb03,
-    constant   int64_t & ne0,
-    constant   int64_t & ne1,
-    constant   int64_t & ne2,
-    constant   int64_t & ne3,
-    constant  uint64_t & nb0,
-    constant  uint64_t & nb1,
-    constant  uint64_t & nb2,
-    constant  uint64_t & nb3,
-    constant     float & sf0,
-    constant     float & sf1,
-    constant     float & sf2,
-    constant     float & sf3,
-    uint3 tgpig[[threadgroup_position_in_grid]],
-    uint3 tpitg[[thread_position_in_threadgroup]],
-    uint3   ntg[[threads_per_threadgroup]]) {
-
-    const int64_t i3 = tgpig.z;
-    const int64_t i2 = tgpig.y;
-    const int64_t i1 = tgpig.x;
-
-    const int64_t i03 = i3/sf3;
-    const int64_t i02 = i2/sf2;
-    const int64_t i01 = i1/sf1;
-
-    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
-        const int64_t i00 = i0/sf0;
-
-        device const float * src0_ptr = (device const float *) (src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-        device       float * dst_ptr  = (device       float *) (dst  +  i3*nb3  +  i2*nb2  +  i1*nb1  +  i0*nb0);
-
-        dst_ptr[0] = src0_ptr[0];
-    }
-}
-
-kernel void kernel_pad_f32(
-    device  const char * src0,
-    device        char * dst,
-    constant   int64_t & ne00,
-    constant   int64_t & ne01,
-    constant   int64_t & ne02,
-    constant   int64_t & ne03,
-    constant  uint64_t & nb00,
-    constant  uint64_t & nb01,
-    constant  uint64_t & nb02,
-    constant  uint64_t & nb03,
-    constant   int64_t & ne0,
-    constant   int64_t & ne1,
-    constant   int64_t & ne2,
-    constant   int64_t & ne3,
-    constant  uint64_t & nb0,
-    constant  uint64_t & nb1,
-    constant  uint64_t & nb2,
-    constant  uint64_t & nb3,
-    uint3 tgpig[[threadgroup_position_in_grid]],
-    uint3 tpitg[[thread_position_in_threadgroup]],
-    uint3   ntg[[threads_per_threadgroup]]) {
-
-    const int64_t i3 = tgpig.z;
-    const int64_t i2 = tgpig.y;
-    const int64_t i1 = tgpig.x;
-
-    const int64_t i03 = i3;
-    const int64_t i02 = i2;
-    const int64_t i01 = i1;
-
-    device const float * src0_ptr = (device const float *) (src0 + i03*nb03 + i02*nb02 + i01*nb01);
-    device       float * dst_ptr  = (device       float *) (dst  +  i3*nb3  +  i2*nb2  +  i1*nb1);
-
-    if (i1 < ne01 && i2 < ne02 && i3 < ne03) {
-        for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
-            if (i0 < ne00) {
-                dst_ptr[i0] = src0_ptr[i0];
-            } else {
-                dst_ptr[i0] = 0.0f;
-            }
-        }
-
-        return;
-    }
-
-    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
-        dst_ptr[i0] = 0.0f;
-    }
-}
-
-kernel void kernel_arange_f32(
-    device        char * dst,
-    constant   int64_t & ne0,
-    constant   float   & start,
-    constant   float   & step,
-    uint3 tgpig[[threadgroup_position_in_grid]],
-    uint3 tpitg[[thread_position_in_threadgroup]],
-    uint3   ntg[[threads_per_threadgroup]]) {
-
-    device float * dst_ptr = (device float *) dst;
-
-    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
-        dst_ptr[i0] = start + step * i0;
-    }
-}
-
-kernel void kernel_timestep_embedding_f32(
-    device  const char * src0,
-    device        char * dst,
-    constant  uint64_t & nb1,
-    constant  int      & dim,
-    constant  int      & max_period,
-    uint3 tgpig[[threadgroup_position_in_grid]],
-    uint3 tpitg[[thread_position_in_threadgroup]],
-    uint3   ntg[[threads_per_threadgroup]]) {
-
-    int i = tgpig.x;
-    device float * embed_data = (device float *)(dst +  i*nb1);
-
-    int half_ = dim / 2;
-    for (int j = tpitg.x; j < half_; j += ntg.x) {
-        float timestep = ((device float *)src0)[i];
-        float freq = (float)exp(-log((float)max_period) * j / half_);
-        float arg = timestep * freq;
-        embed_data[j        ] = cos(arg);
-        embed_data[j + half_] = sin(arg);
-    }
-
-    if (dim % 2 != 0 && tpitg.x == 0) {
-        embed_data[dim] = 0.f;
-    }
-}
-
-// bitonic sort implementation following the CUDA kernels as reference
-typedef void (argsort_t)(
-        device const float  * x,
-        device     int32_t  * dst,
-        constant   int64_t  & ncols,
-        constant   int64_t  & ncols_pad,
-        threadgroup int32_t * shared_values [[threadgroup(0)]],
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]]);
-
-template<ggml_sort_order order>
-kernel void kernel_argsort_f32_i32(
-        device const float   * x,
-        device       int32_t * dst,
-        constant     int64_t & ncols,
-        constant     int64_t & ncols_pad,
-        threadgroup int32_t  * shared_values [[threadgroup(0)]],
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]]) {
-    // bitonic sort
-    int col = tpitg[0];
-    int row = tgpig[1];
-
-    if (col >= ncols_pad) return;
-
-    device const float   * x_row   = x + row * ncols;
-    threadgroup int32_t  * dst_row = shared_values;
-
-    // initialize indices
-    dst_row[col] = col;
-
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-
-    for (int k = 2; k <= ncols_pad; k *= 2) {
-        for (int j = k / 2; j > 0; j /= 2) {
-            int ixj = col ^ j;
-            if (ixj > col) {
-                if ((col & k) == 0) {
-                    if (dst_row[col] >= ncols ||
-                        (dst_row[ixj] < ncols && (order == GGML_SORT_ORDER_ASC ?
-                            x_row[dst_row[col]] > x_row[dst_row[ixj]] :
-                            x_row[dst_row[col]] < x_row[dst_row[ixj]]))
-                    ) {
-                        SWAP(dst_row[col], dst_row[ixj]);
-                    }
-                } else {
-                    if (dst_row[ixj] >= ncols ||
-                        (dst_row[col] < ncols && (order == GGML_SORT_ORDER_ASC ?
-                            x_row[dst_row[col]] < x_row[dst_row[ixj]] :
-                            x_row[dst_row[col]] > x_row[dst_row[ixj]]))
-                    ) {
-                        SWAP(dst_row[col], dst_row[ixj]);
-                    }
-                }
-            }
-            threadgroup_barrier(mem_flags::mem_threadgroup);
-        }
-    }
-
-    // copy the result to dst without the padding
-    if (col < ncols) {
-        dst[row * ncols + col] = dst_row[col];
-    }
-}
-
-template [[host_name("kernel_argsort_f32_i32_asc")]]  kernel argsort_t kernel_argsort_f32_i32<GGML_SORT_ORDER_ASC>;
-template [[host_name("kernel_argsort_f32_i32_desc")]] kernel argsort_t kernel_argsort_f32_i32<GGML_SORT_ORDER_DESC>;
-
-kernel void kernel_leaky_relu_f32(
-        device const float * src0,
-        device       float * dst,
-        constant     float & slope,
-        uint tpig[[thread_position_in_grid]]) {
-    dst[tpig] = src0[tpig] > 0.0f ? src0[tpig] : src0[tpig] * slope;
-}
-
-typedef void (flash_attn_ext_f16_t)(
-        device const  char * q,
-        device const  char * k,
-        device const  char * v,
-        device const  char * mask,
-        device       float * dst,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant   int64_t & ne13,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant  uint64_t & nb13,
-        constant  uint64_t & nb21,
-        constant  uint64_t & nb22,
-        constant  uint64_t & nb23,
-        constant  uint64_t & nb31,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant     float & scale,
-        constant     float & max_bias,
-        constant     float & m0,
-        constant     float & m1,
-        constant  uint32_t & n_head_log2,
-        threadgroup   half * shared,
-        uint3  tgpig[[threadgroup_position_in_grid]],
-        uint3  tpitg[[thread_position_in_threadgroup]],
-        uint3    ntg[[threads_per_threadgroup]],
-        ushort tiisg[[thread_index_in_simdgroup]],
-        ushort sgitg[[simdgroup_index_in_threadgroup]]);
-
-// ref: https://arxiv.org/pdf/2307.08691.pdf
-template<int64_t D, int64_t Q = 8, int64_t C = 32> // head size, queries per threadgroup, cache items per threadgroup
-kernel void kernel_flash_attn_ext_f16(
-        device const  char * q,
-        device const  char * k,
-        device const  char * v,
-        device const  char * mask,
-        device       float * dst,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant   int64_t & ne13,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant  uint64_t & nb13,
-        constant  uint64_t & nb21,
-        constant  uint64_t & nb22,
-        constant  uint64_t & nb23,
-        constant  uint64_t & nb31,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant     float & scale,
-        constant     float & max_bias,
-        constant     float & m0,
-        constant     float & m1,
-        constant  uint32_t & n_head_log2,
-        threadgroup   half * shared [[threadgroup(0)]],
-        uint3  tgpig[[threadgroup_position_in_grid]],
-        uint3  tpitg[[thread_position_in_threadgroup]],
-        uint3    ntg[[threads_per_threadgroup]],
-        ushort tiisg[[thread_index_in_simdgroup]],
-        ushort sgitg[[simdgroup_index_in_threadgroup]]) {
-    const short nsg = ntg.y; // number of simdgroups
-
-    const short iq3 = tgpig[2];
-    const short iq2 = tgpig[1];
-    const short iq1 = tgpig[0]*Q;
-
-    const short D4 = D/4;
-    const short D8 = D/8;
-  //const short Q8 = Q/8;
-    const short NW = N_SIMDWIDTH;
-    const short SH = (C + Q); // shared memory per simdgroup in (half)
-
-    const short T  = D + 2*nsg*SH; // shared memory size per query in (half)
-    const short TF = T/2;        // shared memory size per query in (float)
-    const short T4 = T/4;        // shared memory size per query in (half4)
-
-    threadgroup half  * sq  = (threadgroup half  *) (shared +              0*D); // holds the query data
-    threadgroup half4 * sq4 = (threadgroup half4 *) (shared +              0*D); // same as above but in half4
-    threadgroup float * ss  = (threadgroup float *) (shared + 2*sgitg*SH + 1*D); // scratch buffer for attention and diagonal matrix
-
-    // store the result for all queries in local memory in 8x8 matrices (the O matrix from the paper)
-    simdgroup_half8x8 lo[D8];
-
-    // load heads from Q to shared memory
-    for (short j = sgitg; j < Q; j += nsg) {
-        device const float4 * q4 = (device const float4 *) ((device const char *) q + ((iq1 + j)*nb01 + iq2*nb02 + iq3*nb03));
-
-        for (short i = tiisg; i < D4; i += NW) {
-            if (iq1 + j < ne01) {
-                sq4[j*T4 + i] = (half4) q4[i];
-            } else {
-                sq4[j*T4 + i] = 0.0h;
-            }
-        }
-    }
-
-    // zero out lo
-    for (short i = 0; i < D8; ++i) {
-        lo[i] = make_filled_simdgroup_matrix<half, 8>(0.0h);
-    }
-
-    // zero out shared memory SH
-    for (short j = 0; j < Q; ++j) {
-        for (short i = tiisg; i < SH; i += NW) {
-            ss[j*TF + i] = 0.0f;
-        }
-    }
-
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-
-    {
-        float S[Q] = { [0 ... Q-1] = 0.0h };
-        float M[Q] = { [0 ... Q-1] = -FLT_MAX/2 };
-
-        // assume K and V are same shape
-        const short ne22 = ne12;
-        const short ne23 = ne13;
-
-        // broadcast
-        const short rk2 = ne02/ne12;
-        const short rk3 = ne03/ne13;
-
-        const short rv2 = ne02/ne22;
-        const short rv3 = ne03/ne23;
-
-        // k indices
-        const short ik2 = iq2/rk2;
-        const short ik3 = iq3/rk3;
-
-        // v indices
-        const short iv2 = iq2/rv2;
-        const short iv3 = iq3/rv3;
-
-        // load the queries from shared memory into local memory
-        simdgroup_half8x8 mq[D8];
-
-        for (short i = 0; i < D8; ++i) {
-            simdgroup_load(mq[i], sq + i*8, T);
-        }
-
-        // pointer to the mask
-        device const half * mp = (device const half *) (mask + iq1*nb31);
-
-        float slope = 1.0f;
-
-        // ALiBi
-        if (max_bias > 0.0f) {
-            const uint32_t h = iq2;
-
-            const float base = h < n_head_log2 ? m0 : m1;
-            const int   exph = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
-
-            slope = pow(base, exph);
-        }
-
-        // loop over the KV cache
-        // each simdgroup handles blocks of Q rows and C columns
-        for (int ic0 = 0; ic0 < ne11; ic0 += C*nsg) {
-            const int ic = ic0 + C*sgitg;
-            if (ic >= ne11) {
-                break;
-            }
-
-            // Q*K^T
-            {
-                for (short cc = 0; cc < C/8; ++cc) {
-                    simdgroup_float8x8 mqk = make_filled_simdgroup_matrix<float, 8>(0.h);
-
-                    device const half * pk = (device const half *) ((device const char *) k + ((ic + 8*cc)*nb11 + ik2*nb12 + ik3*nb13));
-
-                    for (short i = 0; i < D8; ++i) {
-                        simdgroup_half8x8 mk;
-                        simdgroup_load(mk, pk + i*8, nb11/sizeof(half), 0, true); // transpose
-
-                        simdgroup_multiply_accumulate(mqk, mq[i], mk, mqk);
-                    }
-
-                    simdgroup_store(mqk, ss + 8*cc, TF, 0, false);
-
-                    const short tx = tiisg%4;
-                    const short ty = tiisg/4;
-
-                    if (mask != q) {
-                        // mqk = mqk*scale + mask*slope
-                        ss[8*cc + ty*TF + 2*tx + 0] = scale*ss[8*cc + ty*TF + 2*tx + 0] + slope*mp[ic + 8*cc + ty*nb31/sizeof(half) + 2*tx + 0];
-                        ss[8*cc + ty*TF + 2*tx + 1] = scale*ss[8*cc + ty*TF + 2*tx + 1] + slope*mp[ic + 8*cc + ty*nb31/sizeof(half) + 2*tx + 1];
-                    } else {
-                        // mqk = mqk*scale
-                        ss[8*cc + ty*TF + 2*tx + 0] *= scale;
-                        ss[8*cc + ty*TF + 2*tx + 1] *= scale;
-                    }
-                }
-            }
-
-            // used to detect blocks full of -INF
-            float smax = -INFINITY;
-
-            // online softmax
-            {
-                float ms[Q];
-
-                for (short j = 0; j < Q; ++j) {
-                    const short p = tiisg;
-
-                    const float m = M[j];
-                    const float s = ss[j*TF + p];
-
-                    smax = simd_max(max(smax, s));
-                    M[j] = simd_max(max(M[j], s));
-
-                                ms[j] = exp(m - M[j]);
-                    const float vs    = exp(s - M[j]);
-
-                    S[j] = S[j]*ms[j] + simd_sum(vs);
-
-                    // the P matrix from the paper (Q rows, C columns)
-                    ss[j*TF + p] = vs;
-                }
-
-                // create a QxQ diagonal matrix for rescaling the output
-                if (tiisg < Q) {
-                    ss[tiisg*TF + C + tiisg] = ms[tiisg];
-                }
-            }
-
-            // skip -INF blocks
-            if (smax == -INFINITY) {
-                continue;
-            }
-
-            // O = diag(ms)*O
-            {
-                simdgroup_float8x8 mm;
-                simdgroup_load(mm, ss + C, TF, 0, false);
-
-                for (short i = 0; i < D8; ++i) {
-                    simdgroup_multiply(lo[i], mm, lo[i]);
-                }
-            }
-
-            // O = O + (Q*K^T)*V
-            {
-                for (short cc = 0; cc < C/8; ++cc) {
-                    device const half * pv = (device const half *) ((device const char *) v + ((ic + 8*cc)*nb21 + iv2*nb22 + iv3*nb23));
-
-                    for (short i = 0; i < D8; ++i) {
-                        simdgroup_half8x8 mk;
-                        simdgroup_load(mk, pv + i*8, nb21/sizeof(half), 0, false);
-
-                        simdgroup_float8x8 mv;
-                        simdgroup_load(mv, ss + 8*cc, TF, 0, false);
-
-                        simdgroup_multiply_accumulate(lo[i], mv, mk, lo[i]);
-                    }
-                }
-            }
-        }
-
-        // these are needed for reducing the results from the simdgroups (reuse the ss buffer)
-        for (short j = 0; j < Q; ++j) {
-            if (tiisg == 0) {
-                ss[j*TF + 0] = S[j];
-                ss[j*TF + 1] = M[j];
-            }
-        }
-    }
-
-    // reduce the warps sequentially
-    for (short sg = 1; sg < nsg; ++sg) {
-        float S = { 0.0h };
-        float M = { -FLT_MAX/2 };
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        // each simdgroup stores its output to shared memory, reusing sq
-        if (sgitg == sg) {
-            for (short i = 0; i < D8; ++i) {
-                simdgroup_store(lo[i], sq + i*8, T, 0, false);
-            }
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        // the first simdgroup accumulates the results from the other simdgroups
-        if (sgitg == 0) {
-            for (short j = 0; j < Q; ++j) {
-                const float S0 = ss[j*TF +         0];
-                const float S1 = ss[j*TF + sg*SH + 0];
-
-                const float M0 = ss[j*TF +         1];
-                const float M1 = ss[j*TF + sg*SH + 1];
-
-                M = max(M0, M1);
-
-                const float ms0 = exp(M0 - M);
-                const float ms1 = exp(M1 - M);
-
-                S = S0*ms0 + S1*ms1;
-
-                if (tiisg == 0) {
-                    ss[j*TF + 0] = S;
-                    ss[j*TF + 1] = M;
-
-                    ss[j*TF + C + j        ] = ms0;
-                    ss[j*TF + C + j + sg*SH] = ms1;
-                }
-            }
-
-            // O_0 = diag(ms0)*O_0 + diag(ms1)*O_1
-            {
-                simdgroup_half8x8 t;
-                simdgroup_float8x8 ms0;
-                simdgroup_float8x8 ms1;
-
-                simdgroup_load(ms0, ss + C,         TF, 0, false);
-                simdgroup_load(ms1, ss + C + sg*SH, TF, 0, false);
-
-                for (short i = 0; i < D8; ++i) {
-                    simdgroup_load    (t, sq + i*8, T, 0, false);
-                    simdgroup_multiply(t, ms1, t);
-
-                    simdgroup_multiply_accumulate(lo[i], ms0, lo[i], t);
-                }
-            }
-        }
-    }
-
-    // store result to shared memory (reuse sq)
-    if (sgitg == 0) {
-        for (short i = 0; i < D8; ++i) {
-            simdgroup_store(lo[i], sq + i*8, T, 0, false);
-        }
-    }
-
-    device float4 * dst4 = (device float4 *) dst;
-
-    // final rescale with 1/S and store to global memory
-    if (sgitg == 0) {
-        for (short j = 0; j < Q && iq1 + j < ne01; ++j) {
-            const float S = ss[j*TF + 0];
-
-            for (short i = tiisg; i < D4; i += NW) {
-                dst4[(iq3*ne2*ne1 + iq2 + (iq1 + j)*ne1)*D4 + i] = (float4) sq4[j*T4 + i]/S;
-            }
-        }
-    }
-}
-
-template [[host_name("kernel_flash_attn_ext_f16_h64" )]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<64>;
-template [[host_name("kernel_flash_attn_ext_f16_h80" )]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<80>;
-template [[host_name("kernel_flash_attn_ext_f16_h96" )]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<96>;
-template [[host_name("kernel_flash_attn_ext_f16_h112")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<112>;
-template [[host_name("kernel_flash_attn_ext_f16_h128")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<128>;
-//template [[host_name("kernel_flash_attn_ext_f16_h256")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<256>;
-
-template<int64_t D, int64_t Q = 1, int64_t C = 32> // head size, queries per threadgroup, cache items per threadgroup
-kernel void kernel_flash_attn_ext_vec_f16(
-        device const  char * q,
-        device const  char * k,
-        device const  char * v,
-        device const  char * mask,
-        device       float * dst,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant   int64_t & ne13,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant  uint64_t & nb13,
-        constant  uint64_t & nb21,
-        constant  uint64_t & nb22,
-        constant  uint64_t & nb23,
-        constant  uint64_t & nb31,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant     float & scale,
-        constant     float & max_bias,
-        constant     float & m0,
-        constant     float & m1,
-        constant  uint32_t & n_head_log2,
-        threadgroup   half * shared [[threadgroup(0)]],
-        uint3  tgpig[[threadgroup_position_in_grid]],
-        uint3  tpitg[[thread_position_in_threadgroup]],
-        uint3    ntg[[threads_per_threadgroup]],
-        ushort tiisg[[thread_index_in_simdgroup]],
-        ushort sgitg[[simdgroup_index_in_threadgroup]]) {
-    const short nsg = ntg.y; // number of simdgroups
-
-    const short iq3 = tgpig[2];
-    const short iq2 = tgpig[1];
-    const short iq1 = tgpig[0];
-
-    const short D4 = D/4;
-    const short NW = N_SIMDWIDTH;
-    const short SH = (C + Q); // shared memory per simdgroup in (half)
-
-    const short T  = D + 2*nsg*SH; // shared memory size per query in (half)
-
-    float slope = 1.0f;
-
-    // ALiBi
-    if (max_bias > 0.0f) {
-        const uint32_t h = iq2;
-
-        const float base = h < n_head_log2 ? m0 : m1;
-        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
-
-        slope = pow(base, exp);
-    }
-
-  //threadgroup half   * sq  = (threadgroup half   *) (shared +              0*D); // holds the query data
-    threadgroup half4  * sq4 = (threadgroup half4  *) (shared +              0*D); // same as above but in half4
-    threadgroup float  * ss  = (threadgroup float  *) (shared + 2*sgitg*SH + 1*D); // scratch buffer for attention and diagonal matrix
-    threadgroup float4 * ss4 = (threadgroup float4 *) (shared + 2*sgitg*SH + 1*D); // same as above but in half4
-    threadgroup half4  * sr4 = (threadgroup half4  *) (shared +   sgitg*D  + 1*T); // scratch buffer for the results
-
-    // store the result for all queries in local memory in 8x8 matrices (the O matrix from the paper)
-    half4 lo[D4/NW];
-
-    // load heads from Q to shared memory
-    device const float4 * q4 = (device const float4 *) ((device const char *) q + (iq1*nb01 + iq2*nb02 + iq3*nb03));
-
-    for (short i = tiisg; i < D4; i += NW) {
-        if (iq1 < ne01) {
-            sq4[i] = (half4) q4[i];
-        } else {
-            sq4[i] = 0.0h;
-        }
-    }
-
-    // zero out lo
-    for (short i = tiisg; i < D4; i += NW) {
-        lo[i/NW] = 0.0h;
-    }
-
-    // zero out shared memory SH
-    for (short i = tiisg; i < SH/4; i += NW) {
-        ss4[i] = 0.0h;
-    }
-
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-
-    {
-        float S = { 0.0h };
-        float M = { -FLT_MAX/2 };
-
-        // assume K and V are same shape
-        const short ne22 = ne12;
-        const short ne23 = ne13;
-
-        // broadcast
-        const short rk2 = ne02/ne12;
-        const short rk3 = ne03/ne13;
-
-        const short rv2 = ne02/ne22;
-        const short rv3 = ne03/ne23;
-
-        // k indices
-        const short ik2 = iq2 / rk2;
-        const short ik3 = iq3 / rk3;
-
-        // v indices
-        const short iv2 = iq2 / rv2;
-        const short iv3 = iq3 / rv3;
-
-        // load the queries from shared memory into local memory
-        half4 mq[D4];
-
-        for (short ii = 0; ii < D4; ii += NW) {
-            short i = ii + tiisg;
-            mq[i] = sq4[i];
-        }
-
-        // pointer to the mask
-        device const half4 * mp4 = (device const half4 *) (mask + iq1*nb31);
-
-        // loop over the KV cache
-        // each simdgroup handles blocks of Q rows and C columns
-        for (int ic0 = 0; ic0 < ne11; ic0 += C*nsg) {
-            const int ic = ic0 + C*sgitg;
-            if (ic >= ne11) {
-                break;
-            }
-
-            // Q*K^T
-            {
-#pragma unroll
-                for (short cc = 0; cc < C/4; ++cc) {
-                    float4 mqk = { 0.0h };
-
-                    device const half4 * pk4 = (device const half4 *) ((device const char *) k + ((ic + 4*cc)*nb11 + ik2*nb12 + ik3*nb13));
-
-#pragma unroll
-                    for (short ii = 0; ii < D4; ii += NW) {
-                        const short i = ii + tiisg;
-
-                        half4x4 mk;
-                        mk[0] = pk4[i + 0*(nb11/8)];
-                        mk[1] = pk4[i + 1*(nb11/8)];
-                        mk[2] = pk4[i + 2*(nb11/8)];
-                        mk[3] = pk4[i + 3*(nb11/8)];
-
-                        mqk += (float4) (mq[i] * mk);
-                    }
-
-                    // reduce the results from the threads in the simdgroup
-                    mqk += simd_shuffle_down(mqk, 16);
-                    mqk += simd_shuffle_down(mqk,  8);
-                    mqk += simd_shuffle_down(mqk,  4);
-                    mqk += simd_shuffle_down(mqk,  2);
-                    mqk += simd_shuffle_down(mqk,  1);
-
-                    // mqk = mqk*scale + mask*slope
-                    if (tiisg == 0) {
-                        mqk = mqk*scale + ((mask != q) ? ((float4) mp4[ic/4 + cc])*slope : (float4) 0.0f);
-
-                        ss4[cc] = mqk;
-                    }
-                }
-            }
-
-            // online softmax
-            {
-                const short p = tiisg;
-
-                const float m = M;
-                const float s = ss[p];
-
-                M = simd_max(max(M, s));
-
-                const float ms = exp(m - M);
-                const float vs = exp(s - M);
-
-                S = S*ms + simd_sum(vs);
-
-                // the P matrix from the paper (Q rows, C columns)
-                ss[p] = vs;
-
-                // O = diag(ms)*O
-#pragma unroll
-                for (short ii = 0; ii < D4; ii += NW) {
-                    const short i = ii + tiisg;
-                    lo[i/NW] *= ms;
-                }
-            }
-
-            // O = O + (Q*K^T)*V
-            {
-#pragma unroll
-                for (short cc = 0; cc < C/4; ++cc) {
-                    device const half4 * pv4 = (device const half4 *) ((device const char *) v + ((ic + 4*cc)*nb21 + iv2*nb22 + iv3*nb23));
-
-#pragma unroll
-                    for (short ii = 0; ii < D4; ii += NW) {
-                        const short i = ii + tiisg;
-
-                        lo[i/NW] += pv4[i + 0*(nb21/8)] * ss[4*cc + 0];
-                        lo[i/NW] += pv4[i + 1*(nb21/8)] * ss[4*cc + 1];
-                        lo[i/NW] += pv4[i + 2*(nb21/8)] * ss[4*cc + 2];
-                        lo[i/NW] += pv4[i + 3*(nb21/8)] * ss[4*cc + 3];
-                    }
-                }
-            }
-
-        }
-
-        // these are needed for reducing the results from the simdgroups (reuse the ss buffer)
-        if (tiisg == 0) {
-            ss[0] = S;
-            ss[1] = M;
-        }
-    }
-
-    // store results to shared memory
-    for (short ii = 0; ii < D4; ii += NW) {
-        short i = ii + tiisg;
-        sr4[i] = lo[ii/NW];
-    }
-
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-
-    // parallel reduce
-    for (short r = nsg/2; r > 0; r >>= 1) {
-        if (sgitg < r) {
-            const float S0 = ss[       0];
-            const float S1 = ss[r*SH + 0];
-
-            const float M0 = ss[       1];
-            const float M1 = ss[r*SH + 1];
-
-            const float M = max(M0, M1);
-
-            const float ms0 = exp(M0 - M);
-            const float ms1 = exp(M1 - M);
-
-            const float S = S0*ms0 + S1*ms1;
-
-            if (tiisg == 0) {
-                ss[0] = S;
-                ss[1] = M;
-            }
-
-            // O_0 = diag(ms0)*O_0 + diag(ms1)*O_1
-            for (short ii = 0; ii < D4; ii += NW) {
-                short i = ii + tiisg;
-                sr4[i] = sr4[i]*ms0 + sr4[i + r*D4]*ms1;
-            }
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-    }
-
-    device float4 * dst4 = (device float4 *) dst;
-
-    // final rescale with 1/S and store to global memory
-    if (sgitg == 0) {
-        const float S = ss[0];
-
-        for (short ii = 0; ii < D4; ii += NW) {
-            short i = ii + tiisg;
-            dst4[(iq3*ne2*ne1 + iq2 + (iq1)*ne1)*D4 + i] = (float4) sr4[i]/S;
-        }
-    }
-}
-
-template [[host_name("kernel_flash_attn_ext_vec_f16_h128")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_vec_f16<128>;
-//template [[host_name("kernel_flash_attn_ext_vec_f16_h256")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_vec_f16<256>;
-
-kernel void kernel_cpy_f16_f16(
-        device  const half * src0,
-        device        half * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant   int64_t & ne3,
-        constant  uint64_t & nb0,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        constant  uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig[2];
-    const int64_t i02 = tgpig[1];
-    const int64_t i01 = tgpig[0];
-
-    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
-
-    const int64_t i3 = n / (ne2*ne1*ne0);
-    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
-    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
-    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0);
-
-    device half * dst_data = (device half *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-    for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) {
-        device const half * src = (device half *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-        dst_data[i00] = src[0];
-    }
-}
-
-kernel void kernel_cpy_f16_f32(
-        device  const half * src0,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant   int64_t & ne3,
-        constant  uint64_t & nb0,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        constant  uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig[2];
-    const int64_t i02 = tgpig[1];
-    const int64_t i01 = tgpig[0];
-
-    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
-
-    const int64_t i3 = n / (ne2*ne1*ne0);
-    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
-    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
-    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0);
-
-    device float * dst_data = (device float *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-    for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) {
-        device const half * src = (device half *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-        dst_data[i00] = src[0];
-    }
-}
-
-kernel void kernel_cpy_f32_f16(
-        device const float * src0,
-        device        half * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant   int64_t & ne3,
-        constant  uint64_t & nb0,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        constant  uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig[2];
-    const int64_t i02 = tgpig[1];
-    const int64_t i01 = tgpig[0];
-
-    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
-
-    const int64_t i3 = n / (ne2*ne1*ne0);
-    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
-    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
-    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0);
-
-    device half * dst_data = (device half *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-    for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) {
-        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-
-        dst_data[i00] = src[0];
-    }
-}
-
-kernel void kernel_cpy_f32_f32(
-        device const float * src0,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant   int64_t & ne3,
-        constant  uint64_t & nb0,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        constant  uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig[2];
-    const int64_t i02 = tgpig[1];
-    const int64_t i01 = tgpig[0];
-
-    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
-
-    const int64_t i3 = n / (ne2*ne1*ne0);
-    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
-    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
-    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0);
-
-    device float * dst_data = (device float *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-    for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) {
-        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-
-        dst_data[i00] = src[0];
-    }
-}
-
-kernel void kernel_cpy_f32_q8_0(
-        device const float * src0,
-        device        void * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant   int64_t & ne3,
-        constant  uint64_t & nb0,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        constant  uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig[2];
-    const int64_t i02 = tgpig[1];
-    const int64_t i01 = tgpig[0];
-
-    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
-
-    const int64_t i3 = n / (ne2*ne1*ne0);
-    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
-    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
-    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK8_0;
-
-    device block_q8_0 * dst_data = (device block_q8_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-    for (int64_t i00 = tpitg.x*QK8_0; i00 < ne00; i00 += ntg.x*QK8_0) {
-        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-
-        float amax = 0.0f; // absolute max
-
-        for (int j = 0; j < QK8_0; j++) {
-            const float v = src[j];
-            amax = MAX(amax, fabs(v));
-        }
-
-        const float d = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        dst_data[i00/QK8_0].d = d;
-
-        for (int j = 0; j < QK8_0; ++j) {
-            const float x0 = src[j]*id;
-
-            dst_data[i00/QK8_0].qs[j] = round(x0);
-        }
-    }
-}
-
-kernel void kernel_cpy_f32_q4_0(
-        device const float * src0,
-        device        void * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant   int64_t & ne3,
-        constant  uint64_t & nb0,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        constant  uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig[2];
-    const int64_t i02 = tgpig[1];
-    const int64_t i01 = tgpig[0];
-
-    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
-
-    const int64_t i3 = n / (ne2*ne1*ne0);
-    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
-    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
-    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_0;
-
-    device block_q4_0 * dst_data = (device block_q4_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-    for (int64_t i00 = tpitg.x*QK4_0; i00 < ne00; i00 += ntg.x*QK4_0) {
-        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-
-        float amax = 0.0f; // absolute max
-        float max  = 0.0f;
-
-        for (int j = 0; j < QK4_0; j++) {
-            const float v = src[j];
-            if (amax < fabs(v)) {
-                amax = fabs(v);
-                max  = v;
-            }
-        }
-
-        const float d = max / -8;
-        const float id = d ? 1.0f/d : 0.0f;
-
-        dst_data[i00/QK4_0].d = d;
-
-        for (int j = 0; j < QK4_0/2; ++j) {
-            const float x0 = src[0       + j]*id;
-            const float x1 = src[QK4_0/2 + j]*id;
-
-            const uint8_t xi0 = MIN(15, (int8_t)(x0 + 8.5f));
-            const uint8_t xi1 = MIN(15, (int8_t)(x1 + 8.5f));
-
-            dst_data[i00/QK4_0].qs[j]  = xi0;
-            dst_data[i00/QK4_0].qs[j] |= xi1 << 4;
-        }
-    }
-}
-
-kernel void kernel_cpy_f32_q4_1(
-        device const float * src0,
-        device        void * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant   int64_t & ne3,
-        constant  uint64_t & nb0,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        constant  uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig[2];
-    const int64_t i02 = tgpig[1];
-    const int64_t i01 = tgpig[0];
-
-    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
-
-    const int64_t i3 = n / (ne2*ne1*ne0);
-    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
-    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
-    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_1;
-
-    device block_q4_1 * dst_data = (device block_q4_1 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-    for (int64_t i00 = tpitg.x*QK4_1; i00 < ne00; i00 += ntg.x*QK4_1) {
-        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-
-        float min = FLT_MAX;
-        float max = -FLT_MAX;
-
-        for (int j = 0; j < QK4_1; j++) {
-            const float v = src[j];
-            if (min > v) min = v;
-            if (max < v) max = v;
-        }
-
-        const float d = (max - min) / ((1 << 4) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        dst_data[i00/QK4_1].d = d;
-        dst_data[i00/QK4_1].m = min;
-
-        for (int j = 0; j < QK4_1/2; ++j) {
-            const float x0 = (src[0       + j] - min)*id;
-            const float x1 = (src[QK4_1/2 + j] - min)*id;
-
-            const uint8_t xi0 = MIN(15, (int8_t)(x0 + 0.5f));
-            const uint8_t xi1 = MIN(15, (int8_t)(x1 + 0.5f));
-
-            dst_data[i00/QK4_1].qs[j]  = xi0;
-            dst_data[i00/QK4_1].qs[j] |= xi1 << 4;
-        }
-    }
-}
-
-kernel void kernel_cpy_f32_q5_0(
-        device const float * src0,
-        device        void * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant   int64_t & ne3,
-        constant  uint64_t & nb0,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        constant  uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig[2];
-    const int64_t i02 = tgpig[1];
-    const int64_t i01 = tgpig[0];
-
-    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
-
-    const int64_t i3 = n / (ne2*ne1*ne0);
-    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
-    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
-    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK5_0;
-
-    device block_q5_0 * dst_data = (device block_q5_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-    for (int64_t i00 = tpitg.x*QK5_0; i00 < ne00; i00 += ntg.x*QK5_0) {
-        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-
-        float amax = 0.0f; // absolute max
-        float max  = 0.0f;
-
-        for (int j = 0; j < QK5_0; j++) {
-            const float v = src[j];
-            if (amax < fabs(v)) {
-                amax = fabs(v);
-                max  = v;
-            }
-        }
-
-        const float d = max / -16;
-        const float id = d ? 1.0f/d : 0.0f;
-
-        dst_data[i00/QK5_0].d = d;
-
-        uint32_t qh = 0;
-        for (int j = 0; j < QK5_0/2; ++j) {
-            const float x0 = src[0       + j]*id;
-            const float x1 = src[QK5_0/2 + j]*id;
-
-            const uint8_t xi0 = MIN(31, (int8_t)(x0 + 16.5f));
-            const uint8_t xi1 = MIN(31, (int8_t)(x1 + 16.5f));
-
-            dst_data[i00/QK5_0].qs[j] = (xi0 & 0xf) | ((xi1 & 0xf) << 4);
-            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
-            qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2);
-        }
-        thread const uint8_t * qh8 = (thread const uint8_t *)&qh;
-        for (int j = 0; j < 4; ++j) {
-            dst_data[i00/QK5_0].qh[j] = qh8[j];
-        }
-    }
-}
-
-kernel void kernel_cpy_f32_q5_1(
-        device const float * src0,
-        device        void * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant   int64_t & ne3,
-        constant  uint64_t & nb0,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        constant  uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig[2];
-    const int64_t i02 = tgpig[1];
-    const int64_t i01 = tgpig[0];
-
-    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
-
-    const int64_t i3 = n / (ne2*ne1*ne0);
-    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
-    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
-    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK5_1;
-
-    device block_q5_1 * dst_data = (device block_q5_1 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-    for (int64_t i00 = tpitg.x*QK5_1; i00 < ne00; i00 += ntg.x*QK5_1) {
-        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-
-        float max = src[0];
-        float min = src[0];
-
-        for (int j = 1; j < QK5_1; j++) {
-            const float v = src[j];
-            min = v < min ? v : min;
-            max = v > max ? v : max;
-        }
-
-        const float d = (max - min) / 31;
-        const float id = d ? 1.0f/d : 0.0f;
-
-        dst_data[i00/QK5_1].d = d;
-        dst_data[i00/QK5_1].m = min;
-
-        uint32_t qh = 0;
-        for (int j = 0; j < QK5_1/2; ++j) {
-            const float x0 = (src[0       + j] - min)*id;
-            const float x1 = (src[QK5_1/2 + j] - min)*id;
-
-            const uint8_t xi0 = (uint8_t)(x0 + 0.5f);
-            const uint8_t xi1 = (uint8_t)(x1 + 0.5f);
-
-            dst_data[i00/QK5_1].qs[j] = (xi0 & 0xf) | ((xi1 & 0xf) << 4);
-            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
-            qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_1/2);
-        }
-        thread const uint8_t * qh8 = (thread const uint8_t *)&qh;
-        for (int j = 0; j < 4; ++j) {
-            dst_data[i00/QK5_1].qh[j] = qh8[j];
-        }
-    }
-}
-
-static inline int best_index_int8(int n, constant float * val, float x) {
-    if (x <= val[0]) return 0;
-    if (x >= val[n-1]) return n-1;
-    int ml = 0, mu = n-1;
-    while (mu-ml > 1) {
-        int mav = (ml+mu)/2;
-        if (x < val[mav]) mu = mav; else ml = mav;
-    }
-    return x - val[mu-1] < val[mu] - x ? mu-1 : mu;
-}
-
-constexpr constant static float kvalues_iq4nl_f[16] = {
-    -127.f, -104.f, -83.f, -65.f, -49.f, -35.f, -22.f, -10.f, 1.f, 13.f, 25.f, 38.f, 53.f, 69.f, 89.f, 113.f
-};
-
-kernel void kernel_cpy_f32_iq4_nl(
-        device const float * src0,
-        device        void * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant   int64_t & ne03,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant  uint64_t & nb03,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   int64_t & ne2,
-        constant   int64_t & ne3,
-        constant  uint64_t & nb0,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        constant  uint64_t & nb3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint3 tpitg[[thread_position_in_threadgroup]],
-        uint3   ntg[[threads_per_threadgroup]]) {
-    const int64_t i03 = tgpig[2];
-    const int64_t i02 = tgpig[1];
-    const int64_t i01 = tgpig[0];
-
-    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
-
-    const int64_t i3 = n / (ne2*ne1*ne0);
-    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
-    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
-    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_NL;
-
-    device block_iq4_nl * dst_data = (device block_iq4_nl *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-    for (int64_t i00 = tpitg.x*QK4_NL; i00 < ne00; i00 += ntg.x*QK4_NL) {
-        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
-
-        float amax = 0.0f; // absolute max
-        float max  = 0.0f;
-
-        for (int j = 0; j < QK4_0; j++) {
-            const float v = src[j];
-            if (amax < fabs(v)) {
-                amax = fabs(v);
-                max  = v;
-            }
-        }
-
-        const float d = max / kvalues_iq4nl_f[0];
-        const float id = d ? 1.0f/d : 0.0f;
-
-        float sumqx = 0, sumq2 = 0;
-        for (int j = 0; j < QK4_NL/2; ++j) {
-            const float x0 = src[0        + j]*id;
-            const float x1 = src[QK4_NL/2 + j]*id;
-
-            const uint8_t xi0 = best_index_int8(16, kvalues_iq4nl_f, x0);
-            const uint8_t xi1 = best_index_int8(16, kvalues_iq4nl_f, x1);
-
-            dst_data[i00/QK4_NL].qs[j] = xi0 | (xi1 << 4);
-
-            const float v0 = kvalues_iq4nl_f[xi0];
-            const float v1 = kvalues_iq4nl_f[xi1];
-            const float w0 = src[0        + j]*src[0        + j];
-            const float w1 = src[QK4_NL/2 + j]*src[QK4_NL/2 + j];
-            sumqx += w0*v0*src[j] + w1*v1*src[QK4_NL/2 + j];
-            sumq2 += w0*v0*v0 + w1*v1*v1;
-
-        }
-
-        dst_data[i00/QK4_NL].d = sumq2 > 0 ? sumqx/sumq2 : d;
-
-    }
-}
-
-kernel void kernel_concat(
-    device  const char * src0,
-    device  const char * src1,
-    device        char * dst,
-    constant   int64_t & ne00,
-    constant   int64_t & ne01,
-    constant   int64_t & ne02,
-    constant   int64_t & ne03,
-    constant  uint64_t & nb00,
-    constant  uint64_t & nb01,
-    constant  uint64_t & nb02,
-    constant  uint64_t & nb03,
-    constant   int64_t & ne10,
-    constant   int64_t & ne11,
-    constant   int64_t & ne12,
-    constant   int64_t & ne13,
-    constant  uint64_t & nb10,
-    constant  uint64_t & nb11,
-    constant  uint64_t & nb12,
-    constant  uint64_t & nb13,
-    constant   int64_t & ne0,
-    constant   int64_t & ne1,
-    constant   int64_t & ne2,
-    constant   int64_t & ne3,
-    constant  uint64_t & nb0,
-    constant  uint64_t & nb1,
-    constant  uint64_t & nb2,
-    constant  uint64_t & nb3,
-    constant   int32_t & dim,
-    uint3 tgpig[[threadgroup_position_in_grid]],
-    uint3 tpitg[[thread_position_in_threadgroup]],
-    uint3   ntg[[threads_per_threadgroup]]) {
-
-    const int64_t i3 = tgpig.z;
-    const int64_t i2 = tgpig.y;
-    const int64_t i1 = tgpig.x;
-
-    int64_t o[4] = {0, 0, 0, 0};
-    o[dim] = dim == 0 ? ne00 : (dim == 1 ? ne01 : (dim == 2 ? ne02 : ne03));
-
-    device const float * x;
-
-    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
-        if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) {
-            x = (device const float *)(src0 + (i3       )*nb03 + (i2       )*nb02 + (i1       )*nb01 + (i0       )*nb00);
-        } else {
-            x = (device const float *)(src1 + (i3 - o[3])*nb13 + (i2 - o[2])*nb12 + (i1 - o[1])*nb11 + (i0 - o[0])*nb10);
-        }
-
-        device float * y = (device float *)(dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
-
-        *y = *x;
-    }
-}
-
-void kernel_mul_mv_q2_K_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const int nb = ne00/QK_K;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_q2_K * x = (device const block_q2_K *) src0 + ib_row + offset0;
-    device const float      * y = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[32];
-    float sumf[N_DST]={0.f}, all_sum;
-
-    const int step = sizeof(block_q2_K) * nb;
-
-    const int ix = tiisg/8;  // 0...3
-    const int it = tiisg%8;  // 0...7
-    const int iq = it/4;     // 0 or 1
-    const int ir = it%4;     // 0...3
-    const int is = (8*ir)/16;// 0 or 1
-
-    device const float * y4 = y + ix * QK_K + 128 * iq + 8 * ir;
-
-    for (int ib = ix; ib < nb; ib += 4) {
-
-        float4 sumy = {0.f, 0.f, 0.f, 0.f};
-        for (int i = 0; i < 8; ++i) {
-            yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0];
-            yl[i+ 8] = y4[i+32]; sumy[1] += yl[i+ 8];
-            yl[i+16] = y4[i+64]; sumy[2] += yl[i+16];
-            yl[i+24] = y4[i+96]; sumy[3] += yl[i+24];
-        }
-
-        device const uint8_t  * sc = (device const uint8_t  *)x[ib].scales + 8*iq + is;
-        device const uint16_t * qs = (device const uint16_t *)x[ib].qs + 16 * iq + 4 * ir;
-        device const half     * dh = &x[ib].d;
-
-        for (int row = 0; row < N_DST; row++) {
-
-            float4 acc1 = {0.f, 0.f, 0.f, 0.f};
-            float4 acc2 = {0.f, 0.f, 0.f, 0.f};
-            for (int i = 0; i < 8; i += 2) {
-                acc1[0] += yl[i+ 0] * (qs[i/2] & 0x0003);
-                acc2[0] += yl[i+ 1] * (qs[i/2] & 0x0300);
-                acc1[1] += yl[i+ 8] * (qs[i/2] & 0x000c);
-                acc2[1] += yl[i+ 9] * (qs[i/2] & 0x0c00);
-                acc1[2] += yl[i+16] * (qs[i/2] & 0x0030);
-                acc2[2] += yl[i+17] * (qs[i/2] & 0x3000);
-                acc1[3] += yl[i+24] * (qs[i/2] & 0x00c0);
-                acc2[3] += yl[i+25] * (qs[i/2] & 0xc000);
-            }
-            float dall = dh[0];
-            float dmin = dh[1] * 1.f/16.f;
-            sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc2[0]) * (sc[0] & 0xF) * 1.f/ 1.f +
-                                 (acc1[1] + 1.f/256.f * acc2[1]) * (sc[2] & 0xF) * 1.f/ 4.f +
-                                 (acc1[2] + 1.f/256.f * acc2[2]) * (sc[4] & 0xF) * 1.f/16.f +
-                                 (acc1[3] + 1.f/256.f * acc2[3]) * (sc[6] & 0xF) * 1.f/64.f) -
-                         dmin * (sumy[0] * (sc[0] & 0xF0) + sumy[1] * (sc[2] & 0xF0) + sumy[2] * (sc[4] & 0xF0) + sumy[3] * (sc[6] & 0xF0));
-
-            qs += step/2;
-            sc += step;
-            dh += step/2;
-        }
-
-        y4 += 4 * QK_K;
-    }
-
-    for (int row = 0; row < N_DST; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_q2_K_f32")]]
-kernel void kernel_mul_mv_q2_K_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_q2_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
-}
-
-void kernel_mul_mv_q3_K_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const int nb = ne00/QK_K;
-
-    const int64_t r0 = tgpig.x;
-    const int64_t r1 = tgpig.y;
-    const int64_t im = tgpig.z;
-
-    const int first_row = (r0 * N_SIMDGROUP + sgitg) * 2;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_q3_K * x = (device const block_q3_K *) src0 + first_row*nb + offset0;
-    device const float     * yy = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[32];
-
-    //const uint16_t kmask1 = 0x3030;
-    //const uint16_t kmask2 = 0x0f0f;
-
-    const int tid = tiisg/4;
-    const int ix  = tiisg%4;
-    const int ip  = tid/4;          // 0 or 1
-    const int il  = 2*((tid%4)/2);  // 0 or 2
-    const int ir  = tid%2;
-    const int n   = 8;
-    const int l0  = n*ir;
-
-    // One would think that the Metal compiler would figure out that ip and il can only have
-    // 4 possible states, and optimize accordingly. Well, no. It needs help, and we do it
-    // with these two tales.
-    //
-    // Possible masks for the high bit
-    const ushort4 mm[4] = {{0x0001, 0x0100, 0x0002, 0x0200},  // ip = 0, il = 0
-                           {0x0004, 0x0400, 0x0008, 0x0800},  // ip = 0, il = 2
-                           {0x0010, 0x1000, 0x0020, 0x2000},  // ip = 1, il = 0
-                           {0x0040, 0x4000, 0x0080, 0x8000}}; // ip = 1, il = 2
-
-    // Possible masks for the low 2 bits
-    const int4 qm[2] = {{0x0003, 0x0300, 0x000c, 0x0c00}, {0x0030, 0x3000, 0x00c0, 0xc000}};
-
-    const ushort4 hm = mm[2*ip + il/2];
-
-    const int shift = 2*il;
-    const float    v1 = il == 0 ? 4.f : 64.f;
-    const float    v2 = 4.f * v1;
-
-    const uint16_t s_shift1 = 4*ip;
-    const uint16_t s_shift2 = s_shift1 + il;
-
-    const int q_offset = 32*ip + l0;
-    const int y_offset = 128*ip + 32*il + l0;
-
-    const int step = sizeof(block_q3_K) * nb / 2;
-
-    device const float * y1 = yy + ix*QK_K + y_offset;
-
-    uint32_t scales32, aux32;
-    thread uint16_t * scales16 = (thread uint16_t *)&scales32;
-    thread const int8_t * scales = (thread const int8_t *)&scales32;
-
-    float sumf1[2] = {0.f};
-    float sumf2[2] = {0.f};
-    for (int i = ix; i < nb; i += 4) {
-
-        for (int l = 0; l < 8; ++l) {
-            yl[l+ 0] = y1[l+ 0];
-            yl[l+ 8] = y1[l+16];
-            yl[l+16] = y1[l+32];
-            yl[l+24] = y1[l+48];
-        }
-
-        device const uint16_t * q = (device const uint16_t *)(x[i].qs + q_offset);
-        device const uint16_t * h = (device const uint16_t *)(x[i].hmask + l0);
-        device const uint16_t * a = (device const uint16_t *)(x[i].scales);
-        device const half * dh = &x[i].d;
-
-        for (int row = 0; row < 2; ++row) {
-
-            const float d_all = (float)dh[0];
-
-            scales16[0] = a[4];
-            scales16[1] = a[5];
-            aux32 = ((scales32 >> s_shift2) << 4) & 0x30303030;
-            scales16[0] = a[il+0];
-            scales16[1] = a[il+1];
-            scales32 = ((scales32 >> s_shift1) & 0x0f0f0f0f) | aux32;
-
-            float s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0;
-            for (int l = 0; l < n; l += 2) {
-                const int32_t qs = q[l/2];
-                s1 += yl[l+0] * (qs & qm[il/2][0]);
-                s2 += yl[l+1] * (qs & qm[il/2][1]);
-                s3 += ((h[l/2] & hm[0]) ? 0.f : yl[l+0]) + ((h[l/2] & hm[1]) ? 0.f : yl[l+1]);
-                s4 += yl[l+16] * (qs & qm[il/2][2]);
-                s5 += yl[l+17] * (qs & qm[il/2][3]);
-                s6 += ((h[l/2] & hm[2]) ? 0.f : yl[l+16]) + ((h[l/2] & hm[3]) ? 0.f : yl[l+17]);
-            }
-            float d1 = d_all * (s1 + 1.f/256.f * s2 - s3*v1);
-            float d2 = d_all * (s4 + 1.f/256.f * s5 - s6*v2);
-            sumf1[row] += d1 * (scales[0] - 32);
-            sumf2[row] += d2 * (scales[2] - 32);
-
-            s1 = s2 = s3 = s4 = s5 = s6 = 0;
-            for (int l = 0; l < n; l += 2) {
-                const int32_t qs = q[l/2+8];
-                s1 += yl[l+8] * (qs & qm[il/2][0]);
-                s2 += yl[l+9] * (qs & qm[il/2][1]);
-                s3 += ((h[l/2+8] & hm[0]) ? 0.f : yl[l+8]) + ((h[l/2+8] & hm[1]) ? 0.f : yl[l+9]);
-                s4 += yl[l+24] * (qs & qm[il/2][2]);
-                s5 += yl[l+25] * (qs & qm[il/2][3]);
-                s6 += ((h[l/2+8] & hm[2]) ? 0.f : yl[l+24]) + ((h[l/2+8] & hm[3]) ? 0.f : yl[l+25]);
-            }
-            d1 = d_all * (s1 + 1.f/256.f * s2 - s3*v1);
-            d2 = d_all * (s4 + 1.f/256.f * s5 - s6*v2);
-            sumf1[row] += d1 * (scales[1] - 32);
-            sumf2[row] += d2 * (scales[3] - 32);
-
-            q  += step;
-            h  += step;
-            a  += step;
-            dh += step;
-
-        }
-
-        y1 += 4 * QK_K;
-
-    }
-
-    for (int row = 0; row < 2; ++row) {
-        const float sumf = (sumf1[row] + 0.25f * sumf2[row]) / (1 << shift);
-        sumf1[row] = simd_sum(sumf);
-    }
-    if (tiisg == 0) {
-        for (int row = 0; row < 2; ++row) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = sumf1[row];
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_q3_K_f32")]]
-kernel void kernel_mul_mv_q3_K_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_q3_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
-}
-
-void kernel_mul_mv_q4_K_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const uint16_t kmask1 = 0x3f3f;
-    const uint16_t kmask2 = 0x0f0f;
-    const uint16_t kmask3 = 0xc0c0;
-
-    const int ix = tiisg/8;  // 0...3
-    const int it = tiisg%8;  // 0...7
-    const int iq = it/4;     // 0 or 1
-    const int ir = it%4;     // 0...3
-
-    const int nb = ne00/QK_K;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-    //const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
-    const int first_row = r0 * N_DST;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_q4_K * x = (device const block_q4_K *) src0 + ib_row + offset0;
-    device const float      * y = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[16];
-    float yh[16];
-    float sumf[N_DST]={0.f}, all_sum;
-
-    const int step = sizeof(block_q4_K) * nb / 2;
-
-    device const float * y4 = y + ix * QK_K + 64 * iq + 8 * ir;
-
-    uint16_t sc16[4];
-    thread const uint8_t * sc8 = (thread const uint8_t *)sc16;
-
-    for (int ib = ix; ib < nb; ib += 4) {
-
-        float4 sumy = {0.f, 0.f, 0.f, 0.f};
-        for (int i = 0; i < 8; ++i) {
-            yl[i+0] = y4[i+  0]; sumy[0] += yl[i+0];
-            yl[i+8] = y4[i+ 32]; sumy[1] += yl[i+8];
-            yh[i+0] = y4[i+128]; sumy[2] += yh[i+0];
-            yh[i+8] = y4[i+160]; sumy[3] += yh[i+8];
-        }
-
-        device const uint16_t * sc = (device const uint16_t *)x[ib].scales + iq;
-        device const uint16_t * q1 = (device const uint16_t *)x[ib].qs + 16 * iq + 4 * ir;
-        device const half     * dh = &x[ib].d;
-
-        for (int row = 0; row < N_DST; row++) {
-
-            sc16[0] = sc[0] & kmask1;
-            sc16[1] = sc[2] & kmask1;
-            sc16[2] = ((sc[4] >> 0) & kmask2) | ((sc[0] & kmask3) >> 2);
-            sc16[3] = ((sc[4] >> 4) & kmask2) | ((sc[2] & kmask3) >> 2);
-
-            device const uint16_t * q2 = q1 + 32;
-
-            float4 acc1 = {0.f, 0.f, 0.f, 0.f};
-            float4 acc2 = {0.f, 0.f, 0.f, 0.f};
-            for (int i = 0; i < 8; i += 2) {
-                acc1[0] += yl[i+0] * (q1[i/2] & 0x000F);
-                acc1[1] += yl[i+1] * (q1[i/2] & 0x0F00);
-                acc1[2] += yl[i+8] * (q1[i/2] & 0x00F0);
-                acc1[3] += yl[i+9] * (q1[i/2] & 0xF000);
-                acc2[0] += yh[i+0] * (q2[i/2] & 0x000F);
-                acc2[1] += yh[i+1] * (q2[i/2] & 0x0F00);
-                acc2[2] += yh[i+8] * (q2[i/2] & 0x00F0);
-                acc2[3] += yh[i+9] * (q2[i/2] & 0xF000);
-            }
-
-            float dall = dh[0];
-            float dmin = dh[1];
-            sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc1[1]) * sc8[0] +
-                                 (acc1[2] + 1.f/256.f * acc1[3]) * sc8[1] * 1.f/16.f +
-                                 (acc2[0] + 1.f/256.f * acc2[1]) * sc8[4] +
-                                 (acc2[2] + 1.f/256.f * acc2[3]) * sc8[5] * 1.f/16.f) -
-                         dmin * (sumy[0] * sc8[2] + sumy[1] * sc8[3] + sumy[2] * sc8[6] + sumy[3] * sc8[7]);
-
-            q1 += step;
-            sc += step;
-            dh += step;
-        }
-
-        y4 += 4 * QK_K;
-    }
-
-    for (int row = 0; row < N_DST; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_q4_K_f32")]]
-kernel void kernel_mul_mv_q4_K_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint tiisg[[thread_index_in_simdgroup]],
-        uint sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_q4_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
-}
-
-void kernel_mul_mv_q5_K_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const int nb = ne00/QK_K;
-
-    const int64_t r0 = tgpig.x;
-    const int64_t r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * N_SIMDGROUP + sgitg) * 2;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_q5_K * x = (device const block_q5_K *) src0 + first_row*nb + offset0;
-    device const float     * yy = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float sumf[2]={0.f};
-
-    const int step = sizeof(block_q5_K) * nb;
-
-    float yl[16], yh[16];
-
-    const uint16_t kmask1 = 0x3f3f;
-    const uint16_t kmask2 = 0x0f0f;
-    const uint16_t kmask3 = 0xc0c0;
-
-    const int tid = tiisg/4;
-    const int ix  = tiisg%4;
-    const int iq  = tid/4;
-    const int ir  = tid%4;
-    const int n   = 8;
-
-    const int l0 = n*ir;
-    const int q_offset = 32*iq + l0;
-    const int y_offset = 64*iq + l0;
-
-    const uint8_t hm1 = 1u << (2*iq);
-    const uint8_t hm2 = hm1 << 1;
-    const uint8_t hm3 = hm1 << 4;
-    const uint8_t hm4 = hm2 << 4;
-
-    uint16_t sc16[4];
-    thread const uint8_t * sc8 = (thread const uint8_t *)sc16;
-
-    device const float * y1 = yy + ix*QK_K + y_offset;
-
-    for (int i = ix; i < nb; i += 4) {
-
-        device const uint8_t * q1 = x[i].qs + q_offset;
-        device const uint8_t * qh = x[i].qh + l0;
-        device const half * dh = &x[i].d;
-        device const uint16_t * a = (device const uint16_t *)x[i].scales + iq;
-
-        device const float * y2 = y1 + 128;
-        float4 sumy = {0.f, 0.f, 0.f, 0.f};
-        for (int l = 0; l < 8; ++l) {
-            yl[l+0] = y1[l+ 0]; sumy[0] += yl[l+0];
-            yl[l+8] = y1[l+32]; sumy[1] += yl[l+8];
-            yh[l+0] = y2[l+ 0]; sumy[2] += yh[l+0];
-            yh[l+8] = y2[l+32]; sumy[3] += yh[l+8];
-        }
-
-        for (int row = 0; row < 2; ++row) {
-
-            device const uint8_t * q2 = q1 + 64;
-
-            sc16[0] = a[0] & kmask1;
-            sc16[1] = a[2] & kmask1;
-            sc16[2] = ((a[4] >> 0) & kmask2) | ((a[0] & kmask3) >> 2);
-            sc16[3] = ((a[4] >> 4) & kmask2) | ((a[2] & kmask3) >> 2);
-
-            float4 acc1 = {0.f};
-            float4 acc2 = {0.f};
-            for (int l = 0; l < n; ++l) {
-                uint8_t h = qh[l];
-                acc1[0] += yl[l+0] * (q1[l] & 0x0F);
-                acc1[1] += yl[l+8] * (q1[l] & 0xF0);
-                acc1[2] += yh[l+0] * (q2[l] & 0x0F);
-                acc1[3] += yh[l+8] * (q2[l] & 0xF0);
-                acc2[0] += h & hm1 ? yl[l+0] : 0.f;
-                acc2[1] += h & hm2 ? yl[l+8] : 0.f;
-                acc2[2] += h & hm3 ? yh[l+0] : 0.f;
-                acc2[3] += h & hm4 ? yh[l+8] : 0.f;
-            }
-            const float dall = dh[0];
-            const float dmin = dh[1];
-            sumf[row] += dall * (sc8[0] * (acc1[0] +  16.f*acc2[0]) +
-                                 sc8[1] * (acc1[1]/16.f + 16.f*acc2[1]) +
-                                 sc8[4] * (acc1[2] +  16.f*acc2[2]) +
-                                 sc8[5] * (acc1[3]/16.f + 16.f*acc2[3])) -
-                         dmin * (sumy[0] * sc8[2] + sumy[1] * sc8[3] + sumy[2] * sc8[6] + sumy[3] * sc8[7]);
-
-            q1 += step;
-            qh += step;
-            dh += step/2;
-            a  += step/2;
-
-        }
-
-        y1 += 4 * QK_K;
-
-    }
-
-    for (int row = 0; row < 2; ++row) {
-        const float tot = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_q5_K_f32")]]
-kernel void kernel_mul_mv_q5_K_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_q5_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
-}
-
-void kernel_mul_mv_q6_K_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const uint8_t kmask1 = 0x03;
-    const uint8_t kmask2 = 0x0C;
-    const uint8_t kmask3 = 0x30;
-    const uint8_t kmask4 = 0xC0;
-
-    const int nb = ne00/QK_K;
-
-    const int64_t r0 = tgpig.x;
-    const int64_t r1 = tgpig.y;
-    const int     im = tgpig.z;
-
-    const int row = 2 * r0 + sgitg;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_q6_K * x = (device const block_q6_K *) src0 + row * nb + offset0;
-    device const float     * yy = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float sumf = 0;
-
-    const int tid  = tiisg/2;
-    const int ix   = tiisg%2;
-    const int ip   = tid/8;         // 0 or 1
-    const int il   = tid%8;
-    const int n    = 4;
-    const int l0   = n*il;
-    const int is   = 8*ip + l0/16;
-
-    const int y_offset = 128*ip + l0;
-    const int q_offset_l = 64*ip + l0;
-    const int q_offset_h = 32*ip + l0;
-
-    for (int i = ix; i < nb; i += 2) {
-
-        device const uint8_t * q1 = x[i].ql + q_offset_l;
-        device const uint8_t * q2 = q1 + 32;
-        device const uint8_t * qh = x[i].qh + q_offset_h;
-        device const int8_t  * sc = x[i].scales + is;
-
-        device const float * y = yy + i * QK_K + y_offset;
-
-        const float dall = x[i].d;
-
-        float4 sums = {0.f, 0.f, 0.f, 0.f};
-        for (int l = 0; l < n; ++l) {
-            sums[0] += y[l+ 0] * ((int8_t)((q1[l] & 0xF) | ((qh[l] & kmask1) << 4)) - 32);
-            sums[1] += y[l+32] * ((int8_t)((q2[l] & 0xF) | ((qh[l] & kmask2) << 2)) - 32);
-            sums[2] += y[l+64] * ((int8_t)((q1[l]  >> 4) | ((qh[l] & kmask3) << 0)) - 32);
-            sums[3] += y[l+96] * ((int8_t)((q2[l]  >> 4) | ((qh[l] & kmask4) >> 2)) - 32);
-        }
-
-        sumf += dall * (sums[0] * sc[0] + sums[1] * sc[2] + sums[2] * sc[4] + sums[3] * sc[6]);
-
-    }
-
-    const float tot = simd_sum(sumf);
-    if (tiisg == 0) {
-        dst[r1*ne0 + im*ne0*ne1 + row] = tot;
-    }
-}
-
-[[host_name("kernel_mul_mv_q6_K_f32")]]
-kernel void kernel_mul_mv_q6_K_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_q6_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
-}
-
-// ======================= "True" 2-bit
-
-void kernel_mul_mv_iq2_xxs_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const int nb = ne00/QK_K;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_iq2_xxs * x = (device const block_iq2_xxs *) src0 + ib_row + offset0;
-    device const float         * y = (device const float         *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[32];
-    float sumf[N_DST]={0.f}, all_sum;
-
-    const int nb32 = nb * (QK_K / 32);
-
-    threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values;
-    threadgroup uint8_t  * shared_signs = (threadgroup uint8_t *)(values + 256);
-    {
-        int nval = 4;
-        int pos  = (32*sgitg + tiisg)*nval;
-        for (int i = 0; i < nval; ++i) values[pos + i] = iq2xxs_grid[pos + i];
-        nval = 2;
-        pos  = (32*sgitg + tiisg)*nval;
-        for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i];
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-    }
-
-    const int ix = tiisg;
-
-    device const float * y4 = y + 32 * ix;
-
-    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
-
-        for (int i = 0; i < 32; ++i) {
-            yl[i] = y4[i];
-        }
-
-        const int ibl = ib32 / (QK_K / 32);
-        const int ib  = ib32 % (QK_K / 32);
-
-        device const block_iq2_xxs * xr = x + ibl;
-        device const uint16_t * q2 = xr->qs + 4 * ib;
-        device const half * dh = &xr->d;
-
-        for (int row = 0; row < N_DST; row++) {
-
-            const float db = dh[0];
-            device const uint8_t * aux8 = (device const uint8_t *)q2;
-            const uint32_t aux32 = q2[2] | (q2[3] << 16);
-            const float d = db * (0.5f + (aux32 >> 28));
-
-            float sum = 0;
-            for (int l = 0; l < 4; ++l) {
-                const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + aux8[l]);
-                const uint8_t signs = shared_signs[(aux32 >> 7*l) & 127];
-                for (int j = 0; j < 8; ++j) {
-                    sum += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
-                }
-            }
-            sumf[row] += d * sum;
-
-            dh += nb*sizeof(block_iq2_xxs)/2;
-            q2 += nb*sizeof(block_iq2_xxs)/2;
-        }
-
-        y4 += 32 * 32;
-    }
-
-    for (int row = 0; row < N_DST; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_iq2_xxs_f32")]]
-kernel void kernel_mul_mv_iq2_xxs_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        threadgroup int8_t * shared_values [[threadgroup(0)]],
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_iq2_xxs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
-}
-
-void kernel_mul_mv_iq2_xs_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const int nb = ne00/QK_K;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_iq2_xs * x = (device const block_iq2_xs *) src0 + ib_row + offset0;
-    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[32];
-    float sumf[N_DST]={0.f}, all_sum;
-
-    const int nb32 = nb * (QK_K / 32);
-
-    threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values;
-    threadgroup uint8_t  * shared_signs = (threadgroup uint8_t *)(values + 512);
-    {
-        int nval = 8;
-        int pos  = (32*sgitg + tiisg)*nval;
-        for (int i = 0; i < nval; ++i) values[pos + i] = iq2xs_grid[pos + i];
-        nval = 2;
-        pos  = (32*sgitg + tiisg)*nval;
-        for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i];
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-    }
-
-    const int ix = tiisg;
-
-    device const float * y4 = y + 32 * ix;
-
-    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
-
-        for (int i = 0; i < 32; ++i) {
-            yl[i] = y4[i];
-        }
-
-        const int ibl = ib32 / (QK_K / 32);
-        const int ib  = ib32 % (QK_K / 32);
-
-        device const block_iq2_xs * xr = x + ibl;
-        device const uint16_t * q2 = xr->qs + 4 * ib;
-        device const uint8_t  * sc = xr->scales + ib;
-        device const half * dh = &xr->d;
-
-        for (int row = 0; row < N_DST; row++) {
-
-            const float db = dh[0];
-            const uint8_t ls1 = sc[0] & 0xf;
-            const uint8_t ls2 = sc[0] >>  4;
-            const float d1 = db * (0.5f + ls1);
-            const float d2 = db * (0.5f + ls2);
-
-            float sum1 = 0, sum2 = 0;
-            for (int l = 0; l < 2; ++l) {
-                const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + (q2[l] & 511));
-                const uint8_t signs = shared_signs[(q2[l] >> 9)];
-                for (int j = 0; j < 8; ++j) {
-                    sum1 += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
-                }
-            }
-            for (int l = 2; l < 4; ++l) {
-                const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + (q2[l] & 511));
-                const uint8_t signs = shared_signs[(q2[l] >> 9)];
-                for (int j = 0; j < 8; ++j) {
-                    sum2 += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
-                }
-            }
-            sumf[row] += d1 * sum1 + d2 * sum2;
-
-            dh += nb*sizeof(block_iq2_xs)/2;
-            q2 += nb*sizeof(block_iq2_xs)/2;
-            sc += nb*sizeof(block_iq2_xs);
-        }
-
-        y4 += 32 * 32;
-    }
-
-    for (int row = 0; row < N_DST; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_iq2_xs_f32")]]
-kernel void kernel_mul_mv_iq2_xs_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        threadgroup int8_t * shared_values [[threadgroup(0)]],
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_iq2_xs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
-}
-
-void kernel_mul_mv_iq3_xxs_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const int nb = ne00/QK_K;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_iq3_xxs * x = (device const block_iq3_xxs *) src0 + ib_row + offset0;
-    device const float         * y = (device const float         *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[32];
-    float sumf[N_DST]={0.f}, all_sum;
-
-    const int nb32 = nb * (QK_K / 32);
-
-    threadgroup uint32_t * values = (threadgroup uint32_t *)shared_values;
-    threadgroup uint8_t  * shared_signs = (threadgroup uint8_t *)(values + 256);
-    {
-        int nval = 4;
-        int pos  = (32*sgitg + tiisg)*nval;
-        for (int i = 0; i < nval; ++i) values[pos + i] = iq3xxs_grid[pos + i];
-        nval = 2;
-        pos  = (32*sgitg + tiisg)*nval;
-        for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i];
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-    }
-
-    const int ix = tiisg;
-
-    device const float * y4 = y + 32 * ix;
-
-    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
-
-        for (int i = 0; i < 32; ++i) {
-            yl[i] = y4[i];
-        }
-
-        const int ibl = ib32 / (QK_K / 32);
-        const int ib  = ib32 % (QK_K / 32);
-
-        device const block_iq3_xxs * xr = x + ibl;
-        device const uint8_t  * q3 = xr->qs + 8 * ib;
-        device const uint16_t * gas = (device const uint16_t *)(xr->qs + QK_K/4) + 2 * ib;
-        device const half * dh = &xr->d;
-
-        for (int row = 0; row < N_DST; row++) {
-
-            const float db = dh[0];
-            const uint32_t aux32 = gas[0] | (gas[1] << 16);
-            const float d = db * (0.5f + (aux32 >> 28));
-
-            float2 sum = {0};
-            for (int l = 0; l < 4; ++l) {
-                const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(values + q3[2*l+0]);
-                const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(values + q3[2*l+1]);
-                const uint8_t signs = shared_signs[(aux32 >> 7*l) & 127];
-                for (int j = 0; j < 4; ++j) {
-                    sum[0] += yl[8*l + j + 0] * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
-                    sum[1] += yl[8*l + j + 4] * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
-                }
-            }
-            sumf[row] += d * (sum[0] + sum[1]);
-
-            dh  += nb*sizeof(block_iq3_xxs)/2;
-            q3  += nb*sizeof(block_iq3_xxs);
-            gas += nb*sizeof(block_iq3_xxs)/2;
-        }
-
-        y4 += 32 * 32;
-    }
-
-    for (int row = 0; row < N_DST; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.5f;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_iq3_xxs_f32")]]
-kernel void kernel_mul_mv_iq3_xxs_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        threadgroup int8_t * shared_values [[threadgroup(0)]],
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_iq3_xxs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
-}
-
-void kernel_mul_mv_iq3_s_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const int nb = ne00/QK_K;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_iq3_s * x = (device const block_iq3_s *) src0 + ib_row + offset0;
-    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[32];
-    float sumf[N_DST]={0.f}, all_sum;
-
-    const int nb32 = nb * (QK_K / 32);
-
-    threadgroup uint32_t * values = (threadgroup uint32_t *)shared_values;
-    {
-        int nval = 8;
-        int pos  = (32*sgitg + tiisg)*nval;
-        for (int i = 0; i < nval; ++i) values[pos + i] = iq3s_grid[pos + i];
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-    }
-
-    const int ix = tiisg;
-
-    device const float * y4 = y + 32 * ix;
-
-    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
-
-        for (int i = 0; i < 32; ++i) {
-            yl[i] = y4[i];
-        }
-
-        const int ibl = ib32 / (QK_K / 32);
-        const int ib  = ib32 % (QK_K / 32);
-
-        device const block_iq3_s * xr = x + ibl;
-        device const uint8_t * qs = xr->qs + 8 * ib;
-        device const uint8_t * qh = xr->qh + ib;
-        device const uint8_t * sc = xr->scales + (ib/2);
-        device const uint8_t * signs = xr->signs + 4 * ib;
-        device const half * dh = &xr->d;
-
-        for (int row = 0; row < N_DST; row++) {
-
-            const float db = dh[0];
-            const float d = db * (1 + 2*((sc[0] >> 4*(ib%2)) & 0xf));
-
-            float2 sum = {0};
-            for (int l = 0; l < 4; ++l) {
-                const threadgroup uint32_t * table1 = qh[0] & kmask_iq2xs[2*l+0] ? values + 256 : values;
-                const threadgroup uint32_t * table2 = qh[0] & kmask_iq2xs[2*l+1] ? values + 256 : values;
-                const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(table1 + qs[2*l+0]);
-                const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(table2 + qs[2*l+1]);
-                for (int j = 0; j < 4; ++j) {
-                    sum[0] += yl[8*l + j + 0] * grid1[j] * select(1, -1, signs[l] & kmask_iq2xs[j+0]);
-                    sum[1] += yl[8*l + j + 4] * grid2[j] * select(1, -1, signs[l] & kmask_iq2xs[j+4]);
-                }
-            }
-            sumf[row] += d * (sum[0] + sum[1]);
-
-            dh  += nb*sizeof(block_iq3_s)/2;
-            qs  += nb*sizeof(block_iq3_s);
-            qh  += nb*sizeof(block_iq3_s);
-            sc  += nb*sizeof(block_iq3_s);
-            signs += nb*sizeof(block_iq3_s);
-        }
-
-        y4 += 32 * 32;
-    }
-
-    for (int row = 0; row < N_DST; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_iq3_s_f32")]]
-kernel void kernel_mul_mv_iq3_s_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        threadgroup int8_t * shared_values [[threadgroup(0)]],
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_iq3_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
-}
-
-void kernel_mul_mv_iq2_s_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const int nb = ne00/QK_K;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-
-    device const block_iq2_s * x = (device const block_iq2_s *) src0 + ib_row + offset0;
-    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[32];
-    float sumf[N_DST]={0.f}, all_sum;
-
-    const int nb32 = nb * (QK_K / 32);
-
-    //threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values;
-    //{
-    //    int nval = 32;
-    //    int pos  = (32*sgitg + tiisg)*nval;
-    //    for (int i = 0; i < nval; ++i) values[pos + i] = iq2s_grid[pos + i];
-    //    threadgroup_barrier(mem_flags::mem_threadgroup);
-    //}
-
-    const int ix = tiisg;
-
-    device const float * y4 = y + 32 * ix;
-
-    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
-
-        for (int i = 0; i < 32; ++i) {
-            yl[i] = y4[i];
-        }
-
-        const int ibl = ib32 / (QK_K / 32);
-        const int ib  = ib32 % (QK_K / 32);
-
-        device const block_iq2_s * xr = x + ibl;
-        device const uint8_t * qs = xr->qs + 4 * ib;
-        device const uint8_t * qh = xr->qh + ib;
-        device const uint8_t * sc = xr->scales + ib;
-        device const uint8_t * signs = qs + QK_K/8;
-        device const half * dh = &xr->d;
-
-        for (int row = 0; row < N_DST; row++) {
-
-            const float db = dh[0];
-            const float d1 = db * (0.5f + (sc[0] & 0xf));
-            const float d2 = db * (0.5f + (sc[0] >>  4));
-
-            float2 sum = {0};
-            for (int l = 0; l < 2; ++l) {
-                //const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(values + (qs[l+0] | ((qh[0] << (8-2*l)) & 0x300)));
-                //const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(values + (qs[l+2] | ((qh[0] << (4-2*l)) & 0x300)));
-                constant uint8_t * grid1 = (constant uint8_t *)(iq2s_grid + (qs[l+0] | ((qh[0] << (8-2*l)) & 0x300)));
-                constant uint8_t * grid2 = (constant uint8_t *)(iq2s_grid + (qs[l+2] | ((qh[0] << (4-2*l)) & 0x300)));
-                for (int j = 0; j < 8; ++j) {
-                    sum[0] += yl[8*l + j +  0] * grid1[j] * select(1, -1, signs[l+0] & kmask_iq2xs[j]);
-                    sum[1] += yl[8*l + j + 16] * grid2[j] * select(1, -1, signs[l+2] & kmask_iq2xs[j]);
-                }
-            }
-            sumf[row] += d1 * sum[0] + d2 * sum[1];
-
-            dh  += nb*sizeof(block_iq2_s)/2;
-            qs  += nb*sizeof(block_iq2_s);
-            qh  += nb*sizeof(block_iq2_s);
-            sc  += nb*sizeof(block_iq2_s);
-            signs += nb*sizeof(block_iq2_s);
-        }
-
-        y4 += 32 * 32;
-    }
-
-    for (int row = 0; row < N_DST; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_iq2_s_f32")]]
-kernel void kernel_mul_mv_iq2_s_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        threadgroup int8_t * shared_values [[threadgroup(0)]],
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_iq2_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
-}
-
-void kernel_mul_mv_iq1_s_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_value,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const int nb = ne00/QK_K;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-    device const block_iq1_s * x = (device const block_iq1_s *) src0 + ib_row + offset0;
-    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[32];
-    float sumf[N_DST]={0.f}, all_sum;
-
-    const int nb32 = nb * (QK_K / 32);
-
-    const int ix = tiisg;
-
-    device const float * y4 = y + 32 * ix;
-
-    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
-
-        float sumy = 0;
-        for (int i = 0; i < 32; ++i) {
-            yl[i] = y4[i];
-            sumy += yl[i];
-        }
-
-        const int ibl = ib32 / (QK_K / 32);
-        const int ib  = ib32 % (QK_K / 32);
-
-        device const block_iq1_s * xr = x + ibl;
-        device const uint8_t  * qs = xr->qs + 4 * ib;
-        device const uint16_t * qh = xr->qh + ib;
-        device const half     * dh = &xr->d;
-
-        for (int row = 0; row < N_DST; row++) {
-
-            constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700)));
-            constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 5) & 0x700)));
-            constant uint8_t * grid3 = (constant uint8_t *)(iq1s_grid_gpu + (qs[2] | ((qh[0] << 2) & 0x700)));
-            constant uint8_t * grid4 = (constant uint8_t *)(iq1s_grid_gpu + (qs[3] | ((qh[0] >> 1) & 0x700)));
-
-            float sum = 0;
-            for (int j = 0; j < 4; ++j) {
-                sum += yl[j+ 0] * (grid1[j] & 0xf) + yl[j+ 4] * (grid1[j] >> 4)
-                     + yl[j+ 8] * (grid2[j] & 0xf) + yl[j+12] * (grid2[j] >> 4)
-                     + yl[j+16] * (grid3[j] & 0xf) + yl[j+20] * (grid3[j] >> 4)
-                     + yl[j+24] * (grid4[j] & 0xf) + yl[j+28] * (grid4[j] >> 4);
-            }
-            sumf[row] += (float)dh[0] * (sum + sumy * (qh[0] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA)) * (2*((qh[0] >> 12) & 7) + 1);
-
-            dh += nb*sizeof(block_iq1_s)/2;
-            qs += nb*sizeof(block_iq1_s);
-            qh += nb*sizeof(block_iq1_s)/2;
-        }
-
-        y4 += 32 * 32;
-    }
-
-    for (int row = 0; row < N_DST; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
-        }
-    }
-}
-
-void kernel_mul_mv_iq1_m_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_value,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    const int nb = ne00/QK_K;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-
-    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-    device const block_iq1_m * x = (device const block_iq1_m *) src0 + ib_row + offset0;
-    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;
-
-    float yl[32];
-    float sumf[N_DST]={0.f}, all_sum;
-
-    const int nb32 = nb * (QK_K / 32);
-
-    const int ix = tiisg;
-
-    device const float * y4 = y + 32 * ix;
-
-    iq1m_scale_t scale;
-
-    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
-
-        float4 sumy = {0.f};
-        for (int i = 0; i < 8; ++i) {
-            yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0];
-            yl[i+ 8] = y4[i+ 8]; sumy[1] += yl[i+ 8];
-            yl[i+16] = y4[i+16]; sumy[2] += yl[i+16];
-            yl[i+24] = y4[i+24]; sumy[3] += yl[i+24];
-        }
-
-        const int ibl = ib32 / (QK_K / 32);
-        const int ib  = ib32 % (QK_K / 32);
-
-        device const block_iq1_m * xr = x + ibl;
-        device const uint8_t  * qs = xr->qs + 4 * ib;
-        device const uint8_t  * qh = xr->qh + 2 * ib;
-        device const uint16_t * sc = (device const uint16_t *)xr->scales;
-
-        for (int row = 0; row < N_DST; row++) {
-            scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-
-            constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700)));
-            constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 4) & 0x700)));
-            constant uint8_t * grid3 = (constant uint8_t *)(iq1s_grid_gpu + (qs[2] | ((qh[1] << 8) & 0x700)));
-            constant uint8_t * grid4 = (constant uint8_t *)(iq1s_grid_gpu + (qs[3] | ((qh[1] << 4) & 0x700)));
-
-            float2 sum = {0.f};
-            for (int j = 0; j < 4; ++j) {
-                sum[0] += yl[j+ 0] * (grid1[j] & 0xf) + yl[j+ 4] * (grid1[j] >> 4)
-                        + yl[j+ 8] * (grid2[j] & 0xf) + yl[j+12] * (grid2[j] >> 4);
-                sum[1] += yl[j+16] * (grid3[j] & 0xf) + yl[j+20] * (grid3[j] >> 4)
-                        + yl[j+24] * (grid4[j] & 0xf) + yl[j+28] * (grid4[j] >> 4);
-            }
-            const float delta1 = sumy[0] * (qh[0] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA) + sumy[1] * (qh[0] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
-            const float delta2 = sumy[2] * (qh[1] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA) + sumy[3] * (qh[1] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
-
-            sumf[row] += (float)scale.f16 * ((sum[0] + delta1) * (2*((sc[ib/2] >> (6*(ib%2)+0)) & 7) + 1) +
-                                             (sum[1] + delta2) * (2*((sc[ib/2] >> (6*(ib%2)+3)) & 7) + 1));
-
-            sc += nb*sizeof(block_iq1_m)/2;
-            qs += nb*sizeof(block_iq1_m);
-            qh += nb*sizeof(block_iq1_m);
-        }
-
-        y4 += 32 * 32;
-    }
-
-    for (int row = 0; row < N_DST; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
-        }
-    }
-}
-
-void kernel_mul_mv_iq4_nl_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values_i8,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    threadgroup float * shared_values = (threadgroup float *)shared_values_i8;
-    const int nb = ne00/QK4_NL;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-    const int first_row = (r0 * 2 + sgitg) * 2;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-    device const block_iq4_nl * x = (device const block_iq4_nl *) src0 + ib_row + offset0;
-    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;
-
-    const int ix = tiisg/2;  // 0...15
-    const int it = tiisg%2;  // 0 or 1
-
-    shared_values[tiisg] = kvalues_iq4nl_f[tiisg%16];
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-
-    float4 yl[4];
-    float sumf[2]={0.f}, all_sum;
-
-    device const float * yb = y + ix * QK4_NL + it * 8;
-
-    uint32_t aux32[2];
-    thread const uint8_t * q8 = (thread const uint8_t *)aux32;
-
-    float4 qf1, qf2;
-
-    for (int ib = ix; ib < nb; ib += 16) {
-
-        device const float4 * y4 = (device const float4 *)yb;
-        yl[0] = y4[0]; yl[1] = y4[4]; yl[2] = y4[1]; yl[3] = y4[5];
-
-        for (int row = 0; row < 2; ++row) {
-
-            device const block_iq4_nl & xb = x[row*nb + ib];
-            device const uint16_t * q4 = (device const uint16_t *)(xb.qs + 8*it);
-
-            float4 acc1 = {0.f}, acc2 = {0.f};
-
-            aux32[0] = q4[0] | (q4[1] << 16);
-            aux32[1] = (aux32[0] >> 4) & 0x0f0f0f0f;
-            aux32[0] &= 0x0f0f0f0f;
-            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
-            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
-            acc1 += yl[0] * qf1;
-            acc2 += yl[1] * qf2;
-
-            aux32[0] = q4[2] | (q4[3] << 16);
-            aux32[1] = (aux32[0] >> 4) & 0x0f0f0f0f;
-            aux32[0] &= 0x0f0f0f0f;
-            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
-            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
-            acc1 += yl[2] * qf1;
-            acc2 += yl[3] * qf2;
-
-            acc1 += acc2;
-
-            sumf[row] += (float)xb.d * (acc1[0] + acc1[1] + acc1[2] + acc1[3]);
-
-        }
-
-        yb += 16 * QK4_NL;
-    }
-
-    for (int row = 0; row < 2; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
-        }
-    }
-}
-
-void kernel_mul_mv_iq4_xs_f32_impl(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values_i8,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg) {
-
-    threadgroup float * shared_values = (threadgroup float *)shared_values_i8;
-    const int nb = ne00/QK_K;
-    const int r0 = tgpig.x;
-    const int r1 = tgpig.y;
-    const int im = tgpig.z;
-    const int first_row = (r0 * 2 + sgitg) * 2;
-    const int ib_row = first_row * nb;
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
-    device const block_iq4_xs * x = (device const block_iq4_xs *) src0 + ib_row + offset0;
-    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;
-
-    const int ix = tiisg/16;  // 0 or 1
-    const int it = tiisg%16;  // 0...15
-    const int ib = it/2;
-    const int il = it%2;
-
-    shared_values[tiisg] = kvalues_iq4nl_f[tiisg%16];
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-
-    float4 yl[4];
-    float sumf[2]={0.f}, all_sum;
-
-    device const float * yb = y + ix * QK_K + ib * 32 + il * 8;
-
-    uint32_t aux32[2];
-    thread const uint8_t * q8 = (thread const uint8_t *)aux32;
-
-    float4 qf1, qf2;
-
-    for (int ibl = ix; ibl < nb; ibl += 2) {
-
-        device const float4 * y4 = (device const float4 *)yb;
-        yl[0] = y4[0]; yl[1] = y4[4]; yl[2] = y4[1]; yl[3] = y4[5];
-
-        for (int row = 0; row < 2; ++row) {
-
-            device const block_iq4_xs & xb = x[row*nb + ibl];
-            device const uint32_t * q4 = (device const uint32_t *)(xb.qs + 16*ib + 8*il);
-
-            float4 acc1 = {0.f}, acc2 = {0.f};
-
-            aux32[0] = q4[0] & 0x0f0f0f0f;
-            aux32[1] = (q4[0] >> 4) & 0x0f0f0f0f;
-            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
-            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
-            acc1 += yl[0] * qf1;
-            acc2 += yl[1] * qf2;
-
-            aux32[0] = q4[1] & 0x0f0f0f0f;
-            aux32[1] = (q4[1] >> 4) & 0x0f0f0f0f;
-            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
-            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
-            acc1 += yl[2] * qf1;
-            acc2 += yl[3] * qf2;
-
-            acc1 += acc2;
-
-            const int ls = (((xb.scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((xb.scales_h >> 2*ib) & 3) << 4)) - 32;
-            sumf[row] += (float)xb.d * ls * (acc1[0] + acc1[1] + acc1[2] + acc1[3]);
-
-        }
-
-        yb += 2 * QK_K;
-    }
-
-    for (int row = 0; row < 2; ++row) {
-        all_sum = simd_sum(sumf[row]);
-        if (tiisg == 0) {
-            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
-        }
-    }
-}
-
-[[host_name("kernel_mul_mv_iq1_s_f32")]]
-kernel void kernel_mul_mv_iq1_s_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_iq1_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
-}
-
-[[host_name("kernel_mul_mv_iq1_m_f32")]]
-kernel void kernel_mul_mv_iq1_m_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint  tiisg[[thread_index_in_simdgroup]],
-        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_iq1_m_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
-}
-
-[[host_name("kernel_mul_mv_iq4_nl_f32")]]
-kernel void kernel_mul_mv_iq4_nl_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        threadgroup int8_t * shared_values [[threadgroup(0)]],
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint tiisg[[thread_index_in_simdgroup]],
-        uint sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_iq4_nl_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
-}
-
-[[host_name("kernel_mul_mv_iq4_xs_f32")]]
-kernel void kernel_mul_mv_iq4_xs_f32(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant   int64_t & ne01,
-        constant   int64_t & ne02,
-        constant  uint64_t & nb00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant   int64_t & ne11,
-        constant   int64_t & ne12,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb12,
-        constant   int64_t & ne0,
-        constant   int64_t & ne1,
-        constant   uint    & r2,
-        constant   uint    & r3,
-        threadgroup int8_t * shared_values [[threadgroup(0)]],
-        uint3 tgpig[[threadgroup_position_in_grid]],
-        uint tiisg[[thread_index_in_simdgroup]],
-        uint sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    kernel_mul_mv_iq4_xs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
-}
-
-//============================= templates and their specializations =============================
-
-// NOTE: this is not dequantizing - we are simply fitting the template
-template <typename type4x4>
-void dequantize_f32(device const float4x4 * src, short il, thread type4x4 & reg) {
-    float4x4 temp = *(((device float4x4 *)src));
-    for (int i = 0; i < 16; i++){
-        reg[i/4][i%4] = temp[i/4][i%4];
-    }
-}
-
-template <typename type4x4>
-void dequantize_f16(device const half4x4 * src, short il, thread type4x4 & reg) {
-    half4x4 temp = *(((device half4x4 *)src));
-    for (int i = 0; i < 16; i++){
-        reg[i/4][i%4] = temp[i/4][i%4];
-    }
-}
-
-template <typename type4x4>
-void dequantize_q4_0(device const block_q4_0 *xb, short il, thread type4x4 & reg) {
-    device const uint16_t * qs = ((device const uint16_t *)xb + 1);
-    const float d1 = il ? (xb->d / 16.h) : xb->d;
-    const float d2 = d1 / 256.f;
-    const float md = -8.h * xb->d;
-    const ushort mask0 = il ? 0x00F0 : 0x000F;
-    const ushort mask1 = mask0 << 8;
-
-    for (int i=0;i<8;i++) {
-        reg[i/2][2*(i%2)+0] = d1 * (qs[i] & mask0) + md;
-        reg[i/2][2*(i%2)+1] = d2 * (qs[i] & mask1) + md;
-    }
-}
-
-template <typename type4x4>
-void dequantize_q4_1(device const block_q4_1 *xb, short il, thread type4x4 & reg) {
-    device const uint16_t * qs = ((device const uint16_t *)xb + 2);
-    const float d1 = il ? (xb->d / 16.h) : xb->d;
-    const float d2 = d1 / 256.f;
-    const float  m = xb->m;
-    const ushort mask0 = il ? 0x00F0 : 0x000F;
-    const ushort mask1 = mask0 << 8;
-
-    for (int i=0;i<8;i++) {
-        reg[i/2][2*(i%2)+0] = ((qs[i] & mask0) * d1) + m;
-        reg[i/2][2*(i%2)+1] = ((qs[i] & mask1) * d2) + m;
-    }
-}
-
-template <typename type4x4>
-void dequantize_q5_0(device const block_q5_0 *xb, short il, thread type4x4 & reg) {
-    device const uint16_t * qs = ((device const uint16_t *)xb + 3);
-    const float d = xb->d;
-    const float md = -16.h * xb->d;
-    const ushort mask = il ? 0x00F0 : 0x000F;
-
-    const uint32_t qh = *((device const uint32_t *)xb->qh);
-
-    const int x_mv = il ? 4 : 0;
-
-    const int gh_mv = il ? 12 : 0;
-    const int gh_bk = il ?  0 : 4;
-
-    for (int i = 0; i < 8; i++) {
-        // extract the 5-th bits for x0 and x1
-        const uint8_t xh_0 = ((qh >> (gh_mv + 2*i  )) << gh_bk) & 0x10;
-        const uint8_t xh_1 = ((qh >> (gh_mv + 2*i+1)) << gh_bk) & 0x10;
-
-        // combine the 4-bits from qs with the 5th bit
-        const int32_t x0 = ((((qs[i]     ) & mask) >> x_mv) | xh_0);
-        const int32_t x1 = ((((qs[i] >> 8) & mask) >> x_mv) | xh_1);
-
-        reg[i/2][2*(i%2)+0] = d * x0 + md;
-        reg[i/2][2*(i%2)+1] = d * x1 + md;
-    }
-}
-
-template <typename type4x4>
-void dequantize_q5_1(device const block_q5_1 *xb, short il, thread type4x4 & reg) {
-    device const uint16_t * qs = ((device const uint16_t *)xb + 4);
-    const float d = xb->d;
-    const float m = xb->m;
-    const ushort mask = il ? 0x00F0 : 0x000F;
-
-    const uint32_t qh = *((device const uint32_t *)xb->qh);
-
-    const int x_mv = il ? 4 : 0;
-
-    const int gh_mv = il ? 12 : 0;
-    const int gh_bk = il ?  0 : 4;
-
-    for (int i = 0; i < 8; i++) {
-        // extract the 5-th bits for x0 and x1
-        const uint8_t xh_0 = ((qh >> (gh_mv + 2*i  )) << gh_bk) & 0x10;
-        const uint8_t xh_1 = ((qh >> (gh_mv + 2*i+1)) << gh_bk) & 0x10;
-
-        // combine the 4-bits from qs with the 5th bit
-        const int32_t x0 = ((((qs[i]     ) & mask) >> x_mv) | xh_0);
-        const int32_t x1 = ((((qs[i] >> 8) & mask) >> x_mv) | xh_1);
-
-        reg[i/2][2*(i%2)+0] = d * x0 + m;
-        reg[i/2][2*(i%2)+1] = d * x1 + m;
-    }
-}
-
-template <typename type4x4>
-void dequantize_q8_0(device const block_q8_0 *xb, short il, thread type4x4 & reg) {
-    device const int8_t * qs = ((device const int8_t *)xb->qs);
-    const half d = xb->d;
-
-    for (int i = 0; i < 16; i++) {
-        reg[i/4][i%4] = (qs[i + 16*il] * d);
-    }
-}
-
-template <typename type4x4>
-void dequantize_q2_K(device const block_q2_K *xb, short il, thread type4x4 & reg) {
-    const float d = xb->d;
-    const float min = xb->dmin;
-    device const uint8_t * q = (device const uint8_t *)xb->qs;
-    float dl, ml;
-    uint8_t sc = xb->scales[il];
-
-    q = q + 32*(il/8) + 16*(il&1);
-    il = (il/2)%4;
-
-    half  coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h);
-    uchar mask = il>1 ? (il>2 ? 192    : 48)     : (il>0 ? 12    : 3);
-    dl = d * (sc & 0xF) * coef, ml = min * (sc >> 4);
-    for (int i = 0; i < 16; ++i) {
-        reg[i/4][i%4] = dl * (q[i] & mask) - ml;
-    }
-}
-
-template <typename type4x4>
-void dequantize_q3_K(device const block_q3_K *xb, short il, thread type4x4 & reg) {
-    const half d_all = xb->d;
-    device const uint8_t * q = (device const uint8_t *)xb->qs;
-    device const uint8_t * h = (device const uint8_t *)xb->hmask;
-    device const int8_t * scales = (device const int8_t *)xb->scales;
-
-    q = q + 32 * (il/8) + 16 * (il&1);
-    h = h + 16 * (il&1);
-    uint8_t m = 1 << (il/2);
-    uint16_t kmask1 = (il/4)>1 ? ((il/4)>2 ? 192 : 48) : \
-                                 ((il/4)>0 ? 12  : 3);
-    uint16_t kmask2 = il/8 ? 0xF0 : 0x0F;
-    uint16_t scale_2 = scales[il%8], scale_1 = scales[8 + il%4];
-    int16_t  dl_int = (il/4)&1 ? (scale_2&kmask2) | ((scale_1&kmask1) << 2)
-                               : (scale_2&kmask2) | ((scale_1&kmask1) << 4);
-    float dl = il<8 ? d_all * (dl_int - 32.f) : d_all * (dl_int / 16.f - 32.f);
-    const float ml = 4.f * dl;
-
-    il = (il/2) & 3;
-    const half    coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h);
-    const uint8_t mask = il>1 ? (il>2 ? 192    : 48)     : (il>0 ? 12    : 3);
-    dl *= coef;
-
-    for (int i = 0; i < 16; ++i) {
-        reg[i/4][i%4] = dl * (q[i] & mask) - (h[i] & m ? 0 : ml);
-    }
-}
-
-static inline uchar2 get_scale_min_k4_just2(int j, int k, device const uchar * q) {
-    return j < 4 ? uchar2{uchar(q[j+0+k] & 63), uchar(q[j+4+k] & 63)}
-                 : uchar2{uchar((q[j+4+k] & 0xF) | ((q[j-4+k] & 0xc0) >> 2)), uchar((q[j+4+k] >> 4) | ((q[j-0+k] & 0xc0) >> 2))};
-}
-
-template <typename type4x4>
-void dequantize_q4_K(device const block_q4_K *xb, short il, thread type4x4 & reg) {
-    device const uchar * q = xb->qs;
-
-    short is = (il/4) * 2;
-    q = q + (il/4) * 32 + 16 * (il&1);
-    il = il & 3;
-    const uchar2 sc = get_scale_min_k4_just2(is, il/2, xb->scales);
-    const float d   = il < 2 ? xb->d : xb->d / 16.h;
-    const float min = xb->dmin;
-    const float dl = d * sc[0];
-    const float ml = min * sc[1];
-
-    const ushort mask = il<2 ? 0x0F : 0xF0;
-    for (int i = 0; i < 16; ++i) {
-        reg[i/4][i%4] = dl * (q[i] & mask) - ml;
-    }
-}
-
-template <typename type4x4>
-void dequantize_q5_K(device const block_q5_K *xb, short il, thread type4x4 & reg) {
-    device const uint8_t * q  = xb->qs;
-    device const uint8_t * qh = xb->qh;
-
-    short is = (il/4) * 2;
-    q  = q + 32 * (il/4) + 16 * (il&1);
-    qh = qh + 16 * (il&1);
-    uint8_t ul = 1 << (il/2);
-    il = il & 3;
-    const uchar2 sc = get_scale_min_k4_just2(is, il/2, xb->scales);
-    const float d = il < 2 ? xb->d : xb->d / 16.f;
-    const float min = xb->dmin;
-    const float dl = d * sc[0];
-    const float ml = min * sc[1];
-
-    const ushort mask  = il<2 ? 0x0F : 0xF0;
-    const float qh_val = il<2 ? 16.f : 256.f;
-    for (int i = 0; i < 16; ++i) {
-        reg[i/4][i%4] = dl * ((q[i] & mask) + (qh[i] & ul ? qh_val : 0)) - ml;
-    }
-}
-
-template <typename type4x4>
-void dequantize_q6_K(device const block_q6_K *xb, short il, thread type4x4 & reg) {
-    const half d_all = xb->d;
-    device const uint8_t * ql = (device const uint8_t *)xb->ql;
-    device const uint8_t * qh = (device const uint8_t *)xb->qh;
-    device const int8_t * scales = (device const int8_t *)xb->scales;
-
-    ql = ql + 64*(il/8) + 32*((il/2)&1) + 16*(il&1);
-    qh = qh + 32*(il/8) + 16*(il&1);
-    float sc = scales[(il%2) + 2 * ((il/2))];
-    il = (il/2) & 3;
-
-    const uint16_t  kmask1 = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3);
-    const uint16_t  kmask2 = il>1 ? 0xF0              : 0x0F;
-    const float       coef = il>1 ? 1.f/16.f          : 1.f;
-    const float ml = d_all * sc * 32.f;
-    const float dl = d_all * sc * coef;
-    for (int i = 0; i < 16; ++i) {
-        const half q = il&1 ? ((ql[i] & kmask2) | ((qh[i] & kmask1) << 2))
-                            : ((ql[i] & kmask2) | ((qh[i] & kmask1) << 4));
-        reg[i/4][i%4] = dl * q - ml;
-    }
-}
-
-template <typename type4x4>
-void dequantize_iq2_xxs(device const block_iq2_xxs * xb, short il, thread type4x4 & reg) {
-    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
-    const float d = xb->d;
-    const int ib32 = il/2;
-    il = il%2;
-    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
-    // each block of 32 needs 2 uint32_t's for the quants & scale, so 4 uint16_t's.
-    device const uint16_t * q2 = xb->qs + 4*ib32;
-    const uint32_t aux32_g = q2[0] | (q2[1] << 16);
-    const uint32_t aux32_s = q2[2] | (q2[3] << 16);
-    thread const uint8_t * aux8 = (thread const uint8_t *)&aux32_g;
-    const float dl = d * (0.5f + (aux32_s >> 28)) * 0.25f;
-    constant uint8_t * grid = (constant uint8_t *)(iq2xxs_grid + aux8[2*il+0]);
-    uint8_t signs = ksigns_iq2xs[(aux32_s >> 14*il) & 127];
-    for (int i = 0; i < 8; ++i) {
-        reg[i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
-    }
-    grid = (constant uint8_t *)(iq2xxs_grid + aux8[2*il+1]);
-    signs = ksigns_iq2xs[(aux32_s >> (14*il+7)) & 127];
-    for (int i = 0; i < 8; ++i) {
-        reg[2+i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
-    }
-}
-
-template <typename type4x4>
-void dequantize_iq2_xs(device const block_iq2_xs * xb, short il, thread type4x4 & reg) {
-    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
-    const float d = xb->d;
-    const int ib32 = il/2;
-    il = il%2;
-    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
-    device const uint16_t * q2 = xb->qs + 4*ib32;
-    const float dl = d * (0.5f + ((xb->scales[ib32] >> 4*il) & 0xf)) * 0.25f;
-    constant uint8_t * grid = (constant uint8_t *)(iq2xs_grid + (q2[2*il+0] & 511));
-    uint8_t signs = ksigns_iq2xs[q2[2*il+0] >> 9];
-    for (int i = 0; i < 8; ++i) {
-        reg[i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
-    }
-    grid = (constant uint8_t *)(iq2xs_grid + (q2[2*il+1] & 511));
-    signs = ksigns_iq2xs[q2[2*il+1] >> 9];
-    for (int i = 0; i < 8; ++i) {
-        reg[2+i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
-    }
-}
-
-template <typename type4x4>
-void dequantize_iq3_xxs(device const block_iq3_xxs * xb, short il, thread type4x4 & reg) {
-    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
-    const float d = xb->d;
-    const int ib32 = il/2;
-    il = il%2;
-    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
-    device const uint8_t * q3 = xb->qs + 8*ib32;
-    device const uint16_t * gas = (device const uint16_t *)(xb->qs + QK_K/4) + 2*ib32;
-    const uint32_t aux32 = gas[0] | (gas[1] << 16);
-    const float dl = d * (0.5f + (aux32 >> 28)) * 0.5f;
-    constant uint8_t * grid1 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+0]);
-    constant uint8_t * grid2 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+1]);
-    uint8_t signs = ksigns_iq2xs[(aux32 >> 14*il) & 127];
-    for (int i = 0; i < 4; ++i) {
-        reg[0][i] = dl * grid1[i] * (signs & kmask_iq2xs[i+0] ? -1.f : 1.f);
-        reg[1][i] = dl * grid2[i] * (signs & kmask_iq2xs[i+4] ? -1.f : 1.f);
-    }
-    grid1 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+2]);
-    grid2 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+3]);
-    signs = ksigns_iq2xs[(aux32 >> (14*il+7)) & 127];
-    for (int i = 0; i < 4; ++i) {
-        reg[2][i] = dl * grid1[i] * (signs & kmask_iq2xs[i+0] ? -1.f : 1.f);
-        reg[3][i] = dl * grid2[i] * (signs & kmask_iq2xs[i+4] ? -1.f : 1.f);
-    }
-}
-
-template <typename type4x4>
-void dequantize_iq3_s(device const block_iq3_s * xb, short il, thread type4x4 & reg) {
-    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
-    const float d = xb->d;
-    const int ib32 = il/2;
-    il = il%2;
-    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
-    device const uint8_t * qs = xb->qs + 8*ib32;
-    device const uint8_t * signs = xb->signs + 4*ib32 + 2*il;
-    const uint8_t qh = xb->qh[ib32] >> 4*il;
-    const float dl = d * (1 + 2*((xb->scales[ib32/2] >> 4*(ib32%2)) & 0xf));
-    constant uint8_t * grid1 = (constant uint8_t *)(iq3s_grid + (qs[4*il+0] | ((qh << 8) & 256)));
-    constant uint8_t * grid2 = (constant uint8_t *)(iq3s_grid + (qs[4*il+1] | ((qh << 7) & 256)));
-    for (int i = 0; i < 4; ++i) {
-        reg[0][i] = dl * grid1[i] * select(1, -1, signs[0] & kmask_iq2xs[i+0]);
-        reg[1][i] = dl * grid2[i] * select(1, -1, signs[0] & kmask_iq2xs[i+4]);
-    }
-    grid1 = (constant uint8_t *)(iq3s_grid + (qs[4*il+2] | ((qh << 6) & 256)));
-    grid2 = (constant uint8_t *)(iq3s_grid + (qs[4*il+3] | ((qh << 5) & 256)));
-    for (int i = 0; i < 4; ++i) {
-        reg[2][i] = dl * grid1[i] * select(1, -1, signs[1] & kmask_iq2xs[i+0]);
-        reg[3][i] = dl * grid2[i] * select(1, -1, signs[1] & kmask_iq2xs[i+4]);
-    }
-}
-
-template <typename type4x4>
-void dequantize_iq2_s(device const block_iq2_s * xb, short il, thread type4x4 & reg) {
-    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
-    const float d = xb->d;
-    const int ib32 = il/2;
-    il = il%2;
-    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
-    device const uint8_t * qs = xb->qs + 4*ib32 + 2*il;
-    device const uint8_t * signs = qs + QK_K/8;
-    const uint8_t qh = xb->qh[ib32] >> 4*il;
-    const float dl = d * (0.5f + ((xb->scales[ib32] >> 4*il) & 0xf)) * 0.25f;
-    constant uint8_t * grid1 = (constant uint8_t *)(iq2s_grid + (qs[0] | ((qh << 8) & 0x300)));
-    constant uint8_t * grid2 = (constant uint8_t *)(iq2s_grid + (qs[1] | ((qh << 6) & 0x300)));
-    for (int i = 0; i < 8; ++i) {
-        reg[i/4+0][i%4] = dl * grid1[i] * select(1, -1, signs[0] & kmask_iq2xs[i]);
-        reg[i/4+2][i%4] = dl * grid2[i] * select(1, -1, signs[1] & kmask_iq2xs[i]);
-    }
-}
-
-template <typename type4x4>
-void dequantize_iq1_s(device const block_iq1_s * xb, short il, thread type4x4 & reg) {
-    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
-    const int ib32 = il/2;
-    il = il%2;
-    const float d = xb->d;
-    device const uint8_t  * qs = xb->qs + 4*ib32 + 2*il;
-    device const uint16_t * qh = xb->qh;
-    const float dl = d * (2*((qh[ib32] >> 12) & 7) + 1);
-    const float ml = dl * (qh[ib32] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA);
-    const uint16_t h = qh[ib32] >> 6*il;
-    constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((h << 8) & 0x700)));
-    constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((h << 5) & 0x700)));
-    for (int i = 0; i < 4; ++i) {
-        reg[0][i] = dl * (grid1[i] & 0xf) + ml;
-        reg[1][i] = dl * (grid1[i] >>  4) + ml;
-        reg[2][i] = dl * (grid2[i] & 0xf) + ml;
-        reg[3][i] = dl * (grid2[i] >>  4) + ml;
-    }
-}
-
-template <typename type4x4>
-void dequantize_iq1_m(device const block_iq1_m * xb, short il, thread type4x4 & reg) {
-    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
-    const int ib32 = il/2;
-    il = il%2;
-    device const uint16_t * sc = (device const uint16_t *)xb->scales;
-
-    iq1m_scale_t scale;
-    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-    const float d = scale.f16;
-
-    device const uint8_t * qs = xb->qs + 4*ib32 + 2*il;
-    device const uint8_t * qh = xb->qh + 2*ib32 + il;
-
-    const float dl  = d * (2*((sc[ib32/2] >> (6*(ib32%2)+3*il)) & 7) + 1);
-    const float ml1 = dl * (qh[0] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
-    const float ml2 = dl * (qh[0] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
-    constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700)));
-    constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 4) & 0x700)));
-    for (int i = 0; i < 4; ++i) {
-        reg[0][i] = dl * (grid1[i] & 0xf) + ml1;
-        reg[1][i] = dl * (grid1[i] >>  4) + ml1;
-        reg[2][i] = dl * (grid2[i] & 0xf) + ml2;
-        reg[3][i] = dl * (grid2[i] >>  4) + ml2;
-    }
-}
-
-template <typename type4x4>
-void dequantize_iq4_nl(device const block_iq4_nl * xb, short il, thread type4x4 & reg) {
-    device const uint16_t * q4 = (device const uint16_t *)xb->qs;
-    const float d = xb->d;
-    uint32_t aux32;
-    thread const uint8_t * q8 = (thread const uint8_t *)&aux32;
-    for (int i = 0; i < 4; ++i) {
-        aux32 = ((q4[2*i] | (q4[2*i+1] << 16)) >> 4*il) & 0x0f0f0f0f;
-        reg[i][0] = d * kvalues_iq4nl_f[q8[0]];
-        reg[i][1] = d * kvalues_iq4nl_f[q8[1]];
-        reg[i][2] = d * kvalues_iq4nl_f[q8[2]];
-        reg[i][3] = d * kvalues_iq4nl_f[q8[3]];
-    }
-}
-
-template <typename type4x4>
-void dequantize_iq4_xs(device const block_iq4_xs * xb, short il, thread type4x4 & reg) {
-    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
-    const int ib32 = il/2;
-    il = il%2;
-    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
-    device const uint32_t * q4 = (device const uint32_t *)xb->qs + 4*ib32;
-    const int ls = ((xb->scales_l[ib32/2] >> 4*(ib32%2)) & 0xf) | (((xb->scales_h >> 2*ib32) & 3) << 4);
-    const float d = (float)xb->d * (ls - 32);
-    uint32_t aux32;
-    thread const uint8_t * q8 = (thread const uint8_t *)&aux32;
-    for (int i = 0; i < 4; ++i) {
-        aux32 = (q4[i] >> 4*il) & 0x0f0f0f0f;
-        reg[i][0] = d * kvalues_iq4nl_f[q8[0]];
-        reg[i][1] = d * kvalues_iq4nl_f[q8[1]];
-        reg[i][2] = d * kvalues_iq4nl_f[q8[2]];
-        reg[i][3] = d * kvalues_iq4nl_f[q8[3]];
-    }
-}
-
-template<typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread float4x4 &)>
-kernel void kernel_get_rows(
-        device const  void * src0,
-        device const  char * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        uint3                tgpig[[threadgroup_position_in_grid]],
-        uint                 tiitg[[thread_index_in_threadgroup]],
-        uint3                tptg [[threads_per_threadgroup]]) {
-    //const int64_t i = tgpig;
-    //const int64_t r = ((device int32_t *) src1)[i];
-
-    const int64_t i10 = tgpig.x;
-    const int64_t i11 = tgpig.y;
-
-    const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0];
-
-    const int64_t i02 = i11;
-
-    for (int64_t ind = tiitg; ind < ne00/16; ind += tptg.x) {
-        float4x4 temp;
-        dequantize_func(
-            ((device const block_q *) ((device char *) src0 + r*nb01 + i02*nb02)) + ind/nl, ind%nl, temp);
-        *(((device float4x4 *) ((device char *) dst + i11*nb2 + i10*nb1)) + ind) = temp;
-    }
-}
-
-kernel void kernel_get_rows_f32(
-        device const  void * src0,
-        device const  char * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        uint3                tgpig[[threadgroup_position_in_grid]],
-        uint                 tiitg[[thread_index_in_threadgroup]],
-        uint3                tptg [[threads_per_threadgroup]]) {
-    const int64_t i10 = tgpig.x;
-    const int64_t i11 = tgpig.y;
-
-    const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0];
-
-    const int64_t i02 = i11;
-
-    for (int ind = tiitg; ind < ne00; ind += tptg.x) {
-        ((device float *) ((device char *) dst + i11*nb2 + i10*nb1))[ind] =
-            ((device float *) ((device char *) src0 + r*nb01 + i02*nb02))[ind];
-    }
-}
-
-kernel void kernel_get_rows_f16(
-        device const  void * src0,
-        device const  char * src1,
-        device       float * dst,
-        constant   int64_t & ne00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        uint3                tgpig[[threadgroup_position_in_grid]],
-        uint                 tiitg[[thread_index_in_threadgroup]],
-        uint3                tptg [[threads_per_threadgroup]]) {
-    const int64_t i10 = tgpig.x;
-    const int64_t i11 = tgpig.y;
-
-    const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0];
-
-    const int64_t i02 = i11;
-
-    for (int ind = tiitg; ind < ne00; ind += tptg.x) {
-        ((device float *) ((device char *) dst + i11*nb2 + i10*nb1))[ind] =
-            ((device half *) ((device char *) src0 + r*nb01 + i02*nb02))[ind];
-    }
-}
-
-kernel void kernel_get_rows_i32(
-        device const  void * src0,
-        device const  char * src1,
-        device     int32_t * dst,
-        constant   int64_t & ne00,
-        constant  uint64_t & nb01,
-        constant  uint64_t & nb02,
-        constant   int64_t & ne10,
-        constant  uint64_t & nb10,
-        constant  uint64_t & nb11,
-        constant  uint64_t & nb1,
-        constant  uint64_t & nb2,
-        uint3                tgpig[[threadgroup_position_in_grid]],
-        uint                 tiitg[[thread_index_in_threadgroup]],
-        uint3                tptg [[threads_per_threadgroup]]) {
-    const int64_t i10 = tgpig.x;
-    const int64_t i11 = tgpig.y;
-
-    const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0];
-
-    const int64_t i02 = i11;
-
-    for (int ind = tiitg; ind < ne00; ind += tptg.x) {
-        ((device int32_t *) ((device char *) dst + i11*nb2 + i10*nb1))[ind] =
-            ((device int32_t *) ((device char *) src0 + r*nb01 + i02*nb02))[ind];
-    }
-}
-
-
-#define BLOCK_SIZE_M 64 // 8 simdgroup matrices from matrix A
-#define BLOCK_SIZE_N 32 // 4 simdgroup matrices from matrix B
-#define BLOCK_SIZE_K 32
-#define THREAD_MAT_M 4 // each thread take 4 simdgroup matrices from matrix A
-#define THREAD_MAT_N 2 // each thread take 2 simdgroup matrices from matrix B
-#define THREAD_PER_BLOCK 128
-#define THREAD_PER_ROW 2 // 2 thread for each row in matrix A to load numbers
-#define THREAD_PER_COL 4 // 4 thread for each row in matrix B to load numbers
-#define SG_MAT_SIZE 64 // simdgroup matrix is of shape 8x8
-#define SG_MAT_ROW 8
-
-// each block_q contains 16*nl weights
-template<typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread half4x4 &)>
-void kernel_mul_mm_impl(device const  uchar * src0,
-                        device const  uchar * src1,
-                        device        float * dst,
-                        constant    int64_t & ne00,
-                        constant    int64_t & ne02,
-                        constant   uint64_t & nb01,
-                        constant   uint64_t & nb02,
-                        constant    int64_t & ne12,
-                        constant   uint64_t & nb10,
-                        constant   uint64_t & nb11,
-                        constant   uint64_t & nb12,
-                        constant    int64_t & ne0,
-                        constant    int64_t & ne1,
-                        constant       uint & r2,
-                        constant       uint & r3,
-                        threadgroup   uchar * shared_memory [[threadgroup(0)]],
-                        uint3                 tgpig[[threadgroup_position_in_grid]],
-                        uint                  tiitg[[thread_index_in_threadgroup]],
-                        uint                  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    threadgroup half  * sa = (threadgroup half  *)(shared_memory);
-    threadgroup float * sb = (threadgroup float *)(shared_memory + 4096);
-
-    const uint r0 = tgpig.y;
-    const uint r1 = tgpig.x;
-    const uint im = tgpig.z;
-
-    // if this block is of 64x32 shape or smaller
-    short n_rows = (ne0 - r0 * BLOCK_SIZE_M < BLOCK_SIZE_M) ? (ne0 - r0 * BLOCK_SIZE_M) : BLOCK_SIZE_M;
-    short n_cols = (ne1 - r1 * BLOCK_SIZE_N < BLOCK_SIZE_N) ? (ne1 - r1 * BLOCK_SIZE_N) : BLOCK_SIZE_N;
-
-    // a thread shouldn't load data outside of the matrix
-    short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1;
-    short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1;
-
-    simdgroup_half8x8  ma[4];
-    simdgroup_float8x8 mb[2];
-    simdgroup_float8x8 c_res[8];
-    for (int i = 0; i < 8; i++){
-        c_res[i] = make_filled_simdgroup_matrix<float, 8>(0.f);
-    }
-
-    short il = (tiitg % THREAD_PER_ROW);
-
-    const uint i12 = im%ne12;
-    const uint i13 = im/ne12;
-
-    uint   offset0 = (i12/r2)*nb02 + (i13/r3)*(nb02*ne02);
-    ushort offset1 = il/nl;
-
-    device const block_q * x = (device const block_q *)(src0 + (r0 * BLOCK_SIZE_M + thread_row) * nb01 + offset0) + offset1;
-    device const float   * y = (device const float   *)(src1
-        + nb12 * im
-        + nb11 * (r1 * BLOCK_SIZE_N + thread_col)
-        + nb10 * (BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL)));
-
-    for (int loop_k = 0; loop_k < ne00; loop_k += BLOCK_SIZE_K) {
-        // load data and store to threadgroup memory
-        half4x4 temp_a;
-        dequantize_func(x, il, temp_a);
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        #pragma unroll(16)
-        for (int i = 0; i < 16; i++) {
-            *(sa + SG_MAT_SIZE * ((tiitg / THREAD_PER_ROW / 8) \
-            +                     (tiitg % THREAD_PER_ROW) * 16 + (i / 8) * 8) \
-            +                     (tiitg / THREAD_PER_ROW) % 8  + (i & 7) * 8) = temp_a[i/4][i%4];
-        }
-
-        *(threadgroup float2x4 *)(sb + (tiitg % THREAD_PER_COL) * 8 * 32 + 8 * (tiitg / THREAD_PER_COL)) = *((device float2x4 *)y);
-
-        il = (il + 2 < nl) ? il + 2 : il % 2;
-        x  = (il < 2) ? x + (2+nl-1)/nl : x;
-        y += BLOCK_SIZE_K;
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        // load matrices from threadgroup memory and conduct outer products
-        threadgroup half  * lsma = (sa + THREAD_MAT_M * SG_MAT_SIZE * (sgitg % 2));
-        threadgroup float * lsmb = (sb + THREAD_MAT_N * SG_MAT_SIZE * (sgitg / 2));
-
-        #pragma unroll(4)
-        for (int ik = 0; ik < BLOCK_SIZE_K / 8; ik++) {
-            #pragma unroll(4)
-            for (int i = 0; i < 4; i++) {
-                simdgroup_load(ma[i],lsma + SG_MAT_SIZE * i);
-            }
-            simdgroup_barrier(mem_flags::mem_none);
-            #pragma unroll(2)
-            for (int i = 0; i < 2; i++) {
-                simdgroup_load(mb[i],lsmb + SG_MAT_SIZE * i);
-            }
-
-            lsma += BLOCK_SIZE_M / SG_MAT_ROW * SG_MAT_SIZE;
-            lsmb += BLOCK_SIZE_N / SG_MAT_ROW * SG_MAT_SIZE;
-
-            #pragma unroll(8)
-            for (int i = 0; i < 8; i++){
-                simdgroup_multiply_accumulate(c_res[i], mb[i/4], ma[i%4], c_res[i]);
-            }
-        }
-    }
-
-    if ((r0 + 1) * BLOCK_SIZE_M <= ne0 && (r1 + 1) * BLOCK_SIZE_N <= ne1) {
-        device float * C = dst + (BLOCK_SIZE_M * r0 + 32 * (sgitg &  1)) \
-                               + (BLOCK_SIZE_N * r1 + 16 * (sgitg >> 1)) * ne0 + im*ne1*ne0;
-        for (int i = 0; i < 8; i++) {
-            simdgroup_store(c_res[i], C + 8 * (i%4) + 8 * ne0 * (i/4), ne0);
-        }
-    } else {
-        // block is smaller than 64x32, we should avoid writing data outside of the matrix
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-        threadgroup float * temp_str = ((threadgroup float *)shared_memory) \
-                                      + 32 * (sgitg&1) + (16 * (sgitg>>1)) * BLOCK_SIZE_M;
-        for (int i = 0; i < 8; i++) {
-            simdgroup_store(c_res[i], temp_str + 8 * (i%4) + 8 * BLOCK_SIZE_M * (i/4), BLOCK_SIZE_M);
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        device float * C = dst + (BLOCK_SIZE_M * r0) + (BLOCK_SIZE_N * r1) * ne0 + im*ne1*ne0;
-        if (sgitg == 0) {
-            for (int i = 0; i < n_rows; i++) {
-                for (int j = tiitg; j < n_cols; j += BLOCK_SIZE_N) {
-                    *(C + i + j * ne0) = *(temp_str + i + j * BLOCK_SIZE_M);
-                }
-            }
-        }
-    }
-}
-
-// same as kernel_mul_mm_impl, but src1 and dst are accessed via indices stored in rowids
-template<typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread half4x4 &)>
-void kernel_mul_mm_id_impl(
-        device const  uchar * src0,
-        device const  uchar * src1,
-        threadgroup ushort2 * rowids,
-        device        float * dst,
-        constant    int64_t & ne00,
-        constant    int64_t & ne02,
-        constant   uint64_t & nb01,
-        constant   uint64_t & nb02,
-        constant    int64_t & ne11,
-        constant    int64_t & ne12,
-        constant   uint64_t & nb10,
-        constant   uint64_t & nb11,
-        constant   uint64_t & nb12,
-        constant    int64_t & ne0,
-                    int64_t   ne1,
-                    int64_t   ne0ne1,
-        threadgroup   uchar * shared_memory,
-        uint3                 tgpig[[threadgroup_position_in_grid]],
-        uint                  tiitg[[thread_index_in_threadgroup]],
-        uint                  sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    threadgroup half  * sa = (threadgroup half  *)(shared_memory);
-    threadgroup float * sb = (threadgroup float *)(shared_memory + 4096);
-
-    const uint r0 = tgpig.y;
-    const uint r1 = tgpig.x;
-
-    if (r1 * BLOCK_SIZE_N >= ne1) return;
-
-    // if this block is of 64x32 shape or smaller
-    short n_rows = (ne0 - r0 * BLOCK_SIZE_M < BLOCK_SIZE_M) ? (ne0 - r0 * BLOCK_SIZE_M) : BLOCK_SIZE_M;
-    short n_cols = (ne1 - r1 * BLOCK_SIZE_N < BLOCK_SIZE_N) ? (ne1 - r1 * BLOCK_SIZE_N) : BLOCK_SIZE_N;
-
-    // a thread shouldn't load data outside of the matrix
-    short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1;
-    short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1;
-
-    simdgroup_half8x8  ma[4];
-    simdgroup_float8x8 mb[2];
-    simdgroup_float8x8 c_res[8];
-    for (int i = 0; i < 8; i++){
-        c_res[i] = make_filled_simdgroup_matrix<float, 8>(0.f);
-    }
-    short il = (tiitg % THREAD_PER_ROW);
-
-    ushort offset1 = il/nl;
-
-    threadgroup const auto & id = rowids[r1 * BLOCK_SIZE_N + thread_col];
-
-    device const block_q * x = (device const block_q *)(src0 + (r0 * BLOCK_SIZE_M + thread_row) * nb01) + offset1;
-    device const float   * y = (device const float   *)(src1
-        + nb12 * id[1]
-        + nb11 * (id[0] % ne11)
-        + nb10 * (BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL)));
-
-    for (int loop_k = 0; loop_k < ne00; loop_k += BLOCK_SIZE_K) {
-        // load data and store to threadgroup memory
-        half4x4 temp_a;
-        dequantize_func(x, il, temp_a);
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        for (int i = 0; i < 16; i++) {
-            *(sa + SG_MAT_SIZE * ((tiitg / THREAD_PER_ROW / 8) \
-            +                     (tiitg % THREAD_PER_ROW) * 16 + (i / 8) * 8) \
-            +                     (tiitg / THREAD_PER_ROW) % 8  + (i & 7) * 8) = temp_a[i/4][i%4];
-        }
-
-        *(threadgroup float2x4 *)(sb + (tiitg % THREAD_PER_COL) * 8 * 32 + 8 * (tiitg / THREAD_PER_COL)) = *((device float2x4 *)y);
-
-        il = (il + 2 < nl) ? il + 2 : il % 2;
-        x  = (il < 2) ? x + (2+nl-1)/nl : x;
-        y += BLOCK_SIZE_K;
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        // load matrices from threadgroup memory and conduct outer products
-        threadgroup half  * lsma = (sa + THREAD_MAT_M * SG_MAT_SIZE * (sgitg % 2));
-        threadgroup float * lsmb = (sb + THREAD_MAT_N * SG_MAT_SIZE * (sgitg / 2));
-
-        for (int ik = 0; ik < BLOCK_SIZE_K / 8; ik++) {
-            for (int i = 0; i < 4; i++) {
-                simdgroup_load(ma[i], lsma + SG_MAT_SIZE * i);
-            }
-            simdgroup_barrier(mem_flags::mem_none);
-            for (int i = 0; i < 2; i++) {
-                simdgroup_load(mb[i], lsmb + SG_MAT_SIZE * i);
-            }
-
-            lsma += BLOCK_SIZE_M / SG_MAT_ROW * SG_MAT_SIZE;
-            lsmb += BLOCK_SIZE_N / SG_MAT_ROW * SG_MAT_SIZE;
-
-            for (int i = 0; i < 8; i++){
-                simdgroup_multiply_accumulate(c_res[i], mb[i/4], ma[i%4], c_res[i]);
-            }
-        }
-    }
-
-    {
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-        threadgroup float * temp_str = ((threadgroup float *)shared_memory) \
-                                      + 32 * (sgitg&1) + (16 * (sgitg>>1)) * BLOCK_SIZE_M;
-        for (int i = 0; i < 8; i++) {
-            simdgroup_store(c_res[i], temp_str + 8 * (i%4) + 8 * BLOCK_SIZE_M * (i/4), BLOCK_SIZE_M);
-        }
-
-        threadgroup_barrier(mem_flags::mem_threadgroup);
-
-        device float * C = dst + (BLOCK_SIZE_M * r0);
-        if (sgitg == 0) {
-            for (int j = tiitg; j < n_cols; j += BLOCK_SIZE_N) {
-                threadgroup const auto & jid = rowids[r1 * BLOCK_SIZE_N + j];
-                int joff =  jid[0] * ne0 + jid[1] * ne0ne1;
-                for (int i = 0; i < n_rows; i++) {
-                    *(C + i + joff) = *(temp_str + i + j * BLOCK_SIZE_M);
-                }
-            }
-        }
-    }
-}
-
-template<typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread half4x4 &)>
-kernel void kernel_mul_mm(device const  uchar * src0,
-                          device const  uchar * src1,
-                          device        float * dst,
-                          constant    int64_t & ne00,
-                          constant    int64_t & ne02,
-                          constant   uint64_t & nb01,
-                          constant   uint64_t & nb02,
-                          constant    int64_t & ne12,
-                          constant   uint64_t & nb10,
-                          constant   uint64_t & nb11,
-                          constant   uint64_t & nb12,
-                          constant    int64_t & ne0,
-                          constant    int64_t & ne1,
-                          constant       uint & r2,
-                          constant       uint & r3,
-                          threadgroup   uchar * shared_memory [[threadgroup(0)]],
-                          uint3                 tgpig[[threadgroup_position_in_grid]],
-                          uint                  tiitg[[thread_index_in_threadgroup]],
-                          uint                  sgitg[[simdgroup_index_in_threadgroup]]) {
-    kernel_mul_mm_impl<block_q, nl, dequantize_func>(
-        src0,
-        src1,
-        dst,
-        ne00,
-        ne02,
-        nb01,
-        nb02,
-        ne12,
-        nb10,
-        nb11,
-        nb12,
-        ne0,
-        ne1,
-        r2,
-        r3,
-        shared_memory,
-        tgpig,
-        tiitg,
-        sgitg);
-}
-
-template<typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread half4x4 &)>
-kernel void kernel_mul_mm_id(
-        device const   uchar * src0s,
-        device const   uchar * src1,
-        device         float * dst,
-        device const   uchar * ids,
-        constant     int64_t & nei0,
-        constant     int64_t & nei1,
-        constant    uint64_t & nbi1,
-        constant     int64_t & ne00,
-        constant     int64_t & ne02,
-        constant    uint64_t & nb01,
-        constant    uint64_t & nb02,
-        constant     int64_t & ne11,
-        constant     int64_t & ne12,
-        constant     int64_t & ne13,
-        constant    uint64_t & nb10,
-        constant    uint64_t & nb11,
-        constant    uint64_t & nb12,
-        constant     int64_t & ne0,
-        constant     int64_t & ne1,
-        constant    uint64_t & nb1,
-        threadgroup    uchar * shared_memory [[threadgroup(0)]],
-        uint3                  tgpig[[threadgroup_position_in_grid]],
-        uint                   tiitg[[thread_index_in_threadgroup]],
-        uint                   sgitg[[simdgroup_index_in_threadgroup]]) {
-
-    const int32_t i02 = tgpig.z;
-    tgpig.z = 0;
-
-    device const uchar * src0 = src0s + i02*nb02;
-
-    // row indices
-    threadgroup ushort2 * rowids = (threadgroup ushort2 *)(shared_memory + 8192);
-
-    // TODO: parallelize this loop
-    int64_t _ne1 = 0;
-    for (ushort ii1 = 0; ii1 < nei1; ii1++) {
-        for (ushort ii0 = 0; ii0 < nei0; ii0++) {
-            int32_t id = ((device int32_t *) (ids + ii1*nbi1))[ii0];
-            if (id == i02) {
-                //if (tiitg == 0) {
-                    rowids[_ne1] = ushort2(ii0, ii1);
-                //}
-                _ne1++;
-            }
-        }
-    }
-
-    threadgroup_barrier(mem_flags::mem_threadgroup);
-
-    kernel_mul_mm_id_impl<block_q, nl, dequantize_func>(
-        src0,
-        src1,
-        rowids,
-        dst,
-        ne00,
-        ne02,
-        nb01,
-        nb02,
-        ne11,
-        ne12,
-        nb10,
-        nb11,
-        nb12,
-        ne0,
-        _ne1,
-        ne0*ne1,
-        shared_memory,
-        tgpig,
-        tiitg,
-        sgitg);
-}
-
-#define QK_NL 16
-
-//
-// get rows
-//
-
-typedef void (get_rows_t)(
-        device const void * src0,
-        device const char * src1,
-        device      float * dst,
-        constant  int64_t & ne00,
-        constant uint64_t & nb01,
-        constant uint64_t & nb02,
-        constant  int64_t & ne10,
-        constant uint64_t & nb10,
-        constant uint64_t & nb11,
-        constant uint64_t & nb1,
-        constant uint64_t & nb2,
-        uint3, uint, uint3);
-
-//template [[host_name("kernel_get_rows_f32")]]  kernel get_rows_t kernel_get_rows<float4x4,   1, dequantize_f32>;
-//template [[host_name("kernel_get_rows_f16")]]  kernel get_rows_t kernel_get_rows<half4x4,    1, dequantize_f16>;
-template [[host_name("kernel_get_rows_q4_0")]] kernel get_rows_t kernel_get_rows<block_q4_0, 2, dequantize_q4_0>;
-template [[host_name("kernel_get_rows_q4_1")]] kernel get_rows_t kernel_get_rows<block_q4_1, 2, dequantize_q4_1>;
-template [[host_name("kernel_get_rows_q5_0")]] kernel get_rows_t kernel_get_rows<block_q5_0, 2, dequantize_q5_0>;
-template [[host_name("kernel_get_rows_q5_1")]] kernel get_rows_t kernel_get_rows<block_q5_1, 2, dequantize_q5_1>;
-template [[host_name("kernel_get_rows_q8_0")]] kernel get_rows_t kernel_get_rows<block_q8_0, 2, dequantize_q8_0>;
-template [[host_name("kernel_get_rows_q2_K")]] kernel get_rows_t kernel_get_rows<block_q2_K, QK_NL, dequantize_q2_K>;
-template [[host_name("kernel_get_rows_q3_K")]] kernel get_rows_t kernel_get_rows<block_q3_K, QK_NL, dequantize_q3_K>;
-template [[host_name("kernel_get_rows_q4_K")]] kernel get_rows_t kernel_get_rows<block_q4_K, QK_NL, dequantize_q4_K>;
-template [[host_name("kernel_get_rows_q5_K")]] kernel get_rows_t kernel_get_rows<block_q5_K, QK_NL, dequantize_q5_K>;
-template [[host_name("kernel_get_rows_q6_K")]] kernel get_rows_t kernel_get_rows<block_q6_K, QK_NL, dequantize_q6_K>;
-template [[host_name("kernel_get_rows_iq2_xxs")]] kernel get_rows_t kernel_get_rows<block_iq2_xxs, QK_NL, dequantize_iq2_xxs>;
-template [[host_name("kernel_get_rows_iq2_xs")]]  kernel get_rows_t kernel_get_rows<block_iq2_xs,  QK_NL, dequantize_iq2_xs>;
-template [[host_name("kernel_get_rows_iq3_xxs")]] kernel get_rows_t kernel_get_rows<block_iq3_xxs, QK_NL, dequantize_iq3_xxs>;
-template [[host_name("kernel_get_rows_iq3_s")]]   kernel get_rows_t kernel_get_rows<block_iq3_s,   QK_NL, dequantize_iq3_s>;
-template [[host_name("kernel_get_rows_iq2_s")]]   kernel get_rows_t kernel_get_rows<block_iq2_s,   QK_NL, dequantize_iq2_s>;
-template [[host_name("kernel_get_rows_iq1_s")]]   kernel get_rows_t kernel_get_rows<block_iq1_s,   QK_NL, dequantize_iq1_s>;
-template [[host_name("kernel_get_rows_iq1_m")]]   kernel get_rows_t kernel_get_rows<block_iq1_m,   QK_NL, dequantize_iq1_m>;
-template [[host_name("kernel_get_rows_iq4_nl")]]  kernel get_rows_t kernel_get_rows<block_iq4_nl,  2,     dequantize_iq4_nl>;
-template [[host_name("kernel_get_rows_iq4_xs")]]  kernel get_rows_t kernel_get_rows<block_iq4_xs,  QK_NL, dequantize_iq4_xs>;
-
-//
-// matrix-matrix multiplication
-//
-
-typedef decltype(kernel_mul_mm<float4x4, 1, dequantize_f32>) mat_mm_t;
-
-template [[host_name("kernel_mul_mm_f32_f32")]]     kernel mat_mm_t kernel_mul_mm<float4x4,      1,     dequantize_f32>;
-template [[host_name("kernel_mul_mm_f16_f32")]]     kernel mat_mm_t kernel_mul_mm<half4x4,       1,     dequantize_f16>;
-template [[host_name("kernel_mul_mm_q4_0_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q4_0,    2,     dequantize_q4_0>;
-template [[host_name("kernel_mul_mm_q4_1_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q4_1,    2,     dequantize_q4_1>;
-template [[host_name("kernel_mul_mm_q5_0_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q5_0,    2,     dequantize_q5_0>;
-template [[host_name("kernel_mul_mm_q5_1_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q5_1,    2,     dequantize_q5_1>;
-template [[host_name("kernel_mul_mm_q8_0_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q8_0,    2,     dequantize_q8_0>;
-template [[host_name("kernel_mul_mm_q2_K_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q2_K,    QK_NL, dequantize_q2_K>;
-template [[host_name("kernel_mul_mm_q3_K_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q3_K,    QK_NL, dequantize_q3_K>;
-template [[host_name("kernel_mul_mm_q4_K_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q4_K,    QK_NL, dequantize_q4_K>;
-template [[host_name("kernel_mul_mm_q5_K_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q5_K,    QK_NL, dequantize_q5_K>;
-template [[host_name("kernel_mul_mm_q6_K_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q6_K,    QK_NL, dequantize_q6_K>;
-template [[host_name("kernel_mul_mm_iq2_xxs_f32")]] kernel mat_mm_t kernel_mul_mm<block_iq2_xxs, QK_NL, dequantize_iq2_xxs>;
-template [[host_name("kernel_mul_mm_iq2_xs_f32")]]  kernel mat_mm_t kernel_mul_mm<block_iq2_xs,  QK_NL, dequantize_iq2_xs>;
-template [[host_name("kernel_mul_mm_iq3_xxs_f32")]] kernel mat_mm_t kernel_mul_mm<block_iq3_xxs, QK_NL, dequantize_iq3_xxs>;
-template [[host_name("kernel_mul_mm_iq3_s_f32")]]   kernel mat_mm_t kernel_mul_mm<block_iq3_s,   QK_NL, dequantize_iq3_s>;
-template [[host_name("kernel_mul_mm_iq2_s_f32")]]   kernel mat_mm_t kernel_mul_mm<block_iq2_s,   QK_NL, dequantize_iq2_s>;
-template [[host_name("kernel_mul_mm_iq1_s_f32")]]   kernel mat_mm_t kernel_mul_mm<block_iq1_s,   QK_NL, dequantize_iq1_s>;
-template [[host_name("kernel_mul_mm_iq1_m_f32")]]   kernel mat_mm_t kernel_mul_mm<block_iq1_m,   QK_NL, dequantize_iq1_m>;
-template [[host_name("kernel_mul_mm_iq4_nl_f32")]]  kernel mat_mm_t kernel_mul_mm<block_iq4_nl,  2,     dequantize_iq4_nl>;
-template [[host_name("kernel_mul_mm_iq4_xs_f32")]]  kernel mat_mm_t kernel_mul_mm<block_iq4_xs,  QK_NL, dequantize_iq4_xs>;
-
-//
-// indirect matrix-matrix multiplication
-//
-
-typedef decltype(kernel_mul_mm_id<float4x4, 1, dequantize_f32>) mat_mm_id_t;
-
-template [[host_name("kernel_mul_mm_id_f32_f32")]]     kernel mat_mm_id_t kernel_mul_mm_id<float4x4,      1,     dequantize_f32>;
-template [[host_name("kernel_mul_mm_id_f16_f32")]]     kernel mat_mm_id_t kernel_mul_mm_id<half4x4,       1,     dequantize_f16>;
-template [[host_name("kernel_mul_mm_id_q4_0_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q4_0,    2,     dequantize_q4_0>;
-template [[host_name("kernel_mul_mm_id_q4_1_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q4_1,    2,     dequantize_q4_1>;
-template [[host_name("kernel_mul_mm_id_q5_0_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q5_0,    2,     dequantize_q5_0>;
-template [[host_name("kernel_mul_mm_id_q5_1_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q5_1,    2,     dequantize_q5_1>;
-template [[host_name("kernel_mul_mm_id_q8_0_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q8_0,    2,     dequantize_q8_0>;
-template [[host_name("kernel_mul_mm_id_q2_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q2_K,    QK_NL, dequantize_q2_K>;
-template [[host_name("kernel_mul_mm_id_q3_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q3_K,    QK_NL, dequantize_q3_K>;
-template [[host_name("kernel_mul_mm_id_q4_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q4_K,    QK_NL, dequantize_q4_K>;
-template [[host_name("kernel_mul_mm_id_q5_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q5_K,    QK_NL, dequantize_q5_K>;
-template [[host_name("kernel_mul_mm_id_q6_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q6_K,    QK_NL, dequantize_q6_K>;
-template [[host_name("kernel_mul_mm_id_iq2_xxs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id<block_iq2_xxs, QK_NL, dequantize_iq2_xxs>;
-template [[host_name("kernel_mul_mm_id_iq2_xs_f32")]]  kernel mat_mm_id_t kernel_mul_mm_id<block_iq2_xs,  QK_NL, dequantize_iq2_xs>;
-template [[host_name("kernel_mul_mm_id_iq3_xxs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id<block_iq3_xxs, QK_NL, dequantize_iq3_xxs>;
-template [[host_name("kernel_mul_mm_id_iq3_s_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id<block_iq3_s,   QK_NL, dequantize_iq3_s>;
-template [[host_name("kernel_mul_mm_id_iq2_s_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id<block_iq2_s,   QK_NL, dequantize_iq2_s>;
-template [[host_name("kernel_mul_mm_id_iq1_s_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id<block_iq1_s,   QK_NL, dequantize_iq1_s>;
-template [[host_name("kernel_mul_mm_id_iq1_m_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id<block_iq1_m,   QK_NL, dequantize_iq1_m>;
-template [[host_name("kernel_mul_mm_id_iq4_nl_f32")]]  kernel mat_mm_id_t kernel_mul_mm_id<block_iq4_nl,  2,     dequantize_iq4_nl>;
-template [[host_name("kernel_mul_mm_id_iq4_xs_f32")]]  kernel mat_mm_id_t kernel_mul_mm_id<block_iq4_xs,  QK_NL, dequantize_iq4_xs>;
-
-//
-// matrix-vector multiplication
-//
-
-typedef void (kernel_mul_mv_impl_t)(
-        device const  char * src0,
-        device const  char * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                  uint64_t   nb00,
-                  uint64_t   nb01,
-                  uint64_t   nb02,
-                   int64_t   ne10,
-                   int64_t   ne11,
-                   int64_t   ne12,
-                  uint64_t   nb10,
-                  uint64_t   nb11,
-                  uint64_t   nb12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-                   uint3     tgpig,
-                   uint      tiisg);
-
-typedef void (kernel_mul_mv2_impl_t)(
-        device const  void * src0,
-        device const float * src1,
-        device       float * dst,
-                   int64_t   ne00,
-                   int64_t   ne01,
-                   int64_t   ne02,
-                   int64_t   ne10,
-                   int64_t   ne12,
-                   int64_t   ne0,
-                   int64_t   ne1,
-                   uint      r2,
-                   uint      r3,
-        threadgroup int8_t * shared_values,
-                   uint3     tgpig,
-                   uint      tiisg,
-                   uint      sgitg);
-
-template<kernel_mul_mv_impl_t impl_fn>
-void mmv_fn(
-        device const    char * src0,
-        device const    char * src1,
-        device         float * dst,
-                     int64_t   ne00,
-                     int64_t   ne01,
-                     int64_t   ne02,
-                    uint64_t   nb00,
-                    uint64_t   nb01,
-                    uint64_t   nb02,
-                     int64_t   ne10,
-                     int64_t   ne11,
-                     int64_t   ne12,
-                     int64_t   ne13,
-                    uint64_t   nb10,
-                    uint64_t   nb11,
-                    uint64_t   nb12,
-                     int64_t   ne0,
-                     int64_t   ne1,
-                    uint64_t   nb1,
-                        uint   r2,
-                        uint   r3,
-        threadgroup int8_t   * shared_values,
-        uint3                  tgpig,
-        uint                   tiitg,
-        uint                   tiisg,
-        uint                   sgitg) {
-    impl_fn(src0,src1,dst,ne00,ne01,ne02,nb00,nb01,nb02,ne10,ne11,ne12,nb10,nb11,nb12,ne0,ne1,r2,r3,tgpig,tiisg);
-}
-
-template<kernel_mul_mv2_impl_t impl_fn>
-void mmv_fn(
-        device const    char * src0,
-        device const    char * src1,
-        device         float * dst,
-                     int64_t   ne00,
-                     int64_t   ne01,
-                     int64_t   ne02,
-                    uint64_t   nb00,
-                    uint64_t   nb01,
-                    uint64_t   nb02,
-                     int64_t   ne10,
-                     int64_t   ne11,
-                     int64_t   ne12,
-                     int64_t   ne13,
-                    uint64_t   nb10,
-                    uint64_t   nb11,
-                    uint64_t   nb12,
-                     int64_t   ne0,
-                     int64_t   ne1,
-                    uint64_t   nb1,
-                        uint   r2,
-                        uint   r3,
-        threadgroup int8_t   * shared_values,
-        uint3                  tgpig,
-        uint                   tiitg,
-        uint                   tiisg,
-        uint                   sgitg) {
-    impl_fn(src0,(const device float *)src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,shared_values,tgpig,tiisg,sgitg);
-}
-
-typedef decltype(mmv_fn<kernel_mul_mv_f32_f32_impl>) mul_mv_impl_fn_t;
-
-template<mul_mv_impl_fn_t impl_fn>
-kernel void kernel_mul_mv_id(
-        device const    char * src0s,
-        device const    char * src1,
-        device         float * dst,
-        device const    char * ids,
-        constant     int64_t & nei0,
-        constant     int64_t & nei1,
-        constant    uint64_t & nbi1,
-        constant     int64_t & ne00,
-        constant     int64_t & ne01,
-        constant     int64_t & ne02,
-        constant    uint64_t & nb00,
-        constant    uint64_t & nb01,
-        constant    uint64_t & nb02,
-        constant     int64_t & ne10,
-        constant     int64_t & ne11,
-        constant     int64_t & ne12,
-        constant     int64_t & ne13,
-        constant    uint64_t & nb10,
-        constant    uint64_t & nb11,
-        constant    uint64_t & nb12,
-        constant     int64_t & ne0,
-        constant     int64_t & ne1,
-        constant    uint64_t & nb1,
-        threadgroup int8_t   * shared_values [[threadgroup(0)]],
-        uint3                  tgpig[[threadgroup_position_in_grid]],
-        uint                   tiitg[[thread_index_in_threadgroup]],
-        uint                   tiisg[[thread_index_in_simdgroup]],
-        uint                   sgitg[[simdgroup_index_in_threadgroup]]) {
-    const int iid1 = tgpig.z/nei0;
-    const int idx = tgpig.z%nei0;
-
-    tgpig.z = 0;
-
-    const int32_t i02 = ((device const int32_t *) (ids + iid1*nbi1))[idx];
-
-    const int64_t i11 = idx % ne11;
-    const int64_t i12 = iid1;
-
-    const int64_t i1 = idx;
-    const int64_t i2 = i12;
-
-    device const char * src0_cur = src0s + i02*nb02;
-    device const char * src1_cur = src1 + i11*nb11 + i12*nb12;
-    device      float * dst_cur  = dst + i1*ne0 + i2*ne1*ne0;
-
-    impl_fn(
-        /* src0 */ src0_cur,
-        /* src1 */ src1_cur,
-        /* dst  */ dst_cur,
-        /* ne00 */ ne00,
-        /* ne01 */ ne01,
-        /* ne02 */ 1,//ne02,
-        /* nb00 */ nb00,
-        /* nb01 */ nb01,
-        /* nb02 */ nb02,
-        /* ne10 */ ne10,
-        /* ne11 */ 1,//ne11,
-        /* ne12 */ 1,//ne12,
-        /* ne13 */ 1,//ne13,
-        /* nb10 */ nb10,
-        /* nb11 */ nb11,
-        /* nb12 */ nb12,
-        /* ne0  */ ne0,
-        /* ne1  */ 1,//ne1,
-        /* nb1  */ nb1,
-        /* r2   */ 1,
-        /* r3   */ 1,
-        shared_values,
-        tgpig,
-        tiitg,
-        tiisg,
-        sgitg);
-}
-
-typedef decltype(kernel_mul_mv_id<mmv_fn<kernel_mul_mv_f32_f32_impl>>) kernel_mul_mv_id_t;
-
-template [[host_name("kernel_mul_mv_id_f32_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_f32_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_f16_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_f16_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_q8_0_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q8_0_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_q4_0_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<mul_vec_q_n_f32_impl<block_q4_0, N_DST, N_SIMDGROUP, N_SIMDWIDTH>>>;
-template [[host_name("kernel_mul_mv_id_q4_1_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<mul_vec_q_n_f32_impl<block_q4_1, N_DST, N_SIMDGROUP, N_SIMDWIDTH>>>;
-template [[host_name("kernel_mul_mv_id_q5_0_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<mul_vec_q_n_f32_impl<block_q5_0, N_DST, N_SIMDGROUP, N_SIMDWIDTH>>>;
-template [[host_name("kernel_mul_mv_id_q5_1_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<mul_vec_q_n_f32_impl<block_q5_1, N_DST, N_SIMDGROUP, N_SIMDWIDTH>>>;
-template [[host_name("kernel_mul_mv_id_q2_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q2_K_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_q3_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q3_K_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_q4_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q4_K_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_q5_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q5_K_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_q6_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q6_K_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_iq1_s_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq1_s_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_iq1_m_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq1_m_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_iq2_xxs_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq2_xxs_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_iq2_xs_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq2_xs_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_iq3_xxs_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq3_xxs_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_iq3_s_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq3_s_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_iq2_s_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq2_s_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_iq4_nl_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq4_nl_f32_impl>>;
-template [[host_name("kernel_mul_mv_id_iq4_xs_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq4_xs_f32_impl>>;
-
diff --git a/ggml-quants.c b/ggml-quants.c
deleted file mode 100644 (file)
index ed4a9ad..0000000
+++ /dev/null
@@ -1,14297 +0,0 @@
-#define GGML_COMMON_IMPL_C
-#include "ggml-common.h"
-
-#include "ggml-quants.h"
-#include "ggml-impl.h"
-
-
-#include <math.h>
-#include <string.h>
-#include <assert.h>
-#include <float.h>
-#include <stdlib.h> // for qsort
-#include <stdio.h>  // for GGML_ASSERT
-
-#define GROUP_MAX_EPS 1e-15f
-#define GROUP_MAX_EPS_IQ3_XXS 1e-8f
-#define GROUP_MAX_EPS_IQ2_S 1e-8f
-#define GROUP_MAX_EPS_IQ1_M 1e-7f
-#define GROUP_MAX_EPS_IQ1_S 1e-12f
-
-#if defined(_MSC_VER)
-// disable "possible loss of data" to avoid warnings for hundreds of casts
-// we should just be careful :)
-#pragma warning(disable: 4244 4267)
-#endif
-
-#define UNUSED GGML_UNUSED
-
-// some compilers don't provide _mm256_set_m128i, e.g. gcc 7
-#define MM256_SET_M128I(a, b) _mm256_insertf128_si256(_mm256_castsi128_si256(b), (a), 1)
-
-#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__)
-// multiply int8_t, add results pairwise twice
-static inline __m128i mul_sum_i8_pairs(const __m128i x, const __m128i y) {
-    // Get absolute values of x vectors
-    const __m128i ax = _mm_sign_epi8(x, x);
-    // Sign the values of the y vectors
-    const __m128i sy = _mm_sign_epi8(y, x);
-    // Perform multiplication and create 16-bit values
-    const __m128i dot = _mm_maddubs_epi16(ax, sy);
-    const __m128i ones = _mm_set1_epi16(1);
-    return _mm_madd_epi16(ones, dot);
-}
-
-#if __AVX__ || __AVX2__ || __AVX512F__
-// horizontally add 8 floats
-static inline float hsum_float_8(const __m256 x) {
-    __m128 res = _mm256_extractf128_ps(x, 1);
-    res = _mm_add_ps(res, _mm256_castps256_ps128(x));
-    res = _mm_add_ps(res, _mm_movehl_ps(res, res));
-    res = _mm_add_ss(res, _mm_movehdup_ps(res));
-    return _mm_cvtss_f32(res);
-}
-
-// horizontally add 8 int32_t
-static inline int hsum_i32_8(const __m256i a) {
-    const __m128i sum128 = _mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1));
-    const __m128i hi64 = _mm_unpackhi_epi64(sum128, sum128);
-    const __m128i sum64 = _mm_add_epi32(hi64, sum128);
-    const __m128i hi32  = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1));
-    return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32));
-}
-
-// horizontally add 4 int32_t
-static inline int hsum_i32_4(const __m128i a) {
-    const __m128i hi64 = _mm_unpackhi_epi64(a, a);
-    const __m128i sum64 = _mm_add_epi32(hi64, a);
-    const __m128i hi32  = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1));
-    return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32));
-}
-
-#if defined(__AVX2__) || defined(__AVX512F__)
-// spread 32 bits to 32 bytes { 0x00, 0xFF }
-static inline __m256i bytes_from_bits_32(const uint8_t * x) {
-    uint32_t x32;
-    memcpy(&x32, x, sizeof(uint32_t));
-    const __m256i shuf_mask = _mm256_set_epi64x(
-            0x0303030303030303, 0x0202020202020202,
-            0x0101010101010101, 0x0000000000000000);
-    __m256i bytes = _mm256_shuffle_epi8(_mm256_set1_epi32(x32), shuf_mask);
-    const __m256i bit_mask = _mm256_set1_epi64x(0x7fbfdfeff7fbfdfe);
-    bytes = _mm256_or_si256(bytes, bit_mask);
-    return _mm256_cmpeq_epi8(bytes, _mm256_set1_epi64x(-1));
-}
-
-// Unpack 32 4-bit fields into 32 bytes
-// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval
-static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi)
-{
-    const __m128i tmp = _mm_loadu_si128((const __m128i *)rsi);
-    const __m256i bytes = MM256_SET_M128I(_mm_srli_epi16(tmp, 4), tmp);
-    const __m256i lowMask = _mm256_set1_epi8( 0xF );
-    return _mm256_and_si256(lowMask, bytes);
-}
-
-// add int16_t pairwise and return as float vector
-static inline __m256 sum_i16_pairs_float(const __m256i x) {
-    const __m256i ones = _mm256_set1_epi16(1);
-    const __m256i summed_pairs = _mm256_madd_epi16(ones, x);
-    return _mm256_cvtepi32_ps(summed_pairs);
-}
-
-static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) {
-#if defined(__AVXVNNI__) || (defined(__AVX512VNNI__) && defined(__AVX512VL__))
-    const __m256i zero = _mm256_setzero_si256();
-    const __m256i summed_pairs = _mm256_dpbusd_epi32(zero, ax, sy);
-    return _mm256_cvtepi32_ps(summed_pairs);
-#else
-    // Perform multiplication and create 16-bit values
-    const __m256i dot = _mm256_maddubs_epi16(ax, sy);
-    return sum_i16_pairs_float(dot);
-#endif
-}
-
-// multiply int8_t, add results pairwise twice and return as float vector
-static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) {
-#if __AVXVNNIINT8__
-    const __m256i zero = _mm256_setzero_si256();
-    const __m256i summed_pairs = _mm256_dpbssd_epi32(zero, x, y);
-    return _mm256_cvtepi32_ps(summed_pairs);
-#else
-    // Get absolute values of x vectors
-    const __m256i ax = _mm256_sign_epi8(x, x);
-    // Sign the values of the y vectors
-    const __m256i sy = _mm256_sign_epi8(y, x);
-    return mul_sum_us8_pairs_float(ax, sy);
-#endif
-}
-
-static inline __m128i packNibbles( __m256i bytes )
-{
-    // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh
-#if __AVX512F__
-    const __m256i bytes_srli_4 = _mm256_srli_epi16(bytes, 4);   // 0000_0000_abcd_0000
-    bytes = _mm256_or_si256(bytes, bytes_srli_4);               // 0000_abcd_abcd_efgh
-    return _mm256_cvtepi16_epi8(bytes);                         // abcd_efgh
-#else
-    const __m256i lowByte = _mm256_set1_epi16( 0xFF );
-    __m256i high = _mm256_andnot_si256( lowByte, bytes );
-    __m256i low = _mm256_and_si256( lowByte, bytes );
-    high = _mm256_srli_epi16( high, 4 );
-    bytes = _mm256_or_si256( low, high );
-
-    // Compress uint16_t lanes into bytes
-    __m128i r0 = _mm256_castsi256_si128( bytes );
-    __m128i r1 = _mm256_extracti128_si256( bytes, 1 );
-    return _mm_packus_epi16( r0, r1 );
-#endif
-}
-#elif defined(__AVX__)
-// spread 32 bits to 32 bytes { 0x00, 0xFF }
-static inline __m256i bytes_from_bits_32(const uint8_t * x) {
-    uint32_t x32;
-    memcpy(&x32, x, sizeof(uint32_t));
-    const __m128i shuf_maskl = _mm_set_epi64x(0x0101010101010101, 0x0000000000000000);
-    const __m128i shuf_maskh = _mm_set_epi64x(0x0303030303030303, 0x0202020202020202);
-    __m128i bytesl = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskl);
-    __m128i bytesh = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskh);
-    const __m128i bit_mask = _mm_set1_epi64x(0x7fbfdfeff7fbfdfe);
-    bytesl = _mm_or_si128(bytesl, bit_mask);
-    bytesh = _mm_or_si128(bytesh, bit_mask);
-    bytesl = _mm_cmpeq_epi8(bytesl, _mm_set1_epi64x(-1));
-    bytesh = _mm_cmpeq_epi8(bytesh, _mm_set1_epi64x(-1));
-    return MM256_SET_M128I(bytesh, bytesl);
-}
-
-// Unpack 32 4-bit fields into 32 bytes
-// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval
-static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi)
-{
-    // Load 16 bytes from memory
-    __m128i tmpl = _mm_loadu_si128((const __m128i *)rsi);
-    __m128i tmph = _mm_srli_epi16(tmpl, 4);
-    const __m128i lowMask = _mm_set1_epi8(0xF);
-    tmpl = _mm_and_si128(lowMask, tmpl);
-    tmph = _mm_and_si128(lowMask, tmph);
-    return MM256_SET_M128I(tmph, tmpl);
-}
-
-// add int16_t pairwise and return as float vector
-static inline __m256 sum_i16_pairs_float(const __m128i xh, const __m128i xl) {
-    const __m128i ones = _mm_set1_epi16(1);
-    const __m128i summed_pairsl = _mm_madd_epi16(ones, xl);
-    const __m128i summed_pairsh = _mm_madd_epi16(ones, xh);
-    const __m256i summed_pairs = MM256_SET_M128I(summed_pairsh, summed_pairsl);
-    return _mm256_cvtepi32_ps(summed_pairs);
-}
-
-static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) {
-    const __m128i axl = _mm256_castsi256_si128(ax);
-    const __m128i axh = _mm256_extractf128_si256(ax, 1);
-    const __m128i syl = _mm256_castsi256_si128(sy);
-    const __m128i syh = _mm256_extractf128_si256(sy, 1);
-    // Perform multiplication and create 16-bit values
-    const __m128i dotl = _mm_maddubs_epi16(axl, syl);
-    const __m128i doth = _mm_maddubs_epi16(axh, syh);
-    return sum_i16_pairs_float(doth, dotl);
-}
-
-// multiply int8_t, add results pairwise twice and return as float vector
-static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) {
-    const __m128i xl = _mm256_castsi256_si128(x);
-    const __m128i xh = _mm256_extractf128_si256(x, 1);
-    const __m128i yl = _mm256_castsi256_si128(y);
-    const __m128i yh = _mm256_extractf128_si256(y, 1);
-    // Get absolute values of x vectors
-    const __m128i axl = _mm_sign_epi8(xl, xl);
-    const __m128i axh = _mm_sign_epi8(xh, xh);
-    // Sign the values of the y vectors
-    const __m128i syl = _mm_sign_epi8(yl, xl);
-    const __m128i syh = _mm_sign_epi8(yh, xh);
-    // Perform multiplication and create 16-bit values
-    const __m128i dotl = _mm_maddubs_epi16(axl, syl);
-    const __m128i doth = _mm_maddubs_epi16(axh, syh);
-    return sum_i16_pairs_float(doth, dotl);
-}
-
-static inline __m128i packNibbles( __m128i bytes1, __m128i bytes2 )
-{
-    // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh
-    const __m128i lowByte = _mm_set1_epi16( 0xFF );
-    __m128i high = _mm_andnot_si128( lowByte, bytes1 );
-    __m128i low = _mm_and_si128( lowByte, bytes1 );
-    high = _mm_srli_epi16( high, 4 );
-    bytes1 = _mm_or_si128( low, high );
-    high = _mm_andnot_si128( lowByte, bytes2 );
-    low = _mm_and_si128( lowByte, bytes2 );
-    high = _mm_srli_epi16( high, 4 );
-    bytes2 = _mm_or_si128( low, high );
-
-    return _mm_packus_epi16( bytes1, bytes2);
-}
-#endif
-#elif defined(__SSSE3__)
-// horizontally add 4x4 floats
-static inline float hsum_float_4x4(const __m128 a, const __m128 b, const __m128 c, const __m128 d) {
-    __m128 res_0 =_mm_hadd_ps(a, b);
-    __m128 res_1 =_mm_hadd_ps(c, d);
-    __m128 res =_mm_hadd_ps(res_0, res_1);
-    res =_mm_hadd_ps(res, res);
-    res =_mm_hadd_ps(res, res);
-
-    return _mm_cvtss_f32(res);
-}
-#endif // __AVX__ || __AVX2__ || __AVX512F__
-#endif // defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__)
-
-#if defined(__ARM_NEON) || defined(__wasm_simd128__) || defined(__POWER9_VECTOR__)
-#define B1(c,s,n)  0x ## n ## c ,  0x ## n ## s
-#define B2(c,s,n) B1(c,s,n ## c), B1(c,s,n ## s)
-#define B3(c,s,n) B2(c,s,n ## c), B2(c,s,n ## s)
-#define B4(c,s,n) B3(c,s,n ## c), B3(c,s,n ## s)
-#define B5(c,s,n) B4(c,s,n ## c), B4(c,s,n ## s)
-#define B6(c,s,n) B5(c,s,n ## c), B5(c,s,n ## s)
-#define B7(c,s,n) B6(c,s,n ## c), B6(c,s,n ## s)
-#define B8(c,s  ) B7(c,s,     c), B7(c,s,     s)
-
-// precomputed tables for expanding 8bits to 8 bytes:
-static const uint64_t table_b2b_0[1 << 8] = { B8(00, 10) }; // ( b) << 4
-static const uint64_t table_b2b_1[1 << 8] = { B8(10, 00) }; // (!b) << 4
-#endif
-
-#if defined(__loongarch_asx)
-
-#ifdef __clang__
-#define VREGS_PREFIX "$vr"
-#define XREGS_PREFIX "$xr"
-#else // GCC
-#define VREGS_PREFIX "$f"
-#define XREGS_PREFIX "$f"
-#endif
-#define __ALL_REGS "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31"
-// Convert __m128i to __m256i
-static inline __m256i ____m256i(__m128i in) {
-    __m256i out = __lasx_xvldi(0);
-    __asm__ volatile (
-        ".irp i," __ALL_REGS                "\n\t"
-        " .ifc %[out], " XREGS_PREFIX"\\i    \n\t"
-        "  .irp j," __ALL_REGS              "\n\t"
-        "   .ifc %[in], " VREGS_PREFIX "\\j  \n\t"
-        "    xvpermi.q $xr\\i, $xr\\j, 0x20  \n\t"
-        "   .endif                           \n\t"
-        "  .endr                             \n\t"
-        " .endif                             \n\t"
-        ".endr                               \n\t"
-        : [out] "+f" (out) : [in] "f" (in)
-    );
-    return out;
-}
-// Convert two __m128i to __m256i
-static inline __m256i lasx_set_q(__m128i inhi, __m128i inlo) {
-    __m256i out;
-    __asm__ volatile (
-        ".irp i," __ALL_REGS                "\n\t"
-        " .ifc %[hi], " VREGS_PREFIX "\\i    \n\t"
-        "  .irp j," __ALL_REGS              "\n\t"
-        "   .ifc %[lo], " VREGS_PREFIX "\\j  \n\t"
-        "    xvpermi.q $xr\\i, $xr\\j, 0x20  \n\t"
-        "   .endif                           \n\t"
-        "  .endr                             \n\t"
-        " .endif                             \n\t"
-        ".endr                               \n\t"
-        ".ifnc %[out], %[hi]                 \n\t"
-        ".irp i," __ALL_REGS                "\n\t"
-        " .ifc %[out], " XREGS_PREFIX "\\i   \n\t"
-        "  .irp j," __ALL_REGS              "\n\t"
-        "   .ifc %[hi], " VREGS_PREFIX "\\j  \n\t"
-        "    xvori.b $xr\\i, $xr\\j, 0       \n\t"
-        "   .endif                           \n\t"
-        "  .endr                             \n\t"
-        " .endif                             \n\t"
-        ".endr                               \n\t"
-        ".endif                              \n\t"
-        : [out] "=f" (out), [hi] "+f" (inhi)
-        : [lo] "f" (inlo)
-    );
-    return out;
-}
-// Convert __m256i low part to __m128i
-static inline __m128i lasx_extracti128_lo(__m256i in) {
-    __m128i out;
-    __asm__ volatile (
-        ".ifnc %[out], %[in]                 \n\t"
-        ".irp i," __ALL_REGS                "\n\t"
-        " .ifc %[out], " VREGS_PREFIX "\\i   \n\t"
-        "  .irp j," __ALL_REGS              "\n\t"
-        "   .ifc %[in], " XREGS_PREFIX "\\j  \n\t"
-        "    vori.b $vr\\i, $vr\\j, 0        \n\t"
-        "   .endif                           \n\t"
-        "  .endr                             \n\t"
-        " .endif                             \n\t"
-        ".endr                               \n\t"
-        ".endif                              \n\t"
-        : [out] "=f" (out) : [in] "f" (in)
-    );
-    return out;
-}
-// Convert __m256i high part to __m128i
-static inline __m128i lasx_extracti128_hi(__m256i in) {
-    __m128i out;
-    __asm__ volatile (
-        ".irp i," __ALL_REGS                "\n\t"
-        " .ifc %[out], " VREGS_PREFIX "\\i   \n\t"
-        "  .irp j," __ALL_REGS              "\n\t"
-        "   .ifc %[in], " XREGS_PREFIX "\\j  \n\t"
-        "    xvpermi.q $xr\\i, $xr\\j, 0x11  \n\t"
-        "   .endif                           \n\t"
-        "  .endr                             \n\t"
-        " .endif                             \n\t"
-        ".endr                               \n\t"
-        : [out] "=f" (out) : [in] "f" (in)
-    );
-    return out;
-}
-
-static __m256i lasx_set_w(int e7, int e6, int e5, int e4, int e3, int e2, int e1, int e0) {
-    v8i32 __ret = {e0, e1, e2, e3, e4, e5, e6, e7};
-    return (__m256i)__ret;
-}
-
-static __m128i lsx_set_w(int32_t a, int32_t b, int32_t c, int32_t d) {
-    v4i32 __ret = {d, c, b, a};
-    return (__m128i)__ret;
-}
-
-static __m256i lasx_set_d(int64_t a, int64_t b, int64_t c, int64_t d) {
-    v4i64 __ret = {d, c, b, a};
-    return (__m256i)__ret;
-}
-
-static __m256i lasx_insertf128( __m128i x, __m128i y) {
-    return lasx_set_q(x, y);
-}
-
-static __m128i lsx_shuffle_b(__m128i a, __m128i b) {
-    __m128i mask_f, zero, tmp0, tmp2, mask;
-    int f = 0x8f;
-    mask_f = __lsx_vreplgr2vr_b(f);
-    zero = __lsx_vldi(0);
-    tmp0 = __lsx_vand_v(b, mask_f); // get mask with low 4 bit and sign bits
-    tmp0 = __lsx_vori_b(tmp0, 0x10); // make each mask or  with 0x10 prepare for positive
-    mask = __lsx_vsle_b(zero, tmp0); // if mask >= 0, set mask
-    tmp2 = __lsx_vand_v(tmp0, mask); // maskout the in2 < ones
-    return __lsx_vshuf_b(a, zero, tmp2);
-}
-
-static __m256i lasx_shuffle_b(__m256i a, __m256i b) {
-    __m256i mask_f, zero, tmp0, tmp2, mask;
-    int f = 0x8f;
-    mask_f = __lasx_xvreplgr2vr_b(f);
-    zero = __lasx_xvldi(0);
-    tmp0 = __lasx_xvand_v(b, mask_f); // get mask with low 4 bit and sign bits
-    tmp0 = __lasx_xvori_b(tmp0, 0x10); // make each mask or  with 0x10 prepare for positive
-    mask = __lasx_xvsle_b(zero, tmp0); // if mask >= 0, set mask
-    tmp2 = __lasx_xvand_v(tmp0, mask); // maskout the in2 < ones
-    return __lasx_xvshuf_b(a, zero, tmp2);
-}
-
-static __m256i lasx_extu8_16(__m128i a) {
-    __m128i zero = __lsx_vldi(0);
-    __m128i vlo = __lsx_vilvl_b(zero, a);
-    __m128i vhi = __lsx_vilvh_b(zero, a);
-    return lasx_set_q(vhi, vlo);
-}
-
-static __m256i lasx_ext8_16(__m128i a) {
-     __m128i sign = __lsx_vslti_b(a, 0);
-     __m128i vlo = __lsx_vilvl_b(sign, a);
-     __m128i vhi = __lsx_vilvh_b(sign, a);
-     return lasx_set_q(vhi, vlo);
-}
-
-static __m256i lasx_ext16_32(__m128i a) {
-    __m256i tmp1;
-    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 0), 0);
-    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 1), 1);
-    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 2), 2);
-    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 3), 3);
-    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 4), 4);
-    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 5), 5);
-    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 6), 6);
-    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 7), 7);
-    return tmp1;
-}
-
-static __m128i lasx_extracti128( __m256i a, int pos) {
-    __m128i ret;
-    if( pos == 0)
-    {
-       ret = lasx_extracti128_lo(a);
-    } else {
-       ret = lasx_extracti128_hi(a);
-    }
-    return ret;
-}
-
-static __m128 lasx_extractf128( __m256 a, int pos) {
-    __m128 ret;
-    if( pos == 0)
-    {
-       ret = (__m128)lasx_extracti128_lo((__m256i)a);
-    } else {
-       ret = (__m128)lasx_extracti128_hi((__m256i)a);
-    }
-    return ret;
-}
-
-static __m128i lsx_hadd_h(__m128i a, __m128i b) {
-    __m128i tmp1 = __lsx_vpickev_h(b, a);
-    __m128i tmp2 = __lsx_vpickod_h(b, a);
-    return __lsx_vadd_h(tmp1, tmp2);
-}
-
-static __m128i lsx_hadd_w(__m128i a, __m128i b) {
-    __m128i tmp1 = __lsx_vpickev_w(b, a);
-    __m128i tmp2 = __lsx_vpickod_w(b, a);
-    return __lsx_vadd_w(tmp1, tmp2);
-}
-
-static __m128 lsx_hadd_s(__m128 a, __m128 b) {
-    __m128 tmp1 = (__m128)__lsx_vpickev_w((__m128i)b, (__m128i)a);
-    __m128 tmp2 = (__m128)__lsx_vpickod_w((__m128i)b, (__m128i)a);
-
-    return __lsx_vfadd_s(tmp1, tmp2);
-}
-
-static __m256i lasx_maddubs_h(__m256i a, __m256i b) {
-    __m256i tmp1, tmp2;
-    tmp1 = __lasx_xvmulwev_h_b(a, b);
-    tmp2 = __lasx_xvmulwod_h_b(a, b);
-    return __lasx_xvsadd_h(tmp1, tmp2);
-}
-
-static __m256i lasx_madd_h(__m256i a, __m256i b) {
-    __m256i tmp1, tmp2;
-    tmp1 = __lasx_xvmulwev_w_h(a, b);
-    tmp2 = __lasx_xvmulwod_w_h(a, b);
-    return __lasx_xvadd_w(tmp1, tmp2);
-}
-
-static __m256i lasx_packs_w(__m256i a, __m256i b) {
-    __m256i tmp, tmp1;
-    tmp = __lasx_xvsat_w(a, 15);
-    tmp1 = __lasx_xvsat_w(b, 15);
-    return __lasx_xvpickev_h(tmp1, tmp);
-}
-
-static __m256i lasx_packs_h(__m256i a, __m256i b) {
-    __m256i tmp, tmp1;
-    tmp = __lasx_xvsat_h(a, 7);
-    tmp1 = __lasx_xvsat_h(b, 7);
-    return __lasx_xvpickev_b(tmp1, tmp);
-}
-
-static __m128i lsx_packs_w(__m128i a, __m128i b) {
-    __m128i tmp, tmp1;
-    tmp = __lsx_vsat_w(a, 15);
-    tmp1 = __lsx_vsat_w(b, 15);
-    return __lsx_vpickev_h(tmp1, tmp);
-}
-
-static __m128i lsx_packs_h(__m128i a, __m128i b) {
-    __m128i tmp, tmp1;
-    tmp = __lsx_vsat_h(a, 7);
-    tmp1 = __lsx_vsat_h(b, 7);
-    return __lsx_vpickev_b(tmp1, tmp);
-}
-
-static __m128i lsx_packus_h(__m128i a, __m128i b) {
-    __m128i tmp, tmp1;
-    tmp = __lsx_vsat_hu(a, 7);
-    tmp1 = __lsx_vsat_hu(b, 7);
-    return __lsx_vpickev_b(tmp1, tmp);
-}
-
-
-static __m128i lsx_maddubs_h(__m128i a, __m128i b) {
-    __m128i tmp1, tmp2;
-    tmp1 = __lsx_vmulwev_h_b(a, b);
-    tmp2 = __lsx_vmulwod_h_b(a, b);
-    return __lsx_vsadd_h(tmp1, tmp2);
-}
-
-static __m128i lsx_madd_h(__m128i a, __m128i b) {
-    __m128i tmp1, tmp2;
-    tmp1 = __lsx_vmulwev_w_h(a, b);
-    tmp2 = __lsx_vmulwod_w_h(a, b);
-    return __lsx_vadd_w(tmp1, tmp2);
-}
-
-// multiply int8_t, add results pairwise twice
-static inline __m128i mul_sum_i8_pairs(const __m128i x, const __m128i y) {
-    // Get absolute values of x vectors
-    const __m128i ax = __lsx_vsigncov_b(x, x);
-    // Sign the values of the y vectors
-    const __m128i sy = __lsx_vsigncov_b(x, y);
-    // Perform multiplication and create 16-bit values
-    const __m128i dot = lsx_maddubs_h(ax, sy);
-    const __m128i ones = __lsx_vreplgr2vr_h(1);
-    return lsx_madd_h(ones, dot);
-}
-
-// horizontally add 8 floats
-static inline float hsum_float_8(const __m256 x) {
-    __m128 res = lasx_extractf128(x, 1);
-    ft_union tmp;
-    res = __lsx_vfadd_s(res, lasx_extractf128(x, 0));
-    res = __lsx_vfadd_s(res, (__m128)__lsx_vpickod_d((__m128i)res, (__m128i)res));
-    res = __lsx_vfadd_s(res, (__m128)__lsx_vinsgr2vr_w(__lsx_vldi(0), __lsx_vpickve2gr_w(res, 1), 0));
-    tmp.i = __lsx_vpickve2gr_w(res, 0);
-    return tmp.f;
-}
-
-// horizontally add 8 int32_t
-static inline int hsum_i32_8(const __m256i a) {
-
-    __m256i tmp1 = __lasx_xvpermi_q(a, a, 0x11);
-    __m256i tmp2 = __lasx_xvpermi_q(a, a, 0x00);
-
-    __m128i  tmp1_128 = lasx_extracti128_lo(tmp1);
-    __m128i  tmp2_128 = lasx_extracti128_lo(tmp2);
-
-    __m128i sum128 = __lsx_vadd_w(tmp1_128, tmp2_128);
-
-    __m128i ev = __lsx_vpickev_w(sum128, sum128);
-    __m128i od = __lsx_vpickod_w(sum128, sum128);
-    __m128i sum64 = __lsx_vadd_w(ev, od);
-
-    int sum64_1, sum64_2;
-    sum64_1 = __lsx_vpickve2gr_w(sum64, 0);
-    sum64_2 = __lsx_vpickve2gr_w(sum64, 1);
-
-    return  sum64_1 + sum64_2;
-}
-
-// horizontally add 4 int32_t
-static inline int hsum_i32_4(const __m128i a) {
-    __m128i ev = __lsx_vpickev_w(a, a);
-    __m128i od = __lsx_vpickod_w(a, a);
-    __m128i sum64 = __lsx_vadd_w(ev, od);
-
-    int sum64_1, sum64_2;
-    sum64_1 = __lsx_vpickve2gr_w(sum64, 0);
-    sum64_2 = __lsx_vpickve2gr_w(sum64, 1);
-
-    return  sum64_1 + sum64_2;
-}
-
-// spread 32 bits to 32 bytes { 0x00, 0xFF }
-static inline __m256i bytes_from_bits_32(const uint8_t * x) {
-
-    uint32_t x32;
-    memcpy(&x32, x, sizeof(uint32_t));
-    const __m256i shuf_mask = lasx_set_d(
-            0x0303030303030303, 0x0202020202020202,
-            0x0101010101010101, 0x0000000000000000);
-
-    __m256i bytes = lasx_shuffle_b(__lasx_xvreplgr2vr_w(x32), shuf_mask);
-    const __m256i bit_mask = __lasx_xvreplgr2vr_d(0x7fbfdfeff7fbfdfe);
-    bytes = __lasx_xvor_v(bytes, bit_mask);
-    return __lasx_xvseq_b(bytes, __lasx_xvreplgr2vr_d(-1));
-}
-
-// Unpack 32 4-bit fields into 32 bytes
-// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval
-static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) {
-    const __m128i lo = __lsx_vld((const __m128i *)rsi, 0);
-    __m128i hi = __lsx_vsrli_h(lo, 4);
-    return __lasx_xvandi_b(lasx_insertf128(hi, lo), 0xf);
-}
-
-// add int16_t pairwise and return as float vector
-static inline __m256 sum_i16_pairs_float(const __m256i x) {
-    __m256i v = __lasx_xvpackod_h(x, x);
-    __m256i summed_pairs = __lasx_xvaddwev_w_h(x, v);
-    return __lasx_xvffint_s_w(summed_pairs);
-}
-
-static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) {
-    // Perform multiplication and create 16-bit values
-    const __m256i dot = lasx_maddubs_h(ax, sy);
-    return sum_i16_pairs_float(dot);
-}
-
-// multiply int8_t, add results pairwise twice and return as float vector
-static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) {
-
-    // Get absolute values of x vectors
-    const __m256i ax = __lasx_xvsigncov_b(x, x);
-    // Sign the values of the y vectors
-    const __m256i sy = __lasx_xvsigncov_b(x, y);
-
-    return mul_sum_us8_pairs_float(ax, sy);
-}
-
-static inline __m128i packNibbles( __m256i bytes ) {
-    // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh
-    const __m256i lowByte = __lasx_xvreplgr2vr_h(0xFF);
-     __m256i high = __lasx_xvandn_v(lowByte, bytes);
-    __m256i low = __lasx_xvand_v(lowByte, bytes);
-    high = __lasx_xvsrli_h(high, 4);
-    bytes = __lasx_xvor_v(low, high);
-    // Compress uint16_t lanes into bytes
-    __m128i *r0 = (__m128i *)&bytes;
-    __m256i tmp_h128 = __lasx_xvpermi_q(bytes, bytes, 0x11);
-    __m128i *r1 = (__m128i *)&tmp_h128;
-
-    __m128i zero = __lsx_vldi(0);
-    __m128i tmp, tmp2, tmp3;
-
-    tmp = __lsx_vmax_h(zero, *r0);
-    tmp2 = __lsx_vsat_hu(tmp, 7);
-
-    tmp = __lsx_vmax_h(zero, *r1);
-    tmp3 = __lsx_vsat_hu(tmp, 7);
-    return  __lsx_vpickev_b(tmp3, tmp2);
-}
-#endif  //__loongarch_asx
-
-// reference implementation for deterministic creation of model files
-void quantize_row_q4_0_reference(const float * restrict x, block_q4_0 * restrict y, int64_t k) {
-    static const int qk = QK4_0;
-
-    assert(k % qk == 0);
-
-    const int nb = k / qk;
-
-    for (int i = 0; i < nb; i++) {
-        float amax = 0.0f; // absolute max
-        float max  = 0.0f;
-
-        for (int j = 0; j < qk; j++) {
-            const float v = x[i*qk + j];
-            if (amax < fabsf(v)) {
-                amax = fabsf(v);
-                max  = v;
-            }
-        }
-
-        const float d  = max / -8;
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        for (int j = 0; j < qk/2; ++j) {
-            const float x0 = x[i*qk + 0    + j]*id;
-            const float x1 = x[i*qk + qk/2 + j]*id;
-
-            const uint8_t xi0 = MIN(15, (int8_t)(x0 + 8.5f));
-            const uint8_t xi1 = MIN(15, (int8_t)(x1 + 8.5f));
-
-            y[i].qs[j]  = xi0;
-            y[i].qs[j] |= xi1 << 4;
-        }
-    }
-}
-
-void quantize_row_q4_0(const float * restrict x, void * restrict y, int64_t k) {
-    quantize_row_q4_0_reference(x, y, k);
-}
-
-
-void quantize_row_q4_1_reference(const float * restrict x, block_q4_1 * restrict y, int64_t k) {
-    const int qk = QK4_1;
-
-    assert(k % qk == 0);
-
-    const int nb = k / qk;
-
-    for (int i = 0; i < nb; i++) {
-        float min = FLT_MAX;
-        float max = -FLT_MAX;
-
-        for (int j = 0; j < qk; j++) {
-            const float v = x[i*qk + j];
-
-            if (v < min) min = v;
-            if (v > max) max = v;
-        }
-
-        const float d  = (max - min) / ((1 << 4) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-        y[i].m = GGML_FP32_TO_FP16(min);
-
-        for (int j = 0; j < qk/2; ++j) {
-            const float x0 = (x[i*qk + 0    + j] - min)*id;
-            const float x1 = (x[i*qk + qk/2 + j] - min)*id;
-
-            const uint8_t xi0 = MIN(15, (int8_t)(x0 + 0.5f));
-            const uint8_t xi1 = MIN(15, (int8_t)(x1 + 0.5f));
-
-            y[i].qs[j]  = xi0;
-            y[i].qs[j] |= xi1 << 4;
-        }
-    }
-}
-
-void quantize_row_q4_1(const float * restrict x, void * restrict y, int64_t k) {
-    quantize_row_q4_1_reference(x, y, k);
-}
-
-void quantize_row_q5_0_reference(const float * restrict x, block_q5_0 * restrict y, int64_t k) {
-    static const int qk = QK5_0;
-
-    assert(k % qk == 0);
-
-    const int nb = k / qk;
-
-    for (int i = 0; i < nb; i++) {
-        float amax = 0.0f; // absolute max
-        float max  = 0.0f;
-
-        for (int j = 0; j < qk; j++) {
-            const float v = x[i*qk + j];
-            if (amax < fabsf(v)) {
-                amax = fabsf(v);
-                max  = v;
-            }
-        }
-
-        const float d  = max / -16;
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        uint32_t qh = 0;
-
-        for (int j = 0; j < qk/2; ++j) {
-            const float x0 = x[i*qk + 0    + j]*id;
-            const float x1 = x[i*qk + qk/2 + j]*id;
-
-            const uint8_t xi0 = MIN(31, (int8_t)(x0 + 16.5f));
-            const uint8_t xi1 = MIN(31, (int8_t)(x1 + 16.5f));
-
-            y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4);
-
-            // get the 5-th bit and store it in qh at the right position
-            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
-            qh |= ((xi1 & 0x10u) >> 4) << (j + qk/2);
-        }
-
-        memcpy(&y[i].qh, &qh, sizeof(qh));
-    }
-}
-
-void quantize_row_q5_0(const float * restrict x, void * restrict y, int64_t k) {
-    quantize_row_q5_0_reference(x, y, k);
-}
-
-void quantize_row_q5_1_reference(const float * restrict x, block_q5_1 * restrict y, int64_t k) {
-    const int qk = QK5_1;
-
-    assert(k % qk == 0);
-
-    const int nb = k / qk;
-
-    for (int i = 0; i < nb; i++) {
-        float min = FLT_MAX;
-        float max = -FLT_MAX;
-
-        for (int j = 0; j < qk; j++) {
-            const float v = x[i*qk + j];
-
-            if (v < min) min = v;
-            if (v > max) max = v;
-        }
-
-        const float d  = (max - min) / ((1 << 5) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-        y[i].m = GGML_FP32_TO_FP16(min);
-
-        uint32_t qh = 0;
-
-        for (int j = 0; j < qk/2; ++j) {
-            const float x0 = (x[i*qk + 0    + j] - min)*id;
-            const float x1 = (x[i*qk + qk/2 + j] - min)*id;
-
-            const uint8_t xi0 = (uint8_t)(x0 + 0.5f);
-            const uint8_t xi1 = (uint8_t)(x1 + 0.5f);
-
-            y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4);
-
-            // get the 5-th bit and store it in qh at the right position
-            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
-            qh |= ((xi1 & 0x10u) >> 4) << (j + qk/2);
-        }
-
-        memcpy(&y[i].qh, &qh, sizeof(y[i].qh));
-    }
-}
-
-void quantize_row_q5_1(const float * restrict x, void * restrict y, int64_t k) {
-    quantize_row_q5_1_reference(x, y, k);
-}
-
-// reference implementation for deterministic creation of model files
-void quantize_row_q8_0_reference(const float * restrict x, block_q8_0 * restrict y, int64_t k) {
-    assert(k % QK8_0 == 0);
-    const int nb = k / QK8_0;
-
-    for (int i = 0; i < nb; i++) {
-        float amax = 0.0f; // absolute max
-
-        for (int j = 0; j < QK8_0; j++) {
-            const float v = x[i*QK8_0 + j];
-            amax = MAX(amax, fabsf(v));
-        }
-
-        const float d = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        for (int j = 0; j < QK8_0; ++j) {
-            const float x0 = x[i*QK8_0 + j]*id;
-
-            y[i].qs[j] = roundf(x0);
-        }
-    }
-}
-
-void quantize_row_q8_0(const float * restrict x, void * restrict vy, int64_t k) {
-    assert(QK8_0 == 32);
-    assert(k % QK8_0 == 0);
-    const int nb = k / QK8_0;
-
-    block_q8_0 * restrict y = vy;
-
-#if defined(__ARM_NEON)
-    for (int i = 0; i < nb; i++) {
-        float32x4_t srcv [8];
-        float32x4_t asrcv[8];
-        float32x4_t amaxv[8];
-
-        for (int j = 0; j < 8; j++) srcv[j]  = vld1q_f32(x + i*32 + 4*j);
-        for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]);
-
-        for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]);
-        for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]);
-        for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]);
-
-        const float amax = vmaxvq_f32(amaxv[0]);
-
-        const float d = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        for (int j = 0; j < 8; j++) {
-            const float32x4_t v  = vmulq_n_f32(srcv[j], id);
-            const int32x4_t   vi = vcvtnq_s32_f32(v);
-
-            y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0);
-            y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1);
-            y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2);
-            y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3);
-        }
-    }
-#elif defined(__wasm_simd128__)
-    for (int i = 0; i < nb; i++) {
-        v128_t srcv [8];
-        v128_t asrcv[8];
-        v128_t amaxv[8];
-
-        for (int j = 0; j < 8; j++) srcv[j]  = wasm_v128_load(x + i*32 + 4*j);
-        for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]);
-
-        for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]);
-        for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]);
-        for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]);
-
-        const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0),
-                                   wasm_f32x4_extract_lane(amaxv[0], 1)),
-                               MAX(wasm_f32x4_extract_lane(amaxv[0], 2),
-                                   wasm_f32x4_extract_lane(amaxv[0], 3)));
-
-        const float d = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        for (int j = 0; j < 8; j++) {
-            const v128_t v  = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id));
-            const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v);
-
-            y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0);
-            y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1);
-            y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2);
-            y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3);
-        }
-    }
-#elif defined(__AVX2__) || defined(__AVX__)
-    for (int i = 0; i < nb; i++) {
-        // Load elements into 4 AVX vectors
-        __m256 v0 = _mm256_loadu_ps( x );
-        __m256 v1 = _mm256_loadu_ps( x + 8 );
-        __m256 v2 = _mm256_loadu_ps( x + 16 );
-        __m256 v3 = _mm256_loadu_ps( x + 24 );
-        x += 32;
-
-        // Compute max(abs(e)) for the block
-        const __m256 signBit = _mm256_set1_ps( -0.0f );
-        __m256 maxAbs = _mm256_andnot_ps( signBit, v0 );
-        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) );
-        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) );
-        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) );
-
-        __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) );
-        max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) );
-        max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) );
-        const float maxScalar = _mm_cvtss_f32( max4 );
-
-        // Quantize these floats
-        const float d = maxScalar / 127.f;
-        y[i].d = GGML_FP32_TO_FP16(d);
-        const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f;
-        const __m256 mul = _mm256_set1_ps( id );
-
-        // Apply the multiplier
-        v0 = _mm256_mul_ps( v0, mul );
-        v1 = _mm256_mul_ps( v1, mul );
-        v2 = _mm256_mul_ps( v2, mul );
-        v3 = _mm256_mul_ps( v3, mul );
-
-        // Round to nearest integer
-        v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST );
-        v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST );
-        v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST );
-        v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST );
-
-        // Convert floats to integers
-        __m256i i0 = _mm256_cvtps_epi32( v0 );
-        __m256i i1 = _mm256_cvtps_epi32( v1 );
-        __m256i i2 = _mm256_cvtps_epi32( v2 );
-        __m256i i3 = _mm256_cvtps_epi32( v3 );
-
-#if defined(__AVX2__)
-        // Convert int32 to int16
-        i0 = _mm256_packs_epi32( i0, i1 );     // 0, 1, 2, 3,  8, 9, 10, 11,  4, 5, 6, 7, 12, 13, 14, 15
-        i2 = _mm256_packs_epi32( i2, i3 );     // 16, 17, 18, 19,  24, 25, 26, 27,  20, 21, 22, 23, 28, 29, 30, 31
-                                            // Convert int16 to int8
-        i0 = _mm256_packs_epi16( i0, i2 );     // 0, 1, 2, 3,  8, 9, 10, 11,  16, 17, 18, 19,  24, 25, 26, 27,  4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31
-
-        // We got our precious signed bytes, but the order is now wrong
-        // These AVX2 pack instructions process 16-byte pieces independently
-        // The following instruction is fixing the order
-        const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 );
-        i0 = _mm256_permutevar8x32_epi32( i0, perm );
-
-        _mm256_storeu_si256((__m256i *)y[i].qs, i0);
-#else
-        // Since we don't have in AVX some necessary functions,
-        // we split the registers in half and call AVX2 analogs from SSE
-        __m128i ni0 = _mm256_castsi256_si128( i0 );
-        __m128i ni1 = _mm256_extractf128_si256( i0, 1);
-        __m128i ni2 = _mm256_castsi256_si128( i1 );
-        __m128i ni3 = _mm256_extractf128_si256( i1, 1);
-        __m128i ni4 = _mm256_castsi256_si128( i2 );
-        __m128i ni5 = _mm256_extractf128_si256( i2, 1);
-        __m128i ni6 = _mm256_castsi256_si128( i3 );
-        __m128i ni7 = _mm256_extractf128_si256( i3, 1);
-
-        // Convert int32 to int16
-        ni0 = _mm_packs_epi32( ni0, ni1 );
-        ni2 = _mm_packs_epi32( ni2, ni3 );
-        ni4 = _mm_packs_epi32( ni4, ni5 );
-        ni6 = _mm_packs_epi32( ni6, ni7 );
-        // Convert int16 to int8
-        ni0 = _mm_packs_epi16( ni0, ni2 );
-        ni4 = _mm_packs_epi16( ni4, ni6 );
-
-        _mm_storeu_si128((__m128i *)(y[i].qs +  0), ni0);
-        _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4);
-#endif
-    }
-#elif defined(__riscv_v_intrinsic)
-
-    size_t vl = __riscv_vsetvl_e32m4(QK8_0);
-
-    for (int i = 0; i < nb; i++) {
-        // load elements
-        vfloat32m4_t v_x   = __riscv_vle32_v_f32m4(x+i*QK8_0, vl);
-
-        vfloat32m4_t vfabs = __riscv_vfabs_v_f32m4(v_x, vl);
-        vfloat32m1_t tmp   = __riscv_vfmv_v_f_f32m1(0.0f, vl);
-        vfloat32m1_t vmax  = __riscv_vfredmax_vs_f32m4_f32m1(vfabs, tmp, vl);
-        float amax = __riscv_vfmv_f_s_f32m1_f32(vmax);
-
-        const float d = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl);
-
-        // convert to integer
-        vint16m2_t   vi = __riscv_vfncvt_x_f_w_i16m2(x0, vl);
-        vint8m1_t    vs = __riscv_vncvt_x_x_w_i8m1(vi, vl);
-
-        // store result
-        __riscv_vse8_v_i8m1(y[i].qs , vs, vl);
-    }
-
-#elif defined(__POWER9_VECTOR__)
-    for (int i = 0; i < nb; i++) {
-        vector float srcv [8];
-        vector float asrcv[8];
-        vector float amaxv[8];
-        vector signed int vi[8];
-
-        for (int j = 0; j < 8; j++) srcv[j]  = vec_xl(0, x + i*32 + 4*j);
-        for (int j = 0; j < 8; j++) asrcv[j] = vec_abs(srcv[j]);
-
-        for (int j = 0; j < 4; j++) amaxv[2*j] = vec_max(asrcv[2*j], asrcv[2*j+1]);
-        for (int j = 0; j < 2; j++) amaxv[4*j] = vec_max(amaxv[4*j], amaxv[4*j+2]);
-        for (int j = 0; j < 1; j++) amaxv[8*j] = vec_max(amaxv[8*j], amaxv[8*j+4]);
-
-        const float amax = MAX(MAX(vec_extract(amaxv[0], 0),
-                                   vec_extract(amaxv[0], 1)),
-                               MAX(vec_extract(amaxv[0], 2),
-                                   vec_extract(amaxv[0], 3)));
-
-        const float d = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-        const vector float vid = vec_splats(id);
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        for (int j = 0; j < 8; j++) {
-            const vector float v  = vec_round(vec_mul(srcv[j], vid));
-            vi[j] = vec_cts(v, 0);
-        }
-        vec_xst(vec_pack(vec_pack(vi[0], vi[1]), vec_pack(vi[2], vi[3])),  0, &y[i].qs[0]);
-        vec_xst(vec_pack(vec_pack(vi[4], vi[5]), vec_pack(vi[6], vi[7])), 16, &y[i].qs[0]);
-    }
-
-#elif defined(__loongarch_asx)
-    for (int i = 0; i < nb; i++) {
-        ft_union fi;
-        __m256 v0 = (__m256)__lasx_xvld( x , 0);
-        __m256 v1 = (__m256)__lasx_xvld( x , 32);
-        __m256 v2 = (__m256)__lasx_xvld( x , 64);
-        __m256 v3 = (__m256)__lasx_xvld( x , 96);
-        x += 32;
-
-        // Compute max(abs(e)) for the block
-        const __m256 sign_bit = __lasx_xvreplfr2vr_s( -0.0f );
-        __m256 max_abs = (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v0 );
-        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v1 ) );
-        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v2 ) );
-        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v3 ) );
-
-        __m128 max4 = __lsx_vfmax_s( lasx_extractf128( max_abs, 1 ), lasx_extractf128( max_abs , 0) );
-        max4 = __lsx_vfmax_s( max4, (__m128)__lsx_vpickod_d((__m128i) max4, (__m128i)max4 ) );
-        __m128 tmp = max4;
-        max4 = __lsx_vfmax_s( max4, (__m128)__lsx_vinsgr2vr_w(tmp, __lsx_vpickve2gr_w( max4, 1 ), 0 ));
-        fi.i = __lsx_vpickve2gr_w( (__m128i)max4, 0 );
-        const float max_scalar = fi.f;
-
-        // Quantize these floats
-        const float d = max_scalar / 127.f;
-        y[i].d = GGML_FP32_TO_FP16(d);
-        const float id = ( max_scalar != 0.0f ) ? 127.f / max_scalar : 0.0f;
-        const __m256 mul = (__m256)__lasx_xvreplfr2vr_s( id );
-
-        // Apply the multiplier
-        v0 = __lasx_xvfmul_s( v0, mul );
-        v1 = __lasx_xvfmul_s( v1, mul );
-        v2 = __lasx_xvfmul_s( v2, mul );
-        v3 = __lasx_xvfmul_s( v3, mul );
-
-        // Round to nearest integer
-        __m256i i0 = __lasx_xvftintrne_w_s( v0 );
-        __m256i i1 = __lasx_xvftintrne_w_s( v1 );
-        __m256i i2 = __lasx_xvftintrne_w_s( v2 );
-        __m256i i3 = __lasx_xvftintrne_w_s( v3 );
-
-        __m128i ni0 = lasx_extracti128( i0, 0 );
-        __m128i ni1 = lasx_extracti128( i0, 1);
-        __m128i ni2 = lasx_extracti128( i1, 0);
-        __m128i ni3 = lasx_extracti128( i1, 1);
-        __m128i ni4 = lasx_extracti128( i2, 0);
-        __m128i ni5 = lasx_extracti128( i2, 1);
-        __m128i ni6 = lasx_extracti128( i3, 0);
-        __m128i ni7 = lasx_extracti128( i3, 1);
-
-        // Convert int32 to int16
-        ni0 = lsx_packs_w( ni0, ni1 );
-        ni2 = lsx_packs_w( ni2, ni3 );
-        ni4 = lsx_packs_w( ni4, ni5 );
-        ni6 = lsx_packs_w( ni6, ni7 );
-        // Convert int16 to int8
-        ni0 = lsx_packs_h( ni0, ni2 );
-        ni4 = lsx_packs_h( ni4, ni6 );
-
-        __lsx_vst(ni0, (__m128i *)(y[i].qs +  0), 0);
-        __lsx_vst(ni4, (__m128i *)(y[i].qs + 16), 0);
-
-    }
-#else
-    GGML_UNUSED(nb);
-    // scalar
-    quantize_row_q8_0_reference(x, y, k);
-#endif
-}
-
-// reference implementation for deterministic creation of model files
-void quantize_row_q8_1_reference(const float * restrict x, block_q8_1 * restrict y, int64_t k) {
-    assert(QK8_1 == 32);
-    assert(k % QK8_1 == 0);
-    const int nb = k / QK8_1;
-
-    for (int i = 0; i < nb; i++) {
-        float amax = 0.0f; // absolute max
-
-        for (int j = 0; j < QK8_1; j++) {
-            const float v = x[i*QK8_1 + j];
-            amax = MAX(amax, fabsf(v));
-        }
-
-        const float d = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        int sum = 0;
-
-        for (int j = 0; j < QK8_1/2; ++j) {
-            const float v0 = x[i*QK8_1           + j]*id;
-            const float v1 = x[i*QK8_1 + QK8_1/2 + j]*id;
-
-            y[i].qs[          j] = roundf(v0);
-            y[i].qs[QK8_1/2 + j] = roundf(v1);
-
-            sum += y[i].qs[          j];
-            sum += y[i].qs[QK8_1/2 + j];
-        }
-
-        y[i].s = GGML_FP32_TO_FP16(sum*d);
-    }
-}
-
-void quantize_row_q8_1(const float * restrict x, void * restrict vy, int64_t k) {
-    assert(k % QK8_1 == 0);
-    const int nb = k / QK8_1;
-
-    block_q8_1 * restrict y = vy;
-
-#if defined(__ARM_NEON)
-    for (int i = 0; i < nb; i++) {
-        float32x4_t srcv [8];
-        float32x4_t asrcv[8];
-        float32x4_t amaxv[8];
-
-        for (int j = 0; j < 8; j++) srcv[j]  = vld1q_f32(x + i*32 + 4*j);
-        for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]);
-
-        for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]);
-        for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]);
-        for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]);
-
-        const float amax = vmaxvq_f32(amaxv[0]);
-
-        const float d = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        int32x4_t accv = vdupq_n_s32(0);
-
-        for (int j = 0; j < 8; j++) {
-            const float32x4_t v  = vmulq_n_f32(srcv[j], id);
-            const int32x4_t   vi = vcvtnq_s32_f32(v);
-
-            y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0);
-            y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1);
-            y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2);
-            y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3);
-
-            accv = vaddq_s32(accv, vi);
-        }
-
-        y[i].s = GGML_FP32_TO_FP16(d * vaddvq_s32(accv));
-    }
-#elif defined(__wasm_simd128__)
-    for (int i = 0; i < nb; i++) {
-        v128_t srcv [8];
-        v128_t asrcv[8];
-        v128_t amaxv[8];
-
-        for (int j = 0; j < 8; j++) srcv[j]  = wasm_v128_load(x + i*32 + 4*j);
-        for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]);
-
-        for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]);
-        for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]);
-        for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]);
-
-        const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0),
-                                   wasm_f32x4_extract_lane(amaxv[0], 1)),
-                               MAX(wasm_f32x4_extract_lane(amaxv[0], 2),
-                                   wasm_f32x4_extract_lane(amaxv[0], 3)));
-
-        const float d = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        v128_t accv = wasm_i32x4_splat(0);
-
-        for (int j = 0; j < 8; j++) {
-            const v128_t v  = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id));
-            const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v);
-
-            y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0);
-            y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1);
-            y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2);
-            y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3);
-
-            accv = wasm_i32x4_add(accv, vi);
-        }
-
-        y[i].s = GGML_FP32_TO_FP16(
-                d * (wasm_i32x4_extract_lane(accv, 0) +
-                     wasm_i32x4_extract_lane(accv, 1) +
-                     wasm_i32x4_extract_lane(accv, 2) +
-                     wasm_i32x4_extract_lane(accv, 3)));
-    }
-#elif defined(__AVX2__) || defined(__AVX__)
-    for (int i = 0; i < nb; i++) {
-        // Load elements into 4 AVX vectors
-        __m256 v0 = _mm256_loadu_ps( x );
-        __m256 v1 = _mm256_loadu_ps( x + 8 );
-        __m256 v2 = _mm256_loadu_ps( x + 16 );
-        __m256 v3 = _mm256_loadu_ps( x + 24 );
-        x += 32;
-
-        // Compute max(abs(e)) for the block
-        const __m256 signBit = _mm256_set1_ps( -0.0f );
-        __m256 maxAbs = _mm256_andnot_ps( signBit, v0 );
-        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) );
-        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) );
-        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) );
-
-        __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) );
-        max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) );
-        max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) );
-        const float max_scalar = _mm_cvtss_f32( max4 );
-
-        // Quantize these floats
-        const float d = max_scalar / 127.f;
-        y[i].d = GGML_FP32_TO_FP16(d);
-        const float id = ( max_scalar != 0.0f ) ? 127.f / max_scalar : 0.0f;
-        const __m256 mul = _mm256_set1_ps( id );
-
-        // Apply the multiplier
-        v0 = _mm256_mul_ps( v0, mul );
-        v1 = _mm256_mul_ps( v1, mul );
-        v2 = _mm256_mul_ps( v2, mul );
-        v3 = _mm256_mul_ps( v3, mul );
-
-        // Round to nearest integer
-        v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST );
-        v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST );
-        v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST );
-        v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST );
-
-        // Convert floats to integers
-        __m256i i0 = _mm256_cvtps_epi32( v0 );
-        __m256i i1 = _mm256_cvtps_epi32( v1 );
-        __m256i i2 = _mm256_cvtps_epi32( v2 );
-        __m256i i3 = _mm256_cvtps_epi32( v3 );
-
-#if defined(__AVX2__)
-        // Compute the sum of the quants and set y[i].s
-        y[i].s = GGML_FP32_TO_FP16(d * hsum_i32_8(_mm256_add_epi32(_mm256_add_epi32(i0, i1), _mm256_add_epi32(i2, i3))));
-
-        // Convert int32 to int16
-        i0 = _mm256_packs_epi32( i0, i1 );     // 0, 1, 2, 3,  8, 9, 10, 11,  4, 5, 6, 7, 12, 13, 14, 15
-        i2 = _mm256_packs_epi32( i2, i3 );     // 16, 17, 18, 19,  24, 25, 26, 27,  20, 21, 22, 23, 28, 29, 30, 31
-                                            // Convert int16 to int8
-        i0 = _mm256_packs_epi16( i0, i2 );     // 0, 1, 2, 3,  8, 9, 10, 11,  16, 17, 18, 19,  24, 25, 26, 27,  4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31
-
-        // We got our precious signed bytes, but the order is now wrong
-        // These AVX2 pack instructions process 16-byte pieces independently
-        // The following instruction is fixing the order
-        const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 );
-        i0 = _mm256_permutevar8x32_epi32( i0, perm );
-
-        _mm256_storeu_si256((__m256i *)y[i].qs, i0);
-#else
-        // Since we don't have in AVX some necessary functions,
-        // we split the registers in half and call AVX2 analogs from SSE
-        __m128i ni0 = _mm256_castsi256_si128( i0 );
-        __m128i ni1 = _mm256_extractf128_si256( i0, 1);
-        __m128i ni2 = _mm256_castsi256_si128( i1 );
-        __m128i ni3 = _mm256_extractf128_si256( i1, 1);
-        __m128i ni4 = _mm256_castsi256_si128( i2 );
-        __m128i ni5 = _mm256_extractf128_si256( i2, 1);
-        __m128i ni6 = _mm256_castsi256_si128( i3 );
-        __m128i ni7 = _mm256_extractf128_si256( i3, 1);
-
-        // Compute the sum of the quants and set y[i].s
-        const __m128i s0 = _mm_add_epi32(_mm_add_epi32(ni0, ni1), _mm_add_epi32(ni2, ni3));
-        const __m128i s1 = _mm_add_epi32(_mm_add_epi32(ni4, ni5), _mm_add_epi32(ni6, ni7));
-        y[i].s = GGML_FP32_TO_FP16(d * hsum_i32_4(_mm_add_epi32(s0, s1)));
-
-        // Convert int32 to int16
-        ni0 = _mm_packs_epi32( ni0, ni1 );
-        ni2 = _mm_packs_epi32( ni2, ni3 );
-        ni4 = _mm_packs_epi32( ni4, ni5 );
-        ni6 = _mm_packs_epi32( ni6, ni7 );
-        // Convert int16 to int8
-        ni0 = _mm_packs_epi16( ni0, ni2 );
-        ni4 = _mm_packs_epi16( ni4, ni6 );
-
-        _mm_storeu_si128((__m128i *)(y[i].qs +  0), ni0);
-        _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4);
-#endif
-    }
-#elif defined(__riscv_v_intrinsic)
-
-    size_t vl = __riscv_vsetvl_e32m4(QK8_1);
-
-    for (int i = 0; i < nb; i++) {
-        // load elements
-        vfloat32m4_t v_x   = __riscv_vle32_v_f32m4(x+i*QK8_1, vl);
-
-        vfloat32m4_t vfabs = __riscv_vfabs_v_f32m4(v_x, vl);
-        vfloat32m1_t tmp   = __riscv_vfmv_v_f_f32m1(0.0, vl);
-        vfloat32m1_t vmax  = __riscv_vfredmax_vs_f32m4_f32m1(vfabs, tmp, vl);
-        float amax = __riscv_vfmv_f_s_f32m1_f32(vmax);
-
-        const float d  = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl);
-
-        // convert to integer
-        vint16m2_t   vi = __riscv_vfncvt_x_f_w_i16m2(x0, vl);
-        vint8m1_t    vs = __riscv_vncvt_x_x_w_i8m1(vi, vl);
-
-        // store result
-        __riscv_vse8_v_i8m1(y[i].qs , vs, vl);
-
-        // compute sum for y[i].s
-        vint16m1_t tmp2 = __riscv_vmv_v_x_i16m1(0, vl);
-        vint16m1_t vwrs = __riscv_vwredsum_vs_i8m1_i16m1(vs, tmp2, vl);
-
-        // set y[i].s
-        int sum = __riscv_vmv_x_s_i16m1_i16(vwrs);
-        y[i].s = GGML_FP32_TO_FP16(sum*d);
-    }
-
-#elif defined(__POWER9_VECTOR__)
-    for (int i = 0; i < nb; i++) {
-        vector float srcv [8];
-        vector float asrcv[8];
-        vector float amaxv[8];
-        vector signed int vi[8];
-
-        for (int j = 0; j < 8; j++) srcv[j]  = vec_xl(0, x + i*32 + 4*j);
-        for (int j = 0; j < 8; j++) asrcv[j] = vec_abs(srcv[j]);
-
-        for (int j = 0; j < 4; j++) amaxv[2*j] = vec_max(asrcv[2*j], asrcv[2*j+1]);
-        for (int j = 0; j < 2; j++) amaxv[4*j] = vec_max(amaxv[4*j], amaxv[4*j+2]);
-        for (int j = 0; j < 1; j++) amaxv[8*j] = vec_max(amaxv[8*j], amaxv[8*j+4]);
-
-        const float amax = MAX(MAX(vec_extract(amaxv[0], 0),
-                                   vec_extract(amaxv[0], 1)),
-                               MAX(vec_extract(amaxv[0], 2),
-                                   vec_extract(amaxv[0], 3)));
-
-        const float d = amax / ((1 << 7) - 1);
-        const float id = d ? 1.0f/d : 0.0f;
-        const vector float vid = vec_splats(id);
-
-        y[i].d = GGML_FP32_TO_FP16(d);
-
-        vector int accv = vec_splats(0);
-
-        for (int j = 0; j < 8; j++) {
-            const vector float v  = vec_round(vec_mul(srcv[j], vid));
-            vi[j] = vec_cts(v, 0);
-
-            accv = vec_add(accv, vi[j]);
-        }
-        vec_xst(vec_pack(vec_pack(vi[0], vi[1]), vec_pack(vi[2], vi[3])),  0, &y[i].qs[0]);
-        vec_xst(vec_pack(vec_pack(vi[4], vi[5]), vec_pack(vi[6], vi[7])), 16, &y[i].qs[0]);
-
-        accv = vec_add(accv, vec_sld(accv, accv, 4));
-        accv = vec_add(accv, vec_sld(accv, accv, 8));
-        y[i].s = GGML_FP32_TO_FP16(d * vec_extract(accv, 0));
-    }
-
-#elif defined(__loongarch_asx)
-    for (int i = 0; i < nb; i++) {
-        ft_union ft;
-        __m256 v0 = (__m256)__lasx_xvld( x , 0 );
-        __m256 v1 = (__m256)__lasx_xvld( x , 32 );
-        __m256 v2 = (__m256)__lasx_xvld( x , 64 );
-        __m256 v3 = (__m256)__lasx_xvld( x , 96 );
-        x += 32;
-
-        // Compute max(abs(e)) for the block
-        const __m256 sign_bit = __lasx_xvreplfr2vr_s( -0.0f );
-        __m256 max_abs = (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v0 );
-        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v1 ) );
-        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v2 ) );
-        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v3 ) );
-
-        __m128 max4 = __lsx_vfmax_s( lasx_extractf128( max_abs, 1 ), lasx_extractf128( max_abs, 0) );
-        max4 = __lsx_vfmax_s( max4, (__m128)__lsx_vpickod_d((__m128i) max4, (__m128i)max4 ) );
-        __m128 tmp = max4;
-        max4 = __lsx_vfmax_s( max4, (__m128)__lsx_vextrins_w((__m128i)tmp, (__m128i)max4, 0x10 ));
-        ft.i = __lsx_vpickve2gr_w( (__m128i)max4, 0 );
-        const float max_scalar = ft.f;
-
-        // Quantize these floats
-        const float d = max_scalar / 127.f;
-        y[i].d = GGML_FP32_TO_FP16(d);
-        const float id = ( max_scalar != 0.0f ) ? 127.f / max_scalar : 0.0f;
-        const __m256 mul = __lasx_xvreplfr2vr_s( id );
-
-        // Apply the multiplier
-        v0 = __lasx_xvfmul_s( v0, mul );
-        v1 = __lasx_xvfmul_s( v1, mul );
-        v2 = __lasx_xvfmul_s( v2, mul );
-        v3 = __lasx_xvfmul_s( v3, mul );
-
-        // Round to nearest integer
-        __m256i i0 = __lasx_xvftintrne_w_s( v0 );
-        __m256i i1 = __lasx_xvftintrne_w_s( v1 );
-        __m256i i2 = __lasx_xvftintrne_w_s( v2 );
-        __m256i i3 = __lasx_xvftintrne_w_s( v3 );
-
-        __m128i ni0 = lasx_extracti128(i0, 0);
-        __m128i ni1 = lasx_extracti128( i0, 1);
-        __m128i ni2 = lasx_extracti128( i1, 0);
-        __m128i ni3 = lasx_extracti128( i1, 1);
-        __m128i ni4 = lasx_extracti128( i2, 0 );
-        __m128i ni5 = lasx_extracti128( i2, 1);
-        __m128i ni6 = lasx_extracti128( i3, 0);
-        __m128i ni7 = lasx_extracti128( i3, 1);
-
-        // Compute the sum of the quants and set y[i].s
-        const __m128i s0 = __lsx_vadd_w(__lsx_vadd_w(ni0, ni1), __lsx_vadd_w(ni2, ni3));
-        const __m128i s1 = __lsx_vadd_w(__lsx_vadd_w(ni4, ni5), __lsx_vadd_w(ni6, ni7));
-        y[i].s = GGML_FP32_TO_FP16(d * hsum_i32_4(__lsx_vadd_w(s0, s1)));
-
-        // Convert int32 to int16
-        ni0 = lsx_packs_w( ni0, ni1 );
-        ni2 = lsx_packs_w( ni2, ni3 );
-        ni4 = lsx_packs_w( ni4, ni5 );
-        ni6 = lsx_packs_w( ni6, ni7 );
-        // Convert int16 to int8
-        ni0 = lsx_packs_h( ni0, ni2 );
-        ni4 = lsx_packs_h( ni4, ni6 );
-
-        __lsx_vst(ni0, (__m128i *)(y[i].qs +  0), 0);
-        __lsx_vst(ni4, (__m128i *)(y[i].qs + 16), 0);
-    }
-#else
-    GGML_UNUSED(nb);
-    // scalar
-    quantize_row_q8_1_reference(x, y, k);
-#endif
-}
-
-void dequantize_row_q4_0(const block_q4_0 * restrict x, float * restrict y, int64_t k) {
-    static const int qk = QK4_0;
-
-    assert(k % qk == 0);
-
-    const int nb = k / qk;
-
-    for (int i = 0; i < nb; i++) {
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-
-        for (int j = 0; j < qk/2; ++j) {
-            const int x0 = (x[i].qs[j] & 0x0F) - 8;
-            const int x1 = (x[i].qs[j] >>   4) - 8;
-
-            y[i*qk + j + 0   ] = x0*d;
-            y[i*qk + j + qk/2] = x1*d;
-        }
-    }
-}
-
-void dequantize_row_q4_1(const block_q4_1 * restrict x, float * restrict y, int64_t k) {
-    static const int qk = QK4_1;
-
-    assert(k % qk == 0);
-
-    const int nb = k / qk;
-
-    for (int i = 0; i < nb; i++) {
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-        const float m = GGML_FP16_TO_FP32(x[i].m);
-
-        for (int j = 0; j < qk/2; ++j) {
-            const int x0 = (x[i].qs[j] & 0x0F);
-            const int x1 = (x[i].qs[j] >>   4);
-
-            y[i*qk + j + 0   ] = x0*d + m;
-            y[i*qk + j + qk/2] = x1*d + m;
-        }
-    }
-}
-
-void dequantize_row_q5_0(const block_q5_0 * restrict x, float * restrict y, int64_t k) {
-    static const int qk = QK5_0;
-
-    assert(k % qk == 0);
-
-    const int nb = k / qk;
-
-    for (int i = 0; i < nb; i++) {
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-
-        uint32_t qh;
-        memcpy(&qh, x[i].qh, sizeof(qh));
-
-        for (int j = 0; j < qk/2; ++j) {
-            const uint8_t xh_0 = ((qh >> (j +  0)) << 4) & 0x10;
-            const uint8_t xh_1 = ((qh >> (j + 12))     ) & 0x10;
-
-            const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16;
-            const int32_t x1 = ((x[i].qs[j] >>   4) | xh_1) - 16;
-
-            y[i*qk + j + 0   ] = x0*d;
-            y[i*qk + j + qk/2] = x1*d;
-        }
-    }
-}
-
-void dequantize_row_q5_1(const block_q5_1 * restrict x, float * restrict y, int64_t k) {
-    static const int qk = QK5_1;
-
-    assert(k % qk == 0);
-
-    const int nb = k / qk;
-
-    for (int i = 0; i < nb; i++) {
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-        const float m = GGML_FP16_TO_FP32(x[i].m);
-
-        uint32_t qh;
-        memcpy(&qh, x[i].qh, sizeof(qh));
-
-        for (int j = 0; j < qk/2; ++j) {
-            const uint8_t xh_0 = ((qh >> (j +  0)) << 4) & 0x10;
-            const uint8_t xh_1 = ((qh >> (j + 12))     ) & 0x10;
-
-            const int x0 = (x[i].qs[j] & 0x0F) | xh_0;
-            const int x1 = (x[i].qs[j] >>   4) | xh_1;
-
-            y[i*qk + j + 0   ] = x0*d + m;
-            y[i*qk + j + qk/2] = x1*d + m;
-        }
-    }
-}
-
-void dequantize_row_q8_0(const block_q8_0 * restrict x, float * restrict y, int64_t k) {
-    static const int qk = QK8_0;
-
-    assert(k % qk == 0);
-
-    const int nb = k / qk;
-
-    for (int i = 0; i < nb; i++) {
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-
-        for (int j = 0; j < qk; ++j) {
-            y[i*qk + j] = x[i].qs[j]*d;
-        }
-    }
-}
-
-//
-// 2-6 bit quantization in super-blocks
-//
-
-//
-// ===================== Helper functions
-//
-static inline int nearest_int(float fval) {
-    assert(fval <= 4194303.f);
-    float val = fval + 12582912.f;
-    int i; memcpy(&i, &val, sizeof(int));
-    return (i & 0x007fffff) - 0x00400000;
-}
-
-static float make_qx_quants(int n, int nmax, const float * restrict x, int8_t * restrict L, int rmse_type,
-        const float * restrict qw) {
-    float max = 0;
-    float amax = 0;
-    for (int i = 0; i < n; ++i) {
-        float ax = fabsf(x[i]);
-        if (ax > amax) { amax = ax; max = x[i]; }
-    }
-    if (amax < GROUP_MAX_EPS) { // all zero
-        for (int i = 0; i < n; ++i) {
-            L[i] = 0;
-        }
-        return 0.f;
-    }
-    float iscale = -nmax / max;
-    if (rmse_type == 0) {
-        for (int i = 0; i < n; ++i) {
-            int l = nearest_int(iscale * x[i]);
-            L[i] = nmax + MAX(-nmax, MIN(nmax-1, l));
-        }
-        return 1/iscale;
-    }
-    bool return_early = false;
-    if (rmse_type < 0) {
-        rmse_type = -rmse_type;
-        return_early = true;
-    }
-    float sumlx = 0;
-    float suml2 = 0;
-#ifdef HAVE_BUGGY_APPLE_LINKER
-    // use 'volatile' to prevent unroll and work around a bug in Apple ld64 1015.7
-    for (volatile int i = 0; i < n; ++i) {
-#else
-    for (int i = 0; i < n; ++i) {
-#endif
-        int l = nearest_int(iscale * x[i]);
-        l = MAX(-nmax, MIN(nmax-1, l));
-        L[i] = l + nmax;
-        float w = qw ? qw[i] : rmse_type == 1 ? x[i] * x[i] : rmse_type == 2 ? 1 : rmse_type == 3 ? fabsf(x[i]) : sqrtf(fabsf(x[i]));
-        sumlx += w*x[i]*l;
-        suml2 += w*l*l;
-    }
-    float scale = suml2 ? sumlx/suml2 : 0.0f;
-    if (return_early) return suml2 > 0 ? 0.5f*(scale + 1/iscale) : 1/iscale;
-    float best = scale * sumlx;
-    for (int is = -9; is <= 9; ++is) {
-        if (is == 0) {
-            continue;
-        }
-        iscale = -(nmax + 0.1f*is) / max;
-        sumlx = suml2 = 0;
-        for (int i = 0; i < n; ++i) {
-            int l = nearest_int(iscale * x[i]);
-            l = MAX(-nmax, MIN(nmax-1, l));
-            float w = qw ? qw[i] : rmse_type == 1 ? x[i] * x[i] : rmse_type == 2 ? 1 : rmse_type == 3 ? fabsf(x[i]) : sqrtf(fabsf(x[i]));
-            sumlx += w*x[i]*l;
-            suml2 += w*l*l;
-        }
-        if (suml2 > 0 && sumlx*sumlx > best*suml2) {
-            for (int i = 0; i < n; ++i) {
-                int l = nearest_int(iscale * x[i]);
-                L[i] = nmax + MAX(-nmax, MIN(nmax-1, l));
-            }
-            scale = sumlx/suml2; best = scale*sumlx;
-        }
-    }
-    return scale;
-}
-
-static float make_q3_quants(int n, int nmax, const float * restrict x, int8_t * restrict L, bool do_rmse) {
-    float max = 0;
-    float amax = 0;
-    for (int i = 0; i < n; ++i) {
-        float ax = fabsf(x[i]);
-        if (ax > amax) { amax = ax; max = x[i]; }
-    }
-    if (amax < GROUP_MAX_EPS) { // all zero
-        for (int i = 0; i < n; ++i) { L[i] = 0; }
-        return 0.f;
-    }
-    float iscale = -nmax / max;
-    if (do_rmse) {
-        float sumlx = 0;
-        float suml2 = 0;
-        for (int i = 0; i < n; ++i) {
-            int l = nearest_int(iscale * x[i]);
-            l = MAX(-nmax, MIN(nmax-1, l));
-            L[i] = l;
-            float w = x[i]*x[i];
-            sumlx += w*x[i]*l;
-            suml2 += w*l*l;
-        }
-        for (int itry = 0; itry < 5; ++itry) {
-            int n_changed = 0;
-            for (int i = 0; i < n; ++i) {
-                float w = x[i]*x[i];
-                float slx = sumlx - w*x[i]*L[i];
-                if (slx > 0) {
-                    float sl2 = suml2 - w*L[i]*L[i];
-                    int new_l = nearest_int(x[i] * sl2 / slx);
-                    new_l = MAX(-nmax, MIN(nmax-1, new_l));
-                    if (new_l != L[i]) {
-                        slx += w*x[i]*new_l;
-                        sl2 += w*new_l*new_l;
-                        if (sl2 > 0 && slx*slx*suml2 > sumlx*sumlx*sl2) {
-                            L[i] = new_l; sumlx = slx; suml2 = sl2;
-                            ++n_changed;
-                        }
-                    }
-                }
-            }
-            if (!n_changed) {
-                break;
-            }
-        }
-        for (int i = 0; i < n; ++i) {
-            L[i] += nmax;
-        }
-        return sumlx / suml2;
-    }
-    for (int i = 0; i < n; ++i) {
-        int l = nearest_int(iscale * x[i]);
-        l = MAX(-nmax, MIN(nmax-1, l));
-        L[i] = l + nmax;
-    }
-    return 1/iscale;
-}
-
-static float make_qkx1_quants(int n, int nmax, const float * restrict x, uint8_t * restrict L, float * restrict the_min,
-        int ntry, float alpha) {
-    float min = x[0];
-    float max = x[0];
-    for (int i = 1; i < n; ++i) {
-        if (x[i] < min) min = x[i];
-        if (x[i] > max) max = x[i];
-    }
-    if (max == min) {
-        for (int i = 0; i < n; ++i) L[i] = 0;
-        *the_min = 0;
-        return 0.f;
-    }
-    if (min > 0) min = 0;
-    float iscale = nmax/(max - min);
-    float scale = 1/iscale;
-    for (int itry = 0; itry < ntry; ++itry) {
-        float sumlx = 0; int suml2 = 0;
-        bool did_change = false;
-        for (int i = 0; i < n; ++i) {
-            int l = nearest_int(iscale*(x[i] - min));
-            l = MAX(0, MIN(nmax, l));
-            if (l != L[i]) {
-                L[i] = l;
-                did_change = true;
-            }
-            sumlx += (x[i] - min)*l;
-            suml2 += l*l;
-        }
-        scale = sumlx/suml2;
-        float sum = 0;
-        for (int i = 0; i < n; ++i) {
-            sum += x[i] - scale*L[i];
-        }
-        min = alpha*min + (1 - alpha)*sum/n;
-        if (min > 0) min = 0;
-        iscale = 1/scale;
-        if (!did_change) break;
-    }
-    *the_min = -min;
-    return scale;
-}
-
-static float make_qkx2_quants(int n, int nmax, const float * restrict x, const float * restrict weights,
-        uint8_t * restrict L, float * restrict the_min, uint8_t * restrict Laux,
-        float rmin, float rdelta, int nstep, bool use_mad) {
-    float min = x[0];
-    float max = x[0];
-    float sum_w = weights[0];
-    float sum_x = sum_w * x[0];
-#ifdef HAVE_BUGGY_APPLE_LINKER
-    // use 'volatile' to prevent unroll and work around a bug in Apple ld64 1015.7
-    for (volatile int i = 1; i < n; ++i) {
-#else
-    for (int i = 1; i < n; ++i) {
-#endif
-        if (x[i] < min) min = x[i];
-        if (x[i] > max) max = x[i];
-        float w = weights[i];
-        sum_w += w;
-        sum_x += w * x[i];
-    }
-    if (min > 0) min = 0;
-    if (max == min) {
-        for (int i = 0; i < n; ++i) L[i] = 0;
-        *the_min = -min;
-        return 0.f;
-    }
-    float iscale = nmax/(max - min);
-    float scale = 1/iscale;
-    float best_mad = 0;
-    for (int i = 0; i < n; ++i) {
-        int l = nearest_int(iscale*(x[i] - min));
-        L[i] = MAX(0, MIN(nmax, l));
-        float diff = scale * L[i] + min - x[i];
-        diff = use_mad ? fabsf(diff) : diff * diff;
-        float w = weights[i];
-        best_mad += w * diff;
-    }
-    if (nstep < 1) {
-        *the_min = -min;
-        return scale;
-    }
-    for (int is = 0; is <= nstep; ++is) {
-        iscale = (rmin + rdelta*is + nmax)/(max - min);
-        float sum_l = 0, sum_l2 = 0, sum_xl = 0;
-        for (int i = 0; i < n; ++i) {
-            int l = nearest_int(iscale*(x[i] - min));
-            l = MAX(0, MIN(nmax, l));
-            Laux[i] = l;
-            float w = weights[i];
-            sum_l += w*l;
-            sum_l2 += w*l*l;
-            sum_xl += w*l*x[i];
-        }
-        float D = sum_w * sum_l2 - sum_l * sum_l;
-        if (D > 0) {
-            float this_scale = (sum_w * sum_xl - sum_x * sum_l)/D;
-            float this_min   = (sum_l2 * sum_x - sum_l * sum_xl)/D;
-            if (this_min > 0) {
-                this_min = 0;
-                this_scale = sum_xl / sum_l2;
-            }
-            float mad = 0;
-            for (int i = 0; i < n; ++i) {
-                float diff = this_scale * Laux[i] + this_min - x[i];
-                diff = use_mad ? fabsf(diff) : diff * diff;
-                float w = weights[i];
-                mad += w * diff;
-            }
-            if (mad < best_mad) {
-                for (int i = 0; i < n; ++i) {
-                    L[i] = Laux[i];
-                }
-                best_mad = mad;
-                scale = this_scale;
-                min = this_min;
-            }
-        }
-    }
-    *the_min = -min;
-    return scale;
-}
-
-static inline void get_scale_min_k4(int j, const uint8_t * restrict q, uint8_t * restrict d, uint8_t * restrict m) {
-    if (j < 4) {
-        *d = q[j] & 63; *m = q[j + 4] & 63;
-    } else {
-        *d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4);
-        *m = (q[j+4] >>  4) | ((q[j-0] >> 6) << 4);
-    }
-}
-
-//========================- 2-bit (de)-quantization
-
-void quantize_row_q2_K_reference(const float * restrict x, block_q2_K * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int nb = k / QK_K;
-
-    uint8_t L[QK_K];
-    uint8_t Laux[16];
-    float   weights[16];
-    float mins[QK_K/16];
-    float scales[QK_K/16];
-
-    const float q4scale = 15.f;
-
-    for (int i = 0; i < nb; i++) {
-        float max_scale = 0; // as we are deducting the min, scales are always positive
-        float max_min = 0;
-        for (int j = 0; j < QK_K/16; ++j) {
-            for (int l = 0; l < 16; ++l) weights[l] = fabsf(x[16*j + l]);
-            scales[j] = make_qkx2_quants(16, 3, x + 16*j, weights, L + 16*j, &mins[j], Laux, -0.5f, 0.1f, 15, true);
-            float scale = scales[j];
-            if (scale > max_scale) {
-                max_scale = scale;
-            }
-            float min = mins[j];
-            if (min > max_min) {
-                max_min = min;
-            }
-        }
-
-        if (max_scale > 0) {
-            float iscale = q4scale/max_scale;
-            for (int j = 0; j < QK_K/16; ++j) {
-                int l = nearest_int(iscale*scales[j]);
-                y[i].scales[j] = l;
-            }
-            y[i].d = GGML_FP32_TO_FP16(max_scale/q4scale);
-        } else {
-            for (int j = 0; j < QK_K/16; ++j) y[i].scales[j] = 0;
-            y[i].d = GGML_FP32_TO_FP16(0.f);
-        }
-        if (max_min > 0) {
-            float iscale = q4scale/max_min;
-            for (int j = 0; j < QK_K/16; ++j) {
-                int l = nearest_int(iscale*mins[j]);
-                y[i].scales[j] |= (l << 4);
-            }
-            y[i].dmin = GGML_FP32_TO_FP16(max_min/q4scale);
-        } else {
-            y[i].dmin = GGML_FP32_TO_FP16(0.f);
-        }
-        for (int j = 0; j < QK_K/16; ++j) {
-            const float d = GGML_FP16_TO_FP32(y[i].d) * (y[i].scales[j] & 0xF);
-            if (!d) continue;
-            const float dm = GGML_FP16_TO_FP32(y[i].dmin) * (y[i].scales[j] >> 4);
-            for (int ii = 0; ii < 16; ++ii) {
-                int l = nearest_int((x[16*j + ii] + dm)/d);
-                l = MAX(0, MIN(3, l));
-                L[16*j + ii] = l;
-            }
-        }
-
-        for (int j = 0; j < QK_K; j += 128) {
-            for (int l = 0; l < 32; ++l) {
-                y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6);
-            }
-        }
-
-        x += QK_K;
-    }
-}
-
-void dequantize_row_q2_K(const block_q2_K * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int nb = k / QK_K;
-
-    for (int i = 0; i < nb; i++) {
-
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-        const float min = GGML_FP16_TO_FP32(x[i].dmin);
-
-        const uint8_t * q = x[i].qs;
-
-        int is = 0;
-        float dl, ml;
-        for (int n = 0; n < QK_K; n += 128) {
-            int shift = 0;
-            for (int j = 0; j < 4; ++j) {
-
-                uint8_t sc = x[i].scales[is++];
-                dl = d * (sc & 0xF); ml = min * (sc >> 4);
-                for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l] >> shift) & 3)) - ml;
-
-                sc = x[i].scales[is++];
-                dl = d * (sc & 0xF); ml = min * (sc >> 4);
-                for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3)) - ml;
-
-                shift += 2;
-            }
-            q += 32;
-        }
-    }
-}
-
-void quantize_row_q2_K(const float * restrict x, void * restrict vy, int64_t k) {
-    quantize_row_q2_K_reference(x, vy, k);
-}
-
-static float make_qkx3_quants(int n, int nmax, const float * restrict x, const float * restrict weights,
-        uint8_t * restrict L, float * restrict the_min, uint8_t * restrict Laux,
-        float rmin, float rdelta, int nstep, bool use_mad) {
-    float min = x[0];
-    float max = x[0];
-    float sum_w = weights ? weights[0] : x[0]*x[0];
-    float sum_x = sum_w * x[0];
-#ifdef HAVE_BUGGY_APPLE_LINKER
-    // use 'volatile' to prevent unroll and work around a bug in Apple ld64 1015.7
-    for (volatile int i = 1; i < n; ++i) {
-#else
-    for (int i = 1; i < n; ++i) {
-#endif
-        if (x[i] < min) min = x[i];
-        if (x[i] > max) max = x[i];
-        float w = weights ? weights[i] : x[i]*x[i];
-        sum_w += w;
-        sum_x += w * x[i];
-    }
-    if (min > 0) {
-        min = 0;
-    }
-    if (max <= min) {
-        memset(L, 0, n);
-        *the_min = -min;
-        return 0.f;
-    }
-    float iscale = nmax/(max - min);
-    float scale = 1/iscale;
-    float best_mad = 0;
-    for (int i = 0; i < n; ++i) {
-        int l = nearest_int(iscale*(x[i] - min));
-        L[i] = MAX(0, MIN(nmax, l));
-        float diff = scale * L[i] + min - x[i];
-        diff = use_mad ? fabsf(diff) : diff*diff;
-        float w = weights ? weights[i] : x[i]*x[i];
-        best_mad += w * diff;
-    }
-    if (nstep < 1) {
-        *the_min = -min;
-        return scale;
-    }
-    for (int is = 0; is <= nstep; ++is) {
-        iscale = (rmin + rdelta*is + nmax)/(max - min);
-        float sum_l = 0, sum_l2 = 0, sum_xl = 0;
-        for (int i = 0; i < n; ++i) {
-            int l = nearest_int(iscale*(x[i] - min));
-            l = MAX(0, MIN(nmax, l));
-            Laux[i] = l;
-            float w = weights ? weights[i] : x[i]*x[i];
-            sum_l  += w*l;
-            sum_l2 += w*l*l;
-            sum_xl += w*l*x[i];
-        }
-        float D = sum_w * sum_l2 - sum_l * sum_l;
-        if (D > 0) {
-            float this_scale = (sum_w * sum_xl - sum_x * sum_l)/D;
-            float this_min   = (sum_l2 * sum_x - sum_l * sum_xl)/D;
-            if (this_min > 0) {
-                this_min = 0;
-                this_scale = sum_xl / sum_l2;
-            }
-            float mad = 0;
-            for (int i = 0; i < n; ++i) {
-                float diff = this_scale * Laux[i] + this_min - x[i];
-                diff = use_mad ? fabsf(diff) : diff*diff;
-                float w = weights ? weights[i] : x[i]*x[i];
-                mad += w * diff;
-            }
-            if (mad < best_mad) {
-                for (int i = 0; i < n; ++i) {
-                    L[i] = Laux[i];
-                }
-                best_mad = mad;
-                scale = this_scale;
-                min = this_min;
-            }
-        }
-    }
-    *the_min = -min;
-    return scale;
-}
-
-static float make_qp_quants(int n, int nmax, const float * restrict x, uint8_t * restrict L, const float * quant_weights) {
-    float max = 0;
-    for (int i = 0; i < n; ++i) {
-        max = MAX(max, x[i]);
-    }
-    if (!max) { // all zero
-        for (int i = 0; i < n; ++i) { L[i] = 0; }
-        return 0.f;
-    }
-    float iscale = nmax / max;
-    for (int i = 0; i < n; ++i) {
-        L[i] = nearest_int(iscale * x[i]);
-    }
-    float scale = 1/iscale;
-    float best_mse = 0;
-    for (int i = 0; i < n; ++i) {
-        float diff = x[i] - scale*L[i];
-        float w = quant_weights[i];
-        best_mse += w*diff*diff;
-    }
-    for (int is = -4; is <= 4; ++is) {
-        if (is == 0) continue;
-        float iscale_is = (0.1f*is + nmax)/max;
-        float scale_is = 1/iscale_is;
-        float mse = 0;
-        for (int i = 0; i < n; ++i) {
-            int l = nearest_int(iscale_is*x[i]);
-            l = MIN(nmax, l);
-            float diff = x[i] - scale_is*l;
-            float w = quant_weights[i];
-            mse += w*diff*diff;
-        }
-        if (mse < best_mse) {
-            best_mse = mse;
-            iscale = iscale_is;
-        }
-    }
-    float sumlx = 0;
-    float suml2 = 0;
-    for (int i = 0; i < n; ++i) {
-        int l = nearest_int(iscale * x[i]);
-        l = MIN(nmax, l);
-        L[i] = l;
-        float w = quant_weights[i];
-        sumlx += w*x[i]*l;
-        suml2 += w*l*l;
-    }
-    for (int itry = 0; itry < 5; ++itry) {
-        int n_changed = 0;
-        for (int i = 0; i < n; ++i) {
-            float w = quant_weights[i];
-            float slx = sumlx - w*x[i]*L[i];
-            float sl2 = suml2 - w*L[i]*L[i];
-            if (slx > 0 && sl2 > 0) {
-                int new_l = nearest_int(x[i] * sl2 / slx);
-                new_l = MIN(nmax, new_l);
-                if (new_l != L[i]) {
-                    slx += w*x[i]*new_l;
-                    sl2 += w*new_l*new_l;
-                    if (slx*slx*suml2 > sumlx*sumlx*sl2) {
-                        L[i] = new_l; sumlx = slx; suml2 = sl2;
-                        ++n_changed;
-                    }
-                }
-            }
-        }
-        if (!n_changed) {
-            break;
-        }
-    }
-    return sumlx/suml2;
-}
-
-static void quantize_row_q2_K_impl(const float * restrict x, block_q2_K * restrict y, int k, const float * restrict quant_weights) {
-    GGML_ASSERT(quant_weights);
-    assert(k % QK_K == 0);
-    const int nb = k / QK_K;
-    const bool requantize = true;
-
-    uint8_t L[QK_K];
-    uint8_t Laux[16];
-    float mins[QK_K/16];
-    float scales[QK_K/16];
-    float sw[QK_K/16];
-    float weight[16];
-    uint8_t Ls[QK_K/16], Lm[QK_K/16];
-
-    for (int i = 0; i < nb; i++) {
-        memset(sw, 0, QK_K/16*sizeof(float));
-        float sumx2 = 0;
-        for (int j = 0; j < QK_K; ++j) sumx2 += x[j]*x[j];
-        float sigma2 = sumx2/QK_K;
-        for (int j = 0; j < QK_K/16; ++j) {
-            const float * restrict qw = quant_weights + QK_K * i + 16*j;
-            for (int l = 0; l < 16; ++l) weight[l] = qw[l] * sqrtf(sigma2 + x[16*j + l]*x[16*j + l]);
-            for (int l = 0; l < QK_K/16; ++l) sw[j] += weight[l];
-            scales[j] = make_qkx3_quants(16, 3, x + 16*j, weight, L + 16*j, &mins[j], Laux, -0.9f, 0.05f, 36, false);
-        }
-
-        float dm, mm;
-        dm  = make_qp_quants(QK_K/16, 15, scales, Ls, sw);
-        mm  = make_qp_quants(QK_K/16, 15, mins,   Lm, sw);
-
-        y[i].d    = GGML_FP32_TO_FP16(dm);
-        y[i].dmin = GGML_FP32_TO_FP16(mm);
-        dm        = GGML_FP16_TO_FP32(y[i].d);
-        mm        = GGML_FP16_TO_FP32(y[i].dmin);
-
-        for (int j = 0; j < QK_K/16; ++j) {
-            y[i].scales[j] = Ls[j] | (Lm[j] << 4);
-        }
-
-        if (requantize) {
-            for (int j = 0; j < QK_K/16; ++j) {
-                const float d = dm * (y[i].scales[j] & 0xF);
-                if (!d) continue;
-                const float m = mm * (y[i].scales[j] >> 4);
-                for (int ii = 0; ii < 16; ++ii) {
-                    int l = nearest_int((x[16*j + ii] + m)/d);
-                    l = MAX(0, MIN(3, l));
-                    L[16*j + ii] = l;
-                }
-            }
-        }
-
-        for (int j = 0; j < QK_K; j += 128) {
-            for (int l = 0; l < 32; ++l) {
-                y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6);
-            }
-        }
-
-        x += QK_K;
-    }
-}
-
-size_t quantize_q2_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    size_t row_size = ggml_row_size(GGML_TYPE_Q2_K, n_per_row);
-    if (!quant_weights) {
-        quantize_row_q2_K_reference(src, dst, (int64_t)nrow*n_per_row);
-    }
-    else {
-        char * qrow = (char *)dst;
-        for (int64_t row = 0; row < nrow; ++row) {
-            quantize_row_q2_K_impl(src, (block_q2_K*)qrow, n_per_row, quant_weights);
-            src += n_per_row;
-            qrow += row_size;
-        }
-    }
-    return nrow * row_size;
-}
-
-//========================= 3-bit (de)-quantization
-
-void quantize_row_q3_K_reference(const float * restrict x, block_q3_K * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int nb = k / QK_K;
-
-    int8_t L[QK_K];
-    float scales[QK_K / 16];
-
-    for (int i = 0; i < nb; i++) {
-
-        float max_scale = 0;
-        float amax = 0;
-        for (int j = 0; j < QK_K/16; ++j) {
-            scales[j] = make_q3_quants(16, 4, x + 16*j, L + 16*j, true);
-            float scale = fabsf(scales[j]);
-            if (scale > amax) {
-                amax = scale; max_scale = scales[j];
-            }
-        }
-
-        memset(y[i].scales, 0, 12);
-        if (max_scale) {
-            float iscale = -32.f/max_scale;
-            for (int j = 0; j < QK_K/16; ++j) {
-                int8_t l = nearest_int(iscale*scales[j]);
-                l = MAX(-32, MIN(31, l)) + 32;
-                if (j < 8) {
-                    y[i].scales[j] = l & 0xF;
-                } else {
-                    y[i].scales[j-8] |= ((l & 0xF) << 4);
-                }
-                l >>= 4;
-                y[i].scales[j%4 + 8] |= (l << (2*(j/4)));
-            }
-            y[i].d = GGML_FP32_TO_FP16(1/iscale);
-        } else {
-            y[i].d = GGML_FP32_TO_FP16(0.f);
-        }
-
-        int8_t sc;
-        for (int j = 0; j < QK_K/16; ++j) {
-            sc = j < 8 ? y[i].scales[j] & 0xF : y[i].scales[j-8] >> 4;
-            sc = (sc | (((y[i].scales[8 + j%4] >> (2*(j/4))) & 3) << 4)) - 32;
-            float d = GGML_FP16_TO_FP32(y[i].d) * sc;
-            if (!d) {
-                continue;
-            }
-            for (int ii = 0; ii < 16; ++ii) {
-                int l = nearest_int(x[16*j + ii]/d);
-                l = MAX(-4, MIN(3, l));
-                L[16*j + ii] = l + 4;
-            }
-        }
-
-        memset(y[i].hmask, 0, QK_K/8);
-        // We put the high-bit for the 1st 8 quants into bit 0, the next 8 into bit 1, etc.
-        int m = 0;
-        uint8_t hm = 1;
-        for (int j = 0; j < QK_K; ++j) {
-            if (L[j] > 3) {
-                y[i].hmask[m] |= hm;
-                L[j] -= 4;
-            }
-            if (++m == QK_K/8) {
-                m = 0; hm <<= 1;
-            }
-        }
-        for (int j = 0; j < QK_K; j += 128) {
-            for (int l = 0; l < 32; ++l) {
-                y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6);
-            }
-        }
-
-        x += QK_K;
-    }
-}
-
-void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int nb = k / QK_K;
-
-    const uint32_t kmask1 = 0x03030303;
-    const uint32_t kmask2 = 0x0f0f0f0f;
-
-    uint32_t aux[4];
-    const int8_t * scales = (const int8_t*)aux;
-
-    for (int i = 0; i < nb; i++) {
-
-        const float d_all = GGML_FP16_TO_FP32(x[i].d);
-
-        const uint8_t * restrict q = x[i].qs;
-        const uint8_t * restrict hm = x[i].hmask;
-        uint8_t m = 1;
-
-        memcpy(aux, x[i].scales, 12);
-        uint32_t tmp = aux[2];
-        aux[2] = ((aux[0] >> 4) & kmask2) | (((tmp >> 4) & kmask1) << 4);
-        aux[3] = ((aux[1] >> 4) & kmask2) | (((tmp >> 6) & kmask1) << 4);
-        aux[0] = (aux[0] & kmask2) | (((tmp >> 0) & kmask1) << 4);
-        aux[1] = (aux[1] & kmask2) | (((tmp >> 2) & kmask1) << 4);
-
-        int is = 0;
-        float dl;
-        for (int n = 0; n < QK_K; n += 128) {
-            int shift = 0;
-            for (int j = 0; j < 4; ++j) {
-
-                dl = d_all * (scales[is++] - 32);
-                for (int l = 0; l < 16; ++l) {
-                    *y++ = dl * ((int8_t)((q[l+ 0] >> shift) & 3) - ((hm[l+ 0] & m) ? 0 : 4));
-                }
-
-                dl = d_all * (scales[is++] - 32);
-                for (int l = 0; l < 16; ++l) {
-                    *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3) - ((hm[l+16] & m) ? 0 : 4));
-                }
-
-                shift += 2;
-                m <<= 1;
-            }
-            q += 32;
-        }
-
-    }
-}
-
-void quantize_row_q3_K(const float * restrict x, void * restrict vy, int64_t k) {
-    quantize_row_q3_K_reference(x, vy, k);
-}
-
-static void quantize_row_q3_K_impl(const float * restrict x, block_q3_K * restrict y, int64_t n_per_row, const float * restrict quant_weights) {
-    assert(n_per_row % QK_K == 0);
-    const int nb = n_per_row / QK_K;
-
-    int8_t L[QK_K];
-    float scales[QK_K / 16];
-    float weight[16];
-    float sw[QK_K / 16];
-    int8_t Ls[QK_K / 16];
-
-    for (int i = 0; i < nb; i++) {
-
-        float sumx2 = 0;
-        for (int j = 0; j < QK_K; ++j) sumx2 += x[j]*x[j];
-        float sigma2 = 2*sumx2/QK_K;
-
-        for (int j = 0; j < QK_K/16; ++j) {
-            if (quant_weights) {
-                const float * qw = quant_weights + QK_K * i + 16*j;
-                for (int l = 0; l < 16; ++l) weight[l] = qw[l] * sqrtf(sigma2 + x[16*j+l]*x[16*j+l]);
-            } else {
-                for (int l = 0; l < 16; ++l) weight[l] = x[16*j+l]*x[16*j+l];
-            }
-            float sumw = 0;
-            for (int l = 0; l < 16; ++l) sumw += weight[l];
-            sw[j] = sumw;
-
-            scales[j] = make_qx_quants(16, 4, x + 16*j, L + 16*j, 1, weight);
-
-        }
-
-        memset(y[i].scales, 0, 12);
-
-        float d_block = make_qx_quants(QK_K/16, 32, scales, Ls, 1, sw);
-        for (int j = 0; j < QK_K/16; ++j) {
-            int l = Ls[j];
-            if (j < 8) {
-                y[i].scales[j] = l & 0xF;
-            } else {
-                y[i].scales[j-8] |= ((l & 0xF) << 4);
-            }
-            l >>= 4;
-            y[i].scales[j%4 + 8] |= (l << (2*(j/4)));
-        }
-        y[i].d = GGML_FP32_TO_FP16(d_block);
-
-        int8_t sc;
-        for (int j = 0; j < QK_K/16; ++j) {
-            sc = j < 8 ? y[i].scales[j] & 0xF : y[i].scales[j-8] >> 4;
-            sc = (sc | (((y[i].scales[8 + j%4] >> (2*(j/4))) & 3) << 4)) - 32;
-            float d = GGML_FP16_TO_FP32(y[i].d) * sc;
-            if (!d) {
-                continue;
-            }
-            for (int ii = 0; ii < 16; ++ii) {
-                int l = nearest_int(x[16*j + ii]/d);
-                l = MAX(-4, MIN(3, l));
-                L[16*j + ii] = l + 4;
-            }
-        }
-
-        memset(y[i].hmask, 0, QK_K/8);
-        // We put the high-bit for the 1st 8 quants into bit 0, the next 8 into bit 1, etc.
-        int m = 0;
-        uint8_t hm = 1;
-        for (int j = 0; j < QK_K; ++j) {
-            if (L[j] > 3) {
-                y[i].hmask[m] |= hm;
-                L[j] -= 4;
-            }
-            if (++m == QK_K/8) {
-                m = 0; hm <<= 1;
-            }
-        }
-        for (int j = 0; j < QK_K; j += 128) {
-            for (int l = 0; l < 32; ++l) {
-                y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6);
-            }
-        }
-
-        x += QK_K;
-    }
-}
-
-size_t quantize_q3_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    size_t row_size = ggml_row_size(GGML_TYPE_Q3_K, n_per_row);
-    if (!quant_weights) {
-        quantize_row_q3_K_reference(src, dst, (int64_t)nrow*n_per_row);
-    }
-    else {
-        char * qrow = (char *)dst;
-        for (int64_t row = 0; row < nrow; ++row) {
-            quantize_row_q3_K_impl(src, (block_q3_K*)qrow, n_per_row, quant_weights);
-            src += n_per_row;
-            qrow += row_size;
-        }
-    }
-    return nrow * row_size;
-}
-
-// ====================== 4-bit (de)-quantization
-
-void quantize_row_q4_K_reference(const float * restrict x, block_q4_K * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int nb = k / QK_K;
-
-    uint8_t L[QK_K];
-    uint8_t Laux[32];
-    float   weights[32];
-    float mins[QK_K/32];
-    float scales[QK_K/32];
-
-    for (int i = 0; i < nb; i++) {
-        float max_scale = 0; // as we are deducting the min, scales are always positive
-        float max_min = 0;
-        for (int j = 0; j < QK_K/32; ++j) {
-            //scales[j] = make_qkx1_quants(32, 15, x + 32*j, L + 32*j, &mins[j], 9, 0.5f);
-            float sum_x2 = 0;
-            for (int l = 0; l < 32; ++l) sum_x2 += x[32*j + l] * x[32*j + l];
-            float av_x = sqrtf(sum_x2/32);
-            for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]);
-            scales[j] = make_qkx2_quants(32, 15, x + 32*j, weights, L + 32*j, &mins[j], Laux, -1.f, 0.1f, 20, false);
-            float scale = scales[j];
-            if (scale > max_scale) {
-                max_scale = scale;
-            }
-            float min = mins[j];
-            if (min > max_min) {
-                max_min = min;
-            }
-        }
-
-        float inv_scale = max_scale > 0 ? 63.f/max_scale : 0.f;
-        float inv_min   = max_min   > 0 ? 63.f/max_min   : 0.f;
-        for (int j = 0; j < QK_K/32; ++j) {
-            uint8_t ls = nearest_int(inv_scale*scales[j]);
-            uint8_t lm = nearest_int(inv_min*mins[j]);
-            ls = MIN(63, ls);
-            lm = MIN(63, lm);
-            if (j < 4) {
-                y[i].scales[j] = ls;
-                y[i].scales[j+4] = lm;
-            } else {
-                y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4);
-                y[i].scales[j-4] |= ((ls >> 4) << 6);
-                y[i].scales[j-0] |= ((lm >> 4) << 6);
-            }
-        }
-        y[i].d = GGML_FP32_TO_FP16(max_scale/63.f);
-        y[i].dmin = GGML_FP32_TO_FP16(max_min/63.f);
-
-        uint8_t sc, m;
-        for (int j = 0; j < QK_K/32; ++j) {
-            get_scale_min_k4(j, y[i].scales, &sc, &m);
-            const float d = GGML_FP16_TO_FP32(y[i].d) * sc;
-            if (!d) continue;
-            const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m;
-            for (int ii = 0; ii < 32; ++ii) {
-                int l = nearest_int((x[32*j + ii] + dm)/d);
-                l = MAX(0, MIN(15, l));
-                L[32*j + ii] = l;
-            }
-        }
-
-        uint8_t * q = y[i].qs;
-        for (int j = 0; j < QK_K; j += 64) {
-            for (int l = 0; l < 32; ++l) q[l] = L[j + l] | (L[j + l + 32] << 4);
-            q += 32;
-        }
-
-        x += QK_K;
-    }
-}
-
-void dequantize_row_q4_K(const block_q4_K * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int nb = k / QK_K;
-
-    for (int i = 0; i < nb; i++) {
-        const uint8_t * q = x[i].qs;
-
-        const float d   = GGML_FP16_TO_FP32(x[i].d);
-        const float min = GGML_FP16_TO_FP32(x[i].dmin);
-
-        int is = 0;
-        uint8_t sc, m;
-        for (int j = 0; j < QK_K; j += 64) {
-            get_scale_min_k4(is + 0, x[i].scales, &sc, &m);
-            const float d1 = d * sc; const float m1 = min * m;
-            get_scale_min_k4(is + 1, x[i].scales, &sc, &m);
-            const float d2 = d * sc; const float m2 = min * m;
-            for (int l = 0; l < 32; ++l) *y++ = d1 * (q[l] & 0xF) - m1;
-            for (int l = 0; l < 32; ++l) *y++ = d2 * (q[l]  >> 4) - m2;
-            q += 32; is += 2;
-        }
-    }
-}
-
-void quantize_row_q4_K(const float * restrict x, void * restrict vy, int64_t k) {
-    assert(k % QK_K == 0);
-    block_q4_K * restrict y = vy;
-    quantize_row_q4_K_reference(x, y, k);
-}
-
-static void quantize_row_q4_K_impl(const float * restrict x, block_q4_K * restrict y, int64_t n_per_row, const float * quant_weights) {
-    assert(n_per_row % QK_K == 0);
-    const int64_t nb = n_per_row / QK_K;
-
-    uint8_t L[QK_K];
-    uint8_t Laux[32];
-    uint8_t Ls[QK_K/32];
-    uint8_t Lm[QK_K/32];
-    float   weights[32];
-    float   sw[QK_K/32];
-    float   mins[QK_K/32];
-    float   scales[QK_K/32];
-
-    for (int i = 0; i < nb; i++) {
-
-        float sum_x2 = 0;
-        for (int l = 0; l < QK_K; ++l) sum_x2 += x[l] * x[l];
-        float sigma2 = 2*sum_x2/QK_K;
-        float av_x = sqrtf(sigma2);
-
-        for (int j = 0; j < QK_K/32; ++j) {
-            if (quant_weights) {
-                const float * qw = quant_weights + QK_K*i + 32*j;
-                for (int l = 0; l < 32; ++l) weights[l] = qw[l] * sqrtf(sigma2 + x[32*j + l]*x[32*j + l]);
-            } else {
-                for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]);
-            }
-            float sumw = 0;
-            for (int l = 0; l < 32; ++l) sumw += weights[l];
-            sw[j] = sumw;
-            scales[j] = make_qkx3_quants(32, 15, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.9f, 0.05f, 36, false);
-        }
-
-        float d_block = make_qp_quants(QK_K/32, 63, scales, Ls, sw);
-        float m_block = make_qp_quants(QK_K/32, 63, mins,   Lm, sw);
-        for (int j = 0; j < QK_K/32; ++j) {
-            uint8_t ls = Ls[j];
-            uint8_t lm = Lm[j];
-            if (j < 4) {
-                y[i].scales[j] = ls;
-                y[i].scales[j+4] = lm;
-            } else {
-                y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4);
-                y[i].scales[j-4] |= ((ls >> 4) << 6);
-                y[i].scales[j-0] |= ((lm >> 4) << 6);
-            }
-        }
-        y[i].d = GGML_FP32_TO_FP16(d_block);
-        y[i].dmin = GGML_FP32_TO_FP16(m_block);
-
-        uint8_t sc, m;
-        for (int j = 0; j < QK_K/32; ++j) {
-            get_scale_min_k4(j, y[i].scales, &sc, &m);
-            const float d = GGML_FP16_TO_FP32(y[i].d) * sc;
-            if (!d) continue;
-            const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m;
-            for (int ii = 0; ii < 32; ++ii) {
-                int l = nearest_int((x[32*j + ii] + dm)/d);
-                l = MAX(0, MIN(15, l));
-                L[32*j + ii] = l;
-            }
-        }
-        uint8_t * q = y[i].qs;
-        for (int j = 0; j < QK_K; j += 64) {
-            for (int l = 0; l < 32; ++l) q[l] = L[j + l] | (L[j + l + 32] << 4);
-            q += 32;
-        }
-
-        x += QK_K;
-
-    }
-}
-
-size_t quantize_q4_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    size_t row_size = ggml_row_size(GGML_TYPE_Q4_K, n_per_row);
-    if (!quant_weights) {
-        quantize_row_q4_K_reference(src, dst, (int64_t)nrow*n_per_row);
-    }
-    else {
-        char * qrow = (char *)dst;
-        for (int64_t row = 0; row < nrow; ++row) {
-            quantize_row_q4_K_impl(src, (block_q4_K*)qrow, n_per_row, quant_weights);
-            src += n_per_row;
-            qrow += row_size;
-        }
-    }
-    return nrow * row_size;
-}
-
-// ====================== 5-bit (de)-quantization
-
-void quantize_row_q5_K_reference(const float * restrict x, block_q5_K * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    uint8_t L[QK_K];
-    float mins[QK_K/32];
-    float scales[QK_K/32];
-    float weights[32];
-    uint8_t Laux[32];
-
-    for (int i = 0; i < nb; i++) {
-        float max_scale = 0; // as we are deducting the min, scales are always positive
-        float max_min = 0;
-        for (int j = 0; j < QK_K/32; ++j) {
-            //scales[j] = make_qkx1_quants(32, 31, x + 32*j, L + 32*j, &mins[j], 9, 0.5f);
-            float sum_x2 = 0;
-            for (int l = 0; l < 32; ++l) sum_x2 += x[32*j + l] * x[32*j + l];
-            float av_x = sqrtf(sum_x2/32);
-            for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]);
-            scales[j] = make_qkx2_quants(32, 31, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.5f, 0.1f, 15, false);
-            float scale = scales[j];
-            if (scale > max_scale) {
-                max_scale = scale;
-            }
-            float min = mins[j];
-            if (min > max_min) {
-                max_min = min;
-            }
-        }
-
-        float inv_scale = max_scale > 0 ? 63.f/max_scale : 0.f;
-        float inv_min   = max_min   > 0 ? 63.f/max_min   : 0.f;
-        for (int j = 0; j < QK_K/32; ++j) {
-            uint8_t ls = nearest_int(inv_scale*scales[j]);
-            uint8_t lm = nearest_int(inv_min*mins[j]);
-            ls = MIN(63, ls);
-            lm = MIN(63, lm);
-            if (j < 4) {
-                y[i].scales[j] = ls;
-                y[i].scales[j+4] = lm;
-            } else {
-                y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4);
-                y[i].scales[j-4] |= ((ls >> 4) << 6);
-                y[i].scales[j-0] |= ((lm >> 4) << 6);
-            }
-        }
-        y[i].d = GGML_FP32_TO_FP16(max_scale/63.f);
-        y[i].dmin = GGML_FP32_TO_FP16(max_min/63.f);
-
-        uint8_t sc, m;
-        for (int j = 0; j < QK_K/32; ++j) {
-            get_scale_min_k4(j, y[i].scales, &sc, &m);
-            const float d = GGML_FP16_TO_FP32(y[i].d) * sc;
-            if (!d) continue;
-            const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m;
-            for (int ii = 0; ii < 32; ++ii) {
-                int l = nearest_int((x[32*j + ii] + dm)/d);
-                l = MAX(0, MIN(31, l));
-                L[32*j + ii] = l;
-            }
-        }
-
-        uint8_t * restrict qh = y[i].qh;
-        uint8_t * restrict ql = y[i].qs;
-        memset(qh, 0, QK_K/8);
-
-        uint8_t m1 = 1, m2 = 2;
-        for (int n = 0; n < QK_K; n += 64) {
-            for (int j = 0; j < 32; ++j) {
-                int l1 = L[n + j];
-                if (l1 > 15) {
-                    l1 -= 16; qh[j] |= m1;
-                }
-                int l2 = L[n + j + 32];
-                if (l2 > 15) {
-                    l2 -= 16; qh[j] |= m2;
-                }
-                ql[j] = l1 | (l2 << 4);
-            }
-            m1 <<= 2; m2 <<= 2;
-            ql += 32;
-        }
-
-        x += QK_K;
-    }
-}
-
-void dequantize_row_q5_K(const block_q5_K * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    for (int i = 0; i < nb; i++) {
-        const uint8_t * ql = x[i].qs;
-        const uint8_t * qh = x[i].qh;
-
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-        const float min = GGML_FP16_TO_FP32(x[i].dmin);
-
-        int is = 0;
-        uint8_t sc, m;
-        uint8_t u1 = 1, u2 = 2;
-        for (int j = 0; j < QK_K; j += 64) {
-            get_scale_min_k4(is + 0, x[i].scales, &sc, &m);
-            const float d1 = d * sc; const float m1 = min * m;
-            get_scale_min_k4(is + 1, x[i].scales, &sc, &m);
-            const float d2 = d * sc; const float m2 = min * m;
-            for (int l = 0; l < 32; ++l) *y++ = d1 * ((ql[l] & 0xF) + (qh[l] & u1 ? 16 : 0)) - m1;
-            for (int l = 0; l < 32; ++l) *y++ = d2 * ((ql[l]  >> 4) + (qh[l] & u2 ? 16 : 0)) - m2;
-            ql += 32; is += 2;
-            u1 <<= 2; u2 <<= 2;
-        }
-    }
-}
-
-void quantize_row_q5_K(const float * restrict x, void * restrict vy, int64_t k) {
-    assert(k % QK_K == 0);
-    block_q5_K * restrict y = vy;
-    quantize_row_q5_K_reference(x, y, k);
-}
-
-static void quantize_row_q5_K_impl(const float * restrict x, block_q5_K * restrict y, int64_t n_per_row, const float * quant_weights) {
-    assert(n_per_row % QK_K == 0);
-    const int64_t nb = n_per_row / QK_K;
-
-    uint8_t L[QK_K];
-    uint8_t Laux[32];
-    uint8_t Ls[QK_K/32];
-    uint8_t Lm[QK_K/32];
-    float   mins[QK_K/32];
-    float   scales[QK_K/32];
-    float   sw[QK_K/32];
-    float   weights[32];
-
-    for (int i = 0; i < nb; i++) {
-
-        float sum_x2 = 0;
-        for (int l = 0; l < QK_K; ++l) sum_x2 += x[l] * x[l];
-        float sigma2 = 2*sum_x2/QK_K;
-        float av_x = sqrtf(sigma2);
-
-        for (int j = 0; j < QK_K/32; ++j) {
-            if (quant_weights) {
-                const float * qw = quant_weights + QK_K*i + 32*j;
-                for (int l = 0; l < 32; ++l) weights[l] = qw[l] * sqrtf(sigma2 + x[32*j + l]*x[32*j + l]);
-            } else {
-                for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]);
-            }
-            float sumw = 0;
-            for (int l = 0; l < 32; ++l) sumw += weights[l];
-            sw[j] = sumw;
-
-            scales[j] = make_qkx3_quants(32, 31, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.9f, 0.05f, 36, false);
-        }
-
-        float d_block = make_qp_quants(QK_K/32, 63, scales, Ls, sw);
-        float m_block = make_qp_quants(QK_K/32, 63, mins,   Lm, sw);
-
-        for (int j = 0; j < QK_K/32; ++j) {
-            uint8_t ls = Ls[j];
-            uint8_t lm = Lm[j];
-            ls = MIN(63, ls);
-            lm = MIN(63, lm);
-            if (j < 4) {
-                y[i].scales[j] = ls;
-                y[i].scales[j+4] = lm;
-            } else {
-                y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4);
-                y[i].scales[j-4] |= ((ls >> 4) << 6);
-                y[i].scales[j-0] |= ((lm >> 4) << 6);
-            }
-        }
-        y[i].d = GGML_FP32_TO_FP16(d_block);
-        y[i].dmin = GGML_FP32_TO_FP16(m_block);
-
-        uint8_t sc, m;
-        for (int j = 0; j < QK_K/32; ++j) {
-            get_scale_min_k4(j, y[i].scales, &sc, &m);
-            const float d = GGML_FP16_TO_FP32(y[i].d) * sc;
-            if (!d) continue;
-            const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m;
-            for (int ii = 0; ii < 32; ++ii) {
-                int l = nearest_int((x[32*j + ii] + dm)/d);
-                l = MAX(0, MIN(31, l));
-                L[32*j + ii] = l;
-            }
-        }
-
-        uint8_t * restrict qh = y[i].qh;
-        uint8_t * restrict ql = y[i].qs;
-        memset(qh, 0, QK_K/8);
-
-        uint8_t m1 = 1, m2 = 2;
-        for (int n = 0; n < QK_K; n += 64) {
-            for (int j = 0; j < 32; ++j) {
-                int l1 = L[n + j];
-                if (l1 > 15) {
-                    l1 -= 16; qh[j] |= m1;
-                }
-                int l2 = L[n + j + 32];
-                if (l2 > 15) {
-                    l2 -= 16; qh[j] |= m2;
-                }
-                ql[j] = l1 | (l2 << 4);
-            }
-            m1 <<= 2; m2 <<= 2;
-            ql += 32;
-        }
-
-        x += QK_K;
-
-    }
-}
-
-size_t quantize_q5_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    size_t row_size = ggml_row_size(GGML_TYPE_Q5_K, n_per_row);
-    if (!quant_weights) {
-        quantize_row_q5_K_reference(src, dst, (int64_t)nrow*n_per_row);
-    }
-    else {
-        char * qrow = (char *)dst;
-        for (int64_t row = 0; row < nrow; ++row) {
-            quantize_row_q5_K_impl(src, (block_q5_K*)qrow, n_per_row, quant_weights);
-            src += n_per_row;
-            qrow += row_size;
-        }
-    }
-    return nrow * row_size;
-}
-
-// ====================== 6-bit (de)-quantization
-
-void quantize_row_q6_K_reference(const float * restrict x, block_q6_K * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    int8_t L[QK_K];
-    float   scales[QK_K/16];
-
-    for (int i = 0; i < nb; i++) {
-
-        float max_scale = 0;
-        float max_abs_scale = 0;
-
-        for (int ib = 0; ib < QK_K/16; ++ib) {
-
-            const float scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, NULL);
-            scales[ib] = scale;
-
-            const float abs_scale = fabsf(scale);
-            if (abs_scale > max_abs_scale) {
-                max_abs_scale = abs_scale;
-                max_scale = scale;
-            }
-
-        }
-
-        if (max_abs_scale < GROUP_MAX_EPS) {
-            memset(&y[i], 0, sizeof(block_q6_K));
-            y[i].d = GGML_FP32_TO_FP16(0.f);
-            x += QK_K;
-            continue;
-        }
-
-        float iscale = -128.f/max_scale;
-        y[i].d = GGML_FP32_TO_FP16(1/iscale);
-        for (int ib = 0; ib < QK_K/16; ++ib) {
-            y[i].scales[ib] = MIN(127, nearest_int(iscale*scales[ib]));
-        }
-
-        for (int j = 0; j < QK_K/16; ++j) {
-            float d = GGML_FP16_TO_FP32(y[i].d) * y[i].scales[j];
-            if (!d) {
-                continue;
-            }
-            for (int ii = 0; ii < 16; ++ii) {
-                int l = nearest_int(x[16*j + ii]/d);
-                l = MAX(-32, MIN(31, l));
-                L[16*j + ii] = l + 32;
-            }
-        }
-
-        uint8_t * restrict ql = y[i].ql;
-        uint8_t * restrict qh = y[i].qh;
-        for (int j = 0; j < QK_K; j += 128) {
-            for (int l = 0; l < 32; ++l) {
-                const uint8_t q1 = L[j + l +  0] & 0xF;
-                const uint8_t q2 = L[j + l + 32] & 0xF;
-                const uint8_t q3 = L[j + l + 64] & 0xF;
-                const uint8_t q4 = L[j + l + 96] & 0xF;
-                ql[l+ 0] = q1 | (q3 << 4);
-                ql[l+32] = q2 | (q4 << 4);
-                qh[l] = (L[j + l] >> 4) | ((L[j + l + 32] >> 4) << 2) | ((L[j + l + 64] >> 4) << 4) | ((L[j + l + 96] >> 4) << 6);
-            }
-            ql += 64;
-            qh += 32;
-        }
-
-        x += QK_K;
-    }
-}
-
-void dequantize_row_q6_K(const block_q6_K * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    for (int i = 0; i < nb; i++) {
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-
-        const uint8_t * restrict ql = x[i].ql;
-        const uint8_t * restrict qh = x[i].qh;
-        const int8_t  * restrict sc = x[i].scales;
-
-        for (int n = 0; n < QK_K; n += 128) {
-            for (int l = 0; l < 32; ++l) {
-                int is = l/16;
-                const int8_t q1 = (int8_t)((ql[l +  0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32;
-                const int8_t q2 = (int8_t)((ql[l + 32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32;
-                const int8_t q3 = (int8_t)((ql[l +  0]  >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32;
-                const int8_t q4 = (int8_t)((ql[l + 32]  >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32;
-                y[l +  0] = d * sc[is + 0] * q1;
-                y[l + 32] = d * sc[is + 2] * q2;
-                y[l + 64] = d * sc[is + 4] * q3;
-                y[l + 96] = d * sc[is + 6] * q4;
-            }
-            y  += 128;
-            ql += 64;
-            qh += 32;
-            sc += 8;
-        }
-    }
-}
-
-void quantize_row_q6_K(const float * restrict x, void * restrict vy, int64_t k) {
-    assert(k % QK_K == 0);
-    block_q6_K * restrict y = vy;
-    quantize_row_q6_K_reference(x, y, k);
-}
-
-static void quantize_row_q6_K_impl(const float * restrict x, block_q6_K * restrict y, int64_t n_per_row, const float * quant_weights) {
-    assert(n_per_row % QK_K == 0);
-    const int64_t nb = n_per_row / QK_K;
-
-    int8_t L[QK_K];
-    float   scales[QK_K/16];
-    //float   weights[16];
-
-    for (int i = 0; i < nb; i++) {
-
-        //float sum_x2 = 0;
-        //for (int j = 0; j < QK_K; ++j) sum_x2 += x[j]*x[j];
-        //float sigma2 = sum_x2/QK_K;
-
-        float max_scale = 0;
-        float max_abs_scale = 0;
-
-        for (int ib = 0; ib < QK_K/16; ++ib) {
-
-            float scale;
-            if (quant_weights) {
-                const float * qw = quant_weights + QK_K*i + 16*ib;
-                //for (int j = 0; j < 16; ++j) weights[j] = qw[j] * sqrtf(sigma2 + x[16*ib + j]*x[16*ib + j]);
-                //scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, weights);
-                scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, qw);
-            } else {
-                scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, NULL);
-            }
-            scales[ib] = scale;
-
-            const float abs_scale = fabsf(scale);
-            if (abs_scale > max_abs_scale) {
-                max_abs_scale = abs_scale;
-                max_scale = scale;
-            }
-
-        }
-
-        if (max_abs_scale < GROUP_MAX_EPS) {
-            memset(&y[i], 0, sizeof(block_q6_K));
-            y[i].d = GGML_FP32_TO_FP16(0.f);
-            x += QK_K;
-            continue;
-        }
-
-        float iscale = -128.f/max_scale;
-        y[i].d = GGML_FP32_TO_FP16(1/iscale);
-        for (int ib = 0; ib < QK_K/16; ++ib) {
-            y[i].scales[ib] = MIN(127, nearest_int(iscale*scales[ib]));
-        }
-
-        for (int j = 0; j < QK_K/16; ++j) {
-            float d = GGML_FP16_TO_FP32(y[i].d) * y[i].scales[j];
-            if (!d) {
-                continue;
-            }
-            for (int ii = 0; ii < 16; ++ii) {
-                int l = nearest_int(x[16*j + ii]/d);
-                l = MAX(-32, MIN(31, l));
-                L[16*j + ii] = l + 32;
-            }
-        }
-
-        uint8_t * restrict ql = y[i].ql;
-        uint8_t * restrict qh = y[i].qh;
-        for (int j = 0; j < QK_K; j += 128) {
-            for (int l = 0; l < 32; ++l) {
-                const uint8_t q1 = L[j + l +  0] & 0xF;
-                const uint8_t q2 = L[j + l + 32] & 0xF;
-                const uint8_t q3 = L[j + l + 64] & 0xF;
-                const uint8_t q4 = L[j + l + 96] & 0xF;
-                ql[l+ 0] = q1 | (q3 << 4);
-                ql[l+32] = q2 | (q4 << 4);
-                qh[l] = (L[j + l] >> 4) | ((L[j + l + 32] >> 4) << 2) | ((L[j + l + 64] >> 4) << 4) | ((L[j + l + 96] >> 4) << 6);
-            }
-            ql += 64;
-            qh += 32;
-        }
-
-        x += QK_K;
-
-    }
-}
-
-size_t quantize_q6_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    size_t row_size = ggml_row_size(GGML_TYPE_Q6_K, n_per_row);
-    if (!quant_weights) {
-        quantize_row_q6_K_reference(src, dst, (int64_t)nrow*n_per_row);
-    }
-    else {
-        char * qrow = (char *)dst;
-        for (int64_t row = 0; row < nrow; ++row) {
-            quantize_row_q6_K_impl(src, (block_q6_K*)qrow, n_per_row, quant_weights);
-            src += n_per_row;
-            qrow += row_size;
-        }
-    }
-    return nrow * row_size;
-}
-
-static void quantize_row_q4_0_impl(const float * restrict x, block_q4_0 * restrict y, int64_t n_per_row, const float * quant_weights) {
-    static_assert(QK4_0 == 32, "QK4_0 must be 32");
-
-    if (!quant_weights) {
-        quantize_row_q4_0_reference(x, y, n_per_row);
-        return;
-    }
-
-    float weight[QK4_0];
-    int8_t L[QK4_0];
-
-    float sum_x2 = 0;
-    for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j];
-    float sigma2 = sum_x2/n_per_row;
-
-    const int64_t nb = n_per_row/QK4_0;
-    for (int ib = 0; ib < nb; ++ib) {
-        const float * xb = x + QK4_0 * ib;
-        const float * qw = quant_weights + QK4_0 * ib;
-        for (int j = 0; j < QK4_0; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]);
-        float d = make_qx_quants(QK4_0, 8, xb, L, 1, weight);
-        y[ib].d = GGML_FP32_TO_FP16(d);
-        for (int j = 0; j < 16; ++j) {
-            y[ib].qs[j] = L[j] | (L[j+16] << 4);
-        }
-    }
-}
-
-size_t quantize_q4_0(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    if (!quant_weights) {
-        quantize_row_q4_0_reference(src, dst, (int64_t)nrow*n_per_row);
-        return nrow * ggml_row_size(GGML_TYPE_Q4_0, n_per_row);
-    }
-    size_t row_size = ggml_row_size(GGML_TYPE_Q4_0, n_per_row);
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_q4_0_impl(src, (block_q4_0*)qrow, n_per_row, quant_weights);
-        src += n_per_row;
-        qrow += row_size;
-    }
-    return nrow * row_size;
-}
-
-static void quantize_row_q4_1_impl(const float * restrict x, block_q4_1 * restrict y, int64_t n_per_row, const float * quant_weights) {
-    static_assert(QK4_1 == 32, "QK4_1 must be 32");
-
-    if (!quant_weights) {
-        quantize_row_q4_1_reference(x, y, n_per_row);
-        return;
-    }
-
-    float weight[QK4_1];
-    uint8_t L[QK4_1], Laux[QK4_1];
-
-    float sum_x2 = 0;
-    for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j];
-    float sigma2 = sum_x2/n_per_row;
-
-    const int64_t nb = n_per_row/QK4_1;
-    for (int ib = 0; ib < nb; ++ib) {
-        const float * xb = x + QK4_1 * ib;
-        const float * qw = quant_weights + QK4_1 * ib;
-        for (int j = 0; j < QK4_1; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]);
-        float min;
-        float d = make_qkx3_quants(QK4_1, 15, xb, weight, L, &min, Laux, -0.9f, 0.05f, 36, false);
-        y[ib].d = GGML_FP32_TO_FP16(d);
-        y[ib].m = GGML_FP32_TO_FP16(-min);
-        for (int j = 0; j < 16; ++j) {
-            y[ib].qs[j] = L[j] | (L[j+16] << 4);
-        }
-    }
-}
-
-size_t quantize_q4_1(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    if (!quant_weights) {
-        quantize_row_q4_1_reference(src, dst, (int64_t)nrow*n_per_row);
-        return nrow * ggml_row_size(GGML_TYPE_Q4_1, n_per_row);
-    }
-    size_t row_size = ggml_row_size(GGML_TYPE_Q4_1, n_per_row);
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_q4_1_impl(src, (block_q4_1*)qrow, n_per_row, quant_weights);
-        src += n_per_row;
-        qrow += row_size;
-    }
-    return nrow * row_size;
-}
-
-static void quantize_row_q5_0_impl(const float * restrict x, block_q5_0 * restrict y, int64_t n_per_row, const float * quant_weights) {
-    static_assert(QK5_0 == 32, "QK5_0 must be 32");
-
-    if (!quant_weights) {
-        quantize_row_q5_0_reference(x, y, n_per_row);
-        return;
-    }
-
-    float weight[QK5_0];
-    int8_t L[QK5_0];
-
-    float sum_x2 = 0;
-    for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j];
-    float sigma2 = sum_x2/n_per_row;
-
-    const int64_t nb = n_per_row/QK5_0;
-    for (int ib = 0; ib < nb; ++ib) {
-        const float * xb = x + QK5_0 * ib;
-        const float * qw = quant_weights + QK5_0 * ib;
-        for (int j = 0; j < QK5_0; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]);
-        float d = make_qx_quants(QK5_0, 16, xb, L, 1, weight);
-        y[ib].d = GGML_FP32_TO_FP16(d);
-
-        uint32_t qh = 0;
-
-        for (int j = 0; j < 16; ++j) {
-            const uint8_t xi0 = L[j];
-            const uint8_t xi1 = L[j+16];
-            y[ib].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4);
-
-            // get the 5-th bit and store it in qh at the right position
-            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
-            qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2);
-        }
-
-        memcpy(&y[ib].qh, &qh, sizeof(qh));
-    }
-}
-
-size_t quantize_q5_0(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    if (!quant_weights) {
-        quantize_row_q5_0_reference(src, dst, (int64_t)nrow*n_per_row);
-        return nrow * ggml_row_size(GGML_TYPE_Q5_0, n_per_row);
-    }
-    size_t row_size = ggml_row_size(GGML_TYPE_Q5_0, n_per_row);
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_q5_0_impl(src, (block_q5_0*)qrow, n_per_row, quant_weights);
-        src += n_per_row;
-        qrow += row_size;
-    }
-    return nrow * row_size;
-}
-
-static void quantize_row_q5_1_impl(const float * restrict x, block_q5_1 * restrict y, int64_t n_per_row, const float * quant_weights) {
-    static_assert(QK5_1 == 32, "QK5_1 must be 32");
-
-    if (!quant_weights) {
-        quantize_row_q5_1_reference(x, y, n_per_row);
-        return;
-    }
-
-    float weight[QK5_1];
-    uint8_t L[QK5_1], Laux[QK5_1];
-
-    float sum_x2 = 0;
-    for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j];
-    float sigma2 = sum_x2/n_per_row;
-
-    const int64_t nb = n_per_row/QK5_1;
-    for (int ib = 0; ib < nb; ++ib) {
-        const float * xb = x + QK5_1 * ib;
-        const float * qw = quant_weights + QK5_1 * ib;
-        for (int j = 0; j < QK5_1; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]);
-        float min;
-        float d = make_qkx3_quants(QK5_1, 31, xb, weight, L, &min, Laux, -0.9f, 0.05f, 36, false);
-        y[ib].d = GGML_FP32_TO_FP16(d);
-        y[ib].m = GGML_FP32_TO_FP16(-min);
-
-        uint32_t qh = 0;
-        for (int j = 0; j < 16; ++j) {
-            const uint8_t xi0 = L[j];
-            const uint8_t xi1 = L[j+16];
-            y[ib].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4);
-            // get the 5-th bit and store it in qh at the right position
-            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
-            qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2);
-        }
-        memcpy(&y[ib].qh, &qh, sizeof(qh));
-    }
-}
-
-size_t quantize_q5_1(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    if (!quant_weights) {
-        quantize_row_q5_1_reference(src, dst, (int64_t)nrow*n_per_row);
-        return nrow * ggml_row_size(GGML_TYPE_Q5_1, n_per_row);
-    }
-    size_t row_size = ggml_row_size(GGML_TYPE_Q5_1, n_per_row);
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_q5_1_impl(src, (block_q5_1*)qrow, n_per_row, quant_weights);
-        src += n_per_row;
-        qrow += row_size;
-    }
-    return nrow * row_size;
-}
-
-size_t quantize_q8_0(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    (void)quant_weights; // not used
-    const size_t row_size = ggml_row_size(GGML_TYPE_Q8_0, n_per_row);
-    quantize_row_q8_0_reference(src, dst, (int64_t)nrow*n_per_row);
-    return nrow * row_size;
-}
-
-// ====================== "True" 2-bit (de)-quantization
-
-void dequantize_row_iq2_xxs(const block_iq2_xxs * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    uint32_t aux32[2];
-    const uint8_t * aux8 = (const uint8_t *)aux32;
-
-    for (int i = 0; i < nb; i++) {
-
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-
-        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
-            memcpy(aux32, x[i].qs + 4*ib32, 2*sizeof(uint32_t));
-            const float db = d * (0.5f + (aux32[1] >> 28)) * 0.25f;
-            for (int l = 0; l < 4; ++l) {
-                const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]);
-                const uint8_t  signs = ksigns_iq2xs[(aux32[1] >> 7*l) & 127];
-                for (int j = 0; j < 8; ++j) {
-                    y[j] = db * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
-                }
-                y += 8;
-            }
-        }
-    }
-}
-
-// ====================== 2.3125 bpw (de)-quantization
-
-void dequantize_row_iq2_xs(const block_iq2_xs * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    float db[2];
-
-    for (int i = 0; i < nb; i++) {
-
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-
-        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
-            db[0] = d * (0.5f + (x[i].scales[ib32] & 0xf)) * 0.25f;
-            db[1] = d * (0.5f + (x[i].scales[ib32] >>  4)) * 0.25f;
-            for (int l = 0; l < 4; ++l) {
-                const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (x[i].qs[4*ib32 + l] & 511));
-                const uint8_t  signs = ksigns_iq2xs[x[i].qs[4*ib32 + l] >> 9];
-                for (int j = 0; j < 8; ++j) {
-                    y[j] = db[l/2] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
-                }
-                y += 8;
-            }
-        }
-    }
-}
-
-// ====================== 2.5625 bpw (de)-quantization
-
-void dequantize_row_iq2_s(const block_iq2_s * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    float db[2];
-
-    for (int i = 0; i < nb; i++) {
-
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-        const uint8_t * qs = x[i].qs;
-        const uint8_t * qh = x[i].qh;
-        const uint8_t * signs = qs + QK_K/8;
-
-        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
-            db[0] = d * (0.5f + (x[i].scales[ib32] & 0xf)) * 0.25f;
-            db[1] = d * (0.5f + (x[i].scales[ib32] >>  4)) * 0.25f;
-            for (int l = 0; l < 4; ++l) {
-                const float dl = db[l/2];
-                const uint8_t * grid = (const uint8_t *)(iq2s_grid + (qs[l] | (qh[ib32] << (8-2*l) & 0x300)));
-                for (int j = 0; j < 8; ++j) {
-                    y[j] = dl * grid[j] * (signs[l] & kmask_iq2xs[j] ? -1.f : 1.f);
-                }
-                y += 8;
-            }
-            qs += 4;
-            signs += 4;
-        }
-    }
-}
-
-// ====================== 3.0625 bpw (de)-quantization
-
-void dequantize_row_iq3_xxs(const block_iq3_xxs * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    uint32_t aux32;
-
-    for (int i = 0; i < nb; i++) {
-
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-        const uint8_t * qs = x[i].qs;
-        const uint8_t * scales_and_signs = qs + QK_K/4;
-
-        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
-            memcpy(&aux32, scales_and_signs + 4*ib32, sizeof(uint32_t));
-            const float db = d * (0.5f + (aux32 >> 28)) * 0.5f;
-            for (int l = 0; l < 4; ++l) {
-                const uint8_t  signs = ksigns_iq2xs[(aux32 >> 7*l) & 127];
-                const uint8_t * grid1 = (const uint8_t *)(iq3xxs_grid + qs[2*l+0]);
-                const uint8_t * grid2 = (const uint8_t *)(iq3xxs_grid + qs[2*l+1]);
-                for (int j = 0; j < 4; ++j) {
-                    y[j+0] = db * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
-                    y[j+4] = db * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
-                }
-                y += 8;
-            }
-            qs += 8;
-        }
-    }
-}
-
-// ====================== 3.3125 bpw (de)-quantization
-
-void dequantize_row_iq3_s(const block_iq3_s * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    for (int i = 0; i < nb; i++) {
-
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-        const uint8_t * qs = x[i].qs;
-        const uint8_t * qh = x[i].qh;
-        const uint8_t * signs = x[i].signs;
-
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            const float db1 = d * (1 + 2*(x[i].scales[ib32/2] & 0xf));
-            const float db2 = d * (1 + 2*(x[i].scales[ib32/2] >>  4));
-            for (int l = 0; l < 4; ++l) {
-                const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[0] << (8-2*l)) & 256)));
-                const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[0] << (7-2*l)) & 256)));
-                for (int j = 0; j < 4; ++j) {
-                    y[j+0] = db1 * grid1[j] * (signs[l] & kmask_iq2xs[j+0] ? -1.f : 1.f);
-                    y[j+4] = db1 * grid2[j] * (signs[l] & kmask_iq2xs[j+4] ? -1.f : 1.f);
-                }
-                y += 8;
-            }
-            qs += 8;
-            signs += 4;
-            for (int l = 0; l < 4; ++l) {
-                const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[1] << (8-2*l)) & 256)));
-                const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[1] << (7-2*l)) & 256)));
-                for (int j = 0; j < 4; ++j) {
-                    y[j+0] = db2 * grid1[j] * (signs[l] & kmask_iq2xs[j+0] ? -1.f : 1.f);
-                    y[j+4] = db2 * grid2[j] * (signs[l] & kmask_iq2xs[j+4] ? -1.f : 1.f);
-                }
-                y += 8;
-            }
-            qh += 2;
-            qs += 8;
-            signs += 4;
-        }
-    }
-}
-
-// ====================== 1.5625 bpw (de)-quantization
-
-void dequantize_row_iq1_s(const block_iq1_s * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    for (int i = 0; i < nb; i++) {
-
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-        const uint8_t  * qs = x[i].qs;
-        const uint16_t * qh = x[i].qh;
-
-        for (int ib = 0; ib < QK_K/32; ++ib) {
-            const float dl = d * (2*((qh[ib] >> 12) & 7) + 1);
-            const float delta = qh[ib] & 0x8000 ? -IQ1S_DELTA : IQ1S_DELTA;
-            for (int l = 0; l < 4; ++l) {
-                const int8_t * grid = (const int8_t *)(iq1s_grid + (qs[l] | (((qh[ib] >> 3*l) & 7) << 8)));
-                for (int j = 0; j < 8; ++j) {
-                    y[j] = dl * (grid[j] + delta);
-                }
-                y += 8;
-            }
-            qs += 4;
-        }
-    }
-}
-
-void dequantize_row_iq1_m(const block_iq1_m * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    float delta[4];
-    uint16_t idx[4];
-
-    iq1m_scale_t scale;
-
-    for (int i = 0; i < nb; i++) {
-
-        const uint16_t * sc = (const uint16_t *)x[i].scales;
-        scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-        const float d = GGML_FP16_TO_FP32(scale.f16);
-
-        const uint8_t * qs = x[i].qs;
-        const uint8_t * qh = x[i].qh;
-
-        for (int ib = 0; ib < QK_K/32; ++ib) {
-            const float dl1 = d * (2*((sc[ib/2] >> (6*(ib%2)+0)) & 0x7) + 1);
-            const float dl2 = d * (2*((sc[ib/2] >> (6*(ib%2)+3)) & 0x7) + 1);
-
-            idx[0] = qs[0] | ((qh[0] << 8) & 0x700);
-            idx[1] = qs[1] | ((qh[0] << 4) & 0x700);
-            idx[2] = qs[2] | ((qh[1] << 8) & 0x700);
-            idx[3] = qs[3] | ((qh[1] << 4) & 0x700);
-            delta[0] = qh[0] & 0x08 ? -IQ1S_DELTA : IQ1S_DELTA;
-            delta[1] = qh[0] & 0x80 ? -IQ1S_DELTA : IQ1S_DELTA;
-            delta[2] = qh[1] & 0x08 ? -IQ1S_DELTA : IQ1S_DELTA;
-            delta[3] = qh[1] & 0x80 ? -IQ1S_DELTA : IQ1S_DELTA;
-            for (int l = 0; l < 2; ++l) {
-                const int8_t * grid = (const int8_t *)(iq1s_grid + idx[l]);
-                for (int j = 0; j < 8; ++j) {
-                    y[j] = dl1 * (grid[j] + delta[l]);
-                }
-                y += 8;
-            }
-            for (int l = 2; l < 4; ++l) {
-                const int8_t * grid = (const int8_t *)(iq1s_grid + idx[l]);
-                for (int j = 0; j < 8; ++j) {
-                    y[j] = dl2 * (grid[j] + delta[l]);
-                }
-                y += 8;
-            }
-            qs += 4;
-            qh += 2;
-        }
-    }
-}
-
-static const int8_t kvalues_iq4nl[16] = {-127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113};
-
-void dequantize_row_iq4_nl(const block_iq4_nl * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK4_NL == 0);
-    const int64_t nb = k / QK4_NL;
-
-    for (int i = 0; i < nb; i++) {
-
-        const uint8_t * qs = x[i].qs;
-
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-        for (int j = 0; j < QK4_NL/2; ++j) {
-            y[j+       0] = d * kvalues_iq4nl[qs[j] & 0xf];
-            y[j+QK4_NL/2] = d * kvalues_iq4nl[qs[j] >>  4];
-        }
-        y  += QK4_NL;
-        qs += QK4_NL/2;
-    }
-}
-
-void dequantize_row_iq4_xs(const block_iq4_xs * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    for (int i = 0; i < nb; i++) {
-
-        const uint8_t * qs = x[i].qs;
-
-        const float d = GGML_FP16_TO_FP32(x[i].d);
-
-        for (int ib = 0; ib < QK_K/32; ++ib) {
-            const int ls = ((x[i].scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((x[i].scales_h >> 2*ib) & 3) << 4);
-            const float dl = d * (ls - 32);
-            for (int j = 0; j < 16; ++j) {
-                y[j+ 0] = dl * kvalues_iq4nl[qs[j] & 0xf];
-                y[j+16] = dl * kvalues_iq4nl[qs[j] >>  4];
-            }
-            y  += 32;
-            qs += 16;
-        }
-    }
-}
-
-//===================================== Q8_K ==============================================
-
-void quantize_row_q8_K_reference(const float * restrict x, block_q8_K * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    for (int i = 0; i < nb; i++) {
-
-        float max = 0;
-        float amax = 0;
-        for (int j = 0; j < QK_K; ++j) {
-            float ax = fabsf(x[j]);
-            if (ax > amax) {
-                amax = ax; max = x[j];
-            }
-        }
-        if (!amax) {
-            y[i].d = 0;
-            memset(y[i].qs, 0, QK_K);
-            x += QK_K;
-            continue;
-        }
-        //const float iscale = -128.f/max;
-        // We need this change for IQ2_XXS, else the AVX implementation becomes very awkward
-        const float iscale = -127.f/max;
-        for (int j = 0; j < QK_K; ++j) {
-            int v = nearest_int(iscale*x[j]);
-            y[i].qs[j] = MIN(127, v);
-        }
-        for (int j = 0; j < QK_K/16; ++j) {
-            int sum = 0;
-            for (int ii = 0; ii < 16; ++ii) {
-                sum += y[i].qs[j*16 + ii];
-            }
-            y[i].bsums[j] = sum;
-        }
-        y[i].d = 1/iscale;
-        x += QK_K;
-    }
-}
-
-void dequantize_row_q8_K(const block_q8_K * restrict x, float * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    const int64_t nb = k / QK_K;
-
-    for (int i = 0; i < nb; i++) {
-        for (int j = 0; j < QK_K; ++j) {
-            *y++ = x[i].d * x[i].qs[j];
-        }
-    }
-}
-
-void quantize_row_q8_K(const float * restrict x, void * restrict y, int64_t k) {
-    quantize_row_q8_K_reference(x, y, k);
-}
-
-//===================================== Dot ptoducts =================================
-
-//
-// Helper functions
-//
-#if __AVX__ || __AVX2__ || __AVX512F__
-
-// shuffles to pick the required scales in dot products
-static inline __m256i get_scale_shuffle_q3k(int i) {
-    static const uint8_t k_shuffle[128] = {
-         0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,     2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
-         4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5,     6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7,
-         8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,    10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,
-        12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,    14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,
-    };
-    return _mm256_loadu_si256((const __m256i*)k_shuffle + i);
-}
-static inline __m256i get_scale_shuffle_k4(int i) {
-    static const uint8_t k_shuffle[256] = {
-         0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
-         2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
-         4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5,
-         6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7,
-         8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
-        10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,
-        12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,
-        14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15
-    };
-    return _mm256_loadu_si256((const __m256i*)k_shuffle + i);
-}
-static inline __m128i get_scale_shuffle(int i) {
-    static const uint8_t k_shuffle[128] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
-         2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
-         4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
-         6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
-         8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10,10,10, 11,11,11,11,11,11,11,11,
-        12,12,12,12,12,12,12,12, 13,13,13,13,13,13,13,13,
-        14,14,14,14,14,14,14,14, 15,15,15,15,15,15,15,15
-    };
-    return _mm_loadu_si128((const __m128i*)k_shuffle + i);
-}
-#elif defined(__loongarch_asx)
-// shuffles to pick the required scales in dot products
-static inline __m256i get_scale_shuffle_q3k(int i) {
-    static const uint8_t k_shuffle[128] = {
-         0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,     2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
-         4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5,     6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7,
-         8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,    10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,
-        12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,    14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,
-    };
-    return __lasx_xvld((const __m256i*)k_shuffle + i, 0);
-}
-static inline __m256i get_scale_shuffle_k4(int i) {
-    static const uint8_t k_shuffle[256] = {
-         0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
-         2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
-         4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5,
-         6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7,
-         8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
-        10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,
-        12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,
-        14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15
-    };
-    return __lasx_xvld((const __m256i*)k_shuffle + i, 0);
-}
-static inline __m128i get_scale_shuffle(int i) {
-    static const uint8_t k_shuffle[128] = {
-         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
-         2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
-         4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
-         6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
-         8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
-        10,10,10,10,10,10,10,10, 11,11,11,11,11,11,11,11,
-        12,12,12,12,12,12,12,12, 13,13,13,13,13,13,13,13,
-        14,14,14,14,14,14,14,14, 15,15,15,15,15,15,15,15
-    };
-    return __lsx_vld((const __m128i*)k_shuffle + i, 0);
-}
-#endif
-
-void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    const int qk = QK8_0;
-    const int nb = n / qk;
-
-    assert(n % qk == 0);
-#if defined(__ARM_FEATURE_MATMUL_INT8)
-    assert((nrc == 2) || (nrc == 1));
-#else
-    assert(nrc == 1);
-#endif
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_q4_0 * restrict x = vx;
-    const block_q8_0 * restrict y = vy;
-
-#if defined(__ARM_FEATURE_MATMUL_INT8)
-    if (nrc == 2) {
-        const block_q4_0 * restrict vx0 = vx;
-        const block_q4_0 * restrict vx1 = (const block_q4_0 *) ((const uint8_t*)vx + bx);
-        const block_q8_0 * restrict vy0 = vy;
-        const block_q8_0 * restrict vy1 = (const block_q8_0 *) ((const uint8_t*)vy + by);
-
-        float32x4_t sumv0 = vdupq_n_f32(0.0f);
-
-        for (int i = 0; i < nb; i++) {
-            const block_q4_0 * restrict b_x0 = &vx0[i];
-            const block_q4_0 * restrict b_x1 = &vx1[i];
-            const block_q8_0 * restrict b_y0 = &vy0[i];
-            const block_q8_0 * restrict b_y1 = &vy1[i];
-
-            const uint8x16_t m4b = vdupq_n_u8(0x0F);
-            const int8x16_t  s8b = vdupq_n_s8(0x8);
-
-            const uint8x16_t v0_0 = vld1q_u8(b_x0->qs);
-            const uint8x16_t v0_1 = vld1q_u8(b_x1->qs);
-
-            // 4-bit -> 8-bit
-            const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
-            const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
-            const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
-            const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
-
-            // sub 8
-            const int8x16_t x0_l = vsubq_s8(v0_0l, s8b);
-            const int8x16_t x0_h = vsubq_s8(v0_0h, s8b);
-            const int8x16_t x1_l = vsubq_s8(v0_1l, s8b);
-            const int8x16_t x1_h = vsubq_s8(v0_1h, s8b);
-
-            // load y
-            const int8x16_t y0_l = vld1q_s8(b_y0->qs);
-            const int8x16_t y0_h = vld1q_s8(b_y0->qs + 16);
-            const int8x16_t y1_l = vld1q_s8(b_y1->qs);
-            const int8x16_t y1_h = vld1q_s8(b_y1->qs + 16);
-
-            float32_t _scale[4] = { GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y0->d),
-                                    GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y1->d),
-                                    GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y0->d),
-                                    GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y1->d)};
-
-            float32x4_t scale = vld1q_f32(_scale);
-
-            int8x16_t l0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
-            int8x16_t l1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
-
-            int8x16_t l2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
-            int8x16_t l3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
-
-            int8x16_t r0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
-            int8x16_t r1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
-
-            int8x16_t r2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
-            int8x16_t r3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
-
-            sumv0 = vmlaq_f32(sumv0,(vcvtq_f32_s32(vmmlaq_s32((vmmlaq_s32((vmmlaq_s32((vmmlaq_s32(vdupq_n_s32(0), l0, r0)),
-                                                                                l1, r1)), l2, r2)), l3, r3))), scale);
-        }
-        float32x4_t sumv1 = vextq_f32(sumv0, sumv0, 2);
-        float32x4_t sumv2 = vzip1q_f32(sumv0, sumv1);
-
-        vst1_f32(s, vget_low_f32(sumv2));
-        vst1_f32(s + bs, vget_high_f32(sumv2));
-        return;
-    }
-#endif
-#if defined(__ARM_FEATURE_SVE)
-    const svbool_t ptrueh = svptrue_pat_b8(SV_VL16);
-    const svbool_t ptruel = svnot_b_z(svptrue_b8(), ptrueh);
-
-    svfloat32_t sumv0 = svdup_n_f32(0.0f);
-    svfloat32_t sumv1 = svdup_n_f32(0.0f);
-
-    assert(nb % 2 == 0); // TODO: handle odd nb
-
-    for (int i = 0; i < nb; i += 2) {
-        const block_q4_0 * restrict x0 = &x[i + 0];
-        const block_q4_0 * restrict x1 = &x[i + 1];
-        const block_q8_0 * restrict y0 = &y[i + 0];
-        const block_q8_0 * restrict y1 = &y[i + 1];
-
-        // load x
-        const svuint8_t qx0r = svld1rq_u8(svptrue_b8(), x0->qs);
-        const svuint8_t qx1r = svld1rq_u8(svptrue_b8(), x1->qs);
-
-        // 4-bit -> 8-bit
-        const svint8_t qx0 = svreinterpret_s8_u8(svlsr_n_u8_m(ptruel, svand_n_u8_m(ptrueh, qx0r, 0x0F), 0x04));
-        const svint8_t qx1 = svreinterpret_s8_u8(svlsr_n_u8_m(ptruel, svand_n_u8_m(ptrueh, qx1r, 0x0F), 0x04));
-
-        // sub 8
-        const svint8_t qx0s = svsub_n_s8_x(svptrue_b8(), qx0, 8);
-        const svint8_t qx1s = svsub_n_s8_x(svptrue_b8(), qx1, 8);
-
-        // load y
-        const svint8_t qy0 = svld1_s8(svptrue_b8(), y0->qs);
-        const svint8_t qy1 = svld1_s8(svptrue_b8(), y1->qs);
-
-        // dot product
-        sumv0 = svmla_n_f32_x(svptrue_b32(), sumv0, svcvt_f32_s32_x(svptrue_b32(), svdot_s32(svdup_n_s32(0), qx0s, qy0)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
-        sumv1 = svmla_n_f32_x(svptrue_b32(), sumv1, svcvt_f32_s32_x(svptrue_b32(), svdot_s32(svdup_n_s32(0), qx1s, qy1)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
-    }
-
-    *s = svaddv_f32(svptrue_b32(), svadd_f32_x(svptrue_b32(), sumv0, sumv1));
-#elif defined(__ARM_NEON)
-    float32x4_t sumv0 = vdupq_n_f32(0.0f);
-    float32x4_t sumv1 = vdupq_n_f32(0.0f);
-
-    assert(nb % 2 == 0); // TODO: handle odd nb
-
-    for (int i = 0; i < nb; i += 2) {
-        const block_q4_0 * restrict x0 = &x[i + 0];
-        const block_q4_0 * restrict x1 = &x[i + 1];
-        const block_q8_0 * restrict y0 = &y[i + 0];
-        const block_q8_0 * restrict y1 = &y[i + 1];
-
-        const uint8x16_t m4b = vdupq_n_u8(0x0F);
-        const int8x16_t  s8b = vdupq_n_s8(0x8);
-
-        const uint8x16_t v0_0 = vld1q_u8(x0->qs);
-        const uint8x16_t v0_1 = vld1q_u8(x1->qs);
-
-        // 4-bit -> 8-bit
-        const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
-        const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
-        const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
-        const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
-
-        // sub 8
-        const int8x16_t v0_0ls = vsubq_s8(v0_0l, s8b);
-        const int8x16_t v0_0hs = vsubq_s8(v0_0h, s8b);
-        const int8x16_t v0_1ls = vsubq_s8(v0_1l, s8b);
-        const int8x16_t v0_1hs = vsubq_s8(v0_1h, s8b);
-
-        // load y
-        const int8x16_t v1_0l = vld1q_s8(y0->qs);
-        const int8x16_t v1_0h = vld1q_s8(y0->qs + 16);
-        const int8x16_t v1_1l = vld1q_s8(y1->qs);
-        const int8x16_t v1_1h = vld1q_s8(y1->qs + 16);
-
-        // dot product into int32x4_t
-        const int32x4_t p_0 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_0ls, v1_0l), v0_0hs, v1_0h);
-        const int32x4_t p_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_1ls, v1_1l), v0_1hs, v1_1h);
-
-        sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
-        sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
-    }
-
-    *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1);
-#elif defined(__AVX2__)
-    // Initialize accumulator with zeros
-    __m256 acc = _mm256_setzero_ps();
-
-    // Main loop
-    for (int i = 0; i < nb; ++i) {
-        /* Compute combined scale for the block */
-        const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) );
-
-        __m256i qx = bytes_from_nibbles_32(x[i].qs);
-
-        // Now we have a vector with bytes in [ 0 .. 15 ] interval. Offset them into [ -8 .. +7 ] interval.
-        const __m256i off = _mm256_set1_epi8( 8 );
-        qx = _mm256_sub_epi8( qx, off );
-
-        __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs);
-
-        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
-
-        /* Multiply q with scale and accumulate */
-        acc = _mm256_fmadd_ps( d, q, acc );
-    }
-
-    *s = hsum_float_8(acc);
-#elif defined(__AVX__)
-    // Initialize accumulator with zeros
-    __m256 acc = _mm256_setzero_ps();
-
-    // Main loop
-    for (int i = 0; i < nb; ++i) {
-        // Compute combined scale for the block
-        const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) );
-
-        const __m128i lowMask = _mm_set1_epi8(0xF);
-        const __m128i off = _mm_set1_epi8(8);
-
-        const __m128i tmp = _mm_loadu_si128((const __m128i *)x[i].qs);
-
-        __m128i bx_0 = _mm_and_si128(lowMask, tmp);
-        __m128i by_0 = _mm_loadu_si128((const __m128i *)y[i].qs);
-        bx_0 = _mm_sub_epi8(bx_0, off);
-        const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0);
-
-        bx_0 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp, 4));
-        by_0 = _mm_loadu_si128((const __m128i *)(y[i].qs + 16));
-        bx_0 = _mm_sub_epi8(bx_0, off);
-        const __m128i i32_1 = mul_sum_i8_pairs(bx_0, by_0);
-
-        // Convert int32_t to float
-        __m256 p = _mm256_cvtepi32_ps(MM256_SET_M128I(i32_0, i32_1));
-
-        // Apply the scale, and accumulate
-        acc = _mm256_add_ps(_mm256_mul_ps( d, p ), acc);
-    }
-
-    *s = hsum_float_8(acc);
-#elif defined(__SSSE3__)
-    // set constants
-    const __m128i lowMask = _mm_set1_epi8(0xF);
-    const __m128i off = _mm_set1_epi8(8);
-
-    // Initialize accumulator with zeros
-    __m128 acc_0 = _mm_setzero_ps();
-    __m128 acc_1 = _mm_setzero_ps();
-    __m128 acc_2 = _mm_setzero_ps();
-    __m128 acc_3 = _mm_setzero_ps();
-
-    // First round without accumulation
-    {
-        _mm_prefetch(&x[0] + sizeof(block_q4_0), _MM_HINT_T0);
-        _mm_prefetch(&y[0] + sizeof(block_q8_0), _MM_HINT_T0);
-
-        // Compute combined scale for the block 0 and 1
-        const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[0].d) * GGML_FP16_TO_FP32(y[0].d) );
-
-        const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[0].qs);
-
-        __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1);
-        __m128i by_0 = _mm_loadu_si128((const __m128i *)y[0].qs);
-        bx_0 = _mm_sub_epi8(bx_0, off);
-        const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0);
-
-        __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4));
-        __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[0].qs + 16));
-        bx_1 = _mm_sub_epi8(bx_1, off);
-        const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1);
-
-        _mm_prefetch(&x[1] + sizeof(block_q4_0), _MM_HINT_T0);
-        _mm_prefetch(&y[1] + sizeof(block_q8_0), _MM_HINT_T0);
-
-        // Compute combined scale for the block 2 and 3
-        const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[1].d) * GGML_FP16_TO_FP32(y[1].d) );
-
-        const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[1].qs);
-
-        __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3);
-        __m128i by_2 = _mm_loadu_si128((const __m128i *)y[1].qs);
-        bx_2 = _mm_sub_epi8(bx_2, off);
-        const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2);
-
-        __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4));
-        __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[1].qs + 16));
-        bx_3 = _mm_sub_epi8(bx_3, off);
-        const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3);
-
-        // Convert int32_t to float
-        __m128 p0 = _mm_cvtepi32_ps(i32_0);
-        __m128 p1 = _mm_cvtepi32_ps(i32_1);
-        __m128 p2 = _mm_cvtepi32_ps(i32_2);
-        __m128 p3 = _mm_cvtepi32_ps(i32_3);
-
-        // Apply the scale
-        acc_0 = _mm_mul_ps( d_0_1, p0 );
-        acc_1 = _mm_mul_ps( d_0_1, p1 );
-        acc_2 = _mm_mul_ps( d_2_3, p2 );
-        acc_3 = _mm_mul_ps( d_2_3, p3 );
-    }
-
-    assert(nb % 2 == 0); // TODO: handle odd nb
-
-    // Main loop
-    for (int i = 2; i < nb; i+=2) {
-        _mm_prefetch(&x[i] + sizeof(block_q4_0), _MM_HINT_T0);
-        _mm_prefetch(&y[i] + sizeof(block_q8_0), _MM_HINT_T0);
-
-        // Compute combined scale for the block 0 and 1
-        const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) );
-
-        const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[i].qs);
-
-        __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1);
-        __m128i by_0 = _mm_loadu_si128((const __m128i *)y[i].qs);
-        bx_0 = _mm_sub_epi8(bx_0, off);
-        const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0);
-
-        __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4));
-        __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[i].qs + 16));
-        bx_1 = _mm_sub_epi8(bx_1, off);
-        const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1);
-
-        _mm_prefetch(&x[i] + 2 * sizeof(block_q4_0), _MM_HINT_T0);
-        _mm_prefetch(&y[i] + 2 * sizeof(block_q8_0), _MM_HINT_T0);
-
-        // Compute combined scale for the block 2 and 3
-        const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i + 1].d) * GGML_FP16_TO_FP32(y[i + 1].d) );
-
-        const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[i + 1].qs);
-
-        __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3);
-        __m128i by_2 = _mm_loadu_si128((const __m128i *)y[i + 1].qs);
-        bx_2 = _mm_sub_epi8(bx_2, off);
-        const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2);
-
-        __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4));
-        __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[i + 1].qs + 16));
-        bx_3 = _mm_sub_epi8(bx_3, off);
-        const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3);
-
-        // Convert int32_t to float
-        __m128 p0 = _mm_cvtepi32_ps(i32_0);
-        __m128 p1 = _mm_cvtepi32_ps(i32_1);
-        __m128 p2 = _mm_cvtepi32_ps(i32_2);
-        __m128 p3 = _mm_cvtepi32_ps(i32_3);
-
-        // Apply the scale
-        __m128 p0_d = _mm_mul_ps( d_0_1, p0 );
-        __m128 p1_d = _mm_mul_ps( d_0_1, p1 );
-        __m128 p2_d = _mm_mul_ps( d_2_3, p2 );
-        __m128 p3_d = _mm_mul_ps( d_2_3, p3 );
-
-        // Acummulate
-        acc_0 = _mm_add_ps(p0_d, acc_0);
-        acc_1 = _mm_add_ps(p1_d, acc_1);
-        acc_2 = _mm_add_ps(p2_d, acc_2);
-        acc_3 = _mm_add_ps(p3_d, acc_3);
-    }
-
-    *s = hsum_float_4x4(acc_0, acc_1, acc_2, acc_3);
-#elif defined(__riscv_v_intrinsic)
-    float sumf = 0.0;
-
-    size_t vl = __riscv_vsetvl_e8m1(qk/2);
-
-    for (int i = 0; i < nb; i++) {
-        // load elements
-        vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl);
-
-        vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl);
-        vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl);
-
-        // mask and store lower part of x, and then upper part
-        vuint8mf2_t x_a = __riscv_vand_vx_u8mf2(tx, 0x0F, vl);
-        vuint8mf2_t x_l = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl);
-
-        vint8mf2_t x_ai = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a);
-        vint8mf2_t x_li = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l);
-
-        // subtract offset
-        vint8mf2_t v0 = __riscv_vsub_vx_i8mf2(x_ai, 8, vl);
-        vint8mf2_t v1 = __riscv_vsub_vx_i8mf2(x_li, 8, vl);
-
-        vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl);
-        vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl);
-
-        vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl);
-
-        vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl);
-        vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl);
-
-        int sumi = __riscv_vmv_x_s_i32m1_i32(vs2);
-
-        sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d);
-    }
-
-    *s = sumf;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0xF);
-    const vector signed int v0 = vec_splats((int32_t)0);
-    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
-    const vector signed char v8 = vec_splats((signed char)0x8);
-
-    vector float vsumf0 = vec_splats(0.0f);
-
-#pragma GCC unroll 8
-    for (int i = 0; i < nb; i++) {
-        __builtin_prefetch(x[i].qs, 0, 1);
-        __builtin_prefetch(y[i].qs, 0, 1);
-
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[i].d));
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed char qxs = (vector signed char)vec_xl( 0, x[i].qs);
-        vector signed char q8y0 = vec_xl( 0, y[i].qs);
-        vector signed char q8y1 = vec_xl(16, y[i].qs);
-
-        vector signed char q4x0 = vec_and(qxs, lowMask);
-        vector signed char q4x1 = vec_sr(qxs, v4);
-
-        q4x0 = vec_sub(q4x0, v8);
-        q4x1 = vec_sub(q4x1, v8);
-
-        vector signed short qv0 = vec_add(vec_mule(q4x0, q8y0), vec_mulo(q4x0, q8y0));
-        vector signed short qv1 = vec_add(vec_mule(q4x1, q8y1), vec_mulo(q4x1, q8y1));
-
-        vector signed int vsumi0 = v0;
-
-        vsumi0 = vec_sum4s(qv0, vsumi0);
-        vsumi0 = vec_sum4s(qv1, vsumi0);
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-    }
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-    // Initialize accumulator with zeros
-    __m256 acc = (__m256)__lasx_xvldi(0);
-
-    // Main loop
-    for (int i = 0; i < nb; ++i) {
-        /* Compute combined scale for the block */
-        const __m256 d = __lasx_xvreplfr2vr_s( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) );
-
-        __m256i qx = bytes_from_nibbles_32(x[i].qs);
-
-        // Now we have a vector with bytes in [ 0 .. 15 ] interval. Offset them into [ -8 .. +7 ] interval.
-        const __m256i off = __lasx_xvreplgr2vr_b( 8 );
-        qx = __lasx_xvsub_b( qx, off );
-
-        __m256i qy = __lasx_xvld((const __m256i *)y[i].qs, 0);
-
-        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
-
-        /* Multiply q with scale and accumulate */
-        acc = __lasx_xvfmadd_s( d, q, acc );
-    }
-
-    *s = hsum_float_8(acc);
-#elif defined(__loongarch_sx)
-    // set constants
-    const __m128i low_mask = __lsx_vreplgr2vr_b(0xF);
-    const __m128i off = __lsx_vreplgr2vr_b(8);
-
-    // Initialize accumulator with zeros
-    __m128 acc_0 = __lsx_vldi(0);
-    __m128 acc_1 = __lsx_vldi(0);
-    __m128 acc_2 = __lsx_vldi(0);
-    __m128 acc_3 = __lsx_vldi(0);
-
-    // First round without accumulation
-    {
-        _mm_prefetch(&x[0] + sizeof(block_q4_0), _MM_HINT_T0);
-        _mm_prefetch(&y[0] + sizeof(block_q8_0), _MM_HINT_T0);
-
-        // Compute combined scale for the block 0 and 1
-        const __m128 d_0_1 = __lsx_vreplgr2vr_w( GGML_FP16_TO_FP32(x[0].d) * GGML_FP16_TO_FP32(y[0].d) );
-
-        const __m128i tmp_0_1 = __lsx_vld((const __m128i *)x[0].qs, 0);
-
-        __m128i bx_0 = __lsx_vand_v(low_mask, tmp_0_1);
-        __m128i by_0 = __lsx_vld((const __m128i *)y[0].qs, 0);
-        bx_0 = __lsx_vsub_b(bx_0, off);
-        const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0);
-
-        __m128i bx_1 = __lsx_vand_v(low_mask, __lsx_vsrli_d(tmp_0_1, 4));
-        __m128i by_1 = __lsx_vld((const __m128i *)(y[0].qs + 16), 0);
-        bx_1 = __lsx_vsub_b(bx_1, off);
-        const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1);
-
-        // Compute combined scale for the block 2 and 3
-        const __m128 d_2_3 = __lsx_vreplgr2vr_w( GGML_FP16_TO_FP32(x[1].d) * GGML_FP16_TO_FP32(y[1].d) );
-
-        const __m128i tmp_2_3 = __lsx_vld((const __m128i *)x[1].qs, 0);
-
-        __m128i bx_2 = __lsx_vand_v(low_mask, tmp_2_3);
-        __m128i by_2 = __lsx_vld((const __m128i *)y[1].qs, 0);
-        bx_2 = __lsx_vsub_b(bx_2, off);
-        const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2);
-
-        __m128i bx_3 = __lsx_vand_v(low_mask, __lsx_vsrli_d(tmp_2_3, 4));
-        __m128i by_3 = __lsx_vld((const __m128i *)(y[1].qs + 16), 0);
-        bx_3 = __lsx_vsub_b(bx_3, off);
-        const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3);
-
-        // Convert int32_t to float
-        __m128 p0 = __lsx_vffint_s_w(i32_0);
-        __m128 p1 = __lsx_vffint_s_w(i32_1);
-        __m128 p2 = __lsx_vffint_s_w(i32_2);
-        __m128 p3 = __lsx_vffint_s_w(i32_3);
-
-        // Apply the scale
-        acc_0 = __lsx_vfmul_s( d_0_1, p0 );
-        acc_1 = __lsx_vfmul_s( d_0_1, p1 );
-        acc_2 = __lsx_vfmul_s( d_2_3, p2 );
-        acc_3 = __lsx_vfmul_s( d_2_3, p3 );
-    }
-
-    assert(nb % 2 == 0); // TODO: handle odd nb
-
-    // Main loop
-    for (int i = 2; i < nb; i+=2) {
-
-        // Compute combined scale for the block 0 and 1
-        const __m128 d_0_1 = __lsx_vreplgr2vr_w( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) );
-
-        const __m128i tmp_0_1 = __lsx_vld((const __m128i *)x[i].qs, 0);
-
-        __m128i bx_0 = __lsx_vand_v(low_mask, tmp_0_1);
-        __m128i by_0 = __lsx_vld((const __m128i *)y[i].qs, 0);
-        bx_0 = __lsx_vsub_b(bx_0, off);
-        const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0);
-
-        __m128i bx_1 = __lsx_vand_v(low_mask, __lsx_vsrli_d(tmp_0_1, 4));
-        __m128i by_1 = __lsx_vld((const __m128i *)(y[i].qs + 16), 0);
-        bx_1 = __lsx_vsub_b(bx_1, off);
-        const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1);
-
-        //_mm_prefetch(&x[i] + 2 * sizeof(block_q4_0), _MM_HINT_T0);
-        //_mm_prefetch(&y[i] + 2 * sizeof(block_q8_0), _MM_HINT_T0);
-
-        // Compute combined scale for the block 2 and 3
-        const __m128 d_2_3 = __lsx_vreplgr2vr_w( GGML_FP16_TO_FP32(x[i + 1].d) * GGML_FP16_TO_FP32(y[i + 1].d) );
-
-        const __m128i tmp_2_3 = __lsx_vld((const __m128i *)x[i + 1].qs, 0);
-
-        __m128i bx_2 = __lsx_vand_v(low_mask, tmp_2_3);
-        __m128i by_2 = __lsx_vld((const __m128i *)y[i + 1].qs, 0);
-        bx_2 = __lsx_vsub_b(bx_2, off);
-        const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2);
-
-        __m128i bx_3 = __lsx_vand_v(low_mask, __lsx_vsrli_d(tmp_2_3, 4));
-        __m128i by_3 = __lsx_vld((const __m128i *)(y[i + 1].qs + 16), 0);
-        bx_3 = __lsx_vsub_b(bx_3, off);
-        const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3);
-
-        // Convert int32_t to float
-        __m128 p0 = __lsx_vffint_s_w(i32_0);
-        __m128 p1 = __lsx_vffint_s_w(i32_1);
-        __m128 p2 = __lsx_vffint_s_w(i32_2);
-        __m128 p3 = __lsx_vffint_s_w(i32_3);
-
-        // Apply the scale
-        __m128 p0_d = __lsx_vfmul_s( d_0_1, p0 );
-        __m128 p1_d = __lsx_vfmul_s( d_0_1, p1 );
-        __m128 p2_d = __lsx_vfmul_s( d_2_3, p2 );
-        __m128 p3_d = __lsx_vfmul_s( d_2_3, p3 );
-
-        // Acummulate
-        acc_0 = __lsx_vfadd_s(p0_d, acc_0);
-        acc_1 = __lsx_vfadd_s(p1_d, acc_1);
-        acc_2 = __lsx_vfadd_s(p2_d, acc_2);
-        acc_3 = __lsx_vfadd_s(p3_d, acc_3);
-    }
-
-    *s = hsum_float_4x4(acc_0, acc_1, acc_2, acc_3);
-
-#else
-    // scalar
-    float sumf = 0.0;
-
-    for (int i = 0; i < nb; i++) {
-        int sumi = 0;
-
-        for (int j = 0; j < qk/2; ++j) {
-            const int v0 = (x[i].qs[j] & 0x0F) - 8;
-            const int v1 = (x[i].qs[j] >>   4) - 8;
-
-            sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]);
-        }
-
-        sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d);
-    }
-
-    *s = sumf;
-#endif
-}
-
-void ggml_vec_dot_q4_1_q8_1(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    const int qk = QK8_1;
-    const int nb = n / qk;
-
-    assert(n % qk == 0);
-#if defined(__ARM_FEATURE_MATMUL_INT8)
-    assert((nrc == 2) || (nrc == 1));
-#else
-    assert(nrc == 1);
-#endif
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_q4_1 * restrict x = vx;
-    const block_q8_1 * restrict y = vy;
-
-#if defined(__ARM_FEATURE_MATMUL_INT8)
-    if (nrc == 2) {
-        const block_q4_1 * restrict vx0 = vx;
-        const block_q4_1 * restrict vx1 = (const block_q4_1 *) ((const uint8_t*)vx + bx);
-        const block_q8_1 * restrict vy0 = vy;
-        const block_q8_1 * restrict vy1 = (const block_q8_1 *) ((const uint8_t*)vy + by);
-
-        float32x4_t sumv0 = vdupq_n_f32(0.0f);
-        float32x4_t summs0 = vdupq_n_f32(0.0f);
-
-        for (int i = 0; i < nb; i++) {
-            const block_q4_1 * restrict b_x0 = &vx0[i];
-            const block_q4_1 * restrict b_x1 = &vx1[i];
-            const block_q8_1 * restrict b_y0 = &vy0[i];
-            const block_q8_1 * restrict b_y1 = &vy1[i];
-
-            float32_t summs_t[4] = {GGML_FP16_TO_FP32(b_x0->m) * GGML_FP16_TO_FP32(b_y0->s),
-                                    GGML_FP16_TO_FP32(b_x1->m) * GGML_FP16_TO_FP32(b_y0->s),
-                                    GGML_FP16_TO_FP32(b_x0->m) * GGML_FP16_TO_FP32(b_y1->s),
-                                    GGML_FP16_TO_FP32(b_x1->m) * GGML_FP16_TO_FP32(b_y1->s)};
-            summs0 = vaddq_f32(summs0, vld1q_f32(summs_t));
-
-            const uint8x16_t m4b = vdupq_n_u8(0x0F);
-
-            const uint8x16_t v0_0 = vld1q_u8(b_x0->qs);
-            const uint8x16_t v0_1 = vld1q_u8(b_x1->qs);
-
-            // 4-bit -> 8-bit
-            const int8x16_t x0_l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
-            const int8x16_t x0_h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
-            const int8x16_t x1_l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
-            const int8x16_t x1_h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
-
-            // load y
-            const int8x16_t y0_l = vld1q_s8(b_y0->qs);
-            const int8x16_t y0_h = vld1q_s8(b_y0->qs + 16);
-            const int8x16_t y1_l = vld1q_s8(b_y1->qs);
-            const int8x16_t y1_h = vld1q_s8(b_y1->qs + 16);
-
-            // mmla into int32x4_t
-            float32_t _scale[4] = {GGML_FP16_TO_FP32(b_x0->d)*b_y0->d,
-                                   GGML_FP16_TO_FP32(b_x0->d)*b_y1->d,
-                                   GGML_FP16_TO_FP32(b_x1->d)*b_y0->d,
-                                   GGML_FP16_TO_FP32(b_x1->d)*b_y1->d};
-            float32x4_t scale = vld1q_f32(_scale);
-
-            int8x16_t l0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
-            int8x16_t l1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
-
-            int8x16_t l2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
-            int8x16_t l3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
-
-            int8x16_t r0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
-            int8x16_t r1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
-
-            int8x16_t r2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
-            int8x16_t r3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
-            sumv0 = vmlaq_f32(sumv0,(vcvtq_f32_s32(vmmlaq_s32((vmmlaq_s32((vmmlaq_s32((vmmlaq_s32(vdupq_n_s32(0), l0, r0)),
-                                                                                l1, r1)), l2, r2)), l3, r3))), scale);
-        }
-
-        float32x4_t sumv1 = vextq_f32(sumv0, sumv0, 2);
-        float32x4_t sumv2 = vzip1q_f32(sumv0, sumv1);
-        sumv2 = vaddq_f32(sumv2, summs0);
-
-        vst1_f32(s, vget_low_f32(sumv2));
-        vst1_f32(s + bs, vget_high_f32(sumv2));
-        return;
-    }
-#endif
-    // TODO: add WASM SIMD
-#if defined(__ARM_NEON)
-    float32x4_t sumv0 = vdupq_n_f32(0.0f);
-    float32x4_t sumv1 = vdupq_n_f32(0.0f);
-
-    float summs = 0;
-
-    assert(nb % 2 == 0); // TODO: handle odd nb
-
-    for (int i = 0; i < nb; i += 2) {
-        const block_q4_1 * restrict x0 = &x[i + 0];
-        const block_q4_1 * restrict x1 = &x[i + 1];
-        const block_q8_1 * restrict y0 = &y[i + 0];
-        const block_q8_1 * restrict y1 = &y[i + 1];
-
-        summs += GGML_FP16_TO_FP32(x0->m) * GGML_FP16_TO_FP32(y0->s) + GGML_FP16_TO_FP32(x1->m) * GGML_FP16_TO_FP32(y1->s);
-
-        const uint8x16_t m4b = vdupq_n_u8(0x0F);
-
-        const uint8x16_t v0_0 = vld1q_u8(x0->qs);
-        const uint8x16_t v0_1 = vld1q_u8(x1->qs);
-
-        // 4-bit -> 8-bit
-        const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
-        const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
-        const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
-        const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
-
-        // load y
-        const int8x16_t v1_0l = vld1q_s8(y0->qs);
-        const int8x16_t v1_0h = vld1q_s8(y0->qs + 16);
-        const int8x16_t v1_1l = vld1q_s8(y1->qs);
-        const int8x16_t v1_1h = vld1q_s8(y1->qs + 16);
-
-        // dot product into int32x4_t
-        const int32x4_t p_0 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_0l, v1_0l), v0_0h, v1_0h);
-        const int32x4_t p_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_1l, v1_1l), v0_1h, v1_1h);
-
-        sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
-        sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
-    }
-
-    *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs;
-#elif defined(__AVX2__) || defined(__AVX__)
-    // Initialize accumulator with zeros
-    __m256 acc = _mm256_setzero_ps();
-
-    float summs = 0;
-
-    // Main loop
-    for (int i = 0; i < nb; ++i) {
-        const float d0 = GGML_FP16_TO_FP32(x[i].d);
-        const float d1 = GGML_FP16_TO_FP32(y[i].d);
-
-        summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s);
-
-        const __m256 d0v = _mm256_set1_ps( d0 );
-        const __m256 d1v = _mm256_set1_ps( d1 );
-
-        // Compute combined scales
-        const __m256 d0d1 = _mm256_mul_ps( d0v, d1v );
-
-        // Load 16 bytes, and unpack 4 bit fields into bytes, making 32 bytes
-        const __m256i qx = bytes_from_nibbles_32(x[i].qs);
-        const __m256i qy = _mm256_loadu_si256( (const __m256i *)y[i].qs );
-
-        const __m256 xy = mul_sum_us8_pairs_float(qx, qy);
-
-        // Accumulate d0*d1*x*y
-#if defined(__AVX2__)
-        acc = _mm256_fmadd_ps( d0d1, xy, acc );
-#else
-        acc = _mm256_add_ps( _mm256_mul_ps( d0d1, xy ), acc );
-#endif
-    }
-
-    *s = hsum_float_8(acc) + summs;
-#elif defined(__riscv_v_intrinsic)
-    float sumf = 0.0;
-
-    size_t vl = __riscv_vsetvl_e8m1(qk/2);
-
-    for (int i = 0; i < nb; i++) {
-        // load elements
-        vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl);
-
-        vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl);
-        vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl);
-
-        // mask and store lower part of x, and then upper part
-        vuint8mf2_t x_a = __riscv_vand_vx_u8mf2(tx, 0x0F, vl);
-        vuint8mf2_t x_l = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl);
-
-        vint8mf2_t v0 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a);
-        vint8mf2_t v1 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l);
-
-        vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl);
-        vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl);
-
-        vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl);
-
-        vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl);
-        vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl);
-
-        int sumi = __riscv_vmv_x_s_i32m1_i32(vs2);
-
-        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s);
-    }
-
-    *s = sumf;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0xF);
-    const vector signed int v0 = vec_splats((int32_t)0);
-    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
-
-    vector float vsumf0 = vec_splats(0.0f);
-
-#pragma GCC unroll 4
-    for (int i = 0; i < nb; i++) {
-        __builtin_prefetch(x[i].qs, 0, 1);
-        __builtin_prefetch(y[i].qs, 0, 1);
-
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[i].d));
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector float vxmin = vec_splats(GGML_FP16_TO_FP32(x[i].m));
-        vector float vys = {GGML_FP16_TO_FP32(y[i].s), 0.0f, 0.0f, 0.0f};
-        vsumf0 = vec_madd(vxmin, vys, vsumf0);
-
-        vector signed char qxs = (vector signed char)vec_xl( 0, x[i].qs);
-        vector signed char q8y0 = vec_xl( 0, y[i].qs);
-        vector signed char q8y1 = vec_xl(16, y[i].qs);
-
-        vector unsigned char q4x0 = (vector unsigned char)vec_and(qxs, lowMask);
-        vector unsigned char q4x1 = (vector unsigned char)vec_sr(qxs, v4);
-
-        vector signed int vsumi0 = v0;
-
-        vsumi0 = vec_msum(q8y0, q4x0, vsumi0);
-        vsumi0 = vec_msum(q8y1, q4x1, vsumi0);
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-    }
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-    // Initialize accumulator with zeros
-    __m256 acc = (__m256)__lasx_xvldi(0);
-
-    float summs = 0;
-
-    // Main loop
-    for (int i = 0; i < nb; ++i) {
-        const float d0 = GGML_FP16_TO_FP32(x[i].d);
-        const float d1 = GGML_FP16_TO_FP32(y[i].d);
-
-        summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s);
-
-        const __m256 d0v = __lasx_xvreplfr2vr_s( d0 );
-        const __m256 d1v = __lasx_xvreplfr2vr_s( d1 );
-
-        // Compute combined scales
-        const __m256 d0d1 = __lasx_xvfmul_s( d0v, d1v );
-
-        // Load 16 bytes, and unpack 4 bit fields into bytes, making 32 bytes
-        const __m256i qx = bytes_from_nibbles_32(x[i].qs);
-        const __m256i qy = __lasx_xvld( (const __m256i *)y[i].qs, 0);
-
-        const __m256 xy = mul_sum_us8_pairs_float(qx, qy);
-
-        // Accumulate d0*d1*x*y
-        acc = __lasx_xvfmadd_s( d0d1, xy, acc );
-    }
-
-    *s = hsum_float_8(acc) + summs;
-
-#else
-    // scalar
-    float sumf = 0.0;
-
-    for (int i = 0; i < nb; i++) {
-        int sumi = 0;
-
-        for (int j = 0; j < qk/2; ++j) {
-            const int v0 = (x[i].qs[j] & 0x0F);
-            const int v1 = (x[i].qs[j] >>   4);
-
-            sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]);
-        }
-
-        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s);
-    }
-
-    *s = sumf;
-#endif
-}
-
-void ggml_vec_dot_q5_0_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    const int qk = QK8_0;
-    const int nb = n / qk;
-
-    assert(n % qk == 0);
-    assert(qk == QK5_0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_q5_0 * restrict x = vx;
-    const block_q8_0 * restrict y = vy;
-
-#if defined(__ARM_NEON)
-    float32x4_t sumv0 = vdupq_n_f32(0.0f);
-    float32x4_t sumv1 = vdupq_n_f32(0.0f);
-
-    uint32_t qh0;
-    uint32_t qh1;
-
-    uint64_t tmp0[4];
-    uint64_t tmp1[4];
-
-    assert(nb % 2 == 0); // TODO: handle odd nb
-
-    for (int i = 0; i < nb; i += 2) {
-        const block_q5_0 * restrict x0 = &x[i];
-        const block_q5_0 * restrict x1 = &x[i + 1];
-        const block_q8_0 * restrict y0 = &y[i];
-        const block_q8_0 * restrict y1 = &y[i + 1];
-
-        const uint8x16_t m4b = vdupq_n_u8(0x0F);
-
-        // extract the 5th bit via lookup table ((!b) << 4)
-        memcpy(&qh0, x0->qh, sizeof(qh0));
-        memcpy(&qh1, x1->qh, sizeof(qh1));
-
-        tmp0[0] = table_b2b_1[(qh0 >>  0) & 0xFF];
-        tmp0[1] = table_b2b_1[(qh0 >>  8) & 0xFF];
-        tmp0[2] = table_b2b_1[(qh0 >> 16) & 0xFF];
-        tmp0[3] = table_b2b_1[(qh0 >> 24)       ];
-
-        tmp1[0] = table_b2b_1[(qh1 >>  0) & 0xFF];
-        tmp1[1] = table_b2b_1[(qh1 >>  8) & 0xFF];
-        tmp1[2] = table_b2b_1[(qh1 >> 16) & 0xFF];
-        tmp1[3] = table_b2b_1[(qh1 >> 24)       ];
-
-        const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0));
-        const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2));
-        const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0));
-        const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2));
-
-        const uint8x16_t v0_0 = vld1q_u8(x0->qs);
-        const uint8x16_t v0_1 = vld1q_u8(x1->qs);
-
-        // 4-bit -> 8-bit
-        int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
-        int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
-        int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
-        int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
-
-        // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero)
-        const int8x16_t v0_0lf = vsubq_s8(v0_0l, qhl0);
-        const int8x16_t v0_0hf = vsubq_s8(v0_0h, qhh0);
-        const int8x16_t v0_1lf = vsubq_s8(v0_1l, qhl1);
-        const int8x16_t v0_1hf = vsubq_s8(v0_1h, qhh1);
-
-        // load y
-        const int8x16_t v1_0l = vld1q_s8(y0->qs);
-        const int8x16_t v1_0h = vld1q_s8(y0->qs + 16);
-        const int8x16_t v1_1l = vld1q_s8(y1->qs);
-        const int8x16_t v1_1h = vld1q_s8(y1->qs + 16);
-
-        sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(
-                        ggml_vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l),
-                        ggml_vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
-        sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(
-                        ggml_vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l),
-                        ggml_vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
-    }
-
-    *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1);
-#elif defined(__wasm_simd128__)
-    v128_t sumv = wasm_f32x4_splat(0.0f);
-
-    uint32_t qh;
-    uint64_t tmp[4];
-
-    // TODO: check if unrolling this is better
-    for (int i = 0; i < nb; ++i) {
-        const block_q5_0 * restrict x0 = &x[i];
-        const block_q8_0 * restrict y0 = &y[i];
-
-        const v128_t m4b  = wasm_i8x16_splat(0x0F);
-
-        // extract the 5th bit
-        memcpy(&qh, x0->qh, sizeof(qh));
-
-        tmp[0] = table_b2b_1[(qh >>  0) & 0xFF];
-        tmp[1] = table_b2b_1[(qh >>  8) & 0xFF];
-        tmp[2] = table_b2b_1[(qh >> 16) & 0xFF];
-        tmp[3] = table_b2b_1[(qh >> 24)       ];
-
-        const v128_t qhl = wasm_v128_load(tmp + 0);
-        const v128_t qhh = wasm_v128_load(tmp + 2);
-
-        const v128_t v0 = wasm_v128_load(x0->qs);
-
-        // 4-bit -> 8-bit
-        const v128_t v0l = wasm_v128_and (v0, m4b);
-        const v128_t v0h = wasm_u8x16_shr(v0, 4);
-
-        // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero)
-        const v128_t v0lf = wasm_i8x16_sub(v0l, qhl);
-        const v128_t v0hf = wasm_i8x16_sub(v0h, qhh);
-
-        // load y
-        const v128_t v1l = wasm_v128_load(y0->qs);
-        const v128_t v1h = wasm_v128_load(y0->qs + 16);
-
-        // int8x16 -> int16x8
-        const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf);
-        const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf);
-        const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf);
-        const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf);
-
-        const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l);
-        const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l);
-        const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h);
-        const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h);
-
-        // dot product
-        sumv = wasm_f32x4_add(sumv, wasm_f32x4_mul(wasm_f32x4_convert_i32x4(
-                        wasm_i32x4_add(
-                            wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll),
-                                           wasm_i32x4_dot_i16x8(v0lfh, v1lh)),
-                            wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl),
-                                           wasm_i32x4_dot_i16x8(v0hfh, v1hh)))),
-                    wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * GGML_FP16_TO_FP32(y0->d))));
-    }
-
-    *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) +
-         wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3);
-#elif defined(__AVX2__)
-    // Initialize accumulator with zeros
-    __m256 acc = _mm256_setzero_ps();
-
-    // Main loop
-    for (int i = 0; i < nb; i++) {
-        /* Compute combined scale for the block */
-        const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d));
-
-        __m256i qx = bytes_from_nibbles_32(x[i].qs);
-        __m256i bxhi = bytes_from_bits_32(x[i].qh);
-        bxhi = _mm256_andnot_si256(bxhi, _mm256_set1_epi8((char)0xF0));
-        qx = _mm256_or_si256(qx, bxhi);
-
-        __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs);
-
-        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
-
-        /* Multiply q with scale and accumulate */
-        acc = _mm256_fmadd_ps(d, q, acc);
-    }
-
-    *s = hsum_float_8(acc);
-#elif defined(__AVX__)
-    // Initialize accumulator with zeros
-    __m256 acc = _mm256_setzero_ps();
-    __m128i mask = _mm_set1_epi8((char)0xF0);
-
-    // Main loop
-    for (int i = 0; i < nb; i++) {
-        /* Compute combined scale for the block */
-        const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d));
-
-        __m256i bx_0 = bytes_from_nibbles_32(x[i].qs);
-        const __m256i bxhi = bytes_from_bits_32(x[i].qh);
-        __m128i bxhil = _mm256_castsi256_si128(bxhi);
-        __m128i bxhih = _mm256_extractf128_si256(bxhi, 1);
-        bxhil = _mm_andnot_si128(bxhil, mask);
-        bxhih = _mm_andnot_si128(bxhih, mask);
-        __m128i bxl = _mm256_castsi256_si128(bx_0);
-        __m128i bxh = _mm256_extractf128_si256(bx_0, 1);
-        bxl = _mm_or_si128(bxl, bxhil);
-        bxh = _mm_or_si128(bxh, bxhih);
-        bx_0 = MM256_SET_M128I(bxh, bxl);
-
-        const __m256i by_0 = _mm256_loadu_si256((const __m256i *)y[i].qs);
-
-        const __m256 q = mul_sum_i8_pairs_float(bx_0, by_0);
-
-        /* Multiply q with scale and accumulate */
-        acc = _mm256_add_ps(_mm256_mul_ps(d, q), acc);
-    }
-
-    *s = hsum_float_8(acc);
-#elif defined(__riscv_v_intrinsic)
-    float sumf = 0.0;
-
-    uint32_t qh;
-
-    size_t vl = __riscv_vsetvl_e8m1(qk/2);
-
-    // These temporary registers are for masking and shift operations
-    vuint32m2_t vt_1 = __riscv_vid_v_u32m2(vl);
-    vuint32m2_t vt_2 = __riscv_vsll_vv_u32m2(__riscv_vmv_v_x_u32m2(1, vl), vt_1, vl);
-
-    vuint32m2_t vt_3 = __riscv_vsll_vx_u32m2(vt_2, 16, vl);
-    vuint32m2_t vt_4 = __riscv_vadd_vx_u32m2(vt_1, 12, vl);
-
-    for (int i = 0; i < nb; i++) {
-        memcpy(&qh, x[i].qh, sizeof(uint32_t));
-
-        // ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4;
-        vuint32m2_t xha_0 = __riscv_vand_vx_u32m2(vt_2, qh, vl);
-        vuint32m2_t xhr_0 = __riscv_vsrl_vv_u32m2(xha_0, vt_1, vl);
-        vuint32m2_t xhl_0 = __riscv_vsll_vx_u32m2(xhr_0, 4, vl);
-
-        // ((qh & (1u << (j + 16))) >> (j + 12));
-        vuint32m2_t xha_1 = __riscv_vand_vx_u32m2(vt_3, qh, vl);
-        vuint32m2_t xhl_1 = __riscv_vsrl_vv_u32m2(xha_1, vt_4, vl);
-
-        // narrowing
-        vuint16m1_t xhc_0 = __riscv_vncvt_x_x_w_u16m1(xhl_0, vl);
-        vuint8mf2_t xh_0 = __riscv_vncvt_x_x_w_u8mf2(xhc_0, vl);
-
-        vuint16m1_t xhc_1 = __riscv_vncvt_x_x_w_u16m1(xhl_1, vl);
-        vuint8mf2_t xh_1 = __riscv_vncvt_x_x_w_u8mf2(xhc_1, vl);
-
-        // load
-        vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl);
-
-        vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl);
-        vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl);
-
-        vuint8mf2_t x_at = __riscv_vand_vx_u8mf2(tx, 0x0F, vl);
-        vuint8mf2_t x_lt = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl);
-
-        vuint8mf2_t x_a = __riscv_vor_vv_u8mf2(x_at, xh_0, vl);
-        vuint8mf2_t x_l = __riscv_vor_vv_u8mf2(x_lt, xh_1, vl);
-
-        vint8mf2_t x_ai = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a);
-        vint8mf2_t x_li = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l);
-
-        vint8mf2_t v0 = __riscv_vsub_vx_i8mf2(x_ai, 16, vl);
-        vint8mf2_t v1 = __riscv_vsub_vx_i8mf2(x_li, 16, vl);
-
-        vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl);
-        vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl);
-
-        vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl);
-
-        vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl);
-        vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl);
-
-        int sumi = __riscv_vmv_x_s_i32m1_i32(vs2);
-
-        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi;
-    }
-
-    *s = sumf;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0xF);
-    const vector unsigned char v4 = vec_splats((unsigned char)4);
-
-    vector float vsumf0 = vec_splats(0.0f);
-
-#pragma GCC unroll 4
-    for (int i = 0; i < nb; ++i) {
-        __builtin_prefetch(x[i].qs, 0, 1);
-        __builtin_prefetch(y[i].qs, 0, 1);
-
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[i].d));
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed long long aux64x2_0 = {(uint64_t)(table_b2b_1[x[i].qh[0]]), (uint64_t)(table_b2b_1[x[i].qh[1]])};
-        vector signed long long aux64x2_1 = {(uint64_t)(table_b2b_1[x[i].qh[2]]), (uint64_t)(table_b2b_1[x[i].qh[3]])};
-
-        vector signed char qh0 = (vector signed char)aux64x2_0;
-        vector signed char qh1 = (vector signed char)aux64x2_1;
-
-        vector signed char qxs = (vector signed char)vec_xl( 0, x[i].qs);
-
-        vector signed char q5x0 = vec_sub(vec_and (qxs, lowMask), qh0);
-        vector signed char q5x1 = vec_sub(vec_sr(qxs, v4), qh1);
-
-        vector signed char q8y0 = vec_xl(  0, y[i].qs);
-        vector signed char q8y1 = vec_xl( 16, y[i].qs);
-
-        vector signed short qv0 = vec_add(vec_mule(q5x0, q8y0), vec_mulo(q5x0, q8y0));
-        vector signed short qv1 = vec_add(vec_mule(q5x1, q8y1), vec_mulo(q5x1, q8y1));
-
-        qv0 = vec_add(qv0, qv1);
-
-        vector signed int vsumi0 = vec_add(vec_unpackh(qv0), vec_unpackl(qv0));
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-    }
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-    // Initialize accumulator with zeros
-    __m256 acc = (__m256)__lasx_xvldi(0);
-
-    // Main loop
-    for (int i = 0; i < nb; i++) {
-        /* Compute combined scale for the block */
-        const __m256 d = __lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); //FIXME
-
-        __m256i qx = bytes_from_nibbles_32(x[i].qs);
-        __m256i bxhi = bytes_from_bits_32(x[i].qh);
-        bxhi = __lasx_xvandn_v(bxhi, __lasx_xvreplgr2vr_b((char)0xF0));
-        qx = __lasx_xvor_v(qx, bxhi);
-
-        __m256i qy = __lasx_xvld((const __m256i *)y[i].qs, 0);
-
-        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
-
-        /* Multiply q with scale and accumulate */
-        acc = __lasx_xvfmadd_s(d, q, acc);
-    }
-
-    *s = hsum_float_8(acc);
-
-#else
-    // scalar
-    float sumf = 0.0;
-
-    for (int i = 0; i < nb; i++) {
-        uint32_t qh;
-        memcpy(&qh, x[i].qh, sizeof(qh));
-
-        int sumi = 0;
-
-        for (int j = 0; j < qk/2; ++j) {
-            const uint8_t xh_0 = ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4;
-            const uint8_t xh_1 = ((qh & (1u << (j + 16))) >> (j + 12));
-
-            const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16;
-            const int32_t x1 = ((x[i].qs[j] >>   4) | xh_1) - 16;
-
-            sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]);
-        }
-
-        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi;
-    }
-
-    *s = sumf;
-#endif
-}
-
-void ggml_vec_dot_q5_1_q8_1(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    const int qk = QK8_1;
-    const int nb = n / qk;
-
-    assert(n % qk == 0);
-    assert(qk == QK5_1);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_q5_1 * restrict x = vx;
-    const block_q8_1 * restrict y = vy;
-
-#if defined(__ARM_NEON)
-    float32x4_t sumv0 = vdupq_n_f32(0.0f);
-    float32x4_t sumv1 = vdupq_n_f32(0.0f);
-
-    float summs0 = 0.0f;
-    float summs1 = 0.0f;
-
-    uint32_t qh0;
-    uint32_t qh1;
-
-    uint64_t tmp0[4];
-    uint64_t tmp1[4];
-
-    assert(nb % 2 == 0); // TODO: handle odd nb
-
-    for (int i = 0; i < nb; i += 2) {
-        const block_q5_1 * restrict x0 = &x[i];
-        const block_q5_1 * restrict x1 = &x[i + 1];
-        const block_q8_1 * restrict y0 = &y[i];
-        const block_q8_1 * restrict y1 = &y[i + 1];
-
-        const uint8x16_t m4b = vdupq_n_u8(0x0F);
-
-        summs0 += GGML_FP16_TO_FP32(x0->m) * GGML_FP16_TO_FP32(y0->s);
-        summs1 += GGML_FP16_TO_FP32(x1->m) * GGML_FP16_TO_FP32(y1->s);
-
-        // extract the 5th bit via lookup table ((b) << 4)
-        memcpy(&qh0, x0->qh, sizeof(qh0));
-        memcpy(&qh1, x1->qh, sizeof(qh1));
-
-        tmp0[0] = table_b2b_0[(qh0 >>  0) & 0xFF];
-        tmp0[1] = table_b2b_0[(qh0 >>  8) & 0xFF];
-        tmp0[2] = table_b2b_0[(qh0 >> 16) & 0xFF];
-        tmp0[3] = table_b2b_0[(qh0 >> 24)       ];
-
-        tmp1[0] = table_b2b_0[(qh1 >>  0) & 0xFF];
-        tmp1[1] = table_b2b_0[(qh1 >>  8) & 0xFF];
-        tmp1[2] = table_b2b_0[(qh1 >> 16) & 0xFF];
-        tmp1[3] = table_b2b_0[(qh1 >> 24)       ];
-
-        const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0));
-        const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2));
-        const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0));
-        const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2));
-
-        const uint8x16_t v0_0 = vld1q_u8(x0->qs);
-        const uint8x16_t v0_1 = vld1q_u8(x1->qs);
-
-        // 4-bit -> 8-bit
-        const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
-        const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
-        const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
-        const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
-
-        // add high bit
-        const int8x16_t v0_0lf = vorrq_s8(v0_0l, qhl0);
-        const int8x16_t v0_0hf = vorrq_s8(v0_0h, qhh0);
-        const int8x16_t v0_1lf = vorrq_s8(v0_1l, qhl1);
-        const int8x16_t v0_1hf = vorrq_s8(v0_1h, qhh1);
-
-        // load y
-        const int8x16_t v1_0l = vld1q_s8(y0->qs);
-        const int8x16_t v1_0h = vld1q_s8(y0->qs + 16);
-        const int8x16_t v1_1l = vld1q_s8(y1->qs);
-        const int8x16_t v1_1h = vld1q_s8(y1->qs + 16);
-
-        sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(
-                        ggml_vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l),
-                        ggml_vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
-        sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(
-                        ggml_vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l),
-                        ggml_vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
-    }
-
-    *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs0 + summs1;
-#elif defined(__wasm_simd128__)
-    v128_t sumv = wasm_f32x4_splat(0.0f);
-
-    float summs = 0.0f;
-
-    uint32_t qh;
-    uint64_t tmp[4];
-
-    // TODO: check if unrolling this is better
-    for (int i = 0; i < nb; ++i) {
-        const block_q5_1 * restrict x0 = &x[i];
-        const block_q8_1 * restrict y0 = &y[i];
-
-        summs += GGML_FP16_TO_FP32(x0->m) * GGML_FP16_TO_FP32(y0->s);
-
-        const v128_t m4b = wasm_i8x16_splat(0x0F);
-
-        // extract the 5th bit
-        memcpy(&qh, x0->qh, sizeof(qh));
-
-        tmp[0] = table_b2b_0[(qh >>  0) & 0xFF];
-        tmp[1] = table_b2b_0[(qh >>  8) & 0xFF];
-        tmp[2] = table_b2b_0[(qh >> 16) & 0xFF];
-        tmp[3] = table_b2b_0[(qh >> 24)       ];
-
-        const v128_t qhl = wasm_v128_load(tmp + 0);
-        const v128_t qhh = wasm_v128_load(tmp + 2);
-
-        const v128_t v0 = wasm_v128_load(x0->qs);
-
-        // 4-bit -> 8-bit
-        const v128_t v0l = wasm_v128_and (v0, m4b);
-        const v128_t v0h = wasm_u8x16_shr(v0, 4);
-
-        // add high bit
-        const v128_t v0lf = wasm_v128_or(v0l, qhl);
-        const v128_t v0hf = wasm_v128_or(v0h, qhh);
-
-        // load y
-        const v128_t v1l = wasm_v128_load(y0->qs);
-        const v128_t v1h = wasm_v128_load(y0->qs + 16);
-
-        // int8x16 -> int16x8
-        const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf);
-        const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf);
-        const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf);
-        const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf);
-
-        const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l);
-        const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l);
-        const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h);
-        const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h);
-
-        // dot product
-        sumv = wasm_f32x4_add(sumv,
-                wasm_f32x4_mul(wasm_f32x4_convert_i32x4(wasm_i32x4_add(
-                            wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll),
-                                           wasm_i32x4_dot_i16x8(v0lfh, v1lh)),
-                            wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl),
-                                           wasm_i32x4_dot_i16x8(v0hfh, v1hh)))),
-                    wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * GGML_FP16_TO_FP32(y0->d))));
-    }
-
-    *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) +
-         wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3) + summs;
-#elif defined(__AVX2__)
-    // Initialize accumulator with zeros
-    __m256 acc = _mm256_setzero_ps();
-
-    float summs = 0.0f;
-
-    // Main loop
-    for (int i = 0; i < nb; i++) {
-        const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d));
-
-        summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s);
-
-        __m256i qx = bytes_from_nibbles_32(x[i].qs);
-        __m256i bxhi = bytes_from_bits_32(x[i].qh);
-        bxhi = _mm256_and_si256(bxhi, _mm256_set1_epi8(0x10));
-        qx = _mm256_or_si256(qx, bxhi);
-
-        const __m256 dy = _mm256_set1_ps(GGML_FP16_TO_FP32(y[i].d));
-        const __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs);
-
-        const __m256 q = mul_sum_us8_pairs_float(qx, qy);
-
-        acc = _mm256_fmadd_ps(q, _mm256_mul_ps(dx, dy), acc);
-    }
-
-    *s = hsum_float_8(acc) + summs;
-#elif defined(__AVX__)
-    // Initialize accumulator with zeros
-    __m256 acc = _mm256_setzero_ps();
-    __m128i mask = _mm_set1_epi8(0x10);
-
-    float summs = 0.0f;
-
-    // Main loop
-    for (int i = 0; i < nb; i++) {
-        const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d));
-
-        summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s);
-
-        __m256i bx_0 = bytes_from_nibbles_32(x[i].qs);
-        const __m256i bxhi = bytes_from_bits_32(x[i].qh);
-        __m128i bxhil = _mm256_castsi256_si128(bxhi);
-        __m128i bxhih = _mm256_extractf128_si256(bxhi, 1);
-        bxhil = _mm_and_si128(bxhil, mask);
-        bxhih = _mm_and_si128(bxhih, mask);
-        __m128i bxl = _mm256_castsi256_si128(bx_0);
-        __m128i bxh = _mm256_extractf128_si256(bx_0, 1);
-        bxl = _mm_or_si128(bxl, bxhil);
-        bxh = _mm_or_si128(bxh, bxhih);
-        bx_0 = MM256_SET_M128I(bxh, bxl);
-
-        const __m256 dy = _mm256_set1_ps(GGML_FP16_TO_FP32(y[i].d));
-        const __m256i by_0 = _mm256_loadu_si256((const __m256i *)y[i].qs);
-
-        const __m256 q = mul_sum_us8_pairs_float(bx_0, by_0);
-
-        acc = _mm256_add_ps(_mm256_mul_ps(q, _mm256_mul_ps(dx, dy)), acc);
-    }
-
-    *s = hsum_float_8(acc) + summs;
-#elif defined(__riscv_v_intrinsic)
-    float sumf = 0.0;
-
-    uint32_t qh;
-
-    size_t vl = __riscv_vsetvl_e8m1(qk/2);
-
-    // temporary registers for shift operations
-    vuint32m2_t vt_1 = __riscv_vid_v_u32m2(vl);
-    vuint32m2_t vt_2 = __riscv_vadd_vx_u32m2(vt_1, 12, vl);
-
-    for (int i = 0; i < nb; i++) {
-        memcpy(&qh, x[i].qh, sizeof(uint32_t));
-
-        // load qh
-        vuint32m2_t vqh = __riscv_vmv_v_x_u32m2(qh, vl);
-
-        // ((qh >> (j +  0)) << 4) & 0x10;
-        vuint32m2_t xhr_0 = __riscv_vsrl_vv_u32m2(vqh, vt_1, vl);
-        vuint32m2_t xhl_0 = __riscv_vsll_vx_u32m2(xhr_0, 4, vl);
-        vuint32m2_t xha_0 = __riscv_vand_vx_u32m2(xhl_0, 0x10, vl);
-
-        // ((qh >> (j + 12))     ) & 0x10;
-        vuint32m2_t xhr_1 = __riscv_vsrl_vv_u32m2(vqh, vt_2, vl);
-        vuint32m2_t xha_1 = __riscv_vand_vx_u32m2(xhr_1, 0x10, vl);
-
-        // narrowing
-        vuint16m1_t xhc_0 = __riscv_vncvt_x_x_w_u16m1(xha_0, vl);
-        vuint8mf2_t xh_0 = __riscv_vncvt_x_x_w_u8mf2(xhc_0, vl);
-
-        vuint16m1_t xhc_1 = __riscv_vncvt_x_x_w_u16m1(xha_1, vl);
-        vuint8mf2_t xh_1 = __riscv_vncvt_x_x_w_u8mf2(xhc_1, vl);
-
-        // load
-        vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl);
-
-        vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl);
-        vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl);
-
-        vuint8mf2_t x_at = __riscv_vand_vx_u8mf2(tx, 0x0F, vl);
-        vuint8mf2_t x_lt = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl);
-
-        vuint8mf2_t x_a = __riscv_vor_vv_u8mf2(x_at, xh_0, vl);
-        vuint8mf2_t x_l = __riscv_vor_vv_u8mf2(x_lt, xh_1, vl);
-
-        vint8mf2_t v0 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a);
-        vint8mf2_t v1 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l);
-
-        vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl);
-        vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl);
-
-        vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl);
-
-        vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl);
-        vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl);
-
-        int sumi = __riscv_vmv_x_s_i32m1_i32(vs2);
-
-        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s);
-    }
-
-    *s = sumf;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0xF);
-    const vector signed int v0 = vec_splats((int32_t)0);
-    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
-
-    vector float vsumf0 = vec_splats(0.0f);
-
-#pragma GCC unroll 4
-    for (int i = 0; i < nb; ++i) {
-        __builtin_prefetch(x[i].qs, 0, 1);
-        __builtin_prefetch(y[i].qs, 0, 1);
-
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[i].d));
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector float vxmin = vec_splats(GGML_FP16_TO_FP32(x[i].m));
-        vector float vys = {GGML_FP16_TO_FP32(y[i].s), 0.f, 0.f, 0.f};
-        vsumf0 = vec_madd(vxmin, vys, vsumf0);
-
-        vector unsigned long long aux64x2_0 = {(uint64_t)(table_b2b_0[x[i].qh[0]]), (uint64_t)(table_b2b_0[x[i].qh[1]])};
-        vector unsigned long long aux64x2_1 = {(uint64_t)(table_b2b_0[x[i].qh[2]]), (uint64_t)(table_b2b_0[x[i].qh[3]])};
-
-        vector signed char qh0 = (vector signed char)aux64x2_0;
-        vector signed char qh1 = (vector signed char)aux64x2_1;
-
-        vector signed char qxs = (vector signed char)vec_xl( 0, x[i].qs);
-
-        vector unsigned char q5x0 = (vector unsigned char)vec_or(vec_and(qxs, lowMask), qh0);
-        vector unsigned char q5x1 = (vector unsigned char)vec_or(vec_sr(qxs, v4), qh1);
-
-        vector signed char q8y0 = vec_xl(  0, y[i].qs);
-        vector signed char q8y1 = vec_xl( 16, y[i].qs);
-
-        vector signed int vsumi0 = v0;
-
-        vsumi0 = vec_msum(q8y0, q5x0, vsumi0);
-        vsumi0 = vec_msum(q8y1, q5x1, vsumi0);
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-    }
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-    // Initialize accumulator with zeros
-    __m256 acc = (__m256)__lasx_xvldi(0);
-
-    float summs = 0.0f;
-
-    // Main loop
-    for (int i = 0; i < nb; i++) {
-        const __m256 dx = __lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(x[i].d));
-
-        summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s);
-
-        __m256i qx = bytes_from_nibbles_32(x[i].qs);
-        __m256i bxhi = bytes_from_bits_32(x[i].qh);
-        bxhi = __lasx_xvand_v(bxhi, __lasx_xvreplgr2vr_b(0x10));
-        qx = __lasx_xvor_v(qx, bxhi);
-
-        const __m256 dy = __lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(y[i].d));
-        const __m256i qy = __lasx_xvld((const __m256i *)y[i].qs, 0);
-
-        const __m256 q = mul_sum_us8_pairs_float(qx, qy);
-
-        acc = __lasx_xvfmadd_s(q, __lasx_xvfmul_s(dx, dy), acc);
-    }
-
-    *s = hsum_float_8(acc) + summs;
-
-#else
-    // scalar
-    float sumf = 0.0;
-
-    for (int i = 0; i < nb; i++) {
-        uint32_t qh;
-        memcpy(&qh, x[i].qh, sizeof(qh));
-
-        int sumi = 0;
-
-        for (int j = 0; j < qk/2; ++j) {
-            const uint8_t xh_0 = ((qh >> (j +  0)) << 4) & 0x10;
-            const uint8_t xh_1 = ((qh >> (j + 12))     ) & 0x10;
-
-            const int32_t x0 = (x[i].qs[j] & 0xF) | xh_0;
-            const int32_t x1 = (x[i].qs[j] >>  4) | xh_1;
-
-            sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]);
-        }
-
-        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s);
-    }
-
-    *s = sumf;
-#endif
-}
-
-void ggml_vec_dot_q8_0_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    const int qk = QK8_0;
-    const int nb = n / qk;
-
-    assert(n % qk == 0);
-#if defined(__ARM_FEATURE_MATMUL_INT8)
-    assert((nrc == 2) || (nrc == 1));
-#else
-    assert(nrc == 1);
-#endif
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_q8_0 * restrict x = vx;
-    const block_q8_0 * restrict y = vy;
-
-#if defined(__ARM_FEATURE_MATMUL_INT8)
-    if (nrc == 2) {
-        const block_q8_0 * restrict vx0 = vx;
-        const block_q8_0 * restrict vx1 = (const block_q8_0 *) ((const uint8_t*)vx + bx);
-        const block_q8_0 * restrict vy0 = vy;
-        const block_q8_0 * restrict vy1 = (const block_q8_0 *) ((const uint8_t*)vy + by);
-
-        float32x4_t sumv0 = vdupq_n_f32(0.0f);
-
-        for (int i = 0; i < nb; i++) {
-            const block_q8_0 * restrict b_x0 = &vx0[i];
-            const block_q8_0 * restrict b_y0 = &vy0[i];
-
-            const block_q8_0 * restrict b_x1 = &vx1[i];
-            const block_q8_0 * restrict b_y1 = &vy1[i];
-
-            const int8x16_t x0_l = vld1q_s8(b_x0->qs);
-            const int8x16_t x0_h = vld1q_s8(b_x0->qs + 16);
-            const int8x16_t x1_l = vld1q_s8(b_x1->qs);
-            const int8x16_t x1_h = vld1q_s8(b_x1->qs + 16);
-
-            // load y
-            const int8x16_t y0_l = vld1q_s8(b_y0->qs);
-            const int8x16_t y0_h = vld1q_s8(b_y0->qs + 16);
-            const int8x16_t y1_l = vld1q_s8(b_y1->qs);
-            const int8x16_t y1_h = vld1q_s8(b_y1->qs + 16);
-
-            float32_t _scale[4] = {GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y0->d),
-                                   GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y1->d),
-                                   GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y0->d),
-                                   GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y1->d)};
-            float32x4_t scale = vld1q_f32(_scale);
-
-            int8x16_t l0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
-            int8x16_t l1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
-
-            int8x16_t l2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
-            int8x16_t l3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
-
-            int8x16_t r0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
-            int8x16_t r1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
-
-            int8x16_t r2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
-            int8x16_t r3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
-
-            sumv0 = vmlaq_f32(sumv0,(vcvtq_f32_s32(vmmlaq_s32((vmmlaq_s32((vmmlaq_s32((vmmlaq_s32(vdupq_n_s32(0), l0, r0)),
-                                                                                       l1, r1)), l2, r2)), l3, r3))), scale);
-        }
-        float32x4_t sumv1 = vextq_f32(sumv0, sumv0, 2);
-        float32x4_t sumv2 = vzip1q_f32(sumv0, sumv1);
-
-        vst1_f32(s, vget_low_f32(sumv2));
-        vst1_f32(s + bs, vget_high_f32(sumv2));
-        return;
-    }
-#endif
-#if defined(__ARM_FEATURE_SVE)
-    svfloat32_t sumv0 = svdup_n_f32(0.0f);
-    svfloat32_t sumv1 = svdup_n_f32(0.0f);
-
-    assert(nb % 2 == 0); // TODO: handle odd nb
-
-    for (int i = 0; i < nb; i += 2) {
-        const block_q8_0 * restrict x0 = &x[i + 0];
-        const block_q8_0 * restrict x1 = &x[i + 1];
-        const block_q8_0 * restrict y0 = &y[i + 0];
-        const block_q8_0 * restrict y1 = &y[i + 1];
-
-        // load x
-        const svint8_t qx0 = svld1_s8(svptrue_b8(), x0->qs);
-        const svint8_t qx1 = svld1_s8(svptrue_b8(), x1->qs);
-
-        // load y
-        const svint8_t qy0 = svld1_s8(svptrue_b8(), y0->qs);
-        const svint8_t qy1 = svld1_s8(svptrue_b8(), y1->qs);
-
-        sumv0 = svmla_n_f32_x(svptrue_b32(), sumv0, svcvt_f32_s32_x(svptrue_b32(), svdot_s32(svdup_n_s32(0), qx0, qy0)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
-        sumv1 = svmla_n_f32_x(svptrue_b32(), sumv1, svcvt_f32_s32_x(svptrue_b32(), svdot_s32(svdup_n_s32(0), qx1, qy1)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
-    }
-
-    *s = svaddv_f32(svptrue_b32(), svadd_f32_x(svptrue_b32(), sumv0, sumv1));
-#elif defined(__ARM_NEON)
-    float32x4_t sumv0 = vdupq_n_f32(0.0f);
-    float32x4_t sumv1 = vdupq_n_f32(0.0f);
-
-    assert(nb % 2 == 0); // TODO: handle odd nb
-
-    for (int i = 0; i < nb; i += 2) {
-        const block_q8_0 * restrict x0 = &x[i + 0];
-        const block_q8_0 * restrict x1 = &x[i + 1];
-        const block_q8_0 * restrict y0 = &y[i + 0];
-        const block_q8_0 * restrict y1 = &y[i + 1];
-
-        const int8x16_t x0_0 = vld1q_s8(x0->qs);
-        const int8x16_t x0_1 = vld1q_s8(x0->qs + 16);
-        const int8x16_t x1_0 = vld1q_s8(x1->qs);
-        const int8x16_t x1_1 = vld1q_s8(x1->qs + 16);
-
-        // load y
-        const int8x16_t y0_0 = vld1q_s8(y0->qs);
-        const int8x16_t y0_1 = vld1q_s8(y0->qs + 16);
-        const int8x16_t y1_0 = vld1q_s8(y1->qs);
-        const int8x16_t y1_1 = vld1q_s8(y1->qs + 16);
-
-        sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(
-                        ggml_vdotq_s32(vdupq_n_s32(0), x0_0, y0_0),
-                        ggml_vdotq_s32(vdupq_n_s32(0), x0_1, y0_1))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
-
-        sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(
-                        ggml_vdotq_s32(vdupq_n_s32(0), x1_0, y1_0),
-                        ggml_vdotq_s32(vdupq_n_s32(0), x1_1, y1_1))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
-    }
-
-    *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1);
-#elif defined(__AVX2__) || defined(__AVX__)
-    // Initialize accumulator with zeros
-    __m256 acc = _mm256_setzero_ps();
-
-    // Main loop
-    for (int i = 0; i < nb; ++i) {
-        // Compute combined scale for the block
-        const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d));
-        __m256i qx = _mm256_loadu_si256((const __m256i *)x[i].qs);
-        __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs);
-
-        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
-
-        // Multiply q with scale and accumulate
-#if defined(__AVX2__)
-        acc = _mm256_fmadd_ps( d, q, acc );
-#else
-        acc = _mm256_add_ps( _mm256_mul_ps( d, q ), acc );
-#endif
-    }
-
-    *s = hsum_float_8(acc);
-#elif defined(__riscv_v_intrinsic)
-    float sumf = 0.0;
-    size_t vl = __riscv_vsetvl_e8m1(qk);
-
-    for (int i = 0; i < nb; i++) {
-        // load elements
-        vint8m1_t bx_0 = __riscv_vle8_v_i8m1(x[i].qs, vl);
-        vint8m1_t by_0 = __riscv_vle8_v_i8m1(y[i].qs, vl);
-
-        vint16m2_t vw_mul = __riscv_vwmul_vv_i16m2(bx_0, by_0, vl);
-
-        vint32m1_t v_zero = __riscv_vmv_v_x_i32m1(0, vl);
-        vint32m1_t v_sum = __riscv_vwredsum_vs_i16m2_i32m1(vw_mul, v_zero, vl);
-
-        int sumi = __riscv_vmv_x_s_i32m1_i32(v_sum);
-
-        sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d));
-    }
-
-    *s = sumf;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed int v0 = vec_splats((int32_t)0);
-    vector float vsumf0 = vec_splats(0.0f);
-
-#pragma GCC unroll 8
-    for (int i = 0; i < nb; i++) {
-        __builtin_prefetch(x[i].qs, 0, 1);
-        __builtin_prefetch(y[i].qs, 0, 1);
-
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[i].d));
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed char q8x0 = vec_xl( 0, x[i].qs);
-        vector signed char q8x1 = vec_xl(16, x[i].qs);
-        vector signed char q8y0 = vec_xl( 0, y[i].qs);
-        vector signed char q8y1 = vec_xl(16, y[i].qs);
-
-        vector signed short qv0 = vec_mule(q8x0, q8y0);
-        vector signed short qv1 = vec_mulo(q8x0, q8y0);
-        vector signed short qv2 = vec_mule(q8x1, q8y1);
-        vector signed short qv3 = vec_mulo(q8x1, q8y1);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-
-        vsumi0 = vec_sum4s(qv0, vsumi0);
-        vsumi1 = vec_sum4s(qv1, vsumi1);
-        vsumi0 = vec_sum4s(qv2, vsumi0);
-        vsumi1 = vec_sum4s(qv3, vsumi1);
-
-        vsumi0 = vec_add(vsumi0, vsumi1);
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-    }
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-    // Initialize accumulator with zeros
-    __m256 acc = (__m256)__lasx_xvldi(0);
-
-    // Main loop
-    for (int i = 0; i < nb; ++i) {
-        // Compute combined scale for the block
-        const __m256 d = __lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d));
-        __m256i qx = __lasx_xvld((const __m256i *)x[i].qs, 0);
-        __m256i qy = __lasx_xvld((const __m256i *)y[i].qs, 0);
-
-        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
-
-        // Multiply q with scale and accumulate
-        acc = __lasx_xvfmadd_s( d, q, acc );
-    }
-
-    *s = hsum_float_8(acc);
-
-#else
-    // scalar
-    float sumf = 0.0;
-
-    for (int i = 0; i < nb; i++) {
-        int sumi = 0;
-
-        for (int j = 0; j < qk; j++) {
-            sumi += x[i].qs[j]*y[i].qs[j];
-        }
-
-        sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d));
-    }
-
-    *s = sumf;
-#endif
-}
-
-void ggml_vec_dot_q2_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_q2_K * restrict x = vx;
-    const block_q8_K * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-#ifdef __ARM_NEON
-    const uint8x16_t m3 = vdupq_n_u8(0x3);
-    const uint8x16_t m4 = vdupq_n_u8(0xF);
-
-    const int32x4_t vzero = vdupq_n_s32(0);
-
-    ggml_int8x16x2_t q2bytes;
-    uint8_t aux[16];
-
-    float sum = 0;
-
-    for (int i = 0; i < nb; ++i) {
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        const uint8_t * restrict q2 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-        const uint8_t * restrict sc = x[i].scales;
-
-        const uint8x16_t mins_and_scales = vld1q_u8(sc);
-        const uint8x16_t scales = vandq_u8(mins_and_scales, m4);
-        vst1q_u8(aux, scales);
-
-        const uint8x16_t mins = vshrq_n_u8(mins_and_scales, 4);
-        const ggml_int16x8x2_t q8sums = ggml_vld1q_s16_x2(y[i].bsums);
-        const ggml_int16x8x2_t mins16 = {{vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(mins))), vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(mins)))}};
-        const int32x4_t s0 = vaddq_s32(vmull_s16(vget_low_s16 (mins16.val[0]), vget_low_s16 (q8sums.val[0])),
-                                       vmull_s16(vget_high_s16(mins16.val[0]), vget_high_s16(q8sums.val[0])));
-        const int32x4_t s1 = vaddq_s32(vmull_s16(vget_low_s16 (mins16.val[1]), vget_low_s16 (q8sums.val[1])),
-                                       vmull_s16(vget_high_s16(mins16.val[1]), vget_high_s16(q8sums.val[1])));
-        sum += dmin * vaddvq_s32(vaddq_s32(s0, s1));
-
-        int isum = 0;
-        int is = 0;
-
-// We use this macro instead of a function call because for some reason
-// the code runs 2-3% slower, even if the function is declared inline
-#define MULTIPLY_ACCUM_WITH_SCALE(index)\
-        isum += vaddvq_s32(ggml_vdotq_s32(vzero, q2bytes.val[0], q8bytes.val[0])) * aux[is+(index)];\
-        isum += vaddvq_s32(ggml_vdotq_s32(vzero, q2bytes.val[1], q8bytes.val[1])) * aux[is+1+(index)];
-
-#define SHIFT_MULTIPLY_ACCUM_WITH_SCALE(shift, index)\
-        q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32;\
-        q2bytes.val[0] = vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q2bits.val[0], (shift)), m3));\
-        q2bytes.val[1] = vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q2bits.val[1], (shift)), m3));\
-        MULTIPLY_ACCUM_WITH_SCALE((index));
-
-        for (int j = 0; j < QK_K/128; ++j) {
-            const ggml_uint8x16x2_t q2bits = ggml_vld1q_u8_x2(q2); q2 += 32;
-
-            ggml_int8x16x2_t q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32;
-            q2bytes.val[0] = vreinterpretq_s8_u8(vandq_u8(q2bits.val[0], m3));
-            q2bytes.val[1] = vreinterpretq_s8_u8(vandq_u8(q2bits.val[1], m3));
-
-            MULTIPLY_ACCUM_WITH_SCALE(0);
-
-            SHIFT_MULTIPLY_ACCUM_WITH_SCALE(2, 2);
-            SHIFT_MULTIPLY_ACCUM_WITH_SCALE(4, 4);
-            SHIFT_MULTIPLY_ACCUM_WITH_SCALE(6, 6);
-
-            is += 8;
-        }
-
-        sum += d * isum;
-    }
-
-    *s = sum;
-
-#elif defined __AVX2__
-
-    const __m256i m3 = _mm256_set1_epi8(3);
-    const __m128i m4 = _mm_set1_epi8(0xF);
-
-    __m256 acc = _mm256_setzero_ps();
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        const uint8_t * restrict q2 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        const __m128i mins_and_scales = _mm_loadu_si128((const __m128i*)x[i].scales);
-        const __m128i scales8 = _mm_and_si128(mins_and_scales, m4);
-        const __m128i mins8 = _mm_and_si128(_mm_srli_epi16(mins_and_scales, 4), m4);
-        const __m256i mins = _mm256_cvtepi8_epi16(mins8);
-        const __m256i prod = _mm256_madd_epi16(mins, _mm256_loadu_si256((const __m256i*)y[i].bsums));
-
-        acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&dmin), _mm256_cvtepi32_ps(prod), acc);
-
-        const __m256i all_scales = _mm256_cvtepi8_epi16(scales8);
-        const __m128i l_scales = _mm256_extracti128_si256(all_scales, 0);
-        const __m128i h_scales = _mm256_extracti128_si256(all_scales, 1);
-        const __m256i scales[2] = {MM256_SET_M128I(l_scales, l_scales), MM256_SET_M128I(h_scales, h_scales)};
-
-        __m256i sumi = _mm256_setzero_si256();
-
-        for (int j = 0; j < QK_K/128; ++j) {
-
-            const __m256i q2bits = _mm256_loadu_si256((const __m256i*)q2); q2 += 32;
-
-            const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8_3 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-
-            const __m256i q2_0 = _mm256_and_si256(q2bits, m3);
-            const __m256i q2_1 = _mm256_and_si256(_mm256_srli_epi16(q2bits, 2), m3);
-            const __m256i q2_2 = _mm256_and_si256(_mm256_srli_epi16(q2bits, 4), m3);
-            const __m256i q2_3 = _mm256_and_si256(_mm256_srli_epi16(q2bits, 6), m3);
-
-            __m256i p0 = _mm256_maddubs_epi16(q2_0, q8_0);
-            __m256i p1 = _mm256_maddubs_epi16(q2_1, q8_1);
-            __m256i p2 = _mm256_maddubs_epi16(q2_2, q8_2);
-            __m256i p3 = _mm256_maddubs_epi16(q2_3, q8_3);
-
-            p0 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(0)), p0);
-            p1 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(1)), p1);
-            p2 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(2)), p2);
-            p3 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(3)), p3);
-
-            p0 = _mm256_add_epi32(p0, p1);
-            p2 = _mm256_add_epi32(p2, p3);
-
-            sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p0, p2));
-        }
-
-        acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc);
-
-    }
-
-    *s = hsum_float_8(acc);
-
-#elif defined __AVX__
-
-    const __m128i m3 = _mm_set1_epi8(0x3);
-    const __m128i m4 = _mm_set1_epi8(0xF);
-    const __m128i m2 = _mm_set1_epi8(0x2);
-
-    __m256 acc = _mm256_setzero_ps();
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        const uint8_t * restrict q2 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        // load mins and scales from block_q2_K.scales[QK_K/16]
-        const __m128i mins_and_scales = _mm_loadu_si128((const __m128i*)x[i].scales);
-        const __m128i scales16 = _mm_and_si128(mins_and_scales, m4);
-        const __m128i mins16 = _mm_and_si128(_mm_srli_epi16(mins_and_scales, 4), m4);
-        const __m128i mins_0 = _mm_cvtepi8_epi16(mins16);
-        const __m128i mins_1 = _mm_cvtepi8_epi16(_mm_unpackhi_epi64(mins16, mins16));
-
-        // summs = y[i].bsums * (x[i].scales >> 4) in 16bits*8*2 to 32bits*4*2
-        const __m128i summs_0 = _mm_madd_epi16(mins_0, _mm_loadu_si128((const __m128i*)&y[i].bsums[0]));
-        const __m128i summs_1 = _mm_madd_epi16(mins_1, _mm_loadu_si128((const __m128i*)&y[i].bsums[8]));
-
-        // sumf += -dmin * summs in 32bits*8
-        acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&dmin), _mm256_cvtepi32_ps(MM256_SET_M128I(summs_1, summs_0))), acc);
-
-        const __m128i scales_0 = _mm_cvtepi8_epi16(scales16);
-        const __m128i scales_1 = _mm_cvtepi8_epi16(_mm_unpackhi_epi64(scales16, scales16));
-        const __m128i scales[2] = { scales_0, scales_1 };
-
-        __m128i sumi_0 = _mm_setzero_si128();
-        __m128i sumi_1 = _mm_setzero_si128();
-
-        for (int j = 0; j < QK_K/128; ++j) {
-
-            // load Q8 quants int8*16*8 from block_q8_K.qs[QK_K]
-            const __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_2 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_3 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_4 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_5 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_6 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_7 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-
-            // load 2bits*16*8 from block_q2_K.qs[QK_K/4]
-            __m128i q2bits = _mm_loadu_si128((const __m128i*)q2); q2 += 16;
-            const __m128i q2_0 = _mm_and_si128(q2bits, m3);
-            const __m128i q2_2 = _mm_and_si128(_mm_srli_epi16(q2bits, 2), m3);
-            const __m128i q2_4 = _mm_and_si128(_mm_srli_epi16(q2bits, 4), m3);
-            const __m128i q2_6 = _mm_and_si128(_mm_srli_epi16(q2bits, 6), m3);
-            q2bits = _mm_loadu_si128((const __m128i*)q2); q2 += 16;
-            const __m128i q2_1 = _mm_and_si128(q2bits, m3);
-            const __m128i q2_3 = _mm_and_si128(_mm_srli_epi16(q2bits, 2), m3);
-            const __m128i q2_5 = _mm_and_si128(_mm_srli_epi16(q2bits, 4), m3);
-            const __m128i q2_7 = _mm_and_si128(_mm_srli_epi16(q2bits, 6), m3);
-
-            // isuml = q8[l] * ((q2[l] >> shift) & 3) in 8bits*16*8 to 16bits*8*8
-            __m128i p0 = _mm_maddubs_epi16(q2_0, q8_0);
-            __m128i p1 = _mm_maddubs_epi16(q2_1, q8_1);
-            __m128i p2 = _mm_maddubs_epi16(q2_2, q8_2);
-            __m128i p3 = _mm_maddubs_epi16(q2_3, q8_3);
-            __m128i p4 = _mm_maddubs_epi16(q2_4, q8_4);
-            __m128i p5 = _mm_maddubs_epi16(q2_5, q8_5);
-            __m128i p6 = _mm_maddubs_epi16(q2_6, q8_6);
-            __m128i p7 = _mm_maddubs_epi16(q2_7, q8_7);
-
-            // isum += (x[i].scales[is++] & 0xF) * isuml in 16bits*8*8 to 32bits*4*8
-            __m128i shuffle = _mm_set1_epi16(0x0100);
-            p0 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p0);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p1 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p1);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p2 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p2);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p3 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p3);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p4 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p4);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p5 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p5);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p6 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p6);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p7 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p7);
-
-            p0 = _mm_add_epi32(p0, p1);
-            p2 = _mm_add_epi32(p2, p3);
-            p4 = _mm_add_epi32(p4, p5);
-            p6 = _mm_add_epi32(p6, p7);
-
-            // isum in 32bits*4*2
-            sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p0, p2));
-            sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p4, p6));
-        }
-
-        // sumf += dall * isum - dmin * summs in 32bits
-        __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0);
-        acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&dall), _mm256_cvtepi32_ps(sumi)), acc);
-    }
-
-    *s = hsum_float_8(acc);
-
-#elif defined __riscv_v_intrinsic
-
-    float sumf = 0;
-    uint8_t temp_01[32] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
-
-    for (int i = 0; i < nb; ++i) {
-
-        const uint8_t * q2 = x[i].qs;
-        const  int8_t * q8 = y[i].qs;
-        const uint8_t * sc = x[i].scales;
-
-        const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        size_t vl = 16;
-
-        vuint8m1_t scales = __riscv_vle8_v_u8m1(sc, vl);
-        vuint8m1_t aux = __riscv_vand_vx_u8m1(scales, 0x0F, vl);
-
-        vint16m1_t q8sums = __riscv_vle16_v_i16m1(y[i].bsums, vl);
-
-        vuint8mf2_t scales_2 = __riscv_vle8_v_u8mf2(sc, vl);
-        vuint8mf2_t mins8 = __riscv_vsrl_vx_u8mf2(scales_2, 0x4, vl);
-        vint16m1_t mins = __riscv_vreinterpret_v_u16m1_i16m1(__riscv_vzext_vf2_u16m1(mins8, vl));
-        vint32m2_t prod = __riscv_vwmul_vv_i32m2(q8sums, mins, vl);
-        vint32m1_t vsums = __riscv_vredsum_vs_i32m2_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl);
-
-        sumf  += dmin * __riscv_vmv_x_s_i32m1_i32(vsums);
-
-        vl = 32;
-
-        vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1);
-        vuint8m1_t v_b = __riscv_vle8_v_u8m1(temp_01, vl);
-
-        uint8_t is=0;
-        int isum=0;
-
-        for (int j = 0; j < QK_K/128; ++j) {
-            // load Q2
-            vuint8m1_t q2_x = __riscv_vle8_v_u8m1(q2, vl);
-
-            vuint8m1_t q2_0 = __riscv_vand_vx_u8m1(q2_x, 0x03, vl);
-            vuint8m1_t q2_1 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x2, vl), 0x03 , vl);
-            vuint8m1_t q2_2 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x4, vl), 0x03 , vl);
-            vuint8m1_t q2_3 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x6, vl), 0x03 , vl);
-
-            // duplicate scale elements for product
-            vuint8m1_t sc0 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 0+is, vl), vl);
-            vuint8m1_t sc1 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 2+is, vl), vl);
-            vuint8m1_t sc2 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 4+is, vl), vl);
-            vuint8m1_t sc3 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 6+is, vl), vl);
-
-            vint16m2_t p0 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_0, sc0, vl));
-            vint16m2_t p1 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_1, sc1, vl));
-            vint16m2_t p2 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_2, sc2, vl));
-            vint16m2_t p3 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_3, sc3, vl));
-
-            // load Q8
-            vint8m1_t q8_0 = __riscv_vle8_v_i8m1(q8, vl);
-            vint8m1_t q8_1 = __riscv_vle8_v_i8m1(q8+32, vl);
-            vint8m1_t q8_2 = __riscv_vle8_v_i8m1(q8+64, vl);
-            vint8m1_t q8_3 = __riscv_vle8_v_i8m1(q8+96, vl);
-
-            vint32m4_t s0 = __riscv_vwmul_vv_i32m4(p0, __riscv_vwcvt_x_x_v_i16m2(q8_0, vl), vl);
-            vint32m4_t s1 = __riscv_vwmul_vv_i32m4(p1, __riscv_vwcvt_x_x_v_i16m2(q8_1, vl), vl);
-            vint32m4_t s2 = __riscv_vwmul_vv_i32m4(p2, __riscv_vwcvt_x_x_v_i16m2(q8_2, vl), vl);
-            vint32m4_t s3 = __riscv_vwmul_vv_i32m4(p3, __riscv_vwcvt_x_x_v_i16m2(q8_3, vl), vl);
-
-            vint32m1_t isum0 = __riscv_vredsum_vs_i32m4_i32m1(__riscv_vadd_vv_i32m4(s0, s1, vl), vzero, vl);
-            vint32m1_t isum1 = __riscv_vredsum_vs_i32m4_i32m1(__riscv_vadd_vv_i32m4(s2, s3, vl), isum0, vl);
-
-            isum += __riscv_vmv_x_s_i32m1_i32(isum1);
-
-            q2+=32;  q8+=128;  is=8;
-
-        }
-
-        sumf += dall * isum;
-
-    }
-
-    *s = sumf;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0x3);
-    const vector signed char lowScaleMask = vec_splats((signed char)0xF);
-    const vector int v0 = vec_splats((int32_t)0);
-    const vector unsigned char v2 = vec_splats((unsigned char)0x2);
-    const vector unsigned char v6 = vec_splats((unsigned char)0x6);
-    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector float vxmin = vec_splats(GGML_FP16_TO_FP32(x[i].dmin));
-        vector float vdmin = vec_mul(vxmin, vyd);
-
-        vector signed short q8ysums0 = vec_xl( 0, y[i].bsums);
-        vector signed short q8ysums1 = vec_xl(16, y[i].bsums);
-
-        vector signed char q2xmins = (vector signed char)vec_xl( 0, x[i].scales);
-        vector signed char vscales = vec_and(q2xmins, lowScaleMask);
-
-        q2xmins = vec_sr(q2xmins, v4);
-        vector signed short q2xmins0 = vec_unpackh(q2xmins);
-        vector signed short q2xmins1 = vec_unpackl(q2xmins);
-
-        vector signed int prod0 = vec_mule(q2xmins0, q8ysums0);
-        vector signed int prod1 = vec_mulo(q2xmins0, q8ysums0);
-        vector signed int prod2 = vec_mule(q2xmins1, q8ysums1);
-        vector signed int prod3 = vec_mulo(q2xmins1, q8ysums1);
-
-        vsumf0 = vec_nmsub(vec_ctf(prod0, 0), vdmin, vsumf0);
-        vsumf1 = vec_nmsub(vec_ctf(prod1, 0), vdmin, vsumf1);
-        vsumf2 = vec_nmsub(vec_ctf(prod2, 0), vdmin, vsumf2);
-        vsumf3 = vec_nmsub(vec_ctf(prod3, 0), vdmin, vsumf3);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-        vector signed int vsumi4 = v0;
-        vector signed int vsumi5 = v0;
-        vector signed int vsumi6 = v0;
-        vector signed int vsumi7 = v0;
-
-        const uint8_t * restrict q2 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        for (int j = 0; j < QK_K/128; ++j) {
-            __builtin_prefetch(q2, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            vector signed char qxs0 = (vector signed char)vec_xl( 0, q2);
-            vector signed char qxs1 = (vector signed char)vec_xl(16, q2);
-            q2 += 32;
-
-            vector unsigned char q2x00 = (vector unsigned char)vec_and(qxs0, lowMask);
-            vector unsigned char q2x01 = (vector unsigned char)vec_and(vec_sr(qxs0, v2), lowMask);
-            vector unsigned char q2x02 = (vector unsigned char)vec_and(vec_sr(qxs0, v4), lowMask);
-            vector unsigned char q2x03 = (vector unsigned char)vec_and(vec_sr(qxs0, v6), lowMask);
-            vector unsigned char q2x10 = (vector unsigned char)vec_and(qxs1, lowMask);
-            vector unsigned char q2x11 = (vector unsigned char)vec_and(vec_sr(qxs1, v2), lowMask);
-            vector unsigned char q2x12 = (vector unsigned char)vec_and(vec_sr(qxs1, v4), lowMask);
-            vector unsigned char q2x13 = (vector unsigned char)vec_and(vec_sr(qxs1, v6), lowMask);
-
-            vector signed char q8y00 = vec_xl(  0, q8);
-            vector signed char q8y10 = vec_xl( 16, q8);
-            vector signed char q8y01 = vec_xl( 32, q8);
-            vector signed char q8y11 = vec_xl( 48, q8);
-            vector signed char q8y02 = vec_xl( 64, q8);
-            vector signed char q8y12 = vec_xl( 80, q8);
-            vector signed char q8y03 = vec_xl( 96, q8);
-            vector signed char q8y13 = vec_xl(112, q8);
-            q8 += 128;
-
-            vector signed int qv0 = vec_msum(q8y00, q2x00, v0);
-            vector signed int qv1 = vec_msum(q8y01, q2x01, v0);
-            vector signed int qv2 = vec_msum(q8y02, q2x02, v0);
-            vector signed int qv3 = vec_msum(q8y03, q2x03, v0);
-            vector signed int qv4 = vec_msum(q8y10, q2x10, v0);
-            vector signed int qv5 = vec_msum(q8y11, q2x11, v0);
-            vector signed int qv6 = vec_msum(q8y12, q2x12, v0);
-            vector signed int qv7 = vec_msum(q8y13, q2x13, v0);
-
-            vector signed short vscales_07 = vec_unpackh(vscales);
-            vector signed int vscales_03 = vec_unpackh(vscales_07);
-            vector signed int vscales_47 = vec_unpackl(vscales_07);
-            vector signed int vs0 = vec_splat(vscales_03, 0);
-            vector signed int vs1 = vec_splat(vscales_03, 1);
-            vector signed int vs2 = vec_splat(vscales_03, 2);
-            vector signed int vs3 = vec_splat(vscales_03, 3);
-            vector signed int vs4 = vec_splat(vscales_47, 0);
-            vector signed int vs5 = vec_splat(vscales_47, 1);
-            vector signed int vs6 = vec_splat(vscales_47, 2);
-            vector signed int vs7 = vec_splat(vscales_47, 3);
-            vscales = vec_sld(vscales, vscales, 8);
-
-            vsumi0 = vec_add(vec_mul(qv0, vs0), vsumi0);
-            vsumi1 = vec_add(vec_mul(qv1, vs2), vsumi1);
-            vsumi2 = vec_add(vec_mul(qv2, vs4), vsumi2);
-            vsumi3 = vec_add(vec_mul(qv3, vs6), vsumi3);
-            vsumi4 = vec_add(vec_mul(qv4, vs1), vsumi4);
-            vsumi5 = vec_add(vec_mul(qv5, vs3), vsumi5);
-            vsumi6 = vec_add(vec_mul(qv6, vs5), vsumi6);
-            vsumi7 = vec_add(vec_mul(qv7, vs7), vsumi7);
-        }
-
-        vsumi0 = vec_add(vsumi0, vsumi4);
-        vsumi1 = vec_add(vsumi1, vsumi5);
-        vsumi2 = vec_add(vsumi2, vsumi6);
-        vsumi3 = vec_add(vsumi3, vsumi7);
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined __loongarch_asx
-
-    const __m256i m3 = __lasx_xvreplgr2vr_b(3);
-    const __m128i m4 = __lsx_vreplgr2vr_b(0xF);
-
-    __m256 acc = (__m256)__lasx_xvldi(0);
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        const uint8_t * restrict q2 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        const __m128i mins_and_scales = __lsx_vld((const __m128i*)x[i].scales, 0);
-        const __m128i scales8 = __lsx_vand_v(mins_and_scales, m4);
-        const __m128i mins8 = __lsx_vand_v(__lsx_vsrli_h(mins_and_scales, 4), m4);
-        const __m256i mins = lasx_ext8_16(mins8);
-        const __m256i prod = lasx_madd_h(mins, __lasx_xvld((const __m256i*)y[i].bsums, 0));
-
-        acc = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(dmin), __lasx_xvffint_s_w(prod), acc);
-
-        const __m256i all_scales = lasx_ext8_16(scales8);
-        const __m128i l_scales = lasx_extracti128(all_scales, 0);
-        const __m128i h_scales = lasx_extracti128(all_scales, 1);
-        const __m256i scales[2] = {lasx_insertf128(l_scales, l_scales), lasx_insertf128(h_scales, h_scales)};
-
-        __m256i sumi = __lasx_xvldi(0);
-
-        for (int j = 0; j < QK_K/128; ++j) {
-
-            const __m256i q2bits = __lasx_xvld((const __m256i*)q2, 0); q2 += 32;
-
-            const __m256i q8_0 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8_1 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8_2 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8_3 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-
-            const __m256i q2_0 = __lasx_xvand_v(q2bits, m3);
-            const __m256i q2_1 = __lasx_xvand_v(__lasx_xvsrli_h(q2bits, 2), m3);
-            const __m256i q2_2 = __lasx_xvand_v(__lasx_xvsrli_h(q2bits, 4), m3);
-            const __m256i q2_3 = __lasx_xvand_v(__lasx_xvsrli_h(q2bits, 6), m3);
-
-            __m256i p0 = lasx_maddubs_h(q2_0, q8_0);
-            __m256i p1 = lasx_maddubs_h(q2_1, q8_1);
-            __m256i p2 = lasx_maddubs_h(q2_2, q8_2);
-            __m256i p3 = lasx_maddubs_h(q2_3, q8_3);
-
-            p0 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(0)), p0);
-            p1 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(1)), p1);
-            p2 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(2)), p2);
-            p3 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(3)), p3);
-
-            p0 = __lasx_xvadd_w(p0, p1);
-            p2 = __lasx_xvadd_w(p2, p3);
-
-            sumi = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p0, p2));
-        }
-
-        acc = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(sumi), acc);
-
-    }
-
-    *s = hsum_float_8(acc);
-
-#else
-
-    float sumf = 0;
-
-    for (int i = 0; i < nb; ++i) {
-
-        const uint8_t * q2 = x[i].qs;
-        const  int8_t * q8 = y[i].qs;
-        const uint8_t * sc = x[i].scales;
-
-        int summs = 0;
-        for (int j = 0; j < 16; ++j) {
-            summs += y[i].bsums[j] * (sc[j] >> 4);
-        }
-
-        const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        int isum = 0;
-        int is = 0;
-        int d;
-        for (int k = 0; k < QK_K/128; ++k) {
-            int shift = 0;
-            for (int j = 0; j < 4; ++j) {
-                d = sc[is++] & 0xF;
-                int isuml = 0;
-                for (int l =  0; l < 16; ++l) isuml += q8[l] * ((q2[l] >> shift) & 3);
-                isum += d * isuml;
-                d = sc[is++] & 0xF;
-                isuml = 0;
-                for (int l = 16; l < 32; ++l) isuml += q8[l] * ((q2[l] >> shift) & 3);
-                isum += d * isuml;
-                shift += 2;
-                q8 += 32;
-            }
-            q2 += 32;
-        }
-        sumf += dall * isum - dmin * summs;
-    }
-    *s = sumf;
-#endif
-}
-
-void ggml_vec_dot_q3_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const uint32_t kmask1 = 0x03030303;
-    const uint32_t kmask2 = 0x0f0f0f0f;
-
-    const block_q3_K * restrict x = vx;
-    const block_q8_K * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-#ifdef __ARM_NEON
-
-    uint32_t aux[3];
-    uint32_t utmp[4];
-
-    const uint8x16_t m3b = vdupq_n_u8(0x3);
-    const int32x4_t  vzero = vdupq_n_s32(0);
-
-    const uint8x16_t m0 = vdupq_n_u8(1);
-    const uint8x16_t m1 = vshlq_n_u8(m0, 1);
-    const uint8x16_t m2 = vshlq_n_u8(m0, 2);
-    const uint8x16_t m3 = vshlq_n_u8(m0, 3);
-    const int8_t m32 = 32;
-
-    ggml_int8x16x4_t q3bytes;
-
-    float sum = 0;
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-
-        const uint8_t * restrict q3 = x[i].qs;
-        const uint8_t * restrict qh = x[i].hmask;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        ggml_uint8x16x2_t qhbits = ggml_vld1q_u8_x2(qh);
-
-        ggml_uint8x16x4_t q3h;
-
-        int32_t isum = 0;
-
-        // Set up scales
-        memcpy(aux, x[i].scales, 12);
-        utmp[3] = ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4);
-        utmp[2] = ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4);
-        utmp[1] = (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4);
-        utmp[0] = (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4);
-
-        int8_t * scale = (int8_t *)utmp;
-        for (int j = 0; j < 16; ++j) scale[j] -= m32;
-
-        for (int j = 0; j < QK_K/128; ++j) {
-
-            const ggml_uint8x16x2_t q3bits = ggml_vld1q_u8_x2(q3); q3 += 32;
-            const ggml_int8x16x4_t q8bytes_1 = ggml_vld1q_s8_x4(q8); q8 += 64;
-            const ggml_int8x16x4_t q8bytes_2 = ggml_vld1q_s8_x4(q8); q8 += 64;
-
-            q3h.val[0] = vshlq_n_u8(vbicq_u8(m0, qhbits.val[0]), 2);
-            q3h.val[1] = vshlq_n_u8(vbicq_u8(m0, qhbits.val[1]), 2);
-            q3h.val[2] = vshlq_n_u8(vbicq_u8(m1, qhbits.val[0]), 1);
-            q3h.val[3] = vshlq_n_u8(vbicq_u8(m1, qhbits.val[1]), 1);
-
-            q3bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(q3bits.val[0], m3b)), vreinterpretq_s8_u8(q3h.val[0]));
-            q3bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(q3bits.val[1], m3b)), vreinterpretq_s8_u8(q3h.val[1]));
-            q3bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[0], 2), m3b)), vreinterpretq_s8_u8(q3h.val[2]));
-            q3bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[1], 2), m3b)), vreinterpretq_s8_u8(q3h.val[3]));
-
-            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[0], q8bytes_1.val[0])) * scale[0];
-            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[1], q8bytes_1.val[1])) * scale[1];
-            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[2], q8bytes_1.val[2])) * scale[2];
-            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[3], q8bytes_1.val[3])) * scale[3];
-
-            scale += 4;
-
-            q3h.val[0] = vbicq_u8(m2, qhbits.val[0]);
-            q3h.val[1] = vbicq_u8(m2, qhbits.val[1]);
-            q3h.val[2] = vshrq_n_u8(vbicq_u8(m3, qhbits.val[0]), 1);
-            q3h.val[3] = vshrq_n_u8(vbicq_u8(m3, qhbits.val[1]), 1);
-
-            q3bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[0], 4), m3b)), vreinterpretq_s8_u8(q3h.val[0]));
-            q3bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[1], 4), m3b)), vreinterpretq_s8_u8(q3h.val[1]));
-            q3bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[0], 6), m3b)), vreinterpretq_s8_u8(q3h.val[2]));
-            q3bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[1], 6), m3b)), vreinterpretq_s8_u8(q3h.val[3]));
-
-            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[0], q8bytes_2.val[0])) * scale[0];
-            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[1], q8bytes_2.val[1])) * scale[1];
-            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[2], q8bytes_2.val[2])) * scale[2];
-            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[3], q8bytes_2.val[3])) * scale[3];
-
-            scale += 4;
-
-            if (j == 0) {
-                qhbits.val[0] = vshrq_n_u8(qhbits.val[0], 4);
-                qhbits.val[1] = vshrq_n_u8(qhbits.val[1], 4);
-            }
-
-        }
-        sum += d * isum;
-
-    }
-
-    *s = sum;
-
-#elif defined __AVX2__
-
-    const __m256i m3 = _mm256_set1_epi8(3);
-    const __m256i mone = _mm256_set1_epi8(1);
-    const __m128i m32 = _mm_set1_epi8(32);
-
-    __m256 acc = _mm256_setzero_ps();
-
-    uint32_t aux[3];
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-
-        const uint8_t * restrict q3 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        // Set up scales
-        memcpy(aux, x[i].scales, 12);
-        __m128i scales128 = _mm_set_epi32(
-                ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4),
-                ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4),
-                (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4),
-                (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4));
-        scales128 = _mm_sub_epi8(scales128, m32);
-        const __m256i all_scales = _mm256_cvtepi8_epi16(scales128);
-        const __m128i l_scales = _mm256_extracti128_si256(all_scales, 0);
-        const __m128i h_scales = _mm256_extracti128_si256(all_scales, 1);
-        const __m256i scales[2] = {MM256_SET_M128I(l_scales, l_scales), MM256_SET_M128I(h_scales, h_scales)};
-
-        // high bit
-        const __m256i hbits = _mm256_loadu_si256((const __m256i*)x[i].hmask);
-
-        // integer accumulator
-        __m256i sumi = _mm256_setzero_si256();
-
-        int bit = 0;
-        int is  = 0;
-
-        for (int j = 0; j < QK_K/128; ++j) {
-            // load low 2 bits
-            const __m256i q3bits = _mm256_loadu_si256((const __m256i*)q3); q3 += 32;
-
-            // prepare low and high bits
-            const __m256i q3l_0 = _mm256_and_si256(q3bits, m3);
-            const __m256i q3h_0 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2);
-            ++bit;
-
-            const __m256i q3l_1 = _mm256_and_si256(_mm256_srli_epi16(q3bits, 2), m3);
-            const __m256i q3h_1 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2);
-            ++bit;
-
-            const __m256i q3l_2 = _mm256_and_si256(_mm256_srli_epi16(q3bits, 4), m3);
-            const __m256i q3h_2 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2);
-            ++bit;
-
-            const __m256i q3l_3 = _mm256_and_si256(_mm256_srli_epi16(q3bits, 6), m3);
-            const __m256i q3h_3 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2);
-            ++bit;
-
-            // load Q8 quants
-            const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8_3 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-
-            // Dot product: we multiply the 2 low bits and 1 high bit part separately, so we can use _mm256_maddubs_epi16,
-            // and then subtract. The high bit part has the 2 already subtracted (and so, it is zero if the high bit was not set,
-            // and 2 if the high bit was set)
-            __m256i q8s_0 = _mm256_maddubs_epi16(q3h_0, q8_0);
-            __m256i q8s_1 = _mm256_maddubs_epi16(q3h_1, q8_1);
-            __m256i q8s_2 = _mm256_maddubs_epi16(q3h_2, q8_2);
-            __m256i q8s_3 = _mm256_maddubs_epi16(q3h_3, q8_3);
-
-            __m256i p16_0 = _mm256_maddubs_epi16(q3l_0, q8_0);
-            __m256i p16_1 = _mm256_maddubs_epi16(q3l_1, q8_1);
-            __m256i p16_2 = _mm256_maddubs_epi16(q3l_2, q8_2);
-            __m256i p16_3 = _mm256_maddubs_epi16(q3l_3, q8_3);
-
-            p16_0 = _mm256_sub_epi16(p16_0, q8s_0);
-            p16_1 = _mm256_sub_epi16(p16_1, q8s_1);
-            p16_2 = _mm256_sub_epi16(p16_2, q8s_2);
-            p16_3 = _mm256_sub_epi16(p16_3, q8s_3);
-
-            // multiply with scales
-            p16_0 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 0)), p16_0);
-            p16_1 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 1)), p16_1);
-            p16_2 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 2)), p16_2);
-            p16_3 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 3)), p16_3);
-
-            // accumulate
-            p16_0 = _mm256_add_epi32(p16_0, p16_1);
-            p16_2 = _mm256_add_epi32(p16_2, p16_3);
-            sumi  = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_2));
-
-        }
-
-        // multiply with block scale and accumulate
-        acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc);
-
-    }
-
-    *s = hsum_float_8(acc);
-
-#elif defined __AVX__
-
-    const __m128i m3 = _mm_set1_epi8(3);
-    const __m128i mone = _mm_set1_epi8(1);
-    const __m128i m32 = _mm_set1_epi8(32);
-    const __m128i m2 = _mm_set1_epi8(2);
-
-    __m256 acc = _mm256_setzero_ps();
-
-    const uint32_t *aux;
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-
-        const uint8_t * restrict q3 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        // Set up scales
-        aux = (const uint32_t *)x[i].scales;
-        __m128i scales128 = _mm_set_epi32(
-                ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4),
-                ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4),
-                (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4),
-                (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4));
-        scales128 = _mm_sub_epi8(scales128, m32);
-        const __m128i scales_0 = _mm_cvtepi8_epi16(scales128);
-        const __m128i scales_1 = _mm_cvtepi8_epi16(_mm_unpackhi_epi64(scales128, scales128));
-        const __m128i scales[2] = { scales_0, scales_1 };
-
-        // high bit *128*2 from block_q3_K.hmask[QK_K/8]
-        const __m128i hbits_0 = _mm_loadu_si128((const __m128i*)&x[i].hmask[0]);
-        const __m128i hbits_1 = _mm_loadu_si128((const __m128i*)&x[i].hmask[16]);
-
-        // integer accumulator
-        __m128i sumi_0 = _mm_setzero_si128();
-        __m128i sumi_1 = _mm_setzero_si128();
-
-        for (int j = 0; j < QK_K/128; ++j) {
-            // load low 2 bits *64*2 from block_q3_K.qs[QK_K/4]
-            const __m128i q3bits_0 = _mm_loadu_si128((const __m128i*)q3); q3 += 16;
-            const __m128i q3bits_1 = _mm_loadu_si128((const __m128i*)q3); q3 += 16;
-
-            // prepare low and high bits
-            const int bit = j << 2;
-
-            const __m128i q3l_0 = _mm_and_si128(q3bits_0, m3);
-            const __m128i q3l_1 = _mm_and_si128(q3bits_1, m3);
-            const __m128i q3h_0 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit)), bit), 2);
-            const __m128i q3h_1 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit)), bit), 2);
-
-            const __m128i q3l_2 = _mm_and_si128(_mm_srli_epi16(q3bits_0, 2), m3);
-            const __m128i q3l_3 = _mm_and_si128(_mm_srli_epi16(q3bits_1, 2), m3);
-            const __m128i q3h_2 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit+1)), bit+1), 2);
-            const __m128i q3h_3 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit+1)), bit+1), 2);
-
-            const __m128i q3l_4 = _mm_and_si128(_mm_srli_epi16(q3bits_0, 4), m3);
-            const __m128i q3l_5 = _mm_and_si128(_mm_srli_epi16(q3bits_1, 4), m3);
-            const __m128i q3h_4 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit+2)), bit+2), 2);
-            const __m128i q3h_5 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit+2)), bit+2), 2);
-
-            const __m128i q3l_6 = _mm_and_si128(_mm_srli_epi16(q3bits_0, 6), m3);
-            const __m128i q3l_7 = _mm_and_si128(_mm_srli_epi16(q3bits_1, 6), m3);
-            const __m128i q3h_6 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit+3)), bit+3), 2);
-            const __m128i q3h_7 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit+3)), bit+3), 2);
-
-            // load Q8 quants from block_q8_K.qs[QK_K]
-            const __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_2 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_3 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_4 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_5 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_6 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_7 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-
-            // Dot product: we multiply the 2 low bits and 1 high bit part separately, so we can use _mm256_maddubs_epi16,
-            // and then subtract. The high bit part has the 2 already subtracted (and so, it is zero if the high bit was not set,
-            // and 2 if the high bit was set)
-            __m128i q8s_0 = _mm_maddubs_epi16(q3h_0, q8_0);
-            __m128i q8s_1 = _mm_maddubs_epi16(q3h_1, q8_1);
-            __m128i q8s_2 = _mm_maddubs_epi16(q3h_2, q8_2);
-            __m128i q8s_3 = _mm_maddubs_epi16(q3h_3, q8_3);
-            __m128i q8s_4 = _mm_maddubs_epi16(q3h_4, q8_4);
-            __m128i q8s_5 = _mm_maddubs_epi16(q3h_5, q8_5);
-            __m128i q8s_6 = _mm_maddubs_epi16(q3h_6, q8_6);
-            __m128i q8s_7 = _mm_maddubs_epi16(q3h_7, q8_7);
-
-            __m128i p16_0 = _mm_maddubs_epi16(q3l_0, q8_0);
-            __m128i p16_1 = _mm_maddubs_epi16(q3l_1, q8_1);
-            __m128i p16_2 = _mm_maddubs_epi16(q3l_2, q8_2);
-            __m128i p16_3 = _mm_maddubs_epi16(q3l_3, q8_3);
-            __m128i p16_4 = _mm_maddubs_epi16(q3l_4, q8_4);
-            __m128i p16_5 = _mm_maddubs_epi16(q3l_5, q8_5);
-            __m128i p16_6 = _mm_maddubs_epi16(q3l_6, q8_6);
-            __m128i p16_7 = _mm_maddubs_epi16(q3l_7, q8_7);
-
-            p16_0 = _mm_sub_epi16(p16_0, q8s_0);
-            p16_1 = _mm_sub_epi16(p16_1, q8s_1);
-            p16_2 = _mm_sub_epi16(p16_2, q8s_2);
-            p16_3 = _mm_sub_epi16(p16_3, q8s_3);
-            p16_4 = _mm_sub_epi16(p16_4, q8s_4);
-            p16_5 = _mm_sub_epi16(p16_5, q8s_5);
-            p16_6 = _mm_sub_epi16(p16_6, q8s_6);
-            p16_7 = _mm_sub_epi16(p16_7, q8s_7);
-
-            // multiply with scales
-            __m128i shuffle = _mm_set1_epi16(0x0100);
-            p16_0 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_0);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p16_1 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_1);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p16_2 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_2);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p16_3 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_3);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p16_4 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_4);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p16_5 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_5);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p16_6 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_6);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            p16_7 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_7);
-
-            // accumulate
-            p16_0 = _mm_add_epi32(p16_0, p16_1);
-            p16_2 = _mm_add_epi32(p16_2, p16_3);
-            p16_4 = _mm_add_epi32(p16_4, p16_5);
-            p16_6 = _mm_add_epi32(p16_6, p16_7);
-            sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_0, p16_2));
-            sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_4, p16_6));
-
-        }
-
-        // multiply with block scale and accumulate
-        __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0);
-        acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi)), acc);
-
-    }
-
-    *s = hsum_float_8(acc);
-
-#elif defined __riscv_v_intrinsic
-
-    uint32_t aux[3];
-    uint32_t utmp[4];
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-
-        const uint8_t * restrict q3 = x[i].qs;
-        const uint8_t * restrict qh = x[i].hmask;
-        const  int8_t * restrict q8 = y[i].qs;
-
-        memcpy(aux, x[i].scales, 12);
-        utmp[3] = ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4);
-        utmp[2] = ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4);
-        utmp[1] = (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4);
-        utmp[0] = (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4);
-
-        int8_t * scale = (int8_t *)utmp;
-        for (int j = 0; j < 16; ++j) scale[j] -= 32;
-
-
-        size_t vl = 32;
-        uint8_t m =  1;
-
-        vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1);
-        vuint8m1_t vqh = __riscv_vle8_v_u8m1(qh, vl);
-
-        int sum_t = 0;
-
-        for (int j = 0; j < QK_K; j += 128) {
-
-            vl = 32;
-
-            // load Q3
-            vuint8m1_t q3_x = __riscv_vle8_v_u8m1(q3, vl);
-
-            vint8m1_t q3_0 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q3_x, 0x03, vl));
-            vint8m1_t q3_1 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x2, vl), 0x03 , vl));
-            vint8m1_t q3_2 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x4, vl), 0x03 , vl));
-            vint8m1_t q3_3 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x6, vl), 0x03 , vl));
-
-            // compute mask for subtraction
-            vuint8m1_t qh_m0 = __riscv_vand_vx_u8m1(vqh, m, vl);
-            vbool8_t vmask_0 = __riscv_vmseq_vx_u8m1_b8(qh_m0, 0, vl);
-            vint8m1_t q3_m0 = __riscv_vsub_vx_i8m1_m(vmask_0, q3_0, 0x4, vl);
-            m <<= 1;
-
-            vuint8m1_t qh_m1 = __riscv_vand_vx_u8m1(vqh, m, vl);
-            vbool8_t vmask_1 = __riscv_vmseq_vx_u8m1_b8(qh_m1, 0, vl);
-            vint8m1_t q3_m1 = __riscv_vsub_vx_i8m1_m(vmask_1, q3_1, 0x4, vl);
-            m <<= 1;
-
-            vuint8m1_t qh_m2 = __riscv_vand_vx_u8m1(vqh, m, vl);
-            vbool8_t vmask_2 = __riscv_vmseq_vx_u8m1_b8(qh_m2, 0, vl);
-            vint8m1_t q3_m2 = __riscv_vsub_vx_i8m1_m(vmask_2, q3_2, 0x4, vl);
-            m <<= 1;
-
-            vuint8m1_t qh_m3 = __riscv_vand_vx_u8m1(vqh, m, vl);
-            vbool8_t vmask_3 = __riscv_vmseq_vx_u8m1_b8(qh_m3, 0, vl);
-            vint8m1_t q3_m3 = __riscv_vsub_vx_i8m1_m(vmask_3, q3_3, 0x4, vl);
-            m <<= 1;
-
-            // load Q8 and take product with Q3
-            vint16m2_t a0 = __riscv_vwmul_vv_i16m2(q3_m0, __riscv_vle8_v_i8m1(q8, vl), vl);
-            vint16m2_t a1 = __riscv_vwmul_vv_i16m2(q3_m1, __riscv_vle8_v_i8m1(q8+32, vl), vl);
-            vint16m2_t a2 = __riscv_vwmul_vv_i16m2(q3_m2, __riscv_vle8_v_i8m1(q8+64, vl), vl);
-            vint16m2_t a3 = __riscv_vwmul_vv_i16m2(q3_m3, __riscv_vle8_v_i8m1(q8+96, vl), vl);
-
-            vl = 16;
-
-            // retrieve lane to multiply with scale
-            vint32m2_t aux0_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a0, 0), (scale[0]), vl);
-            vint32m2_t aux0_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a0, 1), (scale[1]), vl);
-            vint32m2_t aux1_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a1, 0), (scale[2]), vl);
-            vint32m2_t aux1_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a1, 1), (scale[3]), vl);
-            vint32m2_t aux2_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a2, 0), (scale[4]), vl);
-            vint32m2_t aux2_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a2, 1), (scale[5]), vl);
-            vint32m2_t aux3_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a3, 0), (scale[6]), vl);
-            vint32m2_t aux3_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a3, 1), (scale[7]), vl);
-
-            vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux0_0, aux0_1, vl), vzero, vl);
-            vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux1_0, aux1_1, vl), isum0, vl);
-            vint32m1_t isum2 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux2_0, aux2_1, vl), isum1, vl);
-            vint32m1_t isum3 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux3_0, aux3_1, vl), isum2, vl);
-
-            sum_t +=  __riscv_vmv_x_s_i32m1_i32(isum3);
-
-            q3 += 32;    q8 += 128;   scale += 8;
-
-        }
-
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-
-        sumf += d*sum_t;
-
-    }
-
-    *s = sumf;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0x3);
-    const vector signed char lowMask1 = vec_splats((int8_t)0xf);
-    const vector signed char lowMask2 = vec_splats((int8_t)0x30);
-    const vector int v0 = vec_splats((int32_t)0);
-    const vector signed char v1 = vec_splats((signed char)0x1);
-    const vector unsigned char v2 = vec_splats((unsigned char)0x2);
-    const vector unsigned char v3 = vec_splats((unsigned char)0x3);
-    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
-    const vector unsigned char v6 = vec_splats((unsigned char)0x6);
-    const vector signed char off = vec_splats((signed char)0x20);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        UNUSED(kmask1);
-        UNUSED(kmask2);
-
-        vector signed char u0 = (vector signed char)vec_xl_len(x[i].scales, 8);
-        vector signed char u1 = vec_and(u0, lowMask1);
-        vector signed char u2 = (vector signed char)vec_xl_len(x[i].scales + 8, 4);
-        vector signed char u3 = (vector signed char)vec_mergeh((vector signed int)u2, (vector signed int)vec_sr(u2, v2));
-        vector signed char u30 = vec_sl(vec_and(u3, lowMask), v4);
-        vector signed char u31 = vec_and(u3, lowMask2);
-
-        u1 = vec_or(u1, u30);
-        u2 = vec_or(vec_sr(u0, v4), u31);
-
-        vector signed char vscales = (vector signed char)vec_mergeh((vector signed long long)u1, (vector signed long long)u2);
-        vector signed char qxhs0 = (vector signed char)vec_xl( 0, x[i].hmask);
-        vector signed char qxhs1 = (vector signed char)vec_xl(16, x[i].hmask);
-
-        vscales = vec_sub(vscales, off);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-        vector signed int vsumi4 = v0;
-        vector signed int vsumi5 = v0;
-        vector signed int vsumi6 = v0;
-        vector signed int vsumi7 = v0;
-
-        const uint8_t * restrict q3 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        for (int j = 0; j < QK_K/128; ++j) {
-            __builtin_prefetch(q3, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            vector signed char qxs0 = (vector signed char)vec_xl( 0, q3);
-            vector signed char qxs1 = (vector signed char)vec_xl(16, q3);
-            q3 += 32;
-
-            //the low 2 bits
-            vector signed char qxs00 = vec_and(qxs0, lowMask);
-            vector signed char qxs01 = vec_and(vec_sr(qxs0, v2), lowMask);
-            vector signed char qxs02 = vec_and(vec_sr(qxs0, v4), lowMask);
-            vector signed char qxs03 = vec_and(vec_sr(qxs0, v6), lowMask);
-            vector signed char qxs10 = vec_and(qxs1, lowMask);
-            vector signed char qxs11 = vec_and(vec_sr(qxs1, v2), lowMask);
-            vector signed char qxs12 = vec_and(vec_sr(qxs1, v4), lowMask);
-            vector signed char qxs13 = vec_and(vec_sr(qxs1, v6), lowMask);
-
-            //the 3rd bit
-            vector signed char qxh00 = vec_sl(vec_andc(v1, qxhs0), v2);
-            vector signed char qxh01 = vec_sl(vec_andc(v1, vec_sr(qxhs0, (vector unsigned char)v1)), v2);
-            vector signed char qxh02 = vec_sl(vec_andc(v1, vec_sr(qxhs0, v2)), v2);
-            vector signed char qxh03 = vec_sl(vec_andc(v1, vec_sr(qxhs0, v3)), v2);
-            vector signed char qxh10 = vec_sl(vec_andc(v1, qxhs1), v2);
-            vector signed char qxh11 = vec_sl(vec_andc(v1, vec_sr(qxhs1, (vector unsigned char)v1)), v2);
-            vector signed char qxh12 = vec_sl(vec_andc(v1, vec_sr(qxhs1, v2)), v2);
-            vector signed char qxh13 = vec_sl(vec_andc(v1, vec_sr(qxhs1, v3)), v2);
-            qxhs0 = vec_sr(qxhs0, v4);
-            qxhs1 = vec_sr(qxhs1, v4);
-
-            vector signed char q3x00 = vec_sub(qxs00, qxh00);
-            vector signed char q3x01 = vec_sub(qxs01, qxh01);
-            vector signed char q3x02 = vec_sub(qxs02, qxh02);
-            vector signed char q3x03 = vec_sub(qxs03, qxh03);
-            vector signed char q3x10 = vec_sub(qxs10, qxh10);
-            vector signed char q3x11 = vec_sub(qxs11, qxh11);
-            vector signed char q3x12 = vec_sub(qxs12, qxh12);
-            vector signed char q3x13 = vec_sub(qxs13, qxh13);
-
-            vector signed char q8y00 = vec_xl(  0, q8);
-            vector signed char q8y10 = vec_xl( 16, q8);
-            vector signed char q8y01 = vec_xl( 32, q8);
-            vector signed char q8y11 = vec_xl( 48, q8);
-            vector signed char q8y02 = vec_xl( 64, q8);
-            vector signed char q8y12 = vec_xl( 80, q8);
-            vector signed char q8y03 = vec_xl( 96, q8);
-            vector signed char q8y13 = vec_xl(112, q8);
-            q8 += 128;
-
-            vector signed short vscales_h = vec_unpackh(vscales);
-            vector signed short vs0 = vec_splat(vscales_h, 0);
-            vector signed short vs1 = vec_splat(vscales_h, 1);
-            vector signed short vs2 = vec_splat(vscales_h, 2);
-            vector signed short vs3 = vec_splat(vscales_h, 3);
-            vector signed short vs4 = vec_splat(vscales_h, 4);
-            vector signed short vs5 = vec_splat(vscales_h, 5);
-            vector signed short vs6 = vec_splat(vscales_h, 6);
-            vector signed short vs7 = vec_splat(vscales_h, 7);
-            vscales = vec_sld(vscales, vscales, 8);
-
-            vector signed short qv00 = vec_add(vec_mule(q3x00, q8y00), vec_mulo(q3x00, q8y00));
-            vector signed short qv01 = vec_add(vec_mule(q3x01, q8y01), vec_mulo(q3x01, q8y01));
-            vector signed short qv02 = vec_add(vec_mule(q3x02, q8y02), vec_mulo(q3x02, q8y02));
-            vector signed short qv03 = vec_add(vec_mule(q3x03, q8y03), vec_mulo(q3x03, q8y03));
-            vector signed short qv10 = vec_add(vec_mule(q3x10, q8y10), vec_mulo(q3x10, q8y10));
-            vector signed short qv11 = vec_add(vec_mule(q3x11, q8y11), vec_mulo(q3x11, q8y11));
-            vector signed short qv12 = vec_add(vec_mule(q3x12, q8y12), vec_mulo(q3x12, q8y12));
-            vector signed short qv13 = vec_add(vec_mule(q3x13, q8y13), vec_mulo(q3x13, q8y13));
-
-            vsumi0 = vec_msum(qv00, vs0, vsumi0);
-            vsumi1 = vec_msum(qv01, vs2, vsumi1);
-            vsumi2 = vec_msum(qv02, vs4, vsumi2);
-            vsumi3 = vec_msum(qv03, vs6, vsumi3);
-            vsumi4 = vec_msum(qv10, vs1, vsumi4);
-            vsumi5 = vec_msum(qv11, vs3, vsumi5);
-            vsumi6 = vec_msum(qv12, vs5, vsumi6);
-            vsumi7 = vec_msum(qv13, vs7, vsumi7);
-        }
-
-        vsumi0 = vec_add(vsumi0, vsumi4);
-        vsumi1 = vec_add(vsumi1, vsumi5);
-        vsumi2 = vec_add(vsumi2, vsumi6);
-        vsumi3 = vec_add(vsumi3, vsumi7);
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined __loongarch_asx
-
-    const __m256i m3 = __lasx_xvreplgr2vr_b(3);
-    const __m256i mone = __lasx_xvreplgr2vr_b(1);
-    const __m128i m32 = __lsx_vreplgr2vr_b(32);
-
-    __m256 acc = (__m256)__lasx_xvldi(0);
-
-    uint32_t aux[3];
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const uint8_t * restrict q3 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-        // Set up scales
-        memcpy(aux, x[i].scales, 12);
-        __m128i scales128 = lsx_set_w(
-                ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4),
-                ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4),
-                (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4),
-                (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4));
-        scales128 = __lsx_vsub_b(scales128, m32);
-        const __m256i all_scales = lasx_ext8_16(scales128);
-        const __m128i l_scales = lasx_extracti128(all_scales, 0);
-        const __m128i h_scales = lasx_extracti128(all_scales, 1);
-        const __m256i scales[2] = {lasx_insertf128(l_scales, l_scales), lasx_insertf128(h_scales, h_scales)};
-
-        // high bit
-        const __m256i hbits = __lasx_xvld((const __m256i*)x[i].hmask, 0);
-
-        // integer accumulator
-        __m256i sumi = __lasx_xvldi(0);
-
-        int bit = 0;
-        int is  = 0;
-        __m256i xvbit;
-
-
-        for (int j = 0; j < QK_K/128; ++j) {
-            // load low 2 bits
-            const __m256i q3bits = __lasx_xvld((const __m256i*)q3, 0); q3 += 32;
-
-            xvbit = __lasx_xvreplgr2vr_h(bit);
-            // prepare low and high bits
-            const __m256i q3l_0 = __lasx_xvand_v(q3bits, m3);
-            const __m256i q3h_0 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvandn_v(hbits, __lasx_xvsll_h(mone, xvbit)), xvbit), 2);
-            ++bit;
-
-            xvbit = __lasx_xvreplgr2vr_h(bit);
-            const __m256i q3l_1 = __lasx_xvand_v(__lasx_xvsrli_h(q3bits, 2), m3);
-            const __m256i q3h_1 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvandn_v(hbits, __lasx_xvsll_h(mone, xvbit)), xvbit), 2);
-            ++bit;
-
-            xvbit = __lasx_xvreplgr2vr_h(bit);
-            const __m256i q3l_2 = __lasx_xvand_v(__lasx_xvsrli_h(q3bits, 4), m3);
-            const __m256i q3h_2 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvandn_v(hbits, __lasx_xvsll_h(mone, xvbit)), xvbit), 2);
-            ++bit;
-
-            xvbit = __lasx_xvreplgr2vr_h(bit);
-            const __m256i q3l_3 = __lasx_xvand_v(__lasx_xvsrli_h(q3bits, 6), m3);
-            const __m256i q3h_3 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvandn_v(hbits, __lasx_xvsll_h(mone, xvbit)), xvbit), 2);
-            ++bit;
-
-            // load Q8 quants
-            const __m256i q8_0 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8_1 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8_2 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8_3 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-
-            // Dot product: we multiply the 2 low bits and 1 high bit part separately, so we can use lasx_maddubs_h,
-            // and then subtract. The high bit part has the 2 already subtracted (and so, it is zero if the high bit was not set,
-            // and 2 if the high bit was set)
-            __m256i q8s_0 = lasx_maddubs_h(q3h_0, q8_0);
-            __m256i q8s_1 = lasx_maddubs_h(q3h_1, q8_1);
-            __m256i q8s_2 = lasx_maddubs_h(q3h_2, q8_2);
-            __m256i q8s_3 = lasx_maddubs_h(q3h_3, q8_3);
-
-            __m256i p16_0 = lasx_maddubs_h(q3l_0, q8_0);
-            __m256i p16_1 = lasx_maddubs_h(q3l_1, q8_1);
-            __m256i p16_2 = lasx_maddubs_h(q3l_2, q8_2);
-            __m256i p16_3 = lasx_maddubs_h(q3l_3, q8_3);
-
-            p16_0 = __lasx_xvsub_h(p16_0, q8s_0);
-            p16_1 = __lasx_xvsub_h(p16_1, q8s_1);
-            p16_2 = __lasx_xvsub_h(p16_2, q8s_2);
-            p16_3 = __lasx_xvsub_h(p16_3, q8s_3);
-
-            // multiply with scales
-            p16_0 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(is + 0)), p16_0);
-            p16_1 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(is + 1)), p16_1);
-            p16_2 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(is + 2)), p16_2);
-            p16_3 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(is + 3)), p16_3);
-
-            // accumulate
-            p16_0 = __lasx_xvadd_w(p16_0, p16_1);
-            p16_2 = __lasx_xvadd_w(p16_2, p16_3);
-            sumi  = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p16_0, p16_2));
-        }
-        // multiply with block scale and accumulate
-        acc = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(sumi), acc);//FIXME
-    }
-
-    *s = hsum_float_8(acc);
-
-#else
-    // scalar version
-    // This function is written like this so the compiler can manage to vectorize most of it
-    // Using -Ofast, GCC and clang manage to produce code that is within a factor of 2 or so from the
-    // manually vectorized version above. Every other version I tried would run at least 4 times slower.
-    // The ideal situation would be if we could just write the code once, and the compiler would
-    // automatically produce the best possible set of machine instructions, instead of us having to manually
-    // write vectorized versions for AVX, ARM_NEON, etc.
-
-    int8_t  aux8[QK_K];
-    int16_t aux16[8];
-    float   sums [8];
-    int32_t aux32[8];
-    memset(sums, 0, 8*sizeof(float));
-
-    uint32_t auxs[4];
-    const int8_t * scales = (const int8_t*)auxs;
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-        const uint8_t * restrict q3 = x[i].qs;
-        const uint8_t * restrict hm = x[i].hmask;
-        const  int8_t * restrict q8 = y[i].qs;
-        memset(aux32, 0, 8*sizeof(int32_t));
-        int8_t * restrict a = aux8;
-        uint8_t m = 1;
-        for (int j = 0; j < QK_K; j += 128) {
-            for (int l = 0; l < 32; ++l) a[l] = q3[l] & 3;
-            for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4);
-            a += 32; m <<= 1;
-            for (int l = 0; l < 32; ++l) a[l] = (q3[l] >> 2) & 3;
-            for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4);
-            a += 32; m <<= 1;
-            for (int l = 0; l < 32; ++l) a[l] = (q3[l] >> 4) & 3;
-            for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4);
-            a += 32; m <<= 1;
-            for (int l = 0; l < 32; ++l) a[l] = (q3[l] >> 6) & 3;
-            for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4);
-            a += 32; m <<= 1;
-            q3 += 32;
-        }
-        a = aux8;
-
-        memcpy(auxs, x[i].scales, 12);
-        uint32_t tmp = auxs[2];
-        auxs[2] = ((auxs[0] >> 4) & kmask2) | (((tmp >> 4) & kmask1) << 4);
-        auxs[3] = ((auxs[1] >> 4) & kmask2) | (((tmp >> 6) & kmask1) << 4);
-        auxs[0] = (auxs[0] & kmask2) | (((tmp >> 0) & kmask1) << 4);
-        auxs[1] = (auxs[1] & kmask2) | (((tmp >> 2) & kmask1) << 4);
-        for (int j = 0; j < QK_K/16; ++j) {
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += (scales[j] - 32) * aux16[l];
-            q8 += 8; a += 8;
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += (scales[j] - 32) * aux16[l];
-            q8 += 8; a += 8;
-        }
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l];
-    }
-    for (int l = 0; l < 8; ++l) sumf += sums[l];
-    *s = sumf;
-
-#endif
-
-}
-
-void ggml_vec_dot_q4_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_q4_K * restrict x = vx;
-    const block_q8_K * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-    static const uint32_t kmask1 = 0x3f3f3f3f;
-    static const uint32_t kmask2 = 0x0f0f0f0f;
-    static const uint32_t kmask3 = 0x03030303;
-
-    uint32_t utmp[4];
-
-#ifdef __ARM_NEON
-    const uint8x16_t m4b = vdupq_n_u8(0xf);
-    const int32x4_t mzero = vdupq_n_s32(0);
-
-    ggml_int8x16x2_t q4bytes;
-    ggml_int8x16x2_t q8bytes;
-
-    float sumf = 0;
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        const int16x8_t q8sums = vpaddq_s16(vld1q_s16(y[i].bsums), vld1q_s16(y[i].bsums + 8));
-
-        memcpy(utmp, x[i].scales, 12);
-
-        uint32x2_t mins8 = { 0 };
-        mins8 = vset_lane_u32(utmp[1] & kmask1, mins8, 0);
-        mins8 = vset_lane_u32(((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4), mins8, 1);
-
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[0] &= kmask1;
-
-        const int16x8_t mins = vreinterpretq_s16_u16(vmovl_u8(vreinterpret_u8_u32(mins8)));
-        const int32x4_t prod = vaddq_s32(vmull_s16(vget_low_s16 (q8sums), vget_low_s16 (mins)),
-                                         vmull_s16(vget_high_s16(q8sums), vget_high_s16(mins)));
-        sumf -= dmin * vaddvq_s32(prod);
-
-        const uint8_t * scales = (const uint8_t *)utmp;
-
-        const uint8_t * restrict q4 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        int32_t sumi1 = 0;
-        int32_t sumi2 = 0;
-
-        for (int j = 0; j < QK_K/64; ++j) {
-            const ggml_uint8x16x2_t q4bits = ggml_vld1q_u8_x2(q4); q4 += 32;
-
-            q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32;
-            q4bytes.val[0] = vreinterpretq_s8_u8(vandq_u8  (q4bits.val[0], m4b));
-            q4bytes.val[1] = vreinterpretq_s8_u8(vandq_u8  (q4bits.val[1], m4b));
-
-            const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(mzero, q4bytes.val[0], q8bytes.val[0]), q4bytes.val[1], q8bytes.val[1]);
-            sumi1 += vaddvq_s32(p1) * scales[2*j+0];
-
-            q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32;
-            q4bytes.val[0] = vreinterpretq_s8_u8(vshrq_n_u8(q4bits.val[0], 4));
-            q4bytes.val[1] = vreinterpretq_s8_u8(vshrq_n_u8(q4bits.val[1], 4));
-
-            const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(mzero, q4bytes.val[0], q8bytes.val[0]), q4bytes.val[1], q8bytes.val[1]);
-
-            sumi2 += vaddvq_s32(p2) * scales[2*j+1];
-        }
-
-        sumf += d * (sumi1 + sumi2);
-
-    }
-
-    *s = sumf;
-
-#elif defined __AVX2__
-
-    const __m256i m4 = _mm256_set1_epi8(0xF);
-
-    __m256 acc = _mm256_setzero_ps();
-    __m128 acc_m = _mm_setzero_ps();
-
-   for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        const uint8_t * restrict q4 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        const __m256i mins_and_scales = _mm256_cvtepu8_epi16(_mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0]));
-
-        const __m256i q8sums = _mm256_loadu_si256((const __m256i*)y[i].bsums);
-        const __m128i q8s = _mm_hadd_epi16(_mm256_extracti128_si256(q8sums, 0), _mm256_extracti128_si256(q8sums, 1));
-        const __m128i prod = _mm_madd_epi16(_mm256_extracti128_si256(mins_and_scales, 1), q8s);
-        acc_m = _mm_fmadd_ps(_mm_set1_ps(dmin), _mm_cvtepi32_ps(prod), acc_m);
-
-        const __m128i sc128  = _mm256_extracti128_si256(mins_and_scales, 0);
-        const __m256i scales = MM256_SET_M128I(sc128, sc128);
-
-        __m256i sumi = _mm256_setzero_si256();
-
-        for (int j = 0; j < QK_K/64; ++j) {
-
-            const __m256i scale_l = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+0));
-            const __m256i scale_h = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+1));
-
-            const __m256i q4bits = _mm256_loadu_si256((const __m256i*)q4); q4 += 32;
-            const __m256i q4l = _mm256_and_si256(q4bits, m4);
-            const __m256i q4h = _mm256_and_si256(_mm256_srli_epi16(q4bits, 4), m4);
-
-            const __m256i q8l = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            __m256i p16l = _mm256_maddubs_epi16(q4l, q8l);
-            p16l = _mm256_madd_epi16(scale_l, p16l);
-
-            const __m256i q8h = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            __m256i p16h = _mm256_maddubs_epi16(q4h, q8h);
-            p16h = _mm256_madd_epi16(scale_h, p16h);
-            const __m256i sumj = _mm256_add_epi32(p16l, p16h);
-
-            sumi = _mm256_add_epi32(sumi, sumj);
-        }
-
-        __m256 vd = _mm256_set1_ps(d);
-        acc = _mm256_fmadd_ps(vd, _mm256_cvtepi32_ps(sumi), acc);
-
-    }
-
-    acc_m = _mm_add_ps(acc_m, _mm_movehl_ps(acc_m, acc_m));
-    acc_m = _mm_add_ss(acc_m, _mm_movehdup_ps(acc_m));
-
-    *s = hsum_float_8(acc) + _mm_cvtss_f32(acc_m);
-
-#elif defined __AVX__
-
-    const __m128i m4 = _mm_set1_epi8(0xF);
-    const __m128i m2 = _mm_set1_epi8(0x2);
-
-    __m256 acc = _mm256_setzero_ps();
-    __m128 acc_m = _mm_setzero_ps();
-
-   for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        const uint8_t * restrict q4 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        const __m128i utmps = _mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0]);
-        const __m128i scales = _mm_cvtepu8_epi16(utmps);
-        const __m128i mins = _mm_cvtepu8_epi16(_mm_unpackhi_epi64(utmps, utmps));
-
-        const __m128i q8sums_0 = _mm_loadu_si128((const __m128i*)&y[i].bsums[0]);
-        const __m128i q8sums_1 = _mm_loadu_si128((const __m128i*)&y[i].bsums[8]);
-        const __m128i q8s = _mm_hadd_epi16(q8sums_0, q8sums_1);
-        const __m128i prod = _mm_madd_epi16(mins, q8s);
-        acc_m = _mm_add_ps(_mm_mul_ps(_mm_set1_ps(dmin), _mm_cvtepi32_ps(prod)), acc_m);
-
-        __m128i sumi_0 = _mm_setzero_si128();
-        __m128i sumi_1 = _mm_setzero_si128();
-
-        __m128i shuffle = _mm_set1_epi16(0x0100);
-        for (int j = 0; j < QK_K/64; ++j) {
-
-            const __m128i scale_l = _mm_shuffle_epi8(scales, shuffle);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            const __m128i scale_h = _mm_shuffle_epi8(scales, shuffle);
-            shuffle = _mm_add_epi16(shuffle, m2);
-
-            __m128i q4bits = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
-            const __m128i q4l_0 = _mm_and_si128(q4bits, m4);
-            const __m128i q4h_0 = _mm_and_si128(_mm_srli_epi16(q4bits, 4), m4);
-            q4bits = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
-            const __m128i q4l_1 = _mm_and_si128(q4bits, m4);
-            const __m128i q4h_1 = _mm_and_si128(_mm_srli_epi16(q4bits, 4), m4);
-
-            const __m128i q8l_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            __m128i p16l = _mm_maddubs_epi16(q4l_0, q8l_0);
-            p16l = _mm_madd_epi16(scale_l, p16l);
-            sumi_0 = _mm_add_epi32(sumi_0, p16l);
-            const __m128i q8l_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            p16l = _mm_maddubs_epi16(q4l_1, q8l_1);
-            p16l = _mm_madd_epi16(scale_l, p16l);
-            sumi_1 = _mm_add_epi32(sumi_1, p16l);
-
-            const __m128i q8h_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            __m128i p16h = _mm_maddubs_epi16(q4h_0, q8h_0);
-            p16h = _mm_madd_epi16(scale_h, p16h);
-            sumi_0 = _mm_add_epi32(sumi_0, p16h);
-            const __m128i q8h_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            p16h = _mm_maddubs_epi16(q4h_1, q8h_1);
-            p16h = _mm_madd_epi16(scale_h, p16h);
-            sumi_1 = _mm_add_epi32(sumi_1, p16h);
-
-        }
-
-        __m256 vd = _mm256_set1_ps(d);
-        __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0);
-        acc = _mm256_add_ps(_mm256_mul_ps(vd, _mm256_cvtepi32_ps(sumi)), acc);
-
-    }
-
-    acc_m = _mm_add_ps(acc_m, _mm_movehl_ps(acc_m, acc_m));
-    acc_m = _mm_add_ss(acc_m, _mm_movehdup_ps(acc_m));
-
-    *s = hsum_float_8(acc) + _mm_cvtss_f32(acc_m);
-
-#elif defined __riscv_v_intrinsic
-
-    const uint8_t * scales = (const uint8_t*)&utmp[0];
-    const uint8_t * mins   = (const uint8_t*)&utmp[2];
-
-    float sumf = 0;
-
-    for (int i = 0; i < nb; ++i) {
-
-        size_t vl = 8;
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        vint16mf2_t q8sums_0 = __riscv_vlse16_v_i16mf2(y[i].bsums, 4, vl);
-        vint16mf2_t q8sums_1 = __riscv_vlse16_v_i16mf2(y[i].bsums+1, 4, vl);
-        vint16mf2_t q8sums   = __riscv_vadd_vv_i16mf2(q8sums_0, q8sums_1, vl);
-
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        vuint8mf4_t mins8  = __riscv_vle8_v_u8mf4(mins, vl);
-        vint16mf2_t v_mins = __riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vzext_vf2_u16mf2(mins8, vl));
-        vint32m1_t  prod   = __riscv_vwmul_vv_i32m1(q8sums, v_mins, vl);
-
-        vint32m1_t sumi = __riscv_vredsum_vs_i32m1_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl);
-        sumf -= dmin * __riscv_vmv_x_s_i32m1_i32(sumi);
-
-        const uint8_t * restrict q4 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        vl = 32;
-
-        int32_t sum_1 = 0;
-        int32_t sum_2 = 0;
-
-        vint16m1_t vzero = __riscv_vmv_v_x_i16m1(0, 1);
-
-        for (int j = 0; j < QK_K/64; ++j) {
-            // load Q4
-            vuint8m1_t q4_x = __riscv_vle8_v_u8m1(q4, vl);
-
-            // load Q8 and multiply it with lower Q4 nibble
-            vint8m1_t  q8_0 = __riscv_vle8_v_i8m1(q8, vl);
-            vint8m1_t  q4_0 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q4_x, 0x0F, vl));
-            vint16m2_t qv_0 = __riscv_vwmul_vv_i16m2(q4_0, q8_0, vl);
-            vint16m1_t vs_0 = __riscv_vredsum_vs_i16m2_i16m1(qv_0, vzero, vl);
-
-            sum_1 += __riscv_vmv_x_s_i16m1_i16(vs_0) * scales[2*j+0];
-
-            // load Q8 and multiply it with upper Q4 nibble
-            vint8m1_t  q8_1 = __riscv_vle8_v_i8m1(q8+32, vl);
-            vint8m1_t  q4_1 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vsrl_vx_u8m1(q4_x, 0x04, vl));
-            vint16m2_t qv_1 = __riscv_vwmul_vv_i16m2(q4_1, q8_1, vl);
-            vint16m1_t vs_1 = __riscv_vredsum_vs_i16m2_i16m1(qv_1, vzero, vl);
-
-            sum_2 += __riscv_vmv_x_s_i16m1_i16(vs_1) * scales[2*j+1];
-
-            q4 += 32;    q8 += 64;
-
-        }
-
-        sumf += d*(sum_1 + sum_2);
-
-    }
-
-    *s = sumf;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0xF);
-    const vector signed char lowMask1 = vec_splats((int8_t)0x3f);
-    const vector signed char lowMask2 = vec_splats((int8_t)0x30);
-    const vector int v0 = vec_splats((int32_t)0);
-    const vector unsigned char v2 = vec_splats((uint8_t)2);
-    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector float vxmin = vec_splats(GGML_FP16_TO_FP32(x[i].dmin));
-        vector float vdmin = vec_mul(vxmin, vyd);
-
-        vector signed short q8ysums0 = vec_xl( 0, y[i].bsums);
-        vector signed short q8ysums1 = vec_xl(16, y[i].bsums);
-
-        UNUSED(kmask1);
-        UNUSED(kmask2);
-        UNUSED(kmask3);
-        UNUSED(utmp);
-
-        vector signed char u0 = (vector signed char)vec_xl_len(x[i].scales, 8);
-        vector signed char u1 = vec_and(vec_sr(u0, v2), lowMask2);
-        vector signed char u2 = (vector signed char)vec_xl_len(x[i].scales + 8, 4);
-        vector signed char u3 = vec_sr(u2, v4);
-
-        vector signed char u30 = u1;
-        vector signed char u31 = (vector signed char)vec_mergeh((vector signed int)vec_and(u2, lowMask), (vector signed int)u3);
-
-        u1 = vec_and(u0, lowMask1);
-        u2 = vec_or(u30, u31);
-
-        vector signed char utmps = (vector signed char)vec_mergeh((vector signed int)u1, (vector signed int)u2);
-
-        vector signed short vscales = vec_unpackh(utmps);
-        vector signed short q4xmins = vec_unpackl(utmps);
-        vector signed short q4xmins0 = vec_mergeh(q4xmins, q4xmins);
-        vector signed short q4xmins1 = vec_mergel(q4xmins, q4xmins);
-
-        vector signed int prod0 = vec_mule(q4xmins0, q8ysums0);
-        vector signed int prod1 = vec_mule(q4xmins1, q8ysums1);
-        vector signed int prod2 = vec_mulo(q4xmins0, q8ysums0);
-        vector signed int prod3 = vec_mulo(q4xmins1, q8ysums1);
-
-        vsumf0 = vec_nmsub(vec_ctf(prod0, 0), vdmin, vsumf0);
-        vsumf1 = vec_nmsub(vec_ctf(prod1, 0), vdmin, vsumf1);
-        vsumf2 = vec_nmsub(vec_ctf(prod2, 0), vdmin, vsumf2);
-        vsumf3 = vec_nmsub(vec_ctf(prod3, 0), vdmin, vsumf3);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-
-        const uint8_t * restrict q4 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        for (int j = 0; j < QK_K/64; j+=2) {
-            __builtin_prefetch(q4, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            vector signed char qxs0 = (vector signed char)vec_xl( 0, q4);
-            vector signed char qxs1 = (vector signed char)vec_xl(16, q4);
-            vector signed char qxs2 = (vector signed char)vec_xl(32, q4);
-            vector signed char qxs3 = (vector signed char)vec_xl(48, q4);
-            q4 += 64;
-
-            vector unsigned char q4x00 = (vector unsigned char)vec_and(qxs0, lowMask);
-            vector unsigned char q4x01 = (vector unsigned char)vec_sr(qxs0, v4);
-            vector unsigned char q4x10 = (vector unsigned char)vec_and(qxs1, lowMask);
-            vector unsigned char q4x11 = (vector unsigned char)vec_sr(qxs1, v4);
-            vector unsigned char q4x20 = (vector unsigned char)vec_and(qxs2, lowMask);
-            vector unsigned char q4x21 = (vector unsigned char)vec_sr(qxs2, v4);
-            vector unsigned char q4x30 = (vector unsigned char)vec_and(qxs3, lowMask);
-            vector unsigned char q4x31 = (vector unsigned char)vec_sr(qxs3, v4);
-
-            vector signed char q8y00 = vec_xl(  0, q8);
-            vector signed char q8y10 = vec_xl( 16, q8);
-            vector signed char q8y01 = vec_xl( 32, q8);
-            vector signed char q8y11 = vec_xl( 48, q8);
-            vector signed char q8y20 = vec_xl( 64, q8);
-            vector signed char q8y30 = vec_xl( 80, q8);
-            vector signed char q8y21 = vec_xl( 96, q8);
-            vector signed char q8y31 = vec_xl(112, q8);
-            q8 += 128;
-
-            vector signed int qv00 = vec_msum(q8y00, q4x00, v0);
-            vector signed int qv01 = vec_msum(q8y01, q4x01, v0);
-            vector signed int qv10 = vec_msum(q8y10, q4x10, v0);
-            vector signed int qv11 = vec_msum(q8y11, q4x11, v0);
-            vector signed int qv20 = vec_msum(q8y20, q4x20, v0);
-            vector signed int qv21 = vec_msum(q8y21, q4x21, v0);
-            vector signed int qv30 = vec_msum(q8y30, q4x30, v0);
-            vector signed int qv31 = vec_msum(q8y31, q4x31, v0);
-
-            vector signed int vscales_h = vec_unpackh(vscales);
-            vector signed int vs0 = vec_splat(vscales_h, 0);
-            vector signed int vs1 = vec_splat(vscales_h, 1);
-            vector signed int vs2 = vec_splat(vscales_h, 2);
-            vector signed int vs3 = vec_splat(vscales_h, 3);
-            vscales = vec_sld(vscales, vscales, 8);
-
-            vsumi0 = vec_add(vec_mul(qv00, vs0), vsumi0);
-            vsumi1 = vec_add(vec_mul(qv01, vs1), vsumi1);
-            vsumi2 = vec_add(vec_mul(qv20, vs2), vsumi2);
-            vsumi3 = vec_add(vec_mul(qv21, vs3), vsumi3);
-
-            vsumi0 = vec_add(vec_mul(qv10, vs0), vsumi0);
-            vsumi1 = vec_add(vec_mul(qv11, vs1), vsumi1);
-            vsumi2 = vec_add(vec_mul(qv30, vs2), vsumi2);
-            vsumi3 = vec_add(vec_mul(qv31, vs3), vsumi3);
-        }
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined __loongarch_asx
-    GGML_UNUSED(kmask1);
-    GGML_UNUSED(kmask2);
-    GGML_UNUSED(kmask3);
-
-    const __m256i m4 = __lasx_xvreplgr2vr_b(0xF);
-
-    __m256 acc = (__m256)__lasx_xvldi(0);
-    __m128 acc_m = (__m128)__lsx_vldi(0);
-
-   for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        const uint8_t * restrict q4 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        const __m256i mins_and_scales = lasx_extu8_16(lsx_set_w(utmp[3], utmp[2], utmp[1], utmp[0]));
-
-        const __m256i q8sums = __lasx_xvld((const __m256i*)y[i].bsums, 0);
-        const __m128i q8s = lsx_hadd_h(lasx_extracti128(q8sums, 0), lasx_extracti128(q8sums, 1));
-        const __m128i prod = lsx_madd_h(lasx_extracti128(mins_and_scales, 1), q8s);
-        acc_m = __lsx_vfmadd_s(__lsx_vreplfr2vr_s(dmin), __lsx_vffint_s_w(prod), acc_m);
-
-        const __m128i sc128  = lasx_extracti128(mins_and_scales, 0);
-        const __m256i scales = lasx_insertf128(sc128, sc128);
-
-        __m256i sumi = __lasx_xvldi(0);
-
-        for (int j = 0; j < QK_K/64; ++j) {
-
-            const __m256i scale_l = lasx_shuffle_b(scales, get_scale_shuffle_k4(2*j+0));
-            const __m256i scale_h = lasx_shuffle_b(scales, get_scale_shuffle_k4(2*j+1));
-
-            const __m256i q4bits = __lasx_xvld((const __m256i*)q4, 0); q4 += 32;
-            const __m256i q4l = __lasx_xvand_v(q4bits, m4);
-            const __m256i q4h = __lasx_xvand_v(__lasx_xvsrli_h(q4bits, 4), m4);
-
-            const __m256i q8l = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            __m256i p16l = lasx_maddubs_h(q4l, q8l);
-            p16l = lasx_madd_h(scale_l, p16l);
-
-            const __m256i q8h = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            __m256i p16h = lasx_maddubs_h(q4h, q8h);
-            p16h = lasx_madd_h(scale_h, p16h);
-            const __m256i sumj = __lasx_xvadd_w(p16l, p16h);
-
-            sumi = __lasx_xvadd_w(sumi, sumj);
-        }
-
-        __m256 vd = __lasx_xvreplfr2vr_s(d);
-        acc = __lasx_xvfmadd_s(vd, __lasx_xvffint_s_w(sumi), acc);
-
-    }
-
-    acc_m = __lsx_vfadd_s(acc_m, (__m128)__lsx_vpermi_w((__m128i)acc_m, (__m128i)acc_m, 0xee));
-    __m128i tmp1 = __lsx_vinsgr2vr_w(__lsx_vldi(0), __lsx_vpickve2gr_w((__m128i)acc_m, 1), 0);
-    acc_m = __lsx_vfadd_s(acc_m, (__m128)tmp1);
-
-
-    ft_union fi;
-    fi.i = __lsx_vpickve2gr_w(acc_m, 0);
-    *s = hsum_float_8(acc) + fi.f ;
-#else
-
-    const uint8_t * scales = (const uint8_t*)&utmp[0];
-    const uint8_t * mins   = (const uint8_t*)&utmp[2];
-
-    int8_t  aux8[QK_K];
-    int16_t aux16[8];
-    float   sums [8];
-    int32_t aux32[8];
-    memset(sums, 0, 8*sizeof(float));
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-        const uint8_t * restrict q4 = x[i].qs;
-        const  int8_t * restrict q8 = y[i].qs;
-        memset(aux32, 0, 8*sizeof(int32_t));
-        int8_t * restrict a = aux8;
-        for (int j = 0; j < QK_K/64; ++j) {
-            for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l] & 0xF);
-            a += 32;
-            for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l]  >> 4);
-            a += 32; q4 += 32;
-        }
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        int sumi = 0;
-        for (int j = 0; j < QK_K/16; ++j) sumi += y[i].bsums[j] * mins[j/2];
-        a = aux8;
-        int is = 0;
-        for (int j = 0; j < QK_K/32; ++j) {
-            int32_t scale = scales[is++];
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
-            q8 += 8; a += 8;
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
-            q8 += 8; a += 8;
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
-            q8 += 8; a += 8;
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
-            q8 += 8; a += 8;
-        }
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l];
-        const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d;
-        sumf -= dmin * sumi;
-    }
-    for (int l = 0; l < 8; ++l) sumf += sums[l];
-    *s = sumf;
-#endif
-}
-
-void ggml_vec_dot_q5_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy,  size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_q5_K * restrict x = vx;
-    const block_q8_K * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-    static const uint32_t kmask1 = 0x3f3f3f3f;
-    static const uint32_t kmask2 = 0x0f0f0f0f;
-    static const uint32_t kmask3 = 0x03030303;
-
-    uint32_t utmp[4];
-
-#ifdef __ARM_NEON
-    const uint8x16_t m4b = vdupq_n_u8(0xf);
-    const uint8x16_t mone = vdupq_n_u8(1);
-    const uint8x16_t mtwo = vdupq_n_u8(2);
-    const int32x4_t mzero = vdupq_n_s32(0);
-
-    ggml_int8x16x4_t q5bytes;
-
-    float sumf = 0;
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        const int16x8_t q8sums = vpaddq_s16(vld1q_s16(y[i].bsums), vld1q_s16(y[i].bsums + 8));
-
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        const uint8x8_t mins8 = vld1_u8((const uint8_t*)utmp + 8);
-        const int16x8_t mins = vreinterpretq_s16_u16(vmovl_u8(mins8));
-        const int32x4_t prod = vaddq_s32(vmull_s16(vget_low_s16 (q8sums), vget_low_s16 (mins)),
-                                         vmull_s16(vget_high_s16(q8sums), vget_high_s16(mins)));
-        int32_t sumi_mins = vaddvq_s32(prod);
-
-        const uint8_t * scales = (const uint8_t *)utmp;
-
-        const uint8_t * restrict q5 = x[i].qs;
-        const uint8_t * restrict qh = x[i].qh;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        ggml_uint8x16x2_t qhbits = ggml_vld1q_u8_x2(qh);
-
-        ggml_uint8x16x4_t q5h;
-
-        int32_t sumi = 0;
-
-        for (int j = 0; j < QK_K/64; ++j) {
-
-            const ggml_uint8x16x2_t q5bits = ggml_vld1q_u8_x2(q5); q5 += 32;
-            const ggml_int8x16x4_t q8bytes = ggml_vld1q_s8_x4(q8); q8 += 64;
-
-            q5h.val[0] = vshlq_n_u8(vandq_u8(mone, qhbits.val[0]), 4);
-            q5h.val[1] = vshlq_n_u8(vandq_u8(mone, qhbits.val[1]), 4);
-            q5h.val[2] = vshlq_n_u8(vandq_u8(mtwo, qhbits.val[0]), 3);
-            q5h.val[3] = vshlq_n_u8(vandq_u8(mtwo, qhbits.val[1]), 3);
-            qhbits.val[0] = vshrq_n_u8(qhbits.val[0], 2);
-            qhbits.val[1] = vshrq_n_u8(qhbits.val[1], 2);
-
-            q5bytes.val[0] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q5bits.val[0], m4b), q5h.val[0]));
-            q5bytes.val[1] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q5bits.val[1], m4b), q5h.val[1]));
-            q5bytes.val[2] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q5bits.val[0], 4), q5h.val[2]));
-            q5bytes.val[3] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q5bits.val[1], 4), q5h.val[3]));
-
-            sumi += vaddvq_s32(ggml_vdotq_s32(ggml_vdotq_s32(mzero, q5bytes.val[0], q8bytes.val[0]), q5bytes.val[1], q8bytes.val[1])) * *scales++;
-            sumi += vaddvq_s32(ggml_vdotq_s32(ggml_vdotq_s32(mzero, q5bytes.val[2], q8bytes.val[2]), q5bytes.val[3], q8bytes.val[3])) * *scales++;
-        }
-
-        sumf += d * sumi - dmin * sumi_mins;
-    }
-
-    *s = sumf;
-
-#elif defined __AVX2__
-
-    const __m256i m4 = _mm256_set1_epi8(0xF);
-    const __m128i mzero = _mm_setzero_si128();
-    const __m256i mone  = _mm256_set1_epi8(1);
-
-    __m256 acc = _mm256_setzero_ps();
-
-    float summs = 0.f;
-
-    for (int i = 0; i < nb; ++i) {
-        const uint8_t * restrict q5 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        const __m256i mins_and_scales = _mm256_cvtepu8_epi16(_mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0]));
-
-        const __m256i q8sums = _mm256_loadu_si256((const __m256i*)y[i].bsums);
-        const __m128i q8s = _mm_hadd_epi16(_mm256_extracti128_si256(q8sums, 0), _mm256_extracti128_si256(q8sums, 1));
-        const __m128i prod = _mm_madd_epi16(_mm256_extracti128_si256(mins_and_scales, 1), q8s);
-        const __m128i hsum = _mm_hadd_epi32(_mm_hadd_epi32(prod, mzero), mzero);
-        summs += dmin * _mm_extract_epi32(hsum, 0);
-
-        const __m128i sc128  = _mm256_extracti128_si256(mins_and_scales, 0);
-        const __m256i scales = MM256_SET_M128I(sc128, sc128);
-
-        const __m256i hbits = _mm256_loadu_si256((const __m256i*)x[i].qh);
-        __m256i hmask = mone;
-
-        __m256i sumi = _mm256_setzero_si256();
-
-        int bit = 0;
-
-        for (int j = 0; j < QK_K/64; ++j) {
-
-            const __m256i scale_0 = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+0));
-            const __m256i scale_1 = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+1));
-
-            const __m256i q5bits = _mm256_loadu_si256((const __m256i*)q5); q5 += 32;
-
-            const __m256i q5l_0 = _mm256_and_si256(q5bits, m4);
-            const __m256i q5h_0 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_and_si256(hbits, hmask), bit++), 4);
-            const __m256i q5_0  = _mm256_add_epi8(q5l_0, q5h_0);
-            hmask = _mm256_slli_epi16(hmask, 1);
-
-            const __m256i q5l_1 = _mm256_and_si256(_mm256_srli_epi16(q5bits, 4), m4);
-            const __m256i q5h_1 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_and_si256(hbits, hmask), bit++), 4);
-            const __m256i q5_1  = _mm256_add_epi8(q5l_1, q5h_1);
-            hmask = _mm256_slli_epi16(hmask, 1);
-
-            const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-
-            __m256i p16_0 = _mm256_maddubs_epi16(q5_0, q8_0);
-            __m256i p16_1 = _mm256_maddubs_epi16(q5_1, q8_1);
-
-            p16_0 = _mm256_madd_epi16(scale_0, p16_0);
-            p16_1 = _mm256_madd_epi16(scale_1, p16_1);
-
-            sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_1));
-
-        }
-
-        __m256 vd = _mm256_set1_ps(d);
-        acc = _mm256_fmadd_ps(vd, _mm256_cvtepi32_ps(sumi), acc);
-
-    }
-
-    *s = hsum_float_8(acc) + summs;
-
-#elif defined __AVX__
-
-    const __m128i m4 = _mm_set1_epi8(0xF);
-    const __m128i mzero = _mm_setzero_si128();
-    const __m128i mone  = _mm_set1_epi8(1);
-    const __m128i m2 = _mm_set1_epi8(2);
-
-    __m256 acc = _mm256_setzero_ps();
-
-    float summs = 0.f;
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        const uint8_t * restrict q5 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        const __m128i utmps = _mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0]);
-        const __m128i scales = _mm_cvtepu8_epi16(utmps);
-        const __m128i mins = _mm_cvtepu8_epi16(_mm_unpackhi_epi64(utmps, utmps));
-
-        const __m128i q8sums_0 = _mm_loadu_si128((const __m128i*)&y[i].bsums[0]);
-        const __m128i q8sums_1 = _mm_loadu_si128((const __m128i*)&y[i].bsums[8]);
-        const __m128i q8s = _mm_hadd_epi16(q8sums_0, q8sums_1);
-        const __m128i prod = _mm_madd_epi16(mins, q8s);
-        const __m128i hsum = _mm_hadd_epi32(_mm_hadd_epi32(prod, mzero), mzero);
-        summs += dmin * _mm_extract_epi32(hsum, 0);
-
-        const __m128i hbits_0 = _mm_loadu_si128((const __m128i*)&x[i].qh[0]);
-        const __m128i hbits_1 = _mm_loadu_si128((const __m128i*)&x[i].qh[16]);
-        __m128i hmask = mone;
-
-        __m128i sumi_0 = _mm_setzero_si128();
-        __m128i sumi_1 = _mm_setzero_si128();
-
-        int bit = 0;
-
-        __m128i shuffle = _mm_set1_epi16(0x0100);
-        for (int j = 0; j < QK_K/64; ++j) {
-
-            const __m128i scale_0 = _mm_shuffle_epi8(scales, shuffle);
-            shuffle = _mm_add_epi16(shuffle, m2);
-            const __m128i scale_1 = _mm_shuffle_epi8(scales, shuffle);
-            shuffle = _mm_add_epi16(shuffle, m2);
-
-            const __m128i q5bits_0 = _mm_loadu_si128((const __m128i*)q5); q5 += 16;
-            const __m128i q5bits_1 = _mm_loadu_si128((const __m128i*)q5); q5 += 16;
-
-            __m128i q5l_0 = _mm_and_si128(q5bits_0, m4);
-            __m128i q5l_1 = _mm_and_si128(q5bits_1, m4);
-            __m128i q5h_0 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_0, hmask), bit), 4);
-            __m128i q5h_1 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_1, hmask), bit++), 4);
-            __m128i q5_0  = _mm_add_epi8(q5l_0, q5h_0);
-            __m128i q5_1  = _mm_add_epi8(q5l_1, q5h_1);
-            hmask = _mm_slli_epi16(hmask, 1);
-
-            __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            __m128i p16_0 = _mm_maddubs_epi16(q5_0, q8_0);
-            __m128i p16_1 = _mm_maddubs_epi16(q5_1, q8_1);
-            p16_0 = _mm_madd_epi16(scale_0, p16_0);
-            p16_1 = _mm_madd_epi16(scale_0, p16_1);
-
-            q5l_0 = _mm_and_si128(_mm_srli_epi16(q5bits_0, 4), m4);
-            q5l_1 = _mm_and_si128(_mm_srli_epi16(q5bits_1, 4), m4);
-            q5h_0 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_0, hmask), bit), 4);
-            q5h_1 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_1, hmask), bit++), 4);
-            q5_0  = _mm_add_epi8(q5l_0, q5h_0);
-            q5_1  = _mm_add_epi8(q5l_1, q5h_1);
-            hmask = _mm_slli_epi16(hmask, 1);
-
-            q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            __m128i p16_2 = _mm_maddubs_epi16(q5_0, q8_0);
-            __m128i p16_3 = _mm_maddubs_epi16(q5_1, q8_1);
-            p16_2 = _mm_madd_epi16(scale_1, p16_2);
-            p16_3 = _mm_madd_epi16(scale_1, p16_3);
-
-            sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_0, p16_2));
-            sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_1, p16_3));
-
-        }
-
-        __m256 vd = _mm256_set1_ps(d);
-        __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0);
-        acc = _mm256_add_ps(_mm256_mul_ps(vd, _mm256_cvtepi32_ps(sumi)), acc);
-
-    }
-
-    *s = hsum_float_8(acc) + summs;
-
-#elif defined __riscv_v_intrinsic
-
-    const uint8_t * scales = (const uint8_t*)&utmp[0];
-    const uint8_t * mins   = (const uint8_t*)&utmp[2];
-
-    float sumf = 0;
-    float sums = 0.0;
-
-    size_t vl;
-
-    for (int i = 0; i < nb; ++i) {
-
-        vl = 8;
-
-        const uint8_t * restrict q5 = x[i].qs;
-        const uint8_t * restrict hm = x[i].qh;
-        const  int8_t * restrict q8 = y[i].qs;
-
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d;
-
-        vint16mf2_t q8sums_0 = __riscv_vlse16_v_i16mf2(y[i].bsums, 4, vl);
-        vint16mf2_t q8sums_1 = __riscv_vlse16_v_i16mf2(y[i].bsums+1, 4, vl);
-        vint16mf2_t q8sums = __riscv_vadd_vv_i16mf2(q8sums_0, q8sums_1, vl);
-
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        vuint8mf4_t mins8 = __riscv_vle8_v_u8mf4(mins, vl);
-        vint16mf2_t v_mins = __riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vzext_vf2_u16mf2(mins8, vl));
-        vint32m1_t prod = __riscv_vwmul_vv_i32m1(q8sums, v_mins, vl);
-
-        vint32m1_t sumi = __riscv_vredsum_vs_i32m1_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl);
-        sumf -= dmin * __riscv_vmv_x_s_i32m1_i32(sumi);
-
-        vl = 32;
-        int32_t aux32 = 0;
-        int is = 0;
-
-        uint8_t m = 1;
-        vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1);
-        vuint8m1_t vqh = __riscv_vle8_v_u8m1(hm, vl);
-
-        for (int j = 0; j < QK_K/64; ++j) {
-            // load Q5 and Q8
-            vuint8m1_t q5_x = __riscv_vle8_v_u8m1(q5, vl);
-            vint8m1_t  q8_y1 = __riscv_vle8_v_i8m1(q8, vl);
-            vint8m1_t  q8_y2 = __riscv_vle8_v_i8m1(q8+32, vl);
-
-            // compute mask for addition
-            vint8m1_t q5_a = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q5_x, 0x0F, vl));
-            vuint8m1_t qh_m1 = __riscv_vand_vx_u8m1(vqh, m, vl);
-            vbool8_t vmask_1 = __riscv_vmsne_vx_u8m1_b8(qh_m1, 0, vl);
-            vint8m1_t q5_m1 = __riscv_vadd_vx_i8m1_m(vmask_1, q5_a, 16, vl);
-            m <<= 1;
-
-            vint8m1_t q5_l = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vsrl_vx_u8m1(q5_x, 0x04, vl));
-            vuint8m1_t qh_m2 = __riscv_vand_vx_u8m1(vqh, m, vl);
-            vbool8_t vmask_2 = __riscv_vmsne_vx_u8m1_b8(qh_m2, 0, vl);
-            vint8m1_t q5_m2 = __riscv_vadd_vx_i8m1_m(vmask_2, q5_l, 16, vl);
-            m <<= 1;
-
-            vint16m2_t v0 = __riscv_vwmul_vv_i16m2(q5_m1, q8_y1, vl);
-            vint16m2_t v1 = __riscv_vwmul_vv_i16m2(q5_m2, q8_y2, vl);
-
-            vint32m4_t vs1 = __riscv_vwmul_vx_i32m4(v0, scales[is++], vl);
-            vint32m4_t vs2 = __riscv_vwmul_vx_i32m4(v1, scales[is++], vl);
-
-            vint32m1_t vacc1 = __riscv_vredsum_vs_i32m4_i32m1(vs1, vzero, vl);
-            vint32m1_t vacc2 = __riscv_vredsum_vs_i32m4_i32m1(vs2, vzero, vl);
-
-            aux32 += __riscv_vmv_x_s_i32m1_i32(vacc1) + __riscv_vmv_x_s_i32m1_i32(vacc2);
-            q5 += 32;    q8 += 64;
-
-        }
-
-        vfloat32m1_t vaux = __riscv_vfmul_vf_f32m1(__riscv_vfmv_v_f_f32m1(aux32, 1), d, 1);
-        sums += __riscv_vfmv_f_s_f32m1_f32(vaux);
-
-    }
-
-    *s = sumf+sums;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0xF);
-    const vector signed char lowMask1 = vec_splats((int8_t)0x3f);
-    const vector signed char lowMask2 = vec_splats((int8_t)0x30);
-    const vector int v0 = vec_splats((int32_t)0);
-    const vector unsigned char v1 = vec_splats((unsigned char)0x1);
-    const vector unsigned char v2 = vec_splats((unsigned char)0x2);
-    const vector unsigned char v3 = vec_splats((unsigned char)0x3);
-    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector float vxmin = vec_splats(GGML_FP16_TO_FP32(x[i].dmin));
-        vector float vdmin = vec_mul(vxmin, vyd);
-
-        UNUSED(kmask1);
-        UNUSED(kmask2);
-        UNUSED(kmask3);
-        UNUSED(utmp);
-
-        vector signed char u0 = (vector signed char)vec_xl_len(x[i].scales, 8);
-        vector signed char u1 = vec_and(vec_sr(u0, v2), lowMask2);
-        vector signed char u2 = (vector signed char)vec_xl_len(x[i].scales + 8, 4);
-        vector signed char u3 = vec_sr(u2, v4);
-
-        vector signed char u30 = u1;
-        vector signed char u31 = (vector signed char)vec_mergeh((vector signed int)vec_and(u2, lowMask), (vector signed int)u3);
-
-        u1 = vec_and(u0, lowMask1);
-        u2 = vec_or(u30, u31);
-
-        vector signed char utmps = (vector signed char)vec_mergeh((vector signed int)u1, (vector signed int)u2);
-
-        vector signed short q8ysums0 = vec_xl( 0, y[i].bsums);
-        vector signed short q8ysums1 = vec_xl(16, y[i].bsums);
-
-        vector signed short vscales = vec_unpackh(utmps);
-
-        vector signed short q5xmins = vec_unpackl(utmps);
-        vector signed short q5xmins0 = vec_mergeh(q5xmins, q5xmins);
-        vector signed short q5xmins1 = vec_mergel(q5xmins, q5xmins);
-
-        vector signed int prod0 = vec_mule(q5xmins0, q8ysums0);
-        vector signed int prod1 = vec_mule(q5xmins1, q8ysums1);
-        vector signed int prod2 = vec_mulo(q5xmins0, q8ysums0);
-        vector signed int prod3 = vec_mulo(q5xmins1, q8ysums1);
-
-        vsumf0 = vec_nmsub(vec_ctf(prod0, 0), vdmin, vsumf0);
-        vsumf1 = vec_nmsub(vec_ctf(prod1, 0), vdmin, vsumf1);
-        vsumf2 = vec_nmsub(vec_ctf(prod2, 0), vdmin, vsumf2);
-        vsumf3 = vec_nmsub(vec_ctf(prod3, 0), vdmin, vsumf3);
-
-        vector signed char qxhs0 = (vector signed char)vec_xl( 0, x[i].qh);
-        vector signed char qxhs1 = (vector signed char)vec_xl(16, x[i].qh);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-
-        const uint8_t * restrict q5 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        for (int j = 0; j < QK_K/64; ++j) {
-            __builtin_prefetch(q5, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            vector signed char qxs0 = (vector signed char)vec_xl( 0, q5);
-            vector signed char qxs1 = (vector signed char)vec_xl(16, q5);
-            q5 += 32;
-
-            vector signed char qxs00 = vec_and(qxs0, lowMask);
-            vector signed char qxs01 = vec_sr(qxs0, v4);
-            vector signed char qxs10 = vec_and(qxs1, lowMask);
-            vector signed char qxs11 = vec_sr(qxs1, v4);
-
-            vector signed char q5h00 = vec_sl(vec_and((vector signed char)v1, qxhs0), v4);
-            vector signed char q5h01 = vec_sl(vec_and((vector signed char)v2, qxhs0), v3);
-            vector signed char q5h10 = vec_sl(vec_and((vector signed char)v1, qxhs1), v4);
-            vector signed char q5h11 = vec_sl(vec_and((vector signed char)v2, qxhs1), v3);
-            qxhs0 = vec_sr(qxhs0, v2);
-            qxhs1 = vec_sr(qxhs1, v2);
-
-            vector unsigned char q5x00 = (vector unsigned char)vec_or(q5h00, qxs00);
-            vector unsigned char q5x01 = (vector unsigned char)vec_or(q5h01, qxs01);
-            vector unsigned char q5x10 = (vector unsigned char)vec_or(q5h10, qxs10);
-            vector unsigned char q5x11 = (vector unsigned char)vec_or(q5h11, qxs11);
-
-            vector signed char q8y00 = vec_xl( 0, q8);
-            vector signed char q8y10 = vec_xl(16, q8);
-            vector signed char q8y01 = vec_xl(32, q8);
-            vector signed char q8y11 = vec_xl(48, q8);
-            q8 += 64;
-
-            vector signed int qv00 = vec_msum(q8y00, q5x00, v0);
-            vector signed int qv01 = vec_msum(q8y01, q5x01, v0);
-            vector signed int qv10 = vec_msum(q8y10, q5x10, v0);
-            vector signed int qv11 = vec_msum(q8y11, q5x11, v0);
-
-            vector signed int vscales_h = vec_unpackh(vscales);
-            vector signed int vs0 = vec_splat(vscales_h, 0);
-            vector signed int vs1 = vec_splat(vscales_h, 1);
-            vscales = vec_sld(vscales, vscales, 12);
-
-            vsumi0 = vec_add(vec_mul(qv00, vs0), vsumi0);
-            vsumi1 = vec_add(vec_mul(qv10, vs0), vsumi1);
-            vsumi2 = vec_add(vec_mul(qv01, vs1), vsumi2);
-            vsumi3 = vec_add(vec_mul(qv11, vs1), vsumi3);
-        }
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined __loongarch_asx
-    GGML_UNUSED(kmask1);
-    GGML_UNUSED(kmask2);
-    GGML_UNUSED(kmask3);
-
-    const __m256i m4 = __lasx_xvreplgr2vr_b(0xF);
-    const __m128i mzero = __lsx_vldi(0);
-    const __m256i mone  = __lasx_xvreplgr2vr_b(1);
-
-    __m256 acc = (__m256)__lasx_xvldi(0);
-
-    float summs = 0.f;
-
-   for (int i = 0; i < nb; ++i) {
-
-        const uint8_t * restrict q5 = x[i].qs;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
-
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        const __m256i mins_and_scales = lasx_extu8_16(lsx_set_w(utmp[3], utmp[2], utmp[1], utmp[0]));
-
-        const __m256i q8sums = __lasx_xvld((const __m256i*)y[i].bsums, 0);
-        const __m128i q8s = lsx_hadd_h(lasx_extracti128(q8sums, 0), lasx_extracti128(q8sums, 1));
-        const __m128i prod = lsx_madd_h(lasx_extracti128(mins_and_scales, 1), q8s);
-        const __m128i hsum = lsx_hadd_w(lsx_hadd_w(prod, mzero), mzero);
-        summs += dmin * __lsx_vpickve2gr_w(hsum, 0);    //TODO check
-
-        const __m128i sc128  = lasx_extracti128(mins_and_scales, 0);
-        const __m256i scales = lasx_insertf128(sc128, sc128);
-
-        const __m256i hbits = __lasx_xvld((const __m256i*)x[i].qh, 0);
-        __m256i hmask = mone;
-
-        __m256i sumi = __lasx_xvldi(0);
-
-        int bit = 0;
-        __m256i xvbit;
-
-        for (int j = 0; j < QK_K/64; ++j) {
-
-            const __m256i scale_0 = lasx_shuffle_b(scales, get_scale_shuffle_k4(2*j+0));
-            const __m256i scale_1 = lasx_shuffle_b(scales, get_scale_shuffle_k4(2*j+1));
-
-            const __m256i q5bits = __lasx_xvld((const __m256i*)q5, 0); q5 += 32;
-
-            xvbit = __lasx_xvreplgr2vr_h(bit++);
-            const __m256i q5l_0 = __lasx_xvand_v(q5bits, m4);
-            const __m256i q5h_0 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvand_v(hbits, hmask), xvbit), 4);
-            const __m256i q5_0  = __lasx_xvadd_b(q5l_0, q5h_0);
-            hmask = __lasx_xvslli_h(hmask, 1);
-
-            xvbit = __lasx_xvreplgr2vr_h(bit++);
-            const __m256i q5l_1 = __lasx_xvand_v(__lasx_xvsrli_h(q5bits, 4), m4);
-            const __m256i q5h_1 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvand_v(hbits, hmask), xvbit), 4);
-            const __m256i q5_1  = __lasx_xvadd_b(q5l_1, q5h_1);
-            hmask = __lasx_xvslli_h(hmask, 1);
-
-            const __m256i q8_0 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8_1 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-
-            __m256i p16_0 = lasx_maddubs_h(q5_0, q8_0);
-            __m256i p16_1 = lasx_maddubs_h(q5_1, q8_1);
-
-            p16_0 = lasx_madd_h(scale_0, p16_0);
-            p16_1 = lasx_madd_h(scale_1, p16_1);
-
-            sumi = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p16_0, p16_1));
-
-        }
-
-        __m256 vd = __lasx_xvreplfr2vr_s(d);
-        acc = __lasx_xvfmadd_s(vd, __lasx_xvffint_s_w(sumi), acc);
-
-    }
-
-    *s = hsum_float_8(acc) + summs;
-
-#else
-
-    const uint8_t * scales = (const uint8_t*)&utmp[0];
-    const uint8_t * mins   = (const uint8_t*)&utmp[2];
-
-    int8_t  aux8[QK_K];
-    int16_t aux16[8];
-    float   sums [8];
-    int32_t aux32[8];
-    memset(sums, 0, 8*sizeof(float));
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-        const uint8_t * restrict q4 = x[i].qs;
-        const uint8_t * restrict hm = x[i].qh;
-        const  int8_t * restrict q8 = y[i].qs;
-        memset(aux32, 0, 8*sizeof(int32_t));
-        int8_t * restrict a = aux8;
-        uint8_t m = 1;
-        for (int j = 0; j < QK_K/64; ++j) {
-            for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l] & 0xF);
-            for (int l = 0; l < 32; ++l) a[l] += (hm[l] & m ? 16 : 0);
-            a += 32; m <<= 1;
-            for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l]  >> 4);
-            for (int l = 0; l < 32; ++l) a[l] += (hm[l] & m ? 16 : 0);
-            a += 32; m <<= 1;
-            q4 += 32;
-        }
-        memcpy(utmp, x[i].scales, 12);
-        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
-        const uint32_t uaux = utmp[1] & kmask1;
-        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
-        utmp[2] = uaux;
-        utmp[0] &= kmask1;
-
-        int sumi = 0;
-        for (int j = 0; j < QK_K/16; ++j) sumi += y[i].bsums[j] * mins[j/2];
-        a = aux8;
-        int is = 0;
-        for (int j = 0; j < QK_K/32; ++j) {
-            int32_t scale = scales[is++];
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
-            q8 += 8; a += 8;
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
-            q8 += 8; a += 8;
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
-            q8 += 8; a += 8;
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
-            q8 += 8; a += 8;
-        }
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l];
-        const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d;
-        sumf -= dmin * sumi;
-    }
-    for (int l = 0; l < 8; ++l) sumf += sums[l];
-    *s = sumf;
-#endif
-}
-
-void ggml_vec_dot_q6_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_q6_K * restrict x = vx;
-    const block_q8_K * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-#ifdef __ARM_NEON
-    float sum = 0;
-
-    const uint8x16_t m4b = vdupq_n_u8(0xF);
-    const int32x4_t  vzero = vdupq_n_s32(0);
-    //const int8x16_t  m32s = vdupq_n_s8(32);
-
-    const uint8x16_t mone = vdupq_n_u8(3);
-
-    ggml_int8x16x4_t q6bytes;
-    ggml_uint8x16x4_t q6h;
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d_all = GGML_FP16_TO_FP32(x[i].d);
-
-        const uint8_t * restrict q6 = x[i].ql;
-        const uint8_t * restrict qh = x[i].qh;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        const int8_t * restrict scale = x[i].scales;
-
-        const ggml_int16x8x2_t q8sums = ggml_vld1q_s16_x2(y[i].bsums);
-        const int8x16_t scales = vld1q_s8(scale);
-        const ggml_int16x8x2_t q6scales = {{vmovl_s8(vget_low_s8(scales)), vmovl_s8(vget_high_s8(scales))}};
-
-        const int32x4_t prod = vaddq_s32(vaddq_s32(vmull_s16(vget_low_s16 (q8sums.val[0]), vget_low_s16 (q6scales.val[0])),
-                                                   vmull_s16(vget_high_s16(q8sums.val[0]), vget_high_s16(q6scales.val[0]))),
-                                         vaddq_s32(vmull_s16(vget_low_s16 (q8sums.val[1]), vget_low_s16 (q6scales.val[1])),
-                                                   vmull_s16(vget_high_s16(q8sums.val[1]), vget_high_s16(q6scales.val[1]))));
-        int32_t isum_mins = vaddvq_s32(prod);
-
-        int32_t isum = 0;
-
-        for (int j = 0; j < QK_K/128; ++j) {
-
-            ggml_uint8x16x2_t qhbits = ggml_vld1q_u8_x2(qh); qh += 32;
-            ggml_uint8x16x4_t q6bits = ggml_vld1q_u8_x4(q6); q6 += 64;
-            ggml_int8x16x4_t q8bytes = ggml_vld1q_s8_x4(q8); q8 += 64;
-
-            q6h.val[0] = vshlq_n_u8(vandq_u8(mone, qhbits.val[0]), 4);
-            q6h.val[1] = vshlq_n_u8(vandq_u8(mone, qhbits.val[1]), 4);
-            uint8x16_t shifted = vshrq_n_u8(qhbits.val[0], 2);
-            q6h.val[2] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
-            shifted = vshrq_n_u8(qhbits.val[1], 2);
-            q6h.val[3] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
-
-            //q6bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[0], m4b), q6h.val[0])), m32s);
-            //q6bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[1], m4b), q6h.val[1])), m32s);
-            //q6bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[2], m4b), q6h.val[2])), m32s);
-            //q6bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[3], m4b), q6h.val[3])), m32s);
-            q6bytes.val[0] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[0], m4b), q6h.val[0]));
-            q6bytes.val[1] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[1], m4b), q6h.val[1]));
-            q6bytes.val[2] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[2], m4b), q6h.val[2]));
-            q6bytes.val[3] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[3], m4b), q6h.val[3]));
-
-            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[0], q8bytes.val[0])) * scale[0] +
-                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[1], q8bytes.val[1])) * scale[1] +
-                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[2], q8bytes.val[2])) * scale[2] +
-                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[3], q8bytes.val[3])) * scale[3];
-
-            scale += 4;
-
-            q8bytes = ggml_vld1q_s8_x4(q8); q8 += 64;
-
-            shifted = vshrq_n_u8(qhbits.val[0], 4);
-            q6h.val[0] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
-            shifted = vshrq_n_u8(qhbits.val[1], 4);
-            q6h.val[1] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
-            shifted = vshrq_n_u8(qhbits.val[0], 6);
-            q6h.val[2] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
-            shifted = vshrq_n_u8(qhbits.val[1], 6);
-            q6h.val[3] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
-
-            //q6bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[0], 4), q6h.val[0])), m32s);
-            //q6bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[1], 4), q6h.val[1])), m32s);
-            //q6bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[2], 4), q6h.val[2])), m32s);
-            //q6bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[3], 4), q6h.val[3])), m32s);
-            q6bytes.val[0] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[0], 4), q6h.val[0]));
-            q6bytes.val[1] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[1], 4), q6h.val[1]));
-            q6bytes.val[2] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[2], 4), q6h.val[2]));
-            q6bytes.val[3] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[3], 4), q6h.val[3]));
-
-            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[0], q8bytes.val[0])) * scale[0] +
-                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[1], q8bytes.val[1])) * scale[1] +
-                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[2], q8bytes.val[2])) * scale[2] +
-                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[3], q8bytes.val[3])) * scale[3];
-            scale += 4;
-        }
-        //sum += isum * d_all * y[i].d;
-        sum += d_all * y[i].d * (isum - 32 * isum_mins);
-
-    }
-    *s = sum;
-
-#elif defined __AVX2__
-
-    const __m256i m4 = _mm256_set1_epi8(0xF);
-    const __m256i m2 = _mm256_set1_epi8(3);
-    const __m256i m32s = _mm256_set1_epi8(32);
-
-    __m256 acc = _mm256_setzero_ps();
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-
-        const uint8_t * restrict q4 = x[i].ql;
-        const uint8_t * restrict qh = x[i].qh;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        const __m128i scales = _mm_loadu_si128((const __m128i*)x[i].scales);
-
-        __m256i sumi = _mm256_setzero_si256();
-
-        int is = 0;
-
-        for (int j = 0; j < QK_K/128; ++j) {
-
-            const __m128i scale_0 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 0));
-            const __m128i scale_1 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 1));
-            const __m128i scale_2 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 2));
-            const __m128i scale_3 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 3));
-            is += 4;
-
-            const __m256i q4bits1 = _mm256_loadu_si256((const __m256i*)q4); q4 += 32;
-            const __m256i q4bits2 = _mm256_loadu_si256((const __m256i*)q4); q4 += 32;
-            const __m256i q4bitsH = _mm256_loadu_si256((const __m256i*)qh); qh += 32;
-
-            const __m256i q4h_0 = _mm256_slli_epi16(_mm256_and_si256(q4bitsH, m2), 4);
-            const __m256i q4h_1 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 2), m2), 4);
-            const __m256i q4h_2 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 4), m2), 4);
-            const __m256i q4h_3 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 6), m2), 4);
-
-            const __m256i q4_0 = _mm256_or_si256(_mm256_and_si256(q4bits1, m4), q4h_0);
-            const __m256i q4_1 = _mm256_or_si256(_mm256_and_si256(q4bits2, m4), q4h_1);
-            const __m256i q4_2 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits1, 4), m4), q4h_2);
-            const __m256i q4_3 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits2, 4), m4), q4h_3);
-
-            const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8_3 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-
-            __m256i q8s_0 = _mm256_maddubs_epi16(m32s, q8_0);
-            __m256i q8s_1 = _mm256_maddubs_epi16(m32s, q8_1);
-            __m256i q8s_2 = _mm256_maddubs_epi16(m32s, q8_2);
-            __m256i q8s_3 = _mm256_maddubs_epi16(m32s, q8_3);
-
-            __m256i p16_0 = _mm256_maddubs_epi16(q4_0, q8_0);
-            __m256i p16_1 = _mm256_maddubs_epi16(q4_1, q8_1);
-            __m256i p16_2 = _mm256_maddubs_epi16(q4_2, q8_2);
-            __m256i p16_3 = _mm256_maddubs_epi16(q4_3, q8_3);
-
-            p16_0 = _mm256_sub_epi16(p16_0, q8s_0);
-            p16_1 = _mm256_sub_epi16(p16_1, q8s_1);
-            p16_2 = _mm256_sub_epi16(p16_2, q8s_2);
-            p16_3 = _mm256_sub_epi16(p16_3, q8s_3);
-
-            p16_0 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_0), p16_0);
-            p16_1 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_1), p16_1);
-            p16_2 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_2), p16_2);
-            p16_3 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_3), p16_3);
-
-            sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_1));
-            sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_2, p16_3));
-
-        }
-
-        acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc);
-    }
-
-    *s = hsum_float_8(acc);
-
-#elif defined __AVX__
-
-    const __m128i m4 = _mm_set1_epi8(0xF);
-    const __m128i m3 = _mm_set1_epi8(3);
-    const __m128i m32s = _mm_set1_epi8(32);
-    const __m128i m2 = _mm_set1_epi8(2);
-
-    __m256 acc = _mm256_setzero_ps();
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-
-        const uint8_t * restrict q4 = x[i].ql;
-        const uint8_t * restrict qh = x[i].qh;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        const __m128i scales = _mm_loadu_si128((const __m128i*)x[i].scales);
-
-        __m128i sumi_0 = _mm_setzero_si128();
-        __m128i sumi_1 = _mm_setzero_si128();
-
-        __m128i shuffle = _mm_set_epi64x(0x0101010101010101, 0x0000000000000000);
-        for (int j = 0; j < QK_K/128; ++j) {
-
-            const __m128i q4bitsH_0 = _mm_loadu_si128((const __m128i*)qh); qh += 16;
-            const __m128i q4bitsH_1 = _mm_loadu_si128((const __m128i*)qh); qh += 16;
-
-            const __m128i q4h_0 = _mm_slli_epi16(_mm_and_si128(q4bitsH_0, m3), 4);
-            const __m128i q4h_1 = _mm_slli_epi16(_mm_and_si128(q4bitsH_1, m3), 4);
-            const __m128i q4h_2 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_0, 2), m3), 4);
-            const __m128i q4h_3 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_1, 2), m3), 4);
-            const __m128i q4h_4 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_0, 4), m3), 4);
-            const __m128i q4h_5 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_1, 4), m3), 4);
-            const __m128i q4h_6 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_0, 6), m3), 4);
-            const __m128i q4h_7 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_1, 6), m3), 4);
-
-            const __m128i q4bits1_0 = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
-            const __m128i q4bits1_1 = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
-            const __m128i q4bits2_0 = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
-            const __m128i q4bits2_1 = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
-
-            const __m128i q4_0 = _mm_or_si128(_mm_and_si128(q4bits1_0, m4), q4h_0);
-            const __m128i q4_1 = _mm_or_si128(_mm_and_si128(q4bits1_1, m4), q4h_1);
-            const __m128i q4_2 = _mm_or_si128(_mm_and_si128(q4bits2_0, m4), q4h_2);
-            const __m128i q4_3 = _mm_or_si128(_mm_and_si128(q4bits2_1, m4), q4h_3);
-            const __m128i q4_4 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits1_0, 4), m4), q4h_4);
-            const __m128i q4_5 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits1_1, 4), m4), q4h_5);
-            const __m128i q4_6 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits2_0, 4), m4), q4h_6);
-            const __m128i q4_7 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits2_1, 4), m4), q4h_7);
-
-            const __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_2 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_3 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_4 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_5 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_6 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-            const __m128i q8_7 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
-
-            __m128i q8s_0 = _mm_maddubs_epi16(m32s, q8_0);
-            __m128i q8s_1 = _mm_maddubs_epi16(m32s, q8_1);
-            __m128i q8s_2 = _mm_maddubs_epi16(m32s, q8_2);
-            __m128i q8s_3 = _mm_maddubs_epi16(m32s, q8_3);
-            __m128i q8s_4 = _mm_maddubs_epi16(m32s, q8_4);
-            __m128i q8s_5 = _mm_maddubs_epi16(m32s, q8_5);
-            __m128i q8s_6 = _mm_maddubs_epi16(m32s, q8_6);
-            __m128i q8s_7 = _mm_maddubs_epi16(m32s, q8_7);
-
-            __m128i p16_0 = _mm_maddubs_epi16(q4_0, q8_0);
-            __m128i p16_1 = _mm_maddubs_epi16(q4_1, q8_1);
-            __m128i p16_2 = _mm_maddubs_epi16(q4_2, q8_2);
-            __m128i p16_3 = _mm_maddubs_epi16(q4_3, q8_3);
-            __m128i p16_4 = _mm_maddubs_epi16(q4_4, q8_4);
-            __m128i p16_5 = _mm_maddubs_epi16(q4_5, q8_5);
-            __m128i p16_6 = _mm_maddubs_epi16(q4_6, q8_6);
-            __m128i p16_7 = _mm_maddubs_epi16(q4_7, q8_7);
-
-            p16_0 = _mm_sub_epi16(p16_0, q8s_0);
-            p16_1 = _mm_sub_epi16(p16_1, q8s_1);
-            p16_2 = _mm_sub_epi16(p16_2, q8s_2);
-            p16_3 = _mm_sub_epi16(p16_3, q8s_3);
-            p16_4 = _mm_sub_epi16(p16_4, q8s_4);
-            p16_5 = _mm_sub_epi16(p16_5, q8s_5);
-            p16_6 = _mm_sub_epi16(p16_6, q8s_6);
-            p16_7 = _mm_sub_epi16(p16_7, q8s_7);
-
-            const __m128i scale_0 = _mm_shuffle_epi8(scales, shuffle);
-            shuffle = _mm_add_epi8(shuffle, m2);
-            const __m128i scale_1 = _mm_shuffle_epi8(scales, shuffle);
-            shuffle = _mm_add_epi8(shuffle, m2);
-            const __m128i scale_2 = _mm_shuffle_epi8(scales, shuffle);
-            shuffle = _mm_add_epi8(shuffle, m2);
-            const __m128i scale_3 = _mm_shuffle_epi8(scales, shuffle);
-            shuffle = _mm_add_epi8(shuffle, m2);
-
-            p16_0 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_0), p16_0);
-            p16_1 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_0, scale_0)), p16_1);
-            p16_2 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_1), p16_2);
-            p16_3 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_1, scale_1)), p16_3);
-            p16_4 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_2), p16_4);
-            p16_5 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_2, scale_2)), p16_5);
-            p16_6 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_3), p16_6);
-            p16_7 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_3, scale_3)), p16_7);
-
-            sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_0, p16_2));
-            sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_1, p16_3));
-            sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_4, p16_6));
-            sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_5, p16_7));
-
-        }
-
-        __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0);
-        acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi)), acc);
-    }
-
-    *s = hsum_float_8(acc);
-
-#elif defined __riscv_v_intrinsic
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-
-        const uint8_t * restrict q6 = x[i].ql;
-        const uint8_t * restrict qh = x[i].qh;
-        const  int8_t * restrict q8 = y[i].qs;
-
-        const int8_t * restrict scale = x[i].scales;
-
-        size_t vl;
-
-        vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1);
-
-        int sum_t = 0;
-        int is = 0;
-
-        for (int j = 0; j < QK_K/128; ++j) {
-
-            vl = 32;
-
-            // load qh
-            vuint8m1_t qh_x = __riscv_vle8_v_u8m1(qh, vl);
-
-            // load Q6
-            vuint8m1_t q6_0 = __riscv_vle8_v_u8m1(q6, vl);
-            vuint8m1_t q6_1 = __riscv_vle8_v_u8m1(q6+32, vl);
-
-            vuint8m1_t q6a_0 = __riscv_vand_vx_u8m1(q6_0, 0x0F, vl);
-            vuint8m1_t q6a_1 = __riscv_vand_vx_u8m1(q6_1, 0x0F, vl);
-            vuint8m1_t q6s_0 = __riscv_vsrl_vx_u8m1(q6_0, 0x04, vl);
-            vuint8m1_t q6s_1 = __riscv_vsrl_vx_u8m1(q6_1, 0x04, vl);
-
-            vuint8m1_t qh_0 = __riscv_vand_vx_u8m1(qh_x, 0x03, vl);
-            vuint8m1_t qh_1 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x2, vl), 0x03 , vl);
-            vuint8m1_t qh_2 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x4, vl), 0x03 , vl);
-            vuint8m1_t qh_3 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x6, vl), 0x03 , vl);
-
-            vuint8m1_t qhi_0 = __riscv_vor_vv_u8m1(q6a_0, __riscv_vsll_vx_u8m1(qh_0, 0x04, vl), vl);
-            vuint8m1_t qhi_1 = __riscv_vor_vv_u8m1(q6a_1, __riscv_vsll_vx_u8m1(qh_1, 0x04, vl), vl);
-            vuint8m1_t qhi_2 = __riscv_vor_vv_u8m1(q6s_0, __riscv_vsll_vx_u8m1(qh_2, 0x04, vl), vl);
-            vuint8m1_t qhi_3 = __riscv_vor_vv_u8m1(q6s_1, __riscv_vsll_vx_u8m1(qh_3, 0x04, vl), vl);
-
-            vint8m1_t a_0 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_0), 32, vl);
-            vint8m1_t a_1 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_1), 32, vl);
-            vint8m1_t a_2 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_2), 32, vl);
-            vint8m1_t a_3 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_3), 32, vl);
-
-            // load Q8 and take product
-            vint16m2_t va_q_0 = __riscv_vwmul_vv_i16m2(a_0, __riscv_vle8_v_i8m1(q8, vl), vl);
-            vint16m2_t va_q_1 = __riscv_vwmul_vv_i16m2(a_1, __riscv_vle8_v_i8m1(q8+32, vl), vl);
-            vint16m2_t va_q_2 = __riscv_vwmul_vv_i16m2(a_2, __riscv_vle8_v_i8m1(q8+64, vl), vl);
-            vint16m2_t va_q_3 = __riscv_vwmul_vv_i16m2(a_3, __riscv_vle8_v_i8m1(q8+96, vl), vl);
-
-            vl = 16;
-
-            vint32m2_t vaux_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_0, 0), scale[is+0], vl);
-            vint32m2_t vaux_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_0, 1), scale[is+1], vl);
-            vint32m2_t vaux_2 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_1, 0), scale[is+2], vl);
-            vint32m2_t vaux_3 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_1, 1), scale[is+3], vl);
-            vint32m2_t vaux_4 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_2, 0), scale[is+4], vl);
-            vint32m2_t vaux_5 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_2, 1), scale[is+5], vl);
-            vint32m2_t vaux_6 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_3, 0), scale[is+6], vl);
-            vint32m2_t vaux_7 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_3, 1), scale[is+7], vl);
-
-            vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_0, vaux_1, vl), vzero, vl);
-            vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_2, vaux_3, vl), isum0, vl);
-            vint32m1_t isum2 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_4, vaux_5, vl), isum1, vl);
-            vint32m1_t isum3 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_6, vaux_7, vl), isum2, vl);
-
-            sum_t += __riscv_vmv_x_s_i32m1_i32(isum3);
-
-            q6 += 64;   qh += 32;   q8 += 128;   is=8;
-
-        }
-
-        sumf += d * sum_t;
-
-    }
-
-    *s = sumf;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0xF);
-    const vector int v0 = vec_splats((int32_t)0);
-    const vector unsigned char v2 = vec_splats((unsigned char)0x2);
-    const vector unsigned char v3 = vec_splats((unsigned char)0x3);
-    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
-    const vector unsigned char v6 = vec_splats((unsigned char)0x6);
-    const vector signed char off = vec_splats((signed char)0x20);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-        vector signed int vsumi4 = v0;
-        vector signed int vsumi5 = v0;
-        vector signed int vsumi6 = v0;
-        vector signed int vsumi7 = v0;
-
-        const uint8_t * restrict q6 = x[i].ql;
-        const uint8_t * restrict qh = x[i].qh;
-        const int8_t  * restrict qs = x[i].scales;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        for (int j = 0; j < QK_K/128; ++j) {
-            __builtin_prefetch(q6, 0, 0);
-            __builtin_prefetch(qh, 0, 0);
-            __builtin_prefetch(q8, 0, 0);
-
-            vector signed char qxs0 = (vector signed char)vec_xl( 0, q6);
-            vector signed char qxs1 = (vector signed char)vec_xl(16, q6);
-            vector signed char qxs2 = (vector signed char)vec_xl(32, q6);
-            vector signed char qxs3 = (vector signed char)vec_xl(48, q6);
-            q6 += 64;
-
-            vector signed char qxs00 = vec_and(qxs0, lowMask);
-            vector signed char qxs01 = vec_sr(qxs0, v4);
-            vector signed char qxs10 = vec_and(qxs1, lowMask);
-            vector signed char qxs11 = vec_sr(qxs1, v4);
-            vector signed char qxs20 = vec_and(qxs2, lowMask);
-            vector signed char qxs21 = vec_sr(qxs2, v4);
-            vector signed char qxs30 = vec_and(qxs3, lowMask);
-            vector signed char qxs31 = vec_sr(qxs3, v4);
-
-            vector signed char qxhs0 = (vector signed char)vec_xl( 0, qh);
-            vector signed char qxhs1 = (vector signed char)vec_xl(16, qh);
-            qh += 32;
-
-            vector signed char qxh00 = vec_sl(vec_and((vector signed char)v3, qxhs0), v4);
-            vector signed char qxh01 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs0, v4)), v4);
-            vector signed char qxh10 = vec_sl(vec_and((vector signed char)v3, qxhs1), v4);
-            vector signed char qxh11 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs1, v4)), v4);
-            vector signed char qxh20 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs0, v2)), v4);
-            vector signed char qxh21 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs0, v6)), v4);
-            vector signed char qxh30 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs1, v2)), v4);
-            vector signed char qxh31 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs1, v6)), v4);
-
-            vector signed char q6x00 = vec_sub(vec_or(qxh00, qxs00), off);
-            vector signed char q6x01 = vec_sub(vec_or(qxh01, qxs01), off);
-            vector signed char q6x10 = vec_sub(vec_or(qxh10, qxs10), off);
-            vector signed char q6x11 = vec_sub(vec_or(qxh11, qxs11), off);
-            vector signed char q6x20 = vec_sub(vec_or(qxh20, qxs20), off);
-            vector signed char q6x21 = vec_sub(vec_or(qxh21, qxs21), off);
-            vector signed char q6x30 = vec_sub(vec_or(qxh30, qxs30), off);
-            vector signed char q6x31 = vec_sub(vec_or(qxh31, qxs31), off);
-
-            vector signed char q8y00 = vec_xl(  0, q8);
-            vector signed char q8y10 = vec_xl( 16, q8);
-            vector signed char q8y20 = vec_xl( 32, q8);
-            vector signed char q8y30 = vec_xl( 48, q8);
-            vector signed char q8y01 = vec_xl( 64, q8);
-            vector signed char q8y11 = vec_xl( 80, q8);
-            vector signed char q8y21 = vec_xl( 96, q8);
-            vector signed char q8y31 = vec_xl(112, q8);
-            q8 += 128;
-
-            vector signed short qv00 = vec_add(vec_mule(q6x00, q8y00), vec_mulo(q6x00, q8y00));
-            vector signed short qv10 = vec_add(vec_mule(q6x10, q8y10), vec_mulo(q6x10, q8y10));
-            vector signed short qv20 = vec_add(vec_mule(q6x20, q8y20), vec_mulo(q6x20, q8y20));
-            vector signed short qv30 = vec_add(vec_mule(q6x30, q8y30), vec_mulo(q6x30, q8y30));
-            vector signed short qv01 = vec_add(vec_mule(q6x01, q8y01), vec_mulo(q6x01, q8y01));
-            vector signed short qv11 = vec_add(vec_mule(q6x11, q8y11), vec_mulo(q6x11, q8y11));
-            vector signed short qv21 = vec_add(vec_mule(q6x21, q8y21), vec_mulo(q6x21, q8y21));
-            vector signed short qv31 = vec_add(vec_mule(q6x31, q8y31), vec_mulo(q6x31, q8y31));
-
-            vector signed short vscales = vec_unpackh(vec_xl_len(qs, 8));
-            qs += 8;
-
-            vector signed short vs0 = vec_splat(vscales, 0);
-            vector signed short vs1 = vec_splat(vscales, 1);
-            vector signed short vs2 = vec_splat(vscales, 2);
-            vector signed short vs3 = vec_splat(vscales, 3);
-            vector signed short vs4 = vec_splat(vscales, 4);
-            vector signed short vs5 = vec_splat(vscales, 5);
-            vector signed short vs6 = vec_splat(vscales, 6);
-            vector signed short vs7 = vec_splat(vscales, 7);
-
-            vsumi0 = vec_msum(qv00, vs0, vsumi0);
-            vsumi1 = vec_msum(qv01, vs4, vsumi1);
-            vsumi2 = vec_msum(qv10, vs1, vsumi2);
-            vsumi3 = vec_msum(qv11, vs5, vsumi3);
-            vsumi4 = vec_msum(qv20, vs2, vsumi4);
-            vsumi5 = vec_msum(qv21, vs6, vsumi5);
-            vsumi6 = vec_msum(qv30, vs3, vsumi6);
-            vsumi7 = vec_msum(qv31, vs7, vsumi7);
-        }
-
-        vsumi0 = vec_add(vsumi0, vsumi4);
-        vsumi1 = vec_add(vsumi1, vsumi5);
-        vsumi2 = vec_add(vsumi2, vsumi6);
-        vsumi3 = vec_add(vsumi3, vsumi7);
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined __loongarch_asx
-
-    const __m256i m4 = __lasx_xvreplgr2vr_b(0xF);
-    const __m256i m2 = __lasx_xvreplgr2vr_b(3);
-    const __m256i m32s = __lasx_xvreplgr2vr_b(32);
-
-    __m256 acc = (__m256)__lasx_xvldi(0);
-
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-
-        const uint8_t * restrict q4 = x[i].ql;
-        const uint8_t * restrict qh = x[i].qh;
-        const int8_t  * restrict q8 = y[i].qs;
-
-        const __m128i scales = __lsx_vld((const __m128i*)x[i].scales, 0);
-
-        __m256i sumi = __lasx_xvldi(0);
-
-        int is = 0;
-
-        for (int j = 0; j < QK_K/128; ++j) {
-
-            const __m128i scale_0 = lsx_shuffle_b(scales, get_scale_shuffle(is + 0));
-            const __m128i scale_1 = lsx_shuffle_b(scales, get_scale_shuffle(is + 1));
-            const __m128i scale_2 = lsx_shuffle_b(scales, get_scale_shuffle(is + 2));
-            const __m128i scale_3 = lsx_shuffle_b(scales, get_scale_shuffle(is + 3));
-            is += 4;
-
-            const __m256i q4bits1 = __lasx_xvld((const __m256i*)q4, 0); q4 += 32;
-            const __m256i q4bits2 = __lasx_xvld((const __m256i*)q4, 0); q4 += 32;
-            const __m256i q4bitsH = __lasx_xvld((const __m256i*)qh, 0); qh += 32;
-
-            const __m256i q4h_0 = __lasx_xvslli_h(__lasx_xvand_v(q4bitsH, m2), 4);
-            const __m256i q4h_1 = __lasx_xvslli_h(__lasx_xvand_v(__lasx_xvsrli_h(q4bitsH, 2), m2), 4);
-            const __m256i q4h_2 = __lasx_xvslli_h(__lasx_xvand_v(__lasx_xvsrli_h(q4bitsH, 4), m2), 4);
-            const __m256i q4h_3 = __lasx_xvslli_h(__lasx_xvand_v(__lasx_xvsrli_h(q4bitsH, 6), m2), 4);
-
-            const __m256i q4_0 = __lasx_xvor_v(__lasx_xvand_v(q4bits1, m4), q4h_0);
-            const __m256i q4_1 = __lasx_xvor_v(__lasx_xvand_v(q4bits2, m4), q4h_1);
-            const __m256i q4_2 = __lasx_xvor_v(__lasx_xvand_v(__lasx_xvsrli_h(q4bits1, 4), m4), q4h_2);
-            const __m256i q4_3 = __lasx_xvor_v(__lasx_xvand_v(__lasx_xvsrli_h(q4bits2, 4), m4), q4h_3);
-
-            const __m256i q8_0 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8_1 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8_2 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8_3 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-
-            __m256i q8s_0 = lasx_maddubs_h(m32s, q8_0);
-            __m256i q8s_1 = lasx_maddubs_h(m32s, q8_1);
-            __m256i q8s_2 = lasx_maddubs_h(m32s, q8_2);
-            __m256i q8s_3 = lasx_maddubs_h(m32s, q8_3);
-
-            __m256i p16_0 = lasx_maddubs_h(q4_0, q8_0);
-            __m256i p16_1 = lasx_maddubs_h(q4_1, q8_1);
-            __m256i p16_2 = lasx_maddubs_h(q4_2, q8_2);
-            __m256i p16_3 = lasx_maddubs_h(q4_3, q8_3);
-
-            p16_0 = __lasx_xvsub_h(p16_0, q8s_0);
-            p16_1 = __lasx_xvsub_h(p16_1, q8s_1);
-            p16_2 = __lasx_xvsub_h(p16_2, q8s_2);
-            p16_3 = __lasx_xvsub_h(p16_3, q8s_3);
-
-            p16_0 = lasx_madd_h(lasx_ext8_16(scale_0), p16_0);
-            p16_1 = lasx_madd_h(lasx_ext8_16(scale_1), p16_1);
-            p16_2 = lasx_madd_h(lasx_ext8_16(scale_2), p16_2);
-            p16_3 = lasx_madd_h(lasx_ext8_16(scale_3), p16_3);
-
-            sumi = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p16_0, p16_1));
-            sumi = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p16_2, p16_3));
-        }
-
-        acc = __lasx_xvfmadd_s((__m256)__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(sumi), acc);
-    }
-
-    *s = hsum_float_8(acc);
-
-#else
-
-    int8_t  aux8[QK_K];
-    int16_t aux16[8];
-    float   sums [8];
-    int32_t aux32[8];
-    memset(sums, 0, 8*sizeof(float));
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-        const uint8_t * restrict q4 = x[i].ql;
-        const uint8_t * restrict qh = x[i].qh;
-        const  int8_t * restrict q8 = y[i].qs;
-        memset(aux32, 0, 8*sizeof(int32_t));
-        int8_t * restrict a = aux8;
-        for (int j = 0; j < QK_K; j += 128) {
-            for (int l = 0; l < 32; ++l) {
-                a[l +  0] = (int8_t)((q4[l +  0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32;
-                a[l + 32] = (int8_t)((q4[l + 32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32;
-                a[l + 64] = (int8_t)((q4[l +  0] >>  4) | (((qh[l] >> 4) & 3) << 4)) - 32;
-                a[l + 96] = (int8_t)((q4[l + 32] >>  4) | (((qh[l] >> 6) & 3) << 4)) - 32;
-            }
-            a  += 128;
-            q4 += 64;
-            qh += 32;
-        }
-        a = aux8;
-        int is = 0;
-        for (int j = 0; j < QK_K/16; ++j) {
-            int scale = x[i].scales[is++];
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
-            q8 += 8; a += 8;
-            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
-            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
-            q8 += 8; a += 8;
-        }
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l];
-    }
-    for (int l = 0; l < 8; ++l) sumf += sums[l];
-    *s = sumf;
-#endif
-}
-
-#if defined (__AVX2__) || defined (__ARM_NEON) || defined (__POWER9_VECTOR__) || defined(__loongarch_asx)
-static const int8_t keven_signs_q2xs[1024] = {
-     1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1, -1,  1, -1,  1,  1,  1,  1,  1, -1, -1, -1,  1,  1,  1,  1,  1,  1,
-     1,  1, -1,  1,  1,  1,  1, -1, -1,  1, -1,  1,  1,  1,  1,  1,  1, -1, -1,  1,  1,  1,  1,  1, -1, -1, -1,  1,  1,  1,  1, -1,
-     1,  1,  1, -1,  1,  1,  1, -1, -1,  1,  1, -1,  1,  1,  1,  1,  1, -1,  1, -1,  1,  1,  1,  1, -1, -1,  1, -1,  1,  1,  1, -1,
-     1,  1, -1, -1,  1,  1,  1,  1, -1,  1, -1, -1,  1,  1,  1, -1,  1, -1, -1, -1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1,  1,  1,
-     1,  1,  1,  1, -1,  1,  1, -1, -1,  1,  1,  1, -1,  1,  1,  1,  1, -1,  1,  1, -1,  1,  1,  1, -1, -1,  1,  1, -1,  1,  1, -1,
-     1,  1, -1,  1, -1,  1,  1,  1, -1,  1, -1,  1, -1,  1,  1, -1,  1, -1, -1,  1, -1,  1,  1, -1, -1, -1, -1,  1, -1,  1,  1,  1,
-     1,  1,  1, -1, -1,  1,  1,  1, -1,  1,  1, -1, -1,  1,  1, -1,  1, -1,  1, -1, -1,  1,  1, -1, -1, -1,  1, -1, -1,  1,  1,  1,
-     1,  1, -1, -1, -1,  1,  1, -1, -1,  1, -1, -1, -1,  1,  1,  1,  1, -1, -1, -1, -1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1, -1,
-     1,  1,  1,  1,  1, -1,  1, -1, -1,  1,  1,  1,  1, -1,  1,  1,  1, -1,  1,  1,  1, -1,  1,  1, -1, -1,  1,  1,  1, -1,  1, -1,
-     1,  1, -1,  1,  1, -1,  1,  1, -1,  1, -1,  1,  1, -1,  1, -1,  1, -1, -1,  1,  1, -1,  1, -1, -1, -1, -1,  1,  1, -1,  1,  1,
-     1,  1,  1, -1,  1, -1,  1,  1, -1,  1,  1, -1,  1, -1,  1, -1,  1, -1,  1, -1,  1, -1,  1, -1, -1, -1,  1, -1,  1, -1,  1,  1,
-     1,  1, -1, -1,  1, -1,  1, -1, -1,  1, -1, -1,  1, -1,  1,  1,  1, -1, -1, -1,  1, -1,  1,  1, -1, -1, -1, -1,  1, -1,  1, -1,
-     1,  1,  1,  1, -1, -1,  1,  1, -1,  1,  1,  1, -1, -1,  1, -1,  1, -1,  1,  1, -1, -1,  1, -1, -1, -1,  1,  1, -1, -1,  1,  1,
-     1,  1, -1,  1, -1, -1,  1, -1, -1,  1, -1,  1, -1, -1,  1,  1,  1, -1, -1,  1, -1, -1,  1,  1, -1, -1, -1,  1, -1, -1,  1, -1,
-     1,  1,  1, -1, -1, -1,  1, -1, -1,  1,  1, -1, -1, -1,  1,  1,  1, -1,  1, -1, -1, -1,  1,  1, -1, -1,  1, -1, -1, -1,  1, -1,
-     1,  1, -1, -1, -1, -1,  1,  1, -1,  1, -1, -1, -1, -1,  1, -1,  1, -1, -1, -1, -1, -1,  1, -1, -1, -1, -1, -1, -1, -1,  1,  1,
-     1,  1,  1,  1,  1,  1, -1, -1, -1,  1,  1,  1,  1,  1, -1,  1,  1, -1,  1,  1,  1,  1, -1,  1, -1, -1,  1,  1,  1,  1, -1, -1,
-     1,  1, -1,  1,  1,  1, -1,  1, -1,  1, -1,  1,  1,  1, -1, -1,  1, -1, -1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1,  1, -1,  1,
-     1,  1,  1, -1,  1,  1, -1,  1, -1,  1,  1, -1,  1,  1, -1, -1,  1, -1,  1, -1,  1,  1, -1, -1, -1, -1,  1, -1,  1,  1, -1,  1,
-     1,  1, -1, -1,  1,  1, -1, -1, -1,  1, -1, -1,  1,  1, -1,  1,  1, -1, -1, -1,  1,  1, -1,  1, -1, -1, -1, -1,  1,  1, -1, -1,
-     1,  1,  1,  1, -1,  1, -1,  1, -1,  1,  1,  1, -1,  1, -1, -1,  1, -1,  1,  1, -1,  1, -1, -1, -1, -1,  1,  1, -1,  1, -1,  1,
-     1,  1, -1,  1, -1,  1, -1, -1, -1,  1, -1,  1, -1,  1, -1,  1,  1, -1, -1,  1, -1,  1, -1,  1, -1, -1, -1,  1, -1,  1, -1, -1,
-     1,  1,  1, -1, -1,  1, -1, -1, -1,  1,  1, -1, -1,  1, -1,  1,  1, -1,  1, -1, -1,  1, -1,  1, -1, -1,  1, -1, -1,  1, -1, -1,
-     1,  1, -1, -1, -1,  1, -1,  1, -1,  1, -1, -1, -1,  1, -1, -1,  1, -1, -1, -1, -1,  1, -1, -1, -1, -1, -1, -1, -1,  1, -1,  1,
-     1,  1,  1,  1,  1, -1, -1,  1, -1,  1,  1,  1,  1, -1, -1, -1,  1, -1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1,  1, -1, -1,  1,
-     1,  1, -1,  1,  1, -1, -1, -1, -1,  1, -1,  1,  1, -1, -1,  1,  1, -1, -1,  1,  1, -1, -1,  1, -1, -1, -1,  1,  1, -1, -1, -1,
-     1,  1,  1, -1,  1, -1, -1, -1, -1,  1,  1, -1,  1, -1, -1,  1,  1, -1,  1, -1,  1, -1, -1,  1, -1, -1,  1, -1,  1, -1, -1, -1,
-     1,  1, -1, -1,  1, -1, -1,  1, -1,  1, -1, -1,  1, -1, -1, -1,  1, -1, -1, -1,  1, -1, -1, -1, -1, -1, -1, -1,  1, -1, -1,  1,
-     1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1,  1, -1, -1, -1,  1,  1, -1,  1,  1, -1, -1, -1,  1, -1, -1,  1,  1, -1, -1, -1, -1,
-     1,  1, -1,  1, -1, -1, -1,  1, -1,  1, -1,  1, -1, -1, -1, -1,  1, -1, -1,  1, -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1,  1,
-     1,  1,  1, -1, -1, -1, -1,  1, -1,  1,  1, -1, -1, -1, -1, -1,  1, -1,  1, -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1, -1,  1,
-     1,  1, -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1, -1, -1,  1,  1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1,
-};
-#endif
-
-void ggml_vec_dot_iq2_xxs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_iq2_xxs * restrict x = vx;
-    const block_q8_K    * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-#if defined(__ARM_NEON)
-
-    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
-
-    uint32_t aux32[4];
-    const uint8_t * aux8 = (const uint8_t *)aux32;
-
-    ggml_int8x16x4_t q2u;
-    ggml_int8x16x4_t q2s;
-    ggml_int8x16x4_t q8b;
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint16_t * restrict q2 = x[i].qs;
-        const int8_t   * restrict q8 = y[i].qs;
-        float sumf1 = 0, sumf2 = 0;
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
-            memcpy(aux32, q2, 4*sizeof(uint32_t)); q2 += 8;
-            q2u.val[0] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[ 0])), vld1_s8((const void *)(iq2xxs_grid + aux8[ 1])));
-            q2u.val[1] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[ 2])), vld1_s8((const void *)(iq2xxs_grid + aux8[ 3])));
-            q2u.val[2] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[ 8])), vld1_s8((const void *)(iq2xxs_grid + aux8[ 9])));
-            q2u.val[3] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[10])), vld1_s8((const void *)(iq2xxs_grid + aux8[11])));
-            q2s.val[0] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >>  0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >>  7) & 127))));
-            q2s.val[1] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >> 21) & 127))));
-            q2s.val[2] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[3] >>  0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[3] >>  7) & 127))));
-            q2s.val[3] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[3] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[3] >> 21) & 127))));
-            q2u.val[0] = vmulq_s8(q2u.val[0], q2s.val[0]);
-            q2u.val[1] = vmulq_s8(q2u.val[1], q2s.val[1]);
-            q2u.val[2] = vmulq_s8(q2u.val[2], q2s.val[2]);
-            q2u.val[3] = vmulq_s8(q2u.val[3], q2s.val[3]);
-            const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[0], q8b.val[0]), q2u.val[1], q8b.val[1]);
-            const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[2], q8b.val[2]), q2u.val[3], q8b.val[3]);
-            sumf1 += vaddvq_s32(p1) * (0.5f + (aux32[1] >> 28));
-            sumf2 += vaddvq_s32(p2) * (0.5f + (aux32[3] >> 28));
-        }
-        sumf += d*(sumf1 + sumf2);
-    }
-    *s = 0.25f * sumf;
-
-#elif defined(__AVX2__)
-
-    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
-
-    uint32_t aux32[4];
-    const uint8_t * aux8 = (const uint8_t *)aux32;
-
-    __m256 accumf = _mm256_setzero_ps();
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint16_t * restrict q2 = x[i].qs;
-        const int8_t   * restrict q8 = y[i].qs;
-        __m256i sumi1 = _mm256_setzero_si256();
-        __m256i sumi2 = _mm256_setzero_si256();
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            memcpy(aux32, q2, 4*sizeof(uint32_t)); q2 += 8;
-            const __m256i q2_1 = _mm256_set_epi64x(iq2xxs_grid[aux8[ 3]], iq2xxs_grid[aux8[ 2]], iq2xxs_grid[aux8[1]], iq2xxs_grid[aux8[0]]);
-            const __m256i q2_2 = _mm256_set_epi64x(iq2xxs_grid[aux8[11]], iq2xxs_grid[aux8[10]], iq2xxs_grid[aux8[9]], iq2xxs_grid[aux8[8]]);
-            const __m256i s2_1 = _mm256_set_epi64x(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127],
-                                                   signs64[(aux32[1] >>  7) & 127], signs64[(aux32[1] >>  0) & 127]);
-            const __m256i s2_2 = _mm256_set_epi64x(signs64[(aux32[3] >> 21) & 127], signs64[(aux32[3] >> 14) & 127],
-                                                   signs64[(aux32[3] >>  7) & 127], signs64[(aux32[3] >>  0) & 127]);
-            const __m256i q8s_1 = _mm256_sign_epi8(q8_1, s2_1);
-            const __m256i q8s_2 = _mm256_sign_epi8(q8_2, s2_2);
-            const __m256i dot1  = _mm256_maddubs_epi16(q2_1, q8s_1);
-            const __m256i dot2  = _mm256_maddubs_epi16(q2_2, q8s_2);
-            const uint16_t ls1 = aux32[1] >> 28;
-            const uint16_t ls2 = aux32[3] >> 28;
-            const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(2*ls1+1));
-            const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(2*ls2+1));
-            sumi1 = _mm256_add_epi32(sumi1, p1);
-            sumi2 = _mm256_add_epi32(sumi2, p2);
-        }
-
-        accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf);
-
-    }
-
-    *s = 0.125f * hsum_float_8(accumf);
-
-#elif defined(__POWER9_VECTOR__)
-    const vector int v0 = vec_splats((int32_t)0);
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-
-        const uint16_t * restrict q2 = x[i].qs;
-        const int8_t  *  restrict q8 = y[i].qs;
-
-        for (int j = 0; j < QK_K/32; j += 2) {
-            __builtin_prefetch(q2, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            uint32_t aux32[4];
-            const uint8_t * aux8 = (const uint8_t *)aux32;
-
-            memcpy(aux32, q2, 4*sizeof(uint32_t));
-            q2 += 8;
-
-            vector signed long long aux64x2_0 = {*(const int64_t *)(iq2xxs_grid + aux8[ 0]), *(const int64_t *)(iq2xxs_grid + aux8[ 1])};
-            vector signed long long aux64x2_1 = {*(const int64_t *)(iq2xxs_grid + aux8[ 2]), *(const int64_t *)(iq2xxs_grid + aux8[ 3])};
-            vector signed long long aux64x2_2 = {*(const int64_t *)(iq2xxs_grid + aux8[ 8]), *(const int64_t *)(iq2xxs_grid + aux8[ 9])};
-            vector signed long long aux64x2_3 = {*(const int64_t *)(iq2xxs_grid + aux8[10]), *(const int64_t *)(iq2xxs_grid + aux8[11])};
-
-            vector signed long long vsigns0 = {*(const int64_t *)(signs64 + ((aux32[1] >>  0) & 127)), *(const int64_t *)(signs64 + ((aux32[1] >>  7) & 127))};
-            vector signed long long vsigns1 = {*(const int64_t *)(signs64 + ((aux32[1] >> 14) & 127)), *(const int64_t *)(signs64 + ((aux32[1] >> 21) & 127))};
-            vector signed long long vsigns2 = {*(const int64_t *)(signs64 + ((aux32[3] >>  0) & 127)), *(const int64_t *)(signs64 + ((aux32[3] >>  7) & 127))};
-            vector signed long long vsigns3 = {*(const int64_t *)(signs64 + ((aux32[3] >> 14) & 127)), *(const int64_t *)(signs64 + ((aux32[3] >> 21) & 127))};
-
-            vector signed char q2x0 = (vector signed char)vec_mul((vector signed char)vsigns0, (vector signed char)aux64x2_0);
-            vector signed char q2x1 = (vector signed char)vec_mul((vector signed char)vsigns1, (vector signed char)aux64x2_1);
-            vector signed char q2x2 = (vector signed char)vec_mul((vector signed char)vsigns2, (vector signed char)aux64x2_2);
-            vector signed char q2x3 = (vector signed char)vec_mul((vector signed char)vsigns3, (vector signed char)aux64x2_3);
-
-            vector signed char q8y0 = vec_xl( 0, q8);
-            vector signed char q8y1 = vec_xl(16, q8);
-            vector signed char q8y2 = vec_xl(32, q8);
-            vector signed char q8y3 = vec_xl(48, q8);
-            q8 += 64;
-
-            vector signed short qv0 = vec_add(vec_mule(q2x0, q8y0), vec_mulo(q2x0, q8y0));
-            vector signed short qv1 = vec_add(vec_mule(q2x1, q8y1), vec_mulo(q2x1, q8y1));
-            vector signed short qv2 = vec_add(vec_mule(q2x2, q8y2), vec_mulo(q2x2, q8y2));
-            vector signed short qv3 = vec_add(vec_mule(q2x3, q8y3), vec_mulo(q2x3, q8y3));
-
-            const uint16_t ls0 = aux32[1] >> 28;
-            const uint16_t ls1 = aux32[3] >> 28;
-
-            vector signed short vscales01 = vec_splats((int16_t)(2*ls0+1));
-            vector signed short vscales23 = vec_splats((int16_t)(2*ls1+1));
-
-            vsumi0 = vec_msum(qv0, vscales01, vsumi0);
-            vsumi1 = vec_msum(qv1, vscales01, vsumi1);
-            vsumi2 = vec_msum(qv2, vscales23, vsumi2);
-            vsumi3 = vec_msum(qv3, vscales23, vsumi3);
-        }
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = 0.125f * vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-
-    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
-
-    uint32_t aux32[4];
-    const uint8_t * aux8 = (const uint8_t *)aux32;
-
-    __m256 accumf = (__m256)__lasx_xvldi(0);
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint16_t * restrict q2 = x[i].qs;
-        const int8_t   * restrict q8 = y[i].qs;
-        __m256i sumi1 = __lasx_xvldi(0);
-        __m256i sumi2 = __lasx_xvldi(0);
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            const __m256i q8_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i q8_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            memcpy(aux32, q2, 4*sizeof(uint32_t)); q2 += 8;
-
-            const __m256i q2_1 = lasx_set_d(iq2xxs_grid[aux8[ 3]], iq2xxs_grid[aux8[ 2]], iq2xxs_grid[aux8[1]], iq2xxs_grid[aux8[0]]);
-            const __m256i q2_2 = lasx_set_d(iq2xxs_grid[aux8[11]], iq2xxs_grid[aux8[10]], iq2xxs_grid[aux8[9]], iq2xxs_grid[aux8[8]]);
-            const __m256i s2_1 = lasx_set_d(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127],
-                                                   signs64[(aux32[1] >>  7) & 127], signs64[(aux32[1] >>  0) & 127]);
-            const __m256i s2_2 = lasx_set_d(signs64[(aux32[3] >> 21) & 127], signs64[(aux32[3] >> 14) & 127],
-                                                   signs64[(aux32[3] >>  7) & 127], signs64[(aux32[3] >>  0) & 127]);
-            const __m256i q8s_1 = __lasx_xvsigncov_b(s2_1, q8_1);
-            const __m256i q8s_2 = __lasx_xvsigncov_b(s2_2, q8_2);
-            const __m256i dot1  = lasx_maddubs_h(q2_1, q8s_1);
-            const __m256i dot2  = lasx_maddubs_h(q2_2, q8s_2);
-            const uint16_t ls1 = aux32[1] >> 28;
-            const uint16_t ls2 = aux32[3] >> 28;
-            const __m256i p1 = lasx_madd_h(dot1, __lasx_xvreplgr2vr_h(2*ls1+1));
-            const __m256i p2 = lasx_madd_h(dot2, __lasx_xvreplgr2vr_h(2*ls2+1));
-            sumi1 = __lasx_xvadd_w(sumi1, p1);
-            sumi2 = __lasx_xvadd_w(sumi2, p2);
-        }
-
-        accumf = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accumf);
-    }
-
-    *s = 0.125f * hsum_float_8(accumf);
-
-#else
-
-    uint32_t aux32[2];
-    const uint8_t * aux8 = (const uint8_t *)aux32;
-
-    float sumf = 0.f;
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint16_t * restrict q2 = x[i].qs;
-        const int8_t   * restrict q8 = y[i].qs;
-        int32_t bsum = 0;
-        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
-            memcpy(aux32, q2, 2*sizeof(uint32_t));
-            q2 += 4;
-            const uint32_t ls = 2*(aux32[1] >> 28) + 1;
-            int32_t sumi = 0;
-            for (int l = 0; l < 4; ++l) {
-                const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]);
-                const uint8_t  signs = ksigns_iq2xs[(aux32[1] >> 7*l) & 127];
-                for (int j = 0; j < 8; ++j) {
-                    sumi += grid[j] * q8[j] * (signs & kmask_iq2xs[j] ? -1 : 1);
-                }
-                q8 += 8;
-            }
-            bsum += sumi * ls;
-        }
-        sumf += d * bsum;
-    }
-    *s = 0.125f * sumf;
-#endif
-}
-
-void ggml_vec_dot_iq2_xs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_iq2_xs * restrict x = vx;
-    const block_q8_K   * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-#if defined(__ARM_NEON)
-
-    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
-
-    ggml_int8x16x4_t q2u;
-    ggml_int8x16x4_t q2s;
-    ggml_int8x16x4_t q8b;
-
-    int32x4x4_t scales32;
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint16_t * restrict q2 = x[i].qs;
-        const int8_t   * restrict q8 = y[i].qs;
-        const uint8x8_t scales8 = vld1_u8(x[i].scales);
-        const uint8x8_t scales_l = vand_u8(scales8, vdup_n_u8(0xf));
-        const uint8x8_t scales_h = vshr_n_u8(scales8, 4);
-        uint8x16_t scales = vcombine_u8(vzip1_u8(scales_l, scales_h), vzip2_u8(scales_l, scales_h));
-        scales = vaddq_u8(vshlq_n_u8(scales, 1), vdupq_n_u8(1));
-        const uint16x8_t scales1 = vmovl_u8(vget_low_u8(scales));
-        const uint16x8_t scales2 = vmovl_u8(vget_high_u8(scales));
-        scales32.val[0] = vreinterpretq_s32_u32(vmovl_u16(vget_low_u16(scales1)));
-        scales32.val[1] = vreinterpretq_s32_u32(vmovl_u16(vget_high_u16(scales1)));
-        scales32.val[2] = vreinterpretq_s32_u32(vmovl_u16(vget_low_u16(scales2)));
-        scales32.val[3] = vreinterpretq_s32_u32(vmovl_u16(vget_high_u16(scales2)));
-        int32x4_t sumi = vdupq_n_s32(0);
-        for (int ib64 = 0; ib64 < QK_K/64; ++ib64) {
-            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
-            q2u.val[0] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[0] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[1] & 511))));
-            q2u.val[1] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[2] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[3] & 511))));
-            q2u.val[2] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[4] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[5] & 511))));
-            q2u.val[3] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[6] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[7] & 511))));
-            q2s.val[0] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[0] >> 9))), vld1_s8((const void *)(signs64 + (q2[1] >> 9))));
-            q2s.val[1] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[2] >> 9))), vld1_s8((const void *)(signs64 + (q2[3] >> 9))));
-            q2s.val[2] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[4] >> 9))), vld1_s8((const void *)(signs64 + (q2[5] >> 9))));
-            q2s.val[3] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[6] >> 9))), vld1_s8((const void *)(signs64 + (q2[7] >> 9))));
-            q2u.val[0] = vmulq_s8(q2u.val[0], q2s.val[0]);
-            q2u.val[1] = vmulq_s8(q2u.val[1], q2s.val[1]);
-            q2u.val[2] = vmulq_s8(q2u.val[2], q2s.val[2]);
-            q2u.val[3] = vmulq_s8(q2u.val[3], q2s.val[3]);
-            const int32x4_t p1 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[0], q8b.val[0]);
-            const int32x4_t p2 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[1], q8b.val[1]);
-            const int32x4_t p3 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[2], q8b.val[2]);
-            const int32x4_t p4 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[3], q8b.val[3]);
-            const int32x4_t p = vpaddq_s32(vpaddq_s32(p1, p2), vpaddq_s32(p3, p4));
-            sumi = vmlaq_s32(sumi, p, scales32.val[ib64]);
-            q2 += 8;
-        }
-        sumf += d*vaddvq_s32(sumi);
-    }
-    *s = 0.125f * sumf;
-
-#elif defined(__AVX2__)
-
-    const __m256i mone = _mm256_set1_epi8(1);
-    static const char block_sign_shuffle_mask_1[32] = {
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-        0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-    };
-    static const char block_sign_shuffle_mask_2[32] = {
-        0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
-        0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
-    };
-    static const uint8_t bit_selector_mask_bytes[32] = {
-        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-    };
-
-    const __m256i bit_selector_mask = _mm256_loadu_si256((const __m256i*)bit_selector_mask_bytes);
-    const __m256i block_sign_shuffle_1 = _mm256_loadu_si256((const __m256i*)block_sign_shuffle_mask_1);
-    const __m256i block_sign_shuffle_2 = _mm256_loadu_si256((const __m256i*)block_sign_shuffle_mask_2);
-
-    static const uint8_t k_bit_helper[32] = {
-        0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00,
-        0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00,
-    };
-    const __m256i bit_helper = _mm256_loadu_si256((const __m256i*)k_bit_helper);
-    const __m256i m511 = _mm256_set1_epi16(511);
-    const __m128i m4 = _mm_set1_epi8(0xf);
-    const __m128i m1 = _mm_set1_epi8(1);
-
-    uint64_t aux64;
-
-    // somewhat hacky, but gives a significant boost in performance
-    __m256i aux_gindex;
-    const uint16_t * gindex = (const uint16_t *)&aux_gindex;
-
-    __m256 accumf = _mm256_setzero_ps();
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint16_t * restrict q2 = x[i].qs;
-        const int8_t   * restrict q8 = y[i].qs;
-
-        memcpy(&aux64, x[i].scales, 8);
-        __m128i stmp = _mm_set1_epi64x(aux64);
-        stmp = _mm_unpacklo_epi8(_mm_and_si128(stmp, m4), _mm_and_si128(_mm_srli_epi16(stmp, 4), m4));
-        const __m128i scales = _mm_add_epi8(_mm_slli_epi16(stmp, 1), m1);
-
-        __m256i sumi1 = _mm256_setzero_si256();
-        __m256i sumi2 = _mm256_setzero_si256();
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 4) {
-
-            const __m256i q2_data = _mm256_loadu_si256((const __m256i*)q2);  q2 += 16;
-            aux_gindex = _mm256_and_si256(q2_data, m511);
-
-            const __m256i partial_sign_bits = _mm256_srli_epi16(q2_data, 9);
-            const __m256i partial_sign_bits_upper = _mm256_srli_epi16(q2_data, 13);
-            const __m256i partial_sign_bits_for_counting = _mm256_xor_si256(partial_sign_bits, partial_sign_bits_upper);
-
-            const __m256i odd_bits = _mm256_shuffle_epi8(bit_helper, partial_sign_bits_for_counting);
-            const __m256i full_sign_bits = _mm256_or_si256(partial_sign_bits, odd_bits);
-
-            const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q8_3 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q8_4 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-
-            const __m256i q2_1 = _mm256_set_epi64x(iq2xs_grid[gindex[ 3]], iq2xs_grid[gindex[ 2]],
-                                                   iq2xs_grid[gindex[ 1]], iq2xs_grid[gindex[ 0]]);
-            const __m256i q2_2 = _mm256_set_epi64x(iq2xs_grid[gindex[ 7]], iq2xs_grid[gindex[ 6]],
-                                                   iq2xs_grid[gindex[ 5]], iq2xs_grid[gindex[ 4]]);
-            const __m256i q2_3 = _mm256_set_epi64x(iq2xs_grid[gindex[11]], iq2xs_grid[gindex[10]],
-                                                   iq2xs_grid[gindex[ 9]], iq2xs_grid[gindex[ 8]]);
-            const __m256i q2_4 = _mm256_set_epi64x(iq2xs_grid[gindex[15]], iq2xs_grid[gindex[14]],
-                                                   iq2xs_grid[gindex[13]], iq2xs_grid[gindex[12]]);
-
-            const __m128i full_signs_l = _mm256_castsi256_si128(full_sign_bits);
-            const __m128i full_signs_h = _mm256_extractf128_si256(full_sign_bits, 1);
-            const __m256i full_signs_1 = MM256_SET_M128I(full_signs_l, full_signs_l);
-            const __m256i full_signs_2 = MM256_SET_M128I(full_signs_h, full_signs_h);
-
-            __m256i signs;
-            signs = _mm256_shuffle_epi8(full_signs_1, block_sign_shuffle_1);
-            signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask);
-            const __m256i q8s_1 = _mm256_sign_epi8(q8_1, _mm256_or_si256(signs, mone));
-
-            signs = _mm256_shuffle_epi8(full_signs_1, block_sign_shuffle_2);
-            signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask);
-            const __m256i q8s_2 = _mm256_sign_epi8(q8_2, _mm256_or_si256(signs, mone));
-
-            signs = _mm256_shuffle_epi8(full_signs_2, block_sign_shuffle_1);
-            signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask);
-            const __m256i q8s_3 = _mm256_sign_epi8(q8_3, _mm256_or_si256(signs, mone));
-
-            signs = _mm256_shuffle_epi8(full_signs_2, block_sign_shuffle_2);
-            signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask);
-            const __m256i q8s_4 = _mm256_sign_epi8(q8_4, _mm256_or_si256(signs, mone));
-
-            const __m256i dot1  = _mm256_maddubs_epi16(q2_1, q8s_1);
-            const __m256i dot2  = _mm256_maddubs_epi16(q2_2, q8s_2);
-            const __m256i dot3  = _mm256_maddubs_epi16(q2_3, q8s_3);
-            const __m256i dot4  = _mm256_maddubs_epi16(q2_4, q8s_4);
-
-            const __m256i sc1 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+0)));
-            const __m256i sc2 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+1)));
-            const __m256i sc3 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+2)));
-            const __m256i sc4 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+3)));
-
-            sumi1 = _mm256_add_epi32(sumi1, _mm256_madd_epi16(dot1, sc1));
-            sumi2 = _mm256_add_epi32(sumi2, _mm256_madd_epi16(dot2, sc2));
-            sumi1 = _mm256_add_epi32(sumi1, _mm256_madd_epi16(dot3, sc3));
-            sumi2 = _mm256_add_epi32(sumi2, _mm256_madd_epi16(dot4, sc4));
-        }
-
-        accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf);
-
-    }
-
-    *s = 0.125f * hsum_float_8(accumf);
-#elif defined(__loongarch_asx)
-
-    const __m256i mone = __lasx_xvreplgr2vr_b(1);
-    static const char block_sign_shuffle_mask_1[32] = {
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
-        0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
-    };
-    static const char block_sign_shuffle_mask_2[32] = {
-        0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
-        0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
-    };
-    static const uint8_t bit_selector_mask_bytes[32] = {
-        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-    };
-
-    const __m256i bit_selector_mask = __lasx_xvld((const __m256i*)bit_selector_mask_bytes, 0);
-    const __m256i block_sign_shuffle_1 = __lasx_xvld((const __m256i*)block_sign_shuffle_mask_1, 0);
-    const __m256i block_sign_shuffle_2 = __lasx_xvld((const __m256i*)block_sign_shuffle_mask_2, 0);
-
-    static const uint8_t k_bit_helper[32] = {
-        0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00,
-        0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00,
-    };
-    const __m256i bit_helper = __lasx_xvld((const __m256i*)k_bit_helper, 0);
-    const __m256i m511 = __lasx_xvreplgr2vr_h(511);
-    const __m128i m4 = __lsx_vreplgr2vr_b(0xf);
-    const __m128i m1 = __lsx_vreplgr2vr_b(1);
-
-    uint64_t aux64;
-
-    // somewhat hacky, but gives a significant boost in performance
-    __m256i aux_gindex;
-    const uint16_t * gindex = (const uint16_t *)&aux_gindex;
-
-    __m256 accumf = (__m256)__lasx_xvldi(0);
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint16_t * restrict q2 = x[i].qs;
-        const int8_t   * restrict q8 = y[i].qs;
-
-        memcpy(&aux64, x[i].scales, 8);
-        __m128i stmp = __lsx_vreplgr2vr_d(aux64);
-        stmp = __lsx_vilvl_b( __lsx_vand_v(__lsx_vsrli_h(stmp, 4), m4), __lsx_vand_v(stmp, m4));
-        const __m128i scales = __lsx_vadd_b(__lsx_vslli_h(stmp, 1), m1);
-
-        __m256i sumi1 = __lasx_xvldi(0);
-        __m256i sumi2 = __lasx_xvldi(0);
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 4) {
-
-            const __m256i q2_data = __lasx_xvld((const __m256i*)q2, 0);  q2 += 16;
-            aux_gindex = __lasx_xvand_v(q2_data, m511);
-
-            const __m256i partial_sign_bits = __lasx_xvsrli_h(q2_data, 9);
-            const __m256i partial_sign_bits_upper = __lasx_xvsrli_h(q2_data, 13);
-            const __m256i partial_sign_bits_for_counting = __lasx_xvxor_v(partial_sign_bits, partial_sign_bits_upper);
-
-            const __m256i odd_bits = lasx_shuffle_b(bit_helper, partial_sign_bits_for_counting);
-            const __m256i full_sign_bits = __lasx_xvor_v(partial_sign_bits, odd_bits);
-
-            const __m256i q8_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i q8_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i q8_3 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i q8_4 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-
-            const __m256i q2_1 = lasx_set_d(iq2xs_grid[gindex[ 3]], iq2xs_grid[gindex[ 2]],
-                                                   iq2xs_grid[gindex[ 1]], iq2xs_grid[gindex[ 0]]);
-            const __m256i q2_2 = lasx_set_d(iq2xs_grid[gindex[ 7]], iq2xs_grid[gindex[ 6]],
-                                                   iq2xs_grid[gindex[ 5]], iq2xs_grid[gindex[ 4]]);
-            const __m256i q2_3 = lasx_set_d(iq2xs_grid[gindex[11]], iq2xs_grid[gindex[10]],
-                                                   iq2xs_grid[gindex[ 9]], iq2xs_grid[gindex[ 8]]);
-            const __m256i q2_4 = lasx_set_d(iq2xs_grid[gindex[15]], iq2xs_grid[gindex[14]],
-                                                   iq2xs_grid[gindex[13]], iq2xs_grid[gindex[12]]);
-
-            const __m128i full_signs_l = lasx_extracti128(full_sign_bits, 0);
-            const __m128i full_signs_h = lasx_extracti128(full_sign_bits, 1);
-            const __m256i full_signs_1 = lasx_insertf128(full_signs_l, full_signs_l);
-            const __m256i full_signs_2 = lasx_insertf128(full_signs_h, full_signs_h);
-
-            __m256i signs;
-            signs = lasx_shuffle_b(full_signs_1, block_sign_shuffle_1);
-            signs = __lasx_xvseq_b(__lasx_xvand_v(signs, bit_selector_mask), bit_selector_mask);
-            const __m256i q8s_1 = __lasx_xvsigncov_b(__lasx_xvor_v(signs, mone), q8_1);
-
-            signs = lasx_shuffle_b(full_signs_1, block_sign_shuffle_2);
-            signs = __lasx_xvseq_b(__lasx_xvand_v(signs, bit_selector_mask), bit_selector_mask);
-            const __m256i q8s_2 = __lasx_xvsigncov_b(__lasx_xvor_v(signs, mone), q8_2);
-
-            signs = lasx_shuffle_b(full_signs_2, block_sign_shuffle_1);
-            signs = __lasx_xvseq_b(__lasx_xvand_v(signs, bit_selector_mask), bit_selector_mask);
-            const __m256i q8s_3 = __lasx_xvsigncov_b(__lasx_xvor_v(signs, mone), q8_3);
-
-            signs = lasx_shuffle_b(full_signs_2, block_sign_shuffle_2);
-            signs = __lasx_xvseq_b(__lasx_xvand_v(signs, bit_selector_mask), bit_selector_mask);
-            const __m256i q8s_4 = __lasx_xvsigncov_b(__lasx_xvor_v(signs, mone), q8_4);
-
-            const __m256i dot1  = lasx_maddubs_h(q2_1, q8s_1);
-            const __m256i dot2  = lasx_maddubs_h(q2_2, q8s_2);
-            const __m256i dot3  = lasx_maddubs_h(q2_3, q8s_3);
-            const __m256i dot4  = lasx_maddubs_h(q2_4, q8s_4);
-
-            const __m256i sc1 = lasx_ext8_16(lsx_shuffle_b(scales, get_scale_shuffle(ib32+0)));
-            const __m256i sc2 = lasx_ext8_16(lsx_shuffle_b(scales, get_scale_shuffle(ib32+1)));
-            const __m256i sc3 = lasx_ext8_16(lsx_shuffle_b(scales, get_scale_shuffle(ib32+2)));
-            const __m256i sc4 = lasx_ext8_16(lsx_shuffle_b(scales, get_scale_shuffle(ib32+3)));
-
-            sumi1 = __lasx_xvadd_w(sumi1, lasx_madd_h(dot1, sc1));
-            sumi2 = __lasx_xvadd_w(sumi2, lasx_madd_h(dot2, sc2));
-            sumi1 = __lasx_xvadd_w(sumi1, lasx_madd_h(dot3, sc3));
-            sumi2 = __lasx_xvadd_w(sumi2, lasx_madd_h(dot4, sc4));
-        }
-
-        accumf = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accumf);
-
-    }
-
-    *s = 0.125f * hsum_float_8(accumf);
-#elif defined(__POWER9_VECTOR__)
-    const vector int v0 = vec_splats((int32_t)0);
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-
-        const uint16_t * restrict q2 = x[i].qs;
-        const uint8_t  * restrict sc = x[i].scales;
-        const int8_t  *  restrict q8 = y[i].qs;
-
-        for (int j = 0; j < QK_K/64; ++j) {
-            __builtin_prefetch(q2, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            vector signed long long aux64x2_0 = {*(const int64_t *)(iq2xs_grid + (q2[0] & 511)), *(const int64_t *)(iq2xs_grid + (q2[1] & 511))};
-            vector signed long long aux64x2_1 = {*(const int64_t *)(iq2xs_grid + (q2[2] & 511)), *(const int64_t *)(iq2xs_grid + (q2[3] & 511))};
-            vector signed long long aux64x2_2 = {*(const int64_t *)(iq2xs_grid + (q2[4] & 511)), *(const int64_t *)(iq2xs_grid + (q2[5] & 511))};
-            vector signed long long aux64x2_3 = {*(const int64_t *)(iq2xs_grid + (q2[6] & 511)), *(const int64_t *)(iq2xs_grid + (q2[7] & 511))};
-
-            vector signed long long vsigns0 = {*(const int64_t *)(signs64 + ((q2[0] >> 9))), *(const int64_t *)(signs64 + ((q2[1] >> 9)))};
-            vector signed long long vsigns1 = {*(const int64_t *)(signs64 + ((q2[2] >> 9))), *(const int64_t *)(signs64 + ((q2[3] >> 9)))};
-            vector signed long long vsigns2 = {*(const int64_t *)(signs64 + ((q2[4] >> 9))), *(const int64_t *)(signs64 + ((q2[5] >> 9)))};
-            vector signed long long vsigns3 = {*(const int64_t *)(signs64 + ((q2[6] >> 9))), *(const int64_t *)(signs64 + ((q2[7] >> 9)))};
-            q2 += 8;
-
-            vector signed char q2x0 = (vector signed char)vec_mul((vector signed char)vsigns0, (vector signed char)aux64x2_0);
-            vector signed char q2x1 = (vector signed char)vec_mul((vector signed char)vsigns1, (vector signed char)aux64x2_1);
-            vector signed char q2x2 = (vector signed char)vec_mul((vector signed char)vsigns2, (vector signed char)aux64x2_2);
-            vector signed char q2x3 = (vector signed char)vec_mul((vector signed char)vsigns3, (vector signed char)aux64x2_3);
-
-            vector signed char q8y0 = vec_xl( 0, q8);
-            vector signed char q8y1 = vec_xl(16, q8);
-            vector signed char q8y2 = vec_xl(32, q8);
-            vector signed char q8y3 = vec_xl(48, q8);
-            q8 += 64;
-
-            vector signed short qv0 = vec_add(vec_mule(q2x0, q8y0), vec_mulo(q2x0, q8y0));
-            vector signed short qv1 = vec_add(vec_mule(q2x1, q8y1), vec_mulo(q2x1, q8y1));
-            vector signed short qv2 = vec_add(vec_mule(q2x2, q8y2), vec_mulo(q2x2, q8y2));
-            vector signed short qv3 = vec_add(vec_mule(q2x3, q8y3), vec_mulo(q2x3, q8y3));
-
-            const uint16_t ls0 = (uint16_t)(sc[0] & 0xf);
-            const uint16_t ls1 = (uint16_t)(sc[0] >>  4);
-            const uint16_t ls2 = (uint16_t)(sc[1] & 0xf);
-            const uint16_t ls3 = (uint16_t)(sc[1] >>  4);
-            sc += 2;
-
-            vector signed short vscales0 = vec_splats((int16_t)(2*ls0+1));
-            vector signed short vscales1 = vec_splats((int16_t)(2*ls1+1));
-            vector signed short vscales2 = vec_splats((int16_t)(2*ls2+1));
-            vector signed short vscales3 = vec_splats((int16_t)(2*ls3+1));
-
-            vsumi0 = vec_msum(qv0, vscales0, vsumi0);
-            vsumi1 = vec_msum(qv1, vscales1, vsumi1);
-            vsumi2 = vec_msum(qv2, vscales2, vsumi2);
-            vsumi3 = vec_msum(qv3, vscales3, vsumi3);
-        }
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = 0.125f * vec_extract(vsumf0, 0);
-#else
-
-    float sumf = 0.f;
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint16_t * restrict q2 = x[i].qs;
-        const uint8_t  * restrict sc = x[i].scales;
-        const int8_t   * restrict q8 = y[i].qs;
-        int32_t bsum = 0;
-        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
-            const uint16_t ls1 = 2*(sc[ib32] & 0xf) + 1;
-            const uint16_t ls2 = 2*(sc[ib32] >>  4) + 1;
-            int32_t sumi = 0;
-            for (int l = 0; l < 2; ++l) {
-                const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (q2[l] & 511));
-                const uint8_t  signs = ksigns_iq2xs[q2[l] >> 9];
-                for (int j = 0; j < 8; ++j) {
-                    sumi += grid[j] * q8[j] * (signs & kmask_iq2xs[j] ? -1 : 1);
-                }
-                q8 += 8;
-            }
-            bsum += sumi * ls1;
-            sumi = 0;
-            for (int l = 2; l < 4; ++l) {
-                const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (q2[l] & 511));
-                const uint8_t  signs = ksigns_iq2xs[q2[l] >> 9];
-                for (int j = 0; j < 8; ++j) {
-                    sumi += grid[j] * q8[j] * (signs & kmask_iq2xs[j] ? -1 : 1);
-                }
-                q8 += 8;
-            }
-            bsum += sumi * ls2;
-            q2 += 4;
-        }
-        sumf += d * bsum;
-    }
-    *s = 0.125f * sumf;
-#endif
-}
-
-void ggml_vec_dot_iq2_s_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_iq2_s * restrict x = vx;
-    const block_q8_K  * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-#if defined(__ARM_NEON)
-
-   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
-   };
-
-    static const uint8_t k_mask2[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,};
-
-    const ggml_uint8x16x2_t mask1 = ggml_vld1q_u8_x2(k_mask1);
-    const uint8x16_t        mask2 = vld1q_u8(k_mask2);
-    const uint8x16_t m1 = vdupq_n_u8(1);
-    const int32x4_t vzero = vdupq_n_s32(0);
-
-    uint8x16x2_t vs;
-    ggml_int8x16x4_t q2s;
-    ggml_int8x16x4_t q8b;
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-
-        const uint8_t * restrict qs = x[i].qs;
-        const uint8_t * restrict qh = x[i].qh;
-        const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8);
-        const int8_t  * restrict q8 = y[i].qs;
-
-        int sumi1 = 0, sumi2 = 0;
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
-            q2s.val[0] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[0] | ((qh[ib32+0] << 8) & 0x300)))),
-                                     vld1_s8((const int8_t *)(iq2s_grid + (qs[1] | ((qh[ib32+0] << 6) & 0x300)))));
-            q2s.val[1] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[2] | ((qh[ib32+0] << 4) & 0x300)))),
-                                     vld1_s8((const int8_t *)(iq2s_grid + (qs[3] | ((qh[ib32+0] << 2) & 0x300)))));
-            q2s.val[2] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[4] | ((qh[ib32+1] << 8) & 0x300)))),
-                                     vld1_s8((const int8_t *)(iq2s_grid + (qs[5] | ((qh[ib32+1] << 6) & 0x300)))));
-            q2s.val[3] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[6] | ((qh[ib32+1] << 4) & 0x300)))),
-                                     vld1_s8((const int8_t *)(iq2s_grid + (qs[7] | ((qh[ib32+1] << 2) & 0x300)))));
-            qs += 8;
-
-            vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[0] | ((uint32_t) signs[1] << 16)));
-            vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2);
-            vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2);
-            vs.val[0] = vceqq_u8(vs.val[0], mask2);
-            vs.val[1] = vceqq_u8(vs.val[1], mask2);
-
-            q2s.val[0] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[0], m1)), q2s.val[0]);
-            q2s.val[1] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[1], m1)), q2s.val[1]);
-
-            vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[2] | ((uint32_t) signs[3] << 16)));
-            vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2);
-            vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2);
-            vs.val[0] = vceqq_u8(vs.val[0], mask2);
-            vs.val[1] = vceqq_u8(vs.val[1], mask2);
-
-            signs += 4;
-
-            q2s.val[2] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[0], m1)), q2s.val[2]);
-            q2s.val[3] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[1], m1)), q2s.val[3]);
-
-            const int32x4_t p1 = ggml_vdotq_s32(vzero, q2s.val[0], q8b.val[0]);
-            const int32x4_t p2 = ggml_vdotq_s32(vzero, q2s.val[1], q8b.val[1]);
-            const int32x4_t p3 = ggml_vdotq_s32(vzero, q2s.val[2], q8b.val[2]);
-            const int32x4_t p4 = ggml_vdotq_s32(vzero, q2s.val[3], q8b.val[3]);
-
-            sumi1 += vaddvq_s32(p1) * (1 + 2*(x[i].scales[ib32+0] & 0xf));
-            sumi2 += vaddvq_s32(p2) * (1 + 2*(x[i].scales[ib32+0] >>  4));
-            sumi1 += vaddvq_s32(p3) * (1 + 2*(x[i].scales[ib32+1] & 0xf));
-            sumi2 += vaddvq_s32(p4) * (1 + 2*(x[i].scales[ib32+1] >>  4));
-        }
-        sumf += d*(sumi1 + sumi2);
-    }
-
-    *s = 0.125f * sumf;
-
-#elif defined(__AVX2__)
-
-   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
-   };
-
-    static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-                                        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-    };
-
-    const __m128i m4 = _mm_set1_epi8(0xf);
-    const __m128i m1 = _mm_set1_epi8(1);
-
-    const __m256i mask1 = _mm256_loadu_si256((const __m256i*)k_mask1);
-    const __m256i mask2 = _mm256_loadu_si256((const __m256i*)k_mask2);
-
-    uint64_t aux64;
-
-    __m256 accumf = _mm256_setzero_ps();
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint8_t * restrict qs = x[i].qs;
-        const uint8_t * restrict qh = x[i].qh;
-        const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8);
-        const int8_t  * restrict q8 = y[i].qs;
-
-        memcpy(&aux64, x[i].scales, 8);
-        const __m128i scales8 = _mm_add_epi8(_mm_slli_epi16(_mm_and_si128(_mm_set_epi64x(aux64 >> 4, aux64), m4), 1), m1);
-        const __m256i scales16 = _mm256_cvtepi8_epi16(scales8); // 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15
-
-        __m256i sumi1 = _mm256_setzero_si256();
-        __m256i sumi2 = _mm256_setzero_si256();
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q2_1 = _mm256_set_epi64x(iq2s_grid[qs[3] | ((qh[ib32+0] << 2) & 0x300)],
-                                                   iq2s_grid[qs[2] | ((qh[ib32+0] << 4) & 0x300)],
-                                                   iq2s_grid[qs[1] | ((qh[ib32+0] << 6) & 0x300)],
-                                                   iq2s_grid[qs[0] | ((qh[ib32+0] << 8) & 0x300)]);
-            const __m256i q2_2 = _mm256_set_epi64x(iq2s_grid[qs[7] | ((qh[ib32+1] << 2) & 0x300)],
-                                                   iq2s_grid[qs[6] | ((qh[ib32+1] << 4) & 0x300)],
-                                                   iq2s_grid[qs[5] | ((qh[ib32+1] << 6) & 0x300)],
-                                                   iq2s_grid[qs[4] | ((qh[ib32+1] << 8) & 0x300)]);
-            qs += 8;
-
-            __m256i aux256 = _mm256_set1_epi32(signs[0] | ((uint32_t) signs[1] << 16));
-            aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2);
-            const __m256i s2_1 = _mm256_cmpeq_epi8(aux256, mask2);
-            const __m256i q8s_1 = _mm256_sub_epi8(_mm256_xor_si256(s2_1, q8_1), s2_1);
-
-            aux256 = _mm256_set1_epi32(signs[2] | ((uint32_t) signs[3] << 16));
-            aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2);
-            const __m256i s2_2 = _mm256_cmpeq_epi8(aux256, mask2);
-            const __m256i q8s_2 = _mm256_sub_epi8(_mm256_xor_si256(s2_2, q8_2), s2_2);
-
-            signs += 4;
-
-            const __m256i dot1  = _mm256_maddubs_epi16(q2_1, q8s_1); // blocks 2*ib32+0, 2*ib32+1
-            const __m256i dot2  = _mm256_maddubs_epi16(q2_2, q8s_2); // blocks 2*ib32+2, 2*ib32+3
-
-            const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_shuffle_epi8(scales16, get_scale_shuffle_k4(ib32+0)));
-            const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_shuffle_epi8(scales16, get_scale_shuffle_k4(ib32+1)));
-            sumi1 = _mm256_add_epi32(sumi1, p1);
-            sumi2 = _mm256_add_epi32(sumi2, p2);
-        }
-
-        accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf);
-
-    }
-
-    *s = 0.125f * hsum_float_8(accumf);
-
-#elif defined(__POWER9_VECTOR__)
-    static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-                                        0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
-    };
-
-    static const uint8_t k_mask2[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,};
-
-    const vector int v0 = vec_splats((int32_t)0);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    const vector unsigned char mask0 = vec_xl( 0, k_mask1);
-    const vector unsigned char mask1 = vec_xl(16, k_mask1);
-    const vector signed char mask2 = (vector signed char)vec_xl( 0, k_mask2);
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-
-        const uint8_t *  restrict q2 = x[i].qs;
-        const uint8_t *  restrict qh = x[i].qh;
-        const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8);
-        const uint8_t *  restrict sc = x[i].scales;
-        const int8_t  *  restrict q8 = y[i].qs;
-
-        for (int j = 0; j < QK_K/32; j += 2) {
-            __builtin_prefetch(q2, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            vector signed long long aux64x2_0 = {*(const int64_t *)(iq2s_grid + (q2[0] | ((qh[0] << 8) & 0x300))), *(const int64_t *)(iq2s_grid + (q2[1] | ((qh[0] << 6) & 0x300)))};
-            vector signed long long aux64x2_1 = {*(const int64_t *)(iq2s_grid + (q2[2] | ((qh[0] << 4) & 0x300))), *(const int64_t *)(iq2s_grid + (q2[3] | ((qh[0] << 2) & 0x300)))};
-            vector signed long long aux64x2_2 = {*(const int64_t *)(iq2s_grid + (q2[4] | ((qh[1] << 8) & 0x300))), *(const int64_t *)(iq2s_grid + (q2[5] | ((qh[1] << 6) & 0x300)))};
-            vector signed long long aux64x2_3 = {*(const int64_t *)(iq2s_grid + (q2[6] | ((qh[1] << 4) & 0x300))), *(const int64_t *)(iq2s_grid + (q2[7] | ((qh[1] << 2) & 0x300)))};
-            q2 += 8;
-            qh += 2;
-
-            vector signed char vsigns01 = (vector signed char)vec_splats(*(const uint32_t *)&signs[0]);
-            vector signed char vsigns23 = (vector signed char)vec_splats(*(const uint32_t *)&signs[2]);
-            signs += 4;
-
-            vector signed char vsigns0 = vec_perm(vsigns01, vsigns01, mask0);
-            vector signed char vsigns1 = vec_perm(vsigns01, vsigns01, mask1);
-            vector signed char vsigns2 = vec_perm(vsigns23, vsigns23, mask0);
-            vector signed char vsigns3 = vec_perm(vsigns23, vsigns23, mask1);
-
-            vsigns0 = (vector signed char)vec_cmpeq(vec_and(vsigns0, mask2), mask2);
-            vsigns1 = (vector signed char)vec_cmpeq(vec_and(vsigns1, mask2), mask2);
-            vsigns2 = (vector signed char)vec_cmpeq(vec_and(vsigns2, mask2), mask2);
-            vsigns3 = (vector signed char)vec_cmpeq(vec_and(vsigns3, mask2), mask2);
-
-            vector signed char q2x0 = vec_sub(vec_xor(vsigns0, (vector signed char)aux64x2_0), vsigns0);
-            vector signed char q2x1 = vec_sub(vec_xor(vsigns1, (vector signed char)aux64x2_1), vsigns1);
-            vector signed char q2x2 = vec_sub(vec_xor(vsigns2, (vector signed char)aux64x2_2), vsigns2);
-            vector signed char q2x3 = vec_sub(vec_xor(vsigns3, (vector signed char)aux64x2_3), vsigns3);
-
-            vector signed char q8y0 = vec_xl( 0, q8);
-            vector signed char q8y1 = vec_xl(16, q8);
-            vector signed char q8y2 = vec_xl(32, q8);
-            vector signed char q8y3 = vec_xl(48, q8);
-            q8 += 64;
-
-            vector signed short qv0 = vec_add(vec_mule(q2x0, q8y0), vec_mulo(q2x0, q8y0));
-            vector signed short qv1 = vec_add(vec_mule(q2x1, q8y1), vec_mulo(q2x1, q8y1));
-            vector signed short qv2 = vec_add(vec_mule(q2x2, q8y2), vec_mulo(q2x2, q8y2));
-            vector signed short qv3 = vec_add(vec_mule(q2x3, q8y3), vec_mulo(q2x3, q8y3));
-
-            const uint16_t ls0 = (uint16_t)(sc[0] & 0xf);
-            const uint16_t ls1 = (uint16_t)(sc[0] >>  4);
-            const uint16_t ls2 = (uint16_t)(sc[1] & 0xf);
-            const uint16_t ls3 = (uint16_t)(sc[1] >>  4);
-            sc += 2;
-
-            vector signed short vscales0 = vec_splats((int16_t)(2*ls0+1));
-            vector signed short vscales1 = vec_splats((int16_t)(2*ls1+1));
-            vector signed short vscales2 = vec_splats((int16_t)(2*ls2+1));
-            vector signed short vscales3 = vec_splats((int16_t)(2*ls3+1));
-
-            vsumi0 = vec_msum(qv0, vscales0, vsumi0);
-            vsumi1 = vec_msum(qv1, vscales1, vsumi1);
-            vsumi2 = vec_msum(qv2, vscales2, vsumi2);
-            vsumi3 = vec_msum(qv3, vscales3, vsumi3);
-        }
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = 0.125f * vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-
-   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
-   };
-
-    static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-                                        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-    };
-
-
-    const __m128i m4 = __lsx_vreplgr2vr_b(0xf);
-    const __m128i m1 = __lsx_vreplgr2vr_b(1);
-
-    const __m256i mask1 = __lasx_xvld((const __m256i*)k_mask1, 0);
-    const __m256i mask2 = __lasx_xvld((const __m256i*)k_mask2, 0);
-    uint64_t aux64;
-
-    __m256 accumf = (__m256)__lasx_xvldi(0);
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint8_t * restrict qs = x[i].qs;
-        const uint8_t * restrict qh = x[i].qh;
-        const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8);
-        const int8_t  * restrict q8 = y[i].qs;
-
-        __m128i tmp1;
-        memcpy(&aux64, x[i].scales, 8);
-        tmp1 = __lsx_vinsgr2vr_d(tmp1, aux64, 0);
-        tmp1 = __lsx_vinsgr2vr_d(tmp1, aux64 >> 4, 1);
-        const __m128i scales8 = __lsx_vadd_b(__lsx_vslli_h(__lsx_vand_v(tmp1, m4), 1), m1);
-        const __m256i scales16 = lasx_ext8_16(scales8); // 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15
-
-        __m256i sumi1 = __lasx_xvldi(0);
-        __m256i sumi2 = __lasx_xvldi(0);
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            const __m256i q8_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i q8_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i q2_1 = lasx_set_d(iq2s_grid[qs[3] | ((qh[ib32+0] << 2) & 0x300)],
-                                                   iq2s_grid[qs[2] | ((qh[ib32+0] << 4) & 0x300)],
-                                                   iq2s_grid[qs[1] | ((qh[ib32+0] << 6) & 0x300)],
-                                                   iq2s_grid[qs[0] | ((qh[ib32+0] << 8) & 0x300)]);
-            const __m256i q2_2 = lasx_set_d(iq2s_grid[qs[7] | ((qh[ib32+1] << 2) & 0x300)],
-                                                   iq2s_grid[qs[6] | ((qh[ib32+1] << 4) & 0x300)],
-                                                   iq2s_grid[qs[5] | ((qh[ib32+1] << 6) & 0x300)],
-                                                   iq2s_grid[qs[4] | ((qh[ib32+1] << 8) & 0x300)]);
-            qs += 8;
-
-            __m256i aux256 = __lasx_xvreplgr2vr_w(signs[0] | ((uint32_t) signs[1] << 16));
-            aux256 = __lasx_xvand_v(lasx_shuffle_b(aux256,mask1), mask2);
-            const __m256i s2_1 = __lasx_xvseq_b(aux256, mask2);
-            const __m256i q8s_1 = __lasx_xvsub_b(__lasx_xvxor_v(s2_1, q8_1), s2_1);
-
-            aux256 = __lasx_xvreplgr2vr_w(signs[2] | ((uint32_t) signs[3] << 16));
-            aux256 = __lasx_xvand_v(lasx_shuffle_b(aux256,mask1), mask2);
-            const __m256i s2_2 = __lasx_xvseq_b(aux256, mask2);
-            const __m256i q8s_2 = __lasx_xvsub_b(__lasx_xvxor_v(s2_2, q8_2), s2_2);
-
-            signs += 4;
-
-            const __m256i dot1  = lasx_maddubs_h(q2_1, q8s_1); // blocks 2*ib32+0, 2*ib32+1
-            const __m256i dot2  = lasx_maddubs_h(q2_2, q8s_2); // blocks 2*ib32+2, 2*ib32+3
-
-            const __m256i p1 = lasx_madd_h(dot1, lasx_shuffle_b(scales16, get_scale_shuffle_k4(ib32+0)));
-            const __m256i p2 = lasx_madd_h(dot2, lasx_shuffle_b(scales16, get_scale_shuffle_k4(ib32+1)));
-            sumi1 = __lasx_xvadd_w(sumi1, p1);
-            sumi2 = __lasx_xvadd_w(sumi2, p2);
-        }
-
-        accumf = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accumf);
-    }
-
-    *s = 0.125f * hsum_float_8(accumf);
-
-#else
-
-    float sumf = 0;
-    for (int i = 0; i < nb; i++) {
-
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const int8_t  * q8 = y[i].qs;
-        const uint8_t * qs = x[i].qs;
-        const uint8_t * qh = x[i].qh;
-        const uint8_t * signs = qs + QK_K/8;
-
-        int bsum = 0;
-        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
-            int ls1 = 1 + 2*(x[i].scales[ib32] & 0xf);
-            int ls2 = 1 + 2*(x[i].scales[ib32] >>  4);
-            int sumi1 = 0, sumi2 = 0;
-            for (int l = 0; l < 2; ++l) {
-                const uint8_t * grid = (const uint8_t *)(iq2s_grid + (qs[l] | (qh[ib32] << (8-2*l) & 0x300)));
-                for (int j = 0; j < 8; ++j) {
-                    sumi1 += q8[j] * grid[j] * (signs[l] & kmask_iq2xs[j] ? -1 : 1);
-                }
-                q8 += 8;
-            }
-            for (int l = 2; l < 4; ++l) {
-                const uint8_t * grid = (const uint8_t *)(iq2s_grid + (qs[l] | (qh[ib32] << (8-2*l) & 0x300)));
-                for (int j = 0; j < 8; ++j) {
-                    sumi2 += q8[j] * grid[j] * (signs[l] & kmask_iq2xs[j] ? -1 : 1);
-                }
-                q8 += 8;
-            }
-            bsum += ls1 * sumi1 + ls2 * sumi2;
-            qs += 4;
-            signs += 4;
-        }
-
-        sumf += d * bsum;
-    }
-
-    *s = 0.125f * sumf;
-
-#endif
-
-}
-
-void ggml_vec_dot_iq3_xxs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_iq3_xxs * restrict x = vx;
-    const block_q8_K    * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-#if defined(__ARM_NEON)
-
-    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
-
-    uint32_t aux32[2];
-
-    ggml_int8x16x4_t q3s;
-    ggml_int8x16x4_t q8b;
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint8_t * restrict q3 = x[i].qs;
-        const uint8_t * restrict gas = x[i].qs + QK_K/4;
-        const int8_t   * restrict q8 = y[i].qs;
-        float sumf1 = 0, sumf2 = 0;
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
-            memcpy(aux32, gas, 2*sizeof(uint32_t)); gas += 2*sizeof(uint32_t);
-            const uint32x4_t aux32x4_0 = ggml_vld1q_u32(iq3xxs_grid[q3[ 0]], iq3xxs_grid[q3[ 1]], iq3xxs_grid[q3[ 2]], iq3xxs_grid[q3[ 3]]);
-            const uint32x4_t aux32x4_1 = ggml_vld1q_u32(iq3xxs_grid[q3[ 4]], iq3xxs_grid[q3[ 5]], iq3xxs_grid[q3[ 6]], iq3xxs_grid[q3[ 7]]);
-            const uint32x4_t aux32x4_2 = ggml_vld1q_u32(iq3xxs_grid[q3[ 8]], iq3xxs_grid[q3[ 9]], iq3xxs_grid[q3[10]], iq3xxs_grid[q3[11]]);
-            const uint32x4_t aux32x4_3 = ggml_vld1q_u32(iq3xxs_grid[q3[12]], iq3xxs_grid[q3[13]], iq3xxs_grid[q3[14]], iq3xxs_grid[q3[15]]);
-            q3 += 16;
-            q3s.val[0] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[0] >>  0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[0] >>  7) & 127))));
-            q3s.val[1] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[0] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[0] >> 21) & 127))));
-            q3s.val[2] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >>  0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >>  7) & 127))));
-            q3s.val[3] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >> 21) & 127))));
-            q3s.val[0] = vmulq_s8(q3s.val[0], vreinterpretq_s8_u32(aux32x4_0));
-            q3s.val[1] = vmulq_s8(q3s.val[1], vreinterpretq_s8_u32(aux32x4_1));
-            q3s.val[2] = vmulq_s8(q3s.val[2], vreinterpretq_s8_u32(aux32x4_2));
-            q3s.val[3] = vmulq_s8(q3s.val[3], vreinterpretq_s8_u32(aux32x4_3));
-            const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[0], q8b.val[0]), q3s.val[1], q8b.val[1]);
-            const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[2], q8b.val[2]), q3s.val[3], q8b.val[3]);
-            sumf1 += vaddvq_s32(p1) * (0.5f + (aux32[0] >> 28));
-            sumf2 += vaddvq_s32(p2) * (0.5f + (aux32[1] >> 28));
-        }
-        sumf += d*(sumf1 + sumf2);
-    }
-    *s = 0.5f * sumf;
-
-#elif defined(__AVX2__)
-
-    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
-
-    uint32_t aux32[2];
-
-    __m256 accumf = _mm256_setzero_ps();
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint8_t * restrict q3 = x[i].qs;
-        const uint8_t * restrict gas = x[i].qs + QK_K/4;
-        const int8_t  * restrict q8 = y[i].qs;
-        __m256i sumi1 = _mm256_setzero_si256();
-        __m256i sumi2 = _mm256_setzero_si256();
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q2_1 = _mm256_set_epi32(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]],
-                                                  iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]);
-            q3 += 8;
-            const __m256i q2_2 = _mm256_set_epi32(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]],
-                                                  iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]);
-            q3 += 8;
-            memcpy(aux32, gas, 8); gas += 8;
-            const __m256i s2_1 = _mm256_set_epi64x(signs64[(aux32[0] >> 21) & 127], signs64[(aux32[0] >> 14) & 127],
-                                                   signs64[(aux32[0] >>  7) & 127], signs64[(aux32[0] >>  0) & 127]);
-            const __m256i s2_2 = _mm256_set_epi64x(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127],
-                                                   signs64[(aux32[1] >>  7) & 127], signs64[(aux32[1] >>  0) & 127]);
-            const __m256i q8s_1 = _mm256_sign_epi8(q8_1, s2_1);
-            const __m256i q8s_2 = _mm256_sign_epi8(q8_2, s2_2);
-            const __m256i dot1  = _mm256_maddubs_epi16(q2_1, q8s_1);
-            const __m256i dot2  = _mm256_maddubs_epi16(q2_2, q8s_2);
-            const uint16_t ls1 = aux32[0] >> 28;
-            const uint16_t ls2 = aux32[1] >> 28;
-            const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(2*ls1+1));
-            const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(2*ls2+1));
-            sumi1 = _mm256_add_epi32(sumi1, p1);
-            sumi2 = _mm256_add_epi32(sumi2, p2);
-        }
-
-        accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf);
-
-    }
-
-    *s = 0.25f * hsum_float_8(accumf);
-
-#elif defined(__POWER9_VECTOR__)
-    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
-
-    const vector int v0 = vec_splats((int32_t)0);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-
-        const uint8_t * restrict q3 = x[i].qs;
-        const uint32_t * restrict signs = (const uint32_t *)(x[i].qs + QK_K/4);
-        const int8_t  * restrict q8 = y[i].qs;
-
-#pragma GCC unroll 1
-        for (int j = 0; j < QK_K/32; j += 2) {
-            __builtin_prefetch(q3, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            vector unsigned int aux32x4_0 = {iq3xxs_grid[q3[ 0]], iq3xxs_grid[q3[ 1]], iq3xxs_grid[q3[ 2]], iq3xxs_grid[q3[ 3]]};
-            vector unsigned int aux32x4_1 = {iq3xxs_grid[q3[ 4]], iq3xxs_grid[q3[ 5]], iq3xxs_grid[q3[ 6]], iq3xxs_grid[q3[ 7]]};
-            vector unsigned int aux32x4_2 = {iq3xxs_grid[q3[ 8]], iq3xxs_grid[q3[ 9]], iq3xxs_grid[q3[10]], iq3xxs_grid[q3[11]]};
-            vector unsigned int aux32x4_3 = {iq3xxs_grid[q3[12]], iq3xxs_grid[q3[13]], iq3xxs_grid[q3[14]], iq3xxs_grid[q3[15]]};
-            q3 += 16;
-
-            vector unsigned long long aux64x2_0 = {(uint64_t)(signs64[(signs[0] >>  0) & 127]), (uint64_t)(signs64[(signs[0] >>  7) & 127])};
-            vector unsigned long long aux64x2_1 = {(uint64_t)(signs64[(signs[0] >> 14) & 127]), (uint64_t)(signs64[(signs[0] >> 21) & 127])};
-            vector unsigned long long aux64x2_2 = {(uint64_t)(signs64[(signs[1] >>  0) & 127]), (uint64_t)(signs64[(signs[1] >>  7) & 127])};
-            vector unsigned long long aux64x2_3 = {(uint64_t)(signs64[(signs[1] >> 14) & 127]), (uint64_t)(signs64[(signs[1] >> 21) & 127])};
-
-            vector signed char q3x0 = vec_mul((vector signed char)aux64x2_0, (vector signed char)aux32x4_0);
-            vector signed char q3x1 = vec_mul((vector signed char)aux64x2_1, (vector signed char)aux32x4_1);
-            vector signed char q3x2 = vec_mul((vector signed char)aux64x2_2, (vector signed char)aux32x4_2);
-            vector signed char q3x3 = vec_mul((vector signed char)aux64x2_3, (vector signed char)aux32x4_3);
-
-            vector signed char q8y0 = vec_xl( 0, q8);
-            vector signed char q8y1 = vec_xl(16, q8);
-            vector signed char q8y2 = vec_xl(32, q8);
-            vector signed char q8y3 = vec_xl(48, q8);
-            q8 += 64;
-
-            vector signed short qv0 = vec_add(vec_mule(q3x0, q8y0), vec_mulo(q3x0, q8y0));
-            vector signed short qv1 = vec_add(vec_mule(q3x1, q8y1), vec_mulo(q3x1, q8y1));
-            vector signed short qv2 = vec_add(vec_mule(q3x2, q8y2), vec_mulo(q3x2, q8y2));
-            vector signed short qv3 = vec_add(vec_mule(q3x3, q8y3), vec_mulo(q3x3, q8y3));
-
-            const uint16_t ls0 = (uint16_t)(signs[0] >> 28);
-            const uint16_t ls1 = (uint16_t)(signs[1] >> 28);
-            signs += 2;
-
-            vector signed short vscales01 = (vector signed short)vec_splats((uint16_t)(2*ls0+1));
-            vector signed short vscales23 = (vector signed short)vec_splats((uint16_t)(2*ls1+1));
-
-            vsumi0 = vec_msum(qv0, vscales01, vsumi0);
-            vsumi1 = vec_msum(qv1, vscales01, vsumi1);
-            vsumi2 = vec_msum(qv2, vscales23, vsumi2);
-            vsumi3 = vec_msum(qv3, vscales23, vsumi3);
-        }
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = 0.25f * vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-
-    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
-
-    uint32_t aux32[2];
-
-    __m256 accumf = (__m256)__lasx_xvldi(0);
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint8_t * restrict q3 = x[i].qs;
-        const uint8_t * restrict gas = x[i].qs + QK_K/4;
-        const int8_t  * restrict q8 = y[i].qs;
-        __m256i sumi1 = __lasx_xvldi(0);
-        __m256i sumi2 = __lasx_xvldi(0);
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            const __m256i q8_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i q8_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i q2_1 = lasx_set_w(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]],
-                                                iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]);
-            q3 += 8;
-            const __m256i q2_2 = lasx_set_w(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]],
-                                                iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]);
-            q3 += 8;
-            memcpy(aux32, gas, 8); gas += 8;
-
-            const __m256i s2_1 = lasx_set_d(signs64[(aux32[0] >> 21) & 127], signs64[(aux32[0] >> 14) & 127],
-                                                   signs64[(aux32[0] >>  7) & 127], signs64[(aux32[0] >>  0) & 127]);
-            const __m256i s2_2 = lasx_set_d(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127],
-                                                   signs64[(aux32[1] >>  7) & 127], signs64[(aux32[1] >>  0) & 127]);
-            const __m256i q8s_1 = __lasx_xvsigncov_b(s2_1, q8_1);
-            const __m256i q8s_2 = __lasx_xvsigncov_b(s2_2, q8_2);
-            const __m256i dot1  = lasx_maddubs_h(q2_1, q8s_1);
-            const __m256i dot2  = lasx_maddubs_h(q2_2, q8s_2);
-            const uint16_t ls1 = aux32[0] >> 28;
-            const uint16_t ls2 = aux32[1] >> 28;
-
-            const __m256i p1 = lasx_madd_h(dot1, __lasx_xvreplgr2vr_h(2*ls1+1));
-            const __m256i p2 = lasx_madd_h(dot2, __lasx_xvreplgr2vr_h(2*ls2+1));
-            sumi1 = __lasx_xvadd_w(sumi1, p1);
-            sumi2 = __lasx_xvadd_w(sumi2, p2);
-        }
-
-        accumf = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accumf);
-    }
-
-    *s = 0.25f * hsum_float_8(accumf);
-
-#else
-
-    uint32_t aux32;
-
-    float sumf = 0.f;
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint8_t * restrict q3 = x[i].qs;
-        const uint8_t * restrict gas = x[i].qs + QK_K/4;
-        const int8_t  * restrict q8 = y[i].qs;
-        int32_t bsum = 0;
-        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
-            memcpy(&aux32, gas, sizeof(uint32_t)); gas += sizeof(uint32_t);
-            const uint32_t ls = 2*(aux32 >> 28) + 1;
-            int32_t sumi = 0;
-            for (int l = 0; l < 4; ++l) {
-                const uint8_t * grid1 = (const uint8_t *)(iq3xxs_grid + q3[2*l+0]);
-                const uint8_t * grid2 = (const uint8_t *)(iq3xxs_grid + q3[2*l+1]);
-                const uint8_t  signs = ksigns_iq2xs[(aux32 >> 7*l) & 127];
-                for (int j = 0; j < 4; ++j) {
-                    sumi += grid1[j] * q8[j+0] * (signs & kmask_iq2xs[j+0] ? -1 : 1);
-                    sumi += grid2[j] * q8[j+4] * (signs & kmask_iq2xs[j+4] ? -1 : 1);
-                }
-                q8 += 8;
-            }
-            q3 += 8;
-            bsum += sumi * ls;
-        }
-        sumf += d * bsum;
-    }
-    *s = 0.25f * sumf;
-#endif
-}
-
-void ggml_vec_dot_iq3_s_q8_K (int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_iq3_s * restrict x = vx;
-    const block_q8_K  * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-#if defined(__ARM_NEON)
-
-    typedef union {
-        uint16x8_t vec_index;
-        uint16_t   index[8];
-    } vec_index_t;
-
-   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
-   };
-
-    static const uint8_t k_mask2[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,};
-
-    static const int16_t k_shift[8] = {8, 7, 6, 5, 4, 3, 2, 1};
-
-    const ggml_uint8x16x2_t mask1 = ggml_vld1q_u8_x2(k_mask1);
-    const uint8x16_t        mask2 = vld1q_u8(k_mask2);
-
-    const int16x8_t  hshift = vld1q_s16(k_shift);
-    const uint16x8_t m256   = vdupq_n_u16(256);
-    const uint8x16_t m1     = vdupq_n_u8(1);
-
-    uint8x16x2_t vs;
-    ggml_int8x16x4_t q3s;
-    ggml_int8x16x4_t q8b;
-    vec_index_t idx;
-
-    uint32_t scales32[2];
-    const uint8_t * scales8 = (const uint8_t *)scales32;
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint8_t * restrict qs = x[i].qs;
-        const uint8_t * restrict qh = x[i].qh;
-        const uint16_t * restrict signs = (const uint16_t *)x[i].signs;
-        const int8_t   * restrict q8 = y[i].qs;
-
-        memcpy(scales32, x[i].scales, 4);
-        scales32[1] = (((scales32[0] >> 4) & 0x0f0f0f0f) << 1) | 0x01010101;
-        scales32[0] = ((scales32[0] & 0x0f0f0f0f) << 1) | 0x01010101;
-
-        int sumi1 = 0, sumi2 = 0;
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
-
-            const uint8x16_t idx_l = vld1q_u8(qs); qs += 16;
-            idx.vec_index = vorrq_u16(vmovl_u8(vget_low_u8 (idx_l)), vandq_u16(vshlq_u16(vdupq_n_u16(qh[ib32+0]), hshift), m256));
-            const uint32x4_t aux32x4_0 = ggml_vld1q_u32(iq3s_grid[idx.index[0]], iq3s_grid[idx.index[1]],
-                                                        iq3s_grid[idx.index[2]], iq3s_grid[idx.index[3]]);
-            const uint32x4_t aux32x4_1 = ggml_vld1q_u32(iq3s_grid[idx.index[4]], iq3s_grid[idx.index[5]],
-                                                        iq3s_grid[idx.index[6]], iq3s_grid[idx.index[7]]);
-            idx.vec_index = vorrq_u16(vmovl_u8(vget_high_u8(idx_l)), vandq_u16(vshlq_u16(vdupq_n_u16(qh[ib32+1]), hshift), m256));
-            const uint32x4_t aux32x4_2 = ggml_vld1q_u32(iq3s_grid[idx.index[0]], iq3s_grid[idx.index[1]],
-                                                        iq3s_grid[idx.index[2]], iq3s_grid[idx.index[3]]);
-            const uint32x4_t aux32x4_3 = ggml_vld1q_u32(iq3s_grid[idx.index[4]], iq3s_grid[idx.index[5]],
-                                                        iq3s_grid[idx.index[6]], iq3s_grid[idx.index[7]]);
-
-
-            vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[0] | ((uint32_t) signs[1] << 16)));
-            vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2);
-            vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2);
-            vs.val[0] = vorrq_u8(vceqq_u8(vs.val[0], mask2), m1);
-            vs.val[1] = vorrq_u8(vceqq_u8(vs.val[1], mask2), m1);
-
-            q3s.val[0] = vmulq_s8(vreinterpretq_s8_u8(vs.val[0]), vreinterpretq_s8_u32(aux32x4_0));
-            q3s.val[1] = vmulq_s8(vreinterpretq_s8_u8(vs.val[1]), vreinterpretq_s8_u32(aux32x4_1));
-
-            vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[2] | ((uint32_t) signs[3] << 16)));
-            vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2);
-            vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2);
-            vs.val[0] = vorrq_u8(vceqq_u8(vs.val[0], mask2), m1);
-            vs.val[1] = vorrq_u8(vceqq_u8(vs.val[1], mask2), m1);
-
-            signs += 4;
-
-            q3s.val[2] = vmulq_s8(vreinterpretq_s8_u8(vs.val[0]), vreinterpretq_s8_u32(aux32x4_2));
-            q3s.val[3] = vmulq_s8(vreinterpretq_s8_u8(vs.val[1]), vreinterpretq_s8_u32(aux32x4_3));
-
-            const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[0], q8b.val[0]), q3s.val[1], q8b.val[1]);
-            const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[2], q8b.val[2]), q3s.val[3], q8b.val[3]);
-
-            sumi1 += vaddvq_s32(p1) * scales8[ib32/2+0];
-            sumi2 += vaddvq_s32(p2) * scales8[ib32/2+4];
-        }
-        sumf += d*(sumi1 + sumi2);
-    }
-    *s = sumf;
-
-#elif defined(__AVX2__)
-
-   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
-   };
-
-    static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-                                        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-    };
-
-    const __m256i mask1 = _mm256_loadu_si256((const __m256i*)k_mask1);
-    const __m256i mask2 = _mm256_loadu_si256((const __m256i*)k_mask2);
-
-    const __m256i idx_shift = _mm256_set_epi32(1, 2, 3, 4, 5, 6, 7, 8);
-    const __m256i idx_mask  = _mm256_set1_epi32(256);
-
-    typedef union {
-        __m256i  vec[2];
-        uint32_t index[16];
-    } index_t;
-
-    index_t idx;
-
-    __m256 accumf = _mm256_setzero_ps();
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint8_t * restrict qs = x[i].qs;
-        const uint8_t * restrict qh = x[i].qh;
-        const uint16_t * restrict signs = (const uint16_t *)x[i].signs;
-        const int8_t  * restrict q8 = y[i].qs;
-        __m256i sumi1 = _mm256_setzero_si256();
-        __m256i sumi2 = _mm256_setzero_si256();
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i idx_l = _mm256_cvtepu8_epi16(_mm_loadu_si128((const __m128i *)qs)); qs += 16;
-            idx.vec[0] = _mm256_set1_epi32(qh[ib32+0]);
-            idx.vec[1] = _mm256_set1_epi32(qh[ib32+1]);
-            idx.vec[0] = _mm256_and_si256(_mm256_sllv_epi32(idx.vec[0], idx_shift), idx_mask);
-            idx.vec[1] = _mm256_and_si256(_mm256_sllv_epi32(idx.vec[1], idx_shift), idx_mask);
-            idx.vec[0] = _mm256_or_si256(idx.vec[0], _mm256_cvtepi16_epi32(_mm256_castsi256_si128(idx_l)));
-            idx.vec[1] = _mm256_or_si256(idx.vec[1], _mm256_cvtepi16_epi32(_mm256_extractf128_si256(idx_l, 1)));
-
-            // At leat on my CPU (Ryzen 7950X), using _mm256_i32gather_epi32 is slower than _mm256_set_epi32. Strange.
-            //const __m256i q2_1 = _mm256_i32gather_epi32((const int *)iq3s_grid, idx.vec[0], 4);
-            //const __m256i q2_2 = _mm256_i32gather_epi32((const int *)iq3s_grid, idx.vec[1], 4);
-            const __m256i q2_1 = _mm256_set_epi32(
-                    iq3s_grid[idx.index[7]], iq3s_grid[idx.index[6]], iq3s_grid[idx.index[5]], iq3s_grid[idx.index[4]],
-                    iq3s_grid[idx.index[3]], iq3s_grid[idx.index[2]], iq3s_grid[idx.index[1]], iq3s_grid[idx.index[0]]
-            );
-            const __m256i q2_2 = _mm256_set_epi32(
-                    iq3s_grid[idx.index[15]], iq3s_grid[idx.index[14]], iq3s_grid[idx.index[13]], iq3s_grid[idx.index[12]],
-                    iq3s_grid[idx.index[11]], iq3s_grid[idx.index[10]], iq3s_grid[idx.index[ 9]], iq3s_grid[idx.index[ 8]]
-            );
-
-            __m256i aux256 = _mm256_set1_epi32(signs[0] | (signs[1] << 16));
-            aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2);
-            const __m256i s2_1 = _mm256_cmpeq_epi8(aux256, mask2);
-            const __m256i q8s_1 = _mm256_sub_epi8(_mm256_xor_si256(s2_1, q8_1), s2_1);
-
-            aux256 = _mm256_set1_epi32(signs[2] | (signs[3] << 16));
-            aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2);
-            const __m256i s2_2 = _mm256_cmpeq_epi8(aux256, mask2);
-            const __m256i q8s_2 = _mm256_sub_epi8(_mm256_xor_si256(s2_2, q8_2), s2_2);
-
-            signs += 4;
-
-            const __m256i dot1  = _mm256_maddubs_epi16(q2_1, q8s_1);
-            const __m256i dot2  = _mm256_maddubs_epi16(q2_2, q8s_2);
-            const uint16_t ls1 = x[i].scales[ib32/2] & 0xf;
-            const uint16_t ls2 = x[i].scales[ib32/2] >>  4;
-            const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(2*ls1+1));
-            const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(2*ls2+1));
-            sumi1 = _mm256_add_epi32(sumi1, p1);
-            sumi2 = _mm256_add_epi32(sumi2, p2);
-        }
-
-        accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf);
-
-    }
-
-    *s = hsum_float_8(accumf);
-
-#elif defined(__POWER9_VECTOR__)
-    static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-                                        0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
-    };
-
-    static const uint8_t k_mask2[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,};
-
-    const vector int v0 = vec_splats((int32_t)0);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    const vector unsigned char mask0 = vec_xl( 0, k_mask1);
-    const vector unsigned char mask1 = vec_xl(16, k_mask1);
-    const vector signed char mask2 = (vector signed char)vec_xl( 0, k_mask2);
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        const uint8_t *  restrict q3 = x[i].qs;
-        const uint8_t *  restrict qh = x[i].qh;
-        const uint16_t * restrict signs = (const uint16_t *)(x[i].signs);
-        const uint8_t *  restrict sc = x[i].scales;
-        const int8_t  *  restrict q8 = y[i].qs;
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-
-        for (int j = 0; j < QK_K/32; j += 2) {
-            __builtin_prefetch(q3, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            vector unsigned int aux32x4_0 = {iq3s_grid[q3[ 0] | ((qh[0] << 8) & 256)], iq3s_grid[q3[ 1] | ((qh[0] << 7) & 256)],
-                                             iq3s_grid[q3[ 2] | ((qh[0] << 6) & 256)], iq3s_grid[q3[ 3] | ((qh[0] << 5) & 256)]};
-            vector unsigned int aux32x4_1 = {iq3s_grid[q3[ 4] | ((qh[0] << 4) & 256)], iq3s_grid[q3[ 5] | ((qh[0] << 3) & 256)],
-                                             iq3s_grid[q3[ 6] | ((qh[0] << 2) & 256)], iq3s_grid[q3[ 7] | ((qh[0] << 1) & 256)]};
-            vector unsigned int aux32x4_2 = {iq3s_grid[q3[ 8] | ((qh[1] << 8) & 256)], iq3s_grid[q3[ 9] | ((qh[1] << 7) & 256)],
-                                             iq3s_grid[q3[10] | ((qh[1] << 6) & 256)], iq3s_grid[q3[11] | ((qh[1] << 5) & 256)]};
-            vector unsigned int aux32x4_3 = {iq3s_grid[q3[12] | ((qh[1] << 4) & 256)], iq3s_grid[q3[13] | ((qh[1] << 3) & 256)],
-                                             iq3s_grid[q3[14] | ((qh[1] << 2) & 256)], iq3s_grid[q3[15] | ((qh[1] << 1) & 256)]};
-            q3 += 16;
-            qh += 2;
-
-            vector signed char vsigns01 = (vector signed char)vec_splats(*(const uint32_t *)&signs[0]);
-            vector signed char vsigns02 = (vector signed char)vec_splats(*(const uint32_t *)&signs[2]);
-            signs += 4;
-
-            vector signed char vsigns0 = vec_perm(vsigns01, vsigns01, mask0);
-            vector signed char vsigns1 = vec_perm(vsigns01, vsigns01, mask1);
-            vector signed char vsigns2 = vec_perm(vsigns02, vsigns02, mask0);
-            vector signed char vsigns3 = vec_perm(vsigns02, vsigns02, mask1);
-
-            vsigns0 = (vector signed char)vec_cmpeq(vec_and(vsigns0, mask2), mask2);
-            vsigns1 = (vector signed char)vec_cmpeq(vec_and(vsigns1, mask2), mask2);
-            vsigns2 = (vector signed char)vec_cmpeq(vec_and(vsigns2, mask2), mask2);
-            vsigns3 = (vector signed char)vec_cmpeq(vec_and(vsigns3, mask2), mask2);
-
-            vector signed char q3x0 = vec_sub(vec_xor(vsigns0, (vector signed char)aux32x4_0), vsigns0);
-            vector signed char q3x1 = vec_sub(vec_xor(vsigns1, (vector signed char)aux32x4_1), vsigns1);
-            vector signed char q3x2 = vec_sub(vec_xor(vsigns2, (vector signed char)aux32x4_2), vsigns2);
-            vector signed char q3x3 = vec_sub(vec_xor(vsigns3, (vector signed char)aux32x4_3), vsigns3);
-
-            vector signed char q8y0 = vec_xl( 0, q8);
-            vector signed char q8y1 = vec_xl(16, q8);
-            vector signed char q8y2 = vec_xl(32, q8);
-            vector signed char q8y3 = vec_xl(48, q8);
-            q8 += 64;
-
-            vector signed short qv0 = vec_add(vec_mule(q3x0, q8y0), vec_mulo(q3x0, q8y0));
-            vector signed short qv1 = vec_add(vec_mule(q3x1, q8y1), vec_mulo(q3x1, q8y1));
-            vector signed short qv2 = vec_add(vec_mule(q3x2, q8y2), vec_mulo(q3x2, q8y2));
-            vector signed short qv3 = vec_add(vec_mule(q3x3, q8y3), vec_mulo(q3x3, q8y3));
-
-            const uint16_t ls0 = (uint16_t)(sc[0] & 0xf);
-            const uint16_t ls1 = (uint16_t)(sc[0] >>  4);
-            sc ++;
-
-            vector signed short vscales01 = (vector signed short)vec_splats((uint16_t)(2*ls0+1));
-            vector signed short vscales23 = (vector signed short)vec_splats((uint16_t)(2*ls1+1));
-
-            vsumi0 = vec_msum(qv0, vscales01, vsumi0);
-            vsumi1 = vec_msum(qv1, vscales01, vsumi1);
-            vsumi2 = vec_msum(qv2, vscales23, vsumi2);
-            vsumi3 = vec_msum(qv3, vscales23, vsumi3);
-        }
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-
-   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
-   };
-
-    static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-                                        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-    };
-
-    const __m256i mask1 = __lasx_xvld((const __m256i*)k_mask1, 0);
-    const __m256i mask2 = __lasx_xvld((const __m256i*)k_mask2, 0);
-
-    __m256i idx_shift = lasx_set_w(1, 2, 3, 4, 5, 6, 7, 8);
-    const __m256i idx_mask  = __lasx_xvreplgr2vr_w(256);
-
-    typedef union {
-        __m256i  vec[2];
-        uint32_t index[16];
-    } index_t;
-
-    index_t idx;
-
-    __m256 accumf = (__m256)__lasx_xvldi(0);
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint8_t * restrict qs = x[i].qs;
-        const uint8_t * restrict qh = x[i].qh;
-        const uint16_t * restrict signs = (const uint16_t *)x[i].signs;
-        const int8_t  * restrict q8 = y[i].qs;
-        __m256i sumi1 = __lasx_xvldi(0);
-        __m256i sumi2 = __lasx_xvldi(0);
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            const __m256i q8_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i q8_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i idx_l = lasx_extu8_16(__lsx_vld(qs, 0)); qs += 16;
-            idx.vec[0] = __lasx_xvreplgr2vr_w(qh[ib32+0]);
-            idx.vec[1] = __lasx_xvreplgr2vr_w(qh[ib32+1]);
-            idx.vec[0] = __lasx_xvand_v(__lasx_xvsll_w(idx.vec[0], idx_shift), idx_mask);
-            idx.vec[1] = __lasx_xvand_v(__lasx_xvsll_w(idx.vec[1], idx_shift), idx_mask);
-            idx.vec[0] = __lasx_xvor_v(idx.vec[0], lasx_ext16_32(lasx_extracti128(idx_l, 0)));
-            idx.vec[1] = __lasx_xvor_v(idx.vec[1], lasx_ext16_32(lasx_extracti128(idx_l, 1)));
-
-            // At leat on my CPU (Ryzen 7950X), using _mm256_i32gather_epi32 is slower than _mm256_set_epi32. Strange.
-            //const __m256i q2_1 = _mm256_i32gather_epi32((const int *)iq3s_grid, idx.vec[0], 4);
-            //const __m256i q2_2 = _mm256_i32gather_epi32((const int *)iq3s_grid, idx.vec[1], 4);
-            const __m256i q2_1 = lasx_set_w(
-                    iq3s_grid[idx.index[7]], iq3s_grid[idx.index[6]], iq3s_grid[idx.index[5]], iq3s_grid[idx.index[4]],
-                    iq3s_grid[idx.index[3]], iq3s_grid[idx.index[2]], iq3s_grid[idx.index[1]], iq3s_grid[idx.index[0]]
-            );
-            const __m256i q2_2 = lasx_set_w(
-                    iq3s_grid[idx.index[15]], iq3s_grid[idx.index[14]], iq3s_grid[idx.index[13]], iq3s_grid[idx.index[12]],
-                    iq3s_grid[idx.index[11]], iq3s_grid[idx.index[10]], iq3s_grid[idx.index[ 9]], iq3s_grid[idx.index[ 8]]
-            );
-
-            __m256i aux256 = __lasx_xvreplgr2vr_w(signs[0] | (signs[1] << 16));
-            aux256 = __lasx_xvand_v(lasx_shuffle_b(aux256,mask1), mask2);
-            const __m256i s2_1 = __lasx_xvseq_b(aux256, mask2);
-            const __m256i q8s_1 = __lasx_xvsub_b(__lasx_xvxor_v(s2_1, q8_1), s2_1);
-
-            aux256 = __lasx_xvreplgr2vr_w(signs[2] | (signs[3] << 16));
-            aux256 = __lasx_xvand_v(lasx_shuffle_b(aux256,mask1), mask2);
-            const __m256i s2_2 = __lasx_xvseq_b(aux256, mask2);
-            const __m256i q8s_2 = __lasx_xvsub_b(__lasx_xvxor_v(s2_2, q8_2), s2_2);
-
-            signs += 4;
-
-            const __m256i dot1 = lasx_maddubs_h(q2_1, q8s_1);
-            const __m256i dot2  = lasx_maddubs_h(q2_2, q8s_2);
-            const uint16_t ls1 = x[i].scales[ib32/2] & 0xf;
-            const uint16_t ls2 = x[i].scales[ib32/2] >>  4;
-            const __m256i p1 = lasx_madd_h(dot1, __lasx_xvreplgr2vr_h(2*ls1+1));
-            const __m256i p2 = lasx_madd_h(dot2, __lasx_xvreplgr2vr_h(2*ls2+1));
-            sumi1 = __lasx_xvadd_w(sumi1, p1);
-            sumi2 = __lasx_xvadd_w(sumi2, p2);
-        }
-
-        accumf = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accumf);
-    }
-
-    *s = hsum_float_8(accumf);
-
-#else
-
-    float sumf = 0.f;
-    for (int i = 0; i < nb; ++i) {
-        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
-        const uint8_t * restrict qs = x[i].qs;
-        const uint8_t * restrict qh = x[i].qh;
-        const uint8_t * restrict signs = x[i].signs;
-        const int8_t  * restrict q8 = y[i].qs;
-        int32_t bsum = 0;
-        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
-            const uint32_t ls1 = 2*(x[i].scales[ib32/2] & 0xf) + 1;
-            const uint32_t ls2 = 2*(x[i].scales[ib32/2] >>  4) + 1;
-            int32_t sumi = 0;
-            for (int l = 0; l < 4; ++l) {
-                const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[ib32+0] << (8-2*l)) & 256)));
-                const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[ib32+0] << (7-2*l)) & 256)));
-                for (int j = 0; j < 4; ++j) {
-                    sumi += grid1[j] * q8[j+0] * (signs[l] & kmask_iq2xs[j+0] ? -1 : 1);
-                    sumi += grid2[j] * q8[j+4] * (signs[l] & kmask_iq2xs[j+4] ? -1 : 1);
-                }
-                q8 += 8;
-            }
-            qs += 8;
-            signs += 4;
-            bsum += sumi * ls1;
-            sumi = 0;
-            for (int l = 0; l < 4; ++l) {
-                const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[ib32+1] << (8-2*l)) & 256)));
-                const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[ib32+1] << (7-2*l)) & 256)));
-                for (int j = 0; j < 4; ++j) {
-                    sumi += grid1[j] * q8[j+0] * (signs[l] & kmask_iq2xs[j+0] ? -1 : 1);
-                    sumi += grid2[j] * q8[j+4] * (signs[l] & kmask_iq2xs[j+4] ? -1 : 1);
-                }
-                q8 += 8;
-            }
-            qs += 8;
-            signs += 4;
-            bsum += sumi * ls2;
-        }
-        sumf += d * bsum;
-    }
-    *s = sumf;
-#endif
-}
-
-
-#if defined(__AVX2__)
-static inline __m256i mul_add_epi8(const __m256i x, const __m256i y) {
-    const __m256i ax = _mm256_sign_epi8(x, x);
-    const __m256i sy = _mm256_sign_epi8(y, x);
-    return _mm256_maddubs_epi16(ax, sy);
-}
-#elif defined(__loongarch_asx)
-static inline __m256i mul_add_epi8(const __m256i x, const __m256i y) {
-    const __m256i ax = __lasx_xvsigncov_b(x, x);
-    const __m256i sy = __lasx_xvsigncov_b(x, y);
-    __m256i tmp1, tmp2, tmp3;
-    tmp1 = __lasx_xvmulwev_h_bu_b(ax, sy);
-    tmp2 = __lasx_xvmulwod_h_bu_b(ax, sy);
-    tmp3 = __lasx_xvadd_h(tmp1, tmp2);
-    return __lasx_xvsat_h(tmp3, 15);
-}
-#endif
-
-void ggml_vec_dot_iq1_s_q8_K  (int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_iq1_s * restrict x = vx;
-    const block_q8_K  * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-#if defined __ARM_NEON
-
-    ggml_int8x16x4_t q1b;
-    ggml_int8x16x4_t q8b;
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-
-        const int8_t   * q8 = y[i].qs;
-        const uint8_t  * qs = x[i].qs;
-        const uint16_t * qh = x[i].qh;
-
-        int sumi1 = 0, sumi2 = 0, sumi3 = 0;
-
-        for (int ib = 0; ib < QK_K/32; ib += 2) {
-
-            q1b.val[0] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[0] | ((qh[ib+0] << 8) & 0x700)))),
-                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[1] | ((qh[ib+0] << 5) & 0x700)))));
-            q1b.val[1] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[2] | ((qh[ib+0] << 2) & 0x700)))),
-                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[3] | ((qh[ib+0] >> 1) & 0x700)))));
-            q1b.val[2] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[4] | ((qh[ib+1] << 8) & 0x700)))),
-                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[5] | ((qh[ib+1] << 5) & 0x700)))));
-            q1b.val[3] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[6] | ((qh[ib+1] << 2) & 0x700)))),
-                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[7] | ((qh[ib+1] >> 1) & 0x700)))));
-            qs += 8;
-
-            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
-
-            const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q1b.val[0], q8b.val[0]), q1b.val[1], q8b.val[1]);
-            const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q1b.val[2], q8b.val[2]), q1b.val[3], q8b.val[3]);
-
-            const int ls1 = 2*((qh[ib+0] >> 12) & 7) + 1;
-            const int ls2 = 2*((qh[ib+1] >> 12) & 7) + 1;
-            sumi1 += vaddvq_s32(p1) * ls1;
-            sumi2 += vaddvq_s32(p2) * ls2;
-            sumi3 += (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]) * ls1 * (qh[ib+0] & 0x8000 ? -1 : 1)
-                   + (y[i].bsums[2*ib+2] + y[i].bsums[2*ib+3]) * ls2 * (qh[ib+1] & 0x8000 ? -1 : 1);
-
-        }
-
-        sumf += y[i].d * GGML_FP16_TO_FP32(x[i].d) * (sumi1 + sumi2 + IQ1S_DELTA * sumi3);
-    }
-
-    *s = sumf;
-
-#elif defined __AVX2__
-
-    __m256 accum = _mm256_setzero_ps();
-    float accum1 = 0;
-    for (int i = 0; i < nb; ++i) {
-
-        const int8_t   * q8 = y[i].qs;
-        const uint8_t  * qs = x[i].qs;
-        const uint16_t * qh = x[i].qh;
-
-        __m256i sumi = _mm256_setzero_si256();
-        int sumi1 = 0;
-        for (int ib = 0; ib < QK_K/32; ib += 2) {
-            const __m256i q1b_1 = _mm256_set_epi64x(iq1s_grid[qs[3] | ((qh[ib+0] >> 1) & 0x700)], iq1s_grid[qs[2] | ((qh[ib+0] << 2) & 0x700)],
-                                                    iq1s_grid[qs[1] | ((qh[ib+0] << 5) & 0x700)], iq1s_grid[qs[0] | ((qh[ib+0] << 8) & 0x700)]);
-            const __m256i q1b_2 = _mm256_set_epi64x(iq1s_grid[qs[7] | ((qh[ib+1] >> 1) & 0x700)], iq1s_grid[qs[6] | ((qh[ib+1] << 2) & 0x700)],
-                                                    iq1s_grid[qs[5] | ((qh[ib+1] << 5) & 0x700)], iq1s_grid[qs[4] | ((qh[ib+1] << 8) & 0x700)]);
-            qs += 8;
-            const __m256i q8b_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8b_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-
-            const __m256i dot1 = mul_add_epi8(q1b_1, q8b_1);
-            const __m256i dot2 = mul_add_epi8(q1b_2, q8b_2);
-            const int16_t ls1 = 2*((qh[ib+0] >> 12) & 7) + 1;
-            const int16_t ls2 = 2*((qh[ib+1] >> 12) & 7) + 1;
-            const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(ls1));
-            const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(ls2));
-
-            sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p1, p2));
-            sumi1 += (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]) * (qh[ib+0] & 0x8000 ? -1 : 1) * ls1
-                   + (y[i].bsums[2*ib+2] + y[i].bsums[2*ib+3]) * (qh[ib+1] & 0x8000 ? -1 : 1) * ls2;
-        }
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        accum = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(sumi), accum);
-        accum1 += d * sumi1;
-
-    }
-
-    *s = hsum_float_8(accum) + IQ1S_DELTA * accum1;
-
-#elif defined(__POWER9_VECTOR__)
-    const vector unsigned char v0 = vec_splats((unsigned char)0x0);
-    const vector unsigned short vsign = vec_splats((unsigned short)0x8000);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    for (int i = 0; i < nb; ++i) {
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
-        vector float vyd = vec_splats(y[i].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed int vsumi0 = vec_splats((int32_t)0);
-        vector signed int vsumi1 = vec_splats((int32_t)0);
-        vector signed int vsumi2 = vec_splats((int32_t)0);
-        vector signed int vsumi3 = vec_splats((int32_t)0);
-        vector signed int vsumi8 = vec_splats((int32_t)0);
-
-        const uint8_t  * restrict q1 = x[i].qs;
-        const uint16_t * restrict qh = x[i].qh;
-        const int8_t   * restrict q8 = y[i].qs;
-        const int16_t  * restrict qs = y[i].bsums;
-
-        for (int j = 0; j < QK_K/32; j += 2) {
-            __builtin_prefetch(q1, 0, 1);
-            __builtin_prefetch(qh, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            vector signed long long aux64x2_0 = {*(const int64_t *)(iq1s_grid + (q1[0] | ((qh[0] << 8) & 0x700))), *(const int64_t *)(iq1s_grid + (q1[1] | ((qh[0] << 5) & 0x700)))};
-            vector signed long long aux64x2_1 = {*(const int64_t *)(iq1s_grid + (q1[2] | ((qh[0] << 2) & 0x700))), *(const int64_t *)(iq1s_grid + (q1[3] | ((qh[0] >> 1) & 0x700)))};
-            vector signed long long aux64x2_2 = {*(const int64_t *)(iq1s_grid + (q1[4] | ((qh[1] << 8) & 0x700))), *(const int64_t *)(iq1s_grid + (q1[5] | ((qh[1] << 5) & 0x700)))};
-            vector signed long long aux64x2_3 = {*(const int64_t *)(iq1s_grid + (q1[6] | ((qh[1] << 2) & 0x700))), *(const int64_t *)(iq1s_grid + (q1[7] | ((qh[1] >> 1) & 0x700)))};
-            q1 += 8;
-
-            vector signed char q1x0 = (vector signed char)aux64x2_0;
-            vector signed char q1x1 = (vector signed char)aux64x2_1;
-            vector signed char q1x2 = (vector signed char)aux64x2_2;
-            vector signed char q1x3 = (vector signed char)aux64x2_3;
-
-            vector signed char q8y0 = vec_xl( 0, q8);
-            vector signed char q8y1 = vec_xl(16, q8);
-            vector signed char q8y2 = vec_xl(32, q8);
-            vector signed char q8y3 = vec_xl(48, q8);
-            q8 += 64;
-
-            vector signed short qv0 = vec_add(vec_mule(q1x0, q8y0), vec_mulo(q1x0, q8y0));
-            vector signed short qv1 = vec_add(vec_mule(q1x1, q8y1), vec_mulo(q1x1, q8y1));
-            vector signed short qv2 = vec_add(vec_mule(q1x2, q8y2), vec_mulo(q1x2, q8y2));
-            vector signed short qv3 = vec_add(vec_mule(q1x3, q8y3), vec_mulo(q1x3, q8y3));
-
-            const uint16_t ls0 = (uint16_t)((qh[0] >> 12) & 7);
-            const uint16_t ls1 = (uint16_t)((qh[1] >> 12) & 7);
-
-            vector signed short vscales01 = (vector signed short)vec_splats((uint16_t)(2*ls0+1));
-            vector signed short vscales23 = (vector signed short)vec_splats((uint16_t)(2*ls1+1));
-            vector signed short vscales = vec_sld(vscales23, vscales01, 8);
-
-            vsumi0 = vec_msum(qv0, vscales01, vsumi0);
-            vsumi1 = vec_msum(qv1, vscales01, vsumi1);
-            vsumi2 = vec_msum(qv2, vscales23, vsumi2);
-            vsumi3 = vec_msum(qv3, vscales23, vsumi3);
-
-            vector signed short q8ysums = vec_xl_len(qs, 8);
-            qs += 4;
-            q8ysums = vec_mergeh(q8ysums, (vector signed short)v0);
-
-            vector signed short qxh = (vector signed short)vec_sld(vec_splats(qh[1]), vec_splats(qh[0]), 8);
-            qh += 2;
-            vector __bool short vsel = vec_cmpge(qxh, (vector signed short)v0);
-
-            vector signed short q8ysum = vec_sel((vector signed short)vec_xor((vector unsigned short)q8ysums, vsign), q8ysums, vsel);
-
-            vsumi8 = vec_add(vec_mule(q8ysum, vscales), vsumi8);
-        }
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-
-        vsumf0 = vec_madd(vec_ctf(vsumi8, 0), vec_mul(vd, vec_splats(IQ1S_DELTA)), vsumf0);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-
-    __m256 accum = (__m256)__lasx_xvldi(0);
-    float accum1 = 0;
-    for (int i = 0; i < nb; ++i) {
-
-        const int8_t   * q8 = y[i].qs;
-        const uint8_t  * qs = x[i].qs;
-        const uint16_t * qh = x[i].qh;
-
-        __m256i sumi = __lasx_xvldi(0);
-        int sumi1 = 0;
-        for (int ib = 0; ib < QK_K/32; ib += 2) {
-            __m256i q1b_1 = __lasx_xvinsgr2vr_d(q1b_1, iq1s_grid[qs[0] | ((qh[ib+0] << 8) & 0x700)], 0);
-            q1b_1 = __lasx_xvinsgr2vr_d(q1b_1, iq1s_grid[qs[1] | ((qh[ib+0] << 5) & 0x700)], 1);
-            q1b_1 = __lasx_xvinsgr2vr_d(q1b_1, iq1s_grid[qs[2] | ((qh[ib+0] << 2) & 0x700)], 2);
-            q1b_1 = __lasx_xvinsgr2vr_d(q1b_1, iq1s_grid[qs[3] | ((qh[ib+0] >> 1) & 0x700)], 3);
-
-            __m256i q1b_2 = __lasx_xvinsgr2vr_d(q1b_2, iq1s_grid[qs[4] | ((qh[ib+1] << 8) & 0x700)], 0);
-            q1b_2 = __lasx_xvinsgr2vr_d(q1b_2, iq1s_grid[qs[5] | ((qh[ib+1] << 5) & 0x700)], 1);
-            q1b_2 = __lasx_xvinsgr2vr_d(q1b_2, iq1s_grid[qs[6] | ((qh[ib+1] << 2) & 0x700)], 2);
-            q1b_2 = __lasx_xvinsgr2vr_d(q1b_2, iq1s_grid[qs[7] | ((qh[ib+1] >> 1) & 0x700)], 3);
-
-            qs += 8;
-            const __m256i q8b_1 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-            const __m256i q8b_2 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
-
-            const __m256i dot1 = mul_add_epi8(q1b_1, q8b_1);
-            const __m256i dot2 = mul_add_epi8(q1b_2, q8b_2);
-            const int16_t ls1 = 2*((qh[ib+0] >> 12) & 7) + 1;
-            const int16_t ls2 = 2*((qh[ib+1] >> 12) & 7) + 1;
-
-            __m256i tmp1, tmp5, tmp6;
-            tmp1 = __lasx_xvreplgr2vr_h(ls1);
-            tmp5 = __lasx_xvmulwev_w_h(dot1, tmp1);
-            tmp6 = __lasx_xvmulwod_w_h(dot1, tmp1);
-            const __m256i p1 = __lasx_xvadd_w(tmp5, tmp6);
-
-            tmp1 = __lasx_xvreplgr2vr_h(ls2);
-            tmp5 = __lasx_xvmulwev_w_h(dot2, tmp1);
-            tmp6 = __lasx_xvmulwod_w_h(dot2, tmp1);
-            const __m256i p2 = __lasx_xvadd_w(tmp5, tmp6);
-
-            sumi = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p1, p2));
-            sumi1 += (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]) * (qh[ib+0] & 0x8000 ? -1 : 1) * ls1
-                   + (y[i].bsums[2*ib+2] + y[i].bsums[2*ib+3]) * (qh[ib+1] & 0x8000 ? -1 : 1) * ls2;
-        }
-
-        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
-        accum = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(sumi), accum);
-        accum1 += d * sumi1;
-    }
-
-    *s = hsum_float_8(accum) + IQ1S_DELTA * accum1;
-
-#else
-
-    float sumf = 0;
-    for (int i = 0; i < nb; i++) {
-
-        const int8_t   * q8 = y[i].qs;
-        const uint8_t  * qs = x[i].qs;
-        const uint16_t * qh = x[i].qh;
-
-        int sumi = 0, sumi1 = 0;
-        for (int ib = 0; ib < QK_K/32; ++ib) {
-            const int ls = 2*((qh[ib] >> 12) & 7) + 1;
-            const int delta = qh[ib] & 0x8000 ? -1 : 1;
-            int lsum = 0;
-            for (int l = 0; l < 4; ++l) {
-                const int8_t * grid = (const int8_t *)(iq1s_grid + (qs[l] | (((qh[ib] >> 3*l) & 7) << 8)));
-                for (int j = 0; j < 8; ++j) {
-                    lsum += q8[j] * grid[j];
-                }
-                q8 += 8;
-            }
-            sumi  += ls * lsum;
-            sumi1 += ls * delta * (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]);
-            qs += 4;
-        }
-
-        sumf += GGML_FP16_TO_FP32(x[i].d) * y[i].d * (sumi + IQ1S_DELTA * sumi1);
-    }
-
-    *s = sumf;
-
-#endif
-}
-
-void ggml_vec_dot_iq1_m_q8_K  (int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(n % QK_K == 0);
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    const block_iq1_m * restrict x = vx;
-    const block_q8_K  * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-    iq1m_scale_t scale;
-
-#if defined __ARM_NEON
-    const int32x4_t mask  = vdupq_n_s32(0x7);
-    const int32x4_t mone  = vdupq_n_s32(1);
-    const int32x4_t mzero = vdupq_n_s32(0);
-
-    ggml_int8x16x4_t deltas;
-    deltas.val[0] = vcombine_s8(vdup_n_s8(+1), vdup_n_s8(+1));
-    deltas.val[1] = vcombine_s8(vdup_n_s8(-1), vdup_n_s8(+1));
-    deltas.val[2] = vcombine_s8(vdup_n_s8(+1), vdup_n_s8(-1));
-    deltas.val[3] = vcombine_s8(vdup_n_s8(-1), vdup_n_s8(-1));
-
-    ggml_int8x16x4_t q1b;
-    ggml_int8x16x4_t q8b;
-
-    uint32_t aux32;
-    const uint8_t * aux8 = (const uint8_t *)&aux32;
-
-    float sumf = 0;
-    for (int i = 0; i < nb; ++i) {
-
-        const int8_t   * q8 = y[i].qs;
-        const uint8_t  * qs = x[i].qs;
-        const uint8_t  * qh = x[i].qh;
-        const uint16_t * sc = (const uint16_t *)x[i].scales;
-
-        scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-
-        int32x4_t sumi1 = mzero;
-        int32x4_t sumi2 = mzero;
-
-        for (int ib = 0; ib < QK_K/32; ib += 2) {
-
-            q1b.val[0] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[0] | ((qh[0] << 8) & 0x700)))),
-                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[1] | ((qh[0] << 4) & 0x700)))));
-            q1b.val[1] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[2] | ((qh[1] << 8) & 0x700)))),
-                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[3] | ((qh[1] << 4) & 0x700)))));
-            q1b.val[2] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[4] | ((qh[2] << 8) & 0x700)))),
-                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[5] | ((qh[2] << 4) & 0x700)))));
-            q1b.val[3] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[6] | ((qh[3] << 8) & 0x700)))),
-                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[7] | ((qh[3] << 4) & 0x700)))));
-
-            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
-
-            const int32x4_t p1 = vpaddq_s32(ggml_vdotq_s32(mzero, q1b.val[0], q8b.val[0]), ggml_vdotq_s32(mzero, q1b.val[1], q8b.val[1]));
-            const int32x4_t p2 = vpaddq_s32(ggml_vdotq_s32(mzero, q1b.val[2], q8b.val[2]), ggml_vdotq_s32(mzero, q1b.val[3], q8b.val[3]));
-            const int32x4_t p12 = vpaddq_s32(p1, p2);
-
-            const uint32_t * qh32 = (const uint32_t *)qh; // we are 4-byte aligned, so we can do that
-            aux32 = ((qh32[0] >> 3) & 0x01010101) | ((qh32[0] >> 6) & 0x02020202);
-
-            const int32x4_t p3 = vpaddq_s32(ggml_vdotq_s32(mzero, deltas.val[aux8[0]], q8b.val[0]), ggml_vdotq_s32(mzero, deltas.val[aux8[1]], q8b.val[1]));
-            const int32x4_t p4 = vpaddq_s32(ggml_vdotq_s32(mzero, deltas.val[aux8[2]], q8b.val[2]), ggml_vdotq_s32(mzero, deltas.val[aux8[3]], q8b.val[3]));
-            const int32x4_t p34 = vpaddq_s32(p3, p4);
-
-            int32x4_t scales_4 = ggml_vld1q_u32(sc[ib/2] >> 0, sc[ib/2] >> 3, sc[ib/2] >> 6, sc[ib/2] >> 9);
-
-            scales_4 = vaddq_s32(vshlq_n_s32(vandq_s32(scales_4, mask), 1), mone);
-
-            sumi1 = vmlaq_s32(sumi1, scales_4, p12);
-            sumi2 = vmlaq_s32(sumi2, scales_4, p34);
-
-            qs += 8; qh += 4;
-
-        }
-
-        sumf += y[i].d * GGML_FP16_TO_FP32(scale.f16) * (vaddvq_s32(sumi1) + IQ1M_DELTA * vaddvq_s32(sumi2));
-    }
-
-    *s = sumf;
-
-#elif defined __AVX2__
-
-    const __m256i mask = _mm256_set1_epi16(0x7);
-    const __m256i mone = _mm256_set1_epi16(1);
-
-    __m256 accum1 = _mm256_setzero_ps();
-    __m256 accum2 = _mm256_setzero_ps();
-    for (int i = 0; i < nb; ++i) {
-
-        const int8_t   * q8 = y[i].qs;
-        const uint8_t  * qs = x[i].qs;
-        const uint8_t  * qh = x[i].qh;
-        const uint16_t * sc = (const uint16_t *)x[i].scales;
-
-        scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-
-        __m256i sumi1 = _mm256_setzero_si256();
-        __m256i sumi2 = _mm256_setzero_si256();
-        for (int ib = 0; ib < QK_K/32; ib += 2) {
-            const __m256i q1b_1 = _mm256_set_epi64x(
-                    iq1s_grid[qs[3] | (((uint16_t)qh[1] << 4) & 0x700)], iq1s_grid[qs[2] | (((uint16_t)qh[1] << 8) & 0x700)],
-                    iq1s_grid[qs[1] | (((uint16_t)qh[0] << 4) & 0x700)], iq1s_grid[qs[0] | (((uint16_t)qh[0] << 8) & 0x700)]
-            );
-            const __m256i q1b_2 = _mm256_set_epi64x(
-                    iq1s_grid[qs[7] | (((uint16_t)qh[3] << 4) & 0x700)], iq1s_grid[qs[6] | (((uint16_t)qh[3] << 8) & 0x700)],
-                    iq1s_grid[qs[5] | (((uint16_t)qh[2] << 4) & 0x700)], iq1s_grid[qs[4] | (((uint16_t)qh[2] << 8) & 0x700)]
-            );
-            const __m256i q8b_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-            const __m256i q8b_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
-
-            const __m256i dot1 = mul_add_epi8(q1b_1, q8b_1);
-            const __m256i dot2 = mul_add_epi8(q1b_2, q8b_2);
-
-            const __m256i delta1 = _mm256_set_epi64x(qh[1] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
-                                                     qh[1] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101,
-                                                     qh[0] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
-                                                     qh[0] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101);
-            const __m256i delta2 = _mm256_set_epi64x(qh[3] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
-                                                     qh[3] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101,
-                                                     qh[2] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
-                                                     qh[2] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101);
-
-            const __m256i dot3 = mul_add_epi8(delta1, q8b_1);
-            const __m256i dot4 = mul_add_epi8(delta2, q8b_2);
-
-            __m256i scale1 = MM256_SET_M128I(_mm_set1_epi16(sc[ib/2] >> 3), _mm_set1_epi16(sc[ib/2] >> 0));
-            __m256i scale2 = MM256_SET_M128I(_mm_set1_epi16(sc[ib/2] >> 9), _mm_set1_epi16(sc[ib/2] >> 6));
-
-            scale1 = _mm256_add_epi16(_mm256_slli_epi16(_mm256_and_si256(scale1, mask), 1), mone);
-            scale2 = _mm256_add_epi16(_mm256_slli_epi16(_mm256_and_si256(scale2, mask), 1), mone);
-            const __m256i p1 = _mm256_madd_epi16(dot1, scale1);
-            const __m256i p2 = _mm256_madd_epi16(dot2, scale2);
-            const __m256i p3 = _mm256_madd_epi16(dot3, scale1);
-            const __m256i p4 = _mm256_madd_epi16(dot4, scale2);
-
-            sumi1 = _mm256_add_epi32(sumi1, _mm256_add_epi32(p1, p2));
-            sumi2 = _mm256_add_epi32(sumi2, _mm256_add_epi32(p3, p4));
-
-            qs += 8; qh += 4;
-        }
-
-        const __m256 d = _mm256_set1_ps(y[i].d * GGML_FP16_TO_FP32(scale.f16));
-
-        accum1 = _mm256_fmadd_ps(d, _mm256_cvtepi32_ps(sumi1), accum1);
-        accum2 = _mm256_fmadd_ps(d, _mm256_cvtepi32_ps(sumi2), accum2);
-    }
-
-    *s = hsum_float_8(accum1) + IQ1M_DELTA * hsum_float_8(accum2);
-
-#else
-
-    int sum1[2], sum2[2], delta[4];
-
-    float sumf = 0;
-    for (int i = 0; i < nb; i++) {
-
-        const int8_t   * q8 = y[i].qs;
-        const uint8_t  * qs = x[i].qs;
-        const uint8_t  * qh = x[i].qh;
-        const uint16_t * sc = (const uint16_t *)x[i].scales;
-
-        scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-
-        int sumi1 = 0, sumi2 = 0;
-        for (int ib = 0; ib < QK_K/32; ++ib) {
-            delta[0] = qh[0] & 0x08 ? -1 : 1;
-            delta[1] = qh[0] & 0x80 ? -1 : 1;
-            delta[2] = qh[1] & 0x08 ? -1 : 1;
-            delta[3] = qh[1] & 0x80 ? -1 : 1;
-            sum1[0] = sum1[1] = sum2[0] = sum2[1] = 0;
-            for (int l = 0; l < 4; ++l) {
-                const int8_t * grid = (const int8_t *)(iq1s_grid + (qs[l] | (((uint16_t)qh[l/2] << (8 - 4*(l%2))) & 0x700)));
-                int lsum1 = 0, lsum2 = 0;
-                for (int j = 0; j < 8; ++j) {
-                    lsum1 += q8[j] * grid[j];
-                    lsum2 += q8[j];
-                }
-                q8 += 8;
-                sum1[l/2] += lsum1;
-                sum2[l/2] += lsum2*delta[l];
-            }
-
-            const int ls1 = 2*((sc[ib/2] >> (6*(ib%2)+0)) & 0x7) + 1;
-            const int ls2 = 2*((sc[ib/2] >> (6*(ib%2)+3)) & 0x7) + 1;
-
-            sumi1 += sum1[0] * ls1 + sum1[1] * ls2;
-            sumi2 += sum2[0] * ls1 + sum2[1] * ls2;
-            qs += 4;
-            qh += 2;
-        }
-
-        sumf += GGML_FP16_TO_FP32(scale.f16) * y[i].d * (sumi1 + IQ1M_DELTA * sumi2);
-    }
-
-    *s = sumf;
-
-#endif
-}
-
-void ggml_vec_dot_iq4_nl_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-    assert(n % QK4_NL == 0);
-    static_assert(QK4_NL == QK8_0, "QK4_NL and QK8_0 must be the same");
-
-    const block_iq4_nl * restrict x = vx;
-    const block_q8_0   * restrict y = vy;
-
-    const int nb = n / QK4_NL;
-
-#if defined __ARM_NEON
-    const int8x16_t values = vld1q_s8(kvalues_iq4nl);
-    const uint8x16_t m4b = vdupq_n_u8(0x0f);
-    uint8x16x2_t q4bits;
-    int8x16x4_t q4b;
-    int8x16x4_t q8b;
-    int32x4_t prod_1, prod_2;
-
-    float sumf = 0;
-
-    for (int ib = 0; ib < nb; ib += 2) {
-
-        q4bits.val[0] = vld1q_u8(x[ib+0].qs);
-        q4bits.val[1] = vld1q_u8(x[ib+1].qs);
-        q8b.val[0]    = vld1q_s8(y[ib+0].qs);
-        q8b.val[1]    = vld1q_s8(y[ib+0].qs + 16);
-        q8b.val[2]    = vld1q_s8(y[ib+1].qs);
-        q8b.val[3]    = vld1q_s8(y[ib+1].qs + 16);
-
-        q4b.val[0] = ggml_vqtbl1q_s8(values, vandq_u8  (q4bits.val[0], m4b));
-        q4b.val[1] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[0], 4));
-        q4b.val[2] = ggml_vqtbl1q_s8(values, vandq_u8  (q4bits.val[1], m4b));
-        q4b.val[3] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[1], 4));
-
-        prod_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[0], q8b.val[0]), q4b.val[1], q8b.val[1]);
-        prod_2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[2], q8b.val[2]), q4b.val[3], q8b.val[3]);
-
-        sumf +=
-            GGML_FP16_TO_FP32(x[ib+0].d) * GGML_FP16_TO_FP32(y[ib+0].d) * vaddvq_s32(prod_1) +
-            GGML_FP16_TO_FP32(x[ib+1].d) * GGML_FP16_TO_FP32(y[ib+1].d) * vaddvq_s32(prod_2);
-    }
-
-    *s = sumf;
-
-#elif defined __AVX2__
-
-    const __m128i values128 = _mm_loadu_si128((const __m128i*)kvalues_iq4nl);
-    const __m128i m4b  = _mm_set1_epi8(0x0f);
-    const __m256i mone = _mm256_set1_epi16(1);
-
-    __m256 accum1 = _mm256_setzero_ps();
-    __m256 accum2 = _mm256_setzero_ps();
-    for (int ib = 0; ib < nb; ib += 2) {
-        const __m128i q4bits_1 = _mm_loadu_si128((const __m128i*)x[0].qs);
-        const __m128i q4bits_2 = _mm_loadu_si128((const __m128i*)x[1].qs);
-        const __m256i q8b_1 = _mm256_loadu_si256((const __m256i *)y[0].qs);
-        const __m256i q8b_2 = _mm256_loadu_si256((const __m256i *)y[1].qs);
-        const __m256i q4b_1 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_1, 4), m4b)),
-                                              _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_1, m4b)));
-        const __m256i q4b_2 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_2, 4), m4b)),
-                                              _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_2, m4b)));
-        const __m256i p16_1 = mul_add_epi8(q4b_1, q8b_1);
-        const __m256i p16_2 = mul_add_epi8(q4b_2, q8b_2);
-        const __m256i p_1 = _mm256_madd_epi16(p16_1, mone);
-        const __m256i p_2 = _mm256_madd_epi16(p16_2, mone);
-        accum1 = _mm256_fmadd_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(y[0].d)*GGML_FP16_TO_FP32(x[0].d)),
-                _mm256_cvtepi32_ps(p_1), accum1);
-        accum2 = _mm256_fmadd_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(y[1].d)*GGML_FP16_TO_FP32(x[1].d)),
-                _mm256_cvtepi32_ps(p_2), accum2);
-
-        y += 2;
-        x += 2;
-    }
-
-    *s = hsum_float_8(_mm256_add_ps(accum1, accum2));
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0xF);
-    const vector signed int v0 = vec_splats((int32_t)0);
-    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-
-    const vector signed char values = vec_xl( 0, kvalues_iq4nl);
-
-#pragma GCC unroll 4
-    for (int ib = 0; ib < nb; ++ib) {
-        __builtin_prefetch(x[ib].qs, 0, 1);
-        __builtin_prefetch(y[ib].qs, 0, 1);
-
-
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[ib].d));
-        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[ib].d));
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed char qxs = (vector signed char)vec_xl( 0, x[ib].qs);
-        vector signed char q4x0 = vec_and(qxs, lowMask);
-        vector signed char q4x1 = vec_sr(qxs, v4);
-
-        q4x0 = vec_perm(values, values, (vector unsigned char)q4x0);
-        q4x1 = vec_perm(values, values, (vector unsigned char)q4x1);
-
-        vector signed char q8y0 = vec_xl( 0, y[ib].qs);
-        vector signed char q8y1 = vec_xl(16, y[ib].qs);
-
-        vector signed short qv0 = vec_add(vec_mule(q4x0, q8y0), vec_mulo(q4x0, q8y0));
-        vector signed short qv1 = vec_add(vec_mule(q4x1, q8y1), vec_mulo(q4x1, q8y1));
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-
-        vsumi0 = vec_sum4s(qv0, vsumi0);
-        vsumi1 = vec_sum4s(qv1, vsumi1);
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined (__loongarch_asx)
-
-    const __m128i values128 = __lsx_vld((const __m128i*)kvalues_iq4nl, 0);
-    const __m128i m4b  = __lsx_vreplgr2vr_b(0x0f);
-    const __m256i mone = __lasx_xvreplgr2vr_h(1);
-
-    __m256 accum1 = (__m256)__lasx_xvldi(0);
-    __m256 accum2 = (__m256)__lasx_xvldi(0);
-    for (int ib = 0; ib < nb; ib += 2) {
-        const __m128i q4bits_1 = __lsx_vld((const __m128i*)x[0].qs, 0);
-        const __m128i q4bits_2 = __lsx_vld((const __m128i*)x[1].qs, 0);
-        const __m256i q8b_1 = __lasx_xvld((const __m256i *)y[0].qs, 0);
-        const __m256i q8b_2 = __lasx_xvld((const __m256i *)y[1].qs, 0);
-        const __m256i q4b_1 = lasx_insertf128(lsx_shuffle_b(values128, __lsx_vand_v(__lsx_vsrli_h(q4bits_1, 4), m4b)),
-                                              lsx_shuffle_b(values128, __lsx_vand_v(q4bits_1, m4b)));
-        const __m256i q4b_2 = lasx_insertf128(lsx_shuffle_b(values128, __lsx_vand_v(__lsx_vsrli_h(q4bits_2, 4), m4b)),
-                                              lsx_shuffle_b(values128, __lsx_vand_v(q4bits_2, m4b)));
-        const __m256i p16_1 = mul_add_epi8(q4b_1, q8b_1);
-        const __m256i p16_2 = mul_add_epi8(q4b_2, q8b_2);
-        const __m256i p_1 = lasx_madd_h(p16_1, mone);
-        const __m256i p_2 = lasx_madd_h(p16_2, mone);
-        accum1 = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(y[0].d)*GGML_FP16_TO_FP32(x[0].d)),
-                __lasx_xvffint_s_w(p_1), accum1);
-        accum2 = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(y[1].d)*GGML_FP16_TO_FP32(x[1].d)),
-                __lasx_xvffint_s_w(p_2), accum2);
-
-        y += 2;
-        x += 2;
-    }
-
-    *s = hsum_float_8(__lasx_xvfadd_s(accum1, accum2));
-
-#else
-    float sumf = 0;
-    for (int ib = 0; ib < nb; ++ib) {
-        const float d = GGML_FP16_TO_FP32(y[ib].d)*GGML_FP16_TO_FP32(x[ib].d);
-        int sumi1 = 0, sumi2 = 0;
-        for (int j = 0; j < QK4_NL/2; ++j) {
-            sumi1 += y[ib].qs[j+       0] * kvalues_iq4nl[x[ib].qs[j] & 0xf];
-            sumi2 += y[ib].qs[j+QK4_NL/2] * kvalues_iq4nl[x[ib].qs[j] >>  4];
-        }
-        sumf += d * (sumi1 + sumi2);
-    }
-    *s = sumf;
-#endif
-}
-
-void ggml_vec_dot_iq4_xs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-    assert(n % QK_K == 0);
-
-    const block_iq4_xs * restrict x = vx;
-    const block_q8_K   * restrict y = vy;
-
-    const int nb = n / QK_K;
-
-#if defined __ARM_NEON
-    const int8x16_t values = vld1q_s8(kvalues_iq4nl);
-    const uint8x16_t m4b = vdupq_n_u8(0x0f);
-    ggml_uint8x16x2_t q4bits;
-    ggml_int8x16x4_t q4b;
-    ggml_int8x16x4_t q8b;
-    int32x4_t prod_1, prod_2;
-
-    float sumf = 0;
-
-    for (int ibl = 0; ibl < nb; ++ibl) {
-
-        const int8_t  * q8 = y[ibl].qs;
-        const uint8_t * q4 = x[ibl].qs;
-        uint16_t h = x[ibl].scales_h;
-
-        int sumi1 = 0, sumi2 = 0;
-        for (int ib = 0; ib < QK_K/64; ++ib) {
-
-            q4bits = ggml_vld1q_u8_x2(q4); q4 += 32;
-            q8b    = ggml_vld1q_s8_x4(q8); q8 += 64;
-
-            q4b.val[0] = ggml_vqtbl1q_s8(values, vandq_u8  (q4bits.val[0], m4b));
-            q4b.val[1] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[0], 4));
-            q4b.val[2] = ggml_vqtbl1q_s8(values, vandq_u8  (q4bits.val[1], m4b));
-            q4b.val[3] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[1], 4));
-
-            prod_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[0], q8b.val[0]), q4b.val[1], q8b.val[1]);
-            prod_2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[2], q8b.val[2]), q4b.val[3], q8b.val[3]);
-
-            int ls1 = ((x[ibl].scales_l[ib] & 0xf) | ((h << 4) & 0x30)) - 32;
-            int ls2 = ((x[ibl].scales_l[ib] >>  4) | ((h << 2) & 0x30)) - 32;
-            h >>= 4;
-            sumi1 += vaddvq_s32(prod_1) * ls1;
-            sumi2 += vaddvq_s32(prod_2) * ls2;
-
-        }
-
-        sumf += GGML_FP16_TO_FP32(x[ibl].d) * y[ibl].d * (sumi1 + sumi2);
-    }
-
-    *s = sumf;
-
-#elif defined __AVX2__
-
-    const __m128i values128 = _mm_loadu_si128((const __m128i*)kvalues_iq4nl);
-    const __m128i m4b  = _mm_set1_epi8(0x0f);
-
-    __m256 accum = _mm256_setzero_ps();
-    for (int ibl = 0; ibl < nb; ++ibl) {
-        const uint8_t * qs = x[ibl].qs;
-        const int8_t  * q8 = y[ibl].qs;
-        uint16_t sh = x[ibl].scales_h;
-        __m256i sumi1 = _mm256_setzero_si256();
-        __m256i sumi2 = _mm256_setzero_si256();
-        for (int ib = 0; ib < QK_K/32; ib += 2) {
-            const __m128i q4bits_1 = _mm_loadu_si128((const __m128i*)qs);  qs += 16;
-            const __m128i q4bits_2 = _mm_loadu_si128((const __m128i*)qs);  qs += 16;
-            const __m256i q8b_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q8b_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
-            const __m256i q4b_1 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_1, 4), m4b)),
-                                                  _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_1, m4b)));
-            const __m256i q4b_2 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_2, 4), m4b)),
-                                                  _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_2, m4b)));
-            const __m256i p16_1 = mul_add_epi8(q4b_1, q8b_1);
-            const __m256i p16_2 = mul_add_epi8(q4b_2, q8b_2);
-            const int16_t ls1 = ((x[ibl].scales_l[ib/2] & 0xf) | ((sh << 4) & 0x30)) - 32;
-            const int16_t ls2 = ((x[ibl].scales_l[ib/2] >>  4) | ((sh << 2) & 0x30)) - 32;
-            sh >>= 4;
-            const __m256i p_1 = _mm256_madd_epi16(p16_1, _mm256_set1_epi16(ls1));
-            const __m256i p_2 = _mm256_madd_epi16(p16_2, _mm256_set1_epi16(ls2));
-            sumi1 = _mm256_add_epi32(p_1, sumi1);
-            sumi2 = _mm256_add_epi32(p_2, sumi2);
-        }
-        accum = _mm256_fmadd_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(x[ibl].d)*y[ibl].d),
-                _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accum);
-    }
-
-    *s = hsum_float_8(accum);
-
-#elif defined(__POWER9_VECTOR__)
-    const vector signed char lowMask = vec_splats((signed char)0xF);
-    const vector int v0 = vec_splats((int32_t)0);
-    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
-
-    vector float vsumf0 = vec_splats(0.0f);
-    vector float vsumf1 = vec_splats(0.0f);
-    vector float vsumf2 = vec_splats(0.0f);
-    vector float vsumf3 = vec_splats(0.0f);
-
-    const vector signed char values = vec_xl( 0, kvalues_iq4nl);
-
-    for (int ibl = 0; ibl < nb; ++ibl) {
-
-        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[ibl].d));
-        vector float vyd = vec_splats(y[ibl].d);
-        vector float vd = vec_mul(vxd, vyd);
-
-        vector signed int vsumi0 = v0;
-        vector signed int vsumi1 = v0;
-        vector signed int vsumi2 = v0;
-        vector signed int vsumi3 = v0;
-
-        uint16_t h = x[ibl].scales_h;
-
-        const uint8_t * restrict q4 = x[ibl].qs;
-        const uint8_t * restrict sc = x[ibl].scales_l;
-        const int8_t  * restrict q8 = y[ibl].qs;
-
-        for (int ib = 0; ib < QK_K/64; ib ++ ) {
-            __builtin_prefetch(q4, 0, 1);
-            __builtin_prefetch(q8, 0, 1);
-
-            vector signed char qxs0 = (vector signed char)vec_xl( 0, q4);
-            vector signed char qxs1 = (vector signed char)vec_xl(16, q4);
-            q4 += 32;
-
-            vector signed char q4x00 = (vector signed char)vec_and(qxs0, lowMask);
-            vector signed char q4x01 = (vector signed char)vec_sr(qxs0, v4);
-            vector signed char q4x10 = (vector signed char)vec_and(qxs1, lowMask);
-            vector signed char q4x11 = (vector signed char)vec_sr(qxs1, v4);
-
-            q4x00 = vec_perm(values, values, (vector unsigned char)q4x00);
-            q4x01 = vec_perm(values, values, (vector unsigned char)q4x01);
-            q4x10 = vec_perm(values, values, (vector unsigned char)q4x10);
-            q4x11 = vec_perm(values, values, (vector unsigned char)q4x11);
-
-            vector signed char q8y0 = vec_xl( 0, q8);
-            vector signed char q8y1 = vec_xl(16, q8);
-            vector signed char q8y2 = vec_xl(32, q8);
-            vector signed char q8y3 = vec_xl(48, q8);
-            q8 += 64;
-
-            vector signed short qv0 = vec_add(vec_mule(q4x00, q8y0), vec_mulo(q4x00, q8y0));
-            vector signed short qv1 = vec_add(vec_mule(q4x01, q8y1), vec_mulo(q4x01, q8y1));
-            vector signed short qv2 = vec_add(vec_mule(q4x10, q8y2), vec_mulo(q4x10, q8y2));
-            vector signed short qv3 = vec_add(vec_mule(q4x11, q8y3), vec_mulo(q4x11, q8y3));
-
-            const uint16_t ls0 = (uint16_t)(((sc[0] & 0xf) | ((h << 4) & 0x30)) - 32);
-            const uint16_t ls1 = (uint16_t)(((sc[0] >>  4) | ((h << 2) & 0x30)) - 32);
-            h >>= 4;
-            sc ++;
-
-            vector signed short vscales01 = vec_splats((int16_t)ls0);
-            vector signed short vscales23 = vec_splats((int16_t)ls1);
-
-            vsumi0 = vec_msum(qv0, vscales01, vsumi0);
-            vsumi1 = vec_msum(qv1, vscales01, vsumi1);
-            vsumi2 = vec_msum(qv2, vscales23, vsumi2);
-            vsumi3 = vec_msum(qv3, vscales23, vsumi3);
-        }
-
-        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
-        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
-        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
-        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
-    }
-
-    vsumf0 = vec_add(vsumf0, vsumf2);
-    vsumf1 = vec_add(vsumf1, vsumf3);
-
-    vsumf0 = vec_add(vsumf0, vsumf1);
-
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
-    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
-
-    *s = vec_extract(vsumf0, 0);
-
-#elif defined(__loongarch_asx)
-
-    const __m128i values128 = __lsx_vld((const __m128i*)kvalues_iq4nl, 0);
-    const __m128i m4b  = __lsx_vreplgr2vr_b(0x0f);
-
-    __m256 accum = (__m256)__lasx_xvldi(0);
-    __m256i tmp1;
-    __m128i tmp0, tmp2, tmp3, tmp4, mask_8f, mask;
-
-    mask_8f = __lsx_vreplgr2vr_b(0x8f);
-    for (int ibl = 0; ibl < nb; ++ibl) {
-        const uint8_t * qs = x[ibl].qs;
-        const int8_t  * q8 = y[ibl].qs;
-        uint16_t sh = x[ibl].scales_h;
-        __m256i sumi1 = __lasx_xvldi(0);
-        __m256i sumi2 = __lasx_xvldi(0);
-        __m128i zero = __lsx_vldi(0);
-        for (int ib = 0; ib < QK_K/32; ib += 2) {
-            const __m128i q4bits_1 = __lsx_vld((const __m128i*)qs, 0);  qs += 16;
-            const __m128i q4bits_2 = __lsx_vld((const __m128i*)qs, 0);  qs += 16;
-            const __m256i q8b_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            const __m256i q8b_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
-            tmp2 = __lsx_vand_v(__lsx_vand_v(__lsx_vsrli_h(q4bits_1, 4), m4b), mask_8f);
-            tmp0 = __lsx_vori_b(tmp2, 0x10);
-            mask = __lsx_vsle_b(zero, tmp2);
-            tmp3 = __lsx_vand_v(tmp0, mask);
-            tmp3 = __lsx_vshuf_b(values128, zero, tmp3);
-
-            tmp2 = __lsx_vand_v(__lsx_vand_v(q4bits_1, m4b), mask_8f);
-            tmp0 = __lsx_vori_b(tmp2, 0x10);
-            mask = __lsx_vsle_b(zero, tmp2);
-            tmp4 = __lsx_vand_v(tmp0, mask);
-            tmp4 = __lsx_vshuf_b(values128, zero, tmp4);
-
-            const __m256i q4b_1 = lasx_insertf128(tmp3, tmp4);
-
-            tmp2 = __lsx_vand_v(__lsx_vand_v(__lsx_vsrli_h(q4bits_2, 4), m4b), mask_8f);
-            tmp0 = __lsx_vori_b(tmp2, 0x10);
-            mask = __lsx_vsle_b(zero, tmp2);
-            tmp3 = __lsx_vand_v(tmp0, mask);
-            tmp3 = __lsx_vshuf_b(values128, zero, tmp3);
-
-            tmp2 = __lsx_vand_v(__lsx_vand_v(q4bits_2, m4b), mask_8f);
-            tmp0 = __lsx_vori_b(tmp2, 0x10);
-            mask = __lsx_vsle_b(zero, tmp2);
-            tmp4 = __lsx_vand_v(tmp0, mask);
-            tmp4 = __lsx_vshuf_b(values128, zero, tmp4);
-
-            const __m256i q4b_2 = lasx_insertf128(tmp3, tmp4);
-
-            const __m256i p16_1 = mul_add_epi8(q4b_1, q8b_1);
-            const __m256i p16_2 = mul_add_epi8(q4b_2, q8b_2);
-            const int16_t ls1 = ((x[ibl].scales_l[ib/2] & 0xf) | ((sh << 4) & 0x30)) - 32;
-            const int16_t ls2 = ((x[ibl].scales_l[ib/2] >>  4) | ((sh << 2) & 0x30)) - 32;
-            sh >>= 4;
-            __m256i tmp5, tmp6;
-            tmp1 = __lasx_xvreplgr2vr_h(ls1);
-            tmp5 = __lasx_xvmulwev_w_h(p16_1, tmp1);
-            tmp6 = __lasx_xvmulwod_w_h(p16_1, tmp1);
-            const __m256i p_1 = __lasx_xvadd_w(tmp5, tmp6);
-            tmp1 = __lasx_xvreplgr2vr_h(ls2);
-            tmp5 = __lasx_xvmulwev_w_h(p16_2, tmp1);
-            tmp6 = __lasx_xvmulwod_w_h(p16_2, tmp1);
-            const __m256i p_2 = __lasx_xvadd_w(tmp5, tmp6);
-            sumi1 = __lasx_xvadd_w(p_1, sumi1);
-            sumi2 = __lasx_xvadd_w(p_2, sumi2);
-        }
-        accum = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(x[ibl].d)*y[ibl].d),
-                __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accum);
-    }
-
-    *s = hsum_float_8(accum);
-
-#else
-    float sumf = 0;
-    for (int ibl = 0; ibl < nb; ++ibl) {
-        const float d4d8 = GGML_FP16_TO_FP32(x[ibl].d) * y[ibl].d;
-        uint16_t h = x[ibl].scales_h;
-        const uint8_t * qs = x[ibl].qs;
-        const int8_t  * q8 = y[ibl].qs;
-        for (int ib = 0; ib < QK_K/32; ib += 2) {
-            const uint8_t ls1 = (x[ibl].scales_l[ib/2] & 0xf) | ((h << 4) & 0x30);
-            const uint8_t ls2 = (x[ibl].scales_l[ib/2] >>  4) | ((h << 2) & 0x30);
-            h >>= 4;
-            const float d1 = d4d8*(ls1 - 32);
-            const float d2 = d4d8*(ls2 - 32);
-            int sumi1 = 0, sumi2 = 0;
-            for (int j = 0; j < 16; ++j) {
-                sumi1 += q8[j+ 0] * kvalues_iq4nl[qs[j] & 0xf];
-                sumi2 += q8[j+16] * kvalues_iq4nl[qs[j] >>  4];
-            }
-            sumf += d1 * (sumi1 + sumi2);
-            qs += 16;
-            q8 += 32;
-            sumi1 = sumi2 = 0;
-            for (int j = 0; j < 16; ++j) {
-                sumi1 += q8[j+ 0] * kvalues_iq4nl[qs[j] & 0xf];
-                sumi2 += q8[j+16] * kvalues_iq4nl[qs[j] >>  4];
-            }
-            sumf += d2 * (sumi1 + sumi2);
-            qs += 16;
-            q8 += 32;
-        }
-    }
-    *s = sumf;
-#endif
-}
-
-// ================================ IQ2 quantization =============================================
-
-typedef struct {
-    uint64_t * grid;
-    int      * map;
-    uint16_t * neighbours;
-} iq2_entry_t;
-
-static iq2_entry_t iq2_data[4] = {
-    {NULL, NULL, NULL},
-    {NULL, NULL, NULL},
-    {NULL, NULL, NULL},
-    {NULL, NULL, NULL},
-};
-
-static inline int iq2_data_index(enum ggml_type type) {
-    GGML_ASSERT(type == GGML_TYPE_IQ2_XXS || type == GGML_TYPE_IQ2_XS || type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M || type == GGML_TYPE_IQ2_S);
-    return type == GGML_TYPE_IQ2_XXS ? 0 :
-           type == GGML_TYPE_IQ2_XS  ? 1 :
-           type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? 2 : 3;
-}
-
-static inline int iq2_grid_size(enum ggml_type type) {
-    GGML_ASSERT(type == GGML_TYPE_IQ2_XXS || type == GGML_TYPE_IQ2_XS || type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M || type == GGML_TYPE_IQ2_S);
-    return type == GGML_TYPE_IQ2_XXS ? 256 :
-           type == GGML_TYPE_IQ2_XS  ? 512 :
-           type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? NGRID_IQ1S : 1024;
-}
-
-static int iq2_compare_func(const void * left, const void * right) {
-    const int * l = (const int *)left;
-    const int * r = (const int *)right;
-    return l[0] < r[0] ? -1 : l[0] > r[0] ? 1 : l[1] < r[1] ? -1 : l[1] > r[1] ? 1 : 0;
-}
-
-void iq2xs_init_impl(enum ggml_type type) {
-    const int gindex = iq2_data_index(type);
-    const int grid_size = iq2_grid_size(type);
-    if (iq2_data[gindex].grid) {
-        return;
-    }
-    static const uint16_t kgrid_2bit_256[256] = {
-            0,     2,     5,     8,    10,    17,    20,    32,    34,    40,    42,    65,    68,    80,    88,    97,
-          100,   128,   130,   138,   162,   257,   260,   272,   277,   320,   388,   408,   512,   514,   546,   642,
-         1025,  1028,  1040,  1057,  1060,  1088,  1090,  1096,  1120,  1153,  1156,  1168,  1188,  1280,  1282,  1288,
-         1312,  1350,  1385,  1408,  1425,  1545,  1552,  1600,  1668,  1700,  2048,  2053,  2056,  2068,  2088,  2113,
-         2116,  2128,  2130,  2184,  2308,  2368,  2562,  2580,  4097,  4100,  4112,  4129,  4160,  4192,  4228,  4240,
-         4245,  4352,  4360,  4384,  4432,  4442,  4480,  4644,  4677,  5120,  5128,  5152,  5157,  5193,  5248,  5400,
-         5474,  5632,  5654,  6145,  6148,  6160,  6208,  6273,  6400,  6405,  6560,  6737,  8192,  8194,  8202,  8260,
-         8289,  8320,  8322,  8489,  8520,  8704,  8706,  9217,  9220,  9232,  9280,  9302,  9472,  9537,  9572,  9872,
-        10248, 10272, 10388, 10820, 16385, 16388, 16400, 16408, 16417, 16420, 16448, 16456, 16470, 16480, 16513, 16516,
-        16528, 16640, 16672, 16737, 16768, 16773, 16897, 16912, 16968, 16982, 17000, 17408, 17416, 17440, 17536, 17561,
-        17682, 17700, 17920, 18433, 18436, 18448, 18496, 18501, 18688, 18776, 18785, 18818, 19013, 19088, 20480, 20488,
-        20497, 20505, 20512, 20608, 20616, 20740, 20802, 20900, 21137, 21648, 21650, 21770, 22017, 22100, 22528, 22545,
-        22553, 22628, 22848, 23048, 24580, 24592, 24640, 24680, 24832, 24917, 25112, 25184, 25600, 25605, 25872, 25874,
-        25988, 26690, 32768, 32770, 32778, 32833, 32898, 33028, 33048, 33088, 33297, 33793, 33796, 33808, 33813, 33856,
-        33888, 34048, 34118, 34196, 34313, 34368, 34400, 34818, 35076, 35345, 36868, 36880, 36900, 36928, 37025, 37142,
-        37248, 37445, 37888, 37922, 37956, 38225, 39041, 39200, 40962, 41040, 41093, 41225, 41472, 42008, 43088, 43268,
-    };
-    static const uint16_t kgrid_2bit_512[512] = {
-            0,     2,     5,     8,    10,    17,    20,    22,    25,    32,    34,    37,    40,    65,    68,    70,
-           73,    80,    82,    85,    88,    97,   100,   128,   130,   133,   136,   145,   148,   153,   160,   257,
-          260,   262,   265,   272,   274,   277,   280,   282,   289,   292,   320,   322,   325,   328,   337,   340,
-          352,   360,   385,   388,   400,   512,   514,   517,   520,   529,   532,   544,   577,   580,   592,   597,
-          640,   650,  1025,  1028,  1030,  1033,  1040,  1042,  1045,  1048,  1057,  1060,  1088,  1090,  1093,  1096,
-         1105,  1108,  1110,  1120,  1153,  1156,  1168,  1280,  1282,  1285,  1288,  1297,  1300,  1312,  1345,  1348,
-         1360,  1377,  1408,  1537,  1540,  1552,  1574,  1600,  1602,  1668,  2048,  2050,  2053,  2056,  2058,  2065,
-         2068,  2080,  2085,  2113,  2116,  2128,  2136,  2176,  2208,  2218,  2305,  2308,  2320,  2368,  2433,  2441,
-         2560,  2592,  2600,  2710,  2720,  4097,  4100,  4102,  4105,  4112,  4114,  4117,  4120,  4129,  4132,  4160,
-         4162,  4165,  4168,  4177,  4180,  4192,  4202,  4225,  4228,  4240,  4352,  4354,  4357,  4360,  4369,  4372,
-         4384,  4417,  4420,  4432,  4480,  4500,  4502,  4609,  4612,  4614,  4624,  4672,  4704,  5120,  5122,  5125,
-         5128,  5137,  5140,  5152,  5185,  5188,  5193,  5200,  5220,  5248,  5377,  5380,  5392,  5440,  5632,  5652,
-         5705,  6145,  6148,  6160,  6162,  6208,  6228,  6278,  6400,  6405,  6502,  6737,  6825,  8192,  8194,  8197,
-         8200,  8202,  8209,  8212,  8224,  8257,  8260,  8272,  8320,  8352,  8449,  8452,  8464,  8512,  8520,  8549,
-         8704,  8738,  8832,  8872,  9217,  9220,  9232,  9257,  9280,  9472,  9537,  9554,  9625,  9729,  9754,  9894,
-        10240, 10248, 10250, 10272, 10325, 10376, 10402, 10600, 10640, 10760, 10784, 10882, 10888, 10890, 16385, 16388,
-        16390, 16393, 16400, 16402, 16405, 16408, 16417, 16420, 16448, 16450, 16453, 16456, 16458, 16465, 16468, 16480,
-        16485, 16513, 16516, 16528, 16640, 16642, 16645, 16648, 16657, 16660, 16672, 16705, 16708, 16720, 16768, 16773,
-        16802, 16897, 16900, 16912, 16914, 16937, 16960, 17408, 17410, 17413, 17416, 17425, 17428, 17433, 17440, 17473,
-        17476, 17488, 17536, 17556, 17665, 17668, 17680, 17700, 17728, 17818, 17920, 17930, 17988, 18000, 18433, 18436,
-        18448, 18496, 18501, 18516, 18530, 18688, 18705, 18756, 18768, 18793, 18948, 20480, 20482, 20485, 20488, 20497,
-        20500, 20512, 20520, 20545, 20548, 20560, 20608, 20737, 20740, 20752, 20757, 20800, 20802, 20992, 21060, 21162,
-        21505, 21508, 21520, 21537, 21568, 21600, 21633, 21665, 21760, 21768, 21888, 21896, 22049, 22120, 22177, 22528,
-        22548, 22593, 22608, 22681, 22810, 22848, 22850, 23173, 24577, 24580, 24592, 24640, 24660, 24674, 24710, 24745,
-        24832, 25124, 25162, 25234, 25600, 25622, 25872, 25920, 25925, 26020, 26625, 26730, 26917, 27142, 27220, 27234,
-        32768, 32770, 32773, 32776, 32785, 32788, 32800, 32810, 32833, 32836, 32848, 32896, 32898, 32936, 32938, 33025,
-        33028, 33030, 33040, 33088, 33105, 33113, 33280, 33312, 33408, 33410, 33440, 33448, 33793, 33796, 33808, 33810,
-        33813, 33856, 33888, 33929, 34048, 34116, 34213, 34328, 34410, 34816, 34824, 34853, 34906, 34944, 34946, 34984,
-        35078, 35362, 35456, 35464, 35478, 35496, 36865, 36868, 36880, 36928, 36950, 36996, 37120, 37154, 37220, 37462,
-        37513, 37888, 37893, 37956, 37968, 37976, 38185, 38288, 38290, 38465, 38993, 39078, 39241, 39445, 39520, 40960,
-        40962, 40968, 40970, 40992, 41002, 41120, 41297, 41305, 41382, 41472, 41474, 41480, 41514, 41600, 41632, 42048,
-        42133, 42597, 42648, 43018, 43040, 43042, 43048, 43168, 43176, 43268, 43396, 43398, 43560, 43562, 43665, 43690,
-    };
-    static const uint16_t kgrid_1bit_2048[NGRID_IQ1S] = {
-            0,     2,     5,     8,    10,    17,    21,    32,    34,    40,    42,    69,    81,    84,    86,   101,
-          128,   130,   136,   138,   149,   160,   162,   168,   170,   260,   261,   273,   276,   278,   281,   282,
-          293,   321,   326,   329,   338,   341,   346,   353,   356,   358,   360,   389,   401,   404,   406,   421,
-          512,   514,   520,   522,   533,   544,   546,   552,   554,   581,   593,   601,   612,   617,   640,   642,
-          648,   650,   657,   661,   665,   672,   674,   680,   682,  1041,  1044,  1046,  1061,  1089,  1097,  1109,
-         1114,  1124,  1125,  1169,  1177,  1189,  1281,  1284,  1285,  1286,  1301,  1304,  1306,  1321,  1344,  1349,
-         1354,  1360,  1361,  1364,  1365,  1366,  1369,  1376,  1378,  1381,  1384,  1386,  1409,  1425,  1429,  1432,
-         1434,  1441,  1444,  1445,  1446,  1449,  1556,  1561,  1601,  1604,  1616,  1618,  1621,  1624,  1632,  1633,
-         1638,  1641,  1669,  1681,  1684,  1689,  2048,  2050,  2056,  2058,  2069,  2080,  2082,  2088,  2090,  2117,
-         2129,  2134,  2149,  2176,  2178,  2184,  2186,  2197,  2208,  2210,  2216,  2218,  2309,  2321,  2324,  2329,
-         2340,  2341,  2369,  2384,  2385,  2389,  2401,  2404,  2409,  2449,  2452,  2454,  2457,  2469,  2560,  2562,
-         2568,  2570,  2581,  2592,  2594,  2600,  2602,  2629,  2641,  2649,  2657,  2661,  2688,  2690,  2693,  2696,
-         2698,  2709,  2720,  2722,  2728,  2730,  4112,  4113,  4116,  4121,  4132,  4133,  4161,  4164,  4176,  4181,
-         4184,  4193,  4196,  4197,  4201,  4241,  4244,  4246,  4257,  4261,  4353,  4356,  4358,  4361,  4368,  4370,
-         4373,  4376,  4385,  4388,  4393,  4421,  4426,  4432,  4433,  4434,  4436,  4437,  4438,  4441,  4448,  4453,
-         4484,  4498,  4501,  4513,  4516,  4625,  4628,  4630,  4645,  4672,  4678,  4681,  4690,  4693,  4696,  4698,
-         4708,  4710,  4741,  4753,  4756,  4758,  4773,  5121,  5126,  5129,  5140,  5141,  5144,  5145,  5153,  5158,
-         5185,  5189,  5190,  5192,  5194,  5201,  5204,  5205,  5206,  5209,  5218,  5221,  5224,  5252,  5257,  5264,
-         5268,  5269,  5272,  5273,  5274,  5281,  5284,  5285,  5289,  5378,  5381,  5386,  5393,  5396,  5397,  5398,
-         5401,  5408,  5410,  5413,  5416,  5418,  5441,  5444,  5445,  5446,  5457,  5458,  5460,  5461,  5462,  5465,
-         5466,  5473,  5476,  5477,  5478,  5481,  5504,  5506,  5508,  5509,  5512,  5514,  5520,  5521,  5524,  5525,
-         5526,  5529,  5530,  5536,  5538,  5541,  5633,  5636,  5637,  5638,  5653,  5654,  5656,  5658,  5665,  5670,
-         5696,  5698,  5700,  5701,  5704,  5706,  5713,  5717,  5718,  5720,  5721,  5729,  5732,  5733,  5736,  5737,
-         5738,  5766,  5770,  5778,  5781,  5796,  5801,  6161,  6166,  6181,  6209,  6212,  6214,  6217,  6224,  6229,
-         6232,  6234,  6240,  6241,  6244,  6246,  6249,  6277,  6289,  6292,  6309,  6416,  6418,  6421,  6426,  6433,
-         6437,  6466,  6468,  6469,  6472,  6481,  6484,  6485,  6486,  6489,  6490,  6496,  6501,  6506,  6537,  6545,
-         6546,  6549,  6552,  6561,  6566,  6569,  6665,  6678,  6692,  6694,  6724,  6726,  6729,  6736,  6738,  6741,
-         6744,  6753,  6758,  6761,  6789,  6801,  6806,  6810,  8192,  8194,  8200,  8202,  8213,  8224,  8226,  8229,
-         8232,  8234,  8261,  8273,  8281,  8289,  8293,  8320,  8322,  8328,  8330,  8341,  8352,  8354,  8357,  8360,
-         8362,  8453,  8465,  8468,  8473,  8485,  8514,  8516,  8521,  8533,  8536,  8538,  8545,  8548,  8549,  8550,
-         8581,  8592,  8598,  8601,  8613,  8705,  8712,  8714,  8721,  8725,  8736,  8738,  8744,  8746,  8773,  8785,
-         8790,  8793,  8805,  8833,  8840,  8842,  8849,  8853,  8864,  8866,  8872,  8874,  9221,  9236,  9238,  9241,
-         9253,  9284,  9285,  9286,  9289,  9298,  9301,  9304,  9306,  9318,  9349,  9361,  9364,  9369,  9377,  9381,
-         9481,  9493,  9505,  9513,  9536,  9541,  9544,  9553,  9556,  9557,  9561,  9570,  9573,  9576,  9609,  9616,
-         9620,  9621,  9624,  9626,  9633,  9636,  9638,  9641,  9733,  9744,  9746,  9753,  9765,  9793,  9801,  9813,
-         9824,  9825,  9833,  9860,  9862,  9872,  9882, 10240, 10242, 10248, 10250, 10261, 10272, 10274, 10280, 10282,
-        10309, 10321, 10324, 10341, 10368, 10370, 10376, 10378, 10400, 10402, 10408, 10410, 10505, 10513, 10516, 10521,
-        10533, 10566, 10569, 10578, 10581, 10593, 10596, 10598, 10601, 10629, 10640, 10646, 10649, 10660, 10661, 10752,
-        10754, 10760, 10762, 10784, 10786, 10792, 10794, 10821, 10833, 10838, 10841, 10853, 10880, 10882, 10888, 10890,
-        10901, 10912, 10914, 10920, 10922, 16389, 16401, 16406, 16421, 16457, 16466, 16469, 16472, 16474, 16481, 16484,
-        16486, 16532, 16537, 16545, 16550, 16640, 16641, 16644, 16646, 16649, 16658, 16661, 16662, 16664, 16666, 16673,
-        16678, 16681, 16709, 16712, 16714, 16721, 16724, 16725, 16726, 16729, 16730, 16741, 16744, 16746, 16769, 16772,
-        16774, 16784, 16786, 16789, 16800, 16801, 16802, 16901, 16913, 16916, 16918, 16933, 16961, 16978, 16981, 16986,
-        16996, 17001, 17033, 17044, 17061, 17409, 17429, 17433, 17449, 17477, 17480, 17482, 17489, 17492, 17493, 17494,
-        17505, 17506, 17509, 17512, 17514, 17537, 17542, 17545, 17552, 17554, 17557, 17568, 17569, 17577, 17665, 17666,
-        17669, 17674, 17681, 17684, 17685, 17686, 17689, 17696, 17701, 17706, 17729, 17732, 17733, 17734, 17737, 17744,
-        17745, 17748, 17749, 17750, 17752, 17753, 17761, 17764, 17765, 17766, 17769, 17794, 17796, 17797, 17800, 17809,
-        17812, 17813, 17814, 17817, 17818, 17829, 17832, 17834, 17921, 17925, 17929, 17940, 17941, 17944, 17946, 17953,
-        17956, 17961, 17984, 17986, 17989, 17992, 18000, 18001, 18002, 18005, 18006, 18009, 18018, 18021, 18024, 18049,
-        18053, 18058, 18068, 18069, 18081, 18084, 18086, 18437, 18449, 18453, 18458, 18469, 18498, 18505, 18512, 18517,
-        18520, 18529, 18532, 18534, 18537, 18565, 18577, 18580, 18582, 18585, 18597, 18689, 18693, 18694, 18698, 18704,
-        18708, 18709, 18712, 18721, 18724, 18726, 18752, 18757, 18762, 18769, 18770, 18772, 18773, 18774, 18777, 18784,
-        18786, 18789, 18790, 18794, 18822, 18825, 18834, 18837, 18838, 18840, 18849, 18852, 18854, 18857, 18966, 19012,
-        19014, 19017, 19029, 19032, 19034, 19044, 19049, 19092, 19109, 20481, 20484, 20485, 20486, 20489, 20498, 20501,
-        20506, 20513, 20516, 20521, 20544, 20549, 20552, 20561, 20564, 20565, 20566, 20569, 20581, 20584, 20614, 20617,
-        20629, 20632, 20640, 20641, 20646, 20649, 20741, 20744, 20745, 20746, 20753, 20756, 20757, 20758, 20760, 20761,
-        20768, 20773, 20774, 20776, 20778, 20801, 20804, 20805, 20806, 20809, 20816, 20817, 20818, 20820, 20821, 20822,
-        20824, 20825, 20826, 20833, 20836, 20837, 20838, 20841, 20866, 20869, 20881, 20884, 20885, 20886, 20889, 20896,
-        20901, 20906, 20993, 20998, 21010, 21013, 21018, 21025, 21028, 21058, 21061, 21066, 21073, 21076, 21077, 21078,
-        21081, 21090, 21093, 21125, 21136, 21138, 21141, 21145, 21146, 21156, 21508, 21509, 21521, 21524, 21525, 21526,
-        21528, 21529, 21537, 21541, 21544, 21546, 21569, 21572, 21573, 21574, 21577, 21578, 21584, 21585, 21588, 21589,
-        21590, 21592, 21593, 21594, 21601, 21602, 21604, 21605, 21606, 21609, 21632, 21640, 21642, 21649, 21652, 21653,
-        21654, 21657, 21665, 21668, 21669, 21674, 21761, 21762, 21764, 21765, 21766, 21769, 21776, 21777, 21778, 21780,
-        21781, 21782, 21785, 21786, 21793, 21796, 21797, 21798, 21801, 21824, 21825, 21826, 21828, 21829, 21830, 21832,
-        21833, 21840, 21841, 21842, 21844, 21845, 21846, 21848, 21849, 21850, 21856, 21857, 21860, 21861, 21862, 21864,
-        21865, 21866, 21889, 21892, 21893, 21897, 21898, 21904, 21905, 21908, 21909, 21910, 21912, 21913, 21921, 21924,
-        21925, 21926, 21929, 22016, 22017, 22018, 22020, 22022, 22024, 22025, 22033, 22036, 22037, 22040, 22041, 22048,
-        22049, 22050, 22052, 22053, 22054, 22056, 22057, 22081, 22085, 22086, 22088, 22089, 22090, 22096, 22097, 22098,
-        22100, 22101, 22102, 22104, 22105, 22106, 22113, 22116, 22117, 22121, 22146, 22149, 22150, 22152, 22153, 22154,
-        22161, 22165, 22170, 22178, 22181, 22182, 22184, 22185, 22532, 22533, 22534, 22537, 22544, 22549, 22552, 22561,
-        22570, 22597, 22600, 22602, 22609, 22612, 22613, 22614, 22616, 22617, 22624, 22626, 22628, 22629, 22658, 22665,
-        22672, 22674, 22677, 22680, 22689, 22697, 22785, 22786, 22789, 22794, 22801, 22804, 22805, 22806, 22809, 22821,
-        22849, 22852, 22853, 22854, 22857, 22864, 22865, 22866, 22868, 22869, 22870, 22872, 22873, 22874, 22881, 22884,
-        22885, 22886, 22889, 22913, 22917, 22921, 22929, 22932, 22933, 22934, 22936, 22937, 22949, 23044, 23048, 23061,
-        23066, 23072, 23077, 23078, 23081, 23109, 23112, 23113, 23121, 23125, 23126, 23128, 23129, 23138, 23141, 23144,
-        23146, 23169, 23178, 23186, 23189, 23190, 23192, 23194, 23201, 24581, 24596, 24598, 24601, 24613, 24644, 24656,
-        24661, 24662, 24664, 24666, 24673, 24676, 24678, 24681, 24705, 24726, 24741, 24833, 24836, 24838, 24841, 24850,
-        24853, 24865, 24866, 24870, 24873, 24901, 24905, 24913, 24917, 24918, 24921, 24933, 24934, 24938, 24964, 24970,
-        24978, 24981, 24993, 24998, 25001, 25105, 25110, 25113, 25152, 25153, 25158, 25173, 25174, 25176, 25184, 25221,
-        25233, 25238, 25253, 25617, 25618, 25621, 25622, 25626, 25633, 25638, 25641, 25664, 25666, 25669, 25672, 25674,
-        25681, 25684, 25685, 25686, 25689, 25690, 25696, 25698, 25701, 25732, 25733, 25737, 25744, 25746, 25748, 25749,
-        25750, 25752, 25754, 25761, 25764, 25769, 25861, 25864, 25866, 25873, 25877, 25878, 25881, 25924, 25925, 25926,
-        25929, 25936, 25937, 25940, 25941, 25942, 25945, 25953, 25956, 25957, 25958, 25961, 25990, 25993, 25994, 26001,
-        26005, 26006, 26009, 26010, 26018, 26021, 26022, 26024, 26114, 26121, 26133, 26144, 26150, 26152, 26153, 26176,
-        26181, 26184, 26186, 26193, 26196, 26197, 26198, 26200, 26202, 26208, 26213, 26216, 26240, 26242, 26245, 26250,
-        26260, 26262, 26264, 26265, 26272, 26276, 26278, 26282, 26646, 26649, 26661, 26689, 26706, 26709, 26714, 26721,
-        26729, 26757, 26769, 26776, 26790, 26881, 26884, 26896, 26901, 26913, 26916, 26918, 26921, 26944, 26945, 26949,
-        26950, 26952, 26961, 26964, 26965, 26966, 26969, 26976, 26981, 26986, 27010, 27012, 27018, 27029, 27041, 27044,
-        27045, 27049, 27153, 27158, 27160, 27201, 27204, 27209, 27216, 27221, 27224, 27226, 27236, 27237, 27241, 27270,
-        27284, 27288, 27290, 27302, 32768, 32770, 32776, 32778, 32800, 32802, 32808, 32810, 32837, 32848, 32849, 32852,
-        32854, 32857, 32869, 32896, 32898, 32904, 32906, 32917, 32928, 32930, 32936, 32938, 33029, 33041, 33044, 33046,
-        33049, 33061, 33089, 33092, 33097, 33104, 33106, 33109, 33110, 33112, 33113, 33124, 33126, 33129, 33157, 33161,
-        33172, 33174, 33177, 33189, 33280, 33282, 33288, 33290, 33301, 33312, 33314, 33320, 33322, 33361, 33364, 33369,
-        33381, 33408, 33410, 33416, 33418, 33429, 33440, 33442, 33448, 33450, 33812, 33817, 33857, 33860, 33873, 33877,
-        33882, 33889, 33892, 33897, 33940, 33945, 34049, 34057, 34066, 34069, 34074, 34086, 34089, 34112, 34113, 34117,
-        34120, 34129, 34132, 34133, 34134, 34137, 34138, 34149, 34150, 34152, 34154, 34177, 34180, 34182, 34185, 34192,
-        34194, 34197, 34200, 34214, 34321, 34326, 34329, 34341, 34369, 34372, 34377, 34378, 34384, 34389, 34393, 34394,
-        34401, 34406, 34410, 34437, 34449, 34458, 34468, 34816, 34818, 34824, 34826, 34837, 34848, 34850, 34856, 34858,
-        34881, 34885, 34897, 34900, 34905, 34917, 34921, 34944, 34946, 34952, 34954, 34965, 34976, 34978, 34984, 34986,
-        35077, 35078, 35089, 35092, 35094, 35109, 35137, 35140, 35142, 35145, 35152, 35154, 35157, 35162, 35169, 35172,
-        35205, 35222, 35225, 35237, 35328, 35330, 35336, 35338, 35349, 35360, 35362, 35368, 35370, 35397, 35409, 35412,
-        35414, 35456, 35458, 35464, 35466, 35477, 35488, 35490, 35496, 35498, 36869, 36881, 36886, 36888, 36889, 36901,
-        36929, 36934, 36937, 36949, 36952, 36954, 36969, 36970, 36997, 37009, 37012, 37014, 37017, 37029, 37121, 37124,
-        37126, 37129, 37136, 37141, 37144, 37146, 37153, 37156, 37158, 37161, 37184, 37189, 37200, 37201, 37204, 37205,
-        37206, 37209, 37218, 37221, 37252, 37254, 37266, 37269, 37272, 37281, 37284, 37286, 37289, 37381, 37393, 37396,
-        37401, 37413, 37444, 37446, 37449, 37456, 37458, 37461, 37464, 37478, 37481, 37509, 37524, 37526, 37545, 37889,
-        37892, 37894, 37904, 37909, 37912, 37926, 37952, 37962, 37969, 37972, 37973, 37974, 37976, 37977, 37984, 37985,
-        37986, 37989, 38020, 38022, 38034, 38036, 38037, 38040, 38049, 38057, 38144, 38149, 38152, 38154, 38160, 38161,
-        38164, 38165, 38166, 38169, 38177, 38181, 38185, 38186, 38209, 38212, 38213, 38214, 38217, 38224, 38225, 38226,
-        38228, 38229, 38230, 38232, 38233, 38234, 38241, 38244, 38245, 38246, 38249, 38273, 38277, 38280, 38289, 38290,
-        38292, 38293, 38294, 38297, 38298, 38304, 38306, 38309, 38312, 38314, 38401, 38404, 38416, 38421, 38425, 38432,
-        38438, 38441, 38469, 38472, 38473, 38481, 38482, 38485, 38486, 38489, 38501, 38504, 38530, 38532, 38537, 38538,
-        38546, 38548, 38549, 38564, 38566, 38569, 38917, 38934, 38937, 38949, 38977, 38982, 38992, 38994, 38997, 38998,
-        39002, 39012, 39013, 39045, 39057, 39062, 39065, 39077, 39172, 39174, 39177, 39184, 39186, 39189, 39192, 39194,
-        39200, 39201, 39204, 39206, 39232, 39234, 39237, 39240, 39242, 39249, 39252, 39253, 39254, 39257, 39266, 39269,
-        39270, 39274, 39297, 39300, 39312, 39314, 39317, 39322, 39329, 39334, 39429, 39445, 39461, 39492, 39494, 39497,
-        39504, 39509, 39512, 39521, 39557, 39569, 39572, 39573, 39574, 40960, 40962, 40968, 40970, 40981, 40992, 40994,
-        41000, 41002, 41029, 41041, 41044, 41046, 41049, 41088, 41090, 41096, 41098, 41109, 41120, 41122, 41128, 41130,
-        41221, 41225, 41233, 41236, 41238, 41241, 41242, 41286, 41289, 41297, 41301, 41304, 41306, 41313, 41316, 41349,
-        41360, 41362, 41366, 41369, 41474, 41480, 41482, 41488, 41497, 41506, 41512, 41514, 41541, 41553, 41558, 41561,
-        41573, 41600, 41602, 41608, 41610, 41621, 41632, 41634, 41640, 41642, 42009, 42021, 42049, 42052, 42064, 42068,
-        42069, 42072, 42074, 42081, 42085, 42086, 42088, 42089, 42117, 42246, 42249, 42256, 42258, 42261, 42264, 42278,
-        42281, 42306, 42309, 42321, 42324, 42325, 42326, 42329, 42341, 42346, 42369, 42372, 42373, 42374, 42377, 42386,
-        42389, 42392, 42501, 42513, 42518, 42522, 42529, 42533, 42564, 42566, 42570, 42578, 42581, 42582, 42584, 42592,
-        42594, 42630, 42640, 42645, 42646, 42649, 42657, 42660, 42662, 43008, 43010, 43016, 43018, 43040, 43042, 43048,
-        43050, 43089, 43092, 43094, 43097, 43136, 43138, 43144, 43146, 43157, 43168, 43170, 43176, 43178, 43269, 43284,
-        43289, 43297, 43301, 43329, 43344, 43349, 43354, 43361, 43366, 43369, 43408, 43414, 43520, 43522, 43528, 43530,
-        43552, 43554, 43560, 43562, 43601, 43604, 43606, 43648, 43650, 43656, 43658, 43669, 43680, 43682, 43688, 43690,
-    };
-    static const uint16_t kgrid_2bit_1024[1024] = {
-            0,     2,     5,     8,    10,    17,    20,    22,    25,    32,    34,    37,    40,    65,    68,    70,
-           73,    80,    82,    85,    88,    97,   100,   102,   105,   128,   130,   133,   136,   145,   148,   160,
-          165,   170,   257,   260,   262,   265,   272,   274,   277,   280,   289,   292,   320,   322,   325,   328,
-          337,   340,   342,   345,   352,   357,   360,   385,   388,   400,   402,   405,   417,   420,   512,   514,
-          517,   520,   529,   532,   544,   554,   577,   580,   582,   585,   592,   597,   640,   645,   650,   660,
-          674,  1025,  1028,  1030,  1033,  1040,  1042,  1045,  1048,  1057,  1060,  1062,  1065,  1088,  1090,  1093,
-         1096,  1098,  1105,  1108,  1110,  1113,  1120,  1122,  1125,  1153,  1156,  1158,  1161,  1168,  1173,  1176,
-         1185,  1188,  1280,  1282,  1285,  1288,  1290,  1297,  1300,  1302,  1305,  1312,  1317,  1320,  1345,  1348,
-         1350,  1353,  1360,  1362,  1365,  1368,  1377,  1380,  1408,  1410,  1413,  1416,  1425,  1428,  1440,  1537,
-         1540,  1542,  1545,  1552,  1557,  1600,  1605,  1608,  1617,  1620,  1632,  1665,  1668,  1680,  2048,  2050,
-         2053,  2056,  2065,  2068,  2070,  2073,  2080,  2085,  2090,  2113,  2116,  2118,  2121,  2128,  2130,  2133,
-         2136,  2145,  2148,  2176,  2181,  2196,  2218,  2305,  2308,  2320,  2322,  2325,  2328,  2337,  2368,  2373,
-         2376,  2385,  2388,  2400,  2433,  2448,  2560,  2577,  2580,  2594,  2600,  2602,  2640,  2713,  4097,  4100,
-         4102,  4105,  4112,  4114,  4117,  4120,  4129,  4132,  4134,  4160,  4162,  4165,  4168,  4177,  4180,  4182,
-         4185,  4192,  4194,  4197,  4200,  4225,  4228,  4230,  4240,  4245,  4248,  4257,  4260,  4352,  4354,  4357,
-         4360,  4362,  4369,  4372,  4374,  4377,  4384,  4386,  4389,  4392,  4417,  4420,  4422,  4425,  4432,  4434,
-         4437,  4440,  4449,  4452,  4480,  4482,  4485,  4488,  4497,  4500,  4609,  4612,  4617,  4624,  4629,  4641,
-         4644,  4672,  4677,  4689,  4692,  4737,  4740,  4752,  5120,  5122,  5125,  5128,  5137,  5140,  5142,  5145,
-         5152,  5157,  5160,  5185,  5188,  5190,  5193,  5200,  5202,  5205,  5208,  5217,  5220,  5248,  5250,  5253,
-         5256,  5265,  5268,  5280,  5377,  5380,  5382,  5385,  5392,  5394,  5397,  5400,  5409,  5412,  5440,  5442,
-         5445,  5448,  5457,  5460,  5472,  5505,  5508,  5520,  5632,  5637,  5640,  5649,  5652,  5664,  5697,  5700,
-         5712,  5760,  5802,  6145,  6148,  6150,  6153,  6160,  6165,  6168,  6177,  6208,  6210,  6213,  6216,  6225,
-         6228,  6240,  6273,  6276,  6400,  6402,  6405,  6408,  6417,  6420,  6432,  6465,  6468,  6480,  6505,  6562,
-         6660,  6672,  6720,  6742,  8192,  8194,  8197,  8200,  8209,  8212,  8214,  8217,  8224,  8229,  8234,  8257,
-         8260,  8272,  8274,  8277,  8292,  8320,  8330,  8340,  8362,  8449,  8452,  8464,  8466,  8469,  8481,  8512,
-         8514,  8517,  8529,  8532,  8544,  8577,  8580,  8592,  8704,  8714,  8738,  8744,  8746,  8772,  8784,  8840,
-         8842,  8872,  9217,  9220,  9222,  9225,  9232,  9237,  9240,  9249,  9252,  9280,  9282,  9285,  9288,  9297,
-         9300,  9312,  9345,  9348,  9360,  9472,  9477,  9480,  9489,  9492,  9504,  9537,  9540,  9552,  9574,  9600,
-         9729,  9732,  9744,  9792,  9817, 10240, 10245, 10257, 10260, 10305, 10308, 10320, 10378, 10410, 10497, 10500,
-        10512, 10645, 10762, 10786, 10852, 10888, 10890, 16385, 16388, 16390, 16393, 16400, 16402, 16405, 16408, 16410,
-        16417, 16420, 16422, 16448, 16450, 16453, 16456, 16458, 16465, 16468, 16470, 16473, 16480, 16482, 16485, 16513,
-        16516, 16528, 16533, 16536, 16545, 16548, 16640, 16642, 16645, 16648, 16657, 16660, 16662, 16665, 16672, 16674,
-        16677, 16705, 16708, 16710, 16713, 16720, 16722, 16725, 16728, 16737, 16740, 16768, 16770, 16773, 16776, 16785,
-        16788, 16800, 16897, 16900, 16912, 16914, 16917, 16920, 16932, 16960, 16965, 16968, 16977, 16980, 16992, 17025,
-        17028, 17408, 17410, 17413, 17416, 17418, 17425, 17428, 17430, 17433, 17440, 17442, 17445, 17448, 17473, 17476,
-        17478, 17481, 17488, 17490, 17493, 17496, 17505, 17508, 17536, 17538, 17541, 17544, 17553, 17556, 17568, 17665,
-        17668, 17670, 17673, 17680, 17682, 17685, 17688, 17697, 17700, 17728, 17730, 17733, 17736, 17745, 17748, 17760,
-        17770, 17793, 17796, 17808, 17920, 17922, 17925, 17928, 17937, 17940, 17952, 17985, 17988, 18000, 18048, 18085,
-        18433, 18436, 18441, 18448, 18450, 18453, 18456, 18465, 18468, 18496, 18498, 18501, 18504, 18513, 18516, 18528,
-        18564, 18576, 18688, 18690, 18693, 18696, 18705, 18708, 18720, 18753, 18756, 18768, 18816, 18838, 18945, 18948,
-        18960, 19008, 20480, 20482, 20485, 20488, 20497, 20500, 20502, 20505, 20512, 20514, 20517, 20520, 20545, 20548,
-        20550, 20553, 20560, 20562, 20565, 20568, 20577, 20580, 20608, 20610, 20613, 20616, 20625, 20628, 20737, 20740,
-        20742, 20745, 20752, 20754, 20757, 20760, 20769, 20772, 20800, 20802, 20805, 20808, 20817, 20820, 20832, 20865,
-        20868, 20880, 20992, 20997, 21000, 21009, 21012, 21024, 21057, 21060, 21072, 21097, 21120, 21505, 21508, 21510,
-        21513, 21520, 21522, 21525, 21528, 21537, 21540, 21568, 21570, 21573, 21576, 21585, 21588, 21600, 21633, 21636,
-        21648, 21760, 21762, 21765, 21768, 21777, 21780, 21792, 21825, 21828, 21840, 21888, 22017, 22020, 22032, 22054,
-        22080, 22528, 22530, 22533, 22536, 22545, 22548, 22560, 22593, 22596, 22608, 22618, 22656, 22785, 22788, 22800,
-        22848, 23040, 23065, 23173, 23208, 24577, 24580, 24582, 24592, 24594, 24597, 24600, 24609, 24612, 24640, 24645,
-        24648, 24657, 24660, 24672, 24708, 24720, 24832, 24834, 24837, 24840, 24849, 24852, 24864, 24897, 24900, 24912,
-        24960, 24985, 25092, 25104, 25152, 25174, 25249, 25600, 25605, 25608, 25617, 25620, 25632, 25665, 25668, 25680,
-        25728, 25857, 25860, 25872, 25920, 25930, 25960, 26002, 26112, 26260, 26625, 26628, 26640, 26725, 26776, 26880,
-        26922, 27202, 27297, 32768, 32770, 32773, 32776, 32785, 32788, 32793, 32800, 32805, 32833, 32836, 32848, 32850,
-        32853, 32856, 32865, 32896, 32901, 32913, 32916, 33025, 33028, 33033, 33040, 33042, 33045, 33048, 33057, 33060,
-        33088, 33090, 33093, 33096, 33105, 33108, 33153, 33156, 33168, 33193, 33280, 33285, 33290, 33297, 33300, 33345,
-        33348, 33360, 33793, 33796, 33798, 33801, 33808, 33810, 33813, 33816, 33825, 33856, 33858, 33861, 33864, 33873,
-        33876, 33888, 33921, 33924, 33936, 34048, 34050, 34053, 34056, 34065, 34068, 34080, 34113, 34116, 34128, 34176,
-        34186, 34305, 34308, 34320, 34345, 34368, 34816, 34821, 34833, 34836, 34881, 34884, 34896, 34978, 35073, 35076,
-        35136, 35173, 35362, 35416, 35418, 35458, 35490, 36865, 36868, 36873, 36880, 36882, 36885, 36888, 36900, 36928,
-        36930, 36933, 36936, 36945, 36948, 36960, 36993, 36996, 37008, 37120, 37125, 37137, 37140, 37185, 37188, 37200,
-        37210, 37377, 37380, 37392, 37440, 37542, 37888, 37890, 37893, 37896, 37905, 37908, 37920, 37953, 37956, 37968,
-        38016, 38038, 38145, 38148, 38160, 38208, 38296, 38305, 38400, 38470, 38500, 38913, 38916, 38928, 38950, 38976,
-        39081, 39168, 39241, 39250, 39568, 40960, 40965, 40970, 40980, 40994, 41002, 41025, 41028, 41040, 41122, 41130,
-        41280, 41317, 41474, 41482, 41506, 41512, 41514, 41602, 41608, 41610, 41640, 41985, 41988, 42000, 42048, 42121,
-        42148, 42240, 42265, 42577, 43018, 43048, 43170, 43348, 43398, 43528, 43530, 43552, 43554, 43560, 43656, 43690,
-    };
-
-    const int kmap_size = 43692;
-    //const int nwant = type == GGML_TYPE_IQ1_S ? 3 : 2;
-    const int nwant = type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? 3 : type == GGML_TYPE_IQ2_S ? 1 : 2;
-    const uint16_t * kgrid = type == GGML_TYPE_IQ2_XXS ? kgrid_2bit_256 :
-                             type == GGML_TYPE_IQ2_XS  ? kgrid_2bit_512 :
-                             type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? kgrid_1bit_2048 : kgrid_2bit_1024;
-    uint64_t * kgrid_q2xs;
-    int      * kmap_q2xs;
-    uint16_t * kneighbors_q2xs;
-
-    //printf("================================================================= %s(grid_size = %d)\n", __func__, grid_size);
-    uint64_t * the_grid = (uint64_t *)malloc(grid_size*sizeof(uint64_t));
-    for (int k = 0; k < grid_size; ++k) {
-        int8_t * pos = (int8_t *)(the_grid + k);
-        for (int i = 0; i < 8; ++i) {
-            int l = (kgrid[k] >> 2*i) & 0x3;
-            pos[i] = 2*l + 1;
-        }
-    }
-    kgrid_q2xs = the_grid;
-    iq2_data[gindex].grid = the_grid;
-    kmap_q2xs = (int *)malloc(kmap_size*sizeof(int));
-    iq2_data[gindex].map = kmap_q2xs;
-    for (int i = 0; i < kmap_size; ++i) kmap_q2xs[i] = -1;
-    uint64_t aux64;
-    uint8_t * aux8 = (uint8_t *)&aux64;
-    for (int i = 0; i < grid_size; ++i) {
-        aux64 = kgrid_q2xs[i];
-        uint16_t index = 0;
-        for (int k=0; k<8; ++k) {
-            uint16_t q = (aux8[k] - 1)/2;
-            index |= (q << 2*k);
-        }
-        kmap_q2xs[index] = i;
-    }
-    int8_t pos[8];
-    int * dist2 = (int *)malloc(2*grid_size*sizeof(int));
-    int num_neighbors = 0, num_not_in_map = 0;
-    for (int i = 0; i < kmap_size; ++i) {
-        if (kmap_q2xs[i] >= 0) continue;
-        ++num_not_in_map;
-        for (int k = 0; k < 8; ++k) {
-            int l = (i >> 2*k) & 0x3;
-            pos[k] = 2*l + 1;
-        }
-        for (int j = 0; j < grid_size; ++j) {
-            const int8_t * pg = (const int8_t *)(kgrid_q2xs + j);
-            int d2 = 0;
-            for (int k = 0; k < 8; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]);
-            dist2[2*j+0] = d2;
-            dist2[2*j+1] = j;
-        }
-        qsort(dist2, grid_size, 2*sizeof(int), iq2_compare_func);
-        int n = 0; int d2 = dist2[0];
-        int nhave = 1;
-        for (int j = 0; j < grid_size; ++j) {
-            if (dist2[2*j] > d2) {
-                if (nhave == nwant) break;
-                d2 = dist2[2*j];
-                ++nhave;
-            }
-            ++n;
-        }
-        num_neighbors += n;
-    }
-    //printf("%s: %d neighbours in total\n", __func__, num_neighbors);
-    kneighbors_q2xs = (uint16_t *)malloc((num_neighbors + num_not_in_map)*sizeof(uint16_t));
-    iq2_data[gindex].neighbours = kneighbors_q2xs;
-    int counter = 0;
-    for (int i = 0; i < kmap_size; ++i) {
-        if (kmap_q2xs[i] >= 0) continue;
-        for (int k = 0; k < 8; ++k) {
-            int l = (i >> 2*k) & 0x3;
-            pos[k] = 2*l + 1;
-        }
-        for (int j = 0; j < grid_size; ++j) {
-            const int8_t * pg = (const int8_t *)(kgrid_q2xs + j);
-            int d2 = 0;
-            for (int k = 0; k < 8; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]);
-            dist2[2*j+0] = d2;
-            dist2[2*j+1] = j;
-        }
-        qsort(dist2, grid_size, 2*sizeof(int), iq2_compare_func);
-        kmap_q2xs[i] = -(counter + 1);
-        int d2 = dist2[0];
-        uint16_t * start = &kneighbors_q2xs[counter++];
-        int n = 0, nhave = 1;
-        for (int j = 0; j < grid_size; ++j) {
-            if (dist2[2*j] > d2) {
-                if (nhave == nwant) break;
-                d2 = dist2[2*j];
-                ++nhave;
-            }
-            kneighbors_q2xs[counter++] = dist2[2*j+1];
-            ++n;
-        }
-        *start = n;
-    }
-    free(dist2);
-}
-
-void iq2xs_free_impl(enum ggml_type type) {
-    GGML_ASSERT(type == GGML_TYPE_IQ2_XXS || type == GGML_TYPE_IQ2_XS || type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M || type == GGML_TYPE_IQ2_S);
-    const int gindex = iq2_data_index(type);
-    if (iq2_data[gindex].grid) {
-        free(iq2_data[gindex].grid);       iq2_data[gindex].grid = NULL;
-        free(iq2_data[gindex].map);        iq2_data[gindex].map  = NULL;
-        free(iq2_data[gindex].neighbours); iq2_data[gindex].neighbours = NULL;
-    }
-}
-
-static int iq2_find_best_neighbour(const uint16_t * restrict neighbours, const uint64_t * restrict grid,
-        const float * restrict xval, const float * restrict weight, float scale, int8_t * restrict L) {
-    int num_neighbors = neighbours[0];
-    GGML_ASSERT(num_neighbors > 0);
-    float best_d2 = FLT_MAX;
-    int grid_index = -1;
-    for (int j = 1; j <= num_neighbors; ++j) {
-        const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
-        float d2 = 0;
-        for (int i = 0; i < 8; ++i) {
-            float q = pg[i];
-            float diff = scale*q - xval[i];
-            d2 += weight[i]*diff*diff;
-        }
-        if (d2 < best_d2) {
-            best_d2 = d2; grid_index = neighbours[j];
-        }
-    }
-    GGML_ASSERT(grid_index >= 0);
-    const int8_t * pg = (const int8_t *)(grid + grid_index);
-    for (int i = 0; i < 8; ++i) L[i] = (pg[i] - 1)/2;
-    return grid_index;
-}
-
-static void quantize_row_iq2_xxs_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights) {
-
-    const int gindex = iq2_data_index(GGML_TYPE_IQ2_XXS);
-
-    const uint64_t * kgrid_q2xs      = iq2_data[gindex].grid;
-    const int      * kmap_q2xs       = iq2_data[gindex].map;
-    const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours;
-
-    GGML_ASSERT(quant_weights   && "missing quantization weights");
-    GGML_ASSERT(kgrid_q2xs      && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kmap_q2xs       && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(n%QK_K == 0);
-
-    const int kMaxQ = 3;
-
-    const int64_t nbl = n/QK_K;
-
-    block_iq2_xxs * y = vy;
-
-    float scales[QK_K/32];
-    float weight[32];
-    float xval[32];
-    int8_t L[32];
-    int8_t Laux[32];
-    float  waux[32];
-    uint8_t block_signs[4];
-    uint32_t q2[2*(QK_K/32)];
-
-    for (int ibl = 0; ibl < nbl; ++ibl) {
-
-        y[ibl].d = GGML_FP32_TO_FP16(0.f);
-        memset(q2, 0, QK_K/4);
-
-        float max_scale = 0;
-
-        const float * xbl = x + QK_K*ibl;
-        float sumx2 = 0;
-        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
-        float sigma2 = sumx2/QK_K;
-
-        for (int ib = 0; ib < QK_K/32; ++ib) {
-            const float * xb = xbl + 32*ib;
-            const float * qw = quant_weights + QK_K*ibl + 32*ib;
-            for (int i = 0; i < 32; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
-            for (int i = 0; i < 32; ++i) waux[i] = sqrtf(weight[i]);
-            for (int k = 0; k < 4; ++k) {
-                int nflip = 0;
-                uint8_t s = 0;
-                for (int i = 0; i < 8; ++i) {
-                    if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i];
-                    else {
-                        xval[8*k + i] = -xb[8*k + i]; ++nflip; s |= (1 << i);
-                    }
-                }
-                if (nflip%2) {
-                    int imin = 0; float min = weight[8*k+imin]*xb[8*k+imin]*xb[8*k+imin];
-                    for (int i = 1; i < 8; ++i) {
-                        float ax = weight[8*k+i]*xb[8*k+i]*xb[8*k+i];
-                        if (ax < min) {
-                            min = ax; imin = i;
-                        }
-                    }
-                    xval[8*k+imin] = -xval[8*k+imin];
-                    s ^= (1 << imin);
-                }
-                block_signs[k] = s & 127;
-            }
-            float max = xval[0];
-            for (int i = 1; i < 32; ++i) max = MAX(max, xval[i]);
-            if (max < GROUP_MAX_EPS) {
-                scales[ib] = 0;
-                memset(L, 0, 32);
-                continue;
-            }
-            float scale = make_qp_quants(32, kMaxQ+1, xval, (uint8_t*)L, weight);
-            float eff_max = scale*kMaxQ;
-            float best = 0;
-            for (int is = -6; is <= 6; ++is) {
-                float id = (2*kMaxQ-1+is*0.1f)/eff_max;
-                float this_scale = 1/id;
-                for (int k = 0; k < 4; ++k) {
-                    for (int i = 0; i < 8; ++i) {
-                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
-                        Laux[8*k+i] = MAX(0, MIN(kMaxQ-1, l));
-                    }
-                    uint16_t u = 0;
-                    for (int i = 0; i < 8; ++i) u |= (Laux[8*k+i] << 2*i);
-                    int grid_index = kmap_q2xs[u];
-                    if (grid_index < 0) {
-                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
-                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, this_scale, Laux + 8*k);
-                    }
-                }
-                float sumqx = 0, sumq2 = 0;
-                for (int i = 0; i < 32; ++i) {
-                    float w = weight[i];
-                    float q = 2*Laux[i] + 1;
-                    sumqx += w*xval[i]*q;
-                    sumq2 += w*q*q;
-                }
-                if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
-                    scale = sumqx/sumq2; best = scale*sumqx;
-                    memcpy(L, Laux, 32);
-                }
-            }
-            if (scale > 0) {
-                float id = 1/scale;
-                for (int k = 0; k < 4; ++k) {
-                    uint16_t u = 0;
-                    for (int i = 0; i < 8; ++i) {
-                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
-                        l = MAX(0, MIN(kMaxQ-1, l));
-                        u |= (l << 2*i);
-                    }
-                    int grid_index = kmap_q2xs[u];
-                    if (grid_index < 0) {
-                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
-                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, scale, L + 8*k);
-                    }
-                    const int8_t * pg = (const int8_t *)(kgrid_q2xs + grid_index);
-                    for (int i = 0; i < 8; ++i) L[8*k+i] = (pg[i] - 1)/2;
-                }
-                float sumqx = 0, sumq2 = 0;
-                for (int i = 0; i < 32; ++i) {
-                    float w = weight[i];
-                    float q = 2*L[i] + 1;
-                    sumqx += w*xval[i]*q;
-                    sumq2 += w*q*q;
-                }
-                if (sumq2 > 0) scale = sumqx/sumq2;
-            }
-            if (scale < 0) {
-                // This should never happen, but just in case, flip scale so that it is positive (we use uint's to encode the scale)
-                // and correspondingly flip quant signs.
-                scale = -scale;
-                for (int k = 0; k < 4; ++k) block_signs[k] = (~block_signs[k]) & 127;
-            }
-            for (int k = 0; k < 4; ++k) {
-                uint16_t u = 0;
-                for (int i = 0; i < 8; ++i) u |= (L[8*k+i] << 2*i);
-                int grid_index = kmap_q2xs[u];
-                if (grid_index < 0) {
-                    printf("Oops: found point %u not on grid:", u);
-                    for (int i = 0; i < 8; ++i) printf(" %d", L[8*k+i]);
-                    printf("\n");
-                    GGML_ASSERT(false);
-                }
-                q2[2*ib+0] |= ((uint32_t) grid_index << 8*k);
-                q2[2*ib+1] |= (block_signs[k] << 7*k);
-            }
-            GGML_ASSERT(scale >= 0);
-            scales[ib] = scale;
-            max_scale = MAX(max_scale, scale);
-        }
-
-        if (!max_scale) {
-            memset(y[ibl].qs, 0, QK_K/4);
-            continue;
-        }
-
-        float d = max_scale/31;
-        y[ibl].d = GGML_FP32_TO_FP16(d);
-        float id = 1/d;
-        for (int ib = 0; ib < QK_K/32; ++ib) {
-            int l = nearest_int(0.5f*(id*scales[ib]-1));
-            l = MAX(0, MIN(15, l));
-            q2[2*ib+1] |= ((uint32_t)l << 28);
-        }
-        memcpy(y[ibl].qs, q2, QK_K/4);
-    }
-}
-
-static void quantize_row_iq2_xs_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights) {
-
-    const int gindex = iq2_data_index(GGML_TYPE_IQ2_XS);
-
-    const uint64_t * kgrid_q2xs      = iq2_data[gindex].grid;
-    const int      * kmap_q2xs       = iq2_data[gindex].map;
-    const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours;
-
-    GGML_ASSERT(quant_weights   && "missing quantization weights");
-    GGML_ASSERT(kmap_q2xs       && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kgrid_q2xs      && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(n%QK_K == 0);
-
-    const int kMaxQ = 3;
-
-    const int64_t nbl = n/QK_K;
-
-    block_iq2_xs * y = vy;
-
-    float scales[QK_K/16];
-    float weight[16];
-    float xval[16];
-    int8_t L[16];
-    int8_t Laux[16];
-    float  waux[16];
-    bool   is_on_grid[2];
-    bool   is_on_grid_aux[2];
-    uint8_t block_signs[2];
-    uint16_t q2[2*(QK_K/16)];
-
-    for (int ibl = 0; ibl < nbl; ++ibl) {
-
-        y[ibl].d = GGML_FP32_TO_FP16(0.f);
-        memset(q2, 0, QK_K/4);
-        memset(y[ibl].scales, 0, QK_K/32);
-
-        float max_scale = 0;
-
-        const float * xbl = x + QK_K*ibl;
-        float sumx2 = 0;
-        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
-        float sigma2 = sumx2/QK_K;
-
-        for (int ib = 0; ib < QK_K/16; ++ib) {
-            const float * xb = xbl + 16*ib;
-            const float * qw = quant_weights + QK_K*ibl + 16*ib;
-            for (int i = 0; i < 16; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
-            for (int i = 0; i < 16; ++i) waux[i] = sqrtf(weight[i]);
-            for (int k = 0; k < 2; ++k) {
-                int nflip = 0;
-                uint8_t s = 0;
-                for (int i = 0; i < 8; ++i) {
-                    if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i];
-                    else {
-                        xval[8*k + i] = -xb[8*k + i]; ++nflip; s |= (1 << i);
-                    }
-                }
-                if (nflip%2) {
-                    int imin = 0; float min = weight[8*k+imin]*xb[8*k+imin]*xb[8*k+imin];
-                    for (int i = 1; i < 8; ++i) {
-                        float ax = weight[8*k+i]*xb[8*k+i]*xb[8*k+i];
-                        if (ax < min) {
-                            min = ax; imin = i;
-                        }
-                    }
-                    xval[8*k+imin] = -xval[8*k+imin];
-                    s ^= (1 << imin);
-                }
-                block_signs[k] = s & 127;
-            }
-            float max = xval[0];
-            for (int i = 1; i < 16; ++i) max = MAX(max, xval[i]);
-            if (max < GROUP_MAX_EPS) {
-                scales[ib] = 0;
-                memset(L, 0, 16);
-                continue;
-            }
-            float best = 0;
-            float scale = max/(2*kMaxQ-1);
-            is_on_grid[0] = is_on_grid[1] = true;
-            for (int is = -9; is <= 9; ++is) {
-                float id = (2*kMaxQ-1+is*0.1f)/max;
-                float this_scale = 1/id;
-                for (int k = 0; k < 2; ++k) {
-                    for (int i = 0; i < 8; ++i) {
-                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
-                        Laux[8*k+i] = MAX(0, MIN(kMaxQ-1, l));
-                    }
-                    uint16_t u = 0;
-                    for (int i = 0; i < 8; ++i) u |= (Laux[8*k+i] << 2*i);
-                    int grid_index = kmap_q2xs[u];
-                    is_on_grid_aux[k] = true;
-                    if (grid_index < 0) {
-                        is_on_grid_aux[k] = false;
-                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
-                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, this_scale, Laux + 8*k);
-                    }
-                }
-                float sumqx = 0, sumq2 = 0;
-                for (int i = 0; i < 16; ++i) {
-                    float w = weight[i];
-                    float q = 2*Laux[i] + 1;
-                    sumqx += w*xval[i]*q;
-                    sumq2 += w*q*q;
-                }
-                if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
-                    scale = sumqx/sumq2; best = scale*sumqx;
-                    for (int i = 0; i < 16; ++i) L[i] = Laux[i];
-                    for (int k = 0; k <  2; ++k) is_on_grid[k] = is_on_grid_aux[k];
-                }
-            }
-            int n_not_ongrid = 0;
-            for (int k = 0; k < 2; ++k) if (!is_on_grid[k]) ++n_not_ongrid;
-            if (n_not_ongrid > 0 && scale > 0) {
-                float id = 1/scale;
-                for (int k = 0; k < 2; ++k) {
-                    if (is_on_grid[k]) continue;
-                    uint16_t u = 0;
-                    for (int i = 0; i < 8; ++i) {
-                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
-                        l = MAX(0, MIN(kMaxQ-1, l));
-                        u |= (l << 2*i);
-                        L[8*k + i] = l;
-                    }
-                    int grid_index = kmap_q2xs[u];
-                    if (grid_index < 0) {
-                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
-                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, scale, L + 8*k);
-                    }
-                }
-                float sumqx = 0, sumq2 = 0;
-                for (int i = 0; i < 16; ++i) {
-                    float w = weight[i];
-                    float q = 2*L[i] + 1;
-                    sumqx += w*xval[i]*q;
-                    sumq2 += w*q*q;
-                }
-                if (sumq2 > 0) scale = sumqx/sumq2;
-            }
-            if (scale < 0) {
-                scale = -scale;
-                for (int k = 0; k < 2; ++k) block_signs[k] = (~block_signs[k]) & 127;
-            }
-            for (int k = 0; k < 2; ++k) {
-                uint16_t u = 0;
-                for (int i = 0; i < 8; ++i) u |= (L[8*k+i] << 2*i);
-                int grid_index = kmap_q2xs[u];
-                if (grid_index < 0) {
-                    printf("Oops: found point %u not on grid:", u);
-                    for (int i = 0; i < 8; ++i) printf(" %d", L[8*k+i]);
-                    printf("\n");
-                    GGML_ASSERT(false);
-                }
-                q2[2*ib+k] = grid_index | (block_signs[k] << 9);
-            }
-            GGML_ASSERT(scale >= 0);
-            scales[ib] = scale;
-            max_scale = MAX(max_scale, scale);
-        }
-
-        if (!max_scale) {
-            memset(y[ibl].qs, 0, QK_K/4);
-            continue;
-        }
-
-        float d = max_scale/31;
-        y[ibl].d = GGML_FP32_TO_FP16(d);
-        float id = 1/d;
-        for (int ib = 0; ib < QK_K/16; ++ib) {
-            int l = nearest_int(0.5f*(id*scales[ib]-1));
-            l = MAX(0, MIN(15, l));
-            if (ib%2 == 0) y[ibl].scales[ib/2] = l;
-            else y[ibl].scales[ib/2] |= (l << 4);
-        }
-        memcpy(y[ibl].qs, q2, QK_K/4);
-
-    }
-}
-
-size_t quantize_iq2_xxs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    GGML_ASSERT(n_per_row%QK_K == 0);
-    int64_t nblock = n_per_row/QK_K;
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_iq2_xxs_impl(src, qrow, n_per_row, quant_weights);
-        src += n_per_row;
-        qrow += nblock*sizeof(block_iq2_xxs);
-    }
-    return nrow * nblock * sizeof(block_iq2_xxs);
-}
-
-size_t quantize_iq2_xs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    GGML_ASSERT(n_per_row%QK_K == 0);
-    int64_t nblock = n_per_row/QK_K;
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_iq2_xs_impl(src, qrow, n_per_row, quant_weights);
-        src += n_per_row;
-        qrow += nblock*sizeof(block_iq2_xs);
-    }
-    return nrow * nblock * sizeof(block_iq2_xs);
-}
-
-//
-// ============================================= 3-bit using D4 lattice
-//
-
-typedef struct {
-    uint32_t * grid;
-    int      * map;
-    uint16_t * neighbours;
-} iq3_entry_t;
-
-static iq3_entry_t iq3_data[2] = {
-    {NULL, NULL, NULL},
-    {NULL, NULL, NULL},
-};
-
-static inline int iq3_data_index(int grid_size) {
-    (void)grid_size;
-    GGML_ASSERT(grid_size == 256 || grid_size == 512);
-    return grid_size == 256 ? 0 : 1;
-}
-
-static int iq3_compare_func(const void * left, const void * right) {
-    const int * l = (const int *)left;
-    const int * r = (const int *)right;
-    return l[0] < r[0] ? -1 : l[0] > r[0] ? 1 : l[1] < r[1] ? -1 : l[1] > r[1] ? 1 : 0;
-}
-
-void iq3xs_init_impl(int grid_size) {
-    const int gindex = iq3_data_index(grid_size);
-    if (iq3_data[gindex].grid) {
-        return;
-    }
-    static const uint16_t kgrid_256[256] = {
-            0,     2,     4,     9,    11,    15,    16,    18,    25,    34,    59,    61,    65,    67,    72,    74,
-           81,    85,    88,    90,    97,   108,   120,   128,   130,   132,   137,   144,   146,   153,   155,   159,
-          169,   175,   189,   193,   199,   200,   202,   213,   248,   267,   287,   292,   303,   315,   317,   321,
-          327,   346,   362,   413,   436,   456,   460,   462,   483,   497,   513,   515,   520,   522,   529,   531,
-          536,   538,   540,   551,   552,   576,   578,   585,   592,   594,   641,   643,   648,   650,   657,   664,
-          698,   704,   706,   720,   729,   742,   758,   769,   773,   808,   848,   852,   870,   889,   901,   978,
-          992,  1024,  1026,  1033,  1035,  1040,  1042,  1046,  1049,  1058,  1089,  1091,  1093,  1096,  1098,  1105,
-         1112,  1139,  1143,  1144,  1152,  1154,  1161,  1167,  1168,  1170,  1183,  1184,  1197,  1217,  1224,  1228,
-         1272,  1276,  1309,  1323,  1347,  1367,  1377,  1404,  1473,  1475,  1486,  1509,  1537,  1544,  1546,  1553,
-         1555,  1576,  1589,  1594,  1600,  1602,  1616,  1625,  1636,  1638,  1665,  1667,  1672,  1685,  1706,  1722,
-         1737,  1755,  1816,  1831,  1850,  1856,  1862,  1874,  1901,  1932,  1950,  1971,  2011,  2032,  2052,  2063,
-         2077,  2079,  2091,  2095,  2172,  2192,  2207,  2208,  2224,  2230,  2247,  2277,  2308,  2345,  2356,  2389,
-         2403,  2424,  2501,  2504,  2506,  2520,  2570,  2593,  2616,  2624,  2630,  2646,  2669,  2700,  2714,  2746,
-         2754,  2795,  2824,  2835,  2839,  2874,  2882,  2905,  2984,  3028,  3042,  3092,  3108,  3110,  3124,  3153,
-         3185,  3215,  3252,  3288,  3294,  3364,  3397,  3434,  3483,  3523,  3537,  3587,  3589,  3591,  3592,  3610,
-         3626,  3670,  3680,  3722,  3749,  3754,  3776,  3789,  3803,  3824,  3857,  3873,  3904,  3906,  3924,  3992,
-    };
-    static const uint16_t kgrid_512[512] = {
-            0,     1,     2,     5,     7,     8,     9,    10,    12,    14,    16,    17,    21,    27,    32,    34,
-           37,    39,    41,    43,    48,    50,    57,    60,    63,    64,    65,    66,    68,    72,    73,    77,
-           80,    83,    87,    89,    93,   100,   113,   117,   122,   128,   129,   133,   135,   136,   139,   142,
-          145,   149,   152,   156,   162,   165,   167,   169,   171,   184,   187,   195,   201,   205,   208,   210,
-          217,   219,   222,   228,   232,   234,   247,   249,   253,   256,   267,   271,   273,   276,   282,   288,
-          291,   297,   312,   322,   324,   336,   338,   342,   347,   353,   357,   359,   374,   379,   390,   393,
-          395,   409,   426,   441,   448,   450,   452,   464,   466,   470,   475,   488,   492,   512,   513,   514,
-          516,   520,   521,   523,   525,   527,   528,   530,   537,   540,   542,   556,   558,   561,   570,   576,
-          577,   579,   582,   584,   588,   593,   600,   603,   609,   616,   618,   632,   638,   640,   650,   653,
-          655,   656,   660,   666,   672,   675,   685,   688,   698,   705,   708,   711,   712,   715,   721,   727,
-          728,   732,   737,   754,   760,   771,   773,   778,   780,   793,   795,   802,   806,   808,   812,   833,
-          840,   843,   849,   856,   858,   873,   912,   916,   919,   932,   934,   961,   963,   968,   970,   977,
-          989,   993,  1010,  1016,  1024,  1025,  1027,  1029,  1031,  1032,  1034,  1036,  1038,  1041,  1043,  1047,
-         1048,  1050,  1057,  1059,  1061,  1064,  1066,  1079,  1080,  1083,  1085,  1088,  1090,  1096,  1099,  1103,
-         1106,  1109,  1113,  1116,  1122,  1129,  1153,  1156,  1159,  1169,  1171,  1176,  1183,  1185,  1195,  1199,
-         1209,  1212,  1216,  1218,  1221,  1225,  1234,  1236,  1241,  1243,  1250,  1256,  1270,  1281,  1287,  1296,
-         1299,  1306,  1309,  1313,  1338,  1341,  1348,  1353,  1362,  1375,  1376,  1387,  1400,  1408,  1410,  1415,
-         1425,  1453,  1457,  1477,  1481,  1494,  1496,  1507,  1512,  1538,  1545,  1547,  1549,  1551,  1554,  1561,
-         1563,  1565,  1570,  1572,  1575,  1577,  1587,  1593,  1601,  1603,  1605,  1612,  1617,  1619,  1632,  1648,
-         1658,  1662,  1664,  1674,  1680,  1690,  1692,  1704,  1729,  1736,  1740,  1745,  1747,  1751,  1752,  1761,
-         1763,  1767,  1773,  1787,  1795,  1801,  1806,  1810,  1817,  1834,  1840,  1844,  1857,  1864,  1866,  1877,
-         1882,  1892,  1902,  1915,  1934,  1953,  1985,  1987,  2000,  2002,  2013,  2048,  2052,  2058,  2064,  2068,
-         2071,  2074,  2081,  2088,  2104,  2114,  2119,  2121,  2123,  2130,  2136,  2141,  2147,  2153,  2157,  2177,
-         2179,  2184,  2189,  2193,  2203,  2208,  2223,  2226,  2232,  2244,  2249,  2251,  2256,  2258,  2265,  2269,
-         2304,  2306,  2324,  2335,  2336,  2361,  2373,  2375,  2385,  2418,  2443,  2460,  2480,  2504,  2509,  2520,
-         2531,  2537,  2562,  2568,  2572,  2578,  2592,  2596,  2599,  2602,  2614,  2620,  2625,  2627,  2629,  2634,
-         2641,  2650,  2682,  2688,  2697,  2707,  2712,  2718,  2731,  2754,  2759,  2760,  2775,  2788,  2793,  2805,
-         2811,  2817,  2820,  2832,  2842,  2854,  2890,  2902,  2921,  2923,  2978,  3010,  3012,  3026,  3081,  3083,
-         3085,  3097,  3099,  3120,  3136,  3152,  3159,  3188,  3210,  3228,  3234,  3245,  3250,  3256,  3264,  3276,
-         3281,  3296,  3349,  3363,  3378,  3392,  3395,  3420,  3440,  3461,  3488,  3529,  3531,  3584,  3588,  3591,
-         3600,  3602,  3614,  3616,  3628,  3634,  3650,  3657,  3668,  3683,  3685,  3713,  3716,  3720,  3726,  3729,
-         3736,  3753,  3778,  3802,  3805,  3819,  3841,  3845,  3851,  3856,  3880,  3922,  3938,  3970,  3993,  4032,
-    };
-
-    const int kmap_size = 4096;
-    const int nwant = grid_size == 256 ? 2 : 3;
-    const uint16_t * kgrid = grid_size == 256 ? kgrid_256 : kgrid_512;
-    uint32_t * kgrid_q3xs;
-    int      * kmap_q3xs;
-    uint16_t * kneighbors_q3xs;
-
-    //printf("================================================================= %s(grid_size = %d)\n", __func__, grid_size);
-    uint32_t * the_grid = (uint32_t *)malloc(grid_size*sizeof(uint32_t));
-    for (int k = 0; k < grid_size; ++k) {
-        int8_t * pos = (int8_t *)(the_grid + k);
-        for (int i = 0; i < 4; ++i) {
-            int l = (kgrid[k] >> 3*i) & 0x7;
-            pos[i] = 2*l + 1;
-        }
-    }
-    kgrid_q3xs = the_grid;
-    iq3_data[gindex].grid = the_grid;
-    kmap_q3xs = (int *)malloc(kmap_size*sizeof(int));
-    iq3_data[gindex].map = kmap_q3xs;
-    for (int i = 0; i < kmap_size; ++i) kmap_q3xs[i] = -1;
-    uint32_t aux32;
-    uint8_t * aux8 = (uint8_t *)&aux32;
-    for (int i = 0; i < grid_size; ++i) {
-        aux32 = kgrid_q3xs[i];
-        uint16_t index = 0;
-        for (int k=0; k<4; ++k) {
-            uint16_t q = (aux8[k] - 1)/2;
-            index |= (q << 3*k);
-        }
-        kmap_q3xs[index] = i;
-    }
-    int8_t pos[4];
-    int * dist2 = (int *)malloc(2*grid_size*sizeof(int));
-    int num_neighbors = 0, num_not_in_map = 0;
-    for (int i = 0; i < kmap_size; ++i) {
-        if (kmap_q3xs[i] >= 0) continue;
-        ++num_not_in_map;
-        for (int k = 0; k < 4; ++k) {
-            int l = (i >> 3*k) & 0x7;
-            pos[k] = 2*l + 1;
-        }
-        for (int j = 0; j < grid_size; ++j) {
-            const int8_t * pg = (const int8_t *)(kgrid_q3xs + j);
-            int d2 = 0;
-            for (int k = 0; k < 4; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]);
-            dist2[2*j+0] = d2;
-            dist2[2*j+1] = j;
-        }
-        qsort(dist2, grid_size, 2*sizeof(int), iq3_compare_func);
-        int n = 0; int d2 = dist2[0];
-        int nhave = 1;
-        for (int j = 0; j < grid_size; ++j) {
-            if (dist2[2*j] > d2) {
-                if (nhave == nwant) break;
-                d2 = dist2[2*j];
-                ++nhave;
-            }
-            ++n;
-        }
-        num_neighbors += n;
-    }
-    //printf("%s: %d neighbours in total\n", __func__, num_neighbors);
-    kneighbors_q3xs = (uint16_t *)malloc((num_neighbors + num_not_in_map)*sizeof(uint16_t));
-    iq3_data[gindex].neighbours = kneighbors_q3xs;
-    int counter = 0;
-    for (int i = 0; i < kmap_size; ++i) {
-        if (kmap_q3xs[i] >= 0) continue;
-        for (int k = 0; k < 4; ++k) {
-            int l = (i >> 3*k) & 0x7;
-            pos[k] = 2*l + 1;
-        }
-        for (int j = 0; j < grid_size; ++j) {
-            const int8_t * pg = (const int8_t *)(kgrid_q3xs + j);
-            int d2 = 0;
-            for (int k = 0; k < 4; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]);
-            dist2[2*j+0] = d2;
-            dist2[2*j+1] = j;
-        }
-        qsort(dist2, grid_size, 2*sizeof(int), iq3_compare_func);
-        kmap_q3xs[i] = -(counter + 1);
-        int d2 = dist2[0];
-        uint16_t * start = &kneighbors_q3xs[counter++];
-        int n = 0, nhave = 1;
-        for (int j = 0; j < grid_size; ++j) {
-            if (dist2[2*j] > d2) {
-                if (nhave == nwant) break;
-                d2 = dist2[2*j];
-                ++nhave;
-            }
-            kneighbors_q3xs[counter++] = dist2[2*j+1];
-            ++n;
-        }
-        *start = n;
-    }
-    free(dist2);
-}
-
-void iq3xs_free_impl(int grid_size) {
-    GGML_ASSERT(grid_size == 256 || grid_size == 512);
-    const int gindex = iq3_data_index(grid_size);
-    if (iq3_data[gindex].grid) {
-        free(iq3_data[gindex].grid);       iq3_data[gindex].grid = NULL;
-        free(iq3_data[gindex].map);        iq3_data[gindex].map  = NULL;
-        free(iq3_data[gindex].neighbours); iq3_data[gindex].neighbours = NULL;
-    }
-}
-
-static int iq3_find_best_neighbour(const uint16_t * restrict neighbours, const uint32_t * restrict grid,
-        const float * restrict xval, const float * restrict weight, float scale, int8_t * restrict L) {
-    int num_neighbors = neighbours[0];
-    GGML_ASSERT(num_neighbors > 0);
-    float best_d2 = FLT_MAX;
-    int grid_index = -1;
-    for (int j = 1; j <= num_neighbors; ++j) {
-        const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
-        float d2 = 0;
-        for (int i = 0; i < 4; ++i) {
-            float q = pg[i];
-            float diff = scale*q - xval[i];
-            d2 += weight[i]*diff*diff;
-        }
-        if (d2 < best_d2) {
-            best_d2 = d2; grid_index = neighbours[j];
-        }
-    }
-    GGML_ASSERT(grid_index >= 0);
-    const int8_t * pg = (const int8_t *)(grid + grid_index);
-    for (int i = 0; i < 4; ++i) L[i] = (pg[i] - 1)/2;
-    return grid_index;
-}
-
-static void quantize_row_iq3_xxs_impl(int grid_size, const float * restrict x, void * restrict vy, int64_t n,
-        const float * restrict quant_weights) {
-
-    const int gindex = iq3_data_index(grid_size);
-
-    const uint32_t * kgrid_q3xs      = iq3_data[gindex].grid;
-    const int      * kmap_q3xs       = iq3_data[gindex].map;
-    const uint16_t * kneighbors_q3xs = iq3_data[gindex].neighbours;
-
-    //GGML_ASSERT(quant_weights   && "missing quantization weights");
-    GGML_ASSERT(kgrid_q3xs      && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kmap_q3xs       && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kneighbors_q3xs && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(n%QK_K == 0);
-
-    const int kMaxQ = 8;
-
-    const int64_t nbl = n/QK_K;
-
-    ggml_fp16_t * dh;
-    uint8_t * qs;
-    int block_size;
-    if (grid_size == 256) {
-        block_iq3_xxs * y = vy;
-        dh = &y->d;
-        qs = y->qs;
-        block_size = sizeof(block_iq3_xxs);
-    } else {
-        block_iq3_s * y = vy;
-        dh = &y->d;
-        qs = y->qs;
-        block_size = sizeof(block_iq3_s);
-    }
-    int quant_size = block_size - sizeof(ggml_fp16_t);
-
-    float scales[QK_K/32];
-    float weight[32];
-    float xval[32];
-    int8_t L[32];
-    int8_t Laux[32];
-    float  waux[32];
-    bool   is_on_grid[8];
-    bool   is_on_grid_aux[8];
-    uint8_t block_signs[8];
-    uint8_t q3[3*(QK_K/8)+QK_K/32];
-    uint32_t * scales_and_signs = (uint32_t *)(q3 + QK_K/4);
-    uint8_t  * qh = q3 + 3*(QK_K/8);
-
-    for (int ibl = 0; ibl < nbl; ++ibl) {
-
-        dh[0] = GGML_FP32_TO_FP16(0.f);
-        memset(q3, 0, 3*QK_K/8+QK_K/32);
-
-        float max_scale = 0;
-
-        const float * xbl = x + QK_K*ibl;
-        float sumx2 = 0;
-        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
-        float sigma2 = 2*sumx2/QK_K;
-
-        for (int ib = 0; ib < QK_K/32; ++ib) {
-            const float * xb = xbl + 32*ib;
-            if (quant_weights) {
-                const float * qw = quant_weights + QK_K*ibl + 32*ib;
-                for (int i = 0; i < 32; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
-            } else {
-                for (int i = 0; i < 32; ++i) weight[i] = xb[i]*xb[i];
-            }
-            for (int i = 0; i < 32; ++i) waux[i] = sqrtf(weight[i]);
-            for (int k = 0; k < 4; ++k) {
-                int nflip = 0;
-                uint8_t s = 0;
-                for (int i = 0; i < 8; ++i) {
-                    if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i];
-                    else {
-                        xval[8*k + i] = -xb[8*k + i]; ++nflip; s |= (1 << i);
-                    }
-                }
-                if (nflip%2) {
-                    int imin = 0; float min = weight[8*k+imin]*xb[8*k+imin]*xb[8*k+imin];
-                    for (int i = 1; i < 8; ++i) {
-                        float ax = weight[8*k+i]*xb[8*k+i]*xb[8*k+i];
-                        if (ax < min) {
-                            min = ax; imin = i;
-                        }
-                    }
-                    xval[8*k+imin] = -xval[8*k+imin];
-                    s ^= (1 << imin);
-                }
-                block_signs[k] = s & 127;
-            }
-            float max = xval[0];
-            for (int i = 1; i < 32; ++i) max = MAX(max, xval[i]);
-            if (max < GROUP_MAX_EPS_IQ3_XXS) {
-                scales[ib] = 0;
-                memset(L, 0, 32);
-                continue;
-            }
-            float best = 0;
-            float scale = max/(2*kMaxQ-1);
-            for (int is = -15; is <= 15; ++is) {
-                float id = (2*kMaxQ-1+is*0.2f)/max;
-                float this_scale = 1/id;
-                for (int k = 0; k < 8; ++k) {
-                    for (int i = 0; i < 4; ++i) {
-                        int l = nearest_int(0.5f*(id*xval[4*k+i]-1));
-                        Laux[4*k+i] = MAX(0, MIN(kMaxQ-1, l));
-                    }
-                    uint16_t u = 0;
-                    for (int i = 0; i < 4; ++i) u |= (Laux[4*k+i] << 3*i);
-                    int grid_index = kmap_q3xs[u];
-                    is_on_grid_aux[k] = true;
-                    if (grid_index < 0) {
-                        is_on_grid_aux[k] = false;
-                        const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1;
-                        grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, this_scale, Laux + 4*k);
-                    }
-                }
-                float sumqx = 0, sumq2 = 0;
-                for (int i = 0; i < 32; ++i) {
-                    float w = weight[i];
-                    float q = 2*Laux[i] + 1;
-                    sumqx += w*xval[i]*q;
-                    sumq2 += w*q*q;
-                }
-                if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
-                    scale = sumqx/sumq2; best = scale*sumqx;
-                    for (int i = 0; i < 32; ++i) L[i] = Laux[i];
-                    for (int k = 0; k <  8; ++k) is_on_grid[k] = is_on_grid_aux[k];
-                }
-            }
-            int n_not_ongrid = 0;
-            for (int k = 0; k < 8; ++k) if (!is_on_grid[k]) ++n_not_ongrid;
-            if (n_not_ongrid > 0 && scale > 0) {
-                float id = 1/scale;
-                for (int k = 0; k < 8; ++k) {
-                    if (is_on_grid[k]) continue;
-                    uint16_t u = 0;
-                    for (int i = 0; i < 4; ++i) {
-                        int l = nearest_int(0.5f*(id*xval[4*k+i]-1));
-                        l = MAX(0, MIN(kMaxQ-1, l));
-                        u |= (l << 3*i);
-                    }
-                    int grid_index = kmap_q3xs[u];
-                    if (grid_index < 0) {
-                        const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1;
-                        grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, scale, L + 4*k);
-                    }
-                    const int8_t * pg = (const int8_t *)(kgrid_q3xs + grid_index);
-                    for (int i = 0; i < 4; ++i) L[4*k+i] = (pg[i] - 1)/2;
-                }
-                float sumqx = 0, sumq2 = 0;
-                for (int i = 0; i < 32; ++i) {
-                    float w = weight[i];
-                    float q = 2*L[i] + 1;
-                    sumqx += w*xval[i]*q;
-                    sumq2 += w*q*q;
-                }
-                if (sumq2 > 0) scale = sumqx/sumq2;
-            }
-            if (scale < 0) {
-                // This should never happen, but just in case, flip scale so that it is positive (we use uint's to encode the scale)
-                // and correspondingly flip quant signs.
-                scale = -scale;
-                for (int k = 0; k < 4; ++k) block_signs[k] = (~block_signs[k]) & 127;
-            }
-            for (int k = 0; k < 8; ++k) {
-                uint16_t u = 0;
-                for (int i = 0; i < 4; ++i) u |= (L[4*k+i] << 3*i);
-                int grid_index = kmap_q3xs[u];
-                if (grid_index < 0) {
-                    printf("Oops: found point %u not on grid:", u);
-                    for (int i = 0; i < 4; ++i) printf(" %d", L[4*k+i]);
-                    printf("\n");
-                    GGML_ASSERT(false);
-                }
-                if (grid_size == 256) {
-                    q3[8*ib+k] = grid_index;
-                } else {
-                    q3[8*ib+k] = grid_index & 255;
-                    qh[ib] |= ((grid_index >> 8) << k);
-                }
-
-            }
-            scales_and_signs[ib] = block_signs[0] | (block_signs[1] << 7) | (block_signs[2] << 14) | (block_signs[3] << 21);
-            GGML_ASSERT(scale >= 0);
-            scales[ib] = scale;
-            max_scale = MAX(max_scale, scale);
-        }
-
-        if (!max_scale) {
-            memset(qs, 0, quant_size);
-            dh += block_size/sizeof(ggml_fp16_t);
-            qs += block_size;
-            continue;
-        }
-
-        float d = max_scale/31;
-        dh[0] = GGML_FP32_TO_FP16(d * 1.0125f);  // small improvement via this fudge factor
-        float id = 1/d;
-        for (int ib = 0; ib < QK_K/32; ++ib) {
-            int l = nearest_int(0.5f*(id*scales[ib]-1));
-            l = MAX(0, MIN(15, l));
-            scales_and_signs[ib] |= ((uint32_t)l << 28);
-        }
-        memcpy(qs, q3, quant_size);
-
-        dh += block_size/sizeof(ggml_fp16_t);
-        qs += block_size;
-
-    }
-}
-
-size_t quantize_iq3_xxs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    GGML_ASSERT(n_per_row%QK_K == 0);
-    int64_t nblock = n_per_row/QK_K;
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_iq3_xxs_impl(256, src, qrow, n_per_row, quant_weights);
-        src += n_per_row;
-        qrow += nblock*sizeof(block_iq3_xxs);
-    }
-    return nrow * nblock * sizeof(block_iq3_xxs);
-}
-
-void quantize_row_iq3_xxs(const float * restrict x, void * restrict vy, int64_t k) {
-    assert(k % QK_K == 0);
-    block_iq3_xxs * restrict y = vy;
-    quantize_row_iq3_xxs_reference(x, y, k);
-}
-
-void quantize_row_iq3_xxs_reference(const float * restrict x, block_iq3_xxs * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    quantize_row_iq3_xxs_impl(256, x, y, k, NULL);
-}
-
-static void quantize_row_iq3_s_impl(int block_size, const float * restrict x, void * restrict vy, int n,
-        const float * restrict quant_weights,
-        float   * scales,
-        float   * weight,
-        float   * xval,
-        int8_t  * L,
-        int8_t  * Laux,
-        float   * waux,
-        bool    * is_on_grid,
-        bool    * is_on_grid_aux,
-        uint8_t * block_signs) {
-
-    const int gindex = iq3_data_index(512);
-
-    const uint32_t * kgrid_q3xs      = iq3_data[gindex].grid;
-    const int      * kmap_q3xs       = iq3_data[gindex].map;
-    const uint16_t * kneighbors_q3xs = iq3_data[gindex].neighbours;
-
-    //GGML_ASSERT(quant_weights   && "missing quantization weights");
-    GGML_ASSERT(kgrid_q3xs      && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kmap_q3xs       && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kneighbors_q3xs && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(n%QK_K == 0);
-
-    const int kMaxQ = 8;
-
-    const int64_t nbl = n/QK_K;
-
-    block_iq3_s * y = vy;
-
-    const int bs4 = block_size/4;
-    const int bs8 = block_size/8;
-
-    for (int ibl = 0; ibl < nbl; ++ibl) {
-
-        memset(&y[ibl], 0, sizeof(block_iq3_s));
-        y[ibl].d = GGML_FP32_TO_FP16(0.f);
-
-        uint8_t * qs = y[ibl].qs;
-        uint8_t * qh = y[ibl].qh;
-        uint8_t * signs = y[ibl].signs;
-
-        float max_scale = 0;
-
-        const float * xbl = x + QK_K*ibl;
-        float sumx2 = 0;
-        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
-        float sigma2 = 2*sumx2/QK_K;
-
-        for (int ib = 0; ib < QK_K/block_size; ++ib) {
-            const float * xb = xbl + block_size*ib;
-            if (quant_weights) {
-                const float * qw = quant_weights + QK_K*ibl + block_size*ib;
-                for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
-            } else {
-                for (int i = 0; i < block_size; ++i) weight[i] = xb[i]*xb[i];
-            }
-            for (int i = 0; i < block_size; ++i) waux[i] = sqrtf(weight[i]);
-            for (int k = 0; k < bs8; ++k) {
-                uint8_t s = 0;
-                for (int i = 0; i < 8; ++i) {
-                    if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i];
-                    else {
-                        xval[8*k + i] = -xb[8*k + i]; s |= (1 << i);
-                    }
-                }
-                block_signs[k] = s;
-            }
-            float max = xval[0];
-            for (int i = 1; i < block_size; ++i) max = MAX(max, xval[i]);
-            if (!max) {
-                scales[ib] = 0;
-                continue;
-            }
-            float best = 0;
-            float scale = max/(2*kMaxQ-1);
-            for (int k = 0; k < bs4; ++k) is_on_grid[k] = false;
-            for (int is = -9; is <= 9; ++is) {
-                float id = (2*kMaxQ-1+is*0.2f)/max;
-                float this_scale = 1/id;
-                for (int k = 0; k < bs4; ++k) {
-                    for (int i = 0; i < 4; ++i) {
-                        int l = nearest_int(0.5f*(id*xval[4*k+i]-1));
-                        Laux[4*k+i] = MAX(0, MIN(kMaxQ-1, l));
-                    }
-                    uint16_t u = 0;
-                    for (int i = 0; i < 4; ++i) u |= (Laux[4*k+i] << 3*i);
-                    int grid_index = kmap_q3xs[u];
-                    is_on_grid_aux[k] = true;
-                    if (grid_index < 0) {
-                        is_on_grid_aux[k] = false;
-                        const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1;
-                        grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, this_scale, Laux + 4*k);
-                    }
-                }
-                float sumqx = 0, sumq2 = 0;
-                for (int i = 0; i < block_size; ++i) {
-                    float w = weight[i];
-                    float q = 2*Laux[i] + 1;
-                    sumqx += w*xval[i]*q;
-                    sumq2 += w*q*q;
-                }
-                if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
-                    scale = sumqx/sumq2; best = scale*sumqx;
-                    for (int i = 0; i < block_size; ++i) L[i] = Laux[i];
-                    for (int k = 0; k < bs4; ++k) is_on_grid[k] = is_on_grid_aux[k];
-                }
-            }
-            int n_not_ongrid = 0;
-            for (int k = 0; k < bs4; ++k) if (!is_on_grid[k]) ++n_not_ongrid;
-            if (n_not_ongrid > 0 && scale > 0) {
-                float id = 1/scale;
-                for (int k = 0; k < bs4; ++k) {
-                    //if (is_on_grid[k]) continue;
-                    uint16_t u = 0;
-                    for (int i = 0; i < 4; ++i) {
-                        int l = nearest_int(0.5f*(id*xval[4*k+i]-1));
-                        l = MAX(0, MIN(kMaxQ-1, l));
-                        u |= (l << 3*i);
-                    }
-                    int grid_index = kmap_q3xs[u];
-                    if (grid_index < 0) {
-                        const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1;
-                        grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, scale, L + 4*k);
-                    }
-                    const int8_t * pg = (const int8_t *)(kgrid_q3xs + grid_index);
-                    for (int i = 0; i < 4; ++i) L[4*k+i] = (pg[i] - 1)/2;
-                }
-                float sumqx = 0, sumq2 = 0;
-                for (int i = 0; i < block_size; ++i) {
-                    float w = weight[i];
-                    float q = 2*L[i] + 1;
-                    sumqx += w*xval[i]*q;
-                    sumq2 += w*q*q;
-                }
-                if (sumq2 > 0) scale = sumqx/sumq2;
-            }
-            if (scale < 0) {
-                // This should never happen, but just in case, flip scale so that it is positive (we use uint's to encode the scale)
-                // and correspondingly flip quant signs.
-                scale = -scale;
-                for (int k = 0; k < bs8; ++k) block_signs[k] = ~block_signs[k];
-            }
-            for (int k = 0; k < bs4; ++k) {
-                uint16_t u = 0;
-                for (int i = 0; i < 4; ++i) u |= (L[4*k+i] << 3*i);
-                int grid_index = kmap_q3xs[u];
-                if (grid_index < 0) {
-                    printf("Oops: found point %u not on grid:", u);
-                    for (int i = 0; i < 4; ++i) printf(" %d", L[4*k+i]);
-                    printf("\n");
-                    GGML_ASSERT(false);
-                }
-                qs[k] = grid_index & 255;
-                qh[(ib*bs4+k)/8] |= ((grid_index >> 8) << ((ib*bs4+k)%8));
-            }
-            qs += bs4;
-            for (int k = 0; k < bs8; ++k) signs[k] = block_signs[k];
-            signs += bs8;
-            GGML_ASSERT(scale >= 0);
-            scales[ib] = scale;
-            max_scale = MAX(max_scale, scale);
-        }
-
-        if (!max_scale) {
-            continue;
-        }
-
-        float d = max_scale/31;
-        y[ibl].d = GGML_FP32_TO_FP16(d * 1.033f);
-        float id = 1/d;
-        for (int ib = 0; ib < QK_K/block_size; ib += 2) {
-            int l1 = nearest_int(0.5f*(id*scales[ib+0]-1));
-            l1 = MAX(0, MIN(15, l1));
-            int l2 = nearest_int(0.5f*(id*scales[ib+1]-1));
-            l2 = MAX(0, MIN(15, l2));
-            y[ibl].scales[ib/2] = l1 | (l2 << 4);
-        }
-
-    }
-}
-
-#define IQ3S_BLOCK_SIZE 32
-size_t quantize_iq3_s(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    GGML_ASSERT(n_per_row%QK_K == 0);
-    int64_t nblock = n_per_row/QK_K;
-    float scales[QK_K/IQ3S_BLOCK_SIZE];
-    float weight[IQ3S_BLOCK_SIZE];
-    float xval[IQ3S_BLOCK_SIZE];
-    int8_t L[IQ3S_BLOCK_SIZE];
-    int8_t Laux[IQ3S_BLOCK_SIZE];
-    float  waux[IQ3S_BLOCK_SIZE];
-    bool   is_on_grid[IQ3S_BLOCK_SIZE/4];
-    bool   is_on_grid_aux[IQ3S_BLOCK_SIZE/4];
-    uint8_t block_signs[IQ3S_BLOCK_SIZE/8];
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_iq3_s_impl(IQ3S_BLOCK_SIZE, src, qrow, n_per_row, quant_weights,
-                scales, weight, xval, L, Laux, waux, is_on_grid, is_on_grid_aux, block_signs);
-        src += n_per_row;
-        qrow += nblock*sizeof(block_iq3_s);
-    }
-    return nrow * nblock * sizeof(block_iq3_s);
-}
-
-void quantize_row_iq3_s(const float * restrict x, void * restrict vy, int64_t k) {
-    assert(k % QK_K == 0);
-    block_iq3_s * restrict y = vy;
-    quantize_row_iq3_s_reference(x, y, k);
-}
-
-void quantize_row_iq3_s_reference(const float * restrict x, block_iq3_s * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    quantize_iq3_s(x, y, 1, k, NULL);
-}
-
-
-// =================================== 1.5 bpw ===================================================
-
-static int iq1_find_best_neighbour(const uint16_t * restrict neighbours, const uint64_t * restrict grid,
-        const float * restrict xval, const float * restrict weight, float * scale, int8_t * restrict L, int ngrid) {
-    int num_neighbors = neighbours[0];
-    GGML_ASSERT(num_neighbors > 0);
-    float best_score = 0;
-    int grid_index = -1;
-    for (int j = 1; j <= num_neighbors; ++j) {
-        const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
-        float sumqx = 0, sumq2 = 0;
-        for (int i = 0; i < 8; ++i) {
-            float q = (pg[i] - 3)/2;
-            float w = weight[i];
-            sumqx += w*q*xval[i];
-            sumq2 += w*q*q;
-        }
-        if (sumqx > 0 && sumq2 > 0 && sumqx*sumqx > best_score*sumq2) {
-            *scale = sumqx/sumq2; best_score = *scale * sumqx;
-            grid_index = neighbours[j];
-        }
-    }
-    if (grid_index < 0) {
-        for (int i = 0; i < ngrid; ++i) {
-            const int8_t * grid_i = (const int8_t *)(grid + i);
-            float sumqx = 0, sumq2 = 0;
-            for (int j = 0; j < 8; ++j) {
-                float w = weight[j];
-                float q = (grid_i[j] - 3)/2;
-                sumqx += w*q*xval[j];
-                sumq2 += w*q*q;
-            }
-            if (sumqx > 0 && sumq2 > 0 && sumqx*sumqx > best_score*sumq2) {
-                *scale = sumqx/sumq2; best_score = *scale*sumqx;
-                grid_index = i;
-            }
-        }
-    }
-    if (grid_index < 0) {
-        printf("Oops, did not find grid point\n");
-        printf("Have %d neighbours\n", num_neighbors);
-        for (int j = 1; j <= num_neighbors; ++j) {
-            const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
-            float sumqx = 0, sumq2 = 0;
-            for (int i = 0; i < 8; ++i) {
-                float q = (pg[i] - 3)/2;
-                float w = weight[i];
-                sumqx += w*q*xval[i];
-                sumq2 += w*q*q;
-            }
-            printf("    neighbour %d: sumqx = %g sumq2 = %g\n", j, (double)sumqx, (double)sumq2);
-        }
-    }
-    GGML_ASSERT(grid_index >= 0);
-    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    *scale *= 1.05f;  // This is a fudge factor. Don't ask me why it improves the result.
-    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-    const int8_t * pg = (const int8_t *)(grid + grid_index);
-    for (int i = 0; i < 8; ++i) L[i] = (pg[i] - 1)/2;
-    return grid_index;
-}
-
-static int iq1_find_best_neighbour2(const uint16_t * restrict neighbours, const uint64_t * restrict grid,
-        const float * restrict xval, const float * restrict weight, float scale, const float * restrict xg, int8_t * restrict L, int ngrid) {
-    int num_neighbors = neighbours[0];
-    GGML_ASSERT(num_neighbors > 0);
-    float best_score = FLT_MAX;
-    int grid_index = -1;
-    for (int j = 1; j <= num_neighbors; ++j) {
-        const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
-        float d2 = 0;
-        for (int i = 0; i < 8; ++i) {
-            float q = xg[(pg[i] - 1)/2];
-            float w = weight[i];
-            float diff = scale*q - xval[i];
-            d2 += w*diff*diff;
-        }
-        if (d2 < best_score) {
-            best_score = d2;
-            grid_index = neighbours[j];
-        }
-    }
-    if (grid_index < 0) {
-        for (int i = 0; i < ngrid; ++i) {
-            const int8_t * grid_i = (const int8_t *)(grid + i);
-            float d2 = 0;
-            for (int j = 0; j < 8; ++j) {
-                float w = weight[j];
-                float q = xg[(grid_i[j] - 1)/2];
-                float diff = scale*q - xval[i];
-                d2 += w*diff*diff;
-            }
-            if (d2 < best_score) {
-                best_score = d2;
-                grid_index = i;
-            }
-        }
-    }
-    if (grid_index < 0) {
-        printf("Oops, did not find grid point\n");
-        printf("Have %d neighbours\n", num_neighbors);
-        for (int j = 1; j <= num_neighbors; ++j) {
-            const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
-            float sumqx = 0, sumq2 = 0;
-            for (int i = 0; i < 8; ++i) {
-                float q = xg[(pg[i] - 1)/2];
-                float w = weight[i];
-                sumqx += w*q*xval[i];
-                sumq2 += w*q*q;
-            }
-            printf("    neighbour %d: sumqx = %g sumq2 = %g\n", j, (double)sumqx, (double)sumq2);
-        }
-    }
-    GGML_ASSERT(grid_index >= 0);
-    const int8_t * pg = (const int8_t *)(grid + grid_index);
-    for (int i = 0; i < 8; ++i) L[i] = (pg[i] - 1)/2;
-    return grid_index;
-}
-
-static int iq1_sort_helper(const void * left, const void * right) {
-    const float * l = left;
-    const float * r = right;
-    return *l < *r ? -1 : *l > *r ? 1 : 0;
-}
-
-#define IQ1S_BLOCK_SIZE 32
-#define IQ1M_BLOCK_SIZE 16
-static void quantize_row_iq1_s_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights,
-        float    * scales,
-        float    * weight,
-        float    * sumx,
-        float    * sumw,
-        float    * pairs,
-        int8_t   * L,
-        uint16_t * index,
-        int8_t   * shifts) {
-
-    const int gindex = iq2_data_index(GGML_TYPE_IQ1_S);
-
-    const uint64_t * kgrid_q2xs      = iq2_data[gindex].grid;
-    const int      * kmap_q2xs       = iq2_data[gindex].map;
-    const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours;
-
-    GGML_ASSERT(quant_weights   && "missing quantization weights");
-    GGML_ASSERT(kgrid_q2xs      && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kmap_q2xs       && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(n%QK_K == 0);
-
-    block_iq1_s * y = vy;
-
-    const int64_t nbl = n/QK_K;
-
-    const int block_size = IQ1S_BLOCK_SIZE;
-
-    const float x_p[3] = {-1 + IQ1S_DELTA,  IQ1S_DELTA, 1 + IQ1S_DELTA};
-    const float x_m[3] = {-1 - IQ1S_DELTA, -IQ1S_DELTA, 1 - IQ1S_DELTA};
-
-
-    int * idx = (int *)(pairs + 1);
-
-    for (int ibl = 0; ibl < nbl; ++ibl) {
-
-        y[ibl].d = GGML_FP32_TO_FP16(0.f);
-        memset(y[ibl].qs, 0, QK_K/8);
-        memset(y[ibl].qh, 0, QK_K/16);
-
-        float max_scale = 0;
-
-        const float * xbl = x + QK_K*ibl;
-        float sumx2 = 0;
-        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
-        float sigma2 = 2*sumx2/QK_K;
-
-        for (int ib = 0; ib < QK_K/block_size; ++ib) {
-            const float * xb = xbl + block_size*ib;
-            const float * qw = quant_weights + QK_K*ibl + block_size*ib;
-            for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
-            float max = fabsf(xb[0]);
-            for (int i = 1; i < block_size; ++i) max = MAX(max, fabsf(xb[i]));
-            if (max < GROUP_MAX_EPS_IQ1_S) {
-                scales[ib] = 0;
-                memset(L, 1, block_size);
-                continue;
-            }
-            // Here we solve exactly the sum of squared difference (SSD) weighted minimization problem.
-            // With just 3 allowed quant values (-1, 0, 1), we can search exhaustively for the two
-            // boundaries that split the weights xb[i] into 3 groups. To do so, we sort the weights
-            // in ascending order, compute Si = sum[weight[j] xb[j], j = 0...i] and
-            // Wi = sum[weight[j], j = 0...i], and use these to quckly get get the optimum scale
-            // for each possible and score for each split.
-            for (int j = 0; j < block_size; ++j) {
-                pairs[2*j] = xb[j];
-                idx[2*j] = j;
-            }
-            qsort(pairs, block_size, 2*sizeof(float), iq1_sort_helper);
-            {
-                sumx[0] = sumw[0] = 0;
-                for (int j = 0; j < block_size; ++j) {
-                    int i = idx[2*j];
-                    sumx[j+1] = sumx[j] + weight[i]*xb[i];
-                    sumw[j+1] = sumw[j] + weight[i];
-                }
-            }
-            float best_score = 0, scale = max;
-            int besti1 = -1, besti2 = -1, best_shift = 0;
-            for (int i1 = 0; i1 <= block_size; ++i1) {
-                for (int i2 = i1; i2 <= block_size; ++i2) {
-                    float sumqx = (sumx[i1] - sumx[0])*x_p[0] + (sumx[i2] - sumx[i1])*x_p[1] + (sumx[block_size] - sumx[i2])*x_p[2];
-                    float sumq2 = (sumw[i1] - sumw[0])*x_p[0]*x_p[0] + (sumw[i2] - sumw[i1])*x_p[1]*x_p[1] + (sumw[block_size] - sumw[i2])*x_p[2]*x_p[2];
-                    if (sumq2 > 0 && sumqx*sumqx > best_score*sumq2) {
-                        scale = sumqx/sumq2; best_score = scale*sumqx;
-                        besti1 = i1; besti2 = i2; best_shift = 1;
-                    }
-                    sumqx = (sumx[i1] - sumx[0])*x_m[0] + (sumx[i2] - sumx[i1])*x_m[1] + (sumx[block_size] - sumx[i2])*x_m[2];
-                    sumq2 = (sumw[i1] - sumw[0])*x_m[0]*x_m[0] + (sumw[i2] - sumw[i1])*x_m[1]*x_m[1] + (sumw[block_size] - sumw[i2])*x_m[2]*x_m[2];
-                    if (sumq2 > 0 && sumqx*sumqx > best_score*sumq2) {
-                        scale = sumqx/sumq2; best_score = scale*sumqx;
-                        besti1 = i1; besti2 = i2; best_shift = -1;
-                    }
-                }
-            }
-            GGML_ASSERT(besti1 >= 0 && besti2 >= 0 && best_shift != 0);
-            for (int j =      0; j < besti1; ++j) L[idx[2*j]] = 0;
-            for (int j = besti1; j < besti2; ++j) L[idx[2*j]] = 1;
-            for (int j = besti2; j < block_size; ++j) L[idx[2*j]] = 2;
-            if (scale < 0) {
-                for (int j = 0; j < block_size; ++j) L[j] = 2 - L[j];
-                scale = -scale; best_shift = -best_shift;
-            }
-            bool all_on_grid = true;
-            const float * xx = best_shift == 1 ? x_p : x_m;
-            for (int k = 0; k < block_size/8; ++k) {
-                uint16_t u = 0;
-                for (int j = 0; j < 8; ++j) u |= (L[8*k+j] << 2*j);
-                int grid_index = kmap_q2xs[u];
-                if (grid_index < 0) {
-                    all_on_grid = false;
-                    const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
-                    grid_index = iq1_find_best_neighbour2(neighbours, kgrid_q2xs, xb + 8*k, weight + 8*k, scale, xx, L + 8*k, NGRID_IQ1S);
-                    GGML_ASSERT(grid_index >= 0);
-                }
-                index[k] = grid_index;
-            }
-            if (!all_on_grid) {
-                float sumqx = 0, sumq2 = 0;
-                for (int k = 0; k < block_size/8; ++k) {
-                    const int8_t * pg = (const int8_t *)(kgrid_q2xs + index[k]);
-                    for (int j = 0; j < 8; ++j) {
-                        float w = weight[8*k + j];
-                        float q = xx[(pg[j] - 1)/2];
-                        sumqx += w*q*xb[8*k+j];
-                        sumq2 += w*q*q;
-                    }
-                }
-                if (sumqx > 0 && sumq2 > 0) scale = sumqx/sumq2;
-            }
-            uint16_t h = 0;
-            for (int k = 0; k < block_size/8; ++k) {
-                y[ibl].qs[(block_size/8)*ib + k] = index[k] & 255;
-                h |= (index[k] >> 8) << 3*k;
-            }
-            y[ibl].qh[ib] = h;
-            GGML_ASSERT(scale >= 0);
-            scales[ib] = scale;
-            shifts[ib] = best_shift;
-            max_scale = MAX(max_scale, scale);
-        }
-
-        if (!max_scale) {
-            continue;
-        }
-
-        float d = max_scale/15;
-        y[ibl].d = GGML_FP32_TO_FP16(d*1.125f); // 1.125f is another fudge factor. Don't ask me why it is needed.
-        float id = 1/d;
-        for (int ib = 0; ib < QK_K/block_size; ++ib) {
-            int l = nearest_int(0.5f*(id*scales[ib]-1));
-            l = MAX(0, MIN(7, l));
-            if (shifts[ib] == -1) l |= 8;
-            y[ibl].qh[ib] |= (l << 12);
-        }
-    }
-}
-
-size_t quantize_iq1_s(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    GGML_ASSERT(n_per_row%QK_K == 0);
-    float  scales[QK_K/IQ1S_BLOCK_SIZE];
-    float  weight[IQ1S_BLOCK_SIZE];
-    int8_t L[IQ1S_BLOCK_SIZE];
-    float  sumx[IQ1S_BLOCK_SIZE+1];
-    float  sumw[IQ1S_BLOCK_SIZE+1];
-    float  pairs[2*IQ1S_BLOCK_SIZE];
-    uint16_t index[IQ1S_BLOCK_SIZE/8];
-    int8_t shifts[QK_K/IQ1S_BLOCK_SIZE];
-    int64_t nblock = n_per_row/QK_K;
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_iq1_s_impl(src, qrow, n_per_row, quant_weights, scales, weight, sumx, sumw, pairs, L, index, shifts);
-        src += n_per_row;
-        qrow += nblock*sizeof(block_iq1_s);
-    }
-    return nrow * nblock * sizeof(block_iq1_s);
-}
-
-static void quantize_row_iq1_m_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights,
-        float    * scales,
-        float    * weight,
-        float    * pairs,
-        int8_t   * L,
-        uint16_t * index,
-        int8_t   * shifts) {
-
-    const int gindex = iq2_data_index(GGML_TYPE_IQ1_M);
-
-    const uint64_t * kgrid_q2xs      = iq2_data[gindex].grid;
-    const int      * kmap_q2xs       = iq2_data[gindex].map;
-    const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours;
-
-    //GGML_ASSERT(quant_weights   && "missing quantization weights");
-    GGML_ASSERT(kgrid_q2xs      && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kmap_q2xs       && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(n%QK_K == 0);
-
-    block_iq1_m * y = vy;
-
-    const int64_t nbl = n/QK_K;
-
-    const int block_size = IQ1M_BLOCK_SIZE;
-
-    const float x_p[3] = {-1 + IQ1M_DELTA,  IQ1M_DELTA, 1 + IQ1M_DELTA};
-    const float x_m[3] = {-1 - IQ1M_DELTA, -IQ1M_DELTA, 1 - IQ1M_DELTA};
-    const uint8_t masks[4] = {0x00, 0x80, 0x08, 0x88};
-
-    int * idx = (int *)(pairs + 1);
-
-    float sumqx[4], sumq2[4];
-
-    iq1m_scale_t s;
-    const float * xx;
-
-    for (int ibl = 0; ibl < nbl; ++ibl) {
-        memset(y[ibl].qs, 0, QK_K/8);
-        memset(y[ibl].qh, 0, QK_K/16);
-        memset(y[ibl].scales, 0, QK_K/32);
-
-        float max_scale = 0;
-
-        const float * xbl = x + QK_K*ibl;
-        float sumx2 = 0;
-        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
-        float sigma2 = 2*sumx2/QK_K;
-
-        for (int ib = 0; ib < QK_K/block_size; ++ib) {
-            const float * xb = xbl + block_size*ib;
-            if (quant_weights) {
-                const float * qw = quant_weights + QK_K*ibl + block_size*ib;
-                for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
-            } else {
-                for (int i = 0; i < block_size; ++i) weight[i] = xb[i]*xb[i];
-            }
-            float max = fabsf(xb[0]);
-            for (int i = 1; i < block_size; ++i) max = MAX(max, fabsf(xb[i]));
-            if (max < GROUP_MAX_EPS_IQ1_M) {
-                scales[ib] = 0;
-                memset(L, 1, block_size);
-                continue;
-            }
-            // Here we solve exactly the sum of squared difference (SSD) weighted minimization problem.
-            // With just 3 allowed quant values (-1, 0, 1), we can search exhaustively for the two
-            // boundaries that split the weights xb[i] into 3 groups. To do so, we sort the weights
-            // in ascending order, compute Si = sum[weight[j] xb[j], j = 0...i] and
-            // Wi = sum[weight[j], j = 0...i], and use these to quckly get get the optimum scale
-            // for each possible and score for each split.
-            for (int j = 0; j < block_size; ++j) {
-                pairs[2*j] = xb[j];
-                idx[2*j] = j;
-            }
-            qsort(pairs, block_size, 2*sizeof(float), iq1_sort_helper);
-            float best_score = 0, scale = max;
-            int besti1 = -1, besti2 = -1, best_k = -1;
-            // 0: +, +
-            // 1: +, -
-            // 2: -, +
-            // 3: -, -
-            for (int i1 = 0; i1 <= block_size; ++i1) {
-                for (int i2 = i1; i2 <= block_size; ++i2) {
-                    memset(sumqx, 0, 4*sizeof(float));
-                    memset(sumq2, 0, 4*sizeof(float));
-                    for (int j = 0; j < i1; ++j) {
-                        int i = idx[2*j];
-                        if (i < block_size/2) {
-                            sumqx[0] += weight[i]*x_p[0]*xb[i];
-                            sumqx[1] += weight[i]*x_p[0]*xb[i];
-                            sumqx[2] += weight[i]*x_m[0]*xb[i];
-                            sumqx[3] += weight[i]*x_m[0]*xb[i];
-                            sumq2[0] += weight[i]*x_p[0]*x_p[0];
-                            sumq2[1] += weight[i]*x_p[0]*x_p[0];
-                            sumq2[2] += weight[i]*x_m[0]*x_m[0];
-                            sumq2[3] += weight[i]*x_m[0]*x_m[0];
-                        } else {
-                            sumqx[0] += weight[i]*x_p[0]*xb[i];
-                            sumqx[2] += weight[i]*x_p[0]*xb[i];
-                            sumqx[1] += weight[i]*x_m[0]*xb[i];
-                            sumqx[3] += weight[i]*x_m[0]*xb[i];
-                            sumq2[0] += weight[i]*x_p[0]*x_p[0];
-                            sumq2[2] += weight[i]*x_p[0]*x_p[0];
-                            sumq2[1] += weight[i]*x_m[0]*x_m[0];
-                            sumq2[3] += weight[i]*x_m[0]*x_m[0];
-                        }
-                    }
-                    for (int j = i1; j < i2; ++j) {
-                        int i = idx[2*j];
-                        if (i < block_size/2) {
-                            sumqx[0] += weight[i]*x_p[1]*xb[i];
-                            sumqx[1] += weight[i]*x_p[1]*xb[i];
-                            sumqx[2] += weight[i]*x_m[1]*xb[i];
-                            sumqx[3] += weight[i]*x_m[1]*xb[i];
-                            sumq2[0] += weight[i]*x_p[1]*x_p[1];
-                            sumq2[1] += weight[i]*x_p[1]*x_p[1];
-                            sumq2[2] += weight[i]*x_m[1]*x_m[1];
-                            sumq2[3] += weight[i]*x_m[1]*x_m[1];
-                        } else {
-                            sumqx[0] += weight[i]*x_p[1]*xb[i];
-                            sumqx[2] += weight[i]*x_p[1]*xb[i];
-                            sumqx[1] += weight[i]*x_m[1]*xb[i];
-                            sumqx[3] += weight[i]*x_m[1]*xb[i];
-                            sumq2[0] += weight[i]*x_p[1]*x_p[1];
-                            sumq2[2] += weight[i]*x_p[1]*x_p[1];
-                            sumq2[1] += weight[i]*x_m[1]*x_m[1];
-                            sumq2[3] += weight[i]*x_m[1]*x_m[1];
-                        }
-                    }
-                    for (int j = i2; j < block_size; ++j) {
-                        int i = idx[2*j];
-                        if (i < block_size/2) {
-                            sumqx[0] += weight[i]*x_p[2]*xb[i];
-                            sumqx[1] += weight[i]*x_p[2]*xb[i];
-                            sumqx[2] += weight[i]*x_m[2]*xb[i];
-                            sumqx[3] += weight[i]*x_m[2]*xb[i];
-                            sumq2[0] += weight[i]*x_p[2]*x_p[2];
-                            sumq2[1] += weight[i]*x_p[2]*x_p[2];
-                            sumq2[2] += weight[i]*x_m[2]*x_m[2];
-                            sumq2[3] += weight[i]*x_m[2]*x_m[2];
-                        } else {
-                            sumqx[0] += weight[i]*x_p[2]*xb[i];
-                            sumqx[2] += weight[i]*x_p[2]*xb[i];
-                            sumqx[1] += weight[i]*x_m[2]*xb[i];
-                            sumqx[3] += weight[i]*x_m[2]*xb[i];
-                            sumq2[0] += weight[i]*x_p[2]*x_p[2];
-                            sumq2[2] += weight[i]*x_p[2]*x_p[2];
-                            sumq2[1] += weight[i]*x_m[2]*x_m[2];
-                            sumq2[3] += weight[i]*x_m[2]*x_m[2];
-                        }
-                    }
-                    for (int k = 0; k < 4; ++k) {
-                        if (sumq2[k] > 0 && sumqx[k]*sumqx[k] > best_score*sumq2[k]) {
-                            scale = sumqx[k]/sumq2[k]; best_score = scale*sumqx[k];
-                            besti1 = i1; besti2 = i2; best_k = k;
-                        }
-                    }
-                }
-            }
-            GGML_ASSERT(besti1 >= 0 && besti2 >= 0 && best_k >= 0);
-            for (int j =      0; j < besti1; ++j) L[idx[2*j]] = 0;
-            for (int j = besti1; j < besti2; ++j) L[idx[2*j]] = 1;
-            for (int j = besti2; j < block_size; ++j) L[idx[2*j]] = 2;
-            if (scale < 0) {
-                for (int j = 0; j < block_size; ++j) L[j] = 2 - L[j];
-                scale = -scale;
-                best_k = best_k == 0 ? 3 : best_k == 1 ? 2 : best_k == 2 ? 1 : 0;
-            }
-            bool all_on_grid = true;
-            for (int k = 0; k < block_size/8; ++k) {
-                if (k == 0) xx = best_k < 2 ? x_p : x_m;
-                else xx = best_k%2 == 0 ? x_p : x_m;
-                uint16_t u = 0;
-                for (int j = 0; j < 8; ++j) u |= (L[8*k+j] << 2*j);
-                int grid_index = kmap_q2xs[u];
-                if (grid_index < 0) {
-                    all_on_grid = false;
-                    const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
-                    grid_index = iq1_find_best_neighbour2(neighbours, kgrid_q2xs, xb + 8*k, weight + 8*k, scale, xx, L + 8*k, NGRID_IQ1S);
-                    GGML_ASSERT(grid_index >= 0);
-                }
-                index[k] = grid_index;
-            }
-            if (!all_on_grid) {
-                float sumqx_f = 0, sumq2_f = 0;
-                for (int k = 0; k < block_size/8; ++k) {
-                    if (k == 0) xx = best_k < 2 ? x_p : x_m;
-                    else xx = best_k%2 == 0 ? x_p : x_m;
-                    const int8_t * pg = (const int8_t *)(kgrid_q2xs + index[k]);
-                    for (int j = 0; j < 8; ++j) {
-                        float w = weight[8*k + j];
-                        float q = xx[(pg[j] - 1)/2];
-                        sumqx_f += w*q*xb[8*k+j];
-                        sumq2_f += w*q*q;
-                    }
-                }
-                if (sumqx_f > 0 && sumq2_f > 0) scale = sumqx_f/sumq2_f;
-            }
-            y[ibl].qs[2*ib + 0] = index[0] & 255;
-            y[ibl].qs[2*ib + 1] = index[1] & 255;
-            y[ibl].qh[ib] = (index[0] >> 8) | ((index[1] >> 8) << 4);
-            GGML_ASSERT(scale >= 0);
-            scales[ib] = scale;
-            shifts[ib] = best_k;
-            max_scale = MAX(max_scale, scale);
-        }
-
-        if (!max_scale) {
-            continue;
-        }
-
-        uint16_t * sc = (uint16_t *)y[ibl].scales;
-        float d = max_scale/15;
-        float id = 1/d;
-        float sumqx_f = 0, sumq2_f = 0;
-        for (int ib = 0; ib < QK_K/block_size; ++ib) {
-            int l = nearest_int(0.5f*(id*scales[ib+0]-1));
-            l = MAX(0, MIN(7, l));
-            sc[ib/4] |= (l << 3*(ib%4));
-            y[ibl].qh[ib] |= masks[shifts[ib]];
-            const float * xb = xbl + block_size*ib;
-            if (quant_weights) {
-                const float * qw = quant_weights + QK_K*ibl + block_size*ib;
-                for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
-            } else {
-                for (int i = 0; i < block_size; ++i) weight[i] = xb[i]*xb[i];
-            }
-            for (int k = 0; k < block_size/8; ++k) {
-                if (k == 0) xx = shifts[ib] < 2 ? x_p : x_m;
-                else xx = shifts[ib]%2 == 0 ? x_p : x_m;
-                const int8_t * pg = (const int8_t *)(kgrid_q2xs + y[ibl].qs[2*ib+k] + ((y[ibl].qh[ib] << (8 - 4*k)) & 0x700));
-                for (int j = 0; j < 8; ++j) {
-                    float w = weight[8*k + j];
-                    float q = xx[(pg[j] - 1)/2]*(2*l+1);
-                    sumqx_f += w*q*xb[8*k+j];
-                    sumq2_f += w*q*q;
-                }
-            }
-        }
-        if (sumq2_f > 0) d = sumqx_f/sumq2_f;
-        s.f16 = GGML_FP32_TO_FP16(d*1.1125f); // 1.1125f is another fudge factor. Don't ask me why it is needed.
-        sc[0] |= ((s.u16 & 0x000f) << 12);
-        sc[1] |= ((s.u16 & 0x00f0) <<  8);
-        sc[2] |= ((s.u16 & 0x0f00) <<  4);
-        sc[3] |= ((s.u16 & 0xf000) <<  0);
-    }
-}
-
-size_t quantize_iq1_m(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    GGML_ASSERT(n_per_row%QK_K == 0);
-    float  scales[QK_K/IQ1M_BLOCK_SIZE];
-    float  weight[IQ1M_BLOCK_SIZE];
-    int8_t L[IQ1M_BLOCK_SIZE];
-    float  pairs[2*IQ1M_BLOCK_SIZE];
-    uint16_t index[IQ1M_BLOCK_SIZE/8];
-    int8_t shifts[QK_K/IQ1M_BLOCK_SIZE];
-    int64_t nblock = n_per_row/QK_K;
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_iq1_m_impl(src, qrow, n_per_row, quant_weights, scales, weight, pairs, L, index, shifts);
-        src += n_per_row;
-        qrow += nblock*sizeof(block_iq1_m);
-    }
-    return nrow * nblock * sizeof(block_iq1_m);
-}
-
-// ============================ 4-bit non-linear quants
-
-static inline int best_index_int8(int n, const int8_t * val, float x) {
-    if (x <= val[0]) return 0;
-    if (x >= val[n-1]) return n-1;
-    int ml = 0, mu = n-1;
-    while (mu-ml > 1) {
-        int mav = (ml+mu)/2;
-        if (x < val[mav]) mu = mav; else ml = mav;
-    }
-    return x - val[mu-1] < val[mu] - x ? mu-1 : mu;
-}
-
-static void quantize_row_iq4_nl_impl(const int super_block_size, const int block_size, const float * restrict x,
-        ggml_fp16_t * dh, uint8_t * q4, uint16_t * scales_h, uint8_t * scales_l,
-        float * scales, float * weight, uint8_t * L,
-        const int8_t * values,
-        const float * quant_weights,
-        const int ntry) {
-
-    float sigma2 = 0;
-    for (int j = 0; j < super_block_size; ++j) sigma2 += x[j]*x[j];
-    sigma2 *= 2.f/super_block_size;
-
-    memset(q4, 0, super_block_size/2);
-    dh[0] = GGML_FP32_TO_FP16(0.f);
-
-    float max_scale = 0, amax_scale = 0;
-    for (int ib = 0; ib < super_block_size/block_size; ++ib) {
-        const float * xb = x + ib*block_size;
-        uint8_t * Lb = L + ib*block_size;
-        if (quant_weights) {
-            const float * qw = quant_weights + ib*block_size;
-            for (int j = 0; j < block_size; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]);
-        } else {
-            for (int j = 0; j < block_size; ++j) weight[j] = xb[j]*xb[j];
-        }
-        float amax = 0, max = 0;
-        for (int j = 0; j < block_size; ++j) {
-            float ax = fabsf(xb[j]);
-            if (ax > amax) {
-                amax = ax; max = xb[j];
-            }
-        }
-        if (amax < GROUP_MAX_EPS) {
-            scales[ib] = 0;
-            continue;
-        }
-        float d = ntry > 0 ? -max/values[0] : max/values[0];
-        float id = 1/d;
-        float sumqx = 0, sumq2 = 0;
-        for (int j = 0; j < block_size; ++j) {
-            float al = id*xb[j];
-            int l = best_index_int8(16, values, al);
-            Lb[j] = l;
-            float q = values[l];
-            float w = weight[j];
-            sumqx += w*q*xb[j];
-            sumq2 += w*q*q;
-        }
-        d = sumqx/sumq2;
-        float best = d*sumqx;
-        for (int itry = -ntry; itry <= ntry; ++itry) {
-            id = (itry + values[0])/max;
-            sumqx = sumq2 = 0;
-            for (int j = 0; j < block_size; ++j) {
-                float al = id*xb[j];
-                int l = best_index_int8(16, values, al);
-                float q = values[l];
-                float w = weight[j];
-                sumqx += w*q*xb[j];
-                sumq2 += w*q*q;
-            }
-            if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
-                d = sumqx/sumq2; best = d * sumqx;
-            }
-        }
-        scales[ib] = d;
-        float abs_d = fabsf(d);
-        if (abs_d > amax_scale) {
-            amax_scale = abs_d; max_scale = d;
-        }
-    }
-
-    if (super_block_size/block_size > 1) {
-        int nb = super_block_size/block_size;
-        memset(scales_h, 0, ((nb+7)/8)*sizeof(uint16_t));
-        float d = -max_scale/32;
-        dh[0] = GGML_FP32_TO_FP16(d);
-        float id = d ? 1/d : 0.f;
-        for (int ib = 0; ib < super_block_size/block_size; ++ib) {
-            int l = nearest_int(id*scales[ib]);
-            l = MAX(-32, MIN(31, l));
-            float dl = d * l;
-            float idl = dl ? 1/dl : 0.f;
-            uint8_t * Lb = L + ib*block_size;
-            const float * xb = x + ib*block_size;
-            for (int j = 0; j < block_size; ++j) {
-                Lb[j] = best_index_int8(16, values, idl*xb[j]);
-            }
-            l += 32;
-            uint8_t l_l = l & 0xf;
-            uint8_t l_h = l >>  4;
-            if (ib%2 == 0) scales_l[ib/2] = l_l;
-            else scales_l[ib/2] |= (l_l << 4);
-            scales_h[ib/8] |= (l_h << 2*(ib%8));
-        }
-    } else {
-        dh[0] = GGML_FP32_TO_FP16(scales[0]);
-        if (ntry > 0) {
-            float id = scales[0] ? 1/scales[0] : 0;
-            for (int j = 0; j < super_block_size; ++j) {
-                L[j] = best_index_int8(16, values, id*x[j]);
-            }
-        }
-    }
-
-    for (int i = 0; i < super_block_size/32; ++i) {
-        for (int j = 0; j < 16; ++j) {
-            q4[16*i + j] = L[32*i + j] | (L[32*i + 16 + j] << 4);
-        }
-    }
-}
-
-size_t quantize_iq4_nl(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    GGML_ASSERT(n_per_row%QK4_NL == 0);
-    int64_t nblock = n_per_row/QK4_NL;
-    char * qrow = (char *)dst;
-    uint8_t L[QK4_NL];
-    float weight[QK4_NL];
-    uint16_t unused_h;
-    uint8_t * unused_l = NULL;
-    float scale;
-    for (int64_t row = 0; row < nrow; ++row) {
-        block_iq4_nl * iq4 = (block_iq4_nl *)qrow;
-        for (int ibl = 0; ibl < nblock; ++ibl) {
-            const float * qw = quant_weights ? quant_weights + QK4_NL*ibl : NULL;
-            quantize_row_iq4_nl_impl(QK4_NL, 32, src + QK4_NL*ibl, &iq4[ibl].d, iq4[ibl].qs, &unused_h, unused_l,
-                    &scale, weight, L, kvalues_iq4nl, qw, 7);
-        }
-        src += n_per_row;
-        qrow += nblock*sizeof(block_iq4_nl);
-    }
-    return nrow * nblock * sizeof(block_iq4_nl);
-}
-
-void quantize_row_iq4_nl(const float * restrict x, void * restrict vy, int64_t k) {
-    GGML_ASSERT(k%QK4_NL == 0);
-    int64_t nblock = k/QK4_NL;
-    uint8_t L[QK4_NL];
-    float weight[QK4_NL];
-    uint16_t unused_h;
-    uint8_t * unused_l = NULL;
-    float scale;
-    block_iq4_nl * iq4 = (block_iq4_nl *)vy;
-    for (int ibl = 0; ibl < nblock; ++ibl) {
-        quantize_row_iq4_nl_impl(QK4_NL, 32, x + QK4_NL*ibl, &iq4[ibl].d, iq4[ibl].qs, &unused_h, unused_l,
-                &scale, weight, L, kvalues_iq4nl, NULL, -1);
-    }
-}
-
-void quantize_row_iq4_nl_reference(const float * restrict x, block_iq4_nl * restrict y, int64_t k) {
-    assert(k % QK4_NL == 0);
-    quantize_row_iq4_nl(x, y, k);
-}
-
-size_t quantize_iq4_xs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    GGML_ASSERT(n_per_row%QK_K == 0);
-    int64_t nblock = n_per_row/QK_K;
-    char * qrow = (char *)dst;
-    uint8_t L[QK_K];
-    float weight[32];
-    float scales[QK_K/32];
-    for (int64_t row = 0; row < nrow; ++row) {
-        block_iq4_xs * iq4 = (block_iq4_xs *)qrow;
-        for (int ibl = 0; ibl < nblock; ++ibl) {
-            const float * qw = quant_weights ? quant_weights + QK_K*ibl : NULL;
-            quantize_row_iq4_nl_impl(QK_K, 32, src + QK_K*ibl, &iq4[ibl].d, iq4[ibl].qs, &iq4[ibl].scales_h, iq4[ibl].scales_l,
-                    scales, weight, L, kvalues_iq4nl, qw, 7);
-        }
-        src += n_per_row;
-        qrow += nblock*sizeof(block_iq4_xs);
-    }
-    return nrow * nblock * sizeof(block_iq4_xs);
-}
-
-void quantize_row_iq4_xs(const float * restrict x, void * restrict vy, int64_t k) {
-    assert(k % QK_K == 0);
-    block_iq4_xs * restrict y = vy;
-    quantize_row_iq4_xs_reference(x, y, k);
-}
-
-void quantize_row_iq4_xs_reference(const float * restrict x, block_iq4_xs * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    quantize_iq4_xs(x, y, 1, k, NULL);
-}
-
-// =============================== 2.5625 bpw
-
-static void quantize_row_iq2_s_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights) {
-
-    const int gindex = iq2_data_index(GGML_TYPE_IQ2_S);
-
-    const uint64_t * kgrid_q2xs      = iq2_data[gindex].grid;
-    const int      * kmap_q2xs       = iq2_data[gindex].map;
-    const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours;
-
-    GGML_ASSERT(kmap_q2xs       && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kgrid_q2xs      && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?");
-    GGML_ASSERT(n%QK_K == 0);
-
-    const int kMaxQ = 3;
-
-    const int64_t nbl = n/QK_K;
-
-    block_iq2_s * y = vy;
-
-    float scales[QK_K/16];
-    float weight[16];
-    float xval[16];
-    int8_t L[16];
-    int8_t Laux[16];
-    float  waux[16];
-    bool   is_on_grid[2];
-    bool   is_on_grid_aux[2];
-    uint8_t block_signs[2];
-
-    for (int ibl = 0; ibl < nbl; ++ibl) {
-
-        memset(&y[ibl], 0, sizeof(block_iq2_s));
-        y[ibl].d = GGML_FP32_TO_FP16(0.f);
-
-        float max_scale = 0;
-
-        const float * xbl = x + QK_K*ibl;
-        float sumx2 = 0;
-        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
-        float sigma2 = 2*sumx2/QK_K;
-
-        for (int ib = 0; ib < QK_K/16; ++ib) {
-            const float * xb = xbl + 16*ib;
-            if (quant_weights) {
-                const float * qw = quant_weights + QK_K*ibl + 16*ib;
-                for (int i = 0; i < 16; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
-            } else {
-                for (int i = 0; i < 16; ++i) weight[i] = 0.25f*sigma2 + xb[i]*xb[i];
-            }
-            for (int i = 0; i < 16; ++i) waux[i] = sqrtf(weight[i]);
-            for (int k = 0; k < 2; ++k) {
-                uint8_t s = 0;
-                for (int i = 0; i < 8; ++i) {
-                    if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i];
-                    else {
-                        xval[8*k + i] = -xb[8*k + i]; s |= (1 << i);
-                    }
-                }
-                block_signs[k] = s;
-            }
-            float max = xval[0];
-            for (int i = 1; i < 16; ++i) max = MAX(max, xval[i]);
-            if (max < GROUP_MAX_EPS_IQ2_S) {
-                scales[ib] = 0;
-                continue;
-            }
-            float best = 0;
-            float scale = max/(2*kMaxQ-1);
-            is_on_grid[0] = is_on_grid[1] = true;
-            for (int is = -9; is <= 9; ++is) {
-                float id = (2*kMaxQ-1+is*0.1f)/max;
-                float this_scale = 1/id;
-                for (int k = 0; k < 2; ++k) {
-                    for (int i = 0; i < 8; ++i) {
-                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
-                        Laux[8*k+i] = MAX(0, MIN(kMaxQ-1, l));
-                    }
-                    uint16_t u = 0;
-                    for (int i = 0; i < 8; ++i) u |= (Laux[8*k+i] << 2*i);
-                    int grid_index = kmap_q2xs[u];
-                    is_on_grid_aux[k] = true;
-                    if (grid_index < 0) {
-                        is_on_grid_aux[k] = false;
-                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
-                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, this_scale, Laux + 8*k);
-                    }
-                }
-                float sumqx = 0, sumq2 = 0;
-                for (int i = 0; i < 16; ++i) {
-                    float w = weight[i];
-                    float q = 2*Laux[i] + 1;
-                    sumqx += w*xval[i]*q;
-                    sumq2 += w*q*q;
-                }
-                if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
-                    scale = sumqx/sumq2; best = scale*sumqx;
-                    for (int i = 0; i < 16; ++i) L[i] = Laux[i];
-                    for (int k = 0; k <  2; ++k) is_on_grid[k] = is_on_grid_aux[k];
-                }
-            }
-            int n_not_ongrid = 0;
-            for (int k = 0; k < 2; ++k) if (!is_on_grid[k]) ++n_not_ongrid;
-            if (n_not_ongrid > 0 && scale > 0) {
-                float id = 1/scale;
-                for (int k = 0; k < 2; ++k) {
-                    if (is_on_grid[k]) continue;
-                    uint16_t u = 0;
-                    for (int i = 0; i < 8; ++i) {
-                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
-                        l = MAX(0, MIN(kMaxQ-1, l));
-                        u |= (l << 2*i);
-                        L[8*k + i] = l;
-                    }
-                    int grid_index = kmap_q2xs[u];
-                    if (grid_index < 0) {
-                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
-                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, scale, L + 8*k);
-                    }
-                }
-                float sumqx = 0, sumq2 = 0;
-                for (int i = 0; i < 16; ++i) {
-                    float w = weight[i];
-                    float q = 2*L[i] + 1;
-                    sumqx += w*xval[i]*q;
-                    sumq2 += w*q*q;
-                }
-                if (sumq2 > 0) scale = sumqx/sumq2;
-            }
-            if (scale < 0) {
-                scale = -scale;
-                for (int k = 0; k < 2; ++k) block_signs[k] = ~block_signs[k];
-            }
-            for (int k = 0; k < 2; ++k) {
-                uint16_t u = 0;
-                for (int i = 0; i < 8; ++i) u |= (L[8*k+i] << 2*i);
-                int grid_index = kmap_q2xs[u];
-                if (grid_index < 0) {
-                    printf("Oops: found point %u not on grid:", u);
-                    for (int i = 0; i < 8; ++i) printf(" %d", L[8*k+i]);
-                    printf("\n");
-                    GGML_ASSERT(false);
-                }
-                const int i8 = 2*ib + k;
-                y[ibl].qs[i8] = grid_index & 255;
-                y[ibl].qh[i8/4] |= ((grid_index >> 8) << 2*(i8%4));
-                y[ibl].qs[QK_K/8 + i8] = block_signs[k];
-            }
-            GGML_ASSERT(scale >= 0);
-            scales[ib] = scale;
-            max_scale = MAX(max_scale, scale);
-        }
-
-        if (!max_scale) {
-            continue;
-        }
-
-        float d = max_scale/31;
-        y[ibl].d = GGML_FP32_TO_FP16(d * 0.9875f);
-        float id = 1/d;
-        for (int ib = 0; ib < QK_K/16; ++ib) {
-            int l = nearest_int(0.5f*(id*scales[ib]-1));
-            l = MAX(0, MIN(15, l));
-            if (ib%2 == 0) y[ibl].scales[ib/2] = l;
-            else y[ibl].scales[ib/2] |= (l << 4);
-        }
-    }
-}
-
-size_t quantize_iq2_s(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
-    GGML_ASSERT(n_per_row%QK_K == 0);
-    int64_t nblock = n_per_row/QK_K;
-    char * qrow = (char *)dst;
-    for (int64_t row = 0; row < nrow; ++row) {
-        quantize_row_iq2_s_impl(src, qrow, n_per_row, quant_weights);
-        src += n_per_row;
-        qrow += nblock*sizeof(block_iq2_s);
-    }
-    return nrow * nblock * sizeof(block_iq2_s);
-}
-
-void quantize_row_iq2_s_reference(const float * restrict x, block_iq2_s * restrict y, int64_t k) {
-    assert(k % QK_K == 0);
-    quantize_iq2_s(x, y, 1, k, NULL);
-}
-
-void quantize_row_iq2_s(const float * restrict x, void * restrict vy, int64_t k) {
-    assert(k % QK_K == 0);
-    block_iq2_s * restrict y = vy;
-    quantize_row_iq2_s_reference(x, y, k);
-}
-
-static bool validate_float(float f, size_t i) {
-    if (isinf(f)) {
-        fprintf(stderr, "ggml_validate_row_data: found inf value at block %zu\n", i);
-        return false;
-    }
-
-    if (isnan(f)) {
-        fprintf(stderr, "ggml_validate_row_data: found nan value at block %zu\n", i);
-        return false;
-    }
-
-    return true;
-}
-
-static bool isinf_fp16(ggml_fp16_t f) {
-    return (f & 0x7c00) == 0x7c00 && (f & 0x03ff) == 0;
-}
-
-static bool isnan_fp16(ggml_fp16_t f) {
-    return (f & 0x7c00) == 0x7c00 && (f & 0x03ff) != 0;
-}
-
-static bool validate_fp16(ggml_fp16_t f, size_t i) {
-    if (isinf_fp16(f)) {
-        fprintf(stderr, "ggml_validate_row_data: found inf value at block %zu\n", i);
-        return false;
-    }
-
-    if (isnan_fp16(f)) {
-        fprintf(stderr, "ggml_validate_row_data: found nan value at block %zu\n", i);
-        return false;
-    }
-
-    return true;
-}
-
-#define VALIDATE_ROW_DATA_D_F16_IMPL(type, data, nb) \
-    const type * q = (const type *) (data); \
-    for (size_t i = 0; i < (nb); ++i) { \
-        if (!validate_fp16(q[i].d, i)) { \
-            return false; \
-        } \
-    }
-
-#define VALIDATE_ROW_DATA_DM_F16_IMPL(type, data, nb, d, m) \
-    const type * q = (const type *) (data); \
-    for (size_t i = 0; i < (nb); ++i) { \
-        if (!validate_fp16(q[i].d, i) || !validate_fp16(q[i].m, i)) { \
-            return false; \
-        } \
-    }
-
-bool ggml_validate_row_data(enum ggml_type type, const void * data, size_t nbytes) {
-    if (type < 0 || type >= GGML_TYPE_COUNT) {
-        fprintf(stderr, "%s: invalid type %d\n", __func__, type);
-        return false;
-    }
-
-    if (nbytes % ggml_type_size(type) != 0) {
-        fprintf(stderr, "%s: invalid size %zu for type %d\n", __func__, nbytes, type);
-        return false;
-    }
-
-    const size_t nb = nbytes/ggml_type_size(type);
-
-    switch (type) {
-        case GGML_TYPE_BF16:
-            {
-                int nans = 0;
-                int infs = 0;
-                const unsigned short * f = (const unsigned short *) data;
-                for (size_t i = 0; i < nb; ++i) {
-                    nans += (f[i] & 0x7fff) > 0x7f80;
-                    infs += (f[i] & 0x7fff) == 0x7f80;
-                }
-                if (nans) {
-                    fprintf(stderr, "%s: found %d NaNs in row of %zu BF16 values\n", __func__, nans, nb);
-                    return false;
-                }
-                if (infs) {
-                    fprintf(stderr, "%s: found %d infinities in row of %zu BF16 values\n", __func__, infs, nb);
-                    return false;
-                }
-            } break;
-        case GGML_TYPE_F16:
-            {
-                const ggml_fp16_t * f = (const ggml_fp16_t *) data;
-                size_t i = 0;
-#if defined(__AVX2__)
-                for (; i + 15 < nb; i += 16) {
-                    __m256i v = _mm256_loadu_si256((const __m256i *)(f + i));
-                    __m256i vexp = _mm256_and_si256(v, _mm256_set1_epi16(0x7c00));
-                    __m256i cmp = _mm256_cmpeq_epi16(vexp, _mm256_set1_epi16(0x7c00));
-                    int mask = _mm256_movemask_epi8(cmp);
-                    if (mask) {
-                        for (size_t j = 0; j < 16; ++j) {
-                            if (!validate_fp16(f[i + j], i + j)) {
-                                return false;
-                            }
-                        }
-                        GGML_UNREACHABLE();
-                    }
-                }
-#elif defined(__ARM_NEON)
-                for (; i + 7 < nb; i += 8) {
-                    uint16x8_t v = vld1q_u16(f + i);
-                    uint16x8_t vexp = vandq_u16(v, vdupq_n_u16(0x7c00));
-                    uint16x8_t cmp = vceqq_u16(vexp, vdupq_n_u16(0x7c00));
-                    uint64_t mask = vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(cmp, 4)), 0);
-                    if (mask) {
-                        for (size_t j = 0; j < 8; ++j) {
-                            if (!validate_fp16(f[i + j], i + j)) {
-                                return false;
-                            }
-                        }
-                        GGML_UNREACHABLE();
-                    }
-                }
-#endif
-                for (; i < nb; ++i) {
-                    if (!validate_fp16(f[i], i)) {
-                        return false;
-                    }
-                }
-            } break;
-        case GGML_TYPE_F32:
-            {
-                const float * f = (const float *) data;
-                size_t i = 0;
-#if defined(__AVX2__)
-                for (; i + 7 < nb; i += 8) {
-                    __m256i v = _mm256_loadu_si256((const __m256i *)(f + i));
-                    __m256i vexp = _mm256_and_si256(v, _mm256_set1_epi32(0x7f800000));
-                    __m256i cmp = _mm256_cmpeq_epi32(vexp, _mm256_set1_epi32(0x7f800000));
-                    int mask = _mm256_movemask_epi8(cmp);
-                    if (mask) {
-                        for (size_t j = 0; j < 8; ++j) {
-                            if (!validate_float(f[i + j], i + j)) {
-                                return false;
-                            }
-                        }
-                        GGML_UNREACHABLE();
-                    }
-                }
-#elif defined(__ARM_NEON)
-                for (; i + 3 < nb; i += 4) {
-                    uint32x4_t v = vld1q_u32((const uint32_t *)f + i);
-                    uint32x4_t vexp = vandq_u32(v, vdupq_n_u32(0x7f800000));
-                    uint32x4_t cmp = vceqq_u32(vexp, vdupq_n_u32(0x7f800000));
-                    uint64_t mask = vget_lane_u64(vreinterpret_u64_u16(vshrn_n_u32(cmp, 8)), 0);
-                    if (mask) {
-                        for (size_t j = 0; j < 4; ++j) {
-                            if (!validate_float(f[i + j], i + j)) {
-                                return false;
-                            }
-                        }
-                        GGML_UNREACHABLE();
-                    }
-                }
-#endif
-                for (; i < nb; ++i) {
-                    if (!validate_float(f[i], i)) {
-                        return false;
-                    }
-                }
-            } break;
-        case GGML_TYPE_F64:
-            {
-                const double * f = (const double *) data;
-                for (size_t i = 0; i < nb; ++i) {
-                    if (!validate_float(f[i], i)) {
-                        return false;
-                    }
-                }
-            } break;
-        case GGML_TYPE_Q4_0:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_q4_0, data, nb);
-            } break;
-        case GGML_TYPE_Q4_1:
-            {
-                VALIDATE_ROW_DATA_DM_F16_IMPL(block_q4_1, data, nb, d, m);
-            } break;
-        case GGML_TYPE_Q5_0:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_q5_0, data, nb);
-            } break;
-        case GGML_TYPE_Q5_1:
-            {
-                VALIDATE_ROW_DATA_DM_F16_IMPL(block_q5_1, data, nb, d, m);
-            } break;
-        case GGML_TYPE_Q8_0:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_q8_0, data, nb);
-            } break;
-        case GGML_TYPE_Q2_K:
-            {
-                VALIDATE_ROW_DATA_DM_F16_IMPL(block_q2_K, data, nb, d, dmin);
-            } break;
-        case GGML_TYPE_Q3_K:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_q3_K, data, nb);
-            } break;
-        case GGML_TYPE_Q4_K:
-            {
-                VALIDATE_ROW_DATA_DM_F16_IMPL(block_q4_K, data, nb, d, dmin);
-            } break;
-        case GGML_TYPE_Q5_K:
-            {
-                VALIDATE_ROW_DATA_DM_F16_IMPL(block_q5_K, data, nb, d, dmin);
-            } break;
-        case GGML_TYPE_Q6_K:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_q6_K, data, nb);
-            } break;
-        case GGML_TYPE_Q8_K:
-            {
-                const block_q8_K * q = (const block_q8_K *) data;
-                for (size_t i = 0; i < nb; ++i) {
-                    if (!validate_float(q[i].d, i)) {
-                        return false;
-                    }
-                }
-            } break;
-        case GGML_TYPE_IQ1_S:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq1_s, data, nb);
-            } break;
-        case GGML_TYPE_IQ1_M:
-            {
-                const block_iq1_m * q = (const block_iq1_m *) data;
-                for (size_t i = 0; i < nb; ++i) {
-                    iq1m_scale_t scale;
-                    const uint16_t * sc = (const uint16_t *)q[i].scales;
-                    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-                    if (!validate_fp16(scale.f16, i)) {
-                        return false;
-                    }
-                }
-            } break;
-        case GGML_TYPE_IQ2_XXS:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq2_xxs, data, nb);
-            } break;
-        case GGML_TYPE_IQ2_XS:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq2_xs, data, nb);
-            } break;
-        case GGML_TYPE_IQ2_S:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq2_s, data, nb);
-            } break;
-        case GGML_TYPE_IQ3_XXS:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq3_xxs, data, nb);
-            } break;
-
-        case GGML_TYPE_IQ3_S:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq3_s, data, nb);
-            } break;
-        case GGML_TYPE_IQ4_XS:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq4_xs, data, nb);
-            } break;
-        case GGML_TYPE_IQ4_NL:
-            {
-                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq4_nl, data, nb);
-            } break;
-        case GGML_TYPE_I8:
-        case GGML_TYPE_I16:
-        case GGML_TYPE_I32:
-        case GGML_TYPE_I64:
-            // nothing to validate
-            break;
-        default:
-            {
-                fprintf(stderr, "%s: invalid type %d\n", __func__, type);
-                return false;
-            }
-    }
-
-    return true;
-}
diff --git a/ggml-quants.h b/ggml-quants.h
deleted file mode 100644 (file)
index 4d436a8..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-#pragma once
-
-#define GGML_COMMON_DECL_C
-#include "ggml-common.h"
-
-#include "ggml.h"
-
-// GGML internal header
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Quantization
-void quantize_row_q4_0_reference(const float * GGML_RESTRICT x, block_q4_0 * GGML_RESTRICT y, int64_t k);
-void quantize_row_q4_1_reference(const float * GGML_RESTRICT x, block_q4_1 * GGML_RESTRICT y, int64_t k);
-void quantize_row_q5_0_reference(const float * GGML_RESTRICT x, block_q5_0 * GGML_RESTRICT y, int64_t k);
-void quantize_row_q5_1_reference(const float * GGML_RESTRICT x, block_q5_1 * GGML_RESTRICT y, int64_t k);
-void quantize_row_q8_0_reference(const float * GGML_RESTRICT x, block_q8_0 * GGML_RESTRICT y, int64_t k);
-void quantize_row_q8_1_reference(const float * GGML_RESTRICT x, block_q8_1 * GGML_RESTRICT y, int64_t k);
-
-void quantize_row_q2_K_reference(const float * GGML_RESTRICT x, block_q2_K * GGML_RESTRICT y, int64_t k);
-void quantize_row_q3_K_reference(const float * GGML_RESTRICT x, block_q3_K * GGML_RESTRICT y, int64_t k);
-void quantize_row_q4_K_reference(const float * GGML_RESTRICT x, block_q4_K * GGML_RESTRICT y, int64_t k);
-void quantize_row_q5_K_reference(const float * GGML_RESTRICT x, block_q5_K * GGML_RESTRICT y, int64_t k);
-void quantize_row_q6_K_reference(const float * GGML_RESTRICT x, block_q6_K * GGML_RESTRICT y, int64_t k);
-void quantize_row_q8_K_reference(const float * GGML_RESTRICT x, block_q8_K * GGML_RESTRICT y, int64_t k);
-
-void quantize_row_iq3_xxs_reference(const float * GGML_RESTRICT x, block_iq3_xxs * GGML_RESTRICT y, int64_t k);
-void quantize_row_iq4_nl_reference (const float * GGML_RESTRICT x, block_iq4_nl  * GGML_RESTRICT y, int64_t k);
-void quantize_row_iq4_xs_reference (const float * GGML_RESTRICT x, block_iq4_xs  * GGML_RESTRICT y, int64_t k);
-void quantize_row_iq3_s_reference  (const float * GGML_RESTRICT x, block_iq3_s   * GGML_RESTRICT y, int64_t k);
-void quantize_row_iq2_s_reference  (const float * GGML_RESTRICT x, block_iq2_s   * GGML_RESTRICT y, int64_t k);
-
-void quantize_row_q4_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_q4_1(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_q5_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_q5_1(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_q8_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_q8_1(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-
-void quantize_row_q2_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_q3_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_q4_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_q5_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_q6_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_q8_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-
-void quantize_row_iq3_xxs(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_iq4_nl (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_iq4_xs (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_iq3_s  (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-void quantize_row_iq2_s  (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
-
-// Dequantization
-void dequantize_row_q4_0(const block_q4_0 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_q4_1(const block_q4_1 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_q5_0(const block_q5_0 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_q5_1(const block_q5_1 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_q8_0(const block_q8_0 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-//void dequantize_row_q8_1(const block_q8_1 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-
-void dequantize_row_q2_K(const block_q2_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_q3_K(const block_q3_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_q4_K(const block_q4_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_q5_K(const block_q5_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_q6_K(const block_q6_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_q8_K(const block_q8_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-
-void dequantize_row_iq2_xxs(const block_iq2_xxs * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_iq2_xs (const block_iq2_xs  * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_iq2_s  (const block_iq2_s   * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_iq3_xxs(const block_iq3_xxs * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_iq1_s  (const block_iq1_s   * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_iq1_m  (const block_iq1_m   * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_iq4_nl (const block_iq4_nl  * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_iq4_xs (const block_iq4_xs  * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-void dequantize_row_iq3_s  (const block_iq3_s   * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-
-// Dot product
-void ggml_vec_dot_q4_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_q4_1_q8_1(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_q5_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_q5_1_q8_1(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_q8_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-
-void ggml_vec_dot_q2_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_q4_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_q5_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-
-void ggml_vec_dot_iq2_xxs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_iq2_xs_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_iq2_s_q8_K  (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_iq3_xxs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_iq1_s_q8_K  (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_iq1_m_q8_K  (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_iq4_nl_q8_0 (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_iq4_xs_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-void ggml_vec_dot_iq3_s_q8_K  (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
-
-// Quantization utilizing an importance matrix (a.k.a. "Activation aWare Quantization")
-size_t quantize_iq2_xxs(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_iq2_xs (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_iq2_s  (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_iq3_xxs(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_iq1_s  (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_iq1_m  (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_iq4_nl (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_iq4_xs (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_iq3_s  (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-
-size_t quantize_q2_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_q3_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_q4_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_q5_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_q6_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_q4_0(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_q4_1(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_q5_0(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_q5_1(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-size_t quantize_q8_0(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
-
-void iq2xs_init_impl(enum ggml_type type);
-void iq2xs_free_impl(enum ggml_type type);
-void iq3xs_init_impl(int grid_size);
-void iq3xs_free_impl(int grid_size);
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/ggml-rpc.cpp b/ggml-rpc.cpp
deleted file mode 100644 (file)
index 22d9524..0000000
+++ /dev/null
@@ -1,1173 +0,0 @@
-#include "ggml-rpc.h"
-#include "ggml.h"
-#include "ggml-backend-impl.h"
-
-#include <cinttypes>
-#include <string>
-#include <vector>
-#include <memory>
-#include <mutex>
-#include <unordered_map>
-#include <unordered_set>
-#ifdef _WIN32
-#  define WIN32_LEAN_AND_MEAN
-#  ifndef NOMINMAX
-#     define NOMINMAX
-#  endif
-#  include <windows.h>
-#  include <winsock2.h>
-#else
-#  include <arpa/inet.h>
-#  include <sys/socket.h>
-#  include <sys/types.h>
-#  include <netinet/in.h>
-#  include <netinet/tcp.h>
-#  include <netdb.h>
-#  include <unistd.h>
-#endif
-#include <string.h>
-
-#define UNUSED GGML_UNUSED
-
-#define GGML_DEBUG 0
-#if (GGML_DEBUG >= 1)
-#define GGML_PRINT_DEBUG(...) printf(__VA_ARGS__)
-#else
-#define GGML_PRINT_DEBUG(...)
-#endif
-
-#ifdef _WIN32
-typedef SOCKET sockfd_t;
-using ssize_t = __int64;
-#else
-typedef int sockfd_t;
-#endif
-
-// cross-platform socket
-struct socket_t {
-    sockfd_t fd;
-    socket_t(sockfd_t fd) : fd(fd) {}
-    ~socket_t() {
-        GGML_PRINT_DEBUG("[%s] closing socket %d\n", __func__, this->fd);
-#ifdef _WIN32
-        closesocket(this->fd);
-#else
-        close(this->fd);
-#endif
-    }
-};
-
-// ggml_tensor is serialized into rpc_tensor
-#pragma pack(push, 1)
-struct rpc_tensor {
-    uint64_t id;
-    uint32_t type;
-    uint64_t buffer;
-    uint32_t ne[GGML_MAX_DIMS];
-    uint32_t nb[GGML_MAX_DIMS];
-    uint32_t op;
-    int32_t  op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)];
-    int32_t  flags;
-    uint64_t src[GGML_MAX_SRC];
-    uint64_t view_src;
-    uint64_t view_offs;
-    uint64_t data;
-    char name[GGML_MAX_NAME];
-};
-#pragma pack(pop)
-
-// RPC commands
-enum rpc_cmd {
-    ALLOC_BUFFER = 0,
-    GET_ALIGNMENT,
-    GET_MAX_SIZE,
-    BUFFER_GET_BASE,
-    FREE_BUFFER,
-    BUFFER_CLEAR,
-    SET_TENSOR,
-    GET_TENSOR,
-    COPY_TENSOR,
-    GRAPH_COMPUTE,
-    GET_DEVICE_MEMORY,
-};
-
-// RPC data structures
-
-static ggml_guid_t ggml_backend_rpc_guid() {
-    static ggml_guid guid = {0x99, 0x68, 0x5b, 0x6c, 0xd2, 0x83, 0x3d, 0x24, 0x25, 0x36, 0x72, 0xe1, 0x5b, 0x0e, 0x14, 0x03};
-    return &guid;
-}
-
-struct ggml_backend_rpc_buffer_type_context {
-    std::string endpoint;
-    std::string name;
-    size_t alignment;
-    size_t max_size;
-};
-
-struct ggml_backend_rpc_context {
-    std::string endpoint;
-    std::string name;
-};
-
-struct ggml_backend_rpc_buffer_context {
-    std::shared_ptr<socket_t> sock;
-    std::unordered_map<ggml_backend_buffer_t, void *> base_cache;
-    uint64_t remote_ptr;
-    std::string name;
-};
-
-// RPC helper functions
-
-static std::shared_ptr<socket_t> make_socket(sockfd_t fd) {
-#ifdef _WIN32
-    if (fd == INVALID_SOCKET) {
-        return nullptr;
-    }
-#else
-    if (fd < 0) {
-        return nullptr;
-    }
-#endif
-    return std::make_shared<socket_t>(fd);
-}
-
-static bool set_no_delay(sockfd_t sockfd) {
-    int flag = 1;
-    // set TCP_NODELAY to disable Nagle's algorithm
-    int ret = setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int));
-    return ret == 0;
-}
-
-static bool set_reuse_addr(sockfd_t sockfd) {
-    int flag = 1;
-    int ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof(int));
-    return ret == 0;
-}
-
-static std::shared_ptr<socket_t> socket_connect(const char * host, int port) {
-    struct sockaddr_in addr;
-    auto sockfd = socket(AF_INET, SOCK_STREAM, 0);
-    auto sock_ptr = make_socket(sockfd);
-    if (sock_ptr == nullptr) {
-        return nullptr;
-    }
-    if (!set_no_delay(sockfd)) {
-        fprintf(stderr, "Failed to set TCP_NODELAY\n");
-        return nullptr;
-    }
-    addr.sin_family = AF_INET;
-    addr.sin_port = htons(port);
-    struct hostent * server = gethostbyname(host);
-    if (server == NULL) {
-        fprintf(stderr, "Cannot resolve host '%s'\n", host);
-        return nullptr;
-    }
-    memcpy(&addr.sin_addr.s_addr, server->h_addr, server->h_length);
-    if (connect(sock_ptr->fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
-        return nullptr;
-    }
-    return sock_ptr;
-}
-
-static std::shared_ptr<socket_t> socket_accept(sockfd_t srv_sockfd) {
-    auto client_socket_fd = accept(srv_sockfd, NULL, NULL);
-    auto client_socket = make_socket(client_socket_fd);
-    if (client_socket == nullptr) {
-        return nullptr;
-    }
-    if (!set_no_delay(client_socket_fd)) {
-        fprintf(stderr, "Failed to set TCP_NODELAY\n");
-        return nullptr;
-    }
-    return client_socket;
-}
-
-static std::shared_ptr<socket_t> create_server_socket(const char * host, int port) {
-    auto sockfd = socket(AF_INET, SOCK_STREAM, 0);
-    auto sock = make_socket(sockfd);
-    if (sock == nullptr) {
-        return nullptr;
-    }
-    if (!set_reuse_addr(sockfd)) {
-        fprintf(stderr, "Failed to set SO_REUSEADDR\n");
-        return nullptr;
-    }
-    struct sockaddr_in serv_addr;
-    serv_addr.sin_family = AF_INET;
-    serv_addr.sin_addr.s_addr = inet_addr(host);
-    serv_addr.sin_port = htons(port);
-
-    if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
-        return nullptr;
-    }
-    if (listen(sockfd, 1) < 0) {
-        return nullptr;
-    }
-    return sock;
-}
-
-static bool send_data(sockfd_t sockfd, const void * data, size_t size) {
-    size_t bytes_sent = 0;
-    while (bytes_sent < size) {
-        ssize_t n = send(sockfd, (const char *)data + bytes_sent, size - bytes_sent, 0);
-        if (n < 0) {
-            return false;
-        }
-        bytes_sent += n;
-    }
-    return true;
-}
-
-static bool recv_data(sockfd_t sockfd, void * data, size_t size) {
-    size_t bytes_recv = 0;
-    while (bytes_recv < size) {
-        ssize_t n = recv(sockfd, (char *)data + bytes_recv, size - bytes_recv, 0);
-        if (n <= 0) {
-            return false;
-        }
-        bytes_recv += n;
-    }
-    return true;
-}
-
-static bool parse_endpoint(const std::string & endpoint, std::string & host, int & port) {
-    size_t pos = endpoint.find(':');
-    if (pos == std::string::npos) {
-        return false;
-    }
-    host = endpoint.substr(0, pos);
-    port = std::stoi(endpoint.substr(pos + 1));
-    return true;
-}
-
-// RPC request : | rpc_cmd (1 byte) | request_size (8 bytes) | request_data (request_size bytes) |
-// RPC response: | response_size (8 bytes) | response_data (response_size bytes) |
-static bool send_rpc_cmd(const std::shared_ptr<socket_t> & sock, enum rpc_cmd cmd, const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
-    uint8_t cmd_byte = cmd;
-    if (!send_data(sock->fd, &cmd_byte, sizeof(cmd_byte))) {
-        return false;
-    }
-    uint64_t input_size = input.size();
-    if (!send_data(sock->fd, &input_size, sizeof(input_size))) {
-        return false;
-    }
-    if (!send_data(sock->fd, input.data(), input.size())) {
-        return false;
-    }
-    uint64_t output_size;
-    if (!recv_data(sock->fd, &output_size, sizeof(output_size))) {
-        return false;
-    }
-    if (output_size == 0) {
-        output.clear();
-        return true;
-    }
-    output.resize(output_size);
-    if (!recv_data(sock->fd, output.data(), output_size)) {
-        return false;
-    }
-    return true;
-}
-
-// RPC client-side implementation
-
-static std::shared_ptr<socket_t> get_socket(const std::string & endpoint) {
-    static std::mutex mutex;
-    std::lock_guard<std::mutex> lock(mutex);
-    static std::unordered_map<std::string, std::weak_ptr<socket_t>> sockets;
-    static bool initialized = false;
-
-    auto it = sockets.find(endpoint);
-    if (it != sockets.end()) {
-        if (auto sock = it->second.lock()) {
-            return sock;
-        }
-    }
-    std::string host;
-    int port;
-    if (!parse_endpoint(endpoint, host, port)) {
-        return nullptr;
-    }
-#ifdef _WIN32
-    if (!initialized) {
-        WSADATA wsaData;
-        int res = WSAStartup(MAKEWORD(2, 2), &wsaData);
-        if (res != 0) {
-            return nullptr;
-        }
-        initialized = true;
-    }
-#else
-    UNUSED(initialized);
-#endif
-    auto sock = socket_connect(host.c_str(), port);
-    if (sock == nullptr) {
-        return nullptr;
-    }
-    GGML_PRINT_DEBUG("[%s] connected to %s, sockfd=%d\n", __func__, endpoint.c_str(), sock->fd);
-    sockets[endpoint] = sock;
-    return sock;
-}
-
-GGML_CALL static const char * ggml_backend_rpc_buffer_get_name(ggml_backend_buffer_t buffer) {
-    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
-    return ctx->name.c_str();
-}
-
-GGML_CALL static void ggml_backend_rpc_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
-    // input serialization format: | remote_ptr (8 bytes) |
-    std::vector<uint8_t> input(sizeof(uint64_t), 0);
-    uint64_t remote_ptr = ctx->remote_ptr;
-    memcpy(input.data(), &remote_ptr, sizeof(remote_ptr));
-    std::vector<uint8_t> output;
-    bool status = send_rpc_cmd(ctx->sock, FREE_BUFFER, input, output);
-    GGML_ASSERT(status);
-    GGML_ASSERT(output.empty());
-    delete ctx;
-}
-
-GGML_CALL static void * ggml_backend_rpc_buffer_get_base(ggml_backend_buffer_t buffer) {
-    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
-    if (ctx->base_cache.find(buffer) != ctx->base_cache.end()) {
-        return ctx->base_cache[buffer];
-    }
-    // input serialization format: | remote_ptr (8 bytes) |
-    std::vector<uint8_t> input(sizeof(uint64_t), 0);
-    uint64_t remote_ptr = ctx->remote_ptr;
-    memcpy(input.data(), &remote_ptr, sizeof(remote_ptr));
-    std::vector<uint8_t> output;
-    bool status = send_rpc_cmd(ctx->sock, BUFFER_GET_BASE, input, output);
-    GGML_ASSERT(status);
-    GGML_ASSERT(output.size() == sizeof(uint64_t));
-    // output serialization format: | base_ptr (8 bytes) |
-    uint64_t base_ptr;
-    memcpy(&base_ptr, output.data(), sizeof(base_ptr));
-    void * base = reinterpret_cast<void *>(base_ptr);
-    ctx->base_cache[buffer] = base;
-    return base;
-}
-
-static rpc_tensor serialize_tensor(const ggml_tensor * tensor) {
-    rpc_tensor result;
-    result.id = reinterpret_cast<uint64_t>(tensor);
-    result.type = tensor->type;
-    if (tensor->buffer) {
-        ggml_backend_buffer_t buffer = tensor->buffer;
-        ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
-        result.buffer = ctx->remote_ptr;
-    } else {
-        result.buffer = 0;
-    }
-    for (uint32_t i = 0; i < GGML_MAX_DIMS; i++) {
-        result.ne[i] = tensor->ne[i];
-        result.nb[i] = tensor->nb[i];
-    }
-    result.op = tensor->op;
-    for (uint32_t i = 0; i < GGML_MAX_OP_PARAMS / sizeof(int32_t); i++) {
-        result.op_params[i] = tensor->op_params[i];
-    }
-    result.flags = tensor->flags;
-    for (uint32_t i = 0; i < GGML_MAX_SRC; i++) {
-        result.src[i] = reinterpret_cast<uint64_t>(tensor->src[i]);
-    }
-    result.view_src = reinterpret_cast<uint64_t>(tensor->view_src);
-    result.view_offs = tensor->view_offs;
-    result.data = reinterpret_cast<uint64_t>(tensor->data);
-    snprintf(result.name, GGML_MAX_NAME, "%s", tensor->name);
-    return result;
-}
-
-GGML_CALL static void ggml_backend_rpc_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
-    UNUSED(buffer);
-    if (ggml_is_quantized(tensor->type)) {
-        // TODO: this check is due to MATRIX_ROW_PADDING in CUDA and should be generalized
-        GGML_ASSERT(tensor->ne[0] % 512 == 0 && "unsupported quantized tensor");
-    }
-}
-
-GGML_CALL static void ggml_backend_rpc_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
-    // input serialization format: | rpc_tensor | offset (8 bytes) | data (size bytes) |
-    size_t input_size = sizeof(rpc_tensor) + sizeof(uint64_t) + size;
-    std::vector<uint8_t> input(input_size, 0);
-    rpc_tensor rpc_tensor = serialize_tensor(tensor);
-    memcpy(input.data(), &rpc_tensor, sizeof(rpc_tensor));
-    memcpy(input.data() + sizeof(rpc_tensor), &offset, sizeof(offset));
-    memcpy(input.data() + sizeof(rpc_tensor) + sizeof(offset), data, size);
-    std::vector<uint8_t> output;
-    bool status = send_rpc_cmd(ctx->sock, SET_TENSOR, input, output);
-    GGML_ASSERT(status);
-}
-
-GGML_CALL static void ggml_backend_rpc_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
-    // input serialization format: | rpc_tensor | offset (8 bytes) | size (8 bytes) |
-    int input_size = sizeof(rpc_tensor) + 2*sizeof(uint64_t);
-    std::vector<uint8_t> input(input_size, 0);
-    rpc_tensor rpc_tensor = serialize_tensor(tensor);
-    memcpy(input.data(), &rpc_tensor, sizeof(rpc_tensor));
-    memcpy(input.data() + sizeof(rpc_tensor), &offset, sizeof(offset));
-    memcpy(input.data() + sizeof(rpc_tensor) + sizeof(offset), &size, sizeof(size));
-    std::vector<uint8_t> output;
-    bool status = send_rpc_cmd(ctx->sock, GET_TENSOR, input, output);
-    GGML_ASSERT(status);
-    GGML_ASSERT(output.size() == size);
-    // output serialization format: | data (size bytes) |
-    memcpy(data, output.data(), size);
-}
-
-GGML_CALL static bool ggml_backend_rpc_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * src, ggml_tensor * dst) {
-    // check if src and dst are on the same server
-    ggml_backend_buffer_t src_buffer = src->buffer;
-    ggml_backend_rpc_buffer_context * src_ctx = (ggml_backend_rpc_buffer_context *)src_buffer->context;
-    ggml_backend_buffer_t dst_buffer = dst->buffer;
-    ggml_backend_rpc_buffer_context * dst_ctx = (ggml_backend_rpc_buffer_context *)dst_buffer->context;
-    if (src_ctx->sock != dst_ctx->sock) {
-        return false;
-    }
-    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
-    // input serialization format: | rpc_tensor src | rpc_tensor dst |
-    int input_size = 2*sizeof(rpc_tensor);
-    std::vector<uint8_t> input(input_size, 0);
-    rpc_tensor rpc_src = serialize_tensor(src);
-    rpc_tensor rpc_dst = serialize_tensor(dst);
-    memcpy(input.data(), &rpc_src, sizeof(rpc_src));
-    memcpy(input.data() + sizeof(rpc_src), &rpc_dst, sizeof(rpc_dst));
-    std::vector<uint8_t> output;
-    bool status = send_rpc_cmd(ctx->sock, COPY_TENSOR, input, output);
-    GGML_ASSERT(status);
-    // output serialization format: | result (1 byte) |
-    GGML_ASSERT(output.size() == 1);
-    return output[0];
-}
-
-GGML_CALL static void ggml_backend_rpc_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
-    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
-    // serialization format: | bufptr (8 bytes) | value (1 byte) |
-    int input_size = sizeof(uint64_t) + sizeof(uint8_t);
-    std::vector<uint8_t> input(input_size, 0);
-    memcpy(input.data(), &ctx->remote_ptr, sizeof(ctx->remote_ptr));
-    memcpy(input.data() + sizeof(ctx->remote_ptr), &value, sizeof(value));
-    std::vector<uint8_t> output;
-    bool status = send_rpc_cmd(ctx->sock, BUFFER_CLEAR, input, output);
-    GGML_ASSERT(status);
-}
-
-static ggml_backend_buffer_i ggml_backend_rpc_buffer_interface = {
-    /* .get_name        = */ ggml_backend_rpc_buffer_get_name,
-    /* .free_buffer     = */ ggml_backend_rpc_buffer_free_buffer,
-    /* .get_base        = */ ggml_backend_rpc_buffer_get_base,
-    /* .init_tensor     = */ ggml_backend_rpc_buffer_init_tensor,
-    /* .set_tensor      = */ ggml_backend_rpc_buffer_set_tensor,
-    /* .get_tensor      = */ ggml_backend_rpc_buffer_get_tensor,
-    /* .cpy_tensor      = */ ggml_backend_rpc_buffer_cpy_tensor,
-    /* .clear           = */ ggml_backend_rpc_buffer_clear,
-    /* .reset           = */ NULL,
-};
-
-GGML_CALL static const char * ggml_backend_rpc_buffer_type_name(ggml_backend_buffer_type_t buft) {
-    ggml_backend_rpc_buffer_type_context * buft_ctx = (ggml_backend_rpc_buffer_type_context *)buft->context;
-    return buft_ctx->name.c_str();
-}
-
-GGML_CALL static ggml_backend_buffer_t ggml_backend_rpc_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    ggml_backend_rpc_buffer_type_context * buft_ctx = (ggml_backend_rpc_buffer_type_context *)buft->context;
-    // input serialization format: | size (8 bytes) |
-    int input_size = sizeof(uint64_t);
-    std::vector<uint8_t> input(input_size, 0);
-    memcpy(input.data(), &size, sizeof(size));
-    std::vector<uint8_t> output;
-    auto sock = get_socket(buft_ctx->endpoint);
-    bool status = send_rpc_cmd(sock, ALLOC_BUFFER, input, output);
-    GGML_ASSERT(status);
-    GGML_ASSERT(output.size() == 2*sizeof(uint64_t));
-    // output serialization format: | remote_ptr (8 bytes) | remote_size (8 bytes) |
-    uint64_t remote_ptr;
-    memcpy(&remote_ptr, output.data(), sizeof(remote_ptr));
-    size_t remote_size;
-    memcpy(&remote_size, output.data() + sizeof(uint64_t), sizeof(remote_size));
-    if (remote_ptr != 0) {
-        ggml_backend_buffer_t buffer = ggml_backend_buffer_init(buft,
-            ggml_backend_rpc_buffer_interface,
-            new ggml_backend_rpc_buffer_context{sock, {}, remote_ptr, "RPC[" + std::string(buft_ctx->endpoint) + "]"},
-            remote_size);
-        return buffer;
-    } else {
-        return nullptr;
-    }
-}
-
-static size_t get_alignment(const std::shared_ptr<socket_t> & sock) {
-    // input serialization format: | 0 bytes |
-    std::vector<uint8_t> input;
-    std::vector<uint8_t> output;
-    bool status = send_rpc_cmd(sock, GET_ALIGNMENT, input, output);
-    GGML_ASSERT(status);
-    GGML_ASSERT(output.size() == sizeof(uint64_t));
-    // output serialization format: | alignment (8 bytes) |
-    uint64_t alignment;
-    memcpy(&alignment, output.data(), sizeof(alignment));
-    return alignment;
-}
-
-GGML_CALL static size_t ggml_backend_rpc_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
-    ggml_backend_rpc_buffer_type_context * buft_ctx = (ggml_backend_rpc_buffer_type_context *)buft->context;
-    return buft_ctx->alignment;
-}
-
-static size_t get_max_size(const std::shared_ptr<socket_t> & sock) {
-    // input serialization format: | 0 bytes |
-    std::vector<uint8_t> input;
-    std::vector<uint8_t> output;
-    bool status = send_rpc_cmd(sock, GET_MAX_SIZE, input, output);
-    GGML_ASSERT(status);
-    GGML_ASSERT(output.size() == sizeof(uint64_t));
-    // output serialization format: | max_size (8 bytes) |
-    uint64_t max_size;
-    memcpy(&max_size, output.data(), sizeof(max_size));
-    return max_size;
-}
-
-GGML_CALL static size_t ggml_backend_rpc_get_max_size(ggml_backend_buffer_type_t buft) {
-    ggml_backend_rpc_buffer_type_context * buft_ctx = (ggml_backend_rpc_buffer_type_context *)buft->context;
-    return buft_ctx->max_size;
-}
-
-GGML_CALL static size_t ggml_backend_rpc_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
-    UNUSED(buft);
-    return ggml_nbytes(tensor);
-}
-
-static ggml_backend_buffer_type_i ggml_backend_rpc_buffer_type_interface = {
-    /* .get_name         = */ ggml_backend_rpc_buffer_type_name,
-    /* .alloc_buffer     = */ ggml_backend_rpc_buffer_type_alloc_buffer,
-    /* .get_alignment    = */ ggml_backend_rpc_buffer_type_get_alignment,
-    /* .get_max_size     = */ ggml_backend_rpc_get_max_size,
-    /* .get_alloc_size   = */ ggml_backend_rpc_buffer_type_get_alloc_size,
-    /* .is_host          = */ NULL,
-};
-
-GGML_CALL static const char * ggml_backend_rpc_name(ggml_backend_t backend) {
-    ggml_backend_rpc_context * rpc_ctx = (ggml_backend_rpc_context *)backend->context;
-
-    return rpc_ctx->name.c_str();
-}
-
-GGML_CALL static void ggml_backend_rpc_free(ggml_backend_t backend) {
-    ggml_backend_rpc_context * rpc_ctx = (ggml_backend_rpc_context *)backend->context;
-    delete rpc_ctx;
-    delete backend;
-}
-
-GGML_CALL static ggml_backend_buffer_type_t ggml_backend_rpc_get_default_buffer_type(ggml_backend_t backend) {
-    ggml_backend_rpc_context * ctx = (ggml_backend_rpc_context *)backend->context;
-    return ggml_backend_rpc_buffer_type(ctx->endpoint.c_str());
-}
-
-GGML_CALL static void ggml_backend_rpc_synchronize(ggml_backend_t backend) {
-    UNUSED(backend);
-    // this is no-op because we don't have any async operations
-}
-
-static void add_tensor(ggml_tensor * tensor, std::vector<rpc_tensor> & tensors, std::unordered_set<ggml_tensor*> & visited) {
-    if (tensor == nullptr) {
-        return;
-    }
-    if (visited.find(tensor) != visited.end()) {
-        return;
-    }
-    visited.insert(tensor);
-    for (int i = 0; i < GGML_MAX_SRC; i++) {
-        add_tensor(tensor->src[i], tensors, visited);
-    }
-    add_tensor(tensor->view_src, tensors, visited);
-    tensors.push_back(serialize_tensor(tensor));
-}
-
-static void serialize_graph(const ggml_cgraph * cgraph, std::vector<uint8_t> & output) {
-    uint32_t n_nodes = cgraph->n_nodes;
-    std::vector<rpc_tensor> tensors;
-    std::unordered_set<ggml_tensor*> visited;
-    for (uint32_t i = 0; i < n_nodes; i++) {
-        add_tensor(cgraph->nodes[i], tensors, visited);
-    }
-    // serialization format:
-    // | n_nodes (4 bytes) | nodes (n_nodes * sizeof(uint64_t) | n_tensors (4 bytes) | tensors (n_tensors * sizeof(rpc_tensor)) |
-    uint32_t n_tensors = tensors.size();
-    int output_size = sizeof(uint32_t) + n_nodes * sizeof(uint64_t) + sizeof(uint32_t) + n_tensors * sizeof(rpc_tensor);
-    output.resize(output_size, 0);
-    memcpy(output.data(), &n_nodes, sizeof(n_nodes));
-    uint64_t * out_nodes = (uint64_t *)(output.data() + sizeof(n_nodes));
-    for (uint32_t i = 0; i < n_nodes; i++) {
-        out_nodes[i] = reinterpret_cast<uint64_t>(cgraph->nodes[i]);
-    }
-    uint32_t * out_ntensors = (uint32_t *)(output.data() + sizeof(n_nodes) + n_nodes * sizeof(uint64_t));
-    *out_ntensors = n_tensors;
-    rpc_tensor * out_tensors = (rpc_tensor *)(output.data() + sizeof(n_nodes) + n_nodes * sizeof(uint64_t) + sizeof(uint32_t));
-    memcpy(out_tensors, tensors.data(), n_tensors * sizeof(rpc_tensor));
-}
-
-GGML_CALL static enum ggml_status ggml_backend_rpc_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
-    ggml_backend_rpc_context * rpc_ctx = (ggml_backend_rpc_context *)backend->context;
-    std::vector<uint8_t> input;
-    serialize_graph(cgraph, input);
-    std::vector<uint8_t> output;
-    auto sock = get_socket(rpc_ctx->endpoint);
-    bool status = send_rpc_cmd(sock, GRAPH_COMPUTE, input, output);
-    GGML_ASSERT(status);
-    GGML_ASSERT(output.size() == 1);
-    return (enum ggml_status)output[0];
-}
-
-GGML_CALL static bool ggml_backend_rpc_supports_op(ggml_backend_t backend, const ggml_tensor * op) {
-    UNUSED(backend);
-    UNUSED(op);
-    //TODO: call the remote backend and cache the results
-    return true;
-}
-
-GGML_CALL static bool ggml_backend_rpc_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
-    if (buft->iface.get_name != ggml_backend_rpc_buffer_type_name) {
-        return false;
-    }
-    ggml_backend_rpc_buffer_type_context * buft_ctx = (ggml_backend_rpc_buffer_type_context *)buft->context;
-    ggml_backend_rpc_context * rpc_ctx = (ggml_backend_rpc_context *)backend->context;
-    return buft_ctx->endpoint == rpc_ctx->endpoint;
-}
-
-static ggml_backend_i ggml_backend_rpc_interface = {
-    /* .get_name                = */ ggml_backend_rpc_name,
-    /* .free                    = */ ggml_backend_rpc_free,
-    /* .get_default_buffer_type = */ ggml_backend_rpc_get_default_buffer_type,
-    /* .set_tensor_async        = */ NULL,
-    /* .get_tensor_async        = */ NULL,
-    /* .cpy_tensor_async        = */ NULL,
-    /* .synchronize             = */ ggml_backend_rpc_synchronize,
-    /* .graph_plan_create       = */ NULL,
-    /* .graph_plan_free         = */ NULL,
-    /* .graph_plan_update       = */ NULL,
-    /* .graph_plan_compute      = */ NULL,
-    /* .graph_compute           = */ ggml_backend_rpc_graph_compute,
-    /* .supports_op             = */ ggml_backend_rpc_supports_op,
-    /* .supports_buft           = */ ggml_backend_rpc_supports_buft,
-    /* .offload_op              = */ NULL,
-    /* .event_new               = */ NULL,
-    /* .event_free              = */ NULL,
-    /* .event_record            = */ NULL,
-    /* .event_wait              = */ NULL,
-    /* .event_synchronize       = */ NULL,
-};
-
-GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_rpc_buffer_type(const char * endpoint) {
-    static std::mutex mutex;
-    std::lock_guard<std::mutex> lock(mutex);
-    // NOTE: buffer types are allocated and never freed; this is by design
-    static std::unordered_map<std::string, ggml_backend_buffer_type_t> buft_map;
-    auto it = buft_map.find(endpoint);
-    if (it != buft_map.end()) {
-        return it->second;
-    }
-    auto sock = get_socket(endpoint);
-    if (sock == nullptr) {
-        return nullptr;
-    }
-    size_t alignment = get_alignment(sock);
-    size_t max_size = get_max_size(sock);
-    ggml_backend_rpc_buffer_type_context * buft_ctx = new ggml_backend_rpc_buffer_type_context {
-        /* .endpoint  = */ endpoint,
-        /* .name      = */ "RPC[" + std::string(endpoint) + "]",
-        /* .alignment = */ alignment,
-        /* .max_size  = */ max_size
-    };
-
-    ggml_backend_buffer_type_t buft = new ggml_backend_buffer_type {
-        /* .iface   = */ ggml_backend_rpc_buffer_type_interface,
-        /* .context = */ buft_ctx
-    };
-    buft_map[endpoint] = buft;
-    return buft;
-}
-
-GGML_CALL ggml_backend_t ggml_backend_rpc_init(const char * endpoint) {
-    ggml_backend_rpc_context * ctx = new ggml_backend_rpc_context {
-        /* .endpoint  = */ endpoint,
-        /* .name      = */ "RPC[" + std::string(endpoint) + "]",
-    };
-
-    ggml_backend_t backend = new ggml_backend {
-        /* .guid      = */ ggml_backend_rpc_guid(),
-        /* .interface = */ ggml_backend_rpc_interface,
-        /* .context   = */ ctx
-    };
-    return backend;
-}
-
-GGML_API GGML_CALL bool ggml_backend_is_rpc(ggml_backend_t backend) {
-    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_rpc_guid());
-}
-
-static void get_device_memory(const std::shared_ptr<socket_t> & sock, size_t * free, size_t * total) {
-    // input serialization format: | 0 bytes |
-    std::vector<uint8_t> input;
-    std::vector<uint8_t> output;
-    bool status = send_rpc_cmd(sock, GET_DEVICE_MEMORY, input, output);
-    GGML_ASSERT(status);
-    GGML_ASSERT(output.size() == 2*sizeof(uint64_t));
-    // output serialization format: | free (8 bytes) | total (8 bytes) |
-    uint64_t free_mem;
-    memcpy(&free_mem, output.data(), sizeof(free_mem));
-    uint64_t total_mem;
-    memcpy(&total_mem, output.data() + sizeof(uint64_t), sizeof(total_mem));
-    *free = free_mem;
-    *total = total_mem;
-}
-
-GGML_API GGML_CALL void ggml_backend_rpc_get_device_memory(const char * endpoint, size_t * free, size_t * total) {
-    auto sock = get_socket(endpoint);
-    if (sock == nullptr) {
-        *free = 0;
-        *total = 0;
-        return;
-    }
-    get_device_memory(sock, free, total);
-}
-
-// RPC server-side implementation
-
-class rpc_server {
-public:
-    rpc_server(ggml_backend_t backend) : backend(backend) {}
-    ~rpc_server();
-
-    bool alloc_buffer(const std::vector<uint8_t> & input, std::vector<uint8_t> & output);
-    void get_alignment(std::vector<uint8_t> & output);
-    void get_max_size(std::vector<uint8_t> & output);
-    bool buffer_get_base(const std::vector<uint8_t> & input, std::vector<uint8_t> & output);
-    bool free_buffer(const std::vector<uint8_t> & input);
-    bool buffer_clear(const std::vector<uint8_t> & input);
-    bool set_tensor(const std::vector<uint8_t> & input);
-    bool get_tensor(const std::vector<uint8_t> & input, std::vector<uint8_t> & output);
-    bool copy_tensor(const std::vector<uint8_t> & input, std::vector<uint8_t> & output);
-    bool graph_compute(const std::vector<uint8_t> & input, std::vector<uint8_t> & output);
-
-private:
-    ggml_tensor * deserialize_tensor(struct ggml_context * ctx, const rpc_tensor * tensor);
-    ggml_tensor * create_node(uint64_t id,
-                              struct ggml_context * ctx,
-                              const std::unordered_map<uint64_t, const rpc_tensor*> & tensor_ptrs,
-                              std::unordered_map<uint64_t, struct ggml_tensor*> & tensor_map);
-
-
-    ggml_backend_t backend;
-    std::unordered_set<ggml_backend_buffer_t> buffers;
-};
-
-bool rpc_server::alloc_buffer(const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
-    // input serialization format: | size (8 bytes) |
-    if (input.size() != sizeof(uint64_t)) {
-        return false;
-    }
-    uint64_t size;
-    memcpy(&size, input.data(), sizeof(size));
-    ggml_backend_buffer_type_t buft = ggml_backend_get_default_buffer_type(backend);
-    ggml_backend_buffer_t buffer = ggml_backend_buft_alloc_buffer(buft, size);
-    uint64_t remote_ptr = 0;
-    uint64_t remote_size = 0;
-    if (buffer != nullptr) {
-        remote_ptr = reinterpret_cast<uint64_t>(buffer);
-        remote_size = buffer->size;
-        GGML_PRINT_DEBUG("[%s] size: %" PRIu64 " -> remote_ptr: %" PRIx64 ", remote_size: %" PRIu64 "\n", __func__, size, remote_ptr, remote_size);
-        buffers.insert(buffer);
-    } else {
-        GGML_PRINT_DEBUG("[%s] size: %" PRIu64 " -> failed\n", __func__, size);
-    }
-    // output serialization format: | remote_ptr (8 bytes) | remote_size (8 bytes) |
-    output.resize(2*sizeof(uint64_t), 0);
-    memcpy(output.data(), &remote_ptr, sizeof(remote_ptr));
-    memcpy(output.data() + sizeof(uint64_t), &remote_size, sizeof(remote_size));
-    return true;
-}
-
-void rpc_server::get_alignment(std::vector<uint8_t> & output) {
-    ggml_backend_buffer_type_t buft = ggml_backend_get_default_buffer_type(backend);
-    size_t alignment = ggml_backend_buft_get_alignment(buft);
-    GGML_PRINT_DEBUG("[%s] alignment: %lu\n", __func__, alignment);
-    // output serialization format: | alignment (8 bytes) |
-    output.resize(sizeof(uint64_t), 0);
-    memcpy(output.data(), &alignment, sizeof(alignment));
-}
-
-void rpc_server::get_max_size(std::vector<uint8_t> & output) {
-    ggml_backend_buffer_type_t buft = ggml_backend_get_default_buffer_type(backend);
-    size_t max_size = ggml_backend_buft_get_max_size(buft);
-    GGML_PRINT_DEBUG("[%s] max_size: %lu\n", __func__, max_size);
-    // output serialization format: | max_size (8 bytes) |
-    output.resize(sizeof(uint64_t), 0);
-    memcpy(output.data(), &max_size, sizeof(max_size));
-}
-
-bool rpc_server::buffer_get_base(const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
-    // input serialization format: | remote_ptr (8 bytes) |
-    if (input.size() != sizeof(uint64_t)) {
-        return false;
-    }
-    uint64_t remote_ptr;
-    memcpy(&remote_ptr, input.data(), sizeof(remote_ptr));
-    GGML_PRINT_DEBUG("[%s] remote_ptr: %" PRIx64 "\n", __func__, remote_ptr);
-    ggml_backend_buffer_t buffer = reinterpret_cast<ggml_backend_buffer_t>(remote_ptr);
-    if (buffers.find(buffer) == buffers.end()) {
-        GGML_PRINT_DEBUG("[%s] buffer not found\n", __func__);
-        return false;
-    }
-    void * base = ggml_backend_buffer_get_base(buffer);
-    // output serialization format: | base_ptr (8 bytes) |
-    uint64_t base_ptr = reinterpret_cast<uint64_t>(base);
-    output.resize(sizeof(uint64_t), 0);
-    memcpy(output.data(), &base_ptr, sizeof(base_ptr));
-    return true;
-}
-
-bool rpc_server::free_buffer(const std::vector<uint8_t> & input) {
-    // input serialization format: | remote_ptr (8 bytes) |
-    if (input.size() != sizeof(uint64_t)) {
-        return false;
-    }
-    uint64_t remote_ptr;
-    memcpy(&remote_ptr, input.data(), sizeof(remote_ptr));
-    GGML_PRINT_DEBUG("[%s] remote_ptr: %" PRIx64 "\n", __func__, remote_ptr);
-    ggml_backend_buffer_t buffer = reinterpret_cast<ggml_backend_buffer_t>(remote_ptr);
-    if (buffers.find(buffer) == buffers.end()) {
-        GGML_PRINT_DEBUG("[%s] buffer not found\n", __func__);
-        return false;
-    }
-    ggml_backend_buffer_free(buffer);
-    buffers.erase(buffer);
-    return true;
-}
-
-bool rpc_server::buffer_clear(const std::vector<uint8_t> & input) {
-    // input serialization format: | remote_ptr (8 bytes) | value (1 byte) |
-    if (input.size() != sizeof(uint64_t) + sizeof(uint8_t)) {
-        return false;
-    }
-    uint64_t remote_ptr;
-    memcpy(&remote_ptr, input.data(), sizeof(remote_ptr));
-    uint8_t value;
-    memcpy(&value, input.data() + sizeof(uint64_t), sizeof(value));
-    GGML_PRINT_DEBUG("[%s] remote_ptr: %" PRIx64 ", value: %u\n", __func__, remote_ptr, value);
-    ggml_backend_buffer_t buffer = reinterpret_cast<ggml_backend_buffer_t>(remote_ptr);
-    if (buffers.find(buffer) == buffers.end()) {
-        GGML_PRINT_DEBUG("[%s] buffer not found\n", __func__);
-        return false;
-    }
-    ggml_backend_buffer_clear(buffer, value);
-    return true;
-}
-
-ggml_tensor * rpc_server::deserialize_tensor(struct ggml_context * ctx, const rpc_tensor * tensor) {
-    ggml_tensor * result = ggml_new_tensor_4d(ctx, (ggml_type) tensor->type,
-        tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]);
-    for (uint32_t i = 0; i < GGML_MAX_DIMS; i++) {
-        result->nb[i] = tensor->nb[i];
-    }
-    result->buffer = reinterpret_cast<ggml_backend_buffer_t>(tensor->buffer);
-    if (result->buffer && buffers.find(result->buffer) == buffers.end()) {
-        return nullptr;
-    }
-    result->op = (ggml_op) tensor->op;
-    for (uint32_t i = 0; i < GGML_MAX_OP_PARAMS / sizeof(int32_t); i++) {
-        result->op_params[i] = tensor->op_params[i];
-    }
-    result->flags = tensor->flags;
-    result->data = reinterpret_cast<void *>(tensor->data);
-    ggml_set_name(result, tensor->name);
-    return result;
-}
-
-
-bool rpc_server::set_tensor(const std::vector<uint8_t> & input) {
-    // serialization format: | rpc_tensor | offset (8 bytes) | data (size bytes) |
-    if (input.size() < sizeof(rpc_tensor) + sizeof(uint64_t)) {
-        return false;
-    }
-    const rpc_tensor * in_tensor = (const rpc_tensor *)input.data();
-    uint64_t offset;
-    memcpy(&offset, input.data() + sizeof(rpc_tensor), sizeof(offset));
-    size_t size = input.size() - sizeof(rpc_tensor) - sizeof(offset);
-
-    struct ggml_init_params params {
-        /*.mem_size   =*/ ggml_tensor_overhead(),
-        /*.mem_buffer =*/ NULL,
-        /*.no_alloc   =*/ true,
-    };
-    struct ggml_context * ctx = ggml_init(params);
-    ggml_tensor * tensor = deserialize_tensor(ctx, in_tensor);
-    if (tensor == nullptr) {
-        GGML_PRINT_DEBUG("[%s] error deserializing tensor\n", __func__);
-        ggml_free(ctx);
-        return false;
-    }
-    GGML_PRINT_DEBUG("[%s] buffer: %p, data: %p, offset: %" PRIu64 ", size: %zu\n", __func__, (void*)tensor->buffer, tensor->data, offset, size);
-    const void * data = input.data() + sizeof(rpc_tensor) + sizeof(offset);
-    ggml_backend_tensor_set(tensor, data, offset, size);
-    ggml_free(ctx);
-    return true;
-}
-
-bool rpc_server::get_tensor(const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
-    // serialization format: | rpc_tensor | offset (8 bytes) | size (8 bytes) |
-    if (input.size() != sizeof(rpc_tensor) + 2*sizeof(uint64_t)) {
-        return false;
-    }
-    const rpc_tensor * in_tensor = (const rpc_tensor *)input.data();
-    uint64_t offset;
-    memcpy(&offset, input.data() + sizeof(rpc_tensor), sizeof(offset));
-    uint64_t size;
-    memcpy(&size, input.data() + sizeof(rpc_tensor) + sizeof(offset), sizeof(size));
-
-    struct ggml_init_params params {
-        /*.mem_size   =*/ ggml_tensor_overhead(),
-        /*.mem_buffer =*/ NULL,
-        /*.no_alloc   =*/ true,
-    };
-    struct ggml_context * ctx = ggml_init(params);
-    ggml_tensor * tensor = deserialize_tensor(ctx, in_tensor);
-    if (tensor == nullptr) {
-        GGML_PRINT_DEBUG("[%s] error deserializing tensor\n", __func__);
-        ggml_free(ctx);
-        return false;
-    }
-    GGML_PRINT_DEBUG("[%s] buffer: %p, data: %p, offset: %" PRIu64 ", size: %" PRIu64 "\n", __func__, (void*)tensor->buffer, tensor->data, offset, size);
-    // output serialization format: | data (size bytes) |
-    output.resize(size, 0);
-    ggml_backend_tensor_get(tensor, output.data(), offset, size);
-    ggml_free(ctx);
-    return true;
-}
-
-bool rpc_server::copy_tensor(const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
-    // serialization format: | rpc_tensor src | rpc_tensor dst |
-    if (input.size() != 2*sizeof(rpc_tensor)) {
-        return false;
-    }
-    const rpc_tensor * rpc_src = (const rpc_tensor *)input.data();
-    const rpc_tensor * rpc_dst = (const rpc_tensor *)(input.data() + sizeof(rpc_src));
-
-    struct ggml_init_params params {
-        /*.mem_size   =*/ 2*ggml_tensor_overhead(),
-        /*.mem_buffer =*/ NULL,
-        /*.no_alloc   =*/ true,
-    };
-    struct ggml_context * ctx = ggml_init(params);
-    ggml_tensor * src = deserialize_tensor(ctx, rpc_src);
-    ggml_tensor * dst = deserialize_tensor(ctx, rpc_dst);
-    if (src == nullptr || dst == nullptr) {
-        GGML_PRINT_DEBUG("[%s] error deserializing tensors\n", __func__);
-        ggml_free(ctx);
-        return false;
-    }
-    GGML_PRINT_DEBUG("[%s] src->buffer: %p, dst->buffer: %p\n", __func__, (void*)src->buffer, (void*)dst->buffer);
-    bool result = ggml_backend_buffer_copy_tensor(src, dst);
-    // output serialization format: | result (1 byte) |
-    output.resize(1, 0);
-    output[0] = result;
-    ggml_free(ctx);
-    return true;
-}
-
-ggml_tensor * rpc_server::create_node(uint64_t id,
-                                      struct ggml_context * ctx,
-                                      const std::unordered_map<uint64_t, const rpc_tensor*> & tensor_ptrs,
-                                      std::unordered_map<uint64_t, struct ggml_tensor*> & tensor_map) {
-    if (id == 0) {
-        return nullptr;
-    }
-    if (tensor_map.find(id) != tensor_map.end()) {
-        return tensor_map[id];
-    }
-    const rpc_tensor * tensor = tensor_ptrs.at(id);
-    struct ggml_tensor * result = deserialize_tensor(ctx, tensor);
-    if (result == nullptr) {
-        return nullptr;
-    }
-    tensor_map[id] = result;
-    for (int i = 0; i < GGML_MAX_SRC; i++) {
-        result->src[i] = create_node(tensor->src[i], ctx, tensor_ptrs, tensor_map);
-    }
-    result->view_src = create_node(tensor->view_src, ctx, tensor_ptrs, tensor_map);
-    result->view_offs = tensor->view_offs;
-    return result;
-}
-
-bool rpc_server::graph_compute(const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
-    // serialization format:
-    // | n_nodes (4 bytes) | nodes (n_nodes * sizeof(uint64_t) | n_tensors (4 bytes) | tensors (n_tensors * sizeof(rpc_tensor)) |
-    if (input.size() < sizeof(uint32_t)) {
-        return false;
-    }
-    uint32_t n_nodes;
-    memcpy(&n_nodes, input.data(), sizeof(n_nodes));
-    if (input.size() < sizeof(uint32_t) + n_nodes*sizeof(uint64_t) + sizeof(uint32_t)) {
-        return false;
-    }
-    const uint64_t * nodes = (const uint64_t *)(input.data() + sizeof(n_nodes));
-    uint32_t n_tensors;
-    memcpy(&n_tensors, input.data() + sizeof(n_nodes) + n_nodes*sizeof(uint64_t), sizeof(n_tensors));
-    if (input.size() < sizeof(uint32_t) + n_nodes*sizeof(uint64_t) + sizeof(uint32_t) + n_tensors*sizeof(rpc_tensor)) {
-        return false;
-    }
-    const rpc_tensor * tensors = (const rpc_tensor *)(input.data() + sizeof(n_nodes) + n_nodes*sizeof(uint64_t) + sizeof(n_tensors));
-    GGML_PRINT_DEBUG("[%s] n_nodes: %u, n_tensors: %u\n", __func__, n_nodes, n_tensors);
-
-    static size_t buf_size = ggml_tensor_overhead()*(n_nodes + n_tensors) + ggml_graph_overhead_custom(n_nodes, false);
-    struct ggml_init_params params = {
-        /*.mem_size   =*/ buf_size,
-        /*.mem_buffer =*/ NULL,
-        /*.no_alloc   =*/ true,
-    };
-    struct ggml_context * ctx = ggml_init(params);
-    struct ggml_cgraph * graph = ggml_new_graph_custom(ctx, n_nodes, false);
-    graph->n_nodes = n_nodes;
-    std::unordered_map<uint64_t, const rpc_tensor*> tensor_ptrs;
-    for (uint32_t i = 0; i < n_tensors; i++) {
-        tensor_ptrs[tensors[i].id] = &tensors[i];
-    }
-    std::unordered_map<uint64_t, ggml_tensor*> tensor_map;
-    for (uint32_t i = 0; i < n_nodes; i++) {
-        graph->nodes[i] = create_node(nodes[i], ctx, tensor_ptrs, tensor_map);
-    }
-    ggml_status status = ggml_backend_graph_compute(backend, graph);
-    // output serialization format: | status (1 byte) |
-    output.resize(1, 0);
-    output[0] = status;
-    ggml_free(ctx);
-    return true;
-}
-
-rpc_server::~rpc_server() {
-    for (auto buffer : buffers) {
-        ggml_backend_buffer_free(buffer);
-    }
-}
-
-static void rpc_serve_client(ggml_backend_t backend, sockfd_t sockfd, size_t free_mem, size_t total_mem) {
-    rpc_server server(backend);
-    while (true) {
-        uint8_t cmd;
-        if (!recv_data(sockfd, &cmd, 1)) {
-            break;
-        }
-        std::vector<uint8_t> input;
-        std::vector<uint8_t> output;
-        uint64_t input_size;
-        if (!recv_data(sockfd, &input_size, sizeof(input_size))) {
-            break;
-        }
-        input.resize(input_size);
-        if (!recv_data(sockfd, input.data(), input_size)) {
-            break;
-        }
-        bool ok = true;
-        switch (cmd) {
-            case ALLOC_BUFFER: {
-                ok = server.alloc_buffer(input, output);
-                break;
-            }
-            case GET_ALIGNMENT: {
-                server.get_alignment(output);
-                break;
-            }
-            case GET_MAX_SIZE: {
-                server.get_max_size(output);
-                break;
-            }
-            case BUFFER_GET_BASE: {
-                ok = server.buffer_get_base(input, output);
-                break;
-            }
-            case FREE_BUFFER: {
-                ok = server.free_buffer(input);
-                break;
-            }
-            case BUFFER_CLEAR: {
-                ok = server.buffer_clear(input);
-                break;
-            }
-            case SET_TENSOR: {
-                ok = server.set_tensor(input);
-                break;
-            }
-            case GET_TENSOR: {
-                ok = server.get_tensor(input, output);
-                break;
-            }
-            case COPY_TENSOR: {
-                ok = server.copy_tensor(input, output);
-                break;
-            }
-            case GRAPH_COMPUTE: {
-                ok = server.graph_compute(input, output);
-                break;
-            }
-            case GET_DEVICE_MEMORY: {
-                // output serialization format: | free (8 bytes) | total (8 bytes) |
-                output.resize(2*sizeof(uint64_t), 0);
-                memcpy(output.data(), &free_mem, sizeof(free_mem));
-                memcpy(output.data() + sizeof(uint64_t), &total_mem, sizeof(total_mem));
-                break;
-            }
-            default: {
-                fprintf(stderr, "Unknown command: %d\n", cmd);
-                ok = false;
-            }
-        }
-        if (!ok) {
-            break;
-        }
-        uint64_t output_size = output.size();
-        if (!send_data(sockfd, &output_size, sizeof(output_size))) {
-            break;
-        }
-        if (!send_data(sockfd, output.data(), output_size)) {
-            break;
-        }
-    }
-}
-
-void start_rpc_server(ggml_backend_t backend, const char * endpoint, size_t free_mem, size_t total_mem) {
-    std::string host;
-    int port;
-    if (!parse_endpoint(endpoint, host, port)) {
-        return;
-    }
-#ifdef _WIN32
-    {
-        WSADATA wsaData;
-        int res = WSAStartup(MAKEWORD(2, 2), &wsaData);
-        if (res != 0) {
-            fprintf(stderr, "WSAStartup failed: %d\n", res);
-            return;
-        }
-    }
-#endif
-    auto server_socket = create_server_socket(host.c_str(), port);
-    if (server_socket == nullptr) {
-        fprintf(stderr, "Failed to create server socket\n");
-        return;
-    }
-    while (true) {
-        auto client_socket = socket_accept(server_socket->fd);
-        if (client_socket == nullptr) {
-            fprintf(stderr, "Failed to accept client connection\n");
-            return;
-        }
-        printf("Accepted client connection, free_mem=%zu, total_mem=%zu\n", free_mem, total_mem);
-        rpc_serve_client(backend, client_socket->fd, free_mem, total_mem);
-        printf("Client connection closed\n");
-    }
-#ifdef _WIN32
-    WSACleanup();
-#endif
-}
diff --git a/ggml-rpc.h b/ggml-rpc.h
deleted file mode 100644 (file)
index aa14483..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#pragma once
-
-#include "ggml.h"
-#include "ggml-backend.h"
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-#define GGML_RPC_MAX_SERVERS       16
-
-// backend API
-GGML_API GGML_CALL ggml_backend_t ggml_backend_rpc_init(const char * endpoint);
-GGML_API GGML_CALL bool ggml_backend_is_rpc(ggml_backend_t backend);
-
-GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_rpc_buffer_type(const char * endpoint);
-
-GGML_API GGML_CALL void ggml_backend_rpc_get_device_memory(const char * endpoint, size_t * free, size_t * total);
-
-GGML_API GGML_CALL void start_rpc_server(ggml_backend_t backend, const char * endpoint, size_t free_mem, size_t total_mem);
-
-#ifdef  __cplusplus
-}
-#endif
diff --git a/ggml-sycl.cpp b/ggml-sycl.cpp
deleted file mode 100644 (file)
index 6bd42b9..0000000
+++ /dev/null
@@ -1,13337 +0,0 @@
-//
-// MIT license
-// Copyright (C) 2024 Intel Corporation
-// SPDX-License-Identifier: MIT
-//
-
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-
-#include <algorithm>
-#include <assert.h>
-#include <atomic>
-#include <cinttypes>
-#include <cstddef>
-#include <cstdint>
-#include <cstdlib>
-#include <float.h>
-#include <limits>
-#include <stdint.h>
-#include <stdio.h>
-#include <vector>
-#include <cmath>
-#include <iostream>
-#include <fstream>
-#include <stdio.h>
-#include <stdlib.h>
-#include <regex>
-
-#include <sycl/sycl.hpp>
-#include <sycl/half_type.hpp>
-
-#include "ggml-sycl.h"
-#include "ggml.h"
-#include "ggml-backend-impl.h"
-
-#include "ggml-sycl/backend.hpp"
-
-/*
-Following definition copied from DPCT head files, which are used by ggml-sycl.cpp
-*/
-// COPY from DPCT head files
-#include <sycl/sycl.hpp>
-#include <oneapi/mkl.hpp>
-#include <map>
-
-#if defined(__linux__)
-#include <sys/mman.h>
-#elif defined(_WIN64)
-#ifndef NOMINMAX
-#define NOMINMAX
-#endif
-#include <windows.h>
-#else
-#error "Only support Windows and Linux."
-#endif
-
-#if defined(__linux__)
-#include <unistd.h>
-#include <sys/syscall.h>
-#endif
-#if defined(_WIN64)
-#ifndef NOMINMAX
-#define NOMINMAX
-#endif
-#include <windows.h>
-#endif
-
-#define DPCT_COMPATIBILITY_TEMP (900)
-
-#if defined(_MSC_VER)
-#define __dpct_align__(n) __declspec(align(n))
-#define __dpct_inline__ __forceinline
-#else
-#define __dpct_align__(n) __attribute__((aligned(n)))
-#define __dpct_inline__ __inline__ __attribute__((always_inline))
-#endif
-
-#if defined(_MSC_VER)
-#define __dpct_noinline__ __declspec(noinline)
-#else
-#define __dpct_noinline__ __attribute__((noinline))
-#endif
-
-bool   ggml_sycl_loaded(void);
-void   ggml_sycl_free_data(struct ggml_tensor * tensor);
-void   ggml_sycl_assign_buffers(struct ggml_tensor * tensor);
-void   ggml_sycl_assign_buffers_no_scratch(struct ggml_tensor * tensor);
-void   ggml_sycl_assign_buffers_force_inplace(struct ggml_tensor * tensor);
-void   ggml_sycl_assign_buffers_no_alloc(struct ggml_tensor * tensor);
-void   ggml_sycl_copy_to_device(struct ggml_tensor * tensor);
-void   ggml_sycl_set_main_device(int main_device);
-void   ggml_sycl_set_mul_mat_q(bool mul_mat_q);
-void   ggml_sycl_set_scratch_size(size_t scratch_size);
-void   ggml_sycl_free_scratch(void);
-void   ggml_sycl_get_device_description(int device, char * description, size_t description_size);
-bool   ggml_backend_is_sycl(ggml_backend_t backend);
-int    ggml_backend_sycl_get_device(ggml_backend_t backend);
-static bool ggml_backend_buffer_is_sycl_split(ggml_backend_buffer_t buffer);
-
-void dev2dev_memcpy(sycl::queue &q_dst, sycl::queue &q_src, void *ptr_dst,
-                    const void *ptr_src, size_t size) {
-    char *host_buf = (char *)malloc(size);
-    q_src.memcpy(host_buf, (const char *)ptr_src, size).wait();
-    q_dst.memcpy((char *)ptr_dst, host_buf, size).wait();
-    free(host_buf);
-}
-
-static __dpct_inline__ int get_int_from_int8(const int8_t *x8, const int &i32) {
-    const uint16_t * x16 = (const uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment
-
-    int x32 = 0;
-    x32 |= x16[0] <<  0;
-    x32 |= x16[1] << 16;
-
-    return x32;
-}
-
-static __dpct_inline__ int get_int_from_uint8(const uint8_t *x8,
-                                              const int &i32) {
-    const uint16_t * x16 = (const uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment
-
-    int x32 = 0;
-    x32 |= x16[0] <<  0;
-    x32 |= x16[1] << 16;
-
-    return x32;
-}
-
-static __dpct_inline__ int get_int_from_int8_aligned(const int8_t *x8,
-                                                     const int &i32) {
-    return *((const int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment
-}
-
-static __dpct_inline__ int get_int_from_uint8_aligned(const uint8_t *x8,
-                                                      const int &i32) {
-    return *((const int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment
-}
-
-template <typename T>
-using to_t_sycl_t = void (*)(const void *__restrict__ x, T *__restrict__ y,
-                             int k, queue_ptr stream);
-typedef to_t_sycl_t<float> to_fp32_sycl_t;
-typedef to_t_sycl_t<sycl::half> to_fp16_sycl_t;
-
-typedef void (*dequantize_kernel_t)(const void * vx, const int ib, const int iqs, dfloat2 & v);
-typedef void (*dot_kernel_k_t)(const void * __restrict__ vx, const int ib, const int iqs, const float * __restrict__ y, float & v);
-typedef void (*cpy_kernel_t)(const char * cx, char * cdst);
-typedef void (*ggml_sycl_func_t)(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst);
-typedef void (*ggml_sycl_op_mul_mat_t)(
-    ggml_backend_sycl_context & ctx,
-    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
-    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
-    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
-    const int64_t src1_ncols, const int64_t src1_padded_row_size,
-    const queue_ptr &stream);
-typedef void (*ggml_sycl_op_flatten_t)(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                       const ggml_tensor *src1,
-                                       ggml_tensor *dst, const float *src0_dd,
-                                       const float *src1_dd, float *dst_dd,
-                                       const queue_ptr &main_stream);
-
-typedef float (*vec_dot_q_sycl_t)(const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs);
-typedef void (*allocate_tiles_sycl_t)(int **x_ql, sycl::half2 **x_dm,
-                                      int **x_qh, int **x_sc);
-typedef void (*load_tiles_sycl_t)(const void *__restrict__ vx,
-                                  int *__restrict__ x_ql,
-                                  sycl::half2 *__restrict__ x_dm,
-                                  int *__restrict__ x_qh,
-                                  int *__restrict__ x_sc, const int &i_offset,
-                                  const int &i_max, const int &k,
-                                  const int &blocks_per_row);
-typedef float (*vec_dot_q_mul_mat_sycl_t)(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ms,
-    const int &i, const int &j, const int &k);
-
-static __dpct_inline__ float warp_reduce_sum(float x,
-                                             const sycl::nd_item<3> &item_ct1) {
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        /*
-        DPCT1096:98: The right-most dimension of the work-group used in the SYCL
-        kernel that calls this function may be less than "32". The function
-        "dpct::permute_sub_group_by_xor" may return an unexpected result on the
-        CPU device. Modify the size of the work-group to ensure that the value
-        of the right-most dimension is a multiple of "32".
-        */
-        x += dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), x, mask);
-    }
-    return x;
-}
-
-static __dpct_inline__ sycl::float2
-warp_reduce_sum(sycl::float2 a, const sycl::nd_item<3> &item_ct1) {
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        a.x() += dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), a.x(),
-                                                mask);
-        a.y() += dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), a.y(),
-                                                mask);
-    }
-    return a;
-}
-
-static __dpct_inline__ float warp_reduce_max(float x,
-                                             const sycl::nd_item<3> &item_ct1) {
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        /*
-        DPCT1096:97: The right-most dimension of the work-group used in the SYCL
-        kernel that calls this function may be less than "32". The function
-        "dpct::permute_sub_group_by_xor" may return an unexpected result on the
-        CPU device. Modify the size of the work-group to ensure that the value
-        of the right-most dimension is a multiple of "32".
-        */
-        x = sycl::fmax(x, dpct::permute_sub_group_by_xor(
-                              item_ct1.get_sub_group(), x, mask));
-    }
-    return x;
-}
-
-static __dpct_inline__ float op_repeat(const float a, const float b) {
-    return b;
-    GGML_UNUSED(a);
-}
-
-static __dpct_inline__ float op_add(const float a, const float b) {
-    return a + b;
-}
-
-static __dpct_inline__ float op_mul(const float a, const float b) {
-    return a * b;
-}
-
-static __dpct_inline__ float op_div(const float a, const float b) {
-    return a / b;
-}
-
-template<float (*bin_op)(const float, const float), typename src0_t, typename src1_t, typename dst_t>
-static void k_bin_bcast(const src0_t * src0, const src1_t * src1, dst_t * dst,
-        int ne0, int ne1, int ne2, int ne3,
-        int ne10, int ne11, int ne12, int ne13,
-        /*int s0, */ int s1,  int s2,  int s3,
-        /*int s10,*/ int s11, int s12, int s13,
-        const sycl::nd_item<3> &item_ct1) {
-    const int i0s = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                    item_ct1.get_local_id(2);
-    const int i1 = (item_ct1.get_local_range(1) * item_ct1.get_group(1) +
-                    item_ct1.get_local_id(1));
-    const int i2 = (item_ct1.get_local_range(0) * item_ct1.get_group(0) +
-                    item_ct1.get_local_id(0)) /
-                   ne3;
-    const int i3 = (item_ct1.get_local_range(0) * item_ct1.get_group(0) +
-                    item_ct1.get_local_id(0)) %
-                   ne3;
-
-    if (i0s >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) {
-        return;
-    }
-
-    const int i11 = i1 % ne11;
-    const int i12 = i2 % ne12;
-    const int i13 = i3 % ne13;
-
-    const size_t i_src0 = i3*s3 + i2*s2 + i1*s1;
-    const size_t i_src1 = i13*s13 + i12*s12 + i11*s11;
-    const size_t i_dst  = i_src0;
-
-    const src0_t * src0_row = src0 + i_src0;
-    const src1_t * src1_row = src1 + i_src1;
-    dst_t * dst_row = dst + i_dst;
-
-    for (int i0 = i0s; i0 < ne0;
-         i0 += item_ct1.get_local_range(2) * item_ct1.get_group_range(2)) {
-        const int i10 = i0 % ne10;
-        dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]);
-    }
-}
-
-template<float (*bin_op)(const float, const float), typename src0_t, typename src1_t, typename dst_t>
-static void k_bin_bcast_unravel(const src0_t * src0, const src1_t * src1, dst_t * dst,
-        int ne0, int ne1, int ne2, int ne3,
-        int ne10, int ne11, int ne12, int ne13,
-        /*int s0, */ int s1,  int s2,  int s3,
-        /*int s10,*/ int s11, int s12, int s13,
-        const sycl::nd_item<3> &item_ct1) {
-
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    const int i3 = i/(ne2*ne1*ne0);
-    const int i2 = (i/(ne1*ne0)) % ne2;
-    const int i1 = (i/ne0) % ne1;
-    const int i0 = i % ne0;
-
-    if (i0 >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) {
-        return;
-    }
-
-    const int i11 = i1 % ne11;
-    const int i12 = i2 % ne12;
-    const int i13 = i3 % ne13;
-
-    const size_t i_src0 = i3*s3 + i2*s2 + i1*s1;
-    const size_t i_src1 = i13*s13 + i12*s12 + i11*s11;
-    const size_t i_dst  = i_src0;
-
-    const src0_t * src0_row = src0 + i_src0;
-    const src1_t * src1_row = src1 + i_src1;
-    dst_t * dst_row = dst + i_dst;
-
-    const int i10 = i0 % ne10;
-    dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]);
-}
-
-static void acc_f32(const float * x, const float * y, float * dst, const int ne,
-    const int ne10, const int ne11, const int ne12,
-    const int nb1, const int nb2, int offset, const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-    if (i >= ne) {
-        return;
-    }
-    int src1_idx = i - offset;
-    int oz = src1_idx / nb2;
-    int oy = (src1_idx - (oz * nb2)) / nb1;
-    int ox = src1_idx % nb1;
-    if (src1_idx >= 0 && ox < ne10 && oy < ne11 && oz < ne12) {
-        dst[i] = x[i] + y[ox + oy * ne10 + oz * ne10 * ne11];
-    } else {
-        dst[i] = x[i];
-    }
-}
-
-static void gelu_f32(const float * x, float * dst, const int k,
-                     const sycl::nd_item<3> &item_ct1) {
-    const float GELU_COEF_A    = 0.044715f;
-    const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f;
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    if (i >= k) {
-        return;
-    }
-
-    float xi = x[i];
-    dst[i] = 0.5f * xi *
-             (1.0f +
-              sycl::tanh(SQRT_2_OVER_PI * xi * (1.0f + GELU_COEF_A * xi * xi)));
-}
-
-static void silu_f32(const float * x, float * dst, const int k,
-                     const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = x[i] / (1.0f + sycl::native::exp(-x[i]));
-}
-
-static void gelu_quick_f32(const float *x, float *dst, int k,
-                           const sycl::nd_item<3> &item_ct1) {
-    const float GELU_QUICK_COEF = -1.702f;
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-    if (i >= k) {
-        return;
-    }
-    dst[i] = x[i] * (1.0f / (1.0f + sycl::native::exp(GELU_QUICK_COEF * x[i])));
-}
-
-static void tanh_f32(const float *x, float *dst, int k,
-                     const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-    if (i >= k) {
-        return;
-    }
-    dst[i] = sycl::tanh((float)(x[i]));
-}
-
-static void relu_f32(const float * x, float * dst, const int k,
-                     const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = sycl::fmax((float)(x[i]), (float)0);
-}
-
-static void hardsigmoid_f32(const float * x, float * dst, const int k,
-                            const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = sycl::fmin(1.0f, sycl::fmax(0.0f, (x[i] + 3.0f) / 6.0f));
-}
-
-static void hardswish_f32(const float * x, float * dst, const int k,
-                          const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = x[i] * sycl::fmin(1.0f, sycl::fmax(0.0f, (x[i] + 3.0f) / 6.0f));
-}
-
-static void leaky_relu_f32(const float *x, float *dst, const int k, const float negative_slope,
-                           const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-    if (i >= k) {
-        return;
-    }
-    dst[i] = sycl::fmax((float)(x[i]), (float)0) +
-             sycl::fmin((float)(x[i]), 0.0f) * negative_slope;
-}
-
-static void sqr_f32(const float * x, float * dst, const int k,
-                    const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    if (i >= k) {
-        return;
-    }
-    dst[i] = x[i] * x[i];
-}
-
-static void norm_f32(const float * x, float * dst, const int ncols, const float eps,
-                     const sycl::nd_item<3> &item_ct1, sycl::float2 *s_sum, int block_size) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-    const int tid = item_ct1.get_local_id(2);
-
-    sycl::float2 mean_var = sycl::float2(0.f, 0.f);
-
-    for (int col = tid; col < ncols; col += block_size) {
-        const float xi = x[row*ncols + col];
-        mean_var.x() += xi;
-        mean_var.y() += xi * xi;
-    }
-
-    // sum up partial sums
-    mean_var = warp_reduce_sum(mean_var, item_ct1);
-    if (block_size > WARP_SIZE) {
-
-        int warp_id = item_ct1.get_local_id(2) / WARP_SIZE;
-        int lane_id = item_ct1.get_local_id(2) % WARP_SIZE;
-        if (lane_id == 0) {
-            s_sum[warp_id] = mean_var;
-        }
-        /*
-        DPCT1118:0: SYCL group functions and algorithms must be encountered in
-        converged control flow. You may need to adjust the code.
-        */
-        item_ct1.barrier(sycl::access::fence_space::local_space);
-        mean_var = s_sum[lane_id];
-        mean_var = warp_reduce_sum(mean_var, item_ct1);
-    }
-
-    const float mean = mean_var.x() / ncols;
-    const float var = mean_var.y() / ncols - mean * mean;
-    const float inv_std = sycl::rsqrt(var + eps);
-
-    for (int col = tid; col < ncols; col += block_size) {
-        dst[row*ncols + col] = (x[row*ncols + col] - mean) * inv_std;
-    }
-}
-
-static void concat_f32(const float  *x,const float  *y, float *dst, const int ne0, const int ne02,
-                       const sycl::nd_item<3> &item_ct1) {
-    int nidx = item_ct1.get_local_id(2) +
-               item_ct1.get_group(2) * item_ct1.get_local_range(2);
-    if (nidx >= ne0) {
-        return;
-    }
-    // operation
-    int offset_dst = nidx + item_ct1.get_group(1) * ne0 +
-                     item_ct1.get_group(0) * ne0 * item_ct1.get_group_range(1);
-    if (item_ct1.get_group(0) < ne02) { // src0
-        int offset_src =
-            nidx + item_ct1.get_group(1) * ne0 +
-            item_ct1.get_group(0) * ne0 * item_ct1.get_group_range(1);
-            dst[offset_dst] = x[offset_src];
-    } else {
-        int offset_src =
-            nidx + item_ct1.get_group(1) * ne0 +
-            (item_ct1.get_group(0) - ne02) * ne0 * item_ct1.get_group_range(1);
-            dst[offset_dst] = y[offset_src];
-    }
-}
-
-static void upscale_f32(const float  *x, float *dst, const int nb00, const int nb01,
-                        const int nb02, const int nb03, const int ne10, const int ne11,
-                        const int ne12, const int ne13, const float sf0, const float sf1,
-                        const float sf2, const float sf3, const sycl::nd_item<1> &item_ct1) {
-    int index = item_ct1.get_local_id(0) +
-               item_ct1.get_group(0) * item_ct1.get_local_range(0);
-    if (index >= ne10 * ne11 * ne12 * ne13) {
-        return;
-    }
-    // operation
-    int i10 = index % ne10;
-    int i11 = (index / ne10) % ne11;
-    int i12 = (index / (ne10 * ne11)) % ne12;
-    int i13 = (index / (ne10 * ne11 * ne12)) % ne13;
-
-    int i00 = i10 / sf0;
-    int i01 = i11 / sf1;
-    int i02 = i12 / sf2;
-    int i03 = i13 / sf3;
-
-    dst[index] = *(float *)((char *)x + i03 * nb03 + i02 * nb02 + i01 * nb01 + i00 * nb00);
-}
-
-static void pad_f32(const float  *x, float *dst, const int ne0, const int ne00, const int ne01, const int ne02,
-                    const sycl::nd_item<3> &item_ct1) {
-    int nidx = item_ct1.get_local_id(2) +
-               item_ct1.get_group(2) * item_ct1.get_local_range(2);
-    if (nidx >= ne0) {
-        return;
-    }
-
-    // operation
-    int offset_dst = nidx + item_ct1.get_group(1) * ne0 +
-                     item_ct1.get_group(0) * ne0 * item_ct1.get_group_range(1);
-    if (nidx < ne00 && item_ct1.get_group(1) < ne01 &&
-        item_ct1.get_group(0) < ne02) {
-        int offset_src = nidx + item_ct1.get_group(1) * ne00 +
-                         item_ct1.get_group(0) * ne00 * ne01;
-            dst[offset_dst] = x[offset_src];
-    } else {
-        dst[offset_dst] = 0.0f;
-    }
-}
-
-static void group_norm_f32(const float * x, float * dst, const int group_size, const int ne_elements, const float eps,
-                           const sycl::nd_item<3> &item_ct1, float *s_sum, int block_size) {
-    int start = item_ct1.get_group(2) * group_size;
-    int end = start + group_size;
-
-    start += item_ct1.get_local_id(2);
-
-    if (end >= ne_elements) {
-        end = ne_elements;
-    }
-
-    float tmp = 0.0f; // partial sum for thread in warp
-
-    for (int j = start; j < end; j += block_size) {
-        tmp += x[j];
-    }
-
-    tmp = warp_reduce_sum(tmp, item_ct1);
-    if (block_size > WARP_SIZE) {
-
-        int warp_id = item_ct1.get_local_id(2) / WARP_SIZE;
-        int lane_id = item_ct1.get_local_id(2) % WARP_SIZE;
-        if (lane_id == 0) {
-            s_sum[warp_id] = tmp;
-        }
-        /*
-        DPCT1118:1: SYCL group functions and algorithms must be encountered in
-        converged control flow. You may need to adjust the code.
-        */
-        /*
-        DPCT1065:54: Consider replacing sycl::nd_item::barrier() with
-        sycl::nd_item::barrier(sycl::access::fence_space::local_space) for
-        better performance if there is no access to global memory.
-        */
-        item_ct1.barrier();
-        tmp = s_sum[lane_id];
-        tmp = warp_reduce_sum(tmp, item_ct1);
-    }
-
-    float mean = tmp / group_size;
-    tmp = 0.0f;
-
-    for (int j = start; j < end; j += block_size) {
-        float xi = x[j] - mean;
-        dst[j] = xi;
-        tmp += xi * xi;
-    }
-
-    tmp = warp_reduce_sum(tmp, item_ct1);
-    if (block_size > WARP_SIZE) {
-
-        int warp_id = item_ct1.get_local_id(2) / WARP_SIZE;
-        int lane_id = item_ct1.get_local_id(2) % WARP_SIZE;
-        if (lane_id == 0) {
-            s_sum[warp_id] = tmp;
-        }
-        /*
-        DPCT1118:2: SYCL group functions and algorithms must be encountered in
-        converged control flow. You may need to adjust the code.
-        */
-        /*
-        DPCT1065:55: Consider replacing sycl::nd_item::barrier() with
-        sycl::nd_item::barrier(sycl::access::fence_space::local_space) for
-        better performance if there is no access to global memory.
-        */
-        item_ct1.barrier();
-        tmp = s_sum[lane_id];
-        tmp = warp_reduce_sum(tmp, item_ct1);
-    }
-
-    float variance = tmp / group_size;
-    float scale = sycl::rsqrt(variance + eps);
-    for (int j = start; j < end; j += block_size) {
-        dst[j] *= scale;
-    }
-}
-
-static void rms_norm_f32(const float * x, float * dst, const int ncols, const float eps,
-                         const sycl::nd_item<3> &item_ct1, float *s_sum, int block_size) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-    const int tid = item_ct1.get_local_id(2);
-
-    float tmp = 0.0f; // partial sum for thread in warp
-
-    for (int col = tid; col < ncols; col += block_size) {
-        const float xi = x[row*ncols + col];
-        tmp += xi * xi;
-    }
-
-    // sum up partial sums
-    tmp = warp_reduce_sum(tmp, item_ct1);
-    if (block_size > WARP_SIZE) {
-
-        int warp_id = item_ct1.get_local_id(2) / WARP_SIZE;
-        int lane_id = item_ct1.get_local_id(2) % WARP_SIZE;
-        if (lane_id == 0) {
-            s_sum[warp_id] = tmp;
-        }
-        /*
-        DPCT1118:3: SYCL group functions and algorithms must be encountered in
-        converged control flow. You may need to adjust the code.
-        */
-        item_ct1.barrier(sycl::access::fence_space::local_space);
-        tmp = s_sum[lane_id];
-        tmp = warp_reduce_sum(tmp, item_ct1);
-    }
-
-    const float mean = tmp / ncols;
-    const float scale = sycl::rsqrt(mean + eps);
-
-    for (int col = tid; col < ncols; col += block_size) {
-        dst[row*ncols + col] = scale * x[row*ncols + col];
-    }
-}
-
-static __dpct_inline__ void dequantize_q4_0(const void *vx, const int ib,
-                                            const int iqs, dfloat2 &v) {
-    const block_q4_0 * x = (const block_q4_0 *) vx;
-
-    const dfloat d = x[ib].d;
-
-    const int vui = x[ib].qs[iqs];
-
-    v.x() = vui & 0xF;
-    v.y() = vui >> 4;
-
-#ifdef GGML_SYCL_F16
-    // v = v - {8.0f, 8.0f};
-    // v = v * {d, d};
-    v.s0() = (v.s0() - 8.0f) * d;
-    v.s1() = (v.s1() - 8.0f) * d;
-
-#else
-    v.x() = (v.x() - 8.0f) * d;
-    v.y() = (v.y() - 8.0f) * d;
-#endif // GGML_SYCL_F16
-}
-
-static __dpct_inline__ void dequantize_q4_1(const void *vx, const int ib,
-                                            const int iqs, dfloat2 &v) {
-    const block_q4_1 * x = (const block_q4_1 *) vx;
-
-    const dfloat d = x[ib].dm[0];
-    const dfloat m = x[ib].dm[1];
-
-    const int vui = x[ib].qs[iqs];
-
-    v.x() = vui & 0xF;
-    v.y() = vui >> 4;
-
-#ifdef GGML_SYCL_F16
-    // v = v * {d, d};
-    // v = v + {m, m};
-    v.s0() = (v.s0() * d) + m;
-    v.s1() = (v.s1() * d) + m;
-
-#else
-    v.x() = (v.x() * d) + m;
-    v.y() = (v.y() * d) + m;
-#endif // GGML_SYCL_F16
-}
-
-static __dpct_inline__ void dequantize_q5_0(const void *vx, const int ib,
-                                            const int iqs, dfloat2 &v) {
-    const block_q5_0 * x = (const block_q5_0 *) vx;
-
-    const dfloat d = x[ib].d;
-
-    uint32_t qh;
-    memcpy(&qh, x[ib].qh, sizeof(qh));
-
-    const int xh_0 = ((qh >> (iqs +  0)) << 4) & 0x10;
-    const int xh_1 = ((qh >> (iqs + 12))     ) & 0x10;
-
-    v.x() = ((x[ib].qs[iqs] & 0xf) | xh_0);
-    v.y() = ((x[ib].qs[iqs] >> 4) | xh_1);
-
-#ifdef GGML_SYCL_F16
-    // v = v - {16.0f, 16.0f};
-    // v = v * {d, d};
-    v.s0() = (v.s0() - 16.0f) * d;
-    v.s1() = (v.s1() - 16.0f) * d;
-
-#else
-    v.x() = (v.x() - 16.0f) * d;
-    v.y() = (v.y() - 16.0f) * d;
-#endif // GGML_SYCL_F16
-}
-
-static __dpct_inline__ void dequantize_q5_1(const void *vx, const int ib,
-                                            const int iqs, dfloat2 &v) {
-    const block_q5_1 * x = (const block_q5_1 *) vx;
-
-    const dfloat d = x[ib].dm[0];
-    const dfloat m = x[ib].dm[1];
-
-    uint32_t qh;
-    memcpy(&qh, x[ib].qh, sizeof(qh));
-
-    const int xh_0 = ((qh >> (iqs +  0)) << 4) & 0x10;
-    const int xh_1 = ((qh >> (iqs + 12))     ) & 0x10;
-
-    v.x() = ((x[ib].qs[iqs] & 0xf) | xh_0);
-    v.y() = ((x[ib].qs[iqs] >> 4) | xh_1);
-
-#ifdef GGML_SYCL_F16
-    // v = v * {d, d};
-    // v = v + {m, m};
-    v.s0() = (v.s0() * d) + m;
-    v.s1() = (v.s1() * d) + m;
-#else
-    v.x() = (v.x() * d) + m;
-    v.y() = (v.y() * d) + m;
-#endif // GGML_SYCL_F16
-}
-
-static __dpct_inline__ void dequantize_q8_0(const void *vx, const int ib,
-                                            const int iqs, dfloat2 &v) {
-    const block_q8_0 * x = (const block_q8_0 *) vx;
-
-    const dfloat d = x[ib].d;
-
-    v.x() = x[ib].qs[iqs + 0];
-    v.y() = x[ib].qs[iqs + 1];
-
-#ifdef GGML_SYCL_F16
-    // v = v * {d, d};
-    v.s0() *= d;
-    v.s1() *= d;
-#else
-    v.x() *= d;
-    v.y() *= d;
-#endif // GGML_SYCL_F16
-}
-
-template<typename dst_t>
-static void dequantize_block_q4_0(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32,
-                                  const sycl::nd_item<3> &item_ct1) {
-
-    const int i = item_ct1.get_group(2);
-
-    // assume 32 threads
-    const int tid = item_ct1.get_local_id(2);
-    const int il  = tid/8;
-    const int ir  = tid%8;
-    const int ib = 8*i + ir;
-    if (ib >= nb32) {
-        return;
-    }
-
-    dst_t * y = yy + 256*i + 32*ir + 4*il;
-
-    const block_q4_0 * x = (const block_q4_0 *)vx + ib;
-    const float d = sycl::vec<sycl::half, 1>(x->d)
-                        .convert<float, sycl::rounding_mode::automatic>()[0];
-    const float dm = -8*d;
-
-    const uint8_t * q = x->qs + 4*il;
-
-    for (int l = 0; l < 4; ++l) {
-        y[l+ 0] = d * (q[l] & 0xF) + dm;
-        y[l+16] = d * (q[l] >>  4) + dm;
-    }
-}
-
-template<typename dst_t>
-static void dequantize_block_q4_1(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32,
-                                  const sycl::nd_item<3> &item_ct1) {
-
-    const int i = item_ct1.get_group(2);
-
-    // assume 32 threads
-    const int tid = item_ct1.get_local_id(2);
-    const int il  = tid/8;
-    const int ir  = tid%8;
-    const int ib = 8*i + ir;
-    if (ib >= nb32) {
-        return;
-    }
-
-    dst_t * y = yy + 256*i + 32*ir + 4*il;
-
-    const block_q4_1 * x = (const block_q4_1 *)vx + ib;
-    const sycl::float2 d =
-        x->dm.convert<float, sycl::rounding_mode::automatic>();
-
-    const uint8_t * q = x->qs + 4*il;
-
-    for (int l = 0; l < 4; ++l) {
-        y[l + 0] = d.x() * (q[l] & 0xF) + d.y();
-        y[l + 16] = d.x() * (q[l] >> 4) + d.y();
-    }
-}
-
-
-//================================== k-quants
-
-template<typename dst_t>
-static void dequantize_block_q2_K(const void * __restrict__ vx, dst_t * __restrict__ yy,
-                                  const sycl::nd_item<3> &item_ct1) {
-
-    const int i = item_ct1.get_group(2);
-    const block_q2_K * x = (const block_q2_K *) vx;
-
-    const int tid = item_ct1.get_local_id(2);
-    const int n   = tid/32;
-    const int l   = tid - 32*n;
-    const int is  = 8*n + l/16;
-
-    const uint8_t q = x[i].qs[32*n + l];
-    dst_t * y = yy + i*QK_K + 128*n;
-
-    float dall = x[i].dm[0];
-    float dmin = x[i].dm[1];
-    y[l+ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4);
-    y[l+32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 2) & 3) - dmin * (x[i].scales[is+2] >> 4);
-    y[l+64] = dall * (x[i].scales[is+4] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+4] >> 4);
-    y[l+96] = dall * (x[i].scales[is+6] & 0xF) * ((q >> 6) & 3) - dmin * (x[i].scales[is+6] >> 4);
-}
-
-template<typename dst_t>
-static void dequantize_block_q3_K(const void * __restrict__ vx, dst_t * __restrict__ yy,
-                                  const sycl::nd_item<3> &item_ct1) {
-
-    const int i = item_ct1.get_group(2);
-    const block_q3_K * x = (const block_q3_K *) vx;
-
-    const int r = item_ct1.get_local_id(2) / 4;
-    const int tid = r/2;
-    const int is0 = r%2;
-    const int l0 = 16 * is0 + 4 * (item_ct1.get_local_id(2) % 4);
-    const int n = tid / 4;
-    const int j = tid - 4*n;
-
-    uint8_t m = 1 << (4*n + j);
-    int is = 8*n + 2*j + is0;
-    int shift = 2*j;
-
-    int8_t us = is <  4 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+8] >> 0) & 3) << 4) :
-                is <  8 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+4] >> 2) & 3) << 4) :
-                is < 12 ? (x[i].scales[is-8] >>  4) | (((x[i].scales[is+0] >> 4) & 3) << 4) :
-                          (x[i].scales[is-8] >>  4) | (((x[i].scales[is-4] >> 6) & 3) << 4);
-    float d_all = x[i].d;
-    float dl = d_all * (us - 32);
-
-    dst_t * y = yy + i*QK_K + 128*n + 32*j;
-    const uint8_t * q = x[i].qs + 32*n;
-    const uint8_t * hm = x[i].hmask;
-
-    for (int l = l0; l < l0+4; ++l) y[l] = dl * ((int8_t)((q[l] >> shift) & 3) - ((hm[l] & m) ? 0 : 4));
-}
-
-static inline void get_scale_min_k4(int j, const uint8_t * q, uint8_t & d, uint8_t & m) {
-    if (j < 4) {
-        d = q[j] & 63; m = q[j + 4] & 63;
-    } else {
-        d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4);
-        m = (q[j+4] >>  4) | ((q[j-0] >> 6) << 4);
-    }
-}
-
-template<typename dst_t>
-static void dequantize_block_q4_K(const void * __restrict__ vx, dst_t * __restrict__ yy,
-                                  const sycl::nd_item<3> &item_ct1) {
-    const block_q4_K * x = (const block_q4_K *) vx;
-
-    const int i = item_ct1.get_group(2);
-
-    // assume 32 threads
-    const int tid = item_ct1.get_local_id(2);
-    const int il  = tid/8;
-    const int ir  = tid%8;
-    const int is  = 2*il;
-    const int n   = 4;
-
-    dst_t * y = yy + i*QK_K + 64*il + n*ir;
-
-    const float dall = x[i].dm[0];
-    const float dmin = x[i].dm[1];
-
-    const uint8_t * q = x[i].qs + 32*il + n*ir;
-
-    uint8_t sc, m;
-    get_scale_min_k4(is + 0, x[i].scales, sc, m);
-    const float d1 = dall * sc; const float m1 = dmin * m;
-    get_scale_min_k4(is + 1, x[i].scales, sc, m);
-    const float d2 = dall * sc; const float m2 = dmin * m;
-    for (int l = 0; l < n; ++l) {
-        y[l + 0] = d1 * (q[l] & 0xF) - m1;
-        y[l +32] = d2 * (q[l] >>  4) - m2;
-    }
-}
-
-template<typename dst_t>
-static void dequantize_block_q5_K(const void * __restrict__ vx, dst_t * __restrict__ yy,
-                                  const sycl::nd_item<3> &item_ct1) {
-    const block_q5_K * x = (const block_q5_K *) vx;
-
-    const int i = item_ct1.get_group(2);
-
-    // assume 64 threads - this is very slightly better than the one below
-    const int tid = item_ct1.get_local_id(2);
-    const int il  = tid/16;   // il is in 0...3
-    const int ir  = tid%16;   // ir is in 0...15
-    const int is  = 2*il;     // is is in 0...6
-
-    dst_t * y = yy + i*QK_K + 64*il + 2*ir;
-
-    const float dall = x[i].dm[0];
-    const float dmin = x[i].dm[1];
-
-    const uint8_t * ql = x[i].qs + 32*il + 2*ir;
-    const uint8_t * qh = x[i].qh + 2*ir;
-
-    uint8_t sc, m;
-    get_scale_min_k4(is + 0, x[i].scales, sc, m);
-    const float d1 = dall * sc; const float m1 = dmin * m;
-    get_scale_min_k4(is + 1, x[i].scales, sc, m);
-    const float d2 = dall * sc; const float m2 = dmin * m;
-
-    uint8_t   hm  = 1 << (2*il);
-    y[ 0] = d1 * ((ql[ 0] & 0xF) + (qh[ 0] & hm ? 16 : 0)) - m1;
-    y[ 1] = d1 * ((ql[ 1] & 0xF) + (qh[ 1] & hm ? 16 : 0)) - m1;
-    hm <<= 1;
-    y[32] = d2 * ((ql[ 0] >>  4) + (qh[ 0] & hm ? 16 : 0)) - m2;
-    y[33] = d2 * ((ql[ 1] >>  4) + (qh[ 1] & hm ? 16 : 0)) - m2;
-}
-
-template<typename dst_t>
-static void dequantize_block_q6_K(const void * __restrict__ vx, dst_t * __restrict__ yy,
-                                  const sycl::nd_item<3> &item_ct1) {
-    const block_q6_K * x = (const block_q6_K *) vx;
-
-    const int i = item_ct1.get_group(2);
-
-    // assume 64 threads - this is very slightly better than the one below
-    const int tid = item_ct1.get_local_id(2);
-    const int ip  = tid/32;   // ip is 0 or 1
-    const int il  = tid - 32*ip; // 0...32
-    const int is  = 8*ip + il/16;
-
-    dst_t * y = yy + i*QK_K + 128*ip + il;
-
-    const float d = x[i].d;
-
-    const uint8_t * ql = x[i].ql + 64*ip + il;
-    const uint8_t   qh = x[i].qh[32*ip + il];
-    const int8_t  * sc = x[i].scales + is;
-
-    y[ 0] = d * sc[0] * ((int8_t)((ql[ 0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32);
-    y[32] = d * sc[2] * ((int8_t)((ql[32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32);
-    y[64] = d * sc[4] * ((int8_t)((ql[ 0]  >> 4) | (((qh >> 4) & 3) << 4)) - 32);
-    y[96] = d * sc[6] * ((int8_t)((ql[32]  >> 4) | (((qh >> 6) & 3) << 4)) - 32);
-}
-
-template<typename dst_t>
-static void dequantize_block_iq2_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy,
-                                     const sycl::nd_item<3> &item_ct1,
-                                     const uint64_t *iq2xxs_grid_ptr,
-                                     const uint8_t *ksigns_iq2xs_ptr,
-                                     const uint8_t *kmask_iq2xs_ptr) {
-
-    const int i = item_ct1.get_group(2);
-    const block_iq2_xxs * x = (const block_iq2_xxs  *) vx;
-
-    const int tid = item_ct1.get_local_id(2);
-    const int il = tid/8; // 0...3
-    const int ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint16_t * q2 = x[i].qs + 4*ib;
-    const uint8_t  * aux8 = (const uint8_t *)q2;
-    const uint8_t  * grid = (const uint8_t *)(iq2xxs_grid_ptr + aux8[il]);
-    const uint32_t aux32 = q2[2] | (q2[3] << 16);
-    const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.25f;
-    const uint8_t signs = ksigns_iq2xs_ptr[(aux32 >> 7*il) & 127];
-    for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs_ptr[j] ? -1.f : 1.f);
-}
-
-template<typename dst_t>
-static void dequantize_block_iq2_xs(const void * __restrict__ vx, dst_t * __restrict__ yy,
-                                    const sycl::nd_item<3> &item_ct1,
-                                    const uint64_t *iq2xs_grid,
-                                    const uint8_t *ksigns_iq2xs,
-                                    const uint8_t *kmask_iq2xs) {
-
-    const int i = item_ct1.get_group(2);
-    const block_iq2_xs * x = (const block_iq2_xs *) vx;
-
-    const int tid = item_ct1.get_local_id(2);
-    const int il = tid/8; // 0...3
-    const int ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint16_t * q2 = x[i].qs + 4*ib;
-    const uint8_t  * grid = (const uint8_t *)(iq2xs_grid + (q2[il] & 511));
-    const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f;
-    const uint8_t signs = ksigns_iq2xs[q2[il] >> 9];
-    for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
-}
-
-template <typename dst_t>
-__dpct_inline__ static void
-dequantize_block_iq2_s(const void *__restrict__ vx, dst_t *__restrict__ yy,
-                       const sycl::nd_item<3> &item_ct1) {
-
-    const int i = item_ct1.get_group(2);
-    const block_iq2_s * x = (const block_iq2_s *) vx;
-
-    const int tid = item_ct1.get_local_id(2);
-    const int il = tid/8; // 0...3
-    const int ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint8_t * grid = (const uint8_t *)(iq2s_grid + (x[i].qs[4*ib+il] | ((x[i].qh[ib] << (8-2*il)) & 0x300)));
-    const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f;
-    const uint8_t signs = x[i].qs[QK_K/8+4*ib+il];
-#pragma unroll
-    for (int j = 0; j < 8; ++j) {
-        y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
-    }
-}
-
-template<typename dst_t>
-static void dequantize_block_iq3_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy,
-                                     const sycl::nd_item<3> &item_ct1,
-                                     const uint32_t *iq3xxs_grid,
-                                     const uint8_t *ksigns_iq2xs,
-                                     const uint8_t *kmask_iq2xs) {
-
-    const int i = item_ct1.get_group(2);
-    const block_iq3_xxs * x = (const block_iq3_xxs  *) vx;
-
-    const int tid = item_ct1.get_local_id(2);
-    const int il = tid/8; // 0...3
-    const int ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint8_t  * q3 = x[i].qs + 8*ib;
-    const uint16_t * gas = (const uint16_t *)(x[i].qs + QK_K/4) + 2*ib;
-    const uint8_t  * grid1 = (const uint8_t *)(iq3xxs_grid + q3[2*il+0]);
-    const uint8_t  * grid2 = (const uint8_t *)(iq3xxs_grid + q3[2*il+1]);
-    const uint32_t aux32 = gas[0] | (gas[1] << 16);
-    const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.5f;
-    const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*il) & 127];
-    for (int j = 0; j < 4; ++j) {
-        y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
-        y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
-    }
-}
-
-template <typename dst_t>
-__dpct_inline__ static void
-dequantize_block_iq3_s(const void *__restrict__ vx, dst_t *__restrict__ yy,
-                       const sycl::nd_item<3> &item_ct1,
-                       const uint8_t *kmask_iq2xs, const uint32_t *iq3s_grid) {
-
-    const int i = item_ct1.get_group(2);
-    const block_iq3_s * x = (const block_iq3_s *) vx;
-
-    const int tid = item_ct1.get_local_id(2);
-    const int il = tid/8; // 0...3
-    const int ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint8_t * qs = x[i].qs + 8*ib;
-    const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*il+0] | ((x[i].qh[ib] << (8-2*il)) & 256)));
-    const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*il+1] | ((x[i].qh[ib] << (7-2*il)) & 256)));
-    const float d = (float)x[i].d * (1 + 2*((x[i].scales[ib/2] >> 4*(ib%2)) & 0xf));
-    const uint8_t signs = x[i].signs[4*ib + il];
-#pragma unroll
-    for (int j = 0; j < 4; ++j) {
-        y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
-        y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
-    }
-}
-
-template <typename dst_t>
-__dpct_inline__ static void
-dequantize_block_iq1_s(const void *__restrict__ vx, dst_t *__restrict__ yy,
-                       const sycl::nd_item<3> &item_ct1,
-                       const uint32_t *iq1s_grid_gpu) {
-
-    const int i = item_ct1.get_group(2);
-    const block_iq1_s * x = (const block_iq1_s  *) vx;
-
-    const int tid = item_ct1.get_local_id(2);
-    const int il = tid/8; // 0...3
-    const int ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const float delta = x[i].qh[ib] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA;
-    const float d = (float)x[i].d * (2*((x[i].qh[ib] >> 12) & 7) + 1);
-    uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32;
-    grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[ib] >> 3*il) & 7) << 8)];
-    grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f;
-    grid32[0] &= 0x0f0f0f0f;
-#pragma unroll
-    for (int j = 0; j < 8; ++j) {
-        y[j] = d * (q[j] + delta);
-    }
-}
-
-template <typename dst_t>
-__dpct_inline__ static void
-dequantize_block_iq1_m(const void *__restrict__ vx, dst_t *__restrict__ yy,
-                       const sycl::nd_item<3> &item_ct1,
-                       const uint32_t *iq1s_grid_gpu) {
-
-    const int i = item_ct1.get_group(2);
-    const block_iq1_m * x = (const block_iq1_m  *) vx;
-
-    const int tid = item_ct1.get_local_id(2);
-    const int il = tid/8; // 0...3
-    const int ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
-    const uint16_t * sc = (const uint16_t *)x[i].scales;
-    iq1m_scale_t scale;
-    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-    const int ib16 = 2*ib + il/2; // sc[ib16/4] >> 3*(ib16%4) -> sc[ib/2] >> 3*((2*ib+il/2)%4);
-    const float d = (float)scale.f16 * (2*((sc[ib16/4] >> 3*(ib16%4)) & 0x7) + 1);
-    const float delta = x[i].qh[2*ib+il/2] & (0x08 << 4*(il%2)) ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA;
-    uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32;
-    grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[2*ib+il/2] >> 4*(il%2)) & 7) << 8)];
-    grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f;
-    grid32[0] &= 0x0f0f0f0f;
-#pragma unroll
-    for (int j = 0; j < 8; ++j) {
-        y[j] = d * (q[j] + delta);
-    }
-}
-
-template <typename dst_t>
-__dpct_inline__ static void
-dequantize_block_iq4_nl(const void *__restrict__ vx, dst_t *__restrict__ yy,
-                        const sycl::nd_item<3> &item_ct1) {
-
-    const int i = item_ct1.get_group(2);
-    const block_iq4_nl * x = (const block_iq4_nl *) vx + i*(QK_K/QK4_NL);
-
-    const int tid = item_ct1.get_local_id(2);
-    const int il = tid/8; // 0...3
-    const int ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 4*il;
-    const uint8_t  * q4 = x[ib].qs + 4*il;
-    const float d = (float)x[ib].d;
-#pragma unroll
-    for (int j = 0; j < 4; ++j) {
-        y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf];
-        y[j+16] = d * kvalues_iq4nl[q4[j] >>  4];
-    }
-
-}
-
-
-template <typename dst_t>
-__dpct_inline__ static void
-dequantize_block_iq4_xs(const void *__restrict__ vx, dst_t *__restrict__ yy,
-                        const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_group(2);
-    const block_iq4_xs * x = (const block_iq4_xs *)vx;
-
-    const int tid = item_ct1.get_local_id(2);
-    const int il = tid/8; // 0...3
-    const int ib = tid%8; // 0...7
-    dst_t * y = yy + i*QK_K + 32*ib + 4*il;
-    const uint8_t  * q4 = x[i].qs + 16*ib + 4*il;
-    const float d = (float)x[i].d * ((((x[i].scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((x[i].scales_h >> 2*ib) & 3) << 4)) - 32);
-#pragma unroll
-    for (int j = 0; j < 4; ++j) {
-        y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf];
-        y[j+16] = d * kvalues_iq4nl[q4[j] >>  4];
-    }
-}
-
-
-
-/*
-DPCT1110:4: The total declared local variable size in device function
-dequantize_mul_mat_vec_q2_k exceeds 128 bytes and may cause high register
-pressure. Consult with your hardware vendor to find the total register size
-available and adjust the code, or use smaller sub-group size to avoid high
-register pressure.
-*/
-static void dequantize_mul_mat_vec_q2_k(const void *__restrict__ vx,
-                                        const float *__restrict__ yy,
-                                        float *__restrict__ dst,
-                                        const int ncols, int nrows,
-                                        const sycl::nd_item<3> &item_ct1) {
-
-    static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION");
-
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-    if (row > nrows) return;
-
-    const int num_blocks_per_row = ncols / QK_K;
-    const int ib0 = row*num_blocks_per_row;
-
-    const block_q2_K * x = (const block_q2_K *)vx + ib0;
-
-    float tmp = 0; // partial sum for thread in warp
-
-    const int tid =
-        item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...15
-    const int ix =
-        item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
-
-    const int step = 16/K_QUANTS_PER_ITERATION;
-
-    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
-    const int in = tid - step*im;                        // 0...15 or 0...7
-
-    const int l0 = K_QUANTS_PER_ITERATION*in;            // 0...15 or 0...14 in steps of 2
-    const int q_offset = 32*im + l0;
-    const int s_offset = 8*im;
-    const int y_offset = 128*im + l0;
-
-    uint32_t aux[4];
-    const uint8_t * d = (const uint8_t *)aux;
-    const uint8_t * m = (const uint8_t *)(aux + 2);
-
-    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
-
-        const float   * y = yy + i * QK_K + y_offset;
-        const uint8_t * q = x[i].qs + q_offset;
-
-        const float dall = x[i].dm[0];
-        const float dmin = x[i].dm[1];
-
-        const uint32_t * a = (const uint32_t *)(x[i].scales + s_offset);
-        aux[0] = a[0] & 0x0f0f0f0f;
-        aux[1] = a[1] & 0x0f0f0f0f;
-        aux[2] = (a[0] >> 4) & 0x0f0f0f0f;
-        aux[3] = (a[1] >> 4) & 0x0f0f0f0f;
-
-        float sum1 = 0, sum2 = 0;
-        for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) {
-            sum1 += y[l+ 0] * d[0] * ((q[l+ 0] >> 0) & 3)
-                  + y[l+32] * d[2] * ((q[l+ 0] >> 2) & 3)
-                  + y[l+64] * d[4] * ((q[l+ 0] >> 4) & 3)
-                  + y[l+96] * d[6] * ((q[l+ 0] >> 6) & 3)
-                  + y[l+16] * d[1] * ((q[l+16] >> 0) & 3)
-                  + y[l+48] * d[3] * ((q[l+16] >> 2) & 3)
-                  + y[l+80] * d[5] * ((q[l+16] >> 4) & 3)
-                  +y[l+112] * d[7] * ((q[l+16] >> 6) & 3);
-            sum2 += y[l+ 0] * m[0] + y[l+32] * m[2] + y[l+64] * m[4] + y[ l+96] * m[6]
-                  + y[l+16] * m[1] + y[l+48] * m[3] + y[l+80] * m[5] + y[l+112] * m[7];
-
-        }
-        tmp += dall * sum1 - dmin * sum2;
-
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-/*
-DPCT1110:5: The total declared local variable size in device function
-dequantize_mul_mat_vec_q3_k exceeds 128 bytes and may cause high register
-pressure. Consult with your hardware vendor to find the total register size
-available and adjust the code, or use smaller sub-group size to avoid high
-register pressure.
-*/
-static void dequantize_mul_mat_vec_q3_k(const void *__restrict__ vx,
-                                        const float *__restrict__ yy,
-                                        float *__restrict__ dst,
-                                        const int ncols, int nrows,
-                                        const sycl::nd_item<3> &item_ct1) {
-
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-    if (row > nrows) return;
-
-    const int num_blocks_per_row = ncols / QK_K;
-    const int ib0 = row*num_blocks_per_row;
-
-    const block_q3_K * x = (const block_q3_K *)vx + ib0;
-
-    float tmp = 0; // partial sum for thread in warp
-
-    const uint16_t kmask1 = 0x0303;
-    const uint16_t kmask2 = 0x0f0f;
-
-    const int tid =
-        item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...16
-    const int ix =
-        item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
-
-    const int n  = K_QUANTS_PER_ITERATION;               // iterations in the inner loop
-    const int step = 16/K_QUANTS_PER_ITERATION;
-    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
-    const int in = tid - step*im;                        // 0....15 or 0...7
-
-    const uint8_t m = 1 << (4*im);
-
-    const int l0 = n*in;                                 // 0...15 or 0...14 in steps of 2
-    const int q_offset =  32*im + l0;
-    const int y_offset = 128*im + l0;
-
-    uint16_t utmp[4];
-    const int8_t * s = (const int8_t *)utmp;
-
-    const uint16_t s_shift = 4*im;
-
-    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
-
-        const float   * y  = yy + i * QK_K + y_offset;
-        const uint8_t * q = x[i].qs + q_offset;
-        const uint8_t * h = x[i].hmask + l0;
-
-        const uint16_t * a = (const uint16_t *)x[i].scales;
-        utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4);
-        utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4);
-        utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4);
-        utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4);
-
-        const float d = x[i].d;
-
-        float sum = 0;
-        for (int l = 0; l < n; ++l) {
-            sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4))
-                 + y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4))
-                 + y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4))
-                 + y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4));
-            sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4))
-                 + y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4))
-                 + y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4))
-                + y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4));
-        }
-        tmp += d * sum;
-
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-/*
-DPCT1110:6: The total declared local variable size in device function
-dequantize_mul_mat_vec_q4_k exceeds 128 bytes and may cause high register
-pressure. Consult with your hardware vendor to find the total register size
-available and adjust the code, or use smaller sub-group size to avoid high
-register pressure.
-*/
-static void dequantize_mul_mat_vec_q4_k(const void *__restrict__ vx,
-                                        const float *__restrict__ yy,
-                                        float *__restrict__ dst,
-                                        const int ncols, int nrows,
-                                        const sycl::nd_item<3> &item_ct1) {
-
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-    if (row > nrows) return;
-    const int num_blocks_per_row = ncols / QK_K;
-    const int ib0 = row*num_blocks_per_row;
-
-    const block_q4_K * x = (const block_q4_K *)vx + ib0;
-
-    const uint16_t kmask1 = 0x3f3f;
-    const uint16_t kmask2 = 0x0f0f;
-    const uint16_t kmask3 = 0xc0c0;
-
-    const int tid =
-        item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...16
-    const int ix =
-        item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
-
-    const int step = 8/K_QUANTS_PER_ITERATION;           // 8 or 4
-
-    const int il  = tid/step;                            // 0...3
-    const int ir  = tid - step*il;                       // 0...7 or 0...3
-    const int n   = 2 * K_QUANTS_PER_ITERATION;          // 2 or 4
-
-    const int im = il/2;  // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
-    const int in = il%2;
-
-    const int l0 = n*(2*ir + in);
-    const int q_offset = 32*im + l0;
-    const int y_offset = 64*im + l0;
-
-    uint16_t aux[4];
-    const uint8_t * sc = (const uint8_t *)aux;
-
-#if K_QUANTS_PER_ITERATION == 2
-    uint32_t q32[4];
-    const uint8_t * q4 = (const uint8_t *)q32;
-#else
-    uint16_t q16[4];
-    const uint8_t * q4 = (const uint8_t *)q16;
-#endif
-
-    float tmp = 0; // partial sum for thread in warp
-
-    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
-
-        const float   * y1 = yy + i*QK_K + y_offset;
-        const float   * y2 = y1 + 128;
-
-        const float dall = x[i].dm[0];
-        const float dmin = x[i].dm[1];
-
-        const uint16_t * a = (const uint16_t *)x[i].scales;
-        aux[0] = a[im+0] & kmask1;
-        aux[1] = a[im+2] & kmask1;
-        aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
-        aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
-
-#if K_QUANTS_PER_ITERATION == 2
-        const uint32_t * q1 = (const uint32_t *)(x[i].qs + q_offset);
-        const uint32_t * q2 = q1 + 16;
-
-        q32[0] = q1[0] & 0x0f0f0f0f;
-        q32[1] = q1[0] & 0xf0f0f0f0;
-        q32[2] = q2[0] & 0x0f0f0f0f;
-        q32[3] = q2[0] & 0xf0f0f0f0;
-
-        sycl::float4 s = {0.f, 0.f, 0.f, 0.f};
-        float smin = 0;
-        for (int l = 0; l < 4; ++l) {
-            s.x() += y1[l] * q4[l + 0]; s.y() += y1[l + 32] * q4[l + 4];
-            s.z() += y2[l] * q4[l + 8]; s.w() += y2[l + 32] * q4[l + 12];
-            smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
-        }
-        tmp += dall * (s.x() * sc[0] + s.y() * sc[1] * 1.f / 16.f +
-                       s.z() * sc[4] + s.w() * sc[5] * 1.f / 16.f) -
-               dmin * smin;
-#else
-        const uint16_t * q1 = (const uint16_t *)(x[i].qs + q_offset);
-        const uint16_t * q2 = q1 + 32;
-
-        q16[0] = q1[0] & 0x0f0f;
-        q16[1] = q1[0] & 0xf0f0;
-        q16[2] = q2[0] & 0x0f0f;
-        q16[3] = q2[0] & 0xf0f0;
-
-        float4 s = {0.f, 0.f, 0.f, 0.f};
-        float smin = 0;
-        for (int l = 0; l < 2; ++l) {
-            s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+2];
-            s.z += y2[l] * q4[l+4]; s.w += y2[l+32] * q4[l+6];
-            smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
-        }
-        tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin;
-#endif
-
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (tid == 0) {
-        dst[row] = tmp;
-    }
-}
-
-/*
-DPCT1110:7: The total declared local variable size in device function
-dequantize_mul_mat_vec_q5_k exceeds 128 bytes and may cause high register
-pressure. Consult with your hardware vendor to find the total register size
-available and adjust the code, or use smaller sub-group size to avoid high
-register pressure.
-*/
-static void dequantize_mul_mat_vec_q5_k(const void *__restrict__ vx,
-                                        const float *__restrict__ yy,
-                                        float *__restrict__ dst,
-                                        const int ncols,
-                                        const sycl::nd_item<3> &item_ct1) {
-
-    const int row = item_ct1.get_group(2);
-    const int num_blocks_per_row = ncols / QK_K;
-    const int ib0 = row*num_blocks_per_row;
-
-    const block_q5_K * x = (const block_q5_K *)vx + ib0;
-
-    float tmp = 0; // partial sum for thread in warp
-
-    const uint16_t kmask1 = 0x3f3f;
-    const uint16_t kmask2 = 0x0f0f;
-    const uint16_t kmask3 = 0xc0c0;
-
-    const int tid = item_ct1.get_local_id(2) / 2; // 0...15
-    const int ix = item_ct1.get_local_id(2) % 2;
-
-    const int il  = tid/4;     // 0...3
-    const int ir  = tid - 4*il;// 0...3
-    const int n   = 2;
-
-    const int im = il/2;  // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
-    const int in = il%2;
-
-    const int l0 = n*(2*ir + in);
-    const int q_offset = 32*im + l0;
-    const int y_offset = 64*im + l0;
-
-    const uint8_t hm1  = 1 << (2*im);
-    const uint8_t hm2  = hm1 << 4;
-
-    uint16_t aux[4];
-    const uint8_t * sc = (const uint8_t *)aux;
-
-    uint16_t q16[8];
-    const uint8_t * q4 = (const uint8_t *)q16;
-
-    for (int i = ix; i < num_blocks_per_row; i += 2) {
-
-        const uint8_t * ql1 = x[i].qs + q_offset;
-        const uint8_t * qh  = x[i].qh + l0;
-        const float   * y1  = yy + i*QK_K + y_offset;
-        const float   * y2  = y1 + 128;
-
-        const float dall = x[i].dm[0];
-        const float dmin = x[i].dm[1];
-
-        const uint16_t * a = (const uint16_t *)x[i].scales;
-        aux[0] = a[im+0] & kmask1;
-        aux[1] = a[im+2] & kmask1;
-        aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
-        aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
-
-        sycl::float4 sum = {0.f, 0.f, 0.f, 0.f};
-        float smin = 0;
-        const uint16_t * q1 = (const uint16_t *)ql1;
-        const uint16_t * q2 = q1 + 32;
-        q16[0] = q1[0] & 0x0f0f;
-        q16[1] = q1[8] & 0x0f0f;
-        q16[2] = (q1[0] >> 4) & 0x0f0f;
-        q16[3] = (q1[8] >> 4) & 0x0f0f;
-        q16[4] = q2[0] & 0x0f0f;
-        q16[5] = q2[8] & 0x0f0f;
-        q16[6] = (q2[0] >> 4) & 0x0f0f;
-        q16[7] = (q2[8] >> 4) & 0x0f0f;
-        for (int l = 0; l < n; ++l) {
-            sum.x() +=
-                y1[l + 0] * (q4[l + 0] + (qh[l + 0] & (hm1 << 0) ? 16 : 0)) +
-                y1[l + 16] * (q4[l + 2] + (qh[l + 16] & (hm1 << 0) ? 16 : 0));
-            sum.y() +=
-                y1[l + 32] * (q4[l + 4] + (qh[l + 0] & (hm1 << 1) ? 16 : 0)) +
-                y1[l + 48] * (q4[l + 6] + (qh[l + 16] & (hm1 << 1) ? 16 : 0));
-            sum.z() +=
-                y2[l + 0] * (q4[l + 8] + (qh[l + 0] & (hm2 << 0) ? 16 : 0)) +
-                y2[l + 16] * (q4[l + 10] + (qh[l + 16] & (hm2 << 0) ? 16 : 0));
-            sum.w() +=
-                y2[l + 32] * (q4[l + 12] + (qh[l + 0] & (hm2 << 1) ? 16 : 0)) +
-                y2[l + 48] * (q4[l + 14] + (qh[l + 16] & (hm2 << 1) ? 16 : 0));
-            smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3]
-                  + (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7];
-        }
-        tmp += dall * (sum.x() * sc[0] + sum.y() * sc[1] + sum.z() * sc[4] +
-                       sum.w() * sc[5]) -
-               dmin * smin;
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-static void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows,
-                                        const sycl::nd_item<3> &item_ct1) {
-
-    static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION");
-
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-    if (row > nrows) return;
-
-    const int num_blocks_per_row = ncols / QK_K;
-    const int ib0 = row*num_blocks_per_row;
-
-    const block_q6_K * x = (const block_q6_K *)vx + ib0;
-
-    const int tid =
-        item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...16
-    const int ix =
-        item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0, 1
-
-    const int step = 16/K_QUANTS_PER_ITERATION;          // 16 or 8
-
-    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
-    const int in = tid - step*im;                        // 0...15 or 0...7
-
-#if K_QUANTS_PER_ITERATION == 1
-    const int l0 = K_QUANTS_PER_ITERATION*in;            // 0...15
-    const int is = 0;
-#else
-    const int l0 = 4 * in;                               // 0, 4, 8, ..., 28
-    const int is = in / 4;
-#endif
-    const int ql_offset = 64*im + l0;
-    const int qh_offset = 32*im + l0;
-    const int s_offset  =  8*im + is;
-    const int y_offset = 128*im + l0;
-
-    float tmp = 0; // partial sum for thread in warp
-
-    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
-
-        const float   * y  = yy + i * QK_K + y_offset;
-        const uint8_t * ql = x[i].ql + ql_offset;
-        const uint8_t * qh = x[i].qh + qh_offset;
-        const int8_t  * s  = x[i].scales + s_offset;
-
-        const float d = x[i].d;
-
-#if K_QUANTS_PER_ITERATION == 1
-        float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32)
-                  + y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32)
-                  + y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32)
-                  + y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32)
-                  + y[64] * s[4] * d * ((int8_t)((ql[ 0]  >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32)
-                  + y[80] * s[5] * d * ((int8_t)((ql[16]  >> 4) | ((qh[16] & 0x30) >> 0)) - 32)
-                  + y[96] * s[6] * d * ((int8_t)((ql[32]  >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32)
-                  +y[112] * s[7] * d * ((int8_t)((ql[48]  >> 4) | ((qh[16] & 0xc0) >> 2)) - 32);
-        tmp += sum;
-#else
-        float sum = 0;
-        for (int l = 0; l < 4; ++l) {
-            sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32)
-                 + y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32)
-                 + y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0]  >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32)
-                 + y[l+96] * s[6] * d * ((int8_t)((ql[l+32]  >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32);
-        }
-        tmp += sum;
-#endif
-
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (tid == 0) {
-        dst[row] = tmp;
-    }
-}
-
-static void convert_f16(const void * vx, const int ib, const int iqs, dfloat2 & v){
-    const sycl::half *x = (const sycl::half *)vx;
-
-    // automatic half -> float type cast if dfloat == float
-    v.x() = x[ib + iqs + 0];
-    v.y() = x[ib + iqs + 1];
-}
-
-static void convert_f32(const void * vx, const int ib, const int iqs, dfloat2 & v){
-    const float * x = (const float *) vx;
-
-    // automatic half -> float type cast if dfloat == float
-    v.x() = x[ib + iqs + 0];
-    v.y() = x[ib + iqs + 1];
-}
-
-static void quantize_q8_1(const float * __restrict__ x, void * __restrict__ vy, const int kx, const int kx_padded,
-                          const sycl::nd_item<3> &item_ct1) {
-    const int ix = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                   item_ct1.get_local_id(2);
-
-    if (ix >= kx_padded) {
-        return;
-    }
-
-    const int iy = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
-                   item_ct1.get_local_id(1);
-
-    const int i_padded = iy*kx_padded + ix;
-
-    block_q8_1 * y = (block_q8_1 *) vy;
-
-    const int ib = i_padded / QK8_1; // block index
-    const int iqs = i_padded % QK8_1; // quant index
-
-    const float xi = ix < kx ? x[iy*kx + ix] : 0.0f;
-    float amax = sycl::fabs((float)xi);
-    float sum = xi;
-
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        amax = sycl::fmax(amax, dpct::permute_sub_group_by_xor(
-                                    item_ct1.get_sub_group(), amax, mask));
-        sum +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), sum, mask);
-    }
-
-    const float d = amax / 127;
-    const int8_t q = amax == 0.0f ? 0 : sycl::round(xi / d);
-
-    y[ib].qs[iqs] = q;
-
-    if (iqs > 0) {
-        return;
-    }
-
-    reinterpret_cast<sycl::half &>(y[ib].ds.x()) = d;
-    reinterpret_cast<sycl::half &>(y[ib].ds.y()) = sum;
-}
-
-template<int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
-static void k_get_rows(
-            const void * src0, const int32_t * src1, dst_t * dst,
-            int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/
-            /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/
-            /*size_t s0,*/ size_t s1, size_t s2, size_t s3,
-            /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03,
-            size_t s10, size_t s11, size_t s12,
-            const sycl::nd_item<3> &item_ct1/*, size_t s13*/) {
-
-    const int i00 = (item_ct1.get_group(2) * item_ct1.get_local_range(2) +
-                     item_ct1.get_local_id(2)) *
-                    2;
-    const int i10 = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
-                    item_ct1.get_local_id(1);
-    const int i11 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) +
-                     item_ct1.get_local_id(0)) /
-                    ne12;
-    const int i12 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) +
-                     item_ct1.get_local_id(0)) %
-                    ne12;
-
-    if (i00 >= ne00) {
-        return;
-    }
-
-    const int i01 = src1[i10*s10 + i11*s11 + i12*s12];
-
-    dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3;
-    const void * src0_row = (const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03;
-
-    const int ib = i00/qk; // block index
-    const int iqs = (i00%qk)/qr; // quant index
-    const int iybs = i00 - i00%qk; // dst block start index
-    const int y_offset = qr == 1 ? 1 : qk/2;
-
-    // dequantize
-    dfloat2 v;
-    dequantize_kernel(src0_row, ib, iqs, v);
-
-    dst_row[iybs + iqs + 0] = v.x();
-    dst_row[iybs + iqs + y_offset] = v.y();
-}
-
-template<typename src0_t, typename dst_t>
-static void k_get_rows_float(
-            const src0_t * src0, const int32_t * src1, dst_t * dst,
-            int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/
-            /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/
-            /*size_t s0,*/ size_t s1, size_t s2, size_t s3,
-            /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03,
-            size_t s10, size_t s11, size_t s12,
-            const sycl::nd_item<3> &item_ct1/*, size_t s13*/) {
-
-    const int i00 = item_ct1.get_group(2) * item_ct1.get_local_range(2) +
-                    item_ct1.get_local_id(2);
-    const int i10 = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
-                    item_ct1.get_local_id(1);
-    const int i11 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) +
-                     item_ct1.get_local_id(0)) /
-                    ne12;
-    const int i12 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) +
-                     item_ct1.get_local_id(0)) %
-                    ne12;
-
-    if (i00 >= ne00) {
-        return;
-    }
-
-    const int i01 = src1[i10*s10 + i11*s11 + i12*s12];
-
-    dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3;
-    const src0_t * src0_row = (const src0_t *)((const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03);
-
-    dst_row[i00] = src0_row[i00];
-}
-
-template <int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
-static void dequantize_block(const void * __restrict__ vx, dst_t * __restrict__ y, const int k,
-                             const sycl::nd_item<3> &item_ct1) {
-    const int i = 2 * (item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                       item_ct1.get_local_id(2));
-
-    if (i >= k) {
-        return;
-    }
-
-    const int ib = i/qk; // block index
-    const int iqs = (i%qk)/qr; // quant index
-    const int iybs = i - i%qk; // y block start index
-    const int y_offset = qr == 1 ? 1 : qk/2;
-
-    // dequantize
-    dfloat2 v;
-    dequantize_kernel(vx, ib, iqs, v);
-
-    y[iybs + iqs + 0] = v.x();
-    y[iybs + iqs + y_offset] = v.y();
-}
-
-template <typename src_t, typename dst_t>
-static void convert_unary(const void * __restrict__ vx, dst_t * __restrict__ y, const int k,
-                          const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    if (i >= k) {
-        return;
-    }
-
-    const src_t * x = (src_t *) vx;
-
-    y[i] = x[i];
-}
-
-// VDR = vec dot ratio, how many contiguous integers each thread processes when the vec dot kernel is called
-// MMVQ = mul_mat_vec_q, MMQ = mul_mat_q
-
-#define VDR_Q4_0_Q8_1_MMVQ 2
-#define VDR_Q4_0_Q8_1_MMQ  4
-
-template <int vdr>
-static __dpct_inline__ float vec_dot_q4_0_q8_1_impl(const int *v, const int *u,
-                                                    const float &d4,
-                                                    const sycl::half2 &ds8) {
-    int sumi = 0;
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        const int vi0 = (v[i] >> 0) & 0x0F0F0F0F;
-        const int vi1 = (v[i] >> 4) & 0x0F0F0F0F;
-
-        // SIMD dot product of quantized values
-        sumi = dpct::dp4a(vi0, u[2 * i + 0], sumi);
-        sumi = dpct::dp4a(vi1, u[2 * i + 1], sumi);
-    }
-
-    const sycl::float2 ds8f =
-        ds8.convert<float, sycl::rounding_mode::automatic>();
-
-    // second part effectively subtracts 8 from each quant value
-    return d4 * (sumi * ds8f.x() - (8 * vdr / QI4_0) * ds8f.y());
-}
-
-#define VDR_Q4_1_Q8_1_MMVQ 2
-#define VDR_Q4_1_Q8_1_MMQ  4
-
-template <int vdr>
-static __dpct_inline__ float vec_dot_q4_1_q8_1_impl(const int *v, const int *u,
-                                                    const sycl::half2 &dm4,
-                                                    const sycl::half2 &ds8) {
-
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        const int vi0 = (v[i] >> 0) & 0x0F0F0F0F;
-        const int vi1 = (v[i] >> 4) & 0x0F0F0F0F;
-
-        // SIMD dot product of quantized values
-        sumi = dpct::dp4a(vi0, u[2 * i + 0], sumi);
-        sumi = dpct::dp4a(vi1, u[2 * i + 1], sumi);
-    }
-
-#ifdef GGML_SYCL_F16
-    const sycl::float2 tmp =
-        (dm4 * ds8).convert<float, sycl::rounding_mode::automatic>();
-    const float d4d8 = tmp.x();
-    const float m4s8 = tmp.y();
-#else
-    const sycl::float2 dm4f =
-        dm4.convert<float, sycl::rounding_mode::automatic>();
-    const sycl::float2 ds8f =
-        ds8.convert<float, sycl::rounding_mode::automatic>();
-    const float d4d8 = dm4f.x() * ds8f.x();
-    const float m4s8 = dm4f.y() * ds8f.y();
-#endif // GGML_SYCL_F16
-
-    // scale second part of sum by QI8_1/(vdr * QR4_1) to compensate for multiple threads adding it
-    return sumi * d4d8 + m4s8 / (QI8_1 / (vdr * QR4_1));
-}
-
-#define VDR_Q5_0_Q8_1_MMVQ 2
-#define VDR_Q5_0_Q8_1_MMQ  4
-
-template <int vdr>
-static __dpct_inline__ float
-vec_dot_q5_0_q8_1_impl(const int *vl, const int *vh, const int *u,
-                       const float &d5, const sycl::half2 &ds8) {
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        int vi0 = (vl[i] >>  0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits
-        vi0    |= (vh[i] <<  4) & 0x00000010; // 0 ->  4
-        vi0    |= (vh[i] << 11) & 0x00001000; // 1 -> 12
-        vi0    |= (vh[i] << 18) & 0x00100000; // 2 -> 20
-        vi0    |= (vh[i] << 25) & 0x10000000; // 3 -> 28
-        sumi = dpct::dp4a(vi0, u[2 * i + 0],
-                          sumi); // SIMD dot product of quantized values
-
-        int vi1 = (vl[i] >>  4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits
-        vi1    |= (vh[i] >> 12) & 0x00000010; // 16 ->  4
-        vi1    |= (vh[i] >>  5) & 0x00001000; // 17 -> 12
-        vi1    |= (vh[i] <<  2) & 0x00100000; // 18 -> 20
-        vi1    |= (vh[i] <<  9) & 0x10000000; // 19 -> 28
-        sumi = dpct::dp4a(vi1, u[2 * i + 1],
-                          sumi); // SIMD dot product of quantized values
-    }
-
-    const sycl::float2 ds8f =
-        ds8.convert<float, sycl::rounding_mode::automatic>();
-
-    // second part effectively subtracts 16 from each quant value
-    return d5 * (sumi * ds8f.x() - (16 * vdr / QI5_0) * ds8f.y());
-}
-
-#define VDR_Q5_1_Q8_1_MMVQ 2
-#define VDR_Q5_1_Q8_1_MMQ  4
-
-template <int vdr>
-static __dpct_inline__ float
-vec_dot_q5_1_q8_1_impl(const int *vl, const int *vh, const int *u,
-                       const sycl::half2 &dm5, const sycl::half2 &ds8) {
-
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        int vi0 = (vl[i] >>  0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits
-        vi0    |= (vh[i] <<  4) & 0x00000010; // 0 ->  4
-        vi0    |= (vh[i] << 11) & 0x00001000; // 1 -> 12
-        vi0    |= (vh[i] << 18) & 0x00100000; // 2 -> 20
-        vi0    |= (vh[i] << 25) & 0x10000000; // 3 -> 28
-        sumi = dpct::dp4a(vi0, u[2 * i + 0],
-                          sumi); // SIMD dot product of quantized values
-
-        int vi1 = (vl[i] >>  4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits
-        vi1    |= (vh[i] >> 12) & 0x00000010; // 16 ->  4
-        vi1    |= (vh[i] >>  5) & 0x00001000; // 17 -> 12
-        vi1    |= (vh[i] <<  2) & 0x00100000; // 18 -> 20
-        vi1    |= (vh[i] <<  9) & 0x10000000; // 19 -> 28
-        sumi = dpct::dp4a(vi1, u[2 * i + 1],
-                          sumi); // SIMD dot product of quantized values
-    }
-
-#ifdef GGML_SYCL_F16
-     const sycl::float2 tmp =
-        (dm5 * ds8).convert<float, sycl::rounding_mode::automatic>();
-    const float d5d8 = tmp.x();
-    const float m5s8 = tmp.y();
-
-
-#else
-    const sycl::float2 dm5f =
-        dm5.convert<float, sycl::rounding_mode::automatic>();
-    const sycl::float2 ds8f =
-        ds8.convert<float, sycl::rounding_mode::automatic>();
-    const float d5d8 = dm5f.x() * ds8f.x();
-    const float m5s8 = dm5f.y() * ds8f.y();
-#endif // GGML_SYCL_F16
-
-    // scale second part of sum by QI5_1 / vdr to compensate for multiple threads adding it
-    return sumi*d5d8 + m5s8 / (QI5_1 / vdr);
-}
-
-#define VDR_Q8_0_Q8_1_MMVQ 2
-#define VDR_Q8_0_Q8_1_MMQ 8
-
-template <int vdr>
-static __dpct_inline__ float vec_dot_q8_0_q8_1_impl(const int *v, const int *u,
-                                                    const float &d8_0,
-                                                    const float &d8_1) {
-
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        // SIMD dot product of quantized values
-        sumi = dpct::dp4a(v[i], u[i], sumi);
-    }
-
-    return d8_0*d8_1 * sumi;
-}
-
-template <int vdr>
-static __dpct_inline__ float vec_dot_q8_1_q8_1_impl(const int *v, const int *u,
-                                                    const sycl::half2 &dm8,
-                                                    const sycl::half2 &ds8) {
-
-    int sumi = 0;
-
-#pragma unroll
-    for (int i = 0; i < vdr; ++i) {
-        // SIMD dot product of quantized values
-        sumi = dpct::dp4a(v[i], u[i], sumi);
-    }
-
-#ifdef GGML_SYCL_F16
-    const sycl::float2 tmp =
-        (dm8 * ds8).convert<float, sycl::rounding_mode::automatic>();
-    const float d8d8 = tmp.x();
-    const float m8s8 = tmp.y();
-#else
-    const sycl::float2 dm8f =
-        dm8.convert<float, sycl::rounding_mode::automatic>();
-    const sycl::float2 ds8f =
-        ds8.convert<float, sycl::rounding_mode::automatic>();
-    const float d8d8 = dm8f.x() * ds8f.x();
-    const float m8s8 = dm8f.y() * ds8f.y();
-#endif // GGML_SYCL_F16
-
-    // scale second part of sum by QI8_1/ vdr to compensate for multiple threads adding it
-    return sumi*d8d8 + m8s8 / (QI8_1 / vdr);
-}
-
-#define VDR_Q2_K_Q8_1_MMVQ 1
-#define VDR_Q2_K_Q8_1_MMQ  2
-
-// contiguous v/x values
-static __dpct_inline__ float vec_dot_q2_K_q8_1_impl_mmvq(
-    const int &v, const int *__restrict__ u, const uint8_t *__restrict__ scales,
-    const sycl::half2 &dm2, const float *__restrict__ d8) {
-
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR2_K; ++i) {
-        const int sc = scales[2*i];
-
-        const int vi = (v >> (2*i)) & 0x03030303;
-
-        sumf_d +=
-            d8[i] * (dpct::dp4a(vi, u[i], 0) * (sc & 0xF)); // SIMD dot product
-
-        // fill int with 4x m
-        int m = sc >> 4;
-        m |= m <<  8;
-        m |= m << 16;
-        sumf_m += d8[i] *
-                  dpct::dp4a(
-                      m, u[i],
-                      0); // multiply constant q2_K part with sum of q8_1 values
-    }
-
-    const sycl::float2 dm2f =
-        dm2.convert<float, sycl::rounding_mode::automatic>();
-
-    return dm2f.x() * sumf_d - dm2f.y() * sumf_m;
-}
-
-// contiguous u/y values
-static __dpct_inline__ float
-vec_dot_q2_K_q8_1_impl_mmq(const int *__restrict__ v, const int *__restrict__ u,
-                           const uint8_t *__restrict__ scales,
-                           const sycl::half2 &dm2, const float &d8) {
-
-    int sumi_d = 0;
-    int sumi_m = 0;
-
-#pragma unroll
-    for (int i0 = 0; i0 < QI8_1; i0 += QI8_1/2) {
-        int sumi_d_sc = 0;
-
-        const int sc = scales[i0 / (QI8_1/2)];
-
-        // fill int with 4x m
-        int m = sc >> 4;
-        m |= m <<  8;
-        m |= m << 16;
-
-#pragma unroll
-        for (int i = i0; i < i0 + QI8_1/2; ++i) {
-            sumi_d_sc = dpct::dp4a(v[i], u[i], sumi_d_sc); // SIMD dot product
-            sumi_m = dpct::dp4a(m, u[i],
-                                sumi_m); // multiply sum of q8_1 values with m
-        }
-
-        sumi_d += sumi_d_sc * (sc & 0xF);
-    }
-
-    const sycl::float2 dm2f =
-        dm2.convert<float, sycl::rounding_mode::automatic>();
-
-    return d8 * (dm2f.x() * sumi_d - dm2f.y() * sumi_m);
-}
-
-#define VDR_Q3_K_Q8_1_MMVQ 1
-#define VDR_Q3_K_Q8_1_MMQ  2
-
-// contiguous v/x values
-static __dpct_inline__ float vec_dot_q3_K_q8_1_impl_mmvq(
-    const int &vl, const int &vh, const int *__restrict__ u,
-    const uint8_t *__restrict__ scales, const int &scale_offset,
-    const float &d3, const float *__restrict__ d8) {
-
-    float sumf = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR3_K; ++i) {
-        const int isc = scale_offset + 2*i;
-
-        const int isc_low = isc % (QK_K/32);
-        const int sc_shift_low = 4 * (isc / (QK_K/32));
-        const int sc_low  = (scales[isc_low] >> sc_shift_low) & 0xF;
-
-        const int isc_high = isc % (QK_K/64);
-        const int sc_shift_high = 2 * (isc / (QK_K/64));
-        const int sc_high = ((scales[(QK_K/32) + isc_high] >> sc_shift_high) & 3) << 4;
-
-        const int sc = (sc_low | sc_high) - 32;
-
-        const int vil = (vl >> (2*i)) & 0x03030303;
-
-        const int vih = ((vh >> i) << 2) & 0x04040404;
-
-        const int vi =
-            dpct::vectorized_binary<sycl::char4>(vil, vih, dpct::sub_sat());
-
-        sumf += d8[i] * (dpct::dp4a(vi, u[i], 0) * sc); // SIMD dot product
-    }
-
-    return d3 * sumf;
-}
-
-// contiguous u/y values
-static __dpct_inline__ float
-vec_dot_q3_K_q8_1_impl_mmq(const int *__restrict__ v, const int *__restrict__ u,
-                           const int8_t *__restrict__ scales, const float &d3,
-                           const float &d8) {
-
-    int sumi = 0;
-
-#pragma unroll
-    for (int i0 = 0; i0 < QR3_K*VDR_Q3_K_Q8_1_MMQ; i0 += QI8_1/2) {
-        int sumi_sc = 0;
-
-        for (int i = i0; i < i0 + QI8_1/2; ++i) {
-            sumi_sc = dpct::dp4a(v[i], u[i], sumi_sc); // SIMD dot product
-        }
-
-        sumi += sumi_sc * scales[i0 / (QI8_1/2)];
-    }
-
-    return d3*d8 * sumi;
-}
-
-#define VDR_Q4_K_Q8_1_MMVQ 2
-#define VDR_Q4_K_Q8_1_MMQ  8
-
-// contiguous v/x values
-static __dpct_inline__ float vec_dot_q4_K_q8_1_impl_vmmq(
-    const int *__restrict__ v, const int *__restrict__ u,
-    const uint8_t *__restrict__ sc, const uint8_t *__restrict__ m,
-    const sycl::half2 &dm4, const float *__restrict__ d8) {
-
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR4_K; ++i) {
-        const int v0i = (v[0] >> (4*i)) & 0x0F0F0F0F;
-        const int v1i = (v[1] >> (4*i)) & 0x0F0F0F0F;
-
-        const int dot1 =
-            dpct::dp4a(v1i, u[2 * i + 1],
-                       dpct::dp4a(v0i, u[2 * i + 0], 0)); // SIMD dot product
-        const int dot2 =
-            dpct::dp4a(0x01010101, u[2 * i + 1],
-                       dpct::dp4a(0x01010101, u[2 * i + 0], 0)); // sum of u
-
-        sumf_d += d8[i] * (dot1 * sc[i]);
-        sumf_m += d8[i] * (dot2 * m[i]);  // multiply constant part of q4_K with sum of q8_1 values
-    }
-
-    const sycl::float2 dm4f =
-        dm4.convert<float, sycl::rounding_mode::automatic>();
-
-    return dm4f.x() * sumf_d - dm4f.y() * sumf_m;
-}
-
-// contiguous u/y values
-static __dpct_inline__ float vec_dot_q4_K_q8_1_impl_mmq(
-    const int *__restrict__ v, const int *__restrict__ u,
-    const uint8_t *__restrict__ sc, const uint8_t *__restrict__ m,
-    const sycl::half2 &dm4, const sycl::half2 *__restrict__ ds8) {
-
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR4_K*VDR_Q4_K_Q8_1_MMQ/QI8_1; ++i) {
-        int sumi_d = 0;
-
-#pragma unroll
-        for (int j = 0; j < QI8_1; ++j) {
-            sumi_d = dpct::dp4a((v[j] >> (4 * i)) & 0x0F0F0F0F,
-                                u[i * QI8_1 + j], sumi_d); // SIMD dot product
-        }
-
-        const sycl::float2 ds8f =
-            ds8[i].convert<float, sycl::rounding_mode::automatic>();
-
-        sumf_d += ds8f.x() * (sc[i] * sumi_d);
-        sumf_m += ds8f.y() * m[i]; // sum of q8_1 block * q4_K min val
-    }
-
-    const sycl::float2 dm4f =
-        dm4.convert<float, sycl::rounding_mode::automatic>();
-
-    return dm4f.x() * sumf_d - dm4f.y() * sumf_m;
-}
-
-#define VDR_Q5_K_Q8_1_MMVQ 2
-#define VDR_Q5_K_Q8_1_MMQ  8
-
-// contiguous v/x values
-static __dpct_inline__ float vec_dot_q5_K_q8_1_impl_vmmq(
-    const int *__restrict__ vl, const int *__restrict__ vh,
-    const int *__restrict__ u, const uint8_t *__restrict__ sc,
-    const uint8_t *__restrict__ m, const sycl::half2 &dm5,
-    const float *__restrict__ d8) {
-
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR5_K; ++i) {
-        const int vl0i = (vl[0] >> (4*i)) & 0x0F0F0F0F;
-        const int vl1i = (vl[1] >> (4*i)) & 0x0F0F0F0F;
-
-        const int vh0i = ((vh[0] >> i) << 4) & 0x10101010;
-        const int vh1i = ((vh[1] >> i) << 4) & 0x10101010;
-
-        const int v0i = vl0i | vh0i;
-        const int v1i = vl1i | vh1i;
-
-        const int dot1 =
-            dpct::dp4a(v0i, u[2 * i + 0],
-                       dpct::dp4a(v1i, u[2 * i + 1], 0)); // SIMD dot product
-        const int dot2 =
-            dpct::dp4a(0x01010101, u[2 * i + 0],
-                       dpct::dp4a(0x01010101, u[2 * i + 1], 0)); // sum of u
-
-        sumf_d += d8[i] * (dot1 * sc[i]);
-        sumf_m += d8[i] * (dot2 * m[i]);
-
-    }
-
-    const sycl::float2 dm5f =
-        dm5.convert<float, sycl::rounding_mode::automatic>();
-
-    return dm5f.x() * sumf_d - dm5f.y() * sumf_m;
-}
-
-// contiguous u/y values
-static __dpct_inline__ float vec_dot_q5_K_q8_1_impl_mmq(
-    const int *__restrict__ v, const int *__restrict__ u,
-    const uint8_t *__restrict__ sc, const uint8_t *__restrict__ m,
-    const sycl::half2 &dm4, const sycl::half2 *__restrict__ ds8) {
-
-    float sumf_d = 0.0f;
-    float sumf_m = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR5_K*VDR_Q5_K_Q8_1_MMQ/QI8_1; ++i) {
-        int sumi_d = 0;
-
-#pragma unroll
-        for (int j = 0; j < QI8_1; ++j) {
-            sumi_d = dpct::dp4a(v[i * QI8_1 + j], u[i * QI8_1 + j],
-                                sumi_d); // SIMD dot product
-        }
-
-        const sycl::float2 ds8f =
-            ds8[i].convert<float, sycl::rounding_mode::automatic>();
-
-        sumf_d += ds8f.x() * (sc[i] * sumi_d);
-        sumf_m += ds8f.y() * m[i]; // sum of q8_1 block * q4_K min val
-    }
-
-    const sycl::float2 dm4f =
-        dm4.convert<float, sycl::rounding_mode::automatic>();
-
-    return dm4f.x() * sumf_d - dm4f.y() * sumf_m;
-}
-
-#define VDR_Q6_K_Q8_1_MMVQ 1
-#define VDR_Q6_K_Q8_1_MMQ  8
-
-// contiguous v/x values
-static __dpct_inline__ float
-vec_dot_q6_K_q8_1_impl_mmvq(const int &vl, const int &vh,
-                            const int *__restrict__ u,
-                            const int8_t *__restrict__ scales, const float &d,
-                            const float *__restrict__ d8) {
-
-    float sumf = 0.0f;
-
-#pragma unroll
-    for (int i = 0; i < QR6_K; ++i) {
-        const int sc = scales[4*i];
-
-        const int vil = (vl >> (4*i)) & 0x0F0F0F0F;
-
-        const int vih = ((vh >> (4*i)) << 4) & 0x30303030;
-
-        const int vi = dpct::vectorized_binary<sycl::char4>(
-            (vil | vih), 0x20202020, dpct::sub_sat()); // vi = (vil | vih) - 32
-
-        sumf += d8[i] * (dpct::dp4a(vi, u[i], 0) * sc); // SIMD dot product
-    }
-
-    return d*sumf;
-}
-
-// contiguous u/y values
-static __dpct_inline__ float
-vec_dot_q6_K_q8_1_impl_mmq(const int *__restrict__ v, const int *__restrict__ u,
-                           const int8_t *__restrict__ sc, const float &d6,
-                           const float *__restrict__ d8) {
-
-    float sumf_d = 0.0f;
-
-#pragma unroll
-    for (int i0 = 0; i0 < VDR_Q6_K_Q8_1_MMQ; i0 += 4) {
-        sycl::int2 sumi_d = {0, 0}; // 2 q6_K scales per q8_1 scale
-
-#pragma unroll
-        for (int i = i0; i < i0 + 2; ++i) {
-            sumi_d.x() = dpct::dp4a(v[2 * i + 0], u[2 * i + 0],
-                                    sumi_d.x()); // SIMD dot product
-            sumi_d.x() = dpct::dp4a(v[2 * i + 1], u[2 * i + 1],
-                                    sumi_d.x()); // SIMD dot product
-
-            sumi_d.y() = dpct::dp4a(v[2 * i + 4], u[2 * i + 4],
-                                    sumi_d.y()); // SIMD dot product
-            sumi_d.y() = dpct::dp4a(v[2 * i + 5], u[2 * i + 5],
-                                    sumi_d.y()); // SIMD dot product
-        }
-
-        sumf_d += d8[i0 / 4] *
-                  (sc[i0 / 2 + 0] * sumi_d.x() + sc[i0 / 2 + 1] * sumi_d.y());
-    }
-
-    return d6 * sumf_d;
-}
-
-static __dpct_inline__ float
-vec_dot_q4_0_q8_1(const void *__restrict__ vbq,
-                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_q4_0 * bq4_0 = (const block_q4_0 *) vbq;
-
-    int v[VDR_Q4_0_Q8_1_MMVQ];
-    int u[2*VDR_Q4_0_Q8_1_MMVQ];
-
-#pragma unroll
-    for (int i = 0; i < VDR_Q4_0_Q8_1_MMVQ; ++i) {
-        v[i]     = get_int_from_uint8(bq4_0->qs, iqs + i);
-        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
-        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_0);
-    }
-
-    return vec_dot_q4_0_q8_1_impl<VDR_Q4_0_Q8_1_MMVQ>(v, u, bq4_0->d, bq8_1->ds);
-}
-
-template <int mmq_y>
-static __dpct_inline__ void
-allocate_tiles_q4_0(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
-                    int *tile_x_qs_q4_0, float *tile_x_d_q4_0) {
-    (void)x_qh; (void)x_sc;
-
-    *x_ql = tile_x_qs_q4_0;
-    *x_dm = (sycl::half2 *)tile_x_d_q4_0;
-}
-
-template <int mmq_y, int nwarps, bool need_check>
-static __dpct_inline__ void
-load_tiles_q4_0(const void *__restrict__ vx, int *__restrict__ x_ql,
-                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
-                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
-                const int &k, const int &blocks_per_row) {
-    (void)x_qh; (void)x_sc;
-    GGML_SYCL_ASSUME(i_offset >= 0);
-    GGML_SYCL_ASSUME(i_offset <  nwarps);
-    GGML_SYCL_ASSUME(k >= 0);
-    GGML_SYCL_ASSUME(k <  WARP_SIZE);
-
-    const int kbx  = k / QI4_0;
-    const int kqsx = k % QI4_0;
-
-    const block_q4_0 * bx0 = (const block_q4_0 *) vx;
-
-    float * x_dmf = (float *) x_dm;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + i_offset;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q4_0 * bxi = bx0 + i*blocks_per_row + kbx;
-
-        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8(bxi->qs, kqsx);
-        // x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbx] = bxi->d;
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI4_0;
-    const int kbxd = k % blocks_per_tile_x_row;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_0) {
-        int i = i0 + i_offset * QI4_0 + k / blocks_per_tile_x_row;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q4_0 * bxi = bx0 + i*blocks_per_row + kbxd;
-
-        x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbxd] = bxi->d;
-    }
-}
-
-static __dpct_inline__ float vec_dot_q4_0_q8_1_mul_mat(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
-    const int &i, const int &j, const int &k) {
-    (void)x_qh; (void)x_sc;
-
-    const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2));
-    const float * x_dmf = (const float *) x_dm;
-
-    int u[2*VDR_Q4_0_Q8_1_MMQ];
-
-#pragma unroll
-    for (int l = 0; l < VDR_Q4_0_Q8_1_MMQ; ++l) {
-        u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l)         % WARP_SIZE];
-        u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI4_0) % WARP_SIZE];
-    }
-
-    return vec_dot_q4_0_q8_1_impl<VDR_Q4_0_Q8_1_MMQ>
-        (&x_ql[i * (WARP_SIZE + 1) + k], u, x_dmf[i * (WARP_SIZE/QI4_0) + i/QI4_0 + k/QI4_0],
-         y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]);
-}
-
-static __dpct_inline__ float
-vec_dot_q4_1_q8_1(const void *__restrict__ vbq,
-                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_q4_1 * bq4_1 = (const block_q4_1 *) vbq;
-
-    int v[VDR_Q4_1_Q8_1_MMVQ];
-    int u[2*VDR_Q4_1_Q8_1_MMVQ];
-
-#pragma unroll
-    for (int i = 0; i < VDR_Q4_1_Q8_1_MMVQ; ++i) {
-        v[i]    = get_int_from_uint8_aligned(bq4_1->qs, iqs + i);
-        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
-        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_1);
-    }
-
-    return vec_dot_q4_1_q8_1_impl<VDR_Q4_1_Q8_1_MMVQ>(v, u, bq4_1->dm, bq8_1->ds);
-}
-
-template <int mmq_y>
-static __dpct_inline__ void
-allocate_tiles_q4_1(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
-                    int *tile_x_qs_q4_1, sycl::half2 *tile_x_dm_q4_1) {
-    (void)x_qh; (void)x_sc;
-
-    *x_ql = tile_x_qs_q4_1;
-    *x_dm = tile_x_dm_q4_1;
-}
-
-template <int mmq_y, int nwarps, bool need_check>
-static __dpct_inline__ void
-load_tiles_q4_1(const void *__restrict__ vx, int *__restrict__ x_ql,
-                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
-                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
-                const int &k, const int &blocks_per_row) {
-    (void)x_qh; (void)x_sc;
-
-    GGML_SYCL_ASSUME(i_offset >= 0);
-    GGML_SYCL_ASSUME(i_offset <  nwarps);
-    GGML_SYCL_ASSUME(k >= 0);
-    GGML_SYCL_ASSUME(k <  WARP_SIZE);
-
-    const int kbx  = k / QI4_1;
-    const int kqsx = k % QI4_1;
-
-    const block_q4_1 * bx0 = (const block_q4_1 *) vx;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + i_offset;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q4_1 * bxi = bx0 + i*blocks_per_row + kbx;
-
-        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx);
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI4_1;
-    const int kbxd = k % blocks_per_tile_x_row;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_1) {
-        int i = i0 + i_offset * QI4_1 + k / blocks_per_tile_x_row;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q4_1 * bxi = bx0 + i*blocks_per_row + kbxd;
-
-        x_dm[i * (WARP_SIZE/QI4_1) + i / QI4_1 + kbxd] = bxi->dm;
-    }
-}
-
-static __dpct_inline__ float vec_dot_q4_1_q8_1_mul_mat(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
-    const int &i, const int &j, const int &k) {
-    (void)x_qh; (void)x_sc;
-
-    const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2));
-
-    int u[2*VDR_Q4_1_Q8_1_MMQ];
-
-#pragma unroll
-    for (int l = 0; l < VDR_Q4_1_Q8_1_MMQ; ++l) {
-        u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l)         % WARP_SIZE];
-        u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI4_1) % WARP_SIZE];
-    }
-
-    return vec_dot_q4_1_q8_1_impl<VDR_Q4_1_Q8_1_MMQ>
-        (&x_ql[i * (WARP_SIZE + 1) + k], u, x_dm[i * (WARP_SIZE/QI4_1) + i/QI4_1 + k/QI4_1],
-         y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]);
-}
-
-static __dpct_inline__ float
-vec_dot_q5_0_q8_1(const void *__restrict__ vbq,
-                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_q5_0 * bq5_0 = (const block_q5_0 *) vbq;
-
-    int vl[VDR_Q5_0_Q8_1_MMVQ];
-    int vh[VDR_Q5_0_Q8_1_MMVQ];
-    int  u[2*VDR_Q5_0_Q8_1_MMVQ];
-
-#pragma unroll
-    for (int i = 0; i < VDR_Q5_0_Q8_1_MMVQ; ++i) {
-        vl[i]    = get_int_from_uint8(bq5_0->qs, iqs + i);
-        vh[i]    = get_int_from_uint8(bq5_0->qh, 0) >> (4 * (iqs + i));
-        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
-        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_0);
-    }
-
-    return vec_dot_q5_0_q8_1_impl<VDR_Q5_0_Q8_1_MMVQ>(vl, vh, u, bq5_0->d, bq8_1->ds);
-}
-
-template <int mmq_y>
-static __dpct_inline__ void
-allocate_tiles_q5_0(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
-                    int *tile_x_ql_q5_0, float *tile_x_d_q5_0) {
-    (void)x_qh; (void)x_sc;
-
-    *x_ql = tile_x_ql_q5_0;
-    *x_dm = (sycl::half2 *)tile_x_d_q5_0;
-}
-
-template <int mmq_y, int nwarps, bool need_check>
-static __dpct_inline__ void
-load_tiles_q5_0(const void *__restrict__ vx, int *__restrict__ x_ql,
-                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
-                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
-                const int &k, const int &blocks_per_row) {
-    (void)x_qh; (void)x_sc;
-
-    GGML_SYCL_ASSUME(i_offset >= 0);
-    GGML_SYCL_ASSUME(i_offset <  nwarps);
-    GGML_SYCL_ASSUME(k >= 0);
-    GGML_SYCL_ASSUME(k <  WARP_SIZE);
-
-    const int kbx  = k / QI5_0;
-    const int kqsx = k % QI5_0;
-
-    const block_q5_0 * bx0 = (const block_q5_0 *) vx;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + i_offset;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q5_0 * bxi = bx0 + i*blocks_per_row + kbx;
-
-        const int ql = get_int_from_uint8(bxi->qs, kqsx);
-        const int qh = get_int_from_uint8(bxi->qh, 0) >> (4 * (k % QI5_0));
-
-        int qs0 = (ql >>  0)   & 0x0F0F0F0F;
-        qs0    |= (qh <<  4)   & 0x00000010;  // 0 ->  4
-        qs0    |= (qh << 11)   & 0x00001000;  // 1 -> 12
-        qs0    |= (qh << 18)   & 0x00100000;  // 2 -> 20
-        qs0    |= (qh << 25)   & 0x10000000;  // 3 -> 28
-        qs0 = dpct::vectorized_binary<sycl::char4>(
-            qs0, 0x10101010, dpct::sub_sat()); // subtract 16
-
-        x_ql[i * (2*WARP_SIZE + 1) + 2*k+0] = qs0;
-
-        int qs1 = (ql >>  4)   & 0x0F0F0F0F;
-        qs1    |= (qh >> 12)   & 0x00000010;  // 16 ->  4
-        qs1    |= (qh >>  5)   & 0x00001000;  // 17 -> 12
-        qs1    |= (qh <<  2)   & 0x00100000;  // 18 -> 20
-        qs1    |= (qh <<  9)   & 0x10000000;  // 19 -> 28
-        qs1 = dpct::vectorized_binary<sycl::char4>(
-            qs1, 0x10101010, dpct::sub_sat()); // subtract 16
-
-        x_ql[i * (2*WARP_SIZE + 1) + 2*k+1] = qs1;
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI5_0;
-    const int kbxd = k % blocks_per_tile_x_row;
-    float * x_dmf = (float *) x_dm;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_0) {
-        int i = i0 + i_offset * QI5_0 + k / blocks_per_tile_x_row;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q5_0 * bxi = bx0 + i*blocks_per_row + kbxd;
-
-        x_dmf[i * (WARP_SIZE/QI5_0) + i / QI5_0 + kbxd] = bxi->d;
-    }
-}
-
-static __dpct_inline__ float vec_dot_q5_0_q8_1_mul_mat(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
-    const int &i, const int &j, const int &k) {
-    (void)x_qh; (void)x_sc;
-
-    const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2));
-    const int index_bx = i * (WARP_SIZE/QI5_0) + i/QI5_0 + k/QI5_0;
-    const float * x_dmf = (const float *) x_dm;
-    const float * y_df  = (const float *) y_ds;
-
-    int u[2*VDR_Q5_0_Q8_1_MMQ];
-
-#pragma unroll
-    for (int l = 0; l < VDR_Q5_0_Q8_1_MMQ; ++l) {
-        u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l)         % WARP_SIZE];
-        u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI5_0) % WARP_SIZE];
-    }
-
-    return vec_dot_q8_0_q8_1_impl<QR5_0*VDR_Q5_0_Q8_1_MMQ>
-        (&x_ql[i * (2*WARP_SIZE + 1) + 2 * k], u, x_dmf[index_bx], y_df[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]);
-}
-
-static __dpct_inline__ float
-vec_dot_q5_1_q8_1(const void *__restrict__ vbq,
-                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_q5_1 * bq5_1 = (const block_q5_1 *) vbq;
-
-    int vl[VDR_Q5_1_Q8_1_MMVQ];
-    int vh[VDR_Q5_1_Q8_1_MMVQ];
-    int  u[2*VDR_Q5_1_Q8_1_MMVQ];
-
-#pragma unroll
-    for (int i = 0; i < VDR_Q5_1_Q8_1_MMVQ; ++i) {
-        vl[i]   = get_int_from_uint8_aligned(bq5_1->qs, iqs + i);
-        vh[i]   = get_int_from_uint8_aligned(bq5_1->qh, 0) >> (4 * (iqs + i));
-        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
-        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_1);
-    }
-
-    return vec_dot_q5_1_q8_1_impl<VDR_Q5_1_Q8_1_MMVQ>(vl, vh, u, bq5_1->dm, bq8_1->ds);
-}
-
-template <int mmq_y>
-static __dpct_inline__ void
-allocate_tiles_q5_1(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
-                    int *tile_x_ql_q5_1, sycl::half2 *tile_x_dm_q5_1) {
-    (void)x_qh; (void)x_sc;
-
-    *x_ql = tile_x_ql_q5_1;
-    *x_dm = tile_x_dm_q5_1;
-}
-
-template <int mmq_y, int nwarps, bool need_check>
-static __dpct_inline__ void
-load_tiles_q5_1(const void *__restrict__ vx, int *__restrict__ x_ql,
-                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
-                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
-                const int &k, const int &blocks_per_row) {
-    (void)x_qh; (void)x_sc;
-
-    GGML_SYCL_ASSUME(i_offset >= 0);
-    GGML_SYCL_ASSUME(i_offset < nwarps);
-    GGML_SYCL_ASSUME(k >= 0);
-    GGML_SYCL_ASSUME(k <  WARP_SIZE);
-
-    const int kbx  = k / QI5_1;
-    const int kqsx = k % QI5_1;
-
-    const block_q5_1 * bx0 = (const block_q5_1 *) vx;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + i_offset;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q5_1 * bxi = bx0 + i*blocks_per_row + kbx;
-
-        const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx);
-        const int qh = get_int_from_uint8_aligned(bxi->qh, 0) >> (4 * (k % QI5_1));
-
-        int qs0 = (ql >>  0) & 0x0F0F0F0F;
-        qs0    |= (qh <<  4) & 0x00000010; // 0 ->  4
-        qs0    |= (qh << 11) & 0x00001000; // 1 -> 12
-        qs0    |= (qh << 18) & 0x00100000; // 2 -> 20
-        qs0    |= (qh << 25) & 0x10000000; // 3 -> 28
-
-        x_ql[i * (2*WARP_SIZE + 1) + 2*k+0] = qs0;
-
-        int qs1 = (ql >>  4) & 0x0F0F0F0F;
-        qs1    |= (qh >> 12) & 0x00000010; // 16 ->  4
-        qs1    |= (qh >>  5) & 0x00001000; // 17 -> 12
-        qs1    |= (qh <<  2) & 0x00100000; // 18 -> 20
-        qs1    |= (qh <<  9) & 0x10000000; // 19 -> 28
-
-        x_ql[i * (2*WARP_SIZE + 1) + 2*k+1] = qs1;
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI5_1;
-    const int kbxd = k % blocks_per_tile_x_row;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_1) {
-        int i = i0 + i_offset * QI5_1 + k / blocks_per_tile_x_row;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q5_1 * bxi = bx0 + i*blocks_per_row + kbxd;
-
-        x_dm[i * (WARP_SIZE/QI5_1) + i / QI5_1 + kbxd] = bxi->dm;
-    }
-}
-
-static __dpct_inline__ float vec_dot_q5_1_q8_1_mul_mat(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
-    const int &i, const int &j, const int &k) {
-    (void)x_qh; (void)x_sc;
-
-    const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2));
-    const int index_bx = i * (WARP_SIZE/QI5_1) + + i/QI5_1 + k/QI5_1;
-
-    int u[2*VDR_Q5_1_Q8_1_MMQ];
-
-#pragma unroll
-    for (int l = 0; l < VDR_Q5_1_Q8_1_MMQ; ++l) {
-        u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l)         % WARP_SIZE];
-        u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI5_1) % WARP_SIZE];
-    }
-
-    return vec_dot_q8_1_q8_1_impl<QR5_1*VDR_Q5_1_Q8_1_MMQ>
-        (&x_ql[i * (2*WARP_SIZE + 1) + 2 * k], u, x_dm[index_bx], y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]);
-}
-
-static __dpct_inline__ float
-vec_dot_q8_0_q8_1(const void *__restrict__ vbq,
-                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_q8_0 * bq8_0 = (const block_q8_0 *) vbq;
-
-    int v[VDR_Q8_0_Q8_1_MMVQ];
-    int u[VDR_Q8_0_Q8_1_MMVQ];
-
-#pragma unroll
-    for (int i = 0; i < VDR_Q8_0_Q8_1_MMVQ; ++i) {
-        v[i] = get_int_from_int8(bq8_0->qs, iqs + i);
-        u[i] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
-    }
-
-    return vec_dot_q8_0_q8_1_impl<VDR_Q8_0_Q8_1_MMVQ>(v, u, bq8_0->d,
-                                                      bq8_1->ds[0]);
-}
-
-template <int mmq_y>
-static __dpct_inline__ void
-allocate_tiles_q8_0(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
-                    int *tile_x_qs_q8_0, float *tile_x_d_q8_0) {
-    (void)x_qh; (void)x_sc;
-
-    *x_ql = tile_x_qs_q8_0;
-    *x_dm = (sycl::half2 *)tile_x_d_q8_0;
-}
-
-template <int mmq_y, int nwarps, bool need_check>
-static __dpct_inline__ void
-load_tiles_q8_0(const void *__restrict__ vx, int *__restrict__ x_ql,
-                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
-                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
-                const int &k, const int &blocks_per_row) {
-    (void)x_qh; (void)x_sc;
-
-    GGML_SYCL_ASSUME(i_offset >= 0);
-    GGML_SYCL_ASSUME(i_offset <  nwarps);
-    GGML_SYCL_ASSUME(k >= 0);
-    GGML_SYCL_ASSUME(k <  WARP_SIZE);
-
-    const int kbx  = k / QI8_0;
-    const int kqsx = k % QI8_0;
-    float * x_dmf = (float *) x_dm;
-
-    const block_q8_0 * bx0 = (const block_q8_0 *) vx;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + i_offset;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q8_0 * bxi = bx0 + i*blocks_per_row + kbx;
-
-        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_int8(bxi->qs, kqsx);
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI8_0;
-    const int kbxd = k % blocks_per_tile_x_row;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI8_0) {
-        int i = i0 + i_offset * QI8_0 + k / blocks_per_tile_x_row;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q8_0 * bxi = bx0 + i*blocks_per_row + kbxd;
-
-        x_dmf[i * (WARP_SIZE/QI8_0) + i / QI8_0 + kbxd] = bxi->d;
-    }
-}
-
-static __dpct_inline__ float vec_dot_q8_0_q8_1_mul_mat(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
-    const int &i, const int &j, const int &k) {
-    (void)x_qh; (void)x_sc;
-
-    const float * x_dmf = (const float *) x_dm;
-    const float * y_df  = (const float *) y_ds;
-
-    return vec_dot_q8_0_q8_1_impl<VDR_Q8_0_Q8_1_MMQ>
-        (&x_ql[i * (WARP_SIZE + 1) + k], &y_qs[j * WARP_SIZE + k], x_dmf[i * (WARP_SIZE/QI8_0) + i/QI8_0 + k/QI8_0],
-         y_df[j * (WARP_SIZE/QI8_1) + k/QI8_1]);
-}
-
-static __dpct_inline__ float
-vec_dot_q2_K_q8_1(const void *__restrict__ vbq,
-                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_q2_K * bq2_K = (const block_q2_K *) vbq;
-
-    const int bq8_offset = QR2_K * (iqs / QI8_1);
-    const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2);
-
-    const uint8_t * scales = bq2_K->scales + scale_offset;
-
-    const int v = get_int_from_uint8_aligned(bq2_K->qs, iqs);
-    int    u[QR2_K];
-    float d8[QR2_K];
-
-#pragma unroll
-    for (int i = 0; i < QR2_K; ++ i) {
-        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1);
-        d8[i] = bq8_1[bq8_offset + i].ds[0];
-    }
-
-    return vec_dot_q2_K_q8_1_impl_mmvq(v, u, scales, bq2_K->dm, d8);
-}
-
-template <int mmq_y>
-static __dpct_inline__ void
-allocate_tiles_q2_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
-                    int *tile_x_ql_q2_K, sycl::half2 *tile_x_dm_q2_K,
-                    int *tile_x_sc_q2_K) {
-    (void)x_qh;
-
-    *x_ql = tile_x_ql_q2_K;
-    *x_dm = tile_x_dm_q2_K;
-    *x_sc = tile_x_sc_q2_K;
-}
-
-template <int mmq_y, int nwarps, bool need_check>
-static __dpct_inline__ void
-load_tiles_q2_K(const void *__restrict__ vx, int *__restrict__ x_ql,
-                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
-                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
-                const int &k, const int &blocks_per_row) {
-    (void)x_qh;
-
-    GGML_SYCL_ASSUME(i_offset >= 0);
-    GGML_SYCL_ASSUME(i_offset <  nwarps);
-    GGML_SYCL_ASSUME(k >= 0);
-    GGML_SYCL_ASSUME(k <  WARP_SIZE);
-
-    const int kbx  = k / QI2_K;
-    const int kqsx = k % QI2_K;
-
-    const block_q2_K * bx0 = (const block_q2_K *) vx;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + i_offset;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q2_K * bxi = bx0 + i*blocks_per_row + kbx;
-
-        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx);
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI2_K;
-    const int kbxd = k % blocks_per_tile_x_row;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI2_K) {
-        int i = (i0 + i_offset * QI2_K + k / blocks_per_tile_x_row) % mmq_y;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q2_K * bxi = bx0 + i*blocks_per_row + kbxd;
-
-        x_dm[i * (WARP_SIZE/QI2_K) + i / QI2_K + kbxd] = bxi->dm;
-    }
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) {
-        int i = i0 + i_offset * 4 + k / (WARP_SIZE/4);
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q2_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/4)) / (QI2_K/4);
-
-        x_sc[i * (WARP_SIZE/4) + i / 4 + k % (WARP_SIZE/4)] = get_int_from_uint8_aligned(bxi->scales, k % (QI2_K/4));
-    }
-}
-
-static __dpct_inline__ float vec_dot_q2_K_q8_1_mul_mat(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
-    const int &i, const int &j, const int &k) {
-    (void)x_qh;
-
-    const int kbx = k / QI2_K;
-    const int ky  = (k % QI2_K) * QR2_K;
-    const float * y_df = (const float *) y_ds;
-
-    int v[QR2_K*VDR_Q2_K_Q8_1_MMQ];
-
-    const int kqsx = i * (WARP_SIZE + 1) + kbx*QI2_K + (QI2_K/2) * (ky/(2*QI2_K)) + ky % (QI2_K/2);
-    const int shift = 2 * ((ky % (2*QI2_K)) / (QI2_K/2));
-
-#pragma unroll
-    for (int l = 0; l < QR2_K*VDR_Q2_K_Q8_1_MMQ; ++l) {
-        v[l] = (x_ql[kqsx + l] >> shift) & 0x03030303;
-    }
-
-    const uint8_t * scales = ((const uint8_t *) &x_sc[i * (WARP_SIZE/4) + i/4 + kbx*4]) + ky/4;
-
-    const int index_y = j * WARP_SIZE + (QR2_K*k) % WARP_SIZE;
-    return vec_dot_q2_K_q8_1_impl_mmq(v, &y_qs[index_y], scales, x_dm[i * (WARP_SIZE/QI2_K) + i/QI2_K + kbx], y_df[index_y/QI8_1]);
-}
-
-static __dpct_inline__ float
-vec_dot_q3_K_q8_1(const void *__restrict__ vbq,
-                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_q3_K * bq3_K = (const block_q3_K *) vbq;
-
-    const int bq8_offset = QR3_K * (iqs / (QI3_K/2));
-    const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2);
-
-    const float d = bq3_K->d;
-
-    const int vl = get_int_from_uint8(bq3_K->qs, iqs);
-
-    // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted
-    const int vh = ~get_int_from_uint8(bq3_K->hmask, iqs % (QI3_K/2)) >> bq8_offset;
-
-    int    u[QR3_K];
-    float d8[QR3_K];
-
-#pragma unroll
-    for (int i = 0; i < QR3_K; ++i) {
-        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1);
-        d8[i] = bq8_1[bq8_offset + i].ds[0];
-    }
-
-    return vec_dot_q3_K_q8_1_impl_mmvq(vl, vh, u, bq3_K->scales, scale_offset, d, d8);
-}
-
-template <int mmq_y>
-static __dpct_inline__ void
-allocate_tiles_q3_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
-                    int *tile_x_ql_q3_K, sycl::half2 *tile_x_dm_q3_K,
-                    int *tile_x_qh_q3_K, int *tile_x_sc_q3_K) {
-
-    *x_ql = tile_x_ql_q3_K;
-    *x_dm = tile_x_dm_q3_K;
-    *x_qh = tile_x_qh_q3_K;
-    *x_sc = tile_x_sc_q3_K;
-}
-
-template <int mmq_y, int nwarps, bool need_check>
-static __dpct_inline__ void
-load_tiles_q3_K(const void *__restrict__ vx, int *__restrict__ x_ql,
-                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
-                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
-                const int &k, const int &blocks_per_row) {
-
-    GGML_SYCL_ASSUME(i_offset >= 0);
-    GGML_SYCL_ASSUME(i_offset <  nwarps);
-    GGML_SYCL_ASSUME(k >= 0);
-    GGML_SYCL_ASSUME(k <  WARP_SIZE);
-
-    const int kbx  = k / QI3_K;
-    const int kqsx = k % QI3_K;
-
-    const block_q3_K * bx0 = (const block_q3_K *) vx;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + i_offset;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q3_K * bxi = bx0 + i*blocks_per_row + kbx;
-
-        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8(bxi->qs, kqsx);
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI3_K;
-    const int kbxd = k % blocks_per_tile_x_row;
-    float * x_dmf = (float *) x_dm;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI3_K) {
-        int i = (i0 + i_offset * QI3_K + k / blocks_per_tile_x_row) % mmq_y;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q3_K * bxi = bx0 + i*blocks_per_row + kbxd;
-
-        x_dmf[i * (WARP_SIZE/QI3_K) + i / QI3_K + kbxd] = bxi->d;
-    }
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 2) {
-        int i = i0 + i_offset * 2 + k / (WARP_SIZE/2);
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q3_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/2)) / (QI3_K/2);
-
-        // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted
-        x_qh[i * (WARP_SIZE/2) + i / 2 + k % (WARP_SIZE/2)] = ~get_int_from_uint8(bxi->hmask, k % (QI3_K/2));
-    }
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) {
-        int i = i0 + i_offset * 4 + k / (WARP_SIZE/4);
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q3_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/4)) / (QI3_K/4);
-
-        const int ksc = k % (QI3_K/4);
-
-        const int ksc_low = ksc % (QI3_K/8);
-        const int shift_low = 4 * (ksc / (QI3_K/8));
-        const int sc_low = (get_int_from_uint8(bxi->scales, ksc_low) >> shift_low) & 0x0F0F0F0F;
-
-        const int ksc_high = QI3_K/8;
-        const int shift_high = 2 * ksc;
-        const int sc_high = ((get_int_from_uint8(bxi->scales, ksc_high) >> shift_high) << 4) & 0x30303030;
-
-        const int sc = dpct::vectorized_binary<sycl::char4>(
-            sc_low | sc_high, 0x20202020, dpct::sub_sat());
-
-        x_sc[i * (WARP_SIZE/4) + i / 4 + k % (WARP_SIZE/4)] = sc;
-    }
-}
-
-static __dpct_inline__ float vec_dot_q3_K_q8_1_mul_mat(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
-    const int &i, const int &j, const int &k) {
-
-    const int kbx  = k / QI3_K;
-    const int ky  = (k % QI3_K) * QR3_K;
-    const float * x_dmf = (const float *) x_dm;
-    const float * y_df  = (const float *) y_ds;
-
-    const int8_t * scales = ((const int8_t *) (x_sc + i * (WARP_SIZE/4) + i/4 + kbx*4)) + ky/4;
-
-    int v[QR3_K*VDR_Q3_K_Q8_1_MMQ];
-
-#pragma unroll
-    for (int l = 0; l < QR3_K*VDR_Q3_K_Q8_1_MMQ; ++l) {
-        const int kqsx = i * (WARP_SIZE + 1) + kbx*QI3_K + (QI3_K/2) * (ky/(2*QI3_K)) + ky % (QI3_K/2);
-        const int shift = 2 * ((ky % 32) / 8);
-        const int vll = (x_ql[kqsx + l] >> shift) & 0x03030303;
-
-        const int vh = x_qh[i * (WARP_SIZE/2) + i/2 + kbx * (QI3_K/2) + (ky+l)%8] >> ((ky+l) / 8);
-        const int vlh = (vh << 2) & 0x04040404;
-
-        v[l] = dpct::vectorized_binary<sycl::char4>(vll, vlh, dpct::sub_sat());
-    }
-
-    const int index_y = j * WARP_SIZE + (k*QR3_K) % WARP_SIZE;
-    return vec_dot_q3_K_q8_1_impl_mmq(v, &y_qs[index_y], scales, x_dmf[i * (WARP_SIZE/QI3_K) + i/QI3_K + kbx], y_df[index_y/QI8_1]);
-}
-
-static __dpct_inline__ float
-vec_dot_q4_K_q8_1(const void *__restrict__ vbq,
-                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_q4_K * bq4_K = (const block_q4_K *) vbq;
-
-    int    v[2];
-    int    u[2*QR4_K];
-    float d8[QR4_K];
-
-    // iqs is in 0,2..30. bq8_offset = iqs/4 -> bq8_offset = 0, 2, 4, 6
-    const int bq8_offset = QR4_K * ((iqs/2) / (QI8_1/2));
-
-    // iqs = 0....3 -> bq8_offset = 0, want q4_offset = 0, 4, 8, 12
-    // iqs = 4....7 -> bq8_offset = 2, want q4_offset = 32, 36, 40, 44
-    // iqs = 8...11 -> bq8_offset = 4, want q4_offset = 64, 68, 72, 76
-    // iqs = 12..15 -> bq8_offset = 6, want q4_offset = 96, 100, 104, 108
-
-    const int * q4 = (const int *)(bq4_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4));
-    v[0] = q4[0];
-    v[1] = q4[4];
-
-    const uint16_t * scales = (const uint16_t *)bq4_K->scales;
-    uint16_t aux[2];
-    const int j = bq8_offset/2;
-    if (j < 2) {
-        aux[0] = scales[j+0] & 0x3f3f;
-        aux[1] = scales[j+2] & 0x3f3f;
-    } else {
-        aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2);
-        aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2);
-    }
-    const uint8_t * sc = (const uint8_t *)aux;
-    const uint8_t * m  = sc + 2;
-
-    for (int i = 0; i < QR4_K; ++i) {
-        const block_q8_1 * bq8i = bq8_1 + bq8_offset + i;
-        d8[i] = bq8i->ds[0];
-
-        const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4);
-        u[2*i+0] = q8[0];
-        u[2*i+1] = q8[4];
-    }
-
-    return vec_dot_q4_K_q8_1_impl_vmmq(v, u, sc, m, bq4_K->dm, d8);
-}
-
-template <int mmq_y>
-static __dpct_inline__ void
-allocate_tiles_q4_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
-                    int *tile_x_ql_q4_K, sycl::half2 *tile_x_dm_q4_K,
-                    int *tile_x_sc_q4_K) {
-    (void)x_qh;
-
-    *x_ql = tile_x_ql_q4_K;
-    *x_dm = tile_x_dm_q4_K;
-    *x_sc = tile_x_sc_q4_K;
-}
-
-template <int mmq_y, int nwarps, bool need_check>
-static __dpct_inline__ void
-load_tiles_q4_K(const void *__restrict__ vx, int *__restrict__ x_ql,
-                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
-                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
-                const int &k, const int &blocks_per_row) {
-    (void)x_qh;
-
-    GGML_SYCL_ASSUME(i_offset >= 0);
-    GGML_SYCL_ASSUME(i_offset <  nwarps);
-    GGML_SYCL_ASSUME(k >= 0);
-    GGML_SYCL_ASSUME(k <  WARP_SIZE);
-
-    const int kbx  = k / QI4_K; // == 0 if QK_K == 256
-    const int kqsx = k % QI4_K; // == k if QK_K == 256
-
-    const block_q4_K * bx0 = (const block_q4_K *) vx;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + i_offset;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q4_K * bxi = bx0 + i*blocks_per_row + kbx;
-
-        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx);
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI4_K; // == 1 if QK_K == 256
-    const int kbxd = k % blocks_per_tile_x_row;          // == 0 if QK_K == 256
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_K) {
-        int i = (i0 + i_offset * QI4_K + k / blocks_per_tile_x_row) % mmq_y;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q4_K * bxi = bx0 + i*blocks_per_row + kbxd;
-
-        x_dm[i * (WARP_SIZE/QI4_K) + i / QI4_K + kbxd] = bxi->dm;
-    }
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
-        int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q4_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / (QI4_K/8);
-
-        const int * scales = (const int *) bxi->scales;
-
-        const int ksc = k % (WARP_SIZE/8);
-
-        // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8
-        int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits
-        scales8    |= (scales[ksc/2]              >> (2 * (ksc % 2)))       & 0x30303030; // upper 2 bits
-
-        x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8;
-    }
-}
-
-static __dpct_inline__ float vec_dot_q4_K_q8_1_mul_mat(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
-    const int &i, const int &j, const int &k) {
-    (void)x_qh;
-
-    const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/16]) + 2*((k % 16) / 8);
-
-    const int index_y = j * WARP_SIZE + (QR4_K*k) % WARP_SIZE;
-    return vec_dot_q4_K_q8_1_impl_mmq(&x_ql[i * (WARP_SIZE + 1) + k], &y_qs[index_y], sc, sc+8,
-                                      x_dm[i * (WARP_SIZE/QI4_K) + i/QI4_K], &y_ds[index_y/QI8_1]);
-}
-
-static __dpct_inline__ float
-vec_dot_q5_K_q8_1(const void *__restrict__ vbq,
-                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_q5_K * bq5_K = (const block_q5_K *) vbq;
-
-    int   vl[2];
-    int   vh[2];
-    int    u[2*QR5_K];
-    float d8[QR5_K];
-
-    const int bq8_offset = QR5_K * ((iqs/2) / (QI8_1/2));
-    const int * ql = (const int *)(bq5_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4));
-    const int * qh = (const int *)(bq5_K->qh + 4 * ((iqs/2)%4));
-
-    vl[0] = ql[0];
-    vl[1] = ql[4];
-
-    vh[0] = qh[0] >> bq8_offset;
-    vh[1] = qh[4] >> bq8_offset;
-
-    const uint16_t * scales = (const uint16_t *)bq5_K->scales;
-    uint16_t aux[2];
-    const int j = bq8_offset/2;
-    if (j < 2) {
-        aux[0] = scales[j+0] & 0x3f3f;
-        aux[1] = scales[j+2] & 0x3f3f;
-    } else {
-        aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2);
-        aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2);
-    }
-    const uint8_t * sc = (const uint8_t *)aux;
-    const uint8_t * m  = sc + 2;
-
-#pragma unroll
-    for (int i = 0; i < QR5_K; ++i) {
-        const block_q8_1 * bq8i = bq8_1 + bq8_offset + i;
-        d8[i] = bq8i->ds[0];
-
-        const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4);
-        u[2*i+0] = q8[0];
-        u[2*i+1] = q8[4];
-    }
-
-    return vec_dot_q5_K_q8_1_impl_vmmq(vl, vh, u, sc, m, bq5_K->dm, d8);
-}
-
-template <int mmq_y>
-static __dpct_inline__ void
-allocate_tiles_q5_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
-                    int *tile_x_ql_q5_K, sycl::half2 *tile_x_dm_q5_K,
-                    int *tile_x_sc_q5_K) {
-    (void)x_qh;
-
-    *x_ql = tile_x_ql_q5_K;
-    *x_dm = tile_x_dm_q5_K;
-    *x_sc = tile_x_sc_q5_K;
-}
-
-template <int mmq_y, int nwarps, bool need_check>
-static __dpct_inline__ void
-load_tiles_q5_K(const void *__restrict__ vx, int *__restrict__ x_ql,
-                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
-                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
-                const int &k, const int &blocks_per_row) {
-    (void)x_qh;
-
-    GGML_SYCL_ASSUME(i_offset >= 0);
-    GGML_SYCL_ASSUME(i_offset <  nwarps);
-    GGML_SYCL_ASSUME(k >= 0);
-    GGML_SYCL_ASSUME(k <  WARP_SIZE);
-
-    const int kbx  = k / QI5_K; // == 0 if QK_K == 256
-    const int kqsx = k % QI5_K; // == k if QK_K == 256
-
-    const block_q5_K * bx0 = (const block_q5_K *) vx;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + i_offset;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q5_K * bxi = bx0 + i*blocks_per_row + kbx;
-        const int ky = QR5_K*kqsx;
-
-        const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx);
-        const int ql0 = (ql >> 0) & 0x0F0F0F0F;
-        const int ql1 = (ql >> 4) & 0x0F0F0F0F;
-
-        const int qh = get_int_from_uint8_aligned(bxi->qh, kqsx % (QI5_K/4));
-        const int qh0 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 0)) << 4) & 0x10101010;
-        const int qh1 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 1)) << 4) & 0x10101010;
-
-        const int kq0 = ky - ky % (QI5_K/2) + k % (QI5_K/4) + 0;
-        const int kq1 = ky - ky % (QI5_K/2) + k % (QI5_K/4) + (QI5_K/4);
-
-        x_ql[i * (2*WARP_SIZE + 1) + kq0] = ql0 | qh0;
-        x_ql[i * (2*WARP_SIZE + 1) + kq1] = ql1 | qh1;
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI5_K; // == 1 if QK_K == 256
-    const int kbxd = k % blocks_per_tile_x_row;          // == 0 if QK_K == 256
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_K) {
-        int i = (i0 + i_offset * QI5_K + k / blocks_per_tile_x_row) % mmq_y;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q5_K * bxi = bx0 + i*blocks_per_row + kbxd;
-
-        x_dm[i * (WARP_SIZE/QI5_K) + i / QI5_K + kbxd] = bxi->dm;
-    }
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
-        int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q5_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / (QI5_K/8);
-
-        const int * scales = (const int *) bxi->scales;
-
-        const int ksc = k % (WARP_SIZE/8);
-
-        // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8
-        int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits
-        scales8    |= (scales[ksc/2]              >> (2 * (ksc % 2)))       & 0x30303030; // upper 2 bits
-
-        x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8;
-    }
-}
-
-static __dpct_inline__ float vec_dot_q5_K_q8_1_mul_mat(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
-    const int &i, const int &j, const int &k) {
-    (void)x_qh;
-
-    const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/16]) + 2 * ((k % 16) / 8);
-
-    const int index_x = i * (QR5_K*WARP_SIZE + 1) +  QR5_K*k;
-    const int index_y = j * WARP_SIZE             + (QR5_K*k) % WARP_SIZE;
-    return vec_dot_q5_K_q8_1_impl_mmq(&x_ql[index_x], &y_qs[index_y], sc, sc+8,
-                                      x_dm[i * (WARP_SIZE/QI5_K) + i/QI5_K], &y_ds[index_y/QI8_1]);
-}
-
-static __dpct_inline__ float
-vec_dot_q6_K_q8_1(const void *__restrict__ vbq,
-                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_q6_K * bq6_K = (const block_q6_K *) vbq;
-
-    const int bq8_offset = 2 * QR6_K * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/4);
-    const int scale_offset = (QI6_K/4) * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/8);
-    const int vh_shift = 2 * ((iqs % (QI6_K/2)) / (QI6_K/4));
-
-    const int vl = get_int_from_uint8(bq6_K->ql, iqs);
-    const int vh = get_int_from_uint8(bq6_K->qh, (QI6_K/4) * (iqs / (QI6_K/2)) + iqs % (QI6_K/4)) >> vh_shift;
-
-    const int8_t * scales = bq6_K->scales + scale_offset;
-
-    int    u[QR6_K];
-    float d8[QR6_K];
-
-#pragma unroll
-    for (int i = 0; i < QR6_K; ++i) {
-        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + 2*i].qs, iqs % QI8_1);
-        d8[i] = bq8_1[bq8_offset + 2 * i].ds[0];
-    }
-
-    return vec_dot_q6_K_q8_1_impl_mmvq(vl, vh, u, scales, bq6_K->d, d8);
-}
-
-template <int mmq_y>
-static __dpct_inline__ void
-allocate_tiles_q6_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
-                    int *tile_x_ql, sycl::half2 *tile_x_dm, int *tile_x_sc) {
-    (void)x_qh;
-
-    *x_ql = tile_x_ql;
-    *x_dm = tile_x_dm;
-    *x_sc = tile_x_sc;
-}
-
-template <int mmq_y, int nwarps, bool need_check>
-static __dpct_inline__ void
-load_tiles_q6_K(const void *__restrict__ vx, int *__restrict__ x_ql,
-                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
-                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
-                const int &k, const int &blocks_per_row) {
-    (void)x_qh;
-
-    GGML_SYCL_ASSUME(i_offset >= 0);
-    GGML_SYCL_ASSUME(i_offset <  nwarps);
-    GGML_SYCL_ASSUME(k >= 0);
-    GGML_SYCL_ASSUME(k <  WARP_SIZE);
-
-    const int kbx  = k / QI6_K; // == 0 if QK_K == 256
-    const int kqsx = k % QI6_K; // == k if QK_K == 256
-
-    const block_q6_K * bx0 = (const block_q6_K *) vx;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
-        int i = i0 + i_offset;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q6_K * bxi = bx0 + i*blocks_per_row + kbx;
-        const int ky = QR6_K*kqsx;
-
-        const int ql = get_int_from_uint8(bxi->ql, kqsx);
-        const int ql0 = (ql >> 0) & 0x0F0F0F0F;
-        const int ql1 = (ql >> 4) & 0x0F0F0F0F;
-
-        const int qh = get_int_from_uint8(bxi->qh, (QI6_K/4) * (kqsx / (QI6_K/2)) + kqsx % (QI6_K/4));
-        const int qh0 = ((qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4)))) << 4) & 0x30303030;
-        const int qh1 =  (qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4))))       & 0x30303030;
-
-        const int kq0 = ky - ky % QI6_K + k % (QI6_K/2) + 0;
-        const int kq1 = ky - ky % QI6_K + k % (QI6_K/2) + (QI6_K/2);
-
-        x_ql[i * (2 * WARP_SIZE + 1) + kq0] =
-            dpct::vectorized_binary<sycl::char4>(ql0 | qh0, 0x20202020,
-                                                 dpct::sub_sat());
-        x_ql[i * (2 * WARP_SIZE + 1) + kq1] =
-            dpct::vectorized_binary<sycl::char4>(ql1 | qh1, 0x20202020,
-                                                 dpct::sub_sat());
-    }
-
-    const int blocks_per_tile_x_row = WARP_SIZE / QI6_K; // == 1 if QK_K == 256
-    const int kbxd = k % blocks_per_tile_x_row;          // == 0 if QK_K == 256
-    float * x_dmf = (float *) x_dm;
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI6_K) {
-        int i = (i0 + i_offset * QI6_K + k / blocks_per_tile_x_row) % mmq_y;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q6_K * bxi = bx0 + i*blocks_per_row + kbxd;
-
-        x_dmf[i * (WARP_SIZE/QI6_K) + i / QI6_K + kbxd] = bxi->d;
-    }
-
-#pragma unroll
-    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
-        int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y;
-
-        if (need_check) {
-            i = sycl::min(i, i_max);
-        }
-
-        const block_q6_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / 4;
-
-        x_sc[i * (WARP_SIZE/8) + i / 8 + k % (WARP_SIZE/8)] = get_int_from_int8(bxi->scales, k % (QI6_K/8));
-    }
-}
-
-static __dpct_inline__ float vec_dot_q6_K_q8_1_mul_mat(
-    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
-    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
-    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
-    const int &i, const int &j, const int &k) {
-    (void)x_qh;
-
-    const float * x_dmf = (const float *) x_dm;
-    const float * y_df  = (const float *) y_ds;
-
-    const int8_t * sc = ((const int8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/8]);
-
-    const int index_x = i * (QR6_K*WARP_SIZE + 1) +  QR6_K*k;
-    const int index_y = j * WARP_SIZE             + (QR6_K*k) % WARP_SIZE;
-    return vec_dot_q6_K_q8_1_impl_mmq(&x_ql[index_x], &y_qs[index_y], sc, x_dmf[i * (WARP_SIZE/QI6_K) + i/QI6_K], &y_df[index_y/QI8_1]);
-}
-
-
-static __dpct_inline__ float
-vec_dot_iq2_xxs_q8_1(const void *__restrict__ vbq,
-                     const block_q8_1 *__restrict__ bq8_1, const int &iqs,
-                     const uint64_t *iq2xxs_grid, const uint8_t *ksigns_iq2xs,
-                     const uint8_t *kmask_iq2xs) {
-    const block_iq2_xxs * bq2 = (const block_iq2_xxs *) vbq;
-
-#if QR2_XXS == 8
-    const int ib32 = iqs;
-    const uint16_t * q2 = bq2->qs + 4*ib32;
-    const uint8_t  * aux8 = (const uint8_t *)q2;
-    const int8_t   * q8 = bq8_1[ib32].qs;
-    uint32_t aux32 = q2[2] | (q2[3] << 16);
-    int sumi = 0;
-    for (int l = 0; l < 4; ++l) {
-        const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]);
-        const uint8_t  signs = ksigns_iq2xs[aux32 & 127];
-        for (int j = 0; j < 8; ++j) {
-            sumi += q8[j] * grid[j] * (signs & kmask_iq2xs[j] ? -1 : 1);
-        }
-        q8 += 8;
-        aux32 >>= 7;
-    }
-    const float d = (float)bq2->d * (0.5f + aux32) * bq8_1[ib32].ds[0] * 0.25f;
-    return d * sumi;
-#else
-    // iqs is 0...15
-    const int ib32 = iqs/2;
-    const int il = iqs%2;
-    const uint16_t * q2 = bq2->qs + 4*ib32;
-    const uint8_t  * aux8 = (const uint8_t *)q2;
-    const uint8_t  * grid1 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+0]);
-    const uint8_t  * grid2 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+1]);
-    const uint32_t aux32 = q2[2] | (q2[3] << 16);
-    const float d = (float)bq2->d * (0.5f + (aux32 >> 28)) * bq8_1[ib32].ds[0] * 0.25f;
-    const uint8_t signs1 = ksigns_iq2xs[(aux32 >> 14*il) & 127];
-    const uint8_t signs2 = ksigns_iq2xs[(aux32 >> (14*il + 7)) & 127];
-    const int8_t * q8 = bq8_1[ib32].qs + 16*il;
-    int sumi1 = 0, sumi2 = 0;
-    for (int j = 0; j < 8; ++j) {
-        sumi1 += q8[j+0] * grid1[j] * (signs1 & kmask_iq2xs[j] ? -1 : 1);
-        sumi2 += q8[j+8] * grid2[j] * (signs2 & kmask_iq2xs[j] ? -1 : 1);
-    }
-    return d * (sumi1 + sumi2);
-#endif
-}
-
-static __dpct_inline__ float
-vec_dot_iq2_xs_q8_1(const void *__restrict__ vbq,
-                    const block_q8_1 *__restrict__ bq8_1, const int &iqs,
-                    const uint64_t *iq2xs_grid, const uint64_t *ksigns64) {
-#if DPCT_COMPATIBILITY_TEMP >=                                                 \
-    MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    const block_iq2_xs * bq2 = (const block_iq2_xs *) vbq;
-
-    const int ib32 = iqs;
-    const uint16_t * q2 = bq2->qs + 4*ib32;
-    const int8_t   * q8 = bq8_1[ib32].qs;
-    const uint8_t ls1 = bq2->scales[ib32] & 0xf;
-    const uint8_t ls2 = bq2->scales[ib32] >>  4;
-    int sumi1 = 0;
-    for (int l = 0; l < 2; ++l) {
-        const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511));
-        const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9));
-        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
-            grid[0] ^ signs[0], signs[0], std::minus<>());
-        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
-            grid[1] ^ signs[1], signs[1], std::minus<>());
-        sumi1 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi1);
-        sumi1 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi1);
-        q8 += 8;
-    }
-    int sumi2 = 0;
-    for (int l = 2; l < 4; ++l) {
-        const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511));
-        const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9));
-        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
-            grid[0] ^ signs[0], signs[0], std::minus<>());
-        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
-            grid[1] ^ signs[1], signs[1], std::minus<>());
-        sumi2 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi2);
-        sumi2 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi2);
-        q8 += 8;
-    }
-    const float d = (float)bq2->d * bq8_1[ib32].ds[0] * 0.25f;
-    return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2);
-#else
-    assert(false);
-    return 0.f;
-#endif
-}
-
-static __dpct_inline__ float
-vec_dot_iq2_s_q8_1(const void *__restrict__ vbq,
-                   const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-    const block_iq2_s * bq2 = (const block_iq2_s *) vbq;
-
-    const int ib32 = iqs;
-    const int8_t  * q8 = bq8_1[ib32].qs;
-    const uint8_t * signs = bq2->qs + QK_K/8 + 4*ib32;
-    const uint8_t ls1 = bq2->scales[ib32] & 0xf;
-    const uint8_t ls2 = bq2->scales[ib32] >>  4;
-    int sumi1 = 0;
-    for (int l = 0; l < 2; ++l) {
-        const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300)));
-        const uint32_t signs0 = dpct::vectorized_binary<sycl::uchar4>(
-            ((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201,
-            std::equal_to<>());
-        const uint32_t signs1 = dpct::vectorized_binary<sycl::uchar4>(
-            ((signs[l] >> 4) * 0x01010101) & 0x08040201, 0x08040201,
-            std::equal_to<>());
-        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
-            grid[0] ^ signs0, signs0, std::minus<>());
-        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
-            grid[1] ^ signs1, signs1, std::minus<>());
-        sumi1 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi1);
-        sumi1 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi1);
-        q8 += 8;
-    }
-    int sumi2 = 0;
-    for (int l = 2; l < 4; ++l) {
-        const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300)));
-        const uint32_t signs0 = dpct::vectorized_binary<sycl::uchar4>(
-            ((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201,
-            std::equal_to<>());
-        const uint32_t signs1 = dpct::vectorized_binary<sycl::uchar4>(
-            ((signs[l] >> 4) * 0x01010101) & 0x08040201, 0x08040201,
-            std::equal_to<>());
-        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
-            grid[0] ^ signs0, signs0, std::minus<>());
-        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
-            grid[1] ^ signs1, signs1, std::minus<>());
-        sumi2 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi2);
-        sumi2 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi2);
-        q8 += 8;
-    }
-    const float d = (float)bq2->d * bq8_1[ib32].ds[0] * 0.25f;
-    return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2);
-}
-
-static __dpct_inline__ float
-vec_dot_iq3_xxs_q8_1(const void *__restrict__ vbq,
-                     const block_q8_1 *__restrict__ bq8_1, const int &iqs,
-                     const uint32_t *iq3xxs_grid, const uint64_t *ksigns64) {
-#if DPCT_COMPATIBILITY_TEMP >=                                                 \
-    MIN_CC_DP4A // lowest compute capability for integer intrinsics
-    const block_iq3_xxs * bq2 = (const block_iq3_xxs *) vbq;
-
-    const int ib32 = iqs;
-    const uint8_t  * q3 = bq2->qs + 8*ib32;
-    const uint16_t * gas = (const uint16_t *)(bq2->qs + QK_K/4) + 2*ib32;
-    const int8_t   * q8 = bq8_1[ib32].qs;
-    uint32_t aux32 = gas[0] | (gas[1] << 16);
-    int sumi = 0;
-    for (int l = 0; l < 4; ++l) {
-        const uint32_t * grid1 = iq3xxs_grid + q3[2*l+0];
-        const uint32_t * grid2 = iq3xxs_grid + q3[2*l+1];
-        const uint32_t * signs = (const uint32_t *)(ksigns64 + (aux32 & 127));
-        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
-            grid1[0] ^ signs[0], signs[0], std::minus<>());
-        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
-            grid2[0] ^ signs[1], signs[1], std::minus<>());
-        sumi = dpct::dp4a(grid_l, *((int *)q8 + 0), sumi);
-        sumi = dpct::dp4a(grid_h, *((int *)q8 + 1), sumi);
-        q8 += 8;
-        aux32 >>= 7;
-    }
-    const float d = (float)bq2->d * (0.5f + aux32) * bq8_1[ib32].ds[0] * 0.5f;
-    return d * sumi;
-#else
-    assert(false);
-    return 0.f;
-#endif
-}
-
-static __dpct_inline__ float
-vec_dot_iq3_s_q8_1(const void *__restrict__ vbq,
-                   const block_q8_1 *__restrict__ bq8_1, const int &iqs,
-                   const uint32_t *iq3s_grid) {
-    const block_iq3_s * bq2 = (const block_iq3_s *) vbq;
-
-    const int ib32 = iqs;
-    const uint8_t  * qs = bq2->qs + 8*ib32;
-    const int8_t   * q8 = bq8_1[ib32].qs;
-    int sumi = 0;
-    for (int l = 0; l < 4; ++l) {
-        const uint32_t * grid1 = iq3s_grid + (qs[2*l+0] | ((bq2->qh[ib32] << (8 - 2*l)) & 256));
-        const uint32_t * grid2 = iq3s_grid + (qs[2*l+1] | ((bq2->qh[ib32] << (7 - 2*l)) & 256));
-        uint32_t signs0 = dpct::vectorized_binary<sycl::uchar4>(
-            ((bq2->signs[4 * ib32 + l] & 0xf) * 0x01010101) & 0x08040201,
-            0x08040201, std::equal_to<>());
-        uint32_t signs1 = dpct::vectorized_binary<sycl::uchar4>(
-            ((bq2->signs[4 * ib32 + l] >> 4) * 0x01010101) & 0x08040201,
-            0x08040201, std::equal_to<>());
-        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
-            grid1[0] ^ signs0, signs0, std::minus<>());
-        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
-            grid2[0] ^ signs1, signs1, std::minus<>());
-        sumi = dpct::dp4a(grid_l, *((int *)q8 + 0), sumi);
-        sumi = dpct::dp4a(grid_h, *((int *)q8 + 1), sumi);
-        q8 += 8;
-    }
-    const float d =
-        (float)bq2->d *
-        (1 + 2 * ((bq2->scales[ib32 / 2] >> 4 * (ib32 % 2)) & 0xf)) *
-        bq8_1[ib32].ds[0];
-    return d * sumi;
-}
-
-static __dpct_inline__ float
-vec_dot_iq1_s_q8_1(const void *__restrict__ vbq,
-                   const block_q8_1 *__restrict__ bq8_1, const int &iqs,
-                   const uint32_t *iq1s_grid_gpu) {
-    const block_iq1_s * bq1 = (const block_iq1_s *) vbq;
-
-    const int ib32 = iqs;
-    int sumi = 0;
-    const int * q8 = (const int *)bq8_1[ib32].qs;
-    for (int l = 0; l < 4; ++l) {
-        const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8)));
-        int grid0 = grid[0] & 0x0f0f0f0f;
-        int grid1 = (grid[0] >> 4) & 0x0f0f0f0f;
-        sumi = dpct::dp4a(q8[2 * l + 1], grid1,
-                          dpct::dp4a(q8[2 * l + 0], grid0, sumi));
-    }
-
-    const float delta = bq1->qh[ib32] & 0x8000 ? -1-IQ1S_DELTA : -1+IQ1S_DELTA;
-    const float d1q = (float)bq1->d * (2*((bq1->qh[ib32] >> 12) & 7) + 1);
-    const float d = d1q * bq8_1[ib32].ds[0];
-    const float m = d1q * bq8_1[ib32].ds[1];
-    return d * sumi + m * delta;
-}
-
-static __dpct_inline__ float
-vec_dot_iq1_m_q8_1(const void *__restrict__ vbq,
-                   const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-    const block_iq1_m * bq1 = (const block_iq1_m *) vbq;
-
-    const int ib32 = iqs;
-    int   sumi[2] = {0, 0};
-    float sumf[2] = {0.f, 0.f};
-
-    const int * q8 = (const int *)bq8_1[ib32].qs;
-    for (int l = 0; l < 4; ++l) {
-        const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 7) << 8)));
-        int grid0 = grid[0] & 0x0f0f0f0f;
-        int grid1 = (grid[0] >> 4) & 0x0f0f0f0f;
-        sumi[l / 2] = dpct::dp4a(q8[2 * l + 1], grid1,
-                                 dpct::dp4a(q8[2 * l + 0], grid0, sumi[l / 2]));
-        const float delta = (bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 0x08 ? -1-IQ1M_DELTA : -1+IQ1M_DELTA;
-        const int sumy = dpct::dp4a(q8[2 * l + 1], 0x01010101,
-                                    dpct::dp4a(q8[2 * l + 0], 0x01010101, 0));
-        sumf[l/2] += delta*sumy;
-    }
-
-    iq1m_scale_t scale;
-    const uint16_t * sc = (const uint16_t *)bq1->scales;
-    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
-    const float d = (float)scale.f16 * bq8_1[ib32].ds[0];
-    return d * ((sumi[0] + sumf[0]) * (2*((sc[ib32/2] >> 6*(ib32%2)) & 0x7) + 1) + (sumi[1] + sumf[1]) * (2*((sc[ib32/2] >> (6*(ib32%2)+3)) & 0x7) + 1));
-}
-
-static __dpct_inline__ void get_int_from_table_16(const uint32_t &q4,
-                                                  const uint8_t *values,
-                                                  int &val1, int &val2) {
-
-    uint32_t aux32; const uint8_t * q8 = (const uint8_t *)&aux32;
-    aux32 = q4 & 0x0f0f0f0f;
-    uint16_t v1 = values[q8[0]] | (values[q8[1]] << 8);
-    uint16_t v2 = values[q8[2]] | (values[q8[3]] << 8);
-    val1 = v1 | (v2 << 16);
-    aux32 = (q4 >> 4) & 0x0f0f0f0f;
-    v1 = values[q8[0]] | (values[q8[1]] << 8);
-    v2 = values[q8[2]] | (values[q8[3]] << 8);
-    val2 = v1 | (v2 << 16);
-}
-
-
-static __dpct_inline__ float
-vec_dot_iq4_nl_q8_1(const void *__restrict__ vbq,
-                    const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_iq4_nl * bq = (const block_iq4_nl *) vbq;
-
-    const uint16_t * q4 = (const uint16_t *)bq->qs + 2*iqs;
-    const int32_t  * q8 = (const int32_t  *)bq8_1->qs + iqs;
-
-    const uint8_t * values = (const uint8_t *)kvalues_iq4nl;
-
-    int v1, v2;
-    int sumi1 = 0, sumi2 = 0;
-    for (int l = 0; l < VDR_Q4_0_Q8_1_MMVQ; ++l) {
-        const uint32_t aux = q4[2*l] | (q4[2*l+1] << 16);
-        get_int_from_table_16(aux, values, v1, v2);
-        sumi1 = dpct::dp4a(v1, q8[l + 0], sumi1);
-        sumi2 = dpct::dp4a(v2, q8[l + 4], sumi2);
-    }
-
-    const float d = (float)bq->d * bq8_1->ds[0];
-    return d * (sumi1 + sumi2);
-}
-
-
-static __dpct_inline__ float
-vec_dot_iq4_xs_q8_1(const void *__restrict__ vbq,
-                    const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
-
-    const block_iq4_xs * bq4 = (const block_iq4_xs *) vbq;
-    const uint8_t * values = (const uint8_t *)kvalues_iq4nl;
-
-    // iqs is 0...7
-    const int ib32 = iqs;
-    const int32_t  * q8 = (const int *)bq8_1[ib32].qs;
-    const uint32_t * q4 = (const uint32_t *)bq4->qs + 4*ib32;
-    const int8_t ls = ((bq4->scales_l[ib32/2] >> 4*(ib32%2)) & 0xf) | (((bq4->scales_h >> 2*ib32) & 3) << 4);
-    const float d = (float)bq4->d * (ls - 32) * bq8_1[ib32].ds[0];
-    int v1, v2;
-    int sumi1 = 0, sumi2 = 0;
-    for (int j = 0; j < 4; ++j) {
-        get_int_from_table_16(q4[j], values, v1, v2);
-        sumi1 = dpct::dp4a(v1, q8[j + 0], sumi1);
-        sumi2 = dpct::dp4a(v2, q8[j + 4], sumi2);
-    }
-    return d * (sumi1 + sumi2);
-}
-
-template <int qk, int qr, int qi, bool need_sum, typename block_q_t, int mmq_x,
-          int mmq_y, int nwarps, load_tiles_sycl_t load_tiles, int vdr,
-          vec_dot_q_mul_mat_sycl_t vec_dot>
-/*
-DPCT1110:8: The total declared local variable size in device function mul_mat_q
-exceeds 128 bytes and may cause high register pressure. Consult with your
-hardware vendor to find the total register size available and adjust the code,
-or use smaller sub-group size to avoid high register pressure.
-*/
-static __dpct_inline__ void
-mul_mat_q(const void *__restrict__ vx, const void *__restrict__ vy,
-          float *__restrict__ dst, const int ncols_x, const int nrows_x,
-          const int ncols_y, const int nrows_y, const int nrows_dst,
-          int *tile_x_ql, sycl::half2 *tile_x_dm, int *tile_x_qh,
-          int *tile_x_sc, const sycl::nd_item<3> &item_ct1, int *tile_y_qs,
-          sycl::half2 *tile_y_ds) {
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    const int blocks_per_row_x = ncols_x / qk;
-    const int blocks_per_col_y = nrows_y / QK8_1;
-    const int blocks_per_warp = WARP_SIZE / qi;
-
-    const int & ncols_dst = ncols_y;
-
-    const int row_dst_0 = item_ct1.get_group(2) * mmq_y;
-    const int & row_x_0 = row_dst_0;
-
-    const int col_dst_0 = item_ct1.get_group(1) * mmq_x;
-    const int & col_y_0 = col_dst_0;
-
-    float sum[mmq_y/WARP_SIZE][mmq_x/nwarps] = {{0.0f}};
-
-    for (int ib0 = 0; ib0 < blocks_per_row_x; ib0 += blocks_per_warp) {
-
-        load_tiles(x + row_x_0 * blocks_per_row_x + ib0, tile_x_ql, tile_x_dm,
-                   tile_x_qh, tile_x_sc, item_ct1.get_local_id(1),
-                   nrows_x - row_x_0 - 1, item_ct1.get_local_id(2),
-                   blocks_per_row_x);
-
-#pragma unroll
-        for (int ir = 0; ir < qr; ++ir) {
-            const int kqs = ir * WARP_SIZE + item_ct1.get_local_id(2);
-            const int kbxd = kqs / QI8_1;
-
-#pragma unroll
-            for (int i = 0; i < mmq_x; i += nwarps) {
-                const int col_y_eff = dpct::min(
-                    (unsigned int)(col_y_0 + item_ct1.get_local_id(1) + i),
-                    ncols_y - 1); // to prevent out-of-bounds memory accesses
-
-                const block_q8_1 * by0 = &y[col_y_eff*blocks_per_col_y + ib0 * (qk/QK8_1) + kbxd];
-
-                const int index_y = (item_ct1.get_local_id(1) + i) * WARP_SIZE +
-                                    kqs % WARP_SIZE;
-                tile_y_qs[index_y] = get_int_from_int8_aligned(
-                    by0->qs, item_ct1.get_local_id(2) % QI8_1);
-            }
-
-#pragma unroll
-            for (int ids0 = 0; ids0 < mmq_x; ids0 += nwarps * QI8_1) {
-                const int ids =
-                    (ids0 + item_ct1.get_local_id(1) * QI8_1 +
-                     item_ct1.get_local_id(2) / (WARP_SIZE / QI8_1)) %
-                    mmq_x;
-                const int kby = item_ct1.get_local_id(2) % (WARP_SIZE / QI8_1);
-                const int col_y_eff = sycl::min(col_y_0 + ids, ncols_y - 1);
-
-                // if the sum is not needed it's faster to transform the scale to f32 ahead of time
-                const sycl::half2 *dsi_src =
-                    &y[col_y_eff * blocks_per_col_y + ib0 * (qk / QK8_1) +
-                       ir * (WARP_SIZE / QI8_1) + kby]
-                         .ds;
-                sycl::half2 *dsi_dst =
-                    &tile_y_ds[ids * (WARP_SIZE / QI8_1) + kby];
-                if (need_sum) {
-                    *dsi_dst = *dsi_src;
-                } else {
-                    float * dfi_dst = (float *) dsi_dst;
-                    *dfi_dst = (*dsi_src)[0];
-                }
-            }
-
-            /*
-            DPCT1118:9: SYCL group functions and algorithms must be encountered
-            in converged control flow. You may need to adjust the code.
-            */
-            /*
-            DPCT1065:56: Consider replacing sycl::nd_item::barrier() with
-            sycl::nd_item::barrier(sycl::access::fence_space::local_space) for
-            better performance if there is no access to global memory.
-            */
-            item_ct1.barrier();
-
-// #pragma unroll // unrolling this loop causes too much register pressure
-            for (int k = ir*WARP_SIZE/qr; k < (ir+1)*WARP_SIZE/qr; k += vdr) {
-#pragma unroll
-                for (int j = 0; j < mmq_x; j += nwarps) {
-#pragma unroll
-                    for (int i = 0; i < mmq_y; i += WARP_SIZE) {
-                        sum[i / WARP_SIZE][j / nwarps] += vec_dot(
-                            tile_x_ql, tile_x_dm, tile_x_qh, tile_x_sc,
-                            tile_y_qs, tile_y_ds, item_ct1.get_local_id(2) + i,
-                            item_ct1.get_local_id(1) + j, k);
-                    }
-                }
-            }
-
-            /*
-            DPCT1118:10: SYCL group functions and algorithms must be encountered
-            in converged control flow. You may need to adjust the code.
-            */
-            /*
-            DPCT1065:57: Consider replacing sycl::nd_item::barrier() with
-            sycl::nd_item::barrier(sycl::access::fence_space::local_space) for
-            better performance if there is no access to global memory.
-            */
-            item_ct1.barrier();
-        }
-    }
-
-#pragma unroll
-    for (int j = 0; j < mmq_x; j += nwarps) {
-        const int col_dst = col_dst_0 + j + item_ct1.get_local_id(1);
-
-        if (col_dst >= ncols_dst) {
-            return;
-        }
-
-#pragma unroll
-        for (int i = 0; i < mmq_y; i += WARP_SIZE) {
-            const int row_dst = row_dst_0 + item_ct1.get_local_id(2) + i;
-
-            if (row_dst >= nrows_dst) {
-                continue;
-            }
-
-            dst[col_dst*nrows_dst + row_dst] = sum[i/WARP_SIZE][j/nwarps];
-        }
-    }
-}
-
-#define  MMQ_X_Q4_0_RDNA2  64
-#define  MMQ_Y_Q4_0_RDNA2  128
-#define NWARPS_Q4_0_RDNA2  8
-#define  MMQ_X_Q4_0_RDNA1  64
-#define  MMQ_Y_Q4_0_RDNA1  64
-#define NWARPS_Q4_0_RDNA1  8
-#if defined(SYCL_USE_XMX)
-#define  MMQ_X_Q4_0_AMPERE 4
-#define  MMQ_Y_Q4_0_AMPERE 32
-#define NWARPS_Q4_0_AMPERE 4
-#else
-#define  MMQ_X_Q4_0_AMPERE 64
-#define  MMQ_Y_Q4_0_AMPERE 128
-#define NWARPS_Q4_0_AMPERE 4
-#endif
-#define  MMQ_X_Q4_0_PASCAL 64
-#define  MMQ_Y_Q4_0_PASCAL 64
-#define NWARPS_Q4_0_PASCAL 8
-
-template <bool need_check> static void
-    mul_mat_q4_0(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
-    const sycl::nd_item<3> &item_ct1, int *tile_x_qs_q4_0, float *tile_x_d_q4_0,
-    int *tile_y_qs, sycl::half2 *tile_y_ds) {
-    int   * tile_x_ql = nullptr;
-    sycl::half2 *tile_x_dm = nullptr;
-    int   * tile_x_qh = nullptr;
-    int   * tile_x_sc = nullptr;
-
-//sycl_todo: change according to hardware
-
-    const int mmq_x  =  MMQ_X_Q4_0_AMPERE;
-    const int mmq_y  =  MMQ_Y_Q4_0_AMPERE;
-    const int nwarps = NWARPS_Q4_0_AMPERE;
-    allocate_tiles_q4_0<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
-                               tile_x_qs_q4_0, tile_x_d_q4_0);
-    mul_mat_q<QK4_0, QR4_0, QI4_0, true, block_q4_0, mmq_x, mmq_y, nwarps,
-              load_tiles_q4_0<mmq_y, nwarps, need_check>, VDR_Q4_0_Q8_1_MMQ,
-              vec_dot_q4_0_q8_1_mul_mat>(
-        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
-        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
-}
-
-#define  MMQ_X_Q4_1_RDNA2  64
-#define  MMQ_Y_Q4_1_RDNA2  128
-#define NWARPS_Q4_1_RDNA2  8
-#define  MMQ_X_Q4_1_RDNA1  64
-#define  MMQ_Y_Q4_1_RDNA1  64
-#define NWARPS_Q4_1_RDNA1  8
-#if defined(SYCL_USE_XMX)
-#define  MMQ_X_Q4_1_AMPERE 4
-#define  MMQ_Y_Q4_1_AMPERE 32
-#define NWARPS_Q4_1_AMPERE 4
-#else
-#define  MMQ_X_Q4_1_AMPERE 64
-#define  MMQ_Y_Q4_1_AMPERE 128
-#define NWARPS_Q4_1_AMPERE 4
-#endif
-#define  MMQ_X_Q4_1_PASCAL 64
-#define  MMQ_Y_Q4_1_PASCAL 64
-#define NWARPS_Q4_1_PASCAL 8
-
-template <bool need_check> static void
-    mul_mat_q4_1(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
-    const sycl::nd_item<3> &item_ct1, int *tile_x_qs_q4_1,
-    sycl::half2 *tile_x_dm_q4_1, int *tile_y_qs, sycl::half2 *tile_y_ds) {
-    int   * tile_x_ql = nullptr;
-    sycl::half2 *tile_x_dm = nullptr;
-    int   * tile_x_qh = nullptr;
-    int   * tile_x_sc = nullptr;
-
-//sycl_todo: change according to hardware
-    const int mmq_x  =  MMQ_X_Q4_1_AMPERE;
-    const int mmq_y  =  MMQ_Y_Q4_1_AMPERE;
-    const int nwarps = NWARPS_Q4_1_AMPERE;
-    allocate_tiles_q4_1<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
-                               tile_x_qs_q4_1, tile_x_dm_q4_1);
-    mul_mat_q<QK4_1, QR4_1, QI4_1, true, block_q4_1, mmq_x, mmq_y, nwarps,
-              load_tiles_q4_1<mmq_y, nwarps, need_check>, VDR_Q4_1_Q8_1_MMQ,
-              vec_dot_q4_1_q8_1_mul_mat>(
-        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
-        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
-}
-
-#define  MMQ_X_Q5_0_RDNA2  64
-#define  MMQ_Y_Q5_0_RDNA2  128
-#define NWARPS_Q5_0_RDNA2  8
-#define  MMQ_X_Q5_0_RDNA1  64
-#define  MMQ_Y_Q5_0_RDNA1  64
-#define NWARPS_Q5_0_RDNA1  8
-#if defined(SYCL_USE_XMX)
-#define  MMQ_X_Q5_0_AMPERE 4
-#define  MMQ_Y_Q5_0_AMPERE 32
-#define NWARPS_Q5_0_AMPERE 4
-#else
-#define  MMQ_X_Q5_0_AMPERE 128
-#define  MMQ_Y_Q5_0_AMPERE 64
-#define NWARPS_Q5_0_AMPERE 4
-#endif
-#define  MMQ_X_Q5_0_PASCAL 64
-#define  MMQ_Y_Q5_0_PASCAL 64
-#define NWARPS_Q5_0_PASCAL 8
-
-template <bool need_check> static void
-    mul_mat_q5_0(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
-    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q5_0, float *tile_x_d_q5_0,
-    int *tile_y_qs, sycl::half2 *tile_y_ds) {
-    int   * tile_x_ql = nullptr;
-    sycl::half2 *tile_x_dm = nullptr;
-    int   * tile_x_qh = nullptr;
-    int   * tile_x_sc = nullptr;
-
-//sycl_todo: change according to hardware
-    const int mmq_x  =  MMQ_X_Q5_0_AMPERE;
-    const int mmq_y  =  MMQ_Y_Q5_0_AMPERE;
-    const int nwarps = NWARPS_Q5_0_AMPERE;
-    allocate_tiles_q5_0<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
-                               tile_x_ql_q5_0, tile_x_d_q5_0);
-    mul_mat_q<QK5_0, QR5_0, QI5_0, false, block_q5_0, mmq_x, mmq_y, nwarps,
-              load_tiles_q5_0<mmq_y, nwarps, need_check>, VDR_Q5_0_Q8_1_MMQ,
-              vec_dot_q5_0_q8_1_mul_mat>(
-        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
-        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
-}
-
-#define  MMQ_X_Q5_1_RDNA2  64
-#define  MMQ_Y_Q5_1_RDNA2  128
-#define NWARPS_Q5_1_RDNA2  8
-#define  MMQ_X_Q5_1_RDNA1  64
-#define  MMQ_Y_Q5_1_RDNA1  64
-#define NWARPS_Q5_1_RDNA1  8
-#if defined(SYCL_USE_XMX)
-#define  MMQ_X_Q5_1_AMPERE 4
-#define  MMQ_Y_Q5_1_AMPERE 32
-#define NWARPS_Q5_1_AMPERE 4
-#else
-#define  MMQ_X_Q5_1_AMPERE 128
-#define  MMQ_Y_Q5_1_AMPERE 64
-#define NWARPS_Q5_1_AMPERE 4
-#endif
-#define  MMQ_X_Q5_1_PASCAL 64
-#define  MMQ_Y_Q5_1_PASCAL 64
-#define NWARPS_Q5_1_PASCAL 8
-
-template <bool need_check> static void
-mul_mat_q5_1(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
-    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q5_1,
-    sycl::half2 *tile_x_dm_q5_1, int *tile_y_qs, sycl::half2 *tile_y_ds) {
-    int   * tile_x_ql = nullptr;
-    sycl::half2 *tile_x_dm = nullptr;
-    int   * tile_x_qh = nullptr;
-    int   * tile_x_sc = nullptr;
-
-//sycl_todo: change according to hardware
-    const int mmq_x  =  MMQ_X_Q5_1_AMPERE;
-    const int mmq_y  =  MMQ_Y_Q5_1_AMPERE;
-    const int nwarps = NWARPS_Q5_1_AMPERE;
-    allocate_tiles_q5_1<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
-                               tile_x_ql_q5_1, tile_x_dm_q5_1);
-    mul_mat_q<QK5_1, QR5_1, QI5_1, true, block_q5_1, mmq_x, mmq_y, nwarps,
-              load_tiles_q5_1<mmq_y, nwarps, need_check>, VDR_Q5_1_Q8_1_MMQ,
-              vec_dot_q5_1_q8_1_mul_mat>(
-        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
-        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
-}
-
-#define  MMQ_X_Q8_0_RDNA2  64
-#define  MMQ_Y_Q8_0_RDNA2  128
-#define NWARPS_Q8_0_RDNA2  8
-#define  MMQ_X_Q8_0_RDNA1  64
-#define  MMQ_Y_Q8_0_RDNA1  64
-#define NWARPS_Q8_0_RDNA1  8
-#if defined(SYCL_USE_XMX)
-#define  MMQ_X_Q8_0_AMPERE 4
-#define  MMQ_Y_Q8_0_AMPERE 32
-#define NWARPS_Q8_0_AMPERE 4
-#else
-#define  MMQ_X_Q8_0_AMPERE 128
-#define  MMQ_Y_Q8_0_AMPERE 64
-#define NWARPS_Q8_0_AMPERE 4
-#endif
-#define  MMQ_X_Q8_0_PASCAL 64
-#define  MMQ_Y_Q8_0_PASCAL 64
-#define NWARPS_Q8_0_PASCAL 8
-
-template <bool need_check> static void
-    mul_mat_q8_0(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
-    const sycl::nd_item<3> &item_ct1, int *tile_x_qs_q8_0, float *tile_x_d_q8_0,
-    int *tile_y_qs, sycl::half2 *tile_y_ds) {
-    int   * tile_x_ql = nullptr;
-    sycl::half2 *tile_x_dm = nullptr;
-    int   * tile_x_qh = nullptr;
-    int   * tile_x_sc = nullptr;
-
-//sycl_todo: change according to hardware
-    const int mmq_x  =  MMQ_X_Q8_0_AMPERE;
-    const int mmq_y  =  MMQ_Y_Q8_0_AMPERE;
-    const int nwarps = NWARPS_Q8_0_AMPERE;
-    allocate_tiles_q8_0<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
-                               tile_x_qs_q8_0, tile_x_d_q8_0);
-    mul_mat_q<QK8_0, QR8_0, QI8_0, false, block_q8_0, mmq_x, mmq_y, nwarps,
-              load_tiles_q8_0<mmq_y, nwarps, need_check>, VDR_Q8_0_Q8_1_MMQ,
-              vec_dot_q8_0_q8_1_mul_mat>(
-        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
-        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
-}
-
-#define  MMQ_X_Q2_K_RDNA2  64
-#define  MMQ_Y_Q2_K_RDNA2  128
-#define NWARPS_Q2_K_RDNA2  8
-#define  MMQ_X_Q2_K_RDNA1  128
-#define  MMQ_Y_Q2_K_RDNA1  32
-#define NWARPS_Q2_K_RDNA1  8
-#if defined(SYCL_USE_XMX)
-#define  MMQ_X_Q2_K_AMPERE 4
-#define  MMQ_Y_Q2_K_AMPERE 32
-#define NWARPS_Q2_K_AMPERE 4
-#else
-#define  MMQ_X_Q2_K_AMPERE 64
-#define  MMQ_Y_Q2_K_AMPERE 128
-#define NWARPS_Q2_K_AMPERE 4
-#endif
-#define  MMQ_X_Q2_K_PASCAL 64
-#define  MMQ_Y_Q2_K_PASCAL 64
-#define NWARPS_Q2_K_PASCAL 8
-
-template <bool need_check> static void
-mul_mat_q2_K(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
-    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q2_K,
-    sycl::half2 *tile_x_dm_q2_K, int *tile_x_sc_q2_K, int *tile_y_qs,
-    sycl::half2 *tile_y_ds) {
-    int   * tile_x_ql = nullptr;
-    sycl::half2 *tile_x_dm = nullptr;
-    int   * tile_x_qh = nullptr;
-    int   * tile_x_sc = nullptr;
-
-//sycl_todo: change according to hardware
-    const int mmq_x  =  MMQ_X_Q2_K_AMPERE;
-    const int mmq_y  =  MMQ_Y_Q2_K_AMPERE;
-    const int nwarps = NWARPS_Q2_K_AMPERE;
-    allocate_tiles_q2_K<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
-                               tile_x_ql_q2_K, tile_x_dm_q2_K, tile_x_sc_q2_K);
-    mul_mat_q<QK_K, QR2_K, QI2_K, false, block_q2_K, mmq_x, mmq_y, nwarps,
-              load_tiles_q2_K<mmq_y, nwarps, need_check>, VDR_Q2_K_Q8_1_MMQ,
-              vec_dot_q2_K_q8_1_mul_mat>(
-        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
-        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
-}
-
-#define  MMQ_X_Q3_K_RDNA2  128
-#define  MMQ_Y_Q3_K_RDNA2  64
-#define NWARPS_Q3_K_RDNA2  8
-#define  MMQ_X_Q3_K_RDNA1  32
-#define  MMQ_Y_Q3_K_RDNA1  128
-#define NWARPS_Q3_K_RDNA1  8
-#if defined(SYCL_USE_XMX)
-#define  MMQ_X_Q3_K_AMPERE 4
-#define  MMQ_Y_Q3_K_AMPERE 32
-#define NWARPS_Q3_K_AMPERE 4
-#else
-#define  MMQ_X_Q3_K_AMPERE 128
-#define  MMQ_Y_Q3_K_AMPERE 128
-#define NWARPS_Q3_K_AMPERE 4
-#endif
-#define  MMQ_X_Q3_K_PASCAL 64
-#define  MMQ_Y_Q3_K_PASCAL 64
-#define NWARPS_Q3_K_PASCAL 8
-
-template <bool need_check> static void
-mul_mat_q3_K(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
-    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q3_K,
-    sycl::half2 *tile_x_dm_q3_K, int *tile_x_qh_q3_K, int *tile_x_sc_q3_K,
-    int *tile_y_qs, sycl::half2 *tile_y_ds) {
-    int   * tile_x_ql = nullptr;
-    sycl::half2 *tile_x_dm = nullptr;
-    int   * tile_x_qh = nullptr;
-    int   * tile_x_sc = nullptr;
-
-//sycl_todo: change according to hardware
-    const int mmq_x  =  MMQ_X_Q3_K_AMPERE;
-    const int mmq_y  =  MMQ_Y_Q3_K_AMPERE;
-    const int nwarps = NWARPS_Q3_K_AMPERE;
-    allocate_tiles_q3_K<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
-                               tile_x_ql_q3_K, tile_x_dm_q3_K, tile_x_qh_q3_K,
-                               tile_x_sc_q3_K);
-    mul_mat_q<QK_K, QR3_K, QI3_K, false, block_q3_K, mmq_x, mmq_y, nwarps,
-              load_tiles_q3_K<mmq_y, nwarps, need_check>, VDR_Q3_K_Q8_1_MMQ,
-              vec_dot_q3_K_q8_1_mul_mat>(
-        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
-        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
-}
-
-#define  MMQ_X_Q4_K_RDNA2  64
-#define  MMQ_Y_Q4_K_RDNA2  128
-#define NWARPS_Q4_K_RDNA2  8
-#define  MMQ_X_Q4_K_RDNA1  32
-#define  MMQ_Y_Q4_K_RDNA1  64
-#define NWARPS_Q4_K_RDNA1  8
-#if defined(SYCL_USE_XMX)
-#define  MMQ_X_Q4_K_AMPERE 4
-#define  MMQ_Y_Q4_K_AMPERE 32
-#define NWARPS_Q4_K_AMPERE 4
-#else
-#define  MMQ_X_Q4_K_AMPERE 64
-#define  MMQ_Y_Q4_K_AMPERE 128
-#define NWARPS_Q4_K_AMPERE 4
-#endif
-#define  MMQ_X_Q4_K_PASCAL 64
-#define  MMQ_Y_Q4_K_PASCAL 64
-#define NWARPS_Q4_K_PASCAL 8
-
-template <bool need_check> static void
-    mul_mat_q4_K(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
-    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q4_K,
-    sycl::half2 *tile_x_dm_q4_K, int *tile_x_sc_q4_K, int *tile_y_qs,
-    sycl::half2 *tile_y_ds) {
-    int   * tile_x_ql = nullptr;
-    sycl::half2 *tile_x_dm = nullptr;
-    int   * tile_x_qh = nullptr;
-    int   * tile_x_sc = nullptr;
-
-//sycl_todo: change according to hardware
-    const int mmq_x  =  MMQ_X_Q4_K_AMPERE;
-    const int mmq_y  =  MMQ_Y_Q4_K_AMPERE;
-    const int nwarps = NWARPS_Q4_K_AMPERE;
-    allocate_tiles_q4_K<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
-                               tile_x_ql_q4_K, tile_x_dm_q4_K, tile_x_sc_q4_K);
-    mul_mat_q<QK_K, QR4_K, QI4_K, true, block_q4_K, mmq_x, mmq_y, nwarps,
-              load_tiles_q4_K<mmq_y, nwarps, need_check>, VDR_Q4_K_Q8_1_MMQ,
-              vec_dot_q4_K_q8_1_mul_mat>(
-        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
-        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
-}
-
-#define  MMQ_X_Q5_K_RDNA2  64
-#define  MMQ_Y_Q5_K_RDNA2  128
-#define NWARPS_Q5_K_RDNA2  8
-#define  MMQ_X_Q5_K_RDNA1  32
-#define  MMQ_Y_Q5_K_RDNA1  64
-#define NWARPS_Q5_K_RDNA1  8
-#if defined(SYCL_USE_XMX)
-#define  MMQ_X_Q5_K_AMPERE 4
-#define  MMQ_Y_Q5_K_AMPERE 32
-#define NWARPS_Q5_K_AMPERE 4
-#else
-#define  MMQ_X_Q5_K_AMPERE 64
-#define  MMQ_Y_Q5_K_AMPERE 128
-#define NWARPS_Q5_K_AMPERE 4
-#endif
-#define  MMQ_X_Q5_K_PASCAL 64
-#define  MMQ_Y_Q5_K_PASCAL 64
-#define NWARPS_Q5_K_PASCAL 8
-
-template <bool need_check> static void
-mul_mat_q5_K(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
-    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q5_K,
-    sycl::half2 *tile_x_dm_q5_K, int *tile_x_sc_q5_K, int *tile_y_qs,
-    sycl::half2 *tile_y_ds) {
-    int   * tile_x_ql = nullptr;
-    sycl::half2 *tile_x_dm = nullptr;
-    int   * tile_x_qh = nullptr;
-    int   * tile_x_sc = nullptr;
-
-//sycl_todo: change according to hardware
-    const int mmq_x  =  MMQ_X_Q5_K_AMPERE;
-    const int mmq_y  =  MMQ_Y_Q5_K_AMPERE;
-    const int nwarps = NWARPS_Q5_K_AMPERE;
-    allocate_tiles_q5_K<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
-                               tile_x_ql_q5_K, tile_x_dm_q5_K, tile_x_sc_q5_K);
-    mul_mat_q<QK_K, QR5_K, QI5_K, true, block_q5_K, mmq_x, mmq_y, nwarps,
-              load_tiles_q5_K<mmq_y, nwarps, need_check>, VDR_Q5_K_Q8_1_MMQ,
-              vec_dot_q5_K_q8_1_mul_mat>(
-        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
-        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
-}
-
-#define  MMQ_X_Q6_K_RDNA2  64
-#define  MMQ_Y_Q6_K_RDNA2  128
-#define NWARPS_Q6_K_RDNA2  8
-#define  MMQ_X_Q6_K_RDNA1  32
-#define  MMQ_Y_Q6_K_RDNA1  64
-#define NWARPS_Q6_K_RDNA1  8
-#if defined(SYCL_USE_XMX)
-#define  MMQ_X_Q6_K_AMPERE 4
-#define  MMQ_Y_Q6_K_AMPERE 32
-#define NWARPS_Q6_K_AMPERE 4
-#else
-#define  MMQ_X_Q6_K_AMPERE 64
-#define  MMQ_Y_Q6_K_AMPERE 64
-#define NWARPS_Q6_K_AMPERE 4
-#endif
-#define  MMQ_X_Q6_K_PASCAL 64
-#define  MMQ_Y_Q6_K_PASCAL 64
-#define NWARPS_Q6_K_PASCAL 8
-
-template <bool need_check> static void
-    mul_mat_q6_K(
-    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
-    const sycl::nd_item<3> &item_ct1, int *tile_x_ql, sycl::half2 *tile_x_dm,
-    int *tile_x_sc, int *tile_y_qs, sycl::half2 *tile_y_ds) {
-    // int   * tile_x_ql = nullptr;
-    // sycl::half2 *tile_x_dm = nullptr;
-    int   * tile_x_qh = nullptr;
-    // int   * tile_x_sc = nullptr;
-
-//sycl_todo: change according to hardware
-    const int mmq_x  =  MMQ_X_Q6_K_AMPERE;
-    const int mmq_y  =  MMQ_Y_Q6_K_AMPERE;
-    const int nwarps = NWARPS_Q6_K_AMPERE;
-    allocate_tiles_q6_K<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
-                               tile_x_ql, tile_x_dm, tile_x_sc);
-    mul_mat_q<QK_K, QR6_K, QI6_K, false, block_q6_K, mmq_x, mmq_y, nwarps,
-              load_tiles_q6_K<mmq_y, nwarps, need_check>, VDR_Q6_K_Q8_1_MMQ,
-              vec_dot_q6_K_q8_1_mul_mat>(
-        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
-        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
-}
-
-template <int qk, int qi, typename block_q_t, int vdr, vec_dot_q_sycl_t vec_dot_q_sycl>
-static void mul_mat_vec_q(const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, const int ncols, const int nrows,
-                          const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int blocks_per_row = ncols / qk;
-    const int blocks_per_warp = vdr * WARP_SIZE / qi;
-
-    const int qi_vdr = (qi / vdr); // N_threads processing 1 qk block
-
-    // partial sum for each thread
-    float tmp = 0.0f;
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int i = item_ct1.get_local_id(2) / qi_vdr; i < blocks_per_row;
-         i += blocks_per_warp) {
-      const int ibx = row * blocks_per_row + i; // x block index
-
-      const int iby = i * (qk / QK8_1); // y block index that aligns with ibx
-
-      const int iqs =
-          vdr *
-          (item_ct1.get_local_id(2) -
-           i * qi_vdr); // x block quant index when casting the quants to int
-
-      tmp += vec_dot_q_sycl(&x[ibx], &y[iby], iqs);
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-template <int qk, int qi, typename block_q_t, int vdr>
-static void mul_mat_vec_q_iq2_xxs_q8_1(const void *__restrict__ vx,
-                                       const void *__restrict__ vy,
-                                       float *__restrict__ dst, const int ncols,
-                                       const int nrows,
-                                       const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int blocks_per_row = ncols / qk;
-    const int blocks_per_warp = vdr * WARP_SIZE / qi;
-
-// partial sum for each thread
-    float tmp = 0.0f;
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
-         i += blocks_per_warp) {
-        const int ibx = row*blocks_per_row + i; // x block index
-
-        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
-
-        const int iqs =
-            vdr *
-            (item_ct1.get_local_id(2) %
-             (qi / vdr)); // x block quant index when casting the quants to int
-
-        tmp += vec_dot_iq2_xxs_q8_1(&x[ibx], &y[iby], iqs, iq2xxs_grid, ksigns_iq2xs, kmask_iq2xs);
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-template <int qk, int qi, typename block_q_t, int vdr>
-static void mul_mat_vec_q_iq2_xs_q8_1(const void *__restrict__ vx,
-                                      const void *__restrict__ vy,
-                                      float *__restrict__ dst, const int ncols,
-                                      const int nrows,
-                                      const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int blocks_per_row = ncols / qk;
-    const int blocks_per_warp = vdr * WARP_SIZE / qi;
-
-// partial sum for each thread
-    float tmp = 0.0f;
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
-         i += blocks_per_warp) {
-        const int ibx = row*blocks_per_row + i; // x block index
-
-        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
-
-        const int iqs =
-            vdr *
-            (item_ct1.get_local_id(2) %
-             (qi / vdr)); // x block quant index when casting the quants to int
-
-        tmp += vec_dot_iq2_xs_q8_1(&x[ibx], &y[iby], iqs, iq2xs_grid, ksigns64);
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-template <int qk, int qi, typename block_q_t, int vdr>
-static void mul_mat_vec_q_iq2_s_q8_1(const void *__restrict__ vx,
-                                     const void *__restrict__ vy,
-                                     float *__restrict__ dst, const int ncols,
-                                     const int nrows,
-                                     const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int blocks_per_row = ncols / qk;
-    const int blocks_per_warp = vdr * WARP_SIZE / qi;
-
-// partial sum for each thread
-    float tmp = 0.0f;
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
-         i += blocks_per_warp) {
-        const int ibx = row*blocks_per_row + i; // x block index
-
-        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
-
-        const int iqs =
-            vdr *
-            (item_ct1.get_local_id(2) %
-             (qi / vdr)); // x block quant index when casting the quants to int
-
-        tmp += vec_dot_iq2_s_q8_1(&x[ibx], &y[iby], iqs);
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-template <int qk, int qi, typename block_q_t, int vdr>
-static void mul_mat_vec_q_iq3_xxs_q8_1(const void *__restrict__ vx,
-                                       const void *__restrict__ vy,
-                                       float *__restrict__ dst, const int ncols,
-                                       const int nrows,
-                                       const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int blocks_per_row = ncols / qk;
-    const int blocks_per_warp = vdr * WARP_SIZE / qi;
-
-// partial sum for each thread
-    float tmp = 0.0f;
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
-         i += blocks_per_warp) {
-        const int ibx = row*blocks_per_row + i; // x block index
-
-        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
-
-        const int iqs =
-            vdr *
-            (item_ct1.get_local_id(2) %
-             (qi / vdr)); // x block quant index when casting the quants to int
-
-        tmp += vec_dot_iq3_xxs_q8_1(&x[ibx], &y[iby], iqs, iq3xxs_grid, ksigns64);
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-template <int qk, int qi, typename block_q_t, int vdr>
-static void mul_mat_vec_q_iq3_s_q8_1(const void *__restrict__ vx,
-                                     const void *__restrict__ vy,
-                                     float *__restrict__ dst, const int ncols,
-                                     const int nrows,
-                                     const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int blocks_per_row = ncols / qk;
-    const int blocks_per_warp = vdr * WARP_SIZE / qi;
-
-// partial sum for each thread
-    float tmp = 0.0f;
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
-         i += blocks_per_warp) {
-        const int ibx = row*blocks_per_row + i; // x block index
-
-        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
-
-        const int iqs =
-            vdr *
-            (item_ct1.get_local_id(2) %
-             (qi / vdr)); // x block quant index when casting the quants to int
-
-        tmp += vec_dot_iq3_s_q8_1(&x[ibx], &y[iby], iqs, iq3s_grid);
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-template <int qk, int qi, typename block_q_t, int vdr>
-static void mul_mat_vec_q_iq1_s_q8_1(const void *__restrict__ vx,
-                                     const void *__restrict__ vy,
-                                     float *__restrict__ dst, const int ncols,
-                                     const int nrows,
-                                     const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int blocks_per_row = ncols / qk;
-    const int blocks_per_warp = vdr * WARP_SIZE / qi;
-
-// partial sum for each thread
-    float tmp = 0.0f;
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
-         i += blocks_per_warp) {
-        const int ibx = row*blocks_per_row + i; // x block index
-
-        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
-
-        const int iqs =
-            vdr *
-            (item_ct1.get_local_id(2) %
-             (qi / vdr)); // x block quant index when casting the quants to int
-
-        tmp += vec_dot_iq1_s_q8_1(&x[ibx], &y[iby], iqs, iq1s_grid_gpu);
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-template <int qk, int qi, typename block_q_t, int vdr>
-static void mul_mat_vec_q_iq1_m_q8_1(const void *__restrict__ vx,
-                                     const void *__restrict__ vy,
-                                     float *__restrict__ dst, const int ncols,
-                                     const int nrows,
-                                     const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int blocks_per_row = ncols / qk;
-    const int blocks_per_warp = vdr * WARP_SIZE / qi;
-
-// partial sum for each thread
-    float tmp = 0.0f;
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
-         i += blocks_per_warp) {
-        const int ibx = row*blocks_per_row + i; // x block index
-
-        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
-
-        const int iqs =
-            vdr *
-            (item_ct1.get_local_id(2) %
-             (qi / vdr)); // x block quant index when casting the quants to int
-
-        tmp += vec_dot_iq1_m_q8_1(&x[ibx], &y[iby], iqs);
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-template <int qk, int qi, typename block_q_t, int vdr>
-static void mul_mat_vec_q_iq4_nl_q8_1(const void *__restrict__ vx,
-                                      const void *__restrict__ vy,
-                                      float *__restrict__ dst, const int ncols,
-                                      const int nrows,
-                                      const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int blocks_per_row = ncols / qk;
-    const int blocks_per_warp = vdr * WARP_SIZE / qi;
-
-// partial sum for each thread
-    float tmp = 0.0f;
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
-         i += blocks_per_warp) {
-        const int ibx = row*blocks_per_row + i; // x block index
-
-        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
-
-        const int iqs =
-            vdr *
-            (item_ct1.get_local_id(2) %
-             (qi / vdr)); // x block quant index when casting the quants to int
-
-        tmp += vec_dot_iq4_nl_q8_1(&x[ibx], &y[iby], iqs);
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-
-template <int qk, int qi, typename block_q_t, int vdr>
-static void mul_mat_vec_q_iq4_xs_q8_1(const void *__restrict__ vx,
-                                      const void *__restrict__ vy,
-                                      float *__restrict__ dst, const int ncols,
-                                      const int nrows,
-                                      const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int blocks_per_row = ncols / qk;
-    const int blocks_per_warp = vdr * WARP_SIZE / qi;
-
-// partial sum for each thread
-    float tmp = 0.0f;
-
-    const block_q_t  * x = (const block_q_t  *) vx;
-    const block_q8_1 * y = (const block_q8_1 *) vy;
-
-    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
-         i += blocks_per_warp) {
-        const int ibx = row*blocks_per_row + i; // x block index
-
-        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
-
-        const int iqs =
-            vdr *
-            (item_ct1.get_local_id(2) %
-             (qi / vdr)); // x block quant index when casting the quants to int
-
-        tmp += vec_dot_iq4_xs_q8_1(&x[ibx], &y[iby], iqs);
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[row] = tmp;
-    }
-}
-
-
-template <int qk, int qr, dequantize_kernel_t dequantize_kernel>
-static void dequantize_mul_mat_vec(const void * __restrict__ vx, const dfloat * __restrict__ y, float * __restrict__ dst, const int ncols, const int nrows,
-                                   const sycl::nd_item<3> &item_ct1) {
-    // qk = quantized weights per x block
-    // qr = number of quantized weights per data value in x block
-    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
-                    item_ct1.get_local_id(1);
-
-    if (row >= nrows) {
-        return;
-    }
-
-    const int tid = item_ct1.get_local_id(2);
-
-    const int iter_stride = 2*GGML_SYCL_DMMV_X;
-    const int vals_per_iter = iter_stride / WARP_SIZE; // num quantized vals per thread and i iter
-    const int y_offset = qr == 1 ? 1 : qk/2;
-
-// partial sum for each thread
-#ifdef GGML_SYCL_F16
-    sycl::half2 tmp = {0.0f, 0.0f}; // two sums for f16 to take advantage of half2 intrinsics
-#else
-    float tmp = 0.0f;
-#endif // GGML_SYCL_F16
-
-    for (int i = 0; i < ncols; i += iter_stride) {
-        const int col = i + vals_per_iter*tid;
-        const int ib = (row*ncols + col)/qk; // x block index
-        const int iqs = (col%qk)/qr; // x quant index
-        const int iybs = col - col%qk; // y block start index
-
-// processing >2 values per i iter is faster for fast GPUs
-#pragma unroll
-        for (int j = 0; j < vals_per_iter; j += 2) {
-            // process 2 vals per j iter
-
-            // dequantize
-            // for qr = 2 the iqs needs to increase by 1 per j iter because 2 weights per data val
-            dfloat2 v;
-            dequantize_kernel(vx, ib, iqs + j/qr, v);
-
-            // matrix multiplication
-            // for qr = 2 the y index needs to increase by 1 per j iter because of y_offset = qk/2
-#ifdef GGML_SYCL_F16
-            dfloat2 t1{y[iybs + iqs + j / qr + 0],
-                        y[iybs + iqs + j / qr + y_offset]};
-
-            tmp += v * t1;
-#else
-            tmp += v.x() * y[iybs + iqs + j / qr + 0];
-            tmp += v.y() * y[iybs + iqs + j / qr + y_offset];
-#endif // GGML_SYCL_F16
-        }
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (tid == 0) {
-#ifdef GGML_SYCL_F16
-        dst[row] = tmp.x() + tmp.y();
-#else
-        dst[row] = tmp;
-#endif // GGML_SYCL_F16
-    }
-}
-
-static void mul_mat_p021_f16_f32(
-    const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst,
-    const int ncols_x, const int nrows_x, const int nchannels_x, const int nchannels_y,
-    const sycl::nd_item<3> &item_ct1) {
-
-    const sycl::half *x = (const sycl::half *)vx;
-
-    const int row_x = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
-                      item_ct1.get_local_id(1);
-    const int channel = item_ct1.get_local_range(0) * item_ct1.get_group(0) +
-                        item_ct1.get_local_id(0);
-    const int channel_x = channel / (nchannels_y / nchannels_x);
-
-    const int nrows_y = ncols_x;
-    const int nrows_dst = nrows_x;
-    const int row_dst = row_x;
-
-    float tmp = 0.0f;
-
-    for (int col_x0 = 0; col_x0 < ncols_x;
-         col_x0 += item_ct1.get_local_range(2)) {
-        const int col_x = col_x0 + item_ct1.get_local_id(2);
-
-        if (col_x >= ncols_x) {
-            break;
-        }
-
-        // x is transposed and permuted
-        const int ix = row_x*nchannels_x*ncols_x + channel_x*ncols_x + col_x;
-        const float xi =
-            sycl::vec<sycl::half, 1>(x[ix])
-                .convert<float, sycl::rounding_mode::automatic>()[0];
-
-        const int row_y = col_x;
-
-
-        // y is not transposed but permuted
-        const int iy = channel*nrows_y + row_y;
-
-        tmp += xi * y[iy];
-    }
-
-    // dst is not transposed and not permuted
-    const int idst = channel*nrows_dst + row_dst;
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[idst] = tmp;
-    }
-}
-
-static void mul_mat_vec_nc_f16_f32( // nc == non-contiguous
-    const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst, const int ncols_x, const int nrows_x,
-    const int row_stride_x, const int channel_stride_x, const int channel_x_divisor,
-    const sycl::nd_item<3> &item_ct1) {
-
-    const sycl::half *x = (const sycl::half *)vx;
-
-    const int row_x = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
-                      item_ct1.get_local_id(1);
-    const int channel = item_ct1.get_local_range(0) * item_ct1.get_group(0) +
-                        item_ct1.get_local_id(0);
-    const int channel_x = channel / channel_x_divisor;
-
-    const int nrows_y   = ncols_x;
-    const int nrows_dst = nrows_x;
-    const int row_dst   = row_x;
-
-    const int idst = channel*nrows_dst + row_dst;
-
-    float tmp = 0.0f;
-
-    for (int col_x0 = 0; col_x0 < ncols_x;
-         col_x0 += item_ct1.get_local_range(2)) {
-        const int col_x = col_x0 + item_ct1.get_local_id(2);
-
-        if (col_x >= ncols_x) {
-            break;
-        }
-
-        const int row_y = col_x;
-
-        const int ix = channel_x*channel_stride_x + row_x*row_stride_x + col_x;
-        const int iy = channel*nrows_y + row_y;
-
-        const float xi =
-            sycl::vec<sycl::half, 1>(x[ix])
-                .convert<float, sycl::rounding_mode::automatic>()[0];
-
-        tmp += xi * y[iy];
-    }
-
-    // sum up partial sums and write back result
-#pragma unroll
-    for (int mask = 16; mask > 0; mask >>= 1) {
-        tmp +=
-            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
-    }
-
-    if (item_ct1.get_local_id(2) == 0) {
-        dst[idst] = tmp;
-    }
-}
-
-static void cpy_1_f32_f32(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    float * dsti = (float *) cdsti;
-
-    *dsti = *xi;
-}
-
-static void cpy_1_f32_f16(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    sycl::half *dsti = (sycl::half *)cdsti;
-
-    *dsti = sycl::vec<float, 1>(*xi)
-                .convert<sycl::half, sycl::rounding_mode::automatic>()[0];
-}
-
-static void cpy_1_f16_f16(const char * cxi, char * cdsti) {
-    const sycl::half *xi = (const sycl::half *)cxi;
-    sycl::half *dsti = (sycl::half *)cdsti;
-
-    *dsti = *xi;
-}
-
-static void cpy_1_f16_f32(const char * cxi, char * cdsti) {
-    const sycl::half *xi = (const sycl::half *)cxi;
-    float * dsti = (float *) cdsti;
-
-    *dsti = *xi;
-}
-
-static void cpy_1_i16_i16(const char * cxi, char * cdsti) {
-    const int16_t *xi = (const int16_t *)cxi;
-    int16_t *dsti = (int16_t *)cdsti;
-
-    *dsti = *xi;
-}
-
-static void cpy_1_i32_i32(const char * cxi, char * cdsti) {
-    const int32_t *xi = (const int32_t *)cxi;
-    int32_t *dsti = (int32_t *)cdsti;
-
-    *dsti = *xi;
-}
-
-template <cpy_kernel_t cpy_1>
-static void cpy_f32_f16(const char * cx, char * cdst, const int ne,
-                        const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-                        const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11,
-                        const int nb12, const int nb13, const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    if (i >= ne) {
-        return;
-    }
-
-    // determine indices i02/i12, i01/i11, i00/i10 as a function of index i of flattened tensor
-    // then combine those indices with the corresponding byte offsets to get the total offsets
-    const int i03 = i/(ne00 * ne01 * ne02);
-    const int i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01);
-    const int i01 = (i - i03*ne00*ne01*ne02  -  i02*ne01*ne00) / ne00;
-    const int i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00;
-    const int x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03;
-
-    const int i13 = i/(ne10 * ne11 * ne12);
-    const int i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11);
-    const int i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10;
-    const int i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10;
-    const int dst_offset = i10*nb10 + i11*nb11 + i12*nb12 + i13 * nb13;
-
-    cpy_1(cx + x_offset, cdst + dst_offset);
-}
-
-static void cpy_blck_f32_q8_0(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    block_q8_0 * dsti = (block_q8_0 *) cdsti;
-
-    float amax = 0.0f; // absolute max
-
-    for (int j = 0; j < QK8_0; j++) {
-        const float v = xi[j];
-        amax = sycl::fmax(amax, sycl::fabs((float)v));
-    }
-
-    const float d = amax / ((1 << 7) - 1);
-    const float id = d ? 1.0f/d : 0.0f;
-
-    dsti->d = d;
-
-    for (int j = 0; j < QK8_0; ++j) {
-        const float x0 = xi[j]*id;
-
-        dsti->qs[j] = sycl::round((float)x0);
-    }
-}
-
-static void cpy_blck_f32_q4_0(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    block_q4_0 * dsti = (block_q4_0 *) cdsti;
-
-    float amax = 0.0f;
-    float vmax = 0.0f;
-
-    for (int j = 0; j < QK4_0; ++j) {
-        const float v = xi[j];
-        if (amax < sycl::fabs((float)v)) {
-            amax = sycl::fabs((float)v);
-            vmax = v;
-        }
-    }
-
-    const float d  = vmax / -8;
-    const float id = d ? 1.0f/d : 0.0f;
-
-    dsti->d = d;
-
-    for (int j = 0; j < QK4_0/2; ++j) {
-        const float x0 = xi[0       + j]*id;
-        const float x1 = xi[QK4_0/2 + j]*id;
-
-        const uint8_t xi0 = dpct::min(15, (int8_t)(x0 + 8.5f));
-        const uint8_t xi1 = dpct::min(15, (int8_t)(x1 + 8.5f));
-
-        dsti->qs[j]  = xi0;
-        dsti->qs[j] |= xi1 << 4;
-    }
-}
-
-static void cpy_blck_f32_q4_1(const char * cxi, char * cdsti) {
-    const float * xi = (const float *) cxi;
-    block_q4_1 * dsti = (block_q4_1 *) cdsti;
-
-    float vmin = FLT_MAX;
-    float vmax = -FLT_MAX;
-
-    for (int j = 0; j < QK4_1; ++j) {
-        const float v = xi[j];
-
-        if (v < vmin) vmin = v;
-        if (v > vmax) vmax = v;
-    }
-
-    const float d  = (vmax - vmin) / ((1 << 4) - 1);
-    const float id = d ? 1.0f/d : 0.0f;
-
-    dsti->dm.x() = d;
-    dsti->dm.y() = vmin;
-
-    for (int j = 0; j < QK4_1/2; ++j) {
-        const float x0 = (xi[0       + j] - vmin)*id;
-        const float x1 = (xi[QK4_1/2 + j] - vmin)*id;
-
-        const uint8_t xi0 = dpct::min(15, (int8_t)(x0 + 0.5f));
-        const uint8_t xi1 = dpct::min(15, (int8_t)(x1 + 0.5f));
-
-        dsti->qs[j]  = xi0;
-        dsti->qs[j] |= xi1 << 4;
-    }
-}
-
-template <cpy_kernel_t cpy_blck, int qk>
-static void cpy_f32_q(const char * cx, char * cdst, const int ne,
-                      const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
-                      const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11,
-                      const int nb12, const int nb13, const sycl::nd_item<3> &item_ct1) {
-    const int i = (item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                   item_ct1.get_local_id(2)) *
-                  qk;
-
-    if (i >= ne) {
-        return;
-    }
-
-    const int i03 = i/(ne00 * ne01 * ne02);
-    const int i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01);
-    const int i01 = (i - i03*ne00*ne01*ne02  -  i02*ne01*ne00) / ne00;
-    const int i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00;
-    const int x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03;
-
-    const int i13 = i/(ne10 * ne11 * ne12);
-    const int i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11);
-    const int i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10;
-    const int i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10;
-    const int dst_offset = (i10/qk)*nb10 + i11*nb11 + i12*nb12 + i13*nb13;
-
-    cpy_blck(cx + x_offset, cdst + dst_offset);
-}
-
-static float rope_yarn_ramp(const float low, const float high, const int i0) {
-    const float y = (i0 / 2 - low) / sycl::max(0.001f, high - low);
-    return 1.0f - sycl::min(1.0f, sycl::max(0.0f, y));
-}
-
-struct rope_corr_dims {
-    float v[4];
-};
-
-// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn
-// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng.
-static void rope_yarn(
-    float theta_extrap, float freq_scale, rope_corr_dims corr_dims, int64_t i0, float ext_factor, float mscale,
-    float * cos_theta, float * sin_theta
-) {
-    // Get n-d rotational scaling corrected for extrapolation
-    float theta_interp = freq_scale * theta_extrap;
-    float theta = theta_interp;
-    if (ext_factor != 0.0f) {
-        float ramp_mix = rope_yarn_ramp(corr_dims.v[0], corr_dims.v[1], i0) * ext_factor;
-        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;
-
-        // Get n-d magnitude scaling corrected for interpolation
-        mscale *= 1.0f + 0.1f * sycl::log(1.0f / freq_scale);
-    }
-    *cos_theta = sycl::cos(theta) * mscale;
-    *sin_theta = sycl::sin(theta) * mscale;
-}
-
-// rope == RoPE == rotary positional embedding
-template<typename T, bool has_pos>
-static void rope(
-    const T * x, T * dst, int ncols, const int32_t * pos, float freq_scale, int p_delta_rows, float freq_base,
-    float ext_factor, float attn_factor, rope_corr_dims corr_dims
-,
-    const sycl::nd_item<3> &item_ct1) {
-    const int col = 2 * (item_ct1.get_local_range(1) * item_ct1.get_group(1) +
-                         item_ct1.get_local_id(1));
-
-    if (col >= ncols) {
-        return;
-    }
-
-    const int row = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                    item_ct1.get_local_id(2);
-    const int i = row*ncols + col;
-    const int i2 = row/p_delta_rows;
-
-    const int p = has_pos ? pos[i2] : 0;
-    const float theta_base = p * dpct::pow(freq_base, -float(col) / ncols);
-
-    float cos_theta, sin_theta;
-    rope_yarn(theta_base, freq_scale, corr_dims, col, ext_factor, attn_factor, &cos_theta, &sin_theta);
-
-    const float x0 = x[i + 0];
-    const float x1 = x[i + 1];
-
-    dst[i + 0] = x0*cos_theta - x1*sin_theta;
-    dst[i + 1] = x0*sin_theta + x1*cos_theta;
-}
-
-template<typename T, bool has_pos, bool has_freq_facs>
-static void rope_neox(
-    const T * x, T * dst, int ncols, int n_dims, const int32_t * pos, float freq_scale, int p_delta_rows,
-    float ext_factor, float attn_factor, rope_corr_dims corr_dims, float theta_scale, float inv_ndims,
-    const float * freq_factors, const sycl::nd_item<3> &item_ct1) {
-    const int col = 2 * (item_ct1.get_local_range(1) * item_ct1.get_group(1) +
-                         item_ct1.get_local_id(1));
-
-    if (col >= ncols) {
-        return;
-    }
-
-    const int row = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                    item_ct1.get_local_id(2);
-    const int ib = col / n_dims;
-    const int ic = col % n_dims;
-
-    if (ib > 0) {
-        const int i = row*ncols + ib*n_dims + ic;
-
-        dst[i + 0] = x[i + 0];
-        dst[i + 1] = x[i + 1];
-
-        return;
-    }
-
-    const int i  = row*ncols + ib*n_dims + ic/2;
-    const int i2 = row/p_delta_rows;
-
-    float cur_rot = inv_ndims * ic - ib;
-
-    const int p = has_pos ? pos[i2] : 0;
-    const float freq_factor = has_freq_facs ? freq_factors[ic/2] : 1.0f;
-
-    const float theta_base =
-        p * freq_scale * dpct::pow(theta_scale, col / 2.0f)/freq_factor;
-
-    float cos_theta, sin_theta;
-    rope_yarn(theta_base, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, &cos_theta, &sin_theta);
-
-    const float x0 = x[i + 0];
-    const float x1 = x[i + n_dims/2];
-
-    dst[i + 0]        = x0*cos_theta - x1*sin_theta;
-    dst[i + n_dims/2] = x0*sin_theta + x1*cos_theta;
-}
-
-static void k_sum_rows_f32(const float * x, float * dst, const int ncols,
-                           const sycl::nd_item<3> &item_ct1) {
-    const int row = item_ct1.get_group(1);
-    const int col = item_ct1.get_local_id(2);
-
-    float sum = 0.0f;
-    for (int i = col; i < ncols; i += item_ct1.get_local_range(2)) {
-        sum += x[row * ncols + i];
-    }
-
-    sum = warp_reduce_sum(sum, item_ct1);
-
-    if (col == 0) {
-        dst[row] = sum;
-    }
-}
-
-
-template<typename T>
-static inline void ggml_sycl_swap(T & a, T & b) {
-    T tmp = a;
-    a = b;
-    b = tmp;
-}
-
-template <ggml_sort_order order>
-__dpct_inline__ static void
-k_argsort_f32_i32(const float *x, int *dst, const int ncols, int ncols_pad,
-                  const sycl::nd_item<3> &item_ct1, uint8_t *dpct_local) {
-    // bitonic sort
-    int col = item_ct1.get_local_id(2);
-    int row = item_ct1.get_group(1);
-
-    if (col >= ncols_pad) {
-        return;
-    }
-
-    const float * x_row = x + row * ncols;
-    auto dst_row = (int *)dpct_local;
-
-    // initialize indices
-    dst_row[col] = col;
-
-    item_ct1.barrier(sycl::access::fence_space::local_space);
-
-    for (int k = 2; k <= ncols_pad; k *= 2) {
-        for (int j = k / 2; j > 0; j /= 2) {
-            int ixj = col ^ j;
-            if (ixj > col) {
-                if ((col & k) == 0) {
-                    if (dst_row[col] >= ncols ||
-                        (dst_row[ixj] < ncols && (order == GGML_SORT_ORDER_ASC ?
-                            x_row[dst_row[col]] > x_row[dst_row[ixj]] :
-                            x_row[dst_row[col]] < x_row[dst_row[ixj]]))
-                    ) {
-                        ggml_sycl_swap(dst_row[col], dst_row[ixj]);
-                    }
-                } else {
-                    if (dst_row[ixj] >= ncols ||
-                        (dst_row[col] < ncols && (order == GGML_SORT_ORDER_ASC ?
-                            x_row[dst_row[col]] < x_row[dst_row[ixj]] :
-                            x_row[dst_row[col]] > x_row[dst_row[ixj]]))
-                    ) {
-                        ggml_sycl_swap(dst_row[col], dst_row[ixj]);
-                    }
-                }
-            }
-            /*
-            DPCT1118:1: SYCL group functions and algorithms must be encountered
-            in converged control flow. You may need to adjust the code.
-            */
-            item_ct1.barrier(sycl::access::fence_space::local_space);
-        }
-    }
-
-    // copy the result to dst without the padding
-    if (col < ncols) {
-        dst[row * ncols + col] = dst_row[col];
-    }
-}
-
-
-static void diag_mask_inf_f32(const float * x, float * dst, const int ncols, const int rows_per_channel, const int n_past,
-                              const sycl::nd_item<3> &item_ct1) {
-    const int col = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
-                    item_ct1.get_local_id(1);
-    const int row = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                    item_ct1.get_local_id(2);
-
-    if (col >= ncols) {
-        return;
-    }
-
-    const int i = row*ncols + col;
-    //dst[i] = col > (n_past + row % rows_per_channel) ? -INFINITY : x[i];
-    //dst[i] = x[i] - (col > n_past + row % rows_per_channel) * INT_MAX; // equivalent within rounding error but slightly faster on GPU
-    dst[i] = x[i] - (col > n_past + row % rows_per_channel) * FLT_MAX;
-}
-
-
-template <bool vals_smem, int ncols_template, int block_size_template>
-static void soft_max_f32(const float * x, const float * mask, float * dst, const int ncols_par,
-                         const int nrows_y, const float scale, const float max_bias, const float m0,
-                         const float m1, uint32_t n_head_log2, const sycl::nd_item<3> &item_ct1, float *buf) {
-    const int ncols = ncols_template == 0 ? ncols_par : ncols_template;
-
-    const int tid = item_ct1.get_local_id(2);
-    const int rowx = item_ct1.get_group(2);
-    const int rowy = rowx % nrows_y; // broadcast the mask (y) in the row dimension
-
-    const int block_size = block_size_template == 0 ? item_ct1.get_local_range(2) : block_size_template;
-
-    const int warp_id = item_ct1.get_local_id(2) / WARP_SIZE;
-    const int lane_id = item_ct1.get_local_id(2) % WARP_SIZE;
-
-    float slope = 1.0f;
-
-    // ALiBi
-    if (max_bias > 0.0f) {
-        const uint32_t h = rowx/nrows_y; // head index
-
-        const float base = h < n_head_log2 ? m0 : m1;
-        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
-
-        slope = sycl::pow(base, float(exp));
-    }
-
-    float * vals = vals_smem ? buf + WARP_SIZE : dst + rowx*ncols;
-    float max_val = -INFINITY;
-
-    for (int col0 = 0; col0 < ncols; col0 += block_size) {
-        const int col = col0 + tid;
-
-        if (ncols_template == 0 && col >= ncols) {
-            break;
-        }
-
-        const int ix = rowx*ncols + col;
-        const int iy = rowy*ncols + col;
-
-        const float val = x[ix]*scale + (mask ? slope*mask[iy] : 0.0f);
-
-        vals[col] = val;
-        max_val = sycl::max(max_val, val);
-    }
-
-    // find the max value in the block
-    max_val = warp_reduce_max(max_val, item_ct1);
-    if (block_size > WARP_SIZE) {
-        if (warp_id == 0) {
-            buf[lane_id] = -INFINITY;
-        }
-        item_ct1.barrier(sycl::access::fence_space::local_space);
-
-        if (lane_id == 0) {
-            buf[warp_id] = max_val;
-        }
-        item_ct1.barrier(sycl::access::fence_space::local_space);
-
-        max_val = buf[lane_id];
-        max_val = warp_reduce_max(max_val, item_ct1);
-    }
-
-    float tmp = 0.f;
-
-#pragma unroll
-    for (int col0 = 0; col0 < ncols; col0 += block_size) {
-        const int col = col0 + tid;
-                if (ncols_template == 0 && col >= ncols) {
-            break;
-        }
-
-        const float val = sycl::native::exp(vals[col] - max_val);
-        tmp += val;
-        vals[col] = val;
-    }
-
-    // find the sum of exps in the block
-    tmp = warp_reduce_sum(tmp, item_ct1);
-    if (block_size > WARP_SIZE) {
-        item_ct1.barrier(sycl::access::fence_space::local_space);
-        if (warp_id == 0) {
-            buf[lane_id] = 0.f;
-        }
-        item_ct1.barrier(sycl::access::fence_space::local_space);
-
-        if (lane_id == 0) {
-            buf[warp_id] = tmp;
-        }
-        item_ct1.barrier(sycl::access::fence_space::local_space);
-
-        tmp = buf[lane_id];
-        tmp = warp_reduce_sum(tmp, item_ct1);
-    }
-
-    const float inv_sum = 1.f / tmp;
-
-#pragma unroll
-    for (int col0 = 0; col0 < ncols; col0 += block_size) {
-        const int col = col0 + tid;
-
-        if (ncols_template == 0 && col >= ncols) {
-            return;
-        }
-
-        const int idst = rowx*ncols + col;
-        dst[idst] = vals[col] * inv_sum;
-    }
-}
-
-static void scale_f32(const float * x, float * dst, const float scale, const int k,
-                      const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    if (i >= k) {
-        return;
-    }
-
-    dst[i] = scale * x[i];
-}
-
-static void clamp_f32(const float * x, float * dst, const float min, const float max, const int k,
-                      const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
-                  item_ct1.get_local_id(2);
-
-    if (i >= k) {
-        return;
-    }
-
-    dst[i] = x[i] < min ? min : (x[i] > max ? max : x[i]);
-}
-
-template <typename T>
-static void im2col_kernel(const float *x, T *dst, int offset_delta,
-                           int IW, int IH, int OW, int KW, int KH,
-                           int pelements, int CHW, int s0, int s1, int p0,
-                           int p1, int d0, int d1,
-                           const sycl::nd_item<3> &item_ct1) {
-    const int i = item_ct1.get_local_id(2) +
-                  item_ct1.get_group(2) * item_ct1.get_local_range(2);
-    if (i >= pelements) {
-        return;
-    }
-
-    const int ksize = OW * (KH > 1 ? KW : 1);
-    const int kx = i / ksize;
-    const int kd = kx * ksize;
-    const int ky = (i - kd) / OW;
-    const int ix = i % OW;
-
-    const int64_t iiw = ix * s0 + kx * d0 - p0;
-    const int64_t iih = item_ct1.get_group(1) * s1 + ky * d1 - p1;
-
-    const int64_t offset_dst =
-        (item_ct1.get_group(1) * OW + ix) * CHW +
-        (item_ct1.get_group(0) * (KW * KH) + ky * KW + kx);
-
-    if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
-        dst[offset_dst] =
-            sycl::vec<float, 1>(0.0f)
-                .convert<sycl::half, sycl::rounding_mode::automatic>()[0];
-    } else {
-        const int64_t offset_src = item_ct1.get_group(0) * offset_delta;
-        dst[offset_dst] =
-            sycl::vec<float, 1>(x[offset_src + iih * IW + iiw])
-                .convert<sycl::half, sycl::rounding_mode::automatic>()[0];
-    }
-}
-
-template <typename Ti, typename To>
-static  void pool2d_nchw_kernel(
-        const int ih, const int iw, const int oh, const int ow,
-        const int kh, const int kw, const int sh, const int sw,
-        const int ph, const int pw, const int parallel_elements,
-        const Ti* src, To* dst, const enum ggml_op_pool op,
-        const sycl::nd_item<3> &item_ct1) {
-        int idx = item_ct1.get_local_id(2) +
-                  item_ct1.get_group(2) * item_ct1.get_local_range(2);
-        if (idx >= parallel_elements) {
-            return;
-        }
-
-        const int I_HW = ih * iw;
-        const int O_HW = oh * ow;
-        const int nc = idx / O_HW;
-        const int cur_oh = idx % O_HW / ow;
-        const int cur_ow = idx % O_HW % ow;
-        const Ti* i_ptr = src + nc * I_HW;
-        To* o_ptr = dst + nc * O_HW;
-        const int start_h = cur_oh * sh - ph;
-        const int bh = sycl::max(0, start_h);
-        const int eh = sycl::min(ih, start_h + kh);
-        const int start_w = cur_ow * sw - pw;
-        const int bw = sycl::max(0, start_w);
-        const int ew = sycl::min(iw, start_w + kw);
-
-        To res = 0;
-
-        switch (op) {
-            case GGML_OP_POOL_AVG: res = 0; break;
-            case GGML_OP_POOL_MAX: res = -FLT_MAX; break;
-        }
-
-        for (int i = bh; i < eh; i += 1) {
-            for (int j = bw; j < ew; j += 1) {
-#if DPCT_COMPATIBILITY_TEMP >= 350
-                /*
-                DPCT1098:106: The '*' expression is used instead of the __ldg
-                call. These two expressions do not provide the exact same
-                functionality. Check the generated code for potential precision
-                and/or performance issues.
-                */
-                Ti cur = *(i_ptr + i * iw + j);
-#else
-                Ti cur = i_ptr[i * iw + j];
-#endif
-                switch (op) {
-                    case GGML_OP_POOL_AVG: res += (cur / (kh * kw)); break;
-                    case GGML_OP_POOL_MAX: res = sycl::max(res, (To)cur); break;
-                }
-            }
-        }
-        o_ptr[cur_oh * ow + cur_ow] = res;
-}
-
-template <int qk, int qr, dequantize_kernel_t dq>
-static void get_rows_sycl(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                          ggml_tensor *dst, const void *src0_dd,
-                          const int32_t *src1_dd, float *dst_dd,
-                          queue_ptr stream) {
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const sycl::range<3> block_dims(1, 1, SYCL_GET_ROWS_BLOCK_SIZE);
-    const int block_num_x = (ne00 + 2*SYCL_GET_ROWS_BLOCK_SIZE - 1) / (2*SYCL_GET_ROWS_BLOCK_SIZE);
-    const sycl::range<3> block_nums(ne11 * ne12, ne10, block_num_x);
-
-    // strides in elements
-    //const size_t s0 = nb0 / ggml_element_size(dst);
-    const size_t s1 = nb1 / ggml_element_size(dst);
-    const size_t s2 = nb2 / ggml_element_size(dst);
-    const size_t s3 = nb3 / ggml_element_size(dst);
-
-    const size_t s10 = nb10 / ggml_element_size(src1);
-    const size_t s11 = nb11 / ggml_element_size(src1);
-    const size_t s12 = nb12 / ggml_element_size(src1);
-    //const size_t s13 = nb13 / ggml_element_size(src1);
-
-    GGML_ASSERT(ne00 % 2 == 0);
-
-    stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                         [=](sycl::nd_item<3> item_ct1) {
-                             k_get_rows<qk, qr, dq>(
-                                 src0_dd, src1_dd, dst_dd, ne00, ne12, s1, s2,
-                                 s3, nb01, nb02, nb03, s10, s11, s12, item_ct1);
-                         });
-
-    (void) dst;
-}
-
-template <typename src0_t>
-static void get_rows_sycl_float(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                const ggml_tensor *src1, ggml_tensor *dst,
-                                const src0_t *src0_dd, const int32_t *src1_dd,
-                                float *dst_dd, queue_ptr stream) {
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const sycl::range<3> block_dims(1, 1, SYCL_GET_ROWS_BLOCK_SIZE);
-    const int block_num_x = (ne00 + SYCL_GET_ROWS_BLOCK_SIZE - 1) / SYCL_GET_ROWS_BLOCK_SIZE;
-    const sycl::range<3> block_nums(ne11 * ne12, ne10, block_num_x);
-
-    // strides in elements
-    //const size_t s0 = nb0 / ggml_element_size(dst);
-    const size_t s1 = nb1 / ggml_element_size(dst);
-    const size_t s2 = nb2 / ggml_element_size(dst);
-    const size_t s3 = nb3 / ggml_element_size(dst);
-
-    const size_t s10 = nb10 / ggml_element_size(src1);
-    const size_t s11 = nb11 / ggml_element_size(src1);
-    const size_t s12 = nb12 / ggml_element_size(src1);
-    //const size_t s13 = nb13 / ggml_element_size(src1);
-
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) {
-                k_get_rows_float(src0_dd, src1_dd, dst_dd, ne00, ne12, s1, s2,
-                                 s3, nb01, nb02, nb03, s10, s11, s12, item_ct1);
-            });
-    }
-
-    (void) dst;
-}
-
-template<float (*bin_op)(const float, const float)>
-struct bin_bcast_sycl {
-    template <typename src0_t, typename src1_t, typename dst_t>
-    void operator()(ggml_backend_sycl_context & ctx,
-                    const struct ggml_tensor *src0,
-                    const struct ggml_tensor *src1, struct ggml_tensor *dst,
-                    const src0_t *src0_dd, const src1_t *src1_dd, dst_t *dst_dd,
-                    queue_ptr stream) {
-
-        GGML_TENSOR_BINARY_OP_LOCALS
-
-        int nr0 = ne10/ne0;
-        int nr1 = ne11/ne1;
-        int nr2 = ne12/ne2;
-        int nr3 = ne13/ne3;
-
-        int nr[4] = { nr0, nr1, nr2, nr3 };
-
-        // collapse dimensions until first broadcast dimension
-        int64_t cne0[] = {ne0, ne1, ne2, ne3};
-        int64_t cne1[] = {ne10, ne11, ne12, ne13};
-        size_t cnb0[] = {nb0, nb1, nb2, nb3};
-        size_t cnb1[] = {nb10, nb11, nb12, nb13};
-        auto collapse = [](int64_t cne[]) {
-            cne[0] *= cne[1];
-            cne[1] = cne[2];
-            cne[2] = cne[3];
-            cne[3] = 1;
-        };
-
-        auto collapse_nb = [](size_t cnb[], int64_t cne[]) {
-            cnb[1] *= cne[1];
-            cnb[2] *= cne[2];
-            cnb[3] *= cne[3];
-        };
-
-        for (int i = 0; i < 4; i++) {
-            if (nr[i] != 1) {
-                break;
-            }
-            if (i > 0) {
-                collapse_nb(cnb0, cne0);
-                collapse_nb(cnb1, cne1);
-                collapse(cne0);
-                collapse(cne1);
-            }
-        }
-        {
-            int64_t ne0 = cne0[0];
-            int64_t ne1 = cne0[1];
-            int64_t ne2 = cne0[2];
-            int64_t ne3 = cne0[3];
-
-            int64_t ne10 = cne1[0];
-            int64_t ne11 = cne1[1];
-            int64_t ne12 = cne1[2];
-            int64_t ne13 = cne1[3];
-
-            size_t nb0 = cnb0[0];
-            size_t nb1 = cnb0[1];
-            size_t nb2 = cnb0[2];
-            size_t nb3 = cnb0[3];
-
-            size_t nb10 = cnb1[0];
-            size_t nb11 = cnb1[1];
-            size_t nb12 = cnb1[2];
-            size_t nb13 = cnb1[3];
-
-            size_t s0 = nb0 / sizeof(dst_t);
-            size_t s1 = nb1 / sizeof(dst_t);
-            size_t s2 = nb2 / sizeof(dst_t);
-            size_t s3 = nb3 / sizeof(dst_t);
-
-            size_t s10 = nb10 / sizeof(src1_t);
-            size_t s11 = nb11 / sizeof(src1_t);
-            size_t s12 = nb12 / sizeof(src1_t);
-            size_t s13 = nb13 / sizeof(src1_t);
-
-            GGML_ASSERT(s0 == 1);
-            GGML_ASSERT(s10 == 1);
-
-            const int block_size = 128;
-
-            int64_t hne0 = std::max(ne0/2LL, 1LL);
-
-            sycl::range<3> block_dims(1, 1, 1);
-            block_dims[2] = std::min<unsigned int>(hne0, block_size);
-            block_dims[1] = std::min<unsigned int>(
-                ne1, block_size / (unsigned int)block_dims[2]);
-            block_dims[0] = std::min(
-                std::min<unsigned int>(
-                    ne2 * ne3, block_size / (unsigned int)block_dims[2] /
-                                   (unsigned int)block_dims[1]),
-                64U);
-
-            sycl::range<3> block_nums(
-                (ne2 * ne3 + block_dims[0] - 1) / block_dims[0],
-                (ne1 + block_dims[1] - 1) / block_dims[1],
-                (hne0 + block_dims[2] - 1) / block_dims[2]);
-
-            if (block_nums[0] > 65535) {
-                // this is the maximum number of blocks in z direction, fallback to 1D grid kernel
-                int block_num = (ne0*ne1*ne2*ne3 + block_size - 1) / block_size;
-                {
-                    dpct::has_capability_or_fail(stream->get_device(),
-                                                 {sycl::aspect::fp16});
-
-                    stream->parallel_for(
-                        sycl::nd_range<3>(sycl::range<3>(1, 1, block_num) *
-                                              sycl::range<3>(1, 1, block_size),
-                                          sycl::range<3>(1, 1, block_size)),
-                        [=](sycl::nd_item<3> item_ct1) {
-                            k_bin_bcast_unravel<bin_op>(
-                                src0_dd, src1_dd, dst_dd, ne0, ne1, ne2, ne3,
-                                ne10, ne11, ne12, ne13, s1, s2, s3, s11, s12,
-                                s13, item_ct1);
-                        });
-                }
-            } else {
-                /*
-                DPCT1049:16: The work-group size passed to the SYCL kernel may
-                exceed the limit. To get the device limit, query
-                info::device::max_work_group_size. Adjust the work-group size if
-                needed.
-                */
-                dpct::has_capability_or_fail(stream->get_device(),
-                                             {sycl::aspect::fp16});
-
-                stream->parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        k_bin_bcast<bin_op>(src0_dd, src1_dd, dst_dd, ne0, ne1,
-                                            ne2, ne3, ne10, ne11, ne12, ne13,
-                                            s1, s2, s3, s11, s12, s13,
-                                            item_ct1);
-                    });
-            }
-        }
-    }
-};
-
-static void acc_f32_sycl(const float *x, const float *y, float *dst,
-                         const int n_elements, const int ne10, const int ne11,
-                         const int ne12, const int nb1, const int nb2,
-                         const int offset, queue_ptr stream) {
-    int num_blocks = (n_elements + SYCL_ACC_BLOCK_SIZE - 1) / SYCL_ACC_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_ACC_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_ACC_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            acc_f32(x, y, dst, n_elements, ne10, ne11, ne12, nb1, nb2, offset,
-                    item_ct1);
-        });
-}
-
-static void gelu_f32_sycl(const float *x, float *dst, const int k,
-                          queue_ptr stream) {
-    const int num_blocks = (k + SYCL_GELU_BLOCK_SIZE - 1) / SYCL_GELU_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            gelu_f32(x, dst, k, item_ct1);
-        });
-}
-
-static void silu_f32_sycl(const float *x, float *dst, const int k,
-                          queue_ptr stream) {
-    const int num_blocks = (k + SYCL_SILU_BLOCK_SIZE - 1) / SYCL_SILU_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_SILU_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_SILU_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            silu_f32(x, dst, k, item_ct1);
-        });
-}
-
-static void gelu_quick_f32_sycl(const float *x, float *dst, const int k,
-                                queue_ptr stream) {
-    const int num_blocks = (k + SYCL_GELU_BLOCK_SIZE - 1) / SYCL_GELU_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            gelu_quick_f32(x, dst, k, item_ct1);
-        });
-}
-
-static void tanh_f32_sycl(const float *x, float *dst, const int k,
-                          queue_ptr stream) {
-    const int num_blocks = (k + SYCL_TANH_BLOCK_SIZE - 1) / SYCL_TANH_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_TANH_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_TANH_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            tanh_f32(x, dst, k, item_ct1);
-        });
-}
-
-static void relu_f32_sycl(const float *x, float *dst, const int k,
-                          queue_ptr stream) {
-    const int num_blocks = (k + SYCL_RELU_BLOCK_SIZE - 1) / SYCL_RELU_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            relu_f32(x, dst, k, item_ct1);
-        });
-}
-
-static void hardsigmoid_f32_sycl(const float *x, float *dst, const int k,
-                                 queue_ptr stream) {
-    const int num_blocks = (k + SYCL_HARDSIGMOID_BLOCK_SIZE - 1) / SYCL_HARDSIGMOID_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_HARDSIGMOID_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_HARDSIGMOID_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            hardsigmoid_f32(x, dst, k, item_ct1);
-        });
-}
-
-static void hardswish_f32_sycl(const float *x, float *dst, const int k,
-                               queue_ptr stream) {
-    const int num_blocks = (k + SYCL_HARDSWISH_BLOCK_SIZE - 1) / SYCL_HARDSWISH_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_HARDSWISH_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_HARDSWISH_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            hardswish_f32(x, dst, k, item_ct1);
-        });
-}
-
-static void leaky_relu_f32_sycl(const float *x, float *dst, const int k,
-                                const float negative_slope,
-                                queue_ptr stream) {
-    const int num_blocks = (k + SYCL_RELU_BLOCK_SIZE - 1) / SYCL_RELU_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            leaky_relu_f32(x, dst, k, negative_slope, item_ct1);
-        });
-}
-
-static void sqr_f32_sycl(const float *x, float *dst, const int k,
-                         queue_ptr stream) {
-    const int num_blocks = (k + SYCL_SQR_BLOCK_SIZE - 1) / SYCL_SQR_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_SQR_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_SQR_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            sqr_f32(x, dst, k, item_ct1);
-        });
-}
-
-static void norm_f32_sycl(const float *x, float *dst, const int ncols,
-                          const int nrows, const float eps,
-                          queue_ptr stream) {
-    GGML_ASSERT(ncols % WARP_SIZE == 0);
-    if (ncols < 1024) {
-        const sycl::range<3> block_dims(1, 1, WARP_SIZE);
-        stream->submit([&](sycl::handler &cgh) {
-            sycl::local_accessor<sycl::float2, 1> s_sum_acc_ct1(
-                sycl::range<1>(32), cgh);
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims,
-                                  block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        norm_f32(x, dst, ncols, eps, item_ct1,
-                                            s_sum_acc_ct1.get_pointer(), WARP_SIZE);
-                    });
-        });
-    } else {
-        // FIXME: 1024 from cuda
-        const int work_group_size = GROUP_SIZE;
-        const sycl::range<3> block_dims(1, 1, work_group_size);
-        /*
-        DPCT1049:17: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        stream->submit([&](sycl::handler &cgh) {
-            sycl::local_accessor<sycl::float2, 1> s_sum_acc_ct1(
-                sycl::range<1>(32), cgh);
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims,
-                                  block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        norm_f32(x, dst, ncols, eps, item_ct1,
-                                       s_sum_acc_ct1.get_pointer(), work_group_size);
-                    });
-        });
-    }
-}
-
-static void group_norm_f32_sycl(const float *x, float *dst,
-                                const int num_groups, const int group_size,
-                                const int ne_elements, queue_ptr stream) {
-    static const float eps = 1e-6f;
-    if (group_size < 1024) {
-        const sycl::range<3> block_dims(1, 1, WARP_SIZE);
-        stream->submit([&](sycl::handler &cgh) {
-            sycl::local_accessor<float, 1> s_sum_acc_ct1(sycl::range<1>(32),
-                                                         cgh);
-
-            const float eps_ct4 = eps;
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(sycl::range<3>(1, 1, num_groups) * block_dims,
-                                  block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        group_norm_f32(
-                            x, dst, group_size, ne_elements, eps_ct4, item_ct1,
-                            s_sum_acc_ct1.get_pointer(), WARP_SIZE);
-                    });
-        });
-    } else {
-        const int work_group_size = GROUP_SIZE;
-        const sycl::range<3> block_dims(1, 1, work_group_size);
-        /*
-        DPCT1049:18: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-
-        stream->submit([&](sycl::handler &cgh) {
-            sycl::local_accessor<float, 1> s_sum_acc_ct1(sycl::range<1>(32),
-                                                         cgh);
-
-            const float eps_ct4 = eps;
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(sycl::range<3>(1, 1, num_groups) * block_dims,
-                                  block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        group_norm_f32(x, dst, group_size, ne_elements,
-                                             eps_ct4, item_ct1,
-                                             s_sum_acc_ct1.get_pointer(), work_group_size);
-                    });
-        });
-    }
-}
-
-static void concat_f32_sycl(const float *x, const float *y, float *dst,
-                            const int ne0, int ne1, int ne2, int ne02,
-                            queue_ptr stream) {
-    int num_blocks = (ne0 + SYCL_CONCAT_BLOCK_SIZE - 1) / SYCL_CONCAT_BLOCK_SIZE;
-    sycl::range<3> gridDim(ne2, ne1, num_blocks);
-    stream->parallel_for(
-        sycl::nd_range<3>(gridDim *
-                              sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            concat_f32(x, y, dst, ne0, ne02, item_ct1);
-        });
-}
-
-static void upscale_f32_sycl(const float *x, float *dst, const int nb00, const int nb01,
-                             const int nb02, const int nb03, const int ne10, const int ne11,
-                             const int ne12, const int ne13, const float sf0, const float sf1,
-                             const float sf2, const float sf3, queue_ptr stream) {
-    int dst_size = ne10 * ne11 * ne12 * ne13;
-    int num_blocks = (dst_size + SYCL_UPSCALE_BLOCK_SIZE - 1) / SYCL_UPSCALE_BLOCK_SIZE;
-    sycl::range<1> gridDim(num_blocks * SYCL_UPSCALE_BLOCK_SIZE);
-    stream->parallel_for(
-        sycl::nd_range<1>(gridDim, sycl::range<1>(SYCL_UPSCALE_BLOCK_SIZE)),
-        [=](sycl::nd_item<1> item_ct1) {
-            upscale_f32(x, dst, nb00, nb01, nb02, nb03, ne10, ne11, ne12, ne13, sf0, sf1, sf2, sf3, item_ct1);
-        });
-}
-
-static void pad_f32_sycl(const float *x, float *dst, const int ne00,
-                         const int ne01, const int ne02, const int ne0,
-                         const int ne1, const int ne2, queue_ptr stream) {
-    int num_blocks = (ne0 + SYCL_PAD_BLOCK_SIZE - 1) / SYCL_PAD_BLOCK_SIZE;
-    sycl::range<3> gridDim(ne2, ne1, num_blocks);
-    stream->parallel_for(
-        sycl::nd_range<3>(gridDim * sycl::range<3>(1, 1, SYCL_PAD_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_PAD_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            pad_f32(x, dst, ne0, ne00, ne01, ne02, item_ct1);
-        });
-}
-
-static void rms_norm_f32_sycl(const float *x, float *dst, const int ncols,
-                              const int nrows, const float eps,
-                              queue_ptr stream) {
-    GGML_ASSERT(ncols % WARP_SIZE == 0);
-    // printf("%s ncols=%d, nrows=%d, WARP_SIZE=%d\n", __func__, ncols, nrows, WARP_SIZE);
-    if (ncols < 1024) {
-        const sycl::range<3> block_dims(1, 1, WARP_SIZE);
-        stream->submit([&](sycl::handler &cgh) {
-            sycl::local_accessor<float, 1> s_sum_acc_ct1(sycl::range<1>(32),
-                                                         cgh);
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims,
-                                  block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        rms_norm_f32(x, dst, ncols, eps, item_ct1,
-                                                s_sum_acc_ct1.get_pointer(), WARP_SIZE);
-                    });
-        });
-    } else {
-        const int work_group_size = GROUP_SIZE;
-        const sycl::range<3> block_dims(1, 1, work_group_size);
-        /*
-        DPCT1049:19: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        stream->submit([&](sycl::handler &cgh) {
-            sycl::local_accessor<float, 1> s_sum_acc_ct1(sycl::range<1>(32),
-                                                         cgh);
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims,
-                                  block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        rms_norm_f32(x, dst, ncols, eps, item_ct1,
-                                           s_sum_acc_ct1.get_pointer(), work_group_size);
-                    });
-        });
-    }
-}
-
-static void quantize_row_q8_1_sycl(const float *x, void *vy, const int kx,
-                                   const int ky, const int kx_padded,
-                                   queue_ptr stream) {
-    const int block_num_x = (kx_padded + SYCL_QUANTIZE_BLOCK_SIZE - 1) / SYCL_QUANTIZE_BLOCK_SIZE;
-    const sycl::range<3> num_blocks(1, ky, block_num_x);
-    const sycl::range<3> block_size(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(num_blocks * block_size, block_size),
-            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-                quantize_q8_1(x, vy, kx, kx_padded, item_ct1);
-            });
-    }
-}
-
-template <int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
-static void dequantize_block_sycl(const void *__restrict__ vx,
-                                  dst_t *__restrict__ y, const int k,
-                                  queue_ptr stream) {
-    const int num_blocks = (k + 2*SYCL_DEQUANTIZE_BLOCK_SIZE - 1) / (2*SYCL_DEQUANTIZE_BLOCK_SIZE);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-        stream->parallel_for(
-            sycl::nd_range<3>(
-                sycl::range<3>(1, 1, num_blocks) *
-                    sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE),
-                sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE)),
-            [=](sycl::nd_item<3> item_ct1) {
-                dequantize_block<qk, qr, dequantize_kernel>(vx, y, k, item_ct1);
-            });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_q2_K_sycl(const void *vx, dst_t *y, const int k,
-                                     queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 64),
-                                               sycl::range<3>(1, 1, 64)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_q2_K(vx, y, item_ct1);
-                             });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_q3_K_sycl(const void *vx, dst_t *y, const int k,
-                                     queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 64),
-                                               sycl::range<3>(1, 1, 64)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_q3_K(vx, y, item_ct1);
-                             });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_q4_0_sycl(const void *vx, dst_t *y, const int k,
-                                     queue_ptr stream) {
-    const int nb32 = k / 32;
-    const int nb = (k + 255) / 256;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 32),
-                                               sycl::range<3>(1, 1, 32)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_q4_0(vx, y, nb32, item_ct1);
-                             });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_q4_1_sycl(const void *vx, dst_t *y, const int k,
-                                     queue_ptr stream) {
-    const int nb32 = k / 32;
-    const int nb = (k + 255) / 256;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 32),
-                                               sycl::range<3>(1, 1, 32)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_q4_1(vx, y, nb32, item_ct1);
-                             });
-    }
-}
-
-
-template <typename dst_t>
-static void dequantize_row_q4_K_sycl(const void *vx, dst_t *y, const int k,
-                                     queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 32),
-                                               sycl::range<3>(1, 1, 32)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_q4_K(vx, y, item_ct1);
-                             });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_q5_K_sycl(const void *vx, dst_t *y, const int k,
-                                     queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 64),
-                                               sycl::range<3>(1, 1, 64)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_q5_K(vx, y, item_ct1);
-                             });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_q6_K_sycl(const void *vx, dst_t *y, const int k,
-                                     queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 64),
-                                               sycl::range<3>(1, 1, 64)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_q6_K(vx, y, item_ct1);
-                             });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_iq1_s_sycl(const void *vx, dst_t *y, const int k,
-                                        queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 32),
-                                               sycl::range<3>(1, 1, 32)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_iq1_s(
-                                     vx, y, item_ct1, iq1s_grid_gpu
-                                     );
-                             });
-        });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_iq1_m_sycl(const void *vx, dst_t *y, const int k,
-                                        queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 32),
-                                               sycl::range<3>(1, 1, 32)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_iq1_m(
-                                     vx, y, item_ct1, iq1s_grid_gpu
-                                     );
-                             });
-        });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_iq2_xxs_sycl(const void *vx, dst_t *y, const int k,
-                                        queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 32),
-                                               sycl::range<3>(1, 1, 32)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_iq2_xxs(
-                                     vx, y, item_ct1, iq2xxs_grid,
-                                     ksigns_iq2xs, kmask_iq2xs);
-                             });
-        });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_iq2_xs_sycl(const void *vx, dst_t *y, const int k,
-                                       queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 32),
-                                               sycl::range<3>(1, 1, 32)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_iq2_xs(
-                                     vx, y, item_ct1, iq2xs_grid,
-                                     ksigns_iq2xs, kmask_iq2xs);
-                             });
-        });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_iq2_s_sycl(const void *vx, dst_t *y, const int k,
-                                      queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 32),
-                                               sycl::range<3>(1, 1, 32)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_iq2_s(vx, y, item_ct1);
-                             });
-        });
-    }
-}
-
-
-template <typename dst_t>
-static void dequantize_row_iq3_xxs_sycl(const void *vx, dst_t *y, const int k,
-                                        queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 32),
-                                               sycl::range<3>(1, 1, 32)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_iq3_xxs(
-                                     vx, y, item_ct1, iq3xxs_grid,
-                                     ksigns_iq2xs, kmask_iq2xs);
-                             });
-        });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_iq3_s_sycl(const void *vx, dst_t *y, const int k,
-                                        queue_ptr stream) {
-    const int nb = k / QK_K;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                                   sycl::range<3>(1, 1, 32),
-                                               sycl::range<3>(1, 1, 32)),
-                             [=](sycl::nd_item<3> item_ct1) {
-                                 dequantize_block_iq3_s(
-                                     vx, y, item_ct1, kmask_iq2xs, iq3s_grid);
-                             });
-        });
-    }
-}
-
-template <typename dst_t>
-static void dequantize_row_iq4_xs_sycl(const void *vx, dst_t *y, const int k,
-                                       queue_ptr stream) {
-    const int nb = (k + QK_K - 1) / QK_K;
-      {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                  cgh.parallel_for(
-                      sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                            sycl::range<3>(1, 1, 32),
-                                        sycl::range<3>(1, 1, 32)),
-                      [=](sycl::nd_item<3> item_ct1) {
-                            dequantize_block_iq4_xs(vx, y, item_ct1);
-                      });
-            });
-      }
-}
-
-
-template <typename dst_t>
-static void dequantize_row_iq4_nl_sycl(const void *vx, dst_t *y, const int k,
-                                       queue_ptr stream) {
-    const int nb = (k + QK_K - 1) / QK_K;
-      {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                  cgh.parallel_for(
-                      sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
-                                            sycl::range<3>(1, 1, 32),
-                                        sycl::range<3>(1, 1, 32)),
-                      [=](sycl::nd_item<3> item_ct1) {
-                            dequantize_block_iq4_nl(vx, y, item_ct1);
-                      });
-            });
-      }
-}
-
-
-
-template <typename src_t, typename dst_t>
-static void convert_unary_sycl(const void *__restrict__ vx,
-                               dst_t *__restrict__ y, const int k,
-                               queue_ptr stream) {
-    const int num_blocks = (k + SYCL_DEQUANTIZE_BLOCK_SIZE - 1) / SYCL_DEQUANTIZE_BLOCK_SIZE;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(
-                sycl::range<3>(1, 1, num_blocks) *
-                    sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE),
-                sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE)),
-            [=](sycl::nd_item<3> item_ct1) {
-                convert_unary<src_t>(vx, y, k, item_ct1);
-            });
-    }
-}
-
-
-static to_fp16_sycl_t ggml_get_to_fp16_sycl(ggml_type type) try {
-    int id;
-    switch (type) {
-        case GGML_TYPE_Q4_0:
-            return dequantize_block_sycl<QK4_0, QR4_0, dequantize_q4_0>;
-        case GGML_TYPE_Q4_1:
-            return dequantize_block_sycl<QK4_1, QR4_1, dequantize_q4_1>;
-        case GGML_TYPE_Q5_0:
-            return dequantize_block_sycl<QK5_0, QR5_0, dequantize_q5_0>;
-        case GGML_TYPE_Q5_1:
-            return dequantize_block_sycl<QK5_1, QR5_1, dequantize_q5_1>;
-        case GGML_TYPE_Q8_0:
-            return dequantize_block_sycl<QK8_0, QR8_0, dequantize_q8_0>;
-        case GGML_TYPE_Q2_K:
-            return dequantize_row_q2_K_sycl;
-        case GGML_TYPE_Q3_K:
-            return dequantize_row_q3_K_sycl;
-        case GGML_TYPE_Q4_K:
-            return dequantize_row_q4_K_sycl;
-        case GGML_TYPE_Q5_K:
-            return dequantize_row_q5_K_sycl;
-        case GGML_TYPE_Q6_K:
-            return dequantize_row_q6_K_sycl;
-        case GGML_TYPE_IQ1_S:
-            return dequantize_row_iq1_s_sycl;
-        case GGML_TYPE_IQ1_M:
-            return dequantize_row_iq1_m_sycl;
-        case GGML_TYPE_IQ2_XXS:
-            return dequantize_row_iq2_xxs_sycl;
-        case GGML_TYPE_IQ2_XS:
-            return dequantize_row_iq2_xs_sycl;
-        case GGML_TYPE_IQ2_S:
-            return dequantize_row_iq2_s_sycl;
-        case GGML_TYPE_IQ3_XXS:
-            return dequantize_row_iq3_xxs_sycl;
-        case GGML_TYPE_IQ3_S:
-            return dequantize_row_iq3_s_sycl;
-        case GGML_TYPE_IQ4_XS:
-            return dequantize_row_iq4_xs_sycl;
-        case GGML_TYPE_IQ4_NL:
-            return dequantize_row_iq4_nl_sycl;
-        case GGML_TYPE_F32:
-            return convert_unary_sycl<float>;
-        default:
-            return nullptr;
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static to_fp32_sycl_t ggml_get_to_fp32_sycl(ggml_type type) {
-    switch (type) {
-        case GGML_TYPE_Q4_0:
-            return dequantize_row_q4_0_sycl;
-        case GGML_TYPE_Q4_1:
-            return dequantize_row_q4_1_sycl;
-        case GGML_TYPE_Q5_0:
-            return dequantize_block_sycl<QK5_0, QR5_0, dequantize_q5_0>;
-        case GGML_TYPE_Q5_1:
-            return dequantize_block_sycl<QK5_1, QR5_1, dequantize_q5_1>;
-        case GGML_TYPE_Q8_0:
-            return dequantize_block_sycl<QK8_0, QR8_0, dequantize_q8_0>;
-        case GGML_TYPE_Q2_K:
-            return dequantize_row_q2_K_sycl;
-        case GGML_TYPE_Q3_K:
-            return dequantize_row_q3_K_sycl;
-        case GGML_TYPE_Q4_K:
-            return dequantize_row_q4_K_sycl;
-        case GGML_TYPE_Q5_K:
-            return dequantize_row_q5_K_sycl;
-        case GGML_TYPE_Q6_K:
-            return dequantize_row_q6_K_sycl;
-        case GGML_TYPE_IQ1_S:
-            return dequantize_row_iq1_s_sycl;
-        case GGML_TYPE_IQ1_M:
-            return dequantize_row_iq1_m_sycl;
-        case GGML_TYPE_IQ2_XXS:
-            return dequantize_row_iq2_xxs_sycl;
-        case GGML_TYPE_IQ2_XS:
-            return dequantize_row_iq2_xs_sycl;
-        case GGML_TYPE_IQ2_S:
-            return dequantize_row_iq2_s_sycl;
-        case GGML_TYPE_IQ3_XXS:
-            return dequantize_row_iq3_xxs_sycl;
-        case GGML_TYPE_IQ3_S:
-            return dequantize_row_iq3_s_sycl;
-        case GGML_TYPE_IQ4_XS:
-            return dequantize_row_iq4_xs_sycl;
-        case GGML_TYPE_IQ4_NL:
-            return dequantize_row_iq4_nl_sycl;
-        case GGML_TYPE_F16:
-            return convert_unary_sycl<sycl::half>;
-        default:
-            return nullptr;
-    }
-}
-
-static void dequantize_mul_mat_vec_q4_0_sycl(const void *vx, const dfloat *y,
-                                             float *dst, const int ncols,
-                                             const int nrows,
-                                             queue_ptr stream) {
-    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    // the number of rows may exceed maximum grid size in the y or z dimensions, use the x dimension instead
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-                dequantize_mul_mat_vec<QK4_0, QR4_0, dequantize_q4_0>(
-                    vx, y, dst, ncols, nrows, item_ct1);
-            });
-    }
-}
-
-static void dequantize_mul_mat_vec_q4_1_sycl(const void *vx, const dfloat *y,
-                                             float *dst, const int ncols,
-                                             const int nrows,
-                                             queue_ptr stream) {
-    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-                dequantize_mul_mat_vec<QK4_1, QR4_1, dequantize_q4_1>(
-                    vx, y, dst, ncols, nrows, item_ct1);
-            });
-    }
-}
-
-static void dequantize_mul_mat_vec_q5_0_sycl(const void *vx, const dfloat *y,
-                                             float *dst, const int ncols,
-                                             const int nrows,
-                                             queue_ptr stream) {
-    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-                dequantize_mul_mat_vec<QK5_0, QR5_0, dequantize_q5_0>(
-                    vx, y, dst, ncols, nrows, item_ct1);
-            });
-    }
-}
-
-static void dequantize_mul_mat_vec_q5_1_sycl(const void *vx, const dfloat *y,
-                                             float *dst, const int ncols,
-                                             const int nrows,
-                                             queue_ptr stream) {
-    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-                dequantize_mul_mat_vec<QK5_1, QR5_1, dequantize_q5_1>(
-                    vx, y, dst, ncols, nrows, item_ct1);
-            });
-    }
-}
-
-static void dequantize_mul_mat_vec_q8_0_sycl(const void *vx, const dfloat *y,
-                                             float *dst, const int ncols,
-                                             const int nrows,
-                                             queue_ptr stream) {
-    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-                dequantize_mul_mat_vec<QK8_0, QR8_0, dequantize_q8_0>(
-                    vx, y, dst, ncols, nrows, item_ct1);
-            });
-    }
-}
-
-static void dequantize_mul_mat_vec_q2_K_sycl(const void *vx, const float *y,
-                                             float *dst, const int ncols,
-                                             const int nrows,
-                                             queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int ny = 2; // very slightly faster than 1 even when K_QUANTS_PER_ITERATION = 2
-    const int block_num_y = (nrows + ny - 1) / ny;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, ny, 32);
-    stream->parallel_for(
-        sycl::nd_range<3>(block_nums * block_dims, block_dims),
-        [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-            dequantize_mul_mat_vec_q2_k(vx, y, dst, ncols, nrows, item_ct1);
-        });
-}
-
-static void dequantize_mul_mat_vec_q3_K_sycl(const void *vx, const float *y,
-                                             float *dst, const int ncols,
-                                             const int nrows,
-                                             queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int ny = 2 / K_QUANTS_PER_ITERATION;
-    const int block_num_y = (nrows + ny - 1) / ny;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, ny, 32);
-    stream->parallel_for(
-        sycl::nd_range<3>(block_nums * block_dims, block_dims),
-        [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-            dequantize_mul_mat_vec_q3_k(vx, y, dst, ncols, nrows, item_ct1);
-        });
-}
-
-static void dequantize_mul_mat_vec_q4_K_sycl(const void *vx, const float *y,
-                                             float *dst, const int ncols,
-                                             const int nrows,
-                                             queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int ny = 2 / K_QUANTS_PER_ITERATION;
-    const int block_num_y = (nrows + ny - 1) / ny;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, ny, 32);
-    stream->parallel_for(
-        sycl::nd_range<3>(block_nums * block_dims, block_dims),
-        [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-            dequantize_mul_mat_vec_q4_k(vx, y, dst, ncols, nrows, item_ct1);
-        });
-}
-
-static void dequantize_mul_mat_vec_q5_K_sycl(const void *vx, const float *y,
-                                             float *dst, const int ncols,
-                                             const int nrows,
-                                             queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const sycl::range<3> block_dims(1, 1, 32);
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims, block_dims),
-        [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-            dequantize_mul_mat_vec_q5_k(vx, y, dst, ncols, item_ct1);
-        });
-}
-
-static void dequantize_mul_mat_vec_q6_K_sycl(const void *vx, const float *y,
-                                             float *dst, const int ncols,
-                                             const int nrows,
-                                             queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int ny = 2 / K_QUANTS_PER_ITERATION;
-    const int block_num_y = (nrows + ny - 1) / ny;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, ny, 32);
-    stream->parallel_for(
-        sycl::nd_range<3>(block_nums * block_dims, block_dims),
-        [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-            dequantize_mul_mat_vec_q6_k(vx, y, dst, ncols, nrows, item_ct1);
-        });
-}
-
-static void convert_mul_mat_vec_f16_sycl(const void *vx, const dfloat *y,
-                                         float *dst, const int ncols,
-                                         const int nrows,
-                                         queue_ptr stream) {
-    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-                dequantize_mul_mat_vec<1, 1, convert_f16>(vx, y, dst, ncols,
-                                                          nrows, item_ct1);
-            });
-    }
-}
-
-
-static void mul_mat_vec_q4_0_q8_1_sycl(const void *vx, const void *vy,
-                                       float *dst, const int ncols,
-                                       const int nrows,
-                                       queue_ptr stream) {
-    GGML_ASSERT(ncols % QK4_0 == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q<QK4_0, QI4_0, block_q4_0,
-                                      VDR_Q4_0_Q8_1_MMVQ, vec_dot_q4_0_q8_1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_q4_1_q8_1_sycl(const void *vx, const void *vy,
-                                       float *dst, const int ncols,
-                                       const int nrows,
-                                       queue_ptr stream) {
-    GGML_ASSERT(ncols % QK4_1 == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q<QK4_0, QI4_1, block_q4_1,
-                                      VDR_Q4_1_Q8_1_MMVQ, vec_dot_q4_1_q8_1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_q5_0_q8_1_sycl(const void *vx, const void *vy,
-                                       float *dst, const int ncols,
-                                       const int nrows,
-                                       queue_ptr stream) {
-    GGML_ASSERT(ncols % QK5_0 == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q<QK5_0, QI5_0, block_q5_0,
-                                      VDR_Q5_0_Q8_1_MMVQ, vec_dot_q5_0_q8_1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_q5_1_q8_1_sycl(const void *vx, const void *vy,
-                                       float *dst, const int ncols,
-                                       const int nrows,
-                                       queue_ptr stream) {
-    GGML_ASSERT(ncols % QK5_1 == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q<QK5_1, QI5_1, block_q5_1,
-                                      VDR_Q5_1_Q8_1_MMVQ, vec_dot_q5_1_q8_1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_q8_0_q8_1_sycl(const void *vx, const void *vy,
-                                       float *dst, const int ncols,
-                                       const int nrows,
-                                       queue_ptr stream) {
-    GGML_ASSERT(ncols % QK8_0 == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q<QK8_0, QI8_0, block_q8_0,
-                                      VDR_Q8_0_Q8_1_MMVQ, vec_dot_q8_0_q8_1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_q2_K_q8_1_sycl(const void *vx, const void *vy,
-                                       float *dst, const int ncols,
-                                       const int nrows,
-                                       queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q<QK_K, QI2_K, block_q2_K,
-                                      VDR_Q2_K_Q8_1_MMVQ, vec_dot_q2_K_q8_1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_q3_K_q8_1_sycl(const void *vx, const void *vy,
-                                       float *dst, const int ncols,
-                                       const int nrows,
-                                       queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q<QK_K, QI3_K, block_q3_K,
-                                      VDR_Q3_K_Q8_1_MMVQ, vec_dot_q3_K_q8_1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_q4_K_q8_1_sycl(const void *vx, const void *vy,
-                                       float *dst, const int ncols,
-                                       const int nrows,
-                                       queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q<QK_K, QI4_K, block_q4_K,
-                                      VDR_Q4_K_Q8_1_MMVQ, vec_dot_q4_K_q8_1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_q5_K_q8_1_sycl(const void *vx, const void *vy,
-                                       float *dst, const int ncols,
-                                       const int nrows,
-                                       queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q<QK_K, QI5_K, block_q5_K,
-                                      VDR_Q5_K_Q8_1_MMVQ, vec_dot_q5_K_q8_1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_q6_K_q8_1_sycl(const void *vx, const void *vy,
-                                       float *dst, const int ncols,
-                                       const int nrows,
-                                       queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q<QK_K, QI6_K, block_q6_K,
-                                      VDR_Q6_K_Q8_1_MMVQ, vec_dot_q6_K_q8_1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-
-static void mul_mat_vec_iq2_xxs_q8_1_sycl(const void *vx, const void *vy,
-                                          float *dst, const int ncols,
-                                          const int nrows,
-                                          queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q_iq2_xxs_q8_1<QK_K, QI2_XXS, block_iq2_xxs, 1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_iq2_xs_q8_1_sycl(const void *vx, const void *vy,
-                                         float *dst, const int ncols,
-                                         const int nrows,
-                                         queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-            auto iq2xs_grid_ptr_ct1 = &iq2xs_grid[0];
-            auto ksigns64_ptr_ct1 = &ksigns64[0];
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q_iq2_xs_q8_1<QK_K, QI2_XS, block_iq2_xs, 1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_iq2_s_q8_1_sycl(const void *vx, const void *vy,
-                                         float *dst, const int ncols,
-                                         const int nrows,
-                                         queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-            auto iq2xs_grid_ptr_ct1 = &iq2xs_grid[0];
-            auto ksigns64_ptr_ct1 = &ksigns64[0];
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q_iq2_s_q8_1<QK_K, QI2_S, block_iq2_s, 1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_iq3_xxs_q8_1_sycl(const void *vx, const void *vy,
-                                          float *dst, const int ncols,
-                                          const int nrows,
-                                          queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-            auto iq3xxs_grid_ptr_ct1 = &iq3xxs_grid[0];
-            auto ksigns64_ptr_ct1 = &ksigns64[0];
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q_iq3_xxs_q8_1<QK_K, QI3_XXS, block_iq3_xxs, 1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_iq3_s_q8_1_sycl(const void *vx, const void *vy,
-                                          float *dst, const int ncols,
-                                          const int nrows,
-                                          queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-            auto iq3s_grid_ptr_ct1 = &iq3s_grid[0];
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q_iq3_s_q8_1<QK_K, QI3_XS, block_iq3_s, 1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_iq1_s_q8_1_sycl(const void *vx, const void *vy,
-                                          float *dst, const int ncols,
-                                          const int nrows,
-                                          queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-            auto iq1s_grid_ptr_ct1 = &iq1s_grid_gpu[0];
-            auto ksigns64_ptr_ct1 = &ksigns64[0];
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q_iq1_s_q8_1<QK_K, QI1_S, block_iq1_s, 1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_iq1_m_q8_1_sycl(const void *vx, const void *vy,
-                                          float *dst, const int ncols,
-                                          const int nrows,
-                                          queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q_iq1_m_q8_1<QK_K, QI1_S, block_iq1_m, 1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_iq4_nl_q8_1_sycl(const void *vx, const void *vy,
-                                          float *dst, const int ncols,
-                                          const int nrows,
-                                          queue_ptr stream) {
-    GGML_ASSERT(ncols % QK4_NL == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q_iq4_nl_q8_1<QK4_NL, QI4_NL, block_iq4_nl, 1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void mul_mat_vec_iq4_xs_q8_1_sycl(const void *vx, const void *vy,
-                                          float *dst, const int ncols,
-                                          const int nrows,
-                                          queue_ptr stream) {
-    GGML_ASSERT(ncols % QK_K == 0);
-    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
-    const sycl::range<3> block_nums(1, 1, block_num_y);
-    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
-    {
-
-        stream->submit([&](sycl::handler &cgh) {
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1)
-                    [[intel::reqd_sub_group_size(32)]] {
-                        mul_mat_vec_q_iq4_xs_q8_1<QK_K, QI4_XS, block_iq4_xs, 1>(
-                            vx, vy, dst, ncols, nrows, item_ct1);
-                    });
-        });
-    }
-}
-
-static void ggml_mul_mat_q4_0_q8_1_sycl(const void *vx, const void *vy,
-                                        float *dst, const int ncols_x,
-                                        const int nrows_x, const int ncols_y,
-                                        const int nrows_y, const int nrows_dst,
-                                        queue_ptr stream) try {
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-    const int compute_capability = ggml_sycl_info().devices[id].cc;
-
-    int mmq_x, mmq_y, nwarps;
-    if (compute_capability >= VER_GEN13) {
-        mmq_x  =  MMQ_X_Q4_0_RDNA2;
-        mmq_y  =  MMQ_Y_Q4_0_RDNA2;
-        nwarps = NWARPS_Q4_0_RDNA2;
-    } else if (compute_capability >= VER_GEN12) {
-        mmq_x  =  MMQ_X_Q4_0_RDNA1;
-        mmq_y  =  MMQ_Y_Q4_0_RDNA1;
-        nwarps = NWARPS_Q4_0_RDNA1;
-    } else if (compute_capability >= VER_GEN9) {
-        mmq_x  =  MMQ_X_Q4_0_AMPERE;
-        mmq_y  =  MMQ_Y_Q4_0_AMPERE;
-        nwarps = NWARPS_Q4_0_AMPERE;
-    } else if (compute_capability >= VER_4VEC) {
-        mmq_x  =  MMQ_X_Q4_0_PASCAL;
-        mmq_y  =  MMQ_Y_Q4_0_PASCAL;
-        nwarps = NWARPS_Q4_0_PASCAL;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
-    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
-    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
-    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
-
-    if (nrows_x % mmq_y == 0) {
-        const bool need_check = false;
-        /*
-        DPCT1049:20: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_qs_q4_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<float, 1> tile_x_d_q4_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_0) + mmq_y / QI4_0),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q4_0<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_qs_q4_0_acc_ct1.get_pointer(),
-                            tile_x_d_q4_0_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    } else {
-        const bool need_check = true;
-        /*
-        DPCT1049:21: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_qs_q4_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<float, 1> tile_x_d_q4_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_0) + mmq_y / QI4_0),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q4_0<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_qs_q4_0_acc_ct1.get_pointer(),
-                            tile_x_d_q4_0_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_mul_mat_q4_1_q8_1_sycl(const void *vx, const void *vy,
-                                        float *dst, const int ncols_x,
-                                        const int nrows_x, const int ncols_y,
-                                        const int nrows_y, const int nrows_dst,
-                                        queue_ptr stream) try {
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-    const int compute_capability = ggml_sycl_info().devices[id].cc;
-
-    int mmq_x, mmq_y, nwarps;
-    if (compute_capability >= VER_GEN13) {
-        mmq_x  =  MMQ_X_Q4_1_RDNA2;
-        mmq_y  =  MMQ_Y_Q4_1_RDNA2;
-        nwarps = NWARPS_Q4_1_RDNA2;
-    } else if (compute_capability >= VER_GEN12) {
-        mmq_x  =  MMQ_X_Q4_1_RDNA1;
-        mmq_y  =  MMQ_Y_Q4_1_RDNA1;
-        nwarps = NWARPS_Q4_1_RDNA1;
-    } else if (compute_capability >= VER_GEN9) {
-        mmq_x  =  MMQ_X_Q4_1_AMPERE;
-        mmq_y  =  MMQ_Y_Q4_1_AMPERE;
-        nwarps = NWARPS_Q4_1_AMPERE;
-    } else if (compute_capability >= VER_4VEC) {
-        mmq_x  =  MMQ_X_Q4_1_PASCAL;
-        mmq_y  =  MMQ_Y_Q4_1_PASCAL;
-        nwarps = NWARPS_Q4_1_PASCAL;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
-    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
-    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
-    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
-
-    if (nrows_x % mmq_y == 0) {
-        const bool need_check = false;
-        /*
-        DPCT1049:22: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_qs_q4_1_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + +mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q4_1_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_1) + mmq_y / QI4_1),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q4_1<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_qs_q4_1_acc_ct1.get_pointer(),
-                            tile_x_dm_q4_1_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    } else {
-        const bool need_check = true;
-        /*
-        DPCT1049:23: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_qs_q4_1_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + +mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q4_1_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_1) + mmq_y / QI4_1),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q4_1<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_qs_q4_1_acc_ct1.get_pointer(),
-                            tile_x_dm_q4_1_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_mul_mat_q5_0_q8_1_sycl(const void *vx, const void *vy,
-                                        float *dst, const int ncols_x,
-                                        const int nrows_x, const int ncols_y,
-                                        const int nrows_y, const int nrows_dst,
-                                        queue_ptr stream) try {
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-    const int compute_capability = ggml_sycl_info().devices[id].cc;
-
-    int mmq_x, mmq_y, nwarps;
-    if (compute_capability >= VER_GEN13) {
-        mmq_x  =  MMQ_X_Q5_0_RDNA2;
-        mmq_y  =  MMQ_Y_Q5_0_RDNA2;
-        nwarps = NWARPS_Q5_0_RDNA2;
-    } else if (compute_capability >= VER_GEN12) {
-        mmq_x  =  MMQ_X_Q5_0_RDNA1;
-        mmq_y  =  MMQ_Y_Q5_0_RDNA1;
-        nwarps = NWARPS_Q5_0_RDNA1;
-    } else if (compute_capability >= VER_GEN9) {
-        mmq_x  =  MMQ_X_Q5_0_AMPERE;
-        mmq_y  =  MMQ_Y_Q5_0_AMPERE;
-        nwarps = NWARPS_Q5_0_AMPERE;
-    } else if (compute_capability >= VER_4VEC) {
-        mmq_x  =  MMQ_X_Q5_0_PASCAL;
-        mmq_y  =  MMQ_Y_Q5_0_PASCAL;
-        nwarps = NWARPS_Q5_0_PASCAL;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
-    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
-    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
-    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
-
-    if (nrows_x % mmq_y == 0) {
-        const bool need_check = false;
-        /*
-        DPCT1049:24: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q5_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<float, 1> tile_x_d_q5_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_0) + mmq_y / QI5_0),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q5_0<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q5_0_acc_ct1.get_pointer(),
-                            tile_x_d_q5_0_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    } else {
-        const bool need_check = true;
-        /*
-        DPCT1049:25: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q5_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<float, 1> tile_x_d_q5_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_0) + mmq_y / QI5_0),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q5_0<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q5_0_acc_ct1.get_pointer(),
-                            tile_x_d_q5_0_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_mul_mat_q5_1_q8_1_sycl(const void *vx, const void *vy,
-                                        float *dst, const int ncols_x,
-                                        const int nrows_x, const int ncols_y,
-                                        const int nrows_y, const int nrows_dst,
-                                        queue_ptr stream) try {
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-    const int compute_capability = ggml_sycl_info().devices[id].cc;
-
-    int mmq_x, mmq_y, nwarps;
-    if (compute_capability >= VER_GEN13) {
-        mmq_x  =  MMQ_X_Q5_1_RDNA2;
-        mmq_y  =  MMQ_Y_Q5_1_RDNA2;
-        nwarps = NWARPS_Q5_1_RDNA2;
-    } else if (compute_capability >= VER_GEN12) {
-        mmq_x  =  MMQ_X_Q5_1_RDNA1;
-        mmq_y  =  MMQ_Y_Q5_1_RDNA1;
-        nwarps = NWARPS_Q5_1_RDNA1;
-    } else if (compute_capability >= VER_GEN9) {
-        mmq_x  =  MMQ_X_Q5_1_AMPERE;
-        mmq_y  =  MMQ_Y_Q5_1_AMPERE;
-        nwarps = NWARPS_Q5_1_AMPERE;
-    } else if (compute_capability >= VER_4VEC) {
-        mmq_x  =  MMQ_X_Q5_1_PASCAL;
-        mmq_y  =  MMQ_Y_Q5_1_PASCAL;
-        nwarps = NWARPS_Q5_1_PASCAL;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
-    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
-    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
-    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
-
-    if (nrows_x % mmq_y == 0) {
-        const bool need_check = false;
-        /*
-        DPCT1049:26: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q5_1_acc_ct1(
-                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q5_1_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_1) + mmq_y / QI5_1),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q5_1<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q5_1_acc_ct1.get_pointer(),
-                            tile_x_dm_q5_1_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    } else {
-        const bool need_check = true;
-        /*
-        DPCT1049:27: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q5_1_acc_ct1(
-                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q5_1_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_1) + mmq_y / QI5_1),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q5_1<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q5_1_acc_ct1.get_pointer(),
-                            tile_x_dm_q5_1_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_mul_mat_q8_0_q8_1_sycl(const void *vx, const void *vy,
-                                        float *dst, const int ncols_x,
-                                        const int nrows_x, const int ncols_y,
-                                        const int nrows_y, const int nrows_dst,
-                                        queue_ptr stream) try {
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-    const int compute_capability = ggml_sycl_info().devices[id].cc;
-
-    int mmq_x, mmq_y, nwarps;
-    if (compute_capability >= VER_GEN13) {
-        mmq_x  =  MMQ_X_Q8_0_RDNA2;
-        mmq_y  =  MMQ_Y_Q8_0_RDNA2;
-        nwarps = NWARPS_Q8_0_RDNA2;
-    } else if (compute_capability >= VER_GEN12) {
-        mmq_x  =  MMQ_X_Q8_0_RDNA1;
-        mmq_y  =  MMQ_Y_Q8_0_RDNA1;
-        nwarps = NWARPS_Q8_0_RDNA1;
-    } else if (compute_capability >= VER_GEN9) {
-        mmq_x  =  MMQ_X_Q8_0_AMPERE;
-        mmq_y  =  MMQ_Y_Q8_0_AMPERE;
-        nwarps = NWARPS_Q8_0_AMPERE;
-    } else if (compute_capability >= VER_4VEC) {
-        mmq_x  =  MMQ_X_Q8_0_PASCAL;
-        mmq_y  =  MMQ_Y_Q8_0_PASCAL;
-        nwarps = NWARPS_Q8_0_PASCAL;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
-    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
-    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
-    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
-
-    if (nrows_x % mmq_y == 0) {
-        const bool need_check = false;
-        /*
-        DPCT1049:28: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_qs_q8_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<float, 1> tile_x_d_q8_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI8_0) + mmq_y / QI8_0),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q8_0<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_qs_q8_0_acc_ct1.get_pointer(),
-                            tile_x_d_q8_0_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    } else {
-        const bool need_check = true;
-        /*
-        DPCT1049:29: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_qs_q8_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<float, 1> tile_x_d_q8_0_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI8_0) + mmq_y / QI8_0),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q8_0<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_qs_q8_0_acc_ct1.get_pointer(),
-                            tile_x_d_q8_0_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_mul_mat_q2_K_q8_1_sycl(const void *vx, const void *vy,
-                                        float *dst, const int ncols_x,
-                                        const int nrows_x, const int ncols_y,
-                                        const int nrows_y, const int nrows_dst,
-                                        queue_ptr stream) try {
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-    const int compute_capability = ggml_sycl_info().devices[id].cc;
-
-    int mmq_x, mmq_y, nwarps;
-    if (compute_capability >= VER_GEN13) {
-        mmq_x  =  MMQ_X_Q2_K_RDNA2;
-        mmq_y  =  MMQ_Y_Q2_K_RDNA2;
-        nwarps = NWARPS_Q2_K_RDNA2;
-    } else if (compute_capability >= VER_GEN12) {
-        mmq_x  =  MMQ_X_Q2_K_RDNA1;
-        mmq_y  =  MMQ_Y_Q2_K_RDNA1;
-        nwarps = NWARPS_Q2_K_RDNA1;
-    } else if (compute_capability >= VER_GEN9) {
-        mmq_x  =  MMQ_X_Q2_K_AMPERE;
-        mmq_y  =  MMQ_Y_Q2_K_AMPERE;
-        nwarps = NWARPS_Q2_K_AMPERE;
-    } else if (compute_capability >= VER_4VEC) {
-        mmq_x  =  MMQ_X_Q2_K_PASCAL;
-        mmq_y  =  MMQ_Y_Q2_K_PASCAL;
-        nwarps = NWARPS_Q2_K_PASCAL;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
-    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
-    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
-    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
-
-    if (nrows_x % mmq_y == 0) {
-        const bool need_check = false;
-        /*
-        DPCT1049:30: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q2_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q2_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI2_K) + mmq_y / QI2_K),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_x_sc_q2_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q2_K<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q2_K_acc_ct1.get_pointer(),
-                            tile_x_dm_q2_K_acc_ct1.get_pointer(),
-                            tile_x_sc_q2_K_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    } else {
-        const bool need_check = true;
-        /*
-        DPCT1049:31: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q2_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q2_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI2_K) + mmq_y / QI2_K),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_x_sc_q2_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q2_K<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q2_K_acc_ct1.get_pointer(),
-                            tile_x_dm_q2_K_acc_ct1.get_pointer(),
-                            tile_x_sc_q2_K_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_mul_mat_q3_K_q8_1_sycl(const void *vx, const void *vy,
-                                        float *dst, const int ncols_x,
-                                        const int nrows_x, const int ncols_y,
-                                        const int nrows_y, const int nrows_dst,
-                                        queue_ptr stream) try {
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-    const int compute_capability = ggml_sycl_info().devices[id].cc;
-
-    int mmq_x, mmq_y, nwarps;
-    if (compute_capability >= VER_GEN13) {
-        mmq_x  =  MMQ_X_Q3_K_RDNA2;
-        mmq_y  =  MMQ_Y_Q3_K_RDNA2;
-        nwarps = NWARPS_Q3_K_RDNA2;
-    } else if (compute_capability >= VER_GEN12) {
-        mmq_x  =  MMQ_X_Q3_K_RDNA1;
-        mmq_y  =  MMQ_Y_Q3_K_RDNA1;
-        nwarps = NWARPS_Q3_K_RDNA1;
-    } else if (compute_capability >= VER_GEN9) {
-        mmq_x  =  MMQ_X_Q3_K_AMPERE;
-        mmq_y  =  MMQ_Y_Q3_K_AMPERE;
-        nwarps = NWARPS_Q3_K_AMPERE;
-    } else if (compute_capability >= VER_4VEC) {
-        mmq_x  =  MMQ_X_Q3_K_PASCAL;
-        mmq_y  =  MMQ_Y_Q3_K_PASCAL;
-        nwarps = NWARPS_Q3_K_PASCAL;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
-    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
-    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
-    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
-
-    if (nrows_x % mmq_y == 0) {
-        const bool need_check = false;
-        /*
-        DPCT1049:32: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q3_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q3_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI3_K) + mmq_y / QI3_K),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_x_qh_q3_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 2) + mmq_y / 2), cgh);
-                sycl::local_accessor<int, 1> tile_x_sc_q3_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q3_K<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q3_K_acc_ct1.get_pointer(),
-                            tile_x_dm_q3_K_acc_ct1.get_pointer(),
-                            tile_x_qh_q3_K_acc_ct1.get_pointer(),
-                            tile_x_sc_q3_K_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    } else {
-        const bool need_check = true;
-        /*
-        DPCT1049:33: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q3_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q3_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI3_K) + mmq_y / QI3_K),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_x_qh_q3_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 2) + mmq_y / 2), cgh);
-                sycl::local_accessor<int, 1> tile_x_sc_q3_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q3_K<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q3_K_acc_ct1.get_pointer(),
-                            tile_x_dm_q3_K_acc_ct1.get_pointer(),
-                            tile_x_qh_q3_K_acc_ct1.get_pointer(),
-                            tile_x_sc_q3_K_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_mul_mat_q4_K_q8_1_sycl(const void *vx, const void *vy,
-                                        float *dst, const int ncols_x,
-                                        const int nrows_x, const int ncols_y,
-                                        const int nrows_y, const int nrows_dst,
-                                        queue_ptr stream) try {
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-    const int compute_capability = ggml_sycl_info().devices[id].cc;
-
-    int mmq_x, mmq_y, nwarps;
-    if (compute_capability >= VER_GEN13) {
-        mmq_x  =  MMQ_X_Q4_K_RDNA2;
-        mmq_y  =  MMQ_Y_Q4_K_RDNA2;
-        nwarps = NWARPS_Q4_K_RDNA2;
-    } else if (compute_capability >= VER_GEN12) {
-        mmq_x  =  MMQ_X_Q4_K_RDNA1;
-        mmq_y  =  MMQ_Y_Q4_K_RDNA1;
-        nwarps = NWARPS_Q4_K_RDNA1;
-    } else if (compute_capability >= VER_GEN9) {
-        mmq_x  =  MMQ_X_Q4_K_AMPERE;
-        mmq_y  =  MMQ_Y_Q4_K_AMPERE;
-        nwarps = NWARPS_Q4_K_AMPERE;
-    } else if (compute_capability >= VER_4VEC) {
-        mmq_x  =  MMQ_X_Q4_K_PASCAL;
-        mmq_y  =  MMQ_Y_Q4_K_PASCAL;
-        nwarps = NWARPS_Q4_K_PASCAL;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
-    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
-    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
-    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
-
-    if (nrows_x % mmq_y == 0) {
-        const bool need_check = false;
-        /*
-        DPCT1049:34: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q4_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q4_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_K) + mmq_y / QI4_K),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_x_sc_q4_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q4_K<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q4_K_acc_ct1.get_pointer(),
-                            tile_x_dm_q4_K_acc_ct1.get_pointer(),
-                            tile_x_sc_q4_K_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    } else {
-        const bool need_check = true;
-        /*
-        DPCT1049:35: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q4_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q4_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_K) + mmq_y / QI4_K),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_x_sc_q4_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q4_K<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q4_K_acc_ct1.get_pointer(),
-                            tile_x_dm_q4_K_acc_ct1.get_pointer(),
-                            tile_x_sc_q4_K_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_mul_mat_q5_K_q8_1_sycl(const void *vx, const void *vy,
-                                        float *dst, const int ncols_x,
-                                        const int nrows_x, const int ncols_y,
-                                        const int nrows_y, const int nrows_dst,
-                                        queue_ptr stream) try {
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-    const int compute_capability = ggml_sycl_info().devices[id].cc;
-
-    int mmq_x, mmq_y, nwarps;
-    if (compute_capability >= VER_GEN13) {
-        mmq_x  =  MMQ_X_Q5_K_RDNA2;
-        mmq_y  =  MMQ_Y_Q5_K_RDNA2;
-        nwarps = NWARPS_Q5_K_RDNA2;
-    } else if (compute_capability >= VER_GEN12) {
-        mmq_x  =  MMQ_X_Q5_K_RDNA1;
-        mmq_y  =  MMQ_Y_Q5_K_RDNA1;
-        nwarps = NWARPS_Q5_K_RDNA1;
-    } else if (compute_capability >= VER_GEN9) {
-        mmq_x  =  MMQ_X_Q5_K_AMPERE;
-        mmq_y  =  MMQ_Y_Q5_K_AMPERE;
-        nwarps = NWARPS_Q5_K_AMPERE;
-    } else if (compute_capability >= VER_4VEC) {
-        mmq_x  =  MMQ_X_Q5_K_PASCAL;
-        mmq_y  =  MMQ_Y_Q5_K_PASCAL;
-        nwarps = NWARPS_Q5_K_PASCAL;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
-    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
-    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
-    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
-
-    if (nrows_x % mmq_y == 0) {
-        const bool need_check = false;
-        /*
-        DPCT1049:36: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q5_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q5_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_K) + mmq_y / QI5_K),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_x_sc_q5_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q5_K<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q5_K_acc_ct1.get_pointer(),
-                            tile_x_dm_q5_K_acc_ct1.get_pointer(),
-                            tile_x_sc_q5_K_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    } else {
-        const bool need_check = true;
-        /*
-        DPCT1049:37: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_q5_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q5_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_K) + mmq_y / QI5_K),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_x_sc_q5_K_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q5_K<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_q5_K_acc_ct1.get_pointer(),
-                            tile_x_dm_q5_K_acc_ct1.get_pointer(),
-                            tile_x_sc_q5_K_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_mul_mat_q6_K_q8_1_sycl(const void *vx, const void *vy,
-                                        float *dst, const int ncols_x,
-                                        const int nrows_x, const int ncols_y,
-                                        const int nrows_y, const int nrows_dst,
-                                        queue_ptr stream) try {
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-    const int compute_capability = ggml_sycl_info().devices[id].cc;
-
-    int mmq_x, mmq_y, nwarps;
-    if (compute_capability >= VER_GEN13) {
-        mmq_x  =  MMQ_X_Q6_K_RDNA2;
-        mmq_y  =  MMQ_Y_Q6_K_RDNA2;
-        nwarps = NWARPS_Q6_K_RDNA2;
-    } else if (compute_capability >= VER_GEN12) {
-        mmq_x  =  MMQ_X_Q6_K_RDNA1;
-        mmq_y  =  MMQ_Y_Q6_K_RDNA1;
-        nwarps = NWARPS_Q6_K_RDNA1;
-    } else if (compute_capability >= VER_GEN9) {
-        mmq_x  =  MMQ_X_Q6_K_AMPERE;
-        mmq_y  =  MMQ_Y_Q6_K_AMPERE;
-        nwarps = NWARPS_Q6_K_AMPERE;
-    } else if (compute_capability >= VER_4VEC) {
-        mmq_x  =  MMQ_X_Q6_K_PASCAL;
-        mmq_y  =  MMQ_Y_Q6_K_PASCAL;
-        nwarps = NWARPS_Q6_K_PASCAL;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
-    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
-    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
-    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
-
-    if (nrows_x % mmq_y == 0) {
-        const bool need_check = false;
-        /*
-        DPCT1049:38: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_acc_ct1(
-                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI6_K) + mmq_y / QI6_K),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_x_sc_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q6_K<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_acc_ct1.get_pointer(),
-                            tile_x_dm_acc_ct1.get_pointer(),
-                            tile_x_sc_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    } else {
-        const bool need_check = true;
-        /*
-        DPCT1049:39: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            stream->submit([&](sycl::handler &cgh) {
-                sycl::local_accessor<int, 1> tile_x_ql_acc_ct1(
-                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_x_dm_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / QI6_K) + mmq_y / QI6_K),
-                    cgh);
-                sycl::local_accessor<int, 1> tile_x_sc_acc_ct1(
-                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
-                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
-                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
-                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
-
-                cgh.parallel_for(
-                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                    [=](sycl::nd_item<3> item_ct1) {
-                        mul_mat_q6_K<need_check>(
-                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
-                            nrows_dst, item_ct1,
-                            tile_x_ql_acc_ct1.get_pointer(),
-                            tile_x_dm_acc_ct1.get_pointer(),
-                            tile_x_sc_acc_ct1.get_pointer(),
-                            tile_y_qs_acc_ct1.get_pointer(),
-                            tile_y_ds_acc_ct1.get_pointer());
-                    });
-            });
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_mul_mat_p021_f16_f32_sycl(const void *vx, const float *y,
-                                           float *dst, const int ncols_x,
-                                           const int nrows_x,
-                                           const int nchannels_x,
-                                           const int nchannels_y,
-                                           queue_ptr stream) {
-
-    const sycl::range<3> block_nums(nchannels_y, nrows_x, 1);
-    const sycl::range<3> block_dims(1, 1, WARP_SIZE);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-                mul_mat_p021_f16_f32(vx, y, dst, ncols_x, nrows_x, nchannels_x,
-                                     nchannels_y, item_ct1);
-            });
-    }
-}
-
-static void ggml_mul_mat_vec_nc_f16_f32_sycl(
-    const void *vx, const float *y, float *dst, const int ncols_x,
-    const int nrows_x, const int row_stride_x, const int nchannels_x,
-    const int nchannels_y, const int channel_stride_x, queue_ptr stream) {
-
-    const sycl::range<3> block_nums(nchannels_y, nrows_x, 1);
-    const sycl::range<3> block_dims(1, 1, WARP_SIZE);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-                mul_mat_vec_nc_f16_f32(vx, y, dst, ncols_x, nrows_x,
-                                       row_stride_x, channel_stride_x,
-                                       nchannels_y / nchannels_x, item_ct1);
-            });
-    }
-}
-
-static void
-ggml_cpy_f16_f32_sycl(const char *cx, char *cdst, const int ne, const int ne00,
-                      const int ne01, const int ne02, const int nb00,
-                      const int nb01, const int nb02, const int nb03,
-                      const int ne10, const int ne11, const int ne12,
-                      const int nb10, const int nb11, const int nb12,
-                      const int nb13, queue_ptr stream) {
-
-    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
-                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
-            [=](sycl::nd_item<3> item_ct1) {
-                cpy_f32_f16<cpy_1_f16_f32>(cx, cdst, ne, ne00, ne01, ne02, nb00,
-                                           nb01, nb02, nb03, ne10, ne11, ne12,
-                                           nb10, nb11, nb12, nb13, item_ct1);
-            });
-    }
-}
-
-static void ggml_cpy_f32_f32_sycl(const char *cx, char *cdst, const int ne,
-                                  const int ne00, const int ne01,
-                                  const int ne02, const int nb00,
-                                  const int nb01, const int nb02,
-                                  const int nb03, const int ne10,
-                                  const int ne11, const int ne12,
-                                  const int nb10, const int nb11,
-                                  const int nb12, const int nb13,
-                                  queue_ptr stream) {
-
-    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
-                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
-            [=](sycl::nd_item<3> item_ct1) {
-                cpy_f32_f16<cpy_1_f32_f32>(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
-                                           nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
-                                           item_ct1);
-            });
-    }
-}
-
-static void ggml_cpy_f32_f16_sycl(const char *cx, char *cdst, const int ne,
-                                  const int ne00, const int ne01,
-                                  const int ne02, const int nb00,
-                                  const int nb01, const int nb02,
-                                  const int nb03, const int ne10,
-                                  const int ne11, const int ne12,
-                                  const int nb10, const int nb11,
-                                  const int nb12, const int nb13,
-                                  queue_ptr stream) {
-
-    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
-                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
-            [=](sycl::nd_item<3> item_ct1) {
-                cpy_f32_f16<cpy_1_f32_f16>(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
-                                           nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
-                                           item_ct1);
-            });
-    }
-}
-
-static void ggml_cpy_f32_q8_0_sycl(const char *cx, char *cdst, const int ne,
-                                   const int ne00, const int ne01,
-                                   const int ne02, const int nb00,
-                                   const int nb01, const int nb02,
-                                   const int nb03, const int ne10,
-                                   const int ne11, const int ne12,
-                                   const int nb10, const int nb11,
-                                   const int nb12, const int nb13,
-                                   queue_ptr stream) {
-
-    GGML_ASSERT(ne % QK8_0 == 0);
-    const int num_blocks = ne / QK8_0;
-    stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks),
-                                           sycl::range<3>(1, 1, 1)),
-                         [=](sycl::nd_item<3> item_ct1) {
-                             cpy_f32_q<cpy_blck_f32_q8_0, QK8_0>(
-                                 cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
-                                 nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
-                                 item_ct1);
-                         });
-}
-
-static void ggml_cpy_f32_q4_0_sycl(const char *cx, char *cdst, const int ne,
-                                   const int ne00, const int ne01,
-                                   const int ne02, const int nb00,
-                                   const int nb01, const int nb02,
-                                   const int nb03, const int ne10,
-                                   const int ne11, const int ne12,
-                                   const int nb10, const int nb11,
-                                   const int nb12, const int nb13,
-                                   queue_ptr stream) {
-
-    GGML_ASSERT(ne % QK4_0 == 0);
-    const int num_blocks = ne / QK4_0;
-    stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks),
-                                           sycl::range<3>(1, 1, 1)),
-                         [=](sycl::nd_item<3> item_ct1) {
-                             cpy_f32_q<cpy_blck_f32_q4_0, QK4_0>(
-                                 cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
-                                 nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
-                                 item_ct1);
-                         });
-}
-
-static void ggml_cpy_f32_q4_1_sycl(const char *cx, char *cdst, const int ne,
-                                   const int ne00, const int ne01,
-                                   const int ne02, const int nb00,
-                                   const int nb01, const int nb02,
-                                   const int nb03, const int ne10,
-                                   const int ne11, const int ne12,
-                                   const int nb10, const int nb11,
-                                   const int nb12, const int nb13,
-                                   queue_ptr stream) {
-
-    GGML_ASSERT(ne % QK4_1 == 0);
-    const int num_blocks = ne / QK4_1;
-    stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks),
-                                           sycl::range<3>(1, 1, 1)),
-                         [=](sycl::nd_item<3> item_ct1) {
-                             cpy_f32_q<cpy_blck_f32_q4_1, QK4_1>(
-                                 cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
-                                 nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
-                                 item_ct1);
-                         });
-}
-
-static void ggml_cpy_f16_f16_sycl(const char *cx, char *cdst, const int ne,
-                                  const int ne00, const int ne01,
-                                  const int ne02, const int nb00,
-                                  const int nb01, const int nb02,
-                                  const int nb03, const int ne10,
-                                  const int ne11, const int ne12,
-                                  const int nb10, const int nb11,
-                                  const int nb12, const int nb13,
-                                  queue_ptr stream) {
-
-    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
-                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
-            [=](sycl::nd_item<3> item_ct1) {
-                cpy_f32_f16<cpy_1_f16_f16>(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
-                                           nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
-                                           item_ct1);
-            });
-    }
-}
-
-static void ggml_cpy_i16_i16_sycl(const char *cx, char *cdst, const int ne,
-                                  const int ne00, const int ne01,
-                                  const int ne02, const int nb00,
-                                  const int nb01, const int nb02,
-                                  const int nb03, const int ne10,
-                                  const int ne11, const int ne12,
-                                  const int nb10, const int nb11,
-                                  const int nb12, const int nb13,
-                                  queue_ptr stream) {
-
-    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
-    {
-        // dpct::has_capability_or_fail(stream->get_device(),
-        //                              {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
-                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
-            [=](sycl::nd_item<3> item_ct1) {
-                cpy_f32_f16<cpy_1_i16_i16>(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
-                                           nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
-                                           item_ct1);
-            });
-    }
-}
-
-static void ggml_cpy_i32_i32_sycl(const char *cx, char *cdst, const int ne,
-                                  const int ne00, const int ne01,
-                                  const int ne02, const int nb00,
-                                  const int nb01, const int nb02,
-                                  const int nb03, const int ne10,
-                                  const int ne11, const int ne12,
-                                  const int nb10, const int nb11,
-                                  const int nb12, const int nb13,
-                                  queue_ptr stream) {
-
-    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
-    {
-        // dpct::has_capability_or_fail(stream->get_device(),
-        //                              {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
-                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
-            [=](sycl::nd_item<3> item_ct1) {
-                cpy_f32_f16<cpy_1_i32_i32>(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
-                                           nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
-                                           item_ct1);
-            });
-    }
-}
-
-static void scale_f32_sycl(const float *x, float *dst, const float scale,
-                           const int k, queue_ptr stream) {
-    const int num_blocks = (k + SYCL_SCALE_BLOCK_SIZE - 1) / SYCL_SCALE_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_SCALE_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_SCALE_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            scale_f32(x, dst, scale, k, item_ct1);
-        });
-}
-
-static void clamp_f32_sycl(const float *x, float *dst, const float min,
-                           const float max, const int k,
-                           queue_ptr stream) {
-    const int num_blocks = (k + SYCL_CLAMP_BLOCK_SIZE - 1) / SYCL_CLAMP_BLOCK_SIZE;
-    stream->parallel_for(
-        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
-                              sycl::range<3>(1, 1, SYCL_CLAMP_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_CLAMP_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            clamp_f32(x, dst, min, max, k, item_ct1);
-        });
-}
-
-template <typename T>
-static void rope_sycl(const T *x, T *dst, int ncols, int nrows,
-                      const int32_t *pos, float freq_scale, int p_delta_rows,
-                      float freq_base, float ext_factor, float attn_factor,
-                      rope_corr_dims corr_dims, queue_ptr stream) {
-    GGML_ASSERT(ncols % 2 == 0);
-    const sycl::range<3> block_dims(1, SYCL_ROPE_BLOCK_SIZE, 1);
-    const int num_blocks_x = (ncols + 2*SYCL_ROPE_BLOCK_SIZE - 1) / (2*SYCL_ROPE_BLOCK_SIZE);
-    const sycl::range<3> block_nums(1, num_blocks_x, nrows);
-    if (pos == nullptr) {
-        /*
-        DPCT1049:40: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) {
-                rope<T, false>(x, dst, ncols, pos, freq_scale, p_delta_rows,
-                               freq_base, ext_factor, attn_factor, corr_dims,
-                               item_ct1);
-            });
-    } else {
-        /*
-        DPCT1049:41: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) {
-                rope<T, true>(x, dst, ncols, pos, freq_scale, p_delta_rows,
-                              freq_base, ext_factor, attn_factor, corr_dims,
-                              item_ct1);
-            });
-    }
-}
-
-template <typename T>
-static void rope_neox_sycl(const T *x, T *dst, int ncols, int n_dims, int nrows,
-                           const int32_t *pos, float freq_scale,
-                           int p_delta_rows, float freq_base, float ext_factor,
-                           float attn_factor, rope_corr_dims corr_dims,
-                           const float * freq_factors, queue_ptr stream) {
-    GGML_ASSERT(ncols % 2 == 0);
-    const sycl::range<3> block_dims(1, SYCL_ROPE_BLOCK_SIZE, 1);
-    const int num_blocks_x = (ncols + 2*SYCL_ROPE_BLOCK_SIZE - 1) / (2*SYCL_ROPE_BLOCK_SIZE);
-    const sycl::range<3> block_nums(1, num_blocks_x, nrows);
-
-    const float theta_scale = powf(freq_base, -2.0f/n_dims);
-    const float inv_ndims = -1.0f / n_dims;
-
-    if (pos == nullptr) {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-        if (freq_factors == nullptr) {
-            stream->parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1) {
-                    rope_neox<T, false, false>(x, dst, ncols, n_dims, pos, freq_scale,
-                                        p_delta_rows, ext_factor, attn_factor,
-                                        corr_dims, theta_scale, inv_ndims, freq_factors,
-                                        item_ct1);
-                });
-        } else {
-            stream->parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1) {
-                    rope_neox<T, false, true>(x, dst, ncols, n_dims, pos, freq_scale,
-                                        p_delta_rows, ext_factor, attn_factor,
-                                        corr_dims, theta_scale, inv_ndims, freq_factors,
-                                        item_ct1);
-                });
-        }
-    } else {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        if (freq_factors == nullptr) {
-            stream->parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1) {
-                    rope_neox<T, true, false>(x, dst, ncols, n_dims, pos, freq_scale,
-                                       p_delta_rows, ext_factor, attn_factor,
-                                       corr_dims, theta_scale, inv_ndims, freq_factors, item_ct1);
-                });
-        } else {
-            stream->parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1) {
-                    rope_neox<T, true, true>(x, dst, ncols, n_dims, pos, freq_scale,
-                                       p_delta_rows, ext_factor, attn_factor,
-                                       corr_dims, theta_scale, inv_ndims, freq_factors, item_ct1);
-                });
-        }
-    }
-}
-
-static void sum_rows_f32_sycl(const float *x, float *dst, const int ncols,
-                              const int nrows, queue_ptr stream) {
-    const sycl::range<3> block_dims(1, 1, WARP_SIZE);
-    const sycl::range<3> block_nums(1, nrows, 1);
-    stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                         [=](sycl::nd_item<3> item_ct1)
-                             [[intel::reqd_sub_group_size(32)]] {
-                                 k_sum_rows_f32(x, dst, ncols, item_ct1);
-                             });
-}
-
-static int next_power_of_2(int x) {
-    int n = 1;
-    while (n < x) {
-        n *= 2;
-    }
-    return n;
-}
-
-static void argsort_f32_i32_sycl(const float *x, int *dst, const int ncols,
-                                 const int nrows, ggml_sort_order order,
-                                 queue_ptr stream) {
-    // bitonic sort requires ncols to be power of 2
-    const int ncols_pad = next_power_of_2(ncols);
-
-    const sycl::range<3> block_dims(1, 1, ncols_pad);
-    const sycl::range<3> block_nums(1, nrows, 1);
-    const size_t shared_mem = ncols_pad * sizeof(int);
-
-    if (order == GGML_SORT_ORDER_ASC) {
-        stream->submit([&](sycl::handler &cgh) {
-            sycl::local_accessor<uint8_t, 1> dpct_local_acc_ct1(
-                sycl::range<1>(shared_mem), cgh);
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1) {
-                    k_argsort_f32_i32<GGML_SORT_ORDER_ASC>(
-                        x, dst, ncols, ncols_pad, item_ct1,
-                        dpct_local_acc_ct1.get_multi_ptr<sycl::access::decorated::no>()
-                            .get());
-                });
-        });
-    } else if (order == GGML_SORT_ORDER_DESC) {
-        stream->submit([&](sycl::handler &cgh) {
-            sycl::local_accessor<uint8_t, 1> dpct_local_acc_ct1(
-                sycl::range<1>(shared_mem), cgh);
-
-            cgh.parallel_for(
-                sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                [=](sycl::nd_item<3> item_ct1) {
-                    k_argsort_f32_i32<GGML_SORT_ORDER_DESC>(
-                        x, dst, ncols, ncols_pad, item_ct1,
-                        dpct_local_acc_ct1.get_multi_ptr<sycl::access::decorated::no>()
-                            .get());
-                });
-        });
-    } else {
-        GGML_ASSERT(false);
-    }
-}
-
-static void diag_mask_inf_f32_sycl(const float *x, float *dst,
-                                   const int ncols_x, const int nrows_x,
-                                   const int rows_per_channel, const int n_past,
-                                   queue_ptr stream) {
-    const sycl::range<3> block_dims(1, SYCL_DIAG_MASK_INF_BLOCK_SIZE, 1);
-    const int block_num_x = (ncols_x + SYCL_DIAG_MASK_INF_BLOCK_SIZE - 1) / SYCL_DIAG_MASK_INF_BLOCK_SIZE;
-    const sycl::range<3> block_nums(1, block_num_x, nrows_x);
-    stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims),
-                         [=](sycl::nd_item<3> item_ct1) {
-                             diag_mask_inf_f32(x, dst, ncols_x,
-                                               rows_per_channel, n_past,
-                                               item_ct1);
-                         });
-}
-
-template <bool vals_smem, int ncols_template, int block_size_template>
-static void soft_max_f32_submitter(const float * x, const float * mask, float * dst, const int ncols_par,
-                                   const int nrows_y, const float scale, const float max_bias, const float m0,
-                                   const float m1, uint32_t n_head_log2, sycl::range<3> block_nums, sycl::range<3> block_dims,
-                                   const size_t n_local_scratch, queue_ptr stream) {
-    stream->submit([&](sycl::handler &cgh) {
-        sycl::local_accessor<float, 1> local_buf_acc(n_local_scratch, cgh);
-
-        cgh.parallel_for(
-            sycl::nd_range<3>(block_nums * block_dims, block_dims),
-            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
-                soft_max_f32<vals_smem, ncols_template, block_size_template>(x, mask, dst, ncols_par,
-                                                                             nrows_y, scale, max_bias, m0,
-                                                                             m1, n_head_log2, item_ct1,
-                                                                             local_buf_acc.get_pointer());
-            });
-    });
-}
-
-static void soft_max_f32_sycl(const float * x, const float * mask,
-                              float * dst, const int ncols_x, const int nrows_x,
-                              const int nrows_y, const float scale, const float max_bias,
-                              queue_ptr stream) {
-    int nth = WARP_SIZE;
-    int max_block_size = GROUP_SIZE;
-    while (nth < ncols_x && nth < max_block_size) nth *= 2;
-    if (nth>max_block_size) nth = max_block_size;
-
-    const sycl::range<3> block_dims(1, 1, nth);
-    const sycl::range<3> block_nums(1, 1, nrows_x);
-    const size_t n_local_scratch = (GGML_PAD(ncols_x, WARP_SIZE) + WARP_SIZE);
-
-    const uint32_t n_head_kv   = nrows_x/nrows_y;
-    const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head_kv));
-
-    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
-    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
-
-    const size_t local_mem_size = stream->get_device().get_info<sycl::info::device::local_mem_size>();
-    if (n_local_scratch*sizeof(float) < local_mem_size) {
-        if (ncols_x > max_block_size) {
-            soft_max_f32_submitter<true, 0, 0>(x, mask, dst, ncols_x, nrows_y, scale,
-                                               max_bias, m0, m1, n_head_log2, block_nums,
-                                               block_dims, n_local_scratch, stream);
-            return;
-        }
-        switch (ncols_x) {
-            case 32:
-                soft_max_f32_submitter<true, 32, 32>(x, mask, dst, ncols_x, nrows_y, scale,
-                                                     max_bias, m0, m1, n_head_log2, block_nums,
-                                                     block_dims, n_local_scratch, stream);
-                break;
-            case 64:
-                soft_max_f32_submitter<true, 64, 64>(x, mask, dst, ncols_x, nrows_y, scale,
-                                                     max_bias, m0, m1, n_head_log2, block_nums,
-                                                     block_dims, n_local_scratch, stream);
-                break;
-            case 128:
-                soft_max_f32_submitter<true, 128, 128>(x, mask, dst, ncols_x, nrows_y, scale,
-                                                       max_bias, m0, m1, n_head_log2, block_nums,
-                                                       block_dims, n_local_scratch, stream);
-                break;
-            case 256:
-                soft_max_f32_submitter<true, 256, 256>(x, mask, dst, ncols_x, nrows_y, scale,
-                                                       max_bias, m0, m1, n_head_log2, block_nums,
-                                                       block_dims, n_local_scratch, stream);
-                break;
-            case 512:
-                soft_max_f32_submitter<true, 512, 512>(x, mask, dst, ncols_x, nrows_y, scale,
-                                                       max_bias, m0, m1, n_head_log2, block_nums,
-                                                       block_dims, n_local_scratch, stream);
-                break;
-            case 1024:
-                soft_max_f32_submitter<true, 1024, 1024>(x, mask, dst, ncols_x, nrows_y, scale,
-                                                         max_bias, m0, m1, n_head_log2, block_nums,
-                                                         block_dims, n_local_scratch, stream);
-                break;
-            case 2048:
-                soft_max_f32_submitter<true, 2048, 1024>(x, mask, dst, ncols_x, nrows_y, scale,
-                                                         max_bias, m0, m1, n_head_log2, block_nums,
-                                                         block_dims, n_local_scratch, stream);
-                break;
-            case 4096:
-                soft_max_f32_submitter<true, 4096, 1024>(x, mask, dst, ncols_x, nrows_y, scale,
-                                                         max_bias, m0, m1, n_head_log2, block_nums,
-                                                         block_dims, n_local_scratch, stream);
-                break;
-            default:
-                soft_max_f32_submitter<true, 0, 0>(x, mask, dst, ncols_x, nrows_y, scale,
-                                                   max_bias, m0, m1, n_head_log2, block_nums,
-                                                   block_dims, n_local_scratch, stream);
-                break;
-        }
-    } else {
-        soft_max_f32_submitter<false, 0, 0>(x, mask, dst, ncols_x, nrows_y, scale,
-                                            max_bias, m0, m1, n_head_log2, block_nums,
-                                            block_dims, WARP_SIZE, stream);
-    }
-}
-
-template <typename T>
-static void im2col_sycl(const float *x, T *dst, int IW, int IH,
-                                int OW, int OH, int KW, int KH, int IC,
-                                int offset_delta, int s0, int s1, int p0,
-                                int p1, int d0, int d1,
-                                queue_ptr stream) {
-    const int parallel_elements = OW * KW * KH;
-    const int num_blocks = (parallel_elements + SYCL_IM2COL_BLOCK_SIZE - 1) / SYCL_IM2COL_BLOCK_SIZE;
-    sycl::range<3> block_nums(IC, OH, num_blocks);
-    {
-        dpct::has_capability_or_fail(stream->get_device(),
-                                     {sycl::aspect::fp16});
-
-        stream->parallel_for(
-            sycl::nd_range<3>(block_nums *
-                                  sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE),
-                              sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE)),
-            [=](sycl::nd_item<3> item_ct1) {
-                im2col_kernel(x, dst, offset_delta, IW, IH, OW, KW, KH,
-                               parallel_elements, (IC * KH * KW), s0, s1, p0,
-                               p1, d0, d1, item_ct1);
-            });
-    }
-}
-
-
-static bool g_sycl_loaded = false;
-
-bool ggml_sycl_loaded(void) {
-    return g_sycl_loaded;
-}
-
-void print_device_detail(int id, sycl::device &device, std::string device_type) {
-
-    dpct::device_info prop;
-    SYCL_CHECK(CHECK_TRY_ERROR(
-        dpct::get_device_info(prop, device)));
-
-    std::string version;
-    version += std::to_string(prop.get_major_version());
-    version += ".";
-    version += std::to_string(prop.get_minor_version());
-
-    device_type = std::regex_replace(device_type, std::regex("ext_oneapi_"), "");
-    std::string name = std::string(prop.get_name());
-    name = std::regex_replace(name, std::regex("\\(R\\)"), "");
-    name = std::regex_replace(name, std::regex("\\(TM\\)"), "");
-
-    auto global_mem_size = prop.get_global_mem_size()/1000000;
-
-    fprintf(stderr, "|%2d|%19s|%39s|%7s|%7d|%8d|%5d|%6luM|%21s|\n", id, device_type.c_str(),
-            name.c_str(), version.c_str(), prop.get_max_compute_units(),
-            prop.get_max_work_group_size(), prop.get_max_sub_group_size(),
-            global_mem_size, device.get_info<sycl::info::device::driver_version>().c_str());
-}
-
-void ggml_backend_sycl_print_sycl_devices() {
-    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_print_sycl_devices\n");
-    int device_count = dpct::dev_mgr::instance().device_count();
-    std::map<std::string, size_t> DeviceNums;
-    fprintf(stderr, "found %d SYCL devices:\n", device_count);
-    fprintf(stderr, "|  |                   |                                       |       |Max    |        |Max  |Global |                     |\n");
-    fprintf(stderr, "|  |                   |                                       |       |compute|Max work|sub  |mem    |                     |\n");
-    fprintf(stderr, "|ID|        Device Type|                                   Name|Version|units  |group   |group|size   |       Driver version|\n");
-    fprintf(stderr, "|--|-------------------|---------------------------------------|-------|-------|--------|-----|-------|---------------------|\n");
-    for (int id = 0; id < device_count; ++id) {
-        sycl::device device = dpct::dev_mgr::instance().get_device(id);
-        sycl::backend backend = device.get_backend();
-        std::string backend_type = get_device_backend_and_type(device);
-        int type_id=DeviceNums[backend_type]++;
-        std::stringstream device_type;
-        device_type << "[" <<  backend_type << ":" << std::to_string(type_id) << "]";
-        print_device_detail(id, device, device_type.str());
-    }
-}
-
-int get_sycl_env(const char *env_name, int default_val) {
-    char *user_device_string = getenv(env_name);
-    int user_number = default_val;
-
-    unsigned n;
-    if (user_device_string != NULL &&
-        sscanf(user_device_string, " %u", &n) == 1) {
-        user_number = (int)n;
-    } else {
-        user_number = default_val;
-    }
-    return user_number;
-}
-
-int get_work_group_size(int user_device_id) {
-    dpct::device_info prop;
-    dpct::get_device_info(prop,
-                          dpct::dev_mgr::instance().get_device(user_device_id));
-    return prop.get_max_work_group_size();
-}
-
-static void ggml_check_sycl() try {
-    static bool initialized = false;
-
-    if (!initialized) {
-        fprintf(stderr, "[SYCL] call ggml_check_sycl\n");
-        g_ggml_sycl_debug = get_sycl_env("GGML_SYCL_DEBUG", 0);
-
-        fprintf(stderr, "%s: GGML_SYCL_DEBUG: %d\n", __func__, g_ggml_sycl_debug);
-
-#if defined(GGML_SYCL_F16)
-        fprintf(stderr, "%s: GGML_SYCL_F16: yes\n", __func__);
-#else
-        fprintf(stderr, "%s: GGML_SYCL_F16: no\n", __func__);
-#endif
-
-/* NOT REMOVE, keep it for next optimize for XMX.
-#if defined(SYCL_USE_XMX)
-        fprintf(stderr, "%s: SYCL_USE_XMX: yes\n", __func__);
-#else
-        fprintf(stderr, "%s: SYCL_USE_XMX: no\n", __func__);
-#endif
-*/
-
-        if (CHECK_TRY_ERROR(g_all_sycl_device_count =
-                            dpct::dev_mgr::instance().device_count()) != 0) {
-            initialized = true;
-            g_sycl_loaded = false;
-            return;
-        }
-        GGML_ASSERT(g_all_sycl_device_count <= GGML_SYCL_MAX_DEVICES);
-        ggml_backend_sycl_print_sycl_devices();
-        initialized = true;
-        g_sycl_loaded = true;
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static ggml_sycl_device_info ggml_sycl_init() {
-    ggml_sycl_device_info info = {};
-
-    info.device_count = dpct::dev_mgr::instance().device_count();
-    if (info.device_count == 0) {
-        fprintf(stderr, "%s: failed to initialize " GGML_SYCL_NAME ": %s\n", __func__);
-        return info;
-    }
-
-    GGML_ASSERT(info.device_count <= GGML_SYCL_MAX_DEVICES);
-
-    int64_t total_vram = 0;
-#if defined(GGML_SYCL_FORCE_MMQ)
-    fprintf(stderr, "%s: GGML_SYCL_FORCE_MMQ:   yes\n", __func__);
-#else
-    fprintf(stderr, "%s: GGML_SYCL_FORCE_MMQ:   no\n", __func__);
-#endif
-#if defined(SYCL_USE_XMX)
-    fprintf(stderr, "%s: SYCL_USE_XMX: yes\n", __func__);
-#else
-    fprintf(stderr, "%s: SYCL_USE_XMX: no\n", __func__);
-#endif
-    fprintf(stderr, "%s: found %d " GGML_SYCL_NAME " devices:\n", __func__, info.device_count);
-
-    for (int i = 0; i < info.device_count; ++i) {
-        info.devices[i].vmm = 0;
-        dpct::device_info prop;
-        SYCL_CHECK(CHECK_TRY_ERROR(dpct::get_device_info(
-            prop, dpct::dev_mgr::instance().get_device(i))));
-
-        info.default_tensor_split[i] = total_vram;
-        total_vram += prop.get_global_mem_size();
-
-        info.devices[i].cc =
-            100 * prop.get_major_version() + 10 * prop.get_minor_version();
-    }
-
-    for (int id = 0; id < info.device_count; ++id) {
-        info.default_tensor_split[id] /= total_vram;
-    }
-    return info;
-}
-
-const ggml_sycl_device_info & ggml_sycl_info() {
-    static ggml_sycl_device_info info = ggml_sycl_init();
-    return info;
-}
-
-/*
-device_index: device index from 0 to n (continue numbers).
-    It is used for device select/set in SYCL backend internal data structure.
-*/
-inline void check_allow_gpu_index(const int device_index) {
-  if (device_index >= ggml_sycl_info().device_count) {
-    char error_buf[256];
-    snprintf(
-        error_buf,
-        sizeof(error_buf),
-        "%s error: device_index:%d is out of range: [0-%d]",
-        __func__,
-        device_index,
-        ggml_sycl_info().device_count - 1);
-    fprintf(stderr, "%s\n", error_buf);
-    assert(false);
-  }
-}
-
-// buffer pool for sycl (legacy)
-struct ggml_sycl_pool_leg : public ggml_sycl_pool {
-    static const int MAX_SYCL_BUFFERS = 256;
-
-    int device;
-    queue_ptr qptr;
-    struct ggml_sycl_buffer {
-        void * ptr = nullptr;
-        size_t size = 0;
-    };
-
-    ggml_sycl_buffer buffer_pool[MAX_SYCL_BUFFERS] = {};
-    size_t pool_size = 0;
-
-    explicit ggml_sycl_pool_leg(queue_ptr qptr_, int device_) :
-        qptr(qptr_),
-        device(device_) {
-    }
-
-    ~ggml_sycl_pool_leg() {
-        for (int i = 0; i < MAX_SYCL_BUFFERS; ++i) {
-            ggml_sycl_buffer & b = buffer_pool[i];
-            if (b.ptr != nullptr) {
-                SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(b.ptr, *qptr)));
-                pool_size -= b.size;
-            }
-        }
-        GGML_ASSERT(pool_size == 0);
-    }
-
-    void * alloc(size_t size, size_t * actual_size) override {
-#ifdef DEBUG_sycl_MALLOC
-        int nnz = 0;
-        size_t max_size = 0;
-#endif
-        size_t best_diff = 1ull << 36;
-        int ibest = -1;
-        for (int i = 0; i < MAX_SYCL_BUFFERS; ++i) {
-            ggml_sycl_buffer& b = buffer_pool[i];
-            if (b.ptr != nullptr) {
-#ifdef DEBUG_sycl_MALLOC
-                ++nnz;
-                if (b.size > max_size) max_size = b.size;
-#endif
-                if (b.size >= size) {
-                    size_t diff = b.size - size;
-                    if (diff < best_diff) {
-                        best_diff = diff;
-                        ibest = i;
-                        if (!best_diff) {
-                            void * ptr = b.ptr;
-                            *actual_size = b.size;
-                            b.ptr = nullptr;
-                            b.size = 0;
-                            return ptr;
-                        }
-                    }
-                }
-            }
-        }
-        if (ibest >= 0) {
-            ggml_sycl_buffer& b = buffer_pool[ibest];
-            void * ptr = b.ptr;
-            *actual_size = b.size;
-            b.ptr = nullptr;
-            b.size = 0;
-            return ptr;
-        }
-        void * ptr;
-        size_t look_ahead_size = (size_t) (1.05 * size);
-
-        SYCL_CHECK(
-            CHECK_TRY_ERROR(ptr = (void *)sycl::malloc_device(
-                                look_ahead_size, *qptr)));
-        *actual_size = look_ahead_size;
-        pool_size += look_ahead_size;
-
-    #ifdef DEBUG_SYCL_MALLOC
-        fprintf(stderr, "%s[%d]: %d buffers, max_size = %u MB, pool_size = %u MB, requested %u MB\n", __func__, id, nnz,
-                (uint32_t)(max_size/1024/1024), (uint32_t)(g_sycl_pool_size[id]/1024/1024), (uint32_t)(size/1024/1024));
-    #endif
-        // GGML_SYCL_DEBUG("ggml_sycl_pool_malloc_leg look_ahead_size=%lu, return %p\n", look_ahead_size, ptr);
-        return ptr;
-    }
-
-    void free(void * ptr, size_t size) override {
-        for (int i = 0; i < MAX_SYCL_BUFFERS; ++i) {
-            ggml_sycl_buffer& b = buffer_pool[i];
-            if (b.ptr == nullptr) {
-                b.ptr = ptr;
-                b.size = size;
-                return;
-            }
-        }
-        fprintf(stderr, "WARNING: sycl buffer pool full, increase MAX_sycl_BUFFERS\n");
-        SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(ptr, *qptr)));
-        pool_size -= size;
-    }
-};
-
-std::unique_ptr<ggml_sycl_pool> ggml_backend_sycl_context::new_pool_for_device(queue_ptr qptr, int device) {
-    // TBD: NO VMM support
-    // if (ggml_sycl_info().devices[device].vmm) {
-    //     return std::unique_ptr<ggml_sycl_pool>(new ggml_sycl_pool_vmm(device));
-    // }
-   return std::unique_ptr<ggml_sycl_pool>(new ggml_sycl_pool_leg(qptr, device));
-}
-
-// TBD pool with virtual memory management
-// struct ggml_sycl_pool_vmm : public ggml_sycl_pool
-
-static dpct::err0 ggml_sycl_cpy_tensor_2d(void *dst,
-                                          const struct ggml_tensor *src,
-                                          int64_t i3, int64_t i2,
-                                          int64_t i1_low, int64_t i1_high,
-                                          queue_ptr stream) try {
-
-    dpct::memcpy_direction kind;
-    char * src_ptr;
-    if (src->backend == GGML_BACKEND_TYPE_CPU) {
-        kind = dpct::host_to_device;
-        src_ptr = (char *) src->data;
-        // GGML_SYCL_DEBUG("ggml_sycl_cpy_tensor_2d  GGML_BACKEND_TYPE_CPU src_ptr %p\n", src_ptr);
-    } else if (src->backend == GGML_BACKEND_TYPE_GPU || src->backend == GGML_BACKEND_TYPE_GPU_SPLIT) {
-        GGML_ASSERT(src->backend != GGML_BACKEND_TYPE_GPU_SPLIT || (i1_low == 0 && i1_high == src->ne[1]));
-        kind = dpct::device_to_device;
-        ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src->extra;
-        int id;
-        SYCL_CHECK(CHECK_TRY_ERROR(
-            id = get_current_device_id()));
-        // GGML_SYCL_DEBUG("current device index %d\n", id);
-        src_ptr = (char *) extra->data_device[id];
-    } else {
-        // GGML_SYCL_DEBUG("GGML_ASSERT(false)\n");
-        GGML_ASSERT(false);
-    }
-    char * dst_ptr = (char *) dst;
-
-    GGML_TENSOR_LOCALS_1(int64_t, ne, src, ne);
-    GGML_TENSOR_LOCALS(int64_t, nb, src, nb);
-    const enum ggml_type type = src->type;
-    const int64_t ts = ggml_type_size(type);
-    const int64_t bs = ggml_blck_size(type);
-    int64_t i1_diff = i1_high - i1_low;
-
-    const char * x = src_ptr + i1_low*nb1 + i2*nb2 + i3*nb3;
-    if (nb0 == ts && nb1 == ts*ne0/bs) {
-        // GGML_SYCL_DEBUG("stream->memcpy: dst_ptr=%p, x=%p, size=%lu\n", dst_ptr, x, i1_diff * nb1);
-        // return CHECK_TRY_ERROR(stream->memcpy(dst_ptr, x, i1_diff * nb1));
-        return CHECK_TRY_ERROR(dpct::async_dpct_memcpy(dst_ptr, x, i1_diff * nb1,
-                                    kind, *stream));
-
-    } else if (nb0 == ts) {
-        return CHECK_TRY_ERROR(
-            dpct::async_dpct_memcpy(dst_ptr, ts * ne0 / bs, x, nb1,
-                                    ts * ne0 / bs, i1_diff, kind, *stream));
-    } else {
-        for (int64_t i1 = 0; i1 < i1_diff; i1++) {
-            const void * rx = (const void *) ((const char *) x + i1*nb1);
-            void * rd = (void *) (dst_ptr + i1*ts*ne0/bs);
-            // pretend the row is a matrix with cols=1
-            dpct::err0 r = CHECK_TRY_ERROR(dpct::async_dpct_memcpy(
-                rd, ts / bs, rx, nb0, ts / bs, ne0, kind, *stream));
-            /*
-            DPCT1001:85: The statement could not be removed.
-            */
-            /*
-            DPCT1000:86: Error handling if-stmt was detected but could not be
-            rewritten.
-            */
-            if (r != 0) return r;
-        }
-        return 0;
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_sycl_op_get_rows(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                  const ggml_tensor *src1, ggml_tensor *dst,
-                                  const float *src0_d, const float *src1_d,
-                                  float *dst_d, const queue_ptr &stream) {
-
-    GGML_ASSERT(src1->type == GGML_TYPE_I32);
-    GGML_ASSERT(dst->type == GGML_TYPE_F32);
-
-    GGML_ASSERT(src0->nb[0] == ggml_type_size(src0->type));
-    GGML_ASSERT(src1->nb[0] == ggml_type_size(src1->type));
-    GGML_ASSERT(dst->nb[0] == ggml_type_size(dst->type));
-
-    const int32_t * src1_i32 = (const int32_t *) src1_d;
-
-    switch (src0->type) {
-        case GGML_TYPE_F16:
-            get_rows_sycl_float(ctx, src0, src1, dst, (const sycl::half *)src0_d,
-                                src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_F32:
-            get_rows_sycl_float(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_Q4_0:
-            get_rows_sycl<QK4_0, QR4_0, dequantize_q4_0>(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_Q4_1:
-            get_rows_sycl<QK4_1, QR4_1, dequantize_q4_1>(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_Q5_0:
-            get_rows_sycl<QK5_0, QR5_0, dequantize_q5_0>(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_Q5_1:
-            get_rows_sycl<QK5_1, QR5_1, dequantize_q5_1>(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        case GGML_TYPE_Q8_0:
-            get_rows_sycl<QK8_0, QR8_0, dequantize_q8_0>(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
-            break;
-        default:
-            // TODO: k-quants
-            fprintf(stderr, "%s: unsupported type: %s\n", __func__, ggml_type_name(src0->type));
-            GGML_ASSERT(false);
-            break;
-    }
-}
-
-template <class op>
-inline void ggml_sycl_op_bin_bcast(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                   const ggml_tensor *src1, ggml_tensor *dst,
-                                   const float *src0_dd, const float *src1_dd,
-                                   float *dst_dd,
-                                   const queue_ptr &main_stream) {
-
-    if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-        op()(ctx, src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream);
-    } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) {
-        op()(ctx, src0, src1, dst, (const sycl::half *)src0_dd, src1_dd,
-             (sycl::half *)dst_dd, main_stream);
-    } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) {
-        op()(ctx, src0, src1, dst, (const sycl::half *)src0_dd, src1_dd, dst_dd,
-             main_stream);
-    } else if (src0->type == GGML_TYPE_I32 && dst->type == GGML_TYPE_I32) {
-        op()(ctx, src0, src1, dst, (const int32_t *)src0_dd, (const int32_t *)src1_dd, (int32_t *)dst_dd,
-             main_stream);
-    } else if (src0->type == GGML_TYPE_I16 && dst->type == GGML_TYPE_I16) {
-        op()(ctx, src0, src1, dst, (const int16_t *)src0_dd, (const int16_t *)src1_dd, (int16_t *)dst_dd,
-             main_stream);
-    } else {
-        fprintf(stderr, "%s: unsupported types: dst: %s, src0: %s, src1: %s\n", __func__,
-            ggml_type_name(dst->type), ggml_type_name(src0->type), ggml_type_name(src1->type));
-        GGML_ASSERT(false);
-    }
-}
-
-static void ggml_sycl_op_repeat(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                const ggml_tensor *src1, ggml_tensor *dst,
-                                const float *src0_d, const float *src1_d,
-                                float *dst_d,
-                                const queue_ptr &main_stream) {
-
-    ggml_sycl_op_bin_bcast<bin_bcast_sycl<op_repeat>>(ctx, dst, src0, dst, nullptr, src0_d, dst_d, main_stream);
-
-    (void) src1;
-    (void) src1_d;
-}
-
-inline void ggml_sycl_op_add(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                             ggml_tensor *dst, const float *src0_dd,
-                             const float *src1_dd, float *dst_dd,
-                             const queue_ptr &main_stream) {
-
-    ggml_sycl_op_bin_bcast<bin_bcast_sycl<op_add>>(ctx, src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream);
-}
-
-inline void ggml_sycl_op_acc(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                             ggml_tensor *dst, const float *src0_dd,
-                             const float *src1_dd, float *dst_dd,
-                             const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-    GGML_ASSERT(dst->ne[3] == 1); // just 3D tensors supported
-
-    int nb1 = dst->op_params[0] / 4; // 4 bytes of float32
-    int nb2 = dst->op_params[1] / 4; // 4 bytes of float32
-    // int nb3 = dst->op_params[2] / 4; // 4 bytes of float32 - unused
-    int offset = dst->op_params[3] / 4; // offset in bytes
-
-    acc_f32_sycl(src0_dd, src1_dd, dst_dd, ggml_nelements(dst), src1->ne[0], src1->ne[1], src1->ne[2], nb1, nb2, offset, main_stream);
-
-    (void) dst;
-}
-
-inline void ggml_sycl_op_mul(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                             ggml_tensor *dst, const float *src0_dd,
-                             const float *src1_dd, float *dst_dd,
-                             const queue_ptr &main_stream) {
-
-    ggml_sycl_op_bin_bcast<bin_bcast_sycl<op_mul>>(ctx, src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream);
-}
-
-inline void ggml_sycl_op_div(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                             ggml_tensor *dst, const float *src0_dd,
-                             const float *src1_dd, float *dst_dd,
-                             const queue_ptr &main_stream) {
-
-    ggml_sycl_op_bin_bcast<bin_bcast_sycl<op_div>>(ctx, src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream);
-}
-
-inline void ggml_sycl_op_gelu(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                              ggml_tensor *dst, const float *src0_dd,
-                              const float *src1_dd, float *dst_dd,
-                              const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    gelu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_silu(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                              ggml_tensor *dst, const float *src0_dd,
-                              const float *src1_dd, float *dst_dd,
-                              const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    silu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_gelu_quick(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                    const ggml_tensor *src1, ggml_tensor *dst,
-                                    const float *src0_dd, const float *src1_dd,
-                                    float *dst_dd,
-                                    const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    gelu_quick_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_tanh(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                              ggml_tensor *dst, const float *src0_dd,
-                              const float *src1_dd, float *dst_dd,
-                              const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-    tanh_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_relu(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                              ggml_tensor *dst, const float *src0_dd,
-                              const float *src1_dd, float *dst_dd,
-                              const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    relu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-static void ggml_sycl_op_hardsigmoid(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                     const ggml_tensor *src1, ggml_tensor *dst,
-                                     const float *src0_dd, const float *src1_dd,
-                                     float *dst_dd,
-                                     const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    hardsigmoid_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-static void ggml_sycl_op_hardswish(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                   const ggml_tensor *src1, ggml_tensor *dst,
-                                   const float *src0_dd, const float *src1_dd,
-                                   float *dst_dd, const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    hardswish_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_leaky_relu(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                    const ggml_tensor *src1, ggml_tensor *dst,
-                                    const float *src0_dd, const float *src1_dd,
-                                    float *dst_dd,
-                                    const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    float negative_slope;
-    memcpy(&negative_slope, dst->op_params, sizeof(float));
-
-    leaky_relu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), negative_slope, main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_sqr(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                             ggml_tensor *dst, const float *src0_dd,
-                             const float *src1_dd, float *dst_dd,
-                             const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    sqr_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_norm(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                              ggml_tensor *dst, const float *src0_dd,
-                              const float *src1_dd, float *dst_dd,
-                              const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t nrows = ggml_nrows(src0);
-
-    float eps;
-    memcpy(&eps, dst->op_params, sizeof(float));
-
-    norm_f32_sycl(src0_dd, dst_dd, ne00, nrows, eps, main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_group_norm(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                    const ggml_tensor *src1, ggml_tensor *dst,
-                                    const float *src0_dd, const float *src1_dd,
-                                    float *dst_dd,
-                                    const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    int num_groups = dst->op_params[0];
-    int group_size = src0->ne[0] * src0->ne[1] * ((src0->ne[2] + num_groups - 1) / num_groups);
-    group_norm_f32_sycl(src0_dd, dst_dd, num_groups, group_size, src0->ne[0] * src0->ne[1] * src0->ne[2], main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_concat(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                const ggml_tensor *src1, ggml_tensor *dst,
-                                const float *src0_dd, const float *src1_dd,
-                                float *dst_dd,
-                                const queue_ptr &main_stream) {
-#pragma message("TODO: generalize concat kernel for dim != 2")
-#pragma message("      https://github.com/ggerganov/llama.cpp/pull/7563")
-    int dim = dst->op_params[0];
-    GGML_ASSERT(dim == 2);
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT(dst->type == GGML_TYPE_F32);
-
-    for (int i3 = 0; i3 < dst->ne[3]; i3++) {
-        concat_f32_sycl(src0_dd + i3 * (src0->nb[3] / 4), src1_dd + i3 * (src1->nb[3] / 4), dst_dd + i3 * (dst->nb[3] / 4), dst->ne[0], dst->ne[1], dst->ne[2], src0->ne[2], main_stream);
-    }
-
-    (void) src1;
-    (void) dst;
-}
-
-inline void ggml_sycl_op_upscale(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                 const ggml_tensor *src1, ggml_tensor *dst,
-                                 const float *src0_dd, const float *src1_dd,
-                                 float *dst_dd,
-                                 const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT(dst->type == GGML_TYPE_F32);
-
-    const float sf0 = (float)dst->ne[0]/src0->ne[0];
-    const float sf1 = (float)dst->ne[1]/src0->ne[1];
-    const float sf2 = (float)dst->ne[2]/src0->ne[2];
-    const float sf3 = (float)dst->ne[3]/src0->ne[3];
-
-    upscale_f32_sycl(src0_dd, dst_dd, src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3],
-                     dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], sf0, sf1, sf2, sf3,
-                     main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_pad(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                             ggml_tensor *dst, const float *src0_dd,
-                             const float *src1_dd, float *dst_dd,
-                             const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT(dst->type == GGML_TYPE_F32);
-    GGML_ASSERT(src0->ne[3] == 1 && dst->ne[3] == 1); // just 3D tensors
-
-    pad_f32_sycl(src0_dd, dst_dd,
-        src0->ne[0], src0->ne[1], src0->ne[2],
-        dst->ne[0], dst->ne[1], dst->ne[2], main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_rms_norm(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                  const ggml_tensor *src1, ggml_tensor *dst,
-                                  const float *src0_dd, const float *src1_dd,
-                                  float *dst_dd,
-                                  const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t nrows = ggml_nrows(src0);
-
-    float eps;
-    memcpy(&eps, dst->op_params, sizeof(float));
-
-    rms_norm_f32_sycl(src0_dd, dst_dd, ne00, nrows, eps, main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_mul_mat_q(
-    ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
-    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
-    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
-    const int64_t src1_ncols, const int64_t src1_padded_row_size,
-    const queue_ptr &stream) try {
-
-    const int64_t ne00 = src0->ne[0];
-
-    const int64_t ne10 = src1->ne[0];
-    GGML_ASSERT(ne10 % QK8_1 == 0);
-
-    const int64_t ne0 = dst->ne[0];
-
-    const int64_t row_diff = row_high - row_low;
-
-    int device_id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(device_id = get_current_device_id()));
-
-    // the main device has a larger memory buffer to hold the results from all GPUs
-    // nrows_dst == nrows of the matrix that the dequantize_mul_mat kernel writes into
-    const int64_t nrows_dst = device_id == ctx.device ? ne0 : row_diff;
-
-    switch (src0->type) {
-        case GGML_TYPE_Q4_0:
-            ggml_mul_mat_q4_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q4_1:
-            ggml_mul_mat_q4_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q5_0:
-            ggml_mul_mat_q5_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q5_1:
-            ggml_mul_mat_q5_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q8_0:
-            ggml_mul_mat_q8_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q2_K:
-            ggml_mul_mat_q2_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q3_K:
-            ggml_mul_mat_q3_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q4_K:
-            ggml_mul_mat_q4_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q5_K:
-            ggml_mul_mat_q5_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
-            break;
-        case GGML_TYPE_Q6_K:
-            ggml_mul_mat_q6_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
-            break;
-        default:
-            GGML_ASSERT(false);
-            break;
-    }
-
-    (void) src1;
-    (void) dst;
-    (void) src1_ddf_i;
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static int64_t get_row_rounding(ggml_type type, const std::array<float, GGML_SYCL_MAX_DEVICES> & tensor_split) {
-    int64_t min_compute_capability = INT_MAX;
-    int64_t max_compute_capability = INT_MIN;
-    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-        if (tensor_split[i] < (i + 1 < ggml_sycl_info().device_count ? tensor_split[i + 1] : 1.0f)) {
-            if (min_compute_capability > ggml_sycl_info().devices[i].cc) {
-                min_compute_capability = ggml_sycl_info().devices[i].cc;
-            }
-            if (max_compute_capability < ggml_sycl_info().devices[i].cc) {
-                max_compute_capability = ggml_sycl_info().devices[i].cc;
-            }
-        }
-    }
-
-    switch(type) {
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-            return max_compute_capability >= VER_GEN9 ? 128 : 64;
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-            return 64;
-        case GGML_TYPE_F16:
-        case GGML_TYPE_F32:
-            return 1;
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_IQ2_XXS:
-        case GGML_TYPE_IQ2_XS:
-        case GGML_TYPE_IQ2_S:
-        case GGML_TYPE_IQ1_S:
-        case GGML_TYPE_IQ1_M:
-        case GGML_TYPE_IQ3_XXS:
-        case GGML_TYPE_IQ4_XS:
-        case GGML_TYPE_IQ4_NL:
-            return max_compute_capability >= VER_GEN9 ? 128 : 64;
-        case GGML_TYPE_IQ3_S:
-            return max_compute_capability >= VER_GEN9 ? 128 : 64;
-        case GGML_TYPE_Q6_K:
-            return 64;
-        default:
-            GGML_ASSERT(false);
-    }
-
-}
-
-inline void ggml_sycl_op_mul_mat_vec_q(
-    ggml_backend_sycl_context & ctx,
-    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
-    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
-    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
-    const int64_t src1_ncols, const int64_t src1_padded_row_size,
-    const queue_ptr &stream) {
-
-    const int64_t ne10 = src1->ne[0];
-    GGML_ASSERT(ne10 % QK8_1 == 0);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t row_diff = row_high - row_low;
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-
-    // the main device has a larger memory buffer to hold the results from all GPUs
-    // nrows_dst == nrows of the matrix that the kernel writes into
-    const int64_t nrows_dst = id == ctx.device ? ne00 : row_diff;
-
-    switch (src0->type) {
-        case GGML_TYPE_Q4_0:
-            mul_mat_vec_q4_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q4_1:
-            mul_mat_vec_q4_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q5_0:
-            mul_mat_vec_q5_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q5_1:
-            mul_mat_vec_q5_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q8_0:
-            mul_mat_vec_q8_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q2_K:
-            mul_mat_vec_q2_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q3_K:
-            mul_mat_vec_q3_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q4_K:
-            mul_mat_vec_q4_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q5_K:
-            mul_mat_vec_q5_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q6_K:
-            mul_mat_vec_q6_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_IQ1_S:
-            mul_mat_vec_iq1_s_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_IQ1_M:
-            mul_mat_vec_iq1_m_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_IQ2_XXS:
-            mul_mat_vec_iq2_xxs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_IQ2_XS:
-            mul_mat_vec_iq2_xs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_IQ2_S:
-            mul_mat_vec_iq2_s_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_IQ3_XXS:
-            mul_mat_vec_iq3_xxs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_IQ3_S:
-            mul_mat_vec_iq3_s_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_IQ4_NL:
-            mul_mat_vec_iq4_nl_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_IQ4_XS:
-            mul_mat_vec_iq4_xs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        default:
-            GGML_ASSERT(false);
-            break;
-    }
-
-    (void) src1;
-    (void) dst;
-    (void) src1_ddf_i;
-    (void) src1_ncols;
-    (void) src1_padded_row_size;
-}
-
-
-inline void ggml_sycl_op_dequantize_mul_mat_vec(
-    ggml_backend_sycl_context & ctx,
-    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
-    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
-    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
-    const int64_t src1_ncols, const int64_t src1_padded_row_size,
-    const queue_ptr &stream) {
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t row_diff = row_high - row_low;
-
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    // on some GPUs it is faster to convert src1 to half and to use half precision intrinsics
-#ifdef GGML_SYCL_F16
-    ggml_sycl_pool_alloc<sycl::half> src1_dfloat_a(ctx.pool());
-    sycl::half *src1_dfloat = nullptr; // dfloat == half
-
-    bool src1_convert_f16 =
-        src0->type == GGML_TYPE_Q4_0 || src0->type == GGML_TYPE_Q4_1 ||
-        src0->type == GGML_TYPE_Q5_0 || src0->type == GGML_TYPE_Q5_1 ||
-        src0->type == GGML_TYPE_Q8_0 || src0->type == GGML_TYPE_F16;
-
-    if (src1_convert_f16) {
-        src1_dfloat = src1_dfloat_a.alloc(ne00);
-        const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src1->type);
-        GGML_ASSERT(to_fp16_sycl != nullptr);
-        to_fp16_sycl(src1_ddf_i, src1_dfloat, ne00, stream);
-    }
-#else
-    const dfloat * src1_dfloat = (const dfloat *) src1_ddf_i; // dfloat == float, no conversion
-#endif // GGML_SYCL_F16
-
-    switch (src0->type) {
-        case GGML_TYPE_Q4_0:
-            dequantize_mul_mat_vec_q4_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q4_1:
-            dequantize_mul_mat_vec_q4_1_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q5_0:
-            dequantize_mul_mat_vec_q5_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q5_1:
-            dequantize_mul_mat_vec_q5_1_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q8_0:
-            dequantize_mul_mat_vec_q8_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q2_K:
-            dequantize_mul_mat_vec_q2_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q3_K:
-            dequantize_mul_mat_vec_q3_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q4_K:
-            dequantize_mul_mat_vec_q4_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q5_K:
-            dequantize_mul_mat_vec_q5_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_Q6_K:
-            dequantize_mul_mat_vec_q6_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
-            break;
-        case GGML_TYPE_F16:
-            convert_mul_mat_vec_f16_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
-            break;
-        default:
-            printf("ggml_sycl_op_dequantize_mul_mat_vec unsupported GGML_TYPE %d\n", src0->type);
-            GGML_ASSERT(false);
-            break;
-    }
-
-    (void) src1;
-    (void) dst;
-    (void) src1_ddq_i;
-    (void) src1_ncols;
-    (void) src1_padded_row_size;
-}
-
-inline void ggml_sycl_op_mul_mat_sycl(
-    ggml_backend_sycl_context & ctx,
-    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
-    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
-    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
-    const int64_t src1_ncols, const int64_t src1_padded_row_size,
-    const queue_ptr &stream) try {
-
-    GGML_ASSERT(src0_dd_i  != nullptr);
-    GGML_ASSERT(src1_ddf_i != nullptr);
-    GGML_ASSERT(dst_dd_i   != nullptr);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne10 = src1->ne[0];
-
-    const int64_t ne0 = dst->ne[0];
-
-    const int64_t row_diff = row_high - row_low;
-
-    int id;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(id = get_current_device_id()));
-
-    // the main device has a larger memory buffer to hold the results from all GPUs
-    // ldc == nrows of the matrix that cuBLAS writes into
-    int ldc = id == ctx.device ? ne0 : row_diff;
-
-#ifdef GGML_SYCL_F16
-    bool use_fp16 = true;  // TODO(Yu) SYCL capability check
-#else
-    bool use_fp16 = false;
-#endif
-    if ((src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) &&
-        use_fp16 && ggml_is_contiguous(src0) && row_diff == src0->ne[1] &&
-        dst->op_params[0] == GGML_PREC_DEFAULT) {
-
-        // GGML_SYCL_DEBUG("ggml_sycl_op_mul_mat_sycl - fp16 path\n");
-        ggml_sycl_pool_alloc<sycl::half> src0_as_f16(ctx.pool());
-        if (src0->type != GGML_TYPE_F16) {
-            const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src0->type);
-            GGML_ASSERT(to_fp16_sycl != nullptr);
-            size_t ne = row_diff*ne00;
-            src0_as_f16.alloc(ne);
-            to_fp16_sycl(src0_dd_i, src0_as_f16.get(), ne, stream);
-        }
-        const sycl::half *src0_ptr = src0->type == GGML_TYPE_F16
-                                         ? (const sycl::half *)src0_dd_i
-                                         : src0_as_f16.get();
-
-        ggml_sycl_pool_alloc<sycl::half> src1_as_f16(ctx.pool());
-        if (src1->type != GGML_TYPE_F16) {
-            const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src1->type);
-            GGML_ASSERT(to_fp16_sycl != nullptr);
-            size_t ne = src1_ncols*ne10;
-            src1_as_f16.alloc(ne);
-            to_fp16_sycl(src1_ddf_i, src1_as_f16.get(), ne, stream);
-        }
-        const sycl::half *src1_ptr = src1->type == GGML_TYPE_F16
-                ? (const sycl::half *)src1->data + src1_padded_row_size
-                                         : src1_as_f16.get();
-        ggml_sycl_pool_alloc<sycl::half> dst_f16(ctx.pool(), row_diff * src1_ncols);
-
-        const sycl::half alpha_f16 = 1.0f;
-        const sycl::half beta_f16 = 0.0f;
-        SYCL_CHECK(CHECK_TRY_ERROR(dpct::gemm(
-            *stream, oneapi::mkl::transpose::trans,
-            oneapi::mkl::transpose::nontrans, row_diff, src1_ncols, ne10,
-            &alpha_f16, src0_ptr, dpct::library_data_t::real_half, ne00,
-            src1_ptr, dpct::library_data_t::real_half, ne10, &beta_f16,
-            dst_f16.get(), dpct::library_data_t::real_half, ldc,
-            dpct::library_data_t::real_half)));
-        const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(GGML_TYPE_F16);
-        to_fp32_sycl(dst_f16.get(), dst_dd_i, row_diff*src1_ncols, stream);
-    }
-    else {
-        // GGML_SYCL_DEBUG("ggml_sycl_op_mul_mat_sycl - fp32 path\n");
-        ggml_sycl_pool_alloc<float> src0_ddq_as_f32(ctx.pool());
-        ggml_sycl_pool_alloc<float> src1_ddq_as_f32(ctx.pool());
-        if (src0->type != GGML_TYPE_F32) {
-            const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(src0->type);
-            GGML_ASSERT(to_fp32_sycl != nullptr);
-            src0_ddq_as_f32.alloc(row_diff*ne00);
-            to_fp32_sycl(src0_dd_i, src0_ddq_as_f32.get(), row_diff*ne00, stream);
-        }
-        if (src1->type != GGML_TYPE_F32) {
-            const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(src1->type);
-            GGML_ASSERT(to_fp32_sycl != nullptr);
-            src1_ddq_as_f32.alloc(src1_ncols*ne10);
-            to_fp32_sycl(src1_ddf_i, src1_ddq_as_f32.get(), src1_ncols*ne10, stream);
-        }
-        const float * src0_ddf_i = src0->type == GGML_TYPE_F32 ? (const float *) src0_dd_i : src0_ddq_as_f32.get();
-        const float * src1_ddf1_i = src1->type == GGML_TYPE_F32 ? (const float *) src1_ddf_i : src1_ddq_as_f32.get();
-
-        const float alpha = 1.0f;
-        const float beta = 0.0f;
-
-        SYCL_CHECK(CHECK_TRY_ERROR(oneapi::mkl::blas::column_major::gemm(
-            *stream, oneapi::mkl::transpose::trans,
-            oneapi::mkl::transpose::nontrans, row_diff, src1_ncols, ne10,
-            dpct::get_value(&alpha, *stream), src0_ddf_i, ne00,
-            src1_ddf1_i, ne10, dpct::get_value(&beta, *stream),
-            dst_dd_i, ldc)));
-    }
-    (void) dst;
-    (void) src1_ddq_i;
-    (void) src1_padded_row_size;
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-inline void ggml_sycl_op_rope(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                              ggml_tensor *dst, const float *src0_dd,
-                              const float *src1_dd, float *dst_dd,
-                              const queue_ptr &main_stream) {
-    const ggml_tensor * src2 = dst->src[2];
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32 ||  dst->type == GGML_TYPE_F16);
-    GGML_ASSERT(src0->type == dst->type);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-    const int64_t ne2 = dst->ne[2];
-    const int64_t nrows = ggml_nrows(src0);
-
-    //const int n_past      = ((int32_t *) dst->op_params)[0];
-    const int n_dims      = ((int32_t *) dst->op_params)[1];
-    const int mode        = ((int32_t *) dst->op_params)[2];
-    //const int n_ctx       = ((int32_t *) dst->op_params)[3];
-    const int n_ctx_orig  = ((int32_t *) dst->op_params)[4];
-
-    // RoPE alteration for extended context
-    float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
-    memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
-    memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
-    memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
-    memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
-    memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
-    memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
-
-    const float * freq_factors = nullptr;
-    const int32_t * pos = nullptr;
-    if ((mode & 1) == 0) {
-        GGML_ASSERT(src1->type == GGML_TYPE_I32);
-        GGML_ASSERT(src1->ne[0] == ne2);
-        pos = (const int32_t *) src1_dd;
-    }
-
-    const bool is_neox = mode & 2;
-
-#pragma message("TODO: update rope NORM mode to match NEOX mode")
-#pragma message("      https://github.com/ggerganov/llama.cpp/pull/7634")
-
-    if (is_neox) {
-        pos = (const int32_t *) src1_dd;
-
-        if (src2 != nullptr) {
-            freq_factors = (const float *) src2->data;
-        }
-    } else {
-        GGML_ASSERT(src2 == nullptr && "TODO: freq_factors not implemented for !is_neox");
-    }
-
-    rope_corr_dims corr_dims;
-    ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims.v);
-
-    // compute
-    if (is_neox) {
-        if (src0->type == GGML_TYPE_F32) {
-            rope_neox_sycl(
-                (const float *)src0_dd, (float *)dst_dd, ne00, n_dims, nrows, pos, freq_scale, ne01, freq_base, ext_factor,
-                attn_factor, corr_dims, freq_factors, main_stream
-            );
-        } else if (src0->type == GGML_TYPE_F16) {
-            rope_neox_sycl((const sycl::half *)src0_dd, (sycl::half *)dst_dd,
-                           ne00, n_dims, nrows, pos, freq_scale, ne01,
-                           freq_base, ext_factor, attn_factor, corr_dims,
-                           freq_factors, main_stream);
-        } else {
-            GGML_ASSERT(false);
-        }
-    } else {
-        if (src0->type == GGML_TYPE_F32) {
-            rope_sycl(
-                (const float *)src0_dd, (float *)dst_dd, ne00, nrows, pos, freq_scale, ne01, freq_base, ext_factor,
-                attn_factor, corr_dims, main_stream
-            );
-        } else if (src0->type == GGML_TYPE_F16) {
-            rope_sycl((const sycl::half *)src0_dd, (sycl::half *)dst_dd, ne00,
-                      nrows, pos, freq_scale, ne01, freq_base, ext_factor,
-                      attn_factor, corr_dims, main_stream);
-        } else {
-            GGML_ASSERT(false);
-        }
-    }
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-static void ggml_sycl_op_pool2d(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                const ggml_tensor *src1, ggml_tensor *dst,
-                                const float *src0_dd, const float *src1_dd,
-                                float *dst_dd, const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    const int32_t * opts = (const int32_t *)dst->op_params;
-    enum ggml_op_pool op = static_cast<ggml_op_pool>(opts[0]);
-    const int k0 = opts[1];
-    const int k1 = opts[2];
-    const int s0 = opts[3];
-    const int s1 = opts[4];
-    const int p0 = opts[5];
-    const int p1 = opts[6];
-
-    const int64_t IH = src0->ne[1];
-    const int64_t IW = src0->ne[0];
-
-    const int64_t N = dst->ne[3];
-    const int64_t OC = dst->ne[2];
-    const int64_t OH = dst->ne[1];
-    const int64_t OW = dst->ne[0];
-
-    const int parallel_elements = N * OC * OH * OW;
-    const int num_blocks = (parallel_elements + SYCL_POOL2D_BLOCK_SIZE - 1) / SYCL_POOL2D_BLOCK_SIZE;
-    sycl::range<3> block_nums(1, 1, num_blocks);
-    main_stream->parallel_for(
-        sycl::nd_range<3>(block_nums *
-                              sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE),
-                          sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE)),
-        [=](sycl::nd_item<3> item_ct1) {
-            pool2d_nchw_kernel(IH, IW, OH, OW, k1, k0, s1, s0, p1, p0,
-                               parallel_elements, src0_dd, dst_dd, op,
-                               item_ct1);
-        });
-
-    (void) src1;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_im2col(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                const ggml_tensor *src1, ggml_tensor *dst,
-                                const float *src0_dd, const float *src1_dd,
-                                float *dst_dd,
-                                const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32);
-
-    const int32_t s0 = ((const int32_t*)(dst->op_params))[0];
-    const int32_t s1 = ((const int32_t*)(dst->op_params))[1];
-    const int32_t p0 = ((const int32_t*)(dst->op_params))[2];
-    const int32_t p1 = ((const int32_t*)(dst->op_params))[3];
-    const int32_t d0 = ((const int32_t*)(dst->op_params))[4];
-    const int32_t d1 = ((const int32_t*)(dst->op_params))[5];
-
-    const bool is_2D = ((const int32_t*)(dst->op_params))[6] == 1;
-
-    const int64_t IC = src1->ne[is_2D ? 2 : 1];
-    const int64_t IH = is_2D ? src1->ne[1] : 1;
-    const int64_t IW =         src1->ne[0];
-
-    const int64_t KH = is_2D ? src0->ne[1] : 1;
-    const int64_t KW =         src0->ne[0];
-
-    const int64_t OH = is_2D ? dst->ne[2] : 1;
-    const int64_t OW =         dst->ne[1];
-
-    const size_t delta_offset = src1->nb[is_2D ? 2 : 1] / 4; // nb is byte offset, src is type float32
-
-    if (dst->type == GGML_TYPE_F16) {
-        im2col_sycl(src1_dd, (sycl::half *)dst_dd, IW, IH, OW, OH, KW, KH, IC, delta_offset, s0, s1, p0, p1, d0, d1, main_stream);
-    } else {
-        im2col_sycl(src1_dd, (float *)dst_dd, IW, IH, OW, OH, KW, KH, IC, delta_offset, s0, s1, p0, p1, d0, d1, main_stream);
-    }
-
-    (void) src0;
-    (void) src0_dd;
-}
-
-inline void ggml_sycl_op_sum_rows(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                  const ggml_tensor *src1, ggml_tensor *dst,
-                                  const float *src0_dd, const float *src1_dd,
-                                  float *dst_dd,
-                                  const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    const int64_t ncols = src0->ne[0];
-    const int64_t nrows = ggml_nrows(src0);
-
-    sum_rows_f32_sycl(src0_dd, dst_dd, ncols, nrows, main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_argsort(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                 const ggml_tensor *src1, ggml_tensor *dst,
-                                 const float *src0_dd, const float *src1_dd,
-                                 float *dst_dd,
-                                 const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_I32);
-
-    const int64_t ncols = src0->ne[0];
-    const int64_t nrows = ggml_nrows(src0);
-
-    enum ggml_sort_order order = (enum ggml_sort_order) dst->op_params[0];
-
-    argsort_f32_i32_sycl(src0_dd, (int *)dst_dd, ncols, nrows, order, main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_diag_mask_inf(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                       const ggml_tensor *src1,
-                                       ggml_tensor *dst, const float *src0_dd,
-                                       const float *src1_dd, float *dst_dd,
-                                       const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-    const int nrows0 = ggml_nrows(src0);
-
-    const int n_past = ((int32_t *) dst->op_params)[0];
-
-    diag_mask_inf_f32_sycl(src0_dd, dst_dd, ne00, nrows0, ne01, n_past, main_stream);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_soft_max(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                  const ggml_tensor *src1, ggml_tensor *dst,
-                                  const float *src0_dd, const float *src1_dd,
-                                  float *dst_dd,
-                                  const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-#pragma message("TODO: add ggml_sycl_op_soft_max() F16 src1 support")
-#pragma message("ref:  https://github.com/ggerganov/llama.cpp/pull/5021")
-    GGML_ASSERT(!src1 || src1->type == GGML_TYPE_F32); // src1 contains mask and it is optional
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t nrows_x = ggml_nrows(src0);
-    const int64_t nrows_y = src0->ne[1];
-
-    float scale = 1.0f;
-    float max_bias = 0.0f;
-
-    memcpy(&scale, dst->op_params + 0, sizeof(float));
-    memcpy(&max_bias, dst->op_params + 1, sizeof(float));
-
-    soft_max_f32_sycl(src0_dd, src1 ? src1_dd : nullptr, dst_dd, ne00,
-                      nrows_x, nrows_y, scale, max_bias, main_stream);
-}
-
-inline void ggml_sycl_op_scale(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                               ggml_tensor *dst, const float *src0_dd,
-                               const float *src1_dd, float *dst_dd,
-                               const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    float scale;
-    memcpy(&scale, dst->op_params, sizeof(float));
-
-    scale_f32_sycl(src0_dd, dst_dd, scale, ggml_nelements(src0), main_stream);
-    /*
-    DPCT1010:87: SYCL uses exceptions to report errors and does not use the
-    error codes. The call was replaced with 0. You need to rewrite this code.
-    */
-    SYCL_CHECK(0);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-inline void ggml_sycl_op_clamp(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                               ggml_tensor *dst, const float *src0_dd,
-                               const float *src1_dd, float *dst_dd,
-                               const queue_ptr &main_stream) {
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    float min;
-    float max;
-    memcpy(&min, dst->op_params, sizeof(float));
-    memcpy(&max, (float *) dst->op_params + 1, sizeof(float));
-
-    clamp_f32_sycl(src0_dd, dst_dd, min, max, ggml_nelements(src0), main_stream);
-    /*
-    DPCT1010:88: SYCL uses exceptions to report errors and does not use the
-    error codes. The call was replaced with 0. You need to rewrite this code.
-    */
-    SYCL_CHECK(0);
-
-    (void) src1;
-    (void) dst;
-    (void) src1_dd;
-}
-
-static void ggml_sycl_op_flatten(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                 const ggml_tensor *src1, ggml_tensor *dst,
-                                 const ggml_sycl_op_flatten_t op) try {
-    const int64_t nrows0 = ggml_nrows(src0);
-
-    const bool use_src1 = src1 != nullptr;
-    const int64_t nrows1 = use_src1 ? ggml_nrows(src1) : 1;
-
-    GGML_ASSERT(!use_src1 || src1->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
-    GGML_ASSERT(              dst->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
-
-    ggml_tensor_extra_gpu * src0_extra =            (ggml_tensor_extra_gpu *) src0->extra;
-    ggml_tensor_extra_gpu * src1_extra = use_src1 ? (ggml_tensor_extra_gpu *) src1->extra : nullptr;
-    ggml_tensor_extra_gpu * dst_extra  =            (ggml_tensor_extra_gpu *)  dst->extra;
-
-    // dd = data device
-    float * src0_ddf = (float *) src0->data;
-    float * src1_ddf = use_src1 ? (float *) src1->data : nullptr;
-    float *  dst_ddf = (float *) dst->data;
-
-    ggml_sycl_pool_alloc<float> src0_f(ctx.pool());
-    ggml_sycl_pool_alloc<float> src1_f(ctx.pool());
-    ggml_sycl_pool_alloc<float>  dst_f(ctx.pool());
-
-    ggml_sycl_set_device(ctx.device);
-    queue_ptr main_stream = ctx.stream();
-    // GGML_SYCL_DEBUG("ctx.device=%d, main_stream=%p src0_on_device=%d, src1_on_device=%d, dst_on_device=%d\n",
-        // ctx.device, main_stream, src0_on_device, src1_on_device, dst_on_device);
-
-    // do the computation
-    op(ctx, src0, src1, dst, src0_ddf, src1_ddf, dst_ddf, main_stream);
-    // print_ggml_tensor("tensor", dst);
-}
-catch (sycl::exception const &exc) {
-
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_sycl_set_peer_access(const int n_tokens, int main_device) {
-    static bool peer_access_enabled = false;
-
-    const bool enable_peer_access = n_tokens <= GGML_SYCL_PEER_MAX_BATCH_SIZE;
-
-    if (peer_access_enabled == enable_peer_access) {
-        return;
-    }
-
-#ifdef NDEBUG
-    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-        SYCL_CHECK(ggml_sycl_set_device(i));
-    }
-
-    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-        SYCL_CHECK(ggml_sycl_set_device(i));
-
-        for (int id_other = 0; id_other < ggml_sycl_info().device_count; ++id_other) {
-            if (i == id_other) {
-                continue;
-            }
-            if (i != main_device && id_other != main_device) {
-                continue;
-            }
-
-            // int can_access_peer;
-            // SYCL_CHECK(syclDeviceCanAccessPeer(&can_access_peer, id, id_other));
-            // if (can_access_peer) {
-            //     if (enable_peer_access) {
-            //         SYCL_CHECK(syclDeviceEnablePeerAccess(id_other, 0));
-            //     } else {
-            //         SYCL_CHECK(syclDeviceDisablePeerAccess(id_other));
-            //     }
-            // }
-        }
-    }
-#endif // NDEBUG
-
-    peer_access_enabled = enable_peer_access;
-}
-
-struct ggml_backend_sycl_split_buffer_type_context {
-    std::array<float, GGML_SYCL_MAX_DEVICES> tensor_split;
-};
-
-static void ggml_sycl_op_mul_mat(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                 const ggml_tensor *src1, ggml_tensor *dst,
-                                 ggml_sycl_op_mul_mat_t op,
-                                 const bool convert_src1_to_q8_1) try {
-
-    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne);
-
-    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne);
-    const int64_t nrows1 = ggml_nrows(src1);
-
-    GGML_ASSERT(ne03 == ne13);
-
-    const int64_t ne0 = dst->ne[0];
-    const int64_t ne1 = dst->ne[1];
-
-    const int nb2 = dst->nb[2];
-    const int nb3 = dst->nb[3];
-
-    GGML_ASSERT(dst->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
-    GGML_ASSERT(src1->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32 || (src1->ne[2] == 1 && src1->ne[3] == 1));
-
-    GGML_ASSERT(ne12 >= ne02 && ne12 % ne02 == 0);
-
-    const int64_t i02_divisor = ne12 / ne02;
-
-    const size_t src0_ts = ggml_type_size(src0->type);
-    const size_t src0_bs = ggml_blck_size(src0->type);
-    const size_t q8_1_ts = sizeof(block_q8_1);
-    const size_t q8_1_bs = QK8_1;
-
-    ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu *) src0->extra;
-    ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu *) src1->extra;
-    ggml_tensor_extra_gpu *  dst_extra = (ggml_tensor_extra_gpu *)  dst->extra;
-
-    const bool src0_is_contiguous = ggml_is_contiguous(src0);
-    const bool src1_is_contiguous = ggml_is_contiguous(src1);
-
-    int64_t src1_padded_col_size = GGML_PAD(ne10, MATRIX_ROW_PADDING);
-
-    const bool split = src0->backend == GGML_BACKEND_TYPE_GPU_SPLIT;
-    GGML_ASSERT(!(split && ne02 > 1));
-    GGML_ASSERT(!(split && ne03 > 1));
-    GGML_ASSERT(!(split && ne02 < ne12));
-
-    std::array<float, GGML_SYCL_MAX_DEVICES> tensor_split;
-    if (split) {
-        // TODO: check that src0->buffer->buft is a split buffer type, replace GGML_BACKEND_TYPE_GPU_SPLIT check
-        // GGML_ASSERT(src0->buffer != nullptr && src0->buffer->buft == ...);
-        ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *) src0->buffer->buft->context;
-        tensor_split = buft_ctx->tensor_split;
-    }
-
-    struct dev_data {
-        ggml_sycl_pool_alloc<char> src0_dd_alloc;
-        ggml_sycl_pool_alloc<float> src1_ddf_alloc;
-        ggml_sycl_pool_alloc<char> src1_ddq_alloc;
-        ggml_sycl_pool_alloc<float> dst_dd_alloc;
-
-        char *src0_dd = nullptr;
-        float *src1_ddf = nullptr; // float
-        char *src1_ddq = nullptr;  // q8_1
-        float *dst_dd = nullptr;
-
-        int64_t row_low;
-        int64_t row_high;
-    };
-
-    dev_data dev[GGML_SYCL_MAX_DEVICES];
-
-    int used_devices = 0;
-    queue_ptr main_stream = ctx.stream();
-
-    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-        // by default, use all rows
-        dev[i].row_low  = 0;
-        dev[i].row_high = ne01;
-
-        // for multi GPU, get the row boundaries from tensor split
-        // and round to mul_mat_q tile sizes
-        if (split) {
-            const int64_t rounding = get_row_rounding(src0->type, tensor_split);
-
-            if (i != 0) {
-                dev[i].row_low  = ne01*tensor_split[i];
-                if (dev[i].row_low < ne01) {
-                    dev[i].row_low -= dev[i].row_low % rounding;
-                }
-            }
-
-            if (i != ggml_sycl_info().device_count - 1) {
-                dev[i].row_high  = ne01*tensor_split[i + 1];
-                if (dev[i].row_high < ne01) {
-                    dev[i].row_high -= dev[i].row_high % rounding;
-                }
-            }
-        }
-    }
-
-    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-        if ((!split && i != ctx.device) || dev[i].row_low == dev[i].row_high) {
-            continue;
-        }
-
-        used_devices++;
-
-        const bool src1_on_device = i == ctx.device;
-        const bool  dst_on_device = i == ctx.device;
-
-        ggml_sycl_set_device(i);
-        queue_ptr stream = ctx.stream(i, 0);
-
-        if (src0_is_contiguous) {
-            dev[i].src0_dd = (char *) src0->data;
-        } else {
-            dev[i].src0_dd = dev[i].src0_dd_alloc.alloc(ctx.pool(i), ggml_nbytes(src0));
-        }
-
-        if (src1_on_device && src1_is_contiguous) {
-            dev[i].src1_ddf = (float *) src1->data;
-        } else {
-            dev[i].src1_ddf = dev[i].src1_ddf_alloc.alloc(ctx.pool(i), ggml_nelements(src1));
-        }
-
-        if (convert_src1_to_q8_1) {
-            dev[i].src1_ddq = dev[i].src1_ddq_alloc.alloc(ctx.pool(i), nrows1*src1_padded_col_size*q8_1_ts/q8_1_bs);
-
-            if (src1_on_device && src1_is_contiguous) {
-                quantize_row_q8_1_sycl(dev[i].src1_ddf, dev[i].src1_ddq, ne10, nrows1, src1_padded_col_size, stream);
-                /*
-                DPCT1010:90: SYCL uses exceptions to report errors and does not
-                use the error codes. The call was replaced with 0. You need to
-                rewrite this code.
-                */
-                SYCL_CHECK(0);
-            }
-        }
-
-        if (dst_on_device) {
-            dev[i].dst_dd = (float *) dst->data;
-        } else {
-            const size_t size_dst_ddf = split ? (dev[i].row_high - dev[i].row_low)*ne1 : ggml_nelements(dst);
-            dev[i].dst_dd = dev[i].dst_dd_alloc.alloc(ctx.pool(i), size_dst_ddf);
-        }
-    }
-
-    // if multiple devices are used they need to wait for the main device
-    // here an event is recorded that signals that the main device has finished calculating the input data
-    if (split && used_devices > 1) {
-        ggml_sycl_set_device(ctx.device);
-        /*
-        DPCT1024:91: The original code returned the error code that was further
-        consumed by the program logic. This original code was replaced with 0.
-        You may need to rewrite the program logic consuming the error code.
-        */
-        SYCL_CHECK(CHECK_TRY_ERROR(
-            *src0_extra->events[ctx.device][0] =
-                ctx.stream()->ext_oneapi_submit_barrier()));
-    }
-
-    const int64_t src1_col_stride = split && used_devices > 1 ? MUL_MAT_SRC1_COL_STRIDE : ne11;
-    for (int64_t src1_col_0 = 0; src1_col_0 < ne11; src1_col_0 += src1_col_stride) {
-        const int64_t is = split ? (src1_col_0/src1_col_stride) % GGML_SYCL_MAX_STREAMS : 0;
-        const int64_t src1_ncols = src1_col_0 + src1_col_stride > ne11 ? ne11 - src1_col_0 : src1_col_stride;
-
-        for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-            if ((!split && i != ctx.device) || dev[i].row_low == dev[i].row_high) {
-                continue;
-            }
-
-            const bool src1_on_device = i == ctx.device;
-            const bool  dst_on_device = i == ctx.device;
-            const int64_t row_diff = dev[i].row_high - dev[i].row_low;
-
-            ggml_sycl_set_device(i);
-            queue_ptr stream = ctx.stream(i, is);
-
-            // wait for main GPU data if necessary
-            if (split && (i != ctx.device || is != 0)) {
-                /*
-                DPCT1009:163: SYCL uses exceptions to report errors and does not
-                use the error codes. The original code was commented out and a
-                warning string was inserted. You need to rewrite this code.
-                */
-                SYCL_CHECK(CHECK_TRY_ERROR(stream->ext_oneapi_submit_barrier(
-                    {*src0_extra->events[ctx.device][0]})));
-            }
-
-            for (int64_t i0 = 0; i0 < ne13*ne12; ++i0) {
-                const int64_t i03 = i0 / ne12;
-                const int64_t i02 = i0 % ne12;
-
-                const size_t src1_ddq_i_offset = (i0*ne11 + src1_col_0) * src1_padded_col_size*q8_1_ts/q8_1_bs;
-
-                // for split tensors the data begins at i0 == i0_offset_low
-                char  *  src0_dd_i =  dev[i].src0_dd + (i0/i02_divisor) * (ne01*ne00*src0_ts)/src0_bs;
-                float * src1_ddf_i = dev[i].src1_ddf + (i0*ne11 + src1_col_0) * ne10;
-                char  * src1_ddq_i = dev[i].src1_ddq +  src1_ddq_i_offset;
-                float *   dst_dd_i =   dev[i].dst_dd + (i0*ne1  + src1_col_0) * (dst_on_device ? ne0 : row_diff);
-
-                // the main device memory buffer can be on VRAM scratch, with space for all partial results
-                // in that case an offset on dst_ddf_i is needed
-                if (i == ctx.device) {
-                    dst_dd_i += dev[i].row_low; // offset is 0 if no tensor split
-                }
-
-                // copy src0, src1 to device if necessary
-                if (src1_is_contiguous) {
-                    if (i != ctx.device) {
-                        if (convert_src1_to_q8_1) {
-                            char * src1_ddq_i_source = dev[ctx.device].src1_ddq + src1_ddq_i_offset;
-                          SYCL_CHECK(CHECK_TRY_ERROR(stream->memcpy(
-                                src1_ddq_i, src1_ddq_i_source,
-                                src1_ncols * src1_padded_col_size * q8_1_ts /
-                                    q8_1_bs).wait()));
-                        } else {
-
-                            float * src1_ddf_i_source = (float *) src1_extra->data_device[ctx.device];
-                            src1_ddf_i_source += (i0*ne11 + src1_col_0) * ne10;
-
-                            SYCL_CHECK(CHECK_TRY_ERROR(dev2dev_memcpy(*stream, *main_stream,
-                                src1_ddf_i, src1_ddf_i_source,
-                                src1_ncols * ne10 * sizeof(float))));
-                        }
-                    }
-                } else if (src1_on_device && !src1_is_contiguous) {
-                    SYCL_CHECK(ggml_sycl_cpy_tensor_2d(
-                                   src1_ddf_i, src1, i03, i02, src1_col_0, src1_col_0+src1_ncols, stream));
-                } else {
-                    GGML_ASSERT(false);
-                }
-
-                if (convert_src1_to_q8_1 && !src1_is_contiguous) {
-                    quantize_row_q8_1_sycl(src1_ddf_i, src1_ddq_i, ne10, src1_ncols, src1_padded_col_size, stream);
-                    /*
-                    DPCT1010:92: SYCL uses exceptions to report errors and does
-                    not use the error codes. The call was replaced with 0. You
-                    need to rewrite this code.
-                    */
-                    SYCL_CHECK(0);
-                }
-
-                if (src1_col_0 == 0 && !src0_is_contiguous && i02 % i02_divisor == 0) {
-                    SYCL_CHECK(ggml_sycl_cpy_tensor_2d(src0_dd_i, src0, i03, i02/i02_divisor, dev[i].row_low, dev[i].row_high, stream));
-                }
-                if (src1->type == GGML_TYPE_F16) {
-                    src1_padded_col_size = (i0 * ne11 + src1_col_0) * ne10;
-                }
-                // do the computation
-                SYCL_CHECK(CHECK_TRY_ERROR(op(ctx, src0, src1, dst, src0_dd_i, src1_ddf_i, src1_ddq_i, dst_dd_i,
-                    dev[i].row_low, dev[i].row_high, src1_ncols, src1_padded_col_size, stream)));
-                /*
-                DPCT1010:93: SYCL uses exceptions to report errors and does not
-                use the error codes. The call was replaced with 0. You need to
-                rewrite this code.
-                */
-                SYCL_CHECK(0);
-
-                // copy dst to host or other device if necessary
-                if (!dst_on_device) {
-                    void * dst_off_device = dst->data;
-                    if (split) {
-                        // src0 = weight matrix is saved as a transposed matrix for better memory layout.
-                        // dst is NOT transposed.
-                        // The outputs of matrix matrix multiplications can therefore NOT simply be concatenated for >1 GPU.
-                        // Instead they need to be copied to the correct slice in ne0 = dst row index.
-                        // If dst is a vector with ne0 == 1 then you don't have to do this but it still produces correct results.
-                        float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3);
-                        GGML_ASSERT(dst->nb[1] == ne0*sizeof(float));
-                        dhf_dst_i += src1_col_0*ne0 + dev[i].row_low;
-
-                        SYCL_CHECK(CHECK_TRY_ERROR(dpct::async_dpct_memcpy(
-                            dhf_dst_i, ne0 * sizeof(float), dst_dd_i,
-                            row_diff * sizeof(float), row_diff * sizeof(float),
-                            src1_ncols, dpct::device_to_device, *stream)));
-                    } else {
-                        float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3);
-                        GGML_ASSERT(dst->nb[1] == ne0*sizeof(float));
-                        dhf_dst_i += src1_col_0*ne0;
-                        SYCL_CHECK(CHECK_TRY_ERROR(
-                            stream->memcpy(dhf_dst_i, dst_dd_i,
-                                           src1_ncols * ne0 * sizeof(float)).wait()));
-                    }
-                }
-
-                // add event for the main device to wait on until other device is done
-                if (split && (i != ctx.device || is != 0)) {
-                    /*
-                    DPCT1024:94: The original code returned the error code that
-                    was further consumed by the program logic. This original
-                    code was replaced with 0. You may need to rewrite the
-                    program logic consuming the error code.
-                    */
-                    SYCL_CHECK(CHECK_TRY_ERROR(
-                        *src0_extra->events[i][is] =
-                            stream->ext_oneapi_submit_barrier()));
-                }
-            }
-        }
-    }
-
-    // main device waits for all other devices to be finished
-    if (split && ggml_sycl_info().device_count > 1) {
-        int64_t is_max = (ne11 + MUL_MAT_SRC1_COL_STRIDE - 1) / MUL_MAT_SRC1_COL_STRIDE;
-        is_max = is_max <= GGML_SYCL_MAX_STREAMS ? is_max : GGML_SYCL_MAX_STREAMS;
-
-        ggml_sycl_set_device(ctx.device);
-        for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-            if (dev[i].row_low == dev[i].row_high) {
-                continue;
-            }
-            for (int64_t is = 0; is < is_max; ++is) {
-                SYCL_CHECK(CHECK_TRY_ERROR(
-                    ctx.stream()->ext_oneapi_submit_barrier(
-                        {*src0_extra->events[i][is]})));
-            }
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-
-static void ggml_sycl_repeat(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_repeat);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_get_rows(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_get_rows);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_add(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_add);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_acc(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_acc);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_mul(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_mul);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_div(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_div);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_gelu(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_gelu);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_silu(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_silu);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_gelu_quick(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_gelu_quick);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_tanh(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_tanh);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_relu(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_relu);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_hardsigmoid(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_hardsigmoid);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_hardswish(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_hardswish);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_leaky_relu(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_leaky_relu);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_sqr(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_sqr);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_norm(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_norm);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_group_norm(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_group_norm);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_concat(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_concat);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_upscale(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_upscale);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_pad(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_pad);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-
-static void ggml_sycl_rms_norm(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_SYCL_DEBUG("call %s\n", __func__);
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_rms_norm);
-    GGML_SYCL_DEBUG("call %s done\n", __func__);
-}
-
-static void ggml_sycl_mul_mat_vec_p021(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                       const ggml_tensor *src1,
-                                       ggml_tensor *dst) try {
-    GGML_ASSERT(ggml_is_permuted(src0) && ggml_is_permuted(src1));
-    GGML_ASSERT(src0->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
-    GGML_ASSERT(src0->nb[0] <= src0->nb[1] && src0->nb[2] <= src0->nb[3]); // 0213 permutation
-    GGML_ASSERT(src1->nb[0] <= src1->nb[1] && src1->nb[2] <= src1->nb[3]); // 0213 permutation
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-    const int64_t ne02 = src0->ne[2];
-
-    const int64_t ne12 = src1->ne[2];
-
-    SYCL_CHECK(ggml_sycl_set_device(ctx.device));
-    queue_ptr main_stream = ctx.stream();
-
-    void  * src0_ddq = src0->data;
-    float * src1_ddf = (float *) src1->data;
-    float * dst_ddf  = (float *) dst->data;
-
-    ggml_mul_mat_p021_f16_f32_sycl(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, ne02, ne12, main_stream);
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_sycl_mul_mat_vec_nc(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                     const ggml_tensor *src1,
-                                     ggml_tensor *dst) try {
-    GGML_ASSERT(!ggml_is_transposed(src0));
-    GGML_ASSERT(!ggml_is_transposed(src1));
-    GGML_ASSERT(!ggml_is_permuted(src0));
-    GGML_ASSERT(src0->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-    const int64_t ne02 = src0->ne[2];
-
-    const int64_t nb01 = src0->nb[1];
-    const int64_t nb02 = src0->nb[2];
-
-    const int64_t ne12 = src1->ne[2];
-
-    SYCL_CHECK(ggml_sycl_set_device(ctx.device));
-    queue_ptr main_stream = ctx.stream();
-
-    void  * src0_ddq = src0->data;
-    float * src1_ddf = (float *) src1->data;
-    float * dst_ddf  = (float *) dst->data;
-
-    const int64_t row_stride_x = nb01 / sizeof(sycl::half);
-    const int64_t channel_stride_x = nb02 / sizeof(sycl::half);
-
-    ggml_mul_mat_vec_nc_f16_f32_sycl(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, ne12, channel_stride_x, main_stream);
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void k_compute_batched_ptrs(const sycl::half *src0_as_f16,
-                                   const sycl::half *src1_as_f16, char *dst,
-                                   const void **ptrs_src, void **ptrs_dst,
-                                   int64_t ne12, int64_t ne13, int64_t ne23,
-                                   size_t nb02, size_t nb03, size_t nb12,
-                                   size_t nb13, size_t nbd2, size_t nbd3,
-                                   int64_t r2, int64_t r3,
-                                   const sycl::nd_item<3> &item_ct1) {
-    int64_t i13 = item_ct1.get_group(2) * item_ct1.get_local_range(2) +
-                  item_ct1.get_local_id(2);
-    int64_t i12 = item_ct1.get_group(1) * item_ct1.get_local_range(1) +
-                  item_ct1.get_local_id(1);
-
-    if (i13 >= ne13 || i12 >= ne12) {
-        return;
-    }
-
-    int64_t i03 = i13 / r3;
-    int64_t i02 = i12 / r2;
-
-    ptrs_src[0*ne23 + i12 + i13*ne12] = (const char *) src0_as_f16 + i02*nb02 + i03*nb03;
-    ptrs_src[1*ne23 + i12 + i13*ne12] = (const char *) src1_as_f16 + i12*nb12 + i13*nb13;
-    ptrs_dst[0*ne23 + i12 + i13*ne12] = (      char *)         dst + i12*nbd2 + i13*nbd3;
-}
-
-static void ggml_sycl_mul_mat_batched_sycl(ggml_backend_sycl_context & ctx,
-                                             const ggml_tensor *src0,
-                                             const ggml_tensor *src1,
-                                             ggml_tensor *dst) try {
-    GGML_ASSERT(!ggml_is_transposed(src0));
-    GGML_ASSERT(!ggml_is_transposed(src1));
-    GGML_ASSERT(src0->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int64_t ne_dst = ggml_nelements(dst);
-
-    SYCL_CHECK(ggml_sycl_set_device(ctx.device));
-    queue_ptr main_stream = ctx.stream();;
-
-    bool no_mixed_dtypes = main_stream->get_backend() == sycl::backend::ext_oneapi_cuda ||
-                           main_stream->get_backend() == sycl::backend::ext_oneapi_hip;
-
-
-    void * src0_ddq = src0->data;
-    sycl::half *src0_as_f16 = (sycl::half *)src0_ddq;
-    float * src1_ddf = (float *) src1->data;
-    float * dst_ddf = (float *) dst->data;
-
-    // convert src1 to fp16
-    ggml_sycl_pool_alloc<sycl::half> src1_f16_alloc(ctx.pool());
-    if (src1->type != GGML_TYPE_F16) {
-        const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src1->type);
-        const int64_t ne_src1 = ggml_nelements(src1);
-        src1_f16_alloc.alloc(ne_src1);
-        GGML_ASSERT(to_fp16_sycl != nullptr);
-        to_fp16_sycl(src1_ddf, src1_f16_alloc.get(), ne_src1, main_stream);
-    }
-    sycl::half *src1_f16 = src1->type == GGML_TYPE_F16 ? (sycl::half *)src1_ddf
-                                                       : src1_f16_alloc.get();
-
-    ggml_sycl_pool_alloc<sycl::half> dst_f16(ctx.pool());
-    char * dst_t;
-
-    dpct::library_data_t cu_compute_type = dpct::library_data_t::real_float;
-    dpct::library_data_t cu_data_type = dpct::library_data_t::real_float;
-    if (no_mixed_dtypes) {
-        cu_compute_type = dpct::library_data_t::real_half;
-        cu_data_type = dpct::library_data_t::real_half;
-    }
-
-    // dst strides
-    size_t nbd2 = dst->nb[2];
-    size_t nbd3 = dst->nb[3];
-
-    const float alpha_f32 = 1.0f;
-    const float beta_f32 = 0.0f;
-
-    const sycl::half alpha_f16 = 1.0f;
-    const sycl::half beta_f16 = 0.0f;
-
-    const void * alpha = &alpha_f32;
-    const void * beta  = &beta_f32;
-    if (no_mixed_dtypes) {
-        alpha = &alpha_f16;
-        beta  = &beta_f16;
-    }
-
-    // TODO: Renable (dst->op_params[0] =! GGML_PREC_DEFAULT) pathway
-    // when oneMKL open source supports half, half, float, float: datatypes
-
-    dst_t = (char *) dst_ddf;
-    if (no_mixed_dtypes) {
-        dst_t = (char *) dst_f16.alloc(ne_dst);
-
-        nbd2 /= sizeof(float) / sizeof(sycl::half);
-        nbd3 /= sizeof(float) / sizeof(sycl::half);
-    }
-
-    GGML_ASSERT(ne12 % ne02 == 0);
-    GGML_ASSERT(ne13 % ne03 == 0);
-
-    // broadcast factors
-    const int64_t r2 = ne12/ne02;
-    const int64_t r3 = ne13/ne03;
-
-    if (r2 == 1 && r3 == 1 && ggml_is_contiguous_2(src0) && ggml_is_contiguous_2(src1)) {
-        // there is no broadcast and src0, src1 are contiguous across dims 2, 3
-        SYCL_CHECK(CHECK_TRY_ERROR(dpct::gemm_batch(
-            *main_stream, oneapi::mkl::transpose::trans,
-            oneapi::mkl::transpose::nontrans, ne01, ne11, ne10, alpha,
-            (const char *)src0_as_f16, dpct::library_data_t::real_half,
-            nb01 / nb00, nb02 / nb00,
-            (const char *)src1_f16, dpct::library_data_t::real_half,
-            nb11 / nb10, nb12 / nb10, beta,
-            (char *)dst_t, cu_data_type, ne01, nb2 / nb0,
-            ne12 * ne13, cu_compute_type)));
-    } else {
-        const int ne23 = ne12*ne13;
-
-        ggml_sycl_pool_alloc<const void *> ptrs_src(ctx.pool(), 2*ne23);
-        ggml_sycl_pool_alloc<      void *> ptrs_dst(ctx.pool(), 1*ne23);
-
-        sycl::range<3> block_dims(1, ne12, ne13);
-        /*
-        DPCT1049:47: The work-group size passed to the SYCL kernel may exceed
-        the limit. To get the device limit, query
-        info::device::max_work_group_size. Adjust the work-group size if needed.
-        */
-        {
-            dpct::has_capability_or_fail(main_stream->get_device(),
-                                         {sycl::aspect::fp16});
-
-            main_stream->submit([&](sycl::handler &cgh) {
-                const void **ptrs_src_get = ptrs_src.get();
-                void **ptrs_dst_get = ptrs_dst.get();
-                size_t nb12_scaled = src1->type == GGML_TYPE_F16 ? nb12 : nb12 / 2;
-                size_t nb13_scaled = src1->type == GGML_TYPE_F16 ? nb13 : nb13 / 2;
-                cgh.parallel_for(sycl::nd_range<3>(block_dims, block_dims),
-                                 [=](sycl::nd_item<3> item_ct1) {
-                                     k_compute_batched_ptrs(
-                                         src0_as_f16, src1_f16,
-                                         dst_t, ptrs_src_get,
-                                         ptrs_dst_get, ne12, ne13, ne23,
-                                         nb02, nb03, nb12_scaled, nb13_scaled,
-                                         nbd2, nbd3, r2, r3, item_ct1);
-                                 });
-            });
-        }
-        SYCL_CHECK(CHECK_TRY_ERROR(dpct::gemm_batch(
-            *main_stream, oneapi::mkl::transpose::trans,
-            oneapi::mkl::transpose::nontrans, ne01, ne11, ne10, alpha,
-            (const void **)(ptrs_src.get() + 0 * ne23),
-            dpct::library_data_t::real_half, nb01 / nb00,
-            (const void **)(ptrs_src.get() + 1 * ne23),
-            dpct::library_data_t::real_half, nb11 / nb10, beta,
-            (void **)(ptrs_dst.get() + 0 * ne23), cu_data_type, ne01, ne23,
-            cu_compute_type)));
-    }
-
-    if (no_mixed_dtypes) {
-        const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(GGML_TYPE_F16);
-        to_fp32_sycl(dst_f16.get(), dst_ddf, ne_dst, main_stream);
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-inline bool ggml_sycl_supports_mmq(enum ggml_type type) {
-    // TODO: accuracy issues in MMQ
-    return false;
-}
-
-bool ggml_sycl_supports_dmmv(enum ggml_type type) {
-    switch (type) {
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-        case GGML_TYPE_F16:
-            return true;
-        default:
-            return false;
-    }
-}
-
-static void ggml_sycl_mul_mat(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    const bool split = ggml_backend_buffer_is_sycl_split(src0->buffer);
-
-    int64_t min_compute_capability = INT_MAX;
-
-    if (split) {
-        ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *) src0->buffer->buft->context;
-        auto & tensor_split = buft_ctx->tensor_split;
-        for (int id = 0; id < ggml_sycl_info().device_count; ++id) {
-            // skip devices that are not going to do any work:
-            if (tensor_split[id] >= (id + 1 < ggml_sycl_info().device_count ? tensor_split[id + 1] : 1.0f)) {
-                continue;
-            }
-
-            if (min_compute_capability > ggml_sycl_info().devices[id].cc) {
-                min_compute_capability = ggml_sycl_info().devices[id].cc;
-            }
-        }
-    } else {
-        min_compute_capability    = ggml_sycl_info().devices[ctx.device].cc;
-    }
-
-    // check data types and tensor shapes for custom matrix multiplication kernels:
-    bool use_dequantize_mul_mat_vec = ggml_sycl_supports_dmmv(src0->type)
-        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32
-        && src0->ne[0] % GGML_SYCL_DMMV_X == 0 && src1->ne[1] == 1;
-
-    bool use_mul_mat_vec_q =  ggml_is_quantized(src0->type)
-        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32
-        && src1->ne[1] <= MMVQ_MAX_BATCH_SIZE;
-
-    bool use_mul_mat_q =  ggml_sycl_supports_mmq(src0->type)
-        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32;
-
-    // mmvq and mmq need the __dp4a instruction which is available for gen12+
-    // Workaround in https://github.com/ggerganov/llama.cpp/commit/95f84d5ce8b449a9b16009434aca800df504a02e
-    use_mul_mat_q = use_mul_mat_q && (src0->type != GGML_TYPE_IQ2_XXS);
-#ifdef SYCL_USE_XMX
-    use_mul_mat_q = use_mul_mat_q && (src1->ne[1] <= MMQ_MAX_BATCH_SIZE);
-#endif // SYCL_USE_XMX
-
-    if (!split && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) {
-        // KQ single-batch
-        ggml_sycl_mul_mat_vec_p021(ctx, src0, src1, dst);
-    } else if (!split && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) {
-        // KQV single-batch
-        ggml_sycl_mul_mat_vec_nc(ctx, src0, src1, dst);
-    } else if (!split && src0->type == GGML_TYPE_F16 && (src1->type == GGML_TYPE_F16) && !ggml_is_transposed(src0) && !ggml_is_transposed(src1) && src1->ne[2]*src1->ne[3] > 1) {
-        // KQ + KQV multi-batch
-        ggml_sycl_mul_mat_batched_sycl(ctx, src0, src1, dst);
-    } else if (use_dequantize_mul_mat_vec) {
-        ggml_sycl_op_mul_mat(ctx, src0, src1, dst, ggml_sycl_op_dequantize_mul_mat_vec, false);
-    } else if (use_mul_mat_vec_q) {
-        ggml_sycl_op_mul_mat(ctx, src0, src1, dst, ggml_sycl_op_mul_mat_vec_q, true);
-    } else if (use_mul_mat_q) {
-        ggml_sycl_op_mul_mat(ctx, src0, src1, dst, ggml_sycl_op_mul_mat_q, true);
-    } else {
-        ggml_sycl_op_mul_mat(ctx, src0, src1, dst, ggml_sycl_op_mul_mat_sycl, false);
-    }
-}
-
-
-struct mmid_row_mapping {
-    int32_t i1;
-    int32_t i2;
-};
-
-__dpct_inline__ static void k_copy_src1_to_contiguous(
-    const char *__restrict__ src1_original, char *__restrict__ src1_contiguous,
-    int *__restrict__ cur_src1_row, mmid_row_mapping *__restrict__ row_mapping,
-    const char *__restrict ids, int64_t i02, size_t ids_nb1, size_t ids_nb0,
-    int64_t ne11, int64_t ne10, size_t nb11, size_t nb12,
-    const sycl::nd_item<3> &item_ct1, int &src1_row) {
-    int32_t iid1 = item_ct1.get_group(2);
-    int32_t id = item_ct1.get_group(1);
-
-    const int32_t row_id_i = *(const int32_t *) (ids + iid1*ids_nb1 + id*ids_nb0);
-
-    if (row_id_i != i02) {
-        return;
-    }
-
-    const int64_t i11 = id % ne11;
-    const int64_t i12 = iid1;
-
-    if (item_ct1.get_local_id(2) == 0) {
-        src1_row =
-            dpct::atomic_fetch_add<sycl::access::address_space::generic_space>(
-                cur_src1_row, 1);
-        row_mapping[src1_row] = {id, iid1};
-    }
-    /*
-    DPCT1065:194: Consider replacing sycl::nd_item::barrier() with
-    sycl::nd_item::barrier(sycl::access::fence_space::local_space) for better
-    performance if there is no access to global memory.
-    */
-    item_ct1.barrier();
-
-    const float * src1_row_original = (const float *)(src1_original + i11*nb11 + i12*nb12);
-    float * src1_row_contiguous = (float *)(src1_contiguous + src1_row*nb11);
-
-#pragma unroll
-    for (int i = item_ct1.get_local_id(2); i < ne10;
-         i += item_ct1.get_local_range(2)) {
-        src1_row_contiguous[i] = src1_row_original[i];
-    }
-}
-
-__dpct_inline__ static void k_copy_dst_from_contiguous(
-    char *__restrict__ dst_original, const char *__restrict__ dst_contiguous,
-    const mmid_row_mapping *__restrict__ row_mapping, int64_t ne0, size_t nb1,
-    size_t nb2, const sycl::nd_item<3> &item_ct1) {
-    int32_t i = item_ct1.get_group(2);
-
-    const int32_t i1 = row_mapping[i].i1;
-    const int32_t i2 = row_mapping[i].i2;
-
-    const float * dst_row_contiguous = (const float *)(dst_contiguous + i*nb1);
-    float * dst_row_original = (float *)(dst_original + i1*nb1 + i2*nb2);
-
-#pragma unroll
-    for (int j = item_ct1.get_local_id(2); j < ne0;
-         j += item_ct1.get_local_range(2)) {
-        dst_row_original[j] = dst_row_contiguous[j];
-    }
-}
-
-static void ggml_sycl_mul_mat_id(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
-                                 const ggml_tensor *src1,
-                                 ggml_tensor *dst) try {
-    GGML_ASSERT(!ggml_backend_buffer_is_sycl_split(src0->buffer) && "mul_mat_id does not support split buffers");
-
-    const ggml_tensor *ids = dst->src[2];
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const queue_ptr stream = ctx.stream();
-
-    const int64_t n_as = ne02;
-    const int64_t n_ids = ids->ne[0];
-
-    std::vector<char> ids_host(ggml_nbytes(ids));
-    const char * ids_dev = (const char *) ids->data;
-
-    SYCL_CHECK(CHECK_TRY_ERROR(
-        stream->memcpy(ids_host.data(), ids_dev, ggml_nbytes(ids))));
-    SYCL_CHECK(CHECK_TRY_ERROR(stream->wait()));
-
-    const ggml_tensor_extra_gpu *src0_extra =
-        (const ggml_tensor_extra_gpu *)src0->extra;
-    const ggml_tensor_extra_gpu *src1_extra =
-        (const ggml_tensor_extra_gpu *)src1->extra;
-    const ggml_tensor_extra_gpu *dst_extra =
-        (const ggml_tensor_extra_gpu *)dst->extra;
-
-    ggml_tensor_extra_gpu src0_row_extra;
-    ggml_tensor_extra_gpu src1_row_extra;
-    ggml_tensor_extra_gpu dst_row_extra;
-
-    ggml_tensor src0_row = *src0;
-    ggml_tensor src1_row = *src1;
-    ggml_tensor dst_row = *dst;
-
-    src1_row.backend = GGML_BACKEND_TYPE_GPU;
-    dst_row.backend  = GGML_BACKEND_TYPE_GPU;
-
-    src0_row.extra = &src0_row_extra;
-    src1_row.extra = &src1_row_extra;
-    dst_row.extra = &dst_row_extra;
-
-    char *src0_original = src1->backend == GGML_BACKEND_TYPE_CPU
-                              ? (char *)src0->data
-                              : (char *)src0_extra->data_device[ctx.device];
-    char *src1_original = src1->backend == GGML_BACKEND_TYPE_CPU
-                              ? (char *)src1->data
-                              : (char *)src1_extra->data_device[ctx.device];
-    char *dst_original = dst->backend == GGML_BACKEND_TYPE_CPU
-                             ? (char *)dst->data
-                             : (char *)dst_extra->data_device[ctx.device];
-
-    src0_row.ne[2] = 1;
-    src0_row.ne[3] = 1;
-    src0_row.nb[3] = nb02;
-
-    src1_row.ne[1] = 1;
-    src1_row.ne[2] = 1;
-    src1_row.ne[3] = 1;
-    src1_row.nb[2] = nb11;
-    src1_row.nb[3] = nb11;
-
-    dst_row.ne[1] = 1;
-    dst_row.ne[2] = 1;
-    dst_row.ne[3] = 1;
-    dst_row.nb[2] = nb1;
-    dst_row.nb[3] = nb1;
-    if (ne12 == 1) {
-        for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) {
-            for (int64_t id = 0; id < n_ids; id++) {
-                const int32_t i02 = *(const int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]);
-                GGML_ASSERT(i02 >= 0 && i02 < n_as);
-
-                const int64_t i11 = id % ne11;
-                const int64_t i12 = iid1;
-
-                const int64_t i1 = id;
-                const int64_t i2 = i12;
-
-            src0_row_extra.data_device[ctx.device] =
-                src0_original + i02*nb02;
-            src1_row_extra.data_device[ctx.device] =
-                src1_original + + i11*nb11 + i12*nb12;
-            dst_row_extra.data_device[ctx.device] =
-                dst_original + i1*nb1   + i2*nb2;
-
-            ggml_sycl_mul_mat(ctx, &src0_row, &src1_row, &dst_row);
-            }
-        }
-    } else {
-        ggml_sycl_pool_alloc<char> src1_contiguous(ctx.pool(), sizeof(float)*ggml_nelements(src1));
-        ggml_sycl_pool_alloc<char>  dst_contiguous(ctx.pool(), sizeof(float)*ggml_nelements(dst));
-
-        src1_row_extra.data_device[ctx.device] = src1_contiguous.get();
-        dst_row_extra.data_device[ctx.device]  =  dst_contiguous.get();
-
-        for (int64_t i02 = 0; i02 < n_as; i02++) {
-            int64_t num_src1_rows = 0;
-            for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) {
-                for (int64_t id = 0; id < n_ids; id++) {
-                    const int32_t row_id_i = *(const int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]);
-
-                    GGML_ASSERT(row_id_i >= 0 && row_id_i < n_as);
-
-                    if (row_id_i != i02) {
-                        continue;
-                    }
-
-                    num_src1_rows++;
-                }
-            }
-
-            if (num_src1_rows == 0) {
-                continue;
-            }
-
-
-            ggml_sycl_pool_alloc<int> dev_cur_src1_row(ctx.pool(), 1);
-            ggml_sycl_pool_alloc<mmid_row_mapping> dev_row_mapping(ctx.pool(), num_src1_rows);
-            SYCL_CHECK(CHECK_TRY_ERROR(
-                stream->memset(dev_cur_src1_row.get(), 0, sizeof(int))));
-
-            {
-                sycl::range<3> block_dims(1, 1, std::min((unsigned int)ne10, 768u));
-                sycl::range<3> grid_dims(1, n_ids, ids->ne[1]);
-                stream->submit([&](sycl::handler &cgh) {
-                    sycl::local_accessor<int, 0> src1_row_acc(cgh);
-
-                    char *__restrict src1_contiguous_get =
-                        src1_contiguous.get();
-                    int *__restrict dev_cur_src1_row_get =
-                        dev_cur_src1_row.get();
-                    mmid_row_mapping *__restrict dev_row_mapping_get =
-                        dev_row_mapping.get();
-                    size_t ids_nb_ct6 = ids->nb[1];
-                    size_t ids_nb_ct7 = ids->nb[0];
-
-                    cgh.parallel_for(
-                        sycl::nd_range<3>(grid_dims * block_dims, block_dims),
-                        [=](sycl::nd_item<3> item_ct1) {
-                            k_copy_src1_to_contiguous(
-                                src1_original, src1_contiguous_get,
-                                dev_cur_src1_row_get,
-                                dev_row_mapping_get, ids_dev, i02,
-                                ids_nb_ct6, ids_nb_ct7, ne11, ne10, nb11, nb12,
-                                item_ct1, src1_row_acc);
-                        });
-                });
-            }
-
-            src0_row_extra.data_device[ctx.device] = src0_original + i02*nb02;
-
-            GGML_ASSERT(nb11 == sizeof(float)*ne10);
-            GGML_ASSERT(nb1 == sizeof(float)*ne0);
-            src1_row.ne[1] = num_src1_rows;
-
-            src1_row.nb[1] = nb11;
-            src1_row.nb[2] = num_src1_rows*nb11;
-            src1_row.nb[3] = num_src1_rows*nb11;
-
-            dst_row.ne[1] = num_src1_rows;
-            dst_row.nb[1] = nb1;
-            dst_row.nb[2] = num_src1_rows*nb1;
-            dst_row.nb[3] = num_src1_rows*nb1;
-
-            ggml_sycl_mul_mat(ctx, &src0_row, &src1_row, &dst_row);
-
-            {
-                sycl::range<3> block_dims(1, 1, std::min((unsigned int)ne0, 768u));
-                sycl::range<3> grid_dims(1, 1, num_src1_rows);
-                stream->submit([&](sycl::handler &cgh) {
-                    const char *__restrict dst_contiguous_get =
-                        dst_contiguous.get();
-                    const mmid_row_mapping *__restrict dev_row_mapping_get =
-                        dev_row_mapping.get();
-
-                    cgh.parallel_for(
-                        sycl::nd_range<3>(grid_dims * block_dims, block_dims),
-                        [=](sycl::nd_item<3> item_ct1) {
-                            k_copy_dst_from_contiguous(dst_original,
-                                                       dst_contiguous_get,
-                                                       dev_row_mapping_get,
-                                                       ne0, nb1, nb2, item_ct1);
-                        });
-                });
-            }
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_sycl_scale(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_scale);
-}
-
-static void ggml_sycl_clamp(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_clamp);
-}
-
-static void ggml_sycl_cpy(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
-                          ggml_tensor *dst) try {
-    const int64_t ne = ggml_nelements(src0);
-    GGML_ASSERT(ne == ggml_nelements(src1));
-
-    GGML_ASSERT(ggml_nbytes(src0) <= INT_MAX);
-    GGML_ASSERT(ggml_nbytes(src1) <= INT_MAX);
-
-    GGML_TENSOR_BINARY_OP_LOCALS;
-
-    SYCL_CHECK(ggml_sycl_set_device(ctx.device));
-    queue_ptr main_stream = ctx.stream();
-
-    char * src0_ddc = (char *) src0->data;
-    char * src1_ddc = (char *) src1->data;
-
-    if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32) {
-        ggml_cpy_f32_f32_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F16) {
-        ggml_cpy_f32_f16_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q8_0) {
-        ggml_cpy_f32_q8_0_sycl(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_0) {
-        ggml_cpy_f32_q4_0_sycl(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_1) {
-        ggml_cpy_f32_q4_1_sycl(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32) {
-        ggml_cpy_f16_f32_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16) {
-        ggml_cpy_f16_f16_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_I16 && src1->type == GGML_TYPE_I16) {
-        ggml_cpy_i16_i16_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else if (src0->type == GGML_TYPE_I32 && src1->type == GGML_TYPE_I32) {
-        ggml_cpy_i32_i32_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
-    } else {
-        fprintf(stderr, "%s: unsupported type combination (%s to %s)\n", __func__,
-                ggml_type_name(src0->type), ggml_type_name(src1->type));
-        GGML_ASSERT(false);
-    }
-
-    (void) dst;
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_sycl_dup(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    // TODO: why do we pass dst as src1 here?
-    ggml_sycl_cpy(ctx, src0, dst, nullptr);
-    (void) src1;
-}
-
-static void ggml_sycl_diag_mask_inf(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_diag_mask_inf);
-}
-
-static void ggml_sycl_soft_max(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_soft_max);
-}
-
-static void ggml_sycl_rope(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_ASSERT(ggml_is_contiguous(src0)); // TODO: this restriction is temporary until non-cont support is implemented
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_rope);
-}
-
-static void ggml_sycl_pool2d(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_pool2d);
-}
-
-static void ggml_sycl_im2col(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_im2col);
-}
-
-static void ggml_sycl_sum_rows(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_ASSERT(ggml_is_contiguous(src0));
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_sum_rows);
-}
-
-static void ggml_sycl_argsort(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    GGML_ASSERT(ggml_is_contiguous(src0));
-    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_argsort);
-}
-
-static void ggml_sycl_nop(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    (void) src0;
-    (void) src1;
-    (void) dst;
-}
-
-static size_t ggml_nbytes_split(const struct ggml_tensor * tensor, int nrows_split) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return nrows_split*ggml_row_size(tensor->type, tensor->ne[0]);
-}
-
-void ggml_sycl_set_main_device(const int main_device) try {
-    if (dpct::get_current_device_id() == main_device) return;
-    check_allow_gpu_index(main_device);
-    dpct::select_device(main_device);
-
-    if (g_ggml_sycl_debug) {
-        dpct::device_info prop;
-        SYCL_CHECK(CHECK_TRY_ERROR(dpct::get_device_info(
-            prop, dpct::dev_mgr::instance().get_device(main_device))));
-        fprintf(stderr, "Using device %d (%s) as main device\n",
-                main_device, prop.get_name());
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-bool ggml_sycl_compute_forward(ggml_backend_sycl_context & ctx, struct ggml_tensor * tensor) {
-    if (!g_sycl_loaded) return false;
-
-    ggml_sycl_func_t func;
-
-    switch (tensor->op) {
-        case GGML_OP_REPEAT:
-            func = ggml_sycl_repeat;
-            break;
-        case GGML_OP_GET_ROWS:
-            func = ggml_sycl_get_rows;
-            break;
-        case GGML_OP_DUP:
-            func = ggml_sycl_dup;
-            break;
-        case GGML_OP_ADD:
-            func = ggml_sycl_add;
-            break;
-        case GGML_OP_ACC:
-            func = ggml_sycl_acc;
-            break;
-        case GGML_OP_MUL:
-            func = ggml_sycl_mul;
-            break;
-        case GGML_OP_DIV:
-            func = ggml_sycl_div;
-            break;
-        case GGML_OP_UNARY:
-            switch (ggml_get_unary_op(tensor)) {
-                case GGML_UNARY_OP_GELU:
-                    func = ggml_sycl_gelu;
-                    break;
-                case GGML_UNARY_OP_SILU:
-                    func = ggml_sycl_silu;
-                    break;
-                case GGML_UNARY_OP_GELU_QUICK:
-                    func = ggml_sycl_gelu_quick;
-                    break;
-                case GGML_UNARY_OP_TANH:
-                    func = ggml_sycl_tanh;
-                    break;
-                case GGML_UNARY_OP_RELU:
-                    func = ggml_sycl_relu;
-                    break;
-                case GGML_UNARY_OP_HARDSIGMOID:
-                    func = ggml_sycl_hardsigmoid;
-                    break;
-                case GGML_UNARY_OP_HARDSWISH:
-                    func = ggml_sycl_hardswish;
-                    break;
-                default:
-                    return false;
-            }
-            break;
-        case GGML_OP_NORM:
-            func = ggml_sycl_norm;
-            break;
-        case GGML_OP_GROUP_NORM:
-            func = ggml_sycl_group_norm;
-            break;
-        case GGML_OP_CONCAT:
-            func = ggml_sycl_concat;
-            break;
-        case GGML_OP_UPSCALE:
-            func = ggml_sycl_upscale;
-            break;
-        case GGML_OP_PAD:
-            func = ggml_sycl_pad;
-            break;
-        case GGML_OP_LEAKY_RELU:
-            func = ggml_sycl_leaky_relu;
-            break;
-        case GGML_OP_RMS_NORM:
-            func = ggml_sycl_rms_norm;
-            break;
-        case GGML_OP_MUL_MAT:
-            if (tensor->src[0]->ne[3] != tensor->src[1]->ne[3]) {
-                return false;
-            }
-            func = ggml_sycl_mul_mat;
-            break;
-        case GGML_OP_MUL_MAT_ID:
-            if (tensor->src[0]->ne[3] != tensor->src[1]->ne[3]) {
-                return false;
-            }
-            func = ggml_sycl_mul_mat_id;
-            break;
-        case GGML_OP_SCALE:
-            func = ggml_sycl_scale;
-            break;
-        case GGML_OP_SQR:
-            func = ggml_sycl_sqr;
-            break;
-        case GGML_OP_CLAMP:
-            func = ggml_sycl_clamp;
-            break;
-        case GGML_OP_CPY:
-            func = ggml_sycl_cpy;
-            break;
-        case GGML_OP_CONT:
-            func = ggml_sycl_dup;
-            break;
-        case GGML_OP_NONE:
-        case GGML_OP_RESHAPE:
-        case GGML_OP_VIEW:
-        case GGML_OP_PERMUTE:
-        case GGML_OP_TRANSPOSE:
-            func = ggml_sycl_nop;
-            break;
-        case GGML_OP_DIAG_MASK_INF:
-            func = ggml_sycl_diag_mask_inf;
-            break;
-        case GGML_OP_SOFT_MAX:
-            func = ggml_sycl_soft_max;
-            break;
-        case GGML_OP_ROPE:
-            func = ggml_sycl_rope;
-            break;
-        case GGML_OP_IM2COL:
-            func = ggml_sycl_im2col;
-            break;
-        case GGML_OP_POOL_2D:
-            func = ggml_sycl_pool2d;
-            break;
-        case GGML_OP_SUM_ROWS:
-            func = ggml_sycl_sum_rows;
-            break;
-        case GGML_OP_ARGSORT:
-            func = ggml_sycl_argsort;
-            break;
-        default:
-            return false;
-    }
-
-    if (tensor->src[0] != nullptr && ggml_backend_buffer_is_sycl_split(tensor->src[0]->buffer)) {
-        ggml_sycl_set_peer_access(tensor->src[1]->ne[1], ctx.device);
-    }
-
-    func(ctx, tensor->src[0], tensor->src[1], tensor);
-    return true;
-}
-
-GGML_API GGML_CALL void   ggml_sycl_get_gpu_list(int *id_list, int max_len) try {
-    GGML_SYCL_DEBUG("[SYCL] call ggml_sycl_get_gpu_list\n");
-    for(int i=0;i<max_len;i++) id_list[i] = -1;
-
-    for (int i=0;i< ggml_sycl_info().device_count;i++){
-        if (i>=max_len) break;
-        id_list[i] = i;
-    }
-    return;
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-int ggml_sycl_get_device_count() try {
-    int device_count;
-    if (CHECK_TRY_ERROR(device_count =
-                             dpct::dev_mgr::instance().device_count()) != 0) {
-        return 0;
-    }
-    return device_count;
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-GGML_API GGML_CALL void ggml_sycl_get_device_description(int device, char *description,
-                                      size_t description_size) try {
-    GGML_SYCL_DEBUG("[SYCL] call ggml_sycl_get_device_description\n");
-    dpct::device_info prop;
-    SYCL_CHECK(CHECK_TRY_ERROR(dpct::get_device_info(
-        prop, dpct::dev_mgr::instance().get_device(device))));
-    snprintf(description, description_size, "%s", prop.get_name());
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-GGML_CALL void ggml_backend_sycl_get_device_memory(int device, size_t *free,
-                                                   size_t *total) try {
-    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_get_device_memory\n");
-    ggml_sycl_set_device(device);
-
-    /*
-    DPCT1009:218: SYCL uses exceptions to report errors and does not use the
-    error codes. The original code was commented out and a warning string was
-    inserted. You need to rewrite this code.
-    */
-    /*
-    DPCT1106:217: 'cudaMemGetInfo' was migrated with the Intel extensions for
-    device information which may not be supported by all compilers or runtimes.
-    You may need to adjust the code.
-    */
-    SYCL_CHECK(CHECK_TRY_ERROR(
-        dpct::dev_mgr::instance().get_device(device).get_memory_info(*free, *total)));
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-// backend interface
-
-#define UNUSED GGML_UNUSED
-
-// sycl buffer
-
-struct ggml_backend_sycl_buffer_context {
-    int device;
-    void * dev_ptr = nullptr;
-    queue_ptr stream;
-    std::string name;
-
-     ggml_backend_sycl_buffer_context(int device, void * dev_ptr, queue_ptr stream) :
-        device(device), dev_ptr(dev_ptr), stream(stream) {
-            check_allow_gpu_index(device);
-            name = (GGML_SYCL_NAME + std::to_string(device));
-        }
-
-
-    ~ggml_backend_sycl_buffer_context() {
-        if (dev_ptr != nullptr) {
-            ggml_sycl_set_device(device);
-            SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(dev_ptr, *stream)));
-        }
-    }
-};
-
-GGML_CALL static const char * ggml_backend_sycl_buffer_get_name(ggml_backend_buffer_t buffer) {
-    ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *)buffer->context;
-    return ctx->name.c_str();
-}
-
-GGML_CALL static bool ggml_backend_buffer_is_sycl(ggml_backend_buffer_t buffer) {
-    return buffer->iface.get_name == ggml_backend_sycl_buffer_get_name;
-}
-
-static void
-ggml_backend_sycl_buffer_free_buffer(ggml_backend_buffer_t buffer) try {
-    ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
-    ggml_sycl_set_device(ctx->device);
-
-    delete ctx;
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void * ggml_backend_sycl_buffer_get_base(ggml_backend_buffer_t buffer) {
-    ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
-    return ctx->dev_ptr;
-}
-
-GGML_CALL static void
-ggml_backend_sycl_buffer_init_tensor(ggml_backend_buffer_t buffer,
-                                     ggml_tensor *tensor) try {
-    ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *)buffer->context;
-
-    if (tensor->view_src != NULL && tensor->view_offs == 0) {
-        assert(tensor->view_src->buffer->buft == buffer->buft);
-        tensor->backend = tensor->view_src->backend;
-        tensor->extra = tensor->view_src->extra;
-        return;
-    }
-
-
-    if (ggml_is_quantized(tensor->type)) {
-        // initialize padding to 0 to avoid possible NaN values
-        size_t original_size = ggml_nbytes(tensor);
-        size_t padded_size = ggml_backend_buft_get_alloc_size(buffer->buft, tensor);
-
-        if (padded_size > original_size && tensor->view_src == nullptr) {
-            SYCL_CHECK(CHECK_TRY_ERROR(ctx->stream->memset(
-                (char *)tensor->data + original_size, 0,
-                padded_size - original_size).wait()));
-        }
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_backend_sycl_buffer_set_tensor(ggml_backend_buffer_t buffer,
-                                                ggml_tensor *tensor,
-                                                const void *data, size_t offset,
-                                                size_t size) try {
-
-    ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
-
-    ggml_sycl_set_device(ctx->device);
-    auto stream = &(dpct::dev_mgr::instance().get_device(ctx->device).default_queue());
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(dpct::dev_mgr::instance().get_device(ctx->device).queues_wait_and_throw()));
-    char* host_buf = (char*)malloc(size);
-    memcpy(host_buf, data, size);
-    SYCL_CHECK(
-        CHECK_TRY_ERROR((*stream).memcpy((char *)tensor->data + offset, host_buf, size)
-                             .wait()));
-    free(host_buf);
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_backend_sycl_buffer_get_tensor(ggml_backend_buffer_t buffer,
-                                                const ggml_tensor *tensor,
-                                                void *data, size_t offset,
-                                                size_t size) try {
-
-    ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
-
-    ggml_sycl_set_device(ctx->device);
-    auto stream = dpct::dev_mgr::instance().get_device(ctx->device).default_queue();
-
-    SYCL_CHECK(CHECK_TRY_ERROR(
-        stream.memcpy(data, (const char *)tensor->data + offset, size)
-            .wait()));
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-GGML_CALL static bool
-ggml_backend_sycl_buffer_cpy_tensor(ggml_backend_buffer_t buffer,
-                                    const ggml_tensor *src,
-                                    ggml_tensor *dst) try {
-    if (ggml_backend_buffer_is_sycl(src->buffer)) {
-        ggml_backend_sycl_buffer_context * src_ctx = (ggml_backend_sycl_buffer_context *)src->buffer->context;
-        ggml_backend_sycl_buffer_context * dst_ctx = (ggml_backend_sycl_buffer_context *)dst->buffer->context;
-
-        ggml_sycl_set_device(src_ctx->device);
-        /*
-        DPCT1009:198: SYCL uses exceptions to report errors and does not use the
-        error codes. The original code was commented out and a warning string
-        was inserted. You need to rewrite this code.
-        */
-        SYCL_CHECK(CHECK_TRY_ERROR(
-            dpct::dev_mgr::instance().get_device(src_ctx->device).queues_wait_and_throw()));
-        ggml_sycl_set_device(dst_ctx->device);
-        /*
-        DPCT1009:199: SYCL uses exceptions to report errors and does not use the
-        error codes. The original code was commented out and a warning string
-        was inserted. You need to rewrite this code.
-        */
-        SYCL_CHECK(CHECK_TRY_ERROR(
-            dpct::dev_mgr::instance().get_device(dst_ctx->device).queues_wait_and_throw()));
-        /*
-        DPCT1009:200: SYCL uses exceptions to report errors and does not use the
-        error codes. The original code was commented out and a warning string
-        was inserted. You need to rewrite this code.
-        */
-
-        queue_ptr stream_dst = dst_ctx->stream;
-        queue_ptr stream_src = src_ctx->stream;
-        size_t size = ggml_nbytes(src);
-
-        //todo. it's dirty solutino to walkaroud known issue:device2device cross GPUs.
-        dev2dev_memcpy(*stream_dst, *stream_src, dst->data, src->data, size);
-
-//todo, it's known issue:error in device2device cross GPUs. reused when the issue is fixed. DON"T remove
-#if 0
-        SYCL_CHECK(CHECK_TRY_ERROR((*stream).memcpy(
-            (char *)dst->data, (const char *)src->data, size).wait()));
-
-        /*
-        DPCT1009:201: SYCL uses exceptions to report errors and does not use the
-        error codes. The original code was commented out and a warning string
-        was inserted. You need to rewrite this code.
-        */
-        SYCL_CHECK(CHECK_TRY_ERROR(
-            dpct::dev_mgr::instance().get_device(dst_ctx->device).queues_wait_and_throw()));
-#endif
-        return true;
-    }
-    return false;
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-
-static void ggml_backend_sycl_buffer_clear(ggml_backend_buffer_t buffer,
-                                           uint8_t value) try {
-     ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
-
-    ggml_sycl_set_device(ctx->device);
-    queue_ptr stream = ctx->stream;
-    SYCL_CHECK(
-        CHECK_TRY_ERROR(dpct::get_current_device().queues_wait_and_throw()));
-
-    SYCL_CHECK(CHECK_TRY_ERROR((*stream)
-                                    .memset(ctx->dev_ptr, value, buffer->size)
-                                    .wait()));
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static struct ggml_backend_buffer_i ggml_backend_sycl_buffer_interface = {
-    /* .get_name        = */ ggml_backend_sycl_buffer_get_name,
-    /* .free_buffer     = */ ggml_backend_sycl_buffer_free_buffer,
-    /* .get_base        = */ ggml_backend_sycl_buffer_get_base,
-    /* .init_tensor     = */ ggml_backend_sycl_buffer_init_tensor,
-    /* .set_tensor      = */ ggml_backend_sycl_buffer_set_tensor,
-    /* .get_tensor      = */ ggml_backend_sycl_buffer_get_tensor,
-    /* .cpy_tensor      = */ ggml_backend_sycl_buffer_cpy_tensor,
-    /* .clear           = */ ggml_backend_sycl_buffer_clear,
-    /* .reset           = */ NULL,
-};
-
-// sycl buffer type
-struct ggml_backend_sycl_buffer_type_context {
-    int device;
-    std::string name;
-
-    // each buffer type has its own stream
-    queue_ptr stream = nullptr;
-};
-
-GGML_CALL static const char * ggml_backend_sycl_buffer_type_name(ggml_backend_buffer_type_t buft) {
-    ggml_backend_sycl_buffer_type_context * ctx = (ggml_backend_sycl_buffer_type_context *)buft->context;
-
-    return ctx->name.c_str();
-}
-GGML_CALL static ggml_backend_buffer_t
-ggml_backend_sycl_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft,
-                                           size_t size) try {
-    ggml_backend_sycl_buffer_type_context * buft_ctx = (ggml_backend_sycl_buffer_type_context *)buft->context;
-    ggml_sycl_set_device(buft_ctx->device);
-    const queue_ptr stream = buft_ctx->stream;
-    size = std::max(size, (size_t)1); // syclMalloc returns null for size 0
-
-    void * dev_ptr;
-    SYCL_CHECK(CHECK_TRY_ERROR(dev_ptr = (void *)sycl::malloc_device(
-                                    size, *stream)));
-    ggml_backend_sycl_buffer_context * ctx = new  ggml_backend_sycl_buffer_context(buft_ctx->device, dev_ptr, buft_ctx->stream);
-    return ggml_backend_buffer_init(buft, ggml_backend_sycl_buffer_interface, ctx, size);
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-GGML_CALL static size_t ggml_backend_sycl_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
-    return 128;
-    UNUSED(buft);
-}
-
-static size_t ggml_backend_sycl_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) {
-    return dpct::get_current_device().get_max_mem_alloc_size();
-
-    UNUSED(buft);
-}
-
-GGML_CALL static size_t ggml_backend_sycl_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
-    size_t size = ggml_nbytes(tensor);
-    int64_t ne0 = tensor->ne[0];
-
-    if (ggml_is_quantized(tensor->type)) {
-        if (ne0 % MATRIX_ROW_PADDING != 0) {
-            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
-        }
-    }
-
-    return size;
-
-    UNUSED(buft);
-}
-
-static ggml_backend_buffer_type_i ggml_backend_sycl_buffer_type_interface = {
-    /* .get_name         = */ ggml_backend_sycl_buffer_type_name,
-    /* .alloc_buffer     = */ ggml_backend_sycl_buffer_type_alloc_buffer,
-    /* .get_alignment    = */ ggml_backend_sycl_buffer_type_get_alignment,
-    /* .get_max_size     = */ ggml_backend_sycl_buffer_type_get_max_size,
-    /* .get_alloc_size   = */ ggml_backend_sycl_buffer_type_get_alloc_size,
-    /* .is_host          = */ nullptr,
-};
-
-ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(int device) {
-    static std::mutex mutex;
-    std::lock_guard<std::mutex> lock(mutex);
-
-    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_buffer_type\n");
-
-    if (device>=ggml_sycl_info().device_count or device<0) {
-        printf("ggml_backend_sycl_buffer_type error: device_index:%d is out of range [0, %d], miss to call ggml_backend_sycl_set_single_device()\n",
-            device, ggml_sycl_info().device_count-1);
-        GGML_ASSERT(device<ggml_sycl_info().device_count);
-    }
-    static struct ggml_backend_buffer_type ggml_backend_sycl_buffer_types[GGML_SYCL_MAX_DEVICES];
-
-    static bool ggml_backend_sycl_buffer_type_initialized = false;
-
-    if (!ggml_backend_sycl_buffer_type_initialized) {
-        for (int i = 0; i < ggml_sycl_info().device_count; i++) {
-            auto & device_i = dpct::dev_mgr::instance().get_device(i);
-            queue_ptr stream = &(device_i.default_queue());
-            ggml_backend_sycl_buffer_types[i] = {
-                /* .iface    = */ ggml_backend_sycl_buffer_type_interface,
-                /* .context  = */ new ggml_backend_sycl_buffer_type_context{i, GGML_SYCL_NAME + std::to_string(i), stream},
-            };
-        }
-        ggml_backend_sycl_buffer_type_initialized = true;
-    }
-    return &ggml_backend_sycl_buffer_types[device];
-}
-
-ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(ggml_backend_sycl_context * ctx) {
-    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_buffer_type\n");
-
-    int device = ctx->device;
-    if (device>=ggml_sycl_info().device_count or device<0) {
-        printf("ggml_backend_sycl_buffer_type error: device_index:%d is out of range [0, %d], miss to call ggml_backend_sycl_set_single_device()\n",
-            device, ggml_sycl_info().device_count-1);
-        GGML_ASSERT(device<ggml_sycl_info().device_count);
-    }
-    static struct ggml_backend_buffer_type ggml_backend_sycl_buffer_types[GGML_SYCL_MAX_DEVICES];
-
-    static bool ggml_backend_sycl_buffer_type_initialized = false;
-
-    if (!ggml_backend_sycl_buffer_type_initialized) {
-        for (int i = 0; i < ggml_sycl_info().device_count; i++) {
-            ggml_backend_sycl_buffer_types[i] = {
-                /* .iface    = */ ggml_backend_sycl_buffer_type_interface,
-                /* .context  = */ new ggml_backend_sycl_buffer_type_context{i, GGML_SYCL_NAME + std::to_string(i), ctx->stream(i, 0)},
-            };
-        }
-        ggml_backend_sycl_buffer_type_initialized = true;
-    }
-    return &ggml_backend_sycl_buffer_types[device];
-}
-
-// sycl split buffer type
-static void get_row_split(int64_t * row_low, int64_t * row_high, const ggml_tensor * tensor, const std::array<float, GGML_SYCL_MAX_DEVICES> & tensor_split, int id) {
-    const int64_t nrows = ggml_nrows(tensor);
-    const int64_t rounding = get_row_rounding(tensor->type, tensor_split);
-
-    *row_low = id == 0 ? 0 : nrows*tensor_split[id];
-    *row_low -= *row_low % rounding;
-    if (id == ggml_sycl_info().device_count - 1) {
-        *row_high = nrows;
-    } else {
-        *row_high = nrows*tensor_split[id + 1];
-        *row_high -= *row_high % rounding;
-    }
-}
-
-struct ggml_backend_sycl_split_buffer_context {
-    ~ggml_backend_sycl_split_buffer_context() try {
-        for (ggml_tensor_extra_gpu * extra : tensor_extras) {
-            for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-                for (int64_t is = 0; is < GGML_SYCL_MAX_STREAMS; ++is) {
-                    if (extra->events[i][is] != nullptr) {
-                        /*
-                        DPCT1009:206: SYCL uses exceptions to report errors and
-                        does not use the error codes. The original code was
-                        commented out and a warning string was inserted. You
-                        need to rewrite this code.
-                        */
-                        SYCL_CHECK(CHECK_TRY_ERROR(
-                            dpct::destroy_event(extra->events[i][is])));
-                    }
-                }
-                if (extra->data_device[i] != nullptr) {
-                    /*
-                    DPCT1009:207: SYCL uses exceptions to report errors and does
-                    not use the error codes. The original code was commented out
-                    and a warning string was inserted. You need to rewrite this
-                    code.
-                    */
-                    ggml_sycl_set_device(i);
-                    SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(
-                        extra->data_device[i], *(streams[i]))));
-                }
-            }
-            delete extra;
-        }
-    }
-    catch (sycl::exception const &exc) {
-      std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-                << ", line:" << __LINE__ << std::endl;
-      std::exit(1);
-    }
-
-    std::vector<ggml_tensor_extra_gpu *> tensor_extras;
-    std::vector<queue_ptr> streams;
-};
-
-GGML_CALL static const char * ggml_backend_sycl_split_buffer_get_name(ggml_backend_buffer_t buffer) {
-    return GGML_SYCL_NAME "_Split";
-
-    UNUSED(buffer);
-}
-
-static bool ggml_backend_buffer_is_sycl_split(ggml_backend_buffer_t buffer) {
-   return buffer->iface.get_name == ggml_backend_sycl_split_buffer_get_name;
-}
-
-GGML_CALL static void ggml_backend_sycl_split_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context;
-    delete ctx;
-}
-
-GGML_CALL static void * ggml_backend_sycl_split_buffer_get_base(ggml_backend_buffer_t buffer) {
-    // the pointers are stored in the tensor extras, this is just a dummy address and never dereferenced
-    return (void *)0x1000;
-
-    UNUSED(buffer);
-}
-
-GGML_CALL static void
-ggml_backend_sycl_split_buffer_init_tensor(ggml_backend_buffer_t buffer,
-                                           ggml_tensor *tensor) try {
-    GGML_ASSERT(tensor->view_src == nullptr); // views of split tensors are not supported
-
-    ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context;
-    ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *)buffer->buft->context;
-
-    const int64_t ne0 = tensor->ne[0];
-
-    ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu{};
-
-    ctx->tensor_extras.push_back(extra);
-        ctx->streams.push_back(&(dpct::get_current_device().default_queue()));
-
-    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-        int64_t row_low, row_high;
-        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, i);
-
-        int64_t nrows_split = row_high - row_low;
-        if (nrows_split == 0) {
-            continue;
-        }
-
-        size_t size = ggml_nbytes_split(tensor, nrows_split);
-        const size_t original_size = size;
-
-        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
-        if (ne0 % MATRIX_ROW_PADDING != 0) {
-            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
-        }
-
-        // FIXME: do not crash if cudaMalloc fails
-        // currently, init_tensor cannot fail, it needs to be fixed in ggml-backend first
-        ggml_sycl_set_device(i);
-        const queue_ptr stream = ctx->streams[i];
-        char * buf;
-        /*
-        DPCT1009:208: SYCL uses exceptions to report errors and does not use the
-        error codes. The original code was commented out and a warning string
-        was inserted. You need to rewrite this code.
-        */
-        SYCL_CHECK(CHECK_TRY_ERROR(buf = (char *)sycl::malloc_device(
-                                        size, *stream)));
-
-        // set padding to 0 to avoid possible NaN values
-        if (size > original_size) {
-            /*
-            DPCT1009:209: SYCL uses exceptions to report errors and does not use
-            the error codes. The original code was commented out and a warning
-            string was inserted. You need to rewrite this code.
-            */
-            SYCL_CHECK(CHECK_TRY_ERROR(
-                (*stream)
-                    .memset(buf + original_size, 0, size - original_size)
-                    .wait()));
-        }
-
-        extra->data_device[i] = buf;
-
-        for (int64_t is = 0; is < GGML_SYCL_MAX_STREAMS; ++is) {
-            /*
-            DPCT1009:210: SYCL uses exceptions to report errors and does not use
-            the error codes. The original code was commented out and a warning
-            string was inserted. You need to rewrite this code.
-            */
-            SYCL_CHECK(
-                CHECK_TRY_ERROR(extra->events[i][is] = new sycl::event()));
-        }
-    }
-    tensor->backend = GGML_BACKEND_TYPE_GPU_SPLIT;
-    tensor->extra = extra;
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-GGML_CALL static void
-ggml_backend_sycl_split_buffer_set_tensor(ggml_backend_buffer_t buffer,
-                                          ggml_tensor *tensor, const void *data,
-                                          size_t offset, size_t size) try {
-    // split tensors must always be set in their entirety at once
-    GGML_ASSERT(offset == 0);
-    GGML_ASSERT(size == ggml_nbytes(tensor));
-
-    ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context;
-    ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *)buffer->buft->context;
-
-    const int64_t ne0 = tensor->ne[0];
-    const size_t nb1 = tensor->nb[1];
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra;
-
-    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-        int64_t row_low, row_high;
-        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, i);
-
-        int64_t nrows_split = row_high - row_low;
-        if (nrows_split == 0) {
-            continue;
-        }
-
-        const size_t offset_split = row_low*nb1;
-        size_t size = ggml_nbytes_split(tensor, nrows_split);
-        const size_t original_size = size;
-
-        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
-        if (ne0 % MATRIX_ROW_PADDING != 0) {
-            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
-        }
-
-        const char * buf_host = (const char *)data + offset_split;
-        /*
-        DPCT1009:211: SYCL uses exceptions to report errors and does not use the
-        error codes. The original code was commented out and a warning string
-        was inserted. You need to rewrite this code.
-        */
-        ggml_sycl_set_device(i);
-        const queue_ptr stream = ctx->streams[i];
-        SYCL_CHECK(CHECK_TRY_ERROR(
-            (*stream)
-                .memcpy(extra->data_device[i], buf_host, original_size)
-                .wait()));
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-GGML_CALL static void
-ggml_backend_sycl_split_buffer_get_tensor(ggml_backend_buffer_t buffer,
-                                          const ggml_tensor *tensor, void *data,
-                                          size_t offset, size_t size) try {
-    // split tensors must always be set in their entirety at once
-    GGML_ASSERT(offset == 0);
-    GGML_ASSERT(size == ggml_nbytes(tensor));
-
-    ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context;
-    ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *)buffer->buft->context;
-
-    const int64_t ne0 = tensor->ne[0];
-    const size_t nb1 = tensor->nb[1];
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra;
-
-    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-        int64_t row_low, row_high;
-        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, i);
-
-        int64_t nrows_split = row_high - row_low;
-        if (nrows_split == 0) {
-            continue;
-        }
-
-        const size_t offset_split = row_low*nb1;
-        size_t size = ggml_nbytes_split(tensor, nrows_split);
-        const size_t original_size = size;
-
-        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
-        if (ne0 % MATRIX_ROW_PADDING != 0) {
-            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
-        }
-
-        char * buf_host = (char *)data + offset_split;
-        /*
-        DPCT1009:212: SYCL uses exceptions to report errors and does not use the
-        error codes. The original code was commented out and a warning string
-        was inserted. You need to rewrite this code.
-        */
-        ggml_sycl_set_device(i);
-        const queue_ptr stream = ctx->streams[i];
-        SYCL_CHECK(CHECK_TRY_ERROR(
-            (*stream)
-                .memcpy(buf_host, extra->data_device[i], original_size)
-                .wait()));
-    }
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-GGML_CALL static void ggml_backend_sycl_split_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
-    UNUSED(buffer);
-    UNUSED(value);
-}
-
-static struct ggml_backend_buffer_i ggml_backend_sycl_split_buffer_interface = {
-    /* .get_name        = */ ggml_backend_sycl_split_buffer_get_name,
-    /* .free_buffer     = */ ggml_backend_sycl_split_buffer_free_buffer,
-    /* .get_base        = */ ggml_backend_sycl_split_buffer_get_base,
-    /* .init_tensor     = */ ggml_backend_sycl_split_buffer_init_tensor,
-    /* .set_tensor      = */ ggml_backend_sycl_split_buffer_set_tensor,
-    /* .get_tensor      = */ ggml_backend_sycl_split_buffer_get_tensor,
-    /* .cpy_tensor      = */ NULL,
-    /* .clear           = */ ggml_backend_sycl_split_buffer_clear,
-    /* .reset           = */ NULL,
-};
-
-GGML_CALL static const char * ggml_backend_sycl_split_buffer_type_name(ggml_backend_buffer_type_t buft) {
-    return GGML_SYCL_NAME "_Split";
-
-    UNUSED(buft);
-}
-
-GGML_CALL static ggml_backend_buffer_t ggml_backend_sycl_split_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    // since we don't know the exact split after rounding, we cannot allocate the device buffers at this point
-    // instead, we allocate them for each tensor separately in init_tensor
-    // however, the size still represents the maximum cumulative size of all the device buffers after the tensors are allocated,
-    // as returned by get_alloc_size. this limit is enforced during tensor allocation by ggml-alloc, so it must be correct.
-    ggml_backend_sycl_split_buffer_context * ctx = new ggml_backend_sycl_split_buffer_context();
-
-    return ggml_backend_buffer_init(buft, ggml_backend_sycl_split_buffer_interface, ctx, size);
-}
-
-GGML_CALL static size_t ggml_backend_sycl_split_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
-    return 128;
-    UNUSED(buft);
-}
-
-GGML_CALL static size_t ggml_backend_sycl_split_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
-    ggml_backend_sycl_split_buffer_type_context * ctx = (ggml_backend_sycl_split_buffer_type_context *)buft->context;
-
-    size_t total_size = 0;
-
-    const int64_t ne0 = tensor->ne[0];
-
-    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-        int64_t row_low, row_high;
-        get_row_split(&row_low, &row_high, tensor, ctx->tensor_split, i);
-
-        int64_t nrows_split = row_high - row_low;
-        if (nrows_split == 0) {
-            continue;
-        }
-
-        total_size += ggml_nbytes_split(tensor, nrows_split);
-
-        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
-        if (ne0 % MATRIX_ROW_PADDING != 0) {
-            total_size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
-        }
-    }
-
-    return total_size;
-}
-
-GGML_CALL static bool ggml_backend_sycl_split_buffer_type_is_host(ggml_backend_buffer_type_t buft) {
-    return false;
-
-    UNUSED(buft);
-}
-
-static ggml_backend_buffer_type_i ggml_backend_sycl_split_buffer_type_interface = {
-    /* .get_name         = */ ggml_backend_sycl_split_buffer_type_name,
-    /* .alloc_buffer     = */ ggml_backend_sycl_split_buffer_type_alloc_buffer,
-    /* .get_alignment    = */ ggml_backend_sycl_split_buffer_type_get_alignment,
-    /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
-    /* .get_alloc_size   = */ ggml_backend_sycl_split_buffer_type_get_alloc_size,
-    /* .is_host          = */ ggml_backend_sycl_split_buffer_type_is_host,
-};
-
-GGML_CALL ggml_backend_buffer_type_t ggml_backend_sycl_split_buffer_type(const float * tensor_split) {
-    static std::mutex mutex;
-    std::lock_guard<std::mutex> lock(mutex);
-
-    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_split_buffer_type\n");
-    ggml_check_sycl();
-    // FIXME: this is not thread safe
-    static std::map<std::array<float, GGML_SYCL_MAX_DEVICES>, struct ggml_backend_buffer_type> buft_map;
-
-    std::array<float, GGML_SYCL_MAX_DEVICES> tensor_split_arr = {};
-
-    bool all_zero = tensor_split == nullptr || std::all_of(tensor_split, tensor_split + GGML_SYCL_MAX_DEVICES, [](float x) { return x == 0.0f; });
-    if (all_zero) {
-        tensor_split_arr = ggml_sycl_info().default_tensor_split;
-    } else {
-        float split_sum = 0.0f;
-        for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-            tensor_split_arr[i] = split_sum;
-            split_sum += tensor_split[i];
-        }
-        for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
-            tensor_split_arr[i] /= split_sum;
-        }
-    }
-
-    auto it = buft_map.find(tensor_split_arr);
-    if (it != buft_map.end()) {
-        return &it->second;
-    }
-
-    struct ggml_backend_buffer_type buft {
-        /* .iface   = */ ggml_backend_sycl_split_buffer_type_interface,
-        /* .context = */ new ggml_backend_sycl_split_buffer_type_context{tensor_split_arr},
-    };
-
-    auto result = buft_map.emplace(tensor_split_arr, buft);
-    return &result.first->second;
-}
-
-// host buffer type
-
-GGML_CALL static const char * ggml_backend_sycl_host_buffer_type_name(ggml_backend_buffer_type_t buft) {
-    return GGML_SYCL_NAME "_Host";
-
-    UNUSED(buft);
-}
-
-GGML_CALL static const char * ggml_backend_sycl_host_buffer_name(ggml_backend_buffer_t buffer) {
-    return GGML_SYCL_NAME "_Host";
-
-    UNUSED(buffer);
-}
-
-static void ggml_backend_sycl_host_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    ggml_sycl_host_free(buffer->context);
-}
-
-static ggml_backend_buffer_t ggml_backend_sycl_host_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    void * ptr = ggml_sycl_host_malloc(size);
-
-    if (ptr == nullptr) {
-        // fallback to cpu buffer
-        return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size);
-    }
-
-    // FIXME: this is a hack to avoid having to implement a new buffer type
-    ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size);
-    buffer->buft = buft;
-    buffer->iface.get_name = ggml_backend_sycl_host_buffer_name;
-    buffer->iface.free_buffer = ggml_backend_sycl_host_buffer_free_buffer;
-
-    return buffer;
-}
-
-ggml_backend_buffer_type_t ggml_backend_sycl_host_buffer_type() {
-    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_host_buffer_type\n");
-    static struct ggml_backend_buffer_type ggml_backend_sycl_buffer_type_host = {
-        /* .iface    = */ {
-            /* .get_name         = */ ggml_backend_sycl_host_buffer_type_name,
-            /* .alloc_buffer     = */ ggml_backend_sycl_host_buffer_type_alloc_buffer,
-            /* .get_alignment    = */ ggml_backend_cpu_buffer_type()->iface.get_alignment,
-            /* .get_max_size     = */ NULL, // TODO: return device.maxBufferLength
-            /* .get_alloc_size   = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size,
-            /* .is_host          = */ ggml_backend_cpu_buffer_type()->iface.is_host,
-        },
-        /* .context  = */ nullptr,
-    };
-
-    return &ggml_backend_sycl_buffer_type_host;
-}
-
-// backend
-
-GGML_CALL static const char * ggml_backend_sycl_name(ggml_backend_t backend) {
-
-    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
-
-    return sycl_ctx->name.c_str();
-}
-
-GGML_CALL static void ggml_backend_sycl_free(ggml_backend_t backend) {
-    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
-
-    delete sycl_ctx;
-    delete backend;
-}
-
-
-GGML_CALL static ggml_backend_buffer_type_t ggml_backend_sycl_get_default_buffer_type(ggml_backend_t backend) {
-    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
-    return ggml_backend_sycl_buffer_type(sycl_ctx->device);
-}
-
-GGML_CALL static void ggml_backend_sycl_set_tensor_async(ggml_backend_t backend,
-                                               ggml_tensor *tensor,
-                                               const void *data, size_t offset,
-                                               size_t size) try {
-    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
-    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
-
-    GGML_ASSERT(buf->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) && "unsupported buffer type");
-    const queue_ptr stream = sycl_ctx->stream(sycl_ctx->device, 0);
-    SYCL_CHECK(CHECK_TRY_ERROR((stream)->memcpy(
-        (char *)tensor->data + offset, data, size).wait()));
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-GGML_CALL static void ggml_backend_sycl_get_tensor_async(ggml_backend_t backend,
-                                               const ggml_tensor *tensor,
-                                               void *data, size_t offset,
-                                               size_t size) try {
-    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
-    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
-
-    GGML_ASSERT(buf->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) && "unsupported buffer type");
-    const queue_ptr stream = sycl_ctx->stream(sycl_ctx->device, 0);
-    SYCL_CHECK(CHECK_TRY_ERROR((stream)->memcpy(
-        data, (const char *)tensor->data + offset, size).wait()));
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-GGML_CALL static bool ggml_backend_sycl_cpy_tensor_async(ggml_backend_t backend,
-                                                         const ggml_tensor *src,
-                                                         ggml_tensor *dst) try {
-    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
-    if (dst->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) && ggml_backend_buffer_is_sycl(src->buffer)) {
-        /*
-        DPCT1009:215: SYCL uses exceptions to report errors and does not use the
-        error codes. The original code was commented out and a warning string
-        was inserted. You need to rewrite this code.
-        */
-        const queue_ptr stream = sycl_ctx->stream(sycl_ctx->device, 0);
-        SYCL_CHECK(CHECK_TRY_ERROR((stream)->memcpy(
-            dst->data, src->data, ggml_nbytes(dst)).wait()));
-        return true;
-    }
-
-    return false;
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-static void ggml_backend_sycl_synchronize(ggml_backend_t backend) try {
-    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
-    const queue_ptr stream = sycl_ctx->stream(sycl_ctx->device, 0);
-    SYCL_CHECK(CHECK_TRY_ERROR((stream)->wait()));
-
-    UNUSED(backend);
-}
-catch (sycl::exception const &exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-GGML_CALL static ggml_status ggml_backend_sycl_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
-    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
-    ggml_sycl_set_main_device(sycl_ctx->device);
-
-
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        ggml_tensor * node = cgraph->nodes[i];
-        if (ggml_is_empty(node) || node->op == GGML_OP_RESHAPE || node->op == GGML_OP_TRANSPOSE || node->op == GGML_OP_VIEW || node->op == GGML_OP_PERMUTE || node->op == GGML_OP_NONE) {
-            continue;
-        }
-#ifndef NDEBUG
-        assert(node->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device));
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            if (node->src[j] != nullptr) {
-                assert(node->src[j]->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device));
-            }
-        }
-#endif
-        bool ok = ggml_sycl_compute_forward(*sycl_ctx, node);
-        if (!ok) {
-            fprintf(stderr, "%s: error: op not supported %s (%s)\n", __func__, node->name, ggml_op_name(node->op));
-        }
-        GGML_ASSERT(ok);
-    }
-
-    return GGML_STATUS_SUCCESS;
-}
-
-GGML_CALL static bool ggml_backend_sycl_supports_op(ggml_backend_t backend, const ggml_tensor * op) {
-    switch (op->op) {
-        case GGML_OP_UNARY:
-            switch (ggml_get_unary_op(op)) {
-                case GGML_UNARY_OP_GELU:
-                case GGML_UNARY_OP_SILU:
-                case GGML_UNARY_OP_RELU:
-                case GGML_UNARY_OP_HARDSIGMOID:
-                case GGML_UNARY_OP_HARDSWISH:
-                case GGML_UNARY_OP_GELU_QUICK:
-                case GGML_UNARY_OP_TANH:
-                    return ggml_is_contiguous(op->src[0]);
-                default:
-                    return false;
-            }
-            break;
-        case GGML_OP_MUL_MAT:
-        case GGML_OP_MUL_MAT_ID:
-            {
-                struct ggml_tensor * a;
-                struct ggml_tensor * b;
-                if (op->op == GGML_OP_MUL_MAT) {
-                    a = op->src[0];
-                    b = op->src[1];
-                } else {
-                    a = op->src[2];
-                    b = op->src[1];
-                }
-                if (a->ne[3] != b->ne[3]) {
-                    return false;
-                }
-                ggml_type a_type = a->type;
-                if (a_type == GGML_TYPE_IQ4_NL  || a_type == GGML_TYPE_IQ4_XS ||
-                    a_type == GGML_TYPE_IQ3_XXS || a_type == GGML_TYPE_IQ3_S  ||
-                    a_type == GGML_TYPE_IQ2_XXS || a_type == GGML_TYPE_IQ2_XS || a_type == GGML_TYPE_IQ2_S ||
-                    a_type == GGML_TYPE_IQ1_S || a_type == GGML_TYPE_IQ1_M
-                    ) {
-                    if (b->ne[1] == 1 && ggml_nrows(b) > 1) {
-                        return false;
-                    }
-                }
-                return true;
-            } break;
-        case GGML_OP_GET_ROWS:
-            {
-                switch (op->src[0]->type) {
-                    case GGML_TYPE_F16:
-                    case GGML_TYPE_F32:
-                    case GGML_TYPE_Q4_0:
-                    case GGML_TYPE_Q4_1:
-                    case GGML_TYPE_Q5_0:
-                    case GGML_TYPE_Q5_1:
-                    case GGML_TYPE_Q8_0:
-                        return true;
-                    default:
-                        return false;
-                }
-            } break;
-        case GGML_OP_CPY:
-            {
-                ggml_type src0_type = op->src[0]->type;
-                ggml_type src1_type = op->src[1]->type;
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q8_0) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_0) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_1) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) {
-                    return true;
-                }
-                return false;
-            } break;
-        case GGML_OP_CONCAT:
-            {
-                ggml_type src0_type = op->src[0]->type;
-                return src0_type != GGML_TYPE_I32 && src0_type != GGML_TYPE_I16;
-            } break;
-        case GGML_OP_DUP:
-        case GGML_OP_NONE:
-        case GGML_OP_RESHAPE:
-        case GGML_OP_REPEAT:
-        case GGML_OP_VIEW:
-        case GGML_OP_PERMUTE:
-        case GGML_OP_TRANSPOSE:
-        case GGML_OP_NORM:
-        case GGML_OP_ADD:
-        case GGML_OP_MUL:
-        case GGML_OP_DIV:
-        case GGML_OP_RMS_NORM:
-        case GGML_OP_SCALE:
-        case GGML_OP_SQR:
-        case GGML_OP_CLAMP:
-        case GGML_OP_CONT:
-        case GGML_OP_DIAG_MASK_INF:
-        case GGML_OP_SOFT_MAX:
-        case GGML_OP_ROPE:
-        case GGML_OP_IM2COL:
-        case GGML_OP_POOL_2D:
-        case GGML_OP_SUM_ROWS:
-        case GGML_OP_ARGSORT:
-        case GGML_OP_ACC:
-        case GGML_OP_GROUP_NORM:
-        case GGML_OP_UPSCALE:
-        case GGML_OP_PAD:
-        case GGML_OP_LEAKY_RELU:
-            return true;
-        default:
-            return false;
-    }
-
-    UNUSED(backend);
-}
-
-GGML_CALL static bool ggml_backend_sycl_offload_op(ggml_backend_t backend, const ggml_tensor * op) {
-    const int min_batch_size = 32;
-    return op->ne[1] >= min_batch_size && op->op != GGML_OP_GET_ROWS && op->op != GGML_OP_MUL_MAT_ID;
-    GGML_UNUSED(backend);
-}
-
-GGML_CALL static bool ggml_backend_sycl_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
-    if (buft->iface.get_name != ggml_backend_sycl_buffer_type_name) {
-        return false;
-    }
-    ggml_backend_sycl_buffer_type_context * buft_ctx = (ggml_backend_sycl_buffer_type_context *)buft->context;
-    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
-    return buft_ctx->device == sycl_ctx->device;
-}
-
-static ggml_backend_i ggml_backend_sycl_interface = {
-    /* .get_name                = */ ggml_backend_sycl_name,
-    /* .free                    = */ ggml_backend_sycl_free,
-    /* .get_default_buffer_type = */ ggml_backend_sycl_get_default_buffer_type,
-    /* .set_tensor_async        = */ ggml_backend_sycl_set_tensor_async,
-    /* .get_tensor_async        = */ ggml_backend_sycl_get_tensor_async,
-    /* .cpy_tensor_async        = */ NULL, //ggml_backend_sycl_cpy_tensor_async, // TODO: update for the new interface
-    /* .synchronize             = */ ggml_backend_sycl_synchronize,
-    /* .graph_plan_create       = */ NULL,
-    /* .graph_plan_free         = */ NULL,
-    /* .graph_plan_update       = */ NULL,
-    /* .graph_plan_compute      = */ NULL,
-    /* .graph_compute           = */ ggml_backend_sycl_graph_compute,
-    /* .supports_op             = */ ggml_backend_sycl_supports_op,
-    /* .supports_buft           = */ ggml_backend_sycl_supports_buft,
-    /* .offload_op              = */ ggml_backend_sycl_offload_op,
-    /* .event_new               = */ NULL,
-    /* .event_free              = */ NULL,
-    /* .event_record            = */ NULL,
-    /* .event_wait              = */ NULL,
-    /* .event_synchronize       = */ NULL,
-};
-
-static ggml_guid_t ggml_backend_sycl_guid() {
-    static ggml_guid guid = { 0x58, 0x05, 0x13, 0x8f, 0xcd, 0x3a, 0x61, 0x9d, 0xe7, 0xcd, 0x98, 0xa9, 0x03, 0xfd, 0x7c, 0x53 };
-    return &guid;
-}
-
-GGML_CALL ggml_backend_t ggml_backend_sycl_init(int device) {
-    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_init\n");
-    ggml_check_sycl();
-
-    check_allow_gpu_index(device);
-
-    ggml_backend_sycl_context * ctx = new ggml_backend_sycl_context(device);
-    if (ctx == nullptr) {
-        fprintf(stderr, "%s: error: failed to allocate context\n", __func__);
-        return nullptr;
-    };
-
-    ggml_backend_t sycl_backend = new ggml_backend {
-        /* .guid      = */ ggml_backend_sycl_guid(),
-        /* .interface = */ ggml_backend_sycl_interface,
-        /* .context   = */ ctx
-    };
-
-    return sycl_backend;
-}
-
-bool ggml_backend_is_sycl(ggml_backend_t backend) {
-    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_sycl_guid());
-}
-
-GGML_CALL int ggml_backend_sycl_get_device_count() {
-    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_get_device_count\n");
-    return ggml_sycl_info().device_count;
-}
-
-GGML_CALL static ggml_backend_t ggml_backend_reg_sycl_init(const char * params, void * user_data) {
-    ggml_backend_t sycl_backend = ggml_backend_sycl_init((int) (intptr_t) user_data);
-    return sycl_backend;
-
-    UNUSED(params);
-}
-
-extern "C" int ggml_backend_sycl_reg_devices();
-
-int ggml_backend_sycl_reg_devices() {
-    assert(ggml_sycl_info().device_count>0);
-    for (int i = 0; i < ggml_sycl_info().device_count; i++) {
-        char name[128];
-        snprintf(name, sizeof(name), "%s%d", GGML_SYCL_NAME, i);
-        ggml_backend_register(name, ggml_backend_reg_sycl_init, ggml_backend_sycl_buffer_type(i), (void *) (intptr_t) i);
-    }
-    return ggml_sycl_info().device_count;
-}
diff --git a/ggml-sycl.h b/ggml-sycl.h
deleted file mode 100644 (file)
index 451938f..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-//  MIT license
-//  Copyright (C) 2024 Intel Corporation
-//  SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include "ggml.h"
-#include "ggml-backend.h"
-#include "ggml-sycl/presets.hpp"
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-// backend API
-GGML_API ggml_backend_t ggml_backend_sycl_init(int device);
-
-// devide buffer
-GGML_API ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(int device);
-
-// split tensor buffer that splits matrices by rows across multiple devices
-GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_sycl_split_buffer_type(const float * tensor_split);
-
-// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU
-GGML_API ggml_backend_buffer_type_t ggml_backend_sycl_host_buffer_type(void);
-
-GGML_API void   ggml_backend_sycl_print_sycl_devices(void);
-GGML_API GGML_CALL void   ggml_sycl_get_gpu_list(int *id_list, int max_len);
-GGML_API GGML_CALL void   ggml_sycl_get_device_description(int device, char *description, size_t description_size);
-GGML_API GGML_CALL int   ggml_backend_sycl_get_device_count();
-GGML_API GGML_CALL void ggml_backend_sycl_get_device_memory(int device, size_t *free, size_t *total);
-
-// SYCL doesn't support registering host memory, keep here for reference
-// GGML_API GGML_CALL bool ggml_backend_sycl_register_host_buffer(void * buffer, size_t size);
-// GGML_API GGML_CALL void ggml_backend_sycl_unregister_host_buffer(void * buffer);
-#ifdef  __cplusplus
-}
-#endif
diff --git a/ggml-sycl/backend.hpp b/ggml-sycl/backend.hpp
deleted file mode 100644 (file)
index 88bae59..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-// MIT license
-// Copyright (C) 2024 Intel Corporation
-// SPDX-License-Identifier: MIT
-//
-
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-
-#ifndef GGML_SYCL_BACKEND_HPP
-#define GGML_SYCL_BACKEND_HPP
-
-#include "common.hpp"
-
-#endif // GGML_SYCL_BACKEND_HPP
diff --git a/ggml-sycl/common.cpp b/ggml-sycl/common.cpp
deleted file mode 100644 (file)
index e878f4f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// MIT license
-// Copyright (C) 2024 Intel Corporation
-// SPDX-License-Identifier: MIT
-//
-
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-
-#include "common.hpp"
-
-int get_current_device_id() {
-  return dpct::dev_mgr::instance().current_device_id();
-}
-
-void* ggml_sycl_host_malloc(size_t size) try {
-  if (getenv("GGML_SYCL_NO_PINNED") != nullptr) {
-    return nullptr;
-  }
-
-  void* ptr = nullptr;
-  // allow to use dpct::get_in_order_queue() for host malloc
-  dpct::err0 err = CHECK_TRY_ERROR(
-      ptr = (void*)sycl::malloc_host(size, dpct::get_in_order_queue()));
-
-  if (err != 0) {
-    // clear the error
-    fprintf(
-        stderr,
-        "WARNING: failed to allocate %.2f MB of pinned memory: %s\n",
-        size / 1024.0 / 1024.0,
-        "syclGetErrorString is not supported");
-    return nullptr;
-  }
-
-  return ptr;
-} catch (sycl::exception const& exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
-
-void ggml_sycl_host_free(void* ptr) try {
-  // allow to use dpct::get_in_order_queue() for host malloc
-  SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(ptr, dpct::get_in_order_queue())));
-} catch (sycl::exception const& exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  std::exit(1);
-}
diff --git a/ggml-sycl/common.hpp b/ggml-sycl/common.hpp
deleted file mode 100644 (file)
index 414c37e..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-//
-// MIT license
-// Copyright (C) 2024 Intel Corporation
-// SPDX-License-Identifier: MIT
-//
-
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-
-#ifndef GGML_SYCL_COMMON_HPP
-#define GGML_SYCL_COMMON_HPP
-
-#include <fstream>
-#include <iostream>
-
-#include "dpct/helper.hpp"
-#include "presets.hpp"
-
-#define GGML_COMMON_DECL_SYCL
-#define GGML_COMMON_IMPL_SYCL
-#include "ggml-common.h"
-
-void* ggml_sycl_host_malloc(size_t size);
-void ggml_sycl_host_free(void* ptr);
-
-static int g_ggml_sycl_debug = 0;
-#define GGML_SYCL_DEBUG(...)        \
-  do {                              \
-    if (g_ggml_sycl_debug)          \
-      fprintf(stderr, __VA_ARGS__); \
-  } while (0)
-
-#define CHECK_TRY_ERROR(expr)                                            \
-  [&]() {                                                                \
-    try {                                                                \
-      expr;                                                              \
-      return dpct::success;                                              \
-    } catch (std::exception const& e) {                                  \
-      std::cerr << e.what() << "\nException caught at file:" << __FILE__ \
-                << ", line:" << __LINE__ << ", func:" << __func__        \
-                << std::endl;                                            \
-      return dpct::default_error;                                        \
-    }                                                                    \
-  }()
-
-// #define DEBUG_SYCL_MALLOC
-
-static int g_work_group_size = 0;
-// typedef sycl::half ggml_fp16_t;
-
-#define __SYCL_ARCH__ DPCT_COMPATIBILITY_TEMP
-#define VER_4VEC 610 // todo for hardward optimize.
-#define VER_GEN9 700 // todo for hardward optimize.
-#define VER_GEN12 1000000 // todo for hardward optimize.
-#define VER_GEN13 (VER_GEN12 + 1030) // todo for hardward optimize.
-
-#define GGML_SYCL_MAX_NODES 8192 // TODO: adapt to hardwares
-
-// define for XMX in Intel GPU
-// TODO: currently, it's not used for XMX really.
-#if !defined(GGML_SYCL_FORCE_MMQ)
-    #define SYCL_USE_XMX
-#endif
-
-// max batch size to use MMQ kernels when tensor cores are available
-#define MMQ_MAX_BATCH_SIZE 32
-
-#if defined(_MSC_VER)
-#pragma warning(disable : 4244 4267) // possible loss of data
-#endif
-
-// dmmv = dequantize_mul_mat_vec
-#ifndef GGML_SYCL_DMMV_X
-#define GGML_SYCL_DMMV_X 32
-#endif
-#ifndef GGML_SYCL_MMV_Y
-#define GGML_SYCL_MMV_Y 1
-#endif
-
-typedef sycl::queue *queue_ptr;
-
-enum ggml_sycl_backend_gpu_mode {
-  SYCL_UNSET_GPU_MODE = -1,
-  SYCL_SINGLE_GPU_MODE = 0,
-  SYCL_MUL_GPU_MODE
-};
-
-static_assert(sizeof(sycl::half) == sizeof(ggml_fp16_t), "wrong fp16 size");
-
-static void crash() {
-  int* ptr = NULL;
-  *ptr = 0;
-}
-
-[[noreturn]] static void ggml_sycl_error(
-    const char* stmt,
-    const char* func,
-    const char* file,
-    const int line,
-    const char* msg) {
-  fprintf(stderr, "SYCL error: %s: %s\n", stmt, msg);
-  fprintf(stderr, "  in function %s at %s:%d\n", func, file, line);
-  GGML_ASSERT(!"SYCL error");
-}
-
-#define SYCL_CHECK(err)                     \
-  do {                                      \
-    auto err_ = (err);                      \
-    if (err_ != 0)                          \
-      ggml_sycl_error(                      \
-          #err,                             \
-          __func__,                         \
-          __FILE__,                         \
-          __LINE__,                         \
-          "Meet error in this line code!"); \
-  } while (0)
-
-#if DPCT_COMPAT_RT_VERSION >= 11100
-#define GGML_SYCL_ASSUME(x) __builtin_assume(x)
-#else
-#define GGML_SYCL_ASSUME(x)
-#endif // DPCT_COMPAT_RT_VERSION >= 11100
-
-#ifdef GGML_SYCL_F16
-typedef sycl::half dfloat; // dequantize float
-typedef sycl::half2 dfloat2;
-#else
-typedef float dfloat; // dequantize float
-typedef sycl::float2 dfloat2;
-#endif // GGML_SYCL_F16
-
-#define MMVQ_MAX_BATCH_SIZE  8
-
-static const int8_t kvalues_iq4nl[16]={-127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113};
-
-static int g_all_sycl_device_count = -1;
-static bool g_ggml_backend_sycl_buffer_type_initialized = false;
-
-static ggml_sycl_backend_gpu_mode g_ggml_sycl_backend_gpu_mode =
-    SYCL_UNSET_GPU_MODE;
-
-static void* g_scratch_buffer = nullptr;
-static size_t g_scratch_size = 0; // disabled by default
-static size_t g_scratch_offset = 0;
-
-[[noreturn]] static inline void bad_arch(const sycl::stream& stream_ct1) {
-  stream_ct1 << "ERROR: ggml-sycl was compiled without support for the "
-                "current GPU architecture.\n";
-  // __trap();
-  std::exit(1);
-
-  (void)bad_arch; // suppress unused function warning
-}
-
-int get_current_device_id();
-
-inline dpct::err0 ggml_sycl_set_device(const int device) try {
-
-  int current_device_id;
-  SYCL_CHECK(CHECK_TRY_ERROR(current_device_id = get_current_device_id()));
-
-  // GGML_SYCL_DEBUG("ggml_sycl_set_device device_id=%d,
-  // current_device_id=%d\n", device, current_device);
-  if (device == current_device_id) {
-    return 0;
-  }
-
-  return CHECK_TRY_ERROR(dpct::select_device(device));
-} catch (sycl::exception const& exc) {
-  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
-            << ", line:" << __LINE__ << std::endl;
-  crash();
-  std::exit(1);
-}
-
-//////////////////////
-
-struct ggml_sycl_device_info {
-    int device_count;
-
-    struct sycl_device_info {
-        int     cc;                 // compute capability
-        // int     nsm;                // number of streaming multiprocessors
-        // size_t  smpb;               // max. shared memory per block
-        bool    vmm;                // virtual memory support
-        size_t  total_vram;
-    };
-
-    sycl_device_info devices[GGML_SYCL_MAX_DEVICES] = {};
-
-    std::array<float, GGML_SYCL_MAX_DEVICES> default_tensor_split = {};
-};
-
-const ggml_sycl_device_info & ggml_sycl_info();
-
-struct ggml_sycl_pool {
-    virtual ~ggml_sycl_pool() = default;
-
-    virtual void * alloc(size_t size, size_t * actual_size) = 0;
-    virtual void free(void * ptr, size_t size) = 0;
-};
-
-template<typename T>
-struct ggml_sycl_pool_alloc {
-    ggml_sycl_pool * pool = nullptr;
-    T * ptr = nullptr;
-    size_t actual_size = 0;
-
-    explicit ggml_sycl_pool_alloc(ggml_sycl_pool & pool) : pool(&pool) {
-    }
-
-    ggml_sycl_pool_alloc(ggml_sycl_pool & pool, size_t size) : pool(&pool) {
-        alloc(size);
-    }
-
-    ~ggml_sycl_pool_alloc() {
-        if (ptr != nullptr) {
-            pool->free(ptr, actual_size);
-        }
-    }
-
-    // size is in number of elements
-    T * alloc(size_t size) {
-        GGML_ASSERT(pool != nullptr);
-        GGML_ASSERT(ptr == nullptr);
-        ptr = (T *) pool->alloc(size * sizeof(T), &this->actual_size);
-        return ptr;
-    }
-
-    T * alloc(ggml_sycl_pool & pool, size_t size) {
-        this->pool = &pool;
-        return alloc(size);
-    }
-
-    T * get() {
-        return ptr;
-    }
-
-    ggml_sycl_pool_alloc() = default;
-    ggml_sycl_pool_alloc(const ggml_sycl_pool_alloc &) = delete;
-    ggml_sycl_pool_alloc(ggml_sycl_pool_alloc &&) = delete;
-    ggml_sycl_pool_alloc& operator=(const ggml_sycl_pool_alloc &) = delete;
-    ggml_sycl_pool_alloc& operator=(ggml_sycl_pool_alloc &&) = delete;
-};
-
-// backend interface
-
-struct ggml_tensor_extra_gpu {
-  void* data_device[GGML_SYCL_MAX_DEVICES]; // 1 pointer for each device for split
-                                       // tensors
-  dpct::event_ptr events[GGML_SYCL_MAX_DEVICES]
-                        [GGML_SYCL_MAX_STREAMS]; // events for synchronizing multiple GPUs
-};
-
-struct ggml_backend_sycl_context {
-    int device;
-    std::string name;
-
-    queue_ptr qptrs[GGML_SYCL_MAX_DEVICES][GGML_SYCL_MAX_STREAMS] = { { nullptr } };
-
-    explicit ggml_backend_sycl_context(int device) :
-        device(device),
-        name(GGML_SYCL_NAME + std::to_string(device)) {
-    }
-
-    queue_ptr stream(int device, int stream) {
-        if (qptrs[device][stream] == nullptr) {
-            qptrs[device][stream] = &(dpct::get_current_device().default_queue());
-        }
-        return qptrs[device][stream];
-    }
-
-    queue_ptr stream() {
-        return stream(device, 0);
-    }
-
-    // pool
-    std::unique_ptr<ggml_sycl_pool> pools[GGML_SYCL_MAX_DEVICES];
-
-    static std::unique_ptr<ggml_sycl_pool> new_pool_for_device(queue_ptr qptr, int device);
-
-    ggml_sycl_pool & pool(int device) {
-        if (pools[device] == nullptr) {
-            pools[device] = new_pool_for_device(stream(device,0), device);
-        }
-        return *pools[device];
-    }
-
-    ggml_sycl_pool & pool() {
-        return pool(device);
-    }
-};
-
-
-#endif // GGML_SYCL_COMMON_HPP
diff --git a/ggml-sycl/dpct/helper.hpp b/ggml-sycl/dpct/helper.hpp
deleted file mode 100644 (file)
index 017fd6e..0000000
+++ /dev/null
@@ -1,2980 +0,0 @@
-//
-// MIT license
-// Copyright (C) 2024 Intel Corporation
-// SPDX-License-Identifier: MIT
-//
-
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-
-#ifndef GGML_SYCL_DPCT_HELPER_HPP
-#define GGML_SYCL_DPCT_HELPER_HPP
-
-#include <sycl/sycl.hpp>
-#include <sycl/half_type.hpp>
-#include <oneapi/mkl.hpp>
-#include <map>
-
-#include "ggml.h"
-
-#if defined(__linux__)
-#include <sys/mman.h>
-#elif defined(_WIN64)
-#ifndef NOMINMAX
-#define NOMINMAX
-#endif
-#include <windows.h>
-#else
-#error "Only support Windows and Linux."
-#endif
-
-#if defined(__linux__)
-#include <unistd.h>
-#include <sys/syscall.h>
-#endif
-#if defined(_WIN64)
-#ifndef NOMINMAX
-#define NOMINMAX
-#endif
-#include <windows.h>
-#endif
-
-#define DPCT_COMPATIBILITY_TEMP (900)
-
-#if defined(_MSC_VER)
-#define __dpct_align__(n) __declspec(align(n))
-#define __dpct_inline__ __forceinline
-#else
-#define __dpct_align__(n) __attribute__((aligned(n)))
-#define __dpct_inline__ __inline__ __attribute__((always_inline))
-#endif
-
-#if defined(_MSC_VER)
-#define __dpct_noinline__ __declspec(noinline)
-#else
-#define __dpct_noinline__ __attribute__((noinline))
-#endif
-
-inline std::string get_device_type_name(const sycl::device &Device) {
-    auto DeviceType = Device.get_info<sycl::info::device::device_type>();
-    switch (DeviceType) {
-    case sycl::info::device_type::cpu:
-        return "cpu";
-    case sycl::info::device_type::gpu:
-        return "gpu";
-    case sycl::info::device_type::host:
-        return "host";
-    case sycl::info::device_type::accelerator:
-        return "acc";
-    default:
-        return "unknown";
-    }
-}
-
-inline std::string get_device_backend_and_type(const sycl::device &device) {
-    std::stringstream device_type;
-    sycl::backend backend = device.get_backend();
-    device_type <<  backend << ":" << get_device_type_name(device);
-    return device_type.str();
-}
-
-namespace dpct
-{
-    typedef sycl::queue *queue_ptr;
-    typedef sycl::event *event_ptr;
-    typedef char *device_ptr;
-    typedef uint8_t byte_t;
-    typedef sycl::buffer<byte_t> buffer_t;
-
-    /// SYCL default exception handler
-    inline auto exception_handler = [](sycl::exception_list exceptions)
-    {
-        for (std::exception_ptr const &e : exceptions)
-        {
-            try
-            {
-                std::rethrow_exception(e);
-            }
-            catch (sycl::exception const &e)
-            {
-                std::cerr << "Caught asynchronous SYCL exception:" << std::endl
-                          << e.what() << std::endl
-                          << "Exception caught at file:" << __FILE__
-                          << ", line:" << __LINE__ << std::endl;
-            }
-        }
-    };
-
-    enum error_code
-    {
-        success = 0,
-        default_error = 999
-    };
-
-    enum memcpy_direction
-    {
-        host_to_host,
-        host_to_device,
-        device_to_host,
-        device_to_device,
-        automatic
-    };
-
-    enum memory_region
-    {
-        global = 0, // device global memory
-        constant,   // device constant memory
-        local,      // device local memory
-        shared,     // memory which can be accessed by host and device
-    };
-
-    enum class library_data_t : unsigned char
-    {
-        real_float = 0,
-        complex_float,
-        real_double,
-        complex_double,
-        real_half,
-        complex_half,
-        real_bfloat16,
-        complex_bfloat16,
-        real_int4,
-        complex_int4,
-        real_uint4,
-        complex_uint4,
-        real_int8,
-        complex_int8,
-        real_uint8,
-        complex_uint8,
-        real_int16,
-        complex_int16,
-        real_uint16,
-        complex_uint16,
-        real_int32,
-        complex_int32,
-        real_uint32,
-        complex_uint32,
-        real_int64,
-        complex_int64,
-        real_uint64,
-        complex_uint64,
-        real_int8_4,
-        real_int8_32,
-        real_uint8_4,
-        library_data_t_size
-    };
-
-    template <typename T>
-    struct DataType
-    {
-        using T2 = T;
-    };
-    template <typename T>
-    struct DataType<sycl::vec<T, 2>>
-    {
-        using T2 = std::complex<T>;
-    };
-
-    static void destroy_event(event_ptr event)
-    {
-        delete event;
-    }
-
-    static inline unsigned int get_tid()
-    {
-#if defined(__linux__)
-        return syscall(SYS_gettid);
-#elif defined(_WIN64)
-        return GetCurrentThreadId();
-#else
-#error "Only support Windows and Linux."
-#endif
-    }
-
-    namespace detail
-    {
-        static void get_version(const sycl::device &dev, int &major, int &minor)
-        {
-            // Version string has the following format:
-            // a. OpenCL<space><major.minor><space><vendor-specific-information>
-            // b. <major.minor>
-            // c. <AmdGcnArchName> e.g gfx1030
-            std::string ver;
-            ver = dev.get_info<sycl::info::device::version>();
-            std::string::size_type i = 0;
-            while (i < ver.size()) {
-              if (isdigit(ver[i]))
-                break;
-              i++;
-            }
-            major = std::stoi(&(ver[i]));
-            while (i < ver.size()) {
-              if (ver[i] == '.')
-                break;
-              i++;
-            }
-            if (i < ver.size()) {
-              // a. and b.
-              i++;
-              minor = std::stoi(&(ver[i]));
-            } else {
-              // c.
-              minor = 0;
-            }
-        }
-
-        template <typename tag, typename T>
-        class generic_error_type
-        {
-        public:
-            generic_error_type() = default;
-            generic_error_type(T value) : value{value} {}
-            operator T() const { return value; }
-
-        private:
-            T value;
-        };
-
-    } // namespace detail
-
-    /// Pitched 2D/3D memory data.
-    class pitched_data
-    {
-    public:
-        pitched_data() : pitched_data(nullptr, 0, 0, 0) {}
-        pitched_data(void *data, size_t pitch, size_t x, size_t y)
-            : _data(data), _pitch(pitch), _x(x), _y(y) {}
-
-        void *get_data_ptr() { return _data; }
-        void set_data_ptr(void *data) { _data = data; }
-
-        size_t get_pitch() { return _pitch; }
-        void set_pitch(size_t pitch) { _pitch = pitch; }
-
-        size_t get_x() { return _x; }
-        void set_x(size_t x) { _x = x; };
-
-        size_t get_y() { return _y; }
-        void set_y(size_t y) { _y = y; }
-
-    private:
-        void *_data;
-        size_t _pitch, _x, _y;
-    };
-
-    class device_info
-    {
-    public:
-        // get interface
-        const char *get_name() const { return _name; }
-        char *get_name() { return _name; }
-        template <typename WorkItemSizesTy = sycl::range<3>,
-                  std::enable_if_t<std::is_same_v<WorkItemSizesTy, sycl::range<3>> ||
-                                       std::is_same_v<WorkItemSizesTy, int *>,
-                                   int> = 0>
-        auto get_max_work_item_sizes() const
-        {
-            if constexpr (std::is_same_v<WorkItemSizesTy, sycl::range<3>>)
-                return sycl::range<3>(_max_work_item_sizes_i[0],
-                                      _max_work_item_sizes_i[1],
-                                      _max_work_item_sizes_i[2]);
-            else
-            {
-                return _max_work_item_sizes_i;
-            }
-        }
-        template <typename WorkItemSizesTy = sycl::range<3>,
-                  std::enable_if_t<std::is_same_v<WorkItemSizesTy, sycl::range<3>> ||
-                                       std::is_same_v<WorkItemSizesTy, int *>,
-                                   int> = 0>
-        auto get_max_work_item_sizes()
-        {
-            if constexpr (std::is_same_v<WorkItemSizesTy, sycl::range<3>>)
-                return sycl::range<3>(_max_work_item_sizes_i[0],
-                                      _max_work_item_sizes_i[1],
-                                      _max_work_item_sizes_i[2]);
-            else
-            {
-                return _max_work_item_sizes_i;
-            }
-        }
-        bool get_host_unified_memory() const { return _host_unified_memory; }
-        int get_major_version() const { return _major; }
-        int get_minor_version() const { return _minor; }
-        int get_integrated() const { return _integrated; }
-        int get_max_clock_frequency() const { return _frequency; }
-        int get_max_compute_units() const { return _max_compute_units; }
-        int get_max_work_group_size() const { return _max_work_group_size; }
-        int get_max_sub_group_size() const { return _max_sub_group_size; }
-        int get_max_work_items_per_compute_unit() const
-        {
-            return _max_work_items_per_compute_unit;
-        }
-        int get_max_register_size_per_work_group() const
-        {
-            return _max_register_size_per_work_group;
-        }
-        template <typename NDRangeSizeTy = size_t *,
-                  std::enable_if_t<std::is_same_v<NDRangeSizeTy, size_t *> ||
-                                       std::is_same_v<NDRangeSizeTy, int *>,
-                                   int> = 0>
-        auto get_max_nd_range_size() const
-        {
-            if constexpr (std::is_same_v<NDRangeSizeTy, size_t *>)
-                return _max_nd_range_size;
-            else
-                return _max_nd_range_size_i;
-        }
-        template <typename NDRangeSizeTy = size_t *,
-                  std::enable_if_t<std::is_same_v<NDRangeSizeTy, size_t *> ||
-                                       std::is_same_v<NDRangeSizeTy, int *>,
-                                   int> = 0>
-        auto get_max_nd_range_size()
-        {
-            if constexpr (std::is_same_v<NDRangeSizeTy, size_t *>)
-                return _max_nd_range_size;
-            else
-                return _max_nd_range_size_i;
-        }
-        size_t get_global_mem_size() const { return _global_mem_size; }
-        size_t get_local_mem_size() const { return _local_mem_size; }
-        size_t get_max_mem_alloc_size() const { return _max_mem_alloc_size; }
-        /// Returns the maximum clock rate of device's global memory in kHz. If
-        /// compiler does not support this API then returns default value 3200000 kHz.
-        unsigned int get_memory_clock_rate() const { return _memory_clock_rate; }
-        /// Returns the maximum bus width between device and memory in bits. If
-        /// compiler does not support this API then returns default value 64 bits.
-        unsigned int get_memory_bus_width() const { return _memory_bus_width; }
-        uint32_t get_device_id() const { return _device_id; }
-        std::array<unsigned char, 16> get_uuid() const { return _uuid; }
-        /// Returns global memory cache size in bytes.
-        unsigned int get_global_mem_cache_size() const
-        {
-            return _global_mem_cache_size;
-        }
-
-        // set interface
-        void set_name(const char *name)
-        {
-            size_t length = strlen(name);
-            if (length < 256)
-            {
-                std::memcpy(_name, name, length + 1);
-            }
-            else
-            {
-                std::memcpy(_name, name, 255);
-                _name[255] = '\0';
-            }
-        }
-        void set_max_work_item_sizes(const sycl::range<3> max_work_item_sizes)
-        {
-            for (int i = 0; i < 3; ++i)
-                _max_work_item_sizes_i[i] = max_work_item_sizes[i];
-        }
-        [[deprecated]] void
-        set_max_work_item_sizes(const sycl::id<3> max_work_item_sizes)
-        {
-            for (int i = 0; i < 3; ++i)
-            {
-                _max_work_item_sizes_i[i] = max_work_item_sizes[i];
-            }
-        }
-        void set_host_unified_memory(bool host_unified_memory)
-        {
-            _host_unified_memory = host_unified_memory;
-        }
-        void set_major_version(int major) { _major = major; }
-        void set_minor_version(int minor) { _minor = minor; }
-        void set_integrated(int integrated) { _integrated = integrated; }
-        void set_max_clock_frequency(int frequency) { _frequency = frequency; }
-        void set_max_compute_units(int max_compute_units)
-        {
-            _max_compute_units = max_compute_units;
-        }
-        void set_global_mem_size(size_t global_mem_size)
-        {
-            _global_mem_size = global_mem_size;
-        }
-        void set_local_mem_size(size_t local_mem_size)
-        {
-            _local_mem_size = local_mem_size;
-        }
-        void set_max_mem_alloc_size(size_t max_mem_alloc_size)
-        {
-            _max_mem_alloc_size = max_mem_alloc_size;
-        }
-        void set_max_work_group_size(int max_work_group_size)
-        {
-            _max_work_group_size = max_work_group_size;
-        }
-        void set_max_sub_group_size(int max_sub_group_size)
-        {
-            _max_sub_group_size = max_sub_group_size;
-        }
-        void
-        set_max_work_items_per_compute_unit(int max_work_items_per_compute_unit)
-        {
-            _max_work_items_per_compute_unit = max_work_items_per_compute_unit;
-        }
-        void set_max_nd_range_size(int max_nd_range_size[])
-        {
-            for (int i = 0; i < 3; i++)
-            {
-                _max_nd_range_size[i] = max_nd_range_size[i];
-                _max_nd_range_size_i[i] = max_nd_range_size[i];
-            }
-        }
-        void set_memory_clock_rate(unsigned int memory_clock_rate)
-        {
-            _memory_clock_rate = memory_clock_rate;
-        }
-        void set_memory_bus_width(unsigned int memory_bus_width)
-        {
-            _memory_bus_width = memory_bus_width;
-        }
-        void
-        set_max_register_size_per_work_group(int max_register_size_per_work_group)
-        {
-            _max_register_size_per_work_group = max_register_size_per_work_group;
-        }
-        void set_device_id(uint32_t device_id)
-        {
-            _device_id = device_id;
-        }
-        void set_uuid(std::array<unsigned char, 16> uuid)
-        {
-            _uuid = std::move(uuid);
-        }
-        void set_global_mem_cache_size(unsigned int global_mem_cache_size)
-        {
-            _global_mem_cache_size = global_mem_cache_size;
-        }
-
-    private:
-        char _name[256];
-        int _max_work_item_sizes_i[3];
-        bool _host_unified_memory = false;
-        int _major;
-        int _minor;
-        int _integrated = 0;
-        int _frequency;
-        // Set estimated value 3200000 kHz as default value.
-        unsigned int _memory_clock_rate = 3200000;
-        // Set estimated value 64 bits as default value.
-        unsigned int _memory_bus_width = 64;
-        unsigned int _global_mem_cache_size;
-        int _max_compute_units;
-        int _max_work_group_size;
-        int _max_sub_group_size;
-        int _max_work_items_per_compute_unit;
-        int _max_register_size_per_work_group;
-        size_t _global_mem_size;
-        size_t _local_mem_size;
-        size_t _max_mem_alloc_size;
-        size_t _max_nd_range_size[3];
-        int _max_nd_range_size_i[3];
-        uint32_t _device_id;
-        std::array<unsigned char, 16> _uuid;
-    };
-
-    static int get_major_version(const sycl::device &dev)
-    {
-        int major, minor;
-        detail::get_version(dev, major, minor);
-        return major;
-    }
-
-    static int get_minor_version(const sycl::device &dev)
-    {
-        int major, minor;
-        detail::get_version(dev, major, minor);
-        return minor;
-    }
-
-    static void get_device_info(device_info &out, const sycl::device &dev)
-    {
-        device_info prop;
-        prop.set_name(dev.get_info<sycl::info::device::name>().c_str());
-
-        int major, minor;
-        detail::get_version(dev, major, minor);
-        prop.set_major_version(major);
-        prop.set_minor_version(minor);
-
-        prop.set_max_work_item_sizes(
-#if (__SYCL_COMPILER_VERSION && __SYCL_COMPILER_VERSION < 20220902)
-            // oneAPI DPC++ compiler older than 2022/09/02, where max_work_item_sizes
-            // is an enum class element
-            dev.get_info<sycl::info::device::max_work_item_sizes>());
-#else
-            // SYCL 2020-conformant code, max_work_item_sizes is a struct templated by
-            // an int
-            dev.get_info<sycl::info::device::max_work_item_sizes<3>>());
-#endif
-        prop.set_host_unified_memory(dev.has(sycl::aspect::usm_host_allocations));
-
-        prop.set_max_clock_frequency(
-            dev.get_info<sycl::info::device::max_clock_frequency>() * 1000);
-
-        prop.set_max_compute_units(
-            dev.get_info<sycl::info::device::max_compute_units>());
-        prop.set_max_work_group_size(
-            dev.get_info<sycl::info::device::max_work_group_size>());
-        prop.set_global_mem_size(dev.get_info<sycl::info::device::global_mem_size>());
-        prop.set_local_mem_size(dev.get_info<sycl::info::device::local_mem_size>());
-        prop.set_max_mem_alloc_size(dev.get_info<sycl::info::device::max_mem_alloc_size>());
-
-#if (defined(SYCL_EXT_INTEL_DEVICE_INFO) && SYCL_EXT_INTEL_DEVICE_INFO >= 6)
-        if (dev.has(sycl::aspect::ext_intel_memory_clock_rate))
-        {
-            unsigned int tmp =
-                dev.get_info<sycl::ext::intel::info::device::memory_clock_rate>();
-            if (tmp != 0)
-                prop.set_memory_clock_rate(1000 * tmp);
-        }
-        if (dev.has(sycl::aspect::ext_intel_memory_bus_width))
-        {
-            prop.set_memory_bus_width(
-                dev.get_info<sycl::ext::intel::info::device::memory_bus_width>());
-        }
-        if (dev.has(sycl::aspect::ext_intel_device_id))
-        {
-            prop.set_device_id(
-                dev.get_info<sycl::ext::intel::info::device::device_id>());
-        }
-        if (dev.has(sycl::aspect::ext_intel_device_info_uuid))
-        {
-            prop.set_uuid(dev.get_info<sycl::ext::intel::info::device::uuid>());
-        }
-#elif defined(_MSC_VER) && !defined(__clang__)
-#pragma message("get_device_info: querying memory_clock_rate and \
-        memory_bus_width are not supported by the compiler used. \
-        Use 3200000 kHz as memory_clock_rate default value. \
-        Use 64 bits as memory_bus_width default value.")
-#else
-#warning "get_device_info: querying memory_clock_rate and \
-        memory_bus_width are not supported by the compiler used. \
-        Use 3200000 kHz as memory_clock_rate default value. \
-        Use 64 bits as memory_bus_width default value."
-#endif
-
-        size_t max_sub_group_size = 1;
-        std::vector<size_t> sub_group_sizes =
-            dev.get_info<sycl::info::device::sub_group_sizes>();
-
-        for (const auto &sub_group_size : sub_group_sizes)
-        {
-            if (max_sub_group_size < sub_group_size)
-                max_sub_group_size = sub_group_size;
-        }
-
-        prop.set_max_sub_group_size(max_sub_group_size);
-
-        prop.set_max_work_items_per_compute_unit(
-            dev.get_info<sycl::info::device::max_work_group_size>());
-        int max_nd_range_size[] = {0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF};
-        prop.set_max_nd_range_size(max_nd_range_size);
-
-        // Estimates max register size per work group, feel free to update the value
-        // according to device properties.
-        prop.set_max_register_size_per_work_group(65536);
-
-        prop.set_global_mem_cache_size(
-            dev.get_info<sycl::info::device::global_mem_cache_size>());
-        out = prop;
-    }
-
-    /// dpct device extension
-    class device_ext : public sycl::device
-    {
-        typedef std::mutex mutex_type;
-
-    public:
-        device_ext() : sycl::device(), _ctx(*this) {}
-        ~device_ext()
-        {
-            std::lock_guard<mutex_type> lock(m_mutex);
-            clear_queues();
-        }
-        device_ext(const sycl::device &base) : sycl::device(base), _ctx(*this)
-        {
-            std::lock_guard<mutex_type> lock(m_mutex);
-            init_queues();
-        }
-
-        int is_native_atomic_supported() { return 0; }
-        int get_major_version() const
-        {
-            return dpct::get_major_version(*this);
-        }
-
-        int get_minor_version() const
-        {
-            return dpct::get_minor_version(*this);
-        }
-
-        int get_max_compute_units() const
-        {
-            return get_device_info().get_max_compute_units();
-        }
-
-        /// Return the maximum clock frequency of this device in KHz.
-        int get_max_clock_frequency() const
-        {
-            return get_device_info().get_max_clock_frequency();
-        }
-
-        int get_integrated() const { return get_device_info().get_integrated(); }
-
-        int get_max_sub_group_size() const
-        {
-            return get_device_info().get_max_sub_group_size();
-        }
-
-        int get_max_register_size_per_work_group() const
-        {
-            return get_device_info().get_max_register_size_per_work_group();
-        }
-
-        int get_max_work_group_size() const
-        {
-            return get_device_info().get_max_work_group_size();
-        }
-
-        int get_mem_base_addr_align() const
-        {
-            return get_info<sycl::info::device::mem_base_addr_align>();
-        }
-
-        size_t get_global_mem_size() const
-        {
-            return get_device_info().get_global_mem_size();
-        }
-
-        size_t get_max_mem_alloc_size() const
-        {
-            return get_device_info().get_max_mem_alloc_size();
-        }
-
-        /// Get the number of bytes of free and total memory on the SYCL device.
-        /// \param [out] free_memory The number of bytes of free memory on the SYCL device.
-        /// \param [out] total_memory The number of bytes of total memory on the SYCL device.
-        void get_memory_info(size_t &free_memory, size_t &total_memory)
-        {
-            total_memory = get_device_info().get_global_mem_size();
-            const char *warning_info = "get_memory_info: [warning] ext_intel_free_memory is not "
-                                 "supported (export/set ZES_ENABLE_SYSMAN=1 to support), "
-                                 "use total memory as free memory";
-#if (defined(__SYCL_COMPILER_VERSION) && __SYCL_COMPILER_VERSION >= 20221105)
-            if (!has(sycl::aspect::ext_intel_free_memory))
-            {
-                std::cerr << warning_info << std::endl;
-                free_memory = total_memory;
-            }
-            else
-            {
-                free_memory = get_info<sycl::ext::intel::info::device::free_memory>();
-            }
-#else
-            std::cerr << warning_info << std::endl;
-            free_memory = total_memory;
-#if defined(_MSC_VER) && !defined(__clang__)
-#pragma message("Querying the number of bytes of free memory is not supported")
-#else
-#warning "Querying the number of bytes of free memory is not supported"
-#endif
-#endif
-        }
-
-        void get_device_info(device_info &out) const
-        {
-            dpct::get_device_info(out, *this);
-        }
-
-        device_info get_device_info() const
-        {
-            device_info prop;
-            dpct::get_device_info(prop, *this);
-            return prop;
-        }
-
-        void reset()
-        {
-            std::lock_guard<mutex_type> lock(m_mutex);
-            clear_queues();
-            init_queues();
-        }
-
-        sycl::queue &in_order_queue() { return *_q_in_order; }
-
-        sycl::queue &out_of_order_queue() { return *_q_out_of_order; }
-
-        sycl::queue &default_queue()
-        {
-            return in_order_queue();
-        }
-
-        void queues_wait_and_throw()
-        {
-            std::unique_lock<mutex_type> lock(m_mutex);
-            std::vector<std::shared_ptr<sycl::queue>> current_queues(
-                _queues);
-            lock.unlock();
-            for (const auto &q : current_queues)
-            {
-                q->wait_and_throw();
-            }
-            // Guard the destruct of current_queues to make sure the ref count is safe.
-            lock.lock();
-        }
-
-        sycl::queue *create_queue(bool enable_exception_handler = false)
-        {
-            return create_in_order_queue(enable_exception_handler);
-        }
-
-        sycl::queue *create_queue(sycl::context context, sycl::device device,
-                                bool enable_exception_handler = false) {
-            return create_in_order_queue(context, device, enable_exception_handler);
-        }
-
-        sycl::queue *create_in_order_queue(bool enable_exception_handler = false) {
-            std::lock_guard<mutex_type> lock(m_mutex);
-            return create_queue_impl(enable_exception_handler,
-                                    sycl::property::queue::in_order());
-        }
-
-        sycl::queue *create_in_order_queue(sycl::context context, sycl::device device,
-                                        bool enable_exception_handler = false) {
-            std::lock_guard<mutex_type> lock(m_mutex);
-            return create_queue_impl(context, device, enable_exception_handler,
-                                    sycl::property::queue::in_order());
-        }
-
-        sycl::queue *create_out_of_order_queue(bool enable_exception_handler = false) {
-            std::lock_guard<mutex_type> lock(m_mutex);
-            return create_queue_impl(enable_exception_handler);
-        }
-
-        void destroy_queue(sycl::queue *&queue)
-        {
-            std::lock_guard<mutex_type> lock(m_mutex);
-            _queues.erase(std::remove_if(_queues.begin(), _queues.end(),
-                                         [=](const std::shared_ptr<sycl::queue> &q) -> bool
-                                         {
-                                             return q.get() == queue;
-                                         }),
-                          _queues.end());
-            queue = nullptr;
-        }
-        void set_saved_queue(sycl::queue *q)
-        {
-            std::lock_guard<mutex_type> lock(m_mutex);
-            _saved_queue = q;
-        }
-        sycl::queue *get_saved_queue() const
-        {
-            std::lock_guard<mutex_type> lock(m_mutex);
-            return _saved_queue;
-        }
-        sycl::context get_context() const { return _ctx; }
-
-    private:
-        void clear_queues()
-        {
-            _queues.clear();
-            _q_in_order = _q_out_of_order = _saved_queue = nullptr;
-        }
-
-        void init_queues()
-        {
-            _q_in_order = create_queue_impl(true, sycl::property::queue::in_order());
-            _q_out_of_order = create_queue_impl(true);
-            _saved_queue = &default_queue();
-        }
-
-        /// Caller should acquire resource \p m_mutex before calling this function.
-        template <class... Properties>
-        sycl::queue *create_queue_impl(bool enable_exception_handler,
-                                       Properties... properties)
-        {
-            sycl::async_handler eh = {};
-            if (enable_exception_handler)
-            {
-                eh = exception_handler;
-            }
-            _queues.push_back(std::make_shared<sycl::queue>(
-                _ctx, *this, eh,
-                sycl::property_list(
-#ifdef DPCT_PROFILING_ENABLED
-                    sycl::property::queue::enable_profiling(),
-#endif
-                    properties...)));
-
-            return _queues.back().get();
-        }
-
-        template <class... Properties>
-        sycl::queue *create_queue_impl(sycl::context context, sycl::device device,
-                                    bool enable_exception_handler,
-                                    Properties... properties) {
-            sycl::async_handler eh = {};
-            if (enable_exception_handler) {
-                eh = exception_handler;
-            }
-            _queues.push_back(std::make_shared<sycl::queue>(
-                context, device, eh,
-                sycl::property_list(
-        #ifdef DPCT_PROFILING_ENABLED
-                    sycl::property::queue::enable_profiling(),
-        #endif
-                    properties...)));
-
-            return _queues.back().get();
-        }
-
-        void get_version(int &major, int &minor) const
-        {
-            detail::get_version(*this, major, minor);
-        }
-        sycl::queue *_q_in_order, *_q_out_of_order;
-        sycl::queue *_saved_queue;
-        sycl::context _ctx;
-        std::vector<std::shared_ptr<sycl::queue>> _queues;
-        mutable mutex_type m_mutex;
-    };
-
-    /// device manager
-    class dev_mgr
-    {
-    public:
-        device_ext &current_device()
-        {
-            unsigned int dev_id = current_device_id();
-            check_id(dev_id);
-            return *_devs[dev_id];
-        }
-        device_ext &cpu_device() const
-        {
-            std::lock_guard<std::recursive_mutex> lock(m_mutex);
-            if (_cpu_device == -1)
-            {
-                throw std::runtime_error("no valid cpu device");
-            }
-            else
-            {
-                return *_devs[_cpu_device];
-            }
-        }
-        device_ext &get_device(unsigned int id) const
-        {
-            std::lock_guard<std::recursive_mutex> lock(m_mutex);
-            check_id(id);
-            return *_devs[id];
-        }
-        unsigned int current_device_id() const
-        {
-            std::lock_guard<std::recursive_mutex> lock(m_mutex);
-            auto it = _thread2dev_map.find(get_tid());
-            if (it != _thread2dev_map.end())
-                return it->second;
-            return DEFAULT_DEVICE_ID;
-        }
-
-        /// Select device with a device ID.
-        /// \param [in] id The id of the device which can
-        /// be obtained through get_device_id(const sycl::device).
-        void select_device(unsigned int id)
-        {
-            std::lock_guard<std::recursive_mutex> lock(m_mutex);
-            check_id(id);
-            _thread2dev_map[get_tid()] = id;
-        }
-        unsigned int device_count() { return _devs.size(); }
-
-        unsigned int get_device_id(const sycl::device &dev)
-        {
-            unsigned int id = 0;
-            for (auto dev_item : _devs)
-            {
-                if (*dev_item == dev)
-                {
-                    break;
-                }
-                id++;
-            }
-            return id;
-        }
-
-        template <class DeviceSelector>
-        std::enable_if_t<
-            std::is_invocable_r_v<int, DeviceSelector, const sycl::device &>>
-        select_device(const DeviceSelector &selector = sycl::gpu_selector_v)
-        {
-            sycl::device selected_device = sycl::device(selector);
-            unsigned int selected_device_id = get_device_id(selected_device);
-            select_device(selected_device_id);
-        }
-
-        /// Returns the instance of device manager singleton.
-        static dev_mgr &instance()
-        {
-            static dev_mgr d_m;
-            return d_m;
-        }
-        dev_mgr(const dev_mgr &) = delete;
-        dev_mgr &operator=(const dev_mgr &) = delete;
-        dev_mgr(dev_mgr &&) = delete;
-        dev_mgr &operator=(dev_mgr &&) = delete;
-
-    private:
-        mutable std::recursive_mutex m_mutex;
-        static bool compare_dev(sycl::device &device1, sycl::device &device2)
-        {
-            sycl::backend backend1 = device1.get_backend();
-            sycl::backend backend2 = device2.get_backend();
-            // levelzero backends always come first
-            if(backend1 == sycl::backend::ext_oneapi_level_zero && backend2 != sycl::backend::ext_oneapi_level_zero) return true;
-            if(backend1 != sycl::backend::ext_oneapi_level_zero && backend2 == sycl::backend::ext_oneapi_level_zero) return false;
-            dpct::device_info prop1;
-            dpct::get_device_info(prop1, device1);
-            dpct::device_info prop2;
-            dpct::get_device_info(prop2, device2);
-            return prop1.get_max_compute_units() > prop2.get_max_compute_units();
-        }
-        static int convert_backend_index(std::string & backend) {
-            if (backend == "ext_oneapi_level_zero:gpu") return 0;
-            if (backend == "opencl:gpu") return 1;
-            if (backend == "ext_oneapi_cuda:gpu") return 2;
-            if (backend == "ext_oneapi_hip:gpu") return 3;
-            if (backend == "opencl:cpu") return 4;
-            if (backend == "opencl:acc") return 5;
-            printf("convert_backend_index: can't handle backend=%s\n", backend.c_str());
-            GGML_ASSERT(false);
-        }
-        static bool compare_backend(std::string &backend1, std::string &backend2) {
-            return convert_backend_index(backend1) < convert_backend_index(backend2);
-        }
-        dev_mgr()
-        {
-            sycl::device default_device =
-                sycl::device(sycl::default_selector_v);
-            _devs.push_back(std::make_shared<device_ext>(default_device));
-
-            std::vector<sycl::device> sycl_all_devs;
-            // Collect other devices except for the default device.
-            if (default_device.is_cpu())
-                _cpu_device = 0;
-
-            auto Platforms = sycl::platform::get_platforms();
-            // Keep track of the number of devices per backend
-            std::map<sycl::backend, size_t> DeviceNums;
-            std::map<std::string, std::vector<sycl::device>> backend_devices;
-
-            while (!Platforms.empty()) {
-                auto Platform = Platforms.back();
-                Platforms.pop_back();
-                auto devices = Platform.get_devices();
-                std::string backend_type = get_device_backend_and_type(devices[0]);
-                for (const auto &device : devices) {
-                    backend_devices[backend_type].push_back(device);
-                }
-            }
-
-            std::vector<std::string> keys;
-            for(auto it = backend_devices.begin(); it != backend_devices.end(); ++it) {
-                keys.push_back(it->first);
-            }
-            std::sort(keys.begin(), keys.end(), compare_backend);
-
-            for (auto &key : keys) {
-                std::vector<sycl::device> devs = backend_devices[key];
-                std::sort(devs.begin(), devs.end(), compare_dev);
-                for (const auto &dev : devs) {
-                    sycl_all_devs.push_back(dev);
-                }
-            }
-
-            for (auto &dev : sycl_all_devs)
-            {
-                if (dev == default_device)
-                {
-                    continue;
-                }
-                _devs.push_back(std::make_shared<device_ext>(dev));
-                if (_cpu_device == -1 && dev.is_cpu())
-                {
-                    _cpu_device = _devs.size() - 1;
-                }
-            }
-        }
-        void check_id(unsigned int id) const
-        {
-            if (id >= _devs.size())
-            {
-                throw std::runtime_error("invalid device id");
-            }
-        }
-        std::vector<std::shared_ptr<device_ext>> _devs;
-        /// DEFAULT_DEVICE_ID is used, if current_device_id() can not find current
-        /// thread id in _thread2dev_map, which means default device should be used
-        /// for the current thread.
-        const unsigned int DEFAULT_DEVICE_ID = 0;
-        /// thread-id to device-id map.
-        std::map<unsigned int, unsigned int> _thread2dev_map;
-        int _cpu_device = -1;
-    };
-
-    static inline sycl::queue &get_default_queue()
-    {
-        return dev_mgr::instance().current_device().default_queue();
-    }
-
-    namespace detail
-    {
-        enum class pointer_access_attribute
-        {
-            host_only = 0,
-            device_only,
-            host_device,
-            end
-        };
-
-        static pointer_access_attribute get_pointer_attribute(sycl::queue &q,
-                                                              const void *ptr)
-        {
-            switch (sycl::get_pointer_type(ptr, q.get_context()))
-            {
-            case sycl::usm::alloc::unknown:
-                return pointer_access_attribute::host_only;
-            case sycl::usm::alloc::device:
-                return pointer_access_attribute::device_only;
-            case sycl::usm::alloc::shared:
-            case sycl::usm::alloc::host:
-                return pointer_access_attribute::host_device;
-            }
-        }
-
-        template <typename ArgT>
-        inline constexpr std::uint64_t get_type_combination_id(ArgT Val)
-        {
-            static_assert((unsigned char)library_data_t::library_data_t_size <=
-                              std::numeric_limits<unsigned char>::max() &&
-                          "library_data_t size exceeds limit.");
-            static_assert(std::is_same_v<ArgT, library_data_t>, "Unsupported ArgT");
-            return (std::uint64_t)Val;
-        }
-
-        template <typename FirstT, typename... RestT>
-        inline constexpr std::uint64_t get_type_combination_id(FirstT FirstVal,
-                                                               RestT... RestVal)
-        {
-            static_assert((std::uint8_t)library_data_t::library_data_t_size <=
-                              std::numeric_limits<unsigned char>::max() &&
-                          "library_data_t size exceeds limit.");
-            static_assert(sizeof...(RestT) <= 8 && "Too many parameters");
-            static_assert(std::is_same_v<FirstT, library_data_t>, "Unsupported FirstT");
-            return get_type_combination_id(RestVal...) << 8 | ((std::uint64_t)FirstVal);
-        }
-
-        class mem_mgr
-        {
-            mem_mgr()
-            {
-                // Reserved address space, no real memory allocation happens here.
-#if defined(__linux__)
-                mapped_address_space =
-                    (byte_t *)mmap(nullptr, mapped_region_size, PROT_NONE,
-                                   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
-#elif defined(_WIN64)
-                mapped_address_space = (byte_t *)VirtualAlloc(
-                    NULL,               // NULL specified as the base address parameter
-                    mapped_region_size, // Size of allocation
-                    MEM_RESERVE,        // Allocate reserved pages
-                    PAGE_NOACCESS);     // Protection = no access
-#else
-#error "Only support Windows and Linux."
-#endif
-                next_free = mapped_address_space;
-            };
-
-        public:
-            using buffer_id_t = int;
-
-            struct allocation
-            {
-                buffer_t buffer;
-                byte_t *alloc_ptr;
-                size_t size;
-            };
-
-            ~mem_mgr()
-            {
-#if defined(__linux__)
-                munmap(mapped_address_space, mapped_region_size);
-#elif defined(_WIN64)
-                VirtualFree(mapped_address_space, 0, MEM_RELEASE);
-#else
-#error "Only support Windows and Linux."
-#endif
-            };
-
-            mem_mgr(const mem_mgr &) = delete;
-            mem_mgr &operator=(const mem_mgr &) = delete;
-            mem_mgr(mem_mgr &&) = delete;
-            mem_mgr &operator=(mem_mgr &&) = delete;
-
-            /// Allocate
-            void *mem_alloc(size_t size)
-            {
-                if (!size)
-                    return nullptr;
-                std::lock_guard<std::mutex> lock(m_mutex);
-                if (next_free + size > mapped_address_space + mapped_region_size)
-                {
-                    throw std::runtime_error("dpct_malloc: out of memory for virtual memory pool");
-                }
-                // Allocation
-                sycl::range<1> r(size);
-                buffer_t buf(r);
-                allocation A{buf, next_free, size};
-                // Map allocation to device pointer
-                void *result = next_free;
-                m_map.emplace(next_free + size, A);
-                // Update pointer to the next free space.
-                next_free += (size + extra_padding + alignment - 1) & ~(alignment - 1);
-
-                return result;
-            }
-
-            /// Deallocate
-            void mem_free(const void *ptr)
-            {
-                if (!ptr)
-                    return;
-                std::lock_guard<std::mutex> lock(m_mutex);
-                auto it = get_map_iterator(ptr);
-                m_map.erase(it);
-            }
-
-            /// map: device pointer -> allocation(buffer, alloc_ptr, size)
-            allocation translate_ptr(const void *ptr)
-            {
-                std::lock_guard<std::mutex> lock(m_mutex);
-                auto it = get_map_iterator(ptr);
-                return it->second;
-            }
-
-            /// Check if the pointer represents device pointer or not.
-            bool is_device_ptr(const void *ptr) const
-            {
-                std::lock_guard<std::mutex> lock(m_mutex);
-                return (mapped_address_space <= ptr) &&
-                       (ptr < mapped_address_space + mapped_region_size);
-            }
-
-            /// Returns the instance of memory manager singleton.
-            static mem_mgr &instance()
-            {
-                static mem_mgr m;
-                return m;
-            }
-
-        private:
-            std::map<byte_t *, allocation> m_map;
-            mutable std::mutex m_mutex;
-            byte_t *mapped_address_space;
-            byte_t *next_free;
-            const size_t mapped_region_size = 128ull * 1024 * 1024 * 1024;
-            const size_t alignment = 256;
-            /// This padding may be defined to some positive value to debug
-            /// out of bound accesses.
-            const size_t extra_padding = 0;
-
-            std::map<byte_t *, allocation>::iterator get_map_iterator(const void *ptr)
-            {
-                auto it = m_map.upper_bound((byte_t *)ptr);
-                if (it == m_map.end())
-                {
-                    // Not a virtual pointer.
-                    throw std::runtime_error("can not get buffer from non-virtual pointer");
-                }
-                const allocation &alloc = it->second;
-                if (ptr < alloc.alloc_ptr)
-                {
-                    // Out of bound.
-                    // This may happen if there's a gap between allocations due to alignment
-                    // or extra padding and pointer points to this gap.
-                    throw std::runtime_error("invalid virtual pointer");
-                }
-                return it;
-            }
-        };
-
-        template <class T, memory_region Memory, size_t Dimension>
-        class accessor;
-        template <memory_region Memory, class T = byte_t>
-        class memory_traits
-        {
-        public:
-            static constexpr sycl::access::target target =
-                sycl::access::target::device;
-            static constexpr sycl::access_mode mode =
-                (Memory == constant) ? sycl::access_mode::read
-                                     : sycl::access_mode::read_write;
-            static constexpr size_t type_size = sizeof(T);
-            using element_t =
-                typename std::conditional<Memory == constant, const T, T>::type;
-            using value_t = typename std::remove_cv<T>::type;
-            template <size_t Dimension = 1>
-            using accessor_t = typename std::conditional<
-                Memory == local, sycl::local_accessor<value_t, Dimension>,
-                sycl::accessor<T, Dimension, mode, target>>::type;
-            using pointer_t = T *;
-        };
-
-        static inline void *dpct_malloc(size_t size, sycl::queue &q)
-        {
-            return sycl::malloc_device(size, q.get_device(), q.get_context());
-        }
-
-#define PITCH_DEFAULT_ALIGN(x) (((x) + 31) & ~(0x1F))
-        static inline void *dpct_malloc(size_t &pitch, size_t x, size_t y, size_t z,
-                                        sycl::queue &q)
-        {
-            pitch = PITCH_DEFAULT_ALIGN(x);
-            return dpct_malloc(pitch * y * z, q);
-        }
-
-        /**
-         * @brief Sets \p value to the first \p size elements starting from \p dev_ptr in \p q.
-         * @tparam valueT The type of the element to be set.
-         * @param [in] q The queue in which the operation is done.
-         * @param [in] dev_ptr Pointer to the virtual device memory address.
-         * @param [in] value The value to be set.
-         * @param [in] size Number of elements to be set to the value.
-         * @return An event representing the memset operation.
-         */
-        template <typename valueT>
-        static inline sycl::event dpct_memset(sycl::queue &q, void *dev_ptr,
-                                              valueT value, size_t size)
-        {
-            return q.fill(dev_ptr, value, size);
-        }
-
-        /**
-         * @brief Sets \p value to the 3D memory region pointed by \p data in \p q.
-         * @tparam valueT The type of the element to be set.
-         * @param [in] q The queue in which the operation is done.
-         * @param [in] data Pointer to the pitched device memory region.
-         * @param [in] value The value to be set.
-         * @param [in] size 3D memory region by number of elements.
-         * @return An event list representing the memset operations.
-         */
-        template <typename valueT>
-        static inline std::vector<sycl::event>
-        dpct_memset(sycl::queue &q, pitched_data data, valueT value,
-                    sycl::range<3> size)
-        {
-            std::vector<sycl::event> event_list;
-            size_t slice = data.get_pitch() * data.get_y();
-            unsigned char *data_surface = (unsigned char *)data.get_data_ptr();
-            for (size_t z = 0; z < size.get(2); ++z)
-            {
-                unsigned char *data_ptr = data_surface;
-                for (size_t y = 0; y < size.get(1); ++y)
-                {
-                    event_list.push_back(dpct_memset(q, data_ptr, value, size.get(0)));
-                    data_ptr += data.get_pitch();
-                }
-                data_surface += slice;
-            }
-            return event_list;
-        }
-
-        /**
-         * @brief Sets \p val to the pitched 2D memory region pointed by \p ptr in \p q.
-         * @tparam valueT The type of the element to be set.
-         * @param [in] q The queue in which the operation is done.
-         * @param [in] ptr Pointer to the virtual device memory.
-         * @param [in] pitch The pitch size by number of elements, including padding.
-         * @param [in] val The value to be set.
-         * @param [in] x The width of memory region by number of elements.
-         * @param [in] y The height of memory region by number of elements.
-         * @return An event list representing the memset operations.
-         */
-        template <typename valueT>
-        static inline std::vector<sycl::event>
-        dpct_memset(sycl::queue &q, void *ptr, size_t pitch, valueT val, size_t x,
-                    size_t y)
-        {
-            return dpct_memset(q, pitched_data(ptr, pitch, x, 1), val,
-                               sycl::range<3>(x, y, 1));
-        }
-
-        static memcpy_direction deduce_memcpy_direction(sycl::queue &q, void *to_ptr,
-                                                        const void *from_ptr,
-                                                        memcpy_direction dir)
-        {
-            switch (dir)
-            {
-            case memcpy_direction::host_to_host:
-            case memcpy_direction::host_to_device:
-            case memcpy_direction::device_to_host:
-            case memcpy_direction::device_to_device:
-                return dir;
-            case memcpy_direction::automatic:
-            {
-                // table[to_attribute][from_attribute]
-                static const memcpy_direction
-                    direction_table[static_cast<unsigned>(pointer_access_attribute::end)]
-                                   [static_cast<unsigned>(pointer_access_attribute::end)] =
-                                       {{memcpy_direction::host_to_host,
-                                         memcpy_direction::device_to_host,
-                                         memcpy_direction::host_to_host},
-                                        {memcpy_direction::host_to_device,
-                                         memcpy_direction::device_to_device,
-                                         memcpy_direction::device_to_device},
-                                        {memcpy_direction::host_to_host,
-                                         memcpy_direction::device_to_device,
-                                         memcpy_direction::device_to_device}};
-                return direction_table[static_cast<unsigned>(get_pointer_attribute(
-                    q, to_ptr))][static_cast<unsigned>(get_pointer_attribute(q, from_ptr))];
-            }
-            default:
-                throw std::runtime_error("dpct_memcpy: invalid direction value");
-            }
-        }
-
-        static sycl::event
-        dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr, size_t size,
-                    memcpy_direction direction,
-                    const std::vector<sycl::event> &dep_events = {})
-        {
-            if (!size)
-                return sycl::event{};
-            return q.memcpy(to_ptr, from_ptr, size, dep_events);
-            GGML_UNUSED(direction);
-        }
-
-        // Get actual copy range and make sure it will not exceed range.
-        static inline size_t get_copy_range(sycl::range<3> size, size_t slice,
-                                            size_t pitch)
-        {
-            return slice * (size.get(2) - 1) + pitch * (size.get(1) - 1) + size.get(0);
-        }
-
-        static inline size_t get_offset(sycl::id<3> id, size_t slice,
-                                        size_t pitch)
-        {
-            return slice * id.get(2) + pitch * id.get(1) + id.get(0);
-        }
-
-        /// copy 3D matrix specified by \p size from 3D matrix specified by \p from_ptr
-        /// and \p from_range to another specified by \p to_ptr and \p to_range.
-        static inline std::vector<sycl::event>
-        dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr,
-                    sycl::range<3> to_range, sycl::range<3> from_range,
-                    sycl::id<3> to_id, sycl::id<3> from_id,
-                    sycl::range<3> size, memcpy_direction direction,
-                    const std::vector<sycl::event> &dep_events = {})
-        {
-            // RAII for host pointer
-            class host_buffer
-            {
-                void *_buf;
-                size_t _size;
-                sycl::queue &_q;
-                const std::vector<sycl::event> &_deps; // free operation depends
-
-            public:
-                host_buffer(size_t size, sycl::queue &q,
-                            const std::vector<sycl::event> &deps)
-                    : _buf(std::malloc(size)), _size(size), _q(q), _deps(deps) {}
-                void *get_ptr() const { return _buf; }
-                size_t get_size() const { return _size; }
-                ~host_buffer()
-                {
-                    if (_buf)
-                    {
-                        _q.submit([&](sycl::handler &cgh)
-                                  {
-        cgh.depends_on(_deps);
-        cgh.host_task([buf = _buf] { std::free(buf); }); });
-                    }
-                }
-            };
-            std::vector<sycl::event> event_list;
-
-            size_t to_slice = to_range.get(1) * to_range.get(0),
-                   from_slice = from_range.get(1) * from_range.get(0);
-            unsigned char *to_surface =
-                (unsigned char *)to_ptr + get_offset(to_id, to_slice, to_range.get(0));
-            const unsigned char *from_surface =
-                (const unsigned char *)from_ptr +
-                get_offset(from_id, from_slice, from_range.get(0));
-
-            if (to_slice == from_slice && to_slice == size.get(1) * size.get(0))
-            {
-                return {dpct_memcpy(q, to_surface, from_surface, to_slice * size.get(2),
-                                    direction, dep_events)};
-            }
-            direction = deduce_memcpy_direction(q, to_ptr, from_ptr, direction);
-            size_t size_slice = size.get(1) * size.get(0);
-            switch (direction)
-            {
-            case host_to_host:
-                for (size_t z = 0; z < size.get(2); ++z)
-                {
-                    unsigned char *to_ptr = to_surface;
-                    const unsigned char *from_ptr = from_surface;
-                    if (to_range.get(0) == from_range.get(0) &&
-                        to_range.get(0) == size.get(0))
-                    {
-                        event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size_slice,
-                                                         direction, dep_events));
-                    }
-                    else
-                    {
-                        for (size_t y = 0; y < size.get(1); ++y)
-                        {
-                            event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size.get(0),
-                                                             direction, dep_events));
-                            to_ptr += to_range.get(0);
-                            from_ptr += from_range.get(0);
-                        }
-                    }
-                    to_surface += to_slice;
-                    from_surface += from_slice;
-                }
-                break;
-            case host_to_device:
-            {
-                host_buffer buf(get_copy_range(size, to_slice, to_range.get(0)), q,
-                                event_list);
-                std::vector<sycl::event> host_events;
-                if (to_slice == size_slice)
-                {
-                    // Copy host data to a temp host buffer with the shape of target.
-                    host_events =
-                        dpct_memcpy(q, buf.get_ptr(), from_surface, to_range, from_range,
-                                    sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size,
-                                    host_to_host, dep_events);
-                }
-                else
-                {
-                    // Copy host data to a temp host buffer with the shape of target.
-                    host_events = dpct_memcpy(
-                        q, buf.get_ptr(), from_surface, to_range, from_range,
-                        sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size, host_to_host,
-                        // If has padding data, not sure whether it is useless. So fill temp
-                        // buffer with it.
-                        std::vector<sycl::event>{
-                            dpct_memcpy(q, buf.get_ptr(), to_surface, buf.get_size(),
-                                        device_to_host, dep_events)});
-                }
-                // Copy from temp host buffer to device with only one submit.
-                event_list.push_back(dpct_memcpy(q, to_surface, buf.get_ptr(),
-                                                 buf.get_size(), host_to_device,
-                                                 host_events));
-                break;
-            }
-            case device_to_host:
-            {
-                host_buffer buf(get_copy_range(size, from_slice, from_range.get(0)), q,
-                                event_list);
-                // Copy from host temp buffer to host target with reshaping.
-                event_list = dpct_memcpy(
-                    q, to_surface, buf.get_ptr(), to_range, from_range, sycl::id<3>(0, 0, 0),
-                    sycl::id<3>(0, 0, 0), size, host_to_host,
-                    // Copy from device to temp host buffer with only one submit.
-                    std::vector<sycl::event>{dpct_memcpy(q, buf.get_ptr(), from_surface,
-                                                         buf.get_size(),
-                                                         device_to_host, dep_events)});
-                break;
-            }
-            case device_to_device:
-                event_list.push_back(q.submit([&](sycl::handler &cgh){
-                cgh.depends_on(dep_events);
-                cgh.parallel_for<class dpct_memcpy_3d_detail>(
-                    size,
-                    [=](sycl::id<3> id) {
-                        to_surface[get_offset(id, to_slice, to_range.get(0))] =
-                            from_surface[get_offset(id, from_slice, from_range.get(0))];
-                    }); }));
-                break;
-            default:
-                throw std::runtime_error("dpct_memcpy: invalid direction value");
-            }
-            return event_list;
-        }
-
-        /// memcpy 2D/3D matrix specified by pitched_data.
-        static inline std::vector<sycl::event>
-        dpct_memcpy(sycl::queue &q, pitched_data to, sycl::id<3> to_id,
-                    pitched_data from, sycl::id<3> from_id, sycl::range<3> size,
-                    memcpy_direction direction = automatic)
-        {
-            return dpct_memcpy(q, to.get_data_ptr(), from.get_data_ptr(),
-                               sycl::range<3>(to.get_pitch(), to.get_y(), 1),
-                               sycl::range<3>(from.get_pitch(), from.get_y(), 1), to_id, from_id,
-                               size, direction);
-        }
-
-        /// memcpy 2D matrix with pitch.
-        static inline std::vector<sycl::event>
-        dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr,
-                    size_t to_pitch, size_t from_pitch, size_t x, size_t y,
-                    memcpy_direction direction = automatic)
-        {
-            return dpct_memcpy(q, to_ptr, from_ptr, sycl::range<3>(to_pitch, y, 1),
-                               sycl::range<3>(from_pitch, y, 1),
-                               sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0),
-                               sycl::range<3>(x, y, 1), direction);
-        }
-
-        namespace deprecated
-        {
-
-            template <typename T, sycl::usm::alloc AllocKind>
-            class usm_allocator
-            {
-            private:
-                using Alloc = sycl::usm_allocator<T, AllocKind>;
-                Alloc _impl;
-
-            public:
-                using value_type = typename std::allocator_traits<Alloc>::value_type;
-                using pointer = typename std::allocator_traits<Alloc>::pointer;
-                using const_pointer = typename std::allocator_traits<Alloc>::const_pointer;
-                using void_pointer = typename std::allocator_traits<Alloc>::void_pointer;
-                using const_void_pointer =
-                    typename std::allocator_traits<Alloc>::const_void_pointer;
-                using reference = typename std::allocator_traits<Alloc>::value_type &;
-                using const_reference =
-                    const typename std::allocator_traits<Alloc>::value_type &;
-                using difference_type =
-                    typename std::allocator_traits<Alloc>::difference_type;
-                using size_type = typename std::allocator_traits<Alloc>::size_type;
-                using propagate_on_container_copy_assignment = typename std::allocator_traits<
-                    Alloc>::propagate_on_container_copy_assignment;
-                using propagate_on_container_move_assignment = typename std::allocator_traits<
-                    Alloc>::propagate_on_container_move_assignment;
-                using propagate_on_container_swap =
-                    typename std::allocator_traits<Alloc>::propagate_on_container_swap;
-                using is_always_equal =
-                    typename std::allocator_traits<Alloc>::is_always_equal;
-
-                template <typename U>
-                struct rebind
-                {
-                    typedef usm_allocator<U, AllocKind> other;
-                };
-
-                usm_allocator() : _impl(dpct::get_default_queue()) {}
-                ~usm_allocator() {}
-                usm_allocator(const usm_allocator &other) : _impl(other._impl) {}
-                usm_allocator(usm_allocator &&other) : _impl(std::move(other._impl)) {}
-                pointer address(reference r) { return &r; }
-                const_pointer address(const_reference r) { return &r; }
-                pointer allocate(size_type cnt, const_void_pointer hint = nullptr)
-                {
-                    return std::allocator_traits<Alloc>::allocate(_impl, cnt, hint);
-                }
-                void deallocate(pointer p, size_type cnt)
-                {
-                    std::allocator_traits<Alloc>::deallocate(_impl, p, cnt);
-                }
-                size_type max_size() const
-                {
-                    return std::allocator_traits<Alloc>::max_size(_impl);
-                }
-                bool operator==(const usm_allocator &other) const { return _impl == other._impl; }
-                bool operator!=(const usm_allocator &other) const { return _impl != other._impl; }
-            };
-
-        } // namespace deprecated
-
-        inline void dpct_free(void *ptr,
-                              const sycl::queue &q)
-        {
-            if (ptr)
-            {
-                sycl::free(ptr, q.get_context());
-            }
-        }
-
-        template <typename T>
-        inline auto get_memory(const void *x)
-        {
-            T *new_x = reinterpret_cast<T *>(const_cast<void *>(x));
-            return new_x;
-        }
-
-        template <typename T>
-        inline typename DataType<T>::T2 get_value(const T *s, sycl::queue &q)
-        {
-            using Ty = typename DataType<T>::T2;
-            Ty s_h;
-            if (get_pointer_attribute(q, s) == pointer_access_attribute::device_only)
-                detail::dpct_memcpy(q, (void *)&s_h, (const void *)s, sizeof(T), device_to_host)
-                    .wait();
-            else
-                s_h = *reinterpret_cast<const Ty *>(s);
-            return s_h;
-        }
-
-    } // namespace detail
-
-    template <typename T>
-    inline auto get_value(const T *s, sycl::queue &q)
-    {
-        return detail::get_value(s, q);
-    }
-
-    namespace detail
-    {
-        template <class Ta, class Tb, class Tc, class Ts>
-        inline void gemm_impl(sycl::queue &q, oneapi::mkl::transpose a_trans,
-                              oneapi::mkl::transpose b_trans, int m, int n, int k,
-                              const void *alpha, const void *a, int lda, const void *b,
-                              int ldb, const void *beta, void *c, int ldc)
-        {
-            Ts alpha_value = dpct::get_value(reinterpret_cast<const Ts *>(alpha), q);
-            Ts beta_value = dpct::get_value(reinterpret_cast<const Ts *>(beta), q);
-            auto data_a = get_memory<const Ta>(a);
-            auto data_b = get_memory<const Tb>(b);
-            auto data_c = get_memory<Tc>(c);
-            oneapi::mkl::blas::column_major::gemm(
-                q, a_trans, b_trans, m, n, k, alpha_value, data_a, lda,
-                data_b, ldb, beta_value, data_c, ldc);
-        }
-
-        template <typename VecT, class BinaryOperation, class = void>
-        class vectorized_binary
-        {
-        public:
-            inline VecT operator()(VecT a, VecT b, const BinaryOperation binary_op)
-            {
-                VecT v4;
-                for (size_t i = 0; i < v4.size(); ++i)
-                {
-                    v4[i] = binary_op(a[i], b[i]);
-                }
-                return v4;
-            }
-        };
-
-        template <typename VecT, class BinaryOperation>
-        class vectorized_binary<
-            VecT, BinaryOperation,
-            std::void_t<std::invoke_result_t<BinaryOperation, VecT, VecT>>>
-        {
-        public:
-            inline VecT operator()(VecT a, VecT b, const BinaryOperation binary_op)
-            {
-                return binary_op(a, b).template as<VecT>();
-            }
-        };
-
-        template <class Ta, class Tb, class Tc, class Ts>
-        inline void gemm_batch_impl(sycl::queue &q, oneapi::mkl::transpose a_trans,
-                                    oneapi::mkl::transpose b_trans, int m, int n, int k,
-                                    const void *alpha, const void **a, int lda,
-                                    const void **b, int ldb, const void *beta, void **c,
-                                    int ldc, int batch_size)
-        {
-            struct matrix_info_t
-            {
-                oneapi::mkl::transpose transpose_info[2];
-                Ts value_info[2];
-                std::int64_t size_info[3];
-                std::int64_t ld_info[3];
-                std::int64_t groupsize_info;
-            };
-
-            Ts alpha_value = dpct::get_value(reinterpret_cast<const Ts *>(alpha), q);
-            Ts beta_value = dpct::get_value(reinterpret_cast<const Ts *>(beta), q);
-
-            matrix_info_t *matrix_info =
-                (matrix_info_t *)std::malloc(sizeof(matrix_info_t));
-            matrix_info->transpose_info[0] = a_trans;
-            matrix_info->transpose_info[1] = b_trans;
-            matrix_info->value_info[0] = alpha_value;
-            matrix_info->value_info[1] = beta_value;
-            matrix_info->size_info[0] = m;
-            matrix_info->size_info[1] = n;
-            matrix_info->size_info[2] = k;
-            matrix_info->ld_info[0] = lda;
-            matrix_info->ld_info[1] = ldb;
-            matrix_info->ld_info[2] = ldc;
-            matrix_info->groupsize_info = batch_size;
-
-            sycl::event e = oneapi::mkl::blas::column_major::gemm_batch(
-                q, matrix_info->transpose_info, matrix_info->transpose_info + 1,
-                matrix_info->size_info, matrix_info->size_info + 1,
-                matrix_info->size_info + 2, matrix_info->value_info,
-                reinterpret_cast<const Ta **>(a), matrix_info->ld_info,
-                reinterpret_cast<const Tb **>(b), matrix_info->ld_info + 1,
-                matrix_info->value_info + 1, reinterpret_cast<Tc **>(c),
-                matrix_info->ld_info + 2, 1, &(matrix_info->groupsize_info));
-
-            q.submit([&](sycl::handler &cgh)
-                     {
-    cgh.depends_on(e);
-    cgh.host_task([=] { std::free(matrix_info); }); });
-        }
-
-        template <class Ta, class Tb, class Tc, class Ts>
-        inline void
-        gemm_batch_impl(sycl::queue &q, oneapi::mkl::transpose a_trans,
-                        oneapi::mkl::transpose b_trans, int m, int n,
-                        int k, const void *alpha, const void *a, int lda,
-                        long long int stride_a, const void *b, int ldb,
-                        long long int stride_b, const void *beta, void *c,
-                        int ldc, long long int stride_c, int batch_size)
-        {
-            Ts alpha_value = dpct::get_value(reinterpret_cast<const Ts *>(alpha), q);
-            Ts beta_value = dpct::get_value(reinterpret_cast<const Ts *>(beta), q);
-            auto data_a = get_memory<const Ta>(a);
-            auto data_b = get_memory<const Tb>(b);
-            auto data_c = get_memory<Tc>(c);
-            oneapi::mkl::blas::column_major::gemm_batch(
-                q, a_trans, b_trans, m, n, k, alpha_value, data_a, lda,
-                stride_a, data_b, ldb, stride_b, beta_value,
-                data_c, ldc, stride_c, batch_size);
-        }
-
-    } // namespace detail
-
-    template <typename VecT, class BinaryOperation>
-    inline unsigned vectorized_binary(unsigned a, unsigned b,
-                                      const BinaryOperation binary_op)
-    {
-        sycl::vec<unsigned, 1> v0{a}, v1{b};
-        auto v2 = v0.as<VecT>();
-        auto v3 = v1.as<VecT>();
-        auto v4 =
-            detail::vectorized_binary<VecT, BinaryOperation>()(v2, v3, binary_op);
-        v0 = v4.template as<sycl::vec<unsigned, 1>>();
-        return v0;
-    }
-
-    static void async_dpct_memcpy(void *to_ptr, const void *from_ptr, size_t size,
-                                  memcpy_direction direction = automatic,
-                                  sycl::queue &q = dpct::get_default_queue())
-    {
-        detail::dpct_memcpy(q, to_ptr, from_ptr, size, direction);
-    }
-
-    static inline unsigned int select_device(unsigned int id)
-    {
-        dev_mgr::instance().select_device(id);
-        return id;
-    }
-
-    template <typename T>
-    T permute_sub_group_by_xor(sycl::sub_group g, T x, unsigned int mask,
-                               unsigned int logical_sub_group_size = 32)
-    {
-        unsigned int id = g.get_local_linear_id();
-        unsigned int start_index =
-            id / logical_sub_group_size * logical_sub_group_size;
-        unsigned int target_offset = (id % logical_sub_group_size) ^ mask;
-        return sycl::select_from_group(g, x,
-                                       target_offset < logical_sub_group_size
-                                           ? start_index + target_offset
-                                           : id);
-    }
-
-    template <typename T>
-    sycl::vec<T, 4> extract_and_sign_or_zero_extend4(T val)
-    {
-        return sycl::vec<T, 1>(val)
-            .template as<sycl::vec<
-                std::conditional_t<std::is_signed_v<T>, int8_t, uint8_t>, 4>>()
-            .template convert<T>();
-    }
-
-    template <typename T1, typename T2>
-    using dot_product_acc_t =
-        std::conditional_t<std::is_unsigned_v<T1> && std::is_unsigned_v<T2>,
-                           uint32_t, int32_t>;
-
-    template <typename T1, typename T2, typename T3>
-    inline auto dp4a(T1 a, T2 b, T3 c)
-    {
-        dot_product_acc_t<T1, T2> res = c;
-        auto va = extract_and_sign_or_zero_extend4(a);
-        auto vb = extract_and_sign_or_zero_extend4(b);
-        res += va[0] * vb[0];
-        res += va[1] * vb[1];
-        res += va[2] * vb[2];
-        res += va[3] * vb[3];
-        return res;
-    }
-
-    struct sub_sat
-    {
-        template <typename T>
-        auto operator()(const T x, const T y) const
-        {
-            return sycl::sub_sat(x, y);
-        }
-    };
-
-    template <typename S, typename T>
-    inline T vectorized_min(T a, T b)
-    {
-        sycl::vec<T, 1> v0{a}, v1{b};
-        auto v2 = v0.template as<S>();
-        auto v3 = v1.template as<S>();
-        auto v4 = sycl::min(v2, v3);
-        v0 = v4.template as<sycl::vec<T, 1>>();
-        return v0;
-    }
-
-    inline float pow(const float a, const int b) { return sycl::pown(a, b); }
-    inline double pow(const double a, const int b) { return sycl::pown(a, b); }
-    inline float pow(const float a, const float b) { return sycl::pow(a, b); }
-    inline double pow(const double a, const double b) { return sycl::pow(a, b); }
-    template <typename T, typename U>
-    inline typename std::enable_if_t<std::is_floating_point_v<T>, T>
-    pow(const T a, const U b)
-    {
-        return sycl::pow(a, static_cast<T>(b));
-    }
-    template <typename T, typename U>
-    inline typename std::enable_if_t<!std::is_floating_point_v<T>, double>
-    pow(const T a, const U b)
-    {
-        return sycl::pow(static_cast<double>(a), static_cast<double>(b));
-    }
-
-    inline double min(const double a, const float b)
-    {
-        return sycl::fmin(a, static_cast<double>(b));
-    }
-    inline double min(const float a, const double b)
-    {
-        return sycl::fmin(static_cast<double>(a), b);
-    }
-    inline float min(const float a, const float b) { return sycl::fmin(a, b); }
-    inline double min(const double a, const double b) { return sycl::fmin(a, b); }
-    inline std::uint32_t min(const std::uint32_t a, const std::int32_t b)
-    {
-        return sycl::min(a, static_cast<std::uint32_t>(b));
-    }
-    inline std::uint32_t min(const std::int32_t a, const std::uint32_t b)
-    {
-        return sycl::min(static_cast<std::uint32_t>(a), b);
-    }
-    inline std::int32_t min(const std::int32_t a, const std::int32_t b)
-    {
-        return sycl::min(a, b);
-    }
-    inline std::uint32_t min(const std::uint32_t a, const std::uint32_t b)
-    {
-        return sycl::min(a, b);
-    }
-    inline std::uint64_t min(const std::uint64_t a, const std::int64_t b)
-    {
-        return sycl::min(a, static_cast<std::uint64_t>(b));
-    }
-    inline std::uint64_t min(const std::int64_t a, const std::uint64_t b)
-    {
-        return sycl::min(static_cast<std::uint64_t>(a), b);
-    }
-    inline std::int64_t min(const std::int64_t a, const std::int64_t b)
-    {
-        return sycl::min(a, b);
-    }
-    inline std::uint64_t min(const std::uint64_t a, const std::uint64_t b)
-    {
-        return sycl::min(a, b);
-    }
-    inline std::uint64_t min(const std::uint64_t a, const std::int32_t b)
-    {
-        return sycl::min(a, static_cast<std::uint64_t>(b));
-    }
-    inline std::uint64_t min(const std::int32_t a, const std::uint64_t b)
-    {
-        return sycl::min(static_cast<std::uint64_t>(a), b);
-    }
-    inline std::uint64_t min(const std::uint64_t a, const std::uint32_t b)
-    {
-        return sycl::min(a, static_cast<std::uint64_t>(b));
-    }
-    inline std::uint64_t min(const std::uint32_t a, const std::uint64_t b)
-    {
-        return sycl::min(static_cast<std::uint64_t>(a), b);
-    }
-    // max function overloads.
-    // For floating-point types, `float` or `double` arguments are acceptable.
-    // For integer types, `std::uint32_t`, `std::int32_t`, `std::uint64_t` or
-    // `std::int64_t` type arguments are acceptable.
-    inline double max(const double a, const float b)
-    {
-        return sycl::fmax(a, static_cast<double>(b));
-    }
-    inline double max(const float a, const double b)
-    {
-        return sycl::fmax(static_cast<double>(a), b);
-    }
-    inline float max(const float a, const float b) { return sycl::fmax(a, b); }
-    inline double max(const double a, const double b) { return sycl::fmax(a, b); }
-    inline std::uint32_t max(const std::uint32_t a, const std::int32_t b)
-    {
-        return sycl::max(a, static_cast<std::uint32_t>(b));
-    }
-    inline std::uint32_t max(const std::int32_t a, const std::uint32_t b)
-    {
-        return sycl::max(static_cast<std::uint32_t>(a), b);
-    }
-    inline std::int32_t max(const std::int32_t a, const std::int32_t b)
-    {
-        return sycl::max(a, b);
-    }
-    inline std::uint32_t max(const std::uint32_t a, const std::uint32_t b)
-    {
-        return sycl::max(a, b);
-    }
-    inline std::uint64_t max(const std::uint64_t a, const std::int64_t b)
-    {
-        return sycl::max(a, static_cast<std::uint64_t>(b));
-    }
-    inline std::uint64_t max(const std::int64_t a, const std::uint64_t b)
-    {
-        return sycl::max(static_cast<std::uint64_t>(a), b);
-    }
-    inline std::int64_t max(const std::int64_t a, const std::int64_t b)
-    {
-        return sycl::max(a, b);
-    }
-    inline std::uint64_t max(const std::uint64_t a, const std::uint64_t b)
-    {
-        return sycl::max(a, b);
-    }
-    inline std::uint64_t max(const std::uint64_t a, const std::int32_t b)
-    {
-        return sycl::max(a, static_cast<std::uint64_t>(b));
-    }
-    inline std::uint64_t max(const std::int32_t a, const std::uint64_t b)
-    {
-        return sycl::max(static_cast<std::uint64_t>(a), b);
-    }
-    inline std::uint64_t max(const std::uint64_t a, const std::uint32_t b)
-    {
-        return sycl::max(a, static_cast<std::uint64_t>(b));
-    }
-    inline std::uint64_t max(const std::uint32_t a, const std::uint64_t b)
-    {
-        return sycl::max(static_cast<std::uint64_t>(a), b);
-    }
-
-    inline void
-    has_capability_or_fail(const sycl::device &dev,
-                           const std::initializer_list<sycl::aspect> &props)
-    {
-        for (const auto &it : props)
-        {
-            if (dev.has(it))
-                continue;
-            switch (it)
-            {
-            case sycl::aspect::fp64:
-                throw std::runtime_error("'double' is not supported in '" +
-                                         dev.get_info<sycl::info::device::name>() +
-                                         "' device");
-                break;
-            case sycl::aspect::fp16:
-                throw std::runtime_error("'half' is not supported in '" +
-                                         dev.get_info<sycl::info::device::name>() +
-                                         "' device");
-                break;
-            default:
-#define __SYCL_ASPECT(ASPECT, ID) \
-    case sycl::aspect::ASPECT:    \
-        return #ASPECT;
-#define __SYCL_ASPECT_DEPRECATED(ASPECT, ID, MESSAGE) __SYCL_ASPECT(ASPECT, ID)
-#define __SYCL_ASPECT_DEPRECATED_ALIAS(ASPECT, ID, MESSAGE)
-                auto getAspectNameStr = [](sycl::aspect AspectNum) -> std::string
-                {
-                    switch (AspectNum)
-                    {
-#include <sycl/info/aspects.def>
-#include <sycl/info/aspects_deprecated.def>
-                    default:
-                        return "unknown aspect";
-                    }
-                };
-#undef __SYCL_ASPECT_DEPRECATED_ALIAS
-#undef __SYCL_ASPECT_DEPRECATED
-#undef __SYCL_ASPECT
-                throw std::runtime_error(
-                    "'" + getAspectNameStr(it) + "' is not supported in '" +
-                    dev.get_info<sycl::info::device::name>() + "' device");
-            }
-            break;
-        }
-    }
-
-    static inline unsigned int get_current_device_id()
-    {
-        return dev_mgr::instance().current_device_id();
-    }
-
-    static inline device_ext &get_current_device()
-    {
-        return dev_mgr::instance().current_device();
-    }
-
-    static inline sycl::queue &get_in_order_queue()
-    {
-        return dev_mgr::instance().current_device().in_order_queue();
-    }
-
-    static sycl::event
-    dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr, size_t size,
-                memcpy_direction direction,
-                const std::vector<sycl::event> &dep_events = {})
-    {
-        if (!size)
-            return sycl::event{};
-        return q.memcpy(to_ptr, from_ptr, size, dep_events);
-        GGML_UNUSED(direction);
-    }
-
-    // Get actual copy range and make sure it will not exceed range.
-    static inline size_t get_copy_range(sycl::range<3> size, size_t slice,
-                                        size_t pitch)
-    {
-        return slice * (size.get(2) - 1) + pitch * (size.get(1) - 1) + size.get(0);
-    }
-
-    static inline size_t get_offset(sycl::id<3> id, size_t slice,
-                                    size_t pitch)
-    {
-        return slice * id.get(2) + pitch * id.get(1) + id.get(0);
-    }
-
-    /// copy 3D matrix specified by \p size from 3D matrix specified by \p from_ptr
-    /// and \p from_range to another specified by \p to_ptr and \p to_range.
-    static inline std::vector<sycl::event>
-    dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr,
-                sycl::range<3> to_range, sycl::range<3> from_range,
-                sycl::id<3> to_id, sycl::id<3> from_id,
-                sycl::range<3> size, memcpy_direction direction,
-                const std::vector<sycl::event> &dep_events = {})
-    {
-        // RAII for host pointer
-        class host_buffer
-        {
-            void *_buf;
-            size_t _size;
-            sycl::queue &_q;
-            const std::vector<sycl::event> &_deps; // free operation depends
-
-        public:
-            host_buffer(size_t size, sycl::queue &q,
-                        const std::vector<sycl::event> &deps)
-                : _buf(std::malloc(size)), _size(size), _q(q), _deps(deps) {}
-            void *get_ptr() const { return _buf; }
-            size_t get_size() const { return _size; }
-            ~host_buffer()
-            {
-                if (_buf)
-                {
-                    _q.submit([&](sycl::handler &cgh)
-                              {
-            cgh.depends_on(_deps);
-            cgh.host_task([buf = _buf] { std::free(buf); }); });
-                }
-            }
-        };
-        std::vector<sycl::event> event_list;
-
-        size_t to_slice = to_range.get(1) * to_range.get(0),
-               from_slice = from_range.get(1) * from_range.get(0);
-        unsigned char *to_surface =
-            (unsigned char *)to_ptr + get_offset(to_id, to_slice, to_range.get(0));
-        const unsigned char *from_surface =
-            (const unsigned char *)from_ptr +
-            get_offset(from_id, from_slice, from_range.get(0));
-
-        if (to_slice == from_slice && to_slice == size.get(1) * size.get(0))
-        {
-            return {dpct_memcpy(q, to_surface, from_surface, to_slice * size.get(2),
-                                direction, dep_events)};
-        }
-        direction = detail::deduce_memcpy_direction(q, to_ptr, from_ptr, direction);
-        size_t size_slice = size.get(1) * size.get(0);
-        switch (direction)
-        {
-        case host_to_host:
-            for (size_t z = 0; z < size.get(2); ++z)
-            {
-                unsigned char *to_ptr = to_surface;
-                const unsigned char *from_ptr = from_surface;
-                if (to_range.get(0) == from_range.get(0) &&
-                    to_range.get(0) == size.get(0))
-                {
-                    event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size_slice,
-                                                     direction, dep_events));
-                }
-                else
-                {
-                    for (size_t y = 0; y < size.get(1); ++y)
-                    {
-                        event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size.get(0),
-                                                         direction, dep_events));
-                        to_ptr += to_range.get(0);
-                        from_ptr += from_range.get(0);
-                    }
-                }
-                to_surface += to_slice;
-                from_surface += from_slice;
-            }
-            break;
-        case host_to_device:
-        {
-            host_buffer buf(get_copy_range(size, to_slice, to_range.get(0)), q,
-                            event_list);
-            std::vector<sycl::event> host_events;
-            if (to_slice == size_slice)
-            {
-                // Copy host data to a temp host buffer with the shape of target.
-                host_events =
-                    dpct_memcpy(q, buf.get_ptr(), from_surface, to_range, from_range,
-                                sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size,
-                                host_to_host, dep_events);
-            }
-            else
-            {
-                // Copy host data to a temp host buffer with the shape of target.
-                host_events = dpct_memcpy(
-                    q, buf.get_ptr(), from_surface, to_range, from_range,
-                    sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size, host_to_host,
-                    // If has padding data, not sure whether it is useless. So fill temp
-                    // buffer with it.
-                    std::vector<sycl::event>{
-                        dpct_memcpy(q, buf.get_ptr(), to_surface, buf.get_size(),
-                                    device_to_host, dep_events)});
-            }
-            // Copy from temp host buffer to device with only one submit.
-            event_list.push_back(dpct_memcpy(q, to_surface, buf.get_ptr(),
-                                             buf.get_size(), host_to_device,
-                                             host_events));
-            break;
-        }
-        case device_to_host:
-        {
-            host_buffer buf(get_copy_range(size, from_slice, from_range.get(0)), q,
-                            event_list);
-            // Copy from host temp buffer to host target with reshaping.
-            event_list = dpct_memcpy(
-                q, to_surface, buf.get_ptr(), to_range, from_range, sycl::id<3>(0, 0, 0),
-                sycl::id<3>(0, 0, 0), size, host_to_host,
-                // Copy from device to temp host buffer with only one submit.
-                std::vector<sycl::event>{dpct_memcpy(q, buf.get_ptr(), from_surface,
-                                                     buf.get_size(),
-                                                     device_to_host, dep_events)});
-            break;
-        }
-        case device_to_device:
-            event_list.push_back(q.submit([&](sycl::handler &cgh)
-                                          {
-        cgh.depends_on(dep_events);
-        cgh.parallel_for<class dpct_memcpy_3d_detail>(
-            size,
-            [=](sycl::id<3> id) {
-                to_surface[get_offset(id, to_slice, to_range.get(0))] =
-                    from_surface[get_offset(id, from_slice, from_range.get(0))];
-            }); }));
-        break;
-        default:
-            throw std::runtime_error("dpct_memcpy: invalid direction value");
-        }
-        return event_list;
-    }
-
-    /// memcpy 2D/3D matrix specified by pitched_data.
-    static inline std::vector<sycl::event>
-    dpct_memcpy(sycl::queue &q, pitched_data to, sycl::id<3> to_id,
-                pitched_data from, sycl::id<3> from_id, sycl::range<3> size,
-                memcpy_direction direction = automatic)
-    {
-        return dpct_memcpy(q, to.get_data_ptr(), from.get_data_ptr(),
-                           sycl::range<3>(to.get_pitch(), to.get_y(), 1),
-                           sycl::range<3>(from.get_pitch(), from.get_y(), 1), to_id, from_id,
-                           size, direction);
-    }
-
-    /// memcpy 2D matrix with pitch.
-    static inline std::vector<sycl::event>
-    dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr,
-                size_t to_pitch, size_t from_pitch, size_t x, size_t y,
-                memcpy_direction direction = automatic)
-    {
-        return dpct_memcpy(q, to_ptr, from_ptr, sycl::range<3>(to_pitch, y, 1),
-                           sycl::range<3>(from_pitch, y, 1),
-                           sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0),
-                           sycl::range<3>(x, y, 1), direction);
-    }
-
-    inline void gemm(sycl::queue &q, oneapi::mkl::transpose a_trans,
-                     oneapi::mkl::transpose b_trans, int m, int n, int k,
-                     const void *alpha, const void *a, library_data_t a_type,
-                     int lda, const void *b, library_data_t b_type, int ldb,
-                     const void *beta, void *c, library_data_t c_type, int ldc,
-                     library_data_t scaling_type)
-    {
-        if (scaling_type == library_data_t::real_float &&
-            c_type == library_data_t::complex_float)
-        {
-            scaling_type = library_data_t::complex_float;
-        }
-        else if (scaling_type == library_data_t::real_double &&
-                 c_type == library_data_t::complex_double)
-        {
-            scaling_type = library_data_t::complex_double;
-        }
-
-        std::uint64_t key =
-            detail::get_type_combination_id(a_type, b_type, c_type, scaling_type);
-        switch (key)
-        {
-        case detail::get_type_combination_id(
-            library_data_t::real_float, library_data_t::real_float,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_impl<float, float, float, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_double, library_data_t::real_double,
-            library_data_t::real_double, library_data_t::real_double):
-        {
-            detail::gemm_impl<double, double, double, double>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::complex_float, library_data_t::complex_float,
-            library_data_t::complex_float, library_data_t::complex_float):
-        {
-            detail::gemm_impl<std::complex<float>, std::complex<float>,
-                              std::complex<float>, std::complex<float>>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::complex_double, library_data_t::complex_double,
-            library_data_t::complex_double, library_data_t::complex_double):
-        {
-            detail::gemm_impl<std::complex<double>, std::complex<double>,
-                              std::complex<double>, std::complex<double>>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_half, library_data_t::real_half,
-            library_data_t::real_half, library_data_t::real_half):
-        {
-            detail::gemm_impl<sycl::half, sycl::half, sycl::half,
-                              sycl::half>(q, a_trans, b_trans, m, n, k, alpha, a,
-                                          lda, b, ldb, beta, c, ldc);
-            break;
-        }
-#ifdef __INTEL_MKL__
-        case detail::get_type_combination_id(
-            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16, float,
-                              float>(q, a_trans, b_trans, m, n, k, alpha, a, lda, b,
-                                     ldb, beta, c, ldc);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_half, library_data_t::real_half,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_impl<sycl::half, sycl::half, float, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_half, library_data_t::real_half,
-            library_data_t::real_half, library_data_t::real_float):
-        {
-            float alpha_value =
-                dpct::get_value(reinterpret_cast<const float *>(alpha), q);
-            float beta_value =
-                dpct::get_value(reinterpret_cast<const float *>(beta), q);
-            sycl::half alpha_half(alpha_value);
-            sycl::half beta_half(beta_value);
-            detail::gemm_impl<sycl::half, sycl::half, sycl::half,
-                              sycl::half>(q, a_trans, b_trans, m, n, k, &alpha_half,
-                                          a, lda, b, ldb, &beta_half, c, ldc);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_int8, library_data_t::real_int8,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_impl<std::int8_t, std::int8_t, float, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
-            library_data_t::real_bfloat16, library_data_t::real_float):
-        {
-            detail::gemm_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16,
-                              oneapi::mkl::bfloat16, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_int8, library_data_t::real_int8,
-            library_data_t::real_int32, library_data_t::real_int32):
-        {
-            float alpha_float =
-                dpct::get_value(reinterpret_cast<const std::int32_t *>(alpha), q);
-            float beta_float =
-                dpct::get_value(reinterpret_cast<const std::int32_t *>(beta), q);
-            detail::gemm_impl<std::int8_t, std::int8_t, std::int32_t, float>(
-                q, a_trans, b_trans, m, n, k, &alpha_float, a, lda, b, ldb, &beta_float, c, ldc);
-            break;
-        }
-#endif // __INTEL_MKL__
-        default:
-            throw std::runtime_error("the combination of data type is unsupported");
-        }
-    } // gemm()
-
-    /// Computes a batch of matrix-matrix product with general matrices.
-    /// \param [in] q The queue where the routine should be executed.
-    /// \param [in] a_trans Specifies the operation applied to A.
-    /// \param [in] b_trans Specifies the operation applied to B.
-    /// \param [in] m Specifies the number of rows of the matrix op(A) and of the matrix C.
-    /// \param [in] n Specifies the number of columns of the matrix op(B) and of the matrix C.
-    /// \param [in] k Specifies the number of columns of the matrix op(A) and the number of rows of the matrix op(B).
-    /// \param [in] alpha Scaling factor for the matrix-matrix product.
-    /// \param [in] a Input matrix A.
-    /// \param [in] a_type Data type of the matrix A.
-    /// \param [in] lda Leading dimension of A.
-    /// \param [in] b Input matrix B.
-    /// \param [in] b_type Data type of the matrix B.
-    /// \param [in] ldb Leading dimension of B.
-    /// \param [in] beta Scaling factor for matrix C.
-    /// \param [in, out] c Input/Output matrix C.
-    /// \param [in] c_type Data type of the matrix C.
-    /// \param [in] ldc Leading dimension of C.
-    /// \param [in] batch_size Specifies the number of matrix multiply operations to perform.
-    /// \param [in] scaling_type Data type of the scaling factors.
-    inline void gemm_batch(sycl::queue &q, oneapi::mkl::transpose a_trans,
-                           oneapi::mkl::transpose b_trans, int m, int n, int k,
-                           const void *alpha, const void *a[],
-                           library_data_t a_type, int lda, const void *b[],
-                           library_data_t b_type, int ldb, const void *beta,
-                           void *c[], library_data_t c_type, int ldc,
-                           int batch_size, library_data_t scaling_type)
-    {
-        if (scaling_type == library_data_t::real_float &&
-            c_type == library_data_t::complex_float)
-        {
-            scaling_type = library_data_t::complex_float;
-        }
-        else if (scaling_type == library_data_t::real_double &&
-                 c_type == library_data_t::complex_double)
-        {
-            scaling_type = library_data_t::complex_double;
-        }
-
-        std::uint64_t key =
-            detail::get_type_combination_id(a_type, b_type, c_type, scaling_type);
-        switch (key)
-        {
-        case detail::get_type_combination_id(
-            library_data_t::real_float, library_data_t::real_float,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_batch_impl<float, float, float, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
-                batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_double, library_data_t::real_double,
-            library_data_t::real_double, library_data_t::real_double):
-        {
-            detail::gemm_batch_impl<double, double, double, double>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
-                batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::complex_float, library_data_t::complex_float,
-            library_data_t::complex_float, library_data_t::complex_float):
-        {
-            detail::gemm_batch_impl<std::complex<float>, std::complex<float>,
-                                    std::complex<float>, std::complex<float>>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
-                batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::complex_double, library_data_t::complex_double,
-            library_data_t::complex_double, library_data_t::complex_double):
-        {
-            detail::gemm_batch_impl<std::complex<double>, std::complex<double>,
-                                    std::complex<double>, std::complex<double>>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
-                batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_half, library_data_t::real_half,
-            library_data_t::real_half, library_data_t::real_half):
-        {
-            detail::gemm_batch_impl<sycl::half, sycl::half, sycl::half,
-                                    sycl::half>(q, a_trans, b_trans, m, n, k, alpha,
-                                                a, lda, b, ldb, beta, c, ldc,
-                                                batch_size);
-            break;
-        }
-#ifdef __INTEL_MKL__
-        case detail::get_type_combination_id(
-            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
-            library_data_t::real_bfloat16, library_data_t::real_float):
-        {
-            detail::gemm_batch_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16,
-                                    oneapi::mkl::bfloat16, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
-                batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_batch_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16, float,
-                                    float>(q, a_trans, b_trans, m, n, k, alpha, a, lda,
-                                           b, ldb, beta, c, ldc, batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_int8, library_data_t::real_int8,
-            library_data_t::real_int32, library_data_t::real_int32):
-        {
-            float alpha_float =
-                dpct::get_value(reinterpret_cast<const std::int32_t *>(alpha), q);
-            float beta_float =
-                dpct::get_value(reinterpret_cast<const std::int32_t *>(beta), q);
-            detail::gemm_batch_impl<std::int8_t, std::int8_t, std::int32_t,
-                                    float>(q, a_trans, b_trans, m, n, k, &alpha_float,
-                                           a, lda, b, ldb, &beta_float, c, ldc,
-                                           batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_int8, library_data_t::real_int8,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_batch_impl<std::int8_t, std::int8_t, float, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
-                batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_half, library_data_t::real_half,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_batch_impl<sycl::half, sycl::half, float, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
-                batch_size);
-            break;
-        }
-#endif
-        case detail::get_type_combination_id(
-            library_data_t::real_half, library_data_t::real_half,
-            library_data_t::real_half, library_data_t::real_float):
-        {
-            float alpha_value =
-                dpct::get_value(reinterpret_cast<const float *>(alpha), q);
-            float beta_value =
-                dpct::get_value(reinterpret_cast<const float *>(beta), q);
-            sycl::half alpha_half(alpha_value);
-            sycl::half beta_half(beta_value);
-            detail::gemm_batch_impl<sycl::half, sycl::half, sycl::half, sycl::half>(
-                q, a_trans, b_trans, m, n, k, &alpha_half, a, lda, b, ldb, &beta_half, c, ldc,
-                batch_size);
-            break;
-        }
-        default:
-            throw std::runtime_error("the combination of data type is unsupported");
-        }
-    }
-
-    /// Computes a batch of matrix-matrix product with general matrices.
-    /// \param [in] q The queue where the routine should be executed.
-    /// \param [in] a_trans Specifies the operation applied to A.
-    /// \param [in] b_trans Specifies the operation applied to B.
-    /// \param [in] m Specifies the number of rows of the matrix op(A) and of the matrix C.
-    /// \param [in] n Specifies the number of columns of the matrix op(B) and of the matrix C.
-    /// \param [in] k Specifies the number of columns of the matrix op(A) and the number of rows of the matrix op(B).
-    /// \param [in] alpha Scaling factor for the matrix-matrix product.
-    /// \param [in] a Input matrix A.
-    /// \param [in] a_type Data type of the matrix A.
-    /// \param [in] lda Leading dimension of A.
-    /// \param [in] stride_a Stride between the different A matrices.
-    /// \param [in] b Input matrix B.
-    /// \param [in] b_type Data type of the matrix B.
-    /// \param [in] ldb Leading dimension of B.
-    /// \param [in] stride_b Stride between the different B matrices.
-    /// \param [in] beta Scaling factor for matrix C.
-    /// \param [in, out] c Input/Output matrix C.
-    /// \param [in] c_type Data type of the matrix C.
-    /// \param [in] ldc Leading dimension of C.
-    /// \param [in] stride_c Stride between the different C matrices.
-    /// \param [in] batch_size Specifies the number of matrix multiply operations to perform.
-    /// \param [in] scaling_type Data type of the scaling factors.
-    inline void gemm_batch(sycl::queue &q, oneapi::mkl::transpose a_trans,
-                           oneapi::mkl::transpose b_trans, int m, int n, int k,
-                           const void *alpha, const void *a, library_data_t a_type,
-                           int lda, long long int stride_a, const void *b,
-                           library_data_t b_type, int ldb, long long int stride_b,
-                           const void *beta, void *c, library_data_t c_type,
-                           int ldc, long long int stride_c, int batch_size,
-                           library_data_t scaling_type)
-    {
-        if (scaling_type == library_data_t::real_float &&
-            c_type == library_data_t::complex_float)
-        {
-            scaling_type = library_data_t::complex_float;
-        }
-        else if (scaling_type == library_data_t::real_double &&
-                 c_type == library_data_t::complex_double)
-        {
-            scaling_type = library_data_t::complex_double;
-        }
-
-        std::uint64_t key =
-            detail::get_type_combination_id(a_type, b_type, c_type, scaling_type);
-        switch (key)
-        {
-        case detail::get_type_combination_id(
-            library_data_t::real_float, library_data_t::real_float,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_batch_impl<float, float, float, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
-                beta, c, ldc, stride_c, batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_double, library_data_t::real_double,
-            library_data_t::real_double, library_data_t::real_double):
-        {
-            detail::gemm_batch_impl<double, double, double, double>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
-                beta, c, ldc, stride_c, batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::complex_float, library_data_t::complex_float,
-            library_data_t::complex_float, library_data_t::complex_float):
-        {
-            detail::gemm_batch_impl<std::complex<float>, std::complex<float>,
-                                    std::complex<float>, std::complex<float>>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
-                beta, c, ldc, stride_c, batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::complex_double, library_data_t::complex_double,
-            library_data_t::complex_double, library_data_t::complex_double):
-        {
-            detail::gemm_batch_impl<std::complex<double>, std::complex<double>,
-                                    std::complex<double>, std::complex<double>>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
-                beta, c, ldc, stride_c, batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_half, library_data_t::real_half,
-            library_data_t::real_half, library_data_t::real_half):
-        {
-            detail::gemm_batch_impl<sycl::half, sycl::half, sycl::half,
-                                    sycl::half>(q, a_trans, b_trans, m, n, k, alpha,
-                                                a, lda, stride_a, b, ldb, stride_b,
-                                                beta, c, ldc, stride_c, batch_size);
-            break;
-        }
-#ifdef __INTEL_MKL__
-        case detail::get_type_combination_id(
-            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
-            library_data_t::real_bfloat16, library_data_t::real_float):
-        {
-            detail::gemm_batch_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16,
-                                    oneapi::mkl::bfloat16, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
-                beta, c, ldc, stride_c, batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_batch_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16, float,
-                                    float>(q, a_trans, b_trans, m, n, k, alpha, a, lda,
-                                           stride_a, b, ldb, stride_b, beta, c, ldc,
-                                           stride_c, batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_int8, library_data_t::real_int8,
-            library_data_t::real_int32, library_data_t::real_int32):
-        {
-            detail::gemm_batch_impl<std::int8_t, std::int8_t, std::int32_t,
-                                    std::int32_t>(q, a_trans, b_trans, m, n, k, alpha,
-                                                  a, lda, stride_a, b, ldb, stride_b,
-                                                  beta, c, ldc, stride_c, batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_int8, library_data_t::real_int8,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_batch_impl<std::int8_t, std::int8_t, float, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
-                beta, c, ldc, stride_c, batch_size);
-            break;
-        }
-        case detail::get_type_combination_id(
-            library_data_t::real_half, library_data_t::real_half,
-            library_data_t::real_float, library_data_t::real_float):
-        {
-            detail::gemm_batch_impl<sycl::half, sycl::half, float, float>(
-                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
-                beta, c, ldc, stride_c, batch_size);
-            break;
-        }
-#endif
-        case detail::get_type_combination_id(
-            library_data_t::real_half, library_data_t::real_half,
-            library_data_t::real_half, library_data_t::real_float):
-        {
-            float alpha_value =
-                dpct::get_value(reinterpret_cast<const float *>(alpha), q);
-            float beta_value =
-                dpct::get_value(reinterpret_cast<const float *>(beta), q);
-            sycl::half alpha_half(alpha_value);
-            sycl::half beta_half(beta_value);
-            detail::gemm_batch_impl<sycl::half, sycl::half, sycl::half, sycl::half>(
-                q, a_trans, b_trans, m, n, k, &alpha_half, a, lda, stride_a, b, ldb, stride_b,
-                &beta_half, c, ldc, stride_c, batch_size);
-            break;
-        }
-        default:
-            throw std::runtime_error("the combination of data type is unsupported");
-        }
-    }
-
-    static inline void
-    async_dpct_memcpy(void *to_ptr, size_t to_pitch, const void *from_ptr,
-                      size_t from_pitch, size_t x, size_t y,
-                      memcpy_direction direction = automatic,
-                      sycl::queue &q = get_default_queue())
-    {
-        detail::dpct_memcpy(q, to_ptr, from_ptr, to_pitch, from_pitch, x, y,
-                            direction);
-    }
-
-    using err0 = detail::generic_error_type<struct err0_tag, int>;
-    using err1 = detail::generic_error_type<struct err1_tag, int>;
-
-    static inline void dpct_free(void *ptr, sycl::queue &q = get_default_queue()) {
-        detail::dpct_free(ptr, q);
-    }
-
-    /// dpct accessor used as device function parameter.
-    template <class T, memory_region Memory, size_t Dimension> class accessor;
-    template <class T, memory_region Memory> class accessor<T, Memory, 3> {
-    public:
-        using memory_t = detail::memory_traits<Memory, T>;
-        using element_t = typename memory_t::element_t;
-        using pointer_t = typename memory_t::pointer_t;
-        using accessor_t = typename memory_t::template accessor_t<3>;
-        accessor(pointer_t data, const sycl::range<3> &in_range)
-            : _data(data), _range(in_range) {}
-        template <memory_region M = Memory>
-        accessor(typename std::enable_if<M != local, const accessor_t>::type &acc)
-            : accessor(acc, acc.get_range()) {}
-        accessor(const accessor_t &acc, const sycl::range<3> &in_range)
-            : accessor(acc.get_pointer(), in_range) {}
-        accessor<T, Memory, 2> operator[](size_t index) const {
-            sycl::range<2> sub(_range.get(1), _range.get(2));
-            return accessor<T, Memory, 2>(_data + index * sub.size(), sub);
-        }
-
-        pointer_t get_ptr() const { return _data; }
-
-    private:
-        pointer_t _data;
-        sycl::range<3> _range;
-    };
-    template <class T, memory_region Memory> class accessor<T, Memory, 2> {
-    public:
-        using memory_t = detail::memory_traits<Memory, T>;
-        using element_t = typename memory_t::element_t;
-        using pointer_t = typename memory_t::pointer_t;
-        using accessor_t = typename memory_t::template accessor_t<2>;
-        accessor(pointer_t data, const sycl::range<2> &in_range)
-            : _data(data), _range(in_range) {}
-        template <memory_region M = Memory>
-        accessor(typename std::enable_if<M != local, const accessor_t>::type &acc)
-            : accessor(acc, acc.get_range()) {}
-        accessor(const accessor_t &acc, const sycl::range<2> &in_range)
-            : accessor(acc.get_pointer(), in_range) {}
-
-        pointer_t operator[](size_t index) const {
-            return _data + _range.get(1) * index;
-        }
-
-        pointer_t get_ptr() const { return _data; }
-
-    private:
-        pointer_t _data;
-        sycl::range<2> _range;
-    };
-
-    namespace detail {
-        /// Device variable with address space of shared, global or constant.
-        template <class T, memory_region Memory, size_t Dimension> class device_memory {
-        public:
-            using accessor_t =
-                typename detail::memory_traits<Memory,
-                                            T>::template accessor_t<Dimension>;
-            using value_t = typename detail::memory_traits<Memory, T>::value_t;
-            using dpct_accessor_t = dpct::accessor<T, Memory, Dimension>;
-
-            device_memory() : device_memory(sycl::range<Dimension>(1)) {}
-
-            /// Constructor of 1-D array with initializer list
-            device_memory(const sycl::range<Dimension> &in_range,
-                        std::initializer_list<value_t> &&init_list)
-                : device_memory(in_range) {
-                assert(init_list.size() <= in_range.size());
-                _host_ptr = (value_t *)std::malloc(_size);
-                std::memset(_host_ptr, 0, _size);
-                std::memcpy(_host_ptr, init_list.begin(), init_list.size() * sizeof(T));
-            }
-
-            /// Constructor of 2-D array with initializer list
-            template <size_t D = Dimension>
-            device_memory(
-                const typename std::enable_if<D == 2, sycl::range<2>>::type &in_range,
-                std::initializer_list<std::initializer_list<value_t>> &&init_list)
-                : device_memory(in_range) {
-                assert(init_list.size() <= in_range[0]);
-                _host_ptr = (value_t *)std::malloc(_size);
-                std::memset(_host_ptr, 0, _size);
-                auto tmp_data = _host_ptr;
-                for (auto sub_list : init_list) {
-                    assert(sub_list.size() <= in_range[1]);
-                    std::memcpy(tmp_data, sub_list.begin(),
-                                sub_list.size() * sizeof(T));
-                    tmp_data += in_range[1];
-                }
-            }
-
-            /// Constructor with range
-            device_memory(const sycl::range<Dimension> &range_in)
-                : _size(range_in.size() * sizeof(T)), _range(range_in),
-                _reference(false), _host_ptr(nullptr), _device_ptr(nullptr) {
-                static_assert(
-                    (Memory == global) || (Memory == constant) || (Memory == shared),
-                    "device memory region should be global, constant or shared");
-                // Make sure that singleton class mem_mgr and dev_mgr will destruct
-                // later than this.
-                detail::mem_mgr::instance();
-                dev_mgr::instance();
-            }
-
-            /// Constructor with range
-            template <class... Args>
-            device_memory(Args... Arguments)
-                : device_memory(sycl::range<Dimension>(Arguments...)) {}
-
-            ~device_memory() {
-                if (_device_ptr && !_reference)
-                    dpct::dpct_free(_device_ptr);
-                if (_host_ptr)
-                    std::free(_host_ptr);
-            }
-
-            /// Allocate memory with default queue, and init memory if has initial
-            /// value.
-            void init() { init(dpct::get_default_queue()); }
-            /// Allocate memory with specified queue, and init memory if has initial
-            /// value.
-            void init(sycl::queue &q) {
-                if (_device_ptr)
-                    return;
-                if (!_size)
-                    return;
-                allocate_device(q);
-                if (_host_ptr)
-                    detail::dpct_memcpy(q, _device_ptr, _host_ptr, _size,
-                                        host_to_device);
-            }
-
-            /// The variable is assigned to a device pointer.
-            void assign(value_t *src, size_t size) {
-                this->~device_memory();
-                new (this) device_memory(src, size);
-            }
-
-            /// Get memory pointer of the memory object, which is virtual pointer when
-            /// usm is not used, and device pointer when usm is used.
-            value_t *get_ptr() { return get_ptr(get_default_queue()); }
-            /// Get memory pointer of the memory object, which is virtual pointer when
-            /// usm is not used, and device pointer when usm is used.
-            value_t *get_ptr(sycl::queue &q) {
-                init(q);
-                return _device_ptr;
-            }
-
-            /// Get the device memory object size in bytes.
-            size_t get_size() { return _size; }
-
-            template <size_t D = Dimension>
-            typename std::enable_if<D == 1, T>::type &operator[](size_t index) {
-                init();
-                return _device_ptr[index];
-            }
-
-            /// Get dpct::accessor with dimension info for the device memory object
-            /// when usm is used and dimension is greater than 1.
-            template <size_t D = Dimension>
-            typename std::enable_if<D != 1, dpct_accessor_t>::type
-            get_access([[maybe_unused]] sycl::handler &cgh) {
-                return dpct_accessor_t((T *)_device_ptr, _range);
-            }
-
-        private:
-            device_memory(value_t *memory_ptr, size_t size)
-                : _size(size), _range(size / sizeof(T)), _reference(true),
-                _device_ptr(memory_ptr) {}
-
-            void allocate_device(sycl::queue &q) {
-        #ifndef DPCT_USM_LEVEL_NONE
-                if (Memory == shared) {
-                    _device_ptr = (value_t *)sycl::malloc_shared(_size, q.get_device(),
-                                                                q.get_context());
-                    return;
-                }
-        #ifdef SYCL_EXT_ONEAPI_USM_DEVICE_READ_ONLY
-                if (Memory == constant) {
-                    _device_ptr = (value_t *)sycl::malloc_device(
-                        _size, q.get_device(), q.get_context(),
-                        sycl::ext::oneapi::property::usm::device_read_only());
-                    return;
-                }
-        #endif
-        #endif
-                _device_ptr = (value_t *)detail::dpct_malloc(_size, q);
-            }
-
-            size_t _size;
-            sycl::range<Dimension> _range;
-            bool _reference;
-            value_t *_host_ptr;
-            value_t *_device_ptr;
-        };
-        template <class T, memory_region Memory>
-        class device_memory<T, Memory, 0> : public device_memory<T, Memory, 1> {
-        public:
-            using base = device_memory<T, Memory, 1>;
-            using value_t = typename base::value_t;
-            using accessor_t =
-                typename detail::memory_traits<Memory, T>::template accessor_t<0>;
-
-            /// Constructor with initial value.
-            device_memory(const value_t &val) : base(sycl::range<1>(1), {val}) {}
-
-            /// Default constructor
-            device_memory() : base(1) {}
-        };
-        } // namespace detail
-
-    template <class T, size_t Dimension>
-    using global_memory = detail::device_memory<T, global, Dimension>;
-    template <class T, size_t Dimension>
-    using constant_memory = detail::device_memory<T, constant, Dimension>;
-    template <class T, size_t Dimension>
-    using shared_memory = detail::device_memory<T, shared, Dimension>;
-
-
-    template <typename T,
-            sycl::access::address_space addressSpace =
-                sycl::access::address_space::global_space,
-            sycl::memory_order memoryOrder = sycl::memory_order::relaxed,
-            sycl::memory_scope memoryScope = sycl::memory_scope::device>
-    inline T atomic_fetch_add(T *addr, T operand) {
-    auto atm =
-        sycl::atomic_ref<T, memoryOrder, memoryScope, addressSpace>(addr[0]);
-    return atm.fetch_add(operand);
-    }
-
-    template <sycl::access::address_space addressSpace =
-                sycl::access::address_space::global_space,
-            sycl::memory_order memoryOrder = sycl::memory_order::relaxed,
-            sycl::memory_scope memoryScope = sycl::memory_scope::device,
-            typename T1, typename T2>
-    inline T1 atomic_fetch_add(T1 *addr, T2 operand) {
-    auto atm =
-        sycl::atomic_ref<T1, memoryOrder, memoryScope, addressSpace>(addr[0]);
-    return atm.fetch_add(operand);
-    }
-
-    template <typename T, sycl::access::address_space addressSpace =
-                            sycl::access::address_space::global_space>
-    inline T atomic_fetch_add(T *addr, T operand,
-                            sycl::memory_order memoryOrder) {
-    switch (memoryOrder) {
-        case sycl::memory_order::relaxed:
-            return atomic_fetch_add<T, addressSpace, sycl::memory_order::relaxed,
-                                    sycl::memory_scope::device>(addr, operand);
-        case sycl::memory_order::acq_rel:
-            return atomic_fetch_add<T, addressSpace, sycl::memory_order::acq_rel,
-                                    sycl::memory_scope::device>(addr, operand);
-        case sycl::memory_order::seq_cst:
-            return atomic_fetch_add<T, addressSpace, sycl::memory_order::seq_cst,
-                                    sycl::memory_scope::device>(addr, operand);
-        default:
-            assert(false && "Invalid memory_order for atomics. Valid memory_order for "
-                            "atomics are: sycl::memory_order::relaxed, "
-                            "sycl::memory_order::acq_rel, sycl::memory_order::seq_cst!");
-        }
-    }
-
-    template <sycl::access::address_space addressSpace =
-                sycl::access::address_space::global_space,
-            typename T1, typename T2>
-    inline T1 atomic_fetch_add(T1 *addr, T2 operand,
-                            sycl::memory_order memoryOrder) {
-    atomic_fetch_add<T1, addressSpace>(addr, operand, memoryOrder);
-    }
-
-} // COPY from DPCT head files
-
-#endif // GGML_SYCL_DPCT_HELPER_HPP
diff --git a/ggml-sycl/presets.hpp b/ggml-sycl/presets.hpp
deleted file mode 100644 (file)
index dcf0261..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// MIT license
-// Copyright (C) 2024 Intel Corporation
-// SPDX-License-Identifier: MIT
-//
-
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-
-#ifndef GGML_SYCL_PRESETS_HPP
-#define GGML_SYCL_PRESETS_HPP
-
-#define GGML_SYCL_MAX_STREAMS       8
-#define GGML_SYCL_MAX_BUFFERS       256
-#define GGML_SYCL_MAX_DEVICES       48
-#define GGML_SYCL_NAME "SYCL"
-
-// FIXME: 1024 from cuda
-#define GROUP_SIZE 1024
-#define WARP_SIZE 32
-#define MATRIX_ROW_PADDING 512 // last row of quant. matrices is a multiple of this to avoid out-of-bounds memory accesses
-
-#define SYCL_GELU_BLOCK_SIZE 256
-#define SYCL_SILU_BLOCK_SIZE 256
-#define SYCL_TANH_BLOCK_SIZE 256
-#define SYCL_RELU_BLOCK_SIZE 256
-#define SYCL_HARDSIGMOID_BLOCK_SIZE 256
-#define SYCL_HARDSWISH_BLOCK_SIZE 256
-#define SYCL_SQR_BLOCK_SIZE 256
-#define SYCL_CPY_BLOCK_SIZE 32
-#define SYCL_SCALE_BLOCK_SIZE 256
-#define SYCL_CLAMP_BLOCK_SIZE 256
-#define SYCL_ROPE_BLOCK_SIZE 256
-#define SYCL_ALIBI_BLOCK_SIZE 32
-#define SYCL_DIAG_MASK_INF_BLOCK_SIZE 32
-#define SYCL_QUANTIZE_BLOCK_SIZE 256
-#define SYCL_DEQUANTIZE_BLOCK_SIZE 256
-#define SYCL_GET_ROWS_BLOCK_SIZE 256
-#define SYCL_UPSCALE_BLOCK_SIZE 256
-#define SYCL_CONCAT_BLOCK_SIZE 256
-#define SYCL_PAD_BLOCK_SIZE 256
-#define SYCL_ACC_BLOCK_SIZE 256
-#define SYCL_IM2COL_BLOCK_SIZE 256
-#define SYCL_POOL2D_BLOCK_SIZE 256
-
-// dmmv = dequantize_mul_mat_vec
-#ifndef GGML_SYCL_DMMV_X
-#define GGML_SYCL_DMMV_X 32
-#endif
-#ifndef GGML_SYCL_MMV_Y
-#define GGML_SYCL_MMV_Y 1
-#endif
-
-#ifndef K_QUANTS_PER_ITERATION
-#define K_QUANTS_PER_ITERATION 2
-#else
-static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2");
-#endif
-
-#ifndef GGML_SYCL_PEER_MAX_BATCH_SIZE
-#define GGML_SYCL_PEER_MAX_BATCH_SIZE 128
-#endif // GGML_SYCL_PEER_MAX_BATCH_SIZE
-
-#define MUL_MAT_SRC1_COL_STRIDE 128
-
-#endif // GGML_SYCL_PRESETS_HPP
diff --git a/ggml-vulkan.cpp b/ggml-vulkan.cpp
deleted file mode 100644 (file)
index f389934..0000000
+++ /dev/null
@@ -1,7177 +0,0 @@
-#include "ggml-vulkan.h"
-#include <vulkan/vulkan_core.h>
-#ifdef GGML_VULKAN_RUN_TESTS
-#include <chrono>
-#endif
-
-#include <vulkan/vulkan.hpp>
-
-#include <algorithm>
-#include <cmath>
-#include <iomanip>
-#include <iostream>
-#include <tuple>
-#include <vector>
-#include <sstream>
-#include <utility>
-#include <memory>
-#include <limits>
-#include <map>
-
-#include "ggml.h"
-#include "ggml-backend-impl.h"
-
-#include "ggml-vulkan-shaders.hpp"
-
-#define VK_API_VERSION VK_API_VERSION_1_2
-
-#define CEIL_DIV(M, N) (((M) + (N)-1) / (N))
-
-#define VK_VENDOR_ID_AMD 0x1002
-#define VK_VENDOR_ID_APPLE 0x106b
-#define VK_VENDOR_ID_INTEL 0x8086
-#define VK_VENDOR_ID_NVIDIA 0x10de
-
-#define VK_DEVICE_DESCRIPTOR_POOL_MODE_UNKNOWN 0
-#define VK_DEVICE_DESCRIPTOR_POOL_MODE_MULTI 1
-#define VK_DEVICE_DESCRIPTOR_POOL_MODE_SINGLE 2
-
-#define VK_NUM_TYPES 16
-
-#define GGML_VK_MAX_NODES 8192
-
-#define MAX_VK_BUFFERS 256
-
-#ifndef K_QUANTS_PER_ITERATION
-#define K_QUANTS_PER_ITERATION 1
-#else
-static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2");
-#endif
-
-#define VK_CHECK(err, msg)                                          \
-    do {                                                            \
-        vk::Result err_ = (err);                                    \
-        if (err_ != vk::Result::eSuccess) {                         \
-            fprintf(stderr, "ggml_vulkan: %s error %s at %s:%d\n",  \
-                #err, to_string(err_).c_str(), __FILE__, __LINE__); \
-            exit(1);                                                \
-        }                                                           \
-    } while (0)
-
-#ifdef GGML_VULKAN_DEBUG
-#define VK_LOG_DEBUG(msg) std::cerr << msg << std::endl
-#else
-#define VK_LOG_DEBUG(msg) ((void) 0)
-#endif // GGML_VULKAN_DEBUG
-
-struct ggml_backend_vk_context;
-
-struct vk_queue {
-    uint32_t queue_family_index;
-    vk::Queue queue;
-    vk::CommandPool pool;
-    uint32_t cmd_buffer_idx;
-    std::vector<vk::CommandBuffer> cmd_buffers;
-
-    vk::PipelineStageFlags stage_flags;
-};
-
-struct vk_pipeline_struct {
-    std::string name;
-    vk::ShaderModule shader_module;
-    vk::DescriptorSetLayout dsl;
-    std::vector<vk::DescriptorPool> descriptor_pools;
-    std::vector<vk::DescriptorSet> descriptor_sets;
-    uint32_t descriptor_set_idx;
-    vk::PipelineLayout layout;
-    vk::Pipeline pipeline;
-    uint32_t push_constant_size;
-    uint32_t parameter_count;
-    std::array<uint32_t, 3> wg_denoms;
-    uint32_t align;
-};
-
-typedef std::shared_ptr<vk_pipeline_struct> vk_pipeline;
-typedef std::weak_ptr<vk_pipeline_struct> vk_pipeline_ref;
-
-static void ggml_vk_destroy_pipeline(vk::Device& device, vk_pipeline& pipeline);
-
-struct vk_matmul_pipeline_struct {
-    vk_pipeline l, m, s;
-    vk_pipeline a_l, a_m, a_s;
-};
-
-typedef std::shared_ptr<vk_matmul_pipeline_struct> vk_matmul_pipeline;
-
-struct vk_device {
-    vk::PhysicalDevice physical_device;
-    vk::PhysicalDeviceProperties properties;
-    std::string name;
-    uint64_t max_memory_allocation_size;
-    bool fp16;
-    vk::Device device;
-    uint32_t vendor_id;
-    vk_queue compute_queue;
-    vk_queue transfer_queue;
-    bool single_queue;
-    uint32_t descriptor_set_mode;
-    uint32_t subgroup_size;
-    bool uma;
-
-    bool initialized;
-    size_t idx;
-
-    vk_matmul_pipeline pipeline_matmul_f32;
-    vk_matmul_pipeline pipeline_matmul_f32_f16;
-    vk_matmul_pipeline pipeline_matmul_f16;
-    vk_matmul_pipeline pipeline_matmul_f16_f32;
-    vk_pipeline pipeline_matmul_split_k_reduce;
-
-    vk_matmul_pipeline pipeline_dequant_mul_mat_mat[VK_NUM_TYPES];
-
-    vk_matmul_pipeline pipeline_matmul_id_f32;
-    vk_matmul_pipeline pipeline_matmul_id_f16;
-    vk_matmul_pipeline pipeline_matmul_id_f16_f32;
-
-    vk_matmul_pipeline pipeline_dequant_mul_mat_mat_id[VK_NUM_TYPES];
-
-    vk_pipeline pipeline_dequant[VK_NUM_TYPES];
-    vk_pipeline pipeline_dequant_mul_mat_vec_f32_f32[VK_NUM_TYPES];
-    vk_pipeline pipeline_dequant_mul_mat_vec_f16_f32[VK_NUM_TYPES];
-    vk_pipeline pipeline_dequant_mul_mat_vec_id_f32[VK_NUM_TYPES];
-
-    vk_pipeline pipeline_mul_mat_vec_p021_f16_f32;
-    vk_pipeline pipeline_mul_mat_vec_nc_f16_f32;
-    vk_pipeline pipeline_get_rows[VK_NUM_TYPES];
-    vk_pipeline pipeline_get_rows_f32[VK_NUM_TYPES];
-    vk_pipeline pipeline_mul_f32;
-    vk_pipeline pipeline_div_f32;
-    vk_pipeline pipeline_add_f32;
-    vk_pipeline pipeline_scale_f32;
-    vk_pipeline pipeline_sqr_f32;
-    vk_pipeline pipeline_clamp_f32;
-    vk_pipeline pipeline_cpy_f32_f32, pipeline_cpy_f32_f16, pipeline_cpy_f16_f16;
-    vk_pipeline pipeline_norm_f32;
-    vk_pipeline pipeline_rms_norm_f32;
-    vk_pipeline pipeline_gelu_f32;
-    vk_pipeline pipeline_silu_f32;
-    vk_pipeline pipeline_relu_f32;
-    vk_pipeline pipeline_diag_mask_inf_f32;
-    vk_pipeline pipeline_soft_max_f32, pipeline_soft_max_f32_f16;
-    vk_pipeline pipeline_rope_norm_f32, pipeline_rope_norm_f16;
-    vk_pipeline pipeline_rope_neox_f32, pipeline_rope_neox_f16;
-    vk_pipeline pipeline_argsort_f32;
-    vk_pipeline pipeline_sum_rows_f32;
-
-    std::vector<vk_pipeline_ref> pipelines;
-
-    ~vk_device() {
-        VK_LOG_DEBUG("destroy device " << name);
-        device.destroyCommandPool(compute_queue.pool);
-        if (!single_queue) {
-            device.destroyCommandPool(transfer_queue.pool);
-        }
-
-        for (auto& pipeline : pipelines) {
-            if (pipeline.expired()) {
-                continue;
-            }
-
-            vk_pipeline pl = pipeline.lock();
-            ggml_vk_destroy_pipeline(device, pl);
-        }
-        pipelines.clear();
-
-        device.destroy();
-    }
-};
-
-struct vk_buffer_struct {
-    vk::Buffer buffer;
-    vk::DeviceMemory device_memory;
-    vk::MemoryPropertyFlags memory_property_flags;
-    void * ptr;
-    size_t size = 0;
-
-    ggml_backend_vk_context * ctx;
-
-    std::shared_ptr<vk_device> device;
-
-    ~vk_buffer_struct() {
-        if (size == 0) {
-            return;
-        }
-        VK_LOG_DEBUG("~vk_buffer_struct(" << buffer << ", " << size << ")");
-
-        device->device.freeMemory(device_memory);
-        device->device.destroyBuffer(buffer);
-    }
-};
-
-typedef std::shared_ptr<vk_buffer_struct> vk_buffer;
-typedef std::weak_ptr<vk_buffer_struct> vk_buffer_ref;
-
-struct vk_subbuffer {
-    vk_buffer buffer;
-    uint64_t offset;
-    uint64_t size;
-};
-
-struct vk_semaphore {
-    vk::Semaphore s;
-    uint64_t value;
-};
-
-struct vk_submission {
-    vk::CommandBuffer buffer;
-    std::vector<vk_semaphore> wait_semaphores;
-    std::vector<vk_semaphore> signal_semaphores;
-};
-
-typedef std::vector<vk_submission> vk_sequence;
-
-struct vk_mat_mat_push_constants {
-    uint32_t M; uint32_t N; uint32_t K;
-    uint32_t stride_a; uint32_t stride_b; uint32_t stride_d;
-    uint32_t batch_stride_a; uint32_t batch_stride_b; uint32_t batch_stride_d;
-    uint32_t k_split;
-    uint32_t ne02; uint32_t ne12; uint32_t broadcast2; uint32_t broadcast3;
-};
-struct vk_mat_vec_push_constants {
-    uint32_t ncols; uint32_t stride_a; uint32_t stride_b; uint32_t stride_d;
-    uint32_t batch_stride_a; uint32_t batch_stride_b; uint32_t batch_stride_d;
-    uint32_t ne02; uint32_t ne12; uint32_t broadcast2; uint32_t broadcast3;
-};
-
-struct vk_mat_mat_id_push_constants {
-    uint32_t M; uint32_t N; uint32_t K;
-    uint32_t stride_a; uint32_t stride_b; uint32_t stride_d;
-    uint32_t batch_stride_a; uint32_t batch_stride_b; uint32_t batch_stride_d;
-    uint32_t nei0; uint32_t nei1; uint32_t nbi1; uint32_t ne11;
-};
-struct vk_mat_vec_id_push_constants {
-    uint32_t ncols; uint32_t stride_a; uint32_t stride_b; uint32_t stride_d;
-    uint32_t batch_stride_a; uint32_t batch_stride_b; uint32_t batch_stride_d;
-    uint32_t nei0; uint32_t ne11;
-};
-
-struct vk_op_push_constants {
-    uint32_t KX;
-    uint32_t KY;
-    float param1;
-    float param2;
-};
-
-struct vk_op_unary_push_constants {
-    uint32_t ne;
-    uint32_t ne00; uint32_t ne01; uint32_t ne02; uint32_t ne03; uint32_t nb00; uint32_t nb01; uint32_t nb02; uint32_t nb03;
-    uint32_t ne10; uint32_t ne11; uint32_t ne12; uint32_t ne13; uint32_t nb10; uint32_t nb11; uint32_t nb12; uint32_t nb13;
-    uint32_t d_offset;
-    float param1; float param2;
-};
-
-struct vk_op_binary_push_constants {
-    uint32_t ne;
-    uint32_t ne00; uint32_t ne01; uint32_t ne02; uint32_t ne03; uint32_t nb00; uint32_t nb01; uint32_t nb02; uint32_t nb03;
-    uint32_t ne10; uint32_t ne11; uint32_t ne12; uint32_t ne13; uint32_t nb10; uint32_t nb11; uint32_t nb12; uint32_t nb13;
-    uint32_t ne20; uint32_t ne21; uint32_t ne22; uint32_t ne23; uint32_t nb20; uint32_t nb21; uint32_t nb22; uint32_t nb23;
-    uint32_t d_offset;
-    float param1; float param2;
-};
-
-struct vk_op_diag_mask_push_constants {
-    uint32_t ncols;
-    uint32_t rows_per_channel;
-    int32_t n_past;
-};
-
-struct vk_op_rope_push_constants {
-    uint32_t ncols;
-    uint32_t n_dims;
-    float freq_scale;
-    uint32_t p_delta_rows;
-    float freq_base;
-    float ext_factor;
-    float attn_factor;
-    float corr_dims[2];
-    float theta_scale;
-    uint32_t has_ff;
-};
-
-struct vk_op_soft_max_push_constants {
-    uint32_t KX;
-    uint32_t KY;
-    float scale;
-    float max_bias;
-    float m0;
-    float m1;
-    uint32_t n_head_log2;
-};
-
-struct vk_op_argsort_push_constants {
-    uint32_t ncols;
-    uint32_t ncols_pad;
-    int32_t order;
-};
-
-// Allow pre-recording command buffers
-struct vk_staging_memcpy {
-    vk_staging_memcpy(void * _dst, const void * _src, size_t _n) : dst(_dst), src(_src), n(_n) {}
-
-    void * dst;
-    const void * src;
-    size_t n;
-};
-
-struct vk_context {
-    size_t idx;
-
-    vk_submission * s;
-    std::vector<vk_sequence> seqs;
-
-    ggml_tensor * exit_tensor;
-
-    std::vector<vk_staging_memcpy> in_memcpys;
-    std::vector<vk_staging_memcpy> out_memcpys;
-
-    vk_queue * q;
-};
-
-struct ggml_tensor_extra_gpu {
-    size_t ctx_idx;
-
-    vk_buffer_ref buffer_gpu;
-    uint64_t offset;
-
-    void reset() {
-        ctx_idx = 0;
-        buffer_gpu.reset();
-        offset = 0;
-    }
-};
-
-struct ggml_vk_garbage_collector {
-    std::vector<vk_semaphore> tl_semaphores;
-    std::vector<vk_semaphore> semaphores;
-    std::vector<vk::Event> events;
-    std::vector<vk_buffer> temp_buffers;
-    std::vector<vk_context> contexts;
-};
-
-#if defined(GGML_VULKAN_MEMORY_DEBUG) || defined(GGML_VULKAN_DEBUG)
-#include <mutex>
-
-#define VK_LOG_MEMORY(msg) std::cerr << "ggml_vulkan memory: " << msg << std::endl
-
-static std::string format_size(size_t size) {
-    const size_t kib = 1024;
-    const size_t mib = kib * 1024;
-    const size_t gib = mib * 1024;
-
-    std::ostringstream oss;
-    oss << std::fixed << std::setprecision(2);
-
-    if (size >= gib) {
-        oss << static_cast<double>(size) / gib << " GiB";
-    } else if (size >= mib) {
-        oss << static_cast<double>(size) / mib << " MiB";
-    } else if (size >= kib) {
-        oss << static_cast<double>(size) / kib << " KiB";
-    } else {
-        oss << size << " B";
-    }
-
-    return oss.str();
-}
-
-static std::mutex log_mutex;
-
-class vk_memory_logger {
-public:
-    vk_memory_logger(): total_device(0), total_host(0) {}
-    void log_allocation(vk_buffer_ref buf_ref, size_t size);
-    void log_deallocation(vk_buffer_ref buf_ref);
-
-private:
-    std::map<vk::Buffer, size_t> allocations; // Track allocations
-    size_t total_device;
-    size_t total_host;
-};
-#else
-#define VK_LOG_MEMORY(msg) ((void) 0)
-#endif // GGML_VULKAN_MEMORY_DEBUG
-
-struct ggml_backend_vk_context {
-    std::string name;
-
-    std::shared_ptr<vk_device> device;
-
-    size_t semaphore_idx, event_idx;
-    ggml_vk_garbage_collector gc;
-    std::vector<std::tuple<void*, size_t, vk_buffer>> pinned_memory;
-    size_t prealloc_size_x, prealloc_size_y, prealloc_size_split_k;
-    vk_buffer prealloc_x, prealloc_y, prealloc_split_k;
-    vk::Fence fence;
-    vk_buffer staging;
-    size_t staging_size;
-    size_t staging_offset;
-    vk_buffer sync_staging;
-
-    vk_buffer buffer_pool[MAX_VK_BUFFERS];
-
-    vk_context * compute_ctx;
-    vk_context * transfer_ctx;
-
-    bool initialized;
-
-    size_t idx;
-
-#ifdef GGML_VULKAN_MEMORY_DEBUG
-    vk_memory_logger memory_logger;
-#endif
-};
-
-#ifdef GGML_VULKAN_MEMORY_DEBUG
-void vk_memory_logger::log_allocation(vk_buffer_ref buf_ref, size_t size) {
-    std::lock_guard<std::mutex> guard(log_mutex);
-    vk_buffer buf = buf_ref.lock();
-    const bool device = bool(buf->memory_property_flags & vk::MemoryPropertyFlagBits::eDeviceLocal);
-    const std::string type = device ? "device" : "host";
-    allocations[buf->buffer] = size;
-    total_device += device ? size : 0;
-    total_host += device ? 0 : size;
-    VK_LOG_MEMORY("VULKAN" << buf->ctx->idx << ": +" << format_size(size) << " " << type << " at " << buf->buffer << ". Total device: " << format_size(total_device) << ", total host: " << format_size(total_host));
-}
-
-void vk_memory_logger::log_deallocation(vk_buffer_ref buf_ref) {
-    if (buf_ref.expired() || buf_ref.lock()->size == 0) {
-        return;
-    }
-
-    std::lock_guard<std::mutex> guard(log_mutex);
-    vk_buffer buf = buf_ref.lock();
-    const bool device = bool(buf->memory_property_flags & vk::MemoryPropertyFlagBits::eDeviceLocal);
-    std::string type = device ? "device" : "host";
-    auto it = allocations.find(buf->buffer);
-    total_device -= device ? it->second : 0;
-    total_host -= device ? 0 : it->second;
-    if (it != allocations.end()) {
-        VK_LOG_MEMORY("VULKAN" << buf->ctx->idx << ": -" << format_size(it->second) << " " << type << " at " << buf->buffer << ". Total device: " << format_size(total_device) << ", total host: " << format_size(total_host));
-        allocations.erase(it);
-    } else {
-        VK_LOG_MEMORY("ERROR VULKAN" << buf->ctx->idx << ": Attempted to deallocate unknown " << type << " memory at " << buf->buffer);
-    }
-}
-#endif // GGML_VULKAN_MEMORY_DEBUG
-
-struct vk_instance_t {
-    vk::Instance instance;
-
-    std::vector<size_t> device_indices;
-
-    ggml_backend_t backends[GGML_VK_MAX_DEVICES];
-    ggml_backend_vk_context contexts[GGML_VK_MAX_DEVICES];
-    ggml_backend_buffer_type buffer_types[GGML_VK_MAX_DEVICES];
-    bool initialized[GGML_VK_MAX_DEVICES];
-};
-
-static std::shared_ptr<vk_device> ggml_vk_get_device(size_t idx) {
-    VK_LOG_DEBUG("ggml_vk_get_device(" << idx << ")");
-    static std::weak_ptr<vk_device> devices[GGML_VK_MAX_DEVICES];
-
-    if (devices[idx].expired()) {
-        VK_LOG_DEBUG("Initializing new vk_device");
-        std::shared_ptr<vk_device> device = std::make_shared<vk_device>();
-        device->initialized = false;
-        devices[idx] = device;
-        return device;
-    }
-
-    return devices[idx].lock();
-}
-
-#ifdef GGML_VULKAN_CHECK_RESULTS
-static size_t vk_skip_checks;
-static size_t vk_output_tensor;
-
-static void ggml_vk_print_tensor(ggml_backend * ctx, const ggml_tensor * tensor, const char * name);
-static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_compute_params * params, ggml_tensor * tensor);
-static void ggml_vk_check_results_1(ggml_backend_vk_context * ctx, ggml_compute_params * params, ggml_tensor * tensor);
-#endif
-
-typedef void (*ggml_vk_func_t)(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst);
-
-static bool vk_instance_initialized = false;
-static vk_instance_t vk_instance;
-
-GGML_CALL static void ggml_backend_vk_free(ggml_backend_t backend);
-
-static void ggml_vk_create_pipeline(ggml_backend_vk_context * ctx, vk_pipeline& pipeline, const std::string& name, size_t spv_size, const void* spv_data, const std::string& entrypoint, uint32_t parameter_count, uint32_t push_constant_size, std::array<uint32_t, 3> wg_denoms, std::vector<uint32_t>&& specialization_constants, uint32_t align) {
-    VK_LOG_DEBUG("ggml_vk_create_pipeline(" << name << ", " << entrypoint << ", " << parameter_count << ", " << push_constant_size << ", (" << wg_denoms[0] << "," << wg_denoms[1] << "," << wg_denoms[2] << "), specialization_constants, " << align << ")");
-    GGML_ASSERT(parameter_count > 0);
-    GGML_ASSERT(wg_denoms[0] > 0 && wg_denoms[1] > 0 && wg_denoms[2] > 0); // NOLINT
-
-    pipeline = std::make_shared<vk_pipeline_struct>();
-    pipeline->name = name;
-    pipeline->parameter_count = parameter_count;
-    pipeline->push_constant_size = push_constant_size;
-    pipeline->wg_denoms = wg_denoms;
-    pipeline->align = align;
-
-    vk::ShaderModuleCreateInfo shader_module_create_info({}, spv_size, reinterpret_cast<const uint32_t *>(spv_data));
-    pipeline->shader_module = ctx->device->device.createShaderModule(shader_module_create_info);
-
-    std::vector<vk::DescriptorSetLayoutBinding> dsl_binding;
-    std::vector<vk::DescriptorBindingFlags> dsl_binding_flags;
-    for (uint32_t i = 0; i < parameter_count; i++) {
-        dsl_binding.push_back({i, vk::DescriptorType::eStorageBuffer, 1, vk::ShaderStageFlagBits::eCompute});
-        dsl_binding_flags.push_back({});
-    }
-
-    vk::DescriptorSetLayoutBindingFlagsCreateInfo dslbfci = { dsl_binding_flags };
-
-    vk::PushConstantRange pcr(
-        vk::ShaderStageFlagBits::eCompute,
-        0,
-        pipeline->push_constant_size
-    );
-
-    vk::DescriptorSetLayoutCreateInfo descriptor_set_layout_create_info(
-        {},
-        dsl_binding);
-    descriptor_set_layout_create_info.setPNext(&dslbfci);
-    pipeline->dsl = ctx->device->device.createDescriptorSetLayout(descriptor_set_layout_create_info);
-
-    // Check if device supports multiple descriptors per pool
-    if (ctx->device->descriptor_set_mode == VK_DEVICE_DESCRIPTOR_POOL_MODE_UNKNOWN) {
-        const uint32_t alloc_count = 2;
-
-        // Try allocating multiple sets from one pool
-        // This fails on AMD for some reason, so add a fall back to allocating one pool per set
-        vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count);
-        vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, alloc_count, descriptor_pool_size);
-        vk::DescriptorPool pool = ctx->device->device.createDescriptorPool(descriptor_pool_create_info);
-
-        std::vector<vk::DescriptorSetLayout> layouts(alloc_count);
-        for (uint32_t i = 0; i < alloc_count; i++) {
-            layouts[i] = pipeline->dsl;
-        }
-        try {
-            vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(pool, alloc_count, layouts.data());
-            std::vector<vk::DescriptorSet> sets = ctx->device->device.allocateDescriptorSets(descriptor_set_alloc_info);
-        } catch(vk::OutOfPoolMemoryError const&) {
-            ctx->device->descriptor_set_mode = VK_DEVICE_DESCRIPTOR_POOL_MODE_SINGLE;
-        }
-
-        ctx->device->device.destroyDescriptorPool(pool);
-    }
-
-    if (ctx->device->descriptor_set_mode == VK_DEVICE_DESCRIPTOR_POOL_MODE_MULTI) {
-        vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count);
-        vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, 128, descriptor_pool_size);
-        pipeline->descriptor_pools.push_back(ctx->device->device.createDescriptorPool(descriptor_pool_create_info));
-    }
-
-    pipeline->descriptor_set_idx = 0;
-
-    vk::PipelineLayoutCreateInfo pipeline_layout_create_info(vk::PipelineLayoutCreateFlags(), pipeline->dsl, pcr);
-    pipeline->layout = ctx->device->device.createPipelineLayout(pipeline_layout_create_info);
-
-    std::vector<vk::SpecializationMapEntry> specialization_entries(specialization_constants.size());
-
-    for (size_t i = 0; i < specialization_constants.size(); i++) {
-        specialization_entries[i].constantID = i;
-        specialization_entries[i].offset = i * sizeof(uint32_t);
-        specialization_entries[i].size = sizeof(uint32_t);
-    }
-
-    vk::SpecializationInfo specialization_info(
-        specialization_entries.size(),
-        specialization_entries.data(),
-        specialization_constants.size() * sizeof(uint32_t),
-        specialization_constants.data()
-    );
-
-    vk::PipelineShaderStageCreateInfo pipeline_shader_create_info(
-            vk::PipelineShaderStageCreateFlags(),
-            vk::ShaderStageFlagBits::eCompute,
-            pipeline->shader_module,
-            entrypoint.c_str(),
-            &specialization_info);
-    vk::ComputePipelineCreateInfo compute_pipeline_create_info(
-        vk::PipelineCreateFlags(),
-        pipeline_shader_create_info,
-        pipeline->layout);
-    pipeline->pipeline = ctx->device->device.createComputePipeline(VK_NULL_HANDLE, compute_pipeline_create_info).value;
-
-    ctx->device->pipelines.push_back(pipeline);
-}
-
-static void ggml_vk_destroy_pipeline(vk::Device& device, vk_pipeline& pipeline) {
-    VK_LOG_DEBUG("ggml_pipeline_destroy_pipeline(" << pipeline->name << ")");
-    for (auto& pool : pipeline->descriptor_pools) {
-        device.destroyDescriptorPool(pool);
-    }
-    pipeline->descriptor_pools.clear();
-    pipeline->descriptor_sets.clear();
-    pipeline->descriptor_set_idx = 0;
-
-    device.destroyDescriptorSetLayout(pipeline->dsl);
-
-    device.destroyPipelineLayout(pipeline->layout);
-
-    device.destroyShaderModule(pipeline->shader_module);
-
-    device.destroyPipeline(pipeline->pipeline);
-}
-
-static void ggml_pipeline_allocate_descriptor_sets(ggml_backend_vk_context * ctx, vk_pipeline& pipeline, uint32_t n) {
-    VK_LOG_DEBUG("ggml_pipeline_allocate_descriptor_sets(" << pipeline->name << ", " << n << ")");
-    if (pipeline->descriptor_sets.size() >= pipeline->descriptor_set_idx + n) {
-        // Enough descriptors are available
-        return;
-    }
-
-    if (ctx->device->descriptor_set_mode == VK_DEVICE_DESCRIPTOR_POOL_MODE_MULTI) {
-        const uint32_t alloc_count = pipeline->descriptor_set_idx + n - pipeline->descriptor_sets.size();
-
-        std::vector<vk::DescriptorSetLayout> layouts(alloc_count);
-        for (uint32_t i = 0; i < alloc_count; i++) {
-            layouts[i] = pipeline->dsl;
-        }
-        vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(pipeline->descriptor_pools[0], alloc_count, layouts.data());
-        std::vector<vk::DescriptorSet> sets = ctx->device->device.allocateDescriptorSets(descriptor_set_alloc_info);
-        pipeline->descriptor_sets.insert(pipeline->descriptor_sets.end(), sets.begin(), sets.end());
-    } else {
-        for (uint32_t i = pipeline->descriptor_sets.size(); i < pipeline->descriptor_set_idx + n; i++) {
-            vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count);
-            vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, 1, descriptor_pool_size);
-            pipeline->descriptor_pools.push_back(ctx->device->device.createDescriptorPool(descriptor_pool_create_info));
-
-            vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(pipeline->descriptor_pools[i], 1, &pipeline->dsl);
-            std::vector<vk::DescriptorSet> sets = ctx->device->device.allocateDescriptorSets(descriptor_set_alloc_info);
-            pipeline->descriptor_sets.push_back(sets[0]);
-        }
-    }
-}
-
-static void ggml_pipeline_cleanup(vk_pipeline& pipeline) {
-    VK_LOG_DEBUG("ggml_pipeline_cleanup(" << pipeline->name << ")");
-    pipeline->descriptor_set_idx = 0;
-}
-
-static vk::CommandBuffer ggml_vk_create_cmd_buffer(ggml_backend_vk_context * ctx, vk_queue& q) {
-    VK_LOG_DEBUG("ggml_vk_create_cmd_buffer()");
-    if (q.cmd_buffers.size() > q.cmd_buffer_idx) {
-        // Reuse command buffer
-        return q.cmd_buffers[q.cmd_buffer_idx++];
-    }
-
-    vk::CommandBufferAllocateInfo command_buffer_alloc_info(
-        q.pool,
-        vk::CommandBufferLevel::ePrimary,
-        1);
-    const std::vector<vk::CommandBuffer> cmd_buffers = ctx->device->device.allocateCommandBuffers(command_buffer_alloc_info);
-    auto buf = cmd_buffers.front();
-
-    q.cmd_buffers.push_back(buf);
-    q.cmd_buffer_idx++;
-
-    return buf;
-}
-
-static vk_submission ggml_vk_create_submission(ggml_backend_vk_context * ctx, vk_queue& q, std::vector<vk_semaphore> wait_semaphores, std::vector<vk_semaphore> signal_semaphores) {
-    VK_LOG_DEBUG("ggml_vk_create_submission()");
-    vk_submission s;
-    s.buffer = ggml_vk_create_cmd_buffer(ctx, q);
-    s.wait_semaphores = std::move(wait_semaphores);
-    s.signal_semaphores = std::move(signal_semaphores);
-    return s;
-}
-
-static void ggml_vk_submit(vk_context * ctx, vk::Fence fence) {
-    VK_LOG_DEBUG("ggml_vk_submit(" << ctx->seqs.size() << ", " << fence << ")");
-    if (ctx->seqs.empty()) {
-        return;
-    }
-
-    std::vector<std::vector<uint64_t>> tl_wait_vals;
-    std::vector<std::vector<uint64_t>> tl_signal_vals;
-    std::vector<std::vector<vk::Semaphore>> tl_wait_semaphores;
-    std::vector<std::vector<vk::Semaphore>> tl_signal_semaphores;
-    std::vector<vk::TimelineSemaphoreSubmitInfo> tl_submit_infos;
-    std::vector<vk::SubmitInfo> submit_infos;
-    int idx = -1;
-    std::vector<std::vector<vk::PipelineStageFlags>> stage_flags;
-
-    size_t reserve = 0;
-
-    for (const auto& sequence : ctx->seqs) {
-        reserve += sequence.size();
-    }
-
-    // Pre-reserve vectors to prevent reallocation, which invalidates pointers
-    tl_wait_semaphores.reserve(reserve);
-    tl_wait_vals.reserve(reserve);
-    tl_signal_semaphores.reserve(reserve);
-    tl_signal_vals.reserve(reserve);
-    tl_submit_infos.reserve(reserve);
-    submit_infos.reserve(reserve);
-    stage_flags.reserve(reserve);
-
-    for (const auto& sequence : ctx->seqs) {
-        for (const auto& submission : sequence) {
-            stage_flags.push_back({});
-            idx++;
-            tl_wait_vals.push_back({});
-            tl_wait_semaphores.push_back({});
-            tl_signal_vals.push_back({});
-            tl_signal_semaphores.push_back({});
-            for (size_t i = 0; i < submission.wait_semaphores.size(); i++) {
-                stage_flags[idx].push_back(ctx->q->stage_flags);
-                tl_wait_vals[idx].push_back(submission.wait_semaphores[i].value);
-                tl_wait_semaphores[idx].push_back(submission.wait_semaphores[i].s);
-            }
-            for (size_t i = 0; i < submission.signal_semaphores.size(); i++) {
-                tl_signal_vals[idx].push_back(submission.signal_semaphores[i].value);
-                tl_signal_semaphores[idx].push_back(submission.signal_semaphores[i].s);
-            }
-            tl_submit_infos.push_back({
-                (uint32_t) submission.wait_semaphores.size(),
-                tl_wait_vals[idx].data(),
-                (uint32_t) submission.signal_semaphores.size(),
-                tl_signal_vals[idx].data(),
-            });
-            tl_submit_infos[idx].sType = vk::StructureType::eTimelineSemaphoreSubmitInfo;
-            tl_submit_infos[idx].pNext = nullptr;
-            vk::SubmitInfo si{
-                (uint32_t) submission.wait_semaphores.size(),
-                tl_wait_semaphores[idx].data(),
-                stage_flags[idx].data(),
-                1,
-                &submission.buffer,
-                (uint32_t) submission.signal_semaphores.size(),
-                tl_signal_semaphores[idx].data(),
-            };
-            si.setPNext(&tl_submit_infos[idx]);
-            submit_infos.push_back(si);
-        }
-    }
-
-    ctx->q->queue.submit(submit_infos, fence);
-
-    ctx->seqs.clear();
-}
-
-static uint32_t ggml_vk_find_queue_family_index(std::vector<vk::QueueFamilyProperties>& queue_family_props, const vk::QueueFlags& required, const vk::QueueFlags& avoid, int32_t compute_index, uint32_t min_num_queues) {
-    VK_LOG_DEBUG("ggml_vk_find_queue_family_index()");
-    const uint32_t qfsize = queue_family_props.size();
-
-    // Try with avoid preferences first
-    for (uint32_t i = 0; i < qfsize; i++) {
-        if (queue_family_props[i].queueCount >= min_num_queues && (compute_index < 0 || i != (uint32_t) compute_index) && queue_family_props[i].queueFlags & required && !(queue_family_props[i].queueFlags & avoid)) {
-            return i;
-        }
-    }
-
-    // Fall back to only required
-    for (size_t i = 0; i < qfsize; i++) {
-        if (queue_family_props[i].queueCount >= min_num_queues && (compute_index < 0 || i != (uint32_t) compute_index) && queue_family_props[i].queueFlags & required) {
-            return i;
-        }
-    }
-
-    // Fall back to reusing compute queue
-    for (size_t i = 0; i < qfsize; i++) {
-        if (queue_family_props[i].queueCount >= min_num_queues && queue_family_props[i].queueFlags & required) {
-            return i;
-        }
-    }
-
-    // Fall back to ignoring min_num_queries
-    for (size_t i = 0; i < qfsize; i++) {
-        if (queue_family_props[i].queueFlags & required) {
-            return i;
-        }
-    }
-
-    // All commands that are allowed on a queue that supports transfer operations are also allowed on a queue that supports either graphics or compute operations.
-    // Thus, if the capabilities of a queue family include VK_QUEUE_GRAPHICS_BIT or VK_QUEUE_COMPUTE_BIT, then reporting the VK_QUEUE_TRANSFER_BIT capability separately for that queue family is optional.
-    if (compute_index >= 0) {
-        return compute_index;
-    }
-
-    std::cerr << "ggml_vulkan: No suitable queue family index found." << std::endl;
-
-    for(auto &q_family : queue_family_props) {
-        std::cerr << "Queue number: "  + std::to_string(q_family.queueCount) << " flags: " + to_string(q_family.queueFlags) << std::endl;
-    }
-    abort();
-}
-
-static void ggml_vk_create_queue(ggml_backend_vk_context * ctx, vk_queue& q, uint32_t queue_family_index, uint32_t queue_index, vk::PipelineStageFlags&& stage_flags) {
-    VK_LOG_DEBUG("ggml_vk_create_queue()");
-    q.queue_family_index = queue_family_index;
-
-    vk::CommandPoolCreateInfo command_pool_create_info_compute(vk::CommandPoolCreateFlags(VK_COMMAND_POOL_CREATE_TRANSIENT_BIT), queue_family_index);
-    q.pool = ctx->device->device.createCommandPool(command_pool_create_info_compute);
-
-    q.cmd_buffer_idx = 0;
-
-    q.queue = ctx->device->device.getQueue(queue_family_index, queue_index);
-
-    q.stage_flags = stage_flags;
-}
-
-static vk_context * ggml_vk_create_context(ggml_backend_vk_context * ctx, vk_queue& q) {
-    VK_LOG_DEBUG("ggml_vk_create_context()");
-    ctx->gc.contexts.emplace_back();
-    vk_context * result = &ctx->gc.contexts[ctx->gc.contexts.size() - 1];
-    memset((void *) result, 0, sizeof(vk_context));
-    result->idx = ctx->gc.contexts.size() - 1;
-    result->q = &q;
-    return result;
-}
-
-static vk_semaphore * ggml_vk_create_binary_semaphore(ggml_backend_vk_context * ctx) {
-    VK_LOG_DEBUG("ggml_vk_create_timeline_semaphore()");
-    vk::SemaphoreTypeCreateInfo tci{ vk::SemaphoreType::eBinary, 0 };
-    vk::SemaphoreCreateInfo ci{};
-    ci.setPNext(&tci);
-    vk::Semaphore semaphore = ctx->device->device.createSemaphore(ci);
-    ctx->gc.semaphores.push_back({ semaphore, 0 });
-    return &ctx->gc.semaphores[ctx->gc.semaphores.size() - 1];
-}
-
-static vk_semaphore * ggml_vk_create_timeline_semaphore(ggml_backend_vk_context * ctx) {
-    VK_LOG_DEBUG("ggml_vk_create_timeline_semaphore()");
-    if (ctx->semaphore_idx >= ctx->gc.tl_semaphores.size()) {
-        vk::SemaphoreTypeCreateInfo tci{ vk::SemaphoreType::eTimeline, 0 };
-        vk::SemaphoreCreateInfo ci{};
-        ci.setPNext(&tci);
-        vk::Semaphore semaphore = ctx->device->device.createSemaphore(ci);
-        ctx->gc.tl_semaphores.push_back({ semaphore, 0 });
-    }
-    return &ctx->gc.tl_semaphores[ctx->semaphore_idx++];
-}
-
-static vk::Event ggml_vk_create_event(ggml_backend_vk_context * ctx) {
-    if (ctx->event_idx >= ctx->gc.events.size()) {
-        ctx->gc.events.push_back(ctx->device->device.createEvent({}));
-    }
-    return ctx->gc.events[ctx->event_idx++];
-}
-
-static void ggml_vk_queue_cleanup(ggml_backend_vk_context * ctx, vk_queue& q) {
-    VK_LOG_DEBUG("ggml_vk_queue_cleanup()");
-    // Requires command buffers to be done
-
-    ctx->device->device.resetCommandPool(q.pool);
-    q.cmd_buffer_idx = 0;
-}
-
-static uint32_t find_properties(const vk::PhysicalDeviceMemoryProperties* mem_props, vk::MemoryRequirements* mem_req, vk::MemoryPropertyFlags flags) {
-    for (uint32_t i = 0; i < mem_props->memoryTypeCount; ++i) {
-        vk::MemoryType memory_type = mem_props->memoryTypes[i];
-        if ((mem_req->memoryTypeBits & ((uint64_t)1 << i)) &&
-            (flags & memory_type.propertyFlags) == flags &&
-            mem_props->memoryHeaps[memory_type.heapIndex].size >= mem_req->size) {
-            return static_cast<int32_t>(i);
-        }
-    }
-    return UINT32_MAX;
-}
-
-static vk_buffer ggml_vk_create_buffer(ggml_backend_vk_context * ctx, size_t size, vk::MemoryPropertyFlags req_flags, vk::MemoryPropertyFlags fallback_flags = vk::MemoryPropertyFlags(0)) {
-    VK_LOG_DEBUG("ggml_vk_create_buffer(device " << ctx->idx << ", " << size << ", " << to_string(req_flags) << ", " << to_string(fallback_flags) << ")");
-    vk_buffer buf = std::make_shared<vk_buffer_struct>();
-
-    if (size == 0) {
-        buf->size = 0;
-        return buf;
-    }
-
-    buf->size = size;
-    vk::BufferCreateInfo buffer_create_info{
-        vk::BufferCreateFlags(),
-        size,
-        vk::BufferUsageFlagBits::eStorageBuffer | vk::BufferUsageFlagBits::eTransferSrc | vk::BufferUsageFlagBits::eTransferDst,
-        vk::SharingMode::eExclusive,
-        0,
-        nullptr,
-    };
-
-    buf->buffer = ctx->device->device.createBuffer(buffer_create_info);
-
-    vk::MemoryRequirements mem_req = ctx->device->device.getBufferMemoryRequirements(buf->buffer);
-
-    vk::PhysicalDeviceMemoryProperties mem_props = ctx->device->physical_device.getMemoryProperties();
-
-    uint32_t memory_type_index = UINT32_MAX;
-
-    memory_type_index = find_properties(&mem_props, &mem_req, req_flags);
-    buf->memory_property_flags = req_flags;
-
-    if (memory_type_index == UINT32_MAX && fallback_flags) {
-        memory_type_index = find_properties(&mem_props, &mem_req, fallback_flags);
-        buf->memory_property_flags = fallback_flags;
-    }
-
-    if (memory_type_index == UINT32_MAX) {
-        ctx->device->device.destroyBuffer(buf->buffer);
-        buf->size = 0;
-        throw vk::OutOfDeviceMemoryError("No suitable memory type found");
-    }
-
-    try {
-        buf->device_memory = ctx->device->device.allocateMemory({ mem_req.size, memory_type_index });
-    } catch (const vk::SystemError& e) {
-        // Out of Host/Device memory, clean up buffer
-        ctx->device->device.destroyBuffer(buf->buffer);
-        buf->size = 0;
-        throw e;
-    }
-    buf->ptr = nullptr;
-
-    if (buf->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) {
-        buf->ptr = ctx->device->device.mapMemory(buf->device_memory, 0, VK_WHOLE_SIZE);
-    }
-
-    ctx->device->device.bindBufferMemory(buf->buffer, buf->device_memory, 0);
-
-    buf->ctx = ctx;
-
-    buf->device = ctx->device;
-
-#ifdef GGML_VULKAN_MEMORY_DEBUG
-    ctx->memory_logger.log_allocation(buf, size);
-#endif
-
-    return buf;
-}
-
-static vk_buffer ggml_vk_create_buffer_check(ggml_backend_vk_context * ctx, size_t size, vk::MemoryPropertyFlags req_flags, vk::MemoryPropertyFlags fallback_flags = vk::MemoryPropertyFlags(0)) {
-    try {
-        return ggml_vk_create_buffer(ctx, size, req_flags, fallback_flags);
-    } catch (const vk::SystemError& e) {
-        std::cerr << "ggml_vulkan: Memory allocation of size " << size << " failed." << std::endl;
-        std::cerr << "ggml_vulkan: " << e.what() << std::endl;
-        throw e;
-    }
-}
-
-static vk_buffer ggml_vk_create_buffer_device(ggml_backend_vk_context * ctx, size_t size) {
-    vk_buffer buf;
-    try {
-        if (ctx->device->uma) {
-            // Fall back to host memory type
-            buf = ggml_vk_create_buffer(ctx, size, vk::MemoryPropertyFlagBits::eDeviceLocal, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
-        } else {
-            buf = ggml_vk_create_buffer(ctx, size, vk::MemoryPropertyFlagBits::eDeviceLocal);
-        }
-    } catch (const vk::SystemError& e) {
-        std::cerr << "ggml_vulkan: Device memory allocation of size " << size << " failed." << std::endl;
-        std::cerr << "ggml_vulkan: " << e.what() << std::endl;
-        throw e;
-    }
-
-    return buf;
-}
-
-static void ggml_vk_destroy_buffer(vk_buffer& buf) {
-    if (buf == nullptr) {
-        return;
-    }
-
-#ifdef GGML_VULKAN_MEMORY_DEBUG
-    buf->ctx->memory_logger.log_deallocation(buf);
-#endif
-
-    buf.reset();
-}
-
-static vk_subbuffer ggml_vk_subbuffer(vk_buffer& buf) {
-    return { buf, 0, VK_WHOLE_SIZE };
-}
-
-static void ggml_vk_sync_buffers(vk_context * ctx) {
-    VK_LOG_DEBUG("ggml_vk_sync_buffers()");
-    const std::vector<vk::MemoryBarrier> mem_barriers{ { { vk::AccessFlagBits::eMemoryRead | vk::AccessFlagBits::eMemoryWrite }, { vk::AccessFlagBits::eMemoryRead | vk::AccessFlagBits::eMemoryWrite } } };
-
-    ctx->s->buffer.pipelineBarrier(
-        ctx->q->stage_flags,
-        ctx->q->stage_flags,
-        {},
-        mem_barriers,
-        {},
-        {}
-    );
-}
-
-static void ggml_vk_wait_events(vk_context * ctx, std::vector<vk::Event>&& events) {
-    VK_LOG_DEBUG("ggml_vk_wait_events()");
-    if (events.empty()) {
-        return;
-    }
-
-    ctx->s->buffer.waitEvents(
-        events,
-        ctx->q->stage_flags,
-        ctx->q->stage_flags,
-        {},
-        {},
-        {}
-    );
-}
-
-static bool ggml_vk_build_shader(ggml_type type) {
-    switch(type) {
-    case GGML_TYPE_F16:
-    case GGML_TYPE_Q4_0:
-    case GGML_TYPE_Q4_1:
-    case GGML_TYPE_Q5_0:
-    case GGML_TYPE_Q5_1:
-    case GGML_TYPE_Q8_0:
-    case GGML_TYPE_Q2_K:
-    case GGML_TYPE_Q3_K:
-    case GGML_TYPE_Q4_K:
-    case GGML_TYPE_Q5_K:
-    case GGML_TYPE_Q6_K:
-        return true;
-    default:
-        return false;
-    }
-}
-
-static void ggml_vk_load_shaders(ggml_backend_vk_context * ctx) {
-    VK_LOG_DEBUG("ggml_vk_load_shaders(" << ctx->name << ")");
-
-    const std::shared_ptr<vk_device> device = ctx->device;
-
-    // mulmat
-    std::initializer_list<uint32_t> warptile_l = { 128, 128, 128, 16, device->subgroup_size * 2, 64, 2, 4, 4, device->subgroup_size };
-    std::initializer_list<uint32_t> warptile_m = { 128,  64,  64, 16, device->subgroup_size, 32, 2, 4, 2, device->subgroup_size };
-    std::initializer_list<uint32_t> warptile_s = { device->subgroup_size,  32,  32, 16, 32, 32, 2, 2, 2, device->subgroup_size };
-
-    std::initializer_list<uint32_t> warptile_mmq_l = { 128, 128, 128, 32, device->subgroup_size * 2, 64, 2, 4, 4, device->subgroup_size };
-    std::initializer_list<uint32_t> warptile_mmq_m = { 128,  64,  64, 32, device->subgroup_size, 32, 2, 4, 2, device->subgroup_size };
-    std::initializer_list<uint32_t> warptile_mmq_s = { device->subgroup_size,  32,  32, 32, 32, 32, 2, 2, 2, device->subgroup_size };
-
-    std::array<uint32_t, 3> l_wg_denoms = {128, 128, 1 };
-    std::array<uint32_t, 3> m_wg_denoms = { 64,  64, 1 };
-    std::array<uint32_t, 3> s_wg_denoms = { 32,  32, 1 };
-
-    uint32_t l_align = 128;
-    uint32_t m_align =  64;
-    uint32_t s_align =  32;
-
-    ctx->device->pipeline_matmul_f32 = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_matmul_f32_f16 = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_matmul_f16_f32 = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_matmul_f16 = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K] = std::make_shared<vk_matmul_pipeline_struct>();
-
-    ctx->device->pipeline_matmul_id_f32 = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_matmul_id_f16_f32 = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_matmul_id_f16 = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K] = std::make_shared<vk_matmul_pipeline_struct>();
-    ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K] = std::make_shared<vk_matmul_pipeline_struct>();
-
-    if (device->fp16) {
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->l, "matmul_f32_l", matmul_f32_f32_len, matmul_f32_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->m, "matmul_f32_m", matmul_f32_f32_len, matmul_f32_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->s, "matmul_f32_s", matmul_f32_f32_len, matmul_f32_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_l, "matmul_f32_aligned_l", matmul_f32_f32_aligned_len, matmul_f32_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_m, "matmul_f32_aligned_m", matmul_f32_f32_aligned_len, matmul_f32_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_s, "matmul_f32_aligned_s", matmul_f32_f32_aligned_len, matmul_f32_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->l, "matmul_f32_f16_l", matmul_f32_f16_len, matmul_f32_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->m, "matmul_f32_f16_m", matmul_f32_f16_len, matmul_f32_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->s, "matmul_f32_f16_s", matmul_f32_f16_len, matmul_f32_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->a_l, "matmul_f32_f16_aligned_l", matmul_f32_f16_aligned_len, matmul_f32_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->a_m, "matmul_f32_f16_aligned_m", matmul_f32_f16_aligned_len, matmul_f32_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->a_s, "matmul_f32_f16_aligned_s", matmul_f32_f16_aligned_len, matmul_f32_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->l, "matmul_f16_l", matmul_f16_len, matmul_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->m, "matmul_f16_m", matmul_f16_len, matmul_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->s, "matmul_f16_s", matmul_f16_len, matmul_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_l, "matmul_f16_aligned_l", matmul_f16_aligned_len, matmul_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_m, "matmul_f16_aligned_m", matmul_f16_aligned_len, matmul_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_s, "matmul_f16_aligned_s", matmul_f16_aligned_len, matmul_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->l, "matmul_f16_f32_l", matmul_f16_f32_len, matmul_f16_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->m, "matmul_f16_f32_m", matmul_f16_f32_len, matmul_f16_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->s, "matmul_f16_f32_s", matmul_f16_f32_len, matmul_f16_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_l, "matmul_f16_f32_aligned_l", matmul_f16_f32_aligned_len, matmul_f16_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_m, "matmul_f16_f32_aligned_m", matmul_f16_f32_aligned_len, matmul_f16_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_s, "matmul_f16_f32_aligned_s", matmul_f16_f32_aligned_len, matmul_f16_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->l, "matmul_q4_0_f32_l", matmul_q4_0_f32_len, matmul_q4_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->m, "matmul_q4_0_f32_m", matmul_q4_0_f32_len, matmul_q4_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->s, "matmul_q4_0_f32_s", matmul_q4_0_f32_len, matmul_q4_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_l, "matmul_q4_0_f32_aligned_l", matmul_q4_0_f32_aligned_len, matmul_q4_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_m, "matmul_q4_0_f32_aligned_m", matmul_q4_0_f32_aligned_len, matmul_q4_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_s, "matmul_q4_0_f32_aligned_s", matmul_q4_0_f32_aligned_len, matmul_q4_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->l, "matmul_q4_1_f32_l", matmul_q4_1_f32_len, matmul_q4_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->m, "matmul_q4_1_f32_m", matmul_q4_1_f32_len, matmul_q4_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->s, "matmul_q4_1_f32_s", matmul_q4_1_f32_len, matmul_q4_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_l, "matmul_q4_1_f32_aligned_l", matmul_q4_1_f32_aligned_len, matmul_q4_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_m, "matmul_q4_1_f32_aligned_m", matmul_q4_1_f32_aligned_len, matmul_q4_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_s, "matmul_q4_1_f32_aligned_s", matmul_q4_1_f32_aligned_len, matmul_q4_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->l, "matmul_q5_0_f32_l", matmul_q5_0_f32_len, matmul_q5_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->m, "matmul_q5_0_f32_m", matmul_q5_0_f32_len, matmul_q5_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->s, "matmul_q5_0_f32_s", matmul_q5_0_f32_len, matmul_q5_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_l, "matmul_q5_0_f32_aligned_l", matmul_q5_0_f32_aligned_len, matmul_q5_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_m, "matmul_q5_0_f32_aligned_m", matmul_q5_0_f32_aligned_len, matmul_q5_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_s, "matmul_q5_0_f32_aligned_s", matmul_q5_0_f32_aligned_len, matmul_q5_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->l, "matmul_q5_1_f32_l", matmul_q5_1_f32_len, matmul_q5_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->m, "matmul_q5_1_f32_m", matmul_q5_1_f32_len, matmul_q5_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->s, "matmul_q5_1_f32_s", matmul_q5_1_f32_len, matmul_q5_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_l, "matmul_q5_1_f32_aligned_l", matmul_q5_1_f32_aligned_len, matmul_q5_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_m, "matmul_q5_1_f32_aligned_m", matmul_q5_1_f32_aligned_len, matmul_q5_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_s, "matmul_q5_1_f32_aligned_s", matmul_q5_1_f32_aligned_len, matmul_q5_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->l, "matmul_q8_0_f32_l", matmul_q8_0_f32_len, matmul_q8_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->m, "matmul_q8_0_f32_m", matmul_q8_0_f32_len, matmul_q8_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->s, "matmul_q8_0_f32_s", matmul_q8_0_f32_len, matmul_q8_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_l, "matmul_q8_0_f32_aligned_l", matmul_q8_0_f32_aligned_len, matmul_q8_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_m, "matmul_q8_0_f32_aligned_m", matmul_q8_0_f32_aligned_len, matmul_q8_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_s, "matmul_q8_0_f32_aligned_s", matmul_q8_0_f32_aligned_len, matmul_q8_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->l, "matmul_q2_k_f32_l", matmul_q2_k_f32_len, matmul_q2_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->m, "matmul_q2_k_f32_m", matmul_q2_k_f32_len, matmul_q2_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->s, "matmul_q2_k_f32_s", matmul_q2_k_f32_len, matmul_q2_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_l, "matmul_q2_k_f32_aligned_l", matmul_q2_k_f32_aligned_len, matmul_q2_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_m, "matmul_q2_k_f32_aligned_m", matmul_q2_k_f32_aligned_len, matmul_q2_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_s, "matmul_q2_k_f32_aligned_s", matmul_q2_k_f32_aligned_len, matmul_q2_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->l, "matmul_q3_k_f32_l", matmul_q3_k_f32_len, matmul_q3_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->m, "matmul_q3_k_f32_m", matmul_q3_k_f32_len, matmul_q3_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->s, "matmul_q3_k_f32_s", matmul_q3_k_f32_len, matmul_q3_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_l, "matmul_q3_k_f32_aligned_l", matmul_q3_k_f32_aligned_len, matmul_q3_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_m, "matmul_q3_k_f32_aligned_m", matmul_q3_k_f32_aligned_len, matmul_q3_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_s, "matmul_q3_k_f32_aligned_s", matmul_q3_k_f32_aligned_len, matmul_q3_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->l, "matmul_q4_k_f32_l", matmul_q4_k_f32_len, matmul_q4_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->m, "matmul_q4_k_f32_m", matmul_q4_k_f32_len, matmul_q4_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->s, "matmul_q4_k_f32_s", matmul_q4_k_f32_len, matmul_q4_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_l, "matmul_q4_k_f32_aligned_l", matmul_q4_k_f32_aligned_len, matmul_q4_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_m, "matmul_q4_k_f32_aligned_m", matmul_q4_k_f32_aligned_len, matmul_q4_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_s, "matmul_q4_k_f32_aligned_s", matmul_q4_k_f32_aligned_len, matmul_q4_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->l, "matmul_q5_k_f32_l", matmul_q5_k_f32_len, matmul_q5_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->m, "matmul_q5_k_f32_m", matmul_q5_k_f32_len, matmul_q5_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->s, "matmul_q5_k_f32_s", matmul_q5_k_f32_len, matmul_q5_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_l, "matmul_q5_k_f32_aligned_l", matmul_q5_k_f32_aligned_len, matmul_q5_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_m, "matmul_q5_k_f32_aligned_m", matmul_q5_k_f32_aligned_len, matmul_q5_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_s, "matmul_q5_k_f32_aligned_s", matmul_q5_k_f32_aligned_len, matmul_q5_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->l, "matmul_q6_k_f32_l", matmul_q6_k_f32_len, matmul_q6_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->m, "matmul_q6_k_f32_m", matmul_q6_k_f32_len, matmul_q6_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->s, "matmul_q6_k_f32_s", matmul_q6_k_f32_len, matmul_q6_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_l, "matmul_q6_k_f32_aligned_l", matmul_q6_k_f32_aligned_len, matmul_q6_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_m, "matmul_q6_k_f32_aligned_m", matmul_q6_k_f32_aligned_len, matmul_q6_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_s, "matmul_q6_k_f32_aligned_s", matmul_q6_k_f32_aligned_len, matmul_q6_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->l, "matmul_id_f32_l", matmul_id_f32_f32_len, matmul_id_f32_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->m, "matmul_id_f32_m", matmul_id_f32_f32_len, matmul_id_f32_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->s, "matmul_id_f32_s", matmul_id_f32_f32_len, matmul_id_f32_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->a_l, "matmul_id_f32_aligned_l", matmul_id_f32_f32_aligned_len, matmul_id_f32_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->a_m, "matmul_id_f32_aligned_m", matmul_id_f32_f32_aligned_len, matmul_id_f32_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->a_s, "matmul_id_f32_aligned_s", matmul_id_f32_f32_aligned_len, matmul_id_f32_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->l, "matmul_id_f16_l", matmul_id_f16_len, matmul_id_f16_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->m, "matmul_id_f16_m", matmul_id_f16_len, matmul_id_f16_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->s, "matmul_id_f16_s", matmul_id_f16_len, matmul_id_f16_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->a_l, "matmul_id_f16_aligned_l", matmul_id_f16_aligned_len, matmul_id_f16_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->a_m, "matmul_id_f16_aligned_m", matmul_id_f16_aligned_len, matmul_id_f16_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->a_s, "matmul_id_f16_aligned_s", matmul_id_f16_aligned_len, matmul_id_f16_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->l, "matmul_id_f16_f32_l", matmul_id_f16_f32_len, matmul_id_f16_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->m, "matmul_id_f16_f32_m", matmul_id_f16_f32_len, matmul_id_f16_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->s, "matmul_id_f16_f32_s", matmul_id_f16_f32_len, matmul_id_f16_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->a_l, "matmul_id_f16_f32_aligned_l", matmul_id_f16_f32_aligned_len, matmul_id_f16_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->a_m, "matmul_id_f16_f32_aligned_m", matmul_id_f16_f32_aligned_len, matmul_id_f16_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->a_s, "matmul_id_f16_f32_aligned_s", matmul_id_f16_f32_aligned_len, matmul_id_f16_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->l, "matmul_id_q4_0_f32_l", matmul_id_q4_0_f32_len, matmul_id_q4_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->m, "matmul_id_q4_0_f32_m", matmul_id_q4_0_f32_len, matmul_id_q4_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->s, "matmul_id_q4_0_f32_s", matmul_id_q4_0_f32_len, matmul_id_q4_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_l, "matmul_id_q4_0_f32_aligned_l", matmul_id_q4_0_f32_aligned_len, matmul_id_q4_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_m, "matmul_id_q4_0_f32_aligned_m", matmul_id_q4_0_f32_aligned_len, matmul_id_q4_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_s, "matmul_id_q4_0_f32_aligned_s", matmul_id_q4_0_f32_aligned_len, matmul_id_q4_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->l, "matmul_id_q4_1_f32_l", matmul_id_q4_1_f32_len, matmul_id_q4_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->m, "matmul_id_q4_1_f32_m", matmul_id_q4_1_f32_len, matmul_id_q4_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->s, "matmul_id_q4_1_f32_s", matmul_id_q4_1_f32_len, matmul_id_q4_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_l, "matmul_id_q4_1_f32_aligned_l", matmul_id_q4_1_f32_aligned_len, matmul_id_q4_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_m, "matmul_id_q4_1_f32_aligned_m", matmul_id_q4_1_f32_aligned_len, matmul_id_q4_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_s, "matmul_id_q4_1_f32_aligned_s", matmul_id_q4_1_f32_aligned_len, matmul_id_q4_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->l, "matmul_id_q5_0_f32_l", matmul_id_q5_0_f32_len, matmul_id_q5_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->m, "matmul_id_q5_0_f32_m", matmul_id_q5_0_f32_len, matmul_id_q5_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->s, "matmul_id_q5_0_f32_s", matmul_id_q5_0_f32_len, matmul_id_q5_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_l, "matmul_id_q5_0_f32_aligned_l", matmul_id_q5_0_f32_aligned_len, matmul_id_q5_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_m, "matmul_id_q5_0_f32_aligned_m", matmul_id_q5_0_f32_aligned_len, matmul_id_q5_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_s, "matmul_id_q5_0_f32_aligned_s", matmul_id_q5_0_f32_aligned_len, matmul_id_q5_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->l, "matmul_id_q5_1_f32_l", matmul_id_q5_1_f32_len, matmul_id_q5_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->m, "matmul_id_q5_1_f32_m", matmul_id_q5_1_f32_len, matmul_id_q5_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->s, "matmul_id_q5_1_f32_s", matmul_id_q5_1_f32_len, matmul_id_q5_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_l, "matmul_id_q5_1_f32_aligned_l", matmul_id_q5_1_f32_aligned_len, matmul_id_q5_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_m, "matmul_id_q5_1_f32_aligned_m", matmul_id_q5_1_f32_aligned_len, matmul_id_q5_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_s, "matmul_id_q5_1_f32_aligned_s", matmul_id_q5_1_f32_aligned_len, matmul_id_q5_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->l, "matmul_id_q8_0_f32_l", matmul_id_q8_0_f32_len, matmul_id_q8_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->m, "matmul_id_q8_0_f32_m", matmul_id_q8_0_f32_len, matmul_id_q8_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->s, "matmul_id_q8_0_f32_s", matmul_id_q8_0_f32_len, matmul_id_q8_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_l, "matmul_id_q8_0_f32_aligned_l", matmul_id_q8_0_f32_aligned_len, matmul_id_q8_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_m, "matmul_id_q8_0_f32_aligned_m", matmul_id_q8_0_f32_aligned_len, matmul_id_q8_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_s, "matmul_id_q8_0_f32_aligned_s", matmul_id_q8_0_f32_aligned_len, matmul_id_q8_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->l, "matmul_id_q2_k_f32_l", matmul_id_q2_k_f32_len, matmul_id_q2_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->m, "matmul_id_q2_k_f32_m", matmul_id_q2_k_f32_len, matmul_id_q2_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->s, "matmul_id_q2_k_f32_s", matmul_id_q2_k_f32_len, matmul_id_q2_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_l, "matmul_id_q2_k_f32_aligned_l", matmul_id_q2_k_f32_aligned_len, matmul_id_q2_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_m, "matmul_id_q2_k_f32_aligned_m", matmul_id_q2_k_f32_aligned_len, matmul_id_q2_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_s, "matmul_id_q2_k_f32_aligned_s", matmul_id_q2_k_f32_aligned_len, matmul_id_q2_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->l, "matmul_id_q3_k_f32_l", matmul_id_q3_k_f32_len, matmul_id_q3_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->m, "matmul_id_q3_k_f32_m", matmul_id_q3_k_f32_len, matmul_id_q3_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->s, "matmul_id_q3_k_f32_s", matmul_id_q3_k_f32_len, matmul_id_q3_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_l, "matmul_id_q3_k_f32_aligned_l", matmul_id_q3_k_f32_aligned_len, matmul_id_q3_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_m, "matmul_id_q3_k_f32_aligned_m", matmul_id_q3_k_f32_aligned_len, matmul_id_q3_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_s, "matmul_id_q3_k_f32_aligned_s", matmul_id_q3_k_f32_aligned_len, matmul_id_q3_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->l, "matmul_id_q4_k_f32_l", matmul_id_q4_k_f32_len, matmul_id_q4_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->m, "matmul_id_q4_k_f32_m", matmul_id_q4_k_f32_len, matmul_id_q4_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->s, "matmul_id_q4_k_f32_s", matmul_id_q4_k_f32_len, matmul_id_q4_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_l, "matmul_id_q4_k_f32_aligned_l", matmul_id_q4_k_f32_aligned_len, matmul_id_q4_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_m, "matmul_id_q4_k_f32_aligned_m", matmul_id_q4_k_f32_aligned_len, matmul_id_q4_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_s, "matmul_id_q4_k_f32_aligned_s", matmul_id_q4_k_f32_aligned_len, matmul_id_q4_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->l, "matmul_id_q5_k_f32_l", matmul_id_q5_k_f32_len, matmul_id_q5_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->m, "matmul_id_q5_k_f32_m", matmul_id_q5_k_f32_len, matmul_id_q5_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->s, "matmul_id_q5_k_f32_s", matmul_id_q5_k_f32_len, matmul_id_q5_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_l, "matmul_id_q5_k_f32_aligned_l", matmul_id_q5_k_f32_aligned_len, matmul_id_q5_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_m, "matmul_id_q5_k_f32_aligned_m", matmul_id_q5_k_f32_aligned_len, matmul_id_q5_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_s, "matmul_id_q5_k_f32_aligned_s", matmul_id_q5_k_f32_aligned_len, matmul_id_q5_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->l, "matmul_id_q6_k_f32_l", matmul_id_q6_k_f32_len, matmul_id_q6_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->m, "matmul_id_q6_k_f32_m", matmul_id_q6_k_f32_len, matmul_id_q6_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->s, "matmul_id_q6_k_f32_s", matmul_id_q6_k_f32_len, matmul_id_q6_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_l, "matmul_id_q6_k_f32_aligned_l", matmul_id_q6_k_f32_aligned_len, matmul_id_q6_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_m, "matmul_id_q6_k_f32_aligned_m", matmul_id_q6_k_f32_aligned_len, matmul_id_q6_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_s, "matmul_id_q6_k_f32_aligned_s", matmul_id_q6_k_f32_aligned_len, matmul_id_q6_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-    } else {
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->l, "matmul_f32_l", matmul_f32_f32_fp32_len, matmul_f32_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->m, "matmul_f32_m", matmul_f32_f32_fp32_len, matmul_f32_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->s, "matmul_f32_s", matmul_f32_f32_fp32_len, matmul_f32_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_l, "matmul_f32_aligned_l", matmul_f32_f32_aligned_fp32_len, matmul_f32_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_m, "matmul_f32_aligned_m", matmul_f32_f32_aligned_fp32_len, matmul_f32_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32->a_s, "matmul_f32_aligned_s", matmul_f32_f32_aligned_fp32_len, matmul_f32_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->l, "matmul_f32_f16_l", matmul_f32_f16_fp32_len, matmul_f32_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->m, "matmul_f32_f16_m", matmul_f32_f16_fp32_len, matmul_f32_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->s, "matmul_f32_f16_s", matmul_f32_f16_fp32_len, matmul_f32_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->a_l, "matmul_f32_f16_aligned_l", matmul_f32_f16_aligned_fp32_len, matmul_f32_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->a_m, "matmul_f32_f16_aligned_m", matmul_f32_f16_aligned_fp32_len, matmul_f32_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f32_f16->a_s, "matmul_f32_f16_aligned_s", matmul_f32_f16_aligned_fp32_len, matmul_f32_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->l, "matmul_f16_l", matmul_f16_fp32_len, matmul_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->m, "matmul_f16_m", matmul_f16_fp32_len, matmul_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->s, "matmul_f16_s", matmul_f16_fp32_len, matmul_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_l, "matmul_f16_aligned_l", matmul_f16_aligned_fp32_len, matmul_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_m, "matmul_f16_aligned_m", matmul_f16_aligned_fp32_len, matmul_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16->a_s, "matmul_f16_aligned_s", matmul_f16_aligned_fp32_len, matmul_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->l, "matmul_f16_f32_l", matmul_f16_f32_fp32_len, matmul_f16_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->m, "matmul_f16_f32_m", matmul_f16_f32_fp32_len, matmul_f16_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->s, "matmul_f16_f32_s", matmul_f16_f32_fp32_len, matmul_f16_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_l, "matmul_f16_f32_aligned_l", matmul_f16_f32_aligned_fp32_len, matmul_f16_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_m, "matmul_f16_f32_aligned_m", matmul_f16_f32_aligned_fp32_len, matmul_f16_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_f16_f32->a_s, "matmul_f16_f32_aligned_s", matmul_f16_f32_aligned_fp32_len, matmul_f16_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->l, "matmul_q4_0_f32_l", matmul_q4_0_f32_fp32_len, matmul_q4_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->m, "matmul_q4_0_f32_m", matmul_q4_0_f32_fp32_len, matmul_q4_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->s, "matmul_q4_0_f32_s", matmul_q4_0_f32_fp32_len, matmul_q4_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_l, "matmul_q4_0_f32_aligned_l", matmul_q4_0_f32_aligned_fp32_len, matmul_q4_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_m, "matmul_q4_0_f32_aligned_m", matmul_q4_0_f32_aligned_fp32_len, matmul_q4_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_s, "matmul_q4_0_f32_aligned_s", matmul_q4_0_f32_aligned_fp32_len, matmul_q4_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->l, "matmul_q4_1_f32_l", matmul_q4_1_f32_fp32_len, matmul_q4_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->m, "matmul_q4_1_f32_m", matmul_q4_1_f32_fp32_len, matmul_q4_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->s, "matmul_q4_1_f32_s", matmul_q4_1_f32_fp32_len, matmul_q4_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_l, "matmul_q4_1_f32_aligned_l", matmul_q4_1_f32_aligned_fp32_len, matmul_q4_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_m, "matmul_q4_1_f32_aligned_m", matmul_q4_1_f32_aligned_fp32_len, matmul_q4_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_s, "matmul_q4_1_f32_aligned_s", matmul_q4_1_f32_aligned_fp32_len, matmul_q4_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->l, "matmul_q5_0_f32_l", matmul_q5_0_f32_fp32_len, matmul_q5_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->m, "matmul_q5_0_f32_m", matmul_q5_0_f32_fp32_len, matmul_q5_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->s, "matmul_q5_0_f32_s", matmul_q5_0_f32_fp32_len, matmul_q5_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_l, "matmul_q5_0_f32_aligned_l", matmul_q5_0_f32_aligned_fp32_len, matmul_q5_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_m, "matmul_q5_0_f32_aligned_m", matmul_q5_0_f32_aligned_fp32_len, matmul_q5_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_s, "matmul_q5_0_f32_aligned_s", matmul_q5_0_f32_aligned_fp32_len, matmul_q5_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->l, "matmul_q5_1_f32_l", matmul_q5_1_f32_fp32_len, matmul_q5_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->m, "matmul_q5_1_f32_m", matmul_q5_1_f32_fp32_len, matmul_q5_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->s, "matmul_q5_1_f32_s", matmul_q5_1_f32_fp32_len, matmul_q5_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_l, "matmul_q5_1_f32_aligned_l", matmul_q5_1_f32_aligned_fp32_len, matmul_q5_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_m, "matmul_q5_1_f32_aligned_m", matmul_q5_1_f32_aligned_fp32_len, matmul_q5_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_s, "matmul_q5_1_f32_aligned_s", matmul_q5_1_f32_aligned_fp32_len, matmul_q5_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->l, "matmul_q8_0_f32_l", matmul_q8_0_f32_fp32_len, matmul_q8_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->m, "matmul_q8_0_f32_m", matmul_q8_0_f32_fp32_len, matmul_q8_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->s, "matmul_q8_0_f32_s", matmul_q8_0_f32_fp32_len, matmul_q8_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_l, "matmul_q8_0_f32_aligned_l", matmul_q8_0_f32_aligned_fp32_len, matmul_q8_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_m, "matmul_q8_0_f32_aligned_m", matmul_q8_0_f32_aligned_fp32_len, matmul_q8_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_s, "matmul_q8_0_f32_aligned_s", matmul_q8_0_f32_aligned_fp32_len, matmul_q8_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->l, "matmul_q2_k_f32_l", matmul_q2_k_f32_fp32_len, matmul_q2_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->m, "matmul_q2_k_f32_m", matmul_q2_k_f32_fp32_len, matmul_q2_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->s, "matmul_q2_k_f32_s", matmul_q2_k_f32_fp32_len, matmul_q2_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_l, "matmul_q2_k_f32_aligned_l", matmul_q2_k_f32_aligned_fp32_len, matmul_q2_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_m, "matmul_q2_k_f32_aligned_m", matmul_q2_k_f32_aligned_fp32_len, matmul_q2_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_s, "matmul_q2_k_f32_aligned_s", matmul_q2_k_f32_aligned_fp32_len, matmul_q2_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->l, "matmul_q3_k_f32_l", matmul_q3_k_f32_fp32_len, matmul_q3_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->m, "matmul_q3_k_f32_m", matmul_q3_k_f32_fp32_len, matmul_q3_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->s, "matmul_q3_k_f32_s", matmul_q3_k_f32_fp32_len, matmul_q3_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_l, "matmul_q3_k_f32_aligned_l", matmul_q3_k_f32_aligned_fp32_len, matmul_q3_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_m, "matmul_q3_k_f32_aligned_m", matmul_q3_k_f32_aligned_fp32_len, matmul_q3_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_s, "matmul_q3_k_f32_aligned_s", matmul_q3_k_f32_aligned_fp32_len, matmul_q3_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->l, "matmul_q4_k_f32_l", matmul_q4_k_f32_fp32_len, matmul_q4_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->m, "matmul_q4_k_f32_m", matmul_q4_k_f32_fp32_len, matmul_q4_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->s, "matmul_q4_k_f32_s", matmul_q4_k_f32_fp32_len, matmul_q4_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_l, "matmul_q4_k_f32_aligned_l", matmul_q4_k_f32_aligned_fp32_len, matmul_q4_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_m, "matmul_q4_k_f32_aligned_m", matmul_q4_k_f32_aligned_fp32_len, matmul_q4_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_s, "matmul_q4_k_f32_aligned_s", matmul_q4_k_f32_aligned_fp32_len, matmul_q4_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->l, "matmul_q5_k_f32_l", matmul_q5_k_f32_fp32_len, matmul_q5_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->m, "matmul_q5_k_f32_m", matmul_q5_k_f32_fp32_len, matmul_q5_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->s, "matmul_q5_k_f32_s", matmul_q5_k_f32_fp32_len, matmul_q5_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_l, "matmul_q5_k_f32_aligned_l", matmul_q5_k_f32_aligned_fp32_len, matmul_q5_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_m, "matmul_q5_k_f32_aligned_m", matmul_q5_k_f32_aligned_fp32_len, matmul_q5_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_s, "matmul_q5_k_f32_aligned_s", matmul_q5_k_f32_aligned_fp32_len, matmul_q5_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->l, "matmul_q6_k_f32_l", matmul_q6_k_f32_fp32_len, matmul_q6_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->m, "matmul_q6_k_f32_m", matmul_q6_k_f32_fp32_len, matmul_q6_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->s, "matmul_q6_k_f32_s", matmul_q6_k_f32_fp32_len, matmul_q6_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_l, "matmul_q6_k_f32_aligned_l", matmul_q6_k_f32_aligned_fp32_len, matmul_q6_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_m, "matmul_q6_k_f32_aligned_m", matmul_q6_k_f32_aligned_fp32_len, matmul_q6_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_s, "matmul_q6_k_f32_aligned_s", matmul_q6_k_f32_aligned_fp32_len, matmul_q6_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->l, "matmul_id_f32_l", matmul_id_f32_f32_fp32_len, matmul_id_f32_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->m, "matmul_id_f32_m", matmul_id_f32_f32_fp32_len, matmul_id_f32_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->s, "matmul_id_f32_s", matmul_id_f32_f32_fp32_len, matmul_id_f32_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->a_l, "matmul_id_f32_aligned_l", matmul_id_f32_f32_aligned_fp32_len, matmul_id_f32_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->a_m, "matmul_id_f32_aligned_m", matmul_id_f32_f32_aligned_fp32_len, matmul_id_f32_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f32->a_s, "matmul_id_f32_aligned_s", matmul_id_f32_f32_aligned_fp32_len, matmul_id_f32_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->l, "matmul_id_f16_l", matmul_id_f16_fp32_len, matmul_id_f16_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->m, "matmul_id_f16_m", matmul_id_f16_fp32_len, matmul_id_f16_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->s, "matmul_id_f16_s", matmul_id_f16_fp32_len, matmul_id_f16_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->a_l, "matmul_id_f16_aligned_l", matmul_id_f16_aligned_fp32_len, matmul_id_f16_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->a_m, "matmul_id_f16_aligned_m", matmul_id_f16_aligned_fp32_len, matmul_id_f16_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16->a_s, "matmul_id_f16_aligned_s", matmul_id_f16_aligned_fp32_len, matmul_id_f16_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->l, "matmul_id_f16_f32_l", matmul_id_f16_f32_fp32_len, matmul_id_f16_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->m, "matmul_id_f16_f32_m", matmul_id_f16_f32_fp32_len, matmul_id_f16_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->s, "matmul_id_f16_f32_s", matmul_id_f16_f32_fp32_len, matmul_id_f16_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->a_l, "matmul_id_f16_f32_aligned_l", matmul_id_f16_f32_aligned_fp32_len, matmul_id_f16_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->a_m, "matmul_id_f16_f32_aligned_m", matmul_id_f16_f32_aligned_fp32_len, matmul_id_f16_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_id_f16_f32->a_s, "matmul_id_f16_f32_aligned_s", matmul_id_f16_f32_aligned_fp32_len, matmul_id_f16_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->l, "matmul_id_q4_0_f32_l", matmul_id_q4_0_f32_fp32_len, matmul_id_q4_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->m, "matmul_id_q4_0_f32_m", matmul_id_q4_0_f32_fp32_len, matmul_id_q4_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->s, "matmul_id_q4_0_f32_s", matmul_id_q4_0_f32_fp32_len, matmul_id_q4_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_l, "matmul_id_q4_0_f32_aligned_l", matmul_id_q4_0_f32_aligned_fp32_len, matmul_id_q4_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_m, "matmul_id_q4_0_f32_aligned_m", matmul_id_q4_0_f32_aligned_fp32_len, matmul_id_q4_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_s, "matmul_id_q4_0_f32_aligned_s", matmul_id_q4_0_f32_aligned_fp32_len, matmul_id_q4_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->l, "matmul_id_q4_1_f32_l", matmul_id_q4_1_f32_fp32_len, matmul_id_q4_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->m, "matmul_id_q4_1_f32_m", matmul_id_q4_1_f32_fp32_len, matmul_id_q4_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->s, "matmul_id_q4_1_f32_s", matmul_id_q4_1_f32_fp32_len, matmul_id_q4_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_l, "matmul_id_q4_1_f32_aligned_l", matmul_id_q4_1_f32_aligned_fp32_len, matmul_id_q4_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_m, "matmul_id_q4_1_f32_aligned_m", matmul_id_q4_1_f32_aligned_fp32_len, matmul_id_q4_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_s, "matmul_id_q4_1_f32_aligned_s", matmul_id_q4_1_f32_aligned_fp32_len, matmul_id_q4_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->l, "matmul_id_q5_0_f32_l", matmul_id_q5_0_f32_fp32_len, matmul_id_q5_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->m, "matmul_id_q5_0_f32_m", matmul_id_q5_0_f32_fp32_len, matmul_id_q5_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->s, "matmul_id_q5_0_f32_s", matmul_id_q5_0_f32_fp32_len, matmul_id_q5_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_l, "matmul_id_q5_0_f32_aligned_l", matmul_id_q5_0_f32_aligned_fp32_len, matmul_id_q5_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_m, "matmul_id_q5_0_f32_aligned_m", matmul_id_q5_0_f32_aligned_fp32_len, matmul_id_q5_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_s, "matmul_id_q5_0_f32_aligned_s", matmul_id_q5_0_f32_aligned_fp32_len, matmul_id_q5_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->l, "matmul_id_q5_1_f32_l", matmul_id_q5_1_f32_fp32_len, matmul_id_q5_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->m, "matmul_id_q5_1_f32_m", matmul_id_q5_1_f32_fp32_len, matmul_id_q5_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->s, "matmul_id_q5_1_f32_s", matmul_id_q5_1_f32_fp32_len, matmul_id_q5_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_l, "matmul_id_q5_1_f32_aligned_l", matmul_id_q5_1_f32_aligned_fp32_len, matmul_id_q5_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_m, "matmul_id_q5_1_f32_aligned_m", matmul_id_q5_1_f32_aligned_fp32_len, matmul_id_q5_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_s, "matmul_id_q5_1_f32_aligned_s", matmul_id_q5_1_f32_aligned_fp32_len, matmul_id_q5_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->l, "matmul_id_q8_0_f32_l", matmul_id_q8_0_f32_fp32_len, matmul_id_q8_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->m, "matmul_id_q8_0_f32_m", matmul_id_q8_0_f32_fp32_len, matmul_id_q8_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->s, "matmul_id_q8_0_f32_s", matmul_id_q8_0_f32_fp32_len, matmul_id_q8_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_l, "matmul_id_q8_0_f32_aligned_l", matmul_id_q8_0_f32_aligned_fp32_len, matmul_id_q8_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_m, "matmul_id_q8_0_f32_aligned_m", matmul_id_q8_0_f32_aligned_fp32_len, matmul_id_q8_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_s, "matmul_id_q8_0_f32_aligned_s", matmul_id_q8_0_f32_aligned_fp32_len, matmul_id_q8_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->l, "matmul_id_q2_k_f32_l", matmul_id_q2_k_f32_fp32_len, matmul_id_q2_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->m, "matmul_id_q2_k_f32_m", matmul_id_q2_k_f32_fp32_len, matmul_id_q2_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->s, "matmul_id_q2_k_f32_s", matmul_id_q2_k_f32_fp32_len, matmul_id_q2_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_l, "matmul_id_q2_k_f32_aligned_l", matmul_id_q2_k_f32_aligned_fp32_len, matmul_id_q2_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_m, "matmul_id_q2_k_f32_aligned_m", matmul_id_q2_k_f32_aligned_fp32_len, matmul_id_q2_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_s, "matmul_id_q2_k_f32_aligned_s", matmul_id_q2_k_f32_aligned_fp32_len, matmul_id_q2_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->l, "matmul_id_q3_k_f32_l", matmul_id_q3_k_f32_fp32_len, matmul_id_q3_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->m, "matmul_id_q3_k_f32_m", matmul_id_q3_k_f32_fp32_len, matmul_id_q3_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->s, "matmul_id_q3_k_f32_s", matmul_id_q3_k_f32_fp32_len, matmul_id_q3_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_l, "matmul_id_q3_k_f32_aligned_l", matmul_id_q3_k_f32_aligned_fp32_len, matmul_id_q3_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_m, "matmul_id_q3_k_f32_aligned_m", matmul_id_q3_k_f32_aligned_fp32_len, matmul_id_q3_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_s, "matmul_id_q3_k_f32_aligned_s", matmul_id_q3_k_f32_aligned_fp32_len, matmul_id_q3_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->l, "matmul_id_q4_k_f32_l", matmul_id_q4_k_f32_fp32_len, matmul_id_q4_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->m, "matmul_id_q4_k_f32_m", matmul_id_q4_k_f32_fp32_len, matmul_id_q4_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->s, "matmul_id_q4_k_f32_s", matmul_id_q4_k_f32_fp32_len, matmul_id_q4_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_l, "matmul_id_q4_k_f32_aligned_l", matmul_id_q4_k_f32_aligned_fp32_len, matmul_id_q4_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_m, "matmul_id_q4_k_f32_aligned_m", matmul_id_q4_k_f32_aligned_fp32_len, matmul_id_q4_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_s, "matmul_id_q4_k_f32_aligned_s", matmul_id_q4_k_f32_aligned_fp32_len, matmul_id_q4_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->l, "matmul_id_q5_k_f32_l", matmul_id_q5_k_f32_fp32_len, matmul_id_q5_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->m, "matmul_id_q5_k_f32_m", matmul_id_q5_k_f32_fp32_len, matmul_id_q5_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->s, "matmul_id_q5_k_f32_s", matmul_id_q5_k_f32_fp32_len, matmul_id_q5_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_l, "matmul_id_q5_k_f32_aligned_l", matmul_id_q5_k_f32_aligned_fp32_len, matmul_id_q5_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_m, "matmul_id_q5_k_f32_aligned_m", matmul_id_q5_k_f32_aligned_fp32_len, matmul_id_q5_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_s, "matmul_id_q5_k_f32_aligned_s", matmul_id_q5_k_f32_aligned_fp32_len, matmul_id_q5_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->l, "matmul_id_q6_k_f32_l", matmul_id_q6_k_f32_fp32_len, matmul_id_q6_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->m, "matmul_id_q6_k_f32_m", matmul_id_q6_k_f32_fp32_len, matmul_id_q6_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->s, "matmul_id_q6_k_f32_s", matmul_id_q6_k_f32_fp32_len, matmul_id_q6_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_l, "matmul_id_q6_k_f32_aligned_l", matmul_id_q6_k_f32_aligned_fp32_len, matmul_id_q6_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_m, "matmul_id_q6_k_f32_aligned_m", matmul_id_q6_k_f32_aligned_fp32_len, matmul_id_q6_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
-        ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_s, "matmul_id_q6_k_f32_aligned_s", matmul_id_q6_k_f32_aligned_fp32_len, matmul_id_q6_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
-    }
-
-    // mul mat vec
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_F32 ], "mul_mat_vec_f32_f32_f32",  mul_mat_vec_f32_f32_f32_len,  mul_mat_vec_f32_f32_f32_data,  "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_F16 ], "mul_mat_vec_f16_f32_f32",  mul_mat_vec_f16_f32_f32_len,  mul_mat_vec_f16_f32_f32_data,  "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q4_0], "mul_mat_vec_q4_0_f32_f32", mul_mat_vec_q4_0_f32_f32_len, mul_mat_vec_q4_0_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q4_1], "mul_mat_vec_q4_1_f32_f32", mul_mat_vec_q4_1_f32_f32_len, mul_mat_vec_q4_1_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q5_0], "mul_mat_vec_q5_0_f32_f32", mul_mat_vec_q5_0_f32_f32_len, mul_mat_vec_q5_0_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q5_1], "mul_mat_vec_q5_1_f32_f32", mul_mat_vec_q5_1_f32_f32_len, mul_mat_vec_q5_1_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q8_0], "mul_mat_vec_q8_0_f32_f32", mul_mat_vec_q8_0_f32_f32_len, mul_mat_vec_q8_0_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q2_K], "mul_mat_vec_q2_k_f32_f32", mul_mat_vec_q2_k_f32_f32_len, mul_mat_vec_q2_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q3_K], "mul_mat_vec_q3_k_f32_f32", mul_mat_vec_q3_k_f32_f32_len, mul_mat_vec_q3_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q4_K], "mul_mat_vec_q4_k_f32_f32", mul_mat_vec_q4_k_f32_f32_len, mul_mat_vec_q4_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q5_K], "mul_mat_vec_q5_k_f32_f32", mul_mat_vec_q5_k_f32_f32_len, mul_mat_vec_q5_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q6_K], "mul_mat_vec_q6_k_f32_f32", mul_mat_vec_q6_k_f32_f32_len, mul_mat_vec_q6_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_F32 ], "mul_mat_vec_f32_f16_f32",  mul_mat_vec_f32_f16_f32_len,  mul_mat_vec_f32_f16_f32_data,  "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_F16 ], "mul_mat_vec_f16_f16_f32",  mul_mat_vec_f16_f16_f32_len,  mul_mat_vec_f16_f16_f32_data,  "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q4_0], "mul_mat_vec_q4_0_f16_f32", mul_mat_vec_q4_0_f16_f32_len, mul_mat_vec_q4_0_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q4_1], "mul_mat_vec_q4_1_f16_f32", mul_mat_vec_q4_1_f16_f32_len, mul_mat_vec_q4_1_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q5_0], "mul_mat_vec_q5_0_f16_f32", mul_mat_vec_q5_0_f16_f32_len, mul_mat_vec_q5_0_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q5_1], "mul_mat_vec_q5_1_f16_f32", mul_mat_vec_q5_1_f16_f32_len, mul_mat_vec_q5_1_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q8_0], "mul_mat_vec_q8_0_f16_f32", mul_mat_vec_q8_0_f16_f32_len, mul_mat_vec_q8_0_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q2_K], "mul_mat_vec_q2_k_f16_f32", mul_mat_vec_q2_k_f16_f32_len, mul_mat_vec_q2_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q3_K], "mul_mat_vec_q3_k_f16_f32", mul_mat_vec_q3_k_f16_f32_len, mul_mat_vec_q3_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q4_K], "mul_mat_vec_q4_k_f16_f32", mul_mat_vec_q4_k_f16_f32_len, mul_mat_vec_q4_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q5_K], "mul_mat_vec_q5_k_f16_f32", mul_mat_vec_q5_k_f16_f32_len, mul_mat_vec_q5_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q6_K], "mul_mat_vec_q6_k_f16_f32", mul_mat_vec_q6_k_f16_f32_len, mul_mat_vec_q6_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_F32 ], "mul_mat_vec_id_f32_f32",  mul_mat_vec_id_f32_f32_len,  mul_mat_vec_id_f32_f32_data,  "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_F16 ], "mul_mat_vec_id_f16_f32",  mul_mat_vec_id_f16_f32_len,  mul_mat_vec_id_f16_f32_data,  "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q4_0], "mul_mat_vec_id_q4_0_f32", mul_mat_vec_id_q4_0_f32_len, mul_mat_vec_id_q4_0_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q4_1], "mul_mat_vec_id_q4_1_f32", mul_mat_vec_id_q4_1_f32_len, mul_mat_vec_id_q4_1_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q5_0], "mul_mat_vec_id_q5_0_f32", mul_mat_vec_id_q5_0_f32_len, mul_mat_vec_id_q5_0_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q5_1], "mul_mat_vec_id_q5_1_f32", mul_mat_vec_id_q5_1_f32_len, mul_mat_vec_id_q5_1_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q8_0], "mul_mat_vec_id_q8_0_f32", mul_mat_vec_id_q8_0_f32_len, mul_mat_vec_id_q8_0_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q2_K], "mul_mat_vec_id_q2_k_f32", mul_mat_vec_id_q2_k_f32_len, mul_mat_vec_id_q2_k_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q3_K], "mul_mat_vec_id_q3_k_f32", mul_mat_vec_id_q3_k_f32_len, mul_mat_vec_id_q3_k_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q4_K], "mul_mat_vec_id_q4_k_f32", mul_mat_vec_id_q4_k_f32_len, mul_mat_vec_id_q4_k_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q5_K], "mul_mat_vec_id_q5_k_f32", mul_mat_vec_id_q5_k_f32_len, mul_mat_vec_id_q5_k_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q6_K], "mul_mat_vec_id_q6_k_f32", mul_mat_vec_id_q6_k_f32_len, mul_mat_vec_id_q6_k_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-
-    // dequant shaders
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_F32 ], "f32_to_f16",   dequant_f32_len,  dequant_f32_data,  "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q4_0], "dequant_q4_0", dequant_q4_0_len, dequant_q4_0_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q4_1], "dequant_q4_1", dequant_q4_1_len, dequant_q4_1_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q5_0], "dequant_q5_0", dequant_q5_0_len, dequant_q5_0_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q5_1], "dequant_q5_1", dequant_q5_1_len, dequant_q5_1_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q8_0], "dequant_q8_0", dequant_q8_0_len, dequant_q8_0_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q2_K], "dequant_q2_k", dequant_q2_k_len, dequant_q2_k_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q3_K], "dequant_q3_k", dequant_q3_k_len, dequant_q3_k_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q4_K], "dequant_q4_k", dequant_q4_k_len, dequant_q4_k_data, "main", 2, 5 * sizeof(uint32_t), {256 * 32, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q5_K], "dequant_q5_k", dequant_q5_k_len, dequant_q5_k_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_dequant[GGML_TYPE_Q6_K], "dequant_q6_k", dequant_q6_k_len, dequant_q6_k_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1);
-
-    // get_rows
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_F32 ], "get_rows_f32",  get_rows_f32_len,  get_rows_f32_data,  "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_F16 ], "get_rows_f16",  get_rows_f16_len,  get_rows_f16_data,  "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_Q4_0], "get_rows_q4_0", get_rows_q4_0_len, get_rows_q4_0_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_Q4_1], "get_rows_q4_1", get_rows_q4_1_len, get_rows_q4_1_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_Q5_0], "get_rows_q5_0", get_rows_q5_0_len, get_rows_q5_0_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_Q5_1], "get_rows_q5_1", get_rows_q5_1_len, get_rows_q5_1_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows[GGML_TYPE_Q8_0], "get_rows_q8_0", get_rows_q8_0_len, get_rows_q8_0_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_F32 ], "get_rows_f32_f32",  get_rows_f32_f32_len,  get_rows_f32_f32_data,  "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_F16 ], "get_rows_f16_f32",  get_rows_f16_f32_len,  get_rows_f16_f32_data,  "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_Q4_0], "get_rows_q4_0_f32", get_rows_q4_0_f32_len, get_rows_q4_0_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_Q4_1], "get_rows_q4_1_f32", get_rows_q4_1_f32_len, get_rows_q4_1_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_Q5_0], "get_rows_q5_0_f32", get_rows_q5_0_f32_len, get_rows_q5_0_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_Q5_1], "get_rows_q5_1_f32", get_rows_q5_1_f32_len, get_rows_q5_1_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_get_rows_f32[GGML_TYPE_Q8_0], "get_rows_q8_0_f32", get_rows_q8_0_f32_len, get_rows_q8_0_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_matmul_split_k_reduce, "split_k_reduce", split_k_reduce_len, split_k_reduce_data, "main", 2, 2 * sizeof(uint32_t), {256, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_mul_mat_vec_p021_f16_f32, "mul_mat_vec_p021_f16_f32", mul_mat_vec_p021_f16_f32_len, mul_mat_vec_p021_f16_f32_data, "main", 3, 6 * sizeof(uint32_t), {1, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, "mul_mat_vec_nc_f16_f32", mul_mat_vec_nc_f16_f32_len, mul_mat_vec_nc_f16_f32_data, "main", 3, 7 * sizeof(uint32_t), {1, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_norm_f32, "norm_f32", norm_f32_len, norm_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_rms_norm_f32, "rms_norm_f32", rms_norm_f32_len, rms_norm_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_cpy_f32_f32, "cpy_f32_f32", cpy_f32_f32_len, cpy_f32_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_cpy_f32_f16, "cpy_f32_f16", cpy_f32_f16_len, cpy_f32_f16_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_cpy_f16_f16, "cpy_f16_f16", cpy_f16_f16_len, cpy_f16_f16_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_add_f32, "add_f32", add_f32_len, add_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {512, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_mul_f32, "mul_f32", mul_f32_len, mul_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {512, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_div_f32, "div_f32", div_f32_len, div_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {512, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_scale_f32, "scale_f32", scale_f32_len, scale_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_sqr_f32, "sqr_f32", sqr_f32_len, sqr_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_clamp_f32, "clamp_f32", clamp_f32_len, clamp_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_gelu_f32, "gelu_f32", gelu_f32_len, gelu_f32_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_silu_f32, "silu_f32", silu_f32_len, silu_f32_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_relu_f32, "relu_f32", relu_f32_len, relu_f32_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_diag_mask_inf_f32, "diag_mask_inf_f32", diag_mask_inf_f32_len, diag_mask_inf_f32_data, "main", 2, sizeof(vk_op_diag_mask_push_constants), {512, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_soft_max_f32, "soft_max_f32", soft_max_f32_len, soft_max_f32_data, "main", 3, sizeof(vk_op_soft_max_push_constants), {1, 1, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_soft_max_f32_f16, "soft_max_f32_f16", soft_max_f32_f16_len, soft_max_f32_f16_data, "main", 3, sizeof(vk_op_soft_max_push_constants), {1, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_rope_norm_f32, "rope_norm_f32", rope_norm_f32_len, rope_norm_f32_data, "main", 4, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_rope_norm_f16, "rope_norm_f16", rope_norm_f16_len, rope_norm_f16_data, "main", 4, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_rope_neox_f32, "rope_neox_f32", rope_neox_f32_len, rope_neox_f32_data, "main", 4, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1);
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_rope_neox_f16, "rope_neox_f16", rope_neox_f16_len, rope_neox_f16_data, "main", 4, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_argsort_f32, "argsort_f32", argsort_f32_len, argsort_f32_data, "main", 2, sizeof(vk_op_argsort_push_constants), {1024, 1, 1}, {}, 1);
-
-    ggml_vk_create_pipeline(ctx, ctx->device->pipeline_sum_rows_f32, "sum_rows_f32", sum_rows_f32_len, sum_rows_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
-}
-
-static void ggml_vk_print_gpu_info(size_t idx) {
-    GGML_ASSERT(idx < vk_instance.device_indices.size());
-    size_t dev_num = vk_instance.device_indices[idx];
-    VK_LOG_DEBUG("ggml_vk_print_gpu_info(" << dev_num << ")");
-    GGML_ASSERT(vk_instance.initialized);
-
-    std::vector<vk::PhysicalDevice> devices = vk_instance.instance.enumeratePhysicalDevices();
-
-    if (dev_num >= devices.size()) {
-        std::cerr << "ggml_vulkan: Device with index " << dev_num << " does not exist." << std::endl;
-        throw std::runtime_error("Device not found");
-    }
-
-    vk::PhysicalDevice physical_device = devices[dev_num];
-    std::vector<vk::ExtensionProperties> ext_props = physical_device.enumerateDeviceExtensionProperties();
-
-    vk::PhysicalDeviceProperties2 props2;
-    vk::PhysicalDeviceMaintenance3Properties props3;
-    vk::PhysicalDeviceSubgroupProperties subgroup_props;
-    vk::PhysicalDeviceDriverProperties driver_props;
-    props2.pNext = &props3;
-    props3.pNext = &subgroup_props;
-    subgroup_props.pNext = &driver_props;
-    physical_device.getProperties2(&props2);
-
-    const size_t subgroup_size = subgroup_props.subgroupSize;
-    const bool uma = props2.properties.deviceType == vk::PhysicalDeviceType::eIntegratedGpu;
-
-    bool fp16_storage = false;
-    bool fp16_compute = false;
-
-    for (auto properties : ext_props) {
-        if (strcmp("VK_KHR_16bit_storage", properties.extensionName) == 0) {
-            fp16_storage = true;
-        } else if (strcmp("VK_KHR_shader_float16_int8", properties.extensionName) == 0) {
-            fp16_compute = true;
-        }
-    }
-
-    const char* GGML_VK_DISABLE_F16 = getenv("GGML_VK_DISABLE_F16");
-    bool force_disable_f16 = GGML_VK_DISABLE_F16 != nullptr;
-
-    bool fp16 = !force_disable_f16 && fp16_storage && fp16_compute;
-
-    vk::PhysicalDeviceFeatures device_features = physical_device.getFeatures();
-
-    VkPhysicalDeviceFeatures2 device_features2;
-    device_features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
-    device_features2.pNext = nullptr;
-    device_features2.features = (VkPhysicalDeviceFeatures)device_features;
-
-    VkPhysicalDeviceVulkan11Features vk11_features;
-    vk11_features.pNext = nullptr;
-    vk11_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
-    device_features2.pNext = &vk11_features;
-
-    VkPhysicalDeviceVulkan12Features vk12_features;
-    vk12_features.pNext = nullptr;
-    vk12_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
-    vk11_features.pNext = &vk12_features;
-
-    vkGetPhysicalDeviceFeatures2(physical_device, &device_features2);
-
-    fp16 = fp16 && vk12_features.shaderFloat16;
-
-    std::string device_name = props2.properties.deviceName.data();
-    std::cerr << GGML_VK_NAME << idx << ": " << device_name << " (" << driver_props.driverName << ") | uma: " << uma << " | fp16: " << fp16 << " | warp size: " << subgroup_size << std::endl;
-
-    if (props2.properties.deviceType == vk::PhysicalDeviceType::eCpu) {
-        std::cerr << "ggml_vulkan: Warning: Device type is CPU. This is probably not the device you want." << std::endl;
-    }
-}
-
-static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
-static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
-
-void ggml_vk_instance_init() {
-    if (vk_instance_initialized) {
-        return;
-    }
-    VK_LOG_DEBUG("ggml_vk_instance_init()");
-
-    vk::ApplicationInfo app_info{ "ggml-vulkan", 1, nullptr, 0, VK_API_VERSION };
-
-    const std::vector<vk::ExtensionProperties> instance_extensions = vk::enumerateInstanceExtensionProperties();
-    const bool validation_ext = ggml_vk_instance_validation_ext_available(instance_extensions);
-#ifdef __APPLE__
-    const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions);
-#endif
-
-    std::vector<const char*> layers;
-
-    if (validation_ext) {
-        layers.push_back("VK_LAYER_KHRONOS_validation");
-    }
-    std::vector<const char*> extensions;
-    if (validation_ext) {
-        extensions.push_back("VK_EXT_validation_features");
-    }
-#ifdef __APPLE__
-    if (portability_enumeration_ext) {
-        extensions.push_back("VK_KHR_portability_enumeration");
-    }
-#endif
-    vk::InstanceCreateInfo instance_create_info(vk::InstanceCreateFlags{}, &app_info, layers, extensions);
-#ifdef __APPLE__
-    if (portability_enumeration_ext) {
-        instance_create_info.flags |= vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR;
-    }
-#endif
-
-    std::vector<vk::ValidationFeatureEnableEXT> features_enable;
-    vk::ValidationFeaturesEXT validation_features;
-
-    if (validation_ext) {
-        features_enable = { vk::ValidationFeatureEnableEXT::eBestPractices };
-        validation_features = {
-            features_enable,
-            {},
-        };
-        validation_features.setPNext(nullptr);
-        instance_create_info.setPNext(&validation_features);
-
-        std::cerr << "ggml_vulkan: Validation layers enabled" << std::endl;
-    }
-    vk_instance.instance = vk::createInstance(instance_create_info);
-
-    memset(vk_instance.initialized, 0, sizeof(bool) * GGML_VK_MAX_DEVICES);
-
-    size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size();
-
-    // Emulate behavior of CUDA_VISIBLE_DEVICES for Vulkan
-    char * devices_env = getenv("GGML_VK_VISIBLE_DEVICES");
-    if (devices_env != nullptr) {
-        std::string devices(devices_env);
-        std::replace(devices.begin(), devices.end(), ',', ' ');
-
-        std::stringstream ss(devices);
-        size_t tmp;
-        while (ss >> tmp) {
-            if(tmp >= num_available_devices) {
-                std::cerr << "ggml_vulkan: Invalid device index " << tmp << " in GGML_VK_VISIBLE_DEVICES." << std::endl;
-                throw std::runtime_error("Invalid Vulkan device index");
-            }
-            vk_instance.device_indices.push_back(tmp);
-        }
-    } else {
-        std::vector<vk::PhysicalDevice> devices = vk_instance.instance.enumeratePhysicalDevices();
-
-        // Make sure at least one device exists
-        if (devices.empty()) {
-            std::cerr << "ggml_vulkan: Error: No devices found." << std::endl;
-            GGML_ASSERT(false);
-        }
-
-        // Default to using all dedicated GPUs
-        for (size_t i = 0; i < devices.size(); i++) {
-            vk::PhysicalDeviceProperties props = devices[i].getProperties();
-
-            if (props.deviceType == vk::PhysicalDeviceType::eDiscreteGpu) {
-                // Check if there are two physical devices corresponding to the same GPU
-                auto old_device = std::find_if(
-                    vk_instance.device_indices.begin(),
-                    vk_instance.device_indices.end(),
-                    [&devices, &props](const size_t k){ return devices[k].getProperties().deviceID == props.deviceID; }
-                );
-                if (old_device == vk_instance.device_indices.end()) {
-                    vk_instance.device_indices.push_back(i);
-                } else {
-                    // There can be two physical devices corresponding to the same GPU if there are 2 different drivers
-                    // This can cause error when splitting layers aross the devices, need to keep only 1
-                    VK_LOG_DEBUG("Device " << i << " and device " << *old_device << " have the same device id");
-
-                    vk::PhysicalDeviceProperties2 old_prop;
-                    vk::PhysicalDeviceDriverProperties old_driver;
-                    old_prop.pNext = &old_driver;
-                    devices[*old_device].getProperties2(&old_prop);
-
-                    vk::PhysicalDeviceProperties2 new_prop;
-                    vk::PhysicalDeviceDriverProperties new_driver;
-                    new_prop.pNext = &new_driver;
-                    devices[i].getProperties2(&new_prop);
-
-                    std::map<vk::DriverId, int> driver_priorities {};
-                    int old_priority = std::numeric_limits<int>::max();
-                    int new_priority = std::numeric_limits<int>::max();
-
-                    // Check https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDriverId.html for the list of driver id
-                    // Smaller number -> higher priority
-                    switch (old_prop.properties.vendorID) {
-                        case VK_VENDOR_ID_AMD:
-                            driver_priorities[vk::DriverId::eMesaRadv] = 1;
-                            driver_priorities[vk::DriverId::eAmdOpenSource] = 2;
-                            driver_priorities[vk::DriverId::eAmdProprietary] = 3;
-                            break;
-                        case VK_VENDOR_ID_INTEL:
-                            driver_priorities[vk::DriverId::eIntelOpenSourceMESA] = 1;
-                            driver_priorities[vk::DriverId::eIntelProprietaryWindows] = 2;
-                            break;
-                        case VK_VENDOR_ID_NVIDIA:
-                            driver_priorities[vk::DriverId::eNvidiaProprietary] = 1;
-#if defined(VK_API_VERSION_1_3) && VK_HEADER_VERSION >= 235
-                            driver_priorities[vk::DriverId::eMesaNvk] = 2;
-#endif
-                            break;
-                    }
-
-                    if (driver_priorities.count(old_driver.driverID)) {
-                        old_priority = driver_priorities[old_driver.driverID];
-                    }
-                    if (driver_priorities.count(new_driver.driverID)) {
-                        new_priority = driver_priorities[new_driver.driverID];
-                    }
-
-                    if (new_priority < old_priority) {
-                        auto r = std::remove(vk_instance.device_indices.begin(), vk_instance.device_indices.end(), *old_device);
-                        vk_instance.device_indices.erase(r, vk_instance.device_indices.end());
-                        vk_instance.device_indices.push_back(i);
-
-                        VK_LOG_DEBUG("Prioritize device " << i << " driver " << new_driver.driverName << " over device " << *old_device << " driver " << old_driver.driverName);
-                    }
-                    else {
-                        VK_LOG_DEBUG("Prioritize device " << *old_device << " driver " << old_driver.driverName << " over device " << i << " driver " << new_driver.driverName << std::endl);
-                    }
-                }
-            }
-        }
-
-        // If no dedicated GPUs found, fall back to GPU 0
-        if (vk_instance.device_indices.empty()) {
-            vk_instance.device_indices.push_back(0);
-        }
-    }
-
-    std::cerr << "ggml_vulkan: Found " << vk_instance.device_indices.size() << " Vulkan devices:" << std::endl;
-
-    for (size_t i = 0; i < vk_instance.device_indices.size(); i++) {
-        ggml_vk_print_gpu_info(i);
-    }
-
-    vk_instance_initialized = true;
-}
-
-static void ggml_vk_init(ggml_backend_vk_context * ctx, size_t idx) {
-    GGML_ASSERT(idx < vk_instance.device_indices.size());
-    size_t dev_num = vk_instance.device_indices[idx];
-    VK_LOG_DEBUG("ggml_vk_init(" << ctx->name << ", " << dev_num << ")");
-    ggml_vk_instance_init();
-
-    std::vector<vk::PhysicalDevice> devices = vk_instance.instance.enumeratePhysicalDevices();
-
-    if (dev_num >= devices.size()) {
-        std::cerr << "ggml_vulkan: Device with index " << dev_num << " does not exist." << std::endl;
-        throw std::runtime_error("Device not found");
-    }
-
-    ctx->device = ggml_vk_get_device(idx);
-    if (!ctx->device->initialized) {
-        ctx->device->physical_device = devices[dev_num];
-        const std::vector<vk::ExtensionProperties> ext_props = ctx->device->physical_device.enumerateDeviceExtensionProperties();
-
-        bool maintenance4_support = false;
-
-        // Check if maintenance4 is supported
-        for (const auto& properties : ext_props) {
-            if (strcmp("VK_KHR_maintenance4", properties.extensionName) == 0) {
-                maintenance4_support = true;
-            }
-        }
-
-        vk::PhysicalDeviceProperties2 props2;
-        vk::PhysicalDeviceMaintenance3Properties props3;
-        vk::PhysicalDeviceMaintenance4Properties props4;
-        vk::PhysicalDeviceSubgroupProperties subgroup_props;
-        props2.pNext = &props3;
-        props3.pNext = &subgroup_props;
-        if (maintenance4_support) {
-            subgroup_props.pNext = &props4;
-        }
-        ctx->device->physical_device.getProperties2(&props2);
-        ctx->device->properties = props2.properties;
-
-        const char* GGML_VK_FORCE_MAX_ALLOCATION_SIZE = getenv("GGML_VK_FORCE_MAX_ALLOCATION_SIZE");
-
-        if (GGML_VK_FORCE_MAX_ALLOCATION_SIZE != nullptr) {
-            ctx->device->max_memory_allocation_size = std::stoi(GGML_VK_FORCE_MAX_ALLOCATION_SIZE);
-        } else if (maintenance4_support) {
-            ctx->device->max_memory_allocation_size = std::min(props3.maxMemoryAllocationSize, props4.maxBufferSize);
-        } else {
-            ctx->device->max_memory_allocation_size = props3.maxMemoryAllocationSize;
-        }
-
-        ctx->device->vendor_id = ctx->device->properties.vendorID;
-        ctx->device->subgroup_size = subgroup_props.subgroupSize;
-        ctx->device->uma = ctx->device->properties.deviceType == vk::PhysicalDeviceType::eIntegratedGpu;
-
-        bool fp16_storage = false;
-        bool fp16_compute = false;
-
-        for (const auto& properties : ext_props) {
-            if (strcmp("VK_KHR_16bit_storage", properties.extensionName) == 0) {
-                fp16_storage = true;
-            } else if (strcmp("VK_KHR_shader_float16_int8", properties.extensionName) == 0) {
-                fp16_compute = true;
-            }
-        }
-
-        const char* GGML_VK_DISABLE_F16 = getenv("GGML_VK_DISABLE_F16");
-        const bool force_disable_f16 = GGML_VK_DISABLE_F16 != nullptr;
-
-        ctx->device->fp16 = !force_disable_f16 && fp16_storage && fp16_compute;
-
-        std::vector<vk::QueueFamilyProperties> queue_family_props = ctx->device->physical_device.getQueueFamilyProperties();
-
-        // Try to find a non-graphics compute queue and transfer-focused queues
-        const uint32_t compute_queue_family_index = ggml_vk_find_queue_family_index(queue_family_props, vk::QueueFlagBits::eCompute, vk::QueueFlagBits::eGraphics, -1, 1);
-        const uint32_t transfer_queue_family_index = ggml_vk_find_queue_family_index(queue_family_props, vk::QueueFlagBits::eTransfer, vk::QueueFlagBits::eCompute | vk::QueueFlagBits::eGraphics, compute_queue_family_index, 1);
-
-        const float priorities[] = { 1.0f, 1.0f };
-        ctx->device->single_queue = compute_queue_family_index == transfer_queue_family_index && queue_family_props[compute_queue_family_index].queueCount == 1;
-
-        std::vector<vk::DeviceQueueCreateInfo> device_queue_create_infos;
-        if (compute_queue_family_index != transfer_queue_family_index) {
-            device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), compute_queue_family_index, 1, priorities});
-            device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), transfer_queue_family_index, 1, priorities + 1});
-        } else if(!ctx->device->single_queue) {
-            device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), compute_queue_family_index, 2, priorities});
-        } else {
-            device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), compute_queue_family_index, 1, priorities});
-        }
-        vk::DeviceCreateInfo device_create_info;
-        std::vector<const char *> device_extensions;
-        vk::PhysicalDeviceFeatures device_features = ctx->device->physical_device.getFeatures();
-
-        VkPhysicalDeviceFeatures2 device_features2;
-        device_features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
-        device_features2.pNext = nullptr;
-        device_features2.features = (VkPhysicalDeviceFeatures)device_features;
-
-        VkPhysicalDeviceVulkan11Features vk11_features;
-        vk11_features.pNext = nullptr;
-        vk11_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
-        device_features2.pNext = &vk11_features;
-
-        VkPhysicalDeviceVulkan12Features vk12_features;
-        vk12_features.pNext = nullptr;
-        vk12_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
-        vk11_features.pNext = &vk12_features;
-
-        vkGetPhysicalDeviceFeatures2(ctx->device->physical_device, &device_features2);
-
-        ctx->device->fp16 = ctx->device->fp16 && vk12_features.shaderFloat16;
-
-        if (!vk11_features.storageBuffer16BitAccess) {
-            std::cerr << "ggml_vulkan: device " << GGML_VK_NAME << idx << " does not support 16-bit storage." << std::endl;
-            throw std::runtime_error("Unsupported device");
-        }
-
-        device_extensions.push_back("VK_KHR_16bit_storage");
-
-#ifdef GGML_VULKAN_VALIDATE
-        device_extensions.push_back("VK_KHR_shader_non_semantic_info");
-#endif
-
-        if (ctx->device->fp16) {
-            device_extensions.push_back("VK_KHR_shader_float16_int8");
-        }
-        ctx->device->name = ctx->device->properties.deviceName.data();
-
-        device_create_info = {
-            vk::DeviceCreateFlags(),
-            device_queue_create_infos,
-            {},
-            device_extensions
-        };
-        device_create_info.setPNext(&device_features2);
-        ctx->device->device = ctx->device->physical_device.createDevice(device_create_info);
-
-        ctx->device->descriptor_set_mode = VK_DEVICE_DESCRIPTOR_POOL_MODE_UNKNOWN;
-
-        // Queues
-        ggml_vk_create_queue(ctx, ctx->device->compute_queue, compute_queue_family_index, 0, { vk::PipelineStageFlagBits::eComputeShader | vk::PipelineStageFlagBits::eTransfer });
-
-        // Shaders
-        ggml_vk_load_shaders(ctx);
-
-        if (!ctx->device->single_queue) {
-            const uint32_t transfer_queue_index = compute_queue_family_index == transfer_queue_family_index ? 1 : 0;
-            ggml_vk_create_queue(ctx, ctx->device->transfer_queue, transfer_queue_family_index, transfer_queue_index, { vk::PipelineStageFlagBits::eTransfer });
-        } else {
-            // TODO: Use pointer or reference to avoid copy
-            ctx->device->transfer_queue = ctx->device->compute_queue;
-        }
-
-        ctx->device->idx = dev_num;
-        ctx->device->initialized = true;
-    } else if (ctx->device->idx != dev_num) {
-        std::cerr << "ggml_vulkan: Device " << ctx->device->name << " already initialized with index " << ctx->device->idx << ", but trying to reinitialize with index " << dev_num << std::endl;
-        throw std::runtime_error("Device already initialized");
-    }
-
-    ctx->fence = ctx->device->device.createFence({});
-
-    ctx->compute_ctx = nullptr;
-    ctx->transfer_ctx = nullptr;
-
-    ctx->initialized = true;
-
-    ctx->idx = idx;
-
-#ifdef GGML_VULKAN_CHECK_RESULTS
-    const char* skip_checks = getenv("GGML_VULKAN_SKIP_CHECKS");
-    vk_skip_checks = (skip_checks == NULL ? 0 : atoi(skip_checks));
-    const char* output_tensor = getenv("GGML_VULKAN_OUTPUT_TENSOR");
-    vk_output_tensor = (output_tensor == NULL ? 0 : atoi(output_tensor));
-#endif
-}
-
-static vk_pipeline ggml_vk_get_to_fp16(ggml_backend_vk_context * ctx, ggml_type type) {
-    VK_LOG_DEBUG("ggml_vk_get_to_fp16()");
-    switch (type) {
-        case GGML_TYPE_F32:
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-            break;
-        default:
-            return nullptr;
-    }
-
-    return ctx->device->pipeline_dequant[type];
-}
-
-static vk_matmul_pipeline ggml_vk_get_mul_mat_mat_pipeline(ggml_backend_vk_context * ctx, ggml_type src0_type, ggml_type src1_type) {
-    VK_LOG_DEBUG("ggml_vk_get_mul_mat_mat_pipeline()");
-    if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) {
-        return ctx->device->pipeline_matmul_f32;
-    }
-    if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) {
-        return ctx->device->pipeline_matmul_f32_f16;
-    }
-    if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) {
-        return ctx->device->pipeline_matmul_f16_f32;
-    }
-    if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) {
-        return ctx->device->pipeline_matmul_f16;
-    }
-
-    GGML_ASSERT(src1_type == GGML_TYPE_F32);
-
-    switch (src0_type) {
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-            break;
-        default:
-            return nullptr;
-    }
-
-    return ctx->device->pipeline_dequant_mul_mat_mat[src0_type];
-}
-
-static vk_pipeline ggml_vk_get_dequantize_mul_mat_vec(ggml_backend_vk_context * ctx, ggml_type a_type, ggml_type b_type) {
-    VK_LOG_DEBUG("ggml_vk_get_dequantize_mul_mat_vec()");
-    GGML_ASSERT(b_type == GGML_TYPE_F32 || b_type == GGML_TYPE_F16);
-
-    switch (a_type) {
-        case GGML_TYPE_F32:
-        case GGML_TYPE_F16:
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-            break;
-        default:
-            return nullptr;
-    }
-
-    return b_type == GGML_TYPE_F32 ? ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[a_type] : ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[a_type];
-}
-
-static vk_matmul_pipeline ggml_vk_get_mul_mat_mat_id_pipeline(ggml_backend_vk_context * ctx, ggml_type src0_type, ggml_type src1_type) {
-    VK_LOG_DEBUG("ggml_vk_get_mul_mat_mat_id_pipeline()");
-    if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) {
-        return ctx->device->pipeline_matmul_id_f32;
-    }
-    if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) {
-        return ctx->device->pipeline_matmul_id_f16_f32;
-    }
-    if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) {
-        return ctx->device->pipeline_matmul_id_f16;
-    }
-
-    GGML_ASSERT(src1_type == GGML_TYPE_F32);
-
-    switch (src0_type) {
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-            break;
-        default:
-            return nullptr;
-    }
-
-    return ctx->device->pipeline_dequant_mul_mat_mat_id[src0_type];
-}
-
-static vk_pipeline ggml_vk_get_dequantize_mul_mat_vec_id(ggml_backend_vk_context * ctx, ggml_type a_type, ggml_type b_type) {
-    VK_LOG_DEBUG("ggml_vk_get_dequantize_mul_mat_vec()");
-    GGML_ASSERT(b_type == GGML_TYPE_F32);
-
-    switch (a_type) {
-        case GGML_TYPE_F32:
-        case GGML_TYPE_F16:
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-            break;
-        default:
-            return nullptr;
-    }
-
-    return ctx->device->pipeline_dequant_mul_mat_vec_id_f32[a_type];
-}
-
-static vk_buffer ggml_vk_pool_malloc(ggml_backend_vk_context * ctx, size_t size) {
-    VK_LOG_DEBUG("ggml_vk_pool_malloc(" << size << ")");
-    VK_LOG_MEMORY("ggml_vk_pool_malloc");
-
-    int best_i = -1;
-    size_t best_size = std::numeric_limits<size_t>::max(); //smallest unused buffer that fits our needs
-    int worst_i = -1;
-    size_t worst_size = 0; //largest unused buffer seen so far
-    for (int i = 0; i < MAX_VK_BUFFERS; ++i) {
-        vk_buffer &b = ctx->buffer_pool[i];
-        if (b != nullptr && b->size >= size && b->size < best_size) {
-            best_i = i;
-            best_size = b->size;
-        }
-        if (b != nullptr && b->size > worst_size) {
-            worst_i = i;
-            worst_size = b->size;
-        }
-    }
-    if(best_i != -1) {
-        //found the smallest buffer that fits our needs
-        vk_buffer b = ctx->buffer_pool[best_i];
-        ctx->buffer_pool[best_i].reset();
-        return b;
-    }
-    if(worst_i != -1) {
-        //no buffer that fits our needs, resize largest one to save memory
-        vk_buffer& b = ctx->buffer_pool[worst_i];
-        ggml_vk_destroy_buffer(b);
-    }
-
-    return ggml_vk_create_buffer_device(ctx, size);
-}
-
-static void ggml_vk_pool_free(ggml_backend_vk_context * ctx, vk_buffer& buffer) {
-    VK_LOG_DEBUG("ggml_vk_pool_free(" << buffer->size << ")");
-    for (int i = 0; i < MAX_VK_BUFFERS; ++i) {
-        vk_buffer& b = ctx->buffer_pool[i];
-        if (b == nullptr) {
-            b = buffer;
-            return;
-        }
-    }
-    std::cerr << "ggml_vulkan: WARNING: vk buffer pool full, increase MAX_VK_BUFFERS" << std::endl;
-    ggml_vk_destroy_buffer(buffer);
-}
-
-// Returns an available temporary buffer that may only be used temporarily, it will be reused
-static vk_buffer ggml_vk_create_buffer_temp(ggml_backend_vk_context * ctx, size_t size) {
-    // Try to find existing temp buffer with enough capacity
-    for (auto& buffer : ctx->gc.temp_buffers) {
-        if (buffer->size >= size) {
-            return buffer;
-        }
-    }
-
-    VK_LOG_MEMORY("ggml_vk_create_buffer_temp(" << size << ")");
-
-    // Otherwise create new buffer
-    vk_buffer buf = ggml_vk_pool_malloc(ctx, size);
-    ctx->gc.temp_buffers.push_back(buf);
-
-    return buf;
-}
-
-static void * ggml_vk_host_malloc(ggml_backend_vk_context * ctx, size_t size) {
-    VK_LOG_MEMORY("ggml_vk_host_malloc(" << size << ")");
-    vk_buffer buf = ggml_vk_create_buffer(ctx, size,
-        vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached,
-        vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
-
-    if(!(buf->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible)) {
-        fprintf(stderr, "WARNING: failed to allocate %.2f MB of pinned memory\n",
-            size/1024.0/1024.0);
-        ctx->device->device.freeMemory(buf->device_memory);
-        ctx->device->device.destroyBuffer(buf->buffer);
-        return nullptr;
-    }
-
-    ctx->pinned_memory.push_back(std::make_tuple(buf->ptr, size, buf));
-
-    return buf->ptr;
-}
-
-static void ggml_vk_host_free(ggml_backend_vk_context * ctx, void* ptr) {
-    if (ptr == nullptr) {
-        return;
-    }
-    VK_LOG_MEMORY("ggml_vk_host_free(" << ptr << ")");
-    vk_buffer buf;
-    size_t index;
-    for (size_t i = 0; i < ctx->pinned_memory.size(); i++) {
-        const uint8_t* addr = (const uint8_t*) std::get<0>(ctx->pinned_memory[i]);
-        const uint8_t* endr = addr + std::get<1>(ctx->pinned_memory[i]);
-        if (ptr >= addr && ptr < endr) {
-            buf = std::get<2>(ctx->pinned_memory[i]);
-            index = i;
-            break;
-        }
-    }
-    if (buf == nullptr) {
-        fprintf(stderr, "WARNING: failed to free pinned memory: memory not in map\n");
-        return;
-    }
-
-    ggml_vk_destroy_buffer(buf);
-
-    ctx->pinned_memory.erase(ctx->pinned_memory.begin() + index);
-}
-
-static void ggml_vk_host_get(ggml_backend_vk_context * ctx, const void * ptr, vk_buffer& buf, size_t& buf_offset) {
-    buf = nullptr;
-    buf_offset = 0;
-    for (size_t i = 0; i < ctx->pinned_memory.size(); i++) {
-        const uint8_t* addr = (const uint8_t*) std::get<0>(ctx->pinned_memory[i]);
-        const uint8_t* endr = addr + std::get<1>(ctx->pinned_memory[i]);
-        if (ptr >= addr && ptr < endr) {
-            buf = std::get<2>(ctx->pinned_memory[i]);
-            buf_offset = ((const uint8_t *)ptr) - addr;
-            break;
-        }
-    }
-}
-
-static vk_submission ggml_vk_begin_submission(ggml_backend_vk_context * ctx, vk_queue& q, bool one_time = true) {
-    vk_submission s;
-    s.buffer = ggml_vk_create_cmd_buffer(ctx, q);
-    if (one_time) {
-        s.buffer.begin({ vk::CommandBufferUsageFlagBits::eOneTimeSubmit });
-    } else {
-        s.buffer.begin({ vk::CommandBufferUsageFlags{} });
-    }
-
-    return s;
-}
-
-static void ggml_vk_dispatch_pipeline(ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline& pipeline, std::vector<vk_subbuffer>&& buffers, size_t push_constant_size, const void* push_constants, std::array<uint32_t, 3> elements) {
-    const uint32_t wg0 = CEIL_DIV(elements[0], pipeline->wg_denoms[0]);
-    const uint32_t wg1 = CEIL_DIV(elements[1], pipeline->wg_denoms[1]);
-    const uint32_t wg2 = CEIL_DIV(elements[2], pipeline->wg_denoms[2]);
-    VK_LOG_DEBUG("ggml_vk_dispatch_pipeline(" << pipeline->name << ", {";
-    for (auto& buffer : buffers) {
-        std::cerr << "(" << buffer.buffer << ", " << buffer.offset << ", " << buffer.size << "), ";
-    }
-    std::cerr << "}, (" << wg0 << "," << wg1 << "," << wg2 << "))");
-    std::vector<vk::DescriptorBufferInfo> descriptor_buffer_infos;
-    std::vector<vk::WriteDescriptorSet> write_descriptor_sets;
-    GGML_ASSERT(pipeline->descriptor_set_idx < pipeline->descriptor_sets.size());
-    GGML_ASSERT(buffers.size() == pipeline->parameter_count);
-    vk::DescriptorSet& descriptor_set = pipeline->descriptor_sets[pipeline->descriptor_set_idx++];
-    for (uint32_t i = 0; i < pipeline->parameter_count; i++) {
-        descriptor_buffer_infos.push_back({buffers[i].buffer->buffer, buffers[i].offset, buffers[i].size});
-    }
-    for (uint32_t i = 0; i < pipeline->parameter_count; i++) {
-        write_descriptor_sets.push_back({descriptor_set, i, 0, 1, vk::DescriptorType::eStorageBuffer, nullptr, &descriptor_buffer_infos[i]});
-    }
-
-    ctx->device->device.updateDescriptorSets(write_descriptor_sets, {});
-
-    subctx->s->buffer.pushConstants(pipeline->layout, vk::ShaderStageFlagBits::eCompute, 0, push_constant_size, push_constants);
-    subctx->s->buffer.bindPipeline(vk::PipelineBindPoint::eCompute, pipeline->pipeline);
-    subctx->s->buffer.bindDescriptorSets(vk::PipelineBindPoint::eCompute,
-                                pipeline->layout,
-                                0,
-                                { descriptor_set },
-                                {});
-    subctx->s->buffer.dispatch(wg0, wg1, wg2);
-}
-
-static void ggml_vk_end_submission(vk_submission& s, std::vector<vk_semaphore> wait_semaphores, std::vector<vk_semaphore> signal_semaphores) {
-    s.buffer.end();
-
-    s.wait_semaphores = std::move(wait_semaphores);
-    s.signal_semaphores = std::move(signal_semaphores);
-}
-
-static void ggml_vk_ctx_end(vk_context * ctx) {
-    VK_LOG_DEBUG("ggml_vk_ctx_end(" << ctx << ", " << ctx->seqs.size() << ")");
-    if (ctx->s == nullptr) {
-        return;
-    }
-
-    ctx->s->buffer.end();
-    ctx->s = nullptr;
-}
-
-static void ggml_vk_ctx_begin(ggml_backend_vk_context * ctx, vk_context * subctx) {
-    VK_LOG_DEBUG("ggml_vk_ctx_begin(" << ctx << ")");
-    if (subctx->s != nullptr) {
-        ggml_vk_ctx_end(subctx);
-    }
-
-    subctx->seqs.push_back({ ggml_vk_begin_submission(ctx, *subctx->q) });
-    subctx->s = subctx->seqs[subctx->seqs.size() - 1].data();
-}
-
-static size_t ggml_vk_align_size(size_t width, size_t align) {
-    VK_LOG_DEBUG("ggml_vk_align_size(" << width << ", " << align << ")");
-    return CEIL_DIV(width, align) * align;
-}
-
-static void deferred_memcpy(void * dst, const void * src, size_t size, std::vector<vk_staging_memcpy>* memcpys = nullptr) {
-    if (memcpys == nullptr) {
-        memcpy(dst, src, size);
-    } else {
-        memcpys->emplace_back(dst, src, size);
-    }
-}
-
-static void ggml_vk_ensure_sync_staging_buffer(ggml_backend_vk_context * ctx, size_t size) {
-    if (ctx->sync_staging == nullptr || ctx->sync_staging->size < size) {
-        VK_LOG_MEMORY("ggml_vk_ensure_sync_staging_buffer(" << size << ")");
-        ggml_vk_destroy_buffer(ctx->sync_staging);
-        ctx->sync_staging = ggml_vk_create_buffer_check(ctx, size,
-            vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached,
-            vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
-    }
-}
-
-static void ggml_vk_buffer_write_nc_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& dst, size_t offset, const ggml_tensor * tensor, bool sync_staging = false) {
-    VK_LOG_DEBUG("ggml_vk_buffer_write_nc_async(" << tensor << ")");
-    GGML_ASSERT(!ggml_is_contiguous(tensor));
-    // Buffer is already mapped
-    if(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) {
-        std::cerr << "ggml_vulkan: buffer_write_nc_async dst buffer is host_visible. Use synchronous write." << std::endl;
-        GGML_ASSERT(false);
-    }
-    // Check if src is pinned memory
-    vk_buffer buf;
-    size_t buf_offset;
-    ggml_vk_host_get(ctx, tensor->data, buf, buf_offset);
-
-    const uint64_t ne0 = tensor->ne[0];
-    const uint64_t ne1 = tensor->ne[1];
-    const uint64_t ne2 = tensor->ne[2];
-    const uint64_t ne3 = tensor->ne[3];
-    const uint64_t nb0 = tensor->nb[0];
-    const uint64_t nb1 = tensor->nb[1];
-    const uint64_t nb2 = tensor->nb[2];
-    const uint64_t nb3 = tensor->nb[3];
-    const ggml_type type = tensor->type;
-    const uint64_t ts = ggml_type_size(type);
-    const uint64_t bs = ggml_blck_size(type);
-
-    const uint64_t dstnb0 = ts;
-    const uint64_t dstnb1 = dstnb0*(ne0/bs);
-    const uint64_t dstnb2 = dstnb1*ne1;
-    const uint64_t dstnb3 = dstnb2*ne2;
-
-    const uint64_t ne = ggml_nelements(tensor);
-
-    if (buf != nullptr) {
-        // Memory is pinned, use as staging buffer
-        std::vector<vk::BufferCopy> slices;
-
-        for (uint64_t i3 = 0; i3 < ne3; i3++) {
-            for (uint64_t i2 = 0; i2 < ne2; i2++) {
-                // Find longest contiguous slice
-                if (ne1*nb1 == dstnb2) {
-                    slices.push_back({ buf_offset + i3*nb3 + i2*nb2, offset + i3*dstnb3 + i2*dstnb2, dstnb2 });
-                } else {
-                    for (uint64_t i1 = 0; i1 < ne1; i1++) {
-                        if (ne0*nb0/bs == dstnb1) {
-                            slices.push_back({ buf_offset + i3*nb3 + i2*nb2 + i1*nb1, offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1, dstnb1 });
-                        } else {
-                            const uint64_t s_off = buf_offset + i3*nb3 + i2*nb2 + i1*nb1;
-                            const uint64_t d_off = offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1;
-                            for (uint64_t i0 = 0; i0 < ne0; i0++) {
-                                slices.push_back({ s_off + i1*nb0, d_off + i0*dstnb0, dstnb0 });
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        ggml_vk_sync_buffers(subctx);
-        subctx->s->buffer.copyBuffer(buf->buffer, dst->buffer, slices);
-        return;
-    }
-
-    // Staging buffer required
-    vk_buffer staging = ctx->staging;
-    size_t staging_offset = ctx->staging_offset;
-    const size_t copy_size = ts*ne/bs;
-    if (ctx->staging->size < ctx->staging_offset + copy_size) {
-        if (sync_staging) {
-            // Create temporary larger buffer
-            ggml_vk_ensure_sync_staging_buffer(ctx, copy_size);
-
-            staging = ctx->sync_staging;
-            staging_offset = 0;
-        } else {
-            GGML_ASSERT(false);
-        }
-    }
-
-    VkBufferCopy buf_copy{ staging_offset, offset, copy_size };
-
-    ggml_vk_sync_buffers(subctx);
-    vkCmdCopyBuffer(subctx->s->buffer, staging->buffer, dst->buffer, 1, &buf_copy);
-
-    for (uint64_t i3 = 0; i3 < ne3; i3++) {
-        for (uint64_t i2 = 0; i2 < ne2; i2++) {
-            // Find longest contiguous slice
-            if (ne1*nb1 == dstnb2) {
-                deferred_memcpy((uint8_t *)staging->ptr + staging_offset + i3*dstnb3 + i2*dstnb2, (const uint8_t *) tensor->data + buf_offset + i3*nb3 + i2*nb2, dstnb2, &subctx->in_memcpys);
-            } else {
-                for (uint64_t i1 = 0; i1 < ne1; i1++) {
-                    if (ne0*nb0/bs == dstnb1) {
-                        deferred_memcpy((uint8_t *)staging->ptr + staging_offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1, (const uint8_t *) tensor->data + buf_offset + i3*nb3 + i2*nb2 + i1*nb1, dstnb1, &subctx->in_memcpys);
-                    } else {
-                        const uint64_t s_off = buf_offset + i3*nb3 + i2*nb2 + i1*nb1;
-                        const uint64_t d_off = staging_offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1;
-                        for (uint64_t i0 = 0; i0 < ne0; i0++) {
-                            deferred_memcpy((uint8_t *)staging->ptr + d_off + i0*dstnb0, (const uint8_t *) tensor->data + s_off + i0*nb0, dstnb0, &subctx->in_memcpys);
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-static void ggml_vk_buffer_write_2d_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& dst, size_t offset, const void * src, size_t spitch, size_t width, size_t height, bool sync_staging = false) {
-    VK_LOG_DEBUG("ggml_vk_buffer_write_2d_async(" << width << ", " << height << ")");
-    // Make sure ctx owns the buffer
-    GGML_ASSERT(dst->ctx == ctx);
-
-    // Buffer is already mapped
-    if(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) {
-        std::cerr << "ggml_vulkan: buffer_write_async dst buffer is host_visible. Use synchronous write." << std::endl;
-        GGML_ASSERT(false);
-    }
-    // Check if src is pinned memory
-    vk_buffer buf = nullptr;
-    size_t buf_offset;
-    ggml_vk_host_get(ctx, src, buf, buf_offset);
-
-    if (buf != nullptr) {
-        // Memory is pinned, use as staging buffer
-        std::vector<vk::BufferCopy> slices(1);
-        if (width == spitch) {
-            // Only do single write if stride is equal
-            slices[0].srcOffset = buf_offset;
-            slices[0].dstOffset = offset;
-            slices[0].size = width * height;
-        } else {
-            slices.resize(height);
-            for (size_t i = 0; i < height; i++) {
-                slices[i].srcOffset = buf_offset + i * spitch;
-                slices[i].dstOffset = offset + i * width;
-                slices[i].size = width;
-            }
-        }
-
-        ggml_vk_sync_buffers(subctx);
-        subctx->s->buffer.copyBuffer(buf->buffer, dst->buffer, slices);
-        return;
-    }
-    VK_LOG_DEBUG("STAGING");
-
-    // Staging buffer required
-    vk_buffer staging = ctx->staging;
-    size_t staging_offset = ctx->staging_offset;
-    const size_t copy_size = width*height;
-    if (ctx->staging == nullptr || ctx->staging->size < ctx->staging_offset + copy_size) {
-        if (sync_staging) {
-            ggml_vk_ensure_sync_staging_buffer(ctx, copy_size);
-
-            staging = ctx->sync_staging;
-            staging_offset = 0;
-        } else {
-            GGML_ASSERT(false);
-        }
-    }
-
-    VkBufferCopy buf_copy = {
-        staging_offset,
-        offset,
-        copy_size};
-
-    ggml_vk_sync_buffers(subctx);
-    vkCmdCopyBuffer(subctx->s->buffer, staging->buffer, dst->buffer, 1, &buf_copy);
-
-    if (width == spitch) {
-        deferred_memcpy((uint8_t *)staging->ptr + staging_offset, src, width * height, &subctx->in_memcpys);
-    } else {
-        for (size_t i = 0; i < height; i++) {
-            deferred_memcpy((uint8_t *)staging->ptr + staging_offset + i * width, (const uint8_t *) src + i * spitch, width, &subctx->in_memcpys);
-        }
-    }
-}
-
-static void ggml_vk_buffer_write_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& dst, size_t offset, const void * src, size_t size, bool sync_staging = false) {
-    VK_LOG_DEBUG("ggml_vk_buffer_write_async(" << size << ")");
-    return ggml_vk_buffer_write_2d_async(ctx, subctx, dst, offset, src, size, size, 1, sync_staging);
-}
-
-static void ggml_vk_buffer_write_2d(ggml_backend_vk_context * ctx, vk_buffer& dst, size_t offset, const void * src, size_t spitch, size_t width, size_t height) {
-    VK_LOG_DEBUG("ggml_vk_buffer_write_2d(" << width << ", " << height << ")");
-    // Buffer is already mapped
-    if(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) {
-        GGML_ASSERT(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostCoherent);
-
-        for (size_t i = 0; i < height; i++) {
-            memcpy((uint8_t *)dst->ptr + offset + i * width, (const uint8_t *) src + i * spitch, width);
-        }
-    } else {
-        vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue);
-        ggml_vk_ctx_begin(ctx, subctx);
-        ggml_vk_buffer_write_2d_async(ctx, subctx, dst, offset, src, spitch, width, height, true);
-        ggml_vk_ctx_end(subctx);
-
-        for (auto& cpy : subctx->in_memcpys) {
-            memcpy(cpy.dst, cpy.src, cpy.n);
-        }
-
-        ggml_vk_submit(subctx, ctx->fence);
-        VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "vk_buffer_write_2d waitForFences");
-        ctx->device->device.resetFences({ ctx->fence });
-    }
-}
-
-static void ggml_vk_buffer_write(ggml_backend_vk_context * ctx, vk_buffer& dst, size_t offset, const void * src, size_t size) {
-    VK_LOG_DEBUG("ggml_vk_buffer_write(" << size << ")");
-    ggml_vk_buffer_write_2d(ctx, dst, offset, src, 0, size, 1);
-}
-
-static void ggml_vk_buffer_read_2d_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& src, size_t offset, void * dst, size_t spitch, size_t dpitch, size_t width, size_t height, bool sync_staging = false) {
-    VK_LOG_DEBUG("ggml_vk_buffer_read_2d_async(offset=" << offset << ", width=" << width << ", height=" << height << ")");
-    GGML_ASSERT(width > 0);
-    GGML_ASSERT(height > 0);
-    GGML_ASSERT(src != nullptr);
-    // Make sure ctx owns the buffer
-    GGML_ASSERT(src->ctx == ctx);
-
-    // Check if dst is pinned memory
-    vk_buffer buf = nullptr;
-    size_t buf_offset;
-    ggml_vk_host_get(ctx, dst, buf, buf_offset);
-
-    std::vector<vk::BufferCopy> slices(1);
-    if (width == spitch && width == dpitch) {
-        // Only do single write if stride is equal
-        slices[0].srcOffset = offset;
-        slices[0].dstOffset = buf_offset;
-        slices[0].size = width * height;
-    } else {
-        slices.resize(height);
-        for (size_t i = 0; i < height; i++) {
-            slices[i].srcOffset = offset + i * spitch;
-            slices[i].dstOffset = buf_offset + i * dpitch;
-            slices[i].size = width;
-        }
-    }
-
-    if (buf != nullptr) {
-        // Memory is pinned, use as staging buffer
-        ggml_vk_sync_buffers(subctx);
-        subctx->s->buffer.copyBuffer(src->buffer, buf->buffer, slices);
-
-        return;
-    }
-    VK_LOG_DEBUG("STAGING");
-
-    // Fall back to staging buffer
-    vk_buffer staging = ctx->staging;
-    const size_t copy_size = dpitch * height;
-    if (ctx->staging == nullptr || ctx->staging->size < ctx->staging_offset + copy_size) {
-        if (sync_staging) {
-            // Create temporary larger buffer
-            ggml_vk_ensure_sync_staging_buffer(ctx, copy_size);
-
-            staging = ctx->sync_staging;
-        } else {
-            GGML_ASSERT(false);
-        }
-    }
-
-    ggml_vk_sync_buffers(subctx);
-    subctx->s->buffer.copyBuffer(src->buffer, staging->buffer, slices);
-
-    deferred_memcpy(dst, staging->ptr, copy_size, &subctx->out_memcpys);
-}
-
-static void ggml_vk_buffer_read_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& src, size_t offset, void * dst, size_t size, bool sync_staging = false) {
-    return ggml_vk_buffer_read_2d_async(ctx, subctx, src, offset, dst, size, size, size, 1, sync_staging);
-}
-
-static void ggml_vk_buffer_read(ggml_backend_vk_context * ctx, vk_buffer& src, size_t offset, void * dst, size_t size) {
-    VK_LOG_DEBUG("ggml_vk_buffer_read(" << offset << ", " << size << ")");
-    if(src->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) {
-        GGML_ASSERT(src->memory_property_flags & vk::MemoryPropertyFlagBits::eHostCoherent);
-
-        memcpy(dst, (uint8_t *) src->ptr + offset, size);
-    } else {
-        vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue);
-        ggml_vk_ctx_begin(ctx, subctx);
-        ggml_vk_buffer_read_async(ctx, subctx, src, offset, dst, size, true);
-        ggml_vk_ctx_end(subctx);
-
-        ggml_vk_submit(subctx, ctx->fence);
-        VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "vk_buffer_read waitForFences");
-        ctx->device->device.resetFences({ ctx->fence });
-
-        for (auto& cpy : subctx->out_memcpys) {
-            memcpy(cpy.dst, cpy.src, cpy.n);
-        }
-    }
-}
-
-static void ggml_vk_buffer_copy_async(vk_context * ctx, vk_buffer& dst, size_t dst_offset, vk_buffer& src, size_t src_offset, size_t size) {
-    VK_LOG_DEBUG("ggml_vk_buffer_copy_async(" << size << ")");
-    // Make sure both buffers are on same ctx
-    GGML_ASSERT(src->ctx == dst->ctx);
-
-    VkBufferCopy bc{ src_offset, dst_offset, size };
-
-    vkCmdCopyBuffer(ctx->s->buffer, src->buffer, dst->buffer, 1, &bc);
-}
-
-static void ggml_vk_buffer_copy(vk_buffer& dst, size_t dst_offset, vk_buffer& src, size_t src_offset, size_t size) {
-    if (src->ctx == dst->ctx) {
-    VK_LOG_DEBUG("ggml_vk_buffer_copy(SINGLE_DEVICE, " << size << ")");
-        // Copy within the device
-        ggml_backend_vk_context * ctx = src->ctx;
-
-        vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue);
-        ggml_vk_ctx_begin(ctx, subctx);
-        ggml_vk_buffer_copy_async(subctx, dst, dst_offset, src, src_offset, size);
-        ggml_vk_ctx_end(subctx);
-        ggml_vk_submit(subctx, ctx->fence);
-        VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "vk_buffer_copy waitForFences");
-        ctx->device->device.resetFences({ ctx->fence });
-    } else {
-    VK_LOG_DEBUG("ggml_vk_buffer_copy(MULTI_DEVICE, " << size << ")");
-        // Copy device to device
-        ggml_backend_vk_context * src_ctx = src->ctx;
-        ggml_backend_vk_context * dst_ctx = dst->ctx;
-
-        ggml_vk_ensure_sync_staging_buffer(src_ctx, size);
-        ggml_vk_ensure_sync_staging_buffer(dst_ctx, size);
-
-        // Copy to src staging buffer
-        ggml_vk_buffer_copy(src_ctx->sync_staging, 0, src, src_offset, size);
-        // memcpy to dst staging buffer
-        memcpy(dst_ctx->sync_staging->ptr, src_ctx->sync_staging->ptr, size);
-        // Copy to dst buffer
-        ggml_vk_buffer_copy(dst, dst_offset, dst_ctx->sync_staging, 0, size);
-    }
-}
-
-static void ggml_vk_buffer_memset(ggml_backend_vk_context * ctx, vk_buffer& dst, size_t offset, uint32_t c, size_t size) {
-    VK_LOG_DEBUG("ggml_vk_buffer_memset(" << offset << ", " << c << ", " << size << ")");
-    // Make sure ctx owns the buffer
-    GGML_ASSERT(dst->ctx == ctx);
-
-    vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue);
-    ggml_vk_ctx_begin(ctx, subctx);
-    subctx->s->buffer.fillBuffer(dst->buffer, offset, size, c);
-    ggml_vk_ctx_end(subctx);
-
-    ggml_vk_submit(subctx, ctx->fence);
-    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "vk_memset waitForFences");
-    ctx->device->device.resetFences({ ctx->fence });
-}
-
-static void ggml_vk_h2d_tensor_2d(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& dst, size_t offset, const ggml_tensor * src, uint64_t i3, uint64_t i2, uint64_t i1) {
-    VK_LOG_DEBUG("ggml_vk_h2d_tensor_2d(dst=" << dst << ", offset=" << offset << ", src=" << src << ", i3=" << i3 << ", i2=" << i2 << ", i1=" << i1 << ")");
-    const uint64_t ne0 = src->ne[0];
-    const uint64_t ne1 = src->ne[1];
-    const uint64_t nb0 = src->nb[0];
-    const uint64_t nb1 = src->nb[1];
-    const uint64_t nb2 = src->nb[2];
-    const uint64_t nb3 = src->nb[3];
-    const enum ggml_type type = src->type;
-    const size_t ts = ggml_type_size(type);
-    const size_t bs = ggml_blck_size(type);
-    const size_t row_length = ts*ne0/bs;
-
-    const void * x = (const void *) ((const char *) src->data + i2*nb2 + i3*nb3);
-    if (nb0 == ts && nb1 == row_length) {
-        return ggml_vk_buffer_write_async(ctx, subctx, dst, offset, x, i1*nb1);
-    }
-    if (nb0 == ts && (i1 == ne1 || !ggml_is_permuted(src))) {
-        return ggml_vk_buffer_write_2d_async(ctx, subctx, dst, offset, x, nb1, row_length, i1);
-    }
-
-    GGML_ASSERT(i3 == 0);
-    GGML_ASSERT(i2 == 0);
-    GGML_ASSERT(i1 == (uint64_t) ggml_nrows(src));
-
-    return ggml_vk_buffer_write_nc_async(ctx, subctx, dst, offset, src);
-}
-
-static void ggml_vk_d2h_tensor_2d(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& src, size_t offset, const ggml_tensor * dst) {
-    VK_LOG_DEBUG("ggml_vk_d2h_tensor_2d()");
-    const uint64_t ne0 = dst->ne[0];
-    const uint64_t ne1 = dst->ne[1];
-    const uint64_t ne2 = dst->ne[2];
-    const uint64_t ne3 = dst->ne[3];
-    const uint64_t nb0 = dst->nb[0];
-    const uint64_t nb1 = dst->nb[1];
-    // const uint64_t nb2 = dst->nb[2];
-    // const uint64_t nb3 = dst->nb[3];
-    const enum ggml_type type = dst->type;
-    const size_t ts = ggml_type_size(type);
-    const size_t bs = ggml_blck_size(type);
-    const size_t row_length = ts*ne0/bs;
-
-    if (ggml_is_contiguous(dst)) {
-        return ggml_vk_buffer_read_async(ctx, subctx, src, offset, dst->data, ne1*nb1*ne2*ne3);
-    }
-    if (nb0 == ts) {
-        return ggml_vk_buffer_read_2d_async(ctx, subctx, src, offset, dst->data, nb1, nb1, row_length, ne1*ne2*ne3);
-    }
-    GGML_ASSERT(false);
-}
-
-static uint32_t ggml_vk_guess_split_k(int m, int n, int k) {
-    VK_LOG_DEBUG("ggml_vk_guess_split_k(" << m << ", " << n << ", " << k << ")");
-    // if (k > 128 && (m < 128 || n < 128) && m > 2 && n > 2) {
-    //     return 4;
-    // }
-
-    return 1;
-
-    GGML_UNUSED(m); GGML_UNUSED(n); GGML_UNUSED(k);
-}
-
-static vk_pipeline ggml_vk_guess_matmul_pipeline_amd(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, int m, int n, bool aligned) {
-    if (m <= 32 || n <= 32) {
-        return aligned ? mmp->a_s : mmp->s;
-    }
-    return aligned ? mmp->a_m : mmp->m;
-
-    GGML_UNUSED(ctx);
-}
-
-static vk_pipeline ggml_vk_guess_matmul_pipeline_apple(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, bool aligned) {
-    return aligned ? mmp->a_m : mmp->m;
-
-    GGML_UNUSED(ctx);
-}
-
-static vk_pipeline ggml_vk_guess_matmul_pipeline_intel(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, bool aligned) {
-    return aligned ? mmp->a_s : mmp->s;
-
-    GGML_UNUSED(ctx);
-}
-
-static vk_pipeline ggml_vk_guess_matmul_pipeline(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, int m, int n, bool aligned) {
-    VK_LOG_DEBUG("ggml_vk_guess_matmul_pipeline(" << m << ", " << n << ", " << aligned << ")");
-    switch (ctx->device->vendor_id) {
-    case VK_VENDOR_ID_AMD:
-        return ggml_vk_guess_matmul_pipeline_amd(ctx, mmp, m, n, aligned);
-    case VK_VENDOR_ID_APPLE:
-        return ggml_vk_guess_matmul_pipeline_apple(ctx, mmp, aligned);
-    case VK_VENDOR_ID_INTEL:
-        return ggml_vk_guess_matmul_pipeline_intel(ctx, mmp, aligned);
-    default:
-        break;
-    }
-
-    if (m <= 32 || n <= 32) {
-        return aligned ? mmp->a_s : mmp->s;
-    }
-    if (m <= 64 || n <= 64) {
-        return aligned ? mmp->a_m : mmp->m;
-    }
-    return aligned ? mmp->a_l : mmp->l;
-}
-
-static uint32_t ggml_vk_guess_matmul_pipeline_align(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, int m, int n) {
-    VK_LOG_DEBUG("ggml_vk_guess_matmul_pipeline_align(" << m << ", " << n << ")");
-    return ggml_vk_guess_matmul_pipeline(ctx, mmp, m, n, true)->align;
-}
-
-static void ggml_vk_matmul(
-        ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline& pipeline,
-        vk_subbuffer&& a, vk_subbuffer&& b, vk_subbuffer&& d, vk_subbuffer&& split_k_buffer,
-        uint32_t m, uint32_t n, uint32_t k, uint32_t stride_a, uint32_t stride_b, uint32_t stride_d,
-        uint32_t batch_stride_a, uint32_t batch_stride_b, uint32_t batch_stride_d,
-        uint32_t split_k, uint32_t batch, uint32_t ne02, uint32_t ne12, uint32_t broadcast2, uint32_t broadcast3) {
-        VK_LOG_DEBUG("ggml_vk_matmul(a: (" << a.buffer->buffer << ", " << a.offset << ", " << a.size << "), b: (" << b.buffer->buffer << ", " << b.offset << ", " << b.size << "), d: (" << d.buffer->buffer << ", " << d.offset << ", " << d.size << "), split_k: (" << (split_k_buffer.buffer != nullptr ? split_k_buffer.buffer->buffer : VK_NULL_HANDLE) << ", " << split_k_buffer.offset << ", " << split_k_buffer.size << "), m: " << m << ", n: " << n << ", k: " << k << ", stride_a: " << stride_a << ", stride_b: " << stride_b << ", stride_d: " << stride_d << ", batch_stride_a: " << batch_stride_a << ", batch_stride_b: " << batch_stride_b << ", batch_stride_d: " << batch_stride_d << ", split_k: " << split_k << ", batch: " << batch << ", ne02: " << ne02 << ", ne12: " << ne12 << ", broadcast2: " << broadcast2 << ", broadcast3: " << broadcast3 << ")");
-    ggml_vk_sync_buffers(subctx);
-    if (split_k == 1) {
-        const vk_mat_mat_push_constants pc = { m, n, k, stride_a, stride_b, stride_d, batch_stride_a, batch_stride_b, batch_stride_d, k, ne02, ne12, broadcast2, broadcast3 };
-        ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, d }, sizeof(vk_mat_mat_push_constants), &pc, { m, n, batch });
-        return;
-    }
-
-    GGML_ASSERT(batch_stride_d == m * n);
-
-    const vk_mat_mat_push_constants pc1 = { m, n, k, stride_a, stride_b, stride_d, batch_stride_a, batch_stride_b, batch_stride_d, CEIL_DIV(k, split_k), ne02, ne12, broadcast2, broadcast3 };
-    // Make sure enough workgroups get assigned for split k to work
-    ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, split_k_buffer }, sizeof(vk_mat_mat_push_constants), &pc1, { (CEIL_DIV(m, pipeline->wg_denoms[0]) * pipeline->wg_denoms[0]) * split_k, n, batch });
-    ggml_vk_sync_buffers(subctx);
-    const std::array<uint32_t, 2> pc2 = { (uint32_t)(m * n * batch), split_k };
-    ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_matmul_split_k_reduce, { split_k_buffer, d }, pc2.size() * sizeof(uint32_t), pc2.data(), { m * n * batch, 1, 1 });
-}
-
-static void ggml_vk_matmul_id(
-        ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline& pipeline,
-        vk_subbuffer&& a, vk_subbuffer&& b, vk_subbuffer&& d, vk_subbuffer&& ids,
-        uint32_t m, uint32_t n, uint32_t k, uint32_t stride_a, uint32_t stride_b, uint32_t stride_d,
-        uint32_t batch_stride_a, uint32_t batch_stride_b, uint32_t batch_stride_d,
-        uint32_t n_as, uint32_t nei0, uint32_t nei1, uint32_t nbi1, uint32_t ne11) {
-    VK_LOG_DEBUG("ggml_vk_matmul_id(a: (" << a.buffer->buffer << ", " << a.offset << ", " << a.size << "), b: (" << b.buffer->buffer << ", " << b.offset << ", " << b.size << "), d: (" << d.buffer->buffer << ", " << d.offset << ", " << d.size << "), ids: (" << ids.buffer->buffer << ", " << ids.offset << ", " << ids.size << "), " <<
-        "m: " << m << ", n: " << n << ", k: " << k << ", stride_a: " << stride_a << ", stride_b: " << stride_b << ", stride_d: " << stride_d << ", " <<
-        "batch_stride_a: " << batch_stride_a << ", batch_stride_b: " << batch_stride_b << ", batch_stride_d: " << batch_stride_d << ", " <<
-        "n_as: " << n_as << ", nei0: " << nei0 << ", nei1: " << nei1 << ", nbi1: " << nbi1 << ", ne11: " << ne11 << ")");
-    ggml_vk_sync_buffers(subctx);
-    const vk_mat_mat_id_push_constants pc = { m, n, k, stride_a, stride_b, stride_d, batch_stride_a, batch_stride_b, batch_stride_d,
-                                              nei0, nei1, nbi1, ne11 };
-    ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, d, ids }, sizeof(vk_mat_mat_id_push_constants), &pc, { m, nei1, n_as });
-}
-
-static bool ggml_vk_dim01_contiguous(const ggml_tensor * tensor) {
-    return
-        tensor->nb[0] == ggml_type_size(tensor->type) &&
-        tensor->nb[1] == (tensor->nb[0]*tensor->ne[0])/ggml_blck_size(tensor->type) &&
-        tensor->nb[3] == tensor->nb[2]*tensor->ne[2];
-}
-
-static vk_pipeline ggml_vk_get_cpy_pipeline(ggml_backend_vk_context * ctx, ggml_type from, ggml_type to) {
-    if (from == GGML_TYPE_F32 && to == GGML_TYPE_F32) {
-        return ctx->device->pipeline_cpy_f32_f32;
-    }
-    if (from == GGML_TYPE_F32 && to == GGML_TYPE_F16) {
-        return ctx->device->pipeline_cpy_f32_f16;
-    }
-    if (from == GGML_TYPE_F16 && to == GGML_TYPE_F16) {
-        return ctx->device->pipeline_cpy_f16_f16;
-    }
-
-    std::cerr << "Missing CPY op for types: " << ggml_type_name(from) << " " << ggml_type_name(to) << std::endl;
-    GGML_ASSERT(false);
-}
-
-static void ggml_vk_cpy_to_contiguous(ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline pipeline, const ggml_tensor * tensor, vk_subbuffer&& in, vk_subbuffer&& out) {
-    VK_LOG_DEBUG("ggml_vk_cpy_to_contiguous((" << tensor << ", type=" << tensor->type << ", ne0=" << tensor->ne[0] << ", ne1=" << tensor->ne[1] << ", ne2=" << tensor->ne[2] << ", ne3=" << tensor->ne[3] << ", nb0=" << tensor->nb[0] << ", nb1=" << tensor->nb[1] << ", nb2=" << tensor->nb[2] << ", nb3=" << tensor->nb[3] << "), ";
-    std::cerr << "buffer in size=" << in.buffer->size << ", buffer out size=" << out.buffer->size << ")");
-    const int tensor_type_size = ggml_type_size(tensor->type);
-
-    const uint32_t ne = ggml_nelements(tensor);
-
-    const vk_op_unary_push_constants pc = {
-        (uint32_t)ne,
-        (uint32_t)tensor->ne[0], (uint32_t)tensor->ne[1], (uint32_t)tensor->ne[2], (uint32_t)tensor->ne[3], (uint32_t)tensor->nb[0] / tensor_type_size, (uint32_t)tensor->nb[1] / tensor_type_size, (uint32_t)tensor->nb[2] / tensor_type_size, (uint32_t)tensor->nb[3] / tensor_type_size,
-        (uint32_t)tensor->ne[0], (uint32_t)tensor->ne[1], (uint32_t)tensor->ne[2], (uint32_t)tensor->ne[3],                       1                   , (uint32_t)tensor->ne[0]                   , (uint32_t)(tensor->ne[0] * tensor->ne[1]) , (uint32_t)(tensor->ne[0] * tensor->ne[1] * tensor->ne[2]),
-        0,
-        0.0f, 0.0f,
-    };
-    ggml_vk_sync_buffers(subctx);
-    ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { in, out }, sizeof(vk_op_unary_push_constants), &pc, { ne, 1, 1 });
-}
-
-static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    VK_LOG_DEBUG("ggml_vk_mul_mat_q_f16((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
-    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
-    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
-    GGML_ASSERT(ggml_vk_dim01_contiguous(src0) || src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16);  // NOLINT
-    GGML_ASSERT(ggml_vk_dim01_contiguous(src1) || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16);  // NOLINT
-
-    const uint64_t ne00 = src0->ne[0];
-    const uint64_t ne01 = src0->ne[1];
-    const uint64_t ne02 = src0->ne[2];
-    const uint64_t ne03 = src0->ne[3];
-
-    const uint64_t ne10 = src1->ne[0];
-    const uint64_t ne11 = src1->ne[1];
-    const uint64_t ne12 = src1->ne[2];
-    const uint64_t ne13 = src1->ne[3];
-
-    const uint64_t ne20 = dst->ne[0];
-    const uint64_t ne21 = dst->ne[1];
-
-    const uint64_t r2 = ne12 / ne02;
-    const uint64_t r3 = ne13 / ne03;
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
-    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
-    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
-
-    vk_buffer d_Qx;
-    size_t qx_buf_offset = 0;
-    vk_buffer d_Qy;
-    size_t qy_buf_offset = 0;
-
-    bool src0_uma = false;
-    bool src1_uma = false;
-
-    if (ctx->device->uma) {
-        ggml_vk_host_get(ctx, src0->data, d_Qx, qx_buf_offset);
-        ggml_vk_host_get(ctx, src1->data, d_Qy, qy_buf_offset);
-        src0_uma = d_Qx != nullptr;
-        src1_uma = d_Qy != nullptr;
-    }
-
-    const bool x_non_contig = !ggml_vk_dim01_contiguous(src0);
-    const bool y_non_contig = !ggml_vk_dim01_contiguous(src1);
-
-    const bool y_f32_kernel = src1->type == GGML_TYPE_F32 && !y_non_contig;
-
-    vk_matmul_pipeline mmp = ggml_vk_get_mul_mat_mat_pipeline(ctx, src0->type, y_non_contig ? GGML_TYPE_F16 : src1->type);
-
-    const bool qx_needs_dequant = mmp == nullptr || x_non_contig;
-    const bool qy_needs_dequant = (src1->type != GGML_TYPE_F16 && !y_f32_kernel) || y_non_contig;
-
-    if (mmp == nullptr) {
-        // Fall back to dequant + f16 mulmat
-        mmp = ggml_vk_get_mul_mat_mat_pipeline(ctx, GGML_TYPE_F16, y_f32_kernel ? GGML_TYPE_F32 : GGML_TYPE_F16);
-    }
-
-    // Not implemented
-    GGML_ASSERT(y_non_contig || !qy_needs_dequant);  // NOLINT
-
-    const int x_ne = ne01 * ne00;
-    const int y_ne = ne11 * ne10;
-    const int d_ne = ne11 * ne01;
-
-    const uint32_t kpad = ggml_vk_align_size(ne10, ggml_vk_guess_matmul_pipeline_align(ctx, mmp, ne01, ne11));
-    const bool aligned = ne10 == kpad && ne01 > 8 && ne11 > 8;
-
-    const uint32_t split_k = ggml_vk_guess_split_k(ne01, ne11, ne10);
-
-    vk_pipeline pipeline = ggml_vk_guess_matmul_pipeline(ctx, mmp, ne01, ne11, aligned);
-
-    const uint64_t qx_sz = ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type);
-    const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type);
-    const uint64_t x_sz = !qx_needs_dequant ? qx_sz : sizeof(ggml_fp16_t) * x_ne;
-    const uint64_t y_sz = y_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne;
-    const uint64_t d_sz = sizeof(float) * d_ne;
-
-    vk_buffer d_D = extra->buffer_gpu.lock();
-    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
-    GGML_ASSERT(d_D != nullptr);
-    GGML_ASSERT(d_D->size >= d_buf_offset + d_sz * ne02 * ne03);
-    vk_buffer d_X;
-    uint64_t x_buf_offset = 0;
-    vk_buffer d_Y;
-    uint64_t y_buf_offset = 0;
-    if (!src0_uma) {
-        d_Qx = extra_src0->buffer_gpu.lock();
-        qx_buf_offset = extra_src0->offset + src0->view_offs;
-        GGML_ASSERT(d_Qx != nullptr);
-    }
-    if (!src1_uma) {
-        d_Qy = extra_src1->buffer_gpu.lock();
-        qy_buf_offset = extra_src1->offset + src1->view_offs;
-        GGML_ASSERT(d_Qy != nullptr);
-    }
-    if (qx_needs_dequant) {
-        d_X = ctx->prealloc_x;
-        GGML_ASSERT(d_X->size >= x_sz * ne02 * ne03);
-    } else {
-        d_X = d_Qx;
-        x_buf_offset = qx_buf_offset;
-        GGML_ASSERT(qx_sz == x_sz);
-    }
-    if (qy_needs_dequant) {
-        d_Y = ctx->prealloc_y;
-        GGML_ASSERT(d_Y->size >= y_sz * ne02 * ne03);
-    } else {
-        d_Y = d_Qy;
-        y_buf_offset = qy_buf_offset;
-        GGML_ASSERT(qy_sz == y_sz);
-    }
-
-    vk_pipeline to_fp16_vk_0 = nullptr;
-    vk_pipeline to_fp16_vk_1 = nullptr;
-
-    if (x_non_contig) {
-        to_fp16_vk_0 = ggml_vk_get_cpy_pipeline(ctx, src0->type, GGML_TYPE_F16);
-    } else {
-        to_fp16_vk_0 = ggml_vk_get_to_fp16(ctx, src0->type);
-    }
-    if (y_non_contig) {
-        to_fp16_vk_1 = ggml_vk_get_cpy_pipeline(ctx, src1->type, GGML_TYPE_F16);
-    } else {
-        to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type);
-    }
-    GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr);  // NOLINT
-    GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr);  // NOLINT
-
-    // Allocate descriptor sets
-    ggml_pipeline_allocate_descriptor_sets(ctx, pipeline, 1);
-    if (qx_needs_dequant) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_0, 1);
-    }
-    if (qy_needs_dequant) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_1, 1);
-    }
-    if (split_k > 1) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, 1);
-    }
-
-    if (x_non_contig) {
-        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE });
-    } else if (qx_needs_dequant) {
-        const std::vector<uint32_t> pc = { (uint32_t)ne01, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)(ggml_nelements(src0)) };
-        ggml_vk_sync_buffers(subctx);
-        ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, { { d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, { d_X, 0, x_sz * ne02 * ne03 } }, pc.size() * sizeof(uint32_t), pc.data(), { (uint32_t)(x_ne * ne02 * ne03), 1, 1});
-    }
-    if (y_non_contig) {
-        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE });
-    }
-
-    uint32_t stride_batch_x = ne00*ne01;
-    uint32_t stride_batch_y = ne10*ne11;
-
-    if (!ggml_vk_dim01_contiguous(src0) && !qx_needs_dequant) {
-        stride_batch_x = src0->nb[0] / ggml_type_size(src0->type);
-    }
-
-    if (!ggml_vk_dim01_contiguous(src1) && !qy_needs_dequant) {
-        stride_batch_y = src1->nb[0] / ggml_type_size(src1->type);
-    }
-
-    // compute
-    ggml_vk_matmul(
-        ctx, subctx, pipeline,
-        { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz * ne12 * ne13 },
-        { d_D, d_buf_offset, d_sz * ne12 * ne13 }, { ctx->prealloc_split_k, 0, d_sz * ne12 * ne13 * split_k },
-        ne01, ne11, ne10,
-        ne10, ne10, ne01, stride_batch_x, stride_batch_y, ne20*ne21,
-        split_k, ne12*ne13, ne02, ne12, r2, r3
-    );  // NOLINT
-}
-
-static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    VK_LOG_DEBUG("ggml_vk_mul_mat_vec_q_f16((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
-    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
-    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
-    GGML_ASSERT(ggml_vk_dim01_contiguous(src0) || src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16);  // NOLINT
-    GGML_ASSERT(ggml_vk_dim01_contiguous(src1) || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16);  // NOLINT
-
-    const uint64_t ne00 = src0->ne[0];
-    const uint64_t ne01 = src0->ne[1];
-    const uint64_t ne02 = src0->ne[2];
-    const uint64_t ne03 = src0->ne[3];
-
-    const uint64_t ne10 = src1->ne[0];
-    const uint64_t ne11 = src1->ne[1];
-    const uint64_t ne12 = src1->ne[2];
-    const uint64_t ne13 = src1->ne[3];
-
-    GGML_ASSERT(ne11 == 1);
-
-    const uint64_t ne20 = dst->ne[0];
-    const uint64_t ne21 = dst->ne[1];
-    const uint64_t ne22 = dst->ne[2];
-    const uint64_t ne23 = dst->ne[3];
-
-    const uint64_t r2 = ne12 / ne02;
-    const uint64_t r3 = ne13 / ne03;
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
-    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
-    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
-
-    vk_buffer d_Qx;
-    size_t qx_buf_offset = 0;
-    vk_buffer d_Qy;
-    size_t qy_buf_offset = 0;
-
-    bool src0_uma = false;
-    bool src1_uma = false;
-
-    if (ctx->device->uma) {
-        ggml_vk_host_get(ctx, src0->data, d_Qx, qx_buf_offset);
-        ggml_vk_host_get(ctx, src1->data, d_Qy, qy_buf_offset);
-        src0_uma = d_Qx != nullptr;
-        src1_uma = d_Qy != nullptr;
-    }
-
-    const bool x_non_contig = !ggml_vk_dim01_contiguous(src0);
-    const bool y_non_contig = !ggml_vk_dim01_contiguous(src1);
-
-    const bool f16_f32_kernel = src1->type == GGML_TYPE_F32;
-
-    const bool qx_needs_dequant = x_non_contig;
-    const bool qy_needs_dequant = (src1->type != GGML_TYPE_F16 && !f16_f32_kernel) || y_non_contig;
-
-    // Not implemented
-    GGML_ASSERT(y_non_contig || !qy_needs_dequant);  // NOLINT
-
-    const uint64_t x_ne = ne01 * ne00;
-    const uint64_t y_ne = ne11 * ne10;
-    const uint64_t d_ne = ne11 * ne01;
-
-    const uint64_t qx_sz = ggml_vk_align_size(ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type), ctx->device->properties.limits.minStorageBufferOffsetAlignment);
-    const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type);
-    const uint64_t x_sz = x_non_contig ? ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) : qx_sz;
-    const uint64_t y_sz = f16_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne;
-    const uint64_t d_sz = sizeof(float) * d_ne;
-
-    vk_buffer d_D = extra->buffer_gpu.lock();
-    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
-    GGML_ASSERT(d_D != nullptr);
-    vk_buffer d_X;
-    uint64_t x_buf_offset = 0;
-    vk_buffer d_Y;
-    uint64_t y_buf_offset = 0;
-    if(!src0_uma) {
-        d_Qx = extra_src0->buffer_gpu.lock();
-        qx_buf_offset = extra_src0->offset + src0->view_offs;
-        GGML_ASSERT(d_Qx != nullptr);
-    }
-    if(!src1_uma) {
-        d_Qy = extra_src1->buffer_gpu.lock();
-        qy_buf_offset = extra_src1->offset + src1->view_offs;
-        GGML_ASSERT(d_Qy != nullptr);
-    }
-    if (qx_needs_dequant) {
-        d_X = ctx->prealloc_x;
-    } else {
-        d_X = d_Qx;
-        x_buf_offset = qx_buf_offset;
-        GGML_ASSERT(qx_sz == x_sz);
-    }
-    if (qy_needs_dequant) {
-        d_Y = ctx->prealloc_y;
-    } else {
-        d_Y = d_Qy;
-        y_buf_offset = qy_buf_offset;
-        GGML_ASSERT(qy_sz == y_sz);
-    }
-
-    vk_pipeline to_fp16_vk_0 = nullptr;
-    vk_pipeline to_fp16_vk_1 = nullptr;
-    if (x_non_contig) {
-        to_fp16_vk_0 = ggml_vk_get_cpy_pipeline(ctx, src0->type, src0->type);
-    }
-    if (y_non_contig) {
-        to_fp16_vk_1 = ggml_vk_get_cpy_pipeline(ctx, src1->type, src1->type);
-    } else {
-        to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type);
-    }
-    vk_pipeline dmmv = ggml_vk_get_dequantize_mul_mat_vec(ctx, src0->type, src1->type);
-    GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr);  // NOLINT
-    GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr);  // NOLINT
-    GGML_ASSERT(dmmv != nullptr);
-
-    // Allocate descriptor sets
-    if (qx_needs_dequant) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_0, 1);
-    }
-    if (qy_needs_dequant) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_1, y_non_contig ? 1 : ne12 * ne13);
-    }
-    ggml_pipeline_allocate_descriptor_sets(ctx, dmmv, ne12 * ne13);
-
-    if (x_non_contig) {
-        GGML_ASSERT(x_sz == ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment));
-        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE });
-    }
-    if (y_non_contig) {
-        GGML_ASSERT(y_sz == ggml_type_size(src1->type) * y_ne);
-        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE });
-    }
-
-    uint32_t stride_batch_x = ne00*ne01;
-    uint32_t stride_batch_y = ne10*ne11;
-
-    if (!ggml_vk_dim01_contiguous(src0) && !qx_needs_dequant) {
-        stride_batch_x = src0->nb[0] / ggml_type_size(src0->type);
-    }
-
-    if (!ggml_vk_dim01_contiguous(src1) && !qy_needs_dequant) {
-        stride_batch_y = src1->nb[0] / ggml_type_size(src1->type);
-    }
-
-    // compute
-    const vk_mat_vec_push_constants pc = {
-        (uint32_t)ne00, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne01,
-        stride_batch_x, stride_batch_y, (uint32_t)(ne20*ne21),
-        (uint32_t)ne02, (uint32_t)ne12, (uint32_t)r2, (uint32_t)r3,
-    };
-    ggml_vk_sync_buffers(subctx);
-    ggml_vk_dispatch_pipeline(ctx, subctx, dmmv, { { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz * ne12 * ne13 }, { d_D, d_buf_offset, d_sz * ne22 * ne23} }, sizeof(vk_mat_vec_push_constants), &pc, { (uint32_t)ne01, (uint32_t)(ne12 * ne13), 1});
-}
-
-static void ggml_vk_mul_mat_vec_p021_f16_f32(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    VK_LOG_DEBUG("ggml_vk_mul_mat_p021_f16_f32((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
-    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
-    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
-    GGML_ASSERT(ggml_is_permuted(src0) && ggml_is_permuted(src1));
-    GGML_ASSERT(src0->nb[0] <= src0->nb[1] && src0->nb[2] <= src0->nb[3]);  // NOLINT
-    GGML_ASSERT(src1->nb[0] <= src1->nb[1] && src1->nb[2] <= src1->nb[3]);  // NOLINT
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    const uint64_t ne00 = src0->ne[0];
-    const uint64_t ne01 = src0->ne[1];
-    const uint64_t ne02 = src0->ne[2];
-    // const uint64_t ne03 = src0->ne[3];
-
-    const uint64_t ne10 = src1->ne[0];
-    const uint64_t ne11 = src1->ne[1];
-    const uint64_t ne12 = src1->ne[2];
-    // const uint64_t ne13 = src1->ne[3];
-
-    GGML_ASSERT(ne11 == 1);
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
-    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
-    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
-
-    vk_buffer d_Qy;
-    size_t qy_buf_offset = 0;
-
-    bool src1_uma = false;
-
-    if (ctx->device->uma) {
-        ggml_vk_host_get(ctx, src1->data, d_Qy, qy_buf_offset);
-        src1_uma = d_Qy != nullptr;
-    }
-
-    const uint64_t x_ne = ne00 * ne01 * ne02;
-    const uint64_t y_ne = ne10 * ne11 * ne12;
-    const uint64_t d_ne = ne01 * ne11 * ne12;
-
-    const uint64_t qx_sz = ggml_vk_align_size(ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type), ctx->device->properties.limits.minStorageBufferOffsetAlignment);
-    const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type);
-    const uint64_t d_sz = sizeof(float) * d_ne;
-
-    vk_buffer d_D = extra->buffer_gpu.lock();
-    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
-    GGML_ASSERT(d_D != nullptr);
-    vk_buffer d_Qx = extra_src0->buffer_gpu.lock();
-    const uint64_t qx_buf_offset = extra_src0->offset + src0->view_offs;
-    GGML_ASSERT(d_Qx != nullptr);
-    if (!src1_uma) {
-        d_Qy = extra_src1->buffer_gpu.lock();
-        qy_buf_offset = extra_src1->offset + src1->view_offs;
-        GGML_ASSERT(d_Qx != nullptr);
-    }
-
-    // Allocate descriptor sets
-    ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_mul_mat_vec_p021_f16_f32, 1);
-
-    const uint64_t qy_buffer_offset = (qy_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment;
-    const uint64_t qy_shader_offset = qy_buf_offset - qy_buffer_offset;
-
-    const uint64_t d_buffer_offset = (d_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment;
-    const uint64_t d_shader_offset = d_buf_offset - d_buffer_offset;
-
-    // compute
-    const std::array<uint32_t, 6> pc = { (uint32_t)ne00, (uint32_t)ne01, (uint32_t)ne02, (uint32_t)ne12, (uint32_t)(qy_shader_offset / ggml_type_size(src1->type)), (uint32_t)(d_shader_offset / ggml_type_size(dst->type)) };
-    ggml_vk_sync_buffers(subctx);
-    ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_mul_mat_vec_p021_f16_f32, { { d_Qx, qx_buf_offset, qx_sz }, { d_Qy, qy_buffer_offset, qy_sz + qy_shader_offset }, { d_D, d_buffer_offset, d_sz + d_shader_offset } }, 6 * sizeof(uint32_t), &pc, { 1, (uint32_t)ne01, (uint32_t)ne12 });
-}
-
-static void ggml_vk_mul_mat_vec_nc_f16_f32(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    VK_LOG_DEBUG("ggml_vk_mul_mat_nc_f16_f32((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
-    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
-    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
-    GGML_ASSERT(!ggml_is_transposed(src0));
-    GGML_ASSERT(!ggml_is_transposed(src1));
-    GGML_ASSERT(!ggml_is_permuted(src0));
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    const uint64_t ne00 = src0->ne[0];
-    const uint64_t ne01 = src0->ne[1];
-    const uint64_t ne02 = src0->ne[2];
-    // const uint64_t ne03 = src0->ne[3];
-
-    const uint64_t nb01 = src0->nb[1];
-    const uint64_t nb02 = src0->nb[2];
-
-    // const uint64_t ne10 = src1->ne[0];
-    const uint64_t ne11 = src1->ne[1];
-    const uint64_t ne12 = src1->ne[2];
-    // const uint64_t ne13 = src1->ne[3];
-
-    GGML_ASSERT(ne11 == 1);
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
-    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
-    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
-
-    vk_buffer d_Qy = nullptr;
-    size_t qy_buf_offset = 0;
-
-    bool src1_uma = false;
-
-    if (ctx->device->uma) {
-        ggml_vk_host_get(ctx, src1->data, d_Qy, qy_buf_offset);
-        src1_uma = d_Qy != nullptr;
-    }
-
-    const uint64_t d_ne = ne01 * ne11 * ne12;
-
-    const uint32_t row_stride_x = nb01 / sizeof(ggml_fp16_t);
-    const uint32_t channel_stride_x = nb02 / sizeof(ggml_fp16_t);
-
-    const uint64_t qx_sz = ggml_nbytes(src0);
-    const uint64_t qy_sz = ggml_nbytes(src1);
-    const uint64_t d_sz = sizeof(float) * d_ne;
-
-    vk_buffer d_D = extra->buffer_gpu.lock();
-    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
-    GGML_ASSERT(d_D != nullptr);
-    vk_buffer d_Qx = extra_src0->buffer_gpu.lock();
-    const uint64_t qx_buf_offset = extra_src0->offset + src0->view_offs;
-    GGML_ASSERT(d_Qx != nullptr);
-    if (!src1_uma) {
-        d_Qy = extra_src1->buffer_gpu.lock();
-        qy_buf_offset = extra_src1->offset + src1->view_offs;
-        GGML_ASSERT(d_Qx != nullptr);
-    }
-
-    // Allocate descriptor sets
-    ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, 1);
-
-    const uint64_t qy_buffer_offset = (qy_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment;
-    const uint64_t qy_shader_offset = qy_buf_offset - qy_buffer_offset;
-
-    const uint64_t d_buffer_offset = (d_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment;
-    const uint64_t d_shader_offset = d_buf_offset - d_buffer_offset;
-
-    // compute
-    const std::array<uint32_t, 7> pc = { (uint32_t)ne00, (uint32_t)ne01, row_stride_x, channel_stride_x, (uint32_t)(ne12 / ne02), (uint32_t)(qy_shader_offset / ggml_type_size(src1->type)), (uint32_t)(d_shader_offset / ggml_type_size(dst->type)) };
-    ggml_vk_sync_buffers(subctx);
-    ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, { { d_Qx, qx_buf_offset, qx_sz }, { d_Qy, qy_buffer_offset, qy_sz + qy_shader_offset }, { d_D, d_buffer_offset, d_sz + d_shader_offset } }, 7 * sizeof(uint32_t), &pc, { 1, (uint32_t)ne01, (uint32_t)ne12 });
-}
-
-static void ggml_vk_mul_mat(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    VK_LOG_DEBUG("ggml_vk_mul_mat(" << src0 << ", " << src1 << ", " << dst << ")");
-    if (src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && dst->ne[1] == 1) {
-        ggml_vk_mul_mat_vec_p021_f16_f32(ctx, subctx, src0, src1, dst);
-    } else if (src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && dst->ne[1] == 1) {
-        ggml_vk_mul_mat_vec_nc_f16_f32(ctx, subctx, src0, src1, dst);
-    } else if (dst->ne[1] == 1 && (src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type))) {
-        ggml_vk_mul_mat_vec_q_f16(ctx, subctx, src0, src1, dst);
-    } else {
-        ggml_vk_mul_mat_q_f16(ctx, subctx, src0, src1, dst);
-    }
-}
-
-static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * ids, ggml_tensor * dst) {
-    VK_LOG_DEBUG("ggml_vk_mul_mat_id_q_f16((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
-    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
-    std::cerr << "), (" << ids << ", name=" << ids->name << ", type=" << ids->type << ", ne0=" << ids->ne[0] << ", ne1=" << ids->ne[1] << ", ne2=" << ids->ne[2] << ", ne3=" << ids->ne[3] << ", nb0=" << ids->nb[0] << ", nb1=" << ids->nb[1] << ", nb2=" << ids->nb[2] << ", nb3=" << ids->nb[3];
-    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
-    GGML_ASSERT(ggml_vk_dim01_contiguous(src1) || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16);  // NOLINT
-    GGML_ASSERT(ids->type == GGML_TYPE_I32);
-
-    const uint64_t ne00 = src0->ne[0];
-    const uint64_t ne01 = src0->ne[1];
-    const uint64_t ne02 = src0->ne[2];
-    const uint64_t ne03 = src0->ne[3];
-
-    const uint64_t ne10 = src1->ne[0];
-    const uint64_t ne11 = src1->ne[1];
-    const uint64_t ne12 = src1->ne[2];
-    const uint64_t ne13 = src1->ne[3];
-
-    const uint64_t nei0 = ids->ne[0];
-    const uint64_t nei1 = ids->ne[1];
-    GGML_ASSERT(nei0 * nei1 <= 2048);
-
-    const uint32_t nbi1 = ids->nb[1];
-    const uint32_t nbi2 = ids->nb[2];
-
-    const uint64_t ne20 = dst->ne[0];
-    const uint64_t ne21 = dst->ne[1];
-    const uint64_t ne22 = dst->ne[2];
-    const uint64_t ne23 = dst->ne[3];
-
-    const uint64_t n_as = ne02;
-
-    GGML_ASSERT(n_as <= 8);
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
-    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
-    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
-    ggml_tensor_extra_gpu * extra_ids = (ggml_tensor_extra_gpu *) ids->extra;
-
-    vk_buffer d_Qx;
-    size_t qx_buf_offset = 0;
-    vk_buffer d_Qy;
-    size_t qy_buf_offset = 0;
-    vk_buffer d_ids;
-    size_t ids_buf_offset = 0;
-
-    bool src0_uma = false;
-    bool src1_uma = false;
-    bool ids_uma = false;
-
-    if (ctx->device->uma) {
-        ggml_vk_host_get(ctx, src0->data, d_Qx, qx_buf_offset);
-        ggml_vk_host_get(ctx, src1->data, d_Qy, qy_buf_offset);
-        ggml_vk_host_get(ctx, ids->data, d_ids, ids_buf_offset);
-        src0_uma = d_Qx != nullptr;
-        src1_uma = d_Qy != nullptr;
-        ids_uma = d_ids != nullptr;
-    }
-
-    const bool x_non_contig = !ggml_vk_dim01_contiguous(src0);
-    const bool y_non_contig = !ggml_vk_dim01_contiguous(src1);
-
-    const bool y_f32_kernel = src1->type == GGML_TYPE_F32 && !y_non_contig;
-
-    vk_matmul_pipeline mmp = ggml_vk_get_mul_mat_mat_id_pipeline(ctx, src0->type, y_non_contig ? GGML_TYPE_F16 : src1->type);
-
-    const bool qx_needs_dequant = mmp == nullptr || x_non_contig;
-    const bool qy_needs_dequant = (src1->type != GGML_TYPE_F16 && !y_f32_kernel) || y_non_contig;
-
-    if (mmp == nullptr) {
-        GGML_ASSERT(false);
-    }
-
-    // Not implemented
-    GGML_ASSERT(y_non_contig || !qy_needs_dequant);  // NOLINT
-
-    const uint64_t x_ne = ne01 * ne00;
-    const uint64_t y_ne = ne11 * ne10;
-    const uint64_t d_ne = ne21 * ne20;
-
-    const uint32_t kpad = ggml_vk_align_size(ne10, ggml_vk_guess_matmul_pipeline_align(ctx, mmp, ne01, nei1));
-    const bool aligned = ne10 == kpad && ne01 > 8 && nei1 > 8;
-
-    vk_pipeline pipeline = ggml_vk_guess_matmul_pipeline(ctx, mmp, ne01, nei1, aligned);
-
-    const uint64_t qx_sz = ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type);
-    const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type);
-    const uint64_t x_sz = !qx_needs_dequant ? qx_sz : sizeof(ggml_fp16_t) * x_ne;
-    const uint64_t y_sz = y_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne;
-    const uint64_t ids_sz = nbi2;
-    const uint64_t d_sz = sizeof(float) * d_ne;
-
-    vk_buffer d_D = extra->buffer_gpu.lock();
-    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
-    GGML_ASSERT(d_D != nullptr);
-    vk_buffer d_X;
-    uint64_t x_buf_offset = 0;
-    vk_buffer d_Y;
-    uint64_t y_buf_offset = 0;
-    if (!src0_uma) {
-        d_Qx = extra_src0->buffer_gpu.lock();
-        qx_buf_offset = extra_src0->offset + src0->view_offs;
-        GGML_ASSERT(d_Qx != nullptr);
-    }
-    if (!src1_uma) {
-        d_Qy = extra_src1->buffer_gpu.lock();
-        qy_buf_offset = extra_src1->offset + src1->view_offs;
-        GGML_ASSERT(d_Qy != nullptr);
-    }
-    if (!ids_uma) {
-        d_ids = extra_ids->buffer_gpu.lock();
-        ids_buf_offset = extra_ids->offset + ids->view_offs;
-        GGML_ASSERT(d_ids != nullptr);
-    }
-    if (qx_needs_dequant) {
-        d_X = ctx->prealloc_x;
-        GGML_ASSERT(d_X->size >= x_sz * ne02 * ne03);
-    } else {
-        d_X = d_Qx;
-        x_buf_offset = qx_buf_offset;
-        GGML_ASSERT(qx_sz == x_sz);
-    }
-    if (qy_needs_dequant) {
-        d_Y = ctx->prealloc_y;
-        GGML_ASSERT(d_Y->size >= y_sz * ne02 * ne03);
-    } else {
-        d_Y = d_Qy;
-        y_buf_offset = qy_buf_offset;
-        GGML_ASSERT(qy_sz == y_sz);
-    }
-
-    vk_pipeline to_fp16_vk_0 = nullptr;
-    vk_pipeline to_fp16_vk_1 = nullptr;
-
-    if (x_non_contig) {
-        to_fp16_vk_0 = ggml_vk_get_cpy_pipeline(ctx, src0->type, GGML_TYPE_F16);
-    } else {
-        to_fp16_vk_0 = ggml_vk_get_to_fp16(ctx, src0->type);
-    }
-    if (y_non_contig) {
-        to_fp16_vk_1 = ggml_vk_get_cpy_pipeline(ctx, src1->type, GGML_TYPE_F16);
-    } else {
-        to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type);
-    }
-    GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr);  // NOLINT
-    GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr);  // NOLINT
-
-    // Allocate descriptor sets
-    ggml_pipeline_allocate_descriptor_sets(ctx, pipeline, 1);
-    if (qx_needs_dequant) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_0, 1);
-    }
-    if (qy_needs_dequant) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_1, 1);
-    }
-
-    if (x_non_contig) {
-        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE });
-    } else if (qx_needs_dequant) {
-        const std::vector<uint32_t> pc = { (uint32_t)ne01, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)(ggml_nelements(src0)) };
-        ggml_vk_sync_buffers(subctx);
-        ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, { { d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, { d_X, 0, x_sz * ne02 * ne03 } }, pc.size() * sizeof(uint32_t), pc.data(), { (uint32_t)(x_ne * ne02 * ne03), 1, 1});
-    }
-    if (y_non_contig) {
-        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE });
-    }
-
-    uint32_t stride_batch_x = ne00*ne01;
-    uint32_t stride_batch_y = ne10*ne11;
-
-    if (!ggml_vk_dim01_contiguous(src0) && !qx_needs_dequant) {
-        stride_batch_x = src0->nb[0] / ggml_type_size(src0->type);
-    }
-
-    if (!ggml_vk_dim01_contiguous(src1) && !qy_needs_dequant) {
-        stride_batch_y = src1->nb[0] / ggml_type_size(src1->type);
-    }
-
-    // compute
-    ggml_vk_matmul_id(
-        ctx, subctx, pipeline,
-        { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz * ne12 * ne13 },
-        { d_D, d_buf_offset, d_sz * ne22 * ne23 }, { d_ids, ids_buf_offset, ids_sz },
-        ne01, ne21, ne10, ne10, ne10, ne01,
-        stride_batch_x, stride_batch_y, ne20*ne21,
-        n_as, nei0, nei1, nbi1 / ggml_type_size(ids->type), ne11
-    );  // NOLINT
-}
-
-static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * ids, ggml_tensor * dst) {
-    VK_LOG_DEBUG("ggml_vk_mul_mat_vec_id_q_f16((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
-    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
-    std::cerr << "), (" << ids << ", name=" << ids->name << ", type=" << ids->type << ", ne0=" << ids->ne[0] << ", ne1=" << ids->ne[1] << ", ne2=" << ids->ne[2] << ", ne3=" << ids->ne[3] << ", nb0=" << ids->nb[0] << ", nb1=" << ids->nb[1] << ", nb2=" << ids->nb[2] << ", nb3=" << ids->nb[3];
-    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
-    GGML_ASSERT(ggml_vk_dim01_contiguous(src0) || src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16);  // NOLINT
-    GGML_ASSERT(ggml_vk_dim01_contiguous(src1) || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16);  // NOLINT
-    GGML_ASSERT(ids->type == GGML_TYPE_I32);
-
-    const uint64_t ne00 = src0->ne[0];
-    const uint64_t ne01 = src0->ne[1];
-    const uint64_t ne02 = src0->ne[2];
-    const uint64_t ne03 = src0->ne[3];
-
-    const uint64_t ne10 = src1->ne[0];
-    const uint64_t ne11 = src1->ne[1];
-    const uint64_t ne12 = src1->ne[2];
-    const uint64_t ne13 = src1->ne[3];
-
-    const uint64_t nei0 = ids->ne[0];
-    const uint64_t nei1 = ids->ne[1];
-
-    const uint64_t nbi2 = ids->nb[2];
-
-    GGML_ASSERT(nei1 == 1);
-
-    const uint64_t ne20 = dst->ne[0];
-    const uint64_t ne21 = dst->ne[1];
-    const uint64_t ne22 = dst->ne[2];
-    const uint64_t ne23 = dst->ne[3];
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
-    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
-    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
-    ggml_tensor_extra_gpu * extra_ids = (ggml_tensor_extra_gpu *) ids->extra;
-
-    vk_buffer d_Qx;
-    size_t qx_buf_offset = 0;
-    vk_buffer d_Qy;
-    size_t qy_buf_offset = 0;
-    vk_buffer d_ids;
-    size_t ids_buf_offset = 0;
-
-    bool src0_uma = false;
-    bool src1_uma = false;
-    bool ids_uma = false;
-
-    if (ctx->device->uma) {
-        ggml_vk_host_get(ctx, src0->data, d_Qx, qx_buf_offset);
-        ggml_vk_host_get(ctx, src1->data, d_Qy, qy_buf_offset);
-        ggml_vk_host_get(ctx, ids->data, d_ids, ids_buf_offset);
-        src0_uma = d_Qx != nullptr;
-        src1_uma = d_Qy != nullptr;
-        ids_uma = d_ids != nullptr;
-    }
-
-    const bool x_non_contig = !ggml_vk_dim01_contiguous(src0);
-    const bool y_non_contig = !ggml_vk_dim01_contiguous(src1);
-
-    const bool f16_f32_kernel = src1->type == GGML_TYPE_F32;
-
-    const bool qx_needs_dequant = x_non_contig;
-    const bool qy_needs_dequant = (src1->type != GGML_TYPE_F16 && !f16_f32_kernel) || y_non_contig;
-
-    // Not implemented
-    GGML_ASSERT(y_non_contig || !qy_needs_dequant);  // NOLINT
-
-    const uint64_t x_ne = ne01 * ne00;
-    const uint64_t y_ne = ne11 * ne10;
-    const uint64_t d_ne = ne21 * ne20;
-
-    const uint64_t qx_sz = ggml_vk_align_size(ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type), ctx->device->properties.limits.minStorageBufferOffsetAlignment);
-    const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type);
-    const uint64_t x_sz = x_non_contig ? ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) : qx_sz;
-    const uint64_t y_sz = f16_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne;
-    const uint64_t ids_sz = nbi2;
-    const uint64_t d_sz = sizeof(float) * d_ne;
-
-    vk_buffer d_D = extra->buffer_gpu.lock();
-    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
-    GGML_ASSERT(d_D != nullptr);
-    vk_buffer d_X;
-    uint64_t x_buf_offset = 0;
-    vk_buffer d_Y;
-    uint64_t y_buf_offset = 0;
-    if(!src0_uma) {
-        d_Qx = extra_src0->buffer_gpu.lock();
-        qx_buf_offset = extra_src0->offset + src0->view_offs;
-        GGML_ASSERT(d_Qx != nullptr);
-    }
-    if(!src1_uma) {
-        d_Qy = extra_src1->buffer_gpu.lock();
-        qy_buf_offset = extra_src1->offset + src1->view_offs;
-        GGML_ASSERT(d_Qy != nullptr);
-    }
-    if(!ids_uma) {
-        d_ids = extra_ids->buffer_gpu.lock();
-        ids_buf_offset = extra_ids->offset + ids->view_offs;
-        GGML_ASSERT(d_ids != nullptr);
-    }
-    if (qx_needs_dequant) {
-        d_X = ctx->prealloc_x;
-    } else {
-        d_X = d_Qx;
-        x_buf_offset = qx_buf_offset;
-        GGML_ASSERT(qx_sz == x_sz);
-    }
-    if (qy_needs_dequant) {
-        d_Y = ctx->prealloc_y;
-    } else {
-        d_Y = d_Qy;
-        y_buf_offset = qy_buf_offset;
-        GGML_ASSERT(qy_sz == y_sz);
-    }
-
-    vk_pipeline to_fp16_vk_0 = nullptr;
-    vk_pipeline to_fp16_vk_1 = nullptr;
-    if (x_non_contig) {
-        to_fp16_vk_0 = ggml_vk_get_cpy_pipeline(ctx, src0->type, src0->type);
-    }
-    if (y_non_contig) {
-        to_fp16_vk_1 = ggml_vk_get_cpy_pipeline(ctx, src1->type, src1->type);
-    } else {
-        to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type);
-    }
-    vk_pipeline dmmv = ggml_vk_get_dequantize_mul_mat_vec_id(ctx, src0->type, src1->type);
-    GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr);  // NOLINT
-    GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr);  // NOLINT
-    GGML_ASSERT(dmmv != nullptr);
-
-    // Allocate descriptor sets
-    if (qx_needs_dequant) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_0, 1);
-    }
-    if (qy_needs_dequant) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, to_fp16_vk_1, y_non_contig ? 1 : ne12 * ne13);
-    }
-    ggml_pipeline_allocate_descriptor_sets(ctx, dmmv, ne12 * ne13);
-
-    if (x_non_contig) {
-        GGML_ASSERT(x_sz == ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment));
-        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE });
-    }
-    if (y_non_contig) {
-        GGML_ASSERT(y_sz == ggml_type_size(src1->type) * y_ne);
-        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE });
-    }
-
-    uint32_t stride_batch_y = ne10*ne11;
-
-    if (!ggml_vk_dim01_contiguous(src1) && !qy_needs_dequant) {
-        stride_batch_y = src1->nb[0] / ggml_type_size(src1->type);
-    }
-
-    // compute
-    const vk_mat_vec_id_push_constants pc = {
-        (uint32_t)ne00, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne01,
-        (uint32_t)x_ne, stride_batch_y, (uint32_t)(ne20*ne21),
-        (uint32_t)nei0, (uint32_t)ne11,
-    };
-    ggml_vk_sync_buffers(subctx);
-    ggml_vk_dispatch_pipeline(ctx, subctx, dmmv,
-        { { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz * ne12 * ne13 }, { d_D, d_buf_offset, d_sz * ne22 * ne23}, { d_ids, ids_buf_offset, ids_sz } },
-        sizeof(vk_mat_vec_id_push_constants), &pc, { (uint32_t)ne01, (uint32_t)nei0, 1 });
-}
-
-static void ggml_vk_mul_mat_id(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst) {
-    VK_LOG_DEBUG("ggml_vk_mul_mat_id(" << src0 << ", " << src1 << ", " << src2 << ", " << dst << ")");
-    if (src2->ne[1] == 1 && (src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type))) {
-        ggml_vk_mul_mat_vec_id_q_f16(ctx, subctx, src0, src1, src2, dst);
-    } else {
-        ggml_vk_mul_mat_id_q_f16(ctx, subctx, src0, src1, src2, dst);
-    }
-}
-
-static void ggml_vk_op_repeat(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    // guaranteed to be an integer due to the check in ggml_can_repeat
-    const uint64_t ne0 = dst->ne[0];
-    const uint64_t ne1 = dst->ne[1];
-    const uint64_t ne2 = dst->ne[2];
-    const uint64_t ne3 = dst->ne[3];
-
-    const uint64_t ne00 = src0->ne[0];
-    const uint64_t ne01 = src0->ne[1];
-    const uint64_t ne02 = src0->ne[2];
-    const uint64_t ne03 = src0->ne[3];
-
-    const uint64_t nb0 = dst->nb[0];
-    const uint64_t nb1 = dst->nb[1];
-    const uint64_t nb2 = dst->nb[2];
-    const uint64_t nb3 = dst->nb[3];
-
-    const uint64_t nb00 = src0->nb[0];
-    const uint64_t nb01 = src0->nb[1];
-    const uint64_t nb02 = src0->nb[2];
-    const uint64_t nb03 = src0->nb[3];
-
-    const uint64_t nr0 = ne0/ne00;
-    const uint64_t nr1 = ne1/ne01;
-    const uint64_t nr2 = ne2/ne02;
-    const uint64_t nr3 = ne3/ne03;
-
-    // TODO: support for transposed / permuted tensors
-    GGML_ASSERT(nb0  == sizeof(float));
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
-    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
-
-    const vk_buffer src_buf = extra_src0->buffer_gpu.lock();
-    const uint64_t src_offset = extra_src0->offset + src0->view_offs;
-    vk_buffer dst_buf = extra->buffer_gpu.lock();
-    const uint64_t dst_offset = extra->offset + dst->view_offs;
-
-    std::vector<vk::BufferCopy> copies;
-
-    for                         (uint64_t i3 = 0; i3 < nr3;  i3++) {
-        for                     (uint64_t k3 = 0; k3 < ne03; k3++) {
-            for                 (uint64_t i2 = 0; i2 < nr2;  i2++) {
-                for             (uint64_t k2 = 0; k2 < ne02; k2++) {
-                    for         (uint64_t i1 = 0; i1 < nr1;  i1++) {
-                        for     (uint64_t k1 = 0; k1 < ne01; k1++) {
-                            for (uint64_t i0 = 0; i0 < nr0;  i0++) {
-                                copies.push_back({
-                                    src_offset + (i3*ne03 + k3)*nb3  + (i2*ne02 + k2)*nb2  + (i1*ne01 + k1)*nb1  + (i0*ne00)*nb0,
-                                    dst_offset + (          k3)*nb03 + (          k2)*nb02 + (          k1)*nb01,
-                                    ne00*nb0,
-                                });
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    ggml_vk_sync_buffers(subctx);
-    subctx->s->buffer.copyBuffer(src_buf->buffer, dst_buf->buffer, copies);
-
-    GGML_UNUSED(ctx);
-    GGML_UNUSED(src1);
-}
-
-
-static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst, ggml_op op) {
-    switch (op) {
-    case GGML_OP_ADD:
-        if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_add_f32;
-        }
-        return nullptr;
-    case GGML_OP_GET_ROWS:
-        GGML_ASSERT(src1->type == GGML_TYPE_I32);
-        if (dst->type == GGML_TYPE_F16) {
-            return ctx->device->pipeline_get_rows[src0->type];
-        }
-        if (dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_get_rows_f32[src0->type];
-        }
-        return nullptr;
-    case GGML_OP_MUL:
-        if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_mul_f32;
-        }
-        return nullptr;
-    case GGML_OP_DIV:
-        if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_div_f32;
-        }
-        return nullptr;
-    case GGML_OP_SCALE:
-        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_scale_f32;
-        }
-        return nullptr;
-    case GGML_OP_SQR:
-        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_sqr_f32;
-        }
-        return nullptr;
-    case GGML_OP_CLAMP:
-        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_clamp_f32;
-        }
-        return nullptr;
-    case GGML_OP_CPY:
-    case GGML_OP_CONT:
-    case GGML_OP_DUP:
-        return ggml_vk_get_cpy_pipeline(ctx, src0->type, dst->type);
-    case GGML_OP_NORM:
-        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_norm_f32;
-        }
-        return nullptr;
-    case GGML_OP_RMS_NORM:
-        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_rms_norm_f32;
-        }
-        return nullptr;
-    case GGML_OP_UNARY:
-        switch (ggml_get_unary_op(dst)) {
-            case GGML_UNARY_OP_SILU:
-                if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-                    return ctx->device->pipeline_silu_f32;
-                }
-                break;
-            case GGML_UNARY_OP_GELU:
-                if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-                    return ctx->device->pipeline_gelu_f32;
-                }
-                break;
-            case GGML_UNARY_OP_RELU:
-                if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-                    return ctx->device->pipeline_relu_f32;
-                }
-                break;
-            default:
-                break;
-        }
-        return nullptr;
-    case GGML_OP_DIAG_MASK_INF:
-        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_diag_mask_inf_f32;
-        }
-        return nullptr;
-    case GGML_OP_SOFT_MAX:
-        GGML_ASSERT(!src1 || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16);
-
-        if (src0->type == GGML_TYPE_F32 && (src1 == nullptr || src1->type == GGML_TYPE_F32) && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_soft_max_f32;
-        }
-        if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_soft_max_f32_f16;
-        }
-        return nullptr;
-    case GGML_OP_ROPE:
-        {
-            const int mode = ((const int32_t *) dst->op_params)[2];
-            const bool is_neox = mode & 2;
-
-            if (is_neox) {
-                if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-                    return ctx->device->pipeline_rope_neox_f32;
-                }
-                if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) {
-                    return ctx->device->pipeline_rope_neox_f16;
-                }
-            } else {
-                if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-                    return ctx->device->pipeline_rope_norm_f32;
-                }
-                if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) {
-                    return ctx->device->pipeline_rope_norm_f16;
-                }
-            }
-            return nullptr;
-        }
-    case GGML_OP_ARGSORT:
-        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_I32) {
-            return ctx->device->pipeline_argsort_f32;
-        }
-        return nullptr;
-    case GGML_OP_SUM_ROWS:
-        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
-            return ctx->device->pipeline_sum_rows_f32;
-        }
-        return nullptr;
-    default:
-        return nullptr;
-    }
-
-    GGML_UNUSED(src2);
-}
-
-static ggml_vk_func_t ggml_vk_op_get_func(ggml_op op) {
-    switch(op) {
-    case GGML_OP_REPEAT:
-        return ggml_vk_op_repeat;
-    default:
-        return nullptr;
-    }
-}
-
-static bool ggml_vk_op_supports_incontiguous(ggml_op op) {
-    switch (op) {
-    case GGML_OP_CPY:
-    case GGML_OP_GET_ROWS:
-    case GGML_OP_ADD:
-    case GGML_OP_MUL:
-    case GGML_OP_DIV:
-    case GGML_OP_SCALE:
-    case GGML_OP_SQR:
-    case GGML_OP_CLAMP:
-        return true;
-    default:
-        return false;
-    }
-}
-
-template<typename PC>
-static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst, ggml_op op, const PC&& pc) {
-    VK_LOG_DEBUG("ggml_vk_op_f32((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
-    if (src1 != nullptr) {
-        std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
-    }
-    if (src2 != nullptr) {
-        std::cerr << "), (" << src2 << ", name=" << src2->name << ", type=" << src2->type << ", ne0=" << src2->ne[0] << ", ne1=" << src2->ne[1] << ", ne2=" << src2->ne[2] << ", ne3=" << src2->ne[3] << ", nb0=" << src2->nb[0] << ", nb1=" << src2->nb[1] << ", nb2=" << src2->nb[2] << ", nb3=" << src2->nb[3];
-    }
-    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "), " << ggml_op_name(op) << ")");
-    GGML_ASSERT(op == GGML_OP_GET_ROWS || (!ggml_is_quantized(src0->type) && (src1 == nullptr || !ggml_is_quantized(src1->type))));  // NOLINT
-    GGML_ASSERT(ggml_vk_op_supports_incontiguous(op) || ggml_vk_dim01_contiguous(src0));  // NOLINT
-    GGML_ASSERT(dst->extra != nullptr);
-    const uint64_t ne00 = src0->ne[0];
-    const uint64_t ne01 = src0->ne[1];
-    const uint64_t ne02 = src0->ne[2];
-    const uint64_t ne03 = src0->ne[3];
-    const uint64_t ne0 = ne00 * ne01;
-
-    const bool use_src1 = src1 != nullptr;
-    const uint64_t ne10 = use_src1 ? src1->ne[0] : 0;
-    const uint64_t ne11 = use_src1 ? src1->ne[1] : 0;
-    const uint64_t ne12 = use_src1 ? src1->ne[2] : 0;
-    const uint64_t ne13 = use_src1 ? src1->ne[3] : 0;
-    const uint64_t ne1 = ne10 * ne11;
-    // const uint64_t nb10 = use_src1 ? src1->nb[0] : 0;
-
-    const bool use_src2 = src2 != nullptr;
-    const uint64_t ne20 = use_src2 ? src2->ne[0] : 0;
-    const uint64_t ne21 = use_src2 ? src2->ne[1] : 0;
-    const uint64_t ne22 = use_src2 ? src2->ne[2] : 0;
-    const uint64_t ne23 = use_src2 ? src2->ne[3] : 0;
-    const uint64_t ne2 = ne20 * ne21;
-
-    const uint64_t ned0 = dst->ne[0];
-    const uint64_t ned1 = dst->ne[1];
-    const uint64_t ned2 = dst->ne[2];
-    const uint64_t ned3 = dst->ne[3];
-    const uint64_t ned = ned0 * ned1;
-
-    vk_pipeline pipeline = ggml_vk_op_get_pipeline(ctx, src0, src1, src2, dst, op);
-    ggml_vk_func_t op_func;
-
-    if (pipeline == nullptr) {
-        op_func = ggml_vk_op_get_func(op);
-        if (op_func == nullptr) {
-            std::cerr << "ggml_vulkan: Error: Missing op: " << ggml_op_name(op) << " for " << ggml_type_name(src0->type);
-            if (src1 != nullptr) {
-                std::cerr << " and " << ggml_type_name(src1->type);
-            }
-            std::cerr << " to " << ggml_type_name(dst->type) << std::endl;
-            GGML_ASSERT(false);
-        }
-
-        op_func(ctx, subctx, src0, src1, dst);
-        return;
-    }
-
-    const bool op_supports_incontiguous = ggml_vk_op_supports_incontiguous(op);
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
-    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
-    ggml_tensor_extra_gpu * extra_src1 = use_src1 ? (ggml_tensor_extra_gpu *) src1->extra : nullptr;
-    ggml_tensor_extra_gpu * extra_src2 = use_src2 ? (ggml_tensor_extra_gpu *) src2->extra : nullptr;
-
-    vk_buffer d_X = nullptr;
-    size_t x_buf_offset = 0;
-    vk_buffer d_Y = nullptr;
-    size_t y_buf_offset = 0;
-    vk_buffer d_Z = nullptr;
-    size_t z_buf_offset = 0;
-
-    bool src0_uma = false;
-    bool src1_uma = false;
-    bool src2_uma = false;
-
-    if (ctx->device->uma) {
-        ggml_vk_host_get(ctx, src0->data, d_X, x_buf_offset);
-        src0_uma = d_X != nullptr;
-        if (use_src1) {
-            ggml_vk_host_get(ctx, src1->data, d_Y, y_buf_offset);
-            src1_uma = d_Y != nullptr;
-        }
-        if (use_src2) {
-            ggml_vk_host_get(ctx, src2->data, d_Z, z_buf_offset);
-            src2_uma = d_Z != nullptr;
-        }
-    }
-
-    uint64_t x_sz = ggml_type_size(src0->type)/ggml_blck_size(src0->type) * ne0;
-    uint64_t y_sz = use_src1 ? ggml_type_size(src1->type) * ne1 : 0;
-    uint64_t z_sz = use_src2 ? ggml_type_size(src2->type) * ne2 : 0;
-    uint64_t d_sz = ggml_type_size(dst->type) * ned;
-
-    vk_buffer d_D = extra->buffer_gpu.lock();
-
-    // Workaround for tiny tensor inputs on ROPE
-    if (use_src1 && y_sz > d_D->size) {
-        y_sz = VK_WHOLE_SIZE;
-    }
-
-    GGML_ASSERT(d_D != nullptr);
-    uint64_t d_buf_offset = ((extra->offset + dst->view_offs) / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment;
-    GGML_ASSERT(d_buf_offset == extra->offset || op == GGML_OP_CPY);  // NOLINT
-    if(!src0_uma) {
-        d_X = extra_src0->buffer_gpu.lock();
-        x_buf_offset = extra_src0->offset + src0->view_offs;
-        GGML_ASSERT(d_X != nullptr);
-    }
-    if (use_src1 && !src1_uma) {
-        d_Y = extra_src1->buffer_gpu.lock();
-        y_buf_offset = extra_src1->offset + src1->view_offs;
-        GGML_ASSERT(d_Y != nullptr);
-    }
-    if (use_src2 && !src2_uma) {
-        d_Z = extra_src2->buffer_gpu.lock();
-        z_buf_offset = extra_src2->offset + src2->view_offs;
-        GGML_ASSERT(d_Z != nullptr);
-    }
-
-    if (op_supports_incontiguous) {
-        x_sz = ggml_nbytes(src0);
-        y_sz = use_src1 ? ggml_nbytes(src1) : 0;
-        z_sz = use_src2 ? ggml_nbytes(src2) : 0;
-        d_sz = ggml_nbytes(dst);
-
-        if (x_buf_offset + x_sz >= d_X->size) {
-            x_sz = VK_WHOLE_SIZE;
-        }
-        if (use_src1 && y_buf_offset + y_sz >= d_Y->size) {
-            y_sz = VK_WHOLE_SIZE;
-        }
-        if (use_src2 && z_buf_offset + z_sz >= d_Z->size) {
-            z_sz = VK_WHOLE_SIZE;
-        }
-        if (d_buf_offset + d_sz >= d_D->size) {
-            d_sz = VK_WHOLE_SIZE;
-        }
-    }
-
-    std::array<uint32_t, 3> elements;
-
-    // Single call if dimension 2 is contiguous
-    if (op_supports_incontiguous || (ggml_is_contiguous(src0) && (src1 == nullptr || ggml_is_contiguous(src1)))) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, pipeline, 1);
-
-        switch (dst->op) {
-        case GGML_OP_NORM:
-        case GGML_OP_RMS_NORM:
-        case GGML_OP_SOFT_MAX:
-        case GGML_OP_SUM_ROWS:
-            elements = { (uint32_t)ggml_nrows(src0), 1, 1 };
-            break;
-        case GGML_OP_DIAG_MASK_INF:
-        case GGML_OP_ROPE:
-            elements = { (uint32_t)ggml_nrows(src0), (uint32_t)ne00, 1 };
-            break;
-        case GGML_OP_GET_ROWS:
-            elements = { (uint32_t)ne00, (uint32_t)ne10, (uint32_t)(ne11 * ne12) };
-            break;
-        case GGML_OP_ARGSORT:
-            elements = { (uint32_t)ne00, (uint32_t)ggml_nrows(src0), 1 };
-            break;
-        default:
-            elements = { (uint32_t)ggml_nelements(src0), 1, 1 };
-            break;
-        }
-
-        if (!op_supports_incontiguous) {
-            if (x_sz != VK_WHOLE_SIZE) {
-                x_sz *= ne02 * ne03;
-            }
-            if (use_src1 && y_sz != VK_WHOLE_SIZE) {
-                y_sz *= ne12 * ne13;
-            }
-            if (use_src2 && z_sz != VK_WHOLE_SIZE) {
-                z_sz *= ne22 * ne23;
-            }
-            if (d_sz != VK_WHOLE_SIZE) {
-                d_sz *= ned2 * ned3;
-            }
-        }
-
-        if (op == GGML_OP_SOFT_MAX) {
-            // Empty src1 is possible in soft_max, but the shader needs a buffer
-            vk_subbuffer subbuf_y;
-            if (use_src1) {
-                subbuf_y = { d_Y, y_buf_offset, y_sz };
-            } else {
-                subbuf_y = { d_X, 0, d_X->size };
-            }
-
-            ggml_vk_sync_buffers(subctx);
-            ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, subbuf_y, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements);
-        } else if (op == GGML_OP_ROPE) {
-            // Empty src2 is possible in rope, but the shader needs a buffer
-            vk_subbuffer subbuf_z;
-            if (use_src2) {
-                subbuf_z = { d_Z, z_buf_offset, z_sz };
-            } else {
-                subbuf_z = { d_X, 0, d_X->size };
-            }
-
-            ggml_vk_sync_buffers(subctx);
-            ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, { d_Y, y_buf_offset, y_sz }, subbuf_z, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements);
-        } else if (use_src2) {
-            ggml_vk_sync_buffers(subctx);
-            ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, { d_Y, y_buf_offset, y_sz }, { d_Z, z_buf_offset, z_sz }, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements);
-        } else if (use_src1) {
-            ggml_vk_sync_buffers(subctx);
-            ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, { d_Y, y_buf_offset, y_sz }, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements);
-        } else {
-            ggml_vk_sync_buffers(subctx);
-            ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements);
-        }
-    } else {
-        GGML_ASSERT(op != GGML_OP_SOFT_MAX);
-        GGML_ASSERT(op != GGML_OP_ARGSORT);
-        GGML_ASSERT(!use_src2);
-
-        ggml_pipeline_allocate_descriptor_sets(ctx, pipeline, ne02 * ne03);
-
-        switch (dst->op) {
-        case GGML_OP_NORM:
-        case GGML_OP_RMS_NORM:
-            elements = { (uint32_t)ne01, 1, 1 };
-            break;
-        case GGML_OP_DIAG_MASK_INF:
-        case GGML_OP_ROPE:
-            elements = { (uint32_t)ne01, (uint32_t)ne00, 1 };
-            break;
-        case GGML_OP_GET_ROWS:
-            elements = {  (uint32_t)ne00, (uint32_t)ne10, (uint32_t)(ne11 * ne12) };
-            break;
-        default:
-            elements = { (uint32_t)ne0, 1, 1 };
-            break;
-        }
-
-        for (uint64_t i03 = 0; i03 < ne03; i03++) {
-            for (uint64_t i02 = 0; i02 < ne02; i02++) {
-                const uint32_t it_idx0 = (i03 * ne02 + i02);
-                const uint32_t it_idx1 = use_src1 ? ((i03 % ne13) * ne12 + (i02 % ne12)) : 0;
-                const uint32_t x_offset = x_sz * it_idx0;
-                const uint32_t y_offset = y_sz * it_idx1;
-                const uint32_t d_offset = d_sz * it_idx0;
-
-                if (use_src1) {
-                    ggml_vk_sync_buffers(subctx);
-                    ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset + x_offset, x_sz }, { d_Y, y_buf_offset + y_offset, y_sz }, { d_D, d_buf_offset + d_offset, d_sz } }, sizeof(PC), &pc, elements);
-                } else {
-                    ggml_vk_sync_buffers(subctx);
-                    ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset + x_offset, x_sz }, { d_D, d_buf_offset + d_offset, d_sz } }, sizeof(PC), &pc, elements);
-                }
-            }
-        }
-    }
-}
-
-static void ggml_vk_repeat(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    ggml_vk_op_f32<vk_op_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_REPEAT, { (uint32_t)ggml_nelements(src0), (uint32_t)ggml_nelements(src1), 0.0f, 0.0f });
-}
-
-static void ggml_vk_get_rows(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    const uint32_t src0_type_size = ggml_type_size(src0->type);
-    const uint32_t src1_type_size = ggml_type_size(src1->type);
-    const uint32_t dst_type_size = ggml_type_size(dst->type);
-
-    ggml_vk_op_f32<vk_op_binary_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_GET_ROWS, {
-        (uint32_t)ggml_nelements(src0),
-        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
-        (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size,
-        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
-        0,
-        0.0f, 0.0f,
-    });
-}
-
-static void ggml_vk_add(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    const uint32_t src0_type_size = ggml_type_size(src0->type);
-    const uint32_t src1_type_size = ggml_type_size(src1->type);
-    const uint32_t dst_type_size = ggml_type_size(dst->type);
-
-    ggml_vk_op_f32<vk_op_binary_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_ADD, {
-        (uint32_t)ggml_nelements(src0),
-        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
-        (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size,
-        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
-        0,
-        0.0f, 0.0f,
-    });
-}
-
-static void ggml_vk_mul(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    const uint32_t src0_type_size = ggml_type_size(src0->type);
-    const uint32_t src1_type_size = ggml_type_size(src1->type);
-    const uint32_t dst_type_size = ggml_type_size(dst->type);
-
-    ggml_vk_op_f32<vk_op_binary_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_MUL, {
-        (uint32_t)ggml_nelements(src0),
-        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
-        (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size,
-        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
-        0,
-        0.0f, 0.0f,
-    });
-}
-
-static void ggml_vk_div(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    const uint32_t src0_type_size = ggml_type_size(src0->type);
-    const uint32_t src1_type_size = ggml_type_size(src1->type);
-    const uint32_t dst_type_size = ggml_type_size(dst->type);
-
-    ggml_vk_op_f32<vk_op_binary_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_DIV, {
-        (uint32_t)ggml_nelements(src0),
-        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
-        (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size,
-        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
-        0,
-        0.0f, 0.0f,
-    });
-}
-
-static void ggml_vk_scale(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
-    float * op_params = (float *)dst->op_params;
-    const uint32_t src0_type_size = ggml_type_size(src0->type);
-    const uint32_t dst_type_size = ggml_type_size(dst->type);
-
-    ggml_vk_op_f32<vk_op_unary_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SCALE, {
-        (uint32_t)ggml_nelements(src0),
-        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
-        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
-        0,
-        op_params[0], 0.0f
-    });
-}
-
-static void ggml_vk_sqr(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
-    const uint32_t src0_type_size = ggml_type_size(src0->type);
-    const uint32_t dst_type_size = ggml_type_size(dst->type);
-
-    ggml_vk_op_f32<vk_op_unary_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SQR, {
-        (uint32_t)ggml_nelements(src0),
-        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
-        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
-        0,
-        0.0f, 0.0f,
-    });
-}
-
-static void ggml_vk_clamp(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
-    float * op_params = (float *)dst->op_params;
-    const uint32_t src0_type_size = ggml_type_size(src0->type);
-    const uint32_t dst_type_size = ggml_type_size(dst->type);
-
-    ggml_vk_op_f32<vk_op_unary_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_CLAMP, {
-        (uint32_t)ggml_nelements(src0),
-        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
-        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
-        0,
-        op_params[0], op_params[1],
-    });
-}
-
-static void ggml_vk_cpy(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
-    const uint32_t src0_type_size = ggml_type_size(src0->type);
-    const uint32_t dst_type_size = ggml_type_size(dst->type);
-    const uint32_t d_offset = ((extra->offset + dst->view_offs) % ctx->device->properties.limits.minStorageBufferOffsetAlignment) / dst_type_size;
-
-    ggml_vk_op_f32<vk_op_unary_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_CPY, {
-        (uint32_t)ggml_nelements(src0),
-        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
-        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
-        d_offset,
-        0.0f, 0.0f,
-    });
-}
-
-static void ggml_vk_norm(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
-    float * op_params = (float *)dst->op_params;
-
-    ggml_vk_op_f32<vk_op_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_NORM, { (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], op_params[0], 0.0f });
-}
-
-static void ggml_vk_rms_norm(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
-    float * op_params = (float *)dst->op_params;
-    ggml_vk_op_f32<vk_op_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_RMS_NORM, { (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], op_params[0], 0.0f });
-}
-
-static void ggml_vk_unary(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
-    ggml_vk_op_f32<vk_op_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_UNARY, { (uint32_t)ggml_nelements(src0), 0, 0.0f, 0.0f });
-}
-
-static void ggml_vk_diag_mask_inf(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
-    int32_t * op_params = (int32_t *)dst->op_params;
-    ggml_vk_op_f32<vk_op_diag_mask_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_DIAG_MASK_INF, { (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], op_params[0] });
-}
-
-static void ggml_vk_soft_max(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
-    float * op_params = (float *)dst->op_params;
-
-    float scale = op_params[0];
-    float max_bias = op_params[1];
-
-    const uint32_t ncols =   (uint32_t)src0->ne[0];
-    const uint32_t nrows_x = (uint32_t)ggml_nrows(src0);
-    const uint32_t nrows_y = (uint32_t)src0->ne[1];
-
-    const uint32_t n_head_kv   = nrows_x/nrows_y;
-    const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head_kv));
-
-    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
-    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
-
-    ggml_vk_op_f32<vk_op_soft_max_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_SOFT_MAX, {
-        ncols,
-        src1 != nullptr ? nrows_y : (uint32_t)0,
-        scale, max_bias,
-        m0, m1,
-        n_head_log2,
-    });
-}
-
-static void ggml_vk_rope(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst) {
-    const int n_dims        = ((int32_t *) dst->op_params)[1];
-    // const int mode          = ((int32_t *) dst->op_params)[2];
-    // const int n_ctx         = ((int32_t *) dst->op_params)[3];
-    const int n_ctx_orig    = ((int32_t *) dst->op_params)[4];
-    const float freq_base   = ((float *)   dst->op_params)[5];
-    const float freq_scale  = ((float *)   dst->op_params)[6];
-    const float ext_factor  = ((float *)   dst->op_params)[7];
-    const float attn_factor = ((float *)   dst->op_params)[8];
-    const float beta_fast   = ((float *)   dst->op_params)[9];
-    const float beta_slow   = ((float *)   dst->op_params)[10];
-
-    float corr_dims[2];
-    ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);
-
-    const float theta_scale = powf(freq_base, -2.0f/n_dims);
-
-    ggml_vk_op_f32<vk_op_rope_push_constants>(ctx, subctx, src0, src1, src2, dst, GGML_OP_ROPE, {
-        (uint32_t)src0->ne[0], (uint32_t)n_dims, freq_scale, (uint32_t)src0->ne[1],
-        freq_base, ext_factor, attn_factor, {corr_dims[0], corr_dims[1]}, theta_scale,
-        src2 != nullptr,
-    });
-}
-
-static void ggml_vk_argsort(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
-    int32_t * op_params = (int32_t *)dst->op_params;
-
-    uint32_t ncols = src0->ne[0];
-
-    uint32_t ncols_pad = 1;
-    while (ncols_pad < ncols) {
-        ncols_pad *= 2;
-    }
-
-    GGML_ASSERT(ncols_pad <= 1024);
-
-    ggml_vk_op_f32<vk_op_argsort_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_ARGSORT, {
-        ncols,
-        ncols_pad,
-        op_params[0],
-    });
-}
-
-static void ggml_vk_sum_rows(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
-    ggml_vk_op_f32<vk_op_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SUM_ROWS, { (uint32_t)src0->ne[0], 0, 0.0f, 0.0f });
-}
-
-#ifdef GGML_VULKAN_RUN_TESTS
-static void ggml_vk_print_matrix_area(const void * data, ggml_type type, int ne0, int ne1, int i0, int i1, int i2) {
-    if (type != GGML_TYPE_F32 && type != GGML_TYPE_F16) {
-        return;
-    }
-    i0 = std::max(i0, 5);
-    i1 = std::max(i1, 5);
-    i2 = std::max(i2, 0);
-    fprintf(stderr, "         ");
-    for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
-        fprintf(stderr, "%7d ", idx1);
-    }
-    fprintf(stderr, "\n");
-    for (int idx0 = i0 - 5; idx0 < i0 + 5; idx0++) {
-        fprintf(stderr, "%7d: ", idx0);
-        for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
-            if (idx0 >= 0 && idx0 < ne0 && idx1 >= 0 && idx1 < ne1) {
-                float val;
-                if (type == GGML_TYPE_F32) {
-                    val = *((const float *) data + i2*ne1*ne0 + idx1*ne0 + idx0);
-                } else if (type == GGML_TYPE_F16) {
-                    val = ggml_fp16_to_fp32(*((const ggml_fp16_t *) data + i2*ne1*ne0 + idx1*ne0 + idx0));
-                } else {
-                    GGML_ASSERT(false);
-                }
-                fprintf(stderr, "% 7.2f ", val);
-            } else {
-                fprintf(stderr, "        ");
-            }
-        }
-        fprintf(stderr, "\n");
-    }
-}
-
-template <typename X_TYPE, typename Y_TYPE>
-static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t n, size_t k, size_t batch, size_t num_it, int split_k, int shader_size) {
-    VK_LOG_DEBUG("ggml_vk_test_matmul(" << m << ", " << n << ", " << k << ", " << batch << ", " << num_it << ", " << split_k << ", " << shader_size << ")");
-    const size_t x_ne = m * k * batch;
-    const size_t y_ne = k * n * batch;
-    const size_t d_ne = m * n * batch;
-
-    vk_pipeline p;
-    std::string shname;
-    if (shader_size == 0) {
-        if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f32->a_s;
-            shname = "F32_ALIGNED_S";
-        } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f32_f16->a_s;
-            shname = "F32_F16_ALIGNED_S";
-        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f16_f32->a_s;
-            shname = "F16_F32_ALIGNED_S";
-        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f16->a_s;
-            shname = "F16_ALIGNED_S";
-        } else {
-            GGML_ASSERT(false);
-        }
-    } else if (shader_size == 1) {
-        if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f32->a_m;
-            shname = "F32_ALIGNED_M";
-        } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f32_f16->a_m;
-            shname = "F32_F16_ALIGNED_M";
-        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f16_f32->a_m;
-            shname = "F16_F32_ALIGNED_M";
-        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f16->a_m;
-            shname = "F16_ALIGNED_M";
-        } else {
-            GGML_ASSERT(false);
-        }
-    } else if (shader_size == 2) {
-        if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f32->a_l;
-            shname = "F32_ALIGNED_L";
-        } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f32_f16->a_l;
-            shname = "F32_F16_ALIGNED_L";
-        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f16_f32->a_l;
-            shname = "F16_F32_ALIGNED_L";
-        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-            p = ctx->device->pipeline_matmul_f16->a_l;
-            shname = "F16_ALIGNED_L";
-        } else {
-            GGML_ASSERT(false);
-        }
-    } else {
-        GGML_ASSERT(0);
-    }
-
-    const size_t kpad = ggml_vk_align_size(k, p->align);
-
-    if (k != kpad) {
-        if (shader_size == 0) {
-            if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f32->s;
-                shname = "F32_S";
-            } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f32_f16->s;
-                shname = "F32_F16_S";
-            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f16_f32->s;
-                shname = "F16_F32_S";
-            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f16->s;
-                shname = "F16_S";
-            }
-        } else if (shader_size == 1) {
-            if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f32->m;
-                shname = "F32_M";
-            } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f32_f16->m;
-                shname = "F32_F16_M";
-            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f16_f32->m;
-                shname = "F16_F32_M";
-            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f16->m;
-                shname = "F16_M";
-            }
-        } else if (shader_size == 2) {
-            if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f32->l;
-                shname = "F32_L";
-            } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f32_f16->l;
-                shname = "F32_F16_L";
-            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f16_f32->l;
-                shname = "F16_F32_L";
-            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
-                p = ctx->device->pipeline_matmul_f16->l;
-                shname = "F16_L";
-            }
-        }
-    }
-
-    ggml_pipeline_allocate_descriptor_sets(ctx, p, num_it);
-    if (split_k > 1) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, num_it);
-
-        if (ctx->prealloc_split_k == nullptr || ctx->prealloc_split_k->size < sizeof(float) * d_ne * split_k) {
-            // Resize buffer
-            if (ctx->prealloc_split_k != nullptr) {
-                ggml_vk_destroy_buffer(ctx->prealloc_split_k);
-            }
-            ctx->prealloc_split_k = ggml_vk_create_buffer_check(ctx, sizeof(float) * d_ne * split_k, vk::MemoryPropertyFlagBits::eDeviceLocal);
-        }
-    }
-
-    vk_buffer d_X = ggml_vk_create_buffer_check(ctx, sizeof(X_TYPE) * x_ne, vk::MemoryPropertyFlagBits::eDeviceLocal);
-    vk_buffer d_Y = ggml_vk_create_buffer_check(ctx, sizeof(Y_TYPE) * y_ne, vk::MemoryPropertyFlagBits::eDeviceLocal);
-    vk_buffer d_D = ggml_vk_create_buffer_check(ctx, sizeof(float) * d_ne, vk::MemoryPropertyFlagBits::eDeviceLocal);
-
-    X_TYPE* x = (X_TYPE *) malloc(sizeof(X_TYPE) * x_ne);
-    Y_TYPE* y = (Y_TYPE *) malloc(sizeof(Y_TYPE) * y_ne);
-    float* d = (float *) malloc(sizeof(float) * d_ne);
-
-    for (size_t i = 0; i < x_ne; i++) {
-        if (std::is_same<float, X_TYPE>()) {
-            x[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f;
-        } else if (std::is_same<ggml_fp16_t, X_TYPE>()) {
-            x[i] = ggml_fp32_to_fp16((rand() / (float)RAND_MAX) * 2.0f - 1.0f);
-        } else {
-            GGML_ASSERT(false);
-        }
-    }
-    for (size_t i = 0; i < y_ne; i++) {
-        if (std::is_same<float, Y_TYPE>()) {
-            // y[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f;
-            y[i] = (i % k == i / k) ? 1.0f : 0.0f;
-        } else if (std::is_same<ggml_fp16_t, Y_TYPE>()) {
-            // y[i] = ggml_fp32_to_fp16((rand() / (float)RAND_MAX) * 2.0f - 1.0f);
-            y[i] = ggml_fp32_to_fp16((i % k == i / k) ? 1.0f : 0.0f);
-        } else {
-            GGML_ASSERT(false);
-        }
-    }
-
-    ggml_vk_buffer_write(ctx, d_X, 0, x, sizeof(X_TYPE) * k * m * batch);
-    ggml_vk_buffer_write(ctx, d_Y, 0, y, sizeof(Y_TYPE) * k * n * batch);
-
-    vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
-    for (size_t i = 0; i < num_it; i++) {
-        ggml_vk_ctx_begin(ctx, subctx);
-        ggml_vk_matmul(
-            ctx, subctx, p, ggml_vk_subbuffer(d_X), ggml_vk_subbuffer(d_Y), ggml_vk_subbuffer(d_D), ggml_vk_subbuffer(ctx->prealloc_split_k),
-            m, n, k,
-            k, k, m, k*m, k*n, m*n,
-            split_k, batch, batch, batch, 1, 1
-        );
-        ggml_vk_ctx_end(subctx);
-    }
-
-    auto begin = std::chrono::high_resolution_clock::now();
-    ggml_vk_submit(subctx, ctx->fence);
-    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_matmul waitForFences");
-    ctx->device->device.resetFences({ ctx->fence });
-
-    auto end = std::chrono::high_resolution_clock::now();
-    double time = std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() / 1000.0;
-
-    // copy dst to host
-    ggml_vk_buffer_read(ctx, d_D, 0, d, sizeof(float) * d_ne);
-
-    float * d_chk = (float *) malloc(sizeof(float) * d_ne);
-
-    ggml_init_params iparams = {
-        /*.mem_size   =*/ 1024*1024*1024,
-        /*.mem_buffer =*/ NULL,
-        /*.no_alloc   =*/ true,
-    };
-
-    ggml_context * ggml_ctx = ggml_init(iparams);
-
-    ggml_type src0_type;
-    ggml_type src1_type;
-
-    if (std::is_same<float, X_TYPE>()) {
-        src0_type = GGML_TYPE_F32;
-    } else if (std::is_same<ggml_fp16_t, X_TYPE>()) {
-        src0_type = GGML_TYPE_F16;
-    } else {
-        GGML_ASSERT(false);
-    }
-    if (std::is_same<float, Y_TYPE>()) {
-        src1_type = GGML_TYPE_F32;
-    } else if (std::is_same<ggml_fp16_t, Y_TYPE>()) {
-        src1_type = GGML_TYPE_F16;
-    } else {
-        GGML_ASSERT(false);
-    }
-
-    ggml_tensor * src0_ggml = ggml_new_tensor_3d(ggml_ctx, src0_type, k, m, batch);
-    ggml_tensor * src1_ggml = ggml_new_tensor_3d(ggml_ctx, src1_type, k, n, batch);
-    ggml_tensor * tensor_ggml = ggml_mul_mat(ggml_ctx, src0_ggml, src1_ggml);
-
-    src0_ggml->data = x;
-    src1_ggml->data = y;
-    tensor_ggml->data = d_chk;
-
-    ggml_cgraph * cgraph = ggml_new_graph(ggml_ctx);
-    ggml_build_forward_expand(cgraph, tensor_ggml);
-
-    ggml_graph_compute_with_ctx(ggml_ctx, cgraph, 1);
-
-    ggml_free(ggml_ctx);
-
-    double avg_err = 0.0;
-    int first_err_n = -1;
-    int first_err_m = -1;
-    int first_err_b = -1;
-
-    for (size_t i = 0; i < m*n*batch; i++) {
-        double err = std::fabs(d[i] - d_chk[i]);
-        avg_err += err;
-
-        if (err > 0.05f && first_err_n == -1) {
-            first_err_b = i / (m * n);
-            first_err_n = (i % (m * n)) / m;
-            first_err_m = (i % (m * n)) % m;
-        }
-    }
-
-    avg_err /= m * n;
-
-    std::cerr << "TEST " << shname << " m=" << m << " n=" << n << " k=" << k << " batch=" << batch << " split_k=" << split_k << " matmul " << time / num_it << "ms avg_err=" << avg_err << std::endl;
-
-    if (avg_err > 0.1) {
-        std::cerr << "m = " << first_err_m << " n = " << first_err_n << " b = " << first_err_b << std::endl;
-        std::cerr << "Actual result: " << std::endl << std::endl;
-        ggml_vk_print_matrix_area(d, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-        std::cerr << std::endl;
-        ggml_vk_print_matrix_area(d, GGML_TYPE_F32, m, n, first_err_m, first_err_n + 15, first_err_b);
-        std::cerr << "Expected result: " << std::endl << std::endl;
-        ggml_vk_print_matrix_area(d_chk, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-
-        if (split_k > 1) {
-            float * split_k_buf = (float *) malloc(sizeof(float) * d_ne * split_k);
-            ggml_vk_buffer_read(ctx, ctx->prealloc_split_k, 0, split_k_buf, sizeof(float) * d_ne * split_k);
-
-            std::cerr << "d_buf0: " << std::endl << std::endl;
-            ggml_vk_print_matrix_area(split_k_buf, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-
-            std::cerr << "d_buf1: " << std::endl << std::endl;
-            ggml_vk_print_matrix_area(split_k_buf + d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-
-            std::cerr << "d_buf2: " << std::endl << std::endl;
-            ggml_vk_print_matrix_area(split_k_buf + 2 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-
-            std::cerr << "d_buf3: " << std::endl << std::endl;
-            ggml_vk_print_matrix_area(split_k_buf + 3 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-
-            free(split_k_buf);
-        }
-    }
-
-    free(d_chk);
-
-    ggml_vk_queue_cleanup(ctx, ctx->device->transfer_queue);
-    ggml_vk_queue_cleanup(ctx, ctx->device->compute_queue);
-
-    ggml_vk_destroy_buffer(d_X);
-    ggml_vk_destroy_buffer(d_Y);
-    ggml_vk_destroy_buffer(d_D);
-
-    ggml_pipeline_cleanup(p);
-    ggml_pipeline_cleanup(ctx->device->pipeline_matmul_split_k_reduce);
-
-    free(x);
-    free(y);
-    free(d);
-}
-
-static void ggml_vk_print_tensor_area(const ggml_tensor * tensor, int i0, int i1, int i2, int i3) {
-    if (tensor->type != GGML_TYPE_F32 && tensor->type != GGML_TYPE_F16) {
-        return;
-    }
-    i0 = std::max(i0, 5);
-    i1 = std::max(i1, 5);
-    i2 = std::max(i2, 0);
-    i3 = std::max(i3, 0);
-    fprintf(stderr, "         ");
-    for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
-        fprintf(stderr, "%7d ", idx1);
-    }
-    fprintf(stderr, "\n");
-    for (int idx0 = i0 - 5; idx0 < i0 + 5; idx0++) {
-        fprintf(stderr, "%7d: ", idx0);
-        for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
-            if (idx0 >= 0 && idx0 < tensor->ne[0] && idx1 >= 0 && idx1 < tensor->ne[1] && i2 >= 0 && i2 < tensor->ne[2] && i3 >= 0 && i3 < tensor->ne[3]) {
-                float val;
-                if (tensor->type == GGML_TYPE_F32) {
-                    val = *(float *) ((char *) tensor->data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]);
-                } else if (tensor->type == GGML_TYPE_F16) {
-                    val = ggml_fp16_to_fp32(*(ggml_fp16_t *) ((char *) tensor->data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]));
-                } else {
-                    GGML_ASSERT(false);
-                }
-                fprintf(stderr, "% 7.2f ", val);
-            } else {
-                fprintf(stderr, "        ");
-            }
-        }
-        fprintf(stderr, "\n");
-    }
-}
-
-static void ggml_vk_test_h2d_nc(ggml_backend_vk_context * ctx, size_t ne0, size_t ne1, size_t ne2, size_t ne3) {
-    const size_t ne = ne0 * ne1 * ne2 * ne3;
-
-    ggml_init_params iparams = {
-        /*.mem_size   =*/ 1024*1024*1024,
-        /*.mem_buffer =*/ NULL,
-        /*.no_alloc   =*/ true,
-    };
-
-    ggml_context * ggml_ctx = ggml_init(iparams);
-
-    ggml_tensor * tensor = ggml_new_tensor_4d(ggml_ctx, GGML_TYPE_F32, ne0, ne2, ne1, ne3);  // NOLINT
-    ggml_tensor * result_tensor = ggml_new_tensor_4d(ggml_ctx, GGML_TYPE_F32, ne0, ne1, ne2, ne3);
-
-    float * data = (float *) ggml_vk_host_malloc(ctx, ggml_nbytes(tensor));
-    tensor->data = data;
-
-    float * result_data = (float *) malloc(ggml_nbytes(tensor));
-    result_tensor->data = result_data;
-
-    // Permute
-    {
-        size_t tmp = tensor->nb[2];
-        tensor->nb[2] = tensor->nb[1];
-        tensor->nb[1] = tmp;
-
-        tensor->ne[2] = ne2;
-        tensor->ne[1] = ne1;
-    }
-
-    for (size_t i = 0; i < ne; i++) {
-        data[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f;
-    }
-
-    vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
-    ggml_vk_ctx_begin(ctx, subctx);
-
-    vk_buffer buffer = ggml_vk_create_buffer_check(ctx, ggml_nbytes(tensor), vk::MemoryPropertyFlagBits::eDeviceLocal);
-
-    ggml_vk_h2d_tensor_2d(ctx, subctx, buffer, 0, tensor, 0, 0, ggml_nrows(tensor));
-
-    ggml_vk_ctx_end(subctx);
-    ggml_vk_submit(subctx, ctx->fence);
-    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_h2d_nc waitForFences");
-    ctx->device->device.resetFences({ ctx->fence });
-
-    ggml_vk_buffer_read(ctx, buffer, 0, result_data, ggml_nbytes(tensor));
-
-    double avg_err = 0.0;
-    int first_err_i0 = -1;
-    int first_err_i1 = -1;
-    int first_err_i2 = -1;
-    int first_err_i3 = -1;
-
-    for (size_t i3 = 0; i3 < ne3; i3++) {
-        for (size_t i2 = 0; i2 < ne2; i2++) {
-            for (size_t i1 = 0; i1 < ne1; i1++) {
-                for (size_t i0 = 0; i0 < ne0; i0++) {
-                    float correct = *(float *) ((char *) data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0]);
-                    float result = *(float *) ((char *) result_data + i3*ne2*ne1*ne0*sizeof(float) + i2*ne1*ne0*sizeof(float) + i1*ne0*sizeof(float) + i0*sizeof(float));
-                    double err = std::fabs(result - correct);
-
-                    avg_err += err;
-
-                    if (err > 0.05f && first_err_i0 == -1) {
-                        first_err_i0 = i0;
-                        first_err_i1 = i1;
-                        first_err_i2 = i2;
-                        first_err_i3 = i3;
-                    }
-                }
-            }
-        }
-    }
-
-    avg_err /= ne;
-
-    std::cerr << "TEST nc copy ne0=" << ne0 << " ne1=" << ne1 << " ne2=" << ne2 << " ne3=" << ne3 << " avg_err=" << avg_err << std::endl;
-
-    if (avg_err > 0.1) {
-        std::cerr << "i0 = " << first_err_i0 << " i1 = " << first_err_i1 << " i2 = " << first_err_i2 << " i3 = " << first_err_i3 << std::endl;
-        std::cerr << "Actual result: " << std::endl << std::endl;
-        ggml_vk_print_tensor_area(result_tensor, first_err_i0, first_err_i1, first_err_i2, first_err_i3);
-        std::cerr << "Expected result: " << std::endl << std::endl;
-        ggml_vk_print_tensor_area(tensor, first_err_i0, first_err_i1, first_err_i2, first_err_i3);
-    }
-
-    ggml_free(ggml_ctx);
-
-    ggml_vk_destroy_buffer(buffer);
-
-    ggml_vk_host_free(ctx, data);
-    free(result_data);
-}
-
-static void ggml_vk_test_transfer(ggml_backend_vk_context * ctx, size_t ne, bool pinned) {
-    VK_LOG_DEBUG("ggml_vk_test_transfer(" << ne << ")");
-    // Check transfers are correct
-    vk_buffer buffer = ggml_vk_create_buffer_check(ctx, sizeof(float) * ne, vk::MemoryPropertyFlagBits::eDeviceLocal);
-
-    float * x;
-    float * y;
-    if (pinned) {
-        x = (float *) ggml_vk_host_malloc(ctx, sizeof(float) * ne);
-        y = (float *) ggml_vk_host_malloc(ctx, sizeof(float) * ne);
-    } else {
-        x = (float *) malloc(sizeof(float) * ne);
-        y = (float *) malloc(sizeof(float) * ne);
-    }
-
-    for (size_t i = 0; i < ne; i++) {
-        x[i] = rand() / (float)RAND_MAX;
-    }
-
-    vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
-    ggml_vk_ctx_begin(ctx, subctx);
-
-    auto begin = std::chrono::high_resolution_clock::now();
-
-    ggml_vk_buffer_write_async(ctx, subctx, buffer, 0, x, sizeof(float) * ne);
-
-    for (auto& cpy : subctx->in_memcpys) {
-        memcpy(cpy.dst, cpy.src, cpy.n);
-    }
-    subctx->in_memcpys.clear();
-
-    ggml_vk_ctx_end(subctx);
-    ggml_vk_submit(subctx, ctx->fence);
-    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_transfer waitForFences");
-    ctx->device->device.resetFences({ ctx->fence });
-
-    auto end = std::chrono::high_resolution_clock::now();
-
-    double ms_to_gpu = std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() / 1000.0;
-
-    ggml_vk_ctx_begin(ctx, subctx);
-
-    begin = std::chrono::high_resolution_clock::now();
-
-    ggml_vk_buffer_read_async(ctx, subctx, buffer, 0, y, sizeof(float) * ne);
-
-    ggml_vk_ctx_end(subctx);
-    ggml_vk_submit(subctx, ctx->fence);
-    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_transfer waitForFences");
-    ctx->device->device.resetFences({ ctx->fence });
-
-    for (auto& cpy : subctx->out_memcpys) {
-        memcpy(cpy.dst, cpy.src, cpy.n);
-    }
-    subctx->out_memcpys.clear();
-
-    end = std::chrono::high_resolution_clock::now();
-
-    double ms_from_gpu = std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() / 1000.0;
-
-    double avg_err = 0.0;
-    for (size_t i = 0; i < ne; i++) {
-        avg_err += std::fabs(x[i] - y[i]);
-    }
-
-    double kb = ne * sizeof(float) / 1024.0;
-
-    std::cerr << "TEST TRANSFER " << kb << " KB to_gpu " << ms_to_gpu << "ms (" << kb / ms_to_gpu * 1000.0 / 1024.0 << " MB/s) from_gpu " << ms_from_gpu << "ms (" << kb / ms_from_gpu * 1000.0 / 1024.0 << " MB/s) avg_err=" << avg_err / ne << std::endl;
-
-    ggml_vk_destroy_buffer(buffer);
-
-    if (pinned) {
-        ggml_vk_host_free(ctx, x);
-        ggml_vk_host_free(ctx, y);
-    } else {
-        free(x);
-        free(y);
-    }
-}
-
-static void ggml_vk_quantize_data(const float * from, void * to, size_t ne, ggml_type quant) {
-    ggml_quantize_chunk(quant, from, to, 0, 1, ne, nullptr);
-}
-
-static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_type quant) {
-    VK_LOG_DEBUG("ggml_vk_test_dequant(" << ne << ")");
-    const size_t x_sz = sizeof(float) * ne;
-    const size_t x_sz_f16 = sizeof(ggml_fp16_t) * ne;
-    const size_t qx_sz = ne * ggml_type_size(quant)/ggml_blck_size(quant);
-    float * x = (float *) malloc(x_sz);
-    void * qx = malloc(qx_sz);
-    vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx, qx_sz, vk::MemoryPropertyFlagBits::eDeviceLocal);
-    vk_buffer x_buf = ggml_vk_create_buffer_check(ctx, x_sz_f16, vk::MemoryPropertyFlagBits::eDeviceLocal);
-    ggml_fp16_t * x_chk = (ggml_fp16_t *) malloc(x_sz_f16);
-
-    for (size_t i = 0; i < ne; i++) {
-        x[i] = rand() / (float)RAND_MAX;
-    }
-
-    vk_pipeline p = ctx->device->pipeline_dequant[quant];
-
-    ggml_vk_quantize_data(x, qx, ne, quant);
-
-    ggml_pipeline_allocate_descriptor_sets(ctx, p, 1);
-
-    ggml_vk_buffer_write(ctx, qx_buf, 0, qx, qx_sz);
-
-    vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
-    ggml_vk_ctx_begin(ctx, subctx);
-    const std::vector<uint32_t> pc = { 1, (uint32_t)ne, (uint32_t)ne, (uint32_t)ne, (uint32_t)ne };
-    ggml_vk_dispatch_pipeline(ctx, subctx, p, { { qx_buf, 0, qx_sz }, { x_buf, 0, x_sz_f16 } }, pc.size() * sizeof(int), pc.data(), { (uint32_t)ne, 1, 1});
-    ggml_vk_ctx_end(subctx);
-
-    auto begin = std::chrono::high_resolution_clock::now();
-
-    ggml_vk_submit(subctx, ctx->fence);
-    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_dequant waitForFences");
-    ctx->device->device.resetFences({ ctx->fence });
-
-    auto end = std::chrono::high_resolution_clock::now();
-
-    double ms_dequant = std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() / 1000.0;
-    ggml_vk_buffer_read(ctx, x_buf, 0, x_chk, x_sz_f16);
-
-    int first_err = -1;
-
-    double avg_err = 0.0;
-    for (size_t i = 0; i < ne; i++) {
-        double error = std::fabs(x[i] - ggml_fp16_to_fp32(x_chk[i]));
-        avg_err += error;
-
-        if (first_err < 0 && error > 0.05) {
-            first_err = i;
-        }
-    }
-
-    avg_err /= ne;
-
-    std::cerr << "TEST DEQUANT " << ggml_type_name(quant) << " time=" << ms_dequant << "ms avg_err=" << avg_err << std::endl;
-
-    if (avg_err > 0.1) {
-        std::cerr << "first_error = " << first_err << std::endl;
-        std::cerr << "Actual result: " << std::endl << std::endl;
-        for (int i = std::max(0, first_err - 5); i < std::min((int)ne, first_err + 5); i++) {
-            std::cerr << ggml_fp16_to_fp32(x_chk[i]) << ", ";
-        }
-        std::cerr << std::endl << "Expected result: " << std::endl << std::endl;
-        for (int i = std::max(0, first_err - 5); i < std::min((int)ne, first_err + 5); i++) {
-            std::cerr << x[i] << ", ";
-        }
-        std::cerr << std::endl;
-    }
-
-    ggml_vk_destroy_buffer(x_buf);
-    ggml_vk_destroy_buffer(qx_buf);
-
-    free(x);
-    free(qx);
-    free(x_chk);
-}
-
-static void ggml_vk_test_dequant_matmul(ggml_backend_vk_context * ctx, size_t m, size_t n, size_t k, size_t batch, size_t num_it, size_t split_k, size_t shader_size, ggml_type quant) {
-    VK_LOG_DEBUG("ggml_vk_test_dequant_matmul(" << m << ", " << n << ", " << k << ", " << batch << ", " << num_it << ", " << split_k << ", " << ggml_type_name(quant) << ")");
-    const size_t x_ne = m * k * batch;
-    const size_t y_ne = k * n * batch;
-    const size_t d_ne = m * n * batch;
-
-    vk_pipeline p;
-    std::string shname;
-    if (shader_size == 0) {
-        p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->a_s;
-        shname = std::string(ggml_type_name(quant)) + "_ALIGNED_S";
-    } else if (shader_size == 1) {
-        p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->a_m;
-        shname = std::string(ggml_type_name(quant)) + "_ALIGNED_M";
-    } else if (shader_size == 2) {
-        p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->a_l;
-        shname = std::string(ggml_type_name(quant)) + "_ALIGNED_L";
-    } else {
-        GGML_ASSERT(0);
-    }
-
-    const size_t kpad = ggml_vk_align_size(k, p->align);
-
-    if (k != kpad) {
-        if (shader_size == 0) {
-            p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->s;
-            shname = std::string(ggml_type_name(quant)) + "_S";
-        } else if (shader_size == 1) {
-            p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->m;
-            shname = std::string(ggml_type_name(quant)) + "_M";
-        } else if (shader_size == 2) {
-            p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->l;
-            shname = std::string(ggml_type_name(quant)) + "_L";
-        } else {
-            GGML_ASSERT(0);
-        }
-    }
-
-    const size_t x_sz = sizeof(float) * x_ne;
-    const size_t y_sz = sizeof(float) * y_ne;
-    const size_t qx_sz = x_ne * ggml_type_size(quant)/ggml_blck_size(quant);
-    const size_t d_sz = sizeof(float) * d_ne;
-    float * x = (float *) malloc(x_sz);
-    float * y = (float *) malloc(y_sz);
-    void * qx = malloc(qx_sz);
-    vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx, qx_sz, vk::MemoryPropertyFlagBits::eDeviceLocal);
-    vk_buffer y_buf = ggml_vk_create_buffer_check(ctx, y_sz, vk::MemoryPropertyFlagBits::eDeviceLocal);
-    vk_buffer d_buf = ggml_vk_create_buffer_check(ctx, d_sz, vk::MemoryPropertyFlagBits::eDeviceLocal);
-    float * d = (float *) malloc(d_sz);
-    float * d_chk = (float *) malloc(d_sz);
-
-    for (size_t i = 0; i < x_ne; i++) {
-        x[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f;
-    }
-
-    ggml_vk_quantize_data(x, qx, x_ne, quant);
-
-    for (size_t i = 0; i < y_ne; i++) {
-        // y[i] = rand() / (float)RAND_MAX;
-        y[i] = (i % k == i / k) ? 1.0f : 0.0f;
-    }
-
-    ggml_pipeline_allocate_descriptor_sets(ctx, p, num_it);
-    if (split_k > 1) {
-        ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, num_it);
-
-        if (ctx->prealloc_split_k == nullptr || ctx->prealloc_split_k->size < sizeof(float) * d_ne * split_k) {
-            // Resize buffer
-            if (ctx->prealloc_split_k != nullptr) {
-                ggml_vk_destroy_buffer(ctx->prealloc_split_k);
-            }
-            ctx->prealloc_split_k = ggml_vk_create_buffer_check(ctx, sizeof(float) * d_ne * split_k, vk::MemoryPropertyFlagBits::eDeviceLocal);
-        }
-    }
-
-    ggml_vk_buffer_write(ctx, qx_buf, 0, qx, qx_sz);
-    ggml_vk_buffer_write(ctx, y_buf, 0, y, y_sz);
-
-    vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
-    for (size_t i = 0; i < num_it; i++) {
-        ggml_vk_ctx_begin(ctx, subctx);
-        ggml_vk_matmul(
-            ctx, subctx, p, ggml_vk_subbuffer(qx_buf), ggml_vk_subbuffer(y_buf), ggml_vk_subbuffer(d_buf), ggml_vk_subbuffer(ctx->prealloc_split_k),
-            m, n, k,
-            k, k, m, k*m, k*n, m*n,
-            split_k, batch, batch, batch, 1, 1
-        );
-        ggml_vk_ctx_end(subctx);
-    }
-
-    auto begin = std::chrono::high_resolution_clock::now();
-
-    ggml_vk_submit(subctx, ctx->fence);
-    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_dequant waitForFences");
-    ctx->device->device.resetFences({ ctx->fence });
-
-    auto end = std::chrono::high_resolution_clock::now();
-
-    double time_ms = std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() / 1000.0;
-    ggml_vk_buffer_read(ctx, d_buf, 0, d, d_sz);
-
-    ggml_init_params iparams = {
-        /*.mem_size   =*/ 1024*1024*1024,
-        /*.mem_buffer =*/ NULL,
-        /*.no_alloc   =*/ true,
-    };
-
-    ggml_context * ggml_ctx = ggml_init(iparams);
-
-    ggml_tensor * src0_ggml = ggml_new_tensor_3d(ggml_ctx, quant, k, m, batch);
-    ggml_tensor * src1_ggml = ggml_new_tensor_3d(ggml_ctx, GGML_TYPE_F32, k, n, batch);
-    ggml_tensor * tensor_ggml = ggml_mul_mat(ggml_ctx, src0_ggml, src1_ggml);
-
-    src0_ggml->data = qx;
-    src1_ggml->data = y;
-    tensor_ggml->data = d_chk;
-
-    ggml_cgraph * cgraph = ggml_new_graph(ggml_ctx);
-    ggml_build_forward_expand(cgraph, tensor_ggml);
-
-    ggml_graph_compute_with_ctx(ggml_ctx, cgraph, 1);
-
-    ggml_free(ggml_ctx);
-
-    double avg_err = 0.0;
-    int first_err_n = -1;
-    int first_err_m = -1;
-    int first_err_b = -1;
-
-    for (size_t i = 0; i < m*n*batch; i++) {
-        double err = std::fabs(d[i] - d_chk[i]);
-        avg_err += err;
-
-        if ((err > 0.05f || std::isnan(err)) && first_err_n == -1) {
-            first_err_b = i / (m * n);
-            first_err_n = (i % (m * n)) / m;
-            first_err_m = (i % (m * n)) % m;
-        }
-    }
-
-    avg_err /= m * n;
-
-    std::cerr << "TEST MMQ " << shname << " m=" << m << " n=" << n << " k=" << k << " batch=" << batch << " split_k=" << split_k << " matmul " << time_ms / num_it << "ms avg_err=" << avg_err << std::endl;
-
-    if (avg_err > 0.01 || std::isnan(avg_err)) {
-        std::cerr << "m = " << first_err_m << " n = " << first_err_n << " b = " << first_err_b << std::endl;
-        std::cerr << "Actual result: " << std::endl << std::endl;
-        ggml_vk_print_matrix_area(d, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-        std::cerr << std::endl;
-        std::cerr << "Expected result: " << std::endl << std::endl;
-        ggml_vk_print_matrix_area(d_chk, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-
-        if (split_k > 1) {
-            float * split_k_buf = (float *) malloc(sizeof(float) * d_ne * split_k);
-            ggml_vk_buffer_read(ctx, ctx->prealloc_split_k, 0, split_k_buf, sizeof(float) * d_ne * split_k);
-
-            std::cerr << "d_buf0: " << std::endl << std::endl;
-            ggml_vk_print_matrix_area(split_k_buf, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-
-            std::cerr << "d_buf1: " << std::endl << std::endl;
-            ggml_vk_print_matrix_area(split_k_buf + d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-
-            std::cerr << "d_buf2: " << std::endl << std::endl;
-            ggml_vk_print_matrix_area(split_k_buf + 2 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-
-            std::cerr << "d_buf3: " << std::endl << std::endl;
-            ggml_vk_print_matrix_area(split_k_buf + 3 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
-
-            free(split_k_buf);
-        }
-    }
-
-    ggml_vk_destroy_buffer(qx_buf);
-    ggml_vk_destroy_buffer(y_buf);
-    ggml_vk_destroy_buffer(d_buf);
-
-    free(x);
-    free(qx);
-    free(y);
-    free(d);
-    free(d_chk);
-}
-#endif
-
-static ggml_tensor_extra_gpu * ggml_vk_tensor_create_extra(ggml_tensor * tensor) {
-    VK_LOG_DEBUG("ggml_vk_create_extra(" << tensor << " (" << tensor->name << ", " << ggml_op_name(tensor->op) << "))");
-    ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu;
-    extra->reset();
-    tensor->extra = extra;
-    return extra;
-}
-
-static void ggml_vk_preallocate_buffers_graph(ggml_backend_vk_context * ctx, ggml_tensor * node){
-    VK_LOG_DEBUG("ggml_vk_preallocate_buffers_graph(" << node << ")");
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) node->extra;
-
-    if (extra == nullptr) {
-        return;
-    }
-
-    ggml_tensor * src0 = node->src[0];
-    ggml_tensor * src1 = node->src[1];
-
-    const bool use_src0 = src0 != nullptr;
-    const int64_t ne00 = use_src0 ? src0->ne[0] : 0;
-    const int64_t ne01 = use_src0 ? src0->ne[1] : 0;
-    const int64_t ne02 = use_src0 ? src0->ne[2] : 0;
-    const int64_t ne03 = use_src0 ? src0->ne[3] : 0;
-    const bool use_src1 = src1 != nullptr && node->op != GGML_OP_CPY && node->op != GGML_OP_CONT && node->op != GGML_OP_DUP;
-    const int64_t ne10 = use_src1 ? src1->ne[0] : 0;
-    const int64_t ne11 = use_src1 ? src1->ne[1] : 0;
-    const int64_t ne12 = use_src1 ? src1->ne[2] : 0;
-    const int64_t ne13 = use_src1 ? src1->ne[3] : 0;
-    const int64_t ne20 = node->ne[0];
-    const int64_t ne21 = node->ne[1];
-    const int64_t ne22 = node->ne[2];
-    const int64_t ne23 = node->ne[3];
-
-    const ggml_type src0_type = (use_src0 && src0->type == GGML_TYPE_F32) ? src0->type : GGML_TYPE_F16;
-    const ggml_type src1_type = (use_src1 && src1->type == GGML_TYPE_F32) ? src1->type : GGML_TYPE_F16;
-
-    const bool x_non_contig = use_src0 && !ggml_vk_dim01_contiguous(src0);
-    const bool y_non_contig = use_src1 && !ggml_vk_dim01_contiguous(src1);
-
-    const bool y_f32_kernel = use_src1 && src1->type == GGML_TYPE_F32 && !y_non_contig;
-
-    bool mmp = (use_src0 && use_src1 && src1_type == GGML_TYPE_F32) ? ggml_vk_get_mul_mat_mat_pipeline(ctx, src0_type, y_non_contig ? GGML_TYPE_F16 : src1->type) != nullptr : false;
-
-    const bool qx_needs_dequant = use_src0 && (!mmp || x_non_contig);
-    const bool qy_needs_dequant = use_src1 && ((src1->type != GGML_TYPE_F16 && !y_f32_kernel) || y_non_contig);
-
-    int split_k;
-    if (node->op == GGML_OP_MUL_MAT || node->op == GGML_OP_MUL_MAT_ID) {
-        split_k = ggml_vk_guess_split_k(ne01, ne11, ne10);
-    } else {
-        split_k = 1;
-    }
-    const uint32_t x_ne = ne00 * ne01;
-    const uint32_t y_ne = ne10 * ne11;
-    const uint32_t d_ne = ne20 * ne21;
-
-    const uint64_t x_sz = (use_src0 && qx_needs_dequant) ? ggml_vk_align_size(sizeof(src0_type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ne02 * ne03 : 0;
-    const uint64_t y_sz = (use_src1 && qy_needs_dequant) ? ggml_vk_align_size(sizeof(src1_type) * y_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ne12 * ne13 : 0;
-    uint64_t d_sz = ggml_vk_align_size(ggml_type_size(node->type) * d_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ne22 * ne23;
-    const uint64_t split_k_size = split_k > 1 ? d_sz * 4 : 0;
-
-    if (extra->buffer_gpu.expired()) {
-        // Workaround for CPU backend BLAS matmul calls
-        extra->buffer_gpu = ggml_vk_create_buffer_temp(ctx, d_sz);
-    }
-
-    switch (node->op) {
-    case GGML_OP_REPEAT:
-    case GGML_OP_GET_ROWS:
-    case GGML_OP_RESHAPE:
-    case GGML_OP_VIEW:
-    case GGML_OP_PERMUTE:
-    case GGML_OP_TRANSPOSE:
-    case GGML_OP_ADD:
-    case GGML_OP_SCALE:
-    case GGML_OP_SQR:
-    case GGML_OP_CLAMP:
-    case GGML_OP_CPY:
-    case GGML_OP_CONT:
-    case GGML_OP_DUP:
-    case GGML_OP_MUL:
-    case GGML_OP_DIV:
-    case GGML_OP_NORM:
-    case GGML_OP_RMS_NORM:
-    case GGML_OP_DIAG_MASK_INF:
-    case GGML_OP_SOFT_MAX:
-    case GGML_OP_ROPE:
-    case GGML_OP_ARGSORT:
-    case GGML_OP_SUM_ROWS:
-        break;
-    case GGML_OP_UNARY:
-        switch (ggml_get_unary_op(node)) {
-        case GGML_UNARY_OP_SILU:
-        case GGML_UNARY_OP_GELU:
-        case GGML_UNARY_OP_RELU:
-            break;
-        default:
-            return;
-        }
-        break;
-    case GGML_OP_MUL_MAT:
-    case GGML_OP_MUL_MAT_ID:
-        if (ctx->prealloc_size_x < x_sz) {
-            ctx->prealloc_size_x = x_sz;
-        }
-        if (ctx->prealloc_size_y < y_sz) {
-            ctx->prealloc_size_y = y_sz;
-        }
-        if (ctx->prealloc_size_split_k < split_k_size) {
-            ctx->prealloc_size_split_k = split_k_size;
-        }
-        if (ctx->staging_size < x_sz + y_sz) {
-            ctx->staging_size = x_sz + y_sz;
-        }
-        break;
-    default:
-        return;
-    }
-}
-
-static void ggml_vk_preallocate_buffers(ggml_backend_vk_context * ctx) {
-#if defined(GGML_VULKAN_RUN_TESTS)
-    ctx->staging = ggml_vk_create_buffer_check(ctx, 100ul * 1024ul * 1024ul,
-        vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached,
-        vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
-    ggml_vk_test_transfer(ctx, 8192 * 1000, false);
-    ggml_vk_test_transfer(ctx, 8192 * 1000, true);
-
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_F32);
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q4_0);
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q4_1);
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q5_0);
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q5_1);
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q8_0);
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q2_K);
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q3_K);
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q4_K);
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q5_K);
-    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q6_K);
-
-    ggml_vk_test_matmul<ggml_fp16_t, ggml_fp16_t>(ctx, 512, 512, 100, 32, 100, 1, 2);
-
-    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 1, 0);
-    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 1, 1);
-    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 1, 2);
-    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 4, 0);
-    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 4, 1);
-    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 4, 2);
-
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q4_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q4_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q4_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q4_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q4_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q4_0);
-
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q4_1);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q4_1);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q4_1);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q4_1);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q4_1);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q4_1);
-
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q5_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q5_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q5_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q5_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q5_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q5_0);
-
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q5_1);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q5_1);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q5_1);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q5_1);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q5_1);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q5_1);
-
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q8_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q8_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q8_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q8_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q8_0);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q8_0);
-
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q2_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q2_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q2_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q2_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q2_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q2_K);
-
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q3_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q3_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q3_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q3_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q3_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q3_K);
-
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q4_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q4_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q4_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q4_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q4_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q4_K);
-
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q5_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q5_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q5_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q5_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q5_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q5_K);
-
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q6_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q6_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q6_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q6_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q6_K);
-    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q6_K);
-
-    std::cerr << std::endl;
-
-    const std::vector<size_t> vals {
-        8, 8, 8,
-        100, 46, 576,
-        623, 111, 128,
-        100, 46, 558,
-        512, 1, 256,
-        128, 110, 622,
-        511, 511, 127,
-        511, 511, 7,
-        511, 511, 17,
-        49, 49, 128,
-        128, 49, 49,
-        4096, 49, 4096,
-        11008, 49, 4096,
-        4096, 49, 11008,
-        32000, 49, 4096,
-        512, 512, 128,
-        128, 512, 512,
-        4096, 512, 4096,
-        11008, 512, 4096,
-        4096, 512, 11008,
-        32000, 512, 4096,
-    };
-    const size_t num_it = 1;
-    for (size_t i = 0; i < vals.size(); i += 3) {
-        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 1, 0);
-        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 1, 1);
-        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 1, 2);
-        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 4, 0);
-        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 4, 1);
-        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 4, 2);
-        std::cerr << std::endl;
-    }
-
-    GGML_ASSERT(false);
-#endif
-
-    if (ctx->prealloc_x == nullptr || (ctx->prealloc_size_x > 0 && ctx->prealloc_x->size < ctx->prealloc_size_x)) {
-        VK_LOG_MEMORY("ggml_vk_preallocate_buffers(x_size: " << ctx->prealloc_size_x << ")");
-        // Resize buffer
-        if (ctx->prealloc_x != nullptr) {
-            ggml_vk_destroy_buffer(ctx->prealloc_x);
-        }
-        ctx->prealloc_x = ggml_vk_create_buffer_device(ctx, ctx->prealloc_size_x);
-    }
-    if (ctx->prealloc_y == nullptr || (ctx->prealloc_size_y > 0 && ctx->prealloc_y->size < ctx->prealloc_size_y)) {
-        VK_LOG_MEMORY("ggml_vk_preallocate_buffers(y_size: " << ctx->prealloc_size_y << ")");
-        // Resize buffer
-        if (ctx->prealloc_y != nullptr) {
-            ggml_vk_destroy_buffer(ctx->prealloc_y);
-        }
-        ctx->prealloc_y = ggml_vk_create_buffer_device(ctx, ctx->prealloc_size_y);
-    }
-    if (ctx->prealloc_split_k == nullptr || (ctx->prealloc_size_split_k > 0 && ctx->prealloc_split_k->size < ctx->prealloc_size_split_k)) {
-        VK_LOG_MEMORY("ggml_vk_preallocate_buffers(split_k_size: " << ctx->prealloc_size_split_k << ")");
-        // Resize buffer
-        if (ctx->prealloc_split_k != nullptr) {
-            ggml_vk_destroy_buffer(ctx->prealloc_split_k);
-        }
-        ctx->prealloc_split_k = ggml_vk_create_buffer_device(ctx, ctx->prealloc_size_split_k);
-    }
-    if (ctx->staging == nullptr || (ctx->staging_size > 0 && ctx->staging->size < ctx->staging_size)) {
-        VK_LOG_MEMORY("ggml_vk_preallocate_buffers(staging_size: " << ctx->staging_size << ")");
-        // Resize buffer
-        if (ctx->staging != nullptr) {
-            ggml_vk_destroy_buffer(ctx->staging);
-        }
-        ctx->staging = ggml_vk_create_buffer_check(ctx, ctx->staging_size,
-            vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached,
-            vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
-    }
-}
-
-static void ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_tensor * node, bool last_node){
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) node->extra;
-
-    if (ggml_is_empty(node) || extra == nullptr) {
-        return;
-    }
-
-    VK_LOG_DEBUG("ggml_vk_build_graph(" << node << ", " << ggml_op_name(node->op) << ")");
-    ctx->semaphore_idx = 0;
-    ctx->staging_offset = 0;
-
-    const ggml_tensor * src0 = node->src[0];
-    const ggml_tensor * src1 = node->src[1];
-    const ggml_tensor * src2 = node->src[2];
-
-    switch (node->op) {
-    // Return on empty ops to avoid generating a compute_ctx and setting exit_tensor
-    case GGML_OP_RESHAPE:
-    case GGML_OP_VIEW:
-    case GGML_OP_PERMUTE:
-    case GGML_OP_TRANSPOSE:
-    case GGML_OP_NONE:
-        return;
-    case GGML_OP_UNARY:
-        switch (ggml_get_unary_op(node)) {
-        case GGML_UNARY_OP_SILU:
-        case GGML_UNARY_OP_GELU:
-        case GGML_UNARY_OP_RELU:
-            break;
-        default:
-            return;
-        }
-        break;
-    case GGML_OP_REPEAT:
-    case GGML_OP_GET_ROWS:
-    case GGML_OP_ADD:
-    case GGML_OP_MUL:
-    case GGML_OP_DIV:
-    case GGML_OP_SCALE:
-    case GGML_OP_SQR:
-    case GGML_OP_CLAMP:
-    case GGML_OP_CPY:
-    case GGML_OP_CONT:
-    case GGML_OP_DUP:
-    case GGML_OP_NORM:
-    case GGML_OP_RMS_NORM:
-    case GGML_OP_DIAG_MASK_INF:
-    case GGML_OP_SOFT_MAX:
-    case GGML_OP_ROPE:
-    case GGML_OP_MUL_MAT:
-    case GGML_OP_MUL_MAT_ID:
-    case GGML_OP_ARGSORT:
-    case GGML_OP_SUM_ROWS:
-        break;
-    default:
-        std::cerr << "ggml_vulkan: Error: Missing op: " << ggml_op_name(node->op) << std::endl;
-        GGML_ASSERT(false);
-        return;
-    }
-
-    if (ctx->compute_ctx == nullptr) {
-        ctx->compute_ctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
-        ggml_vk_ctx_begin(ctx, ctx->compute_ctx);
-    }
-
-    switch (node->op) {
-    case GGML_OP_REPEAT:
-        ggml_vk_repeat(ctx, ctx->compute_ctx, src0, src1, node);
-
-        break;
-    case GGML_OP_GET_ROWS:
-        ggml_vk_get_rows(ctx, ctx->compute_ctx, src0, src1, node);
-
-        break;
-    case GGML_OP_ADD:
-        ggml_vk_add(ctx, ctx->compute_ctx, src0, src1, node);
-
-        break;
-    case GGML_OP_MUL:
-        ggml_vk_mul(ctx, ctx->compute_ctx, src0, src1, node);
-
-        break;
-    case GGML_OP_DIV:
-        ggml_vk_div(ctx, ctx->compute_ctx, src0, src1, node);
-
-        break;
-    case GGML_OP_SCALE:
-        ggml_vk_scale(ctx, ctx->compute_ctx, src0, node);
-
-        break;
-    case GGML_OP_SQR:
-        ggml_vk_sqr(ctx, ctx->compute_ctx, src0, node);
-
-        break;
-    case GGML_OP_CLAMP:
-        ggml_vk_clamp(ctx, ctx->compute_ctx, src0, node);
-
-        break;
-    case GGML_OP_CPY:
-    case GGML_OP_CONT:
-    case GGML_OP_DUP:
-        ggml_vk_cpy(ctx, ctx->compute_ctx, src0, node);
-
-        break;
-    case GGML_OP_NORM:
-        ggml_vk_norm(ctx, ctx->compute_ctx, src0, node);
-
-        break;
-    case GGML_OP_RMS_NORM:
-        ggml_vk_rms_norm(ctx, ctx->compute_ctx, src0, node);
-
-        break;
-    case GGML_OP_UNARY:
-        switch (ggml_get_unary_op(node)) {
-        case GGML_UNARY_OP_SILU:
-        case GGML_UNARY_OP_GELU:
-        case GGML_UNARY_OP_RELU:
-            ggml_vk_unary(ctx, ctx->compute_ctx, src0, node);
-            break;
-        default:
-            return;
-        }
-        break;
-    case GGML_OP_DIAG_MASK_INF:
-        ggml_vk_diag_mask_inf(ctx, ctx->compute_ctx, src0, node);
-
-        break;
-    case GGML_OP_SOFT_MAX:
-        ggml_vk_soft_max(ctx, ctx->compute_ctx, src0, src1, node);
-
-        break;
-    case GGML_OP_ROPE:
-        ggml_vk_rope(ctx, ctx->compute_ctx, src0, src1, src2, node);
-
-        break;
-    case GGML_OP_ARGSORT:
-        ggml_vk_argsort(ctx, ctx->compute_ctx, src0, node);
-
-        break;
-    case GGML_OP_SUM_ROWS:
-        ggml_vk_sum_rows(ctx, ctx->compute_ctx, src0, node);
-
-        break;
-    case GGML_OP_MUL_MAT:
-        ggml_vk_mul_mat(ctx, ctx->compute_ctx, src0, src1, node);
-
-        break;
-    case GGML_OP_MUL_MAT_ID:
-        ggml_vk_mul_mat_id(ctx, ctx->compute_ctx, src0, src1, src2, node);
-
-        break;
-    default:
-        return;
-    }
-
-    extra->ctx_idx = ctx->compute_ctx->idx;
-
-#ifdef GGML_VULKAN_CHECK_RESULTS
-    // Force context reset on each node so that each tensor ends up in its own context
-    // and can be run and compared to its CPU equivalent separately
-    last_node = true;
-#endif
-
-    if (last_node) {
-        ggml_vk_ctx_end(ctx->compute_ctx);
-        ctx->compute_ctx->exit_tensor = node;
-        ctx->compute_ctx = nullptr;
-    }
-}
-
-static bool ggml_vk_compute_forward(ggml_backend_vk_context * ctx, ggml_compute_params * params, ggml_tensor * tensor){
-    ggml_tensor_extra_gpu * extra = nullptr;
-
-    switch (tensor->op) {
-    case GGML_OP_ADD:
-    case GGML_OP_GET_ROWS:
-    case GGML_OP_MUL:
-    case GGML_OP_DIV:
-    case GGML_OP_SCALE:
-    case GGML_OP_SQR:
-    case GGML_OP_CLAMP:
-    case GGML_OP_CPY:
-    case GGML_OP_CONT:
-    case GGML_OP_DUP:
-    case GGML_OP_NORM:
-    case GGML_OP_RMS_NORM:
-    case GGML_OP_DIAG_MASK_INF:
-    case GGML_OP_SOFT_MAX:
-    case GGML_OP_ROPE:
-    case GGML_OP_RESHAPE:
-    case GGML_OP_VIEW:
-    case GGML_OP_PERMUTE:
-    case GGML_OP_TRANSPOSE:
-    case GGML_OP_NONE:
-    case GGML_OP_ARGSORT:
-    case GGML_OP_SUM_ROWS:
-        extra = (ggml_tensor_extra_gpu *) tensor->extra;
-
-        break;
-    case GGML_OP_UNARY:
-        switch (ggml_get_unary_op(tensor)) {
-        case GGML_UNARY_OP_SILU:
-        case GGML_UNARY_OP_GELU:
-        case GGML_UNARY_OP_RELU:
-            extra = (ggml_tensor_extra_gpu *) tensor->extra;
-            break;
-        default:
-            return false;
-        }
-        break;
-    case GGML_OP_MUL_MAT:
-    case GGML_OP_MUL_MAT_ID:
-        extra = (ggml_tensor_extra_gpu *) tensor->extra;
-
-        break;
-    default:
-        return false;
-    }
-
-    if (extra == nullptr) {
-        return false;
-    }
-
-    if (params->ith != 0) {
-        return true;
-    }
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return true;
-    }
-
-    VK_LOG_DEBUG("ggml_vk_compute_forward(" << tensor << ", name=" << tensor->name << ", op=" << ggml_op_name(tensor->op) << ", type=" << tensor->type << ", ne0=" << tensor->ne[0] << ", ne1=" << tensor->ne[1] << ", ne2=" << tensor->ne[2] << ", ne3=" << tensor->ne[3] << ", nb0=" << tensor->nb[0] << ", nb1=" << tensor->nb[1] << ", nb2=" << tensor->nb[2] << ", nb3=" << tensor->nb[3] << ", view_src=" << tensor->view_src << ", view_offs=" << tensor->view_offs << ")");
-
-#ifdef GGML_VULKAN_CHECK_RESULTS
-    ggml_vk_check_results_0(ctx, params, tensor);
-#endif
-
-    vk_context& subctx = ctx->gc.contexts[extra->ctx_idx];
-
-    // Only run if ctx hasn't been submitted yet
-    if (!subctx.seqs.empty()) {
-        // Do staging buffer copies
-        for (auto& cpy : subctx.in_memcpys) {
-            memcpy(cpy.dst, cpy.src, cpy.n);
-        }
-
-        ggml_vk_submit(&subctx, ctx->fence);
-    }
-
-    if (tensor == subctx.exit_tensor) {
-        VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_compute_forward waitForFences");
-        ctx->device->device.resetFences({ ctx->fence });
-
-        // Do staging buffer copies
-        for (auto& cpy : subctx.out_memcpys) {
-            memcpy(cpy.dst, cpy.src, cpy.n);
-        }
-        subctx.in_memcpys.clear();
-        subctx.out_memcpys.clear();
-    }
-
-    return true;
-}
-
-// Clean up after graph processing is done
-static void ggml_vk_graph_cleanup(ggml_backend_vk_context * ctx) {
-    VK_LOG_DEBUG("ggml_vk_graph_cleanup()");
-    for (auto& buffer : ctx->gc.temp_buffers) {
-        ggml_vk_pool_free(ctx, buffer);
-    }
-    ctx->gc.temp_buffers.clear();
-
-    for (auto& pipeline : ctx->device->pipelines) {
-        if (pipeline.expired()) {
-            continue;
-        }
-
-        vk_pipeline pl = pipeline.lock();
-        ggml_pipeline_cleanup(pl);
-    }
-
-    ggml_vk_queue_cleanup(ctx, ctx->device->compute_queue);
-    ggml_vk_queue_cleanup(ctx, ctx->device->transfer_queue);
-
-    for (size_t i = 0; i < ctx->gc.semaphores.size(); i++) {
-        ctx->device->device.destroySemaphore({ ctx->gc.semaphores[i].s });
-    }
-    ctx->gc.semaphores.clear();
-
-    for (size_t i = 0; i < ctx->gc.tl_semaphores.size(); i++) {
-        ctx->device->device.destroySemaphore({ ctx->gc.tl_semaphores[i].s });
-    }
-    ctx->gc.tl_semaphores.clear();
-    ctx->semaphore_idx = 0;
-
-    ctx->event_idx = 0;
-
-    for (auto& event : ctx->gc.events) {
-        ctx->device->device.resetEvent(event);
-    }
-
-    ctx->staging_offset = 0;
-
-    ctx->compute_ctx = nullptr;
-    ctx->transfer_ctx = nullptr;
-    ctx->gc.contexts.clear();
-}
-
-// Clean up on backend free
-static void ggml_vk_cleanup(ggml_backend_vk_context * ctx) {
-    VK_LOG_DEBUG("ggml_vk_cleanup(" << ctx->idx << ")");
-    ggml_vk_graph_cleanup(ctx);
-
-    ggml_vk_destroy_buffer(ctx->prealloc_x);
-    ggml_vk_destroy_buffer(ctx->prealloc_y);
-    ggml_vk_destroy_buffer(ctx->prealloc_split_k);
-    ggml_vk_destroy_buffer(ctx->staging);
-    ggml_vk_destroy_buffer(ctx->sync_staging);
-
-    for (auto& buffer : ctx->buffer_pool) {
-        ggml_vk_destroy_buffer(buffer);
-    }
-
-    ctx->prealloc_size_x = 0;
-    ctx->prealloc_size_y = 0;
-    ctx->prealloc_size_split_k = 0;
-    ctx->staging_size = 0;
-
-    for (auto& event : ctx->gc.events) {
-        ctx->device->device.destroyEvent(event);
-    }
-    ctx->gc.events.clear();
-
-    ctx->device->device.destroyFence(ctx->fence);
-}
-
-GGML_CALL static int ggml_vk_get_device_count() {
-    ggml_vk_instance_init();
-
-    return vk_instance.device_indices.size();
-}
-
-GGML_CALL static void ggml_vk_get_device_description(int device, char * description, size_t description_size) {
-    ggml_vk_instance_init();
-
-    std::vector<vk::PhysicalDevice> devices = vk_instance.instance.enumeratePhysicalDevices();
-
-    vk::PhysicalDeviceProperties props;
-    devices[device].getProperties(&props);
-
-    snprintf(description, description_size, "%s", props.deviceName.data());
-}
-
-// backend interface
-
-#define UNUSED GGML_UNUSED
-
-// device backend
-
-static void * const vk_ptr_base = (void *)(uintptr_t) 0x1000;  // NOLINT
-
-struct ggml_backend_vk_buffer_context {
-    ggml_backend_vk_context * ctx;
-    vk_buffer dev_buffer;
-    ggml_tensor_extra_gpu * temp_tensor_extras = nullptr;
-    size_t temp_tensor_extra_index = 0;
-    std::string name;
-
-    ggml_backend_vk_buffer_context(ggml_backend_vk_context * ctx, vk_buffer&& dev_buffer, std::string& name) :
-        ctx(ctx),
-        dev_buffer(dev_buffer),
-        name(name) {
-    }
-
-    ~ggml_backend_vk_buffer_context() {
-        ggml_vk_destroy_buffer(dev_buffer);
-        if (temp_tensor_extras != nullptr) {
-            delete[] temp_tensor_extras;
-        }
-    }
-
-    ggml_tensor_extra_gpu * ggml_vk_alloc_temp_tensor_extra() {
-        if (temp_tensor_extras == nullptr) {
-            temp_tensor_extras = new ggml_tensor_extra_gpu[GGML_VK_MAX_NODES];
-        }
-
-        size_t alloc_index = temp_tensor_extra_index;
-        temp_tensor_extra_index = (temp_tensor_extra_index + 1) % GGML_VK_MAX_NODES;
-        ggml_tensor_extra_gpu * extra = &temp_tensor_extras[alloc_index];
-        extra->reset();
-
-        return extra;
-    }
-};
-
-GGML_CALL static const char * ggml_backend_vk_buffer_get_name(ggml_backend_buffer_t buffer) {
-    ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context;
-    return ctx->name.c_str();
-}
-
-GGML_CALL static bool ggml_backend_buffer_is_vk(ggml_backend_buffer_t buffer) {
-    return buffer->iface.get_name == ggml_backend_vk_buffer_get_name;
-}
-
-GGML_CALL static void ggml_backend_vk_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    VK_LOG_MEMORY("ggml_backend_vk_buffer_free_buffer()");
-    ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context;
-    ggml_vk_destroy_buffer(ctx->dev_buffer);
-    delete ctx;
-}
-
-GGML_CALL static void * ggml_backend_vk_buffer_get_base(ggml_backend_buffer_t buffer) {
-    return vk_ptr_base;
-
-    UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_vk_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
-    VK_LOG_DEBUG("ggml_backend_vk_buffer_init_tensor(" << buffer << " (" << buffer->context << "), " << tensor << ")");
-    ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context;
-
-    if (tensor->view_src != nullptr) {
-        GGML_ASSERT(tensor->view_src->buffer->buft == buffer->buft);
-        GGML_ASSERT(tensor->view_src->extra != nullptr);
-        tensor->extra = tensor->view_src->extra;
-    } else {
-        ggml_tensor_extra_gpu * extra = ctx->ggml_vk_alloc_temp_tensor_extra();
-        extra->buffer_gpu = ctx->dev_buffer;
-        extra->offset = (uint8_t *) tensor->data - (uint8_t *) vk_ptr_base;
-        tensor->extra = extra;
-    }
-}
-
-GGML_CALL static void ggml_backend_vk_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    VK_LOG_DEBUG("ggml_backend_vk_buffer_set_tensor(" << buffer << ", " << tensor << ", " << data << ", " << offset << ", " << size << ")");
-    ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context;
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
-
-    vk_buffer buf = extra->buffer_gpu.lock();
-
-    ggml_vk_buffer_write(ctx->ctx, buf, extra->offset + tensor->view_offs + offset, data, size);
-}
-
-GGML_CALL static void ggml_backend_vk_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    VK_LOG_DEBUG("ggml_backend_vk_buffer_get_tensor(" << buffer << ", " << tensor << ", " << data << ", " << offset << ", " << size << ")");
-    ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context;
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
-
-    vk_buffer buf = extra->buffer_gpu.lock();
-
-    ggml_vk_buffer_read(ctx->ctx, buf, extra->offset + tensor->view_offs + offset, data, size);
-}
-
-GGML_CALL static bool ggml_backend_vk_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * src, ggml_tensor * dst) {
-    if (ggml_backend_buffer_is_vk(src->buffer)) {
-        ggml_tensor_extra_gpu * src_extra = (ggml_tensor_extra_gpu *) src->extra;
-        ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra;
-
-        vk_buffer src_buf = src_extra->buffer_gpu.lock();
-        vk_buffer dst_buf = dst_extra->buffer_gpu.lock();
-
-        ggml_vk_buffer_copy(dst_buf, dst_extra->offset + dst->view_offs, src_buf, src_extra->offset + src->view_offs, ggml_nbytes(src));
-
-        return true;
-    }
-    return false;
-
-    UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_vk_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
-    ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context;
-
-    ggml_vk_buffer_memset(ctx->ctx, ctx->dev_buffer, 0, value, buffer->size);
-}
-
-static ggml_backend_buffer_i ggml_backend_vk_buffer_interface = {
-    /* .get_name        = */ ggml_backend_vk_buffer_get_name,
-    /* .free_buffer     = */ ggml_backend_vk_buffer_free_buffer,
-    /* .get_base        = */ ggml_backend_vk_buffer_get_base,
-    /* .init_tensor     = */ ggml_backend_vk_buffer_init_tensor,
-    /* .set_tensor      = */ ggml_backend_vk_buffer_set_tensor,
-    /* .get_tensor      = */ ggml_backend_vk_buffer_get_tensor,
-    /* .cpy_tensor      = */ ggml_backend_vk_buffer_cpy_tensor,
-    /* .clear           = */ ggml_backend_vk_buffer_clear,
-    /* .reset           = */ NULL,
-};
-
-// vk buffer type
-struct ggml_backend_vk_buffer_type_context {
-    std::string name;
-    ggml_backend_vk_context * ctx;
-};
-
-GGML_CALL static const char * ggml_backend_vk_buffer_type_name(ggml_backend_buffer_type_t buft) {
-    ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *)buft->context;
-
-    return ctx->name.c_str();
-}
-
-GGML_CALL static ggml_backend_buffer_t ggml_backend_vk_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    VK_LOG_MEMORY("ggml_backend_vk_buffer_type_alloc_buffer(" << size << ")");
-    ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *) buft->context;
-
-    vk_buffer dev_buffer = nullptr;
-    try {
-        dev_buffer = ggml_vk_create_buffer_device(ctx->ctx, size);
-    } catch (const vk::SystemError& e) {
-        return nullptr;
-    }
-
-    ggml_backend_vk_buffer_context * bufctx = new ggml_backend_vk_buffer_context(ctx->ctx, std::move(dev_buffer), ctx->name);
-
-    return ggml_backend_buffer_init(buft, ggml_backend_vk_buffer_interface, bufctx, size);
-}
-
-GGML_CALL static size_t ggml_backend_vk_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
-    ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *) buft->context;
-    return ctx->ctx->device->properties.limits.minStorageBufferOffsetAlignment;
-}
-
-GGML_CALL static size_t ggml_backend_vk_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) {
-    ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *) buft->context;
-    return ctx->ctx->device->max_memory_allocation_size;
-}
-
-GGML_CALL static size_t ggml_backend_vk_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
-    return ggml_nbytes(tensor);
-
-    UNUSED(buft);
-}
-
-static ggml_backend_buffer_type_i ggml_backend_vk_buffer_type_interface = {
-    /* .get_name         = */ ggml_backend_vk_buffer_type_name,
-    /* .alloc_buffer     = */ ggml_backend_vk_buffer_type_alloc_buffer,
-    /* .get_alignment    = */ ggml_backend_vk_buffer_type_get_alignment,
-    /* .get_max_size     = */ ggml_backend_vk_buffer_type_get_max_size,
-    /* .get_alloc_size   = */ ggml_backend_vk_buffer_type_get_alloc_size,
-    /* .is_host          = */ NULL,
-};
-
-GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_buffer_type(size_t dev_num) {
-    ggml_vk_instance_init();
-
-    VK_LOG_DEBUG("ggml_backend_vk_buffer_type(" << dev_num << ")");
-
-    GGML_ASSERT(dev_num < vk_instance.device_indices.size());
-
-    ggml_backend_vk_init(dev_num);
-
-    return &vk_instance.buffer_types[dev_num];
-}
-
-// host buffer type
-
-GGML_CALL static const char * ggml_backend_vk_host_buffer_type_name(ggml_backend_buffer_type_t buft) {
-    return GGML_VK_NAME "_Host";
-
-    UNUSED(buft);
-}
-
-GGML_CALL static const char * ggml_backend_vk_host_buffer_name(ggml_backend_buffer_t buffer) {
-    return GGML_VK_NAME "_Host";
-
-    UNUSED(buffer);
-}
-
-GGML_CALL static void ggml_backend_vk_host_buffer_free_buffer(ggml_backend_buffer_t buffer) {
-    VK_LOG_MEMORY("ggml_backend_vk_host_buffer_free_buffer()");
-    ggml_vk_host_free(&vk_instance.contexts[0], buffer->context);
-}
-
-GGML_CALL static ggml_backend_buffer_t ggml_backend_vk_host_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
-    VK_LOG_MEMORY("ggml_backend_vk_host_buffer_type_alloc_buffer(" << size << ")");
-    size += 32;  // Behave like the CPU buffer type
-    void * ptr = nullptr;
-    try {
-        ptr = ggml_vk_host_malloc(&vk_instance.contexts[0], size);
-    } catch (vk::SystemError& e) {
-        std::cerr << "ggml_vulkan: Failed to allocate pinned memory." << std::endl;
-        std::cerr << "ggml_vulkan: " << e.what() << std::endl;
-        // fallback to cpu buffer
-        return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size);
-    }
-
-    ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size);
-    buffer->buft = buft;
-    buffer->iface.get_name = ggml_backend_vk_host_buffer_name;
-    buffer->iface.free_buffer = ggml_backend_vk_host_buffer_free_buffer;
-
-    return buffer;
-}
-
-GGML_CALL static size_t ggml_backend_vk_host_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
-    return vk_instance.contexts[0].device->properties.limits.minMemoryMapAlignment;
-
-    UNUSED(buft);
-}
-
-GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type() {
-    static struct ggml_backend_buffer_type ggml_backend_vk_buffer_type_host = {
-        /* .iface    = */ {
-            /* .get_name         = */ ggml_backend_vk_host_buffer_type_name,
-            /* .alloc_buffer     = */ ggml_backend_vk_host_buffer_type_alloc_buffer,
-            /* .get_alignment    = */ ggml_backend_vk_host_buffer_type_get_alignment,
-            /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
-            /* .get_alloc_size   = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size,
-            /* .is_host          = */ ggml_backend_cpu_buffer_type()->iface.is_host,
-        },
-        /* .context  = */ nullptr,
-    };
-
-    if (!vk_instance.contexts[0].initialized) {
-        // Fall back to CPU
-        return ggml_backend_cpu_buffer_type();
-    }
-
-    return &ggml_backend_vk_buffer_type_host;
-}
-
-// backend
-
-GGML_CALL static const char * ggml_backend_vk_name(ggml_backend_t backend) {
-    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
-
-    return ctx->name.c_str();
-}
-
-GGML_CALL static void ggml_backend_vk_free(ggml_backend_t backend) {
-    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
-    VK_LOG_DEBUG("ggml_backend_vk_free(" << ctx->name << ")");
-
-    size_t idx = ctx->idx;
-
-    ggml_vk_cleanup(ctx);
-
-    ctx->device.reset();
-    ctx->initialized = false;
-
-    vk_instance.initialized[idx] = false;
-    vk_instance.backends[idx] = nullptr;
-    memset(&vk_instance.buffer_types[idx], 0, sizeof(ggml_backend_buffer_type));
-    delete backend;
-}
-
-GGML_CALL static ggml_backend_buffer_type_t ggml_backend_vk_get_default_buffer_type(ggml_backend_t backend) {
-    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
-
-    GGML_ASSERT(ctx->initialized);
-
-    return ggml_backend_vk_buffer_type(ctx->idx);
-}
-
-GGML_CALL static void ggml_backend_vk_set_tensor_async(ggml_backend_t backend, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
-    VK_LOG_DEBUG("ggml_backend_vk_set_tensor_async(" << size << ")");
-    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
-    GGML_ASSERT((tensor->buffer->buft == ggml_backend_vk_buffer_type(ctx->idx) || tensor->buffer->buft == ggml_backend_vk_host_buffer_type()) && "unsupported buffer type");
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
-
-    if (ctx->transfer_ctx == nullptr) {
-        // Initialize new transfer context
-        ctx->transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue);
-        ggml_vk_ctx_begin(ctx, ctx->transfer_ctx);
-    }
-
-    vk_buffer buf = extra->buffer_gpu.lock();
-
-    ggml_vk_buffer_write_async(ctx, ctx->transfer_ctx, buf, extra->offset + tensor->view_offs + offset, data, size);
-}
-
-GGML_CALL static void ggml_backend_vk_get_tensor_async(ggml_backend_t backend, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
-    VK_LOG_DEBUG("ggml_backend_vk_get_tensor_async(" << size << ")");
-    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
-    GGML_ASSERT((tensor->buffer->buft == ggml_backend_vk_buffer_type(ctx->idx) || tensor->buffer->buft == ggml_backend_vk_host_buffer_type()) && "unsupported buffer type");
-
-    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
-
-    if (ctx->transfer_ctx == nullptr) {
-        // Initialize new transfer context
-        ctx->transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue);
-        ggml_vk_ctx_begin(ctx, ctx->transfer_ctx);
-    }
-
-    vk_buffer buf = extra->buffer_gpu.lock();
-
-    ggml_vk_buffer_read_async(ctx, ctx->transfer_ctx, buf, extra->offset + tensor->view_offs + offset, data, size);
-}
-
-GGML_CALL static bool ggml_backend_vk_cpy_tensor_async(ggml_backend_t backend, const ggml_tensor * src, ggml_tensor * dst) {
-    VK_LOG_DEBUG("ggml_backend_vk_cpy_tensor_async()");
-    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
-    if ((dst->buffer->buft == ggml_backend_vk_buffer_type(ctx->idx) || dst->buffer->buft == ggml_backend_vk_host_buffer_type()) && ggml_backend_buffer_is_vk(src->buffer)) {
-        ggml_tensor_extra_gpu * src_extra = (ggml_tensor_extra_gpu *) src->extra;
-        ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra;
-
-        if (ctx->transfer_ctx == nullptr) {
-            // Initialize new transfer context
-            ctx->transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue);
-            ggml_vk_ctx_begin(ctx, ctx->transfer_ctx);
-        }
-
-        vk_buffer src_buf = src_extra->buffer_gpu.lock();
-        vk_buffer dst_buf = dst_extra->buffer_gpu.lock();
-
-        ggml_vk_buffer_copy_async(ctx->transfer_ctx, dst_buf, dst_extra->offset + dst->view_offs, src_buf, src_extra->offset + src->view_offs, ggml_nbytes(src));
-        return true;
-    }
-
-    return false;
-}
-
-GGML_CALL static void ggml_backend_vk_synchronize(ggml_backend_t backend) {
-    VK_LOG_DEBUG("ggml_backend_vk_synchronize()");
-    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
-    if(ctx->transfer_ctx == nullptr) {
-        return;
-    }
-
-    ggml_vk_ctx_end(ctx->transfer_ctx);
-
-    for (auto& cpy : ctx->transfer_ctx->in_memcpys) {
-        memcpy(cpy.dst, cpy.src, cpy.n);
-    }
-
-    ggml_vk_submit(ctx->transfer_ctx, ctx->fence);
-    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_backend_vk_synchronize waitForFences");
-    ctx->device->device.resetFences({ ctx->fence });
-
-    for (auto& cpy : ctx->transfer_ctx->out_memcpys) {
-        memcpy(cpy.dst, cpy.src, cpy.n);
-    }
-
-    ctx->transfer_ctx = nullptr;
-}
-
-static bool ggml_vk_is_empty(ggml_tensor * node) {
-    return ggml_is_empty(node) || node->op == GGML_OP_NONE || node->op == GGML_OP_RESHAPE || node->op == GGML_OP_TRANSPOSE || node->op == GGML_OP_VIEW || node->op == GGML_OP_PERMUTE;
-}
-
-GGML_CALL static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
-    VK_LOG_DEBUG("ggml_backend_vk_graph_compute(" << cgraph->n_nodes << " nodes)");
-    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
-
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        ggml_vk_preallocate_buffers_graph(ctx, cgraph->nodes[i]);
-    }
-    ggml_vk_preallocate_buffers(ctx);
-
-    int last_node = cgraph->n_nodes - 1;
-
-    // If the last op in the cgraph isn't backend GPU, the command buffer doesn't get closed properly
-    while (last_node > 0 && ggml_vk_is_empty(cgraph->nodes[last_node])) {
-        last_node -= 1;
-    }
-
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        ggml_vk_build_graph(ctx,cgraph->nodes[i], i == last_node);
-    }
-
-    ggml_compute_params params = {};
-    params.type = GGML_TASK_TYPE_COMPUTE;
-    params.ith = 0;
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        ggml_tensor * node = cgraph->nodes[i];
-
-        if (ggml_vk_is_empty(node)) {
-            continue;
-        }
-
-        bool ok = ggml_vk_compute_forward(ctx, &params, node);
-        if (!ok) {
-            fprintf(stderr, "%s: error: op not supported %s (%s)\n", __func__, node->name, ggml_op_name(node->op));
-        }
-#ifdef GGML_VULKAN_CHECK_RESULTS
-        else {
-            ggml_vk_check_results_1(ctx, &params, node);
-        }
-#endif
-        GGML_ASSERT(ok);
-    }
-
-    ggml_vk_graph_cleanup(ctx);
-
-    return GGML_STATUS_SUCCESS;
-
-    UNUSED(backend);
-}
-
-GGML_CALL static bool ggml_backend_vk_supports_op(ggml_backend_t backend, const ggml_tensor * op) {
-    // ggml_backend_vk_context * ctx = (ggml_backend_vk_context *) backend->context;
-
-    switch (op->op) {
-        case GGML_OP_UNARY:
-            switch (ggml_get_unary_op(op)) {
-                case GGML_UNARY_OP_GELU:
-                case GGML_UNARY_OP_SILU:
-                case GGML_UNARY_OP_RELU:
-                    return ggml_is_contiguous(op->src[0]);
-                default:
-                    return false;
-            }
-            break;
-        case GGML_OP_MUL_MAT:
-        case GGML_OP_MUL_MAT_ID:
-            {
-                switch (op->src[0]->type) {
-                    case GGML_TYPE_F32:
-                    case GGML_TYPE_F16:
-                    case GGML_TYPE_Q4_0:
-                    case GGML_TYPE_Q4_1:
-                    case GGML_TYPE_Q5_0:
-                    case GGML_TYPE_Q5_1:
-                    case GGML_TYPE_Q8_0:
-                    case GGML_TYPE_Q2_K:
-                    case GGML_TYPE_Q3_K:
-                    case GGML_TYPE_Q4_K:
-                    case GGML_TYPE_Q5_K:
-                    case GGML_TYPE_Q6_K:
-                        break;
-                    default:
-                        return false;
-                }
-                struct ggml_tensor * a;
-                struct ggml_tensor * b;
-                if (op->op == GGML_OP_MUL_MAT) {
-                    a = op->src[0];
-                    b = op->src[1];
-                } else {
-                    a = op->src[2];
-                    b = op->src[1];
-                }
-                if (a->ne[3] != b->ne[3]) {
-                    return false;
-                }
-                return true;
-            } break;
-        case GGML_OP_GET_ROWS:
-            {
-                switch (op->src[0]->type) {
-                    case GGML_TYPE_F32:
-                    case GGML_TYPE_F16:
-                    case GGML_TYPE_Q4_0:
-                    case GGML_TYPE_Q4_1:
-                    case GGML_TYPE_Q5_0:
-                    case GGML_TYPE_Q5_1:
-                    case GGML_TYPE_Q8_0:
-                        return true;
-                    default:
-                        return false;
-                }
-            } break;
-        case GGML_OP_CPY:
-        case GGML_OP_DUP:
-            {
-                ggml_type src0_type = op->src[0]->type;
-                ggml_type src1_type = op->src[1] != nullptr ? op->src[1]->type : src0_type;
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) {
-                    return true;
-                }
-                if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) {
-                    return true;
-                }
-                return false;
-            } break;
-        // case GGML_OP_REPEAT:
-        //     {
-        //         ggml_type src0_type = op->src[0]->type;
-        //         return src0_type != GGML_TYPE_I32 && src0_type != GGML_TYPE_I16;
-        //     } break;
-        case GGML_OP_ROPE:
-            return ggml_is_contiguous(op->src[0]);
-        case GGML_OP_NONE:
-        case GGML_OP_RESHAPE:
-        case GGML_OP_VIEW:
-        case GGML_OP_PERMUTE:
-        case GGML_OP_TRANSPOSE:
-        case GGML_OP_NORM:
-        case GGML_OP_ADD:
-        case GGML_OP_MUL:
-        case GGML_OP_DIV:
-        case GGML_OP_RMS_NORM:
-        case GGML_OP_SCALE:
-        case GGML_OP_SQR:
-        case GGML_OP_CLAMP:
-        case GGML_OP_CONT:
-        case GGML_OP_DIAG_MASK_INF:
-        case GGML_OP_SOFT_MAX:
-        case GGML_OP_ARGSORT:
-        case GGML_OP_SUM_ROWS:
-            return true;
-        default:
-            return false;
-    }
-
-    UNUSED(backend);
-}
-
-GGML_CALL static bool ggml_backend_vk_offload_op(ggml_backend_t backend, const ggml_tensor * op) {
-    const int min_batch_size = 32;
-
-    return (op->ne[1] >= min_batch_size && op->op != GGML_OP_GET_ROWS) ||
-           (op->ne[2] >= min_batch_size && op->op == GGML_OP_MUL_MAT_ID);
-
-    UNUSED(backend);
-}
-
-GGML_CALL static bool ggml_backend_vk_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
-    if (buft->iface.get_name != ggml_backend_vk_buffer_type_name) {
-        return false;
-    }
-
-    ggml_backend_vk_buffer_type_context * buft_ctx = (ggml_backend_vk_buffer_type_context *)buft->context;
-    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
-
-    return buft_ctx->ctx->idx == ctx->idx;
-}
-
-// TODO: enable async and synchronize
-static ggml_backend_i ggml_backend_vk_interface = {
-    /* .get_name                = */ ggml_backend_vk_name,
-    /* .free                    = */ ggml_backend_vk_free,
-    /* .get_default_buffer_type = */ ggml_backend_vk_get_default_buffer_type,
-    /* .set_tensor_async        = */ NULL,  // ggml_backend_vk_set_tensor_async,
-    /* .get_tensor_async        = */ NULL,  // ggml_backend_vk_get_tensor_async,
-    /* .cpy_tensor_async        = */ NULL,  // ggml_backend_vk_cpy_tensor_async,
-    /* .synchronize             = */ NULL,  // ggml_backend_vk_synchronize,
-    /* .graph_plan_create       = */ NULL,
-    /* .graph_plan_free         = */ NULL,
-    /* .graph_plan_update       = */ NULL,
-    /* .graph_plan_compute      = */ NULL,
-    /* .graph_compute           = */ ggml_backend_vk_graph_compute,
-    /* .supports_op             = */ ggml_backend_vk_supports_op,
-    /* .supports_buft           = */ ggml_backend_vk_supports_buft,
-    /* .offload_op              = */ ggml_backend_vk_offload_op,
-    /* .event_new               = */ NULL,
-    /* .event_free              = */ NULL,
-    /* .event_record            = */ NULL,
-    /* .event_wait              = */ NULL,
-    /* .event_synchronize       = */ NULL,
-};
-
-static ggml_guid_t ggml_backend_vk_guid() {
-    static ggml_guid guid = { 0xb8, 0xf7, 0x4f, 0x86, 0x40, 0x3c, 0xe1, 0x02, 0x91, 0xc8, 0xdd, 0xe9, 0x02, 0x3f, 0xc0, 0x2b };
-    return &guid;
-}
-
-GGML_CALL ggml_backend_t ggml_backend_vk_init(size_t dev_num) {
-    if (vk_instance.initialized[dev_num]) {
-        return vk_instance.backends[dev_num];
-    }
-    VK_LOG_DEBUG("ggml_backend_vk_init(" << dev_num << ")");
-
-    ggml_backend_vk_context * ctx = &vk_instance.contexts[dev_num];
-    ggml_vk_init(ctx, dev_num);
-    ctx->name = GGML_VK_NAME + std::to_string(dev_num);
-    vk_instance.buffer_types[dev_num] = {
-        /* .iface    = */ ggml_backend_vk_buffer_type_interface,
-        /* .context  = */ new ggml_backend_vk_buffer_type_context{ ctx->name, ctx },
-    };
-    vk_instance.initialized[dev_num] = true;
-
-    ggml_backend_t vk_backend = new ggml_backend {
-        /* .guid      = */ ggml_backend_vk_guid(),
-        /* .interface = */ ggml_backend_vk_interface,
-        /* .context   = */ &vk_instance.contexts[ctx->idx],
-    };
-
-    vk_instance.backends[dev_num] = vk_backend;
-
-    return vk_backend;
-}
-
-GGML_CALL bool ggml_backend_is_vk(ggml_backend_t backend) {
-    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_vk_guid());
-}
-
-GGML_CALL int ggml_backend_vk_get_device_count() {
-    return ggml_vk_get_device_count();
-}
-
-GGML_CALL void ggml_backend_vk_get_device_description(int device, char * description, size_t description_size) {
-    ggml_vk_get_device_description(device, description, description_size);
-}
-
-GGML_CALL void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total) {
-    GGML_ASSERT(device < (int) vk_instance.device_indices.size());
-
-    vk::PhysicalDevice vkdev = vk_instance.instance.enumeratePhysicalDevices()[vk_instance.device_indices[device]];
-
-    vk::PhysicalDeviceMemoryProperties memprops = vkdev.getMemoryProperties();
-
-    for (const vk::MemoryHeap& heap : memprops.memoryHeaps) {
-        if (heap.flags & vk::MemoryHeapFlagBits::eDeviceLocal) {
-            *total = heap.size;
-            *free = heap.size;
-            break;
-        }
-    }
-}
-
-// backend registry
-GGML_CALL static ggml_backend_t ggml_backend_reg_vk_init(const char * params, void * user_data) {
-    ggml_backend_t vk_backend = ggml_backend_vk_init((int) (intptr_t) user_data);
-    return vk_backend;
-
-    UNUSED(params);
-}
-
-extern "C" GGML_CALL int ggml_backend_vk_reg_devices();
-
-GGML_CALL int ggml_backend_vk_reg_devices() {
-    ggml_vk_instance_init();
-
-    for (size_t i = 0; i < vk_instance.device_indices.size(); i++) {
-        char name[128];
-        snprintf(name, sizeof(name), "%s%ld", GGML_VK_NAME, i);
-        ggml_backend_register(name, ggml_backend_reg_vk_init, ggml_backend_vk_buffer_type(i), (void *) (intptr_t) i);  // NOLINT
-    }
-    return vk_instance.device_indices.size();
-}
-
-// Extension availability
-static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions) {
-#ifdef GGML_VULKAN_VALIDATE
-    bool portability_enumeration_ext = false;
-    // Check for portability enumeration extension for MoltenVK support
-    for (const auto& properties : instance_extensions) {
-        if (strcmp("VK_KHR_portability_enumeration", properties.extensionName) == 0) {
-            return true;
-        }
-    }
-    if (!portability_enumeration_ext) {
-        std::cerr << "ggml_vulkan: WARNING: Instance extension VK_KHR_portability_enumeration not found." << std::endl;
-    }
-#endif
-    return false;
-
-    UNUSED(instance_extensions);
-}
-static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions) {
-#ifdef __APPLE__
-    bool portability_enumeration_ext = false;
-    // Check for portability enumeration extension for MoltenVK support
-    for (const auto& properties : instance_extensions) {
-        if (strcmp("VK_KHR_portability_enumeration", properties.extensionName) == 0) {
-            return true;
-        }
-    }
-    if (!portability_enumeration_ext) {
-        std::cerr << "ggml_vulkan: WARNING: Instance extension VK_KHR_portability_enumeration not found." << std::endl;
-    }
-#endif
-    return false;
-
-    UNUSED(instance_extensions);
-}
-
-// checks
-
-#ifdef GGML_VULKAN_CHECK_RESULTS
-static void ggml_vk_print_graph_origin(const ggml_tensor * tensor, std::vector<const ggml_tensor *>& done, int level = 0) {
-    if (std::find(done.begin(), done.end(), tensor) != done.end() || level > 10) {
-        return;
-    }
-    for (int j = 0; j < level; j++) {
-        std::cerr << " ";
-    }
-    std::cerr << ggml_op_name(tensor->op) << " gpu=" << (tensor->extra != nullptr) << std::endl;
-
-    done.push_back(tensor);
-
-    for (int i = 0; i < GGML_MAX_SRC; i++) {
-        if (tensor->src[i] != nullptr) {
-            ggml_vk_print_graph_origin(tensor->src[i], done, level + 1);
-        }
-    }
-}
-
-static void ggml_vk_print_tensor_area(const ggml_tensor * tensor, const void * data, int i0, int i1, int i2, int i3) {
-    if (tensor->type != GGML_TYPE_F32 && tensor->type != GGML_TYPE_F16 && tensor->type != GGML_TYPE_I32) {
-        return;
-    }
-    i0 = std::max(i0, 5);
-    i1 = std::max(i1, 5);
-    i2 = std::max(i2, 0);
-    i3 = std::max(i3, 0);
-    fprintf(stderr, "         ");
-    for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
-        fprintf(stderr, "%7d ", idx1);
-    }
-    fprintf(stderr, "\n");
-    for (int idx0 = i0 - 5; idx0 < i0 + 5; idx0++) {
-        fprintf(stderr, "%7d: ", idx0);
-        for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
-            if (idx0 >= 0 && idx0 < tensor->ne[0] && idx1 >= 0 && idx1 < tensor->ne[1] && i2 >= 0 && i2 < tensor->ne[2] && i3 >= 0 && i3 < tensor->ne[3]) {
-                float val;
-                if (tensor->type == GGML_TYPE_F32) {
-                    val = *(const float *) ((const char *) data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]);
-                } else if (tensor->type == GGML_TYPE_F16) {
-                    val = ggml_fp16_to_fp32(*(const ggml_fp16_t *) ((const char *) data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]));
-                } else if (tensor->type == GGML_TYPE_I32) {
-                    val = *(const int32_t *) ((const char *) data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]);
-                } else {
-                    GGML_ASSERT(false);
-                }
-                fprintf(stderr, "% 7.2f ", val);
-            } else {
-                fprintf(stderr, "        ");
-            }
-        }
-        fprintf(stderr, "\n");
-    }
-}
-
-static void ggml_vk_print_tensor(ggml_backend_vk_context * ctx, const ggml_tensor * tensor, const char * name) {
-    void * tensor_data = tensor->data;
-
-    if (ggml_backend_buffer_is_vk(tensor->buffer)) {
-        const size_t tensor_size = ggml_nbytes(tensor);
-        tensor_data = malloc(tensor_size);
-
-        ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
-
-        vk_buffer buffer_gpu = extra->buffer_gpu.lock();
-        ggml_vk_buffer_read(ctx, buffer_gpu, extra->offset + tensor->view_offs, tensor_data, tensor_size);
-    }
-
-    std::cerr << "TENSOR CHECK " << name << " (" << tensor->name << "): " << ggml_op_name(tensor->op) << std::endl;
-    std::cerr << "tensor=" << tensor << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << std::endl;
-    if (tensor->src[0] != nullptr) {
-        std::cerr << "tensor->src[0]=" << tensor->src[0] << " name=" << tensor->src[0]->name << " op=" << ggml_op_name(tensor->src[0]->op) << " type=" << ggml_type_name(tensor->src[0]->type) << " ne0=" << tensor->src[0]->ne[0] << " nb0=" << tensor->src[0]->nb[0] << " ne1=" << tensor->src[0]->ne[1] << " nb1=" << tensor->src[0]->nb[1] << " ne2=" << tensor->src[0]->ne[2] << " nb2=" << tensor->src[0]->nb[2] << " ne3=" << tensor->src[0]->ne[3] << " nb3=" << tensor->src[0]->nb[3] << std::endl;
-    }
-    if (tensor->src[1] != nullptr) {
-        std::cerr << "tensor->src[1]=" << tensor->src[1] << " name=" << tensor->src[1]->name << " op=" << ggml_op_name(tensor->src[1]->op) << " type=" << ggml_type_name(tensor->src[1]->type) << " ne0=" << tensor->src[1]->ne[0] << " nb0=" << tensor->src[1]->nb[0] << " ne1=" << tensor->src[1]->ne[1] << " nb1=" << tensor->src[1]->nb[1] << " ne2=" << tensor->src[1]->ne[2] << " nb2=" << tensor->src[1]->nb[2] << " ne3=" << tensor->src[1]->ne[3] << " nb3=" << tensor->src[1]->nb[3] << std::endl;
-    }
-    std::cerr << std::endl << "Result:" << std::endl;
-    ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 0, 0);
-    std::cerr << std::endl;
-    std::cerr << std::endl << "Result:" << std::endl;
-    ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 1, 0);
-    std::cerr << std::endl;
-    std::vector<const ggml_tensor *> done;
-    ggml_vk_print_graph_origin(tensor, done);
-
-    if (ggml_backend_buffer_is_vk(tensor->buffer)) {
-        free(tensor_data);
-    }
-}
-
-void * comp_result;
-size_t comp_size;
-size_t comp_nb[GGML_MAX_DIMS];
-size_t check_counter = 0;
-static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_compute_params * params, ggml_tensor * tensor) {
-    if (params->ith != 0) {
-        return;
-    }
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE || tensor->op == GGML_OP_TRANSPOSE) {
-        return;
-    }
-
-    check_counter++;
-    if (!(vk_output_tensor > 0 && vk_output_tensor == check_counter) && check_counter <= vk_skip_checks) {
-        return;
-    }
-
-    VK_LOG_DEBUG("ggml_vk_check_results_0(" << tensor->name << ")");
-
-    ggml_tensor * src0 = tensor->src[0];
-    ggml_tensor * src1 = tensor->src[1];
-    ggml_tensor * src2 = tensor->src[2];
-
-    struct ggml_init_params iparams = {
-        /*.mem_size   =*/ 1024*1024*1024,
-        /*.mem_buffer =*/ NULL,
-        /*.no_alloc   =*/ false,
-    };
-
-    struct ggml_context * ggml_ctx = ggml_init(iparams);
-
-    struct ggml_tensor * src0_clone = nullptr;
-    struct ggml_tensor * src1_clone = nullptr;
-    struct ggml_tensor * src2_clone = nullptr;
-    struct ggml_tensor * tensor_clone = nullptr;
-
-    size_t src0_size;
-    size_t src1_size;
-    size_t src2_size;
-
-    void * src0_buffer = nullptr;
-    void * src1_buffer = nullptr;
-    void * src2_buffer = nullptr;
-
-    if (src0 != nullptr) {
-        src0_clone = ggml_dup_tensor(ggml_ctx, src0);
-
-        src0_size = ggml_nbytes(src0);
-
-        src0_buffer = malloc(src0_size);
-        src0_clone->data = src0_buffer;
-        if (ggml_backend_buffer_is_host(src0->buffer)) {
-            memcpy(src0_clone->data, src0->data, src0_size);
-            memcpy(src0_clone->nb, src0->nb, sizeof(size_t) * GGML_MAX_DIMS);
-        } else if (ggml_backend_buffer_is_vk(src0->buffer)) {
-            ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src0->extra;
-            vk_buffer buffer_gpu = extra->buffer_gpu.lock();
-            uint64_t offset = extra->offset + src0->view_offs;
-            if (!ggml_is_contiguous(src0) && ggml_vk_dim01_contiguous(src0)) {
-                for (int i3 = 0; i3 < src0->ne[3]; i3++) {
-                    for (int i2 = 0; i2 < src0->ne[2]; i2++) {
-                        const int idx = i3*src0->ne[2] + i2;
-                        ggml_vk_buffer_read(ctx, buffer_gpu, offset + idx * src0->nb[2], ((char *)src0_clone->data + idx * src0_clone->nb[2]), src0->ne[1] * src0->nb[1]);
-                    }
-                }
-
-                src0_clone->nb[0] = src0->nb[0];
-                src0_clone->nb[1] = src0->nb[1];
-                for (int i = 2; i < GGML_MAX_DIMS; i++) {
-                    src0_clone->nb[i] = src0_clone->nb[i - 1]*src0_clone->ne[i - 1];
-                }
-            } else {
-                if (offset + src0_size >= buffer_gpu->size) {
-                    src0_size = buffer_gpu->size - offset;
-                }
-                ggml_vk_buffer_read(ctx, buffer_gpu, offset, src0_clone->data, src0_size);
-                memcpy(src0_clone->nb, src0->nb, sizeof(size_t) * GGML_MAX_DIMS);
-            }
-        } else {
-            GGML_ASSERT(false);
-        }
-
-        if (vk_output_tensor > 0 && vk_output_tensor == check_counter) {
-            ggml_vk_print_tensor(ctx, src0, "src0");
-        }
-    }
-    if (src1 != nullptr) {
-        src1_clone = ggml_dup_tensor(ggml_ctx, src1);
-
-        src1_size = ggml_nbytes(src1);
-
-        src1_buffer = malloc(src1_size);
-        src1_clone->data = src1_buffer;
-        if (ggml_backend_buffer_is_host(src1->buffer)) {
-            memcpy(src1_clone->data, src1->data, src1_size);
-            memcpy(src1_clone->nb, src1->nb, sizeof(size_t) * GGML_MAX_DIMS);
-        } else if (ggml_backend_buffer_is_vk(src1->buffer)) {
-            ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src1->extra;
-            vk_buffer buffer_gpu = extra->buffer_gpu.lock();
-            uint64_t offset = extra->offset + src1->view_offs;
-            if (!ggml_is_contiguous(src1) && ggml_vk_dim01_contiguous(src1)) {
-                for (int i3 = 0; i3 < src1->ne[3]; i3++) {
-                    for (int i2 = 0; i2 < src1->ne[2]; i2++) {
-                        const int idx = i3*src1->ne[2] + i2;
-                        ggml_vk_buffer_read(ctx, buffer_gpu, offset + idx * src1->nb[2], ((char *)src1_clone->data + idx * src1_clone->nb[2]), src1->ne[1] * src1->nb[1]);
-                    }
-                }
-
-                src1_clone->nb[0] = src1->nb[0];
-                src1_clone->nb[1] = src1->nb[1];
-                for (int i = 2; i < GGML_MAX_DIMS; i++) {
-                    src1_clone->nb[i] = src1_clone->nb[i - 1]*src1_clone->ne[i - 1];
-                }
-            } else {
-                if (offset + src1_size >= buffer_gpu->size) {
-                    src1_size = buffer_gpu->size - offset;
-                }
-                ggml_vk_buffer_read(ctx, buffer_gpu, offset, src1_clone->data, src1_size);
-                memcpy(src1_clone->nb, src1->nb, sizeof(size_t) * GGML_MAX_DIMS);
-            }
-        } else {
-            GGML_ASSERT(false);
-        }
-
-        if (vk_output_tensor > 0 && vk_output_tensor == check_counter) {
-            ggml_vk_print_tensor(ctx, src1, "src1");
-            std::cerr << "TENSOR CHECK: " << ggml_op_name(src1_clone->op) << " (check " << check_counter << ")" << std::endl;
-            std::cerr << "src1_clone=" << tensor << " src1_clone->type: " << ggml_type_name(src1_clone->type) << " ne0=" << src1_clone->ne[0] << " nb0=" << src1_clone->nb[0] << " ne1=" << src1_clone->ne[1] << " nb1=" << src1_clone->nb[1] << " ne2=" << src1_clone->ne[2] << " nb2=" << src1_clone->nb[2] << " ne3=" << src1_clone->ne[3] << " nb3=" << src1_clone->nb[3] << std::endl;
-            if (src1->src[0] != nullptr) {
-                std::cerr << "src1->src[0]=" << src1->src[0] << " op=" << ggml_op_name(src1->src[0]->op) << " type=" << ggml_type_name(src1->src[0]->type) << " ne0=" << src1->src[0]->ne[0] << " nb0=" << src1->src[0]->nb[0] << " ne1=" << src1->src[0]->ne[1] << " nb1=" << src1->src[0]->nb[1] << " ne2=" << src1->src[0]->ne[2] << " nb2=" << src1->src[0]->nb[2] << " ne3=" << src1->src[0]->ne[3] << " nb3=" << src1->src[0]->nb[3] << std::endl;
-            }
-            if (src1->src[1] != nullptr) {
-                std::cerr << "src1->src[1]=" << src1->src[1] << " op=" << ggml_op_name(src1->src[1]->op) << " type=" << ggml_type_name(src1->src[1]->type) << " ne0=" << src1->src[1]->ne[0] << " nb0=" << src1->src[1]->nb[0] << " ne1=" << src1->src[1]->ne[1] << " nb1=" << src1->src[1]->nb[1] << " ne2=" << src1->src[1]->ne[2] << " nb2=" << src1->src[1]->nb[2] << " ne3=" << src1->src[1]->ne[3] << " nb3=" << src1->src[1]->nb[3] << std::endl;
-            }
-            std::cerr << std::endl << "Result:" << std::endl;
-            ggml_vk_print_tensor_area(src1_clone, src1_clone->data, 5, 5, 0, 0);
-            std::cerr << std::endl;
-            std::cerr << std::endl << "Result:" << std::endl;
-            ggml_vk_print_tensor_area(src1_clone, src1_clone->data, 5, 5, 1, 0);
-            std::cerr << std::endl;
-            std::vector<const ggml_tensor *> done;
-            ggml_vk_print_graph_origin(src1_clone, done);
-        }
-    }
-    if (src2 != nullptr) {
-        src2_clone = ggml_dup_tensor(ggml_ctx, src2);
-
-        src2_size = ggml_nbytes(src2);
-
-        src2_buffer = malloc(src2_size);
-        src2_clone->data = src2_buffer;
-        if (ggml_backend_buffer_is_host(src2->buffer)) {
-            memcpy(src2_clone->data, src2->data, src2_size);
-            memcpy(src2_clone->nb, src2->nb, sizeof(size_t) * GGML_MAX_DIMS);
-        } else if (ggml_backend_buffer_is_vk(src2->buffer)) {
-            ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src2->extra;
-            vk_buffer buffer_gpu = extra->buffer_gpu.lock();
-            uint64_t offset = extra->offset + src2->view_offs;
-            if (!ggml_is_contiguous(src2) && ggml_vk_dim01_contiguous(src2)) {
-                for (int i3 = 0; i3 < src2->ne[3]; i3++) {
-                    for (int i2 = 0; i2 < src2->ne[2]; i2++) {
-                        const int idx = i3*src2->ne[2] + i2;
-                        ggml_vk_buffer_read(ctx, buffer_gpu, offset + idx * src2->nb[2], ((char *)src2_clone->data + idx * src2_clone->nb[2]), src2->ne[1] * src2->nb[1]);
-                    }
-                }
-
-                src2_clone->nb[0] = src2->nb[0];
-                src2_clone->nb[1] = src2->nb[1];
-                for (int i = 2; i < GGML_MAX_DIMS; i++) {
-                    src2_clone->nb[i] = src2_clone->nb[i - 1]*src2_clone->ne[i - 1];
-                }
-            } else {
-                if (offset + src2_size >= buffer_gpu->size) {
-                    src2_size = buffer_gpu->size - offset;
-                }
-                ggml_vk_buffer_read(ctx, buffer_gpu, offset, src2_clone->data, src2_size);
-                memcpy(src2_clone->nb, src2->nb, sizeof(size_t) * GGML_MAX_DIMS);
-            }
-        } else {
-            GGML_ASSERT(false);
-        }
-
-        if (vk_output_tensor > 0 && vk_output_tensor == check_counter) {
-            ggml_vk_print_tensor(ctx, src2, "src2");
-            std::cerr << "TENSOR CHECK: " << ggml_op_name(src2_clone->op) << " (check " << check_counter << ")" << std::endl;
-            std::cerr << "src2_clone=" << tensor << " src2_clone->type: " << ggml_type_name(src2_clone->type) << " ne0=" << src2_clone->ne[0] << " nb0=" << src2_clone->nb[0] << " ne1=" << src2_clone->ne[1] << " nb1=" << src2_clone->nb[1] << " ne2=" << src2_clone->ne[2] << " nb2=" << src2_clone->nb[2] << " ne3=" << src2_clone->ne[3] << " nb3=" << src2_clone->nb[3] << std::endl;
-            if (src2->src[0] != nullptr) {
-                std::cerr << "src2->src[0]=" << src2->src[0] << " op=" << ggml_op_name(src2->src[0]->op) << " type=" << ggml_type_name(src2->src[0]->type) << " ne0=" << src2->src[0]->ne[0] << " nb0=" << src2->src[0]->nb[0] << " ne1=" << src2->src[0]->ne[1] << " nb1=" << src2->src[0]->nb[1] << " ne2=" << src2->src[0]->ne[2] << " nb2=" << src2->src[0]->nb[2] << " ne3=" << src2->src[0]->ne[3] << " nb3=" << src2->src[0]->nb[3] << std::endl;
-            }
-            if (src2->src[1] != nullptr) {
-                std::cerr << "src2->src[1]=" << src2->src[1] << " op=" << ggml_op_name(src2->src[1]->op) << " type=" << ggml_type_name(src2->src[1]->type) << " ne0=" << src2->src[1]->ne[0] << " nb0=" << src2->src[1]->nb[0] << " ne1=" << src2->src[1]->ne[1] << " nb1=" << src2->src[1]->nb[1] << " ne2=" << src2->src[1]->ne[2] << " nb2=" << src2->src[1]->nb[2] << " ne3=" << src2->src[1]->ne[3] << " nb3=" << src2->src[1]->nb[3] << std::endl;
-            }
-            std::cerr << std::endl << "Result:" << std::endl;
-            ggml_vk_print_tensor_area(src2_clone, src2_clone->data, 5, 5, 0, 0);
-            std::cerr << std::endl;
-            std::cerr << std::endl << "Result:" << std::endl;
-            ggml_vk_print_tensor_area(src2_clone, src2_clone->data, 5, 5, 1, 0);
-            std::cerr << std::endl;
-            std::vector<const ggml_tensor *> done;
-            ggml_vk_print_graph_origin(src2_clone, done);
-        }
-    }
-
-    if (tensor->op == GGML_OP_MUL_MAT) {
-        tensor_clone = ggml_mul_mat(ggml_ctx, src0_clone, src1_clone);
-    } else if (tensor->op == GGML_OP_MUL_MAT_ID) {
-        tensor_clone = ggml_mul_mat_id(ggml_ctx, src0_clone, src1_clone, src2_clone);
-    } else if (tensor->op == GGML_OP_MUL) {
-        tensor_clone = ggml_mul(ggml_ctx, src0_clone, src1_clone);
-    } else if (tensor->op == GGML_OP_DIV) {
-        tensor_clone = ggml_div(ggml_ctx, src0_clone, src1_clone);
-    } else if (tensor->op == GGML_OP_SCALE) {
-        tensor_clone = ggml_scale(ggml_ctx, src0_clone, ((float *)tensor->op_params)[0]);
-    } else if (tensor->op == GGML_OP_SQR) {
-        tensor_clone = ggml_sqr(ggml_ctx, src0_clone);
-    } else if (tensor->op == GGML_OP_CLAMP) {
-        tensor_clone = ggml_clamp(ggml_ctx, src0_clone, ((float *)tensor->op_params)[0], ((float *)tensor->op_params)[1]);
-    } else if (tensor->op == GGML_OP_ADD) {
-        tensor_clone = ggml_add(ggml_ctx, src0_clone, src1_clone);
-    } else if (tensor->op == GGML_OP_NORM) {
-        tensor_clone = ggml_norm(ggml_ctx, src0_clone, *(float *)tensor->op_params);
-    } else if (tensor->op == GGML_OP_RMS_NORM) {
-        tensor_clone = ggml_rms_norm(ggml_ctx, src0_clone, *(float *)tensor->op_params);
-    } else if (tensor->op == GGML_OP_SOFT_MAX) {
-        if (src1 != nullptr) {
-            tensor_clone = ggml_soft_max_ext(ggml_ctx, src0_clone, src1_clone, ((float *)tensor->op_params)[0], ((float *)tensor->op_params)[1]);
-        } else {
-            tensor_clone = ggml_soft_max(ggml_ctx, src0_clone);
-        }
-    } else if (tensor->op == GGML_OP_DIAG_MASK_INF) {
-        tensor_clone = ggml_diag_mask_inf(ggml_ctx, src0_clone, *(int *)tensor->op_params);
-    } else if (tensor->op == GGML_OP_ROPE) {
-        const int n_dims      = ((int32_t *) tensor->op_params)[1];
-        const int mode        = ((int32_t *) tensor->op_params)[2];
-        //const int n_ctx_ggml       = ((int32_t *) tensor->op_params)[3];
-        const int n_ctx_orig_ggml  = ((int32_t *) tensor->op_params)[4];
-        float freq_base       = ((float *)   tensor->op_params)[5];
-        float freq_scale      = ((float *)   tensor->op_params)[6];
-        float ext_factor      = ((float *)   tensor->op_params)[7];
-        float attn_factor     = ((float *)   tensor->op_params)[8];
-        float beta_fast       = ((float *)   tensor->op_params)[9];
-        float beta_slow       = ((float *)   tensor->op_params)[10];
-        tensor_clone = ggml_rope_ext(ggml_ctx, src0_clone, src1_clone, src2_clone, n_dims, mode, n_ctx_orig_ggml, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow);
-    } else if (tensor->op == GGML_OP_UNARY) {
-        switch (ggml_get_unary_op(tensor)) {
-        case GGML_UNARY_OP_SILU:
-            tensor_clone = ggml_silu(ggml_ctx, src0_clone);
-            break;
-        case GGML_UNARY_OP_GELU:
-            tensor_clone = ggml_gelu(ggml_ctx, src0_clone);
-            break;
-        case GGML_UNARY_OP_RELU:
-            tensor_clone = ggml_relu(ggml_ctx, src0_clone);
-            break;
-        default:
-            std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl;
-            GGML_ASSERT(false);
-        }
-    } else if (tensor->op == GGML_OP_CPY || tensor->op == GGML_OP_DUP) {
-        if (src1 == nullptr) {
-            tensor_clone = ggml_dup(ggml_ctx, src0_clone);
-            tensor_clone->type = tensor->type;
-        } else {
-            tensor_clone = ggml_cpy(ggml_ctx, src0_clone, src1_clone);
-        }
-    } else if (tensor->op == GGML_OP_CONT) {
-        tensor_clone = ggml_cont_4d(ggml_ctx, src0_clone, tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]);
-    } else if (tensor->op == GGML_OP_RESHAPE) {
-        tensor_clone = ggml_reshape_4d(ggml_ctx, src0_clone, tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]);
-    } else if (tensor->op == GGML_OP_VIEW) {
-        tensor_clone = ggml_view_4d(ggml_ctx, src0_clone, tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3], tensor->nb[1], tensor->nb[2], tensor->nb[3], ((int32_t *) tensor->op_params)[0]);
-    } else if (tensor->op == GGML_OP_PERMUTE) {
-        int32_t * params = (int32_t *)tensor->op_params;
-        tensor_clone = ggml_permute(ggml_ctx, src0_clone, params[0], params[1], params[2], params[3]);
-    } else if (tensor->op == GGML_OP_TRANSPOSE) {
-        tensor_clone = ggml_transpose(ggml_ctx, src0_clone);
-    } else if (tensor->op == GGML_OP_GET_ROWS) {
-        tensor_clone = ggml_get_rows(ggml_ctx, src0_clone, src1_clone);
-    } else if (tensor->op == GGML_OP_ARGSORT) {
-        tensor_clone = ggml_argsort(ggml_ctx, src0_clone, (ggml_sort_order) *(int *)tensor->op_params);
-    } else if (tensor->op == GGML_OP_SUM_ROWS) {
-        tensor_clone = ggml_sum_rows(ggml_ctx, src0_clone);
-    } else {
-        std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl;
-        GGML_ASSERT(false);
-    }
-
-    ggml_cgraph * cgraph = ggml_new_graph(ggml_ctx);
-    ggml_build_forward_expand(cgraph, tensor_clone);
-
-    ggml_graph_compute_with_ctx(ggml_ctx, cgraph, 8);
-
-    if (vk_output_tensor > 0 && vk_output_tensor == check_counter) {
-        ggml_vk_print_tensor(ctx, tensor_clone, "tensor_clone");
-    }
-
-    comp_size = ggml_nbytes(tensor_clone);
-
-    comp_result = malloc(comp_size);
-    memcpy(comp_result, tensor_clone->data, comp_size);
-    memcpy(comp_nb, tensor_clone->nb, sizeof(size_t) * GGML_MAX_DIMS);
-
-    if (src0 != nullptr) {
-        free(src0_buffer);
-    }
-    if (src1 != nullptr) {
-        free(src1_buffer);
-    }
-
-    ggml_free(ggml_ctx);
-}
-
-static void ggml_vk_check_results_1(ggml_backend_vk_context * ctx, ggml_compute_params * params, ggml_tensor * tensor) {
-    if (params->ith != 0) {
-        return;
-    }
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE || tensor->op == GGML_OP_TRANSPOSE) {
-        return;
-    }
-    if (!(vk_output_tensor > 0 && vk_output_tensor == check_counter) && check_counter <= vk_skip_checks) {
-        return;
-    }
-
-    VK_LOG_DEBUG("ggml_vk_check_results_1(" << tensor->name << ")");
-
-    ggml_tensor * src0 = tensor->src[0];
-    ggml_tensor * src1 = tensor->src[1];
-    ggml_tensor * src2 = tensor->src[2];
-
-    void * tensor_data = tensor->data;
-
-    if (ggml_backend_buffer_is_vk(tensor->buffer)) {
-        size_t tensor_size = ggml_nbytes(tensor);
-        tensor_data = malloc(tensor_size);
-
-        ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
-
-        vk_buffer buffer_gpu = extra->buffer_gpu.lock();
-        if (extra->offset + tensor->view_offs + tensor_size >= buffer_gpu->size) {
-            tensor_size = buffer_gpu->size - (extra->offset + tensor->view_offs);
-        }
-
-        ggml_vk_buffer_read(ctx, buffer_gpu, extra->offset + tensor->view_offs, tensor_data, tensor_size);
-    }
-
-    float first_error_result = -1.0f;
-    float first_error_correct = -1.0f;
-    std::array<int, 4> first_error = { -1, -1, -1, -1 };
-    double avg_err = 0.0;
-    size_t counter = 0;
-
-    for (int i3 = 0; i3 < tensor->ne[3]; i3++) {
-        for (int i2 = 0; i2 < tensor->ne[2]; i2++) {
-            for (int i1 = 0; i1 < tensor->ne[1]; i1++) {
-                for (int i0 = 0; i0 < tensor->ne[0]; i0++) {
-                    const bool buffer_size_fit = i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0] < comp_size;
-                    float correct = 0.0f;
-                    float result = 0.0f;
-
-                    if (buffer_size_fit) {
-                        if (tensor->type == GGML_TYPE_F32) {
-                            correct = *(float *) ((char *) comp_result + i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0]);
-                            result  = *(float *) ((char *) tensor_data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0]);
-                        } else if (tensor->type == GGML_TYPE_F16) {
-                            correct = ggml_fp16_to_fp32(*(ggml_fp16_t *) ((char *) comp_result + i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0]));
-                            result  = ggml_fp16_to_fp32(*(ggml_fp16_t *) ((char *) tensor_data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0]));
-                        } else if (tensor->type == GGML_TYPE_I32) {
-                            correct = *(int32_t *) ((char *) comp_result + i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0]);
-                            result  = *(int32_t *) ((char *) tensor_data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0]);
-                        } else {
-                            std::cerr << "Results check not implemented for type " << ggml_type_name(tensor->type) << std::endl;
-                        }
-                    } else {
-                        std::cerr << "Missing debug code for type " << ggml_type_name(tensor->type) << std::endl;
-                        GGML_ASSERT(false);
-                    }
-
-                    if ((std::isnan(correct) != std::isnan(result)) || (std::isinf(correct) != std::isinf(result)) || !buffer_size_fit) {
-                        std::cerr << "ERROR: Invalid value in " << ggml_op_name(tensor->op) << " i3=" << i3 << " i2=" << i2 << " i1=" << i1 << " i0=" << i0 << " result=" << result << " correct=" << correct << " avg_err=" << (avg_err / counter) << std::endl;
-                        std::cerr << "tensor=" << tensor << " tensor->name=" << tensor->name << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << " offset=" << tensor->view_offs << std::endl;
-                        if (src0 != nullptr) {
-                            std::cerr << "src0=" << src0 << " src0->name=" << src0->name << " op=" << ggml_op_name(src0->op) << " type=" << ggml_type_name(src0->type) << " ne0=" << src0->ne[0] << " nb0=" << src0->nb[0] << " ne1=" << src0->ne[1] << " nb1=" << src0->nb[1] << " ne2=" << src0->ne[2] << " nb2=" << src0->nb[2] << " ne3=" << src0->ne[3] << " nb3=" << src0->nb[3] << " offset=" << src0->view_offs << std::endl;
-                        }
-                        if (src1 != nullptr) {
-                            std::cerr << "src1=" << src1 << " src1->name=" << src1->name << " op=" << ggml_op_name(src1->op) << " type=" << ggml_type_name(src1->type) << " ne0=" << src1->ne[0] << " nb0=" << src1->nb[0] << " ne1=" << src1->ne[1] << " nb1=" << src1->nb[1] << " ne2=" << src1->ne[2] << " nb2=" << src1->nb[2] << " ne3=" << src1->ne[3] << " nb3=" << src1->nb[3] << " offset=" << src1->view_offs << std::endl;
-                        }
-                        if (src2 != nullptr) {
-                            std::cerr << "src2=" << src2 << " src2->name=" << src2->name << " op=" << ggml_op_name(src2->op) << " type=" << ggml_type_name(src2->type) << " ne0=" << src2->ne[0] << " nb0=" << src2->nb[0] << " ne1=" << src2->ne[1] << " nb1=" << src2->nb[1] << " ne2=" << src2->ne[2] << " nb2=" << src2->nb[2] << " ne3=" << src2->ne[3] << " nb3=" << src2->nb[3] << " offset=" << src2->view_offs << std::endl;
-                        }
-                        std::cerr << "First error: result=" << first_error_result << " correct=" << first_error_correct  << " i3=" << first_error[3] << " i2=" << first_error[2] << " i1=" << first_error[1] << " i0=" << first_error[0] << std::endl;
-                        std::cerr << std::endl << "Result:" << std::endl;
-                        ggml_vk_print_tensor_area(tensor, tensor_data, i0, i1, i2, i3);
-                        std::cerr << std::endl << "Correct:" << std::endl;
-                        ggml_vk_print_tensor_area(tensor, comp_result, i0, i1, i2, i3);
-                        std::cerr << std::endl;
-                        std::vector<const ggml_tensor *> done;
-                        ggml_vk_print_graph_origin(tensor, done);
-                        GGML_ASSERT(false);
-                    }
-                    if (first_error[0] == -1 && std::fabs(correct - result) > 0.1f) {
-                        first_error[0] = i0;
-                        first_error[1] = i1;
-                        first_error[2] = i2;
-                        first_error[3] = i3;
-                        first_error_result = result;
-                        first_error_correct = correct;
-                    }
-
-                    // Special case, value is infinite, avoid NaN result in avg_err
-                    // NaN also appears in results, if both are nan error is 0
-                    if (!std::isinf(correct) && !std::isinf(result) && !std::isnan(correct) && !std::isnan(result)) {
-                        avg_err += std::fabs(correct - result);
-                    }
-                    counter++;
-                }
-            }
-        }
-    }
-
-    avg_err /= counter;
-
-    if (vk_output_tensor > 0 && vk_output_tensor == check_counter) {
-        std::cerr << "TENSOR CHECK: avg_err=" << avg_err << " in " << ggml_op_name(tensor->op) << " (check " << check_counter << ")" << std::endl;
-        std::cerr << "tensor=" << tensor << " tensor->name=" << tensor->name << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << " offset=" << tensor->view_offs << std::endl;
-        if (src0 != nullptr) {
-            std::cerr << "src0=" << src0 << " op=" << ggml_op_name(src0->op) << " type=" << ggml_type_name(src0->type) << " ne0=" << src0->ne[0] << " nb0=" << src0->nb[0] << " ne1=" << src0->ne[1] << " nb1=" << src0->nb[1] << " ne2=" << src0->ne[2] << " nb2=" << src0->nb[2] << " ne3=" << src0->ne[3] << " nb3=" << src0->nb[3] << " offset=" << src0->view_offs << std::endl;
-        }
-        if (src1 != nullptr) {
-            std::cerr << "src1=" << src1 << " op=" << ggml_op_name(src1->op) << " type=" << ggml_type_name(src1->type) << " ne0=" << src1->ne[0] << " nb0=" << src1->nb[0] << " ne1=" << src1->ne[1] << " nb1=" << src1->nb[1] << " ne2=" << src1->ne[2] << " nb2=" << src1->nb[2] << " ne3=" << src1->ne[3] << " nb3=" << src1->nb[3] << " offset=" << src1->view_offs << std::endl;
-        }
-        if (src2 != nullptr) {
-            std::cerr << "src2=" << src2 << " op=" << ggml_op_name(src2->op) << " type=" << ggml_type_name(src2->type) << " ne0=" << src2->ne[0] << " nb0=" << src2->nb[0] << " ne1=" << src2->ne[1] << " nb1=" << src2->nb[1] << " ne2=" << src2->ne[2] << " nb2=" << src2->nb[2] << " ne3=" << src2->ne[3] << " nb3=" << src2->nb[3] << " offset=" << src2->view_offs << std::endl;
-        }
-        std::cerr << "First error: result=" << first_error_result << " correct=" << first_error_correct  << " i3=" << first_error[3] << " i2=" << first_error[2] << " i1=" << first_error[1] << " i0=" << first_error[0] << std::endl;
-        std::cerr << std::endl << "Result:" << std::endl;
-        ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 0, 0);
-        std::cerr << std::endl << "Correct:" << std::endl;
-        ggml_vk_print_tensor_area(tensor, comp_result, 5, 5, 0, 0);
-        std::cerr << std::endl;
-        std::cerr << std::endl << "Result:" << std::endl;
-        ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 1, 0);
-        std::cerr << std::endl << "Correct:" << std::endl;
-        ggml_vk_print_tensor_area(tensor, comp_result, 5, 5, 1, 0);
-        std::cerr << std::endl;
-        std::vector<const ggml_tensor *> done;
-        ggml_vk_print_graph_origin(tensor, done);
-    }
-
-    if (avg_err > 0.05 || std::isnan(avg_err)) {
-        std::cerr << "ERROR: avg_err=" << avg_err << " in " << ggml_op_name(tensor->op) << " (check " << check_counter << ")" << std::endl;
-        std::cerr << "tensor=" << tensor << " tensor->name=" << tensor->name << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << " offset=" << tensor->view_offs << std::endl;
-        if (src0 != nullptr) {
-            std::cerr << "src0=" << src0 << " op=" << ggml_op_name(src0->op) << " type=" << ggml_type_name(src0->type) << " ne0=" << src0->ne[0] << " nb0=" << src0->nb[0] << " ne1=" << src0->ne[1] << " nb1=" << src0->nb[1] << " ne2=" << src0->ne[2] << " nb2=" << src0->nb[2] << " ne3=" << src0->ne[3] << " nb3=" << src0->nb[3] << " offset=" << src0->view_offs << std::endl;
-        }
-        if (src1 != nullptr) {
-            std::cerr << "src1=" << src1 << " op=" << ggml_op_name(src1->op) << " type=" << ggml_type_name(src1->type) << " ne0=" << src1->ne[0] << " nb0=" << src1->nb[0] << " ne1=" << src1->ne[1] << " nb1=" << src1->nb[1] << " ne2=" << src1->ne[2] << " nb2=" << src1->nb[2] << " ne3=" << src1->ne[3] << " nb3=" << src1->nb[3] << " offset=" << src1->view_offs << std::endl;
-        }
-        if (src2 != nullptr) {
-            std::cerr << "src2=" << src2 << " op=" << ggml_op_name(src2->op) << " type=" << ggml_type_name(src2->type) << " ne0=" << src2->ne[0] << " nb0=" << src2->nb[0] << " ne1=" << src2->ne[1] << " nb1=" << src2->nb[1] << " ne2=" << src2->ne[2] << " nb2=" << src2->nb[2] << " ne3=" << src2->ne[3] << " nb3=" << src2->nb[3] << " offset=" << src2->view_offs << std::endl;
-        }
-        std::cerr << "First error: result=" << first_error_result << " correct=" << first_error_correct  << " i3=" << first_error[3] << " i2=" << first_error[2] << " i1=" << first_error[1] << " i0=" << first_error[0] << std::endl;
-        std::cerr << std::endl << "Result:" << std::endl;
-        ggml_vk_print_tensor_area(tensor, tensor_data, first_error[0], first_error[1], first_error[2], first_error[3]);
-        std::cerr << std::endl << "Correct:" << std::endl;
-        ggml_vk_print_tensor_area(tensor, comp_result, first_error[0], first_error[1], first_error[2], first_error[3]);
-        std::cerr << std::endl;
-        std::vector<const ggml_tensor *> done;
-        ggml_vk_print_graph_origin(tensor, done);
-        GGML_ASSERT(false);
-    } else {
-        std::cerr << check_counter << " " << tensor->name << " op=" << ggml_op_name(tensor->op) << " avg_err=" << avg_err << std::endl;
-    }
-
-    free(comp_result);
-    comp_result = nullptr;
-    comp_size = 0;
-
-    if (ggml_backend_buffer_is_vk(tensor->buffer)) {
-        free(tensor_data);
-    }
-}
-#endif
diff --git a/ggml-vulkan.h b/ggml-vulkan.h
deleted file mode 100644 (file)
index af661c2..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#pragma once
-
-#include "ggml.h"
-#include "ggml-backend.h"
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-#define GGML_VK_NAME "Vulkan"
-#define GGML_VK_MAX_DEVICES 16
-
-GGML_API void ggml_vk_instance_init(void);
-
-// backend API
-GGML_API GGML_CALL ggml_backend_t ggml_backend_vk_init(size_t dev_num);
-
-GGML_API GGML_CALL bool ggml_backend_is_vk(ggml_backend_t backend);
-GGML_API GGML_CALL int  ggml_backend_vk_get_device_count(void);
-GGML_API GGML_CALL void ggml_backend_vk_get_device_description(int device, char * description, size_t description_size);
-GGML_API GGML_CALL void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total);
-
-GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_buffer_type(size_t dev_num);
-// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU
-GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type(void);
-
-#ifdef  __cplusplus
-}
-#endif
diff --git a/ggml.c b/ggml.c
deleted file mode 100644 (file)
index d5d33c2..0000000
--- a/ggml.c
+++ /dev/null
@@ -1,22589 +0,0 @@
-#define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous "unsafe" warnings on Windows
-#define _USE_MATH_DEFINES // For M_PI on MSVC
-
-#include "ggml-impl.h"
-#include "ggml-quants.h"
-#include "ggml.h"
-
-
-#if defined(_MSC_VER) || defined(__MINGW32__)
-#include <malloc.h> // using malloc.h with MSC/MINGW
-#elif !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__)
-#include <alloca.h>
-#endif
-
-#include <assert.h>
-#include <errno.h>
-#include <time.h>
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <float.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <signal.h>
-#if defined(__gnu_linux__)
-#include <syscall.h>
-#endif
-
-#ifdef GGML_USE_OPENMP
-#include <omp.h>
-#endif
-
-#ifdef GGML_USE_METAL
-#include <unistd.h>
-#endif
-
-#ifdef __ARM_FEATURE_MATMUL_INT8
-#undef GGML_USE_LLAMAFILE
-#endif
-
-#ifdef GGML_USE_LLAMAFILE
-#include "sgemm.h"
-#endif
-
-#if defined(_MSC_VER)
-// disable "possible loss of data" to avoid hundreds of casts
-// we should just be careful :)
-#pragma warning(disable: 4244 4267)
-
-// disable POSIX deprecation warnings
-// these functions are never going away, anyway
-#pragma warning(disable: 4996)
-#endif
-
-#if defined(_WIN32)
-
-#define WIN32_LEAN_AND_MEAN
-#ifndef NOMINMAX
-    #define NOMINMAX
-#endif
-#include <windows.h>
-
-typedef volatile LONG atomic_int;
-typedef atomic_int atomic_bool;
-typedef atomic_int atomic_flag;
-
-#define ATOMIC_FLAG_INIT 0
-
-static void atomic_store(atomic_int * ptr, LONG val) {
-    InterlockedExchange(ptr, val);
-}
-static LONG atomic_load(atomic_int * ptr) {
-    return InterlockedCompareExchange(ptr, 0, 0);
-}
-static LONG atomic_fetch_add(atomic_int * ptr, LONG inc) {
-    return InterlockedExchangeAdd(ptr, inc);
-}
-static LONG atomic_fetch_sub(atomic_int * ptr, LONG dec) {
-    return atomic_fetch_add(ptr, -(dec));
-}
-static atomic_bool atomic_flag_test_and_set(atomic_flag * ptr) {
-    return InterlockedExchange(ptr, 1);
-}
-static void atomic_flag_clear(atomic_flag * ptr) {
-    InterlockedExchange(ptr, 0);
-}
-
-typedef HANDLE pthread_t;
-
-typedef DWORD thread_ret_t;
-static int pthread_create(pthread_t * out, void * unused, thread_ret_t(*func)(void *), void * arg) {
-    (void) unused;
-    HANDLE handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) func, arg, 0, NULL);
-    if (handle == NULL)
-    {
-        return EAGAIN;
-    }
-
-    *out = handle;
-    return 0;
-}
-
-static int pthread_join(pthread_t thread, void * unused) {
-    (void) unused;
-    int ret = (int) WaitForSingleObject(thread, INFINITE);
-    CloseHandle(thread);
-    return ret;
-}
-
-static int sched_yield (void) {
-    Sleep (0);
-    return 0;
-}
-#else
-#include <pthread.h>
-#include <stdatomic.h>
-
-typedef void * thread_ret_t;
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#endif
-
-typedef pthread_t ggml_thread_t;
-
-#ifdef GGML_USE_CPU_HBM
-#include <hbwmalloc.h>
-#endif
-
-#if defined(__APPLE__)
-#include <TargetConditionals.h>
-#endif
-
-#if (defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && \
-    (!defined(TARGET_OS_TV) && !defined(TARGET_OS_WATCH))
-
-#include <sys/wait.h>
-
-void ggml_print_backtrace(void) {
-    /*
-    #include <execinfo.h>
-    #include <dlfcn.h>
-
-    void * trace[100];
-
-    int nptrs = backtrace(trace, sizeof(trace)/sizeof(trace[0]));
-
-    backtrace_symbols_fd(trace, nptrs, STDERR_FILENO);
-    */
-
-    // backtrack_symbols does not show line numbers, use gdb instead
-    char attach[32];
-    snprintf(attach, sizeof(attach), "attach %d", getpid());
-    int pid = fork();
-    if (pid == 0) {
-        execlp("gdb", "gdb", "--batch",
-            "-ex", "set style enabled on",
-            "-ex", attach,
-            "-ex", "bt -frame-info source-and-location",
-            "-ex", "detach",
-            "-ex", "quit",
-            (char *) NULL);
-    } else {
-        waitpid(pid, NULL, 0);
-    }
-}
-#else
-void ggml_print_backtrace(void) {
-    // platform not supported
-}
-#endif
-
-/*#define GGML_PERF*/
-#define GGML_DEBUG 0
-#define GGML_GELU_FP16
-#define GGML_GELU_QUICK_FP16
-
-#define GGML_SOFT_MAX_UNROLL 4
-#define GGML_VEC_DOT_UNROLL  2
-#define GGML_VEC_MAD_UNROLL  32
-
-//
-// logging
-//
-
-#if (GGML_DEBUG >= 1)
-#define GGML_PRINT_DEBUG(...) printf(__VA_ARGS__)
-#else
-#define GGML_PRINT_DEBUG(...)
-#endif
-
-#if (GGML_DEBUG >= 5)
-#define GGML_PRINT_DEBUG_5(...) printf(__VA_ARGS__)
-#else
-#define GGML_PRINT_DEBUG_5(...)
-#endif
-
-#if (GGML_DEBUG >= 10)
-#define GGML_PRINT_DEBUG_10(...) printf(__VA_ARGS__)
-#else
-#define GGML_PRINT_DEBUG_10(...)
-#endif
-
-#define GGML_PRINT(...) printf(__VA_ARGS__)
-
-//
-// end of logging block
-//
-
-#ifdef GGML_USE_ACCELERATE
-// uncomment to use vDSP for soft max computation
-// note: not sure if it is actually faster
-//#define GGML_SOFT_MAX_ACCELERATE
-#endif
-
-#if defined(_MSC_VER) || defined(__MINGW32__)
-#define GGML_ALIGNED_MALLOC(size) _aligned_malloc(size, GGML_MEM_ALIGN)
-#define GGML_ALIGNED_FREE(ptr)    _aligned_free(ptr)
-#else
-inline static void * ggml_aligned_malloc(size_t size) {
-    if (size == 0) {
-        GGML_PRINT("WARNING: Behavior may be unexpected when allocating 0 bytes for ggml_aligned_malloc!\n");
-        return NULL;
-    }
-    void * aligned_memory = NULL;
-#ifdef GGML_USE_CPU_HBM
-    int result = hbw_posix_memalign(&aligned_memory, 16, size);
-#elif GGML_USE_METAL
-    int result = posix_memalign(&aligned_memory, sysconf(_SC_PAGESIZE), size);
-#else
-    int result = posix_memalign(&aligned_memory, GGML_MEM_ALIGN, size);
-#endif
-    if (result != 0) {
-        // Handle allocation failure
-        const char *error_desc = "unknown allocation error";
-        switch (result) {
-            case EINVAL:
-                error_desc = "invalid alignment value";
-                break;
-            case ENOMEM:
-                error_desc = "insufficient memory";
-                break;
-        }
-        GGML_PRINT("%s: %s (attempted to allocate %6.2f MB)\n", __func__, error_desc, size/(1024.0*1024.0));
-        GGML_ASSERT(false);
-        return NULL;
-    }
-    return aligned_memory;
-}
-#define GGML_ALIGNED_MALLOC(size) ggml_aligned_malloc(size)
-#ifdef GGML_USE_CPU_HBM
-#define GGML_ALIGNED_FREE(ptr)    if(NULL != ptr) hbw_free(ptr)
-#else
-#define GGML_ALIGNED_FREE(ptr)    free(ptr)
-#endif
-#endif
-
-inline static void * ggml_malloc(size_t size) {
-    if (size == 0) {
-        GGML_PRINT("WARNING: Behavior may be unexpected when allocating 0 bytes for ggml_malloc!\n");
-        return NULL;
-    }
-    void * result = malloc(size);
-    if (result == NULL) {
-        GGML_PRINT("%s: failed to allocate %6.2f MB\n", __func__, size/(1024.0*1024.0));
-        GGML_ASSERT(false);
-    }
-    return result;
-}
-
-// calloc
-inline static void * ggml_calloc(size_t num, size_t size) {
-    if (num == 0 || size == 0) {
-        GGML_PRINT("WARNING: Behavior may be unexpected when allocating 0 bytes for ggml_calloc!\n");
-        return NULL;
-    }
-    void * result = calloc(num, size);
-    if (result == NULL) {
-        GGML_PRINT("%s: failed to allocate %6.2f MB\n", __func__, size/(1024.0*1024.0));
-        GGML_ASSERT(false);
-    }
-    return result;
-}
-
-#define GGML_MALLOC(size)      ggml_malloc(size)
-#define GGML_CALLOC(num, size) ggml_calloc(num, size)
-
-#define GGML_FREE(ptr) free(ptr)
-
-#define UNUSED GGML_UNUSED
-#define SWAP(x, y, T) do { T SWAP = x; x = y; y = SWAP; } while (0)
-
-#if defined(GGML_USE_ACCELERATE)
-#include <Accelerate/Accelerate.h>
-#endif
-
-// floating point type used to accumulate sums
-typedef double ggml_float;
-
-#undef MIN
-#undef MAX
-
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-
-//
-// global data
-//
-
-// precomputed gelu table for f16 (128 KB)
-static ggml_fp16_t ggml_table_gelu_f16[1 << 16];
-
-// precomputed quick gelu table for f16 (128 KB)
-static ggml_fp16_t ggml_table_gelu_quick_f16[1 << 16];
-
-// precomputed f32 table for f16 (256 KB) (ggml-impl.h)
-float ggml_table_f32_f16[1 << 16];
-
-GGML_CALL const char * ggml_status_to_string(enum ggml_status status) {
-    switch (status) {
-        case GGML_STATUS_ALLOC_FAILED: return "GGML status: error (failed to allocate memory)";
-        case GGML_STATUS_FAILED:       return "GGML status: error (operation failed)";
-        case GGML_STATUS_SUCCESS:      return "GGML status: success";
-        case GGML_STATUS_ABORTED:      return "GGML status: warning (operation aborted)";
-    }
-
-    return "GGML status: unknown";
-}
-
-float ggml_fp16_to_fp32(ggml_fp16_t x) {
-#define ggml_fp16_to_fp32 do_not_use__ggml_fp16_to_fp32__in_ggml
-    return GGML_FP16_TO_FP32(x);
-}
-
-ggml_fp16_t ggml_fp32_to_fp16(float x) {
-#define ggml_fp32_to_fp16 do_not_use__ggml_fp32_to_fp16__in_ggml
-    return GGML_FP32_TO_FP16(x);
-}
-
-float ggml_bf16_to_fp32(ggml_bf16_t x) {
-#define ggml_bf16_to_fp32 do_not_use__ggml_bf16_to_fp32__in_ggml
-    return GGML_BF16_TO_FP32(x);  // it just left shifts
-}
-
-ggml_bf16_t ggml_fp32_to_bf16(float x) {
-#define ggml_fp32_to_bf16 do_not_use__ggml_fp32_to_bf16__in_ggml
-    return GGML_FP32_TO_BF16(x);
-}
-
-void ggml_fp16_to_fp32_row(const ggml_fp16_t * x, float * y, int64_t n) {
-    for (int64_t i = 0; i < n; i++) {
-        y[i] = GGML_FP16_TO_FP32(x[i]);
-    }
-}
-
-void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, int64_t n) {
-    int64_t i = 0;
-#if defined(__F16C__)
-    for (; i + 7 < n; i += 8) {
-        __m256 x_vec = _mm256_loadu_ps(x + i);
-        __m128i y_vec = _mm256_cvtps_ph(x_vec, _MM_FROUND_TO_NEAREST_INT);
-        _mm_storeu_si128((__m128i *)(y + i), y_vec);
-    }
-    for(; i + 3 < n; i += 4) {
-        __m128 x_vec = _mm_loadu_ps(x + i);
-        __m128i y_vec = _mm_cvtps_ph(x_vec, _MM_FROUND_TO_NEAREST_INT);
-        _mm_storel_epi64((__m128i *)(y + i), y_vec);
-    }
-#endif
-    for (; i < n; i++) {
-        y[i] = GGML_FP32_TO_FP16(x[i]);
-    }
-}
-
-void ggml_bf16_to_fp32_row(const ggml_bf16_t * x, float * y, int64_t n) {
-    int64_t i = 0;
-#if defined(__AVX512F__)
-    for (; i + 16 <= n; i += 16) {
-        _mm512_storeu_ps(y + i,
-                         _mm512_castsi512_ps(
-                             _mm512_slli_epi32(
-                                 _mm512_cvtepu16_epi32(
-                                     _mm256_loadu_si256(
-                                         (const __m256i *)(x + i))),
-                                 16)));
-    }
-#elif defined(__AVX2__)
-    for (; i + 8 <= n; i += 8) {
-        _mm256_storeu_ps(y + i,
-                         _mm256_castsi256_ps(
-                             _mm256_slli_epi32(
-                                 _mm256_cvtepu16_epi32(
-                                     _mm_loadu_si128(
-                                         (const __m128i *)(x + i))),
-                                 16)));
-    }
-#endif
-    for (; i < n; i++) {
-        y[i] = GGML_BF16_TO_FP32(x[i]);
-    }
-}
-
-void ggml_fp32_to_bf16_row(const float * x, ggml_bf16_t * y, int64_t n) {
-  int i = 0;
-#if defined(__AVX512BF16__)
-  for (; i + 32 <= n; i += 32) {
-        _mm512_storeu_si512(
-            (__m512i *)(y + i),
-            m512i(_mm512_cvtne2ps_pbh(_mm512_loadu_ps(x + i + 16),
-                                _mm512_loadu_ps(x + i))));
-  }
-#endif
-    for (; i < n; i++) {
-        y[i] = GGML_FP32_TO_BF16(x[i]);
-    }
-}
-
-bool ggml_guid_matches(ggml_guid_t guid_a, ggml_guid_t guid_b) {
-    return memcmp(guid_a, guid_b, sizeof(ggml_guid)) == 0;
-}
-
-//
-// timing
-//
-
-#if defined(_MSC_VER) || defined(__MINGW32__)
-static int64_t timer_freq, timer_start;
-void ggml_time_init(void) {
-    LARGE_INTEGER t;
-    QueryPerformanceFrequency(&t);
-    timer_freq = t.QuadPart;
-
-    // The multiplication by 1000 or 1000000 below can cause an overflow if timer_freq
-    // and the uptime is high enough.
-    // We subtract the program start time to reduce the likelihood of that happening.
-    QueryPerformanceCounter(&t);
-    timer_start = t.QuadPart;
-}
-int64_t ggml_time_ms(void) {
-    LARGE_INTEGER t;
-    QueryPerformanceCounter(&t);
-    return ((t.QuadPart-timer_start) * 1000) / timer_freq;
-}
-int64_t ggml_time_us(void) {
-    LARGE_INTEGER t;
-    QueryPerformanceCounter(&t);
-    return ((t.QuadPart-timer_start) * 1000000) / timer_freq;
-}
-#else
-void ggml_time_init(void) {}
-int64_t ggml_time_ms(void) {
-    struct timespec ts;
-    clock_gettime(CLOCK_MONOTONIC, &ts);
-    return (int64_t)ts.tv_sec*1000 + (int64_t)ts.tv_nsec/1000000;
-}
-
-int64_t ggml_time_us(void) {
-    struct timespec ts;
-    clock_gettime(CLOCK_MONOTONIC, &ts);
-    return (int64_t)ts.tv_sec*1000000 + (int64_t)ts.tv_nsec/1000;
-}
-#endif
-
-int64_t ggml_cycles(void) {
-    return clock();
-}
-
-int64_t ggml_cycles_per_ms(void) {
-    return CLOCKS_PER_SEC/1000;
-}
-
-#ifdef GGML_PERF
-#define ggml_perf_time_ms()       ggml_time_ms()
-#define ggml_perf_time_us()       ggml_time_us()
-#define ggml_perf_cycles()        ggml_cycles()
-#define ggml_perf_cycles_per_ms() ggml_cycles_per_ms()
-#else
-#define ggml_perf_time_ms()       0
-#define ggml_perf_time_us()       0
-#define ggml_perf_cycles()        0
-#define ggml_perf_cycles_per_ms() 0
-#endif
-
-//
-// cross-platform UTF-8 file paths
-//
-
-#ifdef _WIN32
-static wchar_t * ggml_mbstowcs(const char * mbs) {
-    int wlen = MultiByteToWideChar(CP_UTF8, 0, mbs, -1, NULL, 0);
-    if (!wlen) {
-        errno = EINVAL;
-        return NULL;
-    }
-
-    wchar_t * wbuf = GGML_MALLOC(wlen * sizeof(wchar_t));
-    wlen = MultiByteToWideChar(CP_UTF8, 0, mbs, -1, wbuf, wlen);
-    if (!wlen) {
-        GGML_FREE(wbuf);
-        errno = EINVAL;
-        return NULL;
-    }
-
-    return wbuf;
-}
-#endif
-
-FILE * ggml_fopen(const char * fname, const char * mode) {
-#ifdef _WIN32
-    FILE * file = NULL;
-
-    // convert fname (UTF-8)
-    wchar_t * wfname = ggml_mbstowcs(fname);
-    if (wfname) {
-        // convert mode (ANSI)
-        wchar_t * wmode = GGML_MALLOC((strlen(mode) + 1) * sizeof(wchar_t));
-        wchar_t * wmode_p = wmode;
-        do {
-            *wmode_p++ = (wchar_t)*mode;
-        } while (*mode++);
-
-        // open file
-        file = _wfopen(wfname, wmode);
-
-        GGML_FREE(wfname);
-        GGML_FREE(wmode);
-    }
-
-    return file;
-#else
-    return fopen(fname, mode);
-#endif
-}
-
-//
-// cache line
-//
-
-#if defined(__cpp_lib_hardware_interference_size)
-#define CACHE_LINE_SIZE hardware_destructive_interference_size
-#else
-#if defined(__POWER9_VECTOR__)
-#define CACHE_LINE_SIZE 128
-#else
-#define CACHE_LINE_SIZE 64
-#endif
-#endif
-
-static const size_t CACHE_LINE_SIZE_F32 = CACHE_LINE_SIZE/sizeof(float);
-
-static void ggml_vec_dot_f32(int n, float * restrict s, size_t bs, const float * restrict x, size_t bx, const float * restrict y, size_t by, int nrc);
-static void ggml_vec_dot_f16(int n, float * restrict s, size_t bs, ggml_fp16_t * restrict x, size_t bx, ggml_fp16_t * restrict y, size_t by, int nrc);
-static void ggml_vec_dot_bf16(int n, float * restrict s, size_t bs, ggml_bf16_t * restrict x, size_t bx, ggml_bf16_t * restrict y, size_t by, int nrc);
-
-static const ggml_type_traits_t type_traits[GGML_TYPE_COUNT] = {
-    [GGML_TYPE_I8] = {
-        .type_name                = "i8",
-        .blck_size                = 1,
-        .type_size                = sizeof(int8_t),
-        .is_quantized             = false,
-    },
-    [GGML_TYPE_I16] = {
-        .type_name                = "i16",
-        .blck_size                = 1,
-        .type_size                = sizeof(int16_t),
-        .is_quantized             = false,
-    },
-    [GGML_TYPE_I32] = {
-        .type_name                = "i32",
-        .blck_size                = 1,
-        .type_size                = sizeof(int32_t),
-        .is_quantized             = false,
-    },
-    [GGML_TYPE_I64] = {
-        .type_name                = "i64",
-        .blck_size                = 1,
-        .type_size                = sizeof(int64_t),
-        .is_quantized             = false,
-    },
-    [GGML_TYPE_F64] = {
-        .type_name                = "f64",
-        .blck_size                = 1,
-        .type_size                = sizeof(double),
-        .is_quantized             = false,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_F32] = {
-        .type_name                = "f32",
-        .blck_size                = 1,
-        .type_size                = sizeof(float),
-        .is_quantized             = false,
-        .vec_dot                  = (ggml_vec_dot_t) ggml_vec_dot_f32,
-        .vec_dot_type             = GGML_TYPE_F32,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_F16] = {
-        .type_name                = "f16",
-        .blck_size                = 1,
-        .type_size                = sizeof(ggml_fp16_t),
-        .is_quantized             = false,
-        .to_float                 = (ggml_to_float_t) ggml_fp16_to_fp32_row,
-        .from_float               = (ggml_from_float_t) ggml_fp32_to_fp16_row,
-        .from_float_reference     = (ggml_from_float_t) ggml_fp32_to_fp16_row,
-        .vec_dot                  = (ggml_vec_dot_t) ggml_vec_dot_f16,
-        .vec_dot_type             = GGML_TYPE_F16,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_Q4_0] = {
-        .type_name                = "q4_0",
-        .blck_size                = QK4_0,
-        .type_size                = sizeof(block_q4_0),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_q4_0,
-        .from_float               = quantize_row_q4_0,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q4_0_reference,
-        .vec_dot                  = ggml_vec_dot_q4_0_q8_0,
-        .vec_dot_type             = GGML_TYPE_Q8_0,
-#if defined (__ARM_FEATURE_MATMUL_INT8)
-        .nrows                    = 2,
-#else
-        .nrows                    = 1,
-#endif
-    },
-    [GGML_TYPE_Q4_1] = {
-        .type_name                = "q4_1",
-        .blck_size                = QK4_1,
-        .type_size                = sizeof(block_q4_1),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_q4_1,
-        .from_float               = quantize_row_q4_1,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q4_1_reference,
-        .vec_dot                  = ggml_vec_dot_q4_1_q8_1,
-        .vec_dot_type             = GGML_TYPE_Q8_1,
-#if defined (__ARM_FEATURE_MATMUL_INT8)
-        .nrows                    = 2,
-#else
-        .nrows                    = 1,
-#endif
-    },
-    [4] = { // GGML_TYPE_Q4_2
-        .type_name                = "DEPRECATED",
-        .blck_size                = 0,
-        .type_size                = 0,
-        .is_quantized             = false,
-        .to_float                 = NULL,
-        .from_float               = NULL,
-        .from_float_reference     = NULL,
-        .vec_dot                  = NULL,
-        .vec_dot_type             = GGML_TYPE_COUNT,
-        .nrows                    = 1,
-    },
-    [5] = { // GGML_TYPE_Q4_3
-        .type_name                = "DEPRECATED",
-        .blck_size                = 0,
-        .type_size                = 0,
-        .is_quantized             = false,
-        .to_float                 = NULL,
-        .from_float               = NULL,
-        .from_float_reference     = NULL,
-        .vec_dot                  = NULL,
-        .vec_dot_type             = GGML_TYPE_COUNT,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_Q5_0] = {
-        .type_name                = "q5_0",
-        .blck_size                = QK5_0,
-        .type_size                = sizeof(block_q5_0),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_q5_0,
-        .from_float               = quantize_row_q5_0,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q5_0_reference,
-        .vec_dot                  = ggml_vec_dot_q5_0_q8_0,
-        .vec_dot_type             = GGML_TYPE_Q8_0,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_Q5_1] = {
-        .type_name                = "q5_1",
-        .blck_size                = QK5_1,
-        .type_size                = sizeof(block_q5_1),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_q5_1,
-        .from_float               = quantize_row_q5_1,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q5_1_reference,
-        .vec_dot                  = ggml_vec_dot_q5_1_q8_1,
-        .vec_dot_type             = GGML_TYPE_Q8_1,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_Q8_0] = {
-        .type_name                = "q8_0",
-        .blck_size                = QK8_0,
-        .type_size                = sizeof(block_q8_0),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_q8_0,
-        .from_float               = quantize_row_q8_0,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q8_0_reference,
-        .vec_dot                  = ggml_vec_dot_q8_0_q8_0,
-        .vec_dot_type             = GGML_TYPE_Q8_0,
-#if defined (__ARM_FEATURE_MATMUL_INT8)
-        .nrows                    = 2,
-#else
-        .nrows                    = 1,
-#endif
-    },
-    [GGML_TYPE_Q8_1] = {
-        .type_name                = "q8_1",
-        .blck_size                = QK8_1,
-        .type_size                = sizeof(block_q8_1),
-        .is_quantized             = true,
-        .from_float               = quantize_row_q8_1,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q8_1_reference,
-        .vec_dot_type             = GGML_TYPE_Q8_1,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_Q2_K] = {
-        .type_name                = "q2_K",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_q2_K),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_q2_K,
-        .from_float               = quantize_row_q2_K,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q2_K_reference,
-        .vec_dot                  = ggml_vec_dot_q2_K_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_Q3_K] = {
-        .type_name                = "q3_K",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_q3_K),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_q3_K,
-        .from_float               = quantize_row_q3_K,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q3_K_reference,
-        .vec_dot                  = ggml_vec_dot_q3_K_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_Q4_K] = {
-        .type_name                = "q4_K",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_q4_K),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_q4_K,
-        .from_float               = quantize_row_q4_K,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q4_K_reference,
-        .vec_dot                  = ggml_vec_dot_q4_K_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_Q5_K] = {
-        .type_name                = "q5_K",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_q5_K),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_q5_K,
-        .from_float               = quantize_row_q5_K,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q5_K_reference,
-        .vec_dot                  = ggml_vec_dot_q5_K_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_Q6_K] = {
-        .type_name                = "q6_K",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_q6_K),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_q6_K,
-        .from_float               = quantize_row_q6_K,
-        .from_float_reference     = (ggml_from_float_t) quantize_row_q6_K_reference,
-        .vec_dot                  = ggml_vec_dot_q6_K_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_IQ2_XXS] = {
-        .type_name                = "iq2_xxs",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_iq2_xxs),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_iq2_xxs,
-        .from_float               = NULL,
-        .from_float_reference     = NULL,
-        .vec_dot                  = ggml_vec_dot_iq2_xxs_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_IQ2_XS] = {
-        .type_name                = "iq2_xs",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_iq2_xs),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_iq2_xs,
-        .from_float               = NULL,
-        .from_float_reference     = NULL,
-        .vec_dot                  = ggml_vec_dot_iq2_xs_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_IQ3_XXS] = {
-        .type_name                = "iq3_xxs",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_iq3_xxs),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_iq3_xxs,
-        .from_float               = quantize_row_iq3_xxs,
-        .from_float_reference     = (ggml_from_float_t)quantize_row_iq3_xxs_reference,
-        .vec_dot                  = ggml_vec_dot_iq3_xxs_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_IQ3_S] = {
-        .type_name                = "iq3_s",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_iq3_s),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_iq3_s,
-        .from_float               = quantize_row_iq3_s,
-        .from_float_reference     = (ggml_from_float_t)quantize_row_iq3_s_reference,
-        .vec_dot                  = ggml_vec_dot_iq3_s_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_IQ2_S] = {
-        .type_name                = "iq2_s",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_iq2_s),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_iq2_s,
-        .from_float               = quantize_row_iq2_s,
-        .from_float_reference     = (ggml_from_float_t)quantize_row_iq2_s_reference,
-        .vec_dot                  = ggml_vec_dot_iq2_s_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_IQ1_S] = {
-        .type_name                = "iq1_s",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_iq1_s),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_iq1_s,
-        .from_float               = NULL,
-        .from_float_reference     = NULL,
-        .vec_dot                  = ggml_vec_dot_iq1_s_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_IQ1_M] = {
-        .type_name                = "iq1_m",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_iq1_m),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_iq1_m,
-        .from_float               = NULL,
-        .from_float_reference     = NULL,
-        .vec_dot                  = ggml_vec_dot_iq1_m_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_IQ4_NL] = {
-        .type_name                = "iq4_nl",
-        .blck_size                = QK4_NL,
-        .type_size                = sizeof(block_iq4_nl),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_iq4_nl,
-        .from_float               = quantize_row_iq4_nl,
-        .from_float_reference     = (ggml_from_float_t)quantize_row_iq4_nl_reference,
-        .vec_dot                  = ggml_vec_dot_iq4_nl_q8_0,
-        .vec_dot_type             = GGML_TYPE_Q8_0,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_IQ4_XS] = {
-        .type_name                = "iq4_xs",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_iq4_xs),
-        .is_quantized             = true,
-        .to_float                 = (ggml_to_float_t) dequantize_row_iq4_xs,
-        .from_float               = quantize_row_iq4_xs,
-        .from_float_reference     = (ggml_from_float_t)quantize_row_iq4_xs_reference,
-        .vec_dot                  = ggml_vec_dot_iq4_xs_q8_K,
-        .vec_dot_type             = GGML_TYPE_Q8_K,
-        .nrows                    = 1,
-    },
-    [GGML_TYPE_Q8_K] = {
-        .type_name                = "q8_K",
-        .blck_size                = QK_K,
-        .type_size                = sizeof(block_q8_K),
-        .is_quantized             = true,
-        .from_float               = quantize_row_q8_K,
-    },
-    [GGML_TYPE_BF16] = {
-        .type_name                = "bf16",
-        .blck_size                = 1,
-        .type_size                = sizeof(ggml_bf16_t),
-        .is_quantized             = false,
-        .to_float                 = (ggml_to_float_t) ggml_bf16_to_fp32_row,
-        .from_float               = (ggml_from_float_t) ggml_fp32_to_bf16_row,
-        .from_float_reference     = (ggml_from_float_t) ggml_fp32_to_bf16_row,
-        .vec_dot                  = (ggml_vec_dot_t) ggml_vec_dot_bf16,
-        .vec_dot_type             = GGML_TYPE_BF16,
-        .nrows                    = 1,
-    }
-};
-
-// For internal test use
-ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type) {
-    GGML_ASSERT(type < GGML_TYPE_COUNT);
-    return type_traits[type];
-}
-
-//
-// simd mappings
-//
-
-// we define a common set of C macros which map to specific intrinsics based on the current architecture
-// we then implement the fundamental computation operations below using only these macros
-// adding support for new architectures requires to define the corresponding SIMD macros
-//
-// GGML_F32_STEP / GGML_F16_STEP
-//   number of elements to process in a single step
-//
-// GGML_F32_EPR / GGML_F16_EPR
-//   number of elements to fit in a single register
-//
-
-#if defined(__ARM_NEON) && defined(__ARM_FEATURE_FMA)
-
-#define GGML_SIMD
-
-// F32 NEON
-
-#define GGML_F32_STEP 16
-#define GGML_F32_EPR  4
-
-#define GGML_F32x4              float32x4_t
-#define GGML_F32x4_ZERO         vdupq_n_f32(0.0f)
-#define GGML_F32x4_SET1(x)      vdupq_n_f32(x)
-#define GGML_F32x4_LOAD         vld1q_f32
-#define GGML_F32x4_STORE        vst1q_f32
-#define GGML_F32x4_FMA(a, b, c) vfmaq_f32(a, b, c)
-#define GGML_F32x4_ADD          vaddq_f32
-#define GGML_F32x4_MUL          vmulq_f32
-#define GGML_F32x4_REDUCE_ONE(x) vaddvq_f32(x)
-#define GGML_F32x4_REDUCE(res, x)              \
-{                                              \
-    int offset = GGML_F32_ARR >> 1;            \
-    for (int i = 0; i < offset; ++i) {         \
-        x[i] = vaddq_f32(x[i], x[offset+i]);   \
-    }                                          \
-    offset >>= 1;                              \
-    for (int i = 0; i < offset; ++i) {         \
-        x[i] = vaddq_f32(x[i], x[offset+i]);   \
-    }                                          \
-    offset >>= 1;                              \
-    for (int i = 0; i < offset; ++i) {         \
-        x[i] = vaddq_f32(x[i], x[offset+i]);   \
-    }                                          \
-    res = GGML_F32x4_REDUCE_ONE(x[0]);         \
-}
-
-#define GGML_F32_VEC        GGML_F32x4
-#define GGML_F32_VEC_ZERO   GGML_F32x4_ZERO
-#define GGML_F32_VEC_SET1   GGML_F32x4_SET1
-#define GGML_F32_VEC_LOAD   GGML_F32x4_LOAD
-#define GGML_F32_VEC_STORE  GGML_F32x4_STORE
-#define GGML_F32_VEC_FMA    GGML_F32x4_FMA
-#define GGML_F32_VEC_ADD    GGML_F32x4_ADD
-#define GGML_F32_VEC_MUL    GGML_F32x4_MUL
-#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE
-
-// F16 NEON
-
-#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
-    #define GGML_F16_STEP 32
-    #define GGML_F16_EPR  8
-
-    #define GGML_F16x8              float16x8_t
-    #define GGML_F16x8_ZERO         vdupq_n_f16(0.0f)
-    #define GGML_F16x8_SET1(x)      vdupq_n_f16(x)
-    #define GGML_F16x8_LOAD(x)      vld1q_f16((const ggml_fp16_internal_t *)(x))
-    #define GGML_F16x8_STORE        vst1q_f16
-    #define GGML_F16x8_FMA(a, b, c) vfmaq_f16(a, b, c)
-    #define GGML_F16x8_ADD          vaddq_f16
-    #define GGML_F16x8_MUL          vmulq_f16
-    #define GGML_F16x8_REDUCE(res, x)                             \
-    do {                                                          \
-        int offset = GGML_F16_ARR >> 1;                           \
-        for (int i = 0; i < offset; ++i) {                        \
-            x[i] = vaddq_f16(x[i], x[offset+i]);                  \
-        }                                                         \
-        offset >>= 1;                                             \
-        for (int i = 0; i < offset; ++i) {                        \
-            x[i] = vaddq_f16(x[i], x[offset+i]);                  \
-        }                                                         \
-        offset >>= 1;                                             \
-        for (int i = 0; i < offset; ++i) {                        \
-            x[i] = vaddq_f16(x[i], x[offset+i]);                  \
-        }                                                         \
-        const float32x4_t t0 = vcvt_f32_f16(vget_low_f16 (x[0])); \
-        const float32x4_t t1 = vcvt_f32_f16(vget_high_f16(x[0])); \
-        res = (ggml_float) vaddvq_f32(vaddq_f32(t0, t1));         \
-    } while (0)
-
-    #define GGML_F16_VEC                GGML_F16x8
-    #define GGML_F16_VEC_ZERO           GGML_F16x8_ZERO
-    #define GGML_F16_VEC_SET1           GGML_F16x8_SET1
-    #define GGML_F16_VEC_LOAD(p, i)     GGML_F16x8_LOAD(p)
-    #define GGML_F16_VEC_STORE(p, r, i) GGML_F16x8_STORE((ggml_fp16_internal_t *)(p), r[i])
-    #define GGML_F16_VEC_FMA            GGML_F16x8_FMA
-    #define GGML_F16_VEC_ADD            GGML_F16x8_ADD
-    #define GGML_F16_VEC_MUL            GGML_F16x8_MUL
-    #define GGML_F16_VEC_REDUCE         GGML_F16x8_REDUCE
-#else
-    // if FP16 vector arithmetic is not supported, we use FP32 instead
-    // and take advantage of the vcvt_ functions to convert to/from FP16
-
-    #define GGML_F16_STEP 16
-    #define GGML_F16_EPR  4
-
-    #define GGML_F32Cx4              float32x4_t
-    #define GGML_F32Cx4_ZERO         vdupq_n_f32(0.0f)
-    #define GGML_F32Cx4_SET1(x)      vdupq_n_f32(x)
-    #define GGML_F32Cx4_LOAD(x)      vcvt_f32_f16(vld1_f16((const ggml_fp16_internal_t *)(x)))
-    #define GGML_F32Cx4_STORE(x, y)  vst1_f16(x, vcvt_f16_f32(y))
-    #define GGML_F32Cx4_FMA(a, b, c) vfmaq_f32(a, b, c)
-    #define GGML_F32Cx4_ADD          vaddq_f32
-    #define GGML_F32Cx4_MUL          vmulq_f32
-    #define GGML_F32Cx4_REDUCE       GGML_F32x4_REDUCE
-
-    #define GGML_F16_VEC                GGML_F32Cx4
-    #define GGML_F16_VEC_ZERO           GGML_F32Cx4_ZERO
-    #define GGML_F16_VEC_SET1           GGML_F32Cx4_SET1
-    #define GGML_F16_VEC_LOAD(p, i)     GGML_F32Cx4_LOAD(p)
-    #define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx4_STORE((ggml_fp16_internal_t *)(p), r[i])
-    #define GGML_F16_VEC_FMA            GGML_F32Cx4_FMA
-    #define GGML_F16_VEC_ADD            GGML_F32Cx4_ADD
-    #define GGML_F16_VEC_MUL            GGML_F32Cx4_MUL
-    #define GGML_F16_VEC_REDUCE         GGML_F32Cx4_REDUCE
-#endif
-
-#elif defined(__AVX512F__)
-
-#define GGML_SIMD
-
-// F32 AVX512
-
-#define GGML_F32_STEP 64
-#define GGML_F32_EPR  16
-
-#define GGML_F32x16         __m512
-#define GGML_F32x16_ZERO    _mm512_setzero_ps()
-#define GGML_F32x16_SET1(x) _mm512_set1_ps(x)
-#define GGML_F32x16_LOAD    _mm512_loadu_ps
-#define GGML_F32x16_STORE   _mm512_storeu_ps
-// _mm512_fmadd_ps is defined in AVX512F so no guard is required
-#define GGML_F32x16_FMA(a, b, c) _mm512_fmadd_ps(b, c, a)
-#define GGML_F32x16_ADD     _mm512_add_ps
-#define GGML_F32x16_MUL     _mm512_mul_ps
-#define GGML_F32x16_REDUCE(res, x)                                    \
-do {                                                                  \
-    int offset = GGML_F32_ARR >> 1;                                   \
-    for (int i = 0; i < offset; ++i) {                                \
-        x[i] = _mm512_add_ps(x[i], x[offset+i]);                      \
-    }                                                                 \
-    offset >>= 1;                                                     \
-    for (int i = 0; i < offset; ++i) {                                \
-        x[i] = _mm512_add_ps(x[i], x[offset+i]);                      \
-    }                                                                 \
-    offset >>= 1;                                                     \
-    for (int i = 0; i < offset; ++i) {                                \
-        x[i] = _mm512_add_ps(x[i], x[offset+i]);                      \
-    }                                                                 \
-    res = _mm512_reduce_add_ps(x[0]);                                 \
-} while (0)
-
-// TODO: is this optimal ?
-
-#define GGML_F32_VEC        GGML_F32x16
-#define GGML_F32_VEC_ZERO   GGML_F32x16_ZERO
-#define GGML_F32_VEC_SET1   GGML_F32x16_SET1
-#define GGML_F32_VEC_LOAD   GGML_F32x16_LOAD
-#define GGML_F32_VEC_STORE  GGML_F32x16_STORE
-#define GGML_F32_VEC_FMA    GGML_F32x16_FMA
-#define GGML_F32_VEC_ADD    GGML_F32x16_ADD
-#define GGML_F32_VEC_MUL    GGML_F32x16_MUL
-#define GGML_F32_VEC_REDUCE GGML_F32x16_REDUCE
-
-// F16 AVX512
-
-// F16 AVX
-
-#define GGML_F16_STEP 64
-#define GGML_F16_EPR  16
-
-// AVX512 has FP16 extension (AVX512_FP16) but I don't have it on my machine so I use FP32 instead
-
-#define GGML_F32Cx16             __m512
-#define GGML_F32Cx16_ZERO        _mm512_setzero_ps()
-#define GGML_F32Cx16_SET1(x)     _mm512_set1_ps(x)
-
-// unlike  _mm256_cvt intrinsics that require F16C, _mm512_cvt is defined in AVX512F
-// so F16C guard isn't required
-#define GGML_F32Cx16_LOAD(x)     _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(x)))
-#define GGML_F32Cx16_STORE(x, y) _mm256_storeu_si256((__m256i *)(x), _mm512_cvtps_ph(y, 0))
-
-#define GGML_F32Cx16_FMA(a, b, c) _mm512_fmadd_ps(b, c, a)
-#define GGML_F32Cx16_ADD         _mm512_add_ps
-#define GGML_F32Cx16_MUL         _mm512_mul_ps
-#define GGML_F32Cx16_REDUCE(res, x)                               \
-do {                                                              \
-    int offset = GGML_F32_ARR >> 1;                               \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = _mm512_add_ps(x[i], x[offset+i]);                  \
-    }                                                             \
-    offset >>= 1;                                                 \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = _mm512_add_ps(x[i], x[offset+i]);                  \
-    }                                                             \
-    offset >>= 1;                                                 \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = _mm512_add_ps(x[i], x[offset+i]);                  \
-    }                                                             \
-    res = _mm512_reduce_add_ps(x[0]);                             \
-} while (0)
-
-#define GGML_F16_VEC                GGML_F32Cx16
-#define GGML_F16_VEC_ZERO           GGML_F32Cx16_ZERO
-#define GGML_F16_VEC_SET1           GGML_F32Cx16_SET1
-#define GGML_F16_VEC_LOAD(p, i)     GGML_F32Cx16_LOAD(p)
-#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx16_STORE(p, r[i])
-#define GGML_F16_VEC_FMA            GGML_F32Cx16_FMA
-#define GGML_F16_VEC_ADD            GGML_F32Cx16_ADD
-#define GGML_F16_VEC_MUL            GGML_F32Cx16_MUL
-#define GGML_F16_VEC_REDUCE         GGML_F32Cx16_REDUCE
-
-#elif defined(__AVX__)
-
-#define GGML_SIMD
-
-// F32 AVX
-
-#define GGML_F32_STEP 32
-#define GGML_F32_EPR  8
-
-#define GGML_F32x8         __m256
-#define GGML_F32x8_ZERO    _mm256_setzero_ps()
-#define GGML_F32x8_SET1(x) _mm256_set1_ps(x)
-#define GGML_F32x8_LOAD    _mm256_loadu_ps
-#define GGML_F32x8_STORE   _mm256_storeu_ps
-#if defined(__FMA__)
-    #define GGML_F32x8_FMA(a, b, c) _mm256_fmadd_ps(b, c, a)
-#else
-    #define GGML_F32x8_FMA(a, b, c) _mm256_add_ps(_mm256_mul_ps(b, c), a)
-#endif
-#define GGML_F32x8_ADD     _mm256_add_ps
-#define GGML_F32x8_MUL     _mm256_mul_ps
-#define GGML_F32x8_REDUCE(res, x)                                 \
-do {                                                              \
-    int offset = GGML_F32_ARR >> 1;                               \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = _mm256_add_ps(x[i], x[offset+i]);                  \
-    }                                                             \
-    offset >>= 1;                                                 \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = _mm256_add_ps(x[i], x[offset+i]);                  \
-    }                                                             \
-    offset >>= 1;                                                 \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = _mm256_add_ps(x[i], x[offset+i]);                  \
-    }                                                             \
-    const __m128 t0 = _mm_add_ps(_mm256_castps256_ps128(x[0]),    \
-                                 _mm256_extractf128_ps(x[0], 1)); \
-    const __m128 t1 = _mm_hadd_ps(t0, t0);                        \
-    res = (ggml_float) _mm_cvtss_f32(_mm_hadd_ps(t1, t1));        \
-} while (0)
-// TODO: is this optimal ?
-
-#define GGML_F32_VEC        GGML_F32x8
-#define GGML_F32_VEC_ZERO   GGML_F32x8_ZERO
-#define GGML_F32_VEC_SET1   GGML_F32x8_SET1
-#define GGML_F32_VEC_LOAD   GGML_F32x8_LOAD
-#define GGML_F32_VEC_STORE  GGML_F32x8_STORE
-#define GGML_F32_VEC_FMA    GGML_F32x8_FMA
-#define GGML_F32_VEC_ADD    GGML_F32x8_ADD
-#define GGML_F32_VEC_MUL    GGML_F32x8_MUL
-#define GGML_F32_VEC_REDUCE GGML_F32x8_REDUCE
-
-// F16 AVX
-
-#define GGML_F16_STEP 32
-#define GGML_F16_EPR  8
-
-// F16 arithmetic is not supported by AVX, so we use F32 instead
-
-#define GGML_F32Cx8             __m256
-#define GGML_F32Cx8_ZERO        _mm256_setzero_ps()
-#define GGML_F32Cx8_SET1(x)     _mm256_set1_ps(x)
-
-#if defined(__F16C__)
-// the  _mm256_cvt intrinsics require F16C
-#define GGML_F32Cx8_LOAD(x)     _mm256_cvtph_ps(_mm_loadu_si128((const __m128i *)(x)))
-#define GGML_F32Cx8_STORE(x, y) _mm_storeu_si128((__m128i *)(x), _mm256_cvtps_ph(y, 0))
-#else
-static inline __m256 __avx_f32cx8_load(ggml_fp16_t *x) {
-    float tmp[8];
-
-    for (int i = 0; i < 8; i++) {
-        tmp[i] = GGML_FP16_TO_FP32(x[i]);
-    }
-
-    return _mm256_loadu_ps(tmp);
-}
-static inline void __avx_f32cx8_store(ggml_fp16_t *x, __m256 y) {
-    float arr[8];
-
-    _mm256_storeu_ps(arr, y);
-
-    for (int i = 0; i < 8; i++)
-        x[i] = GGML_FP32_TO_FP16(arr[i]);
-}
-#define GGML_F32Cx8_LOAD(x)     __avx_f32cx8_load(x)
-#define GGML_F32Cx8_STORE(x, y) __avx_f32cx8_store(x, y)
-#endif
-
-#define GGML_F32Cx8_FMA         GGML_F32x8_FMA
-#define GGML_F32Cx8_ADD         _mm256_add_ps
-#define GGML_F32Cx8_MUL         _mm256_mul_ps
-#define GGML_F32Cx8_REDUCE      GGML_F32x8_REDUCE
-
-#define GGML_F16_VEC                GGML_F32Cx8
-#define GGML_F16_VEC_ZERO           GGML_F32Cx8_ZERO
-#define GGML_F16_VEC_SET1           GGML_F32Cx8_SET1
-#define GGML_F16_VEC_LOAD(p, i)     GGML_F32Cx8_LOAD(p)
-#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx8_STORE(p, r[i])
-#define GGML_F16_VEC_FMA            GGML_F32Cx8_FMA
-#define GGML_F16_VEC_ADD            GGML_F32Cx8_ADD
-#define GGML_F16_VEC_MUL            GGML_F32Cx8_MUL
-#define GGML_F16_VEC_REDUCE         GGML_F32Cx8_REDUCE
-
-#elif defined(__POWER9_VECTOR__)
-
-#define GGML_SIMD
-
-// F32 POWER9
-
-#define GGML_F32_STEP 32
-#define GGML_F32_EPR  4
-
-#define GGML_F32x4              vector float
-#define GGML_F32x4_ZERO         0.0f
-#define GGML_F32x4_SET1         vec_splats
-#define GGML_F32x4_LOAD(p)      vec_xl(0, p)
-#define GGML_F32x4_STORE(p, r)  vec_xst(r, 0, p)
-#define GGML_F32x4_FMA(a, b, c) vec_madd(b, c, a)
-#define GGML_F32x4_ADD          vec_add
-#define GGML_F32x4_MUL          vec_mul
-#define GGML_F32x4_REDUCE(res, x)              \
-{                                              \
-    int offset = GGML_F32_ARR >> 1;            \
-    for (int i = 0; i < offset; ++i) {         \
-        x[i] = vec_add(x[i], x[offset+i]);     \
-    }                                          \
-    offset >>= 1;                              \
-    for (int i = 0; i < offset; ++i) {         \
-        x[i] = vec_add(x[i], x[offset+i]);     \
-    }                                          \
-    offset >>= 1;                              \
-    for (int i = 0; i < offset; ++i) {         \
-        x[i] = vec_add(x[i], x[offset+i]);     \
-    }                                          \
-    res = vec_extract(x[0], 0) +               \
-          vec_extract(x[0], 1) +               \
-          vec_extract(x[0], 2) +               \
-          vec_extract(x[0], 3);                \
-}
-
-#define GGML_F32_VEC        GGML_F32x4
-#define GGML_F32_VEC_ZERO   GGML_F32x4_ZERO
-#define GGML_F32_VEC_SET1   GGML_F32x4_SET1
-#define GGML_F32_VEC_LOAD   GGML_F32x4_LOAD
-#define GGML_F32_VEC_STORE  GGML_F32x4_STORE
-#define GGML_F32_VEC_FMA    GGML_F32x4_FMA
-#define GGML_F32_VEC_ADD    GGML_F32x4_ADD
-#define GGML_F32_VEC_MUL    GGML_F32x4_MUL
-#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE
-
-// F16 POWER9
-#define GGML_F16_STEP       GGML_F32_STEP
-#define GGML_F16_EPR        GGML_F32_EPR
-#define GGML_F16_VEC        GGML_F32x4
-#define GGML_F16_VEC_ZERO   GGML_F32x4_ZERO
-#define GGML_F16_VEC_SET1   GGML_F32x4_SET1
-#define GGML_F16_VEC_FMA    GGML_F32x4_FMA
-#define GGML_F16_VEC_ADD    GGML_F32x4_ADD
-#define GGML_F16_VEC_MUL    GGML_F32x4_MUL
-#define GGML_F16_VEC_REDUCE GGML_F32x4_REDUCE
-// Use vec_xl, not vec_ld, in case the load address is not aligned.
-#define GGML_F16_VEC_LOAD(p, i) (i & 0x1) ?                   \
-  vec_extract_fp32_from_shorth(vec_xl(0, p - GGML_F16_EPR)) : \
-  vec_extract_fp32_from_shortl(vec_xl(0, p))
-#define GGML_ENDIAN_BYTE(i) ((unsigned char *)&(uint16_t){1})[i]
-#define GGML_F16_VEC_STORE(p, r, i)                             \
-  if (i & 0x1)                                                  \
-    vec_xst(vec_pack_to_short_fp32(r[i - GGML_ENDIAN_BYTE(1)],  \
-                                   r[i - GGML_ENDIAN_BYTE(0)]), \
-            0, p - GGML_F16_EPR)
-
-#elif defined(__wasm_simd128__)
-
-#define GGML_SIMD
-
-// F32 WASM
-
-#define GGML_F32_STEP 16
-#define GGML_F32_EPR  4
-
-#define GGML_F32x4              v128_t
-#define GGML_F32x4_ZERO         wasm_f32x4_splat(0.0f)
-#define GGML_F32x4_SET1(x)      wasm_f32x4_splat(x)
-#define GGML_F32x4_LOAD         wasm_v128_load
-#define GGML_F32x4_STORE        wasm_v128_store
-#define GGML_F32x4_FMA(a, b, c) wasm_f32x4_add(wasm_f32x4_mul(b, c), a)
-#define GGML_F32x4_ADD          wasm_f32x4_add
-#define GGML_F32x4_MUL          wasm_f32x4_mul
-#define GGML_F32x4_REDUCE(res, x)                  \
-{                                                  \
-    int offset = GGML_F32_ARR >> 1;                \
-    for (int i = 0; i < offset; ++i) {             \
-        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
-    }                                              \
-    offset >>= 1;                                  \
-    for (int i = 0; i < offset; ++i) {             \
-        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
-    }                                              \
-    offset >>= 1;                                  \
-    for (int i = 0; i < offset; ++i) {             \
-        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
-    }                                              \
-    res = wasm_f32x4_extract_lane(x[0], 0) +       \
-          wasm_f32x4_extract_lane(x[0], 1) +       \
-          wasm_f32x4_extract_lane(x[0], 2) +       \
-          wasm_f32x4_extract_lane(x[0], 3);        \
-}
-
-#define GGML_F32_VEC        GGML_F32x4
-#define GGML_F32_VEC_ZERO   GGML_F32x4_ZERO
-#define GGML_F32_VEC_SET1   GGML_F32x4_SET1
-#define GGML_F32_VEC_LOAD   GGML_F32x4_LOAD
-#define GGML_F32_VEC_STORE  GGML_F32x4_STORE
-#define GGML_F32_VEC_FMA    GGML_F32x4_FMA
-#define GGML_F32_VEC_ADD    GGML_F32x4_ADD
-#define GGML_F32_VEC_MUL    GGML_F32x4_MUL
-#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE
-
-// F16 WASM
-
-#define GGML_F16_STEP 16
-#define GGML_F16_EPR  4
-
-inline static v128_t __wasm_f16x4_load(const ggml_fp16_t * p) {
-    float tmp[4];
-
-    tmp[0] = GGML_FP16_TO_FP32(p[0]);
-    tmp[1] = GGML_FP16_TO_FP32(p[1]);
-    tmp[2] = GGML_FP16_TO_FP32(p[2]);
-    tmp[3] = GGML_FP16_TO_FP32(p[3]);
-
-    return wasm_v128_load(tmp);
-}
-
-inline static void __wasm_f16x4_store(ggml_fp16_t * p, v128_t x) {
-    float tmp[4];
-
-    wasm_v128_store(tmp, x);
-
-    p[0] = GGML_FP32_TO_FP16(tmp[0]);
-    p[1] = GGML_FP32_TO_FP16(tmp[1]);
-    p[2] = GGML_FP32_TO_FP16(tmp[2]);
-    p[3] = GGML_FP32_TO_FP16(tmp[3]);
-}
-
-#define GGML_F16x4             v128_t
-#define GGML_F16x4_ZERO        wasm_f32x4_splat(0.0f)
-#define GGML_F16x4_SET1(x)     wasm_f32x4_splat(x)
-#define GGML_F16x4_LOAD(x)     __wasm_f16x4_load(x)
-#define GGML_F16x4_STORE(x, y) __wasm_f16x4_store(x, y)
-#define GGML_F16x4_FMA         GGML_F32x4_FMA
-#define GGML_F16x4_ADD         wasm_f32x4_add
-#define GGML_F16x4_MUL         wasm_f32x4_mul
-#define GGML_F16x4_REDUCE(res, x)                  \
-{                                                  \
-    int offset = GGML_F16_ARR >> 1;                \
-    for (int i = 0; i < offset; ++i) {             \
-        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
-    }                                              \
-    offset >>= 1;                                  \
-    for (int i = 0; i < offset; ++i) {             \
-        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
-    }                                              \
-    offset >>= 1;                                  \
-    for (int i = 0; i < offset; ++i) {             \
-        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
-    }                                              \
-    res = wasm_f32x4_extract_lane(x[0], 0) +       \
-          wasm_f32x4_extract_lane(x[0], 1) +       \
-          wasm_f32x4_extract_lane(x[0], 2) +       \
-          wasm_f32x4_extract_lane(x[0], 3);        \
-}
-
-#define GGML_F16_VEC                GGML_F16x4
-#define GGML_F16_VEC_ZERO           GGML_F16x4_ZERO
-#define GGML_F16_VEC_SET1           GGML_F16x4_SET1
-#define GGML_F16_VEC_LOAD(p, i)     GGML_F16x4_LOAD(p)
-#define GGML_F16_VEC_STORE(p, r, i) GGML_F16x4_STORE(p, r[i])
-#define GGML_F16_VEC_FMA            GGML_F16x4_FMA
-#define GGML_F16_VEC_ADD            GGML_F16x4_ADD
-#define GGML_F16_VEC_MUL            GGML_F16x4_MUL
-#define GGML_F16_VEC_REDUCE         GGML_F16x4_REDUCE
-
-#elif defined(__SSE3__)
-
-#define GGML_SIMD
-
-// F32 SSE
-
-#define GGML_F32_STEP 32
-#define GGML_F32_EPR  4
-
-#define GGML_F32x4         __m128
-#define GGML_F32x4_ZERO    _mm_setzero_ps()
-#define GGML_F32x4_SET1(x) _mm_set1_ps(x)
-#define GGML_F32x4_LOAD    _mm_loadu_ps
-#define GGML_F32x4_STORE   _mm_storeu_ps
-#if defined(__FMA__)
-    // TODO: Does this work?
-    #define GGML_F32x4_FMA(a, b, c) _mm_fmadd_ps(b, c, a)
-#else
-    #define GGML_F32x4_FMA(a, b, c) _mm_add_ps(_mm_mul_ps(b, c), a)
-#endif
-#define GGML_F32x4_ADD     _mm_add_ps
-#define GGML_F32x4_MUL     _mm_mul_ps
-#define GGML_F32x4_REDUCE(res, x)                                 \
-{                                                                 \
-    int offset = GGML_F32_ARR >> 1;                               \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = _mm_add_ps(x[i], x[offset+i]);                     \
-    }                                                             \
-    offset >>= 1;                                                 \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = _mm_add_ps(x[i], x[offset+i]);                     \
-    }                                                             \
-    offset >>= 1;                                                 \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = _mm_add_ps(x[i], x[offset+i]);                     \
-    }                                                             \
-    const __m128 t0 = _mm_hadd_ps(x[0], x[0]);                    \
-    res = (ggml_float) _mm_cvtss_f32(_mm_hadd_ps(t0, t0));        \
-}
-// TODO: is this optimal ?
-
-#define GGML_F32_VEC        GGML_F32x4
-#define GGML_F32_VEC_ZERO   GGML_F32x4_ZERO
-#define GGML_F32_VEC_SET1   GGML_F32x4_SET1
-#define GGML_F32_VEC_LOAD   GGML_F32x4_LOAD
-#define GGML_F32_VEC_STORE  GGML_F32x4_STORE
-#define GGML_F32_VEC_FMA    GGML_F32x4_FMA
-#define GGML_F32_VEC_ADD    GGML_F32x4_ADD
-#define GGML_F32_VEC_MUL    GGML_F32x4_MUL
-#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE
-
-// F16 SSE
-
-#define GGML_F16_STEP 32
-#define GGML_F16_EPR  4
-
-static inline __m128 __sse_f16x4_load(ggml_fp16_t *x) {
-    float tmp[4];
-
-    tmp[0] = GGML_FP16_TO_FP32(x[0]);
-    tmp[1] = GGML_FP16_TO_FP32(x[1]);
-    tmp[2] = GGML_FP16_TO_FP32(x[2]);
-    tmp[3] = GGML_FP16_TO_FP32(x[3]);
-
-    return _mm_loadu_ps(tmp);
-}
-
-static inline void __sse_f16x4_store(ggml_fp16_t *x, __m128 y) {
-    float arr[4];
-
-    _mm_storeu_ps(arr, y);
-
-    x[0] = GGML_FP32_TO_FP16(arr[0]);
-    x[1] = GGML_FP32_TO_FP16(arr[1]);
-    x[2] = GGML_FP32_TO_FP16(arr[2]);
-    x[3] = GGML_FP32_TO_FP16(arr[3]);
-}
-
-#define GGML_F32Cx4             __m128
-#define GGML_F32Cx4_ZERO        _mm_setzero_ps()
-#define GGML_F32Cx4_SET1(x)     _mm_set1_ps(x)
-#define GGML_F32Cx4_LOAD(x)     __sse_f16x4_load(x)
-#define GGML_F32Cx4_STORE(x, y) __sse_f16x4_store(x, y)
-#define GGML_F32Cx4_FMA         GGML_F32x4_FMA
-#define GGML_F32Cx4_ADD         _mm_add_ps
-#define GGML_F32Cx4_MUL         _mm_mul_ps
-#define GGML_F32Cx4_REDUCE      GGML_F32x4_REDUCE
-
-#define GGML_F16_VEC                 GGML_F32Cx4
-#define GGML_F16_VEC_ZERO            GGML_F32Cx4_ZERO
-#define GGML_F16_VEC_SET1            GGML_F32Cx4_SET1
-#define GGML_F16_VEC_LOAD(p, i)      GGML_F32Cx4_LOAD(p)
-#define GGML_F16_VEC_STORE(p, r, i)  GGML_F32Cx4_STORE(p, r[i])
-#define GGML_F16_VEC_FMA             GGML_F32Cx4_FMA
-#define GGML_F16_VEC_ADD             GGML_F32Cx4_ADD
-#define GGML_F16_VEC_MUL             GGML_F32Cx4_MUL
-#define GGML_F16_VEC_REDUCE          GGML_F32Cx4_REDUCE
-
-#elif defined(__loongarch_asx)
-
-#define GGML_SIMD
-
-// F32 LASX
-#define GGML_F32_STEP 32
-#define GGML_F32_EPR  8
-
-#define GGML_F32x8         __m256
-#define GGML_F32x8_ZERO    (__m256)__lasx_xvldi(0)
-#define GGML_F32x8_SET1(x) (__m256)__lasx_xvreplfr2vr_s((x))
-#define GGML_F32x8_LOAD(x) (__m256)__lasx_xvld((x), 0)
-#define GGML_F32x8_STORE(x,y)   __lasx_xvst((y), (x), 0)
-#define GGML_F32x8_FMA(a, b, c) __lasx_xvfmadd_s(b, c, a)
-#define GGML_F32x8_ADD     __lasx_xvfadd_s
-#define GGML_F32x8_MUL     __lasx_xvfmul_s
-#define GGML_F32x8_REDUCE(res, x)                                 \
-do {                                                              \
-    int offset = GGML_F32_ARR >> 1;                               \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = __lasx_xvfadd_s(x[i], x[offset+i]);                  \
-    }                                                             \
-    offset >>= 1;                                                 \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = __lasx_xvfadd_s(x[i], x[offset+i]);                  \
-    }                                                             \
-    offset >>= 1;                                                 \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = __lasx_xvfadd_s(x[i], x[offset+i]);                  \
-    }                                                             \
-    float *tmp_p = (float *)&x[0]; \
-    res = tmp_p[0] + tmp_p[1] + tmp_p[2] + tmp_p[3] + tmp_p[4] + tmp_p[5] + tmp_p[6] + tmp_p[7];  \
-} while (0)
-// TODO: is this optimal ?
-
-#define GGML_F32_VEC        GGML_F32x8
-#define GGML_F32_VEC_ZERO   GGML_F32x8_ZERO
-#define GGML_F32_VEC_SET1   GGML_F32x8_SET1
-#define GGML_F32_VEC_LOAD   GGML_F32x8_LOAD
-#define GGML_F32_VEC_STORE  GGML_F32x8_STORE
-#define GGML_F32_VEC_FMA    GGML_F32x8_FMA
-#define GGML_F32_VEC_ADD    GGML_F32x8_ADD
-#define GGML_F32_VEC_MUL    GGML_F32x8_MUL
-#define GGML_F32_VEC_REDUCE GGML_F32x8_REDUCE
-
-// F16 LASX
-
-#define GGML_F16_STEP 32
-#define GGML_F16_EPR  8
-
-// F16 arithmetic is not supported by AVX, so we use F32 instead
-
-#define GGML_F32Cx8          __m256
-#define GGML_F32Cx8_ZERO    (__m256)__lasx_xvldi(0)
-#define GGML_F32Cx8_SET1(x) (__m256)__lasx_xvreplgr2vr_w((x))
-
-static inline __m256 __lasx_f32cx8_load(const ggml_fp16_t * x) {
-    float tmp[8];
-
-    for (int i = 0; i < 8; i++) {
-        tmp[i] = GGML_FP16_TO_FP32(x[i]);
-    }
-
-    return (__m256)__lasx_xvld(tmp, 0);
-}
-static inline void __lasx_f32cx8_store(ggml_fp16_t * x, __m256 y) {
-    float arr[8];
-
-    __lasx_xvst(y, arr, 0);
-
-    for (int i = 0; i < 8; i++) {
-        x[i] = GGML_FP32_TO_FP16(arr[i]);
-    }
-}
-#define GGML_F32Cx8_LOAD(x)     __lasx_f32cx8_load(x)
-#define GGML_F32Cx8_STORE(x, y) __lasx_f32cx8_store(x, y)
-
-#define GGML_F32Cx8_FMA         GGML_F32x8_FMA
-#define GGML_F32Cx8_ADD         __lasx_xvfadd_s
-#define GGML_F32Cx8_MUL         __lasx_xvfmul_s
-#define GGML_F32Cx8_REDUCE      GGML_F32x8_REDUCE
-
-#define GGML_F16_VEC                GGML_F32Cx8
-#define GGML_F16_VEC_ZERO           GGML_F32Cx8_ZERO
-#define GGML_F16_VEC_SET1           GGML_F32Cx8_SET1
-#define GGML_F16_VEC_LOAD(p, i)     GGML_F32Cx8_LOAD(p)
-#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx8_STORE(p, r[i])
-#define GGML_F16_VEC_FMA            GGML_F32Cx8_FMA
-#define GGML_F16_VEC_ADD            GGML_F32Cx8_ADD
-#define GGML_F16_VEC_MUL            GGML_F32Cx8_MUL
-#define GGML_F16_VEC_REDUCE         GGML_F32Cx8_REDUCE
-
-#elif defined(__loongarch_sx)
-
-#define GGML_SIMD
-
-// F32 LSX
-
-#define GGML_F32_STEP 32
-#define GGML_F32_EPR  4
-
-#define GGML_F32x4         __m128
-#define GGML_F32x4_ZERO    __lsx_vldi(0)
-#define GGML_F32x4_SET1(x) __lsx_vinsgr2vr_w(__lsx_vldi(0),(x), 0)
-#define GGML_F32x4_LOAD(x) __lsx_vld((x), 0)
-#define GGML_F32x4_STORE((x),(y))   __lsx_vst((y), (x), 0)
-#define GGML_F32x4_FMA(a, b, c) __lsx_vfmadd_s(b, c, a)
-#define GGML_F32x4_ADD     __lsx_vfadd_s
-#define GGML_F32x4_MUL     __lsx_vfmul_s
-#define GGML_F32x4_REDUCE(res, x)                                 \
-{                                                                 \
-    int offset = GGML_F32_ARR >> 1;                               \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = __lsx_vfadd_s(x[i], x[offset+i]);                     \
-    }                                                             \
-    offset >>= 1;                                                 \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = __lsx_vfadd_s(x[i], x[offset+i]);                     \
-    }                                                             \
-    offset >>= 1;                                                 \
-    for (int i = 0; i < offset; ++i) {                            \
-        x[i] = __lsx_vfadd_s(x[i], x[offset+i]);                     \
-    }                                                             \
-    __m128i tmp = __lsx_vsrli_d((__m128i)x[0], 32); \
-    tmp = (__m128i)__lsx_vfadd_s((__m128)tmp, x[0]); \
-    tmp = __lsx_vpickev_w(__lsx_vldi(0), tmp); \
-    const __m128 t0 = __lsx_vshuf4i_w(tmp, 0x88); \
-    tmp = __lsx_vsrli_d((__m128i)t0, 32); \
-    tmp = (__m128i)__lsx_vfadd_s((__m128)tmp, t0); \
-    tmp = __lsx_vpickev_w(__lsx_vldi(0), tmp); \
-    res = (ggml_float) __lsx_vpickve2gr_w(__lsx_vshuf4i_w(tmp, 0x88), 0);        \
-}
-
-#define GGML_F32_VEC        GGML_F32x4
-#define GGML_F32_VEC_ZERO   GGML_F32x4_ZERO
-#define GGML_F32_VEC_SET1   GGML_F32x4_SET1
-#define GGML_F32_VEC_LOAD   GGML_F32x4_LOAD
-#define GGML_F32_VEC_STORE  GGML_F32x4_STORE
-#define GGML_F32_VEC_FMA    GGML_F32x4_FMA
-#define GGML_F32_VEC_ADD    GGML_F32x4_ADD
-#define GGML_F32_VEC_MUL    GGML_F32x4_MUL
-#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE
-
-// F16 LSX
-
-#define GGML_F16_STEP 32
-#define GGML_F16_EPR  4
-
-static inline __m128 __lsx_f16x4_load(const ggml_fp16_t * x) {
-    float tmp[4];
-
-    tmp[0] = GGML_FP16_TO_FP32(x[0]);
-    tmp[1] = GGML_FP16_TO_FP32(x[1]);
-    tmp[2] = GGML_FP16_TO_FP32(x[2]);
-    tmp[3] = GGML_FP16_TO_FP32(x[3]);
-
-    return __lsx_vld(tmp, 0);
-}
-
-static inline void __lsx_f16x4_store(ggml_fp16_t * x, __m128 y) {
-    float arr[4];
-
-    __lsx_vst(y, arr, 0);
-
-    x[0] = GGML_FP32_TO_FP16(arr[0]);
-    x[1] = GGML_FP32_TO_FP16(arr[1]);
-    x[2] = GGML_FP32_TO_FP16(arr[2]);
-    x[3] = GGML_FP32_TO_FP16(arr[3]);
-}
-
-#define GGML_F32Cx4             __m128
-#define GGML_F32Cx4_ZERO        __lsx_vldi(0)
-#define GGML_F32Cx4_SET1(x)     __lsx_vinsgr2vr_w(__lsx_vldi(0),(x), 0)
-#define GGML_F32Cx4_LOAD(x)     __lsx_f16x4_load(x)
-#define GGML_F32Cx4_STORE(x, y) __lsx_f16x4_store(x, y)
-#define GGML_F32Cx4_FMA         GGML_F32x4_FMA
-#define GGML_F32Cx4_ADD         __lsx_vfadd_s
-#define GGML_F32Cx4_MUL         __lsx_vfmul_s
-#define GGML_F32Cx4_REDUCE      GGML_F32x4_REDUCE
-
-#define GGML_F16_VEC                 GGML_F32Cx4
-#define GGML_F16_VEC_ZERO            GGML_F32Cx4_ZERO
-#define GGML_F16_VEC_SET1            GGML_F32Cx4_SET1
-#define GGML_F16_VEC_LOAD(p, i)      GGML_F32Cx4_LOAD(p)
-#define GGML_F16_VEC_STORE(p, r, i)  GGML_F32Cx4_STORE(p, r[i])
-#define GGML_F16_VEC_FMA             GGML_F32Cx4_FMA
-#define GGML_F16_VEC_ADD             GGML_F32Cx4_ADD
-#define GGML_F16_VEC_MUL             GGML_F32Cx4_MUL
-#define GGML_F16_VEC_REDUCE          GGML_F32Cx4_REDUCE
-
-#endif
-
-// GGML_F32_ARR / GGML_F16_ARR
-//   number of registers to use per step
-#ifdef GGML_SIMD
-#define GGML_F32_ARR (GGML_F32_STEP/GGML_F32_EPR)
-#define GGML_F16_ARR (GGML_F16_STEP/GGML_F16_EPR)
-#endif
-
-//
-// ggml context
-//
-
-struct ggml_context {
-    size_t mem_size;
-    void* mem_buffer;
-    bool   mem_buffer_owned;
-    bool   no_alloc;
-    bool   no_alloc_save; // this is used to save the no_alloc state when using scratch buffers
-
-    int    n_objects;
-
-    struct ggml_object* objects_begin;
-    struct ggml_object* objects_end;
-
-    struct ggml_scratch scratch;
-    struct ggml_scratch scratch_save;
-};
-
-struct ggml_context_container {
-    bool used;
-
-    struct ggml_context context;
-};
-
-struct ggml_compute_state_shared {
-    const struct ggml_cgraph* cgraph;
-    const struct ggml_cplan* cplan;
-
-    int64_t perf_node_start_cycles;
-    int64_t perf_node_start_time_us;
-
-    int n_threads;
-
-    // synchronization primitives
-    atomic_int n_active;  // num active threads
-    atomic_int node_n;    // active graph node
-    atomic_int node_task; // active graph node task phase
-
-    ggml_abort_callback abort_callback; // abort ggml_graph_compute when true
-    void* abort_callback_data;
-
-    atomic_int current_chunk; // currently processing chunk during Mat_Mul, shared between all the threads.
-};
-
-struct ggml_compute_state {
-    ggml_thread_t thrd;
-    int ith;
-    struct ggml_compute_state_shared* shared;
-    enum ggml_status ec;
-};
-
-//
-// fundamental operations
-//
-
-inline static void ggml_vec_set_i8(const int n, int8_t * x, const int8_t v) { for (int i = 0; i < n; ++i) x[i] = v; }
-
-inline static void ggml_vec_set_i16(const int n, int16_t * x, const int16_t v) { for (int i = 0; i < n; ++i) x[i] = v; }
-
-inline static void ggml_vec_set_i32(const int n, int32_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; }
-
-inline static void ggml_vec_set_f16(const int n, ggml_fp16_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; }
-
-inline static void ggml_vec_set_bf16(const int n, ggml_bf16_t * x, const ggml_bf16_t v) { for (int i = 0; i < n; ++i) x[i] = v; }
-
-inline static void ggml_vec_add_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i]  = x[i] + y[i]; }
-inline static void ggml_vec_add1_f32(const int n, float * z, const float * x, const float   v) { for (int i = 0; i < n; ++i) z[i]  = x[i] + v;    }
-inline static void ggml_vec_acc_f32 (const int n, float * y, const float * x)                  { for (int i = 0; i < n; ++i) y[i] += x[i];        }
-inline static void ggml_vec_acc1_f32(const int n, float * y, const float   v)                  { for (int i = 0; i < n; ++i) y[i] += v;           }
-inline static void ggml_vec_sub_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i]  = x[i] - y[i]; }
-inline static void ggml_vec_set_f32 (const int n, float * x, const float   v)                  { for (int i = 0; i < n; ++i) x[i]  = v;           }
-inline static void ggml_vec_cpy_f32 (const int n, float * y, const float * x)                  { for (int i = 0; i < n; ++i) y[i]  = x[i];        }
-inline static void ggml_vec_neg_f32 (const int n, float * y, const float * x)                  { for (int i = 0; i < n; ++i) y[i]  = -x[i];       }
-inline static void ggml_vec_mul_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i]  = x[i]*y[i];   }
-inline static void ggml_vec_div_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i]  = x[i]/y[i];   }
-
-static void ggml_vec_dot_f32(int n, float * restrict s, size_t bs, const float * restrict x, size_t bx, const float * restrict y, size_t by, int nrc) {
-   assert(nrc == 1);
-   UNUSED(nrc);
-   UNUSED(bx);
-   UNUSED(by);
-   UNUSED(bs);
-
-#if defined(GGML_SIMD)
-    float sumf = 0.0f;
-    const int np = (n & ~(GGML_F32_STEP - 1));
-
-    GGML_F32_VEC sum[GGML_F32_ARR] = { GGML_F32_VEC_ZERO };
-
-    GGML_F32_VEC ax[GGML_F32_ARR];
-    GGML_F32_VEC ay[GGML_F32_ARR];
-
-    for (int i = 0; i < np; i += GGML_F32_STEP) {
-        for (int j = 0; j < GGML_F32_ARR; j++) {
-            ax[j] = GGML_F32_VEC_LOAD(x + i + j*GGML_F32_EPR);
-            ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR);
-
-            sum[j] = GGML_F32_VEC_FMA(sum[j], ax[j], ay[j]);
-        }
-    }
-
-    // reduce sum0..sum3 to sum0
-    GGML_F32_VEC_REDUCE(sumf, sum);
-
-    // leftovers
-    for (int i = np; i < n; ++i) {
-        sumf += x[i]*y[i];
-    }
-#else
-    // scalar
-    ggml_float sumf = 0.0;
-    for (int i = 0; i < n; ++i) {
-        sumf += (ggml_float)(x[i]*y[i]);
-    }
-#endif
-
-    *s = sumf;
-}
-
-static void ggml_vec_dot_bf16(int n, float * restrict s, size_t bs, ggml_bf16_t * restrict x, size_t bx, ggml_bf16_t * restrict y, size_t by, int nrc) {
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-    int i = 0;
-    ggml_float sumf = 0;
-
-#if defined(__AVX512BF16__)
-    __m512 c1 = _mm512_setzero_ps();
-    __m512 c2 = _mm512_setzero_ps();
-    for (; i + 64 <= n; i += 64) {
-        c1 = _mm512_dpbf16_ps(c1, m512bh(_mm512_loadu_si512((x + i))),
-                             m512bh(_mm512_loadu_si512((y + i))));
-        c2 = _mm512_dpbf16_ps(c2, m512bh(_mm512_loadu_si512((x + i + 32))),
-                             m512bh(_mm512_loadu_si512((y + i + 32))));
-    }
-    sumf += (ggml_float)_mm512_reduce_add_ps(c1);
-    sumf += (ggml_float)_mm512_reduce_add_ps(c2);
-
-#elif defined(__AVX512F__)
-#define LOAD(p) _mm512_castsi512_ps(_mm512_slli_epi32(_mm512_cvtepu16_epi32(_mm256_loadu_si256((const __m256i *)(p))), 16))
-    __m512 c1 = _mm512_setzero_ps();
-    __m512 c2 = _mm512_setzero_ps();
-    for (; i + 32 <= n; i += 32) {
-        c1 = _mm512_add_ps(_mm512_mul_ps(LOAD(x + i), LOAD(y + i)), c1);
-        c2 = _mm512_add_ps(_mm512_mul_ps(LOAD(x + i + 16), LOAD(y + i + 16)), c2);
-    }
-    sumf += (ggml_float)_mm512_reduce_add_ps(c1);
-    sumf += (ggml_float)_mm512_reduce_add_ps(c2);
-
-#undef LOAD
-#elif defined(__AVX2__)
-#define LOAD(p) _mm256_castsi256_ps(_mm256_slli_epi32(_mm256_cvtepu16_epi32(_mm_loadu_si128((const __m128i *)(p))), 16))
-    __m256 c1 = _mm256_setzero_ps();
-    __m256 c2 = _mm256_setzero_ps();
-    __m256 c3 = _mm256_setzero_ps();
-    __m256 c4 = _mm256_setzero_ps();
-    for (; i + 32 <= n; i += 32) {
-        c1 = _mm256_add_ps(_mm256_mul_ps(LOAD(x + i), LOAD(y + i)), c1);
-        c2 = _mm256_add_ps(_mm256_mul_ps(LOAD(x + i + 8), LOAD(y + i + 8)), c2);
-        c3 = _mm256_add_ps(_mm256_mul_ps(LOAD(x + i + 16), LOAD(y + i + 16)), c3);
-        c4 = _mm256_add_ps(_mm256_mul_ps(LOAD(x + i + 24), LOAD(y + i + 24)), c4);
-    }
-    __m128 g;
-    c1 = _mm256_add_ps(_mm256_add_ps(c1, c3),
-                       _mm256_add_ps(c2, c4));
-    g = _mm_add_ps(_mm256_extractf128_ps(c1, 1),
-                   _mm256_castps256_ps128(c1));
-    g = _mm_add_ps(g, _mm_movehl_ps(g, g));
-    g = _mm_add_ss(g, _mm_movehdup_ps(g));
-    sumf += (ggml_float)_mm_cvtss_f32(g);
-
-#undef LOAD
-#endif
-
-    for (; i < n; ++i) {
-        sumf += (ggml_float)(GGML_BF16_TO_FP32(x[i]) *
-                             GGML_BF16_TO_FP32(y[i]));
-    }
-    *s = sumf;
-}
-
-static void ggml_vec_dot_f16(int n, float * restrict s, size_t bs, ggml_fp16_t * restrict x, size_t bx, ggml_fp16_t * restrict y, size_t by, int nrc) {
-    assert(nrc == 1);
-    UNUSED(nrc);
-    UNUSED(bx);
-    UNUSED(by);
-    UNUSED(bs);
-
-    ggml_float sumf = 0.0;
-
-#if defined(GGML_SIMD)
-    const int np = (n & ~(GGML_F16_STEP - 1));
-
-    GGML_F16_VEC sum[GGML_F16_ARR] = { GGML_F16_VEC_ZERO };
-
-    GGML_F16_VEC ax[GGML_F16_ARR];
-    GGML_F16_VEC ay[GGML_F16_ARR];
-
-    for (int i = 0; i < np; i += GGML_F16_STEP) {
-        for (int j = 0; j < GGML_F16_ARR; j++) {
-            ax[j] = GGML_F16_VEC_LOAD(x + i + j*GGML_F16_EPR, j);
-            ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j);
-
-            sum[j] = GGML_F16_VEC_FMA(sum[j], ax[j], ay[j]);
-        }
-    }
-
-    // reduce sum0..sum3 to sum0
-    GGML_F16_VEC_REDUCE(sumf, sum);
-
-    // leftovers
-    for (int i = np; i < n; ++i) {
-        sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i]));
-    }
-#else
-    for (int i = 0; i < n; ++i) {
-        sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i]));
-    }
-#endif
-
-    *s = sumf;
-}
-
-// compute GGML_VEC_DOT_UNROLL dot products at once
-// xs - x row stride in bytes
-inline static void ggml_vec_dot_f16_unroll(const int n, const int xs, float * restrict s, void * restrict xv, ggml_fp16_t * restrict y) {
-    ggml_float sumf[GGML_VEC_DOT_UNROLL] = { 0.0 };
-
-    ggml_fp16_t * restrict x[GGML_VEC_DOT_UNROLL];
-
-    for (int i = 0; i < GGML_VEC_DOT_UNROLL; ++i) {
-        x[i] = (ggml_fp16_t *) ((char *) xv + i*xs);
-    }
-
-#if defined(GGML_SIMD)
-    const int np = (n & ~(GGML_F16_STEP - 1));
-
-    GGML_F16_VEC sum[GGML_VEC_DOT_UNROLL][GGML_F16_ARR] = { { GGML_F16_VEC_ZERO } };
-
-    GGML_F16_VEC ax[GGML_F16_ARR];
-    GGML_F16_VEC ay[GGML_F16_ARR];
-
-    for (int i = 0; i < np; i += GGML_F16_STEP) {
-        for (int j = 0; j < GGML_F16_ARR; j++) {
-            ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j);
-
-            for (int k = 0; k < GGML_VEC_DOT_UNROLL; ++k) {
-                ax[j] = GGML_F16_VEC_LOAD(x[k] + i + j*GGML_F16_EPR, j);
-
-                sum[k][j] = GGML_F16_VEC_FMA(sum[k][j], ax[j], ay[j]);
-            }
-        }
-    }
-
-    // reduce sum0..sum3 to sum0
-    for (int k = 0; k < GGML_VEC_DOT_UNROLL; ++k) {
-        GGML_F16_VEC_REDUCE(sumf[k], sum[k]);
-    }
-
-    // leftovers
-    for (int i = np; i < n; ++i) {
-        for (int j = 0; j < GGML_VEC_DOT_UNROLL; ++j) {
-            sumf[j] += (ggml_float)(GGML_FP16_TO_FP32(x[j][i])*GGML_FP16_TO_FP32(y[i]));
-        }
-    }
-#else
-    for (int i = 0; i < n; ++i) {
-        for (int j = 0; j < GGML_VEC_DOT_UNROLL; ++j) {
-            sumf[j] += (ggml_float)(GGML_FP16_TO_FP32(x[j][i])*GGML_FP16_TO_FP32(y[i]));
-        }
-    }
-#endif
-
-    for (int i = 0; i < GGML_VEC_DOT_UNROLL; ++i) {
-        s[i] = sumf[i];
-    }
-}
-
-inline static void ggml_vec_mad_f32(const int n, float * restrict y, const float * restrict x, const float v) {
-#if defined(GGML_SIMD)
-    const int np = (n & ~(GGML_F32_STEP - 1));
-
-    GGML_F32_VEC vx = GGML_F32_VEC_SET1(v);
-
-    GGML_F32_VEC ax[GGML_F32_ARR];
-    GGML_F32_VEC ay[GGML_F32_ARR];
-
-    for (int i = 0; i < np; i += GGML_F32_STEP) {
-        for (int j = 0; j < GGML_F32_ARR; j++) {
-            ax[j] = GGML_F32_VEC_LOAD(x + i + j*GGML_F32_EPR);
-            ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR);
-            ay[j] = GGML_F32_VEC_FMA(ay[j], ax[j], vx);
-
-            GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]);
-        }
-    }
-
-    // leftovers
-    for (int i = np; i < n; ++i) {
-        y[i] += x[i]*v;
-    }
-#else
-    // scalar
-    for (int i = 0; i < n; ++i) {
-        y[i] += x[i]*v;
-    }
-#endif
-}
-
-inline static void ggml_vec_mad_f16(const int n, ggml_fp16_t * restrict y, const ggml_fp16_t * restrict x, const float v) {
-#if defined(GGML_SIMD)
-    const int np = (n & ~(GGML_F16_STEP - 1));
-
-    GGML_F16_VEC vx = GGML_F16_VEC_SET1(v);
-
-    GGML_F16_VEC ax[GGML_F16_ARR];
-    GGML_F16_VEC ay[GGML_F16_ARR];
-
-    for (int i = 0; i < np; i += GGML_F16_STEP) {
-        for (int j = 0; j < GGML_F16_ARR; j++) {
-            ax[j] = GGML_F16_VEC_LOAD(x + i + j*GGML_F16_EPR, j);
-            ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j);
-            ay[j] = GGML_F16_VEC_FMA(ay[j], ax[j], vx);
-
-            GGML_F16_VEC_STORE(y + i + j*GGML_F16_EPR, ay, j);
-        }
-    }
-
-    // leftovers
-    for (int i = np; i < n; ++i) {
-        y[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(y[i]) + GGML_FP16_TO_FP32(x[i])*v);
-    }
-#else
-    // scalar
-    for (int i = 0; i < n; ++i) {
-        y[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(y[i]) + GGML_FP16_TO_FP32(x[i])*v);
-    }
-#endif
-}
-
-// xs and vs are byte strides of x and v
-inline static void ggml_vec_mad_f32_unroll(const int n, const int xs, const int vs, float * restrict y, const float * restrict xv, const float * restrict vv) {
-
-    const float * restrict x[GGML_VEC_MAD_UNROLL];
-    const float * restrict v[GGML_VEC_MAD_UNROLL];
-
-    for (int i = 0; i < GGML_VEC_MAD_UNROLL; ++i) {
-        x[i] = (const float *) ((const char *) xv + i*xs);
-        v[i] = (const float *) ((const char *) vv + i*vs);
-    }
-
-#if defined(GGML_SIMD)
-    const int np = (n & ~(GGML_F32_STEP - 1));
-
-    GGML_F32_VEC vx[GGML_VEC_MAD_UNROLL];
-
-    for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) {
-        vx[k] = GGML_F32_VEC_SET1(v[k][0]);
-    }
-
-    GGML_F32_VEC ax[GGML_VEC_MAD_UNROLL][GGML_F32_ARR];
-    GGML_F32_VEC ay[GGML_F32_ARR];
-
-    for (int i = 0; i < np; i += GGML_F32_STEP) {
-        for (int j = 0; j < GGML_F32_ARR; j++) {
-            ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR);
-
-            for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) {
-                ax[k][j] = GGML_F32_VEC_LOAD(x[k] + i + j*GGML_F32_EPR);
-                ay[j] = GGML_F32_VEC_FMA(ay[j], ax[k][j], vx[k]);
-            }
-
-            GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]);
-        }
-    }
-
-    // leftovers
-    for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) {
-        for (int i = np; i < n; ++i) {
-            y[i] += x[k][i]*v[k][0];
-        }
-    }
-#else
-    // scalar
-    for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) {
-        for (int i = 0; i < n; ++i) {
-            y[i] += x[k][i]*v[k][0];
-        }
-    }
-#endif
-}
-
-//inline static void ggml_vec_scale_f32(const int n, float * y, const float   v) { for (int i = 0; i < n; ++i) y[i] *= v;          }
-inline static void ggml_vec_scale_f32(const int n, float * y, const float   v) {
-#if defined(GGML_USE_ACCELERATE)
-    vDSP_vsmul(y, 1, &v, y, 1, n);
-#elif defined(GGML_SIMD)
-    const int np = (n & ~(GGML_F32_STEP - 1));
-
-    GGML_F32_VEC vx = GGML_F32_VEC_SET1(v);
-
-    GGML_F32_VEC ay[GGML_F32_ARR];
-
-    for (int i = 0; i < np; i += GGML_F32_STEP) {
-        for (int j = 0; j < GGML_F32_ARR; j++) {
-            ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR);
-            ay[j] = GGML_F32_VEC_MUL(ay[j], vx);
-
-            GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]);
-        }
-    }
-
-    // leftovers
-    for (int i = np; i < n; ++i) {
-        y[i] *= v;
-    }
-#else
-    // scalar
-    for (int i = 0; i < n; ++i) {
-        y[i] *= v;
-    }
-#endif
-}
-
-inline static void ggml_vec_scale_f16(const int n, ggml_fp16_t * y, const float v) {
-#if defined(GGML_SIMD)
-    const int np = (n & ~(GGML_F16_STEP - 1));
-
-    GGML_F16_VEC vx = GGML_F16_VEC_SET1(v);
-
-    GGML_F16_VEC ay[GGML_F16_ARR];
-
-    for (int i = 0; i < np; i += GGML_F16_STEP) {
-        for (int j = 0; j < GGML_F16_ARR; j++) {
-            ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j);
-            ay[j] = GGML_F16_VEC_MUL(ay[j], vx);
-
-            GGML_F16_VEC_STORE(y + i + j*GGML_F16_EPR, ay, j);
-        }
-    }
-
-    // leftovers
-    for (int i = np; i < n; ++i) {
-        y[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(y[i])*v);
-    }
-#else
-    // scalar
-    for (int i = 0; i < n; ++i) {
-        y[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(y[i])*v);
-    }
-#endif
-}
-
-inline static void ggml_vec_norm_f32 (const int n, float * s, const float * x) { ggml_vec_dot_f32(n, s, 0, x, 0, x, 0, 1); *s = sqrtf(*s);   }
-inline static void ggml_vec_sqr_f32  (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i]*x[i];   }
-inline static void ggml_vec_sqrt_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = sqrtf(x[i]); }
-inline static void ggml_vec_log_f32  (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = logf(x[i]);   }
-inline static void ggml_vec_abs_f32  (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = fabsf(x[i]); }
-inline static void ggml_vec_sgn_f32  (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? 1.f : ((x[i] < 0.f) ? -1.f : 0.f); }
-inline static void ggml_vec_step_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? 1.f : 0.f; }
-inline static void ggml_vec_tanh_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = tanhf(x[i]);  }
-inline static void ggml_vec_elu_f32  (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? x[i] : expf(x[i])-1; }
-inline static void ggml_vec_relu_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? x[i] : 0.f; }
-inline static void ggml_vec_leaky_relu_f32 (const int n, float * y, const float * x, const float ns) { for (int i = 0; i < n; ++i) y[i] = ((x[i] > 0.f) ? x[i] : 0.f) + ns * ((x[i] < 0.0f) ? x[i] : 0.f); }
-inline static void ggml_vec_sigmoid_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = 1.f / (1.f + expf(-x[i])); }
-// TODO: optimize performance
-inline static void ggml_vec_hardswish_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i] * fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f)); }
-inline static void ggml_vec_hardsigmoid_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f)); }
-
-static const float GELU_COEF_A     = 0.044715f;
-static const float GELU_QUICK_COEF = -1.702f;
-static const float SQRT_2_OVER_PI  = 0.79788456080286535587989211986876f;
-
-inline static float ggml_gelu_f32(float x) {
-    return 0.5f*x*(1.0f + tanhf(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x)));
-}
-
-inline static void ggml_vec_gelu_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) {
-    const uint16_t * i16 = (const uint16_t *) x;
-    for (int i = 0; i < n; ++i) {
-        y[i] = ggml_table_gelu_f16[i16[i]];
-    }
-}
-
-#ifdef GGML_GELU_FP16
-inline static void ggml_vec_gelu_f32(const int n, float * y, const float * x) {
-    uint16_t t;
-    for (int i = 0; i < n; ++i) {
-        if (x[i] <= -10.0f) {
-            y[i] = 0.0f;
-        } else if (x[i] >= 10.0f) {
-            y[i] = x[i];
-        } else {
-            ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]);
-            memcpy(&t, &fp16, sizeof(uint16_t));
-            y[i] = GGML_FP16_TO_FP32(ggml_table_gelu_f16[t]);
-        }
-    }
-}
-#else
-inline static void ggml_vec_gelu_f32(const int n, float * y, const float * x) {
-    for (int i = 0; i < n; ++i) {
-        y[i] = ggml_gelu_f32(x[i]);
-    }
-}
-#endif
-
-inline static float ggml_gelu_quick_f32(float x) {
-    return x*(1.0f/(1.0f+expf(GELU_QUICK_COEF*x)));
-}
-
-//inline static void ggml_vec_gelu_quick_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) {
-//    const uint16_t * i16 = (const uint16_t *) x;
-//    for (int i = 0; i < n; ++i) {
-//        y[i] = ggml_table_gelu_quick_f16[i16[i]];
-//    }
-//}
-
-#ifdef GGML_GELU_QUICK_FP16
-inline static void ggml_vec_gelu_quick_f32(const int n, float * y, const float * x) {
-    uint16_t t;
-    for (int i = 0; i < n; ++i) {
-        ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]);
-        memcpy(&t, &fp16, sizeof(uint16_t));
-        y[i] = GGML_FP16_TO_FP32(ggml_table_gelu_quick_f16[t]);
-    }
-}
-#else
-inline static void ggml_vec_gelu_quick_f32(const int n, float * y, const float * x) {
-    for (int i = 0; i < n; ++i) {
-        y[i] = ggml_gelu_quick_f32(x[i]);
-    }
-}
-#endif
-
-// Sigmoid Linear Unit (SiLU) function
-inline static float ggml_silu_f32(float x) {
-    return x/(1.0f + expf(-x));
-}
-
-#if __FINITE_MATH_ONLY__
-#error "some routines in ggml.c require non-finite math arithmetics -- pass -fno-finite-math-only to the compiler to fix"
-#error "ref: https://github.com/ggerganov/llama.cpp/pull/7154#issuecomment-2143844461"
-#endif
-
-#if defined(__ARM_NEON) && defined(__aarch64__)
-
-// adapted from arm limited optimized routine
-// the maximum error is 1.45358 plus 0.5 ulps
-// numbers above 88.38 will flush to infinity
-// numbers beneath -103.97 will flush to zero
-inline static float32x4_t ggml_v_expf(float32x4_t x) {
-    const float32x4_t r = vdupq_n_f32(0x1.8p23f);
-    const float32x4_t z = vfmaq_f32(r, x, vdupq_n_f32(0x1.715476p+0f));
-    const float32x4_t n = vsubq_f32(z, r);
-    const float32x4_t b = vfmsq_f32(vfmsq_f32(x, n, vdupq_n_f32(0x1.62e4p-1f)), n,
-                                    vdupq_n_f32(0x1.7f7d1cp-20f));
-    const uint32x4_t e = vshlq_n_u32(vreinterpretq_u32_f32(z), 23);
-    const float32x4_t k = vreinterpretq_f32_u32(vaddq_u32(e, vreinterpretq_u32_f32(vdupq_n_f32(1))));
-    const uint32x4_t c = vcagtq_f32(n, vdupq_n_f32(126));
-    const float32x4_t u = vmulq_f32(b, b);
-    const float32x4_t j = vfmaq_f32(
-        vmulq_f32(vdupq_n_f32(0x1.ffffecp-1f), b),
-        vfmaq_f32(vfmaq_f32(vdupq_n_f32(0x1.fffdb6p-2f), vdupq_n_f32(0x1.555e66p-3f), b),
-                  vfmaq_f32(vdupq_n_f32(0x1.573e2ep-5f), vdupq_n_f32(0x1.0e4020p-7f), b), u), u);
-    if (!vpaddd_u64(vreinterpretq_u64_u32(c)))
-        return vfmaq_f32(k, j, k);
-    const uint32x4_t d = vandq_u32(vclezq_f32(n), vdupq_n_u32(0x82000000));
-    const float32x4_t s1 = vreinterpretq_f32_u32(vaddq_u32(d, vdupq_n_u32(0x7f000000)));
-    const float32x4_t s2 = vreinterpretq_f32_u32(vsubq_u32(e, d));
-    return vbslq_f32(vcagtq_f32(n, vdupq_n_f32(192)), vmulq_f32(s1, s1),
-                     vbslq_f32(c, vmulq_f32(vfmaq_f32(s2, s2, j), s1), vfmaq_f32(k, k, j)));
-}
-
-// computes silu x/(1+exp(-x)) in single precision vector
-inline static float32x4_t ggml_v_silu(float32x4_t x) {
-    const float32x4_t one = vdupq_n_f32(1.0f);
-    const float32x4_t zero = vdupq_n_f32(0.0f);
-    const float32x4_t neg_x = vsubq_f32(zero, x);
-    const float32x4_t exp_neg_x = ggml_v_expf(neg_x);
-    const float32x4_t one_plus_exp_neg_x = vaddq_f32(one, exp_neg_x);
-    return vdivq_f32(x, one_plus_exp_neg_x);
-}
-
-#elif defined(__AVX512F__) && defined(__AVX512DQ__)
-
-// adapted from arm limited optimized routine
-// the maximum error is 1.45358 plus 0.5 ulps
-// numbers above 88.38 will flush to infinity
-// numbers beneath -103.97 will flush to zero
-inline static __m512 ggml_v_expf(__m512 x) {
-  const __m512 r = _mm512_set1_ps(0x1.8p23f);
-  const __m512 z = _mm512_fmadd_ps(x, _mm512_set1_ps(0x1.715476p+0f), r);
-  const __m512 n = _mm512_sub_ps(z, r);
-  const __m512 b =
-      _mm512_fnmadd_ps(n, _mm512_set1_ps(0x1.7f7d1cp-20f),
-                       _mm512_fnmadd_ps(n, _mm512_set1_ps(0x1.62e4p-1f), x));
-  const __mmask16 d =
-      _mm512_cmp_ps_mask(_mm512_abs_ps(n), _mm512_set1_ps(192), _CMP_GT_OQ);
-  const __m512 u = _mm512_mul_ps(b, b);
-  const __m512 j = _mm512_fmadd_ps(
-      _mm512_fmadd_ps(_mm512_fmadd_ps(_mm512_set1_ps(0x1.0e4020p-7f), b,
-                                      _mm512_set1_ps(0x1.573e2ep-5f)),
-                      u,
-                      _mm512_fmadd_ps(_mm512_set1_ps(0x1.555e66p-3f), b,
-                                      _mm512_set1_ps(0x1.fffdb6p-2f))),
-      u,
-      _mm512_fmadd_ps(_mm512_set1_ps(0x1.ffffecp-1f), b, _mm512_set1_ps(1.0F)));
-  const __m512 res = _mm512_scalef_ps(j, n);
-  if (_mm512_kortestz(d, d))
-    return res;
-  const __m512 zero = _mm512_setzero_ps();
-  const __m512 alt = _mm512_mask_blend_ps(
-      _mm512_cmp_ps_mask(n, zero, _CMP_LE_OQ), _mm512_set1_ps(INFINITY), zero);
-  return _mm512_mask_blend_ps(d, res, alt);
-}
-
-// computes silu x/(1+exp(-x)) in single precision vector
-inline static __m512 ggml_v_silu(__m512 x) {
-    const __m512 one = _mm512_set1_ps(1);
-    const __m512 zero = _mm512_setzero_ps();
-    const __m512 neg_x = _mm512_sub_ps(zero, x);
-    const __m512 exp_neg_x = ggml_v_expf(neg_x);
-    const __m512 one_plus_exp_neg_x = _mm512_add_ps(one, exp_neg_x);
-    return _mm512_div_ps(x, one_plus_exp_neg_x);
-}
-
-#elif defined(__AVX2__) && defined(__FMA__)
-
-// adapted from arm limited optimized routine
-// the maximum error is 1.45358 plus 0.5 ulps
-// numbers above 88.38 will flush to infinity
-// numbers beneath -103.97 will flush to zero
-inline static __m256 ggml_v_expf(__m256 x) {
-  const __m256 r = _mm256_set1_ps(0x1.8p23f);
-  const __m256 z = _mm256_fmadd_ps(x, _mm256_set1_ps(0x1.715476p+0f), r);
-  const __m256 n = _mm256_sub_ps(z, r);
-  const __m256 b = _mm256_fnmadd_ps(n, _mm256_set1_ps(0x1.7f7d1cp-20f),
-                                    _mm256_fnmadd_ps(n, _mm256_set1_ps(0x1.62e4p-1f), x));
-  const __m256i e = _mm256_slli_epi32(_mm256_castps_si256(z), 23);
-  const __m256 k = _mm256_castsi256_ps(
-      _mm256_add_epi32(e, _mm256_castps_si256(_mm256_set1_ps(1))));
-  const __m256i c = _mm256_castps_si256(
-      _mm256_cmp_ps(_mm256_andnot_ps(_mm256_set1_ps(-0.f), n),
-                    _mm256_set1_ps(126), _CMP_GT_OQ));
-  const __m256 u = _mm256_mul_ps(b, b);
-  const __m256 j = _mm256_fmadd_ps(_mm256_fmadd_ps(_mm256_fmadd_ps(_mm256_set1_ps(0x1.0e4020p-7f), b,
-                                                                   _mm256_set1_ps(0x1.573e2ep-5f)), u,
-                                                   _mm256_fmadd_ps(_mm256_set1_ps(0x1.555e66p-3f), b,
-                                                                   _mm256_set1_ps(0x1.fffdb6p-2f))),
-                                   u, _mm256_mul_ps(_mm256_set1_ps(0x1.ffffecp-1f), b));
-  if (!_mm256_movemask_ps(_mm256_castsi256_ps(c)))
-    return _mm256_fmadd_ps(j, k, k);
-  const __m256i g = _mm256_and_si256(
-      _mm256_castps_si256(_mm256_cmp_ps(n, _mm256_setzero_ps(), _CMP_LE_OQ)),
-      _mm256_set1_epi32(0x82000000u));
-  const __m256 s1 =
-      _mm256_castsi256_ps(_mm256_add_epi32(g, _mm256_set1_epi32(0x7f000000u)));
-  const __m256 s2 = _mm256_castsi256_ps(_mm256_sub_epi32(e, g));
-  const __m256i d = _mm256_castps_si256(
-      _mm256_cmp_ps(_mm256_andnot_ps(_mm256_set1_ps(-0.f), n),
-                    _mm256_set1_ps(192), _CMP_GT_OQ));
-  return _mm256_or_ps(
-      _mm256_and_ps(_mm256_castsi256_ps(d), _mm256_mul_ps(s1, s1)),
-      _mm256_andnot_ps(
-          _mm256_castsi256_ps(d),
-          _mm256_or_ps(
-              _mm256_and_ps(_mm256_castsi256_ps(c),
-                            _mm256_mul_ps(_mm256_fmadd_ps(s2, j, s2), s1)),
-              _mm256_andnot_ps(_mm256_castsi256_ps(c), _mm256_fmadd_ps(k, j, k)))));
-}
-
-// computes silu x/(1+exp(-x)) in single precision vector
-inline static __m256 ggml_v_silu(__m256 x) {
-    const __m256 one = _mm256_set1_ps(1);
-    const __m256 zero = _mm256_setzero_ps();
-    const __m256 neg_x = _mm256_sub_ps(zero, x);
-    const __m256 exp_neg_x = ggml_v_expf(neg_x);
-    const __m256 one_plus_exp_neg_x = _mm256_add_ps(one, exp_neg_x);
-    return _mm256_div_ps(x, one_plus_exp_neg_x);
-}
-
-#elif defined(__SSE2__) // __AVX2__ / __ARM_NEON
-
-#if defined(__FMA__)
-#define MADD128(x, y, z) _mm_fmadd_ps(x, y, z)
-#define NMADD128(x, y, z) _mm_fnmadd_ps(x, y, z)
-#else
-#define MADD128(x, y, z) _mm_add_ps(_mm_mul_ps(x, y), z)
-#define NMADD128(x, y, z) _mm_sub_ps(z, _mm_mul_ps(x, y))
-#endif
-
-// adapted from arm limited optimized routine
-// the maximum error is 1.45358 plus 0.5 ulps
-// numbers above 88.38 will flush to infinity
-// numbers beneath -103.97 will flush to zero
-inline static __m128 ggml_v_expf(__m128 x) {
-    const __m128 r = _mm_set1_ps(0x1.8p23f);
-    const __m128 z = MADD128(x, _mm_set1_ps(0x1.715476p+0f), r);
-    const __m128 n = _mm_sub_ps(z, r);
-    const __m128 b =
-        NMADD128(n, _mm_set1_ps(0x1.7f7d1cp-20f), NMADD128(n, _mm_set1_ps(0x1.62e4p-1f), x));
-    const __m128i e = _mm_slli_epi32(_mm_castps_si128(z), 23);
-    const __m128 k = _mm_castsi128_ps(_mm_add_epi32(e, _mm_castps_si128(_mm_set1_ps(1))));
-    const __m128i c =
-        _mm_castps_si128(_mm_cmpgt_ps(_mm_andnot_ps(_mm_set1_ps(-0.f), n), _mm_set1_ps(126)));
-    const __m128 u = _mm_mul_ps(b, b);
-    const __m128 j =
-        MADD128(MADD128(MADD128(_mm_set1_ps(0x1.0e4020p-7f), b, _mm_set1_ps(0x1.573e2ep-5f)), u,
-                        MADD128(_mm_set1_ps(0x1.555e66p-3f), b, _mm_set1_ps(0x1.fffdb6p-2f))),
-                u, _mm_mul_ps(_mm_set1_ps(0x1.ffffecp-1f), b));
-    if (!_mm_movemask_epi8(c))
-        return MADD128(j, k, k);
-    const __m128i g = _mm_and_si128(_mm_castps_si128(_mm_cmple_ps(n, _mm_setzero_ps())),
-                                    _mm_set1_epi32(0x82000000u));
-    const __m128 s1 = _mm_castsi128_ps(_mm_add_epi32(g, _mm_set1_epi32(0x7f000000u)));
-    const __m128 s2 = _mm_castsi128_ps(_mm_sub_epi32(e, g));
-    const __m128i d =
-        _mm_castps_si128(_mm_cmpgt_ps(_mm_andnot_ps(_mm_set1_ps(-0.f), n), _mm_set1_ps(192)));
-    return _mm_or_ps(
-        _mm_and_ps(_mm_castsi128_ps(d), _mm_mul_ps(s1, s1)),
-        _mm_andnot_ps(_mm_castsi128_ps(d),
-                      _mm_or_ps(_mm_and_ps(_mm_castsi128_ps(c), _mm_mul_ps(MADD128(s2, j, s2), s1)),
-                                _mm_andnot_ps(_mm_castsi128_ps(c), MADD128(k, j, k)))));
-}
-
-// computes silu x/(1+exp(-x)) in single precision vector
-inline static __m128 ggml_v_silu(__m128 x) {
-    const __m128 one = _mm_set1_ps(1);
-    const __m128 zero = _mm_setzero_ps();
-    const __m128 neg_x = _mm_sub_ps(zero, x);
-    const __m128 exp_neg_x = ggml_v_expf(neg_x);
-    const __m128 one_plus_exp_neg_x = _mm_add_ps(one, exp_neg_x);
-    return _mm_div_ps(x, one_plus_exp_neg_x);
-}
-
-#endif // __ARM_NEON / __AVX2__ / __SSE2__
-
-static void ggml_vec_silu_f32(const int n, float * y, const float * x) {
-    int i = 0;
-#if defined(__AVX512F__) && defined(__AVX512DQ__)
-    for (; i + 15 < n; i += 16) {
-        _mm512_storeu_ps(y + i, ggml_v_silu(_mm512_loadu_ps(x + i)));
-    }
-#elif defined(__AVX2__) && defined(__FMA__)
-    for (; i + 7 < n; i += 8) {
-        _mm256_storeu_ps(y + i, ggml_v_silu(_mm256_loadu_ps(x + i)));
-    }
-#elif defined(__SSE2__)
-    for (; i + 3 < n; i += 4) {
-        _mm_storeu_ps(y + i, ggml_v_silu(_mm_loadu_ps(x + i)));
-    }
-#elif defined(__ARM_NEON) && defined(__aarch64__)
-    for (; i + 3 < n; i += 4) {
-        vst1q_f32(y + i, ggml_v_silu(vld1q_f32(x + i)));
-    }
-#endif
-    for (; i < n; ++i) {
-        y[i] = ggml_silu_f32(x[i]);
-    }
-}
-
-static ggml_float ggml_vec_soft_max_f32(const int n, float * y, const float * x, float max) {
-    int i = 0;
-    ggml_float sum = 0;
-#if defined(__AVX512F__) && defined(__AVX512DQ__)
-    for (; i + 15 < n; i += 16) {
-        __m512 val = ggml_v_expf(_mm512_sub_ps(_mm512_loadu_ps(x + i),
-                                               _mm512_set1_ps(max)));
-        _mm512_storeu_ps(y + i, val);
-        sum += (ggml_float)_mm512_reduce_add_ps(val);
-    }
-#elif defined(__AVX2__) && defined(__FMA__)
-    for (; i + 7 < n; i += 8) {
-        __m256 val = ggml_v_expf(_mm256_sub_ps(_mm256_loadu_ps(x + i),
-                                               _mm256_set1_ps(max)));
-        _mm256_storeu_ps(y + i, val);
-        __m128 val2 = _mm_add_ps(_mm256_extractf128_ps(val, 1),
-                                 _mm256_castps256_ps128(val));
-        val2 = _mm_add_ps(val2, _mm_movehl_ps(val2, val2));
-        val2 = _mm_add_ss(val2, _mm_movehdup_ps(val2));
-        sum += (ggml_float)_mm_cvtss_f32(val2);
-    }
-#elif defined(__SSE2__)
-    for (; i + 3 < n; i += 4) {
-        __m128 val = ggml_v_expf(_mm_sub_ps(_mm_loadu_ps(x + i),
-                                            _mm_set1_ps(max)));
-        _mm_storeu_ps(y + i, val);
-#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
-        val = _mm_add_ps(val, _mm_movehl_ps(val, val));
-        val = _mm_add_ss(val, _mm_movehdup_ps(val));
-#else
-        __m128 tmp = _mm_shuffle_ps(val, val, _MM_SHUFFLE(2, 3, 0, 1));
-        val = _mm_add_ps(val, tmp);
-        tmp = _mm_movehl_ps(tmp, val);
-        val = _mm_add_ss(val, tmp);
-#endif
-        sum += (ggml_float)_mm_cvtss_f32(val);
-    }
-#elif defined(__ARM_NEON) && defined(__aarch64__)
-    for (; i + 3 < n; i += 4) {
-        float32x4_t val = ggml_v_expf(vsubq_f32(vld1q_f32(x + i),
-                                                vdupq_n_f32(max)));
-        vst1q_f32(y + i, val);
-        sum += (ggml_float)vaddvq_f32(val);
-    }
-#endif
-    for (; i < n; ++i) {
-        float val = expf(x[i] - max);
-        sum += (ggml_float)val;
-        y[i] = val;
-    }
-    return sum;
-}
-
-inline static float ggml_silu_backward_f32(float x, float dy) {
-    const float s = 1.0f/(1.0f + expf(-x));
-    return dy*s*(1.0f + x*(1.0f - s));
-}
-
-inline static void ggml_vec_silu_backward_f32(const int n, float * dx, const float * x, const float * dy) {
-    for (int i = 0; i < n; ++i) {
-        dx[i] = ggml_silu_backward_f32(x[i], dy[i]);
-    }
-}
-
-inline static void ggml_vec_sum_f32(const int n, float * s, const float * x) {
-#ifndef GGML_USE_ACCELERATE
-    ggml_float sum = 0.0;
-    for (int i = 0; i < n; ++i) {
-        sum += (ggml_float)x[i];
-    }
-    *s = sum;
-#else
-    vDSP_sve(x, 1, s, n);
-#endif
-}
-
-inline static void ggml_vec_sum_f32_ggf(const int n, ggml_float * s, const float * x) {
-    ggml_float sum = 0.0;
-    for (int i = 0; i < n; ++i) {
-        sum += (ggml_float)x[i];
-    }
-    *s = sum;
-}
-
-inline static void ggml_vec_sum_f16_ggf(const int n, float * s, const ggml_fp16_t * x) {
-    float sum = 0.0f;
-    for (int i = 0; i < n; ++i) {
-        sum += GGML_FP16_TO_FP32(x[i]);
-    }
-    *s = sum;
-}
-
-inline static void ggml_vec_sum_bf16_ggf(const int n, float * s, const ggml_bf16_t * x) {
-    float sum = 0.0f;
-    for (int i = 0; i < n; ++i) {
-        sum += GGML_BF16_TO_FP32(x[i]);
-    }
-    *s = sum;
-}
-
-inline static void ggml_vec_max_f32(const int n, float * s, const float * x) {
-#ifndef GGML_USE_ACCELERATE
-    float max = -INFINITY;
-    for (int i = 0; i < n; ++i) {
-        max = MAX(max, x[i]);
-    }
-    *s = max;
-#else
-    vDSP_maxv(x, 1, s, n);
-#endif
-}
-
-inline static void ggml_vec_norm_inv_f32(const int n, float * s, const float * x) {
-    ggml_vec_norm_f32(n, s, x);
-    *s = 1.f/(*s);
-}
-
-inline static void ggml_vec_argmax_f32(const int n, int * s, const float * x) {
-    float max = -INFINITY;
-    int idx = 0;
-    for (int i = 0; i < n; ++i) {
-        max = MAX(max, x[i]);
-        if (max == x[i]) { idx = i; }
-    }
-    *s = idx;
-}
-
-//
-// data types
-//
-
-static const char * GGML_OP_NAME[GGML_OP_COUNT] = {
-    "NONE",
-
-    "DUP",
-    "ADD",
-    "ADD1",
-    "ACC",
-    "SUB",
-    "MUL",
-    "DIV",
-    "SQR",
-    "SQRT",
-    "LOG",
-    "SUM",
-    "SUM_ROWS",
-    "MEAN",
-    "ARGMAX",
-    "REPEAT",
-    "REPEAT_BACK",
-    "CONCAT",
-    "SILU_BACK",
-    "NORM",
-    "RMS_NORM",
-    "RMS_NORM_BACK",
-    "GROUP_NORM",
-
-    "MUL_MAT",
-    "MUL_MAT_ID",
-    "OUT_PROD",
-
-    "SCALE",
-    "SET",
-    "CPY",
-    "CONT",
-    "RESHAPE",
-    "VIEW",
-    "PERMUTE",
-    "TRANSPOSE",
-    "GET_ROWS",
-    "GET_ROWS_BACK",
-    "DIAG",
-    "DIAG_MASK_INF",
-    "DIAG_MASK_ZERO",
-    "SOFT_MAX",
-    "SOFT_MAX_BACK",
-    "ROPE",
-    "ROPE_BACK",
-    "CLAMP",
-    "CONV_TRANSPOSE_1D",
-    "IM2COL",
-    "CONV_TRANSPOSE_2D",
-    "POOL_1D",
-    "POOL_2D",
-    "UPSCALE",
-    "PAD",
-    "ARANGE",
-    "TIMESTEP_EMBEDDING",
-    "ARGSORT",
-    "LEAKY_RELU",
-
-    "FLASH_ATTN_EXT",
-    "FLASH_ATTN_BACK",
-    "SSM_CONV",
-    "SSM_SCAN",
-    "WIN_PART",
-    "WIN_UNPART",
-    "GET_REL_POS",
-    "ADD_REL_POS",
-
-    "UNARY",
-
-    "MAP_UNARY",
-    "MAP_BINARY",
-
-    "MAP_CUSTOM1_F32",
-    "MAP_CUSTOM2_F32",
-    "MAP_CUSTOM3_F32",
-
-    "MAP_CUSTOM1",
-    "MAP_CUSTOM2",
-    "MAP_CUSTOM3",
-
-    "CROSS_ENTROPY_LOSS",
-    "CROSS_ENTROPY_LOSS_BACK",
-};
-
-static_assert(GGML_OP_COUNT == 74, "GGML_OP_COUNT != 74");
-
-static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = {
-    "none",
-
-    "x",
-    "x+y",
-    "x+y",
-    "view(x,nb,offset)+=y->x",
-    "x-y",
-    "x*y",
-    "x/y",
-    "x^2",
-    "√x",
-    "log(x)",
-    "Σx",
-    "Σx_k",
-    "Σx/n",
-    "argmax(x)",
-    "repeat(x)",
-    "repeat_back(x)",
-    "concat(x, y)",
-    "silu_back(x)",
-    "norm(x)",
-    "rms_norm(x)",
-    "rms_norm_back(x)",
-    "group_norm(x)",
-
-    "X*Y",
-    "X[i]*Y",
-    "X*Y",
-
-    "x*v",
-    "y-\\>view(x)",
-    "x-\\>y",
-    "cont(x)",
-    "reshape(x)",
-    "view(x)",
-    "permute(x)",
-    "transpose(x)",
-    "get_rows(x)",
-    "get_rows_back(x)",
-    "diag(x)",
-    "diag_mask_inf(x)",
-    "diag_mask_zero(x)",
-    "soft_max(x)",
-    "soft_max_back(x)",
-    "rope(x)",
-    "rope_back(x)",
-    "clamp(x)",
-    "conv_transpose_1d(x)",
-    "im2col(x)",
-    "conv_transpose_2d(x)",
-    "pool_1d(x)",
-    "pool_2d(x)",
-    "upscale(x)",
-    "pad(x)",
-    "arange(start, stop, step)",
-    "timestep_embedding(timesteps, dim, max_period)",
-    "argsort(x)",
-    "leaky_relu(x)",
-
-    "flash_attn_ext(x)",
-    "flash_attn_back(x)",
-    "ssm_conv(x)",
-    "ssm_scan(x)",
-    "win_part(x)",
-    "win_unpart(x)",
-    "get_rel_pos(x)",
-    "add_rel_pos(x)",
-
-    "unary(x)",
-
-    "f(x)",
-    "f(x,y)",
-
-    "custom_f32(x)",
-    "custom_f32(x,y)",
-    "custom_f32(x,y,z)",
-
-    "custom(x)",
-    "custom(x,y)",
-    "custom(x,y,z)",
-
-    "cross_entropy_loss(x,y)",
-    "cross_entropy_loss_back(x,y)",
-};
-
-static_assert(GGML_OP_COUNT == 74, "GGML_OP_COUNT != 74");
-
-static_assert(GGML_OP_POOL_COUNT == 2, "GGML_OP_POOL_COUNT != 2");
-
-
-static const char * GGML_UNARY_OP_NAME[GGML_UNARY_OP_COUNT] = {
-    "ABS",
-    "SGN",
-    "NEG",
-    "STEP",
-    "TANH",
-    "ELU",
-    "RELU",
-    "SIGMOID",
-    "GELU",
-    "GELU_QUICK",
-    "SILU",
-    "HARDSWISH",
-    "HARDSIGMOID",
-};
-
-static_assert(GGML_UNARY_OP_COUNT == 13, "GGML_UNARY_OP_COUNT != 13");
-
-
-static_assert(sizeof(struct ggml_object)%GGML_MEM_ALIGN == 0, "ggml_object size must be a multiple of GGML_MEM_ALIGN");
-static_assert(sizeof(struct ggml_tensor)%GGML_MEM_ALIGN == 0, "ggml_tensor size must be a multiple of GGML_MEM_ALIGN");
-
-// WARN:
-// Mis-configuration can lead to problem that's hard to reason about:
-// * At best  it crash or talks nosense.
-// * At worst it talks slightly difference but hard to perceive.
-//
-// An op has to enable INIT or FINALIZE when any of it's branch needs that pass.
-// Take care about compile options (e.g., GGML_USE_xxx).
-static bool GGML_OP_HAS_INIT    [GGML_OP_COUNT] = { 0 };
-static bool GGML_OP_HAS_FINALIZE[GGML_OP_COUNT] = { 0 };
-
-static void ggml_setup_op_has_task_pass(void) {
-    {   // INIT
-        bool * p = GGML_OP_HAS_INIT;
-
-        p[GGML_OP_ACC                    ] = true;
-        p[GGML_OP_MUL_MAT                ] = true;
-        p[GGML_OP_MUL_MAT_ID             ] = true;
-        p[GGML_OP_OUT_PROD               ] = true;
-        p[GGML_OP_SET                    ] = true;
-        p[GGML_OP_GET_ROWS_BACK          ] = true;
-        p[GGML_OP_DIAG_MASK_INF          ] = true;
-        p[GGML_OP_DIAG_MASK_ZERO         ] = true;
-        p[GGML_OP_CONV_TRANSPOSE_1D      ] = true;
-        p[GGML_OP_CONV_TRANSPOSE_2D      ] = true;
-        p[GGML_OP_FLASH_ATTN_BACK        ] = true;
-        p[GGML_OP_CROSS_ENTROPY_LOSS     ] = true;
-        p[GGML_OP_ADD_REL_POS            ] = true;
-    }
-
-    {   // FINALIZE
-        bool * p = GGML_OP_HAS_FINALIZE;
-
-        p[GGML_OP_CROSS_ENTROPY_LOSS     ] = true;
-    }
-}
-
-//
-// NUMA support
-//
-
-#define GGML_NUMA_MAX_NODES 8
-#define GGML_NUMA_MAX_CPUS 512
-
-struct ggml_numa_node {
-    uint32_t cpus[GGML_NUMA_MAX_CPUS]; // hardware threads on this node
-    uint32_t n_cpus;
-};
-
-struct ggml_numa_nodes {
-    enum ggml_numa_strategy numa_strategy;
-    struct ggml_numa_node nodes[GGML_NUMA_MAX_NODES];
-    uint32_t n_nodes;
-    uint32_t total_cpus; // hardware threads on system
-    uint32_t current_node; // node on which main process is execting
-#if defined(__gnu_linux__)
-    cpu_set_t cpuset; // cpuset from numactl
-#else
-    uint32_t cpuset; // no NUMA support outside of Linux at this time. Use a portable datatype
-#endif
-};
-
-//
-// ggml state
-//
-
-struct ggml_state {
-    struct ggml_context_container contexts[GGML_MAX_CONTEXTS];
-    struct ggml_numa_nodes numa;
-};
-
-// global state
-static struct ggml_state g_state;
-static atomic_flag g_state_critical = ATOMIC_FLAG_INIT;
-
-// barrier via spin lock
-inline static void ggml_critical_section_start(void) {
-    while (atomic_flag_test_and_set(&g_state_critical)) {
-        // spin
-        sched_yield();
-    }
-}
-
-// TODO: make this somehow automatically executed
-//       some sort of "sentry" mechanism
-inline static void ggml_critical_section_end(void) {
-    atomic_flag_clear(&g_state_critical);
-}
-
-#if defined(__gnu_linux__)
-static cpu_set_t ggml_get_numa_affinity(void) {
-    cpu_set_t cpuset;
-    pthread_t thread;
-    thread = pthread_self();
-    CPU_ZERO(&cpuset);
-    pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
-    return cpuset;
-}
-#else
-static uint32_t ggml_get_numa_affinity(void) {
-    return 0; // no NUMA support
-}
-#endif
-
-void ggml_numa_init(enum ggml_numa_strategy numa_flag) {
-    if (g_state.numa.n_nodes > 0) {
-        fprintf(stderr, "ggml_numa_init: NUMA already initialized\n");
-
-        return;
-    }
-
-#if defined(__gnu_linux__)
-    struct stat st;
-    char path[256];
-    int rv;
-
-    // set numa scheme
-    g_state.numa.numa_strategy = numa_flag;
-
-    GGML_PRINT_DEBUG("numa strategy %u\n",g_state.numa.numa_strategy);
-
-    g_state.numa.cpuset = ggml_get_numa_affinity();
-
-    // enumerate nodes
-    while (g_state.numa.n_nodes < GGML_NUMA_MAX_NODES) {
-        rv = snprintf(path, sizeof(path), "/sys/devices/system/node/node%u", g_state.numa.n_nodes);
-        GGML_ASSERT(rv > 0 && (unsigned)rv < sizeof(path));
-        if (stat(path, &st) != 0) { break; }
-        ++g_state.numa.n_nodes;
-    }
-
-    // enumerate CPUs
-    while (g_state.numa.total_cpus < GGML_NUMA_MAX_CPUS) {
-        rv = snprintf(path, sizeof(path), "/sys/devices/system/cpu/cpu%u", g_state.numa.total_cpus);
-        GGML_ASSERT(rv > 0 && (unsigned)rv < sizeof(path));
-        if (stat(path, &st) != 0) { break; }
-        ++g_state.numa.total_cpus;
-    }
-
-    GGML_PRINT_DEBUG("found %u numa nodes, %u CPUs\n", g_state.numa.n_nodes, g_state.numa.total_cpus);
-
-    // figure out which node we're on
-    uint current_cpu;
-    int getcpu_ret = 0;
-#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 28) || defined(__COSMOPOLITAN__)
-    getcpu_ret = getcpu(&current_cpu, &g_state.numa.current_node);
-#else
-    // old glibc doesn't have a wrapper for this call. Fall back on direct syscall
-#   if !defined(SYS_getcpu) && defined(SYS_get_cpu)
-#       define SYS_getcpu SYS_get_cpu // some older glibc versions use this name
-#   endif
-    getcpu_ret = syscall(SYS_getcpu, &current_cpu, &g_state.numa.current_node);
-#endif
-
-    if (g_state.numa.n_nodes < 1 || g_state.numa.total_cpus < 1 || getcpu_ret != 0) {
-        g_state.numa.n_nodes = 0;
-        return;
-    }
-
-    GGML_PRINT_DEBUG("found our process on numa node %u, CPU %u\n", g_state.numa.current_node, current_cpu);
-
-    for (uint32_t n = 0; n < g_state.numa.n_nodes; ++n) {
-        struct ggml_numa_node * node = &g_state.numa.nodes[n];
-        GGML_PRINT_DEBUG("CPUs on node %u:", n);
-        node->n_cpus = 0;
-        for (uint32_t c = 0; c < g_state.numa.total_cpus; ++c) {
-            rv = snprintf(path, sizeof(path), "/sys/devices/system/node/node%u/cpu%u", n, c);
-            GGML_ASSERT(rv > 0 && (unsigned)rv < sizeof(path));
-            if (stat(path, &st) == 0) {
-                node->cpus[node->n_cpus++] = c;
-                GGML_PRINT_DEBUG(" %u", c);
-            }
-        }
-        GGML_PRINT_DEBUG("\n");
-    }
-
-    if (ggml_is_numa()) {
-        FILE *fptr = fopen("/proc/sys/kernel/numa_balancing", "r");
-        if (fptr != NULL) {
-            char buf[42];
-            if (fgets(buf, sizeof(buf), fptr) && strncmp(buf, "0\n", sizeof(buf)) != 0) {
-                GGML_PRINT("WARNING: /proc/sys/kernel/numa_balancing is enabled, this has been observed to impair performance\n");
-            }
-            fclose(fptr);
-        }
-    }
-#else
-    GGML_UNUSED(numa_flag);
-    // TODO
-#endif
-}
-
-bool ggml_is_numa(void) {
-    return g_state.numa.n_nodes > 1;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-void ggml_print_object(const struct ggml_object * obj) {
-    GGML_PRINT(" - ggml_object: type = %d, offset = %zu, size = %zu, next = %p\n",
-            obj->type, obj->offs, obj->size, (const void *) obj->next);
-}
-
-void ggml_print_objects(const struct ggml_context * ctx) {
-    struct ggml_object * obj = ctx->objects_begin;
-
-    GGML_PRINT("%s: objects in context %p:\n", __func__, (const void *) ctx);
-
-    while (obj != NULL) {
-        ggml_print_object(obj);
-        obj = obj->next;
-    }
-
-    GGML_PRINT("%s: --- end ---\n", __func__);
-}
-
-GGML_CALL int64_t ggml_nelements(const struct ggml_tensor * tensor) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return tensor->ne[0]*tensor->ne[1]*tensor->ne[2]*tensor->ne[3];
-}
-
-GGML_CALL int64_t ggml_nrows(const struct ggml_tensor * tensor) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return tensor->ne[1]*tensor->ne[2]*tensor->ne[3];
-}
-
-GGML_CALL size_t ggml_nbytes(const struct ggml_tensor * tensor) {
-    size_t nbytes;
-    size_t blck_size = ggml_blck_size(tensor->type);
-    if (blck_size == 1) {
-        nbytes = ggml_type_size(tensor->type);
-        for (int i = 0; i < GGML_MAX_DIMS; ++i) {
-            nbytes += (tensor->ne[i] - 1)*tensor->nb[i];
-        }
-    }
-    else {
-        nbytes = tensor->ne[0]*tensor->nb[0]/blck_size;
-        for (int i = 1; i < GGML_MAX_DIMS; ++i) {
-            nbytes += (tensor->ne[i] - 1)*tensor->nb[i];
-        }
-    }
-
-    return nbytes;
-}
-
-size_t ggml_nbytes_pad(const struct ggml_tensor * tensor) {
-    return GGML_PAD(ggml_nbytes(tensor), GGML_MEM_ALIGN);
-}
-
-GGML_CALL int ggml_blck_size(enum ggml_type type) {
-    return type_traits[type].blck_size;
-}
-
-GGML_CALL size_t ggml_type_size(enum ggml_type type) {
-    return type_traits[type].type_size;
-}
-
-GGML_CALL size_t ggml_row_size(enum ggml_type type, int64_t ne) {
-    assert(ne % ggml_blck_size(type) == 0);
-    return ggml_type_size(type)*ne/ggml_blck_size(type);
-}
-
-double ggml_type_sizef(enum ggml_type type) {
-    return ((double)(type_traits[type].type_size))/type_traits[type].blck_size;
-}
-
-GGML_CALL const char * ggml_type_name(enum ggml_type type) {
-    return type_traits[type].type_name;
-}
-
-GGML_CALL bool ggml_is_quantized(enum ggml_type type) {
-    return type_traits[type].is_quantized;
-}
-
-GGML_CALL const char * ggml_op_name(enum ggml_op op) {
-    return GGML_OP_NAME[op];
-}
-
-const char * ggml_op_symbol(enum ggml_op op) {
-    return GGML_OP_SYMBOL[op];
-}
-
-const char * ggml_unary_op_name(enum ggml_unary_op op) {
-    return GGML_UNARY_OP_NAME[op];
-}
-
-GGML_CALL const char * ggml_op_desc(const struct ggml_tensor * t) {
-    if (t->op == GGML_OP_UNARY) {
-        enum ggml_unary_op uop = ggml_get_unary_op(t);
-        return ggml_unary_op_name(uop);
-    }
-    else {
-        return ggml_op_name(t->op);
-    }
-}
-
-GGML_CALL size_t ggml_element_size(const struct ggml_tensor * tensor) {
-    return ggml_type_size(tensor->type);
-}
-
-bool ggml_is_scalar(const struct ggml_tensor * tensor) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return tensor->ne[0] == 1 && tensor->ne[1] == 1 && tensor->ne[2] == 1 && tensor->ne[3] == 1;
-}
-
-bool ggml_is_vector(const struct ggml_tensor * tensor) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return tensor->ne[1] == 1 && tensor->ne[2] == 1 && tensor->ne[3] == 1;
-}
-
-bool ggml_is_matrix(const struct ggml_tensor * tensor) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return tensor->ne[2] == 1 && tensor->ne[3] == 1;
-}
-
-bool ggml_is_3d(const struct ggml_tensor * tensor) {
-    return tensor->ne[3] == 1;
-}
-
-int ggml_n_dims(const struct ggml_tensor * tensor) {
-    for (int i = GGML_MAX_DIMS - 1; i >= 1; --i) {
-        if (tensor->ne[i] > 1) {
-            return i + 1;
-        }
-    }
-    return 1;
-}
-
-static inline bool ggml_can_mul_mat(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return (t0->ne[0]           == t1->ne[0])  &&
-           (t1->ne[2]%t0->ne[2] == 0)          && // verify t0 is broadcastable
-           (t1->ne[3]%t0->ne[3] == 0);
-}
-
-static inline bool ggml_can_out_prod(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return (t0->ne[1] == t1->ne[1])   &&
-           (t1->ne[2]%t0->ne[2] == 0) && // verify t0 is broadcastable
-           (t1->ne[3]%t0->ne[3] == 0);
-}
-
-enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype) {
-    enum ggml_type wtype = GGML_TYPE_COUNT;
-
-    switch (ftype) {
-        case GGML_FTYPE_ALL_F32:              wtype = GGML_TYPE_F32;   break;
-        case GGML_FTYPE_MOSTLY_F16:           wtype = GGML_TYPE_F16;   break;
-        case GGML_FTYPE_MOSTLY_BF16:          wtype = GGML_TYPE_BF16;  break;
-        case GGML_FTYPE_MOSTLY_Q4_0:          wtype = GGML_TYPE_Q4_0;  break;
-        case GGML_FTYPE_MOSTLY_Q4_1:          wtype = GGML_TYPE_Q4_1;  break;
-        case GGML_FTYPE_MOSTLY_Q5_0:          wtype = GGML_TYPE_Q5_0;  break;
-        case GGML_FTYPE_MOSTLY_Q5_1:          wtype = GGML_TYPE_Q5_1;  break;
-        case GGML_FTYPE_MOSTLY_Q8_0:          wtype = GGML_TYPE_Q8_0;  break;
-        case GGML_FTYPE_MOSTLY_Q2_K:          wtype = GGML_TYPE_Q2_K;  break;
-        case GGML_FTYPE_MOSTLY_Q3_K:          wtype = GGML_TYPE_Q3_K;  break;
-        case GGML_FTYPE_MOSTLY_Q4_K:          wtype = GGML_TYPE_Q4_K;  break;
-        case GGML_FTYPE_MOSTLY_Q5_K:          wtype = GGML_TYPE_Q5_K;  break;
-        case GGML_FTYPE_MOSTLY_Q6_K:          wtype = GGML_TYPE_Q6_K;  break;
-        case GGML_FTYPE_MOSTLY_IQ2_XXS:       wtype = GGML_TYPE_IQ2_XXS;  break;
-        case GGML_FTYPE_MOSTLY_IQ2_XS:        wtype = GGML_TYPE_IQ2_XS;   break;
-        case GGML_FTYPE_MOSTLY_IQ3_XXS:       wtype = GGML_TYPE_IQ3_XXS;  break;
-        case GGML_FTYPE_MOSTLY_IQ1_S:         wtype = GGML_TYPE_IQ1_S;    break;
-        case GGML_FTYPE_MOSTLY_IQ1_M:         wtype = GGML_TYPE_IQ1_M;    break;
-        case GGML_FTYPE_MOSTLY_IQ4_NL:        wtype = GGML_TYPE_IQ4_NL;   break;
-        case GGML_FTYPE_MOSTLY_IQ4_XS:        wtype = GGML_TYPE_IQ4_XS;   break;
-        case GGML_FTYPE_MOSTLY_IQ3_S:         wtype = GGML_TYPE_IQ3_S;    break;
-        case GGML_FTYPE_MOSTLY_IQ2_S:         wtype = GGML_TYPE_IQ2_S;    break;
-        case GGML_FTYPE_UNKNOWN:              wtype = GGML_TYPE_COUNT; break;
-        case GGML_FTYPE_MOSTLY_Q4_1_SOME_F16: wtype = GGML_TYPE_COUNT; break;
-    }
-
-    GGML_ASSERT(wtype != GGML_TYPE_COUNT);
-
-    return wtype;
-}
-
-size_t ggml_tensor_overhead(void) {
-    return GGML_OBJECT_SIZE + GGML_TENSOR_SIZE;
-}
-
-GGML_CALL bool ggml_is_transposed(const struct ggml_tensor * tensor) {
-    return tensor->nb[0] > tensor->nb[1];
-}
-
-static bool ggml_is_contiguous_n(const struct ggml_tensor * tensor, int n) {
-    size_t next_nb = ggml_type_size(tensor->type);
-    if (tensor->ne[0] != ggml_blck_size(tensor->type) && tensor->nb[0] != next_nb) {
-        return false;
-    }
-    next_nb *= tensor->ne[0]/ggml_blck_size(tensor->type);
-    for (int i = 1; i < GGML_MAX_DIMS; i++) {
-        if (tensor->ne[i] != 1) {
-            if (i > n) {
-                if (tensor->nb[i] != next_nb) {
-                    return false;
-                }
-                next_nb *= tensor->ne[i];
-            } else {
-                // this dimension does not need to be contiguous
-                next_nb = tensor->ne[i]*tensor->nb[i];
-            }
-        }
-    }
-    return true;
-}
-
-GGML_CALL bool ggml_is_contiguous(const struct ggml_tensor * tensor) {
-    return ggml_is_contiguous_0(tensor);
-}
-
-GGML_CALL bool ggml_is_contiguous_0(const struct ggml_tensor * tensor) {
-    return ggml_is_contiguous_n(tensor, 0);
-}
-
-GGML_CALL bool ggml_is_contiguous_1(const struct ggml_tensor * tensor) {
-    return ggml_is_contiguous_n(tensor, 1);
-}
-
-GGML_CALL bool ggml_is_contiguous_2(const struct ggml_tensor * tensor) {
-    return ggml_is_contiguous_n(tensor, 2);
-}
-
-GGML_CALL bool ggml_is_permuted(const struct ggml_tensor * tensor) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return tensor->nb[0] > tensor->nb[1] || tensor->nb[1] > tensor->nb[2] || tensor->nb[2] > tensor->nb[3];
-}
-
-static inline bool ggml_is_padded_1d(const struct ggml_tensor * tensor) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return
-        tensor->nb[0] == ggml_type_size(tensor->type) &&
-        tensor->nb[2] == tensor->nb[1]*tensor->ne[1] &&
-        tensor->nb[3] == tensor->nb[2]*tensor->ne[2];
-}
-
-GGML_CALL bool ggml_is_empty(const struct ggml_tensor * tensor) {
-    for (int i = 0; i < GGML_MAX_DIMS; ++i) {
-        if (tensor->ne[i] == 0) {
-            // empty if any dimension has no elements
-            return true;
-        }
-    }
-    return false;
-}
-
-bool ggml_are_same_shape(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return
-        (t0->ne[0] == t1->ne[0]) &&
-        (t0->ne[1] == t1->ne[1]) &&
-        (t0->ne[2] == t1->ne[2]) &&
-        (t0->ne[3] == t1->ne[3]);
-}
-
-bool ggml_are_same_stride(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return
-        (t0->nb[0] == t1->nb[0]) &&
-        (t0->nb[1] == t1->nb[1]) &&
-        (t0->nb[2] == t1->nb[2]) &&
-        (t0->nb[3] == t1->nb[3]);
-}
-
-// check if t1 can be represented as a repeatition of t0
-static inline bool ggml_can_repeat(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return ggml_is_empty(t0) ? ggml_is_empty(t1) :
-        (t1->ne[0]%t0->ne[0] == 0) &&
-        (t1->ne[1]%t0->ne[1] == 0) &&
-        (t1->ne[2]%t0->ne[2] == 0) &&
-        (t1->ne[3]%t0->ne[3] == 0);
-}
-
-static inline bool ggml_can_repeat_rows(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
-    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
-
-    return (t0->ne[0] == t1->ne[0]) && ggml_can_repeat(t0, t1);
-}
-
-static inline int ggml_up32(int n) {
-    return (n + 31) & ~31;
-}
-
-//static inline int ggml_up64(int n) {
-//    return (n + 63) & ~63;
-//}
-
-static inline int ggml_up(int n, int m) {
-    // assert m is a power of 2
-    GGML_ASSERT((m & (m - 1)) == 0);
-    return (n + m - 1) & ~(m - 1);
-}
-
-// assert that pointer is aligned to GGML_MEM_ALIGN
-#define ggml_assert_aligned(ptr) \
-    GGML_ASSERT(((uintptr_t) (ptr))%GGML_MEM_ALIGN == 0)
-
-////////////////////////////////////////////////////////////////////////////////
-
-struct ggml_context * ggml_init(struct ggml_init_params params) {
-    // make this function thread safe
-    ggml_critical_section_start();
-
-    static bool is_first_call = true;
-
-    if (is_first_call) {
-        // initialize time system (required on Windows)
-        ggml_time_init();
-
-        // initialize GELU, Quick GELU, SILU and EXP F32 tables
-        {
-            const uint64_t t_start = ggml_time_us(); UNUSED(t_start);
-
-            for (int i = 0; i < (1 << 16); ++i) {
-                union {
-                    uint16_t u16;
-                    ggml_fp16_t fp16;
-                } u = {i};
-                float f = ggml_table_f32_f16[i] = GGML_COMPUTE_FP16_TO_FP32(u.fp16);
-                ggml_table_gelu_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_f32(f));
-                ggml_table_gelu_quick_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_quick_f32(f));
-            }
-
-            const uint64_t t_end = ggml_time_us(); UNUSED(t_end);
-
-            GGML_PRINT_DEBUG("%s: GELU, Quick GELU, SILU and EXP tables initialized in %f ms\n", __func__, (t_end - t_start)/1000.0f);
-        }
-
-        // initialize g_state
-        {
-            const uint64_t t_start = ggml_time_us(); UNUSED(t_start);
-
-            g_state = (struct ggml_state) {
-                /*.contexts =*/ { { 0 } },
-                /*.numa =*/ {
-                    .n_nodes = 0,
-                    .total_cpus = 0,
-                },
-            };
-
-            for (int i = 0; i < GGML_MAX_CONTEXTS; ++i) {
-                g_state.contexts[i].used = false;
-            }
-
-            const uint64_t t_end = ggml_time_us(); UNUSED(t_end);
-
-            GGML_PRINT_DEBUG("%s: g_state initialized in %f ms\n", __func__, (t_end - t_start)/1000.0f);
-        }
-
-        ggml_setup_op_has_task_pass();
-
-        is_first_call = false;
-    }
-
-    // find non-used context in g_state
-    struct ggml_context * ctx = NULL;
-
-    for (int i = 0; i < GGML_MAX_CONTEXTS; i++) {
-        if (!g_state.contexts[i].used) {
-            g_state.contexts[i].used = true;
-            ctx = &g_state.contexts[i].context;
-
-            GGML_PRINT_DEBUG("%s: found unused context %d\n", __func__, i);
-            break;
-        }
-    }
-
-    if (ctx == NULL) {
-        GGML_PRINT_DEBUG("%s: no unused context found\n", __func__);
-
-        ggml_critical_section_end();
-
-        return NULL;
-    }
-
-    // allow to call ggml_init with 0 size
-    if (params.mem_size == 0) {
-        params.mem_size = GGML_MEM_ALIGN;
-    }
-
-    const size_t mem_size = params.mem_buffer ? params.mem_size : GGML_PAD(params.mem_size, GGML_MEM_ALIGN);
-
-    *ctx = (struct ggml_context) {
-        /*.mem_size           =*/ mem_size,
-        /*.mem_buffer         =*/ params.mem_buffer ? params.mem_buffer : GGML_ALIGNED_MALLOC(mem_size),
-        /*.mem_buffer_owned   =*/ params.mem_buffer ? false : true,
-        /*.no_alloc           =*/ params.no_alloc,
-        /*.no_alloc_save      =*/ params.no_alloc,
-        /*.n_objects          =*/ 0,
-        /*.objects_begin      =*/ NULL,
-        /*.objects_end        =*/ NULL,
-        /*.scratch            =*/ { 0, 0, NULL, },
-        /*.scratch_save       =*/ { 0, 0, NULL, },
-    };
-
-    GGML_ASSERT(ctx->mem_buffer != NULL);
-
-    ggml_assert_aligned(ctx->mem_buffer);
-
-    GGML_PRINT_DEBUG("%s: context initialized\n", __func__);
-
-    ggml_critical_section_end();
-
-    return ctx;
-}
-
-void ggml_free(struct ggml_context * ctx) {
-    if (ctx == NULL) {
-        return;
-    }
-
-    // make this function thread safe
-    ggml_critical_section_start();
-
-    bool found = false;
-
-    for (int i = 0; i < GGML_MAX_CONTEXTS; i++) {
-        if (&g_state.contexts[i].context == ctx) {
-            g_state.contexts[i].used = false;
-
-            GGML_PRINT_DEBUG("%s: context %d has been freed. memory used = %zu\n",
-                    __func__, i, ggml_used_mem(ctx));
-
-            if (ctx->mem_buffer_owned) {
-                GGML_ALIGNED_FREE(ctx->mem_buffer);
-            }
-
-            found = true;
-            break;
-        }
-    }
-
-    if (!found) {
-        GGML_PRINT_DEBUG("%s: context not found\n", __func__);
-    }
-
-    ggml_critical_section_end();
-}
-
-size_t ggml_used_mem(const struct ggml_context * ctx) {
-    return ctx->objects_end == NULL ? 0 : ctx->objects_end->offs + ctx->objects_end->size;
-}
-
-size_t ggml_set_scratch(struct ggml_context * ctx, struct ggml_scratch scratch) {
-    const size_t result = ctx->scratch.data ? ctx->scratch.offs : 0;
-
-    ctx->scratch = scratch;
-
-    return result;
-}
-
-bool ggml_get_no_alloc(struct ggml_context * ctx) {
-    return ctx->no_alloc;
-}
-
-void ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc) {
-    ctx->no_alloc = no_alloc;
-}
-
-void * ggml_get_mem_buffer(const struct ggml_context * ctx) {
-    return ctx->mem_buffer;
-}
-
-size_t ggml_get_mem_size(const struct ggml_context * ctx) {
-    return ctx->mem_size;
-}
-
-size_t ggml_get_max_tensor_size(const struct ggml_context * ctx) {
-    size_t max_size = 0;
-
-    for (struct ggml_tensor * tensor = ggml_get_first_tensor(ctx); tensor != NULL; tensor = ggml_get_next_tensor(ctx, tensor)) {
-        size_t bytes = ggml_nbytes(tensor);
-        max_size = MAX(max_size, bytes);
-    }
-
-    return max_size;
-}
-
-// IMPORTANT:
-// when creating "opt" tensors, always save and load the scratch buffer
-// this is an error prone process, but it is necessary to support inplace
-// operators when using scratch buffers
-// TODO: implement a better way
-static void ggml_scratch_save(struct ggml_context * ctx) {
-    // this is needed to allow opt tensors to store their data
-    // TODO: again, need to find a better way
-    ctx->no_alloc_save = ctx->no_alloc;
-    ctx->no_alloc      = false;
-
-    ctx->scratch_save = ctx->scratch;
-    ctx->scratch.data = NULL;
-}
-
-static void ggml_scratch_load(struct ggml_context * ctx) {
-    ctx->no_alloc = ctx->no_alloc_save;
-
-    ctx->scratch = ctx->scratch_save;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-static struct ggml_object * ggml_new_object(struct ggml_context * ctx, enum ggml_object_type type, size_t size) {
-    // always insert objects at the end of the context's memory pool
-    struct ggml_object * obj_cur = ctx->objects_end;
-
-    const size_t cur_offs = obj_cur == NULL ? 0 : obj_cur->offs;
-    const size_t cur_size = obj_cur == NULL ? 0 : obj_cur->size;
-    const size_t cur_end  = cur_offs + cur_size;
-
-    // align to GGML_MEM_ALIGN
-    size_t size_needed = GGML_PAD(size, GGML_MEM_ALIGN);
-
-    char * const mem_buffer = ctx->mem_buffer;
-    struct ggml_object * const obj_new = (struct ggml_object *)(mem_buffer + cur_end);
-
-    if (cur_end + size_needed + GGML_OBJECT_SIZE > ctx->mem_size) {
-        GGML_PRINT("%s: not enough space in the context's memory pool (needed %zu, available %zu)\n",
-                __func__, cur_end + size_needed, ctx->mem_size);
-        assert(false);
-        return NULL;
-    }
-
-    *obj_new = (struct ggml_object) {
-        .offs = cur_end + GGML_OBJECT_SIZE,
-        .size = size_needed,
-        .next = NULL,
-        .type = type,
-    };
-
-    ggml_assert_aligned(mem_buffer + obj_new->offs);
-
-    if (obj_cur != NULL) {
-        obj_cur->next = obj_new;
-    } else {
-        // this is the first object in this context
-        ctx->objects_begin = obj_new;
-    }
-
-    ctx->objects_end = obj_new;
-
-    //printf("%s: inserted new object at %zu, size = %zu\n", __func__, cur_end, obj_new->size);
-
-    return obj_new;
-}
-
-static struct ggml_tensor * ggml_new_tensor_impl(
-        struct ggml_context * ctx,
-        enum   ggml_type      type,
-        int                   n_dims,
-        const int64_t       * ne,
-        struct ggml_tensor  * view_src,
-        size_t                view_offs) {
-
-    assert(n_dims >= 1 && n_dims <= GGML_MAX_DIMS);
-
-    // find the base tensor and absolute offset
-    if (view_src != NULL && view_src->view_src != NULL) {
-        view_offs += view_src->view_offs;
-        view_src   = view_src->view_src;
-    }
-
-    size_t data_size = ggml_row_size(type, ne[0]);
-    for (int i = 1; i < n_dims; i++) {
-        data_size *= ne[i];
-    }
-
-    GGML_ASSERT(view_src == NULL || data_size == 0 || data_size + view_offs <= ggml_nbytes(view_src));
-
-    void * data = view_src != NULL ? view_src->data : NULL;
-    if (data != NULL) {
-        data = (char *) data + view_offs;
-    }
-
-    size_t obj_alloc_size = 0;
-
-    if (view_src == NULL && !ctx->no_alloc) {
-        if (ctx->scratch.data != NULL) {
-            // allocate tensor data in the scratch buffer
-            if (ctx->scratch.offs + data_size > ctx->scratch.size) {
-                GGML_PRINT("%s: not enough space in the scratch memory pool (needed %zu, available %zu)\n",
-                        __func__, ctx->scratch.offs + data_size, ctx->scratch.size);
-                assert(false);
-                return NULL;
-            }
-
-            data = (char * const) ctx->scratch.data + ctx->scratch.offs;
-
-            ctx->scratch.offs += data_size;
-        } else {
-            // allocate tensor data in the context's memory pool
-            obj_alloc_size = data_size;
-        }
-    }
-
-    struct ggml_object * const obj_new = ggml_new_object(ctx, GGML_OBJECT_TYPE_TENSOR, GGML_TENSOR_SIZE + obj_alloc_size);
-
-    // TODO: for recoverable errors, we would need to free the data allocated from the scratch buffer here
-
-    struct ggml_tensor * const result = (struct ggml_tensor *)((char *)ctx->mem_buffer + obj_new->offs);
-
-#ifdef __clang__
-    // temporary until ggml_tensor::backend is removed
-    #pragma clang diagnostic push
-    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
-    *result = (struct ggml_tensor) {
-        /*.type         =*/ type,
-        /*.backend      =*/ GGML_BACKEND_TYPE_CPU,
-        /*.buffer       =*/ NULL,
-        /*.ne           =*/ { 1, 1, 1, 1 },
-        /*.nb           =*/ { 0, 0, 0, 0 },
-        /*.op           =*/ GGML_OP_NONE,
-        /*.op_params    =*/ { 0 },
-        /*.flags        =*/ 0,
-        /*.grad         =*/ NULL,
-        /*.src          =*/ { NULL },
-        /*.perf_runs    =*/ 0,
-        /*.perf_cycles  =*/ 0,
-        /*.perf_time_us =*/ 0,
-        /*.view_src     =*/ view_src,
-        /*.view_offs    =*/ view_offs,
-        /*.data         =*/ obj_alloc_size > 0 ? (void *)(result + 1) : data,
-        /*.name         =*/ { 0 },
-        /*.extra        =*/ NULL,
-        /*.padding      =*/ { 0 },
-    };
-
-#ifdef __clang__
-    #pragma clang diagnostic pop
-#endif
-
-    // TODO: this should not be needed as long as we don't rely on aligned SIMD loads
-    //ggml_assert_aligned(result->data);
-
-    for (int i = 0; i < n_dims; i++) {
-        result->ne[i] = ne[i];
-    }
-
-    result->nb[0] = ggml_type_size(type);
-    result->nb[1] = result->nb[0]*(result->ne[0]/ggml_blck_size(type));
-    for (int i = 2; i < GGML_MAX_DIMS; i++) {
-        result->nb[i] = result->nb[i - 1]*result->ne[i - 1];
-    }
-
-    ctx->n_objects++;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_new_tensor(
-        struct ggml_context * ctx,
-        enum   ggml_type      type,
-        int                   n_dims,
-        const int64_t       * ne) {
-    return ggml_new_tensor_impl(ctx, type, n_dims, ne, NULL, 0);
-}
-
-struct ggml_tensor * ggml_new_tensor_1d(
-        struct ggml_context * ctx,
-        enum   ggml_type      type,
-        int64_t ne0) {
-    return ggml_new_tensor(ctx, type, 1, &ne0);
-}
-
-struct ggml_tensor * ggml_new_tensor_2d(
-        struct ggml_context * ctx,
-        enum   ggml_type      type,
-        int64_t ne0,
-        int64_t ne1) {
-    const int64_t ne[2] = { ne0, ne1 };
-    return ggml_new_tensor(ctx, type, 2, ne);
-}
-
-struct ggml_tensor * ggml_new_tensor_3d(
-        struct ggml_context * ctx,
-        enum   ggml_type      type,
-        int64_t ne0,
-        int64_t ne1,
-        int64_t ne2) {
-    const int64_t ne[3] = { ne0, ne1, ne2 };
-    return ggml_new_tensor(ctx, type, 3, ne);
-}
-
-struct ggml_tensor * ggml_new_tensor_4d(
-        struct ggml_context * ctx,
-        enum   ggml_type type,
-        int64_t ne0,
-        int64_t ne1,
-        int64_t ne2,
-        int64_t ne3) {
-    const int64_t ne[4] = { ne0, ne1, ne2, ne3 };
-    return ggml_new_tensor(ctx, type, 4, ne);
-}
-
-struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value) {
-    ggml_scratch_save(ctx);
-
-    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 1);
-
-    ggml_scratch_load(ctx);
-
-    ggml_set_i32(result, value);
-
-    return result;
-}
-
-struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value) {
-    ggml_scratch_save(ctx);
-
-    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1);
-
-    ggml_scratch_load(ctx);
-
-    ggml_set_f32(result, value);
-
-    return result;
-}
-
-struct ggml_tensor * ggml_dup_tensor(struct ggml_context * ctx, const struct ggml_tensor * src) {
-    return ggml_new_tensor(ctx, src->type, GGML_MAX_DIMS, src->ne);
-}
-
-static void ggml_set_op_params(struct ggml_tensor * tensor, const void * params, size_t params_size) {
-    GGML_ASSERT(tensor != NULL); // silence -Warray-bounds warnings
-    assert(params_size <= GGML_MAX_OP_PARAMS);
-    memcpy(tensor->op_params, params, params_size);
-}
-
-static int32_t ggml_get_op_params_i32(const struct ggml_tensor * tensor, uint32_t i) {
-    assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t));
-    return ((const int32_t *)(tensor->op_params))[i];
-}
-
-static float ggml_get_op_params_f32(const struct ggml_tensor * tensor, uint32_t i) {
-    assert(i < GGML_MAX_OP_PARAMS / sizeof(float));
-    return ((const float *)(tensor->op_params))[i];
-}
-
-static void ggml_set_op_params_i32(struct ggml_tensor * tensor, uint32_t i, int32_t value) {
-    assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t));
-    ((int32_t *)(tensor->op_params))[i] = value;
-}
-
-static void ggml_set_op_params_f32(struct ggml_tensor * tensor, uint32_t i, float value) {
-    assert(i < GGML_MAX_OP_PARAMS / sizeof(float));
-    ((float *)(tensor->op_params))[i] = value;
-}
-
-struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor) {
-    memset(tensor->data, 0, ggml_nbytes(tensor));
-    return tensor;
-}
-
-struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value) {
-    const int n     = ggml_nrows(tensor);
-    const int nc    = tensor->ne[0];
-    const size_t n1 = tensor->nb[1];
-
-    char * const data = tensor->data;
-
-    switch (tensor->type) {
-        case GGML_TYPE_I8:
-            {
-                assert(tensor->nb[0] == sizeof(int8_t));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_i8(nc, (int8_t *)(data + i*n1), value);
-                }
-            } break;
-        case GGML_TYPE_I16:
-            {
-                assert(tensor->nb[0] == sizeof(int16_t));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_i16(nc, (int16_t *)(data + i*n1), value);
-                }
-            } break;
-        case GGML_TYPE_I32:
-            {
-                assert(tensor->nb[0] == sizeof(int32_t));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_i32(nc, (int32_t *)(data + i*n1), value);
-                }
-            } break;
-        case GGML_TYPE_F16:
-            {
-                assert(tensor->nb[0] == sizeof(ggml_fp16_t));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), GGML_FP32_TO_FP16(value));
-                }
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                assert(tensor->nb[0] == sizeof(ggml_fp16_t));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_bf16(nc, (ggml_bf16_t *)(data + i*n1), GGML_FP32_TO_BF16(value));
-                }
-            } break;
-        case GGML_TYPE_F32:
-            {
-                assert(tensor->nb[0] == sizeof(float));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_f32(nc, (float *)(data + i*n1), value);
-                }
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-
-    return tensor;
-}
-
-struct ggml_tensor * ggml_set_f32(struct ggml_tensor * tensor, float value) {
-    const int n     = ggml_nrows(tensor);
-    const int nc    = tensor->ne[0];
-    const size_t n1 = tensor->nb[1];
-
-    char * const data = tensor->data;
-
-    switch (tensor->type) {
-        case GGML_TYPE_I8:
-            {
-                assert(tensor->nb[0] == sizeof(int8_t));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_i8(nc, (int8_t *)(data + i*n1), value);
-                }
-            } break;
-        case GGML_TYPE_I16:
-            {
-                assert(tensor->nb[0] == sizeof(int16_t));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_i16(nc, (int16_t *)(data + i*n1), value);
-                }
-            } break;
-        case GGML_TYPE_I32:
-            {
-                assert(tensor->nb[0] == sizeof(int32_t));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_i32(nc, (int32_t *)(data + i*n1), value);
-                }
-            } break;
-        case GGML_TYPE_F16:
-            {
-                assert(tensor->nb[0] == sizeof(ggml_fp16_t));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), GGML_FP32_TO_FP16(value));
-                }
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                assert(tensor->nb[0] == sizeof(ggml_bf16_t));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_bf16(nc, (ggml_bf16_t *)(data + i*n1), GGML_FP32_TO_BF16(value));
-                }
-            } break;
-        case GGML_TYPE_F32:
-            {
-                assert(tensor->nb[0] == sizeof(float));
-                for (int i = 0; i < n; i++) {
-                    ggml_vec_set_f32(nc, (float *)(data + i*n1), value);
-                }
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-
-    return tensor;
-}
-
-void ggml_unravel_index(const struct ggml_tensor * tensor, int64_t i, int64_t * i0, int64_t * i1, int64_t * i2, int64_t * i3) {
-    const int64_t ne2 = tensor->ne[2];
-    const int64_t ne1 = tensor->ne[1];
-    const int64_t ne0 = tensor->ne[0];
-
-    const int64_t i3_ = (i/(ne2*ne1*ne0));
-    const int64_t i2_ = (i - i3_*ne2*ne1*ne0)/(ne1*ne0);
-    const int64_t i1_ = (i - i3_*ne2*ne1*ne0 - i2_*ne1*ne0)/ne0;
-    const int64_t i0_ = (i - i3_*ne2*ne1*ne0 - i2_*ne1*ne0 - i1_*ne0);
-
-    if (i0) {
-        * i0 = i0_;
-    }
-    if (i1) {
-        * i1 = i1_;
-    }
-    if (i2) {
-        * i2 = i2_;
-    }
-    if (i3) {
-        * i3 = i3_;
-    }
-}
-
-int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i) {
-    if (!ggml_is_contiguous(tensor)) {
-        int64_t id[4] = { 0, 0, 0, 0 };
-        ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]);
-        return ggml_get_i32_nd(tensor, id[0], id[1], id[2], id[3]);
-    }
-    switch (tensor->type) {
-        case GGML_TYPE_I8:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(int8_t));
-                return ((int8_t *)(tensor->data))[i];
-            }
-        case GGML_TYPE_I16:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(int16_t));
-                return ((int16_t *)(tensor->data))[i];
-            }
-        case GGML_TYPE_I32:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(int32_t));
-                return ((int32_t *)(tensor->data))[i];
-            }
-        case GGML_TYPE_F16:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t));
-                return GGML_FP16_TO_FP32(((ggml_fp16_t *)(tensor->data))[i]);
-            }
-        case GGML_TYPE_BF16:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(ggml_bf16_t));
-                return GGML_BF16_TO_FP32(((ggml_bf16_t *)(tensor->data))[i]);
-            }
-        case GGML_TYPE_F32:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(float));
-                return ((float *)(tensor->data))[i];
-            }
-        default:
-            {
-                GGML_ASSERT(false);
-            }
-    }
-
-    return 0.0f;
-}
-
-void ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value) {
-    if (!ggml_is_contiguous(tensor)) {
-        int64_t id[4] = { 0, 0, 0, 0 };
-        ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]);
-        ggml_set_i32_nd(tensor, id[0], id[1], id[2], id[3], value);
-        return;
-    }
-    switch (tensor->type) {
-        case GGML_TYPE_I8:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(int8_t));
-                ((int8_t *)(tensor->data))[i] = value;
-            } break;
-        case GGML_TYPE_I16:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(int16_t));
-                ((int16_t *)(tensor->data))[i] = value;
-            } break;
-        case GGML_TYPE_I32:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(int32_t));
-                ((int32_t *)(tensor->data))[i] = value;
-            } break;
-        case GGML_TYPE_F16:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t));
-                ((ggml_fp16_t *)(tensor->data))[i] = GGML_FP32_TO_FP16(value);
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(ggml_bf16_t));
-                ((ggml_bf16_t *)(tensor->data))[i] = GGML_FP32_TO_BF16(value);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                GGML_ASSERT(tensor->nb[0] == sizeof(float));
-                ((float *)(tensor->data))[i] = value;
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-int32_t ggml_get_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3) {
-    void * data   = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3];
-    switch (tensor->type) {
-        case GGML_TYPE_I8:
-            return ((int8_t *) data)[0];
-        case GGML_TYPE_I16:
-            return ((int16_t *) data)[0];
-        case GGML_TYPE_I32:
-            return ((int32_t *) data)[0];
-        case GGML_TYPE_F16:
-            return GGML_FP16_TO_FP32(((ggml_fp16_t *) data)[0]);
-        case GGML_TYPE_BF16:
-            return GGML_BF16_TO_FP32(((ggml_bf16_t *) data)[0]);
-        case GGML_TYPE_F32:
-            return ((float *) data)[0];
-        default:
-            GGML_ASSERT(false);
-    }
-
-    return 0.0f;
-}
-
-void ggml_set_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, int32_t value) {
-    void * data   = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3];
-    switch (tensor->type) {
-        case GGML_TYPE_I8:
-            {
-                ((int8_t *)(data))[0] = value;
-            } break;
-        case GGML_TYPE_I16:
-            {
-                ((int16_t *)(data))[0] = value;
-            } break;
-        case GGML_TYPE_I32:
-            {
-                ((int32_t *)(data))[0] = value;
-            } break;
-        case GGML_TYPE_F16:
-            {
-                ((ggml_fp16_t *)(data))[0] = GGML_FP32_TO_FP16(value);
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                ((ggml_bf16_t *)(data))[0] = GGML_FP32_TO_BF16(value);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                ((float *)(data))[0] = value;
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i) {
-    if (!ggml_is_contiguous(tensor)) {
-        int64_t id[4] = { 0, 0, 0, 0 };
-        ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]);
-        return ggml_get_f32_nd(tensor, id[0], id[1], id[2], id[3]);
-    }
-    switch (tensor->type) {
-        case GGML_TYPE_I8:
-            {
-                return ((int8_t *)(tensor->data))[i];
-            }
-        case GGML_TYPE_I16:
-            {
-                return ((int16_t *)(tensor->data))[i];
-            }
-        case GGML_TYPE_I32:
-            {
-                return ((int32_t *)(tensor->data))[i];
-            }
-        case GGML_TYPE_F16:
-            {
-                return GGML_FP16_TO_FP32(((ggml_fp16_t *)(tensor->data))[i]);
-            }
-        case GGML_TYPE_BF16:
-            {
-                return GGML_BF16_TO_FP32(((ggml_bf16_t *)(tensor->data))[i]);
-            }
-        case GGML_TYPE_F32:
-            {
-                return ((float *)(tensor->data))[i];
-            }
-        default:
-            {
-                GGML_ASSERT(false);
-            }
-    }
-
-    return 0.0f;
-}
-
-void ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value) {
-    if (!ggml_is_contiguous(tensor)) {
-        int64_t id[4] = { 0, 0, 0, 0 };
-        ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]);
-        ggml_set_f32_nd(tensor, id[0], id[1], id[2], id[3], value);
-        return;
-    }
-    switch (tensor->type) {
-        case GGML_TYPE_I8:
-            {
-                ((int8_t *)(tensor->data))[i] = value;
-            } break;
-        case GGML_TYPE_I16:
-            {
-                ((int16_t *)(tensor->data))[i] = value;
-            } break;
-        case GGML_TYPE_I32:
-            {
-                ((int32_t *)(tensor->data))[i] = value;
-            } break;
-        case GGML_TYPE_F16:
-            {
-                ((ggml_fp16_t *)(tensor->data))[i] = GGML_FP32_TO_FP16(value);
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                ((ggml_bf16_t *)(tensor->data))[i] = GGML_FP32_TO_BF16(value);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                ((float *)(tensor->data))[i] = value;
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-float ggml_get_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3) {
-    void * data   = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3];
-    switch (tensor->type) {
-        case GGML_TYPE_I8:
-            return ((int8_t *) data)[0];
-        case GGML_TYPE_I16:
-            return ((int16_t *) data)[0];
-        case GGML_TYPE_I32:
-            return ((int32_t *) data)[0];
-        case GGML_TYPE_F16:
-            return GGML_FP16_TO_FP32(((ggml_fp16_t *) data)[0]);
-        case GGML_TYPE_BF16:
-            return GGML_BF16_TO_FP32(((ggml_bf16_t *) data)[0]);
-        case GGML_TYPE_F32:
-            return ((float *) data)[0];
-        default:
-            GGML_ASSERT(false);
-    }
-
-    return 0.0f;
-}
-
-void ggml_set_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, float value) {
-    void * data   = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3];
-    switch (tensor->type) {
-        case GGML_TYPE_I8:
-            {
-                ((int8_t *)(data))[0] = value;
-            } break;
-        case GGML_TYPE_I16:
-            {
-                ((int16_t *)(data))[0] = value;
-            } break;
-        case GGML_TYPE_I32:
-            {
-                ((int32_t *)(data))[0] = value;
-            } break;
-        case GGML_TYPE_F16:
-            {
-                ((ggml_fp16_t *)(data))[0] = GGML_FP32_TO_FP16(value);
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                ((ggml_bf16_t *)(data))[0] = GGML_FP32_TO_BF16(value);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                ((float *)(data))[0] = value;
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-void * ggml_get_data(const struct ggml_tensor * tensor) {
-    return tensor->data;
-}
-
-float * ggml_get_data_f32(const struct ggml_tensor * tensor) {
-    assert(tensor->type == GGML_TYPE_F32);
-    return (float *)(tensor->data);
-}
-
-GGML_CALL enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor) {
-    GGML_ASSERT(tensor->op == GGML_OP_UNARY);
-    return (enum ggml_unary_op) ggml_get_op_params_i32(tensor, 0);
-}
-
-const char * ggml_get_name(const struct ggml_tensor * tensor) {
-    return tensor->name;
-}
-
-struct ggml_tensor * ggml_set_name(struct ggml_tensor * tensor, const char * name) {
-    strncpy(tensor->name, name, sizeof(tensor->name) - 1);
-    tensor->name[sizeof(tensor->name) - 1] = '\0';
-    return tensor;
-}
-
-struct ggml_tensor * ggml_format_name(struct ggml_tensor * tensor, const char * fmt, ...) {
-    va_list args;
-    va_start(args, fmt);
-    vsnprintf(tensor->name, sizeof(tensor->name), fmt, args);
-    va_end(args);
-    return tensor;
-}
-
-struct ggml_tensor * ggml_view_tensor(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * src) {
-    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, src->type, GGML_MAX_DIMS, src->ne, src, 0);
-    ggml_format_name(result, "%s (view)", src->name);
-
-    for (int i = 0; i < GGML_MAX_DIMS; i++) {
-        result->nb[i] = src->nb[i];
-    }
-
-    return result;
-}
-
-struct ggml_tensor * ggml_get_first_tensor(const struct ggml_context * ctx) {
-    struct ggml_object * obj = ctx->objects_begin;
-
-    char * const mem_buffer = ctx->mem_buffer;
-
-    while (obj != NULL) {
-        if (obj->type == GGML_OBJECT_TYPE_TENSOR) {
-            return (struct ggml_tensor *)(mem_buffer + obj->offs);
-        }
-
-        obj = obj->next;
-    }
-
-    return NULL;
-}
-
-struct ggml_tensor * ggml_get_next_tensor(const struct ggml_context * ctx, struct ggml_tensor * tensor) {
-    struct ggml_object * obj = (struct ggml_object *) ((char *)tensor - GGML_OBJECT_SIZE);
-    obj = obj->next;
-
-    char * const mem_buffer = ctx->mem_buffer;
-
-    while (obj != NULL) {
-        if (obj->type == GGML_OBJECT_TYPE_TENSOR) {
-            return (struct ggml_tensor *)(mem_buffer + obj->offs);
-        }
-
-        obj = obj->next;
-    }
-
-    return NULL;
-}
-
-struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name) {
-    struct ggml_object * obj = ctx->objects_begin;
-
-    char * const mem_buffer = ctx->mem_buffer;
-
-    while (obj != NULL) {
-        if (obj->type == GGML_OBJECT_TYPE_TENSOR) {
-            struct ggml_tensor * cur = (struct ggml_tensor *)(mem_buffer + obj->offs);
-            if (strcmp(cur->name, name) == 0) {
-                return cur;
-            }
-        }
-
-        obj = obj->next;
-    }
-
-    return NULL;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-// ggml_dup
-
-static struct ggml_tensor * ggml_dup_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        bool inplace) {
-    bool is_node = false;
-
-    if (!inplace && (a->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_DUP;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_dup(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a) {
-    return ggml_dup_impl(ctx, a, false);
-}
-
-struct ggml_tensor * ggml_dup_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a) {
-    return ggml_dup_impl(ctx, a, true);
-}
-
-// ggml_add
-
-static struct ggml_tensor * ggml_add_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b,
-        bool inplace) {
-    GGML_ASSERT(ggml_can_repeat(b, a));
-
-    bool is_node = false;
-
-    if (!inplace && (a->grad || b->grad)) {
-        // TODO: support backward pass for broadcasting
-        GGML_ASSERT(ggml_are_same_shape(a, b));
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_ADD;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_add(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b) {
-    return ggml_add_impl(ctx, a, b, false);
-}
-
-struct ggml_tensor * ggml_add_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b) {
-    return ggml_add_impl(ctx, a, b, true);
-}
-
-// ggml_add_cast
-
-static struct ggml_tensor * ggml_add_cast_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b,
-        enum   ggml_type     type) {
-    // TODO: support less-strict constraint
-    //       GGML_ASSERT(ggml_can_repeat(b, a));
-    GGML_ASSERT(ggml_can_repeat_rows(b, a));
-
-    // currently only supported for quantized input and f16
-    GGML_ASSERT(ggml_is_quantized(a->type) ||
-                a->type == GGML_TYPE_F16 ||
-                a->type == GGML_TYPE_BF16);
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        // TODO: support backward pass for broadcasting
-        GGML_ASSERT(ggml_are_same_shape(a, b));
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor(ctx, type, GGML_MAX_DIMS, a->ne);
-
-    result->op   = GGML_OP_ADD;
-    result->grad = is_node ? ggml_new_tensor(ctx, GGML_TYPE_F32, GGML_MAX_DIMS, a->ne) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_add_cast(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b,
-        enum   ggml_type     type) {
-    return ggml_add_cast_impl(ctx, a, b, type);
-}
-
-// ggml_add1
-
-static struct ggml_tensor * ggml_add1_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b,
-        bool inplace) {
-    GGML_ASSERT(ggml_is_scalar(b));
-    GGML_ASSERT(ggml_is_padded_1d(a));
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_ADD1;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_add1(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b) {
-    return ggml_add1_impl(ctx, a, b, false);
-}
-
-struct ggml_tensor * ggml_add1_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b) {
-    return ggml_add1_impl(ctx, a, b, true);
-}
-
-// ggml_acc
-
-static struct ggml_tensor * ggml_acc_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b,
-        size_t               nb1,
-        size_t               nb2,
-        size_t               nb3,
-        size_t               offset,
-        bool inplace) {
-    GGML_ASSERT(ggml_nelements(b) <= ggml_nelements(a));
-    GGML_ASSERT(ggml_is_contiguous(a));
-    GGML_ASSERT(a->type == GGML_TYPE_F32);
-    GGML_ASSERT(b->type == GGML_TYPE_F32);
-
-    bool is_node = false;
-
-    if (!inplace && (a->grad || b->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    int32_t params[] = { nb1, nb2, nb3, offset, inplace ? 1 : 0 };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_ACC;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_acc(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b,
-        size_t               nb1,
-        size_t               nb2,
-        size_t               nb3,
-        size_t               offset) {
-    return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, false);
-}
-
-struct ggml_tensor * ggml_acc_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b,
-        size_t               nb1,
-        size_t               nb2,
-        size_t               nb3,
-        size_t               offset) {
-    return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, true);
-}
-
-// ggml_sub
-
-static struct ggml_tensor * ggml_sub_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b,
-        bool inplace) {
-    GGML_ASSERT(ggml_are_same_shape(a, b));
-
-    bool is_node = false;
-
-    if (!inplace && (a->grad || b->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_SUB;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_sub(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b) {
-    return ggml_sub_impl(ctx, a, b, false);
-}
-
-struct ggml_tensor * ggml_sub_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b) {
-    return ggml_sub_impl(ctx, a, b, true);
-}
-
-// ggml_mul
-
-static struct ggml_tensor * ggml_mul_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b,
-        bool inplace) {
-    GGML_ASSERT(ggml_can_repeat(b, a));
-
-    bool is_node = false;
-
-    if (!inplace && (a->grad || b->grad)) {
-        // TODO: support backward pass for broadcasting
-        GGML_ASSERT(ggml_are_same_shape(a, b));
-        is_node = true;
-    }
-
-    if (inplace) {
-        GGML_ASSERT(!is_node);
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_MUL;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_mul(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    return ggml_mul_impl(ctx, a, b, false);
-}
-
-struct ggml_tensor * ggml_mul_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    return ggml_mul_impl(ctx, a, b, true);
-}
-
-// ggml_div
-
-static struct ggml_tensor * ggml_div_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b,
-        bool inplace) {
-    GGML_ASSERT(ggml_can_repeat(b, a));
-
-    bool is_node = false;
-
-    if (!inplace && (a->grad || b->grad)) {
-        is_node = true;
-    }
-
-    if (inplace) {
-        GGML_ASSERT(!is_node);
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_DIV;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_div(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    return ggml_div_impl(ctx, a, b, false);
-}
-
-struct ggml_tensor * ggml_div_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    return ggml_div_impl(ctx, a, b, true);
-}
-
-// ggml_sqr
-
-static struct ggml_tensor * ggml_sqr_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        bool inplace) {
-    bool is_node = false;
-
-    if (!inplace && (a->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_SQR;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_sqr(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_sqr_impl(ctx, a, false);
-}
-
-struct ggml_tensor * ggml_sqr_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_sqr_impl(ctx, a, true);
-}
-
-// ggml_sqrt
-
-static struct ggml_tensor * ggml_sqrt_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        bool inplace) {
-    bool is_node = false;
-
-    if (!inplace && (a->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_SQRT;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_sqrt(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_sqrt_impl(ctx, a, false);
-}
-
-struct ggml_tensor * ggml_sqrt_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_sqrt_impl(ctx, a, true);
-}
-
-// ggml_log
-
-static struct ggml_tensor * ggml_log_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        bool inplace) {
-    bool is_node = false;
-
-    if (!inplace && (a->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_LOG;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_log(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_log_impl(ctx, a, false);
-}
-
-struct ggml_tensor * ggml_log_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_log_impl(ctx, a, true);
-}
-
-// ggml_sum
-
-struct ggml_tensor * ggml_sum(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a) {
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, a->type, 1);
-
-    result->op   = GGML_OP_SUM;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_sum_rows
-
-struct ggml_tensor * ggml_sum_rows(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a) {
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    int64_t ne[GGML_MAX_DIMS] = { 1 };
-    for (int i = 1; i < GGML_MAX_DIMS; ++i) {
-        ne[i] = a->ne[i];
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, ne);
-
-    result->op   = GGML_OP_SUM_ROWS;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_mean
-
-struct ggml_tensor * ggml_mean(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a) {
-    bool is_node = false;
-
-    if (a->grad) {
-        GGML_ASSERT(false); // TODO: implement
-        is_node = true;
-    }
-
-    int64_t ne[4] = { 1, a->ne[1], a->ne[2], a->ne[3] };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
-
-    result->op   = GGML_OP_MEAN;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_argmax
-
-struct ggml_tensor * ggml_argmax(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a) {
-    GGML_ASSERT(ggml_is_matrix(a));
-    bool is_node = false;
-
-    if (a->grad) {
-        GGML_ASSERT(false);
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, a->ne[1]);
-
-    result->op   = GGML_OP_ARGMAX;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_repeat
-
-struct ggml_tensor * ggml_repeat(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b) {
-    GGML_ASSERT(ggml_can_repeat(a, b));
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, b->ne);
-
-    result->op   = GGML_OP_REPEAT;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_repeat_back
-
-struct ggml_tensor * ggml_repeat_back(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b) {
-    GGML_ASSERT(ggml_can_repeat(b, a));
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    if (ggml_are_same_shape(a, b) && !is_node) {
-        return a;
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, b->ne);
-
-    result->op   = GGML_OP_REPEAT_BACK;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_concat
-
-struct ggml_tensor * ggml_concat(
-    struct ggml_context * ctx,
-    struct ggml_tensor * a,
-    struct ggml_tensor * b,
-    int dim) {
-    GGML_ASSERT(dim >= 0 && dim < GGML_MAX_DIMS);
-
-    int64_t ne[GGML_MAX_DIMS];
-    for (int d = 0; d < GGML_MAX_DIMS; ++d) {
-        if (d == dim) {
-            ne[d] = a->ne[d] + b->ne[d];
-            continue;
-        }
-        GGML_ASSERT(a->ne[d] == b->ne[d]);
-        ne[d] = a->ne[d];
-    }
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, ne);
-
-    ggml_set_op_params_i32(result, 0, dim);
-
-    result->op = GGML_OP_CONCAT;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// ggml_abs
-
-struct ggml_tensor * ggml_abs(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_ABS);
-}
-
-struct ggml_tensor * ggml_abs_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_ABS);
-}
-
-// ggml_sgn
-
-struct ggml_tensor * ggml_sgn(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_SGN);
-}
-
-struct ggml_tensor * ggml_sgn_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_SGN);
-}
-
-// ggml_neg
-
-struct ggml_tensor * ggml_neg(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_NEG);
-}
-
-struct ggml_tensor * ggml_neg_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_NEG);
-}
-
-// ggml_step
-
-struct ggml_tensor * ggml_step(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_STEP);
-}
-
-struct ggml_tensor * ggml_step_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_STEP);
-}
-
-// ggml_tanh
-
-struct ggml_tensor * ggml_tanh(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_TANH);
-}
-
-struct ggml_tensor * ggml_tanh_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_TANH);
-}
-
-// ggml_elu
-
-struct ggml_tensor * ggml_elu(
-    struct ggml_context * ctx,
-    struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_ELU);
-}
-
-struct ggml_tensor * ggml_elu_inplace(
-    struct ggml_context * ctx,
-    struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_ELU);
-}
-
-// ggml_relu
-
-struct ggml_tensor * ggml_relu(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_RELU);
-}
-
-struct ggml_tensor * ggml_relu_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_RELU);
-}
-
-// ggml_leaky_relu
-
-struct ggml_tensor * ggml_leaky_relu(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a, float negative_slope, bool inplace) {
-    bool is_node = false;
-
-    if (!inplace && (a->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params(result, &negative_slope, sizeof(negative_slope));
-
-    result->op   = GGML_OP_LEAKY_RELU;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_sigmoid
-
-struct ggml_tensor * ggml_sigmoid(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_SIGMOID);
-}
-
-struct ggml_tensor * ggml_sigmoid_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_SIGMOID);
-}
-
-// ggml_gelu
-
-struct ggml_tensor * ggml_gelu(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_GELU);
-}
-
-struct ggml_tensor * ggml_gelu_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_GELU);
-}
-
-// ggml_gelu_quick
-
-struct ggml_tensor * ggml_gelu_quick(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_GELU_QUICK);
-}
-
-struct ggml_tensor * ggml_gelu_quick_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_GELU_QUICK);
-}
-
-// ggml_silu
-
-struct ggml_tensor * ggml_silu(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_SILU);
-}
-
-struct ggml_tensor * ggml_silu_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_SILU);
-}
-
-// ggml_silu_back
-
-struct ggml_tensor * ggml_silu_back(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        // TODO: implement backward
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_SILU_BACK;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// ggml hardswish
-struct ggml_tensor * ggml_hardswish(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_HARDSWISH);
-}
-
-// ggml hardsigmoid
-struct ggml_tensor * ggml_hardsigmoid(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_unary(ctx, a, GGML_UNARY_OP_HARDSIGMOID);
-}
-
-// ggml_norm
-
-static struct ggml_tensor * ggml_norm_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        float eps,
-        bool inplace) {
-    bool is_node = false;
-
-    if (!inplace && (a->grad)) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params(result, &eps, sizeof(eps));
-
-    result->op   = GGML_OP_NORM;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_norm(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        float eps) {
-    return ggml_norm_impl(ctx, a, eps, false);
-}
-
-struct ggml_tensor * ggml_norm_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        float eps) {
-    return ggml_norm_impl(ctx, a, eps, true);
-}
-
-// ggml_rms_norm
-
-static struct ggml_tensor * ggml_rms_norm_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        float eps,
-        bool inplace) {
-    bool is_node = false;
-
-    if (!inplace && (a->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params(result, &eps, sizeof(eps));
-
-    result->op   = GGML_OP_RMS_NORM;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_rms_norm(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        float  eps) {
-    return ggml_rms_norm_impl(ctx, a, eps, false);
-}
-
-struct ggml_tensor * ggml_rms_norm_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        float eps) {
-    return ggml_rms_norm_impl(ctx, a, eps, true);
-}
-
-// ggml_rms_norm_back
-
-struct ggml_tensor * ggml_rms_norm_back(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        float  eps) {
-    bool is_node = false;
-
-    if (a->grad) {
-        // TODO: implement backward
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params(result, &eps, sizeof(eps));
-
-    result->op   = GGML_OP_RMS_NORM_BACK;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// ggml_group_norm
-
-static struct ggml_tensor * ggml_group_norm_impl(
-    struct ggml_context * ctx,
-    struct ggml_tensor * a,
-    int n_groups,
-    bool inplace) {
-
-    bool is_node = false;
-    if (!inplace && (a->grad)) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op_params[0] = n_groups;
-
-    result->op = GGML_OP_GROUP_NORM;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_group_norm(
-    struct ggml_context * ctx,
-    struct ggml_tensor * a,
-    int n_groups) {
-    return ggml_group_norm_impl(ctx, a, n_groups, false);
-}
-
-struct ggml_tensor * ggml_group_norm_inplace(
-    struct ggml_context * ctx,
-    struct ggml_tensor * a,
-    int n_groups) {
-    return ggml_group_norm_impl(ctx, a, n_groups, true);
-}
-
-// ggml_mul_mat
-
-struct ggml_tensor * ggml_mul_mat(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    GGML_ASSERT(ggml_can_mul_mat(a, b));
-    GGML_ASSERT(!ggml_is_transposed(a));
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        is_node = true;
-    }
-
-    const int64_t ne[4] = { a->ne[1], b->ne[1], b->ne[2], b->ne[3] };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
-
-    result->op   = GGML_OP_MUL_MAT;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-void ggml_mul_mat_set_prec(
-        struct ggml_tensor * a,
-        enum ggml_prec       prec) {
-    GGML_ASSERT(a->op == GGML_OP_MUL_MAT);
-
-    const int32_t prec_i32 = (int32_t) prec;
-
-    ggml_set_op_params_i32(a, 0, prec_i32);
-}
-
-// ggml_mul_mat_id
-
-/*
-    c = ggml_mul_mat_id(ctx, as, b, ids);
-
-    as  -> [cols, rows, n_expert]
-    ids -> [n_experts_used, n_tokens] (i32)
-    b   -> [cols, n_expert_used, n_tokens]
-    c   -> [cols, n_expert_used, n_tokens]
-
-    in b, n_experts_used can be broadcasted to match the n_expert_used of ids
-
-    c ~= as[:,:,i] @ b[:,i%r,t], i = ids[e,t] for all e,t in ids
-*/
-struct ggml_tensor * ggml_mul_mat_id(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * as,
-        struct ggml_tensor  * b,
-        struct ggml_tensor  * ids) {
-    GGML_ASSERT(!ggml_is_transposed(as));
-    GGML_ASSERT(ids->type == GGML_TYPE_I32);
-
-    GGML_ASSERT(as->ne[3] == 1); // as is 3d (one matrix per expert)
-    GGML_ASSERT(b->ne[3] == 1); // b is 3d
-    GGML_ASSERT(ids->ne[2] == 1 && ids->ne[3] == 1); // ids is 2d
-    GGML_ASSERT(ids->ne[1] == b->ne[2]); // must have an expert list per b row
-    GGML_ASSERT(as->ne[0] == b->ne[0]); // can_mul_mat
-    GGML_ASSERT(ids->ne[0] % b->ne[1] == 0); // can broadcast
-
-    bool is_node = false;
-
-    if (as->grad || b->grad) {
-        is_node = true;
-    }
-
-    const int64_t ne[4] = { as->ne[1], ids->ne[0], b->ne[2], 1 };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
-
-    result->op   = GGML_OP_MUL_MAT_ID;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = as;
-    result->src[1] = b;
-    result->src[2] = ids;
-
-    return result;
-}
-
-// ggml_out_prod
-
-struct ggml_tensor * ggml_out_prod(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    GGML_ASSERT(ggml_can_out_prod(a, b));
-    GGML_ASSERT(!ggml_is_transposed(a));
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        is_node = true;
-    }
-
-    // a is broadcastable to b for ne[2] and ne[3] -> use b->ne[2] and b->ne[3]
-    const int64_t ne[4] = { a->ne[0], b->ne[0], b->ne[2], b->ne[3] };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
-
-    result->op   = GGML_OP_OUT_PROD;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// ggml_scale
-
-static struct ggml_tensor * ggml_scale_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        float                 s,
-        bool inplace) {
-    GGML_ASSERT(ggml_is_padded_1d(a));
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params(result, &s, sizeof(s));
-
-    result->op   = GGML_OP_SCALE;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_scale(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        float                s) {
-    return ggml_scale_impl(ctx, a, s, false);
-}
-
-struct ggml_tensor * ggml_scale_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        float                s) {
-    return ggml_scale_impl(ctx, a, s, true);
-}
-
-// ggml_set
-
-static struct ggml_tensor * ggml_set_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        size_t                nb1,
-        size_t                nb2,
-        size_t                nb3,
-        size_t                offset,
-        bool inplace) {
-    GGML_ASSERT(ggml_nelements(a) >= ggml_nelements(b));
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        is_node = true;
-    }
-
-    // make a view of the destination
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    int32_t params[] = { nb1, nb2, nb3, offset, inplace ? 1 : 0 };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_SET;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_set(
-        struct ggml_context * ctx,
-        struct ggml_tensor *  a,
-        struct ggml_tensor *  b,
-        size_t                nb1,
-        size_t                nb2,
-        size_t                nb3,
-        size_t                offset) {
-    return ggml_set_impl(ctx, a, b, nb1, nb2, nb3, offset, false);
-}
-
-struct ggml_tensor * ggml_set_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor *  a,
-        struct ggml_tensor *  b,
-        size_t                nb1,
-        size_t                nb2,
-        size_t                nb3,
-        size_t                offset) {
-    return ggml_set_impl(ctx, a, b, nb1, nb2, nb3, offset, true);
-}
-
-struct ggml_tensor * ggml_set_1d(
-        struct ggml_context * ctx,
-        struct ggml_tensor *  a,
-        struct ggml_tensor *  b,
-        size_t                offset) {
-    return ggml_set_impl(ctx, a, b, a->nb[1], a->nb[2], a->nb[3], offset, false);
-}
-
-struct ggml_tensor * ggml_set_1d_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor *  a,
-        struct ggml_tensor *  b,
-        size_t                offset) {
-    return ggml_set_impl(ctx, a, b, a->nb[1], a->nb[2], a->nb[3], offset, true);
-}
-
-struct ggml_tensor * ggml_set_2d(
-        struct ggml_context * ctx,
-        struct ggml_tensor *  a,
-        struct ggml_tensor *  b,
-        size_t                nb1,
-        size_t                offset) {
-    return ggml_set_impl(ctx, a, b, nb1, a->nb[2], a->nb[3], offset, false);
-}
-
-struct ggml_tensor * ggml_set_2d_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor *  a,
-        struct ggml_tensor *  b,
-        size_t                nb1,
-        size_t                offset) {
-    return ggml_set_impl(ctx, a, b, nb1, a->nb[2], a->nb[3], offset, true);
-}
-
-// ggml_cpy
-
-static struct ggml_tensor * ggml_cpy_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    GGML_ASSERT(ggml_nelements(a) == ggml_nelements(b));
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        // inplace is false and either one have a grad
-        is_node = true;
-    }
-
-    // make a view of the destination
-    struct ggml_tensor * result = ggml_view_tensor(ctx, b);
-    if (strlen(b->name) > 0) {
-        ggml_format_name(result, "%s (copy of %s)", b->name, a->name);
-    } else {
-        ggml_format_name(result, "%s (copy)", a->name);
-    }
-
-    result->op   = GGML_OP_CPY;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_cpy(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b) {
-    return ggml_cpy_impl(ctx, a, b);
-}
-
-struct ggml_tensor * ggml_cast(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        enum   ggml_type      type) {
-    bool is_node = false;
-
-    struct ggml_tensor * result = ggml_new_tensor(ctx, type, GGML_MAX_DIMS, a->ne);
-    ggml_format_name(result, "%s (copy)", a->name);
-
-    result->op   = GGML_OP_CPY;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = result;
-
-    return result;
-}
-
-// ggml_cont
-
-static struct ggml_tensor * ggml_cont_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_dup_tensor(ctx, a);
-    ggml_format_name(result, "%s (cont)", a->name);
-
-    result->op   = GGML_OP_CONT;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_cont(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a) {
-    return ggml_cont_impl(ctx, a);
-}
-
-// make contiguous, with new shape
-GGML_API struct ggml_tensor * ggml_cont_1d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0) {
-    return ggml_cont_4d(ctx, a, ne0, 1, 1, 1);
-}
-
-GGML_API struct ggml_tensor * ggml_cont_2d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0,
-        int64_t               ne1) {
-    return ggml_cont_4d(ctx, a, ne0, ne1, 1, 1);
-}
-
-GGML_API struct ggml_tensor * ggml_cont_3d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0,
-        int64_t               ne1,
-        int64_t               ne2) {
-    return ggml_cont_4d(ctx, a, ne0, ne1, ne2, 1);
-}
-
-struct ggml_tensor * ggml_cont_4d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0,
-        int64_t               ne1,
-        int64_t               ne2,
-        int64_t               ne3) {
-    GGML_ASSERT(ggml_nelements(a) == (ne0*ne1*ne2*ne3));
-
-    bool is_node = false;
-
-    struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type, ne0, ne1, ne2, ne3);
-    ggml_format_name(result, "%s (cont)", a->name);
-
-    result->op   = GGML_OP_CONT;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_reshape
-
-struct ggml_tensor * ggml_reshape(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        struct ggml_tensor * b) {
-    GGML_ASSERT(ggml_is_contiguous(a));
-    // as only the shape of b is relevant, and not its memory layout, b is allowed to be non contiguous.
-    GGML_ASSERT(ggml_nelements(a) == ggml_nelements(b));
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    if (b->grad) {
-        // gradient propagation is not supported
-        //GGML_ASSERT(false);
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, GGML_MAX_DIMS, b->ne, a, 0);
-    ggml_format_name(result, "%s (reshaped)", a->name);
-
-    result->op   = GGML_OP_RESHAPE;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_reshape_1d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0) {
-    GGML_ASSERT(ggml_is_contiguous(a));
-    GGML_ASSERT(ggml_nelements(a) == ne0);
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    const int64_t ne[1] = { ne0 };
-    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 1, ne, a, 0);
-    ggml_format_name(result, "%s (reshaped)", a->name);
-
-    result->op   = GGML_OP_RESHAPE;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_reshape_2d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0,
-        int64_t               ne1) {
-    GGML_ASSERT(ggml_is_contiguous(a));
-    GGML_ASSERT(ggml_nelements(a) == ne0*ne1);
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    const int64_t ne[2] = { ne0, ne1 };
-    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 2, ne, a, 0);
-    ggml_format_name(result, "%s (reshaped)", a->name);
-
-    result->op   = GGML_OP_RESHAPE;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_reshape_3d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0,
-        int64_t               ne1,
-        int64_t               ne2) {
-    GGML_ASSERT(ggml_is_contiguous(a));
-    GGML_ASSERT(ggml_nelements(a) == ne0*ne1*ne2);
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    const int64_t ne[3] = { ne0, ne1, ne2 };
-    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, a, 0);
-    ggml_format_name(result, "%s (reshaped)", a->name);
-
-    result->op   = GGML_OP_RESHAPE;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_reshape_4d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0,
-        int64_t               ne1,
-        int64_t               ne2,
-        int64_t               ne3) {
-    GGML_ASSERT(ggml_is_contiguous(a));
-    GGML_ASSERT(ggml_nelements(a) == ne0*ne1*ne2*ne3);
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    const int64_t ne[4] = { ne0, ne1, ne2, ne3 };
-    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 4, ne, a, 0);
-    ggml_format_name(result, "%s (reshaped)", a->name);
-
-    result->op   = GGML_OP_RESHAPE;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-static struct ggml_tensor * ggml_view_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   n_dims,
-        const int64_t       * ne,
-        size_t                offset) {
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, n_dims, ne, a, offset);
-    ggml_format_name(result, "%s (view)", a->name);
-
-    ggml_set_op_params(result, &offset, sizeof(offset));
-
-    result->op   = GGML_OP_VIEW;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_view_1d
-
-struct ggml_tensor * ggml_view_1d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0,
-        size_t                offset) {
-
-    struct ggml_tensor * result = ggml_view_impl(ctx, a, 1, &ne0, offset);
-
-    return result;
-}
-
-// ggml_view_2d
-
-struct ggml_tensor * ggml_view_2d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0,
-        int64_t               ne1,
-        size_t                nb1,
-        size_t                offset) {
-
-    const int64_t ne[2] = { ne0, ne1 };
-
-    struct ggml_tensor * result = ggml_view_impl(ctx, a, 2, ne, offset);
-
-    result->nb[1] = nb1;
-    result->nb[2] = result->nb[1]*ne1;
-    result->nb[3] = result->nb[2];
-
-    return result;
-}
-
-// ggml_view_3d
-
-struct ggml_tensor * ggml_view_3d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0,
-        int64_t               ne1,
-        int64_t               ne2,
-        size_t                nb1,
-        size_t                nb2,
-        size_t                offset) {
-
-    const int64_t ne[3] = { ne0, ne1, ne2 };
-
-    struct ggml_tensor * result = ggml_view_impl(ctx, a, 3, ne, offset);
-
-    result->nb[1] = nb1;
-    result->nb[2] = nb2;
-    result->nb[3] = result->nb[2]*ne2;
-
-    return result;
-}
-
-// ggml_view_4d
-
-struct ggml_tensor * ggml_view_4d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int64_t               ne0,
-        int64_t               ne1,
-        int64_t               ne2,
-        int64_t               ne3,
-        size_t                nb1,
-        size_t                nb2,
-        size_t                nb3,
-        size_t                offset) {
-
-    const int64_t ne[4] = { ne0, ne1, ne2, ne3 };
-
-    struct ggml_tensor * result = ggml_view_impl(ctx, a, 4, ne, offset);
-
-    result->nb[1] = nb1;
-    result->nb[2] = nb2;
-    result->nb[3] = nb3;
-
-    return result;
-}
-
-// ggml_permute
-
-struct ggml_tensor * ggml_permute(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   axis0,
-        int                   axis1,
-        int                   axis2,
-        int                   axis3) {
-    GGML_ASSERT(axis0 >= 0 && axis0 < GGML_MAX_DIMS);
-    GGML_ASSERT(axis1 >= 0 && axis1 < GGML_MAX_DIMS);
-    GGML_ASSERT(axis2 >= 0 && axis2 < GGML_MAX_DIMS);
-    GGML_ASSERT(axis3 >= 0 && axis3 < GGML_MAX_DIMS);
-
-    GGML_ASSERT(axis0 != axis1);
-    GGML_ASSERT(axis0 != axis2);
-    GGML_ASSERT(axis0 != axis3);
-    GGML_ASSERT(axis1 != axis2);
-    GGML_ASSERT(axis1 != axis3);
-    GGML_ASSERT(axis2 != axis3);
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_view_tensor(ctx, a);
-    ggml_format_name(result, "%s (permuted)", a->name);
-
-    int ne[GGML_MAX_DIMS];
-    int nb[GGML_MAX_DIMS];
-
-    ne[axis0] = a->ne[0];
-    ne[axis1] = a->ne[1];
-    ne[axis2] = a->ne[2];
-    ne[axis3] = a->ne[3];
-
-    nb[axis0] = a->nb[0];
-    nb[axis1] = a->nb[1];
-    nb[axis2] = a->nb[2];
-    nb[axis3] = a->nb[3];
-
-    result->ne[0] = ne[0];
-    result->ne[1] = ne[1];
-    result->ne[2] = ne[2];
-    result->ne[3] = ne[3];
-
-    result->nb[0] = nb[0];
-    result->nb[1] = nb[1];
-    result->nb[2] = nb[2];
-    result->nb[3] = nb[3];
-
-    result->op   = GGML_OP_PERMUTE;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    int32_t params[] = { axis0, axis1, axis2, axis3 };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    return result;
-}
-
-// ggml_transpose
-
-struct ggml_tensor * ggml_transpose(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_view_tensor(ctx, a);
-    ggml_format_name(result, "%s (transposed)", a->name);
-
-    result->ne[0] = a->ne[1];
-    result->ne[1] = a->ne[0];
-
-    result->nb[0] = a->nb[1];
-    result->nb[1] = a->nb[0];
-
-    result->op   = GGML_OP_TRANSPOSE;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_get_rows
-
-struct ggml_tensor * ggml_get_rows(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    GGML_ASSERT(a->ne[2] == b->ne[1]);
-    GGML_ASSERT(b->ne[3] == 1);
-    GGML_ASSERT(b->type == GGML_TYPE_I32);
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        is_node = true;
-    }
-
-    // TODO: implement non F32 return
-    enum ggml_type type = GGML_TYPE_F32;
-    if (a->type == GGML_TYPE_I32) {
-        type = a->type;
-    }
-    struct ggml_tensor * result = ggml_new_tensor_4d(ctx, type, a->ne[0], b->ne[0], b->ne[1], b->ne[2]);
-
-    result->op   = GGML_OP_GET_ROWS;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// ggml_get_rows_back
-
-struct ggml_tensor * ggml_get_rows_back(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        struct ggml_tensor  * c) {
-    GGML_ASSERT(ggml_is_matrix(a) && ggml_is_vector(b) && b->type == GGML_TYPE_I32);
-    GGML_ASSERT(ggml_is_matrix(c) && (a->ne[0] == c->ne[0]));
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        is_node = true;
-    }
-
-    // TODO: implement non F32 return
-    //struct ggml_tensor * result = ggml_new_tensor_2d(ctx, a->type, a->ne[0], b->ne[0]);
-    struct ggml_tensor * result = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, c->ne[0], c->ne[1]);
-
-    result->op   = GGML_OP_GET_ROWS_BACK;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// ggml_diag
-
-struct ggml_tensor * ggml_diag(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    GGML_ASSERT(a->ne[1] == 1);
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    const int64_t ne[4] = { a->ne[0], a->ne[0], a->ne[2], a->ne[3] };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, 4, ne);
-
-    result->op   = GGML_OP_DIAG;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_diag_mask_inf
-
-static struct ggml_tensor * ggml_diag_mask_inf_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   n_past,
-        bool                  inplace) {
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    int32_t params[] = { n_past };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_DIAG_MASK_INF;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_diag_mask_inf(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   n_past) {
-    return ggml_diag_mask_inf_impl(ctx, a, n_past, false);
-}
-
-struct ggml_tensor * ggml_diag_mask_inf_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   n_past) {
-    return ggml_diag_mask_inf_impl(ctx, a, n_past, true);
-}
-
-// ggml_diag_mask_zero
-
-static struct ggml_tensor * ggml_diag_mask_zero_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   n_past,
-        bool                  inplace) {
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    int32_t params[] = { n_past };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_DIAG_MASK_ZERO;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_diag_mask_zero(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   n_past) {
-    return ggml_diag_mask_zero_impl(ctx, a, n_past, false);
-}
-
-struct ggml_tensor * ggml_diag_mask_zero_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   n_past) {
-    return ggml_diag_mask_zero_impl(ctx, a, n_past, true);
-}
-
-// ggml_soft_max
-
-static struct ggml_tensor * ggml_soft_max_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * mask,
-        float                 scale,
-        float                 max_bias,
-        bool                  inplace) {
-    GGML_ASSERT(ggml_is_contiguous(a));
-
-    if (mask) {
-        GGML_ASSERT(mask->type == GGML_TYPE_F16 || mask->type == GGML_TYPE_F32);
-        GGML_ASSERT(ggml_is_contiguous(mask));
-        GGML_ASSERT(ggml_is_matrix(mask));
-        GGML_ASSERT(mask->ne[0] == a->ne[0]);
-        GGML_ASSERT(mask->ne[1] >= a->ne[1]);
-    }
-
-    if (max_bias > 0.0f) {
-        GGML_ASSERT(mask);
-    }
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    float params[] = { scale, max_bias };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_SOFT_MAX;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = mask;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_soft_max(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_soft_max_impl(ctx, a, NULL, 1.0f, 0.0f, false);
-}
-
-struct ggml_tensor * ggml_soft_max_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a) {
-    return ggml_soft_max_impl(ctx, a, NULL, 1.0f, 0.0f, true);
-}
-
-struct ggml_tensor * ggml_soft_max_ext(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * mask,
-        float                 scale,
-        float                 max_bias) {
-    return ggml_soft_max_impl(ctx, a, mask, scale, max_bias, false);
-}
-
-// ggml_soft_max_back
-
-static struct ggml_tensor * ggml_soft_max_back_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        bool                  inplace) {
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        is_node = true; // TODO : implement backward pass
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_SOFT_MAX_BACK;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_soft_max_back(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    return ggml_soft_max_back_impl(ctx, a, b, false);
-}
-
-struct ggml_tensor * ggml_soft_max_back_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    return ggml_soft_max_back_impl(ctx, a, b, true);
-}
-
-// ggml_rope
-
-static struct ggml_tensor * ggml_rope_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        struct ggml_tensor  * c,
-        int                   n_dims,
-        int                   mode,
-        int                   n_ctx_orig,
-        float                 freq_base,
-        float                 freq_scale,
-        float                 ext_factor,
-        float                 attn_factor,
-        float                 beta_fast,
-        float                 beta_slow,
-        bool                  inplace) {
-    GGML_ASSERT((mode & 1) == 0 && "mode & 1 == 1 is no longer supported");
-
-    GGML_ASSERT(ggml_is_vector(b));
-    GGML_ASSERT(b->type == GGML_TYPE_I32);
-    GGML_ASSERT(a->ne[2] == b->ne[0]);
-
-    if (c) {
-        GGML_ASSERT(c->type == GGML_TYPE_F32);
-        GGML_ASSERT(c->ne[0] >= n_dims / 2);
-    }
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    int32_t params[11] = { /*n_past*/ 0, n_dims, mode, /*n_ctx*/ 0, n_ctx_orig };
-    memcpy(params +  5, &freq_base,    sizeof(float));
-    memcpy(params +  6, &freq_scale,   sizeof(float));
-    memcpy(params +  7, &ext_factor,   sizeof(float));
-    memcpy(params +  8, &attn_factor,  sizeof(float));
-    memcpy(params +  9, &beta_fast,    sizeof(float));
-    memcpy(params + 10, &beta_slow,    sizeof(float));
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_ROPE;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-    result->src[2] = c;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_rope(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        int                   n_dims,
-        int                   mode) {
-    return ggml_rope_impl(
-        ctx, a, b, NULL, n_dims, mode, 0, 10000.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, false
-    );
-}
-
-struct ggml_tensor * ggml_rope_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        int                   n_dims,
-        int                   mode) {
-    return ggml_rope_impl(
-        ctx, a, b, NULL, n_dims, mode, 0, 10000.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, true
-    );
-}
-
-struct ggml_tensor * ggml_rope_ext(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        struct ggml_tensor  * c,
-        int                   n_dims,
-        int                   mode,
-        int                   n_ctx_orig,
-        float                 freq_base,
-        float                 freq_scale,
-        float                 ext_factor,
-        float                 attn_factor,
-        float                 beta_fast,
-        float                 beta_slow) {
-    return ggml_rope_impl(
-        ctx, a, b, c, n_dims, mode, n_ctx_orig, freq_base, freq_scale,
-        ext_factor, attn_factor, beta_fast, beta_slow, false
-    );
-}
-
-struct ggml_tensor * ggml_rope_ext_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        struct ggml_tensor  * c,
-        int                   n_dims,
-        int                   mode,
-        int                   n_ctx_orig,
-        float                 freq_base,
-        float                 freq_scale,
-        float                 ext_factor,
-        float                 attn_factor,
-        float                 beta_fast,
-        float                 beta_slow) {
-    return ggml_rope_impl(
-        ctx, a, b, c, n_dims, mode, n_ctx_orig, freq_base, freq_scale,
-        ext_factor, attn_factor, beta_fast, beta_slow, true
-    );
-}
-
-struct ggml_tensor * ggml_rope_custom(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        int                   n_dims,
-        int                   mode,
-        int                   n_ctx_orig,
-        float                 freq_base,
-        float                 freq_scale,
-        float                 ext_factor,
-        float                 attn_factor,
-        float                 beta_fast,
-        float                 beta_slow) {
-    return ggml_rope_impl(
-        ctx, a, b, NULL, n_dims, mode, n_ctx_orig, freq_base, freq_scale,
-        ext_factor, attn_factor, beta_fast, beta_slow, false
-    );
-}
-
-struct ggml_tensor * ggml_rope_custom_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        int                   n_dims,
-        int                   mode,
-        int                   n_ctx_orig,
-        float                 freq_base,
-        float                 freq_scale,
-        float                 ext_factor,
-        float                 attn_factor,
-        float                 beta_fast,
-        float                 beta_slow) {
-    return ggml_rope_impl(
-        ctx, a, b, NULL, n_dims, mode, n_ctx_orig, freq_base, freq_scale,
-        ext_factor, attn_factor, beta_fast, beta_slow, true
-    );
-}
-
-// ggml_rope_back
-
-struct ggml_tensor * ggml_rope_back(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        struct ggml_tensor  * c,
-        int                   n_dims,
-        int                   mode,
-        int                   n_ctx_orig,
-        float                 freq_base,
-        float                 freq_scale,
-        float                 ext_factor,
-        float                 attn_factor,
-        float                 beta_fast,
-        float                 beta_slow) {
-    GGML_ASSERT(ggml_is_vector(b));
-    GGML_ASSERT(b->type == GGML_TYPE_I32);
-    GGML_ASSERT(a->ne[2] == b->ne[0]);
-    GGML_ASSERT(c == NULL && "freq factors not implemented yet");
-
-    GGML_ASSERT((mode & 4) == 0 && "ggml_rope_back() for ChatGLM not implemented yet");
-
-    bool is_node = false;
-
-    if (a->grad) {
-        is_node = false; // TODO: implement backward
-    }
-
-    struct ggml_tensor * result = ggml_dup_tensor(ctx, a);
-
-    int32_t params[11] = { /*n_past*/ 0, n_dims, mode, /*n_ctx*/ 0, n_ctx_orig };
-    memcpy(params +  5, &freq_base,    sizeof(float));
-    memcpy(params +  6, &freq_scale,   sizeof(float));
-    memcpy(params +  7, &ext_factor,   sizeof(float));
-    memcpy(params +  8, &attn_factor,  sizeof(float));
-    memcpy(params +  9, &beta_fast,    sizeof(float));
-    memcpy(params + 10, &beta_slow,    sizeof(float));
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_ROPE_BACK;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// ggml_clamp
-
-struct ggml_tensor * ggml_clamp(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        float                 min,
-        float                 max) {
-    bool is_node = false;
-
-    if (a->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    // TODO: when implement backward, fix this:
-    struct ggml_tensor * result = ggml_view_tensor(ctx, a);
-
-    float params[] = { min, max };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_CLAMP;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_conv_1d
-
-static int64_t ggml_calc_conv_output_size(int64_t ins, int64_t ks, int s, int p, int d) {
-    return (ins + 2 * p - d * (ks - 1) - 1) / s + 1;
-}
-
-GGML_API struct ggml_tensor * ggml_conv_1d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        int                   s0,
-        int                   p0,
-        int                   d0) {
-    struct ggml_tensor * im2col = ggml_im2col(ctx, a, b, s0, 0, p0, 0, d0, 0, false, GGML_TYPE_F16); // [N, OL, IC * K]
-
-    struct ggml_tensor * result =
-        ggml_mul_mat(ctx,
-                ggml_reshape_2d(ctx, im2col, im2col->ne[0], (im2col->ne[2] * im2col->ne[1])), // [N, OL, IC * K] => [N*OL, IC * K]
-                ggml_reshape_2d(ctx, a, (a->ne[0] * a->ne[1]), a->ne[2]));                    // [OC,IC, K] => [OC, IC * K]
-
-    result = ggml_reshape_3d(ctx, result, im2col->ne[1], a->ne[2], im2col->ne[2]); // [N, OC, OL]
-
-    return result;
-}
-
-// ggml_conv_1d_ph
-
-struct ggml_tensor* ggml_conv_1d_ph(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        int                   s,
-        int                   d) {
-    return ggml_conv_1d(ctx, a, b, s, a->ne[0] / 2, d);
-}
-
-// ggml_conv_transpose_1d
-
-static int64_t ggml_calc_conv_transpose_1d_output_size(int64_t ins, int64_t ks, int s, int p, int d) {
-    return (ins - 1) * s - 2 * p + d * (ks - 1) + 1;
-}
-
-GGML_API struct ggml_tensor * ggml_conv_transpose_1d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        int                   s0,
-        int                   p0,
-        int                   d0) {
-    GGML_ASSERT(ggml_is_matrix(b));
-    GGML_ASSERT(a->ne[2] == b->ne[1]);
-    GGML_ASSERT(a->ne[3] == 1);
-
-    GGML_ASSERT(p0 == 0);
-    GGML_ASSERT(d0 == 1);
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    const int64_t ne[4] = {
-        ggml_calc_conv_transpose_1d_output_size(b->ne[0], a->ne[0], s0, 0 /*p0*/, 1 /*d0*/),
-        a->ne[1], b->ne[2], 1,
-    };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
-
-    int32_t params[] = { s0, p0, d0 };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op = GGML_OP_CONV_TRANSPOSE_1D;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// ggml_conv_depthwise
-struct ggml_tensor * ggml_conv_depthwise_2d(
-    struct ggml_context * ctx,
-    struct ggml_tensor * a,
-    struct ggml_tensor * b,
-    int                  s0,
-    int                  s1,
-    int                  p0,
-    int                  p1,
-    int                  d0,
-    int                  d1) {
-
-    struct ggml_tensor * new_a = ggml_reshape_4d(ctx, a, a->ne[0], a->ne[1], 1, a->ne[2] * a->ne[3]);
-    struct ggml_tensor * im2col = ggml_im2col(ctx, new_a,
-                                        ggml_reshape_4d(ctx, b, b->ne[0], b->ne[1], 1, b->ne[2] * b->ne[3]),
-                                        s0, s1, p0, p1, d0, d1, true, GGML_TYPE_F16); // [N * IC, OH, OW, KH * KW]
-    struct ggml_tensor * new_b = ggml_reshape_4d(ctx, im2col, im2col->ne[0], im2col->ne[2] * im2col->ne[1], b->ne[2], b->ne[3]); // [N * IC, OH, OW, KH * KW] => [N, IC, OH * OW, KH * KW]
-
-    new_a = ggml_reshape_4d(ctx, new_a, (new_a->ne[0] * new_a->ne[1]), new_a->ne[2],  new_a->ne[3], 1);                       // [OC,1, KH, KW] => [1, OC, 1, KH * KW]
-    struct ggml_tensor * result = ggml_mul_mat(ctx, new_a, new_b);
-    result = ggml_reshape_4d(ctx, result, im2col->ne[1], im2col->ne[2], b->ne[2], b->ne[3]); // [N, OC, OH, OW]
-
-    return result;
-}
-// ggml_conv_2d
-
-// im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW]
-// a: [OC,IC, KH, KW]
-// b: [N, IC, IH, IW]
-// result: [N, OH, OW, IC*KH*KW]
-struct ggml_tensor * ggml_im2col(
-    struct ggml_context * ctx,
-    struct ggml_tensor  * a,
-    struct ggml_tensor  * b,
-    int                  s0,
-    int                  s1,
-    int                  p0,
-    int                  p1,
-    int                  d0,
-    int                  d1,
-    bool                 is_2D,
-    enum ggml_type       dst_type) {
-
-    if(is_2D) {
-        GGML_ASSERT(a->ne[2] == b->ne[2]);
-    } else {
-        GGML_ASSERT(a->ne[1] == b->ne[1]);
-    }
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    const int64_t OH = is_2D ? ggml_calc_conv_output_size(b->ne[1], a->ne[1], s1, p1, d1) : 0;
-    const int64_t OW =         ggml_calc_conv_output_size(b->ne[0], a->ne[0], s0, p0, d0);
-
-    const int64_t ne[4] = {
-        is_2D ? (a->ne[2] * a->ne[1] * a->ne[0]) : a->ne[1] * a->ne[0],
-        OW,
-        is_2D ? OH : b->ne[2],
-        is_2D ?      b->ne[3] : 1,
-    };
-
-    struct ggml_tensor * result = ggml_new_tensor(ctx, dst_type, 4, ne);
-    int32_t params[] = { s0, s1, p0, p1, d0, d1, (is_2D ? 1 : 0) };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op = GGML_OP_IM2COL;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// a: [OC,IC, KH, KW]
-// b: [N, IC, IH, IW]
-// result: [N, OC, OH, OW]
-struct ggml_tensor * ggml_conv_2d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        int                  s0,
-        int                  s1,
-        int                  p0,
-        int                  p1,
-        int                  d0,
-        int                  d1) {
-    struct ggml_tensor * im2col = ggml_im2col(ctx, a, b, s0, s1, p0, p1, d0, d1, true, GGML_TYPE_F16); // [N, OH, OW, IC * KH * KW]
-
-    struct ggml_tensor * result =
-        ggml_mul_mat(ctx,
-                ggml_reshape_2d(ctx, im2col, im2col->ne[0],  im2col->ne[3] * im2col->ne[2] * im2col->ne[1]), // [N, OH, OW, IC * KH * KW] => [N*OH*OW, IC * KH * KW]
-                ggml_reshape_2d(ctx, a, (a->ne[0] * a->ne[1] * a->ne[2]),  a->ne[3]));                       // [OC,IC, KH, KW] => [OC, IC * KH * KW]
-
-    result = ggml_reshape_4d(ctx, result, im2col->ne[1], im2col->ne[2], im2col->ne[3], a->ne[3]); // [OC, N, OH, OW]
-    result = ggml_cont(ctx, ggml_permute(ctx, result, 0, 1, 3, 2)); // [N, OC, OH, OW]
-
-
-    return result;
-}
-
-// ggml_conv_2d_sk_p0
-struct ggml_tensor * ggml_conv_2d_sk_p0(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    return ggml_conv_2d(ctx, a, b, a->ne[0], a->ne[1], 0, 0, 1, 1);
-}
-
-// ggml_conv_2d_s1_ph
-
-struct ggml_tensor * ggml_conv_2d_s1_ph(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b) {
-    return ggml_conv_2d(ctx, a, b, 1, 1, a->ne[0] / 2, a->ne[1] / 2, 1, 1);
-}
-
-// ggml_conv_transpose_2d_p0
-
-static int64_t ggml_calc_conv_transpose_output_size(int64_t ins, int64_t ks, int s, int p) {
-    return (ins - 1) * s - 2 * p + ks;
-}
-
-struct ggml_tensor * ggml_conv_transpose_2d_p0(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * b,
-        int                   stride) {
-    GGML_ASSERT(a->ne[3] == b->ne[2]);
-
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    const int64_t ne[4] = {
-        ggml_calc_conv_transpose_output_size(b->ne[0], a->ne[0], stride, 0 /*p0*/),
-        ggml_calc_conv_transpose_output_size(b->ne[1], a->ne[1], stride, 0 /*p1*/),
-        a->ne[2], b->ne[3],
-    };
-
-    struct ggml_tensor* result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
-
-    ggml_set_op_params_i32(result, 0, stride);
-
-    result->op = GGML_OP_CONV_TRANSPOSE_2D;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// ggml_pool_*
-
-static int64_t ggml_calc_pool_output_size(int64_t ins, int ks, int s, float p) {
-    return (ins + 2 * p - ks) / s + 1;
-}
-
-// ggml_pool_1d
-
-struct ggml_tensor * ggml_pool_1d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        enum ggml_op_pool     op,
-        int                   k0,
-        int                   s0,
-        int                   p0) {
-
-    bool is_node = false;
-
-    if (a->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    const int64_t ne[4] = {
-        ggml_calc_pool_output_size(a->ne[0], k0, s0, p0),
-        a->ne[1],
-        a->ne[2],
-        a->ne[3],
-    };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
-
-    int32_t params[] = { op, k0, s0, p0 };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op = GGML_OP_POOL_1D;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_pool_2d
-
-struct ggml_tensor * ggml_pool_2d(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        enum ggml_op_pool     op,
-        int                   k0,
-        int                   k1,
-        int                   s0,
-        int                   s1,
-        float                 p0,
-        float                 p1) {
-
-    bool is_node = false;
-
-    if (a->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    struct ggml_tensor * result;
-    const int64_t ne[3] = {
-        ggml_calc_pool_output_size(a->ne[0], k0, s0, p0),
-        ggml_calc_pool_output_size(a->ne[1], k1, s1, p1),
-        a->ne[2],
-    };
-    result = ggml_new_tensor(ctx, GGML_TYPE_F32, 3, ne);
-
-    int32_t params[] = { op, k0, k1, s0, s1, p0, p1 };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op = GGML_OP_POOL_2D;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    return result;
-}
-
-// ggml_upscale
-
-static struct ggml_tensor * ggml_upscale_impl(
-    struct ggml_context * ctx,
-    struct ggml_tensor * a,
-    int ne0,
-    int ne1,
-    int ne2,
-    int ne3) {
-    bool is_node = false;
-
-    if (a->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    GGML_ASSERT(a->ne[0] <= ne0);
-    GGML_ASSERT(a->ne[1] <= ne1);
-    GGML_ASSERT(a->ne[2] <= ne2);
-    GGML_ASSERT(a->ne[3] <= ne3);
-
-    struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type,
-            ne0,
-            ne1,
-            ne2,
-            ne3
-            );
-
-    result->op = GGML_OP_UPSCALE;
-
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_upscale(
-    struct ggml_context * ctx,
-    struct ggml_tensor * a,
-    int scale_factor) {
-    return ggml_upscale_impl(ctx, a, a->ne[0] * scale_factor, a->ne[1] * scale_factor, a->ne[2], a->ne[3]);
-}
-
-struct ggml_tensor * ggml_upscale_ext(
-    struct ggml_context * ctx,
-    struct ggml_tensor * a,
-    int ne0,
-    int ne1,
-    int ne2,
-    int ne3) {
-    return ggml_upscale_impl(ctx, a, ne0, ne1, ne2, ne3);
-}
-
-// ggml_pad
-
-struct ggml_tensor * ggml_pad(
-    struct ggml_context * ctx,
-    struct ggml_tensor  * a,
-    int p0, int p1, int p2, int p3) {
-    bool is_node = false;
-
-    if (a->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type,
-            a->ne[0] + p0,
-            a->ne[1] + p1,
-            a->ne[2] + p2,
-            a->ne[3] + p3);
-
-    result->op = GGML_OP_PAD;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_arange
-
-struct ggml_tensor * ggml_arange(
-    struct ggml_context * ctx,
-    float start,
-    float stop,
-    float step) {
-
-    GGML_ASSERT(stop > start);
-
-    const int64_t steps = (int64_t) ceilf((stop - start) / step);
-
-    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, steps);
-
-    result->op = GGML_OP_ARANGE;
-    ggml_set_op_params_f32(result, 0, start);
-    ggml_set_op_params_f32(result, 1, stop);
-    ggml_set_op_params_f32(result, 2, step);
-
-    return result;
-}
-
-// ggml_timestep_embedding
-
-struct ggml_tensor * ggml_timestep_embedding(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * timesteps,
-            int                   dim,
-            int                   max_period) {
-    bool is_node = false;
-
-    if (timesteps->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    int actual_dim = dim;
-    if (dim % 2 != 0) {
-        actual_dim = dim + 1;
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, actual_dim, timesteps->ne[0]);
-
-    result->op = GGML_OP_TIMESTEP_EMBEDDING;
-    ggml_set_op_params_i32(result, 0, dim);
-    ggml_set_op_params_i32(result, 1, max_period);
-
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = timesteps;
-
-    return result;
-}
-
-// ggml_argsort
-
-struct ggml_tensor * ggml_argsort(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        enum ggml_sort_order  order) {
-    bool is_node = false;
-
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_I32, GGML_MAX_DIMS, a->ne);
-
-    ggml_set_op_params_i32(result, 0, (int32_t) order);
-
-    result->op   = GGML_OP_ARGSORT;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_top_k
-
-struct ggml_tensor * ggml_top_k(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   k) {
-    GGML_ASSERT(a->ne[0] >= k);
-
-    struct ggml_tensor * result = ggml_argsort(ctx, a, GGML_SORT_ORDER_DESC);
-
-    result = ggml_view_4d(ctx, result,
-                k, result->ne[1], result->ne[2], result->ne[3],
-                   result->nb[1], result->nb[2], result->nb[3],
-                0);
-
-    return result;
-}
-
-// ggml_flash_attn_ext
-
-struct ggml_tensor * ggml_flash_attn_ext(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * q,
-        struct ggml_tensor  * k,
-        struct ggml_tensor  * v,
-        struct ggml_tensor  * mask,
-        float                 scale,
-        float                 max_bias) {
-    GGML_ASSERT(ggml_can_mul_mat(k, q));
-    // TODO: check if vT can be multiplied by (k*qT)
-
-    if (mask) {
-        GGML_ASSERT(ggml_is_contiguous(mask));
-        GGML_ASSERT(mask->ne[2] == 1);
-        GGML_ASSERT(mask->ne[3] == 1);
-        GGML_ASSERT(mask->ne[1] >= GGML_PAD(q->ne[1], GGML_KQ_MASK_PAD) &&
-                "the Flash-Attention kernel requires the mask to be padded to GGML_KQ_MASK_PAD and at least n_queries big");
-        //GGML_ASSERT(ggml_can_repeat_rows(mask, qk));
-    }
-
-    if (max_bias > 0.0f) {
-        GGML_ASSERT(mask);
-    }
-
-    bool is_node = false;
-
-    if (q->grad || k->grad || v->grad) {
-        is_node = true;
-    }
-
-    // permute(0, 2, 1, 3)
-    int64_t ne[4] = { q->ne[0], q->ne[2], q->ne[1], q->ne[3] };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
-
-    float params[] = { scale, max_bias };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_FLASH_ATTN_EXT;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = q;
-    result->src[1] = k;
-    result->src[2] = v;
-    result->src[3] = mask;
-
-    return result;
-}
-
-void ggml_flash_attn_ext_set_prec(
-        struct ggml_tensor * a,
-        enum ggml_prec       prec) {
-    GGML_ASSERT(a->op == GGML_OP_FLASH_ATTN_EXT);
-
-    const int32_t prec_i32 = (int32_t) prec;
-
-    ggml_set_op_params_i32(a, 2, prec_i32); // scale is on first pos, max_bias on second
-}
-
-// ggml_flash_attn_back
-
-struct ggml_tensor * ggml_flash_attn_back(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * q,
-        struct ggml_tensor  * k,
-        struct ggml_tensor  * v,
-        struct ggml_tensor  * d,
-        bool                  masked) {
-    GGML_ASSERT(false && "TODO: adapt to ggml_flash_attn_ext() changes");
-
-    GGML_ASSERT(ggml_can_mul_mat(k, q));
-    // TODO: check if vT can be multiplied by (k*qT)
-
-    // d shape [D,N,ne2,ne3]
-    // q shape [D,N,ne2,ne3]
-    // k shape [D,M,kvne2,ne3]
-    // v shape [M,D,kvne2,ne3]
-
-    const int64_t     D = q->ne[0];
-    const int64_t     N = q->ne[1];
-    const int64_t     M = k->ne[1];
-    const int64_t   ne2 = q->ne[2];
-    const int64_t   ne3 = q->ne[3];
-    const int64_t kvne2 = k->ne[2];
-
-    GGML_ASSERT(k->ne[0] == D);
-    GGML_ASSERT(v->ne[0] == M);
-    GGML_ASSERT(v->ne[1] == D);
-    GGML_ASSERT(d->ne[0] == D);
-    GGML_ASSERT(d->ne[1] == N);
-    GGML_ASSERT(k->ne[2] == kvne2);
-    GGML_ASSERT(k->ne[3] == ne3);
-    GGML_ASSERT(v->ne[2] == kvne2);
-    GGML_ASSERT(v->ne[3] == ne3);
-    GGML_ASSERT(d->ne[2] == ne2);
-    GGML_ASSERT(d->ne[3] == ne3);
-
-    GGML_ASSERT(ne2 % kvne2 == 0);
-
-    bool is_node = false;
-
-    if (q->grad || k->grad || v->grad) {
-        // when using this operation (in backwards pass) these grads are set.
-        // we don't want to create (big) grad of our result, so is_node is false.
-        is_node = false;
-    }
-
-    // store gradients of q, k and v as continuous tensors concatenated in result.
-    // note: v and gradv are actually transposed, i.e. v->ne[0] != D.
-    const int64_t elem_q = ggml_nelements(q);
-    const int64_t elem_k = ggml_nelements(k);
-    const int64_t elem_v = ggml_nelements(v);
-
-    enum ggml_type result_type = GGML_TYPE_F32;
-    GGML_ASSERT(ggml_blck_size(result_type) == 1);
-    const size_t tsize = ggml_type_size(result_type);
-
-    const size_t offs_q = 0;
-    const size_t offs_k = offs_q + GGML_PAD(elem_q * tsize, GGML_MEM_ALIGN);
-    const size_t offs_v = offs_k + GGML_PAD(elem_k * tsize, GGML_MEM_ALIGN);
-    const size_t end    = offs_v + GGML_PAD(elem_v * tsize, GGML_MEM_ALIGN);
-
-    const size_t nelements = (end + tsize - 1)/tsize;
-
-    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nelements);
-
-    int32_t masked_i = masked ? 1 : 0;
-    ggml_set_op_params(result, &masked_i, sizeof(masked_i));
-
-    result->op   = GGML_OP_FLASH_ATTN_BACK;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = q;
-    result->src[1] = k;
-    result->src[2] = v;
-    result->src[3] = d;
-
-    return result;
-}
-
-// ggml_ssm_conv
-
-struct ggml_tensor * ggml_ssm_conv(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * s,
-        struct ggml_tensor  * x,
-        struct ggml_tensor  * c,
-        struct ggml_tensor  * sq) {
-    GGML_ASSERT(ggml_is_3d(s));
-    GGML_ASSERT(ggml_is_matrix(x));
-    GGML_ASSERT(ggml_is_matrix(c));
-    GGML_ASSERT(ggml_is_matrix(sq));
-    GGML_ASSERT(sq->type == GGML_TYPE_I32);
-
-    const int64_t d_conv   = c->ne[0];
-    const int64_t d_inner  = c->ne[1];
-    const int64_t n_tokens = x->ne[1];
-    const int64_t n_kv     = s->ne[2];
-
-    GGML_ASSERT( s->ne[0] == d_conv - 1);
-    GGML_ASSERT( s->ne[1] == d_inner);
-    GGML_ASSERT( x->ne[0] == d_inner);
-    GGML_ASSERT(sq->ne[0] == n_kv);
-    GGML_ASSERT(sq->ne[1] == n_tokens);
-
-    bool is_node = false;
-
-    if (s->grad || x->grad || c->grad || sq->grad) {
-        GGML_ASSERT(false); // TODO: implement
-        is_node = true;
-    }
-
-    // 2-in-1 concatenated x and conv_states, {d_inner, n_tokens} with {d_conv, d_inner, n_kv}
-    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, (d_inner*n_tokens) + (d_conv*d_inner*n_kv));
-
-    result->op   = GGML_OP_SSM_CONV;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = s;
-    result->src[1] = x;
-    result->src[2] = c;
-    result->src[3] = sq;
-
-    return result;
-}
-
-// ggml_ssm_scan
-
-struct ggml_tensor * ggml_ssm_scan(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * s,
-        struct ggml_tensor  * x,
-        struct ggml_tensor  * dt,
-        struct ggml_tensor  * A,
-        struct ggml_tensor  * B,
-        struct ggml_tensor  * C,
-        struct ggml_tensor  * sq) {
-    GGML_ASSERT(ggml_is_contiguous(s));
-    GGML_ASSERT(ggml_is_contiguous(x));
-    GGML_ASSERT(ggml_is_contiguous(dt));
-    GGML_ASSERT(ggml_is_contiguous(A));
-    GGML_ASSERT(sq->type == GGML_TYPE_I32);
-    GGML_ASSERT(B->nb[0] == ggml_type_size(B->type));
-    GGML_ASSERT(C->nb[0] == ggml_type_size(C->type));
-    GGML_ASSERT(ggml_are_same_shape(x, dt));
-
-    {
-        const int64_t d_state  = s->ne[0];
-        const int64_t d_inner  = s->ne[1];
-        const int64_t n_tokens = x->ne[1];
-
-        GGML_ASSERT(x->ne[0] == d_inner);
-        GGML_ASSERT(A->ne[0] == d_state);
-        GGML_ASSERT(A->ne[1] == d_inner);
-        GGML_ASSERT(B->ne[0] == d_state);
-        GGML_ASSERT(B->ne[1] == n_tokens);
-        GGML_ASSERT(C->ne[0] == d_state);
-        GGML_ASSERT(C->ne[1] == n_tokens);
-    }
-
-    bool is_node = false;
-
-    if (s->grad || x->grad || dt->grad || A->grad || B->grad || C->grad || sq->grad) {
-        GGML_ASSERT(false); // TODO: implement
-        is_node = true;
-    }
-
-    // 2-in-1 concatenated y and ssm_states, {d_inner, n_tokens} with {d_state, d_inner, n_kv}
-    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, ggml_nelements(x) + ggml_nelements(s));
-
-    result->op   = GGML_OP_SSM_SCAN;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = s;
-    result->src[1] = x;
-    result->src[2] = dt;
-    result->src[3] = A;
-    result->src[4] = B;
-    result->src[5] = C;
-    result->src[6] = sq;
-
-    return result;
-}
-
-// ggml_win_part
-
-struct ggml_tensor * ggml_win_part(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   w) {
-    GGML_ASSERT(a->ne[3] == 1);
-    GGML_ASSERT(a->type  == GGML_TYPE_F32);
-
-    bool is_node = false;
-
-    if (a->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    // padding
-    const int px = (w - a->ne[1]%w)%w;
-    const int py = (w - a->ne[2]%w)%w;
-
-    const int npx = (px + a->ne[1])/w;
-    const int npy = (py + a->ne[2])/w;
-    const int np  = npx*npy;
-
-    const int64_t ne[4] = { a->ne[0], w, w, np, };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
-
-    int32_t params[] = { npx, npy, w };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_WIN_PART;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_win_unpart
-
-struct ggml_tensor * ggml_win_unpart(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   w0,
-        int                   h0,
-        int                   w) {
-    GGML_ASSERT(a->type == GGML_TYPE_F32);
-
-    bool is_node = false;
-
-    if (a->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    const int64_t ne[4] = { a->ne[0], w0, h0, 1, };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 3, ne);
-
-    int32_t params[] = { w };
-    ggml_set_op_params(result, params, sizeof(params));
-
-    result->op   = GGML_OP_WIN_UNPART;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_get_rel_pos
-
-struct ggml_tensor * ggml_get_rel_pos(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        int                   qh,
-        int                   kh) {
-    GGML_ASSERT(qh == kh);
-    GGML_ASSERT(2*MAX(qh, kh) - 1 == a->ne[1]);
-
-    bool is_node = false;
-
-    if (a->grad) {
-        GGML_ASSERT(false); // TODO: implement backward
-        is_node = true;
-    }
-
-    const int64_t ne[4] = { a->ne[0], kh, qh, 1, };
-    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F16, 3, ne);
-
-    result->op   = GGML_OP_GET_REL_POS;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-// ggml_add_rel_pos
-
-static struct ggml_tensor * ggml_add_rel_pos_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * pw,
-        struct ggml_tensor  * ph,
-        bool                  inplace) {
-    GGML_ASSERT(ggml_are_same_shape(pw, ph));
-    GGML_ASSERT(ggml_is_contiguous(a));
-    GGML_ASSERT(ggml_is_contiguous(pw));
-    GGML_ASSERT(ggml_is_contiguous(ph));
-    GGML_ASSERT(ph->type == GGML_TYPE_F32);
-    GGML_ASSERT(pw->type == GGML_TYPE_F32);
-    GGML_ASSERT(pw->ne[3] == a->ne[2]);
-    GGML_ASSERT(pw->ne[0]*pw->ne[0] == a->ne[0]);
-    GGML_ASSERT(pw->ne[1]*pw->ne[2] == a->ne[1]);
-
-    bool is_node = false;
-
-    if (!inplace && (a->grad || pw->grad || ph->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-    ggml_set_op_params_i32(result, 0, inplace ? 1 : 0);
-
-    result->op   = GGML_OP_ADD_REL_POS;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = pw;
-    result->src[2] = ph;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_add_rel_pos(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * pw,
-        struct ggml_tensor  * ph) {
-    return ggml_add_rel_pos_impl(ctx, a, pw, ph, false);
-}
-
-struct ggml_tensor * ggml_add_rel_pos_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        struct ggml_tensor  * pw,
-        struct ggml_tensor  * ph) {
-    return ggml_add_rel_pos_impl(ctx, a, pw, ph, true);
-}
-
-// ggml_unary
-
-static struct ggml_tensor * ggml_unary_impl(
-        struct ggml_context * ctx,
-        struct ggml_tensor * a,
-        enum ggml_unary_op op,
-        bool inplace) {
-    GGML_ASSERT(ggml_is_contiguous_1(a));
-
-    bool is_node = false;
-
-    if (!inplace && (a->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params_i32(result, 0, (int32_t) op);
-
-    result->op   = GGML_OP_UNARY;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_unary(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        enum ggml_unary_op op) {
-    return ggml_unary_impl(ctx, a, op, false);
-}
-
-struct ggml_tensor * ggml_unary_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        enum ggml_unary_op op) {
-    return ggml_unary_impl(ctx, a, op, true);
-}
-
-// ggml_map_unary
-
-static struct ggml_tensor * ggml_map_unary_impl_f32(
-        struct ggml_context        * ctx,
-        struct ggml_tensor         * a,
-        const  ggml_unary_op_f32_t fun,
-        bool   inplace) {
-    bool is_node = false;
-
-    if (!inplace && a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params(result, (const void *) &fun, sizeof(fun));
-
-    result->op = GGML_OP_MAP_UNARY;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_map_unary_f32(
-        struct ggml_context        * ctx,
-        struct ggml_tensor         * a,
-        const  ggml_unary_op_f32_t fun) {
-    return ggml_map_unary_impl_f32(ctx, a, fun, false);
-}
-
-struct ggml_tensor * ggml_map_unary_inplace_f32(
-        struct ggml_context        * ctx,
-        struct ggml_tensor         * a,
-        const  ggml_unary_op_f32_t fun) {
-    return ggml_map_unary_impl_f32(ctx, a, fun, true);
-}
-
-// ggml_map_binary
-
-static struct ggml_tensor * ggml_map_binary_impl_f32(
-        struct ggml_context         * ctx,
-        struct ggml_tensor          * a,
-        struct ggml_tensor          * b,
-        const  ggml_binary_op_f32_t fun,
-        bool   inplace) {
-    GGML_ASSERT(ggml_are_same_shape(a, b));
-
-    bool is_node = false;
-
-    if (!inplace && (a->grad || b->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params(result, (const void *) &fun, sizeof(fun));
-
-    result->op = GGML_OP_MAP_BINARY;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_map_binary_f32(
-        struct ggml_context         * ctx,
-        struct ggml_tensor          * a,
-        struct ggml_tensor          * b,
-        const  ggml_binary_op_f32_t fun) {
-    return ggml_map_binary_impl_f32(ctx, a, b, fun, false);
-}
-
-struct ggml_tensor * ggml_map_binary_inplace_f32(
-        struct ggml_context         * ctx,
-        struct ggml_tensor          * a,
-        struct ggml_tensor          * b,
-        const  ggml_binary_op_f32_t fun) {
-    return ggml_map_binary_impl_f32(ctx, a, b, fun, true);
-}
-
-// ggml_map_custom1_f32
-
-static struct ggml_tensor * ggml_map_custom1_impl_f32(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        const  ggml_custom1_op_f32_t   fun,
-        bool   inplace) {
-    bool is_node = false;
-
-    if (!inplace && a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params(result, (const void *) &fun, sizeof(fun));
-
-    result->op = GGML_OP_MAP_CUSTOM1_F32;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_map_custom1_f32(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        const  ggml_custom1_op_f32_t   fun) {
-    return ggml_map_custom1_impl_f32(ctx, a, fun, false);
-}
-
-struct ggml_tensor * ggml_map_custom1_inplace_f32(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        const  ggml_custom1_op_f32_t   fun) {
-    return ggml_map_custom1_impl_f32(ctx, a, fun, true);
-}
-
-// ggml_map_custom2_f32
-
-static struct ggml_tensor * ggml_map_custom2_impl_f32(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        const  ggml_custom2_op_f32_t   fun,
-        bool   inplace) {
-    bool is_node = false;
-
-    if (!inplace && (a->grad || b->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params(result, (const void *) &fun, sizeof(fun));
-
-    result->op = GGML_OP_MAP_CUSTOM2_F32;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_map_custom2_f32(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        const  ggml_custom2_op_f32_t   fun) {
-    return ggml_map_custom2_impl_f32(ctx, a, b, fun, false);
-}
-
-struct ggml_tensor * ggml_map_custom2_inplace_f32(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        const  ggml_custom2_op_f32_t   fun) {
-    return ggml_map_custom2_impl_f32(ctx, a, b, fun, true);
-}
-
-// ggml_map_custom3_f32
-
-static struct ggml_tensor * ggml_map_custom3_impl_f32(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        struct ggml_tensor           * c,
-        const  ggml_custom3_op_f32_t   fun,
-        bool   inplace) {
-    bool is_node = false;
-
-    if (!inplace && (a->grad || b->grad || c->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    ggml_set_op_params(result, (const void *) &fun, sizeof(fun));
-
-    result->op = GGML_OP_MAP_CUSTOM3_F32;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-    result->src[2] = c;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_map_custom3_f32(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        struct ggml_tensor           * c,
-        const  ggml_custom3_op_f32_t   fun) {
-    return ggml_map_custom3_impl_f32(ctx, a, b, c, fun, false);
-}
-
-struct ggml_tensor * ggml_map_custom3_inplace_f32(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        struct ggml_tensor           * c,
-        const  ggml_custom3_op_f32_t   fun) {
-    return ggml_map_custom3_impl_f32(ctx, a, b, c, fun, true);
-}
-
-// ggml_map_custom1
-struct ggml_map_custom1_op_params {
-    ggml_custom1_op_t fun;
-    int n_tasks;
-    void * userdata;
-};
-
-static struct ggml_tensor * ggml_map_custom1_impl(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        const  ggml_custom1_op_t       fun,
-        int                            n_tasks,
-        void                         * userdata,
-        bool                           inplace) {
-    GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0);
-
-    bool is_node = false;
-
-    if (!inplace && a->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    struct ggml_map_custom1_op_params params = {
-        /*.fun      =*/ fun,
-        /*.n_tasks  =*/ n_tasks,
-        /*.userdata =*/ userdata
-    };
-    ggml_set_op_params(result, (const void *) &params, sizeof(params));
-
-    result->op = GGML_OP_MAP_CUSTOM1;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_map_custom1(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        const  ggml_custom1_op_t       fun,
-        int                            n_tasks,
-        void                         * userdata) {
-    return ggml_map_custom1_impl(ctx, a, fun, n_tasks, userdata, false);
-}
-
-struct ggml_tensor * ggml_map_custom1_inplace(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        const  ggml_custom1_op_t       fun,
-        int                            n_tasks,
-        void                         * userdata) {
-    return ggml_map_custom1_impl(ctx, a, fun, n_tasks, userdata, true);
-}
-
-// ggml_map_custom2
-
-struct ggml_map_custom2_op_params {
-    ggml_custom2_op_t fun;
-    int n_tasks;
-    void * userdata;
-};
-
-static struct ggml_tensor * ggml_map_custom2_impl(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        const  ggml_custom2_op_t       fun,
-        int                            n_tasks,
-        void                         * userdata,
-        bool                           inplace) {
-    GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0);
-
-    bool is_node = false;
-
-    if (!inplace && (a->grad || b->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    struct ggml_map_custom2_op_params params = {
-        /*.fun      =*/ fun,
-        /*.n_tasks  =*/ n_tasks,
-        /*.userdata =*/ userdata
-    };
-    ggml_set_op_params(result, (const void *) &params, sizeof(params));
-
-    result->op = GGML_OP_MAP_CUSTOM2;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_map_custom2(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        const  ggml_custom2_op_t       fun,
-        int                            n_tasks,
-        void                         * userdata) {
-    return ggml_map_custom2_impl(ctx, a, b, fun, n_tasks, userdata, false);
-}
-
-struct ggml_tensor * ggml_map_custom2_inplace(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        const  ggml_custom2_op_t       fun,
-        int                            n_tasks,
-        void                         * userdata) {
-    return ggml_map_custom2_impl(ctx, a, b, fun, n_tasks, userdata, true);
-}
-
-// ggml_map_custom3
-
-struct ggml_map_custom3_op_params {
-    ggml_custom3_op_t fun;
-    int n_tasks;
-    void * userdata;
-};
-
-static struct ggml_tensor * ggml_map_custom3_impl(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        struct ggml_tensor           * c,
-        const  ggml_custom3_op_t       fun,
-        int                            n_tasks,
-        void                         * userdata,
-        bool                           inplace) {
-    GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0);
-
-    bool is_node = false;
-
-    if (!inplace && (a->grad || b->grad || c->grad)) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
-
-    struct ggml_map_custom3_op_params params = {
-        /*.fun      =*/ fun,
-        /*.n_tasks  =*/ n_tasks,
-        /*.userdata =*/ userdata
-    };
-    ggml_set_op_params(result, (const void *) &params, sizeof(params));
-
-    result->op = GGML_OP_MAP_CUSTOM3;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-    result->src[2] = c;
-
-    return result;
-}
-
-struct ggml_tensor * ggml_map_custom3(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        struct ggml_tensor           * c,
-        const  ggml_custom3_op_t       fun,
-        int                            n_tasks,
-        void                         * userdata) {
-    return ggml_map_custom3_impl(ctx, a, b, c, fun, n_tasks, userdata, false);
-}
-
-struct ggml_tensor * ggml_map_custom3_inplace(
-        struct ggml_context          * ctx,
-        struct ggml_tensor           * a,
-        struct ggml_tensor           * b,
-        struct ggml_tensor           * c,
-        const  ggml_custom3_op_t       fun,
-        int                            n_tasks,
-        void                         * userdata) {
-    return ggml_map_custom3_impl(ctx, a, b, c, fun, n_tasks, userdata, true);
-}
-
-// ggml_cross_entropy_loss
-
-struct ggml_tensor * ggml_cross_entropy_loss(
-        struct ggml_context         * ctx,
-        struct ggml_tensor          * a,
-        struct ggml_tensor          * b) {
-    GGML_ASSERT(ggml_are_same_shape(a, b));
-    bool is_node = false;
-
-    if (a->grad || b->grad) {
-        is_node = true;
-    }
-
-    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, a->type, 1);
-
-    result->op   = GGML_OP_CROSS_ENTROPY_LOSS;
-    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-
-    return result;
-}
-
-// ggml_cross_entropy_loss_back
-
-struct ggml_tensor * ggml_cross_entropy_loss_back(
-        struct ggml_context         * ctx,
-        struct ggml_tensor          * a,
-        struct ggml_tensor          * b,
-        struct ggml_tensor          * c) {
-    GGML_ASSERT(ggml_are_same_shape(a, b));
-    GGML_ASSERT(ggml_is_scalar(c));
-
-    struct ggml_tensor * result = ggml_dup_tensor(ctx, a);
-
-    result->op   = GGML_OP_CROSS_ENTROPY_LOSS_BACK;
-    result->grad = NULL;
-    result->src[0] = a;
-    result->src[1] = b;
-    result->src[2] = c;
-
-    return result;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-void ggml_set_param(
-        struct ggml_context * ctx,
-        struct ggml_tensor * tensor) {
-    tensor->flags |= GGML_TENSOR_FLAG_PARAM;
-
-    GGML_ASSERT(tensor->grad == NULL);
-    tensor->grad = ggml_dup_tensor(ctx, tensor);
-    ggml_format_name(tensor->grad, "%s (grad)", tensor->name);
-}
-
-// ggml_compute_forward_dup
-
-static void ggml_compute_forward_dup_same_cont(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
-    GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0));
-    GGML_ASSERT(src0->type == dst->type);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const size_t nb00 = src0->nb[0];
-    const size_t nb0 = dst->nb[0];
-
-    const int ith = params->ith; // thread index
-    const int nth = params->nth; // number of threads
-
-    // parallelize by elements
-    const int ne = ggml_nelements(dst);
-    const int dr = (ne + nth - 1) / nth;
-    const int ie0 = dr * ith;
-    const int ie1 = MIN(ie0 + dr, ne);
-
-    if (ie0 < ie1) {
-        memcpy(
-            ((char *)  dst->data + ie0*nb0),
-            ((char *) src0->data + ie0*nb00),
-            (ie1 - ie0) * ggml_type_size(src0->type));
-    }
-}
-
-static void ggml_compute_forward_dup_f16(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    const int ith = params->ith; // thread index
-    const int nth = params->nth; // number of threads
-
-    if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) {
-        ggml_compute_forward_dup_same_cont(params, dst);
-        return;
-    }
-
-    // parallelize by rows
-    const int nr = ne01;
-    // number of rows per thread
-    const int dr = (nr + nth - 1) / nth;
-    // row range for this thread
-    const int ir0 = dr * ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    if (src0->type == dst->type &&
-        ne00 == ne0 &&
-        nb00 == ggml_type_size(src0->type) && nb0 == ggml_type_size(dst->type)) {
-        // copy by rows
-        const size_t rs = ne00*nb00;
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    memcpy(
-                        ((char *)  dst->data + i01*nb1  + i02*nb2  + i03*nb3),
-                        ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03),
-                        rs);
-                }
-            }
-        }
-        return;
-    }
-
-    // TODO: add more special-case implementations for tensor shapes/strides that can benefit from memcpy
-
-    if (ggml_is_contiguous(dst)) {
-        if (nb00 == sizeof(ggml_fp16_t)) {
-            if (dst->type == GGML_TYPE_F16) {
-                size_t id = 0;
-                const size_t rs = ne00 * nb00;
-                char * dst_ptr = (char *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += rs * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03;
-                            memcpy(dst_ptr + id, src0_ptr, rs);
-                            id += rs;
-                        }
-                        id += rs * (ne01 - ir1);
-                    }
-                }
-            } else if (dst->type == GGML_TYPE_F32) {
-                size_t id = 0;
-                float * dst_ptr = (float *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                dst_ptr[id] = GGML_FP16_TO_FP32(src0_ptr[i00]);
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else if (type_traits[dst->type].from_float) {
-                ggml_from_float_t const quantize_row_q = type_traits[dst->type].from_float;
-                float * src0_f32 = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith;
-
-                size_t id = 0;
-                size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type));
-                char * dst_ptr = (char *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += rs * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
-
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                src0_f32[i00] = GGML_FP16_TO_FP32(src0_ptr[i00]);
-                            }
-
-                            quantize_row_q(src0_f32, dst_ptr + id, ne00);
-                            id += rs;
-                        }
-                        id += rs * (ne01 - ir1);
-                    }
-                }
-            } else {
-                GGML_ASSERT(false); // TODO: implement
-            }
-        } else {
-            //printf("%s: this is not optimal - fix me\n", __func__);
-
-            if (dst->type == GGML_TYPE_F32) {
-                size_t id = 0;
-                float * dst_ptr = (float *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-
-                                dst_ptr[id] = GGML_FP16_TO_FP32(*src0_ptr);
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else if (dst->type == GGML_TYPE_F16) {
-                size_t id = 0;
-                ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-
-                                dst_ptr[id] = *src0_ptr;
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else {
-                GGML_ASSERT(false); // TODO: implement
-            }
-        }
-        return;
-    }
-
-    // dst counters
-    int64_t i10 = 0;
-    int64_t i11 = 0;
-    int64_t i12 = 0;
-    int64_t i13 = 0;
-
-    if (dst->type == GGML_TYPE_F16) {
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                i10 += ne00 * ir0;
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
-
-                        memcpy(dst_ptr, src0_ptr, sizeof(ggml_fp16_t));
-
-                        if (++i10 == ne00) {
-                            i10 = 0;
-                            if (++i11 == ne01) {
-                                i11 = 0;
-                                if (++i12 == ne02) {
-                                    i12 = 0;
-                                    if (++i13 == ne03) {
-                                        i13 = 0;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                i10 += ne00 * (ne01 - ir1);
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    } else if (dst->type == GGML_TYPE_F32) {
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                i10 += ne00 * ir0;
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
-
-                        *(float *) dst_ptr = GGML_FP16_TO_FP32(*(const ggml_fp16_t *) src0_ptr);
-
-                        if (++i10 == ne0) {
-                            i10 = 0;
-                            if (++i11 == ne1) {
-                                i11 = 0;
-                                if (++i12 == ne2) {
-                                    i12 = 0;
-                                    if (++i13 == ne3) {
-                                        i13 = 0;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                i10 += ne00 * (ne01 - ir1);
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    } else {
-        GGML_ASSERT(false); // TODO: implement
-    }
-}
-
-static void ggml_compute_forward_dup_bf16(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    const int ith = params->ith; // thread index
-    const int nth = params->nth; // number of threads
-
-    if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) {
-        ggml_compute_forward_dup_same_cont(params, dst);
-        return;
-    }
-
-    // parallelize by rows
-    const int nr = ne01;
-    // number of rows per thread
-    const int dr = (nr + nth - 1) / nth;
-    // row range for this thread
-    const int ir0 = dr * ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    if (src0->type == dst->type &&
-        ne00 == ne0 &&
-        nb00 == ggml_type_size(src0->type) && nb0 == ggml_type_size(dst->type)) {
-        // copy by rows
-        const size_t rs = ne00*nb00;
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    memcpy(
-                        ((char *)  dst->data + i01*nb1  + i02*nb2  + i03*nb3),
-                        ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03),
-                        rs);
-                }
-            }
-        }
-        return;
-    }
-
-    // TODO: add more special-case implementations for tensor shapes/strides that can benefit from memcpy
-
-    if (ggml_is_contiguous(dst)) {
-        if (nb00 == sizeof(ggml_bf16_t)) {
-            if (dst->type == GGML_TYPE_BF16) {
-                size_t id = 0;
-                const size_t rs = ne00 * nb00;
-                char * dst_ptr = (char *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += rs * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03;
-                            memcpy(dst_ptr + id, src0_ptr, rs);
-                            id += rs;
-                        }
-                        id += rs * (ne01 - ir1);
-                    }
-                }
-            } else if (dst->type == GGML_TYPE_F16) {
-                size_t id = 0;
-                ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                dst_ptr[id] = GGML_FP32_TO_FP16(GGML_BF16_TO_FP32(src0_ptr[i00]));
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else if (dst->type == GGML_TYPE_F32) {
-                size_t id = 0;
-                float * dst_ptr = (float *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                dst_ptr[id] = GGML_BF16_TO_FP32(src0_ptr[i00]);
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else if (type_traits[dst->type].from_float) {
-                ggml_from_float_t const quantize_row_q = type_traits[dst->type].from_float;
-                float * src0_f32 = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith;
-
-                size_t id = 0;
-                size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type));
-                char * dst_ptr = (char *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += rs * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
-
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                src0_f32[i00] = GGML_BF16_TO_FP32(src0_ptr[i00]);
-                            }
-
-                            quantize_row_q(src0_f32, dst_ptr + id, ne00);
-                            id += rs;
-                        }
-                        id += rs * (ne01 - ir1);
-                    }
-                }
-            } else {
-                GGML_ASSERT(false); // TODO: implement
-            }
-        } else {
-            //printf("%s: this is not optimal - fix me\n", __func__);
-
-            if (dst->type == GGML_TYPE_F32) {
-                size_t id = 0;
-                float * dst_ptr = (float *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-
-                                dst_ptr[id] = GGML_BF16_TO_FP32(*src0_ptr);
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else if (dst->type == GGML_TYPE_BF16) {
-                size_t id = 0;
-                ggml_bf16_t * dst_ptr = (ggml_bf16_t *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-
-                                dst_ptr[id] = *src0_ptr;
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else if (dst->type == GGML_TYPE_F16) {
-                size_t id = 0;
-                ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-
-                                dst_ptr[id] = GGML_FP32_TO_FP16(GGML_BF16_TO_FP32(*src0_ptr));
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else {
-                GGML_ASSERT(false); // TODO: implement
-            }
-        }
-        return;
-    }
-
-    // dst counters
-    int64_t i10 = 0;
-    int64_t i11 = 0;
-    int64_t i12 = 0;
-    int64_t i13 = 0;
-
-    if (dst->type == GGML_TYPE_BF16) {
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                i10 += ne00 * ir0;
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
-
-                        memcpy(dst_ptr, src0_ptr, sizeof(ggml_bf16_t));
-
-                        if (++i10 == ne00) {
-                            i10 = 0;
-                            if (++i11 == ne01) {
-                                i11 = 0;
-                                if (++i12 == ne02) {
-                                    i12 = 0;
-                                    if (++i13 == ne03) {
-                                        i13 = 0;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                i10 += ne00 * (ne01 - ir1);
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    } else if (dst->type == GGML_TYPE_F16) {
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                i10 += ne00 * ir0;
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
-
-                        *(ggml_fp16_t *) dst_ptr = GGML_FP32_TO_FP16(GGML_BF16_TO_FP32(*(const ggml_bf16_t *) src0_ptr));
-
-                        if (++i10 == ne0) {
-                            i10 = 0;
-                            if (++i11 == ne1) {
-                                i11 = 0;
-                                if (++i12 == ne2) {
-                                    i12 = 0;
-                                    if (++i13 == ne3) {
-                                        i13 = 0;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                i10 += ne00 * (ne01 - ir1);
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    } else if (dst->type == GGML_TYPE_F32) {
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                i10 += ne00 * ir0;
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
-
-                        *(float *) dst_ptr = GGML_BF16_TO_FP32(*(const ggml_bf16_t *) src0_ptr);
-
-                        if (++i10 == ne0) {
-                            i10 = 0;
-                            if (++i11 == ne1) {
-                                i11 = 0;
-                                if (++i12 == ne2) {
-                                    i12 = 0;
-                                    if (++i13 == ne3) {
-                                        i13 = 0;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                i10 += ne00 * (ne01 - ir1);
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    } else {
-        GGML_ASSERT(false); // TODO: implement
-    }
-}
-
-static void ggml_compute_forward_dup_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    const int ith = params->ith; // thread index
-    const int nth = params->nth; // number of threads
-
-    if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) {
-        ggml_compute_forward_dup_same_cont(params, dst);
-        return;
-    }
-
-    // parallelize by rows
-    const int nr = ne01;
-    // number of rows per thread
-    const int dr = (nr + nth - 1) / nth;
-    // row range for this thread
-    const int ir0 = dr * ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    if (src0->type == dst->type &&
-        ne00 == ne0 &&
-        nb00 == ggml_type_size(src0->type) && nb0 == ggml_type_size(dst->type)) {
-        // copy by rows
-        const size_t rs = ne00*nb00;
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    memcpy(
-                        ((char *)  dst->data + i01*nb1  + i02*nb2  + i03*nb3),
-                        ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03),
-                        rs);
-                }
-            }
-        }
-        return;
-    }
-
-    if (ggml_is_contiguous(dst)) {
-        // TODO: simplify
-        if (nb00 == sizeof(float)) {
-            if (dst->type == GGML_TYPE_F32) {
-                size_t id = 0;
-                const size_t rs = ne00 * nb00;
-                char * dst_ptr = (char *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += rs * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03;
-                            memcpy(dst_ptr + id, src0_ptr, rs);
-                            id += rs;
-                        }
-                        id += rs * (ne01 - ir1);
-                    }
-                }
-            } else if (type_traits[dst->type].from_float) {
-                ggml_from_float_t const quantize_row_q = type_traits[dst->type].from_float;
-
-                size_t id = 0;
-                size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type));
-                char * dst_ptr = (char *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += rs * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            const float * src0_ptr = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
-                            quantize_row_q(src0_ptr, dst_ptr + id, ne00);
-                            id += rs;
-                        }
-                        id += rs * (ne01 - ir1);
-                    }
-                }
-            } else {
-                GGML_ASSERT(false); // TODO: implement
-            }
-        } else {
-            //printf("%s: this is not optimal - fix me\n", __func__);
-
-            if (dst->type == GGML_TYPE_F32) {
-                size_t id = 0;
-                float * dst_ptr = (float *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-
-                                dst_ptr[id] = *src0_ptr;
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else if (dst->type == GGML_TYPE_F16) {
-                size_t id = 0;
-                ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-
-                                dst_ptr[id] = GGML_FP32_TO_FP16(*src0_ptr);
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else if (dst->type == GGML_TYPE_BF16) {
-                size_t id = 0;
-                ggml_bf16_t * dst_ptr = (ggml_bf16_t *) dst->data;
-
-                for (int i03 = 0; i03 < ne03; i03++) {
-                    for (int i02 = 0; i02 < ne02; i02++) {
-                        id += ne00 * ir0;
-                        for (int i01 = ir0; i01 < ir1; i01++) {
-                            for (int i00 = 0; i00 < ne00; i00++) {
-                                const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-
-                                dst_ptr[id] = GGML_FP32_TO_BF16(*src0_ptr);
-                                id++;
-                            }
-                        }
-                        id += ne00 * (ne01 - ir1);
-                    }
-                }
-            } else {
-                GGML_ASSERT(false); // TODO: implement
-            }
-        }
-
-        return;
-    }
-
-    // dst counters
-
-    int64_t i10 = 0;
-    int64_t i11 = 0;
-    int64_t i12 = 0;
-    int64_t i13 = 0;
-
-    if (dst->type == GGML_TYPE_F32) {
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                i10 += ne00 * ir0;
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
-
-                        memcpy(dst_ptr, src0_ptr, sizeof(float));
-
-                        if (++i10 == ne0) {
-                            i10 = 0;
-                            if (++i11 == ne1) {
-                                i11 = 0;
-                                if (++i12 == ne2) {
-                                    i12 = 0;
-                                    if (++i13 == ne3) {
-                                        i13 = 0;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                i10 += ne00 * (ne01 - ir1);
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    } else if (dst->type == GGML_TYPE_F16) {
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                i10 += ne00 * ir0;
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
-
-                        *(ggml_fp16_t *) dst_ptr = GGML_FP32_TO_FP16(*(const float *) src0_ptr);
-
-                        if (++i10 == ne0) {
-                            i10 = 0;
-                            if (++i11 == ne1) {
-                                i11 = 0;
-                                if (++i12 == ne2) {
-                                    i12 = 0;
-                                    if (++i13 == ne3) {
-                                        i13 = 0;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                i10 += ne00 * (ne01 - ir1);
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    } else if (dst->type == GGML_TYPE_BF16) {
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                i10 += ne00 * ir0;
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
-
-                        *(ggml_bf16_t *) dst_ptr = GGML_FP32_TO_BF16(*(const float *) src0_ptr);
-
-                        if (++i10 == ne0) {
-                            i10 = 0;
-                            if (++i11 == ne1) {
-                                i11 = 0;
-                                if (++i12 == ne2) {
-                                    i12 = 0;
-                                    if (++i13 == ne3) {
-                                        i13 = 0;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                i10 += ne00 * (ne01 - ir1);
-                while (i10 >= ne0) {
-                    i10 -= ne0;
-                    if (++i11 == ne1) {
-                        i11 = 0;
-                        if (++i12 == ne2) {
-                            i12 = 0;
-                            if (++i13 == ne3) {
-                                i13 = 0;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    } else {
-        GGML_ASSERT(false); // TODO: implement
-    }
-}
-
-// A simplified version of ggml_compute_forward_dup that doesn't do float upcasting, and just plain old memcpy.
-static void ggml_compute_forward_dup_bytes(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
-    GGML_ASSERT(src0->type == dst->type);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst)) {
-        ggml_compute_forward_dup_same_cont(params, dst);
-        return;
-    }
-
-    GGML_TENSOR_UNARY_OP_LOCALS;
-
-    const size_t type_size = ggml_type_size(src0->type);
-    const int ith = params->ith; // thread index
-    const int nth = params->nth; // number of threads
-
-
-    // parallelize by rows
-    const int nr = ne01;
-    // number of rows per thread
-    const int dr = (nr + nth - 1) / nth;
-    // row range for this thread
-    const int ir0 = dr * ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    if (src0->type == dst->type &&
-        ne00 == ne0 &&
-        nb00 == type_size && nb0 == type_size) {
-        // copy by rows
-        const size_t rs = ne00 * type_size;
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                    memcpy(
-                        ((char *)  dst->data + i01*nb1  + i02*nb2  + i03*nb3),
-                        ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03),
-                        rs);
-                }
-            }
-        }
-        return;
-    }
-
-    if (ggml_is_contiguous(dst)) {
-        size_t id = 0;
-        char * dst_ptr = (char *) dst->data;
-        const size_t rs = ne00 * type_size;
-
-        if (nb00 == type_size) {
-            // src0 is contigous on first dimension, copy by rows
-            for (int64_t i03 = 0; i03 < ne03; i03++) {
-                for (int64_t i02 = 0; i02 < ne02; i02++) {
-                    id += rs * ir0;
-                    for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                        const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03;
-                        memcpy(dst_ptr + id, src0_ptr, rs);
-                        id += rs;
-                    }
-                    id += rs * (ne01 - ir1);
-                }
-            }
-        } else {
-            //printf("%s: this is not optimal - fix me\n", __func__);
-
-            for (int64_t i03 = 0; i03 < ne03; i03++) {
-                for (int64_t i02 = 0; i02 < ne02; i02++) {
-                    id += rs * ir0;
-                    for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                        for (int64_t i00 = 0; i00 < ne00; i00++) {
-                            const char * src0_ptr = (char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03;
-                            memcpy(dst_ptr + id, src0_ptr, type_size);
-
-                            id += type_size;
-                        }
-                    }
-                    id += rs * (ne01 - ir1);
-                }
-            }
-        }
-
-        return;
-    }
-
-    // dst counters
-
-    int64_t i10 = 0;
-    int64_t i11 = 0;
-    int64_t i12 = 0;
-    int64_t i13 = 0;
-
-    for (int64_t i03 = 0; i03 < ne03; i03++) {
-        for (int64_t i02 = 0; i02 < ne02; i02++) {
-            i10 += ne00 * ir0;
-            while (i10 >= ne0) {
-                i10 -= ne0;
-                if (++i11 == ne1) {
-                    i11 = 0;
-                    if (++i12 == ne2) {
-                        i12 = 0;
-                        if (++i13 == ne3) {
-                            i13 = 0;
-                        }
-                    }
-                }
-            }
-            for (int64_t i01 = ir0; i01 < ir1; i01++) {
-                for (int64_t i00 = 0; i00 < ne00; i00++) {
-                    const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-                          char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
-
-                    memcpy(dst_ptr, src0_ptr, type_size);
-
-                    if (++i10 == ne0) {
-                        i10 = 0;
-                        if (++i11 == ne1) {
-                            i11 = 0;
-                            if (++i12 == ne2) {
-                                i12 = 0;
-                                if (++i13 == ne3) {
-                                    i13 = 0;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            i10 += ne00 * (ne01 - ir1);
-            while (i10 >= ne0) {
-                i10 -= ne0;
-                if (++i11 == ne1) {
-                    i11 = 0;
-                    if (++i12 == ne2) {
-                        i12 = 0;
-                        if (++i13 == ne3) {
-                            i13 = 0;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_dup(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    if (src0->type == dst->type) {
-        ggml_compute_forward_dup_bytes(params, dst);
-        return;
-    }
-
-    switch (src0->type) {
-        case GGML_TYPE_F16:
-            {
-                ggml_compute_forward_dup_f16(params, dst);
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                ggml_compute_forward_dup_bf16(params, dst);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_dup_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_add
-
-static void ggml_compute_forward_add_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_can_repeat(src1, src0) && ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    GGML_ASSERT( nb0 == sizeof(float));
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    if (nb10 == sizeof(float)) {
-        for (int ir = ir0; ir < ir1; ++ir) {
-            // src1 is broadcastable across src0 and dst in i1, i2, i3
-            const int64_t i03 = ir/(ne02*ne01);
-            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
-            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
-
-            const int64_t i13 = i03 % ne13;
-            const int64_t i12 = i02 % ne12;
-            const int64_t i11 = i01 % ne11;
-            const int64_t nr0 = ne00 / ne10;
-
-            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
-            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
-            float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11);
-
-            for (int64_t r = 0; r < nr0; ++r) {
-#ifdef GGML_USE_ACCELERATE
-                vDSP_vadd(src0_ptr + r*ne10, 1, src1_ptr, 1, dst_ptr + r*ne10, 1, ne10);
-#else
-                ggml_vec_add_f32(ne10, dst_ptr + r*ne10, src0_ptr + r*ne10, src1_ptr);
-#endif
-            }
-        }
-    } else {
-        // src1 is not contiguous
-        for (int ir = ir0; ir < ir1; ++ir) {
-            // src1 is broadcastable across src0 and dst in i1, i2, i3
-            const int64_t i03 = ir/(ne02*ne01);
-            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
-            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
-
-            const int64_t i13 = i03 % ne13;
-            const int64_t i12 = i02 % ne12;
-            const int64_t i11 = i01 % ne11;
-
-            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
-            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
-
-            for (int64_t i0 = 0; i0 < ne0; ++i0) {
-                const int64_t i10 = i0 % ne10;
-                float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10);
-
-                dst_ptr[i0] = src0_ptr[i0] + *src1_ptr;
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_add_f16_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    if (dst->type == GGML_TYPE_F32) {
-        GGML_ASSERT( nb0 == sizeof(float));
-    }
-    else {
-        GGML_ASSERT(dst->type  == GGML_TYPE_F16);
-        GGML_ASSERT( nb0 == sizeof(ggml_fp16_t));
-    }
-
-    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    if (nb10 == sizeof(float)) {
-        if (dst->type == GGML_TYPE_F16) {
-            for (int ir = ir0; ir < ir1; ++ir) {
-                // src0, src1 and dst are same shape => same indices
-                const int i3 = ir/(ne2*ne1);
-                const int i2 = (ir - i3*ne2*ne1)/ne1;
-                const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-                ggml_fp16_t * dst_ptr  = (ggml_fp16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
-                ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-                float *       src1_ptr = (float *)       ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
-
-                for (int i = 0; i < ne0; i++) {
-                    dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + src1_ptr[i]);
-                }
-            }
-        } else {
-            for (int ir = ir0; ir < ir1; ++ir) {
-                // src0, src1 and dst are same shape => same indices
-                const int i3 = ir/(ne2*ne1);
-                const int i2 = (ir - i3*ne2*ne1)/ne1;
-                const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-                float *       dst_ptr  = (float *)       ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
-                ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-                float *       src1_ptr = (float *)       ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
-
-                for (int i = 0; i < ne0; i++) {
-                    dst_ptr[i] = GGML_FP16_TO_FP32(src0_ptr[i]) + src1_ptr[i];
-                }
-            }
-        }
-    }
-    else {
-        // src1 is not contiguous
-        GGML_ASSERT(false);
-    }
-}
-
-static void ggml_compute_forward_add_bf16_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    GGML_ASSERT(src0->type == GGML_TYPE_BF16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    if (dst->type == GGML_TYPE_F32) {
-        GGML_ASSERT( nb0 == sizeof(float));
-    }
-    else {
-        GGML_ASSERT(dst->type  == GGML_TYPE_BF16);
-        GGML_ASSERT( nb0 == sizeof(ggml_bf16_t));
-    }
-
-    GGML_ASSERT(nb00 == sizeof(ggml_bf16_t));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    if (nb10 == sizeof(float)) {
-        if (dst->type == GGML_TYPE_BF16) {
-            for (int ir = ir0; ir < ir1; ++ir) {
-                // src0, src1 and dst are same shape => same indices
-                const int i3 = ir/(ne2*ne1);
-                const int i2 = (ir - i3*ne2*ne1)/ne1;
-                const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-                ggml_bf16_t * dst_ptr  = (ggml_bf16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
-                ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-                float *       src1_ptr = (float *)       ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
-
-                for (int i = 0; i < ne0; i++) {
-                    dst_ptr[i] = GGML_FP32_TO_BF16(GGML_BF16_TO_FP32(src0_ptr[i]) + src1_ptr[i]);
-                }
-            }
-        } else {
-            for (int ir = ir0; ir < ir1; ++ir) {
-                // src0, src1 and dst are same shape => same indices
-                const int i3 = ir/(ne2*ne1);
-                const int i2 = (ir - i3*ne2*ne1)/ne1;
-                const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-                float *       dst_ptr  = (float *)       ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
-                ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-                float *       src1_ptr = (float *)       ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
-
-                for (int i = 0; i < ne0; i++) {
-                    dst_ptr[i] = GGML_BF16_TO_FP32(src0_ptr[i]) + src1_ptr[i];
-                }
-            }
-        }
-    }
-    else {
-        // src1 is not contiguous
-        GGML_ASSERT(false);
-    }
-}
-
-static void ggml_compute_forward_add_f16_f16(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F16);
-    GGML_ASSERT(dst->type  == GGML_TYPE_F16);
-
-    GGML_ASSERT( nb0 == sizeof(ggml_fp16_t));
-    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    if (nb10 == sizeof(ggml_fp16_t)) {
-        for (int ir = ir0; ir < ir1; ++ir) {
-            // src0, src1 and dst are same shape => same indices
-            const int i3 = ir/(ne2*ne1);
-            const int i2 = (ir - i3*ne2*ne1)/ne1;
-            const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-            ggml_fp16_t * dst_ptr  = (ggml_fp16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
-            ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-            ggml_fp16_t * src1_ptr = (ggml_fp16_t *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
-
-            for (int i = 0; i < ne0; i++) {
-                dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + GGML_FP16_TO_FP32(src1_ptr[i]));
-            }
-        }
-    }
-    else {
-        // src1 is not contiguous
-        GGML_ASSERT(false);
-    }
-}
-
-static void ggml_compute_forward_add_bf16_bf16(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    GGML_ASSERT(src0->type == GGML_TYPE_BF16);
-    GGML_ASSERT(src1->type == GGML_TYPE_BF16);
-    GGML_ASSERT(dst->type  == GGML_TYPE_BF16);
-
-    GGML_ASSERT( nb0 == sizeof(ggml_bf16_t));
-    GGML_ASSERT(nb00 == sizeof(ggml_bf16_t));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    if (nb10 == sizeof(ggml_bf16_t)) {
-        for (int ir = ir0; ir < ir1; ++ir) {
-            // src0, src1 and dst are same shape => same indices
-            const int i3 = ir/(ne2*ne1);
-            const int i2 = (ir - i3*ne2*ne1)/ne1;
-            const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-            ggml_bf16_t * dst_ptr  = (ggml_bf16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
-            ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-            ggml_bf16_t * src1_ptr = (ggml_bf16_t *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
-
-            for (int i = 0; i < ne0; i++) {
-                dst_ptr[i] = GGML_FP32_TO_BF16(GGML_BF16_TO_FP32(src0_ptr[i]) + GGML_BF16_TO_FP32(src1_ptr[i]));
-            }
-        }
-    }
-    else {
-        // src1 is not contiguous
-        GGML_ASSERT(false);
-    }
-}
-
-static void ggml_compute_forward_add_q_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const enum ggml_type type = src0->type;
-    const enum ggml_type dtype = dst->type;
-    ggml_to_float_t const dequantize_row_q = type_traits[type].to_float;
-    ggml_from_float_t const quantize_row_q = type_traits[dtype].from_float;
-
-    // we don't support permuted src0 or src1
-    GGML_ASSERT(nb00 == ggml_type_size(type));
-    GGML_ASSERT(nb10 == sizeof(float));
-
-    // dst cannot be transposed or permuted
-    GGML_ASSERT(nb0 <= nb1);
-    GGML_ASSERT(nb1 <= nb2);
-    GGML_ASSERT(nb2 <= nb3);
-
-    GGML_ASSERT(ggml_is_quantized(src0->type));
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    float * wdata = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith;
-
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // src0 indices
-        const int i03 = ir/(ne02*ne01);
-        const int i02 = (ir - i03*ne02*ne01)/ne01;
-        const int i01 = (ir - i03*ne02*ne01 - i02*ne01);
-
-        // src1 and dst are same shape as src0 => same indices
-        const int i13 = i03;
-        const int i12 = i02;
-        const int i11 = i01;
-
-        const int i3 = i03;
-        const int i2 = i02;
-        const int i1 = i01;
-
-        void  * src0_row = (void *) ((char *) src0->data + (i01*nb01 + i02*nb02 + i03*nb03));
-        float * src1_row = (float *)((char *) src1->data + (i11*nb11 + i12*nb12 + i13*nb13));
-        void  * dst_row  = (void *) ((char *)  dst->data + ( i1*nb1  +  i2*nb2  +  i3*nb3));
-
-        assert(ne00 % 32 == 0);
-
-        // unquantize row from src0 to temp buffer
-        dequantize_row_q(src0_row, wdata, ne00);
-        // add src1
-        ggml_vec_acc_f32(ne00, wdata, src1_row);
-        // quantize row to dst
-        if (quantize_row_q != NULL) {
-            quantize_row_q(wdata, dst_row, ne00);
-        } else {
-            memcpy(dst_row, wdata, ne0*nb0);
-        }
-    }
-}
-
-static void ggml_compute_forward_add(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                if (src1->type == GGML_TYPE_F32) {
-                    ggml_compute_forward_add_f32(params, dst);
-                }
-                else {
-                    GGML_ASSERT(false);
-                }
-            } break;
-        case GGML_TYPE_F16:
-            {
-                if (src1->type == GGML_TYPE_F16) {
-                    ggml_compute_forward_add_f16_f16(params, dst);
-                }
-                else if (src1->type == GGML_TYPE_F32) {
-                    ggml_compute_forward_add_f16_f32(params, dst);
-                }
-                else {
-                    GGML_ASSERT(false);
-                }
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                if (src1->type == GGML_TYPE_BF16) {
-                    ggml_compute_forward_add_bf16_bf16(params, dst);
-                }
-                else if (src1->type == GGML_TYPE_F32) {
-                    ggml_compute_forward_add_bf16_f32(params, dst);
-                }
-                else {
-                    GGML_ASSERT(false);
-                }
-            } break;
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-        case GGML_TYPE_IQ2_XXS:
-        case GGML_TYPE_IQ2_XS:
-        case GGML_TYPE_IQ3_XXS:
-        case GGML_TYPE_IQ1_S:
-        case GGML_TYPE_IQ1_M:
-        case GGML_TYPE_IQ4_NL:
-        case GGML_TYPE_IQ4_XS:
-        case GGML_TYPE_IQ3_S:
-        case GGML_TYPE_IQ2_S:
-            {
-                ggml_compute_forward_add_q_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_add1
-
-static void ggml_compute_forward_add1_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-    GGML_ASSERT(ggml_is_scalar(src1));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    GGML_ASSERT( nb0 == sizeof(float));
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // src0 and dst are same shape => same indices
-        const int i3 = ir/(ne2*ne1);
-        const int i2 = (ir - i3*ne2*ne1)/ne1;
-        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-#ifdef GGML_USE_ACCELERATE
-        UNUSED(ggml_vec_add1_f32);
-
-        vDSP_vadd(
-                (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1,
-                (float *) ((char *) src1->data), 0,
-                (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 ), 1,
-                ne0);
-#else
-        ggml_vec_add1_f32(ne0,
-                (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 ),
-                (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01),
-               *(float *) src1->data);
-#endif
-    }
-}
-
-static void ggml_compute_forward_add1_f16_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-    GGML_ASSERT(ggml_is_scalar(src1));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // scalar to add
-    const float v = *(float *) src1->data;
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT(dst->type  == GGML_TYPE_F16);
-
-    GGML_ASSERT( nb0 == sizeof(ggml_fp16_t));
-    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // src0 and dst are same shape => same indices
-        const int i3 = ir/(ne2*ne1);
-        const int i2 = (ir - i3*ne2*ne1)/ne1;
-        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-        ggml_fp16_t * dst_ptr  = (ggml_fp16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 );
-        ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-        for (int i = 0; i < ne0; i++) {
-            dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + v);
-        }
-    }
-}
-
-static void ggml_compute_forward_add1_f16_f16(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-    GGML_ASSERT(ggml_is_scalar(src1));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // scalar to add
-    const float v = GGML_FP16_TO_FP32(*(ggml_fp16_t *) src1->data);
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F16);
-    GGML_ASSERT(dst->type  == GGML_TYPE_F16);
-
-    GGML_ASSERT( nb0 == sizeof(ggml_fp16_t));
-    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // src0 and dst are same shape => same indices
-        const int i3 = ir/(ne2*ne1);
-        const int i2 = (ir - i3*ne2*ne1)/ne1;
-        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-        ggml_fp16_t * dst_ptr  = (ggml_fp16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 );
-        ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-        for (int i = 0; i < ne0; i++) {
-            dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + v);
-        }
-    }
-}
-
-static void ggml_compute_forward_add1_q_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-    GGML_ASSERT(ggml_is_scalar(src1));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // scalar to add
-    const float v = *(float *) src1->data;
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    const enum ggml_type type = src0->type;
-    ggml_to_float_t const dequantize_row_q = type_traits[type].to_float;
-    ggml_from_float_t const quantize_row_q = type_traits[type].from_float;
-
-    // we don't support permuted src0
-    GGML_ASSERT(nb00 == ggml_type_size(type));
-
-    // dst cannot be transposed or permuted
-    GGML_ASSERT(nb0 <= nb1);
-    GGML_ASSERT(nb1 <= nb2);
-    GGML_ASSERT(nb2 <= nb3);
-
-    GGML_ASSERT(ggml_is_quantized(src0->type));
-    GGML_ASSERT(dst->type == src0->type);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    float * wdata = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32) * ith;
-
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // src0 and dst are same shape => same indices
-        const int i3 = ir/(ne2*ne1);
-        const int i2 = (ir - i3*ne2*ne1)/ne1;
-        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-        void  * src0_row = (void *) ((char *) src0->data + (i1*nb01 + i2*nb02 + i3*nb03));
-        void  * dst_row  = (void *) ((char *)  dst->data + (i1*nb1  + i2*nb2  + i3*nb0 ));
-
-        assert(ne0 % 32 == 0);
-
-        // unquantize row from src0 to temp buffer
-        dequantize_row_q(src0_row, wdata, ne0);
-        // add src1
-        ggml_vec_acc1_f32(ne0, wdata, v);
-        // quantize row to dst
-        quantize_row_q(wdata, dst_row, ne0);
-    }
-}
-
-static void ggml_compute_forward_add1_bf16_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-    GGML_ASSERT(ggml_is_scalar(src1));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // scalar to add
-    const float v = *(float *) src1->data;
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    GGML_ASSERT(src0->type == GGML_TYPE_BF16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT(dst->type  == GGML_TYPE_BF16);
-
-    GGML_ASSERT( nb0 == sizeof(ggml_bf16_t));
-    GGML_ASSERT(nb00 == sizeof(ggml_bf16_t));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // src0 and dst are same shape => same indices
-        const int i3 = ir/(ne2*ne1);
-        const int i2 = (ir - i3*ne2*ne1)/ne1;
-        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-        ggml_bf16_t * dst_ptr  = (ggml_bf16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 );
-        ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-        for (int i = 0; i < ne0; i++) {
-            dst_ptr[i] = GGML_FP32_TO_BF16(GGML_BF16_TO_FP32(src0_ptr[i]) + v);
-        }
-    }
-}
-
-static void ggml_compute_forward_add1_bf16_bf16(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-    GGML_ASSERT(ggml_is_scalar(src1));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // scalar to add
-    const float v = GGML_BF16_TO_FP32(*(ggml_bf16_t *) src1->data);
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    GGML_ASSERT(src0->type == GGML_TYPE_BF16);
-    GGML_ASSERT(src1->type == GGML_TYPE_BF16);
-    GGML_ASSERT(dst->type  == GGML_TYPE_BF16);
-
-    GGML_ASSERT( nb0 == sizeof(ggml_bf16_t));
-    GGML_ASSERT(nb00 == sizeof(ggml_bf16_t));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // src0 and dst are same shape => same indices
-        const int i3 = ir/(ne2*ne1);
-        const int i2 = (ir - i3*ne2*ne1)/ne1;
-        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-        ggml_bf16_t * dst_ptr  = (ggml_bf16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 );
-        ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-        for (int i = 0; i < ne0; i++) {
-            dst_ptr[i] = GGML_FP32_TO_BF16(GGML_BF16_TO_FP32(src0_ptr[i]) + v);
-        }
-    }
-}
-
-static void ggml_compute_forward_add1(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_add1_f32(params, dst);
-            } break;
-        case GGML_TYPE_F16:
-            {
-                if (src1->type == GGML_TYPE_F16) {
-                    ggml_compute_forward_add1_f16_f16(params, dst);
-                }
-                else if (src1->type == GGML_TYPE_F32) {
-                    ggml_compute_forward_add1_f16_f32(params, dst);
-                }
-                else {
-                    GGML_ASSERT(false);
-                }
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                if (src1->type == GGML_TYPE_BF16) {
-                    ggml_compute_forward_add1_bf16_bf16(params, dst);
-                }
-                else if (src1->type == GGML_TYPE_F32) {
-                    ggml_compute_forward_add1_bf16_f32(params, dst);
-                }
-                else {
-                    GGML_ASSERT(false);
-                }
-            } break;
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q8_1:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-        case GGML_TYPE_IQ2_XXS:
-        case GGML_TYPE_IQ2_XS:
-        case GGML_TYPE_IQ3_XXS:
-        case GGML_TYPE_IQ1_S:
-        case GGML_TYPE_IQ1_M:
-        case GGML_TYPE_IQ4_NL:
-        case GGML_TYPE_IQ4_XS:
-        case GGML_TYPE_IQ3_S:
-        case GGML_TYPE_IQ2_S:
-            {
-                ggml_compute_forward_add1_q_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_acc
-
-static void ggml_compute_forward_acc_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-    GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0));
-
-    // view src0 and dst with these strides and data offset inbytes during acc
-    // nb0 is implicitly element_size because src0 and dst are contiguous
-    size_t nb1     = ((int32_t *) dst->op_params)[0];
-    size_t nb2     = ((int32_t *) dst->op_params)[1];
-    size_t nb3     = ((int32_t *) dst->op_params)[2];
-    size_t offset  = ((int32_t *) dst->op_params)[3];
-    bool   inplace = (bool) ((int32_t *) dst->op_params)[4];
-
-    if (!inplace && (params->type == GGML_TASK_TYPE_INIT)) {
-        if (params->ith != 0) {
-            return;
-        }
-        // memcpy needs to be synchronized across threads to avoid race conditions.
-        // => do it in INIT phase
-        memcpy(
-            ((char *)  dst->data),
-            ((char *) src0->data),
-            ggml_nbytes(dst));
-    }
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr = ggml_nrows(src1);
-    const int nc = src1->ne[0];
-
-    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne)
-    GGML_TENSOR_LOCALS(size_t,  nb1, src1, nb)
-
-    // src0 and dst as viewed during acc
-    const size_t nb0 = ggml_element_size(src0);
-
-    const size_t nb00 = nb0;
-    const size_t nb01 = nb1;
-    const size_t nb02 = nb2;
-    const size_t nb03 = nb3;
-
-    GGML_ASSERT(offset + (ne10 == 0 ? 0 : ne10-1)*nb0  + (ne11 == 0 ? 0 : ne11-1)*nb1  + (ne12 == 0 ? 0 : ne12-1)*nb2  + (ne13 == 0 ? 0 : ne13-1)*nb3  < ggml_nbytes(dst));
-    GGML_ASSERT(offset + (ne10 == 0 ? 0 : ne10-1)*nb00 + (ne11 == 0 ? 0 : ne11-1)*nb01 + (ne12 == 0 ? 0 : ne12-1)*nb02 + (ne13 == 0 ? 0 : ne13-1)*nb03 < ggml_nbytes(src0));
-
-    GGML_ASSERT(nb10 == sizeof(float));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // src0 and dst are viewed with shape of src1 and offset
-        // => same indices
-        const int i3 = ir/(ne12*ne11);
-        const int i2 = (ir - i3*ne12*ne11)/ne11;
-        const int i1 = (ir - i3*ne12*ne11 - i2*ne11);
-
-#ifdef GGML_USE_ACCELERATE
-        vDSP_vadd(
-                (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + offset), 1,
-                (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1,
-                (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1  + offset), 1, nc);
-#else
-        ggml_vec_add_f32(nc,
-                (float *) ((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + offset),
-                (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + offset),
-                (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11));
-#endif
-    }
-}
-
-static void ggml_compute_forward_acc(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_acc_f32(params, dst);
-            } break;
-        case GGML_TYPE_F16:
-        case GGML_TYPE_BF16:
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q8_1:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-        case GGML_TYPE_IQ2_XXS:
-        case GGML_TYPE_IQ2_XS:
-        case GGML_TYPE_IQ3_XXS:
-        case GGML_TYPE_IQ1_S:
-        case GGML_TYPE_IQ1_M:
-        case GGML_TYPE_IQ4_NL:
-        case GGML_TYPE_IQ4_XS:
-        case GGML_TYPE_IQ3_S:
-        case GGML_TYPE_IQ2_S:
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_sub
-
-static void ggml_compute_forward_sub_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    assert(params->ith == 0);
-    assert(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int nr  = ggml_nrows(src0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    GGML_ASSERT( nb0 == sizeof(float));
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    if (nb10 == sizeof(float)) {
-        for (int ir = 0; ir < nr; ++ir) {
-            // src0, src1 and dst are same shape => same indices
-            const int i3 = ir/(ne2*ne1);
-            const int i2 = (ir - i3*ne2*ne1)/ne1;
-            const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-#ifdef GGML_USE_ACCELERATE
-            vDSP_vsub(
-                    (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1,
-                    (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1,
-                    (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 ), 1,
-                    ne0);
-#else
-            ggml_vec_sub_f32(ne0,
-                    (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 ),
-                    (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01),
-                    (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11));
-#endif
-                // }
-            // }
-        }
-    } else {
-        // src1 is not contiguous
-        for (int ir = 0; ir < nr; ++ir) {
-            // src0, src1 and dst are same shape => same indices
-            const int i3 = ir/(ne2*ne1);
-            const int i2 = (ir - i3*ne2*ne1)/ne1;
-            const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-            float * dst_ptr  = (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 );
-            float * src0_ptr = (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
-            for (int i0 = 0; i0 < ne0; i0++) {
-                float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11 + i0*nb10);
-
-                dst_ptr[i0] = src0_ptr[i0] - *src1_ptr;
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_sub(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_sub_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_mul
-
-static void ggml_compute_forward_mul_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_can_repeat(src1, src0) && ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int64_t nr = ggml_nrows(src0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    GGML_ASSERT( nb0 == sizeof(float));
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    if (nb10 == sizeof(float)) {
-        for (int64_t ir = ith; ir < nr; ir += nth) {
-            // src0 and dst are same shape => same indices
-            const int64_t i03 = ir/(ne02*ne01);
-            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
-            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
-
-            const int64_t i13 = i03 % ne13;
-            const int64_t i12 = i02 % ne12;
-            const int64_t i11 = i01 % ne11;
-            const int64_t nr0 = ne00 / ne10;
-
-            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
-            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
-            float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11);
-
-            for (int64_t r = 0 ; r < nr0; ++r) {
-#ifdef GGML_USE_ACCELERATE
-                UNUSED(ggml_vec_mul_f32);
-
-                vDSP_vmul(src0_ptr + r*ne10, 1, src1_ptr, 1, dst_ptr + r*ne10, 1, ne10);
-#else
-                ggml_vec_mul_f32(ne10, dst_ptr + r*ne10, src0_ptr + r*ne10, src1_ptr);
-#endif
-            }
-        }
-    } else {
-        // src1 is not contiguous
-        for (int64_t ir = ith; ir < nr; ir += nth) {
-            // src0 and dst are same shape => same indices
-            // src1 is broadcastable across src0 and dst in i1, i2, i3
-            const int64_t i03 = ir/(ne02*ne01);
-            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
-            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
-
-            const int64_t i13 = i03 % ne13;
-            const int64_t i12 = i02 % ne12;
-            const int64_t i11 = i01 % ne11;
-
-            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
-            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
-
-            for (int64_t i0 = 0; i0 < ne00; ++i0) {
-                const int64_t i10 = i0 % ne10;
-                float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10);
-
-                dst_ptr[i0] = src0_ptr[i0] * (*src1_ptr);
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_mul(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(src1->type == GGML_TYPE_F32 && "only f32 src1 supported for now");
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_mul_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_div
-
-static void ggml_compute_forward_div_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_can_repeat(src1, src0) && ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int64_t nr = ggml_nrows(src0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    GGML_ASSERT( nb0 == sizeof(float));
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    if (nb10 == sizeof(float)) {
-        for (int64_t ir = ith; ir < nr; ir += nth) {
-            // src0 and dst are same shape => same indices
-            const int64_t i03 = ir/(ne02*ne01);
-            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
-            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
-
-            const int64_t i13 = i03 % ne13;
-            const int64_t i12 = i02 % ne12;
-            const int64_t i11 = i01 % ne11;
-            const int64_t nr0 = ne00 / ne10;
-
-            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
-            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
-            float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11);
-
-            for (int64_t r = 0; r < nr0; ++r) {
-#ifdef GGML_USE_ACCELERATE
-                UNUSED(ggml_vec_div_f32);
-
-                vDSP_vdiv(src1_ptr, 1, src0_ptr + r*ne10, 1, dst_ptr + r*ne10, 1, ne10);
-#else
-                ggml_vec_div_f32(ne10, dst_ptr + r*ne10, src0_ptr + r*ne10, src1_ptr);
-#endif
-            }
-        }
-    } else {
-        // src1 is not contiguous
-        for (int64_t ir = ith; ir < nr; ir += nth) {
-            // src0 and dst are same shape => same indices
-            // src1 is broadcastable across src0 and dst in i1, i2, i3
-            const int64_t i03 = ir/(ne02*ne01);
-            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
-            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
-
-            const int64_t i13 = i03 % ne13;
-            const int64_t i12 = i02 % ne12;
-            const int64_t i11 = i01 % ne11;
-
-            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
-            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
-
-            for (int64_t i0 = 0; i0 < ne00; ++i0) {
-                const int64_t i10 = i0 % ne10;
-                float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10);
-
-                dst_ptr[i0] = src0_ptr[i0] / (*src1_ptr);
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_div(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_div_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_sqr
-
-static void ggml_compute_forward_sqr_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n     = ggml_nrows(src0);
-    const int nc    = src0->ne[0];
-
-    assert( dst->nb[0] == sizeof(float));
-    assert(src0->nb[0] == sizeof(float));
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_sqr_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_sqr(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_sqr_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_sqrt
-
-static void ggml_compute_forward_sqrt_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    assert( dst->nb[0] == sizeof(float));
-    assert(src0->nb[0] == sizeof(float));
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_sqrt_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_sqrt(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_sqrt_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_log
-
-static void ggml_compute_forward_log_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(params->ith == 0);
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    GGML_ASSERT( dst->nb[0] == sizeof(float));
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_log_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_log(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_log_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_sum
-
-static void ggml_compute_forward_sum_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_scalar(dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    assert(ggml_is_scalar(dst));
-    assert(src0->nb[0] == sizeof(float));
-
-    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne)
-    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb)
-
-    ggml_float sum     = 0;
-    ggml_float row_sum = 0;
-
-    for (int64_t i03 = 0; i03 < ne03; i03++) {
-        for (int64_t i02 = 0; i02 < ne02; i02++) {
-            for (int64_t i01 = 0; i01 < ne01; i01++) {
-                ggml_vec_sum_f32_ggf(ne00,
-                        &row_sum,
-                        (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03));
-                sum += row_sum;
-            }
-        }
-    }
-    ((float *) dst->data)[0] = sum;
-}
-
-static void ggml_compute_forward_sum_f16(
-    const struct ggml_compute_params * params,
-          struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_scalar(dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    assert(src0->nb[0] == sizeof(ggml_fp16_t));
-
-    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne)
-    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb)
-
-    float sum = 0;
-    float row_sum = 0;
-
-    for (int64_t i03 = 0; i03 < ne03; i03++) {
-        for (int64_t i02 = 0; i02 < ne02; i02++) {
-            for (int64_t i01 = 0; i01 < ne01; i01++) {
-                ggml_vec_sum_f16_ggf(ne00,
-                    &row_sum,
-                    (ggml_fp16_t *) ((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03));
-                sum += row_sum;
-            }
-        }
-    }
-    ((ggml_fp16_t *) dst->data)[0] = GGML_FP32_TO_FP16(sum);
-}
-
-static void ggml_compute_forward_sum_bf16(
-    const struct ggml_compute_params * params,
-          struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_scalar(dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    assert(src0->nb[0] == sizeof(ggml_bf16_t));
-
-    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne)
-    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb)
-
-    float sum = 0;
-    float row_sum = 0;
-
-    for (int64_t i03 = 0; i03 < ne03; i03++) {
-        for (int64_t i02 = 0; i02 < ne02; i02++) {
-            for (int64_t i01 = 0; i01 < ne01; i01++) {
-                ggml_vec_sum_bf16_ggf(ne00,
-                    &row_sum,
-                    (ggml_bf16_t *) ((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03));
-                sum += row_sum;
-            }
-        }
-    }
-    ((ggml_bf16_t *) dst->data)[0] = GGML_FP32_TO_BF16(sum);
-}
-
-static void ggml_compute_forward_sum(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_sum_f32(params, dst);
-            } break;
-        case GGML_TYPE_F16:
-            {
-                ggml_compute_forward_sum_f16(params, dst);
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                ggml_compute_forward_sum_bf16(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_sum_rows
-
-static void ggml_compute_forward_sum_rows_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(params->ith == 0);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-    GGML_ASSERT(dst->nb[0] == sizeof(float));
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    GGML_ASSERT(ne0 == 1);
-    GGML_ASSERT(ne1 == ne01);
-    GGML_ASSERT(ne2 == ne02);
-    GGML_ASSERT(ne3 == ne03);
-
-    for (int64_t i3 = 0; i3 < ne03; i3++) {
-        for (int64_t i2 = 0; i2 < ne02; i2++) {
-            for (int64_t i1 = 0; i1 < ne01; i1++) {
-                float * src_row = (float *) ((char *) src0->data + i1*nb01 + i2*nb02 + i3*nb03);
-                float * dst_row = (float *) ((char *) dst->data  + i1*nb1  + i2*nb2  + i3*nb3);
-                float row_sum = 0;
-                ggml_vec_sum_f32(ne00, &row_sum, src_row);
-                dst_row[0] = row_sum;
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_sum_rows(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_sum_rows_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_mean
-
-static void ggml_compute_forward_mean_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    assert(src0->nb[0] == sizeof(float));
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    assert(ne0 == 1);
-    assert(ne1 == ne01);
-    assert(ne2 == ne02);
-    assert(ne3 == ne03);
-
-    UNUSED(ne0);
-    UNUSED(ne1);
-    UNUSED(ne2);
-    UNUSED(ne3);
-
-    for (int64_t i03 = 0; i03 < ne03; i03++) {
-        for (int64_t i02 = 0; i02 < ne02; i02++) {
-            for (int64_t i01 = 0; i01 < ne01; i01++) {
-                ggml_vec_sum_f32(ne00,
-                        (float *) ((char *)  dst->data + i01*nb1  + i02*nb2  + i03*nb3),
-                        (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03));
-
-                *(float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3) /= (float) ne00;
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_mean(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_mean_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_argmax
-
-static void ggml_compute_forward_argmax_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    assert(src0->nb[0] == sizeof(float));
-    assert(dst->nb[0] == sizeof(float));
-
-    const int64_t ne00 = src0->ne[0];
-    const int64_t ne01 = src0->ne[1];
-
-    const size_t nb01 = src0->nb[1];
-    const size_t nb0 = dst->nb[0];
-
-    for (int64_t i1 = 0; i1 < ne01; i1++) {
-        float * src = (float *) ((char *) src0->data + i1*nb01);
-        int32_t * dst_ = (int32_t *) ((char *)  dst->data + i1*nb0);
-        int v = 0;
-        ggml_vec_argmax_f32(ne00, &v, src);
-        dst_[0] = v;
-    }
-}
-
-static void ggml_compute_forward_argmax(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_argmax_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_repeat
-
-static void ggml_compute_forward_repeat_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(params->ith == 0);
-    GGML_ASSERT(ggml_can_repeat(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    // guaranteed to be an integer due to the check in ggml_can_repeat
-    const int nr0 = (int)(ne0/ne00);
-    const int nr1 = (int)(ne1/ne01);
-    const int nr2 = (int)(ne2/ne02);
-    const int nr3 = (int)(ne3/ne03);
-
-    // TODO: support for transposed / permuted tensors
-    GGML_ASSERT(nb0  == sizeof(float));
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    // TODO: maybe this is not optimal?
-    for                         (int i3 = 0; i3 < nr3;  i3++) {
-        for                     (int k3 = 0; k3 < ne03; k3++) {
-            for                 (int i2 = 0; i2 < nr2;  i2++) {
-                for             (int k2 = 0; k2 < ne02; k2++) {
-                    for         (int i1 = 0; i1 < nr1;  i1++) {
-                        for     (int k1 = 0; k1 < ne01; k1++) {
-                            for (int i0 = 0; i0 < nr0;  i0++) {
-                                ggml_vec_cpy_f32(ne00,
-                                        (float *) ((char *)  dst->data + (i3*ne03 + k3)*nb3  + (i2*ne02 + k2)*nb2  + (i1*ne01 + k1)*nb1  + (i0*ne00)*nb0),
-                                        (float *) ((char *) src0->data + (          k3)*nb03 + (          k2)*nb02 + (          k1)*nb01));
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_repeat_f16(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(params->ith == 0);
-    GGML_ASSERT(ggml_can_repeat(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    // guaranteed to be an integer due to the check in ggml_can_repeat
-    const int nr0 = (int)(ne0/ne00);
-    const int nr1 = (int)(ne1/ne01);
-    const int nr2 = (int)(ne2/ne02);
-    const int nr3 = (int)(ne3/ne03);
-
-    // TODO: support for transposed / permuted tensors
-    GGML_ASSERT(nb0  == sizeof(ggml_fp16_t));
-    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
-
-    // TODO: maybe this is not optimal?
-    for                         (int i3 = 0; i3 < nr3;  i3++) {
-        for                     (int k3 = 0; k3 < ne03; k3++) {
-            for                 (int i2 = 0; i2 < nr2;  i2++) {
-                for             (int k2 = 0; k2 < ne02; k2++) {
-                    for         (int i1 = 0; i1 < nr1;  i1++) {
-                        for     (int k1 = 0; k1 < ne01; k1++) {
-                            for (int i0 = 0; i0 < nr0;  i0++) {
-                                ggml_fp16_t * y = (ggml_fp16_t *) ((char *)  dst->data + (i3*ne03 + k3)*nb3  + (i2*ne02 + k2)*nb2  + (i1*ne01 + k1)*nb1  + (i0*ne00)*nb0);
-                                ggml_fp16_t * x = (ggml_fp16_t *) ((char *) src0->data + (          k3)*nb03 + (          k2)*nb02 + (          k1)*nb01);
-                                // ggml_vec_cpy_f16(ne00, y, x)
-                                for (int i = 0; i < ne00; ++i) {
-                                    y[i]  = x[i];
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_repeat(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F16:
-        case GGML_TYPE_BF16:
-        case GGML_TYPE_I16:
-            {
-                ggml_compute_forward_repeat_f16(params, dst);
-            } break;
-        case GGML_TYPE_F32:
-        case GGML_TYPE_I32:
-            {
-                ggml_compute_forward_repeat_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_repeat_back
-
-static void ggml_compute_forward_repeat_back_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(params->ith == 0);
-    GGML_ASSERT(ggml_can_repeat(dst, src0));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    // guaranteed to be an integer due to the check in ggml_can_repeat
-    const int nr0 = (int)(ne00/ne0);
-    const int nr1 = (int)(ne01/ne1);
-    const int nr2 = (int)(ne02/ne2);
-    const int nr3 = (int)(ne03/ne3);
-
-    // TODO: support for transposed / permuted tensors
-    GGML_ASSERT(nb0  == sizeof(float));
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    if (ggml_is_contiguous(dst)) {
-        ggml_vec_set_f32(ne0*ne1*ne2*ne3, dst->data, 0);
-    } else {
-        for         (int k3 = 0; k3 < ne3; k3++) {
-            for     (int k2 = 0; k2 < ne2; k2++) {
-                for (int k1 = 0; k1 < ne1; k1++) {
-                    ggml_vec_set_f32(ne0,
-                        (float *) ((char *) dst->data + k1*nb1 + k2*nb2 + k3*nb3),
-                        0);
-                }
-            }
-        }
-    }
-
-    // TODO: maybe this is not optimal?
-    for                         (int i3 = 0; i3 < nr3; i3++) {
-        for                     (int k3 = 0; k3 < ne3; k3++) {
-            for                 (int i2 = 0; i2 < nr2; i2++) {
-                for             (int k2 = 0; k2 < ne2; k2++) {
-                    for         (int i1 = 0; i1 < nr1; i1++) {
-                        for     (int k1 = 0; k1 < ne1; k1++) {
-                            for (int i0 = 0; i0 < nr0; i0++) {
-                                ggml_vec_acc_f32(ne0,
-                                        (float *) ((char *)  dst->data + (         k3)*nb3  + (         k2)*nb2  + (         k1)*nb1),
-                                        (float *) ((char *) src0->data + (i3*ne3 + k3)*nb03 + (i2*ne2 + k2)*nb02 + (i1*ne1 + k1)*nb01 + (i0*ne0)*nb00));
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_repeat_back(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_repeat_back_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_concat
-
-static void ggml_compute_forward_concat_f32(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    // TODO: support for transposed / permuted tensors
-    GGML_ASSERT(nb0  == sizeof(float));
-    GGML_ASSERT(nb00 == sizeof(float));
-    GGML_ASSERT(nb10 == sizeof(float));
-
-    const int32_t dim = ggml_get_op_params_i32(dst, 0);
-
-    GGML_ASSERT(dim >= 0 && dim < 4);
-
-    int64_t o[4] = {0, 0, 0, 0};
-    o[dim] = src0->ne[dim];
-
-    const float * x;
-
-    // TODO: smarter multi-theading
-    for (int i3 = 0; i3 < ne3; i3++) {
-        for (int i2 = ith; i2 < ne2; i2 += nth) {
-            for (int i1 = 0; i1 < ne1; i1++) {
-                for (int i0 = 0; i0 < ne0; i0++) {
-                    if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) {
-                        x = (const float *) ((const char *)src0->data + (i0       )*nb00 + (i1       )*nb01 + (i2       )*nb02 + (i3       )*nb03);
-                    } else {
-                        x = (const float *) ((const char *)src1->data + (i0 - o[0])*nb10 + (i1 - o[1])*nb11 + (i2 - o[2])*nb12 + (i3 - o[3])*nb13);
-                    }
-
-                    float * y = (float *)((char *)dst->data + i0*nb0 + i1*nb1 + i2*nb2 + i3*nb3);
-
-                    *y = *x;
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_concat(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-        case GGML_TYPE_I32:
-            {
-                ggml_compute_forward_concat_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_abs
-
-static void ggml_compute_forward_abs_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_abs_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_abs(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_abs_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_sgn
-
-static void ggml_compute_forward_sgn_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_sgn_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_sgn(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_sgn_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_neg
-
-static void ggml_compute_forward_neg_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_neg_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_neg(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_neg_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_step
-
-static void ggml_compute_forward_step_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_step_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_step(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_step_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_tanh
-
-static void ggml_compute_forward_tanh_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_tanh_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_tanh(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_tanh_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_elu
-
-static void ggml_compute_forward_elu_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_elu_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_elu(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_elu_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_relu
-
-static void ggml_compute_forward_relu_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_relu_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_relu(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_relu_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_sigmoid
-
-static void ggml_compute_forward_sigmoid_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_sigmoid_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_sigmoid(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_sigmoid_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_gelu
-
-static void ggml_compute_forward_gelu_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nc = src0->ne[0];
-    const int nr = ggml_nrows(src0);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int i1 = ir0; i1 < ir1; i1++) {
-        ggml_vec_gelu_f32(nc,
-                (float *) ((char *) dst->data  + i1*( dst->nb[1])),
-                (float *) ((char *) src0->data + i1*(src0->nb[1])));
-
-#ifndef NDEBUG
-        for (int k = 0; k < nc; k++) {
-            const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k];
-            UNUSED(x);
-            assert(!isnan(x));
-            assert(!isinf(x));
-        }
-#endif
-    }
-}
-
-static void ggml_compute_forward_gelu(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_gelu_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_gelu_quick
-
-static void ggml_compute_forward_gelu_quick_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nc = src0->ne[0];
-    const int nr = ggml_nrows(src0);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int i1 = ir0; i1 < ir1; i1++) {
-        ggml_vec_gelu_quick_f32(nc,
-                (float *) ((char *) dst->data  + i1*( dst->nb[1])),
-                (float *) ((char *) src0->data + i1*(src0->nb[1])));
-
-#ifndef NDEBUG
-        for (int k = 0; k < nc; k++) {
-            const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k];
-            UNUSED(x);
-            assert(!isnan(x));
-            assert(!isinf(x));
-        }
-#endif
-    }
-}
-
-static void ggml_compute_forward_gelu_quick(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_gelu_quick_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_silu
-
-static void ggml_compute_forward_silu_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nc = src0->ne[0];
-    const int nr = ggml_nrows(src0);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int i1 = ir0; i1 < ir1; i1++) {
-        ggml_vec_silu_f32(nc,
-                (float *) ((char *) dst->data  + i1*( dst->nb[1])),
-                (float *) ((char *) src0->data + i1*(src0->nb[1])));
-
-#ifndef NDEBUG
-        for (int k = 0; k < nc; k++) {
-            const float x = ((float *) ((char *) dst->data + i1*(dst->nb[1])))[k];
-            UNUSED(x);
-            assert(!isnan(x));
-            assert(!isinf(x));
-        }
-#endif
-    }
-}
-
-static void ggml_compute_forward_silu(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_silu_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-// ggml_compute_forward_leaky_relu
-
-static void ggml_compute_forward_leaky_relu_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    float negative_slope;
-    memcpy(&negative_slope, dst->op_params, sizeof(float));
-
-    assert(dst->nb[0]  == sizeof(float));
-    assert(src0->nb[0] == sizeof(float));
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_leaky_relu_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])), negative_slope);
-    }
-}
-
-static void ggml_compute_forward_leaky_relu(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_leaky_relu_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_silu_back
-
-static void ggml_compute_forward_silu_back_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * grad = dst->src[1];
-
-    assert(ggml_is_contiguous_1(grad));
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-    assert(ggml_are_same_shape(src0, grad));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nc = src0->ne[0];
-    const int nr = ggml_nrows(src0);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int i1 = ir0; i1 < ir1; i1++) {
-        ggml_vec_silu_backward_f32(nc,
-                (float *) ((char *) dst->data  + i1*( dst->nb[1])),
-                (float *) ((char *) src0->data + i1*(src0->nb[1])),
-                (float *) ((char *) grad->data + i1*(grad->nb[1])));
-
-#ifndef NDEBUG
-        for (int k = 0; k < nc; k++) {
-            const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k];
-            UNUSED(x);
-            assert(!isnan(x));
-            assert(!isinf(x));
-        }
-#endif
-    }
-}
-
-static void ggml_compute_forward_silu_back(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_silu_back_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-
-static void ggml_compute_forward_hardswish_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_hardswish_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-static void ggml_compute_forward_hardswish(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_hardswish_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-static void ggml_compute_forward_hardsigmoid_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        ggml_vec_hardsigmoid_f32(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_hardsigmoid(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_hardsigmoid_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-
-// ggml_compute_forward_norm
-
-static void ggml_compute_forward_norm_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    float eps;
-    memcpy(&eps, dst->op_params, sizeof(float));
-
-    GGML_ASSERT(eps > 0.0f);
-
-    // TODO: optimize
-    for (int64_t i03 = 0; i03 < ne03; i03++) {
-        for (int64_t i02 = 0; i02 < ne02; i02++) {
-            for (int64_t i01 = ith; i01 < ne01; i01 += nth) {
-                const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
-
-                ggml_float sum = 0.0;
-                for (int64_t i00 = 0; i00 < ne00; i00++) {
-                    sum += (ggml_float)x[i00];
-                }
-
-                float mean = sum/ne00;
-
-                float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
-
-                ggml_float sum2 = 0.0;
-                for (int64_t i00 = 0; i00 < ne00; i00++) {
-                    float v = x[i00] - mean;
-                    y[i00] = v;
-                    sum2 += (ggml_float)(v*v);
-                }
-
-                float variance = sum2/ne00;
-                const float scale = 1.0f/sqrtf(variance + eps);
-
-                ggml_vec_scale_f32(ne00, y, scale);
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_norm(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_norm_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_group_rms_norm
-
-static void ggml_compute_forward_rms_norm_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    float eps;
-    memcpy(&eps, dst->op_params, sizeof(float));
-
-    GGML_ASSERT(eps > 0.0f);
-
-    // TODO: optimize
-    for (int64_t i03 = 0; i03 < ne03; i03++) {
-        for (int64_t i02 = 0; i02 < ne02; i02++) {
-            for (int64_t i01 = ith; i01 < ne01; i01 += nth) {
-                const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
-
-                ggml_float sum = 0.0;
-                for (int64_t i00 = 0; i00 < ne00; i00++) {
-                    sum += (ggml_float)(x[i00] * x[i00]);
-                }
-
-                const float mean = sum/ne00;
-
-                float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
-
-                memcpy(y, x, ne00 * sizeof(float));
-                // for (int i00 = 0; i00 < ne00; i00++) {
-                //     y[i00] = x[i00];
-                // }
-
-                const float scale = 1.0f/sqrtf(mean + eps);
-
-                ggml_vec_scale_f32(ne00, y, scale);
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_rms_norm(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_rms_norm_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-static void ggml_compute_forward_rms_norm_back_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst) && ggml_are_same_shape(src0, src1));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    float eps;
-    memcpy(&eps, dst->op_params, sizeof(float));
-
-    // TODO: optimize
-    for (int64_t i03 = 0; i03 < ne03; i03++) {
-        for (int64_t i02 = 0; i02 < ne02; i02++) {
-            for (int64_t i01 = ith; i01 < ne01; i01 += nth) {
-                // src1 is same shape as src0 => same indices
-                const int64_t i11 = i01;
-                const int64_t i12 = i02;
-                const int64_t i13 = i03;
-
-                const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
-                const float * dz = (float *) ((char *) src1->data + i11*nb11 + i12*nb12 + i13*nb13);
-
-                ggml_float sum_xx  = 0.0;
-                ggml_float sum_xdz = 0.0;
-
-                for (int64_t i00 = 0; i00 < ne00; i00++) {
-                    sum_xx  += (ggml_float)(x[i00] * x[i00]);
-                    sum_xdz += (ggml_float)(x[i00] * dz[i00]);
-                }
-
-                //const float mean     = (float)(sum_xx)/ne00;
-                const float mean_eps = (float)(sum_xx)/ne00 + eps;
-                const float sum_eps  = (float)(sum_xx) + eps*ne00;
-                //const float mean_xdz = (float)(sum_xdz)/ne00;
-                // we could cache rms from forward pass to improve performance.
-                // to do this implement ggml_rms and compose ggml_rms_norm using ggml_rms.
-                //const float rms      = sqrtf(mean_eps);
-                const float rrms     = 1.0f / sqrtf(mean_eps);
-                //const float scale    = -rrms/(ne00 * mean_eps); // -1/(n*rms**3)
-
-                {
-                    // z = rms_norm(x)
-                    //
-                    // rms_norm(src0) =
-                    //     scale(
-                    //         src0,
-                    //         div(
-                    //             1,
-                    //             sqrt(
-                    //                 add(
-                    //                     scale(
-                    //                         sum(
-                    //                             sqr(
-                    //                                 src0)),
-                    //                         (1.0/N)),
-                    //                     eps))));
-
-                    // postorder:
-                    // ## op    args         grad
-                    // 00 param src0         grad[#00]
-                    // 01 const 1
-                    // 02 sqr   (#00)        grad[#02]
-                    // 03 sum   (#02)        grad[#03]
-                    // 04 const 1/N
-                    // 05 scale (#03, #04)   grad[#05]
-                    // 06 const eps
-                    // 07 add   (#05, #06)   grad[#07]
-                    // 08 sqrt  (#07)        grad[#08]
-                    // 09 div   (#01,#08)    grad[#09]
-                    // 10 scale (#00,#09)    grad[#10]
-                    //
-                    // backward pass, given grad[#10]
-                    // #10: scale
-                    // grad[#00] += scale(grad[#10],#09)
-                    // grad[#09] += sum(mul(grad[#10],#00))
-                    // #09: div
-                    // grad[#08] += neg(mul(grad[#09], div(#09,#08)))
-                    // #08: sqrt
-                    // grad[#07] += mul(grad[#08], div(0.5, #08))
-                    // #07: add
-                    // grad[#05] += grad[#07]
-                    // #05: scale
-                    // grad[#03] += scale(grad[#05],#04)
-                    // #03: sum
-                    // grad[#02] += repeat(grad[#03], #02)
-                    // #02:
-                    // grad[#00] += scale(mul(#00, grad[#02]), 2.0)
-                    //
-                    // substitute and simplify:
-                    // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, grad[#02]), 2.0)
-                    // grad[#02] = repeat(grad[#03], #02)
-                    // grad[#02] = repeat(scale(grad[#05],#04), #02)
-                    // grad[#02] = repeat(scale(grad[#07],#04), #02)
-                    // grad[#02] = repeat(scale(mul(grad[#08], div(0.5, #08)),#04), #02)
-                    // grad[#02] = repeat(scale(mul(neg(mul(grad[#09], div(#09,#08))), div(0.5, #08)),#04), #02)
-                    // grad[#02] = repeat(scale(mul(neg(mul(sum(mul(grad[#10],#00)), div(#09,#08))), div(0.5, #08)),#04), #02)
-                    // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(#09,#08) * div(0.5, #08) * (1/N)), #02)
-                    // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(div(#01,#08),#08) * div(0.5, #08) * (1/N)), #02)
-                    // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(1,#08*#08) * div(0.5, #08) * (1/N)), #02)
-                    // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N)), #02)
-                    // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, grad[#02]), 2.0)
-                    // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, repeat(-(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N)), #02)), 2.0)
-                    // grad[#00] = scale(grad(#10), #09) + scale(scale(#00, -(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N))), 2.0)
-                    // grad[#00] = scale(grad(#10), #09) + scale(#00, -(sum(mul(grad[#10],#00)) * div(1,#07) * div(1,#08) * (1/N)))
-                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,#07*#08) * (-1/N))
-                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,#07*#08) * (-1/N))
-                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,mean_eps*rms) * (-1/N))
-                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*mean_eps))
-                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*(sum_xx/N+eps)))
-                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*sum_xx+rms*N*eps))
-                    // grad[#00] = scale(dz, rrms) + scale(x, sum(mul(dz,x)) * div(-1,rms*N*mean_eps))
-                    // grad[#00] = scale(dz, rrms) + scale(x, sum_xdz * div(-1,rms*N*mean_eps))
-                    // a = b*c + d*e
-                    // a = b*c*f/f + d*e*f/f
-                    // a = (b*c*f + d*e*f)*(1/f)
-                    // a = (b*c*(1/c) + d*e*(1/c))*(1/(1/c))
-                    // a = (b + d*e/c)*c
-                    // b = dz, c = rrms, d = x, e = sum_xdz * div(-1,rms*N*mean_eps)
-                    // a = (dz + x*sum_xdz * div(-1,rms*N*mean_eps)/rrms)*rrms
-                    // a = (dz + x*sum_xdz * div(-1,rms*N*mean_eps)*rms)*rrms
-                    // a = (dz + x*sum_xdz * div(-rms,rms*N*mean_eps))*rrms
-                    // a = (dz + x*sum_xdz * div(-1,N*mean_eps))*rrms
-                    // a = (dz + x*div(-sum_xdz,N*mean_eps))*rrms
-                    // a = (dz + x*div(-mean_xdz,mean_eps))*rrms
-                    // grad[#00] = scale(dz + scale(x, div(-mean_xdz,mean_eps)),rrms)
-                    // grad[#00] = scale(dz + scale(x, -mean_xdz/mean_eps),rrms)
-                    // dx = scale(dz + scale(x, -mean_xdz/mean_eps),rrms)
-                }
-                // dx = scale(dz + scale(x, -mean_xdz/mean_eps),rrms)
-                // post-order:
-                // dx := x
-                // dx := scale(dx,-mean_xdz/mean_eps)
-                // dx := add(dx, dz)
-                // dx := scale(dx, rrms)
-                float * dx = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
-
-                ggml_vec_cpy_f32  (ne00, dx, x);
-                // ggml_vec_scale_f32(ne00, dx, -mean_xdz/mean_eps);
-                ggml_vec_scale_f32(ne00, dx, (float)(-sum_xdz)/sum_eps);
-                ggml_vec_acc_f32  (ne00, dx, dz);
-                ggml_vec_scale_f32(ne00, dx, rrms);
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_rms_norm_back(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_rms_norm_back_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_group_norm
-
-static void ggml_compute_forward_group_norm_f32(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    const float eps = 1e-6f; // TODO: make this a parameter
-
-    // TODO: optimize
-
-    int n_channels = src0->ne[2];
-    int n_groups = dst->op_params[0];
-    int n_channels_per_group = (n_channels + n_groups - 1) / n_groups;
-    for (int i = ith; i < n_groups; i += nth) {
-        int start = i * n_channels_per_group;
-        int end = start + n_channels_per_group;
-        if (end > n_channels) {
-            end = n_channels;
-        }
-        int step = end - start;
-
-        for (int64_t i03 = 0; i03 < ne03; i03++) {
-            ggml_float sum = 0.0;
-            for (int64_t i02 = start; i02 < end; i02++) {
-                for (int64_t i01 = 0; i01 < ne01; i01++) {
-                    const float * x = (float *)((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03);
-
-                    ggml_float sumr = 0.0;
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        sumr += (ggml_float)x[i00];
-                    }
-                    sum += sumr;
-                }
-            }
-            const float mean = sum / (ne00 * ne01 * step);
-
-            ggml_float sum2 = 0.0;
-            for (int64_t i02 = start; i02 < end; i02++) {
-                for (int64_t i01 = 0; i01 < ne01; i01++) {
-                    const float * x = (float *)((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03);
-
-                    float * y = (float *)((char *) dst->data + i01 * nb1 + i02 * nb2 + i03 * nb3);
-
-                    ggml_float sumr = 0.0;
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        float v = x[i00] - mean;
-                        y[i00] = v;
-                        sumr += (ggml_float)(v * v);
-                    }
-                    sum2 += sumr;
-                }
-            }
-            const float variance = sum2 / (ne00 * ne01 * step);
-            const float scale = 1.0f / sqrtf(variance + eps);
-
-            for (int64_t i02 = start; i02 < end; i02++) {
-                for (int64_t i01 = 0; i01 < ne01; i01++) {
-                    float * y = (float *)((char *) dst->data + i01 * nb1 + i02 * nb2 + i03 * nb3);
-                    ggml_vec_scale_f32(ne00, y, scale);
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_group_norm(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_group_norm_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_mul_mat
-
-static void ggml_compute_forward_mul_mat_one_chunk(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst,
-    const int64_t num_rows_per_vec_dot,
-    const int64_t ir0_start,
-    const int64_t ir0_end,
-    const int64_t ir1_start,
-    const int64_t ir1_end) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const enum ggml_type type = src0->type;
-
-    const bool src1_cont = ggml_is_contiguous(src1);
-
-    ggml_vec_dot_t    const vec_dot = type_traits[type].vec_dot;
-    enum ggml_type    const vec_dot_type = type_traits[type].vec_dot_type;
-
-    // broadcast factors
-    const int64_t r2 = ne12 / ne02;
-    const int64_t r3 = ne13 / ne03;
-
-    //printf("ir0_start = %6lld, ir0_end = %6lld, ir1_start = %6lld, ir1_end = %6lld\n", ir0_start, ir0_end, ir1_start, ir1_end);
-
-    // threads with no work simply yield (not sure if it helps)
-    if (ir0_start >= ir0_end || ir1_start >= ir1_end) {
-        return;
-    }
-
-    const void * wdata = (src1->type == vec_dot_type) ? src1->data : params->wdata;
-    const size_t row_size = ggml_row_size(vec_dot_type, ne10);
-
-    assert(ne12 % ne02 == 0);
-    assert(ne13 % ne03 == 0);
-
-    // block-tiling attempt
-    const int64_t blck_0 = 16;
-    const int64_t blck_1 = 16;
-
-    const size_t src1_col_stride = src1_cont || src1->type != vec_dot_type ? row_size : nb11;
-
-    // attempt to reduce false-sharing (does not seem to make a difference)
-    // 16 * 2, accounting for mmla kernels
-    float tmp[32];
-
-    for (int64_t iir1 = ir1_start; iir1 < ir1_end; iir1 += blck_1) {
-        for (int64_t iir0 = ir0_start; iir0 < ir0_end; iir0 += blck_0) {
-            for (int64_t ir1 = iir1; ir1 < iir1 + blck_1 && ir1 < ir1_end; ir1 += num_rows_per_vec_dot) {
-                const int64_t i13 = (ir1 / (ne12 * ne1));
-                const int64_t i12 = (ir1 - i13 * ne12 * ne1) / ne1;
-                const int64_t i11 = (ir1 - i13 * ne12 * ne1 - i12 * ne1);
-
-                // broadcast src0 into src1
-                const int64_t i03 = i13 / r3;
-                const int64_t i02 = i12 / r2;
-
-                const int64_t i1 = i11;
-                const int64_t i2 = i12;
-                const int64_t i3 = i13;
-
-                const char * src0_row = (const char*)src0->data + (0 + i02 * nb02 + i03 * nb03);
-
-                // desc: when src1 is not a contiguous memory block we have to calculate the offset using the strides
-                //       if it is, then we have either copied the data to params->wdata and made it contiguous or we are using
-                //       the original src1 data pointer, so we should index using the indices directly
-                // TODO: this is a bit of a hack, we should probably have a better way to handle this
-                const char * src1_col = (const char*)wdata +
-                    (src1_cont || src1->type != vec_dot_type
-                        ? (i11 + i12 * ne11 + i13 * ne12 * ne11) * row_size
-                        : (i11 * nb11 + i12 * nb12 + i13 * nb13));
-                float * dst_col = (float*)((char*)dst->data + (i1 * nb1 + i2 * nb2 + i3 * nb3));
-
-                //for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir0_end; ++ir0) {
-                //    vec_dot(ne00, &dst_col[ir0], src0_row + ir0*nb01, src1_col);
-                //}
-
-                for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir0_end; ir0 += num_rows_per_vec_dot) {
-                    vec_dot(ne00, &tmp[ir0 - iir0], (num_rows_per_vec_dot > 1 ? 16 : 0), src0_row + ir0 * nb01, (num_rows_per_vec_dot > 1 ? nb01 : 0), src1_col, (num_rows_per_vec_dot > 1 ? src1_col_stride : 0), num_rows_per_vec_dot);
-                }
-
-                for (int cn = 0; cn < num_rows_per_vec_dot; ++cn) {
-                    memcpy(&dst_col[iir0 + cn * nb1 / nb0], tmp + (cn * 16), (MIN(iir0 + blck_0, ir0_end) - iir0) * sizeof(float));
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_mul_mat(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst,
-              struct ggml_compute_state * state) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    int64_t t0 = ggml_perf_time_us();
-    UNUSED(t0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const enum ggml_type type = src0->type;
-
-    enum ggml_type    const vec_dot_type          = type_traits[type].vec_dot_type;
-    ggml_from_float_t const from_float_to_vec_dot = type_traits[vec_dot_type].from_float;
-    int64_t           const vec_dot_num_rows      = type_traits[type].nrows;
-
-    GGML_ASSERT(ne0 == ne01);
-    GGML_ASSERT(ne1 == ne11);
-    GGML_ASSERT(ne2 == ne12);
-    GGML_ASSERT(ne3 == ne13);
-
-    // we don't support permuted src0 or src1
-    GGML_ASSERT(nb00 == ggml_type_size(type));
-    GGML_ASSERT(nb10 == ggml_type_size(src1->type));
-
-    // dst cannot be transposed or permuted
-    GGML_ASSERT(nb0 == sizeof(float));
-    GGML_ASSERT(nb0 <= nb1);
-    GGML_ASSERT(nb1 <= nb2);
-    GGML_ASSERT(nb2 <= nb3);
-
-    // broadcast factors
-    const int64_t r2 = ne12 / ne02;
-    const int64_t r3 = ne13 / ne03;
-    UNUSED(r2);
-    UNUSED(r3);
-
-    // nb01 >= nb00 - src0 is not transposed
-    //   compute by src0 rows
-
-#if GGML_USE_LLAMAFILE
-    const bool src1_cont = ggml_is_contiguous(src1);
-
-    if (src1_cont) {
-        for (int64_t i13 = 0; i13 < ne13; i13++)
-            for (int64_t i12 = 0; i12 < ne12; i12++)
-                if (!llamafile_sgemm(ne01, ne11, ne00/ggml_blck_size(src0->type),
-                                     (const char *)src0->data + i12/r2*nb02 + i13/r3*nb03,
-                                     nb01/ggml_type_size(src0->type),
-                                     (const char *)src1->data + i12*nb12 + i13*nb13,
-                                     nb11/ggml_type_size(src1->type),
-                                     (char *)dst->data + i12*nb2 + i13*nb3,
-                                     nb1/ggml_type_size(dst->type),
-                                     ith, nth,
-                                     params->type,
-                                     src0->type,
-                                     src1->type,
-                                     dst->type))
-                    goto UseGgmlGemm1;
-        return;
-    }
-UseGgmlGemm1:;
-#endif
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        if (ith != 0) {
-            return;
-        }
-        // Every thread starts at ith, so the first unprocessed chunk is nth.  This save a bit of coordination right at the start.
-        atomic_store(&state->shared->current_chunk, nth);
-        if (src1->type != vec_dot_type) {
-            char * wdata = params->wdata;
-            const size_t row_size = ggml_row_size(vec_dot_type, ne10);
-
-            assert(params->wsize >= ne11*ne12*ne13*row_size);
-            GGML_ASSERT(src1->type == GGML_TYPE_F32);
-
-            for (int64_t i13 = 0; i13 < ne13; ++i13) {
-                for (int64_t i12 = 0; i12 < ne12; ++i12) {
-                    for (int64_t i11 = 0; i11 < ne11; ++i11) {
-                        from_float_to_vec_dot((float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11), (void *) wdata, ne10);
-                        wdata += row_size;
-                    }
-                }
-            }
-        }
-
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-#if GGML_USE_LLAMAFILE
-    if (src1->type != vec_dot_type) {
-        const void* wdata = (src1->type == vec_dot_type) ? src1->data : params->wdata;
-        const size_t row_size = ggml_row_size(vec_dot_type, ne10);
-
-        for (int64_t i13 = 0; i13 < ne13; i13++)
-            for (int64_t i12 = 0; i12 < ne12; i12++)
-                if (!llamafile_sgemm(ne01, ne11, ne00/ggml_blck_size(src0->type),
-                                     (const char *)src0->data + i12/r2*nb02 + i13/r3*nb03,
-                                     nb01/ggml_type_size(src0->type),
-                                     (const char *)wdata + (i12*ne11 + i13*ne12*ne11)*row_size,
-                                     row_size/ggml_type_size(vec_dot_type),
-                                     (char *)dst->data + i12*nb2 + i13*nb3,
-                                     nb1/ggml_type_size(dst->type),
-                                     ith, nth,
-                                     params->type,
-                                     src0->type,
-                                     vec_dot_type,
-                                     dst->type))
-                    goto UseGgmlGemm2;
-        return;
-    }
-UseGgmlGemm2:;
-#endif
-
-#ifdef GGML_PERF
-    int chunks_executed = 0;
-    UNUSED(chunks_executed);
-#endif
-
-    // This is the size of the first dimension of the result, so we can iterate that way. (see the ASSERT above, these are the same numbers)
-    const int64_t nr0 = ne0;
-
-    // This is the size of the rest of the dimensions of the result
-    const int64_t nr1 = ne1 * ne2 * ne3;
-
-    // dot kernels can handle 1 row and col at a time, but mmla kernels can process 2 rows and cols
-    int64_t num_rows_per_vec_dot = vec_dot_num_rows;
-    // TODO: currently the mmla kernels support only even numbered rows/cols.
-    // this check can be removed once they are extended to support odd numbered rows/cols too
-    if ((nr0 % 2 != 0) || (ne11 % 2 != 0)) {
-        num_rows_per_vec_dot = 1;
-    }
-
-    // Now select a reasonable chunk size.
-    int chunk_size = 16;
-
-    // We need to step up the size if it's small
-    if (nr0 == 1 || nr1 == 1) {
-        chunk_size = 64;
-    }
-
-    // distribute the work across the inner or outer loop based on which one is larger
-    // The number of chunks in the 0/1 dim.
-    // CEIL(nr0/chunk_size)
-    int64_t nchunk0 = (nr0 + chunk_size - 1) / chunk_size;
-    int64_t nchunk1 = (nr1 + chunk_size - 1) / chunk_size;
-
-    // If the chunking is poor for the number of threads on this setup, scrap the whole plan.  Re-chunk it by thread.
-    //   Also, chunking by thread was measured to have perform better on NUMA systems.  See https://github.com/ggerganov/llama.cpp/pull/6915
-    //   In theory, chunking should be just as useful on NUMA and non NUMA systems, but testing disagreed with that.
-    if (nchunk0 * nchunk1 < nth * 4 || ggml_is_numa()) {
-        // distribute the thread work across the inner or outer loop based on which one is larger
-        nchunk0 = nr0 > nr1 ? nth : 1; // parallelize by src0 rows
-        nchunk1 = nr0 > nr1 ? 1 : nth; // parallelize by src1 rows
-    }
-
-    // The number of elements in each chunk
-    const int64_t dr0 = (nr0 + nchunk0 - 1) / nchunk0;
-    const int64_t dr1 = (nr1 + nchunk1 - 1) / nchunk1;
-
-    //if (ith == 0)
-    //    printf("MUL_MAT = [%d, %d, %d, %d] x [%d, %d, %d, %d] = %d x %d = %d.  Fp Ops/Ch %d\n", ne00, ne01, ne02, ne03, ne10, ne11, ne12, ne13, nchunk0, nchunk1, nchunk0 * nchunk1, ne00 * nr0 * nr1 / nchunk0 / nchunk1);
-
-    // The first chunk comes from our thread_id, the rest will get auto-assigned.
-    int current_chunk = ith;
-
-    while (current_chunk < nchunk0 * nchunk1) {
-        const int64_t ith0 = current_chunk % nchunk0;
-        const int64_t ith1 = current_chunk / nchunk0;
-
-        const int64_t ir0_start = dr0 * ith0;
-        const int64_t ir0_end = MIN(ir0_start + dr0, nr0);
-
-        const int64_t ir1_start = dr1 * ith1;
-        const int64_t ir1_end = MIN(ir1_start + dr1, nr1);
-
-        ggml_compute_forward_mul_mat_one_chunk(params, dst, num_rows_per_vec_dot, ir0_start, ir0_end, ir1_start, ir1_end);
-
-#ifdef GGML_PERF
-        chunks_executed++;
-#endif
-
-        if (nth >= nchunk0 * nchunk1) {
-            break;
-        }
-
-        current_chunk = atomic_fetch_add(&state->shared->current_chunk, 1);
-    }
-
-#ifdef GGML_PERF
-    // These numbers are useful when trying to measure how well the threading scheduling works.
-    //int64_t workSize = (ne01 * ne11 * ne12 * ne13 * ne00) / nchunk0 / nchunk1;
-    //float time = (ggml_perf_time_us() - t0);
-    //printf("MUL_MAT = %f ms, [%d, %d, %d, %d] x [%d, %d, %d, %d] = %I64u, %f ops/usec in %d chunks.\n", time / 1000.0, ne00, ne01, ne02, ne03, ne10, ne11, ne12, ne13, workSize, (float)workSize/time, chunks_executed);
-#endif
-}
-
-// ggml_compute_forward_mul_mat_id
-
-static void ggml_compute_forward_mul_mat_id(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-    const struct ggml_tensor * ids = dst->src[2];
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const enum ggml_type type = src0->type;
-
-    const bool src1_cont = ggml_is_contiguous(src1);
-
-    ggml_vec_dot_t    const vec_dot               = type_traits[type].vec_dot;
-    enum ggml_type    const vec_dot_type          = type_traits[type].vec_dot_type;
-    ggml_from_float_t const from_float_to_vec_dot = type_traits[vec_dot_type].from_float;
-
-    // we don't support permuted src0 or src1
-    GGML_ASSERT(nb00 == ggml_type_size(type));
-    GGML_ASSERT(nb10 == ggml_type_size(src1->type));
-
-    // dst cannot be transposed or permuted
-    GGML_ASSERT(nb0 == sizeof(float));
-    GGML_ASSERT(nb0 <= nb1);
-    GGML_ASSERT(nb1 <= nb2);
-    GGML_ASSERT(nb2 <= nb3);
-
-    // row groups
-    const int n_ids = ids->ne[0]; // n_expert_used
-    const int n_as  = ne02;       // n_expert
-
-    char * wdata_src1_end = (src1->type == vec_dot_type) ?
-            (char *) params->wdata :
-            (char *) params->wdata + GGML_PAD(ggml_row_size(vec_dot_type, ggml_nelements(src1)), sizeof(int64_t));
-
-    struct mmid_row_mapping {
-        int32_t i1;
-        int32_t i2;
-    };
-
-    int64_t * matrix_row_counts = (int64_t *) (wdata_src1_end); // [n_as]
-    struct mmid_row_mapping * matrix_rows = (struct mmid_row_mapping *)(matrix_row_counts + n_as); // [n_as][ne11]
-
-   if (params->type == GGML_TASK_TYPE_INIT) {
-        if (ith != 0) {
-            return;
-        }
-        char * wdata = params->wdata;
-        if (src1->type != vec_dot_type) {
-            const size_t row_size = ggml_row_size(vec_dot_type, ne10);
-
-            assert(params->wsize >= ne11*ne12*ne13*row_size);
-            assert(src1->type == GGML_TYPE_F32);
-
-            for (int64_t i13 = 0; i13 < ne13; ++i13) {
-                for (int64_t i12 = 0; i12 < ne12; ++i12) {
-                    for (int64_t i11 = 0; i11 < ne11; ++i11) {
-                        from_float_to_vec_dot((float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11), (void *) wdata, ne10);
-                        wdata += row_size;
-                    }
-                }
-            }
-        }
-
-        // initialize matrix_row_counts
-        memset(matrix_row_counts, 0, n_as*sizeof(int64_t));
-
-#define MMID_MATRIX_ROW(row_id, i1) matrix_rows[(row_id)*ne12 + (i1)]
-
-        // group rows by src0 matrix
-        for (int64_t iid1 = 0; iid1 < ids->ne[1]; ++iid1) {
-            for (int id = 0; id < n_ids; ++id) {
-                const int32_t i02 = *(const int32_t *) ((const char *) ids->data + iid1*ids->nb[1] + id*ids->nb[0]);
-
-                assert(i02 >= 0 && i02 < n_as);
-
-                MMID_MATRIX_ROW(i02, matrix_row_counts[i02]) = (struct mmid_row_mapping) {id, iid1};
-                matrix_row_counts[i02] += 1;
-            }
-        }
-
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // compute each matrix multiplication in sequence
-    for (int cur_a = 0; cur_a < n_as; ++cur_a) {
-        const int64_t cne1 = matrix_row_counts[cur_a];
-
-        if (cne1 == 0) {
-            continue;
-        }
-
-        const char * src0_cur = (const char *) src0->data + cur_a*nb02;
-
-        const void * wdata    = (src1->type == vec_dot_type) ? src1->data : params->wdata;
-        const size_t row_size = ggml_row_size(vec_dot_type, ne10);
-
-        const int64_t nr0 = ne01; // src0 rows
-        const int64_t nr1 = cne1; // src1 rows
-
-        // distribute the thread work across the inner or outer loop based on which one is larger
-
-        const int64_t nth0 = nr0 > nr1 ? nth : 1; // parallelize by src0 rows
-        const int64_t nth1 = nr0 > nr1 ? 1 : nth; // parallelize by src1 rows
-
-        const int64_t ith0 = ith % nth0;
-        const int64_t ith1 = ith / nth0;
-
-        const int64_t dr0 = (nr0 + nth0 - 1)/nth0;
-        const int64_t dr1 = (nr1 + nth1 - 1)/nth1;
-
-        const int64_t ir010 = dr0*ith0;
-        const int64_t ir011 = MIN(ir010 + dr0, nr0);
-
-        const int64_t ir110 = dr1*ith1;
-        const int64_t ir111 = MIN(ir110 + dr1, nr1);
-
-        // threads with no work simply yield (not sure if it helps)
-        //if (ir010 >= ir011 || ir110 >= ir111) {
-        //    sched_yield();
-        //    continue;
-        //}
-
-        // block-tiling attempt
-        const int64_t blck_0 = 16;
-        const int64_t blck_1 = 16;
-
-        // attempt to reduce false-sharing (does not seem to make a difference)
-        float tmp[16];
-
-        for (int64_t iir1 = ir110; iir1 < ir111; iir1 += blck_1) {
-            for (int64_t iir0 = ir010; iir0 < ir011; iir0 += blck_0) {
-                for (int64_t ir1 = iir1; ir1 < iir1 + blck_1 && ir1 < ir111; ++ir1) {
-                    const int64_t _i12 = ir1; // logical row index for this expert
-
-                    struct mmid_row_mapping row_mapping = MMID_MATRIX_ROW(cur_a, _i12);
-                    const int id       = row_mapping.i1; // selected expert index
-
-                    const int64_t  i11 = id % ne11;
-                    const int64_t  i12 = row_mapping.i2; // row index in src1
-
-                    const int64_t  i1 = id;  // selected expert index
-                    const int64_t  i2 = i12; // row
-
-                    // desc: when src1 is not a contiguous memory block we have to calculate the offset using the strides
-                    //       if it is, then we have either copied the data to params->wdata and made it contiguous or we are using
-                    //       the original src1 data pointer, so we should index using the indices directly
-                    // TODO: this is a bit of a hack, we should probably have a better way to handle this
-                    const char * src1_col = (const char *) wdata +
-                        (src1_cont || src1->type != vec_dot_type
-                        ? (i11      + i12*ne11)*row_size
-                        : (i11*nb11 + i12*nb12));
-
-                    float * dst_col = (float *) ((char *) dst->data + (i1*nb1 + i2*nb2));
-
-                    //for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir011; ++ir0) {
-                    //    vec_dot(ne00, &dst_col[ir0], src0_row + ir0*nb01, src1_col);
-                    //}
-
-                    for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir011; ++ir0) {
-                        vec_dot(ne00, &tmp[ir0 - iir0], 0, src0_cur + ir0*nb01, 0, src1_col, 0, 1);
-                    }
-
-                    memcpy(&dst_col[iir0], tmp, (MIN(iir0 + blck_0, ir011) - iir0)*sizeof(float));
-                }
-            }
-        }
-    }
-
-#undef MMID_MATRIX_ROW
-}
-
-// ggml_compute_forward_out_prod
-
-static void ggml_compute_forward_out_prod_f32(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    // int64_t t0 = ggml_perf_time_us();
-    // UNUSED(t0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    GGML_ASSERT(ne0  == ne00);
-    GGML_ASSERT(ne1  == ne10);
-    GGML_ASSERT(ne2  == ne02);
-    GGML_ASSERT(ne02 == ne12);
-    GGML_ASSERT(ne3  == ne13);
-    GGML_ASSERT(ne03 == ne13);
-
-    // we don't support permuted src0 or src1
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    // dst cannot be transposed or permuted
-    GGML_ASSERT(nb0 == sizeof(float));
-    // GGML_ASSERT(nb0 <= nb1);
-    // GGML_ASSERT(nb1 <= nb2);
-    // GGML_ASSERT(nb2 <= nb3);
-
-    // nb01 >= nb00 - src0 is not transposed
-    //   compute by src0 rows
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        if (ith != 0) {
-            return;
-        }
-        ggml_vec_set_f32(ne0*ne1*ne2*ne3, dst->data, 0);
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // dst[:,:,:,:] = 0
-    // for i2,i3:
-    //   for i1:
-    //     for i01:
-    //       for i0:
-    //         dst[i0,i1,i2,i3] += src0[i0,i01,i2,i3] * src1[i1,i01,i2,i3]
-
-    // parallelize by last three dimensions
-
-    // total rows in dst
-    const int64_t nr = ne1*ne2*ne3;
-
-    // rows per thread
-    const int64_t dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int64_t ir0 = dr*ith;
-    const int64_t ir1 = MIN(ir0 + dr, nr);
-
-    // block-tiling attempt
-    const int64_t blck_0 = MAX(GGML_VEC_MAD_UNROLL, 32);
-    const int64_t blck_1 = 16;
-
-    for (int64_t bir = ir0; bir < ir1; bir += blck_1) {
-        const int64_t bir1 = MIN(bir + blck_1, ir1);
-        for (int64_t bi01 = 0; bi01 < ne01; bi01 += blck_0) {
-            const int64_t bne01 = MIN(bi01 + blck_0, ne01);
-            for (int64_t ir = bir; ir < bir1; ++ir) {
-                // dst indices
-                const int64_t i3 = ir/(ne2*ne1);
-                const int64_t i2 = (ir - i3*ne2*ne1)/ne1;
-                const int64_t i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-                const int64_t i02 = i2;
-                const int64_t i03 = i3;
-
-                //const int64_t i10 = i1;
-                const int64_t i12 = i2;
-                const int64_t i13 = i3;
-
-#if GGML_VEC_MAD_UNROLL > 2
-                const int64_t bne01_unroll = bne01 - (bne01 % GGML_VEC_MAD_UNROLL);
-                for (int64_t i01 = bi01; i01 < bne01_unroll; i01 += GGML_VEC_MAD_UNROLL) {
-                    const int64_t i11 = i01;
-
-                    float * s0 = (float *) ((char *) src0->data + (          i01*nb01 + i02*nb02 + i03*nb03));
-                    float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13));
-                    float * d  = (float *) ((char *)  dst->data + (          i1*nb1 + i2*nb2 + i3*nb3));
-
-                    ggml_vec_mad_f32_unroll(ne0, nb01, nb11, d, s0, s1);
-                }
-                for (int64_t i01 = bne01_unroll; i01 < bne01; ++i01) {
-                    const int64_t i11 = i01;
-
-                    float * s0 = (float *) ((char *) src0->data + (          i01*nb01 + i02*nb02 + i03*nb03));
-                    float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13));
-                    float * d  = (float *) ((char *)  dst->data + (          i1*nb1 + i2*nb2 + i3*nb3));
-
-                    ggml_vec_mad_f32(ne0, d, s0, *s1);
-                }
-#else
-                for (int64_t i01 = bi01; i01 < bne01; ++i01) {
-                    const int64_t i11 = i01;
-
-                    float * s0 = (float *) ((char *) src0->data + (          i01*nb01 + i02*nb02 + i03*nb03));
-                    float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13));
-                    float * d  = (float *) ((char *)  dst->data + (          i1*nb1 + i2*nb2 + i3*nb3));
-
-                    ggml_vec_mad_f32(ne0, d, s0, *s1);
-                }
-#endif
-            }
-        }
-    }
-
-    //int64_t t1 = ggml_perf_time_us();
-    //static int64_t acc = 0;
-    //acc += t1 - t0;
-    //if (t1 - t0 > 10) {
-    //    printf("\n");
-    //    printf("ne00 = %5d, ne01 = %5d, ne02 = %5d, ne03 = %5d\n", ne00, ne01, ne02, ne03);
-    //    printf("nb00 = %5d, nb01 = %5d, nb02 = %5d, nb03 = %5d\n", nb00, nb01, nb02, nb03);
-    //    printf("ne10 = %5d, ne11 = %5d, ne12 = %5d, ne13 = %5d\n", ne10, ne11, ne12, ne13);
-    //    printf("nb10 = %5d, nb11 = %5d, nb12 = %5d, nb13 = %5d\n", nb10, nb11, nb12, nb13);
-
-    //    printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX task %d/%d: %d us, acc = %d\n", ith, nth, (int) (t1 - t0), (int) acc);
-    //}
-}
-
-static void ggml_compute_forward_out_prod_q_f32(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    // int64_t t0 = ggml_perf_time_us();
-    // UNUSED(t0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS;
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const enum ggml_type type = src0->type;
-    ggml_to_float_t const dequantize_row_q = type_traits[type].to_float;
-
-    GGML_ASSERT(ne02 == ne12);
-    GGML_ASSERT(ne03 == ne13);
-    GGML_ASSERT(ne2  == ne12);
-    GGML_ASSERT(ne3  == ne13);
-
-    // we don't support permuted src0 dim0
-    GGML_ASSERT(nb00 == ggml_type_size(type));
-
-    // dst dim0 cannot be transposed or permuted
-    GGML_ASSERT(nb0 == sizeof(float));
-    // GGML_ASSERT(nb0 <= nb1);
-    // GGML_ASSERT(nb1 <= nb2);
-    // GGML_ASSERT(nb2 <= nb3);
-
-    GGML_ASSERT(ne0 == ne00);
-    GGML_ASSERT(ne1 == ne10);
-    GGML_ASSERT(ne2 == ne02);
-    GGML_ASSERT(ne3 == ne03);
-
-    // nb01 >= nb00 - src0 is not transposed
-    //   compute by src0 rows
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        if (ith != 0) {
-            return;
-        }
-        ggml_vec_set_f32(ne0*ne1*ne2*ne3, dst->data, 0);
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // parallelize by last three dimensions
-
-    // total rows in dst
-    const int64_t nr = ne1*ne2*ne3;
-
-    // rows per thread
-    const int64_t dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int64_t ir0 = dr*ith;
-    const int64_t ir1 = MIN(ir0 + dr, nr);
-
-    // dst[:,:,:,:] = 0
-    // for i2,i3:
-    //   for i1:
-    //     for i01:
-    //       for i0:
-    //         dst[i0,i1,i2,i3] += src0[i0,i01,i2,i3] * src1[i1,i01,i2,i3]
-
-    float * wdata = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32) * ith;
-
-    for (int64_t ir = ir0; ir < ir1; ++ir) {
-        // dst indices
-        const int64_t i3 = ir/(ne2*ne1);
-        const int64_t i2 = (ir - i3*ne2*ne1)/ne1;
-        const int64_t i1 = (ir - i3*ne2*ne1 - i2*ne1);
-
-        const int64_t i02 = i2;
-        const int64_t i03 = i3;
-
-        //const int64_t i10 = i1;
-        const int64_t i12 = i2;
-        const int64_t i13 = i3;
-
-        for (int64_t i01 = 0; i01 < ne01; ++i01) {
-            const int64_t i11 = i01;
-
-            float * s0 = (float *) ((char *) src0->data + (          i01*nb01 + i02*nb02 + i03*nb03));
-            float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13));
-            float * d  = (float *) ((char *)  dst->data + (          i1*nb1 + i2*nb2 + i3*nb3));
-
-            dequantize_row_q(s0, wdata, ne0);
-            ggml_vec_mad_f32(ne0, d, wdata, *s1);
-        }
-    }
-
-    //int64_t t1 = ggml_perf_time_us();
-    //static int64_t acc = 0;
-    //acc += t1 - t0;
-    //if (t1 - t0 > 10) {
-    //    printf("\n");
-    //    printf("ne00 = %5d, ne01 = %5d, ne02 = %5d, ne03 = %5d\n", ne00, ne01, ne02, ne03);
-    //    printf("nb00 = %5d, nb01 = %5d, nb02 = %5d, nb03 = %5d\n", nb00, nb01, nb02, nb03);
-    //    printf("ne10 = %5d, ne11 = %5d, ne12 = %5d, ne13 = %5d\n", ne10, ne11, ne12, ne13);
-    //    printf("nb10 = %5d, nb11 = %5d, nb12 = %5d, nb13 = %5d\n", nb10, nb11, nb12, nb13);
-
-    //    printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX task %d/%d: %d us, acc = %d\n", ith, nth, (int) (t1 - t0), (int) acc);
-    //}
-}
-
-static void ggml_compute_forward_out_prod(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-        case GGML_TYPE_IQ2_XXS:
-        case GGML_TYPE_IQ2_XS:
-        case GGML_TYPE_IQ3_XXS:
-        case GGML_TYPE_IQ1_S:
-        case GGML_TYPE_IQ1_M:
-        case GGML_TYPE_IQ4_NL:
-        case GGML_TYPE_IQ4_XS:
-        case GGML_TYPE_IQ3_S:
-        case GGML_TYPE_IQ2_S:
-            {
-                ggml_compute_forward_out_prod_q_f32(params, dst);
-            } break;
-        case GGML_TYPE_F16:
-            {
-                GGML_ASSERT(false); // todo
-                // ggml_compute_forward_out_prod_f16_f32(params, dst);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_out_prod_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_scale
-
-static void ggml_compute_forward_scale_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-    GGML_ASSERT(ggml_is_contiguous(dst));
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // scale factor
-    float v;
-    memcpy(&v, dst->op_params, sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nc = src0->ne[0];
-    const int nr = ggml_nrows(src0);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    const size_t nb01 = src0->nb[1];
-
-    const size_t nb1 = dst->nb[1];
-
-    for (int i1 = ir0; i1 < ir1; i1++) {
-        if (dst->data != src0->data) {
-            // src0 is same shape as dst => same indices
-            memcpy((char *)dst->data + i1*nb1, (char *)src0->data + i1*nb01, nc * sizeof(float));
-        }
-        ggml_vec_scale_f32(nc, (float *) ((char *) dst->data + i1*nb1), v);
-    }
-}
-
-static void ggml_compute_forward_scale(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_scale_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_set
-
-static void ggml_compute_forward_set_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-    GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0));
-
-    // view src0 and dst with these strides and data offset inbytes during set
-    // nb0 is implicitly element_size because src0 and dst are contiguous
-    size_t nb1     = ((int32_t *) dst->op_params)[0];
-    size_t nb2     = ((int32_t *) dst->op_params)[1];
-    size_t nb3     = ((int32_t *) dst->op_params)[2];
-    size_t offset  = ((int32_t *) dst->op_params)[3];
-    bool   inplace = (bool) ((int32_t *) dst->op_params)[4];
-
-    if (!inplace && (params->type == GGML_TASK_TYPE_INIT)) {
-        if (params->ith != 0) {
-            return;
-        }
-        // memcpy needs to be synchronized across threads to avoid race conditions.
-        // => do it in INIT phase
-        memcpy(
-            ((char *)  dst->data),
-            ((char *) src0->data),
-            ggml_nbytes(dst));
-    }
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr = ggml_nrows(src1);
-    const int nc = src1->ne[0];
-
-    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne)
-    GGML_TENSOR_LOCALS(size_t,  nb1, src1, nb)
-
-    // src0 and dst as viewed during set
-    const size_t nb0 = ggml_element_size(src0);
-
-    const int im0 = (ne10 == 0 ? 0 : ne10-1);
-    const int im1 = (ne11 == 0 ? 0 : ne11-1);
-    const int im2 = (ne12 == 0 ? 0 : ne12-1);
-    const int im3 = (ne13 == 0 ? 0 : ne13-1);
-
-    GGML_ASSERT(offset + im0*nb0  + im1*nb1  + im2*nb2  + im3*nb3  <= ggml_nbytes(dst));
-
-    GGML_ASSERT(nb10 == sizeof(float));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // src0 and dst are viewed with shape of src1 and offset
-        // => same indices
-        const int i3 = ir/(ne12*ne11);
-        const int i2 = (ir - i3*ne12*ne11)/ne11;
-        const int i1 = (ir - i3*ne12*ne11 - i2*ne11);
-
-        ggml_vec_cpy_f32(nc,
-                (float *) ((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + offset),
-                (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11));
-    }
-}
-
-static void ggml_compute_forward_set(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_set_f32(params, dst);
-            } break;
-        case GGML_TYPE_F16:
-        case GGML_TYPE_BF16:
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q8_1:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-        case GGML_TYPE_IQ2_XXS:
-        case GGML_TYPE_IQ2_XS:
-        case GGML_TYPE_IQ3_XXS:
-        case GGML_TYPE_IQ1_S:
-        case GGML_TYPE_IQ1_M:
-        case GGML_TYPE_IQ4_NL:
-        case GGML_TYPE_IQ4_XS:
-        case GGML_TYPE_IQ3_S:
-        case GGML_TYPE_IQ2_S:
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_cpy
-
-static void ggml_compute_forward_cpy(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-    ggml_compute_forward_dup(params, dst);
-}
-
-// ggml_compute_forward_cont
-
-static void ggml_compute_forward_cont(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-    ggml_compute_forward_dup(params, dst);
-}
-
-// ggml_compute_forward_reshape
-
-static void ggml_compute_forward_reshape(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-    // NOP
-    UNUSED(params);
-    UNUSED(dst);
-}
-
-// ggml_compute_forward_view
-
-static void ggml_compute_forward_view(
-        const struct ggml_compute_params * params,
-        const struct ggml_tensor * dst) {
-    // NOP
-    UNUSED(params);
-    UNUSED(dst);
-}
-
-// ggml_compute_forward_permute
-
-static void ggml_compute_forward_permute(
-        const struct ggml_compute_params * params,
-        const struct ggml_tensor * dst) {
-    // NOP
-    UNUSED(params);
-    UNUSED(dst);
-}
-
-// ggml_compute_forward_transpose
-
-static void ggml_compute_forward_transpose(
-        const struct ggml_compute_params * params,
-        const struct ggml_tensor * dst) {
-    // NOP
-    UNUSED(params);
-    UNUSED(dst);
-}
-
-// ggml_compute_forward_get_rows
-
-static void ggml_compute_forward_get_rows_q(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int64_t nc = ne00;
-    const int64_t nr = ggml_nelements(src1);
-
-    const enum ggml_type type = src0->type;
-    ggml_to_float_t const dequantize_row_q = type_traits[type].to_float;
-
-    assert(ne0  == nc);
-    assert(ne02 == ne11);
-    assert(nb00 == ggml_type_size(type));
-    assert(ggml_nrows(dst) == nr);
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int64_t i = ir0; i < ir1; ++i) {
-        const int64_t i12 = i/(ne11*ne10);
-        const int64_t i11 = (i - i12*ne11*ne10)/ne10;
-        const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10);
-        const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12);
-
-        assert(i01 >= 0 && i01 < ne01);
-
-        dequantize_row_q(
-                (const void *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03),
-                     (float *) ((char *)  dst->data + i10*nb1  + i11*nb2  + i12*nb3), nc);
-    }
-}
-
-static void ggml_compute_forward_get_rows_f16(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int64_t nc = ne00;
-    const int64_t nr = ggml_nelements(src1);
-
-    assert(ne0  == nc);
-    assert(ne02 == ne11);
-    assert(nb00 == sizeof(ggml_fp16_t));
-    assert(ggml_nrows(dst) == nr);
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int64_t i = ir0; i < ir1; ++i) {
-        const int64_t i12 = i/(ne11*ne10);
-        const int64_t i11 = (i - i12*ne11*ne10)/ne10;
-        const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10);
-        const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12);
-
-        assert(i01 >= 0 && i01 < ne01);
-
-        ggml_fp16_to_fp32_row(
-                (const void *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03),
-                     (float *) ((char *)  dst->data + i10*nb1  + i11*nb2  + i12*nb3), nc);
-    }
-}
-
-static void ggml_compute_forward_get_rows_bf16(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int64_t nc = ne00;
-    const int64_t nr = ggml_nelements(src1);
-
-    assert(ne0  == nc);
-    assert(ne02 == ne11);
-    assert(nb00 == sizeof(ggml_bf16_t));
-    assert(ggml_nrows(dst) == nr);
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int64_t i = ir0; i < ir1; ++i) {
-        const int64_t i12 = i/(ne11*ne10);
-        const int64_t i11 = (i - i12*ne11*ne10)/ne10;
-        const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10);
-        const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12);
-
-        assert(i01 >= 0 && i01 < ne01);
-
-        ggml_bf16_to_fp32_row(
-                (const void *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03),
-                     (float *) ((char *)  dst->data + i10*nb1  + i11*nb2  + i12*nb3), nc);
-    }
-}
-
-static void ggml_compute_forward_get_rows_f32(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int64_t nc = ne00;
-    const int64_t nr = ggml_nelements(src1);
-
-    assert(ne0  == nc);
-    assert(ne02 == ne11);
-    assert(nb00 == sizeof(float));
-    assert(ggml_nrows(dst) == nr);
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int64_t i = ir0; i < ir1; ++i) {
-        const int64_t i12 = i/(ne11*ne10);
-        const int64_t i11 = (i - i12*ne11*ne10)/ne10;
-        const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10);
-        const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12);
-
-        assert(i01 >= 0 && i01 < ne01);
-
-        ggml_vec_cpy_f32(nc,
-                (float *) ((char *)  dst->data + i10*nb1  + i11*nb2  + i12*nb3),
-                (float *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03));
-    }
-}
-
-static void ggml_compute_forward_get_rows(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q8_1:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-        case GGML_TYPE_IQ2_XXS:
-        case GGML_TYPE_IQ2_XS:
-        case GGML_TYPE_IQ3_XXS:
-        case GGML_TYPE_IQ1_S:
-        case GGML_TYPE_IQ1_M:
-        case GGML_TYPE_IQ4_NL:
-        case GGML_TYPE_IQ4_XS:
-        case GGML_TYPE_IQ3_S:
-        case GGML_TYPE_IQ2_S:
-            {
-                ggml_compute_forward_get_rows_q(params, dst);
-            } break;
-        case GGML_TYPE_F16:
-            {
-                ggml_compute_forward_get_rows_f16(params, dst);
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                ggml_compute_forward_get_rows_bf16(params, dst);
-            } break;
-        case GGML_TYPE_F32:
-        case GGML_TYPE_I32:
-            {
-                ggml_compute_forward_get_rows_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-
-    //static bool first = true;
-    //printf("ne0 = %d, ne1 = %d, ne2 = %d\n", dst->ne[0], dst->ne[1], dst->ne[2]);
-    //if (first) {
-    //    first = false;
-    //} else {
-    //    for (int k = 0; k < dst->ne[1]; ++k) {
-    //        for (int j = 0; j < dst->ne[0]/16; ++j) {
-    //            for (int i = 0; i < 16; ++i) {
-    //                printf("%8.4f ", ((float *) dst->data)[k*dst->ne[0] + j*16 + i]);
-    //            }
-    //            printf("\n");
-    //        }
-    //        printf("\n");
-    //    }
-    //    printf("\n");
-    //    exit(0);
-    //}
-}
-
-// ggml_compute_forward_get_rows_back
-
-static void ggml_compute_forward_get_rows_back_f32_f16(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(params->ith == 0);
-    GGML_ASSERT(ggml_is_contiguous(dst));
-
-    // ggml_compute_forward_dup_same_cont(params, opt0, dst);
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        if (params->ith != 0) {
-            return;
-        }
-        memset(dst->data, 0, ggml_nbytes(dst));
-    }
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int nc = src0->ne[0];
-    const int nr = ggml_nelements(src1);
-
-    GGML_ASSERT( dst->ne[0] == nc);
-    GGML_ASSERT(src0->nb[0] == sizeof(ggml_fp16_t));
-
-    for (int i = 0; i < nr; ++i) {
-        const int r = ((int32_t *) src1->data)[i];
-
-        for (int j = 0; j < nc; ++j) {
-            ggml_fp16_t v = ((ggml_fp16_t *) ((char *) src0->data + i*src0->nb[1]))[j];
-            ((float *) ((char *) dst->data + r*dst->nb[1]))[j] += GGML_FP16_TO_FP32(v);
-        }
-    }
-}
-
-static void ggml_compute_forward_get_rows_back_f32(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(params->ith == 0);
-    GGML_ASSERT(ggml_is_contiguous(dst));
-
-    // ggml_compute_forward_dup_same_cont(params, opt0, dst);
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        if (params->ith != 0) {
-            return;
-        }
-        memset(dst->data, 0, ggml_nbytes(dst));
-    }
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int nc = src0->ne[0];
-    const int nr = ggml_nelements(src1);
-
-    GGML_ASSERT( dst->ne[0] == nc);
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-
-    for (int i = 0; i < nr; ++i) {
-        const int r = ((int32_t *) src1->data)[i];
-
-        ggml_vec_add_f32(nc,
-                (float *) ((char *)  dst->data + r*dst->nb[1]),
-                (float *) ((char *)  dst->data + r*dst->nb[1]),
-                (float *) ((char *) src0->data + i*src0->nb[1]));
-    }
-}
-
-static void ggml_compute_forward_get_rows_back(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F16:
-            {
-                ggml_compute_forward_get_rows_back_f32_f16(params, dst);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_get_rows_back_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-
-    //static bool first = true;
-    //printf("ne0 = %d, ne1 = %d, ne2 = %d\n", dst->ne[0], dst->ne[1], dst->ne[2]);
-    //if (first) {
-    //    first = false;
-    //} else {
-    //    for (int k = 0; k < dst->ne[1]; ++k) {
-    //        for (int j = 0; j < dst->ne[0]/16; ++j) {
-    //            for (int i = 0; i < 16; ++i) {
-    //                printf("%8.4f ", ((float *) dst->data)[k*dst->ne[0] + j*16 + i]);
-    //            }
-    //            printf("\n");
-    //        }
-    //        printf("\n");
-    //    }
-    //    printf("\n");
-    //    exit(0);
-    //}
-}
-
-// ggml_compute_forward_diag
-
-static void ggml_compute_forward_diag_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(params->ith == 0);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // TODO: handle transposed/permuted matrices
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    GGML_ASSERT(ne00 == ne0);
-    GGML_ASSERT(ne00 == ne1);
-    GGML_ASSERT(ne01 == 1);
-    GGML_ASSERT(ne02 == ne2);
-    GGML_ASSERT(ne03 == ne3);
-
-    GGML_ASSERT(nb00 == sizeof(float));
-    GGML_ASSERT(nb0  == sizeof(float));
-
-    for (int i3 = 0; i3 < ne3; i3++) {
-        for (int i2 = 0; i2 < ne2; i2++) {
-            for (int i1 = 0; i1 < ne1; i1++) {
-                float * d = (float *)((char *)  dst->data + i3*nb3  + i2*nb2 + i1*nb1);
-                float * s = (float *)((char *) src0->data + i3*nb03 + i2*nb02);
-                for (int i0 = 0; i0 < i1; i0++) {
-                    d[i0] = 0;
-                }
-                d[i1] = s[i1];
-                for (int i0 = i1+1; i0 < ne0; i0++) {
-                    d[i0] = 0;
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_diag(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_diag_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_diag_mask_inf
-
-static void ggml_compute_forward_diag_mask_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst,
-        const float value) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int  n_past  = ((int32_t *) dst->op_params)[0];
-    const bool inplace = src0->data == dst->data;
-
-    GGML_ASSERT(n_past >= 0);
-
-    if (!inplace && (params->type == GGML_TASK_TYPE_INIT)) {
-        if (ith != 0) {
-            return;
-        }
-        // memcpy needs to be synchronized across threads to avoid race conditions.
-        // => do it in INIT phase
-        GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
-        GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0));
-        memcpy(
-            ((char *)  dst->data),
-            ((char *) src0->data),
-            ggml_nbytes(dst));
-    }
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // TODO: handle transposed/permuted matrices
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-    const int nr = src0->ne[1];
-    const int nz = n/nr;
-
-    GGML_ASSERT( dst->nb[0] == sizeof(float));
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-
-    for (int k = 0; k < nz; k++) {
-        for (int j = ith; j < nr; j += nth) {
-            for (int i = n_past; i < nc; i++) {
-                if (i > n_past + j) {
-                    *(float *)((char *) dst->data + k*dst->nb[2] + j*dst->nb[1] + i*dst->nb[0]) = value;
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_diag_mask_inf(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_diag_mask_f32(params, dst, -INFINITY);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-static void ggml_compute_forward_diag_mask_zero(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_diag_mask_f32(params, dst, 0);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_soft_max
-
-static void ggml_compute_forward_soft_max_f32(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    assert(ggml_is_contiguous(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    float scale    = 1.0f;
-    float max_bias = 0.0f;
-
-    memcpy(&scale,    (float *) dst->op_params + 0, sizeof(float));
-    memcpy(&max_bias, (float *) dst->op_params + 1, sizeof(float));
-
-    // TODO: handle transposed/permuted matrices
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    //const int64_t ne11 = src1 ? src1->ne[1] : 1;
-
-    // TODO: is this supposed to be ceil instead of floor?
-    //       https://huggingface.co/mosaicml/mpt-7b/blob/main/attention.py#L370
-    const uint32_t n_head      = ne02;
-    const uint32_t n_head_log2 = 1u << (uint32_t) floor(log2(n_head));
-
-    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
-    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
-
-    const int nc = src0->ne[0];
-    const int nr = ggml_nrows(src0);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    float * wp = (float *) params->wdata + (nc + CACHE_LINE_SIZE_F32) * ith;
-
-    const bool use_f16 = (src1 && src1->type == GGML_TYPE_F16);
-
-    for (int i1 = ir0; i1 < ir1; i1++) {
-        // ALiBi
-        const uint32_t h = (i1/ne01)%ne02; // head
-        const float slope = (max_bias > 0.0f) ? h < n_head_log2 ? powf(m0, h + 1) : powf(m1, 2*(h - n_head_log2) + 1) : 1.0f;
-
-        float * sp = (float *)((char *) src0->data + i1*src0->nb[1]);
-        float * dp = (float *)((char *)  dst->data +  i1*dst->nb[1]);
-
-        // broadcast the mask across rows
-        ggml_fp16_t * mp_f16 = src1 ? (ggml_fp16_t *)((char *) src1->data) + (i1%ne01)*ne00 : NULL;
-        float       * mp_f32 = src1 ? (float       *)((char *) src1->data) + (i1%ne01)*ne00 : NULL;
-
-        ggml_vec_cpy_f32  (nc, wp, sp);
-        ggml_vec_scale_f32(nc, wp, scale);
-        if (mp_f32) {
-            if (use_f16) {
-                for (int i = 0; i < nc; ++i) {
-                    wp[i] += slope*GGML_FP16_TO_FP32(mp_f16[i]);
-                }
-            } else {
-                for (int i = 0; i < nc; ++i) {
-                    wp[i] += slope*mp_f32[i];
-                }
-            }
-        }
-
-#ifndef NDEBUG
-        for (int i = 0; i < nc; ++i) {
-            //printf("p[%d] = %f\n", i, p[i]);
-            assert(!isnan(wp[i]));
-        }
-#endif
-
-        float max = -INFINITY;
-        ggml_vec_max_f32(nc, &max, wp);
-
-        ggml_float sum = ggml_vec_soft_max_f32(nc, dp, wp, max);
-        assert(sum > 0.0);
-
-        sum = 1.0/sum;
-        ggml_vec_scale_f32(nc, dp, sum);
-
-#ifndef NDEBUG
-        for (int i = 0; i < nc; ++i) {
-            assert(!isnan(dp[i]));
-            assert(!isinf(dp[i]));
-        }
-#endif
-    }
-}
-
-static void ggml_compute_forward_soft_max(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_soft_max_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_soft_max_back
-
-static void ggml_compute_forward_soft_max_back_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-    GGML_ASSERT(ggml_is_contiguous(src1));
-    GGML_ASSERT(ggml_is_contiguous(dst));
-    GGML_ASSERT(ggml_are_same_shape(src0, dst));
-    GGML_ASSERT(ggml_are_same_shape(src1, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // TODO: handle transposed/permuted matrices
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nc = src0->ne[0];
-    const int nr = ggml_nrows(src0);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int i1 = ir0; i1 < ir1; i1++) {
-        float *dy = (float *)((char *) src0->data + i1*src0->nb[1]);
-        float *y  = (float *)((char *) src1->data + i1*src1->nb[1]);
-        float *dx = (float *)((char *) dst->data  + i1*dst->nb[1]);
-
-#ifndef NDEBUG
-        for (int i = 0; i < nc; ++i) {
-            //printf("p[%d] = %f\n", i, p[i]);
-            assert(!isnan(dy[i]));
-            assert(!isnan(y[i]));
-        }
-#endif
-        // Jii = yi - yi*yi
-        // Jij = -yi*yj
-        // J = diag(y)-y.T*y
-        // dx = J * dy
-        // dxk = sum_i(Jki * dyi)
-        // dxk = sum_i(-yk*yi * dyi) - (-yk*yk)*dyk + (yk - yk*yk)*dyk
-        // dxk = sum_i(-yk*yi * dyi) + yk*yk*dyk + yk*dyk - yk*yk*dyk
-        // dxk = sum_i(-yk*yi * dyi) + yk*dyk
-        // dxk = -yk * sum_i(yi * dyi) + yk*dyk
-        // dxk = -yk * dot(y, dy) + yk*dyk
-        // dxk = yk * (- dot(y, dy) + dyk)
-        // dxk = yk * (dyk - dot(y, dy))
-        //
-        // post-order:
-        // dot_y_dy := dot(y, dy)
-        // dx := dy
-        // dx := dx - dot_y_dy
-        // dx := dx * y
-
-        // linear runtime, no additional memory
-        float dot_y_dy = 0;
-        ggml_vec_dot_f32 (nc, &dot_y_dy, 0, y, 0, dy, 0, 1);
-        ggml_vec_cpy_f32 (nc, dx, dy);
-        ggml_vec_acc1_f32(nc, dx, -dot_y_dy);
-        ggml_vec_mul_f32 (nc, dx, dx, y);
-
-#ifndef NDEBUG
-        for (int i = 0; i < nc; ++i) {
-            assert(!isnan(dx[i]));
-            assert(!isinf(dx[i]));
-        }
-#endif
-    }
-}
-
-static void ggml_compute_forward_soft_max_back(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_soft_max_back_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_clamp
-
-static void ggml_compute_forward_clamp_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    float min;
-    float max;
-    memcpy(&min, (float *) dst->op_params + 0, sizeof(float));
-    memcpy(&max, (float *) dst->op_params + 1, sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    const size_t nb00 = src0->nb[0];
-    const size_t nb01 = src0->nb[1];
-
-    const size_t nb0 = dst->nb[0];
-    const size_t nb1 = dst->nb[1];
-
-    GGML_ASSERT( nb0 == sizeof(float));
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    for (int j = ith; j < n; j += nth) {
-        float * dst_ptr  = (float *) ((char *)  dst->data + j*nb1);
-        float * src0_ptr = (float *) ((char *) src0->data + j*nb01);
-
-        for (int i = 0; i < nc; i++) {
-            dst_ptr[i] = MAX(MIN(src0_ptr[i], max), min);
-        }
-    }
-}
-
-static void ggml_compute_forward_clamp(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_clamp_f32(params, dst);
-            } break;
-        case GGML_TYPE_F16:
-        case GGML_TYPE_BF16:
-        case GGML_TYPE_Q4_0:
-        case GGML_TYPE_Q4_1:
-        case GGML_TYPE_Q5_0:
-        case GGML_TYPE_Q5_1:
-        case GGML_TYPE_Q8_0:
-        case GGML_TYPE_Q8_1:
-        case GGML_TYPE_Q2_K:
-        case GGML_TYPE_Q3_K:
-        case GGML_TYPE_Q4_K:
-        case GGML_TYPE_Q5_K:
-        case GGML_TYPE_Q6_K:
-        case GGML_TYPE_IQ2_XXS:
-        case GGML_TYPE_IQ2_XS:
-        case GGML_TYPE_IQ3_XXS:
-        case GGML_TYPE_IQ1_S:
-        case GGML_TYPE_IQ1_M:
-        case GGML_TYPE_IQ4_NL:
-        case GGML_TYPE_IQ4_XS:
-        case GGML_TYPE_IQ3_S:
-        case GGML_TYPE_IQ2_S:
-        case GGML_TYPE_Q8_K:
-        case GGML_TYPE_I8:
-        case GGML_TYPE_I16:
-        case GGML_TYPE_I32:
-        case GGML_TYPE_I64:
-        case GGML_TYPE_F64:
-        case GGML_TYPE_COUNT:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_rope
-
-static float rope_yarn_ramp(const float low, const float high, const int i0) {
-    const float y = (i0 / 2 - low) / MAX(0.001f, high - low);
-    return 1 - MIN(1, MAX(0, y));
-}
-
-// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn
-// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng.
-static void rope_yarn(
-    float theta_extrap, float freq_scale, float corr_dims[2], int64_t i0, float ext_factor, float mscale,
-    float * cos_theta, float * sin_theta) {
-    // Get n-d rotational scaling corrected for extrapolation
-    float theta_interp = freq_scale * theta_extrap;
-    float theta = theta_interp;
-    if (ext_factor != 0.0f) {
-        float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor;
-        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;
-
-        // Get n-d magnitude scaling corrected for interpolation
-        mscale *= 1.0f + 0.1f * logf(1.0f / freq_scale);
-    }
-    *cos_theta = cosf(theta) * mscale;
-    *sin_theta = sinf(theta) * mscale;
-}
-
-// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get
-// `corr_dim(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))`
-static float ggml_rope_yarn_corr_dim(int n_dims, int n_ctx_orig, float n_rot, float base) {
-    return n_dims * logf(n_ctx_orig / (n_rot * 2 * (float)M_PI)) / (2 * logf(base));
-}
-
-static void ggml_rope_cache_init(
-     float theta_base, float freq_scale, const float * freq_factors, float corr_dims[2], int64_t ne0, float ext_factor, float mscale,
-     float * cache, float sin_sign, float theta_scale) {
-    // ref: https://github.com/jquesnelle/yarn/blob/master/scaled_rope/LlamaYaRNScaledRotaryEmbedding.py
-    float theta = theta_base;
-    for (int64_t i0 = 0; i0 < ne0; i0 += 2) {
-        const float ff = freq_factors ? freq_factors[i0/2] : 1.0f;
-        rope_yarn(
-            theta/ff, freq_scale, corr_dims, i0, ext_factor, mscale, &cache[i0 + 0], &cache[i0 + 1]
-        );
-        cache[i0 + 1] *= sin_sign;
-
-        theta *= theta_scale;
-    }
-}
-
-GGML_CALL void ggml_rope_yarn_corr_dims(
-    int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, float dims[2]
-) {
-    // start and end correction dims
-    float start = floorf(ggml_rope_yarn_corr_dim(n_dims, n_ctx_orig, beta_fast, freq_base));
-    float end   =  ceilf(ggml_rope_yarn_corr_dim(n_dims, n_ctx_orig, beta_slow, freq_base));
-    dims[0] = MAX(0, start);
-    dims[1] = MIN(n_dims - 1, end);
-}
-
-static void ggml_compute_forward_rope_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst,
-        const bool forward) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-    const struct ggml_tensor * src2 = dst->src[2];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
-
-    //const int n_past     = ((int32_t *) dst->op_params)[0];
-    const int n_dims     = ((int32_t *) dst->op_params)[1];
-    const int mode       = ((int32_t *) dst->op_params)[2];
-    //const int n_ctx      = ((int32_t *) dst->op_params)[3];
-    const int n_ctx_orig = ((int32_t *) dst->op_params)[4];
-
-    memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
-    memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
-    memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
-    memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
-    memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
-    memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3);
-    //printf("n_past = %d, ne2 = %d\n", n_past, ne2);
-
-    GGML_ASSERT(nb00 == sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr = ggml_nrows(dst);
-
-    GGML_ASSERT(n_dims <= ne0);
-    GGML_ASSERT(n_dims % 2 == 0);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    // row index used to determine which thread to use
-    int ir = 0;
-
-    const float theta_scale = powf(freq_base, -2.0f/n_dims);
-
-    float corr_dims[2];
-    ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);
-
-    const bool is_neox = mode & 2;
-
-    const float * freq_factors = NULL;
-    if (src2 != NULL) {
-        GGML_ASSERT(src2->type == GGML_TYPE_F32);
-        GGML_ASSERT(src2->ne[0] >= n_dims / 2);
-        freq_factors = (const float *) src2->data;
-    }
-
-    // backward process uses inverse rotation by cos and sin.
-    // cos and sin build a rotation matrix, where the inverse is the transpose.
-    // this essentially just switches the sign of sin.
-    const float sin_sign = forward ? 1.0f : -1.0f;
-
-    const int32_t * pos = (const int32_t *) src1->data;
-
-    for (int64_t i3 = 0; i3 < ne3; i3++) {
-        for (int64_t i2 = 0; i2 < ne2; i2++) {
-            const int64_t p = pos[i2];
-
-            float * cache = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32)*ith;
-            ggml_rope_cache_init(p, freq_scale, freq_factors, corr_dims, ne0, ext_factor, attn_factor, cache, sin_sign, theta_scale);
-
-            for (int64_t i1 = 0; i1 < ne1; i1++) {
-                if (ir++ < ir0) continue;
-                if (ir   > ir1) break;
-
-                if (!is_neox) {
-                    for (int64_t i0 = 0; i0 < n_dims; i0 += 2) {
-                        const float cos_theta = cache[i0 + 0];
-                        const float sin_theta = cache[i0 + 1];
-
-                        const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
-                              float * dst_data  = (float *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
-
-                        const float x0 = src[0];
-                        const float x1 = src[1];
-
-                        dst_data[0] = x0*cos_theta - x1*sin_theta;
-                        dst_data[1] = x0*sin_theta + x1*cos_theta;
-                    }
-                } else {
-                    for (int64_t i0 = 0; i0 < n_dims; i0 += 2) {
-                        const int64_t ic = i0/2;
-
-                        const float cos_theta = cache[i0 + 0];
-                        const float sin_theta = cache[i0 + 1];
-
-                        const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00);
-                        float * dst_data  = (float *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + ic*nb0);
-
-                        const float x0 = src[0];
-                        const float x1 = src[n_dims/2];
-
-                        dst_data[0]        = x0*cos_theta - x1*sin_theta;
-                        dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta;
-                    }
-                }
-
-                for (int64_t i0 = n_dims; i0 < ne0; i0 += 2) {
-                    const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
-                    float * dst_data  = (float *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
-
-                    dst_data[0] = src[0];
-                    dst_data[1] = src[1];
-                }
-            }
-        }
-    }
-}
-
-// TODO: deduplicate f16/f32 code
-static void ggml_compute_forward_rope_f16(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst,
-        const bool forward) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-    const struct ggml_tensor * src2 = dst->src[2];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
-
-    //const int n_past     = ((int32_t *) dst->op_params)[0];
-    const int n_dims     = ((int32_t *) dst->op_params)[1];
-    const int mode       = ((int32_t *) dst->op_params)[2];
-    //const int n_ctx      = ((int32_t *) dst->op_params)[3];
-    const int n_ctx_orig = ((int32_t *) dst->op_params)[4];
-    memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
-    memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
-    memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
-    memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
-    memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
-    memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3);
-    //printf("n_past = %d, ne2 = %d\n", n_past, ne2);
-
-    GGML_ASSERT(nb0 == sizeof(ggml_fp16_t));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nr = ggml_nrows(dst);
-
-    GGML_ASSERT(n_dims <= ne0);
-    GGML_ASSERT(n_dims % 2 == 0);
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    // row index used to determine which thread to use
-    int ir = 0;
-
-    const float theta_scale = powf(freq_base, -2.0f/n_dims);
-
-    float corr_dims[2];
-    ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);
-
-    const bool is_neox = mode & 2;
-
-    const float * freq_factors = NULL;
-    if (src2 != NULL) {
-        GGML_ASSERT(src2->type == GGML_TYPE_F32);
-        GGML_ASSERT(src2->ne[0] >= n_dims / 2);
-        freq_factors = (const float *) src2->data;
-    }
-
-    // backward process uses inverse rotation by cos and sin.
-    // cos and sin build a rotation matrix, where the inverse is the transpose.
-    // this essentially just switches the sign of sin.
-    const float sin_sign = forward ? 1.0f : -1.0f;
-
-    const int32_t * pos = (const int32_t *) src1->data;
-
-    for (int64_t i3 = 0; i3 < ne3; i3++) {
-        for (int64_t i2 = 0; i2 < ne2; i2++) {
-            const int64_t p = pos[i2];
-
-            float * cache = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32)*ith;
-            ggml_rope_cache_init(p, freq_scale, freq_factors, corr_dims, ne0, ext_factor, attn_factor, cache, sin_sign, theta_scale);
-
-            for (int64_t i1 = 0; i1 < ne1; i1++) {
-                if (ir++ < ir0) continue;
-                if (ir   > ir1) break;
-
-                if (!is_neox) {
-                    for (int64_t i0 = 0; i0 < n_dims; i0 += 2) {
-                        const float cos_theta = cache[i0 + 0];
-                        const float sin_theta = cache[i0 + 1];
-
-                        const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
-                              ggml_fp16_t * dst_data  = (ggml_fp16_t *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
-
-                        const float x0 = GGML_FP16_TO_FP32(src[0]);
-                        const float x1 = GGML_FP16_TO_FP32(src[1]);
-
-                        dst_data[0] = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta);
-                        dst_data[1] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta);
-                    }
-                } else {
-                    for (int64_t i0 = 0; i0 < n_dims; i0 += 2) {
-                        const int64_t ic = i0/2;
-
-                        const float cos_theta = cache[i0 + 0];
-                        const float sin_theta = cache[i0 + 1];
-
-                        const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00);
-                        ggml_fp16_t * dst_data  = (ggml_fp16_t *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + ic*nb0);
-
-                        const float x0 = GGML_FP16_TO_FP32(src[0]);
-                        const float x1 = GGML_FP16_TO_FP32(src[n_dims/2]);
-
-                        dst_data[0]        = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta);
-                        dst_data[n_dims/2] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta);
-                    }
-                }
-
-                for (int64_t i0 = n_dims; i0 < ne0; i0 += 2) {
-                    const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
-                    ggml_fp16_t * dst_data  = (ggml_fp16_t *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
-
-                    dst_data[0] = src[0];
-                    dst_data[1] = src[1];
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_rope(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F16:
-            {
-                ggml_compute_forward_rope_f16(params, dst, true);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_rope_f32(params, dst, true);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_rope_back
-
-static void ggml_compute_forward_rope_back(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F16:
-            {
-                ggml_compute_forward_rope_f16(params, dst, false);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_rope_f32(params, dst, false);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_conv_transpose_1d
-
-static void ggml_compute_forward_conv_transpose_1d_f16_f32(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    int64_t t0 = ggml_perf_time_us();
-    UNUSED(t0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nk = ne00*ne01*ne02;
-
-    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
-    GGML_ASSERT(nb10 == sizeof(float));
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        if (ith != 0) {
-            return;
-        }
-        memset(params->wdata, 0, params->wsize);
-
-        // permute kernel data (src0) from (K x Cout x Cin) to (Cin x K x Cout)
-        {
-            ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0;
-
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                for (int64_t i01 = 0; i01 < ne01; i01++) {
-                    const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i02*nb02 + i01*nb01);
-                    ggml_fp16_t * dst_data = wdata + i01*ne00*ne02;
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        dst_data[i00*ne02 + i02] = src[i00];
-                    }
-                }
-            }
-        }
-
-        // permute source data (src1) from (L x Cin) to (Cin x L)
-        {
-            ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + nk;
-            ggml_fp16_t * dst_data = wdata;
-
-            for (int64_t i11 = 0; i11 < ne11; i11++) {
-                const float * const src = (float *)((char *) src1->data + i11*nb11);
-                for (int64_t i10 = 0; i10 < ne10; i10++) {
-                    dst_data[i10*ne11 + i11] = GGML_FP32_TO_FP16(src[i10]);
-                }
-            }
-        }
-
-        // need to zero dst since we are accumulating into it
-        memset(dst->data, 0, ggml_nbytes(dst));
-
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int32_t s0 = ((const int32_t*)(dst->op_params))[0];
-
-    // total rows in dst
-    const int nr = ne1;
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    ggml_fp16_t * const wdata     = (ggml_fp16_t *) params->wdata + 0;
-    ggml_fp16_t * const wdata_src = wdata + nk;
-
-    for (int i1 = ir0; i1 < ir1; i1++) {
-        float * dst_data = (float *)((char *) dst->data + i1*nb1);
-        ggml_fp16_t * wdata_kernel = wdata + i1*ne02*ne00;
-        for (int i10 = 0; i10 < ne10; i10++) {
-            const int i1n = i10*ne11;
-            for (int i00 = 0; i00 < ne00; i00++) {
-                float v = 0;
-                ggml_vec_dot_f16(ne02, &v, 0,
-                        (ggml_fp16_t *)    wdata_src + i1n, 0,
-                        (ggml_fp16_t *) wdata_kernel + i00*ne02, 0, 1);
-                dst_data[i10*s0 + i00] += v;
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_conv_transpose_1d_f32(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    int64_t t0 = ggml_perf_time_us();
-    UNUSED(t0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nk = ne00*ne01*ne02;
-
-    GGML_ASSERT(nb00 == sizeof(float));
-    GGML_ASSERT(nb10 == sizeof(float));
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        if (ith != 0) {
-            return;
-        }
-        memset(params->wdata, 0, params->wsize);
-
-        // prepare kernel data (src0) from (K x Cout x Cin) to (Cin x K x Cout)
-        {
-            float * const wdata = (float *) params->wdata + 0;
-
-            for (int64_t i02 = 0; i02 < ne02; i02++) {
-                for (int64_t i01 = 0; i01 < ne01; i01++) {
-                    const float * const src = (float *)((char *) src0->data + i02*nb02 + i01*nb01);
-                    float * dst_data = wdata + i01*ne00*ne02;
-                    for (int64_t i00 = 0; i00 < ne00; i00++) {
-                        dst_data[i00*ne02 + i02] = src[i00];
-                    }
-                }
-            }
-        }
-
-        // prepare source data (src1)
-        {
-            float * const wdata = (float *) params->wdata + nk;
-            float * dst_data = wdata;
-
-            for (int64_t i11 = 0; i11 < ne11; i11++) {
-                const float * const src = (float *)((char *) src1->data + i11*nb11);
-                for (int64_t i10 = 0; i10 < ne10; i10++) {
-                    dst_data[i10*ne11 + i11] = src[i10];
-                }
-            }
-        }
-
-        // need to zero dst since we are accumulating into it
-        memset(dst->data, 0, ggml_nbytes(dst));
-
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int32_t s0 = ((const int32_t*)(dst->op_params))[0];
-
-    // total rows in dst
-    const int nr = ne1;
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    float * const wdata     = (float *) params->wdata + 0;
-    float * const wdata_src = wdata + nk;
-
-    for (int i1 = ir0; i1 < ir1; i1++) {
-        float * dst_data = (float *)((char *) dst->data + i1*nb1);
-        float * wdata_kernel = wdata + i1*ne02*ne00;
-        for (int i10 = 0; i10 < ne10; i10++) {
-            const int i1n = i10*ne11;
-            for (int i00 = 0; i00 < ne00; i00++) {
-                float v = 0;
-                ggml_vec_dot_f32(ne02, &v, 0,
-                        wdata_src + i1n, 0,
-                        wdata_kernel + i00*ne02, 0, 1);
-                dst_data[i10*s0 + i00] += v;
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_conv_transpose_1d(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F16:
-            {
-                ggml_compute_forward_conv_transpose_1d_f16_f32(params, dst);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_conv_transpose_1d_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// src0: kernel [OC, IC, KH, KW]
-// src1: image [N, IC, IH, IW]
-// dst:  result [N, OH, OW, IC*KH*KW]
-static void ggml_compute_forward_im2col_f32(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    int64_t t0 = ggml_perf_time_us();
-    UNUSED(t0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS;
-
-    const int32_t s0 = ((const int32_t *)(dst->op_params))[0];
-    const int32_t s1 = ((const int32_t *)(dst->op_params))[1];
-    const int32_t p0 = ((const int32_t *)(dst->op_params))[2];
-    const int32_t p1 = ((const int32_t *)(dst->op_params))[3];
-    const int32_t d0 = ((const int32_t *)(dst->op_params))[4];
-    const int32_t d1 = ((const int32_t *)(dst->op_params))[5];
-    const bool is_2D = ((const int32_t *)(dst->op_params))[6] == 1;
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int64_t N  = is_2D ? ne13 : ne12;
-    const int64_t IC = is_2D ? ne12 : ne11;
-    const int64_t IH = is_2D ? ne11 : 1;
-    const int64_t IW = ne10;
-
-    const int64_t KH = is_2D ? ne01 : 1;
-    const int64_t KW = ne00;
-
-    const int64_t OH = is_2D ? ne2 : 1;
-    const int64_t OW = ne1;
-
-    int ofs0 = is_2D ? nb13 : nb12;
-    int ofs1 = is_2D ? nb12 : nb11;
-
-    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
-    GGML_ASSERT(nb10 == sizeof(float));
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW]
-    {
-        float * const wdata = (float *) dst->data;
-
-        for (int64_t in = 0; in < N; in++) {
-            for (int64_t ioh = 0; ioh < OH; ioh++) { // 1
-                for (int64_t iow = 0; iow < OW; iow++) {
-                    for (int64_t iic = ith; iic < IC; iic += nth) {
-
-                        // micro kernel
-                        float * dst_data = wdata + (in*OH*OW + ioh*OW + iow)*(IC*KH*KW); // [IC, KH, KW]
-                        const float * const src_data = (float *)((char *) src1->data + in*ofs0 + iic*ofs1); // [IH, IW]
-
-                        for (int64_t ikh = 0; ikh < KH; ikh++) {  // 1
-                            for (int64_t ikw = 0; ikw < KW; ikw++) {
-                                const int64_t iiw = iow*s0 + ikw*d0 - p0;
-                                const int64_t iih = ioh*s1 + ikh*d1 - p1;
-
-                                if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
-                                    dst_data[iic*(KH*KW) + ikh*KW + ikw] = 0;
-                                } else {
-                                    dst_data[iic*(KH*KW) + ikh*KW + ikw] = (src_data[iih*IW + iiw]);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-
-// src0: kernel [OC, IC, KH, KW]
-// src1: image [N, IC, IH, IW]
-// dst:  result [N, OH, OW, IC*KH*KW]
-static void ggml_compute_forward_im2col_f16(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F16);
-
-    int64_t t0 = ggml_perf_time_us();
-    UNUSED(t0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS;
-
-    const int32_t s0 = ((const int32_t *)(dst->op_params))[0];
-    const int32_t s1 = ((const int32_t *)(dst->op_params))[1];
-    const int32_t p0 = ((const int32_t *)(dst->op_params))[2];
-    const int32_t p1 = ((const int32_t *)(dst->op_params))[3];
-    const int32_t d0 = ((const int32_t *)(dst->op_params))[4];
-    const int32_t d1 = ((const int32_t *)(dst->op_params))[5];
-    const bool is_2D = ((const int32_t *)(dst->op_params))[6] == 1;
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int64_t N  = is_2D ? ne13 : ne12;
-    const int64_t IC = is_2D ? ne12 : ne11;
-    const int64_t IH = is_2D ? ne11 : 1;
-    const int64_t IW = ne10;
-
-    const int64_t KH = is_2D ? ne01 : 1;
-    const int64_t KW = ne00;
-
-    const int64_t OH = is_2D ? ne2 : 1;
-    const int64_t OW = ne1;
-
-    int ofs0 = is_2D ? nb13 : nb12;
-    int ofs1 = is_2D ? nb12 : nb11;
-
-    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
-    GGML_ASSERT(nb10 == sizeof(float));
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW]
-    {
-        ggml_fp16_t * const wdata = (ggml_fp16_t *) dst->data;
-
-        for (int64_t in = 0; in < N; in++) {
-            for (int64_t ioh = 0; ioh < OH; ioh++) { // 1
-                for (int64_t iow = 0; iow < OW; iow++) {
-                    for (int64_t iic = ith; iic < IC; iic += nth) {
-
-                        // micro kernel
-                        ggml_fp16_t * dst_data = wdata + (in*OH*OW + ioh*OW + iow)*(IC*KH*KW); // [IC, KH, KW]
-                        const float * const src_data = (float *)((char *) src1->data + in*ofs0 + iic*ofs1); // [IH, IW]
-
-                        for (int64_t ikh = 0; ikh < KH; ikh++) {  // 1
-                            for (int64_t ikw = 0; ikw < KW; ikw++) {
-                                const int64_t iiw = iow*s0 + ikw*d0 - p0;
-                                const int64_t iih = ioh*s1 + ikh*d1 - p1;
-
-                                if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
-                                    dst_data[iic*(KH*KW) + ikh*KW + ikw] = 0;
-                                } else {
-                                    dst_data[iic*(KH*KW) + ikh*KW + ikw] = GGML_FP32_TO_FP16(src_data[iih*IW + iiw]);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_im2col(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-    switch (dst->type) {
-        case GGML_TYPE_F16:
-            {
-                ggml_compute_forward_im2col_f16(params, dst);
-            } break;
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_im2col_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-
-// ggml_compute_forward_conv_transpose_2d
-
-static void ggml_compute_forward_conv_transpose_2d(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F16);
-    GGML_ASSERT(src1->type == GGML_TYPE_F32);
-    GGML_ASSERT( dst->type == GGML_TYPE_F32);
-
-    int64_t t0 = ggml_perf_time_us();
-    UNUSED(t0);
-
-    GGML_TENSOR_BINARY_OP_LOCALS
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nk = ne00*ne01*ne02*ne03;
-
-    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
-    GGML_ASSERT(nb10 == sizeof(float));
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        if (ith != 0) {
-            return;
-        }
-        memset(params->wdata, 0, params->wsize);
-
-        // permute kernel data (src0) from (Kw x Kh x Cout x Cin) to (Cin x Kw x Kh x Cout)
-        {
-            ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0;
-
-            for (int64_t i03 = 0; i03 < ne03; i03++) {
-                for (int64_t i02 = 0; i02 < ne02; i02++) {
-                    const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i03*nb03 + i02*nb02);
-                    ggml_fp16_t * dst_data = wdata + i02*ne01*ne00*ne03;
-                    for (int64_t i01 = 0; i01 < ne01; i01++) {
-                        for (int64_t i00 = 0; i00 < ne00; i00++) {
-                            dst_data[i01*ne00*ne03 + i00*ne03 + i03] = src[i01 * ne00 + i00];
-                        }
-                    }
-                }
-            }
-        }
-
-        // permute source data (src1) from (Sw x Sh x Cin) to (Cin x Sw x Sh)
-        {
-            ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + nk;
-            for (int i12 = 0; i12 < ne12; i12++) {
-                for (int i11 = 0; i11 < ne11; i11++) {
-                    const float * const src = (float *)((char *) src1->data + i12*nb12 + i11*nb11);
-                    ggml_fp16_t * dst_data = wdata + i11*ne10*ne12;
-                    for (int i10 = 0; i10 < ne10; i10++) {
-                        dst_data[i10*ne12 + i12] = GGML_FP32_TO_FP16(src[i10]);
-                    }
-                }
-            }
-        }
-
-        memset(dst->data, 0, ggml_nbytes(dst));
-
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int32_t stride = ggml_get_op_params_i32(dst, 0);
-
-    // total patches in dst
-    const int np = ne2;
-
-    // patches per thread
-    const int dp = (np + nth - 1)/nth;
-
-    // patch range for this thread
-    const int ip0 = dp*ith;
-    const int ip1 = MIN(ip0 + dp, np);
-
-    ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0;
-    ggml_fp16_t * const wdata_src = wdata + nk;
-
-    for (int i2 = ip0; i2 < ip1; i2++) { // Cout
-        float * dst_data = (float *)((char *) dst->data + i2*nb2);
-        ggml_fp16_t * wdata_kernel = wdata + i2*ne01*ne00*ne03;
-        for (int i11 = 0; i11 < ne11; i11++) {
-            for (int i10 = 0; i10 < ne10; i10++) {
-                const int i1n = i11*ne10*ne12 + i10*ne12;
-                for (int i01 = 0; i01 < ne01; i01++) {
-                    for (int i00 = 0; i00 < ne00; i00++) {
-                        float v = 0;
-                        ggml_vec_dot_f16(ne03, &v, 0,
-                                wdata_src + i1n, 0,
-                                wdata_kernel + i01*ne00*ne03 + i00*ne03, 0, 1);
-                        dst_data[(i11*stride + i01)*ne0 + i10*stride + i00] += v;
-                    }
-                }
-            }
-        }
-    }
-}
-
-// ggml_compute_forward_pool_1d_sk_p0
-
-static void ggml_compute_forward_pool_1d_sk_p0(
-        const struct ggml_compute_params * params,
-        const enum ggml_op_pool op,
-        const int k,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src = dst->src[0];
-
-    assert(src->type == GGML_TYPE_F32);
-    assert(params->ith == 0);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const char * cdata = (const char *)src->data;
-    const char * const data_end = cdata + ggml_nbytes(src);
-    float * drow = (float *)dst->data;
-
-    const int64_t rs = dst->ne[0];
-
-    while (cdata < data_end) {
-        const float * const srow = (const float *)cdata;
-
-        int j = 0;
-
-        for (int64_t i = 0; i < rs; ++i) {
-            switch (op) {
-                case GGML_OP_POOL_AVG:   drow[i] = 0;        break;
-                case GGML_OP_POOL_MAX:   drow[i] = -FLT_MAX; break;
-                case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break;
-            }
-            for (int ki = 0; ki < k; ++ki) {
-                switch (op) {
-                    case GGML_OP_POOL_AVG:                          drow[i] += srow[j]; break;
-                    case GGML_OP_POOL_MAX:   if (srow[j] > drow[i]) drow[i]  = srow[j]; break;
-                    case GGML_OP_POOL_COUNT:                        GGML_ASSERT(false); break;
-                }
-                ++j;
-            }
-            switch (op) {
-                case GGML_OP_POOL_AVG:         drow[i] /= k; break;
-                case GGML_OP_POOL_MAX:                       break;
-                case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break;
-            }
-        }
-
-        cdata += src->nb[1];
-        drow  += rs;
-    }
-}
-
-// ggml_compute_forward_pool_1d
-
-static void ggml_compute_forward_pool_1d(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const int32_t * opts = (const int32_t *)dst->op_params;
-    enum ggml_op_pool op = opts[0];
-    const int k0 = opts[1];
-    const int s0 = opts[2];
-    const int p0 = opts[3];
-    GGML_ASSERT(p0 == 0); // padding not supported
-    GGML_ASSERT(k0 == s0); // only s = k supported
-
-    ggml_compute_forward_pool_1d_sk_p0(params, op, k0, dst);
-}
-
-// ggml_compute_forward_pool_2d
-
-static void ggml_compute_forward_pool_2d(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src = dst->src[0];
-
-    GGML_ASSERT(src->type == GGML_TYPE_F32);
-    GGML_ASSERT(params->ith == 0);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int32_t * opts = (const int32_t *)dst->op_params;
-    enum ggml_op_pool op = opts[0];
-    const int k0 = opts[1];
-    const int k1 = opts[2];
-    const int s0 = opts[3];
-    const int s1 = opts[4];
-    const int p0 = opts[5];
-    const int p1 = opts[6];
-    const char * cdata = (const char*)src->data;
-    const char * const data_end = cdata + ggml_nbytes(src);
-
-    const int64_t px = dst->ne[0];
-    const int64_t py = dst->ne[1];
-    const int64_t pa = px * py;
-
-    float * dplane = (float *)dst->data;
-
-    const int ka = k0 * k1;
-    const int offset0 = -p0;
-    const int offset1 = -p1;
-
-    while (cdata < data_end) {
-        for (int oy = 0; oy < py; ++oy) {
-            float * const drow = dplane + oy * px;
-            for (int ox = 0; ox < px; ++ox) {
-                float * const out =  drow + ox;
-                switch (op) {
-                    case GGML_OP_POOL_AVG:     *out = 0;        break;
-                    case GGML_OP_POOL_MAX:     *out = -FLT_MAX; break;
-                    case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break;
-                }
-
-                const int ix = offset0 + ox * s0;
-                const int iy = offset1 + oy * s1;
-
-                for (int ky = 0; ky < k1; ++ky) {
-                    if (iy + ky < 0 || iy + ky >= src->ne[1]) continue;
-                    const float * const srow = (const float *)(cdata + src->nb[1] * (iy + ky));
-                    for (int kx = 0; kx < k0; ++kx) {
-                        int j = ix + kx;
-                        if (j < 0 || j >= src->ne[0]) continue;
-                        switch (op) {
-                            case GGML_OP_POOL_AVG:                     *out += srow[j]; break;
-                            case GGML_OP_POOL_MAX: if (srow[j] > *out) *out  = srow[j]; break;
-                            case GGML_OP_POOL_COUNT:                GGML_ASSERT(false); break;
-                        }
-                    }
-                }
-                switch (op) {
-                    case GGML_OP_POOL_AVG:           *out /= ka; break;
-                    case GGML_OP_POOL_MAX:                       break;
-                    case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break;
-                }
-            }
-        }
-
-        cdata  += src->nb[2];
-        dplane += pa;
-    }
-}
-
-// ggml_compute_forward_upscale
-
-static void ggml_compute_forward_upscale_f32(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_ASSERT(src0->type == GGML_TYPE_F32);
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    const float sf0 = (float)ne0/src0->ne[0];
-    const float sf1 = (float)ne1/src0->ne[1];
-    const float sf2 = (float)ne2/src0->ne[2];
-    const float sf3 = (float)ne3/src0->ne[3];
-
-    // TODO: optimize
-
-    for (int64_t i3 = 0; i3 < ne3; i3++) {
-        const int64_t i03 = i3 / sf3;
-        for (int64_t i2 = ith; i2 < ne2; i2 += nth) {
-            const int64_t i02 = i2 / sf2;
-            for (int64_t i1 = 0; i1 < ne1; i1++) {
-                const int64_t i01 = i1 / sf1;
-                for (int64_t i0 = 0; i0 < ne0; i0++) {
-                    const int64_t i00 = i0 / sf0;
-
-                    const float * x = (float *)((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
-                          float * y = (float *)((char *)  dst->data +  i0*nb0  +  i1*nb1  +  i2*nb2  +  i3*nb3);
-
-                    *y = *x;
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_upscale(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_upscale_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-
-// ggml_compute_forward_pad
-
-static void ggml_compute_forward_pad_f32(
-    const struct ggml_compute_params * params,
-          struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-    GGML_ASSERT( dst->nb[0] == sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    float * dst_ptr = (float *) dst->data;
-
-    // TODO: optimize
-
-    for (int64_t i2 = 0; i2 < ne2; ++i2) {
-        for (int64_t i1 = ith; i1 < ne1; i1 += nth) {
-            for (int64_t i0 = 0; i0 < ne0; ++i0) {
-                for (int64_t i3 = 0; i3 < ne3; ++i3) {
-                    const int64_t dst_idx = i3*(ne0*ne1*ne2) + i2*(ne0*ne1) + i1*ne0 + i0;
-
-                    const float * src_ptr = (const float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
-
-                    if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) {
-                        dst_ptr[dst_idx] = *src_ptr;
-                    } else {
-                        dst_ptr[dst_idx] = 0;
-                    }
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_pad(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_pad_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-
-// ggml_compute_forward_arange
-
-static void ggml_compute_forward_arange_f32(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_ASSERT(dst->nb[0] == sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const float start = ggml_get_op_params_f32(dst, 0);
-    const float stop  = ggml_get_op_params_f32(dst, 1);
-    const float step  = ggml_get_op_params_f32(dst, 2);
-
-    const int64_t steps = (int64_t) ceilf((stop - start) / step);
-
-    GGML_ASSERT(ggml_nelements(dst) == steps);
-
-    for (int64_t i = ith; i < steps; i+= nth) {
-        float value = start + step * i;
-        ((float *)dst->data)[i] = value;
-    }
-}
-
-static void ggml_compute_forward_arange(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-    switch (dst->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_arange_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-static void ggml_compute_forward_timestep_embedding_f32(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    const int dim = ggml_get_op_params_i32(dst, 0);
-    const int max_period = ggml_get_op_params_i32(dst, 1);
-
-    int half = dim / 2;
-
-    for (int64_t i = 0; i < ne00; i++) {
-        float * embed_data = (float *)((char *)  dst->data +  i*nb1);
-        for (int64_t j = ith; j < half; j += nth) {
-            float timestep = ((float *)src0->data)[i];
-            float freq = (float)expf(-logf(max_period) * j / half);
-            float arg = timestep * freq;
-            embed_data[j] = cosf(arg);
-            embed_data[j + half] = sinf(arg);
-        }
-        if (dim % 2 != 0 && ith == 0) {
-            embed_data[dim] = 0.f;
-        }
-    }
-}
-
-static void ggml_compute_forward_timestep_embedding(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_timestep_embedding_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_argsort
-
-static void ggml_compute_forward_argsort_f32(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    GGML_ASSERT(nb0 == sizeof(float));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int64_t nr = ggml_nrows(src0);
-
-    enum ggml_sort_order order = (enum ggml_sort_order) ggml_get_op_params_i32(dst, 0);
-
-    for (int64_t i = ith; i < nr; i += nth) {
-        int32_t * dst_data = (int32_t *)((char *) dst->data + i*nb1);
-        const float * src_data = (float *)((char *) src0->data + i*nb01);
-
-        for (int64_t j = 0; j < ne0; j++) {
-            dst_data[j] = j;
-        }
-
-        // C doesn't have a functional sort, so we do a bubble sort instead
-        for (int64_t j = 0; j < ne0; j++) {
-            for (int64_t k = j + 1; k < ne0; k++) {
-                if ((order == GGML_SORT_ORDER_ASC  && src_data[dst_data[j]] > src_data[dst_data[k]]) ||
-                    (order == GGML_SORT_ORDER_DESC && src_data[dst_data[j]] < src_data[dst_data[k]])) {
-                    int32_t tmp = dst_data[j];
-                    dst_data[j] = dst_data[k];
-                    dst_data[k] = tmp;
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_argsort(
-    const struct ggml_compute_params * params,
-    struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_argsort_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_flash_attn_ext
-
-static void ggml_compute_forward_flash_attn_ext_f16(
-        const struct ggml_compute_params * params,
-        const struct ggml_tensor * q,
-        const struct ggml_tensor * k,
-        const struct ggml_tensor * v,
-        const struct ggml_tensor * mask,
-        struct ggml_tensor * dst) {
-    int64_t t0 = ggml_perf_time_us();
-    UNUSED(t0);
-
-    GGML_TENSOR_LOCALS(int64_t, neq, q,   ne)
-    GGML_TENSOR_LOCALS(size_t,  nbq, q,   nb)
-    GGML_TENSOR_LOCALS(int64_t, nek, k,   ne)
-    GGML_TENSOR_LOCALS(size_t,  nbk, k,   nb)
-    GGML_TENSOR_LOCALS(int64_t, nev, v,   ne)
-    GGML_TENSOR_LOCALS(size_t,  nbv, v,   nb)
-    GGML_TENSOR_LOCALS(int64_t, ne,  dst, ne)
-    GGML_TENSOR_LOCALS(size_t,  nb,  dst, nb)
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int64_t D = neq0;
-    const int64_t N = neq1;
-
-    GGML_ASSERT(ne0 == D);
-    GGML_ASSERT(ne2 == N);
-
-    // input tensor rows must be contiguous
-    GGML_ASSERT(nbq0 == ggml_type_size(q->type));
-    GGML_ASSERT(nbk0 == ggml_type_size(k->type));
-    GGML_ASSERT(nbv0 == ggml_type_size(v->type));
-
-    GGML_ASSERT(neq0 == D);
-    GGML_ASSERT(nek0 == D);
-    GGML_ASSERT(nev0 == D);
-
-    GGML_ASSERT(neq1 == N);
-    GGML_ASSERT(nev0 == D);
-
-    // dst cannot be transposed or permuted
-    GGML_ASSERT(nb0 == sizeof(float));
-    GGML_ASSERT(nb0 <= nb1);
-    GGML_ASSERT(nb1 <= nb2);
-    GGML_ASSERT(nb2 <= nb3);
-
-    // broadcast factors
-    const int64_t rk2 = neq2/nek2;
-    const int64_t rk3 = neq3/nek3;
-
-    const int64_t rv2 = neq2/nev2;
-    const int64_t rv3 = neq3/nev3;
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // parallelize by q rows using ggml_vec_dot_f32
-
-    // total rows in q
-    const int nr = neq1*neq2*neq3;
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    float scale    = 1.0f;
-    float max_bias = 0.0f;
-
-    memcpy(&scale,    (float *) dst->op_params + 0, sizeof(float));
-    memcpy(&max_bias, (float *) dst->op_params + 1, sizeof(float));
-
-    const uint32_t n_head      = neq2;
-    const uint32_t n_head_log2 = 1u << (uint32_t) floor(log2(n_head));
-
-    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
-    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
-
-    enum ggml_type    const k_vec_dot_type = type_traits[k->type].vec_dot_type;
-    ggml_from_float_t const q_to_vec_dot   = type_traits[k_vec_dot_type].from_float;
-    ggml_vec_dot_t    const kq_vec_dot     = type_traits[k->type].vec_dot;
-    ggml_to_float_t   const v_to_float     = type_traits[v->type].to_float;
-
-    // loop over n_batch and n_head
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // q indices
-        const int iq3 = ir/(neq2*neq1);
-        const int iq2 = (ir - iq3*neq2*neq1)/neq1;
-        const int iq1 = (ir - iq3*neq2*neq1 - iq2*neq1);
-
-        const uint32_t h = iq2; // head index
-        const float slope = (max_bias > 0.0f) ? h < n_head_log2 ? powf(m0, h + 1) : powf(m1, 2*(h - n_head_log2) + 1) : 1.0f;
-
-        float S = 0.0f;      // sum
-        float M = -INFINITY; // maximum KQ value
-
-        float       * VKQ32 = (float       *) params->wdata + ith*(3*D + CACHE_LINE_SIZE_F32); // FP32 VKQ accumulator
-        float       * V32   =                 (VKQ32 + 1*D); // (temporary) FP32 V buffer
-        ggml_fp16_t * VKQ16 = (ggml_fp16_t *) (VKQ32 + 1*D); // (temporary) FP16 VKQ accumulator
-        ggml_fp16_t * Q_q   = (ggml_fp16_t *) (VKQ32 + 2*D); // (temporary) buffer for Q converted to quantized/FP16
-
-        if (v->type == GGML_TYPE_F16) {
-            memset(VKQ16, 0, D*sizeof(ggml_fp16_t));
-        } else {
-            memset(VKQ32, 0, D*sizeof(float));
-        }
-
-        const ggml_fp16_t * mp = mask ? (ggml_fp16_t *)((char *) mask->data + iq1*mask->nb[1]) : NULL;
-
-        // k indices
-        const int ik3 = iq3 / rk3;
-        const int ik2 = iq2 / rk2;
-
-        // v indices
-        const int iv3 = iq3 / rv3;
-        const int iv2 = iq2 / rv2;
-
-        const float * pq = (const float *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3));
-        q_to_vec_dot(pq, Q_q, D);
-
-        // online softmax / attention
-        // loop over n_kv and n_head_kv
-        // ref: https://arxiv.org/pdf/2112.05682.pdf
-        for (int64_t ic = 0; ic < nek1; ++ic) {
-            const float mv = mp ? slope*GGML_FP16_TO_FP32(mp[ic]) : 0.0f;
-            if (mv == -INFINITY) {
-                continue;
-            }
-
-            float s; // KQ value
-
-            const char * k_data = (const char *) k->data + ( ic*nbk1 + ik2*nbk2 + ik3*nbk3);
-            kq_vec_dot(D, &s, 0, k_data, 0, Q_q, 0, 1);
-
-            s = s*scale + mv; // scale KQ value and apply mask
-
-            const float Mold = M;
-
-            float ms = 1.0f; // upon new higher max val, scale VKQ and KQ sum with this value
-            float vs = 1.0f; // post-softmax KQ value, expf(s - M)
-
-            const char * v_data = ((const char *) v->data + (ic*nbv1 + iv2*nbv2 + iv3*nbv3));
-
-            if (v->type== GGML_TYPE_F16) {
-                if (s > M) {
-                    // s is new maximum, ms < 1.0f, vs == expf(s - s) == 1.0f
-                    M = s;
-                    ms = expf(Mold - M);
-
-                    // V = V*expf(Mold - M)
-                    ggml_vec_scale_f16(D, VKQ16, ms);
-                } else {
-                    // no new maximum, ms == 1.0f, vs != 1.0f
-                    vs = expf(s - M);
-                }
-
-                // V += v*expf(s - M)
-                ggml_vec_mad_f16(D, VKQ16, (const ggml_fp16_t *) v_data, vs);
-            } else {
-                if (s > M) {
-                    // s is new maximum, ms < 1.0f, vs == expf(s - s) == 1.0f
-                    M = s;
-                    ms = expf(Mold - M);
-
-                    // V = V*expf(Mold - M)
-                    ggml_vec_scale_f32(D, VKQ32, ms);
-                } else {
-                    // no new maximum, ms == 1.0f, vs != 1.0f
-                    vs = expf(s - M);
-                }
-
-                v_to_float(v_data, V32, D);
-
-                // V += v*expf(s - M)
-                ggml_vec_mad_f32(D, VKQ32, V32, vs);
-            }
-
-            S = S*ms + vs; // scale and increment sum with partial sum
-        }
-
-        if (v->type == GGML_TYPE_F16) {
-            for (int64_t d = 0; d < D; ++d) {
-                VKQ32[d] = GGML_FP16_TO_FP32(VKQ16[d]);
-            }
-        }
-
-        // V /= S
-        const float S_inv = 1.0f/S;
-        ggml_vec_scale_f32(D, VKQ32, S_inv);
-
-        // dst indices
-        const int i1 = iq1;
-        const int i2 = iq2;
-        const int i3 = iq3;
-
-        // original
-        //memcpy((char *) dst->data + (i1*nb1 + i2*nb2 + i3*nb3), V, nev0*sizeof(float));
-
-        // permute(0, 2, 1, 3)
-        memcpy((char *) dst->data + (i3*ne2*ne1 + i2 + i1*ne1)*nb1, VKQ32, nb1);
-    }
-}
-
-static void ggml_compute_forward_flash_attn_ext(
-        const struct ggml_compute_params * params,
-        const struct ggml_tensor * q,
-        const struct ggml_tensor * k,
-        const struct ggml_tensor * v,
-        const struct ggml_tensor * mask,
-        struct ggml_tensor * dst) {
-    switch (dst->op_params[2]) {
-        case GGML_PREC_DEFAULT:
-        case GGML_PREC_F32:
-            {
-                // uses F32 accumulators
-                ggml_compute_forward_flash_attn_ext_f16(params, q, k, v, mask, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_flash_attn_back
-
-static void ggml_compute_forward_flash_attn_back_f32(
-        const struct ggml_compute_params * params,
-        const bool masked,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * q = dst->src[0];
-    const struct ggml_tensor * k = dst->src[1];
-    const struct ggml_tensor * v = dst->src[2];
-    const struct ggml_tensor * d = dst->src[3];
-
-    int64_t t0 = ggml_perf_time_us();
-    UNUSED(t0);
-
-    GGML_TENSOR_LOCALS(int64_t, neq, q,   ne)
-    GGML_TENSOR_LOCALS(size_t,  nbq, q,   nb)
-    GGML_TENSOR_LOCALS(int64_t, nek, k,   ne)
-    GGML_TENSOR_LOCALS(size_t,  nbk, k,   nb)
-    GGML_TENSOR_LOCALS(int64_t, nev, v,   ne)
-    GGML_TENSOR_LOCALS(size_t,  nbv, v,   nb)
-    GGML_TENSOR_LOCALS(int64_t, ned, d,   ne)
-    GGML_TENSOR_LOCALS(size_t,  nbd, d,   nb)
-    GGML_TENSOR_LOCALS(int64_t, ne,  dst, ne)
-    GGML_TENSOR_LOCALS(size_t,  nb,  dst, nb)
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int64_t D = neq0;
-    const int64_t N = neq1;
-    const int64_t P = nek1 - N;
-    const int64_t M = P + N;
-
-    const int Mup  = ggml_up(M, GGML_SOFT_MAX_UNROLL);
-    const int mxDM = MAX(D, Mup);
-
-    // GGML_ASSERT(ne0 == D);
-    // GGML_ASSERT(ne1 == N);
-    GGML_ASSERT(P >= 0);
-
-    GGML_ASSERT(nbq0 == sizeof(float));
-    GGML_ASSERT(nbk0 == sizeof(float));
-    GGML_ASSERT(nbv0 == sizeof(float));
-
-    GGML_ASSERT(neq0 == D);
-    GGML_ASSERT(nek0 == D);
-    GGML_ASSERT(nev1 == D);
-    GGML_ASSERT(ned0 == D);
-
-    GGML_ASSERT(neq1 == N);
-    GGML_ASSERT(nek1 == N + P);
-    GGML_ASSERT(nev1 == D);
-    GGML_ASSERT(ned1 == N);
-
-    // dst cannot be transposed or permuted
-    GGML_ASSERT(nb0 == sizeof(float));
-    GGML_ASSERT(nb0 <= nb1);
-    GGML_ASSERT(nb1 <= nb2);
-    GGML_ASSERT(nb2 <= nb3);
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        if (ith == 0) {
-            memset(dst->data, 0, nb0*ne0*ne1*ne2*ne3);
-        }
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int64_t elem_q = ggml_nelements(q);
-    const int64_t elem_k = ggml_nelements(k);
-
-    enum ggml_type result_type = dst->type;
-    GGML_ASSERT(ggml_blck_size(result_type) == 1);
-    const size_t tsize = ggml_type_size(result_type);
-
-    const size_t offs_q = 0;
-    const size_t offs_k = offs_q + GGML_PAD(elem_q * tsize, GGML_MEM_ALIGN);
-    const size_t offs_v = offs_k + GGML_PAD(elem_k * tsize, GGML_MEM_ALIGN);
-
-    void * grad_q = (char *) dst->data;
-    void * grad_k = (char *) dst->data + offs_k;
-    void * grad_v = (char *) dst->data + offs_v;
-
-    const size_t nbgq1 = nb0*neq0;
-    const size_t nbgq2 = nb0*neq0*neq1;
-    const size_t nbgq3 = nb0*neq0*neq1*neq2;
-
-    const size_t nbgk1 = nb0*nek0;
-    const size_t nbgk2 = nb0*nek0*nek1;
-    const size_t nbgk3 = nb0*nek0*nek1*neq2;
-
-    const size_t nbgv1 = nb0*nev0;
-    const size_t nbgv2 = nb0*nev0*nev1;
-    const size_t nbgv3 = nb0*nev0*nev1*neq2;
-
-    // parallelize by k rows using ggml_vec_dot_f32
-
-    // total rows in k
-    const int nr = nek2*nek3;
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    const float scale = 1.0f/sqrtf(D);
-
-    //printf("P=%d N=%d D=%d ir0=%d ir1=%d scale = %f\n", P, N, D, ir0, ir1, scale);
-
-    // how often k2 (and v2) is repeated in q2
-    int nrep = neq2/nek2;
-
-    for (int ir = ir0; ir < ir1; ++ir) {
-        // q indices
-        const int ik3 = ir/(nek2);
-        const int ik2 = ir - ik3*nek2;
-
-        const int iq3 = ik3;
-        const int id3 = ik3;
-        const int iv3 = ik3;
-        const int iv2 = ik2;
-
-        for (int irep = 0; irep < nrep; ++irep) {
-            const int iq2 = ik2 + irep*nek2;
-            const int id2 = iq2;
-
-            // (ik2 + irep*nek2) % nek2 == ik2
-            for (int iq1 = 0; iq1 < neq1; ++iq1) {
-                const int id1 = iq1;
-
-                // not sure about CACHE_LINE_SIZE_F32..
-                // - maybe it must not be multiplied by 2 and excluded from .. in SM 1*(..) offset?
-                float * S  = (float *) params->wdata + ith*2*(mxDM + CACHE_LINE_SIZE_F32) + 0*(mxDM+CACHE_LINE_SIZE_F32);
-                float * SM = (float *) params->wdata + ith*2*(mxDM + CACHE_LINE_SIZE_F32) + 1*(mxDM+CACHE_LINE_SIZE_F32);
-
-                for (int i = M; i < Mup; ++i) {
-                    S[i] = -INFINITY;
-                }
-
-                const int64_t masked_begin = masked ? (P + iq1 + 1) : M;
-                for (int64_t ic = 0; ic < masked_begin; ++ic) {
-                    // k indices
-                    const int ik1 = ic;
-
-                    // S indices
-                    const int i1 = ik1;
-
-                    ggml_vec_dot_f32(neq0,
-                            S + i1, 0,
-                            (float *) ((char *) k->data + (ik1*nbk1 + ik2*nbk2 + ik3*nbk3)), 0,
-                            (float *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3)), 0, 1);
-                }
-
-                // scale
-                ggml_vec_scale_f32(masked_begin, S, scale);
-
-                for (int64_t i = masked_begin; i < M; i++) {
-                    S[i] = -INFINITY;
-                }
-
-                // softmax
-                // exclude known -INF S[..] values from max and loop
-                // dont forget to set their SM values to zero
-                {
-                    float max = -INFINITY;
-                    ggml_vec_max_f32(masked_begin, &max, S);
-
-                    ggml_float sum = 0.0;
-                    {
-#ifdef GGML_SOFT_MAX_ACCELERATE
-                        max = -max;
-                        vDSP_vsadd(SM, 1, &max, SM, 1, Mup);
-                        vvexpf(SM, SM, &Mup);
-                        ggml_vec_sum_f32(Mup, &sum, SM);
-#else
-                        sum = ggml_vec_soft_max_f32(Mup, SM, S, max);
-#endif
-                    }
-
-                    assert(sum > 0.0);
-
-                    sum = 1.0/sum;
-                    ggml_vec_scale_f32(masked_begin, SM, sum);
-
-                }
-
-                // step-by-step explanation
-                {
-                    // forward-process                    shape      grads from backward process
-                    // parallel_for ik2,ik3:
-                    //  for irep:
-                    //   iq2 = ik2 + irep*nek2
-                    //   k[:D,:M,:,:]                     [D,M,:,:]  grad[k][:D,:M,ik2,ik3]  += grad[kcur]
-                    //   q[:D,:N,:,:]                     [D,N,:,:]  grad[q][:D,iq1,iq2,iq3] += grad[qcur]
-                    //   v[:M,:D,:,:]                     [M,D,:,:]  grad[v][:M,:D,iv2,iv3]  += grad[vcur]
-                    //   for iq1:
-                    //    kcur   = k[:D,:M,ik2,ik3]       [D,M,1,1]  grad[kcur] = grad[S1].T @ qcur
-                    //    qcur   = q[:D,iq1,iq2,iq3]      [D,1,1,1]  grad[qcur] = grad[S1]   @ kcur
-                    //    vcur   = v[:M,:D,iv2,iv3]       [M,D,1,1]  grad[vcur] = grad[S5].T @ S4
-                    //    S0     = -Inf                   [D,1,1,1]
-                    //   ~S1[i]  = dot(kcur[:D,i], qcur)
-                    //    S1     = qcur @ kcur.T          [M,1,1,1]  grad[S1]   = grad[S2] * scale
-                    //    S2     = S1 * scale             [M,1,1,1]  grad[S2]   = diag_mask_zero(grad[S3], P)
-                    //    S3     = diag_mask_inf(S2, P)   [M,1,1,1]  grad[S3]   = S4 * (grad[S4] - dot(S4, grad[S4]))
-                    //    S4     = softmax(S3)            [M,1,1,1]  grad[S4]   = grad[S5] @ vcur
-                    //   ~S5[i]  = dot(vcur[:,i], S4)
-                    //    S5     = S4 @ vcur.T            [D,1,1,1]  grad[S5]   = d[:D,id1,id2,id3]
-                    //   ~dst[i,iq1,iq2,iq3]  = S5[i]              ^
-                    //    dst[:D,iq1,iq2,iq3] = S5                 | grad[dst[:D,iq1,iq2,iq3]] = d[:D,id1,id2,id3]
-                    // dst                               backward-/ grad[dst]                 = d
-                    //
-                    // output gradients with their dependencies:
-                    //
-                    // grad[kcur] = grad[S1].T @ qcur
-                    // grad[S1]   = diag_mask_zero(grad[S3], P) * scale
-                    // grad[S3]   = S4 * (grad[S4] - dot(S4, grad[S4]))
-                    // grad[S4]   = grad[S5] @ vcur
-                    // grad[S4]   = d[:D,id1,id2,id3] @ vcur
-                    // grad[qcur] = grad[S1]   @ kcur
-                    // grad[vcur] = grad[S5].T @ S4
-                    // grad[vcur] = d[:D,id1,id2,id3].T @ S4
-                    //
-                    // in post-order:
-                    //
-                    // S1         = qcur @ kcur.T
-                    // S2         = S1 * scale
-                    // S3         = diag_mask_inf(S2, P)
-                    // S4         = softmax(S3)
-                    // grad[S4]   = d[:D,id1,id2,id3] @ vcur
-                    // grad[S3]   = S4 * (grad[S4] - dot(S4, grad[S4]))
-                    // grad[S1]   = diag_mask_zero(grad[S3], P) * scale
-                    // grad[qcur] = grad[S1]   @ kcur
-                    // grad[kcur] = grad[S1].T @ qcur
-                    // grad[vcur] = d[:D,id1,id2,id3].T @ S4
-                    //
-                    // using less variables (SM=S4):
-                    //
-                    // S             = diag_mask_inf(qcur @ kcur.T * scale, P)
-                    // SM            = softmax(S)
-                    // S             = d[:D,iq1,iq2,iq3] @ vcur
-                    // dot_SM_gradSM = dot(SM, S)
-                    // S             = SM * (S - dot(SM, S))
-                    // S             = diag_mask_zero(S, P) * scale
-                    //
-                    // grad[q][:D,iq1,iq2,iq3] += S   @ kcur
-                    // grad[k][:D,:M,ik2,ik3]  += S.T @ qcur
-                    // grad[v][:M,:D,iv2,iv3]  += d[:D,id1,id2,id3].T @ SM
-                }
-
-                // S = gradSM = d[:D,id1,id2,id3] @ vcur[:,:,iv2,iv3]
-                // S = d[:D,id1,id2,id3] @ vcur[:,:,iv2,iv3]
-                // for ic:
-                //   S[:M] += vcur[:M,ic,iv2,iv3] * d[ic,id1,id2,id3]
-                // exclude known future zero S[..] values from operation
-                ggml_vec_set_f32(masked_begin, S, 0);
-                for (int64_t ic = 0; ic < D; ++ic) {
-                    ggml_vec_mad_f32(masked_begin,
-                            S,
-                             (float *) ((char *) v->data + (          ic*nbv1  + iv2*nbv2 + iv3*nbv3)),
-                            *(float *) ((char *) d->data + (ic*nbd0 + id1*nbd1 + id2*nbd2 + id3*nbd3)));
-                }
-
-                // S = SM * (S - dot(SM, S))
-                float dot_SM_gradSM = 0;
-                ggml_vec_dot_f32 (masked_begin, &dot_SM_gradSM, 0, SM, 0, S, 0, 1);
-                ggml_vec_acc1_f32(M, S, -dot_SM_gradSM);
-                ggml_vec_mul_f32 (masked_begin, S, S, SM);
-
-                // S = diag_mask_zero(S, P) * scale
-                // already done by above ggml_vec_set_f32
-
-                // exclude known zero S[..] values from operation
-                ggml_vec_scale_f32(masked_begin, S, scale);
-
-                // S    shape [M,1]
-                // SM   shape [M,1]
-                // kcur shape [D,M]
-                // qcur shape [D,1]
-                // vcur shape [M,D]
-
-                // grad[q][:D,iq1,iq2,iq3] += S @ kcur
-                // grad[q][:D,iq1,iq2,iq3] += shape[M,1] @ shape[D,M]
-                // for ic:
-                //  grad[q][:D,iq1,iq2,iq3] += S[ic] * kcur[:D,ic,ik2,ik3]
-                // exclude known zero S[..] values from loop
-                for (int64_t ic = 0; ic < masked_begin; ++ic) {
-                    ggml_vec_mad_f32(D,
-                            (float *) ((char *) grad_q  + (iq1*nbgq1 + iq2*nbgq2  + iq3*nbgq3)),
-                            (float *) ((char *) k->data + (ic*nbk1   + ik2*nbk2   + ik3*nbk3)),
-                            S[ic]);
-                }
-
-                // grad[k][:D,:M,iq2,iq3] += S.T @ qcur
-                // for ic:
-                //  grad[k][:D,ic,iq2,iq3] += S.T[0,ic] * qcur[:D,0]
-                //  grad[k][:D,ic,iq2,iq3] += S[ic]     * qcur[:D,0]
-                // exclude known zero S[..] values from loop
-                for (int64_t ic = 0; ic < masked_begin; ++ic) {
-                    ggml_vec_mad_f32(D,
-                            (float *) ((char *) grad_k  + (ic*nbgk1  + ik2*nbgk2  + ik3*nbgk3)),
-                            (float *) ((char *) q->data + (iq1*nbq1  + iq2*nbq2   + iq3*nbq3)),
-                            S[ic]);
-                }
-
-                // grad[v][:M,:D,iv2,iv3] += d[:D,id1,id2,id3].T       @ SM
-                // for ic:
-                //  grad[v][:M,ic,iv2,iv3] += d[:D,id1,id2,id3].T[0,ic] * SM[:M]
-                //  grad[v][:M,ic,iv2,iv3] += d[ic,id1,id2,id3]         * SM[:M]
-                // exclude known zero SM[..] values from mad
-                for (int64_t ic = 0; ic < D; ++ic) {
-                    ggml_vec_mad_f32(masked_begin,
-                            (float *) ((char *) grad_v   + (          ic*nbgv1 + iv2*nbgv2 + iv3*nbgv3)),
-                            SM,
-                            *(float *) ((char *) d->data + (ic*nbd0 + id1*nbd1 + id2*nbd2  + id3*nbd3)));
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_flash_attn_back(
-        const struct ggml_compute_params * params,
-        const bool masked,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * q = dst->src[0];
-
-    switch (q->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_flash_attn_back_f32(params, masked, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_ssm_conv
-
-static void ggml_compute_forward_ssm_conv_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const struct ggml_tensor * src0 = dst->src[0]; // conv_state
-    const struct ggml_tensor * src1 = dst->src[1]; // x
-    const struct ggml_tensor * src2 = dst->src[2]; // conv1d.weight
-    const struct ggml_tensor * src3 = dst->src[3]; // state_seq
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int nc   = src2->ne[0]; // d_conv
-    const int nr   = src0->ne[1]; // d_inner
-    const int n_t  = src1->ne[1]; // n_tokens
-    const int n_kv = src0->ne[2]; // max number of sequences in the batch
-
-    GGML_ASSERT((nr*n_t) + (nc*nr*n_kv) == ggml_nelements(dst));
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-    GGML_ASSERT(src1->nb[0] == sizeof(float));
-    GGML_ASSERT(src2->nb[0] == sizeof(float));
-    GGML_ASSERT(src3->nb[0] == sizeof(int32_t));
-    GGML_ASSERT(src0->nb[1] == src0->ne[0]*sizeof(float));
-    // for use with the destination state offset between sequences
-    GGML_ASSERT(src2->nb[2] == src2->ne[1]*src2->ne[0]*sizeof(float));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-    const int ir  = ir1 - ir0;
-
-    if (n_kv > 1) {
-        // multiple sequences means it's hard to know when it's the first time a state is read,
-        // so copy them all over to the destination, just to be sure.
-        for (int i3 = 0; i3 < n_kv; ++i3) {
-            float * s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + i3*(src0->nb[2]));
-            float * s  = (float *) ((char *)  dst->data + ir0*(src2->nb[1]) + i3*(src2->nb[2]) + nr*n_t*sizeof(float));
-            // can't use memcpy because of d_conv vs d_conv - 1
-            for (int i1 = 0; i1 < ir; ++i1) {
-                for (int i0 = 0; i0 < nc - 1; ++i0) {
-                    // copy s0 to last (d_conv - 1) columns of s
-                    s[1 + i0 + i1*nc] = s0[i0 + i1*(nc - 1)];
-                }
-            }
-        }
-    }
-
-    for (int i2 = 0; i2 < n_t; ++i2) {
-        int32_t * sq = (int32_t *) ((char *) src3->data +  i2*(src3->nb[1])); // {n_kv, n_tokens}
-        float *   x  = (float *)   ((char *)  dst->data + ir0*sizeof(float) + i2*(nr*sizeof(float))); // {d_inner, n_tokens}
-        float *   s  = (float *)   ((char *)  dst->data + ir0*(src2->nb[1]) + sq[0]*(src2->nb[2]) + nr*n_t*sizeof(float)); // {d_conv, d_inner, n_kv}
-        float *   s0; // {d_conv - 1, d_inner, n_kv}
-        float *   x0 = (float *)   ((char *) src1->data + ir0*(src1->nb[0]) + i2*(src1->nb[1])); // {d_inner, n_tokens}
-        float *   c  = (float *)   ((char *) src2->data + ir0*(src2->nb[1])); // {d_conv, d_inner}
-        int ne0s0;
-
-        GGML_ASSERT(0 <= sq[0] && sq[0] < n_kv);
-
-        // avoid needing to copy the state for the first token
-        if (i2 == 0) {
-            s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + sq[0]*(src0->nb[2])); // {d_conv - 1, d_inner, n_kv}
-            ne0s0 = src0->ne[0];
-        } else {
-            // the source is the last (d_conv - 1) columns of the destination
-            s0 = s + 1;
-            ne0s0 = nc;
-        }
-
-        // d_inner
-        for (int i1 = 0; i1 < ir; ++i1) {
-            // shift state left
-            for (int i0 = 0; i0 < nc - 1; ++i0) {
-                s[i0 + i1*nc] = s0[i0 + i1*ne0s0];
-            }
-            // insert x on the last column
-            s[(nc - 1) + i1*nc] = x0[i1];
-        }
-
-        // handle copies when there are multiple output states
-        for (int i3 = 1; i3 < n_kv; ++i3) {
-            int32_t seq = sq[i3];
-            if (0 <= seq && seq < n_kv) {
-                float * s1 = s + (seq - sq[0])*nc*nr;
-                memcpy(s1, s, nc*ir*sizeof(float));
-            } else {
-                // stop at negative or too big seq_ids
-                break;
-            }
-        }
-
-        // it seems a little faster when this is separate from the state shift
-        for (int i1 = 0; i1 < ir; ++i1) {
-            // rowwise dot product
-            float sumf = 0.0f;
-            for (int i0 = 0; i0 < nc; ++i0) {
-                int i = i0 + i1*nc;
-                sumf += s[i] * c[i];
-            }
-            x[i1] = sumf;
-        }
-    }
-}
-
-static void ggml_compute_forward_ssm_conv(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-    switch (dst->src[0]->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_ssm_conv_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_ssm_scan
-
-static void ggml_compute_forward_ssm_scan_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const struct ggml_tensor * src0 = dst->src[0]; // s
-    const struct ggml_tensor * src1 = dst->src[1]; // x
-    const struct ggml_tensor * src2 = dst->src[2]; // dt
-    const struct ggml_tensor * src3 = dst->src[3]; // A
-    const struct ggml_tensor * src4 = dst->src[4]; // B
-    const struct ggml_tensor * src5 = dst->src[5]; // C
-    const struct ggml_tensor * src6 = dst->src[6]; // sq
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    const int64_t nc   = src0->ne[0]; // d_state
-    const int64_t nr   = src0->ne[1]; // d_inner
-    const int64_t n_t  = src1->ne[1]; // number of tokens in the batch
-    const int64_t n_kv = src0->ne[2]; // max number of sequences in the batch
-
-    GGML_ASSERT(ggml_nelements(src1) + ggml_nelements(src0) == ggml_nelements(dst));
-    GGML_ASSERT(src0->nb[0] == sizeof(float));
-    GGML_ASSERT(src1->nb[0] == sizeof(float));
-    GGML_ASSERT(src2->nb[0] == sizeof(float));
-    GGML_ASSERT(src3->nb[0] == sizeof(float));
-    GGML_ASSERT(src4->nb[0] == sizeof(float));
-    GGML_ASSERT(src5->nb[0] == sizeof(float));
-    // required for the dot product between s and C, and when copying the states
-    GGML_ASSERT(src0->nb[1] == src0->ne[0]*sizeof(float));
-    // required for per-sequence offsets for states
-    GGML_ASSERT(src0->nb[2] == src0->ne[0]*src0->ne[1]*sizeof(float));
-    // required to get correct offset for state destination (i.e. src1->nb[2])
-    GGML_ASSERT(src1->nb[2] == src1->ne[0]*src1->ne[1]*sizeof(float));
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-    const int ir  = ir1 - ir0;
-
-    if (n_kv > 1) {
-        // it's hard to know if the source states have already been copied
-        // when there are multiple, so copy them already.
-        for (int i3 = 0; i3 < n_kv; ++i3) {
-            float * s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + i3*(src0->nb[2]));
-            float * s  = (float *) ((char *)  dst->data + ir0*(src0->nb[1]) + i3*(src0->nb[2]) + src1->nb[2]);
-            memcpy(s, s0, nc*ir*sizeof(float));
-        }
-    }
-
-    for (int i2 = 0; i2 < n_t; ++i2) {
-        int32_t * sq = (int32_t *) ((char *) src6->data +  i2*(src6->nb[1])); // {n_kv, n_tokens}
-        float *   y  = (float *)   ((char *)  dst->data + ir0*(src1->nb[0]) +    i2*(src1->nb[1])); // {d_inner, n_tokens}
-        float *   s  = (float *)   ((char *)  dst->data + ir0*(src0->nb[1]) + sq[0]*(src0->nb[2]) + src1->nb[2]); // {d_state, d_inner, n_kv}
-        float *   s0;
-        float *   x  = (float *)   ((char *) src1->data + ir0*(src1->nb[0]) + i2*(src1->nb[1])); // {d_inner, n_tokens}
-        float *   dt = (float *)   ((char *) src2->data + ir0*(src2->nb[0]) + i2*(src2->nb[1])); // {d_inner, n_tokens}
-        float *   A  = (float *)   ((char *) src3->data + ir0*(src3->nb[1])); // {d_state, d_inner}
-        float *   B  = (float *)   ((char *) src4->data +  i2*(src4->nb[1])); // {d_state, n_tokens}
-        float *   C  = (float *)   ((char *) src5->data +  i2*(src5->nb[1])); // {d_state, n_tokens}
-
-        GGML_ASSERT(0 <= sq[0] && sq[0] < n_kv);
-
-        // avoid needing to copy the state for the first token
-        if (i2 == 0) {
-            s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + sq[0]*(src0->nb[2])); // {d_state, d_inner, n_kv}
-        } else {
-            // otherwise the source is the same as the destination
-            s0 = s;
-        }
-
-        // d_inner
-        for (int i1 = 0; i1 < ir; ++i1) {
-            // ref: https://github.com/state-spaces/mamba/blob/34076d664838588a3c97727b263478ab9f621a07/mamba_ssm/ops/triton/selective_state_update.py#L78
-            float dt_soft_plus = dt[i1] <= 20.0f ? log1pf(expf(dt[i1])) : dt[i1];
-            float x_dt = x[i1] * dt_soft_plus;
-            float sumf = 0.0f;
-            // d_state
-            for (int i0 = 0; i0 < nc; ++i0) {
-                int i = i0 + i1*nc;
-                // state = prev_state * dA + dB * x
-                float state = (s0[i] * expf(dt_soft_plus * A[i])) + (B[i0] * x_dt);
-                // y = rowwise_dotprod(state, C)
-                sumf += state * C[i0];
-                s[i] = state;
-            }
-            y[i1] = sumf;
-        }
-
-        // handle copies when there are multiple output states
-        for (int i3 = 1; i3 < n_kv; ++i3) {
-            int32_t seq = sq[i3];
-            if (0 <= seq && seq < n_kv) {
-                float * s1 = s + (seq - sq[0])*nc*nr;
-                memcpy(s1, s, nc*ir*sizeof(float));
-            } else {
-                // stop at negative or too big seq_ids
-                break;
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_ssm_scan(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-    switch (dst->src[0]->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_ssm_scan_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_win_part
-
-static void ggml_compute_forward_win_part_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne)
-    GGML_TENSOR_LOCALS(int64_t, ne,  dst,  ne)
-
-    const int32_t nep0 = ((const int32_t *)(dst->op_params))[0];
-    const int32_t nep1 = ((const int32_t *)(dst->op_params))[1];
-    const int32_t w    = ((const int32_t *)(dst->op_params))[2];
-
-    assert(ne00 == ne0);
-    assert(ne3  == nep0*nep1);
-
-    // TODO: optimize / multi-thread
-    for (int py = 0; py < nep1; ++py) {
-        for (int px = 0; px < nep0; ++px) {
-            const int64_t i3 = py*nep0 + px;
-            for (int64_t i2 = 0; i2 < ne2; ++i2) {
-                for (int64_t i1 = 0; i1 < ne1; ++i1) {
-                    for (int64_t i0 = 0; i0 < ne0; ++i0) {
-                        const int64_t i02 = py*w + i2;
-                        const int64_t i01 = px*w + i1;
-                        const int64_t i00 = i0;
-
-                        const int64_t i = i3*ne2*ne1*ne0 + i2*ne1*ne0    + i1*ne0   + i0;
-                        const int64_t j =                  i02*ne01*ne00 + i01*ne00 + i00;
-
-                        if (py*w + i2 >= ne02 || px*w + i1 >= ne01) {
-                            ((float *) dst->data)[i] = 0.0f;
-                        } else {
-                            ((float *) dst->data)[i] = ((float *) src0->data)[j];
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_win_part(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_win_part_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_win_unpart
-
-static void ggml_compute_forward_win_unpart_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne)
-    GGML_TENSOR_LOCALS(int64_t, ne,  dst,  ne)
-
-    const int32_t w = ((const int32_t *)(dst->op_params))[0];
-
-    // padding
-    const int px = (w - ne1%w)%w;
-    //const int py = (w - ne2%w)%w;
-
-    const int npx = (px + ne1)/w;
-    //const int npy = (py + ne2)/w;
-
-    assert(ne0 == ne00);
-
-    // TODO: optimize / multi-thread
-    for (int64_t i2 = 0; i2 < ne2; ++i2) {
-        for (int64_t i1 = 0; i1 < ne1; ++i1) {
-            for (int64_t i0 = 0; i0 < ne0; ++i0) {
-                const int ip2 = i2/w;
-                const int ip1 = i1/w;
-
-                const int64_t i02 = i2%w;
-                const int64_t i01 = i1%w;
-                const int64_t i00 = i0;
-
-                const int64_t i = (ip2*npx + ip1)*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00 + i00;
-                const int64_t j =                                  i2*ne1*ne0    + i1*ne0   + i0;
-
-                ((float *) dst->data)[j] = ((float *) src0->data)[i];
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_win_unpart(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_win_unpart_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-//gmml_compute_forward_unary
-
-static void ggml_compute_forward_unary(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const enum ggml_unary_op op = ggml_get_unary_op(dst);
-
-    switch (op) {
-        case GGML_UNARY_OP_ABS:
-            {
-                ggml_compute_forward_abs(params, dst);
-            } break;
-        case GGML_UNARY_OP_SGN:
-            {
-                ggml_compute_forward_sgn(params, dst);
-            } break;
-        case GGML_UNARY_OP_NEG:
-            {
-                ggml_compute_forward_neg(params, dst);
-            } break;
-        case GGML_UNARY_OP_STEP:
-            {
-                ggml_compute_forward_step(params, dst);
-            } break;
-        case GGML_UNARY_OP_TANH:
-            {
-                ggml_compute_forward_tanh(params, dst);
-            } break;
-        case GGML_UNARY_OP_ELU:
-            {
-                ggml_compute_forward_elu(params, dst);
-            } break;
-        case GGML_UNARY_OP_RELU:
-            {
-                ggml_compute_forward_relu(params, dst);
-            } break;
-        case GGML_UNARY_OP_SIGMOID:
-            {
-                ggml_compute_forward_sigmoid(params, dst);
-            } break;
-        case GGML_UNARY_OP_GELU:
-            {
-                ggml_compute_forward_gelu(params, dst);
-            } break;
-        case GGML_UNARY_OP_GELU_QUICK:
-            {
-                ggml_compute_forward_gelu_quick(params, dst);
-            } break;
-        case GGML_UNARY_OP_SILU:
-            {
-                ggml_compute_forward_silu(params, dst);
-            } break;
-        case GGML_UNARY_OP_HARDSWISH:
-            {
-                ggml_compute_forward_hardswish(params, dst);
-            } break;
-        case GGML_UNARY_OP_HARDSIGMOID:
-            {
-                ggml_compute_forward_hardsigmoid(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_get_rel_pos
-
-static void ggml_compute_forward_get_rel_pos_f16(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    // ref: https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/modeling/image_encoder.py#L292-L322
-
-    GGML_TENSOR_UNARY_OP_LOCALS
-
-    const int64_t w = ne1;
-
-    ggml_fp16_t * src0_data = (ggml_fp16_t *) src0->data;
-    ggml_fp16_t * dst_data  = (ggml_fp16_t *) dst->data;
-
-    for (int64_t i2 = 0; i2 < ne2; ++i2) {
-        for (int64_t i1 = 0; i1 < ne1; ++i1) {
-            const int64_t pos = (w - i1 - 1) + i2;
-            for (int64_t i0 = 0; i0 < ne0; ++i0) {
-                dst_data[i2*ne1*ne0 + i1*ne0 + i0] = src0_data[pos*ne00 + i0];
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_get_rel_pos(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F16:
-        case GGML_TYPE_BF16:
-            {
-                ggml_compute_forward_get_rel_pos_f16(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_add_rel_pos
-
-static void ggml_compute_forward_add_rel_pos_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-    const struct ggml_tensor * src2 = dst->src[2];
-
-    const bool inplace = (bool) ((int32_t *) dst->op_params)[0];
-    if (!inplace && params->type == GGML_TASK_TYPE_INIT) {
-        if (params->ith != 0) {
-            return;
-        }
-        memcpy((char *) dst->data, (char *) src0->data, ggml_nbytes(dst));
-        return;
-    }
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    int64_t t0 = ggml_perf_time_us();
-    UNUSED(t0);
-
-    // ref: https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/modeling/image_encoder.py#L357-L359
-
-    float * src1_data = (float *) src1->data;
-    float * src2_data = (float *) src2->data;
-    float * dst_data  = (float *) dst->data;
-
-    const int64_t ne10 = src1->ne[0];
-    const int64_t ne11 = src1->ne[1];
-    const int64_t ne12 = src1->ne[2];
-    const int64_t ne13 = src1->ne[3];
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    // total patches in dst
-    const int np = ne13;
-
-    // patches per thread
-    const int dp = (np + nth - 1)/nth;
-
-    // patch range for this thread
-    const int ip0 = dp*ith;
-    const int ip1 = MIN(ip0 + dp, np);
-
-    for (int64_t i13 = ip0; i13 < ip1; ++i13) {
-        for (int64_t i12 = 0; i12 < ne12; ++i12) {
-            for (int64_t i11 = 0; i11 < ne11; ++i11) {
-                const int64_t jp1 = i13*ne12*ne11*ne10 + i12*ne11*ne10 + i11*ne10;
-                for (int64_t i10 = 0; i10 < ne10; ++i10) {
-                    const int64_t jp0  = jp1 + i10;
-                    const float src1_e = src1_data[jp0];
-                    const float src2_e = src2_data[jp0];
-
-                    const int64_t jdh = jp0 * ne10;
-                    const int64_t jdw = jdh - (ne10 - 1) * i10;
-
-                    for (int64_t j = 0; j < ne10; ++j) {
-                        dst_data[jdh + j     ] += src2_e;
-                        dst_data[jdw + j*ne10] += src1_e;
-                    }
-                }
-            }
-        }
-    }
-}
-
-static void ggml_compute_forward_add_rel_pos(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_add_rel_pos_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_map_unary
-
-static void ggml_compute_forward_map_unary_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst,
-        const ggml_unary_op_f32_t fun) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        fun(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_map_unary(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst,
-        const ggml_unary_op_f32_t fun) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_map_unary_f32(params, dst, fun);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_map_binary
-
-static void ggml_compute_forward_map_binary_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst,
-        const ggml_binary_op_f32_t fun) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    assert(params->ith == 0);
-    assert(ggml_is_contiguous_1(src0));
-    assert(ggml_is_contiguous_1(src1));
-    assert(ggml_is_contiguous_1(dst));
-    assert(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const int n  = ggml_nrows(src0);
-    const int nc = src0->ne[0];
-
-    for (int i = 0; i < n; i++) {
-        fun(nc,
-                (float *) ((char *) dst->data  + i*( dst->nb[1])),
-                (float *) ((char *) src0->data + i*(src0->nb[1])),
-                (float *) ((char *) src1->data + i*(src1->nb[1])));
-    }
-}
-
-static void ggml_compute_forward_map_binary(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst,
-        const ggml_binary_op_f32_t fun) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_map_binary_f32(params, dst, fun);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_map_custom1
-
-static void ggml_compute_forward_map_custom1_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst,
-        const ggml_custom1_op_f32_t fun) {
-
-    const struct ggml_tensor * a = dst->src[0];
-
-    assert(params->ith == 0);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    fun(dst, a);
-}
-
-// ggml_compute_forward_map_custom2
-
-static void ggml_compute_forward_map_custom2_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst,
-        const ggml_custom2_op_f32_t fun) {
-
-    const struct ggml_tensor * a = dst->src[0];
-    const struct ggml_tensor * b = dst->src[1];
-
-    assert(params->ith == 0);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    fun(dst, a, b);
-}
-
-// ggml_compute_forward_map_custom3
-
-static void ggml_compute_forward_map_custom3_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst,
-        const ggml_custom3_op_f32_t fun) {
-
-    const struct ggml_tensor * a = dst->src[0];
-    const struct ggml_tensor * b = dst->src[1];
-    const struct ggml_tensor * c = dst->src[1];
-
-    assert(params->ith == 0);
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    fun(dst, a, b, c);
-}
-
-// ggml_compute_forward_map_custom1
-
-static void ggml_compute_forward_map_custom1(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * a = dst->src[0];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    struct ggml_map_custom1_op_params p;
-    memcpy(&p, dst->op_params, sizeof(p));
-
-    p.fun(dst, a, params->ith, params->nth, p.userdata);
-}
-
-// ggml_compute_forward_map_custom2
-
-static void ggml_compute_forward_map_custom2(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * a = dst->src[0];
-    const struct ggml_tensor * b = dst->src[1];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    struct ggml_map_custom2_op_params p;
-    memcpy(&p, dst->op_params, sizeof(p));
-
-    p.fun(dst, a, b, params->ith, params->nth, p.userdata);
-}
-
-// ggml_compute_forward_map_custom3
-
-static void ggml_compute_forward_map_custom3(
-        const struct ggml_compute_params * params,
-              struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * a = dst->src[0];
-    const struct ggml_tensor * b = dst->src[1];
-    const struct ggml_tensor * c = dst->src[2];
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    struct ggml_map_custom3_op_params p;
-    memcpy(&p, dst->op_params, sizeof(p));
-
-    p.fun(dst, a, b, c, params->ith, params->nth, p.userdata);
-}
-
-// ggml_compute_forward_cross_entropy_loss
-
-static void ggml_compute_forward_cross_entropy_loss_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-
-    GGML_ASSERT(ggml_is_contiguous(src0));
-    GGML_ASSERT(ggml_is_contiguous(src1));
-    GGML_ASSERT(ggml_is_scalar(dst));
-    GGML_ASSERT(ggml_are_same_shape(src0, src1));
-
-    const int ith = params->ith;
-    const int nth = params->nth;
-
-    float * sums = (float *) params->wdata;
-
-    // TODO: handle transposed/permuted matrices
-    const int nc = src0->ne[0];
-    const int nr = ggml_nrows(src0);
-
-    GGML_ASSERT(params->wsize >= sizeof(float) * (nth + nth * nc));
-
-    if (params->type == GGML_TASK_TYPE_INIT) {
-        if (ith == 0) {
-            memset(sums, 0, sizeof(float) * (nth + nth * nc));
-        }
-        return;
-    }
-
-    if (params->type == GGML_TASK_TYPE_FINALIZE) {
-        if (ith == 0) {
-            float * dp = (float *) dst->data;
-            ggml_vec_sum_f32(nth, dp, sums);
-            dp[0] *= -1.0f / (float) nr;
-        }
-        return;
-    }
-
-    const double eps = 1e-9;
-
-    // rows per thread
-    const int dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int ir0 = dr*ith;
-    const int ir1 = MIN(ir0 + dr, nr);
-
-    for (int i1 = ir0; i1 < ir1; i1++) {
-        float * s0 = (float *)((char *) src0->data + i1*src0->nb[1]);
-        float * s1 = (float *)((char *) src1->data + i1*src1->nb[1]);
-        float * st = ((float *) params->wdata) + nth + ith*nc;
-
-#ifndef NDEBUG
-        for (int i = 0; i < nc; ++i) {
-            //printf("p[%d] = %f\n", i, p[i]);
-            assert(!isnan(s0[i]));
-            assert(!isnan(s1[i]));
-        }
-#endif
-
-        // soft_max
-        float max = -INFINITY;
-        ggml_vec_max_f32(nc, &max, s0);
-        ggml_float sum = ggml_vec_soft_max_f32(nc, st, s0, max);
-        assert(sum > 0.0);
-        sum = (1.0 - eps) / sum;
-
-        // avoid log(0) by rescaling from [0..1] to [eps..1]
-        ggml_vec_scale_f32(nc, st, sum);
-        ggml_vec_add1_f32(nc, st, st, eps);
-        ggml_vec_log_f32(nc, st, st);
-        ggml_vec_mul_f32(nc, st, st, s1);
-
-        float st_sum = 0;
-        ggml_vec_sum_f32(nc, &st_sum, st);
-        sums[ith] += st_sum;
-
-#ifndef NDEBUG
-        for (int i = 0; i < nc; ++i) {
-            assert(!isnan(st[i]));
-            assert(!isinf(st[i]));
-        }
-#endif
-    }
-
-}
-
-static void ggml_compute_forward_cross_entropy_loss(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_cross_entropy_loss_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-// ggml_compute_forward_cross_entropy_loss_back
-
-static void ggml_compute_forward_cross_entropy_loss_back_f32(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-    const struct ggml_tensor * src1 = dst->src[1];
-    const struct ggml_tensor * opt0 = dst->src[2];
-
-    GGML_ASSERT(ggml_is_contiguous(dst));
-    GGML_ASSERT(ggml_is_contiguous(src0));
-    GGML_ASSERT(ggml_is_contiguous(src1));
-    GGML_ASSERT(ggml_is_contiguous(opt0));
-    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
-
-    const int64_t ith = params->ith;
-    const int64_t nth = params->nth;
-
-    if (params->type == GGML_TASK_TYPE_INIT || params->type == GGML_TASK_TYPE_FINALIZE) {
-        return;
-    }
-
-    const double eps = 1e-9;
-
-    // TODO: handle transposed/permuted matrices
-    const int64_t nc = src0->ne[0];
-    const int64_t nr = ggml_nrows(src0);
-
-    // rows per thread
-    const int64_t dr = (nr + nth - 1)/nth;
-
-    // row range for this thread
-    const int64_t ir0 = dr*ith;
-    const int64_t ir1 = MIN(ir0 + dr, nr);
-
-    float * d   = (float *) opt0->data;
-
-    for (int64_t i1 = ir0; i1 < ir1; i1++) {
-        float * ds0 = (float *)((char *) dst->data  + i1*dst->nb[1]);
-        float * s0  = (float *)((char *) src0->data + i1*src0->nb[1]);
-        float * s1  = (float *)((char *) src1->data + i1*src1->nb[1]);
-
-#ifndef NDEBUG
-        for (int i = 0; i < nc; ++i) {
-            //printf("p[%d] = %f\n", i, p[i]);
-            assert(!isnan(s0[i]));
-            assert(!isnan(s1[i]));
-        }
-#endif
-
-        // soft_max
-        float max = -INFINITY;
-        ggml_vec_max_f32(nc, &max, s0);
-        ggml_float sum = ggml_vec_soft_max_f32(nc, ds0, s0, max);
-        assert(sum > 0.0);
-        sum = (1.0 - eps) / sum;
-
-        // grad(src0) = (softmax(src0) - src1) * grad(cross_entropy_loss(src0, src1)) / nr
-        ggml_vec_scale_f32(nc, ds0, sum);
-        ggml_vec_add1_f32(nc, ds0, ds0, eps);
-        ggml_vec_sub_f32(nc, ds0, ds0, s1);
-        ggml_vec_scale_f32(nc, ds0, d[0] / (float) nr);
-
-#ifndef NDEBUG
-        for (int i = 0; i < nc; ++i) {
-            assert(!isnan(ds0[i]));
-            assert(!isinf(ds0[i]));
-        }
-#endif
-    }
-}
-
-static void ggml_compute_forward_cross_entropy_loss_back(
-        const struct ggml_compute_params * params,
-        struct ggml_tensor * dst) {
-
-    const struct ggml_tensor * src0 = dst->src[0];
-
-    switch (src0->type) {
-        case GGML_TYPE_F32:
-            {
-                ggml_compute_forward_cross_entropy_loss_back_f32(params, dst);
-            } break;
-        default:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-/////////////////////////////////
-
-static void ggml_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor, struct ggml_compute_state * state) {
-    GGML_ASSERT(params);
-
-    if (tensor->op == GGML_OP_NONE || ggml_is_empty(tensor)) {
-        return;
-    }
-
-    switch (tensor->op) {
-        case GGML_OP_DUP:
-            {
-                ggml_compute_forward_dup(params, tensor);
-            } break;
-        case GGML_OP_ADD:
-            {
-                ggml_compute_forward_add(params, tensor);
-            } break;
-        case GGML_OP_ADD1:
-            {
-                ggml_compute_forward_add1(params, tensor);
-            } break;
-        case GGML_OP_ACC:
-            {
-                ggml_compute_forward_acc(params, tensor);
-            } break;
-        case GGML_OP_SUB:
-            {
-                ggml_compute_forward_sub(params, tensor);
-            } break;
-        case GGML_OP_MUL:
-            {
-                ggml_compute_forward_mul(params, tensor);
-            } break;
-        case GGML_OP_DIV:
-            {
-                ggml_compute_forward_div(params, tensor);
-            } break;
-        case GGML_OP_SQR:
-            {
-                ggml_compute_forward_sqr(params, tensor);
-            } break;
-        case GGML_OP_SQRT:
-            {
-                ggml_compute_forward_sqrt(params, tensor);
-            } break;
-        case GGML_OP_LOG:
-            {
-                ggml_compute_forward_log(params, tensor);
-            } break;
-        case GGML_OP_SUM:
-            {
-                ggml_compute_forward_sum(params, tensor);
-            } break;
-        case GGML_OP_SUM_ROWS:
-            {
-                ggml_compute_forward_sum_rows(params, tensor);
-            } break;
-        case GGML_OP_MEAN:
-            {
-                ggml_compute_forward_mean(params, tensor);
-            } break;
-        case GGML_OP_ARGMAX:
-            {
-                ggml_compute_forward_argmax(params, tensor);
-            } break;
-        case GGML_OP_REPEAT:
-            {
-                ggml_compute_forward_repeat(params, tensor);
-            } break;
-        case GGML_OP_REPEAT_BACK:
-            {
-                ggml_compute_forward_repeat_back(params, tensor);
-            } break;
-        case GGML_OP_CONCAT:
-            {
-                ggml_compute_forward_concat(params, tensor);
-            } break;
-        case GGML_OP_SILU_BACK:
-            {
-                ggml_compute_forward_silu_back(params, tensor);
-            } break;
-        case GGML_OP_NORM:
-            {
-                ggml_compute_forward_norm(params, tensor);
-            } break;
-        case GGML_OP_RMS_NORM:
-            {
-                ggml_compute_forward_rms_norm(params, tensor);
-            } break;
-        case GGML_OP_RMS_NORM_BACK:
-            {
-                ggml_compute_forward_rms_norm_back(params, tensor);
-            } break;
-        case GGML_OP_GROUP_NORM:
-            {
-                ggml_compute_forward_group_norm(params, tensor);
-            } break;
-        case GGML_OP_MUL_MAT:
-            {
-                ggml_compute_forward_mul_mat(params, tensor, state);
-            } break;
-        case GGML_OP_MUL_MAT_ID:
-            {
-                ggml_compute_forward_mul_mat_id(params, tensor);
-            } break;
-        case GGML_OP_OUT_PROD:
-            {
-                ggml_compute_forward_out_prod(params, tensor);
-            } break;
-        case GGML_OP_SCALE:
-            {
-                ggml_compute_forward_scale(params, tensor);
-            } break;
-        case GGML_OP_SET:
-            {
-                ggml_compute_forward_set(params, tensor);
-            } break;
-        case GGML_OP_CPY:
-            {
-                ggml_compute_forward_cpy(params, tensor);
-            } break;
-        case GGML_OP_CONT:
-            {
-                ggml_compute_forward_cont(params, tensor);
-            } break;
-        case GGML_OP_RESHAPE:
-            {
-                ggml_compute_forward_reshape(params, tensor);
-            } break;
-        case GGML_OP_VIEW:
-            {
-                ggml_compute_forward_view(params, tensor);
-            } break;
-        case GGML_OP_PERMUTE:
-            {
-                ggml_compute_forward_permute(params, tensor);
-            } break;
-        case GGML_OP_TRANSPOSE:
-            {
-                ggml_compute_forward_transpose(params, tensor);
-            } break;
-        case GGML_OP_GET_ROWS:
-            {
-                ggml_compute_forward_get_rows(params, tensor);
-            } break;
-        case GGML_OP_GET_ROWS_BACK:
-            {
-                ggml_compute_forward_get_rows_back(params, tensor);
-            } break;
-        case GGML_OP_DIAG:
-            {
-                ggml_compute_forward_diag(params, tensor);
-            } break;
-        case GGML_OP_DIAG_MASK_INF:
-            {
-                ggml_compute_forward_diag_mask_inf(params, tensor);
-            } break;
-        case GGML_OP_DIAG_MASK_ZERO:
-            {
-                ggml_compute_forward_diag_mask_zero(params, tensor);
-            } break;
-        case GGML_OP_SOFT_MAX:
-            {
-                ggml_compute_forward_soft_max(params, tensor);
-            } break;
-        case GGML_OP_SOFT_MAX_BACK:
-            {
-                ggml_compute_forward_soft_max_back(params, tensor);
-            } break;
-        case GGML_OP_ROPE:
-            {
-                ggml_compute_forward_rope(params, tensor);
-            } break;
-        case GGML_OP_ROPE_BACK:
-            {
-                ggml_compute_forward_rope_back(params, tensor);
-            } break;
-        case GGML_OP_CLAMP:
-            {
-                ggml_compute_forward_clamp(params, tensor);
-            } break;
-        case GGML_OP_CONV_TRANSPOSE_1D:
-            {
-                ggml_compute_forward_conv_transpose_1d(params, tensor);
-            } break;
-        case GGML_OP_IM2COL:
-            {
-                ggml_compute_forward_im2col(params, tensor);
-            } break;
-        case GGML_OP_CONV_TRANSPOSE_2D:
-            {
-                ggml_compute_forward_conv_transpose_2d(params, tensor);
-            } break;
-        case GGML_OP_POOL_1D:
-            {
-                ggml_compute_forward_pool_1d(params, tensor);
-            } break;
-        case GGML_OP_POOL_2D:
-            {
-                ggml_compute_forward_pool_2d(params, tensor);
-            } break;
-        case GGML_OP_UPSCALE:
-            {
-                ggml_compute_forward_upscale(params, tensor);
-            } break;
-        case GGML_OP_PAD:
-            {
-                ggml_compute_forward_pad(params, tensor);
-            } break;
-        case GGML_OP_ARANGE:
-            {
-                ggml_compute_forward_arange(params, tensor);
-            } break;
-        case GGML_OP_TIMESTEP_EMBEDDING:
-            {
-                ggml_compute_forward_timestep_embedding(params, tensor);
-            } break;
-        case GGML_OP_ARGSORT:
-            {
-                ggml_compute_forward_argsort(params, tensor);
-            } break;
-        case GGML_OP_LEAKY_RELU:
-            {
-                ggml_compute_forward_leaky_relu(params, tensor);
-            } break;
-        case GGML_OP_FLASH_ATTN_EXT:
-            {
-                ggml_compute_forward_flash_attn_ext(params, tensor->src[0], tensor->src[1], tensor->src[2], tensor->src[3], tensor);
-            } break;
-        case GGML_OP_FLASH_ATTN_BACK:
-            {
-                int32_t t = ggml_get_op_params_i32(tensor, 0);
-                GGML_ASSERT(t == 0 || t == 1);
-                bool masked = t != 0;
-                ggml_compute_forward_flash_attn_back(params, masked, tensor);
-            } break;
-        case GGML_OP_SSM_CONV:
-            {
-                ggml_compute_forward_ssm_conv(params, tensor);
-            } break;
-        case GGML_OP_SSM_SCAN:
-            {
-                ggml_compute_forward_ssm_scan(params, tensor);
-            } break;
-        case GGML_OP_WIN_PART:
-            {
-                ggml_compute_forward_win_part(params, tensor);
-            } break;
-        case GGML_OP_WIN_UNPART:
-            {
-                ggml_compute_forward_win_unpart(params, tensor);
-            } break;
-        case GGML_OP_UNARY:
-            {
-                ggml_compute_forward_unary(params, tensor);
-            } break;
-        case GGML_OP_GET_REL_POS:
-            {
-                ggml_compute_forward_get_rel_pos(params, tensor);
-            } break;
-        case GGML_OP_ADD_REL_POS:
-            {
-                ggml_compute_forward_add_rel_pos(params, tensor);
-            } break;
-        case GGML_OP_MAP_UNARY:
-            {
-                ggml_unary_op_f32_t fun;
-                memcpy(&fun, tensor->op_params, sizeof(fun));
-                ggml_compute_forward_map_unary(params, tensor, fun);
-            }
-            break;
-        case GGML_OP_MAP_BINARY:
-            {
-                ggml_binary_op_f32_t fun;
-                memcpy(&fun, tensor->op_params, sizeof(fun));
-                ggml_compute_forward_map_binary(params, tensor, fun);
-            }
-            break;
-        case GGML_OP_MAP_CUSTOM1_F32:
-            {
-                ggml_custom1_op_f32_t fun;
-                memcpy(&fun, tensor->op_params, sizeof(fun));
-                ggml_compute_forward_map_custom1_f32(params, tensor, fun);
-            }
-            break;
-        case GGML_OP_MAP_CUSTOM2_F32:
-            {
-                ggml_custom2_op_f32_t fun;
-                memcpy(&fun, tensor->op_params, sizeof(fun));
-                ggml_compute_forward_map_custom2_f32(params, tensor, fun);
-            }
-            break;
-        case GGML_OP_MAP_CUSTOM3_F32:
-            {
-                ggml_custom3_op_f32_t fun;
-                memcpy(&fun, tensor->op_params, sizeof(fun));
-                ggml_compute_forward_map_custom3_f32(params, tensor, fun);
-            }
-            break;
-        case GGML_OP_MAP_CUSTOM1:
-            {
-                ggml_compute_forward_map_custom1(params, tensor);
-            }
-            break;
-        case GGML_OP_MAP_CUSTOM2:
-            {
-                ggml_compute_forward_map_custom2(params, tensor);
-            }
-            break;
-        case GGML_OP_MAP_CUSTOM3:
-            {
-                ggml_compute_forward_map_custom3(params, tensor);
-            }
-            break;
-        case GGML_OP_CROSS_ENTROPY_LOSS:
-            {
-                ggml_compute_forward_cross_entropy_loss(params, tensor);
-            }
-            break;
-        case GGML_OP_CROSS_ENTROPY_LOSS_BACK:
-            {
-                ggml_compute_forward_cross_entropy_loss_back(params, tensor);
-            }
-            break;
-        case GGML_OP_NONE:
-            {
-                // nop
-            } break;
-        case GGML_OP_COUNT:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-static size_t ggml_hash_size(size_t min_sz) {
-    // next primes after powers of two
-    static const size_t primes[] = {
-        2, 3, 5, 11, 17, 37, 67, 131, 257, 521, 1031,
-        2053, 4099, 8209, 16411, 32771, 65537, 131101,
-        262147, 524309, 1048583, 2097169, 4194319, 8388617,
-        16777259, 33554467, 67108879, 134217757, 268435459,
-        536870923, 1073741827, 2147483659
-    };
-    static const size_t n_primes = sizeof(primes)/sizeof(primes[0]);
-
-    // find the smallest prime that is larger or equal to min_sz
-    size_t l = 0;
-    size_t r = n_primes;
-    while (l < r) {
-        size_t m = (l + r)/2;
-        if (primes[m] < min_sz) {
-            l = m + 1;
-        } else {
-            r = m;
-        }
-    }
-    size_t sz = l < n_primes ? primes[l] : min_sz | 1;
-    return sz;
-}
-
-static size_t ggml_hash(const void * p) {
-    return (size_t)p;
-}
-
-size_t ggml_hash_find(const struct ggml_hash_set hash_set, struct ggml_tensor * key) {
-    size_t h = ggml_hash(key) % hash_set.size;
-
-    // linear probing
-    size_t i = h;
-    while (hash_set.keys[i] != NULL && hash_set.keys[i] != key) {
-        i = (i + 1) % hash_set.size;
-        if (i == h) {
-            // visited all hash table entries -> not found
-            return GGML_HASHTABLE_FULL;
-        }
-    }
-    return i;
-}
-
-bool ggml_hash_contains(struct ggml_hash_set hash_set, struct ggml_tensor * key) {
-    size_t i = ggml_hash_find(hash_set, key);
-    return i != GGML_HASHTABLE_FULL && hash_set.keys[i] == key;
-}
-
-size_t ggml_hash_insert(struct ggml_hash_set hash_set, struct ggml_tensor * key) {
-    size_t i = ggml_hash_find(hash_set, key);
-
-    GGML_ASSERT(i != GGML_HASHTABLE_FULL);
-
-    if (hash_set.keys[i] == key) {
-        return GGML_HASHTABLE_ALREADY_EXISTS;
-    }
-
-    // insert
-    GGML_ASSERT(hash_set.keys[i] == NULL);
-    hash_set.keys[i] = key;
-    return i;
-}
-
-size_t ggml_hash_find_or_insert(struct ggml_hash_set hash_set, struct ggml_tensor * key) {
-    size_t i = ggml_hash_find(hash_set, key);
-
-    GGML_ASSERT(i != GGML_HASHTABLE_FULL);
-
-    hash_set.keys[i] = key;
-    return i;
-}
-
-struct ggml_hash_set ggml_hash_set_new(size_t size) {
-    size = ggml_hash_size(size);
-    struct ggml_hash_set result;
-    result.size = size;
-    result.keys = GGML_MALLOC(sizeof(struct ggml_tensor *) * size);
-    memset(result.keys, 0, sizeof(struct ggml_tensor *) * size);
-    return result;
-}
-
-static void ggml_hash_set_free(struct ggml_hash_set hash_set) {
-    GGML_FREE(hash_set.keys);
-}
-
-struct hash_map {
-    struct ggml_hash_set set;
-    struct ggml_tensor ** vals;
-};
-
-static struct hash_map * ggml_new_hash_map(size_t size) {
-    struct hash_map * result = GGML_MALLOC(sizeof(struct hash_map));
-    result->set = ggml_hash_set_new(size);
-    result->vals = GGML_MALLOC(sizeof(struct ggml_tensor *) * result->set.size);
-    memset(result->vals, 0, sizeof(struct ggml_tensor *) * result->set.size);
-    return result;
-}
-
-static void ggml_hash_map_free(struct hash_map * map) {
-    ggml_hash_set_free(map->set);
-    GGML_FREE(map->vals);
-    GGML_FREE(map);
-}
-
-// gradient checkpointing
-
-static struct ggml_tensor * ggml_recompute_graph_node(
-        struct ggml_context * ctx,
-        struct ggml_cgraph  * graph,
-        struct hash_map     * replacements,
-        struct ggml_tensor  * node) {
-
-    if (node == NULL) {
-        return NULL;
-    }
-
-    if (node->flags & GGML_TENSOR_FLAG_PARAM) {
-        return node;
-    }
-
-    if (!ggml_hash_contains(graph->visited_hash_table, node)) {
-        return node;
-    }
-
-    int count_children = 0;
-    for (int k = 0; k < GGML_MAX_SRC; ++k) {
-        if (node->src[k]) {
-            ++count_children;
-        }
-    }
-
-    if (count_children == 0) {
-        return node;
-    }
-
-    size_t i = ggml_hash_find(replacements->set, node);
-    GGML_ASSERT(i != GGML_HASHTABLE_FULL); // assert that not full
-    if (replacements->set.keys[i] == node) {
-        return replacements->vals[i];
-    }
-
-    struct ggml_tensor * clone = ggml_new_tensor(ctx, node->type, GGML_MAX_DIMS, node->ne);
-
-    // insert clone into replacements
-    GGML_ASSERT(replacements->set.keys[i] == NULL); // assert that we don't overwrite
-    replacements->set.keys[i] = node;
-    replacements->vals[i] = clone;
-
-    clone->op       = node->op;
-    clone->grad     = node->grad;
-    clone->flags    = node->flags;
-    clone->extra    = node->extra;
-    for (int k = 0; k < GGML_MAX_DIMS; ++k) {
-        clone->nb[k] = node->nb[k];
-    }
-    for (int k = 0; k < GGML_MAX_SRC; ++k) {
-        clone->src[k] = ggml_recompute_graph_node(ctx, graph, replacements, node->src[k]);
-    }
-    if (node->view_src != NULL) {
-        clone->data = (node->view_src->data == NULL)
-                        ? NULL // view_src not yet allocated
-                        : (char *) node->view_src->data // view_src already allocated
-                                 + node->view_offs;
-        clone->view_src  = node->view_src;
-        clone->view_offs = node->view_offs;
-    }
-
-    GGML_ASSERT(sizeof(node->op_params) == sizeof(int32_t) * (GGML_MAX_OP_PARAMS / sizeof(int32_t)));
-    GGML_ASSERT(sizeof(node->name)      == GGML_MAX_NAME);
-    memcpy(clone->op_params, node->op_params, sizeof(node->op_params));
-    ggml_format_name(clone, "%s (clone)", ggml_get_name(node));
-
-    return clone;
-}
-
-void ggml_build_backward_gradient_checkpointing(
-        struct ggml_context   * ctx,
-        struct ggml_cgraph    * gf,
-        struct ggml_cgraph    * gb,
-        struct ggml_cgraph    * gb_tmp,
-        struct ggml_tensor  * * checkpoints,
-        int                     n_checkpoints) {
-    ggml_graph_cpy(gf, gb_tmp);
-    ggml_build_backward_expand(ctx, gf, gb_tmp, true);
-
-    if (n_checkpoints <= 0) {
-        ggml_graph_cpy(gb_tmp, gb);
-        return;
-    }
-
-    struct hash_map * replacements = ggml_new_hash_map(gf->n_nodes + gf->n_leafs + n_checkpoints);
-
-    // insert checkpoints in replacements
-    for (int i = 0; i < n_checkpoints; ++i) {
-        size_t k = ggml_hash_find(replacements->set, checkpoints[i]);
-        GGML_ASSERT(k != GGML_HASHTABLE_FULL); // assert that not full
-        GGML_ASSERT(replacements->set.keys[k] == NULL); // assert that we don't overwrite
-        replacements->set.keys[k] = checkpoints[i];
-        replacements->vals[k]     = checkpoints[i];
-    }
-
-    ggml_graph_cpy(gf, gb);
-    // rewrite gb_tmp->nodes[gf->n_nodes:gb_tmp->n_nodes],
-    // replacing references to gb_tmp->nodes[0:gf->n_nodes] ( == gf->nodes[0:gf->n_nodes]),
-    // by recomputing them from checkpoints
-    for (int i = gf->n_nodes; i<gb_tmp->n_nodes; ++i) {
-        struct ggml_tensor * node = gb_tmp->nodes[i];
-        for (int k = 0; k < GGML_MAX_SRC; ++k) {
-            // insert new tensors recomputing src, reusing already made replacements,
-            // remember replacements: remember new tensors with mapping from corresponding gf nodes
-            // recurse for input tensors,
-            // unless (i.e. terminating when) input tensors are replacements (like checkpoints)
-            node->src[k] = ggml_recompute_graph_node(ctx, gf, replacements, node->src[k]);
-        }
-        // insert rewritten backward node with replacements made into resulting backward graph gb
-        ggml_build_forward_expand(gb, node);
-    }
-
-    ggml_hash_map_free(replacements);
-}
-
-// functions to change gradients considering the case that input a might be initial gradient with zero value
-
-static struct ggml_tensor * ggml_add_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_hash_set zero_table) {
-    if (ggml_hash_contains(zero_table, a)) {
-        return b;
-    } else {
-        return ggml_add_impl(ctx, a, b, false);
-    }
-}
-
-static struct ggml_tensor * ggml_acc_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, size_t nb1, size_t nb2, size_t nb3, size_t offset, struct ggml_hash_set zero_table) {
-    if (ggml_hash_contains(zero_table, a)) {
-        struct ggml_tensor * a_zero = ggml_scale(ctx, a, 0.0f);
-        return ggml_acc_impl(ctx, a_zero, b, nb1, nb2, nb3, offset, false);
-    } else {
-        return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, false);
-    }
-}
-
-static struct ggml_tensor * ggml_add1_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_hash_set zero_table) {
-    if (ggml_hash_contains(zero_table, a)) {
-        return ggml_repeat(ctx, b, a);
-    } else {
-        return ggml_add1_impl(ctx, a, b, false);
-    }
-}
-
-static struct ggml_tensor * ggml_sub_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_hash_set zero_table) {
-    if (ggml_hash_contains(zero_table, a)) {
-        return ggml_neg(ctx, b);
-    } else {
-        return ggml_sub_impl(ctx, a, b, false);
-    }
-}
-
-static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor * tensor, struct ggml_hash_set zero_table) {
-    struct ggml_tensor * src0 = tensor->src[0];
-    struct ggml_tensor * src1 = tensor->src[1];
-    struct ggml_tensor * src2 = tensor->src[2];
-
-    switch (tensor->op) {
-        case GGML_OP_DUP:
-            {
-                if (src0->grad) {
-                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
-                }
-            } break;
-        case GGML_OP_ADD:
-            {
-                if (src0->grad) {
-                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
-                }
-                if (src1->grad) {
-                    src1->grad = ggml_add_or_set(ctx, src1->grad, tensor->grad, zero_table);
-                }
-            } break;
-        case GGML_OP_ADD1:
-            {
-                if (src0->grad) {
-                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
-                }
-                if (src1->grad) {
-                    src1->grad = ggml_add_or_set(ctx,
-                        src1->grad,
-                        ggml_mean(ctx, tensor->grad), // TODO: should probably be sum instead of mean
-                        zero_table);
-                }
-            } break;
-        case GGML_OP_ACC:
-            {
-                if (src0->grad) {
-                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
-                }
-                if (src1->grad) {
-                    const size_t nb1     = ((int32_t *) tensor->op_params)[0];
-                    const size_t nb2     = ((int32_t *) tensor->op_params)[1];
-                    const size_t nb3     = ((int32_t *) tensor->op_params)[2];
-                    const size_t offset  = ((int32_t *) tensor->op_params)[3];
-
-                    struct ggml_tensor * tensor_grad_view = ggml_view_4d(ctx,
-                        tensor->grad,
-                        src1->grad->ne[0],
-                        src1->grad->ne[1],
-                        src1->grad->ne[2],
-                        src1->grad->ne[3],
-                        nb1, nb2, nb3, offset);
-
-                    src1->grad =
-                        ggml_add_or_set(ctx,
-                            src1->grad,
-                            ggml_reshape(ctx,
-                                ggml_cont(ctx, tensor_grad_view),
-                                src1->grad),
-                            zero_table);
-                }
-            } break;
-        case GGML_OP_SUB:
-            {
-                if (src0->grad) {
-                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
-                }
-                if (src1->grad) {
-                    src1->grad = ggml_sub_or_set(ctx, src1->grad, tensor->grad, zero_table);
-                }
-            } break;
-        case GGML_OP_MUL:
-            {
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add_or_set(ctx,
-                                src0->grad,
-                                ggml_mul(ctx, src1, tensor->grad),
-                                zero_table);
-                }
-                if (src1->grad) {
-                    src1->grad =
-                        ggml_add_or_set(ctx,
-                                src1->grad,
-                                ggml_mul(ctx, src0, tensor->grad),
-                                zero_table);
-                }
-            } break;
-        case GGML_OP_DIV:
-            {
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add_or_set(ctx,
-                                src0->grad,
-                                ggml_div(ctx, tensor->grad, src1),
-                                zero_table);
-                }
-                if (src1->grad) {
-                    src1->grad =
-                        ggml_sub_or_set(ctx,
-                                src1->grad,
-                                ggml_mul(ctx,
-                                    tensor->grad,
-                                    ggml_div(ctx, tensor, src1)),
-                                zero_table);
-                }
-            } break;
-        case GGML_OP_SQR:
-            {
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add_or_set(ctx,
-                                src0->grad,
-                                ggml_scale(ctx,
-                                    ggml_mul(ctx, src0, tensor->grad),
-                                    2.0f),
-                                zero_table);
-                }
-            } break;
-        case GGML_OP_SQRT:
-            {
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add_or_set(ctx,
-                                src0->grad,
-                                ggml_scale(ctx,
-                                    ggml_div(ctx,
-                                        tensor->grad,
-                                        tensor),
-                                    0.5f),
-                                zero_table);
-                }
-            } break;
-        case GGML_OP_LOG:
-            {
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add_or_set(ctx,
-                                src0->grad,
-                                ggml_div(ctx,
-                                    tensor->grad,
-                                    src0),
-                                zero_table);
-                }
-            } break;
-        case GGML_OP_SUM:
-            {
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add1_or_set(ctx,
-                                src0->grad,
-                                tensor->grad,
-                                zero_table);
-                }
-            } break;
-        case GGML_OP_SUM_ROWS:
-            {
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add_or_set(ctx,
-                                src0->grad,
-                                ggml_repeat(ctx,
-                                    tensor->grad,
-                                    src0->grad),
-                                zero_table);
-                }
-            } break;
-        case GGML_OP_MEAN:
-        case GGML_OP_ARGMAX:
-            {
-                GGML_ASSERT(false); // TODO: implement
-            } break;
-        case GGML_OP_REPEAT:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    src0->grad = ggml_add_or_set(ctx,
-                            src0->grad,
-                            ggml_repeat_back(ctx, tensor->grad, src0->grad),
-                            zero_table);
-                }
-            } break;
-        case GGML_OP_REPEAT_BACK:
-            {
-                if (src0->grad) {
-                    // TODO: test this
-                    src0->grad = ggml_add_or_set(ctx,
-                            src0->grad,
-                            ggml_repeat(ctx, tensor->grad, src0->grad),
-                            zero_table);
-                }
-            } break;
-        case GGML_OP_CONCAT:
-            {
-                GGML_ASSERT(false); // TODO: implement
-            } break;
-        case GGML_OP_SILU_BACK:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_NORM:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_RMS_NORM:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    float eps;
-                    memcpy(&eps, tensor->op_params, sizeof(float));
-
-                    src0->grad = ggml_add_or_set(ctx,
-                            src0->grad,
-                            ggml_rms_norm_back(ctx, src0, tensor->grad, eps),
-                            zero_table);
-                }
-            } break;
-        case GGML_OP_RMS_NORM_BACK:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_GROUP_NORM:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_MUL_MAT:
-            {
-                // https://cs231n.github.io/optimization-2/#staged
-                // # forward pass
-                // s0 = np.random.randn(5, 10)
-                // s1 = np.random.randn(10, 3)
-                // t = s0.dot(s1)
-
-                // # now suppose we had the gradient on t from above in the circuit
-                // dt = np.random.randn(*t.shape) # same shape as t
-                // ds0 = dt.dot(s1.T) #.T gives the transpose of the matrix
-                // ds1 = t.T.dot(dt)
-
-                // tensor.shape [m,p,qq,rr]
-                // src0.shape   [n,m,q1,r1]
-                // src1.shape   [n,p,qq,rr]
-
-                // necessary for llama
-                if (src0->grad) {
-                    struct ggml_tensor * s1_tg =
-                        ggml_out_prod(ctx, // [n,m,qq,rr]
-                            src1,          // [n,p,qq,rr]
-                            tensor->grad); // [m,p,qq,rr]
-                    const int64_t qq = s1_tg->ne[2];
-                    const int64_t rr = s1_tg->ne[3];
-                    const int64_t q1 = src0->ne[2];
-                    const int64_t r1 = src0->ne[3];
-                    const bool ne2_broadcasted = qq > q1;
-                    const bool ne3_broadcasted = rr > r1;
-                    if (ne2_broadcasted || ne3_broadcasted) {
-                        // sum broadcast repetitions of s1_tg into shape of src0
-                        s1_tg = ggml_repeat_back(ctx, s1_tg, src0);
-                    }
-                    src0->grad =
-                        ggml_add_or_set(ctx,
-                                src0->grad, // [n,m,q1,r1]
-                                s1_tg,      // [n,m,q1,r1]
-                                zero_table);
-                }
-                if (src1->grad) {
-                    src1->grad =
-                        ggml_add_or_set(ctx,
-                                src1->grad,                            // [n,p,qq,rr]
-                                // ggml_mul_mat(ctx,                   // [n,p,qq,rr]
-                                //     ggml_cont(ctx,                  // [m,n,q1,r1]
-                                //         ggml_transpose(ctx, src0)), // [m,n,q1,r1]
-                                //     tensor->grad),                  // [m,p,qq,rr]
-
-                                // // when src0 is bigger than tensor->grad (this is mostly the case in llama),
-                                // // avoid transpose of src0, rather transpose smaller tensor->grad
-                                // // and then use ggml_out_prod
-                                ggml_out_prod(ctx,                  // [n,p,qq,rr]
-                                    src0,                           // [n,m,q1,r1]
-                                    ggml_transpose(ctx,             // [p,m,qq,rr]
-                                        tensor->grad)),             // [m,p,qq,rr]
-                                zero_table);
-                }
-            } break;
-        case GGML_OP_MUL_MAT_ID:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_OUT_PROD:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_SCALE:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    float s;
-                    memcpy(&s, tensor->op_params, sizeof(float));
-
-                    src0->grad =
-                        ggml_add_or_set(ctx,
-                            src0->grad,
-                            ggml_scale_impl(ctx, tensor->grad, s, false),
-                            zero_table);
-                }
-            } break;
-        case GGML_OP_SET:
-            {
-                const size_t nb1     = ((int32_t *) tensor->op_params)[0];
-                const size_t nb2     = ((int32_t *) tensor->op_params)[1];
-                const size_t nb3     = ((int32_t *) tensor->op_params)[2];
-                const size_t offset  = ((int32_t *) tensor->op_params)[3];
-
-                struct ggml_tensor * tensor_grad_view = NULL;
-
-                if (src0->grad || src1->grad) {
-                    GGML_ASSERT(src0->type == tensor->type);
-                    GGML_ASSERT(tensor->grad->type == tensor->type);
-                    GGML_ASSERT(tensor->grad->type == src1->grad->type);
-
-                    tensor_grad_view = ggml_view_4d(ctx,
-                        tensor->grad,
-                        src1->grad->ne[0],
-                        src1->grad->ne[1],
-                        src1->grad->ne[2],
-                        src1->grad->ne[3],
-                        nb1, nb2, nb3, offset);
-                }
-
-                if (src0->grad) {
-                    src0->grad = ggml_add_or_set(ctx,
-                        src0->grad,
-                        ggml_acc_impl(ctx,
-                            tensor->grad,
-                            ggml_neg(ctx, tensor_grad_view),
-                            nb1, nb2, nb3, offset, false),
-                        zero_table);
-                }
-
-                if (src1->grad) {
-                    src1->grad =
-                        ggml_add_or_set(ctx,
-                            src1->grad,
-                            ggml_reshape(ctx,
-                                ggml_cont(ctx, tensor_grad_view),
-                                src1->grad),
-                            zero_table);
-                }
-            } break;
-        case GGML_OP_CPY:
-            {
-                // necessary for llama
-                // cpy overwrites value of src1 by src0 and returns view(src1)
-                // the overwriting is mathematically equivalent to:
-                // tensor = src0 * 1 + src1 * 0
-                if (src0->grad) {
-                    // dsrc0 = dtensor * 1
-                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
-                }
-                if (src1->grad) {
-                    // dsrc1 = dtensor * 0 -> noop
-                }
-            } break;
-        case GGML_OP_CONT:
-            {
-                // same as cpy
-                if (src0->grad) {
-                    GGML_ASSERT(ggml_is_contiguous(src0->grad));
-                    GGML_ASSERT(ggml_is_contiguous(tensor->grad));
-                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
-                }
-            } break;
-        case GGML_OP_RESHAPE:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add_or_set(ctx, src0->grad,
-                            ggml_reshape(ctx,
-                                ggml_is_contiguous(tensor->grad)
-                                    ? tensor->grad
-                                    : ggml_cont(ctx, tensor->grad),
-                                src0->grad),
-                        zero_table);
-                }
-            } break;
-        case GGML_OP_VIEW:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    size_t offset;
-
-                    memcpy(&offset, tensor->op_params, sizeof(offset));
-
-                    size_t nb1     = tensor->nb[1];
-                    size_t nb2     = tensor->nb[2];
-                    size_t nb3     = tensor->nb[3];
-
-                    if (src0->type != src0->grad->type) {
-                        // gradient is typically F32, but src0 could be other type
-                        size_t ng = ggml_element_size(src0->grad);
-                        size_t n0 = ggml_element_size(src0);
-                        GGML_ASSERT(offset % n0 == 0);
-                        GGML_ASSERT(nb1 % n0 == 0);
-                        GGML_ASSERT(nb2 % n0 == 0);
-                        GGML_ASSERT(nb3 % n0 == 0);
-                        offset = (offset / n0) * ng;
-                        nb1 = (nb1 / n0) * ng;
-                        nb2 = (nb2 / n0) * ng;
-                        nb3 = (nb3 / n0) * ng;
-                    }
-
-                    src0->grad = ggml_acc_or_set(ctx, src0->grad, tensor->grad, nb1, nb2, nb3, offset, zero_table);
-                }
-            } break;
-        case GGML_OP_PERMUTE:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    int32_t * axes = (int32_t *) tensor->op_params;
-                    int axis0 = axes[0] & 0x3;
-                    int axis1 = axes[1] & 0x3;
-                    int axis2 = axes[2] & 0x3;
-                    int axis3 = axes[3] & 0x3;
-                    int axes_backward[4] = {0,0,0,0};
-                    axes_backward[axis0] = 0;
-                    axes_backward[axis1] = 1;
-                    axes_backward[axis2] = 2;
-                    axes_backward[axis3] = 3;
-                    src0->grad =
-                        ggml_add_or_set(ctx, src0->grad,
-                            ggml_permute(ctx,
-                                tensor->grad,
-                                axes_backward[0],
-                                axes_backward[1],
-                                axes_backward[2],
-                                axes_backward[3]),
-                            zero_table);
-                }
-            } break;
-        case GGML_OP_TRANSPOSE:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add_or_set(ctx, src0->grad,
-                            ggml_transpose(ctx, tensor->grad),
-                        zero_table);
-                }
-            } break;
-        case GGML_OP_GET_ROWS:
-            {
-                // necessary for llama (only for tokenizer)
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add_or_set(ctx, src0->grad,
-                            // last ggml_get_rows_back argument src0->grad is only
-                            // necessary to setup correct output shape
-                            ggml_get_rows_back(ctx, tensor->grad, src1, src0->grad),
-                        zero_table);
-                }
-                if (src1->grad) {
-                    // noop
-                }
-            } break;
-        case GGML_OP_GET_ROWS_BACK:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_DIAG:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_DIAG_MASK_INF:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    const int n_past = ((int32_t *) tensor->op_params)[0];
-                    src0->grad =
-                        ggml_add_or_set(ctx, src0->grad,
-                            /* ggml_diag_mask_inf_impl() shouldn't be here */
-                            /* ref:  https://github.com/ggerganov/llama.cpp/pull/4203#discussion_r1412377992 */
-                            ggml_diag_mask_zero_impl(ctx, tensor->grad, n_past, false),
-                        zero_table);
-                }
-            } break;
-        case GGML_OP_DIAG_MASK_ZERO:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    const int n_past = ((int32_t *) tensor->op_params)[0];
-                    src0->grad =
-                        ggml_add_or_set(ctx, src0->grad,
-                            ggml_diag_mask_zero_impl(ctx, tensor->grad, n_past, false),
-                        zero_table);
-                }
-            } break;
-        case GGML_OP_SOFT_MAX:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    src0->grad =
-                        ggml_add_or_set(ctx, src0->grad,
-                            ggml_soft_max_back(ctx, tensor->grad, tensor),
-                        zero_table);
-                }
-
-            } break;
-        case GGML_OP_SOFT_MAX_BACK:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_ROPE:
-            {
-                // necessary for llama
-                if (src0->grad) {
-                    //const int n_past = ((int32_t *) tensor->op_params)[0];
-                    const int n_dims     = ((int32_t *) tensor->op_params)[1];
-                    const int mode       = ((int32_t *) tensor->op_params)[2];
-                    //const int n_ctx      = ((int32_t *) tensor->op_params)[3];
-                    const int n_ctx_orig = ((int32_t *) tensor->op_params)[4];
-                    float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
-
-                    memcpy(&freq_base,   (int32_t *) tensor->op_params +  5, sizeof(float));
-                    memcpy(&freq_scale,  (int32_t *) tensor->op_params +  6, sizeof(float));
-                    memcpy(&ext_factor,  (int32_t *) tensor->op_params +  7, sizeof(float));
-                    memcpy(&attn_factor, (int32_t *) tensor->op_params +  8, sizeof(float));
-                    memcpy(&beta_fast,   (int32_t *) tensor->op_params +  9, sizeof(float));
-                    memcpy(&beta_slow,   (int32_t *) tensor->op_params + 10, sizeof(float));
-
-                    src0->grad = ggml_add_or_set(ctx,
-                            src0->grad,
-                            ggml_rope_back(ctx,
-                                tensor->grad,
-                                src1,
-                                src2,
-                                n_dims,
-                                mode,
-                                n_ctx_orig,
-                                freq_base,
-                                freq_scale,
-                                ext_factor,
-                                attn_factor,
-                                beta_fast,
-                                beta_slow),
-                            zero_table);
-                }
-            } break;
-        case GGML_OP_ROPE_BACK:
-            {
-                if (src0->grad) {
-                    //const int n_past = ((int32_t *) tensor->op_params)[0];
-                    const int n_dims     = ((int32_t *) tensor->op_params)[1];
-                    const int mode       = ((int32_t *) tensor->op_params)[2];
-                    //const int n_ctx      = ((int32_t *) tensor->op_params)[3];
-                    const int n_ctx_orig = ((int32_t *) tensor->op_params)[4];
-                    float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
-
-                    memcpy(&freq_base,   (int32_t *) tensor->op_params +  5, sizeof(float));
-                    memcpy(&freq_scale,  (int32_t *) tensor->op_params +  6, sizeof(float));
-                    memcpy(&ext_factor,  (int32_t *) tensor->op_params +  7, sizeof(float));
-                    memcpy(&attn_factor, (int32_t *) tensor->op_params +  8, sizeof(float));
-                    memcpy(&beta_fast,   (int32_t *) tensor->op_params +  9, sizeof(float));
-                    memcpy(&beta_slow,   (int32_t *) tensor->op_params + 10, sizeof(float));
-
-                    src0->grad = ggml_add_or_set(ctx,
-                            src0->grad,
-                            ggml_rope_impl(ctx,
-                                tensor->grad,
-                                src1,
-                                src2,
-                                n_dims,
-                                mode,
-                                n_ctx_orig,
-                                freq_base,
-                                freq_scale,
-                                ext_factor,
-                                attn_factor,
-                                beta_fast,
-                                beta_slow,
-                                false),
-                            zero_table);
-                }
-            } break;
-        case GGML_OP_CLAMP:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_CONV_TRANSPOSE_1D:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_IM2COL:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_CONV_TRANSPOSE_2D:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_POOL_1D:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_POOL_2D:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_UPSCALE:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_PAD:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_ARANGE:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_TIMESTEP_EMBEDDING:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_ARGSORT:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_LEAKY_RELU:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_FLASH_ATTN_EXT:
-            {
-                struct ggml_tensor * flash_grad = NULL;
-                if (src0->grad || src1->grad || tensor->src[2]->grad) {
-                    int32_t t = ggml_get_op_params_i32(tensor, 0);
-                    GGML_ASSERT(t == 0 || t == 1);
-                    bool masked = t != 0;
-                    flash_grad =
-                        ggml_flash_attn_back(ctx,
-                            src0,
-                            src1,
-                            tensor->src[2],
-                            tensor->grad,
-                            masked);
-                }
-
-                const int64_t elem_q = ggml_nelements(src0);
-                const int64_t elem_k = ggml_nelements(src1);
-                const int64_t elem_v = ggml_nelements(src2);
-
-                enum ggml_type result_type = flash_grad->type;
-                GGML_ASSERT(ggml_blck_size(result_type) == 1);
-                const size_t tsize = ggml_type_size(result_type);
-
-                const size_t offs_q = 0;
-                const size_t offs_k = offs_q + GGML_PAD(elem_q * tsize, GGML_MEM_ALIGN);
-                const size_t offs_v = offs_k + GGML_PAD(elem_k * tsize, GGML_MEM_ALIGN);
-
-                if (src0->grad) {
-                    struct ggml_tensor * view_q = ggml_view_1d(ctx, flash_grad, elem_q, offs_q);
-                    struct ggml_tensor * grad_q = ggml_reshape(ctx, view_q, src0);
-                    src0->grad = ggml_add_or_set(ctx,
-                            src0->grad,
-                            grad_q,
-                            zero_table);
-                }
-                if (src1->grad) {
-                    struct ggml_tensor * view_k = ggml_view_1d(ctx, flash_grad, elem_k, offs_k);
-                    struct ggml_tensor * grad_k = ggml_reshape(ctx, view_k, src1);
-                    src1->grad = ggml_add_or_set(ctx,
-                            src1->grad,
-                            grad_k,
-                            zero_table);
-                }
-                if (src2->grad) {
-                    struct ggml_tensor * view_v = ggml_view_1d(ctx, flash_grad, elem_v, offs_v);
-                    struct ggml_tensor * grad_v = ggml_reshape(ctx, view_v, src2);
-                    src2->grad = ggml_add_or_set(ctx,
-                            src2->grad,
-                            grad_v,
-                            zero_table);
-                }
-            } break;
-        case GGML_OP_FLASH_ATTN_BACK:
-            {
-                GGML_ASSERT(false); // not supported
-            } break;
-        case GGML_OP_SSM_CONV:
-        case GGML_OP_SSM_SCAN:
-            {
-                GGML_ASSERT(false); // TODO: not implemented
-            } break;
-        case GGML_OP_WIN_PART:
-        case GGML_OP_WIN_UNPART:
-        case GGML_OP_UNARY:
-            {
-                switch (ggml_get_unary_op(tensor)) {
-                    case GGML_UNARY_OP_ABS:
-                        {
-                            if (src0->grad) {
-                                src0->grad =
-                                    ggml_add_or_set(ctx,
-                                            src0->grad,
-                                            ggml_mul(ctx,
-                                                ggml_sgn(ctx, src0),
-                                                tensor->grad),
-                                            zero_table);
-                            }
-                        } break;
-                    case GGML_UNARY_OP_SGN:
-                        {
-                            if (src0->grad) {
-                                // noop
-                            }
-                        } break;
-                    case GGML_UNARY_OP_NEG:
-                        {
-                            if (src0->grad) {
-                                src0->grad = ggml_sub_or_set(ctx, src0->grad, tensor->grad, zero_table);
-                            }
-                        } break;
-                    case GGML_UNARY_OP_STEP:
-                        {
-                            if (src0->grad) {
-                                // noop
-                            }
-                        } break;
-                    case GGML_UNARY_OP_TANH:
-                        {
-                            GGML_ASSERT(false); // TODO: not implemented
-                        } break;
-                    case GGML_UNARY_OP_ELU:
-                        {
-                            GGML_ASSERT(false); // TODO: not implemented
-                        } break;
-                    case GGML_UNARY_OP_RELU:
-                        {
-                            if (src0->grad) {
-                                src0->grad = ggml_add_or_set(ctx,
-                                        src0->grad,
-                                        ggml_mul(ctx,
-                                            ggml_step(ctx, src0),
-                                            tensor->grad),
-                                        zero_table);
-                            }
-                        } break;
-                    case GGML_UNARY_OP_SIGMOID:
-                        {
-                            GGML_ASSERT(false); // TODO: not implemented
-                        } break;
-                    case GGML_UNARY_OP_GELU:
-                        {
-                            GGML_ASSERT(false); // TODO: not implemented
-                        } break;
-                    case GGML_UNARY_OP_GELU_QUICK:
-                        {
-                            GGML_ASSERT(false); // TODO: not implemented
-                        } break;
-                    case GGML_UNARY_OP_SILU:
-                        {
-                            // necessary for llama
-                            if (src0->grad) {
-                                src0->grad = ggml_add_or_set(ctx,
-                                        src0->grad,
-                                        ggml_silu_back(ctx, src0, tensor->grad),
-                                        zero_table);
-                            }
-                        } break;
-                    default:
-                        GGML_ASSERT(false);
-                }
-            } break;
-        case GGML_OP_GET_REL_POS:
-        case GGML_OP_ADD_REL_POS:
-        case GGML_OP_MAP_UNARY:
-        case GGML_OP_MAP_BINARY:
-        case GGML_OP_MAP_CUSTOM1_F32:
-        case GGML_OP_MAP_CUSTOM2_F32:
-        case GGML_OP_MAP_CUSTOM3_F32:
-        case GGML_OP_MAP_CUSTOM1:
-        case GGML_OP_MAP_CUSTOM2:
-        case GGML_OP_MAP_CUSTOM3:
-            {
-                GGML_ASSERT(false); // not supported
-            } break;
-        case GGML_OP_CROSS_ENTROPY_LOSS:
-            {
-                if (src0->grad) {
-                    src0->grad = ggml_add_or_set(ctx,
-                                src0->grad,
-                                ggml_cross_entropy_loss_back(ctx,
-                                    src0,
-                                    src1,
-                                    tensor->grad),
-                                zero_table);
-                }
-            } break;
-        case GGML_OP_CROSS_ENTROPY_LOSS_BACK:
-            {
-                GGML_ASSERT(false); // not supported
-            } break;
-        case GGML_OP_NONE:
-            {
-                // nop
-            } break;
-        case GGML_OP_COUNT:
-            {
-                GGML_ASSERT(false);
-            } break;
-    }
-
-    for (int i = 0; i < GGML_MAX_SRC; ++i) {
-        if (tensor->src[i] && tensor->src[i]->grad) {
-            GGML_ASSERT(ggml_are_same_shape(tensor->src[i], tensor->src[i]->grad));
-        }
-    }
-}
-
-static void ggml_visit_parents(struct ggml_cgraph * cgraph, struct ggml_tensor * node) {
-    if (node->grad == NULL) {
-        // this usually happens when we generate intermediate nodes from constants in the backward pass
-        // it can also happen during forward pass, if the user performs computations with constants
-        if (node->op != GGML_OP_NONE) {
-            //GGML_PRINT_DEBUG("%s: warning: node %p has no grad, but op %d\n", __func__, (void *) node, node->op);
-        }
-    }
-
-    // check if already visited
-    if (ggml_hash_insert(cgraph->visited_hash_table, node) == GGML_HASHTABLE_ALREADY_EXISTS) {
-        return;
-    }
-
-    for (int i = 0; i < GGML_MAX_SRC; ++i) {
-        const int k =
-            (cgraph->order == GGML_CGRAPH_EVAL_ORDER_LEFT_TO_RIGHT) ? i :
-            (cgraph->order == GGML_CGRAPH_EVAL_ORDER_RIGHT_TO_LEFT) ? (GGML_MAX_SRC-1-i) :
-            /* unknown order, just fall back to using i*/ i;
-        if (node->src[k]) {
-            ggml_visit_parents(cgraph, node->src[k]);
-        }
-    }
-
-    if (node->op == GGML_OP_NONE && node->grad == NULL) {
-        // reached a leaf node, not part of the gradient graph (e.g. a constant)
-        GGML_ASSERT(cgraph->n_leafs < cgraph->size);
-
-        if (strlen(node->name) == 0) {
-            ggml_format_name(node, "leaf_%d", cgraph->n_leafs);
-        }
-
-        cgraph->leafs[cgraph->n_leafs] = node;
-        cgraph->n_leafs++;
-    } else {
-        GGML_ASSERT(cgraph->n_nodes < cgraph->size);
-
-        if (strlen(node->name) == 0) {
-            ggml_format_name(node, "node_%d", cgraph->n_nodes);
-        }
-
-        cgraph->nodes[cgraph->n_nodes] = node;
-        if (cgraph->grads) {
-            cgraph->grads[cgraph->n_nodes] = node->grad;
-        }
-        cgraph->n_nodes++;
-    }
-}
-
-static void ggml_build_forward_impl(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor, bool expand) {
-    if (!expand) {
-        // TODO: this branch isn't accessible anymore, maybe move this to ggml_build_forward_expand
-        ggml_graph_clear(cgraph);
-    }
-
-    const int n0 = cgraph->n_nodes;
-    UNUSED(n0);
-
-    ggml_visit_parents(cgraph, tensor);
-
-    const int n_new = cgraph->n_nodes - n0;
-    GGML_PRINT_DEBUG("%s: visited %d new nodes\n", __func__, n_new);
-
-    if (n_new > 0) {
-        // the last added node should always be starting point
-        GGML_ASSERT(cgraph->nodes[cgraph->n_nodes - 1] == tensor);
-    }
-}
-
-void ggml_build_forward_expand(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor) {
-    ggml_build_forward_impl(cgraph, tensor, true);
-}
-
-void ggml_build_backward_expand(struct ggml_context * ctx, struct ggml_cgraph * gf, struct ggml_cgraph * gb, bool keep) {
-    GGML_ASSERT(gf->n_nodes > 0);
-
-    // if we are keeping the gradient graph, we have to detach the gradient nodes from the original graph
-    if (keep) {
-        for (int i = 0; i < gf->n_nodes; i++) {
-            struct ggml_tensor * node = gf->nodes[i];
-
-            if (node->grad) {
-                node->grad = ggml_dup_tensor(ctx, node);
-                gf->grads[i] = node->grad;
-            }
-        }
-    }
-
-    // remember original gradients which start with zero values
-    struct ggml_hash_set zero_table = ggml_hash_set_new(gf->size);
-    for (int i = 0; i < gf->n_nodes; i++) {
-        if (gf->grads[i]) {
-            ggml_hash_insert(zero_table, gf->grads[i]);
-        }
-    }
-
-    for (int i = gf->n_nodes - 1; i >= 0; i--) {
-        struct ggml_tensor * node = gf->nodes[i];
-
-        // inplace operations to add gradients are not created by ggml_compute_backward
-        // use allocator to automatically make inplace operations
-        if (node->grad) {
-            ggml_compute_backward(ctx, node, zero_table);
-        }
-    }
-
-    for (int i = 0; i < gf->n_nodes; i++) {
-        struct ggml_tensor * node = gf->nodes[i];
-
-        if (node->flags & GGML_TENSOR_FLAG_PARAM) {
-            GGML_PRINT_DEBUG("%s: found root node %p\n", __func__, (void *) node);
-            ggml_build_forward_expand(gb, node->grad);
-        }
-    }
-
-    ggml_hash_set_free(zero_table);
-}
-
-static size_t ggml_graph_nbytes(size_t size, bool grads) {
-    size_t nbytes = sizeof(struct ggml_cgraph);
-    nbytes += size * sizeof(struct ggml_tensor *) * 2; // leafs + nodes
-    if (grads) {
-        nbytes += size * sizeof(struct ggml_tensor *); // grads
-    }
-    nbytes += ggml_hash_size(size * 2) * sizeof(struct ggml_tensor *); // hash set
-    return nbytes;
-}
-
-size_t ggml_graph_overhead_custom(size_t size, bool grads) {
-    return GGML_OBJECT_SIZE + GGML_PAD(ggml_graph_nbytes(size, grads), GGML_MEM_ALIGN);
-}
-
-size_t ggml_graph_overhead(void) {
-    return ggml_graph_overhead_custom(GGML_DEFAULT_GRAPH_SIZE, false);
-}
-
-struct ggml_cgraph * ggml_new_graph_custom(struct ggml_context * ctx, size_t size, bool grads) {
-    const size_t obj_size = ggml_graph_nbytes(size, grads);
-    struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_GRAPH, obj_size);
-    struct ggml_cgraph * cgraph = (struct ggml_cgraph *) ((char *) ctx->mem_buffer + obj->offs);
-
-    struct ggml_tensor ** data_start = (struct ggml_tensor **) (cgraph + 1);
-
-    size_t hash_size = ggml_hash_size(size * 2);
-    struct ggml_tensor ** nodes_ptr = data_start;
-    struct ggml_tensor ** leafs_ptr = nodes_ptr + size;
-    struct ggml_tensor ** hash_keys_ptr = leafs_ptr + size;
-    struct ggml_tensor ** grads_ptr = grads ? hash_keys_ptr + hash_size : NULL;
-
-    // check that we allocated the correct amount of memory
-    assert(obj_size == (size_t) (
-        (grads ? (char *)(grads_ptr + size) : (char *)(hash_keys_ptr + hash_size)) - (char *)cgraph));
-
-    memset(hash_keys_ptr, 0, hash_size * sizeof(struct ggml_tensor *));
-
-    *cgraph = (struct ggml_cgraph) {
-        /*.size         =*/ size,
-        /*.n_nodes      =*/ 0,
-        /*.n_leafs      =*/ 0,
-        /*.nodes        =*/ nodes_ptr,
-        /*.grads        =*/ grads_ptr,
-        /*.leafs        =*/ leafs_ptr,
-        /*.hash_table   =*/ { hash_size, hash_keys_ptr },
-        /*.order        =*/ GGML_CGRAPH_EVAL_ORDER_LEFT_TO_RIGHT,
-        /*.perf_runs    =*/ 0,
-        /*.perf_cycles  =*/ 0,
-        /*.perf_time_us =*/ 0,
-    };
-
-    return cgraph;
-}
-
-struct ggml_cgraph * ggml_new_graph(struct ggml_context * ctx) {
-    return ggml_new_graph_custom(ctx, GGML_DEFAULT_GRAPH_SIZE, false);
-}
-
-struct ggml_cgraph ggml_graph_view(struct ggml_cgraph * cgraph0, int i0, int i1) {
-    struct ggml_cgraph cgraph = {
-        /*.size         =*/ 0,
-        /*.n_nodes      =*/ i1 - i0,
-        /*.n_leafs      =*/ 0,
-        /*.nodes        =*/ cgraph0->nodes + i0,
-        /*.grads        =*/ cgraph0->grads ? cgraph0->grads + i0 : NULL,
-        /*.leafs        =*/ NULL,
-        /*.hash_table   =*/ { 0, NULL },
-        /*.order        =*/ cgraph0->order,
-        /*.perf_runs    =*/ 0,
-        /*.perf_cycles  =*/ 0,
-        /*.perf_time_us =*/ 0,
-    };
-
-    return cgraph;
-}
-
-void ggml_graph_cpy(struct ggml_cgraph * src, struct ggml_cgraph * dst) {
-    GGML_ASSERT(dst->size >= src->n_leafs);
-    GGML_ASSERT(dst->size >= src->n_nodes);
-    GGML_ASSERT(dst->visited_hash_table.size >= src->visited_hash_table.size);
-
-    dst->n_leafs = src->n_leafs;
-    dst->n_nodes = src->n_nodes;
-    dst->order   = src->order;
-
-    for (int i = 0; i < src->n_leafs; ++i) {
-        dst->leafs[i] = src->leafs[i];
-    }
-
-    for (int i = 0; i < src->n_nodes; ++i) {
-        dst->nodes[i] = src->nodes[i];
-    }
-
-    if (src->grads) {
-        GGML_ASSERT(dst->grads != NULL);
-        for (int i = 0; i < src->n_nodes; ++i) {
-            dst->grads[i] = src->grads[i];
-        }
-    }
-
-    for (size_t i = 0; i < src->visited_hash_table.size; ++i) {
-        if (src->visited_hash_table.keys[i]) {
-            ggml_hash_insert(dst->visited_hash_table, src->visited_hash_table.keys[i]);
-        }
-    }
-}
-
-struct ggml_cgraph * ggml_graph_dup(struct ggml_context * ctx, struct ggml_cgraph * cgraph) {
-    struct ggml_cgraph * result = ggml_new_graph_custom(ctx, cgraph->size, cgraph->grads != NULL);
-    ggml_graph_cpy(cgraph, result);
-    return result;
-}
-
-void ggml_graph_reset(struct ggml_cgraph * cgraph) {
-    GGML_ASSERT(cgraph->grads != NULL);
-
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        struct ggml_tensor * grad = cgraph->grads[i];
-
-        if (grad) {
-            ggml_set_zero(grad);
-        }
-    }
-}
-
-void ggml_graph_clear(struct ggml_cgraph * cgraph) {
-    cgraph->n_leafs = 0;
-    cgraph->n_nodes = 0;
-    memset(cgraph->visited_hash_table.keys, 0, cgraph->visited_hash_table.size * sizeof(struct ggml_tensor *));
-}
-
-//
-// thread data
-//
-// synchronization is done via busy loops
-// I tried using spin locks, but not sure how to use them correctly - the things I tried were slower than busy loops
-//
-
-#ifdef __APPLE__
-
-//#include <os/lock.h>
-//
-//typedef os_unfair_lock ggml_lock_t;
-//
-//#define ggml_lock_init(x)    UNUSED(x)
-//#define ggml_lock_destroy(x) UNUSED(x)
-//#define ggml_lock_lock       os_unfair_lock_lock
-//#define ggml_lock_unlock     os_unfair_lock_unlock
-//
-//#define GGML_LOCK_INITIALIZER OS_UNFAIR_LOCK_INIT
-
-typedef int ggml_lock_t;
-
-#define ggml_lock_init(x)    UNUSED(x)
-#define ggml_lock_destroy(x) UNUSED(x)
-#define ggml_lock_lock(x)    UNUSED(x)
-#define ggml_lock_unlock(x)  UNUSED(x)
-
-#define GGML_LOCK_INITIALIZER 0
-
-#define ggml_thread_create pthread_create
-#define ggml_thread_join   pthread_join
-
-#else
-
-//typedef pthread_spinlock_t ggml_lock_t;
-
-//#define ggml_lock_init(x) pthread_spin_init(x, PTHREAD_PROCESS_PRIVATE)
-//#define ggml_lock_destroy pthread_spin_destroy
-//#define ggml_lock_lock    pthread_spin_lock
-//#define ggml_lock_unlock  pthread_spin_unlock
-
-typedef int ggml_lock_t;
-
-#define ggml_lock_init(x)    UNUSED(x)
-#define ggml_lock_destroy(x) UNUSED(x)
-#if defined(__x86_64__) || (defined(_MSC_VER) && defined(_M_AMD64))
-#define ggml_lock_lock(x)    _mm_pause()
-#else
-#define ggml_lock_lock(x)    UNUSED(x)
-#endif
-#define ggml_lock_unlock(x)  UNUSED(x)
-
-#define GGML_LOCK_INITIALIZER 0
-
-#define ggml_thread_create pthread_create
-#define ggml_thread_join   pthread_join
-
-#endif
-
-// Android's libc implementation "bionic" does not support setting affinity
-#if defined(__gnu_linux__)
-static void set_numa_thread_affinity(int thread_n) {
-    if (!ggml_is_numa()) {
-        return;
-    }
-
-    int node_num;
-    int rv;
-    size_t setsize = CPU_ALLOC_SIZE(g_state.numa.total_cpus);
-
-    switch(g_state.numa.numa_strategy) {
-        case GGML_NUMA_STRATEGY_DISTRIBUTE:
-            // run thread on node_num thread_n / (threads per node)
-            node_num = thread_n % g_state.numa.n_nodes;
-            break;
-        case GGML_NUMA_STRATEGY_ISOLATE:
-            // run thread on current_node
-            node_num = g_state.numa.current_node;
-            break;
-        case GGML_NUMA_STRATEGY_NUMACTL:
-            // use the cpuset that numactl gave us
-            rv = pthread_setaffinity_np(pthread_self(), setsize, &g_state.numa.cpuset);
-            if (rv) {
-                fprintf(stderr, "warning: pthread_setaffinity_np() failed: %s\n",strerror(rv));
-            }
-            return;
-        default:
-            return;
-    }
-
-    struct ggml_numa_node * node = &g_state.numa.nodes[node_num];
-
-    cpu_set_t * cpus = CPU_ALLOC(g_state.numa.total_cpus);
-    CPU_ZERO_S(setsize, cpus);
-    for (size_t i = 0; i < node->n_cpus; ++i) {
-        CPU_SET_S(node->cpus[i], setsize, cpus);
-    }
-
-    rv = pthread_setaffinity_np(pthread_self(), setsize, cpus);
-    if (rv) {
-            fprintf(stderr, "warning: pthread_setaffinity_np() failed: %s\n", strerror(rv));
-    }
-
-    CPU_FREE(cpus);
-}
-
-static void clear_numa_thread_affinity(void) {
-    if (!ggml_is_numa()) {
-        return;
-    }
-
-    size_t setsize = CPU_ALLOC_SIZE(g_state.numa.total_cpus);
-
-    cpu_set_t * cpus = CPU_ALLOC(g_state.numa.total_cpus);
-    CPU_ZERO_S(setsize, cpus);
-    for (unsigned i = 0; i < g_state.numa.total_cpus; ++i) {
-        CPU_SET_S(i, setsize, cpus);
-    }
-
-    int rv = pthread_setaffinity_np(pthread_self(), setsize, cpus);
-    if (rv) {
-        fprintf(stderr, "warning: pthread_setaffinity_np() failed: %s\n", strerror(rv));
-    }
-
-    CPU_FREE(cpus);
-}
-#else
-// TODO: Windows etc.
-// (the linux implementation may also work on BSD, someone should test)
-static void set_numa_thread_affinity(int thread_n) { UNUSED(thread_n);  }
-static void clear_numa_thread_affinity(void) {}
-#endif
-
-static void ggml_graph_compute_perf_stats_node(struct ggml_tensor * node, const struct ggml_compute_state_shared * st) {
-    int64_t cycles_cur  = ggml_perf_cycles()  - st->perf_node_start_cycles;
-    int64_t time_us_cur = ggml_perf_time_us() - st->perf_node_start_time_us;
-
-    node->perf_runs++;
-    node->perf_cycles  += cycles_cur;
-    node->perf_time_us += time_us_cur;
-}
-
-static int ggml_get_n_tasks(struct ggml_tensor * node, int n_threads, int n_cur_threads) {
-    int n_tasks = 0;
-
-    if (ggml_is_empty(node)) {
-        // no need to multi-thread a no-op
-        n_tasks = 1;
-        return n_tasks;
-    }
-
-    switch (node->op) {
-        case GGML_OP_CPY:
-        case GGML_OP_DUP:
-        case GGML_OP_CONT:
-        case GGML_OP_ADD:
-        case GGML_OP_ADD1:
-        case GGML_OP_ACC:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_SUB:
-        case GGML_OP_SQR:
-        case GGML_OP_SQRT:
-        case GGML_OP_LOG:
-        case GGML_OP_SUM:
-        case GGML_OP_SUM_ROWS:
-        case GGML_OP_MEAN:
-        case GGML_OP_ARGMAX:
-        case GGML_OP_REPEAT:
-        case GGML_OP_REPEAT_BACK:
-        case GGML_OP_LEAKY_RELU:
-            {
-                n_tasks = 1;
-            } break;
-        case GGML_OP_UNARY:
-            switch (ggml_get_unary_op(node)) {
-                case GGML_UNARY_OP_ABS:
-                case GGML_UNARY_OP_SGN:
-                case GGML_UNARY_OP_NEG:
-                case GGML_UNARY_OP_STEP:
-                case GGML_UNARY_OP_TANH:
-                case GGML_UNARY_OP_ELU:
-                case GGML_UNARY_OP_RELU:
-                case GGML_UNARY_OP_SIGMOID:
-                case GGML_UNARY_OP_HARDSWISH: // to opt for multiple threads
-                case GGML_UNARY_OP_HARDSIGMOID: // to opt for multiple threads
-                    {
-                        n_tasks = 1;
-                    } break;
-
-                case GGML_UNARY_OP_GELU:
-                case GGML_UNARY_OP_GELU_QUICK:
-                case GGML_UNARY_OP_SILU:
-                    {
-                        n_tasks = n_threads;
-                    } break;
-                default:
-                    GGML_ASSERT(false);
-            }
-            break;
-        case GGML_OP_SILU_BACK:
-        case GGML_OP_MUL:
-        case GGML_OP_DIV:
-        case GGML_OP_NORM:
-        case GGML_OP_RMS_NORM:
-        case GGML_OP_RMS_NORM_BACK:
-        case GGML_OP_GROUP_NORM:
-        case GGML_OP_CONCAT:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_MUL_MAT:
-            {
-                n_tasks = n_threads;
-
-                // TODO: use different scheduling for different matrix sizes
-                //const int nr0 = ggml_nrows(node->src[0]);
-                //const int nr1 = ggml_nrows(node->src[1]);
-
-                //n_tasks = MIN(n_threads, MAX(1, nr0/128));
-                //printf("nr0 = %8d, nr1 = %8d, nr0*nr1 = %8d, n_tasks%d\n", nr0, nr1, nr0*nr1, n_tasks);
-            } break;
-        case GGML_OP_MUL_MAT_ID:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_OUT_PROD:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_GET_ROWS:
-            {
-                // FIXME: the cost of launching additional threads decreases performance with GPU offloading
-                //n_tasks = MIN(n_threads, ggml_nelements(node->src[1]));
-                n_tasks = MIN(n_cur_threads, ggml_nelements(node->src[1]));
-            } break;
-        case GGML_OP_SCALE:
-        case GGML_OP_SET:
-        case GGML_OP_RESHAPE:
-        case GGML_OP_VIEW:
-        case GGML_OP_PERMUTE:
-        case GGML_OP_TRANSPOSE:
-        case GGML_OP_GET_ROWS_BACK:
-        case GGML_OP_DIAG:
-            {
-                n_tasks = 1;
-            } break;
-        case GGML_OP_DIAG_MASK_ZERO:
-        case GGML_OP_DIAG_MASK_INF:
-        case GGML_OP_SOFT_MAX_BACK:
-        case GGML_OP_ROPE:
-        case GGML_OP_ROPE_BACK:
-        case GGML_OP_ADD_REL_POS:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_CLAMP:
-            {
-                n_tasks = 1; //TODO
-            } break;
-        case GGML_OP_SOFT_MAX:
-            {
-                n_tasks = MIN(n_threads, ggml_nrows(node->src[0]));
-            } break;
-        case GGML_OP_CONV_TRANSPOSE_1D:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_IM2COL:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_CONV_TRANSPOSE_2D:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_POOL_1D:
-        case GGML_OP_POOL_2D:
-            {
-                n_tasks = 1;
-            } break;
-        case GGML_OP_UPSCALE:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_PAD:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_ARANGE:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_TIMESTEP_EMBEDDING:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_ARGSORT:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_FLASH_ATTN_EXT:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_FLASH_ATTN_BACK:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_SSM_CONV:
-        case GGML_OP_SSM_SCAN:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_WIN_PART:
-        case GGML_OP_WIN_UNPART:
-        case GGML_OP_GET_REL_POS:
-        case GGML_OP_MAP_UNARY:
-        case GGML_OP_MAP_BINARY:
-        case GGML_OP_MAP_CUSTOM1_F32:
-        case GGML_OP_MAP_CUSTOM2_F32:
-        case GGML_OP_MAP_CUSTOM3_F32:
-            {
-                n_tasks = 1;
-            } break;
-        case GGML_OP_MAP_CUSTOM1:
-            {
-                struct ggml_map_custom1_op_params p;
-                memcpy(&p, node->op_params, sizeof(p));
-                if (p.n_tasks == GGML_N_TASKS_MAX) {
-                    n_tasks = n_threads;
-                } else {
-                    n_tasks = MIN(p.n_tasks, n_threads);
-                }
-            } break;
-        case GGML_OP_MAP_CUSTOM2:
-            {
-                struct ggml_map_custom2_op_params p;
-                memcpy(&p, node->op_params, sizeof(p));
-                if (p.n_tasks == GGML_N_TASKS_MAX) {
-                    n_tasks = n_threads;
-                } else {
-                    n_tasks = MIN(p.n_tasks, n_threads);
-                }
-            } break;
-        case GGML_OP_MAP_CUSTOM3:
-            {
-                struct ggml_map_custom3_op_params p;
-                memcpy(&p, node->op_params, sizeof(p));
-                if (p.n_tasks == GGML_N_TASKS_MAX) {
-                    n_tasks = n_threads;
-                } else {
-                    n_tasks = MIN(p.n_tasks, n_threads);
-                }
-            } break;
-        case GGML_OP_CROSS_ENTROPY_LOSS:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_CROSS_ENTROPY_LOSS_BACK:
-            {
-                n_tasks = n_threads;
-            } break;
-        case GGML_OP_NONE:
-            {
-                n_tasks = 1;
-            } break;
-        case GGML_OP_COUNT:
-            {
-                GGML_ASSERT(false);
-            } break;
-        default:
-            {
-                fprintf(stderr, "%s: op not implemented: ", __func__);
-                if (node->op < GGML_OP_COUNT) {
-                    fprintf(stderr, "%s\n", ggml_op_name(node->op));
-                } else {
-                    fprintf(stderr, "%d\n", node->op);
-                }
-                GGML_ASSERT(false);
-            } break;
-    }
-
-    assert(n_tasks > 0);
-
-    return n_tasks;
-}
-
-static void ggml_graph_compute_thread_sync_node(int * node_n, struct ggml_compute_state * state, const bool do_yield) {
-    // wait for other threads to finish
-    const int last_node_n = * node_n;
-
-    while (true) {
-        if (do_yield) {
-            sched_yield();
-        }
-
-        *node_n = atomic_load(&state->shared->node_n);
-        if (*node_n != last_node_n) {
-            break;
-        }
-
-#if defined(__SSE3__)
-        // Tell the processor we're spinning.  It's a processor hint for spinlocks.
-        _mm_pause();
-#endif
-    }
-}
-
-static void ggml_graph_compute_thread_sync_task(int * task_phase, struct ggml_compute_state * state, const bool do_yield) {
-    // wait for other threads to finish
-    const int last_task_phase = *task_phase;
-
-    while (true) {
-        if (do_yield) {
-            sched_yield();
-        }
-
-        *task_phase = atomic_load(&state->shared->node_task);
-        if (*task_phase != last_task_phase) {
-            break;
-        }
-
-#if defined(__SSE3__)
-        // Tell the processor we're spinning.  It's a processor hint for spinlocks.
-        _mm_pause();
-#endif
-    }
-}
-
-static thread_ret_t ggml_graph_compute_thread(void * data) {
-    struct ggml_compute_state * state = (struct ggml_compute_state *) data;
-
-    const struct ggml_cgraph * cgraph = state->shared->cgraph;
-    const struct ggml_cplan  * cplan  = state->shared->cplan;
-
-    const int   n_threads   = state->shared->n_threads;
-
-    set_numa_thread_affinity(state->ith);
-
-    int node_n     = -1;
-    int task_phase = GGML_TASK_TYPE_FINALIZE;
-
-    while (true) {
-        if (cplan->abort_callback && cplan->abort_callback(cplan->abort_callback_data)) {
-            state->shared->node_n += 1;
-            state->ec = GGML_STATUS_ABORTED;
-            return 0;
-        }
-
-        if (atomic_fetch_sub(&state->shared->n_active, 1) == 1) {
-            // all other threads are finished and spinning
-            // do finalize and init here so we don't have synchronize again
-            struct ggml_compute_params params = {
-                /*.type  =*/ GGML_TASK_TYPE_FINALIZE,
-                /*.ith   =*/ 0,
-                /*.nth   =*/ 0,
-                /*.wsize =*/ cplan->work_size,
-                /*.wdata =*/ cplan->work_data,
-            };
-
-            if (node_n != -1) {
-                /* FINALIZE */
-                struct ggml_tensor * node = cgraph->nodes[node_n];
-                if (GGML_OP_HAS_FINALIZE[node->op]) {
-                    params.nth = ggml_get_n_tasks(node, n_threads, state->shared->n_threads);
-                    ggml_compute_forward(&params, node, state);
-                }
-                ggml_graph_compute_perf_stats_node(node, state->shared);
-            }
-
-            // distribute new work or execute it direct if 1T
-            while (++node_n < cgraph->n_nodes) {
-                GGML_PRINT_DEBUG_5("%s: %d/%d\n", __func__, node_n, cgraph->n_nodes);
-                struct ggml_tensor * node = cgraph->nodes[node_n];
-                const int n_tasks = ggml_get_n_tasks(node, n_threads, state->shared->n_threads);
-
-                state->shared->perf_node_start_cycles  = ggml_perf_cycles();
-                state->shared->perf_node_start_time_us = ggml_perf_time_us();
-
-                params.nth = n_tasks;
-
-                if (n_tasks == 1) {
-                    /* INIT */
-                    if (GGML_OP_HAS_INIT[node->op]) {
-                        params.type = GGML_TASK_TYPE_INIT;
-                        ggml_compute_forward(&params, node, state);
-                    }
-
-                    // TODO: maybe push node_n to the atomic but if other threads see n_tasks is 1,
-                    // they do something more efficient than spinning (?)
-                    params.type = GGML_TASK_TYPE_COMPUTE;
-                    ggml_compute_forward(&params, node, state);
-
-                    if (GGML_OP_HAS_FINALIZE[node->op]) {
-                        params.type = GGML_TASK_TYPE_FINALIZE;
-                        ggml_compute_forward(&params, node, state);
-                    }
-
-                    ggml_graph_compute_perf_stats_node(node, state->shared);
-                } else {
-                    break;
-                }
-
-                if (cplan->abort_callback && cplan->abort_callback(cplan->abort_callback_data)) {
-                    break;
-                }
-            }
-
-            task_phase = GGML_TASK_TYPE_INIT;
-            atomic_store(&state->shared->n_active,  n_threads);
-            atomic_store(&state->shared->node_n,    node_n);
-            atomic_store(&state->shared->node_task, task_phase);
-        } else {
-            ggml_graph_compute_thread_sync_node(&node_n,     state, false);
-            ggml_graph_compute_thread_sync_task(&task_phase, state, false);
-        }
-
-        // check if we should stop
-        if (node_n >= cgraph->n_nodes) break;
-
-        /* INIT & COMPUTE */
-        struct ggml_tensor * node = cgraph->nodes[node_n];
-        const int n_tasks = ggml_get_n_tasks(node, n_threads, state->shared->n_threads);
-
-        struct ggml_compute_params params = {
-            /*.type  =*/ GGML_TASK_TYPE_INIT,
-            /*.ith   =*/ state->ith,
-            /*.nth   =*/ n_tasks,
-            /*.wsize =*/ cplan->work_size,
-            /*.wdata =*/ cplan->work_data,
-        };
-
-        if (state->ith < n_tasks) {
-            if (GGML_OP_HAS_INIT[node->op]) {
-                ggml_compute_forward(&params, node, state);
-            }
-        }
-
-        if (atomic_fetch_sub(&state->shared->n_active, 1) == 1) {
-            task_phase = GGML_TASK_TYPE_COMPUTE;
-            atomic_store(&state->shared->n_active,  n_threads);
-            atomic_store(&state->shared->node_task, task_phase);
-        }
-        else {
-            // TODO: this sched_yield can have significant impact on the performance - either positive or negative
-            //       depending on the workload and the operating system.
-            //       since it is not clear what is the best approach, it should potentially become user-configurable
-            //       ref: https://github.com/ggerganov/ggml/issues/291
-            // UPD:  adding the do_yield flag seems to resolve the issue universally
-            const bool do_yield = node_n < 0 || cgraph->nodes[node_n]->op == GGML_OP_MUL_MAT;
-            ggml_graph_compute_thread_sync_task(&task_phase, state, do_yield);
-        }
-
-        if (state->ith < n_tasks) {
-            params.type = GGML_TASK_TYPE_COMPUTE;
-            ggml_compute_forward(&params, node, state);
-        }
-
-        if (atomic_fetch_sub(&state->shared->n_active, 1) == 1) {
-            task_phase = GGML_TASK_TYPE_FINALIZE;
-            atomic_store(&state->shared->n_active,  n_threads);
-            atomic_store(&state->shared->node_task, task_phase);
-        }
-        else {
-            ggml_graph_compute_thread_sync_task(&task_phase, state, false);
-        }
-    }
-
-    return 0;
-}
-
-struct ggml_cplan ggml_graph_plan(const struct ggml_cgraph * cgraph, int n_threads) {
-    if (n_threads <= 0) {
-        n_threads = GGML_DEFAULT_N_THREADS;
-    }
-
-    size_t work_size = 0;
-
-    struct ggml_cplan cplan;
-    memset(&cplan, 0, sizeof(struct ggml_cplan));
-
-    int max_tasks = 1;
-
-    // thread scheduling for the different operations + work buffer size estimation
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        struct ggml_tensor * node = cgraph->nodes[i];
-
-        const int n_tasks = ggml_get_n_tasks(node, n_threads, 1);
-
-        max_tasks = MAX(max_tasks, n_tasks);
-
-        size_t cur = 0;
-
-        switch (node->op) {
-            case GGML_OP_CPY:
-            case GGML_OP_DUP:
-                {
-                    if (ggml_is_quantized(node->type) ||
-                        // F16 -> BF16 and BF16 -> F16 copies go through intermediate F32
-                        (node->src[0]->type == GGML_TYPE_F16  && node->src[1] && node->src[1]->type == GGML_TYPE_BF16) ||
-                        (node->src[0]->type == GGML_TYPE_BF16 && node->src[1] && node->src[1]->type == GGML_TYPE_F16)) {
-                        cur = ggml_type_size(GGML_TYPE_F32) * node->ne[0] * n_tasks;
-                    }
-                } break;
-            case GGML_OP_ADD:
-            case GGML_OP_ADD1:
-                {
-                    if (ggml_is_quantized(node->src[0]->type)) {
-                        cur = ggml_type_size(GGML_TYPE_F32) * node->src[0]->ne[0] * n_tasks;
-                    }
-                } break;
-            case GGML_OP_ACC:
-                {
-                    if (ggml_is_quantized(node->src[0]->type)) {
-                        cur = ggml_type_size(GGML_TYPE_F32) * node->src[1]->ne[0] * n_tasks;
-                    }
-                } break;
-            case GGML_OP_MUL_MAT:
-                {
-                    const enum ggml_type vec_dot_type = type_traits[node->src[0]->type].vec_dot_type;
-
-                    if (node->src[1]->type != vec_dot_type) {
-                        cur = ggml_row_size(vec_dot_type, ggml_nelements(node->src[1]));
-                    }
-                } break;
-            case GGML_OP_MUL_MAT_ID:
-                {
-                    cur = 0;
-                    const struct ggml_tensor * src0 = node->src[0];
-                    const struct ggml_tensor * src1 = node->src[1];
-                    const enum ggml_type vec_dot_type = type_traits[src0->type].vec_dot_type;
-                    if (src1->type != vec_dot_type) {
-                        cur += ggml_row_size(vec_dot_type, ggml_nelements(src1));
-                    }
-                    const int n_as = src0->ne[2];
-                    cur += GGML_PAD(cur, sizeof(int64_t));       // align
-                    cur += n_as * sizeof(int64_t);               // matrix_row_counts
-                    cur += n_as * src1->ne[2] * sizeof(int64_t); // matrix_rows
-                } break;
-            case GGML_OP_OUT_PROD:
-                {
-                    if (ggml_is_quantized(node->src[0]->type)) {
-                        cur = ggml_type_size(GGML_TYPE_F32) * node->src[0]->ne[0] * n_tasks;
-                    }
-                } break;
-            case GGML_OP_SOFT_MAX:
-            case GGML_OP_ROPE:
-                {
-                    cur = ggml_type_size(GGML_TYPE_F32) * node->ne[0] * n_tasks;
-                } break;
-            case GGML_OP_CONV_TRANSPOSE_1D:
-                {
-                    GGML_ASSERT(node->src[0]->ne[3] == 1);
-                    GGML_ASSERT(node->src[1]->ne[2] == 1);
-                    GGML_ASSERT(node->src[1]->ne[3] == 1);
-
-                    const int64_t ne00 = node->src[0]->ne[0];  // K
-                    const int64_t ne01 = node->src[0]->ne[1];  // Cout
-                    const int64_t ne02 = node->src[0]->ne[2];  // Cin
-
-                    const int64_t ne10 = node->src[1]->ne[0];  // L
-                    const int64_t ne11 = node->src[1]->ne[1];  // Cin
-
-                    if ((node->src[0]->type == GGML_TYPE_F16 ||
-                         node->src[0]->type == GGML_TYPE_BF16) &&
-                        node->src[1]->type == GGML_TYPE_F32) {
-                        cur += sizeof(ggml_fp16_t)*ne00*ne01*ne02;
-                        cur += sizeof(ggml_fp16_t)*ne10*ne11;
-                    } else if (node->src[0]->type == GGML_TYPE_F32 &&
-                               node->src[1]->type == GGML_TYPE_F32) {
-                        cur += sizeof(float)*ne00*ne01*ne02;
-                        cur += sizeof(float)*ne10*ne11;
-                    } else {
-                        GGML_ASSERT(false);
-                    }
-                } break;
-            case GGML_OP_CONV_TRANSPOSE_2D:
-                {
-                    const int64_t ne00 = node->src[0]->ne[0]; // W
-                    const int64_t ne01 = node->src[0]->ne[1]; // H
-                    const int64_t ne02 = node->src[0]->ne[2]; // Channels Out
-                    const int64_t ne03 = node->src[0]->ne[3]; // Channels In
-
-                    const int64_t ne10 = node->src[1]->ne[0]; // W
-                    const int64_t ne11 = node->src[1]->ne[1]; // H
-                    const int64_t ne12 = node->src[1]->ne[2]; // Channels In
-
-                    cur += sizeof(ggml_fp16_t)*ne00*ne01*ne02*ne03;
-                    cur += sizeof(ggml_fp16_t)*ne10*ne11*ne12;
-                } break;
-            case GGML_OP_FLASH_ATTN_EXT:
-                {
-                    const int64_t ne00 = node->src[0]->ne[0]; // D
-
-                    cur = 3*sizeof(float)*ne00*n_tasks; // 3x head size/thread
-                } break;
-            case GGML_OP_FLASH_ATTN_BACK:
-                {
-                    const int64_t    D = node->src[0]->ne[0];
-                    const int64_t ne11 = ggml_up(node->src[1]->ne[1], GGML_SOFT_MAX_UNROLL);
-                    const int64_t mxDn = MAX(D, ne11) * 2; // *2 because of S and SM in ggml_compute_forward_flash_attn_back
-                    if (node->src[1]->type == GGML_TYPE_F32) {
-                        cur  = sizeof(float)*mxDn*n_tasks; // TODO: this can become (n_tasks-1)
-                        cur += sizeof(float)*mxDn*n_tasks; // this is overestimated by x2
-                    } else if (node->src[1]->type == GGML_TYPE_F16) {
-                        cur  = sizeof(float)*mxDn*n_tasks; // TODO: this can become (n_tasks-1)
-                        cur += sizeof(float)*mxDn*n_tasks; // this is overestimated by x2
-                    } else if (node->src[1]->type == GGML_TYPE_BF16) {
-                        cur  = sizeof(float)*mxDn*n_tasks; // TODO: this can become (n_tasks-1)
-                        cur += sizeof(float)*mxDn*n_tasks; // this is overestimated by x2
-                    }
-                } break;
-
-            case GGML_OP_CROSS_ENTROPY_LOSS:
-                {
-                    cur = ggml_type_size(node->type)*(n_tasks + node->src[0]->ne[0]*n_tasks);
-                } break;
-            case GGML_OP_COUNT:
-                {
-                    GGML_ASSERT(false);
-                } break;
-            default:
-                break;
-        }
-
-        work_size = MAX(work_size, cur);
-    }
-
-    if (work_size > 0) {
-        work_size += CACHE_LINE_SIZE*(n_threads - 1);
-    }
-
-    cplan.n_threads = MIN(max_tasks, n_threads);
-    cplan.work_size = work_size;
-    cplan.work_data = NULL;
-
-    return cplan;
-}
-
-static enum ggml_status ggml_graph_compute_parallel(struct ggml_compute_state * workers, int n_threads) {
-    enum ggml_status compute_status = GGML_STATUS_SUCCESS;
-
-#ifdef GGML_USE_OPENMP
-    if (n_threads > 1) {
-        #pragma omp parallel num_threads(n_threads)
-        {
-            #pragma omp single
-            {
-                // update the number of threads from the actual number of threads that we got from OpenMP
-                n_threads = omp_get_num_threads();
-                workers[0].shared->n_threads = n_threads;
-                workers[0].shared->n_active  = n_threads;
-            }
-            ggml_graph_compute_thread(&workers[omp_get_thread_num()]);
-        }
-    } else {
-        ggml_graph_compute_thread(&workers[0]);
-    }
-#else
-    // create thread pool
-    if (n_threads > 1) {
-        for (int j = 1; j < n_threads; ++j) {
-            const int rc = ggml_thread_create(&workers[j].thrd, NULL, ggml_graph_compute_thread, &workers[j]);
-            GGML_ASSERT(rc == 0);
-            UNUSED(rc);
-        }
-    }
-
-    // this is a work thread too
-    ggml_graph_compute_thread(&workers[0]);
-
-    // join or kill thread pool
-    if (n_threads > 1) {
-        for (int j = 1; j < n_threads; j++) {
-            const int rc = ggml_thread_join(workers[j].thrd, NULL);
-            GGML_ASSERT(rc == 0);
-            UNUSED(rc);
-        }
-    }
-#endif
-    // don't leave affinity set on the main thread
-    clear_numa_thread_affinity();
-
-    for (int j = 0; j < n_threads; j++) {
-        if (workers[j].ec != GGML_STATUS_SUCCESS) {
-            compute_status = workers[j].ec;
-            break;
-        }
-    }
-    return compute_status;
-}
-
-enum ggml_status ggml_graph_compute(struct ggml_cgraph * cgraph, struct ggml_cplan * cplan) {
-    {
-        GGML_ASSERT(cplan);
-        GGML_ASSERT(cplan->n_threads > 0);
-
-        if (cplan->work_size > 0) {
-            GGML_ASSERT(cplan->work_data);
-        }
-    }
-
-    int n_threads = cplan->n_threads;
-
-#if defined(GGML_USE_OPENMP)
-    n_threads = MIN(n_threads, omp_get_max_threads());
-#endif
-
-    struct ggml_compute_state_shared state_shared = {
-        /*.cgraph                  =*/ cgraph,
-        /*.cgraph_plan             =*/ cplan,
-        /*.perf_node_start_cycles  =*/ 0,
-        /*.perf_node_start_time_us =*/ 0,
-        /*.n_threads               =*/ n_threads,
-        /*.n_active                =*/ n_threads,
-        /*.node_n                  =*/ -1,
-        /*.node_task               =*/ GGML_TASK_TYPE_FINALIZE,
-        /*.abort_callback          =*/ NULL,
-        /*.abort_callback_data     =*/ NULL,
-        /*.current_chunk;          =*/ 0,
-    };
-    struct ggml_compute_state * workers = alloca(sizeof(struct ggml_compute_state)*n_threads);
-    const int64_t perf_start_cycles  = ggml_perf_cycles();
-    const int64_t perf_start_time_us = ggml_perf_time_us();
-
-    for (int j = 0; j < n_threads; ++j) {
-        workers[j] = (struct ggml_compute_state) {
-            .thrd   = 0,
-            .ith    = j,
-            .shared = &state_shared,
-            .ec     = GGML_STATUS_SUCCESS,
-        };
-    }
-
-    enum ggml_status compute_status = ggml_graph_compute_parallel(workers, n_threads);
-
-    // performance stats (graph)
-    {
-        int64_t perf_cycles_cur  = ggml_perf_cycles()  - perf_start_cycles;
-        int64_t perf_time_us_cur = ggml_perf_time_us() - perf_start_time_us;
-
-        cgraph->perf_runs++;
-        cgraph->perf_cycles  += perf_cycles_cur;
-        cgraph->perf_time_us += perf_time_us_cur;
-
-        GGML_PRINT_DEBUG("%s: perf (%d) - cpu = %.3f / %.3f ms, wall = %.3f / %.3f ms\n",
-                __func__, cgraph->perf_runs,
-                (double) perf_cycles_cur      / (double) ggml_cycles_per_ms(),
-                (double) cgraph->perf_cycles  / (double) ggml_cycles_per_ms() / (double) cgraph->perf_runs,
-                (double) perf_time_us_cur     / 1000.0,
-                (double) cgraph->perf_time_us / 1000.0 / cgraph->perf_runs);
-    }
-
-    return compute_status;
-}
-
-enum ggml_status ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads) {
-    struct ggml_cplan cplan = ggml_graph_plan(cgraph, n_threads);
-
-    struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_WORK_BUFFER, cplan.work_size);
-
-    cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs;
-
-    return ggml_graph_compute(cgraph, &cplan);
-}
-
-struct ggml_tensor * ggml_graph_get_tensor(struct ggml_cgraph * cgraph, const char * name) {
-    for (int i = 0; i < cgraph->n_leafs; i++) {
-        struct ggml_tensor * leaf = cgraph->leafs[i];
-
-        if (strcmp(leaf->name, name) == 0) {
-            return leaf;
-        }
-    }
-
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        struct ggml_tensor * node = cgraph->nodes[i];
-
-        if (strcmp(node->name, name) == 0) {
-            return node;
-        }
-    }
-
-    return NULL;
-}
-
-static void ggml_graph_export_leaf(const struct ggml_tensor * tensor, FILE * fout) {
-    const int64_t * ne = tensor->ne;
-    const size_t  * nb = tensor->nb;
-
-    fprintf(fout, "%-6s %-12s %8d %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %16zu %16zu %16zu %16zu %16p %32s\n",
-            ggml_type_name(tensor->type),
-            ggml_op_name  (tensor->op),
-            ggml_n_dims(tensor),
-            ne[0], ne[1], ne[2], ne[3],
-            nb[0], nb[1], nb[2], nb[3],
-            tensor->data,
-            tensor->name);
-}
-
-static void ggml_graph_export_node(const struct ggml_tensor * tensor, const char * arg, FILE * fout) {
-    const int64_t * ne = tensor->ne;
-    const size_t  * nb = tensor->nb;
-
-    fprintf(fout, "%-6s %-6s %-12s %8d %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %16zu %16zu %16zu %16zu %16p %32s\n",
-            arg,
-            ggml_type_name(tensor->type),
-            ggml_op_name  (tensor->op),
-            ggml_n_dims(tensor),
-            ne[0], ne[1], ne[2], ne[3],
-            nb[0], nb[1], nb[2], nb[3],
-            tensor->data,
-            tensor->name);
-}
-
-void ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname) {
-    uint64_t size_eval = 0;
-
-    // compute size of intermediate results
-    // TODO: does not take into account scratch buffers !!!!
-    for (int i = 0; i < cgraph->n_nodes; ++i) {
-        size_eval += ggml_nbytes_pad(cgraph->nodes[i]);
-    }
-
-    // print
-    {
-        FILE * fout = stdout;
-
-        fprintf(fout, "\n");
-        fprintf(fout, "%-16s %8x\n", "magic",        GGML_FILE_MAGIC);
-        fprintf(fout, "%-16s %8d\n", "version",      GGML_FILE_VERSION);
-        fprintf(fout, "%-16s %8d\n", "leafs",        cgraph->n_leafs);
-        fprintf(fout, "%-16s %8d\n", "nodes",        cgraph->n_nodes);
-        fprintf(fout, "%-16s %" PRIu64 "\n", "eval", size_eval);
-
-        // header
-        fprintf(fout, "\n");
-        fprintf(fout, "%-6s %-12s %8s %8s %8s %8s %8s %16s %16s %16s %16s %16s %16s\n",
-                "TYPE", "OP", "NDIMS", "NE0", "NE1", "NE2", "NE3", "NB0", "NB1", "NB2", "NB3", "DATA", "NAME");
-
-        for (int i = 0; i < cgraph->n_leafs; ++i) {
-            ggml_graph_export_leaf(cgraph->leafs[i], fout);
-
-            GGML_ASSERT(cgraph->leafs[i]->op   == GGML_OP_NONE);
-            GGML_ASSERT(cgraph->leafs[i]->src[0] == NULL);
-            GGML_ASSERT(cgraph->leafs[i]->src[1] == NULL);
-        }
-
-        // header
-        fprintf(fout, "\n");
-        fprintf(fout, "%-6s %-6s %-12s %8s %8s %8s %8s %8s %16s %16s %16s %16s %8s %16s %16s\n",
-                "ARG", "TYPE", "OP", "NDIMS", "NE0", "NE1", "NE2", "NE3", "NB0", "NB1", "NB2", "NB3", "NTASKS", "DATA", "NAME");
-
-        for (int i = 0; i < cgraph->n_nodes; ++i) {
-            ggml_graph_export_node(cgraph->nodes[i], "DST", fout);
-
-            for (int j = 0; j < GGML_MAX_SRC; ++j) {
-                if (cgraph->nodes[i]->src[j]) {
-                    ggml_graph_export_node(cgraph->nodes[i]->src[j], "SRC", fout);
-                }
-            }
-
-            fprintf(fout, "\n");
-        }
-
-        fprintf(fout, "\n");
-    }
-
-    // write binary data
-    {
-        FILE * fout = ggml_fopen(fname, "wb");
-
-        if (!fout) {
-            fprintf(stderr, "%s: failed to open %s\n", __func__, fname);
-            return;
-        }
-
-        // header
-        {
-            const uint32_t magic   = GGML_FILE_MAGIC;
-            const uint32_t version = GGML_FILE_VERSION;
-            const uint32_t n_leafs = cgraph->n_leafs;
-            const uint32_t n_nodes = cgraph->n_nodes;
-
-            fwrite(&magic,     sizeof(uint32_t), 1, fout);
-            fwrite(&version,   sizeof(uint32_t), 1, fout);
-            fwrite(&n_leafs,   sizeof(uint32_t), 1, fout);
-            fwrite(&n_nodes,   sizeof(uint32_t), 1, fout);
-            fwrite(&size_eval, sizeof(uint64_t), 1, fout);
-        }
-
-        // leafs
-        {
-            for (int i = 0; i < cgraph->n_leafs; ++i) {
-                const struct ggml_tensor * tensor = cgraph->leafs[i];
-
-                const uint32_t type   = tensor->type;
-                const uint32_t op     = tensor->op;
-
-                fwrite(&type,   sizeof(uint32_t), 1, fout);
-                fwrite(&op,     sizeof(uint32_t), 1, fout);
-
-                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
-                    const uint64_t ne = tensor->ne[j];
-                    const uint64_t nb = tensor->nb[j];
-
-                    fwrite(&ne, sizeof(uint64_t), 1, fout);
-                    fwrite(&nb, sizeof(uint64_t), 1, fout);
-                }
-
-                fwrite(tensor->name,      sizeof(char), GGML_MAX_NAME,      fout);
-                fwrite(tensor->op_params, sizeof(char), GGML_MAX_OP_PARAMS, fout);
-
-                // dump the data
-                // TODO: pad this to 32 byte boundary
-                {
-                    const size_t size = ggml_nbytes(tensor);
-
-                    fwrite(tensor->data, sizeof(char), size, fout);
-                }
-            }
-        }
-
-        // nodes
-        {
-            for (int i = 0; i < cgraph->n_nodes; ++i) {
-                const struct ggml_tensor * tensor = cgraph->nodes[i];
-
-                const uint32_t type   = tensor->type;
-                const uint32_t op     = tensor->op;
-
-                fwrite(&type,   sizeof(uint32_t), 1, fout);
-                fwrite(&op,     sizeof(uint32_t), 1, fout);
-
-                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
-                    const uint64_t ne = tensor->ne[j];
-                    const uint64_t nb = tensor->nb[j];
-
-                    fwrite(&ne, sizeof(uint64_t), 1, fout);
-                    fwrite(&nb, sizeof(uint64_t), 1, fout);
-                }
-
-                fwrite(tensor->name,      sizeof(char), GGML_MAX_NAME,      fout);
-                fwrite(tensor->op_params, sizeof(char), GGML_MAX_OP_PARAMS, fout);
-
-                // output the op arguments
-                {
-                    struct ggml_tensor * args[GGML_MAX_SRC] = { NULL };
-
-                    for (int j = 0; j < GGML_MAX_SRC; ++j) {
-                        args[j] = tensor->src[j];
-                    }
-
-                    for (int j = 0; j < GGML_MAX_SRC; ++j) {
-                        if (args[j]) {
-                            int32_t idx = -1;
-
-                            // check if leaf
-                            {
-                                for (int k = 0; k < cgraph->n_leafs; ++k) {
-                                    if (args[j] == cgraph->leafs[k]) {
-                                        idx = k;
-                                        break;
-                                    }
-                                }
-                            }
-
-                            // check if node
-                            if (idx == -1) {
-                                for (int k = 0; k < cgraph->n_nodes; ++k) {
-                                    if (args[j] == cgraph->nodes[k]) {
-                                        idx = cgraph->n_leafs + k;
-                                        break;
-                                    }
-                                }
-                            }
-
-                            if (idx == -1) {
-                                fprintf(stderr, "%s: failed to find tensor, arg = %d, node = %d\n", __func__, j, i);
-                                fclose(fout);
-                                return;
-                            }
-
-                            fwrite(&idx, sizeof(int32_t), 1, fout);
-                        } else {
-                            const int32_t nul = -1;
-
-                            fwrite(&nul, sizeof(int32_t), 1, fout);
-                        }
-                    }
-                }
-            }
-        }
-
-        fclose(fout);
-    }
-}
-
-struct ggml_cgraph * ggml_graph_import(const char * fname, struct ggml_context ** ctx_data, struct ggml_context ** ctx_eval) {
-    assert(*ctx_data == NULL);
-    assert(*ctx_eval == NULL);
-
-    struct ggml_cgraph * result = NULL;
-
-    struct ggml_tensor * data = NULL;
-
-    // read file into data
-    {
-        FILE * fin = ggml_fopen(fname, "rb");
-        if (!fin) {
-            fprintf(stderr, "%s: failed to open %s\n", __func__, fname);
-            return result;
-        }
-
-        size_t fsize = 0;
-
-        fseek(fin, 0, SEEK_END);
-        fsize = ftell(fin);
-        fseek(fin, 0, SEEK_SET);
-
-        // create the data context
-        {
-            const size_t overhead = 1*ggml_tensor_overhead();
-
-            struct ggml_init_params params = {
-                .mem_size   = fsize + overhead,
-                .mem_buffer = NULL,
-                .no_alloc   = false,
-            };
-
-            *ctx_data = ggml_init(params);
-
-            if (!*ctx_data) {
-                fprintf(stderr, "%s: failed to create ggml context\n", __func__);
-                fclose(fin);
-                return result;
-            }
-        }
-
-        data = ggml_new_tensor_1d(*ctx_data, GGML_TYPE_I8, fsize);
-
-        {
-            const size_t ret = fread(data->data, sizeof(char), fsize, fin);
-            if (ret != fsize) {
-                fprintf(stderr, "%s: failed to read %s\n", __func__, fname);
-                fclose(fin);
-                return result;
-            }
-        }
-
-        fclose(fin);
-    }
-
-    // populate result
-    {
-        char * ptr = (char *) data->data;
-
-        const uint32_t magic = *(const uint32_t *) ptr; ptr += sizeof(magic);
-
-        if (magic != GGML_FILE_MAGIC) {
-            fprintf(stderr, "%s: invalid magic number, got %08x\n", __func__, magic);
-            return result;
-        }
-
-        const uint32_t version = *(const uint32_t *) ptr; ptr += sizeof(version);
-
-        if (version != GGML_FILE_VERSION) {
-            fprintf(stderr, "%s: invalid version number\n", __func__);
-            return result;
-        }
-
-        const uint32_t n_leafs   = *(const uint32_t *) ptr; ptr += sizeof(n_leafs);
-        const uint32_t n_nodes   = *(const uint32_t *) ptr; ptr += sizeof(n_nodes);
-        const uint64_t size_eval = *(const uint64_t *) ptr; ptr += sizeof(size_eval);
-        const int     graph_size = MAX(n_leafs, n_nodes);
-
-        // create the data context
-        {
-            const size_t overhead = (n_leafs + n_nodes)*ggml_tensor_overhead() + ggml_graph_overhead_custom(graph_size, false);
-
-            struct ggml_init_params params = {
-                .mem_size   = size_eval + overhead,
-                .mem_buffer = NULL,
-                .no_alloc   = true,
-            };
-
-            *ctx_eval = ggml_init(params);
-
-            if (!*ctx_eval) {
-                fprintf(stderr, "%s: failed to create ggml context\n", __func__);
-                return result;
-            }
-        }
-
-        result = ggml_new_graph_custom(*ctx_eval, graph_size, false);
-
-        result->n_leafs = n_leafs;
-        result->n_nodes = n_nodes;
-
-
-        // leafs
-        {
-            uint32_t type;
-            uint32_t op;
-
-            for (uint32_t i = 0; i < n_leafs; ++i) {
-                type   = *(const uint32_t *) ptr; ptr += sizeof(type);
-                op     = *(const uint32_t *) ptr; ptr += sizeof(op);
-
-                int64_t ne[GGML_MAX_DIMS];
-                size_t  nb[GGML_MAX_DIMS];
-
-                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
-                    uint64_t ne_cur;
-                    uint64_t nb_cur;
-
-                    ne_cur = *(const uint64_t *) ptr; ptr += sizeof(ne_cur);
-                    nb_cur = *(const uint64_t *) ptr; ptr += sizeof(nb_cur);
-
-                    ne[j] = ne_cur;
-                    nb[j] = nb_cur;
-                }
-
-                struct ggml_tensor * tensor = ggml_new_tensor(*ctx_eval, (enum ggml_type) type, GGML_MAX_DIMS, ne);
-
-                tensor->op = (enum ggml_op) op;
-
-                memcpy(tensor->name,      ptr, GGML_MAX_NAME);      ptr += GGML_MAX_NAME;
-                memcpy(tensor->op_params, ptr, GGML_MAX_OP_PARAMS); ptr += GGML_MAX_OP_PARAMS;
-
-                tensor->data = (void *) ptr;
-
-                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
-                    tensor->nb[j] = nb[j];
-                }
-
-                result->leafs[i] = tensor;
-
-                ptr += ggml_nbytes(tensor);
-
-                fprintf(stderr, "%s: loaded leaf %u: '%16s', %9zu bytes\n", __func__, i, tensor->name, ggml_nbytes(tensor));
-            }
-        }
-
-        ggml_set_no_alloc(*ctx_eval, false);
-
-        // nodes
-        {
-            uint32_t type;
-            uint32_t op;
-
-            for (uint32_t i = 0; i < n_nodes; ++i) {
-                type   = *(const uint32_t *) ptr; ptr += sizeof(type);
-                op     = *(const uint32_t *) ptr; ptr += sizeof(op);
-
-                enum ggml_op eop = (enum ggml_op) op;
-
-                int64_t ne[GGML_MAX_DIMS];
-                size_t  nb[GGML_MAX_DIMS];
-
-                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
-                    uint64_t ne_cur;
-                    uint64_t nb_cur;
-
-                    ne_cur = *(const uint64_t *) ptr; ptr += sizeof(ne_cur);
-                    nb_cur = *(const uint64_t *) ptr; ptr += sizeof(nb_cur);
-
-                    ne[j] = ne_cur;
-                    nb[j] = nb_cur;
-                }
-
-                const char * ptr_name      = ptr; ptr += GGML_MAX_NAME;
-                const char * ptr_op_params = ptr; ptr += GGML_MAX_OP_PARAMS;
-
-                const int32_t * ptr_arg_idx = (const int32_t *) ptr; ptr += GGML_MAX_SRC*sizeof(int32_t);
-
-                struct ggml_tensor * args[GGML_MAX_SRC] = { NULL };
-
-                // parse args
-                for (int j = 0; j < GGML_MAX_SRC; ++j) {
-                    const int32_t arg_idx = ptr_arg_idx[j];
-
-                    if (arg_idx == -1) {
-                        continue;
-                    }
-
-                    if (arg_idx < result->n_leafs) {
-                        args[j] = result->leafs[arg_idx];
-                    } else {
-                        args[j] = result->nodes[arg_idx - result->n_leafs];
-                    }
-                }
-
-                // create the tensor
-                // "view" operations are handled differently
-                // TODO: handle inplace ops - currently a copy is always made
-
-                struct ggml_tensor * tensor = NULL;
-
-                switch (eop) {
-                    // TODO: implement other view ops
-                    case GGML_OP_RESHAPE:
-                        {
-                            tensor = ggml_reshape_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3]);
-                        } break;
-                    case GGML_OP_VIEW:
-                        {
-                            tensor = ggml_view_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3], 0, 0, 0, 0);
-
-                            size_t offs;
-                            memcpy(&offs, ptr_op_params, sizeof(offs));
-
-                            tensor->data = ((char *) tensor->data) + offs;
-                        } break;
-                    case GGML_OP_TRANSPOSE:
-                        {
-                            tensor = ggml_transpose(*ctx_eval, args[0]);
-                        } break;
-                    case GGML_OP_PERMUTE:
-                        {
-                            tensor = ggml_view_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3], 0, 0, 0, 0);
-                        } break;
-                    default:
-                        {
-                            tensor = ggml_new_tensor(*ctx_eval, (enum ggml_type) type, GGML_MAX_DIMS, ne);
-
-                            tensor->op = eop;
-                        } break;
-                }
-
-                memcpy(tensor->name,      ptr_name,      GGML_MAX_NAME);
-                memcpy(tensor->op_params, ptr_op_params, GGML_MAX_OP_PARAMS);
-
-                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
-                    tensor->nb[j] = nb[j];
-                }
-
-                for (int j = 0; j < GGML_MAX_SRC; ++j) {
-                    tensor->src[j] = args[j];
-                }
-
-                result->nodes[i] = tensor;
-
-                fprintf(stderr, "%s: loaded node %u: '%16s', %9zu bytes\n", __func__, i, tensor->name, ggml_nbytes(tensor));
-            }
-        }
-    }
-
-    return result;
-}
-
-void ggml_graph_print(const struct ggml_cgraph * cgraph) {
-    int64_t perf_total_per_op_us[GGML_OP_COUNT] = {0};
-
-    GGML_PRINT("=== GRAPH ===\n");
-
-    GGML_PRINT("n_nodes = %d\n", cgraph->n_nodes);
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        struct ggml_tensor * node = cgraph->nodes[i];
-
-        perf_total_per_op_us[node->op] += MAX(1, node->perf_time_us);
-
-        GGML_PRINT(" - %3d: [ %5" PRId64 ", %5" PRId64 ", %5" PRId64 "] %16s %s (%3d) cpu = %7.3f / %7.3f ms, wall = %7.3f / %7.3f ms\n",
-                i,
-                node->ne[0], node->ne[1], node->ne[2],
-                ggml_op_name(node->op), (node->flags & GGML_TENSOR_FLAG_PARAM) ? "x" : node->grad ? "g" : " ", node->perf_runs,
-                (double) node->perf_cycles  / (double) ggml_cycles_per_ms(),
-                (double) node->perf_cycles  / (double) ggml_cycles_per_ms() / (double) node->perf_runs,
-                (double) node->perf_time_us / 1000.0,
-                (double) node->perf_time_us / 1000.0 / node->perf_runs);
-    }
-
-    GGML_PRINT("n_leafs = %d\n", cgraph->n_leafs);
-    for (int i = 0; i < cgraph->n_leafs; i++) {
-        struct ggml_tensor * node = cgraph->leafs[i];
-
-        GGML_PRINT(" - %3d: [ %5" PRId64 ", %5" PRId64 "] %8s %16s\n",
-                i,
-                node->ne[0], node->ne[1],
-                ggml_op_name(node->op),
-                ggml_get_name(node));
-    }
-
-    for (int i = 0; i < GGML_OP_COUNT; i++) {
-        if (perf_total_per_op_us[i] == 0) {
-            continue;
-        }
-
-        GGML_PRINT("perf_total_per_op_us[%16s] = %7.3f ms\n", ggml_op_name(i), (double) perf_total_per_op_us[i] / 1000.0);
-    }
-
-    GGML_PRINT("========================================\n");
-}
-
-// check if node is part of the graph
-static bool ggml_graph_find(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node) {
-    if (cgraph == NULL) {
-        return true;
-    }
-
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        if (cgraph->nodes[i] == node) {
-            return true;
-        }
-    }
-
-    return false;
-}
-
-static struct ggml_tensor * ggml_graph_get_parent(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node) {
-    for (int i = 0; i < cgraph->n_nodes; i++) {
-        struct ggml_tensor * parent = cgraph->nodes[i];
-
-        if (parent->grad == node) {
-            return parent;
-        }
-    }
-
-    return NULL;
-}
-
-static void ggml_graph_dump_dot_node_edge(FILE * fp, const struct ggml_cgraph * gb, struct ggml_tensor * node, struct ggml_tensor * parent, const char * label)  {
-    struct ggml_tensor * gparent = ggml_graph_get_parent(gb, node);
-    struct ggml_tensor * gparent0 = ggml_graph_get_parent(gb, parent);
-    fprintf(fp, "  \"%p\":%s -> \"%p\":%s [ arrowhead = %s; style = %s; label = \"%s\"; ]\n",
-            gparent0 ? (void *) gparent0 : (void *) parent,
-            gparent0 ? "g" : "x",
-            gparent ? (void *) gparent : (void *) node,
-            gparent ? "g" : "x",
-            gparent ? "empty" : "vee",
-            gparent ? "dashed" : "solid",
-            label);
-}
-
-static void ggml_graph_dump_dot_leaf_edge(FILE * fp, struct ggml_tensor * node, struct ggml_tensor * parent, const char * label)  {
-    fprintf(fp, "  \"%p\":%s -> \"%p\":%s [ label = \"%s\"; ]\n",
-            (void *) parent, "x",
-            (void *) node, "x",
-            label);
-}
-
-void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename) {
-    char color[16];
-
-    FILE * fp = ggml_fopen(filename, "w");
-    GGML_ASSERT(fp);
-
-    fprintf(fp, "digraph G {\n");
-    fprintf(fp, "  newrank = true;\n");
-    fprintf(fp, "  rankdir = LR;\n");
-
-    for (int i = 0; i < gb->n_nodes; i++) {
-        struct ggml_tensor * node = gb->nodes[i];
-
-        if (ggml_graph_get_parent(gb, node) != NULL) {
-            continue;
-        }
-
-        if (node->flags & GGML_TENSOR_FLAG_PARAM) {
-            snprintf(color, sizeof(color), "yellow");
-        } else if (node->grad) {
-            if (ggml_graph_find(gf, node)) {
-                snprintf(color, sizeof(color), "green");
-            } else {
-                snprintf(color, sizeof(color), "lightblue");
-            }
-        } else {
-            snprintf(color, sizeof(color), "white");
-        }
-
-        fprintf(fp, "  \"%p\" [ "
-                    "style = filled; fillcolor = %s; shape = record; "
-                    "label=\"",
-                (void *) node, color);
-
-        if (strlen(node->name) > 0) {
-            fprintf(fp, "%s (%s)|", node->name, ggml_type_name(node->type));
-        } else {
-            fprintf(fp, "(%s)|", ggml_type_name(node->type));
-        }
-
-        if (ggml_is_matrix(node)) {
-            fprintf(fp, "%d [%" PRId64 ", %" PRId64 "] | <x>%s", i, node->ne[0], node->ne[1], ggml_op_symbol(node->op));
-        } else {
-            fprintf(fp, "%d [%" PRId64 ", %" PRId64 ", %" PRId64 "] | <x>%s", i, node->ne[0], node->ne[1], node->ne[2], ggml_op_symbol(node->op));
-        }
-
-        if (node->grad) {
-            fprintf(fp, " | <g>%s\"; ]\n", ggml_op_symbol(node->grad->op));
-        } else {
-            fprintf(fp, "\"; ]\n");
-        }
-    }
-
-    for (int i = 0; i < gb->n_leafs; i++) {
-        struct ggml_tensor * node = gb->leafs[i];
-
-        snprintf(color, sizeof(color), "pink");
-
-        fprintf(fp, "  \"%p\" [ "
-                    "style = filled; fillcolor = %s; shape = record; "
-                    "label=\"<x>",
-                (void *) node, color);
-
-        if (strlen(node->name) > 0) {
-            fprintf(fp, "%s (%s)|", node->name, ggml_type_name(node->type));
-        } else {
-            fprintf(fp, "(%s)|", ggml_type_name(node->type));
-        }
-
-        fprintf(fp, "CONST %d [%" PRId64 ", %" PRId64 "]", i, node->ne[0], node->ne[1]);
-        if (ggml_nelements(node) < 5) {
-            fprintf(fp, " | (");
-            for (int j = 0; j < ggml_nelements(node); j++) {
-                if (node->type == GGML_TYPE_I8 || node->type == GGML_TYPE_I16 || node->type == GGML_TYPE_I32) {
-                    fprintf(fp, "%d", ggml_get_i32_1d(node, j));
-                }
-                else if (node->type == GGML_TYPE_F32 ||
-                         node->type == GGML_TYPE_F16 ||
-                         node->type == GGML_TYPE_BF16) {
-                    fprintf(fp, "%.1e", (double)ggml_get_f32_1d(node, j));
-                }
-                else {
-                    fprintf(fp, "#");
-                }
-                if (j < ggml_nelements(node) - 1) {
-                    fprintf(fp, ", ");
-                }
-            }
-            fprintf(fp, ")");
-        }
-        fprintf(fp, "\"; ]\n");
-    }
-
-    for (int i = 0; i < gb->n_nodes; i++) {
-        struct ggml_tensor * node = gb->nodes[i];
-
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            if (node->src[j]) {
-                char label[16];
-                snprintf(label, sizeof(label), "src %d", j);
-                ggml_graph_dump_dot_node_edge(fp, gb, node, node->src[j], label);
-            }
-        }
-    }
-
-    for (int i = 0; i < gb->n_leafs; i++) {
-        struct ggml_tensor * node = gb->leafs[i];
-
-        for (int j = 0; j < GGML_MAX_SRC; j++) {
-            if (node->src[j]) {
-                char label[16];
-                snprintf(label, sizeof(label), "src %d", j);
-                ggml_graph_dump_dot_leaf_edge(fp, node, node->src[j], label);
-            }
-        }
-    }
-
-    fprintf(fp, "}\n");
-
-    fclose(fp);
-
-    GGML_PRINT("%s: dot -Tpng %s -o %s.png && open %s.png\n", __func__, filename, filename, filename);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-static void ggml_opt_set_params(int np, struct ggml_tensor * const ps[], const float * x) {
-    int i = 0;
-    for (int p = 0; p < np; ++p) {
-        const int64_t ne = ggml_nelements(ps[p]) ;
-        // TODO: add function to set tensor from array
-        for (int64_t j = 0; j < ne; ++j) {
-            ggml_set_f32_1d(ps[p], j, x[i++]);
-        }
-    }
-}
-
-static void ggml_opt_get_params(int np, struct ggml_tensor * const ps[], float * x) {
-    int i = 0;
-    for (int p = 0; p < np; ++p) {
-        const int64_t ne = ggml_nelements(ps[p]) ;
-        // TODO: add function to get all elements at once
-        for (int64_t j = 0; j < ne; ++j) {
-            x[i++] = ggml_get_f32_1d(ps[p], j);
-        }
-    }
-}
-
-static void ggml_opt_get_grad(int np, struct ggml_tensor * const ps[], float * g) {
-    int64_t i = 0;
-    for (int p = 0; p < np; ++p) {
-        const int64_t ne = ggml_nelements(ps[p]) ;
-        // TODO: add function to get all elements at once
-        for (int64_t j = 0; j < ne; ++j) {
-            g[i++] = ggml_get_f32_1d(ps[p]->grad, j);
-        }
-    }
-}
-
-static void ggml_opt_acc_grad(int np, struct ggml_tensor * const ps[], float * g, float scale) {
-    int64_t i = 0;
-    for (int p = 0; p < np; ++p) {
-        const int64_t ne = ggml_nelements(ps[p]) ;
-        // TODO: add function to get all elements at once
-        for (int64_t j = 0; j < ne; ++j) {
-            g[i++] += ggml_get_f32_1d(ps[p]->grad, j) * scale;
-        }
-    }
-}
-
-//
-// Using AdamW - ref: https://arxiv.org/pdf/1711.05101v3.pdf
-//
-// (Original Adam - ref: https://arxiv.org/pdf/1412.6980.pdf)
-//
-
-static enum ggml_opt_result ggml_opt_adam(
-        struct ggml_context * ctx,
-        struct ggml_opt_context * opt,
-        struct ggml_opt_params params,
-        struct ggml_tensor * f,
-        struct ggml_cgraph * gf,
-        struct ggml_cgraph * gb,
-        ggml_opt_callback callback,
-        void * callback_data) {
-    GGML_ASSERT(ggml_is_scalar(f));
-
-    // these will store the parameters we want to optimize
-    struct ggml_tensor * ps[GGML_MAX_PARAMS];
-
-    int np = 0;
-    int64_t nx = 0;
-    for (int i = 0; i < gf->n_nodes; ++i) {
-        if (gf->nodes[i]->flags & GGML_TENSOR_FLAG_PARAM) {
-            GGML_PRINT_DEBUG("found param %d: grad->op = %d\n", np, gf->nodes[i]->grad->op);
-
-            GGML_ASSERT(np < GGML_MAX_PARAMS);
-
-            ps[np++] = gf->nodes[i];
-            nx += ggml_nelements(gf->nodes[i]);
-        }
-    }
-
-    if ((opt->params.type != params.type) || (opt->nx != nx) || (opt->params.past != params.past)) {
-        int iter = opt->iter;
-        ggml_opt_init(opt->ctx, opt, params, nx);
-        opt->iter = iter;
-    }
-
-    // constants
-    float sched = params.adam.sched;
-    const float alpha = params.adam.alpha;
-    const float decay = params.adam.decay * alpha;
-    const float beta1 = params.adam.beta1;
-    const float beta2 = params.adam.beta2;
-    const float eps   = params.adam.eps;
-    const float gclip = params.adam.gclip;
-    const int decay_min_ndim = params.adam.decay_min_ndim;
-    const int n_accum = MAX(1, params.n_gradient_accumulation);
-    const float accum_norm = 1.0f / (float) n_accum;
-
-    float * g  = opt->adam.g->data;  // gradients
-    float * m  = opt->adam.m->data;  // first moment
-    float * v  = opt->adam.v->data;  // second moment
-
-    float * pf = params.past > 0 ? opt->adam.pf->data : NULL; // past function values
-
-    struct ggml_cplan cplan = ggml_graph_plan(gb, params.n_threads);
-    struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_WORK_BUFFER, cplan.work_size);
-    cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs;
-
-    bool cancel = false;
-
-    // compute the function value
-    float fx = 0;
-    ggml_set_zero(opt->adam.g);
-    for (int accum_step = 0; accum_step < n_accum; ++accum_step) {
-        if (callback) {
-            callback(callback_data, accum_step, &sched, &cancel);
-            if (cancel) {
-                return GGML_OPT_RESULT_CANCEL;
-            }
-        }
-        // ggml_graph_reset  (gf);
-        ggml_set_f32      (f->grad, 1.0f);
-        ggml_graph_compute(gb, &cplan);
-        ggml_opt_acc_grad(np, ps, g, accum_norm);
-        fx += ggml_get_f32_1d(f, 0);
-    }
-    fx *= accum_norm;
-
-    opt->adam.fx_prev = fx;
-    opt->adam.fx_best = opt->adam.fx_prev;
-    if (pf) {
-        pf[opt->iter % params.past] = opt->adam.fx_prev;
-    }
-
-    opt->loss_before = opt->adam.fx_prev;
-    opt->loss_after  = opt->adam.fx_prev;
-
-    // initialize
-    if (opt->just_initialized) {
-        opt->adam.n_no_improvement = 0;
-        opt->just_initialized = false;
-    }
-
-    float * fx_best = &opt->adam.fx_best;
-    float * fx_prev = &opt->adam.fx_prev;
-    int * n_no_improvement = &opt->adam.n_no_improvement;
-
-    int iter0 = opt->iter;
-
-    // run the optimizer
-    for (int t = 0; t < params.adam.n_iter; ++t) {
-        opt->iter = iter0 + t + 1;
-        GGML_PRINT_DEBUG  ("=== iter %d ===\n", t);
-
-        GGML_PRINT_DEBUG  ("f      = %10.6f\n", ggml_get_f32_1d(f, 0));
-        GGML_PRINT_DEBUG_5("df/dx0 = %10.6f\n", ggml_get_f32_1d(ps[0]->grad, 0));
-        GGML_PRINT_DEBUG_5("df/dx1 = %10.6f\n", ggml_get_f32_1d(ps[1]->grad, 0));
-
-        for (int i = 0; i < np; ++i) {
-            GGML_PRINT_DEBUG("param %d: %10.6f, g = %10.6f\n", i,
-                    ggml_get_f32_1d(ps[i], 0), ggml_get_f32_1d(ps[i]->grad, 0));
-        }
-
-        const int64_t t_start_wall = ggml_time_us();
-        const int64_t t_start_cpu = ggml_cycles();
-        UNUSED(t_start_wall);
-        UNUSED(t_start_cpu);
-
-        {
-            float gnorm = 1.0f;
-            if (gclip > 0.0f) {
-                // gradient clipping
-                ggml_float sum = 0.0;
-                for (int64_t i = 0; i < nx; ++i) {
-                    sum += (ggml_float)(g[i]*g[i]);
-                }
-                ggml_float norm = sqrt(sum);
-                if (norm > (ggml_float) gclip) {
-                    gnorm = (float) ((ggml_float) gclip / norm);
-                }
-            }
-            const float beta1h = alpha*sched/(1.0f - powf(beta1, opt->iter));
-            const float beta2h =        1.0f/(1.0f - powf(beta2, opt->iter));
-            int64_t i = 0;
-            for (int p = 0; p < np; ++p) {
-                const int64_t ne = ggml_nelements(ps[p]);
-                const float p_decay = ((ggml_n_dims(ps[p]) >= decay_min_ndim) ? decay : 0.0f) * sched;
-                for (int64_t j = 0; j < ne; ++j) {
-                    float x  = ggml_get_f32_1d(ps[p], j);
-                    float g_ = g[i]*gnorm;
-                    m[i] = m[i]*beta1 +    g_*(1.0f - beta1);
-                    v[i] = v[i]*beta2 + g_*g_*(1.0f - beta2);
-                    float mh = m[i]*beta1h;
-                    float vh = v[i]*beta2h;
-                    vh = sqrtf(vh) + eps;
-                    x  = x*(1.0f - p_decay) - mh/vh;
-                    ggml_set_f32_1d(ps[p], j, x);
-                    ++i;
-                }
-            }
-        }
-
-        fx = 0;
-        ggml_set_zero(opt->adam.g);
-        for (int accum_step = 0; accum_step < n_accum; ++accum_step) {
-            if (callback) {
-                callback(callback_data, accum_step, &sched, &cancel);
-                if (cancel) {
-                    return GGML_OPT_RESULT_CANCEL;;
-                }
-            }
-            // ggml_graph_reset  (gf);
-            ggml_set_f32      (f->grad, 1.0f);
-            ggml_graph_compute(gb, &cplan);
-            ggml_opt_acc_grad(np, ps, g, accum_norm);
-            fx += ggml_get_f32_1d(f, 0);
-        }
-        fx *= accum_norm;
-
-        opt->loss_after = fx;
-
-        // check convergence
-        if (fabsf(fx - fx_prev[0])/fx < params.adam.eps_f) {
-            GGML_PRINT_DEBUG("converged\n");
-
-            return GGML_OPT_RESULT_OK;
-        }
-
-        // delta-based convergence test
-        if (pf != NULL) {
-            // need at least params.past iterations to start checking for convergence
-            if (params.past <= iter0 + t) {
-                const float rate = (pf[(iter0 + t)%params.past] - fx)/fx;
-
-                if (fabsf(rate) < params.delta) {
-                    return GGML_OPT_RESULT_OK;
-                }
-            }
-
-            pf[(iter0 + t)%params.past] = fx;
-        }
-
-        // check for improvement
-        if (params.max_no_improvement > 0) {
-            if (fx_best[0] > fx) {
-                fx_best[0] = fx;
-                n_no_improvement[0] = 0;
-            } else {
-                ++n_no_improvement[0];
-
-                if (n_no_improvement[0] >= params.max_no_improvement) {
-                    return GGML_OPT_RESULT_OK;
-                }
-            }
-        }
-
-        fx_prev[0] = fx;
-
-        {
-            const int64_t t_end_cpu = ggml_cycles();
-            GGML_PRINT_DEBUG("time iter:      %5.3f s\n", ((float)(t_end_cpu - t_start_cpu))/CLOCKS_PER_SEC);
-            UNUSED(t_end_cpu);
-
-            const int64_t t_end_wall = ggml_time_us();
-            GGML_PRINT_DEBUG("wall time iter: %5.3f s\n", (t_end_wall - t_start_wall)/1e6);
-            UNUSED(t_end_wall);
-        }
-    }
-
-    return GGML_OPT_RESULT_DID_NOT_CONVERGE;
-}
-
-//
-// L-BFGS
-//
-// the L-BFGS implementation below is based on the following implementation:
-//
-//   https://github.com/chokkan/liblbfgs
-//
-
-struct ggml_lbfgs_iteration_data {
-    float alpha;
-    float ys;
-    float * s;
-    float * y;
-};
-
-static enum ggml_opt_result linesearch_backtracking(
-        const struct ggml_opt_params * params,
-        int nx,
-        float * x,
-        float * fx,
-        float * g,
-        float * d,
-        float * step,
-        const float * xp,
-        struct ggml_tensor * f,
-        struct ggml_cgraph * gb,
-        struct ggml_cplan  * cplan,
-        const int np,
-        struct ggml_tensor * ps[],
-        bool * cancel,
-        ggml_opt_callback callback,
-        void * callback_data) {
-    int count = 0;
-
-    float width  = 0.0f;
-    float dg     = 0.0f;
-    float finit  = 0.0f;
-    float dginit = 0.0f;
-    float dgtest = 0.0f;
-
-    const float dec = 0.5f;
-    const float inc = 2.1f;
-
-    const int n_accum = MAX(1, params->n_gradient_accumulation);
-    const float accum_norm = 1.0f / (float) n_accum;
-
-    if (*step <= 0.f) {
-        return GGML_LINESEARCH_INVALID_PARAMETERS;
-    }
-
-    // compute the initial gradient in the search direction
-    ggml_vec_dot_f32(nx, &dginit, 0, g, 0, d, 0, 1);
-
-    // make sure that d points to a descent direction
-    if (0 < dginit) {
-        return GGML_LINESEARCH_FAIL;
-    }
-
-    // initialize local variables
-    finit = *fx;
-    dgtest = params->lbfgs.ftol*dginit;
-
-    while (true) {
-        ggml_vec_cpy_f32(nx, x, xp);
-        ggml_vec_mad_f32(nx, x, d, *step);
-
-        // evaluate the function and gradient values
-        {
-            ggml_opt_set_params(np, ps, x);
-
-            *fx = 0;
-            memset(g, 0, sizeof(float)*nx);
-            for (int accum_step = 0; accum_step < n_accum; ++accum_step) {
-                if (callback) {
-                    // LBFG-S does not support learning rate -> ignore learning schedule
-                    float sched = 0;
-                    callback(callback_data, accum_step, &sched, cancel);
-                    if (*cancel) {
-                        return GGML_OPT_RESULT_CANCEL;
-                    }
-                }
-                // ggml_graph_reset  (gf);
-                ggml_set_f32      (f->grad, 1.0f);
-                ggml_graph_compute(gb, cplan);
-                ggml_opt_acc_grad(np, ps, g, accum_norm);
-                *fx += ggml_get_f32_1d(f, 0);
-            }
-            *fx *= accum_norm;
-
-        }
-
-        ++count;
-
-        if (*fx > finit + (*step)*dgtest) {
-            width = dec;
-        } else {
-            // Armijo condition is satisfied
-            if (params->lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_ARMIJO) {
-                return count;
-            }
-
-            ggml_vec_dot_f32(nx, &dg, 0, g, 0, d, 0, 1);
-
-            // check the Wolfe condition
-            if (dg < params->lbfgs.wolfe * dginit) {
-                width = inc;
-            } else {
-                if(params->lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_WOLFE) {
-                    // regular Wolfe conditions
-                    return count;
-                }
-
-                if(dg > -params->lbfgs.wolfe*dginit) {
-                    width = dec;
-                } else {
-                    // strong Wolfe condition (GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE)
-                    return count;
-                }
-            }
-        }
-
-        if (*step < params->lbfgs.min_step) {
-            return GGML_LINESEARCH_MINIMUM_STEP;
-        }
-        if (*step > params->lbfgs.max_step) {
-            return GGML_LINESEARCH_MAXIMUM_STEP;
-        }
-        if (params->lbfgs.max_linesearch <= count) {
-            return GGML_LINESEARCH_MAXIMUM_ITERATIONS;
-        }
-
-        (*step) *= width;
-    }
-
-    GGML_ASSERT(false && "line search failed");
-
-    return GGML_LINESEARCH_FAIL;
-}
-
-static enum ggml_opt_result ggml_opt_lbfgs(
-        struct ggml_context * ctx,
-        struct ggml_opt_context * opt,
-        struct ggml_opt_params params,
-        struct ggml_tensor * f,
-        struct ggml_cgraph * gf,
-        struct ggml_cgraph * gb,
-        ggml_opt_callback callback,
-        void * callback_data) {
-    if (params.lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_WOLFE ||
-        params.lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE) {
-        if (params.lbfgs.wolfe <= params.lbfgs.ftol || 1.f <= params.lbfgs.wolfe) {
-            return GGML_OPT_RESULT_INVALID_WOLFE;
-        }
-    }
-
-    const int m = params.lbfgs.m;
-
-    // these will store the parameters we want to optimize
-    struct ggml_tensor * ps[GGML_MAX_PARAMS];
-
-    int np = 0;
-    int nx = 0;
-    for (int i = 0; i < gf->n_nodes; ++i) {
-        if (gf->nodes[i]->flags & GGML_TENSOR_FLAG_PARAM) {
-            GGML_PRINT_DEBUG("found param %d: grad->op = %d\n", np, gf->nodes[i]->grad->op);
-
-            GGML_ASSERT(np < GGML_MAX_PARAMS);
-
-            ps[np++] = gf->nodes[i];
-            nx += ggml_nelements(gf->nodes[i]);
-        }
-    }
-
-    if ((opt->params.type != params.type) || (opt->nx != nx) || (opt->params.past != params.past) || (opt->params.lbfgs.m != params.lbfgs.m)) {
-        int iter = opt->iter;
-        ggml_opt_init(ctx, opt, params, nx);
-        opt->iter = iter;
-    }
-
-    struct ggml_cplan cplan = ggml_graph_plan(gb, params.n_threads);
-    struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_WORK_BUFFER, cplan.work_size);
-    cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs;
-
-    float * x  = opt->lbfgs.x->data;  // current parameters
-    float * xp = opt->lbfgs.xp->data; // previous parameters
-    float * g  = opt->lbfgs.g->data;  // current gradient
-    float * gp = opt->lbfgs.gp->data; // previous gradient
-    float * d  = opt->lbfgs.d->data;  // search direction
-
-    float * pf = params.past > 0 ? opt->lbfgs.pf->data : NULL; // past function values
-
-    const int n_accum = MAX(1, params.n_gradient_accumulation);
-    const float accum_norm = 1.0f / (float) n_accum;
-
-    float fx    = 0.0f; // cost function value
-    float xnorm = 0.0f; // ||x||
-    float gnorm = 0.0f; // ||g||
-
-    // initialize x from the graph nodes
-    ggml_opt_get_params(np, ps, x);
-
-    // the L-BFGS memory
-    float * lm_alpha = opt->lbfgs.lmal->data;
-    float * lm_ys    = opt->lbfgs.lmys->data;
-    float * lm_s     = opt->lbfgs.lms->data;
-    float * lm_y     = opt->lbfgs.lmy->data;
-
-    bool cancel = false;
-
-    // evaluate the function value and its gradient
-    {
-        ggml_opt_set_params(np, ps, x);
-
-        fx = 0;
-        memset(g, 0, sizeof(float)*nx);
-        for (int accum_step = 0; accum_step < n_accum; ++accum_step) {
-            if (callback) {
-                // LBFG-S does not support learning rate -> ignore learning schedule
-                float sched = 0;
-                callback(callback_data, accum_step, &sched, &cancel);
-                if (cancel) {
-                    return GGML_OPT_RESULT_CANCEL;
-                }
-            }
-            // ggml_graph_reset  (gf);
-            ggml_set_f32      (f->grad, 1.0f);
-            ggml_graph_compute(gb, &cplan);
-            ggml_opt_acc_grad(np, ps, g, accum_norm);
-            fx += ggml_get_f32_1d(f, 0);
-        }
-        fx *= accum_norm;
-
-        opt->loss_before = fx;
-        opt->loss_after  = fx;
-    }
-
-    // search direction = -gradient
-    ggml_vec_neg_f32(nx, d, g);
-
-    // ||x||, ||g||
-    ggml_vec_norm_f32(nx, &xnorm, x);
-    ggml_vec_norm_f32(nx, &gnorm, g);
-
-    if (xnorm < 1.0f) {
-        xnorm = 1.0f;
-    }
-
-    // already optimized
-    if (gnorm/xnorm <= params.lbfgs.eps) {
-        return GGML_OPT_RESULT_OK;
-    }
-
-    if (opt->just_initialized) {
-        if (pf) {
-            pf[0] = fx;
-        }
-        opt->lbfgs.fx_best = fx;
-
-        // initial step
-        ggml_vec_norm_inv_f32(nx, &opt->lbfgs.step, d);
-        opt->lbfgs.j                = 0;
-        opt->lbfgs.k                = 1;
-        opt->lbfgs.end              = 0;
-        opt->lbfgs.n_no_improvement = 0;
-        opt->just_initialized       = false;
-    }
-
-    float * fx_best        = &opt->lbfgs.fx_best;
-    float * step           = &opt->lbfgs.step;
-    int * j                = &opt->lbfgs.j;
-    int * k                = &opt->lbfgs.k;
-    int * end              = &opt->lbfgs.end;
-    int * n_no_improvement = &opt->lbfgs.n_no_improvement;
-
-    int ls     = 0;
-    int bound  = 0;
-
-    float ys   = 0.0f;
-    float yy   = 0.0f;
-    float beta = 0.0f;
-
-    int it = 0;
-
-    while (true) {
-        // store the current position and gradient vectors
-        ggml_vec_cpy_f32(nx, xp, x);
-        ggml_vec_cpy_f32(nx, gp, g);
-
-        // TODO: instead of passing &cancel here, use the return code of the linesearch
-        //       to determine if the optimization should be cancelled
-        //       this is a simple change, but not doing this atm, since I don't have a nice
-        //       way to test and don't want to break something with so many changes lined up
-        ls = linesearch_backtracking(&params, nx, x, &fx, g, d, step, xp, f, gb, &cplan, np, ps, &cancel, callback, callback_data);
-        if (cancel) {
-            return GGML_OPT_RESULT_CANCEL;
-        }
-
-        if (ls < 0) {
-            // linesearch failed - go back to the previous point and return
-            ggml_vec_cpy_f32(nx, x, xp);
-            ggml_vec_cpy_f32(nx, g, gp);
-
-            return ls;
-        }
-
-        opt->loss_after = fx;
-
-        ggml_vec_norm_f32(nx, &xnorm, x);
-        ggml_vec_norm_f32(nx, &gnorm, g);
-
-        GGML_PRINT_DEBUG("f = %10.6f\n", ggml_get_f32_1d(f, 0));
-
-        if (xnorm < 1.0f) {
-            xnorm = 1.0f;
-        }
-        if (gnorm/xnorm <= params.lbfgs.eps) {
-            // converged
-            return GGML_OPT_RESULT_OK;
-        }
-
-        // delta-based convergence test
-        if (pf != NULL) {
-            // need at least params.past iterations to start checking for convergence
-            if (params.past <= k[0]) {
-                const float rate = (pf[k[0]%params.past] - fx)/fx;
-
-                if (fabsf(rate) < params.delta) {
-                    return GGML_OPT_RESULT_OK;
-                }
-            }
-
-            pf[k[0]%params.past] = fx;
-        }
-
-        // check for improvement
-        if (params.max_no_improvement > 0) {
-            if (fx < fx_best[0]) {
-                fx_best[0] = fx;
-                n_no_improvement[0] = 0;
-            } else {
-                n_no_improvement[0]++;
-
-                if (n_no_improvement[0] >= params.max_no_improvement) {
-                    return GGML_OPT_RESULT_OK;
-                }
-            }
-        }
-
-        if (params.lbfgs.n_iter != 0 && params.lbfgs.n_iter < it + 1) {
-            // reached the maximum number of iterations
-            return GGML_OPT_RESULT_DID_NOT_CONVERGE;
-        }
-
-        // update vectors s and y:
-        //   s_{k+1} = x_{k+1} - x_{k} = \step * d_{k}.
-        //   y_{k+1} = g_{k+1} - g_{k}.
-        //
-        ggml_vec_sub_f32(nx, &lm_s[end[0]*nx], x, xp);
-        ggml_vec_sub_f32(nx, &lm_y[end[0]*nx], g, gp);
-
-        // compute scalars ys and yy:
-        //     ys = y^t \cdot s    -> 1 / \rho.
-        //     yy = y^t \cdot y.
-        //
-        ggml_vec_dot_f32(nx, &ys, 0, &lm_y[end[0]*nx], 0, &lm_s[end[0]*nx], 0, 1);
-        ggml_vec_dot_f32(nx, &yy, 0, &lm_y[end[0]*nx], 0, &lm_y[end[0]*nx], 0, 1);
-
-        lm_ys[end[0]] = ys;
-
-        // find new search direction
-        //   ref: https://en.wikipedia.org/wiki/Limited-memory_BFGS
-
-        bound = (m <= k[0]) ? m : k[0];
-        k[0]++;
-        it++;
-        end[0] = (end[0] + 1)%m;
-
-        // initialize search direction with -g
-        ggml_vec_neg_f32(nx, d, g);
-
-        j[0] = end[0];
-        for (int i = 0; i < bound; ++i) {
-            j[0] = (j[0] + m - 1) % m;
-            // \alpha_{j} = \rho_{j} s^{t}_{j} \cdot q_{k+1}
-            ggml_vec_dot_f32(nx, &lm_alpha[j[0]], 0, &lm_s[j[0]*nx], 0, d, 0, 1);
-            lm_alpha[j[0]] /= lm_ys[j[0]];
-            // q_{i} = q_{i+1} - \alpha_{i} y_{i}
-            ggml_vec_mad_f32(nx, d, &lm_y[j[0]*nx], -lm_alpha[j[0]]);
-        }
-
-        ggml_vec_scale_f32(nx, d, ys/yy);
-
-        for (int i = 0; i < bound; ++i) {
-            // \beta_{j} = \rho_{j} y^t_{j} \cdot \gamma_{i}
-            ggml_vec_dot_f32(nx, &beta, 0, &lm_y[j[0]*nx], 0, d, 0, 1);
-            beta /= lm_ys[j[0]];
-            // \gamma_{i+1} = \gamma_{i} + (\alpha_{j} - \beta_{j}) s_{j}
-            ggml_vec_mad_f32(nx, d, &lm_s[j[0]*nx], lm_alpha[j[0]] - beta);
-            j[0] = (j[0] + 1)%m;
-        }
-
-        step[0] = 1.0;
-    }
-
-    GGML_ASSERT(false && "lbfgs failed");
-
-    return GGML_OPT_RESULT_DID_NOT_CONVERGE;
-}
-
-struct ggml_opt_params ggml_opt_default_params(enum ggml_opt_type type) {
-    struct ggml_opt_params result;
-
-    switch (type) {
-        case GGML_OPT_TYPE_ADAM:
-            {
-                result = (struct ggml_opt_params) {
-                    .type       = GGML_OPT_TYPE_ADAM,
-                    .graph_size = GGML_DEFAULT_GRAPH_SIZE,
-                    .n_threads  = 1, // FIXME: GGML_DEFAULT_N_THREADS ?
-                    .past       = 0,
-                    .delta      = 1e-5f,
-
-                    .max_no_improvement = 100,
-
-                    .print_forward_graph  = true,
-                    .print_backward_graph = true,
-
-                    .n_gradient_accumulation = 1,
-
-                    .adam = {
-                        .n_iter = 10000,
-                        .sched  = 1.000f,
-                        .decay  = 0.0f,
-                        .decay_min_ndim = 2,
-                        .alpha  = 0.001f,
-                        .beta1  = 0.9f,
-                        .beta2  = 0.999f,
-                        .eps    = 1e-8f,
-                        .eps_f  = 1e-5f,
-                        .eps_g  = 1e-3f,
-                        .gclip  = 0.0f,
-                    },
-                };
-            } break;
-        case GGML_OPT_TYPE_LBFGS:
-            {
-                result = (struct ggml_opt_params) {
-                    .type       = GGML_OPT_TYPE_LBFGS,
-                    .graph_size = GGML_DEFAULT_GRAPH_SIZE,
-                    .n_threads  = 1,
-                    .past       = 0,
-                    .delta      = 1e-5f,
-
-                    .max_no_improvement = 0,
-
-                    .print_forward_graph  = true,
-                    .print_backward_graph = true,
-
-                    .n_gradient_accumulation = 1,
-
-                    .lbfgs = {
-                        .m              = 6,
-                        .n_iter         = 100,
-                        .max_linesearch = 20,
-
-                        .eps      = 1e-5f,
-                        .ftol     = 1e-4f,
-                        .wolfe    = 0.9f,
-                        .min_step = 1e-20f,
-                        .max_step = 1e+20f,
-
-                        .linesearch = GGML_LINESEARCH_DEFAULT,
-                    },
-                };
-            } break;
-    }
-
-    return result;
-}
-
-GGML_API void ggml_opt_init(
-        struct ggml_context * ctx,
-        struct ggml_opt_context * opt,
-        struct ggml_opt_params params,
-        int64_t nx) {
-    opt->ctx = ctx;
-    opt->params = params;
-    opt->iter = 0;
-    opt->nx = nx;
-    opt->just_initialized = true;
-    if (opt->ctx == NULL) {
-        struct ggml_init_params ctx_opt_params;
-        if (opt->params.type == GGML_OPT_TYPE_ADAM) {
-            ctx_opt_params.mem_size = GGML_MEM_ALIGN*3 + ggml_tensor_overhead()*3 + ggml_type_size(GGML_TYPE_F32)*nx*3;
-            if (opt->params.past > 0) {
-                ctx_opt_params.mem_size += GGML_MEM_ALIGN + ggml_tensor_overhead() + ggml_type_size(GGML_TYPE_F32)*opt->params.past;
-            }
-        } else if (opt->params.type == GGML_OPT_TYPE_LBFGS) {
-            ctx_opt_params.mem_size = GGML_MEM_ALIGN*9 + ggml_tensor_overhead()*9 + ggml_type_size(GGML_TYPE_F32)*(nx*5 + opt->params.lbfgs.m*2 + nx*opt->params.lbfgs.m*2);
-            if (opt->params.past > 0) {
-                ctx_opt_params.mem_size += GGML_MEM_ALIGN + ggml_tensor_overhead() + ggml_type_size(GGML_TYPE_F32)*opt->params.past;
-            }
-        }
-        ctx_opt_params.mem_buffer = NULL;
-        ctx_opt_params.no_alloc   = false;
-
-        opt->ctx = ggml_init(ctx_opt_params);
-    }
-    switch (opt->params.type) {
-        case GGML_OPT_TYPE_ADAM:
-            {
-                opt->adam.g  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
-                opt->adam.m  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
-                opt->adam.v  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
-                opt->adam.pf = params.past > 0
-                    ? ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.past)
-                    : NULL;
-                ggml_set_zero(opt->adam.m);
-                ggml_set_zero(opt->adam.v);
-                if (opt->adam.pf) {
-                    ggml_set_zero(opt->adam.pf);
-                }
-            } break;
-        case GGML_OPT_TYPE_LBFGS:
-            {
-                opt->lbfgs.x  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
-                opt->lbfgs.xp = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
-                opt->lbfgs.g  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
-                opt->lbfgs.gp = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
-                opt->lbfgs.d  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
-                opt->lbfgs.pf = params.past > 0
-                    ? ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.past)
-                    : NULL;
-                opt->lbfgs.lmal = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.lbfgs.m);
-                opt->lbfgs.lmys = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.lbfgs.m);
-                opt->lbfgs.lms  = ggml_new_tensor_2d(opt->ctx, GGML_TYPE_F32, nx, params.lbfgs.m);
-                opt->lbfgs.lmy  = ggml_new_tensor_2d(opt->ctx, GGML_TYPE_F32, nx, params.lbfgs.m);
-                ggml_set_zero(opt->lbfgs.x);
-                ggml_set_zero(opt->lbfgs.xp);
-                ggml_set_zero(opt->lbfgs.g);
-                ggml_set_zero(opt->lbfgs.gp);
-                ggml_set_zero(opt->lbfgs.d);
-                if (opt->lbfgs.pf) {
-                    ggml_set_zero(opt->lbfgs.pf);
-                }
-                ggml_set_zero(opt->lbfgs.lmal);
-                ggml_set_zero(opt->lbfgs.lmys);
-                ggml_set_zero(opt->lbfgs.lms);
-                ggml_set_zero(opt->lbfgs.lmy);
-            } break;
-    }
-}
-
-enum ggml_opt_result ggml_opt(
-        struct ggml_context * ctx,
-        struct ggml_opt_params params,
-        struct ggml_tensor * f) {
-    bool free_ctx = false;
-    if (ctx == NULL) {
-        struct ggml_init_params params_ctx = {
-            .mem_size   = 16*1024*1024,
-            .mem_buffer = NULL,
-            .no_alloc   = false,
-        };
-
-        ctx = ggml_init(params_ctx);
-        if (ctx == NULL) {
-            return GGML_OPT_RESULT_NO_CONTEXT;
-        }
-
-        free_ctx = true;
-    }
-
-    enum ggml_opt_result result = GGML_OPT_RESULT_OK;
-
-    struct ggml_opt_context * opt = (struct ggml_opt_context *) alloca(sizeof(struct ggml_opt_context));
-
-    ggml_opt_init(ctx, opt, params, 0);
-    result = ggml_opt_resume(ctx, opt, f);
-
-    if (free_ctx) {
-        ggml_free(ctx);
-    }
-
-    return result;
-}
-
-enum ggml_opt_result ggml_opt_resume(
-        struct ggml_context * ctx,
-        struct ggml_opt_context * opt,
-        struct ggml_tensor * f) {
-
-    // build forward + backward compute graphs
-    struct ggml_cgraph * gf = ggml_new_graph_custom(ctx, opt->params.graph_size, true);
-    ggml_build_forward_expand(gf, f);
-
-    struct ggml_cgraph * gb = ggml_graph_dup(ctx, gf);
-    ggml_build_backward_expand(ctx, gf, gb, true);
-
-    return ggml_opt_resume_g(ctx, opt, f, gf, gb, NULL, NULL);
-}
-
-enum ggml_opt_result ggml_opt_resume_g(
-        struct ggml_context * ctx,
-        struct ggml_opt_context * opt,
-        struct ggml_tensor * f,
-        struct ggml_cgraph * gf,
-        struct ggml_cgraph * gb,
-        ggml_opt_callback callback,
-        void * callback_data) {
-
-    // build forward + backward compute graphs
-    enum ggml_opt_result result = GGML_OPT_RESULT_OK;
-
-    switch (opt->params.type) {
-        case GGML_OPT_TYPE_ADAM:
-            {
-                result = ggml_opt_adam(ctx, opt, opt->params, f, gf, gb, callback, callback_data);
-            } break;
-        case GGML_OPT_TYPE_LBFGS:
-            {
-                result = ggml_opt_lbfgs(ctx, opt, opt->params, f, gf, gb, callback, callback_data);
-            } break;
-    }
-
-    if (opt->params.print_forward_graph) {
-        ggml_graph_print   (gf);
-        ggml_graph_dump_dot(gf, NULL, "opt-forward.dot");
-    }
-
-    if (opt->params.print_backward_graph) {
-        ggml_graph_print   (gb);
-        ggml_graph_dump_dot(gb, gf, "opt-backward.dot");
-    }
-
-    return result;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-void ggml_set_input(struct ggml_tensor * tensor) {
-    tensor->flags |= GGML_TENSOR_FLAG_INPUT;
-}
-
-void ggml_set_output(struct ggml_tensor * tensor) {
-    tensor->flags |= GGML_TENSOR_FLAG_OUTPUT;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-void ggml_quantize_init(enum ggml_type type) {
-    ggml_critical_section_start();
-
-    switch (type) {
-        case GGML_TYPE_IQ2_XXS:
-        case GGML_TYPE_IQ2_XS:
-        case GGML_TYPE_IQ2_S:
-        case GGML_TYPE_IQ1_S:
-        case GGML_TYPE_IQ1_M:   iq2xs_init_impl(type); break;
-        case GGML_TYPE_IQ3_XXS: iq3xs_init_impl(256); break;
-        case GGML_TYPE_IQ3_S:   iq3xs_init_impl(512); break;
-        default: // nothing
-            break;
-    }
-
-    ggml_critical_section_end();
-}
-
-void ggml_quantize_free(void) {
-    ggml_critical_section_start();
-
-    iq2xs_free_impl(GGML_TYPE_IQ2_XXS);
-    iq2xs_free_impl(GGML_TYPE_IQ2_XS);
-    iq2xs_free_impl(GGML_TYPE_IQ1_S);
-    iq3xs_free_impl(256);
-
-    ggml_critical_section_end();
-}
-
-bool ggml_quantize_requires_imatrix(enum ggml_type type) {
-    return
-        type == GGML_TYPE_IQ2_XXS ||
-        type == GGML_TYPE_IQ2_XS  ||
-        type == GGML_TYPE_IQ1_S;//   ||
-        //type == GGML_TYPE_IQ1_M;
-}
-
-size_t ggml_quantize_chunk(
-        enum ggml_type   type,
-           const float * src,
-                  void * dst,
-               int64_t   start,
-               int64_t   nrows,
-               int64_t   n_per_row,
-           const float * imatrix) {
-    const int64_t n = (int64_t) nrows * n_per_row;
-
-    if (ggml_quantize_requires_imatrix(type)) {
-        GGML_ASSERT(imatrix != NULL);
-    }
-
-    GGML_ASSERT(start % type_traits[type].blck_size == 0);
-    GGML_ASSERT(start % n_per_row == 0);
-
-    ggml_quantize_init(type); // this is noop if already initialized
-
-    const size_t start_row = start / n_per_row;
-    const size_t row_size  = ggml_row_size(type, n_per_row);
-
-    size_t result = 0;
-
-    switch (type) {
-        case GGML_TYPE_Q4_0:    result = quantize_q4_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_Q4_1:    result = quantize_q4_1(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_Q5_0:    result = quantize_q5_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_Q5_1:    result = quantize_q5_1(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_Q8_0:    result = quantize_q8_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_Q2_K:    result = quantize_q2_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_Q3_K:    result = quantize_q3_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_Q4_K:    result = quantize_q4_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_Q5_K:    result = quantize_q5_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_Q6_K:    result = quantize_q6_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_IQ2_XXS: result = quantize_iq2_xxs(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_IQ2_XS:  result = quantize_iq2_xs (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_IQ3_XXS: result = quantize_iq3_xxs(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_IQ3_S:   result = quantize_iq3_s  (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_IQ2_S:   result = quantize_iq2_s  (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_IQ1_S:   result = quantize_iq1_s  (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_IQ1_M:   result = quantize_iq1_m  (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_IQ4_NL:  result = quantize_iq4_nl (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_IQ4_XS:  result = quantize_iq4_xs (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
-        case GGML_TYPE_F16:
-            {
-                size_t elemsize = sizeof(ggml_fp16_t);
-                ggml_fp32_to_fp16_row(src + start, (ggml_fp16_t *)dst + start, n);
-                result = n * elemsize;
-            } break;
-        case GGML_TYPE_BF16:
-            {
-                size_t elemsize = sizeof(ggml_bf16_t);
-                ggml_fp32_to_bf16_row(src + start, (ggml_bf16_t *)dst + start, n);
-                result = n * elemsize;
-            } break;
-        case GGML_TYPE_F32:
-            {
-                size_t elemsize = sizeof(float);
-                result = n * elemsize;
-                memcpy((uint8_t *)dst + start * elemsize, src + start, result);
-            } break;
-        default:
-            assert(false);
-    }
-
-    GGML_ASSERT(result == nrows * row_size);
-
-    return result;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-struct gguf_str {
-    uint64_t n;  // GGUFv2
-    char * data;
-};
-
-static const size_t GGUF_TYPE_SIZE[GGUF_TYPE_COUNT] = {
-    [GGUF_TYPE_UINT8]   = sizeof(uint8_t),
-    [GGUF_TYPE_INT8]    = sizeof(int8_t),
-    [GGUF_TYPE_UINT16]  = sizeof(uint16_t),
-    [GGUF_TYPE_INT16]   = sizeof(int16_t),
-    [GGUF_TYPE_UINT32]  = sizeof(uint32_t),
-    [GGUF_TYPE_INT32]   = sizeof(int32_t),
-    [GGUF_TYPE_FLOAT32] = sizeof(float),
-    [GGUF_TYPE_BOOL]    = sizeof(bool),
-    [GGUF_TYPE_STRING]  = sizeof(struct gguf_str),
-    [GGUF_TYPE_UINT64]  = sizeof(uint64_t),
-    [GGUF_TYPE_INT64]   = sizeof(int64_t),
-    [GGUF_TYPE_FLOAT64] = sizeof(double),
-    [GGUF_TYPE_ARRAY]   = 0, // undefined
-};
-static_assert(GGUF_TYPE_COUNT == 13, "GGUF_TYPE_COUNT != 13");
-
-static const char * GGUF_TYPE_NAME[GGUF_TYPE_COUNT] = {
-    [GGUF_TYPE_UINT8]   = "u8",
-    [GGUF_TYPE_INT8]    = "i8",
-    [GGUF_TYPE_UINT16]  = "u16",
-    [GGUF_TYPE_INT16]   = "i16",
-    [GGUF_TYPE_UINT32]  = "u32",
-    [GGUF_TYPE_INT32]   = "i32",
-    [GGUF_TYPE_FLOAT32] = "f32",
-    [GGUF_TYPE_BOOL]    = "bool",
-    [GGUF_TYPE_STRING]  = "str",
-    [GGUF_TYPE_ARRAY]   = "arr",
-    [GGUF_TYPE_UINT64]  = "u64",
-    [GGUF_TYPE_INT64]   = "i64",
-    [GGUF_TYPE_FLOAT64] = "f64",
-};
-static_assert(GGUF_TYPE_COUNT == 13, "GGUF_TYPE_COUNT != 13");
-
-union gguf_value {
-    uint8_t  uint8;
-    int8_t   int8;
-    uint16_t uint16;
-    int16_t  int16;
-    uint32_t uint32;
-    int32_t  int32;
-    float    float32;
-    uint64_t uint64;
-    int64_t  int64;
-    double   float64;
-    bool     bool_;
-
-    struct gguf_str str;
-
-    struct {
-        enum gguf_type type;
-
-        uint64_t n;  // GGUFv2
-        void * data;
-    } arr;
-};
-
-struct gguf_kv {
-    struct gguf_str key;
-
-    enum  gguf_type  type;
-    union gguf_value value;
-};
-
-struct gguf_header {
-    char magic[4];
-
-    uint32_t version;
-    uint64_t n_tensors; // GGUFv2
-    uint64_t n_kv;      // GGUFv2
-};
-
-struct gguf_tensor_info {
-    struct gguf_str name;
-
-    uint32_t n_dims;
-    uint64_t ne[GGML_MAX_DIMS];
-
-    enum ggml_type type;
-
-    uint64_t offset; // offset from start of `data`, must be a multiple of `ALIGNMENT`
-
-    // for writing API
-    const void * data;
-    size_t size;
-};
-
-struct gguf_context {
-    struct gguf_header header;
-
-    struct gguf_kv          * kv;
-    struct gguf_tensor_info * infos;
-
-    size_t alignment;
-    size_t offset;    // offset of `data` from beginning of file
-    size_t size;      // size of `data` in bytes
-
-    //uint8_t * padding;
-    void * data;
-};
-
-static size_t gguf_type_size(enum gguf_type type) {
-    GGML_ASSERT(0 <= type && type < GGUF_TYPE_COUNT);
-    return GGUF_TYPE_SIZE[type];
-}
-
-static void gguf_tensor_info_sanitize(struct gguf_tensor_info * info) {
-    GGML_ASSERT(info->n_dims <= GGML_MAX_DIMS);
-    GGML_ASSERT(0 <= info->type && info->type < GGML_TYPE_COUNT);
-
-    for (uint32_t i = 0; i < info->n_dims; ++i) {
-        GGML_ASSERT(info->ne[i] > 0);
-    }
-
-    // prevent overflow for total number of elements
-    GGML_ASSERT(INT64_MAX/info->ne[1] > info->ne[0]);
-    GGML_ASSERT(INT64_MAX/info->ne[2] > info->ne[0]*info->ne[1]);
-    GGML_ASSERT(INT64_MAX/info->ne[3] > info->ne[0]*info->ne[1]*info->ne[2]);
-}
-
-static bool gguf_fread_el(FILE * file, void * dst, size_t size, size_t * offset) {
-    const size_t n = fread(dst, 1, size, file);
-    *offset += n;
-    return n == size;
-}
-
-static bool gguf_fread_str(FILE * file, struct gguf_str * p, size_t * offset) {
-    p->n    = 0;
-    p->data = NULL;
-
-    bool ok = true;
-
-    ok = ok && gguf_fread_el(file, &p->n, sizeof(p->n), offset);
-
-    // early exit if string length is invalid, prevents from integer overflow
-    if (p->n == SIZE_MAX) {
-        fprintf(stderr, "%s: invalid string length (%" PRIu64 ")\n", __func__, p->n);
-        return false;
-    }
-
-    p->data = GGML_CALLOC(p->n + 1, 1);
-
-    ok = ok && gguf_fread_el(file,  p->data, p->n, offset);
-
-    return ok;
-}
-
-static void gguf_free_kv(struct gguf_kv * kv) {
-    if (kv->key.data) {
-        GGML_FREE(kv->key.data);
-    }
-
-    if (kv->type == GGUF_TYPE_STRING) {
-        if (kv->value.str.data) {
-            GGML_FREE(kv->value.str.data);
-        }
-    }
-
-    if (kv->type == GGUF_TYPE_ARRAY) {
-        if (kv->value.arr.data) {
-            if (kv->value.arr.type == GGUF_TYPE_STRING) {
-                for (uint64_t j = 0; j < kv->value.arr.n; ++j) {
-                    struct gguf_str * str = &((struct gguf_str *) kv->value.arr.data)[j];
-                    if (str->data) {
-                        GGML_FREE(str->data);
-                    }
-                }
-            }
-            GGML_FREE(kv->value.arr.data);
-        }
-    }
-}
-
-struct gguf_context * gguf_init_empty(void) {
-    struct gguf_context * ctx = GGML_CALLOC(1, sizeof(struct gguf_context));
-
-    memcpy(ctx->header.magic, GGUF_MAGIC, sizeof(ctx->header.magic));
-    ctx->header.version   = GGUF_VERSION;
-    ctx->header.n_tensors = 0;
-    ctx->header.n_kv      = 0;
-
-    ctx->kv    = NULL;
-    ctx->infos = NULL;
-
-    ctx->alignment = GGUF_DEFAULT_ALIGNMENT;
-    ctx->offset    = 0;
-    ctx->size      = 0;
-
-    ctx->data = NULL;
-
-    return ctx;
-}
-
-struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params) {
-    FILE * file = ggml_fopen(fname, "rb");
-    if (!file) {
-        return NULL;
-    }
-
-    // offset from start of file
-    size_t offset = 0;
-
-    char magic[4];
-
-    // check the magic before making allocations
-    {
-        gguf_fread_el(file, &magic, sizeof(magic), &offset);
-
-        for (uint32_t i = 0; i < sizeof(magic); i++) {
-            if (magic[i] != GGUF_MAGIC[i]) {
-                fprintf(stderr, "%s: invalid magic characters '%c%c%c%c'\n", __func__, magic[0], magic[1], magic[2], magic[3]);
-                fclose(file);
-                return NULL;
-            }
-        }
-    }
-
-    bool ok = true;
-
-    struct gguf_context * ctx = GGML_CALLOC(1, sizeof(struct gguf_context));
-
-    // read the header
-    {
-        strncpy(ctx->header.magic, magic, 4);
-
-        ctx->kv    = NULL;
-        ctx->infos = NULL;
-        ctx->data  = NULL;
-
-        ok = ok && gguf_fread_el(file, &ctx->header.version,   sizeof(ctx->header.version),   &offset);
-        ok = ok && gguf_fread_el(file, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors), &offset);
-        ok = ok && gguf_fread_el(file, &ctx->header.n_kv,      sizeof(ctx->header.n_kv),      &offset);
-
-        if (ctx->header.version == 1) {
-            fprintf(stderr, "%s: GGUFv1 is no longer supported. please use a more up-to-date version\n", __func__);
-            fclose(file);
-            gguf_free(ctx);
-            return NULL;
-        }
-
-        // sanity-checks to prevent from integer/buffer overflows
-
-        ok = ok && (ctx->header.n_tensors < (SIZE_MAX/2)/sizeof(struct gguf_tensor_info));
-        ok = ok && (ctx->header.n_tensors < (SIZE_MAX/2)/ggml_tensor_overhead());
-        ok = ok && (ctx->header.n_kv      < (SIZE_MAX/2)/sizeof(struct gguf_kv));
-
-        if (!ok) {
-            fprintf(stderr, "%s: failed to read header\n", __func__);
-            fclose(file);
-            gguf_free(ctx);
-            return NULL;
-        }
-    }
-
-    // read the kv pairs
-    {
-        const uint64_t n_kv = ctx->header.n_kv;
-
-        // header.n_kv will hold the actual value of pairs that were successfully read in the loop below
-        ctx->header.n_kv = 0;
-        ctx->kv = GGML_CALLOC(n_kv, sizeof(struct gguf_kv));
-
-        for (uint64_t i = 0; i < n_kv; ++i) {
-            struct gguf_kv * kv = &ctx->kv[i];
-
-            //fprintf(stderr, "%s: reading kv %d\n", __func__, i);
-
-            ok = ok && gguf_fread_str(file, &kv->key,                    &offset);
-            ok = ok && gguf_fread_el (file, &kv->type, sizeof(kv->type), &offset);
-
-            //fprintf(stderr, "%s: reading kv with key %s\n", __func__, kv->key.data);
-
-            switch (kv->type) {
-                case GGUF_TYPE_UINT8:   ok = ok && gguf_fread_el (file, &kv->value.uint8,   sizeof(kv->value.uint8),   &offset); break;
-                case GGUF_TYPE_INT8:    ok = ok && gguf_fread_el (file, &kv->value.int8,    sizeof(kv->value.int8),    &offset); break;
-                case GGUF_TYPE_UINT16:  ok = ok && gguf_fread_el (file, &kv->value.uint16,  sizeof(kv->value.uint16),  &offset); break;
-                case GGUF_TYPE_INT16:   ok = ok && gguf_fread_el (file, &kv->value.int16,   sizeof(kv->value.int16),   &offset); break;
-                case GGUF_TYPE_UINT32:  ok = ok && gguf_fread_el (file, &kv->value.uint32,  sizeof(kv->value.uint32),  &offset); break;
-                case GGUF_TYPE_INT32:   ok = ok && gguf_fread_el (file, &kv->value.int32,   sizeof(kv->value.int32),   &offset); break;
-                case GGUF_TYPE_FLOAT32: ok = ok && gguf_fread_el (file, &kv->value.float32, sizeof(kv->value.float32), &offset); break;
-                case GGUF_TYPE_UINT64:  ok = ok && gguf_fread_el (file, &kv->value.uint64,  sizeof(kv->value.uint64),  &offset); break;
-                case GGUF_TYPE_INT64:   ok = ok && gguf_fread_el (file, &kv->value.int64,   sizeof(kv->value.int64),   &offset); break;
-                case GGUF_TYPE_FLOAT64: ok = ok && gguf_fread_el (file, &kv->value.float64, sizeof(kv->value.float64), &offset); break;
-                case GGUF_TYPE_BOOL:    ok = ok && gguf_fread_el (file, &kv->value.bool_,   sizeof(kv->value.bool_),   &offset); break;
-                case GGUF_TYPE_STRING:  ok = ok && gguf_fread_str(file, &kv->value.str,                                &offset); break;
-                case GGUF_TYPE_ARRAY:
-                    {
-                        ok = ok && gguf_fread_el(file, &kv->value.arr.type, sizeof(kv->value.arr.type), &offset);
-                        ok = ok && gguf_fread_el(file, &kv->value.arr.n,    sizeof(kv->value.arr.n),    &offset);
-
-                        switch (kv->value.arr.type) {
-                            case GGUF_TYPE_UINT8:
-                            case GGUF_TYPE_INT8:
-                            case GGUF_TYPE_UINT16:
-                            case GGUF_TYPE_INT16:
-                            case GGUF_TYPE_UINT32:
-                            case GGUF_TYPE_INT32:
-                            case GGUF_TYPE_FLOAT32:
-                            case GGUF_TYPE_UINT64:
-                            case GGUF_TYPE_INT64:
-                            case GGUF_TYPE_FLOAT64:
-                            case GGUF_TYPE_BOOL:
-                                {
-                                    // prevent from integer overflow in the malloc below
-                                    if (kv->value.arr.n >= SIZE_MAX/gguf_type_size(kv->value.arr.type)) {
-                                        fprintf(stderr, "%s: array size is too large (%" PRIu64 ")\n", __func__, kv->value.arr.n);
-                                        fclose(file);
-                                        gguf_free(ctx);
-                                        return NULL;
-                                    }
-
-                                    kv->value.arr.data = GGML_CALLOC(kv->value.arr.n, gguf_type_size(kv->value.arr.type));
-
-                                    ok = ok && gguf_fread_el(file, kv->value.arr.data, kv->value.arr.n * gguf_type_size(kv->value.arr.type), &offset);
-                                } break;
-                            case GGUF_TYPE_STRING:
-                                {
-                                    // prevent from integer overflow in the malloc below
-                                    if (kv->value.arr.n >= SIZE_MAX/sizeof(struct gguf_str)) {
-                                        fprintf(stderr, "%s: array size is too large (%" PRIu64 ")\n", __func__, kv->value.arr.n);
-                                        fclose(file);
-                                        gguf_free(ctx);
-                                        return NULL;
-                                    }
-
-                                    kv->value.arr.data = GGML_CALLOC(kv->value.arr.n, sizeof(struct gguf_str));
-
-                                    for (uint64_t j = 0; j < kv->value.arr.n; ++j) {
-                                        ok = ok && gguf_fread_str(file, &((struct gguf_str *) kv->value.arr.data)[j], &offset);
-                                    }
-                                } break;
-                            case GGUF_TYPE_ARRAY:
-                            default: GGML_ASSERT(false && "invalid type"); break;
-                        }
-                    } break;
-                default: GGML_ASSERT(false && "invalid type");
-            }
-
-            if (!ok) {
-                break;
-            }
-
-            ctx->header.n_kv++;
-        }
-
-        if (!ok) {
-            fprintf(stderr, "%s: failed to read key-value pairs\n", __func__);
-            fclose(file);
-            gguf_free(ctx);
-            return NULL;
-        }
-    }
-
-    // read the tensor infos
-    if (ctx->header.n_tensors > 0) {
-        ctx->infos = GGML_CALLOC(ctx->header.n_tensors, sizeof(struct gguf_tensor_info));
-
-        for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) {
-            struct gguf_tensor_info * info = &ctx->infos[i];
-
-            for (int j = 0; j < GGML_MAX_DIMS; ++j) {
-                info->ne[j] = 1;
-            }
-
-            ok = ok && gguf_fread_str(file, &info->name,                          &offset);
-            ok = ok && gguf_fread_el (file, &info->n_dims, sizeof(info->n_dims),  &offset);
-
-            ok = ok && (info->n_dims <= GGML_MAX_DIMS);
-
-            for (uint32_t j = 0; j < info->n_dims; ++j) {
-                ok = ok && gguf_fread_el(file, &info->ne[j], sizeof(info->ne[j]), &offset);
-            }
-
-            ok = ok && gguf_fread_el (file, &info->type,   sizeof(info->type),    &offset);
-            ok = ok && gguf_fread_el (file, &info->offset, sizeof(info->offset),  &offset);
-
-            // TODO: return an error instead of crashing with GGML_ASSERT
-            gguf_tensor_info_sanitize(info);
-
-            // make sure there is no duplicated tensor names
-            for (uint64_t j = 0; j < i; ++j) {
-                if (strcmp(info->name.data, ctx->infos[j].name.data) == 0) {
-                    fprintf(stderr, "%s: duplicated tensor name %s\n", __func__, info->name.data);
-                    ok = false;
-                }
-            }
-
-            if (!ok) {
-                fprintf(stderr, "%s: failed to read tensor info\n", __func__);
-                fclose(file);
-                gguf_free(ctx);
-                return NULL;
-            }
-        }
-    }
-
-    ctx->alignment = GGUF_DEFAULT_ALIGNMENT;
-
-    int alignment_idx = gguf_find_key(ctx, "general.alignment");
-    if (alignment_idx != -1) {
-        ctx->alignment = gguf_get_val_u32(ctx, alignment_idx);
-    }
-
-    // we require the data section to be aligned, so take into account any padding
-    {
-        const size_t offset_pad = offset % ctx->alignment;
-
-        if (offset_pad != 0) {
-            offset += ctx->alignment - offset_pad;
-            fseek(file, offset, SEEK_SET);
-        }
-    }
-
-    // store the current file offset - this is where the data section starts
-    ctx->offset = offset;
-
-    // compute the total size of the data section, taking into account the alignment
-    {
-        ctx->size = 0;
-        for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) {
-            struct gguf_tensor_info * info = &ctx->infos[i];
-
-            const int64_t ne =
-                (int64_t) info->ne[0] *
-                (int64_t) info->ne[1] *
-                (int64_t) info->ne[2] *
-                (int64_t) info->ne[3];
-
-            if (ne % ggml_blck_size(info->type) != 0) {
-                fprintf(stderr, "%s: tensor '%s' of type %d (%s) number of elements (%" PRId64 ") is not a multiple of block size (%d)\n",
-                        __func__, info->name.data, (int)info->type, ggml_type_name(info->type), ne, ggml_blck_size(info->type));
-                fclose(file);
-                gguf_free(ctx);
-                return NULL;
-            }
-
-            const size_t size_cur = ggml_row_size(info->type, ne);
-
-            ctx->size += GGML_PAD(size_cur, ctx->alignment);
-        }
-    }
-
-    // load the tensor data only if requested
-    if (params.ctx != NULL) {
-        // if the provided gguf_context is no_alloc, then we create "empty" tensors and do not read the binary blob
-        // otherwise, we load the binary blob into the created ggml_context as well, and point the "data" members of
-        // the ggml_tensor structs to the appropriate locations in the binary blob
-
-        // compute the exact size needed for the new ggml_context
-        const size_t mem_size =
-            params.no_alloc ?
-            (ctx->header.n_tensors    )*ggml_tensor_overhead() :
-            (ctx->header.n_tensors + 1)*ggml_tensor_overhead() + ctx->size;
-
-        struct ggml_init_params pdata = {
-            .mem_size   = mem_size,
-            .mem_buffer = NULL,
-            .no_alloc   = params.no_alloc,
-        };
-
-        *params.ctx = ggml_init(pdata);
-
-        struct ggml_context * ctx_data = *params.ctx;
-
-        struct ggml_tensor * data = NULL;
-
-        if (!params.no_alloc) {
-            data = ggml_new_tensor_1d(ctx_data, GGML_TYPE_I8, ctx->size);
-
-            ok = ok && data != NULL;
-
-            // read the binary blob with the tensor data
-            ok = ok && gguf_fread_el(file, data->data, ctx->size, &offset);
-
-            if (!ok) {
-                fprintf(stderr, "%s: failed to read tensor data\n", __func__);
-                fclose(file);
-                ggml_free(ctx_data);
-                gguf_free(ctx);
-                return NULL;
-            }
-
-            ctx->data = data->data;
-        }
-
-        ggml_set_no_alloc(ctx_data, true);
-
-        // create the tensors
-        for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) {
-            const int64_t ne[GGML_MAX_DIMS] = {
-                ctx->infos[i].ne[0],
-                ctx->infos[i].ne[1],
-                ctx->infos[i].ne[2],
-                ctx->infos[i].ne[3],
-            };
-
-            struct ggml_tensor * cur = ggml_new_tensor(ctx_data, ctx->infos[i].type, ctx->infos[i].n_dims, ne);
-
-            ok = ok && cur != NULL;
-
-            if (!ok) {
-                break;
-            }
-
-            ggml_set_name(cur, ctx->infos[i].name.data);
-
-            // point the data member to the appropriate location in the binary blob using the tensor infos
-            if (!params.no_alloc) {
-              //cur->data = (char *) data->data + ctx->infos[i].offset - ctx->offset; // offset from start of file
-                cur->data = (char *) data->data + ctx->infos[i].offset;               // offset from data
-            }
-        }
-
-        if (!ok) {
-            fprintf(stderr, "%s: failed to read the tensor data\n", __func__);
-            fclose(file);
-            ggml_free(ctx_data);
-            gguf_free(ctx);
-            return NULL;
-        }
-
-        ggml_set_no_alloc(ctx_data, params.no_alloc);
-    }
-
-    fclose(file);
-
-    return ctx;
-}
-
-void gguf_free(struct gguf_context * ctx) {
-    if (ctx == NULL) {
-        return;
-    }
-
-    if (ctx->kv) {
-        // free string memory - not great..
-        for (uint64_t i = 0; i < ctx->header.n_kv; ++i) {
-            gguf_free_kv(&ctx->kv[i]);
-        }
-
-        GGML_FREE(ctx->kv);
-    }
-
-    if (ctx->infos) {
-        for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) {
-            struct gguf_tensor_info * info = &ctx->infos[i];
-
-            if (info->name.data) {
-                GGML_FREE(info->name.data);
-            }
-        }
-
-        GGML_FREE(ctx->infos);
-    }
-
-    GGML_FREE(ctx);
-}
-
-const char * gguf_type_name(enum gguf_type type) {
-    return GGUF_TYPE_NAME[type];
-}
-
-int gguf_get_version(const struct gguf_context * ctx) {
-    return ctx->header.version;
-}
-
-size_t gguf_get_alignment(const struct gguf_context * ctx) {
-    return ctx->alignment;
-}
-
-size_t gguf_get_data_offset(const struct gguf_context * ctx) {
-    return ctx->offset;
-}
-
-void * gguf_get_data(const struct gguf_context * ctx) {
-    return ctx->data;
-}
-
-int gguf_get_n_kv(const struct gguf_context * ctx) {
-    return ctx->header.n_kv;
-}
-
-int gguf_find_key(const struct gguf_context * ctx, const char * key) {
-    // return -1 if key not found
-    int keyfound = -1;
-
-    const int n_kv = gguf_get_n_kv(ctx);
-
-    for (int i = 0; i < n_kv; ++i) {
-        if (strcmp(key, gguf_get_key(ctx, i)) == 0) {
-            keyfound = i;
-            break;
-        }
-    }
-
-    return keyfound;
-}
-
-const char * gguf_get_key(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    return ctx->kv[key_id].key.data;
-}
-
-enum gguf_type gguf_get_kv_type(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    return ctx->kv[key_id].type;
-}
-
-enum gguf_type gguf_get_arr_type(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY);
-    return ctx->kv[key_id].value.arr.type;
-}
-
-const void * gguf_get_arr_data(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY);
-    return ctx->kv[key_id].value.arr.data;
-}
-
-const char * gguf_get_arr_str(const struct gguf_context * ctx, int key_id, int i) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY);
-    struct gguf_kv * kv = &ctx->kv[key_id];
-    struct gguf_str * str = &((struct gguf_str *) kv->value.arr.data)[i];
-    return str->data;
-}
-
-int gguf_get_arr_n(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY);
-    return ctx->kv[key_id].value.arr.n;
-}
-
-uint8_t gguf_get_val_u8(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT8);
-    return ctx->kv[key_id].value.uint8;
-}
-
-int8_t gguf_get_val_i8(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT8);
-    return ctx->kv[key_id].value.int8;
-}
-
-uint16_t gguf_get_val_u16(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT16);
-    return ctx->kv[key_id].value.uint16;
-}
-
-int16_t gguf_get_val_i16(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT16);
-    return ctx->kv[key_id].value.int16;
-}
-
-uint32_t gguf_get_val_u32(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT32);
-    return ctx->kv[key_id].value.uint32;
-}
-
-int32_t gguf_get_val_i32(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT32);
-    return ctx->kv[key_id].value.int32;
-}
-
-float gguf_get_val_f32(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_FLOAT32);
-    return ctx->kv[key_id].value.float32;
-}
-
-uint64_t gguf_get_val_u64(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT64);
-    return ctx->kv[key_id].value.uint64;
-}
-
-int64_t gguf_get_val_i64(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT64);
-    return ctx->kv[key_id].value.int64;
-}
-
-double gguf_get_val_f64(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_FLOAT64);
-    return ctx->kv[key_id].value.float64;
-}
-
-bool gguf_get_val_bool(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_BOOL);
-    return ctx->kv[key_id].value.bool_;
-}
-
-const char * gguf_get_val_str(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_STRING);
-    return ctx->kv[key_id].value.str.data;
-}
-
-const void * gguf_get_val_data(const struct gguf_context * ctx, int key_id) {
-    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
-    GGML_ASSERT(ctx->kv[key_id].type != GGUF_TYPE_ARRAY);
-    GGML_ASSERT(ctx->kv[key_id].type != GGUF_TYPE_STRING);
-    return &ctx->kv[key_id].value;
-}
-
-int gguf_get_n_tensors(const struct gguf_context * ctx) {
-    return ctx->header.n_tensors;
-}
-
-int gguf_find_tensor(const struct gguf_context * ctx, const char * name) {
-    // return -1 if tensor not found
-    int tensorfound = -1;
-
-    const int n_tensors = gguf_get_n_tensors(ctx);
-
-    for (int i = 0; i < n_tensors; ++i) {
-        if (strcmp(name, gguf_get_tensor_name(ctx, i)) == 0) {
-            tensorfound = i;
-            break;
-        }
-    }
-
-    return tensorfound;
-}
-
-size_t gguf_get_tensor_offset(const struct gguf_context * ctx, int i) {
-    return ctx->infos[i].offset;
-}
-
-char * gguf_get_tensor_name(const struct gguf_context * ctx, int i) {
-    return ctx->infos[i].name.data;
-}
-
-enum ggml_type gguf_get_tensor_type(const struct gguf_context * ctx, int i) {
-    return ctx->infos[i].type;
-}
-
-// returns the index
-static int gguf_get_or_add_key(struct gguf_context * ctx, const char * key) {
-    const int idx = gguf_find_key(ctx, key);
-    if (idx >= 0) {
-        return idx;
-    }
-
-    const int n_kv = gguf_get_n_kv(ctx);
-
-    ctx->kv = realloc(ctx->kv, (n_kv + 1) * sizeof(struct gguf_kv));
-    ctx->kv[n_kv].key.n    = strlen(key);
-    ctx->kv[n_kv].key.data = strdup(key);
-    ctx->header.n_kv++;
-
-    return n_kv;
-}
-
-void gguf_remove_key(struct gguf_context * ctx, const char * key) {
-    const int idx = gguf_find_key(ctx, key);
-    if (idx >= 0) {
-        const int n_kv = gguf_get_n_kv(ctx);
-        gguf_free_kv(&ctx->kv[idx]);
-        for (int i = idx; i < n_kv-1; ++i) {
-            ctx->kv[i] = ctx->kv[i+1];
-        }
-        ctx->kv = realloc(ctx->kv, (n_kv - 1) * sizeof(struct gguf_kv));
-        ctx->header.n_kv--;
-    }
-}
-
-void gguf_set_val_u8(struct gguf_context * ctx, const char * key, uint8_t val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type        = GGUF_TYPE_UINT8;
-    ctx->kv[idx].value.uint8 = val;
-}
-
-void gguf_set_val_i8(struct gguf_context * ctx, const char * key, int8_t val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type       = GGUF_TYPE_INT8;
-    ctx->kv[idx].value.int8 = val;
-}
-
-void gguf_set_val_u16(struct gguf_context * ctx, const char * key, uint16_t val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type         = GGUF_TYPE_UINT16;
-    ctx->kv[idx].value.uint16 = val;
-}
-
-void gguf_set_val_i16(struct gguf_context * ctx, const char * key, int16_t val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type        = GGUF_TYPE_INT16;
-    ctx->kv[idx].value.int16 = val;
-}
-
-void gguf_set_val_u32(struct gguf_context * ctx, const char * key, uint32_t val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type         = GGUF_TYPE_UINT32;
-    ctx->kv[idx].value.uint32 = val;
-}
-
-void gguf_set_val_i32(struct gguf_context * ctx, const char * key, int32_t val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type        = GGUF_TYPE_INT32;
-    ctx->kv[idx].value.int32 = val;
-}
-
-void gguf_set_val_f32(struct gguf_context * ctx, const char * key, float val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type          = GGUF_TYPE_FLOAT32;
-    ctx->kv[idx].value.float32 = val;
-}
-
-void gguf_set_val_u64(struct gguf_context * ctx, const char * key, uint64_t val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type         = GGUF_TYPE_UINT64;
-    ctx->kv[idx].value.uint64 = val;
-}
-
-void gguf_set_val_i64(struct gguf_context * ctx, const char * key, int64_t val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type        = GGUF_TYPE_INT64;
-    ctx->kv[idx].value.int64 = val;
-}
-
-void gguf_set_val_f64(struct gguf_context * ctx, const char * key, double val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type          = GGUF_TYPE_FLOAT64;
-    ctx->kv[idx].value.float64 = val;
-}
-
-void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type        = GGUF_TYPE_BOOL;
-    ctx->kv[idx].value.bool_ = val;
-}
-
-void gguf_set_val_str(struct gguf_context * ctx, const char * key, const char * val) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type           = GGUF_TYPE_STRING;
-    ctx->kv[idx].value.str.n    = strlen(val);
-    ctx->kv[idx].value.str.data = strdup(val);
-}
-
-void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, int n) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type           = GGUF_TYPE_ARRAY;
-    ctx->kv[idx].value.arr.type = type;
-    ctx->kv[idx].value.arr.n    = n;
-    ctx->kv[idx].value.arr.data = GGML_CALLOC(n, gguf_type_size(type));
-    memcpy(ctx->kv[idx].value.arr.data, data, n*gguf_type_size(type));
-}
-
-void gguf_set_arr_str(struct gguf_context * ctx, const char * key, const char ** data, int n) {
-    const int idx = gguf_get_or_add_key(ctx, key);
-
-    ctx->kv[idx].type           = GGUF_TYPE_ARRAY;
-    ctx->kv[idx].value.arr.type = GGUF_TYPE_STRING;
-    ctx->kv[idx].value.arr.n    = n;
-    ctx->kv[idx].value.arr.data = GGML_CALLOC(n, sizeof(struct gguf_str));
-    for (int i = 0; i < n; i++) {
-        struct gguf_str * str = &((struct gguf_str *)ctx->kv[idx].value.arr.data)[i];
-        str->n    = strlen(data[i]);
-        str->data = strdup(data[i]);
-    }
-}
-
-// set or add KV pairs from another context
-void gguf_set_kv(struct gguf_context * ctx, struct gguf_context * src) {
-    for (uint32_t i = 0; i < src->header.n_kv; i++) {
-        switch (src->kv[i].type) {
-            case GGUF_TYPE_UINT8:   gguf_set_val_u8  (ctx, src->kv[i].key.data, src->kv[i].value.uint8);    break;
-            case GGUF_TYPE_INT8:    gguf_set_val_i8  (ctx, src->kv[i].key.data, src->kv[i].value.int8);     break;
-            case GGUF_TYPE_UINT16:  gguf_set_val_u16 (ctx, src->kv[i].key.data, src->kv[i].value.uint16);   break;
-            case GGUF_TYPE_INT16:   gguf_set_val_i16 (ctx, src->kv[i].key.data, src->kv[i].value.int16);    break;
-            case GGUF_TYPE_UINT32:  gguf_set_val_u32 (ctx, src->kv[i].key.data, src->kv[i].value.uint32);   break;
-            case GGUF_TYPE_INT32:   gguf_set_val_i32 (ctx, src->kv[i].key.data, src->kv[i].value.int32);    break;
-            case GGUF_TYPE_FLOAT32: gguf_set_val_f32 (ctx, src->kv[i].key.data, src->kv[i].value.float32);  break;
-            case GGUF_TYPE_UINT64:  gguf_set_val_u64 (ctx, src->kv[i].key.data, src->kv[i].value.uint64);   break;
-            case GGUF_TYPE_INT64:   gguf_set_val_i64 (ctx, src->kv[i].key.data, src->kv[i].value.int64);    break;
-            case GGUF_TYPE_FLOAT64: gguf_set_val_f64 (ctx, src->kv[i].key.data, src->kv[i].value.float64);  break;
-            case GGUF_TYPE_BOOL:    gguf_set_val_bool(ctx, src->kv[i].key.data, src->kv[i].value.bool_);    break;
-            case GGUF_TYPE_STRING:  gguf_set_val_str (ctx, src->kv[i].key.data, src->kv[i].value.str.data); break;
-            case GGUF_TYPE_ARRAY:
-                {
-                    if (src->kv[i].value.arr.type == GGUF_TYPE_STRING) {
-                        const char ** data = GGML_CALLOC(src->kv[i].value.arr.n, sizeof(char *));
-                        for (uint32_t j = 0; j < src->kv[i].value.arr.n; j++) {
-                            data[j] = ((struct gguf_str *)src->kv[i].value.arr.data)[j].data;
-                        }
-                        gguf_set_arr_str(ctx, src->kv[i].key.data, data, src->kv[i].value.arr.n);
-                        GGML_FREE((void *)data);
-                    } else if (src->kv[i].value.arr.type == GGUF_TYPE_ARRAY) {
-                        GGML_ASSERT(false && "nested arrays not supported");
-                    } else {
-                        gguf_set_arr_data(ctx, src->kv[i].key.data, src->kv[i].value.arr.type, src->kv[i].value.arr.data, src->kv[i].value.arr.n);
-                    }
-                } break;
-            default: GGML_ASSERT(false && "invalid type"); break;
-        }
-    }
-}
-
-void gguf_add_tensor(
-             struct gguf_context * ctx,
-        const struct ggml_tensor * tensor) {
-    if (gguf_find_tensor(ctx, tensor->name) != -1) {
-        GGML_ASSERT(false && "duplicated tensor name");
-    }
-
-    const int idx = ctx->header.n_tensors;
-    ctx->infos = realloc(ctx->infos, (idx + 1)*sizeof(struct gguf_tensor_info));
-
-    ctx->infos[idx].name.n    = strlen(tensor->name);
-    ctx->infos[idx].name.data = strdup(tensor->name);
-
-    for (int i = 0; i < GGML_MAX_DIMS; ++i) {
-        ctx->infos[idx].ne[i] = 1;
-    }
-
-    ctx->infos[idx].n_dims = ggml_n_dims(tensor);
-    for (uint32_t i = 0; i < ctx->infos[idx].n_dims; i++) {
-        ctx->infos[idx].ne[i] = tensor->ne[i];
-    }
-
-    ctx->infos[idx].type   = tensor->type;
-    ctx->infos[idx].offset = 0;
-    ctx->infos[idx].data   = tensor->data;
-    ctx->infos[idx].size   = ggml_nbytes(tensor);
-
-    if (ctx->header.n_tensors > 0) {
-        ctx->infos[idx].offset = ctx->infos[idx - 1].offset + GGML_PAD(ctx->infos[idx - 1].size, ctx->alignment);
-    }
-
-    ctx->header.n_tensors++;
-}
-
-void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type) {
-    const int idx = gguf_find_tensor(ctx, name);
-    if (idx < 0) {
-        GGML_ASSERT(false && "tensor not found");
-    }
-
-    ctx->infos[idx].type = type;
-}
-
-void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data, size_t size) {
-    const int idx = gguf_find_tensor(ctx, name);
-    if (idx < 0) {
-        GGML_ASSERT(false && "tensor not found");
-    }
-
-    ctx->infos[idx].data = data;
-    ctx->infos[idx].size = size;
-
-    // update offsets
-    for (uint32_t i = idx + 1; i < ctx->header.n_tensors; ++i) {
-        ctx->infos[i].offset = ctx->infos[i - 1].offset + GGML_PAD(ctx->infos[i - 1].size, ctx->alignment);
-    }
-}
-
-//static void gguf_fwrite_str(FILE * file, const struct gguf_str * val) {
-//    fwrite(&val->n,   sizeof(val->n),    1, file);
-//    fwrite(val->data, sizeof(char), val->n, file);
-//}
-//
-//static void gguf_fwrite_el(FILE * file, const void * val, size_t size) {
-//    fwrite(val, sizeof(char), size, file);
-//}
-
-struct gguf_buf {
-    void * data;
-    size_t size;
-    size_t offset;
-};
-
-static struct gguf_buf gguf_buf_init(size_t size) {
-    struct gguf_buf buf = {
-        /*buf.data   =*/ size == 0 ? NULL : GGML_CALLOC(1, size),
-        /*buf.size   =*/ size,
-        /*buf.offset =*/ 0,
-    };
-
-    return buf;
-}
-
-static void gguf_buf_free(struct gguf_buf buf) {
-    if (buf.data) {
-        GGML_FREE(buf.data);
-    }
-}
-
-static void gguf_buf_grow(struct gguf_buf * buf, size_t size) {
-    if (buf->offset + size > buf->size) {
-        buf->size = 1.5*(buf->offset + size);
-        if (buf->data) {
-            buf->data = realloc(buf->data, buf->size);
-        }
-    }
-}
-
-static void gguf_bwrite_str(struct gguf_buf * buf, const struct gguf_str * val) {
-    gguf_buf_grow(buf, sizeof(val->n) + val->n);
-
-    if (buf->data) {
-        memcpy((char *) buf->data + buf->offset, &val->n, sizeof(val->n));
-    }
-    buf->offset += sizeof(val->n);
-
-    if (buf->data) {
-        memcpy((char *) buf->data + buf->offset, val->data, val->n);
-    }
-    buf->offset += val->n;
-}
-
-static void gguf_bwrite_el(struct gguf_buf * buf, const void * val, size_t el_size) {
-    gguf_buf_grow(buf, el_size);
-
-    if (buf->data) {
-        memcpy((char *) buf->data + buf->offset, val, el_size);
-    }
-    buf->offset += el_size;
-}
-
-static void gguf_write_to_buf(const struct gguf_context * ctx, struct gguf_buf * buf, bool only_meta) {
-    // write header
-    gguf_bwrite_el(buf, &ctx->header.magic,     sizeof(ctx->header.magic));
-    gguf_bwrite_el(buf, &ctx->header.version,   sizeof(ctx->header.version));
-    gguf_bwrite_el(buf, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors));
-    gguf_bwrite_el(buf, &ctx->header.n_kv,      sizeof(ctx->header.n_kv));
-
-    // write key-value pairs
-    for (uint32_t i = 0; i < ctx->header.n_kv; ++i) {
-        struct gguf_kv * kv = &ctx->kv[i];
-
-        gguf_bwrite_str(buf, &kv->key);
-        gguf_bwrite_el (buf, &kv->type, sizeof(kv->type));
-
-        switch (kv->type) {
-            case GGUF_TYPE_UINT8:   gguf_bwrite_el( buf, &kv->value.uint8,   sizeof(kv->value.uint8)  ); break;
-            case GGUF_TYPE_INT8:    gguf_bwrite_el (buf, &kv->value.int8,    sizeof(kv->value.int8)   ); break;
-            case GGUF_TYPE_UINT16:  gguf_bwrite_el (buf, &kv->value.uint16,  sizeof(kv->value.uint16) ); break;
-            case GGUF_TYPE_INT16:   gguf_bwrite_el (buf, &kv->value.int16,   sizeof(kv->value.int16)  ); break;
-            case GGUF_TYPE_UINT32:  gguf_bwrite_el (buf, &kv->value.uint32,  sizeof(kv->value.uint32) ); break;
-            case GGUF_TYPE_INT32:   gguf_bwrite_el (buf, &kv->value.int32,   sizeof(kv->value.int32)  ); break;
-            case GGUF_TYPE_FLOAT32: gguf_bwrite_el (buf, &kv->value.float32, sizeof(kv->value.float32)); break;
-            case GGUF_TYPE_UINT64:  gguf_bwrite_el (buf, &kv->value.uint64,  sizeof(kv->value.uint64) ); break;
-            case GGUF_TYPE_INT64:   gguf_bwrite_el (buf, &kv->value.int64,   sizeof(kv->value.int64)  ); break;
-            case GGUF_TYPE_FLOAT64: gguf_bwrite_el (buf, &kv->value.float64, sizeof(kv->value.float64)); break;
-            case GGUF_TYPE_BOOL:    gguf_bwrite_el (buf, &kv->value.bool_,   sizeof(kv->value.bool_)  ); break;
-            case GGUF_TYPE_STRING:  gguf_bwrite_str(buf, &kv->value.str                               ); break;
-            case GGUF_TYPE_ARRAY:
-                {
-                    gguf_bwrite_el(buf, &kv->value.arr.type, sizeof(kv->value.arr.type));
-                    gguf_bwrite_el(buf, &kv->value.arr.n,    sizeof(kv->value.arr.n)   );
-
-                    switch (kv->value.arr.type) {
-                        case GGUF_TYPE_UINT8:
-                        case GGUF_TYPE_INT8:
-                        case GGUF_TYPE_UINT16:
-                        case GGUF_TYPE_INT16:
-                        case GGUF_TYPE_UINT32:
-                        case GGUF_TYPE_INT32:
-                        case GGUF_TYPE_FLOAT32:
-                        case GGUF_TYPE_UINT64:
-                        case GGUF_TYPE_INT64:
-                        case GGUF_TYPE_FLOAT64:
-                        case GGUF_TYPE_BOOL:
-                            {
-                                gguf_bwrite_el(buf, kv->value.arr.data, kv->value.arr.n * gguf_type_size(kv->value.arr.type));
-                            } break;
-                        case GGUF_TYPE_STRING:
-                            {
-                                for (uint32_t j = 0; j < kv->value.arr.n; ++j) {
-                                    gguf_bwrite_str(buf, &((struct gguf_str *) kv->value.arr.data)[j]);
-                                }
-                            } break;
-                        case GGUF_TYPE_ARRAY:
-                        default: GGML_ASSERT(false && "invalid type"); break;
-                    }
-                } break;
-            default: GGML_ASSERT(false && "invalid type");
-        }
-    }
-
-    // write tensor infos
-    for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) {
-        struct gguf_tensor_info * info = &ctx->infos[i];
-
-        gguf_bwrite_str(buf, &info->name);
-        gguf_bwrite_el (buf, &info->n_dims, sizeof(info->n_dims));
-        for (uint32_t j = 0; j < info->n_dims; ++j) {
-            gguf_bwrite_el(buf, &info->ne[j], sizeof(info->ne[j]));
-        }
-        gguf_bwrite_el(buf, &info->type,   sizeof(info->type));
-        gguf_bwrite_el(buf, &info->offset, sizeof(info->offset));
-    }
-
-    // we require the data section to be aligned, so take into account any padding
-    {
-        const size_t offset     = buf->offset;
-        const size_t offset_pad = GGML_PAD(offset, ctx->alignment);
-
-        if (offset_pad != offset) {
-            uint8_t pad = 0;
-            for (size_t i = 0; i < offset_pad - offset; ++i) {
-                gguf_bwrite_el(buf, &pad, sizeof(pad));
-            }
-        }
-    }
-
-    if (only_meta) {
-        return;
-    }
-
-    size_t offset = 0;
-
-    // write tensor data
-    for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) {
-        struct gguf_tensor_info * info = &ctx->infos[i];
-
-        const size_t size     = info->size;
-        const size_t size_pad = GGML_PAD(size, ctx->alignment);
-
-        gguf_bwrite_el(buf, info->data, size);
-
-        if (size_pad != size) {
-            uint8_t pad = 0;
-            for (size_t j = 0; j < size_pad - size; ++j) {
-                gguf_bwrite_el(buf, &pad, sizeof(pad));
-            }
-        }
-
-        GGML_ASSERT(offset == info->offset);
-
-        offset += size_pad;
-    }
-}
-
-void gguf_write_to_file(const struct gguf_context * ctx, const char * fname, bool only_meta) {
-    FILE * file = ggml_fopen(fname, "wb");
-    if (!file) {
-        GGML_ASSERT(false && "failed to open file for writing");
-    }
-
-    struct gguf_buf buf = gguf_buf_init(16*1024);
-
-    gguf_write_to_buf(ctx, &buf, only_meta);
-
-    fwrite(buf.data, 1, buf.offset, file);
-
-    gguf_buf_free(buf);
-
-    fclose(file);
-}
-
-size_t gguf_get_meta_size(const struct gguf_context * ctx) {
-    // no allocs - only compute size
-    struct gguf_buf buf = gguf_buf_init(0);
-
-    gguf_write_to_buf(ctx, &buf, true);
-
-    return buf.offset;
-}
-
-void gguf_get_meta_data(const struct gguf_context * ctx, void * data) {
-    struct gguf_buf buf = gguf_buf_init(16*1024);
-
-    gguf_write_to_buf(ctx, &buf, true);
-
-    memcpy(data, buf.data, buf.offset);
-
-    gguf_buf_free(buf);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-int ggml_cpu_has_avx(void) {
-#if defined(__AVX__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_avx_vnni(void) {
-#if defined(__AVXVNNI__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_avx2(void) {
-#if defined(__AVX2__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_avx512(void) {
-#if defined(__AVX512F__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_avx512_vbmi(void) {
-#if defined(__AVX512VBMI__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_avx512_vnni(void) {
-#if defined(__AVX512VNNI__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_avx512_bf16(void) {
-#if defined(__AVX512BF16__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_fma(void) {
-#if defined(__FMA__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_neon(void) {
-#if defined(__ARM_NEON)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_sve(void) {
-#if defined(__ARM_FEATURE_SVE)
-    // TODO: Currently, SVE 256 bit is only supported.
-    GGML_ASSERT(svcntb() == QK8_0);
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_arm_fma(void) {
-#if defined(__ARM_FEATURE_FMA)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_metal(void) {
-#if defined(GGML_USE_METAL)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_f16c(void) {
-#if defined(__F16C__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_fp16_va(void) {
-#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_wasm_simd(void) {
-#if defined(__wasm_simd128__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_blas(void) {
-#if defined(GGML_USE_BLAS) || defined(GGML_USE_CUDA) || defined(GGML_USE_VULKAN) || defined(GGML_USE_SYCL)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_cuda(void) {
-#if defined(GGML_USE_CUDA)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_vulkan(void) {
-#if defined(GGML_USE_VULKAN)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_kompute(void) {
-#if defined(GGML_USE_KOMPUTE)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_sycl(void) {
-#if defined(GGML_USE_SYCL)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_rpc(void) {
-#if defined(GGML_USE_RPC)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_gpublas(void) {
-    return ggml_cpu_has_cuda() || ggml_cpu_has_vulkan() || ggml_cpu_has_kompute() || ggml_cpu_has_sycl();
-}
-
-int ggml_cpu_has_sse3(void) {
-#if defined(__SSE3__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_ssse3(void) {
-#if defined(__SSSE3__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_vsx(void) {
-#if defined(__POWER9_VECTOR__)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-int ggml_cpu_has_matmul_int8(void) {
-#if defined(__ARM_FEATURE_MATMUL_INT8)
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-////////////////////////////////////////////////////////////////////////////////
diff --git a/ggml.h b/ggml.h
deleted file mode 100644 (file)
index 13502a3..0000000
--- a/ggml.h
+++ /dev/null
@@ -1,2452 +0,0 @@
-#pragma once
-
-//
-// GGML Tensor Library
-//
-// This documentation is still a work in progress.
-// If you wish some specific topics to be covered, feel free to drop a comment:
-//
-//   https://github.com/ggerganov/whisper.cpp/issues/40
-//
-// ## Overview
-//
-// This library implements:
-//
-//  - a set of tensor operations
-//  - automatic differentiation
-//  - basic optimization algorithms
-//
-// The aim of this library is to provide a minimalistic approach for various machine learning tasks. This includes,
-// but is not limited to, the following:
-//
-//  - linear regression
-//  - support vector machines
-//  - neural networks
-//
-// The library allows the user to define a certain function using the available tensor operations. This function
-// definition is represented internally via a computation graph. Each tensor operation in the function definition
-// corresponds to a node in the graph. Having the computation graph defined, the user can choose to compute the
-// function's value and/or its gradient with respect to the input variables. Optionally, the function can be optimized
-// using one of the available optimization algorithms.
-//
-// For example, here we define the function: f(x) = a*x^2 + b
-//
-//   {
-//       struct ggml_init_params params = {
-//           .mem_size   = 16*1024*1024,
-//           .mem_buffer = NULL,
-//       };
-//
-//       // memory allocation happens here
-//       struct ggml_context * ctx = ggml_init(params);
-//
-//       struct ggml_tensor * x = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1);
-//
-//       ggml_set_param(ctx, x); // x is an input variable
-//
-//       struct ggml_tensor * a  = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1);
-//       struct ggml_tensor * b  = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1);
-//       struct ggml_tensor * x2 = ggml_mul(ctx, x, x);
-//       struct ggml_tensor * f  = ggml_add(ctx, ggml_mul(ctx, a, x2), b);
-//
-//       ...
-//   }
-//
-// Notice that the function definition above does not involve any actual computation. The computation is performed only
-// when the user explicitly requests it. For example, to compute the function's value at x = 2.0:
-//
-//   {
-//       ...
-//
-//       struct ggml_cgraph * gf = ggml_new_graph(ctx);
-//       ggml_build_forward_expand(gf, f);
-//
-//       // set the input variable and parameter values
-//       ggml_set_f32(x, 2.0f);
-//       ggml_set_f32(a, 3.0f);
-//       ggml_set_f32(b, 4.0f);
-//
-//       ggml_graph_compute_with_ctx(ctx, &gf, n_threads);
-//
-//       printf("f = %f\n", ggml_get_f32_1d(f, 0));
-//
-//       ...
-//   }
-//
-// The actual computation is performed in the ggml_graph_compute() function.
-//
-// The ggml_new_tensor_...() functions create new tensors. They are allocated in the memory buffer provided to the
-// ggml_init() function. You have to be careful not to exceed the memory buffer size. Therefore, you have to know
-// in advance how much memory you need for your computation. Alternatively, you can allocate a large enough memory
-// and after defining the computation graph, call the ggml_used_mem() function to find out how much memory was
-// actually needed.
-//
-// The ggml_set_param() function marks a tensor as an input variable. This is used by the automatic
-// differentiation and optimization algorithms.
-//
-// The described approach allows to define the function graph once and then compute its forward or backward graphs
-// multiple times. All computations will use the same memory buffer allocated in the ggml_init() function. This way
-// the user can avoid the memory allocation overhead at runtime.
-//
-// The library supports multi-dimensional tensors - up to 4 dimensions. The FP16 and FP32 data types are first class
-// citizens, but in theory the library can be extended to support FP8 and integer data types.
-//
-// Each tensor operation produces a new tensor. Initially the library was envisioned to support only the use of unary
-// and binary operations. Most of the available operations fall into one of these two categories. With time, it became
-// clear that the library needs to support more complex operations. The way to support these operations is not clear
-// yet, but a few examples are demonstrated in the following operations:
-//
-//   - ggml_permute()
-//   - ggml_conv_1d_1s()
-//   - ggml_conv_1d_2s()
-//
-// For each tensor operator, the library implements a forward and backward computation function. The forward function
-// computes the output tensor value given the input tensor values. The backward function computes the adjoint of the
-// input tensors given the adjoint of the output tensor. For a detailed explanation of what this means, take a
-// calculus class, or watch the following video:
-//
-//   What is Automatic Differentiation?
-//   https://www.youtube.com/watch?v=wG_nF1awSSY
-//
-//
-// ## Tensor data (struct ggml_tensor)
-//
-// The tensors are stored in memory via the ggml_tensor struct. The structure provides information about the size of
-// the tensor, the data type, and the memory buffer where the tensor data is stored. Additionally, it contains
-// pointers to the "source" tensors - i.e. the tensors that were used to compute the current tensor. For example:
-//
-//   {
-//       struct ggml_tensor * c = ggml_add(ctx, a, b);
-//
-//       assert(c->src[0] == a);
-//       assert(c->src[1] == b);
-//   }
-//
-// The multi-dimensional tensors are stored in row-major order. The ggml_tensor struct contains fields for the
-// number of elements in each dimension ("ne") as well as the number of bytes ("nb", a.k.a. stride). This allows
-// to store tensors that are not contiguous in memory, which is useful for operations such as transposition and
-// permutation. All tensor operations have to take the stride into account and not assume that the tensor is
-// contiguous in memory.
-//
-// The data of the tensor is accessed via the "data" pointer. For example:
-//
-//   {
-//       const int nx = 2;
-//       const int ny = 3;
-//
-//       struct ggml_tensor * a = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, nx, ny);
-//
-//       for (int y = 0; y < ny; y++) {
-//           for (int x = 0; x < nx; x++) {
-//               *(float *) ((char *) a->data + y*a->nb[1] + x*a->nb[0]) = x + y;
-//           }
-//       }
-//
-//       ...
-//   }
-//
-// Alternatively, there are helper functions, such as ggml_get_f32_1d() and ggml_set_f32_1d() that can be used.
-//
-// ## The matrix multiplication operator (ggml_mul_mat)
-//
-// TODO
-//
-//
-// ## Multi-threading
-//
-// TODO
-//
-//
-// ## Overview of ggml.c
-//
-// TODO
-//
-//
-// ## SIMD optimizations
-//
-// TODO
-//
-//
-// ## Debugging ggml
-//
-// TODO
-//
-//
-
-#ifdef GGML_SHARED
-#    if defined(_WIN32) && !defined(__MINGW32__)
-#        ifdef GGML_BUILD
-#            define GGML_API __declspec(dllexport)
-#        else
-#            define GGML_API __declspec(dllimport)
-#        endif
-#    else
-#        define GGML_API __attribute__ ((visibility ("default")))
-#    endif
-#else
-#    define GGML_API
-#endif
-
-#ifdef GGML_MULTIPLATFORM
-#    if defined(_WIN32)
-#        define GGML_CALL
-#    else
-#        define GGML_CALL __attribute__((__ms_abi__))
-#    endif
-#else
-#    define GGML_CALL
-#endif
-
-// TODO: support for clang
-#ifdef __GNUC__
-#    define GGML_DEPRECATED(func, hint) func __attribute__((deprecated(hint)))
-#elif defined(_MSC_VER)
-#    define GGML_DEPRECATED(func, hint) __declspec(deprecated(hint)) func
-#else
-#    define GGML_DEPRECATED(func, hint) func
-#endif
-
-#ifndef __GNUC__
-#    define GGML_ATTRIBUTE_FORMAT(...)
-#elif defined(__MINGW32__)
-#    define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__)))
-#else
-#    define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(printf, __VA_ARGS__)))
-#endif
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdio.h>
-
-#define GGML_FILE_MAGIC   0x67676d6c // "ggml"
-#define GGML_FILE_VERSION 1
-
-#define GGML_QNT_VERSION        2    // bump this on quantization format changes
-#define GGML_QNT_VERSION_FACTOR 1000 // do not change this
-
-#define GGML_MAX_DIMS           4
-#define GGML_MAX_PARAMS         2048
-#define GGML_MAX_CONTEXTS       64
-#define GGML_MAX_SRC            10
-#ifndef GGML_MAX_NAME
-#define GGML_MAX_NAME           64
-#endif
-#define GGML_MAX_OP_PARAMS      64
-#define GGML_DEFAULT_N_THREADS  4
-#define GGML_DEFAULT_GRAPH_SIZE 2048
-#if UINTPTR_MAX == 0xFFFFFFFF
-    #define GGML_MEM_ALIGN 4
-#else
-    #define GGML_MEM_ALIGN 16
-#endif
-
-#define GGML_EXIT_SUCCESS 0
-#define GGML_EXIT_ABORTED 1
-
-#define GGUF_MAGIC "GGUF"
-
-#define GGUF_VERSION 3
-
-#define GGUF_DEFAULT_ALIGNMENT 32
-
-#define GGML_UNUSED(x) (void)(x)
-
-#define GGML_PAD(x, n) (((x) + (n) - 1) & ~((n) - 1))
-
-#define GGML_ASSERT(x) \
-    do { \
-        if (!(x)) { \
-            fflush(stdout); \
-            fprintf(stderr, "GGML_ASSERT: %s:%d: %s\n", __FILE__, __LINE__, #x); \
-            ggml_print_backtrace(); \
-            abort(); \
-        } \
-    } while (0)
-
-#ifndef NDEBUG
-#define GGML_UNREACHABLE() GGML_ASSERT(!"statement should not be reached")
-#elif defined(__GNUC__)
-#define GGML_UNREACHABLE() __builtin_unreachable()
-#elif defined(_MSC_VER)
-#define GGML_UNREACHABLE() __assume(0)
-#else
-#define GGML_UNREACHABLE() ((void) 0)
-#endif
-
-// used to copy the number of elements and stride in bytes of tensors into local variables.
-// main purpose is to reduce code duplication and improve readability.
-//
-// example:
-//
-//    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne);
-//    GGML_TENSOR_LOCALS(size_t,  nb1, src1, nb);
-//
-#define GGML_TENSOR_LOCALS_1(type, prefix, pointer, array) \
-    const type prefix##0 = (pointer)->array[0]; \
-    GGML_UNUSED(prefix##0);
-#define GGML_TENSOR_LOCALS_2(type, prefix, pointer, array) \
-    GGML_TENSOR_LOCALS_1    (type, prefix, pointer, array) \
-    const type prefix##1 = (pointer)->array[1]; \
-    GGML_UNUSED(prefix##1);
-#define GGML_TENSOR_LOCALS_3(type, prefix, pointer, array) \
-    GGML_TENSOR_LOCALS_2    (type, prefix, pointer, array) \
-    const type prefix##2 = (pointer)->array[2]; \
-    GGML_UNUSED(prefix##2);
-#define GGML_TENSOR_LOCALS(type, prefix, pointer, array) \
-    GGML_TENSOR_LOCALS_3  (type, prefix, pointer, array) \
-    const type prefix##3 = (pointer)->array[3]; \
-    GGML_UNUSED(prefix##3);
-
-#define GGML_TENSOR_UNARY_OP_LOCALS \
-    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \
-    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb) \
-    GGML_TENSOR_LOCALS(int64_t, ne,  dst,  ne) \
-    GGML_TENSOR_LOCALS(size_t,  nb,  dst,  nb)
-
-#define GGML_TENSOR_BINARY_OP_LOCALS \
-    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \
-    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb) \
-    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \
-    GGML_TENSOR_LOCALS(size_t,  nb1, src1, nb) \
-    GGML_TENSOR_LOCALS(int64_t, ne,  dst,  ne) \
-    GGML_TENSOR_LOCALS(size_t,  nb,  dst,  nb)
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-    enum ggml_status {
-        GGML_STATUS_ALLOC_FAILED = -2,
-        GGML_STATUS_FAILED = -1,
-        GGML_STATUS_SUCCESS = 0,
-        GGML_STATUS_ABORTED = 1,
-    };
-
-    // get ggml_status name string
-    GGML_API GGML_CALL const char * ggml_status_to_string(enum ggml_status status);
-
-    // ieee 754-2008 half-precision float16
-    // todo: make this not an integral type
-    typedef uint16_t ggml_fp16_t;
-    GGML_API float       ggml_fp16_to_fp32(ggml_fp16_t);
-    GGML_API ggml_fp16_t ggml_fp32_to_fp16(float);
-    GGML_API void        ggml_fp16_to_fp32_row(const ggml_fp16_t *, float *, int64_t);
-    GGML_API void        ggml_fp32_to_fp16_row(const float *, ggml_fp16_t *, int64_t);
-
-    // google brain half-precision bfloat16
-    typedef struct { uint16_t bits; } ggml_bf16_t;
-    GGML_API ggml_bf16_t ggml_fp32_to_bf16(float);
-    GGML_API float       ggml_bf16_to_fp32(ggml_bf16_t);  // consider just doing << 16
-    GGML_API void        ggml_bf16_to_fp32_row(const ggml_bf16_t *, float *, int64_t);
-    GGML_API void        ggml_fp32_to_bf16_row(const float *, ggml_bf16_t *, int64_t);
-
-    struct ggml_object;
-    struct ggml_context;
-
-    // NOTE: always add types at the end of the enum to keep backward compatibility
-    enum ggml_type {
-        GGML_TYPE_F32     = 0,
-        GGML_TYPE_F16     = 1,
-        GGML_TYPE_Q4_0    = 2,
-        GGML_TYPE_Q4_1    = 3,
-        // GGML_TYPE_Q4_2 = 4, support has been removed
-        // GGML_TYPE_Q4_3 = 5, support has been removed
-        GGML_TYPE_Q5_0    = 6,
-        GGML_TYPE_Q5_1    = 7,
-        GGML_TYPE_Q8_0    = 8,
-        GGML_TYPE_Q8_1    = 9,
-        GGML_TYPE_Q2_K    = 10,
-        GGML_TYPE_Q3_K    = 11,
-        GGML_TYPE_Q4_K    = 12,
-        GGML_TYPE_Q5_K    = 13,
-        GGML_TYPE_Q6_K    = 14,
-        GGML_TYPE_Q8_K    = 15,
-        GGML_TYPE_IQ2_XXS = 16,
-        GGML_TYPE_IQ2_XS  = 17,
-        GGML_TYPE_IQ3_XXS = 18,
-        GGML_TYPE_IQ1_S   = 19,
-        GGML_TYPE_IQ4_NL  = 20,
-        GGML_TYPE_IQ3_S   = 21,
-        GGML_TYPE_IQ2_S   = 22,
-        GGML_TYPE_IQ4_XS  = 23,
-        GGML_TYPE_I8      = 24,
-        GGML_TYPE_I16     = 25,
-        GGML_TYPE_I32     = 26,
-        GGML_TYPE_I64     = 27,
-        GGML_TYPE_F64     = 28,
-        GGML_TYPE_IQ1_M   = 29,
-        GGML_TYPE_BF16    = 30,
-        GGML_TYPE_COUNT,
-    };
-
-    // precision
-    enum ggml_prec {
-        GGML_PREC_DEFAULT,
-        GGML_PREC_F32,
-    };
-
-    enum ggml_backend_type {
-        GGML_BACKEND_TYPE_CPU = 0,
-        GGML_BACKEND_TYPE_GPU = 10,
-        GGML_BACKEND_TYPE_GPU_SPLIT = 20,
-    };
-
-    // model file types
-    enum ggml_ftype {
-        GGML_FTYPE_UNKNOWN        = -1,
-        GGML_FTYPE_ALL_F32        = 0,
-        GGML_FTYPE_MOSTLY_F16     = 1,  // except 1d tensors
-        GGML_FTYPE_MOSTLY_Q4_0    = 2,  // except 1d tensors
-        GGML_FTYPE_MOSTLY_Q4_1    = 3,  // except 1d tensors
-        GGML_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16
-        GGML_FTYPE_MOSTLY_Q8_0    = 7,  // except 1d tensors
-        GGML_FTYPE_MOSTLY_Q5_0    = 8,  // except 1d tensors
-        GGML_FTYPE_MOSTLY_Q5_1    = 9,  // except 1d tensors
-        GGML_FTYPE_MOSTLY_Q2_K    = 10, // except 1d tensors
-        GGML_FTYPE_MOSTLY_Q3_K    = 11, // except 1d tensors
-        GGML_FTYPE_MOSTLY_Q4_K    = 12, // except 1d tensors
-        GGML_FTYPE_MOSTLY_Q5_K    = 13, // except 1d tensors
-        GGML_FTYPE_MOSTLY_Q6_K    = 14, // except 1d tensors
-        GGML_FTYPE_MOSTLY_IQ2_XXS = 15, // except 1d tensors
-        GGML_FTYPE_MOSTLY_IQ2_XS  = 16, // except 1d tensors
-        GGML_FTYPE_MOSTLY_IQ3_XXS = 17, // except 1d tensors
-        GGML_FTYPE_MOSTLY_IQ1_S   = 18, // except 1d tensors
-        GGML_FTYPE_MOSTLY_IQ4_NL  = 19, // except 1d tensors
-        GGML_FTYPE_MOSTLY_IQ3_S   = 20, // except 1d tensors
-        GGML_FTYPE_MOSTLY_IQ2_S   = 21, // except 1d tensors
-        GGML_FTYPE_MOSTLY_IQ4_XS  = 22, // except 1d tensors
-        GGML_FTYPE_MOSTLY_IQ1_M   = 23, // except 1d tensors
-        GGML_FTYPE_MOSTLY_BF16    = 24, // except 1d tensors
-    };
-
-    // available tensor operations:
-    enum ggml_op {
-        GGML_OP_NONE = 0,
-
-        GGML_OP_DUP,
-        GGML_OP_ADD,
-        GGML_OP_ADD1,
-        GGML_OP_ACC,
-        GGML_OP_SUB,
-        GGML_OP_MUL,
-        GGML_OP_DIV,
-        GGML_OP_SQR,
-        GGML_OP_SQRT,
-        GGML_OP_LOG,
-        GGML_OP_SUM,
-        GGML_OP_SUM_ROWS,
-        GGML_OP_MEAN,
-        GGML_OP_ARGMAX,
-        GGML_OP_REPEAT,
-        GGML_OP_REPEAT_BACK,
-        GGML_OP_CONCAT,
-        GGML_OP_SILU_BACK,
-        GGML_OP_NORM, // normalize
-        GGML_OP_RMS_NORM,
-        GGML_OP_RMS_NORM_BACK,
-        GGML_OP_GROUP_NORM,
-
-        GGML_OP_MUL_MAT,
-        GGML_OP_MUL_MAT_ID,
-        GGML_OP_OUT_PROD,
-
-        GGML_OP_SCALE,
-        GGML_OP_SET,
-        GGML_OP_CPY,
-        GGML_OP_CONT,
-        GGML_OP_RESHAPE,
-        GGML_OP_VIEW,
-        GGML_OP_PERMUTE,
-        GGML_OP_TRANSPOSE,
-        GGML_OP_GET_ROWS,
-        GGML_OP_GET_ROWS_BACK,
-        GGML_OP_DIAG,
-        GGML_OP_DIAG_MASK_INF,
-        GGML_OP_DIAG_MASK_ZERO,
-        GGML_OP_SOFT_MAX,
-        GGML_OP_SOFT_MAX_BACK,
-        GGML_OP_ROPE,
-        GGML_OP_ROPE_BACK,
-        GGML_OP_CLAMP,
-        GGML_OP_CONV_TRANSPOSE_1D,
-        GGML_OP_IM2COL,
-        GGML_OP_CONV_TRANSPOSE_2D,
-        GGML_OP_POOL_1D,
-        GGML_OP_POOL_2D,
-        GGML_OP_UPSCALE, // nearest interpolate
-        GGML_OP_PAD,
-        GGML_OP_ARANGE,
-        GGML_OP_TIMESTEP_EMBEDDING,
-        GGML_OP_ARGSORT,
-        GGML_OP_LEAKY_RELU,
-
-        GGML_OP_FLASH_ATTN_EXT,
-        GGML_OP_FLASH_ATTN_BACK,
-        GGML_OP_SSM_CONV,
-        GGML_OP_SSM_SCAN,
-        GGML_OP_WIN_PART,
-        GGML_OP_WIN_UNPART,
-        GGML_OP_GET_REL_POS,
-        GGML_OP_ADD_REL_POS,
-
-        GGML_OP_UNARY,
-
-        GGML_OP_MAP_UNARY,
-        GGML_OP_MAP_BINARY,
-
-        GGML_OP_MAP_CUSTOM1_F32,
-        GGML_OP_MAP_CUSTOM2_F32,
-        GGML_OP_MAP_CUSTOM3_F32,
-
-        GGML_OP_MAP_CUSTOM1,
-        GGML_OP_MAP_CUSTOM2,
-        GGML_OP_MAP_CUSTOM3,
-
-        GGML_OP_CROSS_ENTROPY_LOSS,
-        GGML_OP_CROSS_ENTROPY_LOSS_BACK,
-
-        GGML_OP_COUNT,
-    };
-
-    enum ggml_unary_op {
-        GGML_UNARY_OP_ABS,
-        GGML_UNARY_OP_SGN,
-        GGML_UNARY_OP_NEG,
-        GGML_UNARY_OP_STEP,
-        GGML_UNARY_OP_TANH,
-        GGML_UNARY_OP_ELU,
-        GGML_UNARY_OP_RELU,
-        GGML_UNARY_OP_SIGMOID,
-        GGML_UNARY_OP_GELU,
-        GGML_UNARY_OP_GELU_QUICK,
-        GGML_UNARY_OP_SILU,
-        GGML_UNARY_OP_HARDSWISH,
-        GGML_UNARY_OP_HARDSIGMOID,
-
-        GGML_UNARY_OP_COUNT,
-    };
-
-    enum ggml_object_type {
-        GGML_OBJECT_TYPE_TENSOR,
-        GGML_OBJECT_TYPE_GRAPH,
-        GGML_OBJECT_TYPE_WORK_BUFFER
-    };
-
-    enum ggml_log_level {
-        GGML_LOG_LEVEL_ERROR = 2,
-        GGML_LOG_LEVEL_WARN  = 3,
-        GGML_LOG_LEVEL_INFO  = 4,
-        GGML_LOG_LEVEL_DEBUG = 5
-    };
-
-    enum ggml_tensor_flag {
-        GGML_TENSOR_FLAG_INPUT  = 1,
-        GGML_TENSOR_FLAG_OUTPUT = 2,
-        GGML_TENSOR_FLAG_PARAM  = 4,
-    };
-
-    // ggml object
-    struct ggml_object {
-        size_t offs;
-        size_t size;
-
-        struct ggml_object * next;
-
-        enum ggml_object_type type;
-
-        char padding[4];
-    };
-
-    static const size_t GGML_OBJECT_SIZE = sizeof(struct ggml_object);
-
-    // n-dimensional tensor
-    struct ggml_tensor {
-        enum ggml_type         type;
-
-        GGML_DEPRECATED(enum ggml_backend_type backend, "use the buffer type to find the storage location of the tensor");
-
-        struct ggml_backend_buffer * buffer;
-
-        int64_t ne[GGML_MAX_DIMS]; // number of elements
-        size_t  nb[GGML_MAX_DIMS]; // stride in bytes:
-                                   // nb[0] = ggml_type_size(type)
-                                   // nb[1] = nb[0]   * (ne[0] / ggml_blck_size(type)) + padding
-                                   // nb[i] = nb[i-1] * ne[i-1]
-
-        // compute data
-        enum ggml_op op;
-
-        // op params - allocated as int32_t for alignment
-        int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)];
-
-        int32_t flags;
-
-        struct ggml_tensor * grad;
-        struct ggml_tensor * src[GGML_MAX_SRC];
-
-        // performance
-        int     perf_runs;
-        int64_t perf_cycles;
-        int64_t perf_time_us;
-
-        struct ggml_tensor * view_src;
-        size_t               view_offs;
-
-        void * data;
-
-        char name[GGML_MAX_NAME];
-
-        void * extra; // extra things e.g. for ggml-cuda.cu
-
-        char padding[8];
-    };
-
-    static const size_t GGML_TENSOR_SIZE = sizeof(struct ggml_tensor);
-
-    // Abort callback
-    // If not NULL, called before ggml computation
-    // If it returns true, the computation is aborted
-    typedef bool (*ggml_abort_callback)(void * data);
-
-    // the compute plan that needs to be prepared for ggml_graph_compute()
-    // since https://github.com/ggerganov/ggml/issues/287
-    struct ggml_cplan {
-        size_t    work_size; // size of work buffer, calculated by `ggml_graph_plan()`
-        uint8_t * work_data; // work buffer, to be allocated by caller before calling to `ggml_graph_compute()`
-
-        int n_threads;
-
-        // abort ggml_graph_compute when true
-        ggml_abort_callback abort_callback;
-        void *              abort_callback_data;
-    };
-
-    enum ggml_cgraph_eval_order {
-        GGML_CGRAPH_EVAL_ORDER_LEFT_TO_RIGHT = 0,
-        GGML_CGRAPH_EVAL_ORDER_RIGHT_TO_LEFT,
-        GGML_CGRAPH_EVAL_ORDER_COUNT
-    };
-
-    struct ggml_hash_set {
-        size_t size;
-        struct ggml_tensor ** keys;
-    };
-
-    // computation graph
-    struct ggml_cgraph {
-        int size;
-        int n_nodes;
-        int n_leafs;
-
-        struct ggml_tensor ** nodes;
-        struct ggml_tensor ** grads;
-        struct ggml_tensor ** leafs;
-
-        struct ggml_hash_set visited_hash_table;
-
-        enum ggml_cgraph_eval_order order;
-
-        // performance
-        int     perf_runs;
-        int64_t perf_cycles;
-        int64_t perf_time_us;
-    };
-
-    // scratch buffer
-    struct ggml_scratch {
-        size_t offs;
-        size_t size;
-        void * data;
-    };
-
-    struct ggml_init_params {
-        // memory pool
-        size_t mem_size;   // bytes
-        void * mem_buffer; // if NULL, memory will be allocated internally
-        bool   no_alloc;   // don't allocate memory for the tensor data
-    };
-
-
-    // compute types
-
-    // NOTE: the INIT or FINALIZE pass is not scheduled unless explicitly enabled.
-    // This behavior was changed since https://github.com/ggerganov/llama.cpp/pull/1995.
-    enum ggml_task_type {
-        GGML_TASK_TYPE_INIT = 0,
-        GGML_TASK_TYPE_COMPUTE,
-        GGML_TASK_TYPE_FINALIZE,
-    };
-
-    struct ggml_compute_params {
-        enum ggml_task_type type;
-
-        // ith = thread index, nth = number of threads
-        int ith, nth;
-
-        // work buffer for all threads
-        size_t wsize;
-        void * wdata;
-    };
-
-    // numa strategies
-    enum ggml_numa_strategy {
-        GGML_NUMA_STRATEGY_DISABLED   = 0,
-        GGML_NUMA_STRATEGY_DISTRIBUTE = 1,
-        GGML_NUMA_STRATEGY_ISOLATE    = 2,
-        GGML_NUMA_STRATEGY_NUMACTL    = 3,
-        GGML_NUMA_STRATEGY_MIRROR     = 4,
-        GGML_NUMA_STRATEGY_COUNT
-    };
-
-    //
-    // GUID
-    //
-
-    // GUID types
-    typedef uint8_t ggml_guid[16];
-    typedef ggml_guid * ggml_guid_t;
-
-    GGML_API bool ggml_guid_matches(ggml_guid_t guid_a, ggml_guid_t guid_b);
-
-    // misc
-
-    GGML_API void    ggml_time_init(void); // call this once at the beginning of the program
-    GGML_API int64_t ggml_time_ms(void);
-    GGML_API int64_t ggml_time_us(void);
-    GGML_API int64_t ggml_cycles(void);
-    GGML_API int64_t ggml_cycles_per_ms(void);
-
-    GGML_API void    ggml_print_backtrace(void);
-
-    // accepts a UTF-8 path, even on Windows
-    GGML_API FILE *  ggml_fopen(const char * fname, const char * mode);
-
-    GGML_API void    ggml_numa_init(enum ggml_numa_strategy numa); // call once for better performance on NUMA systems
-    GGML_API bool    ggml_is_numa(void); // true if init detected that system has >1 NUMA node
-
-    GGML_API void    ggml_print_object (const struct ggml_object * obj);
-    GGML_API void    ggml_print_objects(const struct ggml_context * ctx);
-
-    GGML_API GGML_CALL int64_t ggml_nelements   (const struct ggml_tensor * tensor);
-    GGML_API GGML_CALL int64_t ggml_nrows       (const struct ggml_tensor * tensor);
-    GGML_API GGML_CALL size_t  ggml_nbytes      (const struct ggml_tensor * tensor);
-    GGML_API           size_t  ggml_nbytes_pad  (const struct ggml_tensor * tensor); // same as ggml_nbytes() but padded to GGML_MEM_ALIGN
-
-    GGML_API GGML_CALL int    ggml_blck_size(enum ggml_type type);
-    GGML_API GGML_CALL size_t ggml_type_size(enum ggml_type type);             // size in bytes for all elements in a block
-    GGML_API GGML_CALL size_t ggml_row_size (enum ggml_type type, int64_t ne); // size in bytes for all elements in a row
-
-    GGML_DEPRECATED(
-    GGML_API double ggml_type_sizef(enum ggml_type type), // ggml_type_size()/ggml_blck_size() as float
-    "use ggml_row_size() instead");
-
-    GGML_API GGML_CALL const char * ggml_type_name(enum ggml_type type);
-    GGML_API GGML_CALL const char * ggml_op_name  (enum ggml_op   op);
-    GGML_API           const char * ggml_op_symbol(enum ggml_op   op);
-
-    GGML_API           const char * ggml_unary_op_name(enum ggml_unary_op op);
-    GGML_API GGML_CALL const char * ggml_op_desc(const struct ggml_tensor * t); // unary or op name
-
-    GGML_API GGML_CALL size_t  ggml_element_size(const struct ggml_tensor * tensor);
-
-    GGML_API GGML_CALL bool    ggml_is_quantized(enum ggml_type type);
-
-    // TODO: temporary until model loading of ggml examples is refactored
-    GGML_API enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype);
-
-    GGML_API GGML_CALL bool ggml_is_transposed(const struct ggml_tensor * tensor);
-    GGML_API GGML_CALL bool ggml_is_permuted  (const struct ggml_tensor * tensor);
-    GGML_API GGML_CALL bool ggml_is_empty     (const struct ggml_tensor * tensor);
-    GGML_API           bool ggml_is_scalar    (const struct ggml_tensor * tensor);
-    GGML_API           bool ggml_is_vector    (const struct ggml_tensor * tensor);
-    GGML_API           bool ggml_is_matrix    (const struct ggml_tensor * tensor);
-    GGML_API           bool ggml_is_3d        (const struct ggml_tensor * tensor);
-    GGML_API           int  ggml_n_dims       (const struct ggml_tensor * tensor); // returns 1 for scalars
-
-    GGML_API GGML_CALL bool ggml_is_contiguous  (const struct ggml_tensor * tensor);
-    GGML_API GGML_CALL bool ggml_is_contiguous_0(const struct ggml_tensor * tensor); // same as ggml_is_contiguous()
-    GGML_API GGML_CALL bool ggml_is_contiguous_1(const struct ggml_tensor * tensor); // contiguous for dims >= 1
-    GGML_API GGML_CALL bool ggml_is_contiguous_2(const struct ggml_tensor * tensor); // contiguous for dims >= 2
-
-    GGML_API bool ggml_are_same_shape (const struct ggml_tensor * t0, const struct ggml_tensor * t1);
-    GGML_API bool ggml_are_same_stride(const struct ggml_tensor * t0, const struct ggml_tensor * t1);
-
-    // use this to compute the memory overhead of a tensor
-    GGML_API size_t ggml_tensor_overhead(void);
-
-    GGML_API bool ggml_validate_row_data(enum ggml_type type, const void * data, size_t nbytes);
-
-    // main
-
-    GGML_API struct ggml_context * ggml_init(struct ggml_init_params params);
-    GGML_API void                  ggml_free(struct ggml_context * ctx);
-
-    GGML_API size_t  ggml_used_mem(const struct ggml_context * ctx);
-
-    GGML_API size_t  ggml_set_scratch (struct ggml_context * ctx, struct ggml_scratch scratch);
-    GGML_API bool    ggml_get_no_alloc(struct ggml_context * ctx);
-    GGML_API void    ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc);
-
-    GGML_API void *  ggml_get_mem_buffer     (const struct ggml_context * ctx);
-    GGML_API size_t  ggml_get_mem_size       (const struct ggml_context * ctx);
-    GGML_API size_t  ggml_get_max_tensor_size(const struct ggml_context * ctx);
-
-    GGML_API struct ggml_tensor * ggml_new_tensor(
-            struct ggml_context * ctx,
-            enum   ggml_type type,
-            int    n_dims,
-            const int64_t *ne);
-
-    GGML_API struct ggml_tensor * ggml_new_tensor_1d(
-            struct ggml_context * ctx,
-            enum   ggml_type type,
-            int64_t ne0);
-
-    GGML_API struct ggml_tensor * ggml_new_tensor_2d(
-            struct ggml_context * ctx,
-            enum   ggml_type type,
-            int64_t ne0,
-            int64_t ne1);
-
-    GGML_API struct ggml_tensor * ggml_new_tensor_3d(
-            struct ggml_context * ctx,
-            enum   ggml_type type,
-            int64_t ne0,
-            int64_t ne1,
-            int64_t ne2);
-
-    GGML_API struct ggml_tensor * ggml_new_tensor_4d(
-            struct ggml_context * ctx,
-            enum   ggml_type type,
-            int64_t ne0,
-            int64_t ne1,
-            int64_t ne2,
-            int64_t ne3);
-
-    GGML_API struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value);
-    GGML_API struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value);
-
-    GGML_API struct ggml_tensor * ggml_dup_tensor (struct ggml_context * ctx, const struct ggml_tensor * src);
-    GGML_API struct ggml_tensor * ggml_view_tensor(struct ggml_context * ctx, struct ggml_tensor * src);
-
-    // Context tensor enumeration and lookup
-    GGML_API struct ggml_tensor * ggml_get_first_tensor(const struct ggml_context * ctx);
-    GGML_API struct ggml_tensor * ggml_get_next_tensor (const struct ggml_context * ctx, struct ggml_tensor * tensor);
-    GGML_API struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name);
-
-    GGML_API struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor);
-    GGML_API struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value);
-    GGML_API struct ggml_tensor * ggml_set_f32 (struct ggml_tensor * tensor, float value);
-
-    // Converts a flat index into coordinates
-    GGML_API void    ggml_unravel_index(const struct ggml_tensor * tensor, int64_t i, int64_t * i0, int64_t * i1, int64_t * i2, int64_t * i3);
-
-    GGML_API int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i);
-    GGML_API void    ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value);
-
-    GGML_API int32_t ggml_get_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3);
-    GGML_API void    ggml_set_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, int32_t value);
-
-    GGML_API float   ggml_get_f32_1d(const struct ggml_tensor * tensor, int i);
-    GGML_API void    ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value);
-
-    GGML_API float   ggml_get_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3);
-    GGML_API void    ggml_set_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, float value);
-
-    GGML_API void *  ggml_get_data    (const struct ggml_tensor * tensor);
-    GGML_API float * ggml_get_data_f32(const struct ggml_tensor * tensor);
-
-    GGML_API GGML_CALL enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor);
-
-    GGML_API const char *         ggml_get_name   (const struct ggml_tensor * tensor);
-    GGML_API struct ggml_tensor * ggml_set_name   (      struct ggml_tensor * tensor, const char * name);
-    GGML_ATTRIBUTE_FORMAT(2, 3)
-    GGML_API struct ggml_tensor * ggml_format_name(      struct ggml_tensor * tensor, const char * fmt, ...);
-
-    //
-    // operations on tensors with backpropagation
-    //
-
-    GGML_API struct ggml_tensor * ggml_dup(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // in-place, returns view(a)
-    GGML_API struct ggml_tensor * ggml_dup_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_add(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_add_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_add_cast(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            enum   ggml_type      type);
-
-    GGML_API struct ggml_tensor * ggml_add1(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_add1_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    // dst = a
-    // view(dst, nb1, nb2, nb3, offset) += b
-    // return dst
-    GGML_API struct ggml_tensor * ggml_acc(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            size_t                nb1,
-            size_t                nb2,
-            size_t                nb3,
-            size_t                offset);
-
-    GGML_API struct ggml_tensor * ggml_acc_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            size_t                nb1,
-            size_t                nb2,
-            size_t                nb3,
-            size_t                offset);
-
-    GGML_API struct ggml_tensor * ggml_sub(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_sub_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_mul(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_mul_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_div(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_div_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_sqr(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_sqr_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_sqrt(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_sqrt_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_log(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_log_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // return scalar
-    GGML_API struct ggml_tensor * ggml_sum(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // sums along rows, with input shape [a,b,c,d] return shape [1,b,c,d]
-    GGML_API struct ggml_tensor * ggml_sum_rows(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // mean along rows
-    GGML_API struct ggml_tensor * ggml_mean(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // argmax along rows
-    GGML_API struct ggml_tensor * ggml_argmax(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // if a is the same shape as b, and a is not parameter, return a
-    // otherwise, return a new tensor: repeat(a) to fit in b
-    GGML_API struct ggml_tensor * ggml_repeat(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    // sums repetitions in a into shape of b
-    GGML_API struct ggml_tensor * ggml_repeat_back(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    // concat a and b along dim
-    // used in stable-diffusion
-    GGML_API struct ggml_tensor * ggml_concat(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                   dim);
-
-    GGML_API struct ggml_tensor * ggml_abs(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_abs_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_sgn(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_sgn_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_neg(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_neg_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_step(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_step_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_tanh(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_tanh_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_elu(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_elu_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_relu(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_leaky_relu(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a, float negative_slope, bool inplace);
-
-    GGML_API struct ggml_tensor * ggml_relu_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_sigmoid(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_sigmoid_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_gelu(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_gelu_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_gelu_quick(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_gelu_quick_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_silu(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    GGML_API struct ggml_tensor * ggml_silu_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // a - x
-    // b - dy
-    GGML_API struct ggml_tensor * ggml_silu_back(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    // hardswish(x) = x * relu6(x + 3) / 6
-    GGML_API struct ggml_tensor * ggml_hardswish(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // hardsigmoid(x) = relu6(x + 3) / 6
-    GGML_API struct ggml_tensor * ggml_hardsigmoid(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // normalize along rows
-    GGML_API struct ggml_tensor * ggml_norm(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            float                 eps);
-
-    GGML_API struct ggml_tensor * ggml_norm_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            float                 eps);
-
-    GGML_API struct ggml_tensor * ggml_rms_norm(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            float                 eps);
-
-    GGML_API struct ggml_tensor * ggml_rms_norm_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            float                 eps);
-
-    // group normalize along ne0*ne1*n_groups
-    // used in stable-diffusion
-    // TODO: eps is hardcoded to 1e-6 for now
-    GGML_API struct ggml_tensor * ggml_group_norm(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   n_groups);
-
-    GGML_API struct ggml_tensor * ggml_group_norm_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   n_groups);
-
-    // a - x
-    // b - dy
-    GGML_API struct ggml_tensor * ggml_rms_norm_back(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            float                 eps);
-
-    // A: k columns, n rows => [ne03, ne02, n, k]
-    // B: k columns, m rows  (i.e. we transpose it internally) => [ne03 * x, ne02 * y, m, k]
-    // result is n columns, m rows => [ne03 * x, ne02 * y, m, n]
-    GGML_API struct ggml_tensor * ggml_mul_mat(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    // change the precision of a matrix multiplication
-    // set to GGML_PREC_F32 for higher precision (useful for phi-2)
-    GGML_API void ggml_mul_mat_set_prec(
-            struct ggml_tensor * a,
-            enum ggml_prec       prec);
-
-    // indirect matrix multiplication
-    GGML_API struct ggml_tensor * ggml_mul_mat_id(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * as,
-            struct ggml_tensor  * b,
-            struct ggml_tensor  * ids);
-
-    // A: m columns, n rows,
-    // B: p columns, n rows,
-    // result is m columns, p rows
-    GGML_API struct ggml_tensor * ggml_out_prod(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    //
-    // operations on tensors without backpropagation
-    //
-
-    GGML_API struct ggml_tensor * ggml_scale(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            float                 s);
-
-    // in-place, returns view(a)
-    GGML_API struct ggml_tensor * ggml_scale_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            float                 s);
-
-    // b -> view(a,offset,nb1,nb2,3), return modified a
-    GGML_API struct ggml_tensor * ggml_set(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            size_t                nb1,
-            size_t                nb2,
-            size_t                nb3,
-            size_t                offset);
-
-    // b -> view(a,offset,nb1,nb2,3), return view(a)
-    GGML_API struct ggml_tensor * ggml_set_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            size_t                nb1,
-            size_t                nb2,
-            size_t                nb3,
-            size_t                offset);
-
-    GGML_API struct ggml_tensor * ggml_set_1d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            size_t                offset);
-
-    GGML_API struct ggml_tensor * ggml_set_1d_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            size_t                offset);
-
-    // b -> view(a,offset,nb1,nb2,3), return modified a
-    GGML_API struct ggml_tensor * ggml_set_2d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            size_t                nb1,
-            size_t                offset);
-
-    // b -> view(a,offset,nb1,nb2,3), return view(a)
-    GGML_API struct ggml_tensor * ggml_set_2d_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            size_t                nb1,
-            size_t                offset);
-
-    // a -> b, return view(b)
-    GGML_API struct ggml_tensor * ggml_cpy(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_cast(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            enum   ggml_type      type);
-
-    // make contiguous
-    GGML_API struct ggml_tensor * ggml_cont(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // make contiguous, with new shape
-    GGML_API struct ggml_tensor * ggml_cont_1d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0);
-
-    GGML_API struct ggml_tensor * ggml_cont_2d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0,
-            int64_t               ne1);
-
-    GGML_API struct ggml_tensor * ggml_cont_3d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0,
-            int64_t               ne1,
-            int64_t               ne2);
-
-    GGML_API struct ggml_tensor * ggml_cont_4d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0,
-            int64_t               ne1,
-            int64_t               ne2,
-            int64_t               ne3);
-
-    // return view(a), b specifies the new shape
-    // TODO: when we start computing gradient, make a copy instead of view
-    GGML_API struct ggml_tensor * ggml_reshape(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    // return view(a)
-    // TODO: when we start computing gradient, make a copy instead of view
-    GGML_API struct ggml_tensor * ggml_reshape_1d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0);
-
-    GGML_API struct ggml_tensor * ggml_reshape_2d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0,
-            int64_t               ne1);
-
-    // return view(a)
-    // TODO: when we start computing gradient, make a copy instead of view
-    GGML_API struct ggml_tensor * ggml_reshape_3d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0,
-            int64_t               ne1,
-            int64_t               ne2);
-
-    GGML_API struct ggml_tensor * ggml_reshape_4d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0,
-            int64_t               ne1,
-            int64_t               ne2,
-            int64_t               ne3);
-
-    // offset in bytes
-    GGML_API struct ggml_tensor * ggml_view_1d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0,
-            size_t                offset);
-
-    GGML_API struct ggml_tensor * ggml_view_2d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0,
-            int64_t               ne1,
-            size_t                nb1, // row stride in bytes
-            size_t                offset);
-
-    GGML_API struct ggml_tensor * ggml_view_3d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0,
-            int64_t               ne1,
-            int64_t               ne2,
-            size_t                nb1, // row   stride in bytes
-            size_t                nb2, // slice stride in bytes
-            size_t                offset);
-
-    GGML_API struct ggml_tensor * ggml_view_4d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int64_t               ne0,
-            int64_t               ne1,
-            int64_t               ne2,
-            int64_t               ne3,
-            size_t                nb1, // row   stride in bytes
-            size_t                nb2, // slice stride in bytes
-            size_t                nb3,
-            size_t                offset);
-
-    GGML_API struct ggml_tensor * ggml_permute(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   axis0,
-            int                   axis1,
-            int                   axis2,
-            int                   axis3);
-
-    // alias for ggml_permute(ctx, a, 1, 0, 2, 3)
-    GGML_API struct ggml_tensor * ggml_transpose(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // supports 3D: a->ne[2] == b->ne[1]
-    GGML_API struct ggml_tensor * ggml_get_rows(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_get_rows_back(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            struct ggml_tensor  * c);
-
-    GGML_API struct ggml_tensor * ggml_diag(
-        struct ggml_context     * ctx,
-        struct ggml_tensor      * a);
-
-    // set elements above the diagonal to -INF
-    GGML_API struct ggml_tensor * ggml_diag_mask_inf(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   n_past);
-
-    // in-place, returns view(a)
-    GGML_API struct ggml_tensor * ggml_diag_mask_inf_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   n_past);
-
-    // set elements above the diagonal to 0
-    GGML_API struct ggml_tensor * ggml_diag_mask_zero(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   n_past);
-
-    // in-place, returns view(a)
-    GGML_API struct ggml_tensor * ggml_diag_mask_zero_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   n_past);
-
-    GGML_API struct ggml_tensor * ggml_soft_max(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // in-place, returns view(a)
-    GGML_API struct ggml_tensor * ggml_soft_max_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a);
-
-    // fused soft_max(a*scale + mask*(ALiBi slope))
-    // mask is optional
-    // max_bias = 0.0f for no ALiBi
-    GGML_API struct ggml_tensor * ggml_soft_max_ext(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * mask,
-            float                 scale,
-            float                 max_bias);
-
-    GGML_API struct ggml_tensor * ggml_soft_max_back(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    // in-place, returns view(a)
-    GGML_API struct ggml_tensor * ggml_soft_max_back_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    // rotary position embedding
-    // if mode & 1 == 1, skip n_past elements (NOT SUPPORTED)
-    // if mode & 2 == 1, GPT-NeoX style
-    //
-    // b is an int32 vector with size a->ne[2], it contains the positions
-    // c is freq factors (e.g. phi3-128k), (optional)
-    GGML_API struct ggml_tensor * ggml_rope(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                   n_dims,
-            int                   mode);
-
-    // in-place, returns view(a)
-    GGML_API struct ggml_tensor * ggml_rope_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                   n_dims,
-            int                   mode);
-
-    // custom RoPE
-    GGML_API struct ggml_tensor * ggml_rope_ext(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            struct ggml_tensor  * c,
-            int                   n_dims,
-            int                   mode,
-            int                   n_ctx_orig,
-            float                 freq_base,
-            float                 freq_scale,
-            float                 ext_factor,
-            float                 attn_factor,
-            float                 beta_fast,
-            float                 beta_slow);
-
-    // in-place, returns view(a)
-    GGML_API struct ggml_tensor * ggml_rope_ext_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            struct ggml_tensor  * c,
-            int                   n_dims,
-            int                   mode,
-            int                   n_ctx_orig,
-            float                 freq_base,
-            float                 freq_scale,
-            float                 ext_factor,
-            float                 attn_factor,
-            float                 beta_fast,
-            float                 beta_slow);
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_rope_custom(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                   n_dims,
-            int                   mode,
-            int                   n_ctx_orig,
-            float                 freq_base,
-            float                 freq_scale,
-            float                 ext_factor,
-            float                 attn_factor,
-            float                 beta_fast,
-            float                 beta_slow),
-        "use ggml_rope_ext instead");
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_rope_custom_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                   n_dims,
-            int                   mode,
-            int                   n_ctx_orig,
-            float                 freq_base,
-            float                 freq_scale,
-            float                 ext_factor,
-            float                 attn_factor,
-            float                 beta_fast,
-            float                 beta_slow),
-        "use ggml_rope_ext_inplace instead");
-
-    // compute correction dims for YaRN RoPE scaling
-    GGML_CALL void ggml_rope_yarn_corr_dims(
-        int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, float dims[2]);
-
-    // rotary position embedding backward, i.e compute dx from dy
-    // a - dy
-    GGML_API struct ggml_tensor * ggml_rope_back(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            struct ggml_tensor  * c,
-            int                   n_dims,
-            int                   mode,
-            int                   n_ctx_orig,
-            float                 freq_base,
-            float                 freq_scale,
-            float                 ext_factor,
-            float                 attn_factor,
-            float                 beta_fast,
-            float                 beta_slow);
-
-    // clamp
-    // in-place, returns view(a)
-    GGML_API struct ggml_tensor * ggml_clamp(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            float                 min,
-            float                 max);
-
-    GGML_API struct ggml_tensor * ggml_im2col(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                  s0,
-            int                  s1,
-            int                  p0,
-            int                  p1,
-            int                  d0,
-            int                  d1,
-            bool                 is_2D,
-            enum ggml_type       dst_type);
-
-    GGML_API struct ggml_tensor * ggml_conv_depthwise_2d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                  s0,
-            int                  s1,
-            int                  p0,
-            int                  p1,
-            int                  d0,
-            int                  d1);
-
-    GGML_API struct ggml_tensor * ggml_conv_1d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                   s0,  // stride
-            int                   p0,  // padding
-            int                   d0); // dilation
-
-    // conv_1d with padding = half
-    // alias for ggml_conv_1d(a, b, s, a->ne[0]/2, d)
-    GGML_API struct ggml_tensor* ggml_conv_1d_ph(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                   s,
-            int                   d);
-
-    GGML_API struct ggml_tensor * ggml_conv_transpose_1d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                   s0,
-            int                   p0,
-            int                   d0);
-
-    GGML_API struct ggml_tensor * ggml_conv_2d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                   s0,
-            int                   s1,
-            int                   p0,
-            int                   p1,
-            int                   d0,
-            int                   d1);
-
-
-    // kernel size is a->ne[0] x a->ne[1]
-    // stride is equal to kernel size
-    // padding is zero
-    // example:
-    // a:     16   16    3  768
-    // b:   1024 1024    3    1
-    // res:   64   64  768    1
-    // used in sam
-    GGML_API struct ggml_tensor * ggml_conv_2d_sk_p0(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    // kernel size is a->ne[0] x a->ne[1]
-    // stride is 1
-    // padding is half
-    // example:
-    // a:      3    3    256  256
-    // b:     64   64    256    1
-    // res:   64   64    256    1
-    // used in sam
-    GGML_API struct ggml_tensor * ggml_conv_2d_s1_ph(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b);
-
-    GGML_API struct ggml_tensor * ggml_conv_transpose_2d_p0(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * b,
-            int                   stride);
-
-    enum ggml_op_pool {
-        GGML_OP_POOL_MAX,
-        GGML_OP_POOL_AVG,
-        GGML_OP_POOL_COUNT,
-    };
-
-    GGML_API struct ggml_tensor * ggml_pool_1d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            enum ggml_op_pool     op,
-            int                   k0, // kernel size
-            int                   s0, // stride
-            int                   p0); // padding
-
-    // the result will have 2*p0 padding for the first dimension
-    // and 2*p1 padding for the second dimension
-    GGML_API struct ggml_tensor * ggml_pool_2d(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            enum ggml_op_pool     op,
-            int                   k0,
-            int                   k1,
-            int                   s0,
-            int                   s1,
-            float                 p0,
-            float                 p1);
-
-    // nearest interpolate
-    // multiplies ne0 and ne1 by scale factor
-    // used in stable-diffusion
-    GGML_API struct ggml_tensor * ggml_upscale(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   scale_factor);
-
-    // nearest interpolate
-    // nearest interpolate to specified dimensions
-    // used in tortoise.cpp
-    GGML_API struct ggml_tensor * ggml_upscale_ext(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   ne0,
-            int                   ne1,
-            int                   ne2,
-            int                   ne3);
-
-    // pad each dimension with zeros: [x, ..., x] -> [x, ..., x, 0, ..., 0]
-    GGML_API struct ggml_tensor * ggml_pad(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                  p0,
-            int                  p1,
-            int                  p2,
-            int                  p3);
-
-    // Ref: https://github.com/CompVis/stable-diffusion/blob/main/ldm/modules/diffusionmodules/util.py#L151
-    // timesteps: [N,]
-    // return: [N, dim]
-    GGML_API struct ggml_tensor * ggml_timestep_embedding(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * timesteps,
-            int                   dim,
-            int                   max_period);
-
-    // sort rows
-    enum ggml_sort_order {
-        GGML_SORT_ORDER_ASC,
-        GGML_SORT_ORDER_DESC,
-    };
-
-    GGML_API struct ggml_tensor * ggml_argsort(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            enum ggml_sort_order  order);
-
-    GGML_API struct ggml_tensor * ggml_arange(
-            struct ggml_context * ctx,
-            float                 start,
-            float                 stop,
-            float                 step);
-
-    // top k elements per row
-    GGML_API struct ggml_tensor * ggml_top_k(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   k);
-
-#define GGML_KQ_MASK_PAD 32
-
-    // q:    [n_embd, n_batch,     n_head,    1]
-    // k:    [n_embd, n_kv,        n_head_kv, 1]
-    // v:    [n_embd, n_kv,        n_head_kv, 1] !! not transposed !!
-    // mask: [n_kv,   n_batch_pad, 1,         1] !! n_batch_pad = GGML_PAD(n_batch, GGML_KQ_MASK_PAD) !!
-    // res:  [n_embd, n_head,      n_batch,   1] !! permuted !!
-    GGML_API struct ggml_tensor * ggml_flash_attn_ext(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * q,
-            struct ggml_tensor  * k,
-            struct ggml_tensor  * v,
-            struct ggml_tensor  * mask,
-            float                 scale,
-            float                 max_bias);
-
-    GGML_API void ggml_flash_attn_ext_set_prec(
-            struct ggml_tensor * a,
-            enum ggml_prec       prec);
-
-    // TODO: needs to be adapted to ggml_flash_attn_ext
-    GGML_API struct ggml_tensor * ggml_flash_attn_back(
-           struct ggml_context * ctx,
-           struct ggml_tensor  * q,
-           struct ggml_tensor  * k,
-           struct ggml_tensor  * v,
-           struct ggml_tensor  * d,
-           bool                  masked);
-
-    GGML_API struct ggml_tensor * ggml_ssm_conv(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * s,
-            struct ggml_tensor  * x,
-            struct ggml_tensor  * c,
-            struct ggml_tensor  * sq);
-
-    GGML_API struct ggml_tensor * ggml_ssm_scan(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * s,
-            struct ggml_tensor  * x,
-            struct ggml_tensor  * dt,
-            struct ggml_tensor  * A,
-            struct ggml_tensor  * B,
-            struct ggml_tensor  * C,
-            struct ggml_tensor  * sq);
-
-    // partition into non-overlapping windows with padding if needed
-    // example:
-    // a:   768   64   64    1
-    // w:    14
-    // res: 768   14   14    25
-    // used in sam
-    GGML_API struct ggml_tensor * ggml_win_part(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   w);
-
-    // reverse of ggml_win_part
-    // used in sam
-    GGML_API struct ggml_tensor * ggml_win_unpart(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   w0,
-            int                   h0,
-            int                   w);
-
-    GGML_API struct ggml_tensor * ggml_unary(
-            struct ggml_context * ctx,
-             struct ggml_tensor * a,
-             enum ggml_unary_op op);
-
-    GGML_API struct ggml_tensor * ggml_unary_inplace(
-        struct ggml_context * ctx,
-        struct ggml_tensor  * a,
-        enum ggml_unary_op op);
-
-    // used in sam
-    GGML_API struct ggml_tensor * ggml_get_rel_pos(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            int                   qh,
-            int                   kh);
-
-    // used in sam
-    GGML_API struct ggml_tensor * ggml_add_rel_pos(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * pw,
-            struct ggml_tensor  * ph);
-
-    GGML_API struct ggml_tensor * ggml_add_rel_pos_inplace(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * a,
-            struct ggml_tensor  * pw,
-            struct ggml_tensor  * ph);
-
-    // custom operators
-
-    typedef void (*ggml_unary_op_f32_t) (const int, float *, const float *);
-    typedef void (*ggml_binary_op_f32_t)(const int, float *, const float *, const float *);
-
-    typedef void (*ggml_custom1_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *);
-    typedef void (*ggml_custom2_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *);
-    typedef void (*ggml_custom3_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *);
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_unary_f32(
-            struct ggml_context        * ctx,
-            struct ggml_tensor         * a,
-                   ggml_unary_op_f32_t   fun),
-        "use ggml_map_custom1 instead");
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_unary_inplace_f32(
-            struct ggml_context        * ctx,
-            struct ggml_tensor         * a,
-                   ggml_unary_op_f32_t   fun),
-        "use ggml_map_custom1_inplace instead");
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_binary_f32(
-            struct ggml_context         * ctx,
-            struct ggml_tensor          * a,
-            struct ggml_tensor          * b,
-                   ggml_binary_op_f32_t   fun),
-        "use ggml_map_custom2 instead");
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_binary_inplace_f32(
-            struct ggml_context         * ctx,
-            struct ggml_tensor          * a,
-            struct ggml_tensor          * b,
-                   ggml_binary_op_f32_t   fun),
-        "use ggml_map_custom2_inplace instead");
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom1_f32(
-            struct ggml_context          * ctx,
-            struct ggml_tensor           * a,
-                   ggml_custom1_op_f32_t   fun),
-        "use ggml_map_custom1 instead");
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom1_inplace_f32(
-            struct ggml_context          * ctx,
-            struct ggml_tensor           * a,
-                   ggml_custom1_op_f32_t   fun),
-        "use ggml_map_custom1_inplace instead");
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom2_f32(
-            struct ggml_context          * ctx,
-            struct ggml_tensor           * a,
-            struct ggml_tensor           * b,
-                   ggml_custom2_op_f32_t   fun),
-        "use ggml_map_custom2 instead");
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom2_inplace_f32(
-            struct ggml_context          * ctx,
-            struct ggml_tensor           * a,
-            struct ggml_tensor           * b,
-                   ggml_custom2_op_f32_t   fun),
-        "use ggml_map_custom2_inplace instead");
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom3_f32(
-            struct ggml_context          * ctx,
-            struct ggml_tensor           * a,
-            struct ggml_tensor           * b,
-            struct ggml_tensor           * c,
-                   ggml_custom3_op_f32_t   fun),
-        "use ggml_map_custom3 instead");
-
-    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom3_inplace_f32(
-            struct ggml_context          * ctx,
-            struct ggml_tensor           * a,
-            struct ggml_tensor           * b,
-            struct ggml_tensor           * c,
-                   ggml_custom3_op_f32_t   fun),
-        "use ggml_map_custom3_inplace instead");
-
-    // custom operators v2
-
-    typedef void (*ggml_custom1_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, int ith, int nth, void * userdata);
-    typedef void (*ggml_custom2_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, int ith, int nth, void * userdata);
-    typedef void (*ggml_custom3_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, const struct ggml_tensor * c, int ith, int nth, void * userdata);
-
-    #define GGML_N_TASKS_MAX -1
-
-    GGML_API struct ggml_tensor * ggml_map_custom1(
-            struct ggml_context   * ctx,
-            struct ggml_tensor    * a,
-            ggml_custom1_op_t       fun,
-            int                     n_tasks,
-            void                  * userdata);
-
-    GGML_API struct ggml_tensor * ggml_map_custom1_inplace(
-            struct ggml_context   * ctx,
-            struct ggml_tensor    * a,
-            ggml_custom1_op_t       fun,
-            int                     n_tasks,
-            void                  * userdata);
-
-    GGML_API struct ggml_tensor * ggml_map_custom2(
-            struct ggml_context   * ctx,
-            struct ggml_tensor    * a,
-            struct ggml_tensor    * b,
-            ggml_custom2_op_t       fun,
-            int                     n_tasks,
-            void                  * userdata);
-
-    GGML_API struct ggml_tensor * ggml_map_custom2_inplace(
-            struct ggml_context   * ctx,
-            struct ggml_tensor    * a,
-            struct ggml_tensor    * b,
-            ggml_custom2_op_t       fun,
-            int                     n_tasks,
-            void                  * userdata);
-
-    GGML_API struct ggml_tensor * ggml_map_custom3(
-            struct ggml_context   * ctx,
-            struct ggml_tensor    * a,
-            struct ggml_tensor    * b,
-            struct ggml_tensor    * c,
-            ggml_custom3_op_t       fun,
-            int                     n_tasks,
-            void                  * userdata);
-
-    GGML_API struct ggml_tensor * ggml_map_custom3_inplace(
-            struct ggml_context   * ctx,
-            struct ggml_tensor    * a,
-            struct ggml_tensor    * b,
-            struct ggml_tensor    * c,
-            ggml_custom3_op_t       fun,
-            int                     n_tasks,
-            void                  * userdata);
-
-    // loss function
-
-    GGML_API struct ggml_tensor * ggml_cross_entropy_loss(
-            struct ggml_context         * ctx,
-            struct ggml_tensor          * a,
-            struct ggml_tensor          * b);
-
-    GGML_API struct ggml_tensor * ggml_cross_entropy_loss_back(
-            struct ggml_context         * ctx,
-            struct ggml_tensor          * a,
-            struct ggml_tensor          * b,
-            struct ggml_tensor          * c);
-
-    //
-    // automatic differentiation
-    //
-
-    GGML_API void ggml_set_param(
-            struct ggml_context * ctx,
-            struct ggml_tensor  * tensor);
-
-
-    GGML_API void ggml_build_forward_expand (struct ggml_cgraph * cgraph, struct ggml_tensor * tensor);
-    GGML_API void ggml_build_backward_expand(struct ggml_context * ctx, struct ggml_cgraph * gf, struct ggml_cgraph * gb, bool keep);
-
-    // graph allocation in a context
-    GGML_API struct ggml_cgraph * ggml_new_graph         (struct ggml_context * ctx); // size = GGML_DEFAULT_GRAPH_SIZE, grads = false
-    GGML_API struct ggml_cgraph * ggml_new_graph_custom  (struct ggml_context * ctx, size_t size, bool grads);
-    GGML_API struct ggml_cgraph * ggml_graph_dup         (struct ggml_context * ctx, struct ggml_cgraph * cgraph);
-    GGML_API struct ggml_cgraph   ggml_graph_view        (struct ggml_cgraph * cgraph, int i0, int i1);
-    GGML_API void                 ggml_graph_cpy         (struct ggml_cgraph * src, struct ggml_cgraph * dst);
-    GGML_API void                 ggml_graph_reset       (struct ggml_cgraph * cgraph);  // zero grads
-    GGML_API void                 ggml_graph_clear       (struct ggml_cgraph * cgraph);
-
-    GGML_API size_t ggml_graph_overhead(void);
-    GGML_API size_t ggml_graph_overhead_custom(size_t size, bool grads);
-
-    // ggml_graph_plan() has to be called before ggml_graph_compute()
-    // when plan.work_size > 0, caller must allocate memory for plan.work_data
-    GGML_API struct ggml_cplan ggml_graph_plan            (const struct ggml_cgraph * cgraph, int n_threads /*= GGML_DEFAULT_N_THREADS*/);
-    GGML_API enum ggml_status  ggml_graph_compute         (      struct ggml_cgraph * cgraph, struct ggml_cplan * cplan);
-    // same as ggml_graph_compute() but the work data is allocated as a part of the context
-    // note: the drawback of this API is that you must have ensured that the context has enough memory for the work data
-    GGML_API enum ggml_status  ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads);
-
-    GGML_API struct ggml_tensor * ggml_graph_get_tensor(struct ggml_cgraph * cgraph, const char * name);
-
-    GGML_API void                 ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname);
-    GGML_API struct ggml_cgraph * ggml_graph_import(const char * fname, struct ggml_context ** ctx_data, struct ggml_context ** ctx_eval);
-
-    // print info and performance information for the graph
-    GGML_API void ggml_graph_print(const struct ggml_cgraph * cgraph);
-
-    // dump the graph into a file using the dot format
-    GGML_API void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename);
-
-    // build gradient checkpointing backward graph gb for gf using provided checkpoints
-    // gb_tmp will contain original backward graph with rewritten backward process nodes,
-    // but without the second forward pass nodes.
-    GGML_API void ggml_build_backward_gradient_checkpointing(
-            struct ggml_context   * ctx,
-            struct ggml_cgraph    * gf,
-            struct ggml_cgraph    * gb,
-            struct ggml_cgraph    * gb_tmp,
-            struct ggml_tensor  * * checkpoints,
-            int                     n_checkpoints);
-    //
-    // optimization
-    //
-
-    // optimization methods
-    enum ggml_opt_type {
-        GGML_OPT_TYPE_ADAM,
-        GGML_OPT_TYPE_LBFGS,
-    };
-
-    // linesearch methods
-    enum ggml_linesearch {
-        GGML_LINESEARCH_DEFAULT = 1,
-
-        GGML_LINESEARCH_BACKTRACKING_ARMIJO       = 0,
-        GGML_LINESEARCH_BACKTRACKING_WOLFE        = 1,
-        GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE = 2,
-    };
-
-    // optimization return values
-    enum ggml_opt_result {
-        GGML_OPT_RESULT_OK = 0,
-        GGML_OPT_RESULT_DID_NOT_CONVERGE,
-        GGML_OPT_RESULT_NO_CONTEXT,
-        GGML_OPT_RESULT_INVALID_WOLFE,
-        GGML_OPT_RESULT_FAIL,
-        GGML_OPT_RESULT_CANCEL,
-
-        GGML_LINESEARCH_FAIL = -128,
-        GGML_LINESEARCH_MINIMUM_STEP,
-        GGML_LINESEARCH_MAXIMUM_STEP,
-        GGML_LINESEARCH_MAXIMUM_ITERATIONS,
-        GGML_LINESEARCH_INVALID_PARAMETERS,
-    };
-
-    typedef void (*ggml_opt_callback)(void * data, int accum_step, float * sched, bool * cancel);
-    typedef void (*ggml_log_callback)(enum ggml_log_level level, const char * text, void * user_data);
-
-    // optimization parameters
-    //
-    //   see ggml.c (ggml_opt_default_params) for default values
-    //
-    struct ggml_opt_params {
-        enum ggml_opt_type type;
-
-        size_t graph_size;
-
-        int n_threads;
-
-        // delta-based convergence test
-        //
-        //   if past == 0 - disabled
-        //   if past > 0:
-        //     stop if |f(x) - f(x_past)| < delta * max(1, |f(x)|)
-        //
-        int past;
-        float delta;
-
-        // maximum number of iterations without improvement
-        //
-        //   if 0 - disabled
-        //   if > 0:
-        //     assume convergence if no cost improvement in this number of iterations
-        //
-        int max_no_improvement;
-
-        bool print_forward_graph;
-        bool print_backward_graph;
-
-        int n_gradient_accumulation;
-
-        // ADAM parameters
-        struct {
-            int n_iter;
-
-            float sched; // schedule multiplier (fixed, decay or warmup)
-            float decay; // weight decay for AdamW, use 0.0f to disable
-            int   decay_min_ndim; // minimum number of tensor dimension to apply weight decay
-            float alpha; // learning rate
-            float beta1;
-            float beta2;
-            float eps;   // epsilon for numerical stability
-            float eps_f; // epsilon for convergence test
-            float eps_g; // epsilon for convergence test
-            float gclip; // gradient clipping
-        } adam;
-
-        // LBFGS parameters
-        struct {
-            int m; // number of corrections to approximate the inv. Hessian
-            int n_iter;
-            int max_linesearch;
-
-            float eps;      // convergence tolerance
-            float ftol;     // line search tolerance
-            float wolfe;
-            float min_step;
-            float max_step;
-
-            enum ggml_linesearch linesearch;
-        } lbfgs;
-    };
-
-    struct ggml_opt_context {
-        struct ggml_context * ctx;
-        struct ggml_opt_params params;
-
-        int iter;
-        int64_t nx; // number of parameter elements
-
-        bool just_initialized;
-
-        float loss_before;
-        float loss_after;
-
-        struct {
-            struct ggml_tensor * g;  // current gradient
-            struct ggml_tensor * m;  // first moment
-            struct ggml_tensor * v;  // second moment
-            struct ggml_tensor * pf; // past function values
-            float fx_best;
-            float fx_prev;
-            int n_no_improvement;
-        } adam;
-
-        struct {
-            struct ggml_tensor * x;    // current parameters
-            struct ggml_tensor * xp;   // previous parameters
-            struct ggml_tensor * g;    // current gradient
-            struct ggml_tensor * gp;   // previous gradient
-            struct ggml_tensor * d;    // search direction
-            struct ggml_tensor * pf;   // past function values
-            struct ggml_tensor * lmal; // the L-BFGS memory alpha
-            struct ggml_tensor * lmys; // the L-BFGS memory ys
-            struct ggml_tensor * lms;  // the L-BFGS memory s
-            struct ggml_tensor * lmy;  // the L-BFGS memory y
-            float fx_best;
-            float step;
-            int j;
-            int k;
-            int end;
-            int n_no_improvement;
-        } lbfgs;
-    };
-
-    GGML_API struct ggml_opt_params ggml_opt_default_params(enum ggml_opt_type type);
-
-    // optimize the function defined by the tensor f
-    GGML_API enum ggml_opt_result ggml_opt(
-            struct ggml_context * ctx,
-            struct ggml_opt_params params,
-            struct ggml_tensor * f);
-
-    // initialize optimizer context
-    GGML_API void ggml_opt_init(
-            struct ggml_context     * ctx,
-            struct ggml_opt_context * opt,
-            struct ggml_opt_params    params,
-            int64_t                   nx);
-
-    // continue optimizing the function defined by the tensor f
-    GGML_API enum ggml_opt_result ggml_opt_resume(
-            struct ggml_context * ctx,
-            struct ggml_opt_context * opt,
-            struct ggml_tensor * f);
-
-    // continue optimizing the function defined by the tensor f
-    GGML_API enum ggml_opt_result ggml_opt_resume_g(
-            struct ggml_context * ctx,
-            struct ggml_opt_context * opt,
-            struct ggml_tensor * f,
-            struct ggml_cgraph * gf,
-            struct ggml_cgraph * gb,
-            ggml_opt_callback callback,
-            void * callback_data);
-
-    //
-    // tensor flags
-    //
-    GGML_API void ggml_set_input(struct ggml_tensor * tensor);
-    GGML_API void ggml_set_output(struct ggml_tensor * tensor);
-
-    //
-    // quantization
-    //
-
-    // - ggml_quantize_init can be called multiple times with the same type
-    //   it will only initialize the quantization tables for the first call or after ggml_quantize_free
-    //   automatically called by ggml_quantize_chunk for convenience
-    //
-    // - ggml_quantize_free will free any memory allocated by ggml_quantize_init
-    //   call this at the end of the program to avoid memory leaks
-    //
-    // note: these are thread-safe
-    //
-    GGML_API void ggml_quantize_init(enum ggml_type type);
-    GGML_API void ggml_quantize_free(void);
-
-    // some quantization type cannot be used without an importance matrix
-    GGML_API bool ggml_quantize_requires_imatrix(enum ggml_type type);
-
-    // calls ggml_quantize_init internally (i.e. can allocate memory)
-    GGML_API size_t ggml_quantize_chunk(
-            enum ggml_type   type,
-               const float * src,
-                      void * dst,
-                   int64_t   start,
-                   int64_t   nrows,
-                   int64_t   n_per_row,
-               const float * imatrix);
-
-    //
-    // gguf
-    //
-
-    enum gguf_type {
-        GGUF_TYPE_UINT8   = 0,
-        GGUF_TYPE_INT8    = 1,
-        GGUF_TYPE_UINT16  = 2,
-        GGUF_TYPE_INT16   = 3,
-        GGUF_TYPE_UINT32  = 4,
-        GGUF_TYPE_INT32   = 5,
-        GGUF_TYPE_FLOAT32 = 6,
-        GGUF_TYPE_BOOL    = 7,
-        GGUF_TYPE_STRING  = 8,
-        GGUF_TYPE_ARRAY   = 9,
-        GGUF_TYPE_UINT64  = 10,
-        GGUF_TYPE_INT64   = 11,
-        GGUF_TYPE_FLOAT64 = 12,
-        GGUF_TYPE_COUNT,       // marks the end of the enum
-    };
-
-    struct gguf_context;
-
-    struct gguf_init_params {
-        bool no_alloc;
-
-        // if not NULL, create a ggml_context and allocate the tensor data in it
-        struct ggml_context ** ctx;
-    };
-
-    GGML_API struct gguf_context * gguf_init_empty(void);
-    GGML_API struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params);
-    //GGML_API struct gguf_context * gguf_init_from_buffer(..);
-
-    GGML_API void gguf_free(struct gguf_context * ctx);
-
-    GGML_API const char * gguf_type_name(enum gguf_type type);
-
-    GGML_API int    gguf_get_version    (const struct gguf_context * ctx);
-    GGML_API size_t gguf_get_alignment  (const struct gguf_context * ctx);
-    GGML_API size_t gguf_get_data_offset(const struct gguf_context * ctx);
-    GGML_API void * gguf_get_data       (const struct gguf_context * ctx);
-
-    GGML_API int          gguf_get_n_kv(const struct gguf_context * ctx);
-    GGML_API int          gguf_find_key(const struct gguf_context * ctx, const char * key);
-    GGML_API const char * gguf_get_key (const struct gguf_context * ctx, int key_id);
-
-    GGML_API enum gguf_type gguf_get_kv_type (const struct gguf_context * ctx, int key_id);
-    GGML_API enum gguf_type gguf_get_arr_type(const struct gguf_context * ctx, int key_id);
-
-    // will abort if the wrong type is used for the key
-    GGML_API uint8_t      gguf_get_val_u8  (const struct gguf_context * ctx, int key_id);
-    GGML_API int8_t       gguf_get_val_i8  (const struct gguf_context * ctx, int key_id);
-    GGML_API uint16_t     gguf_get_val_u16 (const struct gguf_context * ctx, int key_id);
-    GGML_API int16_t      gguf_get_val_i16 (const struct gguf_context * ctx, int key_id);
-    GGML_API uint32_t     gguf_get_val_u32 (const struct gguf_context * ctx, int key_id);
-    GGML_API int32_t      gguf_get_val_i32 (const struct gguf_context * ctx, int key_id);
-    GGML_API float        gguf_get_val_f32 (const struct gguf_context * ctx, int key_id);
-    GGML_API uint64_t     gguf_get_val_u64 (const struct gguf_context * ctx, int key_id);
-    GGML_API int64_t      gguf_get_val_i64 (const struct gguf_context * ctx, int key_id);
-    GGML_API double       gguf_get_val_f64 (const struct gguf_context * ctx, int key_id);
-    GGML_API bool         gguf_get_val_bool(const struct gguf_context * ctx, int key_id);
-    GGML_API const char * gguf_get_val_str (const struct gguf_context * ctx, int key_id);
-    GGML_API const void * gguf_get_val_data(const struct gguf_context * ctx, int key_id);
-    GGML_API int          gguf_get_arr_n   (const struct gguf_context * ctx, int key_id);
-    GGML_API const void * gguf_get_arr_data(const struct gguf_context * ctx, int key_id);
-    GGML_API const char * gguf_get_arr_str (const struct gguf_context * ctx, int key_id, int i);
-
-    GGML_API int            gguf_get_n_tensors    (const struct gguf_context * ctx);
-    GGML_API int            gguf_find_tensor      (const struct gguf_context * ctx, const char * name);
-    GGML_API size_t         gguf_get_tensor_offset(const struct gguf_context * ctx, int i);
-    GGML_API char *         gguf_get_tensor_name  (const struct gguf_context * ctx, int i);
-    GGML_API enum ggml_type gguf_get_tensor_type  (const struct gguf_context * ctx, int i);
-
-    // removes key if it exists
-    GGML_API void gguf_remove_key(struct gguf_context * ctx, const char * key);
-
-    // overrides existing values or adds a new one
-    GGML_API void gguf_set_val_u8  (struct gguf_context * ctx, const char * key, uint8_t  val);
-    GGML_API void gguf_set_val_i8  (struct gguf_context * ctx, const char * key, int8_t   val);
-    GGML_API void gguf_set_val_u16 (struct gguf_context * ctx, const char * key, uint16_t val);
-    GGML_API void gguf_set_val_i16 (struct gguf_context * ctx, const char * key, int16_t  val);
-    GGML_API void gguf_set_val_u32 (struct gguf_context * ctx, const char * key, uint32_t val);
-    GGML_API void gguf_set_val_i32 (struct gguf_context * ctx, const char * key, int32_t  val);
-    GGML_API void gguf_set_val_f32 (struct gguf_context * ctx, const char * key, float    val);
-    GGML_API void gguf_set_val_u64 (struct gguf_context * ctx, const char * key, uint64_t val);
-    GGML_API void gguf_set_val_i64 (struct gguf_context * ctx, const char * key, int64_t  val);
-    GGML_API void gguf_set_val_f64 (struct gguf_context * ctx, const char * key, double   val);
-    GGML_API void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool     val);
-    GGML_API void gguf_set_val_str (struct gguf_context * ctx, const char * key, const char * val);
-    GGML_API void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, int n);
-    GGML_API void gguf_set_arr_str (struct gguf_context * ctx, const char * key, const char ** data, int n);
-
-    // set or add KV pairs from another context
-    GGML_API void gguf_set_kv(struct gguf_context * ctx, struct gguf_context * src);
-
-    // manage tensor info
-    GGML_API void gguf_add_tensor(struct gguf_context * ctx, const struct ggml_tensor * tensor);
-    GGML_API void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type);
-    GGML_API void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data, size_t size);
-
-    // writing gguf files can be done in 2 ways:
-    //
-    // - write the entire gguf_context to a binary file in a single pass:
-    //
-    //   gguf_write_to_file(ctx, fname);
-    //
-    // - first prepare a file with a placeholder for the meta data, write the tensor data, then write the meta data:
-    //
-    //   FILE * f = fopen(fname, "wb");
-    //   fseek(f, gguf_get_meta_size(ctx), SEEK_SET);
-    //   fwrite(f, ...);
-    //   void * data = gguf_meta_get_meta_data(ctx);
-    //   fseek(f, 0, SEEK_SET);
-    //   fwrite(f, data, gguf_get_meta_size(ctx));
-    //   free(data);
-    //   fclose(f);
-    //
-
-    // write the entire context to a binary file
-    GGML_API void gguf_write_to_file(const struct gguf_context * ctx, const char * fname, bool only_meta);
-
-    // get the size in bytes of the meta data (header, kv pairs, tensor info) including padding
-    GGML_API size_t gguf_get_meta_size(const struct gguf_context * ctx);
-    GGML_API void   gguf_get_meta_data(const struct gguf_context * ctx, void * data);
-
-    //
-    // system info
-    //
-
-    GGML_API int ggml_cpu_has_avx        (void);
-    GGML_API int ggml_cpu_has_avx_vnni   (void);
-    GGML_API int ggml_cpu_has_avx2       (void);
-    GGML_API int ggml_cpu_has_avx512     (void);
-    GGML_API int ggml_cpu_has_avx512_vbmi(void);
-    GGML_API int ggml_cpu_has_avx512_vnni(void);
-    GGML_API int ggml_cpu_has_avx512_bf16(void);
-    GGML_API int ggml_cpu_has_fma        (void);
-    GGML_API int ggml_cpu_has_neon       (void);
-    GGML_API int ggml_cpu_has_sve        (void);
-    GGML_API int ggml_cpu_has_arm_fma    (void);
-    GGML_API int ggml_cpu_has_metal      (void);
-    GGML_API int ggml_cpu_has_f16c       (void);
-    GGML_API int ggml_cpu_has_fp16_va    (void);
-    GGML_API int ggml_cpu_has_wasm_simd  (void);
-    GGML_API int ggml_cpu_has_blas       (void);
-    GGML_API int ggml_cpu_has_cuda       (void);
-    GGML_API int ggml_cpu_has_vulkan     (void);
-    GGML_API int ggml_cpu_has_kompute    (void);
-    GGML_API int ggml_cpu_has_gpublas    (void);
-    GGML_API int ggml_cpu_has_sse3       (void);
-    GGML_API int ggml_cpu_has_ssse3      (void);
-    GGML_API int ggml_cpu_has_sycl       (void);
-    GGML_API int ggml_cpu_has_rpc        (void);
-    GGML_API int ggml_cpu_has_vsx        (void);
-    GGML_API int ggml_cpu_has_matmul_int8(void);
-
-    //
-    // Internal types and functions exposed for tests and benchmarks
-    //
-
-#ifdef  __cplusplus
-// restrict not standard in C++
-#define GGML_RESTRICT
-#else
-#define GGML_RESTRICT restrict
-#endif
-    typedef void (*ggml_to_float_t)  (const void  * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
-    typedef void (*ggml_from_float_t)(const float * GGML_RESTRICT x, void  * GGML_RESTRICT y, int64_t k);
-    typedef void (*ggml_vec_dot_t)   (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT x, size_t bx,
-                                      const void * GGML_RESTRICT y, size_t by, int nrc);
-
-    typedef struct {
-        const char      * type_name;
-        int               blck_size;
-        size_t            type_size;
-        bool              is_quantized;
-        ggml_to_float_t   to_float;
-        ggml_from_float_t from_float;
-        ggml_from_float_t from_float_reference;
-        ggml_vec_dot_t    vec_dot;
-        enum ggml_type    vec_dot_type;
-        int64_t           nrows; // number of rows to process simultaneously;
-    } ggml_type_traits_t;
-
-    GGML_API ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type);
-
-#ifdef  __cplusplus
-}
-#endif
diff --git a/ggml/.gitignore b/ggml/.gitignore
new file mode 100644 (file)
index 0000000..9dd9dde
--- /dev/null
@@ -0,0 +1 @@
+src/ggml-metal-embed.metal
diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f3763f7
--- /dev/null
@@ -0,0 +1,238 @@
+cmake_minimum_required(VERSION 3.14) # for add_link_options and implicit target directories.
+project("ggml" C CXX)
+include(CheckIncludeFileCXX)
+
+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+
+if (NOT XCODE AND NOT MSVC AND NOT CMAKE_BUILD_TYPE)
+    set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
+    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
+endif()
+
+if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+    set(GGML_STANDALONE ON)
+
+    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+
+    # configure project version
+    # TODO
+else()
+    set(GGML_STANDALONE OFF)
+endif()
+
+if (EMSCRIPTEN)
+    set(BUILD_SHARED_LIBS_DEFAULT OFF)
+
+    option(GGML_WASM_SINGLE_FILE "ggml: embed WASM inside the generated ggml.js" ON)
+else()
+    if (MINGW)
+        set(BUILD_SHARED_LIBS_DEFAULT OFF)
+    else()
+        set(BUILD_SHARED_LIBS_DEFAULT ON)
+    endif()
+endif()
+
+option(BUILD_SHARED_LIBS "ggml: build shared libraries" ${BUILD_SHARED_LIBS_DEFAULT})
+
+#
+# option list
+#
+
+# TODO: mark all options as advanced when not GGML_STANDALONE
+
+if (APPLE)
+    set(GGML_METAL_DEFAULT ON)
+    set(GGML_BLAS_DEFAULT ON)
+    set(GGML_BLAS_VENDOR_DEFAULT "Apple")
+else()
+    set(GGML_METAL_DEFAULT OFF)
+    set(GGML_BLAS_DEFAULT OFF)
+    set(GGML_BLAS_VENDOR_DEFAULT "Generic")
+endif()
+
+# general
+option(GGML_STATIC "ggml: static link libraries"         OFF)
+option(GGML_NATIVE "ggml: enable -march=native flag"     ON)
+option(GGML_LTO    "ggml: enable link time optimization" OFF)
+option(GGML_CCACHE "ggml: use ccache if available"       ON)
+
+# debug
+option(GGML_ALL_WARNINGS           "ggml: enable all compiler warnings"                   ON)
+option(GGML_ALL_WARNINGS_3RD_PARTY "ggml: enable all compiler warnings in 3rd party libs" OFF)
+option(GGML_GPROF                  "ggml: enable gprof"                                   OFF)
+
+# build
+option(GGML_FATAL_WARNINGS    "ggml: enable -Werror flag"    OFF)
+
+# sanitizers
+option(GGML_SANITIZE_THREAD    "ggml: enable thread sanitizer"    OFF)
+option(GGML_SANITIZE_ADDRESS   "ggml: enable address sanitizer"   OFF)
+option(GGML_SANITIZE_UNDEFINED "ggml: enable undefined sanitizer" OFF)
+
+# instruction set specific
+if (GGML_NATIVE)
+    set(INS_ENB OFF)
+else()
+    set(INS_ENB ON)
+endif()
+
+option(GGML_CPU_HBM     "ggml: use memkind for CPU HBM" OFF)
+
+option(GGML_AVX         "ggml: enable AVX"              ${INS_ENB})
+option(GGML_AVX2        "ggml: enable AVX2"             ${INS_ENB})
+option(GGML_AVX512      "ggml: enable AVX512"           OFF)
+option(GGML_AVX512_VBMI "ggml: enable AVX512-VBMI"      OFF)
+option(GGML_AVX512_VNNI "ggml: enable AVX512-VNNI"      OFF)
+option(GGML_AVX512_BF16 "ggml: enable AVX512-BF16"      OFF)
+option(GGML_FMA         "ggml: enable FMA"              ${INS_ENB})
+if (NOT MSVC)
+    option(GGML_F16C    "ggml: enable F16C"             ${INS_ENB}) # in MSVC F16C is implied with AVX2/AVX512
+endif()
+option(GGML_LASX        "ggml: enable lasx"             ON)
+option(GGML_LSX         "ggml: enable lsx"              ON)
+option(GGML_SVE         "ggml: enable SVE"              OFF)
+
+if (WIN32)
+    set(GGML_WIN_VER "0x602" CACHE STRING "ggml: Windows Version")
+endif()
+
+# ggml core
+set(GGML_SCHED_MAX_COPIES  "4" CACHE STRING "ggml: max input copies for pipeline parallelism")
+
+# 3rd party libs / backends
+option(GGML_ACCELERATE                      "ggml: enable Accelerate framework"               ON)
+option(GGML_BLAS                            "ggml: use BLAS"                                  ${GGML_BLAS_DEFAULT})
+set(GGML_BLAS_VENDOR ${GGML_BLAS_VENDOR_DEFAULT} CACHE STRING
+                                            "ggml: BLAS library vendor")
+option(GGML_LLAMAFILE                       "ggml: use ggml SGEMM"                            OFF)
+
+option(GGML_CUDA                            "ggml: use CUDA"                                  OFF)
+option(GGML_CUDA_FORCE_DMMV                 "ggml: use dmmv instead of mmvq CUDA kernels"     OFF)
+option(GGML_CUDA_FORCE_MMQ                  "ggml: use mmq kernels instead of cuBLAS"         OFF)
+set   (GGML_CUDA_DMMV_X   "32" CACHE STRING "ggml: x stride for dmmv CUDA kernels")
+set   (GGML_CUDA_MMV_Y     "1" CACHE STRING "ggml: y block size for mmv CUDA kernels")
+option(GGML_CUDA_F16                        "ggml: use 16 bit floats for some calculations"   OFF)
+set   (GGML_CUDA_KQUANTS_ITER "2" CACHE STRING
+                                            "ggml: iters./thread per block for Q2_K/Q6_K")
+set   (GGML_CUDA_PEER_MAX_BATCH_SIZE "128" CACHE STRING
+                                            "ggml: max. batch size for using peer access")
+option(GGML_CUDA_NO_PEER_COPY               "ggml: do not use peer to peer copies"            OFF)
+option(GGML_CUDA_NO_VMM                     "ggml: do not try to use CUDA VMM"                OFF)
+option(GGML_CUDA_FA_ALL_QUANTS              "ggml: compile all quants for FlashAttention"     OFF)
+
+option(GGML_CURL                            "ggml: use libcurl to download model from an URL" OFF)
+option(GGML_HIPBLAS                         "ggml: use hipBLAS"                               OFF)
+option(GGML_HIP_UMA                         "ggml: use HIP unified memory architecture"       OFF)
+option(GGML_VULKAN                          "ggml: use Vulkan"                                OFF)
+option(GGML_VULKAN_CHECK_RESULTS            "ggml: run Vulkan op checks"                      OFF)
+option(GGML_VULKAN_DEBUG                    "ggml: enable Vulkan debug output"                OFF)
+option(GGML_VULKAN_MEMORY_DEBUG             "ggml: enable Vulkan memory debug output"         OFF)
+option(GGML_VULKAN_VALIDATE                 "ggml: enable Vulkan validation"                  OFF)
+option(GGML_VULKAN_RUN_TESTS                "ggml: run Vulkan tests"                          OFF)
+option(GGML_KOMPUTE                         "ggml: use Kompute"                               OFF)
+option(GGML_METAL                           "ggml: use Metal"                                 ${GGML_METAL_DEFAULT})
+option(GGML_METAL_NDEBUG                    "ggml: disable Metal debugging"                   OFF)
+option(GGML_METAL_SHADER_DEBUG              "ggml: compile Metal with -fno-fast-math"         OFF)
+option(GGML_METAL_EMBED_LIBRARY             "ggml: embed Metal library"                       ${GGML_METAL})
+set   (GGML_METAL_MACOSX_VERSION_MIN "" CACHE STRING
+                                            "ggml: metal minimum macOS version")
+set   (GGML_METAL_STD "" CACHE STRING       "ggml: metal standard version (-std flag)")
+option(GGML_OPENMP                          "ggml: use OpenMP"                                ON)
+option(GGML_RPC                             "ggml: use RPC"                                   OFF)
+option(GGML_SYCL                            "ggml: use SYCL"                                  OFF)
+option(GGML_SYCL_F16                        "ggml: use 16 bit floats for sycl calculations"   OFF)
+set   (GGML_SYCL_TARGET "INTEL" CACHE STRING
+                                            "ggml: sycl target device")
+
+# extra artifacts
+option(GGML_BUILD_TESTS    "ggml: build tests"    ${GGML_STANDALONE})
+option(GGML_BUILD_EXAMPLES "ggml: build examples" ${GGML_STANDALONE})
+
+#
+# dependencies
+#
+
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_C_STANDARD_REQUIRED true)
+
+if (GGML_SYCL)
+    set(CMAKE_CXX_STANDARD 17)
+else()
+    set(CMAKE_CXX_STANDARD 11)
+endif()
+set(CMAKE_CXX_STANDARD_REQUIRED true)
+
+set(THREADS_PREFER_PTHREAD_FLAG ON)
+
+find_package(Threads REQUIRED)
+
+#
+# build the library
+#
+
+add_subdirectory(src)
+
+#
+# tests and examples
+#
+
+if (GGML_BUILD_TESTS)
+    enable_testing()
+    add_subdirectory(tests)
+endif ()
+
+if (GGML_BUILD_EXAMPLES)
+    add_subdirectory(examples)
+endif ()
+
+#
+# install
+#
+
+include(GNUInstallDirs)
+include(CMakePackageConfigHelpers)
+
+set(GGML_PUBLIC_HEADERS
+    include/ggml.h
+    include/ggml-alloc.h
+    include/ggml-backend.h
+    "${GGML_HEADERS_CUDA}"
+    "${GGML_HEADERS_METAL}"
+    "${GGML_HEADERS_EXTRA}")
+
+set_target_properties(ggml PROPERTIES PUBLIC_HEADER "${GGML_PUBLIC_HEADERS}")
+#if (GGML_METAL)
+#    set_target_properties(ggml PROPERTIES RESOURCE "${CMAKE_CURRENT_SOURCE_DIR}/src/ggml-metal.metal")
+#endif()
+install(TARGETS ggml PUBLIC_HEADER)
+
+if (BUILD_SHARED_LIBS)
+    install(TARGETS ggml LIBRARY)
+endif()
+
+if (GGML_METAL)
+    install(
+        FILES src/ggml-metal.metal
+        PERMISSIONS
+            OWNER_READ
+            OWNER_WRITE
+            GROUP_READ
+            WORLD_READ
+        DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+    if (NOT GGML_METAL_EMBED_LIBRARY)
+        install(
+            FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/default.metallib
+            DESTINATION ${CMAKE_INSTALL_BINDIR}
+        )
+    endif()
+endif()
+
+if (GGML_STANDALONE)
+    configure_file(${CMAKE_CURRENT_SOURCE_DIR}/ggml.pc.in
+        ${CMAKE_CURRENT_BINARY_DIR}/ggml.pc
+        @ONLY)
+
+    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ggml.pc
+        DESTINATION share/pkgconfig)
+endif()
diff --git a/ggml/cmake/FindSIMD.cmake b/ggml/cmake/FindSIMD.cmake
new file mode 100644 (file)
index 0000000..5533668
--- /dev/null
@@ -0,0 +1,100 @@
+include(CheckCSourceRuns)
+
+set(AVX_CODE "
+    #include <immintrin.h>
+    int main()
+    {
+        __m256 a;
+        a = _mm256_set1_ps(0);
+        return 0;
+    }
+")
+
+set(AVX512_CODE "
+    #include <immintrin.h>
+    int main()
+    {
+        __m512i a = _mm512_set_epi8(0, 0, 0, 0, 0, 0, 0, 0,
+                                    0, 0, 0, 0, 0, 0, 0, 0,
+                                    0, 0, 0, 0, 0, 0, 0, 0,
+                                    0, 0, 0, 0, 0, 0, 0, 0,
+                                    0, 0, 0, 0, 0, 0, 0, 0,
+                                    0, 0, 0, 0, 0, 0, 0, 0,
+                                    0, 0, 0, 0, 0, 0, 0, 0,
+                                    0, 0, 0, 0, 0, 0, 0, 0);
+        __m512i b = a;
+        __mmask64 equality_mask = _mm512_cmp_epi8_mask(a, b, _MM_CMPINT_EQ);
+        return 0;
+    }
+")
+
+set(AVX2_CODE "
+    #include <immintrin.h>
+    int main()
+    {
+        __m256i a = {0};
+        a = _mm256_abs_epi16(a);
+        __m256i x;
+        _mm256_extract_epi64(x, 0); // we rely on this in our AVX2 code
+        return 0;
+    }
+")
+
+set(FMA_CODE "
+    #include <immintrin.h>
+    int main()
+    {
+        __m256 acc = _mm256_setzero_ps();
+        const __m256 d = _mm256_setzero_ps();
+        const __m256 p = _mm256_setzero_ps();
+        acc = _mm256_fmadd_ps( d, p, acc );
+        return 0;
+    }
+")
+
+macro(check_sse type flags)
+    set(__FLAG_I 1)
+    set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
+    foreach (__FLAG ${flags})
+        if (NOT ${type}_FOUND)
+            set(CMAKE_REQUIRED_FLAGS ${__FLAG})
+            check_c_source_runs("${${type}_CODE}" HAS_${type}_${__FLAG_I})
+            if (HAS_${type}_${__FLAG_I})
+                set(${type}_FOUND TRUE CACHE BOOL "${type} support")
+                set(${type}_FLAGS "${__FLAG}" CACHE STRING "${type} flags")
+            endif()
+            math(EXPR __FLAG_I "${__FLAG_I}+1")
+        endif()
+    endforeach()
+    set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
+
+    if (NOT ${type}_FOUND)
+        set(${type}_FOUND FALSE CACHE BOOL "${type} support")
+        set(${type}_FLAGS "" CACHE STRING "${type} flags")
+    endif()
+
+    mark_as_advanced(${type}_FOUND ${type}_FLAGS)
+endmacro()
+
+# flags are for MSVC only!
+check_sse("AVX" " ;/arch:AVX")
+if (NOT ${AVX_FOUND})
+    set(GGML_AVX OFF)
+else()
+    set(GGML_AVX ON)
+endif()
+
+check_sse("AVX2" " ;/arch:AVX2")
+check_sse("FMA" " ;/arch:AVX2")
+if ((NOT ${AVX2_FOUND}) OR (NOT ${FMA_FOUND}))
+    set(GGML_AVX2 OFF)
+else()
+    set(GGML_AVX2 ON)
+endif()
+
+check_sse("AVX512" " ;/arch:AVX512")
+if (NOT ${AVX512_FOUND})
+    set(GGML_AVX512 OFF)
+else()
+    set(GGML_AVX512 ON)
+endif()
diff --git a/ggml/ggml_vk_generate_shaders.py b/ggml/ggml_vk_generate_shaders.py
new file mode 100644 (file)
index 0000000..38914ee
--- /dev/null
@@ -0,0 +1,220 @@
+#!/usr/bin/env python
+
+import logging
+import argparse
+import asyncio
+import os
+from tempfile import gettempdir
+
+logger = logging.getLogger("ggml-vk-generate-shaders")
+
+GLSLC = "glslc"
+
+type_names = [
+    "f32",
+    "f16",
+    "q4_0",
+    "q4_1",
+    "q5_0",
+    "q5_1",
+    "q8_0",
+    "q2_k",
+    "q3_k",
+    "q4_k",
+    "q5_k",
+    "q6_k",
+]
+
+ASYNCIO_CONCURRENCY = 64
+
+input_dir = "vulkan-shaders"
+output_dir = gettempdir()
+
+lock = asyncio.Lock()
+shader_fnames = []
+
+
+async def string_to_spv(name, in_fname, defines, fp16=True):
+    name = f"{name}{'_fp32' if not fp16 else ''}"
+    out_fname = os.path.join(output_dir, f"{name}.spv")
+
+    in_path = os.path.join(input_dir, in_fname)
+
+    cmd = [GLSLC, "-fshader-stage=compute", "--target-env=vulkan1.2", "-O", in_path, "-o", out_fname]
+
+    cmd.extend([f"-D{key}={value}" for key, value in defines.items()])
+
+    proc = await asyncio.create_subprocess_exec(*cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE)
+
+    stdout, stderr = await proc.communicate()
+
+    stdout = stdout.decode()
+    error = stderr.decode()
+
+    if proc.returncode:
+        cmd = " ".join(cmd)
+        logger.error(f"cannot compile {name}\n\n{cmd}\n\n{error}")
+        return
+
+    async with lock:
+        shader_fnames.append((name, out_fname))
+
+
+def matmul_shaders(tasks, fp16, matmul_id):
+    if fp16:
+        load_vec = "8"
+        aligned_b_type_f32 = "mat2x4"
+        aligned_b_type_f16 = "f16mat2x4"
+    else:
+        load_vec = "4"
+        aligned_b_type_f32 = "vec4"
+        aligned_b_type_f16 = "f16vec4"
+
+    base_dict = {"FLOAT_TYPE": "float" if not fp16 else "float16_t"}
+    shader_name = "matmul"
+
+    if matmul_id:
+        base_dict["MUL_MAT_ID"] = "1"
+        shader_name = "matmul_id"
+
+    if fp16:
+        base_dict["FLOAT16"] = "1"
+
+    # Shaders with f16 B_TYPE
+    tasks.append(string_to_spv(f"{shader_name}_f32_f16", "mul_mm.comp", base_dict | {"DATA_A_F32": "1", "B_TYPE": "float16_t", "D_TYPE": "float"}, fp16))
+    tasks.append(string_to_spv(f"{shader_name}_f32_f16_aligned", "mul_mm.comp", base_dict | {"DATA_A_F32": "1", "LOAD_VEC_A": load_vec, "LOAD_VEC_B": load_vec, "B_TYPE": aligned_b_type_f16, "D_TYPE": "float"}, fp16))
+
+    tasks.append(string_to_spv(f"{shader_name}_f16", "mul_mm.comp", base_dict | {"DATA_A_F16": "1", "B_TYPE": "float16_t", "D_TYPE": "float"}, fp16))
+    tasks.append(string_to_spv(f"{shader_name}_f16_aligned", "mul_mm.comp", base_dict | {"DATA_A_F16": "1", "LOAD_VEC_A": load_vec, "LOAD_VEC_B": load_vec, "B_TYPE": aligned_b_type_f16, "D_TYPE": "float"}, fp16))
+
+    for tname in type_names:
+        data_a_key = f"DATA_A_{tname.upper()}"
+        load_vec_a = load_vec if tname in ("f32", "f16") else "2"
+        tasks.append(string_to_spv(f"{shader_name}_{tname}_f32", "mul_mm.comp", base_dict | {data_a_key: "1", "B_TYPE": "float", "D_TYPE": "float"}, fp16))
+        tasks.append(string_to_spv(f"{shader_name}_{tname}_f32_aligned", "mul_mm.comp", base_dict | {data_a_key: "2", "LOAD_VEC_A": load_vec_a, "LOAD_VEC_B": load_vec, "B_TYPE": aligned_b_type_f32, "D_TYPE": "float"}, fp16))
+
+
+async def main():
+    logger.info("ggml_vulkan: Generating and compiling shaders to SPIR-V")
+
+    tasks = []
+
+    for fp16 in (False, True):
+        # MUL_MAT
+        matmul_shaders(tasks, fp16, False)
+        # MUL_MAT_ID
+        matmul_shaders(tasks, fp16, True)
+
+    for tname in type_names:
+        base_dict = {"FLOAT_TYPE": "float"}
+
+        # mul mat vec
+        data_a_key = f"DATA_A_{tname.upper()}"
+        shader = f"mul_mat_vec_{tname}.comp" if tname.endswith("_k") else "mul_mat_vec.comp"
+
+        tasks.append(string_to_spv(f"mul_mat_vec_{tname}_f32_f32", shader, base_dict | {data_a_key: "1", "B_TYPE": "float", "D_TYPE": "float"}))
+        tasks.append(string_to_spv(f"mul_mat_vec_{tname}_f16_f32", shader, base_dict | {data_a_key: "1", "B_TYPE": "float16_t", "D_TYPE": "float"}))
+
+        tasks.append(string_to_spv(f"mul_mat_vec_id_{tname}_f32", shader, base_dict | {"MUL_MAT_ID": "1", data_a_key: "1", "B_TYPE": "float", "D_TYPE": "float"}))
+
+        # Dequant shaders
+        if tname != "f16":
+            tasks.append(string_to_spv(f"dequant_{tname}", f"dequant_{tname}.comp", base_dict | {data_a_key: "1", "D_TYPE": "float16_t"}))
+
+        # get_rows
+        if not tname.endswith("_k"):
+            shader = "get_rows.comp" if tname in ("f32", "f16") else "get_rows_quant.comp"
+
+            if tname == "f16":
+                tasks.append(string_to_spv(f"get_rows_{tname}", shader, {data_a_key: "1", "B_TYPE": "int", "D_TYPE": "float16_t", "OPTIMIZATION_ERROR_WORKAROUND": "1"}))
+            else:
+                tasks.append(string_to_spv(f"get_rows_{tname}", shader, {data_a_key: "1", "B_TYPE": "int", "D_TYPE": "float16_t"}))
+            tasks.append(string_to_spv(f"get_rows_{tname}_f32", shader, {data_a_key: "1", "B_TYPE": "int", "D_TYPE": "float"}))
+
+    tasks.append(string_to_spv("mul_mat_vec_p021_f16_f32", "mul_mat_vec_p021.comp", {"A_TYPE": "float16_t", "B_TYPE": "float", "D_TYPE": "float"}))
+    tasks.append(string_to_spv("mul_mat_vec_nc_f16_f32", "mul_mat_vec_nc.comp", {"A_TYPE": "float16_t", "B_TYPE": "float", "D_TYPE": "float"}))
+
+    # Norms
+    tasks.append(string_to_spv("norm_f32", "norm.comp", base_dict | {"A_TYPE": "float", "D_TYPE": "float"}))
+    tasks.append(string_to_spv("rms_norm_f32", "rms_norm.comp", base_dict | {"A_TYPE": "float", "D_TYPE": "float"}))
+
+    tasks.append(string_to_spv("cpy_f32_f32", "copy.comp", {"A_TYPE": "float", "D_TYPE": "float"}))
+    tasks.append(string_to_spv("cpy_f32_f16", "copy.comp", {"A_TYPE": "float", "D_TYPE": "float16_t"}))
+    tasks.append(string_to_spv("cpy_f16_f16", "copy.comp", {"A_TYPE": "float16_t", "D_TYPE": "float16_t", "OPTIMIZATION_ERROR_WORKAROUND": "1"}))
+
+    tasks.append(string_to_spv("add_f32", "add.comp", {"A_TYPE": "float", "B_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"}))
+
+    tasks.append(string_to_spv("split_k_reduce", "mul_mat_split_k_reduce.comp", {}))
+
+    tasks.append(string_to_spv("mul_f32", "mul.comp", {"A_TYPE": "float", "B_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"}))
+
+    tasks.append(string_to_spv("div_f32", "div.comp", {"A_TYPE": "float", "B_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"}))
+
+    tasks.append(string_to_spv("scale_f32", "scale.comp", {"A_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"}))
+
+    tasks.append(string_to_spv("sqr_f32", "square.comp", {"A_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"}))
+
+    tasks.append(string_to_spv("clamp_f32", "clamp.comp", {"A_TYPE": "float", "D_TYPE": "float", "FLOAT_TYPE": "float"}))
+
+    tasks.append(string_to_spv("gelu_f32", "gelu.comp", {"A_TYPE": "float", "D_TYPE": "float"}))
+    tasks.append(string_to_spv("silu_f32", "silu.comp", {"A_TYPE": "float", "D_TYPE": "float"}))
+    tasks.append(string_to_spv("relu_f32", "relu.comp", {"A_TYPE": "float", "D_TYPE": "float"}))
+
+    tasks.append(string_to_spv("diag_mask_inf_f32", "diag_mask_inf.comp", {"A_TYPE": "float", "D_TYPE": "float"}))
+
+    tasks.append(string_to_spv("soft_max_f32", "soft_max.comp", base_dict | {"A_TYPE": "float", "B_TYPE": "float", "D_TYPE": "float"}))
+    tasks.append(string_to_spv("soft_max_f32_f16", "soft_max.comp", base_dict | {"A_TYPE": "float", "B_TYPE": "float16_t", "D_TYPE": "float"}))
+
+    tasks.append(string_to_spv("rope_norm_f32", "rope_norm.comp", {"A_TYPE": "float", "D_TYPE": "float"}))
+    tasks.append(string_to_spv("rope_norm_f16", "rope_norm.comp", {"A_TYPE": "float16_t", "D_TYPE": "float16_t"}))
+
+    tasks.append(string_to_spv("rope_neox_f32", "rope_neox.comp", {"A_TYPE": "float", "D_TYPE": "float"}))
+    tasks.append(string_to_spv("rope_neox_f16", "rope_neox.comp", {"A_TYPE": "float16_t", "D_TYPE": "float16_t"}))
+
+    tasks.append(string_to_spv("argsort_f32", "argsort.comp", {"A_TYPE": "float"}))
+
+    tasks.append(string_to_spv("sum_rows_f32", "sum_rows.comp", base_dict | {"A_TYPE": "float", "D_TYPE": "float"}))
+
+    # Helper to decorate tasks with semaphore acquisition.
+    async def withSemaphore(sem, task):
+        async with sem:
+            return await task
+
+    # Run tasks concurrently guarded by a concurrency limit.
+    sem = asyncio.Semaphore(ASYNCIO_CONCURRENCY)
+    await asyncio.gather(*(withSemaphore(sem, task) for task in tasks))
+
+    with open("ggml-vulkan-shaders.hpp", "w") as f:
+        f.write("#include <cstdint>\n\n")
+        for name, path in sorted(shader_fnames):
+
+            with open(path, "rb") as spv:
+                counter = 0
+                newline_counter = 0
+                f.write(f"unsigned char {name}_data[] = {{\n")
+                for val in spv.read():
+                    f.write(f"0x{val:02x},")
+                    newline_counter += 1
+                    counter += 1
+                    if newline_counter >= 12:
+                        newline_counter = 0
+                        f.write("\n")
+            f.write("\n};\n")
+            f.write(f"const uint64_t {name}_len = {counter};\n\n")
+            os.remove(path)
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(description="GGML Vulkan Shader Generator")
+
+    parser.add_argument("--glslc", help="Path to glslc")
+    parser.add_argument("--verbose", action="store_true", help="increase output verbosity")
+
+    args = parser.parse_args()
+
+    logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
+
+    if args.glslc:
+        GLSLC = args.glslc
+
+    asyncio.run(main())
diff --git a/ggml/include/ggml-alloc.h b/ggml/include/ggml-alloc.h
new file mode 100644 (file)
index 0000000..434c13b
--- /dev/null
@@ -0,0 +1,76 @@
+#pragma once
+
+#include "ggml.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+typedef struct ggml_backend_buffer_type * ggml_backend_buffer_type_t;
+typedef struct ggml_backend_buffer * ggml_backend_buffer_t;
+typedef struct ggml_backend * ggml_backend_t;
+
+// Tensor allocator
+struct ggml_tallocr {
+    ggml_backend_buffer_t buffer;
+    void * base;
+    size_t alignment;
+    size_t offset;
+};
+
+GGML_API struct ggml_tallocr ggml_tallocr_new(ggml_backend_buffer_t buffer);
+GGML_API void                ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor);
+
+// Graph allocator
+/*
+  Example usage:
+    ggml_gallocr_t galloc = ggml_gallocr_new(ggml_bacckend_cpu_buffer_type());
+
+    // optional: create a worst-case graph and reserve the buffers to avoid reallocations
+    ggml_gallocr_reserve(galloc, build_graph(max_batch));
+
+    // allocate the graph
+    struct ggml_cgraph * graph = build_graph(batch);
+    ggml_gallocr_alloc_graph(galloc, graph);
+
+    printf("compute buffer size: %zu bytes\n", ggml_gallocr_get_buffer_size(galloc, 0));
+
+    // evaluate the graph
+    ggml_backend_graph_compute(backend, graph);
+*/
+
+// special tensor flags for use with the graph allocator:
+//   ggml_set_input(): all input tensors are allocated at the beginning of the graph in non-overlapping addresses
+//   ggml_set_output(): output tensors are never freed and never overwritten
+
+typedef struct ggml_gallocr * ggml_gallocr_t;
+
+GGML_API ggml_gallocr_t ggml_gallocr_new(ggml_backend_buffer_type_t buft);
+GGML_API ggml_gallocr_t ggml_gallocr_new_n(ggml_backend_buffer_type_t * bufts, int n_bufs);
+GGML_API void           ggml_gallocr_free(ggml_gallocr_t galloc);
+
+// pre-allocate buffers from a measure graph - does not allocate or modify the graph
+// call with a worst-case graph to avoid buffer reallocations
+// not strictly required for single buffer usage: ggml_gallocr_alloc_graph will reallocate the buffers automatically if needed
+// returns false if the buffer allocation failed
+GGML_API bool ggml_gallocr_reserve(ggml_gallocr_t galloc, struct ggml_cgraph * graph);
+GGML_API bool ggml_gallocr_reserve_n(
+    ggml_gallocr_t galloc,
+    struct ggml_cgraph * graph,
+    const int * node_buffer_ids,
+    const int * leaf_buffer_ids);
+
+// automatic reallocation if the topology changes when using a single buffer
+// returns false if using multiple buffers and a re-allocation is needed (call ggml_gallocr_reserve_n first to set the node buffers)
+GGML_API bool ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, struct ggml_cgraph * graph);
+
+GGML_API size_t ggml_gallocr_get_buffer_size(ggml_gallocr_t galloc, int buffer_id);
+
+// Utils
+// Create a buffer and allocate all the tensors in a ggml_context
+GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors_from_buft(struct ggml_context * ctx, ggml_backend_buffer_type_t buft);
+GGML_API struct ggml_backend_buffer * ggml_backend_alloc_ctx_tensors(struct ggml_context * ctx, ggml_backend_t backend);
+
+#ifdef  __cplusplus
+}
+#endif
diff --git a/ggml/include/ggml-backend.h b/ggml/include/ggml-backend.h
new file mode 100644 (file)
index 0000000..4a38eeb
--- /dev/null
@@ -0,0 +1,236 @@
+#pragma once
+
+#include "ggml.h"
+#include "ggml-alloc.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+    typedef struct ggml_backend_buffer_type * ggml_backend_buffer_type_t;
+    typedef struct ggml_backend_buffer * ggml_backend_buffer_t;
+    typedef struct ggml_backend_event * ggml_backend_event_t;
+    typedef struct ggml_backend * ggml_backend_t;
+    typedef void * ggml_backend_graph_plan_t;
+
+    //
+    // Backend buffer
+    //
+
+    // buffer type
+    GGML_API           const char *          ggml_backend_buft_name            (ggml_backend_buffer_type_t buft);
+    GGML_API GGML_CALL ggml_backend_buffer_t ggml_backend_buft_alloc_buffer    (ggml_backend_buffer_type_t buft, size_t size);
+    GGML_API           size_t                ggml_backend_buft_get_alignment   (ggml_backend_buffer_type_t buft);
+    GGML_API           size_t                ggml_backend_buft_get_max_size    (ggml_backend_buffer_type_t buft);
+    GGML_API GGML_CALL size_t                ggml_backend_buft_get_alloc_size  (ggml_backend_buffer_type_t buft, struct ggml_tensor * tensor);
+    GGML_API           bool                  ggml_backend_buft_is_host         (ggml_backend_buffer_type_t buft);
+
+    // buffer
+    enum ggml_backend_buffer_usage {
+        GGML_BACKEND_BUFFER_USAGE_ANY = 0,
+        GGML_BACKEND_BUFFER_USAGE_WEIGHTS = 1,
+    };
+
+    GGML_API           const char *               ggml_backend_buffer_name          (ggml_backend_buffer_t buffer);
+    GGML_API           void                       ggml_backend_buffer_free          (ggml_backend_buffer_t buffer);
+    GGML_API           void *                     ggml_backend_buffer_get_base      (ggml_backend_buffer_t buffer);
+    GGML_API           size_t                     ggml_backend_buffer_get_size      (ggml_backend_buffer_t buffer);
+    GGML_API GGML_CALL void                       ggml_backend_buffer_init_tensor   (ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
+    GGML_API           size_t                     ggml_backend_buffer_get_alignment (ggml_backend_buffer_t buffer);
+    GGML_API           size_t                     ggml_backend_buffer_get_max_size  (ggml_backend_buffer_t buffer);
+    GGML_API           size_t                     ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
+    GGML_API           void                       ggml_backend_buffer_clear         (ggml_backend_buffer_t buffer, uint8_t value);
+    GGML_API           bool                       ggml_backend_buffer_is_host       (ggml_backend_buffer_t buffer);
+    GGML_API           void                       ggml_backend_buffer_set_usage     (ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage);
+    GGML_API           ggml_backend_buffer_type_t ggml_backend_buffer_get_type      (ggml_backend_buffer_t buffer);
+    GGML_API           void                       ggml_backend_buffer_reset         (ggml_backend_buffer_t buffer);
+
+    //
+    // Backend
+    //
+
+    GGML_API ggml_guid_t  ggml_backend_guid(ggml_backend_t backend);
+    GGML_API const char * ggml_backend_name(ggml_backend_t backend);
+    GGML_API void         ggml_backend_free(ggml_backend_t backend);
+
+    GGML_API ggml_backend_buffer_type_t ggml_backend_get_default_buffer_type(ggml_backend_t backend);
+    GGML_API ggml_backend_buffer_t      ggml_backend_alloc_buffer(ggml_backend_t backend, size_t size);
+    GGML_API size_t                     ggml_backend_get_alignment(ggml_backend_t backend);
+    GGML_API size_t                     ggml_backend_get_max_size(ggml_backend_t backend);
+
+    GGML_API void ggml_backend_tensor_set_async(ggml_backend_t backend,       struct ggml_tensor * tensor, const void * data, size_t offset, size_t size);
+    GGML_API void ggml_backend_tensor_get_async(ggml_backend_t backend, const struct ggml_tensor * tensor,       void * data, size_t offset, size_t size);
+
+    GGML_API GGML_CALL void ggml_backend_tensor_set(      struct ggml_tensor * tensor, const void * data, size_t offset, size_t size);
+    GGML_API GGML_CALL void ggml_backend_tensor_get(const struct ggml_tensor * tensor,       void * data, size_t offset, size_t size);
+
+    GGML_API void ggml_backend_synchronize(ggml_backend_t backend);
+
+    GGML_API ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph);
+    GGML_API void                      ggml_backend_graph_plan_free  (ggml_backend_t backend, ggml_backend_graph_plan_t plan);
+
+    GGML_API enum ggml_status ggml_backend_graph_plan_compute (ggml_backend_t backend, ggml_backend_graph_plan_t plan);
+    GGML_API enum ggml_status ggml_backend_graph_compute      (ggml_backend_t backend, struct ggml_cgraph * cgraph);
+    GGML_API enum ggml_status ggml_backend_graph_compute_async(ggml_backend_t backend, struct ggml_cgraph * cgraph);
+    GGML_API bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op);
+    GGML_API bool ggml_backend_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft);
+    GGML_API bool ggml_backend_offload_op(ggml_backend_t backend, const struct ggml_tensor * op);
+
+    // tensor copy between different backends
+    GGML_API void ggml_backend_tensor_copy(struct ggml_tensor * src, struct ggml_tensor * dst);
+
+    // asynchronous copy
+    // the copy is performed after all the currently queued operations in backend_src
+    // backend_dst will wait for the copy to complete before performing other operations
+    // automatic fallback to sync copy if async is not supported
+    GGML_API void ggml_backend_tensor_copy_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, struct ggml_tensor * src, struct ggml_tensor * dst);
+
+    // events
+    GGML_API ggml_backend_event_t   ggml_backend_event_new        (ggml_backend_t backend);
+    GGML_API void                   ggml_backend_event_free       (ggml_backend_event_t event);
+    GGML_API void                   ggml_backend_event_record     (ggml_backend_event_t event);
+    GGML_API void                   ggml_backend_event_synchronize(ggml_backend_event_t event);
+    GGML_API void                   ggml_backend_event_wait       (ggml_backend_t backend, ggml_backend_event_t event);
+
+    //
+    // CPU backend
+    //
+
+    GGML_API ggml_backend_t ggml_backend_cpu_init(void);
+
+    GGML_API GGML_CALL bool ggml_backend_is_cpu                (ggml_backend_t backend);
+    GGML_API           void ggml_backend_cpu_set_n_threads     (ggml_backend_t backend_cpu, int n_threads);
+    GGML_API           void ggml_backend_cpu_set_abort_callback(ggml_backend_t backend_cpu, ggml_abort_callback abort_callback, void * abort_callback_data);
+
+    // Create a backend buffer from an existing pointer
+    GGML_API GGML_CALL ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_t size);
+
+    GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cpu_buffer_type(void);
+
+#ifdef GGML_USE_CPU_HBM
+    GGML_API ggml_backend_buffer_type_t ggml_backend_cpu_hbm_buffer_type(void);
+#endif
+
+    //
+    // Backend registry
+    //
+
+    // The backend registry is a registry of all the available backends, and allows initializing backends in a generic way
+
+    GGML_API size_t                     ggml_backend_reg_get_count(void);
+    GGML_API size_t                     ggml_backend_reg_find_by_name(const char * name);
+    GGML_API ggml_backend_t             ggml_backend_reg_init_backend_from_str(const char * backend_str); // str is backend_name:params (params is optional)
+    GGML_API const char *               ggml_backend_reg_get_name(size_t i);
+    GGML_API ggml_backend_t             ggml_backend_reg_init_backend(size_t i, const char * params); // params is backend-specific
+    GGML_API ggml_backend_buffer_type_t ggml_backend_reg_get_default_buffer_type(size_t i);
+    GGML_API ggml_backend_buffer_t      ggml_backend_reg_alloc_buffer(size_t i, size_t size);
+
+    //
+    // Backend scheduler
+    //
+
+    // The backend scheduler allows for multiple backends to be used together
+    // Handles compute buffer allocation, assignment of tensors to backends, and copying of tensors between backends
+    // The backends are selected based on:
+    // - the backend that supports the operation
+    // - the location of the pre-allocated tensors (e.g. the weights)
+    /*
+      Example usage:
+
+        // operations that use tensors allocated in a buffer with USAGE_WEIGHTS will be assigned
+        // preferrably to run on the same backend as the buffer
+        ggml_backend_buffer_set_usage(buf_weights, GGML_BACKEND_BUFFER_USAGE_WEIGHTS);
+
+        sched = ggml_backend_sched_new({backend_gpu, backend_gpu2, backend_cpu}, NULL, num_backends, GGML_DEFAULT_GRAPH_SIZE, false);
+
+        // initialize buffers from a max size graph (optional)
+        reserve_graph = build_graph(sched, max_batch_size);
+
+        // manually assign nodes to a backend (optional, should not be needed in most cases)
+        struct ggml_tensor * node = ggml_mul_mat(ctx, ...);
+        ggml_backend_sched_set_tensor_backend(sched, node, backend_gpu);
+
+        ggml_backend_sched_reserve(sched, reserve_graph);
+
+        // compute
+        graph = build_graph(sched);
+        ggml_backend_sched_graph_compute(sched, graph);
+
+        // if there are graph inputs:
+        ggml_backend_sched_reset(sched);
+        ggml_backend_sched_alloc_graph(sched, graph);
+        ggml_backend_tensor_set(input_tensor, ...);
+        ggml_backend_sched_graph_compute(sched, graph);
+    }
+    */
+
+    struct ggml_backend_sched;
+    typedef struct ggml_backend_sched * ggml_backend_sched_t;
+
+    // when ask == true, the scheduler wants to know if the user wants to observe this node
+    // this allows the scheduler to batch nodes together in order to evaluate them in a single call
+    //
+    // when ask == false, the scheduler is passing the node tensor to the user for observation
+    // if the user returns false, the scheduler will cancel the graph compute
+    //
+    typedef bool (*ggml_backend_sched_eval_callback)(struct ggml_tensor * t, bool ask, void * user_data);
+
+    // Initialize a backend scheduler
+    GGML_API ggml_backend_sched_t ggml_backend_sched_new(ggml_backend_t * backends, ggml_backend_buffer_type_t * bufts, int n_backends, size_t graph_size, bool parallel);
+    GGML_API void                 ggml_backend_sched_free(ggml_backend_sched_t sched);
+
+    // Initialize backend buffers from a measure graph
+    GGML_API bool                 ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph);
+
+    GGML_API int                  ggml_backend_sched_get_n_backends(ggml_backend_sched_t sched);
+    GGML_API ggml_backend_t       ggml_backend_sched_get_backend(ggml_backend_sched_t sched, int i);
+
+    // Get the number of splits of the last graph
+    GGML_API int                  ggml_backend_sched_get_n_splits(ggml_backend_sched_t sched);
+    GGML_API int                  ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched);
+
+    GGML_API size_t               ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend);
+
+    GGML_API void                 ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend);
+    GGML_API ggml_backend_t       ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node);
+
+    // Allocate and compute graph on the backend scheduler
+    GGML_API bool                 ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph);
+    GGML_API enum ggml_status     ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct ggml_cgraph * graph);
+    GGML_API enum ggml_status     ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph);
+    GGML_API void                 ggml_backend_sched_synchronize(ggml_backend_sched_t sched);
+
+    // Reset all assignments and allocators - must be called before changing the node backends
+    GGML_API void                 ggml_backend_sched_reset(ggml_backend_sched_t sched);
+
+    // Set a callback to be called for each resulting node during graph compute
+    GGML_API void                 ggml_backend_sched_set_eval_callback(ggml_backend_sched_t sched, ggml_backend_sched_eval_callback callback, void * user_data);
+
+    //
+    // Utils
+    //
+
+    struct ggml_backend_graph_copy {
+        ggml_backend_buffer_t buffer;
+        struct ggml_context * ctx_allocated;
+        struct ggml_context * ctx_unallocated;
+        struct ggml_cgraph * graph;
+    };
+
+    // Copy a graph to a different backend
+    GGML_API struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t backend, struct ggml_cgraph * graph);
+    GGML_API void                           ggml_backend_graph_copy_free(struct ggml_backend_graph_copy copy);
+
+    typedef bool (*GGML_CALL ggml_backend_eval_callback)(int node_index, struct ggml_tensor * t1, struct ggml_tensor * t2, void * user_data);
+
+    // Compare the output of two backends
+    GGML_API bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t backend2, struct ggml_cgraph * graph, ggml_backend_eval_callback callback, void * user_data);
+
+    // Tensor initialization
+    GGML_API void ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr);
+    GGML_API void ggml_backend_view_init(struct ggml_tensor * tensor);
+
+
+#ifdef  __cplusplus
+}
+#endif
diff --git a/ggml/include/ggml-blas.h b/ggml/include/ggml-blas.h
new file mode 100644 (file)
index 0000000..f2e37de
--- /dev/null
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "ggml.h"
+#include "ggml-backend.h"
+
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+// backend API
+GGML_API GGML_CALL ggml_backend_t ggml_backend_blas_init(void);
+
+GGML_API GGML_CALL bool ggml_backend_is_blas(ggml_backend_t backend);
+
+// number of threads used for conversion to float
+// for openblas and blis, this will also set the number of threads used for blas operations
+GGML_API GGML_CALL void ggml_backend_blas_set_n_threads(ggml_backend_t backend_blas, int n_threads);
+
+
+#ifdef  __cplusplus
+}
+#endif
diff --git a/ggml/include/ggml-cuda.h b/ggml/include/ggml-cuda.h
new file mode 100644 (file)
index 0000000..d7903c6
--- /dev/null
@@ -0,0 +1,44 @@
+#pragma once
+
+#include "ggml.h"
+#include "ggml-backend.h"
+
+#ifdef GGML_USE_HIPBLAS
+#define GGML_CUDA_NAME "ROCm"
+#define GGML_CUBLAS_NAME "hipBLAS"
+#else
+#define GGML_CUDA_NAME "CUDA"
+#define GGML_CUBLAS_NAME "cuBLAS"
+#endif
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#define GGML_CUDA_MAX_DEVICES       16
+
+// backend API
+GGML_API GGML_CALL ggml_backend_t ggml_backend_cuda_init(int device);
+
+GGML_API GGML_CALL bool ggml_backend_is_cuda(ggml_backend_t backend);
+
+// device buffer
+GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_buffer_type(int device);
+
+// split tensor buffer that splits matrices by rows across multiple devices
+GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_split_buffer_type(const float * tensor_split);
+
+// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU
+GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_host_buffer_type(void);
+
+GGML_API GGML_CALL int  ggml_backend_cuda_get_device_count(void);
+GGML_API GGML_CALL void ggml_backend_cuda_get_device_description(int device, char * description, size_t description_size);
+GGML_API GGML_CALL void ggml_backend_cuda_get_device_memory(int device, size_t * free, size_t * total);
+
+GGML_API GGML_CALL bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size);
+GGML_API GGML_CALL void ggml_backend_cuda_unregister_host_buffer(void * buffer);
+
+GGML_API void ggml_backend_cuda_log_set_callback(ggml_log_callback log_callback, void * user_data);
+#ifdef  __cplusplus
+}
+#endif
diff --git a/ggml/include/ggml-kompute.h b/ggml/include/ggml-kompute.h
new file mode 100644 (file)
index 0000000..1714654
--- /dev/null
@@ -0,0 +1,46 @@
+#pragma once
+
+#include "ggml.h"
+#include "ggml-backend.h"
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct ggml_vk_device {
+    int index;
+    int type; // same as VkPhysicalDeviceType
+    size_t heapSize;
+    const char * name;
+    const char * vendor;
+    int subgroupSize;
+    uint64_t bufferAlignment;
+    uint64_t maxAlloc;
+};
+
+struct ggml_vk_device * ggml_vk_available_devices(size_t memoryRequired, size_t * count);
+bool ggml_vk_get_device(struct ggml_vk_device * device, size_t memoryRequired, const char * name);
+bool ggml_vk_has_vulkan(void);
+bool ggml_vk_has_device(void);
+struct ggml_vk_device ggml_vk_current_device(void);
+
+//
+// backend API
+//
+
+// forward declaration
+typedef struct ggml_backend * ggml_backend_t;
+
+GGML_API ggml_backend_t ggml_backend_kompute_init(int device);
+
+GGML_API bool ggml_backend_is_kompute(ggml_backend_t backend);
+
+GGML_API ggml_backend_buffer_type_t ggml_backend_kompute_buffer_type(int device);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/ggml/include/ggml-metal.h b/ggml/include/ggml-metal.h
new file mode 100644 (file)
index 0000000..e7543ae
--- /dev/null
@@ -0,0 +1,66 @@
+// An interface allowing to compute ggml_cgraph with Metal
+//
+// This is a fully functional interface that extends ggml with GPU support for Apple devices.
+// A similar interface can be created for other GPU backends (e.g. Vulkan, CUDA, etc.)
+//
+// How it works?
+//
+// As long as your program can create and evaluate a ggml_cgraph on the CPU, you can use this
+// interface to evaluate the same graph on the GPU. Instead of using ggml_graph_compute(), you
+// use ggml_metal_graph_compute() (or ggml_vulkan_graph_compute(), etc.)
+//
+// You only need to make sure that all memory buffers that you used during the graph creation
+// are mapped to the device memory with the ggml_metal_add_buffer() function. This mapping is
+// used during the graph evaluation to determine the arguments of the compute kernels.
+//
+// Synchronization between device and host memory (for example for input and output tensors)
+// is done with the ggml_metal_set_tensor() and ggml_metal_get_tensor() functions.
+//
+
+#pragma once
+
+#include "ggml.h"
+#include "ggml-backend.h"
+
+#include <stddef.h>
+#include <stdbool.h>
+
+// max memory buffers that can be mapped to the device
+#define GGML_METAL_MAX_BUFFERS 64
+
+struct ggml_tensor;
+struct ggml_cgraph;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//
+// backend API
+// user-code should use only these functions
+//
+
+GGML_API void ggml_backend_metal_log_set_callback(ggml_log_callback log_callback, void * user_data);
+
+GGML_API ggml_backend_t ggml_backend_metal_init(void);
+
+GGML_API bool ggml_backend_is_metal(ggml_backend_t backend);
+
+GGML_API GGML_CALL ggml_backend_buffer_t ggml_backend_metal_buffer_from_ptr(void * data, size_t size, size_t max_size);
+
+GGML_API void ggml_backend_metal_set_n_cb(ggml_backend_t backend, int n_cb);
+
+GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_metal_buffer_type(void);
+
+// helper to check if the device supports a specific family
+// ideally, the user code should be doing these checks
+// ref: https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf
+GGML_API bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family);
+
+// capture all command buffers committed the next time `ggml_backend_graph_compute` is called
+GGML_API void ggml_backend_metal_capture_next_compute(ggml_backend_t backend);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/ggml/include/ggml-rpc.h b/ggml/include/ggml-rpc.h
new file mode 100644 (file)
index 0000000..aa14483
--- /dev/null
@@ -0,0 +1,24 @@
+#pragma once
+
+#include "ggml.h"
+#include "ggml-backend.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#define GGML_RPC_MAX_SERVERS       16
+
+// backend API
+GGML_API GGML_CALL ggml_backend_t ggml_backend_rpc_init(const char * endpoint);
+GGML_API GGML_CALL bool ggml_backend_is_rpc(ggml_backend_t backend);
+
+GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_rpc_buffer_type(const char * endpoint);
+
+GGML_API GGML_CALL void ggml_backend_rpc_get_device_memory(const char * endpoint, size_t * free, size_t * total);
+
+GGML_API GGML_CALL void start_rpc_server(ggml_backend_t backend, const char * endpoint, size_t free_mem, size_t total_mem);
+
+#ifdef  __cplusplus
+}
+#endif
diff --git a/ggml/include/ggml-sycl.h b/ggml/include/ggml-sycl.h
new file mode 100644 (file)
index 0000000..43ab151
--- /dev/null
@@ -0,0 +1,42 @@
+//
+//  MIT license
+//  Copyright (C) 2024 Intel Corporation
+//  SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include "ggml.h"
+#include "ggml-backend.h"
+
+#define GGML_SYCL_NAME "SYCL"
+#define GGML_SYCL_MAX_DEVICES 48
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+// backend API
+GGML_API ggml_backend_t ggml_backend_sycl_init(int device);
+
+// devide buffer
+GGML_API ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(int device);
+
+// split tensor buffer that splits matrices by rows across multiple devices
+GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_sycl_split_buffer_type(const float * tensor_split);
+
+// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU
+GGML_API ggml_backend_buffer_type_t ggml_backend_sycl_host_buffer_type(void);
+
+GGML_API void   ggml_backend_sycl_print_sycl_devices(void);
+GGML_API GGML_CALL void   ggml_sycl_get_gpu_list(int *id_list, int max_len);
+GGML_API GGML_CALL void   ggml_sycl_get_device_description(int device, char *description, size_t description_size);
+GGML_API GGML_CALL int   ggml_backend_sycl_get_device_count();
+GGML_API GGML_CALL void ggml_backend_sycl_get_device_memory(int device, size_t *free, size_t *total);
+
+// SYCL doesn't support registering host memory, keep here for reference
+// GGML_API GGML_CALL bool ggml_backend_sycl_register_host_buffer(void * buffer, size_t size);
+// GGML_API GGML_CALL void ggml_backend_sycl_unregister_host_buffer(void * buffer);
+#ifdef  __cplusplus
+}
+#endif
diff --git a/ggml/include/ggml-vulkan.h b/ggml/include/ggml-vulkan.h
new file mode 100644 (file)
index 0000000..af661c2
--- /dev/null
@@ -0,0 +1,29 @@
+#pragma once
+
+#include "ggml.h"
+#include "ggml-backend.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#define GGML_VK_NAME "Vulkan"
+#define GGML_VK_MAX_DEVICES 16
+
+GGML_API void ggml_vk_instance_init(void);
+
+// backend API
+GGML_API GGML_CALL ggml_backend_t ggml_backend_vk_init(size_t dev_num);
+
+GGML_API GGML_CALL bool ggml_backend_is_vk(ggml_backend_t backend);
+GGML_API GGML_CALL int  ggml_backend_vk_get_device_count(void);
+GGML_API GGML_CALL void ggml_backend_vk_get_device_description(int device, char * description, size_t description_size);
+GGML_API GGML_CALL void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total);
+
+GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_buffer_type(size_t dev_num);
+// pinned host buffer for use with the CPU backend for faster copies between CPU and GPU
+GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type(void);
+
+#ifdef  __cplusplus
+}
+#endif
diff --git a/ggml/include/ggml.h b/ggml/include/ggml.h
new file mode 100644 (file)
index 0000000..d895c9a
--- /dev/null
@@ -0,0 +1,2427 @@
+#pragma once
+
+//
+// GGML Tensor Library
+//
+// This documentation is still a work in progress.
+// If you wish some specific topics to be covered, feel free to drop a comment:
+//
+//   https://github.com/ggerganov/whisper.cpp/issues/40
+//
+// ## Overview
+//
+// This library implements:
+//
+//  - a set of tensor operations
+//  - automatic differentiation
+//  - basic optimization algorithms
+//
+// The aim of this library is to provide a minimalistic approach for various machine learning tasks. This includes,
+// but is not limited to, the following:
+//
+//  - linear regression
+//  - support vector machines
+//  - neural networks
+//
+// The library allows the user to define a certain function using the available tensor operations. This function
+// definition is represented internally via a computation graph. Each tensor operation in the function definition
+// corresponds to a node in the graph. Having the computation graph defined, the user can choose to compute the
+// function's value and/or its gradient with respect to the input variables. Optionally, the function can be optimized
+// using one of the available optimization algorithms.
+//
+// For example, here we define the function: f(x) = a*x^2 + b
+//
+//   {
+//       struct ggml_init_params params = {
+//           .mem_size   = 16*1024*1024,
+//           .mem_buffer = NULL,
+//       };
+//
+//       // memory allocation happens here
+//       struct ggml_context * ctx = ggml_init(params);
+//
+//       struct ggml_tensor * x = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1);
+//
+//       ggml_set_param(ctx, x); // x is an input variable
+//
+//       struct ggml_tensor * a  = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1);
+//       struct ggml_tensor * b  = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1);
+//       struct ggml_tensor * x2 = ggml_mul(ctx, x, x);
+//       struct ggml_tensor * f  = ggml_add(ctx, ggml_mul(ctx, a, x2), b);
+//
+//       ...
+//   }
+//
+// Notice that the function definition above does not involve any actual computation. The computation is performed only
+// when the user explicitly requests it. For example, to compute the function's value at x = 2.0:
+//
+//   {
+//       ...
+//
+//       struct ggml_cgraph * gf = ggml_new_graph(ctx);
+//       ggml_build_forward_expand(gf, f);
+//
+//       // set the input variable and parameter values
+//       ggml_set_f32(x, 2.0f);
+//       ggml_set_f32(a, 3.0f);
+//       ggml_set_f32(b, 4.0f);
+//
+//       ggml_graph_compute_with_ctx(ctx, &gf, n_threads);
+//
+//       printf("f = %f\n", ggml_get_f32_1d(f, 0));
+//
+//       ...
+//   }
+//
+// The actual computation is performed in the ggml_graph_compute() function.
+//
+// The ggml_new_tensor_...() functions create new tensors. They are allocated in the memory buffer provided to the
+// ggml_init() function. You have to be careful not to exceed the memory buffer size. Therefore, you have to know
+// in advance how much memory you need for your computation. Alternatively, you can allocate a large enough memory
+// and after defining the computation graph, call the ggml_used_mem() function to find out how much memory was
+// actually needed.
+//
+// The ggml_set_param() function marks a tensor as an input variable. This is used by the automatic
+// differentiation and optimization algorithms.
+//
+// The described approach allows to define the function graph once and then compute its forward or backward graphs
+// multiple times. All computations will use the same memory buffer allocated in the ggml_init() function. This way
+// the user can avoid the memory allocation overhead at runtime.
+//
+// The library supports multi-dimensional tensors - up to 4 dimensions. The FP16 and FP32 data types are first class
+// citizens, but in theory the library can be extended to support FP8 and integer data types.
+//
+// Each tensor operation produces a new tensor. Initially the library was envisioned to support only the use of unary
+// and binary operations. Most of the available operations fall into one of these two categories. With time, it became
+// clear that the library needs to support more complex operations. The way to support these operations is not clear
+// yet, but a few examples are demonstrated in the following operations:
+//
+//   - ggml_permute()
+//   - ggml_conv_1d_1s()
+//   - ggml_conv_1d_2s()
+//
+// For each tensor operator, the library implements a forward and backward computation function. The forward function
+// computes the output tensor value given the input tensor values. The backward function computes the adjoint of the
+// input tensors given the adjoint of the output tensor. For a detailed explanation of what this means, take a
+// calculus class, or watch the following video:
+//
+//   What is Automatic Differentiation?
+//   https://www.youtube.com/watch?v=wG_nF1awSSY
+//
+//
+// ## Tensor data (struct ggml_tensor)
+//
+// The tensors are stored in memory via the ggml_tensor struct. The structure provides information about the size of
+// the tensor, the data type, and the memory buffer where the tensor data is stored. Additionally, it contains
+// pointers to the "source" tensors - i.e. the tensors that were used to compute the current tensor. For example:
+//
+//   {
+//       struct ggml_tensor * c = ggml_add(ctx, a, b);
+//
+//       assert(c->src[0] == a);
+//       assert(c->src[1] == b);
+//   }
+//
+// The multi-dimensional tensors are stored in row-major order. The ggml_tensor struct contains fields for the
+// number of elements in each dimension ("ne") as well as the number of bytes ("nb", a.k.a. stride). This allows
+// to store tensors that are not contiguous in memory, which is useful for operations such as transposition and
+// permutation. All tensor operations have to take the stride into account and not assume that the tensor is
+// contiguous in memory.
+//
+// The data of the tensor is accessed via the "data" pointer. For example:
+//
+//   {
+//       const int nx = 2;
+//       const int ny = 3;
+//
+//       struct ggml_tensor * a = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, nx, ny);
+//
+//       for (int y = 0; y < ny; y++) {
+//           for (int x = 0; x < nx; x++) {
+//               *(float *) ((char *) a->data + y*a->nb[1] + x*a->nb[0]) = x + y;
+//           }
+//       }
+//
+//       ...
+//   }
+//
+// Alternatively, there are helper functions, such as ggml_get_f32_1d() and ggml_set_f32_1d() that can be used.
+//
+// ## The matrix multiplication operator (ggml_mul_mat)
+//
+// TODO
+//
+//
+// ## Multi-threading
+//
+// TODO
+//
+//
+// ## Overview of ggml.c
+//
+// TODO
+//
+//
+// ## SIMD optimizations
+//
+// TODO
+//
+//
+// ## Debugging ggml
+//
+// TODO
+//
+//
+
+#ifdef GGML_SHARED
+#    if defined(_WIN32) && !defined(__MINGW32__)
+#        ifdef GGML_BUILD
+#            define GGML_API __declspec(dllexport)
+#        else
+#            define GGML_API __declspec(dllimport)
+#        endif
+#    else
+#        define GGML_API __attribute__ ((visibility ("default")))
+#    endif
+#else
+#    define GGML_API
+#endif
+
+#ifdef GGML_MULTIPLATFORM
+#    if defined(_WIN32)
+#        define GGML_CALL
+#    else
+#        define GGML_CALL __attribute__((__ms_abi__))
+#    endif
+#else
+#    define GGML_CALL
+#endif
+
+// TODO: support for clang
+#ifdef __GNUC__
+#    define GGML_DEPRECATED(func, hint) func __attribute__((deprecated(hint)))
+#elif defined(_MSC_VER)
+#    define GGML_DEPRECATED(func, hint) __declspec(deprecated(hint)) func
+#else
+#    define GGML_DEPRECATED(func, hint) func
+#endif
+
+#ifndef __GNUC__
+#    define GGML_ATTRIBUTE_FORMAT(...)
+#elif defined(__MINGW32__)
+#    define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__)))
+#else
+#    define GGML_ATTRIBUTE_FORMAT(...) __attribute__((format(printf, __VA_ARGS__)))
+#endif
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#define GGML_FILE_MAGIC   0x67676d6c // "ggml"
+#define GGML_FILE_VERSION 1
+
+#define GGML_QNT_VERSION        2    // bump this on quantization format changes
+#define GGML_QNT_VERSION_FACTOR 1000 // do not change this
+
+#define GGML_MAX_DIMS           4
+#define GGML_MAX_PARAMS         2048
+#define GGML_MAX_CONTEXTS       64
+#define GGML_MAX_SRC            10
+#ifndef GGML_MAX_NAME
+#define GGML_MAX_NAME           64
+#endif
+#define GGML_MAX_OP_PARAMS      64
+#define GGML_DEFAULT_N_THREADS  4
+#define GGML_DEFAULT_GRAPH_SIZE 2048
+#if UINTPTR_MAX == 0xFFFFFFFF
+    #define GGML_MEM_ALIGN 4
+#else
+    #define GGML_MEM_ALIGN 16
+#endif
+
+#define GGML_EXIT_SUCCESS 0
+#define GGML_EXIT_ABORTED 1
+
+#define GGUF_MAGIC "GGUF"
+
+#define GGUF_VERSION 3
+
+#define GGUF_DEFAULT_ALIGNMENT 32
+
+#define GGML_UNUSED(x) (void)(x)
+
+#define GGML_PAD(x, n) (((x) + (n) - 1) & ~((n) - 1))
+
+#define GGML_ASSERT(x) \
+    do { \
+        if (!(x)) { \
+            fflush(stdout); \
+            fprintf(stderr, "GGML_ASSERT: %s:%d: %s\n", __FILE__, __LINE__, #x); \
+            ggml_print_backtrace(); \
+            abort(); \
+        } \
+    } while (0)
+
+#ifndef NDEBUG
+#define GGML_UNREACHABLE() GGML_ASSERT(!"statement should not be reached")
+#elif defined(__GNUC__)
+#define GGML_UNREACHABLE() __builtin_unreachable()
+#elif defined(_MSC_VER)
+#define GGML_UNREACHABLE() __assume(0)
+#else
+#define GGML_UNREACHABLE() ((void) 0)
+#endif
+
+// used to copy the number of elements and stride in bytes of tensors into local variables.
+// main purpose is to reduce code duplication and improve readability.
+//
+// example:
+//
+//    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne);
+//    GGML_TENSOR_LOCALS(size_t,  nb1, src1, nb);
+//
+#define GGML_TENSOR_LOCALS_1(type, prefix, pointer, array) \
+    const type prefix##0 = (pointer)->array[0]; \
+    GGML_UNUSED(prefix##0);
+#define GGML_TENSOR_LOCALS_2(type, prefix, pointer, array) \
+    GGML_TENSOR_LOCALS_1    (type, prefix, pointer, array) \
+    const type prefix##1 = (pointer)->array[1]; \
+    GGML_UNUSED(prefix##1);
+#define GGML_TENSOR_LOCALS_3(type, prefix, pointer, array) \
+    GGML_TENSOR_LOCALS_2    (type, prefix, pointer, array) \
+    const type prefix##2 = (pointer)->array[2]; \
+    GGML_UNUSED(prefix##2);
+#define GGML_TENSOR_LOCALS(type, prefix, pointer, array) \
+    GGML_TENSOR_LOCALS_3  (type, prefix, pointer, array) \
+    const type prefix##3 = (pointer)->array[3]; \
+    GGML_UNUSED(prefix##3);
+
+#define GGML_TENSOR_UNARY_OP_LOCALS \
+    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \
+    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb) \
+    GGML_TENSOR_LOCALS(int64_t, ne,  dst,  ne) \
+    GGML_TENSOR_LOCALS(size_t,  nb,  dst,  nb)
+
+#define GGML_TENSOR_BINARY_OP_LOCALS \
+    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \
+    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb) \
+    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \
+    GGML_TENSOR_LOCALS(size_t,  nb1, src1, nb) \
+    GGML_TENSOR_LOCALS(int64_t, ne,  dst,  ne) \
+    GGML_TENSOR_LOCALS(size_t,  nb,  dst,  nb)
+
+#define GGML_TENSOR_BINARY_OP_LOCALS01 \
+    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne) \
+    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb) \
+    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne) \
+    GGML_TENSOR_LOCALS(size_t,  nb1, src1, nb)
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+    enum ggml_status {
+        GGML_STATUS_ALLOC_FAILED = -2,
+        GGML_STATUS_FAILED = -1,
+        GGML_STATUS_SUCCESS = 0,
+        GGML_STATUS_ABORTED = 1,
+    };
+
+    // get ggml_status name string
+    GGML_API GGML_CALL const char * ggml_status_to_string(enum ggml_status status);
+
+    // ieee 754-2008 half-precision float16
+    // todo: make this not an integral type
+    typedef uint16_t ggml_fp16_t;
+    GGML_API float       ggml_fp16_to_fp32(ggml_fp16_t);
+    GGML_API ggml_fp16_t ggml_fp32_to_fp16(float);
+    GGML_API void        ggml_fp16_to_fp32_row(const ggml_fp16_t *, float *, int64_t);
+    GGML_API void        ggml_fp32_to_fp16_row(const float *, ggml_fp16_t *, int64_t);
+
+    // google brain half-precision bfloat16
+    typedef struct { uint16_t bits; } ggml_bf16_t;
+    GGML_API ggml_bf16_t ggml_fp32_to_bf16(float);
+    GGML_API float       ggml_bf16_to_fp32(ggml_bf16_t);  // consider just doing << 16
+    GGML_API void        ggml_bf16_to_fp32_row(const ggml_bf16_t *, float *, int64_t);
+    GGML_API void        ggml_fp32_to_bf16_row(const float *, ggml_bf16_t *, int64_t);
+
+    struct ggml_object;
+    struct ggml_context;
+
+    // NOTE: always add types at the end of the enum to keep backward compatibility
+    enum ggml_type {
+        GGML_TYPE_F32     = 0,
+        GGML_TYPE_F16     = 1,
+        GGML_TYPE_Q4_0    = 2,
+        GGML_TYPE_Q4_1    = 3,
+        // GGML_TYPE_Q4_2 = 4, support has been removed
+        // GGML_TYPE_Q4_3 = 5, support has been removed
+        GGML_TYPE_Q5_0    = 6,
+        GGML_TYPE_Q5_1    = 7,
+        GGML_TYPE_Q8_0    = 8,
+        GGML_TYPE_Q8_1    = 9,
+        GGML_TYPE_Q2_K    = 10,
+        GGML_TYPE_Q3_K    = 11,
+        GGML_TYPE_Q4_K    = 12,
+        GGML_TYPE_Q5_K    = 13,
+        GGML_TYPE_Q6_K    = 14,
+        GGML_TYPE_Q8_K    = 15,
+        GGML_TYPE_IQ2_XXS = 16,
+        GGML_TYPE_IQ2_XS  = 17,
+        GGML_TYPE_IQ3_XXS = 18,
+        GGML_TYPE_IQ1_S   = 19,
+        GGML_TYPE_IQ4_NL  = 20,
+        GGML_TYPE_IQ3_S   = 21,
+        GGML_TYPE_IQ2_S   = 22,
+        GGML_TYPE_IQ4_XS  = 23,
+        GGML_TYPE_I8      = 24,
+        GGML_TYPE_I16     = 25,
+        GGML_TYPE_I32     = 26,
+        GGML_TYPE_I64     = 27,
+        GGML_TYPE_F64     = 28,
+        GGML_TYPE_IQ1_M   = 29,
+        GGML_TYPE_BF16    = 30,
+        GGML_TYPE_COUNT,
+    };
+
+    // precision
+    enum ggml_prec {
+        GGML_PREC_DEFAULT,
+        GGML_PREC_F32,
+    };
+
+    enum ggml_backend_type {
+        GGML_BACKEND_TYPE_CPU = 0,
+        GGML_BACKEND_TYPE_GPU = 10,
+        GGML_BACKEND_TYPE_GPU_SPLIT = 20,
+    };
+
+    // model file types
+    enum ggml_ftype {
+        GGML_FTYPE_UNKNOWN        = -1,
+        GGML_FTYPE_ALL_F32        = 0,
+        GGML_FTYPE_MOSTLY_F16     = 1,  // except 1d tensors
+        GGML_FTYPE_MOSTLY_Q4_0    = 2,  // except 1d tensors
+        GGML_FTYPE_MOSTLY_Q4_1    = 3,  // except 1d tensors
+        GGML_FTYPE_MOSTLY_Q4_1_SOME_F16 = 4, // tok_embeddings.weight and output.weight are F16
+        GGML_FTYPE_MOSTLY_Q8_0    = 7,  // except 1d tensors
+        GGML_FTYPE_MOSTLY_Q5_0    = 8,  // except 1d tensors
+        GGML_FTYPE_MOSTLY_Q5_1    = 9,  // except 1d tensors
+        GGML_FTYPE_MOSTLY_Q2_K    = 10, // except 1d tensors
+        GGML_FTYPE_MOSTLY_Q3_K    = 11, // except 1d tensors
+        GGML_FTYPE_MOSTLY_Q4_K    = 12, // except 1d tensors
+        GGML_FTYPE_MOSTLY_Q5_K    = 13, // except 1d tensors
+        GGML_FTYPE_MOSTLY_Q6_K    = 14, // except 1d tensors
+        GGML_FTYPE_MOSTLY_IQ2_XXS = 15, // except 1d tensors
+        GGML_FTYPE_MOSTLY_IQ2_XS  = 16, // except 1d tensors
+        GGML_FTYPE_MOSTLY_IQ3_XXS = 17, // except 1d tensors
+        GGML_FTYPE_MOSTLY_IQ1_S   = 18, // except 1d tensors
+        GGML_FTYPE_MOSTLY_IQ4_NL  = 19, // except 1d tensors
+        GGML_FTYPE_MOSTLY_IQ3_S   = 20, // except 1d tensors
+        GGML_FTYPE_MOSTLY_IQ2_S   = 21, // except 1d tensors
+        GGML_FTYPE_MOSTLY_IQ4_XS  = 22, // except 1d tensors
+        GGML_FTYPE_MOSTLY_IQ1_M   = 23, // except 1d tensors
+        GGML_FTYPE_MOSTLY_BF16    = 24, // except 1d tensors
+    };
+
+    // available tensor operations:
+    enum ggml_op {
+        GGML_OP_NONE = 0,
+
+        GGML_OP_DUP,
+        GGML_OP_ADD,
+        GGML_OP_ADD1,
+        GGML_OP_ACC,
+        GGML_OP_SUB,
+        GGML_OP_MUL,
+        GGML_OP_DIV,
+        GGML_OP_SQR,
+        GGML_OP_SQRT,
+        GGML_OP_LOG,
+        GGML_OP_SUM,
+        GGML_OP_SUM_ROWS,
+        GGML_OP_MEAN,
+        GGML_OP_ARGMAX,
+        GGML_OP_REPEAT,
+        GGML_OP_REPEAT_BACK,
+        GGML_OP_CONCAT,
+        GGML_OP_SILU_BACK,
+        GGML_OP_NORM, // normalize
+        GGML_OP_RMS_NORM,
+        GGML_OP_RMS_NORM_BACK,
+        GGML_OP_GROUP_NORM,
+
+        GGML_OP_MUL_MAT,
+        GGML_OP_MUL_MAT_ID,
+        GGML_OP_OUT_PROD,
+
+        GGML_OP_SCALE,
+        GGML_OP_SET,
+        GGML_OP_CPY,
+        GGML_OP_CONT,
+        GGML_OP_RESHAPE,
+        GGML_OP_VIEW,
+        GGML_OP_PERMUTE,
+        GGML_OP_TRANSPOSE,
+        GGML_OP_GET_ROWS,
+        GGML_OP_GET_ROWS_BACK,
+        GGML_OP_DIAG,
+        GGML_OP_DIAG_MASK_INF,
+        GGML_OP_DIAG_MASK_ZERO,
+        GGML_OP_SOFT_MAX,
+        GGML_OP_SOFT_MAX_BACK,
+        GGML_OP_ROPE,
+        GGML_OP_ROPE_BACK,
+        GGML_OP_CLAMP,
+        GGML_OP_CONV_TRANSPOSE_1D,
+        GGML_OP_IM2COL,
+        GGML_OP_CONV_TRANSPOSE_2D,
+        GGML_OP_POOL_1D,
+        GGML_OP_POOL_2D,
+        GGML_OP_UPSCALE, // nearest interpolate
+        GGML_OP_PAD,
+        GGML_OP_ARANGE,
+        GGML_OP_TIMESTEP_EMBEDDING,
+        GGML_OP_ARGSORT,
+        GGML_OP_LEAKY_RELU,
+
+        GGML_OP_FLASH_ATTN_EXT,
+        GGML_OP_FLASH_ATTN_BACK,
+        GGML_OP_SSM_CONV,
+        GGML_OP_SSM_SCAN,
+        GGML_OP_WIN_PART,
+        GGML_OP_WIN_UNPART,
+        GGML_OP_GET_REL_POS,
+        GGML_OP_ADD_REL_POS,
+
+        GGML_OP_UNARY,
+
+        GGML_OP_MAP_UNARY,
+        GGML_OP_MAP_BINARY,
+
+        GGML_OP_MAP_CUSTOM1_F32,
+        GGML_OP_MAP_CUSTOM2_F32,
+        GGML_OP_MAP_CUSTOM3_F32,
+
+        GGML_OP_MAP_CUSTOM1,
+        GGML_OP_MAP_CUSTOM2,
+        GGML_OP_MAP_CUSTOM3,
+
+        GGML_OP_CROSS_ENTROPY_LOSS,
+        GGML_OP_CROSS_ENTROPY_LOSS_BACK,
+
+        GGML_OP_COUNT,
+    };
+
+    enum ggml_unary_op {
+        GGML_UNARY_OP_ABS,
+        GGML_UNARY_OP_SGN,
+        GGML_UNARY_OP_NEG,
+        GGML_UNARY_OP_STEP,
+        GGML_UNARY_OP_TANH,
+        GGML_UNARY_OP_ELU,
+        GGML_UNARY_OP_RELU,
+        GGML_UNARY_OP_SIGMOID,
+        GGML_UNARY_OP_GELU,
+        GGML_UNARY_OP_GELU_QUICK,
+        GGML_UNARY_OP_SILU,
+        GGML_UNARY_OP_HARDSWISH,
+        GGML_UNARY_OP_HARDSIGMOID,
+
+        GGML_UNARY_OP_COUNT,
+    };
+
+    enum ggml_object_type {
+        GGML_OBJECT_TYPE_TENSOR,
+        GGML_OBJECT_TYPE_GRAPH,
+        GGML_OBJECT_TYPE_WORK_BUFFER
+    };
+
+    enum ggml_log_level {
+        GGML_LOG_LEVEL_ERROR = 2,
+        GGML_LOG_LEVEL_WARN  = 3,
+        GGML_LOG_LEVEL_INFO  = 4,
+        GGML_LOG_LEVEL_DEBUG = 5
+    };
+
+    enum ggml_tensor_flag {
+        GGML_TENSOR_FLAG_INPUT  = 1,
+        GGML_TENSOR_FLAG_OUTPUT = 2,
+        GGML_TENSOR_FLAG_PARAM  = 4,
+    };
+
+    // ggml object
+    struct ggml_object {
+        size_t offs;
+        size_t size;
+
+        struct ggml_object * next;
+
+        enum ggml_object_type type;
+
+        char padding[4];
+    };
+
+    static const size_t GGML_OBJECT_SIZE = sizeof(struct ggml_object);
+
+    // n-dimensional tensor
+    struct ggml_tensor {
+        enum ggml_type         type;
+
+        GGML_DEPRECATED(enum ggml_backend_type backend, "use the buffer type to find the storage location of the tensor");
+
+        struct ggml_backend_buffer * buffer;
+
+        int64_t ne[GGML_MAX_DIMS]; // number of elements
+        size_t  nb[GGML_MAX_DIMS]; // stride in bytes:
+                                   // nb[0] = ggml_type_size(type)
+                                   // nb[1] = nb[0]   * (ne[0] / ggml_blck_size(type)) + padding
+                                   // nb[i] = nb[i-1] * ne[i-1]
+
+        // compute data
+        enum ggml_op op;
+
+        // op params - allocated as int32_t for alignment
+        int32_t op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)];
+
+        int32_t flags;
+
+        struct ggml_tensor * grad;
+        struct ggml_tensor * src[GGML_MAX_SRC];
+
+        // source tensor and offset for views
+        struct ggml_tensor * view_src;
+        size_t               view_offs;
+
+        void * data;
+
+        char name[GGML_MAX_NAME];
+
+        void * extra; // extra things e.g. for ggml-cuda.cu
+
+        // char padding[4];
+    };
+
+    static const size_t GGML_TENSOR_SIZE = sizeof(struct ggml_tensor);
+
+    // Abort callback
+    // If not NULL, called before ggml computation
+    // If it returns true, the computation is aborted
+    typedef bool (*ggml_abort_callback)(void * data);
+
+    // the compute plan that needs to be prepared for ggml_graph_compute()
+    // since https://github.com/ggerganov/ggml/issues/287
+    struct ggml_cplan {
+        size_t    work_size; // size of work buffer, calculated by `ggml_graph_plan()`
+        uint8_t * work_data; // work buffer, to be allocated by caller before calling to `ggml_graph_compute()`
+
+        int n_threads;
+
+        // abort ggml_graph_compute when true
+        ggml_abort_callback abort_callback;
+        void *              abort_callback_data;
+    };
+
+    enum ggml_cgraph_eval_order {
+        GGML_CGRAPH_EVAL_ORDER_LEFT_TO_RIGHT = 0,
+        GGML_CGRAPH_EVAL_ORDER_RIGHT_TO_LEFT,
+        GGML_CGRAPH_EVAL_ORDER_COUNT
+    };
+
+    struct ggml_hash_set {
+        size_t size;
+        struct ggml_tensor ** keys;
+    };
+
+    // computation graph
+    struct ggml_cgraph {
+        int size;
+        int n_nodes;
+        int n_leafs;
+
+        struct ggml_tensor ** nodes;
+        struct ggml_tensor ** grads;
+        struct ggml_tensor ** leafs;
+
+        struct ggml_hash_set visited_hash_table;
+
+        enum ggml_cgraph_eval_order order;
+    };
+
+    // scratch buffer
+    struct ggml_scratch {
+        size_t offs;
+        size_t size;
+        void * data;
+    };
+
+    struct ggml_init_params {
+        // memory pool
+        size_t mem_size;   // bytes
+        void * mem_buffer; // if NULL, memory will be allocated internally
+        bool   no_alloc;   // don't allocate memory for the tensor data
+    };
+
+    // numa strategies
+    enum ggml_numa_strategy {
+        GGML_NUMA_STRATEGY_DISABLED   = 0,
+        GGML_NUMA_STRATEGY_DISTRIBUTE = 1,
+        GGML_NUMA_STRATEGY_ISOLATE    = 2,
+        GGML_NUMA_STRATEGY_NUMACTL    = 3,
+        GGML_NUMA_STRATEGY_MIRROR     = 4,
+        GGML_NUMA_STRATEGY_COUNT
+    };
+
+    //
+    // GUID
+    //
+
+    // GUID types
+    typedef uint8_t ggml_guid[16];
+    typedef ggml_guid * ggml_guid_t;
+
+    GGML_API bool ggml_guid_matches(ggml_guid_t guid_a, ggml_guid_t guid_b);
+
+    // misc
+
+    GGML_API void    ggml_time_init(void); // call this once at the beginning of the program
+    GGML_API int64_t ggml_time_ms(void);
+    GGML_API int64_t ggml_time_us(void);
+    GGML_API int64_t ggml_cycles(void);
+    GGML_API int64_t ggml_cycles_per_ms(void);
+
+    GGML_API void    ggml_print_backtrace(void);
+
+    // accepts a UTF-8 path, even on Windows
+    GGML_API FILE *  ggml_fopen(const char * fname, const char * mode);
+
+    GGML_API void    ggml_numa_init(enum ggml_numa_strategy numa); // call once for better performance on NUMA systems
+    GGML_API bool    ggml_is_numa(void); // true if init detected that system has >1 NUMA node
+
+    GGML_API void    ggml_print_object (const struct ggml_object * obj);
+    GGML_API void    ggml_print_objects(const struct ggml_context * ctx);
+
+    GGML_API GGML_CALL int64_t ggml_nelements   (const struct ggml_tensor * tensor);
+    GGML_API GGML_CALL int64_t ggml_nrows       (const struct ggml_tensor * tensor);
+    GGML_API GGML_CALL size_t  ggml_nbytes      (const struct ggml_tensor * tensor);
+    GGML_API           size_t  ggml_nbytes_pad  (const struct ggml_tensor * tensor); // same as ggml_nbytes() but padded to GGML_MEM_ALIGN
+
+    GGML_API GGML_CALL int    ggml_blck_size(enum ggml_type type);
+    GGML_API GGML_CALL size_t ggml_type_size(enum ggml_type type);             // size in bytes for all elements in a block
+    GGML_API GGML_CALL size_t ggml_row_size (enum ggml_type type, int64_t ne); // size in bytes for all elements in a row
+
+    GGML_DEPRECATED(
+    GGML_API double ggml_type_sizef(enum ggml_type type), // ggml_type_size()/ggml_blck_size() as float
+    "use ggml_row_size() instead");
+
+    GGML_API GGML_CALL const char * ggml_type_name(enum ggml_type type);
+    GGML_API GGML_CALL const char * ggml_op_name  (enum ggml_op   op);
+    GGML_API           const char * ggml_op_symbol(enum ggml_op   op);
+
+    GGML_API           const char * ggml_unary_op_name(enum ggml_unary_op op);
+    GGML_API GGML_CALL const char * ggml_op_desc(const struct ggml_tensor * t); // unary or op name
+
+    GGML_API GGML_CALL size_t  ggml_element_size(const struct ggml_tensor * tensor);
+
+    GGML_API GGML_CALL bool    ggml_is_quantized(enum ggml_type type);
+
+    // TODO: temporary until model loading of ggml examples is refactored
+    GGML_API enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype);
+
+    GGML_API GGML_CALL bool ggml_is_transposed(const struct ggml_tensor * tensor);
+    GGML_API GGML_CALL bool ggml_is_permuted  (const struct ggml_tensor * tensor);
+    GGML_API GGML_CALL bool ggml_is_empty     (const struct ggml_tensor * tensor);
+    GGML_API           bool ggml_is_scalar    (const struct ggml_tensor * tensor);
+    GGML_API           bool ggml_is_vector    (const struct ggml_tensor * tensor);
+    GGML_API           bool ggml_is_matrix    (const struct ggml_tensor * tensor);
+    GGML_API           bool ggml_is_3d        (const struct ggml_tensor * tensor);
+    GGML_API           int  ggml_n_dims       (const struct ggml_tensor * tensor); // returns 1 for scalars
+
+    GGML_API GGML_CALL bool ggml_is_contiguous  (const struct ggml_tensor * tensor);
+    GGML_API GGML_CALL bool ggml_is_contiguous_0(const struct ggml_tensor * tensor); // same as ggml_is_contiguous()
+    GGML_API GGML_CALL bool ggml_is_contiguous_1(const struct ggml_tensor * tensor); // contiguous for dims >= 1
+    GGML_API GGML_CALL bool ggml_is_contiguous_2(const struct ggml_tensor * tensor); // contiguous for dims >= 2
+
+    GGML_API bool ggml_are_same_shape (const struct ggml_tensor * t0, const struct ggml_tensor * t1);
+    GGML_API bool ggml_are_same_stride(const struct ggml_tensor * t0, const struct ggml_tensor * t1);
+
+    // use this to compute the memory overhead of a tensor
+    GGML_API size_t ggml_tensor_overhead(void);
+
+    GGML_API bool ggml_validate_row_data(enum ggml_type type, const void * data, size_t nbytes);
+
+    // main
+
+    GGML_API struct ggml_context * ggml_init(struct ggml_init_params params);
+    GGML_API void                  ggml_free(struct ggml_context * ctx);
+
+    GGML_API size_t  ggml_used_mem(const struct ggml_context * ctx);
+
+    GGML_API size_t  ggml_set_scratch (struct ggml_context * ctx, struct ggml_scratch scratch);
+    GGML_API bool    ggml_get_no_alloc(struct ggml_context * ctx);
+    GGML_API void    ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc);
+
+    GGML_API void *  ggml_get_mem_buffer     (const struct ggml_context * ctx);
+    GGML_API size_t  ggml_get_mem_size       (const struct ggml_context * ctx);
+    GGML_API size_t  ggml_get_max_tensor_size(const struct ggml_context * ctx);
+
+    GGML_API struct ggml_tensor * ggml_new_tensor(
+            struct ggml_context * ctx,
+            enum   ggml_type type,
+            int    n_dims,
+            const int64_t *ne);
+
+    GGML_API struct ggml_tensor * ggml_new_tensor_1d(
+            struct ggml_context * ctx,
+            enum   ggml_type type,
+            int64_t ne0);
+
+    GGML_API struct ggml_tensor * ggml_new_tensor_2d(
+            struct ggml_context * ctx,
+            enum   ggml_type type,
+            int64_t ne0,
+            int64_t ne1);
+
+    GGML_API struct ggml_tensor * ggml_new_tensor_3d(
+            struct ggml_context * ctx,
+            enum   ggml_type type,
+            int64_t ne0,
+            int64_t ne1,
+            int64_t ne2);
+
+    GGML_API struct ggml_tensor * ggml_new_tensor_4d(
+            struct ggml_context * ctx,
+            enum   ggml_type type,
+            int64_t ne0,
+            int64_t ne1,
+            int64_t ne2,
+            int64_t ne3);
+
+    GGML_API struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value);
+    GGML_API struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value);
+
+    GGML_API struct ggml_tensor * ggml_dup_tensor (struct ggml_context * ctx, const struct ggml_tensor * src);
+    GGML_API struct ggml_tensor * ggml_view_tensor(struct ggml_context * ctx, struct ggml_tensor * src);
+
+    // Context tensor enumeration and lookup
+    GGML_API struct ggml_tensor * ggml_get_first_tensor(const struct ggml_context * ctx);
+    GGML_API struct ggml_tensor * ggml_get_next_tensor (const struct ggml_context * ctx, struct ggml_tensor * tensor);
+    GGML_API struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name);
+
+    GGML_API struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor);
+    GGML_API struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value);
+    GGML_API struct ggml_tensor * ggml_set_f32 (struct ggml_tensor * tensor, float value);
+
+    // Converts a flat index into coordinates
+    GGML_API void    ggml_unravel_index(const struct ggml_tensor * tensor, int64_t i, int64_t * i0, int64_t * i1, int64_t * i2, int64_t * i3);
+
+    GGML_API int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i);
+    GGML_API void    ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value);
+
+    GGML_API int32_t ggml_get_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3);
+    GGML_API void    ggml_set_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, int32_t value);
+
+    GGML_API float   ggml_get_f32_1d(const struct ggml_tensor * tensor, int i);
+    GGML_API void    ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value);
+
+    GGML_API float   ggml_get_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3);
+    GGML_API void    ggml_set_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, float value);
+
+    GGML_API void *  ggml_get_data    (const struct ggml_tensor * tensor);
+    GGML_API float * ggml_get_data_f32(const struct ggml_tensor * tensor);
+
+    GGML_API GGML_CALL enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor);
+
+    GGML_API const char *         ggml_get_name   (const struct ggml_tensor * tensor);
+    GGML_API struct ggml_tensor * ggml_set_name   (      struct ggml_tensor * tensor, const char * name);
+    GGML_ATTRIBUTE_FORMAT(2, 3)
+    GGML_API struct ggml_tensor * ggml_format_name(      struct ggml_tensor * tensor, const char * fmt, ...);
+
+    //
+    // operations on tensors with backpropagation
+    //
+
+    GGML_API struct ggml_tensor * ggml_dup(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // in-place, returns view(a)
+    GGML_API struct ggml_tensor * ggml_dup_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_add(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_add_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_add_cast(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            enum   ggml_type      type);
+
+    GGML_API struct ggml_tensor * ggml_add1(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_add1_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    // dst = a
+    // view(dst, nb1, nb2, nb3, offset) += b
+    // return dst
+    GGML_API struct ggml_tensor * ggml_acc(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            size_t                nb1,
+            size_t                nb2,
+            size_t                nb3,
+            size_t                offset);
+
+    GGML_API struct ggml_tensor * ggml_acc_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            size_t                nb1,
+            size_t                nb2,
+            size_t                nb3,
+            size_t                offset);
+
+    GGML_API struct ggml_tensor * ggml_sub(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_sub_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_mul(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_mul_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_div(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_div_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_sqr(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_sqr_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_sqrt(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_sqrt_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_log(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_log_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // return scalar
+    GGML_API struct ggml_tensor * ggml_sum(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // sums along rows, with input shape [a,b,c,d] return shape [1,b,c,d]
+    GGML_API struct ggml_tensor * ggml_sum_rows(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // mean along rows
+    GGML_API struct ggml_tensor * ggml_mean(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // argmax along rows
+    GGML_API struct ggml_tensor * ggml_argmax(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // if a is the same shape as b, and a is not parameter, return a
+    // otherwise, return a new tensor: repeat(a) to fit in b
+    GGML_API struct ggml_tensor * ggml_repeat(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    // sums repetitions in a into shape of b
+    GGML_API struct ggml_tensor * ggml_repeat_back(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    // concat a and b along dim
+    // used in stable-diffusion
+    GGML_API struct ggml_tensor * ggml_concat(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                   dim);
+
+    GGML_API struct ggml_tensor * ggml_abs(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_abs_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_sgn(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_sgn_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_neg(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_neg_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_step(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_step_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_tanh(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_tanh_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_elu(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_elu_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_relu(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_leaky_relu(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a, float negative_slope, bool inplace);
+
+    GGML_API struct ggml_tensor * ggml_relu_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_sigmoid(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_sigmoid_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_gelu(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_gelu_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_gelu_quick(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_gelu_quick_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_silu(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    GGML_API struct ggml_tensor * ggml_silu_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // a - x
+    // b - dy
+    GGML_API struct ggml_tensor * ggml_silu_back(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    // hardswish(x) = x * relu6(x + 3) / 6
+    GGML_API struct ggml_tensor * ggml_hardswish(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // hardsigmoid(x) = relu6(x + 3) / 6
+    GGML_API struct ggml_tensor * ggml_hardsigmoid(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // normalize along rows
+    GGML_API struct ggml_tensor * ggml_norm(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            float                 eps);
+
+    GGML_API struct ggml_tensor * ggml_norm_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            float                 eps);
+
+    GGML_API struct ggml_tensor * ggml_rms_norm(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            float                 eps);
+
+    GGML_API struct ggml_tensor * ggml_rms_norm_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            float                 eps);
+
+    // group normalize along ne0*ne1*n_groups
+    // used in stable-diffusion
+    // TODO: eps is hardcoded to 1e-6 for now
+    GGML_API struct ggml_tensor * ggml_group_norm(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   n_groups);
+
+    GGML_API struct ggml_tensor * ggml_group_norm_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   n_groups);
+
+    // a - x
+    // b - dy
+    GGML_API struct ggml_tensor * ggml_rms_norm_back(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            float                 eps);
+
+    // A: k columns, n rows => [ne03, ne02, n, k]
+    // B: k columns, m rows  (i.e. we transpose it internally) => [ne03 * x, ne02 * y, m, k]
+    // result is n columns, m rows => [ne03 * x, ne02 * y, m, n]
+    GGML_API struct ggml_tensor * ggml_mul_mat(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    // change the precision of a matrix multiplication
+    // set to GGML_PREC_F32 for higher precision (useful for phi-2)
+    GGML_API void ggml_mul_mat_set_prec(
+            struct ggml_tensor * a,
+            enum ggml_prec       prec);
+
+    // indirect matrix multiplication
+    GGML_API struct ggml_tensor * ggml_mul_mat_id(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * as,
+            struct ggml_tensor  * b,
+            struct ggml_tensor  * ids);
+
+    // A: m columns, n rows,
+    // B: p columns, n rows,
+    // result is m columns, p rows
+    GGML_API struct ggml_tensor * ggml_out_prod(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    //
+    // operations on tensors without backpropagation
+    //
+
+    GGML_API struct ggml_tensor * ggml_scale(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            float                 s);
+
+    // in-place, returns view(a)
+    GGML_API struct ggml_tensor * ggml_scale_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            float                 s);
+
+    // b -> view(a,offset,nb1,nb2,3), return modified a
+    GGML_API struct ggml_tensor * ggml_set(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            size_t                nb1,
+            size_t                nb2,
+            size_t                nb3,
+            size_t                offset);
+
+    // b -> view(a,offset,nb1,nb2,3), return view(a)
+    GGML_API struct ggml_tensor * ggml_set_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            size_t                nb1,
+            size_t                nb2,
+            size_t                nb3,
+            size_t                offset);
+
+    GGML_API struct ggml_tensor * ggml_set_1d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            size_t                offset);
+
+    GGML_API struct ggml_tensor * ggml_set_1d_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            size_t                offset);
+
+    // b -> view(a,offset,nb1,nb2,3), return modified a
+    GGML_API struct ggml_tensor * ggml_set_2d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            size_t                nb1,
+            size_t                offset);
+
+    // b -> view(a,offset,nb1,nb2,3), return view(a)
+    GGML_API struct ggml_tensor * ggml_set_2d_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            size_t                nb1,
+            size_t                offset);
+
+    // a -> b, return view(b)
+    GGML_API struct ggml_tensor * ggml_cpy(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_cast(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            enum   ggml_type      type);
+
+    // make contiguous
+    GGML_API struct ggml_tensor * ggml_cont(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // make contiguous, with new shape
+    GGML_API struct ggml_tensor * ggml_cont_1d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0);
+
+    GGML_API struct ggml_tensor * ggml_cont_2d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0,
+            int64_t               ne1);
+
+    GGML_API struct ggml_tensor * ggml_cont_3d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0,
+            int64_t               ne1,
+            int64_t               ne2);
+
+    GGML_API struct ggml_tensor * ggml_cont_4d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0,
+            int64_t               ne1,
+            int64_t               ne2,
+            int64_t               ne3);
+
+    // return view(a), b specifies the new shape
+    // TODO: when we start computing gradient, make a copy instead of view
+    GGML_API struct ggml_tensor * ggml_reshape(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    // return view(a)
+    // TODO: when we start computing gradient, make a copy instead of view
+    GGML_API struct ggml_tensor * ggml_reshape_1d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0);
+
+    GGML_API struct ggml_tensor * ggml_reshape_2d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0,
+            int64_t               ne1);
+
+    // return view(a)
+    // TODO: when we start computing gradient, make a copy instead of view
+    GGML_API struct ggml_tensor * ggml_reshape_3d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0,
+            int64_t               ne1,
+            int64_t               ne2);
+
+    GGML_API struct ggml_tensor * ggml_reshape_4d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0,
+            int64_t               ne1,
+            int64_t               ne2,
+            int64_t               ne3);
+
+    // offset in bytes
+    GGML_API struct ggml_tensor * ggml_view_1d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0,
+            size_t                offset);
+
+    GGML_API struct ggml_tensor * ggml_view_2d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0,
+            int64_t               ne1,
+            size_t                nb1, // row stride in bytes
+            size_t                offset);
+
+    GGML_API struct ggml_tensor * ggml_view_3d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0,
+            int64_t               ne1,
+            int64_t               ne2,
+            size_t                nb1, // row   stride in bytes
+            size_t                nb2, // slice stride in bytes
+            size_t                offset);
+
+    GGML_API struct ggml_tensor * ggml_view_4d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int64_t               ne0,
+            int64_t               ne1,
+            int64_t               ne2,
+            int64_t               ne3,
+            size_t                nb1, // row   stride in bytes
+            size_t                nb2, // slice stride in bytes
+            size_t                nb3,
+            size_t                offset);
+
+    GGML_API struct ggml_tensor * ggml_permute(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   axis0,
+            int                   axis1,
+            int                   axis2,
+            int                   axis3);
+
+    // alias for ggml_permute(ctx, a, 1, 0, 2, 3)
+    GGML_API struct ggml_tensor * ggml_transpose(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // supports 3D: a->ne[2] == b->ne[1]
+    GGML_API struct ggml_tensor * ggml_get_rows(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_get_rows_back(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            struct ggml_tensor  * c);
+
+    GGML_API struct ggml_tensor * ggml_diag(
+        struct ggml_context     * ctx,
+        struct ggml_tensor      * a);
+
+    // set elements above the diagonal to -INF
+    GGML_API struct ggml_tensor * ggml_diag_mask_inf(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   n_past);
+
+    // in-place, returns view(a)
+    GGML_API struct ggml_tensor * ggml_diag_mask_inf_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   n_past);
+
+    // set elements above the diagonal to 0
+    GGML_API struct ggml_tensor * ggml_diag_mask_zero(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   n_past);
+
+    // in-place, returns view(a)
+    GGML_API struct ggml_tensor * ggml_diag_mask_zero_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   n_past);
+
+    GGML_API struct ggml_tensor * ggml_soft_max(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // in-place, returns view(a)
+    GGML_API struct ggml_tensor * ggml_soft_max_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a);
+
+    // fused soft_max(a*scale + mask*(ALiBi slope))
+    // mask is optional
+    // max_bias = 0.0f for no ALiBi
+    GGML_API struct ggml_tensor * ggml_soft_max_ext(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * mask,
+            float                 scale,
+            float                 max_bias);
+
+    GGML_API struct ggml_tensor * ggml_soft_max_back(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    // in-place, returns view(a)
+    GGML_API struct ggml_tensor * ggml_soft_max_back_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    // rotary position embedding
+    // if mode & 1 == 1, skip n_past elements (NOT SUPPORTED)
+    // if mode & 2 == 1, GPT-NeoX style
+    //
+    // b is an int32 vector with size a->ne[2], it contains the positions
+    // c is freq factors (e.g. phi3-128k), (optional)
+    GGML_API struct ggml_tensor * ggml_rope(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                   n_dims,
+            int                   mode);
+
+    // in-place, returns view(a)
+    GGML_API struct ggml_tensor * ggml_rope_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                   n_dims,
+            int                   mode);
+
+    // custom RoPE
+    GGML_API struct ggml_tensor * ggml_rope_ext(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            struct ggml_tensor  * c,
+            int                   n_dims,
+            int                   mode,
+            int                   n_ctx_orig,
+            float                 freq_base,
+            float                 freq_scale,
+            float                 ext_factor,
+            float                 attn_factor,
+            float                 beta_fast,
+            float                 beta_slow);
+
+    // in-place, returns view(a)
+    GGML_API struct ggml_tensor * ggml_rope_ext_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            struct ggml_tensor  * c,
+            int                   n_dims,
+            int                   mode,
+            int                   n_ctx_orig,
+            float                 freq_base,
+            float                 freq_scale,
+            float                 ext_factor,
+            float                 attn_factor,
+            float                 beta_fast,
+            float                 beta_slow);
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_rope_custom(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                   n_dims,
+            int                   mode,
+            int                   n_ctx_orig,
+            float                 freq_base,
+            float                 freq_scale,
+            float                 ext_factor,
+            float                 attn_factor,
+            float                 beta_fast,
+            float                 beta_slow),
+        "use ggml_rope_ext instead");
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_rope_custom_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                   n_dims,
+            int                   mode,
+            int                   n_ctx_orig,
+            float                 freq_base,
+            float                 freq_scale,
+            float                 ext_factor,
+            float                 attn_factor,
+            float                 beta_fast,
+            float                 beta_slow),
+        "use ggml_rope_ext_inplace instead");
+
+    // compute correction dims for YaRN RoPE scaling
+    GGML_CALL void ggml_rope_yarn_corr_dims(
+        int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, float dims[2]);
+
+    // rotary position embedding backward, i.e compute dx from dy
+    // a - dy
+    GGML_API struct ggml_tensor * ggml_rope_back(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            struct ggml_tensor  * c,
+            int                   n_dims,
+            int                   mode,
+            int                   n_ctx_orig,
+            float                 freq_base,
+            float                 freq_scale,
+            float                 ext_factor,
+            float                 attn_factor,
+            float                 beta_fast,
+            float                 beta_slow);
+
+    // clamp
+    // in-place, returns view(a)
+    GGML_API struct ggml_tensor * ggml_clamp(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            float                 min,
+            float                 max);
+
+    GGML_API struct ggml_tensor * ggml_im2col(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                  s0,
+            int                  s1,
+            int                  p0,
+            int                  p1,
+            int                  d0,
+            int                  d1,
+            bool                 is_2D,
+            enum ggml_type       dst_type);
+
+    GGML_API struct ggml_tensor * ggml_conv_depthwise_2d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                  s0,
+            int                  s1,
+            int                  p0,
+            int                  p1,
+            int                  d0,
+            int                  d1);
+
+    GGML_API struct ggml_tensor * ggml_conv_1d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                   s0,  // stride
+            int                   p0,  // padding
+            int                   d0); // dilation
+
+    // conv_1d with padding = half
+    // alias for ggml_conv_1d(a, b, s, a->ne[0]/2, d)
+    GGML_API struct ggml_tensor* ggml_conv_1d_ph(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                   s,
+            int                   d);
+
+    GGML_API struct ggml_tensor * ggml_conv_transpose_1d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                   s0,
+            int                   p0,
+            int                   d0);
+
+    GGML_API struct ggml_tensor * ggml_conv_2d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                   s0,
+            int                   s1,
+            int                   p0,
+            int                   p1,
+            int                   d0,
+            int                   d1);
+
+
+    // kernel size is a->ne[0] x a->ne[1]
+    // stride is equal to kernel size
+    // padding is zero
+    // example:
+    // a:     16   16    3  768
+    // b:   1024 1024    3    1
+    // res:   64   64  768    1
+    // used in sam
+    GGML_API struct ggml_tensor * ggml_conv_2d_sk_p0(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    // kernel size is a->ne[0] x a->ne[1]
+    // stride is 1
+    // padding is half
+    // example:
+    // a:      3    3    256  256
+    // b:     64   64    256    1
+    // res:   64   64    256    1
+    // used in sam
+    GGML_API struct ggml_tensor * ggml_conv_2d_s1_ph(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b);
+
+    GGML_API struct ggml_tensor * ggml_conv_transpose_2d_p0(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * b,
+            int                   stride);
+
+    enum ggml_op_pool {
+        GGML_OP_POOL_MAX,
+        GGML_OP_POOL_AVG,
+        GGML_OP_POOL_COUNT,
+    };
+
+    GGML_API struct ggml_tensor * ggml_pool_1d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            enum ggml_op_pool     op,
+            int                   k0, // kernel size
+            int                   s0, // stride
+            int                   p0); // padding
+
+    // the result will have 2*p0 padding for the first dimension
+    // and 2*p1 padding for the second dimension
+    GGML_API struct ggml_tensor * ggml_pool_2d(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            enum ggml_op_pool     op,
+            int                   k0,
+            int                   k1,
+            int                   s0,
+            int                   s1,
+            float                 p0,
+            float                 p1);
+
+    // nearest interpolate
+    // multiplies ne0 and ne1 by scale factor
+    // used in stable-diffusion
+    GGML_API struct ggml_tensor * ggml_upscale(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   scale_factor);
+
+    // nearest interpolate
+    // nearest interpolate to specified dimensions
+    // used in tortoise.cpp
+    GGML_API struct ggml_tensor * ggml_upscale_ext(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   ne0,
+            int                   ne1,
+            int                   ne2,
+            int                   ne3);
+
+    // pad each dimension with zeros: [x, ..., x] -> [x, ..., x, 0, ..., 0]
+    GGML_API struct ggml_tensor * ggml_pad(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                  p0,
+            int                  p1,
+            int                  p2,
+            int                  p3);
+
+    // Ref: https://github.com/CompVis/stable-diffusion/blob/main/ldm/modules/diffusionmodules/util.py#L151
+    // timesteps: [N,]
+    // return: [N, dim]
+    GGML_API struct ggml_tensor * ggml_timestep_embedding(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * timesteps,
+            int                   dim,
+            int                   max_period);
+
+    // sort rows
+    enum ggml_sort_order {
+        GGML_SORT_ORDER_ASC,
+        GGML_SORT_ORDER_DESC,
+    };
+
+    GGML_API struct ggml_tensor * ggml_argsort(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            enum ggml_sort_order  order);
+
+    GGML_API struct ggml_tensor * ggml_arange(
+            struct ggml_context * ctx,
+            float                 start,
+            float                 stop,
+            float                 step);
+
+    // top k elements per row
+    GGML_API struct ggml_tensor * ggml_top_k(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   k);
+
+#define GGML_KQ_MASK_PAD 32
+
+    // q:    [n_embd, n_batch,     n_head,    1]
+    // k:    [n_embd, n_kv,        n_head_kv, 1]
+    // v:    [n_embd, n_kv,        n_head_kv, 1] !! not transposed !!
+    // mask: [n_kv,   n_batch_pad, 1,         1] !! n_batch_pad = GGML_PAD(n_batch, GGML_KQ_MASK_PAD) !!
+    // res:  [n_embd, n_head,      n_batch,   1] !! permuted !!
+    GGML_API struct ggml_tensor * ggml_flash_attn_ext(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * q,
+            struct ggml_tensor  * k,
+            struct ggml_tensor  * v,
+            struct ggml_tensor  * mask,
+            float                 scale,
+            float                 max_bias);
+
+    GGML_API void ggml_flash_attn_ext_set_prec(
+            struct ggml_tensor * a,
+            enum ggml_prec       prec);
+
+    // TODO: needs to be adapted to ggml_flash_attn_ext
+    GGML_API struct ggml_tensor * ggml_flash_attn_back(
+           struct ggml_context * ctx,
+           struct ggml_tensor  * q,
+           struct ggml_tensor  * k,
+           struct ggml_tensor  * v,
+           struct ggml_tensor  * d,
+           bool                  masked);
+
+    GGML_API struct ggml_tensor * ggml_ssm_conv(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * s,
+            struct ggml_tensor  * x,
+            struct ggml_tensor  * c,
+            struct ggml_tensor  * sq);
+
+    GGML_API struct ggml_tensor * ggml_ssm_scan(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * s,
+            struct ggml_tensor  * x,
+            struct ggml_tensor  * dt,
+            struct ggml_tensor  * A,
+            struct ggml_tensor  * B,
+            struct ggml_tensor  * C,
+            struct ggml_tensor  * sq);
+
+    // partition into non-overlapping windows with padding if needed
+    // example:
+    // a:   768   64   64    1
+    // w:    14
+    // res: 768   14   14    25
+    // used in sam
+    GGML_API struct ggml_tensor * ggml_win_part(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   w);
+
+    // reverse of ggml_win_part
+    // used in sam
+    GGML_API struct ggml_tensor * ggml_win_unpart(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   w0,
+            int                   h0,
+            int                   w);
+
+    GGML_API struct ggml_tensor * ggml_unary(
+            struct ggml_context * ctx,
+             struct ggml_tensor * a,
+             enum ggml_unary_op op);
+
+    GGML_API struct ggml_tensor * ggml_unary_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        enum ggml_unary_op op);
+
+    // used in sam
+    GGML_API struct ggml_tensor * ggml_get_rel_pos(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            int                   qh,
+            int                   kh);
+
+    // used in sam
+    GGML_API struct ggml_tensor * ggml_add_rel_pos(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * pw,
+            struct ggml_tensor  * ph);
+
+    GGML_API struct ggml_tensor * ggml_add_rel_pos_inplace(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * a,
+            struct ggml_tensor  * pw,
+            struct ggml_tensor  * ph);
+
+    // custom operators
+
+    typedef void (*ggml_unary_op_f32_t) (const int, float *, const float *);
+    typedef void (*ggml_binary_op_f32_t)(const int, float *, const float *, const float *);
+
+    typedef void (*ggml_custom1_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *);
+    typedef void (*ggml_custom2_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *);
+    typedef void (*ggml_custom3_op_f32_t)(struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *, const struct ggml_tensor *);
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_unary_f32(
+            struct ggml_context        * ctx,
+            struct ggml_tensor         * a,
+                   ggml_unary_op_f32_t   fun),
+        "use ggml_map_custom1 instead");
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_unary_inplace_f32(
+            struct ggml_context        * ctx,
+            struct ggml_tensor         * a,
+                   ggml_unary_op_f32_t   fun),
+        "use ggml_map_custom1_inplace instead");
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_binary_f32(
+            struct ggml_context         * ctx,
+            struct ggml_tensor          * a,
+            struct ggml_tensor          * b,
+                   ggml_binary_op_f32_t   fun),
+        "use ggml_map_custom2 instead");
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_binary_inplace_f32(
+            struct ggml_context         * ctx,
+            struct ggml_tensor          * a,
+            struct ggml_tensor          * b,
+                   ggml_binary_op_f32_t   fun),
+        "use ggml_map_custom2_inplace instead");
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom1_f32(
+            struct ggml_context          * ctx,
+            struct ggml_tensor           * a,
+                   ggml_custom1_op_f32_t   fun),
+        "use ggml_map_custom1 instead");
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom1_inplace_f32(
+            struct ggml_context          * ctx,
+            struct ggml_tensor           * a,
+                   ggml_custom1_op_f32_t   fun),
+        "use ggml_map_custom1_inplace instead");
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom2_f32(
+            struct ggml_context          * ctx,
+            struct ggml_tensor           * a,
+            struct ggml_tensor           * b,
+                   ggml_custom2_op_f32_t   fun),
+        "use ggml_map_custom2 instead");
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom2_inplace_f32(
+            struct ggml_context          * ctx,
+            struct ggml_tensor           * a,
+            struct ggml_tensor           * b,
+                   ggml_custom2_op_f32_t   fun),
+        "use ggml_map_custom2_inplace instead");
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom3_f32(
+            struct ggml_context          * ctx,
+            struct ggml_tensor           * a,
+            struct ggml_tensor           * b,
+            struct ggml_tensor           * c,
+                   ggml_custom3_op_f32_t   fun),
+        "use ggml_map_custom3 instead");
+
+    GGML_DEPRECATED(GGML_API struct ggml_tensor * ggml_map_custom3_inplace_f32(
+            struct ggml_context          * ctx,
+            struct ggml_tensor           * a,
+            struct ggml_tensor           * b,
+            struct ggml_tensor           * c,
+                   ggml_custom3_op_f32_t   fun),
+        "use ggml_map_custom3_inplace instead");
+
+    // custom operators v2
+
+    typedef void (*ggml_custom1_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, int ith, int nth, void * userdata);
+    typedef void (*ggml_custom2_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, int ith, int nth, void * userdata);
+    typedef void (*ggml_custom3_op_t)(struct ggml_tensor * dst , const struct ggml_tensor * a, const struct ggml_tensor * b, const struct ggml_tensor * c, int ith, int nth, void * userdata);
+
+    #define GGML_N_TASKS_MAX -1
+
+    GGML_API struct ggml_tensor * ggml_map_custom1(
+            struct ggml_context   * ctx,
+            struct ggml_tensor    * a,
+            ggml_custom1_op_t       fun,
+            int                     n_tasks,
+            void                  * userdata);
+
+    GGML_API struct ggml_tensor * ggml_map_custom1_inplace(
+            struct ggml_context   * ctx,
+            struct ggml_tensor    * a,
+            ggml_custom1_op_t       fun,
+            int                     n_tasks,
+            void                  * userdata);
+
+    GGML_API struct ggml_tensor * ggml_map_custom2(
+            struct ggml_context   * ctx,
+            struct ggml_tensor    * a,
+            struct ggml_tensor    * b,
+            ggml_custom2_op_t       fun,
+            int                     n_tasks,
+            void                  * userdata);
+
+    GGML_API struct ggml_tensor * ggml_map_custom2_inplace(
+            struct ggml_context   * ctx,
+            struct ggml_tensor    * a,
+            struct ggml_tensor    * b,
+            ggml_custom2_op_t       fun,
+            int                     n_tasks,
+            void                  * userdata);
+
+    GGML_API struct ggml_tensor * ggml_map_custom3(
+            struct ggml_context   * ctx,
+            struct ggml_tensor    * a,
+            struct ggml_tensor    * b,
+            struct ggml_tensor    * c,
+            ggml_custom3_op_t       fun,
+            int                     n_tasks,
+            void                  * userdata);
+
+    GGML_API struct ggml_tensor * ggml_map_custom3_inplace(
+            struct ggml_context   * ctx,
+            struct ggml_tensor    * a,
+            struct ggml_tensor    * b,
+            struct ggml_tensor    * c,
+            ggml_custom3_op_t       fun,
+            int                     n_tasks,
+            void                  * userdata);
+
+    // loss function
+
+    GGML_API struct ggml_tensor * ggml_cross_entropy_loss(
+            struct ggml_context         * ctx,
+            struct ggml_tensor          * a,
+            struct ggml_tensor          * b);
+
+    GGML_API struct ggml_tensor * ggml_cross_entropy_loss_back(
+            struct ggml_context         * ctx,
+            struct ggml_tensor          * a,
+            struct ggml_tensor          * b,
+            struct ggml_tensor          * c);
+
+    //
+    // automatic differentiation
+    //
+
+    GGML_API void ggml_set_param(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * tensor);
+
+
+    GGML_API void ggml_build_forward_expand (struct ggml_cgraph * cgraph, struct ggml_tensor * tensor);
+    GGML_API void ggml_build_backward_expand(struct ggml_context * ctx, struct ggml_cgraph * gf, struct ggml_cgraph * gb, bool keep);
+
+    // graph allocation in a context
+    GGML_API struct ggml_cgraph * ggml_new_graph         (struct ggml_context * ctx); // size = GGML_DEFAULT_GRAPH_SIZE, grads = false
+    GGML_API struct ggml_cgraph * ggml_new_graph_custom  (struct ggml_context * ctx, size_t size, bool grads);
+    GGML_API struct ggml_cgraph * ggml_graph_dup         (struct ggml_context * ctx, struct ggml_cgraph * cgraph);
+    GGML_API struct ggml_cgraph   ggml_graph_view        (struct ggml_cgraph * cgraph, int i0, int i1);
+    GGML_API void                 ggml_graph_cpy         (struct ggml_cgraph * src, struct ggml_cgraph * dst);
+    GGML_API void                 ggml_graph_reset       (struct ggml_cgraph * cgraph);  // zero grads
+    GGML_API void                 ggml_graph_clear       (struct ggml_cgraph * cgraph);
+
+    GGML_API size_t ggml_graph_overhead(void);
+    GGML_API size_t ggml_graph_overhead_custom(size_t size, bool grads);
+
+    // ggml_graph_plan() has to be called before ggml_graph_compute()
+    // when plan.work_size > 0, caller must allocate memory for plan.work_data
+    GGML_API struct ggml_cplan ggml_graph_plan            (const struct ggml_cgraph * cgraph, int n_threads /*= GGML_DEFAULT_N_THREADS*/);
+    GGML_API enum ggml_status  ggml_graph_compute         (      struct ggml_cgraph * cgraph, struct ggml_cplan * cplan);
+    // same as ggml_graph_compute() but the work data is allocated as a part of the context
+    // note: the drawback of this API is that you must have ensured that the context has enough memory for the work data
+    GGML_API enum ggml_status  ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads);
+
+    GGML_API struct ggml_tensor * ggml_graph_get_tensor(struct ggml_cgraph * cgraph, const char * name);
+
+    GGML_API void                 ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname);
+    GGML_API struct ggml_cgraph * ggml_graph_import(const char * fname, struct ggml_context ** ctx_data, struct ggml_context ** ctx_eval);
+
+    // print info and performance information for the graph
+    GGML_API void ggml_graph_print(const struct ggml_cgraph * cgraph);
+
+    // dump the graph into a file using the dot format
+    GGML_API void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename);
+
+    // build gradient checkpointing backward graph gb for gf using provided checkpoints
+    // gb_tmp will contain original backward graph with rewritten backward process nodes,
+    // but without the second forward pass nodes.
+    GGML_API void ggml_build_backward_gradient_checkpointing(
+            struct ggml_context   * ctx,
+            struct ggml_cgraph    * gf,
+            struct ggml_cgraph    * gb,
+            struct ggml_cgraph    * gb_tmp,
+            struct ggml_tensor  * * checkpoints,
+            int                     n_checkpoints);
+    //
+    // optimization
+    //
+
+    // optimization methods
+    enum ggml_opt_type {
+        GGML_OPT_TYPE_ADAM,
+        GGML_OPT_TYPE_LBFGS,
+    };
+
+    // linesearch methods
+    enum ggml_linesearch {
+        GGML_LINESEARCH_DEFAULT = 1,
+
+        GGML_LINESEARCH_BACKTRACKING_ARMIJO       = 0,
+        GGML_LINESEARCH_BACKTRACKING_WOLFE        = 1,
+        GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE = 2,
+    };
+
+    // optimization return values
+    enum ggml_opt_result {
+        GGML_OPT_RESULT_OK = 0,
+        GGML_OPT_RESULT_DID_NOT_CONVERGE,
+        GGML_OPT_RESULT_NO_CONTEXT,
+        GGML_OPT_RESULT_INVALID_WOLFE,
+        GGML_OPT_RESULT_FAIL,
+        GGML_OPT_RESULT_CANCEL,
+
+        GGML_LINESEARCH_FAIL = -128,
+        GGML_LINESEARCH_MINIMUM_STEP,
+        GGML_LINESEARCH_MAXIMUM_STEP,
+        GGML_LINESEARCH_MAXIMUM_ITERATIONS,
+        GGML_LINESEARCH_INVALID_PARAMETERS,
+    };
+
+    typedef void (*ggml_opt_callback)(void * data, int accum_step, float * sched, bool * cancel);
+    typedef void (*ggml_log_callback)(enum ggml_log_level level, const char * text, void * user_data);
+
+    // optimization parameters
+    //
+    //   see ggml.c (ggml_opt_default_params) for default values
+    //
+    struct ggml_opt_params {
+        enum ggml_opt_type type;
+
+        size_t graph_size;
+
+        int n_threads;
+
+        // delta-based convergence test
+        //
+        //   if past == 0 - disabled
+        //   if past > 0:
+        //     stop if |f(x) - f(x_past)| < delta * max(1, |f(x)|)
+        //
+        int past;
+        float delta;
+
+        // maximum number of iterations without improvement
+        //
+        //   if 0 - disabled
+        //   if > 0:
+        //     assume convergence if no cost improvement in this number of iterations
+        //
+        int max_no_improvement;
+
+        bool print_forward_graph;
+        bool print_backward_graph;
+
+        int n_gradient_accumulation;
+
+        // ADAM parameters
+        struct {
+            int n_iter;
+
+            float sched; // schedule multiplier (fixed, decay or warmup)
+            float decay; // weight decay for AdamW, use 0.0f to disable
+            int   decay_min_ndim; // minimum number of tensor dimension to apply weight decay
+            float alpha; // learning rate
+            float beta1;
+            float beta2;
+            float eps;   // epsilon for numerical stability
+            float eps_f; // epsilon for convergence test
+            float eps_g; // epsilon for convergence test
+            float gclip; // gradient clipping
+        } adam;
+
+        // LBFGS parameters
+        struct {
+            int m; // number of corrections to approximate the inv. Hessian
+            int n_iter;
+            int max_linesearch;
+
+            float eps;      // convergence tolerance
+            float ftol;     // line search tolerance
+            float wolfe;
+            float min_step;
+            float max_step;
+
+            enum ggml_linesearch linesearch;
+        } lbfgs;
+    };
+
+    struct ggml_opt_context {
+        struct ggml_context * ctx;
+        struct ggml_opt_params params;
+
+        int iter;
+        int64_t nx; // number of parameter elements
+
+        bool just_initialized;
+
+        float loss_before;
+        float loss_after;
+
+        struct {
+            struct ggml_tensor * g;  // current gradient
+            struct ggml_tensor * m;  // first moment
+            struct ggml_tensor * v;  // second moment
+            struct ggml_tensor * pf; // past function values
+            float fx_best;
+            float fx_prev;
+            int n_no_improvement;
+        } adam;
+
+        struct {
+            struct ggml_tensor * x;    // current parameters
+            struct ggml_tensor * xp;   // previous parameters
+            struct ggml_tensor * g;    // current gradient
+            struct ggml_tensor * gp;   // previous gradient
+            struct ggml_tensor * d;    // search direction
+            struct ggml_tensor * pf;   // past function values
+            struct ggml_tensor * lmal; // the L-BFGS memory alpha
+            struct ggml_tensor * lmys; // the L-BFGS memory ys
+            struct ggml_tensor * lms;  // the L-BFGS memory s
+            struct ggml_tensor * lmy;  // the L-BFGS memory y
+            float fx_best;
+            float step;
+            int j;
+            int k;
+            int end;
+            int n_no_improvement;
+        } lbfgs;
+    };
+
+    GGML_API struct ggml_opt_params ggml_opt_default_params(enum ggml_opt_type type);
+
+    // optimize the function defined by the tensor f
+    GGML_API enum ggml_opt_result ggml_opt(
+            struct ggml_context * ctx,
+            struct ggml_opt_params params,
+            struct ggml_tensor * f);
+
+    // initialize optimizer context
+    GGML_API void ggml_opt_init(
+            struct ggml_context     * ctx,
+            struct ggml_opt_context * opt,
+            struct ggml_opt_params    params,
+            int64_t                   nx);
+
+    // continue optimizing the function defined by the tensor f
+    GGML_API enum ggml_opt_result ggml_opt_resume(
+            struct ggml_context * ctx,
+            struct ggml_opt_context * opt,
+            struct ggml_tensor * f);
+
+    // continue optimizing the function defined by the tensor f
+    GGML_API enum ggml_opt_result ggml_opt_resume_g(
+            struct ggml_context * ctx,
+            struct ggml_opt_context * opt,
+            struct ggml_tensor * f,
+            struct ggml_cgraph * gf,
+            struct ggml_cgraph * gb,
+            ggml_opt_callback callback,
+            void * callback_data);
+
+    //
+    // tensor flags
+    //
+    GGML_API void ggml_set_input(struct ggml_tensor * tensor);
+    GGML_API void ggml_set_output(struct ggml_tensor * tensor);
+
+    //
+    // quantization
+    //
+
+    // - ggml_quantize_init can be called multiple times with the same type
+    //   it will only initialize the quantization tables for the first call or after ggml_quantize_free
+    //   automatically called by ggml_quantize_chunk for convenience
+    //
+    // - ggml_quantize_free will free any memory allocated by ggml_quantize_init
+    //   call this at the end of the program to avoid memory leaks
+    //
+    // note: these are thread-safe
+    //
+    GGML_API void ggml_quantize_init(enum ggml_type type);
+    GGML_API void ggml_quantize_free(void);
+
+    // some quantization type cannot be used without an importance matrix
+    GGML_API bool ggml_quantize_requires_imatrix(enum ggml_type type);
+
+    // calls ggml_quantize_init internally (i.e. can allocate memory)
+    GGML_API size_t ggml_quantize_chunk(
+            enum ggml_type   type,
+               const float * src,
+                      void * dst,
+                   int64_t   start,
+                   int64_t   nrows,
+                   int64_t   n_per_row,
+               const float * imatrix);
+
+    //
+    // gguf
+    //
+
+    enum gguf_type {
+        GGUF_TYPE_UINT8   = 0,
+        GGUF_TYPE_INT8    = 1,
+        GGUF_TYPE_UINT16  = 2,
+        GGUF_TYPE_INT16   = 3,
+        GGUF_TYPE_UINT32  = 4,
+        GGUF_TYPE_INT32   = 5,
+        GGUF_TYPE_FLOAT32 = 6,
+        GGUF_TYPE_BOOL    = 7,
+        GGUF_TYPE_STRING  = 8,
+        GGUF_TYPE_ARRAY   = 9,
+        GGUF_TYPE_UINT64  = 10,
+        GGUF_TYPE_INT64   = 11,
+        GGUF_TYPE_FLOAT64 = 12,
+        GGUF_TYPE_COUNT,       // marks the end of the enum
+    };
+
+    struct gguf_context;
+
+    struct gguf_init_params {
+        bool no_alloc;
+
+        // if not NULL, create a ggml_context and allocate the tensor data in it
+        struct ggml_context ** ctx;
+    };
+
+    GGML_API struct gguf_context * gguf_init_empty(void);
+    GGML_API struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params);
+    //GGML_API struct gguf_context * gguf_init_from_buffer(..);
+
+    GGML_API void gguf_free(struct gguf_context * ctx);
+
+    GGML_API const char * gguf_type_name(enum gguf_type type);
+
+    GGML_API int    gguf_get_version    (const struct gguf_context * ctx);
+    GGML_API size_t gguf_get_alignment  (const struct gguf_context * ctx);
+    GGML_API size_t gguf_get_data_offset(const struct gguf_context * ctx);
+    GGML_API void * gguf_get_data       (const struct gguf_context * ctx);
+
+    GGML_API int          gguf_get_n_kv(const struct gguf_context * ctx);
+    GGML_API int          gguf_find_key(const struct gguf_context * ctx, const char * key);
+    GGML_API const char * gguf_get_key (const struct gguf_context * ctx, int key_id);
+
+    GGML_API enum gguf_type gguf_get_kv_type (const struct gguf_context * ctx, int key_id);
+    GGML_API enum gguf_type gguf_get_arr_type(const struct gguf_context * ctx, int key_id);
+
+    // will abort if the wrong type is used for the key
+    GGML_API uint8_t      gguf_get_val_u8  (const struct gguf_context * ctx, int key_id);
+    GGML_API int8_t       gguf_get_val_i8  (const struct gguf_context * ctx, int key_id);
+    GGML_API uint16_t     gguf_get_val_u16 (const struct gguf_context * ctx, int key_id);
+    GGML_API int16_t      gguf_get_val_i16 (const struct gguf_context * ctx, int key_id);
+    GGML_API uint32_t     gguf_get_val_u32 (const struct gguf_context * ctx, int key_id);
+    GGML_API int32_t      gguf_get_val_i32 (const struct gguf_context * ctx, int key_id);
+    GGML_API float        gguf_get_val_f32 (const struct gguf_context * ctx, int key_id);
+    GGML_API uint64_t     gguf_get_val_u64 (const struct gguf_context * ctx, int key_id);
+    GGML_API int64_t      gguf_get_val_i64 (const struct gguf_context * ctx, int key_id);
+    GGML_API double       gguf_get_val_f64 (const struct gguf_context * ctx, int key_id);
+    GGML_API bool         gguf_get_val_bool(const struct gguf_context * ctx, int key_id);
+    GGML_API const char * gguf_get_val_str (const struct gguf_context * ctx, int key_id);
+    GGML_API const void * gguf_get_val_data(const struct gguf_context * ctx, int key_id);
+    GGML_API int          gguf_get_arr_n   (const struct gguf_context * ctx, int key_id);
+    GGML_API const void * gguf_get_arr_data(const struct gguf_context * ctx, int key_id);
+    GGML_API const char * gguf_get_arr_str (const struct gguf_context * ctx, int key_id, int i);
+
+    GGML_API int            gguf_get_n_tensors    (const struct gguf_context * ctx);
+    GGML_API int            gguf_find_tensor      (const struct gguf_context * ctx, const char * name);
+    GGML_API size_t         gguf_get_tensor_offset(const struct gguf_context * ctx, int i);
+    GGML_API char *         gguf_get_tensor_name  (const struct gguf_context * ctx, int i);
+    GGML_API enum ggml_type gguf_get_tensor_type  (const struct gguf_context * ctx, int i);
+
+    // removes key if it exists
+    GGML_API void gguf_remove_key(struct gguf_context * ctx, const char * key);
+
+    // overrides existing values or adds a new one
+    GGML_API void gguf_set_val_u8  (struct gguf_context * ctx, const char * key, uint8_t  val);
+    GGML_API void gguf_set_val_i8  (struct gguf_context * ctx, const char * key, int8_t   val);
+    GGML_API void gguf_set_val_u16 (struct gguf_context * ctx, const char * key, uint16_t val);
+    GGML_API void gguf_set_val_i16 (struct gguf_context * ctx, const char * key, int16_t  val);
+    GGML_API void gguf_set_val_u32 (struct gguf_context * ctx, const char * key, uint32_t val);
+    GGML_API void gguf_set_val_i32 (struct gguf_context * ctx, const char * key, int32_t  val);
+    GGML_API void gguf_set_val_f32 (struct gguf_context * ctx, const char * key, float    val);
+    GGML_API void gguf_set_val_u64 (struct gguf_context * ctx, const char * key, uint64_t val);
+    GGML_API void gguf_set_val_i64 (struct gguf_context * ctx, const char * key, int64_t  val);
+    GGML_API void gguf_set_val_f64 (struct gguf_context * ctx, const char * key, double   val);
+    GGML_API void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool     val);
+    GGML_API void gguf_set_val_str (struct gguf_context * ctx, const char * key, const char * val);
+    GGML_API void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, int n);
+    GGML_API void gguf_set_arr_str (struct gguf_context * ctx, const char * key, const char ** data, int n);
+
+    // set or add KV pairs from another context
+    GGML_API void gguf_set_kv(struct gguf_context * ctx, struct gguf_context * src);
+
+    // manage tensor info
+    GGML_API void gguf_add_tensor(struct gguf_context * ctx, const struct ggml_tensor * tensor);
+    GGML_API void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type);
+    GGML_API void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data, size_t size);
+
+    // writing gguf files can be done in 2 ways:
+    //
+    // - write the entire gguf_context to a binary file in a single pass:
+    //
+    //   gguf_write_to_file(ctx, fname);
+    //
+    // - first prepare a file with a placeholder for the meta data, write the tensor data, then write the meta data:
+    //
+    //   FILE * f = fopen(fname, "wb");
+    //   fseek(f, gguf_get_meta_size(ctx), SEEK_SET);
+    //   fwrite(f, ...);
+    //   void * data = gguf_meta_get_meta_data(ctx);
+    //   fseek(f, 0, SEEK_SET);
+    //   fwrite(f, data, gguf_get_meta_size(ctx));
+    //   free(data);
+    //   fclose(f);
+    //
+
+    // write the entire context to a binary file
+    GGML_API void gguf_write_to_file(const struct gguf_context * ctx, const char * fname, bool only_meta);
+
+    // get the size in bytes of the meta data (header, kv pairs, tensor info) including padding
+    GGML_API size_t gguf_get_meta_size(const struct gguf_context * ctx);
+    GGML_API void   gguf_get_meta_data(const struct gguf_context * ctx, void * data);
+
+    //
+    // system info
+    //
+
+    GGML_API int ggml_cpu_has_avx        (void);
+    GGML_API int ggml_cpu_has_avx_vnni   (void);
+    GGML_API int ggml_cpu_has_avx2       (void);
+    GGML_API int ggml_cpu_has_avx512     (void);
+    GGML_API int ggml_cpu_has_avx512_vbmi(void);
+    GGML_API int ggml_cpu_has_avx512_vnni(void);
+    GGML_API int ggml_cpu_has_avx512_bf16(void);
+    GGML_API int ggml_cpu_has_fma        (void);
+    GGML_API int ggml_cpu_has_neon       (void);
+    GGML_API int ggml_cpu_has_sve        (void);
+    GGML_API int ggml_cpu_has_arm_fma    (void);
+    GGML_API int ggml_cpu_has_metal      (void);
+    GGML_API int ggml_cpu_has_f16c       (void);
+    GGML_API int ggml_cpu_has_fp16_va    (void);
+    GGML_API int ggml_cpu_has_wasm_simd  (void);
+    GGML_API int ggml_cpu_has_blas       (void);
+    GGML_API int ggml_cpu_has_cuda       (void);
+    GGML_API int ggml_cpu_has_vulkan     (void);
+    GGML_API int ggml_cpu_has_kompute    (void);
+    GGML_API int ggml_cpu_has_gpublas    (void);
+    GGML_API int ggml_cpu_has_sse3       (void);
+    GGML_API int ggml_cpu_has_ssse3      (void);
+    GGML_API int ggml_cpu_has_sycl       (void);
+    GGML_API int ggml_cpu_has_rpc        (void);
+    GGML_API int ggml_cpu_has_vsx        (void);
+    GGML_API int ggml_cpu_has_matmul_int8(void);
+
+    //
+    // Internal types and functions exposed for tests and benchmarks
+    //
+
+#ifdef  __cplusplus
+// restrict not standard in C++
+#define GGML_RESTRICT
+#else
+#define GGML_RESTRICT restrict
+#endif
+    typedef void (*ggml_to_float_t)  (const void  * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+    typedef void (*ggml_from_float_t)(const float * GGML_RESTRICT x, void  * GGML_RESTRICT y, int64_t k);
+    typedef void (*ggml_vec_dot_t)   (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT x, size_t bx,
+                                      const void * GGML_RESTRICT y, size_t by, int nrc);
+
+    typedef struct {
+        const char      * type_name;
+        int               blck_size;
+        size_t            type_size;
+        bool              is_quantized;
+        ggml_to_float_t   to_float;
+        ggml_from_float_t from_float;
+        ggml_from_float_t from_float_reference;
+        ggml_vec_dot_t    vec_dot;
+        enum ggml_type    vec_dot_type;
+        int64_t           nrows; // number of rows to process simultaneously;
+    } ggml_type_traits_t;
+
+    GGML_API ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type);
+
+#ifdef  __cplusplus
+}
+#endif
diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt
new file mode 100644 (file)
index 0000000..ba341d3
--- /dev/null
@@ -0,0 +1,1171 @@
+include(CheckCXXCompilerFlag)
+
+unset(GGML_CDEF_PUBLIC)
+
+add_compile_definitions(GGML_SCHED_MAX_COPIES=${GGML_SCHED_MAX_COPIES})
+
+# enable libstdc++ assertions for debug builds
+if (CMAKE_SYSTEM_NAME MATCHES "Linux")
+    add_compile_definitions($<$<CONFIG:Debug>:_GLIBCXX_ASSERTIONS>)
+endif()
+
+if (NOT MSVC)
+    if (GGML_SANITIZE_THREAD)
+        add_compile_options(-fsanitize=thread)
+        link_libraries     (-fsanitize=thread)
+    endif()
+
+    if (GGML_SANITIZE_ADDRESS)
+        add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
+        link_libraries     (-fsanitize=address)
+    endif()
+
+    if (GGML_SANITIZE_UNDEFINED)
+        add_compile_options(-fsanitize=undefined)
+        link_libraries     (-fsanitize=undefined)
+    endif()
+endif()
+
+if (APPLE AND GGML_ACCELERATE)
+    find_library(ACCELERATE_FRAMEWORK Accelerate)
+    if (ACCELERATE_FRAMEWORK)
+        message(STATUS "Accelerate framework found")
+
+        add_compile_definitions(GGML_USE_ACCELERATE)
+        add_compile_definitions(ACCELERATE_NEW_LAPACK)
+        add_compile_definitions(ACCELERATE_LAPACK_ILP64)
+
+        set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ${ACCELERATE_FRAMEWORK})
+    else()
+        message(WARNING "Accelerate framework not found")
+    endif()
+endif()
+
+if (GGML_METAL)
+    find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
+    find_library(METAL_FRAMEWORK    Metal      REQUIRED)
+    find_library(METALKIT_FRAMEWORK MetalKit   REQUIRED)
+
+    message(STATUS "Metal framework found")
+    set(GGML_HEADERS_METAL ../include/ggml-metal.h)
+    set(GGML_SOURCES_METAL ggml-metal.m)
+
+    list(APPEND GGML_CDEF_PUBLIC GGML_USE_METAL)
+    if (GGML_METAL_NDEBUG)
+        add_compile_definitions(GGML_METAL_NDEBUG)
+    endif()
+
+    # copy ggml-common.h and ggml-metal.metal to bin directory
+    configure_file(ggml-common.h    ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-common.h    COPYONLY)
+    configure_file(ggml-metal.metal ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-metal.metal COPYONLY)
+
+    if (GGML_METAL_EMBED_LIBRARY)
+        enable_language(ASM)
+
+        add_compile_definitions(GGML_METAL_EMBED_LIBRARY)
+
+        set(METALLIB_COMMON "${CMAKE_CURRENT_SOURCE_DIR}/ggml-common.h")
+        set(METALLIB_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/ggml-metal.metal")
+
+        file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/autogenerated")
+
+        # merge ggml-common.h and ggml-metal.metal into a single file
+        set(METALLIB_EMBED_ASM    "${CMAKE_BINARY_DIR}/autogenerated/ggml-metal-embed.s")
+        set(METALLIB_SOURCE_EMBED "${CMAKE_BINARY_DIR}/autogenerated/ggml-metal-embed.metal")
+
+        add_custom_command(
+            OUTPUT ${METALLIB_EMBED_ASM}
+            COMMAND echo "Embedding Metal library"
+            COMMAND sed -e '/\#include \"ggml-common.h\"/r ${METALLIB_COMMON}' -e '/\#include \"ggml-common.h\"/d' < ${METALLIB_SOURCE} > ${METALLIB_SOURCE_EMBED}
+            COMMAND echo ".section __DATA,__ggml_metallib"          >  ${METALLIB_EMBED_ASM}
+            COMMAND echo ".globl _ggml_metallib_start"              >> ${METALLIB_EMBED_ASM}
+            COMMAND echo "_ggml_metallib_start:"                    >> ${METALLIB_EMBED_ASM}
+            COMMAND echo ".incbin \\\"${METALLIB_SOURCE_EMBED}\\\"" >> ${METALLIB_EMBED_ASM}
+            COMMAND echo ".globl _ggml_metallib_end"                >> ${METALLIB_EMBED_ASM}
+            COMMAND echo "_ggml_metallib_end:"                      >> ${METALLIB_EMBED_ASM}
+            DEPENDS ggml-metal.metal ggml-common.h
+            COMMENT "Generate assembly for embedded Metal library"
+        )
+
+        set(GGML_SOURCES_METAL ${GGML_SOURCES_METAL} ${METALLIB_EMBED_ASM})
+    else()
+        if (GGML_METAL_SHADER_DEBUG)
+            # custom command to do the following:
+            #   xcrun -sdk macosx metal    -fno-fast-math -c ggml-metal.metal -o ggml-metal.air
+            #   xcrun -sdk macosx metallib                   ggml-metal.air   -o default.metallib
+            #
+            # note: this is the only way I found to disable fast-math in Metal. it's ugly, but at least it works
+            #       disabling fast math is needed in order to pass tests/test-backend-ops
+            # note: adding -fno-inline fixes the tests when using MTL_SHADER_VALIDATION=1
+            # note: unfortunately, we have to call it default.metallib instead of ggml.metallib
+            #       ref: https://github.com/ggerganov/whisper.cpp/issues/1720
+            set(XC_FLAGS -fno-fast-math -fno-inline -g)
+        else()
+            set(XC_FLAGS -O3)
+        endif()
+
+        # Append macOS metal versioning flags
+        if (GGML_METAL_MACOSX_VERSION_MIN)
+            message(STATUS "Adding  -mmacosx-version-min=${GGML_METAL_MACOSX_VERSION_MIN} flag to metal compilation")
+            list   (APPEND XC_FLAGS -mmacosx-version-min=${GGML_METAL_MACOSX_VERSION_MIN})
+        endif()
+
+        if (GGML_METAL_STD)
+            message(STATUS "Adding  -std=${GGML_METAL_STD} flag to metal compilation")
+            list   (APPEND XC_FLAGS -std=${GGML_METAL_STD})
+        endif()
+
+        add_custom_command(
+            OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/default.metallib
+            COMMAND xcrun -sdk macosx metal    ${XC_FLAGS} -c ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-metal.metal -o ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-metal.air
+            COMMAND xcrun -sdk macosx metallib                ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-metal.air   -o ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/default.metallib
+            COMMAND rm -f ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-metal.air
+            COMMAND rm -f ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-common.h
+            COMMAND rm -f ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ggml-metal.metal
+            DEPENDS ggml-metal.metal ggml-common.h
+            COMMENT "Compiling Metal kernels"
+            )
+
+        add_custom_target(
+            ggml-metal ALL
+            DEPENDS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/default.metallib
+            )
+    endif() # GGML_METAL_EMBED_LIBRARY
+
+    set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS}
+        ${FOUNDATION_LIBRARY}
+        ${METAL_FRAMEWORK}
+        ${METALKIT_FRAMEWORK}
+        )
+endif()
+
+if (GGML_OPENMP)
+    find_package(OpenMP)
+    if (OpenMP_FOUND)
+        message(STATUS "OpenMP found")
+
+        add_compile_definitions(GGML_USE_OPENMP)
+
+        set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
+    else()
+        message(WARNING "OpenMP not found")
+    endif()
+endif()
+
+if (GGML_BLAS)
+    if (GGML_STATIC)
+        set(BLA_STATIC ON)
+    endif()
+    #if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.22)
+    #    set(BLA_SIZEOF_INTEGER 8)
+    #endif()
+
+    set(BLA_VENDOR ${GGML_BLAS_VENDOR})
+    find_package(BLAS)
+
+    if (BLAS_FOUND)
+        message(STATUS "BLAS found, Libraries: ${BLAS_LIBRARIES}")
+
+        if (("${BLAS_INCLUDE_DIRS}" STREQUAL "") AND NOT (${GGML_BLAS_VENDOR} MATCHES "Apple"))
+            # BLAS_INCLUDE_DIRS is missing in FindBLAS.cmake.
+            # see https://gitlab.kitware.com/cmake/cmake/-/issues/20268
+            find_package(PkgConfig REQUIRED)
+            if (${GGML_BLAS_VENDOR} MATCHES "Generic")
+                pkg_check_modules(DepBLAS REQUIRED blas)
+            elseif (${GGML_BLAS_VENDOR} MATCHES "OpenBLAS")
+                # As of openblas v0.3.22, the 64-bit is named openblas64.pc
+                pkg_check_modules(DepBLAS openblas64)
+                if (NOT DepBLAS_FOUND)
+                    pkg_check_modules(DepBLAS REQUIRED openblas)
+                endif()
+            elseif (${GGML_BLAS_VENDOR} MATCHES "FLAME")
+                pkg_check_modules(DepBLAS REQUIRED blis)
+            elseif (${GGML_BLAS_VENDOR} MATCHES "ATLAS")
+                pkg_check_modules(DepBLAS REQUIRED blas-atlas)
+            elseif (${GGML_BLAS_VENDOR} MATCHES "FlexiBLAS")
+                pkg_check_modules(DepBLAS REQUIRED flexiblas_api)
+            elseif (${GGML_BLAS_VENDOR} MATCHES "Intel")
+                # all Intel* libraries share the same include path
+                pkg_check_modules(DepBLAS REQUIRED mkl-sdl)
+            elseif (${GGML_BLAS_VENDOR} MATCHES "NVHPC")
+                # this doesn't provide pkg-config
+                # suggest to assign BLAS_INCLUDE_DIRS on your own
+                if ("${NVHPC_VERSION}" STREQUAL "")
+                    message(WARNING "Better to set NVHPC_VERSION")
+                else()
+                    set(DepBLAS_FOUND ON)
+                    set(DepBLAS_INCLUDE_DIRS "/opt/nvidia/hpc_sdk/${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}/${NVHPC_VERSION}/math_libs/include")
+                endif()
+            endif()
+            if (DepBLAS_FOUND)
+                set(BLAS_INCLUDE_DIRS ${DepBLAS_INCLUDE_DIRS})
+            else()
+                message(WARNING "BLAS_INCLUDE_DIRS neither been provided nor been automatically"
+                " detected by pkgconfig, trying to find cblas.h from possible paths...")
+                find_path(BLAS_INCLUDE_DIRS
+                    NAMES cblas.h
+                    HINTS
+                        /usr/include
+                        /usr/local/include
+                        /usr/include/openblas
+                        /opt/homebrew/opt/openblas/include
+                        /usr/local/opt/openblas/include
+                        /usr/include/x86_64-linux-gnu/openblas/include
+                )
+            endif()
+        endif()
+
+        message(STATUS "BLAS found, Includes: ${BLAS_INCLUDE_DIRS}")
+
+        add_compile_options(${BLAS_LINKER_FLAGS})
+
+        list(APPEND GGML_CDEF_PUBLIC GGML_USE_BLAS)
+
+        if (${BLAS_INCLUDE_DIRS} MATCHES "mkl" AND (${GGML_BLAS_VENDOR} MATCHES "Generic" OR ${GGML_BLAS_VENDOR} MATCHES "Intel"))
+            add_compile_definitions(GGML_BLAS_USE_MKL)
+        endif()
+
+        set(GGML_HEADERS_BLAS ../include/ggml-blas.h)
+        set(GGML_SOURCES_BLAS ggml-blas.cpp)
+
+        set(GGML_EXTRA_LIBS     ${GGML_EXTRA_LIBS}     ${BLAS_LIBRARIES})
+        set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} ${BLAS_INCLUDE_DIRS})
+    else()
+        message(WARNING "BLAS not found, please refer to "
+        "https://cmake.org/cmake/help/latest/module/FindBLAS.html#blas-lapack-vendors"
+        " to set correct GGML_BLAS_VENDOR")
+    endif()
+endif()
+
+if (GGML_LLAMAFILE)
+    message(STATUS "Using ggml SGEMM")
+
+    add_compile_definitions(GGML_USE_LLAMAFILE)
+
+    set(GGML_HEADERS_LLAMAFILE sgemm.h)
+    set(GGML_SOURCES_LLAMAFILE sgemm.cpp)
+endif()
+
+if (GGML_CUDA)
+    cmake_minimum_required(VERSION 3.18)  # for CMAKE_CUDA_ARCHITECTURES
+
+    find_package(CUDAToolkit)
+
+    if (CUDAToolkit_FOUND)
+        message(STATUS "CUDA found")
+
+        if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
+            # 52 == lowest CUDA 12 standard
+            # 60 == FP16 CUDA intrinsics
+            # 61 == integer CUDA intrinsics
+            # 70 == compute capability at which unrolling a loop in mul_mat_q kernels is faster
+            if (GGML_CUDA_F16 OR GGML_CUDA_DMMV_F16)
+                set(CMAKE_CUDA_ARCHITECTURES "60;61;70;75")
+            else()
+                set(CMAKE_CUDA_ARCHITECTURES "52;61;70;75")
+                #set(CMAKE_CUDA_ARCHITECTURES "OFF") # use this to compile much faster, but only F16 models work
+            endif()
+        endif()
+        message(STATUS "Using CUDA architectures: ${CMAKE_CUDA_ARCHITECTURES}")
+
+        enable_language(CUDA)
+
+        file(GLOB   GGML_HEADERS_CUDA "ggml-cuda/*.cuh")
+        list(APPEND GGML_HEADERS_CUDA "../include/ggml-cuda.h")
+
+        file(GLOB   GGML_SOURCES_CUDA "ggml-cuda/*.cu")
+        list(APPEND GGML_SOURCES_CUDA "ggml-cuda.cu")
+        file(GLOB   SRCS "ggml-cuda/template-instances/fattn-wmma*.cu")
+        list(APPEND GGML_SOURCES_CUDA ${SRCS})
+        file(GLOB   SRCS "ggml-cuda/template-instances/mmq*.cu")
+        list(APPEND GGML_SOURCES_CUDA ${SRCS})
+
+        if (GGML_CUDA_FA_ALL_QUANTS)
+            file(GLOB   SRCS "ggml-cuda/template-instances/fattn-vec*.cu")
+            list(APPEND GGML_SOURCES_CUDA ${SRCS})
+            add_compile_definitions(GGML_CUDA_FA_ALL_QUANTS)
+        else()
+            file(GLOB   SRCS "ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu")
+            list(APPEND GGML_SOURCES_CUDA ${SRCS})
+            file(GLOB   SRCS "ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu")
+            list(APPEND GGML_SOURCES_CUDA ${SRCS})
+            file(GLOB   SRCS "ggml-cuda/template-instances/fattn-vec*f16-f16.cu")
+            list(APPEND GGML_SOURCES_CUDA ${SRCS})
+        endif()
+
+        list(APPEND GGML_CDEF_PUBLIC GGML_USE_CUDA)
+
+        add_compile_definitions(GGML_CUDA_USE_GRAPHS)
+        add_compile_definitions(GGML_CUDA_DMMV_X=${GGML_CUDA_DMMV_X})
+        add_compile_definitions(GGML_CUDA_MMV_Y=${GGML_CUDA_MMV_Y})
+        add_compile_definitions(K_QUANTS_PER_ITERATION=${GGML_CUDA_KQUANTS_ITER})
+        add_compile_definitions(GGML_CUDA_PEER_MAX_BATCH_SIZE=${GGML_CUDA_PEER_MAX_BATCH_SIZE})
+
+        if (GGML_CUDA_FORCE_DMMV)
+            add_compile_definitions(GGML_CUDA_FORCE_DMMV)
+        endif()
+
+        if (GGML_CUDA_FORCE_MMQ)
+            add_compile_definitions(GGML_CUDA_FORCE_MMQ)
+        endif()
+
+        if (GGML_CUDA_FORCE_CUBLAS)
+            add_compile_definitions(GGML_CUDA_FORCE_CUBLAS)
+        endif()
+
+        if (GGML_CUDA_NO_VMM)
+            add_compile_definitions(GGML_CUDA_NO_VMM)
+        endif()
+
+        if (DEFINED GGML_CUDA_DMMV_Y)
+            add_compile_definitions(GGML_CUDA_MMV_Y=${GGML_CUDA_DMMV_Y}) # for backwards compatibility
+        endif()
+
+        if (GGML_CUDA_F16 OR GGML_CUDA_DMMV_F16)
+            add_compile_definitions(GGML_CUDA_F16)
+        endif()
+
+        if (GGML_CUDA_NO_PEER_COPY)
+            add_compile_definitions(GGML_CUDA_NO_PEER_COPY)
+        endif()
+
+        if (GGML_STATIC)
+            if (WIN32)
+                # As of 12.3.1 CUDA Toolkit for Windows does not offer a static cublas library
+                set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas CUDA::cublasLt)
+            else ()
+                set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static)
+            endif()
+        else()
+            set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart CUDA::cublas CUDA::cublasLt)
+        endif()
+
+        if (GGML_CUDA_NO_VMM)
+            # No VMM requested, no need to link directly with the cuda driver lib (libcuda.so)
+        else()
+            set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cuda_driver) # required by cuDeviceGetAttribute(), cuMemGetAllocationGranularity(...), ...
+        endif()
+    else()
+        message(WARNING "CUDA not found")
+    endif()
+endif()
+
+if (GGML_HIPBLAS)
+    if (NOT EXISTS $ENV{ROCM_PATH})
+        if (NOT EXISTS /opt/rocm)
+            set(ROCM_PATH /usr)
+        else()
+            set(ROCM_PATH /opt/rocm)
+        endif()
+    else()
+        set(ROCM_PATH $ENV{ROCM_PATH})
+    endif()
+
+    list(APPEND CMAKE_PREFIX_PATH  ${ROCM_PATH})
+    list(APPEND CMAKE_PREFIX_PATH "${ROCM_PATH}/lib64/cmake")
+
+    # CMake on Windows doesn't support the HIP language yet
+    if (WIN32)
+        set(CXX_IS_HIPCC TRUE)
+    else()
+        string(REGEX MATCH "hipcc(\.bat)?$" CXX_IS_HIPCC "${CMAKE_CXX_COMPILER}")
+    endif()
+
+    if (CXX_IS_HIPCC)
+        if (LINUX)
+            if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
+                message(WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++")
+            endif()
+
+            message(WARNING "Setting hipcc as the C++ compiler is legacy behavior."
+                    " Prefer setting the HIP compiler directly. See README for details.")
+        endif()
+    else()
+        # Forward AMDGPU_TARGETS to CMAKE_HIP_ARCHITECTURES.
+        if (AMDGPU_TARGETS AND NOT CMAKE_HIP_ARCHITECTURES)
+            set(CMAKE_HIP_ARCHITECTURES ${AMDGPU_TARGETS})
+        endif()
+        cmake_minimum_required(VERSION 3.21)
+        enable_language(HIP)
+    endif()
+
+    find_package(hip     REQUIRED)
+    find_package(hipblas REQUIRED)
+    find_package(rocblas REQUIRED)
+
+    message(STATUS "HIP and hipBLAS found")
+
+    file(GLOB   GGML_HEADERS_ROCM "ggml-cuda/*.cuh")
+    list(APPEND GGML_HEADERS_ROCM "../include/ggml-cuda.h")
+
+    file(GLOB   GGML_SOURCES_ROCM "ggml-cuda/*.cu")
+    list(APPEND GGML_SOURCES_ROCM "ggml-cuda.cu")
+    file(GLOB   SRCS "ggml-cuda/template-instances/fattn-wmma*.cu")
+    list(APPEND GGML_SOURCES_ROCM ${SRCS})
+    file(GLOB   SRCS "ggml-cuda/template-instances/mmq*.cu")
+    list(APPEND GGML_SOURCES_ROCM ${SRCS})
+
+    if (GGML_CUDA_FA_ALL_QUANTS)
+        file(GLOB   SRCS "ggml-cuda/template-instances/fattn-vec*.cu")
+        list(APPEND GGML_SOURCES_ROCM ${SRCS})
+        add_compile_definitions(GGML_CUDA_FA_ALL_QUANTS)
+    else()
+        file(GLOB   SRCS "ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu")
+        list(APPEND GGML_SOURCES_ROCM ${SRCS})
+        file(GLOB   SRCS "ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu")
+        list(APPEND GGML_SOURCES_ROCM ${SRCS})
+        file(GLOB   SRCS "ggml-cuda/template-instances/fattn-vec*f16-f16.cu")
+        list(APPEND GGML_SOURCES_ROCM ${SRCS})
+    endif()
+
+    list(APPEND GGML_CDEF_PUBLIC GGML_USE_CUDA)
+
+    add_compile_definitions(GGML_USE_HIPBLAS)
+    add_compile_definitions(GGML_CUDA_DMMV_X=${GGML_CUDA_DMMV_X})
+    add_compile_definitions(GGML_CUDA_MMV_Y=${GGML_CUDA_MMV_Y})
+    add_compile_definitions(K_QUANTS_PER_ITERATION=${GGML_CUDA_KQUANTS_ITER})
+
+    if (GGML_HIP_UMA)
+        add_compile_definitions(GGML_HIP_UMA)
+    endif()
+
+    if (GGML_CUDA_FORCE_DMMV)
+        add_compile_definitions(GGML_CUDA_FORCE_DMMV)
+    endif()
+
+    if (GGML_CUDA_FORCE_MMQ)
+        add_compile_definitions(GGML_CUDA_FORCE_MMQ)
+    endif()
+
+    if (GGML_CUDA_NO_PEER_COPY)
+        add_compile_definitions(GGML_CUDA_NO_PEER_COPY)
+    endif()
+
+    if (CXX_IS_HIPCC)
+        set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE CXX)
+        set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} hip::device)
+    else()
+        set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE HIP)
+    endif()
+
+    if (GGML_STATIC)
+        message(FATAL_ERROR "Static linking not supported for HIP/ROCm")
+    endif()
+
+    set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} PUBLIC hip::host roc::rocblas roc::hipblas)
+endif()
+
+if (GGML_SYCL)
+    if (NOT GGML_SYCL_TARGET MATCHES "^(INTEL|NVIDIA)$")
+        message(FATAL_ERROR "Invalid backend chosen, supported options are INTEL or NVIDIA")
+    endif()
+
+    if ( NOT DEFINED ENV{ONEAPI_ROOT})
+        message(FATAL_ERROR "Not detect ENV {ONEAPI_ROOT}, please install oneAPI & source it, like: source /opt/intel/oneapi/setvars.sh")
+    endif()
+    #todo: AOT
+
+    find_package(IntelSYCL REQUIRED)
+    find_package(MKL REQUIRED)
+
+    message(STATUS "SYCL found")
+
+    list(APPEND GGML_CDEF_PUBLIC GGML_USE_SYCL)
+
+    if (GGML_SYCL_F16)
+        add_compile_definitions(GGML_SYCL_F16)
+    endif()
+
+    if (GGML_CUDA_FORCE_MMQ)
+        add_compile_definitions(GGML_SYCL_FORCE_MMQ)
+    endif()
+
+    add_compile_options(-I./) #include DPCT
+
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
+    if (GGML_SYCL_TARGET STREQUAL "NVIDIA")
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl-targets=nvptx64-nvidia-cuda")
+    endif()
+
+    file(GLOB   GGML_HEADERS_SYCL "ggml-sycl/*.hpp")
+    list(APPEND GGML_HEADERS_SYCL "../include/ggml-sycl.h")
+
+    file(GLOB   GGML_SOURCES_SYCL "ggml-sycl/*.cpp")
+    list(APPEND GGML_SOURCES_SYCL "ggml-sycl.cpp")
+
+    if (WIN32)
+        set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL)
+    else()
+        add_compile_options(-I/${SYCL_INCLUDE_DIR})
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl -L${MKLROOT}/lib")
+
+        if (GGML_SYCL_TARGET STREQUAL "INTEL")
+            set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} -fsycl OpenCL mkl_core pthread m dl mkl_sycl_blas mkl_intel_ilp64 mkl_tbb_thread)
+        elseif (GGML_SYCL_TARGET STREQUAL "NVIDIA")
+            set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} -fsycl pthread m dl onemkl)
+        endif()
+    endif()
+endif()
+
+if (GGML_RPC)
+    message(STATUS "RPC found")
+
+    list(APPEND GGML_CDEF_PUBLIC GGML_USE_RPC)
+
+    if (WIN32)
+        set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ws2_32)
+    endif()
+
+    set(GGML_HEADERS_RPC ../include/ggml-rpc.h)
+    set(GGML_SOURCES_RPC ggml-rpc.cpp)
+endif()
+
+if (GGML_VULKAN)
+    find_package(Vulkan)
+
+    if (Vulkan_FOUND)
+        message(STATUS "Vulkan found")
+
+        set(GGML_HEADERS_VULKAN ../include/ggml-vulkan.h)
+        set(GGML_SOURCES_VULKAN ggml-vulkan.cpp)
+
+        list(APPEND GGML_CDEF_PUBLIC GGML_USE_VULKAN)
+
+        # Workaround to the "can't dereference invalidated vector iterator" bug in clang-cl debug build
+        # Posssibly relevant: https://stackoverflow.com/questions/74748276/visual-studio-no-displays-the-correct-length-of-stdvector
+        if (MSVC AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+            add_compile_definitions(_ITERATOR_DEBUG_LEVEL=0)
+        endif()
+
+        if (GGML_VULKAN_CHECK_RESULTS)
+            add_compile_definitions(GGML_VULKAN_CHECK_RESULTS)
+        endif()
+
+        if (GGML_VULKAN_DEBUG)
+            add_compile_definitions(GGML_VULKAN_DEBUG)
+        endif()
+
+        if (GGML_VULKAN_MEMORY_DEBUG)
+            add_compile_definitions(GGML_VULKAN_MEMORY_DEBUG)
+        endif()
+
+        if (GGML_VULKAN_VALIDATE)
+            add_compile_definitions(GGML_VULKAN_VALIDATE)
+        endif()
+
+        if (GGML_VULKAN_RUN_TESTS)
+            add_compile_definitions(GGML_VULKAN_RUN_TESTS)
+        endif()
+
+        set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} Vulkan::Vulkan)
+    else()
+        message(WARNING "Vulkan not found")
+    endif()
+endif()
+
+if (GGML_KOMPUTE)
+    add_compile_definitions(VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1)
+
+    find_package(Vulkan COMPONENTS glslc REQUIRED)
+    find_program(glslc_executable NAMES glslc HINTS Vulkan::glslc)
+
+    if (NOT glslc_executable)
+        message(FATAL_ERROR "glslc not found")
+    endif()
+
+    function(compile_shader)
+        set(options)
+        set(oneValueArgs)
+        set(multiValueArgs SOURCES)
+        cmake_parse_arguments(compile_shader "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+        foreach(source ${compile_shader_SOURCES})
+            get_filename_component(filename ${source} NAME)
+            set(spv_file ${filename}.spv)
+            add_custom_command(
+                OUTPUT ${spv_file}
+                DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${source}
+                ${CMAKE_CURRENT_SOURCE_DIR}/kompute-shaders/common.comp
+                ${CMAKE_CURRENT_SOURCE_DIR}/kompute-shaders/op_getrows.comp
+                ${CMAKE_CURRENT_SOURCE_DIR}/kompute-shaders/op_mul_mv_q_n_pre.comp
+                ${CMAKE_CURRENT_SOURCE_DIR}/kompute-shaders/op_mul_mv_q_n.comp
+                COMMAND ${glslc_executable} --target-env=vulkan1.2 -o ${spv_file} ${CMAKE_CURRENT_SOURCE_DIR}/${source}
+                COMMENT "Compiling ${source} to ${spv_file}"
+                )
+
+            get_filename_component(RAW_FILE_NAME ${spv_file} NAME)
+            set(FILE_NAME "shader${RAW_FILE_NAME}")
+            string(REPLACE ".comp.spv" ".h" HEADER_FILE ${FILE_NAME})
+            string(TOUPPER ${HEADER_FILE} HEADER_FILE_DEFINE)
+            string(REPLACE "." "_" HEADER_FILE_DEFINE "${HEADER_FILE_DEFINE}")
+            set(OUTPUT_HEADER_FILE "${HEADER_FILE}")
+            message(STATUS "${HEADER_FILE} generating ${HEADER_FILE_DEFINE}")
+            if(CMAKE_GENERATOR MATCHES "Visual Studio")
+                add_custom_command(
+                    OUTPUT ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo "/*THIS FILE HAS BEEN AUTOMATICALLY GENERATED - DO NOT EDIT*/" > ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo \"\#ifndef ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo \"\#define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo "namespace kp {" >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo "namespace shader_data {" >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_BINARY_DIR}/bin/$<CONFIG>/xxd -i ${RAW_FILE_NAME} >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo "}}" >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo \"\#endif // define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
+                    DEPENDS ${spv_file} xxd
+                    COMMENT "Converting to hpp: ${FILE_NAME} ${CMAKE_BINARY_DIR}/bin/$<CONFIG>/xxd"
+                    )
+            else()
+                add_custom_command(
+                    OUTPUT ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo "/*THIS FILE HAS BEEN AUTOMATICALLY GENERATED - DO NOT EDIT*/" > ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo \"\#ifndef ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo \"\#define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo "namespace kp {" >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo "namespace shader_data {" >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_BINARY_DIR}/bin/xxd -i ${RAW_FILE_NAME} >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo "}}" >> ${OUTPUT_HEADER_FILE}
+                    COMMAND ${CMAKE_COMMAND} -E echo \"\#endif // define ${HEADER_FILE_DEFINE}\" >> ${OUTPUT_HEADER_FILE}
+                    DEPENDS ${spv_file} xxd
+                    COMMENT "Converting to hpp: ${FILE_NAME} ${CMAKE_BINARY_DIR}/bin/xxd"
+                    )
+            endif()
+        endforeach()
+    endfunction()
+
+    if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/kompute/CMakeLists.txt")
+        message(STATUS "Kompute found")
+        set(KOMPUTE_OPT_LOG_LEVEL Error CACHE STRING "Kompute log level")
+        add_subdirectory(kompute)
+
+        # Compile our shaders
+        compile_shader(SOURCES
+            kompute-shaders/op_scale.comp
+            kompute-shaders/op_scale_8.comp
+            kompute-shaders/op_add.comp
+            kompute-shaders/op_addrow.comp
+            kompute-shaders/op_mul.comp
+            kompute-shaders/op_silu.comp
+            kompute-shaders/op_relu.comp
+            kompute-shaders/op_gelu.comp
+            kompute-shaders/op_softmax.comp
+            kompute-shaders/op_norm.comp
+            kompute-shaders/op_rmsnorm.comp
+            kompute-shaders/op_diagmask.comp
+            kompute-shaders/op_mul_mat_mat_f32.comp
+            kompute-shaders/op_mul_mat_f16.comp
+            kompute-shaders/op_mul_mat_q8_0.comp
+            kompute-shaders/op_mul_mat_q4_0.comp
+            kompute-shaders/op_mul_mat_q4_1.comp
+            kompute-shaders/op_mul_mat_q6_k.comp
+            kompute-shaders/op_getrows_f32.comp
+            kompute-shaders/op_getrows_f16.comp
+            kompute-shaders/op_getrows_q4_0.comp
+            kompute-shaders/op_getrows_q4_1.comp
+            kompute-shaders/op_getrows_q6_k.comp
+            kompute-shaders/op_rope_f16.comp
+            kompute-shaders/op_rope_f32.comp
+            kompute-shaders/op_cpy_f16_f16.comp
+            kompute-shaders/op_cpy_f16_f32.comp
+            kompute-shaders/op_cpy_f32_f16.comp
+            kompute-shaders/op_cpy_f32_f32.comp
+        )
+
+        # Create a custom target for our generated shaders
+        add_custom_target(generated_shaders DEPENDS
+            shaderop_scale.h
+            shaderop_scale_8.h
+            shaderop_add.h
+            shaderop_addrow.h
+            shaderop_mul.h
+            shaderop_silu.h
+            shaderop_relu.h
+            shaderop_gelu.h
+            shaderop_softmax.h
+            shaderop_norm.h
+            shaderop_rmsnorm.h
+            shaderop_diagmask.h
+            shaderop_mul_mat_mat_f32.h
+            shaderop_mul_mat_f16.h
+            shaderop_mul_mat_q8_0.h
+            shaderop_mul_mat_q4_0.h
+            shaderop_mul_mat_q4_1.h
+            shaderop_mul_mat_q6_k.h
+            shaderop_getrows_f32.h
+            shaderop_getrows_f16.h
+            shaderop_getrows_q4_0.h
+            shaderop_getrows_q4_1.h
+            shaderop_getrows_q6_k.h
+            shaderop_rope_f16.h
+            shaderop_rope_f32.h
+            shaderop_cpy_f16_f16.h
+            shaderop_cpy_f16_f32.h
+            shaderop_cpy_f32_f16.h
+            shaderop_cpy_f32_f32.h
+        )
+
+        # Create a custom command that depends on the generated_shaders
+        add_custom_command(
+            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ggml-kompute.stamp
+            COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/ggml-kompute.stamp
+            DEPENDS generated_shaders
+            COMMENT "Ensuring shaders are generated before compiling ggml-kompute.cpp"
+        )
+
+        # Add the stamp to the main sources to ensure dependency tracking
+        set(GGML_SOURCES_KOMPUTE ggml-kompute.cpp           ${CMAKE_CURRENT_BINARY_DIR}/ggml-kompute.stamp)
+        set(GGML_HEADERS_KOMPUTE ../include/ggml-kompute.h  ${CMAKE_CURRENT_BINARY_DIR}/ggml-kompute.stamp)
+
+        list(APPEND GGML_CDEF_PUBLIC GGML_USE_KOMPUTE)
+
+        set(GGML_EXTRA_LIBS     ${GGML_EXTRA_LIBS}     kompute)
+        set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
+    else()
+        message(WARNING "Kompute not found")
+    endif()
+endif()
+
+if (GGML_CPU_HBM)
+    find_library(memkind memkind REQUIRED)
+
+    message(STATUS "Using memkind for CPU HBM")
+
+    add_compile_definitions(GGML_USE_CPU_HBM)
+
+    target_link_libraries(ggml PUBLIC memkind)
+endif()
+
+function(get_flags CCID CCVER)
+    set(C_FLAGS "")
+    set(CXX_FLAGS "")
+
+    if (CCID MATCHES "Clang")
+        set(C_FLAGS   -Wunreachable-code-break -Wunreachable-code-return)
+        set(CXX_FLAGS -Wunreachable-code-break -Wunreachable-code-return -Wmissing-prototypes -Wextra-semi)
+
+        if (
+            (CCID STREQUAL "Clang"      AND CCVER VERSION_GREATER_EQUAL 3.8.0) OR
+            (CCID STREQUAL "AppleClang" AND CCVER VERSION_GREATER_EQUAL 7.3.0)
+        )
+            list(APPEND C_FLAGS -Wdouble-promotion)
+        endif()
+    elseif (CCID STREQUAL "GNU")
+        set(C_FLAGS   -Wdouble-promotion)
+        set(CXX_FLAGS -Wno-array-bounds)
+
+        if (CCVER VERSION_GREATER_EQUAL 7.1.0)
+            list(APPEND CXX_FLAGS -Wno-format-truncation)
+        endif()
+        if (CCVER VERSION_GREATER_EQUAL 8.1.0)
+            list(APPEND CXX_FLAGS -Wextra-semi)
+        endif()
+    endif()
+
+    set(GF_C_FLAGS   ${C_FLAGS}   PARENT_SCOPE)
+    set(GF_CXX_FLAGS ${CXX_FLAGS} PARENT_SCOPE)
+endfunction()
+
+if (GGML_FATAL_WARNINGS)
+    if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+        list(APPEND C_FLAGS   -Werror)
+        list(APPEND CXX_FLAGS -Werror)
+    elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+        add_compile_options(/WX)
+    endif()
+endif()
+
+if (GGML_ALL_WARNINGS)
+    if (NOT MSVC)
+        list(APPEND WARNING_FLAGS -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function)
+        list(APPEND C_FLAGS       -Wshadow -Wstrict-prototypes -Wpointer-arith -Wmissing-prototypes
+                                  -Werror=implicit-int -Werror=implicit-function-declaration)
+        list(APPEND CXX_FLAGS     -Wmissing-declarations -Wmissing-noreturn)
+
+        list(APPEND C_FLAGS   ${WARNING_FLAGS})
+        list(APPEND CXX_FLAGS ${WARNING_FLAGS})
+
+        get_flags(${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION})
+
+        add_compile_options("$<$<COMPILE_LANGUAGE:C>:${C_FLAGS};${GF_C_FLAGS}>"
+                            "$<$<COMPILE_LANGUAGE:CXX>:${CXX_FLAGS};${GF_CXX_FLAGS}>")
+    else()
+        # todo : msvc
+        set(C_FLAGS   "")
+        set(CXX_FLAGS "")
+    endif()
+endif()
+
+set(CUDA_CXX_FLAGS "")
+
+if (GGML_CUDA)
+    set(CUDA_FLAGS -use_fast_math)
+
+    if (GGML_FATAL_WARNINGS)
+        list(APPEND CUDA_FLAGS -Werror all-warnings)
+    endif()
+
+    if (GGML_ALL_WARNINGS AND NOT MSVC)
+        set(NVCC_CMD ${CMAKE_CUDA_COMPILER} .c)
+        if (NOT CMAKE_CUDA_HOST_COMPILER STREQUAL "")
+            list(APPEND NVCC_CMD -ccbin ${CMAKE_CUDA_HOST_COMPILER})
+        endif()
+
+        execute_process(
+            COMMAND ${NVCC_CMD} -Xcompiler --version
+            OUTPUT_VARIABLE CUDA_CCFULLVER
+            ERROR_QUIET
+        )
+
+        if (NOT CUDA_CCFULLVER MATCHES clang)
+            set(CUDA_CCID "GNU")
+            execute_process(
+                COMMAND ${NVCC_CMD} -Xcompiler "-dumpfullversion -dumpversion"
+                OUTPUT_VARIABLE CUDA_CCVER
+                ERROR_QUIET
+            )
+        else()
+            if (CUDA_CCFULLVER MATCHES Apple)
+                set(CUDA_CCID "AppleClang")
+            else()
+                set(CUDA_CCID "Clang")
+            endif()
+            string(REGEX REPLACE "^.* version ([0-9.]*).*$" "\\1" CUDA_CCVER ${CUDA_CCFULLVER})
+        endif()
+
+        message("-- CUDA host compiler is ${CUDA_CCID} ${CUDA_CCVER}")
+
+        get_flags(${CUDA_CCID} ${CUDA_CCVER})
+        list(APPEND CUDA_CXX_FLAGS ${CXX_FLAGS} ${GF_CXX_FLAGS})  # This is passed to -Xcompiler later
+    endif()
+
+    if (NOT MSVC)
+        list(APPEND CUDA_CXX_FLAGS -Wno-pedantic)
+    endif()
+endif()
+
+if (GGML_LTO)
+    include(CheckIPOSupported)
+    check_ipo_supported(RESULT result OUTPUT output)
+    if (result)
+        set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
+    else()
+        message(WARNING "IPO is not supported: ${output}")
+    endif()
+endif()
+
+if (GGML_CCACHE)
+    find_program(GGML_CCACHE_FOUND ccache)
+
+    if (GGML_CCACHE_FOUND)
+        # TODO: should not be set globally
+        set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+        set(ENV{CCACHE_SLOPPINESS} time_macros)
+        message(STATUS "ccache found, compilation results will be cached. Disable with GGML_CCACHE=OFF.")
+    else()
+        message(STATUS "Warning: ccache not found - consider installing it for faster compilation or disable this warning with GGML_CCACHE=OFF")
+    endif ()
+endif()
+
+# this version of Apple ld64 is buggy
+execute_process(
+    COMMAND ${CMAKE_C_COMPILER} ${CMAKE_EXE_LINKER_FLAGS} -Wl,-v
+    ERROR_VARIABLE output
+    OUTPUT_QUIET
+)
+
+if (output MATCHES "dyld-1015\.7")
+    add_compile_definitions(HAVE_BUGGY_APPLE_LINKER)
+endif()
+
+# architecture specific
+# TODO: probably these flags need to be tweaked on some architectures
+#       feel free to update the Makefile for your architecture and send a pull request or issue
+message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
+if (MSVC)
+    string(TOLOWER "${CMAKE_GENERATOR_PLATFORM}" CMAKE_GENERATOR_PLATFORM_LWR)
+    message(STATUS "CMAKE_GENERATOR_PLATFORM: ${CMAKE_GENERATOR_PLATFORM}")
+else ()
+    set(CMAKE_GENERATOR_PLATFORM_LWR "")
+endif ()
+
+if (NOT MSVC)
+    if (GGML_STATIC)
+        add_link_options(-static)
+        if (MINGW)
+            add_link_options(-static-libgcc -static-libstdc++)
+        endif()
+    endif()
+    if (GGML_GPROF)
+        add_compile_options(-pg)
+    endif()
+endif()
+
+set(ARCH_FLAGS "")
+
+if (CMAKE_OSX_ARCHITECTURES      STREQUAL "arm64" OR
+    CMAKE_GENERATOR_PLATFORM_LWR STREQUAL "arm64" OR
+    (NOT CMAKE_OSX_ARCHITECTURES      AND
+     NOT CMAKE_GENERATOR_PLATFORM_LWR AND
+         CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm.*|ARM64)$"))
+
+    message(STATUS "ARM detected")
+
+    if (MSVC)
+        add_compile_definitions(__aarch64__) # MSVC defines _M_ARM64 instead
+        add_compile_definitions(__ARM_NEON)
+        add_compile_definitions(__ARM_FEATURE_FMA)
+
+        set(CMAKE_REQUIRED_FLAGS_PREV ${CMAKE_REQUIRED_FLAGS})
+        string(JOIN " " CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "/arch:armv8.2")
+
+        check_cxx_source_compiles("#include <arm_neon.h>\nint main() { int8x16_t _a, _b; int32x4_t _s = vdotq_s32(_s, _a, _b); return 0; }" GGML_COMPILER_SUPPORT_DOTPROD)
+        if (GGML_COMPILER_SUPPORT_DOTPROD)
+            add_compile_definitions(__ARM_FEATURE_DOTPROD)
+        endif ()
+
+        check_cxx_source_compiles("#include <arm_neon.h>\nint main() { int8x16_t _a, _b; int32x4_t _s = vmlaq_f32(_s, _a, _b); return 0; }" GGML_COMPILER_SUPPORT_MATMUL_INT8)
+
+        if (GGML_COMPILER_SUPPORT_MATMUL_INT8)
+            add_compile_definitions(__ARM_FEATURE_MATMUL_INT8)
+        endif ()
+
+        check_cxx_source_compiles("#include <arm_neon.h>\nint main() { float16_t _a; float16x8_t _s = vdupq_n_f16(_a); return 0; }" GGML_COMPILER_SUPPORT_FP16_VECTOR_ARITHMETIC)
+        if (GGML_COMPILER_SUPPORT_FP16_VECTOR_ARITHMETIC)
+            add_compile_definitions(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
+        endif ()
+
+        set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_PREV})
+    else()
+        check_cxx_compiler_flag(-mfp16-format=ieee COMPILER_SUPPORTS_FP16_FORMAT_I3E)
+        if (NOT "${COMPILER_SUPPORTS_FP16_FORMAT_I3E}" STREQUAL "")
+            list(APPEND ARCH_FLAGS -mfp16-format=ieee)
+        endif()
+        if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv6")
+            # Raspberry Pi 1, Zero
+            list(APPEND ARCH_FLAGS -mfpu=neon-fp-armv8 -mno-unaligned-access)
+        endif()
+        if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv7")
+            if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Android")
+                # Android armeabi-v7a
+                list(APPEND ARCH_FLAGS -mfpu=neon-vfpv4 -mno-unaligned-access -funsafe-math-optimizations)
+            else()
+                # Raspberry Pi 2
+                list(APPEND ARCH_FLAGS -mfpu=neon-fp-armv8 -mno-unaligned-access -funsafe-math-optimizations)
+            endif()
+        endif()
+        if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "armv8")
+            # Android arm64-v8a
+            # Raspberry Pi 3, 4, Zero 2 (32-bit)
+            list(APPEND ARCH_FLAGS -mno-unaligned-access)
+        endif()
+        if (GGML_SVE)
+            list(APPEND ARCH_FLAGS -march=armv8.6-a+sve)
+        endif()
+    endif()
+elseif (CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64" OR CMAKE_GENERATOR_PLATFORM_LWR MATCHES "^(x86_64|i686|amd64|x64|win32)$" OR
+        (NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_GENERATOR_PLATFORM_LWR AND
+         CMAKE_SYSTEM_PROCESSOR MATCHES "^(x86_64|i686|AMD64)$"))
+    message(STATUS "x86 detected")
+    if (MSVC)
+        # instruction set detection for MSVC only
+        if (GGML_NATIVE)
+            # TODO: improve, should not reference files from the parent folder
+            include(../cmake/FindSIMD.cmake)
+        endif ()
+        if (GGML_AVX512)
+            list(APPEND ARCH_FLAGS /arch:AVX512)
+            # MSVC has no compile-time flags enabling specific
+            # AVX512 extensions, neither it defines the
+            # macros corresponding to the extensions.
+            # Do it manually.
+            if (GGML_AVX512_VBMI)
+                add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VBMI__>)
+                add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VBMI__>)
+            endif()
+            if (GGML_AVX512_VNNI)
+                add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512VNNI__>)
+                add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512VNNI__>)
+            endif()
+            if (GGML_AVX512_BF16)
+                add_compile_definitions($<$<COMPILE_LANGUAGE:C>:__AVX512BF16__>)
+                add_compile_definitions($<$<COMPILE_LANGUAGE:CXX>:__AVX512BF16__>)
+            endif()
+        elseif (GGML_AVX2)
+            list(APPEND ARCH_FLAGS /arch:AVX2)
+        elseif (GGML_AVX)
+            list(APPEND ARCH_FLAGS /arch:AVX)
+        endif()
+    else()
+        if (GGML_NATIVE)
+            list(APPEND ARCH_FLAGS -march=native)
+        endif()
+        if (GGML_F16C)
+            list(APPEND ARCH_FLAGS -mf16c)
+        endif()
+        if (GGML_FMA)
+            list(APPEND ARCH_FLAGS -mfma)
+        endif()
+        if (GGML_AVX)
+            list(APPEND ARCH_FLAGS -mavx)
+        endif()
+        if (GGML_AVX2)
+            list(APPEND ARCH_FLAGS -mavx2)
+        endif()
+        if (GGML_AVX512)
+            list(APPEND ARCH_FLAGS -mavx512f)
+            list(APPEND ARCH_FLAGS -mavx512bw)
+        endif()
+        if (GGML_AVX512_VBMI)
+            list(APPEND ARCH_FLAGS -mavx512vbmi)
+        endif()
+        if (GGML_AVX512_VNNI)
+            list(APPEND ARCH_FLAGS -mavx512vnni)
+        endif()
+        if (GGML_AVX512_BF16)
+            list(APPEND ARCH_FLAGS -mavx512bf16)
+        endif()
+    endif()
+elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64")
+    message(STATUS "PowerPC detected")
+    if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64le")
+        list(APPEND ARCH_FLAGS -mcpu=powerpc64le)
+    else()
+        list(APPEND ARCH_FLAGS -mcpu=native -mtune=native)
+        #TODO: Add  targets for Power8/Power9 (Altivec/VSX) and Power10(MMA) and query for big endian systems (ppc64/le/be)
+    endif()
+elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "loongarch64")
+    message(STATUS "loongarch64 detected")
+
+    list(APPEND ARCH_FLAGS -march=loongarch64)
+    if (GGML_LASX)
+        list(APPEND ARCH_FLAGS -mlasx)
+    endif()
+    if (GGML_LSX)
+        list(APPEND ARCH_FLAGS -mlsx)
+    endif()
+else()
+    message(STATUS "Unknown architecture")
+endif()
+
+add_compile_options("$<$<COMPILE_LANGUAGE:CXX>:${ARCH_FLAGS}>")
+add_compile_options("$<$<COMPILE_LANGUAGE:C>:${ARCH_FLAGS}>")
+
+if (GGML_CUDA)
+    list(APPEND CUDA_CXX_FLAGS ${ARCH_FLAGS})
+    list(JOIN   CUDA_CXX_FLAGS " " CUDA_CXX_FLAGS_JOINED)  # pass host compiler flags as a single argument
+
+    if (NOT CUDA_CXX_FLAGS_JOINED STREQUAL "")
+        list(APPEND CUDA_FLAGS -Xcompiler ${CUDA_CXX_FLAGS_JOINED})
+    endif()
+
+    add_compile_options("$<$<COMPILE_LANGUAGE:CUDA>:${CUDA_FLAGS}>")
+endif()
+
+if (MINGW)
+    # Target Windows 8 for PrefetchVirtualMemory
+    add_compile_definitions(_WIN32_WINNT=${GGML_WIN_VER})
+endif()
+
+#
+# POSIX conformance
+#
+
+# clock_gettime came in POSIX.1b (1993)
+# CLOCK_MONOTONIC came in POSIX.1-2001 / SUSv3 as optional
+# posix_memalign came in POSIX.1-2001 / SUSv3
+# M_PI is an XSI extension since POSIX.1-2001 / SUSv3, came in XPG1 (1985)
+add_compile_definitions(_XOPEN_SOURCE=600)
+
+# Somehow in OpenBSD whenever POSIX conformance is specified
+# some string functions rely on locale_t availability,
+# which was introduced in POSIX.1-2008, forcing us to go higher
+if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
+    remove_definitions(-D_XOPEN_SOURCE=600)
+    add_compile_definitions(_XOPEN_SOURCE=700)
+endif()
+
+# Data types, macros and functions related to controlling CPU affinity and
+# some memory allocation are available on Linux through GNU extensions in libc
+if (CMAKE_SYSTEM_NAME MATCHES "Linux")
+    add_compile_definitions(_GNU_SOURCE)
+endif()
+
+# RLIMIT_MEMLOCK came in BSD, is not specified in POSIX.1,
+# and on macOS its availability depends on enabling Darwin extensions
+# similarly on DragonFly, enabling BSD extensions is necessary
+if (
+    CMAKE_SYSTEM_NAME MATCHES "Darwin" OR
+    CMAKE_SYSTEM_NAME MATCHES "iOS"    OR
+    CMAKE_SYSTEM_NAME MATCHES "tvOS"   OR
+    CMAKE_SYSTEM_NAME MATCHES "DragonFly"
+)
+    add_compile_definitions(_DARWIN_C_SOURCE)
+endif()
+
+# alloca is a non-standard interface that is not visible on BSDs when
+# POSIX conformance is specified, but not all of them provide a clean way
+# to enable it in such cases
+if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+    add_compile_definitions(__BSD_VISIBLE)
+endif()
+if (CMAKE_SYSTEM_NAME MATCHES "NetBSD")
+    add_compile_definitions(_NETBSD_SOURCE)
+endif()
+if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD")
+    add_compile_definitions(_BSD_SOURCE)
+endif()
+
+if (WIN32)
+    add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
+
+    if (BUILD_SHARED_LIBS)
+        # TODO: should not use this
+        set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
+    endif()
+endif()
+
+#
+# libraries
+#
+
+# ggml
+
+add_library(ggml
+            ../include/ggml.h
+            ../include/ggml-alloc.h
+            ../include/ggml-backend.h
+            ggml.c
+            ggml-alloc.c
+            ggml-backend.c
+            ggml-quants.c
+            ggml-quants.h
+            ${GGML_SOURCES_CUDA}      ${GGML_HEADERS_CUDA}
+            ${GGML_SOURCES_METAL}     ${GGML_HEADERS_METAL}
+            ${GGML_SOURCES_RPC}       ${GGML_HEADERS_RPC}
+            ${GGML_SOURCES_EXTRA}     ${GGML_HEADERS_EXTRA}
+            ${GGML_SOURCES_SYCL}      ${GGML_HEADERS_SYCL}
+            ${GGML_SOURCES_KOMPUTE}   ${GGML_HEADERS_KOMPUTE}
+            ${GGML_SOURCES_VULKAN}    ${GGML_HEADERS_VULKAN}
+            ${GGML_SOURCES_ROCM}      ${GGML_HEADERS_ROCM}
+            ${GGML_SOURCES_BLAS}      ${GGML_HEADERS_BLAS}
+            ${GGML_SOURCES_LLAMAFILE} ${GGML_HEADERS_LLAMAFILE}
+            )
+
+if (EMSCRIPTEN)
+    set_target_properties(ggml PROPERTIES COMPILE_FLAGS "-msimd128")
+endif()
+
+target_compile_definitions(ggml PUBLIC  ${GGML_CDEF_PUBLIC})
+target_include_directories(ggml PUBLIC ../include)
+target_include_directories(ggml PRIVATE . ${GGML_EXTRA_INCLUDES})
+target_compile_features   (ggml PRIVATE c_std_11) # don't bump
+
+target_link_libraries(ggml PRIVATE Threads::Threads ${GGML_EXTRA_LIBS})
+
+find_library(MATH_LIBRARY m)
+if (MATH_LIBRARY)
+    target_link_libraries(ggml PRIVATE ${MATH_LIBRARY})
+endif()
+
+if (BUILD_SHARED_LIBS)
+    set_target_properties(ggml PROPERTIES POSITION_INDEPENDENT_CODE ON)
+endif()
diff --git a/ggml/src/ggml-alloc.c b/ggml/src/ggml-alloc.c
new file mode 100644 (file)
index 0000000..bd367c4
--- /dev/null
@@ -0,0 +1,1041 @@
+#include "ggml-alloc.h"
+#include "ggml-backend-impl.h"
+#include "ggml.h"
+#include "ggml-impl.h"
+#include <assert.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MAX_FREE_BLOCKS 256
+
+//#define GGML_ALLOCATOR_DEBUG
+
+//#define AT_PRINTF(...) fprintf(stderr, __VA_ARGS__)
+#define AT_PRINTF(...)
+
+
+static bool ggml_is_view(const struct ggml_tensor * t) {
+    return t->view_src != NULL;
+}
+
+static bool ggml_are_same_layout(const struct ggml_tensor * a, const struct ggml_tensor * b) {
+    if (a->type != b->type) {
+        return false;
+    }
+    for (int i = 0; i < GGML_MAX_DIMS; i++) {
+        if (a->ne[i] != b->ne[i]) {
+            return false;
+        }
+        if (a->nb[i] != b->nb[i]) {
+            return false;
+        }
+    }
+    return true;
+}
+
+static bool ggml_op_can_inplace(enum ggml_op op) {
+    switch (op) {
+        case GGML_OP_SCALE:
+        case GGML_OP_DIAG_MASK_ZERO:
+        case GGML_OP_DIAG_MASK_INF:
+        case GGML_OP_ADD:
+        case GGML_OP_ADD1:
+        case GGML_OP_SUB:
+        case GGML_OP_MUL:
+        case GGML_OP_DIV:
+        case GGML_OP_SQR:
+        case GGML_OP_SQRT:
+        case GGML_OP_LOG:
+        case GGML_OP_UNARY:
+        case GGML_OP_ROPE:
+        case GGML_OP_RMS_NORM:
+        case GGML_OP_SOFT_MAX:
+            return true;
+
+        default:
+            return false;
+    }
+}
+
+static size_t aligned_offset(const void * buffer, size_t offset, size_t alignment) {
+    assert(alignment && !(alignment & (alignment - 1))); // power of 2
+    size_t align = (alignment - (((uintptr_t)buffer + offset) % alignment)) % alignment;
+    return offset + align;
+}
+
+// tallocr
+
+struct ggml_tallocr ggml_tallocr_new(ggml_backend_buffer_t buffer) {
+    void * base = ggml_backend_buffer_get_base(buffer);
+    size_t align = ggml_backend_buffer_get_alignment(buffer);
+
+    assert(align && !(align & (align - 1))); // power of 2
+
+    struct ggml_tallocr talloc = (struct ggml_tallocr) {
+        /*.buffer    = */ buffer,
+        /*.base      = */ base,
+        /*.alignment = */ align,
+        /*.offset    = */ aligned_offset(base, 0, align),
+    };
+    return talloc;
+}
+
+void ggml_tallocr_alloc(struct ggml_tallocr * talloc, struct ggml_tensor * tensor) {
+    size_t size = ggml_backend_buffer_get_alloc_size(talloc->buffer, tensor);
+    size = GGML_PAD(size, talloc->alignment);
+
+    if (talloc->offset + size > ggml_backend_buffer_get_size(talloc->buffer)) {
+        fprintf(stderr, "%s: not enough space in the buffer to allocate %s (needed %zu, available %zu)\n",
+                __func__, tensor->name, size, ggml_backend_buffer_get_size(talloc->buffer) - talloc->offset);
+        GGML_ASSERT(!"not enough space in the buffer");
+        return;
+    }
+
+    void * addr = (char *)ggml_backend_buffer_get_base(talloc->buffer) + talloc->offset;
+    talloc->offset += size;
+
+    assert(((uintptr_t)addr % talloc->alignment) == 0);
+
+    ggml_backend_tensor_alloc(talloc->buffer, tensor, addr);
+}
+
+// dynamic tensor allocator
+
+struct free_block {
+    size_t offset;
+    size_t size;
+};
+
+struct ggml_dyn_tallocr {
+    size_t alignment;
+    int n_free_blocks;
+    struct free_block free_blocks[MAX_FREE_BLOCKS];
+    size_t max_size;
+
+#ifdef GGML_ALLOCATOR_DEBUG
+    struct {
+        const struct ggml_tensor * tensor;
+        size_t offset;
+    } allocated_tensors[1024];
+#endif
+};
+
+#ifdef GGML_ALLOCATOR_DEBUG
+static void add_allocated_tensor(struct ggml_dyn_tallocr * alloc, size_t offset, const struct ggml_tensor * tensor) {
+    for (int i = 0; i < 1024; i++) {
+        if (alloc->allocated_tensors[i].tensor == NULL) {
+            alloc->allocated_tensors[i].tensor = tensor;
+            alloc->allocated_tensors[i].offset = offset;
+            return;
+        }
+    }
+    GGML_ASSERT(!"out of allocated_tensors");
+}
+static void remove_allocated_tensor(struct ggml_dyn_tallocr * alloc, size_t offset, const struct ggml_tensor * tensor) {
+    for (int i = 0; i < 1024; i++) {
+        if (alloc->allocated_tensors[i].offset == offset) {
+            alloc->allocated_tensors[i].tensor = NULL;
+            return;
+        }
+    }
+    fprintf(stderr, "tried to free tensor %s not found\n", tensor->name);
+    GGML_ASSERT(!"tensor not found");
+}
+#endif
+
+static size_t ggml_dyn_tallocr_alloc(struct ggml_dyn_tallocr * alloc, size_t size, const struct ggml_tensor * tensor) {
+    size = aligned_offset(NULL, size, alloc->alignment);
+
+    AT_PRINTF("%s: allocating %s (%zu bytes) - ", __func__, tensor->name, size);
+
+    size_t max_avail = 0;
+
+    // find the best fitting free block besides the last block
+    int best_fit_block = -1;
+    size_t best_fit_size = SIZE_MAX;
+    for (int i = 0; i < alloc->n_free_blocks - 1; i++) {
+        struct free_block * block = &alloc->free_blocks[i];
+        max_avail = MAX(max_avail, block->size);
+        if (block->size >= size && block->size <= best_fit_size) {
+            best_fit_block = i;
+            best_fit_size = block->size;
+        }
+    }
+
+    if (best_fit_block == -1) {
+        // the last block is our last resort
+        struct free_block * block = &alloc->free_blocks[alloc->n_free_blocks - 1];
+        max_avail = MAX(max_avail, block->size);
+        if (block->size >= size) {
+            best_fit_block = alloc->n_free_blocks - 1;
+        } else {
+            // this should never happen
+            fprintf(stderr, "%s: not enough space in the buffer to allocate %zu bytes, largest block available %zu bytes\n",
+                    __func__, size, max_avail);
+            GGML_ASSERT(!"not enough space in the buffer");
+            GGML_UNREACHABLE();
+        }
+    }
+
+    struct free_block * block = &alloc->free_blocks[best_fit_block];
+    size_t offset = block->offset;
+    block->offset = offset + size;
+    block->size -= size;
+    if (block->size == 0) {
+        // remove block if empty
+        alloc->n_free_blocks--;
+        for (int j = best_fit_block; j < alloc->n_free_blocks; j++) {
+            alloc->free_blocks[j] = alloc->free_blocks[j+1];
+        }
+    }
+
+    AT_PRINTF("block %d, offset %zu\n", best_fit_block, offset);
+
+#ifdef GGML_ALLOCATOR_DEBUG
+    add_allocated_tensor(alloc, offset, tensor);
+    size_t cur_max = offset + size;
+    if (cur_max > alloc->max_size) {
+        // sort allocated_tensors by offset
+        for (int i = 0; i < 1024; i++) {
+            for (int j = i + 1; j < 1024; j++) {
+                if (alloc->allocated_tensors[i].offset > alloc->allocated_tensors[j].offset) {
+                    const struct ggml_tensor * tmp_tensor = alloc->allocated_tensors[i].tensor;
+                    size_t tmp_offset = alloc->allocated_tensors[i].offset;
+                    alloc->allocated_tensors[i].tensor = alloc->allocated_tensors[j].tensor;
+                    alloc->allocated_tensors[i].offset = alloc->allocated_tensors[j].offset;
+                    alloc->allocated_tensors[j].tensor = tmp_tensor;
+                    alloc->allocated_tensors[j].offset = tmp_offset;
+                }
+            }
+        }
+        fprintf(stderr, "max_size = %.2f MB: tensors: ", cur_max / 1024.0 / 1024.0);
+        for (int i = 0; i < 1024; i++) {
+            if (alloc->allocated_tensors[i].tensor) {
+                fprintf(stderr, "%s [%zx-%zx] (%.2f MB) ", alloc->allocated_tensors[i].tensor->name,
+                    alloc->allocated_tensors[i].offset,
+                    alloc->allocated_tensors[i].offset + ggml_nbytes(alloc->allocated_tensors[i].tensor),
+                    ggml_nbytes(alloc->allocated_tensors[i].tensor) / 1024.0 / 1024.0);
+            }
+        }
+        fprintf(stderr, "\n");
+    }
+#endif
+
+    alloc->max_size = MAX(alloc->max_size, offset + size);
+
+    return offset;
+
+    GGML_UNUSED(tensor);
+}
+
+// this is a very naive implementation, but for our case the number of free blocks should be very small
+static void ggml_dyn_tallocr_free_tensor(struct ggml_dyn_tallocr * alloc, size_t offset, size_t size, const struct ggml_tensor * tensor) {
+    size = aligned_offset(NULL, size, alloc->alignment);
+
+    AT_PRINTF("%s: freeing %s at %zu (%zu bytes) - n_free_blocks = %d\n", __func__, tensor->name, offset, size, alloc->n_free_blocks);
+
+#ifdef GGML_ALLOCATOR_DEBUG
+    remove_allocated_tensor(alloc, offset, tensor);
+#endif
+
+    // see if we can merge with an existing block
+    for (int i = 0; i < alloc->n_free_blocks; i++) {
+        struct free_block * block = &alloc->free_blocks[i];
+        // check if ptr is at the end of the block
+        if (block->offset + block->size == offset) {
+            block->size += size;
+            // check if we can merge with the next block
+            if (i < alloc->n_free_blocks - 1 && block->offset + block->size == alloc->free_blocks[i+1].offset) {
+                block->size += alloc->free_blocks[i+1].size;
+                alloc->n_free_blocks--;
+                for (int j = i+1; j < alloc->n_free_blocks; j++) {
+                    alloc->free_blocks[j] = alloc->free_blocks[j+1];
+                }
+            }
+            return;
+        }
+        // check if ptr is at the beginning of the block
+        if (offset + size == block->offset) {
+            block->offset = offset;
+            block->size += size;
+            // check if we can merge with the previous block
+            if (i > 0 && alloc->free_blocks[i-1].offset + alloc->free_blocks[i-1].size == block->offset) {
+                alloc->free_blocks[i-1].size += block->size;
+                alloc->n_free_blocks--;
+                for (int j = i; j < alloc->n_free_blocks; j++) {
+                    alloc->free_blocks[j] = alloc->free_blocks[j+1];
+                }
+            }
+            return;
+        }
+    }
+    // otherwise, add a new block
+    GGML_ASSERT(alloc->n_free_blocks < MAX_FREE_BLOCKS && "out of free blocks");
+    // insert the new block in the correct position to keep the array sorted by address (to make merging blocks faster)
+    int insert_pos = 0;
+    while (insert_pos < alloc->n_free_blocks && alloc->free_blocks[insert_pos].offset < offset) {
+        insert_pos++;
+    }
+    // shift all blocks from insert_pos onward to make room for the new block
+    for (int i = alloc->n_free_blocks; i > insert_pos; i--) {
+        alloc->free_blocks[i] = alloc->free_blocks[i-1];
+    }
+    // insert the new block
+    alloc->free_blocks[insert_pos].offset = offset;
+    alloc->free_blocks[insert_pos].size = size;
+    alloc->n_free_blocks++;
+
+    GGML_UNUSED(tensor);
+}
+
+static void ggml_dyn_tallocr_reset(struct ggml_dyn_tallocr * alloc) {
+    alloc->n_free_blocks = 1;
+    alloc->free_blocks[0].offset = 0;
+    alloc->free_blocks[0].size = SIZE_MAX/2; // restrict maximum size of a measure allocator to half size_t max to avoid overflows
+    alloc->max_size = 0;
+}
+
+static struct ggml_dyn_tallocr * ggml_dyn_tallocr_new(size_t alignment) {
+    struct ggml_dyn_tallocr * alloc = (struct ggml_dyn_tallocr *)malloc(sizeof(struct ggml_dyn_tallocr));
+
+    *alloc = (struct ggml_dyn_tallocr) {
+        /*.alignment     = */ alignment,
+        /*.n_free_blocks = */ 0,
+        /*.free_blocks   = */ {{0}},
+        /*.max_size      = */ 0,
+#ifdef GGML_ALLOCATOR_DEBUG
+        /*.allocated_tensors = */ {{0}},
+#endif
+    };
+
+    ggml_dyn_tallocr_reset(alloc);
+
+    return alloc;
+}
+
+static void ggml_dyn_tallocr_free(struct ggml_dyn_tallocr * alloc) {
+    free(alloc);
+}
+
+static size_t ggml_dyn_tallocr_max_size(struct ggml_dyn_tallocr * alloc) {
+    return alloc->max_size;
+}
+
+
+/////////////////////////////////////
+
+// graph allocator
+
+struct hash_node {
+    int n_children;
+    int n_views;
+    int buffer_id;
+    size_t offset; // offset within the buffer
+    bool allocated;
+};
+
+struct tensor_alloc {
+    int buffer_id;
+    size_t offset;
+    size_t size_max; // 0 = pre-allocated, unused, or view
+};
+
+struct leaf_alloc {
+    int buffer_id;
+    struct tensor_alloc leaf;
+};
+
+struct node_alloc {
+    struct tensor_alloc dst;
+    struct tensor_alloc src[GGML_MAX_SRC];
+};
+
+struct ggml_gallocr {
+    ggml_backend_buffer_type_t * bufts; // [n_buffers]
+    ggml_backend_buffer_t * buffers; // [n_buffers]
+    struct ggml_dyn_tallocr ** buf_tallocs; // [n_buffers]
+    int n_buffers;
+
+    struct ggml_hash_set hash_set;
+    struct hash_node * hash_values; // [hash_set.size]
+
+    struct node_alloc * node_allocs; // [n_nodes]
+    int n_nodes;
+
+    struct leaf_alloc * leaf_allocs; // [n_leafs]
+    int n_leafs;
+};
+
+ggml_gallocr_t ggml_gallocr_new_n(ggml_backend_buffer_type_t * bufts, int n_bufs) {
+    ggml_gallocr_t galloc = (ggml_gallocr_t)calloc(1, sizeof(struct ggml_gallocr));
+    GGML_ASSERT(galloc != NULL);
+
+    galloc->bufts = calloc(n_bufs, sizeof(ggml_backend_buffer_type_t));
+    GGML_ASSERT(galloc->bufts != NULL);
+
+    galloc->buffers = calloc(n_bufs, sizeof(ggml_backend_buffer_t));
+    GGML_ASSERT(galloc->buffers != NULL);
+
+    galloc->buf_tallocs = calloc(n_bufs, sizeof(struct ggml_dyn_tallocr *));
+    GGML_ASSERT(galloc->buf_tallocs != NULL);
+
+    for (int i = 0; i < n_bufs; i++) {
+        galloc->bufts[i] = bufts[i];
+        galloc->buffers[i] = NULL;
+
+        // check if the same buffer type is used multiple times and reuse the same allocator
+        for (int j = 0; j < i; j++) {
+            if (bufts[i] == bufts[j]) {
+                galloc->buf_tallocs[i] = galloc->buf_tallocs[j];
+                break;
+            }
+        }
+
+        if (galloc->buf_tallocs[i] == NULL) {
+            size_t alignment = ggml_backend_buft_get_alignment(bufts[i]);
+            galloc->buf_tallocs[i] = ggml_dyn_tallocr_new(alignment);
+        }
+    }
+    galloc->n_buffers = n_bufs;
+
+    return galloc;
+}
+
+ggml_gallocr_t ggml_gallocr_new(ggml_backend_buffer_type_t buft) {
+    return ggml_gallocr_new_n(&buft, 1);
+}
+
+void ggml_gallocr_free(ggml_gallocr_t galloc) {
+    if (galloc == NULL) {
+        return;
+    }
+
+    for (int i = 0; i < galloc->n_buffers; i++) {
+        if (galloc->buffers != NULL) {
+            // skip if already freed
+            bool freed = false;
+            for (int j = 0; j < i; j++) {
+                if (galloc->buffers[j] == galloc->buffers[i]) {
+                    freed = true;
+                    break;
+                }
+            }
+            if (!freed) {
+                ggml_backend_buffer_free(galloc->buffers[i]);
+            }
+        }
+        if (galloc->buf_tallocs != NULL) {
+            // skip if already freed
+            bool freed = false;
+            for (int j = 0; j < i; j++) {
+                if (galloc->buf_tallocs[j] == galloc->buf_tallocs[i]) {
+                    freed = true;
+                    break;
+                }
+            }
+            if (!freed) {
+                ggml_dyn_tallocr_free(galloc->buf_tallocs[i]);
+            }
+        }
+    }
+
+    free(galloc->hash_set.keys);
+    free(galloc->hash_values);
+    free(galloc->bufts);
+    free(galloc->buffers);
+    free(galloc->buf_tallocs);
+    free(galloc->node_allocs);
+    free(galloc->leaf_allocs);
+    free(galloc);
+}
+
+typedef struct ggml_gallocr * ggml_gallocr_t;
+
+static struct hash_node * ggml_gallocr_hash_get(ggml_gallocr_t galloc, struct ggml_tensor * t) {
+    size_t i = ggml_hash_find_or_insert(galloc->hash_set, t);
+    return &galloc->hash_values[i];
+}
+
+static bool ggml_gallocr_is_own(ggml_gallocr_t galloc, struct ggml_tensor * t) {
+    return ggml_gallocr_hash_get(galloc, t)->allocated;
+}
+
+static void ggml_gallocr_set_node_offset(ggml_gallocr_t galloc, struct ggml_tensor * node, int buffer_id, size_t offset) {
+    struct hash_node * hn = ggml_gallocr_hash_get(galloc, node);
+    hn->buffer_id = buffer_id;
+    hn->offset = offset;
+    hn->allocated = true;
+}
+
+static bool ggml_gallocr_is_allocated(ggml_gallocr_t galloc, struct ggml_tensor * t) {
+    return t->data != NULL || ggml_gallocr_hash_get(galloc, t)->allocated;
+}
+
+static void ggml_gallocr_allocate_node(ggml_gallocr_t galloc, struct ggml_tensor * node, int buffer_id) {
+    struct hash_node * hn = ggml_gallocr_hash_get(galloc, node);
+
+    if (!ggml_gallocr_is_allocated(galloc, node) && !ggml_is_view(node)) {
+        hn->allocated = true;
+        assert(hn->offset == 0);
+
+        // try to reuse a parent's buffer (inplace)
+        if (ggml_op_can_inplace(node->op)) {
+            for (int i = 0; i < GGML_MAX_SRC; i++) {
+                struct ggml_tensor * parent = node->src[i];
+                if (parent == NULL) {
+                    continue;
+                }
+
+                // if the node's data is external, then we cannot re-use it
+                if (!ggml_gallocr_is_own(galloc, parent)) {
+                    AT_PRINTF("not reusing parent %s for %s as %p is external\n", parent->name, node->name, parent->data);
+                    continue;
+                }
+
+                // outputs cannot be reused
+                if (parent->flags & GGML_TENSOR_FLAG_OUTPUT || (parent->view_src != NULL && parent->view_src->flags & GGML_TENSOR_FLAG_OUTPUT)) {
+                    AT_PRINTF("not reusing parent %s for %s as it is an output\n", parent->name, node->name);
+                    continue;
+                }
+
+                if (!ggml_are_same_layout(node, parent)) {
+                    AT_PRINTF("not reusing parent %s for %s as layouts are different\n", parent->name, node->name);
+                    continue;
+                }
+
+                struct hash_node * p_hn = ggml_gallocr_hash_get(galloc, parent);
+                if (p_hn->n_children == 1 && p_hn->n_views == 0) {
+                    if (ggml_is_view(parent)) {
+                        struct ggml_tensor * view_src = parent->view_src;
+                        struct hash_node * view_src_hn = ggml_gallocr_hash_get(galloc, view_src);
+                        if (view_src_hn->n_views == 1 && view_src_hn->n_children == 0 && view_src->data == parent->data) {
+                            AT_PRINTF("reusing view parent %s (%s) for %s\n", parent->name, view_src->name, node->name);
+                            assert(view_src_hn->offset == p_hn->offset);
+                            hn->buffer_id = p_hn->buffer_id;
+                            hn->offset = p_hn->offset;
+                            p_hn->allocated = false; // avoid freeing the parent
+                            view_src_hn->allocated = false;
+                            return;
+                        }
+                    } else {
+                        AT_PRINTF("reusing parent %s for %s\n", parent->name, node->name);
+                        hn->buffer_id = p_hn->buffer_id;
+                        hn->offset = p_hn->offset;
+                        p_hn->allocated = false; // avoid freeing the parent
+                        return;
+                    }
+                }
+            }
+        }
+        // allocate tensor from the buffer
+        struct ggml_dyn_tallocr * alloc = galloc->buf_tallocs[buffer_id];
+        ggml_backend_buffer_type_t buft = galloc->bufts[buffer_id];
+        size_t size = ggml_backend_buft_get_alloc_size(buft, node);
+        size_t offset = ggml_dyn_tallocr_alloc(alloc, size, node);
+        hn->buffer_id = buffer_id;
+        hn->offset = offset;
+        return;
+    }
+}
+
+static void ggml_gallocr_free_node(ggml_gallocr_t galloc, struct ggml_tensor * node) {
+    // graph outputs are never freed
+    if (node->flags & GGML_TENSOR_FLAG_OUTPUT) {
+        AT_PRINTF("not freeing output %s\n", node->name);
+        return;
+    }
+
+    struct hash_node * hn = ggml_gallocr_hash_get(galloc, node);
+    size_t offset = hn->offset;
+    int buffer_id = hn->buffer_id;
+    struct ggml_dyn_tallocr * alloc = galloc->buf_tallocs[buffer_id];
+    ggml_backend_buffer_type_t buft = galloc->bufts[buffer_id];
+    size_t size = ggml_backend_buft_get_alloc_size(buft, node);
+    ggml_dyn_tallocr_free_tensor(alloc, offset, size, node);
+    hn->allocated = false;
+}
+
+static int get_node_buffer_id(const int * node_buffer_ids, int i) {
+    return node_buffer_ids ? node_buffer_ids[i] : 0;
+}
+
+static void ggml_gallocr_alloc_graph_impl(ggml_gallocr_t galloc, struct ggml_cgraph * graph, const int * node_buffer_ids, const int * leaf_buffer_ids) {
+    // clear hash tables
+    memset(galloc->hash_set.keys, 0, galloc->hash_set.size * sizeof(struct ggml_tensor *));
+    memset(galloc->hash_values,   0, galloc->hash_set.size * sizeof(struct hash_node));
+
+    // allocate leafs
+    // these may be tensors that the application is not using in the graph, but may still want to allocate for other purposes
+    for (int i = 0; i < graph->n_leafs; i++) {
+        struct ggml_tensor * leaf = graph->leafs[i];
+        ggml_gallocr_allocate_node(galloc, leaf, get_node_buffer_id(leaf_buffer_ids, i));
+    }
+
+    // count number of children and views
+    // allocate other graph inputs and leafs first to avoid overwriting them
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+
+        // TODO: better way to add external dependencies
+        // GGML_OP_NONE does not appear normally in the graph nodes, but is used by ggml-backend to add dependencies to
+        // control when some tensors are allocated and freed. in this case, the dependencies are in `src`, but the node
+        // itself is never used and should not be considered a dependency
+        if (ggml_is_view(node) && node->op != GGML_OP_NONE) {
+            struct ggml_tensor * view_src = node->view_src;
+            ggml_gallocr_hash_get(galloc, view_src)->n_views += 1;
+        }
+
+        if (node->flags & GGML_TENSOR_FLAG_INPUT) {
+            ggml_gallocr_allocate_node(galloc, graph->nodes[i], get_node_buffer_id(node_buffer_ids, i));
+        }
+
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            struct ggml_tensor * src = node->src[j];
+            if (src == NULL) {
+                continue;
+            }
+
+            ggml_gallocr_hash_get(galloc, src)->n_children += 1;
+
+            // allocate explicit inputs
+            if (src->flags & GGML_TENSOR_FLAG_INPUT) {
+                ggml_gallocr_allocate_node(galloc, src, get_node_buffer_id(node_buffer_ids, i));
+            }
+        }
+    }
+
+    // allocate tensors
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+        int buffer_id = get_node_buffer_id(node_buffer_ids, i);
+
+        // allocate parents (only leafs need to be allocated at this point)
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            struct ggml_tensor * parent = node->src[j];
+            if (parent == NULL) {
+                continue;
+            }
+            ggml_gallocr_allocate_node(galloc, parent, buffer_id);
+        }
+
+        // allocate node
+        ggml_gallocr_allocate_node(galloc, node, buffer_id);
+
+        AT_PRINTF("exec: %s (%s) <= ", ggml_op_desc(node), node->name);
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            struct ggml_tensor * parent = node->src[j];
+            if (parent == NULL) {
+                continue;
+            }
+            AT_PRINTF("%s", parent->name);
+            if (j < GGML_MAX_SRC - 1 && node->src[j + 1] != NULL) {
+                AT_PRINTF(", ");
+            }
+        }
+        AT_PRINTF("\n");
+
+        // update parents
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            struct ggml_tensor * parent = node->src[j];
+            if (parent == NULL) {
+                continue;
+            }
+            struct hash_node * p_hn = ggml_gallocr_hash_get(galloc, parent);
+            p_hn->n_children -= 1;
+
+            AT_PRINTF("parent %s: %d children, %d views, allocated: %d\n",
+                parent->name, p_hn->n_children, p_hn->n_views, p_hn->allocated);
+
+            if (p_hn->n_children == 0 && p_hn->n_views == 0) {
+                if (ggml_is_view(parent)) {
+                    struct ggml_tensor * view_src = parent->view_src;
+                    struct hash_node * view_src_hn = ggml_gallocr_hash_get(galloc, view_src);
+                    view_src_hn->n_views -= 1;
+                    AT_PRINTF("view_src %s: %d children, %d views\n",
+                        view_src->name, view_src_hn->n_children, view_src_hn->n_views);
+                    if (view_src_hn->n_views == 0 && view_src_hn->n_children == 0 && view_src_hn->allocated) {
+                        ggml_gallocr_free_node(galloc, view_src);
+                    }
+                }
+                else if (p_hn->allocated) {
+                    ggml_gallocr_free_node(galloc, parent);
+                }
+            }
+            AT_PRINTF("\n");
+        }
+    }
+}
+
+bool ggml_gallocr_reserve_n(ggml_gallocr_t galloc, struct ggml_cgraph * graph, const int * node_buffer_ids, const int * leaf_buffer_ids) {
+    size_t hash_size = graph->visited_hash_table.size;
+
+    // initialize hash table
+    if (galloc->hash_set.size < hash_size) {
+        free(galloc->hash_set.keys);
+        free(galloc->hash_values);
+        galloc->hash_set.size = hash_size;
+        galloc->hash_set.keys = calloc(hash_size, sizeof(struct ggml_tensor *));
+        galloc->hash_values   = calloc(hash_size, sizeof(struct hash_node));
+        GGML_ASSERT(galloc->hash_set.keys != NULL);
+        GGML_ASSERT(galloc->hash_values != NULL);
+    } else {
+        // reset hash table
+        memset(galloc->hash_set.keys, 0, sizeof(struct ggml_tensor *) * galloc->hash_set.size);
+        memset(galloc->hash_values,   0, sizeof(struct hash_node) * galloc->hash_set.size);
+    }
+
+    // reset allocators
+    for (int i = 0; i < galloc->n_buffers; i++) {
+        ggml_dyn_tallocr_reset(galloc->buf_tallocs[i]);
+    }
+
+    // allocate in hash table
+    ggml_gallocr_alloc_graph_impl(galloc, graph, node_buffer_ids, leaf_buffer_ids);
+
+    // set the node_allocs from the hash table
+    if (galloc->n_nodes < graph->n_nodes) {
+        free(galloc->node_allocs);
+        galloc->node_allocs = calloc(graph->n_nodes, sizeof(struct node_alloc));
+        GGML_ASSERT(galloc->node_allocs != NULL);
+    }
+    galloc->n_nodes = graph->n_nodes;
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+        struct node_alloc * node_alloc = &galloc->node_allocs[i];
+        if (node->view_src || node->data) {
+            node_alloc->dst.buffer_id = -1;
+            node_alloc->dst.offset = SIZE_MAX;
+            node_alloc->dst.size_max = 0;
+        } else {
+            struct hash_node * hn = ggml_gallocr_hash_get(galloc, node);
+            node_alloc->dst.buffer_id = hn->buffer_id;
+            node_alloc->dst.offset    = hn->offset;
+            node_alloc->dst.size_max  = ggml_backend_buft_get_alloc_size(galloc->bufts[hn->buffer_id], node);
+        }
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            struct ggml_tensor * src = node->src[j];
+            if (!src || src->view_src || src->data) {
+                node_alloc->src[j].buffer_id = -1;
+                node_alloc->src[j].offset = SIZE_MAX;
+                node_alloc->src[j].size_max = 0;
+            } else {
+                struct hash_node * hn = ggml_gallocr_hash_get(galloc, src);
+                node_alloc->src[j].buffer_id = hn->buffer_id;
+                node_alloc->src[j].offset   = hn->offset;
+                node_alloc->src[j].size_max = ggml_backend_buft_get_alloc_size(galloc->bufts[hn->buffer_id], src);
+            }
+        }
+    }
+    if (galloc->n_leafs < graph->n_leafs) {
+        free(galloc->leaf_allocs);
+        galloc->leaf_allocs = calloc(graph->n_leafs, sizeof(galloc->leaf_allocs[0]));
+        GGML_ASSERT(galloc->leaf_allocs != NULL);
+    }
+    galloc->n_leafs = graph->n_leafs;
+    for (int i = 0; i < graph->n_leafs; i++) {
+        struct ggml_tensor * leaf = graph->leafs[i];
+        struct hash_node * hn = ggml_gallocr_hash_get(galloc, leaf);
+        galloc->leaf_allocs[i].buffer_id = hn->buffer_id;
+        if (leaf->view_src || leaf->data) {
+            galloc->leaf_allocs[i].leaf.buffer_id = -1;
+            galloc->leaf_allocs[i].leaf.offset = SIZE_MAX;
+            galloc->leaf_allocs[i].leaf.size_max = 0;
+        } else {
+            galloc->leaf_allocs[i].leaf.buffer_id = hn->buffer_id;
+            galloc->leaf_allocs[i].leaf.offset = hn->offset;
+            galloc->leaf_allocs[i].leaf.size_max = ggml_backend_buft_get_alloc_size(galloc->bufts[hn->buffer_id], leaf);
+        }
+    }
+
+    // reallocate buffers if needed
+    for (int i = 0; i < galloc->n_buffers; i++) {
+        // if the buffer type is used multiple times, we reuse the same buffer
+        for (int j = 0; j < i; j++) {
+            if (galloc->buf_tallocs[j] == galloc->buf_tallocs[i]) {
+                galloc->buffers[i] = galloc->buffers[j];
+                break;
+            }
+        }
+
+        size_t cur_size = galloc->buffers[i] ? ggml_backend_buffer_get_size(galloc->buffers[i]) : 0;
+        size_t new_size = ggml_dyn_tallocr_max_size(galloc->buf_tallocs[i]);
+
+        // even if there are no tensors allocated in this buffer, we still need to allocate it to initialize views
+        if (new_size > cur_size || galloc->buffers[i] == NULL) {
+#ifndef NDEBUG
+            fprintf(stderr, "%s: reallocating %s buffer from size %.02f MiB to %.02f MiB\n", __func__, ggml_backend_buft_name(galloc->bufts[i]), cur_size / 1024.0 / 1024.0, new_size / 1024.0 / 1024.0);
+#endif
+
+            ggml_backend_buffer_free(galloc->buffers[i]);
+            galloc->buffers[i] = ggml_backend_buft_alloc_buffer(galloc->bufts[i], new_size);
+            if (galloc->buffers[i] == NULL) {
+                fprintf(stderr, "%s: failed to allocate %s buffer of size %zu\n", __func__, ggml_backend_buft_name(galloc->bufts[i]), new_size);
+                return false;
+            }
+        }
+    }
+
+    return true;
+}
+
+bool ggml_gallocr_reserve(ggml_gallocr_t galloc, struct ggml_cgraph *graph) {
+    return ggml_gallocr_reserve_n(galloc, graph, NULL, NULL);
+}
+
+static void ggml_gallocr_init_tensor(ggml_gallocr_t galloc, struct ggml_tensor * tensor, struct tensor_alloc * tensor_alloc) {
+    int buffer_id = tensor_alloc->buffer_id;
+    assert(tensor->data || tensor->view_src || ggml_backend_buffer_get_alloc_size(galloc->buffers[buffer_id], tensor) <= tensor_alloc->size_max);
+
+    if (tensor->view_src != NULL) {
+        if (tensor->buffer == NULL) {
+            assert(tensor_alloc->offset == SIZE_MAX);
+            if (tensor->view_src->buffer == NULL) {
+                // this tensor was allocated without ggml-backend
+                return;
+            }
+            ggml_backend_view_init(tensor);
+        }
+    } else {
+        if (tensor->data == NULL) {
+            assert(tensor_alloc->offset != SIZE_MAX);
+            assert(ggml_backend_buffer_get_alloc_size(galloc->buffers[buffer_id], tensor) <= tensor_alloc->size_max);
+            void * base = ggml_backend_buffer_get_base(galloc->buffers[buffer_id]);
+            void * addr = (char *)base + tensor_alloc->offset;
+            ggml_backend_tensor_alloc(galloc->buffers[buffer_id], tensor, addr);
+        } else {
+            if (tensor->buffer == NULL) {
+                // this tensor was allocated without ggml-backend
+                return;
+            }
+        }
+    }
+}
+
+static bool ggml_gallocr_node_needs_realloc(ggml_gallocr_t galloc, struct ggml_tensor * node, struct tensor_alloc * talloc) {
+    ggml_backend_buffer_type_t buft = talloc->buffer_id != -1 ? galloc->bufts[talloc->buffer_id] : NULL;
+    size_t node_size = (node->data || node->view_src) ? 0 : ggml_backend_buft_get_alloc_size(buft, node);
+    return talloc->size_max >= node_size;
+}
+
+static bool ggml_gallocr_needs_realloc(ggml_gallocr_t galloc, struct ggml_cgraph * graph) {
+    if (galloc->n_nodes != graph->n_nodes) {
+#ifndef NDEBUG
+        fprintf(stderr, "%s: graph has different number of nodes\n", __func__);
+#endif
+        return true;
+    }
+
+    if (galloc->n_leafs != graph->n_leafs) {
+#ifndef NDEBUG
+        fprintf(stderr, "%s: graph has different number of leafs\n", __func__);
+#endif
+        return true;
+    }
+
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+        struct node_alloc * node_alloc = &galloc->node_allocs[i];
+
+        if (!ggml_gallocr_node_needs_realloc(galloc, node, &node_alloc->dst)) {
+#ifndef NDEBUG
+            fprintf(stderr, "%s: node %s is not valid\n", __func__, node->name);
+#endif
+            return true;
+        }
+
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            struct ggml_tensor * src = node->src[j];
+            if (src == NULL) {
+                continue;
+            }
+            if (!ggml_gallocr_node_needs_realloc(galloc, src, &node_alloc->src[j])) {
+#ifndef NDEBUG
+                fprintf(stderr, "%s: src %d (%s) of node %s is not valid\n", __func__, j, src->name, node->name);
+#endif
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+bool ggml_gallocr_alloc_graph(ggml_gallocr_t galloc, struct ggml_cgraph * graph) {
+    if (ggml_gallocr_needs_realloc(galloc, graph)) {
+        if (galloc->n_buffers == 1) {
+#ifndef NDEBUG
+            fprintf(stderr, "%s: reallocating buffers automatically\n", __func__);
+#endif
+            if (!ggml_gallocr_reserve(galloc, graph)) {
+                return false;
+            }
+        } else {
+#ifndef NDEBUG
+            fprintf(stderr, "%s: cannot reallocate multi buffer graph automatically, call reserve\n", __func__);
+#endif
+            return false;
+        }
+    }
+
+    // reset buffers
+    for (int i = 0; i < galloc->n_buffers; i++) {
+        if (galloc->buffers[i] != NULL) {
+            ggml_backend_buffer_reset(galloc->buffers[i]);
+        }
+    }
+
+    // allocate the graph tensors from the previous assignments
+    // leafs
+    for (int i = 0; i < graph->n_leafs; i++) {
+        struct ggml_tensor * leaf = graph->leafs[i];
+        struct leaf_alloc * leaf_alloc = &galloc->leaf_allocs[i];
+        ggml_gallocr_init_tensor(galloc, leaf, &leaf_alloc->leaf);
+    }
+    // nodes
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+        struct node_alloc * node_alloc = &galloc->node_allocs[i];
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            struct ggml_tensor * src = node->src[j];
+            if (src == NULL) {
+                continue;
+            }
+            ggml_gallocr_init_tensor(galloc, src, &node_alloc->src[j]);
+        }
+        ggml_gallocr_init_tensor(galloc, node, &node_alloc->dst);
+    }
+
+    return true;
+}
+
+size_t ggml_gallocr_get_buffer_size(ggml_gallocr_t galloc, int buffer_id) {
+    GGML_ASSERT(buffer_id >= 0 && buffer_id < galloc->n_buffers);
+
+    if (galloc->buffers[buffer_id] == NULL) {
+        return 0;
+    }
+
+    for (int i = 0; i < buffer_id; i++) {
+        if (galloc->buffers[i] == galloc->buffers[buffer_id]) {
+            // this buffer is the same as a previous one due to the same buffer type being used multiple times
+            // only return the buffer size the first time it appears to avoid double counting
+            return 0;
+        }
+    }
+
+    return ggml_backend_buffer_get_size(galloc->buffers[buffer_id]);
+}
+
+// utils
+
+static bool alloc_tensor_range(struct ggml_context * ctx,
+        struct ggml_tensor * first, struct ggml_tensor * last,
+        ggml_backend_buffer_type_t buft, size_t size,
+        ggml_backend_buffer_t ** buffers, size_t * n_buffers) {
+    ggml_backend_buffer_t buffer = ggml_backend_buft_alloc_buffer(buft, size);
+    if (buffer == NULL) {
+#ifndef NDEBUG
+        fprintf(stderr, "%s: failed to allocate %s buffer of size %zu\n", __func__, ggml_backend_buft_name(buft), size);
+#endif
+        for (size_t i = 0; i < *n_buffers; i++) {
+            ggml_backend_buffer_free((*buffers)[i]);
+        }
+        free(*buffers);
+        return false;
+    }
+
+    struct ggml_tallocr tallocr = ggml_tallocr_new(buffer);
+
+    for (struct ggml_tensor * t = first; t != last; t = ggml_get_next_tensor(ctx, t)) {
+        if (t->data == NULL) {
+            if (t->view_src == NULL) {
+                ggml_tallocr_alloc(&tallocr, t);
+            } else if (t->buffer == NULL) {
+                ggml_backend_view_init(t);
+            }
+        } else {
+            if (t->view_src != NULL && t->buffer == NULL) {
+                // view of a pre-allocated tensor
+                ggml_backend_view_init(t);
+            }
+        }
+    }
+
+    *buffers = realloc(*buffers, sizeof(ggml_backend_buffer_t) * (*n_buffers + 1));
+    (*buffers)[(*n_buffers)++] = buffer;
+
+    return true;
+}
+
+ggml_backend_buffer_t ggml_backend_alloc_ctx_tensors_from_buft(struct ggml_context * ctx, ggml_backend_buffer_type_t buft) {
+    GGML_ASSERT(ggml_get_no_alloc(ctx) == true);
+
+    size_t alignment = ggml_backend_buft_get_alignment(buft);
+    size_t max_size = ggml_backend_buft_get_max_size(buft);
+
+    ggml_backend_buffer_t * buffers = NULL;
+    size_t n_buffers = 0;
+
+    size_t cur_buf_size = 0;
+    struct ggml_tensor * first = ggml_get_first_tensor(ctx);
+    for (struct ggml_tensor * t = first; t != NULL; t = ggml_get_next_tensor(ctx, t)) {
+        size_t this_size = 0;
+        if (t->data == NULL && t->view_src == NULL) {
+            this_size = GGML_PAD(ggml_backend_buft_get_alloc_size(buft, t), alignment);
+        }
+
+        if (this_size > max_size) {
+            fprintf(stderr, "%s: tensor %s is too large to fit in a %s buffer (tensor size: %zu, max buffer size: %zu)\n",
+                    __func__, t->name,
+                    ggml_backend_buft_name(buft),
+                    this_size, max_size);
+            for (size_t i = 0; i < n_buffers; i++) {
+                ggml_backend_buffer_free(buffers[i]);
+            }
+            free(buffers);
+            return NULL;
+        }
+
+        if ((cur_buf_size + this_size) > max_size) {
+            // allocate tensors in the current buffer
+            if (!alloc_tensor_range(ctx, first, t, buft, cur_buf_size, &buffers, &n_buffers)) {
+                return NULL;
+            }
+            first = t;
+            cur_buf_size = this_size;
+        } else {
+            cur_buf_size += this_size;
+        }
+    }
+
+    // allocate remaining tensors
+    if (cur_buf_size > 0) {
+        if (!alloc_tensor_range(ctx, first, NULL, buft, cur_buf_size, &buffers, &n_buffers)) {
+            return NULL;
+        }
+    }
+
+    if (n_buffers == 0) {
+#ifndef NDEBUG
+        fprintf(stderr, "%s: all tensors in the context are already allocated\n", __func__);
+#endif
+        return NULL;
+    }
+
+    ggml_backend_buffer_t buffer;
+    if (n_buffers == 1) {
+        buffer = buffers[0];
+    } else {
+        buffer = ggml_backend_multi_buffer_alloc_buffer(buffers, n_buffers);
+    }
+    free(buffers);
+    return buffer;
+}
+
+ggml_backend_buffer_t ggml_backend_alloc_ctx_tensors(struct ggml_context * ctx, ggml_backend_t backend) {
+    return ggml_backend_alloc_ctx_tensors_from_buft(ctx, ggml_backend_get_default_buffer_type(backend));
+}
diff --git a/ggml/src/ggml-backend-impl.h b/ggml/src/ggml-backend-impl.h
new file mode 100644 (file)
index 0000000..36ca370
--- /dev/null
@@ -0,0 +1,153 @@
+#pragma once
+
+// ggml-backend internal header
+
+#include "ggml-backend.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+    //
+    // Backend buffer
+    //
+
+    // buffer type
+    typedef void * ggml_backend_buffer_type_context_t;
+
+    struct ggml_backend_buffer_type_i {
+        const char *          (*GGML_CALL get_name)        (ggml_backend_buffer_type_t buft);
+        // allocate a buffer of this type
+        ggml_backend_buffer_t (*GGML_CALL alloc_buffer)    (ggml_backend_buffer_type_t buft, size_t size);
+        // tensor alignment
+        size_t                (*GGML_CALL get_alignment)   (ggml_backend_buffer_type_t buft);
+        // max buffer size that can be allocated
+        size_t                (*GGML_CALL get_max_size)    (ggml_backend_buffer_type_t buft);
+        // data size needed to allocate the tensor, including padding
+        size_t                (*GGML_CALL get_alloc_size)  (ggml_backend_buffer_type_t buft, const struct ggml_tensor * tensor);
+        // check if tensor data is in host memory
+        bool                  (*GGML_CALL is_host)         (ggml_backend_buffer_type_t buft);
+    };
+
+    struct ggml_backend_buffer_type {
+        struct ggml_backend_buffer_type_i  iface;
+        ggml_backend_buffer_type_context_t context;
+    };
+
+    // buffer
+    typedef void * ggml_backend_buffer_context_t;
+
+    struct ggml_backend_buffer_i {
+        const char * (*GGML_CALL get_name)   (ggml_backend_buffer_t buffer);
+        void         (*GGML_CALL free_buffer)(ggml_backend_buffer_t buffer);
+        void *       (*GGML_CALL get_base)   (ggml_backend_buffer_t buffer);
+        void         (*GGML_CALL init_tensor)(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor);
+        void         (*GGML_CALL set_tensor) (ggml_backend_buffer_t buffer,       struct ggml_tensor * tensor, const void * data, size_t offset, size_t size);
+        void         (*GGML_CALL get_tensor) (ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor,       void * data, size_t offset, size_t size);
+        bool         (*GGML_CALL cpy_tensor) (ggml_backend_buffer_t buffer, const struct ggml_tensor * src, struct ggml_tensor * dst); // dst is in the buffer, src may be in any buffer
+        void         (*GGML_CALL clear)      (ggml_backend_buffer_t buffer, uint8_t value);
+        void         (*GGML_CALL reset)      (ggml_backend_buffer_t buffer); // reset any internal state due to tensor initialization, such as tensor extras
+    };
+
+    struct ggml_backend_buffer {
+        struct ggml_backend_buffer_i  iface;
+        ggml_backend_buffer_type_t    buft;
+        ggml_backend_buffer_context_t context;
+        size_t size;
+        enum ggml_backend_buffer_usage usage;
+    };
+
+    GGML_CALL ggml_backend_buffer_t ggml_backend_buffer_init(
+                   ggml_backend_buffer_type_t      buft,
+            struct ggml_backend_buffer_i           iface,
+                   ggml_backend_buffer_context_t   context,
+                   size_t                          size);
+
+    // do not use directly, use ggml_backend_tensor_copy instead
+    bool ggml_backend_buffer_copy_tensor(const struct ggml_tensor * src, struct ggml_tensor * dst);
+
+    // buffer that contains a collection of buffers
+    GGML_CALL ggml_backend_buffer_t ggml_backend_multi_buffer_alloc_buffer(ggml_backend_buffer_t * buffers, size_t n_buffers);
+    GGML_CALL bool                  ggml_backend_buffer_is_multi_buffer(ggml_backend_buffer_t buffer);
+    GGML_CALL void                  ggml_backend_multi_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage);
+
+    //
+    // Backend
+    //
+
+    typedef void * ggml_backend_context_t;
+
+    struct ggml_backend_i {
+        const char * (*GGML_CALL get_name)(ggml_backend_t backend);
+
+        void (*GGML_CALL free)(ggml_backend_t backend);
+
+        // buffer allocation
+        ggml_backend_buffer_type_t (*GGML_CALL get_default_buffer_type)(ggml_backend_t backend);
+
+        // (optional) asynchronous tensor data access
+        void (*GGML_CALL set_tensor_async)(ggml_backend_t backend,       struct ggml_tensor * tensor, const void * data, size_t offset, size_t size);
+        void (*GGML_CALL get_tensor_async)(ggml_backend_t backend, const struct ggml_tensor * tensor,       void * data, size_t offset, size_t size);
+        bool (*GGML_CALL cpy_tensor_async)(ggml_backend_t backend_src, ggml_backend_t backend_dst, const struct ggml_tensor * src, struct ggml_tensor * dst);
+
+        // (optional) complete all pending operations
+        void (*GGML_CALL synchronize)(ggml_backend_t backend);
+
+        // compute graph with a plan (not used currently)
+        // create a new plan for a graph
+        ggml_backend_graph_plan_t (*GGML_CALL graph_plan_create) (ggml_backend_t backend, const struct ggml_cgraph * cgraph);
+        void                      (*GGML_CALL graph_plan_free)   (ggml_backend_t backend, ggml_backend_graph_plan_t plan);
+        // update the plan with a new graph - this should be faster than creating a new plan when the graph has the same topology
+        void                      (*GGML_CALL graph_plan_update) (ggml_backend_t backend, ggml_backend_graph_plan_t plan, const struct ggml_cgraph * cgraph);
+        // compute the graph with the plan
+        enum ggml_status          (*GGML_CALL graph_plan_compute)(ggml_backend_t backend, ggml_backend_graph_plan_t plan);
+
+        // compute graph without a plan (async)
+        enum ggml_status (*GGML_CALL graph_compute)     (ggml_backend_t backend, struct ggml_cgraph * cgraph);
+
+        // check if the backend can compute an operation
+        bool (*GGML_CALL supports_op)(ggml_backend_t backend, const struct ggml_tensor * op);
+
+        // check if the backend can use tensors allocated in a buffer type
+        bool (*GGML_CALL supports_buft)(ggml_backend_t backend, ggml_backend_buffer_type_t buft);
+
+        // check if the backend wants to run an operation, even if the weights are allocated in a CPU buffer
+        // these should be expensive operations with large batch sizes that may benefit from running on this backend
+        // even if the weight has to be copied from the CPU temporarily
+        bool (*GGML_CALL offload_op)(ggml_backend_t backend, const struct ggml_tensor * op);
+
+        // (optional) event synchronization
+        // create a new event that can record events on this backend instance
+        ggml_backend_event_t (*GGML_CALL event_new)         (ggml_backend_t backend);
+        void                 (*GGML_CALL event_free)        (ggml_backend_event_t event);
+        // record an event on the backend instance that created it
+        void                 (*GGML_CALL event_record)      (ggml_backend_event_t event);
+        // wait for an event on on a different backend instance
+        void                 (*GGML_CALL event_wait)        (ggml_backend_t backend, ggml_backend_event_t event);
+        // block until an event is recorded
+        void                 (*GGML_CALL event_synchronize) (ggml_backend_event_t event);
+    };
+
+    struct ggml_backend {
+        ggml_guid_t guid;
+
+        struct ggml_backend_i iface;
+        ggml_backend_context_t context;
+    };
+
+    struct ggml_backend_event {
+        ggml_backend_t backend;
+        void * context;
+    };
+
+    //
+    // Backend registry
+    //
+
+    typedef ggml_backend_t (*GGML_CALL ggml_backend_init_fn)(const char * params, void * user_data);
+
+    GGML_CALL void ggml_backend_register(const char * name, ggml_backend_init_fn init_fn, ggml_backend_buffer_type_t default_buffer_type, void * user_data);
+
+#ifdef  __cplusplus
+}
+#endif
diff --git a/ggml/src/ggml-backend.c b/ggml/src/ggml-backend.c
new file mode 100644 (file)
index 0000000..13c71c3
--- /dev/null
@@ -0,0 +1,2225 @@
+#include "ggml-backend-impl.h"
+#include "ggml-alloc.h"
+#include "ggml-impl.h"
+
+#include <assert.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+// backend buffer type
+
+const char * ggml_backend_buft_name(ggml_backend_buffer_type_t buft) {
+    return buft->iface.get_name(buft);
+}
+
+GGML_CALL ggml_backend_buffer_t ggml_backend_buft_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    return buft->iface.alloc_buffer(buft, size);
+}
+
+size_t ggml_backend_buft_get_alignment(ggml_backend_buffer_type_t buft) {
+    return buft->iface.get_alignment(buft);
+}
+
+size_t ggml_backend_buft_get_max_size(ggml_backend_buffer_type_t buft) {
+    // get_max_size is optional, defaults to SIZE_MAX
+    if (buft->iface.get_max_size) {
+        return buft->iface.get_max_size(buft);
+    }
+    return SIZE_MAX;
+}
+
+GGML_CALL size_t ggml_backend_buft_get_alloc_size(ggml_backend_buffer_type_t buft, struct ggml_tensor * tensor) {
+    // get_alloc_size is optional, defaults to ggml_nbytes
+    if (buft->iface.get_alloc_size) {
+        size_t size = buft->iface.get_alloc_size(buft, tensor);
+        assert(size >= ggml_nbytes(tensor));
+        return size;
+    }
+    return ggml_nbytes(tensor);
+}
+
+bool ggml_backend_buft_is_host(ggml_backend_buffer_type_t buft) {
+    if (buft->iface.is_host) {
+        return buft->iface.is_host(buft);
+    }
+    return false;
+}
+
+// backend buffer
+
+GGML_CALL ggml_backend_buffer_t ggml_backend_buffer_init(
+               ggml_backend_buffer_type_t      buft,
+        struct ggml_backend_buffer_i           iface,
+               ggml_backend_buffer_context_t   context,
+               size_t                          size) {
+    ggml_backend_buffer_t buffer = malloc(sizeof(struct ggml_backend_buffer));
+
+    (*buffer) = (struct ggml_backend_buffer) {
+        /* .interface = */ iface,
+        /* .buft      = */ buft,
+        /* .context   = */ context,
+        /* .size      = */ size,
+        /* .usage     = */ GGML_BACKEND_BUFFER_USAGE_ANY
+    };
+
+    return buffer;
+}
+
+const char * ggml_backend_buffer_name(ggml_backend_buffer_t buffer) {
+    return buffer->iface.get_name(buffer);
+}
+
+void ggml_backend_buffer_free(ggml_backend_buffer_t buffer) {
+    if (buffer == NULL) {
+        return;
+    }
+
+    if (buffer->iface.free_buffer != NULL) {
+        buffer->iface.free_buffer(buffer);
+    }
+    free(buffer);
+}
+
+size_t ggml_backend_buffer_get_size(ggml_backend_buffer_t buffer) {
+    return buffer->size;
+}
+
+void * ggml_backend_buffer_get_base(ggml_backend_buffer_t buffer) {
+    void * base = buffer->iface.get_base(buffer);
+
+    GGML_ASSERT(base != NULL && "backend buffer base cannot be NULL");
+
+    return base;
+}
+
+GGML_CALL void ggml_backend_buffer_init_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
+    // init_tensor is optional
+    if (buffer->iface.init_tensor) {
+        buffer->iface.init_tensor(buffer, tensor);
+    }
+}
+
+size_t ggml_backend_buffer_get_alignment (ggml_backend_buffer_t buffer) {
+    return ggml_backend_buft_get_alignment(ggml_backend_buffer_get_type(buffer));
+}
+
+size_t ggml_backend_buffer_get_max_size(ggml_backend_buffer_t buffer) {
+    return ggml_backend_buft_get_max_size(ggml_backend_buffer_get_type(buffer));
+}
+
+size_t ggml_backend_buffer_get_alloc_size(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor) {
+    return ggml_backend_buft_get_alloc_size(ggml_backend_buffer_get_type(buffer), tensor);
+}
+
+void ggml_backend_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
+    buffer->iface.clear(buffer, value);
+}
+
+bool ggml_backend_buffer_is_host(ggml_backend_buffer_t buffer) {
+    return ggml_backend_buft_is_host(ggml_backend_buffer_get_type(buffer));
+}
+
+void ggml_backend_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage) {
+    buffer->usage = usage;
+
+    // FIXME: add a generic callback to the buffer interface
+    if (ggml_backend_buffer_is_multi_buffer(buffer)) {
+        ggml_backend_multi_buffer_set_usage(buffer, usage);
+    }
+}
+
+ggml_backend_buffer_type_t ggml_backend_buffer_get_type(ggml_backend_buffer_t buffer) {
+    return buffer->buft;
+}
+
+void ggml_backend_buffer_reset(ggml_backend_buffer_t buffer) {
+    if (buffer->iface.reset) {
+        buffer->iface.reset(buffer);
+    }
+}
+
+bool ggml_backend_buffer_copy_tensor(const struct ggml_tensor * src, struct ggml_tensor * dst) {
+    ggml_backend_buffer_t dst_buf = dst->view_src ? dst->view_src->buffer : dst->buffer;
+    if (dst_buf->iface.cpy_tensor) {
+        return dst_buf->iface.cpy_tensor(dst_buf, src, dst);
+    }
+    return false;
+}
+
+// backend
+
+ggml_guid_t ggml_backend_guid(ggml_backend_t backend) {
+    if (backend == NULL) {
+        return NULL;
+    }
+    return backend->guid;
+}
+
+const char * ggml_backend_name(ggml_backend_t backend) {
+    if (backend == NULL) {
+        return "NULL";
+    }
+    return backend->iface.get_name(backend);
+}
+
+void ggml_backend_free(ggml_backend_t backend) {
+    if (backend == NULL) {
+        return;
+    }
+
+    backend->iface.free(backend);
+}
+
+ggml_backend_buffer_type_t ggml_backend_get_default_buffer_type(ggml_backend_t backend) {
+    return backend->iface.get_default_buffer_type(backend);
+}
+
+ggml_backend_buffer_t ggml_backend_alloc_buffer(ggml_backend_t backend, size_t size) {
+    return ggml_backend_buft_alloc_buffer(ggml_backend_get_default_buffer_type(backend), size);
+}
+
+size_t ggml_backend_get_alignment(ggml_backend_t backend) {
+    return ggml_backend_buft_get_alignment(ggml_backend_get_default_buffer_type(backend));
+}
+
+size_t ggml_backend_get_max_size(ggml_backend_t backend) {
+    return ggml_backend_buft_get_max_size(ggml_backend_get_default_buffer_type(backend));
+}
+
+void ggml_backend_tensor_set_async(ggml_backend_t backend, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    GGML_ASSERT(tensor->data != NULL && "tensor not allocated");
+    GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor write out of bounds");
+
+    if (backend->iface.set_tensor_async == NULL) {
+        ggml_backend_tensor_set(tensor, data, offset, size);
+    } else {
+        backend->iface.set_tensor_async(backend, tensor, data, offset, size);
+    }
+}
+
+void ggml_backend_tensor_get_async(ggml_backend_t backend, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    GGML_ASSERT(tensor->data != NULL && "tensor not allocated");
+    GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor read out of bounds");
+
+    if (backend->iface.get_tensor_async == NULL) {
+        ggml_backend_tensor_get(tensor, data, offset, size);
+    } else {
+        backend->iface.get_tensor_async(backend, tensor, data, offset, size);
+    }
+}
+
+GGML_CALL void ggml_backend_tensor_set(struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
+
+    GGML_ASSERT(buf != NULL && "tensor buffer not set");
+    GGML_ASSERT(tensor->data != NULL && "tensor not allocated");
+    GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor write out of bounds");
+
+    if (!size) {
+        return;
+    }
+
+    buf->iface.set_tensor(buf, tensor, data, offset, size);
+}
+
+GGML_CALL void ggml_backend_tensor_get(const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
+
+    GGML_ASSERT(buf != NULL && "tensor buffer not set");
+    GGML_ASSERT(tensor->data != NULL && "tensor not allocated");
+    GGML_ASSERT(offset + size <= ggml_nbytes(tensor) && "tensor read out of bounds");
+
+    if (!size) {
+        return;
+    }
+
+    buf->iface.get_tensor(buf, tensor, data, offset, size);
+}
+
+void ggml_backend_synchronize(ggml_backend_t backend) {
+    if (backend->iface.synchronize == NULL) {
+        return;
+    }
+
+    backend->iface.synchronize(backend);
+}
+
+ggml_backend_graph_plan_t ggml_backend_graph_plan_create(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
+    GGML_ASSERT(backend->iface.graph_plan_create != NULL);
+
+    return backend->iface.graph_plan_create(backend, cgraph);
+}
+
+void ggml_backend_graph_plan_free(ggml_backend_t backend, ggml_backend_graph_plan_t plan) {
+    GGML_ASSERT(backend->iface.graph_plan_free != NULL);
+
+    backend->iface.graph_plan_free(backend, plan);
+}
+
+enum ggml_status ggml_backend_graph_plan_compute(ggml_backend_t backend, ggml_backend_graph_plan_t plan) {
+    GGML_ASSERT(backend->iface.graph_plan_compute != NULL);
+
+    return backend->iface.graph_plan_compute(backend, plan);
+}
+
+enum ggml_status ggml_backend_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
+    enum ggml_status err = ggml_backend_graph_compute_async(backend, cgraph);
+    ggml_backend_synchronize(backend);
+    return err;
+}
+
+enum ggml_status ggml_backend_graph_compute_async(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
+    return backend->iface.graph_compute(backend, cgraph);
+}
+
+bool ggml_backend_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
+    return backend->iface.supports_op(backend, op);
+}
+
+bool ggml_backend_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
+    return backend->iface.supports_buft(backend, buft);
+}
+
+bool ggml_backend_offload_op(ggml_backend_t backend, const struct ggml_tensor * op) {
+    if (backend->iface.offload_op != NULL) {
+        return backend->iface.offload_op(backend, op);
+    }
+    return false;
+}
+
+// backend copy
+
+static bool ggml_are_same_layout(const struct ggml_tensor * a, const struct ggml_tensor * b) {
+    if (a->type != b->type) {
+        return false;
+    }
+    for (int i = 0; i < GGML_MAX_DIMS; i++) {
+        if (a->ne[i] != b->ne[i]) {
+            return false;
+        }
+        if (a->nb[i] != b->nb[i]) {
+            return false;
+        }
+    }
+    return true;
+}
+
+void ggml_backend_tensor_copy(struct ggml_tensor * src, struct ggml_tensor * dst) {
+    GGML_ASSERT(ggml_are_same_layout(src, dst) && "cannot copy tensors with different layouts");
+
+    if (src == dst) {
+        return;
+    }
+
+    if (ggml_backend_buffer_is_host(src->buffer)) {
+        ggml_backend_tensor_set(dst, src->data, 0, ggml_nbytes(src));
+    } else if (ggml_backend_buffer_is_host(dst->buffer)) {
+        ggml_backend_tensor_get(src, dst->data, 0, ggml_nbytes(src));
+    } else if (!ggml_backend_buffer_copy_tensor(src, dst)) {
+#ifndef NDEBUG
+        fprintf(stderr, "%s: warning: slow copy from %s to %s\n", __func__, ggml_backend_buffer_name(src->buffer), ggml_backend_buffer_name(dst->buffer));
+#endif
+        size_t nbytes = ggml_nbytes(src);
+        void * data = malloc(nbytes);
+        ggml_backend_tensor_get(src, data, 0, nbytes);
+        ggml_backend_tensor_set(dst, data, 0, nbytes);
+        free(data);
+    }
+}
+
+void ggml_backend_tensor_copy_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, struct ggml_tensor * src, struct ggml_tensor * dst) {
+    GGML_ASSERT(ggml_are_same_layout(src, dst) && "cannot copy tensors with different layouts");
+
+    if (src == dst) {
+        return;
+    }
+
+    if (backend_dst->iface.cpy_tensor_async != NULL) {
+        if (backend_dst->iface.cpy_tensor_async(backend_src, backend_dst, src, dst)) {
+            return;
+        }
+    }
+
+    // an async copy would normally happen after all the queued operations on both backends are completed
+    // sync src, set_async dst
+    if (ggml_backend_buffer_is_host(src->buffer)) {
+        ggml_backend_synchronize(backend_src);
+        ggml_backend_tensor_set_async(backend_dst, dst, src->data, 0, ggml_nbytes(src));
+    } else {
+        ggml_backend_synchronize(backend_src);
+        ggml_backend_tensor_copy(src, dst);
+        ggml_backend_synchronize(backend_dst);
+    }
+}
+
+// events
+
+ggml_backend_event_t ggml_backend_event_new(ggml_backend_t backend) {
+    if (backend->iface.event_new == NULL) {
+        return NULL;
+    }
+    return backend->iface.event_new(backend);
+}
+
+void ggml_backend_event_free(ggml_backend_event_t event) {
+    if (event == NULL) {
+        return;
+    }
+    event->backend->iface.event_free(event);
+}
+
+void ggml_backend_event_record(ggml_backend_event_t event) {
+    GGML_ASSERT(event->backend->iface.event_record != NULL);
+
+    event->backend->iface.event_record(event);
+}
+
+void ggml_backend_event_synchronize(ggml_backend_event_t event) {
+    GGML_ASSERT(event->backend->iface.event_synchronize != NULL);
+
+    event->backend->iface.event_synchronize(event);
+}
+
+void ggml_backend_event_wait(ggml_backend_t backend, ggml_backend_event_t event) {
+    GGML_ASSERT(backend->iface.event_wait != NULL);
+
+    backend->iface.event_wait(backend, event);
+}
+
+// backend registry
+
+#define GGML_REG_MAX_BACKENDS 16
+
+struct ggml_backend_reg {
+    char name[128];
+    ggml_backend_init_fn init_fn;
+    ggml_backend_buffer_type_t default_buffer_type;
+    void * user_data;
+};
+
+static struct ggml_backend_reg ggml_backend_registry[GGML_REG_MAX_BACKENDS];
+static size_t ggml_backend_registry_count = 0;
+
+GGML_CALL static ggml_backend_t ggml_backend_reg_cpu_init(const char * params, void * user_data);
+
+GGML_CALL static void ggml_backend_registry_init(void) {
+    static bool initialized = false;
+
+    if (initialized) {
+        return;
+    }
+
+    initialized = true;
+
+    ggml_backend_register("CPU", ggml_backend_reg_cpu_init, ggml_backend_cpu_buffer_type(), NULL);
+
+    // add forward decls here to avoid including the backend headers
+#ifdef GGML_USE_CUDA
+    extern GGML_CALL void ggml_backend_cuda_reg_devices(void);
+    ggml_backend_cuda_reg_devices();
+#endif
+
+#ifdef GGML_USE_SYCL
+    extern void ggml_backend_sycl_reg_devices(void);
+    ggml_backend_sycl_reg_devices();
+#endif
+
+#ifdef GGML_USE_METAL
+    extern GGML_CALL ggml_backend_t ggml_backend_reg_metal_init(const char * params, void * user_data);
+    extern GGML_CALL ggml_backend_buffer_type_t ggml_backend_metal_buffer_type(void);
+    ggml_backend_register("Metal", ggml_backend_reg_metal_init, ggml_backend_metal_buffer_type(), NULL);
+#endif
+
+#ifdef GGML_USE_VULKAN
+    extern GGML_CALL int ggml_backend_vk_reg_devices(void);
+    ggml_backend_vk_reg_devices();
+#endif
+
+#ifdef GGML_USE_KOMPUTE
+    extern GGML_CALL void ggml_backend_kompute_reg_devices(void);
+    ggml_backend_kompute_reg_devices();
+#endif
+}
+
+GGML_CALL void ggml_backend_register(const char * name, ggml_backend_init_fn init_fn, ggml_backend_buffer_type_t default_buffer_type, void * user_data) {
+    GGML_ASSERT(ggml_backend_registry_count < GGML_REG_MAX_BACKENDS);
+
+    size_t id = ggml_backend_registry_count;
+
+    ggml_backend_registry[id] = (struct ggml_backend_reg) {
+        /* .name                = */ {0},
+        /* .fn                  = */ init_fn,
+        /* .default_buffer_type = */ default_buffer_type,
+        /* .user_data           = */ user_data,
+    };
+
+    snprintf(ggml_backend_registry[id].name, sizeof(ggml_backend_registry[id].name), "%s", name);
+
+#ifndef NDEBUG
+    fprintf(stderr, "%s: registered backend %s\n", __func__, name);
+#endif
+
+    ggml_backend_registry_count++;
+}
+
+size_t ggml_backend_reg_get_count(void) {
+    ggml_backend_registry_init();
+
+    return ggml_backend_registry_count;
+}
+
+size_t ggml_backend_reg_find_by_name(const char * name) {
+    ggml_backend_registry_init();
+
+    for (size_t i = 0; i < ggml_backend_registry_count; i++) {
+        // TODO: case insensitive in a portable way
+        if (strcmp(ggml_backend_registry[i].name, name) == 0) {
+            return i;
+        }
+    }
+
+    // not found
+    return SIZE_MAX;
+}
+
+// init from backend:params string
+ggml_backend_t ggml_backend_reg_init_backend_from_str(const char * backend_str) {
+    ggml_backend_registry_init();
+
+    const char * params = strchr(backend_str, ':');
+    char backend_name[128];
+    if (params == NULL) {
+        snprintf(backend_name, sizeof(backend_name), "%s", backend_str);
+        params = "";
+    } else {
+        snprintf(backend_name, sizeof(backend_name), "%.*s", (int)(params - backend_str), backend_str);
+        params++;
+    }
+
+    size_t backend_i = ggml_backend_reg_find_by_name(backend_name);
+
+    if (backend_i == SIZE_MAX) {
+        fprintf(stderr, "%s: backend %s not found\n", __func__, backend_name);
+        return NULL;
+    }
+
+    return ggml_backend_reg_init_backend(backend_i, params);
+}
+
+const char * ggml_backend_reg_get_name(size_t i) {
+    ggml_backend_registry_init();
+
+    GGML_ASSERT(i < ggml_backend_registry_count);
+    return ggml_backend_registry[i].name;
+}
+
+ggml_backend_t ggml_backend_reg_init_backend(size_t i, const char * params) {
+    ggml_backend_registry_init();
+
+    GGML_ASSERT(i < ggml_backend_registry_count);
+    return ggml_backend_registry[i].init_fn(params, ggml_backend_registry[i].user_data);
+}
+
+ggml_backend_buffer_type_t ggml_backend_reg_get_default_buffer_type(size_t i) {
+    ggml_backend_registry_init();
+
+    GGML_ASSERT(i < ggml_backend_registry_count);
+    return ggml_backend_registry[i].default_buffer_type;
+}
+
+ggml_backend_buffer_t ggml_backend_reg_alloc_buffer(size_t i, size_t size) {
+    ggml_backend_registry_init();
+
+    GGML_ASSERT(i < ggml_backend_registry_count);
+    return ggml_backend_buft_alloc_buffer(ggml_backend_registry[i].default_buffer_type, size);
+}
+
+// backend CPU
+
+static const size_t TENSOR_ALIGNMENT = 32; // required for mmap as gguf only guarantees 32-byte alignment
+
+GGML_CALL static const char * ggml_backend_cpu_buffer_name(ggml_backend_buffer_t buffer) {
+    return "CPU";
+
+    GGML_UNUSED(buffer);
+}
+
+GGML_CALL static void * ggml_backend_cpu_buffer_get_base(ggml_backend_buffer_t buffer) {
+    uintptr_t data = (uintptr_t)buffer->context;
+
+    // align the buffer
+    if (data % TENSOR_ALIGNMENT != 0) {
+        data = GGML_PAD(data, TENSOR_ALIGNMENT);
+    }
+
+    return (void *)data;
+}
+
+GGML_CALL static void ggml_backend_cpu_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    free(buffer->context);
+}
+
+GGML_CALL static void ggml_backend_cpu_buffer_set_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    memcpy((char *)tensor->data + offset, data, size);
+
+    GGML_UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_cpu_buffer_get_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    memcpy(data, (const char *)tensor->data + offset, size);
+
+    GGML_UNUSED(buffer);
+}
+
+GGML_CALL static bool ggml_backend_cpu_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * src, struct ggml_tensor * dst) {
+    if (ggml_backend_buffer_is_host(src->buffer)) {
+        memcpy(dst->data, src->data, ggml_nbytes(src));
+        return true;
+    }
+    return false;
+
+    GGML_UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_cpu_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
+    memset(buffer->context, value, buffer->size);
+}
+
+static struct ggml_backend_buffer_i cpu_backend_buffer_i = {
+    /* .get_name        = */ ggml_backend_cpu_buffer_name,
+    /* .free_buffer     = */ ggml_backend_cpu_buffer_free_buffer,
+    /* .get_base        = */ ggml_backend_cpu_buffer_get_base,
+    /* .init_tensor     = */ NULL, // no initialization required
+    /* .set_tensor      = */ ggml_backend_cpu_buffer_set_tensor,
+    /* .get_tensor      = */ ggml_backend_cpu_buffer_get_tensor,
+    /* .cpy_tensor      = */ ggml_backend_cpu_buffer_cpy_tensor,
+    /* .clear           = */ ggml_backend_cpu_buffer_clear,
+    /* .reset           = */ NULL,
+};
+
+// for buffers from ptr, free is not called
+static struct ggml_backend_buffer_i cpu_backend_buffer_i_from_ptr = {
+    /* .get_name        = */ ggml_backend_cpu_buffer_name,
+    /* .free_buffer     = */ NULL, // ptr is not owned by the buffer, so it does not need to be freed
+    /* .get_base        = */ ggml_backend_cpu_buffer_get_base,
+    /* .init_tensor     = */ NULL, // no initialization required
+    /* .set_tensor      = */ ggml_backend_cpu_buffer_set_tensor,
+    /* .get_tensor      = */ ggml_backend_cpu_buffer_get_tensor,
+    /* .cpy_tensor      = */ ggml_backend_cpu_buffer_cpy_tensor,
+    /* .clear           = */ ggml_backend_cpu_buffer_clear,
+    /* .reset           = */ NULL,
+};
+
+GGML_CALL static const char * ggml_backend_cpu_buffer_type_get_name(ggml_backend_buffer_type_t buft) {
+    return "CPU";
+
+    GGML_UNUSED(buft);
+}
+
+GGML_CALL static ggml_backend_buffer_t ggml_backend_cpu_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    size += TENSOR_ALIGNMENT;   // malloc may return an address that is not aligned
+    void * data = malloc(size); // TODO: use GGML_ALIGNED_MALLOC (move to ggml-impl.h)
+    if (data == NULL) {
+        fprintf(stderr, "%s: failed to allocate buffer of size %zu\n", __func__, size);
+        return NULL;
+    }
+
+    return ggml_backend_buffer_init(buft, cpu_backend_buffer_i, data, size);
+}
+
+GGML_CALL static size_t ggml_backend_cpu_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
+    return TENSOR_ALIGNMENT;
+
+    GGML_UNUSED(buft);
+}
+
+GGML_CALL static bool ggml_backend_cpu_buffer_type_is_host(ggml_backend_buffer_type_t buft) {
+    return true;
+
+    GGML_UNUSED(buft);
+}
+
+GGML_CALL ggml_backend_buffer_type_t ggml_backend_cpu_buffer_type(void) {
+    static struct ggml_backend_buffer_type ggml_backend_cpu_buffer_type = {
+        /* .iface = */ {
+            /* .get_name         = */ ggml_backend_cpu_buffer_type_get_name,
+            /* .alloc_buffer     = */ ggml_backend_cpu_buffer_type_alloc_buffer,
+            /* .get_alignment    = */ ggml_backend_cpu_buffer_type_get_alignment,
+            /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
+            /* .get_alloc_size   = */ NULL, // defaults to ggml_nbytes
+            /* .is_host          = */ ggml_backend_cpu_buffer_type_is_host,
+        },
+        /* .context = */ NULL,
+    };
+
+    return &ggml_backend_cpu_buffer_type;
+}
+
+#ifdef GGML_USE_CPU_HBM
+
+// buffer type HBM
+
+#include <hbwmalloc.h>
+
+GGML_CALL static const char * ggml_backend_cpu_hbm_buffer_type_get_name(ggml_backend_buffer_type_t buft) {
+    return "CPU_HBM";
+
+    GGML_UNUSED(buft);
+}
+
+GGML_CALL static const char * ggml_backend_cpu_hbm_buffer_get_name(ggml_backend_buffer_t buf) {
+    return "CPU_HBM";
+
+    GGML_UNUSED(buf);
+}
+
+GGML_CALL static void ggml_backend_cpu_hbm_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    hbw_free(buffer->context);
+}
+
+GGML_CALL static ggml_backend_buffer_t ggml_backend_cpu_hbm_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    //void * ptr = hbw_malloc(size);
+    void * ptr;
+    int result = hbw_posix_memalign(&ptr, ggml_backend_cpu_buffer_type_get_alignment(buft), size);
+    if (result != 0) {
+        fprintf(stderr, "failed to allocate HBM buffer of size %zu\n", size);
+        return NULL;
+    }
+
+    ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size);
+    buffer->buft = buft;
+    buffer->iface.get_name = ggml_backend_cpu_hbm_buffer_get_name;
+    buffer->iface.free_buffer = ggml_backend_cpu_hbm_buffer_free_buffer;
+
+    return buffer;
+}
+
+ggml_backend_buffer_type_t ggml_backend_cpu_hbm_buffer_type(void) {
+    static struct ggml_backend_buffer_type ggml_backend_cpu_buffer_type_hbm = {
+        /* .iface    = */ {
+            /* .get_name         = */ ggml_backend_cpu_hbm_buffer_type_get_name,
+            /* .alloc_buffer     = */ ggml_backend_cpu_hbm_buffer_type_alloc_buffer,
+            /* .get_alignment    = */ ggml_backend_cpu_buffer_type_get_alignment,
+            /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
+            /* .get_alloc_size   = */ NULL, // defaults to ggml_nbytes
+            /* .is_host          = */ ggml_backend_cpu_buffer_type_is_host,
+        },
+        /* .context  = */ NULL,
+    };
+
+    return &ggml_backend_cpu_buffer_type_hbm;
+}
+#endif
+
+struct ggml_backend_cpu_context {
+    int n_threads;
+    void * work_data;
+    size_t work_size;
+
+    ggml_abort_callback abort_callback;
+    void *              abort_callback_data;
+};
+
+GGML_CALL static const char * ggml_backend_cpu_name(ggml_backend_t backend) {
+    return "CPU";
+
+    GGML_UNUSED(backend);
+}
+
+GGML_CALL static void ggml_backend_cpu_free(ggml_backend_t backend) {
+    struct ggml_backend_cpu_context * cpu_ctx = (struct ggml_backend_cpu_context *)backend->context;
+    free(cpu_ctx->work_data);
+    free(cpu_ctx);
+    free(backend);
+}
+
+GGML_CALL static ggml_backend_buffer_type_t ggml_backend_cpu_get_default_buffer_type(ggml_backend_t backend) {
+    return ggml_backend_cpu_buffer_type();
+
+    GGML_UNUSED(backend);
+}
+
+struct ggml_backend_plan_cpu {
+    struct ggml_cplan cplan;
+    struct ggml_cgraph cgraph;
+};
+
+GGML_CALL static ggml_backend_graph_plan_t ggml_backend_cpu_graph_plan_create(ggml_backend_t backend, const struct ggml_cgraph * cgraph) {
+    struct ggml_backend_cpu_context * cpu_ctx = (struct ggml_backend_cpu_context *)backend->context;
+
+    struct ggml_backend_plan_cpu * cpu_plan = malloc(sizeof(struct ggml_backend_plan_cpu));
+
+    cpu_plan->cplan = ggml_graph_plan(cgraph, cpu_ctx->n_threads);
+    cpu_plan->cgraph = *cgraph; // FIXME: deep copy
+
+    if (cpu_plan->cplan.work_size > 0) {
+        cpu_plan->cplan.work_data = malloc(cpu_plan->cplan.work_size);
+        if (cpu_plan->cplan.work_data == NULL) {
+            free(cpu_plan);
+            return NULL;
+        }
+    }
+
+    cpu_plan->cplan.abort_callback      = cpu_ctx->abort_callback;
+    cpu_plan->cplan.abort_callback_data = cpu_ctx->abort_callback_data;
+
+    return cpu_plan;
+}
+
+GGML_CALL static void ggml_backend_cpu_graph_plan_free(ggml_backend_t backend, ggml_backend_graph_plan_t plan) {
+    struct ggml_backend_plan_cpu * cpu_plan = (struct ggml_backend_plan_cpu *)plan;
+
+    free(cpu_plan->cplan.work_data);
+    free(cpu_plan);
+
+    GGML_UNUSED(backend);
+}
+
+GGML_CALL static enum ggml_status ggml_backend_cpu_graph_plan_compute(ggml_backend_t backend, ggml_backend_graph_plan_t plan) {
+    struct ggml_backend_plan_cpu * cpu_plan = (struct ggml_backend_plan_cpu *)plan;
+
+    return ggml_graph_compute(&cpu_plan->cgraph, &cpu_plan->cplan);
+
+    GGML_UNUSED(backend);
+}
+
+GGML_CALL static enum ggml_status ggml_backend_cpu_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
+    struct ggml_backend_cpu_context * cpu_ctx = (struct ggml_backend_cpu_context *)backend->context;
+
+    struct ggml_cplan cplan = ggml_graph_plan(cgraph, cpu_ctx->n_threads);
+
+    if (cpu_ctx->work_size < cplan.work_size) {
+        free(cpu_ctx->work_data);
+        cpu_ctx->work_data = malloc(cplan.work_size);
+        if (cpu_ctx->work_data == NULL) {
+            cpu_ctx->work_size = 0;
+            return GGML_STATUS_ALLOC_FAILED;
+        }
+        cpu_ctx->work_size = cplan.work_size;
+    }
+    cplan.work_data = cpu_ctx->work_data;
+
+    cplan.abort_callback      = cpu_ctx->abort_callback;
+    cplan.abort_callback_data = cpu_ctx->abort_callback_data;
+
+    return ggml_graph_compute(cgraph, &cplan);
+}
+
+GGML_CALL static bool ggml_backend_cpu_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
+    switch (op->op) {
+        case GGML_OP_CPY:
+            return
+                op->type != GGML_TYPE_IQ2_XXS &&
+                op->type != GGML_TYPE_IQ2_XS  &&
+                op->type != GGML_TYPE_IQ1_S   &&
+                op->type != GGML_TYPE_IQ1_M; // missing type_traits.from_float
+        case GGML_OP_MUL_MAT:
+            return op->src[1]->type == GGML_TYPE_F32 || op->src[1]->type == ggml_internal_get_type_traits(op->src[0]->type).vec_dot_type;
+        default:
+            return true;
+    }
+
+    GGML_UNUSED(backend);
+}
+
+GGML_CALL static bool ggml_backend_cpu_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
+    return ggml_backend_buft_is_host(buft);
+
+    GGML_UNUSED(backend);
+}
+
+static struct ggml_backend_i cpu_backend_i = {
+    /* .get_name                = */ ggml_backend_cpu_name,
+    /* .free                    = */ ggml_backend_cpu_free,
+    /* .get_default_buffer_type = */ ggml_backend_cpu_get_default_buffer_type,
+    /* .set_tensor_async        = */ NULL,
+    /* .get_tensor_async        = */ NULL,
+    /* .cpy_tensor_async        = */ NULL,
+    /* .synchronize             = */ NULL,
+    /* .graph_plan_create       = */ ggml_backend_cpu_graph_plan_create,
+    /* .graph_plan_free         = */ ggml_backend_cpu_graph_plan_free,
+    /* .graph_plan_update       = */ NULL,
+    /* .graph_plan_compute      = */ ggml_backend_cpu_graph_plan_compute,
+    /* .graph_compute           = */ ggml_backend_cpu_graph_compute,
+    /* .supports_op             = */ ggml_backend_cpu_supports_op,
+    /* .supports_buft           = */ ggml_backend_cpu_supports_buft,
+    /* .offload_op              = */ NULL,
+    /* .event_new               = */ NULL,
+    /* .event_free              = */ NULL,
+    /* .event_record            = */ NULL,
+    /* .event_wait              = */ NULL,
+    /* .event_synchronize       = */ NULL,
+};
+
+static ggml_guid_t ggml_backend_cpu_guid(void) {
+    static ggml_guid guid = { 0xaa, 0x67, 0xc7, 0x43, 0x96, 0xe6, 0xa3, 0x8a, 0xe3, 0xaf, 0xea, 0x92, 0x36, 0xbc, 0xfc, 0x89 };
+    return &guid;
+}
+
+ggml_backend_t ggml_backend_cpu_init(void) {
+    struct ggml_backend_cpu_context * ctx = malloc(sizeof(struct ggml_backend_cpu_context));
+    if (ctx == NULL) {
+        return NULL;
+    }
+
+    ctx->n_threads           = GGML_DEFAULT_N_THREADS;
+    ctx->work_data           = NULL;
+    ctx->work_size           = 0;
+    ctx->abort_callback      = NULL;
+    ctx->abort_callback_data = NULL;
+
+    ggml_backend_t cpu_backend = malloc(sizeof(struct ggml_backend));
+    if (cpu_backend == NULL) {
+        free(ctx);
+        return NULL;
+    }
+
+    *cpu_backend = (struct ggml_backend) {
+        /* .guid      = */ ggml_backend_cpu_guid(),
+        /* .interface = */ cpu_backend_i,
+        /* .context   = */ ctx
+    };
+    return cpu_backend;
+}
+
+GGML_CALL bool ggml_backend_is_cpu(ggml_backend_t backend) {
+    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_cpu_guid());
+}
+
+void ggml_backend_cpu_set_n_threads(ggml_backend_t backend_cpu, int n_threads) {
+    GGML_ASSERT(ggml_backend_is_cpu(backend_cpu));
+
+    struct ggml_backend_cpu_context * ctx = (struct ggml_backend_cpu_context *)backend_cpu->context;
+    ctx->n_threads = n_threads;
+}
+
+void ggml_backend_cpu_set_abort_callback(ggml_backend_t backend_cpu, ggml_abort_callback abort_callback, void * abort_callback_data) {
+    GGML_ASSERT(ggml_backend_is_cpu(backend_cpu));
+
+    struct ggml_backend_cpu_context * ctx = (struct ggml_backend_cpu_context *)backend_cpu->context;
+    ctx->abort_callback = abort_callback;
+    ctx->abort_callback_data = abort_callback_data;
+}
+
+GGML_CALL ggml_backend_buffer_t ggml_backend_cpu_buffer_from_ptr(void * ptr, size_t size) {
+    GGML_ASSERT((uintptr_t)ptr % TENSOR_ALIGNMENT == 0 && "buffer pointer must be aligned");
+    return ggml_backend_buffer_init(ggml_backend_cpu_buffer_type(), cpu_backend_buffer_i_from_ptr, ptr, size);
+}
+
+GGML_CALL static ggml_backend_t ggml_backend_reg_cpu_init(const char * params, void * user_data) {
+    return ggml_backend_cpu_init();
+
+    GGML_UNUSED(params);
+    GGML_UNUSED(user_data);
+}
+
+// multi-buffer buffer
+
+struct ggml_backend_multi_buffer_context {
+    ggml_backend_buffer_t * buffers;
+    size_t n_buffers;
+};
+
+typedef struct ggml_backend_multi_buffer_context * ggml_backend_multi_buffer_context_t;
+
+GGML_CALL static const char * ggml_backend_multi_buffer_get_name(ggml_backend_buffer_t buffer) {
+    ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context;
+
+    return ctx->buffers[0]->iface.get_name(ctx->buffers[0]);
+}
+
+GGML_CALL static void ggml_backend_multi_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context;
+    for (size_t i = 0; i < ctx->n_buffers; i++) {
+        ggml_backend_buffer_free(ctx->buffers[i]);
+    }
+
+    free(ctx->buffers);
+    free(ctx);
+}
+
+GGML_CALL static void ggml_backend_multi_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
+    ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context;
+    for (size_t i = 0; i < ctx->n_buffers; i++) {
+        ggml_backend_buffer_clear(ctx->buffers[i], value);
+    }
+}
+
+static struct ggml_backend_buffer_i ggml_backend_multi_buffer_context_interface(void) {
+    static struct ggml_backend_buffer_i multi_backend_buffer_i = {
+        /* .get_name        = */ ggml_backend_multi_buffer_get_name,
+        /* .free_buffer     = */ ggml_backend_multi_buffer_free_buffer,
+        /* .get_base        = */ NULL,
+        /* .init_tensor     = */ NULL,
+        /* .set_tensor      = */ NULL,
+        /* .get_tensor      = */ NULL,
+        /* .cpy_tensor      = */ NULL,
+        /* .clear           = */ ggml_backend_multi_buffer_clear,
+        /* .reset           = */ NULL,
+    };
+
+    return multi_backend_buffer_i;
+}
+
+GGML_CALL ggml_backend_buffer_t ggml_backend_multi_buffer_alloc_buffer(ggml_backend_buffer_t * buffers, size_t n_buffers) {
+    ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) malloc(sizeof(struct ggml_backend_multi_buffer_context));
+    ctx->n_buffers = n_buffers;
+    ctx->buffers = (ggml_backend_buffer_t *) malloc(n_buffers * sizeof(ggml_backend_buffer_t));
+
+    GGML_ASSERT(ctx->buffers != NULL);
+
+    size_t total_size = 0;
+    for (size_t i = 0; i < n_buffers; i++) {
+        ctx->buffers[i] = buffers[i];
+        total_size += ggml_backend_buffer_get_size(buffers[i]);
+    }
+
+    return ggml_backend_buffer_init(buffers[0]->buft, ggml_backend_multi_buffer_context_interface(), ctx, total_size);
+}
+
+GGML_CALL bool ggml_backend_buffer_is_multi_buffer(ggml_backend_buffer_t buffer) {
+    return buffer->iface.get_name == ggml_backend_multi_buffer_get_name;
+}
+
+GGML_CALL void ggml_backend_multi_buffer_set_usage(ggml_backend_buffer_t buffer, enum ggml_backend_buffer_usage usage) {
+    GGML_ASSERT(ggml_backend_buffer_is_multi_buffer(buffer));
+    ggml_backend_multi_buffer_context_t ctx = (ggml_backend_multi_buffer_context_t) buffer->context;
+    for (size_t i = 0; i < ctx->n_buffers; i++) {
+        ggml_backend_buffer_set_usage(ctx->buffers[i], usage);
+    }
+}
+
+// creates a copy of the tensor with the same memory layout
+static struct ggml_tensor * ggml_dup_tensor_layout(struct ggml_context * ctx, const struct ggml_tensor * tensor) {
+    struct ggml_tensor * dup = ggml_dup_tensor(ctx, tensor);
+    for (int i = 0; i < GGML_MAX_DIMS; i++) {
+        dup->nb[i] = tensor->nb[i];
+    }
+    return dup;
+}
+
+static bool ggml_is_view_op(enum ggml_op op) {
+    return op == GGML_OP_VIEW || op == GGML_OP_RESHAPE || op == GGML_OP_PERMUTE || op == GGML_OP_TRANSPOSE;
+}
+
+// scheduler
+
+#ifndef GGML_SCHED_MAX_BACKENDS
+#define GGML_SCHED_MAX_BACKENDS 16
+#endif
+
+#ifndef GGML_SCHED_MAX_SPLITS
+#define GGML_SCHED_MAX_SPLITS 2048
+#endif
+
+#ifndef GGML_SCHED_MAX_SPLIT_INPUTS
+#define GGML_SCHED_MAX_SPLIT_INPUTS GGML_MAX_SRC
+#endif
+
+#ifndef GGML_SCHED_MAX_COPIES
+#define GGML_SCHED_MAX_COPIES 4
+#endif
+
+struct ggml_backend_sched_split {
+    int backend_id;
+    int i_start;
+    int i_end;
+    struct ggml_tensor * inputs[GGML_SCHED_MAX_SPLIT_INPUTS];
+    int n_inputs;
+    // graph view of this split
+    struct ggml_cgraph graph;
+};
+
+struct ggml_backend_sched {
+    bool is_reset; // true if the scheduler has been reset since the last graph split
+    bool is_alloc;
+
+    int n_backends;
+
+    ggml_backend_t backends[GGML_SCHED_MAX_BACKENDS];
+    ggml_backend_buffer_type_t bufts[GGML_SCHED_MAX_BACKENDS];
+    ggml_gallocr_t galloc;
+
+    // hash keys of the nodes in the graph
+    struct ggml_hash_set    hash_set;
+    // hash values
+    int * tensor_backend_id;
+    struct ggml_tensor * (* tensor_copies)[GGML_SCHED_MAX_BACKENDS][GGML_SCHED_MAX_COPIES];
+
+    int * node_backend_ids; // [graph_size]
+    int * leaf_backend_ids; // [graph_size]
+
+    int * prev_node_backend_ids; // [graph_size]
+    int * prev_leaf_backend_ids; // [graph_size]
+
+    // copy of the graph with modified inputs
+    struct ggml_cgraph * graph;
+
+    // graph splits
+    struct ggml_backend_sched_split * splits;
+    int n_splits;
+    int splits_capacity;
+
+    // pipeline parallelism support
+    int n_copies;
+    int cur_copy;
+    ggml_backend_event_t events[GGML_SCHED_MAX_BACKENDS][GGML_SCHED_MAX_COPIES];
+    struct ggml_tensor * graph_inputs[GGML_SCHED_MAX_SPLIT_INPUTS];
+    int n_graph_inputs;
+
+    struct ggml_context * ctx;
+
+    ggml_backend_sched_eval_callback callback_eval;
+    void * callback_eval_user_data;
+
+    bool debug;
+
+    // align context_buffer to GGML_MEM_ALIGN
+#ifdef _MSC_VER
+    __declspec(align(GGML_MEM_ALIGN))
+#else
+    __attribute__((aligned(GGML_MEM_ALIGN)))
+#endif
+    char context_buffer[GGML_SCHED_MAX_SPLITS*GGML_SCHED_MAX_SPLIT_INPUTS*2*sizeof(struct ggml_tensor) + sizeof(struct ggml_cgraph)];
+};
+
+#define hash_id(tensor) ggml_hash_find_or_insert(sched->hash_set, tensor)
+#define tensor_backend_id(tensor) sched->tensor_backend_id[hash_id(tensor)]
+
+// returns the priority of the backend, lower id is higher priority
+static int ggml_backend_sched_backend_id(ggml_backend_sched_t sched, ggml_backend_t backend) {
+    for (int i = 0; i < sched->n_backends; i++) {
+        if (sched->backends[i] == backend) {
+            return i;
+        }
+    }
+    return -1;
+}
+
+static int ggml_backend_sched_backend_from_buffer(ggml_backend_sched_t sched, const struct ggml_tensor * tensor, const struct ggml_tensor * op) {
+    ggml_backend_buffer_t buffer = tensor->buffer;
+    if (buffer == NULL) {
+        return -1;
+    }
+
+    // find highest prio backend that supports the buffer type and the op
+    for (int i = 0; i < sched->n_backends; i++) {
+        if (ggml_backend_supports_buft(sched->backends[i], buffer->buft) &&
+            ggml_backend_supports_op(sched->backends[i], op)) {
+            return i;
+        }
+    }
+
+#ifndef NDEBUG
+    fprintf(stderr, "%s: warning: no backend supports op %s with a weight with buffer type %s used in tensor %s, the weight will need to be copied\n",
+        __func__, ggml_op_desc(tensor), ggml_backend_buffer_name(buffer), tensor->name);
+#endif
+
+    return -1;
+}
+
+#if 0
+static char causes[GGML_DEFAULT_GRAPH_SIZE*16 + GGML_SCHED_MAX_SPLITS*GGML_SCHED_MAX_SPLIT_INPUTS][128]; // debug only
+#define SET_CAUSE(node, ...) sprintf(causes[hash_id(node)], __VA_ARGS__)
+#define GET_CAUSE(node) causes[hash_id(node)]
+#else
+#define SET_CAUSE(node, ...)
+#define GET_CAUSE(node) ""
+#endif
+
+// returns the backend that should be used for the node based on the current locations
+static int ggml_backend_sched_backend_id_from_cur(ggml_backend_sched_t sched, struct ggml_tensor * tensor) {
+    // TODO: use supports_op to check if the backend supports the op
+
+    // assign pre-allocated nodes to their backend
+    int cur_backend_id = ggml_backend_sched_backend_from_buffer(sched, tensor, tensor);
+    if (cur_backend_id != -1) {
+        SET_CAUSE(tensor, "1.dst");
+        return cur_backend_id;
+    }
+
+    // view_src
+    if (tensor->view_src != NULL) {
+        cur_backend_id = ggml_backend_sched_backend_from_buffer(sched, tensor->view_src, tensor);
+        if (cur_backend_id != -1) {
+            SET_CAUSE(tensor, "1.vsrc");
+            return cur_backend_id;
+        }
+    }
+
+    // graph input
+    if (tensor->flags & GGML_TENSOR_FLAG_INPUT) {
+        cur_backend_id = sched->n_backends - 1; // last backend (assumed CPU)
+        SET_CAUSE(tensor, "1.inp");
+        return cur_backend_id;
+    }
+
+    // assign nodes that use weights to the backend of the weights
+    // operations with weights are preferably run on the same backend as the weights
+    for (int i = 0; i < GGML_MAX_SRC; i++) {
+        const struct ggml_tensor * src = tensor->src[i];
+        if (src == NULL) {
+            continue;
+        }
+        if (src->buffer != NULL && src->buffer->usage == GGML_BACKEND_BUFFER_USAGE_WEIGHTS) {
+            int src_backend_id = ggml_backend_sched_backend_from_buffer(sched, src, tensor);
+            // check if a backend with higher prio wants to offload the op
+            if (src_backend_id == sched->n_backends - 1) {
+                for (int b = 0; b < src_backend_id; b++) {
+                    if (ggml_backend_supports_op(sched->backends[b], tensor) && ggml_backend_offload_op(sched->backends[b], tensor)) {
+                        SET_CAUSE(tensor, "1.off");
+                        return b;
+                    }
+                }
+            }
+            SET_CAUSE(tensor, "1.wgt%d", i);
+            return src_backend_id;
+        }
+    }
+
+    return -1;
+}
+
+static char * fmt_size(size_t size) {
+    static char buffer[128];
+    if (size >= 1024*1024) {
+        snprintf(buffer, sizeof(buffer), "%zuM", size/1024/1024);
+    } else {
+        snprintf(buffer, sizeof(buffer), "%zuK", size/1024);
+    }
+    return buffer;
+}
+
+static void ggml_backend_sched_print_assignments(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
+    int cur_split = 0;
+    for (int i = 0; i < graph->n_nodes; i++) {
+        if (cur_split < sched->n_splits && i == sched->splits[cur_split].i_start) {
+            ggml_backend_t split_backend = sched->backends[sched->splits[cur_split].backend_id];
+            fprintf(stderr, "\n## SPLIT #%d: %s # %d inputs: ", cur_split, ggml_backend_name(split_backend),
+                sched->splits[cur_split].n_inputs);
+            for (int j = 0; j < sched->splits[cur_split].n_inputs; j++) {
+                fprintf(stderr, "[%s (%5.5s)] ", sched->splits[cur_split].inputs[j]->name,
+                    fmt_size(ggml_nbytes(sched->splits[cur_split].inputs[j])));
+            }
+            fprintf(stderr, "\n");
+            cur_split++;
+        }
+        struct ggml_tensor * node = graph->nodes[i];
+        if (ggml_is_view_op(node->op)) {
+            continue;
+        }
+        ggml_backend_t tensor_backend = ggml_backend_sched_get_tensor_backend(sched, node);
+        fprintf(stderr, "node #%3d (%10.10s): %20.20s (%5.5s) [%5.5s %8.8s]:", i, ggml_op_name(node->op), node->name,
+            fmt_size(ggml_nbytes(node)), tensor_backend ? ggml_backend_name(tensor_backend) : "NULL", GET_CAUSE(node));
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            struct ggml_tensor * src = node->src[j];
+            if (src == NULL) {
+                continue;
+            }
+            ggml_backend_t src_backend = ggml_backend_sched_get_tensor_backend(sched, src);
+            fprintf(stderr, " %20.20s (%5.5s) [%5.5s %8.8s]", src->name,
+                fmt_size(ggml_nbytes(src)), src_backend ? ggml_backend_name(src_backend) : "NULL", GET_CAUSE(src));
+        }
+        fprintf(stderr, "\n");
+    }
+}
+
+static bool ggml_backend_sched_buffer_supported(ggml_backend_sched_t sched, struct ggml_tensor * t, int backend_id) {
+    ggml_backend_buffer_t buf = t->view_src ? t->view_src->buffer : t->buffer;
+    ggml_backend_buffer_type_t buft = NULL;
+
+    if (buf) {
+        // the tensor is already allocated
+        buft = buf->buft;
+    } else {
+        // see if the tensor already has a backend assigned, and use the buffer type of that backend
+        int tensor_backend_id = tensor_backend_id(t);
+        if (tensor_backend_id == -1 && t->view_src) {
+            tensor_backend_id = tensor_backend_id(t->view_src);
+        }
+        if (tensor_backend_id != -1) {
+            buft = sched->bufts[tensor_backend_id];
+        }
+    }
+
+    return buft != NULL && ggml_backend_supports_buft(sched->backends[backend_id], buft);
+}
+
+static void ggml_backend_sched_set_if_supported(ggml_backend_sched_t sched, struct ggml_tensor * node, int cur_backend_id, int * node_backend_id) {
+    if (ggml_backend_supports_op(sched->backends[cur_backend_id], node)) {
+        *node_backend_id = cur_backend_id;
+        SET_CAUSE(node, "2.sup");
+    }
+}
+
+// assigns backends to ops and splits the graph into subgraphs that can be computed on the same backend
+static void ggml_backend_sched_split_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
+    // reset splits
+    sched->n_splits = 0;
+    sched->n_graph_inputs = 0;
+    sched->is_reset = false;
+
+    struct ggml_init_params params = {
+        /* .mem_size =   */ sizeof(sched->context_buffer),
+        /* .mem_buffer = */ sched->context_buffer,
+        /* .no_alloc =   */ true
+    };
+
+    ggml_free(sched->ctx);
+
+    sched->ctx = ggml_init(params);
+    if (sched->ctx == NULL) {
+        fprintf(stderr, "%s: failed to initialize context\n", __func__);
+        GGML_ASSERT(false);
+    }
+
+    // pass 1: assign backends to ops with pre-allocated inputs
+    for (int i = 0; i < graph->n_leafs; i++) {
+        struct ggml_tensor * leaf = graph->leafs[i];
+        int * leaf_backend_id = &tensor_backend_id(leaf);
+        if (*leaf_backend_id != -1) {
+            // do not overwrite user assignments
+            continue;
+        }
+        *leaf_backend_id = ggml_backend_sched_backend_id_from_cur(sched, leaf);
+    }
+
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+        int * node_backend_id = &tensor_backend_id(node);
+        if (*node_backend_id != -1) {
+            // do not overwrite user assignments
+            continue;
+        }
+        *node_backend_id = ggml_backend_sched_backend_id_from_cur(sched, node);
+        // src
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            struct ggml_tensor * src = node->src[j];
+            if (src == NULL) {
+                continue;
+            }
+            int * src_backend_id = &tensor_backend_id(src);
+            if (*src_backend_id == -1) {
+                *src_backend_id = ggml_backend_sched_backend_id_from_cur(sched, src);
+            }
+        }
+    }
+
+    // pass 2: expand current backend assignments
+    // assign the same backend to adjacent nodes
+    // expand gpu backends (i.e. non last prio) up and down, ignoring cpu (the lowest priority backend)
+    // thus, cpu will never be used unless weights are on cpu, or there are no gpu ops between cpu ops
+    // ops unsupported by the backend being expanded will be left unassigned so that they can be assigned later when the locations of its inputs are known
+    // expand gpu down
+    {
+        int cur_backend_id = -1;
+        for (int i = 0; i < graph->n_nodes; i++) {
+            struct ggml_tensor * node = graph->nodes[i];
+            if (ggml_is_view_op(node->op)) {
+                continue;
+            }
+            int * node_backend_id = &tensor_backend_id(node);
+            if (*node_backend_id != -1) {
+                if (*node_backend_id == sched->n_backends - 1) {
+                    // skip cpu (lowest prio backend)
+                    cur_backend_id = -1;
+                } else {
+                    cur_backend_id = *node_backend_id;
+                }
+            } else if (cur_backend_id != -1) {
+                ggml_backend_sched_set_if_supported(sched, node, cur_backend_id, node_backend_id);
+            }
+        }
+    }
+    // expand gpu up
+    {
+        int cur_backend_id = -1;
+        for (int i = graph->n_nodes - 1; i >= 0; i--) {
+            struct ggml_tensor * node = graph->nodes[i];
+            if (ggml_is_view_op(node->op)) {
+                continue;
+            }
+            int * node_backend_id = &tensor_backend_id(node);
+            if (*node_backend_id != -1) {
+                if (*node_backend_id == sched->n_backends - 1) {
+                    // skip cpu (lowest prio backend)
+                    cur_backend_id = -1;
+                } else {
+                    cur_backend_id = *node_backend_id;
+                }
+            } else if (cur_backend_id != -1) {
+                ggml_backend_sched_set_if_supported(sched, node, cur_backend_id, node_backend_id);
+            }
+        }
+    }
+    // expand rest down
+    {
+        int cur_backend_id = -1;
+        for (int i = 0; i < graph->n_nodes; i++) {
+            struct ggml_tensor * node = graph->nodes[i];
+            if (ggml_is_view_op(node->op)) {
+                continue;
+            }
+            int * node_backend_id = &tensor_backend_id(node);
+            if (*node_backend_id != -1) {
+                cur_backend_id = *node_backend_id;
+            } else if (cur_backend_id != -1) {
+                ggml_backend_sched_set_if_supported(sched, node, cur_backend_id, node_backend_id);
+            }
+        }
+    }
+    // expand rest up
+    {
+        int cur_backend_id = -1;
+        for (int i = graph->n_nodes - 1; i >= 0; i--) {
+            struct ggml_tensor * node = graph->nodes[i];
+            if (ggml_is_view_op(node->op)) {
+                continue;
+            }
+            int * node_backend_id = &tensor_backend_id(node);
+            if (*node_backend_id != -1) {
+                cur_backend_id = *node_backend_id;
+            } else if (cur_backend_id != -1) {
+                ggml_backend_sched_set_if_supported(sched, node, cur_backend_id, node_backend_id);
+            }
+        }
+    }
+
+    // pass 3: upgrade nodes to higher prio backends with compatible buffer types
+    // if the tensor is already in the same buffer type (*) as another higher priority backend, we should move it there
+    // however, we also need to verify that the sources are in compatible buffer types
+    // (*) the actual requirement is more relaxed, the buffer type of the backend should be supported by all the users of this tensor further down the graph
+    // however, this is slow to verify, so we have a more strict requirement that the buffer type is the same
+    // this is not uncommon since multiple backends can use host memory, with the same buffer type (eg. BLAS and CPU)
+    // additionally, set remaining unassigned nodes to the backend with the most supported inputs
+    // only nodes that could not be assigned during expansion due to the backend not supporting the op should be unassigned at this point
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+        if (ggml_is_view_op(node->op)) {
+            continue;
+        }
+        int * node_backend_id = &tensor_backend_id(node);
+        if (*node_backend_id == -1) {
+            // unassigned node: find the backend with the most supported inputs
+            int n_supported_best = -1;
+            for (int b = 0; b < sched->n_backends; b++) {
+                if (ggml_backend_supports_op(sched->backends[b], node)) {
+                    int n_supported = 0;
+                    for (int j = 0; j < GGML_MAX_SRC; j++) {
+                        struct ggml_tensor * src = node->src[j];
+                        if (src == NULL) {
+                            continue;
+                        }
+                        if ((tensor_backend_id(src) != -1 || tensor_backend_id(src->view_src) != -1) && ggml_backend_sched_buffer_supported(sched, src, b)) {
+                            n_supported++;
+                        }
+                    }
+                    if (n_supported > n_supported_best) {
+                        n_supported_best = n_supported;
+                        *node_backend_id = b;
+                        SET_CAUSE(node, "3.best");
+                    }
+                }
+            }
+        } else {
+            // assigned node: upgrade to higher prio backend if possible
+            for (int b = 0; b < *node_backend_id; b++) {
+                if (sched->bufts[b] == sched->bufts[*node_backend_id] && ggml_backend_supports_op(sched->backends[b], node)) {
+                    bool supported = true;
+                    for (int j = 0; j < GGML_MAX_SRC; j++) {
+                        struct ggml_tensor * src = node->src[j];
+                        if (src == NULL) {
+                            continue;
+                        }
+                        if (!ggml_backend_sched_buffer_supported(sched, src, b)) {
+                            supported = false;
+                            break;
+                        }
+                    }
+                    if (supported) {
+                        *node_backend_id = b;
+                        SET_CAUSE(node, "3.upg");
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    // pass 4: assign backends to remaining src from dst and view_src
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+        int * cur_backend_id = &tensor_backend_id(node);
+        if (node->view_src != NULL && *cur_backend_id == -1) {
+            *cur_backend_id = tensor_backend_id(node->view_src);
+            SET_CAUSE(node, "4.vsrc");
+        }
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            struct ggml_tensor * src = node->src[j];
+            if (src == NULL) {
+                continue;
+            }
+            int * src_backend_id = &tensor_backend_id(src);
+            if (*src_backend_id == -1) {
+                if (src->view_src != NULL) {
+                    // views are always on the same backend as the source
+                    *src_backend_id = tensor_backend_id(src->view_src);
+                    SET_CAUSE(src, "4.vsrc");
+                } else {
+                    *src_backend_id = *cur_backend_id;
+                    SET_CAUSE(src, "4.cur");
+                }
+            }
+        }
+    }
+
+    // pass 4: split graph, find tensors that need to be copied
+    {
+        int i_split = 0;
+        struct ggml_backend_sched_split * split = &sched->splits[0];
+        // find the backend of the first split, skipping view ops
+        for (int i = 0; i < graph->n_nodes; i++) {
+            struct ggml_tensor * node = graph->nodes[i];
+            if (!ggml_is_view_op(node->op)) {
+                split->backend_id = tensor_backend_id(node);
+                break;
+            }
+        }
+        split->i_start = 0;
+        split->n_inputs = 0;
+        memset(split->inputs, 0, sizeof(split->inputs)); //HACK
+        int cur_backend_id = split->backend_id;
+        for (int i = 0; i < graph->n_nodes; i++) {
+            struct ggml_tensor * node = graph->nodes[i];
+
+            if (ggml_is_view_op(node->op)) {
+                continue;
+            }
+
+            const int node_backend_id = tensor_backend_id(node);
+
+            GGML_ASSERT(node_backend_id != -1); // all nodes should be assigned by now
+
+            // check if we should start a new split based on the sources of the current node
+            bool need_new_split = false;
+            if (node_backend_id == cur_backend_id && split->n_inputs > 0) {
+                for (int j = 0; j < GGML_MAX_SRC; j++) {
+                    struct ggml_tensor * src = node->src[j];
+                    if (src == NULL) {
+                        continue;
+                    }
+                    // check if a weight is on a different backend
+                    // by starting a new split, the memory of the previously offloaded weights can be reused
+                    if (src->buffer != NULL && src->buffer->usage == GGML_BACKEND_BUFFER_USAGE_WEIGHTS) {
+                        int src_backend_id = tensor_backend_id(src);
+                        if (src_backend_id != -1 && src_backend_id != cur_backend_id) {
+                            need_new_split = true;
+                            break;
+                        }
+                    }
+                    // check if the split has too many inputs
+                    // FIXME: count the number of inputs instead of only checking when full
+                    if (split->n_inputs == GGML_SCHED_MAX_SPLIT_INPUTS) {
+                        const size_t id = hash_id(src);
+                        int src_backend_id = sched->tensor_backend_id[id];
+                        bool supported = ggml_backend_sched_buffer_supported(sched, src, cur_backend_id);
+                        if (src_backend_id != cur_backend_id && sched->tensor_copies[hash_id(src)][cur_backend_id][0] == NULL && !supported) {
+                            //printf("starting new split because of too many inputs: node %s, input %s\n", node->name, src->name);
+                            need_new_split = true;
+                            break;
+                        }
+                    }
+                }
+            }
+
+            if (node_backend_id != cur_backend_id || need_new_split) {
+                split->i_end = i;
+                i_split++;
+                if (i_split >= sched->splits_capacity) {
+                    sched->splits_capacity *= 2;
+                    sched->splits = realloc(sched->splits, sched->splits_capacity * sizeof(struct ggml_backend_sched_split));
+                    GGML_ASSERT(sched->splits != NULL);
+                }
+                GGML_ASSERT(i_split < GGML_SCHED_MAX_SPLITS);
+                split = &sched->splits[i_split];
+                split->backend_id = node_backend_id;
+                split->i_start = i;
+                split->n_inputs = 0;
+                cur_backend_id = node_backend_id;
+            }
+
+            // find inputs that are not on the same backend
+            for (int j = 0; j < GGML_MAX_SRC; j++) {
+                struct ggml_tensor * src = node->src[j];
+                if (src == NULL) {
+                    continue;
+                }
+
+                const int src_backend_id = tensor_backend_id(src);
+                assert(src_backend_id != -1); // all inputs should be assigned by now
+
+                if (src->flags & GGML_TENSOR_FLAG_INPUT && sched->n_copies > 1) {
+                    size_t id = hash_id(src);
+                    if (sched->tensor_copies[id][src_backend_id][0] == NULL) {
+                        ggml_backend_t backend = sched->backends[src_backend_id];
+                        for (int c = 0; c < sched->n_copies; c++) {
+                            struct ggml_tensor * tensor_copy;
+                            if (c == sched->cur_copy) {
+                                tensor_copy = src; // use the original tensor as the current copy
+                            } else {
+                                tensor_copy = ggml_dup_tensor_layout(sched->ctx, src);
+                                ggml_format_name(tensor_copy, "%s#%s#%d", ggml_backend_name(backend), src->name, c);
+                            }
+                            if (sched->n_copies > 1) {
+                                ggml_set_input(tensor_copy);
+                                ggml_set_output(tensor_copy); // prevent ggml-alloc from overwriting the tensor
+                            }
+                            sched->tensor_copies[id][src_backend_id][c] = tensor_copy;
+                            SET_CAUSE(tensor_copy, "4.cpy");
+                        }
+                        int n_graph_inputs = sched->n_graph_inputs++;
+                        GGML_ASSERT(n_graph_inputs < GGML_SCHED_MAX_SPLIT_INPUTS);
+                        sched->graph_inputs[n_graph_inputs] = src;
+                    }
+                }
+
+                bool supported = ggml_backend_sched_buffer_supported(sched, src, cur_backend_id);
+                if (src_backend_id != cur_backend_id && !supported) {
+                    // create a copy of the input in the split's backend
+                    const size_t id = hash_id(src);
+                    if (sched->tensor_copies[id][cur_backend_id][0] == NULL) {
+                        ggml_backend_t backend = sched->backends[cur_backend_id];
+                        for (int c = 0; c < sched->n_copies; c++) {
+                            struct ggml_tensor * tensor_copy = ggml_dup_tensor_layout(sched->ctx, src);
+                            ggml_format_name(tensor_copy, "%s#%s#%d", ggml_backend_name(backend), src->name, c);
+                            if (sched->n_copies > 1) {
+                                ggml_set_input(tensor_copy);
+                                ggml_set_output(tensor_copy); // prevent ggml-alloc from overwriting the tensor
+                            }
+                            sched->tensor_copies[id][cur_backend_id][c] = tensor_copy;
+                            SET_CAUSE(tensor_copy, "4.cpy");
+                        }
+                        int n_inputs = split->n_inputs++;
+                        GGML_ASSERT(n_inputs < GGML_SCHED_MAX_SPLIT_INPUTS);
+                        split->inputs[n_inputs] = src;
+                    }
+                    node->src[j] = sched->tensor_copies[id][cur_backend_id][sched->cur_copy];
+                }
+            }
+        }
+        split->i_end = graph->n_nodes;
+        sched->n_splits = i_split + 1;
+    }
+
+    if (sched->debug) {
+        ggml_backend_sched_print_assignments(sched, graph);
+    }
+
+    // swap node_backend_ids and leaf_backend_ids and prevs
+    {
+        int * tmp = sched->node_backend_ids;
+        sched->node_backend_ids = sched->prev_node_backend_ids;
+        sched->prev_node_backend_ids = tmp;
+
+        tmp = sched->leaf_backend_ids;
+        sched->leaf_backend_ids = sched->prev_leaf_backend_ids;
+        sched->prev_leaf_backend_ids = tmp;
+    }
+
+    // create copies of the graph for each split
+    // TODO: avoid this copy
+    struct ggml_cgraph * graph_copy = ggml_new_graph_custom(sched->ctx, graph->n_nodes + sched->n_splits*GGML_SCHED_MAX_SPLIT_INPUTS*2, false);
+    for (int i = 0; i < sched->n_splits; i++) {
+        struct ggml_backend_sched_split * split = &sched->splits[i];
+        split->graph = ggml_graph_view(graph, split->i_start, split->i_end);
+
+        // add inputs to the graph copy so that they are allocated by ggml-alloc at the start of the split
+        for (int j = 0; j < split->n_inputs; j++) {
+            assert(graph_copy->size > (graph_copy->n_nodes + 1));
+
+            struct ggml_tensor * input = split->inputs[j];
+            const size_t input_id = hash_id(input);
+            struct ggml_tensor * input_cpy = sched->tensor_copies[input_id][split->backend_id][sched->cur_copy];
+
+            // add a dependency to the input source so that it is not freed before the copy is done
+            struct ggml_tensor * input_dep = ggml_view_tensor(sched->ctx, input);
+            input_dep->src[0] = input;
+            sched->node_backend_ids[graph_copy->n_nodes] = sched->tensor_backend_id[input_id];
+            graph_copy->nodes[graph_copy->n_nodes++] = input_dep;
+
+            // add a dependency to the input copy so that it is allocated at the start of the split
+            sched->node_backend_ids[graph_copy->n_nodes] = split->backend_id;
+            graph_copy->nodes[graph_copy->n_nodes++] = input_cpy;
+        }
+
+        for (int j = split->i_start; j < split->i_end; j++) {
+            assert(graph_copy->size > graph_copy->n_nodes);
+            sched->node_backend_ids[graph_copy->n_nodes] = tensor_backend_id(graph->nodes[j]);
+            graph_copy->nodes[graph_copy->n_nodes++] = graph->nodes[j];
+        }
+    }
+
+    if (sched->n_copies > 1) {
+        // add input copies as leafs so that they are allocated first
+        for (int i = 0; i < sched->n_graph_inputs; i++) {
+            struct ggml_tensor * input = sched->graph_inputs[i];
+            size_t id = hash_id(input);
+            int backend_id = tensor_backend_id(input);
+            for (int c = 0; c < sched->n_copies; c++) {
+                struct ggml_tensor * input_cpy = sched->tensor_copies[id][backend_id][c];
+                sched->leaf_backend_ids[graph_copy->n_leafs] = backend_id;
+                graph_copy->leafs[graph_copy->n_leafs++] = input_cpy;
+            }
+        }
+
+        for (int i = 0; i < sched->n_splits; i++) {
+            struct ggml_backend_sched_split * split = &sched->splits[i];
+            int backend_id = split->backend_id;
+            for (int j = 0; j < split->n_inputs; j++) {
+                struct ggml_tensor * input = split->inputs[j];
+                size_t id = hash_id(input);
+                for (int c = 0; c < sched->n_copies; c++) {
+                    struct ggml_tensor * input_cpy = sched->tensor_copies[id][backend_id][c];
+                    sched->leaf_backend_ids[graph_copy->n_leafs] = backend_id;
+                    graph_copy->leafs[graph_copy->n_leafs++] = input_cpy;
+                }
+            }
+        }
+    }
+
+    // add leafs from the original graph
+    for (int i = 0; i < graph->n_leafs; i++) {
+        struct ggml_tensor * leaf = graph->leafs[i];
+        sched->leaf_backend_ids[graph_copy->n_leafs] = tensor_backend_id(leaf);
+        graph_copy->leafs[graph_copy->n_leafs++] = leaf;
+    }
+
+    sched->graph = graph_copy;
+}
+
+static bool ggml_backend_sched_alloc_splits(ggml_backend_sched_t sched) {
+    bool backend_ids_changed = false;
+    for (int i = 0; i < sched->graph->n_nodes; i++) {
+        if (sched->node_backend_ids[i] != sched->prev_node_backend_ids[i] &&
+            sched->bufts[sched->node_backend_ids[i]] != sched->bufts[sched->prev_node_backend_ids[i]]) {
+            backend_ids_changed = true;
+            break;
+        }
+    }
+    if (!backend_ids_changed) {
+        for (int i = 0; i < sched->graph->n_leafs; i++) {
+            if (sched->leaf_backend_ids[i] != sched->prev_leaf_backend_ids[i] &&
+                sched->bufts[sched->leaf_backend_ids[i]] != sched->bufts[sched->prev_leaf_backend_ids[i]]) {
+                backend_ids_changed = true;
+                break;
+            }
+        }
+    }
+
+    // allocate graph
+    if (backend_ids_changed || !ggml_gallocr_alloc_graph(sched->galloc, sched->graph)) {
+        // the re-allocation may cause the split inputs to be moved to a different address
+        ggml_backend_sched_synchronize(sched);
+#ifndef NDEBUG
+        fprintf(stderr, "%s: failed to allocate graph, reserving\n", __func__);
+#endif
+        ggml_gallocr_reserve_n(sched->galloc, sched->graph, sched->node_backend_ids, sched->leaf_backend_ids);
+        if (!ggml_gallocr_alloc_graph(sched->galloc, sched->graph)) {
+            fprintf(stderr, "%s: failed to allocate graph\n", __func__);
+            return false;
+        }
+    }
+
+    return true;
+}
+
+static enum ggml_status ggml_backend_sched_compute_splits(ggml_backend_sched_t sched) {
+    struct ggml_backend_sched_split * splits = sched->splits;
+
+    for (int i = 0; i < sched->n_splits; i++) {
+        struct ggml_backend_sched_split * split = &splits[i];
+        int split_backend_id = split->backend_id;
+        ggml_backend_t split_backend = sched->backends[split_backend_id];
+
+        // copy the input tensors to the split backend
+        for (int j = 0; j < split->n_inputs; j++) {
+            ggml_backend_t input_backend = ggml_backend_sched_get_tensor_backend(sched, split->inputs[j]);
+            struct ggml_tensor * input = split->inputs[j];
+            struct ggml_tensor * input_cpy = sched->tensor_copies[hash_id(input)][split_backend_id][sched->cur_copy];
+
+            if (input->flags & GGML_TENSOR_FLAG_INPUT) {
+                // inputs from the user must be copied immediately to prevent the user overwriting the data before the copy is done
+                if (sched->events[split_backend_id][sched->cur_copy] != NULL) {
+                    ggml_backend_event_synchronize(sched->events[split_backend_id][sched->cur_copy]);
+                } else {
+                    ggml_backend_synchronize(split_backend);
+                }
+                ggml_backend_tensor_copy(input, input_cpy);
+            } else {
+                // wait for the split backend to finish using the input before overwriting it
+                if (sched->events[split_backend_id][sched->cur_copy] != NULL) {
+                    ggml_backend_event_wait(split_backend, sched->events[split_backend_id][sched->cur_copy]);
+                } else {
+                    ggml_backend_synchronize(split_backend);
+                }
+                ggml_backend_tensor_copy_async(input_backend, split_backend, input, input_cpy);
+            }
+        }
+
+        if (!sched->callback_eval) {
+            enum ggml_status ec = ggml_backend_graph_compute_async(split_backend, &split->graph);
+            if (ec != GGML_STATUS_SUCCESS) {
+                return ec;
+            }
+        } else {
+            // similar to ggml_backend_compare_graph_backend
+            for (int j0 = 0; j0 < split->graph.n_nodes; j0++) {
+                struct ggml_tensor * t = split->graph.nodes[j0];
+
+                // check if the user needs data from this node
+                bool need = sched->callback_eval(t, true, sched->callback_eval_user_data);
+
+                int j1 = j0;
+
+                // determine the range [j0, j1] of nodes that can be computed together
+                while (!need && j1 < split->graph.n_nodes - 1) {
+                    t = split->graph.nodes[++j1];
+                    need = sched->callback_eval(t, true, sched->callback_eval_user_data);
+                }
+
+                struct ggml_cgraph gv = ggml_graph_view(&split->graph, j0, j1 + 1);
+
+                enum ggml_status ec = ggml_backend_graph_compute_async(split_backend, &gv);
+                if (ec != GGML_STATUS_SUCCESS) {
+                    return ec;
+                }
+
+                // TODO: pass backend to the callback, then the user can decide if they want to synchronize
+                ggml_backend_synchronize(split_backend);
+
+                if (need && !sched->callback_eval(t, false, sched->callback_eval_user_data)) {
+                    break;
+                }
+
+                j0 = j1;
+            }
+        }
+
+        // record the event of this copy
+        if (split->n_inputs > 0) {
+            if (sched->events[split_backend_id][sched->cur_copy] != NULL) {
+                ggml_backend_event_record(sched->events[split_backend_id][sched->cur_copy]);
+            }
+        }
+    }
+
+    sched->cur_copy = (sched->cur_copy + 1) % sched->n_copies;
+
+    return GGML_STATUS_SUCCESS;
+}
+
+ggml_backend_sched_t ggml_backend_sched_new(
+        ggml_backend_t * backends,
+        ggml_backend_buffer_type_t * bufts,
+        int n_backends,
+        size_t graph_size,
+        bool parallel) {
+    GGML_ASSERT(n_backends > 0);
+    GGML_ASSERT(n_backends <= GGML_SCHED_MAX_BACKENDS);
+    GGML_ASSERT(ggml_backend_is_cpu(backends[n_backends - 1])); // last backend must be CPU
+
+    struct ggml_backend_sched * sched = calloc(1, sizeof(struct ggml_backend_sched));
+
+    sched->debug = getenv("GGML_SCHED_DEBUG") != NULL;
+
+    // initialize hash table
+    sched->hash_set          = ggml_hash_set_new(graph_size);
+    sched->tensor_backend_id = calloc(sched->hash_set.size, sizeof(sched->tensor_backend_id[0]));
+    sched->tensor_copies     = calloc(sched->hash_set.size, sizeof(sched->tensor_copies[0]));
+
+    const size_t nodes_size = graph_size + GGML_SCHED_MAX_SPLITS*GGML_SCHED_MAX_SPLIT_INPUTS*2;
+    sched->node_backend_ids  = calloc(nodes_size, sizeof(sched->node_backend_ids[0]));
+    sched->leaf_backend_ids  = calloc(nodes_size, sizeof(sched->leaf_backend_ids[0]));
+    sched->prev_node_backend_ids = calloc(nodes_size, sizeof(sched->prev_node_backend_ids[0]));
+    sched->prev_leaf_backend_ids = calloc(nodes_size, sizeof(sched->prev_leaf_backend_ids[0]));
+
+    sched->n_backends = n_backends;
+
+    sched->n_copies = parallel ? GGML_SCHED_MAX_COPIES : 1;
+
+    const int initial_splits_capacity = 16;
+    sched->splits = calloc(initial_splits_capacity, sizeof(sched->splits[0]));
+    sched->splits_capacity = initial_splits_capacity;
+
+    for (int b = 0; b < n_backends; b++) {
+        sched->backends[b] = backends[b];
+        sched->bufts[b] = bufts ? bufts[b] : ggml_backend_get_default_buffer_type(backends[b]);
+        GGML_ASSERT(ggml_backend_supports_buft(backends[b], sched->bufts[b]));
+        if (sched->n_copies > 1) {
+            for (int c = 0; c < sched->n_copies; c++) {
+                sched->events[b][c] = ggml_backend_event_new(backends[b]);
+            }
+        }
+    }
+
+    sched->galloc = ggml_gallocr_new_n(sched->bufts, n_backends);
+
+    ggml_backend_sched_reset(sched);
+
+    return sched;
+}
+
+void ggml_backend_sched_free(ggml_backend_sched_t sched) {
+    if (sched == NULL) {
+        return;
+    }
+    for (int b = 0; b < sched->n_backends; b++) {
+        for (int c = 0; c < sched->n_copies; c++) {
+            ggml_backend_event_free(sched->events[b][c]);
+        }
+    }
+    ggml_gallocr_free(sched->galloc);
+    ggml_free(sched->ctx);
+    free(sched->splits);
+    free(sched->hash_set.keys);
+    free(sched->tensor_backend_id);
+    free(sched->tensor_copies);
+    free(sched->node_backend_ids);
+    free(sched->leaf_backend_ids);
+    free(sched->prev_node_backend_ids);
+    free(sched->prev_leaf_backend_ids);
+    free(sched);
+}
+
+void ggml_backend_sched_reset(ggml_backend_sched_t sched) {
+    // reset state for the next run
+    if (!sched->is_reset) {
+        size_t hash_size = sched->hash_set.size;
+        memset(sched->hash_set.keys,      0, sizeof(sched->hash_set.keys[0])     * hash_size); // NOLINT
+        memset(sched->tensor_backend_id, -1, sizeof(sched->tensor_backend_id[0]) * hash_size);
+        memset(sched->tensor_copies,      0, sizeof(sched->tensor_copies[0])     * hash_size);
+
+        sched->is_reset = true;
+    }
+    sched->is_alloc = false;
+}
+
+bool ggml_backend_sched_reserve(ggml_backend_sched_t sched, struct ggml_cgraph * measure_graph) {
+    GGML_ASSERT((int)sched->hash_set.size >= measure_graph->n_nodes);
+
+    ggml_backend_sched_split_graph(sched, measure_graph);
+
+    // TODO: extract this to a separate function
+    if (!ggml_gallocr_reserve_n(sched->galloc, sched->graph, sched->node_backend_ids, sched->leaf_backend_ids)) {
+        return false;
+    }
+
+    ggml_backend_sched_reset(sched);
+    ggml_backend_sched_synchronize(sched);
+
+    return true;
+}
+
+bool ggml_backend_sched_alloc_graph(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
+    GGML_ASSERT((int)sched->hash_set.size >= graph->n_nodes);
+
+    ggml_backend_sched_split_graph(sched, graph);
+
+    if (!ggml_backend_sched_alloc_splits(sched)) {
+        return false;
+    }
+
+    sched->is_alloc = true;
+
+    return true;
+}
+
+enum ggml_status ggml_backend_sched_graph_compute(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
+    enum ggml_status err = ggml_backend_sched_graph_compute_async(sched, graph);
+    ggml_backend_sched_synchronize(sched);
+    return err;
+}
+
+enum ggml_status ggml_backend_sched_graph_compute_async(ggml_backend_sched_t sched, struct ggml_cgraph * graph) {
+    if (!sched->is_reset && !sched->is_alloc) {
+        ggml_backend_sched_reset(sched);
+    }
+
+    if (!sched->is_alloc) {
+        if (!ggml_backend_sched_alloc_graph(sched, graph)) {
+            return GGML_STATUS_ALLOC_FAILED;
+        }
+    }
+
+    return ggml_backend_sched_compute_splits(sched);
+}
+
+void ggml_backend_sched_synchronize(ggml_backend_sched_t sched) {
+    for (int i = 0; i < sched->n_backends; i++) {
+        ggml_backend_synchronize(sched->backends[i]);
+    }
+}
+
+void ggml_backend_sched_set_eval_callback(ggml_backend_sched_t sched, ggml_backend_sched_eval_callback callback, void * user_data) {
+    sched->callback_eval = callback;
+    sched->callback_eval_user_data = user_data;
+}
+
+int ggml_backend_sched_get_n_splits(ggml_backend_sched_t sched) {
+    return sched->n_splits;
+}
+
+int ggml_backend_sched_get_n_copies(ggml_backend_sched_t sched) {
+    return sched->n_copies;
+}
+
+int ggml_backend_sched_get_n_backends(ggml_backend_sched_t sched) {
+    return sched->n_backends;
+}
+
+ggml_backend_t ggml_backend_sched_get_backend(ggml_backend_sched_t sched, int i) {
+    GGML_ASSERT(i >= 0 && i < sched->n_backends);
+    return sched->backends[i];
+}
+
+size_t ggml_backend_sched_get_buffer_size(ggml_backend_sched_t sched, ggml_backend_t backend) {
+    int backend_index = ggml_backend_sched_backend_id(sched, backend);
+    GGML_ASSERT(backend_index >= 0 && backend_index < sched->n_backends);
+
+    return ggml_gallocr_get_buffer_size(sched->galloc, backend_index);
+}
+
+void ggml_backend_sched_set_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node, ggml_backend_t backend) {
+    int backend_index = ggml_backend_sched_backend_id(sched, backend);
+    GGML_ASSERT(backend_index >= 0 && backend_index < sched->n_backends);
+    tensor_backend_id(node) = backend_index;
+    SET_CAUSE(node, "usr");
+}
+
+ggml_backend_t ggml_backend_sched_get_tensor_backend(ggml_backend_sched_t sched, struct ggml_tensor * node) {
+    int backend_index = tensor_backend_id(node);
+    if (backend_index == -1) {
+        return NULL;
+    }
+    return sched->backends[backend_index];
+}
+
+// utils
+
+void ggml_backend_view_init(struct ggml_tensor * tensor) {
+    GGML_ASSERT(tensor->buffer == NULL);
+    GGML_ASSERT(tensor->view_src != NULL);
+    GGML_ASSERT(tensor->view_src->buffer != NULL);
+    GGML_ASSERT(tensor->view_src->data != NULL);
+
+    tensor->buffer = tensor->view_src->buffer;
+    tensor->data = (char *)tensor->view_src->data + tensor->view_offs;
+    ggml_backend_buffer_init_tensor(tensor->buffer, tensor);
+}
+
+void ggml_backend_tensor_alloc(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, void * addr) {
+    GGML_ASSERT(tensor->buffer == NULL);
+    GGML_ASSERT(tensor->data == NULL);
+    GGML_ASSERT(tensor->view_src == NULL);
+    GGML_ASSERT(addr >= ggml_backend_buffer_get_base(buffer));
+    GGML_ASSERT((char *)addr + ggml_backend_buffer_get_alloc_size(buffer, tensor) <=
+                (char *)ggml_backend_buffer_get_base(buffer) + ggml_backend_buffer_get_size(buffer));
+
+    tensor->buffer = buffer;
+    tensor->data = addr;
+    ggml_backend_buffer_init_tensor(buffer, tensor);
+}
+
+static struct ggml_tensor * graph_copy_dup_tensor(struct ggml_hash_set hash_set, struct ggml_tensor ** node_copies,
+    struct ggml_context * ctx_allocated, struct ggml_context * ctx_unallocated, struct ggml_tensor * src) {
+
+    GGML_ASSERT(src != NULL);
+    GGML_ASSERT(src->data && "graph must be allocated");
+
+    size_t id = ggml_hash_insert(hash_set, src);
+    if (id == GGML_HASHTABLE_ALREADY_EXISTS) {
+        return node_copies[ggml_hash_find(hash_set, src)];
+    }
+
+    struct ggml_tensor * dst = ggml_dup_tensor_layout(src->data && !src->view_src ? ctx_allocated : ctx_unallocated, src);
+    if (src->view_src != NULL) {
+        dst->view_src = graph_copy_dup_tensor(hash_set, node_copies, ctx_allocated, ctx_unallocated, src->view_src);
+        dst->view_offs = src->view_offs;
+    }
+    dst->op = src->op;
+    memcpy(dst->op_params, src->op_params, sizeof(dst->op_params));
+    ggml_set_name(dst, src->name);
+
+    // copy src
+    for (int i = 0; i < GGML_MAX_SRC; i++) {
+        struct ggml_tensor * s = src->src[i];
+        if (s == NULL) {
+            continue;
+        }
+        dst->src[i] = graph_copy_dup_tensor(hash_set, node_copies, ctx_allocated, ctx_unallocated, s);
+    }
+
+    node_copies[id] = dst;
+    return dst;
+}
+
+static void graph_copy_init_tensor(struct ggml_hash_set hash_set, struct ggml_tensor ** node_copies, bool * node_init, struct ggml_tensor * src) {
+    size_t id = ggml_hash_find(hash_set, src);
+    if (node_init[id]) {
+        return;
+    }
+    node_init[id] = true;
+
+    struct ggml_tensor * dst = node_copies[id];
+    if (dst->view_src != NULL) {
+        graph_copy_init_tensor(hash_set, node_copies, node_init, src->view_src);
+        ggml_backend_view_init(dst);
+    }
+    else {
+        ggml_backend_tensor_copy(src, dst);
+    }
+
+    // init src
+    for (int i = 0; i < GGML_MAX_SRC; i++) {
+        struct ggml_tensor * s = src->src[i];
+        if (s == NULL) {
+            continue;
+        }
+        graph_copy_init_tensor(hash_set, node_copies, node_init, s);
+    }
+}
+
+struct ggml_backend_graph_copy ggml_backend_graph_copy(ggml_backend_t backend, struct ggml_cgraph * graph) {
+    struct ggml_hash_set hash_set = {
+        /* .size = */ graph->visited_hash_table.size,
+        /* .keys = */ calloc(graph->visited_hash_table.size, sizeof(hash_set.keys[0])) // NOLINT
+    };
+    struct ggml_tensor ** node_copies = calloc(hash_set.size, sizeof(node_copies[0])); // NOLINT
+    bool * node_init = calloc(hash_set.size, sizeof(node_init[0]));
+
+    struct ggml_init_params params = {
+        /* .mem_size   = */ ggml_tensor_overhead()*hash_set.size + ggml_graph_overhead_custom(graph->size, false),
+        /* .mem_buffer = */ NULL,
+        /* .no_alloc   = */ true
+    };
+
+    struct ggml_context * ctx_allocated = ggml_init(params);
+    struct ggml_context * ctx_unallocated = ggml_init(params);
+
+    if (ctx_allocated == NULL || ctx_unallocated == NULL) {
+        fprintf(stderr, "failed to allocate context for graph copy\n");
+        free(hash_set.keys);
+        free(node_copies);
+        free(node_init);
+        ggml_free(ctx_allocated);
+        ggml_free(ctx_unallocated);
+        return (struct ggml_backend_graph_copy) {
+            /* .buffer           = */ NULL,
+            /* .ctx_allocated    = */ NULL,
+            /* .ctx_unallocated  = */ NULL,
+            /* .graph            = */ NULL,
+        };
+    }
+
+    // dup nodes
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+        graph_copy_dup_tensor(hash_set, node_copies, ctx_allocated, ctx_unallocated, node);
+    }
+
+    // allocate nodes
+    ggml_backend_buffer_t buffer = ggml_backend_alloc_ctx_tensors(ctx_allocated, backend);
+    if (buffer == NULL) {
+        fprintf(stderr, "failed to allocate buffer for graph copy\n");
+        free(hash_set.keys);
+        free(node_copies);
+        free(node_init);
+        ggml_free(ctx_allocated);
+        ggml_free(ctx_unallocated);
+        return (struct ggml_backend_graph_copy) {
+            /* .buffer           = */ NULL,
+            /* .ctx_allocated    = */ NULL,
+            /* .ctx_unallocated  = */ NULL,
+            /* .graph            = */ NULL,
+        };
+    }
+
+    //printf("copy buffer size: %zu MB\n", ggml_backend_buffer_get_size(buffer) / 1024 / 1024);
+
+    // copy data and init views
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+        graph_copy_init_tensor(hash_set, node_copies, node_init, node);
+    }
+
+    // build graph copy
+    struct ggml_cgraph * graph_copy = ggml_new_graph_custom(ctx_allocated, graph->size, false);
+    for (int i = 0; i < graph->n_nodes; i++) {
+        struct ggml_tensor * node = graph->nodes[i];
+        struct ggml_tensor * node_copy = node_copies[ggml_hash_find(hash_set, node)];
+        graph_copy->nodes[i] = node_copy;
+    }
+    graph_copy->n_nodes = graph->n_nodes;
+
+    free(hash_set.keys);
+    free(node_copies);
+    free(node_init);
+
+    return (struct ggml_backend_graph_copy) {
+        /* .buffer           = */ buffer,
+        /* .ctx_allocated    = */ ctx_allocated,
+        /* .ctx_unallocated  = */ ctx_unallocated,
+        /* .graph            = */ graph_copy,
+    };
+}
+
+void ggml_backend_graph_copy_free(struct ggml_backend_graph_copy copy) {
+    ggml_backend_buffer_free(copy.buffer);
+    ggml_free(copy.ctx_allocated);
+    ggml_free(copy.ctx_unallocated);
+}
+
+bool ggml_backend_compare_graph_backend(ggml_backend_t backend1, ggml_backend_t backend2, struct ggml_cgraph * graph, ggml_backend_eval_callback callback, void * user_data) {
+    struct ggml_backend_graph_copy copy = ggml_backend_graph_copy(backend2, graph);
+    if (copy.buffer == NULL) {
+        return false;
+    }
+
+    struct ggml_cgraph * g1 = graph;
+    struct ggml_cgraph * g2 = copy.graph;
+
+    assert(g1->n_nodes == g2->n_nodes);
+
+    for (int i = 0; i < g1->n_nodes; i++) {
+        //printf("eval %d/%d\n", i, g1->n_nodes);
+        struct ggml_tensor * t1 = g1->nodes[i];
+        struct ggml_tensor * t2 = g2->nodes[i];
+
+        assert(t1->op == t2->op && ggml_are_same_layout(t1, t2));
+
+        struct ggml_cgraph g1v = ggml_graph_view(g1, i, i + 1);
+        struct ggml_cgraph g2v = ggml_graph_view(g2, i, i + 1);
+
+        ggml_backend_graph_compute(backend1, &g1v);
+        ggml_backend_graph_compute(backend2, &g2v);
+
+        if (ggml_is_view_op(t1->op)) {
+            continue;
+        }
+
+        // compare results, calculate rms etc
+        if (!callback(i, t1, t2, user_data)) {
+            break;
+        }
+    }
+
+    ggml_backend_graph_copy_free(copy);
+
+    return true;
+}
diff --git a/ggml/src/ggml-blas.cpp b/ggml/src/ggml-blas.cpp
new file mode 100644 (file)
index 0000000..d709a35
--- /dev/null
@@ -0,0 +1,363 @@
+#include "ggml-blas.h"
+#include "ggml-backend-impl.h"
+
+#include <future>
+#include <vector>
+
+#if defined(GGML_USE_ACCELERATE)
+#   include <Accelerate/Accelerate.h>
+#elif defined(GGML_BLAS_USE_MKL)
+#   include <mkl.h>
+#else
+#   include <cblas.h>
+#   ifdef BLIS_ENABLE_CBLAS
+#       include <blis.h>
+#   endif
+#endif
+
+struct ggml_backend_blas_context {
+    int n_threads = GGML_DEFAULT_N_THREADS;
+    std::unique_ptr<char[]> work_data;
+    size_t work_size = 0;
+#ifndef GGML_USE_OPENMP
+    std::vector<std::future<void>> tasks;
+#endif
+};
+
+// helper function to determine if it is better to use BLAS or not
+// for large matrices, BLAS is faster
+static bool ggml_backend_blas_use_blas(const struct ggml_tensor * dst) {
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    const int64_t ne10 = src1->ne[0];
+
+    const int64_t ne0 = dst->ne[0];
+    const int64_t ne1 = dst->ne[1];
+
+    // TODO: find the optimal values for these
+    if (ggml_is_contiguous(src0) &&
+        ggml_is_contiguous(src1) &&
+        src1->type == GGML_TYPE_F32 &&
+        (ne0 >= 32 && ne1 >= 32 && ne10 >= 32)) {
+
+        /*printf("BLAS: %d %d %d %d %d\n", ne0, ne1, ne10, ne00, ne01);*/
+        return true;
+    }
+
+    return false;
+}
+
+static void ggml_backend_blas_mul_mat(ggml_backend_blas_context * ctx, struct ggml_tensor * dst) {
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const enum ggml_type type = src0->type;
+
+    GGML_ASSERT(ne0 == ne01);
+    GGML_ASSERT(ne1 == ne11);
+    GGML_ASSERT(ne2 == ne12);
+    GGML_ASSERT(ne3 == ne13);
+
+    // we don't support permuted src0 or src1
+    GGML_ASSERT(nb00 == ggml_type_size(type));
+    GGML_ASSERT(nb10 == ggml_type_size(src1->type));
+
+    // dst cannot be transposed or permuted
+    GGML_ASSERT(nb0 == sizeof(float));
+    GGML_ASSERT(nb0 <= nb1);
+    GGML_ASSERT(nb1 <= nb2);
+    GGML_ASSERT(nb2 <= nb3);
+
+    // broadcast factors
+    const int64_t r2 = ne12/ne02;
+    const int64_t r3 = ne13/ne03;
+
+    const int64_t ne_plane      = ne01*ne00;
+    const size_t  desired_wsize = type == GGML_TYPE_F32 ? 0 : ne03*ne02*ne_plane*sizeof(float);
+
+    if (ctx->work_size < desired_wsize) {
+        ctx->work_data.reset(new char[desired_wsize]);
+        ctx->work_size = desired_wsize;
+    }
+    void * wdata = ctx->work_data.get();
+
+    // convert src0 to float
+    if (type != GGML_TYPE_F32) {
+        ggml_type_traits_t type_traits = ggml_internal_get_type_traits(type);
+        ggml_to_float_t const to_float = type_traits.to_float;
+
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                const void  *       x      = (char *)  src0->data + i02*nb02          + i03*nb03;
+                      float * const wplane = (float *) wdata      + i02*ne_plane      + i03*ne02*ne_plane;
+
+                const int min_cols_per_thread = 4096;
+                const int min_rows_per_thread = std::max((int)(min_cols_per_thread/ne00), 1);
+                const int n_threads = std::max(std::min(ctx->n_threads, (int)(ne01/min_rows_per_thread)), 1);
+
+#ifdef GGML_USE_OPENMP
+                #pragma omp parallel for num_threads(n_threads)
+                for (int64_t i01 = 0; i01 < ne01; i01++) {
+                    to_float((const char *) x + i01*nb01, wplane + i01*ne00, ne00);
+                }
+#else
+                for (int i = 1; i < n_threads; i++) {
+                    const int64_t start =       i*ne01/n_threads;
+                    const int64_t end   = (i + 1)*ne01/n_threads;
+                    if (start < end) {
+                        ctx->tasks.push_back(std::async(std::launch::async, [=]() {
+                            for (int64_t i01 = start; i01 < end; i01++) {
+                                to_float((const char *) x + i01*nb01, wplane + i01*ne00, ne00);
+                            }
+                        }));
+                    }
+                }
+                {
+                    // reuse the current thread for the first task
+                    const int64_t start = 0;
+                    const int64_t end   = ne01/n_threads;
+                    for (int64_t i01 = start; i01 < end; i01++) {
+                        to_float((const char *) x + i01*nb01, wplane + i01*ne00, ne00);
+                    }
+                }
+#endif
+            }
+        }
+
+#ifndef GGML_USE_OPENMP
+        // wait for all tasks to finish
+        for (auto & task : ctx->tasks) {
+            task.get();
+        }
+        ctx->tasks.clear();
+#endif
+    }
+
+#if defined(OPENBLAS_VERSION)
+    openblas_set_num_threads(ctx->n_threads);
+#endif
+
+#if defined(BLIS_ENABLE_CBLAS)
+    bli_thread_set_num_threads(ctx->n_threads);
+#endif
+
+    for (int64_t i13 = 0; i13 < ne13; i13++) {
+        for (int64_t i12 = 0; i12 < ne12; i12++) {
+            const int64_t i03 = i13/r3;
+            const int64_t i02 = i12/r2;
+
+            const float * x = (float *) ((char *) src0->data + i02*nb02 + i03*nb03);
+            const float * y = (float *) ((char *) src1->data + i12*nb12 + i13*nb13);
+                  float * d = (float *) ((char *)  dst->data + i12*nb2  + i13*nb3);
+
+            if (type != GGML_TYPE_F32) {
+                x = (float *) wdata + i02*ne_plane + i03*ne02*ne_plane;
+            }
+
+            cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans,
+                        ne1, ne01, ne10,
+                        1.0f,   y, ne10,
+                                x, ne00,
+                        0.0f,   d, ne01);
+        }
+    }
+}
+
+static void ggml_backend_blas_out_prod(ggml_backend_blas_context * ctx, struct ggml_tensor * dst) {
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    GGML_ASSERT(ne0  == ne00);
+    GGML_ASSERT(ne1  == ne10);
+    GGML_ASSERT(ne2  == ne02);
+    GGML_ASSERT(ne02 == ne12);
+    GGML_ASSERT(ne3  == ne13);
+    GGML_ASSERT(ne03 == ne13);
+
+    // we don't support permuted src0 or src1
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    // dst cannot be transposed or permuted
+    GGML_ASSERT(nb0 == sizeof(float));
+    // GGML_ASSERT(nb0 <= nb1);
+    // GGML_ASSERT(nb1 <= nb2);
+    // GGML_ASSERT(nb2 <= nb3);
+
+    // Arguments to ggml_compute_forward_out_prod (expressed as major,minor)
+    // src0: (k,n)
+    // src1: (k,m)
+    // dst:  (m,n)
+    //
+    // Arguments to sgemm (see https://github.com/Reference-LAPACK/lapack/blob/master/BLAS/SRC/sgemm.f)
+    // Also expressed as (major,minor)
+    // a: (m,k): so src1 transposed
+    // b: (k,n): so src0
+    // c: (m,n)
+    //
+    // However, if ggml_is_transposed(src1) is true, then
+    // src1->data already contains a transposed version, so sgemm mustn't
+    // transpose it further.
+
+    int n = src0->ne[0];
+    int k = src0->ne[1];
+    int m = src1->ne[0];
+
+    CBLAS_TRANSPOSE transposeA;
+    int lda;
+
+    if (!ggml_is_transposed(src1)) {
+        transposeA = CblasTrans;
+        lda = m;
+    } else {
+        transposeA = CblasNoTrans;
+        lda = k;
+    }
+
+    float * a = (float *) ((char *) src1->data);
+    float * b = (float *) ((char *) src0->data);
+    float * c = (float *) ((char *) dst->data);
+
+    cblas_sgemm(CblasRowMajor, transposeA, CblasNoTrans, m, n, k, 1.0, a, lda, b, n, 0.0, c, n);
+
+    GGML_UNUSED(ctx);
+}
+
+// backend interface
+
+GGML_CALL static const char * ggml_backend_blas_name(ggml_backend_t backend) {
+    return "BLAS";
+
+    GGML_UNUSED(backend);
+}
+
+GGML_CALL static void ggml_backend_blas_free(ggml_backend_t backend) {
+    ggml_backend_blas_context * ctx = (ggml_backend_blas_context *)backend->context;
+    delete ctx;
+    delete backend;
+}
+
+GGML_CALL static ggml_backend_buffer_type_t ggml_backend_blas_get_default_buffer_type(ggml_backend_t backend) {
+    return ggml_backend_cpu_buffer_type();
+
+    GGML_UNUSED(backend);
+}
+
+GGML_CALL static enum ggml_status ggml_backend_blas_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
+    ggml_backend_blas_context * ctx = (ggml_backend_blas_context *)backend->context;
+
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        struct ggml_tensor * node = cgraph->nodes[i];
+
+        switch (node->op) {
+            case GGML_OP_MUL_MAT:
+                ggml_backend_blas_mul_mat(ctx, node);
+                break;
+
+            case GGML_OP_OUT_PROD:
+                ggml_backend_blas_out_prod(ctx, node);
+                break;
+
+            case GGML_OP_NONE:
+            case GGML_OP_RESHAPE:
+            case GGML_OP_VIEW:
+            case GGML_OP_PERMUTE:
+            case GGML_OP_TRANSPOSE:
+                break;
+
+            default:
+                fprintf(stderr, "%s: unsupported op %s\n", __func__, ggml_op_desc(node));
+                GGML_ASSERT(false);
+        }
+    }
+
+    return GGML_STATUS_SUCCESS;
+
+    GGML_UNUSED(backend);
+}
+
+GGML_CALL static bool ggml_backend_blas_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
+    const struct ggml_tensor * src0 = op->src[0];
+    const struct ggml_tensor * src1 = op->src[1];
+
+    return (op->op == GGML_OP_MUL_MAT  && ggml_backend_blas_use_blas(op)) ||
+           (op->op == GGML_OP_OUT_PROD && op->src[0]->type == GGML_TYPE_F32 &&
+                                          op->src[1]->type == GGML_TYPE_F32 &&
+                                          ggml_is_matrix(src0) &&
+                                          ggml_is_matrix(src1) &&
+                                          ggml_is_contiguous(src0) &&
+                                          (ggml_is_contiguous(src1) || ggml_is_transposed(src1)));
+
+    GGML_UNUSED(backend);
+}
+
+GGML_CALL static bool ggml_backend_blas_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
+    return ggml_backend_buft_is_host(buft);
+
+    GGML_UNUSED(backend);
+}
+
+static struct ggml_backend_i blas_backend_i = {
+    /* .get_name                = */ ggml_backend_blas_name,
+    /* .free                    = */ ggml_backend_blas_free,
+    /* .get_default_buffer_type = */ ggml_backend_blas_get_default_buffer_type,
+    /* .set_tensor_async        = */ NULL,
+    /* .get_tensor_async        = */ NULL,
+    /* .cpy_tensor_async        = */ NULL,
+    /* .synchronize             = */ NULL,
+    /* .graph_plan_create       = */ NULL,
+    /* .graph_plan_free         = */ NULL,
+    /* .graph_plan_update       = */ NULL,
+    /* .graph_plan_compute      = */ NULL,
+    /* .graph_compute           = */ ggml_backend_blas_graph_compute,
+    /* .supports_op             = */ ggml_backend_blas_supports_op,
+    /* .supports_buft           = */ ggml_backend_blas_supports_buft,
+    /* .offload_op              = */ NULL,
+    /* .event_new               = */ NULL,
+    /* .event_free              = */ NULL,
+    /* .event_record            = */ NULL,
+    /* .event_wait              = */ NULL,
+    /* .event_synchronize       = */ NULL,
+};
+
+static ggml_guid_t ggml_backend_blas_guid(void) {
+    static ggml_guid guid = { 0x12, 0xa8, 0xae, 0xf4, 0xc0, 0x1e, 0x61, 0x97, 0x8f, 0xeb, 0x33, 0x04, 0xa1, 0x33, 0x51, 0x2d };
+    return &guid;
+}
+
+ggml_backend_t ggml_backend_blas_init(void) {
+    ggml_backend_blas_context * ctx = new ggml_backend_blas_context;
+
+    ggml_backend_t backend = new ggml_backend {
+        /* .guid      = */ ggml_backend_blas_guid(),
+        /* .interface = */ blas_backend_i,
+        /* .context   = */ ctx,
+    };
+
+#if !defined(NDEBUG) && defined(OPENBLAS_VERSION) && defined(GGML_USE_OPENMP)
+    if (openblas_get_parallel() != OPENBLAS_OPENMP) {
+        fprintf(stderr, "%s: warning: ggml is using OpenMP, but OpenBLAS was compiled without OpenMP support\n", __func__);
+    }
+#endif
+
+#if !defined(NDEBUG) && defined(BLIS_ENABLE_CBLAS) && defined(GGML_USE_OPENMP) && !defined(BLIS_ENABLE_OPENMP)
+    fprintf(stderr, "%s: warning: ggml is using OpenMP, but BLIS was compiled without OpenMP support\n", __func__);
+#endif
+
+    return backend;
+}
+
+GGML_CALL bool ggml_backend_is_blas(ggml_backend_t backend) {
+    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_blas_guid());
+}
+
+void ggml_backend_blas_set_n_threads(ggml_backend_t backend_blas, int n_threads) {
+    GGML_ASSERT(ggml_backend_is_blas(backend_blas));
+
+    ggml_backend_blas_context * ctx = (ggml_backend_blas_context *)backend_blas->context;
+    ctx->n_threads = n_threads;
+}
diff --git a/ggml/src/ggml-common.h b/ggml/src/ggml-common.h
new file mode 100644 (file)
index 0000000..e8efceb
--- /dev/null
@@ -0,0 +1,1805 @@
+#ifndef GGML_COMMON_DECL
+
+#if defined(GGML_COMMON_DECL_C)
+#include <stdint.h>
+
+typedef uint16_t ggml_half;
+typedef uint32_t ggml_half2;
+
+#define GGML_COMMON_AGGR
+
+#define GGML_COMMON_DECL
+#elif defined(GGML_COMMON_DECL_METAL)
+#include <metal_stdlib>
+
+typedef half  ggml_half;
+typedef half2 ggml_half2;
+
+#define GGML_COMMON_AGGR
+
+#define GGML_COMMON_DECL
+#elif defined(GGML_COMMON_DECL_CUDA)
+#include <cuda_fp16.h>
+#include <cstdint>
+
+typedef half  ggml_half;
+typedef half2 ggml_half2;
+
+#define GGML_COMMON_AGGR data
+
+#define GGML_COMMON_DECL
+#elif defined(GGML_COMMON_DECL_HIP)
+#include <hip/hip_fp16.h>
+#include <cstdint>
+
+typedef half  ggml_half;
+typedef half2 ggml_half2;
+
+#define GGML_COMMON_AGGR data
+
+#define GGML_COMMON_DECL
+#elif defined(GGML_COMMON_DECL_SYCL)
+#include <sycl/half_type.hpp>
+#include <cstdint>
+
+typedef sycl::half  ggml_half;
+typedef sycl::half2 ggml_half2;
+
+#define GGML_COMMON_AGGR data
+
+#define GGML_COMMON_DECL
+#endif
+
+#if defined(GGML_COMMON_DECL)
+
+#ifndef __cplusplus
+#ifndef static_assert
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L)
+#define static_assert(cond, msg) _Static_assert(cond, msg)
+#else
+#define static_assert(cond, msg) struct global_scope_noop_trick
+#endif
+#endif
+#endif // __cplusplus
+
+// QK = number of values after dequantization
+// QK_K = super-block size
+
+#define QK_K 256
+#define K_SCALE_SIZE 12
+
+#if defined(GGML_COMMON_DECL_CUDA) || defined(GGML_COMMON_DECL_HIP) || defined(GGML_COMMON_DECL_SYCL)
+// QR = QK / number of values before dequantization
+// QI = number of 32 bit integers before dequantization
+
+#define QI4_0 (QK4_0 / (4 * QR4_0))
+#define QR4_0 2
+
+#define QI4_1 (QK4_1 / (4 * QR4_1))
+#define QR4_1 2
+
+#define QI5_0 (QK5_0 / (4 * QR5_0))
+#define QR5_0 2
+
+#define QI5_1 (QK5_1 / (4 * QR5_1))
+#define QR5_1 2
+
+#define QI8_0 (QK8_0 / (4 * QR8_0))
+#define QR8_0 1
+
+#define QI8_1 (QK8_1 / (4 * QR8_1))
+#define QR8_1 1
+
+#define QI2_K (QK_K / (4*QR2_K))
+#define QR2_K 4
+
+#define QI3_K (QK_K / (4*QR3_K))
+#define QR3_K 4
+
+#define QI4_K (QK_K / (4*QR4_K))
+#define QR4_K 2
+
+#define QI5_K (QK_K / (4*QR5_K))
+#define QR5_K 2
+
+#define QI6_K (QK_K / (4*QR6_K))
+#define QR6_K 2
+
+#define QI2_XXS (QK_K / (4*QR2_XXS))
+#define QR2_XXS 8
+
+#define QI2_XS (QK_K / (4*QR2_XS))
+#define QR2_XS 8
+
+#define QI2_S (QK_K / (4*QR2_S))
+#define QR2_S 8
+
+#define QI3_XXS (QK_K / (4*QR3_XXS))
+#define QR3_XXS 8
+
+#define QI3_XS (QK_K / (4*QR3_XS))
+#define QR3_XS 8
+
+#define QI1_S (QK_K / (4*QR1_S))
+#define QR1_S 8
+
+#define QI1_M (QK_K / (4*QR1_M))
+#define QR1_M 8
+
+#define QI4_NL (QK4_NL / (4*QR4_NL))
+#define QR4_NL 2
+
+#define QI4_XS (QK_K / (4*QR4_XS))
+#define QR4_XS 8
+
+#define QI3_S (QK_K / (4*QR3_S))
+#define QR3_S 8
+
+#endif // GGML_COMMON_DECL_CUDA || GGML_COMMON_DECL_HIP
+
+#define QK4_0 32
+typedef struct {
+    ggml_half d;           // delta
+    uint8_t qs[QK4_0 / 2]; // nibbles / quants
+} block_q4_0;
+static_assert(sizeof(block_q4_0) == sizeof(ggml_half) + QK4_0 / 2, "wrong q4_0 block size/padding");
+
+#define QK4_1 32
+typedef struct {
+    union {
+        struct {
+            ggml_half d; // delta
+            ggml_half m; // min
+        } GGML_COMMON_AGGR;
+        ggml_half2 dm;
+    };
+    uint8_t qs[QK4_1 / 2]; // nibbles / quants
+} block_q4_1;
+static_assert(sizeof(block_q4_1) == 2 * sizeof(ggml_half) + QK4_1 / 2, "wrong q4_1 block size/padding");
+
+#define QK5_0 32
+typedef struct {
+    ggml_half d;           // delta
+    uint8_t qh[4];         // 5-th bit of quants
+    uint8_t qs[QK5_0 / 2]; // nibbles / quants
+} block_q5_0;
+static_assert(sizeof(block_q5_0) == sizeof(ggml_half) + sizeof(uint32_t) + QK5_0 / 2, "wrong q5_0 block size/padding");
+
+#define QK5_1 32
+typedef struct {
+    union {
+        struct {
+            ggml_half d; // delta
+            ggml_half m; // min
+        } GGML_COMMON_AGGR;
+        ggml_half2 dm;
+    };
+    uint8_t qh[4];         // 5-th bit of quants
+    uint8_t qs[QK5_1 / 2]; // nibbles / quants
+} block_q5_1;
+static_assert(sizeof(block_q5_1) == 2 * sizeof(ggml_half) + sizeof(uint32_t) + QK5_1 / 2, "wrong q5_1 block size/padding");
+
+#define QK8_0 32
+typedef struct {
+    ggml_half d;       // delta
+    int8_t  qs[QK8_0]; // quants
+} block_q8_0;
+static_assert(sizeof(block_q8_0) == sizeof(ggml_half) + QK8_0, "wrong q8_0 block size/padding");
+
+#define QK8_1 32
+typedef struct {
+    union {
+        struct {
+            ggml_half d; // delta
+            ggml_half s; // d * sum(qs[i])
+        } GGML_COMMON_AGGR;
+        ggml_half2 ds;
+    };
+    int8_t qs[QK8_1]; // quants
+} block_q8_1;
+static_assert(sizeof(block_q8_1) == 2*sizeof(ggml_half) + QK8_1, "wrong q8_1 block size/padding");
+
+//
+// Super-block quantization structures
+//
+
+// 2-bit quantization
+// weight is represented as x = a * q + b
+// 16 blocks of 16 elements each
+// Effectively 2.625 bits per weight
+typedef struct {
+    uint8_t scales[QK_K/16]; // scales and mins, quantized with 4 bits
+    uint8_t qs[QK_K/4];      // quants
+    union {
+        struct {
+            ggml_half d;    // super-block scale for quantized scales
+            ggml_half dmin; // super-block scale for quantized mins
+        } GGML_COMMON_AGGR;
+        ggml_half2 dm;
+    };
+} block_q2_K;
+static_assert(sizeof(block_q2_K) == 2*sizeof(ggml_half) + QK_K/16 + QK_K/4, "wrong q2_K block size/padding");
+
+// 3-bit quantization
+// weight is represented as x = a * q
+// 16 blocks of 16 elements each
+// Effectively 3.4375 bits per weight
+typedef struct {
+    uint8_t hmask[QK_K/8]; // quants - high bit
+    uint8_t qs[QK_K/4];    // quants - low 2 bits
+    uint8_t scales[12];    // scales, quantized with 6 bits
+    ggml_half d;           // super-block scale
+} block_q3_K;
+static_assert(sizeof(block_q3_K) == sizeof(ggml_half) + QK_K / 4 + QK_K / 8 + 12, "wrong q3_K block size/padding");
+
+// 4-bit quantization
+// 8 blocks of 32 elements each
+// weight is represented as x = a * q + b
+// Effectively 4.5 bits per weight
+typedef struct {
+    union {
+        struct {
+            ggml_half d;    // super-block scale for quantized scales
+            ggml_half dmin; // super-block scale for quantized mins
+        } GGML_COMMON_AGGR;
+        ggml_half2 dm;
+    };
+    uint8_t scales[K_SCALE_SIZE]; // scales and mins, quantized with 6 bits
+    uint8_t qs[QK_K/2];           // 4--bit quants
+} block_q4_K;
+static_assert(sizeof(block_q4_K) == 2*sizeof(ggml_half) + K_SCALE_SIZE + QK_K/2, "wrong q4_K block size/padding");
+
+// 5-bit quantization
+// 8 blocks of 32 elements each
+// weight is represented as x = a * q + b
+// Effectively 5.5 bits per weight
+typedef struct {
+    union {
+        struct {
+            ggml_half d;    // super-block scale for quantized scales
+            ggml_half dmin; // super-block scale for quantized mins
+        } GGML_COMMON_AGGR;
+        ggml_half2 dm;
+    };
+    uint8_t scales[K_SCALE_SIZE]; // scales and mins, quantized with 6 bits
+    uint8_t qh[QK_K/8];           // quants, high bit
+    uint8_t qs[QK_K/2];           // quants, low 4 bits
+} block_q5_K;
+static_assert(sizeof(block_q5_K) == 2*sizeof(ggml_half) + K_SCALE_SIZE + QK_K/2 + QK_K/8, "wrong q5_K block size/padding");
+
+// 6-bit quantization
+// weight is represented as x = a * q
+// 16 blocks of 16 elements each
+// Effectively 6.5625 bits per weight
+typedef struct {
+    uint8_t ql[QK_K/2];      // quants, lower 4 bits
+    uint8_t qh[QK_K/4];      // quants, upper 2 bits
+    int8_t  scales[QK_K/16]; // scales, quantized with 8 bits
+    ggml_half d;             // super-block scale
+} block_q6_K;
+static_assert(sizeof(block_q6_K) == sizeof(ggml_half) + QK_K / 16 + 3*QK_K/4, "wrong q6_K block size/padding");
+
+// This is only used for intermediate quantization and dot products
+typedef struct {
+    float   d;              // delta
+    int8_t  qs[QK_K];       // quants
+    int16_t bsums[QK_K/16]; // sum of quants in groups of 16
+} block_q8_K;
+static_assert(sizeof(block_q8_K) == sizeof(float) + QK_K + QK_K/16*sizeof(int16_t), "wrong q8_K block size/padding");
+
+// (Almost) "true" 2-bit quantization.
+// Due to the need to use blocks as per ggml design, it ends up using
+// 2.0625 bpw because of the 16-bit scale for each block of 256.
+typedef struct {
+    ggml_half d;
+    uint16_t qs[QK_K/8];
+} block_iq2_xxs;
+static_assert(sizeof(block_iq2_xxs) == sizeof(ggml_half) + QK_K/8*sizeof(uint16_t), "wrong iq2_xxs block size/padding");
+
+// 2.3125 bpw quants
+typedef struct {
+    ggml_half d;
+    uint16_t qs[QK_K/8];
+    uint8_t  scales[QK_K/32];
+} block_iq2_xs;
+static_assert(sizeof(block_iq2_xs) == sizeof(ggml_half) + QK_K/8*sizeof(uint16_t) + QK_K/32, "wrong iq2_xs block size/padding");
+
+// 2.5625 bpw quants
+typedef struct {
+    ggml_half d;
+    uint8_t qs[QK_K/4];
+    uint8_t qh[QK_K/32];
+    uint8_t scales[QK_K/32];
+} block_iq2_s;
+static_assert(sizeof(block_iq2_s) == sizeof(ggml_half) + QK_K/4 + QK_K/16, "wrong iq2_s block size/padding");
+
+// (Almost) "true" 3-bit quantization.
+// Due to the need to use blocks as per ggml design, it ends up using
+// 3.0625 bpw because of the 16-bit scale for each block of 256.
+typedef struct {
+    ggml_half d;
+    uint8_t qs[3*QK_K/8];
+} block_iq3_xxs;
+static_assert(sizeof(block_iq3_xxs) == sizeof(ggml_half) + 3*(QK_K/8), "wrong iq3_xxs block size/padding");
+
+// 3.4375 bpw
+#define IQ3S_N_SCALE QK_K/64
+typedef struct {
+    ggml_half d;
+    uint8_t qs[QK_K/4];
+    uint8_t qh[QK_K/32];
+    uint8_t signs[QK_K/8];
+    uint8_t scales[IQ3S_N_SCALE];
+} block_iq3_s;
+static_assert(sizeof(block_iq3_s) == sizeof(ggml_half) + 13*(QK_K/32) + IQ3S_N_SCALE, "wrong iq3_s block size/padding");
+
+typedef struct {
+    ggml_half d;
+    uint8_t  qs[QK_K/8];
+    uint16_t qh[QK_K/32];
+} block_iq1_s;
+static_assert(sizeof(block_iq1_s) == sizeof(ggml_half) + QK_K/8 + QK_K/16, "wrong iq1_s block size/padding");
+
+// 1.75 bpw
+typedef struct {
+    uint8_t  qs[QK_K/8];      // grid index, low 8 bits
+    uint8_t  qh[QK_K/16];     // grid index, high 3 bits + grid shift bit (for two groups of 8)
+    uint8_t  scales[QK_K/32]; // 3-bit block scales (4-bit if QK_K == 64)
+} block_iq1_m;
+static_assert(sizeof(block_iq1_m) == QK_K/8 + QK_K/16 + QK_K/32, "wrong iq1_m block size/padding");
+
+// Used by IQ1_M quants
+typedef union {
+    ggml_half f16;
+    uint16_t  u16;
+} iq1m_scale_t;
+
+// Non-linear quants
+#define QK4_NL 32
+typedef struct {
+    ggml_half d;
+    uint8_t qs[QK4_NL/2];
+} block_iq4_nl;
+static_assert(sizeof(block_iq4_nl) == sizeof(ggml_half) + QK4_NL/2, "wrong iq4_nl block size/padding");
+
+typedef struct {
+    ggml_half d;
+    uint16_t scales_h;
+    uint8_t  scales_l[QK_K/64];
+    uint8_t  qs[QK_K/2];
+} block_iq4_xs;
+static_assert(sizeof(block_iq4_xs) == sizeof(ggml_half) + sizeof(uint16_t) + QK_K/64 + QK_K/2, "wrong iq4_xs block size/padding");
+
+#endif // GGML_COMMON_DECL
+#endif // GGML_COMMON_DECL
+
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef GGML_COMMON_IMPL
+
+#if defined(GGML_COMMON_IMPL_C)
+#include <stdint.h>
+
+#define GGML_TABLE_BEGIN(type, name, size) static const type name[size] = {
+#define GGML_TABLE_END() };
+
+#define GGML_COMMON_IMPL
+#elif defined(GGML_COMMON_IMPL_METAL)
+#include <metal_stdlib>
+
+#define GGML_TABLE_BEGIN(type, name, size) static const constant type name[size] = {
+#define GGML_TABLE_END() };
+
+#define GGML_COMMON_IMPL
+#elif defined(GGML_COMMON_IMPL_CUDA) || defined(GGML_COMMON_IMPL_HIP)
+#include <cstdint>
+
+#define GGML_TABLE_BEGIN(type, name, size) static const __device__ type name[size] = {
+#define GGML_TABLE_END() };
+
+#define GGML_COMMON_IMPL
+#elif defined(GGML_COMMON_IMPL_SYCL)
+
+#include <cstdint>
+
+#define GGML_TABLE_BEGIN(type, name, size) static const type name[size] = {
+#define GGML_TABLE_END() };
+
+#define GGML_COMMON_IMPL
+#endif
+
+#if defined(GGML_COMMON_IMPL)
+
+GGML_TABLE_BEGIN(uint8_t, kmask_iq2xs, 8)
+    1, 2, 4, 8, 16, 32, 64, 128
+GGML_TABLE_END()
+
+GGML_TABLE_BEGIN(uint8_t, ksigns_iq2xs, 128)
+      0, 129, 130,   3, 132,   5,   6, 135, 136,   9,  10, 139,  12, 141, 142,  15,
+    144,  17,  18, 147,  20, 149, 150,  23,  24, 153, 154,  27, 156,  29,  30, 159,
+    160,  33,  34, 163,  36, 165, 166,  39,  40, 169, 170,  43, 172,  45,  46, 175,
+     48, 177, 178,  51, 180,  53,  54, 183, 184,  57,  58, 187,  60, 189, 190,  63,
+    192,  65,  66, 195,  68, 197, 198,  71,  72, 201, 202,  75, 204,  77,  78, 207,
+     80, 209, 210,  83, 212,  85,  86, 215, 216,  89,  90, 219,  92, 221, 222,  95,
+     96, 225, 226,  99, 228, 101, 102, 231, 232, 105, 106, 235, 108, 237, 238, 111,
+    240, 113, 114, 243, 116, 245, 246, 119, 120, 249, 250, 123, 252, 125, 126, 255,
+GGML_TABLE_END()
+
+//#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+GGML_TABLE_BEGIN(uint64_t, ksigns64, 128)
+    0x0000000000000000, 0xff000000000000ff, 0xff0000000000ff00, 0x000000000000ffff,
+    0xff00000000ff0000, 0x0000000000ff00ff, 0x0000000000ffff00, 0xff00000000ffffff,
+    0xff000000ff000000, 0x00000000ff0000ff, 0x00000000ff00ff00, 0xff000000ff00ffff,
+    0x00000000ffff0000, 0xff000000ffff00ff, 0xff000000ffffff00, 0x00000000ffffffff,
+    0xff0000ff00000000, 0x000000ff000000ff, 0x000000ff0000ff00, 0xff0000ff0000ffff,
+    0x000000ff00ff0000, 0xff0000ff00ff00ff, 0xff0000ff00ffff00, 0x000000ff00ffffff,
+    0x000000ffff000000, 0xff0000ffff0000ff, 0xff0000ffff00ff00, 0x000000ffff00ffff,
+    0xff0000ffffff0000, 0x000000ffffff00ff, 0x000000ffffffff00, 0xff0000ffffffffff,
+    0xff00ff0000000000, 0x0000ff00000000ff, 0x0000ff000000ff00, 0xff00ff000000ffff,
+    0x0000ff0000ff0000, 0xff00ff0000ff00ff, 0xff00ff0000ffff00, 0x0000ff0000ffffff,
+    0x0000ff00ff000000, 0xff00ff00ff0000ff, 0xff00ff00ff00ff00, 0x0000ff00ff00ffff,
+    0xff00ff00ffff0000, 0x0000ff00ffff00ff, 0x0000ff00ffffff00, 0xff00ff00ffffffff,
+    0x0000ffff00000000, 0xff00ffff000000ff, 0xff00ffff0000ff00, 0x0000ffff0000ffff,
+    0xff00ffff00ff0000, 0x0000ffff00ff00ff, 0x0000ffff00ffff00, 0xff00ffff00ffffff,
+    0xff00ffffff000000, 0x0000ffffff0000ff, 0x0000ffffff00ff00, 0xff00ffffff00ffff,
+    0x0000ffffffff0000, 0xff00ffffffff00ff, 0xff00ffffffffff00, 0x0000ffffffffffff,
+    0xffff000000000000, 0x00ff0000000000ff, 0x00ff00000000ff00, 0xffff00000000ffff,
+    0x00ff000000ff0000, 0xffff000000ff00ff, 0xffff000000ffff00, 0x00ff000000ffffff,
+    0x00ff0000ff000000, 0xffff0000ff0000ff, 0xffff0000ff00ff00, 0x00ff0000ff00ffff,
+    0xffff0000ffff0000, 0x00ff0000ffff00ff, 0x00ff0000ffffff00, 0xffff0000ffffffff,
+    0x00ff00ff00000000, 0xffff00ff000000ff, 0xffff00ff0000ff00, 0x00ff00ff0000ffff,
+    0xffff00ff00ff0000, 0x00ff00ff00ff00ff, 0x00ff00ff00ffff00, 0xffff00ff00ffffff,
+    0xffff00ffff000000, 0x00ff00ffff0000ff, 0x00ff00ffff00ff00, 0xffff00ffff00ffff,
+    0x00ff00ffffff0000, 0xffff00ffffff00ff, 0xffff00ffffffff00, 0x00ff00ffffffffff,
+    0x00ffff0000000000, 0xffffff00000000ff, 0xffffff000000ff00, 0x00ffff000000ffff,
+    0xffffff0000ff0000, 0x00ffff0000ff00ff, 0x00ffff0000ffff00, 0xffffff0000ffffff,
+    0xffffff00ff000000, 0x00ffff00ff0000ff, 0x00ffff00ff00ff00, 0xffffff00ff00ffff,
+    0x00ffff00ffff0000, 0xffffff00ffff00ff, 0xffffff00ffffff00, 0x00ffff00ffffffff,
+    0xffffffff00000000, 0x00ffffff000000ff, 0x00ffffff0000ff00, 0xffffffff0000ffff,
+    0x00ffffff00ff0000, 0xffffffff00ff00ff, 0xffffffff00ffff00, 0x00ffffff00ffffff,
+    0x00ffffffff000000, 0xffffffffff0000ff, 0xffffffffff00ff00, 0x00ffffffff00ffff,
+    0xffffffffffff0000, 0x00ffffffffff00ff, 0x00ffffffffffff00, 0xffffffffffffffff,
+GGML_TABLE_END()
+//#endif
+
+
+GGML_TABLE_BEGIN(uint64_t, iq2xxs_grid, 256)
+    0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08,
+    0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x08080808082b0808,
+    0x08080808082b082b, 0x08080808082b2b08, 0x08080808082b2b2b, 0x0808080819080819,
+    0x0808080819081908, 0x0808080819190808, 0x0808080819192b08, 0x08080808192b0819,
+    0x08080808192b1908, 0x080808082b080808, 0x080808082b08082b, 0x080808082b082b2b,
+    0x080808082b2b082b, 0x0808081908080819, 0x0808081908081908, 0x0808081908190808,
+    0x0808081908191919, 0x0808081919080808, 0x080808192b081908, 0x080808192b192b08,
+    0x0808082b08080808, 0x0808082b0808082b, 0x0808082b082b082b, 0x0808082b2b08082b,
+    0x0808190808080819, 0x0808190808081908, 0x0808190808190808, 0x08081908082b0819,
+    0x08081908082b1908, 0x0808190819080808, 0x080819081908082b, 0x0808190819082b08,
+    0x08081908192b0808, 0x080819082b080819, 0x080819082b081908, 0x080819082b190808,
+    0x080819082b2b1908, 0x0808191908080808, 0x080819190808082b, 0x0808191908082b08,
+    0x08081919082b0808, 0x080819191908192b, 0x08081919192b2b19, 0x080819192b080808,
+    0x080819192b190819, 0x0808192b08082b19, 0x0808192b08190808, 0x0808192b19080808,
+    0x0808192b2b081908, 0x0808192b2b2b1908, 0x08082b0808080808, 0x08082b0808081919,
+    0x08082b0808082b08, 0x08082b0808191908, 0x08082b08082b2b08, 0x08082b0819080819,
+    0x08082b0819081908, 0x08082b0819190808, 0x08082b081919082b, 0x08082b082b082b08,
+    0x08082b1908081908, 0x08082b1919080808, 0x08082b2b0808082b, 0x08082b2b08191908,
+    0x0819080808080819, 0x0819080808081908, 0x0819080808190808, 0x08190808082b0819,
+    0x0819080819080808, 0x08190808192b0808, 0x081908082b081908, 0x081908082b190808,
+    0x081908082b191919, 0x0819081908080808, 0x0819081908082b08, 0x08190819082b0808,
+    0x0819081919190808, 0x0819081919192b2b, 0x081908192b080808, 0x0819082b082b1908,
+    0x0819082b19081919, 0x0819190808080808, 0x0819190808082b08, 0x08191908082b0808,
+    0x08191908082b1919, 0x0819190819082b19, 0x081919082b080808, 0x0819191908192b08,
+    0x08191919192b082b, 0x0819192b08080808, 0x0819192b0819192b, 0x08192b0808080819,
+    0x08192b0808081908, 0x08192b0808190808, 0x08192b0819080808, 0x08192b082b080819,
+    0x08192b1908080808, 0x08192b1908081919, 0x08192b192b2b0808, 0x08192b2b19190819,
+    0x082b080808080808, 0x082b08080808082b, 0x082b080808082b2b, 0x082b080819081908,
+    0x082b0808192b0819, 0x082b08082b080808, 0x082b08082b08082b, 0x082b0819082b2b19,
+    0x082b081919082b08, 0x082b082b08080808, 0x082b082b0808082b, 0x082b190808080819,
+    0x082b190808081908, 0x082b190808190808, 0x082b190819080808, 0x082b19081919192b,
+    0x082b191908080808, 0x082b191919080819, 0x082b1919192b1908, 0x082b192b2b190808,
+    0x082b2b0808082b08, 0x082b2b08082b0808, 0x082b2b082b191908, 0x082b2b2b19081908,
+    0x1908080808080819, 0x1908080808081908, 0x1908080808190808, 0x1908080808192b08,
+    0x19080808082b0819, 0x19080808082b1908, 0x1908080819080808, 0x1908080819082b08,
+    0x190808081919192b, 0x19080808192b0808, 0x190808082b080819, 0x190808082b081908,
+    0x190808082b190808, 0x1908081908080808, 0x19080819082b0808, 0x19080819192b0819,
+    0x190808192b080808, 0x190808192b081919, 0x1908082b08080819, 0x1908082b08190808,
+    0x1908082b19082b08, 0x1908082b1919192b, 0x1908082b192b2b08, 0x1908190808080808,
+    0x1908190808082b08, 0x19081908082b0808, 0x190819082b080808, 0x190819082b192b19,
+    0x190819190819082b, 0x19081919082b1908, 0x1908192b08080808, 0x19082b0808080819,
+    0x19082b0808081908, 0x19082b0808190808, 0x19082b0819080808, 0x19082b0819081919,
+    0x19082b1908080808, 0x19082b1919192b08, 0x19082b19192b0819, 0x19082b192b08082b,
+    0x19082b2b19081919, 0x19082b2b2b190808, 0x1919080808080808, 0x1919080808082b08,
+    0x1919080808190819, 0x1919080808192b19, 0x19190808082b0808, 0x191908082b080808,
+    0x191908082b082b08, 0x1919081908081908, 0x191908191908082b, 0x191908192b2b1908,
+    0x1919082b2b190819, 0x191919082b190808, 0x191919082b19082b, 0x1919191908082b2b,
+    0x1919192b08080819, 0x1919192b19191908, 0x19192b0808080808, 0x19192b0808190819,
+    0x19192b0808192b19, 0x19192b08192b1908, 0x19192b1919080808, 0x19192b2b08082b08,
+    0x192b080808081908, 0x192b080808190808, 0x192b080819080808, 0x192b0808192b2b08,
+    0x192b081908080808, 0x192b081919191919, 0x192b082b08192b08, 0x192b082b192b0808,
+    0x192b190808080808, 0x192b190808081919, 0x192b191908190808, 0x192b19190819082b,
+    0x192b19192b081908, 0x192b2b081908082b, 0x2b08080808080808, 0x2b0808080808082b,
+    0x2b08080808082b2b, 0x2b08080819080819, 0x2b0808082b08082b, 0x2b08081908081908,
+    0x2b08081908192b08, 0x2b08081919080808, 0x2b08082b08190819, 0x2b08190808080819,
+    0x2b08190808081908, 0x2b08190808190808, 0x2b08190808191919, 0x2b08190819080808,
+    0x2b081908192b0808, 0x2b08191908080808, 0x2b0819191908192b, 0x2b0819192b191908,
+    0x2b08192b08082b19, 0x2b08192b19080808, 0x2b08192b192b0808, 0x2b082b080808082b,
+    0x2b082b1908081908, 0x2b082b2b08190819, 0x2b19080808081908, 0x2b19080808190808,
+    0x2b190808082b1908, 0x2b19080819080808, 0x2b1908082b2b0819, 0x2b1908190819192b,
+    0x2b1908192b080808, 0x2b19082b19081919, 0x2b19190808080808, 0x2b191908082b082b,
+    0x2b19190819081908, 0x2b19191919190819, 0x2b192b082b080819, 0x2b192b19082b0808,
+    0x2b2b08080808082b, 0x2b2b080819190808, 0x2b2b08082b081919, 0x2b2b081908082b19,
+    0x2b2b082b08080808, 0x2b2b190808192b08, 0x2b2b2b0819190808, 0x2b2b2b1908081908,
+GGML_TABLE_END()
+
+GGML_TABLE_BEGIN(uint64_t, iq2xs_grid, 512)
+    0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08,
+    0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x080808080819192b,
+    0x0808080808192b19, 0x08080808082b0808, 0x08080808082b082b, 0x08080808082b1919,
+    0x08080808082b2b08, 0x0808080819080819, 0x0808080819081908, 0x080808081908192b,
+    0x0808080819082b19, 0x0808080819190808, 0x080808081919082b, 0x0808080819191919,
+    0x0808080819192b08, 0x08080808192b0819, 0x08080808192b1908, 0x080808082b080808,
+    0x080808082b08082b, 0x080808082b081919, 0x080808082b082b08, 0x080808082b190819,
+    0x080808082b191908, 0x080808082b192b19, 0x080808082b2b0808, 0x0808081908080819,
+    0x0808081908081908, 0x080808190808192b, 0x0808081908082b19, 0x0808081908190808,
+    0x080808190819082b, 0x0808081908191919, 0x0808081908192b08, 0x0808081908192b2b,
+    0x08080819082b0819, 0x08080819082b1908, 0x0808081919080808, 0x080808191908082b,
+    0x0808081919081919, 0x0808081919082b08, 0x0808081919190819, 0x0808081919191908,
+    0x08080819192b0808, 0x08080819192b2b08, 0x080808192b080819, 0x080808192b081908,
+    0x080808192b190808, 0x0808082b08080808, 0x0808082b0808082b, 0x0808082b08081919,
+    0x0808082b08082b08, 0x0808082b08190819, 0x0808082b08191908, 0x0808082b082b0808,
+    0x0808082b19080819, 0x0808082b19081908, 0x0808082b19190808, 0x0808082b19191919,
+    0x0808082b2b080808, 0x0808082b2b082b2b, 0x0808190808080819, 0x0808190808081908,
+    0x080819080808192b, 0x0808190808082b19, 0x0808190808190808, 0x080819080819082b,
+    0x0808190808191919, 0x0808190808192b08, 0x08081908082b0819, 0x08081908082b1908,
+    0x0808190819080808, 0x080819081908082b, 0x0808190819081919, 0x0808190819082b08,
+    0x0808190819190819, 0x0808190819191908, 0x080819081919192b, 0x08081908192b0808,
+    0x080819082b080819, 0x080819082b081908, 0x080819082b190808, 0x0808191908080808,
+    0x080819190808082b, 0x0808191908081919, 0x0808191908082b08, 0x0808191908190819,
+    0x0808191908191908, 0x08081919082b0808, 0x0808191919080819, 0x0808191919081908,
+    0x0808191919190808, 0x08081919192b0819, 0x080819192b080808, 0x0808192b08080819,
+    0x0808192b08081908, 0x0808192b08190808, 0x0808192b082b192b, 0x0808192b19080808,
+    0x0808192b1908082b, 0x0808192b2b081908, 0x08082b0808080808, 0x08082b080808082b,
+    0x08082b0808081919, 0x08082b0808082b08, 0x08082b0808082b2b, 0x08082b0808190819,
+    0x08082b0808191908, 0x08082b08082b0808, 0x08082b08082b1919, 0x08082b0819080819,
+    0x08082b0819081908, 0x08082b0819190808, 0x08082b0819192b08, 0x08082b082b080808,
+    0x08082b082b2b0808, 0x08082b082b2b2b2b, 0x08082b1908080819, 0x08082b1908081908,
+    0x08082b1908190808, 0x08082b1919080808, 0x08082b192b080819, 0x08082b192b082b19,
+    0x08082b2b08080808, 0x08082b2b082b0808, 0x08082b2b082b2b08, 0x08082b2b2b19192b,
+    0x08082b2b2b2b0808, 0x0819080808080819, 0x0819080808081908, 0x081908080808192b,
+    0x0819080808082b19, 0x0819080808190808, 0x081908080819082b, 0x0819080808191919,
+    0x0819080808192b08, 0x08190808082b0819, 0x08190808082b1908, 0x0819080819080808,
+    0x081908081908082b, 0x0819080819081919, 0x0819080819082b08, 0x0819080819190819,
+    0x0819080819191908, 0x08190808192b0808, 0x08190808192b2b2b, 0x081908082b080819,
+    0x081908082b081908, 0x081908082b190808, 0x0819081908080808, 0x081908190808082b,
+    0x0819081908081919, 0x0819081908082b08, 0x0819081908190819, 0x0819081908191908,
+    0x08190819082b0808, 0x0819081919080819, 0x0819081919081908, 0x0819081919190808,
+    0x081908192b080808, 0x081908192b191908, 0x081908192b19192b, 0x0819082b08080819,
+    0x0819082b08081908, 0x0819082b0808192b, 0x0819082b08190808, 0x0819082b19080808,
+    0x0819082b192b0808, 0x0819190808080808, 0x081919080808082b, 0x0819190808081919,
+    0x0819190808082b08, 0x0819190808190819, 0x0819190808191908, 0x08191908082b0808,
+    0x0819190819080819, 0x0819190819081908, 0x0819190819082b19, 0x0819190819190808,
+    0x08191908192b1908, 0x081919082b080808, 0x0819191908080819, 0x0819191908081908,
+    0x0819191908190808, 0x0819191919080808, 0x0819192b08080808, 0x0819192b08191908,
+    0x0819192b19082b19, 0x08192b0808080819, 0x08192b0808081908, 0x08192b0808190808,
+    0x08192b080819082b, 0x08192b0819080808, 0x08192b0819191908, 0x08192b082b08192b,
+    0x08192b1908080808, 0x08192b1908081919, 0x08192b19192b192b, 0x08192b2b19190819,
+    0x08192b2b2b2b2b19, 0x082b080808080808, 0x082b08080808082b, 0x082b080808081919,
+    0x082b080808082b08, 0x082b080808082b2b, 0x082b080808190819, 0x082b080808191908,
+    0x082b0808082b0808, 0x082b080819080819, 0x082b080819081908, 0x082b080819190808,
+    0x082b08082b080808, 0x082b08082b2b0808, 0x082b081908080819, 0x082b081908081908,
+    0x082b081908190808, 0x082b081919080808, 0x082b081919082b08, 0x082b0819192b1919,
+    0x082b082b08080808, 0x082b082b082b082b, 0x082b082b2b080808, 0x082b082b2b2b2b08,
+    0x082b190808080819, 0x082b190808081908, 0x082b190808190808, 0x082b1908082b2b19,
+    0x082b190819080808, 0x082b191908080808, 0x082b191919080819, 0x082b19191919082b,
+    0x082b19192b192b19, 0x082b192b08080819, 0x082b192b08192b2b, 0x082b192b2b2b192b,
+    0x082b2b0808080808, 0x082b2b0808082b08, 0x082b2b0808082b2b, 0x082b2b08082b0808,
+    0x082b2b0819191919, 0x082b2b082b082b08, 0x082b2b082b2b082b, 0x082b2b19192b2b08,
+    0x082b2b192b190808, 0x082b2b2b08082b08, 0x082b2b2b082b0808, 0x082b2b2b2b08082b,
+    0x082b2b2b2b082b08, 0x082b2b2b2b082b2b, 0x1908080808080819, 0x1908080808081908,
+    0x190808080808192b, 0x1908080808082b19, 0x1908080808190808, 0x190808080819082b,
+    0x1908080808191919, 0x1908080808192b08, 0x19080808082b0819, 0x19080808082b1908,
+    0x1908080819080808, 0x190808081908082b, 0x1908080819081919, 0x1908080819082b08,
+    0x1908080819082b2b, 0x1908080819190819, 0x1908080819191908, 0x19080808192b0808,
+    0x19080808192b1919, 0x190808082b080819, 0x190808082b081908, 0x190808082b190808,
+    0x1908081908080808, 0x190808190808082b, 0x1908081908081919, 0x1908081908082b08,
+    0x1908081908190819, 0x1908081908191908, 0x19080819082b0808, 0x1908081919080819,
+    0x1908081919081908, 0x1908081919190808, 0x190808192b080808, 0x190808192b081919,
+    0x190808192b2b082b, 0x1908082b08080819, 0x1908082b08081908, 0x1908082b08190808,
+    0x1908082b0819082b, 0x1908082b082b2b19, 0x1908082b19080808, 0x1908190808080808,
+    0x190819080808082b, 0x1908190808081919, 0x1908190808082b08, 0x1908190808190819,
+    0x1908190808191908, 0x1908190808192b19, 0x19081908082b0808, 0x1908190819080819,
+    0x1908190819081908, 0x1908190819190808, 0x190819082b080808, 0x190819082b191908,
+    0x1908191908080819, 0x1908191908081908, 0x1908191908190808, 0x19081919082b1908,
+    0x1908191919080808, 0x190819192b192b2b, 0x1908192b08080808, 0x1908192b08082b2b,
+    0x1908192b19081908, 0x1908192b19190808, 0x19082b0808080819, 0x19082b0808081908,
+    0x19082b0808190808, 0x19082b0819080808, 0x19082b0819081919, 0x19082b0819191908,
+    0x19082b08192b082b, 0x19082b1908080808, 0x19082b1908190819, 0x19082b1919081908,
+    0x19082b1919190808, 0x19082b19192b2b19, 0x19082b2b08081908, 0x1919080808080808,
+    0x191908080808082b, 0x1919080808081919, 0x1919080808082b08, 0x1919080808190819,
+    0x1919080808191908, 0x19190808082b0808, 0x19190808082b2b08, 0x1919080819080819,
+    0x1919080819081908, 0x1919080819190808, 0x191908082b080808, 0x1919081908080819,
+    0x1919081908081908, 0x1919081908190808, 0x1919081908191919, 0x1919081919080808,
+    0x191908191908082b, 0x1919082b08080808, 0x1919082b19081908, 0x1919082b2b2b2b2b,
+    0x1919190808080819, 0x1919190808081908, 0x1919190808190808, 0x19191908082b0819,
+    0x1919190819080808, 0x19191908192b0808, 0x191919082b080819, 0x191919082b2b0819,
+    0x1919191908080808, 0x1919191908082b08, 0x191919192b080808, 0x191919192b082b08,
+    0x1919192b082b0819, 0x1919192b192b2b08, 0x1919192b2b2b0819, 0x19192b0808080808,
+    0x19192b0808191908, 0x19192b0819080819, 0x19192b0819190808, 0x19192b082b192b19,
+    0x19192b1908192b2b, 0x19192b1919080808, 0x19192b191908082b, 0x19192b2b2b081919,
+    0x192b080808080819, 0x192b080808081908, 0x192b080808190808, 0x192b080819080808,
+    0x192b080819191908, 0x192b0808192b082b, 0x192b08082b08192b, 0x192b08082b2b2b19,
+    0x192b081908080808, 0x192b082b082b1908, 0x192b082b19082b2b, 0x192b082b2b19082b,
+    0x192b190808080808, 0x192b19080819192b, 0x192b191908190808, 0x192b191919080808,
+    0x192b191919081919, 0x192b19192b2b1908, 0x192b2b0808080819, 0x192b2b08192b2b2b,
+    0x192b2b19082b1919, 0x192b2b2b0808192b, 0x192b2b2b19191908, 0x192b2b2b192b082b,
+    0x2b08080808080808, 0x2b0808080808082b, 0x2b08080808081919, 0x2b08080808082b08,
+    0x2b08080808190819, 0x2b08080808191908, 0x2b080808082b0808, 0x2b080808082b2b2b,
+    0x2b08080819080819, 0x2b08080819081908, 0x2b08080819190808, 0x2b0808082b080808,
+    0x2b0808082b08082b, 0x2b0808082b2b2b08, 0x2b0808082b2b2b2b, 0x2b08081908080819,
+    0x2b08081908081908, 0x2b0808190808192b, 0x2b08081908190808, 0x2b08081919080808,
+    0x2b08081919190819, 0x2b08081919192b19, 0x2b08082b08080808, 0x2b08082b082b0808,
+    0x2b08082b2b080808, 0x2b08082b2b08082b, 0x2b08082b2b2b0808, 0x2b08082b2b2b2b08,
+    0x2b08190808080819, 0x2b08190808081908, 0x2b08190808190808, 0x2b0819080819082b,
+    0x2b08190808191919, 0x2b08190819080808, 0x2b081908192b0808, 0x2b0819082b082b19,
+    0x2b08191908080808, 0x2b08191919081908, 0x2b0819192b2b1919, 0x2b08192b08192b08,
+    0x2b08192b192b2b2b, 0x2b082b0808080808, 0x2b082b0808082b08, 0x2b082b08082b1919,
+    0x2b082b0819192b2b, 0x2b082b082b080808, 0x2b082b082b08082b, 0x2b082b082b2b2b08,
+    0x2b082b190808192b, 0x2b082b2b082b082b, 0x2b082b2b2b080808, 0x2b082b2b2b082b08,
+    0x2b082b2b2b19192b, 0x2b082b2b2b2b2b08, 0x2b19080808080819, 0x2b19080808081908,
+    0x2b19080808190808, 0x2b19080819080808, 0x2b1908081919192b, 0x2b1908082b081908,
+    0x2b19081908080808, 0x2b190819082b082b, 0x2b190819192b1908, 0x2b19082b1919192b,
+    0x2b19082b2b082b19, 0x2b19190808080808, 0x2b19190808081919, 0x2b19190819081908,
+    0x2b19190819190808, 0x2b19190819192b08, 0x2b191919082b2b19, 0x2b1919192b190808,
+    0x2b1919192b19082b, 0x2b19192b19080819, 0x2b192b0819190819, 0x2b192b082b2b192b,
+    0x2b192b1919082b19, 0x2b192b2b08191919, 0x2b192b2b192b0808, 0x2b2b080808080808,
+    0x2b2b08080808082b, 0x2b2b080808082b08, 0x2b2b080808082b2b, 0x2b2b0808082b0808,
+    0x2b2b0808082b2b2b, 0x2b2b08082b2b0808, 0x2b2b081919190819, 0x2b2b081919192b19,
+    0x2b2b08192b2b192b, 0x2b2b082b08080808, 0x2b2b082b0808082b, 0x2b2b082b08082b08,
+    0x2b2b082b082b2b2b, 0x2b2b082b2b080808, 0x2b2b082b2b2b0808, 0x2b2b190819080808,
+    0x2b2b19082b191919, 0x2b2b192b192b1919, 0x2b2b192b2b192b08, 0x2b2b2b0808082b2b,
+    0x2b2b2b08082b0808, 0x2b2b2b08082b082b, 0x2b2b2b08082b2b08, 0x2b2b2b082b2b0808,
+    0x2b2b2b082b2b2b08, 0x2b2b2b1908081908, 0x2b2b2b192b081908, 0x2b2b2b192b08192b,
+    0x2b2b2b2b082b2b08, 0x2b2b2b2b082b2b2b, 0x2b2b2b2b2b190819, 0x2b2b2b2b2b2b2b2b,
+GGML_TABLE_END()
+
+GGML_TABLE_BEGIN(uint64_t, iq2s_grid, 1024)
+    0x0808080808080808, 0x080808080808082b, 0x0808080808081919, 0x0808080808082b08,
+    0x0808080808082b2b, 0x0808080808190819, 0x0808080808191908, 0x080808080819192b,
+    0x0808080808192b19, 0x08080808082b0808, 0x08080808082b082b, 0x08080808082b1919,
+    0x08080808082b2b08, 0x0808080819080819, 0x0808080819081908, 0x080808081908192b,
+    0x0808080819082b19, 0x0808080819190808, 0x080808081919082b, 0x0808080819191919,
+    0x0808080819192b08, 0x08080808192b0819, 0x08080808192b1908, 0x08080808192b192b,
+    0x08080808192b2b19, 0x080808082b080808, 0x080808082b08082b, 0x080808082b081919,
+    0x080808082b082b08, 0x080808082b190819, 0x080808082b191908, 0x080808082b2b0808,
+    0x080808082b2b1919, 0x080808082b2b2b2b, 0x0808081908080819, 0x0808081908081908,
+    0x080808190808192b, 0x0808081908082b19, 0x0808081908190808, 0x080808190819082b,
+    0x0808081908191919, 0x0808081908192b08, 0x08080819082b0819, 0x08080819082b1908,
+    0x0808081919080808, 0x080808191908082b, 0x0808081919081919, 0x0808081919082b08,
+    0x0808081919190819, 0x0808081919191908, 0x080808191919192b, 0x0808081919192b19,
+    0x08080819192b0808, 0x08080819192b1919, 0x08080819192b2b08, 0x080808192b080819,
+    0x080808192b081908, 0x080808192b190808, 0x080808192b19082b, 0x080808192b191919,
+    0x080808192b2b0819, 0x080808192b2b1908, 0x0808082b08080808, 0x0808082b0808082b,
+    0x0808082b08081919, 0x0808082b08082b08, 0x0808082b08190819, 0x0808082b08191908,
+    0x0808082b082b0808, 0x0808082b082b2b2b, 0x0808082b19080819, 0x0808082b19081908,
+    0x0808082b1908192b, 0x0808082b19082b19, 0x0808082b19190808, 0x0808082b19191919,
+    0x0808082b2b080808, 0x0808082b2b081919, 0x0808082b2b082b2b, 0x0808082b2b191908,
+    0x0808082b2b2b082b, 0x0808190808080819, 0x0808190808081908, 0x080819080808192b,
+    0x0808190808082b19, 0x0808190808190808, 0x080819080819082b, 0x0808190808191919,
+    0x0808190808192b08, 0x08081908082b0819, 0x08081908082b1908, 0x08081908082b192b,
+    0x08081908082b2b19, 0x0808190819080808, 0x080819081908082b, 0x0808190819081919,
+    0x0808190819082b08, 0x0808190819082b2b, 0x0808190819190819, 0x0808190819191908,
+    0x080819081919192b, 0x0808190819192b19, 0x08081908192b0808, 0x08081908192b082b,
+    0x08081908192b1919, 0x080819082b080819, 0x080819082b081908, 0x080819082b08192b,
+    0x080819082b082b19, 0x080819082b190808, 0x080819082b191919, 0x080819082b192b08,
+    0x080819082b2b0819, 0x080819082b2b1908, 0x0808191908080808, 0x080819190808082b,
+    0x0808191908081919, 0x0808191908082b08, 0x0808191908082b2b, 0x0808191908190819,
+    0x0808191908191908, 0x080819190819192b, 0x0808191908192b19, 0x08081919082b0808,
+    0x08081919082b1919, 0x08081919082b2b08, 0x0808191919080819, 0x0808191919081908,
+    0x080819191908192b, 0x0808191919082b19, 0x0808191919190808, 0x080819191919082b,
+    0x0808191919191919, 0x0808191919192b08, 0x08081919192b0819, 0x08081919192b1908,
+    0x080819192b080808, 0x080819192b08082b, 0x080819192b081919, 0x080819192b082b08,
+    0x080819192b190819, 0x080819192b191908, 0x080819192b2b0808, 0x0808192b08080819,
+    0x0808192b08081908, 0x0808192b0808192b, 0x0808192b08082b19, 0x0808192b08190808,
+    0x0808192b08191919, 0x0808192b19080808, 0x0808192b19081919, 0x0808192b19082b08,
+    0x0808192b19190819, 0x0808192b19191908, 0x0808192b192b0808, 0x0808192b2b080819,
+    0x0808192b2b081908, 0x0808192b2b190808, 0x08082b0808080808, 0x08082b080808082b,
+    0x08082b0808081919, 0x08082b0808082b08, 0x08082b0808190819, 0x08082b0808191908,
+    0x08082b080819192b, 0x08082b0808192b19, 0x08082b08082b0808, 0x08082b08082b1919,
+    0x08082b08082b2b2b, 0x08082b0819080819, 0x08082b0819081908, 0x08082b081908192b,
+    0x08082b0819082b19, 0x08082b0819190808, 0x08082b081919082b, 0x08082b0819191919,
+    0x08082b0819192b08, 0x08082b08192b0819, 0x08082b08192b1908, 0x08082b082b080808,
+    0x08082b082b081919, 0x08082b082b191908, 0x08082b082b2b2b2b, 0x08082b1908080819,
+    0x08082b1908081908, 0x08082b1908190808, 0x08082b190819082b, 0x08082b1908191919,
+    0x08082b1908192b08, 0x08082b19082b0819, 0x08082b1919080808, 0x08082b1919081919,
+    0x08082b1919082b08, 0x08082b1919190819, 0x08082b1919191908, 0x08082b19192b0808,
+    0x08082b192b080819, 0x08082b192b190808, 0x08082b2b08080808, 0x08082b2b08190819,
+    0x08082b2b08191908, 0x08082b2b082b082b, 0x08082b2b082b2b08, 0x08082b2b082b2b2b,
+    0x08082b2b19190808, 0x08082b2b2b192b19, 0x0819080808080819, 0x0819080808081908,
+    0x081908080808192b, 0x0819080808082b19, 0x0819080808190808, 0x081908080819082b,
+    0x0819080808191919, 0x0819080808192b08, 0x08190808082b0819, 0x08190808082b1908,
+    0x08190808082b192b, 0x0819080819080808, 0x081908081908082b, 0x0819080819081919,
+    0x0819080819082b08, 0x0819080819190819, 0x0819080819191908, 0x081908081919192b,
+    0x0819080819192b19, 0x08190808192b0808, 0x08190808192b082b, 0x08190808192b1919,
+    0x08190808192b2b08, 0x081908082b080819, 0x081908082b081908, 0x081908082b08192b,
+    0x081908082b190808, 0x081908082b191919, 0x081908082b192b08, 0x081908082b2b0819,
+    0x081908082b2b1908, 0x0819081908080808, 0x081908190808082b, 0x0819081908081919,
+    0x0819081908082b08, 0x0819081908082b2b, 0x0819081908190819, 0x0819081908191908,
+    0x081908190819192b, 0x0819081908192b19, 0x08190819082b0808, 0x08190819082b082b,
+    0x08190819082b1919, 0x08190819082b2b08, 0x0819081919080819, 0x0819081919081908,
+    0x081908191908192b, 0x0819081919082b19, 0x0819081919190808, 0x081908191919082b,
+    0x0819081919191919, 0x0819081919192b08, 0x08190819192b0819, 0x08190819192b1908,
+    0x081908192b080808, 0x081908192b08082b, 0x081908192b081919, 0x081908192b082b08,
+    0x081908192b190819, 0x081908192b191908, 0x0819082b08080819, 0x0819082b08081908,
+    0x0819082b08082b19, 0x0819082b08190808, 0x0819082b08191919, 0x0819082b082b0819,
+    0x0819082b082b1908, 0x0819082b19080808, 0x0819082b19081919, 0x0819082b19190819,
+    0x0819082b19191908, 0x0819082b2b080819, 0x0819082b2b081908, 0x0819082b2b190808,
+    0x0819190808080808, 0x081919080808082b, 0x0819190808081919, 0x0819190808082b08,
+    0x0819190808190819, 0x0819190808191908, 0x081919080819192b, 0x0819190808192b19,
+    0x08191908082b0808, 0x08191908082b1919, 0x08191908082b2b08, 0x0819190819080819,
+    0x0819190819081908, 0x081919081908192b, 0x0819190819082b19, 0x0819190819190808,
+    0x081919081919082b, 0x0819190819191919, 0x0819190819192b08, 0x08191908192b0819,
+    0x08191908192b1908, 0x081919082b080808, 0x081919082b08082b, 0x081919082b081919,
+    0x081919082b082b08, 0x081919082b190819, 0x081919082b191908, 0x081919082b2b0808,
+    0x0819191908080819, 0x0819191908081908, 0x081919190808192b, 0x0819191908082b19,
+    0x0819191908190808, 0x081919190819082b, 0x0819191908191919, 0x0819191908192b08,
+    0x08191919082b0819, 0x08191919082b1908, 0x0819191919080808, 0x081919191908082b,
+    0x0819191919081919, 0x0819191919082b08, 0x0819191919190819, 0x0819191919191908,
+    0x08191919192b0808, 0x081919192b080819, 0x081919192b081908, 0x081919192b190808,
+    0x0819192b08080808, 0x0819192b08081919, 0x0819192b08082b08, 0x0819192b08190819,
+    0x0819192b08191908, 0x0819192b082b0808, 0x0819192b19080819, 0x0819192b19081908,
+    0x0819192b19190808, 0x0819192b2b080808, 0x0819192b2b2b2b2b, 0x08192b0808080819,
+    0x08192b0808081908, 0x08192b080808192b, 0x08192b0808082b19, 0x08192b0808190808,
+    0x08192b0808191919, 0x08192b0808192b08, 0x08192b08082b0819, 0x08192b0819080808,
+    0x08192b081908082b, 0x08192b0819081919, 0x08192b0819082b08, 0x08192b0819190819,
+    0x08192b0819191908, 0x08192b08192b0808, 0x08192b082b080819, 0x08192b082b081908,
+    0x08192b1908080808, 0x08192b190808082b, 0x08192b1908081919, 0x08192b1908082b08,
+    0x08192b1908190819, 0x08192b1908191908, 0x08192b19082b0808, 0x08192b1919080819,
+    0x08192b1919081908, 0x08192b1919190808, 0x08192b19192b2b19, 0x08192b192b2b082b,
+    0x08192b2b08081908, 0x08192b2b08190808, 0x08192b2b19080808, 0x08192b2b1919192b,
+    0x082b080808080808, 0x082b08080808082b, 0x082b080808081919, 0x082b080808082b08,
+    0x082b080808190819, 0x082b080808191908, 0x082b08080819192b, 0x082b080808192b19,
+    0x082b0808082b0808, 0x082b0808082b1919, 0x082b0808082b2b2b, 0x082b080819080819,
+    0x082b080819081908, 0x082b080819190808, 0x082b08081919082b, 0x082b080819191919,
+    0x082b0808192b1908, 0x082b08082b080808, 0x082b08082b082b2b, 0x082b08082b191908,
+    0x082b08082b2b2b2b, 0x082b081908080819, 0x082b081908081908, 0x082b081908190808,
+    0x082b08190819082b, 0x082b081908191919, 0x082b0819082b0819, 0x082b081919080808,
+    0x082b08191908082b, 0x082b081919081919, 0x082b081919190819, 0x082b081919191908,
+    0x082b0819192b0808, 0x082b08192b080819, 0x082b08192b081908, 0x082b08192b190808,
+    0x082b082b08080808, 0x082b082b08082b2b, 0x082b082b082b082b, 0x082b082b082b2b08,
+    0x082b082b082b2b2b, 0x082b082b19081908, 0x082b082b19190808, 0x082b082b2b082b08,
+    0x082b082b2b082b2b, 0x082b082b2b2b2b08, 0x082b190808080819, 0x082b190808081908,
+    0x082b19080808192b, 0x082b190808082b19, 0x082b190808190808, 0x082b190808191919,
+    0x082b190808192b08, 0x082b1908082b0819, 0x082b1908082b1908, 0x082b190819080808,
+    0x082b19081908082b, 0x082b190819081919, 0x082b190819082b08, 0x082b190819190819,
+    0x082b190819191908, 0x082b1908192b0808, 0x082b19082b080819, 0x082b19082b081908,
+    0x082b19082b190808, 0x082b191908080808, 0x082b191908081919, 0x082b191908082b08,
+    0x082b191908190819, 0x082b191908191908, 0x082b1919082b0808, 0x082b191919080819,
+    0x082b191919081908, 0x082b191919190808, 0x082b1919192b192b, 0x082b19192b080808,
+    0x082b192b08080819, 0x082b192b08081908, 0x082b192b08190808, 0x082b192b19080808,
+    0x082b192b19192b19, 0x082b2b0808080808, 0x082b2b0808081919, 0x082b2b0808190819,
+    0x082b2b0808191908, 0x082b2b0819080819, 0x082b2b0819081908, 0x082b2b0819190808,
+    0x082b2b082b082b2b, 0x082b2b082b2b2b2b, 0x082b2b1908080819, 0x082b2b1908081908,
+    0x082b2b1908190808, 0x082b2b192b191919, 0x082b2b2b08082b2b, 0x082b2b2b082b082b,
+    0x082b2b2b192b1908, 0x082b2b2b2b082b08, 0x082b2b2b2b082b2b, 0x1908080808080819,
+    0x1908080808081908, 0x190808080808192b, 0x1908080808082b19, 0x1908080808190808,
+    0x190808080819082b, 0x1908080808191919, 0x1908080808192b08, 0x1908080808192b2b,
+    0x19080808082b0819, 0x19080808082b1908, 0x19080808082b192b, 0x1908080819080808,
+    0x190808081908082b, 0x1908080819081919, 0x1908080819082b08, 0x1908080819082b2b,
+    0x1908080819190819, 0x1908080819191908, 0x190808081919192b, 0x1908080819192b19,
+    0x19080808192b0808, 0x19080808192b082b, 0x19080808192b1919, 0x190808082b080819,
+    0x190808082b081908, 0x190808082b190808, 0x190808082b191919, 0x190808082b192b08,
+    0x190808082b2b0819, 0x190808082b2b1908, 0x1908081908080808, 0x190808190808082b,
+    0x1908081908081919, 0x1908081908082b08, 0x1908081908190819, 0x1908081908191908,
+    0x190808190819192b, 0x1908081908192b19, 0x19080819082b0808, 0x19080819082b082b,
+    0x19080819082b1919, 0x1908081919080819, 0x1908081919081908, 0x190808191908192b,
+    0x1908081919082b19, 0x1908081919190808, 0x190808191919082b, 0x1908081919191919,
+    0x1908081919192b08, 0x19080819192b0819, 0x19080819192b1908, 0x190808192b080808,
+    0x190808192b08082b, 0x190808192b081919, 0x190808192b082b08, 0x190808192b190819,
+    0x190808192b191908, 0x190808192b2b0808, 0x1908082b08080819, 0x1908082b08081908,
+    0x1908082b08190808, 0x1908082b0819082b, 0x1908082b08191919, 0x1908082b08192b08,
+    0x1908082b082b1908, 0x1908082b19080808, 0x1908082b19081919, 0x1908082b19082b08,
+    0x1908082b19190819, 0x1908082b19191908, 0x1908082b192b0808, 0x1908082b2b080819,
+    0x1908082b2b081908, 0x1908190808080808, 0x190819080808082b, 0x1908190808081919,
+    0x1908190808082b08, 0x1908190808082b2b, 0x1908190808190819, 0x1908190808191908,
+    0x190819080819192b, 0x1908190808192b19, 0x19081908082b0808, 0x19081908082b082b,
+    0x19081908082b1919, 0x19081908082b2b08, 0x1908190819080819, 0x1908190819081908,
+    0x190819081908192b, 0x1908190819082b19, 0x1908190819190808, 0x190819081919082b,
+    0x1908190819191919, 0x1908190819192b08, 0x19081908192b0819, 0x19081908192b1908,
+    0x190819082b080808, 0x190819082b08082b, 0x190819082b081919, 0x190819082b082b08,
+    0x190819082b190819, 0x190819082b191908, 0x190819082b2b0808, 0x1908191908080819,
+    0x1908191908081908, 0x190819190808192b, 0x1908191908082b19, 0x1908191908190808,
+    0x190819190819082b, 0x1908191908191919, 0x1908191908192b08, 0x19081919082b0819,
+    0x19081919082b1908, 0x1908191919080808, 0x190819191908082b, 0x1908191919081919,
+    0x1908191919082b08, 0x1908191919190819, 0x1908191919191908, 0x19081919192b0808,
+    0x19081919192b2b2b, 0x190819192b080819, 0x190819192b081908, 0x190819192b190808,
+    0x1908192b08080808, 0x1908192b0808082b, 0x1908192b08081919, 0x1908192b08082b08,
+    0x1908192b08190819, 0x1908192b08191908, 0x1908192b082b0808, 0x1908192b19080819,
+    0x1908192b19081908, 0x1908192b19190808, 0x1908192b2b080808, 0x1908192b2b2b1919,
+    0x19082b0808080819, 0x19082b0808081908, 0x19082b0808082b19, 0x19082b0808190808,
+    0x19082b080819082b, 0x19082b0808191919, 0x19082b0808192b08, 0x19082b08082b0819,
+    0x19082b08082b1908, 0x19082b0819080808, 0x19082b081908082b, 0x19082b0819081919,
+    0x19082b0819082b08, 0x19082b0819190819, 0x19082b0819191908, 0x19082b08192b0808,
+    0x19082b082b081908, 0x19082b082b190808, 0x19082b1908080808, 0x19082b190808082b,
+    0x19082b1908081919, 0x19082b1908082b08, 0x19082b1908190819, 0x19082b1908191908,
+    0x19082b19082b0808, 0x19082b1919080819, 0x19082b1919081908, 0x19082b1919190808,
+    0x19082b192b080808, 0x19082b192b19192b, 0x19082b2b08080819, 0x19082b2b08081908,
+    0x19082b2b08190808, 0x19082b2b19080808, 0x1919080808080808, 0x191908080808082b,
+    0x1919080808081919, 0x1919080808082b08, 0x1919080808190819, 0x1919080808191908,
+    0x191908080819192b, 0x1919080808192b19, 0x19190808082b0808, 0x19190808082b082b,
+    0x19190808082b1919, 0x19190808082b2b08, 0x1919080819080819, 0x1919080819081908,
+    0x191908081908192b, 0x1919080819082b19, 0x1919080819190808, 0x191908081919082b,
+    0x1919080819191919, 0x1919080819192b08, 0x19190808192b0819, 0x19190808192b1908,
+    0x191908082b080808, 0x191908082b08082b, 0x191908082b081919, 0x191908082b082b08,
+    0x191908082b190819, 0x191908082b191908, 0x1919081908080819, 0x1919081908081908,
+    0x191908190808192b, 0x1919081908082b19, 0x1919081908190808, 0x191908190819082b,
+    0x1919081908191919, 0x1919081908192b08, 0x19190819082b0819, 0x19190819082b1908,
+    0x1919081919080808, 0x191908191908082b, 0x1919081919081919, 0x1919081919082b08,
+    0x1919081919190819, 0x1919081919191908, 0x19190819192b0808, 0x191908192b080819,
+    0x191908192b081908, 0x191908192b190808, 0x1919082b08080808, 0x1919082b08081919,
+    0x1919082b08082b08, 0x1919082b08190819, 0x1919082b08191908, 0x1919082b082b0808,
+    0x1919082b19080819, 0x1919082b19081908, 0x1919082b19190808, 0x1919082b192b2b19,
+    0x1919082b2b080808, 0x1919190808080819, 0x1919190808081908, 0x191919080808192b,
+    0x1919190808082b19, 0x1919190808190808, 0x191919080819082b, 0x1919190808191919,
+    0x1919190808192b08, 0x19191908082b0819, 0x19191908082b1908, 0x1919190819080808,
+    0x191919081908082b, 0x1919190819081919, 0x1919190819082b08, 0x1919190819190819,
+    0x1919190819191908, 0x19191908192b0808, 0x191919082b080819, 0x191919082b081908,
+    0x191919082b190808, 0x1919191908080808, 0x191919190808082b, 0x1919191908081919,
+    0x1919191908082b08, 0x1919191908190819, 0x1919191908191908, 0x19191919082b0808,
+    0x1919191919080819, 0x1919191919081908, 0x1919191919190808, 0x191919192b080808,
+    0x1919192b08080819, 0x1919192b08081908, 0x1919192b08190808, 0x1919192b082b192b,
+    0x1919192b19080808, 0x19192b0808080808, 0x19192b080808082b, 0x19192b0808081919,
+    0x19192b0808082b08, 0x19192b0808190819, 0x19192b0808191908, 0x19192b08082b0808,
+    0x19192b0819080819, 0x19192b0819081908, 0x19192b0819190808, 0x19192b0819192b2b,
+    0x19192b082b080808, 0x19192b1908080819, 0x19192b1908081908, 0x19192b1908190808,
+    0x19192b1919080808, 0x19192b2b08080808, 0x19192b2b08192b19, 0x19192b2b2b081919,
+    0x19192b2b2b2b2b08, 0x192b080808080819, 0x192b080808081908, 0x192b08080808192b,
+    0x192b080808190808, 0x192b08080819082b, 0x192b080808191919, 0x192b080808192b08,
+    0x192b0808082b0819, 0x192b0808082b1908, 0x192b080819080808, 0x192b080819081919,
+    0x192b080819082b08, 0x192b080819190819, 0x192b080819191908, 0x192b0808192b0808,
+    0x192b08082b081908, 0x192b08082b190808, 0x192b081908080808, 0x192b08190808082b,
+    0x192b081908081919, 0x192b081908082b08, 0x192b081908190819, 0x192b081908191908,
+    0x192b0819082b0808, 0x192b081919080819, 0x192b081919081908, 0x192b081919190808,
+    0x192b08192b080808, 0x192b08192b192b19, 0x192b082b08081908, 0x192b082b08190808,
+    0x192b082b19080808, 0x192b082b1919192b, 0x192b082b2b2b0819, 0x192b190808080808,
+    0x192b190808081919, 0x192b190808082b08, 0x192b190808190819, 0x192b190808191908,
+    0x192b1908082b0808, 0x192b190819080819, 0x192b190819081908, 0x192b190819190808,
+    0x192b19082b080808, 0x192b191908080819, 0x192b191908081908, 0x192b191908190808,
+    0x192b191919080808, 0x192b191919082b2b, 0x192b1919192b2b08, 0x192b19192b19082b,
+    0x192b192b08080808, 0x192b192b2b191908, 0x192b2b0808080819, 0x192b2b0808081908,
+    0x192b2b0808190808, 0x192b2b08192b1919, 0x192b2b082b192b08, 0x192b2b1908080808,
+    0x192b2b19082b2b2b, 0x192b2b2b1908082b, 0x192b2b2b2b2b0819, 0x2b08080808080808,
+    0x2b0808080808082b, 0x2b08080808081919, 0x2b08080808082b08, 0x2b08080808190819,
+    0x2b08080808191908, 0x2b08080808192b19, 0x2b080808082b0808, 0x2b080808082b1919,
+    0x2b08080819080819, 0x2b08080819081908, 0x2b08080819190808, 0x2b0808081919082b,
+    0x2b08080819191919, 0x2b08080819192b08, 0x2b080808192b0819, 0x2b0808082b080808,
+    0x2b0808082b081919, 0x2b0808082b190819, 0x2b0808082b191908, 0x2b08081908080819,
+    0x2b08081908081908, 0x2b08081908082b19, 0x2b08081908190808, 0x2b0808190819082b,
+    0x2b08081908191919, 0x2b08081908192b08, 0x2b080819082b0819, 0x2b080819082b1908,
+    0x2b08081919080808, 0x2b0808191908082b, 0x2b08081919081919, 0x2b08081919082b08,
+    0x2b08081919190819, 0x2b08081919191908, 0x2b0808192b080819, 0x2b0808192b081908,
+    0x2b0808192b190808, 0x2b0808192b2b2b19, 0x2b08082b08080808, 0x2b08082b08081919,
+    0x2b08082b08082b2b, 0x2b08082b08190819, 0x2b08082b08191908, 0x2b08082b19080819,
+    0x2b08082b19081908, 0x2b08082b19190808, 0x2b08190808080819, 0x2b08190808081908,
+    0x2b0819080808192b, 0x2b08190808082b19, 0x2b08190808190808, 0x2b0819080819082b,
+    0x2b08190808191919, 0x2b08190808192b08, 0x2b081908082b0819, 0x2b08190819080808,
+    0x2b0819081908082b, 0x2b08190819081919, 0x2b08190819082b08, 0x2b08190819190819,
+    0x2b08190819191908, 0x2b081908192b0808, 0x2b0819082b080819, 0x2b0819082b081908,
+    0x2b0819082b190808, 0x2b08191908080808, 0x2b0819190808082b, 0x2b08191908081919,
+    0x2b08191908082b08, 0x2b08191908190819, 0x2b08191908191908, 0x2b081919082b0808,
+    0x2b08191919080819, 0x2b08191919081908, 0x2b08191919190808, 0x2b0819192b080808,
+    0x2b0819192b082b2b, 0x2b08192b08080819, 0x2b08192b08081908, 0x2b08192b08190808,
+    0x2b08192b082b2b19, 0x2b08192b19080808, 0x2b082b0808080808, 0x2b082b0808081919,
+    0x2b082b0808190819, 0x2b082b0808191908, 0x2b082b0819080819, 0x2b082b0819081908,
+    0x2b082b0819190808, 0x2b082b082b2b082b, 0x2b082b1908080819, 0x2b082b1908081908,
+    0x2b082b1919080808, 0x2b082b19192b1919, 0x2b082b2b082b082b, 0x2b082b2b19192b08,
+    0x2b082b2b19192b2b, 0x2b082b2b2b08082b, 0x2b082b2b2b2b082b, 0x2b19080808080819,
+    0x2b19080808081908, 0x2b19080808082b19, 0x2b19080808190808, 0x2b1908080819082b,
+    0x2b19080808191919, 0x2b19080808192b08, 0x2b190808082b1908, 0x2b19080819080808,
+    0x2b1908081908082b, 0x2b19080819081919, 0x2b19080819082b08, 0x2b19080819190819,
+    0x2b19080819191908, 0x2b190808192b0808, 0x2b1908082b080819, 0x2b1908082b081908,
+    0x2b1908082b190808, 0x2b19081908080808, 0x2b19081908081919, 0x2b19081908190819,
+    0x2b19081908191908, 0x2b19081919080819, 0x2b19081919081908, 0x2b19081919190808,
+    0x2b19081919192b2b, 0x2b19082b08080819, 0x2b19082b08081908, 0x2b19082b08190808,
+    0x2b19082b19080808, 0x2b19082b2b2b192b, 0x2b19190808080808, 0x2b1919080808082b,
+    0x2b19190808081919, 0x2b19190808082b08, 0x2b19190808190819, 0x2b19190808191908,
+    0x2b191908082b0808, 0x2b19190819080819, 0x2b19190819081908, 0x2b19190819190808,
+    0x2b1919082b080808, 0x2b1919082b19192b, 0x2b19191908080819, 0x2b19191908081908,
+    0x2b19191908190808, 0x2b19191919080808, 0x2b1919192b192b08, 0x2b1919192b2b0819,
+    0x2b19192b08080808, 0x2b19192b1908192b, 0x2b19192b192b1908, 0x2b192b0808080819,
+    0x2b192b0808081908, 0x2b192b0808190808, 0x2b192b08082b192b, 0x2b192b0819080808,
+    0x2b192b082b2b2b19, 0x2b192b1908080808, 0x2b192b1919082b19, 0x2b192b191919082b,
+    0x2b192b2b2b190808, 0x2b2b080808080808, 0x2b2b080808081919, 0x2b2b080808082b2b,
+    0x2b2b080808191908, 0x2b2b0808082b082b, 0x2b2b0808082b2b2b, 0x2b2b080819080819,
+    0x2b2b080819081908, 0x2b2b080819190808, 0x2b2b08082b2b082b, 0x2b2b08082b2b2b2b,
+    0x2b2b081919080808, 0x2b2b0819192b1919, 0x2b2b082b0808082b, 0x2b2b082b08082b2b,
+    0x2b2b082b082b082b, 0x2b2b082b082b2b08, 0x2b2b082b082b2b2b, 0x2b2b082b2b08082b,
+    0x2b2b082b2b082b08, 0x2b2b082b2b082b2b, 0x2b2b082b2b2b2b08, 0x2b2b190808080819,
+    0x2b2b190808081908, 0x2b2b190808190808, 0x2b2b190819080808, 0x2b2b19082b082b19,
+    0x2b2b19082b2b1908, 0x2b2b191908080808, 0x2b2b191908192b19, 0x2b2b192b19190819,
+    0x2b2b2b0808082b2b, 0x2b2b2b08082b2b08, 0x2b2b2b082b2b082b, 0x2b2b2b1919191908,
+    0x2b2b2b192b08192b, 0x2b2b2b2b08082b08, 0x2b2b2b2b08082b2b, 0x2b2b2b2b082b0808,
+    0x2b2b2b2b082b082b, 0x2b2b2b2b082b2b08, 0x2b2b2b2b2b082b08, 0x2b2b2b2b2b2b2b2b,
+GGML_TABLE_END()
+
+GGML_TABLE_BEGIN(uint32_t, iq3xxs_grid, 256)
+    0x04040404, 0x04040414, 0x04040424, 0x04040c0c, 0x04040c1c, 0x04040c3e, 0x04041404, 0x04041414,
+    0x04041c0c, 0x04042414, 0x04043e1c, 0x04043e2c, 0x040c040c, 0x040c041c, 0x040c0c04, 0x040c0c14,
+    0x040c140c, 0x040c142c, 0x040c1c04, 0x040c1c14, 0x040c240c, 0x040c2c24, 0x040c3e04, 0x04140404,
+    0x04140414, 0x04140424, 0x04140c0c, 0x04141404, 0x04141414, 0x04141c0c, 0x04141c1c, 0x04141c3e,
+    0x04142c0c, 0x04142c3e, 0x04143e2c, 0x041c040c, 0x041c043e, 0x041c0c04, 0x041c0c14, 0x041c142c,
+    0x041c3e04, 0x04240c1c, 0x04241c3e, 0x04242424, 0x04242c3e, 0x04243e1c, 0x04243e2c, 0x042c040c,
+    0x042c043e, 0x042c1c14, 0x042c2c14, 0x04341c2c, 0x04343424, 0x043e0c04, 0x043e0c24, 0x043e0c34,
+    0x043e241c, 0x043e340c, 0x0c04040c, 0x0c04041c, 0x0c040c04, 0x0c040c14, 0x0c04140c, 0x0c04141c,
+    0x0c041c04, 0x0c041c14, 0x0c041c24, 0x0c04243e, 0x0c042c04, 0x0c0c0404, 0x0c0c0414, 0x0c0c0c0c,
+    0x0c0c1404, 0x0c0c1414, 0x0c14040c, 0x0c14041c, 0x0c140c04, 0x0c140c14, 0x0c14140c, 0x0c141c04,
+    0x0c143e14, 0x0c1c0404, 0x0c1c0414, 0x0c1c1404, 0x0c1c1c0c, 0x0c1c2434, 0x0c1c3434, 0x0c24040c,
+    0x0c24042c, 0x0c242c04, 0x0c2c1404, 0x0c2c1424, 0x0c2c2434, 0x0c2c3e0c, 0x0c34042c, 0x0c3e1414,
+    0x0c3e2404, 0x14040404, 0x14040414, 0x14040c0c, 0x14040c1c, 0x14041404, 0x14041414, 0x14041434,
+    0x14041c0c, 0x14042414, 0x140c040c, 0x140c041c, 0x140c042c, 0x140c0c04, 0x140c0c14, 0x140c140c,
+    0x140c1c04, 0x140c341c, 0x140c343e, 0x140c3e04, 0x14140404, 0x14140414, 0x14140c0c, 0x14140c3e,
+    0x14141404, 0x14141414, 0x14141c3e, 0x14142404, 0x14142c2c, 0x141c040c, 0x141c0c04, 0x141c0c24,
+    0x141c3e04, 0x141c3e24, 0x14241c2c, 0x14242c1c, 0x142c041c, 0x142c143e, 0x142c240c, 0x142c3e24,
+    0x143e040c, 0x143e041c, 0x143e0c34, 0x143e242c, 0x1c04040c, 0x1c040c04, 0x1c040c14, 0x1c04140c,
+    0x1c04141c, 0x1c042c04, 0x1c04342c, 0x1c043e14, 0x1c0c0404, 0x1c0c0414, 0x1c0c1404, 0x1c0c1c0c,
+    0x1c0c2424, 0x1c0c2434, 0x1c14040c, 0x1c14041c, 0x1c140c04, 0x1c14142c, 0x1c142c14, 0x1c143e14,
+    0x1c1c0c0c, 0x1c1c1c1c, 0x1c241c04, 0x1c24243e, 0x1c243e14, 0x1c2c0404, 0x1c2c0434, 0x1c2c1414,
+    0x1c2c2c2c, 0x1c340c24, 0x1c341c34, 0x1c34341c, 0x1c3e1c1c, 0x1c3e3404, 0x24040424, 0x24040c3e,
+    0x24041c2c, 0x24041c3e, 0x24042c1c, 0x24042c3e, 0x240c3e24, 0x24141404, 0x24141c3e, 0x24142404,
+    0x24143404, 0x24143434, 0x241c043e, 0x241c242c, 0x24240424, 0x24242c0c, 0x24243424, 0x242c142c,
+    0x242c241c, 0x242c3e04, 0x243e042c, 0x243e0c04, 0x243e0c14, 0x243e1c04, 0x2c040c14, 0x2c04240c,
+    0x2c043e04, 0x2c0c0404, 0x2c0c0434, 0x2c0c1434, 0x2c0c2c2c, 0x2c140c24, 0x2c141c14, 0x2c143e14,
+    0x2c1c0414, 0x2c1c2c1c, 0x2c240c04, 0x2c24141c, 0x2c24143e, 0x2c243e14, 0x2c2c0414, 0x2c2c1c0c,
+    0x2c342c04, 0x2c3e1424, 0x2c3e2414, 0x34041424, 0x34042424, 0x34042434, 0x34043424, 0x340c140c,
+    0x340c340c, 0x34140c3e, 0x34143424, 0x341c1c04, 0x341c1c34, 0x34242424, 0x342c042c, 0x342c2c14,
+    0x34341c1c, 0x343e041c, 0x343e140c, 0x3e04041c, 0x3e04042c, 0x3e04043e, 0x3e040c04, 0x3e041c14,
+    0x3e042c14, 0x3e0c1434, 0x3e0c2404, 0x3e140c14, 0x3e14242c, 0x3e142c14, 0x3e1c0404, 0x3e1c0c2c,
+    0x3e1c1c1c, 0x3e1c3404, 0x3e24140c, 0x3e24240c, 0x3e2c0404, 0x3e2c0414, 0x3e2c1424, 0x3e341c04,
+GGML_TABLE_END()
+
+GGML_TABLE_BEGIN(uint32_t, iq3s_grid, 512)
+    0x01010101, 0x01010103, 0x01010105, 0x0101010b, 0x0101010f, 0x01010301, 0x01010303, 0x01010305,
+    0x01010309, 0x0101030d, 0x01010501, 0x01010503, 0x0101050b, 0x01010707, 0x01010901, 0x01010905,
+    0x0101090b, 0x0101090f, 0x01010b03, 0x01010b07, 0x01010d01, 0x01010d05, 0x01010f03, 0x01010f09,
+    0x01010f0f, 0x01030101, 0x01030103, 0x01030105, 0x01030109, 0x01030301, 0x01030303, 0x0103030b,
+    0x01030501, 0x01030507, 0x0103050f, 0x01030703, 0x0103070b, 0x01030909, 0x01030d03, 0x01030d0b,
+    0x01030f05, 0x01050101, 0x01050103, 0x0105010b, 0x0105010f, 0x01050301, 0x01050307, 0x0105030d,
+    0x01050503, 0x0105050b, 0x01050701, 0x01050709, 0x01050905, 0x0105090b, 0x0105090f, 0x01050b03,
+    0x01050b07, 0x01050f01, 0x01050f07, 0x01070107, 0x01070303, 0x0107030b, 0x01070501, 0x01070505,
+    0x01070703, 0x01070707, 0x0107070d, 0x01070909, 0x01070b01, 0x01070b05, 0x01070d0f, 0x01070f03,
+    0x01070f0b, 0x01090101, 0x01090307, 0x0109030f, 0x01090503, 0x01090509, 0x01090705, 0x01090901,
+    0x01090907, 0x01090b03, 0x01090f01, 0x010b0105, 0x010b0109, 0x010b0501, 0x010b0505, 0x010b050d,
+    0x010b0707, 0x010b0903, 0x010b090b, 0x010b090f, 0x010b0d0d, 0x010b0f07, 0x010d010d, 0x010d0303,
+    0x010d0307, 0x010d0703, 0x010d0b05, 0x010d0f03, 0x010f0101, 0x010f0105, 0x010f0109, 0x010f0501,
+    0x010f0505, 0x010f050d, 0x010f0707, 0x010f0b01, 0x010f0b09, 0x03010101, 0x03010103, 0x03010105,
+    0x03010109, 0x03010301, 0x03010303, 0x03010307, 0x0301030b, 0x0301030f, 0x03010501, 0x03010505,
+    0x03010703, 0x03010709, 0x0301070d, 0x03010b09, 0x03010b0d, 0x03010d03, 0x03010f05, 0x03030101,
+    0x03030103, 0x03030107, 0x0303010d, 0x03030301, 0x03030309, 0x03030503, 0x03030701, 0x03030707,
+    0x03030903, 0x03030b01, 0x03030b05, 0x03030f01, 0x03030f0d, 0x03050101, 0x03050305, 0x0305030b,
+    0x0305030f, 0x03050501, 0x03050509, 0x03050705, 0x03050901, 0x03050907, 0x03050b0b, 0x03050d01,
+    0x03050f05, 0x03070103, 0x03070109, 0x0307010f, 0x03070301, 0x03070307, 0x03070503, 0x0307050f,
+    0x03070701, 0x03070709, 0x03070903, 0x03070d05, 0x03070f01, 0x03090107, 0x0309010b, 0x03090305,
+    0x03090309, 0x03090703, 0x03090707, 0x03090905, 0x0309090d, 0x03090b01, 0x03090b09, 0x030b0103,
+    0x030b0301, 0x030b0307, 0x030b0503, 0x030b0701, 0x030b0705, 0x030b0b03, 0x030d0501, 0x030d0509,
+    0x030d050f, 0x030d0909, 0x030d090d, 0x030f0103, 0x030f0107, 0x030f0301, 0x030f0305, 0x030f0503,
+    0x030f070b, 0x030f0903, 0x030f0d05, 0x030f0f01, 0x05010101, 0x05010103, 0x05010107, 0x0501010b,
+    0x0501010f, 0x05010301, 0x05010305, 0x05010309, 0x0501030d, 0x05010503, 0x05010507, 0x0501050f,
+    0x05010701, 0x05010705, 0x05010903, 0x05010907, 0x0501090b, 0x05010b01, 0x05010b05, 0x05010d0f,
+    0x05010f01, 0x05010f07, 0x05010f0b, 0x05030101, 0x05030105, 0x05030301, 0x05030307, 0x0503030f,
+    0x05030505, 0x0503050b, 0x05030703, 0x05030709, 0x05030905, 0x05030b03, 0x05050103, 0x05050109,
+    0x0505010f, 0x05050503, 0x05050507, 0x05050701, 0x0505070f, 0x05050903, 0x05050b07, 0x05050b0f,
+    0x05050f03, 0x05050f09, 0x05070101, 0x05070105, 0x0507010b, 0x05070303, 0x05070505, 0x05070509,
+    0x05070703, 0x05070707, 0x05070905, 0x05070b01, 0x05070d0d, 0x05090103, 0x0509010f, 0x05090501,
+    0x05090507, 0x05090705, 0x0509070b, 0x05090903, 0x05090f05, 0x05090f0b, 0x050b0109, 0x050b0303,
+    0x050b0505, 0x050b070f, 0x050b0901, 0x050b0b07, 0x050b0f01, 0x050d0101, 0x050d0105, 0x050d010f,
+    0x050d0503, 0x050d0b0b, 0x050d0d03, 0x050f010b, 0x050f0303, 0x050f050d, 0x050f0701, 0x050f0907,
+    0x050f0b01, 0x07010105, 0x07010303, 0x07010307, 0x0701030b, 0x0701030f, 0x07010505, 0x07010703,
+    0x07010707, 0x0701070b, 0x07010905, 0x07010909, 0x0701090f, 0x07010b03, 0x07010d07, 0x07010f03,
+    0x07030103, 0x07030107, 0x0703010b, 0x07030309, 0x07030503, 0x07030507, 0x07030901, 0x07030d01,
+    0x07030f05, 0x07030f0d, 0x07050101, 0x07050305, 0x07050501, 0x07050705, 0x07050709, 0x07050b01,
+    0x07070103, 0x07070301, 0x07070309, 0x07070503, 0x07070507, 0x0707050f, 0x07070701, 0x07070903,
+    0x07070907, 0x0707090f, 0x07070b0b, 0x07070f07, 0x07090107, 0x07090303, 0x0709030d, 0x07090505,
+    0x07090703, 0x07090b05, 0x07090d01, 0x07090d09, 0x070b0103, 0x070b0301, 0x070b0305, 0x070b050b,
+    0x070b0705, 0x070b0909, 0x070b0b0d, 0x070b0f07, 0x070d030d, 0x070d0903, 0x070f0103, 0x070f0107,
+    0x070f0501, 0x070f0505, 0x070f070b, 0x09010101, 0x09010109, 0x09010305, 0x09010501, 0x09010509,
+    0x0901050f, 0x09010705, 0x09010903, 0x09010b01, 0x09010f01, 0x09030105, 0x0903010f, 0x09030303,
+    0x09030307, 0x09030505, 0x09030701, 0x0903070b, 0x09030907, 0x09030b03, 0x09030b0b, 0x09050103,
+    0x09050107, 0x09050301, 0x0905030b, 0x09050503, 0x09050707, 0x09050901, 0x09050b0f, 0x09050d05,
+    0x09050f01, 0x09070109, 0x09070303, 0x09070307, 0x09070501, 0x09070505, 0x09070703, 0x0907070b,
+    0x09090101, 0x09090105, 0x09090509, 0x0909070f, 0x09090901, 0x09090f03, 0x090b010b, 0x090b010f,
+    0x090b0503, 0x090b0d05, 0x090d0307, 0x090d0709, 0x090d0d01, 0x090f0301, 0x090f030b, 0x090f0701,
+    0x090f0907, 0x090f0b03, 0x0b010105, 0x0b010301, 0x0b010309, 0x0b010505, 0x0b010901, 0x0b010909,
+    0x0b01090f, 0x0b010b05, 0x0b010d0d, 0x0b010f09, 0x0b030103, 0x0b030107, 0x0b03010b, 0x0b030305,
+    0x0b030503, 0x0b030705, 0x0b030f05, 0x0b050101, 0x0b050303, 0x0b050507, 0x0b050701, 0x0b05070d,
+    0x0b050b07, 0x0b070105, 0x0b07010f, 0x0b070301, 0x0b07050f, 0x0b070909, 0x0b070b03, 0x0b070d0b,
+    0x0b070f07, 0x0b090103, 0x0b090109, 0x0b090501, 0x0b090705, 0x0b09090d, 0x0b0b0305, 0x0b0b050d,
+    0x0b0b0b03, 0x0b0b0b07, 0x0b0d0905, 0x0b0f0105, 0x0b0f0109, 0x0b0f0505, 0x0d010303, 0x0d010307,
+    0x0d01030b, 0x0d010703, 0x0d010707, 0x0d010d01, 0x0d030101, 0x0d030501, 0x0d03050f, 0x0d030d09,
+    0x0d050305, 0x0d050709, 0x0d050905, 0x0d050b0b, 0x0d050d05, 0x0d050f01, 0x0d070101, 0x0d070309,
+    0x0d070503, 0x0d070901, 0x0d09050b, 0x0d090907, 0x0d090d05, 0x0d0b0101, 0x0d0b0107, 0x0d0b0709,
+    0x0d0b0d01, 0x0d0d010b, 0x0d0d0901, 0x0d0f0303, 0x0d0f0307, 0x0f010101, 0x0f010109, 0x0f01010f,
+    0x0f010501, 0x0f010505, 0x0f01070d, 0x0f010901, 0x0f010b09, 0x0f010d05, 0x0f030105, 0x0f030303,
+    0x0f030509, 0x0f030907, 0x0f03090b, 0x0f050103, 0x0f050109, 0x0f050301, 0x0f05030d, 0x0f050503,
+    0x0f050701, 0x0f050b03, 0x0f070105, 0x0f070705, 0x0f07070b, 0x0f070b07, 0x0f090103, 0x0f09010b,
+    0x0f090307, 0x0f090501, 0x0f090b01, 0x0f0b0505, 0x0f0b0905, 0x0f0d0105, 0x0f0d0703, 0x0f0f0101,
+GGML_TABLE_END()
+
+#define NGRID_IQ1S 2048
+#define IQ1S_DELTA 0.125f
+#define IQ1M_DELTA 0.125f
+#if defined(GGML_COMMON_IMPL_C)
+GGML_TABLE_BEGIN(uint64_t, iq1s_grid, NGRID_IQ1S)
+    0xffffffffffffffff, 0xffffffffffffff01, 0xffffffffffff0000, 0xffffffffffff01ff,
+    0xffffffffffff0101, 0xffffffffff00ff00, 0xffffffffff000000, 0xffffffffff01ffff,
+    0xffffffffff01ff01, 0xffffffffff0101ff, 0xffffffffff010101, 0xffffffff00ff0000,
+    0xffffffff0000ff00, 0xffffffff000000ff, 0xffffffff00000001, 0xffffffff00010000,
+    0xffffffff01ffffff, 0xffffffff01ffff01, 0xffffffff01ff01ff, 0xffffffff01ff0101,
+    0xffffffff01000000, 0xffffffff0101ffff, 0xffffffff0101ff01, 0xffffffff010101ff,
+    0xffffffff01010101, 0xffffff00ffff00ff, 0xffffff00ffff0000, 0xffffff00ff00ff00,
+    0xffffff00ff0000ff, 0xffffff00ff000001, 0xffffff00ff000100, 0xffffff00ff000101,
+    0xffffff00ff010000, 0xffffff0000ffff00, 0xffffff0000ff0001, 0xffffff0000ff0100,
+    0xffffff000000ff01, 0xffffff0000000000, 0xffffff0000000101, 0xffffff000001ff00,
+    0xffffff00000100ff, 0xffffff0000010001, 0xffffff00000101ff, 0xffffff0001ff0000,
+    0xffffff000100ff00, 0xffffff00010000ff, 0xffffff0001000001, 0xffffff0001010000,
+    0xffffff01ffffffff, 0xffffff01ffffff01, 0xffffff01ffff01ff, 0xffffff01ffff0101,
+    0xffffff01ff000000, 0xffffff01ff01ffff, 0xffffff01ff01ff01, 0xffffff01ff0101ff,
+    0xffffff01ff010101, 0xffffff0100ff0000, 0xffffff010000ff00, 0xffffff0100000100,
+    0xffffff01000100ff, 0xffffff0100010100, 0xffffff0101ffffff, 0xffffff0101ffff01,
+    0xffffff0101ff01ff, 0xffffff0101ff0101, 0xffffff010100ff00, 0xffffff0101000000,
+    0xffffff0101000100, 0xffffff010101ffff, 0xffffff010101ff01, 0xffffff01010101ff,
+    0xffffff0101010101, 0xffff00ffff00ff00, 0xffff00ffff0000ff, 0xffff00ffff000001,
+    0xffff00ffff010000, 0xffff00ff00ffff00, 0xffff00ff00ff0100, 0xffff00ff00000000,
+    0xffff00ff00000101, 0xffff00ff000100ff, 0xffff00ff00010000, 0xffff00ff0100ff00,
+    0xffff00ff01000100, 0xffff00ff01010000, 0xffff0000ffffff00, 0xffff0000ffff00ff,
+    0xffff0000ffff0000, 0xffff0000ffff0001, 0xffff0000ff000000, 0xffff0000ff0001ff,
+    0xffff0000ff000101, 0xffff0000ff010100, 0xffff000000ffffff, 0xffff000000ff0000,
+    0xffff000000ff0101, 0xffff00000000ffff, 0xffff00000000ff00, 0xffff0000000000ff,
+    0xffff000000000000, 0xffff000000000001, 0xffff000000000100, 0xffff00000001ffff,
+    0xffff00000001ff01, 0xffff000000010000, 0xffff0000000101ff, 0xffff000000010101,
+    0xffff000001ffff00, 0xffff00000100ff00, 0xffff000001000000, 0xffff0000010001ff,
+    0xffff000001000101, 0xffff00000101ff00, 0xffff0000010100ff, 0xffff000001010000,
+    0xffff000001010001, 0xffff000001010100, 0xffff0001ff0000ff, 0xffff0001ff000100,
+    0xffff000100ffff00, 0xffff000100ff00ff, 0xffff00010000ffff, 0xffff00010000ff01,
+    0xffff000100000000, 0xffff0001000001ff, 0xffff00010001ffff, 0xffff00010001ff00,
+    0xffff000100010001, 0xffff000100010100, 0xffff000101ff0000, 0xffff00010100ff00,
+    0xffff0001010000ff, 0xffff000101000100, 0xffff01ffffffffff, 0xffff01ffffffff01,
+    0xffff01ffffff01ff, 0xffff01ffffff0101, 0xffff01ffff000000, 0xffff01ffff01ffff,
+    0xffff01ffff01ff01, 0xffff01ffff0101ff, 0xffff01ffff010101, 0xffff01ff00ff0000,
+    0xffff01ff0000ff00, 0xffff01ff00000001, 0xffff01ff00010000, 0xffff01ff01ffffff,
+    0xffff01ff01ffff01, 0xffff01ff01ff01ff, 0xffff01ff01ff0101, 0xffff01ff01000000,
+    0xffff01ff0101ffff, 0xffff01ff0101ff01, 0xffff01ff010101ff, 0xffff01ff01010101,
+    0xffff0100ffff0000, 0xffff0100ff00ff00, 0xffff0100ff0000ff, 0xffff0100ff000100,
+    0xffff0100ff0100ff, 0xffff0100ff010000, 0xffff010000ffff00, 0xffff01000000ffff,
+    0xffff01000000ff00, 0xffff010000000000, 0xffff01000001ff00, 0xffff0100000100ff,
+    0xffff010000010100, 0xffff01000100ff00, 0xffff0100010000ff, 0xffff010001000001,
+    0xffff010001000100, 0xffff010001010000, 0xffff0101ffffffff, 0xffff0101ffffff01,
+    0xffff0101ffff01ff, 0xffff0101ffff0101, 0xffff0101ff000000, 0xffff0101ff01ffff,
+    0xffff0101ff01ff01, 0xffff0101ff0101ff, 0xffff0101ff010101, 0xffff010100ff0000,
+    0xffff01010000ff00, 0xffff010100000100, 0xffff01010001ff00, 0xffff010100010000,
+    0xffff010101ffffff, 0xffff010101ffff01, 0xffff010101ff0000, 0xffff010101ff01ff,
+    0xffff010101ff0101, 0xffff010101000000, 0xffff01010101ffff, 0xffff01010101ff01,
+    0xffff0101010101ff, 0xffff010101010101, 0xff00ffffff00ffff, 0xff00ffffff00ff00,
+    0xff00ffffff0000ff, 0xff00ffffff000100, 0xff00ffffff0100ff, 0xff00ffffff010000,
+    0xff00ffff00ffff00, 0xff00ffff00ff00ff, 0xff00ffff0000ffff, 0xff00ffff00000000,
+    0xff00ffff000001ff, 0xff00ffff0001ff00, 0xff00ffff000100ff, 0xff00ffff00010000,
+    0xff00ffff00010100, 0xff00ffff0100ff00, 0xff00ffff010000ff, 0xff00ffff01000001,
+    0xff00ffff0101ff00, 0xff00ffff01010000, 0xff00ff00ffffff00, 0xff00ff00ffff00ff,
+    0xff00ff00ffff0001, 0xff00ff00ffff0100, 0xff00ff00ff00ffff, 0xff00ff00ff00ff01,
+    0xff00ff00ff000000, 0xff00ff00ff0001ff, 0xff00ff00ff01ff00, 0xff00ff00ff0100ff,
+    0xff00ff00ff010100, 0xff00ff0000ff0000, 0xff00ff0000ff0101, 0xff00ff000000ffff,
+    0xff00ff000000ff00, 0xff00ff000000ff01, 0xff00ff00000000ff, 0xff00ff0000000000,
+    0xff00ff0000000001, 0xff00ff0000000100, 0xff00ff000001ffff, 0xff00ff0000010000,
+    0xff00ff0001ff00ff, 0xff00ff000100ff01, 0xff00ff0001000000, 0xff00ff000101ff00,
+    0xff00ff00010100ff, 0xff00ff01ff00ff00, 0xff00ff01ff0000ff, 0xff00ff01ff000001,
+    0xff00ff01ff010000, 0xff00ff0100ffffff, 0xff00ff0100ff0001, 0xff00ff0100ff0100,
+    0xff00ff010000ff01, 0xff00ff0100000000, 0xff00ff01000001ff, 0xff00ff0100000101,
+    0xff00ff01000100ff, 0xff00ff0100010001, 0xff00ff0101ff0000, 0xff00ff010100ff00,
+    0xff00ff01010000ff, 0xff00ff0101000001, 0xff00ff0101010000, 0xff0000ffffffff00,
+    0xff0000ffffff0001, 0xff0000ffffff0100, 0xff0000ffff0000ff, 0xff0000ffff000000,
+    0xff0000ffff0001ff, 0xff0000ffff000100, 0xff0000ffff01ff00, 0xff0000ffff010001,
+    0xff0000ff00ffff00, 0xff0000ff00ff0000, 0xff0000ff00ff0001, 0xff0000ff00ff01ff,
+    0xff0000ff00ff0101, 0xff0000ff0000ff00, 0xff0000ff000000ff, 0xff0000ff00000000,
+    0xff0000ff00000001, 0xff0000ff00000100, 0xff0000ff0001ff01, 0xff0000ff00010000,
+    0xff0000ff000101ff, 0xff0000ff01ff00ff, 0xff0000ff01ff0100, 0xff0000ff0100ffff,
+    0xff0000ff010000ff, 0xff0000ff01000000, 0xff0000ff010001ff, 0xff0000ff01000100,
+    0xff0000ff01000101, 0xff0000ff0101ff00, 0xff0000ff010100ff, 0xff0000ff01010000,
+    0xff0000ff01010100, 0xff000000ffffff01, 0xff000000ffff0000, 0xff000000ffff0101,
+    0xff000000ff00ff00, 0xff000000ff0000ff, 0xff000000ff000000, 0xff000000ff000001,
+    0xff000000ff000100, 0xff000000ff01ffff, 0xff000000ff01ff01, 0xff000000ff010000,
+    0xff000000ff0101ff, 0xff000000ff010101, 0xff00000000ffff00, 0xff00000000ff00ff,
+    0xff00000000ff0000, 0xff00000000ff0001, 0xff0000000000ff00, 0xff0000000000ff01,
+    0xff000000000000ff, 0xff00000000000000, 0xff00000000000001, 0xff00000000000100,
+    0xff00000000000101, 0xff0000000001ff00, 0xff000000000100ff, 0xff00000000010000,
+    0xff00000000010001, 0xff00000000010100, 0xff00000001ffffff, 0xff00000001ffff01,
+    0xff00000001ff00ff, 0xff00000001ff0000, 0xff00000001ff01ff, 0xff00000001ff0101,
+    0xff0000000100ffff, 0xff0000000100ff00, 0xff000000010000ff, 0xff00000001000000,
+    0xff00000001000001, 0xff00000001000100, 0xff00000001000101, 0xff0000000101ffff,
+    0xff0000000101ff01, 0xff00000001010000, 0xff000001ffffff00, 0xff000001ffff00ff,
+    0xff000001ffff0000, 0xff000001ffff0001, 0xff000001ff000000, 0xff000001ff000001,
+    0xff000001ff0001ff, 0xff000001ff000101, 0xff000001ff01ff00, 0xff000001ff010001,
+    0xff00000100ffffff, 0xff00000100ffff01, 0xff00000100ff00ff, 0xff00000100ff0000,
+    0xff00000100ff01ff, 0xff00000100ff0101, 0xff0000010000ff00, 0xff00000100000000,
+    0xff00000100000001, 0xff000001000001ff, 0xff00000100000100, 0xff0000010001ff00,
+    0xff000001000100ff, 0xff00000100010000, 0xff000001000101ff, 0xff00000100010100,
+    0xff00000100010101, 0xff00000101ff0001, 0xff00000101ff0101, 0xff0000010100ff01,
+    0xff00000101000000, 0xff000001010100ff, 0xff00000101010100, 0xff0001ffff00ff00,
+    0xff0001ffff000001, 0xff0001ffff010000, 0xff0001ff00ffff00, 0xff0001ff00ff00ff,
+    0xff0001ff00ff0001, 0xff0001ff00ff0100, 0xff0001ff0000ffff, 0xff0001ff00000000,
+    0xff0001ff000001ff, 0xff0001ff00000101, 0xff0001ff0001ffff, 0xff0001ff0001ff00,
+    0xff0001ff000100ff, 0xff0001ff00010001, 0xff0001ff00010100, 0xff0001ff01ff0000,
+    0xff0001ff0100ff00, 0xff0001ff010000ff, 0xff0001ff01010000, 0xff000100ff00ffff,
+    0xff000100ff00ff01, 0xff000100ff000000, 0xff000100ff000101, 0xff000100ff01ff00,
+    0xff000100ff010000, 0xff00010000ffff01, 0xff00010000ff00ff, 0xff00010000ff0000,
+    0xff00010000ff01ff, 0xff0001000000ff00, 0xff000100000000ff, 0xff00010000000000,
+    0xff00010000000001, 0xff00010000000100, 0xff00010000000101, 0xff0001000001ffff,
+    0xff00010000010000, 0xff00010000010101, 0xff00010001ff0100, 0xff0001000100ff00,
+    0xff0001000100ff01, 0xff00010001000000, 0xff000100010001ff, 0xff0001000101ff00,
+    0xff00010001010001, 0xff00010001010100, 0xff000101ffff0100, 0xff000101ff000001,
+    0xff000101ff0100ff, 0xff000101ff010001, 0xff00010100ff00ff, 0xff00010100ff0001,
+    0xff00010100ff0100, 0xff0001010000ffff, 0xff0001010000ff01, 0xff00010100000000,
+    0xff000101000001ff, 0xff0001010001ff00, 0xff00010100010001, 0xff00010100010100,
+    0xff00010101ff0000, 0xff0001010100ff00, 0xff00010101000001, 0xff00010101000101,
+    0xff01ffffffffffff, 0xff01ffffffffff01, 0xff01ffffffff01ff, 0xff01ffffffff0101,
+    0xff01ffffff000000, 0xff01ffffff01ffff, 0xff01ffffff01ff01, 0xff01ffffff010000,
+    0xff01ffffff0101ff, 0xff01ffffff010101, 0xff01ffff00ff0000, 0xff01ffff0000ff00,
+    0xff01ffff00000100, 0xff01ffff0001ff00, 0xff01ffff00010000, 0xff01ffff01ffffff,
+    0xff01ffff01ffff01, 0xff01ffff01ff01ff, 0xff01ffff01ff0101, 0xff01ffff01000000,
+    0xff01ffff0101ffff, 0xff01ffff0101ff01, 0xff01ffff01010000, 0xff01ffff010101ff,
+    0xff01ffff01010101, 0xff01ff00ffff0000, 0xff01ff00ff00ff00, 0xff01ff00ff0000ff,
+    0xff01ff00ff000100, 0xff01ff00ff010000, 0xff01ff0000ffff01, 0xff01ff0000ff00ff,
+    0xff01ff0000ff0100, 0xff01ff0000000000, 0xff01ff00000001ff, 0xff01ff0000000101,
+    0xff01ff000001ff00, 0xff01ff00000100ff, 0xff01ff0000010000, 0xff01ff0000010001,
+    0xff01ff0001ff0000, 0xff01ff000100ffff, 0xff01ff0001000001, 0xff01ff0001000100,
+    0xff01ff0001010000, 0xff01ff01ffffff00, 0xff01ff01ffff01ff, 0xff01ff01ffff0101,
+    0xff01ff01ff00ff00, 0xff01ff01ff000000, 0xff01ff01ff01ffff, 0xff01ff01ff01ff01,
+    0xff01ff01ff0101ff, 0xff01ff01ff010101, 0xff01ff0100ff0000, 0xff01ff010000ff00,
+    0xff01ff0100000001, 0xff01ff0100000100, 0xff01ff0100010000, 0xff01ff0101ffff00,
+    0xff01ff0101ff01ff, 0xff01ff0101ff0101, 0xff01ff010100ff00, 0xff01ff0101000000,
+    0xff01ff010101ffff, 0xff01ff010101ff01, 0xff01ff01010101ff, 0xff01ff0101010101,
+    0xff0100ffffff0000, 0xff0100ffff0000ff, 0xff0100ffff000001, 0xff0100ffff000100,
+    0xff0100ffff010000, 0xff0100ff00ff00ff, 0xff0100ff00ff0000, 0xff0100ff00ff0001,
+    0xff0100ff00ff0100, 0xff0100ff0000ff01, 0xff0100ff00000000, 0xff0100ff000001ff,
+    0xff0100ff00000101, 0xff0100ff00010001, 0xff0100ff01ff0000, 0xff0100ff0100ff00,
+    0xff0100ff010000ff, 0xff0100ff01000100, 0xff0100ff0101ff00, 0xff0100ff01010000,
+    0xff010000ffff0100, 0xff010000ff000000, 0xff010000ff01ff00, 0xff010000ff010100,
+    0xff01000000ffffff, 0xff01000000ff0000, 0xff01000000ff01ff, 0xff0100000000ff00,
+    0xff010000000000ff, 0xff01000000000000, 0xff01000000000100, 0xff0100000001ff01,
+    0xff01000000010000, 0xff010000000101ff, 0xff01000001ff0100, 0xff0100000100ffff,
+    0xff010000010000ff, 0xff01000001000000, 0xff010000010001ff, 0xff01000001000101,
+    0xff0100000101ff00, 0xff010000010100ff, 0xff01000001010001, 0xff01000001010100,
+    0xff010001ffff0000, 0xff010001ff00ffff, 0xff010001ff00ff01, 0xff010001ff000100,
+    0xff010001ff010000, 0xff01000100ffff00, 0xff01000100ff0100, 0xff01000100000000,
+    0xff0100010001ffff, 0xff0100010001ff00, 0xff01000100010100, 0xff01000101ff00ff,
+    0xff01000101ff0001, 0xff0100010100ffff, 0xff01000101000101, 0xff0101ffffffffff,
+    0xff0101ffffffff01, 0xff0101ffffff01ff, 0xff0101ffffff0101, 0xff0101ffff000000,
+    0xff0101ffff01ffff, 0xff0101ffff01ff01, 0xff0101ffff0101ff, 0xff0101ffff010101,
+    0xff0101ff00ff0000, 0xff0101ff0000ff00, 0xff0101ff000000ff, 0xff0101ff00010000,
+    0xff0101ff01ffffff, 0xff0101ff01ffff01, 0xff0101ff01ff01ff, 0xff0101ff01ff0101,
+    0xff0101ff0101ffff, 0xff0101ff0101ff01, 0xff0101ff010101ff, 0xff0101ff01010101,
+    0xff010100ffff0100, 0xff010100ff00ff00, 0xff010100ff0000ff, 0xff010100ff000100,
+    0xff010100ff010000, 0xff01010000ff0001, 0xff01010000ff0100, 0xff0101000000ff01,
+    0xff01010000000000, 0xff0101000001ff00, 0xff010100000100ff, 0xff01010000010001,
+    0xff01010000010100, 0xff01010001ff0000, 0xff0101000100ffff, 0xff01010001000001,
+    0xff01010001000100, 0xff010100010100ff, 0xff01010001010000, 0xff010101ffffffff,
+    0xff010101ffffff01, 0xff010101ffff01ff, 0xff010101ffff0101, 0xff010101ff01ffff,
+    0xff010101ff01ff01, 0xff010101ff0101ff, 0xff010101ff010101, 0xff01010100ff0000,
+    0xff0101010000ff00, 0xff01010100000001, 0xff01010100000100, 0xff01010100010000,
+    0xff01010101ffffff, 0xff01010101ffff01, 0xff01010101ff01ff, 0xff01010101ff0101,
+    0xff01010101000000, 0xff0101010101ffff, 0xff0101010101ff01, 0xff010101010101ff,
+    0xff01010101010101, 0x00ffffffffff0000, 0x00ffffffff00ff00, 0x00ffffffff000001,
+    0x00ffffffff010000, 0x00ffffff00ff0100, 0x00ffffff0000ff01, 0x00ffffff00000000,
+    0x00ffffff000001ff, 0x00ffffff00000101, 0x00ffffff0001ff00, 0x00ffffff000100ff,
+    0x00ffffff00010001, 0x00ffffff010000ff, 0x00ffffff01000100, 0x00ffffff0101ff00,
+    0x00ffffff01010001, 0x00ffff00ffffffff, 0x00ffff00ffffff00, 0x00ffff00ffff00ff,
+    0x00ffff00ffff0001, 0x00ffff00ffff0100, 0x00ffff00ff00ff01, 0x00ffff00ff000000,
+    0x00ffff00ff000001, 0x00ffff00ff0001ff, 0x00ffff00ff000101, 0x00ffff00ff01ff00,
+    0x00ffff00ff010001, 0x00ffff00ff010100, 0x00ffff0000ff0000, 0x00ffff0000ff01ff,
+    0x00ffff0000ff0101, 0x00ffff000000ff00, 0x00ffff00000000ff, 0x00ffff0000000000,
+    0x00ffff0000000001, 0x00ffff0000000100, 0x00ffff0000000101, 0x00ffff0000010000,
+    0x00ffff00000101ff, 0x00ffff0000010101, 0x00ffff0001ffff00, 0x00ffff0001ff00ff,
+    0x00ffff0001ff0001, 0x00ffff000100ffff, 0x00ffff000100ff01, 0x00ffff0001000000,
+    0x00ffff000101ffff, 0x00ffff000101ff00, 0x00ffff000101ff01, 0x00ffff01ffff0000,
+    0x00ffff01ff00ff00, 0x00ffff01ff0000ff, 0x00ffff01ff000001, 0x00ffff01ff010000,
+    0x00ffff0100ffff00, 0x00ffff010000ff01, 0x00ffff0100000000, 0x00ffff0100000101,
+    0x00ffff01000100ff, 0x00ffff0100010100, 0x00ffff0101ff0100, 0x00ffff01010000ff,
+    0x00ffff0101010000, 0x00ff00ffffffff00, 0x00ff00ffff000000, 0x00ff00ffff000100,
+    0x00ff00ffff010100, 0x00ff00ff00ff0000, 0x00ff00ff00ff01ff, 0x00ff00ff00ff0101,
+    0x00ff00ff0000ff00, 0x00ff00ff000000ff, 0x00ff00ff00000000, 0x00ff00ff00000001,
+    0x00ff00ff0001ff00, 0x00ff00ff0001ff01, 0x00ff00ff00010000, 0x00ff00ff000101ff,
+    0x00ff00ff00010101, 0x00ff00ff01ffff00, 0x00ff00ff01ff0001, 0x00ff00ff01ff0100,
+    0x00ff00ff0100ffff, 0x00ff00ff0100ff01, 0x00ff00ff01000000, 0x00ff00ff0101ffff,
+    0x00ff00ff0101ff00, 0x00ff00ff01010100, 0x00ff0000ffffff00, 0x00ff0000ffffff01,
+    0x00ff0000ffff0000, 0x00ff0000ffff0101, 0x00ff0000ff00ff00, 0x00ff0000ff0000ff,
+    0x00ff0000ff000000, 0x00ff0000ff000001, 0x00ff0000ff000100, 0x00ff0000ff01ffff,
+    0x00ff0000ff010000, 0x00ff0000ff010101, 0x00ff000000ffff00, 0x00ff000000ff00ff,
+    0x00ff000000ff0000, 0x00ff000000ff0001, 0x00ff000000ff0100, 0x00ff00000000ffff,
+    0x00ff00000000ff00, 0x00ff0000000000ff, 0x00ff000000000000, 0x00ff000000000001,
+    0x00ff0000000001ff, 0x00ff000000000100, 0x00ff00000001ff00, 0x00ff0000000100ff,
+    0x00ff000000010000, 0x00ff000000010001, 0x00ff000000010100, 0x00ff000001ffff01,
+    0x00ff000001ff00ff, 0x00ff000001ff0000, 0x00ff000001ff01ff, 0x00ff00000100ff00,
+    0x00ff0000010000ff, 0x00ff000001000000, 0x00ff000001000001, 0x00ff000001000100,
+    0x00ff000001000101, 0x00ff000001010000, 0x00ff0000010101ff, 0x00ff000001010101,
+    0x00ff0001ffffff00, 0x00ff0001ffff0000, 0x00ff0001ffff0100, 0x00ff0001ff0000ff,
+    0x00ff0001ff000000, 0x00ff0001ff0001ff, 0x00ff0001ff000101, 0x00ff0001ff01ff00,
+    0x00ff0001ff0100ff, 0x00ff0001ff010100, 0x00ff000100ffffff, 0x00ff000100ffff01,
+    0x00ff000100ff0000, 0x00ff000100ff01ff, 0x00ff00010000ffff, 0x00ff00010000ff00,
+    0x00ff00010000ff01, 0x00ff000100000000, 0x00ff000100000001, 0x00ff000100000100,
+    0x00ff00010001ff01, 0x00ff000100010000, 0x00ff0001000101ff, 0x00ff000101ffff00,
+    0x00ff000101ff0000, 0x00ff000101ff0101, 0x00ff0001010000ff, 0x00ff000101000000,
+    0x00ff00010101ff00, 0x00ff0001010100ff, 0x00ff000101010001, 0x00ff01ffffff0000,
+    0x00ff01ffff00ff00, 0x00ff01ffff000000, 0x00ff01ffff000101, 0x00ff01ffff010000,
+    0x00ff01ff00ffff01, 0x00ff01ff00ff0100, 0x00ff01ff0000ffff, 0x00ff01ff00000000,
+    0x00ff01ff000001ff, 0x00ff01ff0001ff00, 0x00ff01ff000100ff, 0x00ff01ff00010001,
+    0x00ff01ff00010100, 0x00ff01ff01ff0000, 0x00ff01ff0100ff00, 0x00ff01ff010000ff,
+    0x00ff01ff01000001, 0x00ff01ff01000100, 0x00ff01ff01010000, 0x00ff0100ffffff00,
+    0x00ff0100ffff0000, 0x00ff0100ffff0001, 0x00ff0100ffff0101, 0x00ff0100ff00ffff,
+    0x00ff0100ff0000ff, 0x00ff0100ff000000, 0x00ff0100ff0001ff, 0x00ff0100ff01ff00,
+    0x00ff0100ff0100ff, 0x00ff0100ff010001, 0x00ff010000ffffff, 0x00ff010000ff0000,
+    0x00ff010000ff0101, 0x00ff01000000ff00, 0x00ff01000000ff01, 0x00ff0100000000ff,
+    0x00ff010000000000, 0x00ff010000000001, 0x00ff010000000100, 0x00ff01000001ffff,
+    0x00ff01000001ff01, 0x00ff010000010000, 0x00ff010000010001, 0x00ff010000010101,
+    0x00ff010001ff0001, 0x00ff010001ff0100, 0x00ff01000100ff01, 0x00ff010001000000,
+    0x00ff010001000001, 0x00ff0100010001ff, 0x00ff01000101ff00, 0x00ff0100010100ff,
+    0x00ff010001010001, 0x00ff010001010100, 0x00ff0101ff000001, 0x00ff010100ff00ff,
+    0x00ff010100ff0001, 0x00ff010100ff0100, 0x00ff010100000000, 0x00ff0101000001ff,
+    0x00ff010100000101, 0x00ff0101000100ff, 0x00ff010100010100, 0x00ff0101010000ff,
+    0x00ff010101010000, 0x0000ffffffffff00, 0x0000ffffffff00ff, 0x0000ffffffff0000,
+    0x0000ffffffff0001, 0x0000ffffffff0100, 0x0000ffffff00ff01, 0x0000ffffff000000,
+    0x0000ffffff000101, 0x0000ffffff01ff00, 0x0000ffffff0100ff, 0x0000ffffff010100,
+    0x0000ffff00ffffff, 0x0000ffff00ff0000, 0x0000ffff00ff01ff, 0x0000ffff0000ff00,
+    0x0000ffff000000ff, 0x0000ffff00000000, 0x0000ffff00000001, 0x0000ffff00000100,
+    0x0000ffff00010000, 0x0000ffff000101ff, 0x0000ffff01ff0001, 0x0000ffff01ff0100,
+    0x0000ffff01000000, 0x0000ffff010001ff, 0x0000ffff0101ffff, 0x0000ffff0101ff00,
+    0x0000ffff01010001, 0x0000ffff01010100, 0x0000ff00ffff0000, 0x0000ff00ffff01ff,
+    0x0000ff00ffff0100, 0x0000ff00ffff0101, 0x0000ff00ff00ff00, 0x0000ff00ff0000ff,
+    0x0000ff00ff000000, 0x0000ff00ff000001, 0x0000ff00ff0001ff, 0x0000ff00ff000100,
+    0x0000ff00ff01ffff, 0x0000ff00ff010000, 0x0000ff00ff010001, 0x0000ff00ff0101ff,
+    0x0000ff00ff010101, 0x0000ff0000ffff00, 0x0000ff0000ff00ff, 0x0000ff0000ff0000,
+    0x0000ff0000ff0001, 0x0000ff0000ff0100, 0x0000ff000000ffff, 0x0000ff000000ff00,
+    0x0000ff000000ff01, 0x0000ff00000000ff, 0x0000ff0000000000, 0x0000ff0000000001,
+    0x0000ff00000001ff, 0x0000ff0000000100, 0x0000ff0000000101, 0x0000ff000001ff00,
+    0x0000ff00000100ff, 0x0000ff0000010000, 0x0000ff0000010001, 0x0000ff0000010100,
+    0x0000ff0001ffff01, 0x0000ff0001ff0000, 0x0000ff000100ff00, 0x0000ff00010000ff,
+    0x0000ff0001000000, 0x0000ff0001000001, 0x0000ff0001000100, 0x0000ff000101ffff,
+    0x0000ff0001010000, 0x0000ff0001010101, 0x0000ff01ffffff00, 0x0000ff01ffff0001,
+    0x0000ff01ff00ff01, 0x0000ff01ff000000, 0x0000ff01ff000101, 0x0000ff01ff01ff00,
+    0x0000ff01ff0100ff, 0x0000ff0100ffff01, 0x0000ff0100ff0000, 0x0000ff0100ff0101,
+    0x0000ff010000ff00, 0x0000ff01000000ff, 0x0000ff0100000000, 0x0000ff0100000001,
+    0x0000ff0100000100, 0x0000ff010001ff01, 0x0000ff0100010000, 0x0000ff0101ff0000,
+    0x0000ff010100ffff, 0x0000ff010100ff01, 0x0000ff0101000000, 0x0000ff0101000100,
+    0x0000ff0101000101, 0x0000ff01010100ff, 0x000000ffffff00ff, 0x000000ffffff0000,
+    0x000000ffff00ff00, 0x000000ffff0000ff, 0x000000ffff000000, 0x000000ffff000001,
+    0x000000ffff0001ff, 0x000000ffff000100, 0x000000ffff01ff00, 0x000000ffff010000,
+    0x000000ffff0101ff, 0x000000ffff010101, 0x000000ff00ffff00, 0x000000ff00ff00ff,
+    0x000000ff00ff0000, 0x000000ff00ff0001, 0x000000ff00ff0100, 0x000000ff00ff0101,
+    0x000000ff0000ffff, 0x000000ff0000ff00, 0x000000ff000000ff, 0x000000ff00000000,
+    0x000000ff00000001, 0x000000ff000001ff, 0x000000ff00000100, 0x000000ff00000101,
+    0x000000ff0001ff00, 0x000000ff0001ff01, 0x000000ff000100ff, 0x000000ff00010000,
+    0x000000ff00010001, 0x000000ff00010100, 0x000000ff01ffffff, 0x000000ff01ff01ff,
+    0x000000ff01ff0101, 0x000000ff0100ff00, 0x000000ff010000ff, 0x000000ff01000000,
+    0x000000ff01000001, 0x000000ff01000100, 0x000000ff0101ff00, 0x000000ff010100ff,
+    0x000000ff01010000, 0x000000ff01010101, 0x00000000ffffff00, 0x00000000ffffff01,
+    0x00000000ffff00ff, 0x00000000ffff0000, 0x00000000ffff0001, 0x00000000ffff0100,
+    0x00000000ff00ffff, 0x00000000ff00ff00, 0x00000000ff00ff01, 0x00000000ff0000ff,
+    0x00000000ff000000, 0x00000000ff000001, 0x00000000ff000100, 0x00000000ff000101,
+    0x00000000ff01ff00, 0x00000000ff0100ff, 0x00000000ff010000, 0x00000000ff010001,
+    0x00000000ff010100, 0x0000000000ffffff, 0x0000000000ffff00, 0x0000000000ffff01,
+    0x0000000000ff00ff, 0x0000000000ff0000, 0x0000000000ff0001, 0x0000000000ff01ff,
+    0x0000000000ff0100, 0x000000000000ffff, 0x000000000000ff00, 0x000000000000ff01,
+    0x00000000000000ff, 0x0000000000000000, 0x0000000000000001, 0x00000000000001ff,
+    0x0000000000000100, 0x0000000000000101, 0x000000000001ffff, 0x000000000001ff00,
+    0x00000000000100ff, 0x0000000000010000, 0x0000000000010001, 0x00000000000101ff,
+    0x0000000000010100, 0x0000000000010101, 0x0000000001ffff00, 0x0000000001ff00ff,
+    0x0000000001ff0000, 0x0000000001ff0100, 0x0000000001ff0101, 0x000000000100ffff,
+    0x000000000100ff00, 0x00000000010000ff, 0x0000000001000000, 0x0000000001000001,
+    0x00000000010001ff, 0x0000000001000100, 0x000000000101ff00, 0x00000000010100ff,
+    0x0000000001010000, 0x0000000001010001, 0x0000000001010100, 0x00000001ffffffff,
+    0x00000001ffffff00, 0x00000001ffffff01, 0x00000001ffff00ff, 0x00000001ffff0001,
+    0x00000001ffff01ff, 0x00000001ffff0100, 0x00000001ff00ff00, 0x00000001ff0000ff,
+    0x00000001ff000000, 0x00000001ff0001ff, 0x00000001ff000100, 0x00000001ff01ffff,
+    0x00000001ff01ff00, 0x00000001ff01ff01, 0x00000001ff0100ff, 0x00000001ff010000,
+    0x00000001ff010001, 0x00000001ff0101ff, 0x00000001ff010100, 0x0000000100ffff00,
+    0x0000000100ff0000, 0x0000000100ff0001, 0x0000000100ff01ff, 0x0000000100ff0100,
+    0x0000000100ff0101, 0x000000010000ffff, 0x000000010000ff00, 0x000000010000ff01,
+    0x00000001000000ff, 0x0000000100000000, 0x0000000100000001, 0x00000001000001ff,
+    0x0000000100000100, 0x0000000100000101, 0x000000010001ff00, 0x00000001000100ff,
+    0x0000000100010000, 0x0000000100010100, 0x0000000101ffff01, 0x0000000101ff0000,
+    0x0000000101ff0001, 0x0000000101ff01ff, 0x0000000101ff0100, 0x0000000101ff0101,
+    0x000000010100ff00, 0x0000000101000000, 0x0000000101000101, 0x000000010101ff01,
+    0x0000000101010000, 0x0000000101010001, 0x00000001010101ff, 0x0000000101010100,
+    0x000001ffffff00ff, 0x000001ffffff0000, 0x000001ffffff0001, 0x000001ffffff0100,
+    0x000001ffff00ffff, 0x000001ffff000000, 0x000001ffff0001ff, 0x000001ffff01ff00,
+    0x000001ffff010101, 0x000001ff00ff0000, 0x000001ff00ff01ff, 0x000001ff00ff0101,
+    0x000001ff0000ff00, 0x000001ff000000ff, 0x000001ff00000000, 0x000001ff00000001,
+    0x000001ff000001ff, 0x000001ff00000100, 0x000001ff0001ffff, 0x000001ff0001ff01,
+    0x000001ff000100ff, 0x000001ff00010000, 0x000001ff01ffff01, 0x000001ff01ff0100,
+    0x000001ff0100ffff, 0x000001ff0100ff01, 0x000001ff01000000, 0x000001ff010001ff,
+    0x000001ff0101ff00, 0x000001ff01010100, 0x00000100ffffff00, 0x00000100ffffff01,
+    0x00000100ffff0000, 0x00000100ffff0101, 0x00000100ff00ff00, 0x00000100ff0000ff,
+    0x00000100ff000000, 0x00000100ff000001, 0x00000100ff000100, 0x00000100ff010000,
+    0x0000010000ffff00, 0x0000010000ff00ff, 0x0000010000ff0000, 0x0000010000ff0001,
+    0x0000010000ff0100, 0x000001000000ffff, 0x000001000000ff00, 0x000001000000ff01,
+    0x00000100000000ff, 0x0000010000000000, 0x0000010000000001, 0x00000100000001ff,
+    0x0000010000000100, 0x0000010000000101, 0x000001000001ff00, 0x00000100000100ff,
+    0x0000010000010000, 0x0000010000010001, 0x0000010000010100, 0x0000010001ffff00,
+    0x0000010001ff0000, 0x0000010001ff0100, 0x000001000100ff00, 0x00000100010000ff,
+    0x0000010001000000, 0x0000010001000001, 0x00000100010001ff, 0x0000010001000100,
+    0x0000010001010000, 0x00000101ffff00ff, 0x00000101ffff01ff, 0x00000101ff000000,
+    0x00000101ff000101, 0x00000101ff01ffff, 0x00000101ff010000, 0x00000101ff010001,
+    0x00000101ff010100, 0x0000010100ff0000, 0x0000010100ff01ff, 0x0000010100ff0100,
+    0x000001010000ff00, 0x0000010100000000, 0x0000010100000001, 0x00000101000001ff,
+    0x0000010100000100, 0x000001010001ff01, 0x0000010100010000, 0x00000101000101ff,
+    0x0000010100010101, 0x0000010101ffff00, 0x0000010101ff0101, 0x000001010100ff01,
+    0x0000010101000000, 0x0000010101000001, 0x00000101010001ff, 0x0000010101000101,
+    0x000001010101ff00, 0x0001ffffffff0000, 0x0001ffffff0000ff, 0x0001ffffff000001,
+    0x0001ffffff000100, 0x0001ffffff010000, 0x0001ffff00ff00ff, 0x0001ffff0000ffff,
+    0x0001ffff00000000, 0x0001ffff00000001, 0x0001ffff000001ff, 0x0001ffff00000101,
+    0x0001ffff0001ff00, 0x0001ffff000100ff, 0x0001ffff00010001, 0x0001ffff00010100,
+    0x0001ffff01ffff00, 0x0001ffff01000001, 0x0001ffff01010000, 0x0001ff00ffffff00,
+    0x0001ff00ffff00ff, 0x0001ff00ffff0001, 0x0001ff00ffff0100, 0x0001ff00ff00ff01,
+    0x0001ff00ff000000, 0x0001ff00ff01ff00, 0x0001ff00ff01ff01, 0x0001ff00ff010001,
+    0x0001ff00ff010100, 0x0001ff0000ff0000, 0x0001ff0000ff0100, 0x0001ff000000ff00,
+    0x0001ff0000000000, 0x0001ff0000000001, 0x0001ff0000000100, 0x0001ff0000010000,
+    0x0001ff0000010001, 0x0001ff0000010101, 0x0001ff0001ff00ff, 0x0001ff0001ff0101,
+    0x0001ff000100ff01, 0x0001ff0001000000, 0x0001ff000101ff00, 0x0001ff0001010001,
+    0x0001ff0001010100, 0x0001ff01ff00ff00, 0x0001ff01ff000001, 0x0001ff01ff000100,
+    0x0001ff0100ffffff, 0x0001ff0100ffff00, 0x0001ff0100ff0001, 0x0001ff0100000000,
+    0x0001ff0100000001, 0x0001ff01000001ff, 0x0001ff010001ffff, 0x0001ff0101ff0000,
+    0x0001ff010100ff00, 0x0001ff0101000001, 0x0001ff0101010000, 0x000100ffff00ff00,
+    0x000100ffff00ff01, 0x000100ffff000000, 0x000100ffff000001, 0x000100ffff000101,
+    0x000100ffff01ff00, 0x000100ffff010001, 0x000100ffff010100, 0x000100ff00ffffff,
+    0x000100ff00ffff01, 0x000100ff00ff0000, 0x000100ff00ff01ff, 0x000100ff00ff0101,
+    0x000100ff0000ff00, 0x000100ff000000ff, 0x000100ff00000000, 0x000100ff00000001,
+    0x000100ff00000100, 0x000100ff00000101, 0x000100ff0001ffff, 0x000100ff0001ff01,
+    0x000100ff00010000, 0x000100ff01ff00ff, 0x000100ff01ff0000, 0x000100ff01ff0100,
+    0x000100ff0100ffff, 0x000100ff0100ff01, 0x000100ff010000ff, 0x000100ff01000000,
+    0x000100ff01000001, 0x000100ff010001ff, 0x000100ff01000101, 0x000100ff0101ff00,
+    0x000100ff010100ff, 0x000100ff01010100, 0x00010000ffff0000, 0x00010000ffff01ff,
+    0x00010000ffff0101, 0x00010000ff00ff00, 0x00010000ff000000, 0x00010000ff000001,
+    0x00010000ff000100, 0x0001000000ff00ff, 0x0001000000ff0000, 0x0001000000ff0001,
+    0x0001000000ff0100, 0x000100000000ffff, 0x000100000000ff00, 0x00010000000000ff,
+    0x0001000000000000, 0x0001000000000001, 0x0001000000000100, 0x000100000001ff00,
+    0x00010000000100ff, 0x0001000000010000, 0x0001000000010001, 0x0001000000010100,
+    0x0001000001ff0001, 0x0001000001ff0100, 0x0001000001ff0101, 0x000100000100ff00,
+    0x0001000001000000, 0x0001000001000001, 0x0001000001000100, 0x0001000001000101,
+    0x000100000101ff01, 0x0001000001010000, 0x0001000001010001, 0x00010000010101ff,
+    0x00010001ffffff01, 0x00010001ffff0100, 0x00010001ff000000, 0x00010001ff01ffff,
+    0x00010001ff010001, 0x00010001ff0101ff, 0x00010001ff010100, 0x0001000100ffffff,
+    0x0001000100ff0000, 0x0001000100ff01ff, 0x0001000100ff0101, 0x000100010000ff00,
+    0x00010001000000ff, 0x0001000100000000, 0x0001000100000001, 0x00010001000001ff,
+    0x0001000100000101, 0x000100010001ffff, 0x0001000100010000, 0x00010001000101ff,
+    0x0001000101ffffff, 0x0001000101ffff01, 0x0001000101ff0000, 0x0001000101ff0101,
+    0x00010001010000ff, 0x0001000101000001, 0x00010001010001ff, 0x0001000101000100,
+    0x000100010101ffff, 0x00010001010100ff, 0x0001000101010001, 0x0001000101010101,
+    0x000101ffff000001, 0x000101ffff000100, 0x000101ffff010000, 0x000101ff00ffff00,
+    0x000101ff0000ff01, 0x000101ff00000000, 0x000101ff00000101, 0x000101ff0001ff00,
+    0x000101ff00010100, 0x000101ff01ff0000, 0x000101ff0100ff00, 0x000101ff010001ff,
+    0x000101ff01010001, 0x00010100ffffff00, 0x00010100ffff00ff, 0x00010100ff00ffff,
+    0x00010100ff000000, 0x00010100ff01ff00, 0x00010100ff0100ff, 0x00010100ff010001,
+    0x00010100ff010100, 0x0001010000ffffff, 0x0001010000ffff00, 0x0001010000ff0000,
+    0x0001010000ff0001, 0x0001010000ff01ff, 0x000101000000ff00, 0x00010100000000ff,
+    0x0001010000000000, 0x0001010000000001, 0x0001010000000100, 0x000101000001ffff,
+    0x0001010000010000, 0x0001010000010101, 0x0001010001ffff01, 0x0001010001ff00ff,
+    0x0001010001ff0101, 0x0001010001000000, 0x000101000101ff00, 0x00010100010100ff,
+    0x0001010001010000, 0x0001010001010100, 0x00010101ff00ff00, 0x00010101ff000001,
+    0x00010101ff0001ff, 0x0001010100ffff00, 0x0001010100ff00ff, 0x0001010100ff0100,
+    0x000101010000ffff, 0x0001010100000000, 0x00010101000001ff, 0x0001010100000101,
+    0x00010101000100ff, 0x0001010100010000, 0x0001010100010100, 0x0001010101ff0001,
+    0x00010101010000ff, 0x00010101010001ff, 0x0001010101000101, 0x0001010101010001,
+    0x01ffffffffffffff, 0x01ffffffffffff01, 0x01ffffffffff01ff, 0x01ffffffffff0101,
+    0x01ffffffff01ffff, 0x01ffffffff01ff01, 0x01ffffffff0101ff, 0x01ffffffff010101,
+    0x01ffffff00ff0000, 0x01ffffff0000ffff, 0x01ffffff0000ff00, 0x01ffffff000000ff,
+    0x01ffffff00000001, 0x01ffffff00000100, 0x01ffffff00010000, 0x01ffffff01ffffff,
+    0x01ffffff01ffff01, 0x01ffffff01ff01ff, 0x01ffffff01ff0101, 0x01ffffff01000000,
+    0x01ffffff0101ffff, 0x01ffffff0101ff01, 0x01ffffff010101ff, 0x01ffffff01010101,
+    0x01ffff00ffff0000, 0x01ffff00ff00ff00, 0x01ffff00ff0000ff, 0x01ffff00ff000001,
+    0x01ffff00ff000100, 0x01ffff00ff010000, 0x01ffff0000ffff00, 0x01ffff0000ff00ff,
+    0x01ffff0000ff0100, 0x01ffff000000ffff, 0x01ffff000000ff01, 0x01ffff0000000000,
+    0x01ffff0000000001, 0x01ffff00000001ff, 0x01ffff0000000100, 0x01ffff00000100ff,
+    0x01ffff0000010001, 0x01ffff0000010100, 0x01ffff0001ff0000, 0x01ffff0001ff0100,
+    0x01ffff00010000ff, 0x01ffff0001000001, 0x01ffff0001000100, 0x01ffff0001010000,
+    0x01ffff01ffffffff, 0x01ffff01ffffff01, 0x01ffff01ffff01ff, 0x01ffff01ffff0101,
+    0x01ffff01ff000000, 0x01ffff01ff01ffff, 0x01ffff01ff01ff01, 0x01ffff01ff0101ff,
+    0x01ffff01ff010101, 0x01ffff010000ff00, 0x01ffff01000000ff, 0x01ffff0100000100,
+    0x01ffff0100010000, 0x01ffff0101ffffff, 0x01ffff0101ffff01, 0x01ffff0101ff01ff,
+    0x01ffff0101ff0101, 0x01ffff0101000000, 0x01ffff010101ffff, 0x01ffff010101ff01,
+    0x01ffff01010101ff, 0x01ffff0101010101, 0x01ff00ffff0000ff, 0x01ff00ffff000100,
+    0x01ff00ff00ffff00, 0x01ff00ff00ff00ff, 0x01ff00ff0000ff00, 0x01ff00ff00000000,
+    0x01ff00ff00000101, 0x01ff00ff0001ff00, 0x01ff00ff000100ff, 0x01ff00ff00010100,
+    0x01ff00ff010000ff, 0x01ff00ff01000100, 0x01ff0000ffffff00, 0x01ff0000ffff0100,
+    0x01ff0000ff00ff01, 0x01ff0000ff000000, 0x01ff0000ff000101, 0x01ff0000ff010001,
+    0x01ff0000ff010100, 0x01ff000000ffffff, 0x01ff000000ffff00, 0x01ff000000ff0000,
+    0x01ff000000ff01ff, 0x01ff00000000ff00, 0x01ff0000000000ff, 0x01ff000000000000,
+    0x01ff000000000001, 0x01ff000000000100, 0x01ff000000000101, 0x01ff000000010000,
+    0x01ff000000010001, 0x01ff0000000101ff, 0x01ff000000010101, 0x01ff000001ffff00,
+    0x01ff000001ff00ff, 0x01ff000001ff0001, 0x01ff000001ff0100, 0x01ff00000100ffff,
+    0x01ff00000100ff01, 0x01ff000001000000, 0x01ff0000010001ff, 0x01ff000001010001,
+    0x01ff0001ff00ff00, 0x01ff0001ff000001, 0x01ff0001ff000100, 0x01ff0001ff010000,
+    0x01ff000100ffff00, 0x01ff000100ff00ff, 0x01ff000100ff0100, 0x01ff000100ff0101,
+    0x01ff00010000ffff, 0x01ff000100000000, 0x01ff000100000100, 0x01ff000100000101,
+    0x01ff00010001ff00, 0x01ff000100010001, 0x01ff000100010101, 0x01ff000101ff0000,
+    0x01ff00010100ff00, 0x01ff000101000101, 0x01ff0001010100ff, 0x01ff01ffffffffff,
+    0x01ff01ffffffff01, 0x01ff01ffffff01ff, 0x01ff01ffffff0101, 0x01ff01ffff000000,
+    0x01ff01ffff01ffff, 0x01ff01ffff01ff01, 0x01ff01ffff0101ff, 0x01ff01ffff010101,
+    0x01ff01ff00ffff00, 0x01ff01ff00ff0000, 0x01ff01ff0000ff00, 0x01ff01ff000000ff,
+    0x01ff01ff00000100, 0x01ff01ff00010000, 0x01ff01ff00010100, 0x01ff01ff01ffffff,
+    0x01ff01ff01ffff01, 0x01ff01ff01ff01ff, 0x01ff01ff01ff0101, 0x01ff01ff01000000,
+    0x01ff01ff0101ffff, 0x01ff01ff0101ff01, 0x01ff01ff010101ff, 0x01ff01ff01010101,
+    0x01ff0100ffff0000, 0x01ff0100ffff0001, 0x01ff0100ff00ff00, 0x01ff0100ff0000ff,
+    0x01ff0100ff000001, 0x01ff0100ff010000, 0x01ff010000ffff00, 0x01ff010000ff00ff,
+    0x01ff010000ff0001, 0x01ff010000ff0100, 0x01ff01000000ffff, 0x01ff01000000ff01,
+    0x01ff010000000000, 0x01ff010000000101, 0x01ff01000001ff00, 0x01ff0100000100ff,
+    0x01ff010001ff0000, 0x01ff010001000001, 0x01ff010001000100, 0x01ff010001010000,
+    0x01ff0101ffffffff, 0x01ff0101ffffff01, 0x01ff0101ffff01ff, 0x01ff0101ffff0101,
+    0x01ff0101ff000000, 0x01ff0101ff01ffff, 0x01ff0101ff01ff01, 0x01ff0101ff0101ff,
+    0x01ff0101ff010101, 0x01ff010100ff0000, 0x01ff01010000ff00, 0x01ff0101000000ff,
+    0x01ff010100000001, 0x01ff010101ffffff, 0x01ff010101ffff01, 0x01ff010101ff01ff,
+    0x01ff010101ff0101, 0x01ff010101000000, 0x01ff01010101ffff, 0x01ff01010101ff01,
+    0x01ff0101010101ff, 0x01ff010101010101, 0x0100ffffffff0000, 0x0100ffffff00ff00,
+    0x0100ffffff000001, 0x0100ffffff0001ff, 0x0100ffffff000100, 0x0100ffffff010000,
+    0x0100ffff00ffff00, 0x0100ffff00ff0001, 0x0100ffff00ff0100, 0x0100ffff00000000,
+    0x0100ffff000001ff, 0x0100ffff00000101, 0x0100ffff00010100, 0x0100ffff00010101,
+    0x0100ffff01ff0000, 0x0100ffff0100ff00, 0x0100ffff010000ff, 0x0100ffff01000001,
+    0x0100ffff01000100, 0x0100ffff01010000, 0x0100ff00ffffff00, 0x0100ff00ffff00ff,
+    0x0100ff00ffff0001, 0x0100ff00ffff0100, 0x0100ff00ff00ffff, 0x0100ff00ff000000,
+    0x0100ff00ff0001ff, 0x0100ff00ff000101, 0x0100ff00ff01ff00, 0x0100ff00ff0100ff,
+    0x0100ff00ff010001, 0x0100ff00ff010100, 0x0100ff0000ffffff, 0x0100ff0000ff0000,
+    0x0100ff000000ffff, 0x0100ff000000ff00, 0x0100ff00000000ff, 0x0100ff0000000000,
+    0x0100ff0000000001, 0x0100ff0000000100, 0x0100ff000001ff01, 0x0100ff0000010000,
+    0x0100ff0001ff00ff, 0x0100ff0001ff0001, 0x0100ff000100ff01, 0x0100ff0001000000,
+    0x0100ff00010001ff, 0x0100ff000101ff00, 0x0100ff00010100ff, 0x0100ff0001010001,
+    0x0100ff0001010100, 0x0100ff01ffff0000, 0x0100ff01ff00ff00, 0x0100ff01ff0000ff,
+    0x0100ff01ff000100, 0x0100ff01ff010000, 0x0100ff0100ff00ff, 0x0100ff0100ff0001,
+    0x0100ff0100ff0100, 0x0100ff010000ffff, 0x0100ff010000ff01, 0x0100ff0100000000,
+    0x0100ff01000001ff, 0x0100ff0100010001, 0x0100ff0100010100, 0x0100ff0101ff0000,
+    0x0100ff01010000ff, 0x0100ff0101000001, 0x0100ff0101010100, 0x010000ffffffff00,
+    0x010000ffffff00ff, 0x010000ffffff0001, 0x010000ffff00ffff, 0x010000ffff000000,
+    0x010000ffff0001ff, 0x010000ffff010001, 0x010000ff00ffffff, 0x010000ff00ff0101,
+    0x010000ff0000ff00, 0x010000ff000000ff, 0x010000ff00000000, 0x010000ff00000001,
+    0x010000ff000001ff, 0x010000ff00000100, 0x010000ff0001ffff, 0x010000ff0001ff00,
+    0x010000ff0001ff01, 0x010000ff00010000, 0x010000ff01ff00ff, 0x010000ff01ff0001,
+    0x010000ff0100ff01, 0x010000ff010000ff, 0x010000ff01000000, 0x010000ff010001ff,
+    0x010000ff0101ff00, 0x010000ff01010100, 0x01000000ffffffff, 0x01000000ffff0000,
+    0x01000000ffff01ff, 0x01000000ffff0101, 0x01000000ff00ffff, 0x01000000ff00ff00,
+    0x01000000ff0000ff, 0x01000000ff000000, 0x01000000ff000001, 0x01000000ff000100,
+    0x01000000ff01ff00, 0x01000000ff010000, 0x01000000ff010100, 0x01000000ff010101,
+    0x0100000000ffff00, 0x0100000000ff00ff, 0x0100000000ff0000, 0x0100000000ff0001,
+    0x0100000000ff0100, 0x010000000000ffff, 0x010000000000ff00, 0x010000000000ff01,
+    0x01000000000000ff, 0x0100000000000000, 0x0100000000000001, 0x01000000000001ff,
+    0x0100000000000100, 0x0100000000000101, 0x010000000001ff00, 0x01000000000100ff,
+    0x0100000000010000, 0x0100000000010001, 0x0100000000010100, 0x0100000001ffff00,
+    0x0100000001ff0000, 0x0100000001ff01ff, 0x010000000100ff00, 0x010000000100ff01,
+    0x01000000010000ff, 0x0100000001000000, 0x0100000001000001, 0x0100000001000100,
+    0x0100000001000101, 0x010000000101ffff, 0x010000000101ff01, 0x0100000001010000,
+    0x01000000010101ff, 0x0100000001010101, 0x01000001ffffff00, 0x01000001ffff00ff,
+    0x01000001ff00ffff, 0x01000001ff000000, 0x01000001ff000100, 0x01000001ff01ffff,
+    0x01000001ff010001, 0x01000001ff010100, 0x0100000100ff0000, 0x0100000100ff01ff,
+    0x0100000100ff0100, 0x010000010000ff00, 0x010000010000ff01, 0x0100000100000000,
+    0x0100000100000001, 0x0100000100000100, 0x0100000100010000, 0x01000001000101ff,
+    0x0100000101ffff01, 0x0100000101ff00ff, 0x0100000101ff0100, 0x0100000101ff0101,
+    0x010000010100ff01, 0x01000001010000ff, 0x0100000101000000, 0x01000001010100ff,
+    0x0100000101010001, 0x0100000101010100, 0x010001ffffff0000, 0x010001ffff000001,
+    0x010001ffff000100, 0x010001ffff010000, 0x010001ff00ffff00, 0x010001ff00ff0001,
+    0x010001ff0000ffff, 0x010001ff0000ff01, 0x010001ff00000000, 0x010001ff00000001,
+    0x010001ff00000101, 0x010001ff000100ff, 0x010001ff00010000, 0x010001ff01ff0000,
+    0x010001ff0100ff00, 0x010001ff01000001, 0x010001ff01000100, 0x010001ff01010000,
+    0x01000100ffff00ff, 0x01000100ffff0001, 0x01000100ffff0100, 0x01000100ff00ffff,
+    0x01000100ff00ff01, 0x01000100ff000000, 0x01000100ff0001ff, 0x01000100ff000101,
+    0x01000100ff01ffff, 0x01000100ff01ff00, 0x01000100ff0100ff, 0x01000100ff010001,
+    0x0100010000ffffff, 0x0100010000ffff01, 0x0100010000ff0000, 0x0100010000ff01ff,
+    0x0100010000ff0101, 0x010001000000ff00, 0x01000100000000ff, 0x0100010000000000,
+    0x0100010000000001, 0x0100010000000100, 0x010001000001ff01, 0x0100010000010000,
+    0x0100010000010001, 0x0100010000010101, 0x0100010001ffff00, 0x0100010001ff00ff,
+    0x010001000100ffff, 0x010001000100ff01, 0x0100010001000000, 0x0100010001000101,
+    0x010001000101ff00, 0x0100010001010001, 0x01000101ffff0000, 0x01000101ff000000,
+    0x01000101ff010000, 0x0100010100ff00ff, 0x0100010100ff0001, 0x0100010100ff0100,
+    0x010001010000ffff, 0x0100010100000000, 0x01000101000001ff, 0x010001010001ff00,
+    0x0100010101ff0000, 0x010001010100ff00, 0x01000101010000ff, 0x0100010101000000,
+    0x0100010101000001, 0x0101ffffffffffff, 0x0101ffffffffff01, 0x0101ffffffff01ff,
+    0x0101ffffffff0101, 0x0101ffffff000000, 0x0101ffffff01ffff, 0x0101ffffff01ff01,
+    0x0101ffffff0101ff, 0x0101ffffff010101, 0x0101ffff00ff0000, 0x0101ffff0000ff00,
+    0x0101ffff000000ff, 0x0101ffff00000001, 0x0101ffff00000100, 0x0101ffff01ffffff,
+    0x0101ffff01ffff01, 0x0101ffff01ff01ff, 0x0101ffff01ff0101, 0x0101ffff01000000,
+    0x0101ffff0101ffff, 0x0101ffff0101ff01, 0x0101ffff010101ff, 0x0101ffff01010101,
+    0x0101ff00ffff0000, 0x0101ff00ffff0100, 0x0101ff00ff00ff00, 0x0101ff00ff0000ff,
+    0x0101ff00ff000001, 0x0101ff00ff000100, 0x0101ff00ff000101, 0x0101ff0000ff0001,
+    0x0101ff0000ff0100, 0x0101ff000000ff00, 0x0101ff0000000000, 0x0101ff00000001ff,
+    0x0101ff0000000101, 0x0101ff000001ff00, 0x0101ff00000100ff, 0x0101ff0001ff0000,
+    0x0101ff000100ffff, 0x0101ff000100ff01, 0x0101ff0001000001, 0x0101ff0001000100,
+    0x0101ff01ffffff01, 0x0101ff01ffff01ff, 0x0101ff01ffff0101, 0x0101ff01ff00ffff,
+    0x0101ff01ff000100, 0x0101ff01ff01ff01, 0x0101ff01ff0101ff, 0x0101ff01ff010101,
+    0x0101ff0100ff0000, 0x0101ff010000ff00, 0x0101ff0100000001, 0x0101ff0100000100,
+    0x0101ff0100010000, 0x0101ff0101ffffff, 0x0101ff0101ffff01, 0x0101ff0101ff01ff,
+    0x0101ff0101ff0101, 0x0101ff0101000000, 0x0101ff010101ffff, 0x0101ff010101ff01,
+    0x0101ff01010101ff, 0x0101ff0101010101, 0x010100ffff000100, 0x010100ffff010000,
+    0x010100ff00ffff00, 0x010100ff00ff00ff, 0x010100ff0000ffff, 0x010100ff000000ff,
+    0x010100ff00000000, 0x010100ff000001ff, 0x010100ff00000101, 0x010100ff0001ff00,
+    0x010100ff00010000, 0x010100ff00010001, 0x010100ff000101ff, 0x010100ff00010100,
+    0x010100ff01ff0000, 0x01010000ffff0001, 0x01010000ffff0100, 0x01010000ff00ffff,
+    0x01010000ff00ff01, 0x01010000ff000000, 0x01010000ff0001ff, 0x01010000ff010001,
+    0x01010000ff010100, 0x0101000000ffff01, 0x0101000000ff0000, 0x010100000000ff00,
+    0x01010000000000ff, 0x0101000000000000, 0x0101000000000001, 0x0101000000000100,
+    0x0101000000010000, 0x0101000000010101, 0x0101000001ffff00, 0x0101000001ff00ff,
+    0x0101000001ff0000, 0x0101000001ff0001, 0x0101000001ff0100, 0x010100000100ff01,
+    0x0101000001000000, 0x01010000010001ff, 0x01010001ffff0000, 0x01010001ff00ff00,
+    0x01010001ff000001, 0x01010001ff000101, 0x01010001ff01ff00, 0x01010001ff010000,
+    0x0101000100ff00ff, 0x0101000100ff0001, 0x0101000100ff0101, 0x010100010000ff01,
+    0x0101000100000000, 0x0101000100000001, 0x01010001000001ff, 0x010100010001ffff,
+    0x010100010001ff01, 0x0101000101ff0001, 0x010100010100ffff, 0x0101000101000000,
+    0x0101000101000001, 0x0101000101000100, 0x010100010101ff00, 0x01010001010100ff,
+    0x0101000101010001, 0x010101ffffffffff, 0x010101ffffffff01, 0x010101ffffff01ff,
+    0x010101ffffff0101, 0x010101ffff01ffff, 0x010101ffff01ff01, 0x010101ffff0101ff,
+    0x010101ffff010101, 0x010101ff0000ff00, 0x010101ff000000ff, 0x010101ff00000001,
+    0x010101ff00000100, 0x010101ff01ffffff, 0x010101ff01ffff01, 0x010101ff01ff01ff,
+    0x010101ff01ff0101, 0x010101ff01000000, 0x010101ff0101ffff, 0x010101ff0101ff01,
+    0x010101ff010101ff, 0x010101ff01010101, 0x01010100ffff0000, 0x01010100ff0000ff,
+    0x01010100ff000100, 0x01010100ff01ff00, 0x01010100ff010000, 0x0101010000ffff00,
+    0x010101000000ffff, 0x0101010000000000, 0x0101010000000101, 0x010101000001ff00,
+    0x0101010000010001, 0x0101010000010100, 0x010101000100ffff, 0x0101010001000001,
+    0x01010101ffffffff, 0x01010101ffffff01, 0x01010101ffff01ff, 0x01010101ffff0101,
+    0x01010101ff01ffff, 0x01010101ff01ff01, 0x01010101ff0101ff, 0x01010101ff010101,
+    0x010101010000ff00, 0x01010101000000ff, 0x0101010100000001, 0x0101010101ffffff,
+    0x0101010101ffff01, 0x0101010101ff01ff, 0x0101010101ff0101, 0x0101010101000000,
+    0x010101010101ffff, 0x010101010101ff01, 0x01010101010101ff, 0x0101010101010101,
+GGML_TABLE_END()
+#else
+GGML_TABLE_BEGIN(uint32_t, iq1s_grid_gpu, NGRID_IQ1S)
+    0x00000000, 0x00000002, 0x00000101, 0x00000200, 0x00000202, 0x00010001, 0x00010101, 0x00020000,
+    0x00020002, 0x00020200, 0x00020202, 0x01000101, 0x01010001, 0x01010100, 0x01010102, 0x01020101,
+    0x02000000, 0x02000002, 0x02000200, 0x02000202, 0x02010101, 0x02020000, 0x02020002, 0x02020200,
+    0x02020202, 0x00000110, 0x00000111, 0x00010011, 0x00010110, 0x00010112, 0x00010211, 0x00010212,
+    0x00020111, 0x01000011, 0x01000112, 0x01000211, 0x01010012, 0x01010111, 0x01010212, 0x01020011,
+    0x01020110, 0x01020112, 0x01020210, 0x02000111, 0x02010011, 0x02010110, 0x02010112, 0x02020111,
+    0x00000020, 0x00000022, 0x00000220, 0x00000222, 0x00010121, 0x00020020, 0x00020022, 0x00020220,
+    0x00020222, 0x01000121, 0x01010021, 0x01010221, 0x01020120, 0x01020221, 0x02000020, 0x02000022,
+    0x02000220, 0x02000222, 0x02010021, 0x02010121, 0x02010221, 0x02020020, 0x02020022, 0x02020220,
+    0x02020222, 0x00011001, 0x00011100, 0x00011102, 0x00021101, 0x01001001, 0x01001201, 0x01011101,
+    0x01011202, 0x01021100, 0x01021101, 0x02011001, 0x02011201, 0x02021101, 0x00001011, 0x00001110,
+    0x00001111, 0x00001112, 0x00011111, 0x00011210, 0x00011212, 0x00021211, 0x01001010, 0x01001111,
+    0x01001212, 0x01011010, 0x01011011, 0x01011110, 0x01011111, 0x01011112, 0x01011211, 0x01021010,
+    0x01021012, 0x01021111, 0x01021210, 0x01021212, 0x02001011, 0x02011011, 0x02011111, 0x02011210,
+    0x02011212, 0x02021011, 0x02021110, 0x02021111, 0x02021112, 0x02021211, 0x00011120, 0x00011221,
+    0x01001021, 0x01001120, 0x01011020, 0x01011022, 0x01011121, 0x01011220, 0x01021020, 0x01021021,
+    0x01021122, 0x01021221, 0x02001121, 0x02011021, 0x02011120, 0x02011221, 0x00002000, 0x00002002,
+    0x00002200, 0x00002202, 0x00012101, 0x00022000, 0x00022002, 0x00022200, 0x00022202, 0x01002101,
+    0x01012001, 0x01012102, 0x01022101, 0x02002000, 0x02002002, 0x02002200, 0x02002202, 0x02012101,
+    0x02022000, 0x02022002, 0x02022200, 0x02022202, 0x00002111, 0x00012011, 0x00012110, 0x00012211,
+    0x00022110, 0x00022111, 0x01002011, 0x01012010, 0x01012011, 0x01012111, 0x01022011, 0x01022110,
+    0x01022211, 0x02012011, 0x02012110, 0x02012112, 0x02012211, 0x02022111, 0x00002020, 0x00002022,
+    0x00002220, 0x00002222, 0x00012121, 0x00022020, 0x00022022, 0x00022220, 0x00022222, 0x01002121,
+    0x01012021, 0x01012221, 0x01022021, 0x01022121, 0x02002020, 0x02002022, 0x02002121, 0x02002220,
+    0x02002222, 0x02012121, 0x02022020, 0x02022022, 0x02022220, 0x02022222, 0x00110000, 0x00110001,
+    0x00110100, 0x00110201, 0x00120100, 0x00120101, 0x01100001, 0x01100100, 0x01110000, 0x01110101,
+    0x01110200, 0x01120001, 0x01120100, 0x01120101, 0x01120201, 0x02110001, 0x02110100, 0x02110102,
+    0x02120001, 0x02120101, 0x00100011, 0x00100110, 0x00100112, 0x00100211, 0x00110010, 0x00110012,
+    0x00110111, 0x00110210, 0x00120011, 0x00120110, 0x00120211, 0x01100111, 0x01100212, 0x01110010,
+    0x01110011, 0x01110012, 0x01110110, 0x01110111, 0x01110112, 0x01110211, 0x01120010, 0x01120111,
+    0x02100110, 0x02110012, 0x02110111, 0x02120011, 0x02120110, 0x00110021, 0x00110120, 0x00110122,
+    0x00120121, 0x01100020, 0x01100122, 0x01100221, 0x01110022, 0x01110121, 0x01110220, 0x01110222,
+    0x01120120, 0x01120122, 0x02100121, 0x02110021, 0x02110120, 0x02110122, 0x02120121, 0x00101001,
+    0x00101102, 0x00101201, 0x00111100, 0x00111101, 0x00111200, 0x00111201, 0x00121001, 0x00121102,
+    0x01101001, 0x01101101, 0x01101102, 0x01101200, 0x01101202, 0x01111001, 0x01111100, 0x01111101,
+    0x01111102, 0x01111201, 0x01121002, 0x01121101, 0x01121200, 0x02101100, 0x02101201, 0x02111000,
+    0x02111100, 0x02111101, 0x02111200, 0x02111201, 0x02111202, 0x02121001, 0x02121100, 0x02121101,
+    0x02121201, 0x00101012, 0x00101111, 0x00101212, 0x00111011, 0x00111110, 0x00111111, 0x00111112,
+    0x00111211, 0x00121010, 0x00121012, 0x00121111, 0x00121210, 0x00121212, 0x01101011, 0x01101110,
+    0x01101111, 0x01101112, 0x01111011, 0x01111012, 0x01111110, 0x01111111, 0x01111112, 0x01111211,
+    0x01111212, 0x01121011, 0x01121110, 0x01121111, 0x01121112, 0x01121211, 0x02101010, 0x02101012,
+    0x02101110, 0x02101111, 0x02101210, 0x02101212, 0x02111010, 0x02111011, 0x02111110, 0x02111111,
+    0x02111112, 0x02111211, 0x02111212, 0x02121010, 0x02121012, 0x02121111, 0x00101021, 0x00101120,
+    0x00101121, 0x00101122, 0x00111121, 0x00111122, 0x00111220, 0x00111222, 0x00121021, 0x00121122,
+    0x01101020, 0x01101022, 0x01101120, 0x01101121, 0x01101220, 0x01101222, 0x01111021, 0x01111121,
+    0x01111122, 0x01111220, 0x01111221, 0x01121021, 0x01121120, 0x01121121, 0x01121220, 0x01121221,
+    0x01121222, 0x02101122, 0x02101222, 0x02111022, 0x02111121, 0x02121120, 0x02121221, 0x00112001,
+    0x00112102, 0x00122101, 0x01102001, 0x01102100, 0x01102102, 0x01102201, 0x01112000, 0x01112101,
+    0x01112200, 0x01112202, 0x01122000, 0x01122001, 0x01122100, 0x01122102, 0x01122201, 0x02102101,
+    0x02112001, 0x02112100, 0x02122101, 0x00112010, 0x00112012, 0x00112111, 0x00112212, 0x00122011,
+    0x00122111, 0x01102012, 0x01102110, 0x01102111, 0x01102210, 0x01112011, 0x01112110, 0x01112111,
+    0x01112112, 0x01112211, 0x01112212, 0x01122010, 0x01122111, 0x01122212, 0x02102211, 0x02112011,
+    0x02112012, 0x02112111, 0x02112210, 0x02122011, 0x02122112, 0x02122211, 0x00102221, 0x00112122,
+    0x00122120, 0x00122122, 0x01102120, 0x01102122, 0x01102221, 0x01112020, 0x01112022, 0x01112121,
+    0x01112220, 0x01122021, 0x01122122, 0x01122221, 0x02102121, 0x02112021, 0x02112122, 0x02112222,
+    0x00200000, 0x00200002, 0x00200200, 0x00200202, 0x00210101, 0x00220000, 0x00220002, 0x00220101,
+    0x00220200, 0x00220202, 0x01200101, 0x01210001, 0x01210201, 0x01220001, 0x01220101, 0x02200000,
+    0x02200002, 0x02200200, 0x02200202, 0x02210101, 0x02220000, 0x02220002, 0x02220101, 0x02220200,
+    0x02220202, 0x00200111, 0x00210011, 0x00210110, 0x00210211, 0x00220111, 0x01200012, 0x01200110,
+    0x01200211, 0x01210111, 0x01210210, 0x01210212, 0x01220011, 0x01220110, 0x01220111, 0x01220112,
+    0x02200111, 0x02210010, 0x02210112, 0x02210211, 0x02220111, 0x00200021, 0x00200220, 0x00200222,
+    0x00210021, 0x00210121, 0x00220020, 0x00220022, 0x00220220, 0x00220222, 0x01200121, 0x01210021,
+    0x01210122, 0x01210221, 0x01220121, 0x02200021, 0x02200220, 0x02200222, 0x02210021, 0x02210121,
+    0x02220020, 0x02220022, 0x02220220, 0x02220222, 0x00201101, 0x00211100, 0x00211102, 0x00211201,
+    0x00221101, 0x01201100, 0x01201101, 0x01201102, 0x01201201, 0x01211002, 0x01211101, 0x01211200,
+    0x01211202, 0x01221102, 0x02201101, 0x02211001, 0x02211100, 0x02211201, 0x02221001, 0x02221101,
+    0x00201211, 0x00211111, 0x00221011, 0x00221211, 0x01201010, 0x01201111, 0x01201210, 0x01211011,
+    0x01211110, 0x01211111, 0x01211211, 0x01221012, 0x01221111, 0x01221210, 0x02201211, 0x02211010,
+    0x02211110, 0x02211111, 0x02211210, 0x02211212, 0x02221011, 0x02221110, 0x02221112, 0x02221211,
+    0x00201121, 0x00211020, 0x00211022, 0x00211221, 0x00221121, 0x01201021, 0x01201221, 0x01211121,
+    0x01221020, 0x01221021, 0x01221221, 0x02201120, 0x02201122, 0x02211020, 0x02211222, 0x00202000,
+    0x00202002, 0x00202200, 0x00202202, 0x00212101, 0x00222000, 0x00222002, 0x00222200, 0x00222202,
+    0x01202101, 0x01212001, 0x01212100, 0x01222101, 0x02202000, 0x02202002, 0x02202200, 0x02202202,
+    0x02222000, 0x02222002, 0x02222200, 0x02222202, 0x00202211, 0x00212011, 0x00212110, 0x00212211,
+    0x00222111, 0x01202112, 0x01202211, 0x01212012, 0x01212111, 0x01222011, 0x01222110, 0x01222112,
+    0x01222211, 0x02202111, 0x02212010, 0x02212112, 0x02212211, 0x02222110, 0x02222111, 0x00202020,
+    0x00202022, 0x00202220, 0x00202222, 0x00222020, 0x00222022, 0x00222220, 0x00222222, 0x01202121,
+    0x01212021, 0x01212122, 0x01212221, 0x01222121, 0x02202020, 0x02202022, 0x02202220, 0x02202222,
+    0x02212121, 0x02222020, 0x02222022, 0x02222220, 0x02222222, 0x10000101, 0x10010001, 0x10010102,
+    0x10020101, 0x11000201, 0x11010002, 0x11010101, 0x11010200, 0x11010202, 0x11020001, 0x11020100,
+    0x11020102, 0x12010100, 0x12010201, 0x12020001, 0x12020102, 0x10000010, 0x10000011, 0x10000110,
+    0x10000112, 0x10000211, 0x10010012, 0x10010111, 0x10010112, 0x10010210, 0x10010212, 0x10020011,
+    0x10020112, 0x10020211, 0x11000111, 0x11000210, 0x11000212, 0x11010011, 0x11010110, 0x11010111,
+    0x11010112, 0x11010211, 0x11010212, 0x11020111, 0x11020210, 0x11020212, 0x12000011, 0x12000110,
+    0x12000112, 0x12010010, 0x12010012, 0x12010111, 0x12020010, 0x12020011, 0x12020012, 0x10000121,
+    0x10010021, 0x10010120, 0x10010122, 0x10020121, 0x11000021, 0x11010022, 0x11010121, 0x11010222,
+    0x11020120, 0x11020221, 0x12000221, 0x12010120, 0x12020121, 0x10001001, 0x10011101, 0x10011201,
+    0x10021201, 0x11001101, 0x11001200, 0x11001202, 0x11011001, 0x11011100, 0x11011101, 0x11011102,
+    0x11021001, 0x11021002, 0x11021101, 0x11021200, 0x11021202, 0x12001001, 0x12001102, 0x12001201,
+    0x12011000, 0x12011002, 0x12011101, 0x12021000, 0x12021001, 0x12021201, 0x10001011, 0x10001012,
+    0x10001111, 0x10001212, 0x10011011, 0x10011110, 0x10011111, 0x10011112, 0x10011211, 0x10021010,
+    0x10021111, 0x10021212, 0x11001011, 0x11001110, 0x11001111, 0x11001112, 0x11001211, 0x11011010,
+    0x11011011, 0x11011110, 0x11011111, 0x11011112, 0x11011210, 0x11011211, 0x11021011, 0x11021110,
+    0x11021111, 0x11021112, 0x11021211, 0x12001012, 0x12001110, 0x12001111, 0x12001210, 0x12011011,
+    0x12011110, 0x12011111, 0x12011112, 0x12011211, 0x12011212, 0x12021111, 0x12021210, 0x12021212,
+    0x10001021, 0x10001121, 0x10001221, 0x10011120, 0x10011121, 0x10011220, 0x10011222, 0x10021021,
+    0x10021120, 0x10021221, 0x11001020, 0x11001022, 0x11001121, 0x11001220, 0x11011020, 0x11011021,
+    0x11011022, 0x11011121, 0x11011122, 0x11011221, 0x11021022, 0x11021121, 0x11021220, 0x12001021,
+    0x12001121, 0x12001222, 0x12011120, 0x12011121, 0x12021021, 0x12021120, 0x12021122, 0x10002101,
+    0x10012001, 0x10012101, 0x10012202, 0x10022101, 0x11002002, 0x11002201, 0x11012000, 0x11012101,
+    0x11012200, 0x11022001, 0x11022100, 0x11022102, 0x11022201, 0x12002101, 0x12012001, 0x12012100,
+    0x12012102, 0x12012201, 0x12022101, 0x10002011, 0x10002111, 0x10002112, 0x10002212, 0x10012010,
+    0x10012110, 0x10012111, 0x10012210, 0x10022011, 0x10022110, 0x10022112, 0x11002010, 0x11002111,
+    0x11002212, 0x11012011, 0x11012012, 0x11012110, 0x11012111, 0x11012112, 0x11012211, 0x11022010,
+    0x11022012, 0x11022111, 0x11022112, 0x11022212, 0x12002112, 0x12002211, 0x12012012, 0x12012111,
+    0x12012112, 0x12012210, 0x12022011, 0x12022110, 0x12022112, 0x12022211, 0x10012122, 0x11002120,
+    0x11002122, 0x11002221, 0x11012121, 0x11012220, 0x11012222, 0x11022120, 0x11022221, 0x12012120,
+    0x12022121, 0x10100001, 0x10100100, 0x10100101, 0x10100102, 0x10100201, 0x10110002, 0x10110101,
+    0x10110202, 0x10120001, 0x10120100, 0x10120201, 0x11100000, 0x11100101, 0x11100200, 0x11110001,
+    0x11110100, 0x11110101, 0x11110102, 0x11110201, 0x11120101, 0x11120200, 0x12100102, 0x12100201,
+    0x12110101, 0x12110200, 0x12120000, 0x12120001, 0x12120102, 0x12120201, 0x10100111, 0x10100210,
+    0x10100211, 0x10100212, 0x10110011, 0x10110110, 0x10110111, 0x10110112, 0x10110210, 0x10110211,
+    0x10120010, 0x10120111, 0x10120112, 0x10120210, 0x10120212, 0x11100011, 0x11100110, 0x11100111,
+    0x11100112, 0x11100211, 0x11110010, 0x11110011, 0x11110012, 0x11110110, 0x11110111, 0x11110112,
+    0x11110210, 0x11110211, 0x11110212, 0x11120011, 0x11120110, 0x11120111, 0x11120112, 0x11120211,
+    0x12100012, 0x12100111, 0x12110011, 0x12110110, 0x12110111, 0x12110112, 0x12110211, 0x12120010,
+    0x12120111, 0x12120212, 0x10100021, 0x10100122, 0x10110022, 0x10110121, 0x10110222, 0x10120021,
+    0x10120120, 0x11100022, 0x11100121, 0x11100222, 0x11110021, 0x11110120, 0x11110121, 0x11110122,
+    0x11110221, 0x11120022, 0x11120121, 0x12100121, 0x12110020, 0x12110022, 0x12110121, 0x12110221,
+    0x12110222, 0x12120120, 0x10101100, 0x10101101, 0x10111001, 0x10111100, 0x10111101, 0x10111102,
+    0x10111200, 0x10111201, 0x10121001, 0x10121101, 0x10121200, 0x10121202, 0x11101001, 0x11101100,
+    0x11101101, 0x11101102, 0x11101201, 0x11101202, 0x11111000, 0x11111001, 0x11111100, 0x11111101,
+    0x11111102, 0x11111200, 0x11111201, 0x11111202, 0x11121001, 0x11121002, 0x11121100, 0x11121101,
+    0x11121102, 0x11121201, 0x12101000, 0x12101200, 0x12101202, 0x12111001, 0x12111100, 0x12111101,
+    0x12111102, 0x12111201, 0x12121001, 0x12121100, 0x12121101, 0x12121202, 0x10101011, 0x10101012,
+    0x10101110, 0x10101111, 0x10101112, 0x10101211, 0x10111010, 0x10111011, 0x10111012, 0x10111110,
+    0x10111111, 0x10111112, 0x10111211, 0x10111212, 0x10121011, 0x10121110, 0x10121111, 0x10121112,
+    0x10121211, 0x11101010, 0x11101011, 0x11101012, 0x11101110, 0x11101111, 0x11101112, 0x11101210,
+    0x11101211, 0x11111010, 0x11111011, 0x11111012, 0x11111110, 0x11111111, 0x11111112, 0x11111210,
+    0x11111211, 0x11111212, 0x11121010, 0x11121011, 0x11121110, 0x11121111, 0x11121112, 0x11121210,
+    0x11121211, 0x11121212, 0x12101011, 0x12101110, 0x12101111, 0x12101211, 0x12101212, 0x12111010,
+    0x12111011, 0x12111110, 0x12111111, 0x12111112, 0x12111210, 0x12111211, 0x12121011, 0x12121110,
+    0x12121111, 0x12121112, 0x12121211, 0x10101020, 0x10101021, 0x10101022, 0x10101120, 0x10101122,
+    0x10101220, 0x10101221, 0x10111021, 0x10111120, 0x10111121, 0x10111220, 0x10111221, 0x10121020,
+    0x10121021, 0x10121022, 0x10121120, 0x10121121, 0x10121122, 0x10121220, 0x10121221, 0x11101021,
+    0x11101121, 0x11101122, 0x11101220, 0x11101221, 0x11101222, 0x11111020, 0x11111021, 0x11111022,
+    0x11111120, 0x11111121, 0x11111122, 0x11111220, 0x11111221, 0x11111222, 0x11121021, 0x11121120,
+    0x11121121, 0x11121221, 0x12101022, 0x12101121, 0x12101122, 0x12101220, 0x12101221, 0x12101222,
+    0x12111021, 0x12111121, 0x12111222, 0x12121022, 0x12121121, 0x12121122, 0x12121220, 0x12121221,
+    0x10102100, 0x10102101, 0x10102102, 0x10102201, 0x10112000, 0x10112101, 0x10112200, 0x10122001,
+    0x10122202, 0x11102101, 0x11102200, 0x11102202, 0x11112001, 0x11112100, 0x11112101, 0x11112102,
+    0x11112200, 0x11112201, 0x11122000, 0x11122002, 0x11122100, 0x11122101, 0x12102002, 0x12102201,
+    0x12112000, 0x12112002, 0x12112101, 0x12112200, 0x12122001, 0x12122201, 0x10102011, 0x10102012,
+    0x10102111, 0x10102212, 0x10112011, 0x10112110, 0x10112111, 0x10112112, 0x10112211, 0x10122111,
+    0x11102011, 0x11102110, 0x11102111, 0x11102112, 0x11102211, 0x11112010, 0x11112011, 0x11112012,
+    0x11112110, 0x11112111, 0x11112112, 0x11112210, 0x11112211, 0x11112212, 0x11122011, 0x11122110,
+    0x11122111, 0x11122112, 0x11122211, 0x12102011, 0x12102111, 0x12102211, 0x12112011, 0x12112110,
+    0x12112111, 0x12112112, 0x12112210, 0x12112211, 0x12122111, 0x10102120, 0x10102220, 0x10112121,
+    0x10112222, 0x10122020, 0x10122121, 0x10122122, 0x10122221, 0x11102121, 0x11102220, 0x11102221,
+    0x11112021, 0x11112121, 0x11112122, 0x11112220, 0x11112221, 0x11122022, 0x11122121, 0x11122220,
+    0x11122222, 0x12102021, 0x12102222, 0x12112022, 0x12112121, 0x12112122, 0x12112220, 0x12112222,
+    0x12122021, 0x10200101, 0x10210100, 0x10210102, 0x10210201, 0x10220101, 0x11200100, 0x11210000,
+    0x11210101, 0x11210102, 0x11210200, 0x11210202, 0x11220001, 0x11220100, 0x11220102, 0x11220201,
+    0x12200001, 0x12210102, 0x12220101, 0x10200011, 0x10200110, 0x10200112, 0x10200211, 0x10210012,
+    0x10210111, 0x10220011, 0x10220012, 0x10220112, 0x10220211, 0x11200111, 0x11200211, 0x11210011,
+    0x11210111, 0x11210112, 0x11210211, 0x11220111, 0x11220112, 0x11220212, 0x12200110, 0x12200212,
+    0x12210012, 0x12210111, 0x12220011, 0x12220112, 0x12220211, 0x10210021, 0x10210122, 0x10210221,
+    0x11200020, 0x11200021, 0x11200122, 0x11210121, 0x11210122, 0x11210220, 0x11220020, 0x12200121,
+    0x12210021, 0x12210122, 0x12220121, 0x10211001, 0x10211002, 0x10211101, 0x10211102, 0x10211202,
+    0x10221001, 0x10221102, 0x10221201, 0x11201000, 0x11201002, 0x11201101, 0x11201200, 0x11201202,
+    0x11211001, 0x11211100, 0x11211101, 0x11211102, 0x11211201, 0x11211202, 0x11221000, 0x11221002,
+    0x11221101, 0x12201100, 0x12201101, 0x12201201, 0x12211000, 0x12211002, 0x12211100, 0x12211101,
+    0x12211102, 0x12211200, 0x12211202, 0x12221001, 0x12221100, 0x12221201, 0x10201111, 0x10201210,
+    0x10201212, 0x10211011, 0x10211111, 0x10211112, 0x10211211, 0x11201110, 0x11201111, 0x11201112,
+    0x11201211, 0x11211010, 0x11211011, 0x11211110, 0x11211111, 0x11211112, 0x11211211, 0x11221011,
+    0x11221110, 0x11221111, 0x11221112, 0x11221211, 0x12201112, 0x12201211, 0x12201212, 0x12211011,
+    0x12211111, 0x12211112, 0x12211211, 0x12211212, 0x12221012, 0x12221111, 0x12221112, 0x12221210,
+    0x10201022, 0x10201221, 0x10211121, 0x10221020, 0x10221122, 0x10221220, 0x10221221, 0x11201020,
+    0x11201121, 0x11201220, 0x11201222, 0x11211021, 0x11211120, 0x11211121, 0x11211122, 0x11211220,
+    0x11211222, 0x11221020, 0x11221121, 0x11221220, 0x12201020, 0x12201022, 0x12201121, 0x12201222,
+    0x12211120, 0x12211122, 0x12211220, 0x12211221, 0x12221020, 0x12221120, 0x12221122, 0x12221222,
+    0x10212102, 0x10212201, 0x10222101, 0x11202001, 0x11212002, 0x11212101, 0x11212202, 0x11222001,
+    0x11222201, 0x12202101, 0x12212001, 0x12212200, 0x12222102, 0x10202011, 0x10202110, 0x10212010,
+    0x10212111, 0x10222011, 0x10222110, 0x10222112, 0x10222211, 0x11202010, 0x11202011, 0x11202111,
+    0x11202112, 0x11202210, 0x11212011, 0x11212110, 0x11212111, 0x11212112, 0x11212211, 0x11222010,
+    0x11222111, 0x11222212, 0x12202012, 0x12202110, 0x12202212, 0x12212111, 0x12222011, 0x12222110,
+    0x12222111, 0x12222211, 0x10212021, 0x10212122, 0x10212220, 0x11202021, 0x11202120, 0x11202221,
+    0x11212020, 0x11212121, 0x11212220, 0x11212222, 0x11222120, 0x11222121, 0x11222221, 0x12202122,
+    0x12212120, 0x12212220, 0x12212222, 0x12222122, 0x20000000, 0x20000002, 0x20000200, 0x20000202,
+    0x20020000, 0x20020002, 0x20020200, 0x20020202, 0x21000101, 0x21010000, 0x21010001, 0x21010100,
+    0x21010102, 0x21010201, 0x21020101, 0x22000000, 0x22000002, 0x22000200, 0x22000202, 0x22010101,
+    0x22020000, 0x22020002, 0x22020200, 0x22020202, 0x20000111, 0x20010011, 0x20010110, 0x20010112,
+    0x20010211, 0x20020111, 0x21000011, 0x21000110, 0x21000211, 0x21010010, 0x21010012, 0x21010111,
+    0x21010112, 0x21010210, 0x21010211, 0x21020110, 0x21020112, 0x21020211, 0x22000111, 0x22000211,
+    0x22010110, 0x22010112, 0x22010211, 0x22020111, 0x20000020, 0x20000022, 0x20000220, 0x20000222,
+    0x20010121, 0x20020020, 0x20020022, 0x20020220, 0x20020222, 0x21010021, 0x21010120, 0x21010221,
+    0x21020121, 0x22000020, 0x22000022, 0x22000220, 0x22000222, 0x22010121, 0x22020020, 0x22020022,
+    0x22020220, 0x22020222, 0x20011100, 0x20011201, 0x21001001, 0x21001100, 0x21011001, 0x21011101,
+    0x21011202, 0x21021001, 0x21021100, 0x21021201, 0x22011100, 0x22011201, 0x20001011, 0x20001211,
+    0x20011012, 0x20011111, 0x20011212, 0x20021112, 0x20021211, 0x21001010, 0x21001011, 0x21001111,
+    0x21001210, 0x21011011, 0x21011110, 0x21011111, 0x21011112, 0x21011211, 0x21011212, 0x21021111,
+    0x21021112, 0x21021210, 0x21021212, 0x22001011, 0x22001110, 0x22001112, 0x22001211, 0x22011010,
+    0x22011012, 0x22011111, 0x22011210, 0x22021112, 0x20011021, 0x20011122, 0x20011221, 0x20021121,
+    0x21001021, 0x21001120, 0x21001221, 0x21001222, 0x21011020, 0x21011121, 0x21011221, 0x21011222,
+    0x21021021, 0x21021122, 0x21021222, 0x22001121, 0x22011021, 0x22011222, 0x22021120, 0x20002000,
+    0x20002002, 0x20002200, 0x20002202, 0x20012101, 0x20022000, 0x20022002, 0x20022200, 0x20022202,
+    0x21002001, 0x21002101, 0x21012001, 0x21012100, 0x21012201, 0x21022101, 0x21022201, 0x22002000,
+    0x22002002, 0x22002200, 0x22002202, 0x22012101, 0x22022000, 0x22022002, 0x22022200, 0x22022202,
+    0x20002111, 0x20002112, 0x20012011, 0x20012110, 0x20012112, 0x20022111, 0x21002011, 0x21002110,
+    0x21002112, 0x21002211, 0x21012010, 0x21012012, 0x21012111, 0x21012212, 0x21022011, 0x21022110,
+    0x22002111, 0x22012112, 0x22012211, 0x22022111, 0x20002020, 0x20002022, 0x20002220, 0x20002222,
+    0x20012121, 0x20022020, 0x20022022, 0x20022220, 0x20022222, 0x21002121, 0x21012021, 0x21012120,
+    0x21012122, 0x22002020, 0x22002022, 0x22002220, 0x22002222, 0x22012121, 0x22022020, 0x22022022,
+    0x22022220, 0x22022222, 0x20100101, 0x20110001, 0x20110102, 0x20110200, 0x20110201, 0x20120101,
+    0x21100001, 0x21100102, 0x21100201, 0x21110101, 0x21110200, 0x21110202, 0x21120201, 0x21120202,
+    0x22100101, 0x22110001, 0x22110100, 0x22110102, 0x22110201, 0x22120101, 0x20100011, 0x20100110,
+    0x20100112, 0x20100211, 0x20110010, 0x20110111, 0x20110210, 0x20110212, 0x20120011, 0x20120110,
+    0x20120112, 0x20120211, 0x21100010, 0x21100111, 0x21110010, 0x21110011, 0x21110110, 0x21110111,
+    0x21110112, 0x21110211, 0x21120012, 0x21120111, 0x22100110, 0x22100112, 0x22110012, 0x22110111,
+    0x22110210, 0x22120011, 0x22120110, 0x22120112, 0x22120211, 0x20100121, 0x20110021, 0x20110120,
+    0x20110221, 0x20120121, 0x21100120, 0x21100122, 0x21100221, 0x21110020, 0x21110022, 0x21110121,
+    0x21110220, 0x21120122, 0x21120221, 0x22100121, 0x22110120, 0x22110122, 0x22120221, 0x20101001,
+    0x20101100, 0x20101102, 0x20111000, 0x20111101, 0x20111200, 0x20121102, 0x21101000, 0x21101202,
+    0x21111001, 0x21111100, 0x21111101, 0x21111102, 0x21111200, 0x21111201, 0x21121000, 0x21121001,
+    0x21121002, 0x21121101, 0x22101100, 0x22101102, 0x22111002, 0x22111100, 0x22111101, 0x22111200,
+    0x22121001, 0x22121201, 0x20101010, 0x20101111, 0x20101210, 0x20101212, 0x20111010, 0x20111011,
+    0x20111110, 0x20111111, 0x20111112, 0x20111211, 0x20121011, 0x20121111, 0x20121211, 0x20121212,
+    0x21101011, 0x21101110, 0x21101111, 0x21101112, 0x21101211, 0x21111010, 0x21111011, 0x21111012,
+    0x21111110, 0x21111111, 0x21111112, 0x21111210, 0x21111211, 0x21111212, 0x21121011, 0x21121110,
+    0x21121111, 0x21121112, 0x21121211, 0x22101011, 0x22101111, 0x22101210, 0x22111011, 0x22111012,
+    0x22111110, 0x22111111, 0x22111112, 0x22111211, 0x22111212, 0x22121010, 0x22121012, 0x22121111,
+    0x22121210, 0x22121212, 0x20101021, 0x20101120, 0x20111020, 0x20111121, 0x20111221, 0x20121020,
+    0x20121122, 0x20121221, 0x21101121, 0x21101220, 0x21101221, 0x21111021, 0x21111022, 0x21111121,
+    0x21111122, 0x21111221, 0x21121121, 0x21121220, 0x22101022, 0x22101120, 0x22101221, 0x22101222,
+    0x22111022, 0x22111120, 0x22111121, 0x22121120, 0x22121122, 0x22121221, 0x20102101, 0x20112102,
+    0x20112201, 0x20122101, 0x21102001, 0x21102102, 0x21112000, 0x21112002, 0x21112101, 0x21112102,
+    0x21112202, 0x21122100, 0x21122101, 0x22102101, 0x22112001, 0x22112102, 0x22112201, 0x22122101,
+    0x20102110, 0x20102112, 0x20102211, 0x20112010, 0x20112012, 0x20112111, 0x20112210, 0x20112212,
+    0x20122010, 0x20122011, 0x20122110, 0x20122112, 0x21102010, 0x21102012, 0x21102111, 0x21102210,
+    0x21102212, 0x21112011, 0x21112110, 0x21112111, 0x21112112, 0x21112211, 0x21122012, 0x21122111,
+    0x21122112, 0x21122212, 0x22102011, 0x22102110, 0x22112010, 0x22112012, 0x22112111, 0x22112212,
+    0x22122011, 0x22122112, 0x20102121, 0x20112121, 0x20122121, 0x21102120, 0x21102122, 0x21102221,
+    0x21112020, 0x21112121, 0x21112220, 0x21122021, 0x22102121, 0x22112021, 0x22112120, 0x22112121,
+    0x22112122, 0x20200000, 0x20200002, 0x20200200, 0x20200202, 0x20210101, 0x20220000, 0x20220002,
+    0x20220200, 0x20220202, 0x21200101, 0x21210001, 0x21210100, 0x21210102, 0x21210201, 0x22200000,
+    0x22200002, 0x22200200, 0x22200202, 0x22210101, 0x22220000, 0x22220002, 0x22220200, 0x22220202,
+    0x20200111, 0x20200211, 0x20210011, 0x20210110, 0x20210112, 0x20210211, 0x20210212, 0x21200112,
+    0x21200211, 0x21210011, 0x21210111, 0x21210210, 0x21210212, 0x21220011, 0x21220110, 0x22200111,
+    0x22210010, 0x22210012, 0x22210112, 0x22210211, 0x20200022, 0x20200220, 0x20200222, 0x20210020,
+    0x20210221, 0x20220022, 0x20220220, 0x20220222, 0x21200121, 0x21210021, 0x21210122, 0x21210221,
+    0x21220121, 0x22200020, 0x22200022, 0x22200220, 0x22200222, 0x22210121, 0x22220020, 0x22220022,
+    0x22220220, 0x22220222, 0x20211201, 0x20221101, 0x21201001, 0x21201100, 0x21211000, 0x21211100,
+    0x21211101, 0x21211200, 0x21211202, 0x21221001, 0x21221101, 0x21221102, 0x21221200, 0x21221201,
+    0x22201101, 0x20201112, 0x20201211, 0x20211010, 0x20211012, 0x20211111, 0x20211210, 0x20221112,
+    0x20221211, 0x21201012, 0x21201111, 0x21211011, 0x21211110, 0x21211111, 0x21211112, 0x21211211,
+    0x21221111, 0x21221212, 0x22201011, 0x22201110, 0x22201111, 0x22201112, 0x22201211, 0x22211012,
+    0x22211111, 0x22211210, 0x20201121, 0x20211021, 0x20211122, 0x20211222, 0x20221021, 0x20221121,
+    0x21201120, 0x21201122, 0x21201222, 0x21211022, 0x21211121, 0x21211122, 0x21211220, 0x21221020,
+    0x21221022, 0x22201122, 0x22211020, 0x22211121, 0x22211122, 0x22211221, 0x22221021, 0x22221120,
+    0x22221122, 0x20202000, 0x20202002, 0x20202200, 0x20202202, 0x20222000, 0x20222002, 0x20222200,
+    0x20222202, 0x21212001, 0x21212100, 0x21212102, 0x21212201, 0x22202000, 0x22202002, 0x22202200,
+    0x22202202, 0x22212101, 0x22222000, 0x22222002, 0x22222200, 0x22222202, 0x20202111, 0x20212110,
+    0x20212211, 0x20222011, 0x20222111, 0x21202011, 0x21212010, 0x21212111, 0x21212212, 0x21222011,
+    0x21222112, 0x21222211, 0x22212010, 0x22212112, 0x20202020, 0x20202022, 0x20202220, 0x20202222,
+    0x20222020, 0x20222022, 0x20222220, 0x20222222, 0x21212021, 0x21212120, 0x21212122, 0x22202020,
+    0x22202022, 0x22202220, 0x22202222, 0x22212121, 0x22222020, 0x22222022, 0x22222220, 0x22222222,
+GGML_TABLE_END()
+#endif
+
+#endif // GGML_COMMON_IMPL
+#endif // GGML_COMMON_IMPL
diff --git a/ggml/src/ggml-cuda.cu b/ggml/src/ggml-cuda.cu
new file mode 100644 (file)
index 0000000..0acfda9
--- /dev/null
@@ -0,0 +1,3045 @@
+#include "ggml-cuda.h"
+#include "ggml.h"
+#include "ggml-backend-impl.h"
+
+#include "ggml-cuda/common.cuh"
+#include "ggml-cuda/acc.cuh"
+#include "ggml-cuda/arange.cuh"
+#include "ggml-cuda/argsort.cuh"
+#include "ggml-cuda/binbcast.cuh"
+#include "ggml-cuda/clamp.cuh"
+#include "ggml-cuda/concat.cuh"
+#include "ggml-cuda/convert.cuh"
+#include "ggml-cuda/cpy.cuh"
+#include "ggml-cuda/diagmask.cuh"
+#include "ggml-cuda/dmmv.cuh"
+#include "ggml-cuda/fattn.cuh"
+#include "ggml-cuda/getrows.cuh"
+#include "ggml-cuda/im2col.cuh"
+#include "ggml-cuda/mmq.cuh"
+#include "ggml-cuda/mmvq.cuh"
+#include "ggml-cuda/norm.cuh"
+#include "ggml-cuda/pad.cuh"
+#include "ggml-cuda/pool2d.cuh"
+#include "ggml-cuda/quantize.cuh"
+#include "ggml-cuda/rope.cuh"
+#include "ggml-cuda/scale.cuh"
+#include "ggml-cuda/softmax.cuh"
+#include "ggml-cuda/sumrows.cuh"
+#include "ggml-cuda/tsembd.cuh"
+#include "ggml-cuda/unary.cuh"
+#include "ggml-cuda/upscale.cuh"
+
+#include <algorithm>
+#include <array>
+#include <atomic>
+#include <cinttypes>
+#include <cstddef>
+#include <cstdint>
+#include <float.h>
+#include <limits>
+#include <map>
+#include <memory>
+#include <mutex>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string>
+#include <vector>
+
+static_assert(sizeof(half) == sizeof(ggml_fp16_t), "wrong fp16 size");
+
+static void ggml_cuda_default_log_callback(enum ggml_log_level level, const char * msg, void * user_data) {
+    GGML_UNUSED(level);
+    GGML_UNUSED(user_data);
+    fprintf(stderr, "%s", msg);
+}
+
+ggml_log_callback ggml_cuda_log_callback = ggml_cuda_default_log_callback;
+void * ggml_cuda_log_user_data = NULL;
+
+GGML_API void ggml_backend_cuda_log_set_callback(ggml_log_callback log_callback, void * user_data) {
+    ggml_cuda_log_callback = log_callback;
+    ggml_cuda_log_user_data = user_data;
+}
+
+#define GGML_CUDA_LOG_INFO(...) ggml_cuda_log(GGML_LOG_LEVEL_INFO, __VA_ARGS__)
+#define GGML_CUDA_LOG_WARN(...) ggml_cuda_log(GGML_LOG_LEVEL_WARN, __VA_ARGS__)
+#define GGML_CUDA_LOG_ERROR(...) ggml_cuda_log(GGML_LOG_LEVEL_ERROR, __VA_ARGS__)
+
+GGML_ATTRIBUTE_FORMAT(2, 3)
+static void ggml_cuda_log(enum ggml_log_level level, const char * format, ...) {
+    if (ggml_cuda_log_callback != NULL) {
+        va_list args;
+        va_start(args, format);
+        char buffer[128];
+        int len = vsnprintf(buffer, 128, format, args);
+        if (len < 128) {
+            ggml_cuda_log_callback(level, buffer, ggml_cuda_log_user_data);
+        } else {
+            std::vector<char> buffer2(len + 1);  // vsnprintf adds a null terminator
+            va_end(args);
+            va_start(args, format);
+            vsnprintf(&buffer2[0], buffer2.size(), format, args);
+            ggml_cuda_log_callback(level, buffer2.data(), ggml_cuda_log_user_data);
+        }
+        va_end(args);
+    }
+}
+
+[[noreturn]]
+void ggml_cuda_error(const char * stmt, const char * func, const char * file, int line, const char * msg) {
+    int id = -1; // in case cudaGetDevice fails
+    cudaGetDevice(&id);
+
+    GGML_CUDA_LOG_ERROR("CUDA error: %s\n", msg);
+    GGML_CUDA_LOG_ERROR("  current device: %d, in function %s at %s:%d\n", id, func, file, line);
+    GGML_CUDA_LOG_ERROR("  %s\n", stmt);
+    // abort with GGML_ASSERT to get a stack trace
+    GGML_ASSERT(!"CUDA error");
+}
+
+// this is faster on Windows
+// probably because the Windows CUDA libraries forget to make this check before invoking the drivers
+void ggml_cuda_set_device(int device) {
+    int current_device;
+    CUDA_CHECK(cudaGetDevice(&current_device));
+
+    if (device == current_device) {
+        return;
+    }
+
+    CUDA_CHECK(cudaSetDevice(device));
+}
+
+int ggml_cuda_get_device() {
+    int id;
+    CUDA_CHECK(cudaGetDevice(&id));
+    return id;
+}
+
+static cudaError_t ggml_cuda_device_malloc(void ** ptr, size_t size, int device) {
+    ggml_cuda_set_device(device);
+#if defined(GGML_USE_HIPBLAS) && defined(GGML_HIP_UMA)
+    auto res = hipMallocManaged(ptr, size);
+    if (res == hipSuccess) {
+        // if error we "need" to know why...
+        CUDA_CHECK(hipMemAdvise(*ptr, size, hipMemAdviseSetCoarseGrain, device));
+    }
+    return res;
+#else
+    return cudaMalloc(ptr, size);
+#endif
+}
+
+static ggml_cuda_device_info ggml_cuda_init() {
+#ifdef __HIP_PLATFORM_AMD__
+    // Workaround for a rocBLAS bug when using multiple graphics cards:
+    // https://github.com/ROCmSoftwarePlatform/rocBLAS/issues/1346
+    rocblas_initialize();
+    CUDA_CHECK(cudaDeviceSynchronize());
+#endif
+
+    ggml_cuda_device_info info = {};
+
+    cudaError_t err = cudaGetDeviceCount(&info.device_count);
+    if (err != cudaSuccess) {
+        GGML_CUDA_LOG_ERROR("%s: failed to initialize " GGML_CUDA_NAME ": %s\n", __func__, cudaGetErrorString(err));
+        return info;
+    }
+
+    GGML_ASSERT(info.device_count <= GGML_CUDA_MAX_DEVICES);
+
+    int64_t total_vram = 0;
+#ifdef GGML_CUDA_FORCE_MMQ
+    GGML_CUDA_LOG_INFO("%s: GGML_CUDA_FORCE_MMQ:    yes\n", __func__);
+#else
+    GGML_CUDA_LOG_INFO("%s: GGML_CUDA_FORCE_MMQ:    no\n", __func__);
+#endif // GGML_CUDA_FORCE_MMQ
+#ifdef GGML_CUDA_FORCE_CUBLAS
+    GGML_CUDA_LOG_INFO("%s: GGML_CUDA_FORCE_CUBLAS: yes\n", __func__);
+#else
+    GGML_CUDA_LOG_INFO("%s: GGML_CUDA_FORCE_CUBLAS: no\n", __func__);
+#endif // GGML_CUDA_FORCE_CUBLAS
+    GGML_CUDA_LOG_INFO("%s: found %d " GGML_CUDA_NAME " devices:\n", __func__, info.device_count);
+    for (int id = 0; id < info.device_count; ++id) {
+        int device_vmm = 0;
+
+#if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM)
+        CUdevice device;
+        CU_CHECK(cuDeviceGet(&device, id));
+        CU_CHECK(cuDeviceGetAttribute(&device_vmm, CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED, device));
+
+        if (device_vmm) {
+            CUmemAllocationProp alloc_prop = {};
+            alloc_prop.type = CU_MEM_ALLOCATION_TYPE_PINNED;
+            alloc_prop.location.type = CU_MEM_LOCATION_TYPE_DEVICE;
+            alloc_prop.location.id = id;
+            CU_CHECK(cuMemGetAllocationGranularity(&info.devices[id].vmm_granularity, &alloc_prop, CU_MEM_ALLOC_GRANULARITY_RECOMMENDED));
+        }
+#endif // !defined(GGML_USE_HIPBLAS)
+        info.devices[id].vmm = !!device_vmm;
+
+        cudaDeviceProp prop;
+        CUDA_CHECK(cudaGetDeviceProperties(&prop, id));
+        GGML_CUDA_LOG_INFO("  Device %d: %s, compute capability %d.%d, VMM: %s\n", id, prop.name, prop.major, prop.minor, device_vmm ? "yes" : "no");
+
+        info.default_tensor_split[id] = total_vram;
+        total_vram += prop.totalGlobalMem;
+
+        info.devices[id].nsm   = prop.multiProcessorCount;
+        info.devices[id].smpb  = prop.sharedMemPerBlock;
+#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+        info.devices[id].smpbo = prop.sharedMemPerBlock;
+        info.devices[id].cc = 100*prop.major + 10*prop.minor + CC_OFFSET_AMD;
+#else
+        info.devices[id].smpbo = prop.sharedMemPerBlockOptin;
+        info.devices[id].cc = 100*prop.major + 10*prop.minor;
+#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+    }
+
+    for (int id = 0; id < info.device_count; ++id) {
+        info.default_tensor_split[id] /= total_vram;
+    }
+
+    // configure logging to stdout
+    // CUBLAS_CHECK(cublasLoggerConfigure(1, 1, 0, nullptr));
+
+    return info;
+}
+
+const ggml_cuda_device_info & ggml_cuda_info() {
+    static ggml_cuda_device_info info = ggml_cuda_init();
+    return info;
+}
+
+// #define DEBUG_CUDA_MALLOC
+
+// buffer pool for cuda (legacy)
+struct ggml_cuda_pool_leg : public ggml_cuda_pool {
+    static const int MAX_BUFFERS = 256;
+
+    int device;
+    struct ggml_cuda_buffer {
+        void * ptr = nullptr;
+        size_t size = 0;
+    };
+
+    ggml_cuda_buffer buffer_pool[MAX_BUFFERS] = {};
+    size_t pool_size = 0;
+
+    explicit ggml_cuda_pool_leg(int device) :
+        device(device) {
+    }
+
+    ~ggml_cuda_pool_leg() {
+        ggml_cuda_set_device(device);
+        for (int i = 0; i < MAX_BUFFERS; ++i) {
+            ggml_cuda_buffer & b = buffer_pool[i];
+            if (b.ptr != nullptr) {
+                CUDA_CHECK(cudaFree(b.ptr));
+                pool_size -= b.size;
+            }
+        }
+        GGML_ASSERT(pool_size == 0);
+    }
+
+    void * alloc(size_t size, size_t * actual_size) override {
+#ifdef DEBUG_CUDA_MALLOC
+        int nnz = 0;
+        size_t max_size = 0;
+#endif
+        size_t best_diff = 1ull << 36;
+        int ibest = -1;
+        for (int i = 0; i < MAX_BUFFERS; ++i) {
+            ggml_cuda_buffer& b = buffer_pool[i];
+            if (b.ptr != nullptr) {
+#ifdef DEBUG_CUDA_MALLOC
+                ++nnz;
+                if (b.size > max_size) max_size = b.size;
+#endif
+                if (b.size >= size) {
+                    size_t diff = b.size - size;
+                    if (diff < best_diff) {
+                        best_diff = diff;
+                        ibest = i;
+                        if (!best_diff) {
+                            void * ptr = b.ptr;
+                            *actual_size = b.size;
+                            b.ptr = nullptr;
+                            b.size = 0;
+                            return ptr;
+                        }
+                    }
+                }
+            }
+        }
+        if (ibest >= 0) {
+            ggml_cuda_buffer& b = buffer_pool[ibest];
+            void * ptr = b.ptr;
+            *actual_size = b.size;
+            b.ptr = nullptr;
+            b.size = 0;
+            return ptr;
+        }
+        void * ptr;
+        size_t look_ahead_size = (size_t) (1.05 * size);
+        look_ahead_size = 256 * ((look_ahead_size + 255)/256);
+        ggml_cuda_set_device(device);
+        CUDA_CHECK(ggml_cuda_device_malloc(&ptr, look_ahead_size, device));
+        *actual_size = look_ahead_size;
+        pool_size += look_ahead_size;
+#ifdef DEBUG_CUDA_MALLOC
+        GGML_CUDA_LOG_INFO("%s[%d]: %d buffers, max_size = %u MB, pool_size = %u MB, requested %u MB\n", __func__, device, nnz,
+                           (uint32_t)(max_size / 1024 / 1024), (uint32_t)(pool_size / 1024 / 1024), (uint32_t)(size / 1024 / 1024));
+#endif
+        return ptr;
+    }
+
+    void free(void * ptr, size_t size) override {
+        for (int i = 0; i < MAX_BUFFERS; ++i) {
+            ggml_cuda_buffer& b = buffer_pool[i];
+            if (b.ptr == nullptr) {
+                b.ptr = ptr;
+                b.size = size;
+                return;
+            }
+        }
+        GGML_CUDA_LOG_WARN("Cuda buffer pool full, increase MAX_CUDA_BUFFERS\n");
+        ggml_cuda_set_device(device);
+        CUDA_CHECK(cudaFree(ptr));
+        pool_size -= size;
+    }
+};
+
+// pool with virtual memory
+#if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM)
+struct ggml_cuda_pool_vmm : public ggml_cuda_pool {
+    static const size_t CUDA_POOL_VMM_MAX_SIZE = 1ull << 35; // 32 GB
+
+    int device;
+    CUdeviceptr pool_addr = 0;
+    size_t pool_used = 0;
+    size_t pool_size = 0;
+    size_t granularity;
+
+    explicit ggml_cuda_pool_vmm(int device) :
+        device(device),
+        granularity(ggml_cuda_info().devices[device].vmm_granularity) {
+    }
+
+    ~ggml_cuda_pool_vmm() {
+        if (pool_addr != 0) {
+            CU_CHECK(cuMemUnmap(pool_addr, pool_size));
+            CU_CHECK(cuMemAddressFree(pool_addr, CUDA_POOL_VMM_MAX_SIZE));
+        }
+    }
+
+    void * alloc(size_t size, size_t * actual_size) override {
+        // round up the allocation size to the alignment to ensure that all allocations are aligned for all data types
+        const size_t alignment = 128;
+        size = alignment * ((size + alignment - 1) / alignment);
+
+        size_t avail = pool_size - pool_used;
+
+        if (size > avail) {
+            // round up to the next multiple of the granularity
+            size_t reserve_size = size - avail;
+            reserve_size = granularity * ((reserve_size + granularity - 1) / granularity);
+
+            GGML_ASSERT(pool_size + reserve_size <= CUDA_POOL_VMM_MAX_SIZE);
+
+            // allocate more physical memory
+            CUmemAllocationProp prop = {};
+            prop.type = CU_MEM_ALLOCATION_TYPE_PINNED;
+            prop.location.type = CU_MEM_LOCATION_TYPE_DEVICE;
+            prop.location.id = device;
+            CUmemGenericAllocationHandle handle;
+            CU_CHECK(cuMemCreate(&handle, reserve_size, &prop, 0));
+
+            // reserve virtual address space (if not already reserved)
+            if (pool_addr == 0) {
+                CU_CHECK(cuMemAddressReserve(&pool_addr, CUDA_POOL_VMM_MAX_SIZE, 0, 0, 0));
+            }
+
+            // map at the end of the pool
+            CU_CHECK(cuMemMap(pool_addr + pool_size, reserve_size, 0, handle, 0));
+
+            // the memory allocation handle is no longer needed after mapping
+            CU_CHECK(cuMemRelease(handle));
+
+            // set access
+            CUmemAccessDesc access = {};
+            access.location.type = CU_MEM_LOCATION_TYPE_DEVICE;
+            access.location.id = device;
+            access.flags = CU_MEM_ACCESS_FLAGS_PROT_READWRITE;
+            CU_CHECK(cuMemSetAccess(pool_addr + pool_size, reserve_size, &access, 1));
+
+            // add to the pool
+            pool_size += reserve_size;
+
+            //printf("cuda pool[%d]: size increased to %llu MB (reserved %llu MB)\n",
+            //       device, (unsigned long long) (pool_size/1024/1024),
+            //       (unsigned long long) (reserve_size/1024/1024));
+        }
+
+        GGML_ASSERT(pool_addr != 0);
+
+        void * ptr = (void *) (pool_addr + pool_used);
+        *actual_size = size;
+        pool_used += size;
+
+#ifdef DEBUG_CUDA_MALLOC
+        printf("cuda pool[%d]: allocated %llu bytes at %llx\n", device, (unsigned long long) size, ptr);
+#endif
+
+        return ptr;
+    }
+
+    void free(void * ptr, size_t size) override {
+#ifdef DEBUG_CUDA_MALLOC
+        printf("cuda pool[%d]: freed %llu bytes at %llx\n", device, (unsigned long long) size, ptr);
+#endif
+
+        pool_used -= size;
+
+        // all deallocations must be in reverse order of the allocations
+        GGML_ASSERT(ptr == (void *) (pool_addr + pool_used));
+    }
+};
+#endif // !defined(GGML_USE_HIPBLAS)
+
+std::unique_ptr<ggml_cuda_pool> ggml_backend_cuda_context::new_pool_for_device(int device) {
+#if !defined(GGML_USE_HIPBLAS) && !defined(GGML_CUDA_NO_VMM)
+    if (ggml_cuda_info().devices[device].vmm) {
+        return std::unique_ptr<ggml_cuda_pool>(new ggml_cuda_pool_vmm(device));
+    }
+#endif
+    return std::unique_ptr<ggml_cuda_pool>(new ggml_cuda_pool_leg(device));
+}
+
+// cuda buffer
+
+struct ggml_backend_cuda_buffer_context {
+    int device;
+    void * dev_ptr = nullptr;
+    std::string name;
+
+    ggml_backend_cuda_buffer_context(int device, void * dev_ptr) :
+        device(device), dev_ptr(dev_ptr),
+        name(GGML_CUDA_NAME + std::to_string(device)) {
+    }
+
+    ~ggml_backend_cuda_buffer_context() {
+        CUDA_CHECK(cudaFree(dev_ptr));
+    }
+};
+
+GGML_CALL static const char * ggml_backend_cuda_buffer_get_name(ggml_backend_buffer_t buffer) {
+    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
+    return ctx->name.c_str();
+}
+
+GGML_CALL static bool ggml_backend_buffer_is_cuda(ggml_backend_buffer_t buffer) {
+    return buffer->iface.get_name == ggml_backend_cuda_buffer_get_name;
+}
+
+GGML_CALL static void ggml_backend_cuda_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
+    delete ctx;
+}
+
+GGML_CALL static void * ggml_backend_cuda_buffer_get_base(ggml_backend_buffer_t buffer) {
+    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
+    return ctx->dev_ptr;
+}
+
+GGML_CALL static void ggml_backend_cuda_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
+    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
+
+    if (tensor->view_src != NULL) {
+        assert(tensor->view_src->buffer->buft == buffer->buft);
+        return;
+    }
+
+    if (ggml_is_quantized(tensor->type)) {
+        // initialize padding to 0 to avoid possible NaN values
+        size_t original_size = ggml_nbytes(tensor);
+        size_t padded_size = ggml_backend_buft_get_alloc_size(buffer->buft, tensor);
+
+        if (padded_size > original_size && tensor->view_src == nullptr) {
+            ggml_cuda_set_device(ctx->device);
+            CUDA_CHECK(cudaMemset((char *)tensor->data + original_size, 0, padded_size - original_size));
+        }
+    }
+}
+
+GGML_CALL static void ggml_backend_cuda_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
+
+    ggml_cuda_set_device(ctx->device);
+    CUDA_CHECK(cudaMemcpyAsync((char *)tensor->data + offset, data, size, cudaMemcpyHostToDevice, cudaStreamPerThread));
+    CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread));
+}
+
+GGML_CALL static void ggml_backend_cuda_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
+
+    ggml_cuda_set_device(ctx->device);
+    CUDA_CHECK(cudaMemcpyAsync(data, (const char *)tensor->data + offset, size, cudaMemcpyDeviceToHost, cudaStreamPerThread));
+    CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread));
+}
+
+GGML_CALL static bool ggml_backend_cuda_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * src, ggml_tensor * dst) {
+    if (ggml_backend_buffer_is_cuda(src->buffer)) {
+        ggml_backend_cuda_buffer_context * src_ctx = (ggml_backend_cuda_buffer_context *)src->buffer->context;
+        ggml_backend_cuda_buffer_context * dst_ctx = (ggml_backend_cuda_buffer_context *)dst->buffer->context;
+        if (src_ctx->device == dst_ctx->device) {
+            CUDA_CHECK(cudaMemcpyAsync(dst->data, src->data, ggml_nbytes(src), cudaMemcpyDeviceToDevice, cudaStreamPerThread));
+        } else {
+#ifdef GGML_CUDA_NO_PEER_COPY
+            return false;
+#else
+            CUDA_CHECK(cudaMemcpyPeerAsync(dst->data, dst_ctx->device, src->data, src_ctx->device, ggml_nbytes(src), cudaStreamPerThread));
+#endif
+        }
+        CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread));
+        return true;
+    }
+    return false;
+
+    GGML_UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_cuda_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
+    ggml_backend_cuda_buffer_context * ctx = (ggml_backend_cuda_buffer_context *)buffer->context;
+
+    ggml_cuda_set_device(ctx->device);
+    CUDA_CHECK(cudaDeviceSynchronize());
+    CUDA_CHECK(cudaMemset(ctx->dev_ptr, value, buffer->size));
+    CUDA_CHECK(cudaDeviceSynchronize());
+}
+
+static ggml_backend_buffer_i ggml_backend_cuda_buffer_interface = {
+    /* .get_name        = */ ggml_backend_cuda_buffer_get_name,
+    /* .free_buffer     = */ ggml_backend_cuda_buffer_free_buffer,
+    /* .get_base        = */ ggml_backend_cuda_buffer_get_base,
+    /* .init_tensor     = */ ggml_backend_cuda_buffer_init_tensor,
+    /* .set_tensor      = */ ggml_backend_cuda_buffer_set_tensor,
+    /* .get_tensor      = */ ggml_backend_cuda_buffer_get_tensor,
+    /* .cpy_tensor      = */ ggml_backend_cuda_buffer_cpy_tensor,
+    /* .clear           = */ ggml_backend_cuda_buffer_clear,
+    /* .reset           = */ NULL,
+};
+
+// cuda buffer type
+struct ggml_backend_cuda_buffer_type_context {
+    int device;
+    std::string name;
+};
+
+GGML_CALL static const char * ggml_backend_cuda_buffer_type_name(ggml_backend_buffer_type_t buft) {
+    ggml_backend_cuda_buffer_type_context * ctx = (ggml_backend_cuda_buffer_type_context *)buft->context;
+
+    return ctx->name.c_str();
+}
+
+static bool ggml_backend_buft_is_cuda(ggml_backend_buffer_type_t buft) {
+    return buft->iface.get_name == ggml_backend_cuda_buffer_type_name;
+}
+
+GGML_CALL static ggml_backend_buffer_t ggml_backend_cuda_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    ggml_backend_cuda_buffer_type_context * buft_ctx = (ggml_backend_cuda_buffer_type_context *)buft->context;
+
+    ggml_cuda_set_device(buft_ctx->device);
+
+    size = std::max(size, (size_t)1); // cudaMalloc returns null for size 0
+
+    void * dev_ptr;
+    cudaError_t err = ggml_cuda_device_malloc(&dev_ptr, size, buft_ctx->device);
+    if (err != cudaSuccess) {
+        // clear the error
+        cudaGetLastError();
+        GGML_CUDA_LOG_ERROR("%s: allocating %.2f MiB on device %d: cudaMalloc failed: %s\n", __func__, size / 1024.0 / 1024.0, buft_ctx->device, cudaGetErrorString(err));
+        return nullptr;
+    }
+
+    ggml_backend_cuda_buffer_context * ctx = new ggml_backend_cuda_buffer_context(buft_ctx->device, dev_ptr);
+
+    return ggml_backend_buffer_init(buft, ggml_backend_cuda_buffer_interface, ctx, size);
+}
+
+GGML_CALL static size_t ggml_backend_cuda_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
+    return 128;
+
+    GGML_UNUSED(buft);
+}
+
+GGML_CALL static size_t ggml_backend_cuda_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
+    size_t size = ggml_nbytes(tensor);
+    int64_t ne0 = tensor->ne[0];
+
+    if (ggml_is_quantized(tensor->type)) {
+        if (ne0 % MATRIX_ROW_PADDING != 0) {
+            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
+        }
+    }
+
+    return size;
+
+    GGML_UNUSED(buft);
+}
+
+static ggml_backend_buffer_type_i ggml_backend_cuda_buffer_type_interface = {
+    /* .get_name         = */ ggml_backend_cuda_buffer_type_name,
+    /* .alloc_buffer     = */ ggml_backend_cuda_buffer_type_alloc_buffer,
+    /* .get_alignment    = */ ggml_backend_cuda_buffer_type_get_alignment,
+    /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
+    /* .get_alloc_size   = */ ggml_backend_cuda_buffer_type_get_alloc_size,
+    /* .is_host          = */ NULL,
+};
+
+GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_buffer_type(int device) {
+    static std::mutex mutex;
+    std::lock_guard<std::mutex> lock(mutex);
+
+    if (device >= ggml_backend_cuda_get_device_count()) {
+        return nullptr;
+    }
+
+    static ggml_backend_buffer_type ggml_backend_cuda_buffer_types[GGML_CUDA_MAX_DEVICES];
+
+    static bool ggml_backend_cuda_buffer_type_initialized = false;
+
+    if (!ggml_backend_cuda_buffer_type_initialized) {
+        for (int i = 0; i < GGML_CUDA_MAX_DEVICES; i++) {
+            ggml_backend_cuda_buffer_types[i] = {
+                /* .iface    = */ ggml_backend_cuda_buffer_type_interface,
+                /* .context  = */ new ggml_backend_cuda_buffer_type_context{i, GGML_CUDA_NAME + std::to_string(i)},
+            };
+        }
+        ggml_backend_cuda_buffer_type_initialized = true;
+    }
+
+    return &ggml_backend_cuda_buffer_types[device];
+}
+
+// cuda split buffer
+
+static int64_t get_row_rounding(const std::array<float, GGML_CUDA_MAX_DEVICES> & tensor_split) {
+    int64_t row_rounding = 0;
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        if (tensor_split[id] >= (id + 1 < ggml_backend_cuda_get_device_count() ? tensor_split[id + 1] : 1.0f)) {
+            continue;
+        }
+
+        const int cc = ggml_cuda_info().devices[id].cc;
+        row_rounding = std::max(row_rounding, (int64_t)get_mmq_y_host(cc));
+    }
+    return row_rounding;
+}
+
+static void get_row_split(int64_t * row_low, int64_t * row_high, const ggml_tensor * tensor, const std::array<float, GGML_CUDA_MAX_DEVICES> & tensor_split, int id) {
+    const int64_t nrows = ggml_nrows(tensor);
+    const int64_t rounding = get_row_rounding(tensor_split);
+
+    *row_low = id == 0 ? 0 : nrows*tensor_split[id];
+    *row_low -= *row_low % rounding;
+
+    if (id == ggml_backend_cuda_get_device_count() - 1) {
+        *row_high = nrows;
+    } else {
+        *row_high = nrows*tensor_split[id + 1];
+        *row_high -= *row_high % rounding;
+    }
+}
+
+static size_t ggml_nbytes_split(const struct ggml_tensor * tensor, int nrows_split) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return nrows_split*ggml_row_size(tensor->type, tensor->ne[0]);
+}
+
+struct ggml_backend_cuda_split_buffer_type_context {
+    std::array<float, GGML_CUDA_MAX_DEVICES> tensor_split;
+};
+
+struct ggml_backend_cuda_split_buffer_context {
+    ~ggml_backend_cuda_split_buffer_context() {
+        for (ggml_tensor_extra_gpu * extra : tensor_extras) {
+            for (int id = 0; id < GGML_CUDA_MAX_DEVICES; ++id) {
+                for (int64_t is = 0; is < GGML_CUDA_MAX_STREAMS; ++is) {
+                    if (extra->events[id][is] != nullptr) {
+                        CUDA_CHECK(cudaEventDestroy(extra->events[id][is]));
+                    }
+                }
+                if (extra->data_device[id] != nullptr) {
+                    CUDA_CHECK(cudaFree(extra->data_device[id]));
+                }
+            }
+            delete extra;
+        }
+    }
+
+    std::vector<ggml_tensor_extra_gpu *> tensor_extras;
+};
+
+GGML_CALL static const char * ggml_backend_cuda_split_buffer_get_name(ggml_backend_buffer_t buffer) {
+    return GGML_CUDA_NAME "_Split";
+
+    GGML_UNUSED(buffer);
+}
+
+static bool ggml_backend_buffer_is_cuda_split(ggml_backend_buffer_t buffer) {
+    return buffer->iface.get_name == ggml_backend_cuda_split_buffer_get_name;
+    GGML_UNUSED(ggml_backend_buffer_is_cuda_split); // only used in debug builds currently, avoid unused function warning in release builds
+}
+
+GGML_CALL static void ggml_backend_cuda_split_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    ggml_backend_cuda_split_buffer_context * ctx = (ggml_backend_cuda_split_buffer_context *)buffer->context;
+    delete ctx;
+}
+
+GGML_CALL static void * ggml_backend_cuda_split_buffer_get_base(ggml_backend_buffer_t buffer) {
+    // the pointers are stored in the tensor extras, this is just a dummy address and never dereferenced
+    return (void *)0x1000;
+
+    GGML_UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_cuda_split_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
+    GGML_ASSERT(tensor->view_src == nullptr); // views of split tensors are not supported
+
+    ggml_backend_cuda_split_buffer_context * ctx = (ggml_backend_cuda_split_buffer_context *)buffer->context;
+    ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *)buffer->buft->context;
+
+    const int64_t ne0 = tensor->ne[0];
+
+    ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu{};
+    ctx->tensor_extras.push_back(extra);
+
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        int64_t row_low, row_high;
+        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, id);
+
+        int64_t nrows_split = row_high - row_low;
+        if (nrows_split == 0) {
+            continue;
+        }
+
+        size_t size = ggml_nbytes_split(tensor, nrows_split);
+        const size_t original_size = size;
+
+        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
+        if (ne0 % MATRIX_ROW_PADDING != 0) {
+            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
+        }
+
+        // FIXME: do not crash if cudaMalloc fails
+        // currently, init_tensor cannot fail, it needs to be fixed in ggml-backend first
+        ggml_cuda_set_device(id);
+        char * buf;
+        CUDA_CHECK(ggml_cuda_device_malloc((void**)&buf, size, id));
+
+        // set padding to 0 to avoid possible NaN values
+        if (size > original_size) {
+            CUDA_CHECK(cudaMemset(buf + original_size, 0, size - original_size));
+        }
+
+        extra->data_device[id] = buf;
+
+        for (int64_t is = 0; is < GGML_CUDA_MAX_STREAMS; ++is) {
+            CUDA_CHECK(cudaEventCreateWithFlags(&extra->events[id][is], cudaEventDisableTiming));
+        }
+    }
+    tensor->extra = extra;
+}
+
+GGML_CALL static void ggml_backend_cuda_split_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    // split tensors must always be set in their entirety at once
+    GGML_ASSERT(offset == 0);
+    GGML_ASSERT(size == ggml_nbytes(tensor));
+
+    ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *)buffer->buft->context;
+
+    const int64_t ne0 = tensor->ne[0];
+    const size_t nb1 = tensor->nb[1];
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra;
+
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        int64_t row_low, row_high;
+        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, id);
+
+        int64_t nrows_split = row_high - row_low;
+        if (nrows_split == 0) {
+            continue;
+        }
+
+        const size_t offset_split = row_low*nb1;
+        size_t size = ggml_nbytes_split(tensor, nrows_split);
+        const size_t original_size = size;
+
+        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
+        if (ne0 % MATRIX_ROW_PADDING != 0) {
+            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
+        }
+
+        const char * buf_host = (const char *)data + offset_split;
+        CUDA_CHECK(cudaMemcpyAsync(extra->data_device[id], buf_host, original_size, cudaMemcpyHostToDevice, cudaStreamPerThread));
+    }
+
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread));
+    }
+}
+
+GGML_CALL static void ggml_backend_cuda_split_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    // split tensors must always be set in their entirety at once
+    GGML_ASSERT(offset == 0);
+    GGML_ASSERT(size == ggml_nbytes(tensor));
+
+    ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *)buffer->buft->context;
+
+    const int64_t ne0 = tensor->ne[0];
+    const size_t nb1 = tensor->nb[1];
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra;
+
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        int64_t row_low, row_high;
+        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, id);
+
+        int64_t nrows_split = row_high - row_low;
+        if (nrows_split == 0) {
+            continue;
+        }
+
+        const size_t offset_split = row_low*nb1;
+        size_t size = ggml_nbytes_split(tensor, nrows_split);
+        const size_t original_size = size;
+
+        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
+        if (ne0 % MATRIX_ROW_PADDING != 0) {
+            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
+        }
+
+        char * buf_host = (char *)data + offset_split;
+        CUDA_CHECK(cudaMemcpyAsync(buf_host, extra->data_device[id], original_size, cudaMemcpyDeviceToHost, cudaStreamPerThread));
+    }
+
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        CUDA_CHECK(cudaStreamSynchronize(cudaStreamPerThread));
+    }
+}
+
+GGML_CALL static void ggml_backend_cuda_split_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
+    GGML_UNUSED(buffer);
+    GGML_UNUSED(value);
+}
+
+static struct ggml_backend_buffer_i ggml_backend_cuda_split_buffer_interface = {
+    /* .get_name        = */ ggml_backend_cuda_split_buffer_get_name,
+    /* .free_buffer     = */ ggml_backend_cuda_split_buffer_free_buffer,
+    /* .get_base        = */ ggml_backend_cuda_split_buffer_get_base,
+    /* .init_tensor     = */ ggml_backend_cuda_split_buffer_init_tensor,
+    /* .set_tensor      = */ ggml_backend_cuda_split_buffer_set_tensor,
+    /* .get_tensor      = */ ggml_backend_cuda_split_buffer_get_tensor,
+    /* .cpy_tensor      = */ NULL,
+    /* .clear           = */ ggml_backend_cuda_split_buffer_clear,
+    /* .reset           = */ NULL,
+};
+
+// cuda split buffer type
+
+GGML_CALL static const char * ggml_backend_cuda_split_buffer_type_name(ggml_backend_buffer_type_t buft) {
+    return GGML_CUDA_NAME "_Split";
+
+    GGML_UNUSED(buft);
+}
+
+static bool ggml_backend_buft_is_cuda_split(ggml_backend_buffer_type_t buft) {
+    return buft->iface.get_name == ggml_backend_cuda_split_buffer_type_name;
+}
+
+GGML_CALL static ggml_backend_buffer_t ggml_backend_cuda_split_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    // since we don't know the exact split after rounding, we cannot allocate the device buffers at this point
+    // instead, we allocate them for each tensor separately in init_tensor
+    // however, the size still represents the maximum cumulative size of all the device buffers after the tensors are allocated,
+    // as returned by get_alloc_size. this limit is enforced during tensor allocation by ggml-alloc, so it must be correct.
+    ggml_backend_cuda_split_buffer_context * ctx = new ggml_backend_cuda_split_buffer_context();
+
+    return ggml_backend_buffer_init(buft, ggml_backend_cuda_split_buffer_interface, ctx, size);
+}
+
+GGML_CALL static size_t ggml_backend_cuda_split_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
+    return 128;
+
+    GGML_UNUSED(buft);
+}
+
+GGML_CALL static size_t ggml_backend_cuda_split_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
+    ggml_backend_cuda_split_buffer_type_context * ctx = (ggml_backend_cuda_split_buffer_type_context *)buft->context;
+
+    size_t total_size = 0;
+
+    const int64_t ne0 = tensor->ne[0];
+
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        int64_t row_low, row_high;
+        get_row_split(&row_low, &row_high, tensor, ctx->tensor_split, id);
+
+        int64_t nrows_split = row_high - row_low;
+        if (nrows_split == 0) {
+            continue;
+        }
+
+        total_size += ggml_nbytes_split(tensor, nrows_split);
+
+        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
+        if (ne0 % MATRIX_ROW_PADDING != 0) {
+            total_size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
+        }
+    }
+
+    return total_size;
+}
+
+GGML_CALL static bool ggml_backend_cuda_split_buffer_type_is_host(ggml_backend_buffer_type_t buft) {
+    return false;
+
+    GGML_UNUSED(buft);
+}
+
+static ggml_backend_buffer_type_i ggml_backend_cuda_split_buffer_type_interface = {
+    /* .get_name         = */ ggml_backend_cuda_split_buffer_type_name,
+    /* .alloc_buffer     = */ ggml_backend_cuda_split_buffer_type_alloc_buffer,
+    /* .get_alignment    = */ ggml_backend_cuda_split_buffer_type_get_alignment,
+    /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
+    /* .get_alloc_size   = */ ggml_backend_cuda_split_buffer_type_get_alloc_size,
+    /* .is_host          = */ ggml_backend_cuda_split_buffer_type_is_host,
+};
+
+GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_split_buffer_type(const float * tensor_split) {
+    static std::mutex mutex;
+    std::lock_guard<std::mutex> lock(mutex);
+
+    static std::map<std::array<float, GGML_CUDA_MAX_DEVICES>, struct ggml_backend_buffer_type> buft_map;
+
+    std::array<float, GGML_CUDA_MAX_DEVICES> tensor_split_arr = {};
+
+    bool all_zero = tensor_split == nullptr || std::all_of(tensor_split, tensor_split + GGML_CUDA_MAX_DEVICES, [](float x) { return x == 0.0f; });
+    if (all_zero) {
+        tensor_split_arr = ggml_cuda_info().default_tensor_split;
+    } else {
+        float split_sum = 0.0f;
+        for (int i = 0; i < ggml_backend_cuda_get_device_count(); ++i) {
+            tensor_split_arr[i] = split_sum;
+            split_sum += tensor_split[i];
+        }
+        for (int i = 0; i < ggml_backend_cuda_get_device_count(); ++i) {
+            tensor_split_arr[i] /= split_sum;
+        }
+    }
+
+    auto it = buft_map.find(tensor_split_arr);
+    if (it != buft_map.end()) {
+        return &it->second;
+    }
+
+    struct ggml_backend_buffer_type buft {
+        /* .iface   = */ ggml_backend_cuda_split_buffer_type_interface,
+        /* .context = */ new ggml_backend_cuda_split_buffer_type_context{tensor_split_arr},
+    };
+
+    auto result = buft_map.emplace(tensor_split_arr, buft);
+    return &result.first->second;
+}
+
+// host buffer type
+
+GGML_CALL static const char * ggml_backend_cuda_host_buffer_type_name(ggml_backend_buffer_type_t buft) {
+    return GGML_CUDA_NAME "_Host";
+
+    GGML_UNUSED(buft);
+}
+
+GGML_CALL static const char * ggml_backend_cuda_host_buffer_name(ggml_backend_buffer_t buffer) {
+    return GGML_CUDA_NAME "_Host";
+
+    GGML_UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_cuda_host_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    CUDA_CHECK(cudaFreeHost(buffer->context));
+}
+
+static void * ggml_cuda_host_malloc(size_t size) {
+    if (getenv("GGML_CUDA_NO_PINNED") != nullptr) {
+        return nullptr;
+    }
+
+    void * ptr = nullptr;
+    cudaError_t err = cudaMallocHost((void **) &ptr, size);
+    if (err != cudaSuccess) {
+        // clear the error
+        cudaGetLastError();
+        GGML_CUDA_LOG_WARN("%s: failed to allocate %.2f MiB of pinned memory: %s\n", __func__,
+                           size / 1024.0 / 1024.0, cudaGetErrorString(err));
+        return nullptr;
+    }
+
+    return ptr;
+}
+
+GGML_CALL static ggml_backend_buffer_t ggml_backend_cuda_host_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    void * ptr = ggml_cuda_host_malloc(size);
+
+    if (ptr == nullptr) {
+        // fallback to cpu buffer
+        return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size);
+    }
+
+    ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size);
+    buffer->buft = buft;
+    buffer->iface.get_name = ggml_backend_cuda_host_buffer_name;
+    buffer->iface.free_buffer = ggml_backend_cuda_host_buffer_free_buffer;
+
+    return buffer;
+}
+
+GGML_CALL ggml_backend_buffer_type_t ggml_backend_cuda_host_buffer_type() {
+    static struct ggml_backend_buffer_type ggml_backend_cuda_buffer_type_host = {
+        /* .iface    = */ {
+            /* .get_name         = */ ggml_backend_cuda_host_buffer_type_name,
+            /* .alloc_buffer     = */ ggml_backend_cuda_host_buffer_type_alloc_buffer,
+            /* .get_alignment    = */ ggml_backend_cpu_buffer_type()->iface.get_alignment,
+            /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
+            /* .get_alloc_size   = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size,
+            /* .is_host          = */ ggml_backend_cpu_buffer_type()->iface.is_host,
+        },
+        /* .context  = */ nullptr,
+    };
+
+    return &ggml_backend_cuda_buffer_type_host;
+}
+
+//static bool ggml_backend_buffer_is_cuda_host(ggml_backend_buffer_t buffer) {
+//    return buffer->buft->iface.get_name == ggml_backend_cuda_host_buffer_type_name;
+//}
+
+/// kernels
+
+typedef void (*ggml_cuda_op_mul_mat_t)(
+    ggml_backend_cuda_context & ctx,
+    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
+    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
+    const int64_t src1_padded_row_size, cudaStream_t stream);
+
+#ifndef GGML_CUDA_PEER_MAX_BATCH_SIZE
+#define GGML_CUDA_PEER_MAX_BATCH_SIZE 128
+#endif // GGML_CUDA_PEER_MAX_BATCH_SIZE
+
+#define MUL_MAT_SRC1_COL_STRIDE 128
+
+static __global__ void mul_mat_p021_f16_f32(
+    const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int nchannels_x, const int nchannels_y) {
+
+    const half * x = (const half *) vx;
+
+    const int row_x = blockDim.y*blockIdx.y + threadIdx.y;
+    const int channel = blockDim.z*blockIdx.z + threadIdx.z;
+    const int channel_x = channel / (nchannels_y / nchannels_x);
+
+    const int nrows_y = ncols_x;
+    const int nrows_dst = nrows_x;
+    const int row_dst = row_x;
+
+    float tmp = 0.0f;
+
+    for (int col_x0 = 0; col_x0 < ncols_x; col_x0 += blockDim.x) {
+        const int col_x = col_x0 + threadIdx.x;
+
+        if (col_x >= ncols_x) {
+            break;
+        }
+
+        // x is transposed and permuted
+        const int ix = row_x*nchannels_x*ncols_x + channel_x*ncols_x + col_x;
+        const float xi = __half2float(x[ix]);
+
+        const int row_y = col_x;
+
+        // y is not transposed but permuted
+        const int iy = channel*nrows_y + row_y;
+
+        tmp += xi * y[iy];
+    }
+
+    // dst is not transposed and not permuted
+    const int idst = channel*nrows_dst + row_dst;
+
+    // sum up partial sums and write back result
+    tmp = warp_reduce_sum(tmp);
+
+    if (threadIdx.x == 0) {
+        dst[idst] = tmp;
+    }
+}
+
+static __global__ void mul_mat_vec_nc_f16_f32( // nc == non-contiguous
+    const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst, const int ncols_x, const int nrows_x,
+    const int row_stride_x, const int channel_stride_x, const int channel_x_divisor) {
+
+    const half * x = (const half *) vx;
+
+    const int row_x     = blockDim.y*blockIdx.y + threadIdx.y;
+    const int channel   = blockDim.z*blockIdx.z + threadIdx.z;
+    const int channel_x = channel / channel_x_divisor;
+
+    const int nrows_y   = ncols_x;
+    const int nrows_dst = nrows_x;
+    const int row_dst   = row_x;
+
+    const int idst = channel*nrows_dst + row_dst;
+
+    float tmp = 0.0f;
+
+    for (int col_x0 = 0; col_x0 < ncols_x; col_x0 += blockDim.x) {
+        const int col_x = col_x0 + threadIdx.x;
+
+        if (col_x >= ncols_x) {
+            break;
+        }
+
+        const int row_y = col_x;
+
+        const int ix = channel_x*channel_stride_x + row_x*row_stride_x + col_x;
+        const int iy = channel*nrows_y + row_y;
+
+        const float xi = __half2float(x[ix]);
+
+        tmp += xi * y[iy];
+    }
+
+    // sum up partial sums and write back result
+    tmp = warp_reduce_sum(tmp);
+
+    if (threadIdx.x == 0) {
+        dst[idst] = tmp;
+    }
+}
+
+static void ggml_mul_mat_p021_f16_f32_cuda(
+    const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x,
+    const int nchannels_x, const int nchannels_y, cudaStream_t stream) {
+
+    const dim3 block_nums(1, nrows_x, nchannels_y);
+    const dim3 block_dims(WARP_SIZE, 1, 1);
+    mul_mat_p021_f16_f32<<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols_x, nrows_x, nchannels_x, nchannels_y);
+}
+
+static void ggml_mul_mat_vec_nc_f16_f32_cuda(
+    const void * vx, const float * y, float * dst, const int ncols_x, const int nrows_x, const int row_stride_x,
+    const int nchannels_x, const int nchannels_y, const int channel_stride_x, cudaStream_t stream) {
+
+    const dim3 block_nums(1, nrows_x, nchannels_y);
+    const dim3 block_dims(WARP_SIZE, 1, 1);
+    mul_mat_vec_nc_f16_f32<<<block_nums, block_dims, 0, stream>>>
+        (vx, y, dst, ncols_x, nrows_x, row_stride_x, channel_stride_x, nchannels_y/nchannels_x);
+}
+
+static cudaError_t ggml_cuda_cpy_tensor_2d(
+    void * dst, const struct ggml_tensor * src, int64_t i3, int64_t i2, int64_t i1_low, int64_t i1_high, cudaStream_t stream) {
+
+    GGML_ASSERT(ggml_backend_buffer_is_cuda(src->buffer));
+    char * src_ptr = (char *) src->data;
+    char * dst_ptr = (char *) dst;
+
+    const int64_t ne0 = src->ne[0];
+    const int64_t nb0 = src->nb[0];
+    const int64_t nb1 = src->nb[1];
+    const int64_t nb2 = src->nb[2];
+    const int64_t nb3 = src->nb[3];
+    const enum ggml_type type = src->type;
+    const int64_t ts = ggml_type_size(type);
+    const int64_t bs = ggml_blck_size(type);
+    int64_t i1_diff = i1_high - i1_low;
+
+    const char * x = src_ptr + i1_low*nb1 + i2*nb2 + i3*nb3;
+    if (nb0 == ts && nb1 == ts*ne0/bs) {
+        return cudaMemcpyAsync(dst_ptr, x, i1_diff*nb1, cudaMemcpyDeviceToDevice, stream);
+    } else if (nb0 == ts) {
+        return cudaMemcpy2DAsync(dst_ptr, ts*ne0/bs, x, nb1, ts*ne0/bs, i1_diff, cudaMemcpyDeviceToDevice, stream);
+    } else {
+        for (int64_t i1 = 0; i1 < i1_diff; i1++) {
+            const void * rx = (const void *) ((const char *) x + i1*nb1);
+            void * rd = (void *) (dst_ptr + i1*ts*ne0/bs);
+            // pretend the row is a matrix with cols=1
+            cudaError_t r = cudaMemcpy2DAsync(rd, ts/bs, rx, nb0, ts/bs, ne0, cudaMemcpyDeviceToDevice, stream);
+            if (r != cudaSuccess) {
+                return r;
+            }
+        }
+        return cudaSuccess;
+    }
+}
+
+static void ggml_cuda_op_mul_mat_cublas(
+    ggml_backend_cuda_context & ctx,
+    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
+    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
+    const int64_t src1_padded_row_size, cudaStream_t stream) {
+
+    GGML_ASSERT(src0_dd_i  != nullptr);
+    GGML_ASSERT(src1_ddf_i != nullptr);
+    GGML_ASSERT(dst_dd_i   != nullptr);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne10 = src1->ne[0];
+
+    const int64_t ne0 = dst->ne[0];
+
+    const int64_t row_diff = row_high - row_low;
+
+    int id = ggml_cuda_get_device();
+
+    // the main device has a larger memory buffer to hold the results from all GPUs
+    // ldc == nrows of the matrix that cuBLAS writes into
+    int64_t ldc = id == ctx.device ? ne0 : row_diff;
+
+    const int compute_capability = ggml_cuda_info().devices[id].cc;
+
+    if (compute_capability >= CC_VOLTA && (src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) && ggml_is_contiguous(src0) && row_diff == src0->ne[1] && dst->op_params[0] == GGML_PREC_DEFAULT) {
+        // convert src0 and src1 to fp16, multiply as fp16, convert dst to fp32
+        ggml_cuda_pool_alloc<half> src0_as_f16(ctx.pool(id));
+        if (src0->type != GGML_TYPE_F16) {
+            const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src0->type);
+            GGML_ASSERT(to_fp16_cuda != nullptr);
+            size_t ne = row_diff*ne00;
+            src0_as_f16.alloc(ne);
+            to_fp16_cuda(src0_dd_i, src0_as_f16.get(), ne, stream);
+        }
+        const half * src0_ptr = src0->type == GGML_TYPE_F16 ? (const half *) src0_dd_i : src0_as_f16.get();
+
+        ggml_cuda_pool_alloc<half> src1_as_f16(ctx.pool(id));
+        if (src1->type != GGML_TYPE_F16) {
+            const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type);
+            GGML_ASSERT(to_fp16_cuda != nullptr);
+            size_t ne = src1_ncols*ne10;
+            src1_as_f16.alloc(ne);
+            to_fp16_cuda(src1_ddf_i, src1_as_f16.get(), ne, stream);
+        }
+        const half * src1_ptr = src1->type == GGML_TYPE_F16 ? (const half *) src1_ddf_i : src1_as_f16.get();
+        ggml_cuda_pool_alloc<half> dst_f16(ctx.pool(id), row_diff*src1_ncols);
+
+        const half alpha_f16 = 1.0f;
+        const half beta_f16 = 0.0f;
+
+        CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(id), stream));
+        CUBLAS_CHECK(
+            cublasGemmEx(ctx.cublas_handle(id), CUBLAS_OP_T, CUBLAS_OP_N,
+                    row_diff, src1_ncols, ne10,
+                    &alpha_f16, src0_ptr,       CUDA_R_16F, ne00,
+                                src1_ptr,       CUDA_R_16F, ne10,
+                    &beta_f16,   dst_f16.get(), CUDA_R_16F, ldc,
+                    CUBLAS_COMPUTE_16F,
+                    CUBLAS_GEMM_DEFAULT_TENSOR_OP));
+
+        const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16);
+        to_fp32_cuda(dst_f16.get(), dst_dd_i, row_diff*src1_ncols, stream);
+    } else {
+        ggml_cuda_pool_alloc<float> src0_ddq_as_f32(ctx.pool(id));
+        ggml_cuda_pool_alloc<float> src1_ddq_as_f32(ctx.pool(id));
+
+        if (src0->type != GGML_TYPE_F32) {
+            const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(src0->type);
+            GGML_ASSERT(to_fp32_cuda != nullptr);
+            src0_ddq_as_f32.alloc(row_diff*ne00);
+            to_fp32_cuda(src0_dd_i, src0_ddq_as_f32.get(), row_diff*ne00, stream);
+        }
+        if (src1->type != GGML_TYPE_F32) {
+            const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(src1->type);
+            GGML_ASSERT(to_fp32_cuda != nullptr);
+            src1_ddq_as_f32.alloc(src1_ncols*ne10);
+            to_fp32_cuda(src1_ddf_i, src1_ddq_as_f32.get(), src1_ncols*ne10, stream);
+        }
+
+        const float * src0_ddf_i = src0->type == GGML_TYPE_F32 ? (const float *) src0_dd_i : src0_ddq_as_f32.get();
+        const float * src1_ddf1_i = src1->type == GGML_TYPE_F32 ? (const float *) src1_ddf_i : src1_ddq_as_f32.get();
+
+        const float alpha = 1.0f;
+        const float beta = 0.0f;
+
+        CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(id), stream));
+        CUBLAS_CHECK(
+            cublasSgemm(ctx.cublas_handle(id), CUBLAS_OP_T, CUBLAS_OP_N,
+                    row_diff, src1_ncols, ne10,
+                    &alpha, src0_ddf_i,  ne00,
+                            src1_ddf1_i, ne10,
+                    &beta,  dst_dd_i,    ldc));
+    }
+
+    GGML_UNUSED(dst);
+    GGML_UNUSED(src1_ddq_i);
+    GGML_UNUSED(src1_padded_row_size);
+}
+
+static void ggml_cuda_set_peer_access(const int n_tokens, int main_device) {
+    static bool peer_access_enabled = false;
+
+    const bool enable_peer_access = n_tokens <= GGML_CUDA_PEER_MAX_BATCH_SIZE;
+
+    if (peer_access_enabled == enable_peer_access) {
+        return;
+    }
+
+#ifdef NDEBUG
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        ggml_cuda_set_device(id);
+        CUDA_CHECK(cudaDeviceSynchronize());
+    }
+
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        ggml_cuda_set_device(id);
+
+        for (int id_other = 0; id_other < ggml_backend_cuda_get_device_count(); ++id_other) {
+            if (id == id_other) {
+                continue;
+            }
+            if (id != main_device && id_other != main_device) {
+                continue;
+            }
+
+            int can_access_peer;
+            CUDA_CHECK(cudaDeviceCanAccessPeer(&can_access_peer, id, id_other));
+            if (can_access_peer) {
+                if (enable_peer_access) {
+                    cudaError_t err = cudaDeviceEnablePeerAccess(id_other, 0);
+                    if (err != cudaErrorPeerAccessAlreadyEnabled) {
+                        CUDA_CHECK(err);
+                    }
+                } else {
+                    cudaError_t err = cudaDeviceDisablePeerAccess(id_other);
+                    if (err != cudaErrorPeerAccessNotEnabled) {
+                        CUDA_CHECK(err);
+                    }
+                }
+            }
+        }
+    }
+
+    ggml_cuda_set_device(main_device);
+#endif // NDEBUG
+
+    peer_access_enabled = enable_peer_access;
+
+    GGML_UNUSED(main_device);
+}
+
+static cudaError_t ggml_cuda_Memcpy2DPeerAsync(
+    void * dst, int dstDevice, size_t dpitch, void * src, int srcDevice, size_t spitch, size_t width, size_t height, cudaStream_t stream) {
+
+#if !defined(GGML_USE_HIPBLAS)
+    // cudaMemcpy2DAsync may fail with copies between vmm pools of different devices
+    cudaMemcpy3DPeerParms p = {};
+    p.dstDevice = dstDevice;
+    p.dstPtr = make_cudaPitchedPtr(dst, dpitch, dpitch, height);
+    p.srcDevice = srcDevice;
+    p.srcPtr = make_cudaPitchedPtr(src, spitch, spitch, height);
+    p.extent = make_cudaExtent(width, height, 1);
+    return cudaMemcpy3DPeerAsync(&p, stream);
+#else
+    // HIP does not support cudaMemcpy3DPeerAsync or vmm pools
+    GGML_UNUSED(dstDevice);
+    GGML_UNUSED(srcDevice);
+    return cudaMemcpy2DAsync(dst, dpitch, src, spitch, width, height, cudaMemcpyDeviceToDevice, stream);
+#endif // !defined(GGML_USE_HIPBLAS)
+}
+
+static void ggml_cuda_op_mul_mat(
+    ggml_backend_cuda_context & ctx,
+    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, ggml_cuda_op_mul_mat_t op,
+    quantize_cuda_t quantize_src1) {
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+    const int64_t ne02 = src0->ne[2];
+    const int64_t ne03 = src0->ne[3];
+
+    const int64_t ne10 = src1->ne[0];
+    const int64_t ne11 = src1->ne[1];
+    const int64_t ne12 = src1->ne[2];
+    const int64_t ne13 = src1->ne[3];
+    const int64_t nrows1 = ggml_nrows(src1);
+
+    GGML_ASSERT(ne03 == ne13);
+
+    const int64_t ne0 = dst->ne[0];
+    const int64_t ne1 = dst->ne[1];
+
+    const int64_t nb2 = dst->nb[2];
+    const int64_t nb3 = dst->nb[3];
+
+    GGML_ASSERT(ggml_backend_buffer_is_cuda(dst->buffer));
+    GGML_ASSERT(ggml_backend_buffer_is_cuda(src1->buffer));
+    ggml_backend_cuda_buffer_context * src1_ctx = (ggml_backend_cuda_buffer_context *) src1->buffer->context;
+    ggml_backend_cuda_buffer_context * dst_ctx  = (ggml_backend_cuda_buffer_context *) dst->buffer->context;
+
+    GGML_ASSERT(src1->type == GGML_TYPE_F32 || (src1->ne[2] == 1 && src1->ne[3] == 1));
+
+    GGML_ASSERT(ne12 >= ne02 && ne12 % ne02 == 0);
+
+    const int64_t i02_divisor = ne12 / ne02;
+
+    const size_t src0_ts = ggml_type_size(src0->type);
+    const size_t src0_bs = ggml_blck_size(src0->type);
+    const size_t q8_1_ts = sizeof(block_q8_1);
+    const size_t q8_1_bs = QK8_1;
+
+    const bool src0_is_contiguous = ggml_is_contiguous(src0);
+    const bool src1_is_contiguous = ggml_is_contiguous(src1);
+
+    const int64_t src1_padded_col_size = GGML_PAD(ne10, MATRIX_ROW_PADDING);
+
+    const bool split = ggml_backend_buffer_is_cuda_split(src0->buffer);
+    GGML_ASSERT(!(split && ne02 > 1));
+    GGML_ASSERT(!(split && ne03 > 1));
+    GGML_ASSERT(!(split && ne02 < ne12));
+
+    ggml_tensor_extra_gpu * src0_extra = split ? (ggml_tensor_extra_gpu *) src0->extra : nullptr;
+
+
+    std::array<float, GGML_CUDA_MAX_DEVICES> tensor_split;
+    if (split) {
+        ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *) src0->buffer->buft->context;
+        tensor_split = buft_ctx->tensor_split;
+    }
+
+    struct dev_data {
+        int cc;
+
+        ggml_cuda_pool_alloc<char>   src0_dd_alloc;
+        ggml_cuda_pool_alloc<float> src1_ddf_alloc;
+        ggml_cuda_pool_alloc<char>  src1_ddq_alloc;
+        ggml_cuda_pool_alloc<float>   dst_dd_alloc;
+
+        char  *  src0_dd = nullptr;
+        float * src1_ddf = nullptr; // float
+        char  * src1_ddq = nullptr; // q8_1
+        float *   dst_dd = nullptr;
+
+        int64_t  row_low;
+        int64_t row_high;
+    };
+
+    dev_data dev[GGML_CUDA_MAX_DEVICES];
+
+    int used_devices = 0;
+
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        dev[id].cc = ggml_cuda_info().devices[id].cc;
+
+        // by default, use all rows
+        dev[id].row_low  = 0;
+        dev[id].row_high = ne01;
+
+        // for multi GPU, get the row boundaries from tensor split
+        // and round to mul_mat_q tile sizes
+        if (split) {
+            const int64_t rounding = get_row_rounding(tensor_split);
+
+            if (id != 0) {
+                dev[id].row_low  = ne01*tensor_split[id];
+                if (dev[id].row_low < ne01) {
+                    dev[id].row_low -= dev[id].row_low % rounding;
+                }
+            }
+
+            if (id != ggml_backend_cuda_get_device_count() - 1) {
+                dev[id].row_high  = ne01*tensor_split[id + 1];
+                if (dev[id].row_high < ne01) {
+                    dev[id].row_high -= dev[id].row_high % rounding;
+                }
+            }
+        }
+    }
+
+    for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+        if ((!split && id != ctx.device) || dev[id].row_low == dev[id].row_high) {
+            continue;
+        }
+
+        used_devices++;
+
+        const bool src1_on_device = id == src1_ctx->device;
+        const bool  dst_on_device = id == dst_ctx->device;
+
+        ggml_cuda_set_device(id);
+        cudaStream_t stream = ctx.stream(id, 0);
+
+        if (src0_is_contiguous) {
+            dev[id].src0_dd = split ? (char *) src0_extra->data_device[id] : (char *) src0->data;
+        } else {
+            dev[id].src0_dd = dev[id].src0_dd_alloc.alloc(ctx.pool(id), ggml_nbytes(src0));
+        }
+
+        if (src1_on_device && src1_is_contiguous) {
+            dev[id].src1_ddf = (float *) src1->data;
+        } else {
+            dev[id].src1_ddf = dev[id].src1_ddf_alloc.alloc(ctx.pool(id), ggml_nelements(src1));
+        }
+
+        if (quantize_src1) {
+            size_t src_1_ddq_size = nrows1*src1_padded_col_size*q8_1_ts/q8_1_bs;
+            if (quantize_src1 == quantize_mmq_q8_1_cuda) {
+                src_1_ddq_size += get_mmq_x_max_host(dev[id].cc)*sizeof(block_q8_1_mmq);
+            }
+            dev[id].src1_ddq = dev[id].src1_ddq_alloc.alloc(ctx.pool(id), src_1_ddq_size);
+
+            if (src1_on_device && src1_is_contiguous) {
+                quantize_src1(dev[id].src1_ddf, dev[id].src1_ddq, ne10, ne11, ne12*ne13, src1_padded_col_size, src0->type, stream);
+                CUDA_CHECK(cudaGetLastError());
+            }
+        }
+
+        if (dst_on_device) {
+            dev[id].dst_dd = (float *) dst->data;
+        } else {
+            const size_t size_dst_ddf = split ? (dev[id].row_high - dev[id].row_low)*ne1 : ggml_nelements(dst);
+            dev[id].dst_dd = dev[id].dst_dd_alloc.alloc(ctx.pool(id), size_dst_ddf);
+        }
+    }
+
+    // if multiple devices are used they need to wait for the main device
+    // here an event is recorded that signals that the main device has finished calculating the input data
+    if (split && used_devices > 1) {
+        ggml_cuda_set_device(ctx.device);
+        CUDA_CHECK(cudaEventRecord(src0_extra->events[ctx.device][0], ctx.stream()));
+    }
+
+    const int64_t src1_col_stride = split && used_devices > 1 ? MUL_MAT_SRC1_COL_STRIDE : ne11;
+    for (int64_t src1_col_0 = 0; src1_col_0 < ne11; src1_col_0 += src1_col_stride) {
+        const int64_t is = split ? (src1_col_0/src1_col_stride) % GGML_CUDA_MAX_STREAMS : 0;
+        const int64_t src1_ncols = src1_col_0 + src1_col_stride > ne11 ? ne11 - src1_col_0 : src1_col_stride;
+
+        for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+            if ((!split && id != ctx.device) || dev[id].row_low == dev[id].row_high) {
+                continue;
+            }
+
+            const bool src1_on_device = id == src1_ctx->device;
+            const bool  dst_on_device = id == dst_ctx->device;
+            const int64_t row_diff = dev[id].row_high - dev[id].row_low;
+
+            ggml_cuda_set_device(id);
+            cudaStream_t stream = ctx.stream(id, is);
+
+            // wait for main GPU data if necessary
+            if (split && (id != ctx.device || is != 0)) {
+                CUDA_CHECK(cudaStreamWaitEvent(stream, src0_extra->events[ctx.device][0], 0));
+            }
+
+            for (int64_t i0 = 0; i0 < ne13*ne12; ++i0) {
+                const int64_t i03 = i0 / ne12;
+                const int64_t i02 = i0 % ne12;
+
+                size_t src1_ddq_i_offset = i0*ne11 * src1_padded_col_size*q8_1_ts/q8_1_bs;
+                if (quantize_src1 == quantize_mmq_q8_1_cuda) {
+                    src1_ddq_i_offset += src1_col_0 * sizeof(block_q8_1_mmq);
+                } else {
+                    src1_ddq_i_offset += src1_col_0 * src1_padded_col_size*q8_1_ts/q8_1_bs;
+                }
+
+                // for split tensors the data begins at i0 == i0_offset_low
+                char  *  src0_dd_i =  dev[id].src0_dd + (i0/i02_divisor) * (ne01*ne00*src0_ts)/src0_bs;
+                float * src1_ddf_i = dev[id].src1_ddf + (i0*ne11 + src1_col_0) * ne10;
+                char  * src1_ddq_i = dev[id].src1_ddq +  src1_ddq_i_offset;
+                float *   dst_dd_i =   dev[id].dst_dd + (i0*ne1  + src1_col_0) * (dst_on_device ? ne0 : row_diff);
+
+                // the main device memory buffer can be on VRAM scratch, with space for all partial results
+                // in that case an offset on dst_ddf_i is needed
+                if (id == ctx.device) {
+                    dst_dd_i += dev[id].row_low; // offset is 0 if no tensor split
+                }
+
+                // copy src0, src1 to device if necessary
+                if (src1_is_contiguous) {
+                    if (id != ctx.device) {
+                        if (quantize_src1) {
+                            char * src1_ddq_i_source = dev[ctx.device].src1_ddq + src1_ddq_i_offset;
+                            if (quantize_src1 == quantize_mmq_q8_1_cuda) {
+                                const size_t pitch = ne11*sizeof(block_q8_1_mmq);
+                                const size_t width = src1_ncols*sizeof(block_q8_1_mmq);
+                                const size_t height = src1_padded_col_size/(4*QK8_1);
+                                CUDA_CHECK(ggml_cuda_Memcpy2DPeerAsync(src1_ddq_i, id, pitch, src1_ddq_i_source, ctx.device, pitch, width, height, stream));
+                            } else {
+                                CUDA_CHECK(cudaMemcpyPeerAsync(
+                                    src1_ddq_i, id, src1_ddq_i_source, ctx.device, src1_ncols*src1_padded_col_size*q8_1_ts/q8_1_bs, stream));
+                            }
+                        } else {
+                            float * src1_ddf_i_source = (float *) src1->data;
+                            src1_ddf_i_source += (i0*ne11 + src1_col_0) * ne10;
+                            CUDA_CHECK(cudaMemcpyPeerAsync(src1_ddf_i, id, src1_ddf_i_source, ctx.device,
+                                                            src1_ncols*ne10*sizeof(float), stream));
+                        }
+                    }
+                } else if (src1_on_device && !src1_is_contiguous) {
+                    CUDA_CHECK(ggml_cuda_cpy_tensor_2d(
+                                src1_ddf_i, src1, i03, i02, src1_col_0, src1_col_0+src1_ncols, stream));
+                } else {
+                    GGML_ASSERT(false);
+                }
+
+                if (quantize_src1 && !src1_is_contiguous) {
+                    quantize_src1(src1_ddf_i, src1_ddq_i, ne10, src1_ncols, 1, src1_padded_col_size, src0->type, stream);
+                    CUDA_CHECK(cudaGetLastError());
+                }
+
+                if (src1_col_0 == 0 && !src0_is_contiguous && i02 % i02_divisor == 0) {
+                    CUDA_CHECK(ggml_cuda_cpy_tensor_2d(src0_dd_i, src0, i03, i02/i02_divisor, dev[id].row_low, dev[id].row_high, stream));
+                }
+
+                // do the computation
+                op(ctx, src0, src1, dst, src0_dd_i, src1_ddf_i, src1_ddq_i, dst_dd_i,
+                    dev[id].row_low, dev[id].row_high, src1_ncols, src1_padded_col_size, stream);
+                CUDA_CHECK(cudaGetLastError());
+
+                // copy dst to host or other device if necessary
+                if (!dst_on_device) {
+                    void * dst_off_device = dst->data;
+                    if (split) {
+                        // src0 = weight matrix is saved as a transposed matrix for better memory layout.
+                        // dst is NOT transposed.
+                        // The outputs of matrix matrix multiplications can therefore NOT simply be concatenated for >1 GPU.
+                        // Instead they need to be copied to the correct slice in ne0 = dst row index.
+                        // If dst is a vector with ne0 == 1 then you don't have to do this but it still produces correct results.
+                        float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3);
+                        GGML_ASSERT(dst->nb[1] == ne0*sizeof(float));
+                        dhf_dst_i += src1_col_0*ne0 + dev[id].row_low;
+                        CUDA_CHECK(ggml_cuda_Memcpy2DPeerAsync(
+                            dhf_dst_i, ctx.device, ne0*sizeof(float), dst_dd_i, id, row_diff*sizeof(float), row_diff*sizeof(float), src1_ncols, stream));
+                    } else {
+                        float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3);
+                        GGML_ASSERT(dst->nb[1] == ne0*sizeof(float));
+                        dhf_dst_i += src1_col_0*ne0;
+                        CUDA_CHECK(cudaMemcpyAsync(dhf_dst_i, dst_dd_i, src1_ncols*ne0*sizeof(float), cudaMemcpyDeviceToDevice, stream));
+                    }
+                }
+
+                // add event for the main device to wait on until other device is done
+                if (split && (id != ctx.device || is != 0)) {
+                    CUDA_CHECK(cudaEventRecord(src0_extra->events[id][is], stream));
+                }
+            }
+        }
+    }
+
+    // main device waits for all other devices to be finished
+    if (split && ggml_backend_cuda_get_device_count() > 1) {
+        int64_t is_max = (ne11 + MUL_MAT_SRC1_COL_STRIDE - 1) / MUL_MAT_SRC1_COL_STRIDE;
+        is_max = is_max <= GGML_CUDA_MAX_STREAMS ? is_max : GGML_CUDA_MAX_STREAMS;
+
+        ggml_cuda_set_device(ctx.device);
+        for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+            if (dev[id].row_low == dev[id].row_high) {
+                continue;
+            }
+            for (int64_t is = 0; is < is_max; ++is) {
+                CUDA_CHECK(cudaStreamWaitEvent(ctx.stream(), src0_extra->events[id][is], 0));
+            }
+        }
+    }
+}
+
+static void ggml_cuda_mul_mat_vec_p021(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_ASSERT(ggml_is_permuted(src0) && ggml_is_permuted(src1));
+    GGML_ASSERT(ggml_backend_buffer_is_cuda(src0->buffer));
+    GGML_ASSERT(src0->nb[0] <= src0->nb[1] && src0->nb[2] <= src0->nb[3]); // 0213 permutation
+    GGML_ASSERT(src1->nb[0] <= src1->nb[1] && src1->nb[2] <= src1->nb[3]); // 0213 permutation
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+    const int64_t ne02 = src0->ne[2];
+
+    const int64_t ne12 = src1->ne[2];
+
+    cudaStream_t main_stream = ctx.stream();
+
+    void  * src0_ddq = src0->data;
+    float * src1_ddf = (float *) src1->data;
+    float * dst_ddf  = (float *) dst->data;
+
+    ggml_mul_mat_p021_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, ne02, ne12, main_stream);
+}
+
+static void ggml_cuda_mul_mat_vec_nc(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_ASSERT(!ggml_is_transposed(src0));
+    GGML_ASSERT(!ggml_is_transposed(src1));
+    GGML_ASSERT(!ggml_is_permuted(src0));
+    GGML_ASSERT(ggml_backend_buffer_is_cuda(src0->buffer));
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+    const int64_t ne02 = src0->ne[2];
+
+    const int64_t nb01 = src0->nb[1];
+    const int64_t nb02 = src0->nb[2];
+
+    const int64_t ne12 = src1->ne[2];
+
+    cudaStream_t main_stream = ctx.stream();
+
+    void  * src0_ddq = src0->data;
+    float * src1_ddf = (float *) src1->data;
+    float * dst_ddf  = (float *) dst->data;
+
+    const int64_t row_stride_x = nb01 / sizeof(half);
+    const int64_t channel_stride_x = nb02 / sizeof(half);
+
+    ggml_mul_mat_vec_nc_f16_f32_cuda(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, ne12, channel_stride_x, main_stream);
+}
+
+static __global__ void k_compute_batched_ptrs(
+        const half * src0_as_f16, const half * src1_as_f16, char * dst,
+        const void ** ptrs_src, void ** ptrs_dst,
+        int64_t ne12, int64_t ne13,
+        int64_t ne23,
+        size_t  nb02, size_t  nb03,
+        size_t  nb12, size_t  nb13,
+        size_t  nbd2, size_t  nbd3,
+        int64_t r2,   int64_t r3) {
+    int64_t i13 = blockIdx.x * blockDim.x + threadIdx.x;
+    int64_t i12 = blockIdx.y * blockDim.y + threadIdx.y;
+
+    if (i13 >= ne13 || i12 >= ne12) {
+        return;
+    }
+
+    int64_t i03 = i13 / r3;
+    int64_t i02 = i12 / r2;
+
+    ptrs_src[0*ne23 + i12 + i13*ne12] = (const char *) src0_as_f16 + i02*nb02 + i03*nb03;
+    ptrs_src[1*ne23 + i12 + i13*ne12] = (const char *) src1_as_f16 + i12*nb12 + i13*nb13;
+    ptrs_dst[0*ne23 + i12 + i13*ne12] = (      char *)         dst + i12*nbd2 + i13*nbd3;
+}
+
+static void ggml_cuda_mul_mat_batched_cublas(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_ASSERT(!ggml_is_transposed(src0));
+    GGML_ASSERT(!ggml_is_transposed(src1));
+
+    GGML_ASSERT(ggml_backend_buffer_is_cuda(src0->buffer));
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int64_t ne_dst = ggml_nelements(dst);
+
+    cudaStream_t main_stream = ctx.stream();
+
+    CUBLAS_CHECK(cublasSetStream(ctx.cublas_handle(), main_stream));
+
+    void * src0_ddq = src0->data;
+    half * src0_f16 = (half *) src0_ddq;
+    float * src1_ddf = (float *) src1->data;
+    float * dst_ddf  = (float *) dst->data;
+
+    // convert src1 to fp16
+    ggml_cuda_pool_alloc<half> src1_f16_alloc(ctx.pool());
+    if (src1->type != GGML_TYPE_F16) {
+        const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type);
+        const int64_t ne_src1 = ggml_nelements(src1);
+        src1_f16_alloc.alloc(ne_src1);
+        GGML_ASSERT(to_fp16_cuda != nullptr);
+        to_fp16_cuda(src1_ddf, src1_f16_alloc.get(), ne_src1, main_stream);
+    }
+    half * src1_f16 = src1->type == GGML_TYPE_F16 ? (half *) src1_ddf : src1_f16_alloc.get();
+
+    ggml_cuda_pool_alloc<half> dst_f16(ctx.pool());
+    char * dst_t;
+
+    cublasComputeType_t cu_compute_type = CUBLAS_COMPUTE_16F;
+    cudaDataType_t      cu_data_type    = CUDA_R_16F;
+
+    // dst strides
+    size_t nbd2 = dst->nb[2];
+    size_t nbd3 = dst->nb[3];
+
+    const half  alpha_f16 = 1.0f;
+    const half  beta_f16  = 0.0f;
+
+    const float alpha_f32 = 1.0f;
+    const float beta_f32  = 0.0f;
+
+    const void * alpha = &alpha_f16;
+    const void * beta  = &beta_f16;
+
+    if (dst->op_params[0] == GGML_PREC_DEFAULT) {
+        dst_t = (char *) dst_f16.alloc(ne_dst);
+
+        nbd2 /= sizeof(float) / sizeof(half);
+        nbd3 /= sizeof(float) / sizeof(half);
+    } else {
+        dst_t = (char *) dst_ddf;
+
+        cu_compute_type = CUBLAS_COMPUTE_32F;
+        cu_data_type    = CUDA_R_32F;
+
+        alpha = &alpha_f32;
+        beta  = &beta_f32;
+    }
+
+    GGML_ASSERT(ne12 % ne02 == 0);
+    GGML_ASSERT(ne13 % ne03 == 0);
+
+    // broadcast factors
+    const int64_t r2 = ne12/ne02;
+    const int64_t r3 = ne13/ne03;
+
+#if 0
+    // use cublasGemmEx
+    {
+        for (int i13 = 0; i13 < ne13; ++i13) {
+            for (int i12 = 0; i12 < ne12; ++i12) {
+                int i03 = i13 / r3;
+                int i02 = i12 / r2;
+
+                CUBLAS_CHECK(
+                        cublasGemmEx(g_cublas_handles[g_main_device], CUBLAS_OP_T, CUBLAS_OP_N,
+                            ne01, ne11, ne10,
+                            alpha, (const char *) src0_as_f16 + i02*src0->nb[2]   + i03*src0->nb[3]  , CUDA_R_16F,   nb01/sizeof(half),
+                                   (const char *) src1_as_f16 + i12*src1->nb[2]/2 + i13*src1->nb[3]/2, CUDA_R_16F,   nb11/sizeof(float),
+                            beta,  (      char *)       dst_t + i12*nbd2          + i13*nbd3,          cu_data_type, ne01,
+                            cu_compute_type,
+                            CUBLAS_GEMM_DEFAULT_TENSOR_OP));
+            }
+        }
+    }
+#else
+    if (r2 == 1 && r3 == 1 && ggml_is_contiguous_2(src0) && ggml_is_contiguous_2(src1)) {
+        // there is no broadcast and src0, src1 are contiguous across dims 2, 3
+        // use cublasGemmStridedBatchedEx
+        CUBLAS_CHECK(
+        cublasGemmStridedBatchedEx(ctx.cublas_handle(), CUBLAS_OP_T, CUBLAS_OP_N,
+                ne01, ne11, ne10,
+                alpha, (const char *) src0_f16, CUDA_R_16F,   nb01/nb00, nb02/nb00,  // strideA
+                       (const char *) src1_f16, CUDA_R_16F,   nb11/nb10, nb12/nb10,  // strideB
+                beta,  (      char *)    dst_t, cu_data_type, ne01,       nb2/nb0,   // strideC
+                ne12*ne13,
+                cu_compute_type,
+                CUBLAS_GEMM_DEFAULT_TENSOR_OP));
+    } else {
+        // use cublasGemmBatchedEx
+        const int ne23 = ne12*ne13;
+
+        ggml_cuda_pool_alloc<const void *> ptrs_src(ctx.pool(), 2*ne23);
+        ggml_cuda_pool_alloc<      void *> ptrs_dst(ctx.pool(), 1*ne23);
+
+        dim3 block_dims(ne13, ne12);
+        k_compute_batched_ptrs<<<1, block_dims, 0, main_stream>>>(
+                src0_f16, src1_f16, dst_t,
+                ptrs_src.get(), ptrs_dst.get(),
+                ne12, ne13,
+                ne23,
+                nb02, nb03,
+                src1->type == GGML_TYPE_F16 ? nb12 : nb12/2,
+                src1->type == GGML_TYPE_F16 ? nb13 : nb13/2,
+                nbd2, nbd3,
+                r2, r3);
+        CUDA_CHECK(cudaGetLastError());
+
+        CUBLAS_CHECK(
+        cublasGemmBatchedEx(ctx.cublas_handle(), CUBLAS_OP_T, CUBLAS_OP_N,
+                ne01, ne11, ne10,
+                alpha, (const void **) (ptrs_src.get() + 0*ne23), CUDA_R_16F,   nb01/nb00,
+                       (const void **) (ptrs_src.get() + 1*ne23), CUDA_R_16F,   nb11/nb10,
+                beta,  (      void **) (ptrs_dst.get() + 0*ne23), cu_data_type, ne01,
+                ne23,
+                cu_compute_type,
+                CUBLAS_GEMM_DEFAULT_TENSOR_OP));
+    }
+#endif
+
+    if (dst->op_params[0] == GGML_PREC_DEFAULT) {
+        const to_fp32_cuda_t to_fp32_cuda = ggml_get_to_fp32_cuda(GGML_TYPE_F16);
+        to_fp32_cuda(dst_f16.get(), dst_ddf, ne_dst, main_stream);
+    }
+}
+
+static void ggml_cuda_mul_mat(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    const bool split = ggml_backend_buffer_is_cuda_split(src0->buffer);
+
+    bool use_dequantize_mul_mat_vec = (ggml_is_quantized(src0->type) || src0->type == GGML_TYPE_F16)
+        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32
+        && src0->ne[0] % GGML_CUDA_DMMV_X == 0 && src1->ne[1] == 1;
+    bool          use_mul_mat_vec_q =  ggml_is_quantized(src0->type)
+        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32
+        && src1->ne[1] <= MMVQ_MAX_BATCH_SIZE;
+    bool              use_mul_mat_q =  ggml_is_quantized(src0->type)
+        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32;
+
+    bool any_gpus_with_slow_fp16 = false;
+
+    if (split) {
+        ggml_backend_cuda_split_buffer_type_context * buft_ctx = (ggml_backend_cuda_split_buffer_type_context *) src0->buffer->buft->context;
+        auto & tensor_split = buft_ctx->tensor_split;
+        for (int id = 0; id < ggml_backend_cuda_get_device_count(); ++id) {
+            // skip devices that are not going to do any work:
+            if (tensor_split[id] >= (id + 1 < ggml_backend_cuda_get_device_count() ? tensor_split[id + 1] : 1.0f)) {
+                continue;
+            }
+
+            const int cc            = ggml_cuda_info().devices[id].cc;
+            use_mul_mat_vec_q       = use_mul_mat_vec_q       && cc >= MIN_CC_DP4A;
+            use_mul_mat_q           = use_mul_mat_q           && ggml_cuda_should_use_mmq(src0->type, cc, src1->ne[1]);
+            any_gpus_with_slow_fp16 = any_gpus_with_slow_fp16 || !fast_fp16_available(cc);
+        }
+    } else {
+        const int cc            = ggml_cuda_info().devices[ctx.device].cc;
+        use_mul_mat_vec_q       = use_mul_mat_vec_q       && cc >= MIN_CC_DP4A;
+        use_mul_mat_q           = use_mul_mat_q           && ggml_cuda_should_use_mmq(src0->type, cc, src1->ne[1]);
+        any_gpus_with_slow_fp16 = any_gpus_with_slow_fp16 || !fast_fp16_available(cc);
+    }
+
+    // if mmvq is available it's a better choice than dmmv:
+#ifndef GGML_CUDA_FORCE_DMMV
+    use_dequantize_mul_mat_vec = use_dequantize_mul_mat_vec && !use_mul_mat_vec_q;
+#endif // GGML_CUDA_FORCE_DMMV
+
+    // debug helpers
+    //printf("src0: %8d %8d %8d %8d\n", src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3]);
+    //printf("      %8d %8d %8d %8d\n", src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3]);
+    //printf("src1: %8d %8d %8d %8d\n", src1->ne[0], src1->ne[1], src1->ne[2], src1->ne[3]);
+    //printf("      %8d %8d %8d %8d\n", src1->nb[0], src1->nb[1], src1->nb[2], src1->nb[3]);
+    //printf("src0 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src0), ggml_is_transposed(src0), ggml_type_name(src0->type), src0->name);
+    //printf("src1 is contiguous %d, transposed %d, type = %s, name = %s\n", ggml_is_contiguous(src1), ggml_is_transposed(src1), ggml_type_name(src1->type), src1->name);
+
+    if (!split && any_gpus_with_slow_fp16 && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) {
+        // FP32 precision KQ single-batch for batch size 1 without FlashAttention
+        ggml_cuda_mul_mat_vec_p021(ctx, src0, src1, dst);
+    } else if (!split && any_gpus_with_slow_fp16 && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) {
+        // FP32 precision KQV single-batch for batch size 1 without FlashAttention
+        ggml_cuda_mul_mat_vec_nc(ctx, src0, src1, dst);
+    } else if (!split && src0->type == GGML_TYPE_F16 && (src1->type == GGML_TYPE_F16 || !any_gpus_with_slow_fp16)
+               && !ggml_is_transposed(src0) && !ggml_is_transposed(src1) && src1->ne[2]*src1->ne[3] > 1) {
+        // KQ + KQV multi-batch without FlashAttention
+        ggml_cuda_mul_mat_batched_cublas(ctx, src0, src1, dst);
+    } else if (use_dequantize_mul_mat_vec) {
+        ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_dequantize_mul_mat_vec, nullptr);
+    } else if (use_mul_mat_vec_q) {
+        ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_mul_mat_vec_q, quantize_row_q8_1_cuda);
+    } else if (use_mul_mat_q) {
+        ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_mul_mat_q, quantize_mmq_q8_1_cuda);
+    } else {
+        ggml_cuda_op_mul_mat(ctx, src0, src1, dst, ggml_cuda_op_mul_mat_cublas, nullptr);
+    }
+}
+
+struct mmid_row_mapping {
+    int32_t i1;
+    int32_t i2;
+};
+
+static __global__ void k_copy_src1_to_contiguous(const char * __restrict__ src1_original, char * __restrict__ src1_contiguous,
+                                                 int * __restrict__ cur_src1_row, mmid_row_mapping * __restrict__ row_mapping,
+                                                 const char * __restrict ids, int64_t i02, size_t ids_nb1, size_t ids_nb0,
+                                                 int64_t ne11, int64_t ne10,
+                                                 size_t nb11, size_t nb12) {
+    int32_t iid1 = blockIdx.x;
+    int32_t id = blockIdx.y;
+
+    const int32_t row_id_i = *(const int32_t *) (ids + iid1*ids_nb1 + id*ids_nb0);
+
+    if (row_id_i != i02) {
+        return;
+    }
+
+    const int64_t i11 = id % ne11;
+    const int64_t i12 = iid1;
+
+    __shared__ int src1_row;
+    if (threadIdx.x == 0) {
+        src1_row = atomicAdd(cur_src1_row, 1);
+        row_mapping[src1_row] = {id, iid1};
+    }
+    __syncthreads();
+
+    const float * src1_row_original = (const float *)(src1_original + i11*nb11 + i12*nb12);
+    float * src1_row_contiguous = (float *)(src1_contiguous + src1_row*nb11);
+
+    for (int i = threadIdx.x; i < ne10; i += blockDim.x) {
+        src1_row_contiguous[i] = src1_row_original[i];
+    }
+}
+
+static __global__ void k_copy_dst_from_contiguous(char * __restrict__ dst_original, const char * __restrict__ dst_contiguous,
+                                                  const mmid_row_mapping * __restrict__ row_mapping,
+                                                  int64_t ne0,
+                                                  size_t nb1, size_t nb2) {
+    int32_t i = blockIdx.x;
+
+    const int32_t i1 = row_mapping[i].i1;
+    const int32_t i2 = row_mapping[i].i2;
+
+    const float * dst_row_contiguous = (const float *)(dst_contiguous + i*nb1);
+    float * dst_row_original = (float *)(dst_original + i1*nb1 + i2*nb2);
+
+    for (int j = threadIdx.x; j < ne0; j += blockDim.x) {
+        dst_row_original[j] = dst_row_contiguous[j];
+    }
+}
+
+static void ggml_cuda_mul_mat_id(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const ggml_tensor * src1 = dst->src[1];
+    const ggml_tensor * ids  = dst->src[2];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    GGML_ASSERT(!ggml_backend_buffer_is_cuda_split(src0->buffer) && "mul_mat_id does not support split buffers");
+
+    cudaStream_t stream = ctx.stream();
+
+    const int64_t n_as = ne02;
+    const int64_t n_ids = ids->ne[0];
+
+    std::vector<char> ids_host(ggml_nbytes(ids));
+    const char * ids_dev = (const char *) ids->data;
+    CUDA_CHECK(cudaMemcpyAsync(ids_host.data(), ids_dev, ggml_nbytes(ids), cudaMemcpyDeviceToHost, stream));
+    CUDA_CHECK(cudaStreamSynchronize(stream));
+
+    ggml_tensor src0_row = *src0;
+    ggml_tensor src1_row = *src1;
+    ggml_tensor dst_row  = *dst;
+
+    char * src0_original = (char *) src0->data;
+    char * src1_original = (char *) src1->data;
+    char * dst_original  = (char *)  dst->data;
+
+    src0_row.ne[2] = 1;
+    src0_row.ne[3] = 1;
+    src0_row.nb[3] = nb02;
+
+    src1_row.ne[1] = 1;
+    src1_row.ne[2] = 1;
+    src1_row.ne[3] = 1;
+    src1_row.nb[2] = nb11;
+    src1_row.nb[3] = nb11;
+
+    dst_row.ne[1] = 1;
+    dst_row.ne[2] = 1;
+    dst_row.ne[3] = 1;
+    dst_row.nb[2] = nb1;
+    dst_row.nb[3] = nb1;
+
+    if (ne12 == 1) {
+        for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) {
+            for (int64_t id = 0; id < n_ids; id++) {
+                const int32_t i02 = *(const int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]);
+
+                GGML_ASSERT(i02 >= 0 && i02 < n_as);
+
+                const int64_t i11 = id % ne11;
+                const int64_t i12 = iid1;
+
+                const int64_t i1 = id;
+                const int64_t i2 = i12;
+
+                src0_row.data = src0_original + i02*nb02;
+                src1_row.data = src1_original + i11*nb11 + i12*nb12;
+                dst_row.data  =  dst_original + i1*nb1   + i2*nb2;
+
+                ggml_cuda_mul_mat(ctx, &src0_row, &src1_row, &dst_row);
+            }
+        }
+    } else {
+        ggml_cuda_pool_alloc<char> src1_contiguous(ctx.pool(), sizeof(float)*ggml_nelements(src1));
+        ggml_cuda_pool_alloc<char>  dst_contiguous(ctx.pool(), sizeof(float)*ggml_nelements(dst));
+
+        src1_row.data = src1_contiguous.get();
+        dst_row.data  =  dst_contiguous.get();
+
+        for (int64_t i02 = 0; i02 < n_as; i02++) {
+            int64_t num_src1_rows = 0;
+
+            for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) {
+                for (int64_t id = 0; id < n_ids; id++) {
+                    const int32_t row_id_i = *(const int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]);
+
+                    GGML_ASSERT(row_id_i >= 0 && row_id_i < n_as);
+
+                    if (row_id_i != i02) {
+                        continue;
+                    }
+
+                    num_src1_rows++;
+                }
+            }
+
+            if (num_src1_rows == 0) {
+                continue;
+            }
+
+            ggml_cuda_pool_alloc<int> dev_cur_src1_row(ctx.pool(), 1);
+            ggml_cuda_pool_alloc<mmid_row_mapping> dev_row_mapping(ctx.pool(), num_src1_rows);
+            CUDA_CHECK(cudaMemsetAsync(dev_cur_src1_row.get(), 0, sizeof(int), stream));
+
+            {
+                dim3 block_dims(std::min((unsigned int)ne10, 768u));
+                dim3 grid_dims(ids->ne[1], n_ids);
+                k_copy_src1_to_contiguous<<<grid_dims, block_dims, 0, stream>>>(
+                        src1_original, src1_contiguous.get(),
+                        dev_cur_src1_row.get(), dev_row_mapping.get(),
+                        ids_dev, i02, ids->nb[1], ids->nb[0],
+                        ne11, ne10,
+                        nb11, nb12);
+                CUDA_CHECK(cudaGetLastError());
+            }
+
+            src0_row.data = src0_original + i02*nb02;
+
+            GGML_ASSERT(nb11 == sizeof(float)*ne10);
+            GGML_ASSERT(nb1 == sizeof(float)*ne0);
+
+            src1_row.ne[1] = num_src1_rows;
+            src1_row.nb[1] = nb11;
+            src1_row.nb[2] = num_src1_rows*nb11;
+            src1_row.nb[3] = num_src1_rows*nb11;
+
+            dst_row.ne[1] = num_src1_rows;
+            dst_row.nb[1] = nb1;
+            dst_row.nb[2] = num_src1_rows*nb1;
+            dst_row.nb[3] = num_src1_rows*nb1;
+
+            ggml_cuda_mul_mat(ctx, &src0_row, &src1_row, &dst_row);
+
+            {
+                dim3 block_dims(std::min((unsigned int)ne0, 768u));
+                dim3 grid_dims(num_src1_rows);
+                k_copy_dst_from_contiguous<<<grid_dims, block_dims, 0, stream>>>(
+                        dst_original, dst_contiguous.get(),
+                        dev_row_mapping.get(),
+                        ne0,
+                        nb1, nb2);
+                CUDA_CHECK(cudaGetLastError());
+            }
+        }
+    }
+}
+
+static bool ggml_cuda_compute_forward(ggml_backend_cuda_context & ctx, struct ggml_tensor * dst) {
+    // why is this here instead of mul_mat?
+    if (dst->src[0] != nullptr && ggml_backend_buffer_is_cuda_split(dst->src[0]->buffer)) {
+        ggml_cuda_set_peer_access(dst->src[1]->ne[1], ctx.device);
+    }
+
+    switch (dst->op) {
+        case GGML_OP_REPEAT:
+            ggml_cuda_op_repeat(ctx, dst);
+            break;
+        case GGML_OP_GET_ROWS:
+            ggml_cuda_op_get_rows(ctx, dst);
+            break;
+        case GGML_OP_DUP:
+            ggml_cuda_dup(ctx, dst);
+            break;
+        case GGML_OP_CPY:
+            ggml_cuda_cpy(ctx, dst->src[0], dst->src[1]);
+            break;
+        case GGML_OP_CONT:
+            ggml_cuda_dup(ctx, dst);
+            break;
+        case GGML_OP_ADD:
+            ggml_cuda_op_add(ctx, dst);
+            break;
+        case GGML_OP_ACC:
+            ggml_cuda_op_acc(ctx, dst);
+            break;
+        case GGML_OP_MUL:
+            ggml_cuda_op_mul(ctx, dst);
+            break;
+        case GGML_OP_DIV:
+            ggml_cuda_op_div(ctx, dst);
+            break;
+        case GGML_OP_UNARY:
+            switch (ggml_get_unary_op(dst)) {
+                case GGML_UNARY_OP_GELU:
+                    ggml_cuda_op_gelu(ctx, dst);
+                    break;
+                case GGML_UNARY_OP_SILU:
+                    ggml_cuda_op_silu(ctx, dst);
+                    break;
+                case GGML_UNARY_OP_GELU_QUICK:
+                    ggml_cuda_op_gelu_quick(ctx, dst);
+                    break;
+                case GGML_UNARY_OP_TANH:
+                    ggml_cuda_op_tanh(ctx, dst);
+                    break;
+                case GGML_UNARY_OP_RELU:
+                    ggml_cuda_op_relu(ctx, dst);
+                    break;
+                case GGML_UNARY_OP_SIGMOID:
+                    ggml_cuda_op_sigmoid(ctx, dst);
+                    break;
+                case GGML_UNARY_OP_HARDSIGMOID:
+                    ggml_cuda_op_hardsigmoid(ctx, dst);
+                    break;
+                case GGML_UNARY_OP_HARDSWISH:
+                    ggml_cuda_op_hardswish(ctx, dst);
+                    break;
+                default:
+                    return false;
+            }
+            break;
+        case GGML_OP_NORM:
+            ggml_cuda_op_norm(ctx, dst);
+            break;
+        case GGML_OP_GROUP_NORM:
+            ggml_cuda_op_group_norm(ctx, dst);
+            break;
+        case GGML_OP_CONCAT:
+            ggml_cuda_op_concat(ctx, dst);
+            break;
+        case GGML_OP_UPSCALE:
+            ggml_cuda_op_upscale(ctx, dst);
+            break;
+        case GGML_OP_PAD:
+            ggml_cuda_op_pad(ctx, dst);
+            break;
+        case GGML_OP_ARANGE:
+            ggml_cuda_op_arange(ctx, dst);
+            break;
+        case GGML_OP_TIMESTEP_EMBEDDING:
+            ggml_cuda_op_timestep_embedding(ctx, dst);
+            break;
+        case GGML_OP_LEAKY_RELU:
+            ggml_cuda_op_leaky_relu(ctx, dst);
+            break;
+        case GGML_OP_RMS_NORM:
+            ggml_cuda_op_rms_norm(ctx, dst);
+            break;
+        case GGML_OP_MUL_MAT:
+            if (dst->src[0]->ne[3] != dst->src[1]->ne[3]) {
+                GGML_CUDA_LOG_ERROR("%s: cannot compute %s: src0->ne[3] = %" PRId64 ", src1->ne[3] = %" PRId64 " - fallback to CPU\n", __func__, dst->name, dst->src[0]->ne[3], dst->src[1]->ne[3]);
+                return false;
+            } else {
+                ggml_cuda_mul_mat(ctx, dst->src[0], dst->src[1], dst);
+            }
+            break;
+        case GGML_OP_MUL_MAT_ID:
+            ggml_cuda_mul_mat_id(ctx, dst);
+            break;
+        case GGML_OP_SCALE:
+            ggml_cuda_op_scale(ctx, dst);
+            break;
+        case GGML_OP_SQR:
+            ggml_cuda_op_sqr(ctx, dst);
+            break;
+        case GGML_OP_SQRT:
+            ggml_cuda_op_sqrt(ctx, dst);
+            break;
+        case GGML_OP_CLAMP:
+            ggml_cuda_op_clamp(ctx, dst);
+            break;
+        case GGML_OP_NONE:
+        case GGML_OP_RESHAPE:
+        case GGML_OP_VIEW:
+        case GGML_OP_PERMUTE:
+        case GGML_OP_TRANSPOSE:
+                break;
+        case GGML_OP_DIAG_MASK_INF:
+            ggml_cuda_op_diag_mask_inf(ctx, dst);
+            break;
+        case GGML_OP_SOFT_MAX:
+            ggml_cuda_op_soft_max(ctx, dst);
+            break;
+        case GGML_OP_ROPE:
+            ggml_cuda_op_rope(ctx, dst);
+            break;
+        case GGML_OP_IM2COL:
+            ggml_cuda_op_im2col(ctx, dst);
+            break;
+        case GGML_OP_POOL_2D:
+            ggml_cuda_op_pool2d(ctx, dst);
+            break;
+        case GGML_OP_SUM_ROWS:
+            ggml_cuda_op_sum_rows(ctx, dst);
+            break;
+        case GGML_OP_ARGSORT:
+            ggml_cuda_op_argsort(ctx, dst);
+            break;
+        case GGML_OP_FLASH_ATTN_EXT:
+            ggml_cuda_flash_attn_ext(ctx, dst);
+            break;
+        default:
+            return false;
+    }
+
+    cudaError_t err = cudaGetLastError();
+    if (err != cudaSuccess) {
+        GGML_CUDA_LOG_ERROR("%s: %s failed\n", __func__, ggml_op_desc(dst));
+        CUDA_CHECK(err);
+    }
+
+    return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+// backend
+
+GGML_CALL static const char * ggml_backend_cuda_name(ggml_backend_t backend) {
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
+
+    return cuda_ctx->name.c_str();
+}
+
+GGML_CALL static void ggml_backend_cuda_free(ggml_backend_t backend) {
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
+
+    delete cuda_ctx;
+    delete backend;
+}
+
+GGML_CALL static ggml_backend_buffer_type_t ggml_backend_cuda_get_default_buffer_type(ggml_backend_t backend) {
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
+
+    return ggml_backend_cuda_buffer_type(cuda_ctx->device);
+}
+
+GGML_CALL static void ggml_backend_cuda_set_tensor_async(ggml_backend_t backend, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
+    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
+
+    GGML_ASSERT(buf->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device) && "unsupported buffer type");
+
+    CUDA_CHECK(cudaMemcpyAsync((char *)tensor->data + offset, data, size, cudaMemcpyHostToDevice, cuda_ctx->stream()));
+}
+
+GGML_CALL static void ggml_backend_cuda_get_tensor_async(ggml_backend_t backend, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
+    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
+
+    GGML_ASSERT(buf->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device) && "unsupported buffer type");
+
+    CUDA_CHECK(cudaMemcpyAsync(data, (const char *)tensor->data + offset, size, cudaMemcpyDeviceToHost, cuda_ctx->stream()));
+}
+
+GGML_CALL static bool ggml_backend_cuda_cpy_tensor_async(ggml_backend_t backend_src, ggml_backend_t backend_dst, const ggml_tensor * src, ggml_tensor * dst) {
+    GGML_ASSERT(ggml_backend_is_cuda(backend_src) || ggml_backend_is_cuda(backend_dst));
+
+    ggml_backend_buffer_t buf_src = src->view_src ? src->view_src->buffer : src->buffer;
+    ggml_backend_buffer_t buf_dst = dst->view_src ? dst->view_src->buffer : dst->buffer;
+
+    if (!ggml_backend_buffer_is_cuda(src->buffer)) {
+        return false;
+    }
+
+    if (!ggml_backend_buffer_is_cuda(dst->buffer)) {
+        return false;
+    }
+
+    // device -> device
+    ggml_backend_cuda_context * cuda_ctx_src = (ggml_backend_cuda_context *)backend_src->context;
+    ggml_backend_cuda_context * cuda_ctx_dst = (ggml_backend_cuda_context *)backend_dst->context;
+
+    if (backend_src != backend_dst) {
+        ggml_backend_cuda_buffer_context * buf_ctx_src = (ggml_backend_cuda_buffer_context *)buf_src->context;
+        ggml_backend_cuda_buffer_context * buf_ctx_dst = (ggml_backend_cuda_buffer_context *)buf_dst->context;
+
+        GGML_ASSERT(cuda_ctx_src->device == buf_ctx_src->device);
+        GGML_ASSERT(cuda_ctx_dst->device == buf_ctx_dst->device);
+
+        // copy on src stream
+        if (cuda_ctx_src->device == cuda_ctx_dst->device) {
+            CUDA_CHECK(cudaMemcpyAsync(dst->data, src->data, ggml_nbytes(dst), cudaMemcpyDeviceToDevice, cuda_ctx_dst->stream()));
+        } else {
+#ifdef GGML_CUDA_NO_PEER_COPY
+            return false;
+#else
+            CUDA_CHECK(cudaMemcpyPeerAsync(dst->data, cuda_ctx_dst->device, src->data, cuda_ctx_src->device, ggml_nbytes(dst), cuda_ctx_src->stream()));
+#endif
+        }
+
+        // record event on src stream
+        if (!cuda_ctx_src->copy_event) {
+            ggml_cuda_set_device(cuda_ctx_src->device);
+            CUDA_CHECK(cudaEventCreateWithFlags(&cuda_ctx_src->copy_event, cudaEventDisableTiming));
+        }
+
+        CUDA_CHECK(cudaEventRecord(cuda_ctx_src->copy_event, cuda_ctx_src->stream()));
+
+        // wait on dst stream for the copy to complete
+        CUDA_CHECK(cudaStreamWaitEvent(cuda_ctx_dst->stream(), cuda_ctx_src->copy_event, 0));
+    } else {
+        // src and dst are on the same backend
+        CUDA_CHECK(cudaMemcpyAsync(dst->data, src->data, ggml_nbytes(dst), cudaMemcpyDeviceToDevice, cuda_ctx_dst->stream()));
+    }
+    return true;
+}
+
+GGML_CALL static void ggml_backend_cuda_synchronize(ggml_backend_t backend) {
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
+
+    CUDA_CHECK(cudaStreamSynchronize(cuda_ctx->stream()));
+
+    GGML_UNUSED(backend);
+}
+
+static void set_ggml_graph_node_properties(ggml_tensor * node, ggml_graph_node_properties * graph_node_properties) {
+    graph_node_properties->node_address = node->data;
+    graph_node_properties->node_op = node->op;
+    for (int i = 0; i < GGML_MAX_DIMS; i++) {
+        graph_node_properties->ne[i] = node->ne[i];
+        graph_node_properties->nb[i] = node->nb[i];
+    }
+    for (int i = 0; i < GGML_MAX_SRC; i++) {
+        graph_node_properties->src_address[i] = node->src[i] ? node->src[i]->data : nullptr;
+    }
+}
+
+static bool ggml_graph_node_has_matching_properties(ggml_tensor * node, ggml_graph_node_properties * graph_node_properties) {
+    if (node->data != graph_node_properties->node_address &&
+          node->op != GGML_OP_CPY &&
+          node->op != GGML_OP_VIEW) {
+        return false;
+    }
+
+    if (node->op != graph_node_properties->node_op) {
+        return false;
+    }
+
+    for (int i = 0; i < GGML_MAX_DIMS; i++) {
+        if (node->ne[i] != graph_node_properties->ne[i]) {
+            return false;
+        }
+        if (node->nb[i] != graph_node_properties->nb[i]) {
+            return false;
+        }
+    }
+
+    for (int i = 0; i < GGML_MAX_SRC; i++) {
+        if (node->src[i] &&
+            node->src[i]->data != graph_node_properties->src_address[i] &&
+            node->op != GGML_OP_CPY &&
+            node->op != GGML_OP_VIEW
+        ) {
+            return false;
+        }
+    }
+    return true;
+}
+
+GGML_CALL static enum ggml_status ggml_backend_cuda_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
+
+    ggml_cuda_set_device(cuda_ctx->device);
+
+#ifdef USE_CUDA_GRAPH
+    static const bool disable_cuda_graphs_due_to_env = (getenv("GGML_CUDA_DISABLE_GRAPHS") != nullptr);
+
+    // Objects required for CUDA Graph
+    if (cuda_ctx->cuda_graph == nullptr) {
+        cuda_ctx->cuda_graph.reset(new ggml_cuda_graph());
+    }
+
+    bool use_cuda_graph = true;
+    bool cuda_graph_update_required = false;
+    // vector of pointers to CUDA cpy kernels, which are required to identify
+    // kernel parameters which need updated in the graph for each token
+    std::vector<void *> ggml_cuda_cpy_fn_ptrs;
+
+    if (cuda_ctx->cuda_graph->graph == nullptr) {
+        if (ggml_cuda_info().devices[cuda_ctx->device].cc < CC_AMPERE) {
+            cuda_ctx->cuda_graph->disable_due_to_gpu_arch = true;
+#ifndef NDEBUG
+            GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to GPU architecture\n", __func__);
+#endif
+        }
+    }
+
+    // Disable CUDA graphs in presence of env var, old GPU, use-case which is changing too rapidly,
+    // or previous graph capture failure.
+    // Also disable for multi-gpu for now. TO DO investigate
+    if (disable_cuda_graphs_due_to_env
+        || cuda_ctx->cuda_graph->disable_due_to_gpu_arch
+        || cuda_ctx->cuda_graph->disable_due_to_too_many_updates
+        || cuda_ctx->cuda_graph->disable_due_to_failed_graph_capture) {
+        use_cuda_graph = false;
+    }
+
+    if (use_cuda_graph) {
+        if (cuda_ctx->cuda_graph->instance == nullptr) {
+            cuda_graph_update_required = true;
+        }
+
+        // Check if the graph size has changed
+        if (cuda_ctx->cuda_graph->ggml_graph_properties.size() != (size_t)cgraph->n_nodes) {
+            cuda_graph_update_required = true;
+            cuda_ctx->cuda_graph->ggml_graph_properties.resize(cgraph->n_nodes);
+        }
+
+        // Loop over nodes in GGML graph to determine if CUDA graph update is required
+        // and store properties to allow this comparison for the next token
+        for (int i = 0; i < cgraph->n_nodes; i++) {
+            bool has_matching_properties = true;
+            if (!cuda_graph_update_required) {
+                has_matching_properties = ggml_graph_node_has_matching_properties(cgraph->nodes[i], &cuda_ctx->cuda_graph->ggml_graph_properties[i]);
+            }
+            if (!has_matching_properties) {
+                cuda_graph_update_required = true;
+            }
+            set_ggml_graph_node_properties(cgraph->nodes[i], &cuda_ctx->cuda_graph->ggml_graph_properties[i]);
+        }
+
+        // Loop over nodes in GGML graph to obtain info needed for CUDA graph
+        cuda_ctx->cuda_graph->updated_kernel_arg.clear();
+        for (int i = 0; i < cgraph->n_nodes; i++) {
+            ggml_tensor * node = cgraph->nodes[i];
+
+            if (node->src[0] && ggml_backend_buffer_is_cuda_split(node->src[0]->buffer)) {
+                use_cuda_graph = false; // Split buffers are not supported by CUDA graph capture
+#ifndef NDEBUG
+                GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to split buffer\n", __func__);
+#endif
+            }
+
+            if (node->op == GGML_OP_MUL_MAT_ID) {
+                use_cuda_graph = false; // This node type is not supported by CUDA graph capture
+#ifndef NDEBUG
+                GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to mul_mat_id\n", __func__);
+#endif
+            }
+
+            if (node->op == GGML_OP_ADD && node->src[1] && node->src[1]->ne[1] > 1) {
+                // disable CUDA graphs for batch size > 1 for now.
+                // Changes in batch size or context size can cause changes to the grid size of some kernels.
+                use_cuda_graph = false;
+#ifndef NDEBUG
+                GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to batch size > 1 [%s] [%ld %ld %ld %ld]\n", __func__, node->name, node->ne[0], node->ne[1], node->ne[2], node->ne[3]);
+#endif
+            }
+
+            if (node->op == GGML_OP_CPY) {
+                // store the copy op parameter which changes with each token.
+                cuda_ctx->cuda_graph->updated_kernel_arg.push_back((char **) &(node->src[1]->data));
+                // store a pointer to each copy op CUDA kernel to identify it later
+                void * ptr = ggml_cuda_cpy_fn(node->src[0], node->src[1]);
+                if (std::find(ggml_cuda_cpy_fn_ptrs.begin(), ggml_cuda_cpy_fn_ptrs.end(), ptr) == ggml_cuda_cpy_fn_ptrs.end()) {
+                    ggml_cuda_cpy_fn_ptrs.push_back(ptr);
+                }
+            }
+
+            if (!use_cuda_graph) {
+                break;
+            }
+        }
+
+        // Disable CUDA graphs (from the next token) if the use-case is demanding too many consecutive graph updates.
+        if (use_cuda_graph && cuda_graph_update_required) {
+            cuda_ctx->cuda_graph->number_consecutive_updates++;
+        } else {
+            cuda_ctx->cuda_graph->number_consecutive_updates = 0;
+        }
+
+        if (cuda_ctx->cuda_graph->number_consecutive_updates >= 4) {
+            cuda_ctx->cuda_graph->disable_due_to_too_many_updates = true;
+#ifndef NDEBUG
+            GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to too many consecutive updates\n", __func__);
+#endif
+        }
+    }
+
+    if (use_cuda_graph && cuda_graph_update_required) { // Start CUDA graph capture
+        CUDA_CHECK(cudaStreamBeginCapture(cuda_ctx->stream(), cudaStreamCaptureModeRelaxed));
+    }
+
+#else
+    bool use_cuda_graph = false;
+    bool cuda_graph_update_required = false;
+#endif // USE_CUDA_GRAPH
+
+    bool graph_evaluated_or_captured = false;
+
+    while (!graph_evaluated_or_captured) {
+        // Only perform the graph execution if CUDA graphs are not enabled, or we are capturing the graph.
+        // With the use of CUDA graphs, the execution will be performed by the graph launch.
+        if (!use_cuda_graph || cuda_graph_update_required) {
+            for (int i = 0; i < cgraph->n_nodes; i++) {
+                ggml_tensor * node = cgraph->nodes[i];
+
+                if (ggml_is_empty(node) || node->op == GGML_OP_RESHAPE || node->op == GGML_OP_TRANSPOSE || node->op == GGML_OP_VIEW || node->op == GGML_OP_PERMUTE || node->op == GGML_OP_NONE) {
+                    continue;
+                }
+
+#ifndef NDEBUG
+                assert(node->buffer->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device));
+                for (int j = 0; j < GGML_MAX_SRC; j++) {
+                    if (node->src[j] != nullptr) {
+                        assert(node->src[j]->buffer->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device) || ggml_backend_buffer_is_cuda_split(node->src[j]->buffer));
+                    }
+                }
+#endif
+
+                bool ok = ggml_cuda_compute_forward(*cuda_ctx, node);
+                if (!ok) {
+                    GGML_CUDA_LOG_ERROR("%s: op not supported %s (%s)\n", __func__, node->name, ggml_op_name(node->op));
+                }
+                GGML_ASSERT(ok);
+            }
+        }
+
+#ifdef USE_CUDA_GRAPH
+        if (use_cuda_graph && cuda_graph_update_required) { // End CUDA graph capture
+            if (cuda_ctx->cuda_graph->graph != nullptr) {
+                CUDA_CHECK(cudaGraphDestroy(cuda_ctx->cuda_graph->graph));
+                cuda_ctx->cuda_graph->graph = nullptr;
+            }
+            CUDA_CHECK(cudaStreamEndCapture(cuda_ctx->stream(), &cuda_ctx->cuda_graph->graph));
+
+#if 0
+            if (disable_cuda_graphs_due_to_failed_capture) {
+                use_cuda_graph = false;
+                cuda_ctx->cuda_graph->disable_due_to_failed_graph_capture = true;
+#ifndef NDEBUG
+                GGML_CUDA_LOG_WARN("%s: disabling CUDA graphs due to failed graph capture\n", __func__);
+#endif
+            } else {
+                graph_evaluated_or_captured = true; // CUDA graph has been captured
+            }
+#endif
+            graph_evaluated_or_captured = true; // CUDA graph has been captured
+        } else {
+            graph_evaluated_or_captured = true; // ggml graph has been directly evaluated
+        }
+    }
+
+    if (use_cuda_graph) {
+        if (cuda_ctx->cuda_graph->instance == nullptr) { // Create executable graph from captured graph.
+            CUDA_CHECK(cudaGraphInstantiate(&cuda_ctx->cuda_graph->instance, cuda_ctx->cuda_graph->graph, NULL, NULL, 0));
+        }
+
+        // Perform update to graph (if required for this token), and change copy parameter (required for every token)
+
+        if (cuda_graph_update_required) {
+            // Extract nodes from graph
+            // First call with null argument gets number of nodes in graph
+            CUDA_CHECK(cudaGraphGetNodes(cuda_ctx->cuda_graph->graph, nullptr, &cuda_ctx->cuda_graph->num_nodes));
+            // Subsequent call with non-null argument gets nodes
+            cuda_ctx->cuda_graph->nodes.resize(cuda_ctx->cuda_graph->num_nodes);
+            cuda_ctx->cuda_graph->params.resize(cuda_ctx->cuda_graph->num_nodes);
+            if (cuda_ctx->cuda_graph->num_nodes > 0) {
+                CUDA_CHECK(cudaGraphGetNodes(cuda_ctx->cuda_graph->graph, cuda_ctx->cuda_graph->nodes.data(), &cuda_ctx->cuda_graph->num_nodes));
+
+                // Loop over nodes, and extract kernel parameters from each node
+                for (size_t i = 0; i < cuda_ctx->cuda_graph->num_nodes; i++) {
+                    cudaGraphNodeType node_type;
+                    CUDA_CHECK(cudaGraphNodeGetType(cuda_ctx->cuda_graph->nodes[i], &node_type));
+                    if (node_type == cudaGraphNodeTypeKernel) {
+                        cudaError_t stat = cudaGraphKernelNodeGetParams(cuda_ctx->cuda_graph->nodes[i], &cuda_ctx->cuda_graph->params[i]); // Get params using runtime
+                        if (stat == cudaErrorInvalidDeviceFunction) {
+                            // Fails due to incorrect handling by CUDA runtime of CUDA BLAS node.
+                            // We don't need to update blas nodes, so clear error and move on.
+                            cudaGetLastError();
+                        } else {
+                            GGML_ASSERT(stat == cudaSuccess);
+                        }
+                    }
+                }
+            }
+        }
+
+        // One of the arguments to the copy kernel is updated for each token, hence we need to
+        // replace that argument with the updated value in the CUDA graph
+        if (!cuda_graph_update_required) { // on update steps, the live parameters will already be captured
+            int k = 0;
+            for (size_t i = 0; i < cuda_ctx->cuda_graph->num_nodes; i++) {
+                if(count(ggml_cuda_cpy_fn_ptrs.begin(), ggml_cuda_cpy_fn_ptrs.end(), cuda_ctx->cuda_graph->params[i].func) > 0) {
+                    char ** updated_kernel_arg_ptr = cuda_ctx->cuda_graph->updated_kernel_arg.at(k++);
+                    cuda_ctx->cuda_graph->params[i].kernelParams[1] = updated_kernel_arg_ptr;
+                    CUDA_CHECK(cudaGraphKernelNodeSetParams(cuda_ctx->cuda_graph->nodes[i], &cuda_ctx->cuda_graph->params[i]));
+                }
+            }
+        }
+
+        // Update graph executable
+        cudaGraphExecUpdateResultInfo result_info;
+        cudaError_t stat = cudaGraphExecUpdate(cuda_ctx->cuda_graph->instance, cuda_ctx->cuda_graph->graph, &result_info);
+        if (stat == cudaErrorGraphExecUpdateFailure) {
+#ifndef NDEBUG
+            GGML_CUDA_LOG_ERROR("%s: CUDA graph update failed\n", __func__);
+#endif
+            // The pre-existing graph exec cannot be updated due to violated constraints
+            // so instead clear error and re-instantiate
+            cudaGetLastError();
+            CUDA_CHECK(cudaGraphExecDestroy(cuda_ctx->cuda_graph->instance));
+            cuda_ctx->cuda_graph->instance = nullptr;
+            CUDA_CHECK(cudaGraphInstantiate(&cuda_ctx->cuda_graph->instance, cuda_ctx->cuda_graph->graph, NULL, NULL, 0));
+        } else {
+            GGML_ASSERT(stat == cudaSuccess);
+        }
+        // Launch graph
+        CUDA_CHECK(cudaGraphLaunch(cuda_ctx->cuda_graph->instance, cuda_ctx->stream()));
+#else
+        graph_evaluated_or_captured = true;
+#endif // USE_CUDA_GRAPH
+    }
+
+    return GGML_STATUS_SUCCESS;
+}
+
+GGML_CALL static bool ggml_backend_cuda_supports_op(ggml_backend_t backend, const ggml_tensor * op) {
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *) backend->context;
+    switch (op->op) {
+        case GGML_OP_UNARY:
+            switch (ggml_get_unary_op(op)) {
+                case GGML_UNARY_OP_GELU:
+                case GGML_UNARY_OP_SILU:
+                case GGML_UNARY_OP_RELU:
+                case GGML_UNARY_OP_SIGMOID:
+                case GGML_UNARY_OP_HARDSIGMOID:
+                case GGML_UNARY_OP_HARDSWISH:
+                case GGML_UNARY_OP_GELU_QUICK:
+                case GGML_UNARY_OP_TANH:
+                    return ggml_is_contiguous(op->src[0]);
+                default:
+                    return false;
+            }
+            break;
+        case GGML_OP_MUL_MAT:
+        case GGML_OP_MUL_MAT_ID:
+            {
+                struct ggml_tensor * a;
+                struct ggml_tensor * b;
+                if (op->op == GGML_OP_MUL_MAT) {
+                    a = op->src[0];
+                    b = op->src[1];
+                } else {
+                    a = op->src[2];
+                    b = op->src[1];
+                }
+                if (a->ne[3] != b->ne[3]) {
+                    return false;
+                }
+                ggml_type a_type = a->type;
+                if (a_type == GGML_TYPE_IQ2_XXS || a_type == GGML_TYPE_IQ2_XS || a_type == GGML_TYPE_IQ3_XXS ||
+                    a_type == GGML_TYPE_IQ1_S   || a_type == GGML_TYPE_IQ4_NL || a_type == GGML_TYPE_IQ3_S   ||
+                    a_type == GGML_TYPE_IQ1_M   || a_type == GGML_TYPE_IQ2_S  || a_type == GGML_TYPE_IQ4_XS) {
+                    if (b->ne[1] == 1 && ggml_nrows(b) > 1) {
+                        return false;
+                    }
+                }
+                return true;
+            } break;
+        case GGML_OP_GET_ROWS:
+            {
+                switch (op->src[0]->type) {
+                    case GGML_TYPE_F16:
+                    case GGML_TYPE_F32:
+                    case GGML_TYPE_Q4_0:
+                    case GGML_TYPE_Q4_1:
+                    case GGML_TYPE_Q5_0:
+                    case GGML_TYPE_Q5_1:
+                    case GGML_TYPE_Q8_0:
+                        return true;
+                    default:
+                        return false;
+                }
+            } break;
+        case GGML_OP_CPY:
+            {
+                ggml_type src0_type = op->src[0]->type;
+                ggml_type src1_type = op->src[1]->type;
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q8_0) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_0) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_1) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q5_0) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q5_1) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_IQ4_NL) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) {
+                    return true;
+                }
+                return false;
+            } break;
+        case GGML_OP_DUP:
+        case GGML_OP_REPEAT:
+        case GGML_OP_CONCAT:
+            {
+                ggml_type src0_type = op->src[0]->type;
+                return src0_type != GGML_TYPE_I32 && src0_type != GGML_TYPE_I16;
+            } break;
+        case GGML_OP_NONE:
+        case GGML_OP_RESHAPE:
+        case GGML_OP_VIEW:
+        case GGML_OP_PERMUTE:
+        case GGML_OP_TRANSPOSE:
+        case GGML_OP_NORM:
+        case GGML_OP_ADD:
+        case GGML_OP_MUL:
+        case GGML_OP_DIV:
+        case GGML_OP_RMS_NORM:
+        case GGML_OP_SCALE:
+        case GGML_OP_SQR:
+        case GGML_OP_SQRT:
+        case GGML_OP_CLAMP:
+        case GGML_OP_CONT:
+        case GGML_OP_DIAG_MASK_INF:
+        case GGML_OP_SOFT_MAX:
+            return true;
+        case GGML_OP_ROPE:
+            return ggml_is_contiguous(op->src[0]);
+        case GGML_OP_IM2COL:
+        case GGML_OP_POOL_2D:
+        case GGML_OP_SUM_ROWS:
+        case GGML_OP_ARGSORT:
+        case GGML_OP_ACC:
+        case GGML_OP_GROUP_NORM:
+        case GGML_OP_UPSCALE:
+        case GGML_OP_PAD:
+        case GGML_OP_ARANGE:
+        case GGML_OP_TIMESTEP_EMBEDDING:
+        case GGML_OP_LEAKY_RELU:
+            return true;
+        case GGML_OP_FLASH_ATTN_EXT:
+#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+            return op->src[0]->ne[0] == 64 || op->src[0]->ne[0] == 128;
+#else
+            if (op->src[0]->ne[0] == 128) {
+                return true;
+            }
+            if (op->src[0]->ne[0] ==  64 && op->src[1]->type == GGML_TYPE_F16) {
+                return true;
+            }
+            return ggml_cuda_info().devices[cuda_ctx->device].cc >= CC_VOLTA &&
+                op->src[1]->type == GGML_TYPE_F16 && op->src[2]->type == GGML_TYPE_F16;
+#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+        default:
+            return false;
+    }
+
+    GGML_UNUSED(backend);
+}
+
+GGML_CALL static bool ggml_backend_cuda_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
+    if (ggml_backend_buft_is_cuda_split(buft)) {
+        return true;
+    }
+
+    if (ggml_backend_buft_is_cuda(buft)) {
+        ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
+        ggml_backend_cuda_buffer_type_context * buft_ctx = (ggml_backend_cuda_buffer_type_context *)buft->context;
+        return buft_ctx->device == cuda_ctx->device;
+    }
+
+    return false;
+}
+
+GGML_CALL static bool ggml_backend_cuda_offload_op(ggml_backend_t backend, const ggml_tensor * op) {
+    const int min_batch_size = 32;
+
+    return (op->ne[1] >= min_batch_size && op->op != GGML_OP_GET_ROWS) ||
+           (op->ne[2] >= min_batch_size && op->op == GGML_OP_MUL_MAT_ID);
+
+    GGML_UNUSED(backend);
+}
+
+static ggml_backend_event_t ggml_backend_cuda_event_new(ggml_backend_t backend) {
+#ifdef GGML_CUDA_NO_PEER_COPY
+    return nullptr;
+#else
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
+
+    ggml_cuda_set_device(cuda_ctx->device);
+
+    cudaEvent_t event;
+    CUDA_CHECK(cudaEventCreateWithFlags(&event, cudaEventDisableTiming));
+
+    return new ggml_backend_event {
+        /* .backend = */ backend,
+        /* .context = */ event,
+    };
+#endif
+}
+
+static void ggml_backend_cuda_event_free(ggml_backend_event_t event) {
+    CUDA_CHECK(cudaEventDestroy((cudaEvent_t)event->context));
+
+    delete event;
+}
+
+static void ggml_backend_cuda_event_record(ggml_backend_event_t event) {
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)event->backend->context;
+
+    CUDA_CHECK(cudaEventRecord((cudaEvent_t)event->context, cuda_ctx->stream()));
+}
+
+static void ggml_backend_cuda_event_wait(ggml_backend_t backend, ggml_backend_event_t event) {
+    ggml_backend_cuda_context * cuda_ctx = (ggml_backend_cuda_context *)backend->context;
+
+    if (ggml_backend_is_cuda(event->backend)) {
+        CUDA_CHECK(cudaStreamWaitEvent(cuda_ctx->stream(), (cudaEvent_t)event->context, 0));
+    } else {
+#if 0
+        // untested
+        auto wait_fn = [](void * user_data) {
+            ggml_backend_event_t event = (ggml_backend_event_t)user_data;
+            ggml_backend_event_synchronize(event);
+        };
+
+        CUDA_CHECK(cudaLaunchHostFunc(cuda_ctx->stream(), wait_fn, event));
+#endif
+        GGML_ASSERT(false);
+    }
+}
+
+static void ggml_backend_cuda_event_synchronize(ggml_backend_event_t event) {
+    CUDA_CHECK(cudaEventSynchronize((cudaEvent_t)event->context));
+}
+
+static ggml_backend_i ggml_backend_cuda_interface = {
+    /* .get_name                = */ ggml_backend_cuda_name,
+    /* .free                    = */ ggml_backend_cuda_free,
+    /* .get_default_buffer_type = */ ggml_backend_cuda_get_default_buffer_type,
+    /* .set_tensor_async        = */ ggml_backend_cuda_set_tensor_async,
+    /* .get_tensor_async        = */ ggml_backend_cuda_get_tensor_async,
+    /* .cpy_tensor_async        = */ ggml_backend_cuda_cpy_tensor_async,
+    /* .synchronize             = */ ggml_backend_cuda_synchronize,
+    /* .graph_plan_create       = */ NULL,
+    /* .graph_plan_free         = */ NULL,
+    /* .graph_plan_update       = */ NULL,
+    /* .graph_plan_compute      = */ NULL,
+    /* .graph_compute           = */ ggml_backend_cuda_graph_compute,
+    /* .supports_op             = */ ggml_backend_cuda_supports_op,
+    /* .supports_buft           = */ ggml_backend_cuda_supports_buft,
+    /* .offload_op              = */ ggml_backend_cuda_offload_op,
+    /* .event_new               = */ ggml_backend_cuda_event_new,
+    /* .event_free              = */ ggml_backend_cuda_event_free,
+    /* .event_record            = */ ggml_backend_cuda_event_record,
+    /* .event_wait              = */ ggml_backend_cuda_event_wait,
+    /* .event_synchronize       = */ ggml_backend_cuda_event_synchronize,
+};
+
+static ggml_guid_t ggml_backend_cuda_guid() {
+    static ggml_guid guid = { 0x2c, 0xdd, 0xe8, 0x1c, 0x65, 0xb3, 0x65, 0x73, 0x6a, 0x12, 0x88, 0x61, 0x1c, 0xc9, 0xdc, 0x25 };
+    return &guid;
+}
+
+GGML_CALL ggml_backend_t ggml_backend_cuda_init(int device) {
+    if (device < 0 || device >= ggml_backend_cuda_get_device_count()) {
+        GGML_CUDA_LOG_ERROR("%s: invalid device %d\n", __func__, device);
+        return nullptr;
+    }
+
+    ggml_backend_cuda_context * ctx = new ggml_backend_cuda_context(device);
+    if (ctx == nullptr) {
+        GGML_CUDA_LOG_ERROR("%s: failed to allocate context\n", __func__);
+        return nullptr;
+    }
+
+    ggml_backend_t cuda_backend = new ggml_backend {
+        /* .guid      = */ ggml_backend_cuda_guid(),
+        /* .interface = */ ggml_backend_cuda_interface,
+        /* .context   = */ ctx
+    };
+
+    return cuda_backend;
+}
+
+GGML_CALL bool ggml_backend_is_cuda(ggml_backend_t backend) {
+    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_cuda_guid());
+}
+
+GGML_CALL int ggml_backend_cuda_get_device_count() {
+    return ggml_cuda_info().device_count;
+}
+
+GGML_CALL void ggml_backend_cuda_get_device_description(int device, char * description, size_t description_size) {
+    cudaDeviceProp prop;
+    CUDA_CHECK(cudaGetDeviceProperties(&prop, device));
+    snprintf(description, description_size, "%s", prop.name);
+}
+
+GGML_CALL void ggml_backend_cuda_get_device_memory(int device, size_t * free, size_t * total) {
+    ggml_cuda_set_device(device);
+
+    CUDA_CHECK(cudaMemGetInfo(free, total));
+}
+
+GGML_CALL bool ggml_backend_cuda_register_host_buffer(void * buffer, size_t size) {
+    if (getenv("GGML_CUDA_REGISTER_HOST") == nullptr) {
+        return false;
+    }
+
+#if CUDART_VERSION >= 11100
+    cudaError_t err = cudaHostRegister(buffer, size, cudaHostRegisterPortable | cudaHostRegisterReadOnly);
+    if (err != cudaSuccess) {
+        // clear the error
+        cudaGetLastError();
+
+        GGML_CUDA_LOG_WARN("%s: failed to register %.2f MiB of pinned memory: %s\n", __func__,
+                           size / 1024.0 / 1024.0, cudaGetErrorString(err));
+        return false;
+    }
+    return true;
+#else
+    return false;
+#endif
+}
+
+GGML_CALL void ggml_backend_cuda_unregister_host_buffer(void * buffer) {
+    if (getenv("GGML_CUDA_REGISTER_HOST") == nullptr) {
+        return;
+    }
+
+    cudaError_t err = cudaHostUnregister(buffer);
+    if (err != cudaSuccess) {
+        // clear the error
+        cudaGetLastError();
+    }
+}
+
+// backend registry
+GGML_CALL static ggml_backend_t ggml_backend_reg_cuda_init(const char * params, void * user_data) {
+    ggml_backend_t cuda_backend = ggml_backend_cuda_init((int) (intptr_t) user_data);
+    return cuda_backend;
+
+    GGML_UNUSED(params);
+}
+
+extern "C" GGML_CALL int ggml_backend_cuda_reg_devices();
+
+GGML_CALL int ggml_backend_cuda_reg_devices() {
+    int device_count = ggml_backend_cuda_get_device_count();
+    //int device_count = 1; // DEBUG: some tools require delaying CUDA initialization
+    for (int i = 0; i < device_count; i++) {
+        char name[128];
+        snprintf(name, sizeof(name), "%s%d", GGML_CUDA_NAME, i);
+        ggml_backend_register(name, ggml_backend_reg_cuda_init, ggml_backend_cuda_buffer_type(i), (void *) (intptr_t) i);
+    }
+    return device_count;
+}
diff --git a/ggml/src/ggml-cuda/acc.cu b/ggml/src/ggml-cuda/acc.cu
new file mode 100644 (file)
index 0000000..96bfe1c
--- /dev/null
@@ -0,0 +1,47 @@
+#include "acc.cuh"
+
+static __global__ void acc_f32(const float * x, const float * y, float * dst, const int ne,
+    const int ne10, const int ne11, const int ne12,
+    const int nb1, const int nb2, int offset) {
+    const int i = blockDim.x * blockIdx.x + threadIdx.x;
+    if (i >= ne) {
+        return;
+    }
+    int src1_idx = i - offset;
+    int oz = src1_idx / nb2;
+    int oy = (src1_idx - (oz * nb2)) / nb1;
+    int ox = src1_idx % nb1;
+    if (src1_idx >= 0 && ox < ne10 && oy < ne11 && oz < ne12) {
+        dst[i] = x[i] + y[ox + oy * ne10 + oz * ne10 * ne11];
+    } else {
+        dst[i] = x[i];
+    }
+}
+
+static void acc_f32_cuda(const float * x, const float * y, float * dst, const int n_elements,
+    const int ne10, const int ne11, const int ne12,
+    const int nb1, const int nb2, const int offset, cudaStream_t stream) {
+    int num_blocks = (n_elements + CUDA_ACC_BLOCK_SIZE - 1) / CUDA_ACC_BLOCK_SIZE;
+    acc_f32<<<num_blocks, CUDA_ACC_BLOCK_SIZE, 0, stream>>>(x, y, dst, n_elements, ne10, ne11, ne12, nb1, nb2, offset);
+}
+
+void ggml_cuda_op_acc(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const ggml_tensor * src1 = dst->src[1];
+    const float * src0_d = (const float *)src0->data;
+    const float * src1_d = (const float *)src1->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+    GGML_ASSERT(dst->ne[3] == 1); // just 3D tensors supported
+
+    int nb1 = dst->op_params[0] / 4; // 4 bytes of float32
+    int nb2 = dst->op_params[1] / 4; // 4 bytes of float32
+    // int nb3 = dst->op_params[2] / 4; // 4 bytes of float32 - unused
+    int offset = dst->op_params[3] / 4; // offset in bytes
+
+    acc_f32_cuda(src0_d, src1_d, dst_d, ggml_nelements(dst), src1->ne[0], src1->ne[1], src1->ne[2], nb1, nb2, offset, stream);
+}
diff --git a/ggml/src/ggml-cuda/acc.cuh b/ggml/src/ggml-cuda/acc.cuh
new file mode 100644 (file)
index 0000000..1168ea1
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_ACC_BLOCK_SIZE 256
+
+void ggml_cuda_op_acc(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/arange.cu b/ggml/src/ggml-cuda/arange.cu
new file mode 100644 (file)
index 0000000..b5e495a
--- /dev/null
@@ -0,0 +1,34 @@
+#include "arange.cuh"
+
+static __global__ void arange_f32(float * dst, const int ne0, const float start, const float step) {
+    // blockIDx.x: idx of ne0 / BLOCK_SIZE
+    int nidx = threadIdx.x + blockIdx.x * blockDim.x;
+    if (nidx >= ne0) {
+        return;
+    }
+    dst[nidx] = start + step * nidx;
+}
+
+static void arange_f32_cuda(float * dst, const int ne0, const float start, const float step, cudaStream_t stream) {
+    int num_blocks = (ne0 + CUDA_ARANGE_BLOCK_SIZE - 1) / CUDA_ARANGE_BLOCK_SIZE;
+    arange_f32<<<num_blocks, CUDA_ARANGE_BLOCK_SIZE, 0, stream>>>(dst, ne0, start,  step);
+}
+
+void ggml_cuda_op_arange(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(dst->type == GGML_TYPE_F32);
+
+    float start;
+    float stop;
+    float step;
+    memcpy(&start, (float *)dst->op_params + 0, sizeof(float));
+    memcpy(&stop,  (float *)dst->op_params + 1, sizeof(float));
+    memcpy(&step,  (float *)dst->op_params + 2, sizeof(float));
+
+    int64_t steps = (int64_t)ceil((stop - start) / step);
+    GGML_ASSERT(ggml_nelements(dst) == steps);
+
+    arange_f32_cuda(dst_d, dst->ne[0], start, step, stream);
+}
diff --git a/ggml/src/ggml-cuda/arange.cuh b/ggml/src/ggml-cuda/arange.cuh
new file mode 100644 (file)
index 0000000..41e74fd
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_ARANGE_BLOCK_SIZE 256
+
+void ggml_cuda_op_arange(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/argsort.cu b/ggml/src/ggml-cuda/argsort.cu
new file mode 100644 (file)
index 0000000..15757ca
--- /dev/null
@@ -0,0 +1,104 @@
+#include "argsort.cuh"
+
+template<typename T>
+static inline __device__ void ggml_cuda_swap(T & a, T & b) {
+    T tmp = a;
+    a = b;
+    b = tmp;
+}
+
+template<ggml_sort_order order>
+static __global__ void k_argsort_f32_i32(const float * x, int * dst, const int ncols, int ncols_pad) {
+    // bitonic sort
+    int col = threadIdx.x;
+    int row = blockIdx.y;
+
+    if (col >= ncols_pad) {
+        return;
+    }
+
+    const float * x_row = x + row * ncols;
+    extern __shared__ int dst_row[];
+
+    // initialize indices
+    dst_row[col] = col;
+
+    __syncthreads();
+
+    for (int k = 2; k <= ncols_pad; k *= 2) {
+        for (int j = k / 2; j > 0; j /= 2) {
+            int ixj = col ^ j;
+            if (ixj > col) {
+                if ((col & k) == 0) {
+                    if (dst_row[col] >= ncols ||
+                        (dst_row[ixj] < ncols && (order == GGML_SORT_ORDER_ASC ?
+                            x_row[dst_row[col]] > x_row[dst_row[ixj]] :
+                            x_row[dst_row[col]] < x_row[dst_row[ixj]]))
+                    ) {
+                        ggml_cuda_swap(dst_row[col], dst_row[ixj]);
+                    }
+                } else {
+                    if (dst_row[ixj] >= ncols ||
+                        (dst_row[col] < ncols && (order == GGML_SORT_ORDER_ASC ?
+                            x_row[dst_row[col]] < x_row[dst_row[ixj]] :
+                            x_row[dst_row[col]] > x_row[dst_row[ixj]]))
+                    ) {
+                        ggml_cuda_swap(dst_row[col], dst_row[ixj]);
+                    }
+                }
+            }
+            __syncthreads();
+        }
+    }
+
+    // copy the result to dst without the padding
+    if (col < ncols) {
+        dst[row * ncols + col] = dst_row[col];
+    }
+}
+
+static int next_power_of_2(int x) {
+    int n = 1;
+    while (n < x) {
+        n *= 2;
+    }
+    return n;
+}
+
+static void argsort_f32_i32_cuda(const float * x, int * dst, const int ncols, const int nrows, ggml_sort_order order, cudaStream_t stream) {
+    // bitonic sort requires ncols to be power of 2
+    const int ncols_pad = next_power_of_2(ncols);
+
+    const dim3 block_dims(ncols_pad, 1, 1);
+    const dim3 block_nums(1, nrows, 1);
+    const size_t shared_mem = ncols_pad * sizeof(int);
+
+    // FIXME: this limit could be raised by ~2-4x on Ampere or newer
+    GGML_ASSERT(shared_mem <= ggml_cuda_info().devices[ggml_cuda_get_device()].smpb);
+
+    if (order == GGML_SORT_ORDER_ASC) {
+        k_argsort_f32_i32<GGML_SORT_ORDER_ASC><<<block_nums, block_dims, shared_mem, stream>>>(x, dst, ncols, ncols_pad);
+    } else if (order == GGML_SORT_ORDER_DESC) {
+        k_argsort_f32_i32<GGML_SORT_ORDER_DESC><<<block_nums, block_dims, shared_mem, stream>>>(x, dst, ncols, ncols_pad);
+    } else {
+        GGML_ASSERT(false);
+    }
+}
+
+void ggml_cuda_op_argsort(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_I32);
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    const int64_t ncols = src0->ne[0];
+    const int64_t nrows = ggml_nrows(src0);
+
+    enum ggml_sort_order order = (enum ggml_sort_order) dst->op_params[0];
+
+    argsort_f32_i32_cuda(src0_d, (int *)dst_d, ncols, nrows, order, stream);
+}
diff --git a/ggml/src/ggml-cuda/argsort.cuh b/ggml/src/ggml-cuda/argsort.cuh
new file mode 100644 (file)
index 0000000..68a0015
--- /dev/null
@@ -0,0 +1,3 @@
+#include "common.cuh"
+
+void ggml_cuda_op_argsort(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/binbcast.cu b/ggml/src/ggml-cuda/binbcast.cu
new file mode 100644 (file)
index 0000000..19b08b7
--- /dev/null
@@ -0,0 +1,280 @@
+#include "binbcast.cuh"
+
+static __device__ __forceinline__ float op_repeat(const float a, const float b) {
+    return b;
+    GGML_UNUSED(a);
+}
+
+static __device__ __forceinline__ float op_add(const float a, const float b) {
+    return a + b;
+}
+
+static __device__ __forceinline__ float op_mul(const float a, const float b) {
+    return a * b;
+}
+
+static __device__ __forceinline__ float op_div(const float a, const float b) {
+    return a / b;
+}
+
+template<float (*bin_op)(const float, const float), typename src0_t, typename src1_t, typename dst_t>
+static __global__ void k_bin_bcast(const src0_t * src0, const src1_t * src1, dst_t * dst,
+        int ne0, int ne1, int ne2, int ne3,
+        int ne10, int ne11, int ne12, int ne13,
+        /*int s0, */ int s1,  int s2,  int s3,
+        /*int s00,*/ int s01, int s02, int s03,
+        /*int s10,*/ int s11, int s12, int s13) {
+    const int i0s = blockDim.x*blockIdx.x + threadIdx.x;
+    const int i1 = (blockDim.y*blockIdx.y + threadIdx.y);
+    const int i2 = (blockDim.z*blockIdx.z + threadIdx.z) / ne3;
+    const int i3 = (blockDim.z*blockIdx.z + threadIdx.z) % ne3;
+
+    if (i0s >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) {
+        return;
+    }
+
+    const int i11 = i1 % ne11;
+    const int i12 = i2 % ne12;
+    const int i13 = i3 % ne13;
+
+    const size_t i_src0 =  i3*s03 +  i2*s02 +  i1*s01;
+    const size_t i_src1 = i13*s13 + i12*s12 + i11*s11;
+    const size_t i_dst  =  i3*s3  +  i2*s2  +  i1*s1;
+
+    const src0_t * src0_row = src0 + i_src0;
+    const src1_t * src1_row = src1 + i_src1;
+    dst_t * dst_row = dst + i_dst;
+
+    for (int i0 = i0s; i0 < ne0; i0 += blockDim.x*gridDim.x) {
+        const int i10 = i0 % ne10;
+        dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]);
+    }
+}
+
+template<float (*bin_op)(const float, const float), typename src0_t, typename src1_t, typename dst_t>
+static __global__ void k_bin_bcast_unravel(const src0_t * src0, const src1_t * src1, dst_t * dst,
+        int ne0, int ne1, int ne2, int ne3,
+        int ne10, int ne11, int ne12, int ne13,
+        /*int s0, */ int s1,  int s2,  int s3,
+        /*int s00,*/ int s01, int s02, int s03,
+        /*int s10,*/ int s11, int s12, int s13) {
+
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    const int i3 = i/(ne2*ne1*ne0);
+    const int i2 = (i/(ne1*ne0)) % ne2;
+    const int i1 = (i/ne0) % ne1;
+    const int i0 = i % ne0;
+
+    if (i0 >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) {
+        return;
+    }
+
+    const int i11 = i1 % ne11;
+    const int i12 = i2 % ne12;
+    const int i13 = i3 % ne13;
+
+    const size_t i_src0 =  i3*s03 +  i2*s02 +  i1*s01;
+    const size_t i_src1 = i13*s13 + i12*s12 + i11*s11;
+    const size_t i_dst  =  i3*s3  +  i2*s2  +  i1*s1;
+
+    const src0_t * src0_row = src0 + i_src0;
+    const src1_t * src1_row = src1 + i_src1;
+    dst_t * dst_row = dst + i_dst;
+
+    const int i10 = i0 % ne10;
+    dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]);
+}
+
+template<float (*bin_op)(const float, const float)>
+struct bin_bcast_cuda {
+    template<typename src0_t, typename src1_t, typename dst_t>
+    void operator()(const struct ggml_tensor * src0, const struct ggml_tensor * src1, struct ggml_tensor * dst,
+            const src0_t * src0_dd, const src1_t * src1_dd, dst_t * dst_dd,
+            cudaStream_t stream) {
+
+        GGML_TENSOR_BINARY_OP_LOCALS
+
+        int nr0 = ne10/ne0;
+        int nr1 = ne11/ne1;
+        int nr2 = ne12/ne2;
+        int nr3 = ne13/ne3;
+
+        int nr[4] = { nr0, nr1, nr2, nr3 };
+
+        // collapse dimensions until first broadcast dimension
+        int64_t cne[] = {ne0, ne1, ne2, ne3};
+        int64_t cne0[] = {ne00, ne01, ne02, ne03};
+        int64_t cne1[] = {ne10, ne11, ne12, ne13};
+
+        size_t cnb[] = {nb0, nb1, nb2, nb3};
+        size_t cnb0[] = {nb00, nb01, nb02, nb03};
+        size_t cnb1[] = {nb10, nb11, nb12, nb13};
+
+        auto collapse = [](int64_t cne[]) {
+            cne[0] *= cne[1];
+            cne[1] = cne[2];
+            cne[2] = cne[3];
+            cne[3] = 1;
+        };
+
+        auto collapse_nb = [](size_t cnb[], const int64_t cne[]) {
+            cnb[1] *= cne[1];
+            cnb[2] *= cne[2];
+            cnb[3] *= cne[3];
+        };
+
+        if (ggml_is_contiguous(src0) && ggml_is_contiguous(src1) && ggml_is_contiguous(dst)) {
+            for (int i = 0; i < 4; i++) {
+                if (nr[i] != 1) {
+                    break;
+                }
+                if (i > 0) {
+                    collapse_nb(cnb, cne);
+                    collapse_nb(cnb0, cne0);
+                    collapse_nb(cnb1, cne1);
+                    collapse(cne);
+                    collapse(cne0);
+                    collapse(cne1);
+                }
+            }
+        }
+
+        {
+            int64_t ne0 = cne[0];
+            int64_t ne1 = cne[1];
+            int64_t ne2 = cne[2];
+            int64_t ne3 = cne[3];
+
+            //int64_t ne00 = cne0[0]; GGML_UNUSED(ne00);
+            //int64_t ne01 = cne0[1]; GGML_UNUSED(ne01);
+            //int64_t ne02 = cne0[2]; GGML_UNUSED(ne02);
+            //int64_t ne03 = cne0[3]; GGML_UNUSED(ne03);
+
+            int64_t ne10 = cne1[0];
+            int64_t ne11 = cne1[1];
+            int64_t ne12 = cne1[2];
+            int64_t ne13 = cne1[3];
+
+            size_t nb0 = cnb[0];
+            size_t nb1 = cnb[1];
+            size_t nb2 = cnb[2];
+            size_t nb3 = cnb[3];
+
+            size_t nb00 = cnb0[0];
+            size_t nb01 = cnb0[1];
+            size_t nb02 = cnb0[2];
+            size_t nb03 = cnb0[3];
+
+            size_t nb10 = cnb1[0];
+            size_t nb11 = cnb1[1];
+            size_t nb12 = cnb1[2];
+            size_t nb13 = cnb1[3];
+
+            size_t s0 = nb0 / sizeof(dst_t);
+            size_t s1 = nb1 / sizeof(dst_t);
+            size_t s2 = nb2 / sizeof(dst_t);
+            size_t s3 = nb3 / sizeof(dst_t);
+
+            size_t s10 = nb10 / sizeof(src1_t);
+            size_t s11 = nb11 / sizeof(src1_t);
+            size_t s12 = nb12 / sizeof(src1_t);
+            size_t s13 = nb13 / sizeof(src1_t);
+
+            size_t s00 = nb00 / sizeof(src0_t);
+            size_t s01 = nb01 / sizeof(src0_t);
+            size_t s02 = nb02 / sizeof(src0_t);
+            size_t s03 = nb03 / sizeof(src0_t);
+
+            GGML_ASSERT(nb0 % sizeof(dst_t) == 0);
+            GGML_ASSERT(nb1 % sizeof(dst_t) == 0);
+            GGML_ASSERT(nb2 % sizeof(dst_t) == 0);
+            GGML_ASSERT(nb3 % sizeof(dst_t) == 0);
+
+            GGML_ASSERT(nb00 % sizeof(src0_t) == 0);
+            GGML_ASSERT(nb01 % sizeof(src0_t) == 0);
+            GGML_ASSERT(nb02 % sizeof(src0_t) == 0);
+            GGML_ASSERT(nb03 % sizeof(src0_t) == 0);
+
+            GGML_ASSERT(nb10 % sizeof(src1_t) == 0);
+            GGML_ASSERT(nb11 % sizeof(src1_t) == 0);
+            GGML_ASSERT(nb12 % sizeof(src1_t) == 0);
+            GGML_ASSERT(nb13 % sizeof(src1_t) == 0);
+
+            GGML_ASSERT(s0 == 1);
+            GGML_ASSERT(s00 == 1);
+            GGML_ASSERT(s10 == 1);
+
+            const int block_size = 128;
+
+            int64_t hne0 = std::max(ne0/2LL, 1LL);
+
+            dim3 block_dims;
+            block_dims.x = std::min<unsigned int>(hne0, block_size);
+            block_dims.y = std::min<unsigned int>(ne1, block_size / block_dims.x);
+            block_dims.z = std::min(std::min<unsigned int>(ne2*ne3, block_size / block_dims.x / block_dims.y), 64U);
+
+            dim3 block_nums(
+                (hne0 + block_dims.x - 1) / block_dims.x,
+                (ne1 + block_dims.y - 1) / block_dims.y,
+                (ne2*ne3 + block_dims.z - 1) / block_dims.z
+            );
+
+            if (block_nums.z > 65535) {
+                // this is the maximum number of blocks in z dimension, fallback to 1D grid kernel
+                int block_num = (ne0*ne1*ne2*ne3 + block_size - 1) / block_size;
+                k_bin_bcast_unravel<bin_op><<<block_num, block_size, 0, stream>>>(
+                    src0_dd, src1_dd, dst_dd,
+                    ne0, ne1, ne2, ne3,
+                    ne10, ne11, ne12, ne13,
+                    /* s0, */ s1, s2, s3,
+                    /* s00, */ s01, s02, s03,
+                    /* s10, */ s11, s12, s13);
+            } else {
+                k_bin_bcast<bin_op><<<block_nums, block_dims, 0, stream>>>(
+                    src0_dd, src1_dd, dst_dd,
+                    ne0, ne1, ne2, ne3,
+                    ne10, ne11, ne12, ne13,
+                    /* s0, */ s1, s2, s3,
+                    /* s00, */ s01, s02, s03,
+                    /* s10, */ s11, s12, s13);
+            }
+        }
+    }
+};
+
+template<class op>
+static void ggml_cuda_op_bin_bcast(
+    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst,
+    const void * src0_dd, const void * src1_dd, void * dst_dd, cudaStream_t stream) {
+
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+        op()(src0, src1, dst, (const float *)src0_dd, (const float *)src1_dd, (float *)dst_dd, stream);
+    } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) {
+        op()(src0, src1, dst, (const half *) src0_dd, (const float *)src1_dd, (half *) dst_dd, stream);
+    } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) {
+        op()(src0, src1, dst, (const half *) src0_dd, (const float *)src1_dd, (float *)dst_dd, stream);
+    } else {
+        fprintf(stderr, "%s: unsupported types: dst: %s, src0: %s, src1: %s\n", __func__,
+            ggml_type_name(dst->type), ggml_type_name(src0->type), ggml_type_name(src1->type));
+        GGML_ASSERT(false);
+    }
+}
+
+void ggml_cuda_op_repeat(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    ggml_cuda_op_bin_bcast<bin_bcast_cuda<op_repeat>>(dst, dst->src[0], dst, nullptr, dst->src[0]->data, dst->data, ctx.stream());
+}
+
+void ggml_cuda_op_add(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    ggml_cuda_op_bin_bcast<bin_bcast_cuda<op_add>>(dst->src[0], dst->src[1], dst, dst->src[0]->data, dst->src[1]->data, dst->data, ctx.stream());
+}
+
+void ggml_cuda_op_mul(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    ggml_cuda_op_bin_bcast<bin_bcast_cuda<op_mul>>(dst->src[0], dst->src[1], dst, dst->src[0]->data, dst->src[1]->data, dst->data, ctx.stream());
+}
+
+void ggml_cuda_op_div(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    ggml_cuda_op_bin_bcast<bin_bcast_cuda<op_div>>(dst->src[0], dst->src[1], dst, dst->src[0]->data, dst->src[1]->data, dst->data, ctx.stream());
+}
diff --git a/ggml/src/ggml-cuda/binbcast.cuh b/ggml/src/ggml-cuda/binbcast.cuh
new file mode 100644 (file)
index 0000000..4f63d63
--- /dev/null
@@ -0,0 +1,6 @@
+#include "common.cuh"
+
+void ggml_cuda_op_repeat(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+void ggml_cuda_op_add(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+void ggml_cuda_op_mul(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+void ggml_cuda_op_div(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/clamp.cu b/ggml/src/ggml-cuda/clamp.cu
new file mode 100644 (file)
index 0000000..8009a3e
--- /dev/null
@@ -0,0 +1,34 @@
+#include "clamp.cuh"
+
+static __global__ void clamp_f32(const float * x, float * dst, const float min, const float max, const int k) {
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+
+    dst[i] = x[i] < min ? min : (x[i] > max ? max : x[i]);
+}
+
+static void clamp_f32_cuda(const float * x, float * dst, const float min, const float max, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_CLAMP_BLOCK_SIZE - 1) / CUDA_CLAMP_BLOCK_SIZE;
+    clamp_f32<<<num_blocks, CUDA_CLAMP_BLOCK_SIZE, 0, stream>>>(x, dst, min, max, k);
+}
+
+
+void ggml_cuda_op_clamp(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    float min;
+    float max;
+    memcpy(&min, dst->op_params, sizeof(float));
+    memcpy(&max, (float *) dst->op_params + 1, sizeof(float));
+
+    clamp_f32_cuda(src0_d, dst_d, min, max, ggml_nelements(src0), stream);
+}
diff --git a/ggml/src/ggml-cuda/clamp.cuh b/ggml/src/ggml-cuda/clamp.cuh
new file mode 100644 (file)
index 0000000..7f9559d
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_CLAMP_BLOCK_SIZE 256
+
+void ggml_cuda_op_clamp(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/common.cuh b/ggml/src/ggml-cuda/common.cuh
new file mode 100644 (file)
index 0000000..8d00db6
--- /dev/null
@@ -0,0 +1,821 @@
+#pragma once
+
+#include "ggml.h"
+#include "ggml-cuda.h"
+
+#include <memory>
+
+#if defined(GGML_USE_HIPBLAS)
+#define GGML_COMMON_DECL_HIP
+#define GGML_COMMON_IMPL_HIP
+#else
+#define GGML_COMMON_DECL_CUDA
+#define GGML_COMMON_IMPL_CUDA
+#endif
+#include "ggml-common.h"
+
+#include <cstdio>
+#include <array>
+#include <cassert>
+#include <cfloat>
+#include <string>
+#include <vector>
+
+#if defined(GGML_USE_HIPBLAS)
+#include <hip/hip_runtime.h>
+#include <hipblas/hipblas.h>
+#include <hip/hip_fp16.h>
+#ifdef __HIP_PLATFORM_AMD__
+// for rocblas_initialize()
+#include "rocblas/rocblas.h"
+#endif // __HIP_PLATFORM_AMD__
+#define CUBLAS_COMPUTE_16F HIPBLAS_R_16F
+#define CUBLAS_COMPUTE_32F HIPBLAS_R_32F
+#define CUBLAS_COMPUTE_32F_FAST_16F HIPBLAS_R_32F
+#define CUBLAS_GEMM_DEFAULT HIPBLAS_GEMM_DEFAULT
+#define CUBLAS_GEMM_DEFAULT_TENSOR_OP HIPBLAS_GEMM_DEFAULT
+#define CUBLAS_OP_N HIPBLAS_OP_N
+#define CUBLAS_OP_T HIPBLAS_OP_T
+#define CUBLAS_STATUS_SUCCESS HIPBLAS_STATUS_SUCCESS
+#define CUBLAS_TF32_TENSOR_OP_MATH 0
+#define CUDA_R_16F  HIPBLAS_R_16F
+#define CUDA_R_32F  HIPBLAS_R_32F
+#define __shfl_xor_sync(mask, var, laneMask, width) __shfl_xor(var, laneMask, width)
+#define cublasComputeType_t hipblasDatatype_t //deprecated, new hipblasComputeType_t not in 5.6
+#define cublasCreate hipblasCreate
+#define cublasDestroy hipblasDestroy
+#define cublasGemmEx hipblasGemmEx
+#define cublasGemmBatchedEx hipblasGemmBatchedEx
+#define cublasGemmStridedBatchedEx hipblasGemmStridedBatchedEx
+#define cublasHandle_t hipblasHandle_t
+#define cublasSetMathMode(handle, mode) CUBLAS_STATUS_SUCCESS
+#define cublasSetStream hipblasSetStream
+#define cublasSgemm hipblasSgemm
+#define cublasStatus_t hipblasStatus_t
+#define cudaDataType_t hipblasDatatype_t //deprecated, new hipblasDatatype not in 5.6
+#define cudaDeviceCanAccessPeer hipDeviceCanAccessPeer
+#define cudaDeviceDisablePeerAccess hipDeviceDisablePeerAccess
+#define cudaDeviceEnablePeerAccess hipDeviceEnablePeerAccess
+#define cudaDeviceProp hipDeviceProp_t
+#define cudaDeviceSynchronize hipDeviceSynchronize
+#define cudaError_t hipError_t
+#define cudaErrorPeerAccessAlreadyEnabled hipErrorPeerAccessAlreadyEnabled
+#define cudaErrorPeerAccessNotEnabled hipErrorPeerAccessNotEnabled
+#define cudaEventCreateWithFlags hipEventCreateWithFlags
+#define cudaEventDisableTiming hipEventDisableTiming
+#define cudaEventRecord hipEventRecord
+#define cudaEventSynchronize hipEventSynchronize
+#define cudaEvent_t hipEvent_t
+#define cudaEventDestroy hipEventDestroy
+#define cudaFree hipFree
+#define cudaFreeHost hipHostFree
+#define cudaGetDevice hipGetDevice
+#define cudaGetDeviceCount hipGetDeviceCount
+#define cudaGetDeviceProperties hipGetDeviceProperties
+#define cudaGetErrorString hipGetErrorString
+#define cudaGetLastError hipGetLastError
+#define cudaHostRegister hipHostRegister
+#define cudaHostRegisterPortable hipHostRegisterPortable
+#define cudaHostRegisterReadOnly hipHostRegisterReadOnly
+#define cudaHostUnregister hipHostUnregister
+#define cudaLaunchHostFunc hipLaunchHostFunc
+#define cudaMalloc hipMalloc
+#define cudaMallocHost(ptr, size) hipHostMalloc(ptr, size, hipHostMallocDefault)
+#define cudaMemcpy hipMemcpy
+#define cudaMemcpyAsync hipMemcpyAsync
+#define cudaMemcpyPeerAsync hipMemcpyPeerAsync
+#define cudaMemcpy2DAsync hipMemcpy2DAsync
+#define cudaMemcpyDeviceToDevice hipMemcpyDeviceToDevice
+#define cudaMemcpyDeviceToHost hipMemcpyDeviceToHost
+#define cudaMemcpyHostToDevice hipMemcpyHostToDevice
+#define cudaMemcpyKind hipMemcpyKind
+#define cudaMemset hipMemset
+#define cudaMemsetAsync hipMemsetAsync
+#define cudaMemGetInfo hipMemGetInfo
+#define cudaOccupancyMaxPotentialBlockSize hipOccupancyMaxPotentialBlockSize
+#define cudaSetDevice hipSetDevice
+#define cudaStreamCreateWithFlags hipStreamCreateWithFlags
+#define cudaStreamDestroy hipStreamDestroy
+#define cudaStreamFireAndForget hipStreamFireAndForget
+#define cudaStreamNonBlocking hipStreamNonBlocking
+#define cudaStreamPerThread hipStreamPerThread
+#define cudaStreamSynchronize hipStreamSynchronize
+#define cudaStreamWaitEvent(stream, event, flags) hipStreamWaitEvent(stream, event, flags)
+#define cudaStream_t hipStream_t
+#define cudaSuccess hipSuccess
+#define __trap abort
+#define CUBLAS_STATUS_SUCCESS HIPBLAS_STATUS_SUCCESS
+#define CUBLAS_STATUS_NOT_INITIALIZED HIPBLAS_STATUS_NOT_INITIALIZED
+#define CUBLAS_STATUS_ALLOC_FAILED HIPBLAS_STATUS_ALLOC_FAILED
+#define CUBLAS_STATUS_INVALID_VALUE HIPBLAS_STATUS_INVALID_VALUE
+#define CUBLAS_STATUS_ARCH_MISMATCH HIPBLAS_STATUS_ARCH_MISMATCH
+#define CUBLAS_STATUS_MAPPING_ERROR HIPBLAS_STATUS_MAPPING_ERROR
+#define CUBLAS_STATUS_EXECUTION_FAILED HIPBLAS_STATUS_EXECUTION_FAILED
+#define CUBLAS_STATUS_INTERNAL_ERROR HIPBLAS_STATUS_INTERNAL_ERROR
+#define CUBLAS_STATUS_NOT_SUPPORTED HIPBLAS_STATUS_NOT_SUPPORTED
+#else
+#include <cuda_runtime.h>
+#include <cuda.h>
+#include <cublas_v2.h>
+#include <cuda_fp16.h>
+
+#if CUDART_VERSION < 11020
+#define CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED
+#define CUBLAS_TF32_TENSOR_OP_MATH CUBLAS_TENSOR_OP_MATH
+#define CUBLAS_COMPUTE_16F CUDA_R_16F
+#define CUBLAS_COMPUTE_32F CUDA_R_32F
+#define cublasComputeType_t cudaDataType_t
+#endif // CUDART_VERSION < 11020
+
+#endif // defined(GGML_USE_HIPBLAS)
+
+#define STRINGIZE_IMPL(...) #__VA_ARGS__
+#define STRINGIZE(...) STRINGIZE_IMPL(__VA_ARGS__)
+
+#define WARP_SIZE 32
+#define CUDART_HMAX   11070 // CUDA 11.7, min. ver. for which __hmax and __hmax2 are known to work (may be higher than needed)
+#define CUDART_HMASK  12000 // CUDA 12.0, min. ver. for half2 -> uint mask comparisons
+
+#define CC_PASCAL     600
+#define MIN_CC_DP4A   610 // minimum compute capability for __dp4a, an intrinsic for byte-wise dot products
+#define CC_VOLTA      700
+#define CC_TURING     750
+#define CC_AMPERE     800
+#define CC_OFFSET_AMD 1000000
+#define CC_RDNA1      (CC_OFFSET_AMD + 1010)
+#define CC_RDNA2      (CC_OFFSET_AMD + 1030)
+#define CC_RDNA3      (CC_OFFSET_AMD + 1100)
+
+#define MATRIX_ROW_PADDING 512 // last row of quant. matrices is a multiple of this to avoid out-of-bounds memory accesses
+
+#if defined(_MSC_VER)
+#pragma warning(disable: 4244 4267) // possible loss of data
+#endif
+
+#define GGML_CUDA_MAX_STREAMS 8
+
+[[noreturn]]
+void ggml_cuda_error(const char * stmt, const char * func, const char * file, int line, const char * msg);
+
+#define CUDA_CHECK_GEN(err, success, error_fn)                                      \
+     do {                                                                           \
+        auto err_ = (err);                                                          \
+        if (err_ != (success)) {                                                    \
+            ggml_cuda_error(#err, __func__, __FILE__, __LINE__, error_fn(err_));    \
+        }                                                                           \
+    } while (0)
+
+#define CUDA_CHECK(err) CUDA_CHECK_GEN(err, cudaSuccess, cudaGetErrorString)
+
+#if CUDART_VERSION >= 12000
+    static const char * cublas_get_error_str(const cublasStatus_t err) {
+        return cublasGetStatusString(err);
+    }
+#else
+    static const char * cublas_get_error_str(const cublasStatus_t err) {
+        switch (err) {
+            case CUBLAS_STATUS_SUCCESS: return "CUBLAS_STATUS_SUCCESS";
+            case CUBLAS_STATUS_NOT_INITIALIZED: return "CUBLAS_STATUS_NOT_INITIALIZED";
+            case CUBLAS_STATUS_ALLOC_FAILED: return "CUBLAS_STATUS_ALLOC_FAILED";
+            case CUBLAS_STATUS_INVALID_VALUE: return "CUBLAS_STATUS_INVALID_VALUE";
+            case CUBLAS_STATUS_ARCH_MISMATCH: return "CUBLAS_STATUS_ARCH_MISMATCH";
+            case CUBLAS_STATUS_MAPPING_ERROR: return "CUBLAS_STATUS_MAPPING_ERROR";
+            case CUBLAS_STATUS_EXECUTION_FAILED: return "CUBLAS_STATUS_EXECUTION_FAILED";
+            case CUBLAS_STATUS_INTERNAL_ERROR: return "CUBLAS_STATUS_INTERNAL_ERROR";
+            case CUBLAS_STATUS_NOT_SUPPORTED: return "CUBLAS_STATUS_NOT_SUPPORTED";
+            default: return "unknown error";
+        }
+    }
+#endif // CUDART_VERSION >= 12000
+
+#define CUBLAS_CHECK(err) CUDA_CHECK_GEN(err, CUBLAS_STATUS_SUCCESS, cublas_get_error_str)
+
+#if !defined(GGML_USE_HIPBLAS)
+static const char * cu_get_error_str(CUresult err) {
+    const char * err_str;
+    cuGetErrorString(err, &err_str);
+    return err_str;
+}
+#define CU_CHECK(err) CUDA_CHECK_GEN(err, CUDA_SUCCESS, cu_get_error_str)
+#endif
+
+#if CUDART_VERSION >= 11100
+#define GGML_CUDA_ASSUME(x) __builtin_assume(x)
+#else
+#define GGML_CUDA_ASSUME(x)
+#endif // CUDART_VERSION >= 11100
+
+#ifdef GGML_CUDA_F16
+typedef half dfloat; // dequantize float
+typedef half2 dfloat2;
+#else
+typedef float dfloat; // dequantize float
+typedef float2 dfloat2;
+#endif //GGML_CUDA_F16
+
+#if defined(GGML_USE_HIPBLAS)
+#define __CUDA_ARCH__ 1300
+
+#if defined(__gfx1100__) || defined(__gfx1101__) || defined(__gfx1102__) || defined(__gfx1103__) || \
+    defined(__gfx1150__) || defined(__gfx1151__)
+#define RDNA3
+#endif
+
+#if defined(__gfx1030__) || defined(__gfx1031__) || defined(__gfx1032__) || defined(__gfx1033__) || \
+    defined(__gfx1034__) || defined(__gfx1035__) || defined(__gfx1036__) || defined(__gfx1037__)
+#define RDNA2
+#endif
+
+#ifndef __has_builtin
+    #define __has_builtin(x) 0
+#endif
+
+typedef int8_t int8x4_t __attribute__((ext_vector_type(4)));
+typedef uint8_t uint8x4_t __attribute__((ext_vector_type(4)));
+static __device__ __forceinline__ int __vsubss4(const int a, const int b) {
+    const int8x4_t va = reinterpret_cast<const int8x4_t&>(a);
+    const int8x4_t vb = reinterpret_cast<const int8x4_t&>(b);
+#if __has_builtin(__builtin_elementwise_sub_sat)
+    const int8x4_t c = __builtin_elementwise_sub_sat(va, vb);
+    return reinterpret_cast<const int &>(c);
+#else
+    int8x4_t c;
+    int16_t tmp;
+#pragma unroll
+    for (int i = 0; i < 4; i++) {
+        tmp = va[i] - vb[i];
+        if(tmp > std::numeric_limits<int8_t>::max()) tmp = std::numeric_limits<int8_t>::max();
+        if(tmp < std::numeric_limits<int8_t>::min()) tmp = std::numeric_limits<int8_t>::min();
+        c[i] = tmp;
+    }
+    return reinterpret_cast<int &>(c);
+#endif // __has_builtin(__builtin_elementwise_sub_sat)
+}
+
+static __device__ __forceinline__ int __vsub4(const int a, const int b) {
+    return __vsubss4(a, b);
+}
+
+static __device__ __forceinline__ unsigned int __vcmpeq4(unsigned int a, unsigned int b) {
+    const uint8x4_t& va = reinterpret_cast<const uint8x4_t&>(a);
+    const uint8x4_t& vb = reinterpret_cast<const uint8x4_t&>(b);
+    unsigned int c;
+    uint8x4_t& vc = reinterpret_cast<uint8x4_t&>(c);
+#pragma unroll
+    for (int i = 0; i < 4; ++i) {
+        vc[i] = va[i] == vb[i] ? 0xff : 0x00;
+    }
+    return c;
+}
+
+static __device__ __forceinline__ int __dp4a(const int a, const int b, int c) {
+#if defined(__gfx906__) || defined(__gfx908__) || defined(__gfx90a__) || defined(__gfx1030__)
+    c = __builtin_amdgcn_sdot4(a, b, c, false);
+#elif defined(RDNA3)
+    c = __builtin_amdgcn_sudot4( true, a, true, b, c, false);
+#elif defined(__gfx1010__) || defined(__gfx900__)
+    int tmp1;
+    int tmp2;
+    asm("\n \
+        v_mul_i32_i24 %1, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:BYTE_0 \n \
+        v_mul_i32_i24 %2, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1 \n \
+        v_add3_u32 %0, %1, %2, %0 \n \
+        v_mul_i32_i24 %1, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_2 src1_sel:BYTE_2 \n \
+        v_mul_i32_i24 %2, sext(%3), sext(%4) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_3 src1_sel:BYTE_3 \n \
+        v_add3_u32 %0, %1, %2, %0 \n \
+        "
+        : "+v"(c), "=&v"(tmp1), "=&v"(tmp2)
+        : "v"(a), "v"(b)
+    );
+#else
+    const int8x4_t va = reinterpret_cast<const int8x4_t&>(a);
+    const int8x4_t vb = reinterpret_cast<const int8x4_t&>(b);
+    c += va[0] * vb[0] + va[1] * vb[1] + va[2] * vb[2] + va[3] * vb[3];
+#endif
+    return c;
+}
+
+#if defined(__HIP_PLATFORM_AMD__) && HIP_VERSION < 50600000
+// __shfl_xor() for half2 was added in ROCm 5.6
+static __device__ __forceinline__ half2 __shfl_xor(half2 var, int laneMask, int width) {
+    typedef union half2_b32 {
+        half2 val;
+        int   b32;
+    } half2_b32_t;
+    half2_b32_t tmp;
+    tmp.val = var;
+    tmp.b32 = __shfl_xor(tmp.b32, laneMask, width);
+    return tmp.val;
+}
+#endif // defined(__HIP_PLATFORM_AMD__) && HIP_VERSION < 50600000
+#endif // defined(GGML_USE_HIPBLAS)
+
+#if (defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) || __CUDA_ARCH__ >= CC_PASCAL
+#define FP16_AVAILABLE
+#endif // (defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) || __CUDA_ARCH__ >= CC_PASCAL
+
+#if defined(FP16_AVAILABLE) && __CUDA_ARCH__ != 610
+#define FAST_FP16_AVAILABLE
+#endif // defined(FP16_AVAILABLE) && __CUDA_ARCH__ != 610
+
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_VOLTA
+#define FP16_MMA_AVAILABLE
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_VOLTA
+
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_TURING
+#define INT8_MMA_AVAILABLE
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_TURING
+
+static constexpr bool fast_fp16_available(const int cc) {
+    return cc >= CC_PASCAL && cc != 610;
+}
+
+static constexpr bool fp16_mma_available(const int cc) {
+    return cc < CC_OFFSET_AMD && cc >= CC_VOLTA;
+}
+
+static constexpr bool int8_mma_available(const int cc) {
+    return cc < CC_OFFSET_AMD && cc >= CC_TURING;
+}
+
+[[noreturn]]
+static __device__ void no_device_code(
+    const char * file_name, const int line, const char * function_name, const int arch, const char * arch_list) {
+
+#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+    printf("%s:%d: ERROR: HIP kernel %s has no device code compatible with HIP arch %d.\n",
+           file_name, line, function_name, arch);
+    GGML_UNUSED(arch_list);
+#else
+    printf("%s:%d: ERROR: CUDA kernel %s has no device code compatible with CUDA arch %d. ggml-cuda.cu was compiled for: %s\n",
+           file_name, line, function_name, arch, arch_list);
+#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+    __trap();
+
+    GGML_UNUSED(no_device_code); // suppress unused function warning
+}
+
+#ifdef __CUDA_ARCH__
+#define NO_DEVICE_CODE no_device_code(__FILE__, __LINE__, __FUNCTION__, __CUDA_ARCH__, STRINGIZE(__CUDA_ARCH_LIST__))
+#else
+#define NO_DEVICE_CODE //GGML_ASSERT(false && "NO_DEVICE_CODE not valid in host code.")
+#endif // __CUDA_ARCH__
+
+static __device__ __forceinline__ float warp_reduce_sum(float x) {
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        x += __shfl_xor_sync(0xffffffff, x, mask, 32);
+    }
+    return x;
+}
+
+static __device__ __forceinline__ float2 warp_reduce_sum(float2 a) {
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        a.x += __shfl_xor_sync(0xffffffff, a.x, mask, 32);
+        a.y += __shfl_xor_sync(0xffffffff, a.y, mask, 32);
+    }
+    return a;
+}
+
+static __device__ __forceinline__ half2 warp_reduce_sum(half2 a) {
+#ifdef FP16_AVAILABLE
+
+#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        const half2 a_other = __shfl_xor_sync(0xffffffff, a, mask, 32);
+        reinterpret_cast<half&>(a.x) +=  __low2half(a_other);
+        reinterpret_cast<half&>(a.y) += __high2half(a_other);
+    }
+    return a;
+#else
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        a = __hadd2(a, __shfl_xor_sync(0xffffffff, a, mask, 32));
+    }
+    return a;
+#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+
+#else
+    NO_DEVICE_CODE;
+    return a;
+#endif // FP16_AVAILABLE
+}
+
+static __device__ __forceinline__ float warp_reduce_max(float x) {
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        x = fmaxf(x, __shfl_xor_sync(0xffffffff, x, mask, 32));
+    }
+    return x;
+}
+
+static __device__ __forceinline__ half ggml_cuda_hmax(const half a, const half b) {
+#ifdef FP16_AVAILABLE
+
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && CUDART_VERSION < CUDART_HMAX
+    return __float2half(fmaxf(__half2float(a), __half2float(b)));
+#else
+    return __hmax(a, b);
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && CUDART_VERSION < CUDART_HMAX
+
+#else
+   NO_DEVICE_CODE;
+   GGML_UNUSED(b);
+   return a;
+#endif // FP16_AVAILABLE
+}
+
+static __device__ __forceinline__ half2 ggml_cuda_hmax2(const half2 a, const half2 b) {
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+
+#if CUDART_VERSION >= CUDART_HMAX
+    return __hmax2(a, b);
+#else
+    half2 ret;
+    reinterpret_cast<half&>(ret.x) = __float2half(fmaxf( __low2float(a),  __low2float(b)));
+    reinterpret_cast<half&>(ret.y) = __float2half(fmaxf(__high2float(a), __high2float(b)));
+    return ret;
+#endif // CUDART_VERSION >= CUDART_HMAX
+
+#else
+    GGML_UNUSED(a);
+    GGML_UNUSED(b);
+    NO_DEVICE_CODE;
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+}
+
+static __device__ __forceinline__ half2 warp_reduce_max(half2 x) {
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_PASCAL
+#pragma unroll
+   for (int mask = 16; mask > 0; mask >>= 1) {
+       x = ggml_cuda_hmax2(x, __shfl_xor_sync(0xffffffff, x, mask, 32));
+   }
+   return x;
+#else
+   GGML_UNUSED(x);
+   NO_DEVICE_CODE;
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) && __CUDA_ARCH__ >= CC_PASCAL
+}
+
+#if CUDART_VERSION < CUDART_HMASK
+static __device__ __forceinline__ uint32_t __hgt2_mask(const half2 a, const half2 b) {
+    const uint32_t mask_low  = 0x0000FFFF * (float( __low2half(a)) > float( __low2half(b)));
+    const uint32_t mask_high = 0xFFFF0000 * (float(__high2half(a)) > float(__high2half(b)));
+    return mask_low | mask_high;
+}
+#endif // CUDART_VERSION < 12000
+
+// TODO: move to ggml-common.h
+static const __device__ int8_t kvalues_iq4nl[16] = {-127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113};
+
+typedef void (*dequantize_kernel_t)(const void * vx, const int64_t ib, const int iqs, dfloat2 & v);
+
+static __device__ __forceinline__ float get_alibi_slope(
+    const float max_bias, const uint32_t h, const uint32_t n_head_log2, const float m0, const float m1
+) {
+    if (max_bias <= 0.0f) {
+        return 1.0f;
+    }
+    const float base = h < n_head_log2 ? m0 : m1;
+    const int   exph = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
+
+    return powf(base, exph);
+}
+
+template <ggml_type type>
+struct ggml_cuda_type_traits;
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_F16> {
+    static constexpr int qk = 1;
+    static constexpr int qr = 1;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_Q4_0> {
+    static constexpr int qk = QK4_0;
+    static constexpr int qr = QR4_0;
+    static constexpr int qi = QI4_0;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_Q4_1> {
+    static constexpr int qk = QK4_1;
+    static constexpr int qr = QR4_1;
+    static constexpr int qi = QI4_1;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_Q5_0> {
+    static constexpr int qk = QK5_0;
+    static constexpr int qr = QR5_0;
+    static constexpr int qi = QI5_0;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_Q5_1> {
+    static constexpr int qk = QK5_1;
+    static constexpr int qr = QR5_1;
+    static constexpr int qi = QI5_1;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_Q8_0> {
+    static constexpr int qk = QK8_0;
+    static constexpr int qr = QR8_0;
+    static constexpr int qi = QI8_0;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_Q2_K> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR2_K;
+    static constexpr int qi = QI2_K;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_Q3_K> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR3_K;
+    static constexpr int qi = QI3_K;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_Q4_K> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR4_K;
+    static constexpr int qi = QI4_K;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_Q5_K> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR5_K;
+    static constexpr int qi = QI5_K;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_Q6_K> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR6_K;
+    static constexpr int qi = QI6_K;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_IQ2_XXS> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR2_XXS;
+    static constexpr int qi = QI2_XXS;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_IQ2_XS> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR2_XS;
+    static constexpr int qi = QI2_XS;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_IQ2_S> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR2_S;
+    static constexpr int qi = QI2_S;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_IQ3_XXS> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR3_XXS;
+    static constexpr int qi = QI3_XXS;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_IQ1_S> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR1_S;
+    static constexpr int qi = QI1_S;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_IQ1_M> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR1_M;
+    static constexpr int qi = QI1_M;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_IQ4_NL> {
+    static constexpr int qk = QK4_NL;
+    static constexpr int qr = QR4_NL;
+    static constexpr int qi = QI4_NL;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_IQ4_XS> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR4_XS;
+    static constexpr int qi = QI4_XS;
+};
+
+template<>
+struct ggml_cuda_type_traits<GGML_TYPE_IQ3_S> {
+    static constexpr int qk = QK_K;
+    static constexpr int qr = QR3_S;
+    static constexpr int qi = QI3_S;
+};
+
+//////////////////////
+
+struct ggml_cuda_device_info {
+    int device_count;
+
+    struct cuda_device_info {
+        int     cc;                 // compute capability
+        int     nsm;                // number of streaming multiprocessors
+        size_t  smpb;               // max. shared memory per block
+        size_t  smpbo;              // max. shared memory per block (with opt-in)
+        bool    vmm;                // virtual memory support
+        size_t  vmm_granularity;    // granularity of virtual memory
+        size_t  total_vram;
+    };
+
+    cuda_device_info devices[GGML_CUDA_MAX_DEVICES] = {};
+
+    std::array<float, GGML_CUDA_MAX_DEVICES> default_tensor_split = {};
+};
+
+const ggml_cuda_device_info & ggml_cuda_info();
+
+void ggml_cuda_set_device(int device);
+int ggml_cuda_get_device();
+
+struct ggml_cuda_pool {
+    virtual ~ggml_cuda_pool() = default;
+
+    virtual void * alloc(size_t size, size_t * actual_size) = 0;
+    virtual void free(void * ptr, size_t size) = 0;
+};
+
+template<typename T>
+struct ggml_cuda_pool_alloc {
+    ggml_cuda_pool * pool = nullptr;
+    T * ptr = nullptr;
+    size_t actual_size = 0;
+
+    ggml_cuda_pool_alloc() = default;
+
+    explicit ggml_cuda_pool_alloc(ggml_cuda_pool & pool) : pool(&pool) {
+    }
+
+    ggml_cuda_pool_alloc(ggml_cuda_pool & pool, size_t size) : pool(&pool) {
+        alloc(size);
+    }
+
+    ~ggml_cuda_pool_alloc() {
+        if (ptr != nullptr) {
+            pool->free(ptr, actual_size);
+        }
+    }
+
+    // size is in number of elements
+    T * alloc(size_t size) {
+        GGML_ASSERT(pool != nullptr);
+        GGML_ASSERT(ptr == nullptr);
+        ptr = (T *) pool->alloc(size * sizeof(T), &this->actual_size);
+        return ptr;
+    }
+
+    T * alloc(ggml_cuda_pool & pool, size_t size) {
+        this->pool = &pool;
+        return alloc(size);
+    }
+
+    T * get() {
+        return ptr;
+    }
+
+    ggml_cuda_pool_alloc(const ggml_cuda_pool_alloc &) = delete;
+    ggml_cuda_pool_alloc(ggml_cuda_pool_alloc &&) = delete;
+    ggml_cuda_pool_alloc& operator=(const ggml_cuda_pool_alloc &) = delete;
+    ggml_cuda_pool_alloc& operator=(ggml_cuda_pool_alloc &&) = delete;
+};
+
+
+// backend interface
+
+struct ggml_tensor_extra_gpu {
+    void * data_device[GGML_CUDA_MAX_DEVICES]; // 1 pointer for each device for split tensors
+    cudaEvent_t events[GGML_CUDA_MAX_DEVICES][GGML_CUDA_MAX_STREAMS]; // events for synchronizing multiple GPUs
+};
+
+
+#if (CUDART_VERSION >= 12000) && defined(GGML_CUDA_USE_GRAPHS)
+#define USE_CUDA_GRAPH
+#endif
+
+struct ggml_graph_node_properties {
+    void * node_address;
+    ggml_op node_op;
+    int64_t ne[GGML_MAX_DIMS];
+    size_t nb[GGML_MAX_DIMS];
+    void * src_address[GGML_MAX_SRC];
+};
+
+struct ggml_cuda_graph {
+#ifdef USE_CUDA_GRAPH
+    ~ggml_cuda_graph() {
+        if (instance != nullptr) {
+            CUDA_CHECK(cudaGraphExecDestroy(instance));
+        }
+        if (graph != nullptr) {
+            CUDA_CHECK(cudaGraphDestroy(graph));
+        }
+    }
+    cudaGraph_t graph = nullptr;
+    cudaGraphExec_t instance = nullptr;
+    size_t num_nodes = 0;
+    std::vector<cudaGraphNode_t> nodes;
+    std::vector<cudaKernelNodeParams> params;
+    bool disable_due_to_gpu_arch = false;
+    bool disable_due_to_too_many_updates = false;
+    bool disable_due_to_failed_graph_capture = false;
+    int number_consecutive_updates = 0;
+    std::vector<ggml_graph_node_properties> ggml_graph_properties;
+    std::vector<char **> updated_kernel_arg;
+#endif
+};
+
+struct ggml_backend_cuda_context {
+    int device;
+    std::string name;
+    cudaEvent_t copy_event = nullptr;
+
+    cudaStream_t streams[GGML_CUDA_MAX_DEVICES][GGML_CUDA_MAX_STREAMS] = { { nullptr } };
+    cublasHandle_t cublas_handles[GGML_CUDA_MAX_DEVICES] = {nullptr};
+
+    std::unique_ptr<ggml_cuda_graph> cuda_graph;
+
+    explicit ggml_backend_cuda_context(int device) :
+        device(device),
+        name(GGML_CUDA_NAME + std::to_string(device)) {
+    }
+
+    ~ggml_backend_cuda_context() {
+        if (copy_event != nullptr) {
+            CUDA_CHECK(cudaEventDestroy(copy_event));
+        }
+        for (int i = 0; i < GGML_CUDA_MAX_DEVICES; ++i) {
+            for (int j = 0; j < GGML_CUDA_MAX_STREAMS; ++j) {
+                if (streams[i][j] != nullptr) {
+                    CUDA_CHECK(cudaStreamDestroy(streams[i][j]));
+                }
+            }
+            if (cublas_handles[i] != nullptr) {
+                CUBLAS_CHECK(cublasDestroy(cublas_handles[i]));
+            }
+        }
+    }
+
+    cudaStream_t stream(int device, int stream) {
+        if (streams[device][stream] == nullptr) {
+            ggml_cuda_set_device(device);
+            CUDA_CHECK(cudaStreamCreateWithFlags(&streams[device][stream], cudaStreamNonBlocking));
+        }
+        return streams[device][stream];
+    }
+
+    cudaStream_t stream() {
+        return stream(device, 0);
+    }
+
+    cublasHandle_t cublas_handle(int device) {
+        if (cublas_handles[device] == nullptr) {
+            ggml_cuda_set_device(device);
+            CUBLAS_CHECK(cublasCreate(&cublas_handles[device]));
+            CUBLAS_CHECK(cublasSetMathMode(cublas_handles[device], CUBLAS_TF32_TENSOR_OP_MATH));
+        }
+        return cublas_handles[device];
+    }
+
+    cublasHandle_t cublas_handle() {
+        return cublas_handle(device);
+    }
+
+    // pool
+    std::unique_ptr<ggml_cuda_pool> pools[GGML_CUDA_MAX_DEVICES];
+
+    static std::unique_ptr<ggml_cuda_pool> new_pool_for_device(int device);
+
+    ggml_cuda_pool & pool(int device) {
+        if (pools[device] == nullptr) {
+            pools[device] = new_pool_for_device(device);
+        }
+        return *pools[device];
+    }
+
+    ggml_cuda_pool & pool() {
+        return pool(device);
+    }
+};
diff --git a/ggml/src/ggml-cuda/concat.cu b/ggml/src/ggml-cuda/concat.cu
new file mode 100644 (file)
index 0000000..dac10ec
--- /dev/null
@@ -0,0 +1,196 @@
+#include "concat.cuh"
+
+// contiguous kernels
+static __global__ void concat_f32_dim0(const float * x, const float * y, float * dst, const int ne0, const int ne00) {
+    int nidx = threadIdx.x + blockIdx.x * blockDim.x;
+    if (nidx >= ne0) {
+        return;
+    }
+
+    int offset_dst =
+        nidx +
+        blockIdx.y * ne0 +
+        blockIdx.z * ne0 * gridDim.y;
+
+    if (nidx < ne00) { // src0
+        int offset_src =
+            nidx +
+            blockIdx.y * ne00 +
+            blockIdx.z * ne00 * gridDim.y;
+        dst[offset_dst] = x[offset_src];
+    } else {
+        int offset_src =
+            (nidx - ne00) +
+            blockIdx.y * (ne0 - ne00) +
+            blockIdx.z * (ne0 - ne00) * gridDim.y;
+        dst[offset_dst] = y[offset_src];
+    }
+}
+
+static __global__ void concat_f32_dim1(const float * x, const float * y, float * dst, const int ne0, const int ne01) {
+    int nidx = threadIdx.x + blockIdx.x * blockDim.x;
+    if (nidx >= ne0) {
+        return;
+    }
+
+    int offset_dst =
+        nidx +
+        blockIdx.y * ne0 +
+        blockIdx.z * ne0 * gridDim.y;
+
+    if (blockIdx.y < ne01) { // src0
+        int offset_src =
+            nidx +
+            blockIdx.y * ne0 +
+            blockIdx.z * ne0 * ne01;
+        dst[offset_dst] = x[offset_src];
+    } else {
+        int offset_src =
+            nidx +
+            (blockIdx.y - ne01) * ne0 +
+            blockIdx.z * ne0 * (gridDim.y - ne01);
+        dst[offset_dst] = y[offset_src];
+    }
+}
+
+static __global__ void concat_f32_dim2(const float * x, const float * y, float * dst, const int ne0, const int ne02) {
+    int nidx = threadIdx.x + blockIdx.x * blockDim.x;
+    if (nidx >= ne0) {
+        return;
+    }
+
+    int offset_dst =
+        nidx +
+        blockIdx.y * ne0 +
+        blockIdx.z * ne0 * gridDim.y;
+
+    if (blockIdx.z < ne02) { // src0
+        int offset_src =
+            nidx +
+            blockIdx.y * ne0 +
+            blockIdx.z * ne0 * gridDim.y;
+        dst[offset_dst] = x[offset_src];
+    } else {
+        int offset_src =
+            nidx +
+            blockIdx.y * ne0 +
+            (blockIdx.z - ne02) * ne0 *  gridDim.y;
+        dst[offset_dst] = y[offset_src];
+    }
+}
+
+static void concat_f32_cuda(const float * x, const float * y, float * dst, int ne00, int ne01, int ne02, int ne0, int ne1, int ne2, int dim, cudaStream_t stream) {
+    int num_blocks = (ne0 + CUDA_CONCAT_BLOCK_SIZE - 1) / CUDA_CONCAT_BLOCK_SIZE;
+    dim3 gridDim(num_blocks, ne1, ne2);
+    if (dim == 0) {
+        concat_f32_dim0<<<gridDim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne0, ne00);
+        return;
+    }
+    if (dim == 1) {
+        concat_f32_dim1<<<gridDim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne0, ne01);
+        return;
+    }
+    concat_f32_dim2<<<gridDim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne0, ne02);
+}
+
+// non-contiguous kernel (slow)
+static __global__ void concat_f32_non_cont(
+        const char * src0,
+        const char * src1,
+              char * dst,
+           int64_t   ne00,
+           int64_t   ne01,
+           int64_t   ne02,
+           int64_t   ne03,
+          uint64_t   nb00,
+          uint64_t   nb01,
+          uint64_t   nb02,
+          uint64_t   nb03,
+           int64_t /*ne10*/,
+           int64_t /*ne11*/,
+           int64_t /*ne12*/,
+           int64_t /*ne13*/,
+          uint64_t   nb10,
+          uint64_t   nb11,
+          uint64_t   nb12,
+          uint64_t   nb13,
+           int64_t   ne0,
+           int64_t /*ne1*/,
+           int64_t /*ne2*/,
+           int64_t /*ne3*/,
+          uint64_t   nb0,
+          uint64_t   nb1,
+          uint64_t   nb2,
+          uint64_t   nb3,
+          int32_t   dim) {
+    const int64_t i3 = blockIdx.z;
+    const int64_t i2 = blockIdx.y;
+    const int64_t i1 = blockIdx.x;
+
+    int64_t o[4] = {0, 0, 0, 0};
+    o[dim] = dim == 0 ? ne00 : (dim == 1 ? ne01 : (dim == 2 ? ne02 : ne03));
+
+    const float * x;
+
+    for (int i0 = threadIdx.x; i0 < ne0; i0 += blockDim.x) {
+        if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) {
+            x = (const float *)(src0 + (i3       )*nb03 + (i2       )*nb02 + (i1       )*nb01 + (i0       )*nb00);
+        } else {
+            x = (const float *)(src1 + (i3 - o[3])*nb13 + (i2 - o[2])*nb12 + (i1 - o[1])*nb11 + (i0 - o[0])*nb10);
+        }
+
+        float * y = (float *)(dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+        *y = *x;
+    }
+}
+
+
+void ggml_cuda_op_concat(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const ggml_tensor * src1 = dst->src[1];
+
+    cudaStream_t stream = ctx.stream();
+
+    const int32_t dim = ((int32_t *) dst->op_params)[0];
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT(dst->type  == GGML_TYPE_F32);
+
+    if (ggml_is_contiguous(src0) && ggml_is_contiguous(src1)) {
+        const float * src0_d = (const float *)src0->data;
+        const float * src1_d = (const float *)src1->data;
+
+        float * dst_d = (float *)dst->data;
+
+        if (dim != 3) {
+            for (int i3 = 0; i3 < dst->ne[3]; i3++) {
+                concat_f32_cuda(
+                        src0_d + i3 * (src0->nb[3] / 4),
+                        src1_d + i3 * (src1->nb[3] / 4),
+                        dst_d + i3 * ( dst->nb[3] / 4),
+                        src0->ne[0], src0->ne[1], src0->ne[2],
+                        dst->ne[0],  dst->ne[1],  dst->ne[2], dim, stream);
+            }
+        } else {
+            const size_t size0 = ggml_nbytes(src0);
+            const size_t size1 = ggml_nbytes(src1);
+
+            CUDA_CHECK(cudaMemcpyAsync(dst_d,           src0_d, size0, cudaMemcpyDeviceToDevice, stream));
+            CUDA_CHECK(cudaMemcpyAsync(dst_d + size0/4, src1_d, size1, cudaMemcpyDeviceToDevice, stream));
+        }
+    } else {
+        dim3 grid_dim(dst->ne[1], dst->ne[2], dst->ne[3]);
+        concat_f32_non_cont<<<grid_dim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(
+                (const char *)src0->data,
+                (const char *)src1->data,
+                (      char *)dst->data,
+                src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3],
+                src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3],
+                src1->ne[0], src1->ne[1], src1->ne[2], src1->ne[3],
+                src1->nb[0], src1->nb[1], src1->nb[2], src1->nb[3],
+                dst->ne[0],  dst->ne[1],  dst->ne[2],  dst->ne[3],
+                dst->nb[0],  dst->nb[1],  dst->nb[2],  dst->nb[3], dim);
+    }
+}
diff --git a/ggml/src/ggml-cuda/concat.cuh b/ggml/src/ggml-cuda/concat.cuh
new file mode 100644 (file)
index 0000000..aa506a0
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_CONCAT_BLOCK_SIZE 256
+
+void ggml_cuda_op_concat(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/convert.cu b/ggml/src/ggml-cuda/convert.cu
new file mode 100644 (file)
index 0000000..c0a4447
--- /dev/null
@@ -0,0 +1,686 @@
+#include "convert.cuh"
+#include "dequantize.cuh"
+
+#define CUDA_Q8_0_NE_ALIGN 2048
+
+template <int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
+static __global__ void dequantize_block(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k) {
+    const int64_t i = (int64_t)2*(blockDim.x*blockIdx.x + threadIdx.x);
+
+    if (i >= k) {
+        return;
+    }
+
+    const int64_t ib = i/qk; // block index
+    const int64_t iqs = (i%qk)/qr; // quant index
+    const int64_t iybs = i - i%qk; // y block start index
+    const int64_t y_offset = qr == 1 ? 1 : qk/2;
+
+    // dequantize
+    dfloat2 v;
+    dequantize_kernel(vx, ib, iqs, v);
+
+    y[iybs + iqs + 0]        = v.x;
+    y[iybs + iqs + y_offset] = v.y;
+}
+
+template <bool need_check>
+static __global__ void dequantize_block_q8_0_f16(const void * __restrict__ vx, half * __restrict__ y, const int64_t k) {
+#if __CUDA_ARCH__ >= CC_PASCAL
+    constexpr int nint = CUDA_Q8_0_NE_ALIGN/sizeof(int) + WARP_SIZE;
+
+    const int64_t   i0 = CUDA_Q8_0_NE_ALIGN*blockIdx.x;
+    const int * x0 = ((int *) vx) + blockIdx.x * nint;
+    half2 * y2 = (half2 *) (y + i0);
+
+    __shared__ int vals[nint];
+
+#pragma unroll
+    for (int ix0 = 0; ix0 < nint; ix0 += WARP_SIZE) {
+        if (need_check && i0*sizeof(block_q8_0)/QK8_0 + sizeof(int)*(ix0 + threadIdx.x) >= k*sizeof(block_q8_0)/QK8_0) {
+            break;
+        }
+
+        const int ix = ix0 + threadIdx.x;
+        vals[ix] = x0[ix];
+    }
+
+    __syncthreads();
+
+#pragma unroll
+    for (int iy = 0; iy < CUDA_Q8_0_NE_ALIGN; iy += 2*WARP_SIZE) {
+        if (need_check && i0 + iy + 2*threadIdx.x >= k) {
+            return;
+        }
+
+        const half * b0 = ((const half  *) vals) + (sizeof(block_q8_0)/sizeof(half)) * ((iy + 2*threadIdx.x)/QK8_0);
+        const half    d = *b0;
+        const char2  qs = ((const char2 *) (b0 + 1))[threadIdx.x % (QK8_0/2)];
+
+        y2[iy/2 + threadIdx.x] = __hmul2(make_half2(qs.x, qs.y), __half2half2(d));
+    }
+#else
+    GGML_UNUSED(vx);
+    GGML_UNUSED(y);
+    GGML_UNUSED(k);
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= CC_PASCAL
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_q4_0(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32) {
+
+    const int64_t i = blockIdx.x;
+
+    // assume 32 threads
+    const int64_t tid = threadIdx.x;
+    const int64_t il  = tid/8;
+    const int64_t ir  = tid%8;
+    const int64_t ib = 8*i + ir;
+    if (ib >= nb32) {
+        return;
+    }
+
+    dst_t * y = yy + 256*i + 32*ir + 4*il;
+
+    const block_q4_0 * x = (const block_q4_0 *)vx + ib;
+    const float d = __half2float(x->d);
+    const float dm = -8*d;
+
+    const uint8_t * q = x->qs + 4*il;
+
+    for (int l = 0; l < 4; ++l) {
+        y[l+ 0] = d * (q[l] & 0xF) + dm;
+        y[l+16] = d * (q[l] >>  4) + dm;
+    }
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_q4_1(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32) {
+
+    const int64_t i = blockIdx.x;
+
+    // assume 32 threads
+    const int64_t tid = threadIdx.x;
+    const int64_t il  = tid/8;
+    const int64_t ir  = tid%8;
+    const int64_t ib = 8*i + ir;
+    if (ib >= nb32) {
+        return;
+    }
+
+    dst_t * y = yy + 256*i + 32*ir + 4*il;
+
+    const block_q4_1 * x = (const block_q4_1 *)vx + ib;
+    const float2 d = __half22float2(x->dm);
+
+    const uint8_t * q = x->qs + 4*il;
+
+    for (int l = 0; l < 4; ++l) {
+        y[l+ 0] = d.x * (q[l] & 0xF) + d.y;
+        y[l+16] = d.x * (q[l] >>  4) + d.y;
+    }
+}
+
+//================================== k-quants
+
+template<typename dst_t>
+static __global__ void dequantize_block_q2_K(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+
+    const int64_t i   = blockIdx.x;
+    const block_q2_K * x = (const block_q2_K *) vx;
+
+    const int64_t tid = threadIdx.x;
+    const int64_t n   = tid/32;
+    const int64_t l   = tid - 32*n;
+    const int64_t is  = 8*n + l/16;
+
+    const uint8_t q = x[i].qs[32*n + l];
+    dst_t * y = yy + i*QK_K + 128*n;
+
+    float dall = __low2half(x[i].dm);
+    float dmin = __high2half(x[i].dm);
+    y[l+ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4);
+    y[l+32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 2) & 3) - dmin * (x[i].scales[is+2] >> 4);
+    y[l+64] = dall * (x[i].scales[is+4] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+4] >> 4);
+    y[l+96] = dall * (x[i].scales[is+6] & 0xF) * ((q >> 6) & 3) - dmin * (x[i].scales[is+6] >> 4);
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_q3_K(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+
+    const int64_t i = blockIdx.x;
+    const block_q3_K * x = (const block_q3_K *) vx;
+
+    const int64_t r = threadIdx.x/4;
+    const int64_t tid = r/2;
+    const int64_t is0 = r%2;
+    const int64_t l0 = 16*is0 + 4*(threadIdx.x%4);
+    const int64_t n = tid / 4;
+    const int64_t j = tid - 4*n;
+
+    uint8_t m = 1 << (4*n + j);
+    int64_t is = 8*n + 2*j + is0;
+    int shift = 2*j;
+
+    int8_t us = is <  4 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+8] >> 0) & 3) << 4) :
+                is <  8 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+4] >> 2) & 3) << 4) :
+                is < 12 ? (x[i].scales[is-8] >>  4) | (((x[i].scales[is+0] >> 4) & 3) << 4) :
+                          (x[i].scales[is-8] >>  4) | (((x[i].scales[is-4] >> 6) & 3) << 4);
+    float d_all = x[i].d;
+    float dl = d_all * (us - 32);
+
+    dst_t * y = yy + i*QK_K + 128*n + 32*j;
+    const uint8_t * q = x[i].qs + 32*n;
+    const uint8_t * hm = x[i].hmask;
+
+    for (int l = l0; l < l0+4; ++l) y[l] = dl * ((int8_t)((q[l] >> shift) & 3) - ((hm[l] & m) ? 0 : 4));
+}
+
+static inline __device__ void get_scale_min_k4(int j, const uint8_t * q, uint8_t & d, uint8_t & m) {
+    if (j < 4) {
+        d = q[j] & 63; m = q[j + 4] & 63;
+    } else {
+        d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4);
+        m = (q[j+4] >>  4) | ((q[j-0] >> 6) << 4);
+    }
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_q4_K(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+    const block_q4_K * x = (const block_q4_K *) vx;
+
+    const int64_t i = blockIdx.x;
+
+    // assume 32 threads
+    const int64_t tid = threadIdx.x;
+    const int64_t il  = tid/8;
+    const int64_t ir  = tid%8;
+    const int64_t is  = 2*il;
+    const int64_t n   = 4;
+
+    dst_t * y = yy + i*QK_K + 64*il + n*ir;
+
+    const float dall = __low2half(x[i].dm);
+    const float dmin = __high2half(x[i].dm);
+
+    const uint8_t * q = x[i].qs + 32*il + n*ir;
+
+    uint8_t sc, m;
+    get_scale_min_k4(is + 0, x[i].scales, sc, m);
+    const float d1 = dall * sc; const float m1 = dmin * m;
+    get_scale_min_k4(is + 1, x[i].scales, sc, m);
+    const float d2 = dall * sc; const float m2 = dmin * m;
+    for (int l = 0; l < n; ++l) {
+        y[l + 0] = d1 * (q[l] & 0xF) - m1;
+        y[l +32] = d2 * (q[l] >>  4) - m2;
+    }
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_q5_K(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+    const block_q5_K * x = (const block_q5_K *) vx;
+
+    const int64_t i = blockIdx.x;
+
+    // assume 64 threads - this is very slightly better than the one below
+    const int64_t tid = threadIdx.x;
+    const int64_t il  = tid/16;   // il is in 0...3
+    const int64_t ir  = tid%16;   // ir is in 0...15
+    const int64_t is  = 2*il;     // is is in 0...6
+
+    dst_t * y = yy + i*QK_K + 64*il + 2*ir;
+
+    const float dall = __low2half(x[i].dm);
+    const float dmin = __high2half(x[i].dm);
+
+    const uint8_t * ql = x[i].qs + 32*il + 2*ir;
+    const uint8_t * qh = x[i].qh + 2*ir;
+
+    uint8_t sc, m;
+    get_scale_min_k4(is + 0, x[i].scales, sc, m);
+    const float d1 = dall * sc; const float m1 = dmin * m;
+    get_scale_min_k4(is + 1, x[i].scales, sc, m);
+    const float d2 = dall * sc; const float m2 = dmin * m;
+
+    uint8_t   hm  = 1 << (2*il);
+    y[ 0] = d1 * ((ql[ 0] & 0xF) + (qh[ 0] & hm ? 16 : 0)) - m1;
+    y[ 1] = d1 * ((ql[ 1] & 0xF) + (qh[ 1] & hm ? 16 : 0)) - m1;
+    hm <<= 1;
+    y[32] = d2 * ((ql[ 0] >>  4) + (qh[ 0] & hm ? 16 : 0)) - m2;
+    y[33] = d2 * ((ql[ 1] >>  4) + (qh[ 1] & hm ? 16 : 0)) - m2;
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_q6_K(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+    const block_q6_K * x = (const block_q6_K *) vx;
+
+    const int64_t i = blockIdx.x;
+
+    // assume 64 threads - this is very slightly better than the one below
+    const int64_t tid = threadIdx.x;
+    const int64_t ip  = tid/32;   // ip is 0 or 1
+    const int64_t il  = tid - 32*ip; // 0...32
+    const int64_t is  = 8*ip + il/16;
+
+    dst_t * y = yy + i*QK_K + 128*ip + il;
+
+    const float d = x[i].d;
+
+    const uint8_t * ql = x[i].ql + 64*ip + il;
+    const uint8_t   qh = x[i].qh[32*ip + il];
+    const int8_t  * sc = x[i].scales + is;
+
+    y[ 0] = d * sc[0] * ((int8_t)((ql[ 0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32);
+    y[32] = d * sc[2] * ((int8_t)((ql[32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32);
+    y[64] = d * sc[4] * ((int8_t)((ql[ 0]  >> 4) | (((qh >> 4) & 3) << 4)) - 32);
+    y[96] = d * sc[6] * ((int8_t)((ql[32]  >> 4) | (((qh >> 6) & 3) << 4)) - 32);
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_iq2_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+
+    const int64_t i   = blockIdx.x;
+    const block_iq2_xxs * x = (const block_iq2_xxs  *) vx;
+
+    const int64_t tid = threadIdx.x;
+    const int64_t il = tid/8; // 0...3
+    const int64_t ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint16_t * q2 = x[i].qs + 4*ib;
+    const uint8_t  * aux8 = (const uint8_t *)q2;
+    const uint8_t  * grid = (const uint8_t *)(iq2xxs_grid + aux8[il]);
+    const uint32_t aux32 = q2[2] | (q2[3] << 16);
+    const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.25f;
+    const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*il) & 127];
+    for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_iq2_xs(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+
+    const int64_t i   = blockIdx.x;
+    const block_iq2_xs * x = (const block_iq2_xs *) vx;
+
+    const int64_t tid = threadIdx.x;
+    const int64_t il = tid/8; // 0...3
+    const int64_t ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint16_t * q2 = x[i].qs + 4*ib;
+    const uint8_t  * grid = (const uint8_t *)(iq2xs_grid + (q2[il] & 511));
+    const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f;
+    const uint8_t signs = ksigns_iq2xs[q2[il] >> 9];
+    for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_iq2_s(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+
+    const int64_t i   = blockIdx.x;
+    const block_iq2_s * x = (const block_iq2_s *) vx;
+
+    const int64_t tid = threadIdx.x;
+    const int64_t il = tid/8; // 0...3
+    const int64_t ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint8_t * grid = (const uint8_t *)(iq2s_grid + (x[i].qs[4*ib+il] | ((x[i].qh[ib] << (8-2*il)) & 0x300)));
+    const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f;
+    const uint8_t signs = x[i].qs[QK_K/8+4*ib+il];
+    for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_iq3_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+
+    const int64_t i   = blockIdx.x;
+    const block_iq3_xxs * x = (const block_iq3_xxs  *) vx;
+
+    const int64_t tid = threadIdx.x;
+    const int64_t il = tid/8; // 0...3
+    const int64_t ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint8_t  * q3 = x[i].qs + 8*ib;
+    const uint16_t * gas = (const uint16_t *)(x[i].qs + QK_K/4) + 2*ib;
+    const uint8_t  * grid1 = (const uint8_t *)(iq3xxs_grid + q3[2*il+0]);
+    const uint8_t  * grid2 = (const uint8_t *)(iq3xxs_grid + q3[2*il+1]);
+    const uint32_t aux32 = gas[0] | (gas[1] << 16);
+    const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.5f;
+    const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*il) & 127];
+    for (int j = 0; j < 4; ++j) {
+        y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
+        y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
+    }
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_iq3_s(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+
+    const int64_t i   = blockIdx.x;
+    const block_iq3_s * x = (const block_iq3_s *) vx;
+
+    const int64_t tid = threadIdx.x;
+    const int64_t il = tid/8; // 0...3
+    const int64_t ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint8_t * qs = x[i].qs + 8*ib;
+    const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*il+0] | ((x[i].qh[ib] << (8-2*il)) & 256)));
+    const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*il+1] | ((x[i].qh[ib] << (7-2*il)) & 256)));
+    const float d = (float)x[i].d * (1 + 2*((x[i].scales[ib/2] >> 4*(ib%2)) & 0xf));
+    const uint8_t signs = x[i].signs[4*ib + il];
+    for (int j = 0; j < 4; ++j) {
+        y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
+        y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
+    }
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_iq1_s(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+
+    const int64_t i   = blockIdx.x;
+    const block_iq1_s * x = (const block_iq1_s  *) vx;
+
+    const int64_t tid = threadIdx.x;
+    const int64_t il = tid/8; // 0...3
+    const int64_t ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const float delta = x[i].qh[ib] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA;
+    const float d = (float)x[i].d * (2*((x[i].qh[ib] >> 12) & 7) + 1);
+    uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32;
+    grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[ib] >> 3*il) & 7) << 8)];
+    grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f;
+    grid32[0] &= 0x0f0f0f0f;
+    for (int j = 0; j < 8; ++j) {
+        y[j] = d * (q[j] + delta);
+    }
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_iq1_m(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+
+    const int64_t i   = blockIdx.x;
+    const block_iq1_m * x = (const block_iq1_m  *) vx;
+
+    const int64_t tid = threadIdx.x;
+    const int64_t il = tid/8; // 0...3
+    const int64_t ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint16_t * sc = (const uint16_t *)x[i].scales;
+    iq1m_scale_t scale;
+    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+    const int64_t ib16 = 2*ib + il/2; // sc[ib16/4] >> 3*(ib16%4) -> sc[ib/2] >> 3*((2*ib+il/2)%4);
+    const float d = (float)scale.f16 * (2*((sc[ib16/4] >> 3*(ib16%4)) & 0x7) + 1);
+    const float delta = x[i].qh[2*ib+il/2] & (0x08 << 4*(il%2)) ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA;
+    uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32;
+    grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[2*ib+il/2] >> 4*(il%2)) & 7) << 8)];
+    grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f;
+    grid32[0] &= 0x0f0f0f0f;
+    for (int j = 0; j < 8; ++j) {
+        y[j] = d * (q[j] + delta);
+    }
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_iq4_nl(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+
+    const int64_t i   = blockIdx.x;
+    const block_iq4_nl * x = (const block_iq4_nl *) vx + i*(QK_K/QK4_NL);
+
+    const int64_t tid = threadIdx.x;
+    const int64_t il = tid/8; // 0...3
+    const int64_t ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 4*il;
+    const uint8_t  * q4 = x[ib].qs + 4*il;
+    const float d = (float)x[ib].d;
+    for (int j = 0; j < 4; ++j) {
+        y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf];
+        y[j+16] = d * kvalues_iq4nl[q4[j] >>  4];
+    }
+}
+
+template<typename dst_t>
+static __global__ void dequantize_block_iq4_xs(const void * __restrict__ vx, dst_t * __restrict__ yy) {
+    const int64_t i   = blockIdx.x;
+    const block_iq4_xs * x = (const block_iq4_xs *)vx;
+
+    const int64_t tid = threadIdx.x;
+    const int64_t il = tid/8; // 0...3
+    const int64_t ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 4*il;
+    const uint8_t  * q4 = x[i].qs + 16*ib + 4*il;
+    const float d = (float)x[i].d * ((((x[i].scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((x[i].scales_h >> 2*ib) & 3) << 4)) - 32);
+    for (int j = 0; j < 4; ++j) {
+        y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf];
+        y[j+16] = d * kvalues_iq4nl[q4[j] >>  4];
+    }
+}
+
+template <int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
+static void dequantize_block_cuda(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k, cudaStream_t stream) {
+    const int num_blocks = (k + 2*CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / (2*CUDA_DEQUANTIZE_BLOCK_SIZE);
+    dequantize_block<qk, qr, dequantize_kernel><<<num_blocks, CUDA_DEQUANTIZE_BLOCK_SIZE, 0, stream>>>(vx, y, k);
+}
+
+static void dequantize_block_q8_0_f16_cuda(const void * __restrict__ vx, half * __restrict__ y, const int64_t k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_Q8_0_NE_ALIGN - 1) / CUDA_Q8_0_NE_ALIGN;
+    if (k % CUDA_Q8_0_NE_ALIGN == 0) {
+        const bool need_check = false;
+        dequantize_block_q8_0_f16<need_check><<<num_blocks, WARP_SIZE, 0, stream>>>(vx, y, k);
+    } else {
+        const bool need_check = true;
+        dequantize_block_q8_0_f16<need_check><<<num_blocks, WARP_SIZE, 0, stream>>>(vx, y, k);
+    }
+}
+
+template<typename dst_t>
+static void dequantize_row_q2_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_q2_K<<<nb, 64, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_q3_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_q3_K<<<nb, 64, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_q4_0_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb32 = k / 32;
+    const int nb = (k + 255) / 256;
+    dequantize_block_q4_0<<<nb, 32, 0, stream>>>(vx, y, nb32);
+}
+
+template<typename dst_t>
+static void dequantize_row_q4_1_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb32 = k / 32;
+    const int nb = (k + 255) / 256;
+    dequantize_block_q4_1<<<nb, 32, 0, stream>>>(vx, y, nb32);
+}
+
+template<typename dst_t>
+static void dequantize_row_q4_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_q4_K<<<nb, 32, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_q5_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_q5_K<<<nb, 64, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_q6_K_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_q6_K<<<nb, 64, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_iq2_xxs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_iq2_xxs<<<nb, 32, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_iq2_xs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_iq2_xs<<<nb, 32, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_iq2_s_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_iq2_s<<<nb, 32, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_iq3_xxs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_iq3_xxs<<<nb, 32, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_iq3_s_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_iq3_s<<<nb, 32, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_iq1_s_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_iq1_s<<<nb, 32, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_iq4_nl_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = (k + QK_K - 1) / QK_K;
+    dequantize_block_iq4_nl<<<nb, 32, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_iq1_m_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = k / QK_K;
+    dequantize_block_iq1_m<<<nb, 32, 0, stream>>>(vx, y);
+}
+
+template<typename dst_t>
+static void dequantize_row_iq4_xs_cuda(const void * vx, dst_t * y, const int64_t k, cudaStream_t stream) {
+    const int nb = (k + QK_K - 1) / QK_K;
+    dequantize_block_iq4_xs<<<nb, 32, 0, stream>>>(vx, y);
+}
+
+template <typename src_t, typename dst_t>
+static __global__ void convert_unary(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k) {
+    const int64_t i = (int64_t)blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+
+    const src_t * x = (src_t *) vx;
+
+    y[i] = x[i];
+}
+
+template <typename src_t, typename dst_t>
+static void convert_unary_cuda(const void * __restrict__ vx, dst_t * __restrict__ y, const int64_t k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_DEQUANTIZE_BLOCK_SIZE - 1) / CUDA_DEQUANTIZE_BLOCK_SIZE;
+    convert_unary<src_t><<<num_blocks, CUDA_DEQUANTIZE_BLOCK_SIZE, 0, stream>>>(vx, y, k);
+}
+
+to_fp16_cuda_t ggml_get_to_fp16_cuda(ggml_type type) {
+    switch (type) {
+        case GGML_TYPE_Q4_0:
+            return dequantize_row_q4_0_cuda;
+        case GGML_TYPE_Q4_1:
+            return dequantize_row_q4_1_cuda;
+        case GGML_TYPE_Q5_0:
+            return dequantize_block_cuda<QK5_0, QR5_0, dequantize_q5_0>;
+        case GGML_TYPE_Q5_1:
+            return dequantize_block_cuda<QK5_1, QR5_1, dequantize_q5_1>;
+        case GGML_TYPE_Q8_0:
+            if (ggml_cuda_info().devices[ggml_cuda_get_device()].cc >= CC_PASCAL) {
+                return dequantize_block_q8_0_f16_cuda;
+            }
+            return dequantize_block_cuda<QK8_0, QR8_0, dequantize_q8_0>;
+        case GGML_TYPE_Q2_K:
+            return dequantize_row_q2_K_cuda;
+        case GGML_TYPE_Q3_K:
+            return dequantize_row_q3_K_cuda;
+        case GGML_TYPE_Q4_K:
+            return dequantize_row_q4_K_cuda;
+        case GGML_TYPE_Q5_K:
+            return dequantize_row_q5_K_cuda;
+        case GGML_TYPE_Q6_K:
+            return dequantize_row_q6_K_cuda;
+        case GGML_TYPE_IQ2_XXS:
+            return dequantize_row_iq2_xxs_cuda;
+        case GGML_TYPE_IQ2_XS:
+            return dequantize_row_iq2_xs_cuda;
+        case GGML_TYPE_IQ2_S:
+            return dequantize_row_iq2_s_cuda;
+        case GGML_TYPE_IQ3_XXS:
+            return dequantize_row_iq3_xxs_cuda;
+        case GGML_TYPE_IQ1_S:
+            return dequantize_row_iq1_s_cuda;
+        case GGML_TYPE_IQ1_M:
+            return dequantize_row_iq1_m_cuda;
+        case GGML_TYPE_IQ4_NL:
+            return dequantize_row_iq4_nl_cuda;
+        case GGML_TYPE_IQ4_XS:
+            return dequantize_row_iq4_xs_cuda;
+        case GGML_TYPE_IQ3_S:
+            return dequantize_row_iq3_s_cuda;
+        case GGML_TYPE_F32:
+            return convert_unary_cuda<float>;
+        default:
+            return nullptr;
+    }
+}
+
+to_fp32_cuda_t ggml_get_to_fp32_cuda(ggml_type type) {
+    switch (type) {
+        case GGML_TYPE_Q4_0:
+            return dequantize_row_q4_0_cuda;
+        case GGML_TYPE_Q4_1:
+            return dequantize_row_q4_1_cuda;
+        case GGML_TYPE_Q5_0:
+            return dequantize_block_cuda<QK5_0, QR5_0, dequantize_q5_0>;
+        case GGML_TYPE_Q5_1:
+            return dequantize_block_cuda<QK5_1, QR5_1, dequantize_q5_1>;
+        case GGML_TYPE_Q8_0:
+            return dequantize_block_cuda<QK8_0, QR8_0, dequantize_q8_0>;
+        case GGML_TYPE_Q2_K:
+            return dequantize_row_q2_K_cuda;
+        case GGML_TYPE_Q3_K:
+            return dequantize_row_q3_K_cuda;
+        case GGML_TYPE_Q4_K:
+            return dequantize_row_q4_K_cuda;
+        case GGML_TYPE_Q5_K:
+            return dequantize_row_q5_K_cuda;
+        case GGML_TYPE_Q6_K:
+            return dequantize_row_q6_K_cuda;
+        case GGML_TYPE_IQ2_XXS:
+            return dequantize_row_iq2_xxs_cuda;
+        case GGML_TYPE_IQ2_XS:
+            return dequantize_row_iq2_xs_cuda;
+        case GGML_TYPE_IQ2_S:
+            return dequantize_row_iq2_s_cuda;
+        case GGML_TYPE_IQ3_XXS:
+            return dequantize_row_iq3_xxs_cuda;
+        case GGML_TYPE_IQ1_S:
+            return dequantize_row_iq1_s_cuda;
+        case GGML_TYPE_IQ1_M:
+            return dequantize_row_iq1_m_cuda;
+        case GGML_TYPE_IQ4_NL:
+            return dequantize_row_iq4_nl_cuda;
+        case GGML_TYPE_IQ4_XS:
+            return dequantize_row_iq4_xs_cuda;
+        case GGML_TYPE_IQ3_S:
+            return dequantize_row_iq3_s_cuda;
+        case GGML_TYPE_F16:
+            return convert_unary_cuda<half>;
+        default:
+            return nullptr;
+    }
+}
diff --git a/ggml/src/ggml-cuda/convert.cuh b/ggml/src/ggml-cuda/convert.cuh
new file mode 100644 (file)
index 0000000..5394be9
--- /dev/null
@@ -0,0 +1,13 @@
+#include "common.cuh"
+
+#define CUDA_DEQUANTIZE_BLOCK_SIZE 256
+
+template<typename T>
+using to_t_cuda_t = void (*)(const void * __restrict__ x, T * __restrict__ y, int64_t k, cudaStream_t stream);
+
+typedef to_t_cuda_t<float> to_fp32_cuda_t;
+typedef to_t_cuda_t<half> to_fp16_cuda_t;
+
+to_fp16_cuda_t ggml_get_to_fp16_cuda(ggml_type type);
+
+to_fp32_cuda_t ggml_get_to_fp32_cuda(ggml_type type);
diff --git a/ggml/src/ggml-cuda/cpy.cu b/ggml/src/ggml-cuda/cpy.cu
new file mode 100644 (file)
index 0000000..12d741f
--- /dev/null
@@ -0,0 +1,490 @@
+#include "cpy.cuh"
+
+typedef void (*cpy_kernel_t)(const char * cx, char * cdst);
+
+static __device__ void cpy_1_f32_f32(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    float * dsti = (float *) cdsti;
+
+    *dsti = *xi;
+}
+
+static __device__ void cpy_1_f32_f16(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    half * dsti = (half *) cdsti;
+
+    *dsti = __float2half(*xi);
+}
+
+static __device__ void cpy_1_f16_f16(const char * cxi, char * cdsti) {
+    const half * xi = (const half *) cxi;
+    half * dsti = (half *) cdsti;
+
+    *dsti = *xi;
+}
+
+static __device__ void cpy_1_f16_f32(const char * cxi, char * cdsti) {
+    const half * xi = (const half *) cxi;
+    float * dsti = (float *) cdsti;
+
+    *dsti = *xi;
+}
+
+template <cpy_kernel_t cpy_1>
+static __global__ void cpy_f32_f16(const char * cx, char * cdst, const int ne,
+                                   const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+                                   const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11,
+                                   const int nb12, const int nb13) {
+    const int64_t i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= ne) {
+        return;
+    }
+
+    // determine indices i03/i13, i02/i12, i01/i11, i00/i10 as a function of index i of flattened tensor
+    // then combine those indices with the corresponding byte offsets to get the total offsets
+    const int64_t i03 = i/(ne00 * ne01 * ne02);
+    const int64_t i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01);
+    const int64_t i01 = (i - i03*ne00*ne01*ne02  -  i02*ne01*ne00) / ne00;
+    const int64_t i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00;
+    const int64_t x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03;
+
+    const int64_t i13 = i/(ne10 * ne11 * ne12);
+    const int64_t i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11);
+    const int64_t i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10;
+    const int64_t i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10;
+    const int64_t dst_offset = i10*nb10 + i11*nb11 + i12*nb12 + i13 * nb13;
+
+    cpy_1(cx + x_offset, cdst + dst_offset);
+}
+
+static __device__ void cpy_blck_f32_q8_0(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    block_q8_0 * dsti = (block_q8_0 *) cdsti;
+
+    float amax = 0.0f; // absolute max
+
+    for (int j = 0; j < QK8_0; j++) {
+        const float v = xi[j];
+        amax = fmaxf(amax, fabsf(v));
+    }
+
+    const float d = amax / ((1 << 7) - 1);
+    const float id = d ? 1.0f/d : 0.0f;
+
+    dsti->d = d;
+
+    for (int j = 0; j < QK8_0; ++j) {
+        const float x0 = xi[j]*id;
+
+        dsti->qs[j] = roundf(x0);
+    }
+}
+
+static __device__ void cpy_blck_f32_q4_0(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    block_q4_0 * dsti = (block_q4_0 *) cdsti;
+
+    float amax = 0.0f;
+    float vmax = 0.0f;
+
+    for (int j = 0; j < QK4_0; ++j) {
+        const float v = xi[j];
+        if (amax < fabsf(v)) {
+            amax = fabsf(v);
+            vmax = v;
+        }
+    }
+
+    const float d  = vmax / -8;
+    const float id = d ? 1.0f/d : 0.0f;
+
+    dsti->d = d;
+
+    for (int j = 0; j < QK4_0/2; ++j) {
+        const float x0 = xi[0       + j]*id;
+        const float x1 = xi[QK4_0/2 + j]*id;
+
+        const uint8_t xi0 = min(15, (int8_t)(x0 + 8.5f));
+        const uint8_t xi1 = min(15, (int8_t)(x1 + 8.5f));
+
+        dsti->qs[j]  = xi0;
+        dsti->qs[j] |= xi1 << 4;
+    }
+}
+
+static __device__ void cpy_blck_f32_q4_1(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    block_q4_1 * dsti = (block_q4_1 *) cdsti;
+
+    float vmin = FLT_MAX;
+    float vmax = -FLT_MAX;
+
+    for (int j = 0; j < QK4_1; ++j) {
+        const float v = xi[j];
+
+        if (v < vmin) vmin = v;
+        if (v > vmax) vmax = v;
+    }
+
+    const float d  = (vmax - vmin) / ((1 << 4) - 1);
+    const float id = d ? 1.0f/d : 0.0f;
+
+    dsti->dm.x = d;
+    dsti->dm.y = vmin;
+
+    for (int j = 0; j < QK4_1/2; ++j) {
+        const float x0 = (xi[0       + j] - vmin)*id;
+        const float x1 = (xi[QK4_1/2 + j] - vmin)*id;
+
+        const uint8_t xi0 = min(15, (int8_t)(x0 + 0.5f));
+        const uint8_t xi1 = min(15, (int8_t)(x1 + 0.5f));
+
+        dsti->qs[j]  = xi0;
+        dsti->qs[j] |= xi1 << 4;
+    }
+}
+
+static __device__ void cpy_blck_f32_q5_0(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    block_q5_0 * dsti = (block_q5_0 *) cdsti;
+
+    float amax = 0.0f;
+    float vmax = 0.0f;
+
+    for (int j = 0; j < QK5_0; ++j) {
+        const float v = xi[j];
+        if (amax < fabsf(v)) {
+            amax = fabsf(v);
+            vmax = v;
+        }
+    }
+
+    const float d  = vmax / -16;
+    const float id = d ? 1.0f/d : 0.0f;
+
+    dsti->d = d;
+
+    uint32_t qh = 0;
+    for (int j = 0; j < QK5_0/2; ++j) {
+        const float x0 = xi[0       + j]*id;
+        const float x1 = xi[QK5_0/2 + j]*id;
+
+        const uint8_t xi0 = min(31, (int8_t)(x0 + 16.5f));
+        const uint8_t xi1 = min(31, (int8_t)(x1 + 16.5f));
+
+        dsti->qs[j]  = (xi0 & 0xf) | ((xi1 & 0xf) << 4);
+        qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
+        qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2);
+    }
+    memcpy(dsti->qh, &qh, sizeof(qh));
+}
+
+static __device__ void cpy_blck_f32_q5_1(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    block_q5_1 * dsti = (block_q5_1 *) cdsti;
+
+    float min = xi[0];
+    float max = xi[0];
+
+    for (int j = 1; j < QK5_1; ++j) {
+        const float v = xi[j];
+        min = v < min ? v : min;
+        max = v > max ? v : max;
+    }
+
+    const float d  = (max - min) / 31;
+    const float id = d ? 1.0f/d : 0.0f;
+
+    dsti->dm.x = d;
+    dsti->dm.y = min;
+
+    uint32_t qh = 0;
+    for (int j = 0; j < QK5_1/2; ++j) {
+        const float x0 = (xi[0       + j] - min)*id;
+        const float x1 = (xi[QK5_1/2 + j] - min)*id;
+
+        const uint8_t xi0 = (uint8_t)(x0 + 0.5f);
+        const uint8_t xi1 = (uint8_t)(x1 + 0.5f);
+
+        dsti->qs[j]  = (xi0 & 0xf) | ((xi1 & 0xf) << 4);
+        qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
+        qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_1/2);
+    }
+    memcpy(dsti->qh, &qh, sizeof(qh));
+}
+
+
+static __device__ __forceinline__ int best_index_int8(int n, const int8_t * val, float x) {
+    if (x <= val[0]) return 0;
+    if (x >= val[n-1]) return n-1;
+    int ml = 0, mu = n-1;
+    while (mu-ml > 1) {
+        int mav = (ml+mu)/2;
+        if (x < val[mav]) mu = mav; else ml = mav;
+    }
+    return x - val[mu-1] < val[mu] - x ? mu-1 : mu;
+}
+
+static __device__ void cpy_blck_f32_iq4_nl(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    block_iq4_nl * dsti = (block_iq4_nl *) cdsti;
+
+    float amax = 0.0f;
+    float vmax = 0.0f;
+
+    for (int j = 0; j < QK4_NL; ++j) {
+        const float v = xi[j];
+        if (amax < fabsf(v)) {
+            amax = fabsf(v);
+            vmax = v;
+        }
+    }
+
+    float d = vmax / kvalues_iq4nl[0];
+    const float id = d ? 1.0f/d : 0.0f;
+
+    float sumqx = 0, sumq2 = 0;
+    for (int j = 0; j < QK4_NL/2; ++j) {
+        const float x0 = xi[0        + j]*id;
+        const float x1 = xi[QK4_NL/2 + j]*id;
+        const uint8_t xi0 = best_index_int8(16, kvalues_iq4nl, x0);
+        const uint8_t xi1 = best_index_int8(16, kvalues_iq4nl, x1);
+        dsti->qs[j] = xi0 | (xi1 << 4);
+        const float v0 = kvalues_iq4nl[xi0];
+        const float v1 = kvalues_iq4nl[xi1];
+        const float w0 = xi[0        + j]*xi[0        + j];
+        const float w1 = xi[QK4_NL/2 + j]*xi[QK4_NL/2 + j];
+        sumqx += w0*v0*xi[j] + w1*v1*xi[QK4_NL/2 + j];
+        sumq2 += w0*v0*v0 + w1*v1*v1;
+    }
+
+    dsti->d = sumq2 > 0 ? sumqx/sumq2 : d;
+}
+
+template <cpy_kernel_t cpy_blck, int qk>
+static __global__ void cpy_f32_q(const char * cx, char * cdst, const int ne,
+                                 const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+                                 const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11,
+                                 const int nb12, const int nb13) {
+    const int i = (blockDim.x*blockIdx.x + threadIdx.x)*qk;
+
+    if (i >= ne) {
+        return;
+    }
+
+    const int i03 = i/(ne00 * ne01 * ne02);
+    const int i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01);
+    const int i01 = (i - i03*ne00*ne01*ne02  -  i02*ne01*ne00) / ne00;
+    const int i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00;
+    const int x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03;
+
+    const int i13 = i/(ne10 * ne11 * ne12);
+    const int i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11);
+    const int i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10;
+    const int i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10;
+    const int dst_offset = (i10/qk)*nb10 + i11*nb11 + i12*nb12 + i13*nb13;
+
+    cpy_blck(cx + x_offset, cdst + dst_offset);
+}
+
+static void ggml_cpy_f16_f32_cuda(
+    const char * cx, char * cdst, const int ne,
+    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
+
+    const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE;
+    cpy_f32_f16<cpy_1_f16_f32><<<num_blocks, CUDA_CPY_BLOCK_SIZE, 0, stream>>>
+        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
+}
+
+static void ggml_cpy_f32_f32_cuda(
+    const char * cx, char * cdst, const int ne,
+    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
+
+    const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE;
+    cpy_f32_f16<cpy_1_f32_f32><<<num_blocks, CUDA_CPY_BLOCK_SIZE, 0, stream>>>
+        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
+}
+
+static void ggml_cpy_f32_f16_cuda(
+    const char * cx, char * cdst, const int ne,
+    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
+
+    const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE;
+    cpy_f32_f16<cpy_1_f32_f16><<<num_blocks, CUDA_CPY_BLOCK_SIZE, 0, stream>>>
+        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
+}
+
+static void ggml_cpy_f32_q8_0_cuda(
+    const char * cx, char * cdst, const int ne,
+    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
+
+    GGML_ASSERT(ne % QK8_0 == 0);
+    const int num_blocks = ne / QK8_0;
+    cpy_f32_q<cpy_blck_f32_q8_0, QK8_0><<<num_blocks, 1, 0, stream>>>
+        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
+}
+
+static void ggml_cpy_f32_q4_0_cuda(
+    const char * cx, char * cdst, const int ne,
+    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
+
+    GGML_ASSERT(ne % QK4_0 == 0);
+    const int num_blocks = ne / QK4_0;
+    cpy_f32_q<cpy_blck_f32_q4_0, QK4_0><<<num_blocks, 1, 0, stream>>>
+        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
+}
+
+static void ggml_cpy_f32_q4_1_cuda(
+    const char * cx, char * cdst, const int ne,
+    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
+
+    GGML_ASSERT(ne % QK4_1 == 0);
+    const int num_blocks = ne / QK4_1;
+    cpy_f32_q<cpy_blck_f32_q4_1, QK4_1><<<num_blocks, 1, 0, stream>>>
+        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
+}
+
+static void ggml_cpy_f32_q5_0_cuda(
+    const char * cx, char * cdst, const int ne,
+    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
+
+    GGML_ASSERT(ne % QK5_0 == 0);
+    const int num_blocks = ne / QK5_0;
+    cpy_f32_q<cpy_blck_f32_q5_0, QK5_0><<<num_blocks, 1, 0, stream>>>
+        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
+}
+
+static void ggml_cpy_f32_q5_1_cuda(
+    const char * cx, char * cdst, const int ne,
+    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
+
+    GGML_ASSERT(ne % QK5_1 == 0);
+    const int num_blocks = ne / QK5_1;
+    cpy_f32_q<cpy_blck_f32_q5_1, QK5_1><<<num_blocks, 1, 0, stream>>>
+        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
+}
+
+static void ggml_cpy_f32_iq4_nl_cuda(
+    const char * cx, char * cdst, const int ne,
+    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
+
+    GGML_ASSERT(ne % QK4_NL == 0);
+    const int num_blocks = ne / QK4_NL;
+    cpy_f32_q<cpy_blck_f32_iq4_nl, QK4_NL><<<num_blocks, 1, 0, stream>>>
+        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
+}
+
+static void ggml_cpy_f16_f16_cuda(
+    const char * cx, char * cdst, const int ne,
+    const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+    const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) {
+
+    const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE;
+    cpy_f32_f16<cpy_1_f16_f16><<<num_blocks, CUDA_CPY_BLOCK_SIZE, 0, stream>>>
+        (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13);
+}
+
+void ggml_cuda_cpy(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, ggml_tensor * src1) {
+    const int64_t ne = ggml_nelements(src0);
+    GGML_ASSERT(ne == ggml_nelements(src1));
+
+    GGML_ASSERT(ggml_nbytes(src0) <= INT_MAX);
+    GGML_ASSERT(ggml_nbytes(src1) <= INT_MAX);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+    const int64_t ne02 = src0->ne[2];
+
+    //GGML_ASSERT(src0->ne[3] == 1);
+
+    const int64_t nb00 = src0->nb[0];
+    const int64_t nb01 = src0->nb[1];
+    const int64_t nb02 = src0->nb[2];
+    const int64_t nb03 = src0->nb[3];
+
+    const int64_t ne10 = src1->ne[0];
+    const int64_t ne11 = src1->ne[1];
+    const int64_t ne12 = src1->ne[2];
+
+    //GGML_ASSERT(src1->ne[3] == 1);
+
+    const int64_t nb10 = src1->nb[0];
+    const int64_t nb11 = src1->nb[1];
+    const int64_t nb12 = src1->nb[2];
+    const int64_t nb13 = src1->nb[3];
+
+    cudaStream_t main_stream = ctx.stream();
+
+    char * src0_ddc = (char *) src0->data;
+    char * src1_ddc = (char *) src1->data;
+
+    if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32) {
+        ggml_cpy_f32_f32_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F16) {
+        ggml_cpy_f32_f16_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q8_0) {
+        ggml_cpy_f32_q8_0_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_0) {
+        ggml_cpy_f32_q4_0_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_1) {
+        ggml_cpy_f32_q4_1_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q5_0) {
+        ggml_cpy_f32_q5_0_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_IQ4_NL) {
+        ggml_cpy_f32_iq4_nl_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q5_1) {
+        ggml_cpy_f32_q5_1_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16) {
+        ggml_cpy_f16_f16_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32) {
+        ggml_cpy_f16_f32_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else {
+        fprintf(stderr, "%s: unsupported type combination (%s to %s)\n", __func__,
+                ggml_type_name(src0->type), ggml_type_name(src1->type));
+        GGML_ASSERT(false);
+    }
+}
+
+void ggml_cuda_dup(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    ggml_cuda_cpy(ctx, src0, dst);
+}
+
+void* ggml_cuda_cpy_fn(const ggml_tensor * src0, ggml_tensor * src1) {
+    if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32) {
+            return (void*) cpy_f32_f16<cpy_1_f32_f32>;
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F16) {
+            return (void*) cpy_f32_f16<cpy_1_f32_f16>;
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q8_0) {
+            return (void*) cpy_f32_q<cpy_blck_f32_q8_0, QK8_0>;
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_0) {
+            return (void*) cpy_f32_q<cpy_blck_f32_q4_0, QK4_0>;
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_1) {
+            return (void*) cpy_f32_q<cpy_blck_f32_q4_1, QK4_1>;
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q5_0) {
+            return (void*) cpy_f32_q<cpy_blck_f32_q5_0, QK5_0>;
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_IQ4_NL) {
+            return (void*) cpy_f32_q<cpy_blck_f32_iq4_nl, QK4_NL>;
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q5_1) {
+            return (void*) cpy_f32_q<cpy_blck_f32_q5_1, QK5_1>;
+    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16) {
+            return (void*) cpy_f32_f16<cpy_1_f32_f16>;
+    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32) {
+            return (void*) cpy_f32_f16<cpy_1_f16_f32>;
+    } else {
+        fprintf(stderr, "%s: unsupported type combination (%s to %s)\n", __func__,
+                ggml_type_name(src0->type), ggml_type_name(src1->type));
+        GGML_ASSERT(false);
+    }
+}
+
diff --git a/ggml/src/ggml-cuda/cpy.cuh b/ggml/src/ggml-cuda/cpy.cuh
new file mode 100644 (file)
index 0000000..7961674
--- /dev/null
@@ -0,0 +1,9 @@
+#include "common.cuh"
+
+#define CUDA_CPY_BLOCK_SIZE 32
+
+void ggml_cuda_cpy(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, ggml_tensor * src1);
+
+void ggml_cuda_dup(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void* ggml_cuda_cpy_fn(const ggml_tensor * src0, ggml_tensor * src1);
diff --git a/ggml/src/ggml-cuda/dequantize.cuh b/ggml/src/ggml-cuda/dequantize.cuh
new file mode 100644 (file)
index 0000000..bd3c2d9
--- /dev/null
@@ -0,0 +1,103 @@
+#include "common.cuh"
+
+static __device__ __forceinline__ void dequantize_q4_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
+    const block_q4_0 * x = (const block_q4_0 *) vx;
+
+    const dfloat d = x[ib].d;
+
+    const int vui = x[ib].qs[iqs];
+
+    v.x = vui & 0xF;
+    v.y = vui >> 4;
+
+#ifdef GGML_CUDA_F16
+    v = __hsub2(v, {8.0f, 8.0f});
+    v = __hmul2(v, {d, d});
+#else
+    v.x = (v.x - 8.0f) * d;
+    v.y = (v.y - 8.0f) * d;
+#endif // GGML_CUDA_F16
+}
+
+static __device__ __forceinline__ void dequantize_q4_1(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
+    const block_q4_1 * x = (const block_q4_1 *) vx;
+
+    const dfloat d = __low2half(x[ib].dm);
+    const dfloat m = __high2half(x[ib].dm);
+
+    const int vui = x[ib].qs[iqs];
+
+    v.x = vui & 0xF;
+    v.y = vui >> 4;
+
+#ifdef GGML_CUDA_F16
+    v = __hmul2(v, {d, d});
+    v = __hadd2(v, {m, m});
+#else
+    v.x = (v.x * d) + m;
+    v.y = (v.y * d) + m;
+#endif // GGML_CUDA_F16
+}
+
+static __device__ __forceinline__ void dequantize_q5_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
+    const block_q5_0 * x = (const block_q5_0 *) vx;
+
+    const dfloat d = x[ib].d;
+
+    uint32_t qh;
+    memcpy(&qh, x[ib].qh, sizeof(qh));
+
+    const int xh_0 = ((qh >> (iqs +  0)) << 4) & 0x10;
+    const int xh_1 = ((qh >> (iqs + 12))     ) & 0x10;
+
+    v.x = ((x[ib].qs[iqs] & 0xf) | xh_0);
+    v.y = ((x[ib].qs[iqs] >>  4) | xh_1);
+
+#ifdef GGML_CUDA_F16
+    v = __hsub2(v, {16.0f, 16.0f});
+    v = __hmul2(v, {d, d});
+#else
+    v.x = (v.x - 16.0f) * d;
+    v.y = (v.y - 16.0f) * d;
+#endif // GGML_CUDA_F16
+}
+
+static __device__ __forceinline__ void dequantize_q5_1(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
+    const block_q5_1 * x = (const block_q5_1 *) vx;
+
+    const dfloat d = __low2half(x[ib].dm);
+    const dfloat m = __high2half(x[ib].dm);
+
+    uint32_t qh;
+    memcpy(&qh, x[ib].qh, sizeof(qh));
+
+    const int xh_0 = ((qh >> (iqs +  0)) << 4) & 0x10;
+    const int xh_1 = ((qh >> (iqs + 12))     ) & 0x10;
+
+    v.x = ((x[ib].qs[iqs] & 0xf) | xh_0);
+    v.y = ((x[ib].qs[iqs] >>  4) | xh_1);
+
+#ifdef GGML_CUDA_F16
+    v = __hmul2(v, {d, d});
+    v = __hadd2(v, {m, m});
+#else
+    v.x = (v.x * d) + m;
+    v.y = (v.y * d) + m;
+#endif // GGML_CUDA_F16
+}
+
+static __device__ __forceinline__ void dequantize_q8_0(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
+    const block_q8_0 * x = (const block_q8_0 *) vx;
+
+    const dfloat d = x[ib].d;
+
+    v.x = x[ib].qs[iqs + 0];
+    v.y = x[ib].qs[iqs + 1];
+
+#ifdef GGML_CUDA_F16
+    v = __hmul2(v, {d, d});
+#else
+    v.x *= d;
+    v.y *= d;
+#endif // GGML_CUDA_F16
+}
diff --git a/ggml/src/ggml-cuda/diagmask.cu b/ggml/src/ggml-cuda/diagmask.cu
new file mode 100644 (file)
index 0000000..4b713ba
--- /dev/null
@@ -0,0 +1,40 @@
+#include "diagmask.cuh"
+
+static __global__ void diag_mask_inf_f32(const float * x, float * dst, const int ncols, const int rows_per_channel, const int n_past) {
+    const int col = blockDim.y*blockIdx.y + threadIdx.y;
+    const int row = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (col >= ncols) {
+        return;
+    }
+
+    const int i = row*ncols + col;
+    //dst[i] = col > (n_past + row % rows_per_channel) ? -INFINITY : x[i];
+    //dst[i] = x[i] - (col > n_past + row % rows_per_channel) * INT_MAX; // equivalent within rounding error but slightly faster on GPU
+    dst[i] = x[i] - (col > n_past + row % rows_per_channel) * FLT_MAX;
+}
+
+static void diag_mask_inf_f32_cuda(const float * x, float * dst, const int ncols_x, const int nrows_x, const int rows_per_channel, const int n_past, cudaStream_t stream) {
+    const dim3 block_dims(1, CUDA_DIAG_MASK_INF_BLOCK_SIZE, 1);
+    const int block_num_x = (ncols_x + CUDA_DIAG_MASK_INF_BLOCK_SIZE - 1) / CUDA_DIAG_MASK_INF_BLOCK_SIZE;
+    const dim3 block_nums(nrows_x, block_num_x, 1);
+    diag_mask_inf_f32<<<block_nums, block_dims, 0, stream>>>(x, dst, ncols_x, rows_per_channel, n_past);
+}
+
+void ggml_cuda_op_diag_mask_inf(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+    const int nrows0 = ggml_nrows(src0);
+
+    const int n_past = ((int32_t *) dst->op_params)[0];
+
+    diag_mask_inf_f32_cuda(src0_d, dst_d, ne00, nrows0, ne01, n_past, stream);
+}
diff --git a/ggml/src/ggml-cuda/diagmask.cuh b/ggml/src/ggml-cuda/diagmask.cuh
new file mode 100644 (file)
index 0000000..6cdbef1
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_DIAG_MASK_INF_BLOCK_SIZE 32
+
+void ggml_cuda_op_diag_mask_inf(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/dmmv.cu b/ggml/src/ggml-cuda/dmmv.cu
new file mode 100644 (file)
index 0000000..174489e
--- /dev/null
@@ -0,0 +1,674 @@
+#include "dmmv.cuh"
+#include "dequantize.cuh"
+#include "convert.cuh"
+
+#ifndef K_QUANTS_PER_ITERATION
+#define K_QUANTS_PER_ITERATION 2
+#else
+static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2");
+#endif
+
+static __global__ void dequantize_mul_mat_vec_q2_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) {
+
+    static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION");
+
+    const int row = blockIdx.x*blockDim.y + threadIdx.y;
+    if (row > nrows) return;
+
+    const int num_blocks_per_row = ncols / QK_K;
+    const int ib0 = row*num_blocks_per_row;
+
+    const block_q2_K * x = (const block_q2_K *)vx + ib0;
+
+    float tmp = 0; // partial sum for thread in warp
+
+    const int tid = threadIdx.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...15
+    const int ix  = threadIdx.x%K_QUANTS_PER_ITERATION;  // 0 or 0,1
+
+    const int step = 16/K_QUANTS_PER_ITERATION;
+
+    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
+    const int in = tid - step*im;                        // 0...15 or 0...7
+
+    const int l0 = K_QUANTS_PER_ITERATION*in;            // 0...15 or 0...14 in steps of 2
+    const int q_offset = 32*im + l0;
+    const int s_offset = 8*im;
+    const int y_offset = 128*im + l0;
+
+    uint32_t aux[4];
+    const uint8_t * d = (const uint8_t *)aux;
+    const uint8_t * m = (const uint8_t *)(aux + 2);
+
+    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+
+        const float   * y = yy + i * QK_K + y_offset;
+        const uint8_t * q = x[i].qs + q_offset;
+
+        const float dall = __low2half(x[i].dm);
+        const float dmin = __high2half(x[i].dm);
+
+        const uint32_t * a = (const uint32_t *)(x[i].scales + s_offset);
+        aux[0] = a[0] & 0x0f0f0f0f;
+        aux[1] = a[1] & 0x0f0f0f0f;
+        aux[2] = (a[0] >> 4) & 0x0f0f0f0f;
+        aux[3] = (a[1] >> 4) & 0x0f0f0f0f;
+
+        float sum1 = 0, sum2 = 0;
+        for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) {
+            sum1 += y[l+ 0] * d[0] * ((q[l+ 0] >> 0) & 3)
+                  + y[l+32] * d[2] * ((q[l+ 0] >> 2) & 3)
+                  + y[l+64] * d[4] * ((q[l+ 0] >> 4) & 3)
+                  + y[l+96] * d[6] * ((q[l+ 0] >> 6) & 3)
+                  + y[l+16] * d[1] * ((q[l+16] >> 0) & 3)
+                  + y[l+48] * d[3] * ((q[l+16] >> 2) & 3)
+                  + y[l+80] * d[5] * ((q[l+16] >> 4) & 3)
+                  +y[l+112] * d[7] * ((q[l+16] >> 6) & 3);
+            sum2 += y[l+ 0] * m[0] + y[l+32] * m[2] + y[l+64] * m[4] + y[ l+96] * m[6]
+                  + y[l+16] * m[1] + y[l+48] * m[3] + y[l+80] * m[5] + y[l+112] * m[7];
+
+        }
+        tmp += dall * sum1 - dmin * sum2;
+
+    }
+
+    // sum up partial sums and write back result
+    tmp = warp_reduce_sum(tmp);
+
+    if (threadIdx.x == 0) {
+        dst[row] = tmp;
+    }
+}
+
+static __global__ void dequantize_mul_mat_vec_q3_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) {
+
+    const int row = blockIdx.x*blockDim.y + threadIdx.y;
+    if (row > nrows) return;
+
+    const int num_blocks_per_row = ncols / QK_K;
+    const int ib0 = row*num_blocks_per_row;
+
+    const block_q3_K * x = (const block_q3_K *)vx + ib0;
+
+    float tmp = 0; // partial sum for thread in warp
+
+    const uint16_t kmask1 = 0x0303;
+    const uint16_t kmask2 = 0x0f0f;
+
+    const int tid = threadIdx.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...16
+    const int ix  = threadIdx.x%K_QUANTS_PER_ITERATION;  // 0 or 0,1
+
+    const int n  = K_QUANTS_PER_ITERATION;               // iterations in the inner loop
+    const int step = 16/K_QUANTS_PER_ITERATION;
+    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
+    const int in = tid - step*im;                        // 0....15 or 0...7
+
+    const uint8_t m = 1 << (4*im);
+
+    const int l0 = n*in;                                 // 0...15 or 0...14 in steps of 2
+    const int q_offset =  32*im + l0;
+    const int y_offset = 128*im + l0;
+
+    uint16_t utmp[4];
+    const int8_t * s = (const int8_t *)utmp;
+
+    const uint16_t s_shift = 4*im;
+
+    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+
+        const float   * y  = yy + i * QK_K + y_offset;
+        const uint8_t * q = x[i].qs + q_offset;
+        const uint8_t * h = x[i].hmask + l0;
+
+        const uint16_t * a = (const uint16_t *)x[i].scales;
+        utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4);
+        utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4);
+        utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4);
+        utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4);
+
+        const float d = x[i].d;
+
+        float sum = 0;
+        for (int l = 0; l < n; ++l) {
+            sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4))
+                 + y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4))
+                 + y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4))
+                 + y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4));
+            sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4))
+                 + y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4))
+                 + y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4))
+                + y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4));
+        }
+        tmp += d * sum;
+
+    }
+
+    // sum up partial sums and write back result
+    tmp = warp_reduce_sum(tmp);
+
+    if (threadIdx.x == 0) {
+        dst[row] = tmp;
+    }
+}
+
+static __global__ void dequantize_mul_mat_vec_q4_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) {
+
+    const int row = blockIdx.x*blockDim.y + threadIdx.y;
+    if (row > nrows) return;
+    const int num_blocks_per_row = ncols / QK_K;
+    const int ib0 = row*num_blocks_per_row;
+
+    const block_q4_K * x = (const block_q4_K *)vx + ib0;
+
+    const uint16_t kmask1 = 0x3f3f;
+    const uint16_t kmask2 = 0x0f0f;
+    const uint16_t kmask3 = 0xc0c0;
+
+    const int tid = threadIdx.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...16
+    const int ix  = threadIdx.x%K_QUANTS_PER_ITERATION;  // 0 or 0,1
+
+    const int step = 8/K_QUANTS_PER_ITERATION;           // 8 or 4
+
+    const int il  = tid/step;                            // 0...3
+    const int ir  = tid - step*il;                       // 0...7 or 0...3
+    const int n   = 2 * K_QUANTS_PER_ITERATION;          // 2 or 4
+
+    const int im = il/2;  // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
+    const int in = il%2;
+
+    const int l0 = n*(2*ir + in);
+    const int q_offset = 32*im + l0;
+    const int y_offset = 64*im + l0;
+
+    uint16_t aux[4];
+    const uint8_t * sc = (const uint8_t *)aux;
+
+#if K_QUANTS_PER_ITERATION == 2
+    uint32_t q32[4];
+    const uint8_t * q4 = (const uint8_t *)q32;
+#else
+    uint16_t q16[4];
+    const uint8_t * q4 = (const uint8_t *)q16;
+#endif
+
+    float tmp = 0; // partial sum for thread in warp
+
+    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+
+        const float   * y1 = yy + i*QK_K + y_offset;
+        const float   * y2 = y1 + 128;
+
+        const float dall = __low2half(x[i].dm);
+        const float dmin = __high2half(x[i].dm);
+
+        const uint16_t * a = (const uint16_t *)x[i].scales;
+        aux[0] = a[im+0] & kmask1;
+        aux[1] = a[im+2] & kmask1;
+        aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
+        aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
+
+#if K_QUANTS_PER_ITERATION == 2
+        const uint32_t * q1 = (const uint32_t *)(x[i].qs + q_offset);
+        const uint32_t * q2 = q1 + 16;
+
+        q32[0] = q1[0] & 0x0f0f0f0f;
+        q32[1] = q1[0] & 0xf0f0f0f0;
+        q32[2] = q2[0] & 0x0f0f0f0f;
+        q32[3] = q2[0] & 0xf0f0f0f0;
+
+        float4 s = {0.f, 0.f, 0.f, 0.f};
+        float smin = 0;
+        for (int l = 0; l < 4; ++l) {
+            s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+ 4];
+            s.z += y2[l] * q4[l+8]; s.w += y2[l+32] * q4[l+12];
+            smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
+        }
+        tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin;
+#else
+        const uint16_t * q1 = (const uint16_t *)(x[i].qs + q_offset);
+        const uint16_t * q2 = q1 + 32;
+
+        q16[0] = q1[0] & 0x0f0f;
+        q16[1] = q1[0] & 0xf0f0;
+        q16[2] = q2[0] & 0x0f0f;
+        q16[3] = q2[0] & 0xf0f0;
+
+        float4 s = {0.f, 0.f, 0.f, 0.f};
+        float smin = 0;
+        for (int l = 0; l < 2; ++l) {
+            s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+2];
+            s.z += y2[l] * q4[l+4]; s.w += y2[l+32] * q4[l+6];
+            smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
+        }
+        tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin;
+#endif
+
+    }
+
+    // sum up partial sums and write back result
+    tmp = warp_reduce_sum(tmp);
+
+    if (tid == 0) {
+        dst[row] = tmp;
+    }
+}
+
+static __global__ void dequantize_mul_mat_vec_q5_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols) {
+
+    const int row = blockIdx.x;
+    const int num_blocks_per_row = ncols / QK_K;
+    const int ib0 = row*num_blocks_per_row;
+
+    const block_q5_K * x = (const block_q5_K *)vx + ib0;
+
+    float tmp = 0; // partial sum for thread in warp
+
+    const uint16_t kmask1 = 0x3f3f;
+    const uint16_t kmask2 = 0x0f0f;
+    const uint16_t kmask3 = 0xc0c0;
+
+    const int tid = threadIdx.x/2;  // 0...15
+    const int ix  = threadIdx.x%2;
+
+    const int il  = tid/4;     // 0...3
+    const int ir  = tid - 4*il;// 0...3
+    const int n   = 2;
+
+    const int im = il/2;  // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
+    const int in = il%2;
+
+    const int l0 = n*(2*ir + in);
+    const int q_offset = 32*im + l0;
+    const int y_offset = 64*im + l0;
+
+    const uint8_t hm1  = 1 << (2*im);
+    const uint8_t hm2  = hm1 << 4;
+
+    uint16_t aux[4];
+    const uint8_t * sc = (const uint8_t *)aux;
+
+    uint16_t q16[8];
+    const uint8_t * q4 = (const uint8_t *)q16;
+
+    for (int i = ix; i < num_blocks_per_row; i += 2) {
+
+        const uint8_t * ql1 = x[i].qs + q_offset;
+        const uint8_t * qh  = x[i].qh + l0;
+        const float   * y1  = yy + i*QK_K + y_offset;
+        const float   * y2  = y1 + 128;
+
+        const float dall = __low2half(x[i].dm);
+        const float dmin = __high2half(x[i].dm);
+
+        const uint16_t * a = (const uint16_t *)x[i].scales;
+        aux[0] = a[im+0] & kmask1;
+        aux[1] = a[im+2] & kmask1;
+        aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
+        aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
+
+        float4 sum = {0.f, 0.f, 0.f, 0.f};
+        float smin = 0;
+        const uint16_t * q1 = (const uint16_t *)ql1;
+        const uint16_t * q2 = q1 + 32;
+        q16[0] = q1[0] & 0x0f0f;
+        q16[1] = q1[8] & 0x0f0f;
+        q16[2] = (q1[0] >> 4) & 0x0f0f;
+        q16[3] = (q1[8] >> 4) & 0x0f0f;
+        q16[4] = q2[0] & 0x0f0f;
+        q16[5] = q2[8] & 0x0f0f;
+        q16[6] = (q2[0] >> 4) & 0x0f0f;
+        q16[7] = (q2[8] >> 4) & 0x0f0f;
+        for (int l = 0; l < n; ++l) {
+            sum.x += y1[l+ 0] * (q4[l +0] + (qh[l+ 0] & (hm1 << 0) ? 16 : 0))
+                   + y1[l+16] * (q4[l +2] + (qh[l+16] & (hm1 << 0) ? 16 : 0));
+            sum.y += y1[l+32] * (q4[l +4] + (qh[l+ 0] & (hm1 << 1) ? 16 : 0))
+                   + y1[l+48] * (q4[l +6] + (qh[l+16] & (hm1 << 1) ? 16 : 0));
+            sum.z += y2[l+ 0] * (q4[l +8] + (qh[l+ 0] & (hm2 << 0) ? 16 : 0))
+                   + y2[l+16] * (q4[l+10] + (qh[l+16] & (hm2 << 0) ? 16 : 0));
+            sum.w += y2[l+32] * (q4[l+12] + (qh[l+ 0] & (hm2 << 1) ? 16 : 0))
+                   + y2[l+48] * (q4[l+14] + (qh[l+16] & (hm2 << 1) ? 16 : 0));
+            smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3]
+                  + (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7];
+        }
+        tmp += dall * (sum.x * sc[0] + sum.y * sc[1] + sum.z * sc[4] + sum.w * sc[5]) - dmin * smin;
+    }
+
+    // sum up partial sums and write back result
+    tmp = warp_reduce_sum(tmp);
+
+    if (threadIdx.x == 0) {
+        dst[row] = tmp;
+    }
+}
+
+static __global__ void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows) {
+
+    static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION");
+
+    const int row = blockIdx.x*blockDim.y + threadIdx.y;
+    if (row > nrows) return;
+
+    const int num_blocks_per_row = ncols / QK_K;
+    const int ib0 = row*num_blocks_per_row;
+
+    const block_q6_K * x = (const block_q6_K *)vx + ib0;
+
+    const int tid = threadIdx.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...16
+    const int ix  = threadIdx.x%K_QUANTS_PER_ITERATION;  // 0 or 0, 1
+
+    const int step = 16/K_QUANTS_PER_ITERATION;          // 16 or 8
+
+    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
+    const int in = tid - step*im;                        // 0...15 or 0...7
+
+#if K_QUANTS_PER_ITERATION == 1
+    const int l0 = K_QUANTS_PER_ITERATION*in;            // 0...15
+    const int is = 0;
+#else
+    const int l0 = 4 * in;                               // 0, 4, 8, ..., 28
+    const int is = in / 4;
+#endif
+    const int ql_offset = 64*im + l0;
+    const int qh_offset = 32*im + l0;
+    const int s_offset  =  8*im + is;
+    const int y_offset = 128*im + l0;
+
+    float tmp = 0; // partial sum for thread in warp
+
+    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+
+        const float   * y  = yy + i * QK_K + y_offset;
+        const uint8_t * ql = x[i].ql + ql_offset;
+        const uint8_t * qh = x[i].qh + qh_offset;
+        const int8_t  * s  = x[i].scales + s_offset;
+
+        const float d = x[i].d;
+
+#if K_QUANTS_PER_ITERATION == 1
+        float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32)
+                  + y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32)
+                  + y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32)
+                  + y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32)
+                  + y[64] * s[4] * d * ((int8_t)((ql[ 0]  >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32)
+                  + y[80] * s[5] * d * ((int8_t)((ql[16]  >> 4) | ((qh[16] & 0x30) >> 0)) - 32)
+                  + y[96] * s[6] * d * ((int8_t)((ql[32]  >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32)
+                  +y[112] * s[7] * d * ((int8_t)((ql[48]  >> 4) | ((qh[16] & 0xc0) >> 2)) - 32);
+        tmp += sum;
+#else
+        float sum = 0;
+        for (int l = 0; l < 4; ++l) {
+            sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32)
+                 + y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32)
+                 + y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0]  >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32)
+                 + y[l+96] * s[6] * d * ((int8_t)((ql[l+32]  >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32);
+        }
+        tmp += sum;
+#endif
+
+    }
+
+    // sum up partial sums and write back result
+    tmp = warp_reduce_sum(tmp);
+
+    if (tid == 0) {
+        dst[row] = tmp;
+    }
+}
+
+static __device__ void convert_f16(const void * vx, const int64_t ib, const int iqs, dfloat2 & v){
+    const half * x = (const half *) vx;
+
+    // automatic half -> float type cast if dfloat == float
+    v.x = x[ib + iqs + 0];
+    v.y = x[ib + iqs + 1];
+}
+
+static constexpr __device__ dequantize_kernel_t get_dequantize_kernel(ggml_type type) {
+    return type == GGML_TYPE_Q4_0 ? dequantize_q4_0 :
+        type == GGML_TYPE_Q4_1 ? dequantize_q4_1 :
+        type == GGML_TYPE_Q5_0 ? dequantize_q5_0 :
+        type == GGML_TYPE_Q5_1 ? dequantize_q5_1 :
+        type == GGML_TYPE_Q8_0 ? dequantize_q8_0 :
+        type == GGML_TYPE_F16 ? convert_f16 :
+        nullptr;
+}
+
+template <ggml_type type>
+static __global__ void dequantize_mul_mat_vec(const void * __restrict__ vx, const dfloat * __restrict__ y, float * __restrict__ dst, const int ncols, const int nrows) {
+    constexpr int qk = ggml_cuda_type_traits<type>::qk; // quantized weights per x block
+    constexpr int qr = ggml_cuda_type_traits<type>::qr; // number of quantized weights per data value in x block
+    constexpr dequantize_kernel_t dequantize_kernel = get_dequantize_kernel(type);
+
+    const int64_t row = (int64_t)blockIdx.x*blockDim.y + threadIdx.y;
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int tid = threadIdx.x;
+
+    const int iter_stride = 2*GGML_CUDA_DMMV_X;
+    const int vals_per_iter = iter_stride / WARP_SIZE; // num quantized vals per thread and i iter
+    const int y_offset = qr == 1 ? 1 : qk/2;
+
+// partial sum for each thread
+#ifdef GGML_CUDA_F16
+    half2 tmp = {0.0f, 0.0f}; // two sums for f16 to take advantage of half2 intrinsics
+#else
+    float tmp = 0.0f;
+#endif // GGML_CUDA_F16
+
+    for (int i = 0; i < ncols; i += iter_stride) {
+        const int col = i + vals_per_iter*tid;
+        const int64_t ib = ((int64_t)row*ncols + col)/qk; // x block index
+        const int iqs = (col%qk)/qr; // x quant index
+        const int iybs = col - col%qk; // y block start index
+
+// processing >2 values per i iter is faster for fast GPUs
+#pragma unroll
+        for (int j = 0; j < vals_per_iter; j += 2) {
+            // process 2 vals per j iter
+
+            // dequantize
+            // for qr = 2 the iqs needs to increase by 1 per j iter because 2 weights per data val
+            dfloat2 v;
+            dequantize_kernel(vx, ib, iqs + j/qr, v);
+
+            // matrix multiplication
+            // for qr = 2 the y index needs to increase by 1 per j iter because of y_offset = qk/2
+#ifdef GGML_CUDA_F16
+            tmp += __hmul2(v, {
+                y[iybs + iqs + j/qr + 0],
+                y[iybs + iqs + j/qr + y_offset]
+            });
+#else
+            tmp += v.x * y[iybs + iqs + j/qr + 0];
+            tmp += v.y * y[iybs + iqs + j/qr + y_offset];
+#endif // GGML_CUDA_F16
+        }
+    }
+
+    // sum up partial sums and write back result
+    tmp = warp_reduce_sum(tmp);
+
+    if (tid == 0) {
+#ifdef GGML_CUDA_F16
+        dst[row] = tmp.x + tmp.y;
+#else
+        dst[row] = tmp;
+#endif // GGML_CUDA_F16
+    }
+}
+
+static void dequantize_mul_mat_vec_q4_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
+    // the number of rows may exceed maximum grid size in the y or z dimensions, use the x dimension instead
+    const dim3 block_nums(block_num_y, 1, 1);
+    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
+    dequantize_mul_mat_vec<GGML_TYPE_Q4_0>
+        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
+}
+
+static void dequantize_mul_mat_vec_q4_1_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
+    const dim3 block_nums(block_num_y, 1, 1);
+    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
+    dequantize_mul_mat_vec<GGML_TYPE_Q4_1>
+        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
+}
+
+static void dequantize_mul_mat_vec_q5_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
+    const dim3 block_nums(block_num_y, 1, 1);
+    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
+    dequantize_mul_mat_vec<GGML_TYPE_Q5_0>
+        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
+}
+
+static void dequantize_mul_mat_vec_q5_1_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
+    const dim3 block_nums(block_num_y, 1, 1);
+    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
+    dequantize_mul_mat_vec<GGML_TYPE_Q5_1>
+        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
+}
+
+static void dequantize_mul_mat_vec_q8_0_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
+    const dim3 block_nums(block_num_y, 1, 1);
+    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
+    dequantize_mul_mat_vec<GGML_TYPE_Q8_0>
+        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
+}
+
+static void dequantize_mul_mat_vec_q2_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int ny = 2; // very slightly faster than 1 even when K_QUANTS_PER_ITERATION = 2
+    const int block_num_y = (nrows + ny - 1) / ny;
+    const dim3 block_nums(block_num_y, 1, 1);
+    const dim3 block_dims(32, ny, 1);
+    dequantize_mul_mat_vec_q2_k<<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
+}
+
+static void dequantize_mul_mat_vec_q3_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int ny = 2 / K_QUANTS_PER_ITERATION;
+    const int block_num_y = (nrows + ny - 1) / ny;
+    const dim3 block_nums(block_num_y, 1, 1);
+    const dim3 block_dims(32, ny, 1);
+    dequantize_mul_mat_vec_q3_k<<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
+}
+
+static void dequantize_mul_mat_vec_q4_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int ny = 2 / K_QUANTS_PER_ITERATION;
+    const int block_num_y = (nrows + ny - 1) / ny;
+    const dim3 block_nums(block_num_y, 1, 1);
+    const dim3 block_dims(32, ny, 1);
+    dequantize_mul_mat_vec_q4_k<<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
+}
+
+static void dequantize_mul_mat_vec_q5_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const dim3 block_dims(32, 1, 1);
+    dequantize_mul_mat_vec_q5_k<<<nrows, block_dims, 0, stream>>>(vx, y, dst, ncols);
+}
+
+static void dequantize_mul_mat_vec_q6_K_cuda(const void * vx, const float * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int ny = 2 / K_QUANTS_PER_ITERATION;
+    const int block_num_y = (nrows + ny - 1) / ny;
+    const dim3 block_nums(block_num_y, 1, 1);
+    const dim3 block_dims(32, ny, 1);
+    dequantize_mul_mat_vec_q6_k<<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
+}
+
+static void convert_mul_mat_vec_f16_cuda(const void * vx, const dfloat * y, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    GGML_ASSERT(ncols % GGML_CUDA_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_CUDA_MMV_Y - 1) / GGML_CUDA_MMV_Y;
+    const dim3 block_nums(block_num_y, 1, 1);
+    const dim3 block_dims(WARP_SIZE, GGML_CUDA_MMV_Y, 1);
+    dequantize_mul_mat_vec<GGML_TYPE_F16>
+        <<<block_nums, block_dims, 0, stream>>>(vx, y, dst, ncols, nrows);
+}
+
+void ggml_cuda_op_dequantize_mul_mat_vec(
+    ggml_backend_cuda_context & ctx,
+    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
+    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
+    const int64_t src1_padded_row_size, cudaStream_t stream) {
+    GGML_UNUSED(ctx);
+    const int64_t ne00 = src0->ne[0];
+    const int64_t row_diff = row_high - row_low;
+
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    // on some GPUs it is faster to convert src1 to half and to use half precision intrinsics
+#ifdef GGML_CUDA_F16
+    ggml_cuda_pool_alloc<half> src1_dfloat_a(ctx.pool());
+    half * src1_dfloat = nullptr; // dfloat == half
+
+    bool src1_convert_f16 =
+        src0->type == GGML_TYPE_Q4_0 || src0->type == GGML_TYPE_Q4_1 ||
+        src0->type == GGML_TYPE_Q5_0 || src0->type == GGML_TYPE_Q5_1 ||
+        src0->type == GGML_TYPE_Q8_0 || src0->type == GGML_TYPE_F16;
+
+    if (src1_convert_f16) {
+        src1_dfloat = src1_dfloat_a.alloc(ne00);
+        const to_fp16_cuda_t to_fp16_cuda = ggml_get_to_fp16_cuda(src1->type);
+        GGML_ASSERT(to_fp16_cuda != nullptr);
+        to_fp16_cuda(src1_ddf_i, src1_dfloat, ne00, stream);
+    }
+#else
+    const dfloat * src1_dfloat = (const dfloat *) src1_ddf_i; // dfloat == float, no conversion
+#endif // GGML_CUDA_F16
+
+    switch (src0->type) {
+        case GGML_TYPE_Q4_0:
+            dequantize_mul_mat_vec_q4_0_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q4_1:
+            dequantize_mul_mat_vec_q4_1_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q5_0:
+            dequantize_mul_mat_vec_q5_0_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q5_1:
+            dequantize_mul_mat_vec_q5_1_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q8_0:
+            dequantize_mul_mat_vec_q8_0_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q2_K:
+            dequantize_mul_mat_vec_q2_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q3_K:
+            dequantize_mul_mat_vec_q3_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q4_K:
+            dequantize_mul_mat_vec_q4_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q5_K:
+            dequantize_mul_mat_vec_q5_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q6_K:
+            dequantize_mul_mat_vec_q6_K_cuda(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_F16:
+            convert_mul_mat_vec_f16_cuda(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        default:
+            GGML_ASSERT(false);
+            break;
+    }
+
+    GGML_UNUSED(src1);
+    GGML_UNUSED(dst);
+    GGML_UNUSED(src1_ddq_i);
+    GGML_UNUSED(src1_ncols);
+    GGML_UNUSED(src1_padded_row_size);
+}
diff --git a/ggml/src/ggml-cuda/dmmv.cuh b/ggml/src/ggml-cuda/dmmv.cuh
new file mode 100644 (file)
index 0000000..4c5ebd4
--- /dev/null
@@ -0,0 +1,18 @@
+#include "common.cuh"
+
+// dmmv = dequantize_mul_mat_vec
+
+// TODO: remove this?
+#ifndef GGML_CUDA_DMMV_X
+#define GGML_CUDA_DMMV_X 32
+#endif
+
+#ifndef GGML_CUDA_MMV_Y
+#define GGML_CUDA_MMV_Y 1
+#endif
+
+void ggml_cuda_op_dequantize_mul_mat_vec(
+    ggml_backend_cuda_context & ctx,
+    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
+    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
+    const int64_t src1_padded_row_size, cudaStream_t stream);
diff --git a/ggml/src/ggml-cuda/fattn-common.cuh b/ggml/src/ggml-cuda/fattn-common.cuh
new file mode 100644 (file)
index 0000000..bd79935
--- /dev/null
@@ -0,0 +1,741 @@
+#pragma once
+
+#include "common.cuh"
+#include "convert.cuh"
+#include "vecdotq.cuh"
+
+#include <cstdint>
+
+#define FATTN_KQ_STRIDE       256
+#define HALF_MAX_HALF         __float2half(65504.0f/2) // Use neg. of this instead of -INFINITY to initialize KQ max vals to avoid NaN upon subtraction.
+#define SOFTMAX_FTZ_THRESHOLD -20.0f                   // Softmax exp. of values smaller than this are flushed to zero to avoid NaNs.
+
+typedef void (* fattn_kernel_t)(
+        const char * __restrict__ Q,
+        const char * __restrict__ K,
+        const char * __restrict__ V,
+        const char * __restrict__ mask,
+        float      * __restrict__ dst,
+        float2     * __restrict__ dst_meta,
+        const float scale,
+        const float max_bias,
+        const float m0,
+        const float m1,
+        const uint32_t n_head_log2,
+        const int ne00,
+        const int ne01,
+        const int ne02,
+        const int ne03,
+        const int ne10,
+        const int ne11,
+        const int ne12,
+        const int ne13,
+        const int ne31,
+        const int nb31,
+        const int nb01,
+        const int nb02,
+        const int nb03,
+        const int nb11,
+        const int nb12,
+        const int nb13,
+        const int nb21,
+        const int nb22,
+        const int nb23,
+        const int ne0,
+        const int ne1,
+        const int ne2,
+        const int ne3);
+
+typedef half (*vec_dot_KQ_f16_t)(
+    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8 , const void * __restrict__ Q_ds);
+typedef float (*vec_dot_KQ_f32_t)(
+    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8 , const void * __restrict__ Q_ds);
+
+template<typename T, int D>
+static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_q4_0(
+    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8, const void * __restrict__ Q_ds_v) {
+#if __CUDA_ARCH__ >= MIN_CC_DP4A
+
+    const block_q4_0 * K_q4_0 = (const block_q4_0 *) K_c;
+    GGML_UNUSED(Q_v);
+
+    half sum = 0.0f;
+
+#pragma unroll
+    for (int k_KQ_0 = 0; k_KQ_0 < D/sizeof(int); k_KQ_0 += WARP_SIZE) {
+        const int k_KQ = k_KQ_0 + threadIdx.x;
+
+        const int ib    = k_KQ /  QI8_1;
+        const int iqs4  = k_KQ %  QI4_0;
+        const int shift = k_KQ & (QI8_1/2);
+
+        const int v = (get_int_from_uint8(K_q4_0[ib].qs, iqs4) >> shift) & 0x0F0F0F0F;
+        const int u = Q_q8[k_KQ_0/WARP_SIZE];
+
+        const int sumi = __dp4a(v, u, 0);
+
+#ifdef FP16_AVAILABLE
+        if (std::is_same<T, half>::value) {
+            const half2  * Q_ds = (const half2  *) Q_ds_v;
+
+            const half2 sum2 = __half2half2(K_q4_0[ib].d) * Q_ds[k_KQ_0/WARP_SIZE];
+            sum += (T) (((half) sumi)*__low2half(sum2) - __high2half(sum2) /* *8/QI8_1 == 1 */);
+        } else
+#endif // FP16_AVAILABLE
+        {
+            const float2 * Q_ds = (const float2 *) Q_ds_v;
+
+            sum += (T) (__half2float(K_q4_0[ib].d) * (sumi*Q_ds[k_KQ_0/WARP_SIZE].x - (8/QI8_1)*Q_ds[k_KQ_0/WARP_SIZE].y));
+        }
+    }
+
+    return sum;
+#else
+    GGML_UNUSED(K_c);
+    GGML_UNUSED(Q_v);
+    GGML_UNUSED(Q_q8);
+    GGML_UNUSED(Q_ds_v);
+    NO_DEVICE_CODE;
+#endif  // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+template<typename T, int D>
+static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_q4_1(
+    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8, const void * __restrict__ Q_ds_v) {
+#if __CUDA_ARCH__ >= MIN_CC_DP4A
+
+    const block_q4_1 * K_q4_1 = (const block_q4_1 *) K_c;
+    GGML_UNUSED(Q_v);
+
+    T sum = 0.0f;
+
+#pragma unroll
+    for (int k_KQ_0 = 0; k_KQ_0 < D/sizeof(int); k_KQ_0 += WARP_SIZE) {
+        const int k_KQ = k_KQ_0 + threadIdx.x;
+
+        const int ib    = k_KQ /  QI8_1;
+        const int iqs4  = k_KQ %  QI4_1;
+        const int shift = k_KQ & (QI8_1/2);
+
+        const int v = (get_int_from_uint8_aligned(K_q4_1[ib].qs, iqs4) >> shift) & 0x0F0F0F0F;
+        const int u = Q_q8[k_KQ_0/WARP_SIZE];
+
+        const int sumi = __dp4a(v, u, 0);
+
+#ifdef FP16_AVAILABLE
+        if (std::is_same<T, half>::value) {
+            const half2  * Q_ds = (const half2  *) Q_ds_v;
+
+            const half2 d4d8_m4s8 = K_q4_1[ib].dm * Q_ds[k_KQ_0/WARP_SIZE];
+            const half2 sumid4d8_m4s8scaled = d4d8_m4s8 * make_half2(sumi, 1.0f/QI8_1);
+            sum += (T) (__low2half(sumid4d8_m4s8scaled) + __high2half(sumid4d8_m4s8scaled));
+        } else
+#endif // FP16_AVAILABLE
+        {
+            const float2 * Q_ds = (const float2 *) Q_ds_v;
+
+            const float sumid4d8   =  __low2float(K_q4_1[ib].dm)*Q_ds[k_KQ_0/WARP_SIZE].x * sumi;
+            const float m4s8scaled = __high2float(K_q4_1[ib].dm)*Q_ds[k_KQ_0/WARP_SIZE].y / QI8_1;
+
+            sum += (T) (sumid4d8 + m4s8scaled);
+        }
+    }
+
+    return sum;
+#else
+    GGML_UNUSED(K_c);
+    GGML_UNUSED(Q_v);
+    GGML_UNUSED(Q_q8);
+    GGML_UNUSED(Q_ds_v);
+    NO_DEVICE_CODE;
+#endif  // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+template<typename T, int D>
+static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_q5_0(
+    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8, const void * __restrict__ Q_ds_v) {
+#if __CUDA_ARCH__ >= MIN_CC_DP4A
+
+    const block_q5_0 * K_q5_0 = (const block_q5_0 *) K_c;
+    GGML_UNUSED(Q_v);
+
+    T sum = 0.0f;
+
+#pragma unroll
+    for (int k_KQ_0 = 0; k_KQ_0 < D/sizeof(int); k_KQ_0 += WARP_SIZE) {
+        const int k_KQ = k_KQ_0 + threadIdx.x;
+
+        const int ib    = k_KQ /  QI8_1;
+        const int iqs4  = k_KQ %  QI5_0;
+        const int iqs8  = k_KQ %  QI8_1;
+        const int shift = k_KQ & (QI8_1/2);
+
+        int v = (get_int_from_uint8(K_q5_0[ib].qs, iqs4) >> shift) & 0x0F0F0F0F;
+        const int vh = get_int_from_uint8(K_q5_0[ib].qh, 0) >> (iqs8 * QI5_0);
+        v |= (vh <<  4) & 0x00000010; // 0 ->  4
+        v |= (vh << 11) & 0x00001000; // 1 -> 12
+        v |= (vh << 18) & 0x00100000; // 2 -> 20
+        v |= (vh << 25) & 0x10000000; // 3 -> 28
+
+        const int u = Q_q8[k_KQ_0/WARP_SIZE];
+
+        const int sumi = __dp4a(v, u, 0);
+
+#ifdef FP16_AVAILABLE
+        if (std::is_same<T, half>::value) {
+            const half2  * Q_ds = (const half2  *) Q_ds_v;
+
+            const half2 sum2 = __half2half2(K_q5_0[ib].d) * Q_ds[k_KQ_0/WARP_SIZE];
+            sum += (T) (((half) sumi)*__low2half(sum2) - __high2half(sum2)*__float2half(2.0f)) /* *16/QI8_1 == 2 */;
+        } else
+#endif // FP16_AVAILABLE
+        {
+            const float2 * Q_ds = (const float2 *) Q_ds_v;
+
+            sum += (T) (__half2float(K_q5_0[ib].d) * (sumi*Q_ds[k_KQ_0/WARP_SIZE].x - (16/QI8_1)*Q_ds[k_KQ_0/WARP_SIZE].y));
+        }
+    }
+
+    return sum;
+#else
+    GGML_UNUSED(K_c);
+    GGML_UNUSED(Q_v);
+    GGML_UNUSED(Q_q8);
+    GGML_UNUSED(Q_ds_v);
+    NO_DEVICE_CODE;
+#endif  // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+template<typename T, int D>
+static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_q5_1(
+    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8, const void * __restrict__ Q_ds_v) {
+#if __CUDA_ARCH__ >= MIN_CC_DP4A
+
+    const block_q5_1 * K_q5_1 = (const block_q5_1 *) K_c;
+    GGML_UNUSED(Q_v);
+
+    T sum = 0.0f;
+
+#pragma unroll
+    for (int k_KQ_0 = 0; k_KQ_0 < D/sizeof(int); k_KQ_0 += WARP_SIZE) {
+        const int k_KQ = k_KQ_0 + threadIdx.x;
+
+        const int ib    = k_KQ /  QI8_1;
+        const int iqs4  = k_KQ %  QI5_1;
+        const int iqs8  = k_KQ %  QI8_1;
+        const int shift = k_KQ & (QI8_1/2);
+
+        int v = (get_int_from_uint8(K_q5_1[ib].qs, iqs4) >> shift) & 0x0F0F0F0F;
+        const int vh = get_int_from_uint8(K_q5_1[ib].qh, 0) >> (iqs8 * QI5_1);
+        v |= (vh <<  4) & 0x00000010; // 0 ->  4
+        v |= (vh << 11) & 0x00001000; // 1 -> 12
+        v |= (vh << 18) & 0x00100000; // 2 -> 20
+        v |= (vh << 25) & 0x10000000; // 3 -> 28
+
+        const int u = Q_q8[k_KQ_0/WARP_SIZE];
+
+        const int sumi = __dp4a(v, u, 0);
+
+#ifdef FP16_AVAILABLE
+        if (std::is_same<T, half>::value) {
+            const half2  * Q_ds = (const half2  *) Q_ds_v;
+
+            const half2 d5d8_m5s8 = K_q5_1[ib].dm * Q_ds[k_KQ_0/WARP_SIZE];
+            const half2 sumid5d8_m5s8scaled = d5d8_m5s8 * make_half2(sumi, 1.0f/QI8_1);
+            sum += (T) (__low2half(sumid5d8_m5s8scaled) + __high2half(sumid5d8_m5s8scaled));
+        } else
+#endif // FP16_AVAILABLE
+        {
+            const float2 * Q_ds = (const float2 *) Q_ds_v;
+
+            const float sumid5d8   =  __low2float(K_q5_1[ib].dm)*Q_ds[k_KQ_0/WARP_SIZE].x * sumi;
+            const float m5s8scaled = __high2float(K_q5_1[ib].dm)*Q_ds[k_KQ_0/WARP_SIZE].y / QI8_1;
+
+            sum += (T) (sumid5d8 + m5s8scaled);
+        }
+    }
+
+    return sum;
+#else
+    GGML_UNUSED(K_c);
+    GGML_UNUSED(Q_v);
+    GGML_UNUSED(Q_q8);
+    GGML_UNUSED(Q_ds_v);
+    NO_DEVICE_CODE;
+#endif  // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+template <typename T, int D>
+static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_q8_0(
+    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8, const void * __restrict__ Q_ds_v) {
+#if __CUDA_ARCH__ >= MIN_CC_DP4A
+
+    const block_q8_0 * K_q8_0 = (const block_q8_0 *) K_c;
+    GGML_UNUSED(Q_v);
+
+    T sum = 0.0f;
+
+#pragma unroll
+    for (int k_KQ_0 = 0; k_KQ_0 < D/sizeof(int); k_KQ_0 += WARP_SIZE) {
+        const int k_KQ = k_KQ_0 + threadIdx.x;
+
+        const int ib  = k_KQ / QI8_0;
+        const int iqs = k_KQ % QI8_0;
+
+        const int v = get_int_from_int8(K_q8_0[ib].qs, iqs);
+
+        T Q_d;
+        if (std::is_same<T, half>::value) {
+            const half2  * Q_ds = (const half2  *) Q_ds_v;
+            Q_d = __low2half(Q_ds[k_KQ_0/WARP_SIZE]);
+        } else {
+            const float2 * Q_ds = (const float2 *) Q_ds_v;
+            Q_d = Q_ds[k_KQ_0/WARP_SIZE].x;
+        }
+
+        sum += vec_dot_q8_0_q8_1_impl<T, 1>(&v, &Q_q8[k_KQ_0/WARP_SIZE], K_q8_0[ib].d, Q_d);
+    }
+
+    return sum;
+#else
+    GGML_UNUSED(K_c);
+    GGML_UNUSED(Q_v);
+    GGML_UNUSED(Q_q8);
+    GGML_UNUSED(Q_ds_v);
+    NO_DEVICE_CODE;
+#endif  // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+template <typename T, int D>
+static __device__ __forceinline__ T vec_dot_fattn_vec_KQ_f16(
+    const char * __restrict__ K_c, const void * __restrict__ Q_v, const int * __restrict__ Q_q8 , const void * __restrict__ Q_ds_v) {
+
+    const half2 * K_h2 = (const half2 *) K_c;
+    GGML_UNUSED(Q_q8);
+    GGML_UNUSED(Q_ds_v);
+
+#ifdef FP16_AVAILABLE
+    if (std::is_same<T, half>::value) {
+        const half2 * Q_h2 = (const half2 *) Q_v;
+
+        half2 sum2 = make_half2(0.0f, 0.0f);
+
+#pragma unroll
+        for (int k_KQ_0 = 0; k_KQ_0 < D/2; k_KQ_0 += WARP_SIZE) {
+            const int k_KQ = k_KQ_0 + threadIdx.x;
+
+            const half2 K_ik = K_h2[k_KQ];
+            sum2 += K_ik * Q_h2[k_KQ_0/WARP_SIZE];
+        }
+
+        return __low2half(sum2) + __high2half(sum2);
+    }
+#endif // FP16_AVAILABLE
+
+    const float2 * Q_f2 = (const float2 *) Q_v;
+
+    float sum = 0.0f;
+
+#pragma unroll
+    for (int k_KQ_0 = 0; k_KQ_0 < D/2; k_KQ_0 += WARP_SIZE) {
+        const int k_KQ = k_KQ_0 + threadIdx.x;
+
+        const half2 K_ik = K_h2[k_KQ];
+        sum +=  __low2float(K_ik) * Q_f2[k_KQ_0/WARP_SIZE].x;
+        sum += __high2float(K_ik) * Q_f2[k_KQ_0/WARP_SIZE].y;
+    }
+
+    return sum;
+}
+
+template <typename Tds>
+static __device__ __forceinline__ void quantize_q8_1_to_shared(
+    const float * __restrict__ x, const float scale, int * __restrict__ yq32, void * __restrict__ yds) {
+
+    float vals[sizeof(int)] = {0.0f};
+#pragma unroll
+    for (int l = 0; l < sizeof(int); ++l) {
+        vals[l] = scale * x[4*threadIdx.x + l];
+    }
+
+    float amax = fabsf(vals[0]);
+    float sum  = vals[0];
+#pragma unroll
+    for (int l = 1; l < sizeof(int); ++l) {
+        amax = fmaxf(amax, fabsf(vals[l]));
+        sum += vals[l];
+    }
+#pragma unroll
+    for (int mask = QI8_1/2; mask > 0; mask >>= 1) {
+        amax = fmaxf(amax, __shfl_xor_sync(0xFFFFFFFF, amax, mask, 32));
+        sum +=             __shfl_xor_sync(0xFFFFFFFF, sum,  mask, 32);
+    }
+
+    const float d = amax / 127;
+    int q32 = 0;
+    int8_t * q8 = (int8_t *) &q32;
+
+    if (d != 0.0f) {
+#pragma unroll
+        for (int l = 0; l < sizeof(int); ++l) {
+            q8[l] = roundf(vals[l] / d);
+        }
+    }
+
+    yq32[threadIdx.x] = q32;
+    if (threadIdx.x % QI8_1 == 0) {
+        if (std::is_same<Tds, half2>::value) {
+            ((half2  *) yds)[threadIdx.x/QI8_1] =  make_half2(d, sum);
+        } else {
+            ((float2 *) yds)[threadIdx.x/QI8_1] = make_float2(d, sum);
+        }
+    }
+}
+
+typedef half  (*dequantize_1_f16_t)(const void *, const int64_t);
+typedef float (*dequantize_1_f32_t)(const void *, const int64_t);
+
+template <typename T>
+static __device__ __forceinline__ T dequantize_1_q4_0(const void * __restrict__ vx, const int64_t i) {
+    const block_q4_0 * x = (const block_q4_0 *) vx;
+
+    const int64_t ib    =  i          /  QK4_0;
+    const int     iqs   =  i          % (QK4_0/2);
+    const int     shift = (i % QK4_0) / (QK4_0/2);
+
+    const T   d  = x[ib].d;
+    const int q0 = x[ib].qs[iqs];
+    const int q  = ((q0 >> (4*shift)) & 0x0F) - 8;
+
+#ifdef FP16_AVAILABLE
+    if (std::is_same<T, half>::value) {
+        return ((half) d)*((half) q);
+    }
+#endif // FP16_AVAILABLE
+
+    return ((float) d)*((float) q);
+}
+
+template <typename T>
+static __device__ __forceinline__ T dequantize_1_q4_1(const void * __restrict__ vx, const int64_t i) {
+    const block_q4_1 * x = (const block_q4_1 *) vx;
+
+    const int64_t ib    =  i          /  QK4_1;
+    const int     iqs   =  i          % (QK4_1/2);
+    const int     shift = (i % QK4_1) / (QK4_1/2);
+
+    const half2 dm = x[ib].dm;
+    const int   q0 = x[ib].qs[iqs];
+    const int   q  = ((q0 >> (4*shift)) & 0x0F);
+
+#ifdef FP16_AVAILABLE
+    if (std::is_same<T, half>::value) {
+        return __low2half(dm)*((half) q) + __high2half(dm);
+    }
+#endif // FP16_AVAILABLE
+
+    return __low2float(dm)*((float) q) + __high2float(dm);
+}
+
+template <typename T>
+static __device__ __forceinline__ T dequantize_1_q5_0(const void * __restrict__ vx, const int64_t i) {
+    const block_q5_0 * x = (const block_q5_0 *) vx;
+
+    const int64_t ib    =  i          /  QK5_0;
+    const int     idq   =  i          %  QK5_0;
+    const int     iqs   =  i          % (QK5_0/2);
+    const int     shift = (i % QK5_0) / (QK5_0/2);
+
+    const T   d   = x[ib].d;
+    const int ql0 = x[ib].qs[iqs];
+    const int qh0 = get_int_from_uint8(x[ib].qh, 0);
+    const int ql  = ((ql0 >> (4*shift)) & 0x0F);
+    const int qh  = ((qh0 >> idq) << 4) & 0x10;
+    const int q   = (ql | qh) - 16;
+
+#ifdef FP16_AVAILABLE
+    if (std::is_same<T, half>::value) {
+        return ((half) d)*((half) q);
+    }
+#endif // FP16_AVAILABLE
+
+    return ((float) d)*((float) q);
+}
+
+template <typename T>
+static __device__ __forceinline__ T dequantize_1_q5_1(const void * __restrict__ vx, const int64_t i) {
+    const block_q5_1 * x = (const block_q5_1 *) vx;
+
+    const int64_t ib    =  i          /  QK5_1;
+    const int     idq   =  i          %  QK5_1;
+    const int     iqs   =  i          % (QK5_1/2);
+    const int     shift = (i % QK5_1) / (QK5_1/2);
+
+    const half2 dm  = x[ib].dm;
+    const int   ql0 = x[ib].qs[iqs];
+    const int   qh0 = get_int_from_uint8_aligned(x[ib].qh, 0);
+    const int   ql  = ((ql0 >> (4*shift)) & 0x0F);
+    const int   qh  = ((qh0 >> idq) << 4) & 0x10;
+    const int   q   = (ql | qh);
+
+#ifdef FP16_AVAILABLE
+    if (std::is_same<T, half>::value) {
+        return __low2half(dm)*((half) q) + __high2half(dm);
+    }
+#endif // FP16_AVAILABLE
+
+    return __low2float(dm)*((float) q) + __high2float(dm);
+}
+
+template <typename T>
+static __device__ __forceinline__ T dequantize_1_q8_0(const void * __restrict__ vx, const int64_t i) {
+    const block_q8_0 * x = (const block_q8_0 *) vx;
+
+    const int64_t ib  = i / QK8_0;
+    const int     iqs = i % QK8_0;
+
+    const T   d = x[ib].d;
+    const int q = x[ib].qs[iqs];
+
+#ifdef FP16_AVAILABLE
+    if (std::is_same<T, half>::value) {
+        return ((half) d)*((half) q);
+    }
+#endif // FP16_AVAILABLE
+
+    return ((float) d)*((float) q);
+}
+
+template <typename T>
+static __device__ __forceinline__ T dequantize_1_f16(const void * __restrict__ vx, const int64_t i) {
+    const half * x = (const half *) vx;
+
+    return x[i];
+}
+
+template <int D>
+constexpr __device__ vec_dot_KQ_f16_t get_vec_dot_KQ_f16(ggml_type type_K) {
+    return type_K == GGML_TYPE_Q4_0 ? vec_dot_fattn_vec_KQ_q4_0<half, D> :
+        type_K == GGML_TYPE_Q4_1 ? vec_dot_fattn_vec_KQ_q4_1<half, D> :
+        type_K == GGML_TYPE_Q5_0 ? vec_dot_fattn_vec_KQ_q5_0<half, D> :
+        type_K == GGML_TYPE_Q5_1 ? vec_dot_fattn_vec_KQ_q5_1<half, D> :
+        type_K == GGML_TYPE_Q8_0 ? vec_dot_fattn_vec_KQ_q8_0<half, D> :
+        type_K == GGML_TYPE_F16 ? vec_dot_fattn_vec_KQ_f16<half, D> :
+        nullptr;
+}
+
+template <int D>
+constexpr __device__ vec_dot_KQ_f32_t get_vec_dot_KQ_f32(ggml_type type_K) {
+    return type_K == GGML_TYPE_Q4_0 ? vec_dot_fattn_vec_KQ_q4_0<float, D> :
+        type_K == GGML_TYPE_Q4_1 ? vec_dot_fattn_vec_KQ_q4_1<float, D> :
+        type_K == GGML_TYPE_Q5_0 ? vec_dot_fattn_vec_KQ_q5_0<float, D> :
+        type_K == GGML_TYPE_Q5_1 ? vec_dot_fattn_vec_KQ_q5_1<float, D> :
+        type_K == GGML_TYPE_Q8_0 ? vec_dot_fattn_vec_KQ_q8_0<float, D> :
+        type_K == GGML_TYPE_F16 ? vec_dot_fattn_vec_KQ_f16<float, D> :
+        nullptr;
+}
+
+constexpr __device__ dequantize_1_f16_t get_dequantize_1_f16(ggml_type type_V) {
+    return type_V == GGML_TYPE_Q4_0 ? dequantize_1_q4_0<half> :
+        type_V == GGML_TYPE_Q4_1 ? dequantize_1_q4_1<half> :
+        type_V == GGML_TYPE_Q5_0 ? dequantize_1_q5_0<half> :
+        type_V == GGML_TYPE_Q5_1 ? dequantize_1_q5_1<half> :
+        type_V == GGML_TYPE_Q8_0 ? dequantize_1_q8_0<half> :
+        type_V == GGML_TYPE_F16 ? dequantize_1_f16<half> :
+        nullptr;
+}
+
+constexpr __device__ dequantize_1_f32_t get_dequantize_1_f32(ggml_type type_V) {
+    return type_V == GGML_TYPE_Q4_0 ? dequantize_1_q4_0<float> :
+        type_V == GGML_TYPE_Q4_1 ? dequantize_1_q4_1<float> :
+        type_V == GGML_TYPE_Q5_0 ? dequantize_1_q5_0<float> :
+        type_V == GGML_TYPE_Q5_1 ? dequantize_1_q5_1<float> :
+        type_V == GGML_TYPE_Q8_0 ? dequantize_1_q8_0<float> :
+        type_V == GGML_TYPE_F16 ? dequantize_1_f16<float> :
+        nullptr;
+}
+
+template<int D, int parallel_blocks> // D == head size
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+__launch_bounds__(D, 1)
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+static __global__ void flash_attn_combine_results(
+        const float  * __restrict__ VKQ_parts,
+        const float2 * __restrict__ VKQ_meta,
+        float * __restrict__ dst) {
+    VKQ_parts += parallel_blocks*D * gridDim.y*blockIdx.x;
+    VKQ_meta  += parallel_blocks   * gridDim.y*blockIdx.x;
+    dst       +=                 D * gridDim.y*blockIdx.x;
+
+    const int tid = threadIdx.x;
+    __builtin_assume(tid < D);
+
+    __shared__ float2 meta[parallel_blocks];
+    if (tid < 2*parallel_blocks) {
+        ((float *) meta)[threadIdx.x] = ((const float *)VKQ_meta) [blockIdx.y*(2*parallel_blocks) + tid];
+    }
+
+    __syncthreads();
+
+    float kqmax = meta[0].x;
+#pragma unroll
+    for (int l = 1; l < parallel_blocks; ++l) {
+        kqmax = max(kqmax, meta[l].x);
+    }
+
+    float VKQ_numerator   = 0.0f;
+    float VKQ_denominator = 0.0f;
+#pragma unroll
+    for (int l = 0; l < parallel_blocks; ++l) {
+        const float diff = meta[l].x - kqmax;
+        const float KQ_max_scale = expf(diff);
+        const uint32_t ftz_mask = 0xFFFFFFFF * (diff > SOFTMAX_FTZ_THRESHOLD);
+        *((uint32_t *) &KQ_max_scale) &= ftz_mask;
+
+        VKQ_numerator   += KQ_max_scale * VKQ_parts[l*gridDim.y*D + blockIdx.y*D + tid];
+        VKQ_denominator += KQ_max_scale * meta[l].y;
+    }
+
+    dst[blockIdx.y*D + tid] = VKQ_numerator / VKQ_denominator;
+}
+
+static void on_no_fattn_vec_case(const int D) {
+    if (D == 64) {
+        fprintf(stderr, "Unsupported KV type combination for head_size 64.\n");
+        fprintf(stderr, "By default only f16 KV cache is supported.\n");
+        fprintf(stderr, "Compile with GGML_CUDA_FA_ALL_QUANTS for V cache quantization support.\n");
+        GGML_ASSERT(false);
+    } else if (D == 128) {
+        fprintf(stderr, "Unsupported KV type combination for head_size 128.\n");
+        fprintf(stderr, "Supported combinations:\n");
+        fprintf(stderr, "  - K == q4_0, V == q4_0,  4.50 BPV\n");
+        fprintf(stderr, "  - K == q8_0, V == q8_0,  8.50 BPV\n");
+        fprintf(stderr, "  - K == f16,  V == f16,  16.00 BPV\n");
+        fprintf(stderr, "Compile with GGML_CUDA_FA_ALL_QUANTS for all combinations of q4_0, q4_1, q5_0, q5_1, q8_0, and f16.\n");
+        GGML_ASSERT(false);
+    } else {
+        fprintf(stderr, "Unsupported KV type combination for head_size 256.\n");
+        fprintf(stderr, "Only f16 is supported.\n");
+        GGML_ASSERT(false);
+    }
+}
+
+template <int D, int parallel_blocks>
+void launch_fattn(
+    ggml_backend_cuda_context & ctx, ggml_tensor * dst, fattn_kernel_t fattn_kernel,
+    const int nwarps, const int cols_per_block, const bool need_f16_K, const bool need_f16_V
+) {
+    const ggml_tensor * Q = dst->src[0];
+    const ggml_tensor * K = dst->src[1];
+    const ggml_tensor * V = dst->src[2];
+
+    const ggml_tensor * mask = dst->src[3];
+
+    ggml_tensor * KQV = dst;
+
+    GGML_ASSERT(Q->type == GGML_TYPE_F32);
+    GGML_ASSERT(KQV->type == GGML_TYPE_F32);
+
+    GGML_ASSERT(!mask || mask->type == GGML_TYPE_F16);
+    GGML_ASSERT(!mask || mask->ne[1] >= GGML_PAD(Q->ne[1], 16) &&
+                                "the Flash-Attention CUDA kernel requires the mask to be padded to 16 and at least n_queries big");
+
+    GGML_ASSERT(K->ne[1] % FATTN_KQ_STRIDE == 0 && "Incorrect KV cache padding.");
+
+    ggml_cuda_pool & pool = ctx.pool();
+    cudaStream_t main_stream = ctx.stream();
+
+    ggml_cuda_pool_alloc<half>   K_f16(pool);
+    ggml_cuda_pool_alloc<half>   V_f16(pool);
+    ggml_cuda_pool_alloc<float>  dst_tmp(pool);
+    ggml_cuda_pool_alloc<float2> dst_tmp_meta(pool);
+
+    char * K_data = (char *) K->data;
+    size_t nb11 = K->nb[1];
+    size_t nb12 = K->nb[2];
+    size_t nb13 = K->nb[3];
+
+    char * V_data = (char *) V->data;
+    size_t nb21 = V->nb[1];
+    size_t nb22 = V->nb[2];
+    size_t nb23 = V->nb[3];
+
+    if (need_f16_K && K->type != GGML_TYPE_F16) {
+        K_f16.alloc(ggml_nelements(K));
+        to_fp16_cuda_t to_fp16 = ggml_get_to_fp16_cuda(K->type);
+        to_fp16(K_data, K_f16.ptr, ggml_nelements(K), main_stream);
+        K_data = (char *) K_f16.ptr;
+
+        const size_t bs = ggml_blck_size(K->type);
+        const size_t ts = ggml_type_size(K->type);
+
+        nb11 = nb11*bs*sizeof(half)/ts;
+        nb12 = nb12*bs*sizeof(half)/ts;
+        nb13 = nb13*bs*sizeof(half)/ts;
+    }
+
+    if (need_f16_V && V->type != GGML_TYPE_F16) {
+        V_f16.alloc(ggml_nelements(V));
+        to_fp16_cuda_t to_fp16 = ggml_get_to_fp16_cuda(V->type);
+        to_fp16(V_data, V_f16.ptr, ggml_nelements(V), main_stream);
+        V_data = (char *) V_f16.ptr;
+
+        const size_t bs = ggml_blck_size(V->type);
+        const size_t ts = ggml_type_size(V->type);
+
+        nb21 = nb21*bs*sizeof(half)/ts;
+        nb22 = nb22*bs*sizeof(half)/ts;
+        nb23 = nb23*bs*sizeof(half)/ts;
+    }
+
+    if (parallel_blocks > 1) {
+        dst_tmp.alloc(parallel_blocks*ggml_nelements(KQV));
+        dst_tmp_meta.alloc(parallel_blocks*ggml_nrows(KQV));
+    }
+
+    const dim3 block_dim(WARP_SIZE, nwarps, 1);
+    const dim3 blocks_num(parallel_blocks*((Q->ne[1] + cols_per_block - 1) / cols_per_block), Q->ne[2], Q->ne[3]);
+    const int  shmem = 0;
+
+    float scale    = 1.0f;
+    float max_bias = 0.0f;
+
+    memcpy(&scale,    (float *) KQV->op_params + 0, sizeof(float));
+    memcpy(&max_bias, (float *) KQV->op_params + 1, sizeof(float));
+
+    const uint32_t n_head      = Q->ne[2];
+    const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head));
+
+    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
+    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
+
+    fattn_kernel<<<blocks_num, block_dim, shmem, main_stream>>>(
+        (const char *) Q->data,
+        K_data,
+        V_data,
+        mask ? ((const char *) mask->data) : nullptr,
+        (parallel_blocks) == 1 ? (float *) KQV->data : dst_tmp.ptr, dst_tmp_meta.ptr,
+        scale, max_bias, m0, m1, n_head_log2,
+        Q->ne[0], Q->ne[1], Q->ne[2], Q->ne[3],
+        K->ne[0], K->ne[1], K->ne[2], K->ne[3],
+        mask ? mask->ne[1] : 0, mask ?  mask->nb[1] : 0,
+        Q->nb[1], Q->nb[2], Q->nb[3],
+        nb11, nb12, nb13,
+        nb21, nb22, nb23,
+        KQV->ne[0], KQV->ne[1], KQV->ne[2], KQV->ne[3]
+    );
+    CUDA_CHECK(cudaGetLastError());
+
+    if ((parallel_blocks) == 1) {
+        return;
+    }
+
+    const dim3 block_dim_combine(D, 1, 1);
+    const dim3 blocks_num_combine(Q->ne[1], blocks_num.y, blocks_num.z);
+    const int  shmem_combine = 0;
+
+    flash_attn_combine_results<D, parallel_blocks>
+        <<<blocks_num_combine, block_dim_combine, shmem_combine, main_stream>>>
+        (dst_tmp.ptr, dst_tmp_meta.ptr, (float *) KQV->data);
+    CUDA_CHECK(cudaGetLastError());
+}
diff --git a/ggml/src/ggml-cuda/fattn-tile-f16.cu b/ggml/src/ggml-cuda/fattn-tile-f16.cu
new file mode 100644 (file)
index 0000000..c6c3513
--- /dev/null
@@ -0,0 +1,319 @@
+#include "common.cuh"
+#include "fattn-common.cuh"
+#include "fattn-tile-f16.cuh"
+
+#define FATTN_KQ_STRIDE_TILE_F16 64
+
+template<int D, int ncols, int nwarps, int parallel_blocks> // D == head size
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+__launch_bounds__(nwarps*WARP_SIZE, 1)
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+static __global__ void flash_attn_tile_ext_f16(
+        const char * __restrict__ Q,
+        const char * __restrict__ K,
+        const char * __restrict__ V,
+        const char * __restrict__ mask,
+        float      * __restrict__ dst,
+        float2     * __restrict__ dst_meta,
+        const float scale,
+        const float max_bias,
+        const float m0,
+        const float m1,
+        const uint32_t n_head_log2,
+        const int ne00,
+        const int ne01,
+        const int ne02,
+        const int ne03,
+        const int ne10,
+        const int ne11,
+        const int ne12,
+        const int ne13,
+        const int ne31,
+        const int nb31,
+        const int nb01,
+        const int nb02,
+        const int nb03,
+        const int nb11,
+        const int nb12,
+        const int nb13,
+        const int nb21,
+        const int nb22,
+        const int nb23,
+        const int ne0,
+        const int ne1,
+        const int ne2,
+        const int ne3) {
+#ifdef FP16_AVAILABLE
+    //In this kernel Q, K, V are matrices while i, j, k are matrix indices.
+
+    const int ic0 = (blockIdx.x / parallel_blocks) * ncols; // Index of the Q/QKV column to work on.
+    const int ip  =  blockIdx.x % parallel_blocks; // Index in group of blocks running for the same column in parallel.
+
+    const int gqa_ratio = ne02 / ne12; // With grouped query attention there are > 1 Q matrices per K, V matrix.
+    const float2 * Q_f2  = (const float2 *) (Q    + nb02* blockIdx.y              + nb01*ic0);
+    const half2  * K_h2  = (const half2  *) (K    + nb12*(blockIdx.y / gqa_ratio));
+    const half2  * V_h2  = (const half2  *) (V    + nb12*(blockIdx.y / gqa_ratio)); // K and V have same shape
+    const half   * maskh = (const half   *)  mask + ne11*ic0;
+
+    const int stride_KV2 = nb11 / sizeof(half2);
+
+    const float slopef = get_alibi_slope(max_bias, blockIdx.y, n_head_log2, m0, m1);
+    const half  slopeh = __float2half(slopef);
+
+    static_assert(D % (2*WARP_SIZE) == 0, "D not divisible by 2*WARP_SIZE == 64.");
+
+    __shared__ half KQ[ncols*FATTN_KQ_STRIDE_TILE_F16];
+    half2 * KQ2 = (half2 *) KQ;
+
+    __shared__ half2 KV_tmp[FATTN_KQ_STRIDE_TILE_F16][D/2 + 1]; // Pad D to avoid memory bank conflicts.
+
+    half kqmax[ncols/nwarps];
+#pragma unroll
+    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+        kqmax[j0/nwarps] = -HALF_MAX_HALF;
+    }
+    half2 kqsum[ncols/nwarps] = {{0.0f, 0.0f}};
+
+    half2 VKQ[ncols/nwarps][(D/2)/WARP_SIZE] = {{{0.0f, 0.0f}}};
+
+    // Convert Q to half2 and store in registers:
+    __shared__ half2 Q_h2[ncols][D/2];
+#pragma unroll
+    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            const float2 tmp = ic0 + j < ne01 ? Q_f2[j*(nb01/sizeof(float2)) + i] : make_float2(0.0f, 0.0f);
+            Q_h2[j][i] = make_half2(scale, scale) * make_half2(tmp.x, tmp.y);
+        }
+    }
+
+    __syncthreads();
+
+    const int k_start = parallel_blocks == 1 ? 0 : ip*FATTN_KQ_STRIDE_TILE_F16;
+    for (int k_VKQ_0 = k_start; k_VKQ_0 < ne11; k_VKQ_0 += parallel_blocks*FATTN_KQ_STRIDE_TILE_F16) {
+        // Calculate KQ tile and keep track of new maximum KQ values:
+
+        half kqmax_new[ncols/nwarps];
+#pragma unroll
+        for (int j = 0; j < ncols/nwarps; ++j) {
+            kqmax_new[j] = kqmax[j];
+        }
+
+#pragma unroll
+        for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F16; i_KQ_0 += nwarps) {
+            const int i_KQ = i_KQ_0 + threadIdx.y;
+
+#pragma unroll
+            for (int k_KQ_0 = 0; k_KQ_0 < D/2; k_KQ_0 += WARP_SIZE) {
+                const int k_KQ = k_KQ_0 + threadIdx.x;
+
+                KV_tmp[i_KQ][k_KQ] = K_h2[(k_VKQ_0 + i_KQ)*stride_KV2 + k_KQ];
+            }
+        }
+
+        __syncthreads();
+
+        half2 sum2[FATTN_KQ_STRIDE_TILE_F16/WARP_SIZE][ncols/nwarps] = {{{0.0f, 0.0f}}};
+
+#pragma unroll
+        for (int k_KQ = 0; k_KQ < D/2; ++k_KQ) {
+            half2 K_k[FATTN_KQ_STRIDE_TILE_F16/WARP_SIZE];
+            half2 Q_k[ncols/nwarps];
+
+#pragma unroll
+            for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F16; i_KQ_0 += WARP_SIZE) {
+                const int i_KQ = i_KQ_0 + threadIdx.x;
+
+                K_k[i_KQ_0/WARP_SIZE] = KV_tmp[i_KQ][k_KQ];
+            }
+#pragma unroll
+            for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
+                const int j_KQ = j_KQ_0 + threadIdx.y;
+
+                Q_k[j_KQ_0/nwarps] = Q_h2[j_KQ][k_KQ];
+            }
+
+#pragma unroll
+            for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F16; i_KQ_0 += WARP_SIZE) {
+#pragma unroll
+                for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
+                    sum2[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps] += K_k[i_KQ_0/WARP_SIZE]*Q_k[j_KQ_0/nwarps];
+                }
+            }
+        }
+
+#pragma unroll
+        for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F16; i_KQ_0 += WARP_SIZE) {
+            const int i_KQ = i_KQ_0 + threadIdx.x;
+
+#pragma unroll
+            for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
+                const int j_KQ = j_KQ_0 + threadIdx.y;
+
+                half sum = __low2half(sum2[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps]) + __high2half(sum2[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps]);
+                sum += mask ? slopeh*maskh[j_KQ*ne11 + k_VKQ_0 + i_KQ] : __float2half(0.0f);
+
+                kqmax_new[j_KQ_0/nwarps] = ggml_cuda_hmax(kqmax_new[j_KQ_0/nwarps], sum);
+
+                KQ[j_KQ*FATTN_KQ_STRIDE_TILE_F16 + i_KQ] = sum;
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+            const int j = j0 + threadIdx.y;
+
+            kqmax_new[j0/nwarps] = warp_reduce_max(kqmax_new[j0/nwarps]);
+            const half2 KQ_max_scale = __half2half2(hexp(kqmax[j0/nwarps] - kqmax_new[j0/nwarps]));
+            kqmax[j0/nwarps] = kqmax_new[j0/nwarps];
+
+#pragma unroll
+            for (int i0 = 0; i0 < FATTN_KQ_STRIDE_TILE_F16/2; i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                const half2 diff = KQ2[j*(FATTN_KQ_STRIDE_TILE_F16/2) + i] - __half2half2(kqmax[j0/nwarps]);
+                const half2 val = h2exp(diff);
+                kqsum[j0/nwarps] = kqsum[j0/nwarps]*KQ_max_scale + val;
+                KQ2[j*(FATTN_KQ_STRIDE_TILE_F16/2) + i] = val;
+            }
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+                VKQ[j0/nwarps][i0/WARP_SIZE] *= KQ_max_scale;
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int k0 = 0; k0 < FATTN_KQ_STRIDE_TILE_F16; k0 += nwarps) {
+            const int k = k0 + threadIdx.y;
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                KV_tmp[k][i] = V_h2[(k_VKQ_0 + k)*stride_KV2 + i];
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int k0 = 0; k0 < FATTN_KQ_STRIDE_TILE_F16; k0 += 2) {
+            half2  V_k[(D/2)/WARP_SIZE][2];
+            half2 KQ_k[ncols/nwarps];
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                V_k[i0/WARP_SIZE][0] = KV_tmp[k0 + 0][i];
+                V_k[i0/WARP_SIZE][1] = KV_tmp[k0 + 1][i];
+            }
+#pragma unroll
+            for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+                const int j = j0 + threadIdx.y;
+
+                KQ_k[j0/nwarps] = KQ2[j*(FATTN_KQ_STRIDE_TILE_F16/2) + k0/2];
+            }
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+#pragma unroll
+                for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+                    VKQ[j0/nwarps][i0/WARP_SIZE] += V_k[i0/WARP_SIZE][0]* __low2half2(KQ_k[j0/nwarps]);
+                    VKQ[j0/nwarps][i0/WARP_SIZE] += V_k[i0/WARP_SIZE][1]*__high2half2(KQ_k[j0/nwarps]);
+                }
+            }
+        }
+
+        __syncthreads();
+    }
+
+#pragma unroll
+    for (int j_VKQ_0 = 0; j_VKQ_0 < ncols; j_VKQ_0 += nwarps) {
+        const int j_VKQ = j_VKQ_0 + threadIdx.y;
+
+        if (ic0 + j_VKQ >= ne01) {
+            return;
+        }
+
+        half kqsum_j = __low2half(kqsum[j_VKQ_0/nwarps]) + __high2half(kqsum[j_VKQ_0/nwarps]);
+        kqsum_j = warp_reduce_sum(kqsum_j);
+
+#pragma unroll
+        for (int i00 = 0; i00 < D; i00 += 2*WARP_SIZE) {
+            const int i0 = i00 + 2*threadIdx.x;
+
+            half2 dst_val = VKQ[j_VKQ_0/nwarps][i0/(2*WARP_SIZE)];
+            if (parallel_blocks == 1) {
+                dst_val /= __half2half2(kqsum_j);
+            }
+            const int j_dst = (ic0 + j_VKQ)*parallel_blocks + ip;
+            dst[j_dst*D*gridDim.y + D*blockIdx.y + i0 + 0] =  __low2float(dst_val);
+            dst[j_dst*D*gridDim.y + D*blockIdx.y + i0 + 1] = __high2float(dst_val);
+        }
+
+        if (parallel_blocks != 1 && threadIdx.x == 0) {
+            dst_meta[(ic0 + j_VKQ)*gridDim.y*parallel_blocks + blockIdx.y*parallel_blocks + ip] = make_float2(kqmax[j_VKQ_0/nwarps], kqsum_j);
+        }
+    }
+#else
+   NO_DEVICE_CODE;
+#endif // FP16_AVAILABLE
+}
+
+template <int cols_per_block, int parallel_blocks>
+void launch_fattn_tile_f16_64_128(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * Q = dst->src[0];
+    switch (Q->ne[0]) {
+        case  64: {
+            constexpr int      D = 64;
+            constexpr int nwarps = 8;
+            fattn_kernel_t fattn_kernel = flash_attn_tile_ext_f16<D, cols_per_block, nwarps, parallel_blocks>;
+            launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
+        } break;
+        case 128: {
+            constexpr int      D = 128;
+            constexpr int nwarps = 8;
+            fattn_kernel_t fattn_kernel = flash_attn_tile_ext_f16<D, cols_per_block, nwarps, parallel_blocks>;
+            launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
+        } break;
+        default: {
+            GGML_ASSERT(false && "FlashAttention without tensor cores only supports head sizes 64 and 128.");
+        } break;
+    }
+}
+
+void ggml_cuda_flash_attn_ext_tile_f16(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * KQV = dst;
+    const ggml_tensor * Q   = dst->src[0];
+
+    const int32_t precision = KQV->op_params[2];
+    GGML_ASSERT(precision == GGML_PREC_DEFAULT);
+
+    if (Q->ne[1] <= 16) {
+        constexpr int cols_per_block = 16;
+        constexpr int parallel_blocks = 4;
+        launch_fattn_tile_f16_64_128<cols_per_block, parallel_blocks>(ctx, dst);
+        return;
+    }
+
+    if (Q->ne[1] <= 32) {
+        constexpr int cols_per_block = 32;
+        constexpr int parallel_blocks = 4;
+        launch_fattn_tile_f16_64_128<cols_per_block, parallel_blocks>(ctx, dst);
+        return;
+    }
+
+    constexpr int cols_per_block = 32;
+    constexpr int parallel_blocks = 1;
+    launch_fattn_tile_f16_64_128<cols_per_block, parallel_blocks>(ctx, dst);
+}
diff --git a/ggml/src/ggml-cuda/fattn-tile-f16.cuh b/ggml/src/ggml-cuda/fattn-tile-f16.cuh
new file mode 100644 (file)
index 0000000..ffc5878
--- /dev/null
@@ -0,0 +1,3 @@
+#include "common.cuh"
+
+void ggml_cuda_flash_attn_ext_tile_f16(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/fattn-tile-f32.cu b/ggml/src/ggml-cuda/fattn-tile-f32.cu
new file mode 100644 (file)
index 0000000..15e22f4
--- /dev/null
@@ -0,0 +1,312 @@
+#include "common.cuh"
+#include "fattn-common.cuh"
+#include "fattn-tile-f32.cuh"
+
+#define FATTN_KQ_STRIDE_TILE_F32 32
+
+template<int D, int ncols, int nwarps, int parallel_blocks> // D == head size
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+__launch_bounds__(nwarps*WARP_SIZE, 1)
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+static __global__ void flash_attn_tile_ext_f32(
+        const char * __restrict__ Q,
+        const char * __restrict__ K,
+        const char * __restrict__ V,
+        const char * __restrict__ mask,
+        float      * __restrict__ dst,
+        float2     * __restrict__ dst_meta,
+        const float scale,
+        const float max_bias,
+        const float m0,
+        const float m1,
+        const uint32_t n_head_log2,
+        const int ne00,
+        const int ne01,
+        const int ne02,
+        const int ne03,
+        const int ne10,
+        const int ne11,
+        const int ne12,
+        const int ne13,
+        const int ne31,
+        const int nb31,
+        const int nb01,
+        const int nb02,
+        const int nb03,
+        const int nb11,
+        const int nb12,
+        const int nb13,
+        const int nb21,
+        const int nb22,
+        const int nb23,
+        const int ne0,
+        const int ne1,
+        const int ne2,
+        const int ne3) {
+    //In this kernel Q, K, V are matrices while i, j, k are matrix indices.
+
+    const int ic0 = (blockIdx.x / parallel_blocks) * ncols; // Index of the Q/QKV column to work on.
+    const int ip  =  blockIdx.x % parallel_blocks; // Index in group of blocks running for the same column in parallel.
+
+    const int gqa_ratio = ne02 / ne12; // With grouped query attention there are > 1 Q matrices per K, V matrix.
+    const float2 * Q_f2  = (const float2 *) (Q    + nb02* blockIdx.y              + nb01*ic0);
+    const half2  * K_h2  = (const half2  *) (K    + nb12*(blockIdx.y / gqa_ratio));
+    const half2  * V_h2  = (const half2  *) (V    + nb12*(blockIdx.y / gqa_ratio)); // K and V have same shape
+    const half   * maskh = (const half   *)  mask + ne11*ic0;
+
+    const int stride_KV2 = nb11 / sizeof(half2);
+
+    const float slope = get_alibi_slope(max_bias, blockIdx.y, n_head_log2, m0, m1);
+
+    static_assert(D % (2*WARP_SIZE) == 0, "D not divisible by 2*WARP_SIZE == 64.");
+
+    __shared__ float KQ[ncols*FATTN_KQ_STRIDE_TILE_F32];
+
+    __shared__ float KV_tmp[FATTN_KQ_STRIDE_TILE_F32][D + 1]; // Pad D to avoid memory bank conflicts.
+    float2 * KV_tmp2 = (float2 *) KV_tmp;
+
+    float kqmax[ncols/nwarps];
+#pragma unroll
+    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+        kqmax[j0/nwarps] = -FLT_MAX/2.0f;
+    }
+    float kqsum[ncols/nwarps] = {0.0f};
+
+    float2 VKQ[ncols/nwarps][(D/2)/WARP_SIZE] = {{{0.0f, 0.0f}}};
+
+    // Convert Q to half2 and store in registers:
+    __shared__ float Q_f[ncols][D];
+#pragma unroll
+    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < D; i0 += 2*WARP_SIZE) {
+            float2 tmp = ic0 + j < ne01 ? Q_f2[j*(nb01/sizeof(float2)) + i0/2 + threadIdx.x] : make_float2(0.0f, 0.0f);
+            Q_f[j][i0 + 0*WARP_SIZE + threadIdx.x] = tmp.x * scale;
+            Q_f[j][i0 + 1*WARP_SIZE + threadIdx.x] = tmp.y * scale;
+        }
+    }
+
+    __syncthreads();
+
+    const int k_start = parallel_blocks == 1 ? 0 : ip*FATTN_KQ_STRIDE_TILE_F32;
+    for (int k_VKQ_0 = k_start; k_VKQ_0 < ne11; k_VKQ_0 += parallel_blocks*FATTN_KQ_STRIDE_TILE_F32) {
+        // Calculate KQ tile and keep track of new maximum KQ values:
+
+        float kqmax_new[ncols/nwarps];
+#pragma unroll
+        for (int j = 0; j < ncols/nwarps; ++j) {
+            kqmax_new[j] = kqmax[j];
+        }
+
+#pragma unroll
+        for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F32; i_KQ_0 += nwarps) {
+            const int i_KQ = i_KQ_0 + threadIdx.y;
+
+#pragma unroll
+            for (int k_KQ_0 = 0; k_KQ_0 < D; k_KQ_0 += 2*WARP_SIZE) {
+                const half2 tmp = K_h2[(k_VKQ_0 + i_KQ)*stride_KV2 + k_KQ_0/2 + threadIdx.x];
+                KV_tmp[i_KQ][k_KQ_0 + 0*WARP_SIZE + threadIdx.x] =  __low2float(tmp);
+                KV_tmp[i_KQ][k_KQ_0 + 1*WARP_SIZE + threadIdx.x] = __high2float(tmp);
+            }
+        }
+
+        __syncthreads();
+
+        float sum[FATTN_KQ_STRIDE_TILE_F32/WARP_SIZE][ncols/nwarps] = {{0.0f}};
+
+#pragma unroll
+        for (int k_KQ = 0; k_KQ < D; ++k_KQ) {
+            float K_k[FATTN_KQ_STRIDE_TILE_F32/WARP_SIZE];
+            float Q_k[ncols/nwarps];
+
+#pragma unroll
+            for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F32; i_KQ_0 += WARP_SIZE) {
+                const int i_KQ = i_KQ_0 + threadIdx.x;
+
+                K_k[i_KQ_0/WARP_SIZE] = KV_tmp[i_KQ][k_KQ];
+            }
+#pragma unroll
+            for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
+                const int j_KQ = j_KQ_0 + threadIdx.y;
+
+                Q_k[j_KQ_0/nwarps] = Q_f[j_KQ][k_KQ];
+            }
+
+#pragma unroll
+            for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F32; i_KQ_0 += WARP_SIZE) {
+#pragma unroll
+                for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
+                    sum[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps] += K_k[i_KQ_0/WARP_SIZE] * Q_k[j_KQ_0/nwarps];
+                }
+            }
+        }
+
+#pragma unroll
+        for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE_TILE_F32; i_KQ_0 += WARP_SIZE) {
+            const int i_KQ = i_KQ_0 + threadIdx.x;
+
+#pragma unroll
+            for (int j_KQ_0 = 0; j_KQ_0 < ncols; j_KQ_0 += nwarps) {
+                const int j_KQ = j_KQ_0 + threadIdx.y;
+
+                sum[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps] += mask ? slope*__half2float(maskh[j_KQ*ne11 + k_VKQ_0 + i_KQ]) : 0.0f;
+
+                kqmax_new[j_KQ_0/nwarps] = fmaxf(kqmax_new[j_KQ_0/nwarps], sum[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps]);
+
+                KQ[j_KQ*FATTN_KQ_STRIDE_TILE_F32 + i_KQ] = sum[i_KQ_0/WARP_SIZE][j_KQ_0/nwarps];
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+            const int j = j0 + threadIdx.y;
+
+            kqmax_new[j0/nwarps] = warp_reduce_max(kqmax_new[j0/nwarps]);
+            const float KQ_max_scale = expf(kqmax[j0/nwarps] - kqmax_new[j0/nwarps]);
+            kqmax[j0/nwarps] = kqmax_new[j0/nwarps];
+
+            float kqsum_add = 0.0f;
+#pragma unroll
+            for (int i0 = 0; i0 < FATTN_KQ_STRIDE_TILE_F32; i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                const float diff = KQ[j*FATTN_KQ_STRIDE_TILE_F32 + i] - kqmax[j0/nwarps];
+                const float val = expf(diff);
+                kqsum_add += val;
+                KQ[j*FATTN_KQ_STRIDE_TILE_F32 + i] = val;
+            }
+            kqsum[j0/nwarps] = kqsum[j0/nwarps]*KQ_max_scale + kqsum_add;
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+                VKQ[j0/nwarps][i0/WARP_SIZE].x *= KQ_max_scale;
+                VKQ[j0/nwarps][i0/WARP_SIZE].y *= KQ_max_scale;
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int k0 = 0; k0 < FATTN_KQ_STRIDE_TILE_F32; k0 += nwarps) {
+            const int k = k0 + threadIdx.y;
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                KV_tmp2[k*(D/2) + i].x =  __low2float(V_h2[(k_VKQ_0 + k)*stride_KV2 + i]);
+                KV_tmp2[k*(D/2) + i].y = __high2float(V_h2[(k_VKQ_0 + k)*stride_KV2 + i]);
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int k = 0; k < FATTN_KQ_STRIDE_TILE_F32; ++k) {
+            float2 V_k[(D/2)/WARP_SIZE];
+            float  KQ_k[ncols/nwarps];
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                V_k[i0/WARP_SIZE] = KV_tmp2[k*(D/2) + i];
+            }
+#pragma unroll
+            for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+                const int j = j0 + threadIdx.y;
+
+                KQ_k[j0/nwarps] = KQ[j*FATTN_KQ_STRIDE_TILE_F32 + k];
+            }
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+#pragma unroll
+                for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+                    VKQ[j0/nwarps][i0/WARP_SIZE].x += V_k[i0/WARP_SIZE].x*KQ_k[j0/nwarps];
+                    VKQ[j0/nwarps][i0/WARP_SIZE].y += V_k[i0/WARP_SIZE].y*KQ_k[j0/nwarps];
+                }
+            }
+        }
+
+        __syncthreads();
+    }
+
+#pragma unroll
+    for (int j_VKQ_0 = 0; j_VKQ_0 < ncols; j_VKQ_0 += nwarps) {
+        const int j_VKQ = j_VKQ_0 + threadIdx.y;
+
+        if (ic0 + j_VKQ >= ne01) {
+            return;
+        }
+
+        float kqsum_j = kqsum[j_VKQ_0/nwarps];
+        kqsum_j = warp_reduce_sum(kqsum_j);
+
+#pragma unroll
+        for (int i00 = 0; i00 < D; i00 += 2*WARP_SIZE) {
+            const int i0 = i00 + 2*threadIdx.x;
+
+            float2 dst_val = VKQ[j_VKQ_0/nwarps][i0/(2*WARP_SIZE)];
+            if (parallel_blocks == 1) {
+                dst_val.x /= kqsum_j;
+                dst_val.y /= kqsum_j;
+            }
+            const int j_dst = (ic0 + j_VKQ)*parallel_blocks + ip;
+            dst[j_dst*D*gridDim.y + D*blockIdx.y + i0 + 0] = dst_val.x;
+            dst[j_dst*D*gridDim.y + D*blockIdx.y + i0 + 1] = dst_val.y;
+        }
+
+        if (parallel_blocks != 1 && threadIdx.x == 0) {
+            dst_meta[(ic0 + j_VKQ)*gridDim.y*parallel_blocks + blockIdx.y*parallel_blocks + ip] = make_float2(kqmax[j_VKQ_0/nwarps], kqsum_j);
+        }
+    }
+}
+
+template <int cols_per_block, int parallel_blocks>
+void launch_fattn_tile_f32_64_128(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * Q = dst->src[0];
+    switch (Q->ne[0]) {
+        case  64: {
+            constexpr int      D = 64;
+            constexpr int nwarps = 8;
+            fattn_kernel_t fattn_kernel = flash_attn_tile_ext_f32<D, cols_per_block, nwarps, parallel_blocks>;
+            launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
+        } break;
+        case 128: {
+            constexpr int      D = 128;
+            constexpr int nwarps = 8;
+            fattn_kernel_t fattn_kernel = flash_attn_tile_ext_f32<D, cols_per_block, nwarps, parallel_blocks>;
+            launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
+        } break;
+        default: {
+            GGML_ASSERT(false && "FlashAttention without tensor cores only supports head sizes 64 and 128.");
+        } break;
+    }
+}
+
+void ggml_cuda_flash_attn_ext_tile_f32(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * Q = dst->src[0];
+
+    if (Q->ne[1] <= 16) {
+        constexpr int cols_per_block = 16;
+        constexpr int parallel_blocks = 4;
+        launch_fattn_tile_f32_64_128<cols_per_block, parallel_blocks>(ctx, dst);
+        return;
+    }
+
+    if (Q->ne[1] <= 32) {
+        constexpr int cols_per_block = 32;
+        constexpr int parallel_blocks = 4;
+        launch_fattn_tile_f32_64_128<cols_per_block, parallel_blocks>(ctx, dst);
+        return;
+    }
+
+    constexpr int cols_per_block = 32;
+    constexpr int parallel_blocks = 1;
+    launch_fattn_tile_f32_64_128<cols_per_block, parallel_blocks>(ctx, dst);
+}
diff --git a/ggml/src/ggml-cuda/fattn-tile-f32.cuh b/ggml/src/ggml-cuda/fattn-tile-f32.cuh
new file mode 100644 (file)
index 0000000..b1c546c
--- /dev/null
@@ -0,0 +1,3 @@
+#include "common.cuh"
+
+void ggml_cuda_flash_attn_ext_tile_f32(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/fattn-vec-f16.cuh b/ggml/src/ggml-cuda/fattn-vec-f16.cuh
new file mode 100644 (file)
index 0000000..02a4ad0
--- /dev/null
@@ -0,0 +1,397 @@
+#include "common.cuh"
+#include "fattn-common.cuh"
+
+template<int D, int ncols, int parallel_blocks, ggml_type type_K, ggml_type type_V> // D == head size
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+__launch_bounds__(D, 1)
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+static __global__ void flash_attn_vec_ext_f16(
+        const char * __restrict__ Q,
+        const char * __restrict__ K,
+        const char * __restrict__ V,
+        const char * __restrict__ mask,
+        float      * __restrict__ dst,
+        float2     * __restrict__ dst_meta,
+        const float scale,
+        const float max_bias,
+        const float m0,
+        const float m1,
+        const uint32_t n_head_log2,
+        const int ne00,
+        const int ne01,
+        const int ne02,
+        const int ne03,
+        const int ne10,
+        const int ne11,
+        const int ne12,
+        const int ne13,
+        const int ne31,
+        const int nb31,
+        const int nb01,
+        const int nb02,
+        const int nb03,
+        const int nb11,
+        const int nb12,
+        const int nb13,
+        const int nb21,
+        const int nb22,
+        const int nb23,
+        const int ne0,
+        const int ne1,
+        const int ne2,
+        const int ne3) {
+#ifdef FP16_AVAILABLE
+    //In this kernel Q, K, V are matrices while i, j, k are matrix indices.
+
+    constexpr vec_dot_KQ_f16_t vec_dot_KQ = get_vec_dot_KQ_f16<D>(type_K);
+    constexpr bool Q_q8_1 = type_K != GGML_TYPE_F16;
+    constexpr dequantize_1_f16_t dequantize_1_v = get_dequantize_1_f16(type_V);
+
+    const int ic0 = (blockIdx.x / parallel_blocks) * ncols; // Index of the Q/QKV column to work on.
+    const int ip  =  blockIdx.x % parallel_blocks; // Index in group of blocks running for the same column in parallel.
+
+    const int gqa_ratio = ne02 / ne12; // With grouped query attention there are > 1 Q matrices per K, V matrix.
+    Q += nb02* blockIdx.y              + nb01*ic0;
+    K += nb12*(blockIdx.y / gqa_ratio);
+    V += nb22*(blockIdx.y / gqa_ratio);
+
+    const half * maskh = (const half   *)  mask + ne11*ic0;
+
+    const float slopef = get_alibi_slope(max_bias, blockIdx.y, n_head_log2, m0, m1);
+    const half  slopeh = __float2half(slopef);
+
+    static_assert(D % (2*WARP_SIZE) == 0, "D not divisible by 2*WARP_SIZE == 64.");
+    constexpr int nwarps = D / WARP_SIZE;
+    const int tid = WARP_SIZE*threadIdx.y + threadIdx.x;
+    __builtin_assume(tid < D);
+
+    __shared__ half KQ[ncols*D];
+    half2 * KQ2 = (half2 *) KQ;
+
+    half kqmax[ncols];
+#pragma unroll
+    for (int j = 0; j < ncols; ++j) {
+        kqmax[j] = -HALF_MAX_HALF;
+    }
+    half kqsum[ncols] = {0.0f};
+
+    __shared__ half kqmax_shared[ncols][WARP_SIZE];
+    __shared__ half kqsum_shared[ncols][WARP_SIZE];
+#pragma unroll
+    for (int j = 0; j < ncols; ++j) {
+        if (threadIdx.y == 0) {
+            kqmax_shared[j][threadIdx.x] = -HALF_MAX_HALF;
+            kqsum_shared[j][threadIdx.x] = 0.0f;
+        }
+    }
+    __syncthreads();
+
+    // Convert Q to half2 (f16 K) or q8_1 (quantized K) and store in registers:
+    half2  Q_h2[ncols][D/(2*WARP_SIZE)];
+    int   Q_i32[ncols][D/(sizeof(int)*QK8_1) == 0 ? 1 : D/(sizeof(int)*QK8_1)];
+    half2  Q_ds[ncols][D/QK8_1 == 0 ? 1 : D/QK8_1];
+    if (Q_q8_1) {
+#pragma unroll
+        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+            const int j = j0 + threadIdx.y;
+
+            if (j0 + nwarps > ncols && j >= ncols) {
+                break;
+            }
+
+            // Reuse KQ as temporary storage for converting Q to q8_1:
+            int   * tmp_q_i32 = (int   *) &KQ[j*D];
+            half2 * tmp_q_ds  = (half2 *) (tmp_q_i32 + D/sizeof(int));
+
+            // Set memory to zero if out of bounds:
+            if (ncols > 2 && ic0 + j >= ne01) {
+#pragma unroll
+                for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
+                    const int i = i0 + threadIdx.x;
+
+                    tmp_q_i32[i] = 0;
+                }
+                if (threadIdx.x < D/QK8_1) {
+                    tmp_q_ds[threadIdx.x] = make_half2(0.0f, 0.0f);
+                }
+                continue;
+            }
+
+            const float * Q_f = (const float *) (Q + j*nb01);
+#pragma unroll
+            for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
+                quantize_q8_1_to_shared<half2>(Q_f + 4*i0, scale, tmp_q_i32, tmp_q_ds);
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int j = 0; j < ncols; ++j) {
+            int   * tmp_q_i32 = (int   *) &KQ[j*D];
+            half2 * tmp_q_ds  = (half2 *) (tmp_q_i32 + D/sizeof(int));
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                Q_i32[j][i0/WARP_SIZE] = tmp_q_i32[i];
+                Q_ds[j][i0/WARP_SIZE]  = tmp_q_ds[i/QI8_1];
+            }
+        }
+
+        __syncthreads();
+    } else {
+#pragma unroll
+        for (int j = 0; j < ncols; ++j) {
+            const float2 * Q_f2_j = (const float2 *) (Q + j*nb01);
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                const float2 tmp = ncols <= 2 || ic0 + j < ne01 ? Q_f2_j[i] : make_float2(0.0f, 0.0f);
+                Q_h2[j][i0/WARP_SIZE] = make_half2(scale, scale) * make_half2(tmp.x, tmp.y);
+            }
+        }
+    }
+
+
+#pragma unroll
+    for (int j = 0; j < ncols; ++j) {
+        KQ[j*D + tid] = -HALF_MAX_HALF;
+    }
+
+    half2 VKQ[ncols] = {{0.0f, 0.0f}};
+
+    const int k_start = parallel_blocks == 1 ? 0 : ip*D;
+    for (int k_VKQ_0 = k_start; k_VKQ_0 < ne11; k_VKQ_0 += parallel_blocks*D) {
+        // Calculate KQ tile and keep track of new maximum KQ values:
+
+        // For unknown reasons using a half array of size 1 for kqmax_new causes a performance regression,
+        // see https://github.com/ggerganov/llama.cpp/pull/7061 .
+        // Therefore this variable is defined twice but only used once (so that the compiler can optimize out the unused variable).
+        half kqmax_new = kqmax[0];
+        half kqmax_new_arr[ncols];
+#pragma unroll
+        for (int j = 0; j < ncols; ++j) {
+            kqmax_new_arr[j] = kqmax[j];
+        }
+
+#pragma unroll
+        for (int i_KQ_0 = 0; i_KQ_0 < D; i_KQ_0 += nwarps) {
+            const int i_KQ = i_KQ_0 + threadIdx.y;
+
+            if ((i_KQ_0 + nwarps > D && i_KQ >= D) || (FATTN_KQ_STRIDE % D != 0 && k_VKQ_0 + i_KQ >= ne11)) {
+                break;
+            }
+
+#pragma unroll
+            for (int j = 0; j < ncols; ++j) {
+                half sum = vec_dot_KQ(K + (k_VKQ_0 + i_KQ)*nb11, Q_h2[j], Q_i32[j], Q_ds[j]);
+                sum = warp_reduce_sum(sum);
+                sum += mask ? slopeh*maskh[j*ne11 + k_VKQ_0 + i_KQ] : __float2half(0.0f);
+
+                if (ncols == 1) {
+                    kqmax_new        = ggml_cuda_hmax(kqmax_new,        sum);
+                } else {
+                    kqmax_new_arr[j] = ggml_cuda_hmax(kqmax_new_arr[j], sum);
+                }
+
+                if (threadIdx.x == 0) {
+                    KQ[j*D + i_KQ] = sum;
+                }
+            }
+        }
+
+#pragma unroll
+        for (int j = 0; j < ncols; ++j) {
+            half kqmax_new_j = ncols == 1 ? kqmax_new : kqmax_new_arr[j];
+
+            kqmax_new_j = warp_reduce_max(kqmax_new_j);
+            if (threadIdx.x == 0) {
+                kqmax_shared[j][threadIdx.y] = kqmax_new_j;
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int j = 0; j < ncols; ++j) {
+            half kqmax_new_j = kqmax_shared[j][threadIdx.x];
+            kqmax_new_j = warp_reduce_max(kqmax_new_j);
+
+            const half KQ_max_scale = hexp(kqmax[j] - kqmax_new_j);
+            kqmax[j] = kqmax_new_j;
+
+            const half val = hexp(KQ[j*D + tid] - kqmax[j]);
+            kqsum[j] = kqsum[j]*KQ_max_scale + val;
+            KQ[j*D + tid] = val;
+
+            VKQ[j] *= __half2half2(KQ_max_scale);
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int k0 = 0; k0 < D; k0 += 2) {
+            if (FATTN_KQ_STRIDE % D != 0 && k_VKQ_0 + k0 >= ne11) {
+                break;
+            }
+
+            half2 V_k;
+            reinterpret_cast<half&>(V_k.x) = dequantize_1_v(V + (k_VKQ_0 + k0 + 0)*nb21, tid);
+            reinterpret_cast<half&>(V_k.y) = dequantize_1_v(V + (k_VKQ_0 + k0 + 1)*nb21, tid);
+#pragma unroll
+            for (int j = 0; j < ncols; ++j) {
+                VKQ[j] += V_k*KQ2[j*(D/2) + k0/2];
+            }
+        }
+
+        __syncthreads();
+    }
+
+#pragma unroll
+    for (int j = 0; j < ncols; ++j) {
+        kqsum[j] = warp_reduce_sum(kqsum[j]);
+        if (threadIdx.x == 0) {
+            kqsum_shared[j][threadIdx.y] = kqsum[j];
+        }
+    }
+
+    __syncthreads();
+
+#pragma unroll
+    for (int j_VKQ = 0; j_VKQ < ncols; ++j_VKQ) {
+        if (ncols > 2 && ic0 + j_VKQ >= ne01) {
+            break;
+        }
+
+        kqsum[j_VKQ] = kqsum_shared[j_VKQ][threadIdx.x];
+        kqsum[j_VKQ] = warp_reduce_sum(kqsum[j_VKQ]);
+
+        half dst_val = (__low2half(VKQ[j_VKQ]) + __high2half(VKQ[j_VKQ]));
+        if (parallel_blocks == 1) {
+            dst_val /= kqsum[j_VKQ];
+        }
+        const int j_dst = (ic0 + j_VKQ)*parallel_blocks + ip;
+        dst[j_dst*D*gridDim.y + D*blockIdx.y + tid] = dst_val;
+    }
+
+    if (parallel_blocks != 1 && tid < ncols && (ncols <= 2 || ic0 + tid < ne01)) {
+        dst_meta[(ic0 + tid)*gridDim.y*parallel_blocks + blockIdx.y*parallel_blocks + ip] = make_float2(kqmax[tid], kqsum[tid]);
+    }
+#else
+   NO_DEVICE_CODE;
+#endif // FP16_AVAILABLE
+}
+
+template <int D, int cols_per_block, int parallel_blocks, ggml_type type_K, ggml_type type_V>
+void ggml_cuda_flash_attn_ext_vec_f16_case_impl(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    constexpr int nwarps = D/WARP_SIZE;
+    fattn_kernel_t fattn_kernel = flash_attn_vec_ext_f16<D, cols_per_block, parallel_blocks, type_K, type_V>;
+    constexpr bool need_f16_K = D != 128;
+    constexpr bool need_f16_V = D != 128 && D != 64;
+    launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, need_f16_K, need_f16_V);
+}
+
+template <int D, ggml_type type_K, ggml_type type_V>
+void ggml_cuda_flash_attn_ext_vec_f16_case(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    ggml_tensor * KQV = dst;
+    ggml_tensor * Q   = dst->src[0];
+    ggml_tensor * K   = dst->src[1];
+    ggml_tensor * V   = dst->src[2];
+
+    const int32_t precision = KQV->op_params[2];
+    GGML_ASSERT(precision == GGML_PREC_DEFAULT);
+
+    GGML_ASSERT(K->type == type_K);
+    GGML_ASSERT(V->type == type_V);
+
+    if (Q->ne[1] == 1) {
+        constexpr int cols_per_block  = 1;
+        constexpr int parallel_blocks = 4;
+        ggml_cuda_flash_attn_ext_vec_f16_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
+        return;
+    }
+
+    if (Q->ne[1] == 2) {
+        constexpr int cols_per_block  = 2;
+        constexpr int parallel_blocks = 4;
+        ggml_cuda_flash_attn_ext_vec_f16_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
+        return;
+    }
+
+    if (Q->ne[1] <= 4) {
+        constexpr int cols_per_block  = 4;
+        constexpr int parallel_blocks = 4;
+        ggml_cuda_flash_attn_ext_vec_f16_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
+        return;
+    }
+
+    if (Q->ne[1] <= 8) {
+        constexpr int cols_per_block  = 8;
+        constexpr int parallel_blocks = 4;
+        ggml_cuda_flash_attn_ext_vec_f16_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
+        return;
+    }
+
+    constexpr int cols_per_block  = 8;
+    constexpr int parallel_blocks = 1;
+    ggml_cuda_flash_attn_ext_vec_f16_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
+}
+
+#define DECL_FATTN_VEC_F16_CASE(D, type_K, type_V)                          \
+    template void ggml_cuda_flash_attn_ext_vec_f16_case                     \
+    <D, type_K, type_V>(ggml_backend_cuda_context & ctx, ggml_tensor * dst) \
+
+extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16);
+
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_0);
+
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_1);
+
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_0);
+
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_1);
+
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q8_0);
+
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16);
+extern DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_F16);
+
+extern DECL_FATTN_VEC_F16_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/fattn-vec-f32.cuh b/ggml/src/ggml-cuda/fattn-vec-f32.cuh
new file mode 100644 (file)
index 0000000..11a5e35
--- /dev/null
@@ -0,0 +1,374 @@
+#include "common.cuh"
+#include "fattn-common.cuh"
+
+template<int D, int ncols, int parallel_blocks, ggml_type type_K, ggml_type type_V> // D == head size
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+__launch_bounds__(D, 1)
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+static __global__ void flash_attn_vec_ext_f32(
+        const char * __restrict__ Q,
+        const char * __restrict__ K,
+        const char * __restrict__ V,
+        const char * __restrict__ mask,
+        float      * __restrict__ dst,
+        float2     * __restrict__ dst_meta,
+        const float scale,
+        const float max_bias,
+        const float m0,
+        const float m1,
+        const uint32_t n_head_log2,
+        const int ne00,
+        const int ne01,
+        const int ne02,
+        const int ne03,
+        const int ne10,
+        const int ne11,
+        const int ne12,
+        const int ne13,
+        const int ne31,
+        const int nb31,
+        const int nb01,
+        const int nb02,
+        const int nb03,
+        const int nb11,
+        const int nb12,
+        const int nb13,
+        const int nb21,
+        const int nb22,
+        const int nb23,
+        const int ne0,
+        const int ne1,
+        const int ne2,
+        const int ne3) {
+    //In this kernel Q, K, V are matrices while i, j, k are matrix indices.
+
+    constexpr vec_dot_KQ_f32_t vec_dot_KQ = get_vec_dot_KQ_f32<D>(type_K);
+    constexpr bool Q_q8_1 = type_K != GGML_TYPE_F16;
+    constexpr dequantize_1_f32_t dequantize_1_v = get_dequantize_1_f32(type_V);
+
+    const int ic0 = (blockIdx.x / parallel_blocks) * ncols; // Index of the Q/QKV column to work on.
+    const int ip  =  blockIdx.x % parallel_blocks; // Index in group of blocks running for the same column in parallel.
+
+    const int gqa_ratio = ne02 / ne12; // With grouped query attention there are > 1 Q matrices per K, V matrix.
+    Q += nb02* blockIdx.y              + nb01*ic0;
+    K += nb12*(blockIdx.y / gqa_ratio);
+    V += nb22*(blockIdx.y / gqa_ratio); // K and V have same shape
+    const half * maskh = (const half   *)  mask + ne11*ic0;
+
+    const float slope = get_alibi_slope(max_bias, blockIdx.y, n_head_log2, m0, m1);
+
+    static_assert(D % (2*WARP_SIZE) == 0, "D not divisible by 2*WARP_SIZE == 64.");
+    constexpr int nwarps = D / WARP_SIZE;
+    const int tid = WARP_SIZE*threadIdx.y + threadIdx.x;
+    __builtin_assume(tid < D);
+
+    __shared__ float KQ[ncols*D];
+#pragma unroll
+    for (int j = 0; j < ncols; ++j) {
+        KQ[j*D + tid] = -FLT_MAX/2.0f;
+    }
+
+    float kqmax[ncols];
+#pragma unroll
+    for (int j = 0; j < ncols; ++j) {
+        kqmax[j] = -FLT_MAX/2.0f;
+    }
+    float kqsum[ncols] = {0.0f};
+
+    __shared__ float kqmax_shared[ncols][WARP_SIZE];
+    __shared__ float kqsum_shared[ncols][WARP_SIZE];
+#pragma unroll
+    for (int j = 0; j < ncols; ++j) {
+        if (threadIdx.y == 0) {
+            kqmax_shared[j][threadIdx.x] = -FLT_MAX/2.0f;
+            kqsum_shared[j][threadIdx.x] = 0.0f;
+        }
+    }
+    __syncthreads();
+
+    // Convert Q to float2 (f16 K) or q8_1 (quantized K) and store in registers:
+    float2  Q_f2[ncols][D/(2*WARP_SIZE)];
+    int    Q_i32[ncols][D/(sizeof(int)*QK8_1) == 0 ? 1 : D >= D/(sizeof(int)*QK8_1)];
+    float2  Q_ds[ncols][D/QK8_1 == 0 ? 1 : D/QK8_1];
+    if (Q_q8_1) {
+#pragma unroll
+        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+            const int j = j0 + threadIdx.y;
+
+            if (j0 + nwarps > ncols && j >= ncols) {
+                break;
+            }
+
+            // Reuse KQ as temporary storage for converting Q to q8_1:
+            int    * tmp_q_i32 = (int    *) &KQ[j*D];
+            float2 * tmp_q_ds  = (float2 *) (tmp_q_i32 + D/sizeof(int));
+
+            // Set memory to zero if out of bounds:
+            if (ncols > 2 && ic0 + j >= ne01) {
+#pragma unroll
+                for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
+                    const int i = i0 + threadIdx.x;
+
+                    tmp_q_i32[i] = 0;
+                }
+                if (threadIdx.x < D/QK8_1) {
+                    tmp_q_ds[threadIdx.x] = make_float2(0.0f, 0.0f);
+                }
+                continue;
+            }
+
+            const float * Q_f = (const float *) (Q + j*nb01);
+#pragma unroll
+            for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
+                quantize_q8_1_to_shared<float2>(Q_f + 4*i0, scale, tmp_q_i32, tmp_q_ds);
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int j = 0; j < ncols; ++j) {
+            int    * tmp_q_i32 = (int    *) &KQ[j*D];
+            float2 * tmp_q_ds  = (float2 *) (tmp_q_i32 + D/sizeof(int));
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/sizeof(int); i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                Q_i32[j][i0/WARP_SIZE] = tmp_q_i32[i];
+                Q_ds[j][i0/WARP_SIZE]  = tmp_q_ds[i/QI8_1];
+            }
+        }
+
+        __syncthreads();
+    } else {
+#pragma unroll
+        for (int j = 0; j < ncols; ++j) {
+            const float2 * Q_f2_j = (const float2 *) (Q + j*nb01);
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                Q_f2[j][i0/WARP_SIZE]    = ncols <= 2 || ic0 + j < ne01 ? Q_f2_j[i] : make_float2(0.0f, 0.0f);
+                Q_f2[j][i0/WARP_SIZE].x *= scale;
+                Q_f2[j][i0/WARP_SIZE].y *= scale;
+            }
+        }
+    }
+
+    float VKQ[ncols] = {0.0f};
+
+    const int k_start = parallel_blocks == 1 ? 0 : ip*D;
+    for (int k_VKQ_0 = k_start; k_VKQ_0 < ne11; k_VKQ_0 += parallel_blocks*D) {
+        // Calculate KQ tile and keep track of new maximum KQ values:
+
+        float kqmax_new_arr[ncols];
+#pragma unroll
+        for (int j = 0; j < ncols; ++j) {
+            kqmax_new_arr[j] = kqmax[j];
+        }
+
+#pragma unroll
+        for (int i_KQ_0 = 0; i_KQ_0 < D; i_KQ_0 += nwarps) {
+            const int i_KQ = i_KQ_0 + threadIdx.y;
+
+            if ((i_KQ_0 + nwarps > D && i_KQ >= D) || (FATTN_KQ_STRIDE % D != 0 && k_VKQ_0 + i_KQ >= ne11)) {
+                break;
+            }
+
+#pragma unroll
+            for (int j = 0; j < ncols; ++j) {
+                float sum = vec_dot_KQ(K + (k_VKQ_0 + i_KQ)*nb11, Q_f2[j], Q_i32[j], Q_ds[j]);
+                sum = warp_reduce_sum(sum);
+                sum += mask ? slope*__half2float(maskh[j*ne11 + k_VKQ_0 + i_KQ]) : 0.0f;
+
+                kqmax_new_arr[j] = fmaxf(kqmax_new_arr[j], sum);
+
+                if (threadIdx.x == 0) {
+                    KQ[j*D + i_KQ] = sum;
+                }
+            }
+        }
+
+#pragma unroll
+        for (int j = 0; j < ncols; ++j) {
+            float kqmax_new_j = kqmax_new_arr[j];
+
+            kqmax_new_j = warp_reduce_max(kqmax_new_j);
+            if (threadIdx.x == 0) {
+                kqmax_shared[j][threadIdx.y] = kqmax_new_j;
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int j = 0; j < ncols; ++j) {
+            float kqmax_new_j = kqmax_shared[j][threadIdx.x];
+            kqmax_new_j = warp_reduce_max(kqmax_new_j);
+
+            const float KQ_max_scale = expf(kqmax[j] - kqmax_new_j);
+            kqmax[j] = kqmax_new_j;
+
+            const float val = expf(KQ[j*D + tid] - kqmax[j]);
+            kqsum[j] = kqsum[j]*KQ_max_scale + val;
+            KQ[j*D + tid] = val;
+
+            VKQ[j] *= KQ_max_scale;
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int k = 0; k < D; ++k) {
+            if (FATTN_KQ_STRIDE % D != 0 && k_VKQ_0 + k >= ne11) {
+                break;
+            }
+
+            const float V_ki = dequantize_1_v(V + (k_VKQ_0 + k)*nb21, tid);
+#pragma unroll
+            for (int j = 0; j < ncols; ++j) {
+                VKQ[j] += V_ki*KQ[j*D + k];
+            }
+        }
+
+        __syncthreads();
+    }
+
+#pragma unroll
+    for (int j = 0; j < ncols; ++j) {
+        kqsum[j] = warp_reduce_sum(kqsum[j]);
+        if (threadIdx.x == 0) {
+            kqsum_shared[j][threadIdx.y] = kqsum[j];
+        }
+    }
+
+    __syncthreads();
+
+#pragma unroll
+    for (int j_VKQ = 0; j_VKQ < ncols; ++j_VKQ) {
+        if (ncols > 2 && ic0 + j_VKQ >= ne01) {
+            break;
+        }
+
+        kqsum[j_VKQ] = kqsum_shared[j_VKQ][threadIdx.x];
+        kqsum[j_VKQ] = warp_reduce_sum(kqsum[j_VKQ]);
+
+        float dst_val = VKQ[j_VKQ];
+        if (parallel_blocks == 1) {
+            dst_val /= kqsum[j_VKQ];
+        }
+        const int j_dst = (ic0 + j_VKQ)*parallel_blocks + ip;
+        dst[j_dst*D*gridDim.y + D*blockIdx.y + tid] = dst_val;
+    }
+
+    if (parallel_blocks != 1 && tid < ncols && (ncols <= 2 || ic0 + tid < ne01)) {
+        dst_meta[(ic0 + tid)*gridDim.y*parallel_blocks + blockIdx.y*parallel_blocks + ip] = make_float2(kqmax[tid], kqsum[tid]);
+    }
+}
+
+template <int D, int cols_per_block, int parallel_blocks, ggml_type type_K, ggml_type type_V>
+void ggml_cuda_flash_attn_ext_vec_f32_case_impl(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    constexpr int nwarps = D/WARP_SIZE;
+    fattn_kernel_t fattn_kernel = flash_attn_vec_ext_f32<D, cols_per_block, parallel_blocks, type_K, type_V>;
+    constexpr bool need_f16_K = D != 128;
+    constexpr bool need_f16_V = D != 128 && D != 64;
+    launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, need_f16_K, need_f16_V);
+}
+
+template <int D, ggml_type type_K, ggml_type type_V>
+void ggml_cuda_flash_attn_ext_vec_f32_case(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    ggml_tensor * Q   = dst->src[0];
+    ggml_tensor * K   = dst->src[1];
+    ggml_tensor * V   = dst->src[2];
+
+    GGML_ASSERT(K->type == type_K);
+    GGML_ASSERT(V->type == type_V);
+
+    if (Q->ne[1] == 1) {
+        constexpr int cols_per_block  = 1;
+        constexpr int parallel_blocks = 4;
+        ggml_cuda_flash_attn_ext_vec_f32_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
+        return;
+    }
+
+    if (Q->ne[1] == 2) {
+        constexpr int cols_per_block  = 2;
+        constexpr int parallel_blocks = 4;
+        ggml_cuda_flash_attn_ext_vec_f32_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
+        return;
+    }
+
+    if (Q->ne[1] <= 4) {
+        constexpr int cols_per_block  = 4;
+        constexpr int parallel_blocks = 4;
+        ggml_cuda_flash_attn_ext_vec_f32_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
+        return;
+    }
+
+    if (Q->ne[1] <= 8) {
+        constexpr int cols_per_block  = 8;
+        constexpr int parallel_blocks = 4;
+        ggml_cuda_flash_attn_ext_vec_f32_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
+        return;
+    }
+
+    constexpr int cols_per_block  = 8;
+    constexpr int parallel_blocks = 1;
+    ggml_cuda_flash_attn_ext_vec_f32_case_impl<D, cols_per_block, parallel_blocks, type_K, type_V>(ctx, dst);
+}
+
+#define DECL_FATTN_VEC_F32_CASE(D, type_K, type_V)                          \
+    template void ggml_cuda_flash_attn_ext_vec_f32_case                     \
+    <D, type_K, type_V>(ggml_backend_cuda_context & ctx, ggml_tensor * dst) \
+
+extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16);
+
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_0);
+
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_1);
+
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_0);
+
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_1);
+
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q8_0);
+
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16);
+extern DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_F16);
+
+extern DECL_FATTN_VEC_F32_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/fattn-wmma-f16.cuh b/ggml/src/ggml-cuda/fattn-wmma-f16.cuh
new file mode 100644 (file)
index 0000000..ae23222
--- /dev/null
@@ -0,0 +1,490 @@
+#include "common.cuh"
+#include "fattn-common.cuh"
+
+#ifdef FP16_MMA_AVAILABLE
+#include <mma.h>
+#endif // FP16_MMA_AVAILABLE
+
+// D == head size, VKQ_stride == num VKQ rows calculated in parallel:
+template<int D, int ncols, int nwarps, int VKQ_stride, int parallel_blocks, typename KQ_acc_t>
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+__launch_bounds__(nwarps*WARP_SIZE, 1)
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+static __global__ void flash_attn_ext_f16(
+        const char * __restrict__ Q,
+        const char * __restrict__ K,
+        const char * __restrict__ V,
+        const char * __restrict__ mask,
+        float      * __restrict__ dst,
+        float2     * __restrict__ dst_meta,
+        const float scale,
+        const float max_bias,
+        const float m0,
+        const float m1,
+        const uint32_t n_head_log2,
+        const int ne00,
+        const int ne01,
+        const int ne02,
+        const int ne03,
+        const int ne10,
+        const int ne11,
+        const int ne12,
+        const int ne13,
+        const int ne31,
+        const int nb31,
+        const int nb01,
+        const int nb02,
+        const int nb03,
+        const int nb11,
+        const int nb12,
+        const int nb13,
+        const int nb21,
+        const int nb22,
+        const int nb23,
+        const int ne0,
+        const int ne1,
+        const int ne2,
+        const int ne3) {
+#ifdef FP16_MMA_AVAILABLE
+    //In this kernel Q, K, V are matrices while i, j, k are matrix indices.
+
+    const int ic0 = ncols*(blockIdx.x / parallel_blocks); // Index of the first Q/QKV column to work on.
+    const int ip  =        blockIdx.x % parallel_blocks;  // Index in group of blocks running for the same column in parallel.
+
+    static_assert(D <= FATTN_KQ_STRIDE, "D must be <= FATTN_KQ_STRIDE.");
+    static_assert(ncols == 8 || ncols % 16 == 0, "ncols must be 8 or a multiple of 16.");
+    constexpr int frag_m = ncols == 8 ? 32 : 16;
+    constexpr int frag_n = ncols == 8 ?  8 : 16;
+    static_assert(D % frag_m == 0, "If ncols == 8 then D % frag_m must be 0.");
+    typedef nvcuda::wmma::fragment<nvcuda::wmma::matrix_a,    frag_m, frag_n, 16, half, nvcuda::wmma::row_major> frag_a_K;
+    typedef nvcuda::wmma::fragment<nvcuda::wmma::matrix_a,    frag_m, frag_n, 16, half, nvcuda::wmma::col_major> frag_a_V;
+    typedef nvcuda::wmma::fragment<nvcuda::wmma::matrix_b,    frag_m, frag_n, 16, half, nvcuda::wmma::col_major> frag_b;
+    typedef nvcuda::wmma::fragment<nvcuda::wmma::accumulator, frag_m, frag_n, 16, KQ_acc_t>                      frag_c_KQ;
+    typedef nvcuda::wmma::fragment<nvcuda::wmma::accumulator, frag_m, frag_n, 16, half>                          frag_c_VKQ;
+
+    constexpr int KQ_stride_tc  = nwarps*frag_m; // Number of KQ rows calculated in parallel.
+    constexpr int VKQ_ratio = KQ_stride_tc/VKQ_stride; // Number of parallel VKQ accumulators needed to keep all warps busy.
+    static_assert(VKQ_ratio <= nwarps, "VKQ_ratio must be <= nwarps.");
+
+    // Pad internal representation of KQ, KQV to reduce shared memory bank conflicts:
+    constexpr int D_padded = D + 8;
+    constexpr int kqs_padded = FATTN_KQ_STRIDE + 8;
+    constexpr int kqar = sizeof(KQ_acc_t)/sizeof(half);
+
+    const int gqa_ratio = ne02 / ne12; // With grouped query attention there are > 1 Q matrices per K, V matrix.
+    const float * Q_f   = (const float *) (Q + nb02* blockIdx.y              + nb01*ic0);
+    const half  * K_h   = (const half  *) (K + nb12*(blockIdx.y / gqa_ratio));
+    const half  * V_h   = (const half  *) (V + nb12*(blockIdx.y / gqa_ratio)); // K and V have same shape
+    const half  * maskh = (const half  *)  mask + (nb31/sizeof(half))* ic0;
+    const half2 * mask2 = (const half2 *)  mask + (nb31/sizeof(half))*(ic0/2);
+
+    const int stride_Q  = nb01 / sizeof(float);
+    const int stride_KV = nb11 / sizeof(half);
+
+    const float slopef = get_alibi_slope(max_bias, blockIdx.y, n_head_log2, m0, m1);
+    const half  slopeh = __float2half(slopef);
+    const half2 slope2 = make_half2(slopef, slopef);
+
+    frag_b Q_b[D/16][ncols/frag_n];
+
+    // A single buffer for temporarily holding tiles of KQ and VKQ parts:
+    constexpr int mem_KQ = ncols*kqs_padded*kqar;
+    constexpr int mem_VKQ_parts = VKQ_ratio*ncols*D_padded;
+    __shared__ half KQ[mem_KQ >= mem_VKQ_parts ? mem_KQ : mem_VKQ_parts];
+    float * KQ_f = (float *) KQ;
+    half2 * KQ2 = (half2 *) KQ;
+
+    float    KQ_rowsum_f[ncols/nwarps] = {0.0f};
+    float       KQ_max_f[ncols/nwarps];
+    float KQ_max_scale_f[ncols/nwarps] = {0.0f};
+
+#pragma unroll
+    for (int j = 0; j < ncols/nwarps; ++j) {
+        KQ_max_f[j] = -FLT_MAX/2.0f;
+    }
+
+    half2    KQ_rowsum_h2[ncols/nwarps] = {{0.0f, 0.0f}};
+    half2       KQ_max_h2[ncols/nwarps];
+    half2 KQ_max_scale_h2[ncols/nwarps] = {{0.0f, 0.0f}};
+
+#pragma unroll
+    for (int j = 0; j < ncols/nwarps; ++j) {
+        KQ_max_h2[j] = make_half2(-HALF_MAX_HALF, -HALF_MAX_HALF);
+    }
+
+    __shared__ half VKQ[ncols*D_padded]; // Accumulator for final VKQ slice.
+    half2 * VKQ2 = (half2 *) VKQ;
+#pragma unroll
+    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+#pragma unroll
+        for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+            if (i0 + WARP_SIZE > D/2 && i >= D/2) {
+                break;
+            }
+            VKQ2[j*(D_padded/2) + i] = make_half2(0.0f, 0.0f);
+        }
+    }
+
+    // Convert Q to half and apply scale, temporarily store in KQ:
+#pragma unroll
+    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+#pragma unroll
+        for (int i0 = 0; i0 < D; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+            if (i0 + WARP_SIZE > D && i >= D) {
+                break;
+            }
+            KQ[j*D_padded + i] = ic0 + j < ne01 ? Q_f[j*stride_Q + i] * scale : 0.0f;
+        }
+    }
+
+    __syncthreads();
+
+    // Load Q into tensor core fragments/registers since it will be used frequently:
+#pragma unroll
+    for (int i0 = 0; i0 < D; i0 += 16) {
+#pragma unroll
+        for (int j0 = 0; j0 < ncols; j0 += frag_n) {
+            nvcuda::wmma::load_matrix_sync(Q_b[i0/16][j0/frag_n], KQ + j0*D_padded + i0, D_padded);
+        }
+    }
+
+    __syncthreads();
+
+    // Iterate over ne11 == previous tokens:
+    for (int k_VKQ_0 = ip*FATTN_KQ_STRIDE; k_VKQ_0 < ne11; k_VKQ_0 += parallel_blocks*FATTN_KQ_STRIDE) {
+        // Calculate tile of KQ:
+#pragma unroll
+        for (int i_KQ_0 = 0; i_KQ_0 < FATTN_KQ_STRIDE; i_KQ_0 += KQ_stride_tc) {
+            frag_c_KQ KQ_c[ncols/frag_n];
+#pragma unroll
+            for (int j = 0; j < ncols/frag_n; ++j) {
+                nvcuda::wmma::fill_fragment(KQ_c[j], 0.0f);
+            }
+#pragma unroll
+            for (int k_KQ_0 = 0; k_KQ_0 < D; k_KQ_0 += 16) {
+                frag_a_K K_a;
+                nvcuda::wmma::load_matrix_sync(K_a, K_h + (k_VKQ_0 + i_KQ_0 + frag_m*threadIdx.y)*stride_KV + k_KQ_0, stride_KV);
+#pragma unroll
+                for (int j = 0; j < ncols/frag_n; ++j) {
+                    nvcuda::wmma::mma_sync(KQ_c[j], K_a, Q_b[k_KQ_0/16][j], KQ_c[j]);
+                }
+            }
+#pragma unroll
+            for (int j0 = 0; j0 < ncols; j0 += frag_n) {
+                nvcuda::wmma::store_matrix_sync((KQ_acc_t *) KQ + j0*kqs_padded + i_KQ_0 + frag_m*threadIdx.y, KQ_c[j0/frag_n], kqs_padded, nvcuda::wmma::mem_col_major);
+            }
+        }
+
+        __syncthreads();
+
+        // Calculate softmax for each KQ column using the current max. value.
+        // The divisor is stored in KQ_rowsum and will be applied at the end.
+#pragma unroll
+        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+            const int j = j0 + threadIdx.y;
+
+            if (std::is_same<KQ_acc_t, float>::value) {
+                float KQ_f_tmp[FATTN_KQ_STRIDE / WARP_SIZE];
+#pragma unroll
+                for (int k0 = 0; k0 < FATTN_KQ_STRIDE; k0 += WARP_SIZE) {
+                    const int k = k0 + threadIdx.x;
+
+                    KQ_f_tmp[k0/WARP_SIZE] = KQ_f[j*kqs_padded + k];
+                }
+
+                float KQ_max_new = KQ_max_f[j0/nwarps];
+#pragma unroll
+                for (int k0 = 0; k0 < FATTN_KQ_STRIDE; k0 += WARP_SIZE) {
+                    const int k = k0 + threadIdx.x;
+
+                    KQ_f_tmp[k0/WARP_SIZE] += mask ? __half2float(slopeh*maskh[j*(nb31/sizeof(half)) + k_VKQ_0 + k]) : 0.0f;
+                    KQ_max_new = max(KQ_max_new, KQ_f_tmp[k0/WARP_SIZE]);
+                }
+                KQ_max_new = warp_reduce_max(KQ_max_new);
+
+                const float diff = KQ_max_f[j0/nwarps] - KQ_max_new;
+                KQ_max_scale_f[j0/nwarps] = expf(diff);
+                if (diff <= SOFTMAX_FTZ_THRESHOLD) {
+                    KQ_max_scale_f[j0/nwarps] = 0.0f;
+                }
+                KQ_max_f[j0/nwarps] = KQ_max_new;
+
+                float KQ_rowsum_add = 0.0f;
+#pragma unroll
+                for (int k0 = 0; k0 < FATTN_KQ_STRIDE; k0 += WARP_SIZE) {
+                    const int k = k0 + threadIdx.x;
+
+                    const float diff = KQ_f_tmp[k0/WARP_SIZE] - KQ_max_f[j0/nwarps];
+                    KQ_f_tmp[k0/WARP_SIZE] = expf(diff);
+                    if (diff <= SOFTMAX_FTZ_THRESHOLD) {
+                        KQ_f_tmp[k0/WARP_SIZE] = 0.0f;
+                    }
+                    KQ_rowsum_add += KQ_f_tmp[k0/WARP_SIZE];
+                    KQ[j*(kqar*kqs_padded) + k] = KQ_f_tmp[k0/WARP_SIZE];
+                }
+                KQ_rowsum_add = warp_reduce_sum(KQ_rowsum_add);
+
+                // Scale previous KQ_rowsum to account for a potential increase in KQ_max:
+                KQ_rowsum_f[j0/nwarps] = KQ_max_scale_f[j0/nwarps]*KQ_rowsum_f[j0/nwarps] + KQ_rowsum_add;
+            } else {
+                half2 KQ2_tmp[FATTN_KQ_STRIDE/(2*WARP_SIZE)];
+#pragma unroll
+                for (int k0 = 0; k0 < FATTN_KQ_STRIDE/2; k0 += WARP_SIZE) {
+                    const int k = k0 + threadIdx.x;
+
+                    KQ2_tmp[k0/WARP_SIZE] = KQ2[j*(kqs_padded/2) + k];
+                }
+
+                half2 KQ_max_new = KQ_max_h2[j0/nwarps];
+#pragma unroll
+                for (int k0 = 0; k0 < FATTN_KQ_STRIDE/2; k0 += WARP_SIZE) {
+                    const int k = k0 + threadIdx.x;
+
+                    KQ2_tmp[k0/WARP_SIZE] += mask ? slope2*mask2[(j*ne11 + k_VKQ_0)/2 + k] : make_half2(0.0f, 0.0f);
+                    KQ_max_new = ggml_cuda_hmax2(KQ_max_new, KQ2_tmp[k0/WARP_SIZE]);
+                }
+                KQ_max_new = __half2half2(warp_reduce_max(ggml_cuda_hmax(__low2half(KQ_max_new), __high2half(KQ_max_new))));
+                const half2 diff = KQ_max_h2[j0/nwarps] - KQ_max_new;
+                KQ_max_scale_h2[j0/nwarps] = h2exp(diff);
+                const uint32_t ftz_mask = __hgt2_mask(diff, make_half2(SOFTMAX_FTZ_THRESHOLD, SOFTMAX_FTZ_THRESHOLD));
+                *((uint32_t *) &KQ_max_scale_h2[j0/nwarps]) &= ftz_mask;
+                KQ_max_h2[j0/nwarps] = KQ_max_new;
+
+                half2 KQ_rowsum_add = make_half2(0.0f, 0.0f);
+#pragma unroll
+                for (int k0 = 0; k0 < FATTN_KQ_STRIDE/2; k0 += WARP_SIZE) {
+                    const int k = k0 + threadIdx.x;
+
+                    const half2 diff = KQ2_tmp[k0/WARP_SIZE] - KQ_max_h2[j0/nwarps];
+                    KQ2_tmp[k0/WARP_SIZE] = h2exp(diff);
+                    const uint32_t ftz_mask = __hgt2_mask(diff, make_half2(SOFTMAX_FTZ_THRESHOLD, SOFTMAX_FTZ_THRESHOLD));
+                    *((uint32_t *) &KQ2_tmp[k0/WARP_SIZE]) &= ftz_mask;
+                    KQ_rowsum_add += KQ2_tmp[k0/WARP_SIZE];
+                    KQ2[j*(kqs_padded/2) + k] = KQ2_tmp[k0/WARP_SIZE];
+                }
+                KQ_rowsum_add = warp_reduce_sum(KQ_rowsum_add);
+
+                // Scale previous KQ_rowsum to account for a potential increase in KQ_max:
+                KQ_rowsum_h2[j0/nwarps] = KQ_max_scale_h2[j0/nwarps]*KQ_rowsum_h2[j0/nwarps] + KQ_rowsum_add;
+            }
+        }
+
+        __syncthreads();
+
+        frag_b KQ_b[FATTN_KQ_STRIDE/(VKQ_ratio*16)][ncols/frag_n];
+#pragma unroll
+        for (int j0 = 0; j0 < ncols; j0 += frag_n) {
+#pragma unroll
+            for (int k0 = 0; k0 < FATTN_KQ_STRIDE; k0 += VKQ_ratio*16) {
+                const int k = k0 + (threadIdx.y % VKQ_ratio)*16;
+                nvcuda::wmma::load_matrix_sync(
+                    KQ_b[k0/(VKQ_ratio*16)][j0/frag_n],
+                    KQ + j0*(kqar*kqs_padded) + k,
+                    kqar*kqs_padded);
+            }
+        }
+
+        frag_c_VKQ VKQ_c[D/VKQ_stride][ncols/frag_n];
+#pragma unroll
+        for (int i_VKQ_0 = 0; i_VKQ_0 < D; i_VKQ_0 += VKQ_stride) {
+#pragma unroll
+            for (int j = 0; j < ncols/frag_n; ++j) {
+                nvcuda::wmma::fill_fragment(VKQ_c[i_VKQ_0/VKQ_stride][j], 0.0f);
+            }
+
+#pragma unroll
+            for (int k0 = 0; k0 < FATTN_KQ_STRIDE; k0 += VKQ_ratio*16) {
+                const int k = k0 + (threadIdx.y % VKQ_ratio)*16;
+
+                frag_a_V v_a;
+                nvcuda::wmma::load_matrix_sync(v_a, V_h + (k_VKQ_0 + k)*stride_KV + i_VKQ_0 + frag_m*(threadIdx.y/VKQ_ratio), stride_KV);
+#pragma unroll
+                for (int j = 0; j < ncols/frag_n; ++j) {
+                    nvcuda::wmma::mma_sync(VKQ_c[i_VKQ_0/VKQ_stride][j], v_a, KQ_b[k0/(VKQ_ratio*16)][j], VKQ_c[i_VKQ_0/VKQ_stride][j]);
+                }
+            }
+        }
+
+        __syncthreads();
+
+        const int offset_k = (threadIdx.y % VKQ_ratio) * (ncols*D_padded);
+#pragma unroll
+        for (int i_KQ_0 = 0; i_KQ_0 < D; i_KQ_0 += VKQ_stride) {
+#pragma unroll
+            for (int j0 = 0; j0 < ncols; j0 += frag_n) {
+                nvcuda::wmma::store_matrix_sync(
+                    KQ + offset_k + j0*D_padded + i_KQ_0 + frag_m*(threadIdx.y/VKQ_ratio),
+                    VKQ_c[i_KQ_0/VKQ_stride][j0/frag_n],
+                    D_padded, nvcuda::wmma::mem_col_major);
+            }
+        }
+
+        __syncthreads();
+
+#pragma unroll
+        for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+            const int j = j0 + threadIdx.y;
+
+            half2 VKQ_scale;
+            if (std::is_same<KQ_acc_t, float>::value) {
+                VKQ_scale = make_half2(KQ_max_scale_f[j0/nwarps], KQ_max_scale_f[j0/nwarps]);
+            } else {
+                VKQ_scale = KQ_max_scale_h2[j0/nwarps];
+            }
+
+#pragma unroll
+            for (int i0 = 0; i0 < D/2; i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+                if (i0 + WARP_SIZE > D/2 && i >= D/2) {
+                    break;
+                }
+
+                half2 VKQ_add = make_half2(0.0f, 0.0f);
+#pragma unroll
+                for (int l = 0; l < VKQ_ratio; ++l) {
+                    VKQ_add += KQ2[l*(ncols*D_padded/2) + j*(D_padded/2) + i];
+                }
+                VKQ2[j*(D_padded/2) + i] = VKQ_scale*VKQ2[j*(D_padded/2) + i] + VKQ_add;
+            }
+        }
+
+        __syncthreads();
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < ncols; j0 += nwarps) {
+        const int j_VKQ = j0 + threadIdx.y;
+        if (ic0 + j_VKQ >= ne01) {
+            return;
+        }
+        const int j_dst = (ic0 + j_VKQ)*parallel_blocks + ip;
+
+        float KQ_rowsum_j;
+        if (std::is_same<KQ_acc_t, float>::value) {
+            KQ_rowsum_j = KQ_rowsum_f[j0/nwarps];
+        } else {
+            KQ_rowsum_j = __low2float(KQ_rowsum_h2[j0/nwarps]) + __high2float(KQ_rowsum_h2[j0/nwarps]);
+        }
+
+#pragma unroll
+        for (int i0 = 0; i0 < D; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+            if (i0 + WARP_SIZE > D && i >= D) {
+                break;
+            }
+            float dst_val = VKQ[j_VKQ*D_padded + i];
+            if (parallel_blocks == 1) {
+                dst_val /= KQ_rowsum_j;
+            }
+            dst[j_dst*gridDim.y*D + blockIdx.y*D + i] = dst_val;
+        }
+
+        if (parallel_blocks == 1 || threadIdx.x != 0) {
+            continue;
+        }
+
+        float2 dst_meta_val;
+        if (std::is_same<KQ_acc_t, float>::value) {
+            dst_meta_val.x = KQ_max_f[j0/nwarps];
+        } else {
+            dst_meta_val.x = __low2float(KQ_max_h2[j0/nwarps]);
+        }
+        dst_meta_val.y = KQ_rowsum_j;
+        dst_meta[(ic0 + j_VKQ)*gridDim.y*parallel_blocks + blockIdx.y*parallel_blocks + ip] = dst_meta_val;
+    }
+#else
+   NO_DEVICE_CODE;
+#endif // FP16_MMA_AVAILABLE
+}
+
+constexpr int get_max_power_of_2(int x) {
+    return x % 2 == 0 ? 2*get_max_power_of_2(x/2) : 1;
+}
+
+static_assert(get_max_power_of_2(1) == 1, "Test failed.");
+static_assert(get_max_power_of_2(2) == 2, "Test failed.");
+static_assert(get_max_power_of_2(4) == 4, "Test failed.");
+static_assert(get_max_power_of_2(6) == 2, "Test failed.");
+
+// Number of VKQ rows calculated in parallel:
+constexpr int get_VKQ_stride(int D, int nwarps, int frag_m) {
+    return (get_max_power_of_2(D/frag_m) < nwarps ? get_max_power_of_2(D/frag_m) : nwarps)*frag_m;
+}
+
+static_assert(get_VKQ_stride(128, 1, 32) ==  32, "Test failed.");
+static_assert(get_VKQ_stride(128, 2, 32) ==  64, "Test failed.");
+static_assert(get_VKQ_stride(128, 4, 32) == 128, "Test failed.");
+static_assert(get_VKQ_stride( 64, 1, 32) ==  32, "Test failed.");
+static_assert(get_VKQ_stride( 64, 2, 32) ==  64, "Test failed.");
+static_assert(get_VKQ_stride( 64, 4, 32) ==  64, "Test failed.");
+static_assert(get_VKQ_stride( 80, 1, 16) ==  16, "Test failed.");
+static_assert(get_VKQ_stride( 80, 2, 16) ==  16, "Test failed.");
+static_assert(get_VKQ_stride( 80, 4, 16) ==  16, "Test failed.");
+
+template <int D, int cols_per_block, typename KQ_acc_t>
+void ggml_cuda_flash_attn_ext_wmma_f16_case(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * Q = dst->src[0];
+
+    constexpr int nwarps = 4;
+
+    constexpr int frag_m = cols_per_block == 8 && D % 32 == 0 ? 32 : 16;
+    const int blocks_num_pb1 = ((Q->ne[1] + cols_per_block - 1) / cols_per_block)*Q->ne[2]*Q->ne[3];
+    const int nsm = ggml_cuda_info().devices[ggml_cuda_get_device()].nsm;
+
+    if (4*blocks_num_pb1 < 2*nsm) {
+        constexpr int parallel_blocks = 4;
+        fattn_kernel_t fattn_kernel = flash_attn_ext_f16<D, cols_per_block, nwarps, get_VKQ_stride(D, nwarps, frag_m), parallel_blocks, KQ_acc_t>;
+        launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
+        return;
+    }
+    if (2*blocks_num_pb1 < 2*nsm) {
+        constexpr int parallel_blocks = 2;
+        fattn_kernel_t fattn_kernel = flash_attn_ext_f16<D, cols_per_block, nwarps, get_VKQ_stride(D, nwarps, frag_m), parallel_blocks, KQ_acc_t>;
+        launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
+        return;
+    }
+    constexpr int parallel_blocks = 1;
+    fattn_kernel_t fattn_kernel = flash_attn_ext_f16<D, cols_per_block, nwarps, get_VKQ_stride(D, nwarps, frag_m), parallel_blocks, KQ_acc_t>;
+    launch_fattn<D, parallel_blocks>(ctx, dst, fattn_kernel, nwarps, cols_per_block, true, true);
+}
+
+#define DECL_FATTN_WMMA_F16_CASE(D, cols_per_block, KQ_acc_t)                         \
+    template void ggml_cuda_flash_attn_ext_wmma_f16_case                              \
+    <D, cols_per_block, KQ_acc_t>(ggml_backend_cuda_context & ctx, ggml_tensor * dst) \
+
+extern DECL_FATTN_WMMA_F16_CASE( 64, 16, float);
+extern DECL_FATTN_WMMA_F16_CASE( 80, 16, float);
+extern DECL_FATTN_WMMA_F16_CASE( 96, 16, float);
+extern DECL_FATTN_WMMA_F16_CASE(112, 16, float);
+extern DECL_FATTN_WMMA_F16_CASE(128, 16, float);
+extern DECL_FATTN_WMMA_F16_CASE(256, 16, float);
+
+extern DECL_FATTN_WMMA_F16_CASE( 64, 32, float);
+extern DECL_FATTN_WMMA_F16_CASE( 80, 32, float);
+extern DECL_FATTN_WMMA_F16_CASE( 96, 32, float);
+extern DECL_FATTN_WMMA_F16_CASE(112, 32, float);
+extern DECL_FATTN_WMMA_F16_CASE(128, 32, float);
+// extern DECL_FATTN_WMMA_F16_CASE(256, 16, float);
+
+extern DECL_FATTN_WMMA_F16_CASE( 64,  8, half);
+extern DECL_FATTN_WMMA_F16_CASE( 96,  8, half);
+extern DECL_FATTN_WMMA_F16_CASE(128,  8, half);
+extern DECL_FATTN_WMMA_F16_CASE(256,  8, half);
+
+extern DECL_FATTN_WMMA_F16_CASE( 64, 16, half);
+extern DECL_FATTN_WMMA_F16_CASE( 80, 16, half);
+extern DECL_FATTN_WMMA_F16_CASE( 96, 16, half);
+extern DECL_FATTN_WMMA_F16_CASE(112, 16, half);
+extern DECL_FATTN_WMMA_F16_CASE(128, 16, half);
+extern DECL_FATTN_WMMA_F16_CASE(256, 16, half);
+
+extern DECL_FATTN_WMMA_F16_CASE( 64, 32, half);
+extern DECL_FATTN_WMMA_F16_CASE( 80, 32, half);
+extern DECL_FATTN_WMMA_F16_CASE( 96, 32, half);
+extern DECL_FATTN_WMMA_F16_CASE(112, 32, half);
+extern DECL_FATTN_WMMA_F16_CASE(128, 32, half);
+extern DECL_FATTN_WMMA_F16_CASE(256, 16, half);
diff --git a/ggml/src/ggml-cuda/fattn.cu b/ggml/src/ggml-cuda/fattn.cu
new file mode 100644 (file)
index 0000000..38d30b2
--- /dev/null
@@ -0,0 +1,345 @@
+#include "common.cuh"
+#include "fattn-common.cuh"
+#include "fattn-tile-f16.cuh"
+#include "fattn-tile-f32.cuh"
+#include "fattn-vec-f16.cuh"
+#include "fattn-vec-f32.cuh"
+#include "fattn-wmma-f16.cuh"
+#include "fattn.cuh"
+
+#include <cstdint>
+
+static void ggml_cuda_flash_attn_ext_wmma_f16(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * KQV = dst;
+    const ggml_tensor * Q   = dst->src[0];
+
+    const int32_t precision = KQV->op_params[2];
+
+    if (precision != GGML_PREC_DEFAULT) {
+        if (Q->ne[1] <= 32 || Q->ne[0] > 128) {
+            constexpr int cols_per_block = 16;
+            switch (Q->ne[0]) {
+                case 64:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case< 64, cols_per_block, float>(ctx, dst);
+                    break;
+                case 80:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case< 80, cols_per_block, float>(ctx, dst);
+                    break;
+                case 96:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case< 96, cols_per_block, float>(ctx, dst);
+                    break;
+                case 112:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case<112, cols_per_block, float>(ctx, dst);
+                    break;
+                case 128:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, float>(ctx, dst);
+                    break;
+                case 256:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case<256, cols_per_block, float>(ctx, dst);
+                    break;
+                default:
+                    GGML_ASSERT(false);
+                    break;
+            }
+        } else {
+            constexpr int cols_per_block = 32;
+            switch (Q->ne[0]) {
+                case 64:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case< 64, cols_per_block, float>(ctx, dst);
+                    break;
+                case 80:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case< 80, cols_per_block, float>(ctx, dst);
+                    break;
+                case 96:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case< 96, cols_per_block, float>(ctx, dst);
+                    break;
+                case 112:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case<112, cols_per_block, float>(ctx, dst);
+                    break;
+                case 128:
+                    ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, float>(ctx, dst);
+                    break;
+                // case 256:
+                //     ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, float>(ctx, dst);
+                //     break;
+                default:
+                    GGML_ASSERT(false);
+                    break;
+            }
+        }
+        return;
+    }
+
+    if (Q->ne[1] <= 8 && Q->ne[0] % WARP_SIZE == 0) {
+        constexpr int cols_per_block = 8;
+        switch (Q->ne[0]) {
+            case 64:
+                ggml_cuda_flash_attn_ext_wmma_f16_case< 64, cols_per_block, half>(ctx, dst);
+                break;
+            case 96:
+                ggml_cuda_flash_attn_ext_wmma_f16_case< 96, cols_per_block, half>(ctx, dst);
+                break;
+            case 128:
+                ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, half>(ctx, dst);
+                break;
+            case 256:
+                ggml_cuda_flash_attn_ext_wmma_f16_case<256, cols_per_block, half>(ctx, dst);
+                break;
+            default:
+                GGML_ASSERT(false);
+                break;
+        }
+        return;
+    }
+
+    if (Q->ne[1] <= 32) {
+        constexpr int cols_per_block = 16;
+        switch (Q->ne[0]) {
+            case 64:
+                ggml_cuda_flash_attn_ext_wmma_f16_case< 64, cols_per_block, half>(ctx, dst);
+                break;
+            case 80:
+                ggml_cuda_flash_attn_ext_wmma_f16_case< 80, cols_per_block, half>(ctx, dst);
+                break;
+            case 96:
+                ggml_cuda_flash_attn_ext_wmma_f16_case< 96, cols_per_block, half>(ctx, dst);
+                break;
+            case 112:
+                ggml_cuda_flash_attn_ext_wmma_f16_case<112, cols_per_block, half>(ctx, dst);
+                break;
+            case 128:
+                ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, half>(ctx, dst);
+                break;
+            case 256:
+                ggml_cuda_flash_attn_ext_wmma_f16_case<256, cols_per_block, half>(ctx, dst);
+                break;
+            default:
+                GGML_ASSERT(false);
+                break;
+        }
+        return;
+    }
+
+    constexpr int cols_per_block = 32;
+    switch (Q->ne[0]) {
+        case 64:
+            ggml_cuda_flash_attn_ext_wmma_f16_case< 64, cols_per_block, half>(ctx, dst);
+            break;
+        case 80:
+            ggml_cuda_flash_attn_ext_wmma_f16_case< 80, cols_per_block, half>(ctx, dst);
+            break;
+        case 96:
+            ggml_cuda_flash_attn_ext_wmma_f16_case< 96, cols_per_block, half>(ctx, dst);
+            break;
+        case 112:
+            ggml_cuda_flash_attn_ext_wmma_f16_case<112, cols_per_block, half>(ctx, dst);
+            break;
+        case 128:
+            ggml_cuda_flash_attn_ext_wmma_f16_case<128, cols_per_block, half>(ctx, dst);
+            break;
+        case 256:
+            ggml_cuda_flash_attn_ext_wmma_f16_case<256, cols_per_block, half>(ctx, dst);
+            break;
+        default:
+            GGML_ASSERT(false);
+            break;
+    }
+}
+#define FATTN_VEC_F16_CASE(D, type_K, type_V)                               \
+    if (Q->ne[0] == (D) && K->type == (type_K) && V->type == (type_V)) {    \
+        ggml_cuda_flash_attn_ext_vec_f16_case<D, type_K, type_V>(ctx, dst); \
+        return;                                                             \
+    }                                                                       \
+
+static void ggml_cuda_flash_attn_ext_vec_f16(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    ggml_tensor * Q = dst->src[1];
+    ggml_tensor * K = dst->src[1];
+    ggml_tensor * V = dst->src[2];
+
+#ifdef GGML_CUDA_FA_ALL_QUANTS
+    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_0)
+    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_1)
+    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_0)
+    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_1)
+    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q8_0)
+    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16 )
+
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_0)
+
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_1)
+
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_0)
+
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_1)
+
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q8_0)
+
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16,  GGML_TYPE_F16)
+
+    FATTN_VEC_F16_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16)
+#else
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0)
+
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0)
+
+    FATTN_VEC_F16_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16)
+    FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_F16)
+    FATTN_VEC_F16_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16)
+#endif // GGML_CUDA_FA_ALL_QUANTS
+
+    on_no_fattn_vec_case(Q->ne[0]);
+}
+
+#define FATTN_VEC_F32_CASE(D, type_K, type_V)                               \
+    if (Q->ne[0] == (D) && K->type == (type_K) && V->type == (type_V)) {    \
+        ggml_cuda_flash_attn_ext_vec_f32_case<D, type_K, type_V>(ctx, dst); \
+        return;                                                             \
+    }                                                                       \
+
+static void ggml_cuda_flash_attn_ext_vec_f32(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    ggml_tensor * Q = dst->src[1];
+    ggml_tensor * K = dst->src[1];
+    ggml_tensor * V = dst->src[2];
+
+#ifdef GGML_CUDA_FA_ALL_QUANTS
+    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_0)
+    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q4_1)
+    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_0)
+    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q5_1)
+    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_Q8_0)
+    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16)
+
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_0)
+
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q4_1)
+
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_0)
+
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q5_1)
+
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_Q8_0)
+
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16,  GGML_TYPE_F16)
+
+    FATTN_VEC_F32_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16)
+#else
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0)
+
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0)
+
+    FATTN_VEC_F32_CASE( 64, GGML_TYPE_F16, GGML_TYPE_F16)
+    FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_F16)
+    FATTN_VEC_F32_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16)
+#endif // GGML_CUDA_FA_ALL_QUANTS
+
+    on_no_fattn_vec_case(Q->ne[0]);
+}
+
+void ggml_cuda_flash_attn_ext(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * KQV = dst;
+    const ggml_tensor * Q   = dst->src[0];
+
+    ggml_cuda_set_device(ctx.device);
+    const int cc = ggml_cuda_info().devices[ggml_cuda_get_device()].cc;
+    const int32_t precision = KQV->op_params[2];
+
+    // On AMD the tile kernels perform poorly, use the vec kernel instead:
+    if (cc >= CC_OFFSET_AMD) {
+        if (precision == GGML_PREC_DEFAULT && fast_fp16_available(cc)) {
+            ggml_cuda_flash_attn_ext_vec_f16(ctx, dst);
+        } else {
+            ggml_cuda_flash_attn_ext_vec_f32(ctx, dst);
+        }
+        return;
+    }
+
+    if (!fast_fp16_available(cc)) {
+        if (Q->ne[1] <= 8) {
+            ggml_cuda_flash_attn_ext_vec_f32(ctx, dst);
+        } else {
+            ggml_cuda_flash_attn_ext_tile_f32(ctx, dst);
+        }
+        return;
+    }
+
+    if (!fp16_mma_available(cc)) {
+        if (Q->ne[1] <= 8) {
+            ggml_cuda_flash_attn_ext_vec_f16(ctx, dst);
+        } else {
+            ggml_cuda_flash_attn_ext_tile_f16(ctx, dst);
+        }
+        return;
+    }
+
+    if (Q->ne[1] == 1 && Q->ne[0] % (2*WARP_SIZE) == 0) {
+        if (precision == GGML_PREC_DEFAULT) {
+            ggml_cuda_flash_attn_ext_vec_f16(ctx, dst);
+            return;
+        } else if(Q->ne[0] <= 128) {
+            ggml_cuda_flash_attn_ext_vec_f32(ctx, dst);
+            return;
+        }
+    }
+
+    ggml_cuda_flash_attn_ext_wmma_f16(ctx, dst);
+}
diff --git a/ggml/src/ggml-cuda/fattn.cuh b/ggml/src/ggml-cuda/fattn.cuh
new file mode 100644 (file)
index 0000000..ad3ca7a
--- /dev/null
@@ -0,0 +1,3 @@
+#include "common.cuh"
+
+void ggml_cuda_flash_attn_ext(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/getrows.cu b/ggml/src/ggml-cuda/getrows.cu
new file mode 100644 (file)
index 0000000..55af195
--- /dev/null
@@ -0,0 +1,178 @@
+#include "getrows.cuh"
+#include "dequantize.cuh"
+
+template<int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
+static __global__ void k_get_rows(
+            const void * src0, const int32_t * src1, dst_t * dst,
+            int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/
+            /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/
+            /*size_t s0,*/ size_t s1, size_t s2, size_t s3,
+            /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03,
+            size_t s10, size_t s11, size_t s12/*, size_t s13*/) {
+
+    const int i00 = (blockIdx.x*blockDim.x + threadIdx.x)*2;
+    const int i10 = blockDim.y*blockIdx.y + threadIdx.y;
+    const int i11 = (blockIdx.z*blockDim.z + threadIdx.z)/ne12;
+    const int i12 = (blockIdx.z*blockDim.z + threadIdx.z)%ne12;
+
+    if (i00 >= ne00) {
+        return;
+    }
+
+    const int i01 = src1[i10*s10 + i11*s11 + i12*s12];
+
+    dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3;
+    const void * src0_row = (const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03;
+
+    const int ib = i00/qk; // block index
+    const int iqs = (i00%qk)/qr; // quant index
+    const int iybs = i00 - i00%qk; // dst block start index
+    const int y_offset = qr == 1 ? 1 : qk/2;
+
+    // dequantize
+    dfloat2 v;
+    dequantize_kernel(src0_row, ib, iqs, v);
+
+    dst_row[iybs + iqs + 0]        = v.x;
+    dst_row[iybs + iqs + y_offset] = v.y;
+}
+
+template<typename src0_t, typename dst_t>
+static __global__ void k_get_rows_float(
+            const src0_t * src0, const int32_t * src1, dst_t * dst,
+            int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/
+            /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/
+            /*size_t s0,*/ size_t s1, size_t s2, size_t s3,
+            /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03,
+            size_t s10, size_t s11, size_t s12/*, size_t s13*/) {
+
+    const int i00 = blockIdx.x*blockDim.x + threadIdx.x;
+    const int i10 = blockDim.y*blockIdx.y + threadIdx.y;
+    const int i11 = (blockIdx.z*blockDim.z + threadIdx.z)/ne12;
+    const int i12 = (blockIdx.z*blockDim.z + threadIdx.z)%ne12;
+
+    if (i00 >= ne00) {
+        return;
+    }
+
+    const int i01 = src1[i10*s10 + i11*s11 + i12*s12];
+
+    dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3;
+    const src0_t * src0_row = (const src0_t *)((const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03);
+
+    dst_row[i00] = src0_row[i00];
+}
+
+template<int qk, int qr, dequantize_kernel_t dq>
+static void get_rows_cuda(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst,
+                            const void * src0_dd, const int32_t * src1_dd, float * dst_dd, cudaStream_t stream) {
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const dim3 block_dims(CUDA_GET_ROWS_BLOCK_SIZE, 1, 1);
+    const int block_num_x = (ne00 + 2*CUDA_GET_ROWS_BLOCK_SIZE - 1) / (2*CUDA_GET_ROWS_BLOCK_SIZE);
+    const dim3 block_nums(block_num_x, ne10, ne11*ne12);
+
+    // strides in elements
+    //const size_t s0 = nb0 / ggml_element_size(dst);
+    const size_t s1 = nb1 / ggml_element_size(dst);
+    const size_t s2 = nb2 / ggml_element_size(dst);
+    const size_t s3 = nb3 / ggml_element_size(dst);
+
+    const size_t s10 = nb10 / ggml_element_size(src1);
+    const size_t s11 = nb11 / ggml_element_size(src1);
+    const size_t s12 = nb12 / ggml_element_size(src1);
+    //const size_t s13 = nb13 / ggml_element_size(src1);
+
+    GGML_ASSERT(ne00 % 2 == 0);
+
+    k_get_rows<qk, qr, dq><<<block_nums, block_dims, 0, stream>>>(
+            src0_dd, src1_dd, dst_dd,
+            ne00, /*ne01, ne02, ne03,*/
+            /*ne10, ne11,*/ ne12, /*ne13,*/
+            /* s0,*/ s1, s2, s3,
+            /* nb00,*/ nb01, nb02, nb03,
+            s10, s11, s12/*, s13*/);
+
+    GGML_UNUSED(dst);
+}
+
+template<typename src0_t>
+static void get_rows_cuda_float(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst,
+                                const src0_t * src0_dd, const int32_t * src1_dd, float * dst_dd, cudaStream_t stream) {
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const dim3 block_dims(CUDA_GET_ROWS_BLOCK_SIZE, 1, 1);
+    const int block_num_x = (ne00 + CUDA_GET_ROWS_BLOCK_SIZE - 1) / CUDA_GET_ROWS_BLOCK_SIZE;
+    const dim3 block_nums(block_num_x, ne10, ne11*ne12);
+
+    // strides in elements
+    //const size_t s0 = nb0 / ggml_element_size(dst);
+    const size_t s1 = nb1 / ggml_element_size(dst);
+    const size_t s2 = nb2 / ggml_element_size(dst);
+    const size_t s3 = nb3 / ggml_element_size(dst);
+
+    const size_t s10 = nb10 / ggml_element_size(src1);
+    const size_t s11 = nb11 / ggml_element_size(src1);
+    const size_t s12 = nb12 / ggml_element_size(src1);
+    //const size_t s13 = nb13 / ggml_element_size(src1);
+
+    k_get_rows_float<<<block_nums, block_dims, 0, stream>>>(
+            src0_dd, src1_dd, dst_dd,
+            ne00, /*ne01, ne02, ne03,*/
+            /*ne10, ne11,*/ ne12, /*ne13,*/
+            /* s0,*/ s1, s2, s3,
+            /* nb00,*/ nb01, nb02, nb03,
+            s10, s11, s12/*, s13*/);
+
+    GGML_UNUSED(dst);
+}
+
+void ggml_cuda_op_get_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const ggml_tensor * src1 = dst->src[1];
+    const float * src0_d = (const float *)src0->data;
+    const float * src1_d = (const float *)src1->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+
+    GGML_ASSERT(src1->type == GGML_TYPE_I32);
+    GGML_ASSERT(dst->type == GGML_TYPE_F32);
+
+    GGML_ASSERT(src0->nb[0] == ggml_type_size(src0->type));
+    GGML_ASSERT(src1->nb[0] == ggml_type_size(src1->type));
+    GGML_ASSERT(dst->nb[0] == ggml_type_size(dst->type));
+
+    const int32_t * src1_i32 = (const int32_t *) src1_d;
+
+    switch (src0->type) {
+        case GGML_TYPE_F16:
+            get_rows_cuda_float(src0, src1, dst, (const half *)src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_F32:
+            get_rows_cuda_float(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_Q4_0:
+            get_rows_cuda<QK4_0, QR4_0, dequantize_q4_0>(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_Q4_1:
+            get_rows_cuda<QK4_1, QR4_1, dequantize_q4_1>(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_Q5_0:
+            get_rows_cuda<QK5_0, QR5_0, dequantize_q5_0>(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_Q5_1:
+            get_rows_cuda<QK5_1, QR5_1, dequantize_q5_1>(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_Q8_0:
+            get_rows_cuda<QK8_0, QR8_0, dequantize_q8_0>(src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        default:
+            // TODO: k-quants
+            fprintf(stderr, "%s: unsupported type: %s\n", __func__, ggml_type_name(src0->type));
+            GGML_ASSERT(false);
+            break;
+    }
+}
diff --git a/ggml/src/ggml-cuda/getrows.cuh b/ggml/src/ggml-cuda/getrows.cuh
new file mode 100644 (file)
index 0000000..bbf1302
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_GET_ROWS_BLOCK_SIZE 256
+
+void ggml_cuda_op_get_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/im2col.cu b/ggml/src/ggml-cuda/im2col.cu
new file mode 100644 (file)
index 0000000..3d0d8d4
--- /dev/null
@@ -0,0 +1,104 @@
+#include "im2col.cuh"
+
+template <typename T>
+static  __global__ void im2col_kernel(
+        const float * x, T * dst, int64_t batch_offset,
+        int64_t offset_delta, int64_t IC, int64_t IW, int64_t IH, int64_t OH, int64_t OW, int64_t KW, int64_t KH, int64_t pelements, int64_t CHW,
+        int s0, int s1, int p0, int p1, int d0, int d1) {
+    const int64_t i = threadIdx.x + blockIdx.x * blockDim.x;
+    if (i >= pelements) {
+        return;
+    }
+
+    const int64_t  ksize = OW * (KH > 1 ? KW : 1);
+    const int64_t  kx = i / ksize;
+    const int64_t  kd = kx * ksize;
+    const int64_t  ky = (i - kd) / OW;
+    const int64_t  ix = i % OW;
+
+    const int64_t  oh = blockIdx.y;
+    const int64_t  batch = blockIdx.z / IC;
+    const int64_t  ic = blockIdx.z % IC;
+
+    const int64_t iiw = ix * s0 + kx * d0 - p0;
+    const int64_t iih = oh * s1 + ky * d1 - p1;
+
+    const int64_t offset_dst =
+        ((batch * OH + oh) * OW + ix) * CHW +
+        (ic * (KW * KH) + ky * KW + kx);
+
+    if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
+        dst[offset_dst] = 0.0f;
+    } else {
+        const int64_t offset_src = ic * offset_delta + batch * batch_offset;
+        dst[offset_dst] = x[offset_src + iih * IW + iiw];
+    }
+}
+
+template <typename T>
+static void im2col_cuda(const float * x, T* dst,
+    int64_t IW, int64_t IH, int64_t OW, int64_t OH, int64_t KW, int64_t KH, int64_t IC,
+    int64_t batch, int64_t batch_offset, int64_t offset_delta,
+    int s0,int s1,int p0,int p1,int d0,int d1, cudaStream_t stream) {
+    const int parallel_elements = OW * KW * KH;
+    const int num_blocks = (parallel_elements + CUDA_IM2COL_BLOCK_SIZE - 1) / CUDA_IM2COL_BLOCK_SIZE;
+    dim3 block_nums(num_blocks, OH, batch * IC);
+    im2col_kernel<<<block_nums, CUDA_IM2COL_BLOCK_SIZE, 0, stream>>>(x, dst, batch_offset, offset_delta, IC, IW, IH, OH, OW, KW, KH, parallel_elements, (IC * KH * KW), s0, s1, p0, p1, d0, d1);
+}
+
+static void im2col_cuda_f16(const float * x, half * dst,
+    int64_t IW, int64_t IH, int64_t OW, int64_t OH, int64_t KW, int64_t KH, int64_t IC,
+    int64_t batch, int64_t batch_offset, int64_t offset_delta,
+    int s0,int s1,int p0,int p1,int d0,int d1, cudaStream_t stream) {
+
+    im2col_cuda<half>(x, dst, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, offset_delta, s0, s1, p0, p1, d0, d1, stream);
+}
+
+static void im2col_cuda_f32(const float * x, float * dst,
+    int64_t IW, int64_t IH, int64_t OW, int64_t OH, int64_t KW, int64_t KH, int64_t IC,
+    int64_t batch, int64_t batch_offset, int64_t offset_delta,
+    int s0,int s1,int p0,int p1,int d0,int d1, cudaStream_t stream) {
+
+    im2col_cuda<float>(x, dst, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, offset_delta, s0, s1, p0, p1, d0, d1, stream);
+}
+
+void ggml_cuda_op_im2col(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const ggml_tensor * src1 = dst->src[1];
+    const float * src1_d = (const float *)src1->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32);
+
+    const int32_t s0 = ((const int32_t*)(dst->op_params))[0];
+    const int32_t s1 = ((const int32_t*)(dst->op_params))[1];
+    const int32_t p0 = ((const int32_t*)(dst->op_params))[2];
+    const int32_t p1 = ((const int32_t*)(dst->op_params))[3];
+    const int32_t d0 = ((const int32_t*)(dst->op_params))[4];
+    const int32_t d1 = ((const int32_t*)(dst->op_params))[5];
+
+    const bool is_2D = ((const int32_t*)(dst->op_params))[6] == 1;
+
+    const int64_t IC = src1->ne[is_2D ? 2 : 1];
+    const int64_t IH = is_2D ? src1->ne[1] : 1;
+    const int64_t IW =         src1->ne[0];
+
+    const int64_t KH = is_2D ? src0->ne[1] : 1;
+    const int64_t KW =         src0->ne[0];
+
+    const int64_t OH = is_2D ? dst->ne[2] : 1;
+    const int64_t OW =         dst->ne[1];
+
+    const size_t delta_offset = src1->nb[is_2D ? 2 : 1] / 4; // nb is byte offset, src is type float32
+    const int64_t batch = src1->ne[3];
+    const size_t batch_offset = src1->nb[3] / 4; // nb is byte offset, src is type float32
+
+    if(dst->type == GGML_TYPE_F16) {
+        im2col_cuda_f16(src1_d, (half *) dst_d, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, delta_offset, s0, s1, p0, p1, d0, d1, stream);
+    } else {
+        im2col_cuda_f32(src1_d, (float *) dst_d, IW, IH, OW, OH, KW, KH, IC, batch, batch_offset, delta_offset, s0, s1, p0, p1, d0, d1, stream);
+    }
+}
diff --git a/ggml/src/ggml-cuda/im2col.cuh b/ggml/src/ggml-cuda/im2col.cuh
new file mode 100644 (file)
index 0000000..1ce8fae
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_IM2COL_BLOCK_SIZE 256
+
+void ggml_cuda_op_im2col(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/mma.cuh b/ggml/src/ggml-cuda/mma.cuh
new file mode 100644 (file)
index 0000000..5d87dd8
--- /dev/null
@@ -0,0 +1,217 @@
+#include "common.cuh"
+
+struct mma_int_A_I16K4 {
+    static constexpr int I  = 16;
+    static constexpr int K  = 4;
+    static constexpr int ne = 2;
+
+    int x[ne] = {0};
+
+    static __device__ __forceinline__ int get_i(const int l) {
+        const int ret = (l%2) * (I/2) + threadIdx.x / K;
+        GGML_CUDA_ASSUME(ret >= 0);
+        GGML_CUDA_ASSUME(ret <  I);
+        return ret;
+    }
+
+    static __device__ __forceinline__ int get_k(const int /* l */) {
+        const int ret = threadIdx.x % K;
+        GGML_CUDA_ASSUME(ret >= 0);
+        GGML_CUDA_ASSUME(ret <  K);
+        return ret;
+    }
+
+    __device__ __forceinline__ void load(const int * __restrict__ xs0, const int & stride) {
+#if defined(INT8_MMA_AVAILABLE)
+        const int * xs = xs0 + (threadIdx.x%I)*stride;
+        asm("ldmatrix.sync.aligned.m8n8.x2.b16 {%0, %1}, [%2];"
+            : "+r"(x[0]), "+r"(x[1])
+            : "l"(xs));
+#else
+#pragma unroll
+        for (int l = 0; l < ne; ++l) {
+            x[l] = xs0[get_i(l)*stride + get_k(l)];
+        }
+#endif // defined(INT8_MMA_AVAILABLE)
+    }
+};
+
+struct mma_int_A_I16K8 {
+    static constexpr int I  = 16;
+    static constexpr int K  = 8;
+    static constexpr int ne = 4;
+
+    int x[ne] = {0};
+
+    static __device__ __forceinline__ int get_i(const int l) {
+        const int ret = (l%2) * (I/2) + threadIdx.x / (K/2);
+        GGML_CUDA_ASSUME(ret >= 0);
+        GGML_CUDA_ASSUME(ret <  I);
+        return ret;
+    }
+
+    static __device__ __forceinline__ int get_k(const int l) {
+        const int ret = (l/2) * (K/2) + threadIdx.x % (K/2);
+        GGML_CUDA_ASSUME(ret >= 0);
+        GGML_CUDA_ASSUME(ret <  K);
+        return ret;
+    }
+
+    __device__ __forceinline__ void load(const int * __restrict__ xs0, const int & stride) {
+#if defined(INT8_MMA_AVAILABLE)
+        const int * xs = xs0 + (threadIdx.x%I)*stride + (threadIdx.x/I)*(K/2);
+        asm("ldmatrix.sync.aligned.m8n8.x4.b16 {%0, %1, %2, %3}, [%4];"
+            : "+r"(x[0]), "+r"(x[1]), "+r"(x[2]), "+r"(x[3])
+            : "l"(xs));
+#else
+#pragma unroll
+        for (int l = 0; l < ne; ++l) {
+            x[l] = xs0[get_i(l)*stride + get_k(l)];
+        }
+#endif // defined(INT8_MMA_AVAILABLE)
+    }
+};
+
+struct mma_int_B_J8K4 {
+    static constexpr int J  = 8;
+    static constexpr int K  = 4;
+    static constexpr int ne = 1;
+
+    int x[ne] = {0};
+
+    static __device__ __forceinline__ int get_j(const int /* l */) {
+        const int ret = threadIdx.x / K;
+        GGML_CUDA_ASSUME(ret >= 0);
+        GGML_CUDA_ASSUME(ret <  J);
+        return ret;
+    }
+
+    static __device__ __forceinline__ int get_k(const int /* l */) {
+        const int ret = threadIdx.x % K;
+        GGML_CUDA_ASSUME(ret >= 0);
+        GGML_CUDA_ASSUME(ret <  K);
+        return ret;
+    }
+
+    __device__ __forceinline__ void load(const int * __restrict__ xs0, const int & stride) {
+#if defined(INT8_MMA_AVAILABLE) && false // Loading as 4 byte values is faster
+        const int * xs = xs0 + (threadIdx.x%J)*stride;
+        asm("ldmatrix.sync.aligned.m8n8.x1.b16 {%0}, [%1];"
+            : "+r"(x[0])
+            : "l"(xs));
+#else
+#pragma unroll
+        for (int l = 0; l < ne; ++l) {
+            x[l] = xs0[get_j(l)*stride + get_k(l)];
+        }
+#endif // defined(INT8_MMA_AVAILABLE)
+    }
+};
+
+struct mma_int_B_J8K8 {
+    static constexpr int J  = 8;
+    static constexpr int K  = 8;
+    static constexpr int ne = 2;
+
+    int x[ne] = {0};
+
+    static __device__ __forceinline__ int get_j(const int /* l */) {
+        const int ret = threadIdx.x / (K/2);
+        GGML_CUDA_ASSUME(ret >= 0);
+        GGML_CUDA_ASSUME(ret <  J);
+        return ret;
+    }
+
+    static __device__ __forceinline__ int get_k(const int l) {
+        const int ret = l * (K/2) + threadIdx.x % (K/2);
+        GGML_CUDA_ASSUME(ret >= 0);
+        GGML_CUDA_ASSUME(ret <  K);
+        return ret;
+    }
+
+    __device__ __forceinline__ void load(const int * __restrict__ xs0, const int & stride) {
+#if defined(INT8_MMA_AVAILABLE) && false // Loading as 4 byte values is faster
+        const int * xs = xs0 + (threadIdx.x%J)*stride + ((threadIdx.x/J)*(K/2)) % K;
+        asm("ldmatrix.sync.aligned.m8n8.x2.b16 {%0, %1}, [%2];"
+            : "+r"(x[0]), "+r"(x[1])
+            : "l"(xs));
+#else
+#pragma unroll
+        for (int l = 0; l < ne; ++l) {
+            x[l] = xs0[get_j(l)*stride + get_k(l)];
+        }
+#endif // defined(INT8_MMA_AVAILABLE)
+    }
+};
+
+struct mma_int_C_I16J8 {
+    static constexpr int I  = 16;
+    static constexpr int J  = 8;
+    static constexpr int ne = 4;
+
+    int x[ne] = {0};
+
+    static __device__ __forceinline__ int get_i(const int l) {
+        const int ret = (l/2) * (I/2) + threadIdx.x / (J/2);
+        GGML_CUDA_ASSUME(ret >= 0);
+        GGML_CUDA_ASSUME(ret <  I);
+        return ret;
+    }
+
+    static __device__ __forceinline__ int get_j(const int l) {
+        const int ret = 2 * (threadIdx.x % (J/2)) + l%2;
+        GGML_CUDA_ASSUME(ret >= 0);
+        GGML_CUDA_ASSUME(ret <  J);
+        return ret;
+    }
+
+    __device__ __forceinline__ void mma_K4(const mma_int_A_I16K4 & mma_A, const mma_int_B_J8K4 & mma_B) {
+#ifdef INT8_MMA_AVAILABLE
+#if __CUDA_ARCH__ >= CC_AMPERE
+        asm("mma.sync.aligned.m16n8k16.row.col.s32.s8.s8.s32 {%0, %1, %2, %3}, {%4, %5}, {%6}, {%0, %1, %2, %3};"
+            : "+r"(x[0]), "+r"(x[1]), "+r"(x[2]), "+r"(x[3])
+            : "r"(mma_A.x[0]), "r"(mma_A.x[1]), "r"(mma_B.x[0]));
+#else
+        // On Turing m16n8k16 mma is not available, use 2x m8n8k16 mma instead:
+        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
+            : "+r"(x[0]), "+r"(x[1])
+            : "r"(mma_A.x[0]), "r"(mma_B.x[0]));
+        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
+            : "+r"(x[2]), "+r"(x[3])
+            : "r"(mma_A.x[1]), "r"(mma_B.x[0]));
+#endif // __CUDA_ARCH__ >= CC_AMPERE
+#else
+        GGML_UNUSED(mma_A);
+        GGML_UNUSED(mma_B);
+        NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+    }
+
+    __device__ __forceinline__ void mma_K8(const mma_int_A_I16K8 & mma_A, const mma_int_B_J8K8 & mma_B) {
+#ifdef INT8_MMA_AVAILABLE
+#if __CUDA_ARCH__ >= CC_AMPERE
+        asm("mma.sync.aligned.m16n8k32.row.col.s32.s8.s8.s32 {%0, %1, %2, %3}, {%4, %5, %6, %7}, {%8, %9}, {%0, %1, %2, %3};"
+            : "+r"(x[0]), "+r"(x[1]), "+r"(x[2]), "+r"(x[3])
+            : "r"(mma_A.x[0]), "r"(mma_A.x[1]), "r"(mma_A.x[2]), "r"(mma_A.x[3]), "r"(mma_B.x[0]), "r"(mma_B.x[1]));
+#else
+        // On Turing m16n8k32 mma is not available, use 4x m8n8k16 mma instead:
+        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
+            : "+r"(x[0]), "+r"(x[1])
+            : "r"(mma_A.x[0]), "r"(mma_B.x[0]));
+        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
+            : "+r"(x[2]), "+r"(x[3])
+            : "r"(mma_A.x[1]), "r"(mma_B.x[0]));
+        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
+            : "+r"(x[0]), "+r"(x[1])
+            : "r"(mma_A.x[2]), "r"(mma_B.x[1]));
+        asm("mma.sync.aligned.m8n8k16.row.col.s32.s8.s8.s32 {%0, %1}, {%2}, {%3}, {%0, %1};"
+            : "+r"(x[2]), "+r"(x[3])
+            : "r"(mma_A.x[3]), "r"(mma_B.x[1]));
+#endif // __CUDA_ARCH__ >= CC_AMPERE
+#else
+        GGML_UNUSED(mma_A);
+        GGML_UNUSED(mma_B);
+        NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+    }
+};
diff --git a/ggml/src/ggml-cuda/mmq.cu b/ggml/src/ggml-cuda/mmq.cu
new file mode 100644 (file)
index 0000000..0308bea
--- /dev/null
@@ -0,0 +1,118 @@
+#include "mmq.cuh"
+
+void ggml_cuda_op_mul_mat_q(
+    ggml_backend_cuda_context & ctx,
+    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
+    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
+    const int64_t src1_padded_row_size, cudaStream_t stream) {
+
+    const int64_t ne00 = src0->ne[0];
+
+    const int64_t nb01 = src0->nb[1];
+
+    const int64_t ne10 = src1->ne[0];
+    const int64_t ne11 = src1->ne[1];
+    GGML_ASSERT(ne10 % QK8_1 == 0);
+
+    const int64_t ne0 = dst->ne[0];
+
+    const int64_t row_diff = row_high - row_low;
+    const int64_t stride00 = nb01 / ggml_type_size(src0->type);
+
+    int id = ggml_cuda_get_device();
+    const int compute_capability = ggml_cuda_info().devices[id].cc;
+
+    // the main device has a larger memory buffer to hold the results from all GPUs
+    // nrows_dst == nrows of the matrix that the kernel writes into
+    const int64_t nrows_dst = id == ctx.device ? ne0 : row_diff;
+
+    const mmq_args args = {src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stride00, src1_padded_row_size, src1_ncols, ne11, nrows_dst};
+
+    switch (src0->type) {
+        case GGML_TYPE_Q4_0:
+            mul_mat_q_case<GGML_TYPE_Q4_0>(ctx, args, stream);
+            break;
+        case GGML_TYPE_Q4_1:
+            mul_mat_q_case<GGML_TYPE_Q4_1>(ctx, args, stream);
+            break;
+        case GGML_TYPE_Q5_0:
+            mul_mat_q_case<GGML_TYPE_Q5_0>(ctx, args, stream);
+            break;
+        case GGML_TYPE_Q5_1:
+            mul_mat_q_case<GGML_TYPE_Q5_1>(ctx, args, stream);
+            break;
+        case GGML_TYPE_Q8_0:
+            mul_mat_q_case<GGML_TYPE_Q8_0>(ctx, args, stream);
+            break;
+        case GGML_TYPE_Q2_K:
+            mul_mat_q_case<GGML_TYPE_Q2_K>(ctx, args, stream);
+            break;
+        case GGML_TYPE_Q3_K:
+            mul_mat_q_case<GGML_TYPE_Q3_K>(ctx, args, stream);
+            break;
+        case GGML_TYPE_Q4_K:
+            mul_mat_q_case<GGML_TYPE_Q4_K>(ctx, args, stream);
+            break;
+        case GGML_TYPE_Q5_K:
+            mul_mat_q_case<GGML_TYPE_Q5_K>(ctx, args, stream);
+            break;
+        case GGML_TYPE_Q6_K:
+            mul_mat_q_case<GGML_TYPE_Q6_K>(ctx, args, stream);
+            break;
+        default:
+            GGML_ASSERT(false);
+            break;
+    }
+
+    GGML_UNUSED(src1);
+    GGML_UNUSED(dst);
+    GGML_UNUSED(src1_ddf_i);
+}
+
+bool ggml_cuda_should_use_mmq(enum ggml_type type, int cc, int64_t ne11) {
+#ifdef GGML_CUDA_FORCE_CUBLAS
+    return false;
+#endif // GGML_CUDA_FORCE_CUBLAS
+
+    bool mmq_supported;
+
+    switch (type) {
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+            mmq_supported = true;
+            break;
+        default:
+            mmq_supported = false;
+            break;
+    }
+
+    if (!mmq_supported) {
+        return false;
+    }
+
+    if (int8_mma_available(cc)) {
+        return true;
+    }
+
+    if (cc < MIN_CC_DP4A) {
+        return false;
+    }
+
+#ifdef GGML_CUDA_FORCE_MMQ
+    return true;
+#endif //GGML_CUDA_FORCE_MMQ
+
+    if (cc < CC_OFFSET_AMD) {
+        return cc < CC_VOLTA || ne11 < MMQ_DP4A_MAX_BATCH_SIZE;
+    }
+
+    return cc < CC_RDNA3 || ne11 < MMQ_DP4A_MAX_BATCH_SIZE;
+}
diff --git a/ggml/src/ggml-cuda/mmq.cuh b/ggml/src/ggml-cuda/mmq.cuh
new file mode 100644 (file)
index 0000000..31fcbf1
--- /dev/null
@@ -0,0 +1,2610 @@
+#pragma once
+
+#include "common.cuh"
+#include "vecdotq.cuh"
+#include "mma.cuh"
+
+#include <climits>
+#include <cstdint>
+
+#define MMQ_DP4A_MAX_BATCH_SIZE 64 // Max. batch size to use for dp4a MMQ kernels when FP16 tensor cores are available.
+
+typedef void (*load_tiles_mmq_t)(const char * __restrict__ x, int * x_tile, const int & kbx0, const int & i_max, const int & stride);
+typedef void (*vec_dot_mmq_t)(const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0);
+typedef void (*mmq_write_back_t)(const float * __restrict__ sum, float * __restrict__ dst, const int & stride, const int & i_max, const int & j_max);
+
+struct block_q8_1_mmq {
+    half2  ds[4];
+    int8_t qs[4*QK8_1];
+};
+static_assert(sizeof(block_q8_1_mmq) == 4*QK8_1 + 4*sizeof(half2), "Unexpected block_q8_1_mmq size");
+static_assert(sizeof(block_q8_1_mmq) == 4*sizeof(block_q8_1),      "Unexpected block_q8_1_mmq size");
+
+struct tile_x_sizes {
+    int qs;
+    int dm;
+    int sc;
+};
+
+static constexpr int get_mmq_x_max_host(const int cc) {
+    return int8_mma_available(cc) ? 128 :
+#ifdef GGML_CUDA_FORCE_MMQ
+        cc >= CC_VOLTA && cc < CC_OFFSET_AMD ? 128                     : 64;
+#else
+        cc >= CC_VOLTA && cc < CC_OFFSET_AMD ? MMQ_DP4A_MAX_BATCH_SIZE : 64;
+#endif // GGML_CUDA_FORCE_MMQ
+}
+
+static constexpr __device__ int get_mmq_x_max_device() {
+#ifdef INT8_MMA_AVAILABLE
+    return 128;
+#else // INT8_MMA_AVAILABLE
+
+#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+    return 128;
+#else // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+
+#if __CUDA_ARCH__ >= CC_VOLTA
+#ifdef GGML_CUDA_FORCE_MMQ
+    return MMQ_DP4A_MAX_BATCH_SIZE;
+#else // GGML_CUDA_FORCE_MMQ
+    return 128;
+#endif // GGML_CUDA_FORCE_MMQ
+#else // __CUDA_ARCH__ >= CC_VOLTA
+
+    return 64;
+#endif // __CUDA_ARCH__ >= CC_VOLTA
+
+#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+#endif // INT8_MMA_AVAILABLE
+}
+
+static constexpr int get_mmq_y_host(const int cc) {
+    return int8_mma_available(cc) || cc >= CC_VOLTA ? 128 : 64;
+}
+
+static constexpr __device__ int get_mmq_y_device() {
+#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+    return 128;
+#else
+#if __CUDA_ARCH__ >= CC_VOLTA
+    return 128;
+#else
+    return 64;
+#endif // __CUDA_ARCH__ >= CC_VOLTA
+#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+}
+
+#define MMQ_DP4A_TXS_Q4_0 tile_x_sizes{mmq_y*WARP_SIZE   + mmq_y, mmq_y*WARP_SIZE/QI4_0 + mmq_y/QI4_0, 0}
+#define MMQ_DP4A_TXS_Q4_1 tile_x_sizes{mmq_y*WARP_SIZE   + mmq_y, mmq_y*WARP_SIZE/QI4_1 + mmq_y/QI4_1, 0}
+#define MMQ_DP4A_TXS_Q5_0 tile_x_sizes{mmq_y*WARP_SIZE*2 + mmq_y, mmq_y*WARP_SIZE/QI5_0 + mmq_y/QI5_0, 0}
+#define MMQ_DP4A_TXS_Q5_1 tile_x_sizes{mmq_y*WARP_SIZE*2 + mmq_y, mmq_y*WARP_SIZE/QI5_1 + mmq_y/QI5_1, 0}
+#define MMQ_DP4A_TXS_Q8_0 tile_x_sizes{mmq_y*WARP_SIZE   + mmq_y, mmq_y*WARP_SIZE/QI8_0 + mmq_y/QI8_0, 0}
+#define MMQ_DP4A_TXS_Q2_K tile_x_sizes{mmq_y*WARP_SIZE   + mmq_y, mmq_y*WARP_SIZE       + mmq_y,       0}
+#define MMQ_DP4A_TXS_Q3_K tile_x_sizes{mmq_y*WARP_SIZE*2 + mmq_y, mmq_y*WARP_SIZE/QI3_K + mmq_y/QI3_K, mmq_y*WARP_SIZE/4 + mmq_y/4}
+#define MMQ_DP4A_TXS_Q4_K tile_x_sizes{mmq_y*WARP_SIZE   + mmq_y, mmq_y*WARP_SIZE/QI4_K + mmq_y/QI4_K, mmq_y*WARP_SIZE/8 + mmq_y/8}
+#define MMQ_DP4A_TXS_Q5_K tile_x_sizes{mmq_y*WARP_SIZE*2 + mmq_y, mmq_y*WARP_SIZE/QI5_K + mmq_y/QI5_K, mmq_y*WARP_SIZE/8 + mmq_y/8}
+#define MMQ_DP4A_TXS_Q6_K tile_x_sizes{mmq_y*WARP_SIZE*2 + mmq_y, mmq_y*WARP_SIZE/QI6_K + mmq_y/QI6_K, mmq_y*WARP_SIZE/8 + mmq_y/8}
+
+static constexpr __host__ __device__ tile_x_sizes mmq_get_dp4a_tile_x_sizes(ggml_type type, int mmq_y) {
+    return type == GGML_TYPE_Q4_0 ? MMQ_DP4A_TXS_Q4_0 :
+        type == GGML_TYPE_Q4_1 ? MMQ_DP4A_TXS_Q4_1 :
+        type == GGML_TYPE_Q5_0 ? MMQ_DP4A_TXS_Q5_0 :
+        type == GGML_TYPE_Q5_1 ? MMQ_DP4A_TXS_Q5_1 :
+        type == GGML_TYPE_Q8_0 ? MMQ_DP4A_TXS_Q8_0 :
+        type == GGML_TYPE_Q2_K ? MMQ_DP4A_TXS_Q2_K :
+        type == GGML_TYPE_Q3_K ? MMQ_DP4A_TXS_Q3_K :
+        type == GGML_TYPE_Q4_K ? MMQ_DP4A_TXS_Q4_K :
+        type == GGML_TYPE_Q5_K ? MMQ_DP4A_TXS_Q5_K :
+        type == GGML_TYPE_Q6_K ? MMQ_DP4A_TXS_Q6_K :
+        tile_x_sizes{0, 0, 0};
+}
+
+#define MMQ_MMA_TILE_X_K_Q4_0 (1*WARP_SIZE + WARP_SIZE/QI4_0               + 4)
+#define MMQ_MMA_TILE_X_K_Q4_1 (1*WARP_SIZE + WARP_SIZE/QI4_1               + 4)
+#define MMQ_MMA_TILE_X_K_Q5_0 (2*WARP_SIZE + WARP_SIZE/QI5_0               + 4)
+#define MMQ_MMA_TILE_X_K_Q5_1 (2*WARP_SIZE + WARP_SIZE/QI5_1               + 4)
+#define MMQ_MMA_TILE_X_K_Q8_0 (1*WARP_SIZE + WARP_SIZE/QI8_0               + 0)
+#define MMQ_MMA_TILE_X_K_Q2_K (1*WARP_SIZE + WARP_SIZE                     + 4)
+#define MMQ_MMA_TILE_X_K_Q3_K (2*WARP_SIZE + WARP_SIZE/QI3_K + WARP_SIZE/4 + 2)
+#define MMQ_MMA_TILE_X_K_Q4_K (1*WARP_SIZE + WARP_SIZE/QI4_K + WARP_SIZE/8 + 7)
+#define MMQ_MMA_TILE_X_K_Q5_K (2*WARP_SIZE + WARP_SIZE/QI5_K + WARP_SIZE/8 + 7)
+#define MMQ_MMA_TILE_X_K_Q6_K (2*WARP_SIZE + WARP_SIZE/QI6_K + WARP_SIZE/8 + 7)
+
+static_assert(MMQ_MMA_TILE_X_K_Q4_0 % 8 == 4, "Wrong padding.");
+static_assert(MMQ_MMA_TILE_X_K_Q4_1 % 8 == 4, "Wrong padding.");
+static_assert(MMQ_MMA_TILE_X_K_Q5_0 % 8 == 4, "Wrong padding.");
+static_assert(MMQ_MMA_TILE_X_K_Q5_1 % 8 == 4, "Wrong padding.");
+static_assert(MMQ_MMA_TILE_X_K_Q8_0 % 8 == 4, "Wrong padding.");
+static_assert(MMQ_MMA_TILE_X_K_Q2_K % 8 == 4, "Wrong padding.");
+static_assert(MMQ_MMA_TILE_X_K_Q3_K % 8 == 4, "Wrong padding.");
+static_assert(MMQ_MMA_TILE_X_K_Q4_K % 8 == 4, "Wrong padding.");
+static_assert(MMQ_MMA_TILE_X_K_Q5_K % 8 == 4, "Wrong padding.");
+static_assert(MMQ_MMA_TILE_X_K_Q6_K % 8 == 4, "Wrong padding.");
+
+static constexpr __host__ __device__ int mmq_get_mma_tile_x_k(ggml_type type) {
+    return type == GGML_TYPE_Q4_0 ? MMQ_MMA_TILE_X_K_Q4_0 :
+        type == GGML_TYPE_Q4_1 ? MMQ_MMA_TILE_X_K_Q4_1 :
+        type == GGML_TYPE_Q5_0 ? MMQ_MMA_TILE_X_K_Q5_0 :
+        type == GGML_TYPE_Q5_1 ? MMQ_MMA_TILE_X_K_Q5_1 :
+        type == GGML_TYPE_Q8_0 ? MMQ_MMA_TILE_X_K_Q8_0 :
+        type == GGML_TYPE_Q2_K ? MMQ_MMA_TILE_X_K_Q2_K :
+        type == GGML_TYPE_Q3_K ? MMQ_MMA_TILE_X_K_Q3_K :
+        type == GGML_TYPE_Q4_K ? MMQ_MMA_TILE_X_K_Q4_K :
+        type == GGML_TYPE_Q5_K ? MMQ_MMA_TILE_X_K_Q5_K :
+        type == GGML_TYPE_Q6_K ? MMQ_MMA_TILE_X_K_Q6_K :
+        0;
+}
+
+#define MMQ_TILE_Y_K (WARP_SIZE + WARP_SIZE/QI8_1)
+#define MMQ_NWARPS 8
+
+static int mmq_get_granularity_host(const int mmq_x, const int cc) {
+    return int8_mma_available(cc) && mmq_x >= 48 ? 16 : 8;
+}
+
+#ifdef INT8_MMA_AVAILABLE
+static constexpr __device__ int mmq_get_granularity_device(const int mmq_x) {
+    return mmq_x >= 48 ? 16 : 8;
+}
+#else
+static constexpr __device__ int mmq_get_granularity_device(const int /* mmq_x */) {
+    return 8;
+}
+#endif // INT8_MMA_AVAILABLE
+
+// ------------------------------------------------------------
+
+template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q4_0(
+    const char * __restrict__ x, int * __restrict__ x_tile, const int & kbx0, const int & i_max, const int & stride) {
+
+#ifdef INT8_MMA_AVAILABLE
+    int   * x_qs = (int   *)  x_tile;
+    float * x_df = (float *) (x_qs + WARP_SIZE);
+#else
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q4_0, mmq_y);
+    int   * x_qs = (int   *)  x_tile;
+    float * x_df = (float *) (x_qs + txs.qs);
+#endif // INT8_MMA_AVAILABLE
+
+    const int kbx  = threadIdx.x / QI4_0;
+    const int kqsx = threadIdx.x % QI4_0;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + threadIdx.y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q4_0 * bxi = (const block_q4_0 *) x + kbx0 + i*stride + kbx;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_qs[i*MMQ_MMA_TILE_X_K_Q4_0 + threadIdx.x] = get_int_from_uint8(bxi->qs, kqsx);
+#else
+        x_qs[i*(WARP_SIZE + 1)       + threadIdx.x] = get_int_from_uint8(bxi->qs, kqsx);
+#endif // INT8_MMA_AVAILABLE
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI4_0;
+    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_0) {
+        int i = i0 + threadIdx.y * QI4_0 + threadIdx.x / blocks_per_tile_x_row;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q4_0 * bxi = (const block_q4_0 *) x + kbx0 + i*stride + kbxd;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_df[i*MMQ_MMA_TILE_X_K_Q4_0       + kbxd] = bxi->d;
+#else
+        x_df[i*(WARP_SIZE/QI4_0) + i/QI4_0 + kbxd] = bxi->d;
+#endif // INT8_MMA_AVAILABLE
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q4_0_q8_1_dp4a(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q4_0, mmq_y);
+    const int   * x_qs = (const int   *) x;
+    const float * x_df = (const float *) x_qs + txs.qs;
+    const int   * y_qs = (const int   *) y + 4;
+    const half2 * y_ds = (const half2 *) y;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            const int kyqs = k0 % (QI8_1/2) + QI8_1 * (k0 / (QI8_1/2));
+
+            int u[2*VDR_Q4_0_Q8_1_MMQ];
+
+#pragma unroll
+            for (int l = 0; l < VDR_Q4_0_Q8_1_MMQ; ++l) {
+                u[2*l+0] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l)         % WARP_SIZE];
+                u[2*l+1] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l + QI4_0) % WARP_SIZE];
+            }
+
+            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q4_0_q8_1_impl<VDR_Q4_0_Q8_1_MMQ>
+                (&x_qs[i*(WARP_SIZE + 1) + k0], u, x_df[i*(WARP_SIZE/QI4_0) + i/QI4_0 + k0/QI4_0],
+                y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)]);
+        }
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q4_0_q8_1_mma(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+#ifdef INT8_MMA_AVAILABLE
+
+    typedef mma_int_A_I16K8 mma_A;
+    typedef mma_int_B_J8K8  mma_B;
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    y += (threadIdx.y % ntx) * (mma_B::J*MMQ_TILE_Y_K);
+
+    const int   * x_qs = (const int   *) x;
+    const float * x_df = (const float *) x_qs + WARP_SIZE;
+    const int   * y_qs = (const int   *) y + 4;
+    const half2 * y_ds = (const half2 *) y;
+
+    mma_A A[ntx];
+    float dA[ntx][mma_C::ne/2];
+
+    const int i0 = (threadIdx.y / ntx) * (ntx*mma_A::I);
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+#pragma unroll
+        for (int l = 0; l < mma_A::ne; ++l) {
+            const int i     = i0 + n*mma_A::I + mma_A::get_i(l);
+            const int k     = k0              + mma_A::get_k(l) % QI4_0;
+            const int shift =                4*(mma_A::get_k(l) / QI4_0);
+
+            A[n].x[l] = __vsubss4((x_qs[i*MMQ_MMA_TILE_X_K_Q4_0 + k] >> shift) & 0x0F0F0F0F, 0x08080808);
+        }
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + n*mma_C::I + mma_C::get_i(2*l);
+
+            dA[n][l] = x_df[i*MMQ_MMA_TILE_X_K_Q4_0 + k0/QI4_0];
+        }
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+        mma_B  B;
+        float dB[mma_C::ne/2];
+
+        B.load(y_qs + j0*MMQ_TILE_Y_K + (2*k0) % WARP_SIZE, MMQ_TILE_Y_K);
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int j = j0 + mma_C::get_j(l);
+
+            dB[l] = __low2float(y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)]);
+        }
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+            mma_C C;
+            C.mma_K8(A[n], B);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                sum[(j0/mma_C::J + n)*mma_C::ne + l] += dA[n][l/2]*dB[l%2]*C.x[l];
+            }
+        }
+    }
+#else
+    GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum);
+    NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+}
+
+template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q4_1(
+    const char * __restrict__ x, int * __restrict__ x_tile, const int & kbx0, const int & i_max, const int & stride) {
+
+#ifdef INT8_MMA_AVAILABLE
+    int   * x_qs = (int   *)  x_tile;
+    half2 * x_dm = (half2 *) (x_qs + WARP_SIZE);
+#else
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q4_1, mmq_y);
+    int   * x_qs = (int   *)  x_tile;
+    half2 * x_dm = (half2 *) (x_qs + txs.qs);
+#endif // INT8_MMA_AVAILABLE
+
+    const int kbx  = threadIdx.x / QI4_1;
+    const int kqsx = threadIdx.x % QI4_1;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + threadIdx.y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q4_1 * bxi = (const block_q4_1 *) x + kbx0 + i*stride + kbx;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_qs[i*MMQ_MMA_TILE_X_K_Q4_1 + threadIdx.x] = get_int_from_uint8_aligned(bxi->qs, kqsx);
+#else
+        x_qs[i*(WARP_SIZE + 1)       + threadIdx.x] = get_int_from_uint8_aligned(bxi->qs, kqsx);
+#endif // INT8_MMA_AVAILABLE
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI4_1;
+    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_1) {
+        int i = i0 + threadIdx.y * QI4_1 + threadIdx.x / blocks_per_tile_x_row;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q4_1 * bxi = (const block_q4_1 *) x + kbx0 + i*stride + kbxd;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_dm[i*MMQ_MMA_TILE_X_K_Q4_1       + kbxd] = bxi->dm;
+#else
+        x_dm[i*(WARP_SIZE/QI4_1) + i/QI4_1 + kbxd] = bxi->dm;
+#endif // INT8_MMA_AVAILABLE
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q4_1_q8_1_dp4a(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q4_1, mmq_y);
+    const int   * x_qs = (const int   *) x;
+    const half2 * x_dm = (const half2 *) x_qs + txs.qs;
+    const int   * y_qs = (const int   *) y + 4;
+    const half2 * y_ds = (const half2 *) y;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            const int kyqs = k0 % (QI8_1/2) + QI8_1 * (k0 / (QI8_1/2));
+
+            int u[2*VDR_Q4_1_Q8_1_MMQ];
+
+#pragma unroll
+            for (int l = 0; l < VDR_Q4_1_Q8_1_MMQ; ++l) {
+                u[2*l+0] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l)         % WARP_SIZE];
+                u[2*l+1] = y_qs[j*MMQ_TILE_Y_K + (kyqs + l + QI4_1) % WARP_SIZE];
+            }
+
+            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q4_1_q8_1_impl<VDR_Q4_1_Q8_1_MMQ>
+                (&x_qs[i*(WARP_SIZE + 1) + k0], u, x_dm[i*(WARP_SIZE/QI4_1) + i/QI4_1 + k0/QI4_1],
+                y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)]);
+        }
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q4_1_q8_1_mma(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+#ifdef INT8_MMA_AVAILABLE
+
+    typedef mma_int_A_I16K8 mma_A;
+    typedef mma_int_A_I16K4 mma_A_K4;
+    typedef mma_int_B_J8K8  mma_B;
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    y += (threadIdx.y % ntx) * (mma_B::J*MMQ_TILE_Y_K);
+
+    const int   * x_qs = (const int   *) x;
+    const half2 * x_dm = (const half2 *) x_qs + WARP_SIZE;
+    const int   * y_qs = (const int   *) y + 4;
+    const half2 * y_ds = (const half2 *) y;
+
+    mma_A A[ntx];
+    half2 dmA[ntx][mma_C::ne/2];
+
+    const int i0 = (threadIdx.y / ntx) * (ntx*mma_A::I);
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+        ((mma_A_K4 *) &A[n])[0].load(x_qs + (i0 + n*mma_A::I)*MMQ_MMA_TILE_X_K_Q4_1 + k0, MMQ_MMA_TILE_X_K_Q4_1);
+        A[n].x[2]  = (A[n].x[0] >> 4) & 0x0F0F0F0F;
+        A[n].x[3]  = (A[n].x[1] >> 4) & 0x0F0F0F0F;
+        A[n].x[0] &= 0x0F0F0F0F;
+        A[n].x[1] &= 0x0F0F0F0F;
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + n*mma_C::I + mma_C::get_i(2*l);
+
+            dmA[n][l] = x_dm[i*MMQ_MMA_TILE_X_K_Q4_1 + k0/QI4_1];
+        }
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+        mma_B B;
+        half2 dsB[mma_C::ne/2];
+
+        B.load(y_qs + j0*MMQ_TILE_Y_K + (2*k0) % WARP_SIZE, MMQ_TILE_Y_K);
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int j = j0 + mma_C::get_j(l);
+
+            dsB[l] = y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)];
+        }
+
+#pragma unroll
+        for (int n = 0; n < ntx; ++n) {
+            mma_C C;
+            C.mma_K8(A[n], B);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                const half2 dmA_dsB = dmA[n][l/2]*dsB[l%2];
+                sum[(j0/mma_C::J + n)*mma_C::ne + l] += __low2float(dmA_dsB)*C.x[l] + __high2float(dmA_dsB);
+            }
+        }
+    }
+#else
+    GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum);
+    NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+}
+
+template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q5_0(
+    const char * __restrict__ x, int * __restrict__ x_tile, const int & kbx0, const int & i_max, const int & stride) {
+
+#ifdef INT8_MMA_AVAILABLE
+    int   * x_qs = (int   *)  x_tile;
+    float * x_df = (float *) (x_qs + WARP_SIZE*2);
+#else
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q5_0, mmq_y);
+    int   * x_qs = (int   *)  x_tile;
+    float * x_df = (float *) (x_qs + txs.qs);
+#endif // INT8_MMA_AVAILABLE
+
+    const int kbx  = threadIdx.x / QI5_0;
+    const int kqsx = threadIdx.x % QI5_0;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + threadIdx.y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q5_0 * bxi = (const block_q5_0 *) x + kbx0 + i*stride + kbx;
+
+        const int ql = get_int_from_uint8(bxi->qs, kqsx);
+        const int qh = get_int_from_uint8(bxi->qh, 0) >> (4 * (threadIdx.x % QI5_0));
+
+        int qs0 = (ql >>  0)   & 0x0F0F0F0F;
+        qs0    |= (qh <<  4)   & 0x00000010;  // 0 ->  4
+        qs0    |= (qh << 11)   & 0x00001000;  // 1 -> 12
+        qs0    |= (qh << 18)   & 0x00100000;  // 2 -> 20
+        qs0    |= (qh << 25)   & 0x10000000;  // 3 -> 28
+        qs0     = __vsubss4(qs0, 0x10101010); // subtract 16
+
+        int qs1 = (ql >>  4)   & 0x0F0F0F0F;
+        qs1    |= (qh >> 12)   & 0x00000010;  // 16 ->  4
+        qs1    |= (qh >>  5)   & 0x00001000;  // 17 -> 12
+        qs1    |= (qh <<  2)   & 0x00100000;  // 18 -> 20
+        qs1    |= (qh <<  9)   & 0x10000000;  // 19 -> 28
+        qs1     = __vsubss4(qs1, 0x10101010); // subtract 16
+
+#ifdef INT8_MMA_AVAILABLE
+        x_qs[i*MMQ_MMA_TILE_X_K_Q5_0 + kbx*(2*QI5_0) + kqsx + 0]     = qs0;
+        x_qs[i*MMQ_MMA_TILE_X_K_Q5_0 + kbx*(2*QI5_0) + kqsx + QI5_0] = qs1;
+#else
+        x_qs[i*(2*WARP_SIZE + 1)     + kbx*(2*QI5_0) + kqsx + 0]     = qs0;
+        x_qs[i*(2*WARP_SIZE + 1)     + kbx*(2*QI5_0) + kqsx + QI5_0] = qs1;
+#endif // INT8_MMA_AVAILABLE
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI5_0;
+    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_0) {
+        int i = i0 + threadIdx.y * QI5_0 + threadIdx.x / blocks_per_tile_x_row;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q5_0 * bxi = (const block_q5_0 *) x + kbx0 + i*stride + kbxd;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_df[i*MMQ_MMA_TILE_X_K_Q5_0       + kbxd] = bxi->d;
+#else
+        x_df[i*(WARP_SIZE/QI5_0) + i/QI5_0 + kbxd] = bxi->d;
+#endif // INT8_MMA_AVAILABLE
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q5_0_q8_1_dp4a(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q5_0, mmq_y);
+    const int   * x_qs = (const int   *) x;
+    const float * x_df = (const float *) x_qs + txs.qs;
+    const int   * y_qs = (const int   *) y + 4;
+    const float * y_df = (const float *) y;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q8_0_q8_1_impl<float, QR5_0*VDR_Q5_0_Q8_1_MMQ>
+                (&x_qs[i*(2*WARP_SIZE + 1) + 2*k0], &y_qs[j*MMQ_TILE_Y_K + (2*k0) % WARP_SIZE],
+                 x_df[i*(WARP_SIZE/QI5_0) + i/QI5_0 + k0/QI5_0], y_df[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)]);
+        }
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q5_0_q8_1_mma(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+#ifdef INT8_MMA_AVAILABLE
+
+    typedef mma_int_A_I16K8 mma_A;
+    typedef mma_int_B_J8K8  mma_B;
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    y += (threadIdx.y % ntx) * (mma_B::J*MMQ_TILE_Y_K);
+
+    const int   * x_qs = (const int   *) x;
+    const float * x_df = (const float *) x_qs + WARP_SIZE*2;
+    const int   * y_qs = (const int   *) y + 4;
+    const float * y_df = (const float *) y;
+
+    mma_A A[ntx];
+    float dA[ntx][mma_C::ne/2];
+
+    const int i0 = (threadIdx.y / ntx) * (ntx*mma_A::I);
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+        A[n].load(x_qs + (i0 + n*mma_A::I)*MMQ_MMA_TILE_X_K_Q5_0 + QR5_1*k0, MMQ_MMA_TILE_X_K_Q5_0);
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + mma_C::get_i(2*l) + n*mma_C::I;
+
+            dA[n][l] = x_df[i*MMQ_MMA_TILE_X_K_Q5_0 + k0/QI5_0];
+        }
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+        mma_B B;
+        float dB[mma_C::ne/2];
+
+        B.load(y_qs + j0*MMQ_TILE_Y_K + (2*k0) % WARP_SIZE, MMQ_TILE_Y_K);
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int j = j0 + mma_C::get_j(l);
+
+            dB[l] = y_df[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)];
+        }
+
+#pragma unroll
+        for (int n = 0; n < ntx; ++n) {
+            mma_C C;
+            C.mma_K8(A[n], B);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                sum[(j0/mma_C::J + n)*mma_C::ne + l] += dA[n][l/2]*dB[l%2]*C.x[l];
+            }
+        }
+    }
+#else
+    GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum);
+    NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+}
+
+template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q5_1(
+    const char * __restrict__ x, int * __restrict__ x_tile, const int & kbx0, const int & i_max, const int & stride) {
+
+#ifdef INT8_MMA_AVAILABLE
+    int   * x_qs = (int   *)  x_tile;
+    half2 * x_dm = (half2 *) (x_qs + 2*WARP_SIZE);
+#else
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q5_1, mmq_y);
+    int   * x_qs = (int   *)  x_tile;
+    half2 * x_dm = (half2 *) (x_qs + txs.qs);
+#endif // INT8_MMA_AVAILABLE
+
+    const int kbx  = threadIdx.x / QI5_1;
+    const int kqsx = threadIdx.x % QI5_1;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + threadIdx.y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q5_1 * bxi = (const block_q5_1 *) x + kbx0 + i*stride + kbx;
+
+        const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx);
+        const int qh = get_int_from_uint8_aligned(bxi->qh, 0) >> (4 * (threadIdx.x % QI5_1));
+
+        int qs0 = (ql >>  0) & 0x0F0F0F0F;
+        qs0    |= (qh <<  4) & 0x00000010; // 0 ->  4
+        qs0    |= (qh << 11) & 0x00001000; // 1 -> 12
+        qs0    |= (qh << 18) & 0x00100000; // 2 -> 20
+        qs0    |= (qh << 25) & 0x10000000; // 3 -> 28
+
+        int qs1 = (ql >>  4) & 0x0F0F0F0F;
+        qs1    |= (qh >> 12) & 0x00000010; // 16 ->  4
+        qs1    |= (qh >>  5) & 0x00001000; // 17 -> 12
+        qs1    |= (qh <<  2) & 0x00100000; // 18 -> 20
+        qs1    |= (qh <<  9) & 0x10000000; // 19 -> 28
+
+#ifdef INT8_MMA_AVAILABLE
+        x_qs[i*MMQ_MMA_TILE_X_K_Q5_1 + kbx*(2*QI5_1) + kqsx + 0]     = qs0;
+        x_qs[i*MMQ_MMA_TILE_X_K_Q5_1 + kbx*(2*QI5_1) + kqsx + QI5_1] = qs1;
+#else
+        x_qs[i*(2*WARP_SIZE + 1)     + kbx*(2*QI5_1) + kqsx + 0]     = qs0;
+        x_qs[i*(2*WARP_SIZE + 1)     + kbx*(2*QI5_1) + kqsx + QI5_1] = qs1;
+#endif // INT8_MMA_AVAILABLE
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI5_1;
+    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_1) {
+        int i = i0 + threadIdx.y * QI5_1 + threadIdx.x / blocks_per_tile_x_row;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q5_1 * bxi = (const block_q5_1 *) x + kbx0 + i*stride + kbxd;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_dm[i*MMQ_MMA_TILE_X_K_Q5_1       + kbxd] = bxi->dm;
+#else
+        x_dm[i*(WARP_SIZE/QI5_1) + i/QI5_1 + kbxd] = bxi->dm;
+#endif // INT8_MMA_AVAILABLE
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q5_1_q8_1_dp4a(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q5_1, mmq_y);
+    const int   * x_qs = (const int   *) x;
+    const half2 * x_dm = (const half2 *) x_qs + txs.qs;
+    const int   * y_qs = (const int   *) y + 4;
+    const half2 * y_ds = (const half2 *) y;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q8_1_q8_1_impl<QR5_1*VDR_Q5_1_Q8_1_MMQ>
+                (&x_qs[i*(2*WARP_SIZE + 1) + 2*k0], &y_qs[j*MMQ_TILE_Y_K + (2*k0) % WARP_SIZE],
+                 x_dm[i*(WARP_SIZE/QI5_1) + i/QI5_1 + k0/QI5_1], y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)]);
+        }
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q5_1_q8_1_mma(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+#ifdef INT8_MMA_AVAILABLE
+
+    typedef mma_int_A_I16K8 mma_A;
+    typedef mma_int_B_J8K8  mma_B;
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    y += (threadIdx.y % ntx) * (mma_B::J*MMQ_TILE_Y_K);
+
+    const int   * x_qs = (const int   *) x;
+    const half2 * x_dm = (const half2 *) x_qs + 2*WARP_SIZE;
+    const int   * y_qs = (const int   *) y + 4;
+    const half2 * y_ds = (const half2 *) y;
+
+    mma_A A[ntx];
+    half2 dmA[ntx][mma_C::ne/2];
+
+    const int i0 = (threadIdx.y / ntx) * (ntx*mma_A::I);
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+        A[n].load(x_qs + (i0 + n*mma_A::I)*MMQ_MMA_TILE_X_K_Q5_1 + QR5_1*k0, MMQ_MMA_TILE_X_K_Q5_1);
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + mma_C::get_i(2*l) + n*mma_C::I;
+
+            dmA[n][l] = x_dm[i*MMQ_MMA_TILE_X_K_Q5_1 + k0/QI5_1];
+        }
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+        mma_B B;
+        half2 dsB[mma_C::ne/2];
+
+        B.load(y_qs + j0*MMQ_TILE_Y_K + (2*k0) % WARP_SIZE, MMQ_TILE_Y_K);
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int j = j0 + mma_C::get_j(l);
+
+            dsB[l] = y_ds[j*MMQ_TILE_Y_K + (2*k0/QI8_1) % (WARP_SIZE/QI8_1)];
+        }
+
+#pragma unroll
+        for (int n = 0; n < ntx; ++n) {
+            mma_C C;
+            C.mma_K8(A[n], B);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                const half2 dmA_dsB = dmA[n][l/2]*dsB[l%2];
+                sum[(j0/mma_C::J + n)*mma_C::ne + l] += __low2float(dmA_dsB)*C.x[l] + __high2float(dmA_dsB);
+            }
+        }
+    }
+#else
+    GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum);
+    NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+}
+
+template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q8_0(
+    const char * __restrict__ x, int * __restrict__ x_tile, const int & kbx0, const int & i_max, const int & stride) {
+
+#ifdef INT8_MMA_AVAILABLE
+    int   * x_qs = (int   *)  x_tile;
+    float * x_df = (float *) (x_tile + WARP_SIZE);
+#else
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q8_0, mmq_y);
+    int   * x_qs = (int   *)  x_tile;
+    float * x_df = (float *) (x_qs + txs.qs);
+#endif // INT8_MMA_AVAILABLE
+
+    const int kbx  = threadIdx.x / QI8_0;
+    const int kqsx = threadIdx.x % QI8_0;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + threadIdx.y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q8_0 * bxi = (const block_q8_0 *) x + kbx0 + i*stride + kbx;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_qs[i*MMQ_MMA_TILE_X_K_Q8_0 + threadIdx.x] = get_int_from_int8(bxi->qs, kqsx);
+#else
+        x_qs[i*(WARP_SIZE + 1)       + threadIdx.x] = get_int_from_int8(bxi->qs, kqsx);
+#endif // INT8_MMA_AVAILABLE
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI8_0;
+    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI8_0) {
+        int i = i0 + threadIdx.y * QI8_0 + threadIdx.x / blocks_per_tile_x_row;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q8_0 * bxi = (const block_q8_0 *) x + kbx0 + i*stride + kbxd;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_df[i*MMQ_MMA_TILE_X_K_Q8_0         + kbxd] = bxi->d;
+#else
+        x_df[i*(WARP_SIZE/QI8_0) + i / QI8_0 + kbxd] = bxi->d;
+#endif // INT8_MMA_AVAILABLE
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q8_0_q8_1_dp4a(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q8_0, mmq_y);
+    const int   * x_qs = (const int   *) x;
+    const float * x_df = (const float *) x_qs + txs.qs;
+    const int   * y_qs = (const int   *) y + 4;
+    const float * y_df = (const float *) y;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q8_0_q8_1_impl<float, VDR_Q8_0_Q8_1_MMQ>
+                (&x_qs[i*(WARP_SIZE + 1) + k0], &y_qs[j*MMQ_TILE_Y_K + k0], x_df[i*(WARP_SIZE/QI8_0) + i/QI8_0 + k0/QI8_0],
+                y_df[j*MMQ_TILE_Y_K + k0/QI8_1]);
+        }
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q8_0_q8_1_mma(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+#ifdef INT8_MMA_AVAILABLE
+
+    typedef mma_int_A_I16K8 mma_A;
+    typedef mma_int_B_J8K8  mma_B;
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    y += (threadIdx.y % ntx) * (mma_B::J*MMQ_TILE_Y_K);
+
+    const int   * x_qs = (const int   *) x;
+    const float * x_df = (const float *) x_qs + WARP_SIZE;
+    const int   * y_qs = (const int   *) y + 4;
+    const float * y_df = (const float *) y;
+
+    mma_A A[ntx];
+    float dA[ntx][mma_C::ne/2];
+
+    const int i0 = (threadIdx.y/ntx)*rows_per_warp;
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+        A[n].load(x_qs + (i0 + n*mma_A::I)*MMQ_MMA_TILE_X_K_Q8_0 + k0, MMQ_MMA_TILE_X_K_Q8_0);
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + n*mma_A::I + mma_C::get_i(2*l);
+
+            dA[n][l] = x_df[i*MMQ_MMA_TILE_X_K_Q8_0 + k0/QI8_0];
+        }
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+        mma_B B;
+        float dB[mma_C::ne/2];
+
+        B.load(y_qs + j0*MMQ_TILE_Y_K + k0, MMQ_TILE_Y_K);
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int j = j0 + mma_C::get_j(l);
+
+            dB[l] = y_df[j*MMQ_TILE_Y_K + k0/QI8_1];
+        }
+
+#pragma unroll
+        for (int n = 0; n < ntx; ++n) {
+            mma_C C;
+            C.mma_K8(A[n], B);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                sum[(j0/mma_C::J + n)*mma_C::ne + l] += C.x[l]*dA[n][l/2]*dB[l%2];
+            }
+        }
+    }
+#else
+    GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum);
+    NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+}
+
+template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q2_K(
+    const char * __restrict__ x, int * __restrict__ x_tile, const int & kbx0, const int & i_max, const int & stride) {
+
+#ifdef INT8_MMA_AVAILABLE
+    int   * x_qs = (int   *)  x_tile;
+    half2 * x_dm = (half2 *) (x_qs + WARP_SIZE);
+#else
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q2_K, mmq_y);
+    int   * x_qs = (int   *)  x_tile;
+    half2 * x_dm = (half2 *) (x_qs + txs.qs);
+#endif // INT8_MMA_AVAILABLE
+
+    const int kbx  = threadIdx.x / QI2_K;
+    const int kqsx = threadIdx.x % QI2_K;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + threadIdx.y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q2_K * bxi = (const block_q2_K *) x + kbx0 + i*stride + kbx;
+
+        const int x_ql_0 = get_int_from_uint8(bxi->qs, kqsx);
+
+#pragma unroll
+        for (int l = 0; l < QR2_K; ++l) {
+            const int k = kbx*QI2_K + (kqsx/8)*8 + l*2 + (kqsx % 8)/4;
+
+            int x_qs_k = ((x_ql_0 >> (2*l)) & 0x03030303) << (2*(kqsx % 4));
+            x_qs_k |= __shfl_xor_sync(0xFFFFFFFF, x_qs_k, 1, WARP_SIZE);
+            x_qs_k |= __shfl_xor_sync(0xFFFFFFFF, x_qs_k, 2, WARP_SIZE);
+
+            if (kqsx % QR2_K != 0) {
+                continue;
+            }
+
+#ifdef INT8_MMA_AVAILABLE
+            x_qs[i*MMQ_MMA_TILE_X_K_Q2_K + k] = x_qs_k;
+#else
+            x_qs[i*(WARP_SIZE + 1)       + k] = x_qs_k;
+#endif // INT8_MMA_AVAILABLE
+        }
+
+        const int sc_m = bxi->scales[kqsx];
+#ifdef FAST_FP16_AVAILABLE
+        const half2 x_dm_ik = __hmul2(bxi->dm, make_half2(sc_m & 0x0F, sc_m >> 4));
+#else
+        const float2 bxi_dmf = __half22float2(bxi->dm);
+        const half2 x_dm_ik = make_half2(bxi_dmf.x*(sc_m & 0x0F), bxi_dmf.y*(sc_m >> 4));
+#endif // FAST_FP16_AVAILABLE
+
+#ifdef INT8_MMA_AVAILABLE
+        x_dm[i*MMQ_MMA_TILE_X_K_Q2_K + threadIdx.x] = x_dm_ik;
+#else
+        x_dm[i*(WARP_SIZE + 1)       + threadIdx.x] = x_dm_ik;
+#endif // INT8_MMA_AVAILABLE
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q2_K_q8_1_dp4a(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q2_K, mmq_y);
+    const int   * x_qs = (const int   *) x;
+    const half2 * x_dm = (const half2 *) x_qs + txs.qs;
+    const int   * y_qs = (const int   *) y + 4;
+    const float * y_df = (const float *) y;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q2_K_q8_1_impl_mmq(
+                &x_qs[i*(WARP_SIZE + 1) + k0], &y_qs[j*MMQ_TILE_Y_K + (QR2_K*k0) % WARP_SIZE],
+                &x_dm[i*(WARP_SIZE + 1) + k0], y_df[j*MMQ_TILE_Y_K + ((QR2_K*k0) % WARP_SIZE)/QI8_1]);
+        }
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q2_K_q8_1_mma(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+#ifdef INT8_MMA_AVAILABLE
+
+    typedef mma_int_A_I16K4 mma_A;
+    typedef mma_int_B_J8K4  mma_B;
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    y += (threadIdx.y % ntx) * (mma_B::J*MMQ_TILE_Y_K);
+
+    const int   * x_qs = (const int   *) x;
+    const half2 * x_dm = (const half2 *) x_qs + WARP_SIZE;
+    const int   * y_qs = (const int   *) y + 4;
+    const float * y_df = (const float *) y;
+
+    const int i0 = (threadIdx.y / ntx) * (ntx*mma_A::I);
+
+    mma_A   A[ntx][2];
+    float  dA[ntx][mma_C::ne/2][2];
+    float  mA[ntx][mma_C::ne/2][2];
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+#pragma unroll
+        for (int l = 0; l < mma_A::ne; ++l) {
+            const int i = i0 + n*mma_A::I + mma_A::get_i(l);
+            const int shift = 2*mma_A::get_k(l);
+
+            A[n][0].x[l] = (x_qs[i*MMQ_MMA_TILE_X_K_Q2_K + k0 + 0] >> shift) & 0x03030303;
+            A[n][1].x[l] = (x_qs[i*MMQ_MMA_TILE_X_K_Q2_K + k0 + 1] >> shift) & 0x03030303;
+        }
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + n*mma_C::I + mma_C::get_i(2*l);
+
+#pragma unroll
+            for (int kdm = 0; kdm < 2; ++kdm) {
+                const float2 dm = __half22float2(x_dm[i*MMQ_MMA_TILE_X_K_Q2_K + k0 + kdm]);
+
+                dA[n][l][kdm] = dm.x;
+                mA[n][l][kdm] = dm.y;
+            }
+        }
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+        mma_B B[2];
+        float dB[mma_C::ne/2];
+
+        B[0].load(y_qs + j0*MMQ_TILE_Y_K + (QR2_K*k0 + 0)        % WARP_SIZE, MMQ_TILE_Y_K);
+        B[1].load(y_qs + j0*MMQ_TILE_Y_K + (QR2_K*k0 + mma_B::K) % WARP_SIZE, MMQ_TILE_Y_K);
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int j = j0 + mma_C::get_j(l);
+
+            dB[l] = y_df[j*MMQ_TILE_Y_K + ((4*k0)/QI8_1) % (WARP_SIZE/QI8_1)];
+        }
+
+        mma_C Cm[2];
+        mma_A A1;
+        A1.x[0] = 0x01010101;
+        A1.x[1] = 0x01010101;
+        Cm[0].mma_K4(A1, B[0]);
+        Cm[1].mma_K4(A1, B[1]);
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+            mma_C Cd[2];
+
+            Cd[0].mma_K4(A[n][0], B[0]);
+            Cd[1].mma_K4(A[n][1], B[1]);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                sum[(j0/mma_C::J + n)*mma_C::ne + l] += (
+                    Cd[0].x[l]*dA[n][l/2][0] + Cd[1].x[l]*dA[n][l/2][1] - Cm[0].x[l]*mA[n][l/2][0] - Cm[1].x[l]*mA[n][l/2][1])*dB[l%2];
+            }
+        }
+    }
+#else
+    GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum);
+    NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+}
+
+template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q3_K(
+    const char * __restrict__ x, int * __restrict__ x_tile, const int & kbx0, const int & i_max, const int & stride) {
+
+#ifdef INT8_MMA_AVAILABLE
+    int   * x_qs = (int   *)  x_tile;
+    float * x_df = (float *) (x_qs + WARP_SIZE*2);
+    int   * x_sc = (int   *) (x_df + WARP_SIZE/QI3_K);
+#else
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q3_K, mmq_y);
+    int   * x_qs = (int   *)  x_tile;
+    float * x_df = (float *) (x_qs + txs.qs);
+    int   * x_sc = (int   *) (x_df + txs.dm);
+#endif // INT8_MMA_AVAILABLE
+
+    const int kbx  = threadIdx.x / QI3_K;
+    const int kqsx = threadIdx.x % QI3_K;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + threadIdx.y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q3_K * bxi = (const block_q3_K *) x + kbx0 + i*stride + kbx;
+
+        const int x_ql_0 = get_int_from_uint8(bxi->qs,    kqsx);
+        const int x_qh_0 = get_int_from_uint8(bxi->hmask, kqsx % (QI3_K/2)) >> (4 * (kqsx / (QI3_K/2)));
+
+#pragma unroll
+        for (int l = 0; l < QR3_K; ++l) {
+            const int k = kbx*(QR3_K*QI3_K) + (kqsx/8)*32 + l*8 + kqsx % 8;
+
+            const int x_ql_k =  (x_ql_0 >> (2*l))       & 0x03030303;
+            const int x_qh_k = ((x_qh_0 >>    l)  << 2) & 0x04040404;
+
+            int x_qs_k = (x_ql_k | x_qh_k) << (4*(k%2));
+            x_qs_k |= __shfl_xor_sync(0xFFFFFFFF, x_qs_k, 1, WARP_SIZE);
+
+            if (kqsx % 2 != 0) {
+                continue;
+            }
+
+#ifdef INT8_MMA_AVAILABLE
+            x_qs[i*MMQ_MMA_TILE_X_K_Q3_K + k/2] = x_qs_k;
+#else
+            x_qs[i*(2*WARP_SIZE + 1)     + k/2] = x_qs_k;
+#endif // INT8_MMA_AVAILABLE
+        }
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI3_K;
+    const int kbxd = threadIdx.x % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI3_K) {
+        int i = (i0 + threadIdx.y * QI3_K + threadIdx.x / blocks_per_tile_x_row) % mmq_y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q3_K * bxi = (const block_q3_K *) x + kbx0 + i*stride + kbxd;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_df[i*MMQ_MMA_TILE_X_K_Q3_K       + kbxd] = bxi->d;
+#else
+        x_df[i*(WARP_SIZE/QI3_K) + i/QI3_K + kbxd] = bxi->d;
+#endif // INT8_MMA_AVAILABLE
+    }
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) {
+        int i = i0 + threadIdx.y * 4 + threadIdx.x / (WARP_SIZE/4);
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q3_K * bxi = (const block_q3_K *) x + kbx0 + i*stride + (threadIdx.x % (WARP_SIZE/4)) / (QI3_K/4);
+
+        const int ksc = threadIdx.x % (QI3_K/4);
+
+        const int ksc_low = ksc % (QI3_K/8);
+        const int shift_low = 4 * (ksc / (QI3_K/8));
+        const int sc_low = (get_int_from_uint8(bxi->scales, ksc_low) >> shift_low) & 0x0F0F0F0F;
+
+        const int ksc_high = QI3_K/8;
+        const int shift_high = 2 * ksc;
+        const int sc_high = ((get_int_from_uint8(bxi->scales, ksc_high) >> shift_high) << 4) & 0x30303030;
+
+        const int sc = __vsubss4(sc_low | sc_high, 0x20202020);
+
+#ifdef INT8_MMA_AVAILABLE
+        x_sc[i*MMQ_MMA_TILE_X_K_Q3_K + threadIdx.x % (WARP_SIZE/4)] = sc;
+#else
+        x_sc[i*(WARP_SIZE/4) + i/4   + threadIdx.x % (WARP_SIZE/4)] = sc;
+#endif // INT8_MMA_AVAILABLE
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q3_K_q8_1_dp4a(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q3_K, mmq_y);
+    const int   * x_qs = (const int   *) x;
+    const float * x_df = (const float *) x_qs + txs.qs;
+    const int   * x_sc = (const int   *) x_df + txs.dm;
+    const int   * y_qs = (const int   *) y + 4;
+    const float * y_df = (const float *) y;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            const int kbx  = k0 / QI3_K;
+            const int ky  = (k0 % QI3_K) * QR3_K;
+
+            const int8_t * scales = ((const int8_t *) (x_sc + i * (WARP_SIZE/4) + i/4 + kbx*4)) + ky/4;
+
+            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q3_K_q8_1_impl_mmq(
+                &x_qs[i*(2*WARP_SIZE + 1) + 2*k0], &y_qs[j*MMQ_TILE_Y_K + (k0*QR3_K) % WARP_SIZE], scales,
+                x_df[i*(WARP_SIZE/QI3_K) + i/QI3_K + kbx], y_df[j*MMQ_TILE_Y_K + ((k0*QR3_K) % WARP_SIZE)/QI8_1]);
+        }
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q3_K_q8_1_mma(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+#ifdef INT8_MMA_AVAILABLE
+
+    typedef mma_int_A_I16K4 mma_A;
+    typedef mma_int_B_J8K4  mma_B;
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    y += (threadIdx.y % ntx) * (mma_B::J*MMQ_TILE_Y_K);
+
+    const int   * x_qs = (const int   *) x;
+    const float * x_df = (const float *) x_qs + WARP_SIZE*2;
+    const int   * x_sc = (const int   *) x_df + WARP_SIZE/QI3_K;
+    const int   * y_qs = (const int   *) y + 4;
+    const float * y_df = (const float *) y;
+
+    const int i0 = (threadIdx.y / ntx) * (ntx*mma_A::I);
+
+    mma_A   A[ntx][2];
+    int   scA[ntx][mma_C::ne/2][2];
+    float  dA[ntx][mma_C::ne/2];
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+#pragma unroll
+        for (int l = 0; l < mma_A::ne; ++l) {
+            const int i = i0 + n*mma_A::I + mma_A::get_i(l);
+            const int k = QR3_K*k0 + mma_A::get_k(l);
+
+            A[n][0].x[l] = (x_qs[i*MMQ_MMA_TILE_X_K_Q3_K + k/2 + 0]          >> (4*(k%2))) & 0x0F0F0F0F;
+            A[n][1].x[l] = (x_qs[i*MMQ_MMA_TILE_X_K_Q3_K + k/2 + mma_A::K/2] >> (4*(k%2))) & 0x0F0F0F0F;
+            A[n][0].x[l] = __vsubss4(A[n][0].x[l], 0x04040404);
+            A[n][1].x[l] = __vsubss4(A[n][1].x[l], 0x04040404);
+        }
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + n*mma_C::I + mma_C::get_i(2*l);
+
+            const int kbx  = k0 / QI3_K;
+            const int ky  = (k0 % QI3_K) * QR3_K;
+            const int8_t * sc = ((const int8_t *) (x_sc + i*MMQ_MMA_TILE_X_K_Q3_K + kbx*4)) + ky/4;
+
+            scA[n][l][0] = sc[0];
+            scA[n][l][1] = sc[1];
+        }
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + n*mma_C::I + mma_C::get_i(2*l);
+
+            dA[n][l] = x_df[i*MMQ_MMA_TILE_X_K_Q3_K + k0/QI3_K];
+        }
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+        mma_B B[2];
+        float dB[mma_C::ne/2];
+
+        B[0].load(y_qs + j0*MMQ_TILE_Y_K + (QR3_K*k0 + 0)        % WARP_SIZE, MMQ_TILE_Y_K);
+        B[1].load(y_qs + j0*MMQ_TILE_Y_K + (QR3_K*k0 + mma_B::K) % WARP_SIZE, MMQ_TILE_Y_K);
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int j = j0 + mma_C::get_j(l);
+
+            dB[l] = y_df[j*MMQ_TILE_Y_K + ((4*k0)/QI8_1) % (WARP_SIZE/QI8_1)];
+        }
+
+#pragma unroll
+        for (int n = 0; n < ntx; ++n) {
+            mma_C C[2];
+            C[0].mma_K4(A[n][0], B[0]);
+            C[1].mma_K4(A[n][1], B[1]);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                sum[(j0/mma_C::J + n)*mma_C::ne + l] += (C[0].x[l]*scA[n][l/2][0] + C[1].x[l]*scA[n][l/2][1])*dA[n][l/2]*dB[l%2];
+            }
+        }
+    }
+#else
+    GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum);
+    NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+}
+
+template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q4_K(
+    const char * __restrict__ x, int * __restrict__ x_tile, const int & kbx0, const int & i_max, const int & stride) {
+
+#ifdef INT8_MMA_AVAILABLE
+    int   * x_qs = (int   *)  x_tile;
+    half2 * x_dm = (half2 *) (x_qs + WARP_SIZE);
+    int   * x_sc = (int   *) (x_dm + WARP_SIZE/QI4_K);
+#else
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q4_K, mmq_y);
+    int   * x_qs = (int   *)  x_tile;
+    half2 * x_dm = (half2 *) (x_qs + txs.qs);
+    int   * x_sc = (int   *) (x_dm + txs.dm);
+#endif // INT8_MMA_AVAILABLE
+
+    const int kbx  = 0;           // threadIdx.x / QI4_K
+    const int kqsx = threadIdx.x; // threadIdx.x % QI4_K
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + threadIdx.y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q4_K * bxi = (const block_q4_K *) x + kbx0 + i*stride + kbx;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_qs[i*MMQ_MMA_TILE_X_K_Q4_K + threadIdx.x] = get_int_from_uint8_aligned(bxi->qs, kqsx);
+#else
+        x_qs[i*(WARP_SIZE + 1)       + threadIdx.x] = get_int_from_uint8_aligned(bxi->qs, kqsx);
+#endif // INT8_MMA_AVAILABLE
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI4_K;  // == 1 if QK_K == 256
+    const int kbxd = threadIdx.x % blocks_per_tile_x_row; // == 0 if QK_K == 256
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_K) {
+        int i = (i0 + threadIdx.y * QI4_K + threadIdx.x / blocks_per_tile_x_row) % mmq_y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q4_K * bxi = (const block_q4_K *) x + kbx0 + i*stride + kbxd;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_dm[i*MMQ_MMA_TILE_X_K_Q4_K       + kbxd] = bxi->dm;
+#else
+        x_dm[i*(WARP_SIZE/QI4_K) + i/QI4_K + kbxd] = bxi->dm;
+#endif // INT8_MMA_AVAILABLE
+    }
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
+        int i = (i0 + threadIdx.y * 8 + threadIdx.x / (WARP_SIZE/8)) % mmq_y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q4_K * bxi = (const block_q4_K *) x + kbx0 + i*stride + (threadIdx.x % (WARP_SIZE/8)) / (QI4_K/8);
+
+        const int * scales = (const int *) bxi->scales;
+
+        const int ksc = threadIdx.x % (WARP_SIZE/8);
+
+        // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8
+        int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits
+        scales8    |= (scales[ksc/2]              >> (2 * (ksc % 2)))       & 0x30303030; // upper 2 bits
+
+#ifdef INT8_MMA_AVAILABLE
+        x_sc[i*MMQ_MMA_TILE_X_K_Q4_K + ksc] = scales8;
+#else
+        x_sc[i*(WARP_SIZE/8) + i/8   + ksc] = scales8;
+#endif // INT8_MMA_AVAILABLE
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q4_K_q8_1_dp4a(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q4_K, mmq_y);
+    const int   * x_qs = (const int   *) x;
+    const half2 * x_dm = (const half2 *) x_qs + txs.qs;
+    const int   * x_sc = (const int   *) x_dm + txs.dm;
+    const int   * y_qs = (const int   *) y + 4;
+    const half2 * y_ds = (const half2 *) y;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k0/16]) + 2*((k0 % 16) / 8);
+
+            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q4_K_q8_1_impl_mmq(
+                &x_qs[i*(WARP_SIZE + 1) + k0], &y_qs[j*MMQ_TILE_Y_K + (QR4_K*k0) % WARP_SIZE], sc, sc+8,
+                x_dm[i*(WARP_SIZE/QI4_K) + i/QI4_K], &y_ds[j*MMQ_TILE_Y_K + ((QR4_K*k0) % WARP_SIZE)/QI8_1]);
+        }
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q4_K_q8_1_mma(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+#ifdef INT8_MMA_AVAILABLE
+
+    typedef mma_int_A_I16K8 mma_A;
+    typedef mma_int_B_J8K8  mma_B;
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    y += (threadIdx.y % ntx) * (mma_B::J*MMQ_TILE_Y_K);
+
+    const int   * x_qs = (const int   *) x;
+    const half2 * x_dm = (const half2 *) x_qs + WARP_SIZE;
+    const int   * x_sc = (const int   *) x_dm + WARP_SIZE/QI4_K;
+    const int   * y_qs = (const int   *) y + 4;
+    const half2 * y_ds = (const half2 *) y;
+
+    const int i0 = (threadIdx.y / ntx) * (ntx*mma_A::I);
+
+    mma_A   A[ntx][2];
+    int   scA[ntx][mma_C::ne/2][2];
+    int    mA[ntx][mma_C::ne/2][2];
+    half2 dmA[ntx][mma_C::ne/2];
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+#pragma unroll
+        for (int kvdr = 0; kvdr < VDR_Q4_K_Q8_1_MMQ; kvdr += 8) {
+            A[n][kvdr/4 + 0].load(x_qs + (i0 + n*mma_A::I)*MMQ_MMA_TILE_X_K_Q4_K + k0, MMQ_MMA_TILE_X_K_Q4_K);
+
+#pragma unroll
+            for (int l = 0; l < mma_A::ne; ++l) {
+                A[n][kvdr/4 + 1].x[l]  = (A[n][kvdr/4 + 0].x[l] >> 4) & 0x0F0F0F0F;
+                A[n][kvdr/4 + 0].x[l] &= 0x0F0F0F0F;
+            }
+        }
+
+#pragma unroll
+        for (int kvdr = 0; kvdr < VDR_Q4_K_Q8_1_MMQ; kvdr += 4) {
+#pragma unroll
+            for (int l = 0; l < mma_C::ne/2; ++l) {
+                const int i = i0 + n*mma_A::I + mma_C::get_i(2*l);
+
+                const uint8_t * sc = ((const uint8_t *) &x_sc[i*MMQ_MMA_TILE_X_K_Q4_K + k0/16]) + 2 * ((k0 % 16) / 8);
+                const uint8_t *  m = sc + 8;
+
+                scA[n][l][kvdr/4] = sc[kvdr/4];
+                mA[n][l][kvdr/4]  =  m[kvdr/4];
+            }
+        }
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + n*mma_A::I + mma_C::get_i(2*l);
+
+            dmA[n][l] = x_dm[i*MMQ_MMA_TILE_X_K_Q4_K + k0/QI4_K];
+        }
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+        float tmpd[ntx][mma_C::ne] = {{0.0f}};
+        float tmpm[ntx][mma_C::ne] = {{0.0f}};
+
+#pragma unroll
+        for (int kvdr = 0; kvdr < VDR_Q4_K_Q8_1_MMQ; kvdr += 4) {
+            mma_B   B;
+            half2 dsB[mma_C::ne/2];
+
+            B.load(y_qs + j0*MMQ_TILE_Y_K + (2*k0 + 2*kvdr) % WARP_SIZE, MMQ_TILE_Y_K);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne/2; ++l) {
+                const int j = j0 + mma_C::get_j(l);
+
+                dsB[l] = y_ds[j*MMQ_TILE_Y_K + ((2*k0 + 2*kvdr)/QI8_1) % (WARP_SIZE/QI8_1)];
+            }
+
+#pragma unroll
+            for (int n = 0; n < ntx; ++n) {
+                mma_C C;
+                C.mma_K8(A[n][kvdr/4], B);
+
+#pragma unroll
+                for (int l = 0; l < mma_C::ne; ++l) {
+                    tmpd[n][l] += (C.x[l]*scA[n][l/2][kvdr/4]) *  __low2float(dsB[l%2]);
+                    tmpm[n][l] += mA[n][l/2][kvdr/4]           * __high2float(dsB[l%2]);
+                }
+            }
+        }
+
+#pragma unroll
+        for (int n = 0; n < ntx; ++n) {
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                sum[(j0/mma_C::J + n)*mma_C::ne + l] += __low2float(dmA[n][l/2])*tmpd[n][l] - __high2float(dmA[n][l/2])*tmpm[n][l];
+            }
+        }
+    }
+#else
+    GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum);
+    NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+}
+
+template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q5_K(
+    const char * __restrict__ x, int * __restrict__ x_tile, const int & kbx0, const int & i_max, const int & stride) {
+
+#ifdef INT8_MMA_AVAILABLE
+    int   * x_qs = (int   *)  x_tile;
+    half2 * x_dm = (half2 *) (x_qs + WARP_SIZE*2);
+    int   * x_sc = (int   *) (x_dm + WARP_SIZE/QI5_K);
+#else
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q5_K, mmq_y);
+    int   * x_qs = (int   *)  x_tile;
+    half2 * x_dm = (half2 *) (x_qs + txs.qs);
+    int   * x_sc = (int   *) (x_dm + txs.dm);
+#endif // INT8_MMA_AVAILABLE
+
+    const int kbx  = 0;           // threadIdx.x / QI5_K
+    const int kqsx = threadIdx.x; // threadIdx.x % QI5_K
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + threadIdx.y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q5_K * bxi = (const block_q5_K *) x + kbx0 + i*stride + kbx;
+        const int ky = QR5_K*kqsx;
+
+        const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx);
+        const int ql0 = (ql >> 0) & 0x0F0F0F0F;
+        const int ql1 = (ql >> 4) & 0x0F0F0F0F;
+
+        const int qh = get_int_from_uint8_aligned(bxi->qh, kqsx % (QI5_K/4));
+        const int qh0 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 0)) << 4) & 0x10101010;
+        const int qh1 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 1)) << 4) & 0x10101010;
+
+        const int kq0 = ky - ky % (QI5_K/2) + threadIdx.x % (QI5_K/4) + 0;
+        const int kq1 = ky - ky % (QI5_K/2) + threadIdx.x % (QI5_K/4) + (QI5_K/4);
+
+#ifdef INT8_MMA_AVAILABLE
+        x_qs[i*MMQ_MMA_TILE_X_K_Q5_K + kq0] = ql0 | qh0;
+        x_qs[i*MMQ_MMA_TILE_X_K_Q5_K + kq1] = ql1 | qh1;
+#else
+        x_qs[i*(2*WARP_SIZE + 1)     + kq0] = ql0 | qh0;
+        x_qs[i*(2*WARP_SIZE + 1)     + kq1] = ql1 | qh1;
+#endif // INT8_MMA_AVAILABLE
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI5_K;  // == 1 if QK_K == 256
+    const int kbxd = threadIdx.x % blocks_per_tile_x_row; // == 0 if QK_K == 256
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_K) {
+        int i = (i0 + threadIdx.y * QI5_K + threadIdx.x / blocks_per_tile_x_row) % mmq_y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q5_K * bxi = (const block_q5_K *) x + kbx0 + i*stride + kbxd;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_dm[i*MMQ_MMA_TILE_X_K_Q5_K       + kbxd] = bxi->dm;
+#else
+        x_dm[i*(WARP_SIZE/QI5_K) + i/QI5_K + kbxd] = bxi->dm;
+#endif // INT8_MMA_AVAILABLE
+    }
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
+        int i = (i0 + threadIdx.y * 8 + threadIdx.x / (WARP_SIZE/8)) % mmq_y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q5_K * bxi = (const block_q5_K *) x + kbx0 + i*stride + (threadIdx.x % (WARP_SIZE/8)) / (QI5_K/8);
+
+        const int * scales = (const int *) bxi->scales;
+
+        const int ksc = threadIdx.x % (WARP_SIZE/8);
+
+        // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8
+        int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits
+        scales8    |= (scales[ksc/2]              >> (2 * (ksc % 2)))       & 0x30303030; // upper 2 bits
+
+#ifdef INT8_MMA_AVAILABLE
+        x_sc[i*MMQ_MMA_TILE_X_K_Q5_K + ksc] = scales8;
+#else
+        x_sc[i*(WARP_SIZE/8) + i/8   + ksc] = scales8;
+#endif // INT8_MMA_AVAILABLE
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q5_K_q8_1_dp4a(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q5_K, mmq_y);
+    const int   * x_qs = (const int   *) x;
+    const half2 * x_dm = (const half2 *) x_qs + txs.qs;
+    const int   * x_sc = (const int   *) x_dm + txs.dm;
+    const int   * y_qs = (const int   *) y + 4;
+    const half2 * y_ds = (const half2 *) y;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k0/16]) + 2 * ((k0 % 16) / 8);
+
+            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q5_K_q8_1_impl_mmq(
+                &x_qs[i*(QR5_K*WARP_SIZE + 1) + QR5_K*k0], &y_qs[j*MMQ_TILE_Y_K + (QR5_K*k0) % WARP_SIZE], sc, sc+8,
+                x_dm[i*(WARP_SIZE/QI5_K) + i/QI5_K], &y_ds[j*MMQ_TILE_Y_K + ((QR5_K*k0) % WARP_SIZE)/QI8_1]);
+        }
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q5_K_q8_1_mma(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+#ifdef INT8_MMA_AVAILABLE
+
+    typedef mma_int_A_I16K8 mma_A;
+    typedef mma_int_B_J8K8  mma_B;
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    y += (threadIdx.y % ntx) * (mma_B::J*MMQ_TILE_Y_K);
+
+    const int   * x_qs = (const int   *) x;
+    const half2 * x_dm = (const half2 *) x_qs + WARP_SIZE*2;
+    const int   * x_sc = (const int   *) x_dm + WARP_SIZE/QI5_K;
+    const int   * y_qs = (const int   *) y + 4;
+    const half2 * y_ds = (const half2 *) y;
+
+    const int i0 = (threadIdx.y / ntx) * (ntx*mma_A::I);
+
+    mma_A   A[ntx][2];
+    int   scA[ntx][mma_C::ne/2][2];
+    int    mA[ntx][mma_C::ne/2][2];
+    half2 dmA[ntx][mma_C::ne/2];
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+#pragma unroll
+        for (int kvdr = 0; kvdr < VDR_Q5_K_Q8_1_MMQ; kvdr += 4) {
+            A[n][kvdr/4].load(x_qs + (i0 + n*mma_A::I)*MMQ_MMA_TILE_X_K_Q5_K + (QR5_K*k0 + QR5_K*kvdr), MMQ_MMA_TILE_X_K_Q5_K);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne/2; ++l) {
+                const int i = i0 + n*mma_C::I + mma_C::get_i(2*l);
+
+                const uint8_t * sc = ((const uint8_t *) &x_sc[i*MMQ_MMA_TILE_X_K_Q5_K + k0/16]) + 2 * ((k0 % 16) / 8);
+                const uint8_t *  m = sc + 8;
+
+                scA[n][l][kvdr/4] = sc[kvdr/4];
+                mA[n][l][kvdr/4]  =  m[kvdr/4];
+            }
+        }
+
+    #pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + n*mma_C::I + mma_C::get_i(2*l);
+
+            dmA[n][l] = x_dm[i*MMQ_MMA_TILE_X_K_Q5_K + k0/QI5_K];
+        }
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+        float tmpd[ntx][mma_C::ne] = {{0.0f}};
+        float tmpm[ntx][mma_C::ne] = {{0.0f}};
+
+#pragma unroll
+        for (int kvdr = 0; kvdr < VDR_Q5_K_Q8_1_MMQ; kvdr += 4) {
+            mma_B   B;
+            half2 dsB[mma_C::ne/2];
+
+            B.load(y_qs + j0*MMQ_TILE_Y_K + (2*k0 + 2*kvdr) % WARP_SIZE, MMQ_TILE_Y_K);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne/2; ++l) {
+                const int j = j0 + mma_C::get_j(l);
+
+                dsB[l] = y_ds[j*MMQ_TILE_Y_K + ((2*k0 + 2*kvdr)/QI8_1) % (WARP_SIZE/QI8_1)];
+            }
+
+#pragma unroll
+        for (int n = 0; n < ntx; ++n) {
+                mma_C C;
+                C.mma_K8(A[n][kvdr/4], B);
+
+#pragma unroll
+                for (int l = 0; l < mma_C::ne; ++l) {
+                    tmpd[n][l] += (C.x[l]*scA[n][l/2][kvdr/4]) *  __low2float(dsB[l%2]);
+                    tmpm[n][l] += mA[n][l/2][kvdr/4]           * __high2float(dsB[l%2]);
+                }
+            }
+        }
+
+#pragma unroll
+        for (int n = 0; n < ntx; ++n) {
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                sum[(j0/mma_C::J + n)*mma_C::ne + l] += __low2float(dmA[n][l/2])*tmpd[n][l] - __high2float(dmA[n][l/2])*tmpm[n][l];
+            }
+        }
+    }
+#else
+    GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum);
+    NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+}
+
+template <int mmq_y, int nwarps, bool need_check> static __device__ __forceinline__ void load_tiles_q6_K(
+    const char * __restrict__ x, int * __restrict__ x_tile, const int & kbx0, const int & i_max, const int & stride) {
+
+#ifdef INT8_MMA_AVAILABLE
+    int   * x_qs = (int   *)  x_tile;
+    float * x_df = (float *) (x_qs + WARP_SIZE*2);
+    int   * x_sc = (int   *) (x_df + WARP_SIZE/QI6_K);
+#else
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q6_K, mmq_y);
+    int   * x_qs = (int   *)  x_tile;
+    float * x_df = (float *) (x_qs + txs.qs);
+    int   * x_sc = (int   *) (x_df + txs.dm);
+#endif // INT8_MMA_AVAILABLE
+
+    const int kbx  = 0;           // threadIdx.x / QI6_K
+    const int kqsx = threadIdx.x; // threadIdx.x % QI6_K
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + threadIdx.y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q6_K * bxi = (const block_q6_K *) x + kbx0 + i*stride + kbx;
+        const int ky = QR6_K*kqsx;
+
+        const int ql = get_int_from_uint8(bxi->ql, kqsx);
+        const int ql0 = (ql >> 0) & 0x0F0F0F0F;
+        const int ql1 = (ql >> 4) & 0x0F0F0F0F;
+
+        const int qh = get_int_from_uint8(bxi->qh, (QI6_K/4) * (kqsx / (QI6_K/2)) + kqsx % (QI6_K/4));
+        const int qh0 = ((qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4)))) << 4) & 0x30303030;
+        const int qh1 =  (qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4))))       & 0x30303030;
+
+        const int kq0 = ky - ky % QI6_K + threadIdx.x % (QI6_K/2) + 0;
+        const int kq1 = ky - ky % QI6_K + threadIdx.x % (QI6_K/2) + (QI6_K/2);
+
+#ifdef INT8_MMA_AVAILABLE
+        x_qs[i*MMQ_MMA_TILE_X_K_Q6_K + kq0] = __vsubss4(ql0 | qh0, 0x20202020);
+        x_qs[i*MMQ_MMA_TILE_X_K_Q6_K + kq1] = __vsubss4(ql1 | qh1, 0x20202020);
+#else
+        x_qs[i*(2*WARP_SIZE + 1)     + kq0] = __vsubss4(ql0 | qh0, 0x20202020);
+        x_qs[i*(2*WARP_SIZE + 1)     + kq1] = __vsubss4(ql1 | qh1, 0x20202020);
+#endif // INT8_MMA_AVAILABLE
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI6_K;  // == 1 if QK_K == 256
+    const int kbxd = threadIdx.x % blocks_per_tile_x_row; // == 0 if QK_K == 256
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI6_K) {
+        int i = (i0 + threadIdx.y * QI6_K + threadIdx.x / blocks_per_tile_x_row) % mmq_y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q6_K * bxi = (const block_q6_K *) x + kbx0 + i*stride + kbxd;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_df[i*MMQ_MMA_TILE_X_K_Q6_K       + kbxd] = bxi->d;
+#else
+        x_df[i*(WARP_SIZE/QI6_K) + i/QI6_K + kbxd] = bxi->d;
+#endif // INT8_MMA_AVAILABLE
+    }
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
+        int i = (i0 + threadIdx.y * 8 + threadIdx.x / (WARP_SIZE/8)) % mmq_y;
+
+        if (need_check) {
+            i = min(i, i_max);
+        }
+
+        const block_q6_K * bxi = (const block_q6_K *) x + kbx0 + i*stride + (threadIdx.x % (WARP_SIZE/8)) / 4;
+
+#ifdef INT8_MMA_AVAILABLE
+        x_sc[i*MMQ_MMA_TILE_X_K_Q6_K + threadIdx.x % (WARP_SIZE/8)] = get_int_from_int8(bxi->scales, threadIdx.x % (QI6_K/8));
+#else
+        x_sc[i*(WARP_SIZE/8) + i/8   + threadIdx.x % (WARP_SIZE/8)] = get_int_from_int8(bxi->scales, threadIdx.x % (QI6_K/8));
+#endif // INT8_MMA_AVAILABLE
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q6_K_q8_1_dp4a(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+
+    constexpr tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(GGML_TYPE_Q6_K, mmq_y);
+    const int   * x_qs = (const int   *) x;
+    const float * x_df = (const float *) x_qs + txs.qs;
+    const int   * x_sc = (const int   *) x_df + txs.dm;
+    const int   * y_qs = (const int   *) y + 4;
+    const float * y_df = (const float *) y;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            const int8_t * sc = ((const int8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k0/8]);
+
+            sum[j0/nwarps*mmq_y/WARP_SIZE + i0/WARP_SIZE] += vec_dot_q6_K_q8_1_impl_mmq(
+                &x_qs[i*(QR6_K*WARP_SIZE + 1) + QR6_K*k0], &y_qs[j*MMQ_TILE_Y_K + (QR6_K*k0) % WARP_SIZE], sc,
+                x_df[i*(WARP_SIZE/QI6_K) + i/QI6_K], &y_df[j*MMQ_TILE_Y_K + ((QR6_K*k0) % WARP_SIZE)/QI8_1]);
+        }
+    }
+}
+
+template <int mmq_x, int mmq_y, int nwarps>
+static __device__ __forceinline__ void vec_dot_q6_K_q8_1_mma(
+    const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int & k0) {
+#ifdef INT8_MMA_AVAILABLE
+
+    typedef mma_int_A_I16K4 mma_A;
+    typedef mma_int_B_J8K4  mma_B;
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    y += (threadIdx.y % ntx) * (mma_B::J*MMQ_TILE_Y_K);
+
+    const int   * x_qs = (const int   *) x;
+    const float * x_df = (const float *) x_qs + WARP_SIZE*2;
+    const int   * x_sc = (const int   *) x_df + WARP_SIZE/QI6_K;
+    const int   * y_qs = (const int   *) y + 4;
+    const float * y_df = (const float *) y;
+
+    const int i0 = (threadIdx.y / ntx) * (ntx*mma_A::I);
+
+    mma_A   A[ntx][4];
+    int   scA[ntx][mma_C::ne/2][4];
+    float  dA[ntx][mma_C::ne/2];
+
+#pragma unroll
+    for (int n = 0; n < ntx; ++n) {
+#pragma unroll
+        for (int kvdr = 0; kvdr < VDR_Q6_K_Q8_1_MMQ; kvdr += 4) {
+            A[n][kvdr/2 + 0].load(x_qs + (i0 + n*mma_A::I)*MMQ_MMA_TILE_X_K_Q6_K + (QR6_K*k0 + QR6_K*kvdr + 0),        MMQ_MMA_TILE_X_K_Q6_K);
+            A[n][kvdr/2 + 1].load(x_qs + (i0 + n*mma_A::I)*MMQ_MMA_TILE_X_K_Q6_K + (QR6_K*k0 + QR6_K*kvdr + mma_A::K), MMQ_MMA_TILE_X_K_Q6_K);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne/2; ++l) {
+                const int i = i0 + n*mma_C::I + mma_C::get_i(2*l);
+
+                const int8_t * sc = ((const int8_t *) &x_sc[i*MMQ_MMA_TILE_X_K_Q6_K + k0/8]);
+
+                scA[n][l][kvdr/2 + 0] = sc[kvdr/2 + 0];
+                scA[n][l][kvdr/2 + 1] = sc[kvdr/2 + 1];
+            }
+        }
+
+#pragma unroll
+        for (int l = 0; l < mma_C::ne/2; ++l) {
+            const int i = i0 + n*mma_C::I + mma_C::get_i(2*l);
+
+            dA[n][l] = x_df[i*MMQ_MMA_TILE_X_K_Q6_K + k0/QI6_K];
+        }
+    }
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+        float tmp[ntx][mma_C::ne] = {{0.0f}};
+
+#pragma unroll
+        for (int kvdr = 0; kvdr < VDR_Q6_K_Q8_1_MMQ; kvdr += 4) {
+            mma_B B[2];
+            float dB[mma_C::ne/2];
+
+            const int k0B = (2*k0 + 2*kvdr) % WARP_SIZE;
+            B[0].load(y_qs + j0*MMQ_TILE_Y_K + 0        + k0B, MMQ_TILE_Y_K);
+            B[1].load(y_qs + j0*MMQ_TILE_Y_K + mma_B::K + k0B, MMQ_TILE_Y_K);
+
+#pragma unroll
+            for (int l = 0; l < mma_C::ne/2; ++l) {
+                const int j = j0 + mma_C::get_j(l);
+
+                dB[l] = y_df[j*MMQ_TILE_Y_K + ((2*k0 + 2*kvdr)/QI8_1) % (WARP_SIZE/QI8_1)];
+            }
+
+#pragma unroll
+            for (int n = 0; n < ntx; ++n) {
+                mma_C C[2];
+                C[0].mma_K4(A[n][kvdr/2 + 0], B[0]);
+                C[1].mma_K4(A[n][kvdr/2 + 1], B[1]);
+
+#pragma unroll
+                for (int l = 0; l < mma_C::ne; ++l) {
+                    tmp[n][l] += (C[0].x[l]*scA[n][l/2][kvdr/2 + 0] + C[1].x[l]*scA[n][l/2][kvdr/2 + 1])*dB[l%2];
+                }
+            }
+        }
+
+#pragma unroll
+        for (int n = 0; n < ntx; ++n) {
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                sum[(j0/mma_C::J + n)*mma_C::ne + l] += tmp[n][l]*dA[n][l/2];
+            }
+        }
+    }
+#else
+    GGML_UNUSED(x); GGML_UNUSED(y); GGML_UNUSED(sum);
+    NO_DEVICE_CODE;
+#endif // INT8_MMA_AVAILABLE
+}
+
+template<int mmq_x, int mmq_y, int nwarps, bool need_check>
+static __device__ __forceinline__ void mmq_write_back_dp4a(
+    const float * __restrict__ sum, float * __restrict__ dst, const int & stride, const int & i_max, const int & j_max) {
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+        if (j > j_max) {
+            return;
+        }
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            if (need_check && i > i_max) {
+                continue;
+            }
+
+            dst[j*stride + i] = sum[(j0/nwarps) * (mmq_y/WARP_SIZE) + i0/WARP_SIZE];
+        }
+    }
+}
+
+template<int mmq_x, int mmq_y, int nwarps, bool need_check>
+static __device__ __forceinline__ void mmq_write_back_mma(
+    const float * __restrict__ sum, float * __restrict__ dst, const int & stride, const int & i_max, const int & j_max) {
+
+    typedef mma_int_C_I16J8 mma_C;
+
+    constexpr int granularity = mmq_get_granularity_device(mmq_x);
+    constexpr int rows_per_warp = 2 * granularity;
+    constexpr int ntx = rows_per_warp/mma_C::I; // Number of x minitiles per warp.
+
+    const int i0 = (threadIdx.y / ntx) * (ntx*mma_C::I);
+#ifdef INT8_MMA_AVAILABLE
+    static_assert(nwarps*mma_C::I == mmq_y, "nwarps*mma_C::I != mmq_y");
+#endif // INT8_MMA_AVAILABLE
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += ntx*mma_C::J) {
+#pragma unroll
+        for (int n = 0; n < ntx; ++n) {
+#pragma unroll
+            for (int l = 0; l < mma_C::ne; ++l) {
+                const int j = j0 + (threadIdx.y % ntx) * mma_C::J + mma_C::get_j(l);
+
+                if (j > j_max) {
+                    continue;
+                }
+
+                const int i = i0 + n*mma_C::I + mma_C::get_i(l);
+
+                if (need_check && i > i_max) {
+                    continue;
+                }
+
+                dst[j*stride + i] = sum[(j0/mma_C::J + n)*mma_C::ne + l];
+            }
+        }
+    }
+}
+
+// -------------------------------------------------------------------------------------------------------------------------------------
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check, ggml_type type>
+struct mmq_type_traits;
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check>
+struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q4_0> {
+    static constexpr int              vdr          = VDR_Q4_0_Q8_1_MMQ;
+    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q4_0<mmq_y, nwarps, need_check>;
+    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q4_0_q8_1_mma<mmq_x, mmq_y, nwarps>;
+    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q4_0_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
+};
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check>
+struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q4_1> {
+    static constexpr int              vdr          = VDR_Q4_1_Q8_1_MMQ;
+    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q4_1<mmq_y, nwarps, need_check>;
+    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q4_1_q8_1_mma<mmq_x, mmq_y, nwarps>;
+    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q4_1_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
+};
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check>
+struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q5_0> {
+    static constexpr int              vdr          = VDR_Q5_0_Q8_1_MMQ;
+    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q5_0<mmq_y, nwarps, need_check>;
+    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q5_0_q8_1_mma<mmq_x, mmq_y, nwarps>;
+    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q5_0_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
+};
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check>
+struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q5_1> {
+    static constexpr int              vdr          = VDR_Q5_1_Q8_1_MMQ;
+    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q5_1<mmq_y, nwarps, need_check>;
+    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q5_1_q8_1_mma<mmq_x, mmq_y, nwarps>;
+    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q5_1_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
+};
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check>
+struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q8_0> {
+    static constexpr int              vdr          = VDR_Q8_0_Q8_1_MMQ;
+    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q8_0<mmq_y, nwarps, need_check>;
+    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q8_0_q8_1_mma<mmq_x, mmq_y, nwarps>;
+    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q8_0_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
+};
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check>
+struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q2_K> {
+    static constexpr int              vdr          = VDR_Q2_K_Q8_1_MMQ;
+    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q2_K<mmq_y, nwarps, need_check>;
+    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q2_K_q8_1_mma<mmq_x, mmq_y, nwarps>;
+    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q2_K_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
+};
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check>
+struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q3_K> {
+    static constexpr int              vdr          = VDR_Q3_K_Q8_1_MMQ;
+    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q3_K<mmq_y, nwarps, need_check>;
+    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q3_K_q8_1_mma<mmq_x, mmq_y, nwarps>;
+    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q3_K_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
+};
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check>
+struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q4_K> {
+    static constexpr int              vdr          = VDR_Q4_K_Q8_1_MMQ;
+    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q4_K<mmq_y, nwarps, need_check>;
+    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q4_K_q8_1_mma<mmq_x, mmq_y, nwarps>;
+    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q4_K_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
+};
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check>
+struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q5_K> {
+    static constexpr int              vdr          = VDR_Q5_K_Q8_1_MMQ;
+    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q5_K<mmq_y, nwarps, need_check>;
+    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q5_K_q8_1_mma<mmq_x, mmq_y, nwarps>;
+    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q5_K_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
+};
+
+template <int mmq_x, int mmq_y, int nwarps, bool need_check>
+struct mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, GGML_TYPE_Q6_K> {
+    static constexpr int              vdr          = VDR_Q6_K_Q8_1_MMQ;
+    static constexpr load_tiles_mmq_t load_tiles   = load_tiles_q6_K<mmq_y, nwarps, need_check>;
+    static constexpr vec_dot_mmq_t    vec_dot_mma  = vec_dot_q6_K_q8_1_mma<mmq_x, mmq_y, nwarps>;
+    static constexpr vec_dot_mmq_t    vec_dot_dp4a = vec_dot_q6_K_q8_1_dp4a<mmq_x, mmq_y, nwarps>;
+};
+
+static bool mmq_need_sum(const ggml_type type_x) {
+    switch (type_x) {
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+            return true;
+        case GGML_TYPE_Q5_0:
+            return false;
+        case GGML_TYPE_Q5_1:
+            return true;
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+            return false;
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+            return true;
+        case GGML_TYPE_Q6_K:
+            return false;
+        default:
+            GGML_ASSERT(false);
+            break;
+    }
+    return false;
+}
+
+template <ggml_type type, int mmq_x, int nwarps, bool need_check, bool fixup>
+static __device__ void mul_mat_q_process_tile(
+    const char * __restrict__ x, const char * __restrict__ yc, float * __restrict__ dst, float * __restrict__ tmp_fixup,
+    const int & ne00, const int & ne01, const int & stride01, const int & ne10, const int & ne11, const int & stride11, const int & ne0,
+    const int & it, const int & jt, const int & kb0_start, const int & kb0_stop) {
+
+    constexpr int              qk         = ggml_cuda_type_traits<type>::qk;
+    constexpr int              qr         = ggml_cuda_type_traits<type>::qr;
+    constexpr int              qi         = ggml_cuda_type_traits<type>::qi;
+    constexpr int              mmq_y      = get_mmq_y_device();
+    constexpr int              vdr        = mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, type>::vdr;
+    constexpr load_tiles_mmq_t load_tiles = mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, type>::load_tiles;
+
+    extern __shared__ char data_mul_mat_q[];
+    int * tile_y = (int *) data_mul_mat_q;
+    int * tile_x = tile_y + GGML_PAD(mmq_x*(WARP_SIZE + WARP_SIZE/QI8_1), nwarps*WARP_SIZE);
+
+#ifdef INT8_MMA_AVAILABLE
+    constexpr vec_dot_mmq_t    vec_dot    = mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, type>::vec_dot_mma;
+    constexpr mmq_write_back_t write_back = mmq_write_back_mma<mmq_x, mmq_y, nwarps, need_check>;
+#else
+    constexpr vec_dot_mmq_t    vec_dot    = mmq_type_traits<mmq_x, mmq_y, nwarps, need_check, type>::vec_dot_dp4a;
+    constexpr mmq_write_back_t write_back = mmq_write_back_dp4a<mmq_x, mmq_y, nwarps, need_check>;
+#endif // INT8_MMA_AVAILABLE
+
+    constexpr int blocks_per_warp = WARP_SIZE / qi;
+
+    float sum[mmq_x*mmq_y / (nwarps*WARP_SIZE)] = {0.0f};
+
+    const int tile_x_max_i = ne01 - it*mmq_y - 1;
+    const int tile_y_max_j = ne11 - jt*mmq_x - 1;
+
+    const int * y = (const int *) yc + jt*(mmq_x*sizeof(block_q8_1_mmq)/sizeof(int));
+
+    for (int kb0 = kb0_start; kb0 < kb0_stop; kb0 += blocks_per_warp) {
+
+        load_tiles(x, tile_x, stride01*it*mmq_y + kb0, tile_x_max_i, stride01);
+
+#pragma unroll
+        for (int kr = 0; kr < qr; ++kr) {
+            const int * by0 = y + stride11*(kb0*(qk*sizeof(block_q8_1_mmq) / (4*QK8_1*sizeof(int))) + kr*sizeof(block_q8_1_mmq)/sizeof(int));
+#pragma unroll
+            for (int l0 = 0; l0 < mmq_x*MMQ_TILE_Y_K; l0 += nwarps*WARP_SIZE) {
+                int l = l0 + threadIdx.y*WARP_SIZE + threadIdx.x;
+
+                tile_y[l] = by0[l];
+            }
+
+            __syncthreads();
+
+// #pragma unroll // unrolling this loop causes too much register pressure
+            for (int k0 = kr*WARP_SIZE/qr; k0 < (kr+1)*WARP_SIZE/qr; k0 += vdr) {
+                vec_dot(tile_x, tile_y, sum, k0);
+            }
+
+            __syncthreads();
+        }
+    }
+
+    if (fixup) {
+        write_back(sum, tmp_fixup + blockIdx.x*(mmq_x*mmq_y), mmq_y, mmq_y, mmq_x);
+    } else {
+        write_back(sum, dst + jt*mmq_x*ne0 + it*mmq_y, ne0, tile_x_max_i, tile_y_max_j);
+    }
+}
+
+
+// The mul_mat_q kernel implements "stream-k" work partitioning as described in https://arxiv.org/abs/2301.03598
+
+template <ggml_type type, int mmq_x, int nwarps, bool need_check>
+#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+#if defined(RDNA3) || defined(RDNA2)
+    __launch_bounds__(WARP_SIZE*nwarps, 2)
+#endif // defined(RDNA3) || defined(RDNA2)
+#else
+#if __CUDA_ARCH__ >= CC_VOLTA
+    __launch_bounds__(WARP_SIZE*nwarps, 1)
+#else
+    __launch_bounds__(WARP_SIZE*nwarps, 2)
+#endif // __CUDA_ARCH__ >= CC_VOLTA
+#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)
+static __global__ void mul_mat_q(
+    const char * __restrict__ x, const char * __restrict__ yc, float * __restrict__ dst, float * __restrict__ tmp_fixup,
+    const int ne00, const int ne01, const int stride01, const int ne10, const int ne11, const int stride11, const int ne0) {
+
+    // Skip unused template specializations for faster compilation:
+    if (mmq_x > get_mmq_x_max_device() || mmq_x % mmq_get_granularity_device(mmq_x) != 0) {
+        NO_DEVICE_CODE;
+        return;
+    }
+
+    constexpr int qk    = ggml_cuda_type_traits<type>::qk;
+    constexpr int qi    = ggml_cuda_type_traits<type>::qi;
+    constexpr int mmq_y = get_mmq_y_device();
+
+    // On AMD or old CUDA the performance with stream-k was worse, use conventional tiling instead:
+#if (defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) || __CUDA_ARCH__ < CC_VOLTA
+    {
+        constexpr bool fixup = false;
+        mul_mat_q_process_tile<type, mmq_x, nwarps, need_check, fixup>
+            (x, yc, dst, tmp_fixup, ne00, ne01, stride01, ne10, ne11, stride11, ne0,
+                blockIdx.x, blockIdx.y, 0, ne00/qk);
+        return;
+    }
+#endif // (defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__)) || __CUDA_ARCH__ < CC_VOLTA
+
+    const     int64_t blocks_per_ne00 = ne00 / qk;
+    constexpr int     blocks_per_warp = WARP_SIZE / qi;
+
+    const int ntx = (ne11 + mmq_x - 1) / mmq_x; // Number of tiles x
+    const int nty = (ne01 + mmq_y - 1) / mmq_y; // Number of tiles y
+
+    // kbc == k block continuous, current index in continuous ijk space.
+    int64_t       kbc      = GGML_PAD((int64_t) blockIdx.x     *blocks_per_ne00*ntx*nty / gridDim.x, blocks_per_warp);
+    const int64_t kbc_stop = GGML_PAD((int64_t)(blockIdx.x + 1)*blocks_per_ne00*ntx*nty / gridDim.x, blocks_per_warp);
+
+    // kb0 == k index when doing the matrix multiplication for an output tile.
+    int kb0_start = kbc % blocks_per_ne00;
+    int kb0_stop  = min(blocks_per_ne00, kb0_start + kbc_stop - kbc);
+    while (kbc < kbc_stop && kb0_stop == blocks_per_ne00) {
+        const int jt =  kbc /    (blocks_per_ne00*nty);                    // j index of current tile.
+        const int it = (kbc - jt*(blocks_per_ne00*nty)) / blocks_per_ne00; // i index of current tile.
+
+        constexpr bool fixup = false; // All but (potentially) the last iterations write their data to dst rather than the fixup buffer.
+        mul_mat_q_process_tile<type, mmq_x, nwarps, need_check, fixup>
+            (x, yc, dst, tmp_fixup, ne00, ne01, stride01, ne10, ne11, stride11, ne0,
+             it, jt, kb0_start, kb0_stop);
+
+        kbc += blocks_per_ne00;
+        kbc -= kbc % blocks_per_ne00;
+
+        kb0_start = 0;
+        kb0_stop  = min(blocks_per_ne00, kbc_stop - kbc);
+    }
+
+    if (kbc >= kbc_stop) {
+        return;
+    }
+
+    const int jt =  kbc /    (blocks_per_ne00*nty);
+    const int it = (kbc - jt*(blocks_per_ne00*nty)) / blocks_per_ne00;
+
+    constexpr bool fixup = true; // Last index writes it data to fixup buffer to avoid data races with other blocks.
+    mul_mat_q_process_tile<type, mmq_x, nwarps, need_check, fixup>
+        (x, yc, dst, tmp_fixup, ne00, ne01, stride01, ne10, ne11, stride11, ne0,
+            it, jt, kb0_start, kb0_stop);
+}
+
+
+template <ggml_type type, int mmq_x, int nwarps, bool need_check>
+static __global__ void mul_mat_q_stream_k_fixup(
+    float * __restrict__ dst, const float * __restrict__ tmp_last_tile, const int ne00, const int ne01, const int ne11, const int ne0, const int block_num_mmq) {
+
+    constexpr int     mmq_y           = get_mmq_y_device();
+    constexpr int     qk              = ggml_cuda_type_traits<type>::qk;
+    constexpr int     qi              = ggml_cuda_type_traits<type>::qi;
+    constexpr int     blocks_per_warp = WARP_SIZE / qi;
+    const     int64_t blocks_per_ne00 = ne00 / qk;
+
+    float sum[mmq_x*mmq_y / (nwarps*WARP_SIZE)] = {0.0f};
+
+    const int ntx = (ne11 + mmq_x - 1) / mmq_x;
+    const int nty = (ne01 + mmq_y - 1) / mmq_y;
+
+    bool any_fixup = false;
+
+    const int bidx_start = (blockIdx.y*nty + blockIdx.x)     * block_num_mmq / (gridDim.y*gridDim.x);
+    const int bidx_stop  = (blockIdx.y*nty + blockIdx.x + 1) * block_num_mmq / (gridDim.y*gridDim.x) + 1;
+
+    for (int bidx = bidx_start; bidx < bidx_stop; ++bidx) {
+        const int64_t kbc      = GGML_PAD((int64_t) bidx     *blocks_per_ne00*ntx*nty / block_num_mmq, blocks_per_warp);
+        const int64_t kbc_stop = GGML_PAD((int64_t)(bidx + 1)*blocks_per_ne00*ntx*nty / block_num_mmq, blocks_per_warp);
+
+        // Skip fixup tile if the MMQ CUDA block never wrote anything to it:
+        if (kbc == kbc_stop || kbc_stop % blocks_per_ne00 == 0) {
+            continue;
+        }
+
+        const int jt =  kbc_stop /    (blocks_per_ne00*nty);
+        const int it = (kbc_stop - jt*(blocks_per_ne00*nty)) / blocks_per_ne00;
+
+        // Skip fixup tile if it's unrelated to the output tile assigned to this CUDA block:
+        if (it != blockIdx.x || jt != blockIdx.y) {
+            continue;
+        }
+
+        any_fixup = true;
+
+#pragma unroll
+        for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+            const int j = j0 + threadIdx.y;
+
+#pragma unroll
+            for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+                const int i = i0 + threadIdx.x;
+
+                sum[(j0/nwarps) * (mmq_y/WARP_SIZE) + i0/WARP_SIZE] += tmp_last_tile[bidx*(mmq_x*mmq_y) + j*mmq_y + i];
+            }
+        }
+    }
+
+    if (!any_fixup) {
+        return;
+    }
+
+    dst += blockIdx.y*mmq_x*ne0 + blockIdx.x*mmq_y;
+
+    const int i_max = ne01 - blockIdx.x*mmq_y - 1;
+    const int j_max = ne11 - blockIdx.y*mmq_x - 1;
+
+#pragma unroll
+    for (int j0 = 0; j0 < mmq_x; j0 += nwarps) {
+        const int j = j0 + threadIdx.y;
+
+        if (j > j_max) {
+            return;
+        }
+
+#pragma unroll
+        for (int i0 = 0; i0 < mmq_y; i0 += WARP_SIZE) {
+            const int i = i0 + threadIdx.x;
+
+            if (need_check && i > i_max) {
+                continue;
+            }
+
+            dst[j*ne0 + i] += sum[(j0/nwarps) * (mmq_y/WARP_SIZE) + i0/WARP_SIZE];
+        }
+    }
+}
+
+struct mmq_args {
+    const char * x; const char * y; float * dst;
+    int64_t ne00; int64_t ne01; int64_t stride01;
+    int64_t ne10; int64_t ne11; int64_t stride11;
+    int64_t ne0;
+};
+
+template<ggml_type type>
+static int mmq_get_shmem(const int mmq_x, const int mmq_y, const int cc) {
+    const tile_x_sizes txs = mmq_get_dp4a_tile_x_sizes(type, mmq_y);
+    const int mmq_tile_x_k = mmq_get_mma_tile_x_k(type);
+    const int shmem_x = int8_mma_available(cc) ? mmq_y*mmq_tile_x_k*sizeof(int) : txs.qs*sizeof(int) + txs.dm*sizeof(half2) + txs.sc*sizeof(int);
+    const int shmem_y = mmq_x*sizeof(block_q8_1_mmq);
+    return shmem_x + GGML_PAD(shmem_y, MMQ_NWARPS*WARP_SIZE*sizeof(int));
+}
+
+template <ggml_type type, int mmq_x>
+static void launch_mul_mat_q(ggml_backend_cuda_context & ctx, const mmq_args & args, cudaStream_t stream) {
+    const int id = ggml_cuda_get_device();
+    const int cc = ggml_cuda_info().devices[id].cc;
+    const int nsm = ggml_cuda_info().devices[id].nsm;
+    const int mmq_y = get_mmq_y_host(cc);
+
+    const dim3 block_dims(WARP_SIZE, MMQ_NWARPS, 1);
+
+    const int shmem = mmq_get_shmem<type>(mmq_x, mmq_y, cc);
+
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+    static bool shmem_limit_raised[GGML_CUDA_MAX_DEVICES] = {false};
+    if (!shmem_limit_raised[id]) {
+        CUDA_CHECK(cudaFuncSetAttribute(mul_mat_q<type, mmq_x, MMQ_NWARPS, false>, cudaFuncAttributeMaxDynamicSharedMemorySize, shmem));
+        CUDA_CHECK(cudaFuncSetAttribute(mul_mat_q<type, mmq_x, MMQ_NWARPS, true>,  cudaFuncAttributeMaxDynamicSharedMemorySize, shmem));
+        shmem_limit_raised[id] = true;
+    }
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+
+    const int nty = (args.ne01 + mmq_y - 1) / mmq_y;
+    const int ntx = (args.ne11 + mmq_x - 1) / mmq_x;
+    const dim3 block_nums_xy_tiling(nty, ntx, 1);
+
+    const bool use_stream_k = cc >= CC_VOLTA && cc < CC_OFFSET_AMD;
+    if (!use_stream_k) {
+        if (args.ne01 % mmq_y == 0) {
+            constexpr bool need_check = false;
+            mul_mat_q<type, mmq_x, MMQ_NWARPS, need_check><<<block_nums_xy_tiling, block_dims, shmem, stream>>>
+                (args.x, args.y, args.dst, nullptr, args.ne00, args.ne01, args.stride01, args.ne10, args.ne11, args.stride11, args.ne0);
+        } else {
+            constexpr bool need_check = true;
+            mul_mat_q<type, mmq_x, MMQ_NWARPS, need_check><<<block_nums_xy_tiling, block_dims, shmem, stream>>>
+                (args.x, args.y, args.dst, nullptr, args.ne00, args.ne01, args.stride01, args.ne10, args.ne11, args.stride11, args.ne0);
+        }
+        return;
+    }
+
+    const dim3 block_nums_mmq(nsm, 1, 1);
+
+    ggml_cuda_pool & pool = ctx.pool();
+    ggml_cuda_pool_alloc<float> tmp_fixup(pool, block_nums_mmq.x * mmq_x*mmq_y);
+
+    if (args.ne01 % mmq_y == 0) {
+        constexpr bool need_check = false;
+
+        mul_mat_q<type, mmq_x, MMQ_NWARPS, need_check><<<block_nums_mmq, block_dims, shmem, stream>>>
+            (args.x, args.y, args.dst, tmp_fixup.ptr, args.ne00, args.ne01, args.stride01, args.ne10, args.ne11, args.stride11, args.ne0);
+
+        mul_mat_q_stream_k_fixup<type, mmq_x, MMQ_NWARPS, need_check><<<block_nums_xy_tiling, block_dims, 0, stream>>>
+            (args.dst, tmp_fixup.ptr, args.ne00, args.ne01, args.ne11, args.ne0, block_nums_mmq.x);
+    } else {
+        constexpr bool need_check = true;
+
+        mul_mat_q<type, mmq_x, MMQ_NWARPS, need_check><<<block_nums_mmq, block_dims, shmem, stream>>>
+            (args.x, args.y, args.dst, tmp_fixup.ptr, args.ne00, args.ne01, args.stride01, args.ne10, args.ne11, args.stride11, args.ne0);
+
+        mul_mat_q_stream_k_fixup<type, mmq_x, MMQ_NWARPS, need_check><<<block_nums_xy_tiling, block_dims, 0, stream>>>
+            (args.dst, tmp_fixup.ptr, args.ne00, args.ne01, args.ne11, args.ne0, block_nums_mmq.x);
+    }
+}
+
+template <ggml_type type>
+void mul_mat_q_case(ggml_backend_cuda_context & ctx, const mmq_args & args, cudaStream_t stream) {
+    const int id    = ggml_cuda_get_device();
+    const int nsm   = ggml_cuda_info().devices[id].nsm;
+    const int cc    = ggml_cuda_info().devices[id].cc;
+    const int smpbo = ggml_cuda_info().devices[id].smpbo;
+
+    const int mmq_x_max = get_mmq_x_max_host(cc);
+    const int mmq_y = get_mmq_y_host(cc);
+    const int block_num_y = (args.ne01 + mmq_y - 1) / mmq_y;
+    const bool use_stream_k = cc >= CC_VOLTA && cc < CC_OFFSET_AMD;
+
+    int mmq_x_best  = 0;
+    int nparts_best = INT_MAX;
+
+    for (int mmq_x = 8; mmq_x <= mmq_x_max && nparts_best > 1; mmq_x += 8) {
+        const int granularity = mmq_get_granularity_host(mmq_x, cc);
+
+        if (mmq_x % granularity != 0 || mmq_get_shmem<type>(mmq_x, mmq_y, cc) > smpbo) {
+            continue;
+        }
+
+        const int ntiles_x = (args.ne11 + mmq_x - 1) / mmq_x;
+        const int nwaves_xy_tiling = ntiles_x*block_num_y;
+        const int nparts = use_stream_k ? ntiles_x : nwaves_xy_tiling;
+
+        if (nparts < nparts_best) {
+            mmq_x_best  = mmq_x;
+            nparts_best = nparts;
+        }
+    }
+
+    switch (mmq_x_best) {
+        case   8:
+            launch_mul_mat_q<type,   8>(ctx, args, stream);
+            break;
+        case  16:
+            launch_mul_mat_q<type,  16>(ctx, args, stream);
+            break;
+        case  24:
+            launch_mul_mat_q<type,  24>(ctx, args, stream);
+            break;
+        case  32:
+            launch_mul_mat_q<type,  32>(ctx, args, stream);
+            break;
+        case  40:
+            launch_mul_mat_q<type,  40>(ctx, args, stream);
+            break;
+        case  48:
+            launch_mul_mat_q<type,  48>(ctx, args, stream);
+            break;
+        case  56:
+            launch_mul_mat_q<type,  56>(ctx, args, stream);
+            break;
+        case  64:
+            launch_mul_mat_q<type,  64>(ctx, args, stream);
+            break;
+        case  72:
+            launch_mul_mat_q<type,  72>(ctx, args, stream);
+            break;
+        case  80:
+            launch_mul_mat_q<type,  80>(ctx, args, stream);
+            break;
+        case  88:
+            launch_mul_mat_q<type,  88>(ctx, args, stream);
+            break;
+        case  96:
+            launch_mul_mat_q<type,  96>(ctx, args, stream);
+            break;
+        case 104:
+            launch_mul_mat_q<type, 104>(ctx, args, stream);
+            break;
+        case 112:
+            launch_mul_mat_q<type, 112>(ctx, args, stream);
+            break;
+        case 120:
+            launch_mul_mat_q<type, 120>(ctx, args, stream);
+            break;
+        case 128:
+            launch_mul_mat_q<type, 128>(ctx, args, stream);
+            break;
+        default:
+            fprintf(stderr, "mmq_x_best=%d\n", mmq_x_best);
+            GGML_ASSERT(false);
+            break;
+    }
+}
+
+#define DECL_MMQ_CASE(type)                                                        \
+    template void mul_mat_q_case<type>(ggml_backend_cuda_context & ctx, const mmq_args & args, cudaStream_t stream) \
+
+extern DECL_MMQ_CASE(GGML_TYPE_Q4_0);
+extern DECL_MMQ_CASE(GGML_TYPE_Q4_1);
+extern DECL_MMQ_CASE(GGML_TYPE_Q5_0);
+extern DECL_MMQ_CASE(GGML_TYPE_Q5_1);
+extern DECL_MMQ_CASE(GGML_TYPE_Q8_0);
+extern DECL_MMQ_CASE(GGML_TYPE_Q2_K);
+extern DECL_MMQ_CASE(GGML_TYPE_Q3_K);
+extern DECL_MMQ_CASE(GGML_TYPE_Q4_K);
+extern DECL_MMQ_CASE(GGML_TYPE_Q5_K);
+extern DECL_MMQ_CASE(GGML_TYPE_Q6_K);
+
+// -------------------------------------------------------------------------------------------------------------------------
+
+void ggml_cuda_op_mul_mat_q(
+    ggml_backend_cuda_context & ctx,
+    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
+    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
+    const int64_t src1_padded_row_size, cudaStream_t stream);
+
+bool ggml_cuda_should_use_mmq(enum ggml_type type, int cc, int64_t ne11);
diff --git a/ggml/src/ggml-cuda/mmvq.cu b/ggml/src/ggml-cuda/mmvq.cu
new file mode 100644 (file)
index 0000000..e8d1571
--- /dev/null
@@ -0,0 +1,419 @@
+#include "mmvq.cuh"
+#include "vecdotq.cuh"
+
+typedef float (*vec_dot_q_cuda_t)(const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs);
+
+static constexpr __device__ vec_dot_q_cuda_t get_vec_dot_q_cuda(ggml_type type) {
+    return type == GGML_TYPE_Q4_0 ? vec_dot_q4_0_q8_1 :
+        type == GGML_TYPE_Q4_1 ? vec_dot_q4_1_q8_1 :
+        type == GGML_TYPE_Q5_0 ? vec_dot_q5_0_q8_1 :
+        type == GGML_TYPE_Q5_1 ? vec_dot_q5_1_q8_1 :
+        type == GGML_TYPE_Q8_0 ? vec_dot_q8_0_q8_1 :
+        type == GGML_TYPE_Q2_K ? vec_dot_q2_K_q8_1 :
+        type == GGML_TYPE_Q3_K ? vec_dot_q3_K_q8_1 :
+        type == GGML_TYPE_Q4_K ? vec_dot_q4_K_q8_1 :
+        type == GGML_TYPE_Q5_K ? vec_dot_q5_K_q8_1 :
+        type == GGML_TYPE_Q6_K ? vec_dot_q6_K_q8_1 :
+        type == GGML_TYPE_IQ2_XXS ? vec_dot_iq2_xxs_q8_1 :
+        type == GGML_TYPE_IQ2_XS ? vec_dot_iq2_xs_q8_1 :
+        type == GGML_TYPE_IQ2_S ? vec_dot_iq2_s_q8_1 :
+        type == GGML_TYPE_IQ3_XXS ? vec_dot_iq3_xxs_q8_1 :
+        type == GGML_TYPE_IQ1_S ? vec_dot_iq1_s_q8_1 :
+        type == GGML_TYPE_IQ1_M ? vec_dot_iq1_m_q8_1 :
+        type == GGML_TYPE_IQ4_NL ? vec_dot_iq4_nl_q8_1 :
+        type == GGML_TYPE_IQ4_XS ? vec_dot_iq4_xs_q8_1 :
+        type == GGML_TYPE_IQ3_S ? vec_dot_iq3_s_q8_1 :
+        nullptr;
+}
+
+static constexpr __device__ int get_vdr_mmvq(ggml_type type) {
+    return type == GGML_TYPE_Q4_0 ? VDR_Q4_0_Q8_1_MMVQ :
+        type == GGML_TYPE_Q4_1 ? VDR_Q4_1_Q8_1_MMVQ :
+        type == GGML_TYPE_Q5_0 ? VDR_Q5_0_Q8_1_MMVQ :
+        type == GGML_TYPE_Q5_1 ? VDR_Q5_1_Q8_1_MMVQ :
+        type == GGML_TYPE_Q8_0 ? VDR_Q8_0_Q8_1_MMVQ :
+        type == GGML_TYPE_Q2_K ? VDR_Q2_K_Q8_1_MMVQ :
+        type == GGML_TYPE_Q3_K ? VDR_Q3_K_Q8_1_MMVQ :
+        type == GGML_TYPE_Q4_K ? VDR_Q4_K_Q8_1_MMVQ :
+        type == GGML_TYPE_Q5_K ? VDR_Q5_K_Q8_1_MMVQ :
+        type == GGML_TYPE_Q6_K ? VDR_Q6_K_Q8_1_MMVQ :
+        type == GGML_TYPE_IQ4_NL ? VDR_Q4_K_Q8_1_MMVQ :
+        1;
+}
+
+template <ggml_type type, int ncols_y>
+#if !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+// tell the compiler to use as many registers as it wants, see nwarps definition below
+__launch_bounds__((ncols_y <= 4 ? 4 : 2)*WARP_SIZE, 1)
+#endif // !(defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__))
+static __global__ void mul_mat_vec_q(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int nrows_dst) {
+
+    constexpr int qk  = ggml_cuda_type_traits<type>::qk;
+    constexpr int qi  = ggml_cuda_type_traits<type>::qi;
+    constexpr int vdr = get_vdr_mmvq(type);
+
+    constexpr vec_dot_q_cuda_t vec_dot_q_cuda = get_vec_dot_q_cuda(type);
+
+#if defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) && (defined(RDNA2) || defined(RDNA3))
+    constexpr int nwarps              = 1;
+    constexpr int rows_per_cuda_block = 1;
+#else
+    constexpr int nwarps              = ncols_y <= 4 ? 4 : 2;
+    constexpr int rows_per_cuda_block = ncols_y == 1 ? 1 : 2;
+#endif // defined(GGML_USE_HIPBLAS) && defined(__HIP_PLATFORM_AMD__) && !defined(RDNA2) && !defined(RDNA3)
+
+    const     int tid = WARP_SIZE*threadIdx.y + threadIdx.x;
+    const     int row0 = rows_per_cuda_block*blockIdx.x;
+    const     int blocks_per_row_x = ncols_x / qk;
+    const     int blocks_per_col_y = nrows_y / QK8_1;
+    constexpr int blocks_per_iter = vdr * nwarps*WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp[ncols_y][rows_per_cuda_block] = {0.0f};
+
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int kbx = tid / (qi/vdr); kbx < blocks_per_row_x; kbx += blocks_per_iter) {
+        const int kby = kbx * (qk/QK8_1); // y block index that aligns with kbx
+
+        // x block quant index when casting the quants to int
+        const int kqs = vdr * (tid % (qi/vdr));
+
+#pragma unroll
+        for (int j = 0; j < ncols_y; ++j) {
+#pragma unroll
+            for (int i = 0; i < rows_per_cuda_block; ++i) {
+                tmp[j][i] += vec_dot_q_cuda(vx, &y[j*blocks_per_col_y + kby], (row0 + i)*blocks_per_row_x + kbx, kqs);
+            }
+        }
+    }
+
+    __shared__ float tmp_shared[nwarps-1 > 0 ? nwarps-1 : 1][ncols_y][rows_per_cuda_block][WARP_SIZE];
+    if (threadIdx.y > 0) {
+#pragma unroll
+        for (int j = 0; j < ncols_y; ++j) {
+#pragma unroll
+            for (int i = 0; i < rows_per_cuda_block; ++i) {
+                tmp_shared[threadIdx.y-1][j][i][threadIdx.x] = tmp[j][i];
+            }
+        }
+    }
+    __syncthreads();
+    if (threadIdx.y > 0) {
+        return;
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int j = 0; j < ncols_y; ++j) {
+#pragma unroll
+        for (int i = 0; i < rows_per_cuda_block; ++i) {
+#pragma unroll
+            for (int l = 0; l < nwarps-1; ++l) {
+                tmp[j][i] += tmp_shared[l][j][i][threadIdx.x];
+            }
+            tmp[j][i] = warp_reduce_sum(tmp[j][i]);
+        }
+
+        if (threadIdx.x < rows_per_cuda_block && (rows_per_cuda_block == 1 || row0 + threadIdx.x < nrows_dst)) {
+            dst[j*nrows_dst + row0 + threadIdx.x] = tmp[j][threadIdx.x];
+        }
+    }
+}
+
+template <ggml_type type>
+static void mul_mat_vec_q_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    GGML_ASSERT(ncols_x % ggml_blck_size(type) == 0);
+    GGML_ASSERT(ncols_y <= MMVQ_MAX_BATCH_SIZE);
+
+    int id = ggml_cuda_get_device();
+
+    int64_t nwarps = 1;
+    int64_t rows_per_cuda_block = 1;
+
+    if (ggml_cuda_info().devices[id].cc < CC_RDNA2) { // NVIDIA and AMD older than RDNA2
+        switch(ncols_y) {
+            case 1:
+                nwarps = 4;
+                rows_per_cuda_block = 1;
+                break;
+            case 2:
+            case 3:
+            case 4:
+                nwarps = 4;
+                rows_per_cuda_block = 2;
+                break;
+            case 5:
+            case 6:
+            case 7:
+            case 8:
+                nwarps = 2;
+                rows_per_cuda_block = 2;
+                break;
+            default:
+                GGML_ASSERT(false);
+                break;
+        }
+    }
+    const int64_t nblocks = (nrows_x + rows_per_cuda_block - 1) / rows_per_cuda_block;
+    const dim3 block_nums(nblocks, 1, 1);
+    const dim3 block_dims(WARP_SIZE, nwarps, 1);
+
+    switch (ncols_y) {
+        case 1:
+            mul_mat_vec_q<type, 1><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
+            break;
+        case 2:
+            mul_mat_vec_q<type, 2><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
+            break;
+        case 3:
+            mul_mat_vec_q<type, 3><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
+            break;
+        case 4:
+            mul_mat_vec_q<type, 4><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
+            break;
+        case 5:
+            mul_mat_vec_q<type, 5><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
+            break;
+        case 6:
+            mul_mat_vec_q<type, 6><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
+            break;
+        case 7:
+            mul_mat_vec_q<type, 7><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
+            break;
+        case 8:
+            mul_mat_vec_q<type, 8><<<block_nums, block_dims, 0, stream>>>(vx, vy, dst, ncols_x, nrows_x, nrows_y, nrows_dst);
+            break;
+        default:
+            GGML_ASSERT(false);
+            break;
+    }
+}
+
+static void mul_mat_vec_q4_0_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_Q4_0>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_q4_1_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_Q4_1>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_q5_0_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_Q5_0>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_q5_1_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_Q5_1>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_q8_0_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_Q8_0>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_q2_K_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_Q2_K>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_q3_K_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_Q3_K>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_q4_K_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_Q4_K>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_q5_K_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_Q5_K>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_q6_K_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_Q6_K>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_iq2_xxs_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_IQ2_XXS>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_iq2_xs_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_IQ2_XS>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_iq2_s_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_IQ2_S>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_iq3_xxs_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_IQ3_XXS>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_iq1_s_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_IQ1_S>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_iq1_m_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_IQ1_M>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_iq4_nl_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_IQ4_NL>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_iq4_xs_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_IQ4_XS>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+static void mul_mat_vec_iq3_s_q8_1_cuda(
+    const void * vx, const void * vy, float * dst,
+    const int ncols_x, const int nrows_x, const int nrows_y, const int ncols_y, const int nrows_dst, cudaStream_t stream) {
+
+    mul_mat_vec_q_cuda<GGML_TYPE_IQ3_S>(vx, vy, dst, ncols_x, nrows_x, nrows_y, ncols_y, nrows_dst, stream);
+}
+
+void ggml_cuda_op_mul_mat_vec_q(
+    ggml_backend_cuda_context & ctx,
+    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
+    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
+    const int64_t src1_padded_row_size, cudaStream_t stream) {
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t row_diff = row_high - row_low;
+
+    const int64_t ne10 = src1->ne[0];
+    GGML_ASSERT(ne10 % QK8_1 == 0);
+
+    const int64_t ne0 = dst->ne[0];
+
+    int id = ggml_cuda_get_device();
+
+    // the main device has a larger memory buffer to hold the results from all GPUs
+    // nrows_dst == nrows of the matrix that the kernel writes into
+    const int64_t nrows_dst = id == ctx.device ? ne0 : row_diff;
+
+    switch (src0->type) {
+        case GGML_TYPE_Q4_0:
+            mul_mat_vec_q4_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q4_1:
+            mul_mat_vec_q4_1_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q5_0:
+            mul_mat_vec_q5_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q5_1:
+            mul_mat_vec_q5_1_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q8_0:
+            mul_mat_vec_q8_0_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q2_K:
+            mul_mat_vec_q2_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q3_K:
+            mul_mat_vec_q3_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q4_K:
+            mul_mat_vec_q4_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q5_K:
+            mul_mat_vec_q5_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q6_K:
+            mul_mat_vec_q6_K_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_IQ2_XXS:
+            mul_mat_vec_iq2_xxs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_IQ2_XS:
+            mul_mat_vec_iq2_xs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_IQ2_S:
+            mul_mat_vec_iq2_s_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_IQ3_XXS:
+            mul_mat_vec_iq3_xxs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_IQ1_S:
+            mul_mat_vec_iq1_s_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_IQ1_M:
+            mul_mat_vec_iq1_m_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_IQ4_NL:
+            mul_mat_vec_iq4_nl_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_IQ4_XS:
+            mul_mat_vec_iq4_xs_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        case GGML_TYPE_IQ3_S:
+            mul_mat_vec_iq3_s_q8_1_cuda(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_padded_row_size, src1_ncols, nrows_dst, stream);
+            break;
+        default:
+            GGML_ASSERT(false);
+            break;
+    }
+
+    GGML_UNUSED(src1);
+    GGML_UNUSED(dst);
+    GGML_UNUSED(src1_ddf_i);
+    GGML_UNUSED(src1_ncols);
+    GGML_UNUSED(src1_padded_row_size);
+}
diff --git a/ggml/src/ggml-cuda/mmvq.cuh b/ggml/src/ggml-cuda/mmvq.cuh
new file mode 100644 (file)
index 0000000..d9e42fd
--- /dev/null
@@ -0,0 +1,9 @@
+#include "common.cuh"
+
+#define MMVQ_MAX_BATCH_SIZE 8 // Max. batch size for which to use MMVQ kernels.
+
+void ggml_cuda_op_mul_mat_vec_q(
+    ggml_backend_cuda_context & ctx,
+    const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, const char * src0_dd_i, const float * src1_ddf_i,
+    const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols,
+    const int64_t src1_padded_row_size, cudaStream_t stream);
diff --git a/ggml/src/ggml-cuda/norm.cu b/ggml/src/ggml-cuda/norm.cu
new file mode 100644 (file)
index 0000000..30866d5
--- /dev/null
@@ -0,0 +1,221 @@
+#include "norm.cuh"
+
+template <int block_size>
+static __global__ void norm_f32(const float * x, float * dst, const int ncols, const float eps) {
+    const int row = blockIdx.x*blockDim.y + threadIdx.y;
+    const int tid = threadIdx.x;
+
+    float2 mean_var = make_float2(0.f, 0.f);
+
+    for (int col = tid; col < ncols; col += block_size) {
+        const float xi = x[row*ncols + col];
+        mean_var.x += xi;
+        mean_var.y += xi * xi;
+    }
+
+    // sum up partial sums
+    mean_var = warp_reduce_sum(mean_var);
+    if (block_size > WARP_SIZE) {
+        __shared__ float2 s_sum[32];
+        int warp_id = threadIdx.x / WARP_SIZE;
+        int lane_id = threadIdx.x % WARP_SIZE;
+        if (lane_id == 0) {
+            s_sum[warp_id] = mean_var;
+        }
+        __syncthreads();
+        mean_var = s_sum[lane_id];
+        mean_var = warp_reduce_sum(mean_var);
+    }
+
+    const float mean = mean_var.x / ncols;
+    const float var = mean_var.y / ncols - mean * mean;
+    const float inv_std = rsqrtf(var + eps);
+
+    for (int col = tid; col < ncols; col += block_size) {
+        dst[row*ncols + col] = (x[row*ncols + col] - mean) * inv_std;
+    }
+}
+
+template <int block_size>
+static __global__ void group_norm_f32(const float * x, float * dst, const int group_size, const int ne_elements, const float eps) {
+    // blockIdx.x: num_groups idx
+    // threadIdx.x: block_size idx
+    int start = blockIdx.x * group_size;
+    int end = start + group_size;
+
+    start += threadIdx.x;
+
+    if (end >= ne_elements) {
+        end = ne_elements;
+    }
+
+    float tmp = 0.0f; // partial sum for thread in warp
+
+    for (int j = start; j < end; j += block_size) {
+        tmp += x[j];
+    }
+
+    tmp = warp_reduce_sum(tmp);
+    if (block_size > WARP_SIZE) {
+        __shared__ float s_sum[32];
+        int warp_id = threadIdx.x / WARP_SIZE;
+        int lane_id = threadIdx.x % WARP_SIZE;
+        if (lane_id == 0) {
+            s_sum[warp_id] = tmp;
+        }
+        __syncthreads();
+        tmp = s_sum[lane_id];
+        tmp = warp_reduce_sum(tmp);
+    }
+
+    float mean = tmp / group_size;
+    tmp = 0.0f;
+
+    for (int j = start; j < end; j += block_size) {
+        float xi = x[j] - mean;
+        dst[j] = xi;
+        tmp += xi * xi;
+    }
+
+    tmp = warp_reduce_sum(tmp);
+    if (block_size > WARP_SIZE) {
+        __shared__ float s_sum[32];
+        int warp_id = threadIdx.x / WARP_SIZE;
+        int lane_id = threadIdx.x % WARP_SIZE;
+        if (lane_id == 0) {
+            s_sum[warp_id] = tmp;
+        }
+        __syncthreads();
+        tmp = s_sum[lane_id];
+        tmp = warp_reduce_sum(tmp);
+    }
+
+    float variance = tmp / group_size;
+    float scale = rsqrtf(variance + eps);
+    for (int j = start; j < end; j += block_size) {
+        dst[j] *= scale;
+    }
+}
+
+template <int block_size>
+static __global__ void rms_norm_f32(const float * x, float * dst, const int ncols, const float eps) {
+    const int row = blockIdx.x*blockDim.y + threadIdx.y;
+    const int tid = threadIdx.x;
+
+    float tmp = 0.0f; // partial sum for thread in warp
+
+    for (int col = tid; col < ncols; col += block_size) {
+        const float xi = x[row*ncols + col];
+        tmp += xi * xi;
+    }
+
+    // sum up partial sums
+    tmp = warp_reduce_sum(tmp);
+    if (block_size > WARP_SIZE) {
+        __shared__ float s_sum[32];
+        int warp_id = threadIdx.x / WARP_SIZE;
+        int lane_id = threadIdx.x % WARP_SIZE;
+        if (lane_id == 0) {
+            s_sum[warp_id] = tmp;
+        }
+        __syncthreads();
+        tmp = s_sum[lane_id];
+        tmp = warp_reduce_sum(tmp);
+    }
+
+    const float mean = tmp / ncols;
+    const float scale = rsqrtf(mean + eps);
+
+    for (int col = tid; col < ncols; col += block_size) {
+        dst[row*ncols + col] = scale * x[row*ncols + col];
+    }
+}
+
+static void norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float eps, cudaStream_t stream) {
+    GGML_ASSERT(ncols % WARP_SIZE == 0);
+    if (ncols < 1024) {
+        const dim3 block_dims(WARP_SIZE, 1, 1);
+        norm_f32<WARP_SIZE><<<nrows, block_dims, 0, stream>>>(x, dst, ncols, eps);
+    } else {
+        const dim3 block_dims(1024, 1, 1);
+        norm_f32<1024><<<nrows, block_dims, 0, stream>>>(x, dst, ncols, eps);
+    }
+}
+
+static void group_norm_f32_cuda(const float * x, float * dst, const int num_groups, const int group_size, const int ne_elements, cudaStream_t stream) {
+    static const float eps = 1e-6f;
+    if (group_size < 1024) {
+        const dim3 block_dims(WARP_SIZE, 1, 1);
+        group_norm_f32<WARP_SIZE><<<num_groups, block_dims, 0, stream>>>(x, dst, group_size, ne_elements, eps);
+    } else {
+        const dim3 block_dims(1024, 1, 1);
+        group_norm_f32<1024><<<num_groups, block_dims, 0, stream>>>(x, dst, group_size, ne_elements, eps);
+    }
+}
+
+static void rms_norm_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, const float eps, cudaStream_t stream) {
+    GGML_ASSERT(ncols % WARP_SIZE == 0);
+    if (ncols < 1024) {
+        const dim3 block_dims(WARP_SIZE, 1, 1);
+        rms_norm_f32<WARP_SIZE><<<nrows, block_dims, 0, stream>>>(x, dst, ncols, eps);
+    } else {
+        const dim3 block_dims(1024, 1, 1);
+        rms_norm_f32<1024><<<nrows, block_dims, 0, stream>>>(x, dst, ncols, eps);
+    }
+}
+
+void ggml_cuda_op_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t nrows = ggml_nrows(src0);
+
+    float eps;
+    memcpy(&eps, dst->op_params, sizeof(float));
+
+    norm_f32_cuda(src0_d, dst_d, ne00, nrows, eps, stream);
+}
+
+void ggml_cuda_op_group_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    int num_groups = dst->op_params[0];
+    int group_size = src0->ne[0] * src0->ne[1] * ((src0->ne[2] + num_groups - 1) / num_groups);
+    group_norm_f32_cuda(src0_d, dst_d, num_groups * src0->ne[3], group_size, ggml_nelements(src0), stream);
+}
+
+void ggml_cuda_op_rms_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t nrows = ggml_nrows(src0);
+
+    float eps;
+    memcpy(&eps, dst->op_params, sizeof(float));
+
+    rms_norm_f32_cuda(src0_d, dst_d, ne00, nrows, eps, stream);
+}
diff --git a/ggml/src/ggml-cuda/norm.cuh b/ggml/src/ggml-cuda/norm.cuh
new file mode 100644 (file)
index 0000000..431a8f7
--- /dev/null
@@ -0,0 +1,7 @@
+#include "common.cuh"
+
+void ggml_cuda_op_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_group_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_rms_norm(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/pad.cu b/ggml/src/ggml-cuda/pad.cu
new file mode 100644 (file)
index 0000000..aba539e
--- /dev/null
@@ -0,0 +1,49 @@
+#include "pad.cuh"
+
+static __global__ void pad_f32(const float * x, float * dst, const int ne0, const int ne00, const int ne01, const int ne02, const int ne03) {
+    // blockIdx.z: idx of ne2*ne3, aka ne02*ne03
+    // blockIdx.y: idx of ne1
+    // blockIDx.x: idx of ne0 / BLOCK_SIZE
+    int nidx = threadIdx.x + blockIdx.x * blockDim.x;
+    if (nidx >= ne0) {
+        return;
+    }
+
+    // operation
+    int offset_dst =
+        nidx +
+        blockIdx.y * ne0 +
+        blockIdx.z * ne0 * gridDim.y;
+    if (nidx < ne00 && blockIdx.y < ne01 && blockIdx.z < ne02*ne03) {
+        int offset_src =
+            nidx +
+            blockIdx.y * ne00 +
+            blockIdx.z * ne00 * ne01;
+        dst[offset_dst] = x[offset_src];
+    } else {
+        dst[offset_dst] = 0.0f;
+    }
+}
+
+static void pad_f32_cuda(const float * x, float * dst,
+    const int ne00, const int ne01, const int ne02, const int ne03,
+    const int ne0, const int ne1, const int ne2, const int ne3, cudaStream_t stream) {
+    int num_blocks = (ne0 + CUDA_PAD_BLOCK_SIZE - 1) / CUDA_PAD_BLOCK_SIZE;
+    dim3 gridDim(num_blocks, ne1, ne2*ne3);
+    pad_f32<<<gridDim, CUDA_PAD_BLOCK_SIZE, 0, stream>>>(x, dst, ne0, ne00, ne01, ne02, ne03);
+}
+
+void ggml_cuda_op_pad(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT(dst->type == GGML_TYPE_F32);
+    GGML_ASSERT(src0->ne[3] == 1 && dst->ne[3] == 1); // just 3D tensors
+
+    pad_f32_cuda(src0_d, dst_d,
+        src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3],
+        dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], stream);
+}
diff --git a/ggml/src/ggml-cuda/pad.cuh b/ggml/src/ggml-cuda/pad.cuh
new file mode 100644 (file)
index 0000000..8fd386b
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_PAD_BLOCK_SIZE 256
+
+void ggml_cuda_op_pad(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/pool2d.cu b/ggml/src/ggml-cuda/pool2d.cu
new file mode 100644 (file)
index 0000000..c6d51e4
--- /dev/null
@@ -0,0 +1,94 @@
+#include "pool2d.cuh"
+
+template <typename Ti, typename To>
+static  __global__ void pool2d_nchw_kernel(
+        const int ih, const int iw, const int oh, const int ow,
+        const int kh, const int kw, const int sh, const int sw,
+        const int ph, const int pw, const int parallel_elements,
+        const Ti* src, To* dst, const enum ggml_op_pool op) {
+    int idx = threadIdx.x + blockIdx.x * blockDim.x;
+    if (idx >= parallel_elements) {
+        return;
+    }
+
+    const int I_HW = ih * iw;
+    const int O_HW = oh * ow;
+    const int nc = idx / O_HW;
+    const int cur_oh = idx % O_HW / ow;
+    const int cur_ow = idx % O_HW % ow;
+    const Ti* i_ptr = src + nc * I_HW;
+    To* o_ptr = dst + nc * O_HW;
+    const int start_h = cur_oh * sh - ph;
+    const int bh = max(0, start_h);
+    const int eh = min(ih, start_h + kh);
+    const int start_w = cur_ow * sw - pw;
+    const int bw = max(0, start_w);
+    const int ew = min(iw, start_w + kw);
+    const To scale = 1. / (kh * kw);
+    To res = 0;
+
+    switch (op) {
+        case GGML_OP_POOL_AVG: res = 0; break;
+        case GGML_OP_POOL_MAX: res = -FLT_MAX; break;
+        default: assert(false);
+    }
+
+    for (int i = bh; i < eh; i += 1) {
+        for (int j = bw; j < ew; j += 1) {
+#if __CUDA_ARCH__ >= 350
+            Ti cur = __ldg(i_ptr + i * iw + j);
+#else
+            Ti cur = i_ptr[i * iw + j];
+#endif
+            switch (op) {
+                case GGML_OP_POOL_AVG: res += cur * scale; break;
+                case GGML_OP_POOL_MAX: res = max(res, (To)cur); break;
+                default: assert(false);
+            }
+        }
+    }
+    o_ptr[cur_oh * ow + cur_ow] = res;
+}
+
+static void pool2d_nchw_kernel_f32_f32_cuda(
+        const int ih, const int iw, const int oh, const int ow,
+        const int kh, const int kw, const int sh, const int sw,
+        const int ph, const int pw, const int parallel_elements,
+        const float * src, float * dst, const enum ggml_op_pool op,
+        cudaStream_t stream) {
+
+    const int num_blocks = (parallel_elements + CUDA_POOL2D_BLOCK_SIZE - 1) / CUDA_POOL2D_BLOCK_SIZE;
+    dim3 block_nums(num_blocks);
+    pool2d_nchw_kernel<<<block_nums, CUDA_POOL2D_BLOCK_SIZE, 0, stream>>>(ih, iw, oh, ow, kh, kw, sh, sw, ph, pw, parallel_elements, src, dst, op);
+}
+
+void ggml_cuda_op_pool2d(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    const int32_t * opts = (const int32_t *)dst->op_params;
+    enum ggml_op_pool op = static_cast<ggml_op_pool>(opts[0]);
+    const int k0 = opts[1];
+    const int k1 = opts[2];
+    const int s0 = opts[3];
+    const int s1 = opts[4];
+    const int p0 = opts[5];
+    const int p1 = opts[6];
+
+    const int64_t IH = src0->ne[1];
+    const int64_t IW = src0->ne[0];
+
+    const int64_t N = dst->ne[3];
+    const int64_t OC = dst->ne[2];
+    const int64_t OH = dst->ne[1];
+    const int64_t OW = dst->ne[0];
+
+    const int parallel_elements = N * OC * OH * OW;
+
+    pool2d_nchw_kernel_f32_f32_cuda(IH, IW, OH, OW, k1, k0, s1, s0, p1, p0, parallel_elements, src0_d, dst_d, op, stream);
+}
diff --git a/ggml/src/ggml-cuda/pool2d.cuh b/ggml/src/ggml-cuda/pool2d.cuh
new file mode 100644 (file)
index 0000000..7841292
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_POOL2D_BLOCK_SIZE 256
+
+void ggml_cuda_op_pool2d(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/quantize.cu b/ggml/src/ggml-cuda/quantize.cu
new file mode 100644 (file)
index 0000000..b467868
--- /dev/null
@@ -0,0 +1,112 @@
+#include "quantize.cuh"
+#include <cstdint>
+
+static __global__ void quantize_q8_1(const float * __restrict__ x, void * __restrict__ vy, const int64_t kx, const int64_t kx0_padded) {
+    const int64_t ix0 = (int64_t)blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (ix0 >= kx0_padded) {
+        return;
+    }
+
+    const int64_t ix1 = blockIdx.y;
+
+    const int64_t i_padded = ix1*kx0_padded + ix0;
+
+    block_q8_1 * y = (block_q8_1 *) vy;
+
+    const int64_t ib = i_padded / QK8_1; // block index
+    const int64_t iqs = i_padded % QK8_1; // quant index
+
+    const float xi = ix0 < kx ? x[ix1*kx + ix0] : 0.0f;
+    float amax = fabsf(xi);
+    float sum = xi;
+
+    amax = warp_reduce_max(amax);
+    sum = warp_reduce_sum(sum);
+
+    const float d = amax / 127;
+    const int8_t q = amax == 0.0f ? 0 : roundf(xi / d);
+
+    y[ib].qs[iqs] = q;
+
+    if (iqs > 0) {
+        return;
+    }
+
+    reinterpret_cast<half&>(y[ib].ds.x) = d;
+    reinterpret_cast<half&>(y[ib].ds.y) = sum;
+}
+
+template <bool need_sum>
+static __global__ void quantize_mmq_q8_1(
+    const float * __restrict__ x, void * __restrict__ vy, const int64_t kx0, const int64_t kx1, const int64_t kx0_padded) {
+
+    const int64_t ix0 = (int64_t)blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (ix0 >= kx0_padded) {
+        return;
+    }
+
+    const int64_t ix1 = kx1*blockIdx.z + blockIdx.y;
+
+    block_q8_1_mmq * y = (block_q8_1_mmq *) vy;
+
+    const int64_t ib0 = blockIdx.z*(gridDim.y*gridDim.x*blockDim.x/(4*QK8_1)); // first block of channel
+    const int64_t ib  = ib0 + (ix0 / (4*QK8_1))*kx1 + blockIdx.y;              // block index in channel
+    const int64_t iqs = ix0 % (4*QK8_1);                                       // quant index in block
+
+    const float xi = ix0 < kx0 ? x[ix1*kx0 + ix0] : 0.0f;
+    float amax = fabsf(xi);
+
+    amax = warp_reduce_max(amax);
+
+    float sum;
+    if (need_sum) {
+        sum = warp_reduce_sum(xi);
+    }
+
+    const float d = amax / 127;
+    const int8_t q = amax == 0.0f ? 0 : roundf(xi / d);
+
+    y[ib].qs[iqs] = q;
+
+    if (iqs % QK8_1 != 0) {
+        return;
+    }
+
+    if (need_sum) {
+        y[ib].ds[iqs/QK8_1] = make_half2(d, sum);
+    } else {
+        ((float *) y[ib].ds)[iqs/QK8_1] = d;
+    }
+}
+
+void quantize_row_q8_1_cuda(
+    const float * x, void * vy, const int64_t kx0, const int64_t kx1, const int64_t channels,
+    const int64_t kx0_padded, const ggml_type type_x, cudaStream_t stream) {
+
+    GGML_ASSERT(kx0_padded % QK8_1 == 0);
+
+    const int64_t block_num_x = (kx0_padded + CUDA_QUANTIZE_BLOCK_SIZE - 1) / CUDA_QUANTIZE_BLOCK_SIZE;
+    const dim3 num_blocks(block_num_x, kx1*channels, 1);
+    const dim3 block_size(CUDA_QUANTIZE_BLOCK_SIZE, 1, 1);
+    quantize_q8_1<<<num_blocks, block_size, 0, stream>>>(x, vy, kx0, kx0_padded);
+
+    GGML_UNUSED(type_x);
+}
+
+void quantize_mmq_q8_1_cuda(
+    const float * x, void * vy, const int64_t kx0, const int64_t kx1, const int64_t channels,
+    const int64_t kx0_padded, const ggml_type type_x, cudaStream_t stream) {
+
+    GGML_ASSERT(kx0_padded % (4*QK8_1) == 0);
+
+    const int64_t block_num_x = (kx0_padded + CUDA_QUANTIZE_BLOCK_SIZE - 1) / CUDA_QUANTIZE_BLOCK_SIZE;
+    const dim3 num_blocks(block_num_x, kx1, channels);
+    const dim3 block_size(CUDA_QUANTIZE_BLOCK_SIZE, 1, 1);
+    if (mmq_need_sum(type_x)) {
+        quantize_mmq_q8_1<true><<<num_blocks, block_size, 0, stream>>>(x, vy, kx0, kx1, kx0_padded);
+    } else {
+        quantize_mmq_q8_1<false><<<num_blocks, block_size, 0, stream>>>(x, vy, kx0, kx1, kx0_padded);
+    }
+}
diff --git a/ggml/src/ggml-cuda/quantize.cuh b/ggml/src/ggml-cuda/quantize.cuh
new file mode 100644 (file)
index 0000000..486c936
--- /dev/null
@@ -0,0 +1,20 @@
+#pragma once
+
+#include "common.cuh"
+#include "mmq.cuh"
+
+#include <cstdint>
+
+#define CUDA_QUANTIZE_BLOCK_SIZE 256
+
+typedef void (*quantize_cuda_t)(
+    const float * x, void * vy, const int64_t kx0, const int64_t kx1, const int64_t channels, const int64_t kx0_padded,
+    const ggml_type type_x, cudaStream_t stream);
+
+void quantize_row_q8_1_cuda(
+    const float * x, void * vy, const int64_t kx0, const int64_t kx1, const int64_t channels, const int64_t kx0_padded,
+    const ggml_type type_x, cudaStream_t stream);
+
+void quantize_mmq_q8_1_cuda(
+    const float * x, void * vy, const int64_t kx0, const int64_t kx1, const int64_t channels, const int64_t kx0_padded,
+    const ggml_type type_x, cudaStream_t stream);
diff --git a/ggml/src/ggml-cuda/rope.cu b/ggml/src/ggml-cuda/rope.cu
new file mode 100644 (file)
index 0000000..596fb7c
--- /dev/null
@@ -0,0 +1,271 @@
+#include "rope.cuh"
+
+struct rope_corr_dims {
+    float v[2];
+};
+
+static __device__ float rope_yarn_ramp(const float low, const float high, const int i0) {
+    const float y = (i0 / 2 - low) / max(0.001f, high - low);
+    return 1.0f - min(1.0f, max(0.0f, y));
+}
+
+// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn
+// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng.
+static __device__ void rope_yarn(
+    float theta_extrap, float freq_scale, rope_corr_dims corr_dims, int64_t i0, float ext_factor, float mscale,
+    float * cos_theta, float * sin_theta) {
+    // Get n-d rotational scaling corrected for extrapolation
+    float theta_interp = freq_scale * theta_extrap;
+    float theta = theta_interp;
+    if (ext_factor != 0.0f) {
+        float ramp_mix = rope_yarn_ramp(corr_dims.v[0], corr_dims.v[1], i0) * ext_factor;
+        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;
+
+        // Get n-d magnitude scaling corrected for interpolation
+        mscale *= 1.0f + 0.1f * logf(1.0f / freq_scale);
+    }
+    *cos_theta = cosf(theta) * mscale;
+    *sin_theta = sinf(theta) * mscale;
+}
+
+template<typename T, bool has_ff>
+static __global__ void rope_norm(
+    const T * x, T * dst, int ne0, int n_dims, const int32_t * pos, float freq_scale, int p_delta_rows,
+    float ext_factor, float attn_factor, rope_corr_dims corr_dims, float theta_scale, const float * freq_factors) {
+    const int i0 = 2*(blockDim.y*blockIdx.y + threadIdx.y);
+
+    if (i0 >= ne0) {
+        return;
+    }
+
+    const int row = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i0 >= n_dims) {
+        const int i = row*ne0 + i0;
+
+        dst[i + 0] = x[i + 0];
+        dst[i + 1] = x[i + 1];
+
+        return;
+    }
+
+    const int i  = row*ne0 + i0;
+    const int i2 = row/p_delta_rows;
+
+    const float theta_base = pos[i2]*powf(theta_scale, i0/2.0f);
+
+    const float freq_factor = has_ff ? freq_factors[i0/2] : 1.0f;
+
+    float cos_theta;
+    float sin_theta;
+
+    rope_yarn(theta_base/freq_factor, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta);
+
+    const float x0 = x[i + 0];
+    const float x1 = x[i + 1];
+
+    dst[i + 0] = x0*cos_theta - x1*sin_theta;
+    dst[i + 1] = x0*sin_theta + x1*cos_theta;
+}
+
+template<typename T, bool has_ff>
+static __global__ void rope_neox(
+    const T * x, T * dst, int ne0, int n_dims, const int32_t * pos, float freq_scale, int p_delta_rows,
+    float ext_factor, float attn_factor, rope_corr_dims corr_dims, float theta_scale, const float * freq_factors) {
+    const int i0 = 2*(blockDim.y*blockIdx.y + threadIdx.y);
+
+    if (i0 >= ne0) {
+        return;
+    }
+
+    const int row = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i0 >= n_dims) {
+        const int i = row*ne0 + i0;
+
+        dst[i + 0] = x[i + 0];
+        dst[i + 1] = x[i + 1];
+
+        return;
+    }
+
+    const int i  = row*ne0 + i0/2;
+    const int i2 = row/p_delta_rows;
+
+    const float theta_base = pos[i2]*powf(theta_scale, i0/2.0f);
+
+    const float freq_factor = has_ff ? freq_factors[i0/2] : 1.0f;
+
+    float cos_theta;
+    float sin_theta;
+
+    rope_yarn(theta_base/freq_factor, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta);
+
+    const float x0 = x[i + 0];
+    const float x1 = x[i + n_dims/2];
+
+    dst[i + 0]        = x0*cos_theta - x1*sin_theta;
+    dst[i + n_dims/2] = x0*sin_theta + x1*cos_theta;
+}
+
+template<typename T>
+static void rope_norm_cuda(
+    const T * x, T * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
+    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream) {
+    GGML_ASSERT(ne0 % 2 == 0);
+    const dim3 block_dims(1, CUDA_ROPE_BLOCK_SIZE, 1);
+    const int n_blocks_x = (ne0 + 2*CUDA_ROPE_BLOCK_SIZE - 1) / (2*CUDA_ROPE_BLOCK_SIZE);
+    const dim3 block_nums(nr, n_blocks_x, 1);
+
+    const float theta_scale = powf(freq_base, -2.0f/n_dims);
+
+    if (freq_factors == nullptr) {
+        rope_norm<T, false><<<block_nums, block_dims, 0, stream>>>(
+                x, dst, ne0, n_dims, pos, freq_scale, p_delta_rows, ext_factor, attn_factor, corr_dims,
+                theta_scale, freq_factors
+                );
+    } else {
+        rope_norm<T, true><<<block_nums, block_dims, 0, stream>>>(
+                x, dst, ne0, n_dims, pos, freq_scale, p_delta_rows, ext_factor, attn_factor, corr_dims,
+                theta_scale, freq_factors
+                );
+    }
+}
+
+template<typename T>
+static void rope_neox_cuda(
+    const T * x, T * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
+    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream) {
+    GGML_ASSERT(ne0 % 2 == 0);
+    const dim3 block_dims(1, CUDA_ROPE_BLOCK_SIZE, 1);
+    const int n_blocks_x = (ne0 + 2*CUDA_ROPE_BLOCK_SIZE - 1) / (2*CUDA_ROPE_BLOCK_SIZE);
+    const dim3 block_nums(nr, n_blocks_x, 1);
+
+    const float theta_scale = powf(freq_base, -2.0f/n_dims);
+
+    if (freq_factors == nullptr) {
+        rope_neox<T, false><<<block_nums, block_dims, 0, stream>>>(
+                x, dst, ne0, n_dims, pos, freq_scale, p_delta_rows, ext_factor, attn_factor, corr_dims,
+                theta_scale, freq_factors
+                );
+    } else {
+        rope_neox<T, true><<<block_nums, block_dims, 0, stream>>>(
+                x, dst, ne0, n_dims, pos, freq_scale, p_delta_rows, ext_factor, attn_factor, corr_dims,
+                theta_scale, freq_factors
+                );
+    }
+}
+
+static void rope_norm_cuda_f16(
+    const half * x, half * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
+    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream) {
+
+    rope_norm_cuda<half>(x, dst, ne0, n_dims, nr, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, freq_factors, stream);
+}
+
+static void rope_norm_cuda_f32(
+    const float * x, float * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
+    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream) {
+
+    rope_norm_cuda<float>(x, dst, ne0, n_dims, nr, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, freq_factors, stream);
+}
+
+static void rope_neox_cuda_f16(
+    const half * x, half * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
+    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream) {
+
+    rope_neox_cuda<half>(x, dst, ne0, n_dims, nr, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, freq_factors, stream);
+}
+
+static void rope_neox_cuda_f32(
+    const float * x, float * dst, int ne0, int n_dims, int nr, const int32_t * pos, float freq_scale, int p_delta_rows,
+    float freq_base, float ext_factor, float attn_factor, rope_corr_dims corr_dims, const float * freq_factors, cudaStream_t stream
+) {
+
+    rope_neox_cuda<float>(x, dst, ne0, n_dims, nr, pos, freq_scale, p_delta_rows, freq_base, ext_factor, attn_factor, corr_dims, freq_factors, stream);
+}
+
+void ggml_cuda_op_rope(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const ggml_tensor * src1 = dst->src[1];
+    const ggml_tensor * src2 = dst->src[2];
+
+    const float * src0_d = (const float *)src0->data;
+    const float * src1_d = (const float *)src1->data;
+
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+    GGML_ASSERT(src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32 ||  dst->type == GGML_TYPE_F16);
+    GGML_ASSERT(src0->type == dst->type);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+    const int64_t nr = ggml_nrows(src0);
+
+    //const int n_past     = ((int32_t *) dst->op_params)[0];
+    const int n_dims     = ((int32_t *) dst->op_params)[1];
+    const int mode       = ((int32_t *) dst->op_params)[2];
+    //const int n_ctx      = ((int32_t *) dst->op_params)[3];
+    const int n_ctx_orig = ((int32_t *) dst->op_params)[4];
+
+    // RoPE alteration for extended context
+    float freq_base;
+    float freq_scale;
+    float ext_factor;
+    float attn_factor;
+    float beta_fast;
+    float beta_slow;
+
+    memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
+    memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
+    memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
+    memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
+    memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
+    memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
+
+    const bool is_neox = mode & 2;
+
+    const int32_t * pos = (const int32_t *) src1_d;
+
+    const float * freq_factors = nullptr;
+    if (src2 != nullptr) {
+        freq_factors = (const float *) src2->data;
+    }
+
+    rope_corr_dims corr_dims;
+    ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims.v);
+
+    // compute
+    if (is_neox) {
+        if (src0->type == GGML_TYPE_F32) {
+            rope_neox_cuda_f32(
+                (const float *)src0_d, (float *)dst_d, ne00, n_dims, nr, pos, freq_scale, ne01, freq_base, ext_factor,
+                attn_factor, corr_dims, freq_factors, stream
+            );
+        } else if (src0->type == GGML_TYPE_F16) {
+            rope_neox_cuda_f16(
+                (const half *)src0_d, (half *)dst_d, ne00, n_dims, nr, pos, freq_scale, ne01, freq_base, ext_factor,
+                attn_factor, corr_dims, freq_factors, stream
+            );
+        } else {
+            GGML_ASSERT(false);
+        }
+    } else {
+        if (src0->type == GGML_TYPE_F32) {
+            rope_norm_cuda_f32(
+                (const float *)src0_d, (float *)dst_d, ne00, n_dims, nr, pos, freq_scale, ne01, freq_base, ext_factor,
+                attn_factor, corr_dims, freq_factors, stream
+            );
+        } else if (src0->type == GGML_TYPE_F16) {
+            rope_norm_cuda_f16(
+                (const half *)src0_d, (half *)dst_d, ne00, n_dims, nr, pos, freq_scale, ne01, freq_base, ext_factor,
+                attn_factor, corr_dims, freq_factors, stream
+            );
+        } else {
+            GGML_ASSERT(false);
+        }
+    }
+}
diff --git a/ggml/src/ggml-cuda/rope.cuh b/ggml/src/ggml-cuda/rope.cuh
new file mode 100644 (file)
index 0000000..0f787a0
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_ROPE_BLOCK_SIZE 256
+
+void ggml_cuda_op_rope(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/scale.cu b/ggml/src/ggml-cuda/scale.cu
new file mode 100644 (file)
index 0000000..1405e06
--- /dev/null
@@ -0,0 +1,31 @@
+#include "scale.cuh"
+
+static __global__ void scale_f32(const float * x, float * dst, const float scale, const int k) {
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+
+    dst[i] = scale * x[i];
+}
+
+static void scale_f32_cuda(const float * x, float * dst, const float scale, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_SCALE_BLOCK_SIZE - 1) / CUDA_SCALE_BLOCK_SIZE;
+    scale_f32<<<num_blocks, CUDA_SCALE_BLOCK_SIZE, 0, stream>>>(x, dst, scale, k);
+}
+
+void ggml_cuda_op_scale(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    float scale;
+    memcpy(&scale, dst->op_params, sizeof(float));
+
+    scale_f32_cuda(src0_d, dst_d, scale, ggml_nelements(src0), stream);
+}
diff --git a/ggml/src/ggml-cuda/scale.cuh b/ggml/src/ggml-cuda/scale.cuh
new file mode 100644 (file)
index 0000000..8ff75c8
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_SCALE_BLOCK_SIZE 256
+
+void ggml_cuda_op_scale(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/softmax.cu b/ggml/src/ggml-cuda/softmax.cu
new file mode 100644 (file)
index 0000000..c24abae
--- /dev/null
@@ -0,0 +1,206 @@
+#include "common.cuh"
+#include "softmax.cuh"
+
+template <typename T>
+static __device__ __forceinline__ float t2f32(T val) {
+    return (float) val;
+}
+
+template <>
+__device__ float __forceinline__ t2f32<half>(half val) {
+    return __half2float(val);
+}
+
+template <bool vals_smem, int ncols_template, int block_size_template, typename T>
+static __global__ void soft_max_f32(const float * x, const T * mask, float * dst, const int ncols_par, const int nrows_y, const float scale, const float max_bias, const float m0, const float m1, uint32_t n_head_log2) {
+    const int ncols = ncols_template == 0 ? ncols_par : ncols_template;
+
+    const int tid  = threadIdx.x;
+    const int rowx = blockIdx.x;
+    const int rowy = rowx % nrows_y; // broadcast the mask in the row dimension
+
+    const int block_size = block_size_template == 0 ? blockDim.x : block_size_template;
+
+    const int warp_id = threadIdx.x / WARP_SIZE;
+    const int lane_id = threadIdx.x % WARP_SIZE;
+
+    const float slope = get_alibi_slope(max_bias, rowx/nrows_y, n_head_log2, m0, m1);
+
+    extern __shared__ float data_soft_max_f32[];
+    float * buf_iw = data_soft_max_f32; // shared memory buffer for inter-warp communication
+    // shared memory buffer to cache values between iterations:
+    float * vals = vals_smem ? buf_iw + WARP_SIZE : dst + (int64_t)rowx*ncols;
+
+    float max_val = -INFINITY;
+
+#pragma unroll
+    for (int col0 = 0; col0 < ncols; col0 += block_size) {
+        const int col = col0 + tid;
+
+        if (ncols_template == 0 && col >= ncols) {
+            break;
+        }
+
+        const int64_t ix = (int64_t)rowx*ncols + col;
+        const int64_t iy = (int64_t)rowy*ncols + col;
+
+        const float val = x[ix]*scale + (mask ? slope*t2f32(mask[iy]) : 0.0f);
+
+        vals[col] = val;
+        max_val = max(max_val, val);
+    }
+
+    // find the max value in the block
+    max_val = warp_reduce_max(max_val);
+    if (block_size > WARP_SIZE) {
+        if (warp_id == 0) {
+            buf_iw[lane_id] = -INFINITY;
+        }
+        __syncthreads();
+
+        if (lane_id == 0) {
+            buf_iw[warp_id] = max_val;
+        }
+        __syncthreads();
+
+        max_val = buf_iw[lane_id];
+        max_val = warp_reduce_max(max_val);
+    }
+
+    float tmp = 0.0f; // partial sum
+
+#pragma unroll
+    for (int col0 = 0; col0 < ncols; col0 += block_size) {
+        const int col = col0 + tid;
+
+        if (ncols_template == 0 && col >= ncols) {
+            break;
+        }
+
+        const float val = expf(vals[col] - max_val);
+        tmp += val;
+        vals[col] = val;
+    }
+
+    // find the sum of exps in the block
+    tmp = warp_reduce_sum(tmp);
+    if (block_size > WARP_SIZE) {
+        __syncthreads();
+        if (warp_id == 0) {
+            buf_iw[lane_id] = 0.0f;
+        }
+        __syncthreads();
+
+        if (lane_id == 0) {
+            buf_iw[warp_id] = tmp;
+        }
+        __syncthreads();
+
+        tmp = buf_iw[lane_id];
+        tmp = warp_reduce_sum(tmp);
+    }
+
+    const float inv_sum = 1.0f / tmp;
+
+#pragma unroll
+    for (int col0 = 0; col0 < ncols; col0 += block_size) {
+        const int col = col0 + tid;
+
+        if (ncols_template == 0 && col >= ncols) {
+            return;
+        }
+
+        const int64_t idst = (int64_t)rowx*ncols + col;
+        dst[idst] = vals[col] * inv_sum;
+    }
+}
+
+template<typename T>
+static void soft_max_f32_cuda(const float * x, const T * mask, float * dst, const int ncols_x, const int nrows_x, const int nrows_y, const float scale, const float max_bias, cudaStream_t stream) {
+    int nth = WARP_SIZE;
+    while (nth < ncols_x && nth < CUDA_SOFT_MAX_BLOCK_SIZE) nth *= 2;
+    const dim3 block_dims(nth,     1, 1);
+    const dim3 block_nums(nrows_x, 1, 1);
+    const size_t shmem = (GGML_PAD(ncols_x, WARP_SIZE) + WARP_SIZE)*sizeof(float);
+    static_assert(CUDA_SOFT_MAX_BLOCK_SIZE == 1024, "These values need to be adjusted.");
+
+    const uint32_t n_head      = nrows_x/nrows_y;
+    const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head));
+
+    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
+    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
+
+    // FIXME: this limit could be raised by ~2-4x on Ampere or newer
+    if (shmem < ggml_cuda_info().devices[ggml_cuda_get_device()].smpb) {
+        switch (ncols_x) {
+            case 32:
+                soft_max_f32<true, 32, 32><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
+                break;
+            case 64:
+                soft_max_f32<true, 64, 64><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
+                break;
+            case 128:
+                soft_max_f32<true, 128, 128><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
+                break;
+            case 256:
+                soft_max_f32<true, 256, 256><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
+                break;
+            case 512:
+                soft_max_f32<true, 512, 512><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
+                break;
+            case 1024:
+                soft_max_f32<true, 1024, 1024><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
+                break;
+            case 2048:
+                soft_max_f32<true, 2048, 1024><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
+                break;
+            case 4096:
+                soft_max_f32<true, 4096, 1024><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
+                break;
+            default:
+                soft_max_f32<true, 0, 0><<<block_nums, block_dims, shmem, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
+                break;
+        }
+    } else {
+        const size_t shmem_low = WARP_SIZE*sizeof(float);
+        soft_max_f32<false, 0, 0><<<block_nums, block_dims, shmem_low, stream>>>(x, mask, dst, ncols_x, nrows_y, scale, max_bias, m0, m1, n_head_log2);
+    }
+}
+
+void ggml_cuda_op_soft_max(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const ggml_tensor * src1 = dst->src[1];
+
+    const float * src0_d = (const float *)src0->data;
+    const void  * src1_d = src1 ? (const void *)src1->data : nullptr;
+
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    GGML_ASSERT(!src1 || src1->type == GGML_TYPE_F16 || src1->type == GGML_TYPE_F32); // src1 contains mask and it is optional
+
+    const int64_t ne00    = src0->ne[0];
+    const int64_t nrows_x = ggml_nrows(src0);
+    const int64_t nrows_y = src0->ne[1];
+
+    float scale    = 1.0f;
+    float max_bias = 0.0f;
+
+    memcpy(&scale,    (float *) dst->op_params + 0, sizeof(float));
+    memcpy(&max_bias, (float *) dst->op_params + 1, sizeof(float));
+
+    const bool use_f16 = (src1 && src1->type == GGML_TYPE_F16);
+
+    if (use_f16) {
+        const half * src1_dd = (const half *)src1_d;
+
+        soft_max_f32_cuda(src0_d, src1_dd, dst_d, ne00, nrows_x, nrows_y, scale, max_bias, stream);
+    } else {
+        const float * src1_dd = (const float *)src1_d;
+
+        soft_max_f32_cuda(src0_d, src1_dd, dst_d, ne00, nrows_x, nrows_y, scale, max_bias, stream);
+    }
+}
diff --git a/ggml/src/ggml-cuda/softmax.cuh b/ggml/src/ggml-cuda/softmax.cuh
new file mode 100644 (file)
index 0000000..4ef4ff8
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_SOFT_MAX_BLOCK_SIZE 1024
+
+void ggml_cuda_op_soft_max(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/sumrows.cu b/ggml/src/ggml-cuda/sumrows.cu
new file mode 100644 (file)
index 0000000..82e8e87
--- /dev/null
@@ -0,0 +1,40 @@
+#include "sumrows.cuh"
+
+static __global__ void k_sum_rows_f32(const float * x, float * dst, const int ncols) {
+    const int row = blockIdx.x;
+    const int col = threadIdx.x;
+
+    float sum = 0.0f;
+    for (int i = col; i < ncols; i += blockDim.x) {
+        sum += x[row * ncols + i];
+    }
+
+    sum = warp_reduce_sum(sum);
+
+    if (col == 0) {
+        dst[row] = sum;
+    }
+}
+
+static void sum_rows_f32_cuda(const float * x, float * dst, const int ncols, const int nrows, cudaStream_t stream) {
+    const dim3 block_dims(WARP_SIZE, 1, 1);
+    const dim3 block_nums(nrows, 1, 1);
+    k_sum_rows_f32<<<block_nums, block_dims, 0, stream>>>(x, dst, ncols);
+}
+
+void ggml_cuda_op_sum_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+
+    const int64_t ncols = src0->ne[0];
+    const int64_t nrows = ggml_nrows(src0);
+
+    sum_rows_f32_cuda(src0_d, dst_d, ncols, nrows, stream);
+}
diff --git a/ggml/src/ggml-cuda/sumrows.cuh b/ggml/src/ggml-cuda/sumrows.cuh
new file mode 100644 (file)
index 0000000..e7545f8
--- /dev/null
@@ -0,0 +1,3 @@
+#include "common.cuh"
+
+void ggml_cuda_op_sum_rows(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-f16.cu
new file mode 100644 (file)
index 0000000..6696a23
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_0.cu
new file mode 100644 (file)
index 0000000..dd070db
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q4_1.cu
new file mode 100644 (file)
index 0000000..54dcde6
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_0.cu
new file mode 100644 (file)
index 0000000..4ec22f7
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q5_1.cu
new file mode 100644 (file)
index 0000000..3c15bf7
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-f16-q8_0.cu
new file mode 100644 (file)
index 0000000..7e61b5f
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-f16.cu
new file mode 100644 (file)
index 0000000..fdb15b5
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_0.cu
new file mode 100644 (file)
index 0000000..0f7c417
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q4_1.cu
new file mode 100644 (file)
index 0000000..851f33c
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_0.cu
new file mode 100644 (file)
index 0000000..763809c
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q5_1.cu
new file mode 100644 (file)
index 0000000..f2a276e
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_0-q8_0.cu
new file mode 100644 (file)
index 0000000..cb227f6
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-f16.cu
new file mode 100644 (file)
index 0000000..97ac052
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_0.cu
new file mode 100644 (file)
index 0000000..c772b42
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q4_1.cu
new file mode 100644 (file)
index 0000000..5cb7430
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_0.cu
new file mode 100644 (file)
index 0000000..98a709d
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q5_1.cu
new file mode 100644 (file)
index 0000000..4f2f947
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q4_1-q8_0.cu
new file mode 100644 (file)
index 0000000..11f96b6
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-f16.cu
new file mode 100644 (file)
index 0000000..b39bdc0
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_0.cu
new file mode 100644 (file)
index 0000000..bbd6a2c
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q4_1.cu
new file mode 100644 (file)
index 0000000..9d84ff2
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_0.cu
new file mode 100644 (file)
index 0000000..bc8a5bf
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q5_1.cu
new file mode 100644 (file)
index 0000000..a679100
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_0-q8_0.cu
new file mode 100644 (file)
index 0000000..8f21bcc
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-f16.cu
new file mode 100644 (file)
index 0000000..858b00f
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_0.cu
new file mode 100644 (file)
index 0000000..0fc8011
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q4_1.cu
new file mode 100644 (file)
index 0000000..261fdf6
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_0.cu
new file mode 100644 (file)
index 0000000..0fb8247
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q5_1.cu
new file mode 100644 (file)
index 0000000..a9d9d08
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q5_1-q8_0.cu
new file mode 100644 (file)
index 0000000..7d7b279
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-f16.cu
new file mode 100644 (file)
index 0000000..a092ee2
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_0.cu
new file mode 100644 (file)
index 0000000..db55927
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q4_1.cu
new file mode 100644 (file)
index 0000000..c3c21ce
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_0.cu
new file mode 100644 (file)
index 0000000..35dd9f5
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q5_1.cu
new file mode 100644 (file)
index 0000000..050c22a
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs128-q8_0-q8_0.cu
new file mode 100644 (file)
index 0000000..de4866c
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs256-f16-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs256-f16-f16.cu
new file mode 100644 (file)
index 0000000..57a10bc
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-f16.cu
new file mode 100644 (file)
index 0000000..e0f08b4
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_0.cu
new file mode 100644 (file)
index 0000000..1c8e8a4
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q4_1.cu
new file mode 100644 (file)
index 0000000..cefed83
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_0.cu
new file mode 100644 (file)
index 0000000..aede6e3
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q5_1.cu
new file mode 100644 (file)
index 0000000..1a1a92c
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f16-instance-hs64-f16-q8_0.cu
new file mode 100644 (file)
index 0000000..ad66747
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f16.cuh"
+
+DECL_FATTN_VEC_F16_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-f16.cu
new file mode 100644 (file)
index 0000000..c499f45
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_0.cu
new file mode 100644 (file)
index 0000000..8286ebf
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q4_1.cu
new file mode 100644 (file)
index 0000000..4587868
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_0.cu
new file mode 100644 (file)
index 0000000..d89103c
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q5_1.cu
new file mode 100644 (file)
index 0000000..bb75fd4
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-f16-q8_0.cu
new file mode 100644 (file)
index 0000000..b162981
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_F16, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-f16.cu
new file mode 100644 (file)
index 0000000..d865760
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_0.cu
new file mode 100644 (file)
index 0000000..2e5bd2f
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q4_1.cu
new file mode 100644 (file)
index 0000000..be5f302
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_0.cu
new file mode 100644 (file)
index 0000000..8dd91cd
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q5_1.cu
new file mode 100644 (file)
index 0000000..4cb7915
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_0-q8_0.cu
new file mode 100644 (file)
index 0000000..09dea42
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-f16.cu
new file mode 100644 (file)
index 0000000..0fbb607
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_0.cu
new file mode 100644 (file)
index 0000000..2aeab83
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q4_1.cu
new file mode 100644 (file)
index 0000000..599415b
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_0.cu
new file mode 100644 (file)
index 0000000..e4f8e30
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q5_1.cu
new file mode 100644 (file)
index 0000000..34d1665
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q4_1-q8_0.cu
new file mode 100644 (file)
index 0000000..4bebef4
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q4_1, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-f16.cu
new file mode 100644 (file)
index 0000000..326468d
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_0.cu
new file mode 100644 (file)
index 0000000..511b58f
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q4_1.cu
new file mode 100644 (file)
index 0000000..d9906d1
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_0.cu
new file mode 100644 (file)
index 0000000..f61c183
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q5_1.cu
new file mode 100644 (file)
index 0000000..c10450f
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_0-q8_0.cu
new file mode 100644 (file)
index 0000000..2d5cb19
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_0, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-f16.cu
new file mode 100644 (file)
index 0000000..b384f34
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_0.cu
new file mode 100644 (file)
index 0000000..446e293
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q4_1.cu
new file mode 100644 (file)
index 0000000..6f43029
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_0.cu
new file mode 100644 (file)
index 0000000..1cd8ba8
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q5_1.cu
new file mode 100644 (file)
index 0000000..1ee2eab
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q5_1-q8_0.cu
new file mode 100644 (file)
index 0000000..2bc7781
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q5_1, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-f16.cu
new file mode 100644 (file)
index 0000000..d55ced0
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_0.cu
new file mode 100644 (file)
index 0000000..8361e99
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q4_1.cu
new file mode 100644 (file)
index 0000000..7507a67
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_0.cu
new file mode 100644 (file)
index 0000000..61f050b
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q5_1.cu
new file mode 100644 (file)
index 0000000..d4a49d9
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs128-q8_0-q8_0.cu
new file mode 100644 (file)
index 0000000..d146278
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(128, GGML_TYPE_Q8_0, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs256-f16-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs256-f16-f16.cu
new file mode 100644 (file)
index 0000000..e73f917
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(256, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-f16.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-f16.cu
new file mode 100644 (file)
index 0000000..d40825d
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_F16);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_0.cu
new file mode 100644 (file)
index 0000000..b5c6869
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q4_1.cu
new file mode 100644 (file)
index 0000000..4e21b0c
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_0.cu
new file mode 100644 (file)
index 0000000..2eac321
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_1.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q5_1.cu
new file mode 100644 (file)
index 0000000..f7d2c3b
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q8_0.cu b/ggml/src/ggml-cuda/template-instances/fattn-vec-f32-instance-hs64-f16-q8_0.cu
new file mode 100644 (file)
index 0000000..a013f40
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f32.cuh"
+
+DECL_FATTN_VEC_F32_CASE(64, GGML_TYPE_F16, GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb16.cu b/ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb16.cu
new file mode 100644 (file)
index 0000000..2d94e65
--- /dev/null
@@ -0,0 +1,10 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-wmma-f16.cuh"
+
+DECL_FATTN_WMMA_F16_CASE(64, 16, float);
+DECL_FATTN_WMMA_F16_CASE(80, 16, float);
+DECL_FATTN_WMMA_F16_CASE(96, 16, float);
+DECL_FATTN_WMMA_F16_CASE(112, 16, float);
+DECL_FATTN_WMMA_F16_CASE(128, 16, float);
+DECL_FATTN_WMMA_F16_CASE(256, 16, float);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb32.cu b/ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqfloat-cpb32.cu
new file mode 100644 (file)
index 0000000..c3d9df3
--- /dev/null
@@ -0,0 +1,9 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-wmma-f16.cuh"
+
+DECL_FATTN_WMMA_F16_CASE(64, 32, float);
+DECL_FATTN_WMMA_F16_CASE(80, 32, float);
+DECL_FATTN_WMMA_F16_CASE(96, 32, float);
+DECL_FATTN_WMMA_F16_CASE(112, 32, float);
+DECL_FATTN_WMMA_F16_CASE(128, 32, float);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb16.cu b/ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb16.cu
new file mode 100644 (file)
index 0000000..bb680e4
--- /dev/null
@@ -0,0 +1,10 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-wmma-f16.cuh"
+
+DECL_FATTN_WMMA_F16_CASE(64, 16, half);
+DECL_FATTN_WMMA_F16_CASE(80, 16, half);
+DECL_FATTN_WMMA_F16_CASE(96, 16, half);
+DECL_FATTN_WMMA_F16_CASE(112, 16, half);
+DECL_FATTN_WMMA_F16_CASE(128, 16, half);
+DECL_FATTN_WMMA_F16_CASE(256, 16, half);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb32.cu b/ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb32.cu
new file mode 100644 (file)
index 0000000..073f71b
--- /dev/null
@@ -0,0 +1,10 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-wmma-f16.cuh"
+
+DECL_FATTN_WMMA_F16_CASE(64, 32, half);
+DECL_FATTN_WMMA_F16_CASE(80, 32, half);
+DECL_FATTN_WMMA_F16_CASE(96, 32, half);
+DECL_FATTN_WMMA_F16_CASE(112, 32, half);
+DECL_FATTN_WMMA_F16_CASE(128, 32, half);
+DECL_FATTN_WMMA_F16_CASE(256, 32, half);
diff --git a/ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb8.cu b/ggml/src/ggml-cuda/template-instances/fattn-wmma-f16-instance-kqhalf-cpb8.cu
new file mode 100644 (file)
index 0000000..d30710c
--- /dev/null
@@ -0,0 +1,8 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-wmma-f16.cuh"
+
+DECL_FATTN_WMMA_F16_CASE(64, 8, half);
+DECL_FATTN_WMMA_F16_CASE(96, 8, half);
+DECL_FATTN_WMMA_F16_CASE(128, 8, half);
+DECL_FATTN_WMMA_F16_CASE(256, 8, half);
diff --git a/ggml/src/ggml-cuda/template-instances/generate_cu_files.py b/ggml/src/ggml-cuda/template-instances/generate_cu_files.py
new file mode 100755 (executable)
index 0000000..ea58d09
--- /dev/null
@@ -0,0 +1,75 @@
+#!/usr/bin/env python3
+
+from glob import glob
+import os
+
+TYPES_KV = ["GGML_TYPE_Q4_0", "GGML_TYPE_Q4_1", "GGML_TYPE_Q5_0", "GGML_TYPE_Q5_1", "GGML_TYPE_Q8_0", "GGML_TYPE_F16"]
+
+SOURCE_FATTN_VEC = """// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-vec-f{vkq_size}.cuh"
+
+DECL_FATTN_VEC_F{vkq_size}_CASE({head_size}, {type_k}, {type_v});
+"""
+
+SOURCE_FATTN_WMMA_START = """// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../fattn-wmma-f16.cuh"
+
+"""
+
+SOURCE_FATTN_WMMA_CASE = "DECL_FATTN_WMMA_F16_CASE({head_size}, {cols_per_block}, {kq_acc_t});\n"
+
+TYPES_MMQ = [
+    "GGML_TYPE_Q4_0", "GGML_TYPE_Q4_1", "GGML_TYPE_Q5_0", "GGML_TYPE_Q5_1", "GGML_TYPE_Q8_0",
+    "GGML_TYPE_Q2_K", "GGML_TYPE_Q3_K", "GGML_TYPE_Q4_K", "GGML_TYPE_Q5_K", "GGML_TYPE_Q6_K"
+]
+
+SOURCE_MMQ = """// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE({type});
+"""
+
+
+def get_short_name(long_quant_name):
+    return long_quant_name.replace("GGML_TYPE_", "").lower()
+
+
+def get_head_sizes(type_k, type_v):
+    if type_k == "GGML_TYPE_F16" and type_v == "GGML_TYPE_F16":
+        return [64, 128, 256]
+    if type_k == "GGML_TYPE_F16":
+        return [64, 128]
+    return [128]
+
+
+for filename in glob("*.cu"):
+    os.remove(filename)
+
+for vkq_size in [16, 32]:
+    for type_k in TYPES_KV:
+        for type_v in TYPES_KV:
+            for head_size in get_head_sizes(type_k, type_v):
+                with open(f"fattn-vec-f{vkq_size}-instance-hs{head_size}-{get_short_name(type_k)}-{get_short_name(type_v)}.cu", "w") as f:
+                    f.write(SOURCE_FATTN_VEC.format(vkq_size=vkq_size, head_size=head_size, type_k=type_k, type_v=type_v))
+
+for kq_acc_t in ["half", "float"]:
+    for cols_per_block in [8, 16, 32]:
+        if kq_acc_t == "float" and cols_per_block == 8:
+            continue
+
+        with open(f"fattn-wmma-f16-instance-kq{kq_acc_t}-cpb{cols_per_block}.cu", "w") as f:
+            f.write(SOURCE_FATTN_WMMA_START)
+
+            for head_size in [64, 80, 96, 112, 128, 256]:
+                if cols_per_block == 8 and head_size % 32 != 0: # wmma fragment is 8x32
+                    continue
+                if kq_acc_t == "float" and cols_per_block == 32 and head_size == 256: # register spilling, bad performance
+                    continue
+                f.write(SOURCE_FATTN_WMMA_CASE.format(kq_acc_t=kq_acc_t, cols_per_block=cols_per_block, head_size=head_size))
+
+for type in TYPES_MMQ:
+    with open(f"mmq-instance-{get_short_name(type)}.cu", "w") as f:
+        f.write(SOURCE_MMQ.format(type=type))
diff --git a/ggml/src/ggml-cuda/template-instances/mmq-instance-q2_k.cu b/ggml/src/ggml-cuda/template-instances/mmq-instance-q2_k.cu
new file mode 100644 (file)
index 0000000..6415369
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE(GGML_TYPE_Q2_K);
diff --git a/ggml/src/ggml-cuda/template-instances/mmq-instance-q3_k.cu b/ggml/src/ggml-cuda/template-instances/mmq-instance-q3_k.cu
new file mode 100644 (file)
index 0000000..ffb6213
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE(GGML_TYPE_Q3_K);
diff --git a/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_0.cu b/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_0.cu
new file mode 100644 (file)
index 0000000..0c0b0c8
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE(GGML_TYPE_Q4_0);
diff --git a/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_1.cu b/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_1.cu
new file mode 100644 (file)
index 0000000..ee67f69
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE(GGML_TYPE_Q4_1);
diff --git a/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_k.cu b/ggml/src/ggml-cuda/template-instances/mmq-instance-q4_k.cu
new file mode 100644 (file)
index 0000000..9eeb3cd
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE(GGML_TYPE_Q4_K);
diff --git a/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_0.cu b/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_0.cu
new file mode 100644 (file)
index 0000000..cc57fb9
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE(GGML_TYPE_Q5_0);
diff --git a/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_1.cu b/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_1.cu
new file mode 100644 (file)
index 0000000..721ac79
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE(GGML_TYPE_Q5_1);
diff --git a/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_k.cu b/ggml/src/ggml-cuda/template-instances/mmq-instance-q5_k.cu
new file mode 100644 (file)
index 0000000..a2e90ff
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE(GGML_TYPE_Q5_K);
diff --git a/ggml/src/ggml-cuda/template-instances/mmq-instance-q6_k.cu b/ggml/src/ggml-cuda/template-instances/mmq-instance-q6_k.cu
new file mode 100644 (file)
index 0000000..470938f
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE(GGML_TYPE_Q6_K);
diff --git a/ggml/src/ggml-cuda/template-instances/mmq-instance-q8_0.cu b/ggml/src/ggml-cuda/template-instances/mmq-instance-q8_0.cu
new file mode 100644 (file)
index 0000000..974477b
--- /dev/null
@@ -0,0 +1,5 @@
+// This file has been autogenerated by generate_cu_files.py, do not edit manually.
+
+#include "../mmq.cuh"
+
+DECL_MMQ_CASE(GGML_TYPE_Q8_0);
diff --git a/ggml/src/ggml-cuda/tsembd.cu b/ggml/src/ggml-cuda/tsembd.cu
new file mode 100644 (file)
index 0000000..153ddbc
--- /dev/null
@@ -0,0 +1,47 @@
+#include "tsembd.cuh"
+
+static __global__ void timestep_embedding_f32(const float * timesteps, float * dst, const int nb1, const int dim, const int max_period) {
+    // blockIDx.y: idx of timesteps->ne[0]
+    // blockIDx.x: idx of ((dim + 1) / 2) / BLOCK_SIZE
+    int i = blockIdx.y;
+    int j = threadIdx.x + blockIdx.x * blockDim.x;
+    float * embed_data = (float *)((char *)dst +  i*nb1);
+
+    if (dim % 2 != 0 && j == ((dim + 1) / 2)) {
+        embed_data[dim] = 0.f;
+    }
+
+    int half = dim / 2;
+    if (j >= half) {
+        return;
+    }
+
+    float timestep = timesteps[i];
+    float freq = (float)expf(-logf(max_period) * j / half);
+    float arg = timestep * freq;
+    embed_data[j] = cosf(arg);
+    embed_data[j + half] = sinf(arg);
+}
+
+static void timestep_embedding_f32_cuda(const float * x, float * dst, const int ne00, const int nb1,
+                                        const int dim, const int max_period, cudaStream_t stream) {
+    int half_ceil = (dim + 1) / 2;
+    int num_blocks = (half_ceil + CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE - 1) / CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE;
+    dim3 gridDim(num_blocks, ne00, 1);
+    timestep_embedding_f32<<<gridDim, CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE, 0, stream>>>(x, dst, nb1, dim, max_period);
+}
+
+void ggml_cuda_op_timestep_embedding(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT(dst->type == GGML_TYPE_F32);
+
+    const int dim = dst->op_params[0];
+    const int max_period = dst->op_params[1];
+
+    timestep_embedding_f32_cuda(src0_d, dst_d, src0->ne[0], dst->nb[1], dim, max_period, stream);
+}
diff --git a/ggml/src/ggml-cuda/tsembd.cuh b/ggml/src/ggml-cuda/tsembd.cuh
new file mode 100644 (file)
index 0000000..84340e3
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_TIMESTEP_EMBEDDING_BLOCK_SIZE 256
+
+void ggml_cuda_op_timestep_embedding(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/unary.cu b/ggml/src/ggml-cuda/unary.cu
new file mode 100644 (file)
index 0000000..f9e2080
--- /dev/null
@@ -0,0 +1,314 @@
+#include "unary.cuh"
+
+static __global__ void gelu_f32(const float * x, float * dst, const int k) {
+    const float GELU_COEF_A    = 0.044715f;
+    const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f;
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+
+    float xi = x[i];
+    dst[i] = 0.5f*xi*(1.0f + tanhf(SQRT_2_OVER_PI*xi*(1.0f + GELU_COEF_A*xi*xi)));
+}
+
+static __global__ void gelu_quick_f32(const float * x, float * dst, int k) {
+    const float GELU_QUICK_COEF = -1.702f;
+    const int i  = blockDim.x*blockIdx.x + threadIdx.x;
+    if (i >= k) {
+        return;
+    }
+    dst[i] = x[i] * (1.0f / (1.0f + expf(GELU_QUICK_COEF * x[i])));
+}
+
+static __global__ void silu_f32(const float * x, float * dst, const int k) {
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = x[i] / (1.0f + expf(-x[i]));
+}
+
+static __global__ void tanh_f32(const float * x, float * dst, int k) {
+    const int i  = blockDim.x*blockIdx.x + threadIdx.x;
+    if (i >= k) {
+        return;
+    }
+    dst[i] = tanhf(x[i]);
+}
+
+static __global__ void relu_f32(const float * x, float * dst, const int k) {
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = fmaxf(x[i], 0);
+}
+
+static __global__ void sigmoid_f32(const float * x, float * dst, const int k) {
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = 1.0f / (1.0f + expf(-x[i]));
+}
+
+static __global__ void hardsigmoid_f32(const float * x, float * dst, const int k) {
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f));
+}
+
+static __global__ void hardswish_f32(const float * x, float * dst, const int k) {
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = x[i] * fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f));
+}
+
+static __global__ void leaky_relu_f32(const float * x, float * dst, const int k, const float negative_slope) {
+    const int i  = blockDim.x*blockIdx.x + threadIdx.x;
+    if (i >= k) {
+        return;
+    }
+    dst[i] = fmaxf(x[i], 0) + fminf(x[i], 0.0f) * negative_slope;
+}
+
+static __global__ void sqr_f32(const float * x, float * dst, const int k) {
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = x[i] * x[i];
+}
+
+static __global__ void sqrt_f32(const float * x, float * dst, const int k) {
+    const int i = blockDim.x*blockIdx.x + threadIdx.x;
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = sqrtf(x[i]);
+}
+
+static void gelu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_GELU_BLOCK_SIZE - 1) / CUDA_GELU_BLOCK_SIZE;
+    gelu_f32<<<num_blocks, CUDA_GELU_BLOCK_SIZE, 0, stream>>>(x, dst, k);
+}
+
+static void gelu_quick_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_GELU_BLOCK_SIZE - 1) / CUDA_GELU_BLOCK_SIZE;
+    gelu_quick_f32<<<num_blocks, CUDA_GELU_BLOCK_SIZE, 0, stream>>>(x, dst, k);
+}
+
+static void silu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_SILU_BLOCK_SIZE - 1) / CUDA_SILU_BLOCK_SIZE;
+    silu_f32<<<num_blocks, CUDA_SILU_BLOCK_SIZE, 0, stream>>>(x, dst, k);
+}
+
+static void tanh_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_TANH_BLOCK_SIZE - 1) / CUDA_TANH_BLOCK_SIZE;
+    tanh_f32<<<num_blocks, CUDA_TANH_BLOCK_SIZE, 0, stream>>>(x, dst, k);
+}
+
+static void relu_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_RELU_BLOCK_SIZE - 1) / CUDA_RELU_BLOCK_SIZE;
+    relu_f32<<<num_blocks, CUDA_RELU_BLOCK_SIZE, 0, stream>>>(x, dst, k);
+}
+
+static void sigmoid_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_SIGMOID_BLOCK_SIZE - 1) / CUDA_SIGMOID_BLOCK_SIZE;
+    sigmoid_f32<<<num_blocks, CUDA_SIGMOID_BLOCK_SIZE, 0, stream>>>(x, dst, k);
+}
+
+static void hardsigmoid_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_HARDSIGMOID_BLOCK_SIZE - 1) / CUDA_HARDSIGMOID_BLOCK_SIZE;
+    hardsigmoid_f32<<<num_blocks, CUDA_HARDSIGMOID_BLOCK_SIZE, 0, stream>>>(x, dst, k);
+}
+
+static void hardswish_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_HARDSWISH_BLOCK_SIZE - 1) / CUDA_HARDSWISH_BLOCK_SIZE;
+    hardswish_f32<<<num_blocks, CUDA_HARDSWISH_BLOCK_SIZE, 0, stream>>>(x, dst, k);
+}
+
+static void leaky_relu_f32_cuda(const float * x, float * dst, const int k, const float negative_slope, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_RELU_BLOCK_SIZE - 1) / CUDA_RELU_BLOCK_SIZE;
+    leaky_relu_f32<<<num_blocks, CUDA_RELU_BLOCK_SIZE, 0, stream>>>(x, dst, k, negative_slope);
+}
+
+static void sqr_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_SQR_BLOCK_SIZE - 1) / CUDA_SQR_BLOCK_SIZE;
+    sqr_f32<<<num_blocks, CUDA_SQR_BLOCK_SIZE, 0, stream>>>(x, dst, k);
+}
+
+static void sqrt_f32_cuda(const float * x, float * dst, const int k, cudaStream_t stream) {
+    const int num_blocks = (k + CUDA_SQRT_BLOCK_SIZE - 1) / CUDA_SQRT_BLOCK_SIZE;
+    sqrt_f32<<<num_blocks, CUDA_SQRT_BLOCK_SIZE, 0, stream>>>(x, dst, k);
+}
+
+void ggml_cuda_op_gelu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    gelu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
+}
+
+void ggml_cuda_op_silu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    silu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
+}
+
+void ggml_cuda_op_gelu_quick(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    gelu_quick_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
+}
+
+void ggml_cuda_op_tanh(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    tanh_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
+}
+
+void ggml_cuda_op_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    relu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
+}
+
+void ggml_cuda_op_sigmoid(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    sigmoid_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
+}
+
+void ggml_cuda_op_hardsigmoid(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    hardsigmoid_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
+}
+
+void ggml_cuda_op_hardswish(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    hardswish_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
+}
+
+void ggml_cuda_op_leaky_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    float negative_slope;
+    memcpy(&negative_slope, dst->op_params, sizeof(float));
+
+    leaky_relu_f32_cuda(src0_d, dst_d, ggml_nelements(src0), negative_slope, stream);
+}
+
+void ggml_cuda_op_sqr(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    sqr_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
+}
+
+void ggml_cuda_op_sqrt(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    sqrt_f32_cuda(src0_d, dst_d, ggml_nelements(src0), stream);
+}
diff --git a/ggml/src/ggml-cuda/unary.cuh b/ggml/src/ggml-cuda/unary.cuh
new file mode 100644 (file)
index 0000000..4cfb047
--- /dev/null
@@ -0,0 +1,33 @@
+#include "common.cuh"
+
+#define CUDA_GELU_BLOCK_SIZE 256
+#define CUDA_SILU_BLOCK_SIZE 256
+#define CUDA_TANH_BLOCK_SIZE 256
+#define CUDA_RELU_BLOCK_SIZE 256
+#define CUDA_SIGMOID_BLOCK_SIZE 256
+#define CUDA_HARDSIGMOID_BLOCK_SIZE 256
+#define CUDA_HARDSWISH_BLOCK_SIZE 256
+#define CUDA_SQR_BLOCK_SIZE 256
+#define CUDA_SQRT_BLOCK_SIZE 256
+
+void ggml_cuda_op_gelu(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_silu(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_gelu_quick(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_tanh(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_sigmoid(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_hardsigmoid(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_hardswish(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_leaky_relu(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_sqr(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
+
+void ggml_cuda_op_sqrt(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/upscale.cu b/ggml/src/ggml-cuda/upscale.cu
new file mode 100644 (file)
index 0000000..cf513c3
--- /dev/null
@@ -0,0 +1,51 @@
+#include "upscale.cuh"
+
+static __global__ void upscale_f32(const float * x, float * dst,
+        const int nb00, const int nb01, const int nb02, const int nb03,
+        const int ne10, const int ne11, const int ne12, const int ne13,
+        const float sf0, const float sf1, const float sf2, const float sf3) {
+    int index = threadIdx.x + blockIdx.x * blockDim.x;
+    if (index >= ne10 * ne11 * ne12 * ne13) {
+        return;
+    }
+
+    int i10 = index % ne10;
+    int i11 = (index / ne10) % ne11;
+    int i12 = (index / (ne10 * ne11)) % ne12;
+    int i13 = (index / (ne10 * ne11 * ne12)) % ne13;
+
+    int i00 = i10 / sf0;
+    int i01 = i11 / sf1;
+    int i02 = i12 / sf2;
+    int i03 = i13 / sf3;
+
+    dst[index] = *(float *)((char *)x + i03 * nb03 + i02 * nb02 + i01 * nb01 + i00 * nb00);
+}
+
+static void upscale_f32_cuda(const float * x, float * dst,
+        const int nb00, const int nb01, const int nb02, const int nb03,
+        const int ne10, const int ne11, const int ne12, const int ne13,
+        const float sf0, const float sf1, const float sf2, const float sf3,
+        cudaStream_t stream) {
+    int dst_size = ne10 * ne11 * ne12 * ne13;
+    int num_blocks = (dst_size + CUDA_UPSCALE_BLOCK_SIZE - 1) / CUDA_UPSCALE_BLOCK_SIZE;
+
+    upscale_f32<<<num_blocks, CUDA_UPSCALE_BLOCK_SIZE,0,stream>>>(x, dst, nb00, nb01, nb02, nb03, ne10, ne11, ne12, ne13, sf0, sf1, sf2, sf3);
+}
+
+void ggml_cuda_op_upscale(ggml_backend_cuda_context & ctx, ggml_tensor * dst) {
+    const ggml_tensor * src0 = dst->src[0];
+    const float * src0_d = (const float *)src0->data;
+    float * dst_d = (float *)dst->data;
+    cudaStream_t stream = ctx.stream();
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    const float sf0 = (float)dst->ne[0]/src0->ne[0];
+    const float sf1 = (float)dst->ne[1]/src0->ne[1];
+    const float sf2 = (float)dst->ne[2]/src0->ne[2];
+    const float sf3 = (float)dst->ne[3]/src0->ne[3];
+
+    upscale_f32_cuda(src0_d, dst_d, src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3], dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], sf0, sf1, sf2, sf3, stream);
+}
diff --git a/ggml/src/ggml-cuda/upscale.cuh b/ggml/src/ggml-cuda/upscale.cuh
new file mode 100644 (file)
index 0000000..d4d7652
--- /dev/null
@@ -0,0 +1,5 @@
+#include "common.cuh"
+
+#define CUDA_UPSCALE_BLOCK_SIZE 256
+
+void ggml_cuda_op_upscale(ggml_backend_cuda_context & ctx, ggml_tensor * dst);
diff --git a/ggml/src/ggml-cuda/vecdotq.cuh b/ggml/src/ggml-cuda/vecdotq.cuh
new file mode 100644 (file)
index 0000000..3b12d65
--- /dev/null
@@ -0,0 +1,1151 @@
+#include "common.cuh"
+
+static __device__ __forceinline__ int get_int_from_int8(const int8_t * x8, const int & i32) {
+    const uint16_t * x16 = (const uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment
+
+    int x32 = 0;
+    x32 |= x16[0] <<  0;
+    x32 |= x16[1] << 16;
+
+    return x32;
+}
+
+static __device__ __forceinline__ int get_int_from_uint8(const uint8_t * x8, const int & i32) {
+    const uint16_t * x16 = (const uint16_t *) (x8 + sizeof(int) * i32); // assume at least 2 byte alignment
+
+    int x32 = 0;
+    x32 |= x16[0] <<  0;
+    x32 |= x16[1] << 16;
+
+    return x32;
+}
+
+static __device__ __forceinline__ int get_int_from_int8_aligned(const int8_t * x8, const int & i32) {
+    return *((const int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment
+}
+
+static __device__ __forceinline__ int get_int_from_uint8_aligned(const uint8_t * x8, const int & i32) {
+    return *((const int *) (x8 + sizeof(int) * i32)); // assume at least 4 byte alignment
+}
+
+
+// VDR = vec dot ratio, how many contiguous integers each thread processes when the vec dot kernel is called
+// MMVQ = mul_mat_vec_q, MMQ = mul_mat_q
+
+#define VDR_Q4_0_Q8_1_MMVQ 2
+#define VDR_Q4_0_Q8_1_MMQ  4
+
+template <int vdr> static __device__ __forceinline__ float vec_dot_q4_0_q8_1_impl(
+    const int * v, const int * u, const float & d4, const half2 & ds8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        const int vi0 = (v[i] >> 0) & 0x0F0F0F0F;
+        const int vi1 = (v[i] >> 4) & 0x0F0F0F0F;
+
+        // SIMD dot product of quantized values
+        sumi = __dp4a(vi0, u[2*i+0], sumi);
+        sumi = __dp4a(vi1, u[2*i+1], sumi);
+    }
+
+    const float2 ds8f = __half22float2(ds8);
+
+    // second part effectively subtracts 8 from each quant value
+    return d4 * (sumi * ds8f.x - (8*vdr/QI4_0) * ds8f.y);
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+#define VDR_Q4_1_Q8_1_MMVQ 2
+#define VDR_Q4_1_Q8_1_MMQ  4
+
+template <int vdr> static __device__ __forceinline__ float vec_dot_q4_1_q8_1_impl(
+    const int * v, const int * u, const half2 & dm4, const half2 & ds8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        const int vi0 = (v[i] >> 0) & 0x0F0F0F0F;
+        const int vi1 = (v[i] >> 4) & 0x0F0F0F0F;
+
+        // SIMD dot product of quantized values
+        sumi = __dp4a(vi0, u[2*i+0], sumi);
+        sumi = __dp4a(vi1, u[2*i+1], sumi);
+    }
+
+#ifdef GGML_CUDA_F16
+    const float2 tmp = __half22float2(__hmul2(dm4, ds8));
+    const float d4d8 = tmp.x;
+    const float m4s8 = tmp.y;
+#else
+    const float2 dm4f = __half22float2(dm4);
+    const float2 ds8f = __half22float2(ds8);
+    const float d4d8 = dm4f.x * ds8f.x;
+    const float m4s8 = dm4f.y * ds8f.y;
+#endif // GGML_CUDA_F16
+
+    // scale second part of sum by QI8_1/(vdr * QR4_1) to compensate for multiple threads adding it
+    return sumi * d4d8 + m4s8 / (QI8_1 / (vdr * QR4_1));
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+#define VDR_Q5_0_Q8_1_MMVQ 2
+#define VDR_Q5_0_Q8_1_MMQ  4
+
+template <int vdr> static __device__ __forceinline__ float vec_dot_q5_0_q8_1_impl(
+    const int * vl, const int * vh, const int * u, const float & d5, const half2 & ds8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        int vi0 = (vl[i] >>  0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits
+        vi0    |= (vh[i] <<  4) & 0x00000010; // 0 ->  4
+        vi0    |= (vh[i] << 11) & 0x00001000; // 1 -> 12
+        vi0    |= (vh[i] << 18) & 0x00100000; // 2 -> 20
+        vi0    |= (vh[i] << 25) & 0x10000000; // 3 -> 28
+        sumi = __dp4a(vi0, u[2*i+0], sumi); // SIMD dot product of quantized values
+
+        int vi1 = (vl[i] >>  4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits
+        vi1    |= (vh[i] >> 12) & 0x00000010; // 16 ->  4
+        vi1    |= (vh[i] >>  5) & 0x00001000; // 17 -> 12
+        vi1    |= (vh[i] <<  2) & 0x00100000; // 18 -> 20
+        vi1    |= (vh[i] <<  9) & 0x10000000; // 19 -> 28
+        sumi = __dp4a(vi1, u[2*i+1], sumi); // SIMD dot product of quantized values
+    }
+
+    const float2 ds8f = __half22float2(ds8);
+
+    // second part effectively subtracts 16 from each quant value
+    return d5 * (sumi * ds8f.x - (16*vdr/QI5_0) * ds8f.y);
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+#define VDR_Q5_1_Q8_1_MMVQ 2
+#define VDR_Q5_1_Q8_1_MMQ  4
+
+template <int vdr> static __device__ __forceinline__ float vec_dot_q5_1_q8_1_impl(
+    const int * vl, const int * vh, const int * u, const half2 & dm5, const half2 & ds8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        int vi0 = (vl[i] >>  0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits
+        vi0    |= (vh[i] <<  4) & 0x00000010; // 0 ->  4
+        vi0    |= (vh[i] << 11) & 0x00001000; // 1 -> 12
+        vi0    |= (vh[i] << 18) & 0x00100000; // 2 -> 20
+        vi0    |= (vh[i] << 25) & 0x10000000; // 3 -> 28
+        sumi = __dp4a(vi0, u[2*i+0], sumi); // SIMD dot product of quantized values
+
+        int vi1 = (vl[i] >>  4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits
+        vi1    |= (vh[i] >> 12) & 0x00000010; // 16 ->  4
+        vi1    |= (vh[i] >>  5) & 0x00001000; // 17 -> 12
+        vi1    |= (vh[i] <<  2) & 0x00100000; // 18 -> 20
+        vi1    |= (vh[i] <<  9) & 0x10000000; // 19 -> 28
+        sumi = __dp4a(vi1, u[2*i+1], sumi); // SIMD dot product of quantized values
+    }
+
+#ifdef GGML_CUDA_F16
+    const float2 tmp = __half22float2(__hmul2(dm5, ds8));
+    const float d5d8 = tmp.x;
+    const float m5s8 = tmp.y;
+#else
+    const float2 dm5f = __half22float2(dm5);
+    const float2 ds8f = __half22float2(ds8);
+    const float d5d8 = dm5f.x * ds8f.x;
+    const float m5s8 = dm5f.y * ds8f.y;
+#endif // GGML_CUDA_F16
+
+    // scale second part of sum by QI5_1 / vdr to compensate for multiple threads adding it
+    return sumi*d5d8 + m5s8 / (QI5_1 / vdr);
+
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+#define VDR_Q8_0_Q8_1_MMVQ 2
+#define VDR_Q8_0_Q8_1_MMQ 8
+
+template <typename T, int vdr> static __device__ __forceinline__ T vec_dot_q8_0_q8_1_impl(
+    const int * v, const int * u, const T & d8_0, const T & d8_1) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        // SIMD dot product of quantized values
+        sumi = __dp4a(v[i], u[i], sumi);
+    }
+
+    return d8_0*d8_1 * ((T) sumi);
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+template <int vdr> static __device__ __forceinline__ float vec_dot_q8_1_q8_1_impl(
+    const int * v, const int * u, const half2 & dm8, const half2 & ds8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        // SIMD dot product of quantized values
+        sumi = __dp4a(v[i], u[i], sumi);
+    }
+
+#ifdef GGML_CUDA_F16
+    const float2 tmp = __half22float2(__hmul2(dm8, ds8));
+    const float d8d8 = tmp.x;
+    const float m8s8 = tmp.y;
+#else
+    const float2 dm8f = __half22float2(dm8);
+    const float2 ds8f = __half22float2(ds8);
+    const float d8d8 = dm8f.x * ds8f.x;
+    const float m8s8 = dm8f.y * ds8f.y;
+#endif // GGML_CUDA_F16
+
+    // scale second part of sum by QI8_1/ vdr to compensate for multiple threads adding it
+    return sumi*d8d8 + m8s8 / (QI8_1 / vdr);
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+#define VDR_Q2_K_Q8_1_MMVQ 1
+#define VDR_Q2_K_Q8_1_MMQ  2
+
+// contiguous v/x values
+static __device__ __forceinline__ float vec_dot_q2_K_q8_1_impl_mmvq(
+    const int & v, const int * __restrict__ u, const uint8_t * __restrict__ scales,
+    const half2 & dm2, const float * __restrict__ d8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR2_K; ++i) {
+        const int sc = scales[2*i];
+
+        const int vi = (v >> (2*i)) & 0x03030303;
+
+        sumf_d += d8[i] * (__dp4a(vi, u[i], 0) * (sc & 0xF)); // SIMD dot product
+
+        // fill int with 4x m
+        int m = sc >> 4;
+        m |= m <<  8;
+        m |= m << 16;
+        sumf_m += d8[i] * __dp4a(m, u[i], 0); // multiply constant q2_K part with sum of q8_1 values
+    }
+
+    const float2 dm2f = __half22float2(dm2);
+
+    return dm2f.x*sumf_d - dm2f.y*sumf_m;
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+// contiguous u/y values
+static __device__ __forceinline__ float vec_dot_q2_K_q8_1_impl_mmq(
+    const int * __restrict__ v, const int * __restrict__ u, const half2 * dm2, const float & d8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i0 = 0; i0 < QI8_1; i0 += QI8_1/2) {
+        const float2 dm2f = __half22float2(dm2[i0/(QI8_1/2)]);
+        int sumi_d = 0;
+        int sumi_m = 0;
+
+        const int vi0 = v[i0/(QI8_1/2)];
+#pragma unroll
+        for (int i = i0; i < i0 + QI8_1/2; ++i) {
+            const int vi = (vi0 >> (2*(i % (QI8_1/2)))) & 0x03030303;
+            sumi_d = __dp4a(vi,         u[i], sumi_d); // SIMD dot product
+            sumi_m = __dp4a(0x01010101, u[i], sumi_m);
+        }
+
+        sumf_d += dm2f.x * sumi_d;
+        sumf_m += dm2f.y * sumi_m;
+    }
+
+    return d8*(sumf_d - sumf_m);
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+#define VDR_Q3_K_Q8_1_MMVQ 1
+#define VDR_Q3_K_Q8_1_MMQ  2
+
+// contiguous v/x values
+static __device__ __forceinline__ float vec_dot_q3_K_q8_1_impl_mmvq(
+    const int & vl, const int & vh, const int * __restrict__ u, const uint8_t * __restrict__ scales,
+    const int & scale_offset, const float & d3, const float * __restrict__ d8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    float sumf = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR3_K; ++i) {
+        const int isc = scale_offset + 2*i;
+
+        const int isc_low = isc % (QK_K/32);
+        const int sc_shift_low = 4 * (isc / (QK_K/32));
+        const int sc_low  = (scales[isc_low] >> sc_shift_low) & 0xF;
+
+        const int isc_high = isc % (QK_K/64);
+        const int sc_shift_high = 2 * (isc / (QK_K/64));
+        const int sc_high = ((scales[(QK_K/32) + isc_high] >> sc_shift_high) & 3) << 4;
+
+        const int sc = (sc_low | sc_high) - 32;
+
+        const int vil = (vl >> (2*i)) & 0x03030303;
+
+        const int vih = ((vh >> i) << 2) & 0x04040404;
+
+        const int vi = __vsubss4(vil, vih);
+
+        sumf += d8[i] * (__dp4a(vi, u[i], 0) * sc); // SIMD dot product
+    }
+
+    return d3 * sumf;
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+// contiguous u/y values
+static __device__ __forceinline__ float vec_dot_q3_K_q8_1_impl_mmq(
+    const int * __restrict__ v, const int * __restrict__ u, const int8_t * __restrict__ scales,
+    const float & d3, const float & d8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    int sumi = 0;
+
+#pragma unroll
+    for (int i0 = 0; i0 < QR3_K*VDR_Q3_K_Q8_1_MMQ; i0 += QI8_1/2) {
+        int sumi_sc = 0;
+
+#pragma unroll
+        for (int i = i0; i < i0 + QI8_1/2; ++i) {
+            const int vi = __vsubss4((v[i/2] >> (4*(i%2))) & 0x0F0F0F0F, 0x04040404);
+            sumi_sc = __dp4a(vi, u[i], sumi_sc); // SIMD dot product
+        }
+
+        sumi += sumi_sc * scales[i0 / (QI8_1/2)];
+    }
+
+    return d3*d8 * sumi;
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+#define VDR_Q4_K_Q8_1_MMVQ 2
+#define VDR_Q4_K_Q8_1_MMQ  8
+
+// contiguous v/x values
+static __device__ __forceinline__ float vec_dot_q4_K_q8_1_impl_vmmq(
+    const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc,
+    const uint8_t * __restrict__ m, const half2 & dm4, const float * __restrict__ d8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR4_K; ++i) {
+        const int v0i = (v[0] >> (4*i)) & 0x0F0F0F0F;
+        const int v1i = (v[1] >> (4*i)) & 0x0F0F0F0F;
+
+        const int dot1 = __dp4a(v1i, u[2*i+1], __dp4a(v0i, u[2*i+0], 0)); // SIMD dot product
+        const int dot2 = __dp4a(0x01010101, u[2*i+1], __dp4a(0x01010101, u[2*i+0], 0)); // sum of u
+
+        sumf_d += d8[i] * (dot1 * sc[i]);
+        sumf_m += d8[i] * (dot2 * m[i]);  // multiply constant part of q4_K with sum of q8_1 values
+    }
+
+    const float2 dm4f = __half22float2(dm4);
+
+    return dm4f.x*sumf_d - dm4f.y*sumf_m;
+
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+// contiguous u/y values
+static __device__ __forceinline__ float vec_dot_q4_K_q8_1_impl_mmq(
+    const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc,
+    const uint8_t * __restrict__ m, const half2 & dm4, const half2 * __restrict__ ds8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR4_K*VDR_Q4_K_Q8_1_MMQ/QI8_1; ++i) {
+        int sumi_d = 0;
+
+#pragma unroll
+        for (int j = 0; j < QI8_1; ++j) {
+            sumi_d = __dp4a((v[j] >> (4*i)) & 0x0F0F0F0F, u[i*QI8_1 + j], sumi_d); // SIMD dot product
+        }
+
+        const float2 ds8f = __half22float2(ds8[i]);
+
+        sumf_d += ds8f.x * (sc[i] * sumi_d);
+        sumf_m += ds8f.y *   m[i]; // sum of q8_1 block * q4_K min val
+    }
+
+    const float2 dm4f = __half22float2(dm4);
+
+    return dm4f.x*sumf_d - dm4f.y*sumf_m;
+
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+#define VDR_Q5_K_Q8_1_MMVQ 2
+#define VDR_Q5_K_Q8_1_MMQ  8
+
+// contiguous v/x values
+static __device__ __forceinline__ float vec_dot_q5_K_q8_1_impl_vmmq(
+    const int * __restrict__ vl, const int * __restrict__ vh, const int * __restrict__ u, const uint8_t * __restrict__ sc,
+    const uint8_t * __restrict__ m, const half2 & dm5, const float * __restrict__ d8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR5_K; ++i) {
+        const int vl0i = (vl[0] >> (4*i)) & 0x0F0F0F0F;
+        const int vl1i = (vl[1] >> (4*i)) & 0x0F0F0F0F;
+
+        const int vh0i = ((vh[0] >> i) << 4) & 0x10101010;
+        const int vh1i = ((vh[1] >> i) << 4) & 0x10101010;
+
+        const int v0i = vl0i | vh0i;
+        const int v1i = vl1i | vh1i;
+
+        const int dot1 = __dp4a(v0i, u[2*i+0], __dp4a(v1i, u[2*i+1], 0)); // SIMD dot product
+        const int dot2 = __dp4a(0x01010101, u[2*i+0], __dp4a(0x01010101, u[2*i+1], 0)); // sum of u
+
+        sumf_d += d8[i] * (dot1 * sc[i]);
+        sumf_m += d8[i] * (dot2 * m[i]);
+
+    }
+
+    const float2 dm5f = __half22float2(dm5);
+
+    return dm5f.x*sumf_d - dm5f.y*sumf_m;
+
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+// contiguous u/y values
+static __device__ __forceinline__ float vec_dot_q5_K_q8_1_impl_mmq(
+    const int * __restrict__ v, const int * __restrict__ u, const uint8_t * __restrict__ sc,
+    const uint8_t * __restrict__ m, const half2 & dm4, const half2 * __restrict__ ds8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR5_K*VDR_Q5_K_Q8_1_MMQ/QI8_1; ++i) {
+        int sumi_d = 0;
+
+#pragma unroll
+        for (int j = 0; j < QI8_1; ++j) {
+            sumi_d = __dp4a(v[i*QI8_1 + j], u[i*QI8_1 + j], sumi_d); // SIMD dot product
+        }
+
+        const float2 ds8f = __half22float2(ds8[i]);
+
+        sumf_d += ds8f.x * (sc[i] * sumi_d);
+        sumf_m += ds8f.y *   m[i]; // sum of q8_1 block * q4_K min val
+    }
+
+    const float2 dm4f = __half22float2(dm4);
+
+    return dm4f.x*sumf_d - dm4f.y*sumf_m;
+
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+#define VDR_Q6_K_Q8_1_MMVQ 1
+#define VDR_Q6_K_Q8_1_MMQ  8
+
+// contiguous v/x values
+static __device__ __forceinline__ float vec_dot_q6_K_q8_1_impl_mmvq(
+    const int & vl, const int & vh, const int * __restrict__ u, const int8_t * __restrict__ scales,
+    const float & d, const float * __restrict__ d8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    float sumf = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR6_K; ++i) {
+        const int sc = scales[4*i];
+
+        const int vil = (vl >> (4*i)) & 0x0F0F0F0F;
+
+        const int vih = ((vh >> (4*i)) << 4) & 0x30303030;
+
+        const int vi = __vsubss4((vil | vih), 0x20202020); // vi = (vil | vih) - 32
+
+        sumf += d8[i] * (__dp4a(vi, u[i], 0) * sc); // SIMD dot product
+    }
+
+    return d*sumf;
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+// contiguous u/y values
+static __device__ __forceinline__ float vec_dot_q6_K_q8_1_impl_mmq(
+    const int * __restrict__ v, const int * __restrict__ u, const int8_t * __restrict__ sc,
+    const float & d6, const float * __restrict__ d8) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    float sumf_d = 0.0f;
+
+#pragma unroll
+    for (int i0 = 0; i0 < VDR_Q6_K_Q8_1_MMQ; i0 += 4) {
+        int2 sumi_d = {0, 0}; // 2 q6_K scales per q8_1 scale
+
+#pragma unroll
+        for (int i = i0; i < i0 + 2; ++i) {
+            sumi_d.x = __dp4a(v[2*i+0], u[2*i+0], sumi_d.x); // SIMD dot product
+            sumi_d.x = __dp4a(v[2*i+1], u[2*i+1], sumi_d.x); // SIMD dot product
+
+            sumi_d.y = __dp4a(v[2*i+4], u[2*i+4], sumi_d.y); // SIMD dot product
+            sumi_d.y = __dp4a(v[2*i+5], u[2*i+5], sumi_d.y); // SIMD dot product
+        }
+
+        sumf_d += d8[i0/4] * (sc[i0/2+0]*sumi_d.x + sc[i0/2+1]*sumi_d.y);
+    }
+
+    return d6 * sumf_d;
+
+#else
+    NO_DEVICE_CODE;
+#endif // __CUDA_ARCH__ >= MIN_CC_DP4A
+}
+
+static __device__ __forceinline__ float vec_dot_q4_0_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_q4_0 * bq4_0 = (const block_q4_0 *) vbq + kbx;
+
+    int v[VDR_Q4_0_Q8_1_MMVQ];
+    int u[2*VDR_Q4_0_Q8_1_MMVQ];
+
+#pragma unroll
+    for (int i = 0; i < VDR_Q4_0_Q8_1_MMVQ; ++i) {
+        v[i]     = get_int_from_uint8(bq4_0->qs, iqs + i);
+        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
+        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_0);
+    }
+
+    return vec_dot_q4_0_q8_1_impl<VDR_Q4_0_Q8_1_MMVQ>(v, u, bq4_0->d, bq8_1->ds);
+}
+
+
+static __device__ __forceinline__ float vec_dot_q4_1_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_q4_1 * bq4_1 = (const block_q4_1 *) vbq + kbx;
+
+    int v[VDR_Q4_1_Q8_1_MMVQ];
+    int u[2*VDR_Q4_1_Q8_1_MMVQ];
+
+#pragma unroll
+    for (int i = 0; i < VDR_Q4_1_Q8_1_MMVQ; ++i) {
+        v[i]    = get_int_from_uint8_aligned(bq4_1->qs, iqs + i);
+        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
+        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_1);
+    }
+
+    return vec_dot_q4_1_q8_1_impl<VDR_Q4_1_Q8_1_MMVQ>(v, u, bq4_1->dm, bq8_1->ds);
+}
+
+static __device__ __forceinline__ float vec_dot_q5_0_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_q5_0 * bq5_0 = (const block_q5_0 *) vbq + kbx;
+
+    int vl[VDR_Q5_0_Q8_1_MMVQ];
+    int vh[VDR_Q5_0_Q8_1_MMVQ];
+    int  u[2*VDR_Q5_0_Q8_1_MMVQ];
+
+#pragma unroll
+    for (int i = 0; i < VDR_Q5_0_Q8_1_MMVQ; ++i) {
+        vl[i]    = get_int_from_uint8(bq5_0->qs, iqs + i);
+        vh[i]    = get_int_from_uint8(bq5_0->qh, 0) >> (4 * (iqs + i));
+        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
+        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_0);
+    }
+
+    return vec_dot_q5_0_q8_1_impl<VDR_Q5_0_Q8_1_MMVQ>(vl, vh, u, bq5_0->d, bq8_1->ds);
+}
+
+static __device__ __forceinline__ float vec_dot_q5_1_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_q5_1 * bq5_1 = (const block_q5_1 *) vbq + kbx;
+
+    int vl[VDR_Q5_1_Q8_1_MMVQ];
+    int vh[VDR_Q5_1_Q8_1_MMVQ];
+    int  u[2*VDR_Q5_1_Q8_1_MMVQ];
+
+#pragma unroll
+    for (int i = 0; i < VDR_Q5_1_Q8_1_MMVQ; ++i) {
+        vl[i]   = get_int_from_uint8_aligned(bq5_1->qs, iqs + i);
+        vh[i]   = get_int_from_uint8_aligned(bq5_1->qh, 0) >> (4 * (iqs + i));
+        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
+        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_1);
+    }
+
+    return vec_dot_q5_1_q8_1_impl<VDR_Q5_1_Q8_1_MMVQ>(vl, vh, u, bq5_1->dm, bq8_1->ds);
+}
+
+static __device__ __forceinline__ float vec_dot_q8_0_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_q8_0 * bq8_0 = (const block_q8_0 *) vbq + kbx;
+
+    int v[VDR_Q8_0_Q8_1_MMVQ];
+    int u[VDR_Q8_0_Q8_1_MMVQ];
+
+#pragma unroll
+    for (int i = 0; i < VDR_Q8_0_Q8_1_MMVQ; ++i) {
+        v[i] = get_int_from_int8(bq8_0->qs, iqs + i);
+        u[i] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
+    }
+
+    return vec_dot_q8_0_q8_1_impl<float, VDR_Q8_0_Q8_1_MMVQ>(v, u, bq8_0->d, __low2half(bq8_1->ds));
+}
+
+static __device__ __forceinline__ float vec_dot_q2_K_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_q2_K * bq2_K = (const block_q2_K *) vbq + kbx;
+
+    const int bq8_offset = QR2_K * (iqs / QI8_1);
+    const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2);
+
+    const uint8_t * scales = bq2_K->scales + scale_offset;
+
+    const int v = get_int_from_uint8_aligned(bq2_K->qs, iqs);
+    int    u[QR2_K];
+    float d8[QR2_K];
+
+#pragma unroll
+    for (int i = 0; i < QR2_K; ++ i) {
+        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1);
+        d8[i] = __low2float(bq8_1[bq8_offset + i].ds);
+    }
+
+    return vec_dot_q2_K_q8_1_impl_mmvq(v, u, scales, bq2_K->dm, d8);
+}
+
+static __device__ __forceinline__ float vec_dot_q3_K_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_q3_K * bq3_K = (const block_q3_K *) vbq + kbx;
+
+    const int bq8_offset = QR3_K * (iqs / (QI3_K/2));
+    const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2);
+
+    const float d = bq3_K->d;
+
+    const int vl = get_int_from_uint8(bq3_K->qs, iqs);
+
+    // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted
+    const int vh = ~get_int_from_uint8(bq3_K->hmask, iqs % (QI3_K/2)) >> bq8_offset;
+
+    int    u[QR3_K];
+    float d8[QR3_K];
+
+#pragma unroll
+    for (int i = 0; i < QR3_K; ++i) {
+        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1);
+        d8[i] = __low2float(bq8_1[bq8_offset + i].ds);
+    }
+
+    return vec_dot_q3_K_q8_1_impl_mmvq(vl, vh, u, bq3_K->scales, scale_offset, d, d8);
+}
+
+static __device__ __forceinline__ float vec_dot_q4_K_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_q4_K * bq4_K = (const block_q4_K *) vbq + kbx;
+
+    int    v[2];
+    int    u[2*QR4_K];
+    float d8[QR4_K];
+
+    // iqs is in 0,2..30. bq8_offset = iqs/4 -> bq8_offset = 0, 2, 4, 6
+    const int bq8_offset = QR4_K * ((iqs/2) / (QI8_1/2));
+
+    // iqs = 0....3 -> bq8_offset = 0, want q4_offset = 0, 4, 8, 12
+    // iqs = 4....7 -> bq8_offset = 2, want q4_offset = 32, 36, 40, 44
+    // iqs = 8...11 -> bq8_offset = 4, want q4_offset = 64, 68, 72, 76
+    // iqs = 12..15 -> bq8_offset = 6, want q4_offset = 96, 100, 104, 108
+
+    const int * q4 = (const int *)(bq4_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4));
+    v[0] = q4[0];
+    v[1] = q4[4];
+
+    const uint16_t * scales = (const uint16_t *)bq4_K->scales;
+    uint16_t aux[2];
+    const int j = bq8_offset/2;
+    if (j < 2) {
+        aux[0] = scales[j+0] & 0x3f3f;
+        aux[1] = scales[j+2] & 0x3f3f;
+    } else {
+        aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2);
+        aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2);
+    }
+    const uint8_t * sc = (const uint8_t *)aux;
+    const uint8_t * m  = sc + 2;
+
+    for (int i = 0; i < QR4_K; ++i) {
+        const block_q8_1 * bq8i = bq8_1 + bq8_offset + i;
+        d8[i] = __low2float(bq8i->ds);
+
+        const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4);
+        u[2*i+0] = q8[0];
+        u[2*i+1] = q8[4];
+    }
+
+    return vec_dot_q4_K_q8_1_impl_vmmq(v, u, sc, m, bq4_K->dm, d8);
+}
+
+static __device__ __forceinline__ float vec_dot_q5_K_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_q5_K * bq5_K = (const block_q5_K *) vbq + kbx;
+
+    int   vl[2];
+    int   vh[2];
+    int    u[2*QR5_K];
+    float d8[QR5_K];
+
+    const int bq8_offset = QR5_K * ((iqs/2) / (QI8_1/2));
+    const int * ql = (const int *)(bq5_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4));
+    const int * qh = (const int *)(bq5_K->qh + 4 * ((iqs/2)%4));
+
+    vl[0] = ql[0];
+    vl[1] = ql[4];
+
+    vh[0] = qh[0] >> bq8_offset;
+    vh[1] = qh[4] >> bq8_offset;
+
+    const uint16_t * scales = (const uint16_t *)bq5_K->scales;
+    uint16_t aux[2];
+    const int j = bq8_offset/2;
+    if (j < 2) {
+        aux[0] = scales[j+0] & 0x3f3f;
+        aux[1] = scales[j+2] & 0x3f3f;
+    } else {
+        aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2);
+        aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2);
+    }
+    const uint8_t * sc = (const uint8_t *)aux;
+    const uint8_t * m  = sc + 2;
+
+#pragma unroll
+    for (int i = 0; i < QR5_K; ++i) {
+        const block_q8_1 * bq8i = bq8_1 + bq8_offset + i;
+        d8[i] = __low2float(bq8i->ds);
+
+        const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4);
+        u[2*i+0] = q8[0];
+        u[2*i+1] = q8[4];
+    }
+
+    return vec_dot_q5_K_q8_1_impl_vmmq(vl, vh, u, sc, m, bq5_K->dm, d8);
+}
+
+static __device__ __forceinline__ float vec_dot_q6_K_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_q6_K * bq6_K = (const block_q6_K *) vbq + kbx;
+
+    const int bq8_offset = 2 * QR6_K * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/4);
+    const int scale_offset = (QI6_K/4) * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/8);
+    const int vh_shift = 2 * ((iqs % (QI6_K/2)) / (QI6_K/4));
+
+    const int vl = get_int_from_uint8(bq6_K->ql, iqs);
+    const int vh = get_int_from_uint8(bq6_K->qh, (QI6_K/4) * (iqs / (QI6_K/2)) + iqs % (QI6_K/4)) >> vh_shift;
+
+    const int8_t * scales = bq6_K->scales + scale_offset;
+
+    int    u[QR6_K];
+    float d8[QR6_K];
+
+#pragma unroll
+    for (int i = 0; i < QR6_K; ++i) {
+        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + 2*i].qs, iqs % QI8_1);
+        d8[i] = __low2float(bq8_1[bq8_offset + 2*i].ds);
+    }
+
+    return vec_dot_q6_K_q8_1_impl_mmvq(vl, vh, u, scales, bq6_K->d, d8);
+}
+
+static __device__ __forceinline__ float vec_dot_iq2_xxs_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+    const block_iq2_xxs * bq2 = (const block_iq2_xxs *) vbq + kbx;
+
+#if QR2_XXS == 8
+    const int ib32 = iqs;
+    const uint16_t * q2 = bq2->qs + 4*ib32;
+    const uint8_t  * aux8 = (const uint8_t *)q2;
+    const int8_t   * q8 = bq8_1[ib32].qs;
+    uint32_t aux32 = q2[2] | (q2[3] << 16);
+    int sumi = 0;
+    for (int l = 0; l < 4; ++l) {
+        const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]);
+        const uint8_t  signs = ksigns_iq2xs[aux32 & 127];
+        for (int j = 0; j < 8; ++j) {
+            sumi += q8[j] * grid[j] * (signs & kmask_iq2xs[j] ? -1 : 1);
+        }
+        q8 += 8;
+        aux32 >>= 7;
+    }
+    const float d = (float)bq2->d * (0.5f + aux32) * __low2float(bq8_1[ib32].ds) * 0.25f;
+    return d * sumi;
+#else
+    // iqs is 0...15
+    const int ib32 = iqs/2;
+    const int il = iqs%2;
+    const uint16_t * q2 = bq2->qs + 4*ib32;
+    const uint8_t  * aux8 = (const uint8_t *)q2;
+    const uint8_t  * grid1 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+0]);
+    const uint8_t  * grid2 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+1]);
+    const uint32_t aux32 = q2[2] | (q2[3] << 16);
+    const float d = (float)bq2->d * (0.5f + (aux32 >> 28)) * __low2float(bq8_1[ib32].ds) * 0.25f;
+    const uint8_t signs1 = ksigns_iq2xs[(aux32 >> 14*il) & 127];
+    const uint8_t signs2 = ksigns_iq2xs[(aux32 >> (14*il + 7)) & 127];
+    const int8_t * q8 = bq8_1[ib32].qs + 16*il;
+    int sumi1 = 0, sumi2 = 0;
+    for (int j = 0; j < 8; ++j) {
+        sumi1 += q8[j+0] * grid1[j] * (signs1 & kmask_iq2xs[j] ? -1 : 1);
+        sumi2 += q8[j+8] * grid2[j] * (signs2 & kmask_iq2xs[j] ? -1 : 1);
+    }
+    return d * (sumi1 + sumi2);
+#endif
+}
+
+static __device__ __forceinline__ float vec_dot_iq2_xs_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    const block_iq2_xs * bq2 = (const block_iq2_xs *) vbq + kbx;
+
+    const int ib32 = iqs;
+    const uint16_t * q2 = bq2->qs + 4*ib32;
+    const int8_t   * q8 = bq8_1[ib32].qs;
+    const uint8_t ls1 = bq2->scales[ib32] & 0xf;
+    const uint8_t ls2 = bq2->scales[ib32] >>  4;
+    int sumi1 = 0;
+    for (int l = 0; l < 2; ++l) {
+        const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511));
+        const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9));
+        const int grid_l = __vsub4(grid[0] ^ signs[0], signs[0]);
+        const int grid_h = __vsub4(grid[1] ^ signs[1], signs[1]);
+        sumi1 = __dp4a(grid_l, *((const int *)q8 + 0), sumi1);
+        sumi1 = __dp4a(grid_h, *((const int *)q8 + 1), sumi1);
+        q8 += 8;
+    }
+    int sumi2 = 0;
+    for (int l = 2; l < 4; ++l) {
+        const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511));
+        const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9));
+        const int grid_l = __vsub4(grid[0] ^ signs[0], signs[0]);
+        const int grid_h = __vsub4(grid[1] ^ signs[1], signs[1]);
+        sumi2 = __dp4a(grid_l, *((const int *)q8 + 0), sumi2);
+        sumi2 = __dp4a(grid_h, *((const int *)q8 + 1), sumi2);
+        q8 += 8;
+    }
+    const float d = (float)bq2->d * __low2float(bq8_1[ib32].ds) * 0.25f;
+    return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2);
+#else
+    GGML_UNUSED(ksigns64);
+    NO_DEVICE_CODE;
+#endif
+}
+
+// TODO
+static __device__ __forceinline__ float vec_dot_iq2_s_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    const block_iq2_s * bq2 = (const block_iq2_s *) vbq + kbx;
+
+    const int ib32 = iqs;
+    const int8_t  * q8 = bq8_1[ib32].qs;
+    const uint8_t * signs = bq2->qs + QK_K/8 + 4*ib32;
+    const uint8_t ls1 = bq2->scales[ib32] & 0xf;
+    const uint8_t ls2 = bq2->scales[ib32] >>  4;
+    int sumi1 = 0;
+    for (int l = 0; l < 2; ++l) {
+        const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300)));
+        const uint32_t signs0 = __vcmpeq4(((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201);
+        const uint32_t signs1 = __vcmpeq4(((signs[l] >>  4) * 0x01010101) & 0x08040201, 0x08040201);
+        const int grid_l = __vsub4(grid[0] ^ signs0, signs0);
+        const int grid_h = __vsub4(grid[1] ^ signs1, signs1);
+        sumi1 = __dp4a(grid_l, *((const int *)q8 + 0), sumi1);
+        sumi1 = __dp4a(grid_h, *((const int *)q8 + 1), sumi1);
+        q8 += 8;
+    }
+    int sumi2 = 0;
+    for (int l = 2; l < 4; ++l) {
+        const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300)));
+        const uint32_t signs0 = __vcmpeq4(((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201);
+        const uint32_t signs1 = __vcmpeq4(((signs[l] >>  4) * 0x01010101) & 0x08040201, 0x08040201);
+        const int grid_l = __vsub4(grid[0] ^ signs0, signs0);
+        const int grid_h = __vsub4(grid[1] ^ signs1, signs1);
+        sumi2 = __dp4a(grid_l, *((const int *)q8 + 0), sumi2);
+        sumi2 = __dp4a(grid_h, *((const int *)q8 + 1), sumi2);
+        q8 += 8;
+    }
+    const float d = (float)bq2->d * __low2float(bq8_1[ib32].ds) * 0.25f;
+    return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2);
+#else
+    GGML_UNUSED(ksigns64);
+    NO_DEVICE_CODE;
+#endif
+}
+
+static __device__ __forceinline__ float vec_dot_iq3_xxs_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    const block_iq3_xxs * bq2 = (const block_iq3_xxs *) vbq + kbx;
+
+    const int ib32 = iqs;
+    const uint8_t  * q3 = bq2->qs + 8*ib32;
+    const uint16_t * gas = (const uint16_t *)(bq2->qs + QK_K/4) + 2*ib32;
+    const int8_t   * q8 = bq8_1[ib32].qs;
+    uint32_t aux32 = gas[0] | (gas[1] << 16);
+    int sumi = 0;
+    for (int l = 0; l < 4; ++l) {
+        const uint32_t * grid1 = iq3xxs_grid + q3[2*l+0];
+        const uint32_t * grid2 = iq3xxs_grid + q3[2*l+1];
+        const uint32_t * signs = (const uint32_t *)(ksigns64 + (aux32 & 127));
+        const int grid_l = __vsub4(grid1[0] ^ signs[0], signs[0]);
+        const int grid_h = __vsub4(grid2[0] ^ signs[1], signs[1]);
+        sumi = __dp4a(grid_l, *((int *)q8+0), sumi);
+        sumi = __dp4a(grid_h, *((int *)q8+1), sumi);
+        q8 += 8;
+        aux32 >>= 7;
+    }
+    const float d = (float)bq2->d * (0.5f + aux32) * __low2float(bq8_1[ib32].ds) * 0.5f;
+    return d * sumi;
+#else
+    NO_DEVICE_CODE;
+#endif
+}
+
+// TODO: don't use lookup table for signs
+static __device__ __forceinline__ float vec_dot_iq3_s_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    const block_iq3_s * bq2 = (const block_iq3_s *) vbq + kbx;
+
+    const int ib32 = iqs;
+    const uint8_t  * qs = bq2->qs + 8*ib32;
+    const int8_t   * q8 = bq8_1[ib32].qs;
+    int sumi = 0;
+    for (int l = 0; l < 4; ++l) {
+        const uint32_t * grid1 = iq3s_grid + (qs[2*l+0] | ((bq2->qh[ib32] << (8 - 2*l)) & 256));
+        const uint32_t * grid2 = iq3s_grid + (qs[2*l+1] | ((bq2->qh[ib32] << (7 - 2*l)) & 256));
+        uint32_t signs0 = __vcmpeq4(((bq2->signs[4*ib32+l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201);
+        uint32_t signs1 = __vcmpeq4(((bq2->signs[4*ib32+l] >>  4) * 0x01010101) & 0x08040201, 0x08040201);
+        const int grid_l = __vsub4(grid1[0] ^ signs0, signs0);
+        const int grid_h = __vsub4(grid2[0] ^ signs1, signs1);
+        sumi = __dp4a(grid_l, *((int *)q8+0), sumi);
+        sumi = __dp4a(grid_h, *((int *)q8+1), sumi);
+        q8 += 8;
+    }
+    const float d = (float)bq2->d * (1 + 2*((bq2->scales[ib32/2] >> 4*(ib32%2)) & 0xf)) * __low2float(bq8_1[ib32].ds);
+    return d * sumi;
+#else
+    NO_DEVICE_CODE;
+#endif
+}
+
+static __device__ __forceinline__ float vec_dot_iq1_s_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+    const block_iq1_s * bq1 = (const block_iq1_s *) vbq + kbx;
+
+    const int ib32 = iqs;
+    int sumi = 0;
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    const int * q8 = (const int *)bq8_1[ib32].qs;
+    for (int l = 0; l < 4; ++l) {
+        const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8)));
+        int grid0 = grid[0] & 0x0f0f0f0f;
+        int grid1 = (grid[0] >> 4) & 0x0f0f0f0f;
+        sumi = __dp4a(q8[2*l+1], grid1, __dp4a(q8[2*l+0], grid0, sumi));
+    }
+#else
+    const int8_t * q8 = bq8_1[ib32].qs;
+    for (int l = 0; l < 4; ++l) {
+        const uint8_t * grid = (const uint8_t *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8)));
+        for (int j = 0; j < 4; ++j) {
+            sumi += q8[j] * (grid[j] & 0xf) + q8[j+4] * (grid[j] >> 4);
+        }
+        q8 += 8;
+    }
+#endif
+    const float delta = bq1->qh[ib32] & 0x8000 ? -1-IQ1S_DELTA : -1+IQ1S_DELTA;
+    const float d1q = (float)bq1->d * (2*((bq1->qh[ib32] >> 12) & 7) + 1);
+    const float d = d1q * __low2float (bq8_1[ib32].ds);
+    const float m = d1q * __high2float(bq8_1[ib32].ds);
+    return d * sumi + m * delta;
+}
+
+static __device__ __forceinline__ float vec_dot_iq1_m_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+    const block_iq1_m * bq1 = (const block_iq1_m *) vbq + kbx;
+
+    const int ib32 = iqs;
+    int   sumi[2] = {0, 0};
+    float sumf[2] = {0.f, 0.f};
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    const int * q8 = (const int *)bq8_1[ib32].qs;
+    for (int l = 0; l < 4; ++l) {
+        const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 7) << 8)));
+        int grid0 = grid[0] & 0x0f0f0f0f;
+        int grid1 = (grid[0] >> 4) & 0x0f0f0f0f;
+        sumi[l/2] = __dp4a(q8[2*l+1], grid1, __dp4a(q8[2*l+0], grid0, sumi[l/2]));
+        const float delta = (bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 0x08 ? -1-IQ1M_DELTA : -1+IQ1M_DELTA;
+        const int sumy = __dp4a(q8[2*l+1], 0x01010101, __dp4a(q8[2*l+0], 0x01010101, 0));
+        sumf[l/2] += delta*sumy;
+    }
+#else
+    const int8_t * q8 = bq8_1[ib32].qs;
+    for (int l = 0; l < 4; ++l) {
+        const uint8_t * grid = (const uint8_t *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8)));
+        int sumy = 0;
+        for (int j = 0; j < 4; ++j) {
+            sumi[l/2] += q8[j] * (grid[j] & 0xf) + q8[j+4] * (grid[j] >> 4);
+            sumy += q8[j] + q8[j+4];
+        }
+        const float delta = (bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 0x08 ? -1-IQ1M_DELTA : -1+IQ1M_DELTA;
+        sumf[l/2] += delta*sumy;
+        q8 += 8;
+    }
+#endif
+    iq1m_scale_t scale;
+    const uint16_t * sc = (const uint16_t *)bq1->scales;
+    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+    const float d = (float)scale.f16 * __low2float (bq8_1[ib32].ds);
+    return d * ((sumi[0] + sumf[0]) * (2*((sc[ib32/2] >> 6*(ib32%2)) & 0x7) + 1) + (sumi[1] + sumf[1]) * (2*((sc[ib32/2] >> (6*(ib32%2)+3)) & 0x7) + 1));
+}
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+static __device__ __forceinline__ void get_int_from_table_16(const uint32_t & q4, const uint8_t * values,
+        int & val1, int & val2) {
+
+    uint32_t aux32; const uint8_t * q8 = (const uint8_t *)&aux32;
+    aux32 = q4 & 0x0f0f0f0f;
+    uint16_t v1 = values[q8[0]] | (values[q8[1]] << 8);
+    uint16_t v2 = values[q8[2]] | (values[q8[3]] << 8);
+    val1 = v1 | (v2 << 16);
+    aux32 = (q4 >> 4) & 0x0f0f0f0f;
+    v1 = values[q8[0]] | (values[q8[1]] << 8);
+    v2 = values[q8[2]] | (values[q8[3]] << 8);
+    val2 = v1 | (v2 << 16);
+}
+#endif
+
+static __device__ __forceinline__ float vec_dot_iq4_nl_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+    const block_iq4_nl * bq = (const block_iq4_nl *) vbq + kbx;
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    const uint16_t * q4 = (const uint16_t *)bq->qs + 2*iqs;
+    const int32_t  * q8 = (const int32_t  *)bq8_1->qs + iqs;
+
+    const uint8_t * values = (const uint8_t *)kvalues_iq4nl;
+
+    int v1, v2;
+    int sumi1 = 0, sumi2 = 0;
+    for (int l = 0; l < VDR_Q4_0_Q8_1_MMVQ; ++l) {
+        const uint32_t aux = q4[2*l] | (q4[2*l+1] << 16);
+        get_int_from_table_16(aux, values, v1, v2);
+        sumi1 = __dp4a(v1, q8[l+0], sumi1);
+        sumi2 = __dp4a(v2, q8[l+4], sumi2);
+    }
+
+#else
+    const uint8_t * q4 = bq->qs + 4*iqs;
+    const int8_t  * q8 = bq8_1->qs + 4*iqs;
+
+    int sumi1 = 0, sumi2 = 0;
+    for (int l = 0; l < 4*VDR_Q4_0_Q8_1_MMVQ; ++l) {
+        sumi1 += q8[l+ 0] * kvalues_iq4nl[q4[l] & 0xf];
+        sumi2 += q8[l+16] * kvalues_iq4nl[q4[l] >>  4];
+    }
+#endif
+    const float d = (float)bq->d * __low2float(bq8_1->ds);
+    return d * (sumi1 + sumi2);
+}
+
+static __device__ __forceinline__ float vec_dot_iq4_xs_q8_1(
+    const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & kbx, const int & iqs) {
+
+#if __CUDA_ARCH__ >= MIN_CC_DP4A // lowest compute capability for integer intrinsics
+    const block_iq4_xs * bq4 = (const block_iq4_xs *) vbq + kbx;
+    const uint8_t * values = (const uint8_t *)kvalues_iq4nl;
+
+    // iqs is 0...7
+    const int ib32 = iqs;
+    const int32_t  * q8 = (const int *)bq8_1[ib32].qs;
+    const uint32_t * q4 = (const uint32_t *)bq4->qs + 4*ib32;
+    const int8_t ls = ((bq4->scales_l[ib32/2] >> 4*(ib32%2)) & 0xf) | (((bq4->scales_h >> 2*ib32) & 3) << 4);
+    const float d = (float)bq4->d * (ls - 32) * __low2float(bq8_1[ib32].ds);
+    int v1, v2;
+    int sumi1 = 0, sumi2 = 0;
+    for (int j = 0; j < 4; ++j) {
+        get_int_from_table_16(q4[j], values, v1, v2);
+        sumi1 = __dp4a(v1, q8[j+0], sumi1);
+        sumi2 = __dp4a(v2, q8[j+4], sumi2);
+    }
+    return d * (sumi1 + sumi2);
+#else
+    return vec_dot_iq4_xs_q8_1(vbq, bq8_1, kbx, iqs);
+#endif
+}
diff --git a/ggml/src/ggml-impl.h b/ggml/src/ggml-impl.h
new file mode 100644 (file)
index 0000000..1d23361
--- /dev/null
@@ -0,0 +1,651 @@
+#pragma once
+
+#include "ggml.h"
+
+// GGML internal header
+
+#include <assert.h>
+#include <stdlib.h> // load `stdlib.h` before other headers to work around MinGW bug: https://sourceforge.net/p/mingw-w64/bugs/192/
+#include <stddef.h>
+#include <stdbool.h>
+#include <string.h> // memcpy
+#include <math.h>   // fabsf
+
+#undef MIN
+#undef MAX
+
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+#if defined(_MSC_VER)
+
+#define m512bh(p) p
+#define m512i(p) p
+
+#else
+
+#define m512bh(p) (__m512bh)(p)
+#define m512i(p) (__m512i)(p)
+
+#endif
+
+/**
+ * Converts brain16 to float32.
+ *
+ * The bfloat16 floating point format has the following structure:
+ *
+ *       ┌sign
+ *       │
+ *       │   ┌exponent
+ *       │   │
+ *       │   │      ┌mantissa
+ *       │   │      │
+ *       │┌──┴───┐┌─┴───┐
+ *     0b0000000000000000 brain16
+ *
+ * Since bf16 has the same number of exponent bits as a 32bit float,
+ * encoding and decoding numbers becomes relatively straightforward.
+ *
+ *       ┌sign
+ *       │
+ *       │   ┌exponent
+ *       │   │
+ *       │   │      ┌mantissa
+ *       │   │      │
+ *       │┌──┴───┐┌─┴───────────────────┐
+ *     0b00000000000000000000000000000000 IEEE binary32
+ *
+ * For comparison, the standard fp16 format has fewer exponent bits.
+ *
+ *       ┌sign
+ *       │
+ *       │  ┌exponent
+ *       │  │
+ *       │  │    ┌mantissa
+ *       │  │    │
+ *       │┌─┴─┐┌─┴──────┐
+ *     0b0000000000000000 IEEE binary16
+ *
+ * @see IEEE 754-2008
+ */
+static inline float ggml_compute_bf16_to_fp32(ggml_bf16_t h) {
+    union {
+        float f;
+        uint32_t i;
+    } u;
+    u.i = (uint32_t)h.bits << 16;
+    return u.f;
+}
+
+/**
+ * Converts float32 to brain16.
+ *
+ * This function is binary identical to AMD Zen4 VCVTNEPS2BF16.
+ * Subnormals shall be flushed to zero, and NANs will be quiet.
+ * This code should vectorize nicely if using modern compilers.
+ */
+static inline ggml_bf16_t ggml_compute_fp32_to_bf16(float s) {
+    ggml_bf16_t h;
+    union {
+        float f;
+        uint32_t i;
+    } u;
+    u.f = s;
+    if ((u.i & 0x7fffffff) > 0x7f800000) { /* nan */
+        h.bits = (u.i >> 16) | 64; /* force to quiet */
+        return h;
+    }
+    if (!(u.i & 0x7f800000)) { /* subnormal */
+        h.bits = (u.i & 0x80000000) >> 16; /* flush to zero */
+        return h;
+    }
+    h.bits = (u.i + (0x7fff + ((u.i >> 16) & 1))) >> 16;
+    return h;
+}
+
+#define GGML_FP32_TO_BF16(x) ggml_compute_fp32_to_bf16(x)
+#define GGML_BF16_TO_FP32(x) ggml_compute_bf16_to_fp32(x)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// static_assert should be a #define, but if it's not,
+// fall back to the _Static_assert C11 keyword.
+// if C99 - static_assert is noop
+// ref: https://stackoverflow.com/a/53923785/4039976
+#ifndef __cplusplus
+#ifndef static_assert
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201100L)
+#define static_assert(cond, msg) _Static_assert(cond, msg)
+#else
+#define static_assert(cond, msg) struct global_scope_noop_trick
+#endif
+#endif
+#endif
+
+// __FMA__ and __F16C__ are not defined in MSVC, however they are implied with AVX2/AVX512
+#if defined(_MSC_VER) && (defined(__AVX2__) || defined(__AVX512F__))
+#ifndef __FMA__
+#define __FMA__
+#endif
+#ifndef __F16C__
+#define __F16C__
+#endif
+#endif
+
+// __SSE3__ and __SSSE3__ are not defined in MSVC, but SSE3/SSSE3 are present when AVX/AVX2/AVX512 are available
+#if defined(_MSC_VER) && (defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__))
+#ifndef __SSE3__
+#define __SSE3__
+#endif
+#ifndef __SSSE3__
+#define __SSSE3__
+#endif
+#endif
+
+#if defined(__ARM_FEATURE_SVE)
+#include <arm_sve.h>
+#endif
+
+// 16-bit float
+// on Arm, we use __fp16
+// on x86, we use uint16_t
+#if defined(__ARM_NEON)
+
+// if YCM cannot find <arm_neon.h>, make a symbolic link to it, for example:
+//
+//   $ ln -sfn /Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/arm_neon.h ./src/
+//
+#include <arm_neon.h>
+
+#ifdef _MSC_VER
+
+typedef uint16_t ggml_fp16_internal_t;
+
+#define ggml_vld1q_u32(w,x,y,z) { ((w) + ((uint64_t)(x) << 32)), ((y) + ((uint64_t)(z) << 32)) }
+
+#else
+
+typedef __fp16 ggml_fp16_internal_t;
+
+#define ggml_vld1q_u32(w,x,y,z) { (w), (x), (y), (z) }
+
+#endif // _MSC_VER
+
+#if !defined(__aarch64__)
+
+// 32-bit ARM compatibility
+
+// vaddvq_s16
+// vpaddq_s16
+// vpaddq_s32
+// vaddvq_s32
+// vaddvq_f32
+// vmaxvq_f32
+// vcvtnq_s32_f32
+// vzip1_u8
+// vzip2_u8
+
+inline static int32_t vaddvq_s16(int16x8_t v) {
+    return
+        (int32_t)vgetq_lane_s16(v, 0) + (int32_t)vgetq_lane_s16(v, 1) +
+        (int32_t)vgetq_lane_s16(v, 2) + (int32_t)vgetq_lane_s16(v, 3) +
+        (int32_t)vgetq_lane_s16(v, 4) + (int32_t)vgetq_lane_s16(v, 5) +
+        (int32_t)vgetq_lane_s16(v, 6) + (int32_t)vgetq_lane_s16(v, 7);
+}
+
+inline static int16x8_t vpaddq_s16(int16x8_t a, int16x8_t b) {
+    int16x4_t a0 = vpadd_s16(vget_low_s16(a), vget_high_s16(a));
+    int16x4_t b0 = vpadd_s16(vget_low_s16(b), vget_high_s16(b));
+    return vcombine_s16(a0, b0);
+}
+
+inline static int32x4_t vpaddq_s32(int32x4_t a, int32x4_t b) {
+    int32x2_t a0 = vpadd_s32(vget_low_s32(a), vget_high_s32(a));
+    int32x2_t b0 = vpadd_s32(vget_low_s32(b), vget_high_s32(b));
+    return vcombine_s32(a0, b0);
+}
+
+inline static int32_t vaddvq_s32(int32x4_t v) {
+    return vgetq_lane_s32(v, 0) + vgetq_lane_s32(v, 1) + vgetq_lane_s32(v, 2) + vgetq_lane_s32(v, 3);
+}
+
+inline static float vaddvq_f32(float32x4_t v) {
+    return vgetq_lane_f32(v, 0) + vgetq_lane_f32(v, 1) + vgetq_lane_f32(v, 2) + vgetq_lane_f32(v, 3);
+}
+
+inline static float vmaxvq_f32(float32x4_t v) {
+    return
+        MAX(MAX(vgetq_lane_f32(v, 0), vgetq_lane_f32(v, 1)),
+            MAX(vgetq_lane_f32(v, 2), vgetq_lane_f32(v, 3)));
+}
+
+inline static int32x4_t vcvtnq_s32_f32(float32x4_t v) {
+    int32x4_t res;
+
+    res[0] = roundf(vgetq_lane_f32(v, 0));
+    res[1] = roundf(vgetq_lane_f32(v, 1));
+    res[2] = roundf(vgetq_lane_f32(v, 2));
+    res[3] = roundf(vgetq_lane_f32(v, 3));
+
+    return res;
+}
+
+inline static uint8x8_t vzip1_u8(uint8x8_t a, uint8x8_t b) {
+    uint8x8_t res;
+
+    res[0] = a[0]; res[1] = b[0];
+    res[2] = a[1]; res[3] = b[1];
+    res[4] = a[2]; res[5] = b[2];
+    res[6] = a[3]; res[7] = b[3];
+
+    return res;
+}
+
+inline static uint8x8_t vzip2_u8(uint8x8_t a, uint8x8_t b) {
+    uint8x8_t res;
+
+    res[0] = a[4]; res[1] = b[4];
+    res[2] = a[5]; res[3] = b[5];
+    res[4] = a[6]; res[5] = b[6];
+    res[6] = a[7]; res[7] = b[7];
+
+    return res;
+}
+
+// vld1q_s16_x2
+// vld1q_u8_x2
+// vld1q_u8_x4
+// vld1q_s8_x2
+// vld1q_s8_x4
+// TODO: double-check these work correctly
+
+typedef struct ggml_int16x8x2_t {
+    int16x8_t val[2];
+} ggml_int16x8x2_t;
+
+inline static ggml_int16x8x2_t ggml_vld1q_s16_x2(const int16_t * ptr) {
+    ggml_int16x8x2_t res;
+
+    res.val[0] = vld1q_s16(ptr + 0);
+    res.val[1] = vld1q_s16(ptr + 8);
+
+    return res;
+}
+
+typedef struct ggml_uint8x16x2_t {
+    uint8x16_t val[2];
+} ggml_uint8x16x2_t;
+
+inline static ggml_uint8x16x2_t ggml_vld1q_u8_x2(const uint8_t * ptr) {
+    ggml_uint8x16x2_t res;
+
+    res.val[0] = vld1q_u8(ptr + 0);
+    res.val[1] = vld1q_u8(ptr + 16);
+
+    return res;
+}
+
+typedef struct ggml_uint8x16x4_t {
+    uint8x16_t val[4];
+} ggml_uint8x16x4_t;
+
+inline static ggml_uint8x16x4_t ggml_vld1q_u8_x4(const uint8_t * ptr) {
+    ggml_uint8x16x4_t res;
+
+    res.val[0] = vld1q_u8(ptr + 0);
+    res.val[1] = vld1q_u8(ptr + 16);
+    res.val[2] = vld1q_u8(ptr + 32);
+    res.val[3] = vld1q_u8(ptr + 48);
+
+    return res;
+}
+
+typedef struct ggml_int8x16x2_t {
+    int8x16_t val[2];
+} ggml_int8x16x2_t;
+
+inline static ggml_int8x16x2_t ggml_vld1q_s8_x2(const int8_t * ptr) {
+    ggml_int8x16x2_t res;
+
+    res.val[0] = vld1q_s8(ptr + 0);
+    res.val[1] = vld1q_s8(ptr + 16);
+
+    return res;
+}
+
+typedef struct ggml_int8x16x4_t {
+    int8x16_t val[4];
+} ggml_int8x16x4_t;
+
+inline static ggml_int8x16x4_t ggml_vld1q_s8_x4(const int8_t * ptr) {
+    ggml_int8x16x4_t res;
+
+    res.val[0] = vld1q_s8(ptr + 0);
+    res.val[1] = vld1q_s8(ptr + 16);
+    res.val[2] = vld1q_s8(ptr + 32);
+    res.val[3] = vld1q_s8(ptr + 48);
+
+    return res;
+}
+
+// NOTE: not tested
+inline static int8x16_t ggml_vqtbl1q_s8(int8x16_t a, uint8x16_t b) {
+    int8x16_t res;
+
+    res[ 0] = a[b[ 0]];
+    res[ 1] = a[b[ 1]];
+    res[ 2] = a[b[ 2]];
+    res[ 3] = a[b[ 3]];
+    res[ 4] = a[b[ 4]];
+    res[ 5] = a[b[ 5]];
+    res[ 6] = a[b[ 6]];
+    res[ 7] = a[b[ 7]];
+    res[ 8] = a[b[ 8]];
+    res[ 9] = a[b[ 9]];
+    res[10] = a[b[10]];
+    res[11] = a[b[11]];
+    res[12] = a[b[12]];
+    res[13] = a[b[13]];
+    res[14] = a[b[14]];
+    res[15] = a[b[15]];
+
+    return res;
+}
+
+// NOTE: not tested
+inline static uint8x16_t ggml_vqtbl1q_u8(uint8x16_t a, uint8x16_t b) {
+    uint8x16_t res;
+
+    res[ 0] = a[b[ 0]];
+    res[ 1] = a[b[ 1]];
+    res[ 2] = a[b[ 2]];
+    res[ 3] = a[b[ 3]];
+    res[ 4] = a[b[ 4]];
+    res[ 5] = a[b[ 5]];
+    res[ 6] = a[b[ 6]];
+    res[ 7] = a[b[ 7]];
+    res[ 8] = a[b[ 8]];
+    res[ 9] = a[b[ 9]];
+    res[10] = a[b[10]];
+    res[11] = a[b[11]];
+    res[12] = a[b[12]];
+    res[13] = a[b[13]];
+    res[14] = a[b[14]];
+    res[15] = a[b[15]];
+
+    return res;
+}
+
+#else
+
+#define ggml_int16x8x2_t  int16x8x2_t
+#define ggml_uint8x16x2_t uint8x16x2_t
+#define ggml_uint8x16x4_t uint8x16x4_t
+#define ggml_int8x16x2_t  int8x16x2_t
+#define ggml_int8x16x4_t  int8x16x4_t
+
+#define ggml_vld1q_s16_x2 vld1q_s16_x2
+#define ggml_vld1q_u8_x2  vld1q_u8_x2
+#define ggml_vld1q_u8_x4  vld1q_u8_x4
+#define ggml_vld1q_s8_x2  vld1q_s8_x2
+#define ggml_vld1q_s8_x4  vld1q_s8_x4
+#define ggml_vqtbl1q_s8   vqtbl1q_s8
+#define ggml_vqtbl1q_u8   vqtbl1q_u8
+
+#endif // !defined(__aarch64__)
+
+#if !defined(__ARM_FEATURE_DOTPROD)
+
+inline static int32x4_t ggml_vdotq_s32(int32x4_t acc, int8x16_t a, int8x16_t b) {
+    const int16x8_t p0 = vmull_s8(vget_low_s8 (a), vget_low_s8 (b));
+    const int16x8_t p1 = vmull_s8(vget_high_s8(a), vget_high_s8(b));
+
+    return vaddq_s32(acc, vaddq_s32(vpaddlq_s16(p0), vpaddlq_s16(p1)));
+}
+
+#else
+
+#define ggml_vdotq_s32(a, b, c) vdotq_s32(a, b, c)
+
+#endif // !defined(__ARM_FEATURE_DOTPROD)
+
+#endif // defined(__ARM_NEON)
+
+#if defined(__ARM_NEON) && !defined(_MSC_VER)
+
+#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x)
+#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x)
+
+#define GGML_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x)
+
+static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) {
+    ggml_fp16_internal_t tmp;
+    memcpy(&tmp, &h, sizeof(ggml_fp16_t));
+    return (float)tmp;
+}
+
+static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) {
+    ggml_fp16_t res;
+    ggml_fp16_internal_t tmp = f;
+    memcpy(&res, &tmp, sizeof(ggml_fp16_t));
+    return res;
+}
+
+#else
+
+#ifdef __wasm_simd128__
+#include <wasm_simd128.h>
+#else
+#ifdef __POWER9_VECTOR__
+#include <altivec.h>
+#undef bool
+#define bool _Bool
+#else
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#include <intrin.h>
+#else
+#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__) || defined(__SSE3__) || defined(__SSE__)
+#if !defined(__riscv)
+#include <immintrin.h>
+#endif
+#endif
+#endif
+#endif
+#endif
+
+#ifdef __riscv_v_intrinsic
+#include <riscv_vector.h>
+#endif
+
+#if defined(__loongarch64)
+#if defined(__loongarch_asx)
+#include <lasxintrin.h>
+#endif
+#if defined(__loongarch_sx)
+#include <lsxintrin.h>
+#endif
+#endif
+
+#if defined(__loongarch_asx)
+
+typedef union {
+    int32_t i;
+    float f;
+} ft_union;
+
+/* float type data load instructions */
+static __m128 __lsx_vreplfr2vr_s(float val) {
+    ft_union fi_tmpval = {.f = val};
+    return (__m128)__lsx_vreplgr2vr_w(fi_tmpval.i);
+}
+
+static __m256 __lasx_xvreplfr2vr_s(float val) {
+    ft_union fi_tmpval = {.f = val};
+    return (__m256)__lasx_xvreplgr2vr_w(fi_tmpval.i);
+}
+#endif
+
+#ifdef __F16C__
+
+#ifdef _MSC_VER
+#define GGML_COMPUTE_FP16_TO_FP32(x) _mm_cvtss_f32(_mm_cvtph_ps(_mm_cvtsi32_si128(x)))
+#define GGML_COMPUTE_FP32_TO_FP16(x) _mm_extract_epi16(_mm_cvtps_ph(_mm_set_ss(x), 0), 0)
+#else
+#define GGML_COMPUTE_FP16_TO_FP32(x) _cvtsh_ss(x)
+#define GGML_COMPUTE_FP32_TO_FP16(x) _cvtss_sh(x, 0)
+#endif
+
+#elif defined(__POWER9_VECTOR__)
+
+#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x)
+#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x)
+/* the inline asm below is about 12% faster than the lookup method */
+#define GGML_FP16_TO_FP32(x) GGML_COMPUTE_FP16_TO_FP32(x)
+#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x)
+
+static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) {
+    register float f;
+    register double d;
+    __asm__(
+        "mtfprd %0,%2\n"
+        "xscvhpdp %0,%0\n"
+        "frsp %1,%0\n" :
+        /* temp */ "=d"(d),
+        /* out */  "=f"(f):
+        /* in */   "r"(h));
+    return f;
+}
+
+static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) {
+    register double d;
+    register ggml_fp16_t r;
+    __asm__( /* xscvdphp can work on double or single precision */
+        "xscvdphp %0,%2\n"
+        "mffprd %1,%0\n" :
+        /* temp */ "=d"(d),
+        /* out */  "=r"(r):
+        /* in */   "f"(f));
+    return r;
+}
+
+#else
+
+// FP16 <-> FP32
+// ref: https://github.com/Maratyszcza/FP16
+
+static inline float fp32_from_bits(uint32_t w) {
+    union {
+        uint32_t as_bits;
+        float as_value;
+    } fp32;
+    fp32.as_bits = w;
+    return fp32.as_value;
+}
+
+static inline uint32_t fp32_to_bits(float f) {
+    union {
+        float as_value;
+        uint32_t as_bits;
+    } fp32;
+    fp32.as_value = f;
+    return fp32.as_bits;
+}
+
+static inline float ggml_compute_fp16_to_fp32(ggml_fp16_t h) {
+    const uint32_t w = (uint32_t) h << 16;
+    const uint32_t sign = w & UINT32_C(0x80000000);
+    const uint32_t two_w = w + w;
+
+    const uint32_t exp_offset = UINT32_C(0xE0) << 23;
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__)
+    const float exp_scale = 0x1.0p-112f;
+#else
+    const float exp_scale = fp32_from_bits(UINT32_C(0x7800000));
+#endif
+    const float normalized_value = fp32_from_bits((two_w >> 4) + exp_offset) * exp_scale;
+
+    const uint32_t magic_mask = UINT32_C(126) << 23;
+    const float magic_bias = 0.5f;
+    const float denormalized_value = fp32_from_bits((two_w >> 17) | magic_mask) - magic_bias;
+
+    const uint32_t denormalized_cutoff = UINT32_C(1) << 27;
+    const uint32_t result = sign |
+        (two_w < denormalized_cutoff ? fp32_to_bits(denormalized_value) : fp32_to_bits(normalized_value));
+    return fp32_from_bits(result);
+}
+
+static inline ggml_fp16_t ggml_compute_fp32_to_fp16(float f) {
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) || defined(__GNUC__) && !defined(__STRICT_ANSI__)
+    const float scale_to_inf = 0x1.0p+112f;
+    const float scale_to_zero = 0x1.0p-110f;
+#else
+    const float scale_to_inf = fp32_from_bits(UINT32_C(0x77800000));
+    const float scale_to_zero = fp32_from_bits(UINT32_C(0x08800000));
+#endif
+    float base = (fabsf(f) * scale_to_inf) * scale_to_zero;
+
+    const uint32_t w = fp32_to_bits(f);
+    const uint32_t shl1_w = w + w;
+    const uint32_t sign = w & UINT32_C(0x80000000);
+    uint32_t bias = shl1_w & UINT32_C(0xFF000000);
+    if (bias < UINT32_C(0x71000000)) {
+        bias = UINT32_C(0x71000000);
+    }
+
+    base = fp32_from_bits((bias >> 1) + UINT32_C(0x07800000)) + base;
+    const uint32_t bits = fp32_to_bits(base);
+    const uint32_t exp_bits = (bits >> 13) & UINT32_C(0x00007C00);
+    const uint32_t mantissa_bits = bits & UINT32_C(0x00000FFF);
+    const uint32_t nonsign = exp_bits + mantissa_bits;
+    return (sign >> 16) | (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign);
+}
+
+#define GGML_COMPUTE_FP16_TO_FP32(x) ggml_compute_fp16_to_fp32(x)
+#define GGML_COMPUTE_FP32_TO_FP16(x) ggml_compute_fp32_to_fp16(x)
+
+#endif // __F16C__
+
+#endif // defined(__ARM_NEON) && (!defined(__MSC_VER)
+
+// precomputed f32 table for f16 (256 KB)
+// defined in ggml.c, initialized in ggml_init()
+extern float ggml_table_f32_f16[1 << 16];
+
+// On ARM NEON, it's quicker to directly convert x -> x instead of calling into ggml_lookup_fp16_to_fp32,
+// so we define GGML_FP16_TO_FP32 and GGML_FP32_TO_FP16 elsewhere for NEON.
+// This is also true for POWER9.
+#if !defined(GGML_FP16_TO_FP32)
+inline static float ggml_lookup_fp16_to_fp32(ggml_fp16_t f) {
+    uint16_t s;
+    memcpy(&s, &f, sizeof(uint16_t));
+    return ggml_table_f32_f16[s];
+}
+
+#define GGML_FP16_TO_FP32(x) ggml_lookup_fp16_to_fp32(x)
+#endif
+
+#if !defined(GGML_FP32_TO_FP16)
+#define GGML_FP32_TO_FP16(x) GGML_COMPUTE_FP32_TO_FP16(x)
+#endif
+
+#define GGML_HASHTABLE_FULL ((size_t)-1)
+#define GGML_HASHTABLE_ALREADY_EXISTS ((size_t)-2)
+
+struct ggml_hash_set ggml_hash_set_new(size_t size);
+
+bool   ggml_hash_contains      (const struct ggml_hash_set hash_set, struct ggml_tensor * key);
+
+// returns GGML_HASHTABLE_FULL if table is full, otherwise the current index of the key or where it should be inserted
+size_t ggml_hash_find          (const struct ggml_hash_set hash_set, struct ggml_tensor * key);
+
+// returns GGML_HASHTABLE_ALREADY_EXISTS if key already exists, index otherwise, asserts if table is full
+size_t ggml_hash_insert        (      struct ggml_hash_set hash_set, struct ggml_tensor * key);
+
+// return index, asserts if table is full
+size_t ggml_hash_find_or_insert(      struct ggml_hash_set hash_set, struct ggml_tensor * key);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/ggml/src/ggml-kompute.cpp b/ggml/src/ggml-kompute.cpp
new file mode 100644 (file)
index 0000000..ed5f2e3
--- /dev/null
@@ -0,0 +1,2038 @@
+#include "ggml.h"
+#include "ggml-backend.h"
+#include "ggml-backend-impl.h"
+#include "ggml-kompute.h"
+
+// These are generated at build time by cmake custom command
+#include "shaderop_scale.h"
+#include "shaderop_scale_8.h"
+#include "shaderop_add.h"
+#include "shaderop_addrow.h"
+#include "shaderop_mul.h"
+#include "shaderop_silu.h"
+#include "shaderop_relu.h"
+#include "shaderop_gelu.h"
+#include "shaderop_softmax.h"
+#include "shaderop_norm.h"
+#include "shaderop_rmsnorm.h"
+#include "shaderop_diagmask.h"
+#include "shaderop_mul_mat_f16.h"
+#include "shaderop_mul_mat_q8_0.h"
+#include "shaderop_mul_mat_q4_0.h"
+#include "shaderop_mul_mat_q4_1.h"
+#include "shaderop_mul_mat_q6_k.h"
+#include "shaderop_mul_mat_mat_f32.h"
+#include "shaderop_getrows_f32.h"
+#include "shaderop_getrows_f16.h"
+#include "shaderop_getrows_q4_0.h"
+#include "shaderop_getrows_q4_1.h"
+#include "shaderop_getrows_q6_k.h"
+#include "shaderop_rope_f16.h"
+#include "shaderop_rope_f32.h"
+#include "shaderop_cpy_f16_f16.h"
+#include "shaderop_cpy_f16_f32.h"
+#include "shaderop_cpy_f32_f16.h"
+#include "shaderop_cpy_f32_f32.h"
+
+#include <algorithm>
+#include <array>
+#include <cassert>
+#include <cstdint>
+#include <cstdio>
+#include <cstring>
+#include <iostream>
+#include <memory>
+#include <stdexcept>
+#include <string>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+
+#include <kompute/Kompute.hpp>
+#include <vulkan/vulkan.hpp>
+
+#ifdef __linux__
+#include <cstdlib> // for setenv
+#endif
+
+#define QK4_0 32
+#define QR4_0 2
+#define QK4_1 32
+#define QK_NL 16
+
+typedef ggml_fp16_t half;
+
+static std::string ggml_kompute_format_name(int device) {
+    return "Kompute" + std::to_string(device);
+}
+
+struct ggml_kompute_context {
+    int device;
+    std::string name;
+    std::shared_ptr<vk::DescriptorPool> pool;
+
+    ggml_kompute_context(int device)
+        : device(device), name(ggml_kompute_format_name(device)) {}
+};
+
+// FIXME: It would be good to consolidate the kompute manager and the kompute context into one object
+// and consolidate the init functions and simplify object lifetime management. As it currently stands,
+// we *have* to have the kompute manager no matter what for device discovery, but the kompute context
+// is only created when a device is set and vulkan is explicitly turned on.
+static ggml_kompute_context *s_kompute_context = nullptr;
+
+class kompute_manager {
+    kp::Manager *s_mgr = nullptr;
+
+public:
+    kp::Manager *operator()() {
+        if (s_mgr && !s_mgr->hasInstance()) {
+            destroy();
+        }
+        if (!s_mgr) {
+            s_mgr = new kp::Manager;
+        }
+        return s_mgr;
+    }
+
+    void destroy() {
+        delete s_mgr;
+        s_mgr = nullptr;
+    }
+};
+
+static kompute_manager komputeManager;
+
+struct ggml_vk_memory {
+    void *data = nullptr;
+    size_t size = 0;
+    vk::DeviceMemory *primaryMemory = nullptr;
+    vk::Buffer *primaryBuffer = nullptr;
+    vk::DeviceMemory *stagingMemory = nullptr;
+    vk::Buffer *stagingBuffer = nullptr;
+};
+
+#ifdef __linux__
+__attribute__((constructor))
+static void enable_sam() {
+    setenv("RADV_PERFTEST", "sam", false);
+}
+#endif
+
+static bool ggml_vk_checkPhysicalDeviceFeatures(vk::PhysicalDevice physical_device) {
+    vk::PhysicalDeviceFeatures availableFeatures;
+    physical_device.getFeatures(&availableFeatures);
+
+    if (!availableFeatures.shaderInt16)
+        return false;
+
+    vk::PhysicalDeviceVulkan11Features availableFeatures11;
+    vk::PhysicalDeviceVulkan12Features availableFeatures12;
+
+    availableFeatures11.pNext = &availableFeatures12;
+    availableFeatures12.pNext = nullptr;
+
+    vk::PhysicalDeviceFeatures2 features2;
+    features2.pNext = &availableFeatures11;
+
+    physical_device.getFeatures2(&features2);
+
+    if (!availableFeatures11.uniformAndStorageBuffer16BitAccess ||
+        !availableFeatures11.storageBuffer16BitAccess) {
+        return false;
+    }
+
+    if (!availableFeatures12.storageBuffer8BitAccess ||
+        !availableFeatures12.uniformAndStorageBuffer8BitAccess ||
+        !availableFeatures12.shaderFloat16 ||
+        !availableFeatures12.shaderInt8) {
+        return false;
+    }
+
+    return true;
+}
+
+static const char * ggml_vk_getVendorName(uint32_t vendorID) {
+    switch (vendorID) {
+        case 0x10DE:
+            return "nvidia";
+        case 0x1002:
+            return "amd";
+        case 0x8086:
+            return "intel";
+        default:
+            return "unknown";
+    }
+}
+
+static std::vector<ggml_vk_device> ggml_vk_available_devices_internal(size_t memoryRequired) {
+    std::vector<ggml_vk_device> results;
+    if (!komputeManager()->hasVulkan() || !komputeManager()->hasInstance())
+        return results;
+
+    std::vector<vk::PhysicalDevice> physical_devices;
+    try {
+        physical_devices = komputeManager()->listDevices();
+    } catch (vk::SystemError & err) {
+        std::cerr << __func__ << ": ignoring Vulkan exception: " << err.what() << "\n";
+        return results;
+    }
+
+    uint32_t deviceCount = physical_devices.size();
+    if (deviceCount == 0)
+        return results;
+
+    std::unordered_map<std::string, size_t> count_by_name;
+
+    for (uint32_t i = 0; i < deviceCount; i++) {
+        const auto & physical_device = physical_devices[i];
+
+        VkPhysicalDeviceProperties dev_props = physical_device.getProperties();
+        VkPhysicalDeviceMemoryProperties memoryProperties = physical_device.getMemoryProperties();
+        const uint32_t major = VK_VERSION_MAJOR(dev_props.apiVersion);
+        const uint32_t minor = VK_VERSION_MINOR(dev_props.apiVersion);
+        if (major < 1 || minor < 2)
+            continue;
+
+        if (!ggml_vk_checkPhysicalDeviceFeatures(physical_device))
+            continue;
+
+        size_t heapSize = 0;
+        for (uint32_t j = 0; j < memoryProperties.memoryHeapCount; ++j) {
+            VkMemoryHeap heap = memoryProperties.memoryHeaps[j];
+            if (heap.flags & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) {
+                heapSize = heap.size;
+                break;
+            }
+        }
+
+        if (heapSize < memoryRequired)
+            continue;
+
+        auto ext_props = physical_device.enumerateDeviceExtensionProperties();
+        bool has_maintenance4 = false;
+
+        // Check if maintenance4 is supported
+        for (const auto & properties : ext_props) {
+            if (strcmp("VK_KHR_maintenance4", properties.extensionName) == 0) {
+                has_maintenance4 = true;
+            }
+        }
+
+        vk::PhysicalDeviceSubgroupProperties subgroup_props;
+        vk::PhysicalDeviceProperties2 dev_props2;
+        vk::PhysicalDeviceMaintenance3Properties dev_props3;
+        vk::PhysicalDeviceMaintenance4Properties dev_props4;
+        dev_props2.pNext = &dev_props3;
+        dev_props3.pNext = &subgroup_props;
+        if (has_maintenance4) {
+            subgroup_props.pNext = &dev_props4;
+        }
+        physical_device.getProperties2(&dev_props2);
+
+        if (subgroup_props.subgroupSize < 32)
+            continue;
+
+        ggml_vk_device d;
+        d.index = i;
+        d.type = dev_props.deviceType;
+        d.heapSize = heapSize;
+        d.vendor = strdup(ggml_vk_getVendorName(dev_props.vendorID));
+        d.subgroupSize = subgroup_props.subgroupSize;
+        d.bufferAlignment = dev_props.limits.minStorageBufferOffsetAlignment;
+
+        if (has_maintenance4) {
+            d.maxAlloc = std::min(dev_props3.maxMemoryAllocationSize, dev_props4.maxBufferSize);
+        } else {
+            d.maxAlloc = dev_props3.maxMemoryAllocationSize;
+        }
+
+        std::string name(dev_props.deviceName);
+        size_t n_idx = ++count_by_name[name];
+        if (n_idx > 1) {
+            name += " (" + std::to_string(n_idx) + ")";
+        }
+        d.name = strdup(name.c_str());
+
+        results.push_back(d);
+    }
+
+    std::stable_sort(results.begin(), results.end(),
+        [](const ggml_vk_device& lhs, const ggml_vk_device& rhs) -> bool {
+            if (lhs.type != rhs.type) {
+                if (lhs.type == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) return true;
+                if (rhs.type == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) return false;
+
+                if (lhs.type == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) return true;
+                if (rhs.type == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) return false;
+            }
+            return lhs.heapSize < rhs.heapSize;
+        }
+    );
+
+    return results;
+}
+
+// public API returns a C-style array
+ggml_vk_device * ggml_vk_available_devices(size_t memoryRequired, size_t * count) {
+    auto devices = ggml_vk_available_devices_internal(memoryRequired);
+    *count = devices.size();
+    if (devices.empty()) {
+        return nullptr;
+    }
+
+    size_t nbytes = sizeof (ggml_vk_device) * (devices.size());
+    auto * arr = static_cast<ggml_vk_device *>(malloc(nbytes));
+    memcpy(arr, devices.data(), nbytes);
+    return arr;
+}
+
+static void ggml_vk_filterByVendor(std::vector<ggml_vk_device>& devices, const std::string& targetVendor) {
+    devices.erase(
+        std::remove_if(devices.begin(), devices.end(),
+            [&targetVendor](const ggml_vk_device& device) {
+                return device.vendor != targetVendor;
+            }),
+        devices.end()
+    );
+}
+
+static void ggml_vk_filterByName(std::vector<ggml_vk_device>& devices, const std::string& targetName) {
+    devices.erase(
+        std::remove_if(devices.begin(), devices.end(),
+            [&targetName](const ggml_vk_device& device) {
+                return device.name != targetName;
+            }),
+        devices.end()
+    );
+}
+
+static bool ggml_vk_get_device(ggml_vk_device * device, size_t memoryRequired, const std::string & name) {
+    if (name.empty())
+        return false;
+
+    auto devices = ggml_vk_available_devices_internal(memoryRequired);
+    if (name == "amd" || name == "nvidia" || name == "intel") {
+        ggml_vk_filterByVendor(devices, name);
+    } else if (name != "gpu") {
+        ggml_vk_filterByName(devices, name);
+    }
+
+    if (devices.empty())
+        return false;
+
+    *device = devices.front();
+    return true;
+}
+
+bool ggml_vk_get_device(ggml_vk_device * device, size_t memoryRequired, const char * name) {
+    return ggml_vk_get_device(device, memoryRequired, std::string(name));
+}
+
+bool ggml_vk_has_vulkan() {
+    return komputeManager()->hasVulkan();
+}
+
+bool ggml_vk_has_device() {
+    return komputeManager()->hasDevice();
+}
+
+ggml_vk_device ggml_vk_current_device() {
+    if (!komputeManager()->hasDevice())
+        return ggml_vk_device();
+
+    auto devices = ggml_vk_available_devices_internal(0);
+    ggml_vk_filterByName(devices, komputeManager()->physicalDevice()->getProperties().deviceName.data());
+    GGML_ASSERT(!devices.empty());
+    return devices.front();
+}
+
+static
+void ggml_vk_allocate_descriptor_pool(struct ggml_kompute_context * ctx, size_t size) {
+    std::vector<vk::DescriptorPoolSize> descriptorPoolSizes = {
+        vk::DescriptorPoolSize(
+          vk::DescriptorType::eStorageBuffer,
+          3 * size // Descriptor count is number of possible tensors to pass into an algorithm
+          )
+    };
+
+    vk::DescriptorPoolCreateInfo descriptorPoolInfo(
+      vk::DescriptorPoolCreateFlags(),
+      size, // Max sets
+      static_cast<uint32_t>(descriptorPoolSizes.size()),
+      descriptorPoolSizes.data());
+
+    ctx->pool = std::make_shared<vk::DescriptorPool>();
+    vk::Result r = komputeManager()->device()->createDescriptorPool(
+      &descriptorPoolInfo, nullptr, ctx->pool.get());
+    if (r != vk::Result::eSuccess)
+        std::cerr << "Error allocating descriptor pool" << vk::to_string(r);
+}
+
+static
+void ggml_vk_free_descriptor_pool(struct ggml_kompute_context * ctx) {
+    if (ctx->pool) {
+        komputeManager()->device()->destroy(
+          *ctx->pool,
+          (vk::Optional<const vk::AllocationCallbacks>)nullptr);
+        ctx->pool = nullptr;
+    }
+}
+
+static
+vk::Buffer *ggml_vk_allocate_buffer(size_t size) {
+    vk::BufferCreateInfo bufferCreateInfo;
+    bufferCreateInfo.size = size;
+    bufferCreateInfo.usage = vk::BufferUsageFlagBits::eStorageBuffer |
+                             vk::BufferUsageFlagBits::eTransferSrc |
+                             vk::BufferUsageFlagBits::eTransferDst;
+    bufferCreateInfo.sharingMode = vk::SharingMode::eExclusive;
+
+    vk::Buffer *vkBuffer = new vk::Buffer;
+    vk::Result r = komputeManager()->device()->createBuffer(&bufferCreateInfo, nullptr, vkBuffer);
+    if (r != vk::Result::eSuccess)
+        std::cerr << "Error allocating buffer " << vk::to_string(r) << std::endl;
+    return vkBuffer;
+}
+
+static
+vk::DeviceMemory *ggml_vk_allocate(size_t size, vk::MemoryPropertyFlags flags, vk::MemoryRequirements requirements, bool *isHostVisible) {
+
+    uint32_t memoryTypeIndex = -1;
+    bool memoryTypeIndexFound = false;
+    vk::PhysicalDeviceMemoryProperties memoryProperties = komputeManager()->physicalDevice()->getMemoryProperties();
+    for (uint32_t i = 0; i < memoryProperties.memoryTypeCount; i++) {
+        const vk::MemoryType &memoryType = memoryProperties.memoryTypes[i];
+        const vk::MemoryHeap &memoryHeap = memoryProperties.memoryHeaps[memoryType.heapIndex];
+        if (memoryHeap.size < size) {
+            continue;
+        }
+
+        if (requirements.memoryTypeBits & (1 << i)) {
+            if (((memoryProperties.memoryTypes[i]).propertyFlags &
+                 flags) == flags) {
+                memoryTypeIndex = i;
+                memoryTypeIndexFound = true;
+                if (isHostVisible && (memoryProperties.memoryTypes[i].propertyFlags & vk::MemoryPropertyFlagBits::eHostVisible)) {
+                    *isHostVisible = true;
+                }
+                break;
+            }
+        }
+    }
+    if (!memoryTypeIndexFound) {
+        throw std::runtime_error(
+          "Memory type index for buffer creation not found");
+    }
+
+    vk::MemoryAllocateInfo allocInfo;
+    allocInfo.allocationSize = size;
+    allocInfo.memoryTypeIndex = memoryTypeIndex;
+    vk::DeviceMemory *vkDeviceMemory =  new vk::DeviceMemory;
+    vk::Result r = komputeManager()->device()->allocateMemory(&allocInfo, nullptr, vkDeviceMemory);
+    if (r != vk::Result::eSuccess) {
+        std::cerr << "Error allocating memory " << vk::to_string(r) << std::endl;
+        throw std::runtime_error("Error allocating vulkan memory.");
+    }
+    return vkDeviceMemory;
+}
+
+static size_t ggml_vk_aligned_offset(ggml_backend_buffer_t buffer, size_t offset) {
+    size_t minStorageBufferOffsetAlignment = ggml_backend_buffer_get_alignment(buffer);
+
+    // If offset is already aligned, return it directly
+    if (offset % minStorageBufferOffsetAlignment == 0) {
+        return offset;
+    }
+
+    // Otherwise, return the largest multiple of minStorageBufferOffsetAlignment less than offset
+    return (offset / minStorageBufferOffsetAlignment) * minStorageBufferOffsetAlignment;
+}
+
+static ggml_vk_memory ggml_vk_allocate(size_t size) {
+    ggml_vk_memory memory;
+    bool isHostVisible = false;
+    {
+        memory.primaryBuffer = ggml_vk_allocate_buffer(size);
+        vk::MemoryRequirements memoryRequirements = komputeManager()->device()->getBufferMemoryRequirements(*memory.primaryBuffer);
+        vk::MemoryPropertyFlags memoryPropertyFlags = vk::MemoryPropertyFlagBits::eDeviceLocal;
+        memory.primaryMemory = ggml_vk_allocate(size, memoryPropertyFlags, memoryRequirements, &isHostVisible);
+        komputeManager()->device()->bindBufferMemory(*memory.primaryBuffer, *memory.primaryMemory, 0);
+        if (isHostVisible) {
+            vk::Result r = komputeManager()->device()->mapMemory(*memory.primaryMemory, 0, size, vk::MemoryMapFlags(), &memory.data);
+            if (r != vk::Result::eSuccess)
+                std::cerr << "Error mapping memory" << vk::to_string(r);
+        }
+    }
+
+    if (!isHostVisible) {
+        memory.stagingBuffer = ggml_vk_allocate_buffer(size);
+        vk::MemoryRequirements memoryRequirements = komputeManager()->device()->getBufferMemoryRequirements(*memory.stagingBuffer);
+        vk::MemoryPropertyFlags memoryPropertyFlags = vk::MemoryPropertyFlagBits::eHostVisible |
+                                                      vk::MemoryPropertyFlagBits::eHostCoherent |
+                                                      vk::MemoryPropertyFlagBits::eHostCached;
+        memory.stagingMemory = ggml_vk_allocate(size, memoryPropertyFlags, memoryRequirements, &isHostVisible);
+        komputeManager()->device()->bindBufferMemory(*memory.stagingBuffer, *memory.stagingMemory, 0);
+        vk::Result r = komputeManager()->device()->mapMemory(*memory.stagingMemory, 0, size, vk::MemoryMapFlags(), &memory.data);
+        if (r != vk::Result::eSuccess)
+            std::cerr << "Error mapping memory" << vk::to_string(r);
+    }
+
+    memory.size = size;
+    return memory;
+}
+
+static void ggml_vk_free_memory(ggml_vk_memory &memory)
+{
+    komputeManager()->device()->destroy(
+      *memory.primaryBuffer,
+      (vk::Optional<const vk::AllocationCallbacks>)nullptr);
+    if (memory.stagingBuffer) {
+        komputeManager()->device()->destroy(
+          *memory.stagingBuffer,
+          (vk::Optional<const vk::AllocationCallbacks>)nullptr);
+    }
+    komputeManager()->device()->freeMemory(
+      *memory.primaryMemory,
+      (vk::Optional<const vk::AllocationCallbacks>)nullptr);
+    if (memory.stagingMemory) {
+        komputeManager()->device()->freeMemory(
+          *memory.stagingMemory,
+          (vk::Optional<const vk::AllocationCallbacks>)nullptr);
+    }
+}
+
+static const char * ggml_backend_kompute_buffer_type_get_name(ggml_backend_buffer_type_t buft);
+
+static
+ggml_vk_memory * ggml_vk_find_tensor(const struct ggml_tensor * t, uint64_t & offset) {
+    ggml_backend_buffer_t buffer = t->view_src ? t->view_src->buffer : t->buffer;
+
+    // compatibility with ggml-backend
+    GGML_ASSERT(buffer && buffer->buft->iface.get_name == ggml_backend_kompute_buffer_type_get_name);
+
+    ggml_vk_memory * buf_ctx = static_cast<ggml_vk_memory *>(buffer->context);
+
+    const intptr_t ioffs = intptr_t(t->data) - intptr_t(buf_ctx->data);
+
+    GGML_ASSERT(ioffs >= 0 && ioffs + int64_t(ggml_nbytes(t)) <= int64_t(buffer->size));
+
+    offset = uint64_t(ioffs);
+    return buf_ctx;
+}
+
+static
+const std::shared_ptr<kp::Tensor> ggml_vk_get_tensor(const struct ggml_tensor * t, uint32_t * alignedOffset = nullptr) {
+    uint64_t originalOffset = 0;
+    auto * res = ggml_vk_find_tensor(t, originalOffset);
+    if (!res) {
+        static std::shared_ptr<kp::Tensor> nullTensor = nullptr;
+        return nullTensor;
+    }
+
+    // Create a tensor whose memory will be composed of our buffers at the correct offset
+    const size_t nelements = ggml_nelements(t);
+    size_t nbytes = ggml_nbytes(t);
+
+    size_t vulkanOffset = ggml_vk_aligned_offset(t->buffer, originalOffset);
+    if (alignedOffset) {
+        *alignedOffset = originalOffset - vulkanOffset;
+        nbytes += *alignedOffset;
+    }
+
+    return komputeManager()->tensor(
+        t->data,
+        nelements,
+        nbytes, kp::Tensor::TensorDataTypes::eFloat,
+        res->primaryMemory, res->primaryBuffer,
+        res->stagingMemory, res->stagingBuffer,
+        vulkanOffset);
+}
+
+static std::vector<uint32_t> getSpirvShader(const unsigned char* rawData, size_t size) {
+    if (size % sizeof(uint32_t) != 0) {
+        throw std::runtime_error("Invalid size: must be divisible by sizeof(uint32_t)");
+    }
+
+    const uint32_t* data_ptr = reinterpret_cast<const uint32_t*>(rawData);
+    size_t count = size / sizeof(uint32_t);
+    return std::vector<uint32_t>(data_ptr, data_ptr + count);
+}
+
+inline static
+uint32_t safe_divide(uint32_t a, uint32_t b) {
+    if (b <= 1) {
+        return a;
+    }
+    if ((a % b) != 0) {
+        fprintf(stderr, "((%u %% %u) == %u) != 0\n", a, b, a % b);
+        GGML_ASSERT(!"safe_divide result would've had remainder");
+    }
+    return a / b;
+}
+
+static void ggml_vk_add(
+    kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& inA,
+    const std::shared_ptr<kp::Tensor>& inB,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
+    int32_t ne00, int32_t ne01, int32_t ne02, int32_t ne03,
+    int32_t nb00, int32_t nb01, int32_t nb02, int32_t nb03,
+    int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13,
+    int32_t nb10, int32_t nb11, int32_t nb12, int32_t nb13,
+    int32_t ne0,
+    int32_t nb0,  int32_t nb1,  int32_t nb2,  int32_t nb3
+) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_add_comp_spv,
+        kp::shader_data::op_add_comp_spv_len);
+
+    struct PushConstants {
+        uint32_t inAOff, inBOff, outOff;
+        int32_t ne00;
+        int32_t nb00, nb01, nb02, nb03;
+        int32_t ne10, ne11, ne12, ne13;
+        int32_t nb10, nb11, nb12, nb13;
+        int32_t ne0;
+        int32_t nb0, nb1, nb2, nb3;
+    } const pushConsts {
+        safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4),
+        ne00,
+        nb00, nb01, nb02, nb03,
+        ne10, ne11, ne12, ne13,
+        nb10, nb11, nb12, nb13,
+        ne0,
+        nb0, nb1, nb2, nb3
+    };
+
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(__func__)) {
+        s_algo = komputeManager()->algorithm<float, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(__func__);
+        s_algo->setTensors({inA, inB, out});
+        s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+static void ggml_vk_addrow(kp::Sequence& seq,
+                 const std::shared_ptr<kp::Tensor>& inA,
+                 const std::shared_ptr<kp::Tensor>& inB,
+                 const std::shared_ptr<kp::Tensor>& out,
+                 uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
+                 uint32_t size, uint32_t row = 0) {
+
+    const static auto spirv = getSpirvShader(kp::shader_data::op_addrow_comp_spv,
+        kp::shader_data::op_addrow_comp_spv_len);
+
+    struct PushConstants {
+        uint32_t inAOff, inBOff, outOff;
+        uint32_t row;
+    } const pushConsts {
+        safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4),
+        row
+    };
+
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(__func__))
+        s_algo = komputeManager()->algorithm<float, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {size}, {}, {pushConsts});
+    else {
+        s_algo = komputeManager()->getAlgorithm(__func__);
+        s_algo->setTensors({inA, inB, out});
+        s_algo->setWorkgroup({size});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+static void ggml_vk_mul(
+    kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& inA,
+    const std::shared_ptr<kp::Tensor>& inB,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
+    int32_t ne00, int32_t ne01, int32_t ne02, int32_t ne03,
+    int32_t nb00, int32_t nb01, int32_t nb02, int32_t nb03,
+    int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13,
+    int32_t nb10, int32_t nb11, int32_t nb12, int32_t nb13,
+    int32_t ne0,
+    int32_t nb0,  int32_t nb1,  int32_t nb2,  int32_t nb3
+) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_comp_spv,
+        kp::shader_data::op_mul_comp_spv_len);
+
+    struct PushConstants {
+        uint32_t inAOff, inBOff, outOff;
+        int32_t ne00;
+        int32_t nb00, nb01, nb02, nb03;
+        int32_t ne10, ne11, ne12, ne13;
+        int32_t nb10, nb11, nb12, nb13;
+        int32_t ne0;
+        int32_t nb0, nb1, nb2, nb3;
+    } const pushConsts {
+        safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4),
+        ne00,
+        nb00, nb01, nb02, nb03,
+        ne10, ne11, ne12, ne13,
+        nb10, nb11, nb12, nb13,
+        ne0,
+        nb0, nb1, nb2, nb3
+    };
+
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(__func__)) {
+        s_algo = komputeManager()->algorithm<float, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(__func__);
+        s_algo->setTensors({inA, inB, out});
+        s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+static void ggml_vk_scale(kp::Sequence& seq,
+                   const std::shared_ptr<kp::Tensor>& in,
+                   const std::shared_ptr<kp::Tensor>& out,
+                   uint32_t inOff, uint32_t outOff,
+                   uint32_t size, float scale) {
+    const static auto spirv_1 = getSpirvShader(
+        kp::shader_data::op_scale_comp_spv, kp::shader_data::op_scale_comp_spv_len
+    );
+    const static auto spirv_8 = getSpirvShader(
+        kp::shader_data::op_scale_8_comp_spv, kp::shader_data::op_scale_8_comp_spv_len
+    );
+
+    struct PushConstants {
+        uint32_t inOff, outOff;
+        float scale;
+    } const pushConsts {
+        safe_divide(inOff, 4), safe_divide(outOff, 4),
+        scale
+    };
+
+    const auto * spirv = &spirv_1;
+    std::string name(__func__);
+    if (size % 8 == 0) {
+        size /= 8;
+        name += "_8";
+        spirv = &spirv_8;
+    }
+
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(name)) {
+        s_algo = komputeManager()->algorithm<float, PushConstants>(name, s_kompute_context->pool.get(), {in, out}, *spirv, {size}, {}, {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(name);
+        s_algo->setTensors({in, out});
+        s_algo->setWorkgroup({size});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+static void ggml_vk_xxlu(
+    const std::vector<uint32_t>& spirv, const char * suffix, kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& in,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inOff, uint32_t outOff,
+    uint32_t size
+) {
+    struct PushConstants {
+        uint32_t inOff, outOff;
+    } const pushConsts {
+        safe_divide(inOff, 4), safe_divide(outOff, 4),
+    };
+
+    auto name = std::string(__func__) + "_" + suffix;
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(name)) {
+        s_algo = komputeManager()->algorithm<float, PushConstants>(name, s_kompute_context->pool.get(), {in, out}, spirv, {size}, {}, {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(name);
+        s_algo->setTensors({in, out});
+        s_algo->setWorkgroup({size});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+template <typename... Args>
+static void ggml_vk_silu(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_silu_comp_spv,
+        kp::shader_data::op_silu_comp_spv_len);
+
+    ggml_vk_xxlu(spirv, "silu", std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_relu(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_relu_comp_spv,
+        kp::shader_data::op_relu_comp_spv_len);
+
+    ggml_vk_xxlu(spirv, "relu", std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_gelu(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_gelu_comp_spv,
+        kp::shader_data::op_gelu_comp_spv_len);
+
+    ggml_vk_xxlu(spirv, "gelu", std::forward<Args>(args)...);
+}
+
+static void ggml_vk_soft_max(
+    kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& inA,
+    const std::shared_ptr<kp::Tensor>& inB,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
+    int32_t ne00, int32_t ne01, int32_t ne02, uint32_t ne03,
+    float scale
+) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_softmax_comp_spv,
+        kp::shader_data::op_softmax_comp_spv_len);
+
+    struct PushConstants {
+        uint32_t inAOff, inBOff, outOff;
+        int32_t ne00, ne01, ne02;
+        float scale;
+        int32_t mask;
+    } pushConsts {
+        safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4),
+        ne00, ne01, ne02,
+        scale,
+        bool(inB)
+    };
+
+    auto & inB_ = inB ? inB : inA;
+
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(__func__)) {
+        // FIXME: The softmax kernel needs to be fixed to use the subgroupsize which can vary by device
+        const uint32_t local_x = 32;
+        s_algo = komputeManager()->algorithm<uint32_t, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB_, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {local_x}, {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(__func__);
+        s_algo->setTensors({inA, inB_, out});
+        s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+static void ggml_vk_norm_(
+    const std::vector<uint32_t>& spirv, const char * suffix, kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& in,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inOff, uint32_t outOff,
+    int32_t ne00, int32_t nb01,
+    int32_t nrows, float epsilon
+) {
+    GGML_ASSERT(nb01%sizeof(float) == 0);
+    GGML_ASSERT(ne00%sizeof(float) == 0);
+
+    struct PushConstants {
+        uint32_t inOff, outOff;
+        uint32_t ne00, nb01;
+        float eps;
+    } pushConsts {
+        safe_divide(inOff, 4), safe_divide(outOff, 4),
+        (uint32_t)ne00, (uint32_t)nb01, epsilon
+    };
+
+    auto name = std::string(__func__) + "_" + suffix;
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(name)) {
+        s_algo = komputeManager()->algorithm<float, PushConstants>(name, s_kompute_context->pool.get(), {in, out}, spirv, {(uint32_t)nrows}, {}, {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(name);
+        s_algo->setTensors({in, out});
+        s_algo->setWorkgroup({(uint32_t)nrows});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+template <typename... Args>
+static void ggml_vk_norm(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_norm_comp_spv,
+        kp::shader_data::op_norm_comp_spv_len);
+
+    ggml_vk_norm_(spirv, "norm", std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_rms_norm(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_rmsnorm_comp_spv,
+        kp::shader_data::op_rmsnorm_comp_spv_len);
+
+    ggml_vk_norm_(spirv, "rms", std::forward<Args>(args)...);
+}
+
+static void ggml_vk_diag_mask_inf(kp::Sequence& seq,
+                           const std::shared_ptr<kp::Tensor>& in,
+                           const std::shared_ptr<kp::Tensor>& out,
+                           uint32_t inOff, uint32_t outOff,
+                           uint32_t n_past,
+                           int32_t ne00, int32_t ne01, int32_t ne02) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_diagmask_comp_spv,
+        kp::shader_data::op_diagmask_comp_spv_len);
+
+    struct PushConstants {
+        uint32_t inOff, outOff;
+        uint32_t n_past;
+        int32_t ne00, ne01;
+    } pushConsts {
+        safe_divide(inOff, 4), safe_divide(outOff, 4),
+        n_past,
+        ne00, ne01
+    };
+
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(__func__))
+        s_algo = komputeManager()->algorithm<float, PushConstants>(__func__, s_kompute_context->pool.get(), {in, out}, spirv, {unsigned(ne00), unsigned(ne01), unsigned(ne02)}, {}, {pushConsts});
+    else {
+        s_algo = komputeManager()->getAlgorithm(__func__);
+        s_algo->setTensors({in, out});
+        s_algo->setWorkgroup({unsigned(ne00), unsigned(ne01), unsigned(ne02)});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+static void ggml_vk_mul_mat_f16(
+    kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& inA,
+    const std::shared_ptr<kp::Tensor>& inB,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
+    int32_t ne00, int32_t ne01, int32_t ne02,
+    uint32_t nb00, uint32_t nb01, uint32_t nb02,
+    int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13,
+    uint32_t nb10, uint32_t nb11, uint32_t nb12,
+    int32_t ne0, int32_t ne1,
+    uint32_t r2, uint32_t r3
+) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_f16_comp_spv,
+        kp::shader_data::op_mul_mat_f16_comp_spv_len);
+
+    struct PushConstants {
+        uint32_t inAOff, inBOff, outOff;
+        int32_t ne00, ne01, ne02;
+        uint32_t nb00, nb01, nb02;
+        int32_t ne10, ne11, ne12;
+        uint32_t nb10, nb11, nb12;
+        int32_t ne0, ne1;
+        uint32_t r2, r3;
+    } pushConsts {
+        safe_divide(inAOff, 2), safe_divide(inBOff, 4), safe_divide(outOff, 4),
+        ne00, ne01, ne02,
+        nb00, nb01, nb02,
+        ne10, ne11, ne12,
+        nb10, nb11, nb12,
+        ne0, ne1,
+        r2, r3
+    };
+
+    const unsigned ny = unsigned((ne11 + 4 - 1)/4);
+
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(__func__)) {
+        const uint32_t local_x = ggml_vk_current_device().subgroupSize * 2;
+        s_algo = komputeManager()->algorithm<uint32_t, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned(ne01), ny, unsigned(ne12*ne13)}, {local_x}, {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(__func__);
+        s_algo->setTensors({inA, inB, out});
+        s_algo->setWorkgroup({unsigned(ne01), ny, unsigned(ne12*ne13)});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+static void ggml_vk_mul_mat_mat_f32(kp::Sequence& seq,
+                         const std::shared_ptr<kp::Tensor>& inA,
+                         const std::shared_ptr<kp::Tensor>& inB,
+                         const std::shared_ptr<kp::Tensor>& out,
+                         uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
+                         int32_t ne00, int32_t ne01, int32_t ne02,
+                         uint32_t nb01, uint32_t nb02,
+                         int32_t ne11, int32_t ne12,
+                         uint32_t nb11, uint32_t nb12,
+                         uint32_t nb1, uint32_t nb2) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_mat_f32_comp_spv,
+        kp::shader_data::op_mul_mat_mat_f32_comp_spv_len);
+
+    struct PushConstants {
+        uint32_t inAOff, inBOff, outOff;
+        int32_t ne00, ne01, ne02, ne11, ne12;
+        uint32_t nb01, nb02;
+        uint32_t nb11, nb12;
+        uint32_t nb1, nb2;
+    } pushConsts {
+        safe_divide(inAOff, 4), safe_divide(inBOff, 4), safe_divide(outOff, 4),
+        ne00, ne01, ne02, ne11, ne12,
+        nb01, nb02, nb11, nb12,
+        nb1, nb2
+    };
+
+    const uint32_t local_x = ggml_vk_current_device().subgroupSize;
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(__func__)) {
+        s_algo = komputeManager()->algorithm<uint32_t, PushConstants>(__func__, s_kompute_context->pool.get(),
+        {inA, inB, out}, spirv,
+        {unsigned(ne01),
+         unsigned(ne11),
+         unsigned(std::max(ne12, ne02))
+         },
+        {local_x},
+        {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(__func__);
+        s_algo->setTensors({inA, inB, out});
+        s_algo->setWorkgroup({unsigned(ne01),
+                              unsigned(ne11),
+                              unsigned(std::max(ne12, ne02)),
+                              });
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+static void ggml_vk_mul_mat_impl(
+    const std::vector<uint32_t>& spirv, const char * suffix, uint32_t block_size, kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& inA,
+    const std::shared_ptr<kp::Tensor>& inB,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
+    int32_t ne00, int32_t ne01, int32_t ne02,
+    int32_t ne10, int32_t ne11, int32_t ne12, int32_t ne13,
+    int32_t ne0, int32_t ne1,
+    uint32_t r2, uint32_t r3
+) {
+    struct PushConstants {
+        uint32_t inAOff, inBOff, outOff;
+        int32_t ne00, ne01, ne02;
+        int32_t ne10, ne12;
+        int32_t ne0, ne1;
+        uint32_t r2, r3;
+    } pushConsts {
+        safe_divide(inAOff, block_size), safe_divide(inBOff, 4), safe_divide(outOff, 4),
+        ne00, ne01, ne02,
+        ne10, ne12,
+        ne0, ne1,
+        r2, r3
+    };
+
+    auto name = std::string(__func__) + "_" + suffix;
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(name)) {
+        const uint32_t local_x = ggml_vk_current_device().subgroupSize * 2;
+        s_algo = komputeManager()->algorithm<uint32_t, PushConstants>(name, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned((ne01 + 7)/8), unsigned(ne11), unsigned(ne12*ne13)}, {local_x}, {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(name);
+        s_algo->setTensors({inA, inB, out});
+        s_algo->setWorkgroup({unsigned((ne01 + 7)/8), unsigned(ne11), unsigned(ne12*ne13)});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+template <typename... Args>
+static void ggml_vk_mul_mat_q4_0(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q4_0_comp_spv,
+        kp::shader_data::op_mul_mat_q4_0_comp_spv_len);
+
+    ggml_vk_mul_mat_impl(spirv, "q4_0", 1/*We access blocks unaligned*/, std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_mul_mat_q4_1(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q4_1_comp_spv,
+        kp::shader_data::op_mul_mat_q4_1_comp_spv_len);
+
+    ggml_vk_mul_mat_impl(spirv, "q4_1", 1/*We access blocks unaligned*/, std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_mul_mat_q8_0(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q8_0_comp_spv,
+        kp::shader_data::op_mul_mat_q8_0_comp_spv_len);
+
+    ggml_vk_mul_mat_impl(spirv, "q8_0", 1/*We access blocks unaligned*/, std::forward<Args>(args)...);
+}
+
+static void ggml_vk_mul_mat_q6_k(
+    kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& inA,
+    const std::shared_ptr<kp::Tensor>& inB,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
+    int32_t ne00, int32_t ne10, int32_t ne0, int32_t ne1,
+    int32_t ne01, int32_t ne11, int32_t ne12, int32_t ne02
+) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_mul_mat_q6_k_comp_spv,
+        kp::shader_data::op_mul_mat_q6_k_comp_spv_len);
+
+    struct PushConstants {
+        uint32_t inAOff, inBOff, outOff;
+        int32_t ne00, ne10, ne0, ne1, ne01, gqa;
+    } pushConsts {
+        inAOff, safe_divide(inBOff, 4), safe_divide(outOff, 4),
+        ne00, ne10, ne0, ne1, ne01, ne12/ne02
+    };
+
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(__func__)) {
+        const uint32_t local_x = ggml_vk_current_device().subgroupSize * 2;
+        s_algo = komputeManager()->algorithm<uint32_t, PushConstants>(__func__, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {unsigned((ne01 + 1)/2), unsigned(ne11), unsigned(ne12)}, {local_x}, {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(__func__);
+        s_algo->setTensors({inA, inB, out});
+        s_algo->setWorkgroup({unsigned((ne01 + 1)/2), unsigned(ne11), unsigned(ne12)});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+static void ggml_vk_get_rows(
+    const std::vector<uint32_t>& spirv,
+    const char * suffix,
+    unsigned element_size, unsigned qk,
+    kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& inA,
+    const std::shared_ptr<kp::Tensor>& inB,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
+    int32_t ne00, int32_t nb01, int32_t nb1,
+    uint32_t size
+) {
+    GGML_ASSERT(nb01%element_size == 0);
+    GGML_ASSERT(nb1%sizeof(float) == 0);
+    if (qk) GGML_ASSERT(ne00%qk == 0);
+
+    struct PushConstants {
+        uint32_t inAOff, inBOff, outOff;
+        int32_t ne00, nb01, nb1;
+    } pushConsts {
+        safe_divide(inAOff, element_size), safe_divide(inBOff, 4), safe_divide(outOff, 4),
+        ne00, nb01, nb1
+    };
+
+    auto name = std::string(__func__) + "_" + suffix;
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(name)) {
+        s_algo = komputeManager()->algorithm<float, PushConstants>(name, s_kompute_context->pool.get(), {inA, inB, out}, spirv, {size}, {}, {pushConsts});
+    } else {
+        s_algo = komputeManager()->getAlgorithm(name);
+        s_algo->setTensors({inA, inB, out});
+        s_algo->setWorkgroup({size});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+template <typename... Args>
+static void ggml_vk_get_rows_f32(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_f32_comp_spv,
+        kp::shader_data::op_getrows_f32_comp_spv_len);
+
+    ggml_vk_get_rows(spirv, "f32", sizeof(float), 0, std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_get_rows_f16(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_f16_comp_spv,
+        kp::shader_data::op_getrows_f16_comp_spv_len);
+
+    ggml_vk_get_rows(spirv, "f16", sizeof(half), 0, std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_get_rows_q4_0(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_q4_0_comp_spv,
+        kp::shader_data::op_getrows_q4_0_comp_spv_len);
+
+    ggml_vk_get_rows(spirv, "q4_0", 1/*We access blocks unaligned*/, QK4_0, std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_get_rows_q4_1(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_q4_1_comp_spv,
+        kp::shader_data::op_getrows_q4_1_comp_spv_len);
+
+    ggml_vk_get_rows(spirv, "q4_1", 1/*We access blocks unaligned*/, QK4_1, std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_get_rows_q6_k(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_getrows_q6_k_comp_spv,
+        kp::shader_data::op_getrows_q6_k_comp_spv_len);
+    ggml_vk_get_rows(spirv, "q6_k", 1/*We access blocks unaligned*/, QK_NL, std::forward<Args>(args)...);
+}
+
+static void ggml_vk_rope(
+    kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& inA,
+    const std::shared_ptr<kp::Tensor>& inB,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inAOff, uint32_t inBOff, uint32_t outOff,
+    ggml_type src0t, int32_t n_dims, int32_t mode, int32_t n_ctx_orig,
+    float freq_base, float freq_scale, float ext_factor, float attn_factor, float beta_fast, float beta_slow,
+    int32_t ne01, int32_t ne02, int32_t ne03,
+    uint32_t nb00, uint32_t nb01, uint32_t nb02, uint32_t nb03,
+    int32_t ne0,
+    uint32_t nb0, uint32_t nb1, uint32_t nb2, uint32_t nb3
+) {
+    GGML_ASSERT(src0t == GGML_TYPE_F16 || src0t == GGML_TYPE_F32);
+
+    static const auto spirv_f16 = getSpirvShader(
+        kp::shader_data::op_rope_f16_comp_spv, kp::shader_data::op_rope_f16_comp_spv_len
+    );
+    static const auto spirv_f32 = getSpirvShader(
+        kp::shader_data::op_rope_f32_comp_spv, kp::shader_data::op_rope_f32_comp_spv_len
+    );
+
+    int type_size = src0t == GGML_TYPE_F16 ? 2 : 4;
+
+    GGML_ASSERT(nb03 % type_size == 0);
+    GGML_ASSERT(nb02 % type_size == 0);
+    GGML_ASSERT(nb01 % type_size == 0);
+    GGML_ASSERT(nb00 % type_size == 0);
+    GGML_ASSERT(nb3  % type_size == 0);
+    GGML_ASSERT(nb2  % type_size == 0);
+    GGML_ASSERT(nb1  % type_size == 0);
+    GGML_ASSERT(nb0  % type_size == 0);
+
+    struct PushConstants {
+        uint32_t inAOff, inBOff, outOff;
+        int32_t n_dims, mode, n_ctx_orig;
+        float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
+        uint32_t nb00, nb01, nb02, nb03;
+        int32_t ne0;
+        uint32_t nb0, nb1, nb2, nb3;
+    } pushConsts {
+        safe_divide(inAOff, type_size), safe_divide(inBOff, 4), safe_divide(outOff, type_size),
+        n_dims, mode, n_ctx_orig,
+        freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow,
+        nb00, nb01, nb02, nb03,
+        ne0,
+        nb0, nb1, nb2, nb3
+    };
+
+    auto name = std::string(__func__) + (src0t == GGML_TYPE_F16 ? "_f16" : "_f32");
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(name)) {
+        s_algo = komputeManager()->algorithm<float, PushConstants>(
+            name, s_kompute_context->pool.get(), {inA, inB, out},
+            src0t == GGML_TYPE_F16 ? spirv_f16 : spirv_f32,
+            {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts}
+        );
+    } else {
+        s_algo = komputeManager()->getAlgorithm(name);
+        s_algo->setTensors({inA, inB, out});
+        s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+static void ggml_vk_cpy(
+    const std::vector<uint32_t>& spirv,
+    uint32_t in_element_size, uint32_t out_element_size,
+    kp::Sequence& seq,
+    const std::shared_ptr<kp::Tensor>& in,
+    const std::shared_ptr<kp::Tensor>& out,
+    uint32_t inOff, uint32_t outOff,
+    int32_t ne00, int32_t ne01, int32_t ne02, int32_t ne03,
+    uint32_t nb00, uint32_t nb01, uint32_t nb02, uint32_t nb03,
+    int32_t ne0, int32_t ne1, int32_t ne2,
+    uint32_t nb0, uint32_t nb1, uint32_t nb2, uint32_t nb3
+) {
+    struct PushConstants {
+        uint32_t inOff, outOff;
+        int32_t ne00, ne01, ne02;
+        uint32_t nb00, nb01, nb02, nb03;
+        int32_t ne0, ne1, ne2;
+        uint32_t nb0, nb1, nb2, nb3;
+    } pushConsts {
+        safe_divide(inOff, in_element_size), safe_divide(outOff, out_element_size),
+        ne00, ne01, ne02,
+        nb00, nb01, nb02, nb03,
+        ne0, ne1, ne2,
+        nb0, nb1, nb2, nb3
+    };
+
+    std::string name = std::string(__func__)
+                       + "_i_" + std::to_string(in_element_size)
+                       + "_o_" + std::to_string(out_element_size);
+    std::shared_ptr<kp::Algorithm> s_algo = nullptr;
+    if (!komputeManager()->hasAlgorithm(name))
+        s_algo = komputeManager()->algorithm<float, PushConstants>(name, s_kompute_context->pool.get(), {in, out}, spirv, {unsigned(ne01), unsigned(ne02), unsigned(ne03)}, {}, {pushConsts});
+    else {
+        s_algo = komputeManager()->getAlgorithm(name);
+        s_algo->setTensors({in, out});
+        s_algo->setWorkgroup({unsigned(ne01), unsigned(ne02), unsigned(ne03)});
+        s_algo->setPushConstants<PushConstants>({pushConsts});
+        s_algo->updateDescriptors(s_kompute_context->pool.get());
+    }
+    seq.record<kp::OpAlgoDispatch>(s_algo);
+}
+
+template <typename... Args>
+static void ggml_vk_cpy_f32_f16(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f32_f16_comp_spv,
+        kp::shader_data::op_cpy_f32_f16_comp_spv_len);
+    ggml_vk_cpy(spirv, 4, 2, std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_cpy_f32_f32(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f32_f32_comp_spv,
+        kp::shader_data::op_cpy_f32_f32_comp_spv_len);
+    ggml_vk_cpy(spirv, 4, 4, std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_cpy_f16_f16(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f16_f16_comp_spv,
+        kp::shader_data::op_cpy_f16_f16_comp_spv_len);
+    ggml_vk_cpy(spirv, 2, 2, std::forward<Args>(args)...);
+}
+
+template <typename... Args>
+static void ggml_vk_cpy_f16_f32(Args&&... args) {
+    const static auto spirv = getSpirvShader(kp::shader_data::op_cpy_f16_f32_comp_spv,
+        kp::shader_data::op_cpy_f16_f32_comp_spv_len);
+    ggml_vk_cpy(spirv, 2, 4, std::forward<Args>(args)...);
+}
+
+static bool ggml_vk_supports_op(const struct ggml_tensor * op) {
+    switch (op->type) {
+        case GGML_TYPE_F16:
+        case GGML_TYPE_F32:
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+            break;
+        default:
+            return false;
+    }
+
+    switch (op->op) {
+        case GGML_OP_UNARY:
+            switch (ggml_get_unary_op(op)) {
+                case GGML_UNARY_OP_RELU:
+                case GGML_UNARY_OP_GELU:
+                case GGML_UNARY_OP_SILU:
+                    return ggml_is_contiguous(op->src[0]);
+                default:
+                    ;
+            }
+            break;
+        case GGML_OP_NONE:
+        case GGML_OP_RESHAPE:
+        case GGML_OP_VIEW:
+        case GGML_OP_TRANSPOSE:
+        case GGML_OP_PERMUTE:
+        case GGML_OP_ADD:
+        case GGML_OP_MUL:
+        case GGML_OP_SCALE:
+        case GGML_OP_SOFT_MAX:
+        case GGML_OP_RMS_NORM:
+        case GGML_OP_NORM:
+        case GGML_OP_ROPE:
+            return true;
+        case GGML_OP_DUP:
+        case GGML_OP_CPY:
+        case GGML_OP_CONT:
+            switch (op->src[0]->type) {
+                case GGML_TYPE_F32:
+                case GGML_TYPE_F16:
+                    break;
+                default:
+                    return false;
+            }
+            switch (op->type) {
+                case GGML_TYPE_F32:
+                case GGML_TYPE_F16:
+                    break;
+                default:
+                    return false;
+            }
+            return true;
+        case GGML_OP_DIAG_MASK_INF:
+            return op->ne[3] == 1;
+        case GGML_OP_GET_ROWS:
+            switch (op->src[0]->type) {
+                case GGML_TYPE_F32:
+                case GGML_TYPE_F16:
+                case GGML_TYPE_Q4_0:
+                case GGML_TYPE_Q4_1:
+                case GGML_TYPE_Q6_K:
+                    return op->ne[2] == 1 && op->ne[3] == 1;
+                default:
+                    ;
+            }
+            return false;
+        case GGML_OP_MUL_MAT:
+            if (op->src[1]->type != GGML_TYPE_F32 || ggml_is_transposed(op->src[0]) || ggml_is_transposed(op->src[1]))
+                return false;
+
+            switch (op->src[0]->type) {
+                case GGML_TYPE_F32:
+                case GGML_TYPE_Q6_K:
+                    return op->ne[3] == 1;
+                case GGML_TYPE_F16:
+                case GGML_TYPE_Q8_0:
+                case GGML_TYPE_Q4_0:
+                case GGML_TYPE_Q4_1:
+                    return true;
+                default:
+                    ;
+            }
+        default:
+            ;
+    }
+    return false;
+}
+
+static void ggml_vk_graph_compute(struct ggml_kompute_context * ctx, struct ggml_cgraph * gf) {
+    const int n_seq = 8;
+
+    // FIXME: Figure out if we can somehow optimize the size of the pool... right now we're setting
+    // it to the size of the graph, but I think it can be made smaller?
+    ggml_vk_allocate_descriptor_pool(ctx, gf->n_nodes);
+
+    std::vector<std::shared_ptr<kp::Sequence>> sequences(n_seq);
+
+    for (auto& sequence : sequences) {
+        sequence = komputeManager()->sequence();
+    }
+    for (int seq_idx = 0; seq_idx < n_seq; ++seq_idx) {
+        const int n_nodes_per_seq = (gf->n_nodes + n_seq - 1) / n_seq;
+
+        auto& seq = *sequences[seq_idx];
+
+        const int node_start = (seq_idx + 0) * n_nodes_per_seq;
+        const int node_end   = std::min((seq_idx == n_seq - 1) ? gf->n_nodes : (seq_idx + 1) * n_nodes_per_seq, gf->n_nodes);
+
+        bool any_commands_recorded = false;
+
+        for (int i = node_start; i < node_end; ++i) {
+            struct ggml_tensor * src0 = gf->nodes[i]->src[0];
+            struct ggml_tensor * src1 = gf->nodes[i]->src[1];
+            struct ggml_tensor * src2 = gf->nodes[i]->src[2]; GGML_UNUSED(src2);
+            struct ggml_tensor * dst = gf->nodes[i];
+            GGML_ASSERT(dst->data != nullptr);
+
+            if (ggml_is_empty(dst)) {
+                continue;
+            }
+
+            switch (dst->op) {
+                case GGML_OP_NONE:
+                case GGML_OP_RESHAPE:
+                case GGML_OP_VIEW:
+                case GGML_OP_TRANSPOSE:
+                case GGML_OP_PERMUTE:
+                    continue; // noop -> next node
+                default:
+                    break;
+            }
+
+            any_commands_recorded = true;
+
+            if (!ggml_vk_supports_op(dst)) {
+                 fprintf(stderr, "%s: error: unsupported op '%s'\n", __func__, ggml_op_desc(dst));
+                 GGML_ASSERT(!"unsupported op");
+            }
+
+            const int32_t ne00 = src0 ? src0->ne[0] : 0;
+            const int32_t ne01 = src0 ? src0->ne[1] : 0;
+            const int32_t ne02 = src0 ? src0->ne[2] : 0;
+            const int32_t ne03 = src0 ? src0->ne[3] : 0;
+
+            const uint32_t nb00 = src0 ? src0->nb[0] : 0;
+            const uint32_t nb01 = src0 ? src0->nb[1] : 0;
+            const uint32_t nb02 = src0 ? src0->nb[2] : 0;
+            const uint32_t nb03 = src0 ? src0->nb[3] : 0;
+
+            const int32_t ne10 = src1 ? src1->ne[0] : 0;
+            const int32_t ne11 = src1 ? src1->ne[1] : 0;
+            const int32_t ne12 = src1 ? src1->ne[2] : 0;
+            const int32_t ne13 = src1 ? src1->ne[3] : 0;
+
+            const uint32_t nb10 = src1 ? src1->nb[0] : 0;
+            const uint32_t nb11 = src1 ? src1->nb[1] : 0;
+            const uint32_t nb12 = src1 ? src1->nb[2] : 0;
+            const uint32_t nb13 = src1 ? src1->nb[3] : 0;
+
+            const int32_t ne0 = dst ? dst->ne[0] : 0;
+            const int32_t ne1 = dst ? dst->ne[1] : 0;
+            const int32_t ne2 = dst ? dst->ne[2] : 0;
+//            const int32_t ne3 = dst ? dst->ne[3] : 0;
+
+            const uint32_t nb0 = dst ? dst->nb[0] : 0;
+            const uint32_t nb1 = dst ? dst->nb[1] : 0;
+            const uint32_t nb2 = dst ? dst->nb[2] : 0;
+            const uint32_t nb3 = dst ? dst->nb[3] : 0;
+
+            const enum ggml_type src0t = src0 ? src0->type : GGML_TYPE_COUNT;
+            const enum ggml_type src1t = src1 ? src1->type : GGML_TYPE_COUNT;
+            const enum ggml_type dstt = dst ? dst->type : GGML_TYPE_COUNT;
+
+            const static std::shared_ptr<kp::Tensor> nullTensor = nullptr;
+            uint32_t off_src0 = 0;
+            uint32_t off_src1 = 0;
+            uint32_t off_dst  = 0;
+            const std::shared_ptr<kp::Tensor>& id_src0 = src0 ? ggml_vk_get_tensor(src0, &off_src0) : nullTensor;
+            const std::shared_ptr<kp::Tensor>& id_src1 = src1 ? ggml_vk_get_tensor(src1, &off_src1) : nullTensor;
+            const std::shared_ptr<kp::Tensor>& id_dst  = dst  ? ggml_vk_get_tensor(dst,  &off_dst)  : nullTensor;
+
+            switch (dst->op) {
+                case GGML_OP_ADD:
+                    {
+                        if (ggml_nelements(src1) == ne10 && ggml_is_contiguous(src1) && ne00 % 4 == 0 && ne10 % 4 == 0) {
+                            // src1 is a row
+                            ggml_vk_addrow(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ggml_nelements(dst)/4, ne00);
+                        } else {
+                            ggml_vk_add(
+                                seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
+                                ne00, ne01, ne02, ne03,
+                                nb00, nb01, nb02, nb03,
+                                ne10, ne11, ne12, ne13,
+                                nb10, nb11, nb12, nb13,
+                                ne0,
+                                nb0, nb1, nb2, nb3
+                            );
+                        }
+                    } break;
+                case GGML_OP_MUL:
+                    {
+                        ggml_vk_mul(
+                            seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
+                            ne00, ne01, ne02, ne03,
+                            nb00, nb01, nb02, nb03,
+                            ne10, ne11, ne12, ne13,
+                            nb10, nb11, nb12, nb13,
+                            ne0,
+                            nb0, nb1, nb2, nb3
+                        );
+                    } break;
+                case GGML_OP_SCALE:
+                    {
+                        float scale; memcpy(&scale, dst->op_params, sizeof(float));
+
+                        ggml_vk_scale(seq, id_src0, id_dst, off_src0, off_dst, ggml_nelements(dst), scale);
+                    } break;
+                case GGML_OP_UNARY:
+                    {
+                        int64_t n = ggml_nelements(dst);
+                        GGML_ASSERT(n % 4 == 0);
+                        switch (ggml_get_unary_op(gf->nodes[i])) {
+                            case GGML_UNARY_OP_SILU:
+                                {
+                                    ggml_vk_silu(seq, id_src0, id_dst, off_src0, off_dst, n/4);
+                                } break;
+                            case GGML_UNARY_OP_RELU:
+                                {
+                                    ggml_vk_relu(seq, id_src0, id_dst, off_src0, off_dst, n/4);
+                                } break;
+                            case GGML_UNARY_OP_GELU:
+                                {
+                                    GGML_ASSERT(n % 8 == 0);
+                                    ggml_vk_gelu(seq, id_src0, id_dst, off_src0, off_dst, n/8);
+                                } break;
+                            default:
+                                {
+                                    fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op));
+                                    GGML_ASSERT(false);
+                                }
+                        }
+                    } break;
+                case GGML_OP_SOFT_MAX:
+                    {
+                        float scale;
+                        float max_bias;
+
+                        memcpy(&scale,    (float *)dst->op_params + 0, sizeof(float));
+                        memcpy(&max_bias, (float *)dst->op_params + 1, sizeof(float));
+
+#pragma message("TODO: add ggml_vk_soft_max() F16 src1 support")
+#pragma message("ref:  https://github.com/ggerganov/llama.cpp/pull/5021")
+                        GGML_ASSERT(!src1 || src1t == GGML_TYPE_F32);
+
+#pragma message("TODO: add ALiBi support")
+#pragma message("ref:  https://github.com/ggerganov/llama.cpp/pull/7192")
+                        GGML_ASSERT(max_bias == 0.0f);
+
+                        ggml_vk_soft_max(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, ne01, ne02, ne03, scale);
+                    } break;
+                case GGML_OP_DIAG_MASK_INF:
+                    {
+                        const int n_past = ((int32_t *)(dst->op_params))[0];
+                        ggml_vk_diag_mask_inf(seq, id_src0, id_dst, off_src0, off_dst, n_past, ne00, ne01, ne02);
+                    } break;
+                case GGML_OP_NORM:
+                    {
+                        float eps;
+                        memcpy(&eps, dst->op_params, sizeof(float));
+                        ggml_vk_norm(seq, id_src0, id_dst, off_src0, off_dst, ne00, nb01, ggml_nrows(src0), eps);
+                    } break;
+                case GGML_OP_RMS_NORM:
+                    {
+                        GGML_ASSERT(ne00 % 4 == 0);
+
+                        float eps;
+                        memcpy(&eps, dst->op_params, sizeof(float));
+                        ggml_vk_rms_norm(seq, id_src0, id_dst, off_src0, off_dst, ne00, nb01, ggml_nrows(src0), eps);
+                    } break;
+                case GGML_OP_MUL_MAT:
+                    {
+                        GGML_ASSERT(ne00 == ne10);
+
+                        GGML_ASSERT(ne12 % ne02 == 0);
+                        GGML_ASSERT(ne13 % ne03 == 0);
+
+                        const uint32_t r2 = ne12/ne02;
+                        const uint32_t r3 = ne13/ne03;
+
+                        if (src1t != GGML_TYPE_F32) {
+                            fprintf(stderr, "%s: %s: Unsupported src1 type: %u/%u\n", __func__, ggml_op_name(dst->op), src0t, src1t);
+                            goto not_implemented;
+                        }
+
+                        if (ggml_is_transposed(src0) ||
+                            ggml_is_transposed(src1)) {
+                            fprintf(stderr, "%s: %s: matmul on tranposed tensor not supported: %u/%u\n", __func__, ggml_op_name(dst->op), src0t, src1t);
+                            goto not_implemented;
+                        }
+
+                        switch (src0t) {
+                            case GGML_TYPE_F32:
+                                ggml_vk_mul_mat_mat_f32(
+                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
+                                    ne00, ne01, ne02, nb01, nb02, ne11, ne12, nb11, nb12, nb1, nb2
+                                );
+                                break;
+                            case GGML_TYPE_F16:
+                                ggml_vk_mul_mat_f16(
+                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
+                                    ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, ne13, nb10, nb11, nb12,
+                                    ne0, ne1, r2, r3
+                                );
+                                break;
+                            case GGML_TYPE_Q8_0:
+                                ggml_vk_mul_mat_q8_0(
+                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
+                                    ne00, ne01, ne02, ne10, ne11, ne12, ne13, ne0, ne1, r2, r3
+                                );
+                                break;
+                            case GGML_TYPE_Q4_0:
+                                ggml_vk_mul_mat_q4_0(
+                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
+                                    ne00, ne01, ne02, ne10, ne11, ne12, ne13, ne0, ne1, r2, r3
+                                );
+                                break;
+                            case GGML_TYPE_Q4_1:
+                                ggml_vk_mul_mat_q4_1(
+                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
+                                    ne00, ne01, ne02, ne10, ne11, ne12, ne13, ne0, ne1, r2, r3
+                                );
+                                break;
+                            case GGML_TYPE_Q6_K:
+                                ggml_vk_mul_mat_q6_k(
+                                    seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst,
+                                    ne00, ne10, ne0, ne1, ne01, ne11, ne12, ne02
+                                );
+                                break;
+                            default: {
+                                fprintf(stderr, "%s: %s: Unsupported quantization: %u/%u\n", __func__, ggml_op_name(dst->op), src0t, src1t);
+                                goto not_implemented;
+                            }
+                        }
+
+                    } break;
+                case GGML_OP_GET_ROWS:
+                    {
+                        if (src0t == GGML_TYPE_F32) {
+                            ggml_vk_get_rows_f32(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1));
+                        } else if (src0t == GGML_TYPE_F16) {
+                            ggml_vk_get_rows_f16(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1));
+                        } else if (src0t == GGML_TYPE_Q4_0) {
+                            ggml_vk_get_rows_q4_0(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1));
+                        } else if (src0t == GGML_TYPE_Q4_1) {
+                            ggml_vk_get_rows_q4_1(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1));
+                        } else if (src0t == GGML_TYPE_Q6_K) {
+                            ggml_vk_get_rows_q6_k(seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, ne00, nb01, nb1, ggml_nelements(src1));
+                        } else {
+                            fprintf(stderr, "%s: %s: Unsupported quantization: %u\n", __func__, ggml_op_name(dst->op), src0t);
+                            goto not_implemented;
+                        }
+                    } break;
+                case GGML_OP_ROPE:
+                    {
+#pragma message("TODO: implement phi3 frequency factors support")
+#pragma message("      https://github.com/ggerganov/llama.cpp/pull/7225")
+                        GGML_ASSERT(dst->src[2] == nullptr && "phi3 frequency factors not implemented yet");
+
+#pragma message("TODO: update rope NORM mode to match NEOX mode")
+#pragma message("      https://github.com/ggerganov/llama.cpp/pull/7634")
+
+                        GGML_ASSERT(ne10 == ne02);
+                        GGML_ASSERT(src0t == dstt);
+                        // const int n_past = ((int32_t *) dst->op_params)[0];
+                        const int n_dims     = ((int32_t *) dst->op_params)[1];
+                        const int mode       = ((int32_t *) dst->op_params)[2];
+                        // skip 3, n_ctx used in GLM RoPE, unimplemented in Vulkan
+                        const int n_ctx_orig = ((int32_t *) dst->op_params)[4];
+
+                        float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
+                        memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
+                        memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
+                        memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
+                        memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
+                        memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
+                        memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
+                        ggml_vk_rope(
+                            seq, id_src0, id_src1, id_dst, off_src0, off_src1, off_dst, src0t, n_dims, mode, n_ctx_orig,
+                            freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow,
+                            ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, nb0, nb1, nb2, nb3
+                        );
+                    } break;
+                case GGML_OP_DUP:
+                case GGML_OP_CPY:
+                case GGML_OP_CONT:
+                    {
+                        switch (src0t) {
+                            case GGML_TYPE_F32:
+                                {
+                                    switch (dstt) {
+                                        case GGML_TYPE_F16: ggml_vk_cpy_f32_f16(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break;
+                                        case GGML_TYPE_F32: ggml_vk_cpy_f32_f32(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break;
+                                        default: goto not_implemented;
+                                    }
+                                } break;
+                            case GGML_TYPE_F16:
+                                {
+                                    switch (dstt) {
+                                        case GGML_TYPE_F16: ggml_vk_cpy_f16_f16(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break;
+                                        case GGML_TYPE_F32: ggml_vk_cpy_f16_f32(seq, id_src0, id_dst, off_src0, off_dst, ne00, ne01, ne02, ne03, nb00, nb01, nb02, nb03, ne0, ne1, ne2, nb0, nb1, nb2, nb3); break;
+                                    default: goto not_implemented;
+                                } break;
+                            default: goto not_implemented;
+                            }
+                        }
+                    } break;
+                default: goto not_implemented;
+            }
+            continue;
+            not_implemented: {}
+            fprintf(stderr, "%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op));
+            //GGML_ASSERT(false);
+        }
+
+        // Evaluate sequence
+        if (any_commands_recorded) {
+            seq.evalAsync();
+        }
+    }
+
+    // Wait for all sequences to finish
+    for (auto& sequence : sequences) {
+        if (sequence->isRunning())
+            sequence->evalAwait();
+    }
+
+    ggml_vk_free_descriptor_pool(ctx);
+}
+
+template<>
+kp::Tensor::TensorDataTypes
+kp::TensorT<half>::dataType()
+{
+    return TensorDataTypes::eFloat;
+}
+
+template<>
+kp::Tensor::TensorDataTypes
+kp::TensorT<uint8_t>::dataType()
+{
+    return TensorDataTypes::eUnsignedInt;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+// backend interface
+
+struct ggml_backend_kompute_buffer_type_context {
+    int         device;
+    int         device_ref = 0;
+    uint64_t    buffer_alignment;
+    uint64_t    max_alloc;
+    std::string name;
+
+    ggml_backend_kompute_buffer_type_context(int device, uint64_t buffer_alignment, uint64_t max_alloc)
+        : device(device), buffer_alignment(buffer_alignment), max_alloc(max_alloc), name(ggml_kompute_format_name(device)) {}
+};
+
+static void ggml_backend_kompute_device_ref(ggml_backend_buffer_type_t buft) {
+    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buft->context);
+
+    if (!ctx->device_ref) {
+        komputeManager()->initializeDevice(
+            ctx->device, {}, {
+                "VK_KHR_shader_float16_int8", "VK_KHR_8bit_storage",
+                "VK_KHR_16bit_storage", "VK_KHR_shader_non_semantic_info"
+            }
+        );
+    }
+
+    assert(ggml_vk_has_device());
+    ctx->device_ref++;
+}
+
+static void ggml_backend_kompute_device_unref(ggml_backend_buffer_type_t buft) {
+    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buft->context);
+
+    assert(ctx->device_ref > 0);
+
+    ctx->device_ref--;
+
+    if (!ctx->device_ref) {
+        komputeManager.destroy();
+    }
+}
+
+static const char * ggml_backend_kompute_buffer_get_name(ggml_backend_buffer_t buffer) {
+    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buffer->buft->context);
+    return ctx->name.c_str();
+}
+
+static void ggml_backend_kompute_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    auto * memory = (ggml_vk_memory *)buffer->context;
+    if (ggml_vk_has_device()) {
+        ggml_vk_free_memory(*memory);
+    }
+    delete memory;
+}
+
+static void * ggml_backend_kompute_buffer_get_base(ggml_backend_buffer_t buffer) {
+    return ((ggml_vk_memory *)buffer->context)->data;
+}
+
+static void ggml_backend_kompute_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    GGML_UNUSED(buffer);
+
+    const auto res = ggml_vk_get_tensor(tensor);
+    GGML_ASSERT(res);
+
+    memcpy((char *)tensor->data + offset, data, size);
+
+    komputeManager()->sequence()->eval<kp::OpTensorSyncDevice>({res});
+}
+
+static void ggml_backend_kompute_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    GGML_UNUSED(buffer);
+
+    const auto res = ggml_vk_get_tensor(tensor);
+    GGML_ASSERT(res);
+
+    komputeManager()->sequence()->eval<kp::OpTensorSyncLocal>({res});
+
+    memcpy(data, (const char *)tensor->data + offset, size);
+}
+
+static void ggml_backend_kompute_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
+    auto * memory = (ggml_vk_memory *)buffer->context;
+    memset(memory->data, value, buffer->size);
+
+    if (memory->stagingBuffer)
+        komputeManager()->sequence()->eval<kp::OpBufferSyncDevice>(memory->primaryBuffer, memory->stagingBuffer, memory->size);
+}
+
+static ggml_backend_buffer_i ggml_backend_kompute_buffer_i = {
+    /* .get_name        = */ ggml_backend_kompute_buffer_get_name,
+    /* .free_buffer     = */ ggml_backend_kompute_buffer_free_buffer,
+    /* .get_base        = */ ggml_backend_kompute_buffer_get_base,
+    /* .init_tensor     = */ NULL,
+    /* .set_tensor      = */ ggml_backend_kompute_buffer_set_tensor,
+    /* .get_tensor      = */ ggml_backend_kompute_buffer_get_tensor,
+    /* .cpy_tensor      = */ NULL,
+    /* .clear           = */ ggml_backend_kompute_buffer_clear,
+    /* .reset           = */ NULL,
+};
+
+// default buffer type
+
+static const char * ggml_backend_kompute_buffer_type_get_name(ggml_backend_buffer_type_t buft) {
+    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buft->context);
+    return ctx->name.c_str();
+}
+
+static ggml_backend_buffer_t ggml_backend_kompute_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    ggml_backend_kompute_device_ref(buft);
+    auto * ctx = new ggml_vk_memory(ggml_vk_allocate(size));
+    return ggml_backend_buffer_init(buft, ggml_backend_kompute_buffer_i, ctx, size);
+}
+
+static size_t ggml_backend_kompute_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
+    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buft->context);
+    return ctx->buffer_alignment;
+}
+
+static size_t ggml_backend_vk_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) {
+    auto * ctx = static_cast<ggml_backend_kompute_buffer_type_context *>(buft->context);
+    return ctx->max_alloc;
+}
+
+static ggml_backend_buffer_type_i ggml_backend_kompute_buffer_type_interface = {
+    /* .get_name         = */ ggml_backend_kompute_buffer_type_get_name,
+    /* .alloc_buffer     = */ ggml_backend_kompute_buffer_type_alloc_buffer,
+    /* .get_alignment    = */ ggml_backend_kompute_buffer_type_get_alignment,
+    /* .get_max_size     = */ ggml_backend_vk_buffer_type_get_max_size,
+    /* .get_alloc_size   = */ NULL, // defaults to ggml_nbytes
+    /* .is_host          = */ NULL,
+};
+
+ggml_backend_buffer_type_t ggml_backend_kompute_buffer_type(int device) {
+    static std::vector<ggml_backend_buffer_type> bufts = []() {
+        std::vector<ggml_backend_buffer_type> vec;
+        auto devices = ggml_vk_available_devices_internal(0);
+        vec.reserve(devices.size());
+
+        for (const auto & dev : devices) {
+            vec.push_back({
+                /* .iface   = */ ggml_backend_kompute_buffer_type_interface,
+                /* .context = */ new ggml_backend_kompute_buffer_type_context(dev.index, dev.bufferAlignment, dev.maxAlloc)
+            });
+        }
+        return vec;
+    }();
+
+    auto it = std::find_if(bufts.begin(), bufts.end(), [device](const ggml_backend_buffer_type & t) {
+        return device == static_cast<ggml_backend_kompute_buffer_type_context *>(t.context)->device;
+    });
+    return it < bufts.end() ? &*it : nullptr;
+}
+
+// backend
+
+static const char * ggml_backend_kompute_name(ggml_backend_t backend) {
+    auto * ctx = static_cast<ggml_kompute_context *>(backend->context);
+    return ctx->name.c_str();
+}
+
+static void ggml_backend_kompute_free(ggml_backend_t backend) {
+    auto * ctx = static_cast<ggml_kompute_context *>(backend->context);
+
+    assert(ctx == s_kompute_context);
+    s_kompute_context = nullptr;
+    if (ctx != nullptr) {
+        delete ctx;
+    }
+
+    delete backend;
+}
+
+static ggml_backend_buffer_type_t ggml_backend_kompute_get_default_buffer_type(ggml_backend_t backend) {
+    auto * ctx = static_cast<ggml_kompute_context *>(backend->context);
+    return ggml_backend_kompute_buffer_type(ctx->device);
+}
+
+static ggml_status ggml_backend_kompute_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
+    auto * ctx = static_cast<ggml_kompute_context *>(backend->context);
+    ggml_vk_graph_compute(ctx, cgraph);
+    return GGML_STATUS_SUCCESS;
+}
+
+static bool ggml_backend_kompute_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
+    GGML_UNUSED(backend);
+    return ggml_vk_supports_op(op);
+}
+
+static bool ggml_backend_kompute_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
+    GGML_UNUSED(backend);
+    return buft->iface.get_name == ggml_backend_kompute_buffer_type_get_name;
+}
+
+static struct ggml_backend_i kompute_backend_i = {
+    /* .get_name                = */ ggml_backend_kompute_name,
+    /* .free                    = */ ggml_backend_kompute_free,
+    /* .get_default_buffer_type = */ ggml_backend_kompute_get_default_buffer_type,
+    /* .set_tensor_async        = */ NULL,
+    /* .get_tensor_async        = */ NULL,
+    /* .cpy_tensor_async        = */ NULL,
+    /* .synchronize             = */ NULL,
+    /* .graph_plan_create       = */ NULL,
+    /* .graph_plan_free         = */ NULL,
+    /* .graph_plan_update       = */ NULL,
+    /* .graph_plan_compute      = */ NULL,
+    /* .graph_compute           = */ ggml_backend_kompute_graph_compute,
+    /* .supports_op             = */ ggml_backend_kompute_supports_op,
+    /* .supports_buft           = */ ggml_backend_kompute_supports_buft,
+    /* .offload_op              = */ NULL,
+    /* .event_new               = */ NULL,
+    /* .event_free              = */ NULL,
+    /* .event_record            = */ NULL,
+    /* .event_wait              = */ NULL,
+    /* .event_synchronize       = */ NULL,
+};
+
+static ggml_guid_t ggml_backend_kompute_guid() {
+    static ggml_guid guid = { 0x7b, 0x57, 0xdc, 0xaf, 0xde, 0x12, 0x1d, 0x49, 0xfb, 0x35, 0xfa, 0x9b, 0x18, 0x31, 0x1d, 0xca };
+    return &guid;
+}
+
+ggml_backend_t ggml_backend_kompute_init(int device) {
+    GGML_ASSERT(s_kompute_context == nullptr);
+    s_kompute_context = new ggml_kompute_context(device);
+
+    ggml_backend_t kompute_backend = new ggml_backend {
+        /* .guid      = */ ggml_backend_kompute_guid(),
+        /* .interface = */ kompute_backend_i,
+        /* .context   = */ s_kompute_context,
+    };
+
+    return kompute_backend;
+}
+
+bool ggml_backend_is_kompute(ggml_backend_t backend) {
+    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_kompute_guid());
+}
+
+static ggml_backend_t ggml_backend_reg_kompute_init(const char * params, void * user_data) {
+    GGML_UNUSED(params);
+    return ggml_backend_kompute_init(intptr_t(user_data));
+}
+
+extern "C" int ggml_backend_kompute_reg_devices();
+
+int ggml_backend_kompute_reg_devices() {
+    auto devices = ggml_vk_available_devices_internal(0);
+    for (const auto & device : devices) {
+        ggml_backend_register(
+            ggml_kompute_format_name(device.index).c_str(),
+            ggml_backend_reg_kompute_init,
+            ggml_backend_kompute_buffer_type(device.index),
+            reinterpret_cast<void *>(intptr_t(device.index))
+        );
+    }
+    return devices.size();
+}
diff --git a/ggml/src/ggml-metal.m b/ggml/src/ggml-metal.m
new file mode 100644 (file)
index 0000000..79902c9
--- /dev/null
@@ -0,0 +1,3273 @@
+#import "ggml-metal.h"
+
+#import "ggml-backend-impl.h"
+#import "ggml.h"
+
+#import <Foundation/Foundation.h>
+
+#import <Metal/Metal.h>
+
+#undef MIN
+#undef MAX
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+#ifdef GGML_METAL_NDEBUG
+#define GGML_METAL_LOG_INFO(...)
+#define GGML_METAL_LOG_WARN(...)
+#define GGML_METAL_LOG_ERROR(...)
+#else
+#define GGML_METAL_LOG_INFO(...)  ggml_metal_log(GGML_LOG_LEVEL_INFO, __VA_ARGS__)
+#define GGML_METAL_LOG_WARN(...)  ggml_metal_log(GGML_LOG_LEVEL_WARN, __VA_ARGS__)
+#define GGML_METAL_LOG_ERROR(...) ggml_metal_log(GGML_LOG_LEVEL_ERROR, __VA_ARGS__)
+#endif
+
+#define UNUSED(x) (void)(x)
+
+struct ggml_metal_kernel {
+    id<MTLComputePipelineState> pipeline;
+};
+
+enum ggml_metal_kernel_type {
+    GGML_METAL_KERNEL_TYPE_ADD,
+    GGML_METAL_KERNEL_TYPE_ADD_ROW,
+    GGML_METAL_KERNEL_TYPE_MUL,
+    GGML_METAL_KERNEL_TYPE_MUL_ROW,
+    GGML_METAL_KERNEL_TYPE_DIV,
+    GGML_METAL_KERNEL_TYPE_DIV_ROW,
+    GGML_METAL_KERNEL_TYPE_REPEAT_F32,
+    GGML_METAL_KERNEL_TYPE_REPEAT_F16,
+    GGML_METAL_KERNEL_TYPE_REPEAT_I32,
+    GGML_METAL_KERNEL_TYPE_REPEAT_I16,
+    GGML_METAL_KERNEL_TYPE_SCALE,
+    GGML_METAL_KERNEL_TYPE_SCALE_4,
+    GGML_METAL_KERNEL_TYPE_CLAMP,
+    GGML_METAL_KERNEL_TYPE_TANH,
+    GGML_METAL_KERNEL_TYPE_RELU,
+    GGML_METAL_KERNEL_TYPE_SIGMOID,
+    GGML_METAL_KERNEL_TYPE_GELU,
+    GGML_METAL_KERNEL_TYPE_GELU_4,
+    GGML_METAL_KERNEL_TYPE_GELU_QUICK,
+    GGML_METAL_KERNEL_TYPE_GELU_QUICK_4,
+    GGML_METAL_KERNEL_TYPE_SILU,
+    GGML_METAL_KERNEL_TYPE_SILU_4,
+    GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16,
+    GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16_4,
+    GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32,
+    GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32_4,
+    GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF,
+    GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF_8,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_F32,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_F16,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_0,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_1,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_0,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_1,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q8_0,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q2_K,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q3_K,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_K,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_K,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_Q6_K,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XXS,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XS,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_XXS,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_S,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_S,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_S,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_M,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_NL,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_XS,
+    GGML_METAL_KERNEL_TYPE_GET_ROWS_I32,
+    GGML_METAL_KERNEL_TYPE_RMS_NORM,
+    GGML_METAL_KERNEL_TYPE_GROUP_NORM,
+    GGML_METAL_KERNEL_TYPE_NORM,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_F32_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F16,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_1ROW,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_L4,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_1_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_Q2_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_Q3_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_Q6_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XXS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_XXS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_M_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_NL_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_XS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F32_F32,
+  //GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F16,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32,
+  //GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_1ROW,
+  //GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_L4,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_1_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_1_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q8_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q2_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q3_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q6_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XXS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_XXS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_M_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_NL_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_XS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_F32_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_F16_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_1_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_1_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_Q8_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_Q2_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_Q3_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_Q6_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XXS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_XXS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_1_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_1_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q8_0_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q2_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q3_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q6_K_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XXS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_XXS_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_S_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_M_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_NL_F32,
+    GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_XS_F32,
+    GGML_METAL_KERNEL_TYPE_ROPE_NORM_F32,
+    GGML_METAL_KERNEL_TYPE_ROPE_NORM_F16,
+    GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F32,
+    GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F16,
+    GGML_METAL_KERNEL_TYPE_IM2COL_F16,
+    GGML_METAL_KERNEL_TYPE_IM2COL_F32,
+    GGML_METAL_KERNEL_TYPE_UPSCALE_F32,
+    GGML_METAL_KERNEL_TYPE_PAD_F32,
+    GGML_METAL_KERNEL_TYPE_ARANGE_F32,
+    GGML_METAL_KERNEL_TYPE_TIMESTEP_EMBEDDING_F32,
+    GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC,
+    GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC,
+    GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32,
+    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H64,
+    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H80,
+    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H96,
+    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H112,
+    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H128,
+  //GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H256,     // https://github.com/ggerganov/llama.cpp/issues/7261
+    GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H128,
+  //GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H256, // https://github.com/ggerganov/llama.cpp/issues/7261
+    GGML_METAL_KERNEL_TYPE_CPY_F32_F16,
+    GGML_METAL_KERNEL_TYPE_CPY_F32_F32,
+    GGML_METAL_KERNEL_TYPE_CPY_F32_Q8_0,
+    GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_0,
+    GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_1,
+    GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_0,
+    GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_1,
+    GGML_METAL_KERNEL_TYPE_CPY_F32_IQ4_NL,
+    GGML_METAL_KERNEL_TYPE_CPY_F16_F16,
+    GGML_METAL_KERNEL_TYPE_CPY_F16_F32,
+    GGML_METAL_KERNEL_TYPE_CONCAT,
+    GGML_METAL_KERNEL_TYPE_SQR,
+    GGML_METAL_KERNEL_TYPE_SUM_ROWS,
+
+    GGML_METAL_KERNEL_TYPE_COUNT
+};
+
+struct ggml_metal_context {
+    int n_cb;
+
+    id<MTLDevice>       device;
+    id<MTLCommandQueue> queue;
+
+    dispatch_queue_t d_queue;
+
+    struct ggml_metal_kernel kernels[GGML_METAL_KERNEL_TYPE_COUNT];
+
+    bool support_simdgroup_reduction;
+    bool support_simdgroup_mm;
+
+    bool should_capture_next_compute;
+};
+
+// MSL code
+// TODO: move the contents here when ready
+//       for now it is easier to work in a separate file
+// static NSString * const msl_library_source = @"see metal.metal";
+
+// Here to assist with NSBundle Path Hack
+@interface GGMLMetalClass : NSObject
+@end
+@implementation GGMLMetalClass
+@end
+
+static void ggml_metal_default_log_callback(enum ggml_log_level level, const char * msg, void * user_data) {
+    fprintf(stderr, "%s", msg);
+
+    UNUSED(level);
+    UNUSED(user_data);
+}
+
+ggml_log_callback ggml_metal_log_callback = ggml_metal_default_log_callback;
+void * ggml_metal_log_user_data = NULL;
+
+GGML_ATTRIBUTE_FORMAT(2, 3)
+static void ggml_metal_log(enum ggml_log_level level, const char * format, ...){
+    if (ggml_metal_log_callback != NULL) {
+        va_list args;
+        va_start(args, format);
+        char buffer[128];
+        int len = vsnprintf(buffer, 128, format, args);
+        if (len < 128) {
+            ggml_metal_log_callback(level, buffer, ggml_metal_log_user_data);
+        } else {
+            char* buffer2 = malloc(len+1);
+            va_end(args);
+            va_start(args, format);
+            vsnprintf(buffer2, len+1, format, args);
+            buffer2[len] = 0;
+            ggml_metal_log_callback(level, buffer2, ggml_metal_log_user_data);
+            free(buffer2);
+        }
+        va_end(args);
+    }
+}
+
+static void * ggml_metal_host_malloc(size_t n) {
+    void * data = NULL;
+
+#if TARGET_OS_OSX
+    kern_return_t err = vm_allocate((vm_map_t) mach_task_self(), (void *) &data, n, VM_FLAGS_ANYWHERE);
+    if (err != KERN_SUCCESS) {
+        GGML_METAL_LOG_ERROR("%s: error: vm_allocate failed\n", __func__);
+        return NULL;
+    }
+#else
+    const int result = posix_memalign((void **) &data, sysconf(_SC_PAGESIZE), n);
+    if (result != 0) {
+        GGML_METAL_LOG_ERROR("%s: error: posix_memalign failed\n", __func__);
+        return NULL;
+    }
+#endif
+
+    return data;
+}
+
+static struct ggml_metal_context * ggml_metal_init(int n_cb) {
+    GGML_METAL_LOG_INFO("%s: allocating\n", __func__);
+
+#if TARGET_OS_OSX && !GGML_METAL_NDEBUG
+    // Show all the Metal device instances in the system
+    NSArray * devices = MTLCopyAllDevices();
+    for (id<MTLDevice> device in devices) {
+        GGML_METAL_LOG_INFO("%s: found device: %s\n", __func__, [[device name] UTF8String]);
+    }
+    [devices release]; // since it was created by a *Copy* C method
+#endif
+
+    // Pick and show default Metal device
+    id<MTLDevice> device = MTLCreateSystemDefaultDevice();
+    GGML_METAL_LOG_INFO("%s: picking default device: %s\n", __func__, [[device name] UTF8String]);
+
+    // Configure context
+    struct ggml_metal_context * ctx = malloc(sizeof(struct ggml_metal_context));
+    ctx->device = device;
+    ctx->n_cb   = MIN(n_cb, GGML_METAL_MAX_BUFFERS);
+    ctx->queue  = [ctx->device newCommandQueue];
+    ctx->d_queue = dispatch_queue_create("ggml-metal", DISPATCH_QUEUE_CONCURRENT);
+
+    id<MTLLibrary> metal_library;
+
+    // load library
+    //
+    // - first check if the library is embedded
+    // - then check if the library is in the bundle
+    // - if not found, load the source and compile it
+    // - if that fails, return NULL
+    {
+        NSBundle * bundle = nil;
+#ifdef SWIFT_PACKAGE
+        bundle = SWIFTPM_MODULE_BUNDLE;
+#else
+        bundle = [NSBundle bundleForClass:[GGMLMetalClass class]];
+#endif
+
+        NSError * error = nil;
+
+#if GGML_METAL_EMBED_LIBRARY
+        const bool try_metallib = false;
+#else
+        const bool try_metallib = true;
+#endif
+
+        NSString * path_lib = [bundle pathForResource:@"default" ofType:@"metallib"];
+        if (try_metallib && path_lib != nil) {
+            // pre-compiled library found
+            NSURL * libURL = [NSURL fileURLWithPath:path_lib];
+            GGML_METAL_LOG_INFO("%s: loading '%s'\n", __func__, [path_lib UTF8String]);
+
+            metal_library = [ctx->device newLibraryWithURL:libURL error:&error];
+            if (error) {
+                GGML_METAL_LOG_ERROR("%s: error: %s\n", __func__, [[error description] UTF8String]);
+                return NULL;
+            }
+        } else {
+#if GGML_METAL_EMBED_LIBRARY
+            GGML_METAL_LOG_INFO("%s: using embedded metal library\n", __func__);
+
+            extern const char ggml_metallib_start[];
+            extern const char ggml_metallib_end[];
+
+            NSString * src = [[NSString alloc] initWithBytes:ggml_metallib_start length:(ggml_metallib_end-ggml_metallib_start) encoding:NSUTF8StringEncoding];
+#else
+            GGML_METAL_LOG_INFO("%s: default.metallib not found, loading from source\n", __func__);
+
+            NSString * path_source;
+            NSString * path_resource = [[NSProcessInfo processInfo].environment objectForKey:@"GGML_METAL_PATH_RESOURCES"];
+
+            GGML_METAL_LOG_INFO("%s: GGML_METAL_PATH_RESOURCES = %s\n", __func__, path_resource ? [path_resource UTF8String] : "nil");
+
+            if (path_resource) {
+                path_source = [path_resource stringByAppendingPathComponent:@"ggml-metal.metal"];
+            } else {
+                path_source = [bundle pathForResource:@"ggml-metal" ofType:@"metal"];
+            }
+
+            if (path_source == nil) {
+                GGML_METAL_LOG_WARN("%s: error: could not use bundle path to find ggml-metal.metal, falling back to trying cwd\n", __func__);
+                path_source = @"ggml-metal.metal";
+            }
+
+            GGML_METAL_LOG_INFO("%s: loading '%s'\n", __func__, [path_source UTF8String]);
+
+            NSString * src = [NSString stringWithContentsOfFile:path_source encoding:NSUTF8StringEncoding error:&error];
+            if (error) {
+                GGML_METAL_LOG_ERROR("%s: error: %s\n", __func__, [[error description] UTF8String]);
+                return NULL;
+            }
+#endif // GGML_METAL_EMBED_LIBRARY
+
+            @autoreleasepool {
+                // dictionary of preprocessor macros
+                NSMutableDictionary * prep = [NSMutableDictionary dictionary];
+
+                MTLCompileOptions* options = [MTLCompileOptions new];
+                options.preprocessorMacros = prep;
+
+                //[options setFastMathEnabled:false];
+
+                metal_library = [ctx->device newLibraryWithSource:src options:options error:&error];
+                if (error) {
+                    GGML_METAL_LOG_ERROR("%s: error: %s\n", __func__, [[error description] UTF8String]);
+                    return NULL;
+                }
+            }
+        }
+    }
+
+    // print MTL GPU family:
+    GGML_METAL_LOG_INFO("%s: GPU name:   %s\n", __func__, [[ctx->device name] UTF8String]);
+
+    const NSInteger MTLGPUFamilyMetal3 = 5001;
+
+    // determine max supported GPU family
+    // https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf
+    // https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf
+    {
+        for (int i = MTLGPUFamilyApple1 + 20; i >= MTLGPUFamilyApple1; --i) {
+            if ([ctx->device supportsFamily:i]) {
+                GGML_METAL_LOG_INFO("%s: GPU family: MTLGPUFamilyApple%d  (%d)\n", __func__, i - (int) MTLGPUFamilyApple1 + 1, i);
+                break;
+            }
+        }
+
+        for (int i = MTLGPUFamilyCommon1 + 5; i >= MTLGPUFamilyCommon1; --i) {
+            if ([ctx->device supportsFamily:i]) {
+                GGML_METAL_LOG_INFO("%s: GPU family: MTLGPUFamilyCommon%d (%d)\n", __func__, i - (int) MTLGPUFamilyCommon1 + 1, i);
+                break;
+            }
+        }
+
+        for (int i = MTLGPUFamilyMetal3 + 5; i >= MTLGPUFamilyMetal3; --i) {
+            if ([ctx->device supportsFamily:i]) {
+                GGML_METAL_LOG_INFO("%s: GPU family: MTLGPUFamilyMetal%d  (%d)\n", __func__, i - (int) MTLGPUFamilyMetal3 + 3, i);
+                break;
+            }
+        }
+    }
+
+    ctx->support_simdgroup_reduction  = [ctx->device supportsFamily:MTLGPUFamilyApple7];
+    ctx->support_simdgroup_reduction |= [ctx->device supportsFamily:MTLGPUFamilyMetal3];
+
+    ctx->support_simdgroup_mm = [ctx->device supportsFamily:MTLGPUFamilyApple7];
+
+    GGML_METAL_LOG_INFO("%s: simdgroup reduction support   = %s\n",       __func__, ctx->support_simdgroup_reduction ? "true" : "false");
+    GGML_METAL_LOG_INFO("%s: simdgroup matrix mul. support = %s\n",       __func__, ctx->support_simdgroup_mm ? "true" : "false");
+    GGML_METAL_LOG_INFO("%s: hasUnifiedMemory              = %s\n",       __func__, ctx->device.hasUnifiedMemory ? "true" : "false");
+
+    ctx->should_capture_next_compute = false;
+
+#if TARGET_OS_OSX || (TARGET_OS_IOS && __clang_major__ >= 15)
+    if (@available(macOS 10.12, iOS 16.0, *)) {
+        GGML_METAL_LOG_INFO("%s: recommendedMaxWorkingSetSize  = %8.2f MB\n", __func__, ctx->device.recommendedMaxWorkingSetSize / 1e6);
+    }
+#elif TARGET_OS_OSX
+    if (ctx->device.maxTransferRate != 0) {
+        GGML_METAL_LOG_INFO("%s: maxTransferRate               = %8.2f MB/s\n", __func__, ctx->device.maxTransferRate / 1e6);
+    } else {
+        GGML_METAL_LOG_INFO("%s: maxTransferRate               = built-in GPU\n", __func__);
+    }
+#endif
+
+    // load kernels
+    {
+        NSError * error = nil;
+
+        for (int i = 0; i < GGML_METAL_KERNEL_TYPE_COUNT; ++i) {
+            ctx->kernels[i].pipeline = nil;
+        }
+
+        /*
+            GGML_METAL_LOG_INFO("%s: loaded %-40s %16p | th_max = %4d | th_width = %4d\n", __func__, "kernel_"#name, (void *) kernel->pipeline, \
+                    (int) kernel->pipeline.maxTotalThreadsPerThreadgroup, \
+                    (int) kernel->pipeline.threadExecutionWidth); \
+        */
+#define GGML_METAL_ADD_KERNEL(e, name, supported) \
+        if (supported) { \
+            struct ggml_metal_kernel * kernel = &ctx->kernels[e]; \
+            id<MTLFunction> metal_function = [metal_library newFunctionWithName:@"kernel_"#name]; \
+            kernel->pipeline = [ctx->device newComputePipelineStateWithFunction:metal_function error:&error]; \
+            [metal_function release]; \
+            if (error) { \
+                GGML_METAL_LOG_ERROR("%s: error: load pipeline error: %s\n", __func__, [[error description] UTF8String]); \
+                [metal_library release]; \
+                return NULL; \
+            } \
+        } else { \
+            GGML_METAL_LOG_WARN("%s: skipping %-40s (not supported)\n", __func__, "kernel_"#name); \
+        }
+
+        // simd_sum and simd_max requires MTLGPUFamilyApple7
+
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ADD,                           add,                            true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ADD_ROW,                       add_row,                        true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL,                           mul,                            true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_ROW,                       mul_row,                        true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIV,                           div,                            true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIV_ROW,                       div_row,                        true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_REPEAT_F32,                    repeat_f32,                     true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_REPEAT_F16,                    repeat_f16,                     true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_REPEAT_I32,                    repeat_i32,                     true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_REPEAT_I16,                    repeat_i16,                     true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SCALE,                         scale,                          true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SCALE_4,                       scale_4,                        true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CLAMP,                         clamp,                          true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_TANH,                          tanh,                           true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_RELU,                          relu,                           true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SIGMOID,                       sigmoid,                        true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU,                          gelu,                           true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU_4,                        gelu_4,                         true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU_QUICK,                    gelu_quick,                     true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GELU_QUICK_4,                  gelu_quick_4,                   true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SILU,                          silu,                           true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SILU_4,                        silu_4,                         true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16,                  soft_max_f16,                   ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16_4,                soft_max_f16_4,                 ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32,                  soft_max_f32,                   ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32_4,                soft_max_f32_4,                 ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF,                 diag_mask_inf,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF_8,               diag_mask_inf_8,                true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_F32,                  get_rows_f32,                   true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_F16,                  get_rows_f16,                   true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_0,                 get_rows_q4_0,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_1,                 get_rows_q4_1,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_0,                 get_rows_q5_0,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_1,                 get_rows_q5_1,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q8_0,                 get_rows_q8_0,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q2_K,                 get_rows_q2_K,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q3_K,                 get_rows_q3_K,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_K,                 get_rows_q4_K,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_K,                 get_rows_q5_K,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_Q6_K,                 get_rows_q6_K,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XXS,              get_rows_iq2_xxs,               true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XS,               get_rows_iq2_xs,                true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_XXS,              get_rows_iq3_xxs,               true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_S,                get_rows_iq3_s,                 true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_S,                get_rows_iq2_s,                 true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_S,                get_rows_iq1_s,                 true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_M,                get_rows_iq1_m,                 true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_NL,               get_rows_iq4_nl,                true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_XS,               get_rows_iq4_xs,                true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GET_ROWS_I32,                  get_rows_i32,                   true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_RMS_NORM,                      rms_norm,                       ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_GROUP_NORM,                    group_norm,                     ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_NORM,                          norm,                           true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F32_F32,                mul_mv_f32_f32,                 ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F16,                mul_mv_f16_f16,                 ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32,                mul_mv_f16_f32,                 ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_1ROW,           mul_mv_f16_f32_1row,            ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_L4,             mul_mv_f16_f32_l4,              ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_0_F32,               mul_mv_q4_0_f32,                ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_1_F32,               mul_mv_q4_1_f32,                ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_0_F32,               mul_mv_q5_0_f32,                ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32,               mul_mv_q5_1_f32,                ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32,               mul_mv_q8_0_f32,                ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q2_K_F32,               mul_mv_q2_K_f32,                ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q3_K_F32,               mul_mv_q3_K_f32,                ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_K_F32,               mul_mv_q4_K_f32,                ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_K_F32,               mul_mv_q5_K_f32,                ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_Q6_K_F32,               mul_mv_q6_K_f32,                ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XXS_F32,            mul_mv_iq2_xxs_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XS_F32,             mul_mv_iq2_xs_f32,              ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_XXS_F32,            mul_mv_iq3_xxs_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_S_F32,              mul_mv_iq3_s_f32,               ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_S_F32,              mul_mv_iq2_s_f32,               ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_S_F32,              mul_mv_iq1_s_f32,               ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_M_F32,              mul_mv_iq1_m_f32,               ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_NL_F32,             mul_mv_iq4_nl_f32,              ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_XS_F32,             mul_mv_iq4_xs_f32,              ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F32_F32,             mul_mv_id_f32_f32,              ctx->support_simdgroup_reduction);
+      //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F16,             mul_mv_id_f16_f16,              ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32,             mul_mv_id_f16_f32,              ctx->support_simdgroup_reduction);
+      //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_1ROW,        mul_mv_id_f16_f32_1row,         ctx->support_simdgroup_reduction);
+      //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32_L4,          mul_mv_id_f16_f32_l4,           ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_0_F32,            mul_mv_id_q4_0_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_1_F32,            mul_mv_id_q4_1_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_0_F32,            mul_mv_id_q5_0_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_1_F32,            mul_mv_id_q5_1_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q8_0_F32,            mul_mv_id_q8_0_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q2_K_F32,            mul_mv_id_q2_K_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q3_K_F32,            mul_mv_id_q3_K_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_K_F32,            mul_mv_id_q4_K_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_K_F32,            mul_mv_id_q5_K_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q6_K_F32,            mul_mv_id_q6_K_f32,             ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XXS_F32,         mul_mv_id_iq2_xxs_f32,          ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XS_F32,          mul_mv_id_iq2_xs_f32,           ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_XXS_F32,         mul_mv_id_iq3_xxs_f32,          ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_S_F32,           mul_mv_id_iq3_s_f32,            ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_S_F32,           mul_mv_id_iq2_s_f32,            ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_S_F32,           mul_mv_id_iq1_s_f32,            ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_M_F32,           mul_mv_id_iq1_m_f32,            ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_NL_F32,          mul_mv_id_iq4_nl_f32,           ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_XS_F32,          mul_mv_id_iq4_xs_f32,           ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_F32_F32,                mul_mm_f32_f32,                 ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_F16_F32,                mul_mm_f16_f32,                 ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_0_F32,               mul_mm_q4_0_f32,                ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_1_F32,               mul_mm_q4_1_f32,                ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_0_F32,               mul_mm_q5_0_f32,                ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_1_F32,               mul_mm_q5_1_f32,                ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q8_0_F32,               mul_mm_q8_0_f32,                ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q2_K_F32,               mul_mm_q2_K_f32,                ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q3_K_F32,               mul_mm_q3_K_f32,                ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_K_F32,               mul_mm_q4_K_f32,                ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_K_F32,               mul_mm_q5_K_f32,                ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_Q6_K_F32,               mul_mm_q6_K_f32,                ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XXS_F32,            mul_mm_iq2_xxs_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XS_F32,             mul_mm_iq2_xs_f32,              ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_XXS_F32,            mul_mm_iq3_xxs_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_S_F32,              mul_mm_iq3_s_f32,               ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_S_F32,              mul_mm_iq2_s_f32,               ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_S_F32,              mul_mm_iq1_s_f32,               ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32,              mul_mm_iq1_m_f32,               ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32,             mul_mm_iq4_nl_f32,              ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32,             mul_mm_iq4_xs_f32,              ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F32,             mul_mm_id_f32_f32,              ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F32,             mul_mm_id_f16_f32,              ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_0_F32,            mul_mm_id_q4_0_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_1_F32,            mul_mm_id_q4_1_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_0_F32,            mul_mm_id_q5_0_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_1_F32,            mul_mm_id_q5_1_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q8_0_F32,            mul_mm_id_q8_0_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q2_K_F32,            mul_mm_id_q2_K_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q3_K_F32,            mul_mm_id_q3_K_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_K_F32,            mul_mm_id_q4_K_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_K_F32,            mul_mm_id_q5_K_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q6_K_F32,            mul_mm_id_q6_K_f32,             ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XXS_F32,         mul_mm_id_iq2_xxs_f32,          ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XS_F32,          mul_mm_id_iq2_xs_f32,           ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_XXS_F32,         mul_mm_id_iq3_xxs_f32,          ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_S_F32,           mul_mm_id_iq3_s_f32,            ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_S_F32,           mul_mm_id_iq2_s_f32,            ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_S_F32,           mul_mm_id_iq1_s_f32,            ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_M_F32,           mul_mm_id_iq1_m_f32,            ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_NL_F32,          mul_mm_id_iq4_nl_f32,           ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_XS_F32,          mul_mm_id_iq4_xs_f32,           ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ROPE_NORM_F32,                 rope_norm_f32,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ROPE_NORM_F16,                 rope_norm_f16,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F32,                 rope_neox_f32,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F16,                 rope_neox_f16,                  true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_IM2COL_F16,                    im2col_f16,                     true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_IM2COL_F32,                    im2col_f32,                     true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_UPSCALE_F32,                   upscale_f32,                    true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_PAD_F32,                       pad_f32,                        true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_TIMESTEP_EMBEDDING_F32,        timestep_embedding_f32,         true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARANGE_F32,                    arange_f32,                     true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC,           argsort_f32_i32_asc,            true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC,          argsort_f32_i32_desc,           true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32,                leaky_relu_f32,                 true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H64,        flash_attn_ext_f16_h64,         ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H80,        flash_attn_ext_f16_h80,         ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H96,        flash_attn_ext_f16_h96,         ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H112,       flash_attn_ext_f16_h112,        ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H128,       flash_attn_ext_f16_h128,        ctx->support_simdgroup_mm);
+      //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H256,       flash_attn_ext_f16_h256,        ctx->support_simdgroup_mm);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H128,   flash_attn_ext_vec_f16_h128,    ctx->support_simdgroup_reduction);
+      //GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H256,   flash_attn_ext_vec_f16_h256,    ctx->support_simdgroup_reduction);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_F16,                   cpy_f32_f16,                    true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_F32,                   cpy_f32_f32,                    true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q8_0,                  cpy_f32_q8_0,                   true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_0,                  cpy_f32_q4_0,                   true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_1,                  cpy_f32_q4_1,                   true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_0,                  cpy_f32_q5_0,                   true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_1,                  cpy_f32_q5_1,                   true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F32_IQ4_NL,                cpy_f32_iq4_nl,                 true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F16_F16,                   cpy_f16_f16,                    true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CPY_F16_F32,                   cpy_f16_f32,                    true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_CONCAT,                        concat,                         true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SQR,                           sqr,                            true);
+        GGML_METAL_ADD_KERNEL(GGML_METAL_KERNEL_TYPE_SUM_ROWS,                      sum_rows,                       true);
+    }
+
+    [metal_library release];
+    return ctx;
+}
+
+static void ggml_metal_free(struct ggml_metal_context * ctx) {
+    GGML_METAL_LOG_INFO("%s: deallocating\n", __func__);
+
+    for (int i = 0; i < GGML_METAL_KERNEL_TYPE_COUNT; ++i) {
+        [ctx->kernels[i].pipeline release];
+    }
+
+    [ctx->queue release];
+    [ctx->device release];
+
+    dispatch_release(ctx->d_queue);
+
+    free(ctx);
+}
+
+// temporarily defined here for compatibility between ggml-backend and the old API
+
+struct ggml_backend_metal_buffer {
+    void   * data;
+    size_t   size;
+
+    id<MTLBuffer> metal;
+};
+
+struct ggml_backend_metal_buffer_context {
+    void * all_data;
+    size_t all_size;
+    bool owned;
+
+    // multiple buffers are used only to avoid the maximum buffer size limitation when using mmap
+    int n_buffers;
+    struct ggml_backend_metal_buffer buffers[GGML_METAL_MAX_BUFFERS];
+};
+
+// finds the Metal buffer that contains the tensor data on the GPU device
+// the assumption is that there is 1-to-1 mapping between the host and device memory buffers, so we can find the
+// Metal buffer based on the host memory pointer
+//
+static id<MTLBuffer> ggml_metal_get_buffer(struct ggml_tensor * t, size_t * offs) {
+    //GGML_METAL_LOG_INFO("%s: data tensor '%16s', offs_data = %8ld, offs_eval = %8ld, offs_cach = %8ld\n", __func__, t->name, offs_data, offs_eval, offs_cach);
+
+    const int64_t tsize = ggml_nbytes(t);
+
+    ggml_backend_buffer_t buffer = t->view_src ? t->view_src->buffer : t->buffer;
+
+    struct ggml_backend_metal_buffer_context * buf_ctx = (struct ggml_backend_metal_buffer_context *) buffer->context;
+
+    // find the view that contains the tensor fully
+    for (int i = 0; i < buf_ctx->n_buffers; ++i) {
+        const int64_t ioffs = (int64_t) t->data - (int64_t) buf_ctx->buffers[i].data;
+
+        //GGML_METAL_LOG_INFO("ioffs = %10ld, tsize = %10ld, sum = %10ld, buf_ctx->buffers[%d].size = %10ld\n", ioffs, tsize, ioffs + tsize, i, buf_ctx->buffers[i].size);
+        if (ioffs >= 0 && ioffs + tsize <= (int64_t) buf_ctx->buffers[i].size) {
+            *offs = (size_t) ioffs;
+
+            //GGML_METAL_LOG_INFO("%s: tensor '%16s', offs = %8ld\n", __func__, t->name, *offs);
+
+            return buf_ctx->buffers[i].metal;
+        }
+    }
+
+    GGML_METAL_LOG_ERROR("%s: error: tensor '%s' buffer is nil\n", __func__, t->name);
+
+    return nil;
+}
+
+static bool ggml_metal_supports_op(const struct ggml_metal_context * ctx, const struct ggml_tensor * op) {
+    for (size_t i = 0, n = 3; i < n; ++i) {
+        if (op->src[i] != NULL && op->src[i]->type == GGML_TYPE_BF16) {
+            return false;
+        }
+    }
+
+    switch (op->op) {
+        case GGML_OP_UNARY:
+            switch (ggml_get_unary_op(op)) {
+                case GGML_UNARY_OP_TANH:
+                case GGML_UNARY_OP_RELU:
+                case GGML_UNARY_OP_SIGMOID:
+                case GGML_UNARY_OP_GELU:
+                case GGML_UNARY_OP_GELU_QUICK:
+                case GGML_UNARY_OP_SILU:
+                    return ggml_is_contiguous(op->src[0]);
+                default:
+                    return false;
+            }
+        case GGML_OP_NONE:
+        case GGML_OP_RESHAPE:
+        case GGML_OP_VIEW:
+        case GGML_OP_TRANSPOSE:
+        case GGML_OP_PERMUTE:
+        case GGML_OP_CONCAT:
+        case GGML_OP_ADD:
+        case GGML_OP_ACC:
+        case GGML_OP_MUL:
+        case GGML_OP_DIV:
+        case GGML_OP_REPEAT:
+        case GGML_OP_SCALE:
+        case GGML_OP_CLAMP:
+        case GGML_OP_SQR:
+        case GGML_OP_SUM_ROWS:
+            return true;
+        case GGML_OP_SOFT_MAX:
+        case GGML_OP_RMS_NORM:
+        case GGML_OP_GROUP_NORM:
+            return ctx->support_simdgroup_reduction;
+        case GGML_OP_NORM:
+        case GGML_OP_ROPE:
+        case GGML_OP_IM2COL:
+            return true;
+        case GGML_OP_POOL_1D:
+        case GGML_OP_POOL_2D:
+            return false;
+        case GGML_OP_UPSCALE:
+        case GGML_OP_PAD:
+        case GGML_OP_ARANGE:
+        case GGML_OP_TIMESTEP_EMBEDDING:
+        case GGML_OP_ARGSORT:
+        case GGML_OP_LEAKY_RELU:
+            return true;
+        case GGML_OP_FLASH_ATTN_EXT:
+            if (op->src[1]->type != GGML_TYPE_F16) {
+                return false;
+            }
+            if (op->src[2]->type != GGML_TYPE_F16) {
+                return false;
+            }
+            if (op->src[0]->ne[0] == 256) {
+                return false;
+            }
+            return ctx->support_simdgroup_mm; // TODO: over-restricted for vec-kernels
+        case GGML_OP_MUL_MAT:
+        case GGML_OP_MUL_MAT_ID:
+            return ctx->support_simdgroup_reduction &&
+                (op->src[0]->type != GGML_TYPE_F32 || op->src[1]->type == GGML_TYPE_F32);
+        case GGML_OP_CPY:
+        case GGML_OP_DUP:
+        case GGML_OP_CONT:
+            {
+                switch (op->src[0]->type) {
+                    case GGML_TYPE_F32:
+                        switch (op->type) {
+                           case GGML_TYPE_F16:
+                           case GGML_TYPE_F32:
+                           case GGML_TYPE_Q8_0:
+                           case GGML_TYPE_Q4_0:
+                           case GGML_TYPE_Q4_1:
+                           case GGML_TYPE_Q5_0:
+                           case GGML_TYPE_Q5_1:
+                           case GGML_TYPE_IQ4_NL:
+                                return true;
+                           default:
+                                return false;
+                        }
+                    case GGML_TYPE_F16:
+                        switch (op->type) {
+                           case GGML_TYPE_F16:
+                           case GGML_TYPE_F32:
+                                return true;
+                           default:
+                                return false;
+                        }
+                    default:
+                        return false;
+                };
+            }
+        case GGML_OP_DIAG_MASK_INF:
+        case GGML_OP_GET_ROWS:
+            {
+                return op->src[0]->type != GGML_TYPE_BF16 && op->ne[3] == 1;
+            }
+        default:
+            return false;
+    }
+}
+
+static enum ggml_status ggml_metal_graph_compute(
+        struct ggml_metal_context * ctx,
+               struct ggml_cgraph * gf) {
+
+    @autoreleasepool {
+    MTLComputePassDescriptor * edesc = MTLComputePassDescriptor.computePassDescriptor;
+    edesc.dispatchType = MTLDispatchTypeSerial;
+
+    // create multiple command buffers and enqueue them
+    // then, we encode the graph into the command buffers in parallel
+
+    const int n_nodes  = gf->n_nodes;
+    const int n_cb = ctx->n_cb;
+    const int n_nodes_per_cb = (n_nodes + n_cb - 1) / n_cb;
+
+    const bool should_capture = ctx->should_capture_next_compute;
+    if (should_capture) {
+        ctx->should_capture_next_compute = false;
+
+        MTLCaptureDescriptor * descriptor = [MTLCaptureDescriptor new];
+        descriptor.captureObject = ctx->queue;
+
+        NSError * error = nil;
+        if (![[MTLCaptureManager sharedCaptureManager] startCaptureWithDescriptor:descriptor error:&error]) {
+            GGML_METAL_LOG_ERROR("%s: error: unable to start capture '%s'\n", __func__, [[error localizedDescription] UTF8String]);
+            GGML_ASSERT(!"capture failed");
+        }
+    }
+
+    id<MTLCommandBuffer> command_buffer_builder[n_cb];
+    for (int cb_idx = 0; cb_idx < n_cb; ++cb_idx) {
+        id<MTLCommandBuffer> command_buffer  = [ctx->queue commandBufferWithUnretainedReferences];
+        command_buffer_builder[cb_idx] = command_buffer;
+
+        // enqueue the command buffers in order to specify their execution order
+        [command_buffer enqueue];
+    }
+
+    const id<MTLCommandBuffer> *command_buffers = command_buffer_builder;
+
+    dispatch_apply(n_cb, ctx->d_queue, ^(size_t iter) {
+        const int cb_idx = iter;
+
+        size_t offs_src0 = 0;
+        size_t offs_src1 = 0;
+        size_t offs_src2 = 0;
+        size_t offs_dst  = 0;
+
+        id<MTLCommandBuffer> command_buffer  = command_buffers[cb_idx];
+        id<MTLComputeCommandEncoder> encoder = [command_buffer computeCommandEncoderWithDescriptor: edesc];
+
+        const int node_start =                                      (cb_idx + 0) * n_nodes_per_cb;
+        const int node_end   = MIN((cb_idx == n_cb - 1) ? n_nodes : (cb_idx + 1) * n_nodes_per_cb, n_nodes);
+
+        for (int i = node_start; i < node_end; ++i) {
+            if (i == -1) {
+                [encoder memoryBarrierWithScope:MTLBarrierScopeBuffers];
+                continue;
+            }
+
+            //GGML_METAL_LOG_INFO("%s: encoding node %3d, op = %8s\n", __func__, i, ggml_op_name(gf->nodes[i]->op));
+
+            struct ggml_tensor * src0 = gf->nodes[i]->src[0];
+            struct ggml_tensor * src1 = gf->nodes[i]->src[1];
+            struct ggml_tensor * src2 = gf->nodes[i]->src[2];
+            struct ggml_tensor * dst  = gf->nodes[i];
+
+            if (ggml_is_empty(dst)) {
+                continue;
+            }
+
+            switch (dst->op) {
+                case GGML_OP_NONE:
+                case GGML_OP_RESHAPE:
+                case GGML_OP_VIEW:
+                case GGML_OP_TRANSPOSE:
+                case GGML_OP_PERMUTE:
+                    {
+                        // noop -> next node
+                    } continue;
+                default:
+                    {
+                    } break;
+            }
+
+            if (!ggml_metal_supports_op(ctx, dst)) {
+                GGML_METAL_LOG_ERROR("%s: error: unsupported op '%s'\n", __func__, ggml_op_desc(dst));
+                GGML_ASSERT(!"unsupported op");
+            }
+
+            if (should_capture) {
+                [encoder pushDebugGroup:[NSString stringWithCString:ggml_op_desc(dst) encoding:NSUTF8StringEncoding]];
+            }
+
+            const int64_t  ne00 = src0 ? src0->ne[0] : 0;
+            const int64_t  ne01 = src0 ? src0->ne[1] : 0;
+            const int64_t  ne02 = src0 ? src0->ne[2] : 0;
+            const int64_t  ne03 = src0 ? src0->ne[3] : 0;
+
+            const uint64_t nb00 = src0 ? src0->nb[0] : 0;
+            const uint64_t nb01 = src0 ? src0->nb[1] : 0;
+            const uint64_t nb02 = src0 ? src0->nb[2] : 0;
+            const uint64_t nb03 = src0 ? src0->nb[3] : 0;
+
+            const int64_t  ne10 = src1 ? src1->ne[0] : 0;
+            const int64_t  ne11 = src1 ? src1->ne[1] : 0;
+            const int64_t  ne12 = src1 ? src1->ne[2] : 0;
+            const int64_t  ne13 = src1 ? src1->ne[3] : 0;
+
+            const uint64_t nb10 = src1 ? src1->nb[0] : 0;
+            const uint64_t nb11 = src1 ? src1->nb[1] : 0;
+            const uint64_t nb12 = src1 ? src1->nb[2] : 0;
+            const uint64_t nb13 = src1 ? src1->nb[3] : 0;
+
+            const int64_t  ne20 = src2 ? src2->ne[0] : 0;
+            const int64_t  ne21 = src2 ? src2->ne[1] : 0;
+            const int64_t  ne22 = src2 ? src2->ne[2] : 0; GGML_UNUSED(ne22);
+            const int64_t  ne23 = src2 ? src2->ne[3] : 0; GGML_UNUSED(ne23);
+
+            const uint64_t nb20 = src2 ? src2->nb[0] : 0; GGML_UNUSED(nb20);
+            const uint64_t nb21 = src2 ? src2->nb[1] : 0;
+            const uint64_t nb22 = src2 ? src2->nb[2] : 0;
+            const uint64_t nb23 = src2 ? src2->nb[3] : 0;
+
+            const int64_t  ne0  =  dst ?  dst->ne[0] : 0;
+            const int64_t  ne1  =  dst ?  dst->ne[1] : 0;
+            const int64_t  ne2  =  dst ?  dst->ne[2] : 0;
+            const int64_t  ne3  =  dst ?  dst->ne[3] : 0;
+
+            const uint64_t nb0  =  dst ?  dst->nb[0] : 0;
+            const uint64_t nb1  =  dst ?  dst->nb[1] : 0;
+            const uint64_t nb2  =  dst ?  dst->nb[2] : 0;
+            const uint64_t nb3  =  dst ?  dst->nb[3] : 0;
+
+            const enum ggml_type src0t = src0 ? src0->type : GGML_TYPE_COUNT;
+            const enum ggml_type src1t = src1 ? src1->type : GGML_TYPE_COUNT;
+            const enum ggml_type dstt  = dst  ? dst->type  : GGML_TYPE_COUNT;
+
+            id<MTLBuffer> id_src0 = src0 ? ggml_metal_get_buffer(src0, &offs_src0) : nil;
+            id<MTLBuffer> id_src1 = src1 ? ggml_metal_get_buffer(src1, &offs_src1) : nil;
+            id<MTLBuffer> id_src2 = src2 ? ggml_metal_get_buffer(src2, &offs_src2) : nil;
+            id<MTLBuffer> id_dst  = dst  ? ggml_metal_get_buffer(dst,  &offs_dst)  : nil;
+
+            //GGML_METAL_LOG_INFO("%s: op - %s\n", __func__, ggml_op_name(dst->op));
+            //if (src0) {
+            //    GGML_METAL_LOG_INFO("%s: src0 - %4s [%5lld, %5lld, %5lld], %d, %s\n", __func__, ggml_type_name(src0t), ne00, ne01, ne02,
+            //            ggml_is_contiguous(src0), src0->name);
+            //}
+            //if (src1) {
+            //    GGML_METAL_LOG_INFO("%s: src1 - %4s [%5lld, %5lld, %5lld], %d, %s\n", __func__, ggml_type_name(src1t), ne10, ne11, ne12,
+            //            ggml_is_contiguous(src1), src1->name);
+            //}
+            //if (dst) {
+            //    GGML_METAL_LOG_INFO("%s: dst  - %4s [%5lld, %5lld, %5lld], 1, %s\n",  __func__, ggml_type_name(dstt),  ne0,  ne1,  ne2,
+            //            dst->name);
+            //}
+
+            switch (dst->op) {
+                case GGML_OP_CONCAT:
+                    {
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CONCAT].pipeline;
+
+                        const int32_t dim = ((int32_t *) dst->op_params)[0];
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1];
+                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:2];
+                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3];
+                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4];
+                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5];
+                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:6];
+                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:7];
+                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:8];
+                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:9];
+                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:10];
+                        [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:11];
+                        [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:12];
+                        [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:13];
+                        [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:14];
+                        [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:15];
+                        [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:16];
+                        [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:17];
+                        [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:18];
+                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:19];
+                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:20];
+                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:21];
+                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:22];
+                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:23];
+                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:24];
+                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:25];
+                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:26];
+                        [encoder setBytes:&dim  length:sizeof(dim)  atIndex:27];
+
+                        const int nth = MIN(1024, ne0);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_ADD:
+                case GGML_OP_MUL:
+                case GGML_OP_DIV:
+                    {
+                        GGML_ASSERT(src0t == GGML_TYPE_F32);
+                        GGML_ASSERT(src1t == GGML_TYPE_F32);
+
+                        const size_t offs = 0;
+
+                        bool bcast_row = false;
+
+                        int64_t nb = ne00; // used by the "row" kernels
+
+                        id<MTLComputePipelineState> pipeline = nil;
+
+                        if (ggml_nelements(src1) == ne10 && ggml_is_contiguous(src1) && ne00 % 4 == 0 && ne10 % 4 == 0) {
+                            GGML_ASSERT(ggml_is_contiguous(src0));
+
+                            // src1 is a row
+                            GGML_ASSERT(ne11 == 1);
+
+                            nb = ne00 / 4;
+                            switch (dst->op) {
+                                case GGML_OP_ADD: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ADD_ROW].pipeline; break;
+                                case GGML_OP_MUL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_ROW].pipeline; break;
+                                case GGML_OP_DIV: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIV_ROW].pipeline; break;
+                                default: GGML_ASSERT(false);
+                            }
+
+                            bcast_row = true;
+                        } else {
+                            switch (dst->op) {
+                                case GGML_OP_ADD: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ADD].pipeline; break;
+                                case GGML_OP_MUL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL].pipeline; break;
+                                case GGML_OP_DIV: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIV].pipeline; break;
+                                default: GGML_ASSERT(false);
+                            }
+                        }
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1];
+                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:2];
+                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3];
+                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4];
+                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5];
+                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:6];
+                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:7];
+                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:8];
+                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:9];
+                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:10];
+                        [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:11];
+                        [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:12];
+                        [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:13];
+                        [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:14];
+                        [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:15];
+                        [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:16];
+                        [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:17];
+                        [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:18];
+                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:19];
+                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:20];
+                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:21];
+                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:22];
+                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:23];
+                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:24];
+                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:25];
+                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:26];
+                        [encoder setBytes:&offs length:sizeof(offs) atIndex:27];
+                        [encoder setBytes:&nb   length:sizeof(nb)   atIndex:28];
+
+                        if (bcast_row) {
+                            const int64_t n = ggml_nelements(dst)/4;
+
+                            [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                        } else {
+                            const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne0);
+
+                            [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                        }
+                    } break;
+                case GGML_OP_REPEAT:
+                    {
+                        id<MTLComputePipelineState> pipeline;
+
+                        switch (src0t) {
+                            case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_REPEAT_F32].pipeline; break;
+                            case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_REPEAT_F16].pipeline; break;
+                            case GGML_TYPE_I32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_REPEAT_I32].pipeline; break;
+                            case GGML_TYPE_I16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_REPEAT_I16].pipeline; break;
+                            default: GGML_ASSERT(false);
+                        }
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2];
+                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3];
+                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4];
+                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5];
+                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6];
+                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7];
+                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8];
+                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9];
+                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:10];
+                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:11];
+                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:12];
+                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:13];
+                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:14];
+                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:15];
+                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:16];
+                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:17];
+
+                        const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne0);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_ACC:
+                    {
+                        GGML_ASSERT(src0t == GGML_TYPE_F32);
+                        GGML_ASSERT(src1t == GGML_TYPE_F32);
+                        GGML_ASSERT(dstt  == GGML_TYPE_F32);
+
+                        GGML_ASSERT(ggml_is_contiguous(src0));
+                        GGML_ASSERT(ggml_is_contiguous(src1));
+
+                        const size_t pnb1 = ((int32_t *) dst->op_params)[0];
+                        const size_t pnb2 = ((int32_t *) dst->op_params)[1];
+                        const size_t pnb3 = ((int32_t *) dst->op_params)[2];
+                        const size_t offs = ((int32_t *) dst->op_params)[3];
+
+                        const bool inplace = (bool) ((int32_t *) dst->op_params)[4];
+
+                        if (!inplace) {
+                            // run a separete kernel to cpy src->dst
+                            // not sure how to avoid this
+                            // TODO: make a simpler cpy_bytes kernel
+
+                            const id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_F32].pipeline;
+
+                            [encoder setComputePipelineState:pipeline];
+                            [encoder setBuffer:id_src0 offset:offs_src0        atIndex:0];
+                            [encoder setBuffer:id_dst  offset:offs_dst         atIndex:1];
+                            [encoder setBytes:&ne00    length:sizeof( int64_t) atIndex:2];
+                            [encoder setBytes:&ne01    length:sizeof( int64_t) atIndex:3];
+                            [encoder setBytes:&ne02    length:sizeof( int64_t) atIndex:4];
+                            [encoder setBytes:&ne03    length:sizeof( int64_t) atIndex:5];
+                            [encoder setBytes:&nb00    length:sizeof(uint64_t) atIndex:6];
+                            [encoder setBytes:&nb01    length:sizeof(uint64_t) atIndex:7];
+                            [encoder setBytes:&nb02    length:sizeof(uint64_t) atIndex:8];
+                            [encoder setBytes:&nb03    length:sizeof(uint64_t) atIndex:9];
+                            [encoder setBytes:&ne0     length:sizeof( int64_t) atIndex:10];
+                            [encoder setBytes:&ne1     length:sizeof( int64_t) atIndex:11];
+                            [encoder setBytes:&ne2     length:sizeof( int64_t) atIndex:12];
+                            [encoder setBytes:&ne3     length:sizeof( int64_t) atIndex:13];
+                            [encoder setBytes:&nb0     length:sizeof(uint64_t) atIndex:14];
+                            [encoder setBytes:&nb1     length:sizeof(uint64_t) atIndex:15];
+                            [encoder setBytes:&nb2     length:sizeof(uint64_t) atIndex:16];
+                            [encoder setBytes:&nb3     length:sizeof(uint64_t) atIndex:17];
+
+                            const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne00);
+
+                            [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                        }
+
+                        const id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ADD].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1];
+                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:2];
+                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3];
+                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4];
+                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5];
+                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:6];
+                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:7];
+                        [encoder setBytes:&pnb1 length:sizeof(pnb1) atIndex:8];
+                        [encoder setBytes:&pnb2 length:sizeof(pnb2) atIndex:9];
+                        [encoder setBytes:&pnb3 length:sizeof(pnb3) atIndex:10];
+                        [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:11];
+                        [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:12];
+                        [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:13];
+                        [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:14];
+                        [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:15];
+                        [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:16];
+                        [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:17];
+                        [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:18];
+                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:19];
+                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:20];
+                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:21];
+                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:22];
+                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:23];
+                        [encoder setBytes:&pnb1 length:sizeof(pnb1) atIndex:24];
+                        [encoder setBytes:&pnb2 length:sizeof(pnb2) atIndex:25];
+                        [encoder setBytes:&pnb3 length:sizeof(pnb3) atIndex:26];
+                        [encoder setBytes:&offs length:sizeof(offs) atIndex:27];
+
+                        const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne00);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne11, ne12, ne13) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_SCALE:
+                    {
+                        GGML_ASSERT(ggml_is_contiguous(src0));
+
+                        float scale;
+                        memcpy(&scale, dst->op_params, sizeof(scale));
+
+                        int64_t n = ggml_nelements(dst);
+
+                        id<MTLComputePipelineState> pipeline = nil;
+
+                        if (n % 4 == 0) {
+                            n /= 4;
+                            pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SCALE_4].pipeline;
+                        } else {
+                            pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SCALE].pipeline;
+                        }
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0   offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_dst    offset:offs_dst  atIndex:1];
+                        [encoder setBytes:&scale length:sizeof(scale) atIndex:2];
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                    } break;
+                case GGML_OP_CLAMP:
+                    {
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CLAMP].pipeline;
+
+                        float min;
+                        float max;
+                        memcpy(&min, ((int32_t *) dst->op_params) + 0, sizeof(float));
+                        memcpy(&max, ((int32_t *) dst->op_params) + 1, sizeof(float));
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0   offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_dst    offset:offs_dst  atIndex:1];
+                        [encoder setBytes:&min length:sizeof(min) atIndex:2];
+                        [encoder setBytes:&max length:sizeof(max) atIndex:3];
+
+                        const int64_t n = ggml_nelements(dst);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                    } break;
+                case GGML_OP_UNARY:
+                    switch (ggml_get_unary_op(gf->nodes[i])) {
+                        // we are not taking into account the strides, so for now require contiguous tensors
+                        GGML_ASSERT(ggml_is_contiguous(src0));
+
+                        case GGML_UNARY_OP_TANH:
+                            {
+                                id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_TANH].pipeline;
+
+                                [encoder setComputePipelineState:pipeline];
+                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+
+                                const int64_t n = ggml_nelements(dst);
+
+                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                            } break;
+                        case GGML_UNARY_OP_RELU:
+                            {
+                                id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_RELU].pipeline;
+
+                                [encoder setComputePipelineState:pipeline];
+                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+
+                                const int64_t n = ggml_nelements(dst);
+
+                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                            } break;
+                        case GGML_UNARY_OP_SIGMOID:
+                            {
+                                id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SIGMOID].pipeline;
+
+                                [encoder setComputePipelineState:pipeline];
+                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+
+                                const int64_t n = ggml_nelements(dst);
+
+                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                            } break;
+                        case GGML_UNARY_OP_GELU:
+                            {
+                                int64_t n = ggml_nelements(dst);
+
+                                id<MTLComputePipelineState> pipeline = nil;
+
+                                if (n % 4 == 0) {
+                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU_4].pipeline;
+                                    n /= 4;
+                                } else {
+                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU].pipeline;
+                                }
+
+                                [encoder setComputePipelineState:pipeline];
+                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+
+                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                            } break;
+                        case GGML_UNARY_OP_GELU_QUICK:
+                            {
+                                int64_t n = ggml_nelements(dst);
+
+                                id<MTLComputePipelineState> pipeline = nil;
+
+                                if (n % 4 == 0) {
+                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU_QUICK_4].pipeline;
+                                    n /= 4;
+                                } else {
+                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GELU_QUICK].pipeline;
+                                }
+
+                                [encoder setComputePipelineState:pipeline];
+                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+
+                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                            } break;
+                        case GGML_UNARY_OP_SILU:
+                            {
+                                int64_t n = ggml_nelements(dst);
+
+                                id<MTLComputePipelineState> pipeline = nil;
+
+                                if (n % 4 == 0) {
+                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SILU_4].pipeline;
+                                    n /= 4;
+                                } else {
+                                    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SILU].pipeline;
+                                }
+
+                                [encoder setComputePipelineState:pipeline];
+                                [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                                [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+
+                                [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                            } break;
+                        default:
+                            {
+                                GGML_METAL_LOG_WARN("%s: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op));
+                                GGML_ASSERT(false);
+                            }
+                    } break;
+                case GGML_OP_SQR:
+                    {
+                        GGML_ASSERT(ggml_is_contiguous(src0));
+
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SQR].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst atIndex:1];
+
+                        const int64_t n = ggml_nelements(dst);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                    } break;
+                case GGML_OP_SUM_ROWS:
+                    {
+                        GGML_ASSERT(src0->nb[0] == ggml_type_size(src0->type));
+
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SUM_ROWS].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2];
+                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3];
+                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4];
+                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5];
+                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6];
+                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7];
+                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8];
+                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9];
+                        [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:10];
+                        [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:11];
+                        [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:12];
+                        [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:13];
+                        [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:14];
+                        [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:15];
+                        [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:16];
+                        [encoder setBytes:&nb13 length:sizeof(nb13) atIndex:17];
+                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:18];
+                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:19];
+                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:20];
+                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:21];
+                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:22];
+                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:23];
+                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:24];
+                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:25];
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                    } break;
+                case GGML_OP_SOFT_MAX:
+                    {
+                        GGML_ASSERT(!src1 || src1->type == GGML_TYPE_F16 || src1->type == GGML_TYPE_F32);
+
+                        int nth = 32; // SIMD width
+
+                        id<MTLComputePipelineState> pipeline = nil;
+
+                        const bool use_f16 = (src1 && src1->type == GGML_TYPE_F16);
+
+                        if (ne00%4 == 0) {
+                            while (nth < ne00/4 && nth*ne01*ne02*ne03 < 256) {
+                                nth *= 2;
+                            }
+                            if (use_f16) {
+                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16_4].pipeline;
+                            } else {
+                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32_4].pipeline;
+                            }
+                        } else {
+                            while (nth < ne00 && nth*ne01*ne02*ne03 < 256) {
+                                nth *= 2;
+                            }
+                            if (use_f16) {
+                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SOFT_MAX_F16].pipeline;
+                            } else {
+                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_SOFT_MAX_F32].pipeline;
+                            }
+                        }
+
+                        float scale;
+                        float max_bias;
+
+                        memcpy(&scale,    ((int32_t *) dst->op_params) + 0, sizeof(scale));
+                        memcpy(&max_bias, ((int32_t *) dst->op_params) + 1, sizeof(max_bias));
+
+                        const int64_t nrows_x = ggml_nrows(src0);
+                        const int64_t nrows_y = src0->ne[1];
+
+                        const uint32_t n_head      = nrows_x/nrows_y;
+                        const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head));
+
+                        const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
+                        const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0   atIndex:0];
+                        if (id_src1) {
+                            [encoder setBuffer:id_src1 offset:offs_src1   atIndex:1];
+                        } else {
+                            [encoder setBuffer:id_src0 offset:offs_src0   atIndex:1];
+                        }
+                        [encoder setBuffer:id_dst      offset:offs_dst            atIndex:2];
+                        [encoder setBytes:&ne00        length:sizeof(ne00)        atIndex:3];
+                        [encoder setBytes:&ne01        length:sizeof(ne01)        atIndex:4];
+                        [encoder setBytes:&ne02        length:sizeof(ne02)        atIndex:5];
+                        [encoder setBytes:&scale       length:sizeof(scale)       atIndex:6];
+                        [encoder setBytes:&max_bias    length:sizeof(max_bias)    atIndex:7];
+                        [encoder setBytes:&m0          length:sizeof(m0)          atIndex:8];
+                        [encoder setBytes:&m1          length:sizeof(m1)          atIndex:9];
+                        [encoder setBytes:&n_head_log2 length:sizeof(n_head_log2) atIndex:10];
+                        [encoder setThreadgroupMemoryLength:32*sizeof(float) atIndex:0];
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne01*ne02*ne03, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_DIAG_MASK_INF:
+                    {
+                        const int n_past = ((int32_t *)(dst->op_params))[0];
+
+                        id<MTLComputePipelineState> pipeline = nil;
+
+                        if (ne00%8 == 0) {
+                            pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF_8].pipeline;
+                        } else {
+                            pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_DIAG_MASK_INF].pipeline;
+                        }
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+                        [encoder setBytes:&ne00   length:sizeof(ne00) atIndex:2];
+                        [encoder setBytes:&ne01   length:sizeof(ne01) atIndex:3];
+                        [encoder setBytes:&n_past length:sizeof(int)  atIndex:4];
+
+                        if (ne00%8 == 0) {
+                            [encoder dispatchThreadgroups:MTLSizeMake(ne00*ne01*ne02/8, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                        }
+                        else {
+                            [encoder dispatchThreadgroups:MTLSizeMake(ne00, ne01, ne02) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                        }
+                    } break;
+                case GGML_OP_MUL_MAT:
+                    {
+                        GGML_ASSERT(ne00 == ne10);
+
+                        GGML_ASSERT(ne12 % ne02 == 0);
+                        GGML_ASSERT(ne13 % ne03 == 0);
+
+                        const uint r2 = ne12/ne02;
+                        const uint r3 = ne13/ne03;
+
+                        // find the break-even point where the matrix-matrix kernel becomes more efficient compared
+                        // to the matrix-vector kernel
+                        int ne11_mm_min = 1;
+
+#if 0
+                        // the numbers below are measured on M2 Ultra for 7B and 13B models
+                        // these numbers do not translate to other devices or model sizes
+                        // TODO: need to find a better approach
+                        if ([ctx->device.name isEqualToString:@"Apple M2 Ultra"]) {
+                            switch (src0t) {
+                                case GGML_TYPE_F16:  ne11_mm_min = 2;  break;
+                                case GGML_TYPE_Q8_0: ne11_mm_min = 7;  break;
+                                case GGML_TYPE_Q2_K: ne11_mm_min = 15; break;
+                                case GGML_TYPE_Q3_K: ne11_mm_min = 7;  break;
+                                case GGML_TYPE_Q4_0:
+                                case GGML_TYPE_Q4_1: ne11_mm_min = 15; break;
+                                case GGML_TYPE_Q4_K: ne11_mm_min = 11; break;
+                                case GGML_TYPE_Q5_0:                          // not tested yet
+                                case GGML_TYPE_Q5_1: ne11_mm_min = 13; break; // not tested yet
+                                case GGML_TYPE_Q5_K: ne11_mm_min = 7;  break;
+                                case GGML_TYPE_Q6_K: ne11_mm_min = 7;  break;
+                                default:             ne11_mm_min = 1;  break;
+                            }
+                        }
+#endif
+
+                        // for now the matrix-matrix multiplication kernel only works on A14+/M1+ SoCs
+                        // AMD GPU and older A-chips will reuse matrix-vector multiplication kernel
+                        if ([ctx->device supportsFamily:MTLGPUFamilyApple7] &&
+                            !ggml_is_transposed(src0) &&
+                            !ggml_is_transposed(src1) &&
+                            src1t == GGML_TYPE_F32 &&
+                            ne00 % 32 == 0 && ne00 >= 64 &&
+                            (ne11 > ne11_mm_min || (ggml_is_quantized(src0t) && ne12 > 1))) {
+                            //printf("matrix: ne00 = %6d, ne01 = %6d, ne02 = %6d, ne11 = %6d, ne12 = %6d\n", ne00, ne01, ne02, ne11, ne12);
+
+                            // some Metal matrix data types require aligned pointers
+                            // ref: https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf (Table 2.5)
+                            switch (src0->type) {
+                                case GGML_TYPE_F32: GGML_ASSERT(nb01 % 16 == 0); break;
+                                case GGML_TYPE_F16: GGML_ASSERT(nb01 % 8  == 0); break;
+                                default: break;
+                            }
+
+                            id<MTLComputePipelineState> pipeline = nil;
+
+                            switch (src0->type) {
+                                case GGML_TYPE_F32:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_F32_F32    ].pipeline; break;
+                                case GGML_TYPE_F16:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_F16_F32    ].pipeline; break;
+                                case GGML_TYPE_Q4_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_0_F32   ].pipeline; break;
+                                case GGML_TYPE_Q4_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_1_F32   ].pipeline; break;
+                                case GGML_TYPE_Q5_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_0_F32   ].pipeline; break;
+                                case GGML_TYPE_Q5_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_1_F32   ].pipeline; break;
+                                case GGML_TYPE_Q8_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q8_0_F32   ].pipeline; break;
+                                case GGML_TYPE_Q2_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q2_K_F32   ].pipeline; break;
+                                case GGML_TYPE_Q3_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q3_K_F32   ].pipeline; break;
+                                case GGML_TYPE_Q4_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q4_K_F32   ].pipeline; break;
+                                case GGML_TYPE_Q5_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q5_K_F32   ].pipeline; break;
+                                case GGML_TYPE_Q6_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_Q6_K_F32   ].pipeline; break;
+                                case GGML_TYPE_IQ2_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XXS_F32].pipeline; break;
+                                case GGML_TYPE_IQ2_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_XS_F32 ].pipeline; break;
+                                case GGML_TYPE_IQ3_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_XXS_F32].pipeline; break;
+                                case GGML_TYPE_IQ3_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ3_S_F32  ].pipeline; break;
+                                case GGML_TYPE_IQ2_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ2_S_F32  ].pipeline; break;
+                                case GGML_TYPE_IQ1_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_S_F32  ].pipeline; break;
+                                case GGML_TYPE_IQ1_M:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ1_M_F32  ].pipeline; break;
+                                case GGML_TYPE_IQ4_NL:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_NL_F32 ].pipeline; break;
+                                case GGML_TYPE_IQ4_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_IQ4_XS_F32 ].pipeline; break;
+                                default: GGML_ASSERT(false && "MUL MAT-MAT not implemented");
+                            }
+
+                            [encoder setComputePipelineState:pipeline];
+                            [encoder setBuffer:id_src0 offset:offs_src0    atIndex:0];
+                            [encoder setBuffer:id_src1 offset:offs_src1    atIndex:1];
+                            [encoder setBuffer:id_dst  offset:offs_dst     atIndex:2];
+                            [encoder setBytes:&ne00    length:sizeof(ne00) atIndex:3];
+                            [encoder setBytes:&ne02    length:sizeof(ne02) atIndex:4];
+                            [encoder setBytes:&nb01    length:sizeof(nb01) atIndex:5];
+                            [encoder setBytes:&nb02    length:sizeof(nb02) atIndex:6];
+                            [encoder setBytes:&ne12    length:sizeof(ne12) atIndex:7];
+                            [encoder setBytes:&nb10    length:sizeof(nb10) atIndex:8];
+                            [encoder setBytes:&nb11    length:sizeof(nb11) atIndex:9];
+                            [encoder setBytes:&nb12    length:sizeof(nb12) atIndex:10];
+                            [encoder setBytes:&ne0     length:sizeof(ne0)  atIndex:11];
+                            [encoder setBytes:&ne1     length:sizeof(ne1)  atIndex:12];
+                            [encoder setBytes:&r2      length:sizeof(r2)   atIndex:13];
+                            [encoder setBytes:&r3      length:sizeof(r3)   atIndex:14];
+                            [encoder setThreadgroupMemoryLength:8192 atIndex:0];
+                            [encoder dispatchThreadgroups:MTLSizeMake( (ne11 + 31)/32, (ne01 + 63)/64, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(128, 1, 1)];
+                        } else {
+                            int nth0 = 32;
+                            int nth1 = 1;
+                            int nrows = 1;
+                            //printf("vector: ne00 = %6d, ne01 = %6d, ne02 = %6d, ne11 = %6d, ne12 = %6d\n", ne00, ne01, ne02, ne11, ne12);
+
+                            id<MTLComputePipelineState> pipeline = nil;
+
+                            // use custom matrix x vector kernel
+                            switch (src0t) {
+                                case GGML_TYPE_F32:
+                                    {
+                                        GGML_ASSERT(src1t == GGML_TYPE_F32);
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F32_F32].pipeline;
+                                        nrows = 4;
+                                    } break;
+                                case GGML_TYPE_F16:
+                                    {
+                                        nth0 = 32;
+                                        nth1 = 1;
+                                        if (src1t == GGML_TYPE_F32) {
+                                            if (ne11 * ne12 < 4) {
+                                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_1ROW].pipeline;
+                                            } else if (ne00 >= 128 && ne01 >= 8 && ne00%4 == 0) {
+                                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32_L4].pipeline;
+                                                nrows = ne11;
+                                            } else {
+                                                pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F32].pipeline;
+                                                nrows = 4;
+                                            }
+                                        } else {
+                                            pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_F16_F16].pipeline;
+                                            nrows = 4;
+                                        }
+                                    } break;
+                                case GGML_TYPE_Q4_0:
+                                    {
+                                        nth0 = 8;
+                                        nth1 = 8;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_0_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q4_1:
+                                    {
+                                        nth0 = 8;
+                                        nth1 = 8;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_1_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q5_0:
+                                    {
+                                        nth0 = 8;
+                                        nth1 = 8;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_0_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q5_1:
+                                    {
+                                        nth0 = 8;
+                                        nth1 = 8;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_1_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q8_0:
+                                    {
+                                        nth0 = 8;
+                                        nth1 = 8;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q8_0_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q2_K:
+                                    {
+                                        nth0 = 2;
+                                        nth1 = 32;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q2_K_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q3_K:
+                                    {
+                                        nth0 = 2;
+                                        nth1 = 32;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q3_K_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q4_K:
+                                    {
+                                        nth0 = 4; //1;
+                                        nth1 = 8; //32;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q4_K_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q5_K:
+                                    {
+                                        nth0 = 2;
+                                        nth1 = 32;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q5_K_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q6_K:
+                                    {
+                                        nth0 = 2;
+                                        nth1 = 32;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_Q6_K_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ2_XXS:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XXS_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ2_XS:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_XS_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ3_XXS:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_XXS_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ3_S:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ3_S_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ2_S:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ2_S_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ1_S:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_S_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ1_M:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ1_M_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ4_NL:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_NL_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ4_XS:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_IQ4_XS_F32].pipeline;
+                                    } break;
+                                default:
+                                    {
+                                        GGML_METAL_LOG_ERROR("Asserting on type %d\n", (int)src0t);
+                                        GGML_ASSERT(false && "not implemented");
+                                    }
+                            };
+
+                            if (ggml_is_quantized(src0t)) {
+                                GGML_ASSERT(ne00 >= nth0*nth1);
+                            }
+
+                            [encoder setComputePipelineState:pipeline];
+                            [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                            [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1];
+                            [encoder setBuffer:id_dst  offset:offs_dst  atIndex:2];
+                            [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:3];
+                            [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:4];
+                            [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:5];
+                            [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6];
+                            [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7];
+                            [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8];
+                            [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:9];
+                            [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:10];
+                            [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:11];
+                            [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:12];
+                            [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:13];
+                            [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:14];
+                            [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:15];
+                            [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:16];
+                            [encoder setBytes:&r2   length:sizeof(r2)   atIndex:17];
+                            [encoder setBytes:&r3   length:sizeof(r3)   atIndex:18];
+
+                            if (src0t == GGML_TYPE_Q4_0  || src0t == GGML_TYPE_Q4_1  || src0t == GGML_TYPE_Q5_0 ||
+                                src0t == GGML_TYPE_Q5_1  || src0t == GGML_TYPE_Q8_0  || src0t == GGML_TYPE_Q2_K ||
+                                src0t == GGML_TYPE_IQ1_S || src0t == GGML_TYPE_IQ1_M || src0t == GGML_TYPE_IQ2_S) {
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_IQ2_XXS || src0t == GGML_TYPE_IQ2_XS) {
+                                const int mem_size = src0t == GGML_TYPE_IQ2_XXS ? 256*8+128 : 512*8+128;
+                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_IQ3_XXS || src0t == GGML_TYPE_IQ3_S) {
+                                const int mem_size = src0t == GGML_TYPE_IQ3_XXS ? 256*4+128 : 512*4;
+                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_IQ4_NL || src0t == GGML_TYPE_IQ4_XS) {
+                                const int mem_size = 32*sizeof(float);
+                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_Q4_K) {
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_Q3_K) {
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_Q5_K) {
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_Q6_K) {
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, ne11, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            } else {
+                                const int64_t ny = (ne11 + nrows - 1)/nrows;
+                                [encoder dispatchThreadgroups:MTLSizeMake(ne01, ny, ne12*ne13) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                        }
+                    } break;
+                case GGML_OP_MUL_MAT_ID:
+                    {
+                        const int n_as = src0->ne[2];
+
+                        // src2 = ids
+                        const enum ggml_type src2t = src2->type; GGML_UNUSED(src2t);
+
+                        GGML_ASSERT(src2t == GGML_TYPE_I32);
+
+                        GGML_ASSERT(!ggml_is_transposed(src0));
+                        GGML_ASSERT(!ggml_is_transposed(src1));
+
+                        GGML_ASSERT(src1t == GGML_TYPE_F32);
+
+                        // find the break-even point where the matrix-matrix kernel becomes more efficient compared
+                        // to the matrix-vector kernel
+                        // ne20 = n_used_experts
+                        // ne21 = n_rows
+                        const int dst_rows = ne20*ne21;
+                        const int dst_rows_min = n_as;
+                        const int dst_rows_max = (ctx->device.maxThreadgroupMemoryLength - 32 - 8192)/4;
+
+                        // max size of the rowids array in the kernel shared buffer
+                        GGML_ASSERT(dst_rows <= dst_rows_max);
+
+                        // for now the matrix-matrix multiplication kernel only works on A14+/M1+ SoCs
+                        // AMD GPU and older A-chips will reuse matrix-vector multiplication kernel
+                        // !!!
+                        // TODO: for now, always use mat-vec kernels until we figure out how to improve the
+                        //       indirect matrix multiplication
+                        // !!!
+                        if ([ctx->device supportsFamily:MTLGPUFamilyApple7] &&
+                            ne00 % 32 == 0 && ne00 >= 64 &&
+                            dst_rows > dst_rows_min) {
+
+                            // some Metal matrix data types require aligned pointers
+                            // ref: https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf (Table 2.5)
+                            switch (src0->type) {
+                                case GGML_TYPE_F32: GGML_ASSERT(nb01 % 16 == 0); break;
+                                case GGML_TYPE_F16: GGML_ASSERT(nb01 % 8  == 0); break;
+                                default: break;
+                            }
+
+                            id<MTLComputePipelineState> pipeline = nil;
+
+                            switch (src0->type) {
+                                case GGML_TYPE_F32:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F32_F32    ].pipeline; break;
+                                case GGML_TYPE_F16:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_F16_F32    ].pipeline; break;
+                                case GGML_TYPE_Q4_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_0_F32   ].pipeline; break;
+                                case GGML_TYPE_Q4_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_1_F32   ].pipeline; break;
+                                case GGML_TYPE_Q5_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_0_F32   ].pipeline; break;
+                                case GGML_TYPE_Q5_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_1_F32   ].pipeline; break;
+                                case GGML_TYPE_Q8_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q8_0_F32   ].pipeline; break;
+                                case GGML_TYPE_Q2_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q2_K_F32   ].pipeline; break;
+                                case GGML_TYPE_Q3_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q3_K_F32   ].pipeline; break;
+                                case GGML_TYPE_Q4_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q4_K_F32   ].pipeline; break;
+                                case GGML_TYPE_Q5_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q5_K_F32   ].pipeline; break;
+                                case GGML_TYPE_Q6_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_Q6_K_F32   ].pipeline; break;
+                                case GGML_TYPE_IQ2_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XXS_F32].pipeline; break;
+                                case GGML_TYPE_IQ2_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_XS_F32 ].pipeline; break;
+                                case GGML_TYPE_IQ3_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_XXS_F32].pipeline; break;
+                                case GGML_TYPE_IQ3_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ3_S_F32  ].pipeline; break;
+                                case GGML_TYPE_IQ2_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ2_S_F32  ].pipeline; break;
+                                case GGML_TYPE_IQ1_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_S_F32  ].pipeline; break;
+                                case GGML_TYPE_IQ1_M:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ1_M_F32  ].pipeline; break;
+                                case GGML_TYPE_IQ4_NL:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_NL_F32 ].pipeline; break;
+                                case GGML_TYPE_IQ4_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MM_ID_IQ4_XS_F32 ].pipeline; break;
+                                default: GGML_ASSERT(false && "MUL_MAT_ID not implemented");
+                            }
+
+                            [encoder setComputePipelineState:pipeline];
+                            [encoder setBuffer:id_src0 offset:offs_src0    atIndex:0];
+                            [encoder setBuffer:id_src1 offset:offs_src1    atIndex:1];
+                            [encoder setBuffer:id_dst  offset:offs_dst     atIndex:2];
+                            [encoder setBuffer:id_src2 offset:offs_src2    atIndex:3];
+                            [encoder setBytes:&ne20    length:sizeof(ne20) atIndex:4];
+                            [encoder setBytes:&ne21    length:sizeof(ne21) atIndex:5];
+                            [encoder setBytes:&nb21    length:sizeof(nb21) atIndex:6];
+                            [encoder setBytes:&ne00    length:sizeof(ne00) atIndex:7];
+                            [encoder setBytes:&ne02    length:sizeof(ne02) atIndex:8];
+                            [encoder setBytes:&nb01    length:sizeof(nb01) atIndex:9];
+                            [encoder setBytes:&nb02    length:sizeof(nb02) atIndex:10];
+                            [encoder setBytes:&ne11    length:sizeof(ne11) atIndex:11];
+                            [encoder setBytes:&ne12    length:sizeof(ne12) atIndex:12];
+                            [encoder setBytes:&ne13    length:sizeof(ne13) atIndex:13];
+                            [encoder setBytes:&nb10    length:sizeof(nb10) atIndex:14];
+                            [encoder setBytes:&nb11    length:sizeof(nb11) atIndex:15];
+                            [encoder setBytes:&nb12    length:sizeof(nb12) atIndex:16];
+                            [encoder setBytes:&ne0     length:sizeof(ne0)  atIndex:17];
+                            [encoder setBytes:&ne1     length:sizeof(ne1)  atIndex:18];
+                            [encoder setBytes:&nb1     length:sizeof(nb1)  atIndex:19];
+
+                            [encoder setThreadgroupMemoryLength:GGML_PAD(8192 + dst_rows*4/*sizeof(ushort2)*/, 16) atIndex:0];
+
+                            [encoder dispatchThreadgroups:MTLSizeMake((ne21 + 31)/32, (ne01 + 63)/64, n_as) threadsPerThreadgroup:MTLSizeMake(128, 1, 1)];
+                        } else {
+                            int nth0 = 32;
+                            int nth1 = 1;
+                            int nrows = 1;
+                            //printf("vector: ne00 = %6d, ne01 = %6d, ne02 = %6d, ne11 = %6d, ne12 = %6d\n", ne00, ne01, ne02, ne11, ne12);
+
+                            id<MTLComputePipelineState> pipeline = nil;
+
+                            // use custom matrix x vector kernel
+                            switch (src0t) {
+                                case GGML_TYPE_F32:
+                                    {
+                                        GGML_ASSERT(src1t == GGML_TYPE_F32);
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F32_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_F16:
+                                    {
+                                        GGML_ASSERT(src1t == GGML_TYPE_F32);
+                                        nth0 = 32;
+                                        nth1 = 1;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_F16_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q4_0:
+                                    {
+                                        nth0 = 8;
+                                        nth1 = 8;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_0_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q4_1:
+                                    {
+                                        nth0 = 8;
+                                        nth1 = 8;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_1_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q5_0:
+                                    {
+                                        nth0 = 8;
+                                        nth1 = 8;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_0_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q5_1:
+                                    {
+                                        nth0 = 8;
+                                        nth1 = 8;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_1_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q8_0:
+                                    {
+                                        nth0 = 8;
+                                        nth1 = 8;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q8_0_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q2_K:
+                                    {
+                                        nth0 = 2;
+                                        nth1 = 32;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q2_K_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q3_K:
+                                    {
+                                        nth0 = 2;
+                                        nth1 = 32;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q3_K_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q4_K:
+                                    {
+                                        nth0 = 4; //1;
+                                        nth1 = 8; //32;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q4_K_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q5_K:
+                                    {
+                                        nth0 = 2;
+                                        nth1 = 32;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q5_K_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_Q6_K:
+                                    {
+                                        nth0 = 2;
+                                        nth1 = 32;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_Q6_K_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ2_XXS:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XXS_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ2_XS:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_XS_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ3_XXS:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_XXS_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ3_S:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ3_S_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ2_S:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ2_S_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ1_S:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_S_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ1_M:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ1_M_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ4_NL:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_NL_F32].pipeline;
+                                    } break;
+                                case GGML_TYPE_IQ4_XS:
+                                    {
+                                        nth0 = 4;
+                                        nth1 = 16;
+                                        pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_MUL_MV_ID_IQ4_XS_F32].pipeline;
+                                    } break;
+                                default:
+                                    {
+                                        GGML_METAL_LOG_ERROR("Asserting on type %d\n", (int)src2t);
+                                        GGML_ASSERT(false && "not implemented");
+                                    }
+                            };
+
+                            if (ggml_is_quantized(src0t)) {
+                                GGML_ASSERT(ne00 >= nth0*nth1);
+                            }
+
+                            [encoder setComputePipelineState:pipeline];
+                            [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                            [encoder setBuffer:id_src1 offset:offs_src1 atIndex:1];
+                            [encoder setBuffer:id_dst  offset:offs_dst  atIndex:2];
+                            [encoder setBuffer:id_src2 offset:offs_src2 atIndex:3];
+                            [encoder setBytes:&ne20 length:sizeof(ne20) atIndex:4];
+                            [encoder setBytes:&ne21 length:sizeof(ne21) atIndex:5];
+                            [encoder setBytes:&nb21 length:sizeof(nb21) atIndex:6];
+                            [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:7];
+                            [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:8];
+                            [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:9];
+                            [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:10];
+                            [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:11];
+                            [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:12];
+                            [encoder setBytes:&ne10 length:sizeof(ne10) atIndex:13];
+                            [encoder setBytes:&ne11 length:sizeof(ne11) atIndex:14];
+                            [encoder setBytes:&ne12 length:sizeof(ne12) atIndex:15];
+                            [encoder setBytes:&ne13 length:sizeof(ne13) atIndex:16];
+                            [encoder setBytes:&nb10 length:sizeof(nb10) atIndex:17];
+                            [encoder setBytes:&nb11 length:sizeof(nb11) atIndex:18];
+                            [encoder setBytes:&nb12 length:sizeof(nb12) atIndex:19];
+                            [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:20];
+                            [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:21];
+                            [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:22];
+
+                            const int64_t _ne1 = 1;
+                            const int tgz = dst_rows;
+
+                            if (src0t == GGML_TYPE_Q4_0  || src0t == GGML_TYPE_Q4_1  || src0t == GGML_TYPE_Q5_0 ||
+                                src0t == GGML_TYPE_Q5_1  || src0t == GGML_TYPE_Q8_0  || src0t == GGML_TYPE_Q2_K ||
+                                src0t == GGML_TYPE_IQ1_S || src0t == GGML_TYPE_IQ1_M || src0t == GGML_TYPE_IQ2_S) {
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_IQ2_XXS || src0t == GGML_TYPE_IQ2_XS) {
+                                const int mem_size = src0t == GGML_TYPE_IQ2_XXS ? 256*8+128 : 512*8+128;
+                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_IQ3_XXS || src0t == GGML_TYPE_IQ3_S) {
+                                const int mem_size = src0t == GGML_TYPE_IQ3_XXS ? 256*4+128 : 512*4;
+                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 7)/8, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_IQ4_NL || src0t == GGML_TYPE_IQ4_XS) {
+                                const int mem_size = 32*sizeof(float);
+                                [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_Q4_K) {
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_Q3_K) {
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_Q5_K) {
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 3)/4, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                            else if (src0t == GGML_TYPE_Q6_K) {
+                                [encoder dispatchThreadgroups:MTLSizeMake((ne01 + 1)/2, _ne1, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            } else {
+                                const int64_t ny = (_ne1 + nrows - 1)/nrows; // = _ne1
+                                [encoder dispatchThreadgroups:MTLSizeMake(ne01, ny, tgz) threadsPerThreadgroup:MTLSizeMake(nth0, nth1, 1)];
+                            }
+                        }
+                    } break;
+                case GGML_OP_GET_ROWS:
+                    {
+                        id<MTLComputePipelineState> pipeline = nil;
+
+                        switch (src0->type) {
+                            case GGML_TYPE_F32:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_F32    ].pipeline; break;
+                            case GGML_TYPE_F16:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_F16    ].pipeline; break;
+                            case GGML_TYPE_Q4_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_0   ].pipeline; break;
+                            case GGML_TYPE_Q4_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_1   ].pipeline; break;
+                            case GGML_TYPE_Q5_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_0   ].pipeline; break;
+                            case GGML_TYPE_Q5_1:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_1   ].pipeline; break;
+                            case GGML_TYPE_Q8_0:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q8_0   ].pipeline; break;
+                            case GGML_TYPE_Q2_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q2_K   ].pipeline; break;
+                            case GGML_TYPE_Q3_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q3_K   ].pipeline; break;
+                            case GGML_TYPE_Q4_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q4_K   ].pipeline; break;
+                            case GGML_TYPE_Q5_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q5_K   ].pipeline; break;
+                            case GGML_TYPE_Q6_K:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_Q6_K   ].pipeline; break;
+                            case GGML_TYPE_IQ2_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XXS].pipeline; break;
+                            case GGML_TYPE_IQ2_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_XS ].pipeline; break;
+                            case GGML_TYPE_IQ3_XXS: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_XXS].pipeline; break;
+                            case GGML_TYPE_IQ3_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ3_S  ].pipeline; break;
+                            case GGML_TYPE_IQ2_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ2_S  ].pipeline; break;
+                            case GGML_TYPE_IQ1_S:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_S  ].pipeline; break;
+                            case GGML_TYPE_IQ1_M:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ1_M  ].pipeline; break;
+                            case GGML_TYPE_IQ4_NL:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_NL ].pipeline; break;
+                            case GGML_TYPE_IQ4_XS:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_IQ4_XS ].pipeline; break;
+                            case GGML_TYPE_I32:     pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GET_ROWS_I32    ].pipeline; break;
+                            default: GGML_ASSERT(false && "not implemented");
+                        }
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0     offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_src1     offset:offs_src1 atIndex:1];
+                        [encoder setBuffer:id_dst      offset:offs_dst  atIndex:2];
+                        [encoder setBytes:&ne00 length:sizeof( int64_t) atIndex:3];
+                        [encoder setBytes:&nb01 length:sizeof(uint64_t) atIndex:4];
+                        [encoder setBytes:&nb02 length:sizeof(uint64_t) atIndex:5];
+                        [encoder setBytes:&ne10 length:sizeof( int64_t) atIndex:6];
+                        [encoder setBytes:&nb10 length:sizeof( int64_t) atIndex:7];
+                        [encoder setBytes:&nb11 length:sizeof( int64_t) atIndex:8];
+                        [encoder setBytes:&nb1  length:sizeof(uint64_t) atIndex:9];
+                        [encoder setBytes:&nb2  length:sizeof(uint64_t) atIndex:10];
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne10, ne11, 1) threadsPerThreadgroup:MTLSizeMake(32, 1, 1)];
+                    } break;
+                case GGML_OP_RMS_NORM:
+                    {
+                        GGML_ASSERT(ne00 % 4 == 0);
+                        GGML_ASSERT(ggml_is_contiguous_1(src0));
+
+                        float eps;
+                        memcpy(&eps, dst->op_params, sizeof(float));
+
+                        int nth = 32; // SIMD width
+
+                        while (nth < ne00/4 && nth < 1024) {
+                            nth *= 2;
+                        }
+
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_RMS_NORM].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0        atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst         atIndex:1];
+                        [encoder setBytes:&ne00    length:sizeof( int64_t) atIndex:2];
+                        [encoder setBytes:&nb01    length:sizeof(uint64_t) atIndex:3];
+                        [encoder setBytes:&eps     length:sizeof(   float) atIndex:4];
+                        [encoder setThreadgroupMemoryLength:32*sizeof(float) atIndex:0];
+
+                        const int64_t nrows = ggml_nrows(src0);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(nrows, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_GROUP_NORM:
+                    {
+                        GGML_ASSERT(ne00 % 4 == 0);
+                        GGML_ASSERT(ggml_is_contiguous(src0));
+
+                        //float eps;
+                        //memcpy(&eps, dst->op_params, sizeof(float));
+
+                        const float eps = 1e-6f; // TODO: temporarily hardcoded
+
+                        const int32_t n_groups = ((int32_t *) dst->op_params)[0];
+
+                        int nth = 32; // SIMD width
+
+                        //while (nth < ne00/4 && nth < 1024) {
+                        //    nth *= 2;
+                        //}
+
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_GROUP_NORM].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0  offset:offs_src0        atIndex:0];
+                        [encoder setBuffer:id_dst   offset:offs_dst         atIndex:1];
+                        [encoder setBytes:&ne00     length:sizeof( int64_t) atIndex:2];
+                        [encoder setBytes:&ne01     length:sizeof( int64_t) atIndex:3];
+                        [encoder setBytes:&ne02     length:sizeof( int64_t) atIndex:4];
+                        [encoder setBytes:&nb00     length:sizeof(uint64_t) atIndex:5];
+                        [encoder setBytes:&nb01     length:sizeof(uint64_t) atIndex:6];
+                        [encoder setBytes:&nb02     length:sizeof(uint64_t) atIndex:7];
+                        [encoder setBytes:&n_groups length:sizeof( int32_t) atIndex:8];
+                        [encoder setBytes:&eps      length:sizeof(   float) atIndex:9];
+                        [encoder setThreadgroupMemoryLength:32*sizeof(float) atIndex:0];
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(n_groups, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_NORM:
+                    {
+                        GGML_ASSERT(ggml_is_contiguous_1(src0));
+
+                        float eps;
+                        memcpy(&eps, dst->op_params, sizeof(float));
+
+                        const int nth = MIN(256, ne00);
+
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_NORM].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0        atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst         atIndex:1];
+                        [encoder setBytes:&ne00    length:sizeof( int64_t) atIndex:2];
+                        [encoder setBytes:&nb01    length:sizeof(uint64_t) atIndex:3];
+                        [encoder setBytes:&eps     length:sizeof(   float) atIndex:4];
+                        [encoder setThreadgroupMemoryLength:GGML_PAD(nth*sizeof(float), 16) atIndex:0];
+
+                        const int64_t nrows = ggml_nrows(src0);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(nrows, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_ROPE:
+                    {
+                        GGML_ASSERT(ne10 == ne02);
+
+                        const int nth = MIN(1024, ne00);
+
+                        const int n_past     = ((int32_t *) dst->op_params)[0];
+                        const int n_dims     = ((int32_t *) dst->op_params)[1];
+                        const int mode       = ((int32_t *) dst->op_params)[2];
+                        // skip 3, n_ctx, used in GLM RoPE, unimplemented in metal
+                        const int n_ctx_orig = ((int32_t *) dst->op_params)[4];
+
+                        float freq_base;
+                        float freq_scale;
+                        float ext_factor;
+                        float attn_factor;
+                        float beta_fast;
+                        float beta_slow;
+
+                        memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
+                        memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
+                        memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
+                        memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
+                        memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
+                        memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
+
+                        const bool is_neox = mode & 2;
+
+                        id<MTLComputePipelineState> pipeline = nil;
+
+                        if (!is_neox) {
+                            switch (src0->type) {
+                                case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ROPE_NORM_F32].pipeline; break;
+                                case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ROPE_NORM_F16].pipeline; break;
+                                default: GGML_ASSERT(false);
+                            };
+                        } else {
+                            switch (src0->type) {
+                                case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F32].pipeline; break;
+                                case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ROPE_NEOX_F16].pipeline; break;
+                                default: GGML_ASSERT(false);
+                            };
+                        }
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0     offset:offs_src0        atIndex:0];
+                        [encoder setBuffer:id_src1     offset:offs_src1        atIndex:1];
+                        if (id_src2 != nil) {
+                            [encoder setBuffer:id_src2 offset:offs_src2        atIndex:2];
+                        } else {
+                            [encoder setBuffer:id_src0 offset:offs_src0        atIndex:2];
+                        }
+                        [encoder setBuffer:id_dst      offset:offs_dst         atIndex:3];
+                        [encoder setBytes:&ne00        length:sizeof( int64_t) atIndex:4];
+                        [encoder setBytes:&ne01        length:sizeof( int64_t) atIndex:5];
+                        [encoder setBytes:&ne02        length:sizeof( int64_t) atIndex:6];
+                        [encoder setBytes:&ne03        length:sizeof( int64_t) atIndex:7];
+                        [encoder setBytes:&nb00        length:sizeof(uint64_t) atIndex:8];
+                        [encoder setBytes:&nb01        length:sizeof(uint64_t) atIndex:9];
+                        [encoder setBytes:&nb02        length:sizeof(uint64_t) atIndex:10];
+                        [encoder setBytes:&nb03        length:sizeof(uint64_t) atIndex:11];
+                        [encoder setBytes:&ne0         length:sizeof( int64_t) atIndex:12];
+                        [encoder setBytes:&ne1         length:sizeof( int64_t) atIndex:13];
+                        [encoder setBytes:&ne2         length:sizeof( int64_t) atIndex:14];
+                        [encoder setBytes:&ne3         length:sizeof( int64_t) atIndex:15];
+                        [encoder setBytes:&nb0         length:sizeof(uint64_t) atIndex:16];
+                        [encoder setBytes:&nb1         length:sizeof(uint64_t) atIndex:17];
+                        [encoder setBytes:&nb2         length:sizeof(uint64_t) atIndex:18];
+                        [encoder setBytes:&nb3         length:sizeof(uint64_t) atIndex:19];
+                        [encoder setBytes:&n_past      length:sizeof(     int) atIndex:20];
+                        [encoder setBytes:&n_dims      length:sizeof(     int) atIndex:21];
+                        [encoder setBytes:&n_ctx_orig  length:sizeof(     int) atIndex:22];
+                        [encoder setBytes:&freq_base   length:sizeof(   float) atIndex:23];
+                        [encoder setBytes:&freq_scale  length:sizeof(   float) atIndex:24];
+                        [encoder setBytes:&ext_factor  length:sizeof(   float) atIndex:25];
+                        [encoder setBytes:&attn_factor length:sizeof(   float) atIndex:26];
+                        [encoder setBytes:&beta_fast   length:sizeof(   float) atIndex:27];
+                        [encoder setBytes:&beta_slow   length:sizeof(   float) atIndex:28];
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_IM2COL:
+                    {
+                        GGML_ASSERT(src0->type == GGML_TYPE_F16);
+                        GGML_ASSERT(src1->type == GGML_TYPE_F32);
+                        GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32);
+
+                        const int32_t s0 = ((const int32_t *)(dst->op_params))[0];
+                        const int32_t s1 = ((const int32_t *)(dst->op_params))[1];
+                        const int32_t p0 = ((const int32_t *)(dst->op_params))[2];
+                        const int32_t p1 = ((const int32_t *)(dst->op_params))[3];
+                        const int32_t d0 = ((const int32_t *)(dst->op_params))[4];
+                        const int32_t d1 = ((const int32_t *)(dst->op_params))[5];
+
+                        const bool is_2D = ((const int32_t *)(dst->op_params))[6] == 1;
+
+                        const int32_t N  = src1->ne[is_2D ? 3 : 2];
+                        const int32_t IC = src1->ne[is_2D ? 2 : 1];
+                        const int32_t IH = is_2D ? src1->ne[1] : 1;
+                        const int32_t IW =         src1->ne[0];
+
+                        const int32_t KH = is_2D ? src0->ne[1] : 1;
+                        const int32_t KW =         src0->ne[0];
+
+                        const int32_t OH = is_2D ? dst->ne[2] : 1;
+                        const int32_t OW =         dst->ne[1];
+
+                        const int32_t CHW = IC * KH * KW;
+
+                        const int32_t ofs0 = src1->nb[is_2D ? 3 : 2] / 4;
+                        const int32_t ofs1 = src1->nb[is_2D ? 2 : 1] / 4;
+
+                        id<MTLComputePipelineState> pipeline = nil;
+
+                        switch (dst->type) {
+                            case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_IM2COL_F32].pipeline; break;
+                            case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_IM2COL_F16].pipeline; break;
+                            default: GGML_ASSERT(false);
+                        };
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src1 offset:offs_src1        atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst         atIndex:1];
+                        [encoder setBytes:&ofs0    length:sizeof( int32_t) atIndex:2];
+                        [encoder setBytes:&ofs1    length:sizeof( int32_t) atIndex:3];
+                        [encoder setBytes:&IW      length:sizeof( int32_t) atIndex:4];
+                        [encoder setBytes:&IH      length:sizeof( int32_t) atIndex:5];
+                        [encoder setBytes:&CHW     length:sizeof( int32_t) atIndex:6];
+                        [encoder setBytes:&s0      length:sizeof( int32_t) atIndex:7];
+                        [encoder setBytes:&s1      length:sizeof( int32_t) atIndex:8];
+                        [encoder setBytes:&p0      length:sizeof( int32_t) atIndex:9];
+                        [encoder setBytes:&p1      length:sizeof( int32_t) atIndex:10];
+                        [encoder setBytes:&d0      length:sizeof( int32_t) atIndex:11];
+                        [encoder setBytes:&d1      length:sizeof( int32_t) atIndex:12];
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(IC, OH, OW) threadsPerThreadgroup:MTLSizeMake(N, KH, KW)];
+                    } break;
+                case GGML_OP_UPSCALE:
+                    {
+                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
+
+                        const float sf0 = (float)ne0/src0->ne[0];
+                        const float sf1 = (float)ne1/src0->ne[1];
+                        const float sf2 = (float)ne2/src0->ne[2];
+                        const float sf3 = (float)ne3/src0->ne[3];
+
+                        const id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_UPSCALE_F32].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2];
+                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3];
+                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4];
+                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5];
+                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6];
+                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7];
+                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8];
+                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9];
+                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:10];
+                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:11];
+                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:12];
+                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:13];
+                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:14];
+                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:15];
+                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:16];
+                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:17];
+                        [encoder setBytes:&sf0  length:sizeof(sf0)  atIndex:18];
+                        [encoder setBytes:&sf1  length:sizeof(sf1)  atIndex:19];
+                        [encoder setBytes:&sf2  length:sizeof(sf2)  atIndex:20];
+                        [encoder setBytes:&sf3  length:sizeof(sf3)  atIndex:21];
+
+                        const int nth = MIN((int) pipeline.maxTotalThreadsPerThreadgroup, ne0);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_PAD:
+                    {
+                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
+
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_PAD_F32].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+                        [encoder setBytes:&ne00 length:sizeof(ne00) atIndex:2];
+                        [encoder setBytes:&ne01 length:sizeof(ne01) atIndex:3];
+                        [encoder setBytes:&ne02 length:sizeof(ne02) atIndex:4];
+                        [encoder setBytes:&ne03 length:sizeof(ne03) atIndex:5];
+                        [encoder setBytes:&nb00 length:sizeof(nb00) atIndex:6];
+                        [encoder setBytes:&nb01 length:sizeof(nb01) atIndex:7];
+                        [encoder setBytes:&nb02 length:sizeof(nb02) atIndex:8];
+                        [encoder setBytes:&nb03 length:sizeof(nb03) atIndex:9];
+                        [encoder setBytes:&ne0  length:sizeof(ne0)  atIndex:10];
+                        [encoder setBytes:&ne1  length:sizeof(ne1)  atIndex:11];
+                        [encoder setBytes:&ne2  length:sizeof(ne2)  atIndex:12];
+                        [encoder setBytes:&ne3  length:sizeof(ne3)  atIndex:13];
+                        [encoder setBytes:&nb0  length:sizeof(nb0)  atIndex:14];
+                        [encoder setBytes:&nb1  length:sizeof(nb1)  atIndex:15];
+                        [encoder setBytes:&nb2  length:sizeof(nb2)  atIndex:16];
+                        [encoder setBytes:&nb3  length:sizeof(nb3)  atIndex:17];
+
+                        const int nth = MIN(1024, ne0);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne1, ne2, ne3) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_ARANGE:
+                    {
+                        GGML_ASSERT(dst->type == GGML_TYPE_F32);
+
+                        float start;
+                        float step;
+
+                        memcpy(&start, ((int32_t *) dst->op_params) + 0, sizeof(float));
+                        memcpy(&step,  ((int32_t *) dst->op_params) + 2, sizeof(float));
+
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ARANGE_F32].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_dst  offset:offs_dst    atIndex:0];
+                        [encoder setBytes:&ne0   length:sizeof(ne0)   atIndex:1];
+                        [encoder setBytes:&start length:sizeof(start) atIndex:2];
+                        [encoder setBytes:&step  length:sizeof(step)  atIndex:3];
+
+                        const int nth = MIN(1024, ne0);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(1, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_TIMESTEP_EMBEDDING:
+                    {
+                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
+
+                        const int dim        = dst->op_params[0];
+                        const int max_period = dst->op_params[1];
+
+                        const int half = dim / 2;
+
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_TIMESTEP_EMBEDDING_F32].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0 atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst  atIndex:1];
+                        [encoder setBytes:&nb1   length:sizeof(nb1) atIndex:2];
+                        [encoder setBytes:&dim   length:sizeof(dim) atIndex:3];
+                        [encoder setBytes:&max_period length:sizeof(max_period) atIndex:4];
+
+                        const int nth = MIN(1024, half);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne00, 1, 1) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                case GGML_OP_ARGSORT:
+                    {
+                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
+                        GGML_ASSERT( dst->type == GGML_TYPE_I32);
+
+                        const int nrows = ggml_nrows(src0);
+
+                        enum ggml_sort_order order = (enum ggml_sort_order) dst->op_params[0];
+
+                        // bitonic sort requires the number of elements to be power of 2
+                        int64_t ne00_padded = 1;
+                        while (ne00_padded < ne00) {
+                            ne00_padded *= 2;
+                        }
+
+                        // Metal kernels require the buffer size to be multiple of 16 bytes
+                        // https://developer.apple.com/documentation/metal/mtlcomputecommandencoder/1443142-setthreadgroupmemorylength
+                        const int mem_size = GGML_PAD(ne00_padded*sizeof(int32_t), 16);
+
+                        id<MTLComputePipelineState> pipeline = nil;
+
+                        switch (order) {
+                            case GGML_SORT_ORDER_ASC:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_ASC].pipeline;  break;
+                            case GGML_SORT_ORDER_DESC: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_ARGSORT_F32_I32_DESC].pipeline; break;
+                            default: GGML_ASSERT(false);
+                        };
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0     offset:offs_src0        atIndex:0];
+                        [encoder setBuffer:id_dst      offset:offs_dst         atIndex:1];
+                        [encoder setBytes:&ne00        length:sizeof( int64_t) atIndex:2];
+                        [encoder setBytes:&ne00_padded length:sizeof( int64_t) atIndex:3];
+                        [encoder setThreadgroupMemoryLength:mem_size atIndex:0];
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(1, nrows, 1) threadsPerThreadgroup:MTLSizeMake(ne00_padded, 1, 1)];
+                    } break;
+                case GGML_OP_LEAKY_RELU:
+                    {
+                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
+
+                        float slope;
+                        memcpy(&slope, dst->op_params, sizeof(float));
+
+                        id<MTLComputePipelineState> pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_LEAKY_RELU_F32].pipeline;
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0   atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst    atIndex:1];
+                        [encoder setBytes:&slope length:sizeof(slope) atIndex:2];
+
+                        const int64_t n = ggml_nelements(dst);
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(n, 1, 1) threadsPerThreadgroup:MTLSizeMake(1, 1, 1)];
+                    } break;
+                case GGML_OP_FLASH_ATTN_EXT:
+                    {
+                        GGML_ASSERT(ne00 % 4  == 0);
+                        GGML_ASSERT(ne11 % 32 == 0);
+
+                        GGML_ASSERT(src0->type == GGML_TYPE_F32);
+
+                        GGML_ASSERT(ggml_are_same_shape (src1, src2));
+
+                        struct ggml_tensor * src3 = gf->nodes[i]->src[3];
+
+                        size_t offs_src3 = 0;
+
+                        id<MTLBuffer> id_src3 = src3 ? ggml_metal_get_buffer(src3, &offs_src3) : nil;
+
+                        GGML_ASSERT(!src3 || src3->type == GGML_TYPE_F16);
+                        GGML_ASSERT(!src3 || src3->ne[1] >= GGML_PAD(src0->ne[1], 8) &&
+                                "the Flash-Attention Metal kernel requires the mask to be padded to 8 and at least n_queries big");
+
+                        const int64_t  ne30 = src3 ? src3->ne[0] : 0; GGML_UNUSED(ne30);
+                      //const int64_t  ne31 = src3 ? src3->ne[1] : 0;
+                        const int64_t  ne32 = src3 ? src3->ne[2] : 0; GGML_UNUSED(ne32);
+                        const int64_t  ne33 = src3 ? src3->ne[3] : 0; GGML_UNUSED(ne33);
+
+                        const uint64_t nb30 = src3 ? src3->nb[0] : 0; GGML_UNUSED(nb30);
+                        const uint64_t nb31 = src3 ? src3->nb[1] : 0;
+                        const uint64_t nb32 = src3 ? src3->nb[2] : 0; GGML_UNUSED(nb32);
+                        const uint64_t nb33 = src3 ? src3->nb[3] : 0; GGML_UNUSED(nb33);
+
+                        const enum ggml_type src2t = src2 ? src2->type : GGML_TYPE_COUNT; GGML_UNUSED(src2t);
+
+                        float scale;
+                        float max_bias;
+
+                        memcpy(&scale,    ((int32_t *) dst->op_params) + 0, sizeof(scale));
+                        memcpy(&max_bias, ((int32_t *) dst->op_params) + 1, sizeof(max_bias));
+
+                        const uint32_t n_head      = src0->ne[2];
+                        const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head));
+
+                        const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
+                        const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
+
+                        id<MTLComputePipelineState> pipeline = nil;
+
+                        bool use_vec_kernel = false;
+
+                        if (ne01 >= 4 || (ne00%128 != 0)) {
+                            switch (ne00) {
+                                case 64:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H64 ].pipeline; break;
+                                case 80:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H80 ].pipeline; break;
+                                case 96:  pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H96 ].pipeline; break;
+                                case 112: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H112].pipeline; break;
+                                case 128: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H128].pipeline; break;
+                              //case 256: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_F16_H256].pipeline; break;
+                                default:
+                                          {
+                                              GGML_METAL_LOG_ERROR("unsupported size: %lld\n", ne00);
+                                              GGML_METAL_LOG_ERROR("add template specialization for this size\n");
+                                              GGML_ASSERT(false && "add template specialization for this size");
+                                          }
+                            }
+                        } else {
+                            use_vec_kernel = true;
+
+                            switch (ne00) {
+                                case 128: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H128].pipeline; break;
+                              //case 256: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_FLASH_ATTN_EXT_VEC_F16_H256].pipeline; break;
+                                default:
+                                          {
+                                              GGML_METAL_LOG_ERROR("unsupported size: %lld\n", ne00);
+                                              GGML_METAL_LOG_ERROR("add template specialization for this size\n");
+                                              GGML_ASSERT(false && "add template specialization for this size");
+                                          }
+                            }
+                        }
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0     offset:offs_src0           atIndex:0];
+                        [encoder setBuffer:id_src1     offset:offs_src1           atIndex:1];
+                        [encoder setBuffer:id_src2     offset:offs_src2           atIndex:2];
+                        if (id_src3) {
+                            [encoder setBuffer:id_src3     offset:offs_src3           atIndex:3];
+                        } else {
+                            [encoder setBuffer:id_src0     offset:offs_src0           atIndex:3];
+                        }
+                        [encoder setBuffer:id_dst      offset:offs_dst            atIndex:4];
+                        [encoder setBytes:&ne01        length:sizeof( int64_t)    atIndex:5];
+                        [encoder setBytes:&ne02        length:sizeof( int64_t)    atIndex:6];
+                        [encoder setBytes:&ne03        length:sizeof( int64_t)    atIndex:7];
+                        [encoder setBytes:&nb01        length:sizeof(uint64_t)    atIndex:8];
+                        [encoder setBytes:&nb02        length:sizeof(uint64_t)    atIndex:9];
+                        [encoder setBytes:&nb03        length:sizeof(uint64_t)    atIndex:10];
+                        [encoder setBytes:&ne11        length:sizeof( int64_t)    atIndex:11];
+                        [encoder setBytes:&ne12        length:sizeof( int64_t)    atIndex:12];
+                        [encoder setBytes:&ne13        length:sizeof( int64_t)    atIndex:13];
+                        [encoder setBytes:&nb11        length:sizeof(uint64_t)    atIndex:14];
+                        [encoder setBytes:&nb12        length:sizeof(uint64_t)    atIndex:15];
+                        [encoder setBytes:&nb13        length:sizeof(uint64_t)    atIndex:16];
+                        [encoder setBytes:&nb21        length:sizeof(uint64_t)    atIndex:17];
+                        [encoder setBytes:&nb22        length:sizeof(uint64_t)    atIndex:18];
+                        [encoder setBytes:&nb23        length:sizeof(uint64_t)    atIndex:19];
+                        [encoder setBytes:&nb31        length:sizeof(uint64_t)    atIndex:20];
+                        [encoder setBytes:&ne1         length:sizeof( int64_t)    atIndex:21];
+                        [encoder setBytes:&ne2         length:sizeof( int64_t)    atIndex:22];
+                        [encoder setBytes:&scale       length:sizeof(   float)    atIndex:23];
+                        [encoder setBytes:&max_bias    length:sizeof(   float)    atIndex:24];
+                        [encoder setBytes:&m0          length:sizeof(m0)          atIndex:25];
+                        [encoder setBytes:&m1          length:sizeof(m1)          atIndex:26];
+                        [encoder setBytes:&n_head_log2 length:sizeof(n_head_log2) atIndex:27];
+
+                        if (!use_vec_kernel) {
+                            // half8x8 kernel
+                            const int64_t nqptg = 8;  // queries per threadgroup    !! sync with kernel template arguments !!
+                            const int64_t ncpsg = 32; // cache values per simdgroup !! sync with kernel template arguments !!
+
+                            GGML_ASSERT(nqptg <= 32);
+                            GGML_ASSERT(nqptg  % 8  == 0);
+                            GGML_ASSERT(ncpsg  % 32 == 0);
+
+                            int64_t nsgmax = 2;
+
+                            while (true) {
+                                const size_t smem = nqptg*(ne00 + 2*nsgmax*(ncpsg + nqptg))*(sizeof(float)/2);
+                                if (smem > ctx->device.maxThreadgroupMemoryLength) {
+                                    break;
+                                }
+                                nsgmax *= 2;
+                            }
+                            nsgmax /= 2;
+
+                            // simdgroups per threadgroup (a.k.a. warps)
+                            const int64_t nsg = ne01 <= nqptg ? MAX(4, MIN(nsgmax, MIN(ne11/ncpsg, (int64_t) pipeline.maxTotalThreadsPerThreadgroup/32))) : 4;
+
+                            const size_t smem = nqptg*(ne00 + 2*nsg*(ncpsg + nqptg))*(sizeof(float)/2);
+
+                            //printf("smem: %zu, max: %zu\n", smem, ctx->device.maxThreadgroupMemoryLength);
+                            GGML_ASSERT(smem <= ctx->device.maxThreadgroupMemoryLength);
+
+                            [encoder setThreadgroupMemoryLength:GGML_PAD(smem, 16) atIndex:0];
+
+                            [encoder dispatchThreadgroups:MTLSizeMake((ne01 + nqptg - 1)/nqptg, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(32, nsg, 1)];
+                        } else {
+                            // half1x4 kernel
+                            const int64_t nqptg = 1;  // queries per threadgroup    !! sync with kernel template arguments !!
+                            const int64_t ncpsg = 32; // cache values per simdgroup !! sync with kernel template arguments !!
+
+                            GGML_ASSERT(nqptg <= 32);
+                            GGML_ASSERT(nqptg  % 1  == 0);
+                            GGML_ASSERT(ncpsg  % 32 == 0);
+
+                            // simdgroups per threadgroup (a.k.a. warps)
+                            const int64_t nsgt = MAX(2, MIN(ne11/ncpsg, (int64_t) pipeline.maxTotalThreadsPerThreadgroup/32));
+
+                            int64_t nsg = 1;
+                            while (nsg <= nsgt) {
+                                nsg *= 2;
+                            }
+                            nsg /= 2;
+
+                            const size_t smem = (nqptg*(ne00 + 2*nsg*(ncpsg + nqptg)) + nsg*ne00)*(sizeof(float)/2);
+
+                            //printf("smem: %zu, max: %zu\n", smem, ctx->device.maxThreadgroupMemoryLength);
+                            GGML_ASSERT(smem <= ctx->device.maxThreadgroupMemoryLength);
+                            [encoder setThreadgroupMemoryLength:GGML_PAD(smem, 16) atIndex:0];
+
+                            [encoder dispatchThreadgroups:MTLSizeMake((ne01 + nqptg - 1)/nqptg, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(32, nsg, 1)];
+                        }
+                    } break;
+                case GGML_OP_DUP:
+                case GGML_OP_CPY:
+                case GGML_OP_CONT:
+                    {
+                        GGML_ASSERT(ne00 % ggml_blck_size(src0->type) == 0);
+
+                        int nth = MIN(1024, ne00/ggml_blck_size(src0->type));
+
+                        id<MTLComputePipelineState> pipeline = nil;
+
+                        switch (src0t) {
+                            case GGML_TYPE_F32:
+                                {
+                                    GGML_ASSERT(ne0 % ggml_blck_size(dst->type) == 0);
+
+                                    switch (dstt) {
+                                        case GGML_TYPE_F16:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_F16].pipeline;  break;
+                                        case GGML_TYPE_F32:    pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_F32].pipeline;  break;
+                                        case GGML_TYPE_Q8_0:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q8_0].pipeline; break;
+                                        case GGML_TYPE_Q4_0:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_0].pipeline; break;
+                                        case GGML_TYPE_Q4_1:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q4_1].pipeline; break;
+                                        case GGML_TYPE_Q5_0:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_0].pipeline; break;
+                                        case GGML_TYPE_Q5_1:   pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_Q5_1].pipeline; break;
+                                        case GGML_TYPE_IQ4_NL: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F32_IQ4_NL].pipeline; break;
+                                        default: GGML_ASSERT(false && "not implemented");
+                                    };
+                                } break;
+                            case GGML_TYPE_F16:
+                                {
+                                    switch (dstt) {
+                                        case GGML_TYPE_F16: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F16_F16].pipeline; break;
+                                        case GGML_TYPE_F32: pipeline = ctx->kernels[GGML_METAL_KERNEL_TYPE_CPY_F16_F32].pipeline; break;
+                                        default: GGML_ASSERT(false && "not implemented");
+                                    };
+                                } break;
+                            default: GGML_ASSERT(false && "not implemented");
+                        }
+
+                        [encoder setComputePipelineState:pipeline];
+                        [encoder setBuffer:id_src0 offset:offs_src0        atIndex:0];
+                        [encoder setBuffer:id_dst  offset:offs_dst         atIndex:1];
+                        [encoder setBytes:&ne00    length:sizeof( int64_t) atIndex:2];
+                        [encoder setBytes:&ne01    length:sizeof( int64_t) atIndex:3];
+                        [encoder setBytes:&ne02    length:sizeof( int64_t) atIndex:4];
+                        [encoder setBytes:&ne03    length:sizeof( int64_t) atIndex:5];
+                        [encoder setBytes:&nb00    length:sizeof(uint64_t) atIndex:6];
+                        [encoder setBytes:&nb01    length:sizeof(uint64_t) atIndex:7];
+                        [encoder setBytes:&nb02    length:sizeof(uint64_t) atIndex:8];
+                        [encoder setBytes:&nb03    length:sizeof(uint64_t) atIndex:9];
+                        [encoder setBytes:&ne0     length:sizeof( int64_t) atIndex:10];
+                        [encoder setBytes:&ne1     length:sizeof( int64_t) atIndex:11];
+                        [encoder setBytes:&ne2     length:sizeof( int64_t) atIndex:12];
+                        [encoder setBytes:&ne3     length:sizeof( int64_t) atIndex:13];
+                        [encoder setBytes:&nb0     length:sizeof(uint64_t) atIndex:14];
+                        [encoder setBytes:&nb1     length:sizeof(uint64_t) atIndex:15];
+                        [encoder setBytes:&nb2     length:sizeof(uint64_t) atIndex:16];
+                        [encoder setBytes:&nb3     length:sizeof(uint64_t) atIndex:17];
+
+                        [encoder dispatchThreadgroups:MTLSizeMake(ne01, ne02, ne03) threadsPerThreadgroup:MTLSizeMake(nth, 1, 1)];
+                    } break;
+                default:
+                    {
+                        GGML_METAL_LOG_ERROR("%s: error: node %3d, op = %8s not implemented\n", __func__, i, ggml_op_name(dst->op));
+                        GGML_ASSERT(false);
+                    }
+            }
+
+            if (should_capture) {
+                [encoder popDebugGroup];
+            }
+        }
+
+        [encoder endEncoding];
+
+        [command_buffer commit];
+    });
+
+    // Wait for completion and check status of each command buffer
+    // needed to detect if the device ran out-of-memory for example (#1881)
+
+    for (int i = 0; i < n_cb; ++i) {
+        id<MTLCommandBuffer> command_buffer = command_buffers[i];
+        [command_buffer waitUntilCompleted];
+
+        MTLCommandBufferStatus status = [command_buffer status];
+        if (status != MTLCommandBufferStatusCompleted) {
+            GGML_METAL_LOG_INFO("%s: command buffer %d failed with status %lu\n", __func__, i, status);
+            if (status == MTLCommandBufferStatusError) {
+                NSString * error_code = [command_buffer error].localizedDescription;
+                GGML_METAL_LOG_INFO("error: %s\n", [error_code UTF8String]);
+            }
+
+            return GGML_STATUS_FAILED;
+        }
+    }
+
+    if (should_capture) {
+        [[MTLCaptureManager sharedCaptureManager] stopCapture];
+    }
+
+    }
+    return GGML_STATUS_SUCCESS;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+// backend interface
+
+// default buffer
+static id<MTLDevice> g_backend_device = nil;
+static int g_backend_device_ref_count = 0;
+
+static id<MTLDevice> ggml_backend_metal_get_device(void) {
+    if (g_backend_device == nil) {
+        g_backend_device = MTLCreateSystemDefaultDevice();
+    }
+
+    g_backend_device_ref_count++;
+
+    return g_backend_device;
+}
+
+static void ggml_backend_metal_free_device(void) {
+    assert(g_backend_device_ref_count > 0);
+
+    g_backend_device_ref_count--;
+
+    if (g_backend_device_ref_count == 0) {
+        [g_backend_device release];
+        g_backend_device = nil;
+    }
+}
+
+GGML_CALL static const char * ggml_backend_metal_buffer_get_name(ggml_backend_buffer_t buffer) {
+    return "Metal";
+
+    UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_metal_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    struct ggml_backend_metal_buffer_context * ctx = (struct ggml_backend_metal_buffer_context *)buffer->context;
+
+    for (int i = 0; i < ctx->n_buffers; i++) {
+        [ctx->buffers[i].metal release];
+    }
+    ggml_backend_metal_free_device();
+
+    if (ctx->owned) {
+#if TARGET_OS_OSX
+        vm_deallocate((vm_map_t)mach_task_self(), (vm_address_t)ctx->all_data, ctx->all_size);
+#else
+        free(ctx->all_data);
+#endif
+    }
+
+    free(ctx);
+}
+
+GGML_CALL static void * ggml_backend_metal_buffer_get_base(ggml_backend_buffer_t buffer) {
+    struct ggml_backend_metal_buffer_context * ctx = (struct ggml_backend_metal_buffer_context *)buffer->context;
+
+    return ctx->all_data;
+}
+
+GGML_CALL static void ggml_backend_metal_buffer_set_tensor(ggml_backend_buffer_t buffer, struct ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    memcpy((char *)tensor->data + offset, data, size);
+
+    UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_metal_buffer_get_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    memcpy(data, (const char *)tensor->data + offset, size);
+
+    UNUSED(buffer);
+}
+
+GGML_CALL static bool ggml_backend_metal_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const struct ggml_tensor * src, struct ggml_tensor * dst) {
+    if (ggml_backend_buffer_is_host(src->buffer)) {
+        memcpy(dst->data, src->data, ggml_nbytes(src));
+        return true;
+    }
+    return false;
+
+    UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_metal_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
+    struct ggml_backend_metal_buffer_context * ctx = (struct ggml_backend_metal_buffer_context *)buffer->context;
+
+    memset(ctx->all_data, value, ctx->all_size);
+}
+
+static struct ggml_backend_buffer_i ggml_backend_metal_buffer_i = {
+    /* .get_name        = */ ggml_backend_metal_buffer_get_name,
+    /* .free_buffer     = */ ggml_backend_metal_buffer_free_buffer,
+    /* .get_base        = */ ggml_backend_metal_buffer_get_base,
+    /* .init_tensor     = */ NULL,
+    /* .set_tensor      = */ ggml_backend_metal_buffer_set_tensor,
+    /* .get_tensor      = */ ggml_backend_metal_buffer_get_tensor,
+    /* .cpy_tensor      = */ ggml_backend_metal_buffer_cpy_tensor,
+    /* .clear           = */ ggml_backend_metal_buffer_clear,
+    /* .reset           = */ NULL,
+};
+
+// default buffer type
+
+GGML_CALL static const char * ggml_backend_metal_buffer_type_get_name(ggml_backend_buffer_type_t buft) {
+    return "Metal";
+
+    UNUSED(buft);
+}
+
+static void ggml_backend_metal_log_allocated_size(id<MTLDevice> device, size_t size_aligned) {
+#ifndef GGML_METAL_NDEBUG
+#if TARGET_OS_OSX || (TARGET_OS_IOS && __clang_major__ >= 15)
+    if (@available(macOS 10.12, iOS 16.0, *)) {
+        GGML_METAL_LOG_INFO("%s: allocated buffer, size = %8.2f MiB, (%8.2f / %8.2f)",
+                __func__,
+                size_aligned / 1024.0 / 1024.0,
+                device.currentAllocatedSize / 1024.0 / 1024.0,
+                device.recommendedMaxWorkingSetSize / 1024.0 / 1024.0);
+
+        if (device.currentAllocatedSize > device.recommendedMaxWorkingSetSize) {
+            GGML_METAL_LOG_WARN("%s: warning: current allocated size is greater than the recommended max working set size\n", __func__);
+        } else {
+            GGML_METAL_LOG_INFO("\n");
+        }
+    } else {
+        GGML_METAL_LOG_INFO("%s: allocated buffer, size = %8.2f MiB, (%8.2f)\n",
+                __func__,
+                size_aligned / 1024.0 / 1024.0,
+                device.currentAllocatedSize / 1024.0 / 1024.0);
+    }
+#endif
+#endif
+    UNUSED(device);
+    UNUSED(size_aligned);
+}
+
+GGML_CALL static ggml_backend_buffer_t ggml_backend_metal_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    struct ggml_backend_metal_buffer_context * ctx = malloc(sizeof(struct ggml_backend_metal_buffer_context));
+
+    const size_t size_page = sysconf(_SC_PAGESIZE);
+
+    size_t size_aligned = size;
+    if ((size_aligned % size_page) != 0) {
+        size_aligned += (size_page - (size_aligned % size_page));
+    }
+
+    id<MTLDevice> device = ggml_backend_metal_get_device();
+
+    ctx->all_data = ggml_metal_host_malloc(size_aligned);
+    ctx->all_size = size_aligned;
+    ctx->owned = true;
+    ctx->n_buffers = 1;
+
+    if (ctx->all_data != NULL) {
+        ctx->buffers[0].data = ctx->all_data;
+        ctx->buffers[0].size = size;
+        ctx->buffers[0].metal = [device newBufferWithBytesNoCopy:ctx->all_data
+                        length:size_aligned
+                        options:MTLResourceStorageModeShared
+                        deallocator:nil];
+    }
+
+    if (ctx->all_data == NULL || ctx->buffers[0].metal == nil) {
+        GGML_METAL_LOG_ERROR("%s: error: failed to allocate buffer, size = %8.2f MiB\n", __func__, size_aligned / 1024.0 / 1024.0);
+        free(ctx);
+        ggml_backend_metal_free_device();
+        return NULL;
+    }
+
+    //ggml_backend_metal_log_allocated_size(device, size_aligned);
+
+    return ggml_backend_buffer_init(buft, ggml_backend_metal_buffer_i, ctx, size);
+}
+
+GGML_CALL static size_t ggml_backend_metal_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
+    return 32;
+    UNUSED(buft);
+}
+
+GGML_CALL static size_t ggml_backend_metal_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) {
+    id<MTLDevice> device = ggml_backend_metal_get_device();
+    size_t max_size = device.maxBufferLength;
+    ggml_backend_metal_free_device();
+
+    return max_size;
+
+    UNUSED(buft);
+}
+
+GGML_CALL static bool ggml_backend_metal_buffer_type_is_host(ggml_backend_buffer_type_t buft) {
+    return true;
+
+    UNUSED(buft);
+}
+
+GGML_CALL ggml_backend_buffer_type_t ggml_backend_metal_buffer_type(void) {
+    static struct ggml_backend_buffer_type ggml_backend_buffer_type_metal = {
+        /* .iface = */ {
+            /* .get_name         = */ ggml_backend_metal_buffer_type_get_name,
+            /* .alloc_buffer     = */ ggml_backend_metal_buffer_type_alloc_buffer,
+            /* .get_alignment    = */ ggml_backend_metal_buffer_type_get_alignment,
+            /* .get_max_size     = */ ggml_backend_metal_buffer_type_get_max_size,
+            /* .get_alloc_size   = */ NULL, // defaults to ggml_nbytes
+            /* .is_host          = */ ggml_backend_metal_buffer_type_is_host,
+        },
+        /* .context = */ NULL,
+    };
+
+    return &ggml_backend_buffer_type_metal;
+}
+
+// buffer from ptr
+
+GGML_CALL ggml_backend_buffer_t ggml_backend_metal_buffer_from_ptr(void * data, size_t size, size_t max_size) {
+    struct ggml_backend_metal_buffer_context * ctx = malloc(sizeof(struct ggml_backend_metal_buffer_context));
+
+    ctx->all_data = data;
+    ctx->all_size = size;
+    ctx->owned = false;
+    ctx->n_buffers = 0;
+
+    const size_t size_page = sysconf(_SC_PAGESIZE);
+
+    // page-align the data ptr
+    {
+        const uintptr_t offs = (uintptr_t) data % size_page;
+        data  = (void *) ((char *) data - offs);
+        size += offs;
+    }
+
+    size_t size_aligned = size;
+    if ((size_aligned % size_page) != 0) {
+        size_aligned += (size_page - (size_aligned % size_page));
+    }
+
+    id<MTLDevice> device = ggml_backend_metal_get_device();
+
+    // the buffer fits into the max buffer size allowed by the device
+    if (size_aligned <= device.maxBufferLength) {
+        ctx->buffers[ctx->n_buffers].data = data;
+        ctx->buffers[ctx->n_buffers].size = size;
+
+        ctx->buffers[ctx->n_buffers].metal = [device newBufferWithBytesNoCopy:data length:size_aligned options:MTLResourceStorageModeShared deallocator:nil];
+
+        if (ctx->buffers[ctx->n_buffers].metal == nil) {
+            GGML_METAL_LOG_ERROR("%s: error: failed to allocate buffer, size = %8.2f MiB\n", __func__, size_aligned / 1024.0 / 1024.0);
+            return false;
+        }
+
+        ggml_backend_metal_log_allocated_size(device, size_aligned);
+
+        ++ctx->n_buffers;
+    } else {
+        // this overlap between the views will guarantee that the tensor with the maximum size will fully fit into
+        // one of the views
+        const size_t size_ovlp = ((max_size + size_page - 1) / size_page + 1) * size_page; // round-up 2 pages just in case
+        const size_t size_step = device.maxBufferLength - size_ovlp;
+        const size_t size_view = device.maxBufferLength;
+
+        for (size_t i = 0; i < size; i += size_step) {
+            const size_t size_step_aligned = (i + size_view <= size) ? size_view : (size_aligned - i);
+
+            ctx->buffers[ctx->n_buffers].data = (void *) ((uint8_t *) data + i);
+            ctx->buffers[ctx->n_buffers].size = size_step_aligned;
+
+            ctx->buffers[ctx->n_buffers].metal = [device newBufferWithBytesNoCopy:(void *) ((uint8_t *) data + i) length:size_step_aligned options:MTLResourceStorageModeShared deallocator:nil];
+
+            if (ctx->buffers[ctx->n_buffers].metal == nil) {
+                GGML_METAL_LOG_ERROR("%s: error: failed to allocate buffer, size = %8.2f MiB\n", __func__, size_step_aligned / 1024.0 / 1024.0);
+                return false;
+            }
+
+            ggml_backend_metal_log_allocated_size(device, size_step_aligned);
+
+            if (i + size_step < size) {
+                GGML_METAL_LOG_INFO("\n");
+            }
+
+            ++ctx->n_buffers;
+        }
+    }
+
+    return ggml_backend_buffer_init(ggml_backend_metal_buffer_type(), ggml_backend_metal_buffer_i, ctx, size);
+}
+
+// backend
+
+GGML_CALL static const char * ggml_backend_metal_name(ggml_backend_t backend) {
+    return "Metal";
+
+    UNUSED(backend);
+}
+
+GGML_CALL static void ggml_backend_metal_free(ggml_backend_t backend) {
+    struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context;
+    ggml_metal_free(ctx);
+    free(backend);
+}
+
+GGML_CALL static ggml_backend_buffer_type_t ggml_backend_metal_get_default_buffer_type(ggml_backend_t backend) {
+    return ggml_backend_metal_buffer_type();
+
+    UNUSED(backend);
+}
+
+GGML_CALL static enum ggml_status ggml_backend_metal_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) {
+    struct ggml_metal_context * metal_ctx = (struct ggml_metal_context *)backend->context;
+
+    return ggml_metal_graph_compute(metal_ctx, cgraph);
+}
+
+GGML_CALL static bool ggml_backend_metal_supports_op(ggml_backend_t backend, const struct ggml_tensor * op) {
+    struct ggml_metal_context * metal_ctx = (struct ggml_metal_context *)backend->context;
+
+    return ggml_metal_supports_op(metal_ctx, op);
+}
+
+GGML_CALL static bool ggml_backend_metal_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
+    return buft->iface.get_name == ggml_backend_metal_buffer_type_get_name;
+
+    UNUSED(backend);
+}
+
+static struct ggml_backend_i ggml_backend_metal_i = {
+    /* .get_name                = */ ggml_backend_metal_name,
+    /* .free                    = */ ggml_backend_metal_free,
+    /* .get_default_buffer_type = */ ggml_backend_metal_get_default_buffer_type,
+    /* .set_tensor_async        = */ NULL,
+    /* .get_tensor_async        = */ NULL,
+    /* .cpy_tensor_async        = */ NULL,
+    /* .synchronize             = */ NULL,
+    /* .graph_plan_create       = */ NULL,
+    /* .graph_plan_free         = */ NULL,
+    /* .graph_plan_update       = */ NULL,
+    /* .graph_plan_compute      = */ NULL,
+    /* .graph_compute           = */ ggml_backend_metal_graph_compute,
+    /* .supports_op             = */ ggml_backend_metal_supports_op,
+    /* .supports_buft           = */ ggml_backend_metal_supports_buft,
+    /* .offload_op              = */ NULL,
+    /* .event_new               = */ NULL,
+    /* .event_free              = */ NULL,
+    /* .event_record            = */ NULL,
+    /* .event_wait              = */ NULL,
+    /* .event_synchronize       = */ NULL,
+};
+
+void ggml_backend_metal_log_set_callback(ggml_log_callback log_callback, void * user_data) {
+    ggml_metal_log_callback  = log_callback;
+    ggml_metal_log_user_data = user_data;
+}
+
+static ggml_guid_t ggml_backend_metal_guid(void) {
+    static ggml_guid guid = { 0x81, 0xa1, 0x8b, 0x1e, 0x71, 0xec, 0x79, 0xed, 0x2b, 0x85, 0xdc, 0x8a, 0x61, 0x98, 0x30, 0xe6 };
+    return &guid;
+}
+
+ggml_backend_t ggml_backend_metal_init(void) {
+    struct ggml_metal_context * ctx = ggml_metal_init(GGML_DEFAULT_N_THREADS);
+
+    if (ctx == NULL) {
+        return NULL;
+    }
+
+    ggml_backend_t metal_backend = malloc(sizeof(struct ggml_backend));
+
+    *metal_backend = (struct ggml_backend) {
+        /* .guid      = */ ggml_backend_metal_guid(),
+        /* .interface = */ ggml_backend_metal_i,
+        /* .context   = */ ctx,
+    };
+
+    return metal_backend;
+}
+
+bool ggml_backend_is_metal(ggml_backend_t backend) {
+    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_metal_guid());
+}
+
+void ggml_backend_metal_set_n_cb(ggml_backend_t backend, int n_cb) {
+    GGML_ASSERT(ggml_backend_is_metal(backend));
+
+    struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context;
+
+    ctx->n_cb = MIN(n_cb, GGML_METAL_MAX_BUFFERS);
+}
+
+bool ggml_backend_metal_supports_family(ggml_backend_t backend, int family) {
+    GGML_ASSERT(ggml_backend_is_metal(backend));
+
+    struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context;
+
+    return [ctx->device supportsFamily:(MTLGPUFamilyApple1 + family - 1)];
+}
+
+void ggml_backend_metal_capture_next_compute(ggml_backend_t backend) {
+    GGML_ASSERT(ggml_backend_is_metal(backend));
+
+    struct ggml_metal_context * ctx = (struct ggml_metal_context *)backend->context;
+    ctx->should_capture_next_compute = true;
+}
+
+GGML_CALL ggml_backend_t ggml_backend_reg_metal_init(const char * params, void * user_data); // silence warning
+
+GGML_CALL ggml_backend_t ggml_backend_reg_metal_init(const char * params, void * user_data) {
+    return ggml_backend_metal_init();
+
+    GGML_UNUSED(params);
+    GGML_UNUSED(user_data);
+}
diff --git a/ggml/src/ggml-metal.metal b/ggml/src/ggml-metal.metal
new file mode 100644 (file)
index 0000000..e2796fd
--- /dev/null
@@ -0,0 +1,6540 @@
+#define GGML_COMMON_DECL_METAL
+#define GGML_COMMON_IMPL_METAL
+#include "ggml-common.h"
+
+#include <metal_stdlib>
+
+using namespace metal;
+
+#define MAX(x, y) ((x) > (y) ? (x) : (y))
+#define MIN(x, y) ((x) < (y) ? (x) : (y))
+#define SWAP(x, y) { auto tmp = (x); (x) = (y); (y) = tmp; }
+
+#define N_SIMDWIDTH 32 // assuming SIMD group size is 32
+
+enum ggml_sort_order {
+    GGML_SORT_ORDER_ASC,
+    GGML_SORT_ORDER_DESC,
+};
+
+// general-purpose kernel for addition, multiplication and division of two tensors
+// pros: works for non-contiguous tensors, supports broadcast across all dims
+// cons: not very efficient
+kernel void kernel_add(
+        device const char * src0,
+        device const char * src1,
+        device       char * dst,
+        constant  int64_t & ne00,
+        constant  int64_t & ne01,
+        constant  int64_t & ne02,
+        constant  int64_t & ne03,
+        constant uint64_t & nb00,
+        constant uint64_t & nb01,
+        constant uint64_t & nb02,
+        constant uint64_t & nb03,
+        constant  int64_t & ne10,
+        constant  int64_t & ne11,
+        constant  int64_t & ne12,
+        constant  int64_t & ne13,
+        constant uint64_t & nb10,
+        constant uint64_t & nb11,
+        constant uint64_t & nb12,
+        constant uint64_t & nb13,
+        constant  int64_t & ne0,
+        constant  int64_t & ne1,
+        constant  int64_t & ne2,
+        constant  int64_t & ne3,
+        constant uint64_t & nb0,
+        constant uint64_t & nb1,
+        constant uint64_t & nb2,
+        constant uint64_t & nb3,
+        constant  int64_t & offs,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig.z;
+    const int64_t i02 = tgpig.y;
+    const int64_t i01 = tgpig.x;
+
+    const int64_t i13 = i03 % ne13;
+    const int64_t i12 = i02 % ne12;
+    const int64_t i11 = i01 % ne11;
+
+    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01 + offs;
+    device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11;
+    device       char * dst_ptr  = dst  + i03*nb3  + i02*nb2  + i01*nb1  + offs;
+
+    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
+        const int i10 = i0 % ne10;
+        *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) + *((device float *)(src1_ptr + i10*nb10));
+    }
+}
+
+kernel void kernel_mul(
+        device const char * src0,
+        device const char * src1,
+        device       char * dst,
+        constant  int64_t & ne00,
+        constant  int64_t & ne01,
+        constant  int64_t & ne02,
+        constant  int64_t & ne03,
+        constant uint64_t & nb00,
+        constant uint64_t & nb01,
+        constant uint64_t & nb02,
+        constant uint64_t & nb03,
+        constant  int64_t & ne10,
+        constant  int64_t & ne11,
+        constant  int64_t & ne12,
+        constant  int64_t & ne13,
+        constant uint64_t & nb10,
+        constant uint64_t & nb11,
+        constant uint64_t & nb12,
+        constant uint64_t & nb13,
+        constant  int64_t & ne0,
+        constant  int64_t & ne1,
+        constant  int64_t & ne2,
+        constant  int64_t & ne3,
+        constant uint64_t & nb0,
+        constant uint64_t & nb1,
+        constant uint64_t & nb2,
+        constant uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig.z;
+    const int64_t i02 = tgpig.y;
+    const int64_t i01 = tgpig.x;
+
+    const int64_t i13 = i03 % ne13;
+    const int64_t i12 = i02 % ne12;
+    const int64_t i11 = i01 % ne11;
+
+    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01;
+    device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11;
+    device       char * dst_ptr  = dst  + i03*nb3  + i02*nb2  + i01*nb1;
+
+    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
+        const int i10 = i0 % ne10;
+        *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) * *((device float *)(src1_ptr + i10*nb10));
+    }
+}
+
+kernel void kernel_div(
+        device const char * src0,
+        device const char * src1,
+        device       char * dst,
+        constant  int64_t & ne00,
+        constant  int64_t & ne01,
+        constant  int64_t & ne02,
+        constant  int64_t & ne03,
+        constant uint64_t & nb00,
+        constant uint64_t & nb01,
+        constant uint64_t & nb02,
+        constant uint64_t & nb03,
+        constant  int64_t & ne10,
+        constant  int64_t & ne11,
+        constant  int64_t & ne12,
+        constant  int64_t & ne13,
+        constant uint64_t & nb10,
+        constant uint64_t & nb11,
+        constant uint64_t & nb12,
+        constant uint64_t & nb13,
+        constant  int64_t & ne0,
+        constant  int64_t & ne1,
+        constant  int64_t & ne2,
+        constant  int64_t & ne3,
+        constant uint64_t & nb0,
+        constant uint64_t & nb1,
+        constant uint64_t & nb2,
+        constant uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig.z;
+    const int64_t i02 = tgpig.y;
+    const int64_t i01 = tgpig.x;
+
+    const int64_t i13 = i03 % ne13;
+    const int64_t i12 = i02 % ne12;
+    const int64_t i11 = i01 % ne11;
+
+    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01;
+    device const char * src1_ptr = src1 + i13*nb13 + i12*nb12 + i11*nb11;
+    device       char * dst_ptr  = dst  + i03*nb3  + i02*nb2  + i01*nb1;
+
+    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
+        const int i10 = i0 % ne10;
+        *((device float *)(dst_ptr + i0*nb0)) = *((device float *)(src0_ptr + i0*nb00)) / *((device float *)(src1_ptr + i10*nb10));
+    }
+}
+
+template<typename T>
+kernel void kernel_repeat(
+        device const char * src0,
+        device       char * dst,
+        constant  int64_t & ne00,
+        constant  int64_t & ne01,
+        constant  int64_t & ne02,
+        constant  int64_t & ne03,
+        constant uint64_t & nb00,
+        constant uint64_t & nb01,
+        constant uint64_t & nb02,
+        constant uint64_t & nb03,
+        constant  int64_t & ne0,
+        constant  int64_t & ne1,
+        constant  int64_t & ne2,
+        constant  int64_t & ne3,
+        constant uint64_t & nb0,
+        constant uint64_t & nb1,
+        constant uint64_t & nb2,
+        constant uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i3 = tgpig.z;
+    const int64_t i2 = tgpig.y;
+    const int64_t i1 = tgpig.x;
+
+    const int64_t i03 = i3 % ne03;
+    const int64_t i02 = i2 % ne02;
+    const int64_t i01 = i1 % ne01;
+
+    device const char * src0_ptr = src0 + i03*nb03 + i02*nb02 + i01*nb01;
+    device       char * dst_ptr  = dst  +  i3*nb3  +  i2*nb2  +  i1*nb1 ;
+
+    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
+        const int i00 = i0 % ne00;
+        *((device T *)(dst_ptr + i0*nb0)) = *((device T *)(src0_ptr + i00*nb00));
+    }
+}
+
+typedef decltype(kernel_repeat<float>) kernel_repeat_t;
+
+template [[host_name("kernel_repeat_f32")]] kernel kernel_repeat_t kernel_repeat<float>;
+template [[host_name("kernel_repeat_f16")]] kernel kernel_repeat_t kernel_repeat<half>;
+template [[host_name("kernel_repeat_i32")]] kernel kernel_repeat_t kernel_repeat<int>;
+template [[host_name("kernel_repeat_i16")]] kernel kernel_repeat_t kernel_repeat<short>;
+
+// assumption: src1 is a row
+// broadcast src1 into src0
+kernel void kernel_add_row(
+        device const float4 * src0,
+        device const float4 * src1,
+        device       float4 * dst,
+        constant   uint64_t & nb [[buffer(28)]],
+        uint tpig[[thread_position_in_grid]]) {
+    dst[tpig] = src0[tpig] + src1[tpig % nb];
+}
+
+kernel void kernel_mul_row(
+        device const float4 * src0,
+        device const float4 * src1,
+        device       float4 * dst,
+        constant   uint64_t & nb  [[buffer(28)]],
+        uint tpig[[thread_position_in_grid]]) {
+    dst[tpig] = src0[tpig] * src1[tpig % nb];
+}
+
+kernel void kernel_div_row(
+        device const float4 * src0,
+        device const float4 * src1,
+        device       float4 * dst,
+        constant   uint64_t & nb  [[buffer(28)]],
+        uint tpig[[thread_position_in_grid]]) {
+    dst[tpig] = src0[tpig] / src1[tpig % nb];
+}
+
+kernel void kernel_scale(
+        device const float * src0,
+        device       float * dst,
+        constant     float & scale,
+        uint tpig[[thread_position_in_grid]]) {
+    dst[tpig] = src0[tpig] * scale;
+}
+
+kernel void kernel_scale_4(
+        device const float4 * src0,
+        device       float4 * dst,
+        constant     float  & scale,
+        uint tpig[[thread_position_in_grid]]) {
+    dst[tpig] = src0[tpig] * scale;
+}
+
+kernel void kernel_clamp(
+        device const float * src0,
+        device       float * dst,
+        constant     float & min,
+        constant     float & max,
+        uint tpig[[thread_position_in_grid]]) {
+    dst[tpig] = src0[tpig] < min ? min : (src0[tpig] > max ? max : src0[tpig]);
+}
+
+kernel void kernel_relu(
+        device const float * src0,
+        device       float * dst,
+        uint tpig[[thread_position_in_grid]]) {
+    dst[tpig] = max(0.0f, src0[tpig]);
+}
+
+kernel void kernel_sigmoid(
+        device const float * src0,
+        device       float * dst,
+        uint tpig[[thread_position_in_grid]]) {
+    dst[tpig] = 1.0f / (1.0f + exp(-src0[tpig]));
+}
+
+kernel void kernel_tanh(
+        device const float * src0,
+        device       float * dst,
+        uint tpig[[thread_position_in_grid]]) {
+    device const float & x = src0[tpig];
+    dst[tpig] = precise::tanh(x);
+}
+
+constant float GELU_COEF_A     = 0.044715f;
+constant float GELU_QUICK_COEF = -1.702f;
+constant float SQRT_2_OVER_PI  = 0.79788456080286535587989211986876f;
+
+kernel void kernel_gelu(
+    device const float * src0,
+    device       float * dst,
+    uint tpig[[thread_position_in_grid]]) {
+    device const float & x = src0[tpig];
+
+    dst[tpig] = 0.5f*x*(1.0f + precise::tanh(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x)));
+}
+
+kernel void kernel_gelu_4(
+    device const float4 * src0,
+    device       float4 * dst,
+    uint tpig[[thread_position_in_grid]]) {
+    device const float4 & x = src0[tpig];
+
+    // BEWARE !!!
+    // Simply using "tanh" instead of "precise::tanh" will sometimes results in NaNs!
+    // This was observed with Falcon 7B and 40B models
+    //
+    dst[tpig] = 0.5f*x*(1.0f + precise::tanh(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x)));
+}
+
+kernel void kernel_gelu_quick(
+    device const float * src0,
+    device       float * dst,
+    uint tpig[[thread_position_in_grid]]) {
+    device const float & x = src0[tpig];
+
+    dst[tpig] = x*(1.0f/(1.0f+exp(GELU_QUICK_COEF*x)));
+}
+
+kernel void kernel_gelu_quick_4(
+    device const float4 * src0,
+    device       float4 * dst,
+    uint tpig[[thread_position_in_grid]]) {
+    device const float4 & x = src0[tpig];
+
+    dst[tpig] = x*(1.0f/(1.0f+exp(GELU_QUICK_COEF*x)));
+}
+
+kernel void kernel_silu(
+        device const float * src0,
+        device       float * dst,
+        uint tpig[[thread_position_in_grid]]) {
+    device const float & x = src0[tpig];
+    dst[tpig] = x / (1.0f + exp(-x));
+}
+
+kernel void kernel_silu_4(
+        device const float4 * src0,
+        device       float4 * dst,
+        uint tpig[[thread_position_in_grid]]) {
+    device const float4 & x = src0[tpig];
+    dst[tpig] = x / (1.0f + exp(-x));
+}
+
+kernel void kernel_sqr(
+        device const float * src0,
+        device       float * dst,
+        uint tpig[[thread_position_in_grid]]) {
+    dst[tpig] = src0[tpig] * src0[tpig];
+}
+
+kernel void kernel_sum_rows(
+        device const float * src0,
+        device       float * dst,
+        constant  int64_t & ne00,
+        constant  int64_t & ne01,
+        constant  int64_t & ne02,
+        constant  int64_t & ne03,
+        constant uint64_t & nb00,
+        constant uint64_t & nb01,
+        constant uint64_t & nb02,
+        constant uint64_t & nb03,
+        constant  int64_t & ne10,
+        constant  int64_t & ne11,
+        constant  int64_t & ne12,
+        constant  int64_t & ne13,
+        constant uint64_t & nb10,
+        constant uint64_t & nb11,
+        constant uint64_t & nb12,
+        constant uint64_t & nb13,
+        constant  int64_t & ne0,
+        constant  int64_t & ne1,
+        constant  int64_t & ne2,
+        constant  int64_t & ne3,
+        constant uint64_t & nb0,
+        constant uint64_t & nb1,
+        constant uint64_t & nb2,
+        constant uint64_t & nb3,
+        uint3 tpig[[thread_position_in_grid]]) {
+    int64_t i3 = tpig.z;
+    int64_t i2 = tpig.y;
+    int64_t i1 = tpig.x;
+
+    if (i3 >= ne03 || i2 >= ne02 || i1 >= ne01) {
+        return;
+    }
+
+    device const float * src_row = (device const float *) ((device const char *) src0 + i1*nb01 + i2*nb02 + i3*nb03);
+    device       float * dst_row = (device       float *) ((device       char *) dst  + i1*nb1  + i2*nb2  + i3*nb3);
+
+    float row_sum = 0;
+
+    for (int64_t i0 = 0; i0 < ne00; i0++) {
+        row_sum += src_row[i0];
+    }
+
+    dst_row[0] = row_sum;
+}
+
+template<typename T>
+kernel void kernel_soft_max(
+        device const  char * src0,
+        device const  char * src1,
+        device        char * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant     float & scale,
+        constant     float & max_bias,
+        constant     float & m0,
+        constant     float & m1,
+        constant  uint32_t & n_head_log2,
+        threadgroup  float * buf [[threadgroup(0)]],
+        uint  tgpig[[threadgroup_position_in_grid]],
+        uint  tpitg[[thread_position_in_threadgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint    ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = (tgpig) / (ne02*ne01);
+    const int64_t i02 = (tgpig - i03*ne02*ne01) / ne01;
+    const int64_t i01 = (tgpig - i03*ne02*ne01 - i02*ne01);
+
+    device const float * psrc0 = (device const float *) src0 + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00);
+    device const     T * pmask = src1 != src0 ? (device const    T *) src1         + i01*ne00 : nullptr;
+    device       float * pdst  = (device       float *) dst  + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00);
+
+    float slope = 1.0f;
+
+    // ALiBi
+    if (max_bias > 0.0f) {
+        const int64_t h = i02;
+
+        const float base = h < n_head_log2 ? m0 : m1;
+        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
+
+        slope = pow(base, exp);
+    }
+
+    // parallel max
+    float lmax = -INFINITY;
+
+    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
+        lmax = MAX(lmax, psrc0[i00]*scale + (pmask ? slope*pmask[i00] : 0.0f));
+    }
+
+    // find the max value in the block
+    float max_val = simd_max(lmax);
+    if (ntg > N_SIMDWIDTH) {
+        if (sgitg == 0) {
+            buf[tiisg] = -INFINITY;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        if (tiisg == 0) {
+            buf[sgitg] = max_val;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        max_val = buf[tiisg];
+        max_val = simd_max(max_val);
+    }
+
+    // parallel sum
+    float lsum = 0.0f;
+    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
+        const float exp_psrc0 = exp((psrc0[i00]*scale + (pmask ? slope*pmask[i00] : 0.0f)) - max_val);
+        lsum += exp_psrc0;
+        pdst[i00] = exp_psrc0;
+    }
+
+    // This barrier fixes a failing test
+    // ref: https://github.com/ggerganov/ggml/pull/621#discussion_r1425156335
+    threadgroup_barrier(mem_flags::mem_none);
+
+    float sum = simd_sum(lsum);
+
+    if (ntg > N_SIMDWIDTH) {
+        if (sgitg == 0) {
+            buf[tiisg] = 0.0f;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        if (tiisg == 0) {
+            buf[sgitg] = sum;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        sum = buf[tiisg];
+        sum = simd_sum(sum);
+    }
+
+    const float inv_sum = 1.0f/sum;
+
+    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
+        pdst[i00] *= inv_sum;
+    }
+}
+
+template<typename T>
+kernel void kernel_soft_max_4(
+        device const  char * src0,
+        device const  char * src1,
+        device        char * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant     float & scale,
+        constant     float & max_bias,
+        constant     float & m0,
+        constant     float & m1,
+        constant  uint32_t & n_head_log2,
+        threadgroup  float * buf [[threadgroup(0)]],
+        uint  tgpig[[threadgroup_position_in_grid]],
+        uint  tpitg[[thread_position_in_threadgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint    ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = (tgpig) / (ne02*ne01);
+    const int64_t i02 = (tgpig - i03*ne02*ne01) / ne01;
+    const int64_t i01 = (tgpig - i03*ne02*ne01 - i02*ne01);
+
+    device const float4 * psrc4 = (device const float4 *) src0 + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00)/4;
+    device const      T * pmask = src1 != src0 ? (device const     T *) src1         + i01*ne00/4 : nullptr;
+    device       float4 * pdst4 = (device       float4 *) dst  + (i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00)/4;
+
+    float slope = 1.0f;
+
+    if (max_bias > 0.0f) {
+        const int64_t h = i02;
+
+        const float base = h < n_head_log2 ? m0 : m1;
+        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
+
+        slope = pow(base, exp);
+    }
+
+    // parallel max
+    float4 lmax4 = -INFINITY;
+
+    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
+        lmax4 = fmax(lmax4, psrc4[i00]*scale + (float4)((pmask ? slope*pmask[i00] : 0.0f)));
+    }
+
+    const float lmax = MAX(MAX(lmax4[0], lmax4[1]), MAX(lmax4[2], lmax4[3]));
+
+    float max_val = simd_max(lmax);
+    if (ntg > N_SIMDWIDTH) {
+        if (sgitg == 0) {
+            buf[tiisg] = -INFINITY;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        if (tiisg == 0) {
+            buf[sgitg] = max_val;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        max_val = buf[tiisg];
+        max_val = simd_max(max_val);
+    }
+
+    // parallel sum
+    float4 lsum4 = 0.0f;
+    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
+        const float4 exp_psrc4 = exp((psrc4[i00]*scale + (float4)((pmask ? slope*pmask[i00] : 0.0f))) - max_val);
+        lsum4 += exp_psrc4;
+        pdst4[i00] = exp_psrc4;
+    }
+
+    const float lsum = lsum4[0] + lsum4[1] + lsum4[2] + lsum4[3];
+
+    // This barrier fixes a failing test
+    // ref: https://github.com/ggerganov/ggml/pull/621#discussion_r1425156335
+    threadgroup_barrier(mem_flags::mem_none);
+
+    float sum = simd_sum(lsum);
+
+    if (ntg > N_SIMDWIDTH) {
+        if (sgitg == 0) {
+            buf[tiisg] = 0.0f;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        if (tiisg == 0) {
+            buf[sgitg] = sum;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        sum = buf[tiisg];
+        sum = simd_sum(sum);
+    }
+
+    const float inv_sum = 1.0f/sum;
+
+    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
+        pdst4[i00] *= inv_sum;
+    }
+}
+
+typedef decltype(kernel_soft_max<float>)    kernel_soft_max_t;
+typedef decltype(kernel_soft_max_4<float4>) kernel_soft_max_4_t;
+
+template [[host_name("kernel_soft_max_f16")]]   kernel kernel_soft_max_t   kernel_soft_max<half>;
+template [[host_name("kernel_soft_max_f32")]]   kernel kernel_soft_max_t   kernel_soft_max<float>;
+template [[host_name("kernel_soft_max_f16_4")]] kernel kernel_soft_max_4_t kernel_soft_max_4<half4>;
+template [[host_name("kernel_soft_max_f32_4")]] kernel kernel_soft_max_4_t kernel_soft_max_4<float4>;
+
+kernel void kernel_diag_mask_inf(
+        device const float * src0,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant       int & n_past,
+        uint3 tpig[[thread_position_in_grid]]) {
+    const int64_t i02 = tpig[2];
+    const int64_t i01 = tpig[1];
+    const int64_t i00 = tpig[0];
+
+    if (i00 > n_past + i01) {
+        dst[i02*ne01*ne00 + i01*ne00 + i00] = -INFINITY;
+    } else {
+        dst[i02*ne01*ne00 + i01*ne00 + i00] = src0[i02*ne01*ne00 + i01*ne00 + i00];
+    }
+}
+
+kernel void kernel_diag_mask_inf_8(
+        device const float4 * src0,
+        device       float4 * dst,
+        constant    int64_t & ne00,
+        constant    int64_t & ne01,
+        constant        int & n_past,
+        uint3 tpig[[thread_position_in_grid]]) {
+
+    const int64_t i = 2*tpig[0];
+
+    dst[i+0] = src0[i+0];
+    dst[i+1] = src0[i+1];
+    int64_t i4 = 4*i;
+    const int64_t i02 = i4/(ne00*ne01); i4 -= i02*ne00*ne01;
+    const int64_t i01 = i4/(ne00);      i4 -= i01*ne00;
+    const int64_t i00 = i4;
+    for (int k = 3; k >= 0; --k) {
+        if (i00 + 4 + k <= n_past + i01) {
+            break;
+        }
+        dst[i+1][k] = -INFINITY;
+        if (i00 + k > n_past + i01) {
+            dst[i][k] = -INFINITY;
+        }
+    }
+}
+
+kernel void kernel_norm(
+        device const  void * src0,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant  uint64_t & nb01,
+        constant     float & eps,
+        threadgroup float  * sum [[threadgroup(0)]],
+        uint tgpig[[threadgroup_position_in_grid]],
+        uint tpitg[[thread_position_in_threadgroup]],
+        uint   ntg[[threads_per_threadgroup]]) {
+    device const float * x = (device const float *) ((device const char *) src0 + tgpig*nb01);
+    // MEAN
+    // parallel sum
+    sum[tpitg] = 0.0f;
+    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
+        sum[tpitg] += x[i00];
+    }
+    // reduce
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+    for (uint i = ntg/2; i > 0; i /= 2) {
+        if (tpitg < i) {
+            sum[tpitg] += sum[tpitg + i];
+        }
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+    }
+    const float mean  = sum[0] / ne00;
+
+    // recenter and VARIANCE
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+    device float * y = dst + tgpig*ne00;
+    sum[tpitg] = 0.0f;
+    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
+        y[i00] = x[i00] - mean;
+        sum[tpitg] += y[i00] * y[i00];
+    }
+
+    // reduce
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+    for (uint i = ntg/2; i > 0; i /= 2) {
+        if (tpitg < i) {
+            sum[tpitg] += sum[tpitg + i];
+        }
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+    }
+    const float variance = sum[0] / ne00;
+
+    const float scale = 1.0f/sqrt(variance + eps);
+    for (int i00 = tpitg; i00 < ne00; i00 += ntg) {
+        y[i00] = y[i00] * scale;
+    }
+}
+
+kernel void kernel_rms_norm(
+        device const  void * src0,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant  uint64_t & nb01,
+        constant     float & eps,
+        threadgroup float  * buf [[threadgroup(0)]],
+        uint tgpig[[threadgroup_position_in_grid]],
+        uint tpitg[[thread_position_in_threadgroup]],
+        uint sgitg[[simdgroup_index_in_threadgroup]],
+        uint tiisg[[thread_index_in_simdgroup]],
+        uint   ntg[[threads_per_threadgroup]]) {
+    device const float4 * x = (device const float4 *) ((device const char *) src0 + tgpig*nb01);
+
+    float4 sumf = 0;
+    float all_sum = 0;
+
+    // parallel sum
+    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
+        sumf += x[i00] * x[i00];
+    }
+    all_sum = sumf[0] + sumf[1] + sumf[2] + sumf[3];
+    all_sum = simd_sum(all_sum);
+    if (ntg > N_SIMDWIDTH) {
+        if (sgitg == 0) {
+            buf[tiisg] = 0.0f;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        if (tiisg == 0) {
+            buf[sgitg] = all_sum;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        all_sum = buf[tiisg];
+        all_sum = simd_sum(all_sum);
+    }
+
+    const float mean  = all_sum/ne00;
+    const float scale = 1.0f/sqrt(mean + eps);
+
+    device float4 * y = (device float4 *) (dst + tgpig*ne00);
+    for (int i00 = tpitg; i00 < ne00/4; i00 += ntg) {
+        y[i00] = x[i00] * scale;
+    }
+}
+
+kernel void kernel_group_norm(
+        device const float * src0,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int32_t & n_groups,
+        constant     float & eps,
+        threadgroup float  * buf [[threadgroup(0)]],
+        uint tgpig[[threadgroup_position_in_grid]],
+        uint tpitg[[thread_position_in_threadgroup]],
+        uint sgitg[[simdgroup_index_in_threadgroup]],
+        uint tiisg[[thread_index_in_simdgroup]],
+        uint   ntg[[threads_per_threadgroup]]) {
+    const int64_t ne = ne00*ne01*ne02;
+    const int64_t gs = ne00*ne01*((ne02 + n_groups - 1) / n_groups);
+
+    int start = tgpig * gs;
+    int end   = start + gs;
+
+    start += tpitg;
+
+    if (end >= ne) {
+        end = ne;
+    }
+
+    float tmp = 0.0f; // partial sum for thread in warp
+
+    for (int j = start; j < end; j += ntg) {
+        tmp += src0[j];
+    }
+
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+    tmp = simd_sum(tmp);
+    if (ntg > N_SIMDWIDTH) {
+        if (sgitg == 0) {
+            buf[tiisg] = 0.0f;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        if (tiisg == 0) {
+            buf[sgitg] = tmp;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        tmp = buf[tiisg];
+        tmp = simd_sum(tmp);
+    }
+
+    const float mean = tmp / gs;
+    tmp = 0.0f;
+
+    for (int j = start; j < end; j += ntg) {
+        float xi = src0[j] - mean;
+        dst[j] = xi;
+        tmp += xi * xi;
+    }
+
+    tmp = simd_sum(tmp);
+    if (ntg > N_SIMDWIDTH) {
+        if (sgitg == 0) {
+            buf[tiisg] = 0.0f;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        if (tiisg == 0) {
+            buf[sgitg] = tmp;
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        tmp = buf[tiisg];
+        tmp = simd_sum(tmp);
+    }
+
+    const float variance = tmp / gs;
+    const float scale = 1.0f/sqrt(variance + eps);
+    for (int j = start; j < end; j += ntg) {
+        dst[j] *= scale;
+    }
+}
+
+// function for calculate inner product between half a q4_0 block and 16 floats (yl), sumy is SUM(yl[i])
+// il indicates where the q4 quants begin (0 or QK4_0/4)
+// we assume that the yl's have been multiplied with the appropriate scale factor
+// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
+inline float block_q_n_dot_y(device const block_q4_0 * qb_curr, float sumy, thread float * yl, int il) {
+    float d = qb_curr->d;
+
+    float2 acc = 0.f;
+
+    device const uint16_t * qs = ((device const uint16_t *)qb_curr + 1 + il/2);
+
+    for (int i = 0; i < 8; i+=2) {
+        acc[0] += yl[i + 0] * (qs[i / 2] & 0x000F)
+                + yl[i + 1] * (qs[i / 2] & 0x0F00);
+        acc[1] += yl[i + 8] * (qs[i / 2] & 0x00F0)
+                + yl[i + 9] * (qs[i / 2] & 0xF000);
+    }
+    return d * (sumy * -8.f + acc[0] + acc[1]);
+}
+
+// function for calculate inner product between half a q4_1 block and 16 floats (yl), sumy is SUM(yl[i])
+// il indicates where the q4 quants begin (0 or QK4_0/4)
+// we assume that the yl's have been multiplied with the appropriate scale factor
+// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
+inline float block_q_n_dot_y(device const block_q4_1 * qb_curr, float sumy, thread float * yl, int il) {
+    float d = qb_curr->d;
+    float m = qb_curr->m;
+
+    float2 acc = 0.f;
+
+    device const uint16_t * qs = ((device const uint16_t *)qb_curr + 2 + il/2);
+
+    for (int i = 0; i < 8; i+=2) {
+        acc[0] += yl[i + 0] * (qs[i / 2] & 0x000F)
+                + yl[i + 1] * (qs[i / 2] & 0x0F00);
+        acc[1] += yl[i + 8] * (qs[i / 2] & 0x00F0)
+                + yl[i + 9] * (qs[i / 2] & 0xF000);
+    }
+    return d * (acc[0] + acc[1]) + sumy * m;
+}
+
+// function for calculate inner product between half a q5_0 block and 16 floats (yl), sumy is SUM(yl[i])
+// il indicates where the q5 quants begin (0 or QK5_0/4)
+// we assume that the yl's have been multiplied with the appropriate scale factor
+// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
+inline float block_q_n_dot_y(device const block_q5_0 * qb_curr, float sumy, thread float * yl, int il) {
+    float d = qb_curr->d;
+
+    float2 acc = 0.f;
+
+    device const uint16_t * qs =  ((device const uint16_t *)qb_curr + 3 + il/2);
+           const uint32_t   qh = *((device const uint32_t *)qb_curr->qh);
+
+    for (int i = 0; i < 8; i+=2) {
+        acc[0] += yl[i + 0] * ((qs[i / 2] & 0x000F) | ((qh >> (i+0+il        ) << 4 ) & 0x00010))
+                + yl[i + 1] * ((qs[i / 2] & 0x0F00) | ((qh >> (i+1+il        ) << 12) & 0x01000));
+        acc[1] += yl[i + 8] * ((qs[i / 2] & 0x00F0) | ((qh >> (i+0+il+QK5_0/2) << 8 ) & 0x00100))
+                + yl[i + 9] * ((qs[i / 2] & 0xF000) | ((qh >> (i+1+il+QK5_0/2) << 16) & 0x10000));
+    }
+    return d * (sumy * -16.f + acc[0] + acc[1]);
+}
+
+// function for calculate inner product between half a q5_1 block and 16 floats (yl), sumy is SUM(yl[i])
+// il indicates where the q5 quants begin (0 or QK5_1/4)
+// we assume that the yl's have been multiplied with the appropriate scale factor
+// that corresponds to the missing bit shifts (1, 1/16, 1/256, 1/4096)
+inline float block_q_n_dot_y(device const block_q5_1 * qb_curr, float sumy, thread float * yl, int il) {
+    float d = qb_curr->d;
+    float m = qb_curr->m;
+
+    float2 acc = 0.f;
+
+    device const uint16_t * qs =  ((device const uint16_t *)qb_curr + 4 + il/2);
+           const uint32_t   qh = *((device const uint32_t *)qb_curr->qh);
+
+    for (int i = 0; i < 8; i+=2) {
+        acc[0] += yl[i + 0] * ((qs[i / 2] & 0x000F) | ((qh >> (i+0+il        ) << 4 ) & 0x00010))
+                + yl[i + 1] * ((qs[i / 2] & 0x0F00) | ((qh >> (i+1+il        ) << 12) & 0x01000));
+        acc[1] += yl[i + 8] * ((qs[i / 2] & 0x00F0) | ((qh >> (i+0+il+QK5_0/2) << 8 ) & 0x00100))
+                + yl[i + 9] * ((qs[i / 2] & 0xF000) | ((qh >> (i+1+il+QK5_0/2) << 16) & 0x10000));
+    }
+    return d * (acc[0] + acc[1]) + sumy * m;
+}
+
+// putting them in the kernel cause a significant performance penalty
+#define N_DST 4        // each SIMD group works on 4 rows
+#define N_SIMDGROUP 2  // number of SIMD groups in a thread group
+//Note: This is a template, but strictly speaking it only applies to
+//      quantizations where the block size is 32. It also does not
+//      guard against the number of rows not being divisible by
+//      N_DST, so this is another explicit assumption of the implementation.
+template<typename block_q_type, int nr, int nsg, int nw>
+void mul_vec_q_n_f32_impl(
+        device const void  * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3 tgpig, uint tiisg, uint sgitg) {
+    const int nb = ne00/QK4_0;
+
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * nsg + sgitg) * nr;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_q_type * x = (device const block_q_type *) src0 + offset0;
+    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[16]; // src1 vector cache
+    float sumf[nr] = {0.f};
+
+    const int ix = (tiisg/2);
+    const int il = (tiisg%2)*8;
+
+    device const float * yb = y + ix * QK4_0 + il;
+
+    // each thread in a SIMD group deals with half a block.
+    for (int ib = ix; ib < nb; ib += nw/2) {
+        float sumy = 0;
+        for (int i = 0; i < 8; i += 2) {
+            sumy += yb[i] + yb[i+1];
+            yl[i+0] = yb[i+ 0];
+            yl[i+1] = yb[i+ 1]/256.f;
+
+            sumy += yb[i+16] + yb[i+17];
+            yl[i+8] = yb[i+16]/16.f;
+            yl[i+9] = yb[i+17]/4096.f;
+        }
+
+        for (int row = 0; row < nr; row++) {
+            sumf[row] += block_q_n_dot_y(x+ib+row*nb, sumy, yl, il);
+        }
+
+        yb += QK4_0 * 16;
+    }
+
+    for (int row = 0; row < nr; ++row) {
+        const float tot = simd_sum(sumf[row]);
+        if (tiisg == 0 && first_row + row < ne01) {
+            dst[im*ne0*ne1 + r1*ne0 + first_row + row] = tot;
+        }
+    }
+}
+
+kernel void kernel_mul_mv_q4_0_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+    mul_vec_q_n_f32_impl<block_q4_0, N_DST, N_SIMDGROUP, N_SIMDWIDTH>(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
+}
+
+kernel void kernel_mul_mv_q4_1_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint tiisg[[thread_index_in_simdgroup]],
+        uint sgitg[[simdgroup_index_in_threadgroup]]) {
+     mul_vec_q_n_f32_impl<block_q4_1, N_DST, N_SIMDGROUP, N_SIMDWIDTH>(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
+}
+
+kernel void kernel_mul_mv_q5_0_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+    mul_vec_q_n_f32_impl<block_q5_0, N_DST, N_SIMDGROUP, N_SIMDWIDTH>(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
+}
+
+kernel void kernel_mul_mv_q5_1_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+    mul_vec_q_n_f32_impl<block_q5_1, N_DST, N_SIMDGROUP, N_SIMDWIDTH>(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
+}
+
+
+#define NB_Q8_0 8
+
+void kernel_mul_mv_q8_0_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+    const int nr  = N_DST;
+    const int nsg = N_SIMDGROUP;
+    const int nw  = N_SIMDWIDTH;
+
+    const int nb = ne00/QK8_0;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * nsg + sgitg) * nr;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_q8_0 * x = (device const block_q8_0 *) src0 + offset0;
+    device const float      * y = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[NB_Q8_0];
+    float sumf[nr]={0.f};
+
+    const int ix = tiisg/4;
+    const int il = tiisg%4;
+
+    device const float * yb = y + ix * QK8_0 + NB_Q8_0*il;
+
+    // each thread in a SIMD group deals with NB_Q8_0 quants at a time
+    for (int ib = ix; ib < nb; ib += nw/4) {
+        for (int i = 0; i < NB_Q8_0; ++i) {
+            yl[i] = yb[i];
+        }
+
+        for (int row = 0; row < nr; row++) {
+            device const int8_t * qs = x[ib+row*nb].qs + NB_Q8_0*il;
+            float sumq = 0.f;
+            for (int iq = 0; iq < NB_Q8_0; ++iq) {
+                sumq += qs[iq] * yl[iq];
+            }
+            sumf[row] += sumq*x[ib+row*nb].d;
+        }
+
+        yb += NB_Q8_0 * nw;
+    }
+
+    for (int row = 0; row < nr; ++row) {
+        const float tot = simd_sum(sumf[row]);
+        if (tiisg == 0 && first_row + row < ne01) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_q8_0_f32")]]
+kernel void kernel_mul_mv_q8_0_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+    kernel_mul_mv_q8_0_f32_impl(src0,src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,nullptr,tgpig,tiisg,sgitg);
+}
+
+#define N_F32_F32 4
+
+void kernel_mul_mv_f32_f32_impl(
+        device const  char * src0,
+        device const  char * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                  uint64_t   nb00,
+                  uint64_t   nb01,
+                  uint64_t   nb02,
+                   int64_t   ne10,
+                   int64_t   ne11,
+                   int64_t   ne12,
+                  uint64_t   nb10,
+                  uint64_t   nb11,
+                  uint64_t   nb12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                     uint    r2,
+                     uint    r3,
+                     uint3   tgpig,
+                     uint    tiisg) {
+
+    const int64_t r0 = tgpig.x;
+    const int64_t rb = tgpig.y*N_F32_F32;
+    const int64_t im = tgpig.z;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;
+
+    device const float * x = (device const float *) (src0 + offset0);
+
+    if (ne00 < 128) {
+        for (int row = 0; row < N_F32_F32; ++row) {
+            int r1 = rb + row;
+            if (r1 >= ne11) {
+                break;
+            }
+
+            device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12);
+
+            float sumf = 0;
+            for (int i = tiisg; i < ne00; i += 32) {
+                sumf += (float) x[i] * (float) y[i];
+            }
+
+            float all_sum = simd_sum(sumf);
+            if (tiisg == 0) {
+                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
+            }
+        }
+    } else {
+        device const float4 * x4 = (device const float4 *)x;
+        for (int row = 0; row < N_F32_F32; ++row) {
+            int r1 = rb + row;
+            if (r1 >= ne11) {
+                break;
+            }
+
+            device const float  * y  = (device const float  *) (src1 + r1*nb11 + im*nb12);
+            device const float4 * y4 = (device const float4 *) y;
+
+            float sumf = 0;
+            for (int i = tiisg; i < ne00/4; i += 32) {
+                for (int k = 0; k < 4; ++k) sumf += (float) x4[i][k] * y4[i][k];
+            }
+
+            float all_sum = simd_sum(sumf);
+            if (tiisg == 0) {
+                for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i];
+                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
+            }
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_f32_f32")]]
+kernel void kernel_mul_mv_f32_f32(
+        device const  char * src0,
+        device const  char * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]]) {
+    kernel_mul_mv_f32_f32_impl(src0, src1, dst, ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, nb10, nb11, nb12, ne0, ne1, r2, r3, tgpig, tiisg);
+}
+
+#define N_F16_F16 4
+
+kernel void kernel_mul_mv_f16_f16(
+        device const  char * src0,
+        device const  char * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]]) {
+
+    const int64_t r0 = tgpig.x;
+    const int64_t rb = tgpig.y*N_F16_F16;
+    const int64_t im = tgpig.z;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;
+
+    device const half * x = (device const half *) (src0 + offset0);
+
+    if (ne00 < 128) {
+        for (int row = 0; row < N_F16_F16; ++row) {
+            int r1 = rb + row;
+            if (r1 >= ne11) {
+                break;
+            }
+
+            device const half * y = (device const half *) (src1 + r1*nb11 + im*nb12);
+
+            float sumf = 0;
+            for (int i = tiisg; i < ne00; i += 32) {
+                sumf += (half) x[i] * (half) y[i];
+            }
+
+            float all_sum = simd_sum(sumf);
+            if (tiisg == 0) {
+                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
+            }
+        }
+    } else {
+        device const half4 * x4 = (device const half4 *)x;
+        for (int row = 0; row < N_F16_F16; ++row) {
+            int r1 = rb + row;
+            if (r1 >= ne11) {
+                break;
+            }
+
+            device const half  * y  = (device const half  *) (src1 + r1*nb11 + im*nb12);
+            device const half4 * y4 = (device const half4 *) y;
+
+            float sumf = 0;
+            for (int i = tiisg; i < ne00/4; i += 32) {
+                for (int k = 0; k < 4; ++k) sumf += (half) x4[i][k] * y4[i][k];
+            }
+
+            float all_sum = simd_sum(sumf);
+            if (tiisg == 0) {
+                for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (half) x[i] * y[i];
+                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
+            }
+        }
+    }
+}
+
+void kernel_mul_mv_f16_f32_1row_impl(
+        device const  char * src0,
+        device const  char * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]]) {
+
+    const int64_t r0 = tgpig.x;
+    const int64_t r1 = tgpig.y;
+    const int64_t im = tgpig.z;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;
+
+    device const half  * x = (device const half  *) (src0 + offset0);
+    device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12);
+
+    float sumf = 0;
+    if (ne00 < 128) {
+        for (int i = tiisg; i < ne00; i += 32) {
+            sumf += (float) x[i] * (float) y[i];
+        }
+        float all_sum = simd_sum(sumf);
+        if (tiisg == 0) {
+            dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
+        }
+    } else {
+        device const half4  * x4 = (device const half4  *) x;
+        device const float4 * y4 = (device const float4 *) y;
+        for (int i = tiisg; i < ne00/4; i += 32) {
+            for (int k = 0; k < 4; ++k) sumf += (float)x4[i][k] * y4[i][k];
+        }
+        float all_sum = simd_sum(sumf);
+        if (tiisg == 0) {
+            for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i];
+            dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_f16_f32_1row")]]
+kernel void kernel_mul_mv_f16_f32_1row(
+        device const  char * src0,
+        device const  char * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]]) {
+    kernel_mul_mv_f16_f32_1row_impl(src0, src1, dst, ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, nb10, nb11, nb12, ne0, ne1, r2, r3, tgpig, tiisg);
+}
+
+#define N_F16_F32 4
+
+void kernel_mul_mv_f16_f32_impl(
+        device const  char * src0,
+        device const  char * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                  uint64_t   nb00,
+                  uint64_t   nb01,
+                  uint64_t   nb02,
+                   int64_t   ne10,
+                   int64_t   ne11,
+                   int64_t   ne12,
+                  uint64_t   nb10,
+                  uint64_t   nb11,
+                  uint64_t   nb12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+                   uint3     tgpig,
+                   uint      tiisg) {
+
+    const int64_t r0 = tgpig.x;
+    const int64_t rb = tgpig.y*N_F16_F32;
+    const int64_t im = tgpig.z;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;
+
+    device const half * x = (device const half *) (src0 + offset0);
+
+    if (ne00 < 128) {
+        for (int row = 0; row < N_F16_F32; ++row) {
+            int r1 = rb + row;
+            if (r1 >= ne11) {
+                break;
+            }
+
+            device const float * y = (device const float *) (src1 + r1*nb11 + im*nb12);
+
+            float sumf = 0;
+            for (int i = tiisg; i < ne00; i += 32) {
+                sumf += (float) x[i] * (float) y[i];
+            }
+
+            float all_sum = simd_sum(sumf);
+            if (tiisg == 0) {
+                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
+            }
+        }
+    } else {
+        device const half4 * x4 = (device const half4 *)x;
+        for (int row = 0; row < N_F16_F32; ++row) {
+            int r1 = rb + row;
+            if (r1 >= ne11) {
+                break;
+            }
+
+            device const float  * y  = (device const float  *) (src1 + r1*nb11 + im*nb12);
+            device const float4 * y4 = (device const float4 *) y;
+
+            float sumf = 0;
+            for (int i = tiisg; i < ne00/4; i += 32) {
+                for (int k = 0; k < 4; ++k) sumf += (float) x4[i][k] * y4[i][k];
+            }
+
+            float all_sum = simd_sum(sumf);
+            if (tiisg == 0) {
+                for (int i = 4*(ne00/4); i < ne00; ++i) all_sum += (float) x[i] * y[i];
+                dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
+            }
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_f16_f32")]]
+kernel void kernel_mul_mv_f16_f32(
+        device const  char * src0,
+        device const  char * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint tiisg[[thread_index_in_simdgroup]]) {
+    kernel_mul_mv_f16_f32_impl(src0, src1, dst, ne00, ne01, ne02, nb00, nb01, nb02, ne10, ne11, ne12, nb10, nb11, nb12, ne0, ne1, r2, r3, tgpig, tiisg);
+}
+
+// Assumes row size (ne00) is a multiple of 4
+kernel void kernel_mul_mv_f16_f32_l4(
+        device const  char * src0,
+        device const  char * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint tiisg[[thread_index_in_simdgroup]]) {
+
+    const int nrows = ne11;
+    const int64_t r0 = tgpig.x;
+    const int64_t im = tgpig.z;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = r0*nb01 + (i12/r2)*nb02 + (i13/r3)*nb02*ne02;
+
+    device const half4 * x4 = (device const half4 *) (src0 + offset0);
+
+    for (int r1 = 0; r1 < nrows; ++r1) {
+        device const float4 * y4 = (device const float4 *) (src1 + r1*nb11 + im*nb12);
+
+        float sumf = 0;
+        for (int i = tiisg; i < ne00/4; i += 32) {
+            for (int k = 0; k < 4; ++k) sumf += (float) x4[i][k] * y4[i][k];
+        }
+
+        float all_sum = simd_sum(sumf);
+        if (tiisg == 0) {
+            dst[im*ne1*ne0 + r1*ne0 + r0] = all_sum;
+        }
+    }
+}
+
+static float rope_yarn_ramp(const float low, const float high, const int i0) {
+    const float y = (i0 / 2 - low) / max(0.001f, high - low);
+    return 1.0f - min(1.0f, max(0.0f, y));
+}
+
+// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn
+// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng.
+static void rope_yarn(
+    float theta_extrap, float freq_scale, float corr_dims[2], int64_t i0, float ext_factor, float mscale,
+    thread float * cos_theta, thread float * sin_theta) {
+    // Get n-d rotational scaling corrected for extrapolation
+    float theta_interp = freq_scale * theta_extrap;
+    float theta = theta_interp;
+    if (ext_factor != 0.0f) {
+        float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor;
+        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;
+
+        // Get n-d magnitude scaling corrected for interpolation
+        mscale *= 1.0f + 0.1f * log(1.0f / freq_scale);
+    }
+    *cos_theta = cos(theta) * mscale;
+    *sin_theta = sin(theta) * mscale;
+}
+
+// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get
+// `corr_fac(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))`
+static float rope_yarn_corr_factor(int n_dims, int n_ctx_orig, float n_rot, float base) {
+    return n_dims * log(n_ctx_orig / (n_rot * 2 * M_PI_F)) / (2 * log(base));
+}
+
+static void rope_yarn_corr_dims(
+    int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, float dims[2]
+) {
+    // start and end correction dims
+    dims[0] = max(0.0f,         floor(rope_yarn_corr_factor(n_dims, n_ctx_orig, beta_fast, freq_base)));
+    dims[1] = min(n_dims - 1.0f, ceil(rope_yarn_corr_factor(n_dims, n_ctx_orig, beta_slow, freq_base)));
+}
+
+template<typename T>
+kernel void kernel_rope_norm(
+        device const    void * src0,
+        device const int32_t * src1,
+        device const   float * src2,
+        device         float * dst,
+        constant     int64_t & ne00,
+        constant     int64_t & ne01,
+        constant     int64_t & ne02,
+        constant     int64_t & ne03,
+        constant    uint64_t & nb00,
+        constant    uint64_t & nb01,
+        constant    uint64_t & nb02,
+        constant    uint64_t & nb03,
+        constant     int64_t & ne0,
+        constant     int64_t & ne1,
+        constant     int64_t & ne2,
+        constant     int64_t & ne3,
+        constant    uint64_t & nb0,
+        constant    uint64_t & nb1,
+        constant    uint64_t & nb2,
+        constant    uint64_t & nb3,
+        constant         int & n_past,
+        constant         int & n_dims,
+        constant         int & n_ctx_orig,
+        constant       float & freq_base,
+        constant       float & freq_scale,
+        constant       float & ext_factor,
+        constant       float & attn_factor,
+        constant       float & beta_fast,
+        constant       float & beta_slow,
+        uint  tiitg[[thread_index_in_threadgroup]],
+        uint3 tptg[[threads_per_threadgroup]],
+        uint3 tgpig[[threadgroup_position_in_grid]]) {
+    const int64_t i3 = tgpig[2];
+    const int64_t i2 = tgpig[1];
+    const int64_t i1 = tgpig[0];
+
+    float corr_dims[2];
+    rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);
+
+    device const int32_t * pos = src1;
+
+    const float theta_base = (float) pos[i2];
+    const float inv_ndims = -1.f/n_dims;
+
+    float cos_theta;
+    float sin_theta;
+
+    for (int64_t i0 = 2*tiitg; i0 < ne0; i0 += 2*tptg.x) {
+        if (i0 < n_dims) {
+            const int64_t ic = i0/2;
+
+            const float theta = theta_base * pow(freq_base, inv_ndims*i0);
+
+            const float freq_factor = src2 != src0 ? src2[ic] : 1.0f;
+
+            rope_yarn(theta/freq_factor, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta);
+
+            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
+            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
+
+            const float x0 = src[0];
+            const float x1 = src[1];
+
+            dst_data[0] = x0*cos_theta - x1*sin_theta;
+            dst_data[1] = x0*sin_theta + x1*cos_theta;
+        } else {
+            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
+            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
+
+            dst_data[0] = src[0];
+            dst_data[1] = src[1];
+        }
+    }
+}
+
+template<typename T>
+kernel void kernel_rope_neox(
+        device const    void * src0,
+        device const int32_t * src1,
+        device const   float * src2,
+        device         float * dst,
+        constant     int64_t & ne00,
+        constant     int64_t & ne01,
+        constant     int64_t & ne02,
+        constant     int64_t & ne03,
+        constant    uint64_t & nb00,
+        constant    uint64_t & nb01,
+        constant    uint64_t & nb02,
+        constant    uint64_t & nb03,
+        constant     int64_t & ne0,
+        constant     int64_t & ne1,
+        constant     int64_t & ne2,
+        constant     int64_t & ne3,
+        constant    uint64_t & nb0,
+        constant    uint64_t & nb1,
+        constant    uint64_t & nb2,
+        constant    uint64_t & nb3,
+        constant         int & n_past,
+        constant         int & n_dims,
+        constant         int & n_ctx_orig,
+        constant       float & freq_base,
+        constant       float & freq_scale,
+        constant       float & ext_factor,
+        constant       float & attn_factor,
+        constant       float & beta_fast,
+        constant       float & beta_slow,
+        uint  tiitg[[thread_index_in_threadgroup]],
+        uint3 tptg[[threads_per_threadgroup]],
+        uint3 tgpig[[threadgroup_position_in_grid]]) {
+    const int64_t i3 = tgpig[2];
+    const int64_t i2 = tgpig[1];
+    const int64_t i1 = tgpig[0];
+
+    float corr_dims[2];
+    rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);
+
+    device const int32_t * pos = src1;
+
+    const float theta_base = (float) pos[i2];
+    const float inv_ndims = -1.f/n_dims;
+
+    float cos_theta;
+    float sin_theta;
+
+    for (int64_t i0 = 2*tiitg; i0 < ne0; i0 += 2*tptg.x) {
+        if (i0 < n_dims) {
+            const int64_t ic = i0/2;
+
+            const float theta = theta_base * pow(freq_base, inv_ndims*i0);
+
+            const float freq_factor = src2 != src0 ? src2[ic] : 1.0f;
+
+            rope_yarn(theta/freq_factor, freq_scale, corr_dims, i0, ext_factor, attn_factor, &cos_theta, &sin_theta);
+
+            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00);
+            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + ic*nb0);
+
+            const float x0 = src[0];
+            const float x1 = src[n_dims/2];
+
+            dst_data[0]        = x0*cos_theta - x1*sin_theta;
+            dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta;
+        } else {
+            device const T * const src = (device T *)((device char *) src0 + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
+            device       T * dst_data  = (device T *)((device char *)  dst + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
+
+            dst_data[0] = src[0];
+            dst_data[1] = src[1];
+        }
+    }
+}
+
+typedef decltype(kernel_rope_norm<float>) kernel_rope_norm_t;
+typedef decltype(kernel_rope_neox<float>) kernel_rope_neox_t;
+
+template [[host_name("kernel_rope_norm_f32")]] kernel kernel_rope_norm_t kernel_rope_norm<float>;
+template [[host_name("kernel_rope_norm_f16")]] kernel kernel_rope_norm_t kernel_rope_norm<half>;
+
+template [[host_name("kernel_rope_neox_f32")]] kernel kernel_rope_neox_t kernel_rope_neox<float>;
+template [[host_name("kernel_rope_neox_f16")]] kernel kernel_rope_neox_t kernel_rope_neox<half>;
+
+typedef void (im2col_t)(
+        device const float * x,
+        device        char * dst,
+        constant   int32_t & ofs0,
+        constant   int32_t & ofs1,
+        constant   int32_t & IW,
+        constant   int32_t & IH,
+        constant   int32_t & CHW,
+        constant   int32_t & s0,
+        constant   int32_t & s1,
+        constant   int32_t & p0,
+        constant   int32_t & p1,
+        constant   int32_t & d0,
+        constant   int32_t & d1,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3  tgpg[[threadgroups_per_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]);
+
+template <typename T>
+kernel void kernel_im2col(
+        device const float * x,
+        device        char * dst,
+        constant   int32_t & ofs0,
+        constant   int32_t & ofs1,
+        constant   int32_t & IW,
+        constant   int32_t & IH,
+        constant   int32_t & CHW,
+        constant   int32_t & s0,
+        constant   int32_t & s1,
+        constant   int32_t & p0,
+        constant   int32_t & p1,
+        constant   int32_t & d0,
+        constant   int32_t & d1,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3  tgpg[[threadgroups_per_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int32_t iiw = tgpig[2] * s0 + tpitg[2] * d0 - p0;
+    const int32_t iih = tgpig[1] * s1 + tpitg[1] * d1 - p1;
+
+    const int32_t offset_dst =
+        (tpitg[0] * tgpg[1] * tgpg[2] + tgpig[1] * tgpg[2] + tgpig[2]) * CHW +
+        (tgpig[0] * (ntg[1] * ntg[2]) + tpitg[1] * ntg[2] + tpitg[2]);
+
+    device T * pdst = (device T *) (dst);
+
+    if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
+        pdst[offset_dst] = 0.0f;
+    } else {
+        const int32_t offset_src = tpitg[0] * ofs0 + tgpig[0] * ofs1;
+        pdst[offset_dst] = x[offset_src + iih * IW + iiw];
+    }
+}
+
+template [[host_name("kernel_im2col_f32")]] kernel im2col_t kernel_im2col<float>;
+template [[host_name("kernel_im2col_f16")]] kernel im2col_t kernel_im2col<half>;
+
+kernel void kernel_upscale_f32(
+    device  const char * src0,
+    device        char * dst,
+    constant   int64_t & ne00,
+    constant   int64_t & ne01,
+    constant   int64_t & ne02,
+    constant   int64_t & ne03,
+    constant  uint64_t & nb00,
+    constant  uint64_t & nb01,
+    constant  uint64_t & nb02,
+    constant  uint64_t & nb03,
+    constant   int64_t & ne0,
+    constant   int64_t & ne1,
+    constant   int64_t & ne2,
+    constant   int64_t & ne3,
+    constant  uint64_t & nb0,
+    constant  uint64_t & nb1,
+    constant  uint64_t & nb2,
+    constant  uint64_t & nb3,
+    constant     float & sf0,
+    constant     float & sf1,
+    constant     float & sf2,
+    constant     float & sf3,
+    uint3 tgpig[[threadgroup_position_in_grid]],
+    uint3 tpitg[[thread_position_in_threadgroup]],
+    uint3   ntg[[threads_per_threadgroup]]) {
+
+    const int64_t i3 = tgpig.z;
+    const int64_t i2 = tgpig.y;
+    const int64_t i1 = tgpig.x;
+
+    const int64_t i03 = i3/sf3;
+    const int64_t i02 = i2/sf2;
+    const int64_t i01 = i1/sf1;
+
+    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
+        const int64_t i00 = i0/sf0;
+
+        device const float * src0_ptr = (device const float *) (src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+        device       float * dst_ptr  = (device       float *) (dst  +  i3*nb3  +  i2*nb2  +  i1*nb1  +  i0*nb0);
+
+        dst_ptr[0] = src0_ptr[0];
+    }
+}
+
+kernel void kernel_pad_f32(
+    device  const char * src0,
+    device        char * dst,
+    constant   int64_t & ne00,
+    constant   int64_t & ne01,
+    constant   int64_t & ne02,
+    constant   int64_t & ne03,
+    constant  uint64_t & nb00,
+    constant  uint64_t & nb01,
+    constant  uint64_t & nb02,
+    constant  uint64_t & nb03,
+    constant   int64_t & ne0,
+    constant   int64_t & ne1,
+    constant   int64_t & ne2,
+    constant   int64_t & ne3,
+    constant  uint64_t & nb0,
+    constant  uint64_t & nb1,
+    constant  uint64_t & nb2,
+    constant  uint64_t & nb3,
+    uint3 tgpig[[threadgroup_position_in_grid]],
+    uint3 tpitg[[thread_position_in_threadgroup]],
+    uint3   ntg[[threads_per_threadgroup]]) {
+
+    const int64_t i3 = tgpig.z;
+    const int64_t i2 = tgpig.y;
+    const int64_t i1 = tgpig.x;
+
+    const int64_t i03 = i3;
+    const int64_t i02 = i2;
+    const int64_t i01 = i1;
+
+    device const float * src0_ptr = (device const float *) (src0 + i03*nb03 + i02*nb02 + i01*nb01);
+    device       float * dst_ptr  = (device       float *) (dst  +  i3*nb3  +  i2*nb2  +  i1*nb1);
+
+    if (i1 < ne01 && i2 < ne02 && i3 < ne03) {
+        for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
+            if (i0 < ne00) {
+                dst_ptr[i0] = src0_ptr[i0];
+            } else {
+                dst_ptr[i0] = 0.0f;
+            }
+        }
+
+        return;
+    }
+
+    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
+        dst_ptr[i0] = 0.0f;
+    }
+}
+
+kernel void kernel_arange_f32(
+    device        char * dst,
+    constant   int64_t & ne0,
+    constant   float   & start,
+    constant   float   & step,
+    uint3 tgpig[[threadgroup_position_in_grid]],
+    uint3 tpitg[[thread_position_in_threadgroup]],
+    uint3   ntg[[threads_per_threadgroup]]) {
+
+    device float * dst_ptr = (device float *) dst;
+
+    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
+        dst_ptr[i0] = start + step * i0;
+    }
+}
+
+kernel void kernel_timestep_embedding_f32(
+    device  const char * src0,
+    device        char * dst,
+    constant  uint64_t & nb1,
+    constant  int      & dim,
+    constant  int      & max_period,
+    uint3 tgpig[[threadgroup_position_in_grid]],
+    uint3 tpitg[[thread_position_in_threadgroup]],
+    uint3   ntg[[threads_per_threadgroup]]) {
+
+    int i = tgpig.x;
+    device float * embed_data = (device float *)(dst +  i*nb1);
+
+    int half_ = dim / 2;
+    for (int j = tpitg.x; j < half_; j += ntg.x) {
+        float timestep = ((device float *)src0)[i];
+        float freq = (float)exp(-log((float)max_period) * j / half_);
+        float arg = timestep * freq;
+        embed_data[j        ] = cos(arg);
+        embed_data[j + half_] = sin(arg);
+    }
+
+    if (dim % 2 != 0 && tpitg.x == 0) {
+        embed_data[dim] = 0.f;
+    }
+}
+
+// bitonic sort implementation following the CUDA kernels as reference
+typedef void (argsort_t)(
+        device const float  * x,
+        device     int32_t  * dst,
+        constant   int64_t  & ncols,
+        constant   int64_t  & ncols_pad,
+        threadgroup int32_t * shared_values [[threadgroup(0)]],
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]]);
+
+template<ggml_sort_order order>
+kernel void kernel_argsort_f32_i32(
+        device const float   * x,
+        device       int32_t * dst,
+        constant     int64_t & ncols,
+        constant     int64_t & ncols_pad,
+        threadgroup int32_t  * shared_values [[threadgroup(0)]],
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]]) {
+    // bitonic sort
+    int col = tpitg[0];
+    int row = tgpig[1];
+
+    if (col >= ncols_pad) return;
+
+    device const float   * x_row   = x + row * ncols;
+    threadgroup int32_t  * dst_row = shared_values;
+
+    // initialize indices
+    dst_row[col] = col;
+
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+
+    for (int k = 2; k <= ncols_pad; k *= 2) {
+        for (int j = k / 2; j > 0; j /= 2) {
+            int ixj = col ^ j;
+            if (ixj > col) {
+                if ((col & k) == 0) {
+                    if (dst_row[col] >= ncols ||
+                        (dst_row[ixj] < ncols && (order == GGML_SORT_ORDER_ASC ?
+                            x_row[dst_row[col]] > x_row[dst_row[ixj]] :
+                            x_row[dst_row[col]] < x_row[dst_row[ixj]]))
+                    ) {
+                        SWAP(dst_row[col], dst_row[ixj]);
+                    }
+                } else {
+                    if (dst_row[ixj] >= ncols ||
+                        (dst_row[col] < ncols && (order == GGML_SORT_ORDER_ASC ?
+                            x_row[dst_row[col]] < x_row[dst_row[ixj]] :
+                            x_row[dst_row[col]] > x_row[dst_row[ixj]]))
+                    ) {
+                        SWAP(dst_row[col], dst_row[ixj]);
+                    }
+                }
+            }
+            threadgroup_barrier(mem_flags::mem_threadgroup);
+        }
+    }
+
+    // copy the result to dst without the padding
+    if (col < ncols) {
+        dst[row * ncols + col] = dst_row[col];
+    }
+}
+
+template [[host_name("kernel_argsort_f32_i32_asc")]]  kernel argsort_t kernel_argsort_f32_i32<GGML_SORT_ORDER_ASC>;
+template [[host_name("kernel_argsort_f32_i32_desc")]] kernel argsort_t kernel_argsort_f32_i32<GGML_SORT_ORDER_DESC>;
+
+kernel void kernel_leaky_relu_f32(
+        device const float * src0,
+        device       float * dst,
+        constant     float & slope,
+        uint tpig[[thread_position_in_grid]]) {
+    dst[tpig] = src0[tpig] > 0.0f ? src0[tpig] : src0[tpig] * slope;
+}
+
+typedef void (flash_attn_ext_f16_t)(
+        device const  char * q,
+        device const  char * k,
+        device const  char * v,
+        device const  char * mask,
+        device       float * dst,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant   int64_t & ne13,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant  uint64_t & nb13,
+        constant  uint64_t & nb21,
+        constant  uint64_t & nb22,
+        constant  uint64_t & nb23,
+        constant  uint64_t & nb31,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant     float & scale,
+        constant     float & max_bias,
+        constant     float & m0,
+        constant     float & m1,
+        constant  uint32_t & n_head_log2,
+        threadgroup   half * shared,
+        uint3  tgpig[[threadgroup_position_in_grid]],
+        uint3  tpitg[[thread_position_in_threadgroup]],
+        uint3    ntg[[threads_per_threadgroup]],
+        ushort tiisg[[thread_index_in_simdgroup]],
+        ushort sgitg[[simdgroup_index_in_threadgroup]]);
+
+// ref: https://arxiv.org/pdf/2307.08691.pdf
+template<int64_t D, int64_t Q = 8, int64_t C = 32> // head size, queries per threadgroup, cache items per threadgroup
+kernel void kernel_flash_attn_ext_f16(
+        device const  char * q,
+        device const  char * k,
+        device const  char * v,
+        device const  char * mask,
+        device       float * dst,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant   int64_t & ne13,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant  uint64_t & nb13,
+        constant  uint64_t & nb21,
+        constant  uint64_t & nb22,
+        constant  uint64_t & nb23,
+        constant  uint64_t & nb31,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant     float & scale,
+        constant     float & max_bias,
+        constant     float & m0,
+        constant     float & m1,
+        constant  uint32_t & n_head_log2,
+        threadgroup   half * shared [[threadgroup(0)]],
+        uint3  tgpig[[threadgroup_position_in_grid]],
+        uint3  tpitg[[thread_position_in_threadgroup]],
+        uint3    ntg[[threads_per_threadgroup]],
+        ushort tiisg[[thread_index_in_simdgroup]],
+        ushort sgitg[[simdgroup_index_in_threadgroup]]) {
+    const short nsg = ntg.y; // number of simdgroups
+
+    const short iq3 = tgpig[2];
+    const short iq2 = tgpig[1];
+    const short iq1 = tgpig[0]*Q;
+
+    const short D4 = D/4;
+    const short D8 = D/8;
+  //const short Q8 = Q/8;
+    const short NW = N_SIMDWIDTH;
+    const short SH = (C + Q); // shared memory per simdgroup in (half)
+
+    const short T  = D + 2*nsg*SH; // shared memory size per query in (half)
+    const short TF = T/2;        // shared memory size per query in (float)
+    const short T4 = T/4;        // shared memory size per query in (half4)
+
+    threadgroup half  * sq  = (threadgroup half  *) (shared +              0*D); // holds the query data
+    threadgroup half4 * sq4 = (threadgroup half4 *) (shared +              0*D); // same as above but in half4
+    threadgroup float * ss  = (threadgroup float *) (shared + 2*sgitg*SH + 1*D); // scratch buffer for attention and diagonal matrix
+
+    // store the result for all queries in local memory in 8x8 matrices (the O matrix from the paper)
+    simdgroup_half8x8 lo[D8];
+
+    // load heads from Q to shared memory
+    for (short j = sgitg; j < Q; j += nsg) {
+        device const float4 * q4 = (device const float4 *) ((device const char *) q + ((iq1 + j)*nb01 + iq2*nb02 + iq3*nb03));
+
+        for (short i = tiisg; i < D4; i += NW) {
+            if (iq1 + j < ne01) {
+                sq4[j*T4 + i] = (half4) q4[i];
+            } else {
+                sq4[j*T4 + i] = 0.0h;
+            }
+        }
+    }
+
+    // zero out lo
+    for (short i = 0; i < D8; ++i) {
+        lo[i] = make_filled_simdgroup_matrix<half, 8>(0.0h);
+    }
+
+    // zero out shared memory SH
+    for (short j = 0; j < Q; ++j) {
+        for (short i = tiisg; i < SH; i += NW) {
+            ss[j*TF + i] = 0.0f;
+        }
+    }
+
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+
+    {
+        float S[Q] = { [0 ... Q-1] = 0.0h };
+        float M[Q] = { [0 ... Q-1] = -FLT_MAX/2 };
+
+        // assume K and V are same shape
+        const short ne22 = ne12;
+        const short ne23 = ne13;
+
+        // broadcast
+        const short rk2 = ne02/ne12;
+        const short rk3 = ne03/ne13;
+
+        const short rv2 = ne02/ne22;
+        const short rv3 = ne03/ne23;
+
+        // k indices
+        const short ik2 = iq2/rk2;
+        const short ik3 = iq3/rk3;
+
+        // v indices
+        const short iv2 = iq2/rv2;
+        const short iv3 = iq3/rv3;
+
+        // load the queries from shared memory into local memory
+        simdgroup_half8x8 mq[D8];
+
+        for (short i = 0; i < D8; ++i) {
+            simdgroup_load(mq[i], sq + i*8, T);
+        }
+
+        // pointer to the mask
+        device const half * mp = (device const half *) (mask + iq1*nb31);
+
+        float slope = 1.0f;
+
+        // ALiBi
+        if (max_bias > 0.0f) {
+            const uint32_t h = iq2;
+
+            const float base = h < n_head_log2 ? m0 : m1;
+            const int   exph = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
+
+            slope = pow(base, exph);
+        }
+
+        // loop over the KV cache
+        // each simdgroup handles blocks of Q rows and C columns
+        for (int ic0 = 0; ic0 < ne11; ic0 += C*nsg) {
+            const int ic = ic0 + C*sgitg;
+            if (ic >= ne11) {
+                break;
+            }
+
+            // Q*K^T
+            {
+                for (short cc = 0; cc < C/8; ++cc) {
+                    simdgroup_float8x8 mqk = make_filled_simdgroup_matrix<float, 8>(0.h);
+
+                    device const half * pk = (device const half *) ((device const char *) k + ((ic + 8*cc)*nb11 + ik2*nb12 + ik3*nb13));
+
+                    for (short i = 0; i < D8; ++i) {
+                        simdgroup_half8x8 mk;
+                        simdgroup_load(mk, pk + i*8, nb11/sizeof(half), 0, true); // transpose
+
+                        simdgroup_multiply_accumulate(mqk, mq[i], mk, mqk);
+                    }
+
+                    simdgroup_store(mqk, ss + 8*cc, TF, 0, false);
+
+                    const short tx = tiisg%4;
+                    const short ty = tiisg/4;
+
+                    if (mask != q) {
+                        // mqk = mqk*scale + mask*slope
+                        ss[8*cc + ty*TF + 2*tx + 0] = scale*ss[8*cc + ty*TF + 2*tx + 0] + slope*mp[ic + 8*cc + ty*nb31/sizeof(half) + 2*tx + 0];
+                        ss[8*cc + ty*TF + 2*tx + 1] = scale*ss[8*cc + ty*TF + 2*tx + 1] + slope*mp[ic + 8*cc + ty*nb31/sizeof(half) + 2*tx + 1];
+                    } else {
+                        // mqk = mqk*scale
+                        ss[8*cc + ty*TF + 2*tx + 0] *= scale;
+                        ss[8*cc + ty*TF + 2*tx + 1] *= scale;
+                    }
+                }
+            }
+
+            // used to detect blocks full of -INF
+            float smax = -INFINITY;
+
+            // online softmax
+            {
+                float ms[Q];
+
+                for (short j = 0; j < Q; ++j) {
+                    const short p = tiisg;
+
+                    const float m = M[j];
+                    const float s = ss[j*TF + p];
+
+                    smax = simd_max(max(smax, s));
+                    M[j] = simd_max(max(M[j], s));
+
+                                ms[j] = exp(m - M[j]);
+                    const float vs    = exp(s - M[j]);
+
+                    S[j] = S[j]*ms[j] + simd_sum(vs);
+
+                    // the P matrix from the paper (Q rows, C columns)
+                    ss[j*TF + p] = vs;
+                }
+
+                // create a QxQ diagonal matrix for rescaling the output
+                if (tiisg < Q) {
+                    ss[tiisg*TF + C + tiisg] = ms[tiisg];
+                }
+            }
+
+            // skip -INF blocks
+            if (smax == -INFINITY) {
+                continue;
+            }
+
+            // O = diag(ms)*O
+            {
+                simdgroup_float8x8 mm;
+                simdgroup_load(mm, ss + C, TF, 0, false);
+
+                for (short i = 0; i < D8; ++i) {
+                    simdgroup_multiply(lo[i], mm, lo[i]);
+                }
+            }
+
+            // O = O + (Q*K^T)*V
+            {
+                for (short cc = 0; cc < C/8; ++cc) {
+                    device const half * pv = (device const half *) ((device const char *) v + ((ic + 8*cc)*nb21 + iv2*nb22 + iv3*nb23));
+
+                    for (short i = 0; i < D8; ++i) {
+                        simdgroup_half8x8 mk;
+                        simdgroup_load(mk, pv + i*8, nb21/sizeof(half), 0, false);
+
+                        simdgroup_float8x8 mv;
+                        simdgroup_load(mv, ss + 8*cc, TF, 0, false);
+
+                        simdgroup_multiply_accumulate(lo[i], mv, mk, lo[i]);
+                    }
+                }
+            }
+        }
+
+        // these are needed for reducing the results from the simdgroups (reuse the ss buffer)
+        for (short j = 0; j < Q; ++j) {
+            if (tiisg == 0) {
+                ss[j*TF + 0] = S[j];
+                ss[j*TF + 1] = M[j];
+            }
+        }
+    }
+
+    // reduce the warps sequentially
+    for (short sg = 1; sg < nsg; ++sg) {
+        float S = { 0.0h };
+        float M = { -FLT_MAX/2 };
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        // each simdgroup stores its output to shared memory, reusing sq
+        if (sgitg == sg) {
+            for (short i = 0; i < D8; ++i) {
+                simdgroup_store(lo[i], sq + i*8, T, 0, false);
+            }
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        // the first simdgroup accumulates the results from the other simdgroups
+        if (sgitg == 0) {
+            for (short j = 0; j < Q; ++j) {
+                const float S0 = ss[j*TF +         0];
+                const float S1 = ss[j*TF + sg*SH + 0];
+
+                const float M0 = ss[j*TF +         1];
+                const float M1 = ss[j*TF + sg*SH + 1];
+
+                M = max(M0, M1);
+
+                const float ms0 = exp(M0 - M);
+                const float ms1 = exp(M1 - M);
+
+                S = S0*ms0 + S1*ms1;
+
+                if (tiisg == 0) {
+                    ss[j*TF + 0] = S;
+                    ss[j*TF + 1] = M;
+
+                    ss[j*TF + C + j        ] = ms0;
+                    ss[j*TF + C + j + sg*SH] = ms1;
+                }
+            }
+
+            // O_0 = diag(ms0)*O_0 + diag(ms1)*O_1
+            {
+                simdgroup_half8x8 t;
+                simdgroup_float8x8 ms0;
+                simdgroup_float8x8 ms1;
+
+                simdgroup_load(ms0, ss + C,         TF, 0, false);
+                simdgroup_load(ms1, ss + C + sg*SH, TF, 0, false);
+
+                for (short i = 0; i < D8; ++i) {
+                    simdgroup_load    (t, sq + i*8, T, 0, false);
+                    simdgroup_multiply(t, ms1, t);
+
+                    simdgroup_multiply_accumulate(lo[i], ms0, lo[i], t);
+                }
+            }
+        }
+    }
+
+    // store result to shared memory (reuse sq)
+    if (sgitg == 0) {
+        for (short i = 0; i < D8; ++i) {
+            simdgroup_store(lo[i], sq + i*8, T, 0, false);
+        }
+    }
+
+    device float4 * dst4 = (device float4 *) dst;
+
+    // final rescale with 1/S and store to global memory
+    if (sgitg == 0) {
+        for (short j = 0; j < Q && iq1 + j < ne01; ++j) {
+            const float S = ss[j*TF + 0];
+
+            for (short i = tiisg; i < D4; i += NW) {
+                dst4[(iq3*ne2*ne1 + iq2 + (iq1 + j)*ne1)*D4 + i] = (float4) sq4[j*T4 + i]/S;
+            }
+        }
+    }
+}
+
+template [[host_name("kernel_flash_attn_ext_f16_h64" )]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<64>;
+template [[host_name("kernel_flash_attn_ext_f16_h80" )]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<80>;
+template [[host_name("kernel_flash_attn_ext_f16_h96" )]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<96>;
+template [[host_name("kernel_flash_attn_ext_f16_h112")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<112>;
+template [[host_name("kernel_flash_attn_ext_f16_h128")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<128>;
+//template [[host_name("kernel_flash_attn_ext_f16_h256")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_f16<256>;
+
+template<int64_t D, int64_t Q = 1, int64_t C = 32> // head size, queries per threadgroup, cache items per threadgroup
+kernel void kernel_flash_attn_ext_vec_f16(
+        device const  char * q,
+        device const  char * k,
+        device const  char * v,
+        device const  char * mask,
+        device       float * dst,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant   int64_t & ne13,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant  uint64_t & nb13,
+        constant  uint64_t & nb21,
+        constant  uint64_t & nb22,
+        constant  uint64_t & nb23,
+        constant  uint64_t & nb31,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant     float & scale,
+        constant     float & max_bias,
+        constant     float & m0,
+        constant     float & m1,
+        constant  uint32_t & n_head_log2,
+        threadgroup   half * shared [[threadgroup(0)]],
+        uint3  tgpig[[threadgroup_position_in_grid]],
+        uint3  tpitg[[thread_position_in_threadgroup]],
+        uint3    ntg[[threads_per_threadgroup]],
+        ushort tiisg[[thread_index_in_simdgroup]],
+        ushort sgitg[[simdgroup_index_in_threadgroup]]) {
+    const short nsg = ntg.y; // number of simdgroups
+
+    const short iq3 = tgpig[2];
+    const short iq2 = tgpig[1];
+    const short iq1 = tgpig[0];
+
+    const short D4 = D/4;
+    const short NW = N_SIMDWIDTH;
+    const short SH = (C + Q); // shared memory per simdgroup in (half)
+
+    const short T  = D + 2*nsg*SH; // shared memory size per query in (half)
+
+    float slope = 1.0f;
+
+    // ALiBi
+    if (max_bias > 0.0f) {
+        const uint32_t h = iq2;
+
+        const float base = h < n_head_log2 ? m0 : m1;
+        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
+
+        slope = pow(base, exp);
+    }
+
+  //threadgroup half   * sq  = (threadgroup half   *) (shared +              0*D); // holds the query data
+    threadgroup half4  * sq4 = (threadgroup half4  *) (shared +              0*D); // same as above but in half4
+    threadgroup float  * ss  = (threadgroup float  *) (shared + 2*sgitg*SH + 1*D); // scratch buffer for attention and diagonal matrix
+    threadgroup float4 * ss4 = (threadgroup float4 *) (shared + 2*sgitg*SH + 1*D); // same as above but in half4
+    threadgroup half4  * sr4 = (threadgroup half4  *) (shared +   sgitg*D  + 1*T); // scratch buffer for the results
+
+    // store the result for all queries in local memory in 8x8 matrices (the O matrix from the paper)
+    half4 lo[D4/NW];
+
+    // load heads from Q to shared memory
+    device const float4 * q4 = (device const float4 *) ((device const char *) q + (iq1*nb01 + iq2*nb02 + iq3*nb03));
+
+    for (short i = tiisg; i < D4; i += NW) {
+        if (iq1 < ne01) {
+            sq4[i] = (half4) q4[i];
+        } else {
+            sq4[i] = 0.0h;
+        }
+    }
+
+    // zero out lo
+    for (short i = tiisg; i < D4; i += NW) {
+        lo[i/NW] = 0.0h;
+    }
+
+    // zero out shared memory SH
+    for (short i = tiisg; i < SH/4; i += NW) {
+        ss4[i] = 0.0h;
+    }
+
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+
+    {
+        float S = { 0.0h };
+        float M = { -FLT_MAX/2 };
+
+        // assume K and V are same shape
+        const short ne22 = ne12;
+        const short ne23 = ne13;
+
+        // broadcast
+        const short rk2 = ne02/ne12;
+        const short rk3 = ne03/ne13;
+
+        const short rv2 = ne02/ne22;
+        const short rv3 = ne03/ne23;
+
+        // k indices
+        const short ik2 = iq2 / rk2;
+        const short ik3 = iq3 / rk3;
+
+        // v indices
+        const short iv2 = iq2 / rv2;
+        const short iv3 = iq3 / rv3;
+
+        // load the queries from shared memory into local memory
+        half4 mq[D4];
+
+        for (short ii = 0; ii < D4; ii += NW) {
+            short i = ii + tiisg;
+            mq[i] = sq4[i];
+        }
+
+        // pointer to the mask
+        device const half4 * mp4 = (device const half4 *) (mask + iq1*nb31);
+
+        // loop over the KV cache
+        // each simdgroup handles blocks of Q rows and C columns
+        for (int ic0 = 0; ic0 < ne11; ic0 += C*nsg) {
+            const int ic = ic0 + C*sgitg;
+            if (ic >= ne11) {
+                break;
+            }
+
+            // Q*K^T
+            {
+#pragma unroll
+                for (short cc = 0; cc < C/4; ++cc) {
+                    float4 mqk = { 0.0h };
+
+                    device const half4 * pk4 = (device const half4 *) ((device const char *) k + ((ic + 4*cc)*nb11 + ik2*nb12 + ik3*nb13));
+
+#pragma unroll
+                    for (short ii = 0; ii < D4; ii += NW) {
+                        const short i = ii + tiisg;
+
+                        half4x4 mk;
+                        mk[0] = pk4[i + 0*(nb11/8)];
+                        mk[1] = pk4[i + 1*(nb11/8)];
+                        mk[2] = pk4[i + 2*(nb11/8)];
+                        mk[3] = pk4[i + 3*(nb11/8)];
+
+                        mqk += (float4) (mq[i] * mk);
+                    }
+
+                    // reduce the results from the threads in the simdgroup
+                    mqk += simd_shuffle_down(mqk, 16);
+                    mqk += simd_shuffle_down(mqk,  8);
+                    mqk += simd_shuffle_down(mqk,  4);
+                    mqk += simd_shuffle_down(mqk,  2);
+                    mqk += simd_shuffle_down(mqk,  1);
+
+                    // mqk = mqk*scale + mask*slope
+                    if (tiisg == 0) {
+                        mqk = mqk*scale + ((mask != q) ? ((float4) mp4[ic/4 + cc])*slope : (float4) 0.0f);
+
+                        ss4[cc] = mqk;
+                    }
+                }
+            }
+
+            // online softmax
+            {
+                const short p = tiisg;
+
+                const float m = M;
+                const float s = ss[p];
+
+                M = simd_max(max(M, s));
+
+                const float ms = exp(m - M);
+                const float vs = exp(s - M);
+
+                S = S*ms + simd_sum(vs);
+
+                // the P matrix from the paper (Q rows, C columns)
+                ss[p] = vs;
+
+                // O = diag(ms)*O
+#pragma unroll
+                for (short ii = 0; ii < D4; ii += NW) {
+                    const short i = ii + tiisg;
+                    lo[i/NW] *= ms;
+                }
+            }
+
+            // O = O + (Q*K^T)*V
+            {
+#pragma unroll
+                for (short cc = 0; cc < C/4; ++cc) {
+                    device const half4 * pv4 = (device const half4 *) ((device const char *) v + ((ic + 4*cc)*nb21 + iv2*nb22 + iv3*nb23));
+
+#pragma unroll
+                    for (short ii = 0; ii < D4; ii += NW) {
+                        const short i = ii + tiisg;
+
+                        lo[i/NW] += pv4[i + 0*(nb21/8)] * ss[4*cc + 0];
+                        lo[i/NW] += pv4[i + 1*(nb21/8)] * ss[4*cc + 1];
+                        lo[i/NW] += pv4[i + 2*(nb21/8)] * ss[4*cc + 2];
+                        lo[i/NW] += pv4[i + 3*(nb21/8)] * ss[4*cc + 3];
+                    }
+                }
+            }
+
+        }
+
+        // these are needed for reducing the results from the simdgroups (reuse the ss buffer)
+        if (tiisg == 0) {
+            ss[0] = S;
+            ss[1] = M;
+        }
+    }
+
+    // store results to shared memory
+    for (short ii = 0; ii < D4; ii += NW) {
+        short i = ii + tiisg;
+        sr4[i] = lo[ii/NW];
+    }
+
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+
+    // parallel reduce
+    for (short r = nsg/2; r > 0; r >>= 1) {
+        if (sgitg < r) {
+            const float S0 = ss[       0];
+            const float S1 = ss[r*SH + 0];
+
+            const float M0 = ss[       1];
+            const float M1 = ss[r*SH + 1];
+
+            const float M = max(M0, M1);
+
+            const float ms0 = exp(M0 - M);
+            const float ms1 = exp(M1 - M);
+
+            const float S = S0*ms0 + S1*ms1;
+
+            if (tiisg == 0) {
+                ss[0] = S;
+                ss[1] = M;
+            }
+
+            // O_0 = diag(ms0)*O_0 + diag(ms1)*O_1
+            for (short ii = 0; ii < D4; ii += NW) {
+                short i = ii + tiisg;
+                sr4[i] = sr4[i]*ms0 + sr4[i + r*D4]*ms1;
+            }
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+    }
+
+    device float4 * dst4 = (device float4 *) dst;
+
+    // final rescale with 1/S and store to global memory
+    if (sgitg == 0) {
+        const float S = ss[0];
+
+        for (short ii = 0; ii < D4; ii += NW) {
+            short i = ii + tiisg;
+            dst4[(iq3*ne2*ne1 + iq2 + (iq1)*ne1)*D4 + i] = (float4) sr4[i]/S;
+        }
+    }
+}
+
+template [[host_name("kernel_flash_attn_ext_vec_f16_h128")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_vec_f16<128>;
+//template [[host_name("kernel_flash_attn_ext_vec_f16_h256")]] kernel flash_attn_ext_f16_t kernel_flash_attn_ext_vec_f16<256>;
+
+kernel void kernel_cpy_f16_f16(
+        device  const half * src0,
+        device        half * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant   int64_t & ne3,
+        constant  uint64_t & nb0,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        constant  uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig[2];
+    const int64_t i02 = tgpig[1];
+    const int64_t i01 = tgpig[0];
+
+    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
+
+    const int64_t i3 = n / (ne2*ne1*ne0);
+    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
+    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
+    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0);
+
+    device half * dst_data = (device half *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+    for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) {
+        device const half * src = (device half *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+        dst_data[i00] = src[0];
+    }
+}
+
+kernel void kernel_cpy_f16_f32(
+        device  const half * src0,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant   int64_t & ne3,
+        constant  uint64_t & nb0,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        constant  uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig[2];
+    const int64_t i02 = tgpig[1];
+    const int64_t i01 = tgpig[0];
+
+    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
+
+    const int64_t i3 = n / (ne2*ne1*ne0);
+    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
+    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
+    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0);
+
+    device float * dst_data = (device float *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+    for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) {
+        device const half * src = (device half *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+        dst_data[i00] = src[0];
+    }
+}
+
+kernel void kernel_cpy_f32_f16(
+        device const float * src0,
+        device        half * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant   int64_t & ne3,
+        constant  uint64_t & nb0,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        constant  uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig[2];
+    const int64_t i02 = tgpig[1];
+    const int64_t i01 = tgpig[0];
+
+    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
+
+    const int64_t i3 = n / (ne2*ne1*ne0);
+    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
+    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
+    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0);
+
+    device half * dst_data = (device half *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+    for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) {
+        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+
+        dst_data[i00] = src[0];
+    }
+}
+
+kernel void kernel_cpy_f32_f32(
+        device const float * src0,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant   int64_t & ne3,
+        constant  uint64_t & nb0,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        constant  uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig[2];
+    const int64_t i02 = tgpig[1];
+    const int64_t i01 = tgpig[0];
+
+    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
+
+    const int64_t i3 = n / (ne2*ne1*ne0);
+    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
+    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
+    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0);
+
+    device float * dst_data = (device float *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+    for (int64_t i00 = tpitg.x; i00 < ne00; i00 += ntg.x) {
+        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+
+        dst_data[i00] = src[0];
+    }
+}
+
+kernel void kernel_cpy_f32_q8_0(
+        device const float * src0,
+        device        void * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant   int64_t & ne3,
+        constant  uint64_t & nb0,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        constant  uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig[2];
+    const int64_t i02 = tgpig[1];
+    const int64_t i01 = tgpig[0];
+
+    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
+
+    const int64_t i3 = n / (ne2*ne1*ne0);
+    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
+    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
+    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK8_0;
+
+    device block_q8_0 * dst_data = (device block_q8_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+    for (int64_t i00 = tpitg.x*QK8_0; i00 < ne00; i00 += ntg.x*QK8_0) {
+        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+
+        float amax = 0.0f; // absolute max
+
+        for (int j = 0; j < QK8_0; j++) {
+            const float v = src[j];
+            amax = MAX(amax, fabs(v));
+        }
+
+        const float d = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        dst_data[i00/QK8_0].d = d;
+
+        for (int j = 0; j < QK8_0; ++j) {
+            const float x0 = src[j]*id;
+
+            dst_data[i00/QK8_0].qs[j] = round(x0);
+        }
+    }
+}
+
+kernel void kernel_cpy_f32_q4_0(
+        device const float * src0,
+        device        void * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant   int64_t & ne3,
+        constant  uint64_t & nb0,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        constant  uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig[2];
+    const int64_t i02 = tgpig[1];
+    const int64_t i01 = tgpig[0];
+
+    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
+
+    const int64_t i3 = n / (ne2*ne1*ne0);
+    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
+    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
+    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_0;
+
+    device block_q4_0 * dst_data = (device block_q4_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+    for (int64_t i00 = tpitg.x*QK4_0; i00 < ne00; i00 += ntg.x*QK4_0) {
+        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+
+        float amax = 0.0f; // absolute max
+        float max  = 0.0f;
+
+        for (int j = 0; j < QK4_0; j++) {
+            const float v = src[j];
+            if (amax < fabs(v)) {
+                amax = fabs(v);
+                max  = v;
+            }
+        }
+
+        const float d = max / -8;
+        const float id = d ? 1.0f/d : 0.0f;
+
+        dst_data[i00/QK4_0].d = d;
+
+        for (int j = 0; j < QK4_0/2; ++j) {
+            const float x0 = src[0       + j]*id;
+            const float x1 = src[QK4_0/2 + j]*id;
+
+            const uint8_t xi0 = MIN(15, (int8_t)(x0 + 8.5f));
+            const uint8_t xi1 = MIN(15, (int8_t)(x1 + 8.5f));
+
+            dst_data[i00/QK4_0].qs[j]  = xi0;
+            dst_data[i00/QK4_0].qs[j] |= xi1 << 4;
+        }
+    }
+}
+
+kernel void kernel_cpy_f32_q4_1(
+        device const float * src0,
+        device        void * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant   int64_t & ne3,
+        constant  uint64_t & nb0,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        constant  uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig[2];
+    const int64_t i02 = tgpig[1];
+    const int64_t i01 = tgpig[0];
+
+    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
+
+    const int64_t i3 = n / (ne2*ne1*ne0);
+    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
+    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
+    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_1;
+
+    device block_q4_1 * dst_data = (device block_q4_1 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+    for (int64_t i00 = tpitg.x*QK4_1; i00 < ne00; i00 += ntg.x*QK4_1) {
+        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+
+        float min = FLT_MAX;
+        float max = -FLT_MAX;
+
+        for (int j = 0; j < QK4_1; j++) {
+            const float v = src[j];
+            if (min > v) min = v;
+            if (max < v) max = v;
+        }
+
+        const float d = (max - min) / ((1 << 4) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        dst_data[i00/QK4_1].d = d;
+        dst_data[i00/QK4_1].m = min;
+
+        for (int j = 0; j < QK4_1/2; ++j) {
+            const float x0 = (src[0       + j] - min)*id;
+            const float x1 = (src[QK4_1/2 + j] - min)*id;
+
+            const uint8_t xi0 = MIN(15, (int8_t)(x0 + 0.5f));
+            const uint8_t xi1 = MIN(15, (int8_t)(x1 + 0.5f));
+
+            dst_data[i00/QK4_1].qs[j]  = xi0;
+            dst_data[i00/QK4_1].qs[j] |= xi1 << 4;
+        }
+    }
+}
+
+kernel void kernel_cpy_f32_q5_0(
+        device const float * src0,
+        device        void * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant   int64_t & ne3,
+        constant  uint64_t & nb0,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        constant  uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig[2];
+    const int64_t i02 = tgpig[1];
+    const int64_t i01 = tgpig[0];
+
+    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
+
+    const int64_t i3 = n / (ne2*ne1*ne0);
+    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
+    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
+    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK5_0;
+
+    device block_q5_0 * dst_data = (device block_q5_0 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+    for (int64_t i00 = tpitg.x*QK5_0; i00 < ne00; i00 += ntg.x*QK5_0) {
+        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+
+        float amax = 0.0f; // absolute max
+        float max  = 0.0f;
+
+        for (int j = 0; j < QK5_0; j++) {
+            const float v = src[j];
+            if (amax < fabs(v)) {
+                amax = fabs(v);
+                max  = v;
+            }
+        }
+
+        const float d = max / -16;
+        const float id = d ? 1.0f/d : 0.0f;
+
+        dst_data[i00/QK5_0].d = d;
+
+        uint32_t qh = 0;
+        for (int j = 0; j < QK5_0/2; ++j) {
+            const float x0 = src[0       + j]*id;
+            const float x1 = src[QK5_0/2 + j]*id;
+
+            const uint8_t xi0 = MIN(31, (int8_t)(x0 + 16.5f));
+            const uint8_t xi1 = MIN(31, (int8_t)(x1 + 16.5f));
+
+            dst_data[i00/QK5_0].qs[j] = (xi0 & 0xf) | ((xi1 & 0xf) << 4);
+            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
+            qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2);
+        }
+        thread const uint8_t * qh8 = (thread const uint8_t *)&qh;
+        for (int j = 0; j < 4; ++j) {
+            dst_data[i00/QK5_0].qh[j] = qh8[j];
+        }
+    }
+}
+
+kernel void kernel_cpy_f32_q5_1(
+        device const float * src0,
+        device        void * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant   int64_t & ne3,
+        constant  uint64_t & nb0,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        constant  uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig[2];
+    const int64_t i02 = tgpig[1];
+    const int64_t i01 = tgpig[0];
+
+    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
+
+    const int64_t i3 = n / (ne2*ne1*ne0);
+    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
+    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
+    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK5_1;
+
+    device block_q5_1 * dst_data = (device block_q5_1 *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+    for (int64_t i00 = tpitg.x*QK5_1; i00 < ne00; i00 += ntg.x*QK5_1) {
+        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+
+        float max = src[0];
+        float min = src[0];
+
+        for (int j = 1; j < QK5_1; j++) {
+            const float v = src[j];
+            min = v < min ? v : min;
+            max = v > max ? v : max;
+        }
+
+        const float d = (max - min) / 31;
+        const float id = d ? 1.0f/d : 0.0f;
+
+        dst_data[i00/QK5_1].d = d;
+        dst_data[i00/QK5_1].m = min;
+
+        uint32_t qh = 0;
+        for (int j = 0; j < QK5_1/2; ++j) {
+            const float x0 = (src[0       + j] - min)*id;
+            const float x1 = (src[QK5_1/2 + j] - min)*id;
+
+            const uint8_t xi0 = (uint8_t)(x0 + 0.5f);
+            const uint8_t xi1 = (uint8_t)(x1 + 0.5f);
+
+            dst_data[i00/QK5_1].qs[j] = (xi0 & 0xf) | ((xi1 & 0xf) << 4);
+            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
+            qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_1/2);
+        }
+        thread const uint8_t * qh8 = (thread const uint8_t *)&qh;
+        for (int j = 0; j < 4; ++j) {
+            dst_data[i00/QK5_1].qh[j] = qh8[j];
+        }
+    }
+}
+
+static inline int best_index_int8(int n, constant float * val, float x) {
+    if (x <= val[0]) return 0;
+    if (x >= val[n-1]) return n-1;
+    int ml = 0, mu = n-1;
+    while (mu-ml > 1) {
+        int mav = (ml+mu)/2;
+        if (x < val[mav]) mu = mav; else ml = mav;
+    }
+    return x - val[mu-1] < val[mu] - x ? mu-1 : mu;
+}
+
+constexpr constant static float kvalues_iq4nl_f[16] = {
+    -127.f, -104.f, -83.f, -65.f, -49.f, -35.f, -22.f, -10.f, 1.f, 13.f, 25.f, 38.f, 53.f, 69.f, 89.f, 113.f
+};
+
+kernel void kernel_cpy_f32_iq4_nl(
+        device const float * src0,
+        device        void * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant   int64_t & ne03,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant  uint64_t & nb03,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   int64_t & ne2,
+        constant   int64_t & ne3,
+        constant  uint64_t & nb0,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        constant  uint64_t & nb3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint3 tpitg[[thread_position_in_threadgroup]],
+        uint3   ntg[[threads_per_threadgroup]]) {
+    const int64_t i03 = tgpig[2];
+    const int64_t i02 = tgpig[1];
+    const int64_t i01 = tgpig[0];
+
+    const int64_t n = i03*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00;
+
+    const int64_t i3 = n / (ne2*ne1*ne0);
+    const int64_t i2 = (n - i3*ne2*ne1*ne0) / (ne1*ne0);
+    const int64_t i1 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0) / ne0;
+    const int64_t i0 = (n - i3*ne2*ne1*ne0 - i2*ne1*ne0 - i1*ne0)/QK4_NL;
+
+    device block_iq4_nl * dst_data = (device block_iq4_nl *) ((device char *) dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+    for (int64_t i00 = tpitg.x*QK4_NL; i00 < ne00; i00 += ntg.x*QK4_NL) {
+        device const float * src = (device float *)((device char *) src0 + i03*nb03 + i02*nb02 + i01*nb01 + i00*nb00);
+
+        float amax = 0.0f; // absolute max
+        float max  = 0.0f;
+
+        for (int j = 0; j < QK4_0; j++) {
+            const float v = src[j];
+            if (amax < fabs(v)) {
+                amax = fabs(v);
+                max  = v;
+            }
+        }
+
+        const float d = max / kvalues_iq4nl_f[0];
+        const float id = d ? 1.0f/d : 0.0f;
+
+        float sumqx = 0, sumq2 = 0;
+        for (int j = 0; j < QK4_NL/2; ++j) {
+            const float x0 = src[0        + j]*id;
+            const float x1 = src[QK4_NL/2 + j]*id;
+
+            const uint8_t xi0 = best_index_int8(16, kvalues_iq4nl_f, x0);
+            const uint8_t xi1 = best_index_int8(16, kvalues_iq4nl_f, x1);
+
+            dst_data[i00/QK4_NL].qs[j] = xi0 | (xi1 << 4);
+
+            const float v0 = kvalues_iq4nl_f[xi0];
+            const float v1 = kvalues_iq4nl_f[xi1];
+            const float w0 = src[0        + j]*src[0        + j];
+            const float w1 = src[QK4_NL/2 + j]*src[QK4_NL/2 + j];
+            sumqx += w0*v0*src[j] + w1*v1*src[QK4_NL/2 + j];
+            sumq2 += w0*v0*v0 + w1*v1*v1;
+
+        }
+
+        dst_data[i00/QK4_NL].d = sumq2 > 0 ? sumqx/sumq2 : d;
+
+    }
+}
+
+kernel void kernel_concat(
+    device  const char * src0,
+    device  const char * src1,
+    device        char * dst,
+    constant   int64_t & ne00,
+    constant   int64_t & ne01,
+    constant   int64_t & ne02,
+    constant   int64_t & ne03,
+    constant  uint64_t & nb00,
+    constant  uint64_t & nb01,
+    constant  uint64_t & nb02,
+    constant  uint64_t & nb03,
+    constant   int64_t & ne10,
+    constant   int64_t & ne11,
+    constant   int64_t & ne12,
+    constant   int64_t & ne13,
+    constant  uint64_t & nb10,
+    constant  uint64_t & nb11,
+    constant  uint64_t & nb12,
+    constant  uint64_t & nb13,
+    constant   int64_t & ne0,
+    constant   int64_t & ne1,
+    constant   int64_t & ne2,
+    constant   int64_t & ne3,
+    constant  uint64_t & nb0,
+    constant  uint64_t & nb1,
+    constant  uint64_t & nb2,
+    constant  uint64_t & nb3,
+    constant   int32_t & dim,
+    uint3 tgpig[[threadgroup_position_in_grid]],
+    uint3 tpitg[[thread_position_in_threadgroup]],
+    uint3   ntg[[threads_per_threadgroup]]) {
+
+    const int64_t i3 = tgpig.z;
+    const int64_t i2 = tgpig.y;
+    const int64_t i1 = tgpig.x;
+
+    int64_t o[4] = {0, 0, 0, 0};
+    o[dim] = dim == 0 ? ne00 : (dim == 1 ? ne01 : (dim == 2 ? ne02 : ne03));
+
+    device const float * x;
+
+    for (int i0 = tpitg.x; i0 < ne0; i0 += ntg.x) {
+        if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) {
+            x = (device const float *)(src0 + (i3       )*nb03 + (i2       )*nb02 + (i1       )*nb01 + (i0       )*nb00);
+        } else {
+            x = (device const float *)(src1 + (i3 - o[3])*nb13 + (i2 - o[2])*nb12 + (i1 - o[1])*nb11 + (i0 - o[0])*nb10);
+        }
+
+        device float * y = (device float *)(dst + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0);
+
+        *y = *x;
+    }
+}
+
+void kernel_mul_mv_q2_K_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const int nb = ne00/QK_K;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_q2_K * x = (device const block_q2_K *) src0 + ib_row + offset0;
+    device const float      * y = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[32];
+    float sumf[N_DST]={0.f}, all_sum;
+
+    const int step = sizeof(block_q2_K) * nb;
+
+    const int ix = tiisg/8;  // 0...3
+    const int it = tiisg%8;  // 0...7
+    const int iq = it/4;     // 0 or 1
+    const int ir = it%4;     // 0...3
+    const int is = (8*ir)/16;// 0 or 1
+
+    device const float * y4 = y + ix * QK_K + 128 * iq + 8 * ir;
+
+    for (int ib = ix; ib < nb; ib += 4) {
+
+        float4 sumy = {0.f, 0.f, 0.f, 0.f};
+        for (int i = 0; i < 8; ++i) {
+            yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0];
+            yl[i+ 8] = y4[i+32]; sumy[1] += yl[i+ 8];
+            yl[i+16] = y4[i+64]; sumy[2] += yl[i+16];
+            yl[i+24] = y4[i+96]; sumy[3] += yl[i+24];
+        }
+
+        device const uint8_t  * sc = (device const uint8_t  *)x[ib].scales + 8*iq + is;
+        device const uint16_t * qs = (device const uint16_t *)x[ib].qs + 16 * iq + 4 * ir;
+        device const half     * dh = &x[ib].d;
+
+        for (int row = 0; row < N_DST; row++) {
+
+            float4 acc1 = {0.f, 0.f, 0.f, 0.f};
+            float4 acc2 = {0.f, 0.f, 0.f, 0.f};
+            for (int i = 0; i < 8; i += 2) {
+                acc1[0] += yl[i+ 0] * (qs[i/2] & 0x0003);
+                acc2[0] += yl[i+ 1] * (qs[i/2] & 0x0300);
+                acc1[1] += yl[i+ 8] * (qs[i/2] & 0x000c);
+                acc2[1] += yl[i+ 9] * (qs[i/2] & 0x0c00);
+                acc1[2] += yl[i+16] * (qs[i/2] & 0x0030);
+                acc2[2] += yl[i+17] * (qs[i/2] & 0x3000);
+                acc1[3] += yl[i+24] * (qs[i/2] & 0x00c0);
+                acc2[3] += yl[i+25] * (qs[i/2] & 0xc000);
+            }
+            float dall = dh[0];
+            float dmin = dh[1] * 1.f/16.f;
+            sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc2[0]) * (sc[0] & 0xF) * 1.f/ 1.f +
+                                 (acc1[1] + 1.f/256.f * acc2[1]) * (sc[2] & 0xF) * 1.f/ 4.f +
+                                 (acc1[2] + 1.f/256.f * acc2[2]) * (sc[4] & 0xF) * 1.f/16.f +
+                                 (acc1[3] + 1.f/256.f * acc2[3]) * (sc[6] & 0xF) * 1.f/64.f) -
+                         dmin * (sumy[0] * (sc[0] & 0xF0) + sumy[1] * (sc[2] & 0xF0) + sumy[2] * (sc[4] & 0xF0) + sumy[3] * (sc[6] & 0xF0));
+
+            qs += step/2;
+            sc += step;
+            dh += step/2;
+        }
+
+        y4 += 4 * QK_K;
+    }
+
+    for (int row = 0; row < N_DST; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_q2_K_f32")]]
+kernel void kernel_mul_mv_q2_K_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_q2_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
+}
+
+void kernel_mul_mv_q3_K_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const int nb = ne00/QK_K;
+
+    const int64_t r0 = tgpig.x;
+    const int64_t r1 = tgpig.y;
+    const int64_t im = tgpig.z;
+
+    const int first_row = (r0 * N_SIMDGROUP + sgitg) * 2;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_q3_K * x = (device const block_q3_K *) src0 + first_row*nb + offset0;
+    device const float     * yy = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[32];
+
+    //const uint16_t kmask1 = 0x3030;
+    //const uint16_t kmask2 = 0x0f0f;
+
+    const int tid = tiisg/4;
+    const int ix  = tiisg%4;
+    const int ip  = tid/4;          // 0 or 1
+    const int il  = 2*((tid%4)/2);  // 0 or 2
+    const int ir  = tid%2;
+    const int n   = 8;
+    const int l0  = n*ir;
+
+    // One would think that the Metal compiler would figure out that ip and il can only have
+    // 4 possible states, and optimize accordingly. Well, no. It needs help, and we do it
+    // with these two tales.
+    //
+    // Possible masks for the high bit
+    const ushort4 mm[4] = {{0x0001, 0x0100, 0x0002, 0x0200},  // ip = 0, il = 0
+                           {0x0004, 0x0400, 0x0008, 0x0800},  // ip = 0, il = 2
+                           {0x0010, 0x1000, 0x0020, 0x2000},  // ip = 1, il = 0
+                           {0x0040, 0x4000, 0x0080, 0x8000}}; // ip = 1, il = 2
+
+    // Possible masks for the low 2 bits
+    const int4 qm[2] = {{0x0003, 0x0300, 0x000c, 0x0c00}, {0x0030, 0x3000, 0x00c0, 0xc000}};
+
+    const ushort4 hm = mm[2*ip + il/2];
+
+    const int shift = 2*il;
+    const float    v1 = il == 0 ? 4.f : 64.f;
+    const float    v2 = 4.f * v1;
+
+    const uint16_t s_shift1 = 4*ip;
+    const uint16_t s_shift2 = s_shift1 + il;
+
+    const int q_offset = 32*ip + l0;
+    const int y_offset = 128*ip + 32*il + l0;
+
+    const int step = sizeof(block_q3_K) * nb / 2;
+
+    device const float * y1 = yy + ix*QK_K + y_offset;
+
+    uint32_t scales32, aux32;
+    thread uint16_t * scales16 = (thread uint16_t *)&scales32;
+    thread const int8_t * scales = (thread const int8_t *)&scales32;
+
+    float sumf1[2] = {0.f};
+    float sumf2[2] = {0.f};
+    for (int i = ix; i < nb; i += 4) {
+
+        for (int l = 0; l < 8; ++l) {
+            yl[l+ 0] = y1[l+ 0];
+            yl[l+ 8] = y1[l+16];
+            yl[l+16] = y1[l+32];
+            yl[l+24] = y1[l+48];
+        }
+
+        device const uint16_t * q = (device const uint16_t *)(x[i].qs + q_offset);
+        device const uint16_t * h = (device const uint16_t *)(x[i].hmask + l0);
+        device const uint16_t * a = (device const uint16_t *)(x[i].scales);
+        device const half * dh = &x[i].d;
+
+        for (int row = 0; row < 2; ++row) {
+
+            const float d_all = (float)dh[0];
+
+            scales16[0] = a[4];
+            scales16[1] = a[5];
+            aux32 = ((scales32 >> s_shift2) << 4) & 0x30303030;
+            scales16[0] = a[il+0];
+            scales16[1] = a[il+1];
+            scales32 = ((scales32 >> s_shift1) & 0x0f0f0f0f) | aux32;
+
+            float s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0;
+            for (int l = 0; l < n; l += 2) {
+                const int32_t qs = q[l/2];
+                s1 += yl[l+0] * (qs & qm[il/2][0]);
+                s2 += yl[l+1] * (qs & qm[il/2][1]);
+                s3 += ((h[l/2] & hm[0]) ? 0.f : yl[l+0]) + ((h[l/2] & hm[1]) ? 0.f : yl[l+1]);
+                s4 += yl[l+16] * (qs & qm[il/2][2]);
+                s5 += yl[l+17] * (qs & qm[il/2][3]);
+                s6 += ((h[l/2] & hm[2]) ? 0.f : yl[l+16]) + ((h[l/2] & hm[3]) ? 0.f : yl[l+17]);
+            }
+            float d1 = d_all * (s1 + 1.f/256.f * s2 - s3*v1);
+            float d2 = d_all * (s4 + 1.f/256.f * s5 - s6*v2);
+            sumf1[row] += d1 * (scales[0] - 32);
+            sumf2[row] += d2 * (scales[2] - 32);
+
+            s1 = s2 = s3 = s4 = s5 = s6 = 0;
+            for (int l = 0; l < n; l += 2) {
+                const int32_t qs = q[l/2+8];
+                s1 += yl[l+8] * (qs & qm[il/2][0]);
+                s2 += yl[l+9] * (qs & qm[il/2][1]);
+                s3 += ((h[l/2+8] & hm[0]) ? 0.f : yl[l+8]) + ((h[l/2+8] & hm[1]) ? 0.f : yl[l+9]);
+                s4 += yl[l+24] * (qs & qm[il/2][2]);
+                s5 += yl[l+25] * (qs & qm[il/2][3]);
+                s6 += ((h[l/2+8] & hm[2]) ? 0.f : yl[l+24]) + ((h[l/2+8] & hm[3]) ? 0.f : yl[l+25]);
+            }
+            d1 = d_all * (s1 + 1.f/256.f * s2 - s3*v1);
+            d2 = d_all * (s4 + 1.f/256.f * s5 - s6*v2);
+            sumf1[row] += d1 * (scales[1] - 32);
+            sumf2[row] += d2 * (scales[3] - 32);
+
+            q  += step;
+            h  += step;
+            a  += step;
+            dh += step;
+
+        }
+
+        y1 += 4 * QK_K;
+
+    }
+
+    for (int row = 0; row < 2; ++row) {
+        const float sumf = (sumf1[row] + 0.25f * sumf2[row]) / (1 << shift);
+        sumf1[row] = simd_sum(sumf);
+    }
+    if (tiisg == 0) {
+        for (int row = 0; row < 2; ++row) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = sumf1[row];
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_q3_K_f32")]]
+kernel void kernel_mul_mv_q3_K_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_q3_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
+}
+
+void kernel_mul_mv_q4_K_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const uint16_t kmask1 = 0x3f3f;
+    const uint16_t kmask2 = 0x0f0f;
+    const uint16_t kmask3 = 0xc0c0;
+
+    const int ix = tiisg/8;  // 0...3
+    const int it = tiisg%8;  // 0...7
+    const int iq = it/4;     // 0 or 1
+    const int ir = it%4;     // 0...3
+
+    const int nb = ne00/QK_K;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+    //const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
+    const int first_row = r0 * N_DST;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_q4_K * x = (device const block_q4_K *) src0 + ib_row + offset0;
+    device const float      * y = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[16];
+    float yh[16];
+    float sumf[N_DST]={0.f}, all_sum;
+
+    const int step = sizeof(block_q4_K) * nb / 2;
+
+    device const float * y4 = y + ix * QK_K + 64 * iq + 8 * ir;
+
+    uint16_t sc16[4];
+    thread const uint8_t * sc8 = (thread const uint8_t *)sc16;
+
+    for (int ib = ix; ib < nb; ib += 4) {
+
+        float4 sumy = {0.f, 0.f, 0.f, 0.f};
+        for (int i = 0; i < 8; ++i) {
+            yl[i+0] = y4[i+  0]; sumy[0] += yl[i+0];
+            yl[i+8] = y4[i+ 32]; sumy[1] += yl[i+8];
+            yh[i+0] = y4[i+128]; sumy[2] += yh[i+0];
+            yh[i+8] = y4[i+160]; sumy[3] += yh[i+8];
+        }
+
+        device const uint16_t * sc = (device const uint16_t *)x[ib].scales + iq;
+        device const uint16_t * q1 = (device const uint16_t *)x[ib].qs + 16 * iq + 4 * ir;
+        device const half     * dh = &x[ib].d;
+
+        for (int row = 0; row < N_DST; row++) {
+
+            sc16[0] = sc[0] & kmask1;
+            sc16[1] = sc[2] & kmask1;
+            sc16[2] = ((sc[4] >> 0) & kmask2) | ((sc[0] & kmask3) >> 2);
+            sc16[3] = ((sc[4] >> 4) & kmask2) | ((sc[2] & kmask3) >> 2);
+
+            device const uint16_t * q2 = q1 + 32;
+
+            float4 acc1 = {0.f, 0.f, 0.f, 0.f};
+            float4 acc2 = {0.f, 0.f, 0.f, 0.f};
+            for (int i = 0; i < 8; i += 2) {
+                acc1[0] += yl[i+0] * (q1[i/2] & 0x000F);
+                acc1[1] += yl[i+1] * (q1[i/2] & 0x0F00);
+                acc1[2] += yl[i+8] * (q1[i/2] & 0x00F0);
+                acc1[3] += yl[i+9] * (q1[i/2] & 0xF000);
+                acc2[0] += yh[i+0] * (q2[i/2] & 0x000F);
+                acc2[1] += yh[i+1] * (q2[i/2] & 0x0F00);
+                acc2[2] += yh[i+8] * (q2[i/2] & 0x00F0);
+                acc2[3] += yh[i+9] * (q2[i/2] & 0xF000);
+            }
+
+            float dall = dh[0];
+            float dmin = dh[1];
+            sumf[row] += dall * ((acc1[0] + 1.f/256.f * acc1[1]) * sc8[0] +
+                                 (acc1[2] + 1.f/256.f * acc1[3]) * sc8[1] * 1.f/16.f +
+                                 (acc2[0] + 1.f/256.f * acc2[1]) * sc8[4] +
+                                 (acc2[2] + 1.f/256.f * acc2[3]) * sc8[5] * 1.f/16.f) -
+                         dmin * (sumy[0] * sc8[2] + sumy[1] * sc8[3] + sumy[2] * sc8[6] + sumy[3] * sc8[7]);
+
+            q1 += step;
+            sc += step;
+            dh += step;
+        }
+
+        y4 += 4 * QK_K;
+    }
+
+    for (int row = 0; row < N_DST; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_q4_K_f32")]]
+kernel void kernel_mul_mv_q4_K_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint tiisg[[thread_index_in_simdgroup]],
+        uint sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_q4_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
+}
+
+void kernel_mul_mv_q5_K_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const int nb = ne00/QK_K;
+
+    const int64_t r0 = tgpig.x;
+    const int64_t r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * N_SIMDGROUP + sgitg) * 2;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_q5_K * x = (device const block_q5_K *) src0 + first_row*nb + offset0;
+    device const float     * yy = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float sumf[2]={0.f};
+
+    const int step = sizeof(block_q5_K) * nb;
+
+    float yl[16], yh[16];
+
+    const uint16_t kmask1 = 0x3f3f;
+    const uint16_t kmask2 = 0x0f0f;
+    const uint16_t kmask3 = 0xc0c0;
+
+    const int tid = tiisg/4;
+    const int ix  = tiisg%4;
+    const int iq  = tid/4;
+    const int ir  = tid%4;
+    const int n   = 8;
+
+    const int l0 = n*ir;
+    const int q_offset = 32*iq + l0;
+    const int y_offset = 64*iq + l0;
+
+    const uint8_t hm1 = 1u << (2*iq);
+    const uint8_t hm2 = hm1 << 1;
+    const uint8_t hm3 = hm1 << 4;
+    const uint8_t hm4 = hm2 << 4;
+
+    uint16_t sc16[4];
+    thread const uint8_t * sc8 = (thread const uint8_t *)sc16;
+
+    device const float * y1 = yy + ix*QK_K + y_offset;
+
+    for (int i = ix; i < nb; i += 4) {
+
+        device const uint8_t * q1 = x[i].qs + q_offset;
+        device const uint8_t * qh = x[i].qh + l0;
+        device const half * dh = &x[i].d;
+        device const uint16_t * a = (device const uint16_t *)x[i].scales + iq;
+
+        device const float * y2 = y1 + 128;
+        float4 sumy = {0.f, 0.f, 0.f, 0.f};
+        for (int l = 0; l < 8; ++l) {
+            yl[l+0] = y1[l+ 0]; sumy[0] += yl[l+0];
+            yl[l+8] = y1[l+32]; sumy[1] += yl[l+8];
+            yh[l+0] = y2[l+ 0]; sumy[2] += yh[l+0];
+            yh[l+8] = y2[l+32]; sumy[3] += yh[l+8];
+        }
+
+        for (int row = 0; row < 2; ++row) {
+
+            device const uint8_t * q2 = q1 + 64;
+
+            sc16[0] = a[0] & kmask1;
+            sc16[1] = a[2] & kmask1;
+            sc16[2] = ((a[4] >> 0) & kmask2) | ((a[0] & kmask3) >> 2);
+            sc16[3] = ((a[4] >> 4) & kmask2) | ((a[2] & kmask3) >> 2);
+
+            float4 acc1 = {0.f};
+            float4 acc2 = {0.f};
+            for (int l = 0; l < n; ++l) {
+                uint8_t h = qh[l];
+                acc1[0] += yl[l+0] * (q1[l] & 0x0F);
+                acc1[1] += yl[l+8] * (q1[l] & 0xF0);
+                acc1[2] += yh[l+0] * (q2[l] & 0x0F);
+                acc1[3] += yh[l+8] * (q2[l] & 0xF0);
+                acc2[0] += h & hm1 ? yl[l+0] : 0.f;
+                acc2[1] += h & hm2 ? yl[l+8] : 0.f;
+                acc2[2] += h & hm3 ? yh[l+0] : 0.f;
+                acc2[3] += h & hm4 ? yh[l+8] : 0.f;
+            }
+            const float dall = dh[0];
+            const float dmin = dh[1];
+            sumf[row] += dall * (sc8[0] * (acc1[0] +  16.f*acc2[0]) +
+                                 sc8[1] * (acc1[1]/16.f + 16.f*acc2[1]) +
+                                 sc8[4] * (acc1[2] +  16.f*acc2[2]) +
+                                 sc8[5] * (acc1[3]/16.f + 16.f*acc2[3])) -
+                         dmin * (sumy[0] * sc8[2] + sumy[1] * sc8[3] + sumy[2] * sc8[6] + sumy[3] * sc8[7]);
+
+            q1 += step;
+            qh += step;
+            dh += step/2;
+            a  += step/2;
+
+        }
+
+        y1 += 4 * QK_K;
+
+    }
+
+    for (int row = 0; row < 2; ++row) {
+        const float tot = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_q5_K_f32")]]
+kernel void kernel_mul_mv_q5_K_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_q5_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
+}
+
+void kernel_mul_mv_q6_K_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const uint8_t kmask1 = 0x03;
+    const uint8_t kmask2 = 0x0C;
+    const uint8_t kmask3 = 0x30;
+    const uint8_t kmask4 = 0xC0;
+
+    const int nb = ne00/QK_K;
+
+    const int64_t r0 = tgpig.x;
+    const int64_t r1 = tgpig.y;
+    const int     im = tgpig.z;
+
+    const int row = 2 * r0 + sgitg;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_q6_K * x = (device const block_q6_K *) src0 + row * nb + offset0;
+    device const float     * yy = (device const float      *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float sumf = 0;
+
+    const int tid  = tiisg/2;
+    const int ix   = tiisg%2;
+    const int ip   = tid/8;         // 0 or 1
+    const int il   = tid%8;
+    const int n    = 4;
+    const int l0   = n*il;
+    const int is   = 8*ip + l0/16;
+
+    const int y_offset = 128*ip + l0;
+    const int q_offset_l = 64*ip + l0;
+    const int q_offset_h = 32*ip + l0;
+
+    for (int i = ix; i < nb; i += 2) {
+
+        device const uint8_t * q1 = x[i].ql + q_offset_l;
+        device const uint8_t * q2 = q1 + 32;
+        device const uint8_t * qh = x[i].qh + q_offset_h;
+        device const int8_t  * sc = x[i].scales + is;
+
+        device const float * y = yy + i * QK_K + y_offset;
+
+        const float dall = x[i].d;
+
+        float4 sums = {0.f, 0.f, 0.f, 0.f};
+        for (int l = 0; l < n; ++l) {
+            sums[0] += y[l+ 0] * ((int8_t)((q1[l] & 0xF) | ((qh[l] & kmask1) << 4)) - 32);
+            sums[1] += y[l+32] * ((int8_t)((q2[l] & 0xF) | ((qh[l] & kmask2) << 2)) - 32);
+            sums[2] += y[l+64] * ((int8_t)((q1[l]  >> 4) | ((qh[l] & kmask3) << 0)) - 32);
+            sums[3] += y[l+96] * ((int8_t)((q2[l]  >> 4) | ((qh[l] & kmask4) >> 2)) - 32);
+        }
+
+        sumf += dall * (sums[0] * sc[0] + sums[1] * sc[2] + sums[2] * sc[4] + sums[3] * sc[6]);
+
+    }
+
+    const float tot = simd_sum(sumf);
+    if (tiisg == 0) {
+        dst[r1*ne0 + im*ne0*ne1 + row] = tot;
+    }
+}
+
+[[host_name("kernel_mul_mv_q6_K_f32")]]
+kernel void kernel_mul_mv_q6_K_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_q6_K_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
+}
+
+// ======================= "True" 2-bit
+
+void kernel_mul_mv_iq2_xxs_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const int nb = ne00/QK_K;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_iq2_xxs * x = (device const block_iq2_xxs *) src0 + ib_row + offset0;
+    device const float         * y = (device const float         *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[32];
+    float sumf[N_DST]={0.f}, all_sum;
+
+    const int nb32 = nb * (QK_K / 32);
+
+    threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values;
+    threadgroup uint8_t  * shared_signs = (threadgroup uint8_t *)(values + 256);
+    {
+        int nval = 4;
+        int pos  = (32*sgitg + tiisg)*nval;
+        for (int i = 0; i < nval; ++i) values[pos + i] = iq2xxs_grid[pos + i];
+        nval = 2;
+        pos  = (32*sgitg + tiisg)*nval;
+        for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i];
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+    }
+
+    const int ix = tiisg;
+
+    device const float * y4 = y + 32 * ix;
+
+    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
+
+        for (int i = 0; i < 32; ++i) {
+            yl[i] = y4[i];
+        }
+
+        const int ibl = ib32 / (QK_K / 32);
+        const int ib  = ib32 % (QK_K / 32);
+
+        device const block_iq2_xxs * xr = x + ibl;
+        device const uint16_t * q2 = xr->qs + 4 * ib;
+        device const half * dh = &xr->d;
+
+        for (int row = 0; row < N_DST; row++) {
+
+            const float db = dh[0];
+            device const uint8_t * aux8 = (device const uint8_t *)q2;
+            const uint32_t aux32 = q2[2] | (q2[3] << 16);
+            const float d = db * (0.5f + (aux32 >> 28));
+
+            float sum = 0;
+            for (int l = 0; l < 4; ++l) {
+                const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + aux8[l]);
+                const uint8_t signs = shared_signs[(aux32 >> 7*l) & 127];
+                for (int j = 0; j < 8; ++j) {
+                    sum += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
+                }
+            }
+            sumf[row] += d * sum;
+
+            dh += nb*sizeof(block_iq2_xxs)/2;
+            q2 += nb*sizeof(block_iq2_xxs)/2;
+        }
+
+        y4 += 32 * 32;
+    }
+
+    for (int row = 0; row < N_DST; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_iq2_xxs_f32")]]
+kernel void kernel_mul_mv_iq2_xxs_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        threadgroup int8_t * shared_values [[threadgroup(0)]],
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_iq2_xxs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
+}
+
+void kernel_mul_mv_iq2_xs_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const int nb = ne00/QK_K;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_iq2_xs * x = (device const block_iq2_xs *) src0 + ib_row + offset0;
+    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[32];
+    float sumf[N_DST]={0.f}, all_sum;
+
+    const int nb32 = nb * (QK_K / 32);
+
+    threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values;
+    threadgroup uint8_t  * shared_signs = (threadgroup uint8_t *)(values + 512);
+    {
+        int nval = 8;
+        int pos  = (32*sgitg + tiisg)*nval;
+        for (int i = 0; i < nval; ++i) values[pos + i] = iq2xs_grid[pos + i];
+        nval = 2;
+        pos  = (32*sgitg + tiisg)*nval;
+        for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i];
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+    }
+
+    const int ix = tiisg;
+
+    device const float * y4 = y + 32 * ix;
+
+    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
+
+        for (int i = 0; i < 32; ++i) {
+            yl[i] = y4[i];
+        }
+
+        const int ibl = ib32 / (QK_K / 32);
+        const int ib  = ib32 % (QK_K / 32);
+
+        device const block_iq2_xs * xr = x + ibl;
+        device const uint16_t * q2 = xr->qs + 4 * ib;
+        device const uint8_t  * sc = xr->scales + ib;
+        device const half * dh = &xr->d;
+
+        for (int row = 0; row < N_DST; row++) {
+
+            const float db = dh[0];
+            const uint8_t ls1 = sc[0] & 0xf;
+            const uint8_t ls2 = sc[0] >>  4;
+            const float d1 = db * (0.5f + ls1);
+            const float d2 = db * (0.5f + ls2);
+
+            float sum1 = 0, sum2 = 0;
+            for (int l = 0; l < 2; ++l) {
+                const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + (q2[l] & 511));
+                const uint8_t signs = shared_signs[(q2[l] >> 9)];
+                for (int j = 0; j < 8; ++j) {
+                    sum1 += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
+                }
+            }
+            for (int l = 2; l < 4; ++l) {
+                const threadgroup uint8_t * grid = (const threadgroup uint8_t *)(values + (q2[l] & 511));
+                const uint8_t signs = shared_signs[(q2[l] >> 9)];
+                for (int j = 0; j < 8; ++j) {
+                    sum2 += yl[8*l + j] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
+                }
+            }
+            sumf[row] += d1 * sum1 + d2 * sum2;
+
+            dh += nb*sizeof(block_iq2_xs)/2;
+            q2 += nb*sizeof(block_iq2_xs)/2;
+            sc += nb*sizeof(block_iq2_xs);
+        }
+
+        y4 += 32 * 32;
+    }
+
+    for (int row = 0; row < N_DST; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_iq2_xs_f32")]]
+kernel void kernel_mul_mv_iq2_xs_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        threadgroup int8_t * shared_values [[threadgroup(0)]],
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_iq2_xs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
+}
+
+void kernel_mul_mv_iq3_xxs_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const int nb = ne00/QK_K;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_iq3_xxs * x = (device const block_iq3_xxs *) src0 + ib_row + offset0;
+    device const float         * y = (device const float         *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[32];
+    float sumf[N_DST]={0.f}, all_sum;
+
+    const int nb32 = nb * (QK_K / 32);
+
+    threadgroup uint32_t * values = (threadgroup uint32_t *)shared_values;
+    threadgroup uint8_t  * shared_signs = (threadgroup uint8_t *)(values + 256);
+    {
+        int nval = 4;
+        int pos  = (32*sgitg + tiisg)*nval;
+        for (int i = 0; i < nval; ++i) values[pos + i] = iq3xxs_grid[pos + i];
+        nval = 2;
+        pos  = (32*sgitg + tiisg)*nval;
+        for (int i = 0; i < nval; ++i) shared_signs[pos+i] = ksigns_iq2xs[pos+i];
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+    }
+
+    const int ix = tiisg;
+
+    device const float * y4 = y + 32 * ix;
+
+    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
+
+        for (int i = 0; i < 32; ++i) {
+            yl[i] = y4[i];
+        }
+
+        const int ibl = ib32 / (QK_K / 32);
+        const int ib  = ib32 % (QK_K / 32);
+
+        device const block_iq3_xxs * xr = x + ibl;
+        device const uint8_t  * q3 = xr->qs + 8 * ib;
+        device const uint16_t * gas = (device const uint16_t *)(xr->qs + QK_K/4) + 2 * ib;
+        device const half * dh = &xr->d;
+
+        for (int row = 0; row < N_DST; row++) {
+
+            const float db = dh[0];
+            const uint32_t aux32 = gas[0] | (gas[1] << 16);
+            const float d = db * (0.5f + (aux32 >> 28));
+
+            float2 sum = {0};
+            for (int l = 0; l < 4; ++l) {
+                const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(values + q3[2*l+0]);
+                const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(values + q3[2*l+1]);
+                const uint8_t signs = shared_signs[(aux32 >> 7*l) & 127];
+                for (int j = 0; j < 4; ++j) {
+                    sum[0] += yl[8*l + j + 0] * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
+                    sum[1] += yl[8*l + j + 4] * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
+                }
+            }
+            sumf[row] += d * (sum[0] + sum[1]);
+
+            dh  += nb*sizeof(block_iq3_xxs)/2;
+            q3  += nb*sizeof(block_iq3_xxs);
+            gas += nb*sizeof(block_iq3_xxs)/2;
+        }
+
+        y4 += 32 * 32;
+    }
+
+    for (int row = 0; row < N_DST; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.5f;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_iq3_xxs_f32")]]
+kernel void kernel_mul_mv_iq3_xxs_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        threadgroup int8_t * shared_values [[threadgroup(0)]],
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_iq3_xxs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
+}
+
+void kernel_mul_mv_iq3_s_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const int nb = ne00/QK_K;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_iq3_s * x = (device const block_iq3_s *) src0 + ib_row + offset0;
+    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[32];
+    float sumf[N_DST]={0.f}, all_sum;
+
+    const int nb32 = nb * (QK_K / 32);
+
+    threadgroup uint32_t * values = (threadgroup uint32_t *)shared_values;
+    {
+        int nval = 8;
+        int pos  = (32*sgitg + tiisg)*nval;
+        for (int i = 0; i < nval; ++i) values[pos + i] = iq3s_grid[pos + i];
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+    }
+
+    const int ix = tiisg;
+
+    device const float * y4 = y + 32 * ix;
+
+    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
+
+        for (int i = 0; i < 32; ++i) {
+            yl[i] = y4[i];
+        }
+
+        const int ibl = ib32 / (QK_K / 32);
+        const int ib  = ib32 % (QK_K / 32);
+
+        device const block_iq3_s * xr = x + ibl;
+        device const uint8_t * qs = xr->qs + 8 * ib;
+        device const uint8_t * qh = xr->qh + ib;
+        device const uint8_t * sc = xr->scales + (ib/2);
+        device const uint8_t * signs = xr->signs + 4 * ib;
+        device const half * dh = &xr->d;
+
+        for (int row = 0; row < N_DST; row++) {
+
+            const float db = dh[0];
+            const float d = db * (1 + 2*((sc[0] >> 4*(ib%2)) & 0xf));
+
+            float2 sum = {0};
+            for (int l = 0; l < 4; ++l) {
+                const threadgroup uint32_t * table1 = qh[0] & kmask_iq2xs[2*l+0] ? values + 256 : values;
+                const threadgroup uint32_t * table2 = qh[0] & kmask_iq2xs[2*l+1] ? values + 256 : values;
+                const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(table1 + qs[2*l+0]);
+                const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(table2 + qs[2*l+1]);
+                for (int j = 0; j < 4; ++j) {
+                    sum[0] += yl[8*l + j + 0] * grid1[j] * select(1, -1, signs[l] & kmask_iq2xs[j+0]);
+                    sum[1] += yl[8*l + j + 4] * grid2[j] * select(1, -1, signs[l] & kmask_iq2xs[j+4]);
+                }
+            }
+            sumf[row] += d * (sum[0] + sum[1]);
+
+            dh  += nb*sizeof(block_iq3_s)/2;
+            qs  += nb*sizeof(block_iq3_s);
+            qh  += nb*sizeof(block_iq3_s);
+            sc  += nb*sizeof(block_iq3_s);
+            signs += nb*sizeof(block_iq3_s);
+        }
+
+        y4 += 32 * 32;
+    }
+
+    for (int row = 0; row < N_DST; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_iq3_s_f32")]]
+kernel void kernel_mul_mv_iq3_s_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        threadgroup int8_t * shared_values [[threadgroup(0)]],
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_iq3_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
+}
+
+void kernel_mul_mv_iq2_s_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const int nb = ne00/QK_K;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+
+    device const block_iq2_s * x = (device const block_iq2_s *) src0 + ib_row + offset0;
+    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[32];
+    float sumf[N_DST]={0.f}, all_sum;
+
+    const int nb32 = nb * (QK_K / 32);
+
+    //threadgroup uint64_t * values = (threadgroup uint64_t *)shared_values;
+    //{
+    //    int nval = 32;
+    //    int pos  = (32*sgitg + tiisg)*nval;
+    //    for (int i = 0; i < nval; ++i) values[pos + i] = iq2s_grid[pos + i];
+    //    threadgroup_barrier(mem_flags::mem_threadgroup);
+    //}
+
+    const int ix = tiisg;
+
+    device const float * y4 = y + 32 * ix;
+
+    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
+
+        for (int i = 0; i < 32; ++i) {
+            yl[i] = y4[i];
+        }
+
+        const int ibl = ib32 / (QK_K / 32);
+        const int ib  = ib32 % (QK_K / 32);
+
+        device const block_iq2_s * xr = x + ibl;
+        device const uint8_t * qs = xr->qs + 4 * ib;
+        device const uint8_t * qh = xr->qh + ib;
+        device const uint8_t * sc = xr->scales + ib;
+        device const uint8_t * signs = qs + QK_K/8;
+        device const half * dh = &xr->d;
+
+        for (int row = 0; row < N_DST; row++) {
+
+            const float db = dh[0];
+            const float d1 = db * (0.5f + (sc[0] & 0xf));
+            const float d2 = db * (0.5f + (sc[0] >>  4));
+
+            float2 sum = {0};
+            for (int l = 0; l < 2; ++l) {
+                //const threadgroup uint8_t * grid1 = (const threadgroup uint8_t *)(values + (qs[l+0] | ((qh[0] << (8-2*l)) & 0x300)));
+                //const threadgroup uint8_t * grid2 = (const threadgroup uint8_t *)(values + (qs[l+2] | ((qh[0] << (4-2*l)) & 0x300)));
+                constant uint8_t * grid1 = (constant uint8_t *)(iq2s_grid + (qs[l+0] | ((qh[0] << (8-2*l)) & 0x300)));
+                constant uint8_t * grid2 = (constant uint8_t *)(iq2s_grid + (qs[l+2] | ((qh[0] << (4-2*l)) & 0x300)));
+                for (int j = 0; j < 8; ++j) {
+                    sum[0] += yl[8*l + j +  0] * grid1[j] * select(1, -1, signs[l+0] & kmask_iq2xs[j]);
+                    sum[1] += yl[8*l + j + 16] * grid2[j] * select(1, -1, signs[l+2] & kmask_iq2xs[j]);
+                }
+            }
+            sumf[row] += d1 * sum[0] + d2 * sum[1];
+
+            dh  += nb*sizeof(block_iq2_s)/2;
+            qs  += nb*sizeof(block_iq2_s);
+            qh  += nb*sizeof(block_iq2_s);
+            sc  += nb*sizeof(block_iq2_s);
+            signs += nb*sizeof(block_iq2_s);
+        }
+
+        y4 += 32 * 32;
+    }
+
+    for (int row = 0; row < N_DST; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum * 0.25f;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_iq2_s_f32")]]
+kernel void kernel_mul_mv_iq2_s_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        threadgroup int8_t * shared_values [[threadgroup(0)]],
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_iq2_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
+}
+
+void kernel_mul_mv_iq1_s_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_value,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const int nb = ne00/QK_K;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+    device const block_iq1_s * x = (device const block_iq1_s *) src0 + ib_row + offset0;
+    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[32];
+    float sumf[N_DST]={0.f}, all_sum;
+
+    const int nb32 = nb * (QK_K / 32);
+
+    const int ix = tiisg;
+
+    device const float * y4 = y + 32 * ix;
+
+    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
+
+        float sumy = 0;
+        for (int i = 0; i < 32; ++i) {
+            yl[i] = y4[i];
+            sumy += yl[i];
+        }
+
+        const int ibl = ib32 / (QK_K / 32);
+        const int ib  = ib32 % (QK_K / 32);
+
+        device const block_iq1_s * xr = x + ibl;
+        device const uint8_t  * qs = xr->qs + 4 * ib;
+        device const uint16_t * qh = xr->qh + ib;
+        device const half     * dh = &xr->d;
+
+        for (int row = 0; row < N_DST; row++) {
+
+            constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700)));
+            constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 5) & 0x700)));
+            constant uint8_t * grid3 = (constant uint8_t *)(iq1s_grid_gpu + (qs[2] | ((qh[0] << 2) & 0x700)));
+            constant uint8_t * grid4 = (constant uint8_t *)(iq1s_grid_gpu + (qs[3] | ((qh[0] >> 1) & 0x700)));
+
+            float sum = 0;
+            for (int j = 0; j < 4; ++j) {
+                sum += yl[j+ 0] * (grid1[j] & 0xf) + yl[j+ 4] * (grid1[j] >> 4)
+                     + yl[j+ 8] * (grid2[j] & 0xf) + yl[j+12] * (grid2[j] >> 4)
+                     + yl[j+16] * (grid3[j] & 0xf) + yl[j+20] * (grid3[j] >> 4)
+                     + yl[j+24] * (grid4[j] & 0xf) + yl[j+28] * (grid4[j] >> 4);
+            }
+            sumf[row] += (float)dh[0] * (sum + sumy * (qh[0] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA)) * (2*((qh[0] >> 12) & 7) + 1);
+
+            dh += nb*sizeof(block_iq1_s)/2;
+            qs += nb*sizeof(block_iq1_s);
+            qh += nb*sizeof(block_iq1_s)/2;
+        }
+
+        y4 += 32 * 32;
+    }
+
+    for (int row = 0; row < N_DST; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
+        }
+    }
+}
+
+void kernel_mul_mv_iq1_m_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_value,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    const int nb = ne00/QK_K;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+
+    const int first_row = (r0 * N_SIMDGROUP + sgitg) * N_DST;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+    device const block_iq1_m * x = (device const block_iq1_m *) src0 + ib_row + offset0;
+    device const float       * y = (device const float       *) src1 + r1*ne10 + im*ne00*ne1;
+
+    float yl[32];
+    float sumf[N_DST]={0.f}, all_sum;
+
+    const int nb32 = nb * (QK_K / 32);
+
+    const int ix = tiisg;
+
+    device const float * y4 = y + 32 * ix;
+
+    iq1m_scale_t scale;
+
+    for (int ib32 = ix; ib32 < nb32; ib32 += 32) {
+
+        float4 sumy = {0.f};
+        for (int i = 0; i < 8; ++i) {
+            yl[i+ 0] = y4[i+ 0]; sumy[0] += yl[i+ 0];
+            yl[i+ 8] = y4[i+ 8]; sumy[1] += yl[i+ 8];
+            yl[i+16] = y4[i+16]; sumy[2] += yl[i+16];
+            yl[i+24] = y4[i+24]; sumy[3] += yl[i+24];
+        }
+
+        const int ibl = ib32 / (QK_K / 32);
+        const int ib  = ib32 % (QK_K / 32);
+
+        device const block_iq1_m * xr = x + ibl;
+        device const uint8_t  * qs = xr->qs + 4 * ib;
+        device const uint8_t  * qh = xr->qh + 2 * ib;
+        device const uint16_t * sc = (device const uint16_t *)xr->scales;
+
+        for (int row = 0; row < N_DST; row++) {
+            scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+
+            constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700)));
+            constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 4) & 0x700)));
+            constant uint8_t * grid3 = (constant uint8_t *)(iq1s_grid_gpu + (qs[2] | ((qh[1] << 8) & 0x700)));
+            constant uint8_t * grid4 = (constant uint8_t *)(iq1s_grid_gpu + (qs[3] | ((qh[1] << 4) & 0x700)));
+
+            float2 sum = {0.f};
+            for (int j = 0; j < 4; ++j) {
+                sum[0] += yl[j+ 0] * (grid1[j] & 0xf) + yl[j+ 4] * (grid1[j] >> 4)
+                        + yl[j+ 8] * (grid2[j] & 0xf) + yl[j+12] * (grid2[j] >> 4);
+                sum[1] += yl[j+16] * (grid3[j] & 0xf) + yl[j+20] * (grid3[j] >> 4)
+                        + yl[j+24] * (grid4[j] & 0xf) + yl[j+28] * (grid4[j] >> 4);
+            }
+            const float delta1 = sumy[0] * (qh[0] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA) + sumy[1] * (qh[0] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
+            const float delta2 = sumy[2] * (qh[1] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA) + sumy[3] * (qh[1] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
+
+            sumf[row] += (float)scale.f16 * ((sum[0] + delta1) * (2*((sc[ib/2] >> (6*(ib%2)+0)) & 7) + 1) +
+                                             (sum[1] + delta2) * (2*((sc[ib/2] >> (6*(ib%2)+3)) & 7) + 1));
+
+            sc += nb*sizeof(block_iq1_m)/2;
+            qs += nb*sizeof(block_iq1_m);
+            qh += nb*sizeof(block_iq1_m);
+        }
+
+        y4 += 32 * 32;
+    }
+
+    for (int row = 0; row < N_DST; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
+        }
+    }
+}
+
+void kernel_mul_mv_iq4_nl_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values_i8,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    threadgroup float * shared_values = (threadgroup float *)shared_values_i8;
+    const int nb = ne00/QK4_NL;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+    const int first_row = (r0 * 2 + sgitg) * 2;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+    device const block_iq4_nl * x = (device const block_iq4_nl *) src0 + ib_row + offset0;
+    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;
+
+    const int ix = tiisg/2;  // 0...15
+    const int it = tiisg%2;  // 0 or 1
+
+    shared_values[tiisg] = kvalues_iq4nl_f[tiisg%16];
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+
+    float4 yl[4];
+    float sumf[2]={0.f}, all_sum;
+
+    device const float * yb = y + ix * QK4_NL + it * 8;
+
+    uint32_t aux32[2];
+    thread const uint8_t * q8 = (thread const uint8_t *)aux32;
+
+    float4 qf1, qf2;
+
+    for (int ib = ix; ib < nb; ib += 16) {
+
+        device const float4 * y4 = (device const float4 *)yb;
+        yl[0] = y4[0]; yl[1] = y4[4]; yl[2] = y4[1]; yl[3] = y4[5];
+
+        for (int row = 0; row < 2; ++row) {
+
+            device const block_iq4_nl & xb = x[row*nb + ib];
+            device const uint16_t * q4 = (device const uint16_t *)(xb.qs + 8*it);
+
+            float4 acc1 = {0.f}, acc2 = {0.f};
+
+            aux32[0] = q4[0] | (q4[1] << 16);
+            aux32[1] = (aux32[0] >> 4) & 0x0f0f0f0f;
+            aux32[0] &= 0x0f0f0f0f;
+            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
+            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
+            acc1 += yl[0] * qf1;
+            acc2 += yl[1] * qf2;
+
+            aux32[0] = q4[2] | (q4[3] << 16);
+            aux32[1] = (aux32[0] >> 4) & 0x0f0f0f0f;
+            aux32[0] &= 0x0f0f0f0f;
+            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
+            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
+            acc1 += yl[2] * qf1;
+            acc2 += yl[3] * qf2;
+
+            acc1 += acc2;
+
+            sumf[row] += (float)xb.d * (acc1[0] + acc1[1] + acc1[2] + acc1[3]);
+
+        }
+
+        yb += 16 * QK4_NL;
+    }
+
+    for (int row = 0; row < 2; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
+        }
+    }
+}
+
+void kernel_mul_mv_iq4_xs_f32_impl(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values_i8,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg) {
+
+    threadgroup float * shared_values = (threadgroup float *)shared_values_i8;
+    const int nb = ne00/QK_K;
+    const int r0 = tgpig.x;
+    const int r1 = tgpig.y;
+    const int im = tgpig.z;
+    const int first_row = (r0 * 2 + sgitg) * 2;
+    const int ib_row = first_row * nb;
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    const uint offset0 = (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02);
+    device const block_iq4_xs * x = (device const block_iq4_xs *) src0 + ib_row + offset0;
+    device const float        * y = (device const float        *) src1 + r1*ne10 + im*ne00*ne1;
+
+    const int ix = tiisg/16;  // 0 or 1
+    const int it = tiisg%16;  // 0...15
+    const int ib = it/2;
+    const int il = it%2;
+
+    shared_values[tiisg] = kvalues_iq4nl_f[tiisg%16];
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+
+    float4 yl[4];
+    float sumf[2]={0.f}, all_sum;
+
+    device const float * yb = y + ix * QK_K + ib * 32 + il * 8;
+
+    uint32_t aux32[2];
+    thread const uint8_t * q8 = (thread const uint8_t *)aux32;
+
+    float4 qf1, qf2;
+
+    for (int ibl = ix; ibl < nb; ibl += 2) {
+
+        device const float4 * y4 = (device const float4 *)yb;
+        yl[0] = y4[0]; yl[1] = y4[4]; yl[2] = y4[1]; yl[3] = y4[5];
+
+        for (int row = 0; row < 2; ++row) {
+
+            device const block_iq4_xs & xb = x[row*nb + ibl];
+            device const uint32_t * q4 = (device const uint32_t *)(xb.qs + 16*ib + 8*il);
+
+            float4 acc1 = {0.f}, acc2 = {0.f};
+
+            aux32[0] = q4[0] & 0x0f0f0f0f;
+            aux32[1] = (q4[0] >> 4) & 0x0f0f0f0f;
+            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
+            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
+            acc1 += yl[0] * qf1;
+            acc2 += yl[1] * qf2;
+
+            aux32[0] = q4[1] & 0x0f0f0f0f;
+            aux32[1] = (q4[1] >> 4) & 0x0f0f0f0f;
+            qf1 = {shared_values[q8[0]], shared_values[q8[1]], shared_values[q8[2]], shared_values[q8[3]]};
+            qf2 = {shared_values[q8[4]], shared_values[q8[5]], shared_values[q8[6]], shared_values[q8[7]]};
+            acc1 += yl[2] * qf1;
+            acc2 += yl[3] * qf2;
+
+            acc1 += acc2;
+
+            const int ls = (((xb.scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((xb.scales_h >> 2*ib) & 3) << 4)) - 32;
+            sumf[row] += (float)xb.d * ls * (acc1[0] + acc1[1] + acc1[2] + acc1[3]);
+
+        }
+
+        yb += 2 * QK_K;
+    }
+
+    for (int row = 0; row < 2; ++row) {
+        all_sum = simd_sum(sumf[row]);
+        if (tiisg == 0) {
+            dst[r1*ne0 + im*ne0*ne1 + first_row + row] = all_sum;
+        }
+    }
+}
+
+[[host_name("kernel_mul_mv_iq1_s_f32")]]
+kernel void kernel_mul_mv_iq1_s_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_iq1_s_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
+}
+
+[[host_name("kernel_mul_mv_iq1_m_f32")]]
+kernel void kernel_mul_mv_iq1_m_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint  tiisg[[thread_index_in_simdgroup]],
+        uint  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_iq1_m_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, nullptr, tgpig, tiisg, sgitg);
+}
+
+[[host_name("kernel_mul_mv_iq4_nl_f32")]]
+kernel void kernel_mul_mv_iq4_nl_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        threadgroup int8_t * shared_values [[threadgroup(0)]],
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint tiisg[[thread_index_in_simdgroup]],
+        uint sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_iq4_nl_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
+}
+
+[[host_name("kernel_mul_mv_iq4_xs_f32")]]
+kernel void kernel_mul_mv_iq4_xs_f32(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant   int64_t & ne01,
+        constant   int64_t & ne02,
+        constant  uint64_t & nb00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant   int64_t & ne11,
+        constant   int64_t & ne12,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb12,
+        constant   int64_t & ne0,
+        constant   int64_t & ne1,
+        constant   uint    & r2,
+        constant   uint    & r3,
+        threadgroup int8_t * shared_values [[threadgroup(0)]],
+        uint3 tgpig[[threadgroup_position_in_grid]],
+        uint tiisg[[thread_index_in_simdgroup]],
+        uint sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    kernel_mul_mv_iq4_xs_f32_impl(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3, shared_values, tgpig, tiisg, sgitg);
+}
+
+//============================= templates and their specializations =============================
+
+// NOTE: this is not dequantizing - we are simply fitting the template
+template <typename type4x4>
+void dequantize_f32(device const float4x4 * src, short il, thread type4x4 & reg) {
+    float4x4 temp = *(((device float4x4 *)src));
+    for (int i = 0; i < 16; i++){
+        reg[i/4][i%4] = temp[i/4][i%4];
+    }
+}
+
+template <typename type4x4>
+void dequantize_f16(device const half4x4 * src, short il, thread type4x4 & reg) {
+    half4x4 temp = *(((device half4x4 *)src));
+    for (int i = 0; i < 16; i++){
+        reg[i/4][i%4] = temp[i/4][i%4];
+    }
+}
+
+template <typename type4x4>
+void dequantize_q4_0(device const block_q4_0 *xb, short il, thread type4x4 & reg) {
+    device const uint16_t * qs = ((device const uint16_t *)xb + 1);
+    const float d1 = il ? (xb->d / 16.h) : xb->d;
+    const float d2 = d1 / 256.f;
+    const float md = -8.h * xb->d;
+    const ushort mask0 = il ? 0x00F0 : 0x000F;
+    const ushort mask1 = mask0 << 8;
+
+    for (int i=0;i<8;i++) {
+        reg[i/2][2*(i%2)+0] = d1 * (qs[i] & mask0) + md;
+        reg[i/2][2*(i%2)+1] = d2 * (qs[i] & mask1) + md;
+    }
+}
+
+template <typename type4x4>
+void dequantize_q4_1(device const block_q4_1 *xb, short il, thread type4x4 & reg) {
+    device const uint16_t * qs = ((device const uint16_t *)xb + 2);
+    const float d1 = il ? (xb->d / 16.h) : xb->d;
+    const float d2 = d1 / 256.f;
+    const float  m = xb->m;
+    const ushort mask0 = il ? 0x00F0 : 0x000F;
+    const ushort mask1 = mask0 << 8;
+
+    for (int i=0;i<8;i++) {
+        reg[i/2][2*(i%2)+0] = ((qs[i] & mask0) * d1) + m;
+        reg[i/2][2*(i%2)+1] = ((qs[i] & mask1) * d2) + m;
+    }
+}
+
+template <typename type4x4>
+void dequantize_q5_0(device const block_q5_0 *xb, short il, thread type4x4 & reg) {
+    device const uint16_t * qs = ((device const uint16_t *)xb + 3);
+    const float d = xb->d;
+    const float md = -16.h * xb->d;
+    const ushort mask = il ? 0x00F0 : 0x000F;
+
+    const uint32_t qh = *((device const uint32_t *)xb->qh);
+
+    const int x_mv = il ? 4 : 0;
+
+    const int gh_mv = il ? 12 : 0;
+    const int gh_bk = il ?  0 : 4;
+
+    for (int i = 0; i < 8; i++) {
+        // extract the 5-th bits for x0 and x1
+        const uint8_t xh_0 = ((qh >> (gh_mv + 2*i  )) << gh_bk) & 0x10;
+        const uint8_t xh_1 = ((qh >> (gh_mv + 2*i+1)) << gh_bk) & 0x10;
+
+        // combine the 4-bits from qs with the 5th bit
+        const int32_t x0 = ((((qs[i]     ) & mask) >> x_mv) | xh_0);
+        const int32_t x1 = ((((qs[i] >> 8) & mask) >> x_mv) | xh_1);
+
+        reg[i/2][2*(i%2)+0] = d * x0 + md;
+        reg[i/2][2*(i%2)+1] = d * x1 + md;
+    }
+}
+
+template <typename type4x4>
+void dequantize_q5_1(device const block_q5_1 *xb, short il, thread type4x4 & reg) {
+    device const uint16_t * qs = ((device const uint16_t *)xb + 4);
+    const float d = xb->d;
+    const float m = xb->m;
+    const ushort mask = il ? 0x00F0 : 0x000F;
+
+    const uint32_t qh = *((device const uint32_t *)xb->qh);
+
+    const int x_mv = il ? 4 : 0;
+
+    const int gh_mv = il ? 12 : 0;
+    const int gh_bk = il ?  0 : 4;
+
+    for (int i = 0; i < 8; i++) {
+        // extract the 5-th bits for x0 and x1
+        const uint8_t xh_0 = ((qh >> (gh_mv + 2*i  )) << gh_bk) & 0x10;
+        const uint8_t xh_1 = ((qh >> (gh_mv + 2*i+1)) << gh_bk) & 0x10;
+
+        // combine the 4-bits from qs with the 5th bit
+        const int32_t x0 = ((((qs[i]     ) & mask) >> x_mv) | xh_0);
+        const int32_t x1 = ((((qs[i] >> 8) & mask) >> x_mv) | xh_1);
+
+        reg[i/2][2*(i%2)+0] = d * x0 + m;
+        reg[i/2][2*(i%2)+1] = d * x1 + m;
+    }
+}
+
+template <typename type4x4>
+void dequantize_q8_0(device const block_q8_0 *xb, short il, thread type4x4 & reg) {
+    device const int8_t * qs = ((device const int8_t *)xb->qs);
+    const half d = xb->d;
+
+    for (int i = 0; i < 16; i++) {
+        reg[i/4][i%4] = (qs[i + 16*il] * d);
+    }
+}
+
+template <typename type4x4>
+void dequantize_q2_K(device const block_q2_K *xb, short il, thread type4x4 & reg) {
+    const float d = xb->d;
+    const float min = xb->dmin;
+    device const uint8_t * q = (device const uint8_t *)xb->qs;
+    float dl, ml;
+    uint8_t sc = xb->scales[il];
+
+    q = q + 32*(il/8) + 16*(il&1);
+    il = (il/2)%4;
+
+    half  coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h);
+    uchar mask = il>1 ? (il>2 ? 192    : 48)     : (il>0 ? 12    : 3);
+    dl = d * (sc & 0xF) * coef, ml = min * (sc >> 4);
+    for (int i = 0; i < 16; ++i) {
+        reg[i/4][i%4] = dl * (q[i] & mask) - ml;
+    }
+}
+
+template <typename type4x4>
+void dequantize_q3_K(device const block_q3_K *xb, short il, thread type4x4 & reg) {
+    const half d_all = xb->d;
+    device const uint8_t * q = (device const uint8_t *)xb->qs;
+    device const uint8_t * h = (device const uint8_t *)xb->hmask;
+    device const int8_t * scales = (device const int8_t *)xb->scales;
+
+    q = q + 32 * (il/8) + 16 * (il&1);
+    h = h + 16 * (il&1);
+    uint8_t m = 1 << (il/2);
+    uint16_t kmask1 = (il/4)>1 ? ((il/4)>2 ? 192 : 48) : \
+                                 ((il/4)>0 ? 12  : 3);
+    uint16_t kmask2 = il/8 ? 0xF0 : 0x0F;
+    uint16_t scale_2 = scales[il%8], scale_1 = scales[8 + il%4];
+    int16_t  dl_int = (il/4)&1 ? (scale_2&kmask2) | ((scale_1&kmask1) << 2)
+                               : (scale_2&kmask2) | ((scale_1&kmask1) << 4);
+    float dl = il<8 ? d_all * (dl_int - 32.f) : d_all * (dl_int / 16.f - 32.f);
+    const float ml = 4.f * dl;
+
+    il = (il/2) & 3;
+    const half    coef = il>1 ? (il>2 ? 1/64.h : 1/16.h) : (il>0 ? 1/4.h : 1.h);
+    const uint8_t mask = il>1 ? (il>2 ? 192    : 48)     : (il>0 ? 12    : 3);
+    dl *= coef;
+
+    for (int i = 0; i < 16; ++i) {
+        reg[i/4][i%4] = dl * (q[i] & mask) - (h[i] & m ? 0 : ml);
+    }
+}
+
+static inline uchar2 get_scale_min_k4_just2(int j, int k, device const uchar * q) {
+    return j < 4 ? uchar2{uchar(q[j+0+k] & 63), uchar(q[j+4+k] & 63)}
+                 : uchar2{uchar((q[j+4+k] & 0xF) | ((q[j-4+k] & 0xc0) >> 2)), uchar((q[j+4+k] >> 4) | ((q[j-0+k] & 0xc0) >> 2))};
+}
+
+template <typename type4x4>
+void dequantize_q4_K(device const block_q4_K *xb, short il, thread type4x4 & reg) {
+    device const uchar * q = xb->qs;
+
+    short is = (il/4) * 2;
+    q = q + (il/4) * 32 + 16 * (il&1);
+    il = il & 3;
+    const uchar2 sc = get_scale_min_k4_just2(is, il/2, xb->scales);
+    const float d   = il < 2 ? xb->d : xb->d / 16.h;
+    const float min = xb->dmin;
+    const float dl = d * sc[0];
+    const float ml = min * sc[1];
+
+    const ushort mask = il<2 ? 0x0F : 0xF0;
+    for (int i = 0; i < 16; ++i) {
+        reg[i/4][i%4] = dl * (q[i] & mask) - ml;
+    }
+}
+
+template <typename type4x4>
+void dequantize_q5_K(device const block_q5_K *xb, short il, thread type4x4 & reg) {
+    device const uint8_t * q  = xb->qs;
+    device const uint8_t * qh = xb->qh;
+
+    short is = (il/4) * 2;
+    q  = q + 32 * (il/4) + 16 * (il&1);
+    qh = qh + 16 * (il&1);
+    uint8_t ul = 1 << (il/2);
+    il = il & 3;
+    const uchar2 sc = get_scale_min_k4_just2(is, il/2, xb->scales);
+    const float d = il < 2 ? xb->d : xb->d / 16.f;
+    const float min = xb->dmin;
+    const float dl = d * sc[0];
+    const float ml = min * sc[1];
+
+    const ushort mask  = il<2 ? 0x0F : 0xF0;
+    const float qh_val = il<2 ? 16.f : 256.f;
+    for (int i = 0; i < 16; ++i) {
+        reg[i/4][i%4] = dl * ((q[i] & mask) + (qh[i] & ul ? qh_val : 0)) - ml;
+    }
+}
+
+template <typename type4x4>
+void dequantize_q6_K(device const block_q6_K *xb, short il, thread type4x4 & reg) {
+    const half d_all = xb->d;
+    device const uint8_t * ql = (device const uint8_t *)xb->ql;
+    device const uint8_t * qh = (device const uint8_t *)xb->qh;
+    device const int8_t * scales = (device const int8_t *)xb->scales;
+
+    ql = ql + 64*(il/8) + 32*((il/2)&1) + 16*(il&1);
+    qh = qh + 32*(il/8) + 16*(il&1);
+    float sc = scales[(il%2) + 2 * ((il/2))];
+    il = (il/2) & 3;
+
+    const uint16_t  kmask1 = il>1 ? (il>2 ? 192 : 48) : (il>0 ? 12 : 3);
+    const uint16_t  kmask2 = il>1 ? 0xF0              : 0x0F;
+    const float       coef = il>1 ? 1.f/16.f          : 1.f;
+    const float ml = d_all * sc * 32.f;
+    const float dl = d_all * sc * coef;
+    for (int i = 0; i < 16; ++i) {
+        const half q = il&1 ? ((ql[i] & kmask2) | ((qh[i] & kmask1) << 2))
+                            : ((ql[i] & kmask2) | ((qh[i] & kmask1) << 4));
+        reg[i/4][i%4] = dl * q - ml;
+    }
+}
+
+template <typename type4x4>
+void dequantize_iq2_xxs(device const block_iq2_xxs * xb, short il, thread type4x4 & reg) {
+    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
+    const float d = xb->d;
+    const int ib32 = il/2;
+    il = il%2;
+    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
+    // each block of 32 needs 2 uint32_t's for the quants & scale, so 4 uint16_t's.
+    device const uint16_t * q2 = xb->qs + 4*ib32;
+    const uint32_t aux32_g = q2[0] | (q2[1] << 16);
+    const uint32_t aux32_s = q2[2] | (q2[3] << 16);
+    thread const uint8_t * aux8 = (thread const uint8_t *)&aux32_g;
+    const float dl = d * (0.5f + (aux32_s >> 28)) * 0.25f;
+    constant uint8_t * grid = (constant uint8_t *)(iq2xxs_grid + aux8[2*il+0]);
+    uint8_t signs = ksigns_iq2xs[(aux32_s >> 14*il) & 127];
+    for (int i = 0; i < 8; ++i) {
+        reg[i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
+    }
+    grid = (constant uint8_t *)(iq2xxs_grid + aux8[2*il+1]);
+    signs = ksigns_iq2xs[(aux32_s >> (14*il+7)) & 127];
+    for (int i = 0; i < 8; ++i) {
+        reg[2+i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
+    }
+}
+
+template <typename type4x4>
+void dequantize_iq2_xs(device const block_iq2_xs * xb, short il, thread type4x4 & reg) {
+    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
+    const float d = xb->d;
+    const int ib32 = il/2;
+    il = il%2;
+    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
+    device const uint16_t * q2 = xb->qs + 4*ib32;
+    const float dl = d * (0.5f + ((xb->scales[ib32] >> 4*il) & 0xf)) * 0.25f;
+    constant uint8_t * grid = (constant uint8_t *)(iq2xs_grid + (q2[2*il+0] & 511));
+    uint8_t signs = ksigns_iq2xs[q2[2*il+0] >> 9];
+    for (int i = 0; i < 8; ++i) {
+        reg[i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
+    }
+    grid = (constant uint8_t *)(iq2xs_grid + (q2[2*il+1] & 511));
+    signs = ksigns_iq2xs[q2[2*il+1] >> 9];
+    for (int i = 0; i < 8; ++i) {
+        reg[2+i/4][i%4] = dl * grid[i] * (signs & kmask_iq2xs[i] ? -1.f : 1.f);
+    }
+}
+
+template <typename type4x4>
+void dequantize_iq3_xxs(device const block_iq3_xxs * xb, short il, thread type4x4 & reg) {
+    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
+    const float d = xb->d;
+    const int ib32 = il/2;
+    il = il%2;
+    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
+    device const uint8_t * q3 = xb->qs + 8*ib32;
+    device const uint16_t * gas = (device const uint16_t *)(xb->qs + QK_K/4) + 2*ib32;
+    const uint32_t aux32 = gas[0] | (gas[1] << 16);
+    const float dl = d * (0.5f + (aux32 >> 28)) * 0.5f;
+    constant uint8_t * grid1 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+0]);
+    constant uint8_t * grid2 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+1]);
+    uint8_t signs = ksigns_iq2xs[(aux32 >> 14*il) & 127];
+    for (int i = 0; i < 4; ++i) {
+        reg[0][i] = dl * grid1[i] * (signs & kmask_iq2xs[i+0] ? -1.f : 1.f);
+        reg[1][i] = dl * grid2[i] * (signs & kmask_iq2xs[i+4] ? -1.f : 1.f);
+    }
+    grid1 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+2]);
+    grid2 = (constant uint8_t *)(iq3xxs_grid + q3[4*il+3]);
+    signs = ksigns_iq2xs[(aux32 >> (14*il+7)) & 127];
+    for (int i = 0; i < 4; ++i) {
+        reg[2][i] = dl * grid1[i] * (signs & kmask_iq2xs[i+0] ? -1.f : 1.f);
+        reg[3][i] = dl * grid2[i] * (signs & kmask_iq2xs[i+4] ? -1.f : 1.f);
+    }
+}
+
+template <typename type4x4>
+void dequantize_iq3_s(device const block_iq3_s * xb, short il, thread type4x4 & reg) {
+    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
+    const float d = xb->d;
+    const int ib32 = il/2;
+    il = il%2;
+    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
+    device const uint8_t * qs = xb->qs + 8*ib32;
+    device const uint8_t * signs = xb->signs + 4*ib32 + 2*il;
+    const uint8_t qh = xb->qh[ib32] >> 4*il;
+    const float dl = d * (1 + 2*((xb->scales[ib32/2] >> 4*(ib32%2)) & 0xf));
+    constant uint8_t * grid1 = (constant uint8_t *)(iq3s_grid + (qs[4*il+0] | ((qh << 8) & 256)));
+    constant uint8_t * grid2 = (constant uint8_t *)(iq3s_grid + (qs[4*il+1] | ((qh << 7) & 256)));
+    for (int i = 0; i < 4; ++i) {
+        reg[0][i] = dl * grid1[i] * select(1, -1, signs[0] & kmask_iq2xs[i+0]);
+        reg[1][i] = dl * grid2[i] * select(1, -1, signs[0] & kmask_iq2xs[i+4]);
+    }
+    grid1 = (constant uint8_t *)(iq3s_grid + (qs[4*il+2] | ((qh << 6) & 256)));
+    grid2 = (constant uint8_t *)(iq3s_grid + (qs[4*il+3] | ((qh << 5) & 256)));
+    for (int i = 0; i < 4; ++i) {
+        reg[2][i] = dl * grid1[i] * select(1, -1, signs[1] & kmask_iq2xs[i+0]);
+        reg[3][i] = dl * grid2[i] * select(1, -1, signs[1] & kmask_iq2xs[i+4]);
+    }
+}
+
+template <typename type4x4>
+void dequantize_iq2_s(device const block_iq2_s * xb, short il, thread type4x4 & reg) {
+    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
+    const float d = xb->d;
+    const int ib32 = il/2;
+    il = il%2;
+    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
+    device const uint8_t * qs = xb->qs + 4*ib32 + 2*il;
+    device const uint8_t * signs = qs + QK_K/8;
+    const uint8_t qh = xb->qh[ib32] >> 4*il;
+    const float dl = d * (0.5f + ((xb->scales[ib32] >> 4*il) & 0xf)) * 0.25f;
+    constant uint8_t * grid1 = (constant uint8_t *)(iq2s_grid + (qs[0] | ((qh << 8) & 0x300)));
+    constant uint8_t * grid2 = (constant uint8_t *)(iq2s_grid + (qs[1] | ((qh << 6) & 0x300)));
+    for (int i = 0; i < 8; ++i) {
+        reg[i/4+0][i%4] = dl * grid1[i] * select(1, -1, signs[0] & kmask_iq2xs[i]);
+        reg[i/4+2][i%4] = dl * grid2[i] * select(1, -1, signs[1] & kmask_iq2xs[i]);
+    }
+}
+
+template <typename type4x4>
+void dequantize_iq1_s(device const block_iq1_s * xb, short il, thread type4x4 & reg) {
+    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
+    const int ib32 = il/2;
+    il = il%2;
+    const float d = xb->d;
+    device const uint8_t  * qs = xb->qs + 4*ib32 + 2*il;
+    device const uint16_t * qh = xb->qh;
+    const float dl = d * (2*((qh[ib32] >> 12) & 7) + 1);
+    const float ml = dl * (qh[ib32] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA);
+    const uint16_t h = qh[ib32] >> 6*il;
+    constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((h << 8) & 0x700)));
+    constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((h << 5) & 0x700)));
+    for (int i = 0; i < 4; ++i) {
+        reg[0][i] = dl * (grid1[i] & 0xf) + ml;
+        reg[1][i] = dl * (grid1[i] >>  4) + ml;
+        reg[2][i] = dl * (grid2[i] & 0xf) + ml;
+        reg[3][i] = dl * (grid2[i] >>  4) + ml;
+    }
+}
+
+template <typename type4x4>
+void dequantize_iq1_m(device const block_iq1_m * xb, short il, thread type4x4 & reg) {
+    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
+    const int ib32 = il/2;
+    il = il%2;
+    device const uint16_t * sc = (device const uint16_t *)xb->scales;
+
+    iq1m_scale_t scale;
+    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+    const float d = scale.f16;
+
+    device const uint8_t * qs = xb->qs + 4*ib32 + 2*il;
+    device const uint8_t * qh = xb->qh + 2*ib32 + il;
+
+    const float dl  = d * (2*((sc[ib32/2] >> (6*(ib32%2)+3*il)) & 7) + 1);
+    const float ml1 = dl * (qh[0] & 0x08 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
+    const float ml2 = dl * (qh[0] & 0x80 ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA);
+    constant uint8_t * grid1 = (constant uint8_t *)(iq1s_grid_gpu + (qs[0] | ((qh[0] << 8) & 0x700)));
+    constant uint8_t * grid2 = (constant uint8_t *)(iq1s_grid_gpu + (qs[1] | ((qh[0] << 4) & 0x700)));
+    for (int i = 0; i < 4; ++i) {
+        reg[0][i] = dl * (grid1[i] & 0xf) + ml1;
+        reg[1][i] = dl * (grid1[i] >>  4) + ml1;
+        reg[2][i] = dl * (grid2[i] & 0xf) + ml2;
+        reg[3][i] = dl * (grid2[i] >>  4) + ml2;
+    }
+}
+
+template <typename type4x4>
+void dequantize_iq4_nl(device const block_iq4_nl * xb, short il, thread type4x4 & reg) {
+    device const uint16_t * q4 = (device const uint16_t *)xb->qs;
+    const float d = xb->d;
+    uint32_t aux32;
+    thread const uint8_t * q8 = (thread const uint8_t *)&aux32;
+    for (int i = 0; i < 4; ++i) {
+        aux32 = ((q4[2*i] | (q4[2*i+1] << 16)) >> 4*il) & 0x0f0f0f0f;
+        reg[i][0] = d * kvalues_iq4nl_f[q8[0]];
+        reg[i][1] = d * kvalues_iq4nl_f[q8[1]];
+        reg[i][2] = d * kvalues_iq4nl_f[q8[2]];
+        reg[i][3] = d * kvalues_iq4nl_f[q8[3]];
+    }
+}
+
+template <typename type4x4>
+void dequantize_iq4_xs(device const block_iq4_xs * xb, short il, thread type4x4 & reg) {
+    // il is 0...15 for QK_K = 256 => index of block of 32 is il/2
+    const int ib32 = il/2;
+    il = il%2;
+    // il = 0 or 1. il = 0 processes the first 16 quants in a block of 32, il = 1 the second 16
+    device const uint32_t * q4 = (device const uint32_t *)xb->qs + 4*ib32;
+    const int ls = ((xb->scales_l[ib32/2] >> 4*(ib32%2)) & 0xf) | (((xb->scales_h >> 2*ib32) & 3) << 4);
+    const float d = (float)xb->d * (ls - 32);
+    uint32_t aux32;
+    thread const uint8_t * q8 = (thread const uint8_t *)&aux32;
+    for (int i = 0; i < 4; ++i) {
+        aux32 = (q4[i] >> 4*il) & 0x0f0f0f0f;
+        reg[i][0] = d * kvalues_iq4nl_f[q8[0]];
+        reg[i][1] = d * kvalues_iq4nl_f[q8[1]];
+        reg[i][2] = d * kvalues_iq4nl_f[q8[2]];
+        reg[i][3] = d * kvalues_iq4nl_f[q8[3]];
+    }
+}
+
+template<typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread float4x4 &)>
+kernel void kernel_get_rows(
+        device const  void * src0,
+        device const  char * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        uint3                tgpig[[threadgroup_position_in_grid]],
+        uint                 tiitg[[thread_index_in_threadgroup]],
+        uint3                tptg [[threads_per_threadgroup]]) {
+    //const int64_t i = tgpig;
+    //const int64_t r = ((device int32_t *) src1)[i];
+
+    const int64_t i10 = tgpig.x;
+    const int64_t i11 = tgpig.y;
+
+    const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0];
+
+    const int64_t i02 = i11;
+
+    for (int64_t ind = tiitg; ind < ne00/16; ind += tptg.x) {
+        float4x4 temp;
+        dequantize_func(
+            ((device const block_q *) ((device char *) src0 + r*nb01 + i02*nb02)) + ind/nl, ind%nl, temp);
+        *(((device float4x4 *) ((device char *) dst + i11*nb2 + i10*nb1)) + ind) = temp;
+    }
+}
+
+kernel void kernel_get_rows_f32(
+        device const  void * src0,
+        device const  char * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        uint3                tgpig[[threadgroup_position_in_grid]],
+        uint                 tiitg[[thread_index_in_threadgroup]],
+        uint3                tptg [[threads_per_threadgroup]]) {
+    const int64_t i10 = tgpig.x;
+    const int64_t i11 = tgpig.y;
+
+    const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0];
+
+    const int64_t i02 = i11;
+
+    for (int ind = tiitg; ind < ne00; ind += tptg.x) {
+        ((device float *) ((device char *) dst + i11*nb2 + i10*nb1))[ind] =
+            ((device float *) ((device char *) src0 + r*nb01 + i02*nb02))[ind];
+    }
+}
+
+kernel void kernel_get_rows_f16(
+        device const  void * src0,
+        device const  char * src1,
+        device       float * dst,
+        constant   int64_t & ne00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        uint3                tgpig[[threadgroup_position_in_grid]],
+        uint                 tiitg[[thread_index_in_threadgroup]],
+        uint3                tptg [[threads_per_threadgroup]]) {
+    const int64_t i10 = tgpig.x;
+    const int64_t i11 = tgpig.y;
+
+    const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0];
+
+    const int64_t i02 = i11;
+
+    for (int ind = tiitg; ind < ne00; ind += tptg.x) {
+        ((device float *) ((device char *) dst + i11*nb2 + i10*nb1))[ind] =
+            ((device half *) ((device char *) src0 + r*nb01 + i02*nb02))[ind];
+    }
+}
+
+kernel void kernel_get_rows_i32(
+        device const  void * src0,
+        device const  char * src1,
+        device     int32_t * dst,
+        constant   int64_t & ne00,
+        constant  uint64_t & nb01,
+        constant  uint64_t & nb02,
+        constant   int64_t & ne10,
+        constant  uint64_t & nb10,
+        constant  uint64_t & nb11,
+        constant  uint64_t & nb1,
+        constant  uint64_t & nb2,
+        uint3                tgpig[[threadgroup_position_in_grid]],
+        uint                 tiitg[[thread_index_in_threadgroup]],
+        uint3                tptg [[threads_per_threadgroup]]) {
+    const int64_t i10 = tgpig.x;
+    const int64_t i11 = tgpig.y;
+
+    const int64_t r = ((device int32_t *) ((device char *) src1 + i11*nb11 + i10*nb10))[0];
+
+    const int64_t i02 = i11;
+
+    for (int ind = tiitg; ind < ne00; ind += tptg.x) {
+        ((device int32_t *) ((device char *) dst + i11*nb2 + i10*nb1))[ind] =
+            ((device int32_t *) ((device char *) src0 + r*nb01 + i02*nb02))[ind];
+    }
+}
+
+
+#define BLOCK_SIZE_M 64 // 8 simdgroup matrices from matrix A
+#define BLOCK_SIZE_N 32 // 4 simdgroup matrices from matrix B
+#define BLOCK_SIZE_K 32
+#define THREAD_MAT_M 4 // each thread take 4 simdgroup matrices from matrix A
+#define THREAD_MAT_N 2 // each thread take 2 simdgroup matrices from matrix B
+#define THREAD_PER_BLOCK 128
+#define THREAD_PER_ROW 2 // 2 thread for each row in matrix A to load numbers
+#define THREAD_PER_COL 4 // 4 thread for each row in matrix B to load numbers
+#define SG_MAT_SIZE 64 // simdgroup matrix is of shape 8x8
+#define SG_MAT_ROW 8
+
+// each block_q contains 16*nl weights
+template<typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread half4x4 &)>
+void kernel_mul_mm_impl(device const  uchar * src0,
+                        device const  uchar * src1,
+                        device        float * dst,
+                        constant    int64_t & ne00,
+                        constant    int64_t & ne02,
+                        constant   uint64_t & nb01,
+                        constant   uint64_t & nb02,
+                        constant    int64_t & ne12,
+                        constant   uint64_t & nb10,
+                        constant   uint64_t & nb11,
+                        constant   uint64_t & nb12,
+                        constant    int64_t & ne0,
+                        constant    int64_t & ne1,
+                        constant       uint & r2,
+                        constant       uint & r3,
+                        threadgroup   uchar * shared_memory [[threadgroup(0)]],
+                        uint3                 tgpig[[threadgroup_position_in_grid]],
+                        uint                  tiitg[[thread_index_in_threadgroup]],
+                        uint                  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    threadgroup half  * sa = (threadgroup half  *)(shared_memory);
+    threadgroup float * sb = (threadgroup float *)(shared_memory + 4096);
+
+    const uint r0 = tgpig.y;
+    const uint r1 = tgpig.x;
+    const uint im = tgpig.z;
+
+    // if this block is of 64x32 shape or smaller
+    short n_rows = (ne0 - r0 * BLOCK_SIZE_M < BLOCK_SIZE_M) ? (ne0 - r0 * BLOCK_SIZE_M) : BLOCK_SIZE_M;
+    short n_cols = (ne1 - r1 * BLOCK_SIZE_N < BLOCK_SIZE_N) ? (ne1 - r1 * BLOCK_SIZE_N) : BLOCK_SIZE_N;
+
+    // a thread shouldn't load data outside of the matrix
+    short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1;
+    short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1;
+
+    simdgroup_half8x8  ma[4];
+    simdgroup_float8x8 mb[2];
+    simdgroup_float8x8 c_res[8];
+    for (int i = 0; i < 8; i++){
+        c_res[i] = make_filled_simdgroup_matrix<float, 8>(0.f);
+    }
+
+    short il = (tiitg % THREAD_PER_ROW);
+
+    const uint i12 = im%ne12;
+    const uint i13 = im/ne12;
+
+    uint   offset0 = (i12/r2)*nb02 + (i13/r3)*(nb02*ne02);
+    ushort offset1 = il/nl;
+
+    device const block_q * x = (device const block_q *)(src0 + (r0 * BLOCK_SIZE_M + thread_row) * nb01 + offset0) + offset1;
+    device const float   * y = (device const float   *)(src1
+        + nb12 * im
+        + nb11 * (r1 * BLOCK_SIZE_N + thread_col)
+        + nb10 * (BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL)));
+
+    for (int loop_k = 0; loop_k < ne00; loop_k += BLOCK_SIZE_K) {
+        // load data and store to threadgroup memory
+        half4x4 temp_a;
+        dequantize_func(x, il, temp_a);
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        #pragma unroll(16)
+        for (int i = 0; i < 16; i++) {
+            *(sa + SG_MAT_SIZE * ((tiitg / THREAD_PER_ROW / 8) \
+            +                     (tiitg % THREAD_PER_ROW) * 16 + (i / 8) * 8) \
+            +                     (tiitg / THREAD_PER_ROW) % 8  + (i & 7) * 8) = temp_a[i/4][i%4];
+        }
+
+        *(threadgroup float2x4 *)(sb + (tiitg % THREAD_PER_COL) * 8 * 32 + 8 * (tiitg / THREAD_PER_COL)) = *((device float2x4 *)y);
+
+        il = (il + 2 < nl) ? il + 2 : il % 2;
+        x  = (il < 2) ? x + (2+nl-1)/nl : x;
+        y += BLOCK_SIZE_K;
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        // load matrices from threadgroup memory and conduct outer products
+        threadgroup half  * lsma = (sa + THREAD_MAT_M * SG_MAT_SIZE * (sgitg % 2));
+        threadgroup float * lsmb = (sb + THREAD_MAT_N * SG_MAT_SIZE * (sgitg / 2));
+
+        #pragma unroll(4)
+        for (int ik = 0; ik < BLOCK_SIZE_K / 8; ik++) {
+            #pragma unroll(4)
+            for (int i = 0; i < 4; i++) {
+                simdgroup_load(ma[i],lsma + SG_MAT_SIZE * i);
+            }
+            simdgroup_barrier(mem_flags::mem_none);
+            #pragma unroll(2)
+            for (int i = 0; i < 2; i++) {
+                simdgroup_load(mb[i],lsmb + SG_MAT_SIZE * i);
+            }
+
+            lsma += BLOCK_SIZE_M / SG_MAT_ROW * SG_MAT_SIZE;
+            lsmb += BLOCK_SIZE_N / SG_MAT_ROW * SG_MAT_SIZE;
+
+            #pragma unroll(8)
+            for (int i = 0; i < 8; i++){
+                simdgroup_multiply_accumulate(c_res[i], mb[i/4], ma[i%4], c_res[i]);
+            }
+        }
+    }
+
+    if ((r0 + 1) * BLOCK_SIZE_M <= ne0 && (r1 + 1) * BLOCK_SIZE_N <= ne1) {
+        device float * C = dst + (BLOCK_SIZE_M * r0 + 32 * (sgitg &  1)) \
+                               + (BLOCK_SIZE_N * r1 + 16 * (sgitg >> 1)) * ne0 + im*ne1*ne0;
+        for (int i = 0; i < 8; i++) {
+            simdgroup_store(c_res[i], C + 8 * (i%4) + 8 * ne0 * (i/4), ne0);
+        }
+    } else {
+        // block is smaller than 64x32, we should avoid writing data outside of the matrix
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+        threadgroup float * temp_str = ((threadgroup float *)shared_memory) \
+                                      + 32 * (sgitg&1) + (16 * (sgitg>>1)) * BLOCK_SIZE_M;
+        for (int i = 0; i < 8; i++) {
+            simdgroup_store(c_res[i], temp_str + 8 * (i%4) + 8 * BLOCK_SIZE_M * (i/4), BLOCK_SIZE_M);
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        device float * C = dst + (BLOCK_SIZE_M * r0) + (BLOCK_SIZE_N * r1) * ne0 + im*ne1*ne0;
+        if (sgitg == 0) {
+            for (int i = 0; i < n_rows; i++) {
+                for (int j = tiitg; j < n_cols; j += BLOCK_SIZE_N) {
+                    *(C + i + j * ne0) = *(temp_str + i + j * BLOCK_SIZE_M);
+                }
+            }
+        }
+    }
+}
+
+// same as kernel_mul_mm_impl, but src1 and dst are accessed via indices stored in rowids
+template<typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread half4x4 &)>
+void kernel_mul_mm_id_impl(
+        device const  uchar * src0,
+        device const  uchar * src1,
+        threadgroup ushort2 * rowids,
+        device        float * dst,
+        constant    int64_t & ne00,
+        constant    int64_t & ne02,
+        constant   uint64_t & nb01,
+        constant   uint64_t & nb02,
+        constant    int64_t & ne11,
+        constant    int64_t & ne12,
+        constant   uint64_t & nb10,
+        constant   uint64_t & nb11,
+        constant   uint64_t & nb12,
+        constant    int64_t & ne0,
+                    int64_t   ne1,
+                    int64_t   ne0ne1,
+        threadgroup   uchar * shared_memory,
+        uint3                 tgpig[[threadgroup_position_in_grid]],
+        uint                  tiitg[[thread_index_in_threadgroup]],
+        uint                  sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    threadgroup half  * sa = (threadgroup half  *)(shared_memory);
+    threadgroup float * sb = (threadgroup float *)(shared_memory + 4096);
+
+    const uint r0 = tgpig.y;
+    const uint r1 = tgpig.x;
+
+    if (r1 * BLOCK_SIZE_N >= ne1) return;
+
+    // if this block is of 64x32 shape or smaller
+    short n_rows = (ne0 - r0 * BLOCK_SIZE_M < BLOCK_SIZE_M) ? (ne0 - r0 * BLOCK_SIZE_M) : BLOCK_SIZE_M;
+    short n_cols = (ne1 - r1 * BLOCK_SIZE_N < BLOCK_SIZE_N) ? (ne1 - r1 * BLOCK_SIZE_N) : BLOCK_SIZE_N;
+
+    // a thread shouldn't load data outside of the matrix
+    short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1;
+    short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1;
+
+    simdgroup_half8x8  ma[4];
+    simdgroup_float8x8 mb[2];
+    simdgroup_float8x8 c_res[8];
+    for (int i = 0; i < 8; i++){
+        c_res[i] = make_filled_simdgroup_matrix<float, 8>(0.f);
+    }
+    short il = (tiitg % THREAD_PER_ROW);
+
+    ushort offset1 = il/nl;
+
+    threadgroup const auto & id = rowids[r1 * BLOCK_SIZE_N + thread_col];
+
+    device const block_q * x = (device const block_q *)(src0 + (r0 * BLOCK_SIZE_M + thread_row) * nb01) + offset1;
+    device const float   * y = (device const float   *)(src1
+        + nb12 * id[1]
+        + nb11 * (id[0] % ne11)
+        + nb10 * (BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL)));
+
+    for (int loop_k = 0; loop_k < ne00; loop_k += BLOCK_SIZE_K) {
+        // load data and store to threadgroup memory
+        half4x4 temp_a;
+        dequantize_func(x, il, temp_a);
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        for (int i = 0; i < 16; i++) {
+            *(sa + SG_MAT_SIZE * ((tiitg / THREAD_PER_ROW / 8) \
+            +                     (tiitg % THREAD_PER_ROW) * 16 + (i / 8) * 8) \
+            +                     (tiitg / THREAD_PER_ROW) % 8  + (i & 7) * 8) = temp_a[i/4][i%4];
+        }
+
+        *(threadgroup float2x4 *)(sb + (tiitg % THREAD_PER_COL) * 8 * 32 + 8 * (tiitg / THREAD_PER_COL)) = *((device float2x4 *)y);
+
+        il = (il + 2 < nl) ? il + 2 : il % 2;
+        x  = (il < 2) ? x + (2+nl-1)/nl : x;
+        y += BLOCK_SIZE_K;
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        // load matrices from threadgroup memory and conduct outer products
+        threadgroup half  * lsma = (sa + THREAD_MAT_M * SG_MAT_SIZE * (sgitg % 2));
+        threadgroup float * lsmb = (sb + THREAD_MAT_N * SG_MAT_SIZE * (sgitg / 2));
+
+        for (int ik = 0; ik < BLOCK_SIZE_K / 8; ik++) {
+            for (int i = 0; i < 4; i++) {
+                simdgroup_load(ma[i], lsma + SG_MAT_SIZE * i);
+            }
+            simdgroup_barrier(mem_flags::mem_none);
+            for (int i = 0; i < 2; i++) {
+                simdgroup_load(mb[i], lsmb + SG_MAT_SIZE * i);
+            }
+
+            lsma += BLOCK_SIZE_M / SG_MAT_ROW * SG_MAT_SIZE;
+            lsmb += BLOCK_SIZE_N / SG_MAT_ROW * SG_MAT_SIZE;
+
+            for (int i = 0; i < 8; i++){
+                simdgroup_multiply_accumulate(c_res[i], mb[i/4], ma[i%4], c_res[i]);
+            }
+        }
+    }
+
+    {
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+        threadgroup float * temp_str = ((threadgroup float *)shared_memory) \
+                                      + 32 * (sgitg&1) + (16 * (sgitg>>1)) * BLOCK_SIZE_M;
+        for (int i = 0; i < 8; i++) {
+            simdgroup_store(c_res[i], temp_str + 8 * (i%4) + 8 * BLOCK_SIZE_M * (i/4), BLOCK_SIZE_M);
+        }
+
+        threadgroup_barrier(mem_flags::mem_threadgroup);
+
+        device float * C = dst + (BLOCK_SIZE_M * r0);
+        if (sgitg == 0) {
+            for (int j = tiitg; j < n_cols; j += BLOCK_SIZE_N) {
+                threadgroup const auto & jid = rowids[r1 * BLOCK_SIZE_N + j];
+                int joff =  jid[0] * ne0 + jid[1] * ne0ne1;
+                for (int i = 0; i < n_rows; i++) {
+                    *(C + i + joff) = *(temp_str + i + j * BLOCK_SIZE_M);
+                }
+            }
+        }
+    }
+}
+
+template<typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread half4x4 &)>
+kernel void kernel_mul_mm(device const  uchar * src0,
+                          device const  uchar * src1,
+                          device        float * dst,
+                          constant    int64_t & ne00,
+                          constant    int64_t & ne02,
+                          constant   uint64_t & nb01,
+                          constant   uint64_t & nb02,
+                          constant    int64_t & ne12,
+                          constant   uint64_t & nb10,
+                          constant   uint64_t & nb11,
+                          constant   uint64_t & nb12,
+                          constant    int64_t & ne0,
+                          constant    int64_t & ne1,
+                          constant       uint & r2,
+                          constant       uint & r3,
+                          threadgroup   uchar * shared_memory [[threadgroup(0)]],
+                          uint3                 tgpig[[threadgroup_position_in_grid]],
+                          uint                  tiitg[[thread_index_in_threadgroup]],
+                          uint                  sgitg[[simdgroup_index_in_threadgroup]]) {
+    kernel_mul_mm_impl<block_q, nl, dequantize_func>(
+        src0,
+        src1,
+        dst,
+        ne00,
+        ne02,
+        nb01,
+        nb02,
+        ne12,
+        nb10,
+        nb11,
+        nb12,
+        ne0,
+        ne1,
+        r2,
+        r3,
+        shared_memory,
+        tgpig,
+        tiitg,
+        sgitg);
+}
+
+template<typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread half4x4 &)>
+kernel void kernel_mul_mm_id(
+        device const   uchar * src0s,
+        device const   uchar * src1,
+        device         float * dst,
+        device const   uchar * ids,
+        constant     int64_t & nei0,
+        constant     int64_t & nei1,
+        constant    uint64_t & nbi1,
+        constant     int64_t & ne00,
+        constant     int64_t & ne02,
+        constant    uint64_t & nb01,
+        constant    uint64_t & nb02,
+        constant     int64_t & ne11,
+        constant     int64_t & ne12,
+        constant     int64_t & ne13,
+        constant    uint64_t & nb10,
+        constant    uint64_t & nb11,
+        constant    uint64_t & nb12,
+        constant     int64_t & ne0,
+        constant     int64_t & ne1,
+        constant    uint64_t & nb1,
+        threadgroup    uchar * shared_memory [[threadgroup(0)]],
+        uint3                  tgpig[[threadgroup_position_in_grid]],
+        uint                   tiitg[[thread_index_in_threadgroup]],
+        uint                   sgitg[[simdgroup_index_in_threadgroup]]) {
+
+    const int32_t i02 = tgpig.z;
+    tgpig.z = 0;
+
+    device const uchar * src0 = src0s + i02*nb02;
+
+    // row indices
+    threadgroup ushort2 * rowids = (threadgroup ushort2 *)(shared_memory + 8192);
+
+    // TODO: parallelize this loop
+    int64_t _ne1 = 0;
+    for (ushort ii1 = 0; ii1 < nei1; ii1++) {
+        for (ushort ii0 = 0; ii0 < nei0; ii0++) {
+            int32_t id = ((device int32_t *) (ids + ii1*nbi1))[ii0];
+            if (id == i02) {
+                //if (tiitg == 0) {
+                    rowids[_ne1] = ushort2(ii0, ii1);
+                //}
+                _ne1++;
+            }
+        }
+    }
+
+    threadgroup_barrier(mem_flags::mem_threadgroup);
+
+    kernel_mul_mm_id_impl<block_q, nl, dequantize_func>(
+        src0,
+        src1,
+        rowids,
+        dst,
+        ne00,
+        ne02,
+        nb01,
+        nb02,
+        ne11,
+        ne12,
+        nb10,
+        nb11,
+        nb12,
+        ne0,
+        _ne1,
+        ne0*ne1,
+        shared_memory,
+        tgpig,
+        tiitg,
+        sgitg);
+}
+
+#define QK_NL 16
+
+//
+// get rows
+//
+
+typedef void (get_rows_t)(
+        device const void * src0,
+        device const char * src1,
+        device      float * dst,
+        constant  int64_t & ne00,
+        constant uint64_t & nb01,
+        constant uint64_t & nb02,
+        constant  int64_t & ne10,
+        constant uint64_t & nb10,
+        constant uint64_t & nb11,
+        constant uint64_t & nb1,
+        constant uint64_t & nb2,
+        uint3, uint, uint3);
+
+//template [[host_name("kernel_get_rows_f32")]]  kernel get_rows_t kernel_get_rows<float4x4,   1, dequantize_f32>;
+//template [[host_name("kernel_get_rows_f16")]]  kernel get_rows_t kernel_get_rows<half4x4,    1, dequantize_f16>;
+template [[host_name("kernel_get_rows_q4_0")]] kernel get_rows_t kernel_get_rows<block_q4_0, 2, dequantize_q4_0>;
+template [[host_name("kernel_get_rows_q4_1")]] kernel get_rows_t kernel_get_rows<block_q4_1, 2, dequantize_q4_1>;
+template [[host_name("kernel_get_rows_q5_0")]] kernel get_rows_t kernel_get_rows<block_q5_0, 2, dequantize_q5_0>;
+template [[host_name("kernel_get_rows_q5_1")]] kernel get_rows_t kernel_get_rows<block_q5_1, 2, dequantize_q5_1>;
+template [[host_name("kernel_get_rows_q8_0")]] kernel get_rows_t kernel_get_rows<block_q8_0, 2, dequantize_q8_0>;
+template [[host_name("kernel_get_rows_q2_K")]] kernel get_rows_t kernel_get_rows<block_q2_K, QK_NL, dequantize_q2_K>;
+template [[host_name("kernel_get_rows_q3_K")]] kernel get_rows_t kernel_get_rows<block_q3_K, QK_NL, dequantize_q3_K>;
+template [[host_name("kernel_get_rows_q4_K")]] kernel get_rows_t kernel_get_rows<block_q4_K, QK_NL, dequantize_q4_K>;
+template [[host_name("kernel_get_rows_q5_K")]] kernel get_rows_t kernel_get_rows<block_q5_K, QK_NL, dequantize_q5_K>;
+template [[host_name("kernel_get_rows_q6_K")]] kernel get_rows_t kernel_get_rows<block_q6_K, QK_NL, dequantize_q6_K>;
+template [[host_name("kernel_get_rows_iq2_xxs")]] kernel get_rows_t kernel_get_rows<block_iq2_xxs, QK_NL, dequantize_iq2_xxs>;
+template [[host_name("kernel_get_rows_iq2_xs")]]  kernel get_rows_t kernel_get_rows<block_iq2_xs,  QK_NL, dequantize_iq2_xs>;
+template [[host_name("kernel_get_rows_iq3_xxs")]] kernel get_rows_t kernel_get_rows<block_iq3_xxs, QK_NL, dequantize_iq3_xxs>;
+template [[host_name("kernel_get_rows_iq3_s")]]   kernel get_rows_t kernel_get_rows<block_iq3_s,   QK_NL, dequantize_iq3_s>;
+template [[host_name("kernel_get_rows_iq2_s")]]   kernel get_rows_t kernel_get_rows<block_iq2_s,   QK_NL, dequantize_iq2_s>;
+template [[host_name("kernel_get_rows_iq1_s")]]   kernel get_rows_t kernel_get_rows<block_iq1_s,   QK_NL, dequantize_iq1_s>;
+template [[host_name("kernel_get_rows_iq1_m")]]   kernel get_rows_t kernel_get_rows<block_iq1_m,   QK_NL, dequantize_iq1_m>;
+template [[host_name("kernel_get_rows_iq4_nl")]]  kernel get_rows_t kernel_get_rows<block_iq4_nl,  2,     dequantize_iq4_nl>;
+template [[host_name("kernel_get_rows_iq4_xs")]]  kernel get_rows_t kernel_get_rows<block_iq4_xs,  QK_NL, dequantize_iq4_xs>;
+
+//
+// matrix-matrix multiplication
+//
+
+typedef decltype(kernel_mul_mm<float4x4, 1, dequantize_f32>) mat_mm_t;
+
+template [[host_name("kernel_mul_mm_f32_f32")]]     kernel mat_mm_t kernel_mul_mm<float4x4,      1,     dequantize_f32>;
+template [[host_name("kernel_mul_mm_f16_f32")]]     kernel mat_mm_t kernel_mul_mm<half4x4,       1,     dequantize_f16>;
+template [[host_name("kernel_mul_mm_q4_0_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q4_0,    2,     dequantize_q4_0>;
+template [[host_name("kernel_mul_mm_q4_1_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q4_1,    2,     dequantize_q4_1>;
+template [[host_name("kernel_mul_mm_q5_0_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q5_0,    2,     dequantize_q5_0>;
+template [[host_name("kernel_mul_mm_q5_1_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q5_1,    2,     dequantize_q5_1>;
+template [[host_name("kernel_mul_mm_q8_0_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q8_0,    2,     dequantize_q8_0>;
+template [[host_name("kernel_mul_mm_q2_K_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q2_K,    QK_NL, dequantize_q2_K>;
+template [[host_name("kernel_mul_mm_q3_K_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q3_K,    QK_NL, dequantize_q3_K>;
+template [[host_name("kernel_mul_mm_q4_K_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q4_K,    QK_NL, dequantize_q4_K>;
+template [[host_name("kernel_mul_mm_q5_K_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q5_K,    QK_NL, dequantize_q5_K>;
+template [[host_name("kernel_mul_mm_q6_K_f32")]]    kernel mat_mm_t kernel_mul_mm<block_q6_K,    QK_NL, dequantize_q6_K>;
+template [[host_name("kernel_mul_mm_iq2_xxs_f32")]] kernel mat_mm_t kernel_mul_mm<block_iq2_xxs, QK_NL, dequantize_iq2_xxs>;
+template [[host_name("kernel_mul_mm_iq2_xs_f32")]]  kernel mat_mm_t kernel_mul_mm<block_iq2_xs,  QK_NL, dequantize_iq2_xs>;
+template [[host_name("kernel_mul_mm_iq3_xxs_f32")]] kernel mat_mm_t kernel_mul_mm<block_iq3_xxs, QK_NL, dequantize_iq3_xxs>;
+template [[host_name("kernel_mul_mm_iq3_s_f32")]]   kernel mat_mm_t kernel_mul_mm<block_iq3_s,   QK_NL, dequantize_iq3_s>;
+template [[host_name("kernel_mul_mm_iq2_s_f32")]]   kernel mat_mm_t kernel_mul_mm<block_iq2_s,   QK_NL, dequantize_iq2_s>;
+template [[host_name("kernel_mul_mm_iq1_s_f32")]]   kernel mat_mm_t kernel_mul_mm<block_iq1_s,   QK_NL, dequantize_iq1_s>;
+template [[host_name("kernel_mul_mm_iq1_m_f32")]]   kernel mat_mm_t kernel_mul_mm<block_iq1_m,   QK_NL, dequantize_iq1_m>;
+template [[host_name("kernel_mul_mm_iq4_nl_f32")]]  kernel mat_mm_t kernel_mul_mm<block_iq4_nl,  2,     dequantize_iq4_nl>;
+template [[host_name("kernel_mul_mm_iq4_xs_f32")]]  kernel mat_mm_t kernel_mul_mm<block_iq4_xs,  QK_NL, dequantize_iq4_xs>;
+
+//
+// indirect matrix-matrix multiplication
+//
+
+typedef decltype(kernel_mul_mm_id<float4x4, 1, dequantize_f32>) mat_mm_id_t;
+
+template [[host_name("kernel_mul_mm_id_f32_f32")]]     kernel mat_mm_id_t kernel_mul_mm_id<float4x4,      1,     dequantize_f32>;
+template [[host_name("kernel_mul_mm_id_f16_f32")]]     kernel mat_mm_id_t kernel_mul_mm_id<half4x4,       1,     dequantize_f16>;
+template [[host_name("kernel_mul_mm_id_q4_0_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q4_0,    2,     dequantize_q4_0>;
+template [[host_name("kernel_mul_mm_id_q4_1_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q4_1,    2,     dequantize_q4_1>;
+template [[host_name("kernel_mul_mm_id_q5_0_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q5_0,    2,     dequantize_q5_0>;
+template [[host_name("kernel_mul_mm_id_q5_1_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q5_1,    2,     dequantize_q5_1>;
+template [[host_name("kernel_mul_mm_id_q8_0_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q8_0,    2,     dequantize_q8_0>;
+template [[host_name("kernel_mul_mm_id_q2_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q2_K,    QK_NL, dequantize_q2_K>;
+template [[host_name("kernel_mul_mm_id_q3_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q3_K,    QK_NL, dequantize_q3_K>;
+template [[host_name("kernel_mul_mm_id_q4_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q4_K,    QK_NL, dequantize_q4_K>;
+template [[host_name("kernel_mul_mm_id_q5_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q5_K,    QK_NL, dequantize_q5_K>;
+template [[host_name("kernel_mul_mm_id_q6_K_f32")]]    kernel mat_mm_id_t kernel_mul_mm_id<block_q6_K,    QK_NL, dequantize_q6_K>;
+template [[host_name("kernel_mul_mm_id_iq2_xxs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id<block_iq2_xxs, QK_NL, dequantize_iq2_xxs>;
+template [[host_name("kernel_mul_mm_id_iq2_xs_f32")]]  kernel mat_mm_id_t kernel_mul_mm_id<block_iq2_xs,  QK_NL, dequantize_iq2_xs>;
+template [[host_name("kernel_mul_mm_id_iq3_xxs_f32")]] kernel mat_mm_id_t kernel_mul_mm_id<block_iq3_xxs, QK_NL, dequantize_iq3_xxs>;
+template [[host_name("kernel_mul_mm_id_iq3_s_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id<block_iq3_s,   QK_NL, dequantize_iq3_s>;
+template [[host_name("kernel_mul_mm_id_iq2_s_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id<block_iq2_s,   QK_NL, dequantize_iq2_s>;
+template [[host_name("kernel_mul_mm_id_iq1_s_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id<block_iq1_s,   QK_NL, dequantize_iq1_s>;
+template [[host_name("kernel_mul_mm_id_iq1_m_f32")]]   kernel mat_mm_id_t kernel_mul_mm_id<block_iq1_m,   QK_NL, dequantize_iq1_m>;
+template [[host_name("kernel_mul_mm_id_iq4_nl_f32")]]  kernel mat_mm_id_t kernel_mul_mm_id<block_iq4_nl,  2,     dequantize_iq4_nl>;
+template [[host_name("kernel_mul_mm_id_iq4_xs_f32")]]  kernel mat_mm_id_t kernel_mul_mm_id<block_iq4_xs,  QK_NL, dequantize_iq4_xs>;
+
+//
+// matrix-vector multiplication
+//
+
+typedef void (kernel_mul_mv_impl_t)(
+        device const  char * src0,
+        device const  char * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                  uint64_t   nb00,
+                  uint64_t   nb01,
+                  uint64_t   nb02,
+                   int64_t   ne10,
+                   int64_t   ne11,
+                   int64_t   ne12,
+                  uint64_t   nb10,
+                  uint64_t   nb11,
+                  uint64_t   nb12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+                   uint3     tgpig,
+                   uint      tiisg);
+
+typedef void (kernel_mul_mv2_impl_t)(
+        device const  void * src0,
+        device const float * src1,
+        device       float * dst,
+                   int64_t   ne00,
+                   int64_t   ne01,
+                   int64_t   ne02,
+                   int64_t   ne10,
+                   int64_t   ne12,
+                   int64_t   ne0,
+                   int64_t   ne1,
+                   uint      r2,
+                   uint      r3,
+        threadgroup int8_t * shared_values,
+                   uint3     tgpig,
+                   uint      tiisg,
+                   uint      sgitg);
+
+template<kernel_mul_mv_impl_t impl_fn>
+void mmv_fn(
+        device const    char * src0,
+        device const    char * src1,
+        device         float * dst,
+                     int64_t   ne00,
+                     int64_t   ne01,
+                     int64_t   ne02,
+                    uint64_t   nb00,
+                    uint64_t   nb01,
+                    uint64_t   nb02,
+                     int64_t   ne10,
+                     int64_t   ne11,
+                     int64_t   ne12,
+                     int64_t   ne13,
+                    uint64_t   nb10,
+                    uint64_t   nb11,
+                    uint64_t   nb12,
+                     int64_t   ne0,
+                     int64_t   ne1,
+                    uint64_t   nb1,
+                        uint   r2,
+                        uint   r3,
+        threadgroup int8_t   * shared_values,
+        uint3                  tgpig,
+        uint                   tiitg,
+        uint                   tiisg,
+        uint                   sgitg) {
+    impl_fn(src0,src1,dst,ne00,ne01,ne02,nb00,nb01,nb02,ne10,ne11,ne12,nb10,nb11,nb12,ne0,ne1,r2,r3,tgpig,tiisg);
+}
+
+template<kernel_mul_mv2_impl_t impl_fn>
+void mmv_fn(
+        device const    char * src0,
+        device const    char * src1,
+        device         float * dst,
+                     int64_t   ne00,
+                     int64_t   ne01,
+                     int64_t   ne02,
+                    uint64_t   nb00,
+                    uint64_t   nb01,
+                    uint64_t   nb02,
+                     int64_t   ne10,
+                     int64_t   ne11,
+                     int64_t   ne12,
+                     int64_t   ne13,
+                    uint64_t   nb10,
+                    uint64_t   nb11,
+                    uint64_t   nb12,
+                     int64_t   ne0,
+                     int64_t   ne1,
+                    uint64_t   nb1,
+                        uint   r2,
+                        uint   r3,
+        threadgroup int8_t   * shared_values,
+        uint3                  tgpig,
+        uint                   tiitg,
+        uint                   tiisg,
+        uint                   sgitg) {
+    impl_fn(src0,(const device float *)src1,dst,ne00,ne01,ne02,ne10,ne12,ne0,ne1,r2,r3,shared_values,tgpig,tiisg,sgitg);
+}
+
+typedef decltype(mmv_fn<kernel_mul_mv_f32_f32_impl>) mul_mv_impl_fn_t;
+
+template<mul_mv_impl_fn_t impl_fn>
+kernel void kernel_mul_mv_id(
+        device const    char * src0s,
+        device const    char * src1,
+        device         float * dst,
+        device const    char * ids,
+        constant     int64_t & nei0,
+        constant     int64_t & nei1,
+        constant    uint64_t & nbi1,
+        constant     int64_t & ne00,
+        constant     int64_t & ne01,
+        constant     int64_t & ne02,
+        constant    uint64_t & nb00,
+        constant    uint64_t & nb01,
+        constant    uint64_t & nb02,
+        constant     int64_t & ne10,
+        constant     int64_t & ne11,
+        constant     int64_t & ne12,
+        constant     int64_t & ne13,
+        constant    uint64_t & nb10,
+        constant    uint64_t & nb11,
+        constant    uint64_t & nb12,
+        constant     int64_t & ne0,
+        constant     int64_t & ne1,
+        constant    uint64_t & nb1,
+        threadgroup int8_t   * shared_values [[threadgroup(0)]],
+        uint3                  tgpig[[threadgroup_position_in_grid]],
+        uint                   tiitg[[thread_index_in_threadgroup]],
+        uint                   tiisg[[thread_index_in_simdgroup]],
+        uint                   sgitg[[simdgroup_index_in_threadgroup]]) {
+    const int iid1 = tgpig.z/nei0;
+    const int idx = tgpig.z%nei0;
+
+    tgpig.z = 0;
+
+    const int32_t i02 = ((device const int32_t *) (ids + iid1*nbi1))[idx];
+
+    const int64_t i11 = idx % ne11;
+    const int64_t i12 = iid1;
+
+    const int64_t i1 = idx;
+    const int64_t i2 = i12;
+
+    device const char * src0_cur = src0s + i02*nb02;
+    device const char * src1_cur = src1 + i11*nb11 + i12*nb12;
+    device      float * dst_cur  = dst + i1*ne0 + i2*ne1*ne0;
+
+    impl_fn(
+        /* src0 */ src0_cur,
+        /* src1 */ src1_cur,
+        /* dst  */ dst_cur,
+        /* ne00 */ ne00,
+        /* ne01 */ ne01,
+        /* ne02 */ 1,//ne02,
+        /* nb00 */ nb00,
+        /* nb01 */ nb01,
+        /* nb02 */ nb02,
+        /* ne10 */ ne10,
+        /* ne11 */ 1,//ne11,
+        /* ne12 */ 1,//ne12,
+        /* ne13 */ 1,//ne13,
+        /* nb10 */ nb10,
+        /* nb11 */ nb11,
+        /* nb12 */ nb12,
+        /* ne0  */ ne0,
+        /* ne1  */ 1,//ne1,
+        /* nb1  */ nb1,
+        /* r2   */ 1,
+        /* r3   */ 1,
+        shared_values,
+        tgpig,
+        tiitg,
+        tiisg,
+        sgitg);
+}
+
+typedef decltype(kernel_mul_mv_id<mmv_fn<kernel_mul_mv_f32_f32_impl>>) kernel_mul_mv_id_t;
+
+template [[host_name("kernel_mul_mv_id_f32_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_f32_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_f16_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_f16_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_q8_0_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q8_0_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_q4_0_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<mul_vec_q_n_f32_impl<block_q4_0, N_DST, N_SIMDGROUP, N_SIMDWIDTH>>>;
+template [[host_name("kernel_mul_mv_id_q4_1_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<mul_vec_q_n_f32_impl<block_q4_1, N_DST, N_SIMDGROUP, N_SIMDWIDTH>>>;
+template [[host_name("kernel_mul_mv_id_q5_0_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<mul_vec_q_n_f32_impl<block_q5_0, N_DST, N_SIMDGROUP, N_SIMDWIDTH>>>;
+template [[host_name("kernel_mul_mv_id_q5_1_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<mul_vec_q_n_f32_impl<block_q5_1, N_DST, N_SIMDGROUP, N_SIMDWIDTH>>>;
+template [[host_name("kernel_mul_mv_id_q2_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q2_K_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_q3_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q3_K_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_q4_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q4_K_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_q5_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q5_K_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_q6_K_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_q6_K_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_iq1_s_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq1_s_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_iq1_m_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq1_m_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_iq2_xxs_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq2_xxs_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_iq2_xs_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq2_xs_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_iq3_xxs_f32")]] kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq3_xxs_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_iq3_s_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq3_s_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_iq2_s_f32")]]   kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq2_s_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_iq4_nl_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq4_nl_f32_impl>>;
+template [[host_name("kernel_mul_mv_id_iq4_xs_f32")]]  kernel kernel_mul_mv_id_t kernel_mul_mv_id<mmv_fn<kernel_mul_mv_iq4_xs_f32_impl>>;
+
diff --git a/ggml/src/ggml-quants.c b/ggml/src/ggml-quants.c
new file mode 100644 (file)
index 0000000..0eb52e4
--- /dev/null
@@ -0,0 +1,14994 @@
+#define GGML_COMMON_IMPL_C
+#include "ggml-common.h"
+
+#include "ggml-quants.h"
+#include "ggml-impl.h"
+
+
+#include <math.h>
+#include <string.h>
+#include <assert.h>
+#include <float.h>
+#include <stdlib.h> // for qsort
+#include <stdio.h>  // for GGML_ASSERT
+
+#define GROUP_MAX_EPS 1e-15f
+#define GROUP_MAX_EPS_IQ3_XXS 1e-8f
+#define GROUP_MAX_EPS_IQ2_S 1e-8f
+#define GROUP_MAX_EPS_IQ1_M 1e-7f
+#define GROUP_MAX_EPS_IQ1_S 1e-12f
+
+#if defined(_MSC_VER)
+// disable "possible loss of data" to avoid warnings for hundreds of casts
+// we should just be careful :)
+#pragma warning(disable: 4244 4267)
+#endif
+
+#define UNUSED GGML_UNUSED
+
+// some compilers don't provide _mm256_set_m128i, e.g. gcc 7
+#define MM256_SET_M128I(a, b) _mm256_insertf128_si256(_mm256_castsi128_si256(b), (a), 1)
+
+#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__)
+// multiply int8_t, add results pairwise twice
+static inline __m128i mul_sum_i8_pairs(const __m128i x, const __m128i y) {
+    // Get absolute values of x vectors
+    const __m128i ax = _mm_sign_epi8(x, x);
+    // Sign the values of the y vectors
+    const __m128i sy = _mm_sign_epi8(y, x);
+    // Perform multiplication and create 16-bit values
+    const __m128i dot = _mm_maddubs_epi16(ax, sy);
+    const __m128i ones = _mm_set1_epi16(1);
+    return _mm_madd_epi16(ones, dot);
+}
+
+#if __AVX__ || __AVX2__ || __AVX512F__
+// horizontally add 8 floats
+static inline float hsum_float_8(const __m256 x) {
+    __m128 res = _mm256_extractf128_ps(x, 1);
+    res = _mm_add_ps(res, _mm256_castps256_ps128(x));
+    res = _mm_add_ps(res, _mm_movehl_ps(res, res));
+    res = _mm_add_ss(res, _mm_movehdup_ps(res));
+    return _mm_cvtss_f32(res);
+}
+
+// horizontally add 8 int32_t
+static inline int hsum_i32_8(const __m256i a) {
+    const __m128i sum128 = _mm_add_epi32(_mm256_castsi256_si128(a), _mm256_extractf128_si256(a, 1));
+    const __m128i hi64 = _mm_unpackhi_epi64(sum128, sum128);
+    const __m128i sum64 = _mm_add_epi32(hi64, sum128);
+    const __m128i hi32  = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1));
+    return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32));
+}
+
+// horizontally add 4 int32_t
+static inline int hsum_i32_4(const __m128i a) {
+    const __m128i hi64 = _mm_unpackhi_epi64(a, a);
+    const __m128i sum64 = _mm_add_epi32(hi64, a);
+    const __m128i hi32  = _mm_shuffle_epi32(sum64, _MM_SHUFFLE(2, 3, 0, 1));
+    return _mm_cvtsi128_si32(_mm_add_epi32(sum64, hi32));
+}
+
+#if defined(__AVX2__) || defined(__AVX512F__)
+// spread 32 bits to 32 bytes { 0x00, 0xFF }
+static inline __m256i bytes_from_bits_32(const uint8_t * x) {
+    uint32_t x32;
+    memcpy(&x32, x, sizeof(uint32_t));
+    const __m256i shuf_mask = _mm256_set_epi64x(
+            0x0303030303030303, 0x0202020202020202,
+            0x0101010101010101, 0x0000000000000000);
+    __m256i bytes = _mm256_shuffle_epi8(_mm256_set1_epi32(x32), shuf_mask);
+    const __m256i bit_mask = _mm256_set1_epi64x(0x7fbfdfeff7fbfdfe);
+    bytes = _mm256_or_si256(bytes, bit_mask);
+    return _mm256_cmpeq_epi8(bytes, _mm256_set1_epi64x(-1));
+}
+
+// Unpack 32 4-bit fields into 32 bytes
+// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval
+static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi)
+{
+    const __m128i tmp = _mm_loadu_si128((const __m128i *)rsi);
+    const __m256i bytes = MM256_SET_M128I(_mm_srli_epi16(tmp, 4), tmp);
+    const __m256i lowMask = _mm256_set1_epi8( 0xF );
+    return _mm256_and_si256(lowMask, bytes);
+}
+
+// add int16_t pairwise and return as float vector
+static inline __m256 sum_i16_pairs_float(const __m256i x) {
+    const __m256i ones = _mm256_set1_epi16(1);
+    const __m256i summed_pairs = _mm256_madd_epi16(ones, x);
+    return _mm256_cvtepi32_ps(summed_pairs);
+}
+
+static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) {
+#if defined(__AVXVNNI__) || (defined(__AVX512VNNI__) && defined(__AVX512VL__))
+    const __m256i zero = _mm256_setzero_si256();
+    const __m256i summed_pairs = _mm256_dpbusd_epi32(zero, ax, sy);
+    return _mm256_cvtepi32_ps(summed_pairs);
+#else
+    // Perform multiplication and create 16-bit values
+    const __m256i dot = _mm256_maddubs_epi16(ax, sy);
+    return sum_i16_pairs_float(dot);
+#endif
+}
+
+// multiply int8_t, add results pairwise twice and return as float vector
+static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) {
+#if __AVXVNNIINT8__
+    const __m256i zero = _mm256_setzero_si256();
+    const __m256i summed_pairs = _mm256_dpbssd_epi32(zero, x, y);
+    return _mm256_cvtepi32_ps(summed_pairs);
+#else
+    // Get absolute values of x vectors
+    const __m256i ax = _mm256_sign_epi8(x, x);
+    // Sign the values of the y vectors
+    const __m256i sy = _mm256_sign_epi8(y, x);
+    return mul_sum_us8_pairs_float(ax, sy);
+#endif
+}
+
+static inline __m128i packNibbles( __m256i bytes )
+{
+    // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh
+#if __AVX512F__
+    const __m256i bytes_srli_4 = _mm256_srli_epi16(bytes, 4);   // 0000_0000_abcd_0000
+    bytes = _mm256_or_si256(bytes, bytes_srli_4);               // 0000_abcd_abcd_efgh
+    return _mm256_cvtepi16_epi8(bytes);                         // abcd_efgh
+#else
+    const __m256i lowByte = _mm256_set1_epi16( 0xFF );
+    __m256i high = _mm256_andnot_si256( lowByte, bytes );
+    __m256i low = _mm256_and_si256( lowByte, bytes );
+    high = _mm256_srli_epi16( high, 4 );
+    bytes = _mm256_or_si256( low, high );
+
+    // Compress uint16_t lanes into bytes
+    __m128i r0 = _mm256_castsi256_si128( bytes );
+    __m128i r1 = _mm256_extracti128_si256( bytes, 1 );
+    return _mm_packus_epi16( r0, r1 );
+#endif
+}
+#elif defined(__AVX__)
+// spread 32 bits to 32 bytes { 0x00, 0xFF }
+static inline __m256i bytes_from_bits_32(const uint8_t * x) {
+    uint32_t x32;
+    memcpy(&x32, x, sizeof(uint32_t));
+    const __m128i shuf_maskl = _mm_set_epi64x(0x0101010101010101, 0x0000000000000000);
+    const __m128i shuf_maskh = _mm_set_epi64x(0x0303030303030303, 0x0202020202020202);
+    __m128i bytesl = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskl);
+    __m128i bytesh = _mm_shuffle_epi8(_mm_set1_epi32(x32), shuf_maskh);
+    const __m128i bit_mask = _mm_set1_epi64x(0x7fbfdfeff7fbfdfe);
+    bytesl = _mm_or_si128(bytesl, bit_mask);
+    bytesh = _mm_or_si128(bytesh, bit_mask);
+    bytesl = _mm_cmpeq_epi8(bytesl, _mm_set1_epi64x(-1));
+    bytesh = _mm_cmpeq_epi8(bytesh, _mm_set1_epi64x(-1));
+    return MM256_SET_M128I(bytesh, bytesl);
+}
+
+// Unpack 32 4-bit fields into 32 bytes
+// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval
+static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi)
+{
+    // Load 16 bytes from memory
+    __m128i tmpl = _mm_loadu_si128((const __m128i *)rsi);
+    __m128i tmph = _mm_srli_epi16(tmpl, 4);
+    const __m128i lowMask = _mm_set1_epi8(0xF);
+    tmpl = _mm_and_si128(lowMask, tmpl);
+    tmph = _mm_and_si128(lowMask, tmph);
+    return MM256_SET_M128I(tmph, tmpl);
+}
+
+// add int16_t pairwise and return as float vector
+static inline __m256 sum_i16_pairs_float(const __m128i xh, const __m128i xl) {
+    const __m128i ones = _mm_set1_epi16(1);
+    const __m128i summed_pairsl = _mm_madd_epi16(ones, xl);
+    const __m128i summed_pairsh = _mm_madd_epi16(ones, xh);
+    const __m256i summed_pairs = MM256_SET_M128I(summed_pairsh, summed_pairsl);
+    return _mm256_cvtepi32_ps(summed_pairs);
+}
+
+static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) {
+    const __m128i axl = _mm256_castsi256_si128(ax);
+    const __m128i axh = _mm256_extractf128_si256(ax, 1);
+    const __m128i syl = _mm256_castsi256_si128(sy);
+    const __m128i syh = _mm256_extractf128_si256(sy, 1);
+    // Perform multiplication and create 16-bit values
+    const __m128i dotl = _mm_maddubs_epi16(axl, syl);
+    const __m128i doth = _mm_maddubs_epi16(axh, syh);
+    return sum_i16_pairs_float(doth, dotl);
+}
+
+// multiply int8_t, add results pairwise twice and return as float vector
+static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) {
+    const __m128i xl = _mm256_castsi256_si128(x);
+    const __m128i xh = _mm256_extractf128_si256(x, 1);
+    const __m128i yl = _mm256_castsi256_si128(y);
+    const __m128i yh = _mm256_extractf128_si256(y, 1);
+    // Get absolute values of x vectors
+    const __m128i axl = _mm_sign_epi8(xl, xl);
+    const __m128i axh = _mm_sign_epi8(xh, xh);
+    // Sign the values of the y vectors
+    const __m128i syl = _mm_sign_epi8(yl, xl);
+    const __m128i syh = _mm_sign_epi8(yh, xh);
+    // Perform multiplication and create 16-bit values
+    const __m128i dotl = _mm_maddubs_epi16(axl, syl);
+    const __m128i doth = _mm_maddubs_epi16(axh, syh);
+    return sum_i16_pairs_float(doth, dotl);
+}
+
+static inline __m128i packNibbles( __m128i bytes1, __m128i bytes2 )
+{
+    // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh
+    const __m128i lowByte = _mm_set1_epi16( 0xFF );
+    __m128i high = _mm_andnot_si128( lowByte, bytes1 );
+    __m128i low = _mm_and_si128( lowByte, bytes1 );
+    high = _mm_srli_epi16( high, 4 );
+    bytes1 = _mm_or_si128( low, high );
+    high = _mm_andnot_si128( lowByte, bytes2 );
+    low = _mm_and_si128( lowByte, bytes2 );
+    high = _mm_srli_epi16( high, 4 );
+    bytes2 = _mm_or_si128( low, high );
+
+    return _mm_packus_epi16( bytes1, bytes2);
+}
+#endif
+#elif defined(__SSSE3__)
+// horizontally add 4x4 floats
+static inline float hsum_float_4x4(const __m128 a, const __m128 b, const __m128 c, const __m128 d) {
+    __m128 res_0 =_mm_hadd_ps(a, b);
+    __m128 res_1 =_mm_hadd_ps(c, d);
+    __m128 res =_mm_hadd_ps(res_0, res_1);
+    res =_mm_hadd_ps(res, res);
+    res =_mm_hadd_ps(res, res);
+
+    return _mm_cvtss_f32(res);
+}
+#endif // __AVX__ || __AVX2__ || __AVX512F__
+#endif // defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__) || defined(__SSSE3__)
+
+#if defined(__ARM_NEON) || defined(__wasm_simd128__) || defined(__POWER9_VECTOR__)
+#define B1(c,s,n)  0x ## n ## c ,  0x ## n ## s
+#define B2(c,s,n) B1(c,s,n ## c), B1(c,s,n ## s)
+#define B3(c,s,n) B2(c,s,n ## c), B2(c,s,n ## s)
+#define B4(c,s,n) B3(c,s,n ## c), B3(c,s,n ## s)
+#define B5(c,s,n) B4(c,s,n ## c), B4(c,s,n ## s)
+#define B6(c,s,n) B5(c,s,n ## c), B5(c,s,n ## s)
+#define B7(c,s,n) B6(c,s,n ## c), B6(c,s,n ## s)
+#define B8(c,s  ) B7(c,s,     c), B7(c,s,     s)
+
+// precomputed tables for expanding 8bits to 8 bytes:
+static const uint64_t table_b2b_0[1 << 8] = { B8(00, 10) }; // ( b) << 4
+static const uint64_t table_b2b_1[1 << 8] = { B8(10, 00) }; // (!b) << 4
+#endif
+
+#if defined(__loongarch_asx)
+
+#ifdef __clang__
+#define VREGS_PREFIX "$vr"
+#define XREGS_PREFIX "$xr"
+#else // GCC
+#define VREGS_PREFIX "$f"
+#define XREGS_PREFIX "$f"
+#endif
+#define __ALL_REGS "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31"
+// Convert __m128i to __m256i
+static inline __m256i ____m256i(__m128i in) {
+    __m256i out = __lasx_xvldi(0);
+    __asm__ volatile (
+        ".irp i," __ALL_REGS                "\n\t"
+        " .ifc %[out], " XREGS_PREFIX"\\i    \n\t"
+        "  .irp j," __ALL_REGS              "\n\t"
+        "   .ifc %[in], " VREGS_PREFIX "\\j  \n\t"
+        "    xvpermi.q $xr\\i, $xr\\j, 0x20  \n\t"
+        "   .endif                           \n\t"
+        "  .endr                             \n\t"
+        " .endif                             \n\t"
+        ".endr                               \n\t"
+        : [out] "+f" (out) : [in] "f" (in)
+    );
+    return out;
+}
+// Convert two __m128i to __m256i
+static inline __m256i lasx_set_q(__m128i inhi, __m128i inlo) {
+    __m256i out;
+    __asm__ volatile (
+        ".irp i," __ALL_REGS                "\n\t"
+        " .ifc %[hi], " VREGS_PREFIX "\\i    \n\t"
+        "  .irp j," __ALL_REGS              "\n\t"
+        "   .ifc %[lo], " VREGS_PREFIX "\\j  \n\t"
+        "    xvpermi.q $xr\\i, $xr\\j, 0x20  \n\t"
+        "   .endif                           \n\t"
+        "  .endr                             \n\t"
+        " .endif                             \n\t"
+        ".endr                               \n\t"
+        ".ifnc %[out], %[hi]                 \n\t"
+        ".irp i," __ALL_REGS                "\n\t"
+        " .ifc %[out], " XREGS_PREFIX "\\i   \n\t"
+        "  .irp j," __ALL_REGS              "\n\t"
+        "   .ifc %[hi], " VREGS_PREFIX "\\j  \n\t"
+        "    xvori.b $xr\\i, $xr\\j, 0       \n\t"
+        "   .endif                           \n\t"
+        "  .endr                             \n\t"
+        " .endif                             \n\t"
+        ".endr                               \n\t"
+        ".endif                              \n\t"
+        : [out] "=f" (out), [hi] "+f" (inhi)
+        : [lo] "f" (inlo)
+    );
+    return out;
+}
+// Convert __m256i low part to __m128i
+static inline __m128i lasx_extracti128_lo(__m256i in) {
+    __m128i out;
+    __asm__ volatile (
+        ".ifnc %[out], %[in]                 \n\t"
+        ".irp i," __ALL_REGS                "\n\t"
+        " .ifc %[out], " VREGS_PREFIX "\\i   \n\t"
+        "  .irp j," __ALL_REGS              "\n\t"
+        "   .ifc %[in], " XREGS_PREFIX "\\j  \n\t"
+        "    vori.b $vr\\i, $vr\\j, 0        \n\t"
+        "   .endif                           \n\t"
+        "  .endr                             \n\t"
+        " .endif                             \n\t"
+        ".endr                               \n\t"
+        ".endif                              \n\t"
+        : [out] "=f" (out) : [in] "f" (in)
+    );
+    return out;
+}
+// Convert __m256i high part to __m128i
+static inline __m128i lasx_extracti128_hi(__m256i in) {
+    __m128i out;
+    __asm__ volatile (
+        ".irp i," __ALL_REGS                "\n\t"
+        " .ifc %[out], " VREGS_PREFIX "\\i   \n\t"
+        "  .irp j," __ALL_REGS              "\n\t"
+        "   .ifc %[in], " XREGS_PREFIX "\\j  \n\t"
+        "    xvpermi.q $xr\\i, $xr\\j, 0x11  \n\t"
+        "   .endif                           \n\t"
+        "  .endr                             \n\t"
+        " .endif                             \n\t"
+        ".endr                               \n\t"
+        : [out] "=f" (out) : [in] "f" (in)
+    );
+    return out;
+}
+
+static __m256i lasx_set_w(int e7, int e6, int e5, int e4, int e3, int e2, int e1, int e0) {
+    v8i32 __ret = {e0, e1, e2, e3, e4, e5, e6, e7};
+    return (__m256i)__ret;
+}
+
+static __m128i lsx_set_w(int32_t a, int32_t b, int32_t c, int32_t d) {
+    v4i32 __ret = {d, c, b, a};
+    return (__m128i)__ret;
+}
+
+static __m256i lasx_set_d(int64_t a, int64_t b, int64_t c, int64_t d) {
+    v4i64 __ret = {d, c, b, a};
+    return (__m256i)__ret;
+}
+
+static __m256i lasx_insertf128( __m128i x, __m128i y) {
+    return lasx_set_q(x, y);
+}
+
+static __m128i lsx_shuffle_b(__m128i a, __m128i b) {
+    __m128i mask_f, zero, tmp0, tmp2, mask;
+    int f = 0x8f;
+    mask_f = __lsx_vreplgr2vr_b(f);
+    zero = __lsx_vldi(0);
+    tmp0 = __lsx_vand_v(b, mask_f); // get mask with low 4 bit and sign bits
+    tmp0 = __lsx_vori_b(tmp0, 0x10); // make each mask or  with 0x10 prepare for positive
+    mask = __lsx_vsle_b(zero, tmp0); // if mask >= 0, set mask
+    tmp2 = __lsx_vand_v(tmp0, mask); // maskout the in2 < ones
+    return __lsx_vshuf_b(a, zero, tmp2);
+}
+
+static __m256i lasx_shuffle_b(__m256i a, __m256i b) {
+    __m256i mask_f, zero, tmp0, tmp2, mask;
+    int f = 0x8f;
+    mask_f = __lasx_xvreplgr2vr_b(f);
+    zero = __lasx_xvldi(0);
+    tmp0 = __lasx_xvand_v(b, mask_f); // get mask with low 4 bit and sign bits
+    tmp0 = __lasx_xvori_b(tmp0, 0x10); // make each mask or  with 0x10 prepare for positive
+    mask = __lasx_xvsle_b(zero, tmp0); // if mask >= 0, set mask
+    tmp2 = __lasx_xvand_v(tmp0, mask); // maskout the in2 < ones
+    return __lasx_xvshuf_b(a, zero, tmp2);
+}
+
+static __m256i lasx_extu8_16(__m128i a) {
+    __m128i zero = __lsx_vldi(0);
+    __m128i vlo = __lsx_vilvl_b(zero, a);
+    __m128i vhi = __lsx_vilvh_b(zero, a);
+    return lasx_set_q(vhi, vlo);
+}
+
+static __m256i lasx_ext8_16(__m128i a) {
+     __m128i sign = __lsx_vslti_b(a, 0);
+     __m128i vlo = __lsx_vilvl_b(sign, a);
+     __m128i vhi = __lsx_vilvh_b(sign, a);
+     return lasx_set_q(vhi, vlo);
+}
+
+static __m256i lasx_ext16_32(__m128i a) {
+    __m256i tmp1;
+    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 0), 0);
+    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 1), 1);
+    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 2), 2);
+    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 3), 3);
+    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 4), 4);
+    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 5), 5);
+    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 6), 6);
+    tmp1 = __lasx_xvinsgr2vr_w(tmp1, __lsx_vpickve2gr_h(a, 7), 7);
+    return tmp1;
+}
+
+static __m128i lasx_extracti128( __m256i a, int pos) {
+    __m128i ret;
+    if( pos == 0)
+    {
+       ret = lasx_extracti128_lo(a);
+    } else {
+       ret = lasx_extracti128_hi(a);
+    }
+    return ret;
+}
+
+static __m128 lasx_extractf128( __m256 a, int pos) {
+    __m128 ret;
+    if( pos == 0)
+    {
+       ret = (__m128)lasx_extracti128_lo((__m256i)a);
+    } else {
+       ret = (__m128)lasx_extracti128_hi((__m256i)a);
+    }
+    return ret;
+}
+
+static __m128i lsx_hadd_h(__m128i a, __m128i b) {
+    __m128i tmp1 = __lsx_vpickev_h(b, a);
+    __m128i tmp2 = __lsx_vpickod_h(b, a);
+    return __lsx_vadd_h(tmp1, tmp2);
+}
+
+static __m128i lsx_hadd_w(__m128i a, __m128i b) {
+    __m128i tmp1 = __lsx_vpickev_w(b, a);
+    __m128i tmp2 = __lsx_vpickod_w(b, a);
+    return __lsx_vadd_w(tmp1, tmp2);
+}
+
+static __m128 lsx_hadd_s(__m128 a, __m128 b) {
+    __m128 tmp1 = (__m128)__lsx_vpickev_w((__m128i)b, (__m128i)a);
+    __m128 tmp2 = (__m128)__lsx_vpickod_w((__m128i)b, (__m128i)a);
+
+    return __lsx_vfadd_s(tmp1, tmp2);
+}
+
+static __m256i lasx_maddubs_h(__m256i a, __m256i b) {
+    __m256i tmp1, tmp2;
+    tmp1 = __lasx_xvmulwev_h_b(a, b);
+    tmp2 = __lasx_xvmulwod_h_b(a, b);
+    return __lasx_xvsadd_h(tmp1, tmp2);
+}
+
+static __m256i lasx_madd_h(__m256i a, __m256i b) {
+    __m256i tmp1, tmp2;
+    tmp1 = __lasx_xvmulwev_w_h(a, b);
+    tmp2 = __lasx_xvmulwod_w_h(a, b);
+    return __lasx_xvadd_w(tmp1, tmp2);
+}
+
+static __m256i lasx_packs_w(__m256i a, __m256i b) {
+    __m256i tmp, tmp1;
+    tmp = __lasx_xvsat_w(a, 15);
+    tmp1 = __lasx_xvsat_w(b, 15);
+    return __lasx_xvpickev_h(tmp1, tmp);
+}
+
+static __m256i lasx_packs_h(__m256i a, __m256i b) {
+    __m256i tmp, tmp1;
+    tmp = __lasx_xvsat_h(a, 7);
+    tmp1 = __lasx_xvsat_h(b, 7);
+    return __lasx_xvpickev_b(tmp1, tmp);
+}
+
+static __m128i lsx_packs_w(__m128i a, __m128i b) {
+    __m128i tmp, tmp1;
+    tmp = __lsx_vsat_w(a, 15);
+    tmp1 = __lsx_vsat_w(b, 15);
+    return __lsx_vpickev_h(tmp1, tmp);
+}
+
+static __m128i lsx_packs_h(__m128i a, __m128i b) {
+    __m128i tmp, tmp1;
+    tmp = __lsx_vsat_h(a, 7);
+    tmp1 = __lsx_vsat_h(b, 7);
+    return __lsx_vpickev_b(tmp1, tmp);
+}
+
+static __m128i lsx_packus_h(__m128i a, __m128i b) {
+    __m128i tmp, tmp1;
+    tmp = __lsx_vsat_hu(a, 7);
+    tmp1 = __lsx_vsat_hu(b, 7);
+    return __lsx_vpickev_b(tmp1, tmp);
+}
+
+
+static __m128i lsx_maddubs_h(__m128i a, __m128i b) {
+    __m128i tmp1, tmp2;
+    tmp1 = __lsx_vmulwev_h_b(a, b);
+    tmp2 = __lsx_vmulwod_h_b(a, b);
+    return __lsx_vsadd_h(tmp1, tmp2);
+}
+
+static __m128i lsx_madd_h(__m128i a, __m128i b) {
+    __m128i tmp1, tmp2;
+    tmp1 = __lsx_vmulwev_w_h(a, b);
+    tmp2 = __lsx_vmulwod_w_h(a, b);
+    return __lsx_vadd_w(tmp1, tmp2);
+}
+
+// multiply int8_t, add results pairwise twice
+static inline __m128i mul_sum_i8_pairs(const __m128i x, const __m128i y) {
+    // Get absolute values of x vectors
+    const __m128i ax = __lsx_vsigncov_b(x, x);
+    // Sign the values of the y vectors
+    const __m128i sy = __lsx_vsigncov_b(x, y);
+    // Perform multiplication and create 16-bit values
+    const __m128i dot = lsx_maddubs_h(ax, sy);
+    const __m128i ones = __lsx_vreplgr2vr_h(1);
+    return lsx_madd_h(ones, dot);
+}
+
+// horizontally add 8 floats
+static inline float hsum_float_8(const __m256 x) {
+    __m128 res = lasx_extractf128(x, 1);
+    ft_union tmp;
+    res = __lsx_vfadd_s(res, lasx_extractf128(x, 0));
+    res = __lsx_vfadd_s(res, (__m128)__lsx_vpickod_d((__m128i)res, (__m128i)res));
+    res = __lsx_vfadd_s(res, (__m128)__lsx_vinsgr2vr_w(__lsx_vldi(0), __lsx_vpickve2gr_w(res, 1), 0));
+    tmp.i = __lsx_vpickve2gr_w(res, 0);
+    return tmp.f;
+}
+
+// horizontally add 8 int32_t
+static inline int hsum_i32_8(const __m256i a) {
+
+    __m256i tmp1 = __lasx_xvpermi_q(a, a, 0x11);
+    __m256i tmp2 = __lasx_xvpermi_q(a, a, 0x00);
+
+    __m128i  tmp1_128 = lasx_extracti128_lo(tmp1);
+    __m128i  tmp2_128 = lasx_extracti128_lo(tmp2);
+
+    __m128i sum128 = __lsx_vadd_w(tmp1_128, tmp2_128);
+
+    __m128i ev = __lsx_vpickev_w(sum128, sum128);
+    __m128i od = __lsx_vpickod_w(sum128, sum128);
+    __m128i sum64 = __lsx_vadd_w(ev, od);
+
+    int sum64_1, sum64_2;
+    sum64_1 = __lsx_vpickve2gr_w(sum64, 0);
+    sum64_2 = __lsx_vpickve2gr_w(sum64, 1);
+
+    return  sum64_1 + sum64_2;
+}
+
+// horizontally add 4 int32_t
+static inline int hsum_i32_4(const __m128i a) {
+    __m128i ev = __lsx_vpickev_w(a, a);
+    __m128i od = __lsx_vpickod_w(a, a);
+    __m128i sum64 = __lsx_vadd_w(ev, od);
+
+    int sum64_1, sum64_2;
+    sum64_1 = __lsx_vpickve2gr_w(sum64, 0);
+    sum64_2 = __lsx_vpickve2gr_w(sum64, 1);
+
+    return  sum64_1 + sum64_2;
+}
+
+// spread 32 bits to 32 bytes { 0x00, 0xFF }
+static inline __m256i bytes_from_bits_32(const uint8_t * x) {
+
+    uint32_t x32;
+    memcpy(&x32, x, sizeof(uint32_t));
+    const __m256i shuf_mask = lasx_set_d(
+            0x0303030303030303, 0x0202020202020202,
+            0x0101010101010101, 0x0000000000000000);
+
+    __m256i bytes = lasx_shuffle_b(__lasx_xvreplgr2vr_w(x32), shuf_mask);
+    const __m256i bit_mask = __lasx_xvreplgr2vr_d(0x7fbfdfeff7fbfdfe);
+    bytes = __lasx_xvor_v(bytes, bit_mask);
+    return __lasx_xvseq_b(bytes, __lasx_xvreplgr2vr_d(-1));
+}
+
+// Unpack 32 4-bit fields into 32 bytes
+// The output vector contains 32 bytes, each one in [ 0 .. 15 ] interval
+static inline __m256i bytes_from_nibbles_32(const uint8_t * rsi) {
+    const __m128i lo = __lsx_vld((const __m128i *)rsi, 0);
+    __m128i hi = __lsx_vsrli_h(lo, 4);
+    return __lasx_xvandi_b(lasx_insertf128(hi, lo), 0xf);
+}
+
+// add int16_t pairwise and return as float vector
+static inline __m256 sum_i16_pairs_float(const __m256i x) {
+    __m256i v = __lasx_xvpackod_h(x, x);
+    __m256i summed_pairs = __lasx_xvaddwev_w_h(x, v);
+    return __lasx_xvffint_s_w(summed_pairs);
+}
+
+static inline __m256 mul_sum_us8_pairs_float(const __m256i ax, const __m256i sy) {
+    // Perform multiplication and create 16-bit values
+    const __m256i dot = lasx_maddubs_h(ax, sy);
+    return sum_i16_pairs_float(dot);
+}
+
+// multiply int8_t, add results pairwise twice and return as float vector
+static inline __m256 mul_sum_i8_pairs_float(const __m256i x, const __m256i y) {
+
+    // Get absolute values of x vectors
+    const __m256i ax = __lasx_xvsigncov_b(x, x);
+    // Sign the values of the y vectors
+    const __m256i sy = __lasx_xvsigncov_b(x, y);
+
+    return mul_sum_us8_pairs_float(ax, sy);
+}
+
+static inline __m128i packNibbles( __m256i bytes ) {
+    // Move bits within 16-bit lanes from 0000_abcd_0000_efgh into 0000_0000_abcd_efgh
+    const __m256i lowByte = __lasx_xvreplgr2vr_h(0xFF);
+     __m256i high = __lasx_xvandn_v(lowByte, bytes);
+    __m256i low = __lasx_xvand_v(lowByte, bytes);
+    high = __lasx_xvsrli_h(high, 4);
+    bytes = __lasx_xvor_v(low, high);
+    // Compress uint16_t lanes into bytes
+    __m128i *r0 = (__m128i *)&bytes;
+    __m256i tmp_h128 = __lasx_xvpermi_q(bytes, bytes, 0x11);
+    __m128i *r1 = (__m128i *)&tmp_h128;
+
+    __m128i zero = __lsx_vldi(0);
+    __m128i tmp, tmp2, tmp3;
+
+    tmp = __lsx_vmax_h(zero, *r0);
+    tmp2 = __lsx_vsat_hu(tmp, 7);
+
+    tmp = __lsx_vmax_h(zero, *r1);
+    tmp3 = __lsx_vsat_hu(tmp, 7);
+    return  __lsx_vpickev_b(tmp3, tmp2);
+}
+#endif  //__loongarch_asx
+
+// reference implementation for deterministic creation of model files
+void quantize_row_q4_0_reference(const float * restrict x, block_q4_0 * restrict y, int64_t k) {
+    static const int qk = QK4_0;
+
+    assert(k % qk == 0);
+
+    const int nb = k / qk;
+
+    for (int i = 0; i < nb; i++) {
+        float amax = 0.0f; // absolute max
+        float max  = 0.0f;
+
+        for (int j = 0; j < qk; j++) {
+            const float v = x[i*qk + j];
+            if (amax < fabsf(v)) {
+                amax = fabsf(v);
+                max  = v;
+            }
+        }
+
+        const float d  = max / -8;
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        for (int j = 0; j < qk/2; ++j) {
+            const float x0 = x[i*qk + 0    + j]*id;
+            const float x1 = x[i*qk + qk/2 + j]*id;
+
+            const uint8_t xi0 = MIN(15, (int8_t)(x0 + 8.5f));
+            const uint8_t xi1 = MIN(15, (int8_t)(x1 + 8.5f));
+
+            y[i].qs[j]  = xi0;
+            y[i].qs[j] |= xi1 << 4;
+        }
+    }
+}
+
+void quantize_row_q4_0(const float * restrict x, void * restrict y, int64_t k) {
+    quantize_row_q4_0_reference(x, y, k);
+}
+
+
+void quantize_row_q4_1_reference(const float * restrict x, block_q4_1 * restrict y, int64_t k) {
+    const int qk = QK4_1;
+
+    assert(k % qk == 0);
+
+    const int nb = k / qk;
+
+    for (int i = 0; i < nb; i++) {
+        float min = FLT_MAX;
+        float max = -FLT_MAX;
+
+        for (int j = 0; j < qk; j++) {
+            const float v = x[i*qk + j];
+
+            if (v < min) min = v;
+            if (v > max) max = v;
+        }
+
+        const float d  = (max - min) / ((1 << 4) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+        y[i].m = GGML_FP32_TO_FP16(min);
+
+        for (int j = 0; j < qk/2; ++j) {
+            const float x0 = (x[i*qk + 0    + j] - min)*id;
+            const float x1 = (x[i*qk + qk/2 + j] - min)*id;
+
+            const uint8_t xi0 = MIN(15, (int8_t)(x0 + 0.5f));
+            const uint8_t xi1 = MIN(15, (int8_t)(x1 + 0.5f));
+
+            y[i].qs[j]  = xi0;
+            y[i].qs[j] |= xi1 << 4;
+        }
+    }
+}
+
+void quantize_row_q4_1(const float * restrict x, void * restrict y, int64_t k) {
+    quantize_row_q4_1_reference(x, y, k);
+}
+
+void quantize_row_q5_0_reference(const float * restrict x, block_q5_0 * restrict y, int64_t k) {
+    static const int qk = QK5_0;
+
+    assert(k % qk == 0);
+
+    const int nb = k / qk;
+
+    for (int i = 0; i < nb; i++) {
+        float amax = 0.0f; // absolute max
+        float max  = 0.0f;
+
+        for (int j = 0; j < qk; j++) {
+            const float v = x[i*qk + j];
+            if (amax < fabsf(v)) {
+                amax = fabsf(v);
+                max  = v;
+            }
+        }
+
+        const float d  = max / -16;
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        uint32_t qh = 0;
+
+        for (int j = 0; j < qk/2; ++j) {
+            const float x0 = x[i*qk + 0    + j]*id;
+            const float x1 = x[i*qk + qk/2 + j]*id;
+
+            const uint8_t xi0 = MIN(31, (int8_t)(x0 + 16.5f));
+            const uint8_t xi1 = MIN(31, (int8_t)(x1 + 16.5f));
+
+            y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4);
+
+            // get the 5-th bit and store it in qh at the right position
+            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
+            qh |= ((xi1 & 0x10u) >> 4) << (j + qk/2);
+        }
+
+        memcpy(&y[i].qh, &qh, sizeof(qh));
+    }
+}
+
+void quantize_row_q5_0(const float * restrict x, void * restrict y, int64_t k) {
+    quantize_row_q5_0_reference(x, y, k);
+}
+
+void quantize_row_q5_1_reference(const float * restrict x, block_q5_1 * restrict y, int64_t k) {
+    const int qk = QK5_1;
+
+    assert(k % qk == 0);
+
+    const int nb = k / qk;
+
+    for (int i = 0; i < nb; i++) {
+        float min = FLT_MAX;
+        float max = -FLT_MAX;
+
+        for (int j = 0; j < qk; j++) {
+            const float v = x[i*qk + j];
+
+            if (v < min) min = v;
+            if (v > max) max = v;
+        }
+
+        const float d  = (max - min) / ((1 << 5) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+        y[i].m = GGML_FP32_TO_FP16(min);
+
+        uint32_t qh = 0;
+
+        for (int j = 0; j < qk/2; ++j) {
+            const float x0 = (x[i*qk + 0    + j] - min)*id;
+            const float x1 = (x[i*qk + qk/2 + j] - min)*id;
+
+            const uint8_t xi0 = (uint8_t)(x0 + 0.5f);
+            const uint8_t xi1 = (uint8_t)(x1 + 0.5f);
+
+            y[i].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4);
+
+            // get the 5-th bit and store it in qh at the right position
+            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
+            qh |= ((xi1 & 0x10u) >> 4) << (j + qk/2);
+        }
+
+        memcpy(&y[i].qh, &qh, sizeof(y[i].qh));
+    }
+}
+
+void quantize_row_q5_1(const float * restrict x, void * restrict y, int64_t k) {
+    quantize_row_q5_1_reference(x, y, k);
+}
+
+// reference implementation for deterministic creation of model files
+void quantize_row_q8_0_reference(const float * restrict x, block_q8_0 * restrict y, int64_t k) {
+    assert(k % QK8_0 == 0);
+    const int nb = k / QK8_0;
+
+    for (int i = 0; i < nb; i++) {
+        float amax = 0.0f; // absolute max
+
+        for (int j = 0; j < QK8_0; j++) {
+            const float v = x[i*QK8_0 + j];
+            amax = MAX(amax, fabsf(v));
+        }
+
+        const float d = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        for (int j = 0; j < QK8_0; ++j) {
+            const float x0 = x[i*QK8_0 + j]*id;
+
+            y[i].qs[j] = roundf(x0);
+        }
+    }
+}
+
+void quantize_row_q8_0(const float * restrict x, void * restrict vy, int64_t k) {
+    assert(QK8_0 == 32);
+    assert(k % QK8_0 == 0);
+    const int nb = k / QK8_0;
+
+    block_q8_0 * restrict y = vy;
+
+#if defined(__ARM_NEON)
+    for (int i = 0; i < nb; i++) {
+        float32x4_t srcv [8];
+        float32x4_t asrcv[8];
+        float32x4_t amaxv[8];
+
+        for (int j = 0; j < 8; j++) srcv[j]  = vld1q_f32(x + i*32 + 4*j);
+        for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]);
+
+        for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]);
+        for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]);
+        for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]);
+
+        const float amax = vmaxvq_f32(amaxv[0]);
+
+        const float d = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        for (int j = 0; j < 8; j++) {
+            const float32x4_t v  = vmulq_n_f32(srcv[j], id);
+            const int32x4_t   vi = vcvtnq_s32_f32(v);
+
+            y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0);
+            y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1);
+            y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2);
+            y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3);
+        }
+    }
+#elif defined(__wasm_simd128__)
+    for (int i = 0; i < nb; i++) {
+        v128_t srcv [8];
+        v128_t asrcv[8];
+        v128_t amaxv[8];
+
+        for (int j = 0; j < 8; j++) srcv[j]  = wasm_v128_load(x + i*32 + 4*j);
+        for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]);
+
+        for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]);
+        for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]);
+        for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]);
+
+        const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0),
+                                   wasm_f32x4_extract_lane(amaxv[0], 1)),
+                               MAX(wasm_f32x4_extract_lane(amaxv[0], 2),
+                                   wasm_f32x4_extract_lane(amaxv[0], 3)));
+
+        const float d = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        for (int j = 0; j < 8; j++) {
+            const v128_t v  = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id));
+            const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v);
+
+            y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0);
+            y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1);
+            y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2);
+            y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3);
+        }
+    }
+#elif defined(__AVX2__) || defined(__AVX__)
+    for (int i = 0; i < nb; i++) {
+        // Load elements into 4 AVX vectors
+        __m256 v0 = _mm256_loadu_ps( x );
+        __m256 v1 = _mm256_loadu_ps( x + 8 );
+        __m256 v2 = _mm256_loadu_ps( x + 16 );
+        __m256 v3 = _mm256_loadu_ps( x + 24 );
+        x += 32;
+
+        // Compute max(abs(e)) for the block
+        const __m256 signBit = _mm256_set1_ps( -0.0f );
+        __m256 maxAbs = _mm256_andnot_ps( signBit, v0 );
+        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) );
+        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) );
+        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) );
+
+        __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) );
+        max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) );
+        max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) );
+        const float maxScalar = _mm_cvtss_f32( max4 );
+
+        // Quantize these floats
+        const float d = maxScalar / 127.f;
+        y[i].d = GGML_FP32_TO_FP16(d);
+        const float id = ( maxScalar != 0.0f ) ? 127.f / maxScalar : 0.0f;
+        const __m256 mul = _mm256_set1_ps( id );
+
+        // Apply the multiplier
+        v0 = _mm256_mul_ps( v0, mul );
+        v1 = _mm256_mul_ps( v1, mul );
+        v2 = _mm256_mul_ps( v2, mul );
+        v3 = _mm256_mul_ps( v3, mul );
+
+        // Round to nearest integer
+        v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST );
+        v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST );
+        v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST );
+        v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST );
+
+        // Convert floats to integers
+        __m256i i0 = _mm256_cvtps_epi32( v0 );
+        __m256i i1 = _mm256_cvtps_epi32( v1 );
+        __m256i i2 = _mm256_cvtps_epi32( v2 );
+        __m256i i3 = _mm256_cvtps_epi32( v3 );
+
+#if defined(__AVX2__)
+        // Convert int32 to int16
+        i0 = _mm256_packs_epi32( i0, i1 );     // 0, 1, 2, 3,  8, 9, 10, 11,  4, 5, 6, 7, 12, 13, 14, 15
+        i2 = _mm256_packs_epi32( i2, i3 );     // 16, 17, 18, 19,  24, 25, 26, 27,  20, 21, 22, 23, 28, 29, 30, 31
+                                            // Convert int16 to int8
+        i0 = _mm256_packs_epi16( i0, i2 );     // 0, 1, 2, 3,  8, 9, 10, 11,  16, 17, 18, 19,  24, 25, 26, 27,  4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31
+
+        // We got our precious signed bytes, but the order is now wrong
+        // These AVX2 pack instructions process 16-byte pieces independently
+        // The following instruction is fixing the order
+        const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 );
+        i0 = _mm256_permutevar8x32_epi32( i0, perm );
+
+        _mm256_storeu_si256((__m256i *)y[i].qs, i0);
+#else
+        // Since we don't have in AVX some necessary functions,
+        // we split the registers in half and call AVX2 analogs from SSE
+        __m128i ni0 = _mm256_castsi256_si128( i0 );
+        __m128i ni1 = _mm256_extractf128_si256( i0, 1);
+        __m128i ni2 = _mm256_castsi256_si128( i1 );
+        __m128i ni3 = _mm256_extractf128_si256( i1, 1);
+        __m128i ni4 = _mm256_castsi256_si128( i2 );
+        __m128i ni5 = _mm256_extractf128_si256( i2, 1);
+        __m128i ni6 = _mm256_castsi256_si128( i3 );
+        __m128i ni7 = _mm256_extractf128_si256( i3, 1);
+
+        // Convert int32 to int16
+        ni0 = _mm_packs_epi32( ni0, ni1 );
+        ni2 = _mm_packs_epi32( ni2, ni3 );
+        ni4 = _mm_packs_epi32( ni4, ni5 );
+        ni6 = _mm_packs_epi32( ni6, ni7 );
+        // Convert int16 to int8
+        ni0 = _mm_packs_epi16( ni0, ni2 );
+        ni4 = _mm_packs_epi16( ni4, ni6 );
+
+        _mm_storeu_si128((__m128i *)(y[i].qs +  0), ni0);
+        _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4);
+#endif
+    }
+#elif defined(__riscv_v_intrinsic)
+
+    size_t vl = __riscv_vsetvl_e32m4(QK8_0);
+
+    for (int i = 0; i < nb; i++) {
+        // load elements
+        vfloat32m4_t v_x   = __riscv_vle32_v_f32m4(x+i*QK8_0, vl);
+
+        vfloat32m4_t vfabs = __riscv_vfabs_v_f32m4(v_x, vl);
+        vfloat32m1_t tmp   = __riscv_vfmv_v_f_f32m1(0.0f, vl);
+        vfloat32m1_t vmax  = __riscv_vfredmax_vs_f32m4_f32m1(vfabs, tmp, vl);
+        float amax = __riscv_vfmv_f_s_f32m1_f32(vmax);
+
+        const float d = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl);
+
+        // convert to integer
+        vint16m2_t   vi = __riscv_vfncvt_x_f_w_i16m2(x0, vl);
+        vint8m1_t    vs = __riscv_vncvt_x_x_w_i8m1(vi, vl);
+
+        // store result
+        __riscv_vse8_v_i8m1(y[i].qs , vs, vl);
+    }
+
+#elif defined(__POWER9_VECTOR__)
+    for (int i = 0; i < nb; i++) {
+        vector float srcv [8];
+        vector float asrcv[8];
+        vector float amaxv[8];
+        vector signed int vi[8];
+
+        for (int j = 0; j < 8; j++) srcv[j]  = vec_xl(0, x + i*32 + 4*j);
+        for (int j = 0; j < 8; j++) asrcv[j] = vec_abs(srcv[j]);
+
+        for (int j = 0; j < 4; j++) amaxv[2*j] = vec_max(asrcv[2*j], asrcv[2*j+1]);
+        for (int j = 0; j < 2; j++) amaxv[4*j] = vec_max(amaxv[4*j], amaxv[4*j+2]);
+        for (int j = 0; j < 1; j++) amaxv[8*j] = vec_max(amaxv[8*j], amaxv[8*j+4]);
+
+        const float amax = MAX(MAX(vec_extract(amaxv[0], 0),
+                                   vec_extract(amaxv[0], 1)),
+                               MAX(vec_extract(amaxv[0], 2),
+                                   vec_extract(amaxv[0], 3)));
+
+        const float d = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+        const vector float vid = vec_splats(id);
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        for (int j = 0; j < 8; j++) {
+            const vector float v  = vec_round(vec_mul(srcv[j], vid));
+            vi[j] = vec_cts(v, 0);
+        }
+        vec_xst(vec_pack(vec_pack(vi[0], vi[1]), vec_pack(vi[2], vi[3])),  0, &y[i].qs[0]);
+        vec_xst(vec_pack(vec_pack(vi[4], vi[5]), vec_pack(vi[6], vi[7])), 16, &y[i].qs[0]);
+    }
+
+#elif defined(__loongarch_asx)
+    for (int i = 0; i < nb; i++) {
+        ft_union fi;
+        __m256 v0 = (__m256)__lasx_xvld( x , 0);
+        __m256 v1 = (__m256)__lasx_xvld( x , 32);
+        __m256 v2 = (__m256)__lasx_xvld( x , 64);
+        __m256 v3 = (__m256)__lasx_xvld( x , 96);
+        x += 32;
+
+        // Compute max(abs(e)) for the block
+        const __m256 sign_bit = __lasx_xvreplfr2vr_s( -0.0f );
+        __m256 max_abs = (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v0 );
+        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v1 ) );
+        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v2 ) );
+        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v3 ) );
+
+        __m128 max4 = __lsx_vfmax_s( lasx_extractf128( max_abs, 1 ), lasx_extractf128( max_abs , 0) );
+        max4 = __lsx_vfmax_s( max4, (__m128)__lsx_vpickod_d((__m128i) max4, (__m128i)max4 ) );
+        __m128 tmp = max4;
+        max4 = __lsx_vfmax_s( max4, (__m128)__lsx_vinsgr2vr_w(tmp, __lsx_vpickve2gr_w( max4, 1 ), 0 ));
+        fi.i = __lsx_vpickve2gr_w( (__m128i)max4, 0 );
+        const float max_scalar = fi.f;
+
+        // Quantize these floats
+        const float d = max_scalar / 127.f;
+        y[i].d = GGML_FP32_TO_FP16(d);
+        const float id = ( max_scalar != 0.0f ) ? 127.f / max_scalar : 0.0f;
+        const __m256 mul = (__m256)__lasx_xvreplfr2vr_s( id );
+
+        // Apply the multiplier
+        v0 = __lasx_xvfmul_s( v0, mul );
+        v1 = __lasx_xvfmul_s( v1, mul );
+        v2 = __lasx_xvfmul_s( v2, mul );
+        v3 = __lasx_xvfmul_s( v3, mul );
+
+        // Round to nearest integer
+        __m256i i0 = __lasx_xvftintrne_w_s( v0 );
+        __m256i i1 = __lasx_xvftintrne_w_s( v1 );
+        __m256i i2 = __lasx_xvftintrne_w_s( v2 );
+        __m256i i3 = __lasx_xvftintrne_w_s( v3 );
+
+        __m128i ni0 = lasx_extracti128( i0, 0 );
+        __m128i ni1 = lasx_extracti128( i0, 1);
+        __m128i ni2 = lasx_extracti128( i1, 0);
+        __m128i ni3 = lasx_extracti128( i1, 1);
+        __m128i ni4 = lasx_extracti128( i2, 0);
+        __m128i ni5 = lasx_extracti128( i2, 1);
+        __m128i ni6 = lasx_extracti128( i3, 0);
+        __m128i ni7 = lasx_extracti128( i3, 1);
+
+        // Convert int32 to int16
+        ni0 = lsx_packs_w( ni0, ni1 );
+        ni2 = lsx_packs_w( ni2, ni3 );
+        ni4 = lsx_packs_w( ni4, ni5 );
+        ni6 = lsx_packs_w( ni6, ni7 );
+        // Convert int16 to int8
+        ni0 = lsx_packs_h( ni0, ni2 );
+        ni4 = lsx_packs_h( ni4, ni6 );
+
+        __lsx_vst(ni0, (__m128i *)(y[i].qs +  0), 0);
+        __lsx_vst(ni4, (__m128i *)(y[i].qs + 16), 0);
+
+    }
+#else
+    GGML_UNUSED(nb);
+    // scalar
+    quantize_row_q8_0_reference(x, y, k);
+#endif
+}
+
+// reference implementation for deterministic creation of model files
+void quantize_row_q8_1_reference(const float * restrict x, block_q8_1 * restrict y, int64_t k) {
+    assert(QK8_1 == 32);
+    assert(k % QK8_1 == 0);
+    const int nb = k / QK8_1;
+
+    for (int i = 0; i < nb; i++) {
+        float amax = 0.0f; // absolute max
+
+        for (int j = 0; j < QK8_1; j++) {
+            const float v = x[i*QK8_1 + j];
+            amax = MAX(amax, fabsf(v));
+        }
+
+        const float d = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        int sum = 0;
+
+        for (int j = 0; j < QK8_1/2; ++j) {
+            const float v0 = x[i*QK8_1           + j]*id;
+            const float v1 = x[i*QK8_1 + QK8_1/2 + j]*id;
+
+            y[i].qs[          j] = roundf(v0);
+            y[i].qs[QK8_1/2 + j] = roundf(v1);
+
+            sum += y[i].qs[          j];
+            sum += y[i].qs[QK8_1/2 + j];
+        }
+
+        y[i].s = GGML_FP32_TO_FP16(sum*d);
+    }
+}
+
+void quantize_row_q8_1(const float * restrict x, void * restrict vy, int64_t k) {
+    assert(k % QK8_1 == 0);
+    const int nb = k / QK8_1;
+
+    block_q8_1 * restrict y = vy;
+
+#if defined(__ARM_NEON)
+    for (int i = 0; i < nb; i++) {
+        float32x4_t srcv [8];
+        float32x4_t asrcv[8];
+        float32x4_t amaxv[8];
+
+        for (int j = 0; j < 8; j++) srcv[j]  = vld1q_f32(x + i*32 + 4*j);
+        for (int j = 0; j < 8; j++) asrcv[j] = vabsq_f32(srcv[j]);
+
+        for (int j = 0; j < 4; j++) amaxv[2*j] = vmaxq_f32(asrcv[2*j], asrcv[2*j+1]);
+        for (int j = 0; j < 2; j++) amaxv[4*j] = vmaxq_f32(amaxv[4*j], amaxv[4*j+2]);
+        for (int j = 0; j < 1; j++) amaxv[8*j] = vmaxq_f32(amaxv[8*j], amaxv[8*j+4]);
+
+        const float amax = vmaxvq_f32(amaxv[0]);
+
+        const float d = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        int32x4_t accv = vdupq_n_s32(0);
+
+        for (int j = 0; j < 8; j++) {
+            const float32x4_t v  = vmulq_n_f32(srcv[j], id);
+            const int32x4_t   vi = vcvtnq_s32_f32(v);
+
+            y[i].qs[4*j + 0] = vgetq_lane_s32(vi, 0);
+            y[i].qs[4*j + 1] = vgetq_lane_s32(vi, 1);
+            y[i].qs[4*j + 2] = vgetq_lane_s32(vi, 2);
+            y[i].qs[4*j + 3] = vgetq_lane_s32(vi, 3);
+
+            accv = vaddq_s32(accv, vi);
+        }
+
+        y[i].s = GGML_FP32_TO_FP16(d * vaddvq_s32(accv));
+    }
+#elif defined(__wasm_simd128__)
+    for (int i = 0; i < nb; i++) {
+        v128_t srcv [8];
+        v128_t asrcv[8];
+        v128_t amaxv[8];
+
+        for (int j = 0; j < 8; j++) srcv[j]  = wasm_v128_load(x + i*32 + 4*j);
+        for (int j = 0; j < 8; j++) asrcv[j] = wasm_f32x4_abs(srcv[j]);
+
+        for (int j = 0; j < 4; j++) amaxv[2*j] = wasm_f32x4_max(asrcv[2*j], asrcv[2*j+1]);
+        for (int j = 0; j < 2; j++) amaxv[4*j] = wasm_f32x4_max(amaxv[4*j], amaxv[4*j+2]);
+        for (int j = 0; j < 1; j++) amaxv[8*j] = wasm_f32x4_max(amaxv[8*j], amaxv[8*j+4]);
+
+        const float amax = MAX(MAX(wasm_f32x4_extract_lane(amaxv[0], 0),
+                                   wasm_f32x4_extract_lane(amaxv[0], 1)),
+                               MAX(wasm_f32x4_extract_lane(amaxv[0], 2),
+                                   wasm_f32x4_extract_lane(amaxv[0], 3)));
+
+        const float d = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        v128_t accv = wasm_i32x4_splat(0);
+
+        for (int j = 0; j < 8; j++) {
+            const v128_t v  = wasm_f32x4_mul(srcv[j], wasm_f32x4_splat(id));
+            const v128_t vi = wasm_i32x4_trunc_sat_f32x4(v);
+
+            y[i].qs[4*j + 0] = wasm_i32x4_extract_lane(vi, 0);
+            y[i].qs[4*j + 1] = wasm_i32x4_extract_lane(vi, 1);
+            y[i].qs[4*j + 2] = wasm_i32x4_extract_lane(vi, 2);
+            y[i].qs[4*j + 3] = wasm_i32x4_extract_lane(vi, 3);
+
+            accv = wasm_i32x4_add(accv, vi);
+        }
+
+        y[i].s = GGML_FP32_TO_FP16(
+                d * (wasm_i32x4_extract_lane(accv, 0) +
+                     wasm_i32x4_extract_lane(accv, 1) +
+                     wasm_i32x4_extract_lane(accv, 2) +
+                     wasm_i32x4_extract_lane(accv, 3)));
+    }
+#elif defined(__AVX2__) || defined(__AVX__)
+    for (int i = 0; i < nb; i++) {
+        // Load elements into 4 AVX vectors
+        __m256 v0 = _mm256_loadu_ps( x );
+        __m256 v1 = _mm256_loadu_ps( x + 8 );
+        __m256 v2 = _mm256_loadu_ps( x + 16 );
+        __m256 v3 = _mm256_loadu_ps( x + 24 );
+        x += 32;
+
+        // Compute max(abs(e)) for the block
+        const __m256 signBit = _mm256_set1_ps( -0.0f );
+        __m256 maxAbs = _mm256_andnot_ps( signBit, v0 );
+        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v1 ) );
+        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v2 ) );
+        maxAbs = _mm256_max_ps( maxAbs, _mm256_andnot_ps( signBit, v3 ) );
+
+        __m128 max4 = _mm_max_ps( _mm256_extractf128_ps( maxAbs, 1 ), _mm256_castps256_ps128( maxAbs ) );
+        max4 = _mm_max_ps( max4, _mm_movehl_ps( max4, max4 ) );
+        max4 = _mm_max_ss( max4, _mm_movehdup_ps( max4 ) );
+        const float max_scalar = _mm_cvtss_f32( max4 );
+
+        // Quantize these floats
+        const float d = max_scalar / 127.f;
+        y[i].d = GGML_FP32_TO_FP16(d);
+        const float id = ( max_scalar != 0.0f ) ? 127.f / max_scalar : 0.0f;
+        const __m256 mul = _mm256_set1_ps( id );
+
+        // Apply the multiplier
+        v0 = _mm256_mul_ps( v0, mul );
+        v1 = _mm256_mul_ps( v1, mul );
+        v2 = _mm256_mul_ps( v2, mul );
+        v3 = _mm256_mul_ps( v3, mul );
+
+        // Round to nearest integer
+        v0 = _mm256_round_ps( v0, _MM_ROUND_NEAREST );
+        v1 = _mm256_round_ps( v1, _MM_ROUND_NEAREST );
+        v2 = _mm256_round_ps( v2, _MM_ROUND_NEAREST );
+        v3 = _mm256_round_ps( v3, _MM_ROUND_NEAREST );
+
+        // Convert floats to integers
+        __m256i i0 = _mm256_cvtps_epi32( v0 );
+        __m256i i1 = _mm256_cvtps_epi32( v1 );
+        __m256i i2 = _mm256_cvtps_epi32( v2 );
+        __m256i i3 = _mm256_cvtps_epi32( v3 );
+
+#if defined(__AVX2__)
+        // Compute the sum of the quants and set y[i].s
+        y[i].s = GGML_FP32_TO_FP16(d * hsum_i32_8(_mm256_add_epi32(_mm256_add_epi32(i0, i1), _mm256_add_epi32(i2, i3))));
+
+        // Convert int32 to int16
+        i0 = _mm256_packs_epi32( i0, i1 );     // 0, 1, 2, 3,  8, 9, 10, 11,  4, 5, 6, 7, 12, 13, 14, 15
+        i2 = _mm256_packs_epi32( i2, i3 );     // 16, 17, 18, 19,  24, 25, 26, 27,  20, 21, 22, 23, 28, 29, 30, 31
+                                            // Convert int16 to int8
+        i0 = _mm256_packs_epi16( i0, i2 );     // 0, 1, 2, 3,  8, 9, 10, 11,  16, 17, 18, 19,  24, 25, 26, 27,  4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31
+
+        // We got our precious signed bytes, but the order is now wrong
+        // These AVX2 pack instructions process 16-byte pieces independently
+        // The following instruction is fixing the order
+        const __m256i perm = _mm256_setr_epi32( 0, 4, 1, 5, 2, 6, 3, 7 );
+        i0 = _mm256_permutevar8x32_epi32( i0, perm );
+
+        _mm256_storeu_si256((__m256i *)y[i].qs, i0);
+#else
+        // Since we don't have in AVX some necessary functions,
+        // we split the registers in half and call AVX2 analogs from SSE
+        __m128i ni0 = _mm256_castsi256_si128( i0 );
+        __m128i ni1 = _mm256_extractf128_si256( i0, 1);
+        __m128i ni2 = _mm256_castsi256_si128( i1 );
+        __m128i ni3 = _mm256_extractf128_si256( i1, 1);
+        __m128i ni4 = _mm256_castsi256_si128( i2 );
+        __m128i ni5 = _mm256_extractf128_si256( i2, 1);
+        __m128i ni6 = _mm256_castsi256_si128( i3 );
+        __m128i ni7 = _mm256_extractf128_si256( i3, 1);
+
+        // Compute the sum of the quants and set y[i].s
+        const __m128i s0 = _mm_add_epi32(_mm_add_epi32(ni0, ni1), _mm_add_epi32(ni2, ni3));
+        const __m128i s1 = _mm_add_epi32(_mm_add_epi32(ni4, ni5), _mm_add_epi32(ni6, ni7));
+        y[i].s = GGML_FP32_TO_FP16(d * hsum_i32_4(_mm_add_epi32(s0, s1)));
+
+        // Convert int32 to int16
+        ni0 = _mm_packs_epi32( ni0, ni1 );
+        ni2 = _mm_packs_epi32( ni2, ni3 );
+        ni4 = _mm_packs_epi32( ni4, ni5 );
+        ni6 = _mm_packs_epi32( ni6, ni7 );
+        // Convert int16 to int8
+        ni0 = _mm_packs_epi16( ni0, ni2 );
+        ni4 = _mm_packs_epi16( ni4, ni6 );
+
+        _mm_storeu_si128((__m128i *)(y[i].qs +  0), ni0);
+        _mm_storeu_si128((__m128i *)(y[i].qs + 16), ni4);
+#endif
+    }
+#elif defined(__riscv_v_intrinsic)
+
+    size_t vl = __riscv_vsetvl_e32m4(QK8_1);
+
+    for (int i = 0; i < nb; i++) {
+        // load elements
+        vfloat32m4_t v_x   = __riscv_vle32_v_f32m4(x+i*QK8_1, vl);
+
+        vfloat32m4_t vfabs = __riscv_vfabs_v_f32m4(v_x, vl);
+        vfloat32m1_t tmp   = __riscv_vfmv_v_f_f32m1(0.0, vl);
+        vfloat32m1_t vmax  = __riscv_vfredmax_vs_f32m4_f32m1(vfabs, tmp, vl);
+        float amax = __riscv_vfmv_f_s_f32m1_f32(vmax);
+
+        const float d  = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        vfloat32m4_t x0 = __riscv_vfmul_vf_f32m4(v_x, id, vl);
+
+        // convert to integer
+        vint16m2_t   vi = __riscv_vfncvt_x_f_w_i16m2(x0, vl);
+        vint8m1_t    vs = __riscv_vncvt_x_x_w_i8m1(vi, vl);
+
+        // store result
+        __riscv_vse8_v_i8m1(y[i].qs , vs, vl);
+
+        // compute sum for y[i].s
+        vint16m1_t tmp2 = __riscv_vmv_v_x_i16m1(0, vl);
+        vint16m1_t vwrs = __riscv_vwredsum_vs_i8m1_i16m1(vs, tmp2, vl);
+
+        // set y[i].s
+        int sum = __riscv_vmv_x_s_i16m1_i16(vwrs);
+        y[i].s = GGML_FP32_TO_FP16(sum*d);
+    }
+
+#elif defined(__POWER9_VECTOR__)
+    for (int i = 0; i < nb; i++) {
+        vector float srcv [8];
+        vector float asrcv[8];
+        vector float amaxv[8];
+        vector signed int vi[8];
+
+        for (int j = 0; j < 8; j++) srcv[j]  = vec_xl(0, x + i*32 + 4*j);
+        for (int j = 0; j < 8; j++) asrcv[j] = vec_abs(srcv[j]);
+
+        for (int j = 0; j < 4; j++) amaxv[2*j] = vec_max(asrcv[2*j], asrcv[2*j+1]);
+        for (int j = 0; j < 2; j++) amaxv[4*j] = vec_max(amaxv[4*j], amaxv[4*j+2]);
+        for (int j = 0; j < 1; j++) amaxv[8*j] = vec_max(amaxv[8*j], amaxv[8*j+4]);
+
+        const float amax = MAX(MAX(vec_extract(amaxv[0], 0),
+                                   vec_extract(amaxv[0], 1)),
+                               MAX(vec_extract(amaxv[0], 2),
+                                   vec_extract(amaxv[0], 3)));
+
+        const float d = amax / ((1 << 7) - 1);
+        const float id = d ? 1.0f/d : 0.0f;
+        const vector float vid = vec_splats(id);
+
+        y[i].d = GGML_FP32_TO_FP16(d);
+
+        vector int accv = vec_splats(0);
+
+        for (int j = 0; j < 8; j++) {
+            const vector float v  = vec_round(vec_mul(srcv[j], vid));
+            vi[j] = vec_cts(v, 0);
+
+            accv = vec_add(accv, vi[j]);
+        }
+        vec_xst(vec_pack(vec_pack(vi[0], vi[1]), vec_pack(vi[2], vi[3])),  0, &y[i].qs[0]);
+        vec_xst(vec_pack(vec_pack(vi[4], vi[5]), vec_pack(vi[6], vi[7])), 16, &y[i].qs[0]);
+
+        accv = vec_add(accv, vec_sld(accv, accv, 4));
+        accv = vec_add(accv, vec_sld(accv, accv, 8));
+        y[i].s = GGML_FP32_TO_FP16(d * vec_extract(accv, 0));
+    }
+
+#elif defined(__loongarch_asx)
+    for (int i = 0; i < nb; i++) {
+        ft_union ft;
+        __m256 v0 = (__m256)__lasx_xvld( x , 0 );
+        __m256 v1 = (__m256)__lasx_xvld( x , 32 );
+        __m256 v2 = (__m256)__lasx_xvld( x , 64 );
+        __m256 v3 = (__m256)__lasx_xvld( x , 96 );
+        x += 32;
+
+        // Compute max(abs(e)) for the block
+        const __m256 sign_bit = __lasx_xvreplfr2vr_s( -0.0f );
+        __m256 max_abs = (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v0 );
+        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v1 ) );
+        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v2 ) );
+        max_abs = __lasx_xvfmax_s( max_abs, (__m256)__lasx_xvandn_v( (__m256i)sign_bit, (__m256i)v3 ) );
+
+        __m128 max4 = __lsx_vfmax_s( lasx_extractf128( max_abs, 1 ), lasx_extractf128( max_abs, 0) );
+        max4 = __lsx_vfmax_s( max4, (__m128)__lsx_vpickod_d((__m128i) max4, (__m128i)max4 ) );
+        __m128 tmp = max4;
+        max4 = __lsx_vfmax_s( max4, (__m128)__lsx_vextrins_w((__m128i)tmp, (__m128i)max4, 0x10 ));
+        ft.i = __lsx_vpickve2gr_w( (__m128i)max4, 0 );
+        const float max_scalar = ft.f;
+
+        // Quantize these floats
+        const float d = max_scalar / 127.f;
+        y[i].d = GGML_FP32_TO_FP16(d);
+        const float id = ( max_scalar != 0.0f ) ? 127.f / max_scalar : 0.0f;
+        const __m256 mul = __lasx_xvreplfr2vr_s( id );
+
+        // Apply the multiplier
+        v0 = __lasx_xvfmul_s( v0, mul );
+        v1 = __lasx_xvfmul_s( v1, mul );
+        v2 = __lasx_xvfmul_s( v2, mul );
+        v3 = __lasx_xvfmul_s( v3, mul );
+
+        // Round to nearest integer
+        __m256i i0 = __lasx_xvftintrne_w_s( v0 );
+        __m256i i1 = __lasx_xvftintrne_w_s( v1 );
+        __m256i i2 = __lasx_xvftintrne_w_s( v2 );
+        __m256i i3 = __lasx_xvftintrne_w_s( v3 );
+
+        __m128i ni0 = lasx_extracti128(i0, 0);
+        __m128i ni1 = lasx_extracti128( i0, 1);
+        __m128i ni2 = lasx_extracti128( i1, 0);
+        __m128i ni3 = lasx_extracti128( i1, 1);
+        __m128i ni4 = lasx_extracti128( i2, 0 );
+        __m128i ni5 = lasx_extracti128( i2, 1);
+        __m128i ni6 = lasx_extracti128( i3, 0);
+        __m128i ni7 = lasx_extracti128( i3, 1);
+
+        // Compute the sum of the quants and set y[i].s
+        const __m128i s0 = __lsx_vadd_w(__lsx_vadd_w(ni0, ni1), __lsx_vadd_w(ni2, ni3));
+        const __m128i s1 = __lsx_vadd_w(__lsx_vadd_w(ni4, ni5), __lsx_vadd_w(ni6, ni7));
+        y[i].s = GGML_FP32_TO_FP16(d * hsum_i32_4(__lsx_vadd_w(s0, s1)));
+
+        // Convert int32 to int16
+        ni0 = lsx_packs_w( ni0, ni1 );
+        ni2 = lsx_packs_w( ni2, ni3 );
+        ni4 = lsx_packs_w( ni4, ni5 );
+        ni6 = lsx_packs_w( ni6, ni7 );
+        // Convert int16 to int8
+        ni0 = lsx_packs_h( ni0, ni2 );
+        ni4 = lsx_packs_h( ni4, ni6 );
+
+        __lsx_vst(ni0, (__m128i *)(y[i].qs +  0), 0);
+        __lsx_vst(ni4, (__m128i *)(y[i].qs + 16), 0);
+    }
+#else
+    GGML_UNUSED(nb);
+    // scalar
+    quantize_row_q8_1_reference(x, y, k);
+#endif
+}
+
+void dequantize_row_q4_0(const block_q4_0 * restrict x, float * restrict y, int64_t k) {
+    static const int qk = QK4_0;
+
+    assert(k % qk == 0);
+
+    const int nb = k / qk;
+
+    for (int i = 0; i < nb; i++) {
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+
+        for (int j = 0; j < qk/2; ++j) {
+            const int x0 = (x[i].qs[j] & 0x0F) - 8;
+            const int x1 = (x[i].qs[j] >>   4) - 8;
+
+            y[i*qk + j + 0   ] = x0*d;
+            y[i*qk + j + qk/2] = x1*d;
+        }
+    }
+}
+
+void dequantize_row_q4_1(const block_q4_1 * restrict x, float * restrict y, int64_t k) {
+    static const int qk = QK4_1;
+
+    assert(k % qk == 0);
+
+    const int nb = k / qk;
+
+    for (int i = 0; i < nb; i++) {
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+        const float m = GGML_FP16_TO_FP32(x[i].m);
+
+        for (int j = 0; j < qk/2; ++j) {
+            const int x0 = (x[i].qs[j] & 0x0F);
+            const int x1 = (x[i].qs[j] >>   4);
+
+            y[i*qk + j + 0   ] = x0*d + m;
+            y[i*qk + j + qk/2] = x1*d + m;
+        }
+    }
+}
+
+void dequantize_row_q5_0(const block_q5_0 * restrict x, float * restrict y, int64_t k) {
+    static const int qk = QK5_0;
+
+    assert(k % qk == 0);
+
+    const int nb = k / qk;
+
+    for (int i = 0; i < nb; i++) {
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+
+        uint32_t qh;
+        memcpy(&qh, x[i].qh, sizeof(qh));
+
+        for (int j = 0; j < qk/2; ++j) {
+            const uint8_t xh_0 = ((qh >> (j +  0)) << 4) & 0x10;
+            const uint8_t xh_1 = ((qh >> (j + 12))     ) & 0x10;
+
+            const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16;
+            const int32_t x1 = ((x[i].qs[j] >>   4) | xh_1) - 16;
+
+            y[i*qk + j + 0   ] = x0*d;
+            y[i*qk + j + qk/2] = x1*d;
+        }
+    }
+}
+
+void dequantize_row_q5_1(const block_q5_1 * restrict x, float * restrict y, int64_t k) {
+    static const int qk = QK5_1;
+
+    assert(k % qk == 0);
+
+    const int nb = k / qk;
+
+    for (int i = 0; i < nb; i++) {
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+        const float m = GGML_FP16_TO_FP32(x[i].m);
+
+        uint32_t qh;
+        memcpy(&qh, x[i].qh, sizeof(qh));
+
+        for (int j = 0; j < qk/2; ++j) {
+            const uint8_t xh_0 = ((qh >> (j +  0)) << 4) & 0x10;
+            const uint8_t xh_1 = ((qh >> (j + 12))     ) & 0x10;
+
+            const int x0 = (x[i].qs[j] & 0x0F) | xh_0;
+            const int x1 = (x[i].qs[j] >>   4) | xh_1;
+
+            y[i*qk + j + 0   ] = x0*d + m;
+            y[i*qk + j + qk/2] = x1*d + m;
+        }
+    }
+}
+
+void dequantize_row_q8_0(const block_q8_0 * restrict x, float * restrict y, int64_t k) {
+    static const int qk = QK8_0;
+
+    assert(k % qk == 0);
+
+    const int nb = k / qk;
+
+    for (int i = 0; i < nb; i++) {
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+
+        for (int j = 0; j < qk; ++j) {
+            y[i*qk + j] = x[i].qs[j]*d;
+        }
+    }
+}
+
+//
+// 2-6 bit quantization in super-blocks
+//
+
+//
+// ===================== Helper functions
+//
+static inline int nearest_int(float fval) {
+    assert(fval <= 4194303.f);
+    float val = fval + 12582912.f;
+    int i; memcpy(&i, &val, sizeof(int));
+    return (i & 0x007fffff) - 0x00400000;
+}
+
+static float make_qx_quants(int n, int nmax, const float * restrict x, int8_t * restrict L, int rmse_type,
+        const float * restrict qw) {
+    float max = 0;
+    float amax = 0;
+    for (int i = 0; i < n; ++i) {
+        float ax = fabsf(x[i]);
+        if (ax > amax) { amax = ax; max = x[i]; }
+    }
+    if (amax < GROUP_MAX_EPS) { // all zero
+        for (int i = 0; i < n; ++i) {
+            L[i] = 0;
+        }
+        return 0.f;
+    }
+    float iscale = -nmax / max;
+    if (rmse_type == 0) {
+        for (int i = 0; i < n; ++i) {
+            int l = nearest_int(iscale * x[i]);
+            L[i] = nmax + MAX(-nmax, MIN(nmax-1, l));
+        }
+        return 1/iscale;
+    }
+    bool return_early = false;
+    if (rmse_type < 0) {
+        rmse_type = -rmse_type;
+        return_early = true;
+    }
+    float sumlx = 0;
+    float suml2 = 0;
+#ifdef HAVE_BUGGY_APPLE_LINKER
+    // use 'volatile' to prevent unroll and work around a bug in Apple ld64 1015.7
+    for (volatile int i = 0; i < n; ++i) {
+#else
+    for (int i = 0; i < n; ++i) {
+#endif
+        int l = nearest_int(iscale * x[i]);
+        l = MAX(-nmax, MIN(nmax-1, l));
+        L[i] = l + nmax;
+        float w = qw ? qw[i] : rmse_type == 1 ? x[i] * x[i] : rmse_type == 2 ? 1 : rmse_type == 3 ? fabsf(x[i]) : sqrtf(fabsf(x[i]));
+        sumlx += w*x[i]*l;
+        suml2 += w*l*l;
+    }
+    float scale = suml2 ? sumlx/suml2 : 0.0f;
+    if (return_early) return suml2 > 0 ? 0.5f*(scale + 1/iscale) : 1/iscale;
+    float best = scale * sumlx;
+    for (int is = -9; is <= 9; ++is) {
+        if (is == 0) {
+            continue;
+        }
+        iscale = -(nmax + 0.1f*is) / max;
+        sumlx = suml2 = 0;
+        for (int i = 0; i < n; ++i) {
+            int l = nearest_int(iscale * x[i]);
+            l = MAX(-nmax, MIN(nmax-1, l));
+            float w = qw ? qw[i] : rmse_type == 1 ? x[i] * x[i] : rmse_type == 2 ? 1 : rmse_type == 3 ? fabsf(x[i]) : sqrtf(fabsf(x[i]));
+            sumlx += w*x[i]*l;
+            suml2 += w*l*l;
+        }
+        if (suml2 > 0 && sumlx*sumlx > best*suml2) {
+            for (int i = 0; i < n; ++i) {
+                int l = nearest_int(iscale * x[i]);
+                L[i] = nmax + MAX(-nmax, MIN(nmax-1, l));
+            }
+            scale = sumlx/suml2; best = scale*sumlx;
+        }
+    }
+    return scale;
+}
+
+static float make_q3_quants(int n, int nmax, const float * restrict x, int8_t * restrict L, bool do_rmse) {
+    float max = 0;
+    float amax = 0;
+    for (int i = 0; i < n; ++i) {
+        float ax = fabsf(x[i]);
+        if (ax > amax) { amax = ax; max = x[i]; }
+    }
+    if (amax < GROUP_MAX_EPS) { // all zero
+        for (int i = 0; i < n; ++i) { L[i] = 0; }
+        return 0.f;
+    }
+    float iscale = -nmax / max;
+    if (do_rmse) {
+        float sumlx = 0;
+        float suml2 = 0;
+        for (int i = 0; i < n; ++i) {
+            int l = nearest_int(iscale * x[i]);
+            l = MAX(-nmax, MIN(nmax-1, l));
+            L[i] = l;
+            float w = x[i]*x[i];
+            sumlx += w*x[i]*l;
+            suml2 += w*l*l;
+        }
+        for (int itry = 0; itry < 5; ++itry) {
+            int n_changed = 0;
+            for (int i = 0; i < n; ++i) {
+                float w = x[i]*x[i];
+                float slx = sumlx - w*x[i]*L[i];
+                if (slx > 0) {
+                    float sl2 = suml2 - w*L[i]*L[i];
+                    int new_l = nearest_int(x[i] * sl2 / slx);
+                    new_l = MAX(-nmax, MIN(nmax-1, new_l));
+                    if (new_l != L[i]) {
+                        slx += w*x[i]*new_l;
+                        sl2 += w*new_l*new_l;
+                        if (sl2 > 0 && slx*slx*suml2 > sumlx*sumlx*sl2) {
+                            L[i] = new_l; sumlx = slx; suml2 = sl2;
+                            ++n_changed;
+                        }
+                    }
+                }
+            }
+            if (!n_changed) {
+                break;
+            }
+        }
+        for (int i = 0; i < n; ++i) {
+            L[i] += nmax;
+        }
+        return sumlx / suml2;
+    }
+    for (int i = 0; i < n; ++i) {
+        int l = nearest_int(iscale * x[i]);
+        l = MAX(-nmax, MIN(nmax-1, l));
+        L[i] = l + nmax;
+    }
+    return 1/iscale;
+}
+
+static float make_qkx1_quants(int n, int nmax, const float * restrict x, uint8_t * restrict L, float * restrict the_min,
+        int ntry, float alpha) {
+    float min = x[0];
+    float max = x[0];
+    for (int i = 1; i < n; ++i) {
+        if (x[i] < min) min = x[i];
+        if (x[i] > max) max = x[i];
+    }
+    if (max == min) {
+        for (int i = 0; i < n; ++i) L[i] = 0;
+        *the_min = 0;
+        return 0.f;
+    }
+    if (min > 0) min = 0;
+    float iscale = nmax/(max - min);
+    float scale = 1/iscale;
+    for (int itry = 0; itry < ntry; ++itry) {
+        float sumlx = 0; int suml2 = 0;
+        bool did_change = false;
+        for (int i = 0; i < n; ++i) {
+            int l = nearest_int(iscale*(x[i] - min));
+            l = MAX(0, MIN(nmax, l));
+            if (l != L[i]) {
+                L[i] = l;
+                did_change = true;
+            }
+            sumlx += (x[i] - min)*l;
+            suml2 += l*l;
+        }
+        scale = sumlx/suml2;
+        float sum = 0;
+        for (int i = 0; i < n; ++i) {
+            sum += x[i] - scale*L[i];
+        }
+        min = alpha*min + (1 - alpha)*sum/n;
+        if (min > 0) min = 0;
+        iscale = 1/scale;
+        if (!did_change) break;
+    }
+    *the_min = -min;
+    return scale;
+}
+
+static float make_qkx2_quants(int n, int nmax, const float * restrict x, const float * restrict weights,
+        uint8_t * restrict L, float * restrict the_min, uint8_t * restrict Laux,
+        float rmin, float rdelta, int nstep, bool use_mad) {
+    float min = x[0];
+    float max = x[0];
+    float sum_w = weights[0];
+    float sum_x = sum_w * x[0];
+#ifdef HAVE_BUGGY_APPLE_LINKER
+    // use 'volatile' to prevent unroll and work around a bug in Apple ld64 1015.7
+    for (volatile int i = 1; i < n; ++i) {
+#else
+    for (int i = 1; i < n; ++i) {
+#endif
+        if (x[i] < min) min = x[i];
+        if (x[i] > max) max = x[i];
+        float w = weights[i];
+        sum_w += w;
+        sum_x += w * x[i];
+    }
+    if (min > 0) min = 0;
+    if (max == min) {
+        for (int i = 0; i < n; ++i) L[i] = 0;
+        *the_min = -min;
+        return 0.f;
+    }
+    float iscale = nmax/(max - min);
+    float scale = 1/iscale;
+    float best_mad = 0;
+    for (int i = 0; i < n; ++i) {
+        int l = nearest_int(iscale*(x[i] - min));
+        L[i] = MAX(0, MIN(nmax, l));
+        float diff = scale * L[i] + min - x[i];
+        diff = use_mad ? fabsf(diff) : diff * diff;
+        float w = weights[i];
+        best_mad += w * diff;
+    }
+    if (nstep < 1) {
+        *the_min = -min;
+        return scale;
+    }
+    for (int is = 0; is <= nstep; ++is) {
+        iscale = (rmin + rdelta*is + nmax)/(max - min);
+        float sum_l = 0, sum_l2 = 0, sum_xl = 0;
+        for (int i = 0; i < n; ++i) {
+            int l = nearest_int(iscale*(x[i] - min));
+            l = MAX(0, MIN(nmax, l));
+            Laux[i] = l;
+            float w = weights[i];
+            sum_l += w*l;
+            sum_l2 += w*l*l;
+            sum_xl += w*l*x[i];
+        }
+        float D = sum_w * sum_l2 - sum_l * sum_l;
+        if (D > 0) {
+            float this_scale = (sum_w * sum_xl - sum_x * sum_l)/D;
+            float this_min   = (sum_l2 * sum_x - sum_l * sum_xl)/D;
+            if (this_min > 0) {
+                this_min = 0;
+                this_scale = sum_xl / sum_l2;
+            }
+            float mad = 0;
+            for (int i = 0; i < n; ++i) {
+                float diff = this_scale * Laux[i] + this_min - x[i];
+                diff = use_mad ? fabsf(diff) : diff * diff;
+                float w = weights[i];
+                mad += w * diff;
+            }
+            if (mad < best_mad) {
+                for (int i = 0; i < n; ++i) {
+                    L[i] = Laux[i];
+                }
+                best_mad = mad;
+                scale = this_scale;
+                min = this_min;
+            }
+        }
+    }
+    *the_min = -min;
+    return scale;
+}
+
+static inline void get_scale_min_k4(int j, const uint8_t * restrict q, uint8_t * restrict d, uint8_t * restrict m) {
+    if (j < 4) {
+        *d = q[j] & 63; *m = q[j + 4] & 63;
+    } else {
+        *d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4);
+        *m = (q[j+4] >>  4) | ((q[j-0] >> 6) << 4);
+    }
+}
+
+//========================- 2-bit (de)-quantization
+
+void quantize_row_q2_K_reference(const float * restrict x, block_q2_K * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int nb = k / QK_K;
+
+    uint8_t L[QK_K];
+    uint8_t Laux[16];
+    float   weights[16];
+    float mins[QK_K/16];
+    float scales[QK_K/16];
+
+    const float q4scale = 15.f;
+
+    for (int i = 0; i < nb; i++) {
+        float max_scale = 0; // as we are deducting the min, scales are always positive
+        float max_min = 0;
+        for (int j = 0; j < QK_K/16; ++j) {
+            for (int l = 0; l < 16; ++l) weights[l] = fabsf(x[16*j + l]);
+            scales[j] = make_qkx2_quants(16, 3, x + 16*j, weights, L + 16*j, &mins[j], Laux, -0.5f, 0.1f, 15, true);
+            float scale = scales[j];
+            if (scale > max_scale) {
+                max_scale = scale;
+            }
+            float min = mins[j];
+            if (min > max_min) {
+                max_min = min;
+            }
+        }
+
+        if (max_scale > 0) {
+            float iscale = q4scale/max_scale;
+            for (int j = 0; j < QK_K/16; ++j) {
+                int l = nearest_int(iscale*scales[j]);
+                y[i].scales[j] = l;
+            }
+            y[i].d = GGML_FP32_TO_FP16(max_scale/q4scale);
+        } else {
+            for (int j = 0; j < QK_K/16; ++j) y[i].scales[j] = 0;
+            y[i].d = GGML_FP32_TO_FP16(0.f);
+        }
+        if (max_min > 0) {
+            float iscale = q4scale/max_min;
+            for (int j = 0; j < QK_K/16; ++j) {
+                int l = nearest_int(iscale*mins[j]);
+                y[i].scales[j] |= (l << 4);
+            }
+            y[i].dmin = GGML_FP32_TO_FP16(max_min/q4scale);
+        } else {
+            y[i].dmin = GGML_FP32_TO_FP16(0.f);
+        }
+        for (int j = 0; j < QK_K/16; ++j) {
+            const float d = GGML_FP16_TO_FP32(y[i].d) * (y[i].scales[j] & 0xF);
+            if (!d) continue;
+            const float dm = GGML_FP16_TO_FP32(y[i].dmin) * (y[i].scales[j] >> 4);
+            for (int ii = 0; ii < 16; ++ii) {
+                int l = nearest_int((x[16*j + ii] + dm)/d);
+                l = MAX(0, MIN(3, l));
+                L[16*j + ii] = l;
+            }
+        }
+
+        for (int j = 0; j < QK_K; j += 128) {
+            for (int l = 0; l < 32; ++l) {
+                y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6);
+            }
+        }
+
+        x += QK_K;
+    }
+}
+
+void dequantize_row_q2_K(const block_q2_K * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int nb = k / QK_K;
+
+    for (int i = 0; i < nb; i++) {
+
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+        const float min = GGML_FP16_TO_FP32(x[i].dmin);
+
+        const uint8_t * q = x[i].qs;
+
+        int is = 0;
+        float dl, ml;
+        for (int n = 0; n < QK_K; n += 128) {
+            int shift = 0;
+            for (int j = 0; j < 4; ++j) {
+
+                uint8_t sc = x[i].scales[is++];
+                dl = d * (sc & 0xF); ml = min * (sc >> 4);
+                for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l] >> shift) & 3)) - ml;
+
+                sc = x[i].scales[is++];
+                dl = d * (sc & 0xF); ml = min * (sc >> 4);
+                for (int l = 0; l < 16; ++l) *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3)) - ml;
+
+                shift += 2;
+            }
+            q += 32;
+        }
+    }
+}
+
+void quantize_row_q2_K(const float * restrict x, void * restrict vy, int64_t k) {
+    quantize_row_q2_K_reference(x, vy, k);
+}
+
+static float make_qkx3_quants(int n, int nmax, const float * restrict x, const float * restrict weights,
+        uint8_t * restrict L, float * restrict the_min, uint8_t * restrict Laux,
+        float rmin, float rdelta, int nstep, bool use_mad) {
+    float min = x[0];
+    float max = x[0];
+    float sum_w = weights ? weights[0] : x[0]*x[0];
+    float sum_x = sum_w * x[0];
+#ifdef HAVE_BUGGY_APPLE_LINKER
+    // use 'volatile' to prevent unroll and work around a bug in Apple ld64 1015.7
+    for (volatile int i = 1; i < n; ++i) {
+#else
+    for (int i = 1; i < n; ++i) {
+#endif
+        if (x[i] < min) min = x[i];
+        if (x[i] > max) max = x[i];
+        float w = weights ? weights[i] : x[i]*x[i];
+        sum_w += w;
+        sum_x += w * x[i];
+    }
+    if (min > 0) {
+        min = 0;
+    }
+    if (max <= min) {
+        memset(L, 0, n);
+        *the_min = -min;
+        return 0.f;
+    }
+    float iscale = nmax/(max - min);
+    float scale = 1/iscale;
+    float best_mad = 0;
+    for (int i = 0; i < n; ++i) {
+        int l = nearest_int(iscale*(x[i] - min));
+        L[i] = MAX(0, MIN(nmax, l));
+        float diff = scale * L[i] + min - x[i];
+        diff = use_mad ? fabsf(diff) : diff*diff;
+        float w = weights ? weights[i] : x[i]*x[i];
+        best_mad += w * diff;
+    }
+    if (nstep < 1) {
+        *the_min = -min;
+        return scale;
+    }
+    for (int is = 0; is <= nstep; ++is) {
+        iscale = (rmin + rdelta*is + nmax)/(max - min);
+        float sum_l = 0, sum_l2 = 0, sum_xl = 0;
+        for (int i = 0; i < n; ++i) {
+            int l = nearest_int(iscale*(x[i] - min));
+            l = MAX(0, MIN(nmax, l));
+            Laux[i] = l;
+            float w = weights ? weights[i] : x[i]*x[i];
+            sum_l  += w*l;
+            sum_l2 += w*l*l;
+            sum_xl += w*l*x[i];
+        }
+        float D = sum_w * sum_l2 - sum_l * sum_l;
+        if (D > 0) {
+            float this_scale = (sum_w * sum_xl - sum_x * sum_l)/D;
+            float this_min   = (sum_l2 * sum_x - sum_l * sum_xl)/D;
+            if (this_min > 0) {
+                this_min = 0;
+                this_scale = sum_xl / sum_l2;
+            }
+            float mad = 0;
+            for (int i = 0; i < n; ++i) {
+                float diff = this_scale * Laux[i] + this_min - x[i];
+                diff = use_mad ? fabsf(diff) : diff*diff;
+                float w = weights ? weights[i] : x[i]*x[i];
+                mad += w * diff;
+            }
+            if (mad < best_mad) {
+                for (int i = 0; i < n; ++i) {
+                    L[i] = Laux[i];
+                }
+                best_mad = mad;
+                scale = this_scale;
+                min = this_min;
+            }
+        }
+    }
+    *the_min = -min;
+    return scale;
+}
+
+static float make_qp_quants(int n, int nmax, const float * restrict x, uint8_t * restrict L, const float * quant_weights) {
+    float max = 0;
+    for (int i = 0; i < n; ++i) {
+        max = MAX(max, x[i]);
+    }
+    if (!max) { // all zero
+        for (int i = 0; i < n; ++i) { L[i] = 0; }
+        return 0.f;
+    }
+    float iscale = nmax / max;
+    for (int i = 0; i < n; ++i) {
+        L[i] = nearest_int(iscale * x[i]);
+    }
+    float scale = 1/iscale;
+    float best_mse = 0;
+    for (int i = 0; i < n; ++i) {
+        float diff = x[i] - scale*L[i];
+        float w = quant_weights[i];
+        best_mse += w*diff*diff;
+    }
+    for (int is = -4; is <= 4; ++is) {
+        if (is == 0) continue;
+        float iscale_is = (0.1f*is + nmax)/max;
+        float scale_is = 1/iscale_is;
+        float mse = 0;
+        for (int i = 0; i < n; ++i) {
+            int l = nearest_int(iscale_is*x[i]);
+            l = MIN(nmax, l);
+            float diff = x[i] - scale_is*l;
+            float w = quant_weights[i];
+            mse += w*diff*diff;
+        }
+        if (mse < best_mse) {
+            best_mse = mse;
+            iscale = iscale_is;
+        }
+    }
+    float sumlx = 0;
+    float suml2 = 0;
+    for (int i = 0; i < n; ++i) {
+        int l = nearest_int(iscale * x[i]);
+        l = MIN(nmax, l);
+        L[i] = l;
+        float w = quant_weights[i];
+        sumlx += w*x[i]*l;
+        suml2 += w*l*l;
+    }
+    for (int itry = 0; itry < 5; ++itry) {
+        int n_changed = 0;
+        for (int i = 0; i < n; ++i) {
+            float w = quant_weights[i];
+            float slx = sumlx - w*x[i]*L[i];
+            float sl2 = suml2 - w*L[i]*L[i];
+            if (slx > 0 && sl2 > 0) {
+                int new_l = nearest_int(x[i] * sl2 / slx);
+                new_l = MIN(nmax, new_l);
+                if (new_l != L[i]) {
+                    slx += w*x[i]*new_l;
+                    sl2 += w*new_l*new_l;
+                    if (slx*slx*suml2 > sumlx*sumlx*sl2) {
+                        L[i] = new_l; sumlx = slx; suml2 = sl2;
+                        ++n_changed;
+                    }
+                }
+            }
+        }
+        if (!n_changed) {
+            break;
+        }
+    }
+    return sumlx/suml2;
+}
+
+static void quantize_row_q2_K_impl(const float * restrict x, block_q2_K * restrict y, int k, const float * restrict quant_weights) {
+    GGML_ASSERT(quant_weights);
+    assert(k % QK_K == 0);
+    const int nb = k / QK_K;
+    const bool requantize = true;
+
+    uint8_t L[QK_K];
+    uint8_t Laux[16];
+    float mins[QK_K/16];
+    float scales[QK_K/16];
+    float sw[QK_K/16];
+    float weight[16];
+    uint8_t Ls[QK_K/16], Lm[QK_K/16];
+
+    for (int i = 0; i < nb; i++) {
+        memset(sw, 0, QK_K/16*sizeof(float));
+        float sumx2 = 0;
+        for (int j = 0; j < QK_K; ++j) sumx2 += x[j]*x[j];
+        float sigma2 = sumx2/QK_K;
+        for (int j = 0; j < QK_K/16; ++j) {
+            const float * restrict qw = quant_weights + QK_K * i + 16*j;
+            for (int l = 0; l < 16; ++l) weight[l] = qw[l] * sqrtf(sigma2 + x[16*j + l]*x[16*j + l]);
+            for (int l = 0; l < QK_K/16; ++l) sw[j] += weight[l];
+            scales[j] = make_qkx3_quants(16, 3, x + 16*j, weight, L + 16*j, &mins[j], Laux, -0.9f, 0.05f, 36, false);
+        }
+
+        float dm, mm;
+        dm  = make_qp_quants(QK_K/16, 15, scales, Ls, sw);
+        mm  = make_qp_quants(QK_K/16, 15, mins,   Lm, sw);
+
+        y[i].d    = GGML_FP32_TO_FP16(dm);
+        y[i].dmin = GGML_FP32_TO_FP16(mm);
+        dm        = GGML_FP16_TO_FP32(y[i].d);
+        mm        = GGML_FP16_TO_FP32(y[i].dmin);
+
+        for (int j = 0; j < QK_K/16; ++j) {
+            y[i].scales[j] = Ls[j] | (Lm[j] << 4);
+        }
+
+        if (requantize) {
+            for (int j = 0; j < QK_K/16; ++j) {
+                const float d = dm * (y[i].scales[j] & 0xF);
+                if (!d) continue;
+                const float m = mm * (y[i].scales[j] >> 4);
+                for (int ii = 0; ii < 16; ++ii) {
+                    int l = nearest_int((x[16*j + ii] + m)/d);
+                    l = MAX(0, MIN(3, l));
+                    L[16*j + ii] = l;
+                }
+            }
+        }
+
+        for (int j = 0; j < QK_K; j += 128) {
+            for (int l = 0; l < 32; ++l) {
+                y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6);
+            }
+        }
+
+        x += QK_K;
+    }
+}
+
+size_t quantize_q2_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    size_t row_size = ggml_row_size(GGML_TYPE_Q2_K, n_per_row);
+    if (!quant_weights) {
+        quantize_row_q2_K_reference(src, dst, (int64_t)nrow*n_per_row);
+    }
+    else {
+        char * qrow = (char *)dst;
+        for (int64_t row = 0; row < nrow; ++row) {
+            quantize_row_q2_K_impl(src, (block_q2_K*)qrow, n_per_row, quant_weights);
+            src += n_per_row;
+            qrow += row_size;
+        }
+    }
+    return nrow * row_size;
+}
+
+//========================= 3-bit (de)-quantization
+
+void quantize_row_q3_K_reference(const float * restrict x, block_q3_K * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int nb = k / QK_K;
+
+    int8_t L[QK_K];
+    float scales[QK_K / 16];
+
+    for (int i = 0; i < nb; i++) {
+
+        float max_scale = 0;
+        float amax = 0;
+        for (int j = 0; j < QK_K/16; ++j) {
+            scales[j] = make_q3_quants(16, 4, x + 16*j, L + 16*j, true);
+            float scale = fabsf(scales[j]);
+            if (scale > amax) {
+                amax = scale; max_scale = scales[j];
+            }
+        }
+
+        memset(y[i].scales, 0, 12);
+        if (max_scale) {
+            float iscale = -32.f/max_scale;
+            for (int j = 0; j < QK_K/16; ++j) {
+                int8_t l = nearest_int(iscale*scales[j]);
+                l = MAX(-32, MIN(31, l)) + 32;
+                if (j < 8) {
+                    y[i].scales[j] = l & 0xF;
+                } else {
+                    y[i].scales[j-8] |= ((l & 0xF) << 4);
+                }
+                l >>= 4;
+                y[i].scales[j%4 + 8] |= (l << (2*(j/4)));
+            }
+            y[i].d = GGML_FP32_TO_FP16(1/iscale);
+        } else {
+            y[i].d = GGML_FP32_TO_FP16(0.f);
+        }
+
+        int8_t sc;
+        for (int j = 0; j < QK_K/16; ++j) {
+            sc = j < 8 ? y[i].scales[j] & 0xF : y[i].scales[j-8] >> 4;
+            sc = (sc | (((y[i].scales[8 + j%4] >> (2*(j/4))) & 3) << 4)) - 32;
+            float d = GGML_FP16_TO_FP32(y[i].d) * sc;
+            if (!d) {
+                continue;
+            }
+            for (int ii = 0; ii < 16; ++ii) {
+                int l = nearest_int(x[16*j + ii]/d);
+                l = MAX(-4, MIN(3, l));
+                L[16*j + ii] = l + 4;
+            }
+        }
+
+        memset(y[i].hmask, 0, QK_K/8);
+        // We put the high-bit for the 1st 8 quants into bit 0, the next 8 into bit 1, etc.
+        int m = 0;
+        uint8_t hm = 1;
+        for (int j = 0; j < QK_K; ++j) {
+            if (L[j] > 3) {
+                y[i].hmask[m] |= hm;
+                L[j] -= 4;
+            }
+            if (++m == QK_K/8) {
+                m = 0; hm <<= 1;
+            }
+        }
+        for (int j = 0; j < QK_K; j += 128) {
+            for (int l = 0; l < 32; ++l) {
+                y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6);
+            }
+        }
+
+        x += QK_K;
+    }
+}
+
+void dequantize_row_q3_K(const block_q3_K * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int nb = k / QK_K;
+
+    const uint32_t kmask1 = 0x03030303;
+    const uint32_t kmask2 = 0x0f0f0f0f;
+
+    uint32_t aux[4];
+    const int8_t * scales = (const int8_t*)aux;
+
+    for (int i = 0; i < nb; i++) {
+
+        const float d_all = GGML_FP16_TO_FP32(x[i].d);
+
+        const uint8_t * restrict q = x[i].qs;
+        const uint8_t * restrict hm = x[i].hmask;
+        uint8_t m = 1;
+
+        memcpy(aux, x[i].scales, 12);
+        uint32_t tmp = aux[2];
+        aux[2] = ((aux[0] >> 4) & kmask2) | (((tmp >> 4) & kmask1) << 4);
+        aux[3] = ((aux[1] >> 4) & kmask2) | (((tmp >> 6) & kmask1) << 4);
+        aux[0] = (aux[0] & kmask2) | (((tmp >> 0) & kmask1) << 4);
+        aux[1] = (aux[1] & kmask2) | (((tmp >> 2) & kmask1) << 4);
+
+        int is = 0;
+        float dl;
+        for (int n = 0; n < QK_K; n += 128) {
+            int shift = 0;
+            for (int j = 0; j < 4; ++j) {
+
+                dl = d_all * (scales[is++] - 32);
+                for (int l = 0; l < 16; ++l) {
+                    *y++ = dl * ((int8_t)((q[l+ 0] >> shift) & 3) - ((hm[l+ 0] & m) ? 0 : 4));
+                }
+
+                dl = d_all * (scales[is++] - 32);
+                for (int l = 0; l < 16; ++l) {
+                    *y++ = dl * ((int8_t)((q[l+16] >> shift) & 3) - ((hm[l+16] & m) ? 0 : 4));
+                }
+
+                shift += 2;
+                m <<= 1;
+            }
+            q += 32;
+        }
+
+    }
+}
+
+void quantize_row_q3_K(const float * restrict x, void * restrict vy, int64_t k) {
+    quantize_row_q3_K_reference(x, vy, k);
+}
+
+static void quantize_row_q3_K_impl(const float * restrict x, block_q3_K * restrict y, int64_t n_per_row, const float * restrict quant_weights) {
+    assert(n_per_row % QK_K == 0);
+    const int nb = n_per_row / QK_K;
+
+    int8_t L[QK_K];
+    float scales[QK_K / 16];
+    float weight[16];
+    float sw[QK_K / 16];
+    int8_t Ls[QK_K / 16];
+
+    for (int i = 0; i < nb; i++) {
+
+        float sumx2 = 0;
+        for (int j = 0; j < QK_K; ++j) sumx2 += x[j]*x[j];
+        float sigma2 = 2*sumx2/QK_K;
+
+        for (int j = 0; j < QK_K/16; ++j) {
+            if (quant_weights) {
+                const float * qw = quant_weights + QK_K * i + 16*j;
+                for (int l = 0; l < 16; ++l) weight[l] = qw[l] * sqrtf(sigma2 + x[16*j+l]*x[16*j+l]);
+            } else {
+                for (int l = 0; l < 16; ++l) weight[l] = x[16*j+l]*x[16*j+l];
+            }
+            float sumw = 0;
+            for (int l = 0; l < 16; ++l) sumw += weight[l];
+            sw[j] = sumw;
+
+            scales[j] = make_qx_quants(16, 4, x + 16*j, L + 16*j, 1, weight);
+
+        }
+
+        memset(y[i].scales, 0, 12);
+
+        float d_block = make_qx_quants(QK_K/16, 32, scales, Ls, 1, sw);
+        for (int j = 0; j < QK_K/16; ++j) {
+            int l = Ls[j];
+            if (j < 8) {
+                y[i].scales[j] = l & 0xF;
+            } else {
+                y[i].scales[j-8] |= ((l & 0xF) << 4);
+            }
+            l >>= 4;
+            y[i].scales[j%4 + 8] |= (l << (2*(j/4)));
+        }
+        y[i].d = GGML_FP32_TO_FP16(d_block);
+
+        int8_t sc;
+        for (int j = 0; j < QK_K/16; ++j) {
+            sc = j < 8 ? y[i].scales[j] & 0xF : y[i].scales[j-8] >> 4;
+            sc = (sc | (((y[i].scales[8 + j%4] >> (2*(j/4))) & 3) << 4)) - 32;
+            float d = GGML_FP16_TO_FP32(y[i].d) * sc;
+            if (!d) {
+                continue;
+            }
+            for (int ii = 0; ii < 16; ++ii) {
+                int l = nearest_int(x[16*j + ii]/d);
+                l = MAX(-4, MIN(3, l));
+                L[16*j + ii] = l + 4;
+            }
+        }
+
+        memset(y[i].hmask, 0, QK_K/8);
+        // We put the high-bit for the 1st 8 quants into bit 0, the next 8 into bit 1, etc.
+        int m = 0;
+        uint8_t hm = 1;
+        for (int j = 0; j < QK_K; ++j) {
+            if (L[j] > 3) {
+                y[i].hmask[m] |= hm;
+                L[j] -= 4;
+            }
+            if (++m == QK_K/8) {
+                m = 0; hm <<= 1;
+            }
+        }
+        for (int j = 0; j < QK_K; j += 128) {
+            for (int l = 0; l < 32; ++l) {
+                y[i].qs[j/4 + l] = L[j + l] | (L[j + l + 32] << 2) | (L[j + l + 64] << 4) | (L[j + l + 96] << 6);
+            }
+        }
+
+        x += QK_K;
+    }
+}
+
+size_t quantize_q3_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    size_t row_size = ggml_row_size(GGML_TYPE_Q3_K, n_per_row);
+    if (!quant_weights) {
+        quantize_row_q3_K_reference(src, dst, (int64_t)nrow*n_per_row);
+    }
+    else {
+        char * qrow = (char *)dst;
+        for (int64_t row = 0; row < nrow; ++row) {
+            quantize_row_q3_K_impl(src, (block_q3_K*)qrow, n_per_row, quant_weights);
+            src += n_per_row;
+            qrow += row_size;
+        }
+    }
+    return nrow * row_size;
+}
+
+// ====================== 4-bit (de)-quantization
+
+void quantize_row_q4_K_reference(const float * restrict x, block_q4_K * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int nb = k / QK_K;
+
+    uint8_t L[QK_K];
+    uint8_t Laux[32];
+    float   weights[32];
+    float mins[QK_K/32];
+    float scales[QK_K/32];
+
+    for (int i = 0; i < nb; i++) {
+        float max_scale = 0; // as we are deducting the min, scales are always positive
+        float max_min = 0;
+        for (int j = 0; j < QK_K/32; ++j) {
+            //scales[j] = make_qkx1_quants(32, 15, x + 32*j, L + 32*j, &mins[j], 9, 0.5f);
+            float sum_x2 = 0;
+            for (int l = 0; l < 32; ++l) sum_x2 += x[32*j + l] * x[32*j + l];
+            float av_x = sqrtf(sum_x2/32);
+            for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]);
+            scales[j] = make_qkx2_quants(32, 15, x + 32*j, weights, L + 32*j, &mins[j], Laux, -1.f, 0.1f, 20, false);
+            float scale = scales[j];
+            if (scale > max_scale) {
+                max_scale = scale;
+            }
+            float min = mins[j];
+            if (min > max_min) {
+                max_min = min;
+            }
+        }
+
+        float inv_scale = max_scale > 0 ? 63.f/max_scale : 0.f;
+        float inv_min   = max_min   > 0 ? 63.f/max_min   : 0.f;
+        for (int j = 0; j < QK_K/32; ++j) {
+            uint8_t ls = nearest_int(inv_scale*scales[j]);
+            uint8_t lm = nearest_int(inv_min*mins[j]);
+            ls = MIN(63, ls);
+            lm = MIN(63, lm);
+            if (j < 4) {
+                y[i].scales[j] = ls;
+                y[i].scales[j+4] = lm;
+            } else {
+                y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4);
+                y[i].scales[j-4] |= ((ls >> 4) << 6);
+                y[i].scales[j-0] |= ((lm >> 4) << 6);
+            }
+        }
+        y[i].d = GGML_FP32_TO_FP16(max_scale/63.f);
+        y[i].dmin = GGML_FP32_TO_FP16(max_min/63.f);
+
+        uint8_t sc, m;
+        for (int j = 0; j < QK_K/32; ++j) {
+            get_scale_min_k4(j, y[i].scales, &sc, &m);
+            const float d = GGML_FP16_TO_FP32(y[i].d) * sc;
+            if (!d) continue;
+            const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m;
+            for (int ii = 0; ii < 32; ++ii) {
+                int l = nearest_int((x[32*j + ii] + dm)/d);
+                l = MAX(0, MIN(15, l));
+                L[32*j + ii] = l;
+            }
+        }
+
+        uint8_t * q = y[i].qs;
+        for (int j = 0; j < QK_K; j += 64) {
+            for (int l = 0; l < 32; ++l) q[l] = L[j + l] | (L[j + l + 32] << 4);
+            q += 32;
+        }
+
+        x += QK_K;
+    }
+}
+
+void dequantize_row_q4_K(const block_q4_K * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int nb = k / QK_K;
+
+    for (int i = 0; i < nb; i++) {
+        const uint8_t * q = x[i].qs;
+
+        const float d   = GGML_FP16_TO_FP32(x[i].d);
+        const float min = GGML_FP16_TO_FP32(x[i].dmin);
+
+        int is = 0;
+        uint8_t sc, m;
+        for (int j = 0; j < QK_K; j += 64) {
+            get_scale_min_k4(is + 0, x[i].scales, &sc, &m);
+            const float d1 = d * sc; const float m1 = min * m;
+            get_scale_min_k4(is + 1, x[i].scales, &sc, &m);
+            const float d2 = d * sc; const float m2 = min * m;
+            for (int l = 0; l < 32; ++l) *y++ = d1 * (q[l] & 0xF) - m1;
+            for (int l = 0; l < 32; ++l) *y++ = d2 * (q[l]  >> 4) - m2;
+            q += 32; is += 2;
+        }
+    }
+}
+
+void quantize_row_q4_K(const float * restrict x, void * restrict vy, int64_t k) {
+    assert(k % QK_K == 0);
+    block_q4_K * restrict y = vy;
+    quantize_row_q4_K_reference(x, y, k);
+}
+
+static void quantize_row_q4_K_impl(const float * restrict x, block_q4_K * restrict y, int64_t n_per_row, const float * quant_weights) {
+    assert(n_per_row % QK_K == 0);
+    const int64_t nb = n_per_row / QK_K;
+
+    uint8_t L[QK_K];
+    uint8_t Laux[32];
+    uint8_t Ls[QK_K/32];
+    uint8_t Lm[QK_K/32];
+    float   weights[32];
+    float   sw[QK_K/32];
+    float   mins[QK_K/32];
+    float   scales[QK_K/32];
+
+    for (int i = 0; i < nb; i++) {
+
+        float sum_x2 = 0;
+        for (int l = 0; l < QK_K; ++l) sum_x2 += x[l] * x[l];
+        float sigma2 = 2*sum_x2/QK_K;
+        float av_x = sqrtf(sigma2);
+
+        for (int j = 0; j < QK_K/32; ++j) {
+            if (quant_weights) {
+                const float * qw = quant_weights + QK_K*i + 32*j;
+                for (int l = 0; l < 32; ++l) weights[l] = qw[l] * sqrtf(sigma2 + x[32*j + l]*x[32*j + l]);
+            } else {
+                for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]);
+            }
+            float sumw = 0;
+            for (int l = 0; l < 32; ++l) sumw += weights[l];
+            sw[j] = sumw;
+            scales[j] = make_qkx3_quants(32, 15, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.9f, 0.05f, 36, false);
+        }
+
+        float d_block = make_qp_quants(QK_K/32, 63, scales, Ls, sw);
+        float m_block = make_qp_quants(QK_K/32, 63, mins,   Lm, sw);
+        for (int j = 0; j < QK_K/32; ++j) {
+            uint8_t ls = Ls[j];
+            uint8_t lm = Lm[j];
+            if (j < 4) {
+                y[i].scales[j] = ls;
+                y[i].scales[j+4] = lm;
+            } else {
+                y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4);
+                y[i].scales[j-4] |= ((ls >> 4) << 6);
+                y[i].scales[j-0] |= ((lm >> 4) << 6);
+            }
+        }
+        y[i].d = GGML_FP32_TO_FP16(d_block);
+        y[i].dmin = GGML_FP32_TO_FP16(m_block);
+
+        uint8_t sc, m;
+        for (int j = 0; j < QK_K/32; ++j) {
+            get_scale_min_k4(j, y[i].scales, &sc, &m);
+            const float d = GGML_FP16_TO_FP32(y[i].d) * sc;
+            if (!d) continue;
+            const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m;
+            for (int ii = 0; ii < 32; ++ii) {
+                int l = nearest_int((x[32*j + ii] + dm)/d);
+                l = MAX(0, MIN(15, l));
+                L[32*j + ii] = l;
+            }
+        }
+        uint8_t * q = y[i].qs;
+        for (int j = 0; j < QK_K; j += 64) {
+            for (int l = 0; l < 32; ++l) q[l] = L[j + l] | (L[j + l + 32] << 4);
+            q += 32;
+        }
+
+        x += QK_K;
+
+    }
+}
+
+size_t quantize_q4_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    size_t row_size = ggml_row_size(GGML_TYPE_Q4_K, n_per_row);
+    if (!quant_weights) {
+        quantize_row_q4_K_reference(src, dst, (int64_t)nrow*n_per_row);
+    }
+    else {
+        char * qrow = (char *)dst;
+        for (int64_t row = 0; row < nrow; ++row) {
+            quantize_row_q4_K_impl(src, (block_q4_K*)qrow, n_per_row, quant_weights);
+            src += n_per_row;
+            qrow += row_size;
+        }
+    }
+    return nrow * row_size;
+}
+
+// ====================== 5-bit (de)-quantization
+
+void quantize_row_q5_K_reference(const float * restrict x, block_q5_K * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    uint8_t L[QK_K];
+    float mins[QK_K/32];
+    float scales[QK_K/32];
+    float weights[32];
+    uint8_t Laux[32];
+
+    for (int i = 0; i < nb; i++) {
+        float max_scale = 0; // as we are deducting the min, scales are always positive
+        float max_min = 0;
+        for (int j = 0; j < QK_K/32; ++j) {
+            //scales[j] = make_qkx1_quants(32, 31, x + 32*j, L + 32*j, &mins[j], 9, 0.5f);
+            float sum_x2 = 0;
+            for (int l = 0; l < 32; ++l) sum_x2 += x[32*j + l] * x[32*j + l];
+            float av_x = sqrtf(sum_x2/32);
+            for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]);
+            scales[j] = make_qkx2_quants(32, 31, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.5f, 0.1f, 15, false);
+            float scale = scales[j];
+            if (scale > max_scale) {
+                max_scale = scale;
+            }
+            float min = mins[j];
+            if (min > max_min) {
+                max_min = min;
+            }
+        }
+
+        float inv_scale = max_scale > 0 ? 63.f/max_scale : 0.f;
+        float inv_min   = max_min   > 0 ? 63.f/max_min   : 0.f;
+        for (int j = 0; j < QK_K/32; ++j) {
+            uint8_t ls = nearest_int(inv_scale*scales[j]);
+            uint8_t lm = nearest_int(inv_min*mins[j]);
+            ls = MIN(63, ls);
+            lm = MIN(63, lm);
+            if (j < 4) {
+                y[i].scales[j] = ls;
+                y[i].scales[j+4] = lm;
+            } else {
+                y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4);
+                y[i].scales[j-4] |= ((ls >> 4) << 6);
+                y[i].scales[j-0] |= ((lm >> 4) << 6);
+            }
+        }
+        y[i].d = GGML_FP32_TO_FP16(max_scale/63.f);
+        y[i].dmin = GGML_FP32_TO_FP16(max_min/63.f);
+
+        uint8_t sc, m;
+        for (int j = 0; j < QK_K/32; ++j) {
+            get_scale_min_k4(j, y[i].scales, &sc, &m);
+            const float d = GGML_FP16_TO_FP32(y[i].d) * sc;
+            if (!d) continue;
+            const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m;
+            for (int ii = 0; ii < 32; ++ii) {
+                int l = nearest_int((x[32*j + ii] + dm)/d);
+                l = MAX(0, MIN(31, l));
+                L[32*j + ii] = l;
+            }
+        }
+
+        uint8_t * restrict qh = y[i].qh;
+        uint8_t * restrict ql = y[i].qs;
+        memset(qh, 0, QK_K/8);
+
+        uint8_t m1 = 1, m2 = 2;
+        for (int n = 0; n < QK_K; n += 64) {
+            for (int j = 0; j < 32; ++j) {
+                int l1 = L[n + j];
+                if (l1 > 15) {
+                    l1 -= 16; qh[j] |= m1;
+                }
+                int l2 = L[n + j + 32];
+                if (l2 > 15) {
+                    l2 -= 16; qh[j] |= m2;
+                }
+                ql[j] = l1 | (l2 << 4);
+            }
+            m1 <<= 2; m2 <<= 2;
+            ql += 32;
+        }
+
+        x += QK_K;
+    }
+}
+
+void dequantize_row_q5_K(const block_q5_K * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    for (int i = 0; i < nb; i++) {
+        const uint8_t * ql = x[i].qs;
+        const uint8_t * qh = x[i].qh;
+
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+        const float min = GGML_FP16_TO_FP32(x[i].dmin);
+
+        int is = 0;
+        uint8_t sc, m;
+        uint8_t u1 = 1, u2 = 2;
+        for (int j = 0; j < QK_K; j += 64) {
+            get_scale_min_k4(is + 0, x[i].scales, &sc, &m);
+            const float d1 = d * sc; const float m1 = min * m;
+            get_scale_min_k4(is + 1, x[i].scales, &sc, &m);
+            const float d2 = d * sc; const float m2 = min * m;
+            for (int l = 0; l < 32; ++l) *y++ = d1 * ((ql[l] & 0xF) + (qh[l] & u1 ? 16 : 0)) - m1;
+            for (int l = 0; l < 32; ++l) *y++ = d2 * ((ql[l]  >> 4) + (qh[l] & u2 ? 16 : 0)) - m2;
+            ql += 32; is += 2;
+            u1 <<= 2; u2 <<= 2;
+        }
+    }
+}
+
+void quantize_row_q5_K(const float * restrict x, void * restrict vy, int64_t k) {
+    assert(k % QK_K == 0);
+    block_q5_K * restrict y = vy;
+    quantize_row_q5_K_reference(x, y, k);
+}
+
+static void quantize_row_q5_K_impl(const float * restrict x, block_q5_K * restrict y, int64_t n_per_row, const float * quant_weights) {
+    assert(n_per_row % QK_K == 0);
+    const int64_t nb = n_per_row / QK_K;
+
+    uint8_t L[QK_K];
+    uint8_t Laux[32];
+    uint8_t Ls[QK_K/32];
+    uint8_t Lm[QK_K/32];
+    float   mins[QK_K/32];
+    float   scales[QK_K/32];
+    float   sw[QK_K/32];
+    float   weights[32];
+
+    for (int i = 0; i < nb; i++) {
+
+        float sum_x2 = 0;
+        for (int l = 0; l < QK_K; ++l) sum_x2 += x[l] * x[l];
+        float sigma2 = 2*sum_x2/QK_K;
+        float av_x = sqrtf(sigma2);
+
+        for (int j = 0; j < QK_K/32; ++j) {
+            if (quant_weights) {
+                const float * qw = quant_weights + QK_K*i + 32*j;
+                for (int l = 0; l < 32; ++l) weights[l] = qw[l] * sqrtf(sigma2 + x[32*j + l]*x[32*j + l]);
+            } else {
+                for (int l = 0; l < 32; ++l) weights[l] = av_x + fabsf(x[32*j + l]);
+            }
+            float sumw = 0;
+            for (int l = 0; l < 32; ++l) sumw += weights[l];
+            sw[j] = sumw;
+
+            scales[j] = make_qkx3_quants(32, 31, x + 32*j, weights, L + 32*j, &mins[j], Laux, -0.9f, 0.05f, 36, false);
+        }
+
+        float d_block = make_qp_quants(QK_K/32, 63, scales, Ls, sw);
+        float m_block = make_qp_quants(QK_K/32, 63, mins,   Lm, sw);
+
+        for (int j = 0; j < QK_K/32; ++j) {
+            uint8_t ls = Ls[j];
+            uint8_t lm = Lm[j];
+            ls = MIN(63, ls);
+            lm = MIN(63, lm);
+            if (j < 4) {
+                y[i].scales[j] = ls;
+                y[i].scales[j+4] = lm;
+            } else {
+                y[i].scales[j+4] = (ls & 0xF) | ((lm & 0xF) << 4);
+                y[i].scales[j-4] |= ((ls >> 4) << 6);
+                y[i].scales[j-0] |= ((lm >> 4) << 6);
+            }
+        }
+        y[i].d = GGML_FP32_TO_FP16(d_block);
+        y[i].dmin = GGML_FP32_TO_FP16(m_block);
+
+        uint8_t sc, m;
+        for (int j = 0; j < QK_K/32; ++j) {
+            get_scale_min_k4(j, y[i].scales, &sc, &m);
+            const float d = GGML_FP16_TO_FP32(y[i].d) * sc;
+            if (!d) continue;
+            const float dm = GGML_FP16_TO_FP32(y[i].dmin) * m;
+            for (int ii = 0; ii < 32; ++ii) {
+                int l = nearest_int((x[32*j + ii] + dm)/d);
+                l = MAX(0, MIN(31, l));
+                L[32*j + ii] = l;
+            }
+        }
+
+        uint8_t * restrict qh = y[i].qh;
+        uint8_t * restrict ql = y[i].qs;
+        memset(qh, 0, QK_K/8);
+
+        uint8_t m1 = 1, m2 = 2;
+        for (int n = 0; n < QK_K; n += 64) {
+            for (int j = 0; j < 32; ++j) {
+                int l1 = L[n + j];
+                if (l1 > 15) {
+                    l1 -= 16; qh[j] |= m1;
+                }
+                int l2 = L[n + j + 32];
+                if (l2 > 15) {
+                    l2 -= 16; qh[j] |= m2;
+                }
+                ql[j] = l1 | (l2 << 4);
+            }
+            m1 <<= 2; m2 <<= 2;
+            ql += 32;
+        }
+
+        x += QK_K;
+
+    }
+}
+
+size_t quantize_q5_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    size_t row_size = ggml_row_size(GGML_TYPE_Q5_K, n_per_row);
+    if (!quant_weights) {
+        quantize_row_q5_K_reference(src, dst, (int64_t)nrow*n_per_row);
+    }
+    else {
+        char * qrow = (char *)dst;
+        for (int64_t row = 0; row < nrow; ++row) {
+            quantize_row_q5_K_impl(src, (block_q5_K*)qrow, n_per_row, quant_weights);
+            src += n_per_row;
+            qrow += row_size;
+        }
+    }
+    return nrow * row_size;
+}
+
+// ====================== 6-bit (de)-quantization
+
+void quantize_row_q6_K_reference(const float * restrict x, block_q6_K * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    int8_t L[QK_K];
+    float   scales[QK_K/16];
+
+    for (int i = 0; i < nb; i++) {
+
+        float max_scale = 0;
+        float max_abs_scale = 0;
+
+        for (int ib = 0; ib < QK_K/16; ++ib) {
+
+            const float scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, NULL);
+            scales[ib] = scale;
+
+            const float abs_scale = fabsf(scale);
+            if (abs_scale > max_abs_scale) {
+                max_abs_scale = abs_scale;
+                max_scale = scale;
+            }
+
+        }
+
+        if (max_abs_scale < GROUP_MAX_EPS) {
+            memset(&y[i], 0, sizeof(block_q6_K));
+            y[i].d = GGML_FP32_TO_FP16(0.f);
+            x += QK_K;
+            continue;
+        }
+
+        float iscale = -128.f/max_scale;
+        y[i].d = GGML_FP32_TO_FP16(1/iscale);
+        for (int ib = 0; ib < QK_K/16; ++ib) {
+            y[i].scales[ib] = MIN(127, nearest_int(iscale*scales[ib]));
+        }
+
+        for (int j = 0; j < QK_K/16; ++j) {
+            float d = GGML_FP16_TO_FP32(y[i].d) * y[i].scales[j];
+            if (!d) {
+                continue;
+            }
+            for (int ii = 0; ii < 16; ++ii) {
+                int l = nearest_int(x[16*j + ii]/d);
+                l = MAX(-32, MIN(31, l));
+                L[16*j + ii] = l + 32;
+            }
+        }
+
+        uint8_t * restrict ql = y[i].ql;
+        uint8_t * restrict qh = y[i].qh;
+        for (int j = 0; j < QK_K; j += 128) {
+            for (int l = 0; l < 32; ++l) {
+                const uint8_t q1 = L[j + l +  0] & 0xF;
+                const uint8_t q2 = L[j + l + 32] & 0xF;
+                const uint8_t q3 = L[j + l + 64] & 0xF;
+                const uint8_t q4 = L[j + l + 96] & 0xF;
+                ql[l+ 0] = q1 | (q3 << 4);
+                ql[l+32] = q2 | (q4 << 4);
+                qh[l] = (L[j + l] >> 4) | ((L[j + l + 32] >> 4) << 2) | ((L[j + l + 64] >> 4) << 4) | ((L[j + l + 96] >> 4) << 6);
+            }
+            ql += 64;
+            qh += 32;
+        }
+
+        x += QK_K;
+    }
+}
+
+void dequantize_row_q6_K(const block_q6_K * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    for (int i = 0; i < nb; i++) {
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+
+        const uint8_t * restrict ql = x[i].ql;
+        const uint8_t * restrict qh = x[i].qh;
+        const int8_t  * restrict sc = x[i].scales;
+
+        for (int n = 0; n < QK_K; n += 128) {
+            for (int l = 0; l < 32; ++l) {
+                int is = l/16;
+                const int8_t q1 = (int8_t)((ql[l +  0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32;
+                const int8_t q2 = (int8_t)((ql[l + 32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32;
+                const int8_t q3 = (int8_t)((ql[l +  0]  >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32;
+                const int8_t q4 = (int8_t)((ql[l + 32]  >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32;
+                y[l +  0] = d * sc[is + 0] * q1;
+                y[l + 32] = d * sc[is + 2] * q2;
+                y[l + 64] = d * sc[is + 4] * q3;
+                y[l + 96] = d * sc[is + 6] * q4;
+            }
+            y  += 128;
+            ql += 64;
+            qh += 32;
+            sc += 8;
+        }
+    }
+}
+
+void quantize_row_q6_K(const float * restrict x, void * restrict vy, int64_t k) {
+    assert(k % QK_K == 0);
+    block_q6_K * restrict y = vy;
+    quantize_row_q6_K_reference(x, y, k);
+}
+
+static void quantize_row_q6_K_impl(const float * restrict x, block_q6_K * restrict y, int64_t n_per_row, const float * quant_weights) {
+    assert(n_per_row % QK_K == 0);
+    const int64_t nb = n_per_row / QK_K;
+
+    int8_t L[QK_K];
+    float   scales[QK_K/16];
+    //float   weights[16];
+
+    for (int i = 0; i < nb; i++) {
+
+        //float sum_x2 = 0;
+        //for (int j = 0; j < QK_K; ++j) sum_x2 += x[j]*x[j];
+        //float sigma2 = sum_x2/QK_K;
+
+        float max_scale = 0;
+        float max_abs_scale = 0;
+
+        for (int ib = 0; ib < QK_K/16; ++ib) {
+
+            float scale;
+            if (quant_weights) {
+                const float * qw = quant_weights + QK_K*i + 16*ib;
+                //for (int j = 0; j < 16; ++j) weights[j] = qw[j] * sqrtf(sigma2 + x[16*ib + j]*x[16*ib + j]);
+                //scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, weights);
+                scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, qw);
+            } else {
+                scale = make_qx_quants(16, 32, x + 16*ib, L + 16*ib, 1, NULL);
+            }
+            scales[ib] = scale;
+
+            const float abs_scale = fabsf(scale);
+            if (abs_scale > max_abs_scale) {
+                max_abs_scale = abs_scale;
+                max_scale = scale;
+            }
+
+        }
+
+        if (max_abs_scale < GROUP_MAX_EPS) {
+            memset(&y[i], 0, sizeof(block_q6_K));
+            y[i].d = GGML_FP32_TO_FP16(0.f);
+            x += QK_K;
+            continue;
+        }
+
+        float iscale = -128.f/max_scale;
+        y[i].d = GGML_FP32_TO_FP16(1/iscale);
+        for (int ib = 0; ib < QK_K/16; ++ib) {
+            y[i].scales[ib] = MIN(127, nearest_int(iscale*scales[ib]));
+        }
+
+        for (int j = 0; j < QK_K/16; ++j) {
+            float d = GGML_FP16_TO_FP32(y[i].d) * y[i].scales[j];
+            if (!d) {
+                continue;
+            }
+            for (int ii = 0; ii < 16; ++ii) {
+                int l = nearest_int(x[16*j + ii]/d);
+                l = MAX(-32, MIN(31, l));
+                L[16*j + ii] = l + 32;
+            }
+        }
+
+        uint8_t * restrict ql = y[i].ql;
+        uint8_t * restrict qh = y[i].qh;
+        for (int j = 0; j < QK_K; j += 128) {
+            for (int l = 0; l < 32; ++l) {
+                const uint8_t q1 = L[j + l +  0] & 0xF;
+                const uint8_t q2 = L[j + l + 32] & 0xF;
+                const uint8_t q3 = L[j + l + 64] & 0xF;
+                const uint8_t q4 = L[j + l + 96] & 0xF;
+                ql[l+ 0] = q1 | (q3 << 4);
+                ql[l+32] = q2 | (q4 << 4);
+                qh[l] = (L[j + l] >> 4) | ((L[j + l + 32] >> 4) << 2) | ((L[j + l + 64] >> 4) << 4) | ((L[j + l + 96] >> 4) << 6);
+            }
+            ql += 64;
+            qh += 32;
+        }
+
+        x += QK_K;
+
+    }
+}
+
+size_t quantize_q6_K(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    size_t row_size = ggml_row_size(GGML_TYPE_Q6_K, n_per_row);
+    if (!quant_weights) {
+        quantize_row_q6_K_reference(src, dst, (int64_t)nrow*n_per_row);
+    }
+    else {
+        char * qrow = (char *)dst;
+        for (int64_t row = 0; row < nrow; ++row) {
+            quantize_row_q6_K_impl(src, (block_q6_K*)qrow, n_per_row, quant_weights);
+            src += n_per_row;
+            qrow += row_size;
+        }
+    }
+    return nrow * row_size;
+}
+
+static void quantize_row_q4_0_impl(const float * restrict x, block_q4_0 * restrict y, int64_t n_per_row, const float * quant_weights) {
+    static_assert(QK4_0 == 32, "QK4_0 must be 32");
+
+    if (!quant_weights) {
+        quantize_row_q4_0_reference(x, y, n_per_row);
+        return;
+    }
+
+    float weight[QK4_0];
+    int8_t L[QK4_0];
+
+    float sum_x2 = 0;
+    for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j];
+    float sigma2 = sum_x2/n_per_row;
+
+    const int64_t nb = n_per_row/QK4_0;
+    for (int ib = 0; ib < nb; ++ib) {
+        const float * xb = x + QK4_0 * ib;
+        const float * qw = quant_weights + QK4_0 * ib;
+        for (int j = 0; j < QK4_0; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]);
+        float d = make_qx_quants(QK4_0, 8, xb, L, 1, weight);
+        y[ib].d = GGML_FP32_TO_FP16(d);
+        for (int j = 0; j < 16; ++j) {
+            y[ib].qs[j] = L[j] | (L[j+16] << 4);
+        }
+    }
+}
+
+size_t quantize_q4_0(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    if (!quant_weights) {
+        quantize_row_q4_0_reference(src, dst, (int64_t)nrow*n_per_row);
+        return nrow * ggml_row_size(GGML_TYPE_Q4_0, n_per_row);
+    }
+    size_t row_size = ggml_row_size(GGML_TYPE_Q4_0, n_per_row);
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_q4_0_impl(src, (block_q4_0*)qrow, n_per_row, quant_weights);
+        src += n_per_row;
+        qrow += row_size;
+    }
+    return nrow * row_size;
+}
+
+static void quantize_row_q4_1_impl(const float * restrict x, block_q4_1 * restrict y, int64_t n_per_row, const float * quant_weights) {
+    static_assert(QK4_1 == 32, "QK4_1 must be 32");
+
+    if (!quant_weights) {
+        quantize_row_q4_1_reference(x, y, n_per_row);
+        return;
+    }
+
+    float weight[QK4_1];
+    uint8_t L[QK4_1], Laux[QK4_1];
+
+    float sum_x2 = 0;
+    for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j];
+    float sigma2 = sum_x2/n_per_row;
+
+    const int64_t nb = n_per_row/QK4_1;
+    for (int ib = 0; ib < nb; ++ib) {
+        const float * xb = x + QK4_1 * ib;
+        const float * qw = quant_weights + QK4_1 * ib;
+        for (int j = 0; j < QK4_1; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]);
+        float min;
+        float d = make_qkx3_quants(QK4_1, 15, xb, weight, L, &min, Laux, -0.9f, 0.05f, 36, false);
+        y[ib].d = GGML_FP32_TO_FP16(d);
+        y[ib].m = GGML_FP32_TO_FP16(-min);
+        for (int j = 0; j < 16; ++j) {
+            y[ib].qs[j] = L[j] | (L[j+16] << 4);
+        }
+    }
+}
+
+size_t quantize_q4_1(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    if (!quant_weights) {
+        quantize_row_q4_1_reference(src, dst, (int64_t)nrow*n_per_row);
+        return nrow * ggml_row_size(GGML_TYPE_Q4_1, n_per_row);
+    }
+    size_t row_size = ggml_row_size(GGML_TYPE_Q4_1, n_per_row);
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_q4_1_impl(src, (block_q4_1*)qrow, n_per_row, quant_weights);
+        src += n_per_row;
+        qrow += row_size;
+    }
+    return nrow * row_size;
+}
+
+static void quantize_row_q5_0_impl(const float * restrict x, block_q5_0 * restrict y, int64_t n_per_row, const float * quant_weights) {
+    static_assert(QK5_0 == 32, "QK5_0 must be 32");
+
+    if (!quant_weights) {
+        quantize_row_q5_0_reference(x, y, n_per_row);
+        return;
+    }
+
+    float weight[QK5_0];
+    int8_t L[QK5_0];
+
+    float sum_x2 = 0;
+    for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j];
+    float sigma2 = sum_x2/n_per_row;
+
+    const int64_t nb = n_per_row/QK5_0;
+    for (int ib = 0; ib < nb; ++ib) {
+        const float * xb = x + QK5_0 * ib;
+        const float * qw = quant_weights + QK5_0 * ib;
+        for (int j = 0; j < QK5_0; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]);
+        float d = make_qx_quants(QK5_0, 16, xb, L, 1, weight);
+        y[ib].d = GGML_FP32_TO_FP16(d);
+
+        uint32_t qh = 0;
+
+        for (int j = 0; j < 16; ++j) {
+            const uint8_t xi0 = L[j];
+            const uint8_t xi1 = L[j+16];
+            y[ib].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4);
+
+            // get the 5-th bit and store it in qh at the right position
+            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
+            qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2);
+        }
+
+        memcpy(&y[ib].qh, &qh, sizeof(qh));
+    }
+}
+
+size_t quantize_q5_0(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    if (!quant_weights) {
+        quantize_row_q5_0_reference(src, dst, (int64_t)nrow*n_per_row);
+        return nrow * ggml_row_size(GGML_TYPE_Q5_0, n_per_row);
+    }
+    size_t row_size = ggml_row_size(GGML_TYPE_Q5_0, n_per_row);
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_q5_0_impl(src, (block_q5_0*)qrow, n_per_row, quant_weights);
+        src += n_per_row;
+        qrow += row_size;
+    }
+    return nrow * row_size;
+}
+
+static void quantize_row_q5_1_impl(const float * restrict x, block_q5_1 * restrict y, int64_t n_per_row, const float * quant_weights) {
+    static_assert(QK5_1 == 32, "QK5_1 must be 32");
+
+    if (!quant_weights) {
+        quantize_row_q5_1_reference(x, y, n_per_row);
+        return;
+    }
+
+    float weight[QK5_1];
+    uint8_t L[QK5_1], Laux[QK5_1];
+
+    float sum_x2 = 0;
+    for (int j = 0; j < n_per_row; ++j) sum_x2 += x[j]*x[j];
+    float sigma2 = sum_x2/n_per_row;
+
+    const int64_t nb = n_per_row/QK5_1;
+    for (int ib = 0; ib < nb; ++ib) {
+        const float * xb = x + QK5_1 * ib;
+        const float * qw = quant_weights + QK5_1 * ib;
+        for (int j = 0; j < QK5_1; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]);
+        float min;
+        float d = make_qkx3_quants(QK5_1, 31, xb, weight, L, &min, Laux, -0.9f, 0.05f, 36, false);
+        y[ib].d = GGML_FP32_TO_FP16(d);
+        y[ib].m = GGML_FP32_TO_FP16(-min);
+
+        uint32_t qh = 0;
+        for (int j = 0; j < 16; ++j) {
+            const uint8_t xi0 = L[j];
+            const uint8_t xi1 = L[j+16];
+            y[ib].qs[j] = (xi0 & 0x0F) | ((xi1 & 0x0F) << 4);
+            // get the 5-th bit and store it in qh at the right position
+            qh |= ((xi0 & 0x10u) >> 4) << (j + 0);
+            qh |= ((xi1 & 0x10u) >> 4) << (j + QK5_0/2);
+        }
+        memcpy(&y[ib].qh, &qh, sizeof(qh));
+    }
+}
+
+size_t quantize_q5_1(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    if (!quant_weights) {
+        quantize_row_q5_1_reference(src, dst, (int64_t)nrow*n_per_row);
+        return nrow * ggml_row_size(GGML_TYPE_Q5_1, n_per_row);
+    }
+    size_t row_size = ggml_row_size(GGML_TYPE_Q5_1, n_per_row);
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_q5_1_impl(src, (block_q5_1*)qrow, n_per_row, quant_weights);
+        src += n_per_row;
+        qrow += row_size;
+    }
+    return nrow * row_size;
+}
+
+size_t quantize_q8_0(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    (void)quant_weights; // not used
+    const size_t row_size = ggml_row_size(GGML_TYPE_Q8_0, n_per_row);
+    quantize_row_q8_0_reference(src, dst, (int64_t)nrow*n_per_row);
+    return nrow * row_size;
+}
+
+// ====================== "True" 2-bit (de)-quantization
+
+void dequantize_row_iq2_xxs(const block_iq2_xxs * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    uint32_t aux32[2];
+    const uint8_t * aux8 = (const uint8_t *)aux32;
+
+    for (int i = 0; i < nb; i++) {
+
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+
+        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
+            memcpy(aux32, x[i].qs + 4*ib32, 2*sizeof(uint32_t));
+            const float db = d * (0.5f + (aux32[1] >> 28)) * 0.25f;
+            for (int l = 0; l < 4; ++l) {
+                const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]);
+                const uint8_t  signs = ksigns_iq2xs[(aux32[1] >> 7*l) & 127];
+                for (int j = 0; j < 8; ++j) {
+                    y[j] = db * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
+                }
+                y += 8;
+            }
+        }
+    }
+}
+
+// ====================== 2.3125 bpw (de)-quantization
+
+void dequantize_row_iq2_xs(const block_iq2_xs * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    float db[2];
+
+    for (int i = 0; i < nb; i++) {
+
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+
+        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
+            db[0] = d * (0.5f + (x[i].scales[ib32] & 0xf)) * 0.25f;
+            db[1] = d * (0.5f + (x[i].scales[ib32] >>  4)) * 0.25f;
+            for (int l = 0; l < 4; ++l) {
+                const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (x[i].qs[4*ib32 + l] & 511));
+                const uint8_t  signs = ksigns_iq2xs[x[i].qs[4*ib32 + l] >> 9];
+                for (int j = 0; j < 8; ++j) {
+                    y[j] = db[l/2] * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
+                }
+                y += 8;
+            }
+        }
+    }
+}
+
+// ====================== 2.5625 bpw (de)-quantization
+
+void dequantize_row_iq2_s(const block_iq2_s * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    float db[2];
+
+    for (int i = 0; i < nb; i++) {
+
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+        const uint8_t * qs = x[i].qs;
+        const uint8_t * qh = x[i].qh;
+        const uint8_t * signs = qs + QK_K/8;
+
+        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
+            db[0] = d * (0.5f + (x[i].scales[ib32] & 0xf)) * 0.25f;
+            db[1] = d * (0.5f + (x[i].scales[ib32] >>  4)) * 0.25f;
+            for (int l = 0; l < 4; ++l) {
+                const float dl = db[l/2];
+                const uint8_t * grid = (const uint8_t *)(iq2s_grid + (qs[l] | (qh[ib32] << (8-2*l) & 0x300)));
+                for (int j = 0; j < 8; ++j) {
+                    y[j] = dl * grid[j] * (signs[l] & kmask_iq2xs[j] ? -1.f : 1.f);
+                }
+                y += 8;
+            }
+            qs += 4;
+            signs += 4;
+        }
+    }
+}
+
+// ====================== 3.0625 bpw (de)-quantization
+
+void dequantize_row_iq3_xxs(const block_iq3_xxs * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    uint32_t aux32;
+
+    for (int i = 0; i < nb; i++) {
+
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+        const uint8_t * qs = x[i].qs;
+        const uint8_t * scales_and_signs = qs + QK_K/4;
+
+        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
+            memcpy(&aux32, scales_and_signs + 4*ib32, sizeof(uint32_t));
+            const float db = d * (0.5f + (aux32 >> 28)) * 0.5f;
+            for (int l = 0; l < 4; ++l) {
+                const uint8_t  signs = ksigns_iq2xs[(aux32 >> 7*l) & 127];
+                const uint8_t * grid1 = (const uint8_t *)(iq3xxs_grid + qs[2*l+0]);
+                const uint8_t * grid2 = (const uint8_t *)(iq3xxs_grid + qs[2*l+1]);
+                for (int j = 0; j < 4; ++j) {
+                    y[j+0] = db * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
+                    y[j+4] = db * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
+                }
+                y += 8;
+            }
+            qs += 8;
+        }
+    }
+}
+
+// ====================== 3.3125 bpw (de)-quantization
+
+void dequantize_row_iq3_s(const block_iq3_s * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    for (int i = 0; i < nb; i++) {
+
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+        const uint8_t * qs = x[i].qs;
+        const uint8_t * qh = x[i].qh;
+        const uint8_t * signs = x[i].signs;
+
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const float db1 = d * (1 + 2*(x[i].scales[ib32/2] & 0xf));
+            const float db2 = d * (1 + 2*(x[i].scales[ib32/2] >>  4));
+            for (int l = 0; l < 4; ++l) {
+                const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[0] << (8-2*l)) & 256)));
+                const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[0] << (7-2*l)) & 256)));
+                for (int j = 0; j < 4; ++j) {
+                    y[j+0] = db1 * grid1[j] * (signs[l] & kmask_iq2xs[j+0] ? -1.f : 1.f);
+                    y[j+4] = db1 * grid2[j] * (signs[l] & kmask_iq2xs[j+4] ? -1.f : 1.f);
+                }
+                y += 8;
+            }
+            qs += 8;
+            signs += 4;
+            for (int l = 0; l < 4; ++l) {
+                const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[1] << (8-2*l)) & 256)));
+                const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[1] << (7-2*l)) & 256)));
+                for (int j = 0; j < 4; ++j) {
+                    y[j+0] = db2 * grid1[j] * (signs[l] & kmask_iq2xs[j+0] ? -1.f : 1.f);
+                    y[j+4] = db2 * grid2[j] * (signs[l] & kmask_iq2xs[j+4] ? -1.f : 1.f);
+                }
+                y += 8;
+            }
+            qh += 2;
+            qs += 8;
+            signs += 4;
+        }
+    }
+}
+
+// ====================== 1.5625 bpw (de)-quantization
+
+void dequantize_row_iq1_s(const block_iq1_s * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    for (int i = 0; i < nb; i++) {
+
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+        const uint8_t  * qs = x[i].qs;
+        const uint16_t * qh = x[i].qh;
+
+        for (int ib = 0; ib < QK_K/32; ++ib) {
+            const float dl = d * (2*((qh[ib] >> 12) & 7) + 1);
+            const float delta = qh[ib] & 0x8000 ? -IQ1S_DELTA : IQ1S_DELTA;
+            for (int l = 0; l < 4; ++l) {
+                const int8_t * grid = (const int8_t *)(iq1s_grid + (qs[l] | (((qh[ib] >> 3*l) & 7) << 8)));
+                for (int j = 0; j < 8; ++j) {
+                    y[j] = dl * (grid[j] + delta);
+                }
+                y += 8;
+            }
+            qs += 4;
+        }
+    }
+}
+
+void dequantize_row_iq1_m(const block_iq1_m * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    float delta[4];
+    uint16_t idx[4];
+
+    iq1m_scale_t scale;
+
+    for (int i = 0; i < nb; i++) {
+
+        const uint16_t * sc = (const uint16_t *)x[i].scales;
+        scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+        const float d = GGML_FP16_TO_FP32(scale.f16);
+
+        const uint8_t * qs = x[i].qs;
+        const uint8_t * qh = x[i].qh;
+
+        for (int ib = 0; ib < QK_K/32; ++ib) {
+            const float dl1 = d * (2*((sc[ib/2] >> (6*(ib%2)+0)) & 0x7) + 1);
+            const float dl2 = d * (2*((sc[ib/2] >> (6*(ib%2)+3)) & 0x7) + 1);
+
+            idx[0] = qs[0] | ((qh[0] << 8) & 0x700);
+            idx[1] = qs[1] | ((qh[0] << 4) & 0x700);
+            idx[2] = qs[2] | ((qh[1] << 8) & 0x700);
+            idx[3] = qs[3] | ((qh[1] << 4) & 0x700);
+            delta[0] = qh[0] & 0x08 ? -IQ1S_DELTA : IQ1S_DELTA;
+            delta[1] = qh[0] & 0x80 ? -IQ1S_DELTA : IQ1S_DELTA;
+            delta[2] = qh[1] & 0x08 ? -IQ1S_DELTA : IQ1S_DELTA;
+            delta[3] = qh[1] & 0x80 ? -IQ1S_DELTA : IQ1S_DELTA;
+            for (int l = 0; l < 2; ++l) {
+                const int8_t * grid = (const int8_t *)(iq1s_grid + idx[l]);
+                for (int j = 0; j < 8; ++j) {
+                    y[j] = dl1 * (grid[j] + delta[l]);
+                }
+                y += 8;
+            }
+            for (int l = 2; l < 4; ++l) {
+                const int8_t * grid = (const int8_t *)(iq1s_grid + idx[l]);
+                for (int j = 0; j < 8; ++j) {
+                    y[j] = dl2 * (grid[j] + delta[l]);
+                }
+                y += 8;
+            }
+            qs += 4;
+            qh += 2;
+        }
+    }
+}
+
+static const int8_t kvalues_iq4nl[16] = {-127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113};
+
+void dequantize_row_iq4_nl(const block_iq4_nl * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK4_NL == 0);
+    const int64_t nb = k / QK4_NL;
+
+    for (int i = 0; i < nb; i++) {
+
+        const uint8_t * qs = x[i].qs;
+
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+        for (int j = 0; j < QK4_NL/2; ++j) {
+            y[j+       0] = d * kvalues_iq4nl[qs[j] & 0xf];
+            y[j+QK4_NL/2] = d * kvalues_iq4nl[qs[j] >>  4];
+        }
+        y  += QK4_NL;
+        qs += QK4_NL/2;
+    }
+}
+
+void dequantize_row_iq4_xs(const block_iq4_xs * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    for (int i = 0; i < nb; i++) {
+
+        const uint8_t * qs = x[i].qs;
+
+        const float d = GGML_FP16_TO_FP32(x[i].d);
+
+        for (int ib = 0; ib < QK_K/32; ++ib) {
+            const int ls = ((x[i].scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((x[i].scales_h >> 2*ib) & 3) << 4);
+            const float dl = d * (ls - 32);
+            for (int j = 0; j < 16; ++j) {
+                y[j+ 0] = dl * kvalues_iq4nl[qs[j] & 0xf];
+                y[j+16] = dl * kvalues_iq4nl[qs[j] >>  4];
+            }
+            y  += 32;
+            qs += 16;
+        }
+    }
+}
+
+//===================================== Q8_K ==============================================
+
+void quantize_row_q8_K_reference(const float * restrict x, block_q8_K * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    for (int i = 0; i < nb; i++) {
+
+        float max = 0;
+        float amax = 0;
+        for (int j = 0; j < QK_K; ++j) {
+            float ax = fabsf(x[j]);
+            if (ax > amax) {
+                amax = ax; max = x[j];
+            }
+        }
+        if (!amax) {
+            y[i].d = 0;
+            memset(y[i].qs, 0, QK_K);
+            x += QK_K;
+            continue;
+        }
+        //const float iscale = -128.f/max;
+        // We need this change for IQ2_XXS, else the AVX implementation becomes very awkward
+        const float iscale = -127.f/max;
+        for (int j = 0; j < QK_K; ++j) {
+            int v = nearest_int(iscale*x[j]);
+            y[i].qs[j] = MIN(127, v);
+        }
+        for (int j = 0; j < QK_K/16; ++j) {
+            int sum = 0;
+            for (int ii = 0; ii < 16; ++ii) {
+                sum += y[i].qs[j*16 + ii];
+            }
+            y[i].bsums[j] = sum;
+        }
+        y[i].d = 1/iscale;
+        x += QK_K;
+    }
+}
+
+void dequantize_row_q8_K(const block_q8_K * restrict x, float * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    const int64_t nb = k / QK_K;
+
+    for (int i = 0; i < nb; i++) {
+        for (int j = 0; j < QK_K; ++j) {
+            *y++ = x[i].d * x[i].qs[j];
+        }
+    }
+}
+
+void quantize_row_q8_K(const float * restrict x, void * restrict y, int64_t k) {
+    quantize_row_q8_K_reference(x, y, k);
+}
+
+//===================================== Dot ptoducts =================================
+
+//
+// Helper functions
+//
+#if __AVX__ || __AVX2__ || __AVX512F__
+
+// shuffles to pick the required scales in dot products
+static inline __m256i get_scale_shuffle_q3k(int i) {
+    static const uint8_t k_shuffle[128] = {
+         0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,     2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+         4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5,     6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7,
+         8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,    10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,
+        12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,    14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,
+    };
+    return _mm256_loadu_si256((const __m256i*)k_shuffle + i);
+}
+static inline __m256i get_scale_shuffle_k4(int i) {
+    static const uint8_t k_shuffle[256] = {
+         0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
+         2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+         4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5,
+         6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7,
+         8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
+        10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,
+        12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,
+        14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15
+    };
+    return _mm256_loadu_si256((const __m256i*)k_shuffle + i);
+}
+static inline __m128i get_scale_shuffle(int i) {
+    static const uint8_t k_shuffle[128] = {
+         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+         2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+         4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
+         6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+         8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
+        10,10,10,10,10,10,10,10, 11,11,11,11,11,11,11,11,
+        12,12,12,12,12,12,12,12, 13,13,13,13,13,13,13,13,
+        14,14,14,14,14,14,14,14, 15,15,15,15,15,15,15,15
+    };
+    return _mm_loadu_si128((const __m128i*)k_shuffle + i);
+}
+#elif defined(__loongarch_asx)
+// shuffles to pick the required scales in dot products
+static inline __m256i get_scale_shuffle_q3k(int i) {
+    static const uint8_t k_shuffle[128] = {
+         0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,     2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+         4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5,     6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7,
+         8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,    10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,
+        12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,    14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,
+    };
+    return __lasx_xvld((const __m256i*)k_shuffle + i, 0);
+}
+static inline __m256i get_scale_shuffle_k4(int i) {
+    static const uint8_t k_shuffle[256] = {
+         0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
+         2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
+         4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5,
+         6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7,
+         8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9,
+        10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,
+        12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,
+        14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14,15
+    };
+    return __lasx_xvld((const __m256i*)k_shuffle + i, 0);
+}
+static inline __m128i get_scale_shuffle(int i) {
+    static const uint8_t k_shuffle[128] = {
+         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
+         2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+         4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
+         6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7,
+         8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
+        10,10,10,10,10,10,10,10, 11,11,11,11,11,11,11,11,
+        12,12,12,12,12,12,12,12, 13,13,13,13,13,13,13,13,
+        14,14,14,14,14,14,14,14, 15,15,15,15,15,15,15,15
+    };
+    return __lsx_vld((const __m128i*)k_shuffle + i, 0);
+}
+#endif
+
+void ggml_vec_dot_q4_0_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    const int qk = QK8_0;
+    const int nb = n / qk;
+
+    assert(n % qk == 0);
+#if defined(__ARM_FEATURE_MATMUL_INT8)
+    assert((nrc == 2) || (nrc == 1));
+#else
+    assert(nrc == 1);
+#endif
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_q4_0 * restrict x = vx;
+    const block_q8_0 * restrict y = vy;
+
+#if defined(__ARM_FEATURE_MATMUL_INT8)
+    if (nrc == 2) {
+        const block_q4_0 * restrict vx0 = vx;
+        const block_q4_0 * restrict vx1 = (const block_q4_0 *) ((const uint8_t*)vx + bx);
+        const block_q8_0 * restrict vy0 = vy;
+        const block_q8_0 * restrict vy1 = (const block_q8_0 *) ((const uint8_t*)vy + by);
+
+        float32x4_t sumv0 = vdupq_n_f32(0.0f);
+
+        for (int i = 0; i < nb; i++) {
+            const block_q4_0 * restrict b_x0 = &vx0[i];
+            const block_q4_0 * restrict b_x1 = &vx1[i];
+            const block_q8_0 * restrict b_y0 = &vy0[i];
+            const block_q8_0 * restrict b_y1 = &vy1[i];
+
+            const uint8x16_t m4b = vdupq_n_u8(0x0F);
+            const int8x16_t  s8b = vdupq_n_s8(0x8);
+
+            const uint8x16_t v0_0 = vld1q_u8(b_x0->qs);
+            const uint8x16_t v0_1 = vld1q_u8(b_x1->qs);
+
+            // 4-bit -> 8-bit
+            const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
+            const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
+            const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
+            const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
+
+            // sub 8
+            const int8x16_t x0_l = vsubq_s8(v0_0l, s8b);
+            const int8x16_t x0_h = vsubq_s8(v0_0h, s8b);
+            const int8x16_t x1_l = vsubq_s8(v0_1l, s8b);
+            const int8x16_t x1_h = vsubq_s8(v0_1h, s8b);
+
+            // load y
+            const int8x16_t y0_l = vld1q_s8(b_y0->qs);
+            const int8x16_t y0_h = vld1q_s8(b_y0->qs + 16);
+            const int8x16_t y1_l = vld1q_s8(b_y1->qs);
+            const int8x16_t y1_h = vld1q_s8(b_y1->qs + 16);
+
+            float32_t _scale[4] = { GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y0->d),
+                                    GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y1->d),
+                                    GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y0->d),
+                                    GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y1->d)};
+
+            float32x4_t scale = vld1q_f32(_scale);
+
+            int8x16_t l0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
+            int8x16_t l1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
+
+            int8x16_t l2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
+            int8x16_t l3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
+
+            int8x16_t r0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
+            int8x16_t r1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
+
+            int8x16_t r2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
+            int8x16_t r3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
+
+            sumv0 = vmlaq_f32(sumv0,(vcvtq_f32_s32(vmmlaq_s32((vmmlaq_s32((vmmlaq_s32((vmmlaq_s32(vdupq_n_s32(0), l0, r0)),
+                                                                                l1, r1)), l2, r2)), l3, r3))), scale);
+        }
+        float32x4_t sumv1 = vextq_f32(sumv0, sumv0, 2);
+        float32x4_t sumv2 = vzip1q_f32(sumv0, sumv1);
+
+        vst1_f32(s, vget_low_f32(sumv2));
+        vst1_f32(s + bs, vget_high_f32(sumv2));
+        return;
+    }
+#endif
+#if defined(__ARM_FEATURE_SVE)
+    const svbool_t ptrueh = svptrue_pat_b8(SV_VL16);
+    const svbool_t ptruel = svnot_b_z(svptrue_b8(), ptrueh);
+
+    svfloat32_t sumv0 = svdup_n_f32(0.0f);
+    svfloat32_t sumv1 = svdup_n_f32(0.0f);
+
+    assert(nb % 2 == 0); // TODO: handle odd nb
+
+    for (int i = 0; i < nb; i += 2) {
+        const block_q4_0 * restrict x0 = &x[i + 0];
+        const block_q4_0 * restrict x1 = &x[i + 1];
+        const block_q8_0 * restrict y0 = &y[i + 0];
+        const block_q8_0 * restrict y1 = &y[i + 1];
+
+        // load x
+        const svuint8_t qx0r = svld1rq_u8(svptrue_b8(), x0->qs);
+        const svuint8_t qx1r = svld1rq_u8(svptrue_b8(), x1->qs);
+
+        // 4-bit -> 8-bit
+        const svint8_t qx0 = svreinterpret_s8_u8(svlsr_n_u8_m(ptruel, svand_n_u8_m(ptrueh, qx0r, 0x0F), 0x04));
+        const svint8_t qx1 = svreinterpret_s8_u8(svlsr_n_u8_m(ptruel, svand_n_u8_m(ptrueh, qx1r, 0x0F), 0x04));
+
+        // sub 8
+        const svint8_t qx0s = svsub_n_s8_x(svptrue_b8(), qx0, 8);
+        const svint8_t qx1s = svsub_n_s8_x(svptrue_b8(), qx1, 8);
+
+        // load y
+        const svint8_t qy0 = svld1_s8(svptrue_b8(), y0->qs);
+        const svint8_t qy1 = svld1_s8(svptrue_b8(), y1->qs);
+
+        // dot product
+        sumv0 = svmla_n_f32_x(svptrue_b32(), sumv0, svcvt_f32_s32_x(svptrue_b32(), svdot_s32(svdup_n_s32(0), qx0s, qy0)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
+        sumv1 = svmla_n_f32_x(svptrue_b32(), sumv1, svcvt_f32_s32_x(svptrue_b32(), svdot_s32(svdup_n_s32(0), qx1s, qy1)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
+    }
+
+    *s = svaddv_f32(svptrue_b32(), svadd_f32_x(svptrue_b32(), sumv0, sumv1));
+#elif defined(__ARM_NEON)
+    float32x4_t sumv0 = vdupq_n_f32(0.0f);
+    float32x4_t sumv1 = vdupq_n_f32(0.0f);
+
+    assert(nb % 2 == 0); // TODO: handle odd nb
+
+    for (int i = 0; i < nb; i += 2) {
+        const block_q4_0 * restrict x0 = &x[i + 0];
+        const block_q4_0 * restrict x1 = &x[i + 1];
+        const block_q8_0 * restrict y0 = &y[i + 0];
+        const block_q8_0 * restrict y1 = &y[i + 1];
+
+        const uint8x16_t m4b = vdupq_n_u8(0x0F);
+        const int8x16_t  s8b = vdupq_n_s8(0x8);
+
+        const uint8x16_t v0_0 = vld1q_u8(x0->qs);
+        const uint8x16_t v0_1 = vld1q_u8(x1->qs);
+
+        // 4-bit -> 8-bit
+        const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
+        const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
+        const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
+        const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
+
+        // sub 8
+        const int8x16_t v0_0ls = vsubq_s8(v0_0l, s8b);
+        const int8x16_t v0_0hs = vsubq_s8(v0_0h, s8b);
+        const int8x16_t v0_1ls = vsubq_s8(v0_1l, s8b);
+        const int8x16_t v0_1hs = vsubq_s8(v0_1h, s8b);
+
+        // load y
+        const int8x16_t v1_0l = vld1q_s8(y0->qs);
+        const int8x16_t v1_0h = vld1q_s8(y0->qs + 16);
+        const int8x16_t v1_1l = vld1q_s8(y1->qs);
+        const int8x16_t v1_1h = vld1q_s8(y1->qs + 16);
+
+        // dot product into int32x4_t
+        const int32x4_t p_0 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_0ls, v1_0l), v0_0hs, v1_0h);
+        const int32x4_t p_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_1ls, v1_1l), v0_1hs, v1_1h);
+
+        sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
+        sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
+    }
+
+    *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1);
+#elif defined(__AVX2__)
+    // Initialize accumulator with zeros
+    __m256 acc = _mm256_setzero_ps();
+
+    // Main loop
+    for (int i = 0; i < nb; ++i) {
+        /* Compute combined scale for the block */
+        const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) );
+
+        __m256i qx = bytes_from_nibbles_32(x[i].qs);
+
+        // Now we have a vector with bytes in [ 0 .. 15 ] interval. Offset them into [ -8 .. +7 ] interval.
+        const __m256i off = _mm256_set1_epi8( 8 );
+        qx = _mm256_sub_epi8( qx, off );
+
+        __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs);
+
+        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
+
+        /* Multiply q with scale and accumulate */
+        acc = _mm256_fmadd_ps( d, q, acc );
+    }
+
+    *s = hsum_float_8(acc);
+#elif defined(__AVX__)
+    // Initialize accumulator with zeros
+    __m256 acc = _mm256_setzero_ps();
+
+    // Main loop
+    for (int i = 0; i < nb; ++i) {
+        // Compute combined scale for the block
+        const __m256 d = _mm256_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) );
+
+        const __m128i lowMask = _mm_set1_epi8(0xF);
+        const __m128i off = _mm_set1_epi8(8);
+
+        const __m128i tmp = _mm_loadu_si128((const __m128i *)x[i].qs);
+
+        __m128i bx_0 = _mm_and_si128(lowMask, tmp);
+        __m128i by_0 = _mm_loadu_si128((const __m128i *)y[i].qs);
+        bx_0 = _mm_sub_epi8(bx_0, off);
+        const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0);
+
+        bx_0 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp, 4));
+        by_0 = _mm_loadu_si128((const __m128i *)(y[i].qs + 16));
+        bx_0 = _mm_sub_epi8(bx_0, off);
+        const __m128i i32_1 = mul_sum_i8_pairs(bx_0, by_0);
+
+        // Convert int32_t to float
+        __m256 p = _mm256_cvtepi32_ps(MM256_SET_M128I(i32_0, i32_1));
+
+        // Apply the scale, and accumulate
+        acc = _mm256_add_ps(_mm256_mul_ps( d, p ), acc);
+    }
+
+    *s = hsum_float_8(acc);
+#elif defined(__SSSE3__)
+    // set constants
+    const __m128i lowMask = _mm_set1_epi8(0xF);
+    const __m128i off = _mm_set1_epi8(8);
+
+    // Initialize accumulator with zeros
+    __m128 acc_0 = _mm_setzero_ps();
+    __m128 acc_1 = _mm_setzero_ps();
+    __m128 acc_2 = _mm_setzero_ps();
+    __m128 acc_3 = _mm_setzero_ps();
+
+    // First round without accumulation
+    {
+        _mm_prefetch(&x[0] + sizeof(block_q4_0), _MM_HINT_T0);
+        _mm_prefetch(&y[0] + sizeof(block_q8_0), _MM_HINT_T0);
+
+        // Compute combined scale for the block 0 and 1
+        const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[0].d) * GGML_FP16_TO_FP32(y[0].d) );
+
+        const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[0].qs);
+
+        __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1);
+        __m128i by_0 = _mm_loadu_si128((const __m128i *)y[0].qs);
+        bx_0 = _mm_sub_epi8(bx_0, off);
+        const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0);
+
+        __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4));
+        __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[0].qs + 16));
+        bx_1 = _mm_sub_epi8(bx_1, off);
+        const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1);
+
+        _mm_prefetch(&x[1] + sizeof(block_q4_0), _MM_HINT_T0);
+        _mm_prefetch(&y[1] + sizeof(block_q8_0), _MM_HINT_T0);
+
+        // Compute combined scale for the block 2 and 3
+        const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[1].d) * GGML_FP16_TO_FP32(y[1].d) );
+
+        const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[1].qs);
+
+        __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3);
+        __m128i by_2 = _mm_loadu_si128((const __m128i *)y[1].qs);
+        bx_2 = _mm_sub_epi8(bx_2, off);
+        const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2);
+
+        __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4));
+        __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[1].qs + 16));
+        bx_3 = _mm_sub_epi8(bx_3, off);
+        const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3);
+
+        // Convert int32_t to float
+        __m128 p0 = _mm_cvtepi32_ps(i32_0);
+        __m128 p1 = _mm_cvtepi32_ps(i32_1);
+        __m128 p2 = _mm_cvtepi32_ps(i32_2);
+        __m128 p3 = _mm_cvtepi32_ps(i32_3);
+
+        // Apply the scale
+        acc_0 = _mm_mul_ps( d_0_1, p0 );
+        acc_1 = _mm_mul_ps( d_0_1, p1 );
+        acc_2 = _mm_mul_ps( d_2_3, p2 );
+        acc_3 = _mm_mul_ps( d_2_3, p3 );
+    }
+
+    assert(nb % 2 == 0); // TODO: handle odd nb
+
+    // Main loop
+    for (int i = 2; i < nb; i+=2) {
+        _mm_prefetch(&x[i] + sizeof(block_q4_0), _MM_HINT_T0);
+        _mm_prefetch(&y[i] + sizeof(block_q8_0), _MM_HINT_T0);
+
+        // Compute combined scale for the block 0 and 1
+        const __m128 d_0_1 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) );
+
+        const __m128i tmp_0_1 = _mm_loadu_si128((const __m128i *)x[i].qs);
+
+        __m128i bx_0 = _mm_and_si128(lowMask, tmp_0_1);
+        __m128i by_0 = _mm_loadu_si128((const __m128i *)y[i].qs);
+        bx_0 = _mm_sub_epi8(bx_0, off);
+        const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0);
+
+        __m128i bx_1 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_0_1, 4));
+        __m128i by_1 = _mm_loadu_si128((const __m128i *)(y[i].qs + 16));
+        bx_1 = _mm_sub_epi8(bx_1, off);
+        const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1);
+
+        _mm_prefetch(&x[i] + 2 * sizeof(block_q4_0), _MM_HINT_T0);
+        _mm_prefetch(&y[i] + 2 * sizeof(block_q8_0), _MM_HINT_T0);
+
+        // Compute combined scale for the block 2 and 3
+        const __m128 d_2_3 = _mm_set1_ps( GGML_FP16_TO_FP32(x[i + 1].d) * GGML_FP16_TO_FP32(y[i + 1].d) );
+
+        const __m128i tmp_2_3 = _mm_loadu_si128((const __m128i *)x[i + 1].qs);
+
+        __m128i bx_2 = _mm_and_si128(lowMask, tmp_2_3);
+        __m128i by_2 = _mm_loadu_si128((const __m128i *)y[i + 1].qs);
+        bx_2 = _mm_sub_epi8(bx_2, off);
+        const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2);
+
+        __m128i bx_3 = _mm_and_si128(lowMask, _mm_srli_epi64(tmp_2_3, 4));
+        __m128i by_3 = _mm_loadu_si128((const __m128i *)(y[i + 1].qs + 16));
+        bx_3 = _mm_sub_epi8(bx_3, off);
+        const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3);
+
+        // Convert int32_t to float
+        __m128 p0 = _mm_cvtepi32_ps(i32_0);
+        __m128 p1 = _mm_cvtepi32_ps(i32_1);
+        __m128 p2 = _mm_cvtepi32_ps(i32_2);
+        __m128 p3 = _mm_cvtepi32_ps(i32_3);
+
+        // Apply the scale
+        __m128 p0_d = _mm_mul_ps( d_0_1, p0 );
+        __m128 p1_d = _mm_mul_ps( d_0_1, p1 );
+        __m128 p2_d = _mm_mul_ps( d_2_3, p2 );
+        __m128 p3_d = _mm_mul_ps( d_2_3, p3 );
+
+        // Acummulate
+        acc_0 = _mm_add_ps(p0_d, acc_0);
+        acc_1 = _mm_add_ps(p1_d, acc_1);
+        acc_2 = _mm_add_ps(p2_d, acc_2);
+        acc_3 = _mm_add_ps(p3_d, acc_3);
+    }
+
+    *s = hsum_float_4x4(acc_0, acc_1, acc_2, acc_3);
+#elif defined(__riscv_v_intrinsic)
+    float sumf = 0.0;
+
+    size_t vl = __riscv_vsetvl_e8m1(qk/2);
+
+    for (int i = 0; i < nb; i++) {
+        // load elements
+        vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl);
+
+        vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl);
+        vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl);
+
+        // mask and store lower part of x, and then upper part
+        vuint8mf2_t x_a = __riscv_vand_vx_u8mf2(tx, 0x0F, vl);
+        vuint8mf2_t x_l = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl);
+
+        vint8mf2_t x_ai = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a);
+        vint8mf2_t x_li = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l);
+
+        // subtract offset
+        vint8mf2_t v0 = __riscv_vsub_vx_i8mf2(x_ai, 8, vl);
+        vint8mf2_t v1 = __riscv_vsub_vx_i8mf2(x_li, 8, vl);
+
+        vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl);
+        vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl);
+
+        vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl);
+
+        vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl);
+        vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl);
+
+        int sumi = __riscv_vmv_x_s_i32m1_i32(vs2);
+
+        sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d);
+    }
+
+    *s = sumf;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0xF);
+    const vector signed int v0 = vec_splats((int32_t)0);
+    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
+    const vector signed char v8 = vec_splats((signed char)0x8);
+
+    vector float vsumf0 = vec_splats(0.0f);
+
+#pragma GCC unroll 8
+    for (int i = 0; i < nb; i++) {
+        __builtin_prefetch(x[i].qs, 0, 1);
+        __builtin_prefetch(y[i].qs, 0, 1);
+
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[i].d));
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed char qxs = (vector signed char)vec_xl( 0, x[i].qs);
+        vector signed char q8y0 = vec_xl( 0, y[i].qs);
+        vector signed char q8y1 = vec_xl(16, y[i].qs);
+
+        vector signed char q4x0 = vec_and(qxs, lowMask);
+        vector signed char q4x1 = vec_sr(qxs, v4);
+
+        q4x0 = vec_sub(q4x0, v8);
+        q4x1 = vec_sub(q4x1, v8);
+
+        vector signed short qv0 = vec_add(vec_mule(q4x0, q8y0), vec_mulo(q4x0, q8y0));
+        vector signed short qv1 = vec_add(vec_mule(q4x1, q8y1), vec_mulo(q4x1, q8y1));
+
+        vector signed int vsumi0 = v0;
+
+        vsumi0 = vec_sum4s(qv0, vsumi0);
+        vsumi0 = vec_sum4s(qv1, vsumi0);
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+    }
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+    // Initialize accumulator with zeros
+    __m256 acc = (__m256)__lasx_xvldi(0);
+
+    // Main loop
+    for (int i = 0; i < nb; ++i) {
+        /* Compute combined scale for the block */
+        const __m256 d = __lasx_xvreplfr2vr_s( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) );
+
+        __m256i qx = bytes_from_nibbles_32(x[i].qs);
+
+        // Now we have a vector with bytes in [ 0 .. 15 ] interval. Offset them into [ -8 .. +7 ] interval.
+        const __m256i off = __lasx_xvreplgr2vr_b( 8 );
+        qx = __lasx_xvsub_b( qx, off );
+
+        __m256i qy = __lasx_xvld((const __m256i *)y[i].qs, 0);
+
+        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
+
+        /* Multiply q with scale and accumulate */
+        acc = __lasx_xvfmadd_s( d, q, acc );
+    }
+
+    *s = hsum_float_8(acc);
+#elif defined(__loongarch_sx)
+    // set constants
+    const __m128i low_mask = __lsx_vreplgr2vr_b(0xF);
+    const __m128i off = __lsx_vreplgr2vr_b(8);
+
+    // Initialize accumulator with zeros
+    __m128 acc_0 = __lsx_vldi(0);
+    __m128 acc_1 = __lsx_vldi(0);
+    __m128 acc_2 = __lsx_vldi(0);
+    __m128 acc_3 = __lsx_vldi(0);
+
+    // First round without accumulation
+    {
+        _mm_prefetch(&x[0] + sizeof(block_q4_0), _MM_HINT_T0);
+        _mm_prefetch(&y[0] + sizeof(block_q8_0), _MM_HINT_T0);
+
+        // Compute combined scale for the block 0 and 1
+        const __m128 d_0_1 = __lsx_vreplgr2vr_w( GGML_FP16_TO_FP32(x[0].d) * GGML_FP16_TO_FP32(y[0].d) );
+
+        const __m128i tmp_0_1 = __lsx_vld((const __m128i *)x[0].qs, 0);
+
+        __m128i bx_0 = __lsx_vand_v(low_mask, tmp_0_1);
+        __m128i by_0 = __lsx_vld((const __m128i *)y[0].qs, 0);
+        bx_0 = __lsx_vsub_b(bx_0, off);
+        const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0);
+
+        __m128i bx_1 = __lsx_vand_v(low_mask, __lsx_vsrli_d(tmp_0_1, 4));
+        __m128i by_1 = __lsx_vld((const __m128i *)(y[0].qs + 16), 0);
+        bx_1 = __lsx_vsub_b(bx_1, off);
+        const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1);
+
+        // Compute combined scale for the block 2 and 3
+        const __m128 d_2_3 = __lsx_vreplgr2vr_w( GGML_FP16_TO_FP32(x[1].d) * GGML_FP16_TO_FP32(y[1].d) );
+
+        const __m128i tmp_2_3 = __lsx_vld((const __m128i *)x[1].qs, 0);
+
+        __m128i bx_2 = __lsx_vand_v(low_mask, tmp_2_3);
+        __m128i by_2 = __lsx_vld((const __m128i *)y[1].qs, 0);
+        bx_2 = __lsx_vsub_b(bx_2, off);
+        const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2);
+
+        __m128i bx_3 = __lsx_vand_v(low_mask, __lsx_vsrli_d(tmp_2_3, 4));
+        __m128i by_3 = __lsx_vld((const __m128i *)(y[1].qs + 16), 0);
+        bx_3 = __lsx_vsub_b(bx_3, off);
+        const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3);
+
+        // Convert int32_t to float
+        __m128 p0 = __lsx_vffint_s_w(i32_0);
+        __m128 p1 = __lsx_vffint_s_w(i32_1);
+        __m128 p2 = __lsx_vffint_s_w(i32_2);
+        __m128 p3 = __lsx_vffint_s_w(i32_3);
+
+        // Apply the scale
+        acc_0 = __lsx_vfmul_s( d_0_1, p0 );
+        acc_1 = __lsx_vfmul_s( d_0_1, p1 );
+        acc_2 = __lsx_vfmul_s( d_2_3, p2 );
+        acc_3 = __lsx_vfmul_s( d_2_3, p3 );
+    }
+
+    assert(nb % 2 == 0); // TODO: handle odd nb
+
+    // Main loop
+    for (int i = 2; i < nb; i+=2) {
+
+        // Compute combined scale for the block 0 and 1
+        const __m128 d_0_1 = __lsx_vreplgr2vr_w( GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d) );
+
+        const __m128i tmp_0_1 = __lsx_vld((const __m128i *)x[i].qs, 0);
+
+        __m128i bx_0 = __lsx_vand_v(low_mask, tmp_0_1);
+        __m128i by_0 = __lsx_vld((const __m128i *)y[i].qs, 0);
+        bx_0 = __lsx_vsub_b(bx_0, off);
+        const __m128i i32_0 = mul_sum_i8_pairs(bx_0, by_0);
+
+        __m128i bx_1 = __lsx_vand_v(low_mask, __lsx_vsrli_d(tmp_0_1, 4));
+        __m128i by_1 = __lsx_vld((const __m128i *)(y[i].qs + 16), 0);
+        bx_1 = __lsx_vsub_b(bx_1, off);
+        const __m128i i32_1 = mul_sum_i8_pairs(bx_1, by_1);
+
+        //_mm_prefetch(&x[i] + 2 * sizeof(block_q4_0), _MM_HINT_T0);
+        //_mm_prefetch(&y[i] + 2 * sizeof(block_q8_0), _MM_HINT_T0);
+
+        // Compute combined scale for the block 2 and 3
+        const __m128 d_2_3 = __lsx_vreplgr2vr_w( GGML_FP16_TO_FP32(x[i + 1].d) * GGML_FP16_TO_FP32(y[i + 1].d) );
+
+        const __m128i tmp_2_3 = __lsx_vld((const __m128i *)x[i + 1].qs, 0);
+
+        __m128i bx_2 = __lsx_vand_v(low_mask, tmp_2_3);
+        __m128i by_2 = __lsx_vld((const __m128i *)y[i + 1].qs, 0);
+        bx_2 = __lsx_vsub_b(bx_2, off);
+        const __m128i i32_2 = mul_sum_i8_pairs(bx_2, by_2);
+
+        __m128i bx_3 = __lsx_vand_v(low_mask, __lsx_vsrli_d(tmp_2_3, 4));
+        __m128i by_3 = __lsx_vld((const __m128i *)(y[i + 1].qs + 16), 0);
+        bx_3 = __lsx_vsub_b(bx_3, off);
+        const __m128i i32_3 = mul_sum_i8_pairs(bx_3, by_3);
+
+        // Convert int32_t to float
+        __m128 p0 = __lsx_vffint_s_w(i32_0);
+        __m128 p1 = __lsx_vffint_s_w(i32_1);
+        __m128 p2 = __lsx_vffint_s_w(i32_2);
+        __m128 p3 = __lsx_vffint_s_w(i32_3);
+
+        // Apply the scale
+        __m128 p0_d = __lsx_vfmul_s( d_0_1, p0 );
+        __m128 p1_d = __lsx_vfmul_s( d_0_1, p1 );
+        __m128 p2_d = __lsx_vfmul_s( d_2_3, p2 );
+        __m128 p3_d = __lsx_vfmul_s( d_2_3, p3 );
+
+        // Acummulate
+        acc_0 = __lsx_vfadd_s(p0_d, acc_0);
+        acc_1 = __lsx_vfadd_s(p1_d, acc_1);
+        acc_2 = __lsx_vfadd_s(p2_d, acc_2);
+        acc_3 = __lsx_vfadd_s(p3_d, acc_3);
+    }
+
+    *s = hsum_float_4x4(acc_0, acc_1, acc_2, acc_3);
+
+#else
+    // scalar
+    float sumf = 0.0;
+
+    for (int i = 0; i < nb; i++) {
+        int sumi = 0;
+
+        for (int j = 0; j < qk/2; ++j) {
+            const int v0 = (x[i].qs[j] & 0x0F) - 8;
+            const int v1 = (x[i].qs[j] >>   4) - 8;
+
+            sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]);
+        }
+
+        sumf += sumi*GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d);
+    }
+
+    *s = sumf;
+#endif
+}
+
+void ggml_vec_dot_q4_1_q8_1(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    const int qk = QK8_1;
+    const int nb = n / qk;
+
+    assert(n % qk == 0);
+#if defined(__ARM_FEATURE_MATMUL_INT8)
+    assert((nrc == 2) || (nrc == 1));
+#else
+    assert(nrc == 1);
+#endif
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_q4_1 * restrict x = vx;
+    const block_q8_1 * restrict y = vy;
+
+#if defined(__ARM_FEATURE_MATMUL_INT8)
+    if (nrc == 2) {
+        const block_q4_1 * restrict vx0 = vx;
+        const block_q4_1 * restrict vx1 = (const block_q4_1 *) ((const uint8_t*)vx + bx);
+        const block_q8_1 * restrict vy0 = vy;
+        const block_q8_1 * restrict vy1 = (const block_q8_1 *) ((const uint8_t*)vy + by);
+
+        float32x4_t sumv0 = vdupq_n_f32(0.0f);
+        float32x4_t summs0 = vdupq_n_f32(0.0f);
+
+        for (int i = 0; i < nb; i++) {
+            const block_q4_1 * restrict b_x0 = &vx0[i];
+            const block_q4_1 * restrict b_x1 = &vx1[i];
+            const block_q8_1 * restrict b_y0 = &vy0[i];
+            const block_q8_1 * restrict b_y1 = &vy1[i];
+
+            float32_t summs_t[4] = {GGML_FP16_TO_FP32(b_x0->m) * GGML_FP16_TO_FP32(b_y0->s),
+                                    GGML_FP16_TO_FP32(b_x1->m) * GGML_FP16_TO_FP32(b_y0->s),
+                                    GGML_FP16_TO_FP32(b_x0->m) * GGML_FP16_TO_FP32(b_y1->s),
+                                    GGML_FP16_TO_FP32(b_x1->m) * GGML_FP16_TO_FP32(b_y1->s)};
+            summs0 = vaddq_f32(summs0, vld1q_f32(summs_t));
+
+            const uint8x16_t m4b = vdupq_n_u8(0x0F);
+
+            const uint8x16_t v0_0 = vld1q_u8(b_x0->qs);
+            const uint8x16_t v0_1 = vld1q_u8(b_x1->qs);
+
+            // 4-bit -> 8-bit
+            const int8x16_t x0_l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
+            const int8x16_t x0_h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
+            const int8x16_t x1_l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
+            const int8x16_t x1_h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
+
+            // load y
+            const int8x16_t y0_l = vld1q_s8(b_y0->qs);
+            const int8x16_t y0_h = vld1q_s8(b_y0->qs + 16);
+            const int8x16_t y1_l = vld1q_s8(b_y1->qs);
+            const int8x16_t y1_h = vld1q_s8(b_y1->qs + 16);
+
+            // mmla into int32x4_t
+            float32_t _scale[4] = {GGML_FP16_TO_FP32(b_x0->d)*b_y0->d,
+                                   GGML_FP16_TO_FP32(b_x0->d)*b_y1->d,
+                                   GGML_FP16_TO_FP32(b_x1->d)*b_y0->d,
+                                   GGML_FP16_TO_FP32(b_x1->d)*b_y1->d};
+            float32x4_t scale = vld1q_f32(_scale);
+
+            int8x16_t l0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
+            int8x16_t l1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
+
+            int8x16_t l2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
+            int8x16_t l3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
+
+            int8x16_t r0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
+            int8x16_t r1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
+
+            int8x16_t r2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
+            int8x16_t r3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
+            sumv0 = vmlaq_f32(sumv0,(vcvtq_f32_s32(vmmlaq_s32((vmmlaq_s32((vmmlaq_s32((vmmlaq_s32(vdupq_n_s32(0), l0, r0)),
+                                                                                l1, r1)), l2, r2)), l3, r3))), scale);
+        }
+
+        float32x4_t sumv1 = vextq_f32(sumv0, sumv0, 2);
+        float32x4_t sumv2 = vzip1q_f32(sumv0, sumv1);
+        sumv2 = vaddq_f32(sumv2, summs0);
+
+        vst1_f32(s, vget_low_f32(sumv2));
+        vst1_f32(s + bs, vget_high_f32(sumv2));
+        return;
+    }
+#endif
+    // TODO: add WASM SIMD
+#if defined(__ARM_NEON)
+    float32x4_t sumv0 = vdupq_n_f32(0.0f);
+    float32x4_t sumv1 = vdupq_n_f32(0.0f);
+
+    float summs = 0;
+
+    assert(nb % 2 == 0); // TODO: handle odd nb
+
+    for (int i = 0; i < nb; i += 2) {
+        const block_q4_1 * restrict x0 = &x[i + 0];
+        const block_q4_1 * restrict x1 = &x[i + 1];
+        const block_q8_1 * restrict y0 = &y[i + 0];
+        const block_q8_1 * restrict y1 = &y[i + 1];
+
+        summs += GGML_FP16_TO_FP32(x0->m) * GGML_FP16_TO_FP32(y0->s) + GGML_FP16_TO_FP32(x1->m) * GGML_FP16_TO_FP32(y1->s);
+
+        const uint8x16_t m4b = vdupq_n_u8(0x0F);
+
+        const uint8x16_t v0_0 = vld1q_u8(x0->qs);
+        const uint8x16_t v0_1 = vld1q_u8(x1->qs);
+
+        // 4-bit -> 8-bit
+        const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
+        const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
+        const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
+        const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
+
+        // load y
+        const int8x16_t v1_0l = vld1q_s8(y0->qs);
+        const int8x16_t v1_0h = vld1q_s8(y0->qs + 16);
+        const int8x16_t v1_1l = vld1q_s8(y1->qs);
+        const int8x16_t v1_1h = vld1q_s8(y1->qs + 16);
+
+        // dot product into int32x4_t
+        const int32x4_t p_0 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_0l, v1_0l), v0_0h, v1_0h);
+        const int32x4_t p_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), v0_1l, v1_1l), v0_1h, v1_1h);
+
+        sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(p_0), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
+        sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(p_1), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
+    }
+
+    *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs;
+#elif defined(__AVX2__) || defined(__AVX__)
+    // Initialize accumulator with zeros
+    __m256 acc = _mm256_setzero_ps();
+
+    float summs = 0;
+
+    // Main loop
+    for (int i = 0; i < nb; ++i) {
+        const float d0 = GGML_FP16_TO_FP32(x[i].d);
+        const float d1 = GGML_FP16_TO_FP32(y[i].d);
+
+        summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s);
+
+        const __m256 d0v = _mm256_set1_ps( d0 );
+        const __m256 d1v = _mm256_set1_ps( d1 );
+
+        // Compute combined scales
+        const __m256 d0d1 = _mm256_mul_ps( d0v, d1v );
+
+        // Load 16 bytes, and unpack 4 bit fields into bytes, making 32 bytes
+        const __m256i qx = bytes_from_nibbles_32(x[i].qs);
+        const __m256i qy = _mm256_loadu_si256( (const __m256i *)y[i].qs );
+
+        const __m256 xy = mul_sum_us8_pairs_float(qx, qy);
+
+        // Accumulate d0*d1*x*y
+#if defined(__AVX2__)
+        acc = _mm256_fmadd_ps( d0d1, xy, acc );
+#else
+        acc = _mm256_add_ps( _mm256_mul_ps( d0d1, xy ), acc );
+#endif
+    }
+
+    *s = hsum_float_8(acc) + summs;
+#elif defined(__riscv_v_intrinsic)
+    float sumf = 0.0;
+
+    size_t vl = __riscv_vsetvl_e8m1(qk/2);
+
+    for (int i = 0; i < nb; i++) {
+        // load elements
+        vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl);
+
+        vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl);
+        vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl);
+
+        // mask and store lower part of x, and then upper part
+        vuint8mf2_t x_a = __riscv_vand_vx_u8mf2(tx, 0x0F, vl);
+        vuint8mf2_t x_l = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl);
+
+        vint8mf2_t v0 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a);
+        vint8mf2_t v1 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l);
+
+        vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl);
+        vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl);
+
+        vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl);
+
+        vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl);
+        vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl);
+
+        int sumi = __riscv_vmv_x_s_i32m1_i32(vs2);
+
+        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s);
+    }
+
+    *s = sumf;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0xF);
+    const vector signed int v0 = vec_splats((int32_t)0);
+    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
+
+    vector float vsumf0 = vec_splats(0.0f);
+
+#pragma GCC unroll 4
+    for (int i = 0; i < nb; i++) {
+        __builtin_prefetch(x[i].qs, 0, 1);
+        __builtin_prefetch(y[i].qs, 0, 1);
+
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[i].d));
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector float vxmin = vec_splats(GGML_FP16_TO_FP32(x[i].m));
+        vector float vys = {GGML_FP16_TO_FP32(y[i].s), 0.0f, 0.0f, 0.0f};
+        vsumf0 = vec_madd(vxmin, vys, vsumf0);
+
+        vector signed char qxs = (vector signed char)vec_xl( 0, x[i].qs);
+        vector signed char q8y0 = vec_xl( 0, y[i].qs);
+        vector signed char q8y1 = vec_xl(16, y[i].qs);
+
+        vector unsigned char q4x0 = (vector unsigned char)vec_and(qxs, lowMask);
+        vector unsigned char q4x1 = (vector unsigned char)vec_sr(qxs, v4);
+
+        vector signed int vsumi0 = v0;
+
+        vsumi0 = vec_msum(q8y0, q4x0, vsumi0);
+        vsumi0 = vec_msum(q8y1, q4x1, vsumi0);
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+    }
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+    // Initialize accumulator with zeros
+    __m256 acc = (__m256)__lasx_xvldi(0);
+
+    float summs = 0;
+
+    // Main loop
+    for (int i = 0; i < nb; ++i) {
+        const float d0 = GGML_FP16_TO_FP32(x[i].d);
+        const float d1 = GGML_FP16_TO_FP32(y[i].d);
+
+        summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s);
+
+        const __m256 d0v = __lasx_xvreplfr2vr_s( d0 );
+        const __m256 d1v = __lasx_xvreplfr2vr_s( d1 );
+
+        // Compute combined scales
+        const __m256 d0d1 = __lasx_xvfmul_s( d0v, d1v );
+
+        // Load 16 bytes, and unpack 4 bit fields into bytes, making 32 bytes
+        const __m256i qx = bytes_from_nibbles_32(x[i].qs);
+        const __m256i qy = __lasx_xvld( (const __m256i *)y[i].qs, 0);
+
+        const __m256 xy = mul_sum_us8_pairs_float(qx, qy);
+
+        // Accumulate d0*d1*x*y
+        acc = __lasx_xvfmadd_s( d0d1, xy, acc );
+    }
+
+    *s = hsum_float_8(acc) + summs;
+
+#else
+    // scalar
+    float sumf = 0.0;
+
+    for (int i = 0; i < nb; i++) {
+        int sumi = 0;
+
+        for (int j = 0; j < qk/2; ++j) {
+            const int v0 = (x[i].qs[j] & 0x0F);
+            const int v1 = (x[i].qs[j] >>   4);
+
+            sumi += (v0 * y[i].qs[j]) + (v1 * y[i].qs[j + qk/2]);
+        }
+
+        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s);
+    }
+
+    *s = sumf;
+#endif
+}
+
+void ggml_vec_dot_q5_0_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    const int qk = QK8_0;
+    const int nb = n / qk;
+
+    assert(n % qk == 0);
+    assert(qk == QK5_0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_q5_0 * restrict x = vx;
+    const block_q8_0 * restrict y = vy;
+
+#if defined(__ARM_NEON)
+    float32x4_t sumv0 = vdupq_n_f32(0.0f);
+    float32x4_t sumv1 = vdupq_n_f32(0.0f);
+
+    uint32_t qh0;
+    uint32_t qh1;
+
+    uint64_t tmp0[4];
+    uint64_t tmp1[4];
+
+    assert(nb % 2 == 0); // TODO: handle odd nb
+
+    for (int i = 0; i < nb; i += 2) {
+        const block_q5_0 * restrict x0 = &x[i];
+        const block_q5_0 * restrict x1 = &x[i + 1];
+        const block_q8_0 * restrict y0 = &y[i];
+        const block_q8_0 * restrict y1 = &y[i + 1];
+
+        const uint8x16_t m4b = vdupq_n_u8(0x0F);
+
+        // extract the 5th bit via lookup table ((!b) << 4)
+        memcpy(&qh0, x0->qh, sizeof(qh0));
+        memcpy(&qh1, x1->qh, sizeof(qh1));
+
+        tmp0[0] = table_b2b_1[(qh0 >>  0) & 0xFF];
+        tmp0[1] = table_b2b_1[(qh0 >>  8) & 0xFF];
+        tmp0[2] = table_b2b_1[(qh0 >> 16) & 0xFF];
+        tmp0[3] = table_b2b_1[(qh0 >> 24)       ];
+
+        tmp1[0] = table_b2b_1[(qh1 >>  0) & 0xFF];
+        tmp1[1] = table_b2b_1[(qh1 >>  8) & 0xFF];
+        tmp1[2] = table_b2b_1[(qh1 >> 16) & 0xFF];
+        tmp1[3] = table_b2b_1[(qh1 >> 24)       ];
+
+        const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0));
+        const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2));
+        const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0));
+        const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2));
+
+        const uint8x16_t v0_0 = vld1q_u8(x0->qs);
+        const uint8x16_t v0_1 = vld1q_u8(x1->qs);
+
+        // 4-bit -> 8-bit
+        int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
+        int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
+        int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
+        int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
+
+        // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero)
+        const int8x16_t v0_0lf = vsubq_s8(v0_0l, qhl0);
+        const int8x16_t v0_0hf = vsubq_s8(v0_0h, qhh0);
+        const int8x16_t v0_1lf = vsubq_s8(v0_1l, qhl1);
+        const int8x16_t v0_1hf = vsubq_s8(v0_1h, qhh1);
+
+        // load y
+        const int8x16_t v1_0l = vld1q_s8(y0->qs);
+        const int8x16_t v1_0h = vld1q_s8(y0->qs + 16);
+        const int8x16_t v1_1l = vld1q_s8(y1->qs);
+        const int8x16_t v1_1h = vld1q_s8(y1->qs + 16);
+
+        sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(
+                        ggml_vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l),
+                        ggml_vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
+        sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(
+                        ggml_vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l),
+                        ggml_vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
+    }
+
+    *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1);
+#elif defined(__wasm_simd128__)
+    v128_t sumv = wasm_f32x4_splat(0.0f);
+
+    uint32_t qh;
+    uint64_t tmp[4];
+
+    // TODO: check if unrolling this is better
+    for (int i = 0; i < nb; ++i) {
+        const block_q5_0 * restrict x0 = &x[i];
+        const block_q8_0 * restrict y0 = &y[i];
+
+        const v128_t m4b  = wasm_i8x16_splat(0x0F);
+
+        // extract the 5th bit
+        memcpy(&qh, x0->qh, sizeof(qh));
+
+        tmp[0] = table_b2b_1[(qh >>  0) & 0xFF];
+        tmp[1] = table_b2b_1[(qh >>  8) & 0xFF];
+        tmp[2] = table_b2b_1[(qh >> 16) & 0xFF];
+        tmp[3] = table_b2b_1[(qh >> 24)       ];
+
+        const v128_t qhl = wasm_v128_load(tmp + 0);
+        const v128_t qhh = wasm_v128_load(tmp + 2);
+
+        const v128_t v0 = wasm_v128_load(x0->qs);
+
+        // 4-bit -> 8-bit
+        const v128_t v0l = wasm_v128_and (v0, m4b);
+        const v128_t v0h = wasm_u8x16_shr(v0, 4);
+
+        // add high bit and sub 16 (equivalent to sub 0x10 when bit is zero)
+        const v128_t v0lf = wasm_i8x16_sub(v0l, qhl);
+        const v128_t v0hf = wasm_i8x16_sub(v0h, qhh);
+
+        // load y
+        const v128_t v1l = wasm_v128_load(y0->qs);
+        const v128_t v1h = wasm_v128_load(y0->qs + 16);
+
+        // int8x16 -> int16x8
+        const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf);
+        const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf);
+        const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf);
+        const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf);
+
+        const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l);
+        const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l);
+        const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h);
+        const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h);
+
+        // dot product
+        sumv = wasm_f32x4_add(sumv, wasm_f32x4_mul(wasm_f32x4_convert_i32x4(
+                        wasm_i32x4_add(
+                            wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll),
+                                           wasm_i32x4_dot_i16x8(v0lfh, v1lh)),
+                            wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl),
+                                           wasm_i32x4_dot_i16x8(v0hfh, v1hh)))),
+                    wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * GGML_FP16_TO_FP32(y0->d))));
+    }
+
+    *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) +
+         wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3);
+#elif defined(__AVX2__)
+    // Initialize accumulator with zeros
+    __m256 acc = _mm256_setzero_ps();
+
+    // Main loop
+    for (int i = 0; i < nb; i++) {
+        /* Compute combined scale for the block */
+        const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d));
+
+        __m256i qx = bytes_from_nibbles_32(x[i].qs);
+        __m256i bxhi = bytes_from_bits_32(x[i].qh);
+        bxhi = _mm256_andnot_si256(bxhi, _mm256_set1_epi8((char)0xF0));
+        qx = _mm256_or_si256(qx, bxhi);
+
+        __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs);
+
+        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
+
+        /* Multiply q with scale and accumulate */
+        acc = _mm256_fmadd_ps(d, q, acc);
+    }
+
+    *s = hsum_float_8(acc);
+#elif defined(__AVX__)
+    // Initialize accumulator with zeros
+    __m256 acc = _mm256_setzero_ps();
+    __m128i mask = _mm_set1_epi8((char)0xF0);
+
+    // Main loop
+    for (int i = 0; i < nb; i++) {
+        /* Compute combined scale for the block */
+        const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d));
+
+        __m256i bx_0 = bytes_from_nibbles_32(x[i].qs);
+        const __m256i bxhi = bytes_from_bits_32(x[i].qh);
+        __m128i bxhil = _mm256_castsi256_si128(bxhi);
+        __m128i bxhih = _mm256_extractf128_si256(bxhi, 1);
+        bxhil = _mm_andnot_si128(bxhil, mask);
+        bxhih = _mm_andnot_si128(bxhih, mask);
+        __m128i bxl = _mm256_castsi256_si128(bx_0);
+        __m128i bxh = _mm256_extractf128_si256(bx_0, 1);
+        bxl = _mm_or_si128(bxl, bxhil);
+        bxh = _mm_or_si128(bxh, bxhih);
+        bx_0 = MM256_SET_M128I(bxh, bxl);
+
+        const __m256i by_0 = _mm256_loadu_si256((const __m256i *)y[i].qs);
+
+        const __m256 q = mul_sum_i8_pairs_float(bx_0, by_0);
+
+        /* Multiply q with scale and accumulate */
+        acc = _mm256_add_ps(_mm256_mul_ps(d, q), acc);
+    }
+
+    *s = hsum_float_8(acc);
+#elif defined(__riscv_v_intrinsic)
+    float sumf = 0.0;
+
+    uint32_t qh;
+
+    size_t vl = __riscv_vsetvl_e8m1(qk/2);
+
+    // These temporary registers are for masking and shift operations
+    vuint32m2_t vt_1 = __riscv_vid_v_u32m2(vl);
+    vuint32m2_t vt_2 = __riscv_vsll_vv_u32m2(__riscv_vmv_v_x_u32m2(1, vl), vt_1, vl);
+
+    vuint32m2_t vt_3 = __riscv_vsll_vx_u32m2(vt_2, 16, vl);
+    vuint32m2_t vt_4 = __riscv_vadd_vx_u32m2(vt_1, 12, vl);
+
+    for (int i = 0; i < nb; i++) {
+        memcpy(&qh, x[i].qh, sizeof(uint32_t));
+
+        // ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4;
+        vuint32m2_t xha_0 = __riscv_vand_vx_u32m2(vt_2, qh, vl);
+        vuint32m2_t xhr_0 = __riscv_vsrl_vv_u32m2(xha_0, vt_1, vl);
+        vuint32m2_t xhl_0 = __riscv_vsll_vx_u32m2(xhr_0, 4, vl);
+
+        // ((qh & (1u << (j + 16))) >> (j + 12));
+        vuint32m2_t xha_1 = __riscv_vand_vx_u32m2(vt_3, qh, vl);
+        vuint32m2_t xhl_1 = __riscv_vsrl_vv_u32m2(xha_1, vt_4, vl);
+
+        // narrowing
+        vuint16m1_t xhc_0 = __riscv_vncvt_x_x_w_u16m1(xhl_0, vl);
+        vuint8mf2_t xh_0 = __riscv_vncvt_x_x_w_u8mf2(xhc_0, vl);
+
+        vuint16m1_t xhc_1 = __riscv_vncvt_x_x_w_u16m1(xhl_1, vl);
+        vuint8mf2_t xh_1 = __riscv_vncvt_x_x_w_u8mf2(xhc_1, vl);
+
+        // load
+        vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl);
+
+        vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl);
+        vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl);
+
+        vuint8mf2_t x_at = __riscv_vand_vx_u8mf2(tx, 0x0F, vl);
+        vuint8mf2_t x_lt = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl);
+
+        vuint8mf2_t x_a = __riscv_vor_vv_u8mf2(x_at, xh_0, vl);
+        vuint8mf2_t x_l = __riscv_vor_vv_u8mf2(x_lt, xh_1, vl);
+
+        vint8mf2_t x_ai = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a);
+        vint8mf2_t x_li = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l);
+
+        vint8mf2_t v0 = __riscv_vsub_vx_i8mf2(x_ai, 16, vl);
+        vint8mf2_t v1 = __riscv_vsub_vx_i8mf2(x_li, 16, vl);
+
+        vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl);
+        vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl);
+
+        vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl);
+
+        vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl);
+        vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl);
+
+        int sumi = __riscv_vmv_x_s_i32m1_i32(vs2);
+
+        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi;
+    }
+
+    *s = sumf;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0xF);
+    const vector unsigned char v4 = vec_splats((unsigned char)4);
+
+    vector float vsumf0 = vec_splats(0.0f);
+
+#pragma GCC unroll 4
+    for (int i = 0; i < nb; ++i) {
+        __builtin_prefetch(x[i].qs, 0, 1);
+        __builtin_prefetch(y[i].qs, 0, 1);
+
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[i].d));
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed long long aux64x2_0 = {(uint64_t)(table_b2b_1[x[i].qh[0]]), (uint64_t)(table_b2b_1[x[i].qh[1]])};
+        vector signed long long aux64x2_1 = {(uint64_t)(table_b2b_1[x[i].qh[2]]), (uint64_t)(table_b2b_1[x[i].qh[3]])};
+
+        vector signed char qh0 = (vector signed char)aux64x2_0;
+        vector signed char qh1 = (vector signed char)aux64x2_1;
+
+        vector signed char qxs = (vector signed char)vec_xl( 0, x[i].qs);
+
+        vector signed char q5x0 = vec_sub(vec_and (qxs, lowMask), qh0);
+        vector signed char q5x1 = vec_sub(vec_sr(qxs, v4), qh1);
+
+        vector signed char q8y0 = vec_xl(  0, y[i].qs);
+        vector signed char q8y1 = vec_xl( 16, y[i].qs);
+
+        vector signed short qv0 = vec_add(vec_mule(q5x0, q8y0), vec_mulo(q5x0, q8y0));
+        vector signed short qv1 = vec_add(vec_mule(q5x1, q8y1), vec_mulo(q5x1, q8y1));
+
+        qv0 = vec_add(qv0, qv1);
+
+        vector signed int vsumi0 = vec_add(vec_unpackh(qv0), vec_unpackl(qv0));
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+    }
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+    // Initialize accumulator with zeros
+    __m256 acc = (__m256)__lasx_xvldi(0);
+
+    // Main loop
+    for (int i = 0; i < nb; i++) {
+        /* Compute combined scale for the block */
+        const __m256 d = __lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d)); //FIXME
+
+        __m256i qx = bytes_from_nibbles_32(x[i].qs);
+        __m256i bxhi = bytes_from_bits_32(x[i].qh);
+        bxhi = __lasx_xvandn_v(bxhi, __lasx_xvreplgr2vr_b((char)0xF0));
+        qx = __lasx_xvor_v(qx, bxhi);
+
+        __m256i qy = __lasx_xvld((const __m256i *)y[i].qs, 0);
+
+        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
+
+        /* Multiply q with scale and accumulate */
+        acc = __lasx_xvfmadd_s(d, q, acc);
+    }
+
+    *s = hsum_float_8(acc);
+
+#else
+    // scalar
+    float sumf = 0.0;
+
+    for (int i = 0; i < nb; i++) {
+        uint32_t qh;
+        memcpy(&qh, x[i].qh, sizeof(qh));
+
+        int sumi = 0;
+
+        for (int j = 0; j < qk/2; ++j) {
+            const uint8_t xh_0 = ((qh & (1u << (j + 0 ))) >> (j + 0 )) << 4;
+            const uint8_t xh_1 = ((qh & (1u << (j + 16))) >> (j + 12));
+
+            const int32_t x0 = ((x[i].qs[j] & 0x0F) | xh_0) - 16;
+            const int32_t x1 = ((x[i].qs[j] >>   4) | xh_1) - 16;
+
+            sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]);
+        }
+
+        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d)) * sumi;
+    }
+
+    *s = sumf;
+#endif
+}
+
+void ggml_vec_dot_q5_1_q8_1(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    const int qk = QK8_1;
+    const int nb = n / qk;
+
+    assert(n % qk == 0);
+    assert(qk == QK5_1);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_q5_1 * restrict x = vx;
+    const block_q8_1 * restrict y = vy;
+
+#if defined(__ARM_NEON)
+    float32x4_t sumv0 = vdupq_n_f32(0.0f);
+    float32x4_t sumv1 = vdupq_n_f32(0.0f);
+
+    float summs0 = 0.0f;
+    float summs1 = 0.0f;
+
+    uint32_t qh0;
+    uint32_t qh1;
+
+    uint64_t tmp0[4];
+    uint64_t tmp1[4];
+
+    assert(nb % 2 == 0); // TODO: handle odd nb
+
+    for (int i = 0; i < nb; i += 2) {
+        const block_q5_1 * restrict x0 = &x[i];
+        const block_q5_1 * restrict x1 = &x[i + 1];
+        const block_q8_1 * restrict y0 = &y[i];
+        const block_q8_1 * restrict y1 = &y[i + 1];
+
+        const uint8x16_t m4b = vdupq_n_u8(0x0F);
+
+        summs0 += GGML_FP16_TO_FP32(x0->m) * GGML_FP16_TO_FP32(y0->s);
+        summs1 += GGML_FP16_TO_FP32(x1->m) * GGML_FP16_TO_FP32(y1->s);
+
+        // extract the 5th bit via lookup table ((b) << 4)
+        memcpy(&qh0, x0->qh, sizeof(qh0));
+        memcpy(&qh1, x1->qh, sizeof(qh1));
+
+        tmp0[0] = table_b2b_0[(qh0 >>  0) & 0xFF];
+        tmp0[1] = table_b2b_0[(qh0 >>  8) & 0xFF];
+        tmp0[2] = table_b2b_0[(qh0 >> 16) & 0xFF];
+        tmp0[3] = table_b2b_0[(qh0 >> 24)       ];
+
+        tmp1[0] = table_b2b_0[(qh1 >>  0) & 0xFF];
+        tmp1[1] = table_b2b_0[(qh1 >>  8) & 0xFF];
+        tmp1[2] = table_b2b_0[(qh1 >> 16) & 0xFF];
+        tmp1[3] = table_b2b_0[(qh1 >> 24)       ];
+
+        const int8x16_t qhl0 = vld1q_s8((const int8_t *)(tmp0 + 0));
+        const int8x16_t qhh0 = vld1q_s8((const int8_t *)(tmp0 + 2));
+        const int8x16_t qhl1 = vld1q_s8((const int8_t *)(tmp1 + 0));
+        const int8x16_t qhh1 = vld1q_s8((const int8_t *)(tmp1 + 2));
+
+        const uint8x16_t v0_0 = vld1q_u8(x0->qs);
+        const uint8x16_t v0_1 = vld1q_u8(x1->qs);
+
+        // 4-bit -> 8-bit
+        const int8x16_t v0_0l = vreinterpretq_s8_u8(vandq_u8  (v0_0, m4b));
+        const int8x16_t v0_0h = vreinterpretq_s8_u8(vshrq_n_u8(v0_0, 4));
+        const int8x16_t v0_1l = vreinterpretq_s8_u8(vandq_u8  (v0_1, m4b));
+        const int8x16_t v0_1h = vreinterpretq_s8_u8(vshrq_n_u8(v0_1, 4));
+
+        // add high bit
+        const int8x16_t v0_0lf = vorrq_s8(v0_0l, qhl0);
+        const int8x16_t v0_0hf = vorrq_s8(v0_0h, qhh0);
+        const int8x16_t v0_1lf = vorrq_s8(v0_1l, qhl1);
+        const int8x16_t v0_1hf = vorrq_s8(v0_1h, qhh1);
+
+        // load y
+        const int8x16_t v1_0l = vld1q_s8(y0->qs);
+        const int8x16_t v1_0h = vld1q_s8(y0->qs + 16);
+        const int8x16_t v1_1l = vld1q_s8(y1->qs);
+        const int8x16_t v1_1h = vld1q_s8(y1->qs + 16);
+
+        sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(
+                        ggml_vdotq_s32(vdupq_n_s32(0), v0_0lf, v1_0l),
+                        ggml_vdotq_s32(vdupq_n_s32(0), v0_0hf, v1_0h))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
+        sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(
+                        ggml_vdotq_s32(vdupq_n_s32(0), v0_1lf, v1_1l),
+                        ggml_vdotq_s32(vdupq_n_s32(0), v0_1hf, v1_1h))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
+    }
+
+    *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1) + summs0 + summs1;
+#elif defined(__wasm_simd128__)
+    v128_t sumv = wasm_f32x4_splat(0.0f);
+
+    float summs = 0.0f;
+
+    uint32_t qh;
+    uint64_t tmp[4];
+
+    // TODO: check if unrolling this is better
+    for (int i = 0; i < nb; ++i) {
+        const block_q5_1 * restrict x0 = &x[i];
+        const block_q8_1 * restrict y0 = &y[i];
+
+        summs += GGML_FP16_TO_FP32(x0->m) * GGML_FP16_TO_FP32(y0->s);
+
+        const v128_t m4b = wasm_i8x16_splat(0x0F);
+
+        // extract the 5th bit
+        memcpy(&qh, x0->qh, sizeof(qh));
+
+        tmp[0] = table_b2b_0[(qh >>  0) & 0xFF];
+        tmp[1] = table_b2b_0[(qh >>  8) & 0xFF];
+        tmp[2] = table_b2b_0[(qh >> 16) & 0xFF];
+        tmp[3] = table_b2b_0[(qh >> 24)       ];
+
+        const v128_t qhl = wasm_v128_load(tmp + 0);
+        const v128_t qhh = wasm_v128_load(tmp + 2);
+
+        const v128_t v0 = wasm_v128_load(x0->qs);
+
+        // 4-bit -> 8-bit
+        const v128_t v0l = wasm_v128_and (v0, m4b);
+        const v128_t v0h = wasm_u8x16_shr(v0, 4);
+
+        // add high bit
+        const v128_t v0lf = wasm_v128_or(v0l, qhl);
+        const v128_t v0hf = wasm_v128_or(v0h, qhh);
+
+        // load y
+        const v128_t v1l = wasm_v128_load(y0->qs);
+        const v128_t v1h = wasm_v128_load(y0->qs + 16);
+
+        // int8x16 -> int16x8
+        const v128_t v0lfl = wasm_i16x8_extend_low_i8x16 (v0lf);
+        const v128_t v0lfh = wasm_i16x8_extend_high_i8x16(v0lf);
+        const v128_t v0hfl = wasm_i16x8_extend_low_i8x16 (v0hf);
+        const v128_t v0hfh = wasm_i16x8_extend_high_i8x16(v0hf);
+
+        const v128_t v1ll = wasm_i16x8_extend_low_i8x16 (v1l);
+        const v128_t v1lh = wasm_i16x8_extend_high_i8x16(v1l);
+        const v128_t v1hl = wasm_i16x8_extend_low_i8x16 (v1h);
+        const v128_t v1hh = wasm_i16x8_extend_high_i8x16(v1h);
+
+        // dot product
+        sumv = wasm_f32x4_add(sumv,
+                wasm_f32x4_mul(wasm_f32x4_convert_i32x4(wasm_i32x4_add(
+                            wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0lfl, v1ll),
+                                           wasm_i32x4_dot_i16x8(v0lfh, v1lh)),
+                            wasm_i32x4_add(wasm_i32x4_dot_i16x8(v0hfl, v1hl),
+                                           wasm_i32x4_dot_i16x8(v0hfh, v1hh)))),
+                    wasm_f32x4_splat(GGML_FP16_TO_FP32(x0->d) * GGML_FP16_TO_FP32(y0->d))));
+    }
+
+    *s = wasm_f32x4_extract_lane(sumv, 0) + wasm_f32x4_extract_lane(sumv, 1) +
+         wasm_f32x4_extract_lane(sumv, 2) + wasm_f32x4_extract_lane(sumv, 3) + summs;
+#elif defined(__AVX2__)
+    // Initialize accumulator with zeros
+    __m256 acc = _mm256_setzero_ps();
+
+    float summs = 0.0f;
+
+    // Main loop
+    for (int i = 0; i < nb; i++) {
+        const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d));
+
+        summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s);
+
+        __m256i qx = bytes_from_nibbles_32(x[i].qs);
+        __m256i bxhi = bytes_from_bits_32(x[i].qh);
+        bxhi = _mm256_and_si256(bxhi, _mm256_set1_epi8(0x10));
+        qx = _mm256_or_si256(qx, bxhi);
+
+        const __m256 dy = _mm256_set1_ps(GGML_FP16_TO_FP32(y[i].d));
+        const __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs);
+
+        const __m256 q = mul_sum_us8_pairs_float(qx, qy);
+
+        acc = _mm256_fmadd_ps(q, _mm256_mul_ps(dx, dy), acc);
+    }
+
+    *s = hsum_float_8(acc) + summs;
+#elif defined(__AVX__)
+    // Initialize accumulator with zeros
+    __m256 acc = _mm256_setzero_ps();
+    __m128i mask = _mm_set1_epi8(0x10);
+
+    float summs = 0.0f;
+
+    // Main loop
+    for (int i = 0; i < nb; i++) {
+        const __m256 dx = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d));
+
+        summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s);
+
+        __m256i bx_0 = bytes_from_nibbles_32(x[i].qs);
+        const __m256i bxhi = bytes_from_bits_32(x[i].qh);
+        __m128i bxhil = _mm256_castsi256_si128(bxhi);
+        __m128i bxhih = _mm256_extractf128_si256(bxhi, 1);
+        bxhil = _mm_and_si128(bxhil, mask);
+        bxhih = _mm_and_si128(bxhih, mask);
+        __m128i bxl = _mm256_castsi256_si128(bx_0);
+        __m128i bxh = _mm256_extractf128_si256(bx_0, 1);
+        bxl = _mm_or_si128(bxl, bxhil);
+        bxh = _mm_or_si128(bxh, bxhih);
+        bx_0 = MM256_SET_M128I(bxh, bxl);
+
+        const __m256 dy = _mm256_set1_ps(GGML_FP16_TO_FP32(y[i].d));
+        const __m256i by_0 = _mm256_loadu_si256((const __m256i *)y[i].qs);
+
+        const __m256 q = mul_sum_us8_pairs_float(bx_0, by_0);
+
+        acc = _mm256_add_ps(_mm256_mul_ps(q, _mm256_mul_ps(dx, dy)), acc);
+    }
+
+    *s = hsum_float_8(acc) + summs;
+#elif defined(__riscv_v_intrinsic)
+    float sumf = 0.0;
+
+    uint32_t qh;
+
+    size_t vl = __riscv_vsetvl_e8m1(qk/2);
+
+    // temporary registers for shift operations
+    vuint32m2_t vt_1 = __riscv_vid_v_u32m2(vl);
+    vuint32m2_t vt_2 = __riscv_vadd_vx_u32m2(vt_1, 12, vl);
+
+    for (int i = 0; i < nb; i++) {
+        memcpy(&qh, x[i].qh, sizeof(uint32_t));
+
+        // load qh
+        vuint32m2_t vqh = __riscv_vmv_v_x_u32m2(qh, vl);
+
+        // ((qh >> (j +  0)) << 4) & 0x10;
+        vuint32m2_t xhr_0 = __riscv_vsrl_vv_u32m2(vqh, vt_1, vl);
+        vuint32m2_t xhl_0 = __riscv_vsll_vx_u32m2(xhr_0, 4, vl);
+        vuint32m2_t xha_0 = __riscv_vand_vx_u32m2(xhl_0, 0x10, vl);
+
+        // ((qh >> (j + 12))     ) & 0x10;
+        vuint32m2_t xhr_1 = __riscv_vsrl_vv_u32m2(vqh, vt_2, vl);
+        vuint32m2_t xha_1 = __riscv_vand_vx_u32m2(xhr_1, 0x10, vl);
+
+        // narrowing
+        vuint16m1_t xhc_0 = __riscv_vncvt_x_x_w_u16m1(xha_0, vl);
+        vuint8mf2_t xh_0 = __riscv_vncvt_x_x_w_u8mf2(xhc_0, vl);
+
+        vuint16m1_t xhc_1 = __riscv_vncvt_x_x_w_u16m1(xha_1, vl);
+        vuint8mf2_t xh_1 = __riscv_vncvt_x_x_w_u8mf2(xhc_1, vl);
+
+        // load
+        vuint8mf2_t tx = __riscv_vle8_v_u8mf2(x[i].qs, vl);
+
+        vint8mf2_t y0 = __riscv_vle8_v_i8mf2(y[i].qs, vl);
+        vint8mf2_t y1 = __riscv_vle8_v_i8mf2(y[i].qs+16, vl);
+
+        vuint8mf2_t x_at = __riscv_vand_vx_u8mf2(tx, 0x0F, vl);
+        vuint8mf2_t x_lt = __riscv_vsrl_vx_u8mf2(tx, 0x04, vl);
+
+        vuint8mf2_t x_a = __riscv_vor_vv_u8mf2(x_at, xh_0, vl);
+        vuint8mf2_t x_l = __riscv_vor_vv_u8mf2(x_lt, xh_1, vl);
+
+        vint8mf2_t v0 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_a);
+        vint8mf2_t v1 = __riscv_vreinterpret_v_u8mf2_i8mf2(x_l);
+
+        vint16m1_t vec_mul1 = __riscv_vwmul_vv_i16m1(v0, y0, vl);
+        vint16m1_t vec_mul2 = __riscv_vwmul_vv_i16m1(v1, y1, vl);
+
+        vint32m1_t vec_zero = __riscv_vmv_v_x_i32m1(0, vl);
+
+        vint32m1_t vs1 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul1, vec_zero, vl);
+        vint32m1_t vs2 = __riscv_vwredsum_vs_i16m1_i32m1(vec_mul2, vs1, vl);
+
+        int sumi = __riscv_vmv_x_s_i32m1_i32(vs2);
+
+        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s);
+    }
+
+    *s = sumf;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0xF);
+    const vector signed int v0 = vec_splats((int32_t)0);
+    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
+
+    vector float vsumf0 = vec_splats(0.0f);
+
+#pragma GCC unroll 4
+    for (int i = 0; i < nb; ++i) {
+        __builtin_prefetch(x[i].qs, 0, 1);
+        __builtin_prefetch(y[i].qs, 0, 1);
+
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[i].d));
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector float vxmin = vec_splats(GGML_FP16_TO_FP32(x[i].m));
+        vector float vys = {GGML_FP16_TO_FP32(y[i].s), 0.f, 0.f, 0.f};
+        vsumf0 = vec_madd(vxmin, vys, vsumf0);
+
+        vector unsigned long long aux64x2_0 = {(uint64_t)(table_b2b_0[x[i].qh[0]]), (uint64_t)(table_b2b_0[x[i].qh[1]])};
+        vector unsigned long long aux64x2_1 = {(uint64_t)(table_b2b_0[x[i].qh[2]]), (uint64_t)(table_b2b_0[x[i].qh[3]])};
+
+        vector signed char qh0 = (vector signed char)aux64x2_0;
+        vector signed char qh1 = (vector signed char)aux64x2_1;
+
+        vector signed char qxs = (vector signed char)vec_xl( 0, x[i].qs);
+
+        vector unsigned char q5x0 = (vector unsigned char)vec_or(vec_and(qxs, lowMask), qh0);
+        vector unsigned char q5x1 = (vector unsigned char)vec_or(vec_sr(qxs, v4), qh1);
+
+        vector signed char q8y0 = vec_xl(  0, y[i].qs);
+        vector signed char q8y1 = vec_xl( 16, y[i].qs);
+
+        vector signed int vsumi0 = v0;
+
+        vsumi0 = vec_msum(q8y0, q5x0, vsumi0);
+        vsumi0 = vec_msum(q8y1, q5x1, vsumi0);
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+    }
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+    // Initialize accumulator with zeros
+    __m256 acc = (__m256)__lasx_xvldi(0);
+
+    float summs = 0.0f;
+
+    // Main loop
+    for (int i = 0; i < nb; i++) {
+        const __m256 dx = __lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(x[i].d));
+
+        summs += GGML_FP16_TO_FP32(x[i].m) * GGML_FP16_TO_FP32(y[i].s);
+
+        __m256i qx = bytes_from_nibbles_32(x[i].qs);
+        __m256i bxhi = bytes_from_bits_32(x[i].qh);
+        bxhi = __lasx_xvand_v(bxhi, __lasx_xvreplgr2vr_b(0x10));
+        qx = __lasx_xvor_v(qx, bxhi);
+
+        const __m256 dy = __lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(y[i].d));
+        const __m256i qy = __lasx_xvld((const __m256i *)y[i].qs, 0);
+
+        const __m256 q = mul_sum_us8_pairs_float(qx, qy);
+
+        acc = __lasx_xvfmadd_s(q, __lasx_xvfmul_s(dx, dy), acc);
+    }
+
+    *s = hsum_float_8(acc) + summs;
+
+#else
+    // scalar
+    float sumf = 0.0;
+
+    for (int i = 0; i < nb; i++) {
+        uint32_t qh;
+        memcpy(&qh, x[i].qh, sizeof(qh));
+
+        int sumi = 0;
+
+        for (int j = 0; j < qk/2; ++j) {
+            const uint8_t xh_0 = ((qh >> (j +  0)) << 4) & 0x10;
+            const uint8_t xh_1 = ((qh >> (j + 12))     ) & 0x10;
+
+            const int32_t x0 = (x[i].qs[j] & 0xF) | xh_0;
+            const int32_t x1 = (x[i].qs[j] >>  4) | xh_1;
+
+            sumi += (x0 * y[i].qs[j]) + (x1 * y[i].qs[j + qk/2]);
+        }
+
+        sumf += (GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d))*sumi + GGML_FP16_TO_FP32(x[i].m)*GGML_FP16_TO_FP32(y[i].s);
+    }
+
+    *s = sumf;
+#endif
+}
+
+void ggml_vec_dot_q8_0_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    const int qk = QK8_0;
+    const int nb = n / qk;
+
+    assert(n % qk == 0);
+#if defined(__ARM_FEATURE_MATMUL_INT8)
+    assert((nrc == 2) || (nrc == 1));
+#else
+    assert(nrc == 1);
+#endif
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_q8_0 * restrict x = vx;
+    const block_q8_0 * restrict y = vy;
+
+#if defined(__ARM_FEATURE_MATMUL_INT8)
+    if (nrc == 2) {
+        const block_q8_0 * restrict vx0 = vx;
+        const block_q8_0 * restrict vx1 = (const block_q8_0 *) ((const uint8_t*)vx + bx);
+        const block_q8_0 * restrict vy0 = vy;
+        const block_q8_0 * restrict vy1 = (const block_q8_0 *) ((const uint8_t*)vy + by);
+
+        float32x4_t sumv0 = vdupq_n_f32(0.0f);
+
+        for (int i = 0; i < nb; i++) {
+            const block_q8_0 * restrict b_x0 = &vx0[i];
+            const block_q8_0 * restrict b_y0 = &vy0[i];
+
+            const block_q8_0 * restrict b_x1 = &vx1[i];
+            const block_q8_0 * restrict b_y1 = &vy1[i];
+
+            const int8x16_t x0_l = vld1q_s8(b_x0->qs);
+            const int8x16_t x0_h = vld1q_s8(b_x0->qs + 16);
+            const int8x16_t x1_l = vld1q_s8(b_x1->qs);
+            const int8x16_t x1_h = vld1q_s8(b_x1->qs + 16);
+
+            // load y
+            const int8x16_t y0_l = vld1q_s8(b_y0->qs);
+            const int8x16_t y0_h = vld1q_s8(b_y0->qs + 16);
+            const int8x16_t y1_l = vld1q_s8(b_y1->qs);
+            const int8x16_t y1_h = vld1q_s8(b_y1->qs + 16);
+
+            float32_t _scale[4] = {GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y0->d),
+                                   GGML_FP16_TO_FP32(b_x0->d)*GGML_FP16_TO_FP32(b_y1->d),
+                                   GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y0->d),
+                                   GGML_FP16_TO_FP32(b_x1->d)*GGML_FP16_TO_FP32(b_y1->d)};
+            float32x4_t scale = vld1q_f32(_scale);
+
+            int8x16_t l0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
+            int8x16_t l1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_l), vreinterpretq_s64_s8(x1_l)));
+
+            int8x16_t l2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
+            int8x16_t l3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(x0_h), vreinterpretq_s64_s8(x1_h)));
+
+            int8x16_t r0 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
+            int8x16_t r1 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_l), vreinterpretq_s64_s8(y1_l)));
+
+            int8x16_t r2 = vreinterpretq_s8_s64(vzip1q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
+            int8x16_t r3 = vreinterpretq_s8_s64(vzip2q_s64(vreinterpretq_s64_s8(y0_h), vreinterpretq_s64_s8(y1_h)));
+
+            sumv0 = vmlaq_f32(sumv0,(vcvtq_f32_s32(vmmlaq_s32((vmmlaq_s32((vmmlaq_s32((vmmlaq_s32(vdupq_n_s32(0), l0, r0)),
+                                                                                       l1, r1)), l2, r2)), l3, r3))), scale);
+        }
+        float32x4_t sumv1 = vextq_f32(sumv0, sumv0, 2);
+        float32x4_t sumv2 = vzip1q_f32(sumv0, sumv1);
+
+        vst1_f32(s, vget_low_f32(sumv2));
+        vst1_f32(s + bs, vget_high_f32(sumv2));
+        return;
+    }
+#endif
+#if defined(__ARM_FEATURE_SVE)
+    svfloat32_t sumv0 = svdup_n_f32(0.0f);
+    svfloat32_t sumv1 = svdup_n_f32(0.0f);
+
+    assert(nb % 2 == 0); // TODO: handle odd nb
+
+    for (int i = 0; i < nb; i += 2) {
+        const block_q8_0 * restrict x0 = &x[i + 0];
+        const block_q8_0 * restrict x1 = &x[i + 1];
+        const block_q8_0 * restrict y0 = &y[i + 0];
+        const block_q8_0 * restrict y1 = &y[i + 1];
+
+        // load x
+        const svint8_t qx0 = svld1_s8(svptrue_b8(), x0->qs);
+        const svint8_t qx1 = svld1_s8(svptrue_b8(), x1->qs);
+
+        // load y
+        const svint8_t qy0 = svld1_s8(svptrue_b8(), y0->qs);
+        const svint8_t qy1 = svld1_s8(svptrue_b8(), y1->qs);
+
+        sumv0 = svmla_n_f32_x(svptrue_b32(), sumv0, svcvt_f32_s32_x(svptrue_b32(), svdot_s32(svdup_n_s32(0), qx0, qy0)), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
+        sumv1 = svmla_n_f32_x(svptrue_b32(), sumv1, svcvt_f32_s32_x(svptrue_b32(), svdot_s32(svdup_n_s32(0), qx1, qy1)), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
+    }
+
+    *s = svaddv_f32(svptrue_b32(), svadd_f32_x(svptrue_b32(), sumv0, sumv1));
+#elif defined(__ARM_NEON)
+    float32x4_t sumv0 = vdupq_n_f32(0.0f);
+    float32x4_t sumv1 = vdupq_n_f32(0.0f);
+
+    assert(nb % 2 == 0); // TODO: handle odd nb
+
+    for (int i = 0; i < nb; i += 2) {
+        const block_q8_0 * restrict x0 = &x[i + 0];
+        const block_q8_0 * restrict x1 = &x[i + 1];
+        const block_q8_0 * restrict y0 = &y[i + 0];
+        const block_q8_0 * restrict y1 = &y[i + 1];
+
+        const int8x16_t x0_0 = vld1q_s8(x0->qs);
+        const int8x16_t x0_1 = vld1q_s8(x0->qs + 16);
+        const int8x16_t x1_0 = vld1q_s8(x1->qs);
+        const int8x16_t x1_1 = vld1q_s8(x1->qs + 16);
+
+        // load y
+        const int8x16_t y0_0 = vld1q_s8(y0->qs);
+        const int8x16_t y0_1 = vld1q_s8(y0->qs + 16);
+        const int8x16_t y1_0 = vld1q_s8(y1->qs);
+        const int8x16_t y1_1 = vld1q_s8(y1->qs + 16);
+
+        sumv0 = vmlaq_n_f32(sumv0, vcvtq_f32_s32(vaddq_s32(
+                        ggml_vdotq_s32(vdupq_n_s32(0), x0_0, y0_0),
+                        ggml_vdotq_s32(vdupq_n_s32(0), x0_1, y0_1))), GGML_FP16_TO_FP32(x0->d)*GGML_FP16_TO_FP32(y0->d));
+
+        sumv1 = vmlaq_n_f32(sumv1, vcvtq_f32_s32(vaddq_s32(
+                        ggml_vdotq_s32(vdupq_n_s32(0), x1_0, y1_0),
+                        ggml_vdotq_s32(vdupq_n_s32(0), x1_1, y1_1))), GGML_FP16_TO_FP32(x1->d)*GGML_FP16_TO_FP32(y1->d));
+    }
+
+    *s = vaddvq_f32(sumv0) + vaddvq_f32(sumv1);
+#elif defined(__AVX2__) || defined(__AVX__)
+    // Initialize accumulator with zeros
+    __m256 acc = _mm256_setzero_ps();
+
+    // Main loop
+    for (int i = 0; i < nb; ++i) {
+        // Compute combined scale for the block
+        const __m256 d = _mm256_set1_ps(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d));
+        __m256i qx = _mm256_loadu_si256((const __m256i *)x[i].qs);
+        __m256i qy = _mm256_loadu_si256((const __m256i *)y[i].qs);
+
+        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
+
+        // Multiply q with scale and accumulate
+#if defined(__AVX2__)
+        acc = _mm256_fmadd_ps( d, q, acc );
+#else
+        acc = _mm256_add_ps( _mm256_mul_ps( d, q ), acc );
+#endif
+    }
+
+    *s = hsum_float_8(acc);
+#elif defined(__riscv_v_intrinsic)
+    float sumf = 0.0;
+    size_t vl = __riscv_vsetvl_e8m1(qk);
+
+    for (int i = 0; i < nb; i++) {
+        // load elements
+        vint8m1_t bx_0 = __riscv_vle8_v_i8m1(x[i].qs, vl);
+        vint8m1_t by_0 = __riscv_vle8_v_i8m1(y[i].qs, vl);
+
+        vint16m2_t vw_mul = __riscv_vwmul_vv_i16m2(bx_0, by_0, vl);
+
+        vint32m1_t v_zero = __riscv_vmv_v_x_i32m1(0, vl);
+        vint32m1_t v_sum = __riscv_vwredsum_vs_i16m2_i32m1(vw_mul, v_zero, vl);
+
+        int sumi = __riscv_vmv_x_s_i32m1_i32(v_sum);
+
+        sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d));
+    }
+
+    *s = sumf;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed int v0 = vec_splats((int32_t)0);
+    vector float vsumf0 = vec_splats(0.0f);
+
+#pragma GCC unroll 8
+    for (int i = 0; i < nb; i++) {
+        __builtin_prefetch(x[i].qs, 0, 1);
+        __builtin_prefetch(y[i].qs, 0, 1);
+
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[i].d));
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed char q8x0 = vec_xl( 0, x[i].qs);
+        vector signed char q8x1 = vec_xl(16, x[i].qs);
+        vector signed char q8y0 = vec_xl( 0, y[i].qs);
+        vector signed char q8y1 = vec_xl(16, y[i].qs);
+
+        vector signed short qv0 = vec_mule(q8x0, q8y0);
+        vector signed short qv1 = vec_mulo(q8x0, q8y0);
+        vector signed short qv2 = vec_mule(q8x1, q8y1);
+        vector signed short qv3 = vec_mulo(q8x1, q8y1);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+
+        vsumi0 = vec_sum4s(qv0, vsumi0);
+        vsumi1 = vec_sum4s(qv1, vsumi1);
+        vsumi0 = vec_sum4s(qv2, vsumi0);
+        vsumi1 = vec_sum4s(qv3, vsumi1);
+
+        vsumi0 = vec_add(vsumi0, vsumi1);
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+    }
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+    // Initialize accumulator with zeros
+    __m256 acc = (__m256)__lasx_xvldi(0);
+
+    // Main loop
+    for (int i = 0; i < nb; ++i) {
+        // Compute combined scale for the block
+        const __m256 d = __lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(x[i].d) * GGML_FP16_TO_FP32(y[i].d));
+        __m256i qx = __lasx_xvld((const __m256i *)x[i].qs, 0);
+        __m256i qy = __lasx_xvld((const __m256i *)y[i].qs, 0);
+
+        const __m256 q = mul_sum_i8_pairs_float(qx, qy);
+
+        // Multiply q with scale and accumulate
+        acc = __lasx_xvfmadd_s( d, q, acc );
+    }
+
+    *s = hsum_float_8(acc);
+
+#else
+    // scalar
+    float sumf = 0.0;
+
+    for (int i = 0; i < nb; i++) {
+        int sumi = 0;
+
+        for (int j = 0; j < qk; j++) {
+            sumi += x[i].qs[j]*y[i].qs[j];
+        }
+
+        sumf += sumi*(GGML_FP16_TO_FP32(x[i].d)*GGML_FP16_TO_FP32(y[i].d));
+    }
+
+    *s = sumf;
+#endif
+}
+
+void ggml_vec_dot_q2_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_q2_K * restrict x = vx;
+    const block_q8_K * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+#ifdef __ARM_NEON
+    const uint8x16_t m3 = vdupq_n_u8(0x3);
+    const uint8x16_t m4 = vdupq_n_u8(0xF);
+
+    const int32x4_t vzero = vdupq_n_s32(0);
+
+    ggml_int8x16x2_t q2bytes;
+    uint8_t aux[16];
+
+    float sum = 0;
+
+    for (int i = 0; i < nb; ++i) {
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        const uint8_t * restrict q2 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+        const uint8_t * restrict sc = x[i].scales;
+
+        const uint8x16_t mins_and_scales = vld1q_u8(sc);
+        const uint8x16_t scales = vandq_u8(mins_and_scales, m4);
+        vst1q_u8(aux, scales);
+
+        const uint8x16_t mins = vshrq_n_u8(mins_and_scales, 4);
+        const ggml_int16x8x2_t q8sums = ggml_vld1q_s16_x2(y[i].bsums);
+        const ggml_int16x8x2_t mins16 = {{vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(mins))), vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(mins)))}};
+        const int32x4_t s0 = vaddq_s32(vmull_s16(vget_low_s16 (mins16.val[0]), vget_low_s16 (q8sums.val[0])),
+                                       vmull_s16(vget_high_s16(mins16.val[0]), vget_high_s16(q8sums.val[0])));
+        const int32x4_t s1 = vaddq_s32(vmull_s16(vget_low_s16 (mins16.val[1]), vget_low_s16 (q8sums.val[1])),
+                                       vmull_s16(vget_high_s16(mins16.val[1]), vget_high_s16(q8sums.val[1])));
+        sum += dmin * vaddvq_s32(vaddq_s32(s0, s1));
+
+        int isum = 0;
+        int is = 0;
+
+// We use this macro instead of a function call because for some reason
+// the code runs 2-3% slower, even if the function is declared inline
+#define MULTIPLY_ACCUM_WITH_SCALE(index)\
+        isum += vaddvq_s32(ggml_vdotq_s32(vzero, q2bytes.val[0], q8bytes.val[0])) * aux[is+(index)];\
+        isum += vaddvq_s32(ggml_vdotq_s32(vzero, q2bytes.val[1], q8bytes.val[1])) * aux[is+1+(index)];
+
+#define SHIFT_MULTIPLY_ACCUM_WITH_SCALE(shift, index)\
+        q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32;\
+        q2bytes.val[0] = vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q2bits.val[0], (shift)), m3));\
+        q2bytes.val[1] = vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q2bits.val[1], (shift)), m3));\
+        MULTIPLY_ACCUM_WITH_SCALE((index));
+
+        for (int j = 0; j < QK_K/128; ++j) {
+            const ggml_uint8x16x2_t q2bits = ggml_vld1q_u8_x2(q2); q2 += 32;
+
+            ggml_int8x16x2_t q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32;
+            q2bytes.val[0] = vreinterpretq_s8_u8(vandq_u8(q2bits.val[0], m3));
+            q2bytes.val[1] = vreinterpretq_s8_u8(vandq_u8(q2bits.val[1], m3));
+
+            MULTIPLY_ACCUM_WITH_SCALE(0);
+
+            SHIFT_MULTIPLY_ACCUM_WITH_SCALE(2, 2);
+            SHIFT_MULTIPLY_ACCUM_WITH_SCALE(4, 4);
+            SHIFT_MULTIPLY_ACCUM_WITH_SCALE(6, 6);
+
+            is += 8;
+        }
+
+        sum += d * isum;
+    }
+
+    *s = sum;
+
+#elif defined __AVX2__
+
+    const __m256i m3 = _mm256_set1_epi8(3);
+    const __m128i m4 = _mm_set1_epi8(0xF);
+
+    __m256 acc = _mm256_setzero_ps();
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        const uint8_t * restrict q2 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        const __m128i mins_and_scales = _mm_loadu_si128((const __m128i*)x[i].scales);
+        const __m128i scales8 = _mm_and_si128(mins_and_scales, m4);
+        const __m128i mins8 = _mm_and_si128(_mm_srli_epi16(mins_and_scales, 4), m4);
+        const __m256i mins = _mm256_cvtepi8_epi16(mins8);
+        const __m256i prod = _mm256_madd_epi16(mins, _mm256_loadu_si256((const __m256i*)y[i].bsums));
+
+        acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&dmin), _mm256_cvtepi32_ps(prod), acc);
+
+        const __m256i all_scales = _mm256_cvtepi8_epi16(scales8);
+        const __m128i l_scales = _mm256_extracti128_si256(all_scales, 0);
+        const __m128i h_scales = _mm256_extracti128_si256(all_scales, 1);
+        const __m256i scales[2] = {MM256_SET_M128I(l_scales, l_scales), MM256_SET_M128I(h_scales, h_scales)};
+
+        __m256i sumi = _mm256_setzero_si256();
+
+        for (int j = 0; j < QK_K/128; ++j) {
+
+            const __m256i q2bits = _mm256_loadu_si256((const __m256i*)q2); q2 += 32;
+
+            const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8_3 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+
+            const __m256i q2_0 = _mm256_and_si256(q2bits, m3);
+            const __m256i q2_1 = _mm256_and_si256(_mm256_srli_epi16(q2bits, 2), m3);
+            const __m256i q2_2 = _mm256_and_si256(_mm256_srli_epi16(q2bits, 4), m3);
+            const __m256i q2_3 = _mm256_and_si256(_mm256_srli_epi16(q2bits, 6), m3);
+
+            __m256i p0 = _mm256_maddubs_epi16(q2_0, q8_0);
+            __m256i p1 = _mm256_maddubs_epi16(q2_1, q8_1);
+            __m256i p2 = _mm256_maddubs_epi16(q2_2, q8_2);
+            __m256i p3 = _mm256_maddubs_epi16(q2_3, q8_3);
+
+            p0 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(0)), p0);
+            p1 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(1)), p1);
+            p2 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(2)), p2);
+            p3 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(3)), p3);
+
+            p0 = _mm256_add_epi32(p0, p1);
+            p2 = _mm256_add_epi32(p2, p3);
+
+            sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p0, p2));
+        }
+
+        acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc);
+
+    }
+
+    *s = hsum_float_8(acc);
+
+#elif defined __AVX__
+
+    const __m128i m3 = _mm_set1_epi8(0x3);
+    const __m128i m4 = _mm_set1_epi8(0xF);
+    const __m128i m2 = _mm_set1_epi8(0x2);
+
+    __m256 acc = _mm256_setzero_ps();
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        const uint8_t * restrict q2 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        // load mins and scales from block_q2_K.scales[QK_K/16]
+        const __m128i mins_and_scales = _mm_loadu_si128((const __m128i*)x[i].scales);
+        const __m128i scales16 = _mm_and_si128(mins_and_scales, m4);
+        const __m128i mins16 = _mm_and_si128(_mm_srli_epi16(mins_and_scales, 4), m4);
+        const __m128i mins_0 = _mm_cvtepi8_epi16(mins16);
+        const __m128i mins_1 = _mm_cvtepi8_epi16(_mm_unpackhi_epi64(mins16, mins16));
+
+        // summs = y[i].bsums * (x[i].scales >> 4) in 16bits*8*2 to 32bits*4*2
+        const __m128i summs_0 = _mm_madd_epi16(mins_0, _mm_loadu_si128((const __m128i*)&y[i].bsums[0]));
+        const __m128i summs_1 = _mm_madd_epi16(mins_1, _mm_loadu_si128((const __m128i*)&y[i].bsums[8]));
+
+        // sumf += -dmin * summs in 32bits*8
+        acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&dmin), _mm256_cvtepi32_ps(MM256_SET_M128I(summs_1, summs_0))), acc);
+
+        const __m128i scales_0 = _mm_cvtepi8_epi16(scales16);
+        const __m128i scales_1 = _mm_cvtepi8_epi16(_mm_unpackhi_epi64(scales16, scales16));
+        const __m128i scales[2] = { scales_0, scales_1 };
+
+        __m128i sumi_0 = _mm_setzero_si128();
+        __m128i sumi_1 = _mm_setzero_si128();
+
+        for (int j = 0; j < QK_K/128; ++j) {
+
+            // load Q8 quants int8*16*8 from block_q8_K.qs[QK_K]
+            const __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_2 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_3 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_4 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_5 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_6 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_7 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+
+            // load 2bits*16*8 from block_q2_K.qs[QK_K/4]
+            __m128i q2bits = _mm_loadu_si128((const __m128i*)q2); q2 += 16;
+            const __m128i q2_0 = _mm_and_si128(q2bits, m3);
+            const __m128i q2_2 = _mm_and_si128(_mm_srli_epi16(q2bits, 2), m3);
+            const __m128i q2_4 = _mm_and_si128(_mm_srli_epi16(q2bits, 4), m3);
+            const __m128i q2_6 = _mm_and_si128(_mm_srli_epi16(q2bits, 6), m3);
+            q2bits = _mm_loadu_si128((const __m128i*)q2); q2 += 16;
+            const __m128i q2_1 = _mm_and_si128(q2bits, m3);
+            const __m128i q2_3 = _mm_and_si128(_mm_srli_epi16(q2bits, 2), m3);
+            const __m128i q2_5 = _mm_and_si128(_mm_srli_epi16(q2bits, 4), m3);
+            const __m128i q2_7 = _mm_and_si128(_mm_srli_epi16(q2bits, 6), m3);
+
+            // isuml = q8[l] * ((q2[l] >> shift) & 3) in 8bits*16*8 to 16bits*8*8
+            __m128i p0 = _mm_maddubs_epi16(q2_0, q8_0);
+            __m128i p1 = _mm_maddubs_epi16(q2_1, q8_1);
+            __m128i p2 = _mm_maddubs_epi16(q2_2, q8_2);
+            __m128i p3 = _mm_maddubs_epi16(q2_3, q8_3);
+            __m128i p4 = _mm_maddubs_epi16(q2_4, q8_4);
+            __m128i p5 = _mm_maddubs_epi16(q2_5, q8_5);
+            __m128i p6 = _mm_maddubs_epi16(q2_6, q8_6);
+            __m128i p7 = _mm_maddubs_epi16(q2_7, q8_7);
+
+            // isum += (x[i].scales[is++] & 0xF) * isuml in 16bits*8*8 to 32bits*4*8
+            __m128i shuffle = _mm_set1_epi16(0x0100);
+            p0 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p0);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p1 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p1);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p2 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p2);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p3 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p3);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p4 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p4);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p5 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p5);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p6 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p6);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p7 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p7);
+
+            p0 = _mm_add_epi32(p0, p1);
+            p2 = _mm_add_epi32(p2, p3);
+            p4 = _mm_add_epi32(p4, p5);
+            p6 = _mm_add_epi32(p6, p7);
+
+            // isum in 32bits*4*2
+            sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p0, p2));
+            sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p4, p6));
+        }
+
+        // sumf += dall * isum - dmin * summs in 32bits
+        __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0);
+        acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&dall), _mm256_cvtepi32_ps(sumi)), acc);
+    }
+
+    *s = hsum_float_8(acc);
+
+#elif defined __riscv_v_intrinsic
+
+    float sumf = 0;
+    uint8_t temp_01[32] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
+
+    for (int i = 0; i < nb; ++i) {
+
+        const uint8_t * q2 = x[i].qs;
+        const  int8_t * q8 = y[i].qs;
+        const uint8_t * sc = x[i].scales;
+
+        const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        size_t vl = 16;
+
+        vuint8m1_t scales = __riscv_vle8_v_u8m1(sc, vl);
+        vuint8m1_t aux = __riscv_vand_vx_u8m1(scales, 0x0F, vl);
+
+        vint16m1_t q8sums = __riscv_vle16_v_i16m1(y[i].bsums, vl);
+
+        vuint8mf2_t scales_2 = __riscv_vle8_v_u8mf2(sc, vl);
+        vuint8mf2_t mins8 = __riscv_vsrl_vx_u8mf2(scales_2, 0x4, vl);
+        vint16m1_t mins = __riscv_vreinterpret_v_u16m1_i16m1(__riscv_vzext_vf2_u16m1(mins8, vl));
+        vint32m2_t prod = __riscv_vwmul_vv_i32m2(q8sums, mins, vl);
+        vint32m1_t vsums = __riscv_vredsum_vs_i32m2_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl);
+
+        sumf  += dmin * __riscv_vmv_x_s_i32m1_i32(vsums);
+
+        vl = 32;
+
+        vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1);
+        vuint8m1_t v_b = __riscv_vle8_v_u8m1(temp_01, vl);
+
+        uint8_t is=0;
+        int isum=0;
+
+        for (int j = 0; j < QK_K/128; ++j) {
+            // load Q2
+            vuint8m1_t q2_x = __riscv_vle8_v_u8m1(q2, vl);
+
+            vuint8m1_t q2_0 = __riscv_vand_vx_u8m1(q2_x, 0x03, vl);
+            vuint8m1_t q2_1 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x2, vl), 0x03 , vl);
+            vuint8m1_t q2_2 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x4, vl), 0x03 , vl);
+            vuint8m1_t q2_3 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x6, vl), 0x03 , vl);
+
+            // duplicate scale elements for product
+            vuint8m1_t sc0 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 0+is, vl), vl);
+            vuint8m1_t sc1 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 2+is, vl), vl);
+            vuint8m1_t sc2 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 4+is, vl), vl);
+            vuint8m1_t sc3 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 6+is, vl), vl);
+
+            vint16m2_t p0 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_0, sc0, vl));
+            vint16m2_t p1 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_1, sc1, vl));
+            vint16m2_t p2 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_2, sc2, vl));
+            vint16m2_t p3 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_3, sc3, vl));
+
+            // load Q8
+            vint8m1_t q8_0 = __riscv_vle8_v_i8m1(q8, vl);
+            vint8m1_t q8_1 = __riscv_vle8_v_i8m1(q8+32, vl);
+            vint8m1_t q8_2 = __riscv_vle8_v_i8m1(q8+64, vl);
+            vint8m1_t q8_3 = __riscv_vle8_v_i8m1(q8+96, vl);
+
+            vint32m4_t s0 = __riscv_vwmul_vv_i32m4(p0, __riscv_vwcvt_x_x_v_i16m2(q8_0, vl), vl);
+            vint32m4_t s1 = __riscv_vwmul_vv_i32m4(p1, __riscv_vwcvt_x_x_v_i16m2(q8_1, vl), vl);
+            vint32m4_t s2 = __riscv_vwmul_vv_i32m4(p2, __riscv_vwcvt_x_x_v_i16m2(q8_2, vl), vl);
+            vint32m4_t s3 = __riscv_vwmul_vv_i32m4(p3, __riscv_vwcvt_x_x_v_i16m2(q8_3, vl), vl);
+
+            vint32m1_t isum0 = __riscv_vredsum_vs_i32m4_i32m1(__riscv_vadd_vv_i32m4(s0, s1, vl), vzero, vl);
+            vint32m1_t isum1 = __riscv_vredsum_vs_i32m4_i32m1(__riscv_vadd_vv_i32m4(s2, s3, vl), isum0, vl);
+
+            isum += __riscv_vmv_x_s_i32m1_i32(isum1);
+
+            q2+=32;  q8+=128;  is=8;
+
+        }
+
+        sumf += dall * isum;
+
+    }
+
+    *s = sumf;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0x3);
+    const vector signed char lowScaleMask = vec_splats((signed char)0xF);
+    const vector int v0 = vec_splats((int32_t)0);
+    const vector unsigned char v2 = vec_splats((unsigned char)0x2);
+    const vector unsigned char v6 = vec_splats((unsigned char)0x6);
+    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector float vxmin = vec_splats(GGML_FP16_TO_FP32(x[i].dmin));
+        vector float vdmin = vec_mul(vxmin, vyd);
+
+        vector signed short q8ysums0 = vec_xl( 0, y[i].bsums);
+        vector signed short q8ysums1 = vec_xl(16, y[i].bsums);
+
+        vector signed char q2xmins = (vector signed char)vec_xl( 0, x[i].scales);
+        vector signed char vscales = vec_and(q2xmins, lowScaleMask);
+
+        q2xmins = vec_sr(q2xmins, v4);
+        vector signed short q2xmins0 = vec_unpackh(q2xmins);
+        vector signed short q2xmins1 = vec_unpackl(q2xmins);
+
+        vector signed int prod0 = vec_mule(q2xmins0, q8ysums0);
+        vector signed int prod1 = vec_mulo(q2xmins0, q8ysums0);
+        vector signed int prod2 = vec_mule(q2xmins1, q8ysums1);
+        vector signed int prod3 = vec_mulo(q2xmins1, q8ysums1);
+
+        vsumf0 = vec_nmsub(vec_ctf(prod0, 0), vdmin, vsumf0);
+        vsumf1 = vec_nmsub(vec_ctf(prod1, 0), vdmin, vsumf1);
+        vsumf2 = vec_nmsub(vec_ctf(prod2, 0), vdmin, vsumf2);
+        vsumf3 = vec_nmsub(vec_ctf(prod3, 0), vdmin, vsumf3);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+        vector signed int vsumi4 = v0;
+        vector signed int vsumi5 = v0;
+        vector signed int vsumi6 = v0;
+        vector signed int vsumi7 = v0;
+
+        const uint8_t * restrict q2 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        for (int j = 0; j < QK_K/128; ++j) {
+            __builtin_prefetch(q2, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            vector signed char qxs0 = (vector signed char)vec_xl( 0, q2);
+            vector signed char qxs1 = (vector signed char)vec_xl(16, q2);
+            q2 += 32;
+
+            vector unsigned char q2x00 = (vector unsigned char)vec_and(qxs0, lowMask);
+            vector unsigned char q2x01 = (vector unsigned char)vec_and(vec_sr(qxs0, v2), lowMask);
+            vector unsigned char q2x02 = (vector unsigned char)vec_and(vec_sr(qxs0, v4), lowMask);
+            vector unsigned char q2x03 = (vector unsigned char)vec_and(vec_sr(qxs0, v6), lowMask);
+            vector unsigned char q2x10 = (vector unsigned char)vec_and(qxs1, lowMask);
+            vector unsigned char q2x11 = (vector unsigned char)vec_and(vec_sr(qxs1, v2), lowMask);
+            vector unsigned char q2x12 = (vector unsigned char)vec_and(vec_sr(qxs1, v4), lowMask);
+            vector unsigned char q2x13 = (vector unsigned char)vec_and(vec_sr(qxs1, v6), lowMask);
+
+            vector signed char q8y00 = vec_xl(  0, q8);
+            vector signed char q8y10 = vec_xl( 16, q8);
+            vector signed char q8y01 = vec_xl( 32, q8);
+            vector signed char q8y11 = vec_xl( 48, q8);
+            vector signed char q8y02 = vec_xl( 64, q8);
+            vector signed char q8y12 = vec_xl( 80, q8);
+            vector signed char q8y03 = vec_xl( 96, q8);
+            vector signed char q8y13 = vec_xl(112, q8);
+            q8 += 128;
+
+            vector signed int qv0 = vec_msum(q8y00, q2x00, v0);
+            vector signed int qv1 = vec_msum(q8y01, q2x01, v0);
+            vector signed int qv2 = vec_msum(q8y02, q2x02, v0);
+            vector signed int qv3 = vec_msum(q8y03, q2x03, v0);
+            vector signed int qv4 = vec_msum(q8y10, q2x10, v0);
+            vector signed int qv5 = vec_msum(q8y11, q2x11, v0);
+            vector signed int qv6 = vec_msum(q8y12, q2x12, v0);
+            vector signed int qv7 = vec_msum(q8y13, q2x13, v0);
+
+            vector signed short vscales_07 = vec_unpackh(vscales);
+            vector signed int vscales_03 = vec_unpackh(vscales_07);
+            vector signed int vscales_47 = vec_unpackl(vscales_07);
+            vector signed int vs0 = vec_splat(vscales_03, 0);
+            vector signed int vs1 = vec_splat(vscales_03, 1);
+            vector signed int vs2 = vec_splat(vscales_03, 2);
+            vector signed int vs3 = vec_splat(vscales_03, 3);
+            vector signed int vs4 = vec_splat(vscales_47, 0);
+            vector signed int vs5 = vec_splat(vscales_47, 1);
+            vector signed int vs6 = vec_splat(vscales_47, 2);
+            vector signed int vs7 = vec_splat(vscales_47, 3);
+            vscales = vec_sld(vscales, vscales, 8);
+
+            vsumi0 = vec_add(vec_mul(qv0, vs0), vsumi0);
+            vsumi1 = vec_add(vec_mul(qv1, vs2), vsumi1);
+            vsumi2 = vec_add(vec_mul(qv2, vs4), vsumi2);
+            vsumi3 = vec_add(vec_mul(qv3, vs6), vsumi3);
+            vsumi4 = vec_add(vec_mul(qv4, vs1), vsumi4);
+            vsumi5 = vec_add(vec_mul(qv5, vs3), vsumi5);
+            vsumi6 = vec_add(vec_mul(qv6, vs5), vsumi6);
+            vsumi7 = vec_add(vec_mul(qv7, vs7), vsumi7);
+        }
+
+        vsumi0 = vec_add(vsumi0, vsumi4);
+        vsumi1 = vec_add(vsumi1, vsumi5);
+        vsumi2 = vec_add(vsumi2, vsumi6);
+        vsumi3 = vec_add(vsumi3, vsumi7);
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined __loongarch_asx
+
+    const __m256i m3 = __lasx_xvreplgr2vr_b(3);
+    const __m128i m4 = __lsx_vreplgr2vr_b(0xF);
+
+    __m256 acc = (__m256)__lasx_xvldi(0);
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        const uint8_t * restrict q2 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        const __m128i mins_and_scales = __lsx_vld((const __m128i*)x[i].scales, 0);
+        const __m128i scales8 = __lsx_vand_v(mins_and_scales, m4);
+        const __m128i mins8 = __lsx_vand_v(__lsx_vsrli_h(mins_and_scales, 4), m4);
+        const __m256i mins = lasx_ext8_16(mins8);
+        const __m256i prod = lasx_madd_h(mins, __lasx_xvld((const __m256i*)y[i].bsums, 0));
+
+        acc = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(dmin), __lasx_xvffint_s_w(prod), acc);
+
+        const __m256i all_scales = lasx_ext8_16(scales8);
+        const __m128i l_scales = lasx_extracti128(all_scales, 0);
+        const __m128i h_scales = lasx_extracti128(all_scales, 1);
+        const __m256i scales[2] = {lasx_insertf128(l_scales, l_scales), lasx_insertf128(h_scales, h_scales)};
+
+        __m256i sumi = __lasx_xvldi(0);
+
+        for (int j = 0; j < QK_K/128; ++j) {
+
+            const __m256i q2bits = __lasx_xvld((const __m256i*)q2, 0); q2 += 32;
+
+            const __m256i q8_0 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8_1 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8_2 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8_3 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+
+            const __m256i q2_0 = __lasx_xvand_v(q2bits, m3);
+            const __m256i q2_1 = __lasx_xvand_v(__lasx_xvsrli_h(q2bits, 2), m3);
+            const __m256i q2_2 = __lasx_xvand_v(__lasx_xvsrli_h(q2bits, 4), m3);
+            const __m256i q2_3 = __lasx_xvand_v(__lasx_xvsrli_h(q2bits, 6), m3);
+
+            __m256i p0 = lasx_maddubs_h(q2_0, q8_0);
+            __m256i p1 = lasx_maddubs_h(q2_1, q8_1);
+            __m256i p2 = lasx_maddubs_h(q2_2, q8_2);
+            __m256i p3 = lasx_maddubs_h(q2_3, q8_3);
+
+            p0 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(0)), p0);
+            p1 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(1)), p1);
+            p2 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(2)), p2);
+            p3 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(3)), p3);
+
+            p0 = __lasx_xvadd_w(p0, p1);
+            p2 = __lasx_xvadd_w(p2, p3);
+
+            sumi = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p0, p2));
+        }
+
+        acc = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(sumi), acc);
+
+    }
+
+    *s = hsum_float_8(acc);
+
+#else
+
+    float sumf = 0;
+
+    for (int i = 0; i < nb; ++i) {
+
+        const uint8_t * q2 = x[i].qs;
+        const  int8_t * q8 = y[i].qs;
+        const uint8_t * sc = x[i].scales;
+
+        int summs = 0;
+        for (int j = 0; j < 16; ++j) {
+            summs += y[i].bsums[j] * (sc[j] >> 4);
+        }
+
+        const float dall = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        int isum = 0;
+        int is = 0;
+        int d;
+        for (int k = 0; k < QK_K/128; ++k) {
+            int shift = 0;
+            for (int j = 0; j < 4; ++j) {
+                d = sc[is++] & 0xF;
+                int isuml = 0;
+                for (int l =  0; l < 16; ++l) isuml += q8[l] * ((q2[l] >> shift) & 3);
+                isum += d * isuml;
+                d = sc[is++] & 0xF;
+                isuml = 0;
+                for (int l = 16; l < 32; ++l) isuml += q8[l] * ((q2[l] >> shift) & 3);
+                isum += d * isuml;
+                shift += 2;
+                q8 += 32;
+            }
+            q2 += 32;
+        }
+        sumf += dall * isum - dmin * summs;
+    }
+    *s = sumf;
+#endif
+}
+
+void ggml_vec_dot_q3_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const uint32_t kmask1 = 0x03030303;
+    const uint32_t kmask2 = 0x0f0f0f0f;
+
+    const block_q3_K * restrict x = vx;
+    const block_q8_K * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+#ifdef __ARM_NEON
+
+    uint32_t aux[3];
+    uint32_t utmp[4];
+
+    const uint8x16_t m3b = vdupq_n_u8(0x3);
+    const int32x4_t  vzero = vdupq_n_s32(0);
+
+    const uint8x16_t m0 = vdupq_n_u8(1);
+    const uint8x16_t m1 = vshlq_n_u8(m0, 1);
+    const uint8x16_t m2 = vshlq_n_u8(m0, 2);
+    const uint8x16_t m3 = vshlq_n_u8(m0, 3);
+    const int8_t m32 = 32;
+
+    ggml_int8x16x4_t q3bytes;
+
+    float sum = 0;
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+
+        const uint8_t * restrict q3 = x[i].qs;
+        const uint8_t * restrict qh = x[i].hmask;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        ggml_uint8x16x2_t qhbits = ggml_vld1q_u8_x2(qh);
+
+        ggml_uint8x16x4_t q3h;
+
+        int32_t isum = 0;
+
+        // Set up scales
+        memcpy(aux, x[i].scales, 12);
+        utmp[3] = ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4);
+        utmp[2] = ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4);
+        utmp[1] = (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4);
+        utmp[0] = (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4);
+
+        int8_t * scale = (int8_t *)utmp;
+        for (int j = 0; j < 16; ++j) scale[j] -= m32;
+
+        for (int j = 0; j < QK_K/128; ++j) {
+
+            const ggml_uint8x16x2_t q3bits = ggml_vld1q_u8_x2(q3); q3 += 32;
+            const ggml_int8x16x4_t q8bytes_1 = ggml_vld1q_s8_x4(q8); q8 += 64;
+            const ggml_int8x16x4_t q8bytes_2 = ggml_vld1q_s8_x4(q8); q8 += 64;
+
+            q3h.val[0] = vshlq_n_u8(vbicq_u8(m0, qhbits.val[0]), 2);
+            q3h.val[1] = vshlq_n_u8(vbicq_u8(m0, qhbits.val[1]), 2);
+            q3h.val[2] = vshlq_n_u8(vbicq_u8(m1, qhbits.val[0]), 1);
+            q3h.val[3] = vshlq_n_u8(vbicq_u8(m1, qhbits.val[1]), 1);
+
+            q3bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(q3bits.val[0], m3b)), vreinterpretq_s8_u8(q3h.val[0]));
+            q3bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(q3bits.val[1], m3b)), vreinterpretq_s8_u8(q3h.val[1]));
+            q3bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[0], 2), m3b)), vreinterpretq_s8_u8(q3h.val[2]));
+            q3bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[1], 2), m3b)), vreinterpretq_s8_u8(q3h.val[3]));
+
+            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[0], q8bytes_1.val[0])) * scale[0];
+            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[1], q8bytes_1.val[1])) * scale[1];
+            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[2], q8bytes_1.val[2])) * scale[2];
+            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[3], q8bytes_1.val[3])) * scale[3];
+
+            scale += 4;
+
+            q3h.val[0] = vbicq_u8(m2, qhbits.val[0]);
+            q3h.val[1] = vbicq_u8(m2, qhbits.val[1]);
+            q3h.val[2] = vshrq_n_u8(vbicq_u8(m3, qhbits.val[0]), 1);
+            q3h.val[3] = vshrq_n_u8(vbicq_u8(m3, qhbits.val[1]), 1);
+
+            q3bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[0], 4), m3b)), vreinterpretq_s8_u8(q3h.val[0]));
+            q3bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[1], 4), m3b)), vreinterpretq_s8_u8(q3h.val[1]));
+            q3bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[0], 6), m3b)), vreinterpretq_s8_u8(q3h.val[2]));
+            q3bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vshrq_n_u8(q3bits.val[1], 6), m3b)), vreinterpretq_s8_u8(q3h.val[3]));
+
+            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[0], q8bytes_2.val[0])) * scale[0];
+            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[1], q8bytes_2.val[1])) * scale[1];
+            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[2], q8bytes_2.val[2])) * scale[2];
+            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q3bytes.val[3], q8bytes_2.val[3])) * scale[3];
+
+            scale += 4;
+
+            if (j == 0) {
+                qhbits.val[0] = vshrq_n_u8(qhbits.val[0], 4);
+                qhbits.val[1] = vshrq_n_u8(qhbits.val[1], 4);
+            }
+
+        }
+        sum += d * isum;
+
+    }
+
+    *s = sum;
+
+#elif defined __AVX2__
+
+    const __m256i m3 = _mm256_set1_epi8(3);
+    const __m256i mone = _mm256_set1_epi8(1);
+    const __m128i m32 = _mm_set1_epi8(32);
+
+    __m256 acc = _mm256_setzero_ps();
+
+    uint32_t aux[3];
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+
+        const uint8_t * restrict q3 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        // Set up scales
+        memcpy(aux, x[i].scales, 12);
+        __m128i scales128 = _mm_set_epi32(
+                ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4),
+                ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4),
+                (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4),
+                (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4));
+        scales128 = _mm_sub_epi8(scales128, m32);
+        const __m256i all_scales = _mm256_cvtepi8_epi16(scales128);
+        const __m128i l_scales = _mm256_extracti128_si256(all_scales, 0);
+        const __m128i h_scales = _mm256_extracti128_si256(all_scales, 1);
+        const __m256i scales[2] = {MM256_SET_M128I(l_scales, l_scales), MM256_SET_M128I(h_scales, h_scales)};
+
+        // high bit
+        const __m256i hbits = _mm256_loadu_si256((const __m256i*)x[i].hmask);
+
+        // integer accumulator
+        __m256i sumi = _mm256_setzero_si256();
+
+        int bit = 0;
+        int is  = 0;
+
+        for (int j = 0; j < QK_K/128; ++j) {
+            // load low 2 bits
+            const __m256i q3bits = _mm256_loadu_si256((const __m256i*)q3); q3 += 32;
+
+            // prepare low and high bits
+            const __m256i q3l_0 = _mm256_and_si256(q3bits, m3);
+            const __m256i q3h_0 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2);
+            ++bit;
+
+            const __m256i q3l_1 = _mm256_and_si256(_mm256_srli_epi16(q3bits, 2), m3);
+            const __m256i q3h_1 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2);
+            ++bit;
+
+            const __m256i q3l_2 = _mm256_and_si256(_mm256_srli_epi16(q3bits, 4), m3);
+            const __m256i q3h_2 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2);
+            ++bit;
+
+            const __m256i q3l_3 = _mm256_and_si256(_mm256_srli_epi16(q3bits, 6), m3);
+            const __m256i q3h_3 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_andnot_si256(hbits, _mm256_slli_epi16(mone, bit)), bit), 2);
+            ++bit;
+
+            // load Q8 quants
+            const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8_3 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+
+            // Dot product: we multiply the 2 low bits and 1 high bit part separately, so we can use _mm256_maddubs_epi16,
+            // and then subtract. The high bit part has the 2 already subtracted (and so, it is zero if the high bit was not set,
+            // and 2 if the high bit was set)
+            __m256i q8s_0 = _mm256_maddubs_epi16(q3h_0, q8_0);
+            __m256i q8s_1 = _mm256_maddubs_epi16(q3h_1, q8_1);
+            __m256i q8s_2 = _mm256_maddubs_epi16(q3h_2, q8_2);
+            __m256i q8s_3 = _mm256_maddubs_epi16(q3h_3, q8_3);
+
+            __m256i p16_0 = _mm256_maddubs_epi16(q3l_0, q8_0);
+            __m256i p16_1 = _mm256_maddubs_epi16(q3l_1, q8_1);
+            __m256i p16_2 = _mm256_maddubs_epi16(q3l_2, q8_2);
+            __m256i p16_3 = _mm256_maddubs_epi16(q3l_3, q8_3);
+
+            p16_0 = _mm256_sub_epi16(p16_0, q8s_0);
+            p16_1 = _mm256_sub_epi16(p16_1, q8s_1);
+            p16_2 = _mm256_sub_epi16(p16_2, q8s_2);
+            p16_3 = _mm256_sub_epi16(p16_3, q8s_3);
+
+            // multiply with scales
+            p16_0 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 0)), p16_0);
+            p16_1 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 1)), p16_1);
+            p16_2 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 2)), p16_2);
+            p16_3 = _mm256_madd_epi16(_mm256_shuffle_epi8(scales[j], get_scale_shuffle_q3k(is + 3)), p16_3);
+
+            // accumulate
+            p16_0 = _mm256_add_epi32(p16_0, p16_1);
+            p16_2 = _mm256_add_epi32(p16_2, p16_3);
+            sumi  = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_2));
+
+        }
+
+        // multiply with block scale and accumulate
+        acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc);
+
+    }
+
+    *s = hsum_float_8(acc);
+
+#elif defined __AVX__
+
+    const __m128i m3 = _mm_set1_epi8(3);
+    const __m128i mone = _mm_set1_epi8(1);
+    const __m128i m32 = _mm_set1_epi8(32);
+    const __m128i m2 = _mm_set1_epi8(2);
+
+    __m256 acc = _mm256_setzero_ps();
+
+    const uint32_t *aux;
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+
+        const uint8_t * restrict q3 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        // Set up scales
+        aux = (const uint32_t *)x[i].scales;
+        __m128i scales128 = _mm_set_epi32(
+                ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4),
+                ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4),
+                (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4),
+                (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4));
+        scales128 = _mm_sub_epi8(scales128, m32);
+        const __m128i scales_0 = _mm_cvtepi8_epi16(scales128);
+        const __m128i scales_1 = _mm_cvtepi8_epi16(_mm_unpackhi_epi64(scales128, scales128));
+        const __m128i scales[2] = { scales_0, scales_1 };
+
+        // high bit *128*2 from block_q3_K.hmask[QK_K/8]
+        const __m128i hbits_0 = _mm_loadu_si128((const __m128i*)&x[i].hmask[0]);
+        const __m128i hbits_1 = _mm_loadu_si128((const __m128i*)&x[i].hmask[16]);
+
+        // integer accumulator
+        __m128i sumi_0 = _mm_setzero_si128();
+        __m128i sumi_1 = _mm_setzero_si128();
+
+        for (int j = 0; j < QK_K/128; ++j) {
+            // load low 2 bits *64*2 from block_q3_K.qs[QK_K/4]
+            const __m128i q3bits_0 = _mm_loadu_si128((const __m128i*)q3); q3 += 16;
+            const __m128i q3bits_1 = _mm_loadu_si128((const __m128i*)q3); q3 += 16;
+
+            // prepare low and high bits
+            const int bit = j << 2;
+
+            const __m128i q3l_0 = _mm_and_si128(q3bits_0, m3);
+            const __m128i q3l_1 = _mm_and_si128(q3bits_1, m3);
+            const __m128i q3h_0 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit)), bit), 2);
+            const __m128i q3h_1 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit)), bit), 2);
+
+            const __m128i q3l_2 = _mm_and_si128(_mm_srli_epi16(q3bits_0, 2), m3);
+            const __m128i q3l_3 = _mm_and_si128(_mm_srli_epi16(q3bits_1, 2), m3);
+            const __m128i q3h_2 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit+1)), bit+1), 2);
+            const __m128i q3h_3 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit+1)), bit+1), 2);
+
+            const __m128i q3l_4 = _mm_and_si128(_mm_srli_epi16(q3bits_0, 4), m3);
+            const __m128i q3l_5 = _mm_and_si128(_mm_srli_epi16(q3bits_1, 4), m3);
+            const __m128i q3h_4 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit+2)), bit+2), 2);
+            const __m128i q3h_5 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit+2)), bit+2), 2);
+
+            const __m128i q3l_6 = _mm_and_si128(_mm_srli_epi16(q3bits_0, 6), m3);
+            const __m128i q3l_7 = _mm_and_si128(_mm_srli_epi16(q3bits_1, 6), m3);
+            const __m128i q3h_6 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_0, _mm_slli_epi16(mone, bit+3)), bit+3), 2);
+            const __m128i q3h_7 = _mm_slli_epi16(_mm_srli_epi16(_mm_andnot_si128(hbits_1, _mm_slli_epi16(mone, bit+3)), bit+3), 2);
+
+            // load Q8 quants from block_q8_K.qs[QK_K]
+            const __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_2 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_3 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_4 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_5 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_6 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_7 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+
+            // Dot product: we multiply the 2 low bits and 1 high bit part separately, so we can use _mm256_maddubs_epi16,
+            // and then subtract. The high bit part has the 2 already subtracted (and so, it is zero if the high bit was not set,
+            // and 2 if the high bit was set)
+            __m128i q8s_0 = _mm_maddubs_epi16(q3h_0, q8_0);
+            __m128i q8s_1 = _mm_maddubs_epi16(q3h_1, q8_1);
+            __m128i q8s_2 = _mm_maddubs_epi16(q3h_2, q8_2);
+            __m128i q8s_3 = _mm_maddubs_epi16(q3h_3, q8_3);
+            __m128i q8s_4 = _mm_maddubs_epi16(q3h_4, q8_4);
+            __m128i q8s_5 = _mm_maddubs_epi16(q3h_5, q8_5);
+            __m128i q8s_6 = _mm_maddubs_epi16(q3h_6, q8_6);
+            __m128i q8s_7 = _mm_maddubs_epi16(q3h_7, q8_7);
+
+            __m128i p16_0 = _mm_maddubs_epi16(q3l_0, q8_0);
+            __m128i p16_1 = _mm_maddubs_epi16(q3l_1, q8_1);
+            __m128i p16_2 = _mm_maddubs_epi16(q3l_2, q8_2);
+            __m128i p16_3 = _mm_maddubs_epi16(q3l_3, q8_3);
+            __m128i p16_4 = _mm_maddubs_epi16(q3l_4, q8_4);
+            __m128i p16_5 = _mm_maddubs_epi16(q3l_5, q8_5);
+            __m128i p16_6 = _mm_maddubs_epi16(q3l_6, q8_6);
+            __m128i p16_7 = _mm_maddubs_epi16(q3l_7, q8_7);
+
+            p16_0 = _mm_sub_epi16(p16_0, q8s_0);
+            p16_1 = _mm_sub_epi16(p16_1, q8s_1);
+            p16_2 = _mm_sub_epi16(p16_2, q8s_2);
+            p16_3 = _mm_sub_epi16(p16_3, q8s_3);
+            p16_4 = _mm_sub_epi16(p16_4, q8s_4);
+            p16_5 = _mm_sub_epi16(p16_5, q8s_5);
+            p16_6 = _mm_sub_epi16(p16_6, q8s_6);
+            p16_7 = _mm_sub_epi16(p16_7, q8s_7);
+
+            // multiply with scales
+            __m128i shuffle = _mm_set1_epi16(0x0100);
+            p16_0 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_0);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p16_1 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_1);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p16_2 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_2);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p16_3 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_3);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p16_4 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_4);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p16_5 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_5);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p16_6 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_6);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            p16_7 = _mm_madd_epi16(_mm_shuffle_epi8(scales[j], shuffle), p16_7);
+
+            // accumulate
+            p16_0 = _mm_add_epi32(p16_0, p16_1);
+            p16_2 = _mm_add_epi32(p16_2, p16_3);
+            p16_4 = _mm_add_epi32(p16_4, p16_5);
+            p16_6 = _mm_add_epi32(p16_6, p16_7);
+            sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_0, p16_2));
+            sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_4, p16_6));
+
+        }
+
+        // multiply with block scale and accumulate
+        __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0);
+        acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi)), acc);
+
+    }
+
+    *s = hsum_float_8(acc);
+
+#elif defined __riscv_v_intrinsic
+
+    uint32_t aux[3];
+    uint32_t utmp[4];
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+
+        const uint8_t * restrict q3 = x[i].qs;
+        const uint8_t * restrict qh = x[i].hmask;
+        const  int8_t * restrict q8 = y[i].qs;
+
+        memcpy(aux, x[i].scales, 12);
+        utmp[3] = ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4);
+        utmp[2] = ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4);
+        utmp[1] = (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4);
+        utmp[0] = (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4);
+
+        int8_t * scale = (int8_t *)utmp;
+        for (int j = 0; j < 16; ++j) scale[j] -= 32;
+
+
+        size_t vl = 32;
+        uint8_t m =  1;
+
+        vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1);
+        vuint8m1_t vqh = __riscv_vle8_v_u8m1(qh, vl);
+
+        int sum_t = 0;
+
+        for (int j = 0; j < QK_K; j += 128) {
+
+            vl = 32;
+
+            // load Q3
+            vuint8m1_t q3_x = __riscv_vle8_v_u8m1(q3, vl);
+
+            vint8m1_t q3_0 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q3_x, 0x03, vl));
+            vint8m1_t q3_1 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x2, vl), 0x03 , vl));
+            vint8m1_t q3_2 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x4, vl), 0x03 , vl));
+            vint8m1_t q3_3 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x6, vl), 0x03 , vl));
+
+            // compute mask for subtraction
+            vuint8m1_t qh_m0 = __riscv_vand_vx_u8m1(vqh, m, vl);
+            vbool8_t vmask_0 = __riscv_vmseq_vx_u8m1_b8(qh_m0, 0, vl);
+            vint8m1_t q3_m0 = __riscv_vsub_vx_i8m1_m(vmask_0, q3_0, 0x4, vl);
+            m <<= 1;
+
+            vuint8m1_t qh_m1 = __riscv_vand_vx_u8m1(vqh, m, vl);
+            vbool8_t vmask_1 = __riscv_vmseq_vx_u8m1_b8(qh_m1, 0, vl);
+            vint8m1_t q3_m1 = __riscv_vsub_vx_i8m1_m(vmask_1, q3_1, 0x4, vl);
+            m <<= 1;
+
+            vuint8m1_t qh_m2 = __riscv_vand_vx_u8m1(vqh, m, vl);
+            vbool8_t vmask_2 = __riscv_vmseq_vx_u8m1_b8(qh_m2, 0, vl);
+            vint8m1_t q3_m2 = __riscv_vsub_vx_i8m1_m(vmask_2, q3_2, 0x4, vl);
+            m <<= 1;
+
+            vuint8m1_t qh_m3 = __riscv_vand_vx_u8m1(vqh, m, vl);
+            vbool8_t vmask_3 = __riscv_vmseq_vx_u8m1_b8(qh_m3, 0, vl);
+            vint8m1_t q3_m3 = __riscv_vsub_vx_i8m1_m(vmask_3, q3_3, 0x4, vl);
+            m <<= 1;
+
+            // load Q8 and take product with Q3
+            vint16m2_t a0 = __riscv_vwmul_vv_i16m2(q3_m0, __riscv_vle8_v_i8m1(q8, vl), vl);
+            vint16m2_t a1 = __riscv_vwmul_vv_i16m2(q3_m1, __riscv_vle8_v_i8m1(q8+32, vl), vl);
+            vint16m2_t a2 = __riscv_vwmul_vv_i16m2(q3_m2, __riscv_vle8_v_i8m1(q8+64, vl), vl);
+            vint16m2_t a3 = __riscv_vwmul_vv_i16m2(q3_m3, __riscv_vle8_v_i8m1(q8+96, vl), vl);
+
+            vl = 16;
+
+            // retrieve lane to multiply with scale
+            vint32m2_t aux0_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a0, 0), (scale[0]), vl);
+            vint32m2_t aux0_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a0, 1), (scale[1]), vl);
+            vint32m2_t aux1_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a1, 0), (scale[2]), vl);
+            vint32m2_t aux1_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a1, 1), (scale[3]), vl);
+            vint32m2_t aux2_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a2, 0), (scale[4]), vl);
+            vint32m2_t aux2_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a2, 1), (scale[5]), vl);
+            vint32m2_t aux3_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a3, 0), (scale[6]), vl);
+            vint32m2_t aux3_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a3, 1), (scale[7]), vl);
+
+            vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux0_0, aux0_1, vl), vzero, vl);
+            vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux1_0, aux1_1, vl), isum0, vl);
+            vint32m1_t isum2 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux2_0, aux2_1, vl), isum1, vl);
+            vint32m1_t isum3 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux3_0, aux3_1, vl), isum2, vl);
+
+            sum_t +=  __riscv_vmv_x_s_i32m1_i32(isum3);
+
+            q3 += 32;    q8 += 128;   scale += 8;
+
+        }
+
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+
+        sumf += d*sum_t;
+
+    }
+
+    *s = sumf;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0x3);
+    const vector signed char lowMask1 = vec_splats((int8_t)0xf);
+    const vector signed char lowMask2 = vec_splats((int8_t)0x30);
+    const vector int v0 = vec_splats((int32_t)0);
+    const vector signed char v1 = vec_splats((signed char)0x1);
+    const vector unsigned char v2 = vec_splats((unsigned char)0x2);
+    const vector unsigned char v3 = vec_splats((unsigned char)0x3);
+    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
+    const vector unsigned char v6 = vec_splats((unsigned char)0x6);
+    const vector signed char off = vec_splats((signed char)0x20);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        UNUSED(kmask1);
+        UNUSED(kmask2);
+
+        vector signed char u0 = (vector signed char)vec_xl_len(x[i].scales, 8);
+        vector signed char u1 = vec_and(u0, lowMask1);
+        vector signed char u2 = (vector signed char)vec_xl_len(x[i].scales + 8, 4);
+        vector signed char u3 = (vector signed char)vec_mergeh((vector signed int)u2, (vector signed int)vec_sr(u2, v2));
+        vector signed char u30 = vec_sl(vec_and(u3, lowMask), v4);
+        vector signed char u31 = vec_and(u3, lowMask2);
+
+        u1 = vec_or(u1, u30);
+        u2 = vec_or(vec_sr(u0, v4), u31);
+
+        vector signed char vscales = (vector signed char)vec_mergeh((vector signed long long)u1, (vector signed long long)u2);
+        vector signed char qxhs0 = (vector signed char)vec_xl( 0, x[i].hmask);
+        vector signed char qxhs1 = (vector signed char)vec_xl(16, x[i].hmask);
+
+        vscales = vec_sub(vscales, off);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+        vector signed int vsumi4 = v0;
+        vector signed int vsumi5 = v0;
+        vector signed int vsumi6 = v0;
+        vector signed int vsumi7 = v0;
+
+        const uint8_t * restrict q3 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        for (int j = 0; j < QK_K/128; ++j) {
+            __builtin_prefetch(q3, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            vector signed char qxs0 = (vector signed char)vec_xl( 0, q3);
+            vector signed char qxs1 = (vector signed char)vec_xl(16, q3);
+            q3 += 32;
+
+            //the low 2 bits
+            vector signed char qxs00 = vec_and(qxs0, lowMask);
+            vector signed char qxs01 = vec_and(vec_sr(qxs0, v2), lowMask);
+            vector signed char qxs02 = vec_and(vec_sr(qxs0, v4), lowMask);
+            vector signed char qxs03 = vec_and(vec_sr(qxs0, v6), lowMask);
+            vector signed char qxs10 = vec_and(qxs1, lowMask);
+            vector signed char qxs11 = vec_and(vec_sr(qxs1, v2), lowMask);
+            vector signed char qxs12 = vec_and(vec_sr(qxs1, v4), lowMask);
+            vector signed char qxs13 = vec_and(vec_sr(qxs1, v6), lowMask);
+
+            //the 3rd bit
+            vector signed char qxh00 = vec_sl(vec_andc(v1, qxhs0), v2);
+            vector signed char qxh01 = vec_sl(vec_andc(v1, vec_sr(qxhs0, (vector unsigned char)v1)), v2);
+            vector signed char qxh02 = vec_sl(vec_andc(v1, vec_sr(qxhs0, v2)), v2);
+            vector signed char qxh03 = vec_sl(vec_andc(v1, vec_sr(qxhs0, v3)), v2);
+            vector signed char qxh10 = vec_sl(vec_andc(v1, qxhs1), v2);
+            vector signed char qxh11 = vec_sl(vec_andc(v1, vec_sr(qxhs1, (vector unsigned char)v1)), v2);
+            vector signed char qxh12 = vec_sl(vec_andc(v1, vec_sr(qxhs1, v2)), v2);
+            vector signed char qxh13 = vec_sl(vec_andc(v1, vec_sr(qxhs1, v3)), v2);
+            qxhs0 = vec_sr(qxhs0, v4);
+            qxhs1 = vec_sr(qxhs1, v4);
+
+            vector signed char q3x00 = vec_sub(qxs00, qxh00);
+            vector signed char q3x01 = vec_sub(qxs01, qxh01);
+            vector signed char q3x02 = vec_sub(qxs02, qxh02);
+            vector signed char q3x03 = vec_sub(qxs03, qxh03);
+            vector signed char q3x10 = vec_sub(qxs10, qxh10);
+            vector signed char q3x11 = vec_sub(qxs11, qxh11);
+            vector signed char q3x12 = vec_sub(qxs12, qxh12);
+            vector signed char q3x13 = vec_sub(qxs13, qxh13);
+
+            vector signed char q8y00 = vec_xl(  0, q8);
+            vector signed char q8y10 = vec_xl( 16, q8);
+            vector signed char q8y01 = vec_xl( 32, q8);
+            vector signed char q8y11 = vec_xl( 48, q8);
+            vector signed char q8y02 = vec_xl( 64, q8);
+            vector signed char q8y12 = vec_xl( 80, q8);
+            vector signed char q8y03 = vec_xl( 96, q8);
+            vector signed char q8y13 = vec_xl(112, q8);
+            q8 += 128;
+
+            vector signed short vscales_h = vec_unpackh(vscales);
+            vector signed short vs0 = vec_splat(vscales_h, 0);
+            vector signed short vs1 = vec_splat(vscales_h, 1);
+            vector signed short vs2 = vec_splat(vscales_h, 2);
+            vector signed short vs3 = vec_splat(vscales_h, 3);
+            vector signed short vs4 = vec_splat(vscales_h, 4);
+            vector signed short vs5 = vec_splat(vscales_h, 5);
+            vector signed short vs6 = vec_splat(vscales_h, 6);
+            vector signed short vs7 = vec_splat(vscales_h, 7);
+            vscales = vec_sld(vscales, vscales, 8);
+
+            vector signed short qv00 = vec_add(vec_mule(q3x00, q8y00), vec_mulo(q3x00, q8y00));
+            vector signed short qv01 = vec_add(vec_mule(q3x01, q8y01), vec_mulo(q3x01, q8y01));
+            vector signed short qv02 = vec_add(vec_mule(q3x02, q8y02), vec_mulo(q3x02, q8y02));
+            vector signed short qv03 = vec_add(vec_mule(q3x03, q8y03), vec_mulo(q3x03, q8y03));
+            vector signed short qv10 = vec_add(vec_mule(q3x10, q8y10), vec_mulo(q3x10, q8y10));
+            vector signed short qv11 = vec_add(vec_mule(q3x11, q8y11), vec_mulo(q3x11, q8y11));
+            vector signed short qv12 = vec_add(vec_mule(q3x12, q8y12), vec_mulo(q3x12, q8y12));
+            vector signed short qv13 = vec_add(vec_mule(q3x13, q8y13), vec_mulo(q3x13, q8y13));
+
+            vsumi0 = vec_msum(qv00, vs0, vsumi0);
+            vsumi1 = vec_msum(qv01, vs2, vsumi1);
+            vsumi2 = vec_msum(qv02, vs4, vsumi2);
+            vsumi3 = vec_msum(qv03, vs6, vsumi3);
+            vsumi4 = vec_msum(qv10, vs1, vsumi4);
+            vsumi5 = vec_msum(qv11, vs3, vsumi5);
+            vsumi6 = vec_msum(qv12, vs5, vsumi6);
+            vsumi7 = vec_msum(qv13, vs7, vsumi7);
+        }
+
+        vsumi0 = vec_add(vsumi0, vsumi4);
+        vsumi1 = vec_add(vsumi1, vsumi5);
+        vsumi2 = vec_add(vsumi2, vsumi6);
+        vsumi3 = vec_add(vsumi3, vsumi7);
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined __loongarch_asx
+
+    const __m256i m3 = __lasx_xvreplgr2vr_b(3);
+    const __m256i mone = __lasx_xvreplgr2vr_b(1);
+    const __m128i m32 = __lsx_vreplgr2vr_b(32);
+
+    __m256 acc = (__m256)__lasx_xvldi(0);
+
+    uint32_t aux[3];
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const uint8_t * restrict q3 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+        // Set up scales
+        memcpy(aux, x[i].scales, 12);
+        __m128i scales128 = lsx_set_w(
+                ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4),
+                ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4),
+                (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4),
+                (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4));
+        scales128 = __lsx_vsub_b(scales128, m32);
+        const __m256i all_scales = lasx_ext8_16(scales128);
+        const __m128i l_scales = lasx_extracti128(all_scales, 0);
+        const __m128i h_scales = lasx_extracti128(all_scales, 1);
+        const __m256i scales[2] = {lasx_insertf128(l_scales, l_scales), lasx_insertf128(h_scales, h_scales)};
+
+        // high bit
+        const __m256i hbits = __lasx_xvld((const __m256i*)x[i].hmask, 0);
+
+        // integer accumulator
+        __m256i sumi = __lasx_xvldi(0);
+
+        int bit = 0;
+        int is  = 0;
+        __m256i xvbit;
+
+
+        for (int j = 0; j < QK_K/128; ++j) {
+            // load low 2 bits
+            const __m256i q3bits = __lasx_xvld((const __m256i*)q3, 0); q3 += 32;
+
+            xvbit = __lasx_xvreplgr2vr_h(bit);
+            // prepare low and high bits
+            const __m256i q3l_0 = __lasx_xvand_v(q3bits, m3);
+            const __m256i q3h_0 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvandn_v(hbits, __lasx_xvsll_h(mone, xvbit)), xvbit), 2);
+            ++bit;
+
+            xvbit = __lasx_xvreplgr2vr_h(bit);
+            const __m256i q3l_1 = __lasx_xvand_v(__lasx_xvsrli_h(q3bits, 2), m3);
+            const __m256i q3h_1 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvandn_v(hbits, __lasx_xvsll_h(mone, xvbit)), xvbit), 2);
+            ++bit;
+
+            xvbit = __lasx_xvreplgr2vr_h(bit);
+            const __m256i q3l_2 = __lasx_xvand_v(__lasx_xvsrli_h(q3bits, 4), m3);
+            const __m256i q3h_2 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvandn_v(hbits, __lasx_xvsll_h(mone, xvbit)), xvbit), 2);
+            ++bit;
+
+            xvbit = __lasx_xvreplgr2vr_h(bit);
+            const __m256i q3l_3 = __lasx_xvand_v(__lasx_xvsrli_h(q3bits, 6), m3);
+            const __m256i q3h_3 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvandn_v(hbits, __lasx_xvsll_h(mone, xvbit)), xvbit), 2);
+            ++bit;
+
+            // load Q8 quants
+            const __m256i q8_0 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8_1 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8_2 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8_3 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+
+            // Dot product: we multiply the 2 low bits and 1 high bit part separately, so we can use lasx_maddubs_h,
+            // and then subtract. The high bit part has the 2 already subtracted (and so, it is zero if the high bit was not set,
+            // and 2 if the high bit was set)
+            __m256i q8s_0 = lasx_maddubs_h(q3h_0, q8_0);
+            __m256i q8s_1 = lasx_maddubs_h(q3h_1, q8_1);
+            __m256i q8s_2 = lasx_maddubs_h(q3h_2, q8_2);
+            __m256i q8s_3 = lasx_maddubs_h(q3h_3, q8_3);
+
+            __m256i p16_0 = lasx_maddubs_h(q3l_0, q8_0);
+            __m256i p16_1 = lasx_maddubs_h(q3l_1, q8_1);
+            __m256i p16_2 = lasx_maddubs_h(q3l_2, q8_2);
+            __m256i p16_3 = lasx_maddubs_h(q3l_3, q8_3);
+
+            p16_0 = __lasx_xvsub_h(p16_0, q8s_0);
+            p16_1 = __lasx_xvsub_h(p16_1, q8s_1);
+            p16_2 = __lasx_xvsub_h(p16_2, q8s_2);
+            p16_3 = __lasx_xvsub_h(p16_3, q8s_3);
+
+            // multiply with scales
+            p16_0 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(is + 0)), p16_0);
+            p16_1 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(is + 1)), p16_1);
+            p16_2 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(is + 2)), p16_2);
+            p16_3 = lasx_madd_h(lasx_shuffle_b(scales[j], get_scale_shuffle_q3k(is + 3)), p16_3);
+
+            // accumulate
+            p16_0 = __lasx_xvadd_w(p16_0, p16_1);
+            p16_2 = __lasx_xvadd_w(p16_2, p16_3);
+            sumi  = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p16_0, p16_2));
+        }
+        // multiply with block scale and accumulate
+        acc = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(sumi), acc);//FIXME
+    }
+
+    *s = hsum_float_8(acc);
+
+#else
+    // scalar version
+    // This function is written like this so the compiler can manage to vectorize most of it
+    // Using -Ofast, GCC and clang manage to produce code that is within a factor of 2 or so from the
+    // manually vectorized version above. Every other version I tried would run at least 4 times slower.
+    // The ideal situation would be if we could just write the code once, and the compiler would
+    // automatically produce the best possible set of machine instructions, instead of us having to manually
+    // write vectorized versions for AVX, ARM_NEON, etc.
+
+    int8_t  aux8[QK_K];
+    int16_t aux16[8];
+    float   sums [8];
+    int32_t aux32[8];
+    memset(sums, 0, 8*sizeof(float));
+
+    uint32_t auxs[4];
+    const int8_t * scales = (const int8_t*)auxs;
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+        const uint8_t * restrict q3 = x[i].qs;
+        const uint8_t * restrict hm = x[i].hmask;
+        const  int8_t * restrict q8 = y[i].qs;
+        memset(aux32, 0, 8*sizeof(int32_t));
+        int8_t * restrict a = aux8;
+        uint8_t m = 1;
+        for (int j = 0; j < QK_K; j += 128) {
+            for (int l = 0; l < 32; ++l) a[l] = q3[l] & 3;
+            for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4);
+            a += 32; m <<= 1;
+            for (int l = 0; l < 32; ++l) a[l] = (q3[l] >> 2) & 3;
+            for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4);
+            a += 32; m <<= 1;
+            for (int l = 0; l < 32; ++l) a[l] = (q3[l] >> 4) & 3;
+            for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4);
+            a += 32; m <<= 1;
+            for (int l = 0; l < 32; ++l) a[l] = (q3[l] >> 6) & 3;
+            for (int l = 0; l < 32; ++l) a[l] -= (hm[l] & m ? 0 : 4);
+            a += 32; m <<= 1;
+            q3 += 32;
+        }
+        a = aux8;
+
+        memcpy(auxs, x[i].scales, 12);
+        uint32_t tmp = auxs[2];
+        auxs[2] = ((auxs[0] >> 4) & kmask2) | (((tmp >> 4) & kmask1) << 4);
+        auxs[3] = ((auxs[1] >> 4) & kmask2) | (((tmp >> 6) & kmask1) << 4);
+        auxs[0] = (auxs[0] & kmask2) | (((tmp >> 0) & kmask1) << 4);
+        auxs[1] = (auxs[1] & kmask2) | (((tmp >> 2) & kmask1) << 4);
+        for (int j = 0; j < QK_K/16; ++j) {
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += (scales[j] - 32) * aux16[l];
+            q8 += 8; a += 8;
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += (scales[j] - 32) * aux16[l];
+            q8 += 8; a += 8;
+        }
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l];
+    }
+    for (int l = 0; l < 8; ++l) sumf += sums[l];
+    *s = sumf;
+
+#endif
+
+}
+
+void ggml_vec_dot_q4_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_q4_K * restrict x = vx;
+    const block_q8_K * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+    static const uint32_t kmask1 = 0x3f3f3f3f;
+    static const uint32_t kmask2 = 0x0f0f0f0f;
+    static const uint32_t kmask3 = 0x03030303;
+
+    uint32_t utmp[4];
+
+#ifdef __ARM_NEON
+    const uint8x16_t m4b = vdupq_n_u8(0xf);
+    const int32x4_t mzero = vdupq_n_s32(0);
+
+    ggml_int8x16x2_t q4bytes;
+    ggml_int8x16x2_t q8bytes;
+
+    float sumf = 0;
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        const int16x8_t q8sums = vpaddq_s16(vld1q_s16(y[i].bsums), vld1q_s16(y[i].bsums + 8));
+
+        memcpy(utmp, x[i].scales, 12);
+
+        uint32x2_t mins8 = { 0 };
+        mins8 = vset_lane_u32(utmp[1] & kmask1, mins8, 0);
+        mins8 = vset_lane_u32(((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4), mins8, 1);
+
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[0] &= kmask1;
+
+        const int16x8_t mins = vreinterpretq_s16_u16(vmovl_u8(vreinterpret_u8_u32(mins8)));
+        const int32x4_t prod = vaddq_s32(vmull_s16(vget_low_s16 (q8sums), vget_low_s16 (mins)),
+                                         vmull_s16(vget_high_s16(q8sums), vget_high_s16(mins)));
+        sumf -= dmin * vaddvq_s32(prod);
+
+        const uint8_t * scales = (const uint8_t *)utmp;
+
+        const uint8_t * restrict q4 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        int32_t sumi1 = 0;
+        int32_t sumi2 = 0;
+
+        for (int j = 0; j < QK_K/64; ++j) {
+            const ggml_uint8x16x2_t q4bits = ggml_vld1q_u8_x2(q4); q4 += 32;
+
+            q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32;
+            q4bytes.val[0] = vreinterpretq_s8_u8(vandq_u8  (q4bits.val[0], m4b));
+            q4bytes.val[1] = vreinterpretq_s8_u8(vandq_u8  (q4bits.val[1], m4b));
+
+            const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(mzero, q4bytes.val[0], q8bytes.val[0]), q4bytes.val[1], q8bytes.val[1]);
+            sumi1 += vaddvq_s32(p1) * scales[2*j+0];
+
+            q8bytes = ggml_vld1q_s8_x2(q8); q8 += 32;
+            q4bytes.val[0] = vreinterpretq_s8_u8(vshrq_n_u8(q4bits.val[0], 4));
+            q4bytes.val[1] = vreinterpretq_s8_u8(vshrq_n_u8(q4bits.val[1], 4));
+
+            const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(mzero, q4bytes.val[0], q8bytes.val[0]), q4bytes.val[1], q8bytes.val[1]);
+
+            sumi2 += vaddvq_s32(p2) * scales[2*j+1];
+        }
+
+        sumf += d * (sumi1 + sumi2);
+
+    }
+
+    *s = sumf;
+
+#elif defined __AVX2__
+
+    const __m256i m4 = _mm256_set1_epi8(0xF);
+
+    __m256 acc = _mm256_setzero_ps();
+    __m128 acc_m = _mm_setzero_ps();
+
+   for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        const uint8_t * restrict q4 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        const __m256i mins_and_scales = _mm256_cvtepu8_epi16(_mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0]));
+
+        const __m256i q8sums = _mm256_loadu_si256((const __m256i*)y[i].bsums);
+        const __m128i q8s = _mm_hadd_epi16(_mm256_extracti128_si256(q8sums, 0), _mm256_extracti128_si256(q8sums, 1));
+        const __m128i prod = _mm_madd_epi16(_mm256_extracti128_si256(mins_and_scales, 1), q8s);
+        acc_m = _mm_fmadd_ps(_mm_set1_ps(dmin), _mm_cvtepi32_ps(prod), acc_m);
+
+        const __m128i sc128  = _mm256_extracti128_si256(mins_and_scales, 0);
+        const __m256i scales = MM256_SET_M128I(sc128, sc128);
+
+        __m256i sumi = _mm256_setzero_si256();
+
+        for (int j = 0; j < QK_K/64; ++j) {
+
+            const __m256i scale_l = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+0));
+            const __m256i scale_h = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+1));
+
+            const __m256i q4bits = _mm256_loadu_si256((const __m256i*)q4); q4 += 32;
+            const __m256i q4l = _mm256_and_si256(q4bits, m4);
+            const __m256i q4h = _mm256_and_si256(_mm256_srli_epi16(q4bits, 4), m4);
+
+            const __m256i q8l = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            __m256i p16l = _mm256_maddubs_epi16(q4l, q8l);
+            p16l = _mm256_madd_epi16(scale_l, p16l);
+
+            const __m256i q8h = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            __m256i p16h = _mm256_maddubs_epi16(q4h, q8h);
+            p16h = _mm256_madd_epi16(scale_h, p16h);
+            const __m256i sumj = _mm256_add_epi32(p16l, p16h);
+
+            sumi = _mm256_add_epi32(sumi, sumj);
+        }
+
+        __m256 vd = _mm256_set1_ps(d);
+        acc = _mm256_fmadd_ps(vd, _mm256_cvtepi32_ps(sumi), acc);
+
+    }
+
+    acc_m = _mm_add_ps(acc_m, _mm_movehl_ps(acc_m, acc_m));
+    acc_m = _mm_add_ss(acc_m, _mm_movehdup_ps(acc_m));
+
+    *s = hsum_float_8(acc) + _mm_cvtss_f32(acc_m);
+
+#elif defined __AVX__
+
+    const __m128i m4 = _mm_set1_epi8(0xF);
+    const __m128i m2 = _mm_set1_epi8(0x2);
+
+    __m256 acc = _mm256_setzero_ps();
+    __m128 acc_m = _mm_setzero_ps();
+
+   for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        const uint8_t * restrict q4 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        const __m128i utmps = _mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0]);
+        const __m128i scales = _mm_cvtepu8_epi16(utmps);
+        const __m128i mins = _mm_cvtepu8_epi16(_mm_unpackhi_epi64(utmps, utmps));
+
+        const __m128i q8sums_0 = _mm_loadu_si128((const __m128i*)&y[i].bsums[0]);
+        const __m128i q8sums_1 = _mm_loadu_si128((const __m128i*)&y[i].bsums[8]);
+        const __m128i q8s = _mm_hadd_epi16(q8sums_0, q8sums_1);
+        const __m128i prod = _mm_madd_epi16(mins, q8s);
+        acc_m = _mm_add_ps(_mm_mul_ps(_mm_set1_ps(dmin), _mm_cvtepi32_ps(prod)), acc_m);
+
+        __m128i sumi_0 = _mm_setzero_si128();
+        __m128i sumi_1 = _mm_setzero_si128();
+
+        __m128i shuffle = _mm_set1_epi16(0x0100);
+        for (int j = 0; j < QK_K/64; ++j) {
+
+            const __m128i scale_l = _mm_shuffle_epi8(scales, shuffle);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            const __m128i scale_h = _mm_shuffle_epi8(scales, shuffle);
+            shuffle = _mm_add_epi16(shuffle, m2);
+
+            __m128i q4bits = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
+            const __m128i q4l_0 = _mm_and_si128(q4bits, m4);
+            const __m128i q4h_0 = _mm_and_si128(_mm_srli_epi16(q4bits, 4), m4);
+            q4bits = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
+            const __m128i q4l_1 = _mm_and_si128(q4bits, m4);
+            const __m128i q4h_1 = _mm_and_si128(_mm_srli_epi16(q4bits, 4), m4);
+
+            const __m128i q8l_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            __m128i p16l = _mm_maddubs_epi16(q4l_0, q8l_0);
+            p16l = _mm_madd_epi16(scale_l, p16l);
+            sumi_0 = _mm_add_epi32(sumi_0, p16l);
+            const __m128i q8l_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            p16l = _mm_maddubs_epi16(q4l_1, q8l_1);
+            p16l = _mm_madd_epi16(scale_l, p16l);
+            sumi_1 = _mm_add_epi32(sumi_1, p16l);
+
+            const __m128i q8h_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            __m128i p16h = _mm_maddubs_epi16(q4h_0, q8h_0);
+            p16h = _mm_madd_epi16(scale_h, p16h);
+            sumi_0 = _mm_add_epi32(sumi_0, p16h);
+            const __m128i q8h_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            p16h = _mm_maddubs_epi16(q4h_1, q8h_1);
+            p16h = _mm_madd_epi16(scale_h, p16h);
+            sumi_1 = _mm_add_epi32(sumi_1, p16h);
+
+        }
+
+        __m256 vd = _mm256_set1_ps(d);
+        __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0);
+        acc = _mm256_add_ps(_mm256_mul_ps(vd, _mm256_cvtepi32_ps(sumi)), acc);
+
+    }
+
+    acc_m = _mm_add_ps(acc_m, _mm_movehl_ps(acc_m, acc_m));
+    acc_m = _mm_add_ss(acc_m, _mm_movehdup_ps(acc_m));
+
+    *s = hsum_float_8(acc) + _mm_cvtss_f32(acc_m);
+
+#elif defined __riscv_v_intrinsic
+
+    const uint8_t * scales = (const uint8_t*)&utmp[0];
+    const uint8_t * mins   = (const uint8_t*)&utmp[2];
+
+    float sumf = 0;
+
+    for (int i = 0; i < nb; ++i) {
+
+        size_t vl = 8;
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        vint16mf2_t q8sums_0 = __riscv_vlse16_v_i16mf2(y[i].bsums, 4, vl);
+        vint16mf2_t q8sums_1 = __riscv_vlse16_v_i16mf2(y[i].bsums+1, 4, vl);
+        vint16mf2_t q8sums   = __riscv_vadd_vv_i16mf2(q8sums_0, q8sums_1, vl);
+
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        vuint8mf4_t mins8  = __riscv_vle8_v_u8mf4(mins, vl);
+        vint16mf2_t v_mins = __riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vzext_vf2_u16mf2(mins8, vl));
+        vint32m1_t  prod   = __riscv_vwmul_vv_i32m1(q8sums, v_mins, vl);
+
+        vint32m1_t sumi = __riscv_vredsum_vs_i32m1_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl);
+        sumf -= dmin * __riscv_vmv_x_s_i32m1_i32(sumi);
+
+        const uint8_t * restrict q4 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        vl = 32;
+
+        int32_t sum_1 = 0;
+        int32_t sum_2 = 0;
+
+        vint16m1_t vzero = __riscv_vmv_v_x_i16m1(0, 1);
+
+        for (int j = 0; j < QK_K/64; ++j) {
+            // load Q4
+            vuint8m1_t q4_x = __riscv_vle8_v_u8m1(q4, vl);
+
+            // load Q8 and multiply it with lower Q4 nibble
+            vint8m1_t  q8_0 = __riscv_vle8_v_i8m1(q8, vl);
+            vint8m1_t  q4_0 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q4_x, 0x0F, vl));
+            vint16m2_t qv_0 = __riscv_vwmul_vv_i16m2(q4_0, q8_0, vl);
+            vint16m1_t vs_0 = __riscv_vredsum_vs_i16m2_i16m1(qv_0, vzero, vl);
+
+            sum_1 += __riscv_vmv_x_s_i16m1_i16(vs_0) * scales[2*j+0];
+
+            // load Q8 and multiply it with upper Q4 nibble
+            vint8m1_t  q8_1 = __riscv_vle8_v_i8m1(q8+32, vl);
+            vint8m1_t  q4_1 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vsrl_vx_u8m1(q4_x, 0x04, vl));
+            vint16m2_t qv_1 = __riscv_vwmul_vv_i16m2(q4_1, q8_1, vl);
+            vint16m1_t vs_1 = __riscv_vredsum_vs_i16m2_i16m1(qv_1, vzero, vl);
+
+            sum_2 += __riscv_vmv_x_s_i16m1_i16(vs_1) * scales[2*j+1];
+
+            q4 += 32;    q8 += 64;
+
+        }
+
+        sumf += d*(sum_1 + sum_2);
+
+    }
+
+    *s = sumf;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0xF);
+    const vector signed char lowMask1 = vec_splats((int8_t)0x3f);
+    const vector signed char lowMask2 = vec_splats((int8_t)0x30);
+    const vector int v0 = vec_splats((int32_t)0);
+    const vector unsigned char v2 = vec_splats((uint8_t)2);
+    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector float vxmin = vec_splats(GGML_FP16_TO_FP32(x[i].dmin));
+        vector float vdmin = vec_mul(vxmin, vyd);
+
+        vector signed short q8ysums0 = vec_xl( 0, y[i].bsums);
+        vector signed short q8ysums1 = vec_xl(16, y[i].bsums);
+
+        UNUSED(kmask1);
+        UNUSED(kmask2);
+        UNUSED(kmask3);
+        UNUSED(utmp);
+
+        vector signed char u0 = (vector signed char)vec_xl_len(x[i].scales, 8);
+        vector signed char u1 = vec_and(vec_sr(u0, v2), lowMask2);
+        vector signed char u2 = (vector signed char)vec_xl_len(x[i].scales + 8, 4);
+        vector signed char u3 = vec_sr(u2, v4);
+
+        vector signed char u30 = u1;
+        vector signed char u31 = (vector signed char)vec_mergeh((vector signed int)vec_and(u2, lowMask), (vector signed int)u3);
+
+        u1 = vec_and(u0, lowMask1);
+        u2 = vec_or(u30, u31);
+
+        vector signed char utmps = (vector signed char)vec_mergeh((vector signed int)u1, (vector signed int)u2);
+
+        vector signed short vscales = vec_unpackh(utmps);
+        vector signed short q4xmins = vec_unpackl(utmps);
+        vector signed short q4xmins0 = vec_mergeh(q4xmins, q4xmins);
+        vector signed short q4xmins1 = vec_mergel(q4xmins, q4xmins);
+
+        vector signed int prod0 = vec_mule(q4xmins0, q8ysums0);
+        vector signed int prod1 = vec_mule(q4xmins1, q8ysums1);
+        vector signed int prod2 = vec_mulo(q4xmins0, q8ysums0);
+        vector signed int prod3 = vec_mulo(q4xmins1, q8ysums1);
+
+        vsumf0 = vec_nmsub(vec_ctf(prod0, 0), vdmin, vsumf0);
+        vsumf1 = vec_nmsub(vec_ctf(prod1, 0), vdmin, vsumf1);
+        vsumf2 = vec_nmsub(vec_ctf(prod2, 0), vdmin, vsumf2);
+        vsumf3 = vec_nmsub(vec_ctf(prod3, 0), vdmin, vsumf3);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+
+        const uint8_t * restrict q4 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        for (int j = 0; j < QK_K/64; j+=2) {
+            __builtin_prefetch(q4, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            vector signed char qxs0 = (vector signed char)vec_xl( 0, q4);
+            vector signed char qxs1 = (vector signed char)vec_xl(16, q4);
+            vector signed char qxs2 = (vector signed char)vec_xl(32, q4);
+            vector signed char qxs3 = (vector signed char)vec_xl(48, q4);
+            q4 += 64;
+
+            vector unsigned char q4x00 = (vector unsigned char)vec_and(qxs0, lowMask);
+            vector unsigned char q4x01 = (vector unsigned char)vec_sr(qxs0, v4);
+            vector unsigned char q4x10 = (vector unsigned char)vec_and(qxs1, lowMask);
+            vector unsigned char q4x11 = (vector unsigned char)vec_sr(qxs1, v4);
+            vector unsigned char q4x20 = (vector unsigned char)vec_and(qxs2, lowMask);
+            vector unsigned char q4x21 = (vector unsigned char)vec_sr(qxs2, v4);
+            vector unsigned char q4x30 = (vector unsigned char)vec_and(qxs3, lowMask);
+            vector unsigned char q4x31 = (vector unsigned char)vec_sr(qxs3, v4);
+
+            vector signed char q8y00 = vec_xl(  0, q8);
+            vector signed char q8y10 = vec_xl( 16, q8);
+            vector signed char q8y01 = vec_xl( 32, q8);
+            vector signed char q8y11 = vec_xl( 48, q8);
+            vector signed char q8y20 = vec_xl( 64, q8);
+            vector signed char q8y30 = vec_xl( 80, q8);
+            vector signed char q8y21 = vec_xl( 96, q8);
+            vector signed char q8y31 = vec_xl(112, q8);
+            q8 += 128;
+
+            vector signed int qv00 = vec_msum(q8y00, q4x00, v0);
+            vector signed int qv01 = vec_msum(q8y01, q4x01, v0);
+            vector signed int qv10 = vec_msum(q8y10, q4x10, v0);
+            vector signed int qv11 = vec_msum(q8y11, q4x11, v0);
+            vector signed int qv20 = vec_msum(q8y20, q4x20, v0);
+            vector signed int qv21 = vec_msum(q8y21, q4x21, v0);
+            vector signed int qv30 = vec_msum(q8y30, q4x30, v0);
+            vector signed int qv31 = vec_msum(q8y31, q4x31, v0);
+
+            vector signed int vscales_h = vec_unpackh(vscales);
+            vector signed int vs0 = vec_splat(vscales_h, 0);
+            vector signed int vs1 = vec_splat(vscales_h, 1);
+            vector signed int vs2 = vec_splat(vscales_h, 2);
+            vector signed int vs3 = vec_splat(vscales_h, 3);
+            vscales = vec_sld(vscales, vscales, 8);
+
+            vsumi0 = vec_add(vec_mul(qv00, vs0), vsumi0);
+            vsumi1 = vec_add(vec_mul(qv01, vs1), vsumi1);
+            vsumi2 = vec_add(vec_mul(qv20, vs2), vsumi2);
+            vsumi3 = vec_add(vec_mul(qv21, vs3), vsumi3);
+
+            vsumi0 = vec_add(vec_mul(qv10, vs0), vsumi0);
+            vsumi1 = vec_add(vec_mul(qv11, vs1), vsumi1);
+            vsumi2 = vec_add(vec_mul(qv30, vs2), vsumi2);
+            vsumi3 = vec_add(vec_mul(qv31, vs3), vsumi3);
+        }
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined __loongarch_asx
+    GGML_UNUSED(kmask1);
+    GGML_UNUSED(kmask2);
+    GGML_UNUSED(kmask3);
+
+    const __m256i m4 = __lasx_xvreplgr2vr_b(0xF);
+
+    __m256 acc = (__m256)__lasx_xvldi(0);
+    __m128 acc_m = (__m128)__lsx_vldi(0);
+
+   for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        const uint8_t * restrict q4 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        const __m256i mins_and_scales = lasx_extu8_16(lsx_set_w(utmp[3], utmp[2], utmp[1], utmp[0]));
+
+        const __m256i q8sums = __lasx_xvld((const __m256i*)y[i].bsums, 0);
+        const __m128i q8s = lsx_hadd_h(lasx_extracti128(q8sums, 0), lasx_extracti128(q8sums, 1));
+        const __m128i prod = lsx_madd_h(lasx_extracti128(mins_and_scales, 1), q8s);
+        acc_m = __lsx_vfmadd_s(__lsx_vreplfr2vr_s(dmin), __lsx_vffint_s_w(prod), acc_m);
+
+        const __m128i sc128  = lasx_extracti128(mins_and_scales, 0);
+        const __m256i scales = lasx_insertf128(sc128, sc128);
+
+        __m256i sumi = __lasx_xvldi(0);
+
+        for (int j = 0; j < QK_K/64; ++j) {
+
+            const __m256i scale_l = lasx_shuffle_b(scales, get_scale_shuffle_k4(2*j+0));
+            const __m256i scale_h = lasx_shuffle_b(scales, get_scale_shuffle_k4(2*j+1));
+
+            const __m256i q4bits = __lasx_xvld((const __m256i*)q4, 0); q4 += 32;
+            const __m256i q4l = __lasx_xvand_v(q4bits, m4);
+            const __m256i q4h = __lasx_xvand_v(__lasx_xvsrli_h(q4bits, 4), m4);
+
+            const __m256i q8l = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            __m256i p16l = lasx_maddubs_h(q4l, q8l);
+            p16l = lasx_madd_h(scale_l, p16l);
+
+            const __m256i q8h = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            __m256i p16h = lasx_maddubs_h(q4h, q8h);
+            p16h = lasx_madd_h(scale_h, p16h);
+            const __m256i sumj = __lasx_xvadd_w(p16l, p16h);
+
+            sumi = __lasx_xvadd_w(sumi, sumj);
+        }
+
+        __m256 vd = __lasx_xvreplfr2vr_s(d);
+        acc = __lasx_xvfmadd_s(vd, __lasx_xvffint_s_w(sumi), acc);
+
+    }
+
+    acc_m = __lsx_vfadd_s(acc_m, (__m128)__lsx_vpermi_w((__m128i)acc_m, (__m128i)acc_m, 0xee));
+    __m128i tmp1 = __lsx_vinsgr2vr_w(__lsx_vldi(0), __lsx_vpickve2gr_w((__m128i)acc_m, 1), 0);
+    acc_m = __lsx_vfadd_s(acc_m, (__m128)tmp1);
+
+
+    ft_union fi;
+    fi.i = __lsx_vpickve2gr_w(acc_m, 0);
+    *s = hsum_float_8(acc) + fi.f ;
+#else
+
+    const uint8_t * scales = (const uint8_t*)&utmp[0];
+    const uint8_t * mins   = (const uint8_t*)&utmp[2];
+
+    int8_t  aux8[QK_K];
+    int16_t aux16[8];
+    float   sums [8];
+    int32_t aux32[8];
+    memset(sums, 0, 8*sizeof(float));
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+        const uint8_t * restrict q4 = x[i].qs;
+        const  int8_t * restrict q8 = y[i].qs;
+        memset(aux32, 0, 8*sizeof(int32_t));
+        int8_t * restrict a = aux8;
+        for (int j = 0; j < QK_K/64; ++j) {
+            for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l] & 0xF);
+            a += 32;
+            for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l]  >> 4);
+            a += 32; q4 += 32;
+        }
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        int sumi = 0;
+        for (int j = 0; j < QK_K/16; ++j) sumi += y[i].bsums[j] * mins[j/2];
+        a = aux8;
+        int is = 0;
+        for (int j = 0; j < QK_K/32; ++j) {
+            int32_t scale = scales[is++];
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
+            q8 += 8; a += 8;
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
+            q8 += 8; a += 8;
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
+            q8 += 8; a += 8;
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
+            q8 += 8; a += 8;
+        }
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l];
+        const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d;
+        sumf -= dmin * sumi;
+    }
+    for (int l = 0; l < 8; ++l) sumf += sums[l];
+    *s = sumf;
+#endif
+}
+
+void ggml_vec_dot_q5_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy,  size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_q5_K * restrict x = vx;
+    const block_q8_K * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+    static const uint32_t kmask1 = 0x3f3f3f3f;
+    static const uint32_t kmask2 = 0x0f0f0f0f;
+    static const uint32_t kmask3 = 0x03030303;
+
+    uint32_t utmp[4];
+
+#ifdef __ARM_NEON
+    const uint8x16_t m4b = vdupq_n_u8(0xf);
+    const uint8x16_t mone = vdupq_n_u8(1);
+    const uint8x16_t mtwo = vdupq_n_u8(2);
+    const int32x4_t mzero = vdupq_n_s32(0);
+
+    ggml_int8x16x4_t q5bytes;
+
+    float sumf = 0;
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        const int16x8_t q8sums = vpaddq_s16(vld1q_s16(y[i].bsums), vld1q_s16(y[i].bsums + 8));
+
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        const uint8x8_t mins8 = vld1_u8((const uint8_t*)utmp + 8);
+        const int16x8_t mins = vreinterpretq_s16_u16(vmovl_u8(mins8));
+        const int32x4_t prod = vaddq_s32(vmull_s16(vget_low_s16 (q8sums), vget_low_s16 (mins)),
+                                         vmull_s16(vget_high_s16(q8sums), vget_high_s16(mins)));
+        int32_t sumi_mins = vaddvq_s32(prod);
+
+        const uint8_t * scales = (const uint8_t *)utmp;
+
+        const uint8_t * restrict q5 = x[i].qs;
+        const uint8_t * restrict qh = x[i].qh;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        ggml_uint8x16x2_t qhbits = ggml_vld1q_u8_x2(qh);
+
+        ggml_uint8x16x4_t q5h;
+
+        int32_t sumi = 0;
+
+        for (int j = 0; j < QK_K/64; ++j) {
+
+            const ggml_uint8x16x2_t q5bits = ggml_vld1q_u8_x2(q5); q5 += 32;
+            const ggml_int8x16x4_t q8bytes = ggml_vld1q_s8_x4(q8); q8 += 64;
+
+            q5h.val[0] = vshlq_n_u8(vandq_u8(mone, qhbits.val[0]), 4);
+            q5h.val[1] = vshlq_n_u8(vandq_u8(mone, qhbits.val[1]), 4);
+            q5h.val[2] = vshlq_n_u8(vandq_u8(mtwo, qhbits.val[0]), 3);
+            q5h.val[3] = vshlq_n_u8(vandq_u8(mtwo, qhbits.val[1]), 3);
+            qhbits.val[0] = vshrq_n_u8(qhbits.val[0], 2);
+            qhbits.val[1] = vshrq_n_u8(qhbits.val[1], 2);
+
+            q5bytes.val[0] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q5bits.val[0], m4b), q5h.val[0]));
+            q5bytes.val[1] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q5bits.val[1], m4b), q5h.val[1]));
+            q5bytes.val[2] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q5bits.val[0], 4), q5h.val[2]));
+            q5bytes.val[3] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q5bits.val[1], 4), q5h.val[3]));
+
+            sumi += vaddvq_s32(ggml_vdotq_s32(ggml_vdotq_s32(mzero, q5bytes.val[0], q8bytes.val[0]), q5bytes.val[1], q8bytes.val[1])) * *scales++;
+            sumi += vaddvq_s32(ggml_vdotq_s32(ggml_vdotq_s32(mzero, q5bytes.val[2], q8bytes.val[2]), q5bytes.val[3], q8bytes.val[3])) * *scales++;
+        }
+
+        sumf += d * sumi - dmin * sumi_mins;
+    }
+
+    *s = sumf;
+
+#elif defined __AVX2__
+
+    const __m256i m4 = _mm256_set1_epi8(0xF);
+    const __m128i mzero = _mm_setzero_si128();
+    const __m256i mone  = _mm256_set1_epi8(1);
+
+    __m256 acc = _mm256_setzero_ps();
+
+    float summs = 0.f;
+
+    for (int i = 0; i < nb; ++i) {
+        const uint8_t * restrict q5 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        const __m256i mins_and_scales = _mm256_cvtepu8_epi16(_mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0]));
+
+        const __m256i q8sums = _mm256_loadu_si256((const __m256i*)y[i].bsums);
+        const __m128i q8s = _mm_hadd_epi16(_mm256_extracti128_si256(q8sums, 0), _mm256_extracti128_si256(q8sums, 1));
+        const __m128i prod = _mm_madd_epi16(_mm256_extracti128_si256(mins_and_scales, 1), q8s);
+        const __m128i hsum = _mm_hadd_epi32(_mm_hadd_epi32(prod, mzero), mzero);
+        summs += dmin * _mm_extract_epi32(hsum, 0);
+
+        const __m128i sc128  = _mm256_extracti128_si256(mins_and_scales, 0);
+        const __m256i scales = MM256_SET_M128I(sc128, sc128);
+
+        const __m256i hbits = _mm256_loadu_si256((const __m256i*)x[i].qh);
+        __m256i hmask = mone;
+
+        __m256i sumi = _mm256_setzero_si256();
+
+        int bit = 0;
+
+        for (int j = 0; j < QK_K/64; ++j) {
+
+            const __m256i scale_0 = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+0));
+            const __m256i scale_1 = _mm256_shuffle_epi8(scales, get_scale_shuffle_k4(2*j+1));
+
+            const __m256i q5bits = _mm256_loadu_si256((const __m256i*)q5); q5 += 32;
+
+            const __m256i q5l_0 = _mm256_and_si256(q5bits, m4);
+            const __m256i q5h_0 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_and_si256(hbits, hmask), bit++), 4);
+            const __m256i q5_0  = _mm256_add_epi8(q5l_0, q5h_0);
+            hmask = _mm256_slli_epi16(hmask, 1);
+
+            const __m256i q5l_1 = _mm256_and_si256(_mm256_srli_epi16(q5bits, 4), m4);
+            const __m256i q5h_1 = _mm256_slli_epi16(_mm256_srli_epi16(_mm256_and_si256(hbits, hmask), bit++), 4);
+            const __m256i q5_1  = _mm256_add_epi8(q5l_1, q5h_1);
+            hmask = _mm256_slli_epi16(hmask, 1);
+
+            const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+
+            __m256i p16_0 = _mm256_maddubs_epi16(q5_0, q8_0);
+            __m256i p16_1 = _mm256_maddubs_epi16(q5_1, q8_1);
+
+            p16_0 = _mm256_madd_epi16(scale_0, p16_0);
+            p16_1 = _mm256_madd_epi16(scale_1, p16_1);
+
+            sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_1));
+
+        }
+
+        __m256 vd = _mm256_set1_ps(d);
+        acc = _mm256_fmadd_ps(vd, _mm256_cvtepi32_ps(sumi), acc);
+
+    }
+
+    *s = hsum_float_8(acc) + summs;
+
+#elif defined __AVX__
+
+    const __m128i m4 = _mm_set1_epi8(0xF);
+    const __m128i mzero = _mm_setzero_si128();
+    const __m128i mone  = _mm_set1_epi8(1);
+    const __m128i m2 = _mm_set1_epi8(2);
+
+    __m256 acc = _mm256_setzero_ps();
+
+    float summs = 0.f;
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        const uint8_t * restrict q5 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        const __m128i utmps = _mm_set_epi32(utmp[3], utmp[2], utmp[1], utmp[0]);
+        const __m128i scales = _mm_cvtepu8_epi16(utmps);
+        const __m128i mins = _mm_cvtepu8_epi16(_mm_unpackhi_epi64(utmps, utmps));
+
+        const __m128i q8sums_0 = _mm_loadu_si128((const __m128i*)&y[i].bsums[0]);
+        const __m128i q8sums_1 = _mm_loadu_si128((const __m128i*)&y[i].bsums[8]);
+        const __m128i q8s = _mm_hadd_epi16(q8sums_0, q8sums_1);
+        const __m128i prod = _mm_madd_epi16(mins, q8s);
+        const __m128i hsum = _mm_hadd_epi32(_mm_hadd_epi32(prod, mzero), mzero);
+        summs += dmin * _mm_extract_epi32(hsum, 0);
+
+        const __m128i hbits_0 = _mm_loadu_si128((const __m128i*)&x[i].qh[0]);
+        const __m128i hbits_1 = _mm_loadu_si128((const __m128i*)&x[i].qh[16]);
+        __m128i hmask = mone;
+
+        __m128i sumi_0 = _mm_setzero_si128();
+        __m128i sumi_1 = _mm_setzero_si128();
+
+        int bit = 0;
+
+        __m128i shuffle = _mm_set1_epi16(0x0100);
+        for (int j = 0; j < QK_K/64; ++j) {
+
+            const __m128i scale_0 = _mm_shuffle_epi8(scales, shuffle);
+            shuffle = _mm_add_epi16(shuffle, m2);
+            const __m128i scale_1 = _mm_shuffle_epi8(scales, shuffle);
+            shuffle = _mm_add_epi16(shuffle, m2);
+
+            const __m128i q5bits_0 = _mm_loadu_si128((const __m128i*)q5); q5 += 16;
+            const __m128i q5bits_1 = _mm_loadu_si128((const __m128i*)q5); q5 += 16;
+
+            __m128i q5l_0 = _mm_and_si128(q5bits_0, m4);
+            __m128i q5l_1 = _mm_and_si128(q5bits_1, m4);
+            __m128i q5h_0 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_0, hmask), bit), 4);
+            __m128i q5h_1 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_1, hmask), bit++), 4);
+            __m128i q5_0  = _mm_add_epi8(q5l_0, q5h_0);
+            __m128i q5_1  = _mm_add_epi8(q5l_1, q5h_1);
+            hmask = _mm_slli_epi16(hmask, 1);
+
+            __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            __m128i p16_0 = _mm_maddubs_epi16(q5_0, q8_0);
+            __m128i p16_1 = _mm_maddubs_epi16(q5_1, q8_1);
+            p16_0 = _mm_madd_epi16(scale_0, p16_0);
+            p16_1 = _mm_madd_epi16(scale_0, p16_1);
+
+            q5l_0 = _mm_and_si128(_mm_srli_epi16(q5bits_0, 4), m4);
+            q5l_1 = _mm_and_si128(_mm_srli_epi16(q5bits_1, 4), m4);
+            q5h_0 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_0, hmask), bit), 4);
+            q5h_1 = _mm_slli_epi16(_mm_srli_epi16(_mm_and_si128(hbits_1, hmask), bit++), 4);
+            q5_0  = _mm_add_epi8(q5l_0, q5h_0);
+            q5_1  = _mm_add_epi8(q5l_1, q5h_1);
+            hmask = _mm_slli_epi16(hmask, 1);
+
+            q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            __m128i p16_2 = _mm_maddubs_epi16(q5_0, q8_0);
+            __m128i p16_3 = _mm_maddubs_epi16(q5_1, q8_1);
+            p16_2 = _mm_madd_epi16(scale_1, p16_2);
+            p16_3 = _mm_madd_epi16(scale_1, p16_3);
+
+            sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_0, p16_2));
+            sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_1, p16_3));
+
+        }
+
+        __m256 vd = _mm256_set1_ps(d);
+        __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0);
+        acc = _mm256_add_ps(_mm256_mul_ps(vd, _mm256_cvtepi32_ps(sumi)), acc);
+
+    }
+
+    *s = hsum_float_8(acc) + summs;
+
+#elif defined __riscv_v_intrinsic
+
+    const uint8_t * scales = (const uint8_t*)&utmp[0];
+    const uint8_t * mins   = (const uint8_t*)&utmp[2];
+
+    float sumf = 0;
+    float sums = 0.0;
+
+    size_t vl;
+
+    for (int i = 0; i < nb; ++i) {
+
+        vl = 8;
+
+        const uint8_t * restrict q5 = x[i].qs;
+        const uint8_t * restrict hm = x[i].qh;
+        const  int8_t * restrict q8 = y[i].qs;
+
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d;
+
+        vint16mf2_t q8sums_0 = __riscv_vlse16_v_i16mf2(y[i].bsums, 4, vl);
+        vint16mf2_t q8sums_1 = __riscv_vlse16_v_i16mf2(y[i].bsums+1, 4, vl);
+        vint16mf2_t q8sums = __riscv_vadd_vv_i16mf2(q8sums_0, q8sums_1, vl);
+
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        vuint8mf4_t mins8 = __riscv_vle8_v_u8mf4(mins, vl);
+        vint16mf2_t v_mins = __riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vzext_vf2_u16mf2(mins8, vl));
+        vint32m1_t prod = __riscv_vwmul_vv_i32m1(q8sums, v_mins, vl);
+
+        vint32m1_t sumi = __riscv_vredsum_vs_i32m1_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl);
+        sumf -= dmin * __riscv_vmv_x_s_i32m1_i32(sumi);
+
+        vl = 32;
+        int32_t aux32 = 0;
+        int is = 0;
+
+        uint8_t m = 1;
+        vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1);
+        vuint8m1_t vqh = __riscv_vle8_v_u8m1(hm, vl);
+
+        for (int j = 0; j < QK_K/64; ++j) {
+            // load Q5 and Q8
+            vuint8m1_t q5_x = __riscv_vle8_v_u8m1(q5, vl);
+            vint8m1_t  q8_y1 = __riscv_vle8_v_i8m1(q8, vl);
+            vint8m1_t  q8_y2 = __riscv_vle8_v_i8m1(q8+32, vl);
+
+            // compute mask for addition
+            vint8m1_t q5_a = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q5_x, 0x0F, vl));
+            vuint8m1_t qh_m1 = __riscv_vand_vx_u8m1(vqh, m, vl);
+            vbool8_t vmask_1 = __riscv_vmsne_vx_u8m1_b8(qh_m1, 0, vl);
+            vint8m1_t q5_m1 = __riscv_vadd_vx_i8m1_m(vmask_1, q5_a, 16, vl);
+            m <<= 1;
+
+            vint8m1_t q5_l = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vsrl_vx_u8m1(q5_x, 0x04, vl));
+            vuint8m1_t qh_m2 = __riscv_vand_vx_u8m1(vqh, m, vl);
+            vbool8_t vmask_2 = __riscv_vmsne_vx_u8m1_b8(qh_m2, 0, vl);
+            vint8m1_t q5_m2 = __riscv_vadd_vx_i8m1_m(vmask_2, q5_l, 16, vl);
+            m <<= 1;
+
+            vint16m2_t v0 = __riscv_vwmul_vv_i16m2(q5_m1, q8_y1, vl);
+            vint16m2_t v1 = __riscv_vwmul_vv_i16m2(q5_m2, q8_y2, vl);
+
+            vint32m4_t vs1 = __riscv_vwmul_vx_i32m4(v0, scales[is++], vl);
+            vint32m4_t vs2 = __riscv_vwmul_vx_i32m4(v1, scales[is++], vl);
+
+            vint32m1_t vacc1 = __riscv_vredsum_vs_i32m4_i32m1(vs1, vzero, vl);
+            vint32m1_t vacc2 = __riscv_vredsum_vs_i32m4_i32m1(vs2, vzero, vl);
+
+            aux32 += __riscv_vmv_x_s_i32m1_i32(vacc1) + __riscv_vmv_x_s_i32m1_i32(vacc2);
+            q5 += 32;    q8 += 64;
+
+        }
+
+        vfloat32m1_t vaux = __riscv_vfmul_vf_f32m1(__riscv_vfmv_v_f_f32m1(aux32, 1), d, 1);
+        sums += __riscv_vfmv_f_s_f32m1_f32(vaux);
+
+    }
+
+    *s = sumf+sums;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0xF);
+    const vector signed char lowMask1 = vec_splats((int8_t)0x3f);
+    const vector signed char lowMask2 = vec_splats((int8_t)0x30);
+    const vector int v0 = vec_splats((int32_t)0);
+    const vector unsigned char v1 = vec_splats((unsigned char)0x1);
+    const vector unsigned char v2 = vec_splats((unsigned char)0x2);
+    const vector unsigned char v3 = vec_splats((unsigned char)0x3);
+    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector float vxmin = vec_splats(GGML_FP16_TO_FP32(x[i].dmin));
+        vector float vdmin = vec_mul(vxmin, vyd);
+
+        UNUSED(kmask1);
+        UNUSED(kmask2);
+        UNUSED(kmask3);
+        UNUSED(utmp);
+
+        vector signed char u0 = (vector signed char)vec_xl_len(x[i].scales, 8);
+        vector signed char u1 = vec_and(vec_sr(u0, v2), lowMask2);
+        vector signed char u2 = (vector signed char)vec_xl_len(x[i].scales + 8, 4);
+        vector signed char u3 = vec_sr(u2, v4);
+
+        vector signed char u30 = u1;
+        vector signed char u31 = (vector signed char)vec_mergeh((vector signed int)vec_and(u2, lowMask), (vector signed int)u3);
+
+        u1 = vec_and(u0, lowMask1);
+        u2 = vec_or(u30, u31);
+
+        vector signed char utmps = (vector signed char)vec_mergeh((vector signed int)u1, (vector signed int)u2);
+
+        vector signed short q8ysums0 = vec_xl( 0, y[i].bsums);
+        vector signed short q8ysums1 = vec_xl(16, y[i].bsums);
+
+        vector signed short vscales = vec_unpackh(utmps);
+
+        vector signed short q5xmins = vec_unpackl(utmps);
+        vector signed short q5xmins0 = vec_mergeh(q5xmins, q5xmins);
+        vector signed short q5xmins1 = vec_mergel(q5xmins, q5xmins);
+
+        vector signed int prod0 = vec_mule(q5xmins0, q8ysums0);
+        vector signed int prod1 = vec_mule(q5xmins1, q8ysums1);
+        vector signed int prod2 = vec_mulo(q5xmins0, q8ysums0);
+        vector signed int prod3 = vec_mulo(q5xmins1, q8ysums1);
+
+        vsumf0 = vec_nmsub(vec_ctf(prod0, 0), vdmin, vsumf0);
+        vsumf1 = vec_nmsub(vec_ctf(prod1, 0), vdmin, vsumf1);
+        vsumf2 = vec_nmsub(vec_ctf(prod2, 0), vdmin, vsumf2);
+        vsumf3 = vec_nmsub(vec_ctf(prod3, 0), vdmin, vsumf3);
+
+        vector signed char qxhs0 = (vector signed char)vec_xl( 0, x[i].qh);
+        vector signed char qxhs1 = (vector signed char)vec_xl(16, x[i].qh);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+
+        const uint8_t * restrict q5 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        for (int j = 0; j < QK_K/64; ++j) {
+            __builtin_prefetch(q5, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            vector signed char qxs0 = (vector signed char)vec_xl( 0, q5);
+            vector signed char qxs1 = (vector signed char)vec_xl(16, q5);
+            q5 += 32;
+
+            vector signed char qxs00 = vec_and(qxs0, lowMask);
+            vector signed char qxs01 = vec_sr(qxs0, v4);
+            vector signed char qxs10 = vec_and(qxs1, lowMask);
+            vector signed char qxs11 = vec_sr(qxs1, v4);
+
+            vector signed char q5h00 = vec_sl(vec_and((vector signed char)v1, qxhs0), v4);
+            vector signed char q5h01 = vec_sl(vec_and((vector signed char)v2, qxhs0), v3);
+            vector signed char q5h10 = vec_sl(vec_and((vector signed char)v1, qxhs1), v4);
+            vector signed char q5h11 = vec_sl(vec_and((vector signed char)v2, qxhs1), v3);
+            qxhs0 = vec_sr(qxhs0, v2);
+            qxhs1 = vec_sr(qxhs1, v2);
+
+            vector unsigned char q5x00 = (vector unsigned char)vec_or(q5h00, qxs00);
+            vector unsigned char q5x01 = (vector unsigned char)vec_or(q5h01, qxs01);
+            vector unsigned char q5x10 = (vector unsigned char)vec_or(q5h10, qxs10);
+            vector unsigned char q5x11 = (vector unsigned char)vec_or(q5h11, qxs11);
+
+            vector signed char q8y00 = vec_xl( 0, q8);
+            vector signed char q8y10 = vec_xl(16, q8);
+            vector signed char q8y01 = vec_xl(32, q8);
+            vector signed char q8y11 = vec_xl(48, q8);
+            q8 += 64;
+
+            vector signed int qv00 = vec_msum(q8y00, q5x00, v0);
+            vector signed int qv01 = vec_msum(q8y01, q5x01, v0);
+            vector signed int qv10 = vec_msum(q8y10, q5x10, v0);
+            vector signed int qv11 = vec_msum(q8y11, q5x11, v0);
+
+            vector signed int vscales_h = vec_unpackh(vscales);
+            vector signed int vs0 = vec_splat(vscales_h, 0);
+            vector signed int vs1 = vec_splat(vscales_h, 1);
+            vscales = vec_sld(vscales, vscales, 12);
+
+            vsumi0 = vec_add(vec_mul(qv00, vs0), vsumi0);
+            vsumi1 = vec_add(vec_mul(qv10, vs0), vsumi1);
+            vsumi2 = vec_add(vec_mul(qv01, vs1), vsumi2);
+            vsumi3 = vec_add(vec_mul(qv11, vs1), vsumi3);
+        }
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined __loongarch_asx
+    GGML_UNUSED(kmask1);
+    GGML_UNUSED(kmask2);
+    GGML_UNUSED(kmask3);
+
+    const __m256i m4 = __lasx_xvreplgr2vr_b(0xF);
+    const __m128i mzero = __lsx_vldi(0);
+    const __m256i mone  = __lasx_xvreplgr2vr_b(1);
+
+    __m256 acc = (__m256)__lasx_xvldi(0);
+
+    float summs = 0.f;
+
+   for (int i = 0; i < nb; ++i) {
+
+        const uint8_t * restrict q5 = x[i].qs;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        const float dmin = -y[i].d * GGML_FP16_TO_FP32(x[i].dmin);
+
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        const __m256i mins_and_scales = lasx_extu8_16(lsx_set_w(utmp[3], utmp[2], utmp[1], utmp[0]));
+
+        const __m256i q8sums = __lasx_xvld((const __m256i*)y[i].bsums, 0);
+        const __m128i q8s = lsx_hadd_h(lasx_extracti128(q8sums, 0), lasx_extracti128(q8sums, 1));
+        const __m128i prod = lsx_madd_h(lasx_extracti128(mins_and_scales, 1), q8s);
+        const __m128i hsum = lsx_hadd_w(lsx_hadd_w(prod, mzero), mzero);
+        summs += dmin * __lsx_vpickve2gr_w(hsum, 0);    //TODO check
+
+        const __m128i sc128  = lasx_extracti128(mins_and_scales, 0);
+        const __m256i scales = lasx_insertf128(sc128, sc128);
+
+        const __m256i hbits = __lasx_xvld((const __m256i*)x[i].qh, 0);
+        __m256i hmask = mone;
+
+        __m256i sumi = __lasx_xvldi(0);
+
+        int bit = 0;
+        __m256i xvbit;
+
+        for (int j = 0; j < QK_K/64; ++j) {
+
+            const __m256i scale_0 = lasx_shuffle_b(scales, get_scale_shuffle_k4(2*j+0));
+            const __m256i scale_1 = lasx_shuffle_b(scales, get_scale_shuffle_k4(2*j+1));
+
+            const __m256i q5bits = __lasx_xvld((const __m256i*)q5, 0); q5 += 32;
+
+            xvbit = __lasx_xvreplgr2vr_h(bit++);
+            const __m256i q5l_0 = __lasx_xvand_v(q5bits, m4);
+            const __m256i q5h_0 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvand_v(hbits, hmask), xvbit), 4);
+            const __m256i q5_0  = __lasx_xvadd_b(q5l_0, q5h_0);
+            hmask = __lasx_xvslli_h(hmask, 1);
+
+            xvbit = __lasx_xvreplgr2vr_h(bit++);
+            const __m256i q5l_1 = __lasx_xvand_v(__lasx_xvsrli_h(q5bits, 4), m4);
+            const __m256i q5h_1 = __lasx_xvslli_h(__lasx_xvsrl_h(__lasx_xvand_v(hbits, hmask), xvbit), 4);
+            const __m256i q5_1  = __lasx_xvadd_b(q5l_1, q5h_1);
+            hmask = __lasx_xvslli_h(hmask, 1);
+
+            const __m256i q8_0 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8_1 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+
+            __m256i p16_0 = lasx_maddubs_h(q5_0, q8_0);
+            __m256i p16_1 = lasx_maddubs_h(q5_1, q8_1);
+
+            p16_0 = lasx_madd_h(scale_0, p16_0);
+            p16_1 = lasx_madd_h(scale_1, p16_1);
+
+            sumi = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p16_0, p16_1));
+
+        }
+
+        __m256 vd = __lasx_xvreplfr2vr_s(d);
+        acc = __lasx_xvfmadd_s(vd, __lasx_xvffint_s_w(sumi), acc);
+
+    }
+
+    *s = hsum_float_8(acc) + summs;
+
+#else
+
+    const uint8_t * scales = (const uint8_t*)&utmp[0];
+    const uint8_t * mins   = (const uint8_t*)&utmp[2];
+
+    int8_t  aux8[QK_K];
+    int16_t aux16[8];
+    float   sums [8];
+    int32_t aux32[8];
+    memset(sums, 0, 8*sizeof(float));
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+        const uint8_t * restrict q4 = x[i].qs;
+        const uint8_t * restrict hm = x[i].qh;
+        const  int8_t * restrict q8 = y[i].qs;
+        memset(aux32, 0, 8*sizeof(int32_t));
+        int8_t * restrict a = aux8;
+        uint8_t m = 1;
+        for (int j = 0; j < QK_K/64; ++j) {
+            for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l] & 0xF);
+            for (int l = 0; l < 32; ++l) a[l] += (hm[l] & m ? 16 : 0);
+            a += 32; m <<= 1;
+            for (int l = 0; l < 32; ++l) a[l] = (int8_t)(q4[l]  >> 4);
+            for (int l = 0; l < 32; ++l) a[l] += (hm[l] & m ? 16 : 0);
+            a += 32; m <<= 1;
+            q4 += 32;
+        }
+        memcpy(utmp, x[i].scales, 12);
+        utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4);
+        const uint32_t uaux = utmp[1] & kmask1;
+        utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4);
+        utmp[2] = uaux;
+        utmp[0] &= kmask1;
+
+        int sumi = 0;
+        for (int j = 0; j < QK_K/16; ++j) sumi += y[i].bsums[j] * mins[j/2];
+        a = aux8;
+        int is = 0;
+        for (int j = 0; j < QK_K/32; ++j) {
+            int32_t scale = scales[is++];
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
+            q8 += 8; a += 8;
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
+            q8 += 8; a += 8;
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
+            q8 += 8; a += 8;
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
+            q8 += 8; a += 8;
+        }
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l];
+        const float dmin = GGML_FP16_TO_FP32(x[i].dmin) * y[i].d;
+        sumf -= dmin * sumi;
+    }
+    for (int l = 0; l < 8; ++l) sumf += sums[l];
+    *s = sumf;
+#endif
+}
+
+void ggml_vec_dot_q6_K_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_q6_K * restrict x = vx;
+    const block_q8_K * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+#ifdef __ARM_NEON
+    float sum = 0;
+
+    const uint8x16_t m4b = vdupq_n_u8(0xF);
+    const int32x4_t  vzero = vdupq_n_s32(0);
+    //const int8x16_t  m32s = vdupq_n_s8(32);
+
+    const uint8x16_t mone = vdupq_n_u8(3);
+
+    ggml_int8x16x4_t q6bytes;
+    ggml_uint8x16x4_t q6h;
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d_all = GGML_FP16_TO_FP32(x[i].d);
+
+        const uint8_t * restrict q6 = x[i].ql;
+        const uint8_t * restrict qh = x[i].qh;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        const int8_t * restrict scale = x[i].scales;
+
+        const ggml_int16x8x2_t q8sums = ggml_vld1q_s16_x2(y[i].bsums);
+        const int8x16_t scales = vld1q_s8(scale);
+        const ggml_int16x8x2_t q6scales = {{vmovl_s8(vget_low_s8(scales)), vmovl_s8(vget_high_s8(scales))}};
+
+        const int32x4_t prod = vaddq_s32(vaddq_s32(vmull_s16(vget_low_s16 (q8sums.val[0]), vget_low_s16 (q6scales.val[0])),
+                                                   vmull_s16(vget_high_s16(q8sums.val[0]), vget_high_s16(q6scales.val[0]))),
+                                         vaddq_s32(vmull_s16(vget_low_s16 (q8sums.val[1]), vget_low_s16 (q6scales.val[1])),
+                                                   vmull_s16(vget_high_s16(q8sums.val[1]), vget_high_s16(q6scales.val[1]))));
+        int32_t isum_mins = vaddvq_s32(prod);
+
+        int32_t isum = 0;
+
+        for (int j = 0; j < QK_K/128; ++j) {
+
+            ggml_uint8x16x2_t qhbits = ggml_vld1q_u8_x2(qh); qh += 32;
+            ggml_uint8x16x4_t q6bits = ggml_vld1q_u8_x4(q6); q6 += 64;
+            ggml_int8x16x4_t q8bytes = ggml_vld1q_s8_x4(q8); q8 += 64;
+
+            q6h.val[0] = vshlq_n_u8(vandq_u8(mone, qhbits.val[0]), 4);
+            q6h.val[1] = vshlq_n_u8(vandq_u8(mone, qhbits.val[1]), 4);
+            uint8x16_t shifted = vshrq_n_u8(qhbits.val[0], 2);
+            q6h.val[2] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
+            shifted = vshrq_n_u8(qhbits.val[1], 2);
+            q6h.val[3] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
+
+            //q6bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[0], m4b), q6h.val[0])), m32s);
+            //q6bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[1], m4b), q6h.val[1])), m32s);
+            //q6bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[2], m4b), q6h.val[2])), m32s);
+            //q6bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[3], m4b), q6h.val[3])), m32s);
+            q6bytes.val[0] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[0], m4b), q6h.val[0]));
+            q6bytes.val[1] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[1], m4b), q6h.val[1]));
+            q6bytes.val[2] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[2], m4b), q6h.val[2]));
+            q6bytes.val[3] = vreinterpretq_s8_u8(vorrq_u8(vandq_u8(q6bits.val[3], m4b), q6h.val[3]));
+
+            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[0], q8bytes.val[0])) * scale[0] +
+                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[1], q8bytes.val[1])) * scale[1] +
+                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[2], q8bytes.val[2])) * scale[2] +
+                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[3], q8bytes.val[3])) * scale[3];
+
+            scale += 4;
+
+            q8bytes = ggml_vld1q_s8_x4(q8); q8 += 64;
+
+            shifted = vshrq_n_u8(qhbits.val[0], 4);
+            q6h.val[0] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
+            shifted = vshrq_n_u8(qhbits.val[1], 4);
+            q6h.val[1] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
+            shifted = vshrq_n_u8(qhbits.val[0], 6);
+            q6h.val[2] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
+            shifted = vshrq_n_u8(qhbits.val[1], 6);
+            q6h.val[3] = vshlq_n_u8(vandq_u8(mone, shifted), 4);
+
+            //q6bytes.val[0] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[0], 4), q6h.val[0])), m32s);
+            //q6bytes.val[1] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[1], 4), q6h.val[1])), m32s);
+            //q6bytes.val[2] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[2], 4), q6h.val[2])), m32s);
+            //q6bytes.val[3] = vsubq_s8(vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[3], 4), q6h.val[3])), m32s);
+            q6bytes.val[0] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[0], 4), q6h.val[0]));
+            q6bytes.val[1] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[1], 4), q6h.val[1]));
+            q6bytes.val[2] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[2], 4), q6h.val[2]));
+            q6bytes.val[3] = vreinterpretq_s8_u8(vorrq_u8(vshrq_n_u8(q6bits.val[3], 4), q6h.val[3]));
+
+            isum += vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[0], q8bytes.val[0])) * scale[0] +
+                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[1], q8bytes.val[1])) * scale[1] +
+                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[2], q8bytes.val[2])) * scale[2] +
+                    vaddvq_s32(ggml_vdotq_s32(vzero, q6bytes.val[3], q8bytes.val[3])) * scale[3];
+            scale += 4;
+        }
+        //sum += isum * d_all * y[i].d;
+        sum += d_all * y[i].d * (isum - 32 * isum_mins);
+
+    }
+    *s = sum;
+
+#elif defined __AVX2__
+
+    const __m256i m4 = _mm256_set1_epi8(0xF);
+    const __m256i m2 = _mm256_set1_epi8(3);
+    const __m256i m32s = _mm256_set1_epi8(32);
+
+    __m256 acc = _mm256_setzero_ps();
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+
+        const uint8_t * restrict q4 = x[i].ql;
+        const uint8_t * restrict qh = x[i].qh;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        const __m128i scales = _mm_loadu_si128((const __m128i*)x[i].scales);
+
+        __m256i sumi = _mm256_setzero_si256();
+
+        int is = 0;
+
+        for (int j = 0; j < QK_K/128; ++j) {
+
+            const __m128i scale_0 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 0));
+            const __m128i scale_1 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 1));
+            const __m128i scale_2 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 2));
+            const __m128i scale_3 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 3));
+            is += 4;
+
+            const __m256i q4bits1 = _mm256_loadu_si256((const __m256i*)q4); q4 += 32;
+            const __m256i q4bits2 = _mm256_loadu_si256((const __m256i*)q4); q4 += 32;
+            const __m256i q4bitsH = _mm256_loadu_si256((const __m256i*)qh); qh += 32;
+
+            const __m256i q4h_0 = _mm256_slli_epi16(_mm256_and_si256(q4bitsH, m2), 4);
+            const __m256i q4h_1 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 2), m2), 4);
+            const __m256i q4h_2 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 4), m2), 4);
+            const __m256i q4h_3 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 6), m2), 4);
+
+            const __m256i q4_0 = _mm256_or_si256(_mm256_and_si256(q4bits1, m4), q4h_0);
+            const __m256i q4_1 = _mm256_or_si256(_mm256_and_si256(q4bits2, m4), q4h_1);
+            const __m256i q4_2 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits1, 4), m4), q4h_2);
+            const __m256i q4_3 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits2, 4), m4), q4h_3);
+
+            const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8_3 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+
+            __m256i q8s_0 = _mm256_maddubs_epi16(m32s, q8_0);
+            __m256i q8s_1 = _mm256_maddubs_epi16(m32s, q8_1);
+            __m256i q8s_2 = _mm256_maddubs_epi16(m32s, q8_2);
+            __m256i q8s_3 = _mm256_maddubs_epi16(m32s, q8_3);
+
+            __m256i p16_0 = _mm256_maddubs_epi16(q4_0, q8_0);
+            __m256i p16_1 = _mm256_maddubs_epi16(q4_1, q8_1);
+            __m256i p16_2 = _mm256_maddubs_epi16(q4_2, q8_2);
+            __m256i p16_3 = _mm256_maddubs_epi16(q4_3, q8_3);
+
+            p16_0 = _mm256_sub_epi16(p16_0, q8s_0);
+            p16_1 = _mm256_sub_epi16(p16_1, q8s_1);
+            p16_2 = _mm256_sub_epi16(p16_2, q8s_2);
+            p16_3 = _mm256_sub_epi16(p16_3, q8s_3);
+
+            p16_0 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_0), p16_0);
+            p16_1 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_1), p16_1);
+            p16_2 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_2), p16_2);
+            p16_3 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_3), p16_3);
+
+            sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_0, p16_1));
+            sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p16_2, p16_3));
+
+        }
+
+        acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc);
+    }
+
+    *s = hsum_float_8(acc);
+
+#elif defined __AVX__
+
+    const __m128i m4 = _mm_set1_epi8(0xF);
+    const __m128i m3 = _mm_set1_epi8(3);
+    const __m128i m32s = _mm_set1_epi8(32);
+    const __m128i m2 = _mm_set1_epi8(2);
+
+    __m256 acc = _mm256_setzero_ps();
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+
+        const uint8_t * restrict q4 = x[i].ql;
+        const uint8_t * restrict qh = x[i].qh;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        const __m128i scales = _mm_loadu_si128((const __m128i*)x[i].scales);
+
+        __m128i sumi_0 = _mm_setzero_si128();
+        __m128i sumi_1 = _mm_setzero_si128();
+
+        __m128i shuffle = _mm_set_epi64x(0x0101010101010101, 0x0000000000000000);
+        for (int j = 0; j < QK_K/128; ++j) {
+
+            const __m128i q4bitsH_0 = _mm_loadu_si128((const __m128i*)qh); qh += 16;
+            const __m128i q4bitsH_1 = _mm_loadu_si128((const __m128i*)qh); qh += 16;
+
+            const __m128i q4h_0 = _mm_slli_epi16(_mm_and_si128(q4bitsH_0, m3), 4);
+            const __m128i q4h_1 = _mm_slli_epi16(_mm_and_si128(q4bitsH_1, m3), 4);
+            const __m128i q4h_2 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_0, 2), m3), 4);
+            const __m128i q4h_3 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_1, 2), m3), 4);
+            const __m128i q4h_4 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_0, 4), m3), 4);
+            const __m128i q4h_5 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_1, 4), m3), 4);
+            const __m128i q4h_6 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_0, 6), m3), 4);
+            const __m128i q4h_7 = _mm_slli_epi16(_mm_and_si128(_mm_srli_epi16(q4bitsH_1, 6), m3), 4);
+
+            const __m128i q4bits1_0 = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
+            const __m128i q4bits1_1 = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
+            const __m128i q4bits2_0 = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
+            const __m128i q4bits2_1 = _mm_loadu_si128((const __m128i*)q4); q4 += 16;
+
+            const __m128i q4_0 = _mm_or_si128(_mm_and_si128(q4bits1_0, m4), q4h_0);
+            const __m128i q4_1 = _mm_or_si128(_mm_and_si128(q4bits1_1, m4), q4h_1);
+            const __m128i q4_2 = _mm_or_si128(_mm_and_si128(q4bits2_0, m4), q4h_2);
+            const __m128i q4_3 = _mm_or_si128(_mm_and_si128(q4bits2_1, m4), q4h_3);
+            const __m128i q4_4 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits1_0, 4), m4), q4h_4);
+            const __m128i q4_5 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits1_1, 4), m4), q4h_5);
+            const __m128i q4_6 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits2_0, 4), m4), q4h_6);
+            const __m128i q4_7 = _mm_or_si128(_mm_and_si128(_mm_srli_epi16(q4bits2_1, 4), m4), q4h_7);
+
+            const __m128i q8_0 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_1 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_2 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_3 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_4 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_5 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_6 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+            const __m128i q8_7 = _mm_loadu_si128((const __m128i*)q8); q8 += 16;
+
+            __m128i q8s_0 = _mm_maddubs_epi16(m32s, q8_0);
+            __m128i q8s_1 = _mm_maddubs_epi16(m32s, q8_1);
+            __m128i q8s_2 = _mm_maddubs_epi16(m32s, q8_2);
+            __m128i q8s_3 = _mm_maddubs_epi16(m32s, q8_3);
+            __m128i q8s_4 = _mm_maddubs_epi16(m32s, q8_4);
+            __m128i q8s_5 = _mm_maddubs_epi16(m32s, q8_5);
+            __m128i q8s_6 = _mm_maddubs_epi16(m32s, q8_6);
+            __m128i q8s_7 = _mm_maddubs_epi16(m32s, q8_7);
+
+            __m128i p16_0 = _mm_maddubs_epi16(q4_0, q8_0);
+            __m128i p16_1 = _mm_maddubs_epi16(q4_1, q8_1);
+            __m128i p16_2 = _mm_maddubs_epi16(q4_2, q8_2);
+            __m128i p16_3 = _mm_maddubs_epi16(q4_3, q8_3);
+            __m128i p16_4 = _mm_maddubs_epi16(q4_4, q8_4);
+            __m128i p16_5 = _mm_maddubs_epi16(q4_5, q8_5);
+            __m128i p16_6 = _mm_maddubs_epi16(q4_6, q8_6);
+            __m128i p16_7 = _mm_maddubs_epi16(q4_7, q8_7);
+
+            p16_0 = _mm_sub_epi16(p16_0, q8s_0);
+            p16_1 = _mm_sub_epi16(p16_1, q8s_1);
+            p16_2 = _mm_sub_epi16(p16_2, q8s_2);
+            p16_3 = _mm_sub_epi16(p16_3, q8s_3);
+            p16_4 = _mm_sub_epi16(p16_4, q8s_4);
+            p16_5 = _mm_sub_epi16(p16_5, q8s_5);
+            p16_6 = _mm_sub_epi16(p16_6, q8s_6);
+            p16_7 = _mm_sub_epi16(p16_7, q8s_7);
+
+            const __m128i scale_0 = _mm_shuffle_epi8(scales, shuffle);
+            shuffle = _mm_add_epi8(shuffle, m2);
+            const __m128i scale_1 = _mm_shuffle_epi8(scales, shuffle);
+            shuffle = _mm_add_epi8(shuffle, m2);
+            const __m128i scale_2 = _mm_shuffle_epi8(scales, shuffle);
+            shuffle = _mm_add_epi8(shuffle, m2);
+            const __m128i scale_3 = _mm_shuffle_epi8(scales, shuffle);
+            shuffle = _mm_add_epi8(shuffle, m2);
+
+            p16_0 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_0), p16_0);
+            p16_1 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_0, scale_0)), p16_1);
+            p16_2 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_1), p16_2);
+            p16_3 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_1, scale_1)), p16_3);
+            p16_4 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_2), p16_4);
+            p16_5 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_2, scale_2)), p16_5);
+            p16_6 = _mm_madd_epi16(_mm_cvtepi8_epi16(scale_3), p16_6);
+            p16_7 = _mm_madd_epi16(_mm_cvtepi8_epi16(_mm_unpackhi_epi64(scale_3, scale_3)), p16_7);
+
+            sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_0, p16_2));
+            sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_1, p16_3));
+            sumi_0 = _mm_add_epi32(sumi_0, _mm_add_epi32(p16_4, p16_6));
+            sumi_1 = _mm_add_epi32(sumi_1, _mm_add_epi32(p16_5, p16_7));
+
+        }
+
+        __m256i sumi = MM256_SET_M128I(sumi_1, sumi_0);
+        acc = _mm256_add_ps(_mm256_mul_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi)), acc);
+    }
+
+    *s = hsum_float_8(acc);
+
+#elif defined __riscv_v_intrinsic
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+
+        const uint8_t * restrict q6 = x[i].ql;
+        const uint8_t * restrict qh = x[i].qh;
+        const  int8_t * restrict q8 = y[i].qs;
+
+        const int8_t * restrict scale = x[i].scales;
+
+        size_t vl;
+
+        vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1);
+
+        int sum_t = 0;
+        int is = 0;
+
+        for (int j = 0; j < QK_K/128; ++j) {
+
+            vl = 32;
+
+            // load qh
+            vuint8m1_t qh_x = __riscv_vle8_v_u8m1(qh, vl);
+
+            // load Q6
+            vuint8m1_t q6_0 = __riscv_vle8_v_u8m1(q6, vl);
+            vuint8m1_t q6_1 = __riscv_vle8_v_u8m1(q6+32, vl);
+
+            vuint8m1_t q6a_0 = __riscv_vand_vx_u8m1(q6_0, 0x0F, vl);
+            vuint8m1_t q6a_1 = __riscv_vand_vx_u8m1(q6_1, 0x0F, vl);
+            vuint8m1_t q6s_0 = __riscv_vsrl_vx_u8m1(q6_0, 0x04, vl);
+            vuint8m1_t q6s_1 = __riscv_vsrl_vx_u8m1(q6_1, 0x04, vl);
+
+            vuint8m1_t qh_0 = __riscv_vand_vx_u8m1(qh_x, 0x03, vl);
+            vuint8m1_t qh_1 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x2, vl), 0x03 , vl);
+            vuint8m1_t qh_2 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x4, vl), 0x03 , vl);
+            vuint8m1_t qh_3 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x6, vl), 0x03 , vl);
+
+            vuint8m1_t qhi_0 = __riscv_vor_vv_u8m1(q6a_0, __riscv_vsll_vx_u8m1(qh_0, 0x04, vl), vl);
+            vuint8m1_t qhi_1 = __riscv_vor_vv_u8m1(q6a_1, __riscv_vsll_vx_u8m1(qh_1, 0x04, vl), vl);
+            vuint8m1_t qhi_2 = __riscv_vor_vv_u8m1(q6s_0, __riscv_vsll_vx_u8m1(qh_2, 0x04, vl), vl);
+            vuint8m1_t qhi_3 = __riscv_vor_vv_u8m1(q6s_1, __riscv_vsll_vx_u8m1(qh_3, 0x04, vl), vl);
+
+            vint8m1_t a_0 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_0), 32, vl);
+            vint8m1_t a_1 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_1), 32, vl);
+            vint8m1_t a_2 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_2), 32, vl);
+            vint8m1_t a_3 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_3), 32, vl);
+
+            // load Q8 and take product
+            vint16m2_t va_q_0 = __riscv_vwmul_vv_i16m2(a_0, __riscv_vle8_v_i8m1(q8, vl), vl);
+            vint16m2_t va_q_1 = __riscv_vwmul_vv_i16m2(a_1, __riscv_vle8_v_i8m1(q8+32, vl), vl);
+            vint16m2_t va_q_2 = __riscv_vwmul_vv_i16m2(a_2, __riscv_vle8_v_i8m1(q8+64, vl), vl);
+            vint16m2_t va_q_3 = __riscv_vwmul_vv_i16m2(a_3, __riscv_vle8_v_i8m1(q8+96, vl), vl);
+
+            vl = 16;
+
+            vint32m2_t vaux_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_0, 0), scale[is+0], vl);
+            vint32m2_t vaux_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_0, 1), scale[is+1], vl);
+            vint32m2_t vaux_2 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_1, 0), scale[is+2], vl);
+            vint32m2_t vaux_3 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_1, 1), scale[is+3], vl);
+            vint32m2_t vaux_4 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_2, 0), scale[is+4], vl);
+            vint32m2_t vaux_5 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_2, 1), scale[is+5], vl);
+            vint32m2_t vaux_6 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_3, 0), scale[is+6], vl);
+            vint32m2_t vaux_7 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_3, 1), scale[is+7], vl);
+
+            vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_0, vaux_1, vl), vzero, vl);
+            vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_2, vaux_3, vl), isum0, vl);
+            vint32m1_t isum2 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_4, vaux_5, vl), isum1, vl);
+            vint32m1_t isum3 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_6, vaux_7, vl), isum2, vl);
+
+            sum_t += __riscv_vmv_x_s_i32m1_i32(isum3);
+
+            q6 += 64;   qh += 32;   q8 += 128;   is=8;
+
+        }
+
+        sumf += d * sum_t;
+
+    }
+
+    *s = sumf;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0xF);
+    const vector int v0 = vec_splats((int32_t)0);
+    const vector unsigned char v2 = vec_splats((unsigned char)0x2);
+    const vector unsigned char v3 = vec_splats((unsigned char)0x3);
+    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
+    const vector unsigned char v6 = vec_splats((unsigned char)0x6);
+    const vector signed char off = vec_splats((signed char)0x20);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+        vector signed int vsumi4 = v0;
+        vector signed int vsumi5 = v0;
+        vector signed int vsumi6 = v0;
+        vector signed int vsumi7 = v0;
+
+        const uint8_t * restrict q6 = x[i].ql;
+        const uint8_t * restrict qh = x[i].qh;
+        const int8_t  * restrict qs = x[i].scales;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        for (int j = 0; j < QK_K/128; ++j) {
+            __builtin_prefetch(q6, 0, 0);
+            __builtin_prefetch(qh, 0, 0);
+            __builtin_prefetch(q8, 0, 0);
+
+            vector signed char qxs0 = (vector signed char)vec_xl( 0, q6);
+            vector signed char qxs1 = (vector signed char)vec_xl(16, q6);
+            vector signed char qxs2 = (vector signed char)vec_xl(32, q6);
+            vector signed char qxs3 = (vector signed char)vec_xl(48, q6);
+            q6 += 64;
+
+            vector signed char qxs00 = vec_and(qxs0, lowMask);
+            vector signed char qxs01 = vec_sr(qxs0, v4);
+            vector signed char qxs10 = vec_and(qxs1, lowMask);
+            vector signed char qxs11 = vec_sr(qxs1, v4);
+            vector signed char qxs20 = vec_and(qxs2, lowMask);
+            vector signed char qxs21 = vec_sr(qxs2, v4);
+            vector signed char qxs30 = vec_and(qxs3, lowMask);
+            vector signed char qxs31 = vec_sr(qxs3, v4);
+
+            vector signed char qxhs0 = (vector signed char)vec_xl( 0, qh);
+            vector signed char qxhs1 = (vector signed char)vec_xl(16, qh);
+            qh += 32;
+
+            vector signed char qxh00 = vec_sl(vec_and((vector signed char)v3, qxhs0), v4);
+            vector signed char qxh01 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs0, v4)), v4);
+            vector signed char qxh10 = vec_sl(vec_and((vector signed char)v3, qxhs1), v4);
+            vector signed char qxh11 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs1, v4)), v4);
+            vector signed char qxh20 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs0, v2)), v4);
+            vector signed char qxh21 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs0, v6)), v4);
+            vector signed char qxh30 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs1, v2)), v4);
+            vector signed char qxh31 = vec_sl(vec_and((vector signed char)v3, vec_sr(qxhs1, v6)), v4);
+
+            vector signed char q6x00 = vec_sub(vec_or(qxh00, qxs00), off);
+            vector signed char q6x01 = vec_sub(vec_or(qxh01, qxs01), off);
+            vector signed char q6x10 = vec_sub(vec_or(qxh10, qxs10), off);
+            vector signed char q6x11 = vec_sub(vec_or(qxh11, qxs11), off);
+            vector signed char q6x20 = vec_sub(vec_or(qxh20, qxs20), off);
+            vector signed char q6x21 = vec_sub(vec_or(qxh21, qxs21), off);
+            vector signed char q6x30 = vec_sub(vec_or(qxh30, qxs30), off);
+            vector signed char q6x31 = vec_sub(vec_or(qxh31, qxs31), off);
+
+            vector signed char q8y00 = vec_xl(  0, q8);
+            vector signed char q8y10 = vec_xl( 16, q8);
+            vector signed char q8y20 = vec_xl( 32, q8);
+            vector signed char q8y30 = vec_xl( 48, q8);
+            vector signed char q8y01 = vec_xl( 64, q8);
+            vector signed char q8y11 = vec_xl( 80, q8);
+            vector signed char q8y21 = vec_xl( 96, q8);
+            vector signed char q8y31 = vec_xl(112, q8);
+            q8 += 128;
+
+            vector signed short qv00 = vec_add(vec_mule(q6x00, q8y00), vec_mulo(q6x00, q8y00));
+            vector signed short qv10 = vec_add(vec_mule(q6x10, q8y10), vec_mulo(q6x10, q8y10));
+            vector signed short qv20 = vec_add(vec_mule(q6x20, q8y20), vec_mulo(q6x20, q8y20));
+            vector signed short qv30 = vec_add(vec_mule(q6x30, q8y30), vec_mulo(q6x30, q8y30));
+            vector signed short qv01 = vec_add(vec_mule(q6x01, q8y01), vec_mulo(q6x01, q8y01));
+            vector signed short qv11 = vec_add(vec_mule(q6x11, q8y11), vec_mulo(q6x11, q8y11));
+            vector signed short qv21 = vec_add(vec_mule(q6x21, q8y21), vec_mulo(q6x21, q8y21));
+            vector signed short qv31 = vec_add(vec_mule(q6x31, q8y31), vec_mulo(q6x31, q8y31));
+
+            vector signed short vscales = vec_unpackh(vec_xl_len(qs, 8));
+            qs += 8;
+
+            vector signed short vs0 = vec_splat(vscales, 0);
+            vector signed short vs1 = vec_splat(vscales, 1);
+            vector signed short vs2 = vec_splat(vscales, 2);
+            vector signed short vs3 = vec_splat(vscales, 3);
+            vector signed short vs4 = vec_splat(vscales, 4);
+            vector signed short vs5 = vec_splat(vscales, 5);
+            vector signed short vs6 = vec_splat(vscales, 6);
+            vector signed short vs7 = vec_splat(vscales, 7);
+
+            vsumi0 = vec_msum(qv00, vs0, vsumi0);
+            vsumi1 = vec_msum(qv01, vs4, vsumi1);
+            vsumi2 = vec_msum(qv10, vs1, vsumi2);
+            vsumi3 = vec_msum(qv11, vs5, vsumi3);
+            vsumi4 = vec_msum(qv20, vs2, vsumi4);
+            vsumi5 = vec_msum(qv21, vs6, vsumi5);
+            vsumi6 = vec_msum(qv30, vs3, vsumi6);
+            vsumi7 = vec_msum(qv31, vs7, vsumi7);
+        }
+
+        vsumi0 = vec_add(vsumi0, vsumi4);
+        vsumi1 = vec_add(vsumi1, vsumi5);
+        vsumi2 = vec_add(vsumi2, vsumi6);
+        vsumi3 = vec_add(vsumi3, vsumi7);
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined __loongarch_asx
+
+    const __m256i m4 = __lasx_xvreplgr2vr_b(0xF);
+    const __m256i m2 = __lasx_xvreplgr2vr_b(3);
+    const __m256i m32s = __lasx_xvreplgr2vr_b(32);
+
+    __m256 acc = (__m256)__lasx_xvldi(0);
+
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+
+        const uint8_t * restrict q4 = x[i].ql;
+        const uint8_t * restrict qh = x[i].qh;
+        const int8_t  * restrict q8 = y[i].qs;
+
+        const __m128i scales = __lsx_vld((const __m128i*)x[i].scales, 0);
+
+        __m256i sumi = __lasx_xvldi(0);
+
+        int is = 0;
+
+        for (int j = 0; j < QK_K/128; ++j) {
+
+            const __m128i scale_0 = lsx_shuffle_b(scales, get_scale_shuffle(is + 0));
+            const __m128i scale_1 = lsx_shuffle_b(scales, get_scale_shuffle(is + 1));
+            const __m128i scale_2 = lsx_shuffle_b(scales, get_scale_shuffle(is + 2));
+            const __m128i scale_3 = lsx_shuffle_b(scales, get_scale_shuffle(is + 3));
+            is += 4;
+
+            const __m256i q4bits1 = __lasx_xvld((const __m256i*)q4, 0); q4 += 32;
+            const __m256i q4bits2 = __lasx_xvld((const __m256i*)q4, 0); q4 += 32;
+            const __m256i q4bitsH = __lasx_xvld((const __m256i*)qh, 0); qh += 32;
+
+            const __m256i q4h_0 = __lasx_xvslli_h(__lasx_xvand_v(q4bitsH, m2), 4);
+            const __m256i q4h_1 = __lasx_xvslli_h(__lasx_xvand_v(__lasx_xvsrli_h(q4bitsH, 2), m2), 4);
+            const __m256i q4h_2 = __lasx_xvslli_h(__lasx_xvand_v(__lasx_xvsrli_h(q4bitsH, 4), m2), 4);
+            const __m256i q4h_3 = __lasx_xvslli_h(__lasx_xvand_v(__lasx_xvsrli_h(q4bitsH, 6), m2), 4);
+
+            const __m256i q4_0 = __lasx_xvor_v(__lasx_xvand_v(q4bits1, m4), q4h_0);
+            const __m256i q4_1 = __lasx_xvor_v(__lasx_xvand_v(q4bits2, m4), q4h_1);
+            const __m256i q4_2 = __lasx_xvor_v(__lasx_xvand_v(__lasx_xvsrli_h(q4bits1, 4), m4), q4h_2);
+            const __m256i q4_3 = __lasx_xvor_v(__lasx_xvand_v(__lasx_xvsrli_h(q4bits2, 4), m4), q4h_3);
+
+            const __m256i q8_0 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8_1 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8_2 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8_3 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+
+            __m256i q8s_0 = lasx_maddubs_h(m32s, q8_0);
+            __m256i q8s_1 = lasx_maddubs_h(m32s, q8_1);
+            __m256i q8s_2 = lasx_maddubs_h(m32s, q8_2);
+            __m256i q8s_3 = lasx_maddubs_h(m32s, q8_3);
+
+            __m256i p16_0 = lasx_maddubs_h(q4_0, q8_0);
+            __m256i p16_1 = lasx_maddubs_h(q4_1, q8_1);
+            __m256i p16_2 = lasx_maddubs_h(q4_2, q8_2);
+            __m256i p16_3 = lasx_maddubs_h(q4_3, q8_3);
+
+            p16_0 = __lasx_xvsub_h(p16_0, q8s_0);
+            p16_1 = __lasx_xvsub_h(p16_1, q8s_1);
+            p16_2 = __lasx_xvsub_h(p16_2, q8s_2);
+            p16_3 = __lasx_xvsub_h(p16_3, q8s_3);
+
+            p16_0 = lasx_madd_h(lasx_ext8_16(scale_0), p16_0);
+            p16_1 = lasx_madd_h(lasx_ext8_16(scale_1), p16_1);
+            p16_2 = lasx_madd_h(lasx_ext8_16(scale_2), p16_2);
+            p16_3 = lasx_madd_h(lasx_ext8_16(scale_3), p16_3);
+
+            sumi = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p16_0, p16_1));
+            sumi = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p16_2, p16_3));
+        }
+
+        acc = __lasx_xvfmadd_s((__m256)__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(sumi), acc);
+    }
+
+    *s = hsum_float_8(acc);
+
+#else
+
+    int8_t  aux8[QK_K];
+    int16_t aux16[8];
+    float   sums [8];
+    int32_t aux32[8];
+    memset(sums, 0, 8*sizeof(float));
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+        const uint8_t * restrict q4 = x[i].ql;
+        const uint8_t * restrict qh = x[i].qh;
+        const  int8_t * restrict q8 = y[i].qs;
+        memset(aux32, 0, 8*sizeof(int32_t));
+        int8_t * restrict a = aux8;
+        for (int j = 0; j < QK_K; j += 128) {
+            for (int l = 0; l < 32; ++l) {
+                a[l +  0] = (int8_t)((q4[l +  0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32;
+                a[l + 32] = (int8_t)((q4[l + 32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32;
+                a[l + 64] = (int8_t)((q4[l +  0] >>  4) | (((qh[l] >> 4) & 3) << 4)) - 32;
+                a[l + 96] = (int8_t)((q4[l + 32] >>  4) | (((qh[l] >> 6) & 3) << 4)) - 32;
+            }
+            a  += 128;
+            q4 += 64;
+            qh += 32;
+        }
+        a = aux8;
+        int is = 0;
+        for (int j = 0; j < QK_K/16; ++j) {
+            int scale = x[i].scales[is++];
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
+            q8 += 8; a += 8;
+            for (int l = 0; l < 8; ++l) aux16[l] = q8[l] * a[l];
+            for (int l = 0; l < 8; ++l) aux32[l] += scale * aux16[l];
+            q8 += 8; a += 8;
+        }
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        for (int l = 0; l < 8; ++l) sums[l] += d * aux32[l];
+    }
+    for (int l = 0; l < 8; ++l) sumf += sums[l];
+    *s = sumf;
+#endif
+}
+
+#if defined (__AVX__) || defined (__AVX2__) || defined (__ARM_NEON) || defined (__POWER9_VECTOR__) || defined(__loongarch_asx)
+static const int8_t keven_signs_q2xs[1024] = {
+     1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1, -1,  1, -1,  1,  1,  1,  1,  1, -1, -1, -1,  1,  1,  1,  1,  1,  1,
+     1,  1, -1,  1,  1,  1,  1, -1, -1,  1, -1,  1,  1,  1,  1,  1,  1, -1, -1,  1,  1,  1,  1,  1, -1, -1, -1,  1,  1,  1,  1, -1,
+     1,  1,  1, -1,  1,  1,  1, -1, -1,  1,  1, -1,  1,  1,  1,  1,  1, -1,  1, -1,  1,  1,  1,  1, -1, -1,  1, -1,  1,  1,  1, -1,
+     1,  1, -1, -1,  1,  1,  1,  1, -1,  1, -1, -1,  1,  1,  1, -1,  1, -1, -1, -1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1,  1,  1,
+     1,  1,  1,  1, -1,  1,  1, -1, -1,  1,  1,  1, -1,  1,  1,  1,  1, -1,  1,  1, -1,  1,  1,  1, -1, -1,  1,  1, -1,  1,  1, -1,
+     1,  1, -1,  1, -1,  1,  1,  1, -1,  1, -1,  1, -1,  1,  1, -1,  1, -1, -1,  1, -1,  1,  1, -1, -1, -1, -1,  1, -1,  1,  1,  1,
+     1,  1,  1, -1, -1,  1,  1,  1, -1,  1,  1, -1, -1,  1,  1, -1,  1, -1,  1, -1, -1,  1,  1, -1, -1, -1,  1, -1, -1,  1,  1,  1,
+     1,  1, -1, -1, -1,  1,  1, -1, -1,  1, -1, -1, -1,  1,  1,  1,  1, -1, -1, -1, -1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1, -1,
+     1,  1,  1,  1,  1, -1,  1, -1, -1,  1,  1,  1,  1, -1,  1,  1,  1, -1,  1,  1,  1, -1,  1,  1, -1, -1,  1,  1,  1, -1,  1, -1,
+     1,  1, -1,  1,  1, -1,  1,  1, -1,  1, -1,  1,  1, -1,  1, -1,  1, -1, -1,  1,  1, -1,  1, -1, -1, -1, -1,  1,  1, -1,  1,  1,
+     1,  1,  1, -1,  1, -1,  1,  1, -1,  1,  1, -1,  1, -1,  1, -1,  1, -1,  1, -1,  1, -1,  1, -1, -1, -1,  1, -1,  1, -1,  1,  1,
+     1,  1, -1, -1,  1, -1,  1, -1, -1,  1, -1, -1,  1, -1,  1,  1,  1, -1, -1, -1,  1, -1,  1,  1, -1, -1, -1, -1,  1, -1,  1, -1,
+     1,  1,  1,  1, -1, -1,  1,  1, -1,  1,  1,  1, -1, -1,  1, -1,  1, -1,  1,  1, -1, -1,  1, -1, -1, -1,  1,  1, -1, -1,  1,  1,
+     1,  1, -1,  1, -1, -1,  1, -1, -1,  1, -1,  1, -1, -1,  1,  1,  1, -1, -1,  1, -1, -1,  1,  1, -1, -1, -1,  1, -1, -1,  1, -1,
+     1,  1,  1, -1, -1, -1,  1, -1, -1,  1,  1, -1, -1, -1,  1,  1,  1, -1,  1, -1, -1, -1,  1,  1, -1, -1,  1, -1, -1, -1,  1, -1,
+     1,  1, -1, -1, -1, -1,  1,  1, -1,  1, -1, -1, -1, -1,  1, -1,  1, -1, -1, -1, -1, -1,  1, -1, -1, -1, -1, -1, -1, -1,  1,  1,
+     1,  1,  1,  1,  1,  1, -1, -1, -1,  1,  1,  1,  1,  1, -1,  1,  1, -1,  1,  1,  1,  1, -1,  1, -1, -1,  1,  1,  1,  1, -1, -1,
+     1,  1, -1,  1,  1,  1, -1,  1, -1,  1, -1,  1,  1,  1, -1, -1,  1, -1, -1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1,  1, -1,  1,
+     1,  1,  1, -1,  1,  1, -1,  1, -1,  1,  1, -1,  1,  1, -1, -1,  1, -1,  1, -1,  1,  1, -1, -1, -1, -1,  1, -1,  1,  1, -1,  1,
+     1,  1, -1, -1,  1,  1, -1, -1, -1,  1, -1, -1,  1,  1, -1,  1,  1, -1, -1, -1,  1,  1, -1,  1, -1, -1, -1, -1,  1,  1, -1, -1,
+     1,  1,  1,  1, -1,  1, -1,  1, -1,  1,  1,  1, -1,  1, -1, -1,  1, -1,  1,  1, -1,  1, -1, -1, -1, -1,  1,  1, -1,  1, -1,  1,
+     1,  1, -1,  1, -1,  1, -1, -1, -1,  1, -1,  1, -1,  1, -1,  1,  1, -1, -1,  1, -1,  1, -1,  1, -1, -1, -1,  1, -1,  1, -1, -1,
+     1,  1,  1, -1, -1,  1, -1, -1, -1,  1,  1, -1, -1,  1, -1,  1,  1, -1,  1, -1, -1,  1, -1,  1, -1, -1,  1, -1, -1,  1, -1, -1,
+     1,  1, -1, -1, -1,  1, -1,  1, -1,  1, -1, -1, -1,  1, -1, -1,  1, -1, -1, -1, -1,  1, -1, -1, -1, -1, -1, -1, -1,  1, -1,  1,
+     1,  1,  1,  1,  1, -1, -1,  1, -1,  1,  1,  1,  1, -1, -1, -1,  1, -1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1,  1, -1, -1,  1,
+     1,  1, -1,  1,  1, -1, -1, -1, -1,  1, -1,  1,  1, -1, -1,  1,  1, -1, -1,  1,  1, -1, -1,  1, -1, -1, -1,  1,  1, -1, -1, -1,
+     1,  1,  1, -1,  1, -1, -1, -1, -1,  1,  1, -1,  1, -1, -1,  1,  1, -1,  1, -1,  1, -1, -1,  1, -1, -1,  1, -1,  1, -1, -1, -1,
+     1,  1, -1, -1,  1, -1, -1,  1, -1,  1, -1, -1,  1, -1, -1, -1,  1, -1, -1, -1,  1, -1, -1, -1, -1, -1, -1, -1,  1, -1, -1,  1,
+     1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1,  1, -1, -1, -1,  1,  1, -1,  1,  1, -1, -1, -1,  1, -1, -1,  1,  1, -1, -1, -1, -1,
+     1,  1, -1,  1, -1, -1, -1,  1, -1,  1, -1,  1, -1, -1, -1, -1,  1, -1, -1,  1, -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1,  1,
+     1,  1,  1, -1, -1, -1, -1,  1, -1,  1,  1, -1, -1, -1, -1, -1,  1, -1,  1, -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1, -1,  1,
+     1,  1, -1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1, -1, -1,  1,  1, -1, -1, -1, -1, -1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1,
+};
+#endif
+
+void ggml_vec_dot_iq2_xxs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_iq2_xxs * restrict x = vx;
+    const block_q8_K    * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+#if defined(__ARM_NEON)
+
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    uint32_t aux32[4];
+    const uint8_t * aux8 = (const uint8_t *)aux32;
+
+    ggml_int8x16x4_t q2u;
+    ggml_int8x16x4_t q2s;
+    ggml_int8x16x4_t q8b;
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint16_t * restrict q2 = x[i].qs;
+        const int8_t   * restrict q8 = y[i].qs;
+        float sumf1 = 0, sumf2 = 0;
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
+            memcpy(aux32, q2, 4*sizeof(uint32_t)); q2 += 8;
+            q2u.val[0] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[ 0])), vld1_s8((const void *)(iq2xxs_grid + aux8[ 1])));
+            q2u.val[1] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[ 2])), vld1_s8((const void *)(iq2xxs_grid + aux8[ 3])));
+            q2u.val[2] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[ 8])), vld1_s8((const void *)(iq2xxs_grid + aux8[ 9])));
+            q2u.val[3] = vcombine_s8(vld1_s8((const void *)(iq2xxs_grid + aux8[10])), vld1_s8((const void *)(iq2xxs_grid + aux8[11])));
+            q2s.val[0] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >>  0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >>  7) & 127))));
+            q2s.val[1] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >> 21) & 127))));
+            q2s.val[2] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[3] >>  0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[3] >>  7) & 127))));
+            q2s.val[3] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[3] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[3] >> 21) & 127))));
+            q2u.val[0] = vmulq_s8(q2u.val[0], q2s.val[0]);
+            q2u.val[1] = vmulq_s8(q2u.val[1], q2s.val[1]);
+            q2u.val[2] = vmulq_s8(q2u.val[2], q2s.val[2]);
+            q2u.val[3] = vmulq_s8(q2u.val[3], q2s.val[3]);
+            const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[0], q8b.val[0]), q2u.val[1], q8b.val[1]);
+            const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[2], q8b.val[2]), q2u.val[3], q8b.val[3]);
+            sumf1 += vaddvq_s32(p1) * (0.5f + (aux32[1] >> 28));
+            sumf2 += vaddvq_s32(p2) * (0.5f + (aux32[3] >> 28));
+        }
+        sumf += d*(sumf1 + sumf2);
+    }
+    *s = 0.25f * sumf;
+
+#elif defined(__AVX2__)
+
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    uint32_t aux32[4];
+    const uint8_t * aux8 = (const uint8_t *)aux32;
+
+    __m256 accumf = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint16_t * restrict q2 = x[i].qs;
+        const int8_t   * restrict q8 = y[i].qs;
+        __m256i sumi1 = _mm256_setzero_si256();
+        __m256i sumi2 = _mm256_setzero_si256();
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            memcpy(aux32, q2, 4*sizeof(uint32_t)); q2 += 8;
+            const __m256i q2_1 = _mm256_set_epi64x(iq2xxs_grid[aux8[ 3]], iq2xxs_grid[aux8[ 2]], iq2xxs_grid[aux8[1]], iq2xxs_grid[aux8[0]]);
+            const __m256i q2_2 = _mm256_set_epi64x(iq2xxs_grid[aux8[11]], iq2xxs_grid[aux8[10]], iq2xxs_grid[aux8[9]], iq2xxs_grid[aux8[8]]);
+            const __m256i s2_1 = _mm256_set_epi64x(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127],
+                                                   signs64[(aux32[1] >>  7) & 127], signs64[(aux32[1] >>  0) & 127]);
+            const __m256i s2_2 = _mm256_set_epi64x(signs64[(aux32[3] >> 21) & 127], signs64[(aux32[3] >> 14) & 127],
+                                                   signs64[(aux32[3] >>  7) & 127], signs64[(aux32[3] >>  0) & 127]);
+            const __m256i q8s_1 = _mm256_sign_epi8(q8_1, s2_1);
+            const __m256i q8s_2 = _mm256_sign_epi8(q8_2, s2_2);
+            const __m256i dot1  = _mm256_maddubs_epi16(q2_1, q8s_1);
+            const __m256i dot2  = _mm256_maddubs_epi16(q2_2, q8s_2);
+            const uint16_t ls1 = aux32[1] >> 28;
+            const uint16_t ls2 = aux32[3] >> 28;
+            const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(2*ls1+1));
+            const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(2*ls2+1));
+            sumi1 = _mm256_add_epi32(sumi1, p1);
+            sumi2 = _mm256_add_epi32(sumi2, p2);
+        }
+
+        accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf);
+
+    }
+
+    *s = 0.125f * hsum_float_8(accumf);
+
+#elif defined(__AVX__)
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    uint32_t aux32[4];
+    const uint8_t * aux8 = (const uint8_t *)aux32;
+
+    __m256 accumf = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint16_t * restrict q2 = x[i].qs;
+        const int8_t   * restrict q8 = y[i].qs;
+        __m128i sumi1_0 = _mm_setzero_si128();
+        __m128i sumi1_1 = _mm_setzero_si128();
+        __m128i sumi2_0 = _mm_setzero_si128();
+        __m128i sumi2_1 = _mm_setzero_si128();
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m128i q8_1_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_1_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_2_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_2_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            memcpy(aux32, q2, 4*sizeof(uint32_t)); q2 += 8;
+            const __m128i q2_1_0 = _mm_set_epi64x(iq2xxs_grid[aux8[1]], iq2xxs_grid[aux8[0]]);
+            const __m128i q2_1_1 = _mm_set_epi64x(iq2xxs_grid[aux8[3]], iq2xxs_grid[aux8[2]]);
+            const __m128i q2_2_0 = _mm_set_epi64x(iq2xxs_grid[aux8[9]], iq2xxs_grid[aux8[8]]);
+            const __m128i q2_2_1 = _mm_set_epi64x(iq2xxs_grid[aux8[11]], iq2xxs_grid[aux8[10]]);
+            const __m128i s2_1_0 = _mm_set_epi64x(signs64[(aux32[1] >>  7) & 127], signs64[(aux32[1] >>  0) & 127]);
+            const __m128i s2_1_1 = _mm_set_epi64x(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127]);
+            const __m128i s2_2_0 = _mm_set_epi64x(signs64[(aux32[3] >>  7) & 127], signs64[(aux32[3] >>  0) & 127]);
+            const __m128i s2_2_1 = _mm_set_epi64x(signs64[(aux32[3] >> 21) & 127], signs64[(aux32[3] >> 14) & 127]);
+            const __m128i q8s_1_0 = _mm_sign_epi8(q8_1_0, s2_1_0);
+            const __m128i q8s_1_1 = _mm_sign_epi8(q8_1_1, s2_1_1);
+            const __m128i q8s_2_0 = _mm_sign_epi8(q8_2_0, s2_2_0);
+            const __m128i q8s_2_1 = _mm_sign_epi8(q8_2_1, s2_2_1);
+            const __m128i dot1_0  = _mm_maddubs_epi16(q2_1_0, q8s_1_0);
+            const __m128i dot1_1  = _mm_maddubs_epi16(q2_1_1, q8s_1_1);
+            const __m128i dot2_0  = _mm_maddubs_epi16(q2_2_0, q8s_2_0);
+            const __m128i dot2_1  = _mm_maddubs_epi16(q2_2_1, q8s_2_1);
+            const uint16_t ls1 = aux32[1] >> 28;
+            const uint16_t ls2 = aux32[3] >> 28;
+            const __m128i p1_0 = _mm_madd_epi16(dot1_0, _mm_set1_epi16(2*ls1+1));
+            const __m128i p1_1 = _mm_madd_epi16(dot1_1, _mm_set1_epi16(2*ls1+1));
+            const __m128i p2_0 = _mm_madd_epi16(dot2_0, _mm_set1_epi16(2*ls2+1));
+            const __m128i p2_1 = _mm_madd_epi16(dot2_1, _mm_set1_epi16(2*ls2+1));
+            sumi1_0 = _mm_add_epi32(sumi1_0, p1_0);
+            sumi1_1 = _mm_add_epi32(sumi1_1, p1_1);
+            sumi2_0 = _mm_add_epi32(sumi2_0, p2_0);
+            sumi2_1 = _mm_add_epi32(sumi2_1, p2_1);
+        }
+
+        accumf = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(MM256_SET_M128I(_mm_add_epi32(sumi1_1, sumi2_1), _mm_add_epi32(sumi1_0, sumi2_0)))), accumf);
+
+    }
+
+    *s = 0.125f * hsum_float_8(accumf);
+
+#elif defined(__POWER9_VECTOR__)
+    const vector int v0 = vec_splats((int32_t)0);
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+
+        const uint16_t * restrict q2 = x[i].qs;
+        const int8_t  *  restrict q8 = y[i].qs;
+
+        for (int j = 0; j < QK_K/32; j += 2) {
+            __builtin_prefetch(q2, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            uint32_t aux32[4];
+            const uint8_t * aux8 = (const uint8_t *)aux32;
+
+            memcpy(aux32, q2, 4*sizeof(uint32_t));
+            q2 += 8;
+
+            vector signed long long aux64x2_0 = {*(const int64_t *)(iq2xxs_grid + aux8[ 0]), *(const int64_t *)(iq2xxs_grid + aux8[ 1])};
+            vector signed long long aux64x2_1 = {*(const int64_t *)(iq2xxs_grid + aux8[ 2]), *(const int64_t *)(iq2xxs_grid + aux8[ 3])};
+            vector signed long long aux64x2_2 = {*(const int64_t *)(iq2xxs_grid + aux8[ 8]), *(const int64_t *)(iq2xxs_grid + aux8[ 9])};
+            vector signed long long aux64x2_3 = {*(const int64_t *)(iq2xxs_grid + aux8[10]), *(const int64_t *)(iq2xxs_grid + aux8[11])};
+
+            vector signed long long vsigns0 = {*(const int64_t *)(signs64 + ((aux32[1] >>  0) & 127)), *(const int64_t *)(signs64 + ((aux32[1] >>  7) & 127))};
+            vector signed long long vsigns1 = {*(const int64_t *)(signs64 + ((aux32[1] >> 14) & 127)), *(const int64_t *)(signs64 + ((aux32[1] >> 21) & 127))};
+            vector signed long long vsigns2 = {*(const int64_t *)(signs64 + ((aux32[3] >>  0) & 127)), *(const int64_t *)(signs64 + ((aux32[3] >>  7) & 127))};
+            vector signed long long vsigns3 = {*(const int64_t *)(signs64 + ((aux32[3] >> 14) & 127)), *(const int64_t *)(signs64 + ((aux32[3] >> 21) & 127))};
+
+            vector signed char q2x0 = (vector signed char)vec_mul((vector signed char)vsigns0, (vector signed char)aux64x2_0);
+            vector signed char q2x1 = (vector signed char)vec_mul((vector signed char)vsigns1, (vector signed char)aux64x2_1);
+            vector signed char q2x2 = (vector signed char)vec_mul((vector signed char)vsigns2, (vector signed char)aux64x2_2);
+            vector signed char q2x3 = (vector signed char)vec_mul((vector signed char)vsigns3, (vector signed char)aux64x2_3);
+
+            vector signed char q8y0 = vec_xl( 0, q8);
+            vector signed char q8y1 = vec_xl(16, q8);
+            vector signed char q8y2 = vec_xl(32, q8);
+            vector signed char q8y3 = vec_xl(48, q8);
+            q8 += 64;
+
+            vector signed short qv0 = vec_add(vec_mule(q2x0, q8y0), vec_mulo(q2x0, q8y0));
+            vector signed short qv1 = vec_add(vec_mule(q2x1, q8y1), vec_mulo(q2x1, q8y1));
+            vector signed short qv2 = vec_add(vec_mule(q2x2, q8y2), vec_mulo(q2x2, q8y2));
+            vector signed short qv3 = vec_add(vec_mule(q2x3, q8y3), vec_mulo(q2x3, q8y3));
+
+            const uint16_t ls0 = aux32[1] >> 28;
+            const uint16_t ls1 = aux32[3] >> 28;
+
+            vector signed short vscales01 = vec_splats((int16_t)(2*ls0+1));
+            vector signed short vscales23 = vec_splats((int16_t)(2*ls1+1));
+
+            vsumi0 = vec_msum(qv0, vscales01, vsumi0);
+            vsumi1 = vec_msum(qv1, vscales01, vsumi1);
+            vsumi2 = vec_msum(qv2, vscales23, vsumi2);
+            vsumi3 = vec_msum(qv3, vscales23, vsumi3);
+        }
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = 0.125f * vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    uint32_t aux32[4];
+    const uint8_t * aux8 = (const uint8_t *)aux32;
+
+    __m256 accumf = (__m256)__lasx_xvldi(0);
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint16_t * restrict q2 = x[i].qs;
+        const int8_t   * restrict q8 = y[i].qs;
+        __m256i sumi1 = __lasx_xvldi(0);
+        __m256i sumi2 = __lasx_xvldi(0);
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m256i q8_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i q8_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            memcpy(aux32, q2, 4*sizeof(uint32_t)); q2 += 8;
+
+            const __m256i q2_1 = lasx_set_d(iq2xxs_grid[aux8[ 3]], iq2xxs_grid[aux8[ 2]], iq2xxs_grid[aux8[1]], iq2xxs_grid[aux8[0]]);
+            const __m256i q2_2 = lasx_set_d(iq2xxs_grid[aux8[11]], iq2xxs_grid[aux8[10]], iq2xxs_grid[aux8[9]], iq2xxs_grid[aux8[8]]);
+            const __m256i s2_1 = lasx_set_d(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127],
+                                                   signs64[(aux32[1] >>  7) & 127], signs64[(aux32[1] >>  0) & 127]);
+            const __m256i s2_2 = lasx_set_d(signs64[(aux32[3] >> 21) & 127], signs64[(aux32[3] >> 14) & 127],
+                                                   signs64[(aux32[3] >>  7) & 127], signs64[(aux32[3] >>  0) & 127]);
+            const __m256i q8s_1 = __lasx_xvsigncov_b(s2_1, q8_1);
+            const __m256i q8s_2 = __lasx_xvsigncov_b(s2_2, q8_2);
+            const __m256i dot1  = lasx_maddubs_h(q2_1, q8s_1);
+            const __m256i dot2  = lasx_maddubs_h(q2_2, q8s_2);
+            const uint16_t ls1 = aux32[1] >> 28;
+            const uint16_t ls2 = aux32[3] >> 28;
+            const __m256i p1 = lasx_madd_h(dot1, __lasx_xvreplgr2vr_h(2*ls1+1));
+            const __m256i p2 = lasx_madd_h(dot2, __lasx_xvreplgr2vr_h(2*ls2+1));
+            sumi1 = __lasx_xvadd_w(sumi1, p1);
+            sumi2 = __lasx_xvadd_w(sumi2, p2);
+        }
+
+        accumf = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accumf);
+    }
+
+    *s = 0.125f * hsum_float_8(accumf);
+
+#else
+
+    uint32_t aux32[2];
+    const uint8_t * aux8 = (const uint8_t *)aux32;
+
+    float sumf = 0.f;
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint16_t * restrict q2 = x[i].qs;
+        const int8_t   * restrict q8 = y[i].qs;
+        int32_t bsum = 0;
+        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
+            memcpy(aux32, q2, 2*sizeof(uint32_t));
+            q2 += 4;
+            const uint32_t ls = 2*(aux32[1] >> 28) + 1;
+            int32_t sumi = 0;
+            for (int l = 0; l < 4; ++l) {
+                const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]);
+                const uint8_t  signs = ksigns_iq2xs[(aux32[1] >> 7*l) & 127];
+                for (int j = 0; j < 8; ++j) {
+                    sumi += grid[j] * q8[j] * (signs & kmask_iq2xs[j] ? -1 : 1);
+                }
+                q8 += 8;
+            }
+            bsum += sumi * ls;
+        }
+        sumf += d * bsum;
+    }
+    *s = 0.125f * sumf;
+#endif
+}
+
+void ggml_vec_dot_iq2_xs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_iq2_xs * restrict x = vx;
+    const block_q8_K   * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+#if defined(__ARM_NEON)
+
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    ggml_int8x16x4_t q2u;
+    ggml_int8x16x4_t q2s;
+    ggml_int8x16x4_t q8b;
+
+    int32x4x4_t scales32;
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint16_t * restrict q2 = x[i].qs;
+        const int8_t   * restrict q8 = y[i].qs;
+        const uint8x8_t scales8 = vld1_u8(x[i].scales);
+        const uint8x8_t scales_l = vand_u8(scales8, vdup_n_u8(0xf));
+        const uint8x8_t scales_h = vshr_n_u8(scales8, 4);
+        uint8x16_t scales = vcombine_u8(vzip1_u8(scales_l, scales_h), vzip2_u8(scales_l, scales_h));
+        scales = vaddq_u8(vshlq_n_u8(scales, 1), vdupq_n_u8(1));
+        const uint16x8_t scales1 = vmovl_u8(vget_low_u8(scales));
+        const uint16x8_t scales2 = vmovl_u8(vget_high_u8(scales));
+        scales32.val[0] = vreinterpretq_s32_u32(vmovl_u16(vget_low_u16(scales1)));
+        scales32.val[1] = vreinterpretq_s32_u32(vmovl_u16(vget_high_u16(scales1)));
+        scales32.val[2] = vreinterpretq_s32_u32(vmovl_u16(vget_low_u16(scales2)));
+        scales32.val[3] = vreinterpretq_s32_u32(vmovl_u16(vget_high_u16(scales2)));
+        int32x4_t sumi = vdupq_n_s32(0);
+        for (int ib64 = 0; ib64 < QK_K/64; ++ib64) {
+            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
+            q2u.val[0] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[0] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[1] & 511))));
+            q2u.val[1] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[2] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[3] & 511))));
+            q2u.val[2] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[4] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[5] & 511))));
+            q2u.val[3] = vcombine_s8(vld1_s8((const void *)(iq2xs_grid + (q2[6] & 511))), vld1_s8((const void *)(iq2xs_grid + (q2[7] & 511))));
+            q2s.val[0] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[0] >> 9))), vld1_s8((const void *)(signs64 + (q2[1] >> 9))));
+            q2s.val[1] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[2] >> 9))), vld1_s8((const void *)(signs64 + (q2[3] >> 9))));
+            q2s.val[2] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[4] >> 9))), vld1_s8((const void *)(signs64 + (q2[5] >> 9))));
+            q2s.val[3] = vcombine_s8(vld1_s8((const void *)(signs64 + (q2[6] >> 9))), vld1_s8((const void *)(signs64 + (q2[7] >> 9))));
+            q2u.val[0] = vmulq_s8(q2u.val[0], q2s.val[0]);
+            q2u.val[1] = vmulq_s8(q2u.val[1], q2s.val[1]);
+            q2u.val[2] = vmulq_s8(q2u.val[2], q2s.val[2]);
+            q2u.val[3] = vmulq_s8(q2u.val[3], q2s.val[3]);
+            const int32x4_t p1 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[0], q8b.val[0]);
+            const int32x4_t p2 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[1], q8b.val[1]);
+            const int32x4_t p3 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[2], q8b.val[2]);
+            const int32x4_t p4 = ggml_vdotq_s32(vdupq_n_s32(0), q2u.val[3], q8b.val[3]);
+            const int32x4_t p = vpaddq_s32(vpaddq_s32(p1, p2), vpaddq_s32(p3, p4));
+            sumi = vmlaq_s32(sumi, p, scales32.val[ib64]);
+            q2 += 8;
+        }
+        sumf += d*vaddvq_s32(sumi);
+    }
+    *s = 0.125f * sumf;
+
+#elif defined(__AVX2__)
+
+    const __m256i mone = _mm256_set1_epi8(1);
+    static const char block_sign_shuffle_mask_1[32] = {
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+    };
+    static const char block_sign_shuffle_mask_2[32] = {
+        0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
+    };
+    static const uint8_t bit_selector_mask_bytes[32] = {
+        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    };
+
+    const __m256i bit_selector_mask = _mm256_loadu_si256((const __m256i*)bit_selector_mask_bytes);
+    const __m256i block_sign_shuffle_1 = _mm256_loadu_si256((const __m256i*)block_sign_shuffle_mask_1);
+    const __m256i block_sign_shuffle_2 = _mm256_loadu_si256((const __m256i*)block_sign_shuffle_mask_2);
+
+    static const uint8_t k_bit_helper[32] = {
+        0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00,
+        0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00,
+    };
+    const __m256i bit_helper = _mm256_loadu_si256((const __m256i*)k_bit_helper);
+    const __m256i m511 = _mm256_set1_epi16(511);
+    const __m128i m4 = _mm_set1_epi8(0xf);
+    const __m128i m1 = _mm_set1_epi8(1);
+
+    uint64_t aux64;
+
+    // somewhat hacky, but gives a significant boost in performance
+    __m256i aux_gindex;
+    const uint16_t * gindex = (const uint16_t *)&aux_gindex;
+
+    __m256 accumf = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint16_t * restrict q2 = x[i].qs;
+        const int8_t   * restrict q8 = y[i].qs;
+
+        memcpy(&aux64, x[i].scales, 8);
+        __m128i stmp = _mm_set1_epi64x(aux64);
+        stmp = _mm_unpacklo_epi8(_mm_and_si128(stmp, m4), _mm_and_si128(_mm_srli_epi16(stmp, 4), m4));
+        const __m128i scales = _mm_add_epi8(_mm_slli_epi16(stmp, 1), m1);
+
+        __m256i sumi1 = _mm256_setzero_si256();
+        __m256i sumi2 = _mm256_setzero_si256();
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 4) {
+
+            const __m256i q2_data = _mm256_loadu_si256((const __m256i*)q2);  q2 += 16;
+            aux_gindex = _mm256_and_si256(q2_data, m511);
+
+            const __m256i partial_sign_bits = _mm256_srli_epi16(q2_data, 9);
+            const __m256i partial_sign_bits_upper = _mm256_srli_epi16(q2_data, 13);
+            const __m256i partial_sign_bits_for_counting = _mm256_xor_si256(partial_sign_bits, partial_sign_bits_upper);
+
+            const __m256i odd_bits = _mm256_shuffle_epi8(bit_helper, partial_sign_bits_for_counting);
+            const __m256i full_sign_bits = _mm256_or_si256(partial_sign_bits, odd_bits);
+
+            const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q8_3 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q8_4 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+
+            const __m256i q2_1 = _mm256_set_epi64x(iq2xs_grid[gindex[ 3]], iq2xs_grid[gindex[ 2]],
+                                                   iq2xs_grid[gindex[ 1]], iq2xs_grid[gindex[ 0]]);
+            const __m256i q2_2 = _mm256_set_epi64x(iq2xs_grid[gindex[ 7]], iq2xs_grid[gindex[ 6]],
+                                                   iq2xs_grid[gindex[ 5]], iq2xs_grid[gindex[ 4]]);
+            const __m256i q2_3 = _mm256_set_epi64x(iq2xs_grid[gindex[11]], iq2xs_grid[gindex[10]],
+                                                   iq2xs_grid[gindex[ 9]], iq2xs_grid[gindex[ 8]]);
+            const __m256i q2_4 = _mm256_set_epi64x(iq2xs_grid[gindex[15]], iq2xs_grid[gindex[14]],
+                                                   iq2xs_grid[gindex[13]], iq2xs_grid[gindex[12]]);
+
+            const __m128i full_signs_l = _mm256_castsi256_si128(full_sign_bits);
+            const __m128i full_signs_h = _mm256_extractf128_si256(full_sign_bits, 1);
+            const __m256i full_signs_1 = MM256_SET_M128I(full_signs_l, full_signs_l);
+            const __m256i full_signs_2 = MM256_SET_M128I(full_signs_h, full_signs_h);
+
+            __m256i signs;
+            signs = _mm256_shuffle_epi8(full_signs_1, block_sign_shuffle_1);
+            signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask);
+            const __m256i q8s_1 = _mm256_sign_epi8(q8_1, _mm256_or_si256(signs, mone));
+
+            signs = _mm256_shuffle_epi8(full_signs_1, block_sign_shuffle_2);
+            signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask);
+            const __m256i q8s_2 = _mm256_sign_epi8(q8_2, _mm256_or_si256(signs, mone));
+
+            signs = _mm256_shuffle_epi8(full_signs_2, block_sign_shuffle_1);
+            signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask);
+            const __m256i q8s_3 = _mm256_sign_epi8(q8_3, _mm256_or_si256(signs, mone));
+
+            signs = _mm256_shuffle_epi8(full_signs_2, block_sign_shuffle_2);
+            signs = _mm256_cmpeq_epi8(_mm256_and_si256(signs, bit_selector_mask), bit_selector_mask);
+            const __m256i q8s_4 = _mm256_sign_epi8(q8_4, _mm256_or_si256(signs, mone));
+
+            const __m256i dot1  = _mm256_maddubs_epi16(q2_1, q8s_1);
+            const __m256i dot2  = _mm256_maddubs_epi16(q2_2, q8s_2);
+            const __m256i dot3  = _mm256_maddubs_epi16(q2_3, q8s_3);
+            const __m256i dot4  = _mm256_maddubs_epi16(q2_4, q8s_4);
+
+            const __m256i sc1 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+0)));
+            const __m256i sc2 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+1)));
+            const __m256i sc3 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+2)));
+            const __m256i sc4 = _mm256_cvtepi8_epi16(_mm_shuffle_epi8(scales, get_scale_shuffle(ib32+3)));
+
+            sumi1 = _mm256_add_epi32(sumi1, _mm256_madd_epi16(dot1, sc1));
+            sumi2 = _mm256_add_epi32(sumi2, _mm256_madd_epi16(dot2, sc2));
+            sumi1 = _mm256_add_epi32(sumi1, _mm256_madd_epi16(dot3, sc3));
+            sumi2 = _mm256_add_epi32(sumi2, _mm256_madd_epi16(dot4, sc4));
+        }
+
+        accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf);
+
+    }
+
+    *s = 0.125f * hsum_float_8(accumf);
+
+#elif defined(__AVX__)
+    const __m128i mone = _mm_set1_epi8(1);
+    static const char block_sign_shuffle_mask_1[32] = {
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+    };
+    static const char block_sign_shuffle_mask_2[32] = {
+        0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
+    };
+    static const uint8_t bit_selector_mask_bytes[32] = {
+        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    };
+
+    const __m128i bit_selector_mask_0 = _mm_loadu_si128((const __m128i*)bit_selector_mask_bytes);
+    const __m128i bit_selector_mask_1 = _mm_loadu_si128((const __m128i*)bit_selector_mask_bytes + 1);
+    const __m128i block_sign_shuffle_1_0 = _mm_loadu_si128((const __m128i*)block_sign_shuffle_mask_1);
+    const __m128i block_sign_shuffle_1_1 = _mm_loadu_si128((const __m128i*)block_sign_shuffle_mask_1 + 1);
+    const __m128i block_sign_shuffle_2_0 = _mm_loadu_si128((const __m128i*)block_sign_shuffle_mask_2);
+    const __m128i block_sign_shuffle_2_1 = _mm_loadu_si128((const __m128i*)block_sign_shuffle_mask_2 + 1);
+
+    static const uint8_t k_bit_helper[32] = {
+        0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00,
+        0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00,
+    };
+    const __m128i bit_helper_0 = _mm_loadu_si128((const __m128i*)k_bit_helper);
+    const __m128i bit_helper_1 = _mm_loadu_si128((const __m128i*)k_bit_helper + 1);
+    const __m128i m511 = _mm_set1_epi16(511);
+    const __m128i m4 = _mm_set1_epi8(0xf);
+    const __m128i m1 = _mm_set1_epi8(1);
+
+    uint64_t aux64;
+
+    // somewhat hacky, but gives a significant boost in performance
+    __m256i aux_gindex;
+    const uint16_t * gindex = (const uint16_t *)&aux_gindex;
+
+    __m256 accumf = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint16_t * restrict q2 = x[i].qs;
+        const int8_t   * restrict q8 = y[i].qs;
+
+        memcpy(&aux64, x[i].scales, 8);
+        __m128i stmp = _mm_set1_epi64x(aux64);
+        stmp = _mm_unpacklo_epi8(_mm_and_si128(stmp, m4), _mm_and_si128(_mm_srli_epi16(stmp, 4), m4));
+        const __m128i scales = _mm_add_epi8(_mm_slli_epi16(stmp, 1), m1);
+
+        __m128i sumi1_0 = _mm_setzero_si128();
+        __m128i sumi1_1 = _mm_setzero_si128();
+        __m128i sumi2_0 = _mm_setzero_si128();
+        __m128i sumi2_1 = _mm_setzero_si128();
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 4) {
+
+            const __m128i q2_data_0 = _mm_loadu_si128((const __m128i*)q2);
+            const __m128i q2_data_1 = _mm_loadu_si128((const __m128i*)q2 + 1);  q2 += 16;
+            aux_gindex = MM256_SET_M128I(_mm_and_si128(q2_data_1, m511), _mm_and_si128(q2_data_0, m511));
+
+            const __m128i partial_sign_bits_0 = _mm_srli_epi16(q2_data_0, 9);
+            const __m128i partial_sign_bits_1 = _mm_srli_epi16(q2_data_1, 9);
+            const __m128i partial_sign_bits_upper_0 = _mm_srli_epi16(q2_data_0, 13);
+            const __m128i partial_sign_bits_upper_1 = _mm_srli_epi16(q2_data_1, 13);
+            const __m128i partial_sign_bits_for_counting_0 = _mm_xor_si128(partial_sign_bits_0, partial_sign_bits_upper_0);
+            const __m128i partial_sign_bits_for_counting_1 = _mm_xor_si128(partial_sign_bits_1, partial_sign_bits_upper_1);
+
+            const __m128i odd_bits_0 = _mm_shuffle_epi8(bit_helper_0, partial_sign_bits_for_counting_0);
+            const __m128i odd_bits_1 = _mm_shuffle_epi8(bit_helper_1, partial_sign_bits_for_counting_1);
+            const __m128i full_sign_bits_0 = _mm_or_si128(partial_sign_bits_0, odd_bits_0);
+            const __m128i full_sign_bits_1 = _mm_or_si128(partial_sign_bits_1, odd_bits_1);
+
+            const __m128i q8_1_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_1_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_2_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_2_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_3_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_3_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_4_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_4_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+
+            const __m128i q2_1_0 = _mm_set_epi64x(iq2xs_grid[gindex[1]], iq2xs_grid[gindex[0]]);
+            const __m128i q2_1_1 = _mm_set_epi64x(iq2xs_grid[gindex[3]], iq2xs_grid[gindex[2]]);
+            const __m128i q2_2_0 = _mm_set_epi64x(iq2xs_grid[gindex[5]], iq2xs_grid[gindex[4]]);
+            const __m128i q2_2_1 = _mm_set_epi64x(iq2xs_grid[gindex[7]], iq2xs_grid[gindex[6]]);
+            const __m128i q2_3_0 = _mm_set_epi64x(iq2xs_grid[gindex[9]], iq2xs_grid[gindex[8]]);
+            const __m128i q2_3_1 = _mm_set_epi64x(iq2xs_grid[gindex[11]], iq2xs_grid[gindex[10]]);
+            const __m128i q2_4_0 = _mm_set_epi64x(iq2xs_grid[gindex[13]], iq2xs_grid[gindex[12]]);
+            const __m128i q2_4_1 = _mm_set_epi64x(iq2xs_grid[gindex[15]], iq2xs_grid[gindex[14]]);
+
+            // AVX2 full_signs_1 is full_sign_bits_0 here
+            // AVX2 full_signs_2 is full_sign_bits_1 here
+            __m128i signs_0, signs_1;
+            signs_0 = _mm_shuffle_epi8(full_sign_bits_0, block_sign_shuffle_1_0);
+            signs_1 = _mm_shuffle_epi8(full_sign_bits_0, block_sign_shuffle_1_1);
+            signs_0 = _mm_cmpeq_epi8(_mm_and_si128(signs_0, bit_selector_mask_0), bit_selector_mask_0);
+            signs_1 = _mm_cmpeq_epi8(_mm_and_si128(signs_1, bit_selector_mask_1), bit_selector_mask_1);
+            const __m128i q8s_1_0 = _mm_sign_epi8(q8_1_0, _mm_or_si128(signs_0, mone));
+            const __m128i q8s_1_1 = _mm_sign_epi8(q8_1_1, _mm_or_si128(signs_1, mone));
+
+            signs_0 = _mm_shuffle_epi8(full_sign_bits_0, block_sign_shuffle_2_0);
+            signs_1 = _mm_shuffle_epi8(full_sign_bits_0, block_sign_shuffle_2_1);
+            signs_0 = _mm_cmpeq_epi8(_mm_and_si128(signs_0, bit_selector_mask_0), bit_selector_mask_0);
+            signs_1 = _mm_cmpeq_epi8(_mm_and_si128(signs_1, bit_selector_mask_1), bit_selector_mask_1);
+            const __m128i q8s_2_0 = _mm_sign_epi8(q8_2_0, _mm_or_si128(signs_0, mone));
+            const __m128i q8s_2_1 = _mm_sign_epi8(q8_2_1, _mm_or_si128(signs_1, mone));
+
+            signs_0 = _mm_shuffle_epi8(full_sign_bits_1, block_sign_shuffle_1_0);
+            signs_1 = _mm_shuffle_epi8(full_sign_bits_1, block_sign_shuffle_1_1);
+            signs_0 = _mm_cmpeq_epi8(_mm_and_si128(signs_0, bit_selector_mask_0), bit_selector_mask_0);
+            signs_1 = _mm_cmpeq_epi8(_mm_and_si128(signs_1, bit_selector_mask_1), bit_selector_mask_1);
+            const __m128i q8s_3_0 = _mm_sign_epi8(q8_3_0, _mm_or_si128(signs_0, mone));
+            const __m128i q8s_3_1 = _mm_sign_epi8(q8_3_1, _mm_or_si128(signs_1, mone));
+
+            signs_0 = _mm_shuffle_epi8(full_sign_bits_1, block_sign_shuffle_2_0);
+            signs_1 = _mm_shuffle_epi8(full_sign_bits_1, block_sign_shuffle_2_1);
+            signs_0 = _mm_cmpeq_epi8(_mm_and_si128(signs_0, bit_selector_mask_0), bit_selector_mask_0);
+            signs_1 = _mm_cmpeq_epi8(_mm_and_si128(signs_1, bit_selector_mask_1), bit_selector_mask_1);
+            const __m128i q8s_4_0 = _mm_sign_epi8(q8_4_0, _mm_or_si128(signs_0, mone));
+            const __m128i q8s_4_1 = _mm_sign_epi8(q8_4_1, _mm_or_si128(signs_1, mone));
+
+            const __m128i dot1_0  = _mm_maddubs_epi16(q2_1_0, q8s_1_0);
+            const __m128i dot1_1  = _mm_maddubs_epi16(q2_1_1, q8s_1_1);
+            const __m128i dot2_0  = _mm_maddubs_epi16(q2_2_0, q8s_2_0);
+            const __m128i dot2_1  = _mm_maddubs_epi16(q2_2_1, q8s_2_1);
+            const __m128i dot3_0  = _mm_maddubs_epi16(q2_3_0, q8s_3_0);
+            const __m128i dot3_1  = _mm_maddubs_epi16(q2_3_1, q8s_3_1);
+            const __m128i dot4_0  = _mm_maddubs_epi16(q2_4_0, q8s_4_0);
+            const __m128i dot4_1  = _mm_maddubs_epi16(q2_4_1, q8s_4_1);
+
+            __m128i sc_tmp = _mm_shuffle_epi8(scales, get_scale_shuffle(ib32+0));
+            const __m128i sc1_0 = _mm_cvtepi8_epi16(sc_tmp);
+            const __m128i sc1_1 = _mm_cvtepi8_epi16(_mm_srli_si128(sc_tmp, 8));
+            sc_tmp = _mm_shuffle_epi8(scales, get_scale_shuffle(ib32+1));
+            const __m128i sc2_0 = _mm_cvtepi8_epi16(sc_tmp);
+            const __m128i sc2_1 = _mm_cvtepi8_epi16(_mm_srli_si128(sc_tmp, 8));
+            sc_tmp = _mm_shuffle_epi8(scales, get_scale_shuffle(ib32+2));
+            const __m128i sc3_0 = _mm_cvtepi8_epi16(sc_tmp);
+            const __m128i sc3_1 = _mm_cvtepi8_epi16(_mm_srli_si128(sc_tmp, 8));
+            sc_tmp = _mm_shuffle_epi8(scales, get_scale_shuffle(ib32+3));
+            const __m128i sc4_0 = _mm_cvtepi8_epi16(sc_tmp);
+            const __m128i sc4_1 = _mm_cvtepi8_epi16(_mm_srli_si128(sc_tmp, 8));
+
+            sumi1_0 = _mm_add_epi32(sumi1_0, _mm_madd_epi16(dot1_0, sc1_0));
+            sumi1_1 = _mm_add_epi32(sumi1_1, _mm_madd_epi16(dot1_1, sc1_1));
+            sumi2_0 = _mm_add_epi32(sumi2_0, _mm_madd_epi16(dot2_0, sc2_0));
+            sumi2_1 = _mm_add_epi32(sumi2_1, _mm_madd_epi16(dot2_1, sc2_1));
+            sumi1_0 = _mm_add_epi32(sumi1_0, _mm_madd_epi16(dot3_0, sc3_0));
+            sumi1_1 = _mm_add_epi32(sumi1_1, _mm_madd_epi16(dot3_1, sc3_1));
+            sumi2_0 = _mm_add_epi32(sumi2_0, _mm_madd_epi16(dot4_0, sc4_0));
+            sumi2_1 = _mm_add_epi32(sumi2_1, _mm_madd_epi16(dot4_1, sc4_1));
+        }
+
+        accumf = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(MM256_SET_M128I(_mm_add_epi32(sumi1_1, sumi2_1), _mm_add_epi32(sumi1_0, sumi2_0)))), accumf);
+
+    }
+
+    *s = 0.125f * hsum_float_8(accumf);
+
+#elif defined(__loongarch_asx)
+
+    const __m256i mone = __lasx_xvreplgr2vr_b(1);
+    static const char block_sign_shuffle_mask_1[32] = {
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+    };
+    static const char block_sign_shuffle_mask_2[32] = {
+        0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
+    };
+    static const uint8_t bit_selector_mask_bytes[32] = {
+        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    };
+
+    const __m256i bit_selector_mask = __lasx_xvld((const __m256i*)bit_selector_mask_bytes, 0);
+    const __m256i block_sign_shuffle_1 = __lasx_xvld((const __m256i*)block_sign_shuffle_mask_1, 0);
+    const __m256i block_sign_shuffle_2 = __lasx_xvld((const __m256i*)block_sign_shuffle_mask_2, 0);
+
+    static const uint8_t k_bit_helper[32] = {
+        0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00,
+        0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0x00,
+    };
+    const __m256i bit_helper = __lasx_xvld((const __m256i*)k_bit_helper, 0);
+    const __m256i m511 = __lasx_xvreplgr2vr_h(511);
+    const __m128i m4 = __lsx_vreplgr2vr_b(0xf);
+    const __m128i m1 = __lsx_vreplgr2vr_b(1);
+
+    uint64_t aux64;
+
+    // somewhat hacky, but gives a significant boost in performance
+    __m256i aux_gindex;
+    const uint16_t * gindex = (const uint16_t *)&aux_gindex;
+
+    __m256 accumf = (__m256)__lasx_xvldi(0);
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint16_t * restrict q2 = x[i].qs;
+        const int8_t   * restrict q8 = y[i].qs;
+
+        memcpy(&aux64, x[i].scales, 8);
+        __m128i stmp = __lsx_vreplgr2vr_d(aux64);
+        stmp = __lsx_vilvl_b( __lsx_vand_v(__lsx_vsrli_h(stmp, 4), m4), __lsx_vand_v(stmp, m4));
+        const __m128i scales = __lsx_vadd_b(__lsx_vslli_h(stmp, 1), m1);
+
+        __m256i sumi1 = __lasx_xvldi(0);
+        __m256i sumi2 = __lasx_xvldi(0);
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 4) {
+
+            const __m256i q2_data = __lasx_xvld((const __m256i*)q2, 0);  q2 += 16;
+            aux_gindex = __lasx_xvand_v(q2_data, m511);
+
+            const __m256i partial_sign_bits = __lasx_xvsrli_h(q2_data, 9);
+            const __m256i partial_sign_bits_upper = __lasx_xvsrli_h(q2_data, 13);
+            const __m256i partial_sign_bits_for_counting = __lasx_xvxor_v(partial_sign_bits, partial_sign_bits_upper);
+
+            const __m256i odd_bits = lasx_shuffle_b(bit_helper, partial_sign_bits_for_counting);
+            const __m256i full_sign_bits = __lasx_xvor_v(partial_sign_bits, odd_bits);
+
+            const __m256i q8_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i q8_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i q8_3 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i q8_4 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+
+            const __m256i q2_1 = lasx_set_d(iq2xs_grid[gindex[ 3]], iq2xs_grid[gindex[ 2]],
+                                                   iq2xs_grid[gindex[ 1]], iq2xs_grid[gindex[ 0]]);
+            const __m256i q2_2 = lasx_set_d(iq2xs_grid[gindex[ 7]], iq2xs_grid[gindex[ 6]],
+                                                   iq2xs_grid[gindex[ 5]], iq2xs_grid[gindex[ 4]]);
+            const __m256i q2_3 = lasx_set_d(iq2xs_grid[gindex[11]], iq2xs_grid[gindex[10]],
+                                                   iq2xs_grid[gindex[ 9]], iq2xs_grid[gindex[ 8]]);
+            const __m256i q2_4 = lasx_set_d(iq2xs_grid[gindex[15]], iq2xs_grid[gindex[14]],
+                                                   iq2xs_grid[gindex[13]], iq2xs_grid[gindex[12]]);
+
+            const __m128i full_signs_l = lasx_extracti128(full_sign_bits, 0);
+            const __m128i full_signs_h = lasx_extracti128(full_sign_bits, 1);
+            const __m256i full_signs_1 = lasx_insertf128(full_signs_l, full_signs_l);
+            const __m256i full_signs_2 = lasx_insertf128(full_signs_h, full_signs_h);
+
+            __m256i signs;
+            signs = lasx_shuffle_b(full_signs_1, block_sign_shuffle_1);
+            signs = __lasx_xvseq_b(__lasx_xvand_v(signs, bit_selector_mask), bit_selector_mask);
+            const __m256i q8s_1 = __lasx_xvsigncov_b(__lasx_xvor_v(signs, mone), q8_1);
+
+            signs = lasx_shuffle_b(full_signs_1, block_sign_shuffle_2);
+            signs = __lasx_xvseq_b(__lasx_xvand_v(signs, bit_selector_mask), bit_selector_mask);
+            const __m256i q8s_2 = __lasx_xvsigncov_b(__lasx_xvor_v(signs, mone), q8_2);
+
+            signs = lasx_shuffle_b(full_signs_2, block_sign_shuffle_1);
+            signs = __lasx_xvseq_b(__lasx_xvand_v(signs, bit_selector_mask), bit_selector_mask);
+            const __m256i q8s_3 = __lasx_xvsigncov_b(__lasx_xvor_v(signs, mone), q8_3);
+
+            signs = lasx_shuffle_b(full_signs_2, block_sign_shuffle_2);
+            signs = __lasx_xvseq_b(__lasx_xvand_v(signs, bit_selector_mask), bit_selector_mask);
+            const __m256i q8s_4 = __lasx_xvsigncov_b(__lasx_xvor_v(signs, mone), q8_4);
+
+            const __m256i dot1  = lasx_maddubs_h(q2_1, q8s_1);
+            const __m256i dot2  = lasx_maddubs_h(q2_2, q8s_2);
+            const __m256i dot3  = lasx_maddubs_h(q2_3, q8s_3);
+            const __m256i dot4  = lasx_maddubs_h(q2_4, q8s_4);
+
+            const __m256i sc1 = lasx_ext8_16(lsx_shuffle_b(scales, get_scale_shuffle(ib32+0)));
+            const __m256i sc2 = lasx_ext8_16(lsx_shuffle_b(scales, get_scale_shuffle(ib32+1)));
+            const __m256i sc3 = lasx_ext8_16(lsx_shuffle_b(scales, get_scale_shuffle(ib32+2)));
+            const __m256i sc4 = lasx_ext8_16(lsx_shuffle_b(scales, get_scale_shuffle(ib32+3)));
+
+            sumi1 = __lasx_xvadd_w(sumi1, lasx_madd_h(dot1, sc1));
+            sumi2 = __lasx_xvadd_w(sumi2, lasx_madd_h(dot2, sc2));
+            sumi1 = __lasx_xvadd_w(sumi1, lasx_madd_h(dot3, sc3));
+            sumi2 = __lasx_xvadd_w(sumi2, lasx_madd_h(dot4, sc4));
+        }
+
+        accumf = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accumf);
+
+    }
+
+    *s = 0.125f * hsum_float_8(accumf);
+#elif defined(__POWER9_VECTOR__)
+    const vector int v0 = vec_splats((int32_t)0);
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+
+        const uint16_t * restrict q2 = x[i].qs;
+        const uint8_t  * restrict sc = x[i].scales;
+        const int8_t  *  restrict q8 = y[i].qs;
+
+        for (int j = 0; j < QK_K/64; ++j) {
+            __builtin_prefetch(q2, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            vector signed long long aux64x2_0 = {*(const int64_t *)(iq2xs_grid + (q2[0] & 511)), *(const int64_t *)(iq2xs_grid + (q2[1] & 511))};
+            vector signed long long aux64x2_1 = {*(const int64_t *)(iq2xs_grid + (q2[2] & 511)), *(const int64_t *)(iq2xs_grid + (q2[3] & 511))};
+            vector signed long long aux64x2_2 = {*(const int64_t *)(iq2xs_grid + (q2[4] & 511)), *(const int64_t *)(iq2xs_grid + (q2[5] & 511))};
+            vector signed long long aux64x2_3 = {*(const int64_t *)(iq2xs_grid + (q2[6] & 511)), *(const int64_t *)(iq2xs_grid + (q2[7] & 511))};
+
+            vector signed long long vsigns0 = {*(const int64_t *)(signs64 + ((q2[0] >> 9))), *(const int64_t *)(signs64 + ((q2[1] >> 9)))};
+            vector signed long long vsigns1 = {*(const int64_t *)(signs64 + ((q2[2] >> 9))), *(const int64_t *)(signs64 + ((q2[3] >> 9)))};
+            vector signed long long vsigns2 = {*(const int64_t *)(signs64 + ((q2[4] >> 9))), *(const int64_t *)(signs64 + ((q2[5] >> 9)))};
+            vector signed long long vsigns3 = {*(const int64_t *)(signs64 + ((q2[6] >> 9))), *(const int64_t *)(signs64 + ((q2[7] >> 9)))};
+            q2 += 8;
+
+            vector signed char q2x0 = (vector signed char)vec_mul((vector signed char)vsigns0, (vector signed char)aux64x2_0);
+            vector signed char q2x1 = (vector signed char)vec_mul((vector signed char)vsigns1, (vector signed char)aux64x2_1);
+            vector signed char q2x2 = (vector signed char)vec_mul((vector signed char)vsigns2, (vector signed char)aux64x2_2);
+            vector signed char q2x3 = (vector signed char)vec_mul((vector signed char)vsigns3, (vector signed char)aux64x2_3);
+
+            vector signed char q8y0 = vec_xl( 0, q8);
+            vector signed char q8y1 = vec_xl(16, q8);
+            vector signed char q8y2 = vec_xl(32, q8);
+            vector signed char q8y3 = vec_xl(48, q8);
+            q8 += 64;
+
+            vector signed short qv0 = vec_add(vec_mule(q2x0, q8y0), vec_mulo(q2x0, q8y0));
+            vector signed short qv1 = vec_add(vec_mule(q2x1, q8y1), vec_mulo(q2x1, q8y1));
+            vector signed short qv2 = vec_add(vec_mule(q2x2, q8y2), vec_mulo(q2x2, q8y2));
+            vector signed short qv3 = vec_add(vec_mule(q2x3, q8y3), vec_mulo(q2x3, q8y3));
+
+            const uint16_t ls0 = (uint16_t)(sc[0] & 0xf);
+            const uint16_t ls1 = (uint16_t)(sc[0] >>  4);
+            const uint16_t ls2 = (uint16_t)(sc[1] & 0xf);
+            const uint16_t ls3 = (uint16_t)(sc[1] >>  4);
+            sc += 2;
+
+            vector signed short vscales0 = vec_splats((int16_t)(2*ls0+1));
+            vector signed short vscales1 = vec_splats((int16_t)(2*ls1+1));
+            vector signed short vscales2 = vec_splats((int16_t)(2*ls2+1));
+            vector signed short vscales3 = vec_splats((int16_t)(2*ls3+1));
+
+            vsumi0 = vec_msum(qv0, vscales0, vsumi0);
+            vsumi1 = vec_msum(qv1, vscales1, vsumi1);
+            vsumi2 = vec_msum(qv2, vscales2, vsumi2);
+            vsumi3 = vec_msum(qv3, vscales3, vsumi3);
+        }
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = 0.125f * vec_extract(vsumf0, 0);
+#else
+
+    float sumf = 0.f;
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint16_t * restrict q2 = x[i].qs;
+        const uint8_t  * restrict sc = x[i].scales;
+        const int8_t   * restrict q8 = y[i].qs;
+        int32_t bsum = 0;
+        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
+            const uint16_t ls1 = 2*(sc[ib32] & 0xf) + 1;
+            const uint16_t ls2 = 2*(sc[ib32] >>  4) + 1;
+            int32_t sumi = 0;
+            for (int l = 0; l < 2; ++l) {
+                const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (q2[l] & 511));
+                const uint8_t  signs = ksigns_iq2xs[q2[l] >> 9];
+                for (int j = 0; j < 8; ++j) {
+                    sumi += grid[j] * q8[j] * (signs & kmask_iq2xs[j] ? -1 : 1);
+                }
+                q8 += 8;
+            }
+            bsum += sumi * ls1;
+            sumi = 0;
+            for (int l = 2; l < 4; ++l) {
+                const uint8_t * grid = (const uint8_t *)(iq2xs_grid + (q2[l] & 511));
+                const uint8_t  signs = ksigns_iq2xs[q2[l] >> 9];
+                for (int j = 0; j < 8; ++j) {
+                    sumi += grid[j] * q8[j] * (signs & kmask_iq2xs[j] ? -1 : 1);
+                }
+                q8 += 8;
+            }
+            bsum += sumi * ls2;
+            q2 += 4;
+        }
+        sumf += d * bsum;
+    }
+    *s = 0.125f * sumf;
+#endif
+}
+
+void ggml_vec_dot_iq2_s_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_iq2_s * restrict x = vx;
+    const block_q8_K  * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+#if defined(__ARM_NEON)
+
+   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
+   };
+
+    static const uint8_t k_mask2[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,};
+
+    const ggml_uint8x16x2_t mask1 = ggml_vld1q_u8_x2(k_mask1);
+    const uint8x16_t        mask2 = vld1q_u8(k_mask2);
+    const uint8x16_t m1 = vdupq_n_u8(1);
+    const int32x4_t vzero = vdupq_n_s32(0);
+
+    uint8x16x2_t vs;
+    ggml_int8x16x4_t q2s;
+    ggml_int8x16x4_t q8b;
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+
+        const uint8_t * restrict qs = x[i].qs;
+        const uint8_t * restrict qh = x[i].qh;
+        const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8);
+        const int8_t  * restrict q8 = y[i].qs;
+
+        int sumi1 = 0, sumi2 = 0;
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
+            q2s.val[0] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[0] | ((qh[ib32+0] << 8) & 0x300)))),
+                                     vld1_s8((const int8_t *)(iq2s_grid + (qs[1] | ((qh[ib32+0] << 6) & 0x300)))));
+            q2s.val[1] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[2] | ((qh[ib32+0] << 4) & 0x300)))),
+                                     vld1_s8((const int8_t *)(iq2s_grid + (qs[3] | ((qh[ib32+0] << 2) & 0x300)))));
+            q2s.val[2] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[4] | ((qh[ib32+1] << 8) & 0x300)))),
+                                     vld1_s8((const int8_t *)(iq2s_grid + (qs[5] | ((qh[ib32+1] << 6) & 0x300)))));
+            q2s.val[3] = vcombine_s8(vld1_s8((const int8_t *)(iq2s_grid + (qs[6] | ((qh[ib32+1] << 4) & 0x300)))),
+                                     vld1_s8((const int8_t *)(iq2s_grid + (qs[7] | ((qh[ib32+1] << 2) & 0x300)))));
+            qs += 8;
+
+            vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[0] | ((uint32_t) signs[1] << 16)));
+            vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2);
+            vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2);
+            vs.val[0] = vceqq_u8(vs.val[0], mask2);
+            vs.val[1] = vceqq_u8(vs.val[1], mask2);
+
+            q2s.val[0] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[0], m1)), q2s.val[0]);
+            q2s.val[1] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[1], m1)), q2s.val[1]);
+
+            vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[2] | ((uint32_t) signs[3] << 16)));
+            vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2);
+            vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2);
+            vs.val[0] = vceqq_u8(vs.val[0], mask2);
+            vs.val[1] = vceqq_u8(vs.val[1], mask2);
+
+            signs += 4;
+
+            q2s.val[2] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[0], m1)), q2s.val[2]);
+            q2s.val[3] = vmulq_s8(vreinterpretq_s8_u8(vorrq_u8(vs.val[1], m1)), q2s.val[3]);
+
+            const int32x4_t p1 = ggml_vdotq_s32(vzero, q2s.val[0], q8b.val[0]);
+            const int32x4_t p2 = ggml_vdotq_s32(vzero, q2s.val[1], q8b.val[1]);
+            const int32x4_t p3 = ggml_vdotq_s32(vzero, q2s.val[2], q8b.val[2]);
+            const int32x4_t p4 = ggml_vdotq_s32(vzero, q2s.val[3], q8b.val[3]);
+
+            sumi1 += vaddvq_s32(p1) * (1 + 2*(x[i].scales[ib32+0] & 0xf));
+            sumi2 += vaddvq_s32(p2) * (1 + 2*(x[i].scales[ib32+0] >>  4));
+            sumi1 += vaddvq_s32(p3) * (1 + 2*(x[i].scales[ib32+1] & 0xf));
+            sumi2 += vaddvq_s32(p4) * (1 + 2*(x[i].scales[ib32+1] >>  4));
+        }
+        sumf += d*(sumi1 + sumi2);
+    }
+
+    *s = 0.125f * sumf;
+
+#elif defined(__AVX2__)
+
+   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
+   };
+
+    static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+                                        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    };
+
+    const __m128i m4 = _mm_set1_epi8(0xf);
+    const __m128i m1 = _mm_set1_epi8(1);
+
+    const __m256i mask1 = _mm256_loadu_si256((const __m256i*)k_mask1);
+    const __m256i mask2 = _mm256_loadu_si256((const __m256i*)k_mask2);
+
+    uint64_t aux64;
+
+    __m256 accumf = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict qs = x[i].qs;
+        const uint8_t * restrict qh = x[i].qh;
+        const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8);
+        const int8_t  * restrict q8 = y[i].qs;
+
+        memcpy(&aux64, x[i].scales, 8);
+        const __m128i scales8 = _mm_add_epi8(_mm_slli_epi16(_mm_and_si128(_mm_set_epi64x(aux64 >> 4, aux64), m4), 1), m1);
+        const __m256i scales16 = _mm256_cvtepi8_epi16(scales8); // 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15
+
+        __m256i sumi1 = _mm256_setzero_si256();
+        __m256i sumi2 = _mm256_setzero_si256();
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q2_1 = _mm256_set_epi64x(iq2s_grid[qs[3] | ((qh[ib32+0] << 2) & 0x300)],
+                                                   iq2s_grid[qs[2] | ((qh[ib32+0] << 4) & 0x300)],
+                                                   iq2s_grid[qs[1] | ((qh[ib32+0] << 6) & 0x300)],
+                                                   iq2s_grid[qs[0] | ((qh[ib32+0] << 8) & 0x300)]);
+            const __m256i q2_2 = _mm256_set_epi64x(iq2s_grid[qs[7] | ((qh[ib32+1] << 2) & 0x300)],
+                                                   iq2s_grid[qs[6] | ((qh[ib32+1] << 4) & 0x300)],
+                                                   iq2s_grid[qs[5] | ((qh[ib32+1] << 6) & 0x300)],
+                                                   iq2s_grid[qs[4] | ((qh[ib32+1] << 8) & 0x300)]);
+            qs += 8;
+
+            __m256i aux256 = _mm256_set1_epi32(signs[0] | ((uint32_t) signs[1] << 16));
+            aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2);
+            const __m256i s2_1 = _mm256_cmpeq_epi8(aux256, mask2);
+            const __m256i q8s_1 = _mm256_sub_epi8(_mm256_xor_si256(s2_1, q8_1), s2_1);
+
+            aux256 = _mm256_set1_epi32(signs[2] | ((uint32_t) signs[3] << 16));
+            aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2);
+            const __m256i s2_2 = _mm256_cmpeq_epi8(aux256, mask2);
+            const __m256i q8s_2 = _mm256_sub_epi8(_mm256_xor_si256(s2_2, q8_2), s2_2);
+
+            signs += 4;
+
+            const __m256i dot1  = _mm256_maddubs_epi16(q2_1, q8s_1); // blocks 2*ib32+0, 2*ib32+1
+            const __m256i dot2  = _mm256_maddubs_epi16(q2_2, q8s_2); // blocks 2*ib32+2, 2*ib32+3
+
+            const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_shuffle_epi8(scales16, get_scale_shuffle_k4(ib32+0)));
+            const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_shuffle_epi8(scales16, get_scale_shuffle_k4(ib32+1)));
+            sumi1 = _mm256_add_epi32(sumi1, p1);
+            sumi2 = _mm256_add_epi32(sumi2, p2);
+        }
+
+        accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf);
+
+    }
+
+    *s = 0.125f * hsum_float_8(accumf);
+
+#elif defined(__AVX__)
+   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
+   };
+
+    static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+                                        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    };
+
+    const __m128i m4 = _mm_set1_epi8(0xf);
+    const __m128i m1 = _mm_set1_epi8(1);
+
+    const __m128i mask1_0 = _mm_loadu_si128((const __m128i*)k_mask1);
+    const __m128i mask1_1 = _mm_loadu_si128((const __m128i*)k_mask1 + 1);
+    const __m128i mask2_0 = _mm_loadu_si128((const __m128i*)k_mask2);
+    const __m128i mask2_1 = _mm_loadu_si128((const __m128i*)k_mask2 + 1);
+
+    uint64_t aux64;
+
+    __m256 accumf = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict qs = x[i].qs;
+        const uint8_t * restrict qh = x[i].qh;
+        const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8);
+        const int8_t  * restrict q8 = y[i].qs;
+
+        memcpy(&aux64, x[i].scales, 8);
+        const __m128i scales8 = _mm_add_epi8(_mm_slli_epi16(_mm_and_si128(_mm_set_epi64x(aux64 >> 4, aux64), m4), 1), m1);
+        const __m128i scales16_0 = _mm_cvtepi8_epi16(scales8);
+        const __m128i scales16_1 = _mm_cvtepi8_epi16(_mm_srli_si128(scales8, 8));
+
+        __m128i sumi1_0 = _mm_setzero_si128();
+        __m128i sumi1_1 = _mm_setzero_si128();
+        __m128i sumi2_0 = _mm_setzero_si128();
+        __m128i sumi2_1 = _mm_setzero_si128();
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m128i q8_1_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_1_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_2_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_2_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q2_1_0 = _mm_set_epi64x(iq2s_grid[qs[1] | ((qh[ib32+0] << 6) & 0x300)],
+                                                  iq2s_grid[qs[0] | ((qh[ib32+0] << 8) & 0x300)]);
+            const __m128i q2_1_1 = _mm_set_epi64x(iq2s_grid[qs[3] | ((qh[ib32+0] << 2) & 0x300)],
+                                                  iq2s_grid[qs[2] | ((qh[ib32+0] << 4) & 0x300)]);
+            const __m128i q2_2_0 = _mm_set_epi64x(iq2s_grid[qs[5] | ((qh[ib32+1] << 6) & 0x300)],
+                                                  iq2s_grid[qs[4] | ((qh[ib32+1] << 8) & 0x300)]);
+            const __m128i q2_2_1 = _mm_set_epi64x(iq2s_grid[qs[7] | ((qh[ib32+1] << 2) & 0x300)],
+                                                  iq2s_grid[qs[6] | ((qh[ib32+1] << 4) & 0x300)]);
+            qs += 8;
+
+            __m128i aux128_0 = _mm_set1_epi32(signs[0] | ((uint32_t) signs[1] << 16));
+            __m128i aux128_1 = aux128_0;
+            aux128_0 = _mm_and_si128(_mm_shuffle_epi8(aux128_0,mask1_0), mask2_0);
+            aux128_1 = _mm_and_si128(_mm_shuffle_epi8(aux128_1,mask1_1), mask2_1);
+            const __m128i s2_1_0 = _mm_cmpeq_epi8(aux128_0, mask2_0);
+            const __m128i s2_1_1 = _mm_cmpeq_epi8(aux128_1, mask2_1);
+            const __m128i q8s_1_0 = _mm_sub_epi8(_mm_xor_si128(s2_1_0, q8_1_0), s2_1_0);
+            const __m128i q8s_1_1 = _mm_sub_epi8(_mm_xor_si128(s2_1_1, q8_1_1), s2_1_1);
+
+            aux128_0 = _mm_set1_epi32(signs[2] | ((uint32_t) signs[3] << 16));
+            aux128_1 = aux128_0;
+            aux128_0 = _mm_and_si128(_mm_shuffle_epi8(aux128_0,mask1_0), mask2_0);
+            aux128_1 = _mm_and_si128(_mm_shuffle_epi8(aux128_1,mask1_1), mask2_1);
+            const __m128i s2_2_0 = _mm_cmpeq_epi8(aux128_0, mask2_0);
+            const __m128i s2_2_1 = _mm_cmpeq_epi8(aux128_1, mask2_1);
+            const __m128i q8s_2_0 = _mm_sub_epi8(_mm_xor_si128(s2_2_0, q8_2_0), s2_2_0);
+            const __m128i q8s_2_1 = _mm_sub_epi8(_mm_xor_si128(s2_2_1, q8_2_1), s2_2_1);
+
+            signs += 4;
+
+            const __m128i dot1_0  = _mm_maddubs_epi16(q2_1_0, q8s_1_0);
+            const __m128i dot1_1  = _mm_maddubs_epi16(q2_1_1, q8s_1_1);
+            const __m128i dot2_0  = _mm_maddubs_epi16(q2_2_0, q8s_2_0);
+            const __m128i dot2_1  = _mm_maddubs_epi16(q2_2_1, q8s_2_1);
+
+            const __m128i p1_0 = _mm_madd_epi16(dot1_0, _mm_shuffle_epi8(scales16_0, _mm256_extractf128_si256(get_scale_shuffle_k4(ib32+0), 0)));
+            const __m128i p1_1 = _mm_madd_epi16(dot1_1, _mm_shuffle_epi8(scales16_1, _mm256_extractf128_si256(get_scale_shuffle_k4(ib32+0), 1)));
+            const __m128i p2_0 = _mm_madd_epi16(dot2_0, _mm_shuffle_epi8(scales16_0, _mm256_extractf128_si256(get_scale_shuffle_k4(ib32+1), 0)));
+            const __m128i p2_1 = _mm_madd_epi16(dot2_1, _mm_shuffle_epi8(scales16_1, _mm256_extractf128_si256(get_scale_shuffle_k4(ib32+1), 1)));
+            sumi1_0 = _mm_add_epi32(sumi1_0, p1_0);
+            sumi1_1 = _mm_add_epi32(sumi1_1, p1_1);
+            sumi2_0 = _mm_add_epi32(sumi2_0, p2_0);
+            sumi2_1 = _mm_add_epi32(sumi2_1, p2_1);
+        }
+
+        accumf = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(MM256_SET_M128I(_mm_add_epi32(sumi1_1, sumi2_1), _mm_add_epi32(sumi1_0, sumi2_0)))), accumf);
+
+    }
+
+    *s = 0.125f * hsum_float_8(accumf);
+
+#elif defined(__POWER9_VECTOR__)
+    static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                                        0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
+    };
+
+    static const uint8_t k_mask2[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,};
+
+    const vector int v0 = vec_splats((int32_t)0);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    const vector unsigned char mask0 = vec_xl( 0, k_mask1);
+    const vector unsigned char mask1 = vec_xl(16, k_mask1);
+    const vector signed char mask2 = (vector signed char)vec_xl( 0, k_mask2);
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+
+        const uint8_t *  restrict q2 = x[i].qs;
+        const uint8_t *  restrict qh = x[i].qh;
+        const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8);
+        const uint8_t *  restrict sc = x[i].scales;
+        const int8_t  *  restrict q8 = y[i].qs;
+
+        for (int j = 0; j < QK_K/32; j += 2) {
+            __builtin_prefetch(q2, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            vector signed long long aux64x2_0 = {*(const int64_t *)(iq2s_grid + (q2[0] | ((qh[0] << 8) & 0x300))), *(const int64_t *)(iq2s_grid + (q2[1] | ((qh[0] << 6) & 0x300)))};
+            vector signed long long aux64x2_1 = {*(const int64_t *)(iq2s_grid + (q2[2] | ((qh[0] << 4) & 0x300))), *(const int64_t *)(iq2s_grid + (q2[3] | ((qh[0] << 2) & 0x300)))};
+            vector signed long long aux64x2_2 = {*(const int64_t *)(iq2s_grid + (q2[4] | ((qh[1] << 8) & 0x300))), *(const int64_t *)(iq2s_grid + (q2[5] | ((qh[1] << 6) & 0x300)))};
+            vector signed long long aux64x2_3 = {*(const int64_t *)(iq2s_grid + (q2[6] | ((qh[1] << 4) & 0x300))), *(const int64_t *)(iq2s_grid + (q2[7] | ((qh[1] << 2) & 0x300)))};
+            q2 += 8;
+            qh += 2;
+
+            vector signed char vsigns01 = (vector signed char)vec_splats(*(const uint32_t *)&signs[0]);
+            vector signed char vsigns23 = (vector signed char)vec_splats(*(const uint32_t *)&signs[2]);
+            signs += 4;
+
+            vector signed char vsigns0 = vec_perm(vsigns01, vsigns01, mask0);
+            vector signed char vsigns1 = vec_perm(vsigns01, vsigns01, mask1);
+            vector signed char vsigns2 = vec_perm(vsigns23, vsigns23, mask0);
+            vector signed char vsigns3 = vec_perm(vsigns23, vsigns23, mask1);
+
+            vsigns0 = (vector signed char)vec_cmpeq(vec_and(vsigns0, mask2), mask2);
+            vsigns1 = (vector signed char)vec_cmpeq(vec_and(vsigns1, mask2), mask2);
+            vsigns2 = (vector signed char)vec_cmpeq(vec_and(vsigns2, mask2), mask2);
+            vsigns3 = (vector signed char)vec_cmpeq(vec_and(vsigns3, mask2), mask2);
+
+            vector signed char q2x0 = vec_sub(vec_xor(vsigns0, (vector signed char)aux64x2_0), vsigns0);
+            vector signed char q2x1 = vec_sub(vec_xor(vsigns1, (vector signed char)aux64x2_1), vsigns1);
+            vector signed char q2x2 = vec_sub(vec_xor(vsigns2, (vector signed char)aux64x2_2), vsigns2);
+            vector signed char q2x3 = vec_sub(vec_xor(vsigns3, (vector signed char)aux64x2_3), vsigns3);
+
+            vector signed char q8y0 = vec_xl( 0, q8);
+            vector signed char q8y1 = vec_xl(16, q8);
+            vector signed char q8y2 = vec_xl(32, q8);
+            vector signed char q8y3 = vec_xl(48, q8);
+            q8 += 64;
+
+            vector signed short qv0 = vec_add(vec_mule(q2x0, q8y0), vec_mulo(q2x0, q8y0));
+            vector signed short qv1 = vec_add(vec_mule(q2x1, q8y1), vec_mulo(q2x1, q8y1));
+            vector signed short qv2 = vec_add(vec_mule(q2x2, q8y2), vec_mulo(q2x2, q8y2));
+            vector signed short qv3 = vec_add(vec_mule(q2x3, q8y3), vec_mulo(q2x3, q8y3));
+
+            const uint16_t ls0 = (uint16_t)(sc[0] & 0xf);
+            const uint16_t ls1 = (uint16_t)(sc[0] >>  4);
+            const uint16_t ls2 = (uint16_t)(sc[1] & 0xf);
+            const uint16_t ls3 = (uint16_t)(sc[1] >>  4);
+            sc += 2;
+
+            vector signed short vscales0 = vec_splats((int16_t)(2*ls0+1));
+            vector signed short vscales1 = vec_splats((int16_t)(2*ls1+1));
+            vector signed short vscales2 = vec_splats((int16_t)(2*ls2+1));
+            vector signed short vscales3 = vec_splats((int16_t)(2*ls3+1));
+
+            vsumi0 = vec_msum(qv0, vscales0, vsumi0);
+            vsumi1 = vec_msum(qv1, vscales1, vsumi1);
+            vsumi2 = vec_msum(qv2, vscales2, vsumi2);
+            vsumi3 = vec_msum(qv3, vscales3, vsumi3);
+        }
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = 0.125f * vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+
+   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
+   };
+
+    static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+                                        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    };
+
+
+    const __m128i m4 = __lsx_vreplgr2vr_b(0xf);
+    const __m128i m1 = __lsx_vreplgr2vr_b(1);
+
+    const __m256i mask1 = __lasx_xvld((const __m256i*)k_mask1, 0);
+    const __m256i mask2 = __lasx_xvld((const __m256i*)k_mask2, 0);
+    uint64_t aux64;
+
+    __m256 accumf = (__m256)__lasx_xvldi(0);
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict qs = x[i].qs;
+        const uint8_t * restrict qh = x[i].qh;
+        const uint16_t * restrict signs = (const uint16_t *)(x[i].qs + QK_K/8);
+        const int8_t  * restrict q8 = y[i].qs;
+
+        __m128i tmp1;
+        memcpy(&aux64, x[i].scales, 8);
+        tmp1 = __lsx_vinsgr2vr_d(tmp1, aux64, 0);
+        tmp1 = __lsx_vinsgr2vr_d(tmp1, aux64 >> 4, 1);
+        const __m128i scales8 = __lsx_vadd_b(__lsx_vslli_h(__lsx_vand_v(tmp1, m4), 1), m1);
+        const __m256i scales16 = lasx_ext8_16(scales8); // 0 2 4 6 8 10 12 14 1 3 5 7 9 11 13 15
+
+        __m256i sumi1 = __lasx_xvldi(0);
+        __m256i sumi2 = __lasx_xvldi(0);
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m256i q8_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i q8_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i q2_1 = lasx_set_d(iq2s_grid[qs[3] | ((qh[ib32+0] << 2) & 0x300)],
+                                                   iq2s_grid[qs[2] | ((qh[ib32+0] << 4) & 0x300)],
+                                                   iq2s_grid[qs[1] | ((qh[ib32+0] << 6) & 0x300)],
+                                                   iq2s_grid[qs[0] | ((qh[ib32+0] << 8) & 0x300)]);
+            const __m256i q2_2 = lasx_set_d(iq2s_grid[qs[7] | ((qh[ib32+1] << 2) & 0x300)],
+                                                   iq2s_grid[qs[6] | ((qh[ib32+1] << 4) & 0x300)],
+                                                   iq2s_grid[qs[5] | ((qh[ib32+1] << 6) & 0x300)],
+                                                   iq2s_grid[qs[4] | ((qh[ib32+1] << 8) & 0x300)]);
+            qs += 8;
+
+            __m256i aux256 = __lasx_xvreplgr2vr_w(signs[0] | ((uint32_t) signs[1] << 16));
+            aux256 = __lasx_xvand_v(lasx_shuffle_b(aux256,mask1), mask2);
+            const __m256i s2_1 = __lasx_xvseq_b(aux256, mask2);
+            const __m256i q8s_1 = __lasx_xvsub_b(__lasx_xvxor_v(s2_1, q8_1), s2_1);
+
+            aux256 = __lasx_xvreplgr2vr_w(signs[2] | ((uint32_t) signs[3] << 16));
+            aux256 = __lasx_xvand_v(lasx_shuffle_b(aux256,mask1), mask2);
+            const __m256i s2_2 = __lasx_xvseq_b(aux256, mask2);
+            const __m256i q8s_2 = __lasx_xvsub_b(__lasx_xvxor_v(s2_2, q8_2), s2_2);
+
+            signs += 4;
+
+            const __m256i dot1  = lasx_maddubs_h(q2_1, q8s_1); // blocks 2*ib32+0, 2*ib32+1
+            const __m256i dot2  = lasx_maddubs_h(q2_2, q8s_2); // blocks 2*ib32+2, 2*ib32+3
+
+            const __m256i p1 = lasx_madd_h(dot1, lasx_shuffle_b(scales16, get_scale_shuffle_k4(ib32+0)));
+            const __m256i p2 = lasx_madd_h(dot2, lasx_shuffle_b(scales16, get_scale_shuffle_k4(ib32+1)));
+            sumi1 = __lasx_xvadd_w(sumi1, p1);
+            sumi2 = __lasx_xvadd_w(sumi2, p2);
+        }
+
+        accumf = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accumf);
+    }
+
+    *s = 0.125f * hsum_float_8(accumf);
+
+#else
+
+    float sumf = 0;
+    for (int i = 0; i < nb; i++) {
+
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const int8_t  * q8 = y[i].qs;
+        const uint8_t * qs = x[i].qs;
+        const uint8_t * qh = x[i].qh;
+        const uint8_t * signs = qs + QK_K/8;
+
+        int bsum = 0;
+        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
+            int ls1 = 1 + 2*(x[i].scales[ib32] & 0xf);
+            int ls2 = 1 + 2*(x[i].scales[ib32] >>  4);
+            int sumi1 = 0, sumi2 = 0;
+            for (int l = 0; l < 2; ++l) {
+                const uint8_t * grid = (const uint8_t *)(iq2s_grid + (qs[l] | (qh[ib32] << (8-2*l) & 0x300)));
+                for (int j = 0; j < 8; ++j) {
+                    sumi1 += q8[j] * grid[j] * (signs[l] & kmask_iq2xs[j] ? -1 : 1);
+                }
+                q8 += 8;
+            }
+            for (int l = 2; l < 4; ++l) {
+                const uint8_t * grid = (const uint8_t *)(iq2s_grid + (qs[l] | (qh[ib32] << (8-2*l) & 0x300)));
+                for (int j = 0; j < 8; ++j) {
+                    sumi2 += q8[j] * grid[j] * (signs[l] & kmask_iq2xs[j] ? -1 : 1);
+                }
+                q8 += 8;
+            }
+            bsum += ls1 * sumi1 + ls2 * sumi2;
+            qs += 4;
+            signs += 4;
+        }
+
+        sumf += d * bsum;
+    }
+
+    *s = 0.125f * sumf;
+
+#endif
+
+}
+
+void ggml_vec_dot_iq3_xxs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_iq3_xxs * restrict x = vx;
+    const block_q8_K    * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+#if defined(__ARM_NEON)
+
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    uint32_t aux32[2];
+
+    ggml_int8x16x4_t q3s;
+    ggml_int8x16x4_t q8b;
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict q3 = x[i].qs;
+        const uint8_t * restrict gas = x[i].qs + QK_K/4;
+        const int8_t   * restrict q8 = y[i].qs;
+        float sumf1 = 0, sumf2 = 0;
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
+            memcpy(aux32, gas, 2*sizeof(uint32_t)); gas += 2*sizeof(uint32_t);
+            const uint32x4_t aux32x4_0 = ggml_vld1q_u32(iq3xxs_grid[q3[ 0]], iq3xxs_grid[q3[ 1]], iq3xxs_grid[q3[ 2]], iq3xxs_grid[q3[ 3]]);
+            const uint32x4_t aux32x4_1 = ggml_vld1q_u32(iq3xxs_grid[q3[ 4]], iq3xxs_grid[q3[ 5]], iq3xxs_grid[q3[ 6]], iq3xxs_grid[q3[ 7]]);
+            const uint32x4_t aux32x4_2 = ggml_vld1q_u32(iq3xxs_grid[q3[ 8]], iq3xxs_grid[q3[ 9]], iq3xxs_grid[q3[10]], iq3xxs_grid[q3[11]]);
+            const uint32x4_t aux32x4_3 = ggml_vld1q_u32(iq3xxs_grid[q3[12]], iq3xxs_grid[q3[13]], iq3xxs_grid[q3[14]], iq3xxs_grid[q3[15]]);
+            q3 += 16;
+            q3s.val[0] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[0] >>  0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[0] >>  7) & 127))));
+            q3s.val[1] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[0] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[0] >> 21) & 127))));
+            q3s.val[2] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >>  0) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >>  7) & 127))));
+            q3s.val[3] = vcombine_s8(vld1_s8((const void *)(signs64 + ((aux32[1] >> 14) & 127))), vld1_s8((const void *)(signs64 + ((aux32[1] >> 21) & 127))));
+            q3s.val[0] = vmulq_s8(q3s.val[0], vreinterpretq_s8_u32(aux32x4_0));
+            q3s.val[1] = vmulq_s8(q3s.val[1], vreinterpretq_s8_u32(aux32x4_1));
+            q3s.val[2] = vmulq_s8(q3s.val[2], vreinterpretq_s8_u32(aux32x4_2));
+            q3s.val[3] = vmulq_s8(q3s.val[3], vreinterpretq_s8_u32(aux32x4_3));
+            const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[0], q8b.val[0]), q3s.val[1], q8b.val[1]);
+            const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[2], q8b.val[2]), q3s.val[3], q8b.val[3]);
+            sumf1 += vaddvq_s32(p1) * (0.5f + (aux32[0] >> 28));
+            sumf2 += vaddvq_s32(p2) * (0.5f + (aux32[1] >> 28));
+        }
+        sumf += d*(sumf1 + sumf2);
+    }
+    *s = 0.5f * sumf;
+
+#elif defined(__AVX2__)
+
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    uint32_t aux32[2];
+
+    __m256 accumf = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict q3 = x[i].qs;
+        const uint8_t * restrict gas = x[i].qs + QK_K/4;
+        const int8_t  * restrict q8 = y[i].qs;
+        __m256i sumi1 = _mm256_setzero_si256();
+        __m256i sumi2 = _mm256_setzero_si256();
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q2_1 = _mm256_set_epi32(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]],
+                                                  iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]);
+            q3 += 8;
+            const __m256i q2_2 = _mm256_set_epi32(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]],
+                                                  iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]);
+            q3 += 8;
+            memcpy(aux32, gas, 8); gas += 8;
+            const __m256i s2_1 = _mm256_set_epi64x(signs64[(aux32[0] >> 21) & 127], signs64[(aux32[0] >> 14) & 127],
+                                                   signs64[(aux32[0] >>  7) & 127], signs64[(aux32[0] >>  0) & 127]);
+            const __m256i s2_2 = _mm256_set_epi64x(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127],
+                                                   signs64[(aux32[1] >>  7) & 127], signs64[(aux32[1] >>  0) & 127]);
+            const __m256i q8s_1 = _mm256_sign_epi8(q8_1, s2_1);
+            const __m256i q8s_2 = _mm256_sign_epi8(q8_2, s2_2);
+            const __m256i dot1  = _mm256_maddubs_epi16(q2_1, q8s_1);
+            const __m256i dot2  = _mm256_maddubs_epi16(q2_2, q8s_2);
+            const uint16_t ls1 = aux32[0] >> 28;
+            const uint16_t ls2 = aux32[1] >> 28;
+            const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(2*ls1+1));
+            const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(2*ls2+1));
+            sumi1 = _mm256_add_epi32(sumi1, p1);
+            sumi2 = _mm256_add_epi32(sumi2, p2);
+        }
+
+        accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf);
+
+    }
+
+    *s = 0.25f * hsum_float_8(accumf);
+
+#elif defined(__AVX__)
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    uint32_t aux32[2];
+
+    __m256 accumf = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict q3 = x[i].qs;
+        const uint8_t * restrict gas = x[i].qs + QK_K/4;
+        const int8_t  * restrict q8 = y[i].qs;
+        __m128i sumi1_0 = _mm_setzero_si128();
+        __m128i sumi1_1 = _mm_setzero_si128();
+        __m128i sumi2_0 = _mm_setzero_si128();
+        __m128i sumi2_1 = _mm_setzero_si128();
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m128i q8_1_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_1_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_2_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_2_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q2_1_0 = _mm_set_epi32(iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]);
+            const __m128i q2_1_1 = _mm_set_epi32(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]]);
+            q3 += 8;
+            const __m128i q2_2_0 = _mm_set_epi32(iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]);
+            const __m128i q2_2_1 = _mm_set_epi32(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]]);
+            q3 += 8;
+            memcpy(aux32, gas, 8); gas += 8;
+            const __m128i s2_1_0 = _mm_set_epi64x(signs64[(aux32[0] >>  7) & 127], signs64[(aux32[0] >>  0) & 127]);
+            const __m128i s2_1_1 = _mm_set_epi64x(signs64[(aux32[0] >> 21) & 127], signs64[(aux32[0] >> 14) & 127]);
+            const __m128i s2_2_0 = _mm_set_epi64x(signs64[(aux32[1] >>  7) & 127], signs64[(aux32[1] >>  0) & 127]);
+            const __m128i s2_2_1 = _mm_set_epi64x(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127]);
+            const __m128i q8s_1_0 = _mm_sign_epi8(q8_1_0, s2_1_0);
+            const __m128i q8s_1_1 = _mm_sign_epi8(q8_1_1, s2_1_1);
+            const __m128i q8s_2_0 = _mm_sign_epi8(q8_2_0, s2_2_0);
+            const __m128i q8s_2_1 = _mm_sign_epi8(q8_2_1, s2_2_1);
+            const __m128i dot1_0  = _mm_maddubs_epi16(q2_1_0, q8s_1_0);
+            const __m128i dot1_1  = _mm_maddubs_epi16(q2_1_1, q8s_1_1);
+            const __m128i dot2_0  = _mm_maddubs_epi16(q2_2_0, q8s_2_0);
+            const __m128i dot2_1  = _mm_maddubs_epi16(q2_2_1, q8s_2_1);
+            const uint16_t ls1 = aux32[0] >> 28;
+            const uint16_t ls2 = aux32[1] >> 28;
+            const __m128i p1_0 = _mm_madd_epi16(dot1_0, _mm_set1_epi16(2*ls1+1));
+            const __m128i p1_1 = _mm_madd_epi16(dot1_1, _mm_set1_epi16(2*ls1+1));
+            const __m128i p2_0 = _mm_madd_epi16(dot2_0, _mm_set1_epi16(2*ls2+1));
+            const __m128i p2_1 = _mm_madd_epi16(dot2_1, _mm_set1_epi16(2*ls2+1));
+            sumi1_0 = _mm_add_epi32(sumi1_0, p1_0);
+            sumi1_1 = _mm_add_epi32(sumi1_1, p1_1);
+            sumi2_0 = _mm_add_epi32(sumi2_0, p2_0);
+            sumi2_1 = _mm_add_epi32(sumi2_1, p2_1);
+        }
+
+        accumf = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(MM256_SET_M128I(_mm_add_epi32(sumi1_1, sumi2_1), _mm_add_epi32(sumi1_0, sumi2_0)))), accumf);
+
+    }
+
+    *s = 0.25f * hsum_float_8(accumf);
+
+#elif defined(__POWER9_VECTOR__)
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    const vector int v0 = vec_splats((int32_t)0);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+
+        const uint8_t * restrict q3 = x[i].qs;
+        const uint32_t * restrict signs = (const uint32_t *)(x[i].qs + QK_K/4);
+        const int8_t  * restrict q8 = y[i].qs;
+
+#pragma GCC unroll 1
+        for (int j = 0; j < QK_K/32; j += 2) {
+            __builtin_prefetch(q3, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            vector unsigned int aux32x4_0 = {iq3xxs_grid[q3[ 0]], iq3xxs_grid[q3[ 1]], iq3xxs_grid[q3[ 2]], iq3xxs_grid[q3[ 3]]};
+            vector unsigned int aux32x4_1 = {iq3xxs_grid[q3[ 4]], iq3xxs_grid[q3[ 5]], iq3xxs_grid[q3[ 6]], iq3xxs_grid[q3[ 7]]};
+            vector unsigned int aux32x4_2 = {iq3xxs_grid[q3[ 8]], iq3xxs_grid[q3[ 9]], iq3xxs_grid[q3[10]], iq3xxs_grid[q3[11]]};
+            vector unsigned int aux32x4_3 = {iq3xxs_grid[q3[12]], iq3xxs_grid[q3[13]], iq3xxs_grid[q3[14]], iq3xxs_grid[q3[15]]};
+            q3 += 16;
+
+            vector unsigned long long aux64x2_0 = {(uint64_t)(signs64[(signs[0] >>  0) & 127]), (uint64_t)(signs64[(signs[0] >>  7) & 127])};
+            vector unsigned long long aux64x2_1 = {(uint64_t)(signs64[(signs[0] >> 14) & 127]), (uint64_t)(signs64[(signs[0] >> 21) & 127])};
+            vector unsigned long long aux64x2_2 = {(uint64_t)(signs64[(signs[1] >>  0) & 127]), (uint64_t)(signs64[(signs[1] >>  7) & 127])};
+            vector unsigned long long aux64x2_3 = {(uint64_t)(signs64[(signs[1] >> 14) & 127]), (uint64_t)(signs64[(signs[1] >> 21) & 127])};
+
+            vector signed char q3x0 = vec_mul((vector signed char)aux64x2_0, (vector signed char)aux32x4_0);
+            vector signed char q3x1 = vec_mul((vector signed char)aux64x2_1, (vector signed char)aux32x4_1);
+            vector signed char q3x2 = vec_mul((vector signed char)aux64x2_2, (vector signed char)aux32x4_2);
+            vector signed char q3x3 = vec_mul((vector signed char)aux64x2_3, (vector signed char)aux32x4_3);
+
+            vector signed char q8y0 = vec_xl( 0, q8);
+            vector signed char q8y1 = vec_xl(16, q8);
+            vector signed char q8y2 = vec_xl(32, q8);
+            vector signed char q8y3 = vec_xl(48, q8);
+            q8 += 64;
+
+            vector signed short qv0 = vec_add(vec_mule(q3x0, q8y0), vec_mulo(q3x0, q8y0));
+            vector signed short qv1 = vec_add(vec_mule(q3x1, q8y1), vec_mulo(q3x1, q8y1));
+            vector signed short qv2 = vec_add(vec_mule(q3x2, q8y2), vec_mulo(q3x2, q8y2));
+            vector signed short qv3 = vec_add(vec_mule(q3x3, q8y3), vec_mulo(q3x3, q8y3));
+
+            const uint16_t ls0 = (uint16_t)(signs[0] >> 28);
+            const uint16_t ls1 = (uint16_t)(signs[1] >> 28);
+            signs += 2;
+
+            vector signed short vscales01 = (vector signed short)vec_splats((uint16_t)(2*ls0+1));
+            vector signed short vscales23 = (vector signed short)vec_splats((uint16_t)(2*ls1+1));
+
+            vsumi0 = vec_msum(qv0, vscales01, vsumi0);
+            vsumi1 = vec_msum(qv1, vscales01, vsumi1);
+            vsumi2 = vec_msum(qv2, vscales23, vsumi2);
+            vsumi3 = vec_msum(qv3, vscales23, vsumi3);
+        }
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = 0.25f * vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+
+    const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs;
+
+    uint32_t aux32[2];
+
+    __m256 accumf = (__m256)__lasx_xvldi(0);
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict q3 = x[i].qs;
+        const uint8_t * restrict gas = x[i].qs + QK_K/4;
+        const int8_t  * restrict q8 = y[i].qs;
+        __m256i sumi1 = __lasx_xvldi(0);
+        __m256i sumi2 = __lasx_xvldi(0);
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m256i q8_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i q8_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i q2_1 = lasx_set_w(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]],
+                                                iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]);
+            q3 += 8;
+            const __m256i q2_2 = lasx_set_w(iq3xxs_grid[q3[7]], iq3xxs_grid[q3[6]], iq3xxs_grid[q3[5]], iq3xxs_grid[q3[4]],
+                                                iq3xxs_grid[q3[3]], iq3xxs_grid[q3[2]], iq3xxs_grid[q3[1]], iq3xxs_grid[q3[0]]);
+            q3 += 8;
+            memcpy(aux32, gas, 8); gas += 8;
+
+            const __m256i s2_1 = lasx_set_d(signs64[(aux32[0] >> 21) & 127], signs64[(aux32[0] >> 14) & 127],
+                                                   signs64[(aux32[0] >>  7) & 127], signs64[(aux32[0] >>  0) & 127]);
+            const __m256i s2_2 = lasx_set_d(signs64[(aux32[1] >> 21) & 127], signs64[(aux32[1] >> 14) & 127],
+                                                   signs64[(aux32[1] >>  7) & 127], signs64[(aux32[1] >>  0) & 127]);
+            const __m256i q8s_1 = __lasx_xvsigncov_b(s2_1, q8_1);
+            const __m256i q8s_2 = __lasx_xvsigncov_b(s2_2, q8_2);
+            const __m256i dot1  = lasx_maddubs_h(q2_1, q8s_1);
+            const __m256i dot2  = lasx_maddubs_h(q2_2, q8s_2);
+            const uint16_t ls1 = aux32[0] >> 28;
+            const uint16_t ls2 = aux32[1] >> 28;
+
+            const __m256i p1 = lasx_madd_h(dot1, __lasx_xvreplgr2vr_h(2*ls1+1));
+            const __m256i p2 = lasx_madd_h(dot2, __lasx_xvreplgr2vr_h(2*ls2+1));
+            sumi1 = __lasx_xvadd_w(sumi1, p1);
+            sumi2 = __lasx_xvadd_w(sumi2, p2);
+        }
+
+        accumf = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accumf);
+    }
+
+    *s = 0.25f * hsum_float_8(accumf);
+
+#else
+
+    uint32_t aux32;
+
+    float sumf = 0.f;
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict q3 = x[i].qs;
+        const uint8_t * restrict gas = x[i].qs + QK_K/4;
+        const int8_t  * restrict q8 = y[i].qs;
+        int32_t bsum = 0;
+        for (int ib32 = 0; ib32 < QK_K/32; ++ib32) {
+            memcpy(&aux32, gas, sizeof(uint32_t)); gas += sizeof(uint32_t);
+            const uint32_t ls = 2*(aux32 >> 28) + 1;
+            int32_t sumi = 0;
+            for (int l = 0; l < 4; ++l) {
+                const uint8_t * grid1 = (const uint8_t *)(iq3xxs_grid + q3[2*l+0]);
+                const uint8_t * grid2 = (const uint8_t *)(iq3xxs_grid + q3[2*l+1]);
+                const uint8_t  signs = ksigns_iq2xs[(aux32 >> 7*l) & 127];
+                for (int j = 0; j < 4; ++j) {
+                    sumi += grid1[j] * q8[j+0] * (signs & kmask_iq2xs[j+0] ? -1 : 1);
+                    sumi += grid2[j] * q8[j+4] * (signs & kmask_iq2xs[j+4] ? -1 : 1);
+                }
+                q8 += 8;
+            }
+            q3 += 8;
+            bsum += sumi * ls;
+        }
+        sumf += d * bsum;
+    }
+    *s = 0.25f * sumf;
+#endif
+}
+
+void ggml_vec_dot_iq3_s_q8_K (int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_iq3_s * restrict x = vx;
+    const block_q8_K  * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+#if defined(__ARM_NEON)
+
+    typedef union {
+        uint16x8_t vec_index;
+        uint16_t   index[8];
+    } vec_index_t;
+
+   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
+   };
+
+    static const uint8_t k_mask2[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,};
+
+    static const int16_t k_shift[8] = {8, 7, 6, 5, 4, 3, 2, 1};
+
+    const ggml_uint8x16x2_t mask1 = ggml_vld1q_u8_x2(k_mask1);
+    const uint8x16_t        mask2 = vld1q_u8(k_mask2);
+
+    const int16x8_t  hshift = vld1q_s16(k_shift);
+    const uint16x8_t m256   = vdupq_n_u16(256);
+    const uint8x16_t m1     = vdupq_n_u8(1);
+
+    uint8x16x2_t vs;
+    ggml_int8x16x4_t q3s;
+    ggml_int8x16x4_t q8b;
+    vec_index_t idx;
+
+    uint32_t scales32[2];
+    const uint8_t * scales8 = (const uint8_t *)scales32;
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict qs = x[i].qs;
+        const uint8_t * restrict qh = x[i].qh;
+        const uint16_t * restrict signs = (const uint16_t *)x[i].signs;
+        const int8_t   * restrict q8 = y[i].qs;
+
+        memcpy(scales32, x[i].scales, 4);
+        scales32[1] = (((scales32[0] >> 4) & 0x0f0f0f0f) << 1) | 0x01010101;
+        scales32[0] = ((scales32[0] & 0x0f0f0f0f) << 1) | 0x01010101;
+
+        int sumi1 = 0, sumi2 = 0;
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
+
+            const uint8x16_t idx_l = vld1q_u8(qs); qs += 16;
+            idx.vec_index = vorrq_u16(vmovl_u8(vget_low_u8 (idx_l)), vandq_u16(vshlq_u16(vdupq_n_u16(qh[ib32+0]), hshift), m256));
+            const uint32x4_t aux32x4_0 = ggml_vld1q_u32(iq3s_grid[idx.index[0]], iq3s_grid[idx.index[1]],
+                                                        iq3s_grid[idx.index[2]], iq3s_grid[idx.index[3]]);
+            const uint32x4_t aux32x4_1 = ggml_vld1q_u32(iq3s_grid[idx.index[4]], iq3s_grid[idx.index[5]],
+                                                        iq3s_grid[idx.index[6]], iq3s_grid[idx.index[7]]);
+            idx.vec_index = vorrq_u16(vmovl_u8(vget_high_u8(idx_l)), vandq_u16(vshlq_u16(vdupq_n_u16(qh[ib32+1]), hshift), m256));
+            const uint32x4_t aux32x4_2 = ggml_vld1q_u32(iq3s_grid[idx.index[0]], iq3s_grid[idx.index[1]],
+                                                        iq3s_grid[idx.index[2]], iq3s_grid[idx.index[3]]);
+            const uint32x4_t aux32x4_3 = ggml_vld1q_u32(iq3s_grid[idx.index[4]], iq3s_grid[idx.index[5]],
+                                                        iq3s_grid[idx.index[6]], iq3s_grid[idx.index[7]]);
+
+
+            vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[0] | ((uint32_t) signs[1] << 16)));
+            vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2);
+            vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2);
+            vs.val[0] = vorrq_u8(vceqq_u8(vs.val[0], mask2), m1);
+            vs.val[1] = vorrq_u8(vceqq_u8(vs.val[1], mask2), m1);
+
+            q3s.val[0] = vmulq_s8(vreinterpretq_s8_u8(vs.val[0]), vreinterpretq_s8_u32(aux32x4_0));
+            q3s.val[1] = vmulq_s8(vreinterpretq_s8_u8(vs.val[1]), vreinterpretq_s8_u32(aux32x4_1));
+
+            vs.val[0] = vreinterpretq_u8_u32(vdupq_n_u32(signs[2] | ((uint32_t) signs[3] << 16)));
+            vs.val[1] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[1]), mask2);
+            vs.val[0] = vandq_u8(ggml_vqtbl1q_u8(vs.val[0], mask1.val[0]), mask2);
+            vs.val[0] = vorrq_u8(vceqq_u8(vs.val[0], mask2), m1);
+            vs.val[1] = vorrq_u8(vceqq_u8(vs.val[1], mask2), m1);
+
+            signs += 4;
+
+            q3s.val[2] = vmulq_s8(vreinterpretq_s8_u8(vs.val[0]), vreinterpretq_s8_u32(aux32x4_2));
+            q3s.val[3] = vmulq_s8(vreinterpretq_s8_u8(vs.val[1]), vreinterpretq_s8_u32(aux32x4_3));
+
+            const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[0], q8b.val[0]), q3s.val[1], q8b.val[1]);
+            const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q3s.val[2], q8b.val[2]), q3s.val[3], q8b.val[3]);
+
+            sumi1 += vaddvq_s32(p1) * scales8[ib32/2+0];
+            sumi2 += vaddvq_s32(p2) * scales8[ib32/2+4];
+        }
+        sumf += d*(sumi1 + sumi2);
+    }
+    *s = sumf;
+
+#elif defined(__AVX2__)
+
+   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
+   };
+
+    static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+                                        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    };
+
+    const __m256i mask1 = _mm256_loadu_si256((const __m256i*)k_mask1);
+    const __m256i mask2 = _mm256_loadu_si256((const __m256i*)k_mask2);
+
+    const __m256i idx_shift = _mm256_set_epi32(1, 2, 3, 4, 5, 6, 7, 8);
+    const __m256i idx_mask  = _mm256_set1_epi32(256);
+
+    typedef union {
+        __m256i  vec[2];
+        uint32_t index[16];
+    } index_t;
+
+    index_t idx;
+
+    __m256 accumf = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict qs = x[i].qs;
+        const uint8_t * restrict qh = x[i].qh;
+        const uint16_t * restrict signs = (const uint16_t *)x[i].signs;
+        const int8_t  * restrict q8 = y[i].qs;
+        __m256i sumi1 = _mm256_setzero_si256();
+        __m256i sumi2 = _mm256_setzero_si256();
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m256i q8_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q8_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i idx_l = _mm256_cvtepu8_epi16(_mm_loadu_si128((const __m128i *)qs)); qs += 16;
+            idx.vec[0] = _mm256_set1_epi32(qh[ib32+0]);
+            idx.vec[1] = _mm256_set1_epi32(qh[ib32+1]);
+            idx.vec[0] = _mm256_and_si256(_mm256_sllv_epi32(idx.vec[0], idx_shift), idx_mask);
+            idx.vec[1] = _mm256_and_si256(_mm256_sllv_epi32(idx.vec[1], idx_shift), idx_mask);
+            idx.vec[0] = _mm256_or_si256(idx.vec[0], _mm256_cvtepi16_epi32(_mm256_castsi256_si128(idx_l)));
+            idx.vec[1] = _mm256_or_si256(idx.vec[1], _mm256_cvtepi16_epi32(_mm256_extractf128_si256(idx_l, 1)));
+
+            // At leat on my CPU (Ryzen 7950X), using _mm256_i32gather_epi32 is slower than _mm256_set_epi32. Strange.
+            //const __m256i q2_1 = _mm256_i32gather_epi32((const int *)iq3s_grid, idx.vec[0], 4);
+            //const __m256i q2_2 = _mm256_i32gather_epi32((const int *)iq3s_grid, idx.vec[1], 4);
+            const __m256i q2_1 = _mm256_set_epi32(
+                    iq3s_grid[idx.index[7]], iq3s_grid[idx.index[6]], iq3s_grid[idx.index[5]], iq3s_grid[idx.index[4]],
+                    iq3s_grid[idx.index[3]], iq3s_grid[idx.index[2]], iq3s_grid[idx.index[1]], iq3s_grid[idx.index[0]]
+            );
+            const __m256i q2_2 = _mm256_set_epi32(
+                    iq3s_grid[idx.index[15]], iq3s_grid[idx.index[14]], iq3s_grid[idx.index[13]], iq3s_grid[idx.index[12]],
+                    iq3s_grid[idx.index[11]], iq3s_grid[idx.index[10]], iq3s_grid[idx.index[ 9]], iq3s_grid[idx.index[ 8]]
+            );
+
+            __m256i aux256 = _mm256_set1_epi32(signs[0] | (signs[1] << 16));
+            aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2);
+            const __m256i s2_1 = _mm256_cmpeq_epi8(aux256, mask2);
+            const __m256i q8s_1 = _mm256_sub_epi8(_mm256_xor_si256(s2_1, q8_1), s2_1);
+
+            aux256 = _mm256_set1_epi32(signs[2] | (signs[3] << 16));
+            aux256 = _mm256_and_si256(_mm256_shuffle_epi8(aux256,mask1), mask2);
+            const __m256i s2_2 = _mm256_cmpeq_epi8(aux256, mask2);
+            const __m256i q8s_2 = _mm256_sub_epi8(_mm256_xor_si256(s2_2, q8_2), s2_2);
+
+            signs += 4;
+
+            const __m256i dot1  = _mm256_maddubs_epi16(q2_1, q8s_1);
+            const __m256i dot2  = _mm256_maddubs_epi16(q2_2, q8s_2);
+            const uint16_t ls1 = x[i].scales[ib32/2] & 0xf;
+            const uint16_t ls2 = x[i].scales[ib32/2] >>  4;
+            const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(2*ls1+1));
+            const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(2*ls2+1));
+            sumi1 = _mm256_add_epi32(sumi1, p1);
+            sumi2 = _mm256_add_epi32(sumi2, p2);
+        }
+
+        accumf = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accumf);
+
+    }
+
+    *s = hsum_float_8(accumf);
+
+#elif defined(__AVX__)
+   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
+   };
+
+    static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+                                        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    };
+
+    const __m128i mask1_0 = _mm_loadu_si128((const __m128i*)k_mask1);
+    const __m128i mask1_1 = _mm_loadu_si128((const __m128i*)k_mask1 + 1);
+    const __m128i mask2_0 = _mm_loadu_si128((const __m128i*)k_mask2);
+    const __m128i mask2_1 = _mm_loadu_si128((const __m128i*)k_mask2 + 1);
+
+    const __m128i idx_mul_0 = _mm_set_epi32(32, 64, 128, 256);
+    const __m128i idx_mul_1 = _mm_set_epi32(2, 4, 8, 16);
+    const __m128i idx_mask  = _mm_set1_epi32(256);
+
+    typedef union {
+        __m128i  vec[4];
+        uint32_t index[16];
+    } index_t;
+
+    index_t idx;
+
+    __m256 accumf = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict qs = x[i].qs;
+        const uint8_t * restrict qh = x[i].qh;
+        const uint16_t * restrict signs = (const uint16_t *)x[i].signs;
+        const int8_t  * restrict q8 = y[i].qs;
+        __m128i sumi1_0 = _mm_setzero_si128();
+        __m128i sumi1_1 = _mm_setzero_si128();
+        __m128i sumi2_0 = _mm_setzero_si128();
+        __m128i sumi2_1 = _mm_setzero_si128();
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m128i q8_1_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_1_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_2_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8_2_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i qs_tmp = _mm_loadu_si128((const __m128i *)qs);
+            const __m128i idx_l_0 = _mm_cvtepu8_epi16(qs_tmp);
+            const __m128i idx_l_1 = _mm_cvtepu8_epi16(_mm_srli_si128(qs_tmp, 8)); qs += 16;
+            idx.vec[0] = _mm_set1_epi32(qh[ib32+0]);
+            idx.vec[1] = idx.vec[0];
+            idx.vec[2] = _mm_set1_epi32(qh[ib32+1]);
+            idx.vec[3] = idx.vec[2];
+
+            idx.vec[0] = _mm_and_si128(_mm_mullo_epi32(idx.vec[0], idx_mul_0), idx_mask);
+            idx.vec[1] = _mm_and_si128(_mm_mullo_epi32(idx.vec[1], idx_mul_1), idx_mask);
+            idx.vec[2] = _mm_and_si128(_mm_mullo_epi32(idx.vec[2], idx_mul_0), idx_mask);
+            idx.vec[3] = _mm_and_si128(_mm_mullo_epi32(idx.vec[3], idx_mul_1), idx_mask);
+
+            idx.vec[0] = _mm_or_si128(idx.vec[0], _mm_cvtepi16_epi32(idx_l_0));
+            idx.vec[1] = _mm_or_si128(idx.vec[1], _mm_cvtepi16_epi32(_mm_srli_si128(idx_l_0, 8)));
+            idx.vec[2] = _mm_or_si128(idx.vec[2], _mm_cvtepi16_epi32(idx_l_1));
+            idx.vec[3] = _mm_or_si128(idx.vec[3], _mm_cvtepi16_epi32(_mm_srli_si128(idx_l_1, 8)));
+
+            const __m128i q2_1_0 = _mm_set_epi32(iq3s_grid[idx.index[3]], iq3s_grid[idx.index[2]], iq3s_grid[idx.index[1]], iq3s_grid[idx.index[0]]);
+            const __m128i q2_1_1 = _mm_set_epi32(iq3s_grid[idx.index[7]], iq3s_grid[idx.index[6]], iq3s_grid[idx.index[5]], iq3s_grid[idx.index[4]]);
+            const __m128i q2_2_0 = _mm_set_epi32(iq3s_grid[idx.index[11]], iq3s_grid[idx.index[10]], iq3s_grid[idx.index[9]], iq3s_grid[idx.index[8]]);
+            const __m128i q2_2_1 = _mm_set_epi32(iq3s_grid[idx.index[15]], iq3s_grid[idx.index[14]], iq3s_grid[idx.index[13]], iq3s_grid[idx.index[12]]);
+
+            __m128i aux128_0 = _mm_set1_epi32(signs[0] | (signs[1] << 16));
+            __m128i aux128_1 = aux128_0;
+            aux128_0 = _mm_and_si128(_mm_shuffle_epi8(aux128_0,mask1_0), mask2_0);
+            aux128_1 = _mm_and_si128(_mm_shuffle_epi8(aux128_1,mask1_1), mask2_1);
+            const __m128i s2_1_0 = _mm_cmpeq_epi8(aux128_0, mask2_0);
+            const __m128i s2_1_1 = _mm_cmpeq_epi8(aux128_1, mask2_1);
+            const __m128i q8s_1_0 = _mm_sub_epi8(_mm_xor_si128(s2_1_0, q8_1_0), s2_1_0);
+            const __m128i q8s_1_1 = _mm_sub_epi8(_mm_xor_si128(s2_1_1, q8_1_1), s2_1_1);
+
+            aux128_0 = _mm_set1_epi32(signs[2] | (signs[3] << 16));
+            aux128_1 = aux128_0;
+            aux128_0 = _mm_and_si128(_mm_shuffle_epi8(aux128_0,mask1_0), mask2_0);
+            aux128_1 = _mm_and_si128(_mm_shuffle_epi8(aux128_1,mask1_1), mask2_1);
+            const __m128i s2_2_0 = _mm_cmpeq_epi8(aux128_0, mask2_0);
+            const __m128i s2_2_1 = _mm_cmpeq_epi8(aux128_1, mask2_1);
+            const __m128i q8s_2_0 = _mm_sub_epi8(_mm_xor_si128(s2_2_0, q8_2_0), s2_2_0);
+            const __m128i q8s_2_1 = _mm_sub_epi8(_mm_xor_si128(s2_2_1, q8_2_1), s2_2_1);
+
+            signs += 4;
+
+            const __m128i dot1_0  = _mm_maddubs_epi16(q2_1_0, q8s_1_0);
+            const __m128i dot1_1  = _mm_maddubs_epi16(q2_1_1, q8s_1_1);
+            const __m128i dot2_0  = _mm_maddubs_epi16(q2_2_0, q8s_2_0);
+            const __m128i dot2_1  = _mm_maddubs_epi16(q2_2_1, q8s_2_1);
+            const uint16_t ls1 = x[i].scales[ib32/2] & 0xf;
+            const uint16_t ls2 = x[i].scales[ib32/2] >>  4;
+            const __m128i p1_0 = _mm_madd_epi16(dot1_0, _mm_set1_epi16(2*ls1+1));
+            const __m128i p1_1 = _mm_madd_epi16(dot1_1, _mm_set1_epi16(2*ls1+1));
+            const __m128i p2_0 = _mm_madd_epi16(dot2_0, _mm_set1_epi16(2*ls2+1));
+            const __m128i p2_1 = _mm_madd_epi16(dot2_1, _mm_set1_epi16(2*ls2+1));
+            sumi1_0 = _mm_add_epi32(sumi1_0, p1_0);
+            sumi1_1 = _mm_add_epi32(sumi1_1, p1_1);
+            sumi2_0 = _mm_add_epi32(sumi2_0, p2_0);
+            sumi2_1 = _mm_add_epi32(sumi2_1, p2_1);
+        }
+
+        accumf = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(MM256_SET_M128I(_mm_add_epi32(sumi1_1, sumi2_1), _mm_add_epi32(sumi1_0, sumi2_0)))), accumf);
+
+    }
+
+    *s = hsum_float_8(accumf);
+
+#elif defined(__POWER9_VECTOR__)
+    static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                                        0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
+    };
+
+    static const uint8_t k_mask2[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,};
+
+    const vector int v0 = vec_splats((int32_t)0);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    const vector unsigned char mask0 = vec_xl( 0, k_mask1);
+    const vector unsigned char mask1 = vec_xl(16, k_mask1);
+    const vector signed char mask2 = (vector signed char)vec_xl( 0, k_mask2);
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        const uint8_t *  restrict q3 = x[i].qs;
+        const uint8_t *  restrict qh = x[i].qh;
+        const uint16_t * restrict signs = (const uint16_t *)(x[i].signs);
+        const uint8_t *  restrict sc = x[i].scales;
+        const int8_t  *  restrict q8 = y[i].qs;
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+
+        for (int j = 0; j < QK_K/32; j += 2) {
+            __builtin_prefetch(q3, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            vector unsigned int aux32x4_0 = {iq3s_grid[q3[ 0] | ((qh[0] << 8) & 256)], iq3s_grid[q3[ 1] | ((qh[0] << 7) & 256)],
+                                             iq3s_grid[q3[ 2] | ((qh[0] << 6) & 256)], iq3s_grid[q3[ 3] | ((qh[0] << 5) & 256)]};
+            vector unsigned int aux32x4_1 = {iq3s_grid[q3[ 4] | ((qh[0] << 4) & 256)], iq3s_grid[q3[ 5] | ((qh[0] << 3) & 256)],
+                                             iq3s_grid[q3[ 6] | ((qh[0] << 2) & 256)], iq3s_grid[q3[ 7] | ((qh[0] << 1) & 256)]};
+            vector unsigned int aux32x4_2 = {iq3s_grid[q3[ 8] | ((qh[1] << 8) & 256)], iq3s_grid[q3[ 9] | ((qh[1] << 7) & 256)],
+                                             iq3s_grid[q3[10] | ((qh[1] << 6) & 256)], iq3s_grid[q3[11] | ((qh[1] << 5) & 256)]};
+            vector unsigned int aux32x4_3 = {iq3s_grid[q3[12] | ((qh[1] << 4) & 256)], iq3s_grid[q3[13] | ((qh[1] << 3) & 256)],
+                                             iq3s_grid[q3[14] | ((qh[1] << 2) & 256)], iq3s_grid[q3[15] | ((qh[1] << 1) & 256)]};
+            q3 += 16;
+            qh += 2;
+
+            vector signed char vsigns01 = (vector signed char)vec_splats(*(const uint32_t *)&signs[0]);
+            vector signed char vsigns02 = (vector signed char)vec_splats(*(const uint32_t *)&signs[2]);
+            signs += 4;
+
+            vector signed char vsigns0 = vec_perm(vsigns01, vsigns01, mask0);
+            vector signed char vsigns1 = vec_perm(vsigns01, vsigns01, mask1);
+            vector signed char vsigns2 = vec_perm(vsigns02, vsigns02, mask0);
+            vector signed char vsigns3 = vec_perm(vsigns02, vsigns02, mask1);
+
+            vsigns0 = (vector signed char)vec_cmpeq(vec_and(vsigns0, mask2), mask2);
+            vsigns1 = (vector signed char)vec_cmpeq(vec_and(vsigns1, mask2), mask2);
+            vsigns2 = (vector signed char)vec_cmpeq(vec_and(vsigns2, mask2), mask2);
+            vsigns3 = (vector signed char)vec_cmpeq(vec_and(vsigns3, mask2), mask2);
+
+            vector signed char q3x0 = vec_sub(vec_xor(vsigns0, (vector signed char)aux32x4_0), vsigns0);
+            vector signed char q3x1 = vec_sub(vec_xor(vsigns1, (vector signed char)aux32x4_1), vsigns1);
+            vector signed char q3x2 = vec_sub(vec_xor(vsigns2, (vector signed char)aux32x4_2), vsigns2);
+            vector signed char q3x3 = vec_sub(vec_xor(vsigns3, (vector signed char)aux32x4_3), vsigns3);
+
+            vector signed char q8y0 = vec_xl( 0, q8);
+            vector signed char q8y1 = vec_xl(16, q8);
+            vector signed char q8y2 = vec_xl(32, q8);
+            vector signed char q8y3 = vec_xl(48, q8);
+            q8 += 64;
+
+            vector signed short qv0 = vec_add(vec_mule(q3x0, q8y0), vec_mulo(q3x0, q8y0));
+            vector signed short qv1 = vec_add(vec_mule(q3x1, q8y1), vec_mulo(q3x1, q8y1));
+            vector signed short qv2 = vec_add(vec_mule(q3x2, q8y2), vec_mulo(q3x2, q8y2));
+            vector signed short qv3 = vec_add(vec_mule(q3x3, q8y3), vec_mulo(q3x3, q8y3));
+
+            const uint16_t ls0 = (uint16_t)(sc[0] & 0xf);
+            const uint16_t ls1 = (uint16_t)(sc[0] >>  4);
+            sc ++;
+
+            vector signed short vscales01 = (vector signed short)vec_splats((uint16_t)(2*ls0+1));
+            vector signed short vscales23 = (vector signed short)vec_splats((uint16_t)(2*ls1+1));
+
+            vsumi0 = vec_msum(qv0, vscales01, vsumi0);
+            vsumi1 = vec_msum(qv1, vscales01, vsumi1);
+            vsumi2 = vec_msum(qv2, vscales23, vsumi2);
+            vsumi3 = vec_msum(qv3, vscales23, vsumi3);
+        }
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+
+   static const uint8_t k_mask1[32] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+                                       0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03
+   };
+
+    static const uint8_t k_mask2[32] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+                                        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    };
+
+    const __m256i mask1 = __lasx_xvld((const __m256i*)k_mask1, 0);
+    const __m256i mask2 = __lasx_xvld((const __m256i*)k_mask2, 0);
+
+    __m256i idx_shift = lasx_set_w(1, 2, 3, 4, 5, 6, 7, 8);
+    const __m256i idx_mask  = __lasx_xvreplgr2vr_w(256);
+
+    typedef union {
+        __m256i  vec[2];
+        uint32_t index[16];
+    } index_t;
+
+    index_t idx;
+
+    __m256 accumf = (__m256)__lasx_xvldi(0);
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict qs = x[i].qs;
+        const uint8_t * restrict qh = x[i].qh;
+        const uint16_t * restrict signs = (const uint16_t *)x[i].signs;
+        const int8_t  * restrict q8 = y[i].qs;
+        __m256i sumi1 = __lasx_xvldi(0);
+        __m256i sumi2 = __lasx_xvldi(0);
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const __m256i q8_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i q8_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i idx_l = lasx_extu8_16(__lsx_vld(qs, 0)); qs += 16;
+            idx.vec[0] = __lasx_xvreplgr2vr_w(qh[ib32+0]);
+            idx.vec[1] = __lasx_xvreplgr2vr_w(qh[ib32+1]);
+            idx.vec[0] = __lasx_xvand_v(__lasx_xvsll_w(idx.vec[0], idx_shift), idx_mask);
+            idx.vec[1] = __lasx_xvand_v(__lasx_xvsll_w(idx.vec[1], idx_shift), idx_mask);
+            idx.vec[0] = __lasx_xvor_v(idx.vec[0], lasx_ext16_32(lasx_extracti128(idx_l, 0)));
+            idx.vec[1] = __lasx_xvor_v(idx.vec[1], lasx_ext16_32(lasx_extracti128(idx_l, 1)));
+
+            // At leat on my CPU (Ryzen 7950X), using _mm256_i32gather_epi32 is slower than _mm256_set_epi32. Strange.
+            //const __m256i q2_1 = _mm256_i32gather_epi32((const int *)iq3s_grid, idx.vec[0], 4);
+            //const __m256i q2_2 = _mm256_i32gather_epi32((const int *)iq3s_grid, idx.vec[1], 4);
+            const __m256i q2_1 = lasx_set_w(
+                    iq3s_grid[idx.index[7]], iq3s_grid[idx.index[6]], iq3s_grid[idx.index[5]], iq3s_grid[idx.index[4]],
+                    iq3s_grid[idx.index[3]], iq3s_grid[idx.index[2]], iq3s_grid[idx.index[1]], iq3s_grid[idx.index[0]]
+            );
+            const __m256i q2_2 = lasx_set_w(
+                    iq3s_grid[idx.index[15]], iq3s_grid[idx.index[14]], iq3s_grid[idx.index[13]], iq3s_grid[idx.index[12]],
+                    iq3s_grid[idx.index[11]], iq3s_grid[idx.index[10]], iq3s_grid[idx.index[ 9]], iq3s_grid[idx.index[ 8]]
+            );
+
+            __m256i aux256 = __lasx_xvreplgr2vr_w(signs[0] | (signs[1] << 16));
+            aux256 = __lasx_xvand_v(lasx_shuffle_b(aux256,mask1), mask2);
+            const __m256i s2_1 = __lasx_xvseq_b(aux256, mask2);
+            const __m256i q8s_1 = __lasx_xvsub_b(__lasx_xvxor_v(s2_1, q8_1), s2_1);
+
+            aux256 = __lasx_xvreplgr2vr_w(signs[2] | (signs[3] << 16));
+            aux256 = __lasx_xvand_v(lasx_shuffle_b(aux256,mask1), mask2);
+            const __m256i s2_2 = __lasx_xvseq_b(aux256, mask2);
+            const __m256i q8s_2 = __lasx_xvsub_b(__lasx_xvxor_v(s2_2, q8_2), s2_2);
+
+            signs += 4;
+
+            const __m256i dot1 = lasx_maddubs_h(q2_1, q8s_1);
+            const __m256i dot2  = lasx_maddubs_h(q2_2, q8s_2);
+            const uint16_t ls1 = x[i].scales[ib32/2] & 0xf;
+            const uint16_t ls2 = x[i].scales[ib32/2] >>  4;
+            const __m256i p1 = lasx_madd_h(dot1, __lasx_xvreplgr2vr_h(2*ls1+1));
+            const __m256i p2 = lasx_madd_h(dot2, __lasx_xvreplgr2vr_h(2*ls2+1));
+            sumi1 = __lasx_xvadd_w(sumi1, p1);
+            sumi2 = __lasx_xvadd_w(sumi2, p2);
+        }
+
+        accumf = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accumf);
+    }
+
+    *s = hsum_float_8(accumf);
+
+#else
+
+    float sumf = 0.f;
+    for (int i = 0; i < nb; ++i) {
+        const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;
+        const uint8_t * restrict qs = x[i].qs;
+        const uint8_t * restrict qh = x[i].qh;
+        const uint8_t * restrict signs = x[i].signs;
+        const int8_t  * restrict q8 = y[i].qs;
+        int32_t bsum = 0;
+        for (int ib32 = 0; ib32 < QK_K/32; ib32 += 2) {
+            const uint32_t ls1 = 2*(x[i].scales[ib32/2] & 0xf) + 1;
+            const uint32_t ls2 = 2*(x[i].scales[ib32/2] >>  4) + 1;
+            int32_t sumi = 0;
+            for (int l = 0; l < 4; ++l) {
+                const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[ib32+0] << (8-2*l)) & 256)));
+                const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[ib32+0] << (7-2*l)) & 256)));
+                for (int j = 0; j < 4; ++j) {
+                    sumi += grid1[j] * q8[j+0] * (signs[l] & kmask_iq2xs[j+0] ? -1 : 1);
+                    sumi += grid2[j] * q8[j+4] * (signs[l] & kmask_iq2xs[j+4] ? -1 : 1);
+                }
+                q8 += 8;
+            }
+            qs += 8;
+            signs += 4;
+            bsum += sumi * ls1;
+            sumi = 0;
+            for (int l = 0; l < 4; ++l) {
+                const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*l+0] | ((qh[ib32+1] << (8-2*l)) & 256)));
+                const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*l+1] | ((qh[ib32+1] << (7-2*l)) & 256)));
+                for (int j = 0; j < 4; ++j) {
+                    sumi += grid1[j] * q8[j+0] * (signs[l] & kmask_iq2xs[j+0] ? -1 : 1);
+                    sumi += grid2[j] * q8[j+4] * (signs[l] & kmask_iq2xs[j+4] ? -1 : 1);
+                }
+                q8 += 8;
+            }
+            qs += 8;
+            signs += 4;
+            bsum += sumi * ls2;
+        }
+        sumf += d * bsum;
+    }
+    *s = sumf;
+#endif
+}
+
+
+#if defined(__AVX__)
+static inline __m128i mul_add_epi8_sse(const __m128i x, const __m128i y) {
+    const __m128i ax = _mm_sign_epi8(x, x);
+    const __m128i sy = _mm_sign_epi8(y, x);
+    return _mm_maddubs_epi16(ax, sy);
+}
+#endif
+
+#if defined(__AVX2__)
+static inline __m256i mul_add_epi8(const __m256i x, const __m256i y) {
+    const __m256i ax = _mm256_sign_epi8(x, x);
+    const __m256i sy = _mm256_sign_epi8(y, x);
+    return _mm256_maddubs_epi16(ax, sy);
+}
+#elif defined(__loongarch_asx)
+static inline __m256i mul_add_epi8(const __m256i x, const __m256i y) {
+    const __m256i ax = __lasx_xvsigncov_b(x, x);
+    const __m256i sy = __lasx_xvsigncov_b(x, y);
+    __m256i tmp1, tmp2, tmp3;
+    tmp1 = __lasx_xvmulwev_h_bu_b(ax, sy);
+    tmp2 = __lasx_xvmulwod_h_bu_b(ax, sy);
+    tmp3 = __lasx_xvadd_h(tmp1, tmp2);
+    return __lasx_xvsat_h(tmp3, 15);
+}
+#endif
+
+void ggml_vec_dot_iq1_s_q8_K  (int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_iq1_s * restrict x = vx;
+    const block_q8_K  * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+#if defined __ARM_NEON
+
+    ggml_int8x16x4_t q1b;
+    ggml_int8x16x4_t q8b;
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+
+        const int8_t   * q8 = y[i].qs;
+        const uint8_t  * qs = x[i].qs;
+        const uint16_t * qh = x[i].qh;
+
+        int sumi1 = 0, sumi2 = 0, sumi3 = 0;
+
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+
+            q1b.val[0] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[0] | ((qh[ib+0] << 8) & 0x700)))),
+                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[1] | ((qh[ib+0] << 5) & 0x700)))));
+            q1b.val[1] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[2] | ((qh[ib+0] << 2) & 0x700)))),
+                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[3] | ((qh[ib+0] >> 1) & 0x700)))));
+            q1b.val[2] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[4] | ((qh[ib+1] << 8) & 0x700)))),
+                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[5] | ((qh[ib+1] << 5) & 0x700)))));
+            q1b.val[3] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[6] | ((qh[ib+1] << 2) & 0x700)))),
+                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[7] | ((qh[ib+1] >> 1) & 0x700)))));
+            qs += 8;
+
+            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
+
+            const int32x4_t p1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q1b.val[0], q8b.val[0]), q1b.val[1], q8b.val[1]);
+            const int32x4_t p2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q1b.val[2], q8b.val[2]), q1b.val[3], q8b.val[3]);
+
+            const int ls1 = 2*((qh[ib+0] >> 12) & 7) + 1;
+            const int ls2 = 2*((qh[ib+1] >> 12) & 7) + 1;
+            sumi1 += vaddvq_s32(p1) * ls1;
+            sumi2 += vaddvq_s32(p2) * ls2;
+            sumi3 += (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]) * ls1 * (qh[ib+0] & 0x8000 ? -1 : 1)
+                   + (y[i].bsums[2*ib+2] + y[i].bsums[2*ib+3]) * ls2 * (qh[ib+1] & 0x8000 ? -1 : 1);
+
+        }
+
+        sumf += y[i].d * GGML_FP16_TO_FP32(x[i].d) * (sumi1 + sumi2 + IQ1S_DELTA * sumi3);
+    }
+
+    *s = sumf;
+
+#elif defined __AVX2__
+
+    __m256 accum = _mm256_setzero_ps();
+    float accum1 = 0;
+    for (int i = 0; i < nb; ++i) {
+
+        const int8_t   * q8 = y[i].qs;
+        const uint8_t  * qs = x[i].qs;
+        const uint16_t * qh = x[i].qh;
+
+        __m256i sumi = _mm256_setzero_si256();
+        int sumi1 = 0;
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+            const __m256i q1b_1 = _mm256_set_epi64x(iq1s_grid[qs[3] | ((qh[ib+0] >> 1) & 0x700)], iq1s_grid[qs[2] | ((qh[ib+0] << 2) & 0x700)],
+                                                    iq1s_grid[qs[1] | ((qh[ib+0] << 5) & 0x700)], iq1s_grid[qs[0] | ((qh[ib+0] << 8) & 0x700)]);
+            const __m256i q1b_2 = _mm256_set_epi64x(iq1s_grid[qs[7] | ((qh[ib+1] >> 1) & 0x700)], iq1s_grid[qs[6] | ((qh[ib+1] << 2) & 0x700)],
+                                                    iq1s_grid[qs[5] | ((qh[ib+1] << 5) & 0x700)], iq1s_grid[qs[4] | ((qh[ib+1] << 8) & 0x700)]);
+            qs += 8;
+            const __m256i q8b_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8b_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+
+            const __m256i dot1 = mul_add_epi8(q1b_1, q8b_1);
+            const __m256i dot2 = mul_add_epi8(q1b_2, q8b_2);
+            const int16_t ls1 = 2*((qh[ib+0] >> 12) & 7) + 1;
+            const int16_t ls2 = 2*((qh[ib+1] >> 12) & 7) + 1;
+            const __m256i p1 = _mm256_madd_epi16(dot1, _mm256_set1_epi16(ls1));
+            const __m256i p2 = _mm256_madd_epi16(dot2, _mm256_set1_epi16(ls2));
+
+            sumi = _mm256_add_epi32(sumi, _mm256_add_epi32(p1, p2));
+            sumi1 += (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]) * (qh[ib+0] & 0x8000 ? -1 : 1) * ls1
+                   + (y[i].bsums[2*ib+2] + y[i].bsums[2*ib+3]) * (qh[ib+1] & 0x8000 ? -1 : 1) * ls2;
+        }
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        accum = _mm256_fmadd_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(sumi), accum);
+        accum1 += d * sumi1;
+
+    }
+
+    *s = hsum_float_8(accum) + IQ1S_DELTA * accum1;
+
+#elif defined __AVX__
+    __m256 accum = _mm256_setzero_ps();
+    float accum1 = 0;
+    for (int i = 0; i < nb; ++i) {
+
+        const int8_t   * q8 = y[i].qs;
+        const uint8_t  * qs = x[i].qs;
+        const uint16_t * qh = x[i].qh;
+
+        __m128i sumi1_0 = _mm_setzero_si128();
+        __m128i sumi1_1 = _mm_setzero_si128();
+        int sumi1 = 0;
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+            const __m128i q1b_1_0 = _mm_set_epi64x(iq1s_grid[qs[1] | ((qh[ib+0] << 5) & 0x700)], iq1s_grid[qs[0] | ((qh[ib+0] << 8) & 0x700)]);
+            const __m128i q1b_1_1 = _mm_set_epi64x(iq1s_grid[qs[3] | ((qh[ib+0] >> 1) & 0x700)], iq1s_grid[qs[2] | ((qh[ib+0] << 2) & 0x700)]);
+            const __m128i q1b_2_0 = _mm_set_epi64x(iq1s_grid[qs[5] | ((qh[ib+1] << 5) & 0x700)], iq1s_grid[qs[4] | ((qh[ib+1] << 8) & 0x700)]);
+            const __m128i q1b_2_1 = _mm_set_epi64x(iq1s_grid[qs[7] | ((qh[ib+1] >> 1) & 0x700)], iq1s_grid[qs[6] | ((qh[ib+1] << 2) & 0x700)]);
+            qs += 8;
+            const __m128i q8b_1_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8b_1_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8b_2_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8b_2_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+
+            const __m128i dot1_0 = mul_add_epi8_sse(q1b_1_0, q8b_1_0);
+            const __m128i dot1_1 = mul_add_epi8_sse(q1b_1_1, q8b_1_1);
+            const __m128i dot2_0 = mul_add_epi8_sse(q1b_2_0, q8b_2_0);
+            const __m128i dot2_1 = mul_add_epi8_sse(q1b_2_1, q8b_2_1);
+            const int16_t ls1 = 2*((qh[ib+0] >> 12) & 7) + 1;
+            const int16_t ls2 = 2*((qh[ib+1] >> 12) & 7) + 1;
+            const __m128i p1_0 = _mm_madd_epi16(dot1_0, _mm_set1_epi16(ls1));
+            const __m128i p1_1 = _mm_madd_epi16(dot1_1, _mm_set1_epi16(ls1));
+            const __m128i p2_0 = _mm_madd_epi16(dot2_0, _mm_set1_epi16(ls2));
+            const __m128i p2_1 = _mm_madd_epi16(dot2_1, _mm_set1_epi16(ls2));
+
+            sumi1_0 = _mm_add_epi32(sumi1_0, _mm_add_epi32(p1_0, p2_0));
+            sumi1_1 = _mm_add_epi32(sumi1_1, _mm_add_epi32(p1_1, p2_1));
+            sumi1 += (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]) * (qh[ib+0] & 0x8000 ? -1 : 1) * ls1
+                   + (y[i].bsums[2*ib+2] + y[i].bsums[2*ib+3]) * (qh[ib+1] & 0x8000 ? -1 : 1) * ls2;
+        }
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        accum = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(d), _mm256_cvtepi32_ps(MM256_SET_M128I(sumi1_1, sumi1_0))), accum);
+        accum1 += d * sumi1;
+
+    }
+
+    *s = hsum_float_8(accum) + IQ1S_DELTA * accum1;
+
+#elif defined(__POWER9_VECTOR__)
+    const vector unsigned char v0 = vec_splats((unsigned char)0x0);
+    const vector unsigned short vsign = vec_splats((unsigned short)0x8000);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    for (int i = 0; i < nb; ++i) {
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[i].d));
+        vector float vyd = vec_splats(y[i].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed int vsumi0 = vec_splats((int32_t)0);
+        vector signed int vsumi1 = vec_splats((int32_t)0);
+        vector signed int vsumi2 = vec_splats((int32_t)0);
+        vector signed int vsumi3 = vec_splats((int32_t)0);
+        vector signed int vsumi8 = vec_splats((int32_t)0);
+
+        const uint8_t  * restrict q1 = x[i].qs;
+        const uint16_t * restrict qh = x[i].qh;
+        const int8_t   * restrict q8 = y[i].qs;
+        const int16_t  * restrict qs = y[i].bsums;
+
+        for (int j = 0; j < QK_K/32; j += 2) {
+            __builtin_prefetch(q1, 0, 1);
+            __builtin_prefetch(qh, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            vector signed long long aux64x2_0 = {*(const int64_t *)(iq1s_grid + (q1[0] | ((qh[0] << 8) & 0x700))), *(const int64_t *)(iq1s_grid + (q1[1] | ((qh[0] << 5) & 0x700)))};
+            vector signed long long aux64x2_1 = {*(const int64_t *)(iq1s_grid + (q1[2] | ((qh[0] << 2) & 0x700))), *(const int64_t *)(iq1s_grid + (q1[3] | ((qh[0] >> 1) & 0x700)))};
+            vector signed long long aux64x2_2 = {*(const int64_t *)(iq1s_grid + (q1[4] | ((qh[1] << 8) & 0x700))), *(const int64_t *)(iq1s_grid + (q1[5] | ((qh[1] << 5) & 0x700)))};
+            vector signed long long aux64x2_3 = {*(const int64_t *)(iq1s_grid + (q1[6] | ((qh[1] << 2) & 0x700))), *(const int64_t *)(iq1s_grid + (q1[7] | ((qh[1] >> 1) & 0x700)))};
+            q1 += 8;
+
+            vector signed char q1x0 = (vector signed char)aux64x2_0;
+            vector signed char q1x1 = (vector signed char)aux64x2_1;
+            vector signed char q1x2 = (vector signed char)aux64x2_2;
+            vector signed char q1x3 = (vector signed char)aux64x2_3;
+
+            vector signed char q8y0 = vec_xl( 0, q8);
+            vector signed char q8y1 = vec_xl(16, q8);
+            vector signed char q8y2 = vec_xl(32, q8);
+            vector signed char q8y3 = vec_xl(48, q8);
+            q8 += 64;
+
+            vector signed short qv0 = vec_add(vec_mule(q1x0, q8y0), vec_mulo(q1x0, q8y0));
+            vector signed short qv1 = vec_add(vec_mule(q1x1, q8y1), vec_mulo(q1x1, q8y1));
+            vector signed short qv2 = vec_add(vec_mule(q1x2, q8y2), vec_mulo(q1x2, q8y2));
+            vector signed short qv3 = vec_add(vec_mule(q1x3, q8y3), vec_mulo(q1x3, q8y3));
+
+            const uint16_t ls0 = (uint16_t)((qh[0] >> 12) & 7);
+            const uint16_t ls1 = (uint16_t)((qh[1] >> 12) & 7);
+
+            vector signed short vscales01 = (vector signed short)vec_splats((uint16_t)(2*ls0+1));
+            vector signed short vscales23 = (vector signed short)vec_splats((uint16_t)(2*ls1+1));
+            vector signed short vscales = vec_sld(vscales23, vscales01, 8);
+
+            vsumi0 = vec_msum(qv0, vscales01, vsumi0);
+            vsumi1 = vec_msum(qv1, vscales01, vsumi1);
+            vsumi2 = vec_msum(qv2, vscales23, vsumi2);
+            vsumi3 = vec_msum(qv3, vscales23, vsumi3);
+
+            vector signed short q8ysums = vec_xl_len(qs, 8);
+            qs += 4;
+            q8ysums = vec_mergeh(q8ysums, (vector signed short)v0);
+
+            vector signed short qxh = (vector signed short)vec_sld(vec_splats(qh[1]), vec_splats(qh[0]), 8);
+            qh += 2;
+            vector __bool short vsel = vec_cmpge(qxh, (vector signed short)v0);
+
+            vector signed short q8ysum = vec_sel((vector signed short)vec_xor((vector unsigned short)q8ysums, vsign), q8ysums, vsel);
+
+            vsumi8 = vec_add(vec_mule(q8ysum, vscales), vsumi8);
+        }
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+
+        vsumf0 = vec_madd(vec_ctf(vsumi8, 0), vec_mul(vd, vec_splats(IQ1S_DELTA)), vsumf0);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+
+    __m256 accum = (__m256)__lasx_xvldi(0);
+    float accum1 = 0;
+    for (int i = 0; i < nb; ++i) {
+
+        const int8_t   * q8 = y[i].qs;
+        const uint8_t  * qs = x[i].qs;
+        const uint16_t * qh = x[i].qh;
+
+        __m256i sumi = __lasx_xvldi(0);
+        int sumi1 = 0;
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+            __m256i q1b_1 = __lasx_xvinsgr2vr_d(q1b_1, iq1s_grid[qs[0] | ((qh[ib+0] << 8) & 0x700)], 0);
+            q1b_1 = __lasx_xvinsgr2vr_d(q1b_1, iq1s_grid[qs[1] | ((qh[ib+0] << 5) & 0x700)], 1);
+            q1b_1 = __lasx_xvinsgr2vr_d(q1b_1, iq1s_grid[qs[2] | ((qh[ib+0] << 2) & 0x700)], 2);
+            q1b_1 = __lasx_xvinsgr2vr_d(q1b_1, iq1s_grid[qs[3] | ((qh[ib+0] >> 1) & 0x700)], 3);
+
+            __m256i q1b_2 = __lasx_xvinsgr2vr_d(q1b_2, iq1s_grid[qs[4] | ((qh[ib+1] << 8) & 0x700)], 0);
+            q1b_2 = __lasx_xvinsgr2vr_d(q1b_2, iq1s_grid[qs[5] | ((qh[ib+1] << 5) & 0x700)], 1);
+            q1b_2 = __lasx_xvinsgr2vr_d(q1b_2, iq1s_grid[qs[6] | ((qh[ib+1] << 2) & 0x700)], 2);
+            q1b_2 = __lasx_xvinsgr2vr_d(q1b_2, iq1s_grid[qs[7] | ((qh[ib+1] >> 1) & 0x700)], 3);
+
+            qs += 8;
+            const __m256i q8b_1 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+            const __m256i q8b_2 = __lasx_xvld((const __m256i*)q8, 0); q8 += 32;
+
+            const __m256i dot1 = mul_add_epi8(q1b_1, q8b_1);
+            const __m256i dot2 = mul_add_epi8(q1b_2, q8b_2);
+            const int16_t ls1 = 2*((qh[ib+0] >> 12) & 7) + 1;
+            const int16_t ls2 = 2*((qh[ib+1] >> 12) & 7) + 1;
+
+            __m256i tmp1, tmp5, tmp6;
+            tmp1 = __lasx_xvreplgr2vr_h(ls1);
+            tmp5 = __lasx_xvmulwev_w_h(dot1, tmp1);
+            tmp6 = __lasx_xvmulwod_w_h(dot1, tmp1);
+            const __m256i p1 = __lasx_xvadd_w(tmp5, tmp6);
+
+            tmp1 = __lasx_xvreplgr2vr_h(ls2);
+            tmp5 = __lasx_xvmulwev_w_h(dot2, tmp1);
+            tmp6 = __lasx_xvmulwod_w_h(dot2, tmp1);
+            const __m256i p2 = __lasx_xvadd_w(tmp5, tmp6);
+
+            sumi = __lasx_xvadd_w(sumi, __lasx_xvadd_w(p1, p2));
+            sumi1 += (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]) * (qh[ib+0] & 0x8000 ? -1 : 1) * ls1
+                   + (y[i].bsums[2*ib+2] + y[i].bsums[2*ib+3]) * (qh[ib+1] & 0x8000 ? -1 : 1) * ls2;
+        }
+
+        const float d = y[i].d * GGML_FP16_TO_FP32(x[i].d);
+        accum = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(d), __lasx_xvffint_s_w(sumi), accum);
+        accum1 += d * sumi1;
+    }
+
+    *s = hsum_float_8(accum) + IQ1S_DELTA * accum1;
+
+#else
+
+    float sumf = 0;
+    for (int i = 0; i < nb; i++) {
+
+        const int8_t   * q8 = y[i].qs;
+        const uint8_t  * qs = x[i].qs;
+        const uint16_t * qh = x[i].qh;
+
+        int sumi = 0, sumi1 = 0;
+        for (int ib = 0; ib < QK_K/32; ++ib) {
+            const int ls = 2*((qh[ib] >> 12) & 7) + 1;
+            const int delta = qh[ib] & 0x8000 ? -1 : 1;
+            int lsum = 0;
+            for (int l = 0; l < 4; ++l) {
+                const int8_t * grid = (const int8_t *)(iq1s_grid + (qs[l] | (((qh[ib] >> 3*l) & 7) << 8)));
+                for (int j = 0; j < 8; ++j) {
+                    lsum += q8[j] * grid[j];
+                }
+                q8 += 8;
+            }
+            sumi  += ls * lsum;
+            sumi1 += ls * delta * (y[i].bsums[2*ib+0] + y[i].bsums[2*ib+1]);
+            qs += 4;
+        }
+
+        sumf += GGML_FP16_TO_FP32(x[i].d) * y[i].d * (sumi + IQ1S_DELTA * sumi1);
+    }
+
+    *s = sumf;
+
+#endif
+}
+
+void ggml_vec_dot_iq1_m_q8_K  (int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(n % QK_K == 0);
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    const block_iq1_m * restrict x = vx;
+    const block_q8_K  * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+    iq1m_scale_t scale;
+
+#if defined __ARM_NEON
+    const int32x4_t mask  = vdupq_n_s32(0x7);
+    const int32x4_t mone  = vdupq_n_s32(1);
+    const int32x4_t mzero = vdupq_n_s32(0);
+
+    ggml_int8x16x4_t deltas;
+    deltas.val[0] = vcombine_s8(vdup_n_s8(+1), vdup_n_s8(+1));
+    deltas.val[1] = vcombine_s8(vdup_n_s8(-1), vdup_n_s8(+1));
+    deltas.val[2] = vcombine_s8(vdup_n_s8(+1), vdup_n_s8(-1));
+    deltas.val[3] = vcombine_s8(vdup_n_s8(-1), vdup_n_s8(-1));
+
+    ggml_int8x16x4_t q1b;
+    ggml_int8x16x4_t q8b;
+
+    uint32_t aux32;
+    const uint8_t * aux8 = (const uint8_t *)&aux32;
+
+    float sumf = 0;
+    for (int i = 0; i < nb; ++i) {
+
+        const int8_t   * q8 = y[i].qs;
+        const uint8_t  * qs = x[i].qs;
+        const uint8_t  * qh = x[i].qh;
+        const uint16_t * sc = (const uint16_t *)x[i].scales;
+
+        scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+
+        int32x4_t sumi1 = mzero;
+        int32x4_t sumi2 = mzero;
+
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+
+            q1b.val[0] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[0] | ((qh[0] << 8) & 0x700)))),
+                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[1] | ((qh[0] << 4) & 0x700)))));
+            q1b.val[1] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[2] | ((qh[1] << 8) & 0x700)))),
+                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[3] | ((qh[1] << 4) & 0x700)))));
+            q1b.val[2] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[4] | ((qh[2] << 8) & 0x700)))),
+                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[5] | ((qh[2] << 4) & 0x700)))));
+            q1b.val[3] = vcombine_s8(vld1_s8((const int8_t *)(iq1s_grid + (qs[6] | ((qh[3] << 8) & 0x700)))),
+                                     vld1_s8((const int8_t *)(iq1s_grid + (qs[7] | ((qh[3] << 4) & 0x700)))));
+
+            q8b = ggml_vld1q_s8_x4(q8); q8 += 64;
+
+            const int32x4_t p1 = vpaddq_s32(ggml_vdotq_s32(mzero, q1b.val[0], q8b.val[0]), ggml_vdotq_s32(mzero, q1b.val[1], q8b.val[1]));
+            const int32x4_t p2 = vpaddq_s32(ggml_vdotq_s32(mzero, q1b.val[2], q8b.val[2]), ggml_vdotq_s32(mzero, q1b.val[3], q8b.val[3]));
+            const int32x4_t p12 = vpaddq_s32(p1, p2);
+
+            const uint32_t * qh32 = (const uint32_t *)qh; // we are 4-byte aligned, so we can do that
+            aux32 = ((qh32[0] >> 3) & 0x01010101) | ((qh32[0] >> 6) & 0x02020202);
+
+            const int32x4_t p3 = vpaddq_s32(ggml_vdotq_s32(mzero, deltas.val[aux8[0]], q8b.val[0]), ggml_vdotq_s32(mzero, deltas.val[aux8[1]], q8b.val[1]));
+            const int32x4_t p4 = vpaddq_s32(ggml_vdotq_s32(mzero, deltas.val[aux8[2]], q8b.val[2]), ggml_vdotq_s32(mzero, deltas.val[aux8[3]], q8b.val[3]));
+            const int32x4_t p34 = vpaddq_s32(p3, p4);
+
+            int32x4_t scales_4 = ggml_vld1q_u32(sc[ib/2] >> 0, sc[ib/2] >> 3, sc[ib/2] >> 6, sc[ib/2] >> 9);
+
+            scales_4 = vaddq_s32(vshlq_n_s32(vandq_s32(scales_4, mask), 1), mone);
+
+            sumi1 = vmlaq_s32(sumi1, scales_4, p12);
+            sumi2 = vmlaq_s32(sumi2, scales_4, p34);
+
+            qs += 8; qh += 4;
+
+        }
+
+        sumf += y[i].d * GGML_FP16_TO_FP32(scale.f16) * (vaddvq_s32(sumi1) + IQ1M_DELTA * vaddvq_s32(sumi2));
+    }
+
+    *s = sumf;
+
+#elif defined __AVX2__
+
+    const __m256i mask = _mm256_set1_epi16(0x7);
+    const __m256i mone = _mm256_set1_epi16(1);
+
+    __m256 accum1 = _mm256_setzero_ps();
+    __m256 accum2 = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+
+        const int8_t   * q8 = y[i].qs;
+        const uint8_t  * qs = x[i].qs;
+        const uint8_t  * qh = x[i].qh;
+        const uint16_t * sc = (const uint16_t *)x[i].scales;
+
+        scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+
+        __m256i sumi1 = _mm256_setzero_si256();
+        __m256i sumi2 = _mm256_setzero_si256();
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+            const __m256i q1b_1 = _mm256_set_epi64x(
+                    iq1s_grid[qs[3] | (((uint16_t)qh[1] << 4) & 0x700)], iq1s_grid[qs[2] | (((uint16_t)qh[1] << 8) & 0x700)],
+                    iq1s_grid[qs[1] | (((uint16_t)qh[0] << 4) & 0x700)], iq1s_grid[qs[0] | (((uint16_t)qh[0] << 8) & 0x700)]
+            );
+            const __m256i q1b_2 = _mm256_set_epi64x(
+                    iq1s_grid[qs[7] | (((uint16_t)qh[3] << 4) & 0x700)], iq1s_grid[qs[6] | (((uint16_t)qh[3] << 8) & 0x700)],
+                    iq1s_grid[qs[5] | (((uint16_t)qh[2] << 4) & 0x700)], iq1s_grid[qs[4] | (((uint16_t)qh[2] << 8) & 0x700)]
+            );
+            const __m256i q8b_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+            const __m256i q8b_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32;
+
+            const __m256i dot1 = mul_add_epi8(q1b_1, q8b_1);
+            const __m256i dot2 = mul_add_epi8(q1b_2, q8b_2);
+
+            const __m256i delta1 = _mm256_set_epi64x(qh[1] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
+                                                     qh[1] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101,
+                                                     qh[0] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
+                                                     qh[0] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101);
+            const __m256i delta2 = _mm256_set_epi64x(qh[3] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
+                                                     qh[3] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101,
+                                                     qh[2] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
+                                                     qh[2] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101);
+
+            const __m256i dot3 = mul_add_epi8(delta1, q8b_1);
+            const __m256i dot4 = mul_add_epi8(delta2, q8b_2);
+
+            __m256i scale1 = MM256_SET_M128I(_mm_set1_epi16(sc[ib/2] >> 3), _mm_set1_epi16(sc[ib/2] >> 0));
+            __m256i scale2 = MM256_SET_M128I(_mm_set1_epi16(sc[ib/2] >> 9), _mm_set1_epi16(sc[ib/2] >> 6));
+
+            scale1 = _mm256_add_epi16(_mm256_slli_epi16(_mm256_and_si256(scale1, mask), 1), mone);
+            scale2 = _mm256_add_epi16(_mm256_slli_epi16(_mm256_and_si256(scale2, mask), 1), mone);
+            const __m256i p1 = _mm256_madd_epi16(dot1, scale1);
+            const __m256i p2 = _mm256_madd_epi16(dot2, scale2);
+            const __m256i p3 = _mm256_madd_epi16(dot3, scale1);
+            const __m256i p4 = _mm256_madd_epi16(dot4, scale2);
+
+            sumi1 = _mm256_add_epi32(sumi1, _mm256_add_epi32(p1, p2));
+            sumi2 = _mm256_add_epi32(sumi2, _mm256_add_epi32(p3, p4));
+
+            qs += 8; qh += 4;
+        }
+
+        const __m256 d = _mm256_set1_ps(y[i].d * GGML_FP16_TO_FP32(scale.f16));
+
+        accum1 = _mm256_fmadd_ps(d, _mm256_cvtepi32_ps(sumi1), accum1);
+        accum2 = _mm256_fmadd_ps(d, _mm256_cvtepi32_ps(sumi2), accum2);
+    }
+
+    *s = hsum_float_8(accum1) + IQ1M_DELTA * hsum_float_8(accum2);
+
+#elif defined __AVX__
+    const __m128i mask = _mm_set1_epi16(0x7);
+    const __m128i mone = _mm_set1_epi16(1);
+
+    __m256 accum1 = _mm256_setzero_ps();
+    __m256 accum2 = _mm256_setzero_ps();
+    for (int i = 0; i < nb; ++i) {
+
+        const int8_t   * q8 = y[i].qs;
+        const uint8_t  * qs = x[i].qs;
+        const uint8_t  * qh = x[i].qh;
+        const uint16_t * sc = (const uint16_t *)x[i].scales;
+
+        scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+
+        __m128i sumi1_0 = _mm_setzero_si128();
+        __m128i sumi1_1 = _mm_setzero_si128();
+        __m128i sumi2_0 = _mm_setzero_si128();
+        __m128i sumi2_1 = _mm_setzero_si128();
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+            const __m128i q1b_1_0 = _mm_set_epi64x(
+                    iq1s_grid[qs[1] | (((uint16_t)qh[0] << 4) & 0x700)], iq1s_grid[qs[0] | (((uint16_t)qh[0] << 8) & 0x700)]);
+            const __m128i q1b_1_1 = _mm_set_epi64x(
+                    iq1s_grid[qs[3] | (((uint16_t)qh[1] << 4) & 0x700)], iq1s_grid[qs[2] | (((uint16_t)qh[1] << 8) & 0x700)]);
+            const __m128i q1b_2_0 = _mm_set_epi64x(
+                    iq1s_grid[qs[5] | (((uint16_t)qh[2] << 4) & 0x700)], iq1s_grid[qs[4] | (((uint16_t)qh[2] << 8) & 0x700)]);
+            const __m128i q1b_2_1 = _mm_set_epi64x(
+                    iq1s_grid[qs[7] | (((uint16_t)qh[3] << 4) & 0x700)], iq1s_grid[qs[6] | (((uint16_t)qh[3] << 8) & 0x700)]);
+            const __m128i q8b_1_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8b_1_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8b_2_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8b_2_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+
+            const __m128i dot1_0 = mul_add_epi8_sse(q1b_1_0, q8b_1_0);
+            const __m128i dot1_1 = mul_add_epi8_sse(q1b_1_1, q8b_1_1);
+            const __m128i dot2_0 = mul_add_epi8_sse(q1b_2_0, q8b_2_0);
+            const __m128i dot2_1 = mul_add_epi8_sse(q1b_2_1, q8b_2_1);
+
+            const __m128i delta1_0 = _mm_set_epi64x(qh[0] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
+                                                     qh[0] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101);
+            const __m128i delta1_1 = _mm_set_epi64x(qh[1] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
+                                                     qh[1] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101);
+            const __m128i delta2_0 = _mm_set_epi64x(qh[2] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
+                                                     qh[2] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101);
+            const __m128i delta2_1 = _mm_set_epi64x(qh[3] & 0x80 ? 0xffffffffffffffff : 0x0101010101010101,
+                                                     qh[3] & 0x08 ? 0xffffffffffffffff : 0x0101010101010101);
+
+            const __m128i dot3_0 = mul_add_epi8_sse(delta1_0, q8b_1_0);
+            const __m128i dot3_1 = mul_add_epi8_sse(delta1_1, q8b_1_1);
+            const __m128i dot4_0 = mul_add_epi8_sse(delta2_0, q8b_2_0);
+            const __m128i dot4_1 = mul_add_epi8_sse(delta2_1, q8b_2_1);
+
+            __m128i scale1_0 = _mm_set1_epi16(sc[ib/2] >> 0);
+            __m128i scale1_1 = _mm_set1_epi16(sc[ib/2] >> 3);
+            __m128i scale2_0 = _mm_set1_epi16(sc[ib/2] >> 6);
+            __m128i scale2_1 = _mm_set1_epi16(sc[ib/2] >> 9);
+
+            scale1_0 = _mm_add_epi16(_mm_slli_epi16(_mm_and_si128(scale1_0, mask), 1), mone);
+            scale1_1 = _mm_add_epi16(_mm_slli_epi16(_mm_and_si128(scale1_1, mask), 1), mone);
+            scale2_0 = _mm_add_epi16(_mm_slli_epi16(_mm_and_si128(scale2_0, mask), 1), mone);
+            scale2_1 = _mm_add_epi16(_mm_slli_epi16(_mm_and_si128(scale2_1, mask), 1), mone);
+            const __m128i p1_0 = _mm_madd_epi16(dot1_0, scale1_0);
+            const __m128i p1_1 = _mm_madd_epi16(dot1_1, scale1_1);
+            const __m128i p2_0 = _mm_madd_epi16(dot2_0, scale2_0);
+            const __m128i p2_1 = _mm_madd_epi16(dot2_1, scale2_1);
+            const __m128i p3_0 = _mm_madd_epi16(dot3_0, scale1_0);
+            const __m128i p3_1 = _mm_madd_epi16(dot3_1, scale1_1);
+            const __m128i p4_0 = _mm_madd_epi16(dot4_0, scale2_0);
+            const __m128i p4_1 = _mm_madd_epi16(dot4_1, scale2_1);
+
+            sumi1_0 = _mm_add_epi32(sumi1_0, _mm_add_epi32(p1_0, p2_0));
+            sumi1_1 = _mm_add_epi32(sumi1_1, _mm_add_epi32(p1_1, p2_1));
+            sumi2_0 = _mm_add_epi32(sumi2_0, _mm_add_epi32(p3_0, p4_0));
+            sumi2_1 = _mm_add_epi32(sumi2_1, _mm_add_epi32(p3_1, p4_1));
+
+            qs += 8; qh += 4;
+        }
+
+        const __m256 d = _mm256_set1_ps(y[i].d * GGML_FP16_TO_FP32(scale.f16));
+
+        accum1 = _mm256_add_ps(_mm256_mul_ps(d, _mm256_cvtepi32_ps(MM256_SET_M128I(sumi1_1, sumi1_0))), accum1);
+        accum2 = _mm256_add_ps(_mm256_mul_ps(d, _mm256_cvtepi32_ps(MM256_SET_M128I(sumi2_1, sumi2_0))), accum2);
+    }
+
+    *s = hsum_float_8(accum1) + IQ1M_DELTA * hsum_float_8(accum2);
+
+#else
+
+    int sum1[2], sum2[2], delta[4];
+
+    float sumf = 0;
+    for (int i = 0; i < nb; i++) {
+
+        const int8_t   * q8 = y[i].qs;
+        const uint8_t  * qs = x[i].qs;
+        const uint8_t  * qh = x[i].qh;
+        const uint16_t * sc = (const uint16_t *)x[i].scales;
+
+        scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+
+        int sumi1 = 0, sumi2 = 0;
+        for (int ib = 0; ib < QK_K/32; ++ib) {
+            delta[0] = qh[0] & 0x08 ? -1 : 1;
+            delta[1] = qh[0] & 0x80 ? -1 : 1;
+            delta[2] = qh[1] & 0x08 ? -1 : 1;
+            delta[3] = qh[1] & 0x80 ? -1 : 1;
+            sum1[0] = sum1[1] = sum2[0] = sum2[1] = 0;
+            for (int l = 0; l < 4; ++l) {
+                const int8_t * grid = (const int8_t *)(iq1s_grid + (qs[l] | (((uint16_t)qh[l/2] << (8 - 4*(l%2))) & 0x700)));
+                int lsum1 = 0, lsum2 = 0;
+                for (int j = 0; j < 8; ++j) {
+                    lsum1 += q8[j] * grid[j];
+                    lsum2 += q8[j];
+                }
+                q8 += 8;
+                sum1[l/2] += lsum1;
+                sum2[l/2] += lsum2*delta[l];
+            }
+
+            const int ls1 = 2*((sc[ib/2] >> (6*(ib%2)+0)) & 0x7) + 1;
+            const int ls2 = 2*((sc[ib/2] >> (6*(ib%2)+3)) & 0x7) + 1;
+
+            sumi1 += sum1[0] * ls1 + sum1[1] * ls2;
+            sumi2 += sum2[0] * ls1 + sum2[1] * ls2;
+            qs += 4;
+            qh += 2;
+        }
+
+        sumf += GGML_FP16_TO_FP32(scale.f16) * y[i].d * (sumi1 + IQ1M_DELTA * sumi2);
+    }
+
+    *s = sumf;
+
+#endif
+}
+
+void ggml_vec_dot_iq4_nl_q8_0(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+    assert(n % QK4_NL == 0);
+    static_assert(QK4_NL == QK8_0, "QK4_NL and QK8_0 must be the same");
+
+    const block_iq4_nl * restrict x = vx;
+    const block_q8_0   * restrict y = vy;
+
+    const int nb = n / QK4_NL;
+
+#if defined __ARM_NEON
+    const int8x16_t values = vld1q_s8(kvalues_iq4nl);
+    const uint8x16_t m4b = vdupq_n_u8(0x0f);
+    uint8x16x2_t q4bits;
+    int8x16x4_t q4b;
+    int8x16x4_t q8b;
+    int32x4_t prod_1, prod_2;
+
+    float sumf = 0;
+
+    for (int ib = 0; ib < nb; ib += 2) {
+
+        q4bits.val[0] = vld1q_u8(x[ib+0].qs);
+        q4bits.val[1] = vld1q_u8(x[ib+1].qs);
+        q8b.val[0]    = vld1q_s8(y[ib+0].qs);
+        q8b.val[1]    = vld1q_s8(y[ib+0].qs + 16);
+        q8b.val[2]    = vld1q_s8(y[ib+1].qs);
+        q8b.val[3]    = vld1q_s8(y[ib+1].qs + 16);
+
+        q4b.val[0] = ggml_vqtbl1q_s8(values, vandq_u8  (q4bits.val[0], m4b));
+        q4b.val[1] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[0], 4));
+        q4b.val[2] = ggml_vqtbl1q_s8(values, vandq_u8  (q4bits.val[1], m4b));
+        q4b.val[3] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[1], 4));
+
+        prod_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[0], q8b.val[0]), q4b.val[1], q8b.val[1]);
+        prod_2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[2], q8b.val[2]), q4b.val[3], q8b.val[3]);
+
+        sumf +=
+            GGML_FP16_TO_FP32(x[ib+0].d) * GGML_FP16_TO_FP32(y[ib+0].d) * vaddvq_s32(prod_1) +
+            GGML_FP16_TO_FP32(x[ib+1].d) * GGML_FP16_TO_FP32(y[ib+1].d) * vaddvq_s32(prod_2);
+    }
+
+    *s = sumf;
+
+#elif defined __AVX2__
+
+    const __m128i values128 = _mm_loadu_si128((const __m128i*)kvalues_iq4nl);
+    const __m128i m4b  = _mm_set1_epi8(0x0f);
+    const __m256i mone = _mm256_set1_epi16(1);
+
+    __m256 accum1 = _mm256_setzero_ps();
+    __m256 accum2 = _mm256_setzero_ps();
+    for (int ib = 0; ib < nb; ib += 2) {
+        const __m128i q4bits_1 = _mm_loadu_si128((const __m128i*)x[0].qs);
+        const __m128i q4bits_2 = _mm_loadu_si128((const __m128i*)x[1].qs);
+        const __m256i q8b_1 = _mm256_loadu_si256((const __m256i *)y[0].qs);
+        const __m256i q8b_2 = _mm256_loadu_si256((const __m256i *)y[1].qs);
+        const __m256i q4b_1 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_1, 4), m4b)),
+                                              _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_1, m4b)));
+        const __m256i q4b_2 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_2, 4), m4b)),
+                                              _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_2, m4b)));
+        const __m256i p16_1 = mul_add_epi8(q4b_1, q8b_1);
+        const __m256i p16_2 = mul_add_epi8(q4b_2, q8b_2);
+        const __m256i p_1 = _mm256_madd_epi16(p16_1, mone);
+        const __m256i p_2 = _mm256_madd_epi16(p16_2, mone);
+        accum1 = _mm256_fmadd_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(y[0].d)*GGML_FP16_TO_FP32(x[0].d)),
+                _mm256_cvtepi32_ps(p_1), accum1);
+        accum2 = _mm256_fmadd_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(y[1].d)*GGML_FP16_TO_FP32(x[1].d)),
+                _mm256_cvtepi32_ps(p_2), accum2);
+
+        y += 2;
+        x += 2;
+    }
+
+    *s = hsum_float_8(_mm256_add_ps(accum1, accum2));
+
+#elif defined __AVX__
+    const __m128i values128 = _mm_loadu_si128((const __m128i*)kvalues_iq4nl);
+    const __m128i m4b  = _mm_set1_epi8(0x0f);
+    const __m128i mone = _mm_set1_epi16(1);
+
+    __m256 accum1 = _mm256_setzero_ps();
+    __m256 accum2 = _mm256_setzero_ps();
+    for (int ib = 0; ib < nb; ib += 2) {
+        const __m128i q4bits_1 = _mm_loadu_si128((const __m128i *)x[0].qs);
+        const __m128i q4bits_2 = _mm_loadu_si128((const __m128i *)x[1].qs);
+        const __m128i q8b_1_0 = _mm_loadu_si128((const __m128i *)y[0].qs);
+        const __m128i q8b_1_1 = _mm_loadu_si128((const __m128i *)y[0].qs + 1);
+        const __m128i q8b_2_0 = _mm_loadu_si128((const __m128i *)y[1].qs);
+        const __m128i q8b_2_1 = _mm_loadu_si128((const __m128i *)y[1].qs + 1);
+
+        const __m128i q4b_1_0 = _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_1, m4b));
+        const __m128i q4b_1_1 = _mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_1, 4), m4b));
+        const __m128i q4b_2_0 = _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_2, m4b));
+        const __m128i q4b_2_1 = _mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_2, 4), m4b));
+        const __m128i p16_1_0 = mul_add_epi8_sse(q4b_1_0, q8b_1_0);
+        const __m128i p16_1_1 = mul_add_epi8_sse(q4b_1_1, q8b_1_1);
+        const __m128i p16_2_0 = mul_add_epi8_sse(q4b_2_0, q8b_2_0);
+        const __m128i p16_2_1 = mul_add_epi8_sse(q4b_2_1, q8b_2_1);
+        const __m128i p_1_0 = _mm_madd_epi16(p16_1_0, mone);
+        const __m128i p_1_1 = _mm_madd_epi16(p16_1_1, mone);
+        const __m128i p_2_0 = _mm_madd_epi16(p16_2_0, mone);
+        const __m128i p_2_1 = _mm_madd_epi16(p16_2_1, mone);
+        accum1 = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(y[0].d)*GGML_FP16_TO_FP32(x[0].d)),
+                _mm256_cvtepi32_ps(MM256_SET_M128I(p_1_1, p_1_0))), accum1);
+        accum2 = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(y[1].d)*GGML_FP16_TO_FP32(x[1].d)),
+                _mm256_cvtepi32_ps(MM256_SET_M128I(p_2_1, p_2_0))), accum2);
+
+        y += 2;
+        x += 2;
+    }
+
+    *s = hsum_float_8(_mm256_add_ps(accum1, accum2));
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0xF);
+    const vector signed int v0 = vec_splats((int32_t)0);
+    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+
+    const vector signed char values = vec_xl( 0, kvalues_iq4nl);
+
+#pragma GCC unroll 4
+    for (int ib = 0; ib < nb; ++ib) {
+        __builtin_prefetch(x[ib].qs, 0, 1);
+        __builtin_prefetch(y[ib].qs, 0, 1);
+
+
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[ib].d));
+        vector float vyd = vec_splats(GGML_FP16_TO_FP32(y[ib].d));
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed char qxs = (vector signed char)vec_xl( 0, x[ib].qs);
+        vector signed char q4x0 = vec_and(qxs, lowMask);
+        vector signed char q4x1 = vec_sr(qxs, v4);
+
+        q4x0 = vec_perm(values, values, (vector unsigned char)q4x0);
+        q4x1 = vec_perm(values, values, (vector unsigned char)q4x1);
+
+        vector signed char q8y0 = vec_xl( 0, y[ib].qs);
+        vector signed char q8y1 = vec_xl(16, y[ib].qs);
+
+        vector signed short qv0 = vec_add(vec_mule(q4x0, q8y0), vec_mulo(q4x0, q8y0));
+        vector signed short qv1 = vec_add(vec_mule(q4x1, q8y1), vec_mulo(q4x1, q8y1));
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+
+        vsumi0 = vec_sum4s(qv0, vsumi0);
+        vsumi1 = vec_sum4s(qv1, vsumi1);
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined (__loongarch_asx)
+
+    const __m128i values128 = __lsx_vld((const __m128i*)kvalues_iq4nl, 0);
+    const __m128i m4b  = __lsx_vreplgr2vr_b(0x0f);
+    const __m256i mone = __lasx_xvreplgr2vr_h(1);
+
+    __m256 accum1 = (__m256)__lasx_xvldi(0);
+    __m256 accum2 = (__m256)__lasx_xvldi(0);
+    for (int ib = 0; ib < nb; ib += 2) {
+        const __m128i q4bits_1 = __lsx_vld((const __m128i*)x[0].qs, 0);
+        const __m128i q4bits_2 = __lsx_vld((const __m128i*)x[1].qs, 0);
+        const __m256i q8b_1 = __lasx_xvld((const __m256i *)y[0].qs, 0);
+        const __m256i q8b_2 = __lasx_xvld((const __m256i *)y[1].qs, 0);
+        const __m256i q4b_1 = lasx_insertf128(lsx_shuffle_b(values128, __lsx_vand_v(__lsx_vsrli_h(q4bits_1, 4), m4b)),
+                                              lsx_shuffle_b(values128, __lsx_vand_v(q4bits_1, m4b)));
+        const __m256i q4b_2 = lasx_insertf128(lsx_shuffle_b(values128, __lsx_vand_v(__lsx_vsrli_h(q4bits_2, 4), m4b)),
+                                              lsx_shuffle_b(values128, __lsx_vand_v(q4bits_2, m4b)));
+        const __m256i p16_1 = mul_add_epi8(q4b_1, q8b_1);
+        const __m256i p16_2 = mul_add_epi8(q4b_2, q8b_2);
+        const __m256i p_1 = lasx_madd_h(p16_1, mone);
+        const __m256i p_2 = lasx_madd_h(p16_2, mone);
+        accum1 = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(y[0].d)*GGML_FP16_TO_FP32(x[0].d)),
+                __lasx_xvffint_s_w(p_1), accum1);
+        accum2 = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(y[1].d)*GGML_FP16_TO_FP32(x[1].d)),
+                __lasx_xvffint_s_w(p_2), accum2);
+
+        y += 2;
+        x += 2;
+    }
+
+    *s = hsum_float_8(__lasx_xvfadd_s(accum1, accum2));
+
+#else
+    float sumf = 0;
+    for (int ib = 0; ib < nb; ++ib) {
+        const float d = GGML_FP16_TO_FP32(y[ib].d)*GGML_FP16_TO_FP32(x[ib].d);
+        int sumi1 = 0, sumi2 = 0;
+        for (int j = 0; j < QK4_NL/2; ++j) {
+            sumi1 += y[ib].qs[j+       0] * kvalues_iq4nl[x[ib].qs[j] & 0xf];
+            sumi2 += y[ib].qs[j+QK4_NL/2] * kvalues_iq4nl[x[ib].qs[j] >>  4];
+        }
+        sumf += d * (sumi1 + sumi2);
+    }
+    *s = sumf;
+#endif
+}
+
+void ggml_vec_dot_iq4_xs_q8_K(int n, float * restrict s, size_t bs, const void * restrict vx, size_t bx, const void * restrict vy, size_t by, int nrc) {
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+    assert(n % QK_K == 0);
+
+    const block_iq4_xs * restrict x = vx;
+    const block_q8_K   * restrict y = vy;
+
+    const int nb = n / QK_K;
+
+#if defined __ARM_NEON
+    const int8x16_t values = vld1q_s8(kvalues_iq4nl);
+    const uint8x16_t m4b = vdupq_n_u8(0x0f);
+    ggml_uint8x16x2_t q4bits;
+    ggml_int8x16x4_t q4b;
+    ggml_int8x16x4_t q8b;
+    int32x4_t prod_1, prod_2;
+
+    float sumf = 0;
+
+    for (int ibl = 0; ibl < nb; ++ibl) {
+
+        const int8_t  * q8 = y[ibl].qs;
+        const uint8_t * q4 = x[ibl].qs;
+        uint16_t h = x[ibl].scales_h;
+
+        int sumi1 = 0, sumi2 = 0;
+        for (int ib = 0; ib < QK_K/64; ++ib) {
+
+            q4bits = ggml_vld1q_u8_x2(q4); q4 += 32;
+            q8b    = ggml_vld1q_s8_x4(q8); q8 += 64;
+
+            q4b.val[0] = ggml_vqtbl1q_s8(values, vandq_u8  (q4bits.val[0], m4b));
+            q4b.val[1] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[0], 4));
+            q4b.val[2] = ggml_vqtbl1q_s8(values, vandq_u8  (q4bits.val[1], m4b));
+            q4b.val[3] = ggml_vqtbl1q_s8(values, vshrq_n_u8(q4bits.val[1], 4));
+
+            prod_1 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[0], q8b.val[0]), q4b.val[1], q8b.val[1]);
+            prod_2 = ggml_vdotq_s32(ggml_vdotq_s32(vdupq_n_s32(0), q4b.val[2], q8b.val[2]), q4b.val[3], q8b.val[3]);
+
+            int ls1 = ((x[ibl].scales_l[ib] & 0xf) | ((h << 4) & 0x30)) - 32;
+            int ls2 = ((x[ibl].scales_l[ib] >>  4) | ((h << 2) & 0x30)) - 32;
+            h >>= 4;
+            sumi1 += vaddvq_s32(prod_1) * ls1;
+            sumi2 += vaddvq_s32(prod_2) * ls2;
+
+        }
+
+        sumf += GGML_FP16_TO_FP32(x[ibl].d) * y[ibl].d * (sumi1 + sumi2);
+    }
+
+    *s = sumf;
+
+#elif defined __AVX2__
+
+    const __m128i values128 = _mm_loadu_si128((const __m128i*)kvalues_iq4nl);
+    const __m128i m4b  = _mm_set1_epi8(0x0f);
+
+    __m256 accum = _mm256_setzero_ps();
+    for (int ibl = 0; ibl < nb; ++ibl) {
+        const uint8_t * qs = x[ibl].qs;
+        const int8_t  * q8 = y[ibl].qs;
+        uint16_t sh = x[ibl].scales_h;
+        __m256i sumi1 = _mm256_setzero_si256();
+        __m256i sumi2 = _mm256_setzero_si256();
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+            const __m128i q4bits_1 = _mm_loadu_si128((const __m128i*)qs);  qs += 16;
+            const __m128i q4bits_2 = _mm_loadu_si128((const __m128i*)qs);  qs += 16;
+            const __m256i q8b_1 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q8b_2 = _mm256_loadu_si256((const __m256i *)q8); q8 += 32;
+            const __m256i q4b_1 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_1, 4), m4b)),
+                                                  _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_1, m4b)));
+            const __m256i q4b_2 = MM256_SET_M128I(_mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_2, 4), m4b)),
+                                                  _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_2, m4b)));
+            const __m256i p16_1 = mul_add_epi8(q4b_1, q8b_1);
+            const __m256i p16_2 = mul_add_epi8(q4b_2, q8b_2);
+            const int16_t ls1 = ((x[ibl].scales_l[ib/2] & 0xf) | ((sh << 4) & 0x30)) - 32;
+            const int16_t ls2 = ((x[ibl].scales_l[ib/2] >>  4) | ((sh << 2) & 0x30)) - 32;
+            sh >>= 4;
+            const __m256i p_1 = _mm256_madd_epi16(p16_1, _mm256_set1_epi16(ls1));
+            const __m256i p_2 = _mm256_madd_epi16(p16_2, _mm256_set1_epi16(ls2));
+            sumi1 = _mm256_add_epi32(p_1, sumi1);
+            sumi2 = _mm256_add_epi32(p_2, sumi2);
+        }
+        accum = _mm256_fmadd_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(x[ibl].d)*y[ibl].d),
+                _mm256_cvtepi32_ps(_mm256_add_epi32(sumi1, sumi2)), accum);
+    }
+
+    *s = hsum_float_8(accum);
+
+#elif defined __AVX__
+    const __m128i values128 = _mm_loadu_si128((const __m128i*)kvalues_iq4nl);
+    const __m128i m4b  = _mm_set1_epi8(0x0f);
+
+    __m256 accum = _mm256_setzero_ps();
+    for (int ibl = 0; ibl < nb; ++ibl) {
+        const uint8_t * qs = x[ibl].qs;
+        const int8_t  * q8 = y[ibl].qs;
+        uint16_t sh = x[ibl].scales_h;
+        __m128i sumi1_0 = _mm_setzero_si128();
+        __m128i sumi1_1 = _mm_setzero_si128();
+        __m128i sumi2_0 = _mm_setzero_si128();
+        __m128i sumi2_1 = _mm_setzero_si128();
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+            const __m128i q4bits_1 = _mm_loadu_si128((const __m128i *)qs); qs += 16;
+            const __m128i q4bits_2 = _mm_loadu_si128((const __m128i *)qs); qs += 16;
+            const __m128i q8b_1_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8b_1_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8b_2_0 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q8b_2_1 = _mm_loadu_si128((const __m128i *)q8); q8 += 16;
+            const __m128i q4b_1_0 = _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_1, m4b));
+            const __m128i q4b_1_1 = _mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_1, 4), m4b));
+            const __m128i q4b_2_0 = _mm_shuffle_epi8(values128, _mm_and_si128(q4bits_2, m4b));
+            const __m128i q4b_2_1 = _mm_shuffle_epi8(values128, _mm_and_si128(_mm_srli_epi16(q4bits_2, 4), m4b));
+            const __m128i p16_1_0 = mul_add_epi8_sse(q4b_1_0, q8b_1_0);
+            const __m128i p16_1_1 = mul_add_epi8_sse(q4b_1_1, q8b_1_1);
+            const __m128i p16_2_0 = mul_add_epi8_sse(q4b_2_0, q8b_2_0);
+            const __m128i p16_2_1 = mul_add_epi8_sse(q4b_2_1, q8b_2_1);
+            const int16_t ls1 = ((x[ibl].scales_l[ib/2] & 0xf) | ((sh << 4) & 0x30)) - 32;
+            const int16_t ls2 = ((x[ibl].scales_l[ib/2] >>  4) | ((sh << 2) & 0x30)) - 32;
+            sh >>= 4;
+            const __m128i p_1_0 = _mm_madd_epi16(p16_1_0, _mm_set1_epi16(ls1));
+            const __m128i p_1_1 = _mm_madd_epi16(p16_1_1, _mm_set1_epi16(ls1));
+            const __m128i p_2_0 = _mm_madd_epi16(p16_2_0, _mm_set1_epi16(ls2));
+            const __m128i p_2_1 = _mm_madd_epi16(p16_2_1, _mm_set1_epi16(ls2));
+            sumi1_0 = _mm_add_epi32(p_1_0, sumi1_0);
+            sumi1_1 = _mm_add_epi32(p_1_1, sumi1_1);
+            sumi2_0 = _mm_add_epi32(p_2_0, sumi2_0);
+            sumi2_1 = _mm_add_epi32(p_2_1, sumi2_1);
+        }
+        __m128i sumi12_0 = _mm_add_epi32(sumi1_0, sumi2_0);
+        __m128i sumi12_1 = _mm_add_epi32(sumi1_1, sumi2_1);
+        accum = _mm256_add_ps(_mm256_mul_ps(_mm256_set1_ps(GGML_FP16_TO_FP32(x[ibl].d)*y[ibl].d),
+                _mm256_cvtepi32_ps(MM256_SET_M128I(sumi12_1, sumi12_0))), accum);
+    }
+
+    *s = hsum_float_8(accum);
+
+#elif defined(__POWER9_VECTOR__)
+    const vector signed char lowMask = vec_splats((signed char)0xF);
+    const vector int v0 = vec_splats((int32_t)0);
+    const vector unsigned char v4 = vec_splats((unsigned char)0x4);
+
+    vector float vsumf0 = vec_splats(0.0f);
+    vector float vsumf1 = vec_splats(0.0f);
+    vector float vsumf2 = vec_splats(0.0f);
+    vector float vsumf3 = vec_splats(0.0f);
+
+    const vector signed char values = vec_xl( 0, kvalues_iq4nl);
+
+    for (int ibl = 0; ibl < nb; ++ibl) {
+
+        vector float vxd = vec_splats(GGML_FP16_TO_FP32(x[ibl].d));
+        vector float vyd = vec_splats(y[ibl].d);
+        vector float vd = vec_mul(vxd, vyd);
+
+        vector signed int vsumi0 = v0;
+        vector signed int vsumi1 = v0;
+        vector signed int vsumi2 = v0;
+        vector signed int vsumi3 = v0;
+
+        uint16_t h = x[ibl].scales_h;
+
+        const uint8_t * restrict q4 = x[ibl].qs;
+        const uint8_t * restrict sc = x[ibl].scales_l;
+        const int8_t  * restrict q8 = y[ibl].qs;
+
+        for (int ib = 0; ib < QK_K/64; ib ++ ) {
+            __builtin_prefetch(q4, 0, 1);
+            __builtin_prefetch(q8, 0, 1);
+
+            vector signed char qxs0 = (vector signed char)vec_xl( 0, q4);
+            vector signed char qxs1 = (vector signed char)vec_xl(16, q4);
+            q4 += 32;
+
+            vector signed char q4x00 = (vector signed char)vec_and(qxs0, lowMask);
+            vector signed char q4x01 = (vector signed char)vec_sr(qxs0, v4);
+            vector signed char q4x10 = (vector signed char)vec_and(qxs1, lowMask);
+            vector signed char q4x11 = (vector signed char)vec_sr(qxs1, v4);
+
+            q4x00 = vec_perm(values, values, (vector unsigned char)q4x00);
+            q4x01 = vec_perm(values, values, (vector unsigned char)q4x01);
+            q4x10 = vec_perm(values, values, (vector unsigned char)q4x10);
+            q4x11 = vec_perm(values, values, (vector unsigned char)q4x11);
+
+            vector signed char q8y0 = vec_xl( 0, q8);
+            vector signed char q8y1 = vec_xl(16, q8);
+            vector signed char q8y2 = vec_xl(32, q8);
+            vector signed char q8y3 = vec_xl(48, q8);
+            q8 += 64;
+
+            vector signed short qv0 = vec_add(vec_mule(q4x00, q8y0), vec_mulo(q4x00, q8y0));
+            vector signed short qv1 = vec_add(vec_mule(q4x01, q8y1), vec_mulo(q4x01, q8y1));
+            vector signed short qv2 = vec_add(vec_mule(q4x10, q8y2), vec_mulo(q4x10, q8y2));
+            vector signed short qv3 = vec_add(vec_mule(q4x11, q8y3), vec_mulo(q4x11, q8y3));
+
+            const uint16_t ls0 = (uint16_t)(((sc[0] & 0xf) | ((h << 4) & 0x30)) - 32);
+            const uint16_t ls1 = (uint16_t)(((sc[0] >>  4) | ((h << 2) & 0x30)) - 32);
+            h >>= 4;
+            sc ++;
+
+            vector signed short vscales01 = vec_splats((int16_t)ls0);
+            vector signed short vscales23 = vec_splats((int16_t)ls1);
+
+            vsumi0 = vec_msum(qv0, vscales01, vsumi0);
+            vsumi1 = vec_msum(qv1, vscales01, vsumi1);
+            vsumi2 = vec_msum(qv2, vscales23, vsumi2);
+            vsumi3 = vec_msum(qv3, vscales23, vsumi3);
+        }
+
+        vsumf0 = vec_madd(vec_ctf(vsumi0, 0), vd, vsumf0);
+        vsumf1 = vec_madd(vec_ctf(vsumi1, 0), vd, vsumf1);
+        vsumf2 = vec_madd(vec_ctf(vsumi2, 0), vd, vsumf2);
+        vsumf3 = vec_madd(vec_ctf(vsumi3, 0), vd, vsumf3);
+    }
+
+    vsumf0 = vec_add(vsumf0, vsumf2);
+    vsumf1 = vec_add(vsumf1, vsumf3);
+
+    vsumf0 = vec_add(vsumf0, vsumf1);
+
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 4));
+    vsumf0 = vec_add(vsumf0, vec_sld(vsumf0, vsumf0, 8));
+
+    *s = vec_extract(vsumf0, 0);
+
+#elif defined(__loongarch_asx)
+
+    const __m128i values128 = __lsx_vld((const __m128i*)kvalues_iq4nl, 0);
+    const __m128i m4b  = __lsx_vreplgr2vr_b(0x0f);
+
+    __m256 accum = (__m256)__lasx_xvldi(0);
+    __m256i tmp1;
+    __m128i tmp0, tmp2, tmp3, tmp4, mask_8f, mask;
+
+    mask_8f = __lsx_vreplgr2vr_b(0x8f);
+    for (int ibl = 0; ibl < nb; ++ibl) {
+        const uint8_t * qs = x[ibl].qs;
+        const int8_t  * q8 = y[ibl].qs;
+        uint16_t sh = x[ibl].scales_h;
+        __m256i sumi1 = __lasx_xvldi(0);
+        __m256i sumi2 = __lasx_xvldi(0);
+        __m128i zero = __lsx_vldi(0);
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+            const __m128i q4bits_1 = __lsx_vld((const __m128i*)qs, 0);  qs += 16;
+            const __m128i q4bits_2 = __lsx_vld((const __m128i*)qs, 0);  qs += 16;
+            const __m256i q8b_1 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            const __m256i q8b_2 = __lasx_xvld((const __m256i *)q8, 0); q8 += 32;
+            tmp2 = __lsx_vand_v(__lsx_vand_v(__lsx_vsrli_h(q4bits_1, 4), m4b), mask_8f);
+            tmp0 = __lsx_vori_b(tmp2, 0x10);
+            mask = __lsx_vsle_b(zero, tmp2);
+            tmp3 = __lsx_vand_v(tmp0, mask);
+            tmp3 = __lsx_vshuf_b(values128, zero, tmp3);
+
+            tmp2 = __lsx_vand_v(__lsx_vand_v(q4bits_1, m4b), mask_8f);
+            tmp0 = __lsx_vori_b(tmp2, 0x10);
+            mask = __lsx_vsle_b(zero, tmp2);
+            tmp4 = __lsx_vand_v(tmp0, mask);
+            tmp4 = __lsx_vshuf_b(values128, zero, tmp4);
+
+            const __m256i q4b_1 = lasx_insertf128(tmp3, tmp4);
+
+            tmp2 = __lsx_vand_v(__lsx_vand_v(__lsx_vsrli_h(q4bits_2, 4), m4b), mask_8f);
+            tmp0 = __lsx_vori_b(tmp2, 0x10);
+            mask = __lsx_vsle_b(zero, tmp2);
+            tmp3 = __lsx_vand_v(tmp0, mask);
+            tmp3 = __lsx_vshuf_b(values128, zero, tmp3);
+
+            tmp2 = __lsx_vand_v(__lsx_vand_v(q4bits_2, m4b), mask_8f);
+            tmp0 = __lsx_vori_b(tmp2, 0x10);
+            mask = __lsx_vsle_b(zero, tmp2);
+            tmp4 = __lsx_vand_v(tmp0, mask);
+            tmp4 = __lsx_vshuf_b(values128, zero, tmp4);
+
+            const __m256i q4b_2 = lasx_insertf128(tmp3, tmp4);
+
+            const __m256i p16_1 = mul_add_epi8(q4b_1, q8b_1);
+            const __m256i p16_2 = mul_add_epi8(q4b_2, q8b_2);
+            const int16_t ls1 = ((x[ibl].scales_l[ib/2] & 0xf) | ((sh << 4) & 0x30)) - 32;
+            const int16_t ls2 = ((x[ibl].scales_l[ib/2] >>  4) | ((sh << 2) & 0x30)) - 32;
+            sh >>= 4;
+            __m256i tmp5, tmp6;
+            tmp1 = __lasx_xvreplgr2vr_h(ls1);
+            tmp5 = __lasx_xvmulwev_w_h(p16_1, tmp1);
+            tmp6 = __lasx_xvmulwod_w_h(p16_1, tmp1);
+            const __m256i p_1 = __lasx_xvadd_w(tmp5, tmp6);
+            tmp1 = __lasx_xvreplgr2vr_h(ls2);
+            tmp5 = __lasx_xvmulwev_w_h(p16_2, tmp1);
+            tmp6 = __lasx_xvmulwod_w_h(p16_2, tmp1);
+            const __m256i p_2 = __lasx_xvadd_w(tmp5, tmp6);
+            sumi1 = __lasx_xvadd_w(p_1, sumi1);
+            sumi2 = __lasx_xvadd_w(p_2, sumi2);
+        }
+        accum = __lasx_xvfmadd_s(__lasx_xvreplfr2vr_s(GGML_FP16_TO_FP32(x[ibl].d)*y[ibl].d),
+                __lasx_xvffint_s_w(__lasx_xvadd_w(sumi1, sumi2)), accum);
+    }
+
+    *s = hsum_float_8(accum);
+
+#else
+    float sumf = 0;
+    for (int ibl = 0; ibl < nb; ++ibl) {
+        const float d4d8 = GGML_FP16_TO_FP32(x[ibl].d) * y[ibl].d;
+        uint16_t h = x[ibl].scales_h;
+        const uint8_t * qs = x[ibl].qs;
+        const int8_t  * q8 = y[ibl].qs;
+        for (int ib = 0; ib < QK_K/32; ib += 2) {
+            const uint8_t ls1 = (x[ibl].scales_l[ib/2] & 0xf) | ((h << 4) & 0x30);
+            const uint8_t ls2 = (x[ibl].scales_l[ib/2] >>  4) | ((h << 2) & 0x30);
+            h >>= 4;
+            const float d1 = d4d8*(ls1 - 32);
+            const float d2 = d4d8*(ls2 - 32);
+            int sumi1 = 0, sumi2 = 0;
+            for (int j = 0; j < 16; ++j) {
+                sumi1 += q8[j+ 0] * kvalues_iq4nl[qs[j] & 0xf];
+                sumi2 += q8[j+16] * kvalues_iq4nl[qs[j] >>  4];
+            }
+            sumf += d1 * (sumi1 + sumi2);
+            qs += 16;
+            q8 += 32;
+            sumi1 = sumi2 = 0;
+            for (int j = 0; j < 16; ++j) {
+                sumi1 += q8[j+ 0] * kvalues_iq4nl[qs[j] & 0xf];
+                sumi2 += q8[j+16] * kvalues_iq4nl[qs[j] >>  4];
+            }
+            sumf += d2 * (sumi1 + sumi2);
+            qs += 16;
+            q8 += 32;
+        }
+    }
+    *s = sumf;
+#endif
+}
+
+// ================================ IQ2 quantization =============================================
+
+typedef struct {
+    uint64_t * grid;
+    int      * map;
+    uint16_t * neighbours;
+} iq2_entry_t;
+
+static iq2_entry_t iq2_data[4] = {
+    {NULL, NULL, NULL},
+    {NULL, NULL, NULL},
+    {NULL, NULL, NULL},
+    {NULL, NULL, NULL},
+};
+
+static inline int iq2_data_index(enum ggml_type type) {
+    GGML_ASSERT(type == GGML_TYPE_IQ2_XXS || type == GGML_TYPE_IQ2_XS || type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M || type == GGML_TYPE_IQ2_S);
+    return type == GGML_TYPE_IQ2_XXS ? 0 :
+           type == GGML_TYPE_IQ2_XS  ? 1 :
+           type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? 2 : 3;
+}
+
+static inline int iq2_grid_size(enum ggml_type type) {
+    GGML_ASSERT(type == GGML_TYPE_IQ2_XXS || type == GGML_TYPE_IQ2_XS || type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M || type == GGML_TYPE_IQ2_S);
+    return type == GGML_TYPE_IQ2_XXS ? 256 :
+           type == GGML_TYPE_IQ2_XS  ? 512 :
+           type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? NGRID_IQ1S : 1024;
+}
+
+static int iq2_compare_func(const void * left, const void * right) {
+    const int * l = (const int *)left;
+    const int * r = (const int *)right;
+    return l[0] < r[0] ? -1 : l[0] > r[0] ? 1 : l[1] < r[1] ? -1 : l[1] > r[1] ? 1 : 0;
+}
+
+void iq2xs_init_impl(enum ggml_type type) {
+    const int gindex = iq2_data_index(type);
+    const int grid_size = iq2_grid_size(type);
+    if (iq2_data[gindex].grid) {
+        return;
+    }
+    static const uint16_t kgrid_2bit_256[256] = {
+            0,     2,     5,     8,    10,    17,    20,    32,    34,    40,    42,    65,    68,    80,    88,    97,
+          100,   128,   130,   138,   162,   257,   260,   272,   277,   320,   388,   408,   512,   514,   546,   642,
+         1025,  1028,  1040,  1057,  1060,  1088,  1090,  1096,  1120,  1153,  1156,  1168,  1188,  1280,  1282,  1288,
+         1312,  1350,  1385,  1408,  1425,  1545,  1552,  1600,  1668,  1700,  2048,  2053,  2056,  2068,  2088,  2113,
+         2116,  2128,  2130,  2184,  2308,  2368,  2562,  2580,  4097,  4100,  4112,  4129,  4160,  4192,  4228,  4240,
+         4245,  4352,  4360,  4384,  4432,  4442,  4480,  4644,  4677,  5120,  5128,  5152,  5157,  5193,  5248,  5400,
+         5474,  5632,  5654,  6145,  6148,  6160,  6208,  6273,  6400,  6405,  6560,  6737,  8192,  8194,  8202,  8260,
+         8289,  8320,  8322,  8489,  8520,  8704,  8706,  9217,  9220,  9232,  9280,  9302,  9472,  9537,  9572,  9872,
+        10248, 10272, 10388, 10820, 16385, 16388, 16400, 16408, 16417, 16420, 16448, 16456, 16470, 16480, 16513, 16516,
+        16528, 16640, 16672, 16737, 16768, 16773, 16897, 16912, 16968, 16982, 17000, 17408, 17416, 17440, 17536, 17561,
+        17682, 17700, 17920, 18433, 18436, 18448, 18496, 18501, 18688, 18776, 18785, 18818, 19013, 19088, 20480, 20488,
+        20497, 20505, 20512, 20608, 20616, 20740, 20802, 20900, 21137, 21648, 21650, 21770, 22017, 22100, 22528, 22545,
+        22553, 22628, 22848, 23048, 24580, 24592, 24640, 24680, 24832, 24917, 25112, 25184, 25600, 25605, 25872, 25874,
+        25988, 26690, 32768, 32770, 32778, 32833, 32898, 33028, 33048, 33088, 33297, 33793, 33796, 33808, 33813, 33856,
+        33888, 34048, 34118, 34196, 34313, 34368, 34400, 34818, 35076, 35345, 36868, 36880, 36900, 36928, 37025, 37142,
+        37248, 37445, 37888, 37922, 37956, 38225, 39041, 39200, 40962, 41040, 41093, 41225, 41472, 42008, 43088, 43268,
+    };
+    static const uint16_t kgrid_2bit_512[512] = {
+            0,     2,     5,     8,    10,    17,    20,    22,    25,    32,    34,    37,    40,    65,    68,    70,
+           73,    80,    82,    85,    88,    97,   100,   128,   130,   133,   136,   145,   148,   153,   160,   257,
+          260,   262,   265,   272,   274,   277,   280,   282,   289,   292,   320,   322,   325,   328,   337,   340,
+          352,   360,   385,   388,   400,   512,   514,   517,   520,   529,   532,   544,   577,   580,   592,   597,
+          640,   650,  1025,  1028,  1030,  1033,  1040,  1042,  1045,  1048,  1057,  1060,  1088,  1090,  1093,  1096,
+         1105,  1108,  1110,  1120,  1153,  1156,  1168,  1280,  1282,  1285,  1288,  1297,  1300,  1312,  1345,  1348,
+         1360,  1377,  1408,  1537,  1540,  1552,  1574,  1600,  1602,  1668,  2048,  2050,  2053,  2056,  2058,  2065,
+         2068,  2080,  2085,  2113,  2116,  2128,  2136,  2176,  2208,  2218,  2305,  2308,  2320,  2368,  2433,  2441,
+         2560,  2592,  2600,  2710,  2720,  4097,  4100,  4102,  4105,  4112,  4114,  4117,  4120,  4129,  4132,  4160,
+         4162,  4165,  4168,  4177,  4180,  4192,  4202,  4225,  4228,  4240,  4352,  4354,  4357,  4360,  4369,  4372,
+         4384,  4417,  4420,  4432,  4480,  4500,  4502,  4609,  4612,  4614,  4624,  4672,  4704,  5120,  5122,  5125,
+         5128,  5137,  5140,  5152,  5185,  5188,  5193,  5200,  5220,  5248,  5377,  5380,  5392,  5440,  5632,  5652,
+         5705,  6145,  6148,  6160,  6162,  6208,  6228,  6278,  6400,  6405,  6502,  6737,  6825,  8192,  8194,  8197,
+         8200,  8202,  8209,  8212,  8224,  8257,  8260,  8272,  8320,  8352,  8449,  8452,  8464,  8512,  8520,  8549,
+         8704,  8738,  8832,  8872,  9217,  9220,  9232,  9257,  9280,  9472,  9537,  9554,  9625,  9729,  9754,  9894,
+        10240, 10248, 10250, 10272, 10325, 10376, 10402, 10600, 10640, 10760, 10784, 10882, 10888, 10890, 16385, 16388,
+        16390, 16393, 16400, 16402, 16405, 16408, 16417, 16420, 16448, 16450, 16453, 16456, 16458, 16465, 16468, 16480,
+        16485, 16513, 16516, 16528, 16640, 16642, 16645, 16648, 16657, 16660, 16672, 16705, 16708, 16720, 16768, 16773,
+        16802, 16897, 16900, 16912, 16914, 16937, 16960, 17408, 17410, 17413, 17416, 17425, 17428, 17433, 17440, 17473,
+        17476, 17488, 17536, 17556, 17665, 17668, 17680, 17700, 17728, 17818, 17920, 17930, 17988, 18000, 18433, 18436,
+        18448, 18496, 18501, 18516, 18530, 18688, 18705, 18756, 18768, 18793, 18948, 20480, 20482, 20485, 20488, 20497,
+        20500, 20512, 20520, 20545, 20548, 20560, 20608, 20737, 20740, 20752, 20757, 20800, 20802, 20992, 21060, 21162,
+        21505, 21508, 21520, 21537, 21568, 21600, 21633, 21665, 21760, 21768, 21888, 21896, 22049, 22120, 22177, 22528,
+        22548, 22593, 22608, 22681, 22810, 22848, 22850, 23173, 24577, 24580, 24592, 24640, 24660, 24674, 24710, 24745,
+        24832, 25124, 25162, 25234, 25600, 25622, 25872, 25920, 25925, 26020, 26625, 26730, 26917, 27142, 27220, 27234,
+        32768, 32770, 32773, 32776, 32785, 32788, 32800, 32810, 32833, 32836, 32848, 32896, 32898, 32936, 32938, 33025,
+        33028, 33030, 33040, 33088, 33105, 33113, 33280, 33312, 33408, 33410, 33440, 33448, 33793, 33796, 33808, 33810,
+        33813, 33856, 33888, 33929, 34048, 34116, 34213, 34328, 34410, 34816, 34824, 34853, 34906, 34944, 34946, 34984,
+        35078, 35362, 35456, 35464, 35478, 35496, 36865, 36868, 36880, 36928, 36950, 36996, 37120, 37154, 37220, 37462,
+        37513, 37888, 37893, 37956, 37968, 37976, 38185, 38288, 38290, 38465, 38993, 39078, 39241, 39445, 39520, 40960,
+        40962, 40968, 40970, 40992, 41002, 41120, 41297, 41305, 41382, 41472, 41474, 41480, 41514, 41600, 41632, 42048,
+        42133, 42597, 42648, 43018, 43040, 43042, 43048, 43168, 43176, 43268, 43396, 43398, 43560, 43562, 43665, 43690,
+    };
+    static const uint16_t kgrid_1bit_2048[NGRID_IQ1S] = {
+            0,     2,     5,     8,    10,    17,    21,    32,    34,    40,    42,    69,    81,    84,    86,   101,
+          128,   130,   136,   138,   149,   160,   162,   168,   170,   260,   261,   273,   276,   278,   281,   282,
+          293,   321,   326,   329,   338,   341,   346,   353,   356,   358,   360,   389,   401,   404,   406,   421,
+          512,   514,   520,   522,   533,   544,   546,   552,   554,   581,   593,   601,   612,   617,   640,   642,
+          648,   650,   657,   661,   665,   672,   674,   680,   682,  1041,  1044,  1046,  1061,  1089,  1097,  1109,
+         1114,  1124,  1125,  1169,  1177,  1189,  1281,  1284,  1285,  1286,  1301,  1304,  1306,  1321,  1344,  1349,
+         1354,  1360,  1361,  1364,  1365,  1366,  1369,  1376,  1378,  1381,  1384,  1386,  1409,  1425,  1429,  1432,
+         1434,  1441,  1444,  1445,  1446,  1449,  1556,  1561,  1601,  1604,  1616,  1618,  1621,  1624,  1632,  1633,
+         1638,  1641,  1669,  1681,  1684,  1689,  2048,  2050,  2056,  2058,  2069,  2080,  2082,  2088,  2090,  2117,
+         2129,  2134,  2149,  2176,  2178,  2184,  2186,  2197,  2208,  2210,  2216,  2218,  2309,  2321,  2324,  2329,
+         2340,  2341,  2369,  2384,  2385,  2389,  2401,  2404,  2409,  2449,  2452,  2454,  2457,  2469,  2560,  2562,
+         2568,  2570,  2581,  2592,  2594,  2600,  2602,  2629,  2641,  2649,  2657,  2661,  2688,  2690,  2693,  2696,
+         2698,  2709,  2720,  2722,  2728,  2730,  4112,  4113,  4116,  4121,  4132,  4133,  4161,  4164,  4176,  4181,
+         4184,  4193,  4196,  4197,  4201,  4241,  4244,  4246,  4257,  4261,  4353,  4356,  4358,  4361,  4368,  4370,
+         4373,  4376,  4385,  4388,  4393,  4421,  4426,  4432,  4433,  4434,  4436,  4437,  4438,  4441,  4448,  4453,
+         4484,  4498,  4501,  4513,  4516,  4625,  4628,  4630,  4645,  4672,  4678,  4681,  4690,  4693,  4696,  4698,
+         4708,  4710,  4741,  4753,  4756,  4758,  4773,  5121,  5126,  5129,  5140,  5141,  5144,  5145,  5153,  5158,
+         5185,  5189,  5190,  5192,  5194,  5201,  5204,  5205,  5206,  5209,  5218,  5221,  5224,  5252,  5257,  5264,
+         5268,  5269,  5272,  5273,  5274,  5281,  5284,  5285,  5289,  5378,  5381,  5386,  5393,  5396,  5397,  5398,
+         5401,  5408,  5410,  5413,  5416,  5418,  5441,  5444,  5445,  5446,  5457,  5458,  5460,  5461,  5462,  5465,
+         5466,  5473,  5476,  5477,  5478,  5481,  5504,  5506,  5508,  5509,  5512,  5514,  5520,  5521,  5524,  5525,
+         5526,  5529,  5530,  5536,  5538,  5541,  5633,  5636,  5637,  5638,  5653,  5654,  5656,  5658,  5665,  5670,
+         5696,  5698,  5700,  5701,  5704,  5706,  5713,  5717,  5718,  5720,  5721,  5729,  5732,  5733,  5736,  5737,
+         5738,  5766,  5770,  5778,  5781,  5796,  5801,  6161,  6166,  6181,  6209,  6212,  6214,  6217,  6224,  6229,
+         6232,  6234,  6240,  6241,  6244,  6246,  6249,  6277,  6289,  6292,  6309,  6416,  6418,  6421,  6426,  6433,
+         6437,  6466,  6468,  6469,  6472,  6481,  6484,  6485,  6486,  6489,  6490,  6496,  6501,  6506,  6537,  6545,
+         6546,  6549,  6552,  6561,  6566,  6569,  6665,  6678,  6692,  6694,  6724,  6726,  6729,  6736,  6738,  6741,
+         6744,  6753,  6758,  6761,  6789,  6801,  6806,  6810,  8192,  8194,  8200,  8202,  8213,  8224,  8226,  8229,
+         8232,  8234,  8261,  8273,  8281,  8289,  8293,  8320,  8322,  8328,  8330,  8341,  8352,  8354,  8357,  8360,
+         8362,  8453,  8465,  8468,  8473,  8485,  8514,  8516,  8521,  8533,  8536,  8538,  8545,  8548,  8549,  8550,
+         8581,  8592,  8598,  8601,  8613,  8705,  8712,  8714,  8721,  8725,  8736,  8738,  8744,  8746,  8773,  8785,
+         8790,  8793,  8805,  8833,  8840,  8842,  8849,  8853,  8864,  8866,  8872,  8874,  9221,  9236,  9238,  9241,
+         9253,  9284,  9285,  9286,  9289,  9298,  9301,  9304,  9306,  9318,  9349,  9361,  9364,  9369,  9377,  9381,
+         9481,  9493,  9505,  9513,  9536,  9541,  9544,  9553,  9556,  9557,  9561,  9570,  9573,  9576,  9609,  9616,
+         9620,  9621,  9624,  9626,  9633,  9636,  9638,  9641,  9733,  9744,  9746,  9753,  9765,  9793,  9801,  9813,
+         9824,  9825,  9833,  9860,  9862,  9872,  9882, 10240, 10242, 10248, 10250, 10261, 10272, 10274, 10280, 10282,
+        10309, 10321, 10324, 10341, 10368, 10370, 10376, 10378, 10400, 10402, 10408, 10410, 10505, 10513, 10516, 10521,
+        10533, 10566, 10569, 10578, 10581, 10593, 10596, 10598, 10601, 10629, 10640, 10646, 10649, 10660, 10661, 10752,
+        10754, 10760, 10762, 10784, 10786, 10792, 10794, 10821, 10833, 10838, 10841, 10853, 10880, 10882, 10888, 10890,
+        10901, 10912, 10914, 10920, 10922, 16389, 16401, 16406, 16421, 16457, 16466, 16469, 16472, 16474, 16481, 16484,
+        16486, 16532, 16537, 16545, 16550, 16640, 16641, 16644, 16646, 16649, 16658, 16661, 16662, 16664, 16666, 16673,
+        16678, 16681, 16709, 16712, 16714, 16721, 16724, 16725, 16726, 16729, 16730, 16741, 16744, 16746, 16769, 16772,
+        16774, 16784, 16786, 16789, 16800, 16801, 16802, 16901, 16913, 16916, 16918, 16933, 16961, 16978, 16981, 16986,
+        16996, 17001, 17033, 17044, 17061, 17409, 17429, 17433, 17449, 17477, 17480, 17482, 17489, 17492, 17493, 17494,
+        17505, 17506, 17509, 17512, 17514, 17537, 17542, 17545, 17552, 17554, 17557, 17568, 17569, 17577, 17665, 17666,
+        17669, 17674, 17681, 17684, 17685, 17686, 17689, 17696, 17701, 17706, 17729, 17732, 17733, 17734, 17737, 17744,
+        17745, 17748, 17749, 17750, 17752, 17753, 17761, 17764, 17765, 17766, 17769, 17794, 17796, 17797, 17800, 17809,
+        17812, 17813, 17814, 17817, 17818, 17829, 17832, 17834, 17921, 17925, 17929, 17940, 17941, 17944, 17946, 17953,
+        17956, 17961, 17984, 17986, 17989, 17992, 18000, 18001, 18002, 18005, 18006, 18009, 18018, 18021, 18024, 18049,
+        18053, 18058, 18068, 18069, 18081, 18084, 18086, 18437, 18449, 18453, 18458, 18469, 18498, 18505, 18512, 18517,
+        18520, 18529, 18532, 18534, 18537, 18565, 18577, 18580, 18582, 18585, 18597, 18689, 18693, 18694, 18698, 18704,
+        18708, 18709, 18712, 18721, 18724, 18726, 18752, 18757, 18762, 18769, 18770, 18772, 18773, 18774, 18777, 18784,
+        18786, 18789, 18790, 18794, 18822, 18825, 18834, 18837, 18838, 18840, 18849, 18852, 18854, 18857, 18966, 19012,
+        19014, 19017, 19029, 19032, 19034, 19044, 19049, 19092, 19109, 20481, 20484, 20485, 20486, 20489, 20498, 20501,
+        20506, 20513, 20516, 20521, 20544, 20549, 20552, 20561, 20564, 20565, 20566, 20569, 20581, 20584, 20614, 20617,
+        20629, 20632, 20640, 20641, 20646, 20649, 20741, 20744, 20745, 20746, 20753, 20756, 20757, 20758, 20760, 20761,
+        20768, 20773, 20774, 20776, 20778, 20801, 20804, 20805, 20806, 20809, 20816, 20817, 20818, 20820, 20821, 20822,
+        20824, 20825, 20826, 20833, 20836, 20837, 20838, 20841, 20866, 20869, 20881, 20884, 20885, 20886, 20889, 20896,
+        20901, 20906, 20993, 20998, 21010, 21013, 21018, 21025, 21028, 21058, 21061, 21066, 21073, 21076, 21077, 21078,
+        21081, 21090, 21093, 21125, 21136, 21138, 21141, 21145, 21146, 21156, 21508, 21509, 21521, 21524, 21525, 21526,
+        21528, 21529, 21537, 21541, 21544, 21546, 21569, 21572, 21573, 21574, 21577, 21578, 21584, 21585, 21588, 21589,
+        21590, 21592, 21593, 21594, 21601, 21602, 21604, 21605, 21606, 21609, 21632, 21640, 21642, 21649, 21652, 21653,
+        21654, 21657, 21665, 21668, 21669, 21674, 21761, 21762, 21764, 21765, 21766, 21769, 21776, 21777, 21778, 21780,
+        21781, 21782, 21785, 21786, 21793, 21796, 21797, 21798, 21801, 21824, 21825, 21826, 21828, 21829, 21830, 21832,
+        21833, 21840, 21841, 21842, 21844, 21845, 21846, 21848, 21849, 21850, 21856, 21857, 21860, 21861, 21862, 21864,
+        21865, 21866, 21889, 21892, 21893, 21897, 21898, 21904, 21905, 21908, 21909, 21910, 21912, 21913, 21921, 21924,
+        21925, 21926, 21929, 22016, 22017, 22018, 22020, 22022, 22024, 22025, 22033, 22036, 22037, 22040, 22041, 22048,
+        22049, 22050, 22052, 22053, 22054, 22056, 22057, 22081, 22085, 22086, 22088, 22089, 22090, 22096, 22097, 22098,
+        22100, 22101, 22102, 22104, 22105, 22106, 22113, 22116, 22117, 22121, 22146, 22149, 22150, 22152, 22153, 22154,
+        22161, 22165, 22170, 22178, 22181, 22182, 22184, 22185, 22532, 22533, 22534, 22537, 22544, 22549, 22552, 22561,
+        22570, 22597, 22600, 22602, 22609, 22612, 22613, 22614, 22616, 22617, 22624, 22626, 22628, 22629, 22658, 22665,
+        22672, 22674, 22677, 22680, 22689, 22697, 22785, 22786, 22789, 22794, 22801, 22804, 22805, 22806, 22809, 22821,
+        22849, 22852, 22853, 22854, 22857, 22864, 22865, 22866, 22868, 22869, 22870, 22872, 22873, 22874, 22881, 22884,
+        22885, 22886, 22889, 22913, 22917, 22921, 22929, 22932, 22933, 22934, 22936, 22937, 22949, 23044, 23048, 23061,
+        23066, 23072, 23077, 23078, 23081, 23109, 23112, 23113, 23121, 23125, 23126, 23128, 23129, 23138, 23141, 23144,
+        23146, 23169, 23178, 23186, 23189, 23190, 23192, 23194, 23201, 24581, 24596, 24598, 24601, 24613, 24644, 24656,
+        24661, 24662, 24664, 24666, 24673, 24676, 24678, 24681, 24705, 24726, 24741, 24833, 24836, 24838, 24841, 24850,
+        24853, 24865, 24866, 24870, 24873, 24901, 24905, 24913, 24917, 24918, 24921, 24933, 24934, 24938, 24964, 24970,
+        24978, 24981, 24993, 24998, 25001, 25105, 25110, 25113, 25152, 25153, 25158, 25173, 25174, 25176, 25184, 25221,
+        25233, 25238, 25253, 25617, 25618, 25621, 25622, 25626, 25633, 25638, 25641, 25664, 25666, 25669, 25672, 25674,
+        25681, 25684, 25685, 25686, 25689, 25690, 25696, 25698, 25701, 25732, 25733, 25737, 25744, 25746, 25748, 25749,
+        25750, 25752, 25754, 25761, 25764, 25769, 25861, 25864, 25866, 25873, 25877, 25878, 25881, 25924, 25925, 25926,
+        25929, 25936, 25937, 25940, 25941, 25942, 25945, 25953, 25956, 25957, 25958, 25961, 25990, 25993, 25994, 26001,
+        26005, 26006, 26009, 26010, 26018, 26021, 26022, 26024, 26114, 26121, 26133, 26144, 26150, 26152, 26153, 26176,
+        26181, 26184, 26186, 26193, 26196, 26197, 26198, 26200, 26202, 26208, 26213, 26216, 26240, 26242, 26245, 26250,
+        26260, 26262, 26264, 26265, 26272, 26276, 26278, 26282, 26646, 26649, 26661, 26689, 26706, 26709, 26714, 26721,
+        26729, 26757, 26769, 26776, 26790, 26881, 26884, 26896, 26901, 26913, 26916, 26918, 26921, 26944, 26945, 26949,
+        26950, 26952, 26961, 26964, 26965, 26966, 26969, 26976, 26981, 26986, 27010, 27012, 27018, 27029, 27041, 27044,
+        27045, 27049, 27153, 27158, 27160, 27201, 27204, 27209, 27216, 27221, 27224, 27226, 27236, 27237, 27241, 27270,
+        27284, 27288, 27290, 27302, 32768, 32770, 32776, 32778, 32800, 32802, 32808, 32810, 32837, 32848, 32849, 32852,
+        32854, 32857, 32869, 32896, 32898, 32904, 32906, 32917, 32928, 32930, 32936, 32938, 33029, 33041, 33044, 33046,
+        33049, 33061, 33089, 33092, 33097, 33104, 33106, 33109, 33110, 33112, 33113, 33124, 33126, 33129, 33157, 33161,
+        33172, 33174, 33177, 33189, 33280, 33282, 33288, 33290, 33301, 33312, 33314, 33320, 33322, 33361, 33364, 33369,
+        33381, 33408, 33410, 33416, 33418, 33429, 33440, 33442, 33448, 33450, 33812, 33817, 33857, 33860, 33873, 33877,
+        33882, 33889, 33892, 33897, 33940, 33945, 34049, 34057, 34066, 34069, 34074, 34086, 34089, 34112, 34113, 34117,
+        34120, 34129, 34132, 34133, 34134, 34137, 34138, 34149, 34150, 34152, 34154, 34177, 34180, 34182, 34185, 34192,
+        34194, 34197, 34200, 34214, 34321, 34326, 34329, 34341, 34369, 34372, 34377, 34378, 34384, 34389, 34393, 34394,
+        34401, 34406, 34410, 34437, 34449, 34458, 34468, 34816, 34818, 34824, 34826, 34837, 34848, 34850, 34856, 34858,
+        34881, 34885, 34897, 34900, 34905, 34917, 34921, 34944, 34946, 34952, 34954, 34965, 34976, 34978, 34984, 34986,
+        35077, 35078, 35089, 35092, 35094, 35109, 35137, 35140, 35142, 35145, 35152, 35154, 35157, 35162, 35169, 35172,
+        35205, 35222, 35225, 35237, 35328, 35330, 35336, 35338, 35349, 35360, 35362, 35368, 35370, 35397, 35409, 35412,
+        35414, 35456, 35458, 35464, 35466, 35477, 35488, 35490, 35496, 35498, 36869, 36881, 36886, 36888, 36889, 36901,
+        36929, 36934, 36937, 36949, 36952, 36954, 36969, 36970, 36997, 37009, 37012, 37014, 37017, 37029, 37121, 37124,
+        37126, 37129, 37136, 37141, 37144, 37146, 37153, 37156, 37158, 37161, 37184, 37189, 37200, 37201, 37204, 37205,
+        37206, 37209, 37218, 37221, 37252, 37254, 37266, 37269, 37272, 37281, 37284, 37286, 37289, 37381, 37393, 37396,
+        37401, 37413, 37444, 37446, 37449, 37456, 37458, 37461, 37464, 37478, 37481, 37509, 37524, 37526, 37545, 37889,
+        37892, 37894, 37904, 37909, 37912, 37926, 37952, 37962, 37969, 37972, 37973, 37974, 37976, 37977, 37984, 37985,
+        37986, 37989, 38020, 38022, 38034, 38036, 38037, 38040, 38049, 38057, 38144, 38149, 38152, 38154, 38160, 38161,
+        38164, 38165, 38166, 38169, 38177, 38181, 38185, 38186, 38209, 38212, 38213, 38214, 38217, 38224, 38225, 38226,
+        38228, 38229, 38230, 38232, 38233, 38234, 38241, 38244, 38245, 38246, 38249, 38273, 38277, 38280, 38289, 38290,
+        38292, 38293, 38294, 38297, 38298, 38304, 38306, 38309, 38312, 38314, 38401, 38404, 38416, 38421, 38425, 38432,
+        38438, 38441, 38469, 38472, 38473, 38481, 38482, 38485, 38486, 38489, 38501, 38504, 38530, 38532, 38537, 38538,
+        38546, 38548, 38549, 38564, 38566, 38569, 38917, 38934, 38937, 38949, 38977, 38982, 38992, 38994, 38997, 38998,
+        39002, 39012, 39013, 39045, 39057, 39062, 39065, 39077, 39172, 39174, 39177, 39184, 39186, 39189, 39192, 39194,
+        39200, 39201, 39204, 39206, 39232, 39234, 39237, 39240, 39242, 39249, 39252, 39253, 39254, 39257, 39266, 39269,
+        39270, 39274, 39297, 39300, 39312, 39314, 39317, 39322, 39329, 39334, 39429, 39445, 39461, 39492, 39494, 39497,
+        39504, 39509, 39512, 39521, 39557, 39569, 39572, 39573, 39574, 40960, 40962, 40968, 40970, 40981, 40992, 40994,
+        41000, 41002, 41029, 41041, 41044, 41046, 41049, 41088, 41090, 41096, 41098, 41109, 41120, 41122, 41128, 41130,
+        41221, 41225, 41233, 41236, 41238, 41241, 41242, 41286, 41289, 41297, 41301, 41304, 41306, 41313, 41316, 41349,
+        41360, 41362, 41366, 41369, 41474, 41480, 41482, 41488, 41497, 41506, 41512, 41514, 41541, 41553, 41558, 41561,
+        41573, 41600, 41602, 41608, 41610, 41621, 41632, 41634, 41640, 41642, 42009, 42021, 42049, 42052, 42064, 42068,
+        42069, 42072, 42074, 42081, 42085, 42086, 42088, 42089, 42117, 42246, 42249, 42256, 42258, 42261, 42264, 42278,
+        42281, 42306, 42309, 42321, 42324, 42325, 42326, 42329, 42341, 42346, 42369, 42372, 42373, 42374, 42377, 42386,
+        42389, 42392, 42501, 42513, 42518, 42522, 42529, 42533, 42564, 42566, 42570, 42578, 42581, 42582, 42584, 42592,
+        42594, 42630, 42640, 42645, 42646, 42649, 42657, 42660, 42662, 43008, 43010, 43016, 43018, 43040, 43042, 43048,
+        43050, 43089, 43092, 43094, 43097, 43136, 43138, 43144, 43146, 43157, 43168, 43170, 43176, 43178, 43269, 43284,
+        43289, 43297, 43301, 43329, 43344, 43349, 43354, 43361, 43366, 43369, 43408, 43414, 43520, 43522, 43528, 43530,
+        43552, 43554, 43560, 43562, 43601, 43604, 43606, 43648, 43650, 43656, 43658, 43669, 43680, 43682, 43688, 43690,
+    };
+    static const uint16_t kgrid_2bit_1024[1024] = {
+            0,     2,     5,     8,    10,    17,    20,    22,    25,    32,    34,    37,    40,    65,    68,    70,
+           73,    80,    82,    85,    88,    97,   100,   102,   105,   128,   130,   133,   136,   145,   148,   160,
+          165,   170,   257,   260,   262,   265,   272,   274,   277,   280,   289,   292,   320,   322,   325,   328,
+          337,   340,   342,   345,   352,   357,   360,   385,   388,   400,   402,   405,   417,   420,   512,   514,
+          517,   520,   529,   532,   544,   554,   577,   580,   582,   585,   592,   597,   640,   645,   650,   660,
+          674,  1025,  1028,  1030,  1033,  1040,  1042,  1045,  1048,  1057,  1060,  1062,  1065,  1088,  1090,  1093,
+         1096,  1098,  1105,  1108,  1110,  1113,  1120,  1122,  1125,  1153,  1156,  1158,  1161,  1168,  1173,  1176,
+         1185,  1188,  1280,  1282,  1285,  1288,  1290,  1297,  1300,  1302,  1305,  1312,  1317,  1320,  1345,  1348,
+         1350,  1353,  1360,  1362,  1365,  1368,  1377,  1380,  1408,  1410,  1413,  1416,  1425,  1428,  1440,  1537,
+         1540,  1542,  1545,  1552,  1557,  1600,  1605,  1608,  1617,  1620,  1632,  1665,  1668,  1680,  2048,  2050,
+         2053,  2056,  2065,  2068,  2070,  2073,  2080,  2085,  2090,  2113,  2116,  2118,  2121,  2128,  2130,  2133,
+         2136,  2145,  2148,  2176,  2181,  2196,  2218,  2305,  2308,  2320,  2322,  2325,  2328,  2337,  2368,  2373,
+         2376,  2385,  2388,  2400,  2433,  2448,  2560,  2577,  2580,  2594,  2600,  2602,  2640,  2713,  4097,  4100,
+         4102,  4105,  4112,  4114,  4117,  4120,  4129,  4132,  4134,  4160,  4162,  4165,  4168,  4177,  4180,  4182,
+         4185,  4192,  4194,  4197,  4200,  4225,  4228,  4230,  4240,  4245,  4248,  4257,  4260,  4352,  4354,  4357,
+         4360,  4362,  4369,  4372,  4374,  4377,  4384,  4386,  4389,  4392,  4417,  4420,  4422,  4425,  4432,  4434,
+         4437,  4440,  4449,  4452,  4480,  4482,  4485,  4488,  4497,  4500,  4609,  4612,  4617,  4624,  4629,  4641,
+         4644,  4672,  4677,  4689,  4692,  4737,  4740,  4752,  5120,  5122,  5125,  5128,  5137,  5140,  5142,  5145,
+         5152,  5157,  5160,  5185,  5188,  5190,  5193,  5200,  5202,  5205,  5208,  5217,  5220,  5248,  5250,  5253,
+         5256,  5265,  5268,  5280,  5377,  5380,  5382,  5385,  5392,  5394,  5397,  5400,  5409,  5412,  5440,  5442,
+         5445,  5448,  5457,  5460,  5472,  5505,  5508,  5520,  5632,  5637,  5640,  5649,  5652,  5664,  5697,  5700,
+         5712,  5760,  5802,  6145,  6148,  6150,  6153,  6160,  6165,  6168,  6177,  6208,  6210,  6213,  6216,  6225,
+         6228,  6240,  6273,  6276,  6400,  6402,  6405,  6408,  6417,  6420,  6432,  6465,  6468,  6480,  6505,  6562,
+         6660,  6672,  6720,  6742,  8192,  8194,  8197,  8200,  8209,  8212,  8214,  8217,  8224,  8229,  8234,  8257,
+         8260,  8272,  8274,  8277,  8292,  8320,  8330,  8340,  8362,  8449,  8452,  8464,  8466,  8469,  8481,  8512,
+         8514,  8517,  8529,  8532,  8544,  8577,  8580,  8592,  8704,  8714,  8738,  8744,  8746,  8772,  8784,  8840,
+         8842,  8872,  9217,  9220,  9222,  9225,  9232,  9237,  9240,  9249,  9252,  9280,  9282,  9285,  9288,  9297,
+         9300,  9312,  9345,  9348,  9360,  9472,  9477,  9480,  9489,  9492,  9504,  9537,  9540,  9552,  9574,  9600,
+         9729,  9732,  9744,  9792,  9817, 10240, 10245, 10257, 10260, 10305, 10308, 10320, 10378, 10410, 10497, 10500,
+        10512, 10645, 10762, 10786, 10852, 10888, 10890, 16385, 16388, 16390, 16393, 16400, 16402, 16405, 16408, 16410,
+        16417, 16420, 16422, 16448, 16450, 16453, 16456, 16458, 16465, 16468, 16470, 16473, 16480, 16482, 16485, 16513,
+        16516, 16528, 16533, 16536, 16545, 16548, 16640, 16642, 16645, 16648, 16657, 16660, 16662, 16665, 16672, 16674,
+        16677, 16705, 16708, 16710, 16713, 16720, 16722, 16725, 16728, 16737, 16740, 16768, 16770, 16773, 16776, 16785,
+        16788, 16800, 16897, 16900, 16912, 16914, 16917, 16920, 16932, 16960, 16965, 16968, 16977, 16980, 16992, 17025,
+        17028, 17408, 17410, 17413, 17416, 17418, 17425, 17428, 17430, 17433, 17440, 17442, 17445, 17448, 17473, 17476,
+        17478, 17481, 17488, 17490, 17493, 17496, 17505, 17508, 17536, 17538, 17541, 17544, 17553, 17556, 17568, 17665,
+        17668, 17670, 17673, 17680, 17682, 17685, 17688, 17697, 17700, 17728, 17730, 17733, 17736, 17745, 17748, 17760,
+        17770, 17793, 17796, 17808, 17920, 17922, 17925, 17928, 17937, 17940, 17952, 17985, 17988, 18000, 18048, 18085,
+        18433, 18436, 18441, 18448, 18450, 18453, 18456, 18465, 18468, 18496, 18498, 18501, 18504, 18513, 18516, 18528,
+        18564, 18576, 18688, 18690, 18693, 18696, 18705, 18708, 18720, 18753, 18756, 18768, 18816, 18838, 18945, 18948,
+        18960, 19008, 20480, 20482, 20485, 20488, 20497, 20500, 20502, 20505, 20512, 20514, 20517, 20520, 20545, 20548,
+        20550, 20553, 20560, 20562, 20565, 20568, 20577, 20580, 20608, 20610, 20613, 20616, 20625, 20628, 20737, 20740,
+        20742, 20745, 20752, 20754, 20757, 20760, 20769, 20772, 20800, 20802, 20805, 20808, 20817, 20820, 20832, 20865,
+        20868, 20880, 20992, 20997, 21000, 21009, 21012, 21024, 21057, 21060, 21072, 21097, 21120, 21505, 21508, 21510,
+        21513, 21520, 21522, 21525, 21528, 21537, 21540, 21568, 21570, 21573, 21576, 21585, 21588, 21600, 21633, 21636,
+        21648, 21760, 21762, 21765, 21768, 21777, 21780, 21792, 21825, 21828, 21840, 21888, 22017, 22020, 22032, 22054,
+        22080, 22528, 22530, 22533, 22536, 22545, 22548, 22560, 22593, 22596, 22608, 22618, 22656, 22785, 22788, 22800,
+        22848, 23040, 23065, 23173, 23208, 24577, 24580, 24582, 24592, 24594, 24597, 24600, 24609, 24612, 24640, 24645,
+        24648, 24657, 24660, 24672, 24708, 24720, 24832, 24834, 24837, 24840, 24849, 24852, 24864, 24897, 24900, 24912,
+        24960, 24985, 25092, 25104, 25152, 25174, 25249, 25600, 25605, 25608, 25617, 25620, 25632, 25665, 25668, 25680,
+        25728, 25857, 25860, 25872, 25920, 25930, 25960, 26002, 26112, 26260, 26625, 26628, 26640, 26725, 26776, 26880,
+        26922, 27202, 27297, 32768, 32770, 32773, 32776, 32785, 32788, 32793, 32800, 32805, 32833, 32836, 32848, 32850,
+        32853, 32856, 32865, 32896, 32901, 32913, 32916, 33025, 33028, 33033, 33040, 33042, 33045, 33048, 33057, 33060,
+        33088, 33090, 33093, 33096, 33105, 33108, 33153, 33156, 33168, 33193, 33280, 33285, 33290, 33297, 33300, 33345,
+        33348, 33360, 33793, 33796, 33798, 33801, 33808, 33810, 33813, 33816, 33825, 33856, 33858, 33861, 33864, 33873,
+        33876, 33888, 33921, 33924, 33936, 34048, 34050, 34053, 34056, 34065, 34068, 34080, 34113, 34116, 34128, 34176,
+        34186, 34305, 34308, 34320, 34345, 34368, 34816, 34821, 34833, 34836, 34881, 34884, 34896, 34978, 35073, 35076,
+        35136, 35173, 35362, 35416, 35418, 35458, 35490, 36865, 36868, 36873, 36880, 36882, 36885, 36888, 36900, 36928,
+        36930, 36933, 36936, 36945, 36948, 36960, 36993, 36996, 37008, 37120, 37125, 37137, 37140, 37185, 37188, 37200,
+        37210, 37377, 37380, 37392, 37440, 37542, 37888, 37890, 37893, 37896, 37905, 37908, 37920, 37953, 37956, 37968,
+        38016, 38038, 38145, 38148, 38160, 38208, 38296, 38305, 38400, 38470, 38500, 38913, 38916, 38928, 38950, 38976,
+        39081, 39168, 39241, 39250, 39568, 40960, 40965, 40970, 40980, 40994, 41002, 41025, 41028, 41040, 41122, 41130,
+        41280, 41317, 41474, 41482, 41506, 41512, 41514, 41602, 41608, 41610, 41640, 41985, 41988, 42000, 42048, 42121,
+        42148, 42240, 42265, 42577, 43018, 43048, 43170, 43348, 43398, 43528, 43530, 43552, 43554, 43560, 43656, 43690,
+    };
+
+    const int kmap_size = 43692;
+    //const int nwant = type == GGML_TYPE_IQ1_S ? 3 : 2;
+    const int nwant = type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? 3 : type == GGML_TYPE_IQ2_S ? 1 : 2;
+    const uint16_t * kgrid = type == GGML_TYPE_IQ2_XXS ? kgrid_2bit_256 :
+                             type == GGML_TYPE_IQ2_XS  ? kgrid_2bit_512 :
+                             type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M ? kgrid_1bit_2048 : kgrid_2bit_1024;
+    uint64_t * kgrid_q2xs;
+    int      * kmap_q2xs;
+    uint16_t * kneighbors_q2xs;
+
+    //printf("================================================================= %s(grid_size = %d)\n", __func__, grid_size);
+    uint64_t * the_grid = (uint64_t *)malloc(grid_size*sizeof(uint64_t));
+    for (int k = 0; k < grid_size; ++k) {
+        int8_t * pos = (int8_t *)(the_grid + k);
+        for (int i = 0; i < 8; ++i) {
+            int l = (kgrid[k] >> 2*i) & 0x3;
+            pos[i] = 2*l + 1;
+        }
+    }
+    kgrid_q2xs = the_grid;
+    iq2_data[gindex].grid = the_grid;
+    kmap_q2xs = (int *)malloc(kmap_size*sizeof(int));
+    iq2_data[gindex].map = kmap_q2xs;
+    for (int i = 0; i < kmap_size; ++i) kmap_q2xs[i] = -1;
+    uint64_t aux64;
+    uint8_t * aux8 = (uint8_t *)&aux64;
+    for (int i = 0; i < grid_size; ++i) {
+        aux64 = kgrid_q2xs[i];
+        uint16_t index = 0;
+        for (int k=0; k<8; ++k) {
+            uint16_t q = (aux8[k] - 1)/2;
+            index |= (q << 2*k);
+        }
+        kmap_q2xs[index] = i;
+    }
+    int8_t pos[8];
+    int * dist2 = (int *)malloc(2*grid_size*sizeof(int));
+    int num_neighbors = 0, num_not_in_map = 0;
+    for (int i = 0; i < kmap_size; ++i) {
+        if (kmap_q2xs[i] >= 0) continue;
+        ++num_not_in_map;
+        for (int k = 0; k < 8; ++k) {
+            int l = (i >> 2*k) & 0x3;
+            pos[k] = 2*l + 1;
+        }
+        for (int j = 0; j < grid_size; ++j) {
+            const int8_t * pg = (const int8_t *)(kgrid_q2xs + j);
+            int d2 = 0;
+            for (int k = 0; k < 8; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]);
+            dist2[2*j+0] = d2;
+            dist2[2*j+1] = j;
+        }
+        qsort(dist2, grid_size, 2*sizeof(int), iq2_compare_func);
+        int n = 0; int d2 = dist2[0];
+        int nhave = 1;
+        for (int j = 0; j < grid_size; ++j) {
+            if (dist2[2*j] > d2) {
+                if (nhave == nwant) break;
+                d2 = dist2[2*j];
+                ++nhave;
+            }
+            ++n;
+        }
+        num_neighbors += n;
+    }
+    //printf("%s: %d neighbours in total\n", __func__, num_neighbors);
+    kneighbors_q2xs = (uint16_t *)malloc((num_neighbors + num_not_in_map)*sizeof(uint16_t));
+    iq2_data[gindex].neighbours = kneighbors_q2xs;
+    int counter = 0;
+    for (int i = 0; i < kmap_size; ++i) {
+        if (kmap_q2xs[i] >= 0) continue;
+        for (int k = 0; k < 8; ++k) {
+            int l = (i >> 2*k) & 0x3;
+            pos[k] = 2*l + 1;
+        }
+        for (int j = 0; j < grid_size; ++j) {
+            const int8_t * pg = (const int8_t *)(kgrid_q2xs + j);
+            int d2 = 0;
+            for (int k = 0; k < 8; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]);
+            dist2[2*j+0] = d2;
+            dist2[2*j+1] = j;
+        }
+        qsort(dist2, grid_size, 2*sizeof(int), iq2_compare_func);
+        kmap_q2xs[i] = -(counter + 1);
+        int d2 = dist2[0];
+        uint16_t * start = &kneighbors_q2xs[counter++];
+        int n = 0, nhave = 1;
+        for (int j = 0; j < grid_size; ++j) {
+            if (dist2[2*j] > d2) {
+                if (nhave == nwant) break;
+                d2 = dist2[2*j];
+                ++nhave;
+            }
+            kneighbors_q2xs[counter++] = dist2[2*j+1];
+            ++n;
+        }
+        *start = n;
+    }
+    free(dist2);
+}
+
+void iq2xs_free_impl(enum ggml_type type) {
+    GGML_ASSERT(type == GGML_TYPE_IQ2_XXS || type == GGML_TYPE_IQ2_XS || type == GGML_TYPE_IQ1_S || type == GGML_TYPE_IQ1_M || type == GGML_TYPE_IQ2_S);
+    const int gindex = iq2_data_index(type);
+    if (iq2_data[gindex].grid) {
+        free(iq2_data[gindex].grid);       iq2_data[gindex].grid = NULL;
+        free(iq2_data[gindex].map);        iq2_data[gindex].map  = NULL;
+        free(iq2_data[gindex].neighbours); iq2_data[gindex].neighbours = NULL;
+    }
+}
+
+static int iq2_find_best_neighbour(const uint16_t * restrict neighbours, const uint64_t * restrict grid,
+        const float * restrict xval, const float * restrict weight, float scale, int8_t * restrict L) {
+    int num_neighbors = neighbours[0];
+    GGML_ASSERT(num_neighbors > 0);
+    float best_d2 = FLT_MAX;
+    int grid_index = -1;
+    for (int j = 1; j <= num_neighbors; ++j) {
+        const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
+        float d2 = 0;
+        for (int i = 0; i < 8; ++i) {
+            float q = pg[i];
+            float diff = scale*q - xval[i];
+            d2 += weight[i]*diff*diff;
+        }
+        if (d2 < best_d2) {
+            best_d2 = d2; grid_index = neighbours[j];
+        }
+    }
+    GGML_ASSERT(grid_index >= 0);
+    const int8_t * pg = (const int8_t *)(grid + grid_index);
+    for (int i = 0; i < 8; ++i) L[i] = (pg[i] - 1)/2;
+    return grid_index;
+}
+
+static void quantize_row_iq2_xxs_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights) {
+
+    const int gindex = iq2_data_index(GGML_TYPE_IQ2_XXS);
+
+    const uint64_t * kgrid_q2xs      = iq2_data[gindex].grid;
+    const int      * kmap_q2xs       = iq2_data[gindex].map;
+    const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours;
+
+    GGML_ASSERT(quant_weights   && "missing quantization weights");
+    GGML_ASSERT(kgrid_q2xs      && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kmap_q2xs       && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(n%QK_K == 0);
+
+    const int kMaxQ = 3;
+
+    const int64_t nbl = n/QK_K;
+
+    block_iq2_xxs * y = vy;
+
+    float scales[QK_K/32];
+    float weight[32];
+    float xval[32];
+    int8_t L[32];
+    int8_t Laux[32];
+    float  waux[32];
+    uint8_t block_signs[4];
+    uint32_t q2[2*(QK_K/32)];
+
+    for (int ibl = 0; ibl < nbl; ++ibl) {
+
+        y[ibl].d = GGML_FP32_TO_FP16(0.f);
+        memset(q2, 0, QK_K/4);
+
+        float max_scale = 0;
+
+        const float * xbl = x + QK_K*ibl;
+        float sumx2 = 0;
+        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
+        float sigma2 = sumx2/QK_K;
+
+        for (int ib = 0; ib < QK_K/32; ++ib) {
+            const float * xb = xbl + 32*ib;
+            const float * qw = quant_weights + QK_K*ibl + 32*ib;
+            for (int i = 0; i < 32; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
+            for (int i = 0; i < 32; ++i) waux[i] = sqrtf(weight[i]);
+            for (int k = 0; k < 4; ++k) {
+                int nflip = 0;
+                uint8_t s = 0;
+                for (int i = 0; i < 8; ++i) {
+                    if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i];
+                    else {
+                        xval[8*k + i] = -xb[8*k + i]; ++nflip; s |= (1 << i);
+                    }
+                }
+                if (nflip%2) {
+                    int imin = 0; float min = weight[8*k+imin]*xb[8*k+imin]*xb[8*k+imin];
+                    for (int i = 1; i < 8; ++i) {
+                        float ax = weight[8*k+i]*xb[8*k+i]*xb[8*k+i];
+                        if (ax < min) {
+                            min = ax; imin = i;
+                        }
+                    }
+                    xval[8*k+imin] = -xval[8*k+imin];
+                    s ^= (1 << imin);
+                }
+                block_signs[k] = s & 127;
+            }
+            float max = xval[0];
+            for (int i = 1; i < 32; ++i) max = MAX(max, xval[i]);
+            if (max < GROUP_MAX_EPS) {
+                scales[ib] = 0;
+                memset(L, 0, 32);
+                continue;
+            }
+            float scale = make_qp_quants(32, kMaxQ+1, xval, (uint8_t*)L, weight);
+            float eff_max = scale*kMaxQ;
+            float best = 0;
+            for (int is = -6; is <= 6; ++is) {
+                float id = (2*kMaxQ-1+is*0.1f)/eff_max;
+                float this_scale = 1/id;
+                for (int k = 0; k < 4; ++k) {
+                    for (int i = 0; i < 8; ++i) {
+                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
+                        Laux[8*k+i] = MAX(0, MIN(kMaxQ-1, l));
+                    }
+                    uint16_t u = 0;
+                    for (int i = 0; i < 8; ++i) u |= (Laux[8*k+i] << 2*i);
+                    int grid_index = kmap_q2xs[u];
+                    if (grid_index < 0) {
+                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
+                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, this_scale, Laux + 8*k);
+                    }
+                }
+                float sumqx = 0, sumq2 = 0;
+                for (int i = 0; i < 32; ++i) {
+                    float w = weight[i];
+                    float q = 2*Laux[i] + 1;
+                    sumqx += w*xval[i]*q;
+                    sumq2 += w*q*q;
+                }
+                if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
+                    scale = sumqx/sumq2; best = scale*sumqx;
+                    memcpy(L, Laux, 32);
+                }
+            }
+            if (scale > 0) {
+                float id = 1/scale;
+                for (int k = 0; k < 4; ++k) {
+                    uint16_t u = 0;
+                    for (int i = 0; i < 8; ++i) {
+                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
+                        l = MAX(0, MIN(kMaxQ-1, l));
+                        u |= (l << 2*i);
+                    }
+                    int grid_index = kmap_q2xs[u];
+                    if (grid_index < 0) {
+                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
+                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, scale, L + 8*k);
+                    }
+                    const int8_t * pg = (const int8_t *)(kgrid_q2xs + grid_index);
+                    for (int i = 0; i < 8; ++i) L[8*k+i] = (pg[i] - 1)/2;
+                }
+                float sumqx = 0, sumq2 = 0;
+                for (int i = 0; i < 32; ++i) {
+                    float w = weight[i];
+                    float q = 2*L[i] + 1;
+                    sumqx += w*xval[i]*q;
+                    sumq2 += w*q*q;
+                }
+                if (sumq2 > 0) scale = sumqx/sumq2;
+            }
+            if (scale < 0) {
+                // This should never happen, but just in case, flip scale so that it is positive (we use uint's to encode the scale)
+                // and correspondingly flip quant signs.
+                scale = -scale;
+                for (int k = 0; k < 4; ++k) block_signs[k] = (~block_signs[k]) & 127;
+            }
+            for (int k = 0; k < 4; ++k) {
+                uint16_t u = 0;
+                for (int i = 0; i < 8; ++i) u |= (L[8*k+i] << 2*i);
+                int grid_index = kmap_q2xs[u];
+                if (grid_index < 0) {
+                    printf("Oops: found point %u not on grid:", u);
+                    for (int i = 0; i < 8; ++i) printf(" %d", L[8*k+i]);
+                    printf("\n");
+                    GGML_ASSERT(false);
+                }
+                q2[2*ib+0] |= ((uint32_t) grid_index << 8*k);
+                q2[2*ib+1] |= (block_signs[k] << 7*k);
+            }
+            GGML_ASSERT(scale >= 0);
+            scales[ib] = scale;
+            max_scale = MAX(max_scale, scale);
+        }
+
+        if (!max_scale) {
+            memset(y[ibl].qs, 0, QK_K/4);
+            continue;
+        }
+
+        float d = max_scale/31;
+        y[ibl].d = GGML_FP32_TO_FP16(d);
+        float id = 1/d;
+        for (int ib = 0; ib < QK_K/32; ++ib) {
+            int l = nearest_int(0.5f*(id*scales[ib]-1));
+            l = MAX(0, MIN(15, l));
+            q2[2*ib+1] |= ((uint32_t)l << 28);
+        }
+        memcpy(y[ibl].qs, q2, QK_K/4);
+    }
+}
+
+static void quantize_row_iq2_xs_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights) {
+
+    const int gindex = iq2_data_index(GGML_TYPE_IQ2_XS);
+
+    const uint64_t * kgrid_q2xs      = iq2_data[gindex].grid;
+    const int      * kmap_q2xs       = iq2_data[gindex].map;
+    const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours;
+
+    GGML_ASSERT(quant_weights   && "missing quantization weights");
+    GGML_ASSERT(kmap_q2xs       && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kgrid_q2xs      && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(n%QK_K == 0);
+
+    const int kMaxQ = 3;
+
+    const int64_t nbl = n/QK_K;
+
+    block_iq2_xs * y = vy;
+
+    float scales[QK_K/16];
+    float weight[16];
+    float xval[16];
+    int8_t L[16];
+    int8_t Laux[16];
+    float  waux[16];
+    bool   is_on_grid[2];
+    bool   is_on_grid_aux[2];
+    uint8_t block_signs[2];
+    uint16_t q2[2*(QK_K/16)];
+
+    for (int ibl = 0; ibl < nbl; ++ibl) {
+
+        y[ibl].d = GGML_FP32_TO_FP16(0.f);
+        memset(q2, 0, QK_K/4);
+        memset(y[ibl].scales, 0, QK_K/32);
+
+        float max_scale = 0;
+
+        const float * xbl = x + QK_K*ibl;
+        float sumx2 = 0;
+        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
+        float sigma2 = sumx2/QK_K;
+
+        for (int ib = 0; ib < QK_K/16; ++ib) {
+            const float * xb = xbl + 16*ib;
+            const float * qw = quant_weights + QK_K*ibl + 16*ib;
+            for (int i = 0; i < 16; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
+            for (int i = 0; i < 16; ++i) waux[i] = sqrtf(weight[i]);
+            for (int k = 0; k < 2; ++k) {
+                int nflip = 0;
+                uint8_t s = 0;
+                for (int i = 0; i < 8; ++i) {
+                    if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i];
+                    else {
+                        xval[8*k + i] = -xb[8*k + i]; ++nflip; s |= (1 << i);
+                    }
+                }
+                if (nflip%2) {
+                    int imin = 0; float min = weight[8*k+imin]*xb[8*k+imin]*xb[8*k+imin];
+                    for (int i = 1; i < 8; ++i) {
+                        float ax = weight[8*k+i]*xb[8*k+i]*xb[8*k+i];
+                        if (ax < min) {
+                            min = ax; imin = i;
+                        }
+                    }
+                    xval[8*k+imin] = -xval[8*k+imin];
+                    s ^= (1 << imin);
+                }
+                block_signs[k] = s & 127;
+            }
+            float max = xval[0];
+            for (int i = 1; i < 16; ++i) max = MAX(max, xval[i]);
+            if (max < GROUP_MAX_EPS) {
+                scales[ib] = 0;
+                memset(L, 0, 16);
+                continue;
+            }
+            float best = 0;
+            float scale = max/(2*kMaxQ-1);
+            is_on_grid[0] = is_on_grid[1] = true;
+            for (int is = -9; is <= 9; ++is) {
+                float id = (2*kMaxQ-1+is*0.1f)/max;
+                float this_scale = 1/id;
+                for (int k = 0; k < 2; ++k) {
+                    for (int i = 0; i < 8; ++i) {
+                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
+                        Laux[8*k+i] = MAX(0, MIN(kMaxQ-1, l));
+                    }
+                    uint16_t u = 0;
+                    for (int i = 0; i < 8; ++i) u |= (Laux[8*k+i] << 2*i);
+                    int grid_index = kmap_q2xs[u];
+                    is_on_grid_aux[k] = true;
+                    if (grid_index < 0) {
+                        is_on_grid_aux[k] = false;
+                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
+                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, this_scale, Laux + 8*k);
+                    }
+                }
+                float sumqx = 0, sumq2 = 0;
+                for (int i = 0; i < 16; ++i) {
+                    float w = weight[i];
+                    float q = 2*Laux[i] + 1;
+                    sumqx += w*xval[i]*q;
+                    sumq2 += w*q*q;
+                }
+                if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
+                    scale = sumqx/sumq2; best = scale*sumqx;
+                    for (int i = 0; i < 16; ++i) L[i] = Laux[i];
+                    for (int k = 0; k <  2; ++k) is_on_grid[k] = is_on_grid_aux[k];
+                }
+            }
+            int n_not_ongrid = 0;
+            for (int k = 0; k < 2; ++k) if (!is_on_grid[k]) ++n_not_ongrid;
+            if (n_not_ongrid > 0 && scale > 0) {
+                float id = 1/scale;
+                for (int k = 0; k < 2; ++k) {
+                    if (is_on_grid[k]) continue;
+                    uint16_t u = 0;
+                    for (int i = 0; i < 8; ++i) {
+                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
+                        l = MAX(0, MIN(kMaxQ-1, l));
+                        u |= (l << 2*i);
+                        L[8*k + i] = l;
+                    }
+                    int grid_index = kmap_q2xs[u];
+                    if (grid_index < 0) {
+                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
+                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, scale, L + 8*k);
+                    }
+                }
+                float sumqx = 0, sumq2 = 0;
+                for (int i = 0; i < 16; ++i) {
+                    float w = weight[i];
+                    float q = 2*L[i] + 1;
+                    sumqx += w*xval[i]*q;
+                    sumq2 += w*q*q;
+                }
+                if (sumq2 > 0) scale = sumqx/sumq2;
+            }
+            if (scale < 0) {
+                scale = -scale;
+                for (int k = 0; k < 2; ++k) block_signs[k] = (~block_signs[k]) & 127;
+            }
+            for (int k = 0; k < 2; ++k) {
+                uint16_t u = 0;
+                for (int i = 0; i < 8; ++i) u |= (L[8*k+i] << 2*i);
+                int grid_index = kmap_q2xs[u];
+                if (grid_index < 0) {
+                    printf("Oops: found point %u not on grid:", u);
+                    for (int i = 0; i < 8; ++i) printf(" %d", L[8*k+i]);
+                    printf("\n");
+                    GGML_ASSERT(false);
+                }
+                q2[2*ib+k] = grid_index | (block_signs[k] << 9);
+            }
+            GGML_ASSERT(scale >= 0);
+            scales[ib] = scale;
+            max_scale = MAX(max_scale, scale);
+        }
+
+        if (!max_scale) {
+            memset(y[ibl].qs, 0, QK_K/4);
+            continue;
+        }
+
+        float d = max_scale/31;
+        y[ibl].d = GGML_FP32_TO_FP16(d);
+        float id = 1/d;
+        for (int ib = 0; ib < QK_K/16; ++ib) {
+            int l = nearest_int(0.5f*(id*scales[ib]-1));
+            l = MAX(0, MIN(15, l));
+            if (ib%2 == 0) y[ibl].scales[ib/2] = l;
+            else y[ibl].scales[ib/2] |= (l << 4);
+        }
+        memcpy(y[ibl].qs, q2, QK_K/4);
+
+    }
+}
+
+size_t quantize_iq2_xxs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    GGML_ASSERT(n_per_row%QK_K == 0);
+    int64_t nblock = n_per_row/QK_K;
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_iq2_xxs_impl(src, qrow, n_per_row, quant_weights);
+        src += n_per_row;
+        qrow += nblock*sizeof(block_iq2_xxs);
+    }
+    return nrow * nblock * sizeof(block_iq2_xxs);
+}
+
+size_t quantize_iq2_xs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    GGML_ASSERT(n_per_row%QK_K == 0);
+    int64_t nblock = n_per_row/QK_K;
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_iq2_xs_impl(src, qrow, n_per_row, quant_weights);
+        src += n_per_row;
+        qrow += nblock*sizeof(block_iq2_xs);
+    }
+    return nrow * nblock * sizeof(block_iq2_xs);
+}
+
+//
+// ============================================= 3-bit using D4 lattice
+//
+
+typedef struct {
+    uint32_t * grid;
+    int      * map;
+    uint16_t * neighbours;
+} iq3_entry_t;
+
+static iq3_entry_t iq3_data[2] = {
+    {NULL, NULL, NULL},
+    {NULL, NULL, NULL},
+};
+
+static inline int iq3_data_index(int grid_size) {
+    (void)grid_size;
+    GGML_ASSERT(grid_size == 256 || grid_size == 512);
+    return grid_size == 256 ? 0 : 1;
+}
+
+static int iq3_compare_func(const void * left, const void * right) {
+    const int * l = (const int *)left;
+    const int * r = (const int *)right;
+    return l[0] < r[0] ? -1 : l[0] > r[0] ? 1 : l[1] < r[1] ? -1 : l[1] > r[1] ? 1 : 0;
+}
+
+void iq3xs_init_impl(int grid_size) {
+    const int gindex = iq3_data_index(grid_size);
+    if (iq3_data[gindex].grid) {
+        return;
+    }
+    static const uint16_t kgrid_256[256] = {
+            0,     2,     4,     9,    11,    15,    16,    18,    25,    34,    59,    61,    65,    67,    72,    74,
+           81,    85,    88,    90,    97,   108,   120,   128,   130,   132,   137,   144,   146,   153,   155,   159,
+          169,   175,   189,   193,   199,   200,   202,   213,   248,   267,   287,   292,   303,   315,   317,   321,
+          327,   346,   362,   413,   436,   456,   460,   462,   483,   497,   513,   515,   520,   522,   529,   531,
+          536,   538,   540,   551,   552,   576,   578,   585,   592,   594,   641,   643,   648,   650,   657,   664,
+          698,   704,   706,   720,   729,   742,   758,   769,   773,   808,   848,   852,   870,   889,   901,   978,
+          992,  1024,  1026,  1033,  1035,  1040,  1042,  1046,  1049,  1058,  1089,  1091,  1093,  1096,  1098,  1105,
+         1112,  1139,  1143,  1144,  1152,  1154,  1161,  1167,  1168,  1170,  1183,  1184,  1197,  1217,  1224,  1228,
+         1272,  1276,  1309,  1323,  1347,  1367,  1377,  1404,  1473,  1475,  1486,  1509,  1537,  1544,  1546,  1553,
+         1555,  1576,  1589,  1594,  1600,  1602,  1616,  1625,  1636,  1638,  1665,  1667,  1672,  1685,  1706,  1722,
+         1737,  1755,  1816,  1831,  1850,  1856,  1862,  1874,  1901,  1932,  1950,  1971,  2011,  2032,  2052,  2063,
+         2077,  2079,  2091,  2095,  2172,  2192,  2207,  2208,  2224,  2230,  2247,  2277,  2308,  2345,  2356,  2389,
+         2403,  2424,  2501,  2504,  2506,  2520,  2570,  2593,  2616,  2624,  2630,  2646,  2669,  2700,  2714,  2746,
+         2754,  2795,  2824,  2835,  2839,  2874,  2882,  2905,  2984,  3028,  3042,  3092,  3108,  3110,  3124,  3153,
+         3185,  3215,  3252,  3288,  3294,  3364,  3397,  3434,  3483,  3523,  3537,  3587,  3589,  3591,  3592,  3610,
+         3626,  3670,  3680,  3722,  3749,  3754,  3776,  3789,  3803,  3824,  3857,  3873,  3904,  3906,  3924,  3992,
+    };
+    static const uint16_t kgrid_512[512] = {
+            0,     1,     2,     5,     7,     8,     9,    10,    12,    14,    16,    17,    21,    27,    32,    34,
+           37,    39,    41,    43,    48,    50,    57,    60,    63,    64,    65,    66,    68,    72,    73,    77,
+           80,    83,    87,    89,    93,   100,   113,   117,   122,   128,   129,   133,   135,   136,   139,   142,
+          145,   149,   152,   156,   162,   165,   167,   169,   171,   184,   187,   195,   201,   205,   208,   210,
+          217,   219,   222,   228,   232,   234,   247,   249,   253,   256,   267,   271,   273,   276,   282,   288,
+          291,   297,   312,   322,   324,   336,   338,   342,   347,   353,   357,   359,   374,   379,   390,   393,
+          395,   409,   426,   441,   448,   450,   452,   464,   466,   470,   475,   488,   492,   512,   513,   514,
+          516,   520,   521,   523,   525,   527,   528,   530,   537,   540,   542,   556,   558,   561,   570,   576,
+          577,   579,   582,   584,   588,   593,   600,   603,   609,   616,   618,   632,   638,   640,   650,   653,
+          655,   656,   660,   666,   672,   675,   685,   688,   698,   705,   708,   711,   712,   715,   721,   727,
+          728,   732,   737,   754,   760,   771,   773,   778,   780,   793,   795,   802,   806,   808,   812,   833,
+          840,   843,   849,   856,   858,   873,   912,   916,   919,   932,   934,   961,   963,   968,   970,   977,
+          989,   993,  1010,  1016,  1024,  1025,  1027,  1029,  1031,  1032,  1034,  1036,  1038,  1041,  1043,  1047,
+         1048,  1050,  1057,  1059,  1061,  1064,  1066,  1079,  1080,  1083,  1085,  1088,  1090,  1096,  1099,  1103,
+         1106,  1109,  1113,  1116,  1122,  1129,  1153,  1156,  1159,  1169,  1171,  1176,  1183,  1185,  1195,  1199,
+         1209,  1212,  1216,  1218,  1221,  1225,  1234,  1236,  1241,  1243,  1250,  1256,  1270,  1281,  1287,  1296,
+         1299,  1306,  1309,  1313,  1338,  1341,  1348,  1353,  1362,  1375,  1376,  1387,  1400,  1408,  1410,  1415,
+         1425,  1453,  1457,  1477,  1481,  1494,  1496,  1507,  1512,  1538,  1545,  1547,  1549,  1551,  1554,  1561,
+         1563,  1565,  1570,  1572,  1575,  1577,  1587,  1593,  1601,  1603,  1605,  1612,  1617,  1619,  1632,  1648,
+         1658,  1662,  1664,  1674,  1680,  1690,  1692,  1704,  1729,  1736,  1740,  1745,  1747,  1751,  1752,  1761,
+         1763,  1767,  1773,  1787,  1795,  1801,  1806,  1810,  1817,  1834,  1840,  1844,  1857,  1864,  1866,  1877,
+         1882,  1892,  1902,  1915,  1934,  1953,  1985,  1987,  2000,  2002,  2013,  2048,  2052,  2058,  2064,  2068,
+         2071,  2074,  2081,  2088,  2104,  2114,  2119,  2121,  2123,  2130,  2136,  2141,  2147,  2153,  2157,  2177,
+         2179,  2184,  2189,  2193,  2203,  2208,  2223,  2226,  2232,  2244,  2249,  2251,  2256,  2258,  2265,  2269,
+         2304,  2306,  2324,  2335,  2336,  2361,  2373,  2375,  2385,  2418,  2443,  2460,  2480,  2504,  2509,  2520,
+         2531,  2537,  2562,  2568,  2572,  2578,  2592,  2596,  2599,  2602,  2614,  2620,  2625,  2627,  2629,  2634,
+         2641,  2650,  2682,  2688,  2697,  2707,  2712,  2718,  2731,  2754,  2759,  2760,  2775,  2788,  2793,  2805,
+         2811,  2817,  2820,  2832,  2842,  2854,  2890,  2902,  2921,  2923,  2978,  3010,  3012,  3026,  3081,  3083,
+         3085,  3097,  3099,  3120,  3136,  3152,  3159,  3188,  3210,  3228,  3234,  3245,  3250,  3256,  3264,  3276,
+         3281,  3296,  3349,  3363,  3378,  3392,  3395,  3420,  3440,  3461,  3488,  3529,  3531,  3584,  3588,  3591,
+         3600,  3602,  3614,  3616,  3628,  3634,  3650,  3657,  3668,  3683,  3685,  3713,  3716,  3720,  3726,  3729,
+         3736,  3753,  3778,  3802,  3805,  3819,  3841,  3845,  3851,  3856,  3880,  3922,  3938,  3970,  3993,  4032,
+    };
+
+    const int kmap_size = 4096;
+    const int nwant = grid_size == 256 ? 2 : 3;
+    const uint16_t * kgrid = grid_size == 256 ? kgrid_256 : kgrid_512;
+    uint32_t * kgrid_q3xs;
+    int      * kmap_q3xs;
+    uint16_t * kneighbors_q3xs;
+
+    //printf("================================================================= %s(grid_size = %d)\n", __func__, grid_size);
+    uint32_t * the_grid = (uint32_t *)malloc(grid_size*sizeof(uint32_t));
+    for (int k = 0; k < grid_size; ++k) {
+        int8_t * pos = (int8_t *)(the_grid + k);
+        for (int i = 0; i < 4; ++i) {
+            int l = (kgrid[k] >> 3*i) & 0x7;
+            pos[i] = 2*l + 1;
+        }
+    }
+    kgrid_q3xs = the_grid;
+    iq3_data[gindex].grid = the_grid;
+    kmap_q3xs = (int *)malloc(kmap_size*sizeof(int));
+    iq3_data[gindex].map = kmap_q3xs;
+    for (int i = 0; i < kmap_size; ++i) kmap_q3xs[i] = -1;
+    uint32_t aux32;
+    uint8_t * aux8 = (uint8_t *)&aux32;
+    for (int i = 0; i < grid_size; ++i) {
+        aux32 = kgrid_q3xs[i];
+        uint16_t index = 0;
+        for (int k=0; k<4; ++k) {
+            uint16_t q = (aux8[k] - 1)/2;
+            index |= (q << 3*k);
+        }
+        kmap_q3xs[index] = i;
+    }
+    int8_t pos[4];
+    int * dist2 = (int *)malloc(2*grid_size*sizeof(int));
+    int num_neighbors = 0, num_not_in_map = 0;
+    for (int i = 0; i < kmap_size; ++i) {
+        if (kmap_q3xs[i] >= 0) continue;
+        ++num_not_in_map;
+        for (int k = 0; k < 4; ++k) {
+            int l = (i >> 3*k) & 0x7;
+            pos[k] = 2*l + 1;
+        }
+        for (int j = 0; j < grid_size; ++j) {
+            const int8_t * pg = (const int8_t *)(kgrid_q3xs + j);
+            int d2 = 0;
+            for (int k = 0; k < 4; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]);
+            dist2[2*j+0] = d2;
+            dist2[2*j+1] = j;
+        }
+        qsort(dist2, grid_size, 2*sizeof(int), iq3_compare_func);
+        int n = 0; int d2 = dist2[0];
+        int nhave = 1;
+        for (int j = 0; j < grid_size; ++j) {
+            if (dist2[2*j] > d2) {
+                if (nhave == nwant) break;
+                d2 = dist2[2*j];
+                ++nhave;
+            }
+            ++n;
+        }
+        num_neighbors += n;
+    }
+    //printf("%s: %d neighbours in total\n", __func__, num_neighbors);
+    kneighbors_q3xs = (uint16_t *)malloc((num_neighbors + num_not_in_map)*sizeof(uint16_t));
+    iq3_data[gindex].neighbours = kneighbors_q3xs;
+    int counter = 0;
+    for (int i = 0; i < kmap_size; ++i) {
+        if (kmap_q3xs[i] >= 0) continue;
+        for (int k = 0; k < 4; ++k) {
+            int l = (i >> 3*k) & 0x7;
+            pos[k] = 2*l + 1;
+        }
+        for (int j = 0; j < grid_size; ++j) {
+            const int8_t * pg = (const int8_t *)(kgrid_q3xs + j);
+            int d2 = 0;
+            for (int k = 0; k < 4; ++k) d2 += (pg[k] - pos[k])*(pg[k] - pos[k]);
+            dist2[2*j+0] = d2;
+            dist2[2*j+1] = j;
+        }
+        qsort(dist2, grid_size, 2*sizeof(int), iq3_compare_func);
+        kmap_q3xs[i] = -(counter + 1);
+        int d2 = dist2[0];
+        uint16_t * start = &kneighbors_q3xs[counter++];
+        int n = 0, nhave = 1;
+        for (int j = 0; j < grid_size; ++j) {
+            if (dist2[2*j] > d2) {
+                if (nhave == nwant) break;
+                d2 = dist2[2*j];
+                ++nhave;
+            }
+            kneighbors_q3xs[counter++] = dist2[2*j+1];
+            ++n;
+        }
+        *start = n;
+    }
+    free(dist2);
+}
+
+void iq3xs_free_impl(int grid_size) {
+    GGML_ASSERT(grid_size == 256 || grid_size == 512);
+    const int gindex = iq3_data_index(grid_size);
+    if (iq3_data[gindex].grid) {
+        free(iq3_data[gindex].grid);       iq3_data[gindex].grid = NULL;
+        free(iq3_data[gindex].map);        iq3_data[gindex].map  = NULL;
+        free(iq3_data[gindex].neighbours); iq3_data[gindex].neighbours = NULL;
+    }
+}
+
+static int iq3_find_best_neighbour(const uint16_t * restrict neighbours, const uint32_t * restrict grid,
+        const float * restrict xval, const float * restrict weight, float scale, int8_t * restrict L) {
+    int num_neighbors = neighbours[0];
+    GGML_ASSERT(num_neighbors > 0);
+    float best_d2 = FLT_MAX;
+    int grid_index = -1;
+    for (int j = 1; j <= num_neighbors; ++j) {
+        const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
+        float d2 = 0;
+        for (int i = 0; i < 4; ++i) {
+            float q = pg[i];
+            float diff = scale*q - xval[i];
+            d2 += weight[i]*diff*diff;
+        }
+        if (d2 < best_d2) {
+            best_d2 = d2; grid_index = neighbours[j];
+        }
+    }
+    GGML_ASSERT(grid_index >= 0);
+    const int8_t * pg = (const int8_t *)(grid + grid_index);
+    for (int i = 0; i < 4; ++i) L[i] = (pg[i] - 1)/2;
+    return grid_index;
+}
+
+static void quantize_row_iq3_xxs_impl(int grid_size, const float * restrict x, void * restrict vy, int64_t n,
+        const float * restrict quant_weights) {
+
+    const int gindex = iq3_data_index(grid_size);
+
+    const uint32_t * kgrid_q3xs      = iq3_data[gindex].grid;
+    const int      * kmap_q3xs       = iq3_data[gindex].map;
+    const uint16_t * kneighbors_q3xs = iq3_data[gindex].neighbours;
+
+    //GGML_ASSERT(quant_weights   && "missing quantization weights");
+    GGML_ASSERT(kgrid_q3xs      && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kmap_q3xs       && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kneighbors_q3xs && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(n%QK_K == 0);
+
+    const int kMaxQ = 8;
+
+    const int64_t nbl = n/QK_K;
+
+    ggml_fp16_t * dh;
+    uint8_t * qs;
+    int block_size;
+    if (grid_size == 256) {
+        block_iq3_xxs * y = vy;
+        dh = &y->d;
+        qs = y->qs;
+        block_size = sizeof(block_iq3_xxs);
+    } else {
+        block_iq3_s * y = vy;
+        dh = &y->d;
+        qs = y->qs;
+        block_size = sizeof(block_iq3_s);
+    }
+    int quant_size = block_size - sizeof(ggml_fp16_t);
+
+    float scales[QK_K/32];
+    float weight[32];
+    float xval[32];
+    int8_t L[32];
+    int8_t Laux[32];
+    float  waux[32];
+    bool   is_on_grid[8];
+    bool   is_on_grid_aux[8];
+    uint8_t block_signs[8];
+    uint8_t q3[3*(QK_K/8)+QK_K/32];
+    uint32_t * scales_and_signs = (uint32_t *)(q3 + QK_K/4);
+    uint8_t  * qh = q3 + 3*(QK_K/8);
+
+    for (int ibl = 0; ibl < nbl; ++ibl) {
+
+        dh[0] = GGML_FP32_TO_FP16(0.f);
+        memset(q3, 0, 3*QK_K/8+QK_K/32);
+
+        float max_scale = 0;
+
+        const float * xbl = x + QK_K*ibl;
+        float sumx2 = 0;
+        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
+        float sigma2 = 2*sumx2/QK_K;
+
+        for (int ib = 0; ib < QK_K/32; ++ib) {
+            const float * xb = xbl + 32*ib;
+            if (quant_weights) {
+                const float * qw = quant_weights + QK_K*ibl + 32*ib;
+                for (int i = 0; i < 32; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
+            } else {
+                for (int i = 0; i < 32; ++i) weight[i] = xb[i]*xb[i];
+            }
+            for (int i = 0; i < 32; ++i) waux[i] = sqrtf(weight[i]);
+            for (int k = 0; k < 4; ++k) {
+                int nflip = 0;
+                uint8_t s = 0;
+                for (int i = 0; i < 8; ++i) {
+                    if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i];
+                    else {
+                        xval[8*k + i] = -xb[8*k + i]; ++nflip; s |= (1 << i);
+                    }
+                }
+                if (nflip%2) {
+                    int imin = 0; float min = weight[8*k+imin]*xb[8*k+imin]*xb[8*k+imin];
+                    for (int i = 1; i < 8; ++i) {
+                        float ax = weight[8*k+i]*xb[8*k+i]*xb[8*k+i];
+                        if (ax < min) {
+                            min = ax; imin = i;
+                        }
+                    }
+                    xval[8*k+imin] = -xval[8*k+imin];
+                    s ^= (1 << imin);
+                }
+                block_signs[k] = s & 127;
+            }
+            float max = xval[0];
+            for (int i = 1; i < 32; ++i) max = MAX(max, xval[i]);
+            if (max < GROUP_MAX_EPS_IQ3_XXS) {
+                scales[ib] = 0;
+                memset(L, 0, 32);
+                continue;
+            }
+            float best = 0;
+            float scale = max/(2*kMaxQ-1);
+            for (int is = -15; is <= 15; ++is) {
+                float id = (2*kMaxQ-1+is*0.2f)/max;
+                float this_scale = 1/id;
+                for (int k = 0; k < 8; ++k) {
+                    for (int i = 0; i < 4; ++i) {
+                        int l = nearest_int(0.5f*(id*xval[4*k+i]-1));
+                        Laux[4*k+i] = MAX(0, MIN(kMaxQ-1, l));
+                    }
+                    uint16_t u = 0;
+                    for (int i = 0; i < 4; ++i) u |= (Laux[4*k+i] << 3*i);
+                    int grid_index = kmap_q3xs[u];
+                    is_on_grid_aux[k] = true;
+                    if (grid_index < 0) {
+                        is_on_grid_aux[k] = false;
+                        const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1;
+                        grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, this_scale, Laux + 4*k);
+                    }
+                }
+                float sumqx = 0, sumq2 = 0;
+                for (int i = 0; i < 32; ++i) {
+                    float w = weight[i];
+                    float q = 2*Laux[i] + 1;
+                    sumqx += w*xval[i]*q;
+                    sumq2 += w*q*q;
+                }
+                if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
+                    scale = sumqx/sumq2; best = scale*sumqx;
+                    for (int i = 0; i < 32; ++i) L[i] = Laux[i];
+                    for (int k = 0; k <  8; ++k) is_on_grid[k] = is_on_grid_aux[k];
+                }
+            }
+            int n_not_ongrid = 0;
+            for (int k = 0; k < 8; ++k) if (!is_on_grid[k]) ++n_not_ongrid;
+            if (n_not_ongrid > 0 && scale > 0) {
+                float id = 1/scale;
+                for (int k = 0; k < 8; ++k) {
+                    if (is_on_grid[k]) continue;
+                    uint16_t u = 0;
+                    for (int i = 0; i < 4; ++i) {
+                        int l = nearest_int(0.5f*(id*xval[4*k+i]-1));
+                        l = MAX(0, MIN(kMaxQ-1, l));
+                        u |= (l << 3*i);
+                    }
+                    int grid_index = kmap_q3xs[u];
+                    if (grid_index < 0) {
+                        const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1;
+                        grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, scale, L + 4*k);
+                    }
+                    const int8_t * pg = (const int8_t *)(kgrid_q3xs + grid_index);
+                    for (int i = 0; i < 4; ++i) L[4*k+i] = (pg[i] - 1)/2;
+                }
+                float sumqx = 0, sumq2 = 0;
+                for (int i = 0; i < 32; ++i) {
+                    float w = weight[i];
+                    float q = 2*L[i] + 1;
+                    sumqx += w*xval[i]*q;
+                    sumq2 += w*q*q;
+                }
+                if (sumq2 > 0) scale = sumqx/sumq2;
+            }
+            if (scale < 0) {
+                // This should never happen, but just in case, flip scale so that it is positive (we use uint's to encode the scale)
+                // and correspondingly flip quant signs.
+                scale = -scale;
+                for (int k = 0; k < 4; ++k) block_signs[k] = (~block_signs[k]) & 127;
+            }
+            for (int k = 0; k < 8; ++k) {
+                uint16_t u = 0;
+                for (int i = 0; i < 4; ++i) u |= (L[4*k+i] << 3*i);
+                int grid_index = kmap_q3xs[u];
+                if (grid_index < 0) {
+                    printf("Oops: found point %u not on grid:", u);
+                    for (int i = 0; i < 4; ++i) printf(" %d", L[4*k+i]);
+                    printf("\n");
+                    GGML_ASSERT(false);
+                }
+                if (grid_size == 256) {
+                    q3[8*ib+k] = grid_index;
+                } else {
+                    q3[8*ib+k] = grid_index & 255;
+                    qh[ib] |= ((grid_index >> 8) << k);
+                }
+
+            }
+            scales_and_signs[ib] = block_signs[0] | (block_signs[1] << 7) | (block_signs[2] << 14) | (block_signs[3] << 21);
+            GGML_ASSERT(scale >= 0);
+            scales[ib] = scale;
+            max_scale = MAX(max_scale, scale);
+        }
+
+        if (!max_scale) {
+            memset(qs, 0, quant_size);
+            dh += block_size/sizeof(ggml_fp16_t);
+            qs += block_size;
+            continue;
+        }
+
+        float d = max_scale/31;
+        dh[0] = GGML_FP32_TO_FP16(d * 1.0125f);  // small improvement via this fudge factor
+        float id = 1/d;
+        for (int ib = 0; ib < QK_K/32; ++ib) {
+            int l = nearest_int(0.5f*(id*scales[ib]-1));
+            l = MAX(0, MIN(15, l));
+            scales_and_signs[ib] |= ((uint32_t)l << 28);
+        }
+        memcpy(qs, q3, quant_size);
+
+        dh += block_size/sizeof(ggml_fp16_t);
+        qs += block_size;
+
+    }
+}
+
+size_t quantize_iq3_xxs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    GGML_ASSERT(n_per_row%QK_K == 0);
+    int64_t nblock = n_per_row/QK_K;
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_iq3_xxs_impl(256, src, qrow, n_per_row, quant_weights);
+        src += n_per_row;
+        qrow += nblock*sizeof(block_iq3_xxs);
+    }
+    return nrow * nblock * sizeof(block_iq3_xxs);
+}
+
+void quantize_row_iq3_xxs(const float * restrict x, void * restrict vy, int64_t k) {
+    assert(k % QK_K == 0);
+    block_iq3_xxs * restrict y = vy;
+    quantize_row_iq3_xxs_reference(x, y, k);
+}
+
+void quantize_row_iq3_xxs_reference(const float * restrict x, block_iq3_xxs * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    quantize_row_iq3_xxs_impl(256, x, y, k, NULL);
+}
+
+static void quantize_row_iq3_s_impl(int block_size, const float * restrict x, void * restrict vy, int n,
+        const float * restrict quant_weights,
+        float   * scales,
+        float   * weight,
+        float   * xval,
+        int8_t  * L,
+        int8_t  * Laux,
+        float   * waux,
+        bool    * is_on_grid,
+        bool    * is_on_grid_aux,
+        uint8_t * block_signs) {
+
+    const int gindex = iq3_data_index(512);
+
+    const uint32_t * kgrid_q3xs      = iq3_data[gindex].grid;
+    const int      * kmap_q3xs       = iq3_data[gindex].map;
+    const uint16_t * kneighbors_q3xs = iq3_data[gindex].neighbours;
+
+    //GGML_ASSERT(quant_weights   && "missing quantization weights");
+    GGML_ASSERT(kgrid_q3xs      && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kmap_q3xs       && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kneighbors_q3xs && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(n%QK_K == 0);
+
+    const int kMaxQ = 8;
+
+    const int64_t nbl = n/QK_K;
+
+    block_iq3_s * y = vy;
+
+    const int bs4 = block_size/4;
+    const int bs8 = block_size/8;
+
+    for (int ibl = 0; ibl < nbl; ++ibl) {
+
+        memset(&y[ibl], 0, sizeof(block_iq3_s));
+        y[ibl].d = GGML_FP32_TO_FP16(0.f);
+
+        uint8_t * qs = y[ibl].qs;
+        uint8_t * qh = y[ibl].qh;
+        uint8_t * signs = y[ibl].signs;
+
+        float max_scale = 0;
+
+        const float * xbl = x + QK_K*ibl;
+        float sumx2 = 0;
+        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
+        float sigma2 = 2*sumx2/QK_K;
+
+        for (int ib = 0; ib < QK_K/block_size; ++ib) {
+            const float * xb = xbl + block_size*ib;
+            if (quant_weights) {
+                const float * qw = quant_weights + QK_K*ibl + block_size*ib;
+                for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
+            } else {
+                for (int i = 0; i < block_size; ++i) weight[i] = xb[i]*xb[i];
+            }
+            for (int i = 0; i < block_size; ++i) waux[i] = sqrtf(weight[i]);
+            for (int k = 0; k < bs8; ++k) {
+                uint8_t s = 0;
+                for (int i = 0; i < 8; ++i) {
+                    if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i];
+                    else {
+                        xval[8*k + i] = -xb[8*k + i]; s |= (1 << i);
+                    }
+                }
+                block_signs[k] = s;
+            }
+            float max = xval[0];
+            for (int i = 1; i < block_size; ++i) max = MAX(max, xval[i]);
+            if (!max) {
+                scales[ib] = 0;
+                continue;
+            }
+            float best = 0;
+            float scale = max/(2*kMaxQ-1);
+            for (int k = 0; k < bs4; ++k) is_on_grid[k] = false;
+            for (int is = -9; is <= 9; ++is) {
+                float id = (2*kMaxQ-1+is*0.2f)/max;
+                float this_scale = 1/id;
+                for (int k = 0; k < bs4; ++k) {
+                    for (int i = 0; i < 4; ++i) {
+                        int l = nearest_int(0.5f*(id*xval[4*k+i]-1));
+                        Laux[4*k+i] = MAX(0, MIN(kMaxQ-1, l));
+                    }
+                    uint16_t u = 0;
+                    for (int i = 0; i < 4; ++i) u |= (Laux[4*k+i] << 3*i);
+                    int grid_index = kmap_q3xs[u];
+                    is_on_grid_aux[k] = true;
+                    if (grid_index < 0) {
+                        is_on_grid_aux[k] = false;
+                        const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1;
+                        grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, this_scale, Laux + 4*k);
+                    }
+                }
+                float sumqx = 0, sumq2 = 0;
+                for (int i = 0; i < block_size; ++i) {
+                    float w = weight[i];
+                    float q = 2*Laux[i] + 1;
+                    sumqx += w*xval[i]*q;
+                    sumq2 += w*q*q;
+                }
+                if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
+                    scale = sumqx/sumq2; best = scale*sumqx;
+                    for (int i = 0; i < block_size; ++i) L[i] = Laux[i];
+                    for (int k = 0; k < bs4; ++k) is_on_grid[k] = is_on_grid_aux[k];
+                }
+            }
+            int n_not_ongrid = 0;
+            for (int k = 0; k < bs4; ++k) if (!is_on_grid[k]) ++n_not_ongrid;
+            if (n_not_ongrid > 0 && scale > 0) {
+                float id = 1/scale;
+                for (int k = 0; k < bs4; ++k) {
+                    //if (is_on_grid[k]) continue;
+                    uint16_t u = 0;
+                    for (int i = 0; i < 4; ++i) {
+                        int l = nearest_int(0.5f*(id*xval[4*k+i]-1));
+                        l = MAX(0, MIN(kMaxQ-1, l));
+                        u |= (l << 3*i);
+                    }
+                    int grid_index = kmap_q3xs[u];
+                    if (grid_index < 0) {
+                        const uint16_t * neighbours = kneighbors_q3xs - kmap_q3xs[u] - 1;
+                        grid_index = iq3_find_best_neighbour(neighbours, kgrid_q3xs, xval + 4*k, waux + 4*k, scale, L + 4*k);
+                    }
+                    const int8_t * pg = (const int8_t *)(kgrid_q3xs + grid_index);
+                    for (int i = 0; i < 4; ++i) L[4*k+i] = (pg[i] - 1)/2;
+                }
+                float sumqx = 0, sumq2 = 0;
+                for (int i = 0; i < block_size; ++i) {
+                    float w = weight[i];
+                    float q = 2*L[i] + 1;
+                    sumqx += w*xval[i]*q;
+                    sumq2 += w*q*q;
+                }
+                if (sumq2 > 0) scale = sumqx/sumq2;
+            }
+            if (scale < 0) {
+                // This should never happen, but just in case, flip scale so that it is positive (we use uint's to encode the scale)
+                // and correspondingly flip quant signs.
+                scale = -scale;
+                for (int k = 0; k < bs8; ++k) block_signs[k] = ~block_signs[k];
+            }
+            for (int k = 0; k < bs4; ++k) {
+                uint16_t u = 0;
+                for (int i = 0; i < 4; ++i) u |= (L[4*k+i] << 3*i);
+                int grid_index = kmap_q3xs[u];
+                if (grid_index < 0) {
+                    printf("Oops: found point %u not on grid:", u);
+                    for (int i = 0; i < 4; ++i) printf(" %d", L[4*k+i]);
+                    printf("\n");
+                    GGML_ASSERT(false);
+                }
+                qs[k] = grid_index & 255;
+                qh[(ib*bs4+k)/8] |= ((grid_index >> 8) << ((ib*bs4+k)%8));
+            }
+            qs += bs4;
+            for (int k = 0; k < bs8; ++k) signs[k] = block_signs[k];
+            signs += bs8;
+            GGML_ASSERT(scale >= 0);
+            scales[ib] = scale;
+            max_scale = MAX(max_scale, scale);
+        }
+
+        if (!max_scale) {
+            continue;
+        }
+
+        float d = max_scale/31;
+        y[ibl].d = GGML_FP32_TO_FP16(d * 1.033f);
+        float id = 1/d;
+        for (int ib = 0; ib < QK_K/block_size; ib += 2) {
+            int l1 = nearest_int(0.5f*(id*scales[ib+0]-1));
+            l1 = MAX(0, MIN(15, l1));
+            int l2 = nearest_int(0.5f*(id*scales[ib+1]-1));
+            l2 = MAX(0, MIN(15, l2));
+            y[ibl].scales[ib/2] = l1 | (l2 << 4);
+        }
+
+    }
+}
+
+#define IQ3S_BLOCK_SIZE 32
+size_t quantize_iq3_s(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    GGML_ASSERT(n_per_row%QK_K == 0);
+    int64_t nblock = n_per_row/QK_K;
+    float scales[QK_K/IQ3S_BLOCK_SIZE];
+    float weight[IQ3S_BLOCK_SIZE];
+    float xval[IQ3S_BLOCK_SIZE];
+    int8_t L[IQ3S_BLOCK_SIZE];
+    int8_t Laux[IQ3S_BLOCK_SIZE];
+    float  waux[IQ3S_BLOCK_SIZE];
+    bool   is_on_grid[IQ3S_BLOCK_SIZE/4];
+    bool   is_on_grid_aux[IQ3S_BLOCK_SIZE/4];
+    uint8_t block_signs[IQ3S_BLOCK_SIZE/8];
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_iq3_s_impl(IQ3S_BLOCK_SIZE, src, qrow, n_per_row, quant_weights,
+                scales, weight, xval, L, Laux, waux, is_on_grid, is_on_grid_aux, block_signs);
+        src += n_per_row;
+        qrow += nblock*sizeof(block_iq3_s);
+    }
+    return nrow * nblock * sizeof(block_iq3_s);
+}
+
+void quantize_row_iq3_s(const float * restrict x, void * restrict vy, int64_t k) {
+    assert(k % QK_K == 0);
+    block_iq3_s * restrict y = vy;
+    quantize_row_iq3_s_reference(x, y, k);
+}
+
+void quantize_row_iq3_s_reference(const float * restrict x, block_iq3_s * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    quantize_iq3_s(x, y, 1, k, NULL);
+}
+
+
+// =================================== 1.5 bpw ===================================================
+
+static int iq1_find_best_neighbour(const uint16_t * restrict neighbours, const uint64_t * restrict grid,
+        const float * restrict xval, const float * restrict weight, float * scale, int8_t * restrict L, int ngrid) {
+    int num_neighbors = neighbours[0];
+    GGML_ASSERT(num_neighbors > 0);
+    float best_score = -FLT_MAX;
+    int grid_index = -1;
+    for (int j = 1; j <= num_neighbors; ++j) {
+        const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
+        float sumqx = 0, sumq2 = 0;
+        for (int i = 0; i < 8; ++i) {
+            float q = (pg[i] - 3)/2;
+            float w = weight[i];
+            sumqx += w*q*xval[i];
+            sumq2 += w*q*q;
+        }
+        if (sumqx > 0 && sumq2 > 0 && sumqx*sumqx > best_score*sumq2) {
+            *scale = sumqx/sumq2; best_score = *scale * sumqx;
+            grid_index = neighbours[j];
+        }
+    }
+    if (grid_index < 0) {
+        for (int i = 0; i < ngrid; ++i) {
+            const int8_t * grid_i = (const int8_t *)(grid + i);
+            float sumqx = 0, sumq2 = 0;
+            for (int j = 0; j < 8; ++j) {
+                float w = weight[j];
+                float q = (grid_i[j] - 3)/2;
+                sumqx += w*q*xval[j];
+                sumq2 += w*q*q;
+            }
+            if (sumqx > 0 && sumq2 > 0 && sumqx*sumqx > best_score*sumq2) {
+                *scale = sumqx/sumq2; best_score = *scale*sumqx;
+                grid_index = i;
+            }
+        }
+    }
+    if (grid_index < 0) {
+        printf("Oops, did not find grid point\n");
+        printf("Have %d neighbours\n", num_neighbors);
+        for (int j = 1; j <= num_neighbors; ++j) {
+            const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
+            float sumqx = 0, sumq2 = 0;
+            for (int i = 0; i < 8; ++i) {
+                float q = (pg[i] - 3)/2;
+                float w = weight[i];
+                sumqx += w*q*xval[i];
+                sumq2 += w*q*q;
+            }
+            printf("    neighbour %d: sumqx = %g sumq2 = %g\n", j, (double)sumqx, (double)sumq2);
+        }
+    }
+    GGML_ASSERT(grid_index >= 0);
+    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+    *scale *= 1.05f;  // This is a fudge factor. Don't ask me why it improves the result.
+    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+    const int8_t * pg = (const int8_t *)(grid + grid_index);
+    for (int i = 0; i < 8; ++i) L[i] = (pg[i] - 1)/2;
+    return grid_index;
+}
+
+static int iq1_find_best_neighbour2(const uint16_t * restrict neighbours, const uint64_t * restrict grid,
+        const float * restrict xval, const float * restrict weight, float scale, const float * restrict xg, int8_t * restrict L, int ngrid) {
+    int num_neighbors = neighbours[0];
+    GGML_ASSERT(num_neighbors > 0);
+    float best_score = FLT_MAX;
+    int grid_index = -1;
+    for (int j = 1; j <= num_neighbors; ++j) {
+        const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
+        float d2 = 0;
+        for (int i = 0; i < 8; ++i) {
+            float q = xg[(pg[i] - 1)/2];
+            float w = weight[i];
+            float diff = scale*q - xval[i];
+            d2 += w*diff*diff;
+        }
+        if (d2 < best_score) {
+            best_score = d2;
+            grid_index = neighbours[j];
+        }
+    }
+    if (grid_index < 0) {
+        for (int i = 0; i < ngrid; ++i) {
+            const int8_t * grid_i = (const int8_t *)(grid + i);
+            float d2 = 0;
+            for (int j = 0; j < 8; ++j) {
+                float w = weight[j];
+                float q = xg[(grid_i[j] - 1)/2];
+                float diff = scale*q - xval[i];
+                d2 += w*diff*diff;
+            }
+            if (d2 < best_score) {
+                best_score = d2;
+                grid_index = i;
+            }
+        }
+    }
+    if (grid_index < 0) {
+        printf("Oops, did not find grid point\n");
+        printf("Have %d neighbours\n", num_neighbors);
+        for (int j = 1; j <= num_neighbors; ++j) {
+            const int8_t * pg = (const int8_t *)(grid + neighbours[j]);
+            float sumqx = 0, sumq2 = 0;
+            for (int i = 0; i < 8; ++i) {
+                float q = xg[(pg[i] - 1)/2];
+                float w = weight[i];
+                sumqx += w*q*xval[i];
+                sumq2 += w*q*q;
+            }
+            printf("    neighbour %d: sumqx = %g sumq2 = %g\n", j, (double)sumqx, (double)sumq2);
+        }
+    }
+    GGML_ASSERT(grid_index >= 0);
+    const int8_t * pg = (const int8_t *)(grid + grid_index);
+    for (int i = 0; i < 8; ++i) L[i] = (pg[i] - 1)/2;
+    return grid_index;
+}
+
+static int iq1_sort_helper(const void * left, const void * right) {
+    const float * l = left;
+    const float * r = right;
+    return *l < *r ? -1 : *l > *r ? 1 : 0;
+}
+
+#define IQ1S_BLOCK_SIZE 32
+#define IQ1M_BLOCK_SIZE 16
+static void quantize_row_iq1_s_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights,
+        float    * scales,
+        float    * weight,
+        float    * sumx,
+        float    * sumw,
+        float    * pairs,
+        int8_t   * L,
+        uint16_t * index,
+        int8_t   * shifts) {
+
+    const int gindex = iq2_data_index(GGML_TYPE_IQ1_S);
+
+    const uint64_t * kgrid_q2xs      = iq2_data[gindex].grid;
+    const int      * kmap_q2xs       = iq2_data[gindex].map;
+    const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours;
+
+    GGML_ASSERT(quant_weights   && "missing quantization weights");
+    GGML_ASSERT(kgrid_q2xs      && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kmap_q2xs       && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(n%QK_K == 0);
+
+    block_iq1_s * y = vy;
+
+    const int64_t nbl = n/QK_K;
+
+    const int block_size = IQ1S_BLOCK_SIZE;
+
+    const float x_p[3] = {-1 + IQ1S_DELTA,  IQ1S_DELTA, 1 + IQ1S_DELTA};
+    const float x_m[3] = {-1 - IQ1S_DELTA, -IQ1S_DELTA, 1 - IQ1S_DELTA};
+
+
+    int * idx = (int *)(pairs + 1);
+
+    for (int ibl = 0; ibl < nbl; ++ibl) {
+
+        y[ibl].d = GGML_FP32_TO_FP16(0.f);
+        memset(y[ibl].qs, 0, QK_K/8);
+        memset(y[ibl].qh, 0, QK_K/16);
+
+        float max_scale = 0;
+
+        const float * xbl = x + QK_K*ibl;
+        float sumx2 = 0;
+        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
+        float sigma2 = 2*sumx2/QK_K;
+
+        for (int ib = 0; ib < QK_K/block_size; ++ib) {
+            const float * xb = xbl + block_size*ib;
+            const float * qw = quant_weights + QK_K*ibl + block_size*ib;
+            for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
+            float max = fabsf(xb[0]);
+            for (int i = 1; i < block_size; ++i) max = MAX(max, fabsf(xb[i]));
+            if (max < GROUP_MAX_EPS_IQ1_S) {
+                scales[ib] = 0;
+                memset(L, 1, block_size);
+                continue;
+            }
+            // Here we solve exactly the sum of squared difference (SSD) weighted minimization problem.
+            // With just 3 allowed quant values (-1, 0, 1), we can search exhaustively for the two
+            // boundaries that split the weights xb[i] into 3 groups. To do so, we sort the weights
+            // in ascending order, compute Si = sum[weight[j] xb[j], j = 0...i] and
+            // Wi = sum[weight[j], j = 0...i], and use these to quckly get get the optimum scale
+            // for each possible and score for each split.
+            for (int j = 0; j < block_size; ++j) {
+                pairs[2*j] = xb[j];
+                idx[2*j] = j;
+            }
+            qsort(pairs, block_size, 2*sizeof(float), iq1_sort_helper);
+            {
+                sumx[0] = sumw[0] = 0;
+                for (int j = 0; j < block_size; ++j) {
+                    int i = idx[2*j];
+                    sumx[j+1] = sumx[j] + weight[i]*xb[i];
+                    sumw[j+1] = sumw[j] + weight[i];
+                }
+            }
+            float best_score = -FLT_MIN, scale = max;
+            int besti1 = -1, besti2 = -1, best_shift = 0;
+            for (int i1 = 0; i1 <= block_size; ++i1) {
+                for (int i2 = i1; i2 <= block_size; ++i2) {
+                    float sumqx = (sumx[i1] - sumx[0])*x_p[0] + (sumx[i2] - sumx[i1])*x_p[1] + (sumx[block_size] - sumx[i2])*x_p[2];
+                    float sumq2 = (sumw[i1] - sumw[0])*x_p[0]*x_p[0] + (sumw[i2] - sumw[i1])*x_p[1]*x_p[1] + (sumw[block_size] - sumw[i2])*x_p[2]*x_p[2];
+                    if (sumq2 > 0 && sumqx*sumqx > best_score*sumq2) {
+                        scale = sumqx/sumq2; best_score = scale*sumqx;
+                        besti1 = i1; besti2 = i2; best_shift = 1;
+                    }
+                    sumqx = (sumx[i1] - sumx[0])*x_m[0] + (sumx[i2] - sumx[i1])*x_m[1] + (sumx[block_size] - sumx[i2])*x_m[2];
+                    sumq2 = (sumw[i1] - sumw[0])*x_m[0]*x_m[0] + (sumw[i2] - sumw[i1])*x_m[1]*x_m[1] + (sumw[block_size] - sumw[i2])*x_m[2]*x_m[2];
+                    if (sumq2 > 0 && sumqx*sumqx > best_score*sumq2) {
+                        scale = sumqx/sumq2; best_score = scale*sumqx;
+                        besti1 = i1; besti2 = i2; best_shift = -1;
+                    }
+                }
+            }
+            GGML_ASSERT(besti1 >= 0 && besti2 >= 0 && best_shift != 0);
+            for (int j =      0; j < besti1; ++j) L[idx[2*j]] = 0;
+            for (int j = besti1; j < besti2; ++j) L[idx[2*j]] = 1;
+            for (int j = besti2; j < block_size; ++j) L[idx[2*j]] = 2;
+            if (scale < 0) {
+                for (int j = 0; j < block_size; ++j) L[j] = 2 - L[j];
+                scale = -scale; best_shift = -best_shift;
+            }
+            bool all_on_grid = true;
+            const float * xx = best_shift == 1 ? x_p : x_m;
+            for (int k = 0; k < block_size/8; ++k) {
+                uint16_t u = 0;
+                for (int j = 0; j < 8; ++j) u |= (L[8*k+j] << 2*j);
+                int grid_index = kmap_q2xs[u];
+                if (grid_index < 0) {
+                    all_on_grid = false;
+                    const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
+                    grid_index = iq1_find_best_neighbour2(neighbours, kgrid_q2xs, xb + 8*k, weight + 8*k, scale, xx, L + 8*k, NGRID_IQ1S);
+                    GGML_ASSERT(grid_index >= 0);
+                }
+                index[k] = grid_index;
+            }
+            if (!all_on_grid) {
+                float sumqx = 0, sumq2 = 0;
+                for (int k = 0; k < block_size/8; ++k) {
+                    const int8_t * pg = (const int8_t *)(kgrid_q2xs + index[k]);
+                    for (int j = 0; j < 8; ++j) {
+                        float w = weight[8*k + j];
+                        float q = xx[(pg[j] - 1)/2];
+                        sumqx += w*q*xb[8*k+j];
+                        sumq2 += w*q*q;
+                    }
+                }
+                if (sumqx > 0 && sumq2 > 0) scale = sumqx/sumq2;
+            }
+            uint16_t h = 0;
+            for (int k = 0; k < block_size/8; ++k) {
+                y[ibl].qs[(block_size/8)*ib + k] = index[k] & 255;
+                h |= (index[k] >> 8) << 3*k;
+            }
+            y[ibl].qh[ib] = h;
+            GGML_ASSERT(scale >= 0);
+            scales[ib] = scale;
+            shifts[ib] = best_shift;
+            max_scale = MAX(max_scale, scale);
+        }
+
+        if (!max_scale) {
+            continue;
+        }
+
+        float d = max_scale/15;
+        y[ibl].d = GGML_FP32_TO_FP16(d*1.125f); // 1.125f is another fudge factor. Don't ask me why it is needed.
+        float id = 1/d;
+        for (int ib = 0; ib < QK_K/block_size; ++ib) {
+            int l = nearest_int(0.5f*(id*scales[ib]-1));
+            l = MAX(0, MIN(7, l));
+            if (shifts[ib] == -1) l |= 8;
+            y[ibl].qh[ib] |= (l << 12);
+        }
+    }
+}
+
+size_t quantize_iq1_s(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    GGML_ASSERT(n_per_row%QK_K == 0);
+    float  scales[QK_K/IQ1S_BLOCK_SIZE];
+    float  weight[IQ1S_BLOCK_SIZE];
+    int8_t L[IQ1S_BLOCK_SIZE];
+    float  sumx[IQ1S_BLOCK_SIZE+1];
+    float  sumw[IQ1S_BLOCK_SIZE+1];
+    float  pairs[2*IQ1S_BLOCK_SIZE];
+    uint16_t index[IQ1S_BLOCK_SIZE/8];
+    int8_t shifts[QK_K/IQ1S_BLOCK_SIZE];
+    int64_t nblock = n_per_row/QK_K;
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_iq1_s_impl(src, qrow, n_per_row, quant_weights, scales, weight, sumx, sumw, pairs, L, index, shifts);
+        src += n_per_row;
+        qrow += nblock*sizeof(block_iq1_s);
+    }
+    return nrow * nblock * sizeof(block_iq1_s);
+}
+
+static void quantize_row_iq1_m_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights,
+        float    * scales,
+        float    * weight,
+        float    * pairs,
+        int8_t   * L,
+        uint16_t * index,
+        int8_t   * shifts) {
+
+    const int gindex = iq2_data_index(GGML_TYPE_IQ1_M);
+
+    const uint64_t * kgrid_q2xs      = iq2_data[gindex].grid;
+    const int      * kmap_q2xs       = iq2_data[gindex].map;
+    const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours;
+
+    //GGML_ASSERT(quant_weights   && "missing quantization weights");
+    GGML_ASSERT(kgrid_q2xs      && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kmap_q2xs       && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(n%QK_K == 0);
+
+    block_iq1_m * y = vy;
+
+    const int64_t nbl = n/QK_K;
+
+    const int block_size = IQ1M_BLOCK_SIZE;
+
+    const float x_p[3] = {-1 + IQ1M_DELTA,  IQ1M_DELTA, 1 + IQ1M_DELTA};
+    const float x_m[3] = {-1 - IQ1M_DELTA, -IQ1M_DELTA, 1 - IQ1M_DELTA};
+    const uint8_t masks[4] = {0x00, 0x80, 0x08, 0x88};
+
+    int * idx = (int *)(pairs + 1);
+
+    float sumqx[4], sumq2[4];
+
+    iq1m_scale_t s;
+    const float * xx;
+
+    for (int ibl = 0; ibl < nbl; ++ibl) {
+        memset(y[ibl].qs, 0, QK_K/8);
+        memset(y[ibl].qh, 0, QK_K/16);
+        memset(y[ibl].scales, 0, QK_K/32);
+
+        float max_scale = 0;
+
+        const float * xbl = x + QK_K*ibl;
+        float sumx2 = 0;
+        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
+        float sigma2 = 2*sumx2/QK_K;
+
+        for (int ib = 0; ib < QK_K/block_size; ++ib) {
+            const float * xb = xbl + block_size*ib;
+            if (quant_weights) {
+                const float * qw = quant_weights + QK_K*ibl + block_size*ib;
+                for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
+            } else {
+                for (int i = 0; i < block_size; ++i) weight[i] = xb[i]*xb[i];
+            }
+            float max = fabsf(xb[0]);
+            for (int i = 1; i < block_size; ++i) max = MAX(max, fabsf(xb[i]));
+            if (max < GROUP_MAX_EPS_IQ1_M) {
+                scales[ib] = 0;
+                memset(L, 1, block_size);
+                continue;
+            }
+            // Here we solve exactly the sum of squared difference (SSD) weighted minimization problem.
+            // With just 3 allowed quant values (-1, 0, 1), we can search exhaustively for the two
+            // boundaries that split the weights xb[i] into 3 groups. To do so, we sort the weights
+            // in ascending order, compute Si = sum[weight[j] xb[j], j = 0...i] and
+            // Wi = sum[weight[j], j = 0...i], and use these to quckly get get the optimum scale
+            // for each possible and score for each split.
+            for (int j = 0; j < block_size; ++j) {
+                pairs[2*j] = xb[j];
+                idx[2*j] = j;
+            }
+            qsort(pairs, block_size, 2*sizeof(float), iq1_sort_helper);
+            float best_score = -FLT_MIN, scale = max;
+            int besti1 = -1, besti2 = -1, best_k = -1;
+            // 0: +, +
+            // 1: +, -
+            // 2: -, +
+            // 3: -, -
+            for (int i1 = 0; i1 <= block_size; ++i1) {
+                for (int i2 = i1; i2 <= block_size; ++i2) {
+                    memset(sumqx, 0, 4*sizeof(float));
+                    memset(sumq2, 0, 4*sizeof(float));
+                    for (int j = 0; j < i1; ++j) {
+                        int i = idx[2*j];
+                        if (i < block_size/2) {
+                            sumqx[0] += weight[i]*x_p[0]*xb[i];
+                            sumqx[1] += weight[i]*x_p[0]*xb[i];
+                            sumqx[2] += weight[i]*x_m[0]*xb[i];
+                            sumqx[3] += weight[i]*x_m[0]*xb[i];
+                            sumq2[0] += weight[i]*x_p[0]*x_p[0];
+                            sumq2[1] += weight[i]*x_p[0]*x_p[0];
+                            sumq2[2] += weight[i]*x_m[0]*x_m[0];
+                            sumq2[3] += weight[i]*x_m[0]*x_m[0];
+                        } else {
+                            sumqx[0] += weight[i]*x_p[0]*xb[i];
+                            sumqx[2] += weight[i]*x_p[0]*xb[i];
+                            sumqx[1] += weight[i]*x_m[0]*xb[i];
+                            sumqx[3] += weight[i]*x_m[0]*xb[i];
+                            sumq2[0] += weight[i]*x_p[0]*x_p[0];
+                            sumq2[2] += weight[i]*x_p[0]*x_p[0];
+                            sumq2[1] += weight[i]*x_m[0]*x_m[0];
+                            sumq2[3] += weight[i]*x_m[0]*x_m[0];
+                        }
+                    }
+                    for (int j = i1; j < i2; ++j) {
+                        int i = idx[2*j];
+                        if (i < block_size/2) {
+                            sumqx[0] += weight[i]*x_p[1]*xb[i];
+                            sumqx[1] += weight[i]*x_p[1]*xb[i];
+                            sumqx[2] += weight[i]*x_m[1]*xb[i];
+                            sumqx[3] += weight[i]*x_m[1]*xb[i];
+                            sumq2[0] += weight[i]*x_p[1]*x_p[1];
+                            sumq2[1] += weight[i]*x_p[1]*x_p[1];
+                            sumq2[2] += weight[i]*x_m[1]*x_m[1];
+                            sumq2[3] += weight[i]*x_m[1]*x_m[1];
+                        } else {
+                            sumqx[0] += weight[i]*x_p[1]*xb[i];
+                            sumqx[2] += weight[i]*x_p[1]*xb[i];
+                            sumqx[1] += weight[i]*x_m[1]*xb[i];
+                            sumqx[3] += weight[i]*x_m[1]*xb[i];
+                            sumq2[0] += weight[i]*x_p[1]*x_p[1];
+                            sumq2[2] += weight[i]*x_p[1]*x_p[1];
+                            sumq2[1] += weight[i]*x_m[1]*x_m[1];
+                            sumq2[3] += weight[i]*x_m[1]*x_m[1];
+                        }
+                    }
+                    for (int j = i2; j < block_size; ++j) {
+                        int i = idx[2*j];
+                        if (i < block_size/2) {
+                            sumqx[0] += weight[i]*x_p[2]*xb[i];
+                            sumqx[1] += weight[i]*x_p[2]*xb[i];
+                            sumqx[2] += weight[i]*x_m[2]*xb[i];
+                            sumqx[3] += weight[i]*x_m[2]*xb[i];
+                            sumq2[0] += weight[i]*x_p[2]*x_p[2];
+                            sumq2[1] += weight[i]*x_p[2]*x_p[2];
+                            sumq2[2] += weight[i]*x_m[2]*x_m[2];
+                            sumq2[3] += weight[i]*x_m[2]*x_m[2];
+                        } else {
+                            sumqx[0] += weight[i]*x_p[2]*xb[i];
+                            sumqx[2] += weight[i]*x_p[2]*xb[i];
+                            sumqx[1] += weight[i]*x_m[2]*xb[i];
+                            sumqx[3] += weight[i]*x_m[2]*xb[i];
+                            sumq2[0] += weight[i]*x_p[2]*x_p[2];
+                            sumq2[2] += weight[i]*x_p[2]*x_p[2];
+                            sumq2[1] += weight[i]*x_m[2]*x_m[2];
+                            sumq2[3] += weight[i]*x_m[2]*x_m[2];
+                        }
+                    }
+                    for (int k = 0; k < 4; ++k) {
+                        if (sumq2[k] > 0 && sumqx[k]*sumqx[k] > best_score*sumq2[k]) {
+                            scale = sumqx[k]/sumq2[k]; best_score = scale*sumqx[k];
+                            besti1 = i1; besti2 = i2; best_k = k;
+                        }
+                    }
+                }
+            }
+            GGML_ASSERT(besti1 >= 0 && besti2 >= 0 && best_k >= 0);
+            for (int j =      0; j < besti1; ++j) L[idx[2*j]] = 0;
+            for (int j = besti1; j < besti2; ++j) L[idx[2*j]] = 1;
+            for (int j = besti2; j < block_size; ++j) L[idx[2*j]] = 2;
+            if (scale < 0) {
+                for (int j = 0; j < block_size; ++j) L[j] = 2 - L[j];
+                scale = -scale;
+                best_k = best_k == 0 ? 3 : best_k == 1 ? 2 : best_k == 2 ? 1 : 0;
+            }
+            bool all_on_grid = true;
+            for (int k = 0; k < block_size/8; ++k) {
+                if (k == 0) xx = best_k < 2 ? x_p : x_m;
+                else xx = best_k%2 == 0 ? x_p : x_m;
+                uint16_t u = 0;
+                for (int j = 0; j < 8; ++j) u |= (L[8*k+j] << 2*j);
+                int grid_index = kmap_q2xs[u];
+                if (grid_index < 0) {
+                    all_on_grid = false;
+                    const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
+                    grid_index = iq1_find_best_neighbour2(neighbours, kgrid_q2xs, xb + 8*k, weight + 8*k, scale, xx, L + 8*k, NGRID_IQ1S);
+                    GGML_ASSERT(grid_index >= 0);
+                }
+                index[k] = grid_index;
+            }
+            if (!all_on_grid) {
+                float sumqx_f = 0, sumq2_f = 0;
+                for (int k = 0; k < block_size/8; ++k) {
+                    if (k == 0) xx = best_k < 2 ? x_p : x_m;
+                    else xx = best_k%2 == 0 ? x_p : x_m;
+                    const int8_t * pg = (const int8_t *)(kgrid_q2xs + index[k]);
+                    for (int j = 0; j < 8; ++j) {
+                        float w = weight[8*k + j];
+                        float q = xx[(pg[j] - 1)/2];
+                        sumqx_f += w*q*xb[8*k+j];
+                        sumq2_f += w*q*q;
+                    }
+                }
+                if (sumqx_f > 0 && sumq2_f > 0) scale = sumqx_f/sumq2_f;
+            }
+            y[ibl].qs[2*ib + 0] = index[0] & 255;
+            y[ibl].qs[2*ib + 1] = index[1] & 255;
+            y[ibl].qh[ib] = (index[0] >> 8) | ((index[1] >> 8) << 4);
+            GGML_ASSERT(scale >= 0);
+            scales[ib] = scale;
+            shifts[ib] = best_k;
+            max_scale = MAX(max_scale, scale);
+        }
+
+        if (!max_scale) {
+            continue;
+        }
+
+        uint16_t * sc = (uint16_t *)y[ibl].scales;
+        float d = max_scale/15;
+        float id = 1/d;
+        float sumqx_f = 0, sumq2_f = 0;
+        for (int ib = 0; ib < QK_K/block_size; ++ib) {
+            int l = nearest_int(0.5f*(id*scales[ib+0]-1));
+            l = MAX(0, MIN(7, l));
+            sc[ib/4] |= (l << 3*(ib%4));
+            y[ibl].qh[ib] |= masks[shifts[ib]];
+            const float * xb = xbl + block_size*ib;
+            if (quant_weights) {
+                const float * qw = quant_weights + QK_K*ibl + block_size*ib;
+                for (int i = 0; i < block_size; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
+            } else {
+                for (int i = 0; i < block_size; ++i) weight[i] = xb[i]*xb[i];
+            }
+            for (int k = 0; k < block_size/8; ++k) {
+                if (k == 0) xx = shifts[ib] < 2 ? x_p : x_m;
+                else xx = shifts[ib]%2 == 0 ? x_p : x_m;
+                const int8_t * pg = (const int8_t *)(kgrid_q2xs + y[ibl].qs[2*ib+k] + ((y[ibl].qh[ib] << (8 - 4*k)) & 0x700));
+                for (int j = 0; j < 8; ++j) {
+                    float w = weight[8*k + j];
+                    float q = xx[(pg[j] - 1)/2]*(2*l+1);
+                    sumqx_f += w*q*xb[8*k+j];
+                    sumq2_f += w*q*q;
+                }
+            }
+        }
+        if (sumq2_f > 0) d = sumqx_f/sumq2_f;
+        s.f16 = GGML_FP32_TO_FP16(d*1.1125f); // 1.1125f is another fudge factor. Don't ask me why it is needed.
+        sc[0] |= ((s.u16 & 0x000f) << 12);
+        sc[1] |= ((s.u16 & 0x00f0) <<  8);
+        sc[2] |= ((s.u16 & 0x0f00) <<  4);
+        sc[3] |= ((s.u16 & 0xf000) <<  0);
+    }
+}
+
+size_t quantize_iq1_m(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    GGML_ASSERT(n_per_row%QK_K == 0);
+    float  scales[QK_K/IQ1M_BLOCK_SIZE];
+    float  weight[IQ1M_BLOCK_SIZE];
+    int8_t L[IQ1M_BLOCK_SIZE];
+    float  pairs[2*IQ1M_BLOCK_SIZE];
+    uint16_t index[IQ1M_BLOCK_SIZE/8];
+    int8_t shifts[QK_K/IQ1M_BLOCK_SIZE];
+    int64_t nblock = n_per_row/QK_K;
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_iq1_m_impl(src, qrow, n_per_row, quant_weights, scales, weight, pairs, L, index, shifts);
+        src += n_per_row;
+        qrow += nblock*sizeof(block_iq1_m);
+    }
+    return nrow * nblock * sizeof(block_iq1_m);
+}
+
+// ============================ 4-bit non-linear quants
+
+static inline int best_index_int8(int n, const int8_t * val, float x) {
+    if (x <= val[0]) return 0;
+    if (x >= val[n-1]) return n-1;
+    int ml = 0, mu = n-1;
+    while (mu-ml > 1) {
+        int mav = (ml+mu)/2;
+        if (x < val[mav]) mu = mav; else ml = mav;
+    }
+    return x - val[mu-1] < val[mu] - x ? mu-1 : mu;
+}
+
+static void quantize_row_iq4_nl_impl(const int super_block_size, const int block_size, const float * restrict x,
+        ggml_fp16_t * dh, uint8_t * q4, uint16_t * scales_h, uint8_t * scales_l,
+        float * scales, float * weight, uint8_t * L,
+        const int8_t * values,
+        const float * quant_weights,
+        const int ntry) {
+
+    float sigma2 = 0;
+    for (int j = 0; j < super_block_size; ++j) sigma2 += x[j]*x[j];
+    sigma2 *= 2.f/super_block_size;
+
+    memset(q4, 0, super_block_size/2);
+    dh[0] = GGML_FP32_TO_FP16(0.f);
+
+    float max_scale = 0, amax_scale = 0;
+    for (int ib = 0; ib < super_block_size/block_size; ++ib) {
+        const float * xb = x + ib*block_size;
+        uint8_t * Lb = L + ib*block_size;
+        if (quant_weights) {
+            const float * qw = quant_weights + ib*block_size;
+            for (int j = 0; j < block_size; ++j) weight[j] = qw[j] * sqrtf(sigma2 + xb[j]*xb[j]);
+        } else {
+            for (int j = 0; j < block_size; ++j) weight[j] = xb[j]*xb[j];
+        }
+        float amax = 0, max = 0;
+        for (int j = 0; j < block_size; ++j) {
+            float ax = fabsf(xb[j]);
+            if (ax > amax) {
+                amax = ax; max = xb[j];
+            }
+        }
+        if (amax < GROUP_MAX_EPS) {
+            scales[ib] = 0;
+            continue;
+        }
+        float d = ntry > 0 ? -max/values[0] : max/values[0];
+        float id = 1/d;
+        float sumqx = 0, sumq2 = 0;
+        for (int j = 0; j < block_size; ++j) {
+            float al = id*xb[j];
+            int l = best_index_int8(16, values, al);
+            Lb[j] = l;
+            float q = values[l];
+            float w = weight[j];
+            sumqx += w*q*xb[j];
+            sumq2 += w*q*q;
+        }
+        d = sumqx/sumq2;
+        float best = d*sumqx;
+        for (int itry = -ntry; itry <= ntry; ++itry) {
+            id = (itry + values[0])/max;
+            sumqx = sumq2 = 0;
+            for (int j = 0; j < block_size; ++j) {
+                float al = id*xb[j];
+                int l = best_index_int8(16, values, al);
+                float q = values[l];
+                float w = weight[j];
+                sumqx += w*q*xb[j];
+                sumq2 += w*q*q;
+            }
+            if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
+                d = sumqx/sumq2; best = d * sumqx;
+            }
+        }
+        scales[ib] = d;
+        float abs_d = fabsf(d);
+        if (abs_d > amax_scale) {
+            amax_scale = abs_d; max_scale = d;
+        }
+    }
+
+    if (super_block_size/block_size > 1) {
+        int nb = super_block_size/block_size;
+        memset(scales_h, 0, ((nb+7)/8)*sizeof(uint16_t));
+        float d = -max_scale/32;
+        dh[0] = GGML_FP32_TO_FP16(d);
+        float id = d ? 1/d : 0.f;
+        for (int ib = 0; ib < super_block_size/block_size; ++ib) {
+            int l = nearest_int(id*scales[ib]);
+            l = MAX(-32, MIN(31, l));
+            float dl = d * l;
+            float idl = dl ? 1/dl : 0.f;
+            uint8_t * Lb = L + ib*block_size;
+            const float * xb = x + ib*block_size;
+            for (int j = 0; j < block_size; ++j) {
+                Lb[j] = best_index_int8(16, values, idl*xb[j]);
+            }
+            l += 32;
+            uint8_t l_l = l & 0xf;
+            uint8_t l_h = l >>  4;
+            if (ib%2 == 0) scales_l[ib/2] = l_l;
+            else scales_l[ib/2] |= (l_l << 4);
+            scales_h[ib/8] |= (l_h << 2*(ib%8));
+        }
+    } else {
+        dh[0] = GGML_FP32_TO_FP16(scales[0]);
+        if (ntry > 0) {
+            float id = scales[0] ? 1/scales[0] : 0;
+            for (int j = 0; j < super_block_size; ++j) {
+                L[j] = best_index_int8(16, values, id*x[j]);
+            }
+        }
+    }
+
+    for (int i = 0; i < super_block_size/32; ++i) {
+        for (int j = 0; j < 16; ++j) {
+            q4[16*i + j] = L[32*i + j] | (L[32*i + 16 + j] << 4);
+        }
+    }
+}
+
+size_t quantize_iq4_nl(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    GGML_ASSERT(n_per_row%QK4_NL == 0);
+    int64_t nblock = n_per_row/QK4_NL;
+    char * qrow = (char *)dst;
+    uint8_t L[QK4_NL];
+    float weight[QK4_NL];
+    uint16_t unused_h;
+    uint8_t * unused_l = NULL;
+    float scale;
+    for (int64_t row = 0; row < nrow; ++row) {
+        block_iq4_nl * iq4 = (block_iq4_nl *)qrow;
+        for (int ibl = 0; ibl < nblock; ++ibl) {
+            const float * qw = quant_weights ? quant_weights + QK4_NL*ibl : NULL;
+            quantize_row_iq4_nl_impl(QK4_NL, 32, src + QK4_NL*ibl, &iq4[ibl].d, iq4[ibl].qs, &unused_h, unused_l,
+                    &scale, weight, L, kvalues_iq4nl, qw, 7);
+        }
+        src += n_per_row;
+        qrow += nblock*sizeof(block_iq4_nl);
+    }
+    return nrow * nblock * sizeof(block_iq4_nl);
+}
+
+void quantize_row_iq4_nl(const float * restrict x, void * restrict vy, int64_t k) {
+    GGML_ASSERT(k%QK4_NL == 0);
+    int64_t nblock = k/QK4_NL;
+    uint8_t L[QK4_NL];
+    float weight[QK4_NL];
+    uint16_t unused_h;
+    uint8_t * unused_l = NULL;
+    float scale;
+    block_iq4_nl * iq4 = (block_iq4_nl *)vy;
+    for (int ibl = 0; ibl < nblock; ++ibl) {
+        quantize_row_iq4_nl_impl(QK4_NL, 32, x + QK4_NL*ibl, &iq4[ibl].d, iq4[ibl].qs, &unused_h, unused_l,
+                &scale, weight, L, kvalues_iq4nl, NULL, -1);
+    }
+}
+
+void quantize_row_iq4_nl_reference(const float * restrict x, block_iq4_nl * restrict y, int64_t k) {
+    assert(k % QK4_NL == 0);
+    quantize_row_iq4_nl(x, y, k);
+}
+
+size_t quantize_iq4_xs(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    GGML_ASSERT(n_per_row%QK_K == 0);
+    int64_t nblock = n_per_row/QK_K;
+    char * qrow = (char *)dst;
+    uint8_t L[QK_K];
+    float weight[32];
+    float scales[QK_K/32];
+    for (int64_t row = 0; row < nrow; ++row) {
+        block_iq4_xs * iq4 = (block_iq4_xs *)qrow;
+        for (int ibl = 0; ibl < nblock; ++ibl) {
+            const float * qw = quant_weights ? quant_weights + QK_K*ibl : NULL;
+            quantize_row_iq4_nl_impl(QK_K, 32, src + QK_K*ibl, &iq4[ibl].d, iq4[ibl].qs, &iq4[ibl].scales_h, iq4[ibl].scales_l,
+                    scales, weight, L, kvalues_iq4nl, qw, 7);
+        }
+        src += n_per_row;
+        qrow += nblock*sizeof(block_iq4_xs);
+    }
+    return nrow * nblock * sizeof(block_iq4_xs);
+}
+
+void quantize_row_iq4_xs(const float * restrict x, void * restrict vy, int64_t k) {
+    assert(k % QK_K == 0);
+    block_iq4_xs * restrict y = vy;
+    quantize_row_iq4_xs_reference(x, y, k);
+}
+
+void quantize_row_iq4_xs_reference(const float * restrict x, block_iq4_xs * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    quantize_iq4_xs(x, y, 1, k, NULL);
+}
+
+// =============================== 2.5625 bpw
+
+static void quantize_row_iq2_s_impl(const float * restrict x, void * restrict vy, int64_t n, const float * restrict quant_weights) {
+
+    const int gindex = iq2_data_index(GGML_TYPE_IQ2_S);
+
+    const uint64_t * kgrid_q2xs      = iq2_data[gindex].grid;
+    const int      * kmap_q2xs       = iq2_data[gindex].map;
+    const uint16_t * kneighbors_q2xs = iq2_data[gindex].neighbours;
+
+    GGML_ASSERT(kmap_q2xs       && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kgrid_q2xs      && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(kneighbors_q2xs && "forgot to call ggml_quantize_init()?");
+    GGML_ASSERT(n%QK_K == 0);
+
+    const int kMaxQ = 3;
+
+    const int64_t nbl = n/QK_K;
+
+    block_iq2_s * y = vy;
+
+    float scales[QK_K/16];
+    float weight[16];
+    float xval[16];
+    int8_t L[16];
+    int8_t Laux[16];
+    float  waux[16];
+    bool   is_on_grid[2];
+    bool   is_on_grid_aux[2];
+    uint8_t block_signs[2];
+
+    for (int ibl = 0; ibl < nbl; ++ibl) {
+
+        memset(&y[ibl], 0, sizeof(block_iq2_s));
+        y[ibl].d = GGML_FP32_TO_FP16(0.f);
+
+        float max_scale = 0;
+
+        const float * xbl = x + QK_K*ibl;
+        float sumx2 = 0;
+        for (int i = 0; i < QK_K; ++i) sumx2 += xbl[i]*xbl[i];
+        float sigma2 = 2*sumx2/QK_K;
+
+        for (int ib = 0; ib < QK_K/16; ++ib) {
+            const float * xb = xbl + 16*ib;
+            if (quant_weights) {
+                const float * qw = quant_weights + QK_K*ibl + 16*ib;
+                for (int i = 0; i < 16; ++i) weight[i] = qw[i] * sqrtf(sigma2 + xb[i]*xb[i]);
+            } else {
+                for (int i = 0; i < 16; ++i) weight[i] = 0.25f*sigma2 + xb[i]*xb[i];
+            }
+            for (int i = 0; i < 16; ++i) waux[i] = sqrtf(weight[i]);
+            for (int k = 0; k < 2; ++k) {
+                uint8_t s = 0;
+                for (int i = 0; i < 8; ++i) {
+                    if (xb[8*k + i] >= 0) xval[8*k + i] = xb[8*k + i];
+                    else {
+                        xval[8*k + i] = -xb[8*k + i]; s |= (1 << i);
+                    }
+                }
+                block_signs[k] = s;
+            }
+            float max = xval[0];
+            for (int i = 1; i < 16; ++i) max = MAX(max, xval[i]);
+            if (max < GROUP_MAX_EPS_IQ2_S) {
+                scales[ib] = 0;
+                continue;
+            }
+            float best = 0;
+            float scale = max/(2*kMaxQ-1);
+            is_on_grid[0] = is_on_grid[1] = true;
+            for (int is = -9; is <= 9; ++is) {
+                float id = (2*kMaxQ-1+is*0.1f)/max;
+                float this_scale = 1/id;
+                for (int k = 0; k < 2; ++k) {
+                    for (int i = 0; i < 8; ++i) {
+                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
+                        Laux[8*k+i] = MAX(0, MIN(kMaxQ-1, l));
+                    }
+                    uint16_t u = 0;
+                    for (int i = 0; i < 8; ++i) u |= (Laux[8*k+i] << 2*i);
+                    int grid_index = kmap_q2xs[u];
+                    is_on_grid_aux[k] = true;
+                    if (grid_index < 0) {
+                        is_on_grid_aux[k] = false;
+                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
+                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, this_scale, Laux + 8*k);
+                    }
+                }
+                float sumqx = 0, sumq2 = 0;
+                for (int i = 0; i < 16; ++i) {
+                    float w = weight[i];
+                    float q = 2*Laux[i] + 1;
+                    sumqx += w*xval[i]*q;
+                    sumq2 += w*q*q;
+                }
+                if (sumq2 > 0 && sumqx*sumqx > best*sumq2) {
+                    scale = sumqx/sumq2; best = scale*sumqx;
+                    for (int i = 0; i < 16; ++i) L[i] = Laux[i];
+                    for (int k = 0; k <  2; ++k) is_on_grid[k] = is_on_grid_aux[k];
+                }
+            }
+            int n_not_ongrid = 0;
+            for (int k = 0; k < 2; ++k) if (!is_on_grid[k]) ++n_not_ongrid;
+            if (n_not_ongrid > 0 && scale > 0) {
+                float id = 1/scale;
+                for (int k = 0; k < 2; ++k) {
+                    if (is_on_grid[k]) continue;
+                    uint16_t u = 0;
+                    for (int i = 0; i < 8; ++i) {
+                        int l = nearest_int(0.5f*(id*xval[8*k+i]-1));
+                        l = MAX(0, MIN(kMaxQ-1, l));
+                        u |= (l << 2*i);
+                        L[8*k + i] = l;
+                    }
+                    int grid_index = kmap_q2xs[u];
+                    if (grid_index < 0) {
+                        const uint16_t * neighbours = kneighbors_q2xs - kmap_q2xs[u] - 1;
+                        grid_index = iq2_find_best_neighbour(neighbours, kgrid_q2xs, xval + 8*k, waux + 8*k, scale, L + 8*k);
+                    }
+                }
+                float sumqx = 0, sumq2 = 0;
+                for (int i = 0; i < 16; ++i) {
+                    float w = weight[i];
+                    float q = 2*L[i] + 1;
+                    sumqx += w*xval[i]*q;
+                    sumq2 += w*q*q;
+                }
+                if (sumq2 > 0) scale = sumqx/sumq2;
+            }
+            if (scale < 0) {
+                scale = -scale;
+                for (int k = 0; k < 2; ++k) block_signs[k] = ~block_signs[k];
+            }
+            for (int k = 0; k < 2; ++k) {
+                uint16_t u = 0;
+                for (int i = 0; i < 8; ++i) u |= (L[8*k+i] << 2*i);
+                int grid_index = kmap_q2xs[u];
+                if (grid_index < 0) {
+                    printf("Oops: found point %u not on grid:", u);
+                    for (int i = 0; i < 8; ++i) printf(" %d", L[8*k+i]);
+                    printf("\n");
+                    GGML_ASSERT(false);
+                }
+                const int i8 = 2*ib + k;
+                y[ibl].qs[i8] = grid_index & 255;
+                y[ibl].qh[i8/4] |= ((grid_index >> 8) << 2*(i8%4));
+                y[ibl].qs[QK_K/8 + i8] = block_signs[k];
+            }
+            GGML_ASSERT(scale >= 0);
+            scales[ib] = scale;
+            max_scale = MAX(max_scale, scale);
+        }
+
+        if (!max_scale) {
+            continue;
+        }
+
+        float d = max_scale/31;
+        y[ibl].d = GGML_FP32_TO_FP16(d * 0.9875f);
+        float id = 1/d;
+        for (int ib = 0; ib < QK_K/16; ++ib) {
+            int l = nearest_int(0.5f*(id*scales[ib]-1));
+            l = MAX(0, MIN(15, l));
+            if (ib%2 == 0) y[ibl].scales[ib/2] = l;
+            else y[ibl].scales[ib/2] |= (l << 4);
+        }
+    }
+}
+
+size_t quantize_iq2_s(const float * restrict src, void * restrict dst, int64_t nrow, int64_t n_per_row, const float * quant_weights) {
+    GGML_ASSERT(n_per_row%QK_K == 0);
+    int64_t nblock = n_per_row/QK_K;
+    char * qrow = (char *)dst;
+    for (int64_t row = 0; row < nrow; ++row) {
+        quantize_row_iq2_s_impl(src, qrow, n_per_row, quant_weights);
+        src += n_per_row;
+        qrow += nblock*sizeof(block_iq2_s);
+    }
+    return nrow * nblock * sizeof(block_iq2_s);
+}
+
+void quantize_row_iq2_s_reference(const float * restrict x, block_iq2_s * restrict y, int64_t k) {
+    assert(k % QK_K == 0);
+    quantize_iq2_s(x, y, 1, k, NULL);
+}
+
+void quantize_row_iq2_s(const float * restrict x, void * restrict vy, int64_t k) {
+    assert(k % QK_K == 0);
+    block_iq2_s * restrict y = vy;
+    quantize_row_iq2_s_reference(x, y, k);
+}
+
+static bool validate_float(float f, size_t i) {
+    if (isinf(f)) {
+        fprintf(stderr, "ggml_validate_row_data: found inf value at block %zu\n", i);
+        return false;
+    }
+
+    if (isnan(f)) {
+        fprintf(stderr, "ggml_validate_row_data: found nan value at block %zu\n", i);
+        return false;
+    }
+
+    return true;
+}
+
+static bool isinf_fp16(ggml_fp16_t f) {
+    return (f & 0x7c00) == 0x7c00 && (f & 0x03ff) == 0;
+}
+
+static bool isnan_fp16(ggml_fp16_t f) {
+    return (f & 0x7c00) == 0x7c00 && (f & 0x03ff) != 0;
+}
+
+static bool validate_fp16(ggml_fp16_t f, size_t i) {
+    if (isinf_fp16(f)) {
+        fprintf(stderr, "ggml_validate_row_data: found inf value at block %zu\n", i);
+        return false;
+    }
+
+    if (isnan_fp16(f)) {
+        fprintf(stderr, "ggml_validate_row_data: found nan value at block %zu\n", i);
+        return false;
+    }
+
+    return true;
+}
+
+#define VALIDATE_ROW_DATA_D_F16_IMPL(type, data, nb) \
+    const type * q = (const type *) (data); \
+    for (size_t i = 0; i < (nb); ++i) { \
+        if (!validate_fp16(q[i].d, i)) { \
+            return false; \
+        } \
+    }
+
+#define VALIDATE_ROW_DATA_DM_F16_IMPL(type, data, nb, d, m) \
+    const type * q = (const type *) (data); \
+    for (size_t i = 0; i < (nb); ++i) { \
+        if (!validate_fp16(q[i].d, i) || !validate_fp16(q[i].m, i)) { \
+            return false; \
+        } \
+    }
+
+bool ggml_validate_row_data(enum ggml_type type, const void * data, size_t nbytes) {
+    if (type < 0 || type >= GGML_TYPE_COUNT) {
+        fprintf(stderr, "%s: invalid type %d\n", __func__, type);
+        return false;
+    }
+
+    if (nbytes % ggml_type_size(type) != 0) {
+        fprintf(stderr, "%s: invalid size %zu for type %d\n", __func__, nbytes, type);
+        return false;
+    }
+
+    const size_t nb = nbytes/ggml_type_size(type);
+
+    switch (type) {
+        case GGML_TYPE_BF16:
+            {
+                int nans = 0;
+                int infs = 0;
+                const unsigned short * f = (const unsigned short *) data;
+                for (size_t i = 0; i < nb; ++i) {
+                    nans += (f[i] & 0x7fff) > 0x7f80;
+                    infs += (f[i] & 0x7fff) == 0x7f80;
+                }
+                if (nans) {
+                    fprintf(stderr, "%s: found %d NaNs in row of %zu BF16 values\n", __func__, nans, nb);
+                    return false;
+                }
+                if (infs) {
+                    fprintf(stderr, "%s: found %d infinities in row of %zu BF16 values\n", __func__, infs, nb);
+                    return false;
+                }
+            } break;
+        case GGML_TYPE_F16:
+            {
+                const ggml_fp16_t * f = (const ggml_fp16_t *) data;
+                size_t i = 0;
+#if defined(__AVX2__)
+                for (; i + 15 < nb; i += 16) {
+                    __m256i v = _mm256_loadu_si256((const __m256i *)(f + i));
+                    __m256i vexp = _mm256_and_si256(v, _mm256_set1_epi16(0x7c00));
+                    __m256i cmp = _mm256_cmpeq_epi16(vexp, _mm256_set1_epi16(0x7c00));
+                    int mask = _mm256_movemask_epi8(cmp);
+                    if (mask) {
+                        for (size_t j = 0; j < 16; ++j) {
+                            if (!validate_fp16(f[i + j], i + j)) {
+                                return false;
+                            }
+                        }
+                        GGML_UNREACHABLE();
+                    }
+                }
+#elif defined(__ARM_NEON)
+                for (; i + 7 < nb; i += 8) {
+                    uint16x8_t v = vld1q_u16(f + i);
+                    uint16x8_t vexp = vandq_u16(v, vdupq_n_u16(0x7c00));
+                    uint16x8_t cmp = vceqq_u16(vexp, vdupq_n_u16(0x7c00));
+                    uint64_t mask = vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(cmp, 4)), 0);
+                    if (mask) {
+                        for (size_t j = 0; j < 8; ++j) {
+                            if (!validate_fp16(f[i + j], i + j)) {
+                                return false;
+                            }
+                        }
+                        GGML_UNREACHABLE();
+                    }
+                }
+#endif
+                for (; i < nb; ++i) {
+                    if (!validate_fp16(f[i], i)) {
+                        return false;
+                    }
+                }
+            } break;
+        case GGML_TYPE_F32:
+            {
+                const float * f = (const float *) data;
+                size_t i = 0;
+#if defined(__AVX2__)
+                for (; i + 7 < nb; i += 8) {
+                    __m256i v = _mm256_loadu_si256((const __m256i *)(f + i));
+                    __m256i vexp = _mm256_and_si256(v, _mm256_set1_epi32(0x7f800000));
+                    __m256i cmp = _mm256_cmpeq_epi32(vexp, _mm256_set1_epi32(0x7f800000));
+                    int mask = _mm256_movemask_epi8(cmp);
+                    if (mask) {
+                        for (size_t j = 0; j < 8; ++j) {
+                            if (!validate_float(f[i + j], i + j)) {
+                                return false;
+                            }
+                        }
+                        GGML_UNREACHABLE();
+                    }
+                }
+#elif defined(__ARM_NEON)
+                for (; i + 3 < nb; i += 4) {
+                    uint32x4_t v = vld1q_u32((const uint32_t *)f + i);
+                    uint32x4_t vexp = vandq_u32(v, vdupq_n_u32(0x7f800000));
+                    uint32x4_t cmp = vceqq_u32(vexp, vdupq_n_u32(0x7f800000));
+                    uint64_t mask = vget_lane_u64(vreinterpret_u64_u16(vshrn_n_u32(cmp, 8)), 0);
+                    if (mask) {
+                        for (size_t j = 0; j < 4; ++j) {
+                            if (!validate_float(f[i + j], i + j)) {
+                                return false;
+                            }
+                        }
+                        GGML_UNREACHABLE();
+                    }
+                }
+#endif
+                for (; i < nb; ++i) {
+                    if (!validate_float(f[i], i)) {
+                        return false;
+                    }
+                }
+            } break;
+        case GGML_TYPE_F64:
+            {
+                const double * f = (const double *) data;
+                for (size_t i = 0; i < nb; ++i) {
+                    if (!validate_float(f[i], i)) {
+                        return false;
+                    }
+                }
+            } break;
+        case GGML_TYPE_Q4_0:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_q4_0, data, nb);
+            } break;
+        case GGML_TYPE_Q4_1:
+            {
+                VALIDATE_ROW_DATA_DM_F16_IMPL(block_q4_1, data, nb, d, m);
+            } break;
+        case GGML_TYPE_Q5_0:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_q5_0, data, nb);
+            } break;
+        case GGML_TYPE_Q5_1:
+            {
+                VALIDATE_ROW_DATA_DM_F16_IMPL(block_q5_1, data, nb, d, m);
+            } break;
+        case GGML_TYPE_Q8_0:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_q8_0, data, nb);
+            } break;
+        case GGML_TYPE_Q2_K:
+            {
+                VALIDATE_ROW_DATA_DM_F16_IMPL(block_q2_K, data, nb, d, dmin);
+            } break;
+        case GGML_TYPE_Q3_K:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_q3_K, data, nb);
+            } break;
+        case GGML_TYPE_Q4_K:
+            {
+                VALIDATE_ROW_DATA_DM_F16_IMPL(block_q4_K, data, nb, d, dmin);
+            } break;
+        case GGML_TYPE_Q5_K:
+            {
+                VALIDATE_ROW_DATA_DM_F16_IMPL(block_q5_K, data, nb, d, dmin);
+            } break;
+        case GGML_TYPE_Q6_K:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_q6_K, data, nb);
+            } break;
+        case GGML_TYPE_Q8_K:
+            {
+                const block_q8_K * q = (const block_q8_K *) data;
+                for (size_t i = 0; i < nb; ++i) {
+                    if (!validate_float(q[i].d, i)) {
+                        return false;
+                    }
+                }
+            } break;
+        case GGML_TYPE_IQ1_S:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq1_s, data, nb);
+            } break;
+        case GGML_TYPE_IQ1_M:
+            {
+                const block_iq1_m * q = (const block_iq1_m *) data;
+                for (size_t i = 0; i < nb; ++i) {
+                    iq1m_scale_t scale;
+                    const uint16_t * sc = (const uint16_t *)q[i].scales;
+                    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+                    if (!validate_fp16(scale.f16, i)) {
+                        return false;
+                    }
+                }
+            } break;
+        case GGML_TYPE_IQ2_XXS:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq2_xxs, data, nb);
+            } break;
+        case GGML_TYPE_IQ2_XS:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq2_xs, data, nb);
+            } break;
+        case GGML_TYPE_IQ2_S:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq2_s, data, nb);
+            } break;
+        case GGML_TYPE_IQ3_XXS:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq3_xxs, data, nb);
+            } break;
+
+        case GGML_TYPE_IQ3_S:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq3_s, data, nb);
+            } break;
+        case GGML_TYPE_IQ4_XS:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq4_xs, data, nb);
+            } break;
+        case GGML_TYPE_IQ4_NL:
+            {
+                VALIDATE_ROW_DATA_D_F16_IMPL(block_iq4_nl, data, nb);
+            } break;
+        case GGML_TYPE_I8:
+        case GGML_TYPE_I16:
+        case GGML_TYPE_I32:
+        case GGML_TYPE_I64:
+            // nothing to validate
+            break;
+        default:
+            {
+                fprintf(stderr, "%s: invalid type %d\n", __func__, type);
+                return false;
+            }
+    }
+
+    return true;
+}
diff --git a/ggml/src/ggml-quants.h b/ggml/src/ggml-quants.h
new file mode 100644 (file)
index 0000000..4d436a8
--- /dev/null
@@ -0,0 +1,133 @@
+#pragma once
+
+#define GGML_COMMON_DECL_C
+#include "ggml-common.h"
+
+#include "ggml.h"
+
+// GGML internal header
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Quantization
+void quantize_row_q4_0_reference(const float * GGML_RESTRICT x, block_q4_0 * GGML_RESTRICT y, int64_t k);
+void quantize_row_q4_1_reference(const float * GGML_RESTRICT x, block_q4_1 * GGML_RESTRICT y, int64_t k);
+void quantize_row_q5_0_reference(const float * GGML_RESTRICT x, block_q5_0 * GGML_RESTRICT y, int64_t k);
+void quantize_row_q5_1_reference(const float * GGML_RESTRICT x, block_q5_1 * GGML_RESTRICT y, int64_t k);
+void quantize_row_q8_0_reference(const float * GGML_RESTRICT x, block_q8_0 * GGML_RESTRICT y, int64_t k);
+void quantize_row_q8_1_reference(const float * GGML_RESTRICT x, block_q8_1 * GGML_RESTRICT y, int64_t k);
+
+void quantize_row_q2_K_reference(const float * GGML_RESTRICT x, block_q2_K * GGML_RESTRICT y, int64_t k);
+void quantize_row_q3_K_reference(const float * GGML_RESTRICT x, block_q3_K * GGML_RESTRICT y, int64_t k);
+void quantize_row_q4_K_reference(const float * GGML_RESTRICT x, block_q4_K * GGML_RESTRICT y, int64_t k);
+void quantize_row_q5_K_reference(const float * GGML_RESTRICT x, block_q5_K * GGML_RESTRICT y, int64_t k);
+void quantize_row_q6_K_reference(const float * GGML_RESTRICT x, block_q6_K * GGML_RESTRICT y, int64_t k);
+void quantize_row_q8_K_reference(const float * GGML_RESTRICT x, block_q8_K * GGML_RESTRICT y, int64_t k);
+
+void quantize_row_iq3_xxs_reference(const float * GGML_RESTRICT x, block_iq3_xxs * GGML_RESTRICT y, int64_t k);
+void quantize_row_iq4_nl_reference (const float * GGML_RESTRICT x, block_iq4_nl  * GGML_RESTRICT y, int64_t k);
+void quantize_row_iq4_xs_reference (const float * GGML_RESTRICT x, block_iq4_xs  * GGML_RESTRICT y, int64_t k);
+void quantize_row_iq3_s_reference  (const float * GGML_RESTRICT x, block_iq3_s   * GGML_RESTRICT y, int64_t k);
+void quantize_row_iq2_s_reference  (const float * GGML_RESTRICT x, block_iq2_s   * GGML_RESTRICT y, int64_t k);
+
+void quantize_row_q4_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_q4_1(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_q5_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_q5_1(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_q8_0(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_q8_1(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+
+void quantize_row_q2_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_q3_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_q4_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_q5_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_q6_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_q8_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+
+void quantize_row_iq3_xxs(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_iq4_nl (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_iq4_xs (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_iq3_s  (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+void quantize_row_iq2_s  (const float * GGML_RESTRICT x, void * GGML_RESTRICT y, int64_t k);
+
+// Dequantization
+void dequantize_row_q4_0(const block_q4_0 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_q4_1(const block_q4_1 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_q5_0(const block_q5_0 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_q5_1(const block_q5_1 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_q8_0(const block_q8_0 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+//void dequantize_row_q8_1(const block_q8_1 * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+
+void dequantize_row_q2_K(const block_q2_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_q3_K(const block_q3_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_q4_K(const block_q4_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_q5_K(const block_q5_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_q6_K(const block_q6_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_q8_K(const block_q8_K * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+
+void dequantize_row_iq2_xxs(const block_iq2_xxs * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_iq2_xs (const block_iq2_xs  * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_iq2_s  (const block_iq2_s   * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_iq3_xxs(const block_iq3_xxs * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_iq1_s  (const block_iq1_s   * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_iq1_m  (const block_iq1_m   * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_iq4_nl (const block_iq4_nl  * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_iq4_xs (const block_iq4_xs  * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+void dequantize_row_iq3_s  (const block_iq3_s   * GGML_RESTRICT x, float * GGML_RESTRICT y, int64_t k);
+
+// Dot product
+void ggml_vec_dot_q4_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_q4_1_q8_1(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_q5_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_q5_1_q8_1(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_q8_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+
+void ggml_vec_dot_q2_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_q4_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_q5_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+
+void ggml_vec_dot_iq2_xxs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_iq2_xs_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_iq2_s_q8_K  (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_iq3_xxs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_iq1_s_q8_K  (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_iq1_m_q8_K  (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_iq4_nl_q8_0 (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_iq4_xs_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+void ggml_vec_dot_iq3_s_q8_K  (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc);
+
+// Quantization utilizing an importance matrix (a.k.a. "Activation aWare Quantization")
+size_t quantize_iq2_xxs(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_iq2_xs (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_iq2_s  (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_iq3_xxs(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_iq1_s  (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_iq1_m  (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_iq4_nl (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_iq4_xs (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_iq3_s  (const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+
+size_t quantize_q2_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_q3_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_q4_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_q5_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_q6_K(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_q4_0(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_q4_1(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_q5_0(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_q5_1(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+size_t quantize_q8_0(const float * GGML_RESTRICT src, void * GGML_RESTRICT dst, int64_t nrows, int64_t n_per_row, const float * imatrix);
+
+void iq2xs_init_impl(enum ggml_type type);
+void iq2xs_free_impl(enum ggml_type type);
+void iq3xs_init_impl(int grid_size);
+void iq3xs_free_impl(int grid_size);
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/ggml/src/ggml-rpc.cpp b/ggml/src/ggml-rpc.cpp
new file mode 100644 (file)
index 0000000..b01ad26
--- /dev/null
@@ -0,0 +1,1178 @@
+#include "ggml-rpc.h"
+#include "ggml.h"
+#include "ggml-backend-impl.h"
+
+#include <cinttypes>
+#include <string>
+#include <vector>
+#include <memory>
+#include <mutex>
+#include <unordered_map>
+#include <unordered_set>
+#ifdef _WIN32
+#  define WIN32_LEAN_AND_MEAN
+#  ifndef NOMINMAX
+#     define NOMINMAX
+#  endif
+#  include <windows.h>
+#  include <winsock2.h>
+#else
+#  include <arpa/inet.h>
+#  include <sys/socket.h>
+#  include <sys/types.h>
+#  include <netinet/in.h>
+#  include <netinet/tcp.h>
+#  include <netdb.h>
+#  include <unistd.h>
+#endif
+#include <string.h>
+
+#define UNUSED GGML_UNUSED
+
+#define GGML_DEBUG 0
+#if (GGML_DEBUG >= 1)
+#define GGML_PRINT_DEBUG(...) printf(__VA_ARGS__)
+#else
+#define GGML_PRINT_DEBUG(...)
+#endif
+
+#ifdef _WIN32
+typedef SOCKET sockfd_t;
+using ssize_t = __int64;
+#else
+typedef int sockfd_t;
+#endif
+
+// cross-platform socket
+struct socket_t {
+    sockfd_t fd;
+    socket_t(sockfd_t fd) : fd(fd) {}
+    ~socket_t() {
+        GGML_PRINT_DEBUG("[%s] closing socket %d\n", __func__, this->fd);
+#ifdef _WIN32
+        closesocket(this->fd);
+#else
+        close(this->fd);
+#endif
+    }
+};
+
+// ggml_tensor is serialized into rpc_tensor
+#pragma pack(push, 1)
+struct rpc_tensor {
+    uint64_t id;
+    uint32_t type;
+    uint64_t buffer;
+    uint32_t ne[GGML_MAX_DIMS];
+    uint32_t nb[GGML_MAX_DIMS];
+    uint32_t op;
+    int32_t  op_params[GGML_MAX_OP_PARAMS / sizeof(int32_t)];
+    int32_t  flags;
+    uint64_t src[GGML_MAX_SRC];
+    uint64_t view_src;
+    uint64_t view_offs;
+    uint64_t data;
+    char name[GGML_MAX_NAME];
+
+    char padding[4];
+};
+#pragma pack(pop)
+
+static_assert(sizeof(rpc_tensor) % 8 == 0, "rpc_tensor size must be multiple of 8");
+
+// RPC commands
+enum rpc_cmd {
+    ALLOC_BUFFER = 0,
+    GET_ALIGNMENT,
+    GET_MAX_SIZE,
+    BUFFER_GET_BASE,
+    FREE_BUFFER,
+    BUFFER_CLEAR,
+    SET_TENSOR,
+    GET_TENSOR,
+    COPY_TENSOR,
+    GRAPH_COMPUTE,
+    GET_DEVICE_MEMORY,
+};
+
+// RPC data structures
+
+static ggml_guid_t ggml_backend_rpc_guid() {
+    static ggml_guid guid = {0x99, 0x68, 0x5b, 0x6c, 0xd2, 0x83, 0x3d, 0x24, 0x25, 0x36, 0x72, 0xe1, 0x5b, 0x0e, 0x14, 0x03};
+    return &guid;
+}
+
+struct ggml_backend_rpc_buffer_type_context {
+    std::string endpoint;
+    std::string name;
+    size_t alignment;
+    size_t max_size;
+};
+
+struct ggml_backend_rpc_context {
+    std::string endpoint;
+    std::string name;
+};
+
+struct ggml_backend_rpc_buffer_context {
+    std::shared_ptr<socket_t> sock;
+    std::unordered_map<ggml_backend_buffer_t, void *> base_cache;
+    uint64_t remote_ptr;
+    std::string name;
+};
+
+// RPC helper functions
+
+static std::shared_ptr<socket_t> make_socket(sockfd_t fd) {
+#ifdef _WIN32
+    if (fd == INVALID_SOCKET) {
+        return nullptr;
+    }
+#else
+    if (fd < 0) {
+        return nullptr;
+    }
+#endif
+    return std::make_shared<socket_t>(fd);
+}
+
+static bool set_no_delay(sockfd_t sockfd) {
+    int flag = 1;
+    // set TCP_NODELAY to disable Nagle's algorithm
+    int ret = setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int));
+    return ret == 0;
+}
+
+static bool set_reuse_addr(sockfd_t sockfd) {
+    int flag = 1;
+    int ret = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&flag, sizeof(int));
+    return ret == 0;
+}
+
+static std::shared_ptr<socket_t> socket_connect(const char * host, int port) {
+    struct sockaddr_in addr;
+    auto sockfd = socket(AF_INET, SOCK_STREAM, 0);
+    auto sock_ptr = make_socket(sockfd);
+    if (sock_ptr == nullptr) {
+        return nullptr;
+    }
+    if (!set_no_delay(sockfd)) {
+        fprintf(stderr, "Failed to set TCP_NODELAY\n");
+        return nullptr;
+    }
+    addr.sin_family = AF_INET;
+    addr.sin_port = htons(port);
+    struct hostent * server = gethostbyname(host);
+    if (server == NULL) {
+        fprintf(stderr, "Cannot resolve host '%s'\n", host);
+        return nullptr;
+    }
+    memcpy(&addr.sin_addr.s_addr, server->h_addr, server->h_length);
+    if (connect(sock_ptr->fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+        return nullptr;
+    }
+    return sock_ptr;
+}
+
+static std::shared_ptr<socket_t> socket_accept(sockfd_t srv_sockfd) {
+    auto client_socket_fd = accept(srv_sockfd, NULL, NULL);
+    auto client_socket = make_socket(client_socket_fd);
+    if (client_socket == nullptr) {
+        return nullptr;
+    }
+    if (!set_no_delay(client_socket_fd)) {
+        fprintf(stderr, "Failed to set TCP_NODELAY\n");
+        return nullptr;
+    }
+    return client_socket;
+}
+
+static std::shared_ptr<socket_t> create_server_socket(const char * host, int port) {
+    auto sockfd = socket(AF_INET, SOCK_STREAM, 0);
+    auto sock = make_socket(sockfd);
+    if (sock == nullptr) {
+        return nullptr;
+    }
+    if (!set_reuse_addr(sockfd)) {
+        fprintf(stderr, "Failed to set SO_REUSEADDR\n");
+        return nullptr;
+    }
+    struct sockaddr_in serv_addr;
+    serv_addr.sin_family = AF_INET;
+    serv_addr.sin_addr.s_addr = inet_addr(host);
+    serv_addr.sin_port = htons(port);
+
+    if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
+        return nullptr;
+    }
+    if (listen(sockfd, 1) < 0) {
+        return nullptr;
+    }
+    return sock;
+}
+
+static bool send_data(sockfd_t sockfd, const void * data, size_t size) {
+    size_t bytes_sent = 0;
+    while (bytes_sent < size) {
+        ssize_t n = send(sockfd, (const char *)data + bytes_sent, size - bytes_sent, 0);
+        if (n < 0) {
+            return false;
+        }
+        bytes_sent += n;
+    }
+    return true;
+}
+
+static bool recv_data(sockfd_t sockfd, void * data, size_t size) {
+    size_t bytes_recv = 0;
+    while (bytes_recv < size) {
+        ssize_t n = recv(sockfd, (char *)data + bytes_recv, size - bytes_recv, 0);
+        if (n <= 0) {
+            return false;
+        }
+        bytes_recv += n;
+    }
+    return true;
+}
+
+static bool parse_endpoint(const std::string & endpoint, std::string & host, int & port) {
+    size_t pos = endpoint.find(':');
+    if (pos == std::string::npos) {
+        return false;
+    }
+    host = endpoint.substr(0, pos);
+    port = std::stoi(endpoint.substr(pos + 1));
+    return true;
+}
+
+// RPC request : | rpc_cmd (1 byte) | request_size (8 bytes) | request_data (request_size bytes) |
+// RPC response: | response_size (8 bytes) | response_data (response_size bytes) |
+static bool send_rpc_cmd(const std::shared_ptr<socket_t> & sock, enum rpc_cmd cmd, const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
+    uint8_t cmd_byte = cmd;
+    if (!send_data(sock->fd, &cmd_byte, sizeof(cmd_byte))) {
+        return false;
+    }
+    uint64_t input_size = input.size();
+    if (!send_data(sock->fd, &input_size, sizeof(input_size))) {
+        return false;
+    }
+    if (!send_data(sock->fd, input.data(), input.size())) {
+        return false;
+    }
+    uint64_t output_size;
+    if (!recv_data(sock->fd, &output_size, sizeof(output_size))) {
+        return false;
+    }
+    if (output_size == 0) {
+        output.clear();
+        return true;
+    }
+    output.resize(output_size);
+    if (!recv_data(sock->fd, output.data(), output_size)) {
+        return false;
+    }
+    return true;
+}
+
+// RPC client-side implementation
+
+static std::shared_ptr<socket_t> get_socket(const std::string & endpoint) {
+    static std::mutex mutex;
+    std::lock_guard<std::mutex> lock(mutex);
+    static std::unordered_map<std::string, std::weak_ptr<socket_t>> sockets;
+    static bool initialized = false;
+
+    auto it = sockets.find(endpoint);
+    if (it != sockets.end()) {
+        if (auto sock = it->second.lock()) {
+            return sock;
+        }
+    }
+    std::string host;
+    int port;
+    if (!parse_endpoint(endpoint, host, port)) {
+        return nullptr;
+    }
+#ifdef _WIN32
+    if (!initialized) {
+        WSADATA wsaData;
+        int res = WSAStartup(MAKEWORD(2, 2), &wsaData);
+        if (res != 0) {
+            return nullptr;
+        }
+        initialized = true;
+    }
+#else
+    UNUSED(initialized);
+#endif
+    auto sock = socket_connect(host.c_str(), port);
+    if (sock == nullptr) {
+        return nullptr;
+    }
+    GGML_PRINT_DEBUG("[%s] connected to %s, sockfd=%d\n", __func__, endpoint.c_str(), sock->fd);
+    sockets[endpoint] = sock;
+    return sock;
+}
+
+GGML_CALL static const char * ggml_backend_rpc_buffer_get_name(ggml_backend_buffer_t buffer) {
+    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
+    return ctx->name.c_str();
+}
+
+GGML_CALL static void ggml_backend_rpc_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
+    // input serialization format: | remote_ptr (8 bytes) |
+    std::vector<uint8_t> input(sizeof(uint64_t), 0);
+    uint64_t remote_ptr = ctx->remote_ptr;
+    memcpy(input.data(), &remote_ptr, sizeof(remote_ptr));
+    std::vector<uint8_t> output;
+    bool status = send_rpc_cmd(ctx->sock, FREE_BUFFER, input, output);
+    GGML_ASSERT(status);
+    GGML_ASSERT(output.empty());
+    delete ctx;
+}
+
+GGML_CALL static void * ggml_backend_rpc_buffer_get_base(ggml_backend_buffer_t buffer) {
+    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
+    if (ctx->base_cache.find(buffer) != ctx->base_cache.end()) {
+        return ctx->base_cache[buffer];
+    }
+    // input serialization format: | remote_ptr (8 bytes) |
+    std::vector<uint8_t> input(sizeof(uint64_t), 0);
+    uint64_t remote_ptr = ctx->remote_ptr;
+    memcpy(input.data(), &remote_ptr, sizeof(remote_ptr));
+    std::vector<uint8_t> output;
+    bool status = send_rpc_cmd(ctx->sock, BUFFER_GET_BASE, input, output);
+    GGML_ASSERT(status);
+    GGML_ASSERT(output.size() == sizeof(uint64_t));
+    // output serialization format: | base_ptr (8 bytes) |
+    uint64_t base_ptr;
+    memcpy(&base_ptr, output.data(), sizeof(base_ptr));
+    void * base = reinterpret_cast<void *>(base_ptr);
+    ctx->base_cache[buffer] = base;
+    return base;
+}
+
+static rpc_tensor serialize_tensor(const ggml_tensor * tensor) {
+    rpc_tensor result;
+    result.id = reinterpret_cast<uint64_t>(tensor);
+    result.type = tensor->type;
+    if (tensor->buffer) {
+        ggml_backend_buffer_t buffer = tensor->buffer;
+        ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
+        result.buffer = ctx->remote_ptr;
+    } else {
+        result.buffer = 0;
+    }
+    for (uint32_t i = 0; i < GGML_MAX_DIMS; i++) {
+        result.ne[i] = tensor->ne[i];
+        result.nb[i] = tensor->nb[i];
+    }
+    result.op = tensor->op;
+    for (uint32_t i = 0; i < GGML_MAX_OP_PARAMS / sizeof(int32_t); i++) {
+        result.op_params[i] = tensor->op_params[i];
+    }
+    result.flags = tensor->flags;
+    for (uint32_t i = 0; i < GGML_MAX_SRC; i++) {
+        result.src[i] = reinterpret_cast<uint64_t>(tensor->src[i]);
+    }
+    result.view_src = reinterpret_cast<uint64_t>(tensor->view_src);
+    result.view_offs = tensor->view_offs;
+    result.data = reinterpret_cast<uint64_t>(tensor->data);
+    snprintf(result.name, GGML_MAX_NAME, "%s", tensor->name);
+    return result;
+}
+
+GGML_CALL static void ggml_backend_rpc_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
+    UNUSED(buffer);
+    if (ggml_is_quantized(tensor->type)) {
+        // TODO: this check is due to MATRIX_ROW_PADDING in CUDA and should be generalized
+        GGML_ASSERT(tensor->ne[0] % 512 == 0 && "unsupported quantized tensor");
+    }
+}
+
+GGML_CALL static void ggml_backend_rpc_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
+    // input serialization format: | rpc_tensor | offset (8 bytes) | data (size bytes) |
+    size_t input_size = sizeof(rpc_tensor) + sizeof(uint64_t) + size;
+    std::vector<uint8_t> input(input_size, 0);
+    rpc_tensor rpc_tensor = serialize_tensor(tensor);
+    memcpy(input.data(), &rpc_tensor, sizeof(rpc_tensor));
+    memcpy(input.data() + sizeof(rpc_tensor), &offset, sizeof(offset));
+    memcpy(input.data() + sizeof(rpc_tensor) + sizeof(offset), data, size);
+    std::vector<uint8_t> output;
+    bool status = send_rpc_cmd(ctx->sock, SET_TENSOR, input, output);
+    GGML_ASSERT(status);
+}
+
+GGML_CALL static void ggml_backend_rpc_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
+    // input serialization format: | rpc_tensor | offset (8 bytes) | size (8 bytes) |
+    int input_size = sizeof(rpc_tensor) + 2*sizeof(uint64_t);
+    std::vector<uint8_t> input(input_size, 0);
+    rpc_tensor rpc_tensor = serialize_tensor(tensor);
+    memcpy(input.data(), &rpc_tensor, sizeof(rpc_tensor));
+    memcpy(input.data() + sizeof(rpc_tensor), &offset, sizeof(offset));
+    memcpy(input.data() + sizeof(rpc_tensor) + sizeof(offset), &size, sizeof(size));
+    std::vector<uint8_t> output;
+    bool status = send_rpc_cmd(ctx->sock, GET_TENSOR, input, output);
+    GGML_ASSERT(status);
+    GGML_ASSERT(output.size() == size);
+    // output serialization format: | data (size bytes) |
+    memcpy(data, output.data(), size);
+}
+
+GGML_CALL static bool ggml_backend_rpc_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * src, ggml_tensor * dst) {
+    // check if src and dst are on the same server
+    ggml_backend_buffer_t src_buffer = src->buffer;
+    ggml_backend_rpc_buffer_context * src_ctx = (ggml_backend_rpc_buffer_context *)src_buffer->context;
+    ggml_backend_buffer_t dst_buffer = dst->buffer;
+    ggml_backend_rpc_buffer_context * dst_ctx = (ggml_backend_rpc_buffer_context *)dst_buffer->context;
+    if (src_ctx->sock != dst_ctx->sock) {
+        return false;
+    }
+    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
+    // input serialization format: | rpc_tensor src | rpc_tensor dst |
+    int input_size = 2*sizeof(rpc_tensor);
+    std::vector<uint8_t> input(input_size, 0);
+    rpc_tensor rpc_src = serialize_tensor(src);
+    rpc_tensor rpc_dst = serialize_tensor(dst);
+    memcpy(input.data(), &rpc_src, sizeof(rpc_src));
+    memcpy(input.data() + sizeof(rpc_src), &rpc_dst, sizeof(rpc_dst));
+    std::vector<uint8_t> output;
+    bool status = send_rpc_cmd(ctx->sock, COPY_TENSOR, input, output);
+    GGML_ASSERT(status);
+    // output serialization format: | result (1 byte) |
+    GGML_ASSERT(output.size() == 1);
+    return output[0];
+}
+
+GGML_CALL static void ggml_backend_rpc_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
+    ggml_backend_rpc_buffer_context * ctx = (ggml_backend_rpc_buffer_context *)buffer->context;
+    // serialization format: | bufptr (8 bytes) | value (1 byte) |
+    int input_size = sizeof(uint64_t) + sizeof(uint8_t);
+    std::vector<uint8_t> input(input_size, 0);
+    memcpy(input.data(), &ctx->remote_ptr, sizeof(ctx->remote_ptr));
+    memcpy(input.data() + sizeof(ctx->remote_ptr), &value, sizeof(value));
+    std::vector<uint8_t> output;
+    bool status = send_rpc_cmd(ctx->sock, BUFFER_CLEAR, input, output);
+    GGML_ASSERT(status);
+}
+
+static ggml_backend_buffer_i ggml_backend_rpc_buffer_interface = {
+    /* .get_name        = */ ggml_backend_rpc_buffer_get_name,
+    /* .free_buffer     = */ ggml_backend_rpc_buffer_free_buffer,
+    /* .get_base        = */ ggml_backend_rpc_buffer_get_base,
+    /* .init_tensor     = */ ggml_backend_rpc_buffer_init_tensor,
+    /* .set_tensor      = */ ggml_backend_rpc_buffer_set_tensor,
+    /* .get_tensor      = */ ggml_backend_rpc_buffer_get_tensor,
+    /* .cpy_tensor      = */ ggml_backend_rpc_buffer_cpy_tensor,
+    /* .clear           = */ ggml_backend_rpc_buffer_clear,
+    /* .reset           = */ NULL,
+};
+
+GGML_CALL static const char * ggml_backend_rpc_buffer_type_name(ggml_backend_buffer_type_t buft) {
+    ggml_backend_rpc_buffer_type_context * buft_ctx = (ggml_backend_rpc_buffer_type_context *)buft->context;
+    return buft_ctx->name.c_str();
+}
+
+GGML_CALL static ggml_backend_buffer_t ggml_backend_rpc_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    ggml_backend_rpc_buffer_type_context * buft_ctx = (ggml_backend_rpc_buffer_type_context *)buft->context;
+    // input serialization format: | size (8 bytes) |
+    int input_size = sizeof(uint64_t);
+    std::vector<uint8_t> input(input_size, 0);
+    memcpy(input.data(), &size, sizeof(size));
+    std::vector<uint8_t> output;
+    auto sock = get_socket(buft_ctx->endpoint);
+    bool status = send_rpc_cmd(sock, ALLOC_BUFFER, input, output);
+    GGML_ASSERT(status);
+    GGML_ASSERT(output.size() == 2*sizeof(uint64_t));
+    // output serialization format: | remote_ptr (8 bytes) | remote_size (8 bytes) |
+    uint64_t remote_ptr;
+    memcpy(&remote_ptr, output.data(), sizeof(remote_ptr));
+    size_t remote_size;
+    memcpy(&remote_size, output.data() + sizeof(uint64_t), sizeof(remote_size));
+    if (remote_ptr != 0) {
+        ggml_backend_buffer_t buffer = ggml_backend_buffer_init(buft,
+            ggml_backend_rpc_buffer_interface,
+            new ggml_backend_rpc_buffer_context{sock, {}, remote_ptr, "RPC[" + std::string(buft_ctx->endpoint) + "]"},
+            remote_size);
+        return buffer;
+    } else {
+        return nullptr;
+    }
+}
+
+static size_t get_alignment(const std::shared_ptr<socket_t> & sock) {
+    // input serialization format: | 0 bytes |
+    std::vector<uint8_t> input;
+    std::vector<uint8_t> output;
+    bool status = send_rpc_cmd(sock, GET_ALIGNMENT, input, output);
+    GGML_ASSERT(status);
+    GGML_ASSERT(output.size() == sizeof(uint64_t));
+    // output serialization format: | alignment (8 bytes) |
+    uint64_t alignment;
+    memcpy(&alignment, output.data(), sizeof(alignment));
+    return alignment;
+}
+
+GGML_CALL static size_t ggml_backend_rpc_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
+    ggml_backend_rpc_buffer_type_context * buft_ctx = (ggml_backend_rpc_buffer_type_context *)buft->context;
+    return buft_ctx->alignment;
+}
+
+static size_t get_max_size(const std::shared_ptr<socket_t> & sock) {
+    // input serialization format: | 0 bytes |
+    std::vector<uint8_t> input;
+    std::vector<uint8_t> output;
+    bool status = send_rpc_cmd(sock, GET_MAX_SIZE, input, output);
+    GGML_ASSERT(status);
+    GGML_ASSERT(output.size() == sizeof(uint64_t));
+    // output serialization format: | max_size (8 bytes) |
+    uint64_t max_size;
+    memcpy(&max_size, output.data(), sizeof(max_size));
+    return max_size;
+}
+
+GGML_CALL static size_t ggml_backend_rpc_get_max_size(ggml_backend_buffer_type_t buft) {
+    ggml_backend_rpc_buffer_type_context * buft_ctx = (ggml_backend_rpc_buffer_type_context *)buft->context;
+    return buft_ctx->max_size;
+}
+
+GGML_CALL static size_t ggml_backend_rpc_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
+    UNUSED(buft);
+    return ggml_nbytes(tensor);
+}
+
+static ggml_backend_buffer_type_i ggml_backend_rpc_buffer_type_interface = {
+    /* .get_name         = */ ggml_backend_rpc_buffer_type_name,
+    /* .alloc_buffer     = */ ggml_backend_rpc_buffer_type_alloc_buffer,
+    /* .get_alignment    = */ ggml_backend_rpc_buffer_type_get_alignment,
+    /* .get_max_size     = */ ggml_backend_rpc_get_max_size,
+    /* .get_alloc_size   = */ ggml_backend_rpc_buffer_type_get_alloc_size,
+    /* .is_host          = */ NULL,
+};
+
+GGML_CALL static const char * ggml_backend_rpc_name(ggml_backend_t backend) {
+    ggml_backend_rpc_context * rpc_ctx = (ggml_backend_rpc_context *)backend->context;
+
+    return rpc_ctx->name.c_str();
+}
+
+GGML_CALL static void ggml_backend_rpc_free(ggml_backend_t backend) {
+    ggml_backend_rpc_context * rpc_ctx = (ggml_backend_rpc_context *)backend->context;
+    delete rpc_ctx;
+    delete backend;
+}
+
+GGML_CALL static ggml_backend_buffer_type_t ggml_backend_rpc_get_default_buffer_type(ggml_backend_t backend) {
+    ggml_backend_rpc_context * ctx = (ggml_backend_rpc_context *)backend->context;
+    return ggml_backend_rpc_buffer_type(ctx->endpoint.c_str());
+}
+
+GGML_CALL static void ggml_backend_rpc_synchronize(ggml_backend_t backend) {
+    UNUSED(backend);
+    // this is no-op because we don't have any async operations
+}
+
+static void add_tensor(ggml_tensor * tensor, std::vector<rpc_tensor> & tensors, std::unordered_set<ggml_tensor*> & visited) {
+    if (tensor == nullptr) {
+        return;
+    }
+    if (visited.find(tensor) != visited.end()) {
+        return;
+    }
+    visited.insert(tensor);
+    for (int i = 0; i < GGML_MAX_SRC; i++) {
+        add_tensor(tensor->src[i], tensors, visited);
+    }
+    add_tensor(tensor->view_src, tensors, visited);
+    tensors.push_back(serialize_tensor(tensor));
+}
+
+static void serialize_graph(const ggml_cgraph * cgraph, std::vector<uint8_t> & output) {
+    uint32_t n_nodes = cgraph->n_nodes;
+    std::vector<rpc_tensor> tensors;
+    std::unordered_set<ggml_tensor*> visited;
+    for (uint32_t i = 0; i < n_nodes; i++) {
+        add_tensor(cgraph->nodes[i], tensors, visited);
+    }
+    // serialization format:
+    // | n_nodes (4 bytes) | nodes (n_nodes * sizeof(uint64_t) | n_tensors (4 bytes) | tensors (n_tensors * sizeof(rpc_tensor)) |
+    uint32_t n_tensors = tensors.size();
+    int output_size = sizeof(uint32_t) + n_nodes * sizeof(uint64_t) + sizeof(uint32_t) + n_tensors * sizeof(rpc_tensor);
+    output.resize(output_size, 0);
+    memcpy(output.data(), &n_nodes, sizeof(n_nodes));
+    for (uint32_t i = 0; i < n_nodes; i++) {
+        memcpy(output.data() + sizeof(n_nodes) + i * sizeof(uint64_t), &cgraph->nodes[i], sizeof(uint64_t));
+    }
+    uint32_t * out_ntensors = (uint32_t *)(output.data() + sizeof(n_nodes) + n_nodes * sizeof(uint64_t));
+    *out_ntensors = n_tensors;
+    rpc_tensor * out_tensors = (rpc_tensor *)(output.data() + sizeof(n_nodes) + n_nodes * sizeof(uint64_t) + sizeof(uint32_t));
+    memcpy(out_tensors, tensors.data(), n_tensors * sizeof(rpc_tensor));
+}
+
+GGML_CALL static enum ggml_status ggml_backend_rpc_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
+    ggml_backend_rpc_context * rpc_ctx = (ggml_backend_rpc_context *)backend->context;
+    std::vector<uint8_t> input;
+    serialize_graph(cgraph, input);
+    std::vector<uint8_t> output;
+    auto sock = get_socket(rpc_ctx->endpoint);
+    bool status = send_rpc_cmd(sock, GRAPH_COMPUTE, input, output);
+    GGML_ASSERT(status);
+    GGML_ASSERT(output.size() == 1);
+    return (enum ggml_status)output[0];
+}
+
+GGML_CALL static bool ggml_backend_rpc_supports_op(ggml_backend_t backend, const ggml_tensor * op) {
+    UNUSED(backend);
+    UNUSED(op);
+    //TODO: call the remote backend and cache the results
+    return true;
+}
+
+GGML_CALL static bool ggml_backend_rpc_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
+    if (buft->iface.get_name != ggml_backend_rpc_buffer_type_name) {
+        return false;
+    }
+    ggml_backend_rpc_buffer_type_context * buft_ctx = (ggml_backend_rpc_buffer_type_context *)buft->context;
+    ggml_backend_rpc_context * rpc_ctx = (ggml_backend_rpc_context *)backend->context;
+    return buft_ctx->endpoint == rpc_ctx->endpoint;
+}
+
+static ggml_backend_i ggml_backend_rpc_interface = {
+    /* .get_name                = */ ggml_backend_rpc_name,
+    /* .free                    = */ ggml_backend_rpc_free,
+    /* .get_default_buffer_type = */ ggml_backend_rpc_get_default_buffer_type,
+    /* .set_tensor_async        = */ NULL,
+    /* .get_tensor_async        = */ NULL,
+    /* .cpy_tensor_async        = */ NULL,
+    /* .synchronize             = */ ggml_backend_rpc_synchronize,
+    /* .graph_plan_create       = */ NULL,
+    /* .graph_plan_free         = */ NULL,
+    /* .graph_plan_update       = */ NULL,
+    /* .graph_plan_compute      = */ NULL,
+    /* .graph_compute           = */ ggml_backend_rpc_graph_compute,
+    /* .supports_op             = */ ggml_backend_rpc_supports_op,
+    /* .supports_buft           = */ ggml_backend_rpc_supports_buft,
+    /* .offload_op              = */ NULL,
+    /* .event_new               = */ NULL,
+    /* .event_free              = */ NULL,
+    /* .event_record            = */ NULL,
+    /* .event_wait              = */ NULL,
+    /* .event_synchronize       = */ NULL,
+};
+
+GGML_API GGML_CALL ggml_backend_buffer_type_t ggml_backend_rpc_buffer_type(const char * endpoint) {
+    static std::mutex mutex;
+    std::lock_guard<std::mutex> lock(mutex);
+    // NOTE: buffer types are allocated and never freed; this is by design
+    static std::unordered_map<std::string, ggml_backend_buffer_type_t> buft_map;
+    auto it = buft_map.find(endpoint);
+    if (it != buft_map.end()) {
+        return it->second;
+    }
+    auto sock = get_socket(endpoint);
+    if (sock == nullptr) {
+        return nullptr;
+    }
+    size_t alignment = get_alignment(sock);
+    size_t max_size = get_max_size(sock);
+    ggml_backend_rpc_buffer_type_context * buft_ctx = new ggml_backend_rpc_buffer_type_context {
+        /* .endpoint  = */ endpoint,
+        /* .name      = */ "RPC[" + std::string(endpoint) + "]",
+        /* .alignment = */ alignment,
+        /* .max_size  = */ max_size
+    };
+
+    ggml_backend_buffer_type_t buft = new ggml_backend_buffer_type {
+        /* .iface   = */ ggml_backend_rpc_buffer_type_interface,
+        /* .context = */ buft_ctx
+    };
+    buft_map[endpoint] = buft;
+    return buft;
+}
+
+GGML_CALL ggml_backend_t ggml_backend_rpc_init(const char * endpoint) {
+    ggml_backend_rpc_context * ctx = new ggml_backend_rpc_context {
+        /* .endpoint  = */ endpoint,
+        /* .name      = */ "RPC[" + std::string(endpoint) + "]",
+    };
+
+    ggml_backend_t backend = new ggml_backend {
+        /* .guid      = */ ggml_backend_rpc_guid(),
+        /* .interface = */ ggml_backend_rpc_interface,
+        /* .context   = */ ctx
+    };
+    return backend;
+}
+
+GGML_API GGML_CALL bool ggml_backend_is_rpc(ggml_backend_t backend) {
+    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_rpc_guid());
+}
+
+static void get_device_memory(const std::shared_ptr<socket_t> & sock, size_t * free, size_t * total) {
+    // input serialization format: | 0 bytes |
+    std::vector<uint8_t> input;
+    std::vector<uint8_t> output;
+    bool status = send_rpc_cmd(sock, GET_DEVICE_MEMORY, input, output);
+    GGML_ASSERT(status);
+    GGML_ASSERT(output.size() == 2*sizeof(uint64_t));
+    // output serialization format: | free (8 bytes) | total (8 bytes) |
+    uint64_t free_mem;
+    memcpy(&free_mem, output.data(), sizeof(free_mem));
+    uint64_t total_mem;
+    memcpy(&total_mem, output.data() + sizeof(uint64_t), sizeof(total_mem));
+    *free = free_mem;
+    *total = total_mem;
+}
+
+GGML_API GGML_CALL void ggml_backend_rpc_get_device_memory(const char * endpoint, size_t * free, size_t * total) {
+    auto sock = get_socket(endpoint);
+    if (sock == nullptr) {
+        *free = 0;
+        *total = 0;
+        return;
+    }
+    get_device_memory(sock, free, total);
+}
+
+// RPC server-side implementation
+
+class rpc_server {
+public:
+    rpc_server(ggml_backend_t backend) : backend(backend) {}
+    ~rpc_server();
+
+    bool alloc_buffer(const std::vector<uint8_t> & input, std::vector<uint8_t> & output);
+    void get_alignment(std::vector<uint8_t> & output);
+    void get_max_size(std::vector<uint8_t> & output);
+    bool buffer_get_base(const std::vector<uint8_t> & input, std::vector<uint8_t> & output);
+    bool free_buffer(const std::vector<uint8_t> & input);
+    bool buffer_clear(const std::vector<uint8_t> & input);
+    bool set_tensor(const std::vector<uint8_t> & input);
+    bool get_tensor(const std::vector<uint8_t> & input, std::vector<uint8_t> & output);
+    bool copy_tensor(const std::vector<uint8_t> & input, std::vector<uint8_t> & output);
+    bool graph_compute(const std::vector<uint8_t> & input, std::vector<uint8_t> & output);
+
+private:
+    ggml_tensor * deserialize_tensor(struct ggml_context * ctx, const rpc_tensor * tensor);
+    ggml_tensor * create_node(uint64_t id,
+                              struct ggml_context * ctx,
+                              const std::unordered_map<uint64_t, const rpc_tensor*> & tensor_ptrs,
+                              std::unordered_map<uint64_t, struct ggml_tensor*> & tensor_map);
+
+
+    ggml_backend_t backend;
+    std::unordered_set<ggml_backend_buffer_t> buffers;
+};
+
+bool rpc_server::alloc_buffer(const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
+    // input serialization format: | size (8 bytes) |
+    if (input.size() != sizeof(uint64_t)) {
+        return false;
+    }
+    uint64_t size;
+    memcpy(&size, input.data(), sizeof(size));
+    ggml_backend_buffer_type_t buft = ggml_backend_get_default_buffer_type(backend);
+    ggml_backend_buffer_t buffer = ggml_backend_buft_alloc_buffer(buft, size);
+    uint64_t remote_ptr = 0;
+    uint64_t remote_size = 0;
+    if (buffer != nullptr) {
+        remote_ptr = reinterpret_cast<uint64_t>(buffer);
+        remote_size = buffer->size;
+        GGML_PRINT_DEBUG("[%s] size: %" PRIu64 " -> remote_ptr: %" PRIx64 ", remote_size: %" PRIu64 "\n", __func__, size, remote_ptr, remote_size);
+        buffers.insert(buffer);
+    } else {
+        GGML_PRINT_DEBUG("[%s] size: %" PRIu64 " -> failed\n", __func__, size);
+    }
+    // output serialization format: | remote_ptr (8 bytes) | remote_size (8 bytes) |
+    output.resize(2*sizeof(uint64_t), 0);
+    memcpy(output.data(), &remote_ptr, sizeof(remote_ptr));
+    memcpy(output.data() + sizeof(uint64_t), &remote_size, sizeof(remote_size));
+    return true;
+}
+
+void rpc_server::get_alignment(std::vector<uint8_t> & output) {
+    ggml_backend_buffer_type_t buft = ggml_backend_get_default_buffer_type(backend);
+    size_t alignment = ggml_backend_buft_get_alignment(buft);
+    GGML_PRINT_DEBUG("[%s] alignment: %lu\n", __func__, alignment);
+    // output serialization format: | alignment (8 bytes) |
+    output.resize(sizeof(uint64_t), 0);
+    memcpy(output.data(), &alignment, sizeof(alignment));
+}
+
+void rpc_server::get_max_size(std::vector<uint8_t> & output) {
+    ggml_backend_buffer_type_t buft = ggml_backend_get_default_buffer_type(backend);
+    size_t max_size = ggml_backend_buft_get_max_size(buft);
+    GGML_PRINT_DEBUG("[%s] max_size: %lu\n", __func__, max_size);
+    // output serialization format: | max_size (8 bytes) |
+    output.resize(sizeof(uint64_t), 0);
+    memcpy(output.data(), &max_size, sizeof(max_size));
+}
+
+bool rpc_server::buffer_get_base(const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
+    // input serialization format: | remote_ptr (8 bytes) |
+    if (input.size() != sizeof(uint64_t)) {
+        return false;
+    }
+    uint64_t remote_ptr;
+    memcpy(&remote_ptr, input.data(), sizeof(remote_ptr));
+    GGML_PRINT_DEBUG("[%s] remote_ptr: %" PRIx64 "\n", __func__, remote_ptr);
+    ggml_backend_buffer_t buffer = reinterpret_cast<ggml_backend_buffer_t>(remote_ptr);
+    if (buffers.find(buffer) == buffers.end()) {
+        GGML_PRINT_DEBUG("[%s] buffer not found\n", __func__);
+        return false;
+    }
+    void * base = ggml_backend_buffer_get_base(buffer);
+    // output serialization format: | base_ptr (8 bytes) |
+    uint64_t base_ptr = reinterpret_cast<uint64_t>(base);
+    output.resize(sizeof(uint64_t), 0);
+    memcpy(output.data(), &base_ptr, sizeof(base_ptr));
+    return true;
+}
+
+bool rpc_server::free_buffer(const std::vector<uint8_t> & input) {
+    // input serialization format: | remote_ptr (8 bytes) |
+    if (input.size() != sizeof(uint64_t)) {
+        return false;
+    }
+    uint64_t remote_ptr;
+    memcpy(&remote_ptr, input.data(), sizeof(remote_ptr));
+    GGML_PRINT_DEBUG("[%s] remote_ptr: %" PRIx64 "\n", __func__, remote_ptr);
+    ggml_backend_buffer_t buffer = reinterpret_cast<ggml_backend_buffer_t>(remote_ptr);
+    if (buffers.find(buffer) == buffers.end()) {
+        GGML_PRINT_DEBUG("[%s] buffer not found\n", __func__);
+        return false;
+    }
+    ggml_backend_buffer_free(buffer);
+    buffers.erase(buffer);
+    return true;
+}
+
+bool rpc_server::buffer_clear(const std::vector<uint8_t> & input) {
+    // input serialization format: | remote_ptr (8 bytes) | value (1 byte) |
+    if (input.size() != sizeof(uint64_t) + sizeof(uint8_t)) {
+        return false;
+    }
+    uint64_t remote_ptr;
+    memcpy(&remote_ptr, input.data(), sizeof(remote_ptr));
+    uint8_t value;
+    memcpy(&value, input.data() + sizeof(uint64_t), sizeof(value));
+    GGML_PRINT_DEBUG("[%s] remote_ptr: %" PRIx64 ", value: %u\n", __func__, remote_ptr, value);
+    ggml_backend_buffer_t buffer = reinterpret_cast<ggml_backend_buffer_t>(remote_ptr);
+    if (buffers.find(buffer) == buffers.end()) {
+        GGML_PRINT_DEBUG("[%s] buffer not found\n", __func__);
+        return false;
+    }
+    ggml_backend_buffer_clear(buffer, value);
+    return true;
+}
+
+ggml_tensor * rpc_server::deserialize_tensor(struct ggml_context * ctx, const rpc_tensor * tensor) {
+    ggml_tensor * result = ggml_new_tensor_4d(ctx, (ggml_type) tensor->type,
+        tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]);
+    for (uint32_t i = 0; i < GGML_MAX_DIMS; i++) {
+        result->nb[i] = tensor->nb[i];
+    }
+    result->buffer = reinterpret_cast<ggml_backend_buffer_t>(tensor->buffer);
+    if (result->buffer && buffers.find(result->buffer) == buffers.end()) {
+        return nullptr;
+    }
+    result->op = (ggml_op) tensor->op;
+    for (uint32_t i = 0; i < GGML_MAX_OP_PARAMS / sizeof(int32_t); i++) {
+        result->op_params[i] = tensor->op_params[i];
+    }
+    result->flags = tensor->flags;
+    result->data = reinterpret_cast<void *>(tensor->data);
+    ggml_set_name(result, tensor->name);
+    return result;
+}
+
+
+bool rpc_server::set_tensor(const std::vector<uint8_t> & input) {
+    // serialization format: | rpc_tensor | offset (8 bytes) | data (size bytes) |
+    if (input.size() < sizeof(rpc_tensor) + sizeof(uint64_t)) {
+        return false;
+    }
+    const rpc_tensor * in_tensor = (const rpc_tensor *)input.data();
+    uint64_t offset;
+    memcpy(&offset, input.data() + sizeof(rpc_tensor), sizeof(offset));
+    size_t size = input.size() - sizeof(rpc_tensor) - sizeof(offset);
+
+    struct ggml_init_params params {
+        /*.mem_size   =*/ ggml_tensor_overhead(),
+        /*.mem_buffer =*/ NULL,
+        /*.no_alloc   =*/ true,
+    };
+    struct ggml_context * ctx = ggml_init(params);
+    ggml_tensor * tensor = deserialize_tensor(ctx, in_tensor);
+    if (tensor == nullptr) {
+        GGML_PRINT_DEBUG("[%s] error deserializing tensor\n", __func__);
+        ggml_free(ctx);
+        return false;
+    }
+    GGML_PRINT_DEBUG("[%s] buffer: %p, data: %p, offset: %" PRIu64 ", size: %zu\n", __func__, (void*)tensor->buffer, tensor->data, offset, size);
+    const void * data = input.data() + sizeof(rpc_tensor) + sizeof(offset);
+    ggml_backend_tensor_set(tensor, data, offset, size);
+    ggml_free(ctx);
+    return true;
+}
+
+bool rpc_server::get_tensor(const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
+    // serialization format: | rpc_tensor | offset (8 bytes) | size (8 bytes) |
+    if (input.size() != sizeof(rpc_tensor) + 2*sizeof(uint64_t)) {
+        return false;
+    }
+    const rpc_tensor * in_tensor = (const rpc_tensor *)input.data();
+    uint64_t offset;
+    memcpy(&offset, input.data() + sizeof(rpc_tensor), sizeof(offset));
+    uint64_t size;
+    memcpy(&size, input.data() + sizeof(rpc_tensor) + sizeof(offset), sizeof(size));
+
+    struct ggml_init_params params {
+        /*.mem_size   =*/ ggml_tensor_overhead(),
+        /*.mem_buffer =*/ NULL,
+        /*.no_alloc   =*/ true,
+    };
+    struct ggml_context * ctx = ggml_init(params);
+    ggml_tensor * tensor = deserialize_tensor(ctx, in_tensor);
+    if (tensor == nullptr) {
+        GGML_PRINT_DEBUG("[%s] error deserializing tensor\n", __func__);
+        ggml_free(ctx);
+        return false;
+    }
+    GGML_PRINT_DEBUG("[%s] buffer: %p, data: %p, offset: %" PRIu64 ", size: %" PRIu64 "\n", __func__, (void*)tensor->buffer, tensor->data, offset, size);
+    // output serialization format: | data (size bytes) |
+    output.resize(size, 0);
+    ggml_backend_tensor_get(tensor, output.data(), offset, size);
+    ggml_free(ctx);
+    return true;
+}
+
+bool rpc_server::copy_tensor(const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
+    // serialization format: | rpc_tensor src | rpc_tensor dst |
+    if (input.size() != 2*sizeof(rpc_tensor)) {
+        return false;
+    }
+    const rpc_tensor * rpc_src = (const rpc_tensor *)input.data();
+    const rpc_tensor * rpc_dst = (const rpc_tensor *)(input.data() + sizeof(rpc_src));
+
+    struct ggml_init_params params {
+        /*.mem_size   =*/ 2*ggml_tensor_overhead(),
+        /*.mem_buffer =*/ NULL,
+        /*.no_alloc   =*/ true,
+    };
+    struct ggml_context * ctx = ggml_init(params);
+    ggml_tensor * src = deserialize_tensor(ctx, rpc_src);
+    ggml_tensor * dst = deserialize_tensor(ctx, rpc_dst);
+    if (src == nullptr || dst == nullptr) {
+        GGML_PRINT_DEBUG("[%s] error deserializing tensors\n", __func__);
+        ggml_free(ctx);
+        return false;
+    }
+    GGML_PRINT_DEBUG("[%s] src->buffer: %p, dst->buffer: %p\n", __func__, (void*)src->buffer, (void*)dst->buffer);
+    bool result = ggml_backend_buffer_copy_tensor(src, dst);
+    // output serialization format: | result (1 byte) |
+    output.resize(1, 0);
+    output[0] = result;
+    ggml_free(ctx);
+    return true;
+}
+
+ggml_tensor * rpc_server::create_node(uint64_t id,
+                                      struct ggml_context * ctx,
+                                      const std::unordered_map<uint64_t, const rpc_tensor*> & tensor_ptrs,
+                                      std::unordered_map<uint64_t, struct ggml_tensor*> & tensor_map) {
+    if (id == 0) {
+        return nullptr;
+    }
+    if (tensor_map.find(id) != tensor_map.end()) {
+        return tensor_map[id];
+    }
+    const rpc_tensor * tensor = tensor_ptrs.at(id);
+    struct ggml_tensor * result = deserialize_tensor(ctx, tensor);
+    if (result == nullptr) {
+        return nullptr;
+    }
+    tensor_map[id] = result;
+    for (int i = 0; i < GGML_MAX_SRC; i++) {
+        result->src[i] = create_node(tensor->src[i], ctx, tensor_ptrs, tensor_map);
+    }
+    result->view_src = create_node(tensor->view_src, ctx, tensor_ptrs, tensor_map);
+    result->view_offs = tensor->view_offs;
+    return result;
+}
+
+bool rpc_server::graph_compute(const std::vector<uint8_t> & input, std::vector<uint8_t> & output) {
+    // serialization format:
+    // | n_nodes (4 bytes) | nodes (n_nodes * sizeof(uint64_t) | n_tensors (4 bytes) | tensors (n_tensors * sizeof(rpc_tensor)) |
+    if (input.size() < sizeof(uint32_t)) {
+        return false;
+    }
+    uint32_t n_nodes;
+    memcpy(&n_nodes, input.data(), sizeof(n_nodes));
+    if (input.size() < sizeof(uint32_t) + n_nodes*sizeof(uint64_t) + sizeof(uint32_t)) {
+        return false;
+    }
+    const uint64_t * nodes = (const uint64_t *)(input.data() + sizeof(n_nodes));
+    uint32_t n_tensors;
+    memcpy(&n_tensors, input.data() + sizeof(n_nodes) + n_nodes*sizeof(uint64_t), sizeof(n_tensors));
+    if (input.size() < sizeof(uint32_t) + n_nodes*sizeof(uint64_t) + sizeof(uint32_t) + n_tensors*sizeof(rpc_tensor)) {
+        return false;
+    }
+    const rpc_tensor * tensors = (const rpc_tensor *)(input.data() + sizeof(n_nodes) + n_nodes*sizeof(uint64_t) + sizeof(n_tensors));
+    GGML_PRINT_DEBUG("[%s] n_nodes: %u, n_tensors: %u\n", __func__, n_nodes, n_tensors);
+
+    static size_t buf_size = ggml_tensor_overhead()*(n_nodes + n_tensors) + ggml_graph_overhead_custom(n_nodes, false);
+    struct ggml_init_params params = {
+        /*.mem_size   =*/ buf_size,
+        /*.mem_buffer =*/ NULL,
+        /*.no_alloc   =*/ true,
+    };
+    struct ggml_context * ctx = ggml_init(params);
+    struct ggml_cgraph * graph = ggml_new_graph_custom(ctx, n_nodes, false);
+    graph->n_nodes = n_nodes;
+    std::unordered_map<uint64_t, const rpc_tensor*> tensor_ptrs;
+    for (uint32_t i = 0; i < n_tensors; i++) {
+        tensor_ptrs[tensors[i].id] = &tensors[i];
+    }
+    std::unordered_map<uint64_t, ggml_tensor*> tensor_map;
+    for (uint32_t i = 0; i < n_nodes; i++) {
+        int64_t id;
+        memcpy(&id, &nodes[i], sizeof(id));
+        graph->nodes[i] = create_node(id, ctx, tensor_ptrs, tensor_map);
+    }
+    ggml_status status = ggml_backend_graph_compute(backend, graph);
+    // output serialization format: | status (1 byte) |
+    output.resize(1, 0);
+    output[0] = status;
+    ggml_free(ctx);
+    return true;
+}
+
+rpc_server::~rpc_server() {
+    for (auto buffer : buffers) {
+        ggml_backend_buffer_free(buffer);
+    }
+}
+
+static void rpc_serve_client(ggml_backend_t backend, sockfd_t sockfd, size_t free_mem, size_t total_mem) {
+    rpc_server server(backend);
+    while (true) {
+        uint8_t cmd;
+        if (!recv_data(sockfd, &cmd, 1)) {
+            break;
+        }
+        std::vector<uint8_t> input;
+        std::vector<uint8_t> output;
+        uint64_t input_size;
+        if (!recv_data(sockfd, &input_size, sizeof(input_size))) {
+            break;
+        }
+        input.resize(input_size);
+        if (!recv_data(sockfd, input.data(), input_size)) {
+            break;
+        }
+        bool ok = true;
+        switch (cmd) {
+            case ALLOC_BUFFER: {
+                ok = server.alloc_buffer(input, output);
+                break;
+            }
+            case GET_ALIGNMENT: {
+                server.get_alignment(output);
+                break;
+            }
+            case GET_MAX_SIZE: {
+                server.get_max_size(output);
+                break;
+            }
+            case BUFFER_GET_BASE: {
+                ok = server.buffer_get_base(input, output);
+                break;
+            }
+            case FREE_BUFFER: {
+                ok = server.free_buffer(input);
+                break;
+            }
+            case BUFFER_CLEAR: {
+                ok = server.buffer_clear(input);
+                break;
+            }
+            case SET_TENSOR: {
+                ok = server.set_tensor(input);
+                break;
+            }
+            case GET_TENSOR: {
+                ok = server.get_tensor(input, output);
+                break;
+            }
+            case COPY_TENSOR: {
+                ok = server.copy_tensor(input, output);
+                break;
+            }
+            case GRAPH_COMPUTE: {
+                ok = server.graph_compute(input, output);
+                break;
+            }
+            case GET_DEVICE_MEMORY: {
+                // output serialization format: | free (8 bytes) | total (8 bytes) |
+                output.resize(2*sizeof(uint64_t), 0);
+                memcpy(output.data(), &free_mem, sizeof(free_mem));
+                memcpy(output.data() + sizeof(uint64_t), &total_mem, sizeof(total_mem));
+                break;
+            }
+            default: {
+                fprintf(stderr, "Unknown command: %d\n", cmd);
+                ok = false;
+            }
+        }
+        if (!ok) {
+            break;
+        }
+        uint64_t output_size = output.size();
+        if (!send_data(sockfd, &output_size, sizeof(output_size))) {
+            break;
+        }
+        if (!send_data(sockfd, output.data(), output_size)) {
+            break;
+        }
+    }
+}
+
+void start_rpc_server(ggml_backend_t backend, const char * endpoint, size_t free_mem, size_t total_mem) {
+    std::string host;
+    int port;
+    if (!parse_endpoint(endpoint, host, port)) {
+        return;
+    }
+#ifdef _WIN32
+    {
+        WSADATA wsaData;
+        int res = WSAStartup(MAKEWORD(2, 2), &wsaData);
+        if (res != 0) {
+            fprintf(stderr, "WSAStartup failed: %d\n", res);
+            return;
+        }
+    }
+#endif
+    auto server_socket = create_server_socket(host.c_str(), port);
+    if (server_socket == nullptr) {
+        fprintf(stderr, "Failed to create server socket\n");
+        return;
+    }
+    while (true) {
+        auto client_socket = socket_accept(server_socket->fd);
+        if (client_socket == nullptr) {
+            fprintf(stderr, "Failed to accept client connection\n");
+            return;
+        }
+        printf("Accepted client connection, free_mem=%zu, total_mem=%zu\n", free_mem, total_mem);
+        rpc_serve_client(backend, client_socket->fd, free_mem, total_mem);
+        printf("Client connection closed\n");
+    }
+#ifdef _WIN32
+    WSACleanup();
+#endif
+}
diff --git a/ggml/src/ggml-sycl.cpp b/ggml/src/ggml-sycl.cpp
new file mode 100644 (file)
index 0000000..4a668a2
--- /dev/null
@@ -0,0 +1,6352 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#include <algorithm>
+#include <assert.h>
+#include <atomic>
+#include <cinttypes>
+#include <cstddef>
+#include <cstdint>
+#include <cstdlib>
+#include <float.h>
+#include <limits>
+#include <stdint.h>
+#include <stdio.h>
+#include <vector>
+#include <cmath>
+#include <iostream>
+#include <fstream>
+#include <stdio.h>
+#include <stdlib.h>
+#include <regex>
+
+#include <sycl/sycl.hpp>
+#include <sycl/half_type.hpp>
+
+#include "ggml-sycl.h"
+#include "ggml.h"
+#include "ggml-backend-impl.h"
+
+#include "ggml-sycl/backend.hpp"
+#include "ggml-sycl/presets.hpp"
+
+bool   ggml_sycl_loaded(void);
+void   ggml_sycl_free_data(struct ggml_tensor * tensor);
+void   ggml_sycl_copy_to_device(struct ggml_tensor * tensor);
+void   ggml_sycl_set_main_device(int main_device);
+void   ggml_sycl_set_mul_mat_q(bool mul_mat_q);
+void   ggml_sycl_get_device_description(int device, char * description, size_t description_size);
+bool   ggml_backend_is_sycl(ggml_backend_t backend);
+int    ggml_backend_sycl_get_device(ggml_backend_t backend);
+static bool ggml_backend_buffer_is_sycl_split(ggml_backend_buffer_t buffer);
+static inline int get_sycl_env(const char *env_name, int default_val);
+static inline int get_work_group_size(const sycl::device& device);
+
+void dev2dev_memcpy(sycl::queue &q_dst, sycl::queue &q_src, void *ptr_dst,
+                    const void *ptr_src, size_t size) {
+    char *host_buf = (char *)malloc(size);
+    q_src.memcpy(host_buf, (const char *)ptr_src, size).wait();
+    q_dst.memcpy((char *)ptr_dst, host_buf, size).wait();
+    free(host_buf);
+}
+
+typedef void (*cpy_kernel_t)(const char * cx, char * cdst);
+typedef void (*ggml_sycl_func_t)(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst);
+typedef void (*ggml_sycl_op_mul_mat_t)(
+    ggml_backend_sycl_context & ctx,
+    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
+    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
+    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
+    const int64_t src1_ncols, const int64_t src1_padded_row_size,
+    const queue_ptr &stream);
+typedef void (*ggml_sycl_op_flatten_t)(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                       const ggml_tensor *src1,
+                                       ggml_tensor *dst, const float *src0_dd,
+                                       const float *src1_dd, float *dst_dd,
+                                       const queue_ptr &main_stream);
+
+static __dpct_inline__ float warp_reduce_sum(float x,
+                                             const sycl::nd_item<3> &item_ct1) {
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        /*
+        DPCT1096:98: The right-most dimension of the work-group used in the SYCL
+        kernel that calls this function may be less than "32". The function
+        "dpct::permute_sub_group_by_xor" may return an unexpected result on the
+        CPU device. Modify the size of the work-group to ensure that the value
+        of the right-most dimension is a multiple of "32".
+        */
+        x += dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), x, mask);
+    }
+    return x;
+}
+
+static __dpct_inline__ sycl::float2
+warp_reduce_sum(sycl::float2 a, const sycl::nd_item<3> &item_ct1) {
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        a.x() += dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), a.x(),
+                                                mask);
+        a.y() += dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), a.y(),
+                                                mask);
+    }
+    return a;
+}
+
+static __dpct_inline__ float warp_reduce_max(float x,
+                                             const sycl::nd_item<3> &item_ct1) {
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        /*
+        DPCT1096:97: The right-most dimension of the work-group used in the SYCL
+        kernel that calls this function may be less than "32". The function
+        "dpct::permute_sub_group_by_xor" may return an unexpected result on the
+        CPU device. Modify the size of the work-group to ensure that the value
+        of the right-most dimension is a multiple of "32".
+        */
+        x = sycl::fmax(x, dpct::permute_sub_group_by_xor(
+                              item_ct1.get_sub_group(), x, mask));
+    }
+    return x;
+}
+
+static __dpct_inline__ float op_repeat(const float a, const float b) {
+    return b;
+    GGML_UNUSED(a);
+}
+
+static __dpct_inline__ float op_add(const float a, const float b) {
+    return a + b;
+}
+
+static __dpct_inline__ float op_mul(const float a, const float b) {
+    return a * b;
+}
+
+static __dpct_inline__ float op_div(const float a, const float b) {
+    return a / b;
+}
+
+template<float (*bin_op)(const float, const float), typename src0_t, typename src1_t, typename dst_t>
+static void k_bin_bcast(const src0_t * src0, const src1_t * src1, dst_t * dst,
+        int ne0, int ne1, int ne2, int ne3,
+        int ne10, int ne11, int ne12, int ne13,
+        /*int s0, */ int s1,  int s2,  int s3,
+        /*int s10,*/ int s11, int s12, int s13,
+        const sycl::nd_item<3> &item_ct1) {
+    const int i0s = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                    item_ct1.get_local_id(2);
+    const int i1 = (item_ct1.get_local_range(1) * item_ct1.get_group(1) +
+                    item_ct1.get_local_id(1));
+    const int i2 = (item_ct1.get_local_range(0) * item_ct1.get_group(0) +
+                    item_ct1.get_local_id(0)) /
+                   ne3;
+    const int i3 = (item_ct1.get_local_range(0) * item_ct1.get_group(0) +
+                    item_ct1.get_local_id(0)) %
+                   ne3;
+
+    if (i0s >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) {
+        return;
+    }
+
+    const int i11 = i1 % ne11;
+    const int i12 = i2 % ne12;
+    const int i13 = i3 % ne13;
+
+    const size_t i_src0 = i3*s3 + i2*s2 + i1*s1;
+    const size_t i_src1 = i13*s13 + i12*s12 + i11*s11;
+    const size_t i_dst  = i_src0;
+
+    const src0_t * src0_row = src0 + i_src0;
+    const src1_t * src1_row = src1 + i_src1;
+    dst_t * dst_row = dst + i_dst;
+
+    for (int i0 = i0s; i0 < ne0;
+         i0 += item_ct1.get_local_range(2) * item_ct1.get_group_range(2)) {
+        const int i10 = i0 % ne10;
+        dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]);
+    }
+}
+
+template<float (*bin_op)(const float, const float), typename src0_t, typename src1_t, typename dst_t>
+static void k_bin_bcast_unravel(const src0_t * src0, const src1_t * src1, dst_t * dst,
+        int ne0, int ne1, int ne2, int ne3,
+        int ne10, int ne11, int ne12, int ne13,
+        /*int s0, */ int s1,  int s2,  int s3,
+        /*int s10,*/ int s11, int s12, int s13,
+        const sycl::nd_item<3> &item_ct1) {
+
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    const int i3 = i/(ne2*ne1*ne0);
+    const int i2 = (i/(ne1*ne0)) % ne2;
+    const int i1 = (i/ne0) % ne1;
+    const int i0 = i % ne0;
+
+    if (i0 >= ne0 || i1 >= ne1 || i2 >= ne2 || i3 >= ne3) {
+        return;
+    }
+
+    const int i11 = i1 % ne11;
+    const int i12 = i2 % ne12;
+    const int i13 = i3 % ne13;
+
+    const size_t i_src0 = i3*s3 + i2*s2 + i1*s1;
+    const size_t i_src1 = i13*s13 + i12*s12 + i11*s11;
+    const size_t i_dst  = i_src0;
+
+    const src0_t * src0_row = src0 + i_src0;
+    const src1_t * src1_row = src1 + i_src1;
+    dst_t * dst_row = dst + i_dst;
+
+    const int i10 = i0 % ne10;
+    dst_row[i0] = (dst_t)bin_op(src0 ? (float)src0_row[i0] : 0.0f, (float)src1_row[i10]);
+}
+
+static void acc_f32(const float * x, const float * y, float * dst, const int ne,
+    const int ne10, const int ne11, const int ne12,
+    const int nb1, const int nb2, int offset, const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+    if (i >= ne) {
+        return;
+    }
+    int src1_idx = i - offset;
+    int oz = src1_idx / nb2;
+    int oy = (src1_idx - (oz * nb2)) / nb1;
+    int ox = src1_idx % nb1;
+    if (src1_idx >= 0 && ox < ne10 && oy < ne11 && oz < ne12) {
+        dst[i] = x[i] + y[ox + oy * ne10 + oz * ne10 * ne11];
+    } else {
+        dst[i] = x[i];
+    }
+}
+
+static void gelu_f32(const float * x, float * dst, const int k,
+                     const sycl::nd_item<3> &item_ct1) {
+    const float GELU_COEF_A    = 0.044715f;
+    const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f;
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    if (i >= k) {
+        return;
+    }
+
+    float xi = x[i];
+    dst[i] = 0.5f * xi *
+             (1.0f +
+              sycl::tanh(SQRT_2_OVER_PI * xi * (1.0f + GELU_COEF_A * xi * xi)));
+}
+
+static void silu_f32(const float * x, float * dst, const int k,
+                     const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = x[i] / (1.0f + sycl::native::exp(-x[i]));
+}
+
+static void gelu_quick_f32(const float *x, float *dst, int k,
+                           const sycl::nd_item<3> &item_ct1) {
+    const float GELU_QUICK_COEF = -1.702f;
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+    if (i >= k) {
+        return;
+    }
+    dst[i] = x[i] * (1.0f / (1.0f + sycl::native::exp(GELU_QUICK_COEF * x[i])));
+}
+
+static void tanh_f32(const float *x, float *dst, int k,
+                     const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+    if (i >= k) {
+        return;
+    }
+    dst[i] = sycl::tanh((float)(x[i]));
+}
+
+static void relu_f32(const float * x, float * dst, const int k,
+                     const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = sycl::fmax((float)(x[i]), (float)0);
+}
+
+static void hardsigmoid_f32(const float * x, float * dst, const int k,
+                            const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = sycl::fmin(1.0f, sycl::fmax(0.0f, (x[i] + 3.0f) / 6.0f));
+}
+
+static void hardswish_f32(const float * x, float * dst, const int k,
+                          const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = x[i] * sycl::fmin(1.0f, sycl::fmax(0.0f, (x[i] + 3.0f) / 6.0f));
+}
+
+static void leaky_relu_f32(const float *x, float *dst, const int k, const float negative_slope,
+                           const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+    if (i >= k) {
+        return;
+    }
+    dst[i] = sycl::fmax((float)(x[i]), (float)0) +
+             sycl::fmin((float)(x[i]), 0.0f) * negative_slope;
+}
+
+static void sqr_f32(const float * x, float * dst, const int k,
+                    const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    if (i >= k) {
+        return;
+    }
+    dst[i] = x[i] * x[i];
+}
+
+static void norm_f32(const float * x, float * dst, const int ncols, const float eps,
+                     const sycl::nd_item<3> &item_ct1, sycl::float2 *s_sum, int block_size) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+    const int tid = item_ct1.get_local_id(2);
+
+    sycl::float2 mean_var = sycl::float2(0.f, 0.f);
+
+    for (int col = tid; col < ncols; col += block_size) {
+        const float xi = x[row*ncols + col];
+        mean_var.x() += xi;
+        mean_var.y() += xi * xi;
+    }
+
+    // sum up partial sums
+    mean_var = warp_reduce_sum(mean_var, item_ct1);
+    if (block_size > WARP_SIZE) {
+
+        int warp_id = item_ct1.get_local_id(2) / WARP_SIZE;
+        int lane_id = item_ct1.get_local_id(2) % WARP_SIZE;
+        if (lane_id == 0) {
+            s_sum[warp_id] = mean_var;
+        }
+        /*
+        DPCT1118:0: SYCL group functions and algorithms must be encountered in
+        converged control flow. You may need to adjust the code.
+        */
+        item_ct1.barrier(sycl::access::fence_space::local_space);
+        mean_var = s_sum[lane_id];
+        mean_var = warp_reduce_sum(mean_var, item_ct1);
+    }
+
+    const float mean = mean_var.x() / ncols;
+    const float var = mean_var.y() / ncols - mean * mean;
+    const float inv_std = sycl::rsqrt(var + eps);
+
+    for (int col = tid; col < ncols; col += block_size) {
+        dst[row*ncols + col] = (x[row*ncols + col] - mean) * inv_std;
+    }
+}
+
+static void concat_f32(const float  *x,const float  *y, float *dst, const int ne0, const int ne02,
+                       const sycl::nd_item<3> &item_ct1) {
+    int nidx = item_ct1.get_local_id(2) +
+               item_ct1.get_group(2) * item_ct1.get_local_range(2);
+    if (nidx >= ne0) {
+        return;
+    }
+    // operation
+    int offset_dst = nidx + item_ct1.get_group(1) * ne0 +
+                     item_ct1.get_group(0) * ne0 * item_ct1.get_group_range(1);
+    if (item_ct1.get_group(0) < ne02) { // src0
+        int offset_src =
+            nidx + item_ct1.get_group(1) * ne0 +
+            item_ct1.get_group(0) * ne0 * item_ct1.get_group_range(1);
+            dst[offset_dst] = x[offset_src];
+    } else {
+        int offset_src =
+            nidx + item_ct1.get_group(1) * ne0 +
+            (item_ct1.get_group(0) - ne02) * ne0 * item_ct1.get_group_range(1);
+            dst[offset_dst] = y[offset_src];
+    }
+}
+
+static void upscale_f32(const float  *x, float *dst, const int nb00, const int nb01,
+                        const int nb02, const int nb03, const int ne10, const int ne11,
+                        const int ne12, const int ne13, const float sf0, const float sf1,
+                        const float sf2, const float sf3, const sycl::nd_item<1> &item_ct1) {
+    int index = item_ct1.get_local_id(0) +
+               item_ct1.get_group(0) * item_ct1.get_local_range(0);
+    if (index >= ne10 * ne11 * ne12 * ne13) {
+        return;
+    }
+    // operation
+    int i10 = index % ne10;
+    int i11 = (index / ne10) % ne11;
+    int i12 = (index / (ne10 * ne11)) % ne12;
+    int i13 = (index / (ne10 * ne11 * ne12)) % ne13;
+
+    int i00 = i10 / sf0;
+    int i01 = i11 / sf1;
+    int i02 = i12 / sf2;
+    int i03 = i13 / sf3;
+
+    dst[index] = *(float *)((char *)x + i03 * nb03 + i02 * nb02 + i01 * nb01 + i00 * nb00);
+}
+
+static void pad_f32(const float  *x, float *dst, const int ne0, const int ne00, const int ne01, const int ne02,
+                    const sycl::nd_item<3> &item_ct1) {
+    int nidx = item_ct1.get_local_id(2) +
+               item_ct1.get_group(2) * item_ct1.get_local_range(2);
+    if (nidx >= ne0) {
+        return;
+    }
+
+    // operation
+    int offset_dst = nidx + item_ct1.get_group(1) * ne0 +
+                     item_ct1.get_group(0) * ne0 * item_ct1.get_group_range(1);
+    if (nidx < ne00 && item_ct1.get_group(1) < ne01 &&
+        item_ct1.get_group(0) < ne02) {
+        int offset_src = nidx + item_ct1.get_group(1) * ne00 +
+                         item_ct1.get_group(0) * ne00 * ne01;
+            dst[offset_dst] = x[offset_src];
+    } else {
+        dst[offset_dst] = 0.0f;
+    }
+}
+
+static void group_norm_f32(const float * x, float * dst, const int group_size, const int ne_elements, const float eps,
+                           const sycl::nd_item<3> &item_ct1, float *s_sum, int block_size) {
+    int start = item_ct1.get_group(2) * group_size;
+    int end = start + group_size;
+
+    start += item_ct1.get_local_id(2);
+
+    if (end >= ne_elements) {
+        end = ne_elements;
+    }
+
+    float tmp = 0.0f; // partial sum for thread in warp
+
+    for (int j = start; j < end; j += block_size) {
+        tmp += x[j];
+    }
+
+    tmp = warp_reduce_sum(tmp, item_ct1);
+    if (block_size > WARP_SIZE) {
+
+        int warp_id = item_ct1.get_local_id(2) / WARP_SIZE;
+        int lane_id = item_ct1.get_local_id(2) % WARP_SIZE;
+        if (lane_id == 0) {
+            s_sum[warp_id] = tmp;
+        }
+        /*
+        DPCT1118:1: SYCL group functions and algorithms must be encountered in
+        converged control flow. You may need to adjust the code.
+        */
+        /*
+        DPCT1065:54: Consider replacing sycl::nd_item::barrier() with
+        sycl::nd_item::barrier(sycl::access::fence_space::local_space) for
+        better performance if there is no access to global memory.
+        */
+        item_ct1.barrier();
+        tmp = s_sum[lane_id];
+        tmp = warp_reduce_sum(tmp, item_ct1);
+    }
+
+    float mean = tmp / group_size;
+    tmp = 0.0f;
+
+    for (int j = start; j < end; j += block_size) {
+        float xi = x[j] - mean;
+        dst[j] = xi;
+        tmp += xi * xi;
+    }
+
+    tmp = warp_reduce_sum(tmp, item_ct1);
+    if (block_size > WARP_SIZE) {
+
+        int warp_id = item_ct1.get_local_id(2) / WARP_SIZE;
+        int lane_id = item_ct1.get_local_id(2) % WARP_SIZE;
+        if (lane_id == 0) {
+            s_sum[warp_id] = tmp;
+        }
+        /*
+        DPCT1118:2: SYCL group functions and algorithms must be encountered in
+        converged control flow. You may need to adjust the code.
+        */
+        /*
+        DPCT1065:55: Consider replacing sycl::nd_item::barrier() with
+        sycl::nd_item::barrier(sycl::access::fence_space::local_space) for
+        better performance if there is no access to global memory.
+        */
+        item_ct1.barrier();
+        tmp = s_sum[lane_id];
+        tmp = warp_reduce_sum(tmp, item_ct1);
+    }
+
+    float variance = tmp / group_size;
+    float scale = sycl::rsqrt(variance + eps);
+    for (int j = start; j < end; j += block_size) {
+        dst[j] *= scale;
+    }
+}
+
+static void rms_norm_f32(const float * x, float * dst, const int ncols, const float eps,
+                         const sycl::nd_item<3> &item_ct1, float *s_sum, int block_size) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+    const int tid = item_ct1.get_local_id(2);
+
+    float tmp = 0.0f; // partial sum for thread in warp
+
+    for (int col = tid; col < ncols; col += block_size) {
+        const float xi = x[row*ncols + col];
+        tmp += xi * xi;
+    }
+
+    // sum up partial sums
+    tmp = warp_reduce_sum(tmp, item_ct1);
+    if (block_size > WARP_SIZE) {
+
+        int warp_id = item_ct1.get_local_id(2) / WARP_SIZE;
+        int lane_id = item_ct1.get_local_id(2) % WARP_SIZE;
+        if (lane_id == 0) {
+            s_sum[warp_id] = tmp;
+        }
+        /*
+        DPCT1118:3: SYCL group functions and algorithms must be encountered in
+        converged control flow. You may need to adjust the code.
+        */
+        item_ct1.barrier(sycl::access::fence_space::local_space);
+        tmp = s_sum[lane_id];
+        tmp = warp_reduce_sum(tmp, item_ct1);
+    }
+
+    const float mean = tmp / ncols;
+    const float scale = sycl::rsqrt(mean + eps);
+
+    for (int col = tid; col < ncols; col += block_size) {
+        dst[row*ncols + col] = scale * x[row*ncols + col];
+    }
+}
+
+static void quantize_q8_1(const float * __restrict__ x, void * __restrict__ vy, const int kx, const int kx_padded,
+                          const sycl::nd_item<3> &item_ct1) {
+    const int ix = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                   item_ct1.get_local_id(2);
+
+    if (ix >= kx_padded) {
+        return;
+    }
+
+    const int iy = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
+                   item_ct1.get_local_id(1);
+
+    const int i_padded = iy*kx_padded + ix;
+
+    block_q8_1 * y = (block_q8_1 *) vy;
+
+    const int ib = i_padded / QK8_1; // block index
+    const int iqs = i_padded % QK8_1; // quant index
+
+    const float xi = ix < kx ? x[iy*kx + ix] : 0.0f;
+    float amax = sycl::fabs((float)xi);
+    float sum = xi;
+
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        amax = sycl::fmax(amax, dpct::permute_sub_group_by_xor(
+                                    item_ct1.get_sub_group(), amax, mask));
+        sum +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), sum, mask);
+    }
+
+    const float d = amax / 127;
+    const int8_t q = amax == 0.0f ? 0 : sycl::round(xi / d);
+
+    y[ib].qs[iqs] = q;
+
+    if (iqs > 0) {
+        return;
+    }
+
+    reinterpret_cast<sycl::half &>(y[ib].ds.x()) = d;
+    reinterpret_cast<sycl::half &>(y[ib].ds.y()) = sum;
+}
+
+template<int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
+static void k_get_rows(
+            const void * src0, const int32_t * src1, dst_t * dst,
+            int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/
+            /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/
+            /*size_t s0,*/ size_t s1, size_t s2, size_t s3,
+            /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03,
+            size_t s10, size_t s11, size_t s12,
+            const sycl::nd_item<3> &item_ct1/*, size_t s13*/) {
+
+    const int i00 = (item_ct1.get_group(2) * item_ct1.get_local_range(2) +
+                     item_ct1.get_local_id(2)) *
+                    2;
+    const int i10 = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
+                    item_ct1.get_local_id(1);
+    const int i11 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) +
+                     item_ct1.get_local_id(0)) /
+                    ne12;
+    const int i12 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) +
+                     item_ct1.get_local_id(0)) %
+                    ne12;
+
+    if (i00 >= ne00) {
+        return;
+    }
+
+    const int i01 = src1[i10*s10 + i11*s11 + i12*s12];
+
+    dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3;
+    const void * src0_row = (const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03;
+
+    const int ib = i00/qk; // block index
+    const int iqs = (i00%qk)/qr; // quant index
+    const int iybs = i00 - i00%qk; // dst block start index
+    const int y_offset = qr == 1 ? 1 : qk/2;
+
+    // dequantize
+    dfloat2 v;
+    dequantize_kernel(src0_row, ib, iqs, v);
+
+    dst_row[iybs + iqs + 0] = v.x();
+    dst_row[iybs + iqs + y_offset] = v.y();
+}
+
+template<typename src0_t, typename dst_t>
+static void k_get_rows_float(
+            const src0_t * src0, const int32_t * src1, dst_t * dst,
+            int64_t ne00, /*int64_t ne01, int64_t ne02, int64_t ne03,*/
+            /*int64_t ne10, int64_t ne11,*/ int64_t ne12, /*int64_t ne13,*/
+            /*size_t s0,*/ size_t s1, size_t s2, size_t s3,
+            /*size_t nb00,*/ size_t nb01, size_t nb02, size_t nb03,
+            size_t s10, size_t s11, size_t s12,
+            const sycl::nd_item<3> &item_ct1/*, size_t s13*/) {
+
+    const int i00 = item_ct1.get_group(2) * item_ct1.get_local_range(2) +
+                    item_ct1.get_local_id(2);
+    const int i10 = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
+                    item_ct1.get_local_id(1);
+    const int i11 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) +
+                     item_ct1.get_local_id(0)) /
+                    ne12;
+    const int i12 = (item_ct1.get_group(0) * item_ct1.get_local_range(0) +
+                     item_ct1.get_local_id(0)) %
+                    ne12;
+
+    if (i00 >= ne00) {
+        return;
+    }
+
+    const int i01 = src1[i10*s10 + i11*s11 + i12*s12];
+
+    dst_t * dst_row = dst + i10*s1 + i11*s2 + i12*s3;
+    const src0_t * src0_row = (const src0_t *)((const char *)src0 + i01*nb01 + i11*nb02 + i12*nb03);
+
+    dst_row[i00] = src0_row[i00];
+}
+
+static void mul_mat_p021_f16_f32(
+    const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int nchannels_x, const int nchannels_y,
+    const sycl::nd_item<3> &item_ct1) {
+
+    const sycl::half *x = (const sycl::half *)vx;
+
+    const int row_x = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
+                      item_ct1.get_local_id(1);
+    const int channel = item_ct1.get_local_range(0) * item_ct1.get_group(0) +
+                        item_ct1.get_local_id(0);
+    const int channel_x = channel / (nchannels_y / nchannels_x);
+
+    const int nrows_y = ncols_x;
+    const int nrows_dst = nrows_x;
+    const int row_dst = row_x;
+
+    float tmp = 0.0f;
+
+    for (int col_x0 = 0; col_x0 < ncols_x;
+         col_x0 += item_ct1.get_local_range(2)) {
+        const int col_x = col_x0 + item_ct1.get_local_id(2);
+
+        if (col_x >= ncols_x) {
+            break;
+        }
+
+        // x is transposed and permuted
+        const int ix = row_x*nchannels_x*ncols_x + channel_x*ncols_x + col_x;
+        const float xi =
+            sycl::vec<sycl::half, 1>(x[ix])
+                .convert<float, sycl::rounding_mode::automatic>()[0];
+
+        const int row_y = col_x;
+
+
+        // y is not transposed but permuted
+        const int iy = channel*nrows_y + row_y;
+
+        tmp += xi * y[iy];
+    }
+
+    // dst is not transposed and not permuted
+    const int idst = channel*nrows_dst + row_dst;
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[idst] = tmp;
+    }
+}
+
+static void mul_mat_vec_nc_f16_f32( // nc == non-contiguous
+    const void * __restrict__ vx, const float * __restrict__ y, float * __restrict__ dst, const int ncols_x, const int nrows_x,
+    const int row_stride_x, const int channel_stride_x, const int channel_x_divisor,
+    const sycl::nd_item<3> &item_ct1) {
+
+    const sycl::half *x = (const sycl::half *)vx;
+
+    const int row_x = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
+                      item_ct1.get_local_id(1);
+    const int channel = item_ct1.get_local_range(0) * item_ct1.get_group(0) +
+                        item_ct1.get_local_id(0);
+    const int channel_x = channel / channel_x_divisor;
+
+    const int nrows_y   = ncols_x;
+    const int nrows_dst = nrows_x;
+    const int row_dst   = row_x;
+
+    const int idst = channel*nrows_dst + row_dst;
+
+    float tmp = 0.0f;
+
+    for (int col_x0 = 0; col_x0 < ncols_x;
+         col_x0 += item_ct1.get_local_range(2)) {
+        const int col_x = col_x0 + item_ct1.get_local_id(2);
+
+        if (col_x >= ncols_x) {
+            break;
+        }
+
+        const int row_y = col_x;
+
+        const int ix = channel_x*channel_stride_x + row_x*row_stride_x + col_x;
+        const int iy = channel*nrows_y + row_y;
+
+        const float xi =
+            sycl::vec<sycl::half, 1>(x[ix])
+                .convert<float, sycl::rounding_mode::automatic>()[0];
+
+        tmp += xi * y[iy];
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[idst] = tmp;
+    }
+}
+
+static void cpy_1_f32_f32(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    float * dsti = (float *) cdsti;
+
+    *dsti = *xi;
+}
+
+static void cpy_1_f32_f16(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    sycl::half *dsti = (sycl::half *)cdsti;
+
+    *dsti = sycl::vec<float, 1>(*xi)
+                .convert<sycl::half, sycl::rounding_mode::automatic>()[0];
+}
+
+static void cpy_1_f16_f16(const char * cxi, char * cdsti) {
+    const sycl::half *xi = (const sycl::half *)cxi;
+    sycl::half *dsti = (sycl::half *)cdsti;
+
+    *dsti = *xi;
+}
+
+static void cpy_1_f16_f32(const char * cxi, char * cdsti) {
+    const sycl::half *xi = (const sycl::half *)cxi;
+    float * dsti = (float *) cdsti;
+
+    *dsti = *xi;
+}
+
+static void cpy_1_i16_i16(const char * cxi, char * cdsti) {
+    const int16_t *xi = (const int16_t *)cxi;
+    int16_t *dsti = (int16_t *)cdsti;
+
+    *dsti = *xi;
+}
+
+static void cpy_1_i32_i32(const char * cxi, char * cdsti) {
+    const int32_t *xi = (const int32_t *)cxi;
+    int32_t *dsti = (int32_t *)cdsti;
+
+    *dsti = *xi;
+}
+
+template <cpy_kernel_t cpy_1>
+static void cpy_f32_f16(const char * cx, char * cdst, const int ne,
+                        const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+                        const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11,
+                        const int nb12, const int nb13, const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    if (i >= ne) {
+        return;
+    }
+
+    // determine indices i02/i12, i01/i11, i00/i10 as a function of index i of flattened tensor
+    // then combine those indices with the corresponding byte offsets to get the total offsets
+    const int i03 = i/(ne00 * ne01 * ne02);
+    const int i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01);
+    const int i01 = (i - i03*ne00*ne01*ne02  -  i02*ne01*ne00) / ne00;
+    const int i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00;
+    const int x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03;
+
+    const int i13 = i/(ne10 * ne11 * ne12);
+    const int i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11);
+    const int i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10;
+    const int i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10;
+    const int dst_offset = i10*nb10 + i11*nb11 + i12*nb12 + i13 * nb13;
+
+    cpy_1(cx + x_offset, cdst + dst_offset);
+}
+
+static void cpy_blck_f32_q8_0(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    block_q8_0 * dsti = (block_q8_0 *) cdsti;
+
+    float amax = 0.0f; // absolute max
+
+    for (int j = 0; j < QK8_0; j++) {
+        const float v = xi[j];
+        amax = sycl::fmax(amax, sycl::fabs((float)v));
+    }
+
+    const float d = amax / ((1 << 7) - 1);
+    const float id = d ? 1.0f/d : 0.0f;
+
+    dsti->d = d;
+
+    for (int j = 0; j < QK8_0; ++j) {
+        const float x0 = xi[j]*id;
+
+        dsti->qs[j] = sycl::round((float)x0);
+    }
+}
+
+static void cpy_blck_f32_q4_0(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    block_q4_0 * dsti = (block_q4_0 *) cdsti;
+
+    float amax = 0.0f;
+    float vmax = 0.0f;
+
+    for (int j = 0; j < QK4_0; ++j) {
+        const float v = xi[j];
+        if (amax < sycl::fabs((float)v)) {
+            amax = sycl::fabs((float)v);
+            vmax = v;
+        }
+    }
+
+    const float d  = vmax / -8;
+    const float id = d ? 1.0f/d : 0.0f;
+
+    dsti->d = d;
+
+    for (int j = 0; j < QK4_0/2; ++j) {
+        const float x0 = xi[0       + j]*id;
+        const float x1 = xi[QK4_0/2 + j]*id;
+
+        const uint8_t xi0 = dpct::min(15, (int8_t)(x0 + 8.5f));
+        const uint8_t xi1 = dpct::min(15, (int8_t)(x1 + 8.5f));
+
+        dsti->qs[j]  = xi0;
+        dsti->qs[j] |= xi1 << 4;
+    }
+}
+
+static void cpy_blck_f32_q4_1(const char * cxi, char * cdsti) {
+    const float * xi = (const float *) cxi;
+    block_q4_1 * dsti = (block_q4_1 *) cdsti;
+
+    float vmin = FLT_MAX;
+    float vmax = -FLT_MAX;
+
+    for (int j = 0; j < QK4_1; ++j) {
+        const float v = xi[j];
+
+        if (v < vmin) vmin = v;
+        if (v > vmax) vmax = v;
+    }
+
+    const float d  = (vmax - vmin) / ((1 << 4) - 1);
+    const float id = d ? 1.0f/d : 0.0f;
+
+    dsti->dm.x() = d;
+    dsti->dm.y() = vmin;
+
+    for (int j = 0; j < QK4_1/2; ++j) {
+        const float x0 = (xi[0       + j] - vmin)*id;
+        const float x1 = (xi[QK4_1/2 + j] - vmin)*id;
+
+        const uint8_t xi0 = dpct::min(15, (int8_t)(x0 + 0.5f));
+        const uint8_t xi1 = dpct::min(15, (int8_t)(x1 + 0.5f));
+
+        dsti->qs[j]  = xi0;
+        dsti->qs[j] |= xi1 << 4;
+    }
+}
+
+template <cpy_kernel_t cpy_blck, int qk>
+static void cpy_f32_q(const char * cx, char * cdst, const int ne,
+                      const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02,
+                      const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11,
+                      const int nb12, const int nb13, const sycl::nd_item<3> &item_ct1) {
+    const int i = (item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                   item_ct1.get_local_id(2)) *
+                  qk;
+
+    if (i >= ne) {
+        return;
+    }
+
+    const int i03 = i/(ne00 * ne01 * ne02);
+    const int i02 = (i - i03*ne00*ne01*ne02 )/ (ne00*ne01);
+    const int i01 = (i - i03*ne00*ne01*ne02  -  i02*ne01*ne00) / ne00;
+    const int i00 = i - i03*ne00*ne01*ne02 - i02*ne01*ne00 - i01*ne00;
+    const int x_offset = i00*nb00 + i01*nb01 + i02*nb02 + i03 * nb03;
+
+    const int i13 = i/(ne10 * ne11 * ne12);
+    const int i12 = (i - i13*ne10*ne11*ne12) / (ne10*ne11);
+    const int i11 = (i - i13*ne10*ne11*ne12 - i12*ne10*ne11) / ne10;
+    const int i10 = i - i13*ne10*ne11*ne12 - i12*ne10*ne11 - i11*ne10;
+    const int dst_offset = (i10/qk)*nb10 + i11*nb11 + i12*nb12 + i13*nb13;
+
+    cpy_blck(cx + x_offset, cdst + dst_offset);
+}
+
+static float rope_yarn_ramp(const float low, const float high, const int i0) {
+    const float y = (i0 / 2 - low) / sycl::max(0.001f, high - low);
+    return 1.0f - sycl::min(1.0f, sycl::max(0.0f, y));
+}
+
+struct rope_corr_dims {
+    float v[4];
+};
+
+// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn
+// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng.
+static void rope_yarn(
+    float theta_extrap, float freq_scale, rope_corr_dims corr_dims, int64_t i0, float ext_factor, float mscale,
+    float * cos_theta, float * sin_theta
+) {
+    // Get n-d rotational scaling corrected for extrapolation
+    float theta_interp = freq_scale * theta_extrap;
+    float theta = theta_interp;
+    if (ext_factor != 0.0f) {
+        float ramp_mix = rope_yarn_ramp(corr_dims.v[0], corr_dims.v[1], i0) * ext_factor;
+        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;
+
+        // Get n-d magnitude scaling corrected for interpolation
+        mscale *= 1.0f + 0.1f * sycl::log(1.0f / freq_scale);
+    }
+    *cos_theta = sycl::cos(theta) * mscale;
+    *sin_theta = sycl::sin(theta) * mscale;
+}
+
+// rope == RoPE == rotary positional embedding
+template<typename T, bool has_pos>
+static void rope(
+    const T * x, T * dst, int ncols, const int32_t * pos, float freq_scale, int p_delta_rows, float freq_base,
+    float ext_factor, float attn_factor, rope_corr_dims corr_dims
+,
+    const sycl::nd_item<3> &item_ct1) {
+    const int col = 2 * (item_ct1.get_local_range(1) * item_ct1.get_group(1) +
+                         item_ct1.get_local_id(1));
+
+    if (col >= ncols) {
+        return;
+    }
+
+    const int row = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                    item_ct1.get_local_id(2);
+    const int i = row*ncols + col;
+    const int i2 = row/p_delta_rows;
+
+    const int p = has_pos ? pos[i2] : 0;
+    const float theta_base = p * dpct::pow(freq_base, -float(col) / ncols);
+
+    float cos_theta, sin_theta;
+    rope_yarn(theta_base, freq_scale, corr_dims, col, ext_factor, attn_factor, &cos_theta, &sin_theta);
+
+    const float x0 = x[i + 0];
+    const float x1 = x[i + 1];
+
+    dst[i + 0] = x0*cos_theta - x1*sin_theta;
+    dst[i + 1] = x0*sin_theta + x1*cos_theta;
+}
+
+template<typename T, bool has_pos, bool has_freq_facs>
+static void rope_neox(
+    const T * x, T * dst, int ncols, int n_dims, const int32_t * pos, float freq_scale, int p_delta_rows,
+    float ext_factor, float attn_factor, rope_corr_dims corr_dims, float theta_scale, float inv_ndims,
+    const float * freq_factors, const sycl::nd_item<3> &item_ct1) {
+    const int col = 2 * (item_ct1.get_local_range(1) * item_ct1.get_group(1) +
+                         item_ct1.get_local_id(1));
+
+    if (col >= ncols) {
+        return;
+    }
+
+    const int row = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                    item_ct1.get_local_id(2);
+    const int ib = col / n_dims;
+    const int ic = col % n_dims;
+
+    if (ib > 0) {
+        const int i = row*ncols + ib*n_dims + ic;
+
+        dst[i + 0] = x[i + 0];
+        dst[i + 1] = x[i + 1];
+
+        return;
+    }
+
+    const int i  = row*ncols + ib*n_dims + ic/2;
+    const int i2 = row/p_delta_rows;
+
+    float cur_rot = inv_ndims * ic - ib;
+
+    const int p = has_pos ? pos[i2] : 0;
+    const float freq_factor = has_freq_facs ? freq_factors[ic/2] : 1.0f;
+
+    const float theta_base =
+        p * freq_scale * dpct::pow(theta_scale, col / 2.0f)/freq_factor;
+
+    float cos_theta, sin_theta;
+    rope_yarn(theta_base, freq_scale, corr_dims, cur_rot, ext_factor, attn_factor, &cos_theta, &sin_theta);
+
+    const float x0 = x[i + 0];
+    const float x1 = x[i + n_dims/2];
+
+    dst[i + 0]        = x0*cos_theta - x1*sin_theta;
+    dst[i + n_dims/2] = x0*sin_theta + x1*cos_theta;
+}
+
+static void k_sum_rows_f32(const float * x, float * dst, const int ncols,
+                           const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(1);
+    const int col = item_ct1.get_local_id(2);
+
+    float sum = 0.0f;
+    for (int i = col; i < ncols; i += item_ct1.get_local_range(2)) {
+        sum += x[row * ncols + i];
+    }
+
+    sum = warp_reduce_sum(sum, item_ct1);
+
+    if (col == 0) {
+        dst[row] = sum;
+    }
+}
+
+
+template<typename T>
+static inline void ggml_sycl_swap(T & a, T & b) {
+    T tmp = a;
+    a = b;
+    b = tmp;
+}
+
+template <ggml_sort_order order>
+__dpct_inline__ static void
+k_argsort_f32_i32(const float *x, int *dst, const int ncols, int ncols_pad,
+                  const sycl::nd_item<3> &item_ct1, uint8_t *dpct_local) {
+    // bitonic sort
+    int col = item_ct1.get_local_id(2);
+    int row = item_ct1.get_group(1);
+
+    if (col >= ncols_pad) {
+        return;
+    }
+
+    const float * x_row = x + row * ncols;
+    auto dst_row = (int *)dpct_local;
+
+    // initialize indices
+    dst_row[col] = col;
+
+    item_ct1.barrier(sycl::access::fence_space::local_space);
+
+    for (int k = 2; k <= ncols_pad; k *= 2) {
+        for (int j = k / 2; j > 0; j /= 2) {
+            int ixj = col ^ j;
+            if (ixj > col) {
+                if ((col & k) == 0) {
+                    if (dst_row[col] >= ncols ||
+                        (dst_row[ixj] < ncols && (order == GGML_SORT_ORDER_ASC ?
+                            x_row[dst_row[col]] > x_row[dst_row[ixj]] :
+                            x_row[dst_row[col]] < x_row[dst_row[ixj]]))
+                    ) {
+                        ggml_sycl_swap(dst_row[col], dst_row[ixj]);
+                    }
+                } else {
+                    if (dst_row[ixj] >= ncols ||
+                        (dst_row[col] < ncols && (order == GGML_SORT_ORDER_ASC ?
+                            x_row[dst_row[col]] < x_row[dst_row[ixj]] :
+                            x_row[dst_row[col]] > x_row[dst_row[ixj]]))
+                    ) {
+                        ggml_sycl_swap(dst_row[col], dst_row[ixj]);
+                    }
+                }
+            }
+            /*
+            DPCT1118:1: SYCL group functions and algorithms must be encountered
+            in converged control flow. You may need to adjust the code.
+            */
+            item_ct1.barrier(sycl::access::fence_space::local_space);
+        }
+    }
+
+    // copy the result to dst without the padding
+    if (col < ncols) {
+        dst[row * ncols + col] = dst_row[col];
+    }
+}
+
+
+static void diag_mask_inf_f32(const float * x, float * dst, const int ncols, const int rows_per_channel, const int n_past,
+                              const sycl::nd_item<3> &item_ct1) {
+    const int col = item_ct1.get_local_range(1) * item_ct1.get_group(1) +
+                    item_ct1.get_local_id(1);
+    const int row = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                    item_ct1.get_local_id(2);
+
+    if (col >= ncols) {
+        return;
+    }
+
+    const int i = row*ncols + col;
+    //dst[i] = col > (n_past + row % rows_per_channel) ? -INFINITY : x[i];
+    //dst[i] = x[i] - (col > n_past + row % rows_per_channel) * INT_MAX; // equivalent within rounding error but slightly faster on GPU
+    dst[i] = x[i] - (col > n_past + row % rows_per_channel) * FLT_MAX;
+}
+
+
+template <bool vals_smem, int ncols_template, int block_size_template>
+static void soft_max_f32(const float * x, const float * mask, float * dst, const int ncols_par,
+                         const int nrows_y, const float scale, const float max_bias, const float m0,
+                         const float m1, uint32_t n_head_log2, const sycl::nd_item<3> &item_ct1, float *buf) {
+    const int ncols = ncols_template == 0 ? ncols_par : ncols_template;
+
+    const int tid = item_ct1.get_local_id(2);
+    const int rowx = item_ct1.get_group(2);
+    const int rowy = rowx % nrows_y; // broadcast the mask (y) in the row dimension
+
+    const int block_size = block_size_template == 0 ? item_ct1.get_local_range(2) : block_size_template;
+
+    const int warp_id = item_ct1.get_local_id(2) / WARP_SIZE;
+    const int lane_id = item_ct1.get_local_id(2) % WARP_SIZE;
+
+    float slope = 1.0f;
+
+    // ALiBi
+    if (max_bias > 0.0f) {
+        const uint32_t h = rowx/nrows_y; // head index
+
+        const float base = h < n_head_log2 ? m0 : m1;
+        const int   exp  = h < n_head_log2 ? h + 1 : 2*(h - n_head_log2) + 1;
+
+        slope = sycl::pow(base, float(exp));
+    }
+
+    float * vals = vals_smem ? buf + WARP_SIZE : dst + rowx*ncols;
+    float max_val = -INFINITY;
+
+    for (int col0 = 0; col0 < ncols; col0 += block_size) {
+        const int col = col0 + tid;
+
+        if (ncols_template == 0 && col >= ncols) {
+            break;
+        }
+
+        const int ix = rowx*ncols + col;
+        const int iy = rowy*ncols + col;
+
+        const float val = x[ix]*scale + (mask ? slope*mask[iy] : 0.0f);
+
+        vals[col] = val;
+        max_val = sycl::max(max_val, val);
+    }
+
+    // find the max value in the block
+    max_val = warp_reduce_max(max_val, item_ct1);
+    if (block_size > WARP_SIZE) {
+        if (warp_id == 0) {
+            buf[lane_id] = -INFINITY;
+        }
+        item_ct1.barrier(sycl::access::fence_space::local_space);
+
+        if (lane_id == 0) {
+            buf[warp_id] = max_val;
+        }
+        item_ct1.barrier(sycl::access::fence_space::local_space);
+
+        max_val = buf[lane_id];
+        max_val = warp_reduce_max(max_val, item_ct1);
+    }
+
+    float tmp = 0.f;
+
+#pragma unroll
+    for (int col0 = 0; col0 < ncols; col0 += block_size) {
+        const int col = col0 + tid;
+                if (ncols_template == 0 && col >= ncols) {
+            break;
+        }
+
+        const float val = sycl::native::exp(vals[col] - max_val);
+        tmp += val;
+        vals[col] = val;
+    }
+
+    // find the sum of exps in the block
+    tmp = warp_reduce_sum(tmp, item_ct1);
+    if (block_size > WARP_SIZE) {
+        item_ct1.barrier(sycl::access::fence_space::local_space);
+        if (warp_id == 0) {
+            buf[lane_id] = 0.f;
+        }
+        item_ct1.barrier(sycl::access::fence_space::local_space);
+
+        if (lane_id == 0) {
+            buf[warp_id] = tmp;
+        }
+        item_ct1.barrier(sycl::access::fence_space::local_space);
+
+        tmp = buf[lane_id];
+        tmp = warp_reduce_sum(tmp, item_ct1);
+    }
+
+    const float inv_sum = 1.f / tmp;
+
+#pragma unroll
+    for (int col0 = 0; col0 < ncols; col0 += block_size) {
+        const int col = col0 + tid;
+
+        if (ncols_template == 0 && col >= ncols) {
+            return;
+        }
+
+        const int idst = rowx*ncols + col;
+        dst[idst] = vals[col] * inv_sum;
+    }
+}
+
+static void scale_f32(const float * x, float * dst, const float scale, const int k,
+                      const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    if (i >= k) {
+        return;
+    }
+
+    dst[i] = scale * x[i];
+}
+
+static void clamp_f32(const float * x, float * dst, const float min, const float max, const int k,
+                      const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    if (i >= k) {
+        return;
+    }
+
+    dst[i] = x[i] < min ? min : (x[i] > max ? max : x[i]);
+}
+
+template <typename T>
+static void im2col_kernel(const float *x, T *dst, int offset_delta,
+                           int IW, int IH, int OW, int KW, int KH,
+                           int pelements, int CHW, int s0, int s1, int p0,
+                           int p1, int d0, int d1,
+                           const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_id(2) +
+                  item_ct1.get_group(2) * item_ct1.get_local_range(2);
+    if (i >= pelements) {
+        return;
+    }
+
+    const int ksize = OW * (KH > 1 ? KW : 1);
+    const int kx = i / ksize;
+    const int kd = kx * ksize;
+    const int ky = (i - kd) / OW;
+    const int ix = i % OW;
+
+    const int64_t iiw = ix * s0 + kx * d0 - p0;
+    const int64_t iih = item_ct1.get_group(1) * s1 + ky * d1 - p1;
+
+    const int64_t offset_dst =
+        (item_ct1.get_group(1) * OW + ix) * CHW +
+        (item_ct1.get_group(0) * (KW * KH) + ky * KW + kx);
+
+    if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
+        dst[offset_dst] =
+            sycl::vec<float, 1>(0.0f)
+                .convert<sycl::half, sycl::rounding_mode::automatic>()[0];
+    } else {
+        const int64_t offset_src = item_ct1.get_group(0) * offset_delta;
+        dst[offset_dst] =
+            sycl::vec<float, 1>(x[offset_src + iih * IW + iiw])
+                .convert<sycl::half, sycl::rounding_mode::automatic>()[0];
+    }
+}
+
+template <typename Ti, typename To>
+static  void pool2d_nchw_kernel(
+        const int ih, const int iw, const int oh, const int ow,
+        const int kh, const int kw, const int sh, const int sw,
+        const int ph, const int pw, const int parallel_elements,
+        const Ti* src, To* dst, const enum ggml_op_pool op,
+        const sycl::nd_item<3> &item_ct1) {
+        int idx = item_ct1.get_local_id(2) +
+                  item_ct1.get_group(2) * item_ct1.get_local_range(2);
+        if (idx >= parallel_elements) {
+            return;
+        }
+
+        const int I_HW = ih * iw;
+        const int O_HW = oh * ow;
+        const int nc = idx / O_HW;
+        const int cur_oh = idx % O_HW / ow;
+        const int cur_ow = idx % O_HW % ow;
+        const Ti* i_ptr = src + nc * I_HW;
+        To* o_ptr = dst + nc * O_HW;
+        const int start_h = cur_oh * sh - ph;
+        const int bh = sycl::max(0, start_h);
+        const int eh = sycl::min(ih, start_h + kh);
+        const int start_w = cur_ow * sw - pw;
+        const int bw = sycl::max(0, start_w);
+        const int ew = sycl::min(iw, start_w + kw);
+
+        To res = 0;
+
+        switch (op) {
+            case GGML_OP_POOL_AVG: res = 0; break;
+            case GGML_OP_POOL_MAX: res = -FLT_MAX; break;
+        }
+
+        for (int i = bh; i < eh; i += 1) {
+            for (int j = bw; j < ew; j += 1) {
+#if DPCT_COMPATIBILITY_TEMP >= 350
+                /*
+                DPCT1098:106: The '*' expression is used instead of the __ldg
+                call. These two expressions do not provide the exact same
+                functionality. Check the generated code for potential precision
+                and/or performance issues.
+                */
+                Ti cur = *(i_ptr + i * iw + j);
+#else
+                Ti cur = i_ptr[i * iw + j];
+#endif
+                switch (op) {
+                    case GGML_OP_POOL_AVG: res += (cur / (kh * kw)); break;
+                    case GGML_OP_POOL_MAX: res = sycl::max(res, (To)cur); break;
+                }
+            }
+        }
+        o_ptr[cur_oh * ow + cur_ow] = res;
+}
+
+template <int qk, int qr, dequantize_kernel_t dq>
+static void get_rows_sycl(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                          ggml_tensor *dst, const void *src0_dd,
+                          const int32_t *src1_dd, float *dst_dd,
+                          queue_ptr stream) {
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const sycl::range<3> block_dims(1, 1, SYCL_GET_ROWS_BLOCK_SIZE);
+    const int block_num_x = (ne00 + 2*SYCL_GET_ROWS_BLOCK_SIZE - 1) / (2*SYCL_GET_ROWS_BLOCK_SIZE);
+    const sycl::range<3> block_nums(ne11 * ne12, ne10, block_num_x);
+
+    // strides in elements
+    //const size_t s0 = nb0 / ggml_element_size(dst);
+    const size_t s1 = nb1 / ggml_element_size(dst);
+    const size_t s2 = nb2 / ggml_element_size(dst);
+    const size_t s3 = nb3 / ggml_element_size(dst);
+
+    const size_t s10 = nb10 / ggml_element_size(src1);
+    const size_t s11 = nb11 / ggml_element_size(src1);
+    const size_t s12 = nb12 / ggml_element_size(src1);
+    //const size_t s13 = nb13 / ggml_element_size(src1);
+
+    GGML_ASSERT(ne00 % 2 == 0);
+
+    stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                         [=](sycl::nd_item<3> item_ct1) {
+                             k_get_rows<qk, qr, dq>(
+                                 src0_dd, src1_dd, dst_dd, ne00, ne12, s1, s2,
+                                 s3, nb01, nb02, nb03, s10, s11, s12, item_ct1);
+                         });
+
+    (void) dst;
+}
+
+template <typename src0_t>
+static void get_rows_sycl_float(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                const ggml_tensor *src1, ggml_tensor *dst,
+                                const src0_t *src0_dd, const int32_t *src1_dd,
+                                float *dst_dd, queue_ptr stream) {
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const sycl::range<3> block_dims(1, 1, SYCL_GET_ROWS_BLOCK_SIZE);
+    const int block_num_x = (ne00 + SYCL_GET_ROWS_BLOCK_SIZE - 1) / SYCL_GET_ROWS_BLOCK_SIZE;
+    const sycl::range<3> block_nums(ne11 * ne12, ne10, block_num_x);
+
+    // strides in elements
+    //const size_t s0 = nb0 / ggml_element_size(dst);
+    const size_t s1 = nb1 / ggml_element_size(dst);
+    const size_t s2 = nb2 / ggml_element_size(dst);
+    const size_t s3 = nb3 / ggml_element_size(dst);
+
+    const size_t s10 = nb10 / ggml_element_size(src1);
+    const size_t s11 = nb11 / ggml_element_size(src1);
+    const size_t s12 = nb12 / ggml_element_size(src1);
+    //const size_t s13 = nb13 / ggml_element_size(src1);
+
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) {
+                k_get_rows_float(src0_dd, src1_dd, dst_dd, ne00, ne12, s1, s2,
+                                 s3, nb01, nb02, nb03, s10, s11, s12, item_ct1);
+            });
+    }
+
+    (void) dst;
+}
+
+template<float (*bin_op)(const float, const float)>
+struct bin_bcast_sycl {
+    template <typename src0_t, typename src1_t, typename dst_t>
+    void operator()(ggml_backend_sycl_context & ctx,
+                    const struct ggml_tensor *src0,
+                    const struct ggml_tensor *src1, struct ggml_tensor *dst,
+                    const src0_t *src0_dd, const src1_t *src1_dd, dst_t *dst_dd,
+                    queue_ptr stream) {
+
+        GGML_TENSOR_BINARY_OP_LOCALS
+
+        int nr0 = ne10/ne0;
+        int nr1 = ne11/ne1;
+        int nr2 = ne12/ne2;
+        int nr3 = ne13/ne3;
+
+        int nr[4] = { nr0, nr1, nr2, nr3 };
+
+        // collapse dimensions until first broadcast dimension
+        int64_t cne0[] = {ne0, ne1, ne2, ne3};
+        int64_t cne1[] = {ne10, ne11, ne12, ne13};
+        size_t cnb0[] = {nb0, nb1, nb2, nb3};
+        size_t cnb1[] = {nb10, nb11, nb12, nb13};
+        auto collapse = [](int64_t cne[]) {
+            cne[0] *= cne[1];
+            cne[1] = cne[2];
+            cne[2] = cne[3];
+            cne[3] = 1;
+        };
+
+        auto collapse_nb = [](size_t cnb[], int64_t cne[]) {
+            cnb[1] *= cne[1];
+            cnb[2] *= cne[2];
+            cnb[3] *= cne[3];
+        };
+
+        for (int i = 0; i < 4; i++) {
+            if (nr[i] != 1) {
+                break;
+            }
+            if (i > 0) {
+                collapse_nb(cnb0, cne0);
+                collapse_nb(cnb1, cne1);
+                collapse(cne0);
+                collapse(cne1);
+            }
+        }
+        {
+            int64_t ne0 = cne0[0];
+            int64_t ne1 = cne0[1];
+            int64_t ne2 = cne0[2];
+            int64_t ne3 = cne0[3];
+
+            int64_t ne10 = cne1[0];
+            int64_t ne11 = cne1[1];
+            int64_t ne12 = cne1[2];
+            int64_t ne13 = cne1[3];
+
+            size_t nb0 = cnb0[0];
+            size_t nb1 = cnb0[1];
+            size_t nb2 = cnb0[2];
+            size_t nb3 = cnb0[3];
+
+            size_t nb10 = cnb1[0];
+            size_t nb11 = cnb1[1];
+            size_t nb12 = cnb1[2];
+            size_t nb13 = cnb1[3];
+
+            size_t s0 = nb0 / sizeof(dst_t);
+            size_t s1 = nb1 / sizeof(dst_t);
+            size_t s2 = nb2 / sizeof(dst_t);
+            size_t s3 = nb3 / sizeof(dst_t);
+
+            size_t s10 = nb10 / sizeof(src1_t);
+            size_t s11 = nb11 / sizeof(src1_t);
+            size_t s12 = nb12 / sizeof(src1_t);
+            size_t s13 = nb13 / sizeof(src1_t);
+
+            GGML_ASSERT(s0 == 1);
+            GGML_ASSERT(s10 == 1);
+
+            const int block_size = 128;
+
+            int64_t hne0 = std::max(ne0/2LL, 1LL);
+
+            sycl::range<3> block_dims(1, 1, 1);
+            block_dims[2] = std::min<unsigned int>(hne0, block_size);
+            block_dims[1] = std::min<unsigned int>(
+                ne1, block_size / (unsigned int)block_dims[2]);
+            block_dims[0] = std::min(
+                std::min<unsigned int>(
+                    ne2 * ne3, block_size / (unsigned int)block_dims[2] /
+                                   (unsigned int)block_dims[1]),
+                64U);
+
+            sycl::range<3> block_nums(
+                (ne2 * ne3 + block_dims[0] - 1) / block_dims[0],
+                (ne1 + block_dims[1] - 1) / block_dims[1],
+                (hne0 + block_dims[2] - 1) / block_dims[2]);
+
+            if (block_nums[0] > 65535) {
+                // this is the maximum number of blocks in z direction, fallback to 1D grid kernel
+                int block_num = (ne0*ne1*ne2*ne3 + block_size - 1) / block_size;
+                {
+                    dpct::has_capability_or_fail(stream->get_device(),
+                                                 {sycl::aspect::fp16});
+
+                    stream->parallel_for(
+                        sycl::nd_range<3>(sycl::range<3>(1, 1, block_num) *
+                                              sycl::range<3>(1, 1, block_size),
+                                          sycl::range<3>(1, 1, block_size)),
+                        [=](sycl::nd_item<3> item_ct1) {
+                            k_bin_bcast_unravel<bin_op>(
+                                src0_dd, src1_dd, dst_dd, ne0, ne1, ne2, ne3,
+                                ne10, ne11, ne12, ne13, s1, s2, s3, s11, s12,
+                                s13, item_ct1);
+                        });
+                }
+            } else {
+                /*
+                DPCT1049:16: The work-group size passed to the SYCL kernel may
+                exceed the limit. To get the device limit, query
+                info::device::max_work_group_size. Adjust the work-group size if
+                needed.
+                */
+                dpct::has_capability_or_fail(stream->get_device(),
+                                             {sycl::aspect::fp16});
+
+                stream->parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        k_bin_bcast<bin_op>(src0_dd, src1_dd, dst_dd, ne0, ne1,
+                                            ne2, ne3, ne10, ne11, ne12, ne13,
+                                            s1, s2, s3, s11, s12, s13,
+                                            item_ct1);
+                    });
+            }
+        }
+    }
+};
+
+static void acc_f32_sycl(const float *x, const float *y, float *dst,
+                         const int n_elements, const int ne10, const int ne11,
+                         const int ne12, const int nb1, const int nb2,
+                         const int offset, queue_ptr stream) {
+    int num_blocks = (n_elements + SYCL_ACC_BLOCK_SIZE - 1) / SYCL_ACC_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_ACC_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_ACC_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            acc_f32(x, y, dst, n_elements, ne10, ne11, ne12, nb1, nb2, offset,
+                    item_ct1);
+        });
+}
+
+static void gelu_f32_sycl(const float *x, float *dst, const int k,
+                          queue_ptr stream) {
+    const int num_blocks = (k + SYCL_GELU_BLOCK_SIZE - 1) / SYCL_GELU_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            gelu_f32(x, dst, k, item_ct1);
+        });
+}
+
+static void silu_f32_sycl(const float *x, float *dst, const int k,
+                          queue_ptr stream) {
+    const int num_blocks = (k + SYCL_SILU_BLOCK_SIZE - 1) / SYCL_SILU_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_SILU_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_SILU_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            silu_f32(x, dst, k, item_ct1);
+        });
+}
+
+static void gelu_quick_f32_sycl(const float *x, float *dst, const int k,
+                                queue_ptr stream) {
+    const int num_blocks = (k + SYCL_GELU_BLOCK_SIZE - 1) / SYCL_GELU_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_GELU_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            gelu_quick_f32(x, dst, k, item_ct1);
+        });
+}
+
+static void tanh_f32_sycl(const float *x, float *dst, const int k,
+                          queue_ptr stream) {
+    const int num_blocks = (k + SYCL_TANH_BLOCK_SIZE - 1) / SYCL_TANH_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_TANH_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_TANH_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            tanh_f32(x, dst, k, item_ct1);
+        });
+}
+
+static void relu_f32_sycl(const float *x, float *dst, const int k,
+                          queue_ptr stream) {
+    const int num_blocks = (k + SYCL_RELU_BLOCK_SIZE - 1) / SYCL_RELU_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            relu_f32(x, dst, k, item_ct1);
+        });
+}
+
+static void hardsigmoid_f32_sycl(const float *x, float *dst, const int k,
+                                 queue_ptr stream) {
+    const int num_blocks = (k + SYCL_HARDSIGMOID_BLOCK_SIZE - 1) / SYCL_HARDSIGMOID_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_HARDSIGMOID_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_HARDSIGMOID_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            hardsigmoid_f32(x, dst, k, item_ct1);
+        });
+}
+
+static void hardswish_f32_sycl(const float *x, float *dst, const int k,
+                               queue_ptr stream) {
+    const int num_blocks = (k + SYCL_HARDSWISH_BLOCK_SIZE - 1) / SYCL_HARDSWISH_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_HARDSWISH_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_HARDSWISH_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            hardswish_f32(x, dst, k, item_ct1);
+        });
+}
+
+static void leaky_relu_f32_sycl(const float *x, float *dst, const int k,
+                                const float negative_slope,
+                                queue_ptr stream) {
+    const int num_blocks = (k + SYCL_RELU_BLOCK_SIZE - 1) / SYCL_RELU_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_RELU_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            leaky_relu_f32(x, dst, k, negative_slope, item_ct1);
+        });
+}
+
+static void sqr_f32_sycl(const float *x, float *dst, const int k,
+                         queue_ptr stream) {
+    const int num_blocks = (k + SYCL_SQR_BLOCK_SIZE - 1) / SYCL_SQR_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_SQR_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_SQR_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            sqr_f32(x, dst, k, item_ct1);
+        });
+}
+
+static void norm_f32_sycl(const float *x, float *dst, const int ncols,
+                          const int nrows, const float eps,
+                          queue_ptr stream) {
+    GGML_ASSERT(ncols % WARP_SIZE == 0);
+    if (ncols < 1024) {
+        const sycl::range<3> block_dims(1, 1, WARP_SIZE);
+        stream->submit([&](sycl::handler &cgh) {
+            sycl::local_accessor<sycl::float2, 1> s_sum_acc_ct1(
+                sycl::range<1>(32), cgh);
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims,
+                                  block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        norm_f32(x, dst, ncols, eps, item_ct1,
+                                            s_sum_acc_ct1.get_pointer(), WARP_SIZE);
+                    });
+        });
+    } else {
+        const int work_group_size = get_work_group_size(stream->get_device());
+        const sycl::range<3> block_dims(1, 1, work_group_size);
+        /*
+        DPCT1049:17: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        stream->submit([&](sycl::handler &cgh) {
+            sycl::local_accessor<sycl::float2, 1> s_sum_acc_ct1(
+                sycl::range<1>(32), cgh);
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims,
+                                  block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        norm_f32(x, dst, ncols, eps, item_ct1,
+                                       s_sum_acc_ct1.get_pointer(), work_group_size);
+                    });
+        });
+    }
+}
+
+static void group_norm_f32_sycl(const float *x, float *dst,
+                                const int num_groups, const int group_size,
+                                const int ne_elements, queue_ptr stream) {
+    static const float eps = 1e-6f;
+    if (group_size < 1024) {
+        const sycl::range<3> block_dims(1, 1, WARP_SIZE);
+        stream->submit([&](sycl::handler &cgh) {
+            sycl::local_accessor<float, 1> s_sum_acc_ct1(sycl::range<1>(32),
+                                                         cgh);
+
+            const float eps_ct4 = eps;
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(sycl::range<3>(1, 1, num_groups) * block_dims,
+                                  block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        group_norm_f32(
+                            x, dst, group_size, ne_elements, eps_ct4, item_ct1,
+                            s_sum_acc_ct1.get_pointer(), WARP_SIZE);
+                    });
+        });
+    } else {
+        const int work_group_size = get_work_group_size(stream->get_device());
+        const sycl::range<3> block_dims(1, 1, work_group_size);
+        /*
+        DPCT1049:18: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+
+        stream->submit([&](sycl::handler &cgh) {
+            sycl::local_accessor<float, 1> s_sum_acc_ct1(sycl::range<1>(32),
+                                                         cgh);
+
+            const float eps_ct4 = eps;
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(sycl::range<3>(1, 1, num_groups) * block_dims,
+                                  block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        group_norm_f32(x, dst, group_size, ne_elements,
+                                             eps_ct4, item_ct1,
+                                             s_sum_acc_ct1.get_pointer(), work_group_size);
+                    });
+        });
+    }
+}
+
+static void concat_f32_sycl(const float *x, const float *y, float *dst,
+                            const int ne0, int ne1, int ne2, int ne02,
+                            queue_ptr stream) {
+    int num_blocks = (ne0 + SYCL_CONCAT_BLOCK_SIZE - 1) / SYCL_CONCAT_BLOCK_SIZE;
+    sycl::range<3> gridDim(ne2, ne1, num_blocks);
+    stream->parallel_for(
+        sycl::nd_range<3>(gridDim *
+                              sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            concat_f32(x, y, dst, ne0, ne02, item_ct1);
+        });
+}
+
+static void upscale_f32_sycl(const float *x, float *dst, const int nb00, const int nb01,
+                             const int nb02, const int nb03, const int ne10, const int ne11,
+                             const int ne12, const int ne13, const float sf0, const float sf1,
+                             const float sf2, const float sf3, queue_ptr stream) {
+    int dst_size = ne10 * ne11 * ne12 * ne13;
+    int num_blocks = (dst_size + SYCL_UPSCALE_BLOCK_SIZE - 1) / SYCL_UPSCALE_BLOCK_SIZE;
+    sycl::range<1> gridDim(num_blocks * SYCL_UPSCALE_BLOCK_SIZE);
+    stream->parallel_for(
+        sycl::nd_range<1>(gridDim, sycl::range<1>(SYCL_UPSCALE_BLOCK_SIZE)),
+        [=](sycl::nd_item<1> item_ct1) {
+            upscale_f32(x, dst, nb00, nb01, nb02, nb03, ne10, ne11, ne12, ne13, sf0, sf1, sf2, sf3, item_ct1);
+        });
+}
+
+static void pad_f32_sycl(const float *x, float *dst, const int ne00,
+                         const int ne01, const int ne02, const int ne0,
+                         const int ne1, const int ne2, queue_ptr stream) {
+    int num_blocks = (ne0 + SYCL_PAD_BLOCK_SIZE - 1) / SYCL_PAD_BLOCK_SIZE;
+    sycl::range<3> gridDim(ne2, ne1, num_blocks);
+    stream->parallel_for(
+        sycl::nd_range<3>(gridDim * sycl::range<3>(1, 1, SYCL_PAD_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_PAD_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            pad_f32(x, dst, ne0, ne00, ne01, ne02, item_ct1);
+        });
+}
+
+static void rms_norm_f32_sycl(const float *x, float *dst, const int ncols,
+                              const int nrows, const float eps,
+                              queue_ptr stream) {
+    GGML_ASSERT(ncols % WARP_SIZE == 0);
+    // printf("%s ncols=%d, nrows=%d, WARP_SIZE=%d\n", __func__, ncols, nrows, WARP_SIZE);
+    if (ncols < 1024) {
+        const sycl::range<3> block_dims(1, 1, WARP_SIZE);
+        stream->submit([&](sycl::handler &cgh) {
+            sycl::local_accessor<float, 1> s_sum_acc_ct1(sycl::range<1>(32),
+                                                         cgh);
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims,
+                                  block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        rms_norm_f32(x, dst, ncols, eps, item_ct1,
+                                                s_sum_acc_ct1.get_pointer(), WARP_SIZE);
+                    });
+        });
+    } else {
+        const int work_group_size = get_work_group_size(stream->get_device());
+        const sycl::range<3> block_dims(1, 1, work_group_size);
+        /*
+        DPCT1049:19: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        stream->submit([&](sycl::handler &cgh) {
+            sycl::local_accessor<float, 1> s_sum_acc_ct1(sycl::range<1>(32),
+                                                         cgh);
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims,
+                                  block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        rms_norm_f32(x, dst, ncols, eps, item_ct1,
+                                           s_sum_acc_ct1.get_pointer(), work_group_size);
+                    });
+        });
+    }
+}
+
+static void quantize_row_q8_1_sycl(const float *x, void *vy, const int kx,
+                                   const int ky, const int kx_padded,
+                                   queue_ptr stream) {
+    const int block_num_x = (kx_padded + SYCL_QUANTIZE_BLOCK_SIZE - 1) / SYCL_QUANTIZE_BLOCK_SIZE;
+    const sycl::range<3> num_blocks(1, ky, block_num_x);
+    const sycl::range<3> block_size(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(num_blocks * block_size, block_size),
+            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+                quantize_q8_1(x, vy, kx, kx_padded, item_ct1);
+            });
+    }
+}
+
+static void ggml_mul_mat_p021_f16_f32_sycl(const void *vx, const float *y,
+                                           float *dst, const int ncols_x,
+                                           const int nrows_x,
+                                           const int nchannels_x,
+                                           const int nchannels_y,
+                                           queue_ptr stream) {
+
+    const sycl::range<3> block_nums(nchannels_y, nrows_x, 1);
+    const sycl::range<3> block_dims(1, 1, WARP_SIZE);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+                mul_mat_p021_f16_f32(vx, y, dst, ncols_x, nrows_x, nchannels_x,
+                                     nchannels_y, item_ct1);
+            });
+    }
+}
+
+static void ggml_mul_mat_vec_nc_f16_f32_sycl(
+    const void *vx, const float *y, float *dst, const int ncols_x,
+    const int nrows_x, const int row_stride_x, const int nchannels_x,
+    const int nchannels_y, const int channel_stride_x, queue_ptr stream) {
+
+    const sycl::range<3> block_nums(nchannels_y, nrows_x, 1);
+    const sycl::range<3> block_dims(1, 1, WARP_SIZE);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+                mul_mat_vec_nc_f16_f32(vx, y, dst, ncols_x, nrows_x,
+                                       row_stride_x, channel_stride_x,
+                                       nchannels_y / nchannels_x, item_ct1);
+            });
+    }
+}
+
+static void
+ggml_cpy_f16_f32_sycl(const char *cx, char *cdst, const int ne, const int ne00,
+                      const int ne01, const int ne02, const int nb00,
+                      const int nb01, const int nb02, const int nb03,
+                      const int ne10, const int ne11, const int ne12,
+                      const int nb10, const int nb11, const int nb12,
+                      const int nb13, queue_ptr stream) {
+
+    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
+                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
+            [=](sycl::nd_item<3> item_ct1) {
+                cpy_f32_f16<cpy_1_f16_f32>(cx, cdst, ne, ne00, ne01, ne02, nb00,
+                                           nb01, nb02, nb03, ne10, ne11, ne12,
+                                           nb10, nb11, nb12, nb13, item_ct1);
+            });
+    }
+}
+
+static void ggml_cpy_f32_f32_sycl(const char *cx, char *cdst, const int ne,
+                                  const int ne00, const int ne01,
+                                  const int ne02, const int nb00,
+                                  const int nb01, const int nb02,
+                                  const int nb03, const int ne10,
+                                  const int ne11, const int ne12,
+                                  const int nb10, const int nb11,
+                                  const int nb12, const int nb13,
+                                  queue_ptr stream) {
+
+    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
+                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
+            [=](sycl::nd_item<3> item_ct1) {
+                cpy_f32_f16<cpy_1_f32_f32>(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
+                                           nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
+                                           item_ct1);
+            });
+    }
+}
+
+static void ggml_cpy_f32_f16_sycl(const char *cx, char *cdst, const int ne,
+                                  const int ne00, const int ne01,
+                                  const int ne02, const int nb00,
+                                  const int nb01, const int nb02,
+                                  const int nb03, const int ne10,
+                                  const int ne11, const int ne12,
+                                  const int nb10, const int nb11,
+                                  const int nb12, const int nb13,
+                                  queue_ptr stream) {
+
+    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
+                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
+            [=](sycl::nd_item<3> item_ct1) {
+                cpy_f32_f16<cpy_1_f32_f16>(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
+                                           nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
+                                           item_ct1);
+            });
+    }
+}
+
+static void ggml_cpy_f32_q8_0_sycl(const char *cx, char *cdst, const int ne,
+                                   const int ne00, const int ne01,
+                                   const int ne02, const int nb00,
+                                   const int nb01, const int nb02,
+                                   const int nb03, const int ne10,
+                                   const int ne11, const int ne12,
+                                   const int nb10, const int nb11,
+                                   const int nb12, const int nb13,
+                                   queue_ptr stream) {
+
+    GGML_ASSERT(ne % QK8_0 == 0);
+    const int num_blocks = ne / QK8_0;
+    stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks),
+                                           sycl::range<3>(1, 1, 1)),
+                         [=](sycl::nd_item<3> item_ct1) {
+                             cpy_f32_q<cpy_blck_f32_q8_0, QK8_0>(
+                                 cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
+                                 nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
+                                 item_ct1);
+                         });
+}
+
+static void ggml_cpy_f32_q4_0_sycl(const char *cx, char *cdst, const int ne,
+                                   const int ne00, const int ne01,
+                                   const int ne02, const int nb00,
+                                   const int nb01, const int nb02,
+                                   const int nb03, const int ne10,
+                                   const int ne11, const int ne12,
+                                   const int nb10, const int nb11,
+                                   const int nb12, const int nb13,
+                                   queue_ptr stream) {
+
+    GGML_ASSERT(ne % QK4_0 == 0);
+    const int num_blocks = ne / QK4_0;
+    stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks),
+                                           sycl::range<3>(1, 1, 1)),
+                         [=](sycl::nd_item<3> item_ct1) {
+                             cpy_f32_q<cpy_blck_f32_q4_0, QK4_0>(
+                                 cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
+                                 nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
+                                 item_ct1);
+                         });
+}
+
+static void ggml_cpy_f32_q4_1_sycl(const char *cx, char *cdst, const int ne,
+                                   const int ne00, const int ne01,
+                                   const int ne02, const int nb00,
+                                   const int nb01, const int nb02,
+                                   const int nb03, const int ne10,
+                                   const int ne11, const int ne12,
+                                   const int nb10, const int nb11,
+                                   const int nb12, const int nb13,
+                                   queue_ptr stream) {
+
+    GGML_ASSERT(ne % QK4_1 == 0);
+    const int num_blocks = ne / QK4_1;
+    stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks),
+                                           sycl::range<3>(1, 1, 1)),
+                         [=](sycl::nd_item<3> item_ct1) {
+                             cpy_f32_q<cpy_blck_f32_q4_1, QK4_1>(
+                                 cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
+                                 nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
+                                 item_ct1);
+                         });
+}
+
+static void ggml_cpy_f16_f16_sycl(const char *cx, char *cdst, const int ne,
+                                  const int ne00, const int ne01,
+                                  const int ne02, const int nb00,
+                                  const int nb01, const int nb02,
+                                  const int nb03, const int ne10,
+                                  const int ne11, const int ne12,
+                                  const int nb10, const int nb11,
+                                  const int nb12, const int nb13,
+                                  queue_ptr stream) {
+
+    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
+                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
+            [=](sycl::nd_item<3> item_ct1) {
+                cpy_f32_f16<cpy_1_f16_f16>(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
+                                           nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
+                                           item_ct1);
+            });
+    }
+}
+
+static void ggml_cpy_i16_i16_sycl(const char *cx, char *cdst, const int ne,
+                                  const int ne00, const int ne01,
+                                  const int ne02, const int nb00,
+                                  const int nb01, const int nb02,
+                                  const int nb03, const int ne10,
+                                  const int ne11, const int ne12,
+                                  const int nb10, const int nb11,
+                                  const int nb12, const int nb13,
+                                  queue_ptr stream) {
+
+    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
+    {
+        // dpct::has_capability_or_fail(stream->get_device(),
+        //                              {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
+                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
+            [=](sycl::nd_item<3> item_ct1) {
+                cpy_f32_f16<cpy_1_i16_i16>(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
+                                           nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
+                                           item_ct1);
+            });
+    }
+}
+
+static void ggml_cpy_i32_i32_sycl(const char *cx, char *cdst, const int ne,
+                                  const int ne00, const int ne01,
+                                  const int ne02, const int nb00,
+                                  const int nb01, const int nb02,
+                                  const int nb03, const int ne10,
+                                  const int ne11, const int ne12,
+                                  const int nb10, const int nb11,
+                                  const int nb12, const int nb13,
+                                  queue_ptr stream) {
+
+    const int num_blocks = (ne + SYCL_CPY_BLOCK_SIZE - 1) / SYCL_CPY_BLOCK_SIZE;
+    {
+        // dpct::has_capability_or_fail(stream->get_device(),
+        //                              {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                                  sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE),
+                              sycl::range<3>(1, 1, SYCL_CPY_BLOCK_SIZE)),
+            [=](sycl::nd_item<3> item_ct1) {
+                cpy_f32_f16<cpy_1_i32_i32>(cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02,
+                                           nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13,
+                                           item_ct1);
+            });
+    }
+}
+
+static void scale_f32_sycl(const float *x, float *dst, const float scale,
+                           const int k, queue_ptr stream) {
+    const int num_blocks = (k + SYCL_SCALE_BLOCK_SIZE - 1) / SYCL_SCALE_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_SCALE_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_SCALE_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            scale_f32(x, dst, scale, k, item_ct1);
+        });
+}
+
+static void clamp_f32_sycl(const float *x, float *dst, const float min,
+                           const float max, const int k,
+                           queue_ptr stream) {
+    const int num_blocks = (k + SYCL_CLAMP_BLOCK_SIZE - 1) / SYCL_CLAMP_BLOCK_SIZE;
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, num_blocks) *
+                              sycl::range<3>(1, 1, SYCL_CLAMP_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_CLAMP_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            clamp_f32(x, dst, min, max, k, item_ct1);
+        });
+}
+
+template <typename T>
+static void rope_sycl(const T *x, T *dst, int ncols, int nrows,
+                      const int32_t *pos, float freq_scale, int p_delta_rows,
+                      float freq_base, float ext_factor, float attn_factor,
+                      rope_corr_dims corr_dims, queue_ptr stream) {
+    GGML_ASSERT(ncols % 2 == 0);
+    const sycl::range<3> block_dims(1, SYCL_ROPE_BLOCK_SIZE, 1);
+    const int num_blocks_x = (ncols + 2*SYCL_ROPE_BLOCK_SIZE - 1) / (2*SYCL_ROPE_BLOCK_SIZE);
+    const sycl::range<3> block_nums(1, num_blocks_x, nrows);
+    if (pos == nullptr) {
+        /*
+        DPCT1049:40: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) {
+                rope<T, false>(x, dst, ncols, pos, freq_scale, p_delta_rows,
+                               freq_base, ext_factor, attn_factor, corr_dims,
+                               item_ct1);
+            });
+    } else {
+        /*
+        DPCT1049:41: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) {
+                rope<T, true>(x, dst, ncols, pos, freq_scale, p_delta_rows,
+                              freq_base, ext_factor, attn_factor, corr_dims,
+                              item_ct1);
+            });
+    }
+}
+
+template <typename T>
+static void rope_neox_sycl(const T *x, T *dst, int ncols, int n_dims, int nrows,
+                           const int32_t *pos, float freq_scale,
+                           int p_delta_rows, float freq_base, float ext_factor,
+                           float attn_factor, rope_corr_dims corr_dims,
+                           const float * freq_factors, queue_ptr stream) {
+    GGML_ASSERT(ncols % 2 == 0);
+    const sycl::range<3> block_dims(1, SYCL_ROPE_BLOCK_SIZE, 1);
+    const int num_blocks_x = (ncols + 2*SYCL_ROPE_BLOCK_SIZE - 1) / (2*SYCL_ROPE_BLOCK_SIZE);
+    const sycl::range<3> block_nums(1, num_blocks_x, nrows);
+
+    const float theta_scale = powf(freq_base, -2.0f/n_dims);
+    const float inv_ndims = -1.0f / n_dims;
+
+    if (pos == nullptr) {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+        if (freq_factors == nullptr) {
+            stream->parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1) {
+                    rope_neox<T, false, false>(x, dst, ncols, n_dims, pos, freq_scale,
+                                        p_delta_rows, ext_factor, attn_factor,
+                                        corr_dims, theta_scale, inv_ndims, freq_factors,
+                                        item_ct1);
+                });
+        } else {
+            stream->parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1) {
+                    rope_neox<T, false, true>(x, dst, ncols, n_dims, pos, freq_scale,
+                                        p_delta_rows, ext_factor, attn_factor,
+                                        corr_dims, theta_scale, inv_ndims, freq_factors,
+                                        item_ct1);
+                });
+        }
+    } else {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        if (freq_factors == nullptr) {
+            stream->parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1) {
+                    rope_neox<T, true, false>(x, dst, ncols, n_dims, pos, freq_scale,
+                                       p_delta_rows, ext_factor, attn_factor,
+                                       corr_dims, theta_scale, inv_ndims, freq_factors, item_ct1);
+                });
+        } else {
+            stream->parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1) {
+                    rope_neox<T, true, true>(x, dst, ncols, n_dims, pos, freq_scale,
+                                       p_delta_rows, ext_factor, attn_factor,
+                                       corr_dims, theta_scale, inv_ndims, freq_factors, item_ct1);
+                });
+        }
+    }
+}
+
+static void sum_rows_f32_sycl(const float *x, float *dst, const int ncols,
+                              const int nrows, queue_ptr stream) {
+    const sycl::range<3> block_dims(1, 1, WARP_SIZE);
+    const sycl::range<3> block_nums(1, nrows, 1);
+    stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                         [=](sycl::nd_item<3> item_ct1)
+                             [[intel::reqd_sub_group_size(32)]] {
+                                 k_sum_rows_f32(x, dst, ncols, item_ct1);
+                             });
+}
+
+static int next_power_of_2(int x) {
+    int n = 1;
+    while (n < x) {
+        n *= 2;
+    }
+    return n;
+}
+
+static void argsort_f32_i32_sycl(const float *x, int *dst, const int ncols,
+                                 const int nrows, ggml_sort_order order,
+                                 queue_ptr stream) {
+    // bitonic sort requires ncols to be power of 2
+    const int ncols_pad = next_power_of_2(ncols);
+
+    const sycl::range<3> block_dims(1, 1, ncols_pad);
+    const sycl::range<3> block_nums(1, nrows, 1);
+    const size_t shared_mem = ncols_pad * sizeof(int);
+
+    if (order == GGML_SORT_ORDER_ASC) {
+        stream->submit([&](sycl::handler &cgh) {
+            sycl::local_accessor<uint8_t, 1> dpct_local_acc_ct1(
+                sycl::range<1>(shared_mem), cgh);
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1) {
+                    k_argsort_f32_i32<GGML_SORT_ORDER_ASC>(
+                        x, dst, ncols, ncols_pad, item_ct1,
+                        dpct_local_acc_ct1.get_multi_ptr<sycl::access::decorated::no>()
+                            .get());
+                });
+        });
+    } else if (order == GGML_SORT_ORDER_DESC) {
+        stream->submit([&](sycl::handler &cgh) {
+            sycl::local_accessor<uint8_t, 1> dpct_local_acc_ct1(
+                sycl::range<1>(shared_mem), cgh);
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1) {
+                    k_argsort_f32_i32<GGML_SORT_ORDER_DESC>(
+                        x, dst, ncols, ncols_pad, item_ct1,
+                        dpct_local_acc_ct1.get_multi_ptr<sycl::access::decorated::no>()
+                            .get());
+                });
+        });
+    } else {
+        GGML_ASSERT(false);
+    }
+}
+
+static void diag_mask_inf_f32_sycl(const float *x, float *dst,
+                                   const int ncols_x, const int nrows_x,
+                                   const int rows_per_channel, const int n_past,
+                                   queue_ptr stream) {
+    const sycl::range<3> block_dims(1, SYCL_DIAG_MASK_INF_BLOCK_SIZE, 1);
+    const int block_num_x = (ncols_x + SYCL_DIAG_MASK_INF_BLOCK_SIZE - 1) / SYCL_DIAG_MASK_INF_BLOCK_SIZE;
+    const sycl::range<3> block_nums(1, block_num_x, nrows_x);
+    stream->parallel_for(sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                         [=](sycl::nd_item<3> item_ct1) {
+                             diag_mask_inf_f32(x, dst, ncols_x,
+                                               rows_per_channel, n_past,
+                                               item_ct1);
+                         });
+}
+
+template <bool vals_smem, int ncols_template, int block_size_template>
+static void soft_max_f32_submitter(const float * x, const float * mask, float * dst, const int ncols_par,
+                                   const int nrows_y, const float scale, const float max_bias, const float m0,
+                                   const float m1, uint32_t n_head_log2, sycl::range<3> block_nums, sycl::range<3> block_dims,
+                                   const size_t n_local_scratch, queue_ptr stream) {
+    stream->submit([&](sycl::handler &cgh) {
+        sycl::local_accessor<float, 1> local_buf_acc(n_local_scratch, cgh);
+
+        cgh.parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+                soft_max_f32<vals_smem, ncols_template, block_size_template>(x, mask, dst, ncols_par,
+                                                                             nrows_y, scale, max_bias, m0,
+                                                                             m1, n_head_log2, item_ct1,
+                                                                             local_buf_acc.get_pointer());
+            });
+    });
+}
+
+static void soft_max_f32_sycl(const float * x, const float * mask,
+                              float * dst, const int ncols_x, const int nrows_x,
+                              const int nrows_y, const float scale, const float max_bias,
+                              queue_ptr stream) {
+    int nth = WARP_SIZE;
+    int max_block_size = get_work_group_size(stream->get_device());
+    while (nth < ncols_x && nth < max_block_size) nth *= 2;
+    if (nth>max_block_size) nth = max_block_size;
+
+    const sycl::range<3> block_dims(1, 1, nth);
+    const sycl::range<3> block_nums(1, 1, nrows_x);
+    const size_t n_local_scratch = (GGML_PAD(ncols_x, WARP_SIZE) + WARP_SIZE);
+
+    const uint32_t n_head_kv   = nrows_x/nrows_y;
+    const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head_kv));
+
+    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
+    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
+
+    const size_t local_mem_size = stream->get_device().get_info<sycl::info::device::local_mem_size>();
+    if (n_local_scratch*sizeof(float) < local_mem_size) {
+        if (ncols_x > max_block_size) {
+            soft_max_f32_submitter<true, 0, 0>(x, mask, dst, ncols_x, nrows_y, scale,
+                                               max_bias, m0, m1, n_head_log2, block_nums,
+                                               block_dims, n_local_scratch, stream);
+            return;
+        }
+        switch (ncols_x) {
+            case 32:
+                soft_max_f32_submitter<true, 32, 32>(x, mask, dst, ncols_x, nrows_y, scale,
+                                                     max_bias, m0, m1, n_head_log2, block_nums,
+                                                     block_dims, n_local_scratch, stream);
+                break;
+            case 64:
+                soft_max_f32_submitter<true, 64, 64>(x, mask, dst, ncols_x, nrows_y, scale,
+                                                     max_bias, m0, m1, n_head_log2, block_nums,
+                                                     block_dims, n_local_scratch, stream);
+                break;
+            case 128:
+                soft_max_f32_submitter<true, 128, 128>(x, mask, dst, ncols_x, nrows_y, scale,
+                                                       max_bias, m0, m1, n_head_log2, block_nums,
+                                                       block_dims, n_local_scratch, stream);
+                break;
+            case 256:
+                soft_max_f32_submitter<true, 256, 256>(x, mask, dst, ncols_x, nrows_y, scale,
+                                                       max_bias, m0, m1, n_head_log2, block_nums,
+                                                       block_dims, n_local_scratch, stream);
+                break;
+            case 512:
+                soft_max_f32_submitter<true, 512, 512>(x, mask, dst, ncols_x, nrows_y, scale,
+                                                       max_bias, m0, m1, n_head_log2, block_nums,
+                                                       block_dims, n_local_scratch, stream);
+                break;
+            case 1024:
+                soft_max_f32_submitter<true, 1024, 1024>(x, mask, dst, ncols_x, nrows_y, scale,
+                                                         max_bias, m0, m1, n_head_log2, block_nums,
+                                                         block_dims, n_local_scratch, stream);
+                break;
+            case 2048:
+                soft_max_f32_submitter<true, 2048, 1024>(x, mask, dst, ncols_x, nrows_y, scale,
+                                                         max_bias, m0, m1, n_head_log2, block_nums,
+                                                         block_dims, n_local_scratch, stream);
+                break;
+            case 4096:
+                soft_max_f32_submitter<true, 4096, 1024>(x, mask, dst, ncols_x, nrows_y, scale,
+                                                         max_bias, m0, m1, n_head_log2, block_nums,
+                                                         block_dims, n_local_scratch, stream);
+                break;
+            default:
+                soft_max_f32_submitter<true, 0, 0>(x, mask, dst, ncols_x, nrows_y, scale,
+                                                   max_bias, m0, m1, n_head_log2, block_nums,
+                                                   block_dims, n_local_scratch, stream);
+                break;
+        }
+    } else {
+        soft_max_f32_submitter<false, 0, 0>(x, mask, dst, ncols_x, nrows_y, scale,
+                                            max_bias, m0, m1, n_head_log2, block_nums,
+                                            block_dims, WARP_SIZE, stream);
+    }
+}
+
+template <typename T>
+static void im2col_sycl(const float *x, T *dst, int IW, int IH,
+                                int OW, int OH, int KW, int KH, int IC,
+                                int offset_delta, int s0, int s1, int p0,
+                                int p1, int d0, int d1,
+                                queue_ptr stream) {
+    const int parallel_elements = OW * KW * KH;
+    const int num_blocks = (parallel_elements + SYCL_IM2COL_BLOCK_SIZE - 1) / SYCL_IM2COL_BLOCK_SIZE;
+    sycl::range<3> block_nums(IC, OH, num_blocks);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums *
+                                  sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE),
+                              sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE)),
+            [=](sycl::nd_item<3> item_ct1) {
+                im2col_kernel(x, dst, offset_delta, IW, IH, OW, KW, KH,
+                               parallel_elements, (IC * KH * KW), s0, s1, p0,
+                               p1, d0, d1, item_ct1);
+            });
+    }
+}
+
+
+static bool g_sycl_loaded = false;
+
+bool ggml_sycl_loaded(void) {
+    return g_sycl_loaded;
+}
+
+void print_device_detail(int id, sycl::device &device, std::string device_type) {
+
+    dpct::device_info prop;
+    SYCL_CHECK(CHECK_TRY_ERROR(
+        dpct::get_device_info(prop, device)));
+
+    std::string version;
+    version += std::to_string(prop.get_major_version());
+    version += ".";
+    version += std::to_string(prop.get_minor_version());
+
+    device_type = std::regex_replace(device_type, std::regex("ext_oneapi_"), "");
+    std::string name = std::string(prop.get_name());
+    name = std::regex_replace(name, std::regex("\\(R\\)"), "");
+    name = std::regex_replace(name, std::regex("\\(TM\\)"), "");
+
+    auto global_mem_size = prop.get_global_mem_size()/1000000;
+
+    fprintf(stderr, "|%2d|%19s|%39s|%7s|%7d|%8d|%5d|%6luM|%21s|\n", id, device_type.c_str(),
+            name.c_str(), version.c_str(), prop.get_max_compute_units(),
+            prop.get_max_work_group_size(), prop.get_max_sub_group_size(),
+            global_mem_size, device.get_info<sycl::info::device::driver_version>().c_str());
+}
+
+void ggml_backend_sycl_print_sycl_devices() {
+    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_print_sycl_devices\n");
+    int device_count = dpct::dev_mgr::instance().device_count();
+    std::map<std::string, size_t> DeviceNums;
+    fprintf(stderr, "found %d SYCL devices:\n", device_count);
+    fprintf(stderr, "|  |                   |                                       |       |Max    |        |Max  |Global |                     |\n");
+    fprintf(stderr, "|  |                   |                                       |       |compute|Max work|sub  |mem    |                     |\n");
+    fprintf(stderr, "|ID|        Device Type|                                   Name|Version|units  |group   |group|size   |       Driver version|\n");
+    fprintf(stderr, "|--|-------------------|---------------------------------------|-------|-------|--------|-----|-------|---------------------|\n");
+    for (int id = 0; id < device_count; ++id) {
+        sycl::device device = dpct::dev_mgr::instance().get_device(id);
+        sycl::backend backend = device.get_backend();
+        std::string backend_type = get_device_backend_and_type(device);
+        int type_id=DeviceNums[backend_type]++;
+        std::stringstream device_type;
+        device_type << "[" <<  backend_type << ":" << std::to_string(type_id) << "]";
+        print_device_detail(id, device, device_type.str());
+    }
+}
+
+static inline int get_sycl_env(const char *env_name, int default_val) {
+    char *user_device_string = getenv(env_name);
+    int user_number = default_val;
+
+    unsigned n;
+    if (user_device_string != NULL &&
+        sscanf(user_device_string, " %u", &n) == 1) {
+        user_number = (int)n;
+    } else {
+        user_number = default_val;
+    }
+    return user_number;
+}
+
+static inline int get_work_group_size(const sycl::device& device) {
+    dpct::device_info prop;
+    dpct::get_device_info(prop, device);
+    return prop.get_max_work_group_size();
+}
+
+static void ggml_check_sycl() try {
+    static bool initialized = false;
+
+    if (!initialized) {
+        fprintf(stderr, "[SYCL] call ggml_check_sycl\n");
+        g_ggml_sycl_debug = get_sycl_env("GGML_SYCL_DEBUG", 0);
+
+        fprintf(stderr, "%s: GGML_SYCL_DEBUG: %d\n", __func__, g_ggml_sycl_debug);
+
+#if defined(GGML_SYCL_F16)
+        fprintf(stderr, "%s: GGML_SYCL_F16: yes\n", __func__);
+#else
+        fprintf(stderr, "%s: GGML_SYCL_F16: no\n", __func__);
+#endif
+
+/* NOT REMOVE, keep it for next optimize for XMX.
+#if defined(SYCL_USE_XMX)
+        fprintf(stderr, "%s: SYCL_USE_XMX: yes\n", __func__);
+#else
+        fprintf(stderr, "%s: SYCL_USE_XMX: no\n", __func__);
+#endif
+*/
+
+        if (CHECK_TRY_ERROR(g_all_sycl_device_count =
+                            dpct::dev_mgr::instance().device_count()) != 0) {
+            initialized = true;
+            g_sycl_loaded = false;
+            return;
+        }
+        GGML_ASSERT(g_all_sycl_device_count <= GGML_SYCL_MAX_DEVICES);
+        ggml_backend_sycl_print_sycl_devices();
+        initialized = true;
+        g_sycl_loaded = true;
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static ggml_sycl_device_info ggml_sycl_init() {
+    ggml_sycl_device_info info = {};
+
+    info.device_count = dpct::dev_mgr::instance().device_count();
+    if (info.device_count == 0) {
+        fprintf(stderr, "%s: failed to initialize " GGML_SYCL_NAME ": %s\n", __func__);
+        return info;
+    }
+
+    GGML_ASSERT(info.device_count <= GGML_SYCL_MAX_DEVICES);
+
+    int64_t total_vram = 0;
+#if defined(GGML_SYCL_FORCE_MMQ)
+    fprintf(stderr, "%s: GGML_SYCL_FORCE_MMQ:   yes\n", __func__);
+#else
+    fprintf(stderr, "%s: GGML_SYCL_FORCE_MMQ:   no\n", __func__);
+#endif
+#if defined(SYCL_USE_XMX)
+    fprintf(stderr, "%s: SYCL_USE_XMX: yes\n", __func__);
+#else
+    fprintf(stderr, "%s: SYCL_USE_XMX: no\n", __func__);
+#endif
+    fprintf(stderr, "%s: found %d " GGML_SYCL_NAME " devices:\n", __func__, info.device_count);
+
+    for (int i = 0; i < info.device_count; ++i) {
+        info.devices[i].vmm = 0;
+        dpct::device_info prop;
+        SYCL_CHECK(CHECK_TRY_ERROR(dpct::get_device_info(
+            prop, dpct::dev_mgr::instance().get_device(i))));
+
+        info.default_tensor_split[i] = total_vram;
+        total_vram += prop.get_global_mem_size();
+
+        info.devices[i].cc =
+            100 * prop.get_major_version() + 10 * prop.get_minor_version();
+    }
+
+    for (int id = 0; id < info.device_count; ++id) {
+        info.default_tensor_split[id] /= total_vram;
+    }
+    return info;
+}
+
+const ggml_sycl_device_info & ggml_sycl_info() {
+    static ggml_sycl_device_info info = ggml_sycl_init();
+    return info;
+}
+
+/*
+device_index: device index from 0 to n (continue numbers).
+    It is used for device select/set in SYCL backend internal data structure.
+*/
+inline void check_allow_gpu_index(const int device_index) {
+  if (device_index >= ggml_sycl_info().device_count) {
+    char error_buf[256];
+    snprintf(
+        error_buf,
+        sizeof(error_buf),
+        "%s error: device_index:%d is out of range: [0-%d]",
+        __func__,
+        device_index,
+        ggml_sycl_info().device_count - 1);
+    fprintf(stderr, "%s\n", error_buf);
+    assert(false);
+  }
+}
+
+// buffer pool for sycl (legacy)
+struct ggml_sycl_pool_leg : public ggml_sycl_pool {
+    static const int MAX_SYCL_BUFFERS = 256;
+
+    int device;
+    queue_ptr qptr;
+    struct ggml_sycl_buffer {
+        void * ptr = nullptr;
+        size_t size = 0;
+    };
+
+    ggml_sycl_buffer buffer_pool[MAX_SYCL_BUFFERS] = {};
+    size_t pool_size = 0;
+
+    explicit ggml_sycl_pool_leg(queue_ptr qptr_, int device_) :
+        qptr(qptr_),
+        device(device_) {
+    }
+
+    ~ggml_sycl_pool_leg() {
+        for (int i = 0; i < MAX_SYCL_BUFFERS; ++i) {
+            ggml_sycl_buffer & b = buffer_pool[i];
+            if (b.ptr != nullptr) {
+                SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(b.ptr, *qptr)));
+                pool_size -= b.size;
+            }
+        }
+        GGML_ASSERT(pool_size == 0);
+    }
+
+    void * alloc(size_t size, size_t * actual_size) override {
+#ifdef DEBUG_sycl_MALLOC
+        int nnz = 0;
+        size_t max_size = 0;
+#endif
+        size_t best_diff = 1ull << 36;
+        int ibest = -1;
+        for (int i = 0; i < MAX_SYCL_BUFFERS; ++i) {
+            ggml_sycl_buffer& b = buffer_pool[i];
+            if (b.ptr != nullptr) {
+#ifdef DEBUG_sycl_MALLOC
+                ++nnz;
+                if (b.size > max_size) max_size = b.size;
+#endif
+                if (b.size >= size) {
+                    size_t diff = b.size - size;
+                    if (diff < best_diff) {
+                        best_diff = diff;
+                        ibest = i;
+                        if (!best_diff) {
+                            void * ptr = b.ptr;
+                            *actual_size = b.size;
+                            b.ptr = nullptr;
+                            b.size = 0;
+                            return ptr;
+                        }
+                    }
+                }
+            }
+        }
+        if (ibest >= 0) {
+            ggml_sycl_buffer& b = buffer_pool[ibest];
+            void * ptr = b.ptr;
+            *actual_size = b.size;
+            b.ptr = nullptr;
+            b.size = 0;
+            return ptr;
+        }
+        void * ptr;
+        size_t look_ahead_size = (size_t) (1.05 * size);
+
+        SYCL_CHECK(
+            CHECK_TRY_ERROR(ptr = (void *)sycl::malloc_device(
+                                look_ahead_size, *qptr)));
+        *actual_size = look_ahead_size;
+        pool_size += look_ahead_size;
+
+    #ifdef DEBUG_SYCL_MALLOC
+        fprintf(stderr, "%s[%d]: %d buffers, max_size = %u MB, pool_size = %u MB, requested %u MB\n", __func__, id, nnz,
+                (uint32_t)(max_size/1024/1024), (uint32_t)(g_sycl_pool_size[id]/1024/1024), (uint32_t)(size/1024/1024));
+    #endif
+        // GGML_SYCL_DEBUG("ggml_sycl_pool_malloc_leg look_ahead_size=%lu, return %p\n", look_ahead_size, ptr);
+        return ptr;
+    }
+
+    void free(void * ptr, size_t size) override {
+        for (int i = 0; i < MAX_SYCL_BUFFERS; ++i) {
+            ggml_sycl_buffer& b = buffer_pool[i];
+            if (b.ptr == nullptr) {
+                b.ptr = ptr;
+                b.size = size;
+                return;
+            }
+        }
+        fprintf(stderr, "WARNING: sycl buffer pool full, increase MAX_sycl_BUFFERS\n");
+        SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(ptr, *qptr)));
+        pool_size -= size;
+    }
+};
+
+std::unique_ptr<ggml_sycl_pool> ggml_backend_sycl_context::new_pool_for_device(queue_ptr qptr, int device) {
+    // TBD: NO VMM support
+    // if (ggml_sycl_info().devices[device].vmm) {
+    //     return std::unique_ptr<ggml_sycl_pool>(new ggml_sycl_pool_vmm(device));
+    // }
+   return std::unique_ptr<ggml_sycl_pool>(new ggml_sycl_pool_leg(qptr, device));
+}
+
+// TBD pool with virtual memory management
+// struct ggml_sycl_pool_vmm : public ggml_sycl_pool
+
+static dpct::err0 ggml_sycl_cpy_tensor_2d(void *dst,
+                                          const struct ggml_tensor *src,
+                                          int64_t i3, int64_t i2,
+                                          int64_t i1_low, int64_t i1_high,
+                                          queue_ptr stream) try {
+
+    dpct::memcpy_direction kind;
+    char * src_ptr;
+    if (src->backend == GGML_BACKEND_TYPE_CPU) {
+        kind = dpct::host_to_device;
+        src_ptr = (char *) src->data;
+        // GGML_SYCL_DEBUG("ggml_sycl_cpy_tensor_2d  GGML_BACKEND_TYPE_CPU src_ptr %p\n", src_ptr);
+    } else if (src->backend == GGML_BACKEND_TYPE_GPU || src->backend == GGML_BACKEND_TYPE_GPU_SPLIT) {
+        GGML_ASSERT(src->backend != GGML_BACKEND_TYPE_GPU_SPLIT || (i1_low == 0 && i1_high == src->ne[1]));
+        kind = dpct::device_to_device;
+        ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src->extra;
+        int id;
+        SYCL_CHECK(CHECK_TRY_ERROR(
+            id = get_current_device_id()));
+        // GGML_SYCL_DEBUG("current device index %d\n", id);
+        src_ptr = (char *) extra->data_device[id];
+    } else {
+        // GGML_SYCL_DEBUG("GGML_ASSERT(false)\n");
+        GGML_ASSERT(false);
+    }
+    char * dst_ptr = (char *) dst;
+
+    GGML_TENSOR_LOCALS_1(int64_t, ne, src, ne);
+    GGML_TENSOR_LOCALS(int64_t, nb, src, nb);
+    const enum ggml_type type = src->type;
+    const int64_t ts = ggml_type_size(type);
+    const int64_t bs = ggml_blck_size(type);
+    int64_t i1_diff = i1_high - i1_low;
+
+    const char * x = src_ptr + i1_low*nb1 + i2*nb2 + i3*nb3;
+    if (nb0 == ts && nb1 == ts*ne0/bs) {
+        // GGML_SYCL_DEBUG("stream->memcpy: dst_ptr=%p, x=%p, size=%lu\n", dst_ptr, x, i1_diff * nb1);
+        // return CHECK_TRY_ERROR(stream->memcpy(dst_ptr, x, i1_diff * nb1));
+        return CHECK_TRY_ERROR(dpct::async_dpct_memcpy(dst_ptr, x, i1_diff * nb1,
+                                    kind, *stream));
+
+    } else if (nb0 == ts) {
+        return CHECK_TRY_ERROR(
+            dpct::async_dpct_memcpy(dst_ptr, ts * ne0 / bs, x, nb1,
+                                    ts * ne0 / bs, i1_diff, kind, *stream));
+    } else {
+        for (int64_t i1 = 0; i1 < i1_diff; i1++) {
+            const void * rx = (const void *) ((const char *) x + i1*nb1);
+            void * rd = (void *) (dst_ptr + i1*ts*ne0/bs);
+            // pretend the row is a matrix with cols=1
+            dpct::err0 r = CHECK_TRY_ERROR(dpct::async_dpct_memcpy(
+                rd, ts / bs, rx, nb0, ts / bs, ne0, kind, *stream));
+            /*
+            DPCT1001:85: The statement could not be removed.
+            */
+            /*
+            DPCT1000:86: Error handling if-stmt was detected but could not be
+            rewritten.
+            */
+            if (r != 0) return r;
+        }
+        return 0;
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_sycl_op_get_rows(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                  const ggml_tensor *src1, ggml_tensor *dst,
+                                  const float *src0_d, const float *src1_d,
+                                  float *dst_d, const queue_ptr &stream) {
+
+    GGML_ASSERT(src1->type == GGML_TYPE_I32);
+    GGML_ASSERT(dst->type == GGML_TYPE_F32);
+
+    GGML_ASSERT(src0->nb[0] == ggml_type_size(src0->type));
+    GGML_ASSERT(src1->nb[0] == ggml_type_size(src1->type));
+    GGML_ASSERT(dst->nb[0] == ggml_type_size(dst->type));
+
+    const int32_t * src1_i32 = (const int32_t *) src1_d;
+
+    switch (src0->type) {
+        case GGML_TYPE_F16:
+            get_rows_sycl_float(ctx, src0, src1, dst, (const sycl::half *)src0_d,
+                                src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_F32:
+            get_rows_sycl_float(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_Q4_0:
+            get_rows_sycl<QK4_0, QR4_0, dequantize_q4_0>(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_Q4_1:
+            get_rows_sycl<QK4_1, QR4_1, dequantize_q4_1>(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_Q5_0:
+            get_rows_sycl<QK5_0, QR5_0, dequantize_q5_0>(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_Q5_1:
+            get_rows_sycl<QK5_1, QR5_1, dequantize_q5_1>(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        case GGML_TYPE_Q8_0:
+            get_rows_sycl<QK8_0, QR8_0, dequantize_q8_0>(ctx, src0, src1, dst, src0_d, src1_i32, dst_d, stream);
+            break;
+        default:
+            // TODO: k-quants
+            fprintf(stderr, "%s: unsupported type: %s\n", __func__, ggml_type_name(src0->type));
+            GGML_ASSERT(false);
+            break;
+    }
+}
+
+template <class op>
+inline void ggml_sycl_op_bin_bcast(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                   const ggml_tensor *src1, ggml_tensor *dst,
+                                   const float *src0_dd, const float *src1_dd,
+                                   float *dst_dd,
+                                   const queue_ptr &main_stream) {
+
+    if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+        op()(ctx, src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream);
+    } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) {
+        op()(ctx, src0, src1, dst, (const sycl::half *)src0_dd, src1_dd,
+             (sycl::half *)dst_dd, main_stream);
+    } else if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) {
+        op()(ctx, src0, src1, dst, (const sycl::half *)src0_dd, src1_dd, dst_dd,
+             main_stream);
+    } else if (src0->type == GGML_TYPE_I32 && dst->type == GGML_TYPE_I32) {
+        op()(ctx, src0, src1, dst, (const int32_t *)src0_dd, (const int32_t *)src1_dd, (int32_t *)dst_dd,
+             main_stream);
+    } else if (src0->type == GGML_TYPE_I16 && dst->type == GGML_TYPE_I16) {
+        op()(ctx, src0, src1, dst, (const int16_t *)src0_dd, (const int16_t *)src1_dd, (int16_t *)dst_dd,
+             main_stream);
+    } else {
+        fprintf(stderr, "%s: unsupported types: dst: %s, src0: %s, src1: %s\n", __func__,
+            ggml_type_name(dst->type), ggml_type_name(src0->type), ggml_type_name(src1->type));
+        GGML_ASSERT(false);
+    }
+}
+
+static void ggml_sycl_op_repeat(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                const ggml_tensor *src1, ggml_tensor *dst,
+                                const float *src0_d, const float *src1_d,
+                                float *dst_d,
+                                const queue_ptr &main_stream) {
+
+    ggml_sycl_op_bin_bcast<bin_bcast_sycl<op_repeat>>(ctx, dst, src0, dst, nullptr, src0_d, dst_d, main_stream);
+
+    (void) src1;
+    (void) src1_d;
+}
+
+inline void ggml_sycl_op_add(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                             ggml_tensor *dst, const float *src0_dd,
+                             const float *src1_dd, float *dst_dd,
+                             const queue_ptr &main_stream) {
+
+    ggml_sycl_op_bin_bcast<bin_bcast_sycl<op_add>>(ctx, src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream);
+}
+
+inline void ggml_sycl_op_acc(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                             ggml_tensor *dst, const float *src0_dd,
+                             const float *src1_dd, float *dst_dd,
+                             const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+    GGML_ASSERT(dst->ne[3] == 1); // just 3D tensors supported
+
+    int nb1 = dst->op_params[0] / 4; // 4 bytes of float32
+    int nb2 = dst->op_params[1] / 4; // 4 bytes of float32
+    // int nb3 = dst->op_params[2] / 4; // 4 bytes of float32 - unused
+    int offset = dst->op_params[3] / 4; // offset in bytes
+
+    acc_f32_sycl(src0_dd, src1_dd, dst_dd, ggml_nelements(dst), src1->ne[0], src1->ne[1], src1->ne[2], nb1, nb2, offset, main_stream);
+
+    (void) dst;
+}
+
+inline void ggml_sycl_op_mul(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                             ggml_tensor *dst, const float *src0_dd,
+                             const float *src1_dd, float *dst_dd,
+                             const queue_ptr &main_stream) {
+
+    ggml_sycl_op_bin_bcast<bin_bcast_sycl<op_mul>>(ctx, src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream);
+}
+
+inline void ggml_sycl_op_div(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                             ggml_tensor *dst, const float *src0_dd,
+                             const float *src1_dd, float *dst_dd,
+                             const queue_ptr &main_stream) {
+
+    ggml_sycl_op_bin_bcast<bin_bcast_sycl<op_div>>(ctx, src0, src1, dst, src0_dd, src1_dd, dst_dd, main_stream);
+}
+
+inline void ggml_sycl_op_gelu(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                              ggml_tensor *dst, const float *src0_dd,
+                              const float *src1_dd, float *dst_dd,
+                              const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    gelu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_silu(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                              ggml_tensor *dst, const float *src0_dd,
+                              const float *src1_dd, float *dst_dd,
+                              const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    silu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_gelu_quick(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                    const ggml_tensor *src1, ggml_tensor *dst,
+                                    const float *src0_dd, const float *src1_dd,
+                                    float *dst_dd,
+                                    const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    gelu_quick_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_tanh(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                              ggml_tensor *dst, const float *src0_dd,
+                              const float *src1_dd, float *dst_dd,
+                              const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+    tanh_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_relu(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                              ggml_tensor *dst, const float *src0_dd,
+                              const float *src1_dd, float *dst_dd,
+                              const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    relu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+static void ggml_sycl_op_hardsigmoid(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                     const ggml_tensor *src1, ggml_tensor *dst,
+                                     const float *src0_dd, const float *src1_dd,
+                                     float *dst_dd,
+                                     const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    hardsigmoid_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+static void ggml_sycl_op_hardswish(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                   const ggml_tensor *src1, ggml_tensor *dst,
+                                   const float *src0_dd, const float *src1_dd,
+                                   float *dst_dd, const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    hardswish_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_leaky_relu(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                    const ggml_tensor *src1, ggml_tensor *dst,
+                                    const float *src0_dd, const float *src1_dd,
+                                    float *dst_dd,
+                                    const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    float negative_slope;
+    memcpy(&negative_slope, dst->op_params, sizeof(float));
+
+    leaky_relu_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), negative_slope, main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_sqr(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                             ggml_tensor *dst, const float *src0_dd,
+                             const float *src1_dd, float *dst_dd,
+                             const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    sqr_f32_sycl(src0_dd, dst_dd, ggml_nelements(src0), main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_norm(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                              ggml_tensor *dst, const float *src0_dd,
+                              const float *src1_dd, float *dst_dd,
+                              const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t nrows = ggml_nrows(src0);
+
+    float eps;
+    memcpy(&eps, dst->op_params, sizeof(float));
+
+    norm_f32_sycl(src0_dd, dst_dd, ne00, nrows, eps, main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_group_norm(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                    const ggml_tensor *src1, ggml_tensor *dst,
+                                    const float *src0_dd, const float *src1_dd,
+                                    float *dst_dd,
+                                    const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    int num_groups = dst->op_params[0];
+    int group_size = src0->ne[0] * src0->ne[1] * ((src0->ne[2] + num_groups - 1) / num_groups);
+    group_norm_f32_sycl(src0_dd, dst_dd, num_groups, group_size, src0->ne[0] * src0->ne[1] * src0->ne[2], main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_concat(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                const ggml_tensor *src1, ggml_tensor *dst,
+                                const float *src0_dd, const float *src1_dd,
+                                float *dst_dd,
+                                const queue_ptr &main_stream) {
+#pragma message("TODO: generalize concat kernel for dim != 2")
+#pragma message("      https://github.com/ggerganov/llama.cpp/pull/7563")
+    int dim = dst->op_params[0];
+    GGML_ASSERT(dim == 2);
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT(dst->type == GGML_TYPE_F32);
+
+    for (int i3 = 0; i3 < dst->ne[3]; i3++) {
+        concat_f32_sycl(src0_dd + i3 * (src0->nb[3] / 4), src1_dd + i3 * (src1->nb[3] / 4), dst_dd + i3 * (dst->nb[3] / 4), dst->ne[0], dst->ne[1], dst->ne[2], src0->ne[2], main_stream);
+    }
+
+    (void) src1;
+    (void) dst;
+}
+
+inline void ggml_sycl_op_upscale(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                 const ggml_tensor *src1, ggml_tensor *dst,
+                                 const float *src0_dd, const float *src1_dd,
+                                 float *dst_dd,
+                                 const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT(dst->type == GGML_TYPE_F32);
+
+    const float sf0 = (float)dst->ne[0]/src0->ne[0];
+    const float sf1 = (float)dst->ne[1]/src0->ne[1];
+    const float sf2 = (float)dst->ne[2]/src0->ne[2];
+    const float sf3 = (float)dst->ne[3]/src0->ne[3];
+
+    upscale_f32_sycl(src0_dd, dst_dd, src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3],
+                     dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], sf0, sf1, sf2, sf3,
+                     main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_pad(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                             ggml_tensor *dst, const float *src0_dd,
+                             const float *src1_dd, float *dst_dd,
+                             const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT(dst->type == GGML_TYPE_F32);
+    GGML_ASSERT(src0->ne[3] == 1 && dst->ne[3] == 1); // just 3D tensors
+
+    pad_f32_sycl(src0_dd, dst_dd,
+        src0->ne[0], src0->ne[1], src0->ne[2],
+        dst->ne[0], dst->ne[1], dst->ne[2], main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_rms_norm(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                  const ggml_tensor *src1, ggml_tensor *dst,
+                                  const float *src0_dd, const float *src1_dd,
+                                  float *dst_dd,
+                                  const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t nrows = ggml_nrows(src0);
+
+    float eps;
+    memcpy(&eps, dst->op_params, sizeof(float));
+
+    rms_norm_f32_sycl(src0_dd, dst_dd, ne00, nrows, eps, main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+static int64_t get_row_rounding(ggml_type type, const std::array<float, GGML_SYCL_MAX_DEVICES> & tensor_split) {
+    int64_t min_compute_capability = INT_MAX;
+    int64_t max_compute_capability = INT_MIN;
+    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+        if (tensor_split[i] < (i + 1 < ggml_sycl_info().device_count ? tensor_split[i + 1] : 1.0f)) {
+            if (min_compute_capability > ggml_sycl_info().devices[i].cc) {
+                min_compute_capability = ggml_sycl_info().devices[i].cc;
+            }
+            if (max_compute_capability < ggml_sycl_info().devices[i].cc) {
+                max_compute_capability = ggml_sycl_info().devices[i].cc;
+            }
+        }
+    }
+
+    switch(type) {
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+            return max_compute_capability >= VER_GEN9 ? 128 : 64;
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+            return 64;
+        case GGML_TYPE_F16:
+        case GGML_TYPE_F32:
+            return 1;
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_IQ2_XXS:
+        case GGML_TYPE_IQ2_XS:
+        case GGML_TYPE_IQ2_S:
+        case GGML_TYPE_IQ1_S:
+        case GGML_TYPE_IQ1_M:
+        case GGML_TYPE_IQ3_XXS:
+        case GGML_TYPE_IQ4_XS:
+        case GGML_TYPE_IQ4_NL:
+            return max_compute_capability >= VER_GEN9 ? 128 : 64;
+        case GGML_TYPE_IQ3_S:
+            return max_compute_capability >= VER_GEN9 ? 128 : 64;
+        case GGML_TYPE_Q6_K:
+            return 64;
+        default:
+            GGML_ASSERT(false);
+    }
+
+}
+
+inline void ggml_sycl_op_mul_mat_sycl(
+    ggml_backend_sycl_context & ctx,
+    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
+    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
+    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
+    const int64_t src1_ncols, const int64_t src1_padded_row_size,
+    const queue_ptr &stream) try {
+
+    GGML_ASSERT(src0_dd_i  != nullptr);
+    GGML_ASSERT(src1_ddf_i != nullptr);
+    GGML_ASSERT(dst_dd_i   != nullptr);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne10 = src1->ne[0];
+
+    const int64_t ne0 = dst->ne[0];
+
+    const int64_t row_diff = row_high - row_low;
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+
+    // the main device has a larger memory buffer to hold the results from all GPUs
+    // ldc == nrows of the matrix that cuBLAS writes into
+    int ldc = id == ctx.device ? ne0 : row_diff;
+
+#ifdef GGML_SYCL_F16
+    bool use_fp16 = true;  // TODO(Yu) SYCL capability check
+#else
+    bool use_fp16 = false;
+#endif
+    if ((src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type)) &&
+        use_fp16 && ggml_is_contiguous(src0) && row_diff == src0->ne[1] &&
+        dst->op_params[0] == GGML_PREC_DEFAULT) {
+
+        // GGML_SYCL_DEBUG("ggml_sycl_op_mul_mat_sycl - fp16 path\n");
+        ggml_sycl_pool_alloc<sycl::half> src0_as_f16(ctx.pool());
+        if (src0->type != GGML_TYPE_F16) {
+            const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src0->type);
+            GGML_ASSERT(to_fp16_sycl != nullptr);
+            size_t ne = row_diff*ne00;
+            src0_as_f16.alloc(ne);
+            to_fp16_sycl(src0_dd_i, src0_as_f16.get(), ne, stream);
+        }
+        const sycl::half *src0_ptr = src0->type == GGML_TYPE_F16
+                                         ? (const sycl::half *)src0_dd_i
+                                         : src0_as_f16.get();
+
+        ggml_sycl_pool_alloc<sycl::half> src1_as_f16(ctx.pool());
+        if (src1->type != GGML_TYPE_F16) {
+            const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src1->type);
+            GGML_ASSERT(to_fp16_sycl != nullptr);
+            size_t ne = src1_ncols*ne10;
+            src1_as_f16.alloc(ne);
+            to_fp16_sycl(src1_ddf_i, src1_as_f16.get(), ne, stream);
+        }
+        const sycl::half *src1_ptr = src1->type == GGML_TYPE_F16
+                ? (const sycl::half *)src1->data + src1_padded_row_size
+                                         : src1_as_f16.get();
+        ggml_sycl_pool_alloc<sycl::half> dst_f16(ctx.pool(), row_diff * src1_ncols);
+
+        const sycl::half alpha_f16 = 1.0f;
+        const sycl::half beta_f16 = 0.0f;
+        SYCL_CHECK(CHECK_TRY_ERROR(dpct::gemm(
+            *stream, oneapi::mkl::transpose::trans,
+            oneapi::mkl::transpose::nontrans, row_diff, src1_ncols, ne10,
+            &alpha_f16, src0_ptr, dpct::library_data_t::real_half, ne00,
+            src1_ptr, dpct::library_data_t::real_half, ne10, &beta_f16,
+            dst_f16.get(), dpct::library_data_t::real_half, ldc,
+            dpct::library_data_t::real_half)));
+        const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(GGML_TYPE_F16);
+        to_fp32_sycl(dst_f16.get(), dst_dd_i, row_diff*src1_ncols, stream);
+    }
+    else {
+        // GGML_SYCL_DEBUG("ggml_sycl_op_mul_mat_sycl - fp32 path\n");
+        ggml_sycl_pool_alloc<float> src0_ddq_as_f32(ctx.pool());
+        ggml_sycl_pool_alloc<float> src1_ddq_as_f32(ctx.pool());
+        if (src0->type != GGML_TYPE_F32) {
+            const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(src0->type);
+            GGML_ASSERT(to_fp32_sycl != nullptr);
+            src0_ddq_as_f32.alloc(row_diff*ne00);
+            to_fp32_sycl(src0_dd_i, src0_ddq_as_f32.get(), row_diff*ne00, stream);
+        }
+        if (src1->type != GGML_TYPE_F32) {
+            const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(src1->type);
+            GGML_ASSERT(to_fp32_sycl != nullptr);
+            src1_ddq_as_f32.alloc(src1_ncols*ne10);
+            to_fp32_sycl(src1_ddf_i, src1_ddq_as_f32.get(), src1_ncols*ne10, stream);
+        }
+        const float * src0_ddf_i = src0->type == GGML_TYPE_F32 ? (const float *) src0_dd_i : src0_ddq_as_f32.get();
+        const float * src1_ddf1_i = src1->type == GGML_TYPE_F32 ? (const float *) src1_ddf_i : src1_ddq_as_f32.get();
+
+        const float alpha = 1.0f;
+        const float beta = 0.0f;
+
+        SYCL_CHECK(CHECK_TRY_ERROR(oneapi::mkl::blas::column_major::gemm(
+            *stream, oneapi::mkl::transpose::trans,
+            oneapi::mkl::transpose::nontrans, row_diff, src1_ncols, ne10,
+            dpct::get_value(&alpha, *stream), src0_ddf_i, ne00,
+            src1_ddf1_i, ne10, dpct::get_value(&beta, *stream),
+            dst_dd_i, ldc)));
+    }
+    (void) dst;
+    (void) src1_ddq_i;
+    (void) src1_padded_row_size;
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+inline void ggml_sycl_op_rope(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                              ggml_tensor *dst, const float *src0_dd,
+                              const float *src1_dd, float *dst_dd,
+                              const queue_ptr &main_stream) {
+    const ggml_tensor * src2 = dst->src[2];
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32 ||  dst->type == GGML_TYPE_F16);
+    GGML_ASSERT(src0->type == dst->type);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+    const int64_t ne2 = dst->ne[2];
+    const int64_t nrows = ggml_nrows(src0);
+
+    //const int n_past      = ((int32_t *) dst->op_params)[0];
+    const int n_dims      = ((int32_t *) dst->op_params)[1];
+    const int mode        = ((int32_t *) dst->op_params)[2];
+    //const int n_ctx       = ((int32_t *) dst->op_params)[3];
+    const int n_ctx_orig  = ((int32_t *) dst->op_params)[4];
+
+    // RoPE alteration for extended context
+    float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
+    memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
+    memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
+    memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
+    memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
+    memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
+    memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
+
+    const float * freq_factors = nullptr;
+    const int32_t * pos = nullptr;
+    if ((mode & 1) == 0) {
+        GGML_ASSERT(src1->type == GGML_TYPE_I32);
+        GGML_ASSERT(src1->ne[0] == ne2);
+        pos = (const int32_t *) src1_dd;
+    }
+
+    const bool is_neox = mode & 2;
+
+#pragma message("TODO: update rope NORM mode to match NEOX mode")
+#pragma message("      https://github.com/ggerganov/llama.cpp/pull/7634")
+
+    if (is_neox) {
+        pos = (const int32_t *) src1_dd;
+
+        if (src2 != nullptr) {
+            freq_factors = (const float *) src2->data;
+        }
+    } else {
+        GGML_ASSERT(src2 == nullptr && "TODO: freq_factors not implemented for !is_neox");
+    }
+
+    rope_corr_dims corr_dims;
+    ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims.v);
+
+    // compute
+    if (is_neox) {
+        if (src0->type == GGML_TYPE_F32) {
+            rope_neox_sycl(
+                (const float *)src0_dd, (float *)dst_dd, ne00, n_dims, nrows, pos, freq_scale, ne01, freq_base, ext_factor,
+                attn_factor, corr_dims, freq_factors, main_stream
+            );
+        } else if (src0->type == GGML_TYPE_F16) {
+            rope_neox_sycl((const sycl::half *)src0_dd, (sycl::half *)dst_dd,
+                           ne00, n_dims, nrows, pos, freq_scale, ne01,
+                           freq_base, ext_factor, attn_factor, corr_dims,
+                           freq_factors, main_stream);
+        } else {
+            GGML_ASSERT(false);
+        }
+    } else {
+        if (src0->type == GGML_TYPE_F32) {
+            rope_sycl(
+                (const float *)src0_dd, (float *)dst_dd, ne00, nrows, pos, freq_scale, ne01, freq_base, ext_factor,
+                attn_factor, corr_dims, main_stream
+            );
+        } else if (src0->type == GGML_TYPE_F16) {
+            rope_sycl((const sycl::half *)src0_dd, (sycl::half *)dst_dd, ne00,
+                      nrows, pos, freq_scale, ne01, freq_base, ext_factor,
+                      attn_factor, corr_dims, main_stream);
+        } else {
+            GGML_ASSERT(false);
+        }
+    }
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+static void ggml_sycl_op_pool2d(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                const ggml_tensor *src1, ggml_tensor *dst,
+                                const float *src0_dd, const float *src1_dd,
+                                float *dst_dd, const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    const int32_t * opts = (const int32_t *)dst->op_params;
+    enum ggml_op_pool op = static_cast<ggml_op_pool>(opts[0]);
+    const int k0 = opts[1];
+    const int k1 = opts[2];
+    const int s0 = opts[3];
+    const int s1 = opts[4];
+    const int p0 = opts[5];
+    const int p1 = opts[6];
+
+    const int64_t IH = src0->ne[1];
+    const int64_t IW = src0->ne[0];
+
+    const int64_t N = dst->ne[3];
+    const int64_t OC = dst->ne[2];
+    const int64_t OH = dst->ne[1];
+    const int64_t OW = dst->ne[0];
+
+    const int parallel_elements = N * OC * OH * OW;
+    const int num_blocks = (parallel_elements + SYCL_POOL2D_BLOCK_SIZE - 1) / SYCL_POOL2D_BLOCK_SIZE;
+    sycl::range<3> block_nums(1, 1, num_blocks);
+    main_stream->parallel_for(
+        sycl::nd_range<3>(block_nums *
+                              sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE),
+                          sycl::range<3>(1, 1, SYCL_IM2COL_BLOCK_SIZE)),
+        [=](sycl::nd_item<3> item_ct1) {
+            pool2d_nchw_kernel(IH, IW, OH, OW, k1, k0, s1, s0, p1, p0,
+                               parallel_elements, src0_dd, dst_dd, op,
+                               item_ct1);
+        });
+
+    (void) src1;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_im2col(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                const ggml_tensor *src1, ggml_tensor *dst,
+                                const float *src0_dd, const float *src1_dd,
+                                float *dst_dd,
+                                const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_F32);
+
+    const int32_t s0 = ((const int32_t*)(dst->op_params))[0];
+    const int32_t s1 = ((const int32_t*)(dst->op_params))[1];
+    const int32_t p0 = ((const int32_t*)(dst->op_params))[2];
+    const int32_t p1 = ((const int32_t*)(dst->op_params))[3];
+    const int32_t d0 = ((const int32_t*)(dst->op_params))[4];
+    const int32_t d1 = ((const int32_t*)(dst->op_params))[5];
+
+    const bool is_2D = ((const int32_t*)(dst->op_params))[6] == 1;
+
+    const int64_t IC = src1->ne[is_2D ? 2 : 1];
+    const int64_t IH = is_2D ? src1->ne[1] : 1;
+    const int64_t IW =         src1->ne[0];
+
+    const int64_t KH = is_2D ? src0->ne[1] : 1;
+    const int64_t KW =         src0->ne[0];
+
+    const int64_t OH = is_2D ? dst->ne[2] : 1;
+    const int64_t OW =         dst->ne[1];
+
+    const size_t delta_offset = src1->nb[is_2D ? 2 : 1] / 4; // nb is byte offset, src is type float32
+
+    if (dst->type == GGML_TYPE_F16) {
+        im2col_sycl(src1_dd, (sycl::half *)dst_dd, IW, IH, OW, OH, KW, KH, IC, delta_offset, s0, s1, p0, p1, d0, d1, main_stream);
+    } else {
+        im2col_sycl(src1_dd, (float *)dst_dd, IW, IH, OW, OH, KW, KH, IC, delta_offset, s0, s1, p0, p1, d0, d1, main_stream);
+    }
+
+    (void) src0;
+    (void) src0_dd;
+}
+
+inline void ggml_sycl_op_sum_rows(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                  const ggml_tensor *src1, ggml_tensor *dst,
+                                  const float *src0_dd, const float *src1_dd,
+                                  float *dst_dd,
+                                  const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    const int64_t ncols = src0->ne[0];
+    const int64_t nrows = ggml_nrows(src0);
+
+    sum_rows_f32_sycl(src0_dd, dst_dd, ncols, nrows, main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_argsort(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                 const ggml_tensor *src1, ggml_tensor *dst,
+                                 const float *src0_dd, const float *src1_dd,
+                                 float *dst_dd,
+                                 const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_I32);
+
+    const int64_t ncols = src0->ne[0];
+    const int64_t nrows = ggml_nrows(src0);
+
+    enum ggml_sort_order order = (enum ggml_sort_order) dst->op_params[0];
+
+    argsort_f32_i32_sycl(src0_dd, (int *)dst_dd, ncols, nrows, order, main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_diag_mask_inf(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                       const ggml_tensor *src1,
+                                       ggml_tensor *dst, const float *src0_dd,
+                                       const float *src1_dd, float *dst_dd,
+                                       const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+    const int nrows0 = ggml_nrows(src0);
+
+    const int n_past = ((int32_t *) dst->op_params)[0];
+
+    diag_mask_inf_f32_sycl(src0_dd, dst_dd, ne00, nrows0, ne01, n_past, main_stream);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_soft_max(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                  const ggml_tensor *src1, ggml_tensor *dst,
+                                  const float *src0_dd, const float *src1_dd,
+                                  float *dst_dd,
+                                  const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+#pragma message("TODO: add ggml_sycl_op_soft_max() F16 src1 support")
+#pragma message("ref:  https://github.com/ggerganov/llama.cpp/pull/5021")
+    GGML_ASSERT(!src1 || src1->type == GGML_TYPE_F32); // src1 contains mask and it is optional
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t nrows_x = ggml_nrows(src0);
+    const int64_t nrows_y = src0->ne[1];
+
+    float scale = 1.0f;
+    float max_bias = 0.0f;
+
+    memcpy(&scale, dst->op_params + 0, sizeof(float));
+    memcpy(&max_bias, dst->op_params + 1, sizeof(float));
+
+    soft_max_f32_sycl(src0_dd, src1 ? src1_dd : nullptr, dst_dd, ne00,
+                      nrows_x, nrows_y, scale, max_bias, main_stream);
+}
+
+inline void ggml_sycl_op_scale(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                               ggml_tensor *dst, const float *src0_dd,
+                               const float *src1_dd, float *dst_dd,
+                               const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    float scale;
+    memcpy(&scale, dst->op_params, sizeof(float));
+
+    scale_f32_sycl(src0_dd, dst_dd, scale, ggml_nelements(src0), main_stream);
+    /*
+    DPCT1010:87: SYCL uses exceptions to report errors and does not use the
+    error codes. The call was replaced with 0. You need to rewrite this code.
+    */
+    SYCL_CHECK(0);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+inline void ggml_sycl_op_clamp(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                               ggml_tensor *dst, const float *src0_dd,
+                               const float *src1_dd, float *dst_dd,
+                               const queue_ptr &main_stream) {
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    float min;
+    float max;
+    memcpy(&min, dst->op_params, sizeof(float));
+    memcpy(&max, (float *) dst->op_params + 1, sizeof(float));
+
+    clamp_f32_sycl(src0_dd, dst_dd, min, max, ggml_nelements(src0), main_stream);
+    /*
+    DPCT1010:88: SYCL uses exceptions to report errors and does not use the
+    error codes. The call was replaced with 0. You need to rewrite this code.
+    */
+    SYCL_CHECK(0);
+
+    (void) src1;
+    (void) dst;
+    (void) src1_dd;
+}
+
+static void ggml_sycl_op_flatten(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                 const ggml_tensor *src1, ggml_tensor *dst,
+                                 const ggml_sycl_op_flatten_t op) try {
+    const int64_t nrows0 = ggml_nrows(src0);
+
+    const bool use_src1 = src1 != nullptr;
+    const int64_t nrows1 = use_src1 ? ggml_nrows(src1) : 1;
+
+    GGML_ASSERT(!use_src1 || src1->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
+    GGML_ASSERT(              dst->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
+
+    ggml_tensor_extra_gpu * src0_extra =            (ggml_tensor_extra_gpu *) src0->extra;
+    ggml_tensor_extra_gpu * src1_extra = use_src1 ? (ggml_tensor_extra_gpu *) src1->extra : nullptr;
+    ggml_tensor_extra_gpu * dst_extra  =            (ggml_tensor_extra_gpu *)  dst->extra;
+
+    // dd = data device
+    float * src0_ddf = (float *) src0->data;
+    float * src1_ddf = use_src1 ? (float *) src1->data : nullptr;
+    float *  dst_ddf = (float *) dst->data;
+
+    ggml_sycl_pool_alloc<float> src0_f(ctx.pool());
+    ggml_sycl_pool_alloc<float> src1_f(ctx.pool());
+    ggml_sycl_pool_alloc<float>  dst_f(ctx.pool());
+
+    ggml_sycl_set_device(ctx.device);
+    queue_ptr main_stream = ctx.stream();
+    // GGML_SYCL_DEBUG("ctx.device=%d, main_stream=%p src0_on_device=%d, src1_on_device=%d, dst_on_device=%d\n",
+        // ctx.device, main_stream, src0_on_device, src1_on_device, dst_on_device);
+
+    // do the computation
+    op(ctx, src0, src1, dst, src0_ddf, src1_ddf, dst_ddf, main_stream);
+    // print_ggml_tensor("tensor", dst);
+}
+catch (sycl::exception const &exc) {
+
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_sycl_set_peer_access(const int n_tokens, int main_device) {
+    static bool peer_access_enabled = false;
+
+    const bool enable_peer_access = n_tokens <= GGML_SYCL_PEER_MAX_BATCH_SIZE;
+
+    if (peer_access_enabled == enable_peer_access) {
+        return;
+    }
+
+#ifdef NDEBUG
+    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+        SYCL_CHECK(ggml_sycl_set_device(i));
+    }
+
+    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+        SYCL_CHECK(ggml_sycl_set_device(i));
+
+        for (int id_other = 0; id_other < ggml_sycl_info().device_count; ++id_other) {
+            if (i == id_other) {
+                continue;
+            }
+            if (i != main_device && id_other != main_device) {
+                continue;
+            }
+
+            // int can_access_peer;
+            // SYCL_CHECK(syclDeviceCanAccessPeer(&can_access_peer, id, id_other));
+            // if (can_access_peer) {
+            //     if (enable_peer_access) {
+            //         SYCL_CHECK(syclDeviceEnablePeerAccess(id_other, 0));
+            //     } else {
+            //         SYCL_CHECK(syclDeviceDisablePeerAccess(id_other));
+            //     }
+            // }
+        }
+    }
+#endif // NDEBUG
+
+    peer_access_enabled = enable_peer_access;
+}
+
+struct ggml_backend_sycl_split_buffer_type_context {
+    std::array<float, GGML_SYCL_MAX_DEVICES> tensor_split;
+};
+
+static void ggml_sycl_op_mul_mat(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                 const ggml_tensor *src1, ggml_tensor *dst,
+                                 ggml_sycl_op_mul_mat_t op,
+                                 const bool convert_src1_to_q8_1) try {
+
+    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne);
+
+    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne);
+    const int64_t nrows1 = ggml_nrows(src1);
+
+    GGML_ASSERT(ne03 == ne13);
+
+    const int64_t ne0 = dst->ne[0];
+    const int64_t ne1 = dst->ne[1];
+
+    const int nb2 = dst->nb[2];
+    const int nb3 = dst->nb[3];
+
+    GGML_ASSERT(dst->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
+    GGML_ASSERT(src1->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32 || (src1->ne[2] == 1 && src1->ne[3] == 1));
+
+    GGML_ASSERT(ne12 >= ne02 && ne12 % ne02 == 0);
+
+    const int64_t i02_divisor = ne12 / ne02;
+
+    const size_t src0_ts = ggml_type_size(src0->type);
+    const size_t src0_bs = ggml_blck_size(src0->type);
+    const size_t q8_1_ts = sizeof(block_q8_1);
+    const size_t q8_1_bs = QK8_1;
+
+    ggml_tensor_extra_gpu * src0_extra = (ggml_tensor_extra_gpu *) src0->extra;
+    ggml_tensor_extra_gpu * src1_extra = (ggml_tensor_extra_gpu *) src1->extra;
+    ggml_tensor_extra_gpu *  dst_extra = (ggml_tensor_extra_gpu *)  dst->extra;
+
+    const bool src0_is_contiguous = ggml_is_contiguous(src0);
+    const bool src1_is_contiguous = ggml_is_contiguous(src1);
+
+    int64_t src1_padded_col_size = GGML_PAD(ne10, MATRIX_ROW_PADDING);
+
+    const bool split = src0->backend == GGML_BACKEND_TYPE_GPU_SPLIT;
+    GGML_ASSERT(!(split && ne02 > 1));
+    GGML_ASSERT(!(split && ne03 > 1));
+    GGML_ASSERT(!(split && ne02 < ne12));
+
+    std::array<float, GGML_SYCL_MAX_DEVICES> tensor_split;
+    if (split) {
+        // TODO: check that src0->buffer->buft is a split buffer type, replace GGML_BACKEND_TYPE_GPU_SPLIT check
+        // GGML_ASSERT(src0->buffer != nullptr && src0->buffer->buft == ...);
+        ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *) src0->buffer->buft->context;
+        tensor_split = buft_ctx->tensor_split;
+    }
+
+    struct dev_data {
+        ggml_sycl_pool_alloc<char> src0_dd_alloc;
+        ggml_sycl_pool_alloc<float> src1_ddf_alloc;
+        ggml_sycl_pool_alloc<char> src1_ddq_alloc;
+        ggml_sycl_pool_alloc<float> dst_dd_alloc;
+
+        char *src0_dd = nullptr;
+        float *src1_ddf = nullptr; // float
+        char *src1_ddq = nullptr;  // q8_1
+        float *dst_dd = nullptr;
+
+        int64_t row_low;
+        int64_t row_high;
+    };
+
+    dev_data dev[GGML_SYCL_MAX_DEVICES];
+
+    int used_devices = 0;
+    queue_ptr main_stream = ctx.stream();
+
+    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+        // by default, use all rows
+        dev[i].row_low  = 0;
+        dev[i].row_high = ne01;
+
+        // for multi GPU, get the row boundaries from tensor split
+        // and round to mul_mat_q tile sizes
+        if (split) {
+            const int64_t rounding = get_row_rounding(src0->type, tensor_split);
+
+            if (i != 0) {
+                dev[i].row_low  = ne01*tensor_split[i];
+                if (dev[i].row_low < ne01) {
+                    dev[i].row_low -= dev[i].row_low % rounding;
+                }
+            }
+
+            if (i != ggml_sycl_info().device_count - 1) {
+                dev[i].row_high  = ne01*tensor_split[i + 1];
+                if (dev[i].row_high < ne01) {
+                    dev[i].row_high -= dev[i].row_high % rounding;
+                }
+            }
+        }
+    }
+
+    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+        if ((!split && i != ctx.device) || dev[i].row_low == dev[i].row_high) {
+            continue;
+        }
+
+        used_devices++;
+
+        const bool src1_on_device = i == ctx.device;
+        const bool  dst_on_device = i == ctx.device;
+
+        ggml_sycl_set_device(i);
+        queue_ptr stream = ctx.stream(i, 0);
+
+        if (src0_is_contiguous) {
+            dev[i].src0_dd = (char *) src0->data;
+        } else {
+            dev[i].src0_dd = dev[i].src0_dd_alloc.alloc(ctx.pool(i), ggml_nbytes(src0));
+        }
+
+        if (src1_on_device && src1_is_contiguous) {
+            dev[i].src1_ddf = (float *) src1->data;
+        } else {
+            dev[i].src1_ddf = dev[i].src1_ddf_alloc.alloc(ctx.pool(i), ggml_nelements(src1));
+        }
+
+        if (convert_src1_to_q8_1) {
+            dev[i].src1_ddq = dev[i].src1_ddq_alloc.alloc(ctx.pool(i), nrows1*src1_padded_col_size*q8_1_ts/q8_1_bs);
+
+            if (src1_on_device && src1_is_contiguous) {
+                quantize_row_q8_1_sycl(dev[i].src1_ddf, dev[i].src1_ddq, ne10, nrows1, src1_padded_col_size, stream);
+                /*
+                DPCT1010:90: SYCL uses exceptions to report errors and does not
+                use the error codes. The call was replaced with 0. You need to
+                rewrite this code.
+                */
+                SYCL_CHECK(0);
+            }
+        }
+
+        if (dst_on_device) {
+            dev[i].dst_dd = (float *) dst->data;
+        } else {
+            const size_t size_dst_ddf = split ? (dev[i].row_high - dev[i].row_low)*ne1 : ggml_nelements(dst);
+            dev[i].dst_dd = dev[i].dst_dd_alloc.alloc(ctx.pool(i), size_dst_ddf);
+        }
+    }
+
+    // if multiple devices are used they need to wait for the main device
+    // here an event is recorded that signals that the main device has finished calculating the input data
+    if (split && used_devices > 1) {
+        ggml_sycl_set_device(ctx.device);
+        /*
+        DPCT1024:91: The original code returned the error code that was further
+        consumed by the program logic. This original code was replaced with 0.
+        You may need to rewrite the program logic consuming the error code.
+        */
+        SYCL_CHECK(CHECK_TRY_ERROR(
+            *src0_extra->events[ctx.device][0] =
+                ctx.stream()->ext_oneapi_submit_barrier()));
+    }
+
+    const int64_t src1_col_stride = split && used_devices > 1 ? MUL_MAT_SRC1_COL_STRIDE : ne11;
+    for (int64_t src1_col_0 = 0; src1_col_0 < ne11; src1_col_0 += src1_col_stride) {
+        const int64_t is = split ? (src1_col_0/src1_col_stride) % GGML_SYCL_MAX_STREAMS : 0;
+        const int64_t src1_ncols = src1_col_0 + src1_col_stride > ne11 ? ne11 - src1_col_0 : src1_col_stride;
+
+        for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+            if ((!split && i != ctx.device) || dev[i].row_low == dev[i].row_high) {
+                continue;
+            }
+
+            const bool src1_on_device = i == ctx.device;
+            const bool  dst_on_device = i == ctx.device;
+            const int64_t row_diff = dev[i].row_high - dev[i].row_low;
+
+            ggml_sycl_set_device(i);
+            queue_ptr stream = ctx.stream(i, is);
+
+            // wait for main GPU data if necessary
+            if (split && (i != ctx.device || is != 0)) {
+                /*
+                DPCT1009:163: SYCL uses exceptions to report errors and does not
+                use the error codes. The original code was commented out and a
+                warning string was inserted. You need to rewrite this code.
+                */
+                SYCL_CHECK(CHECK_TRY_ERROR(stream->ext_oneapi_submit_barrier(
+                    {*src0_extra->events[ctx.device][0]})));
+            }
+
+            for (int64_t i0 = 0; i0 < ne13*ne12; ++i0) {
+                const int64_t i03 = i0 / ne12;
+                const int64_t i02 = i0 % ne12;
+
+                const size_t src1_ddq_i_offset = (i0*ne11 + src1_col_0) * src1_padded_col_size*q8_1_ts/q8_1_bs;
+
+                // for split tensors the data begins at i0 == i0_offset_low
+                char  *  src0_dd_i =  dev[i].src0_dd + (i0/i02_divisor) * (ne01*ne00*src0_ts)/src0_bs;
+                float * src1_ddf_i = dev[i].src1_ddf + (i0*ne11 + src1_col_0) * ne10;
+                char  * src1_ddq_i = dev[i].src1_ddq +  src1_ddq_i_offset;
+                float *   dst_dd_i =   dev[i].dst_dd + (i0*ne1  + src1_col_0) * (dst_on_device ? ne0 : row_diff);
+
+                // the main device memory buffer can be on VRAM scratch, with space for all partial results
+                // in that case an offset on dst_ddf_i is needed
+                if (i == ctx.device) {
+                    dst_dd_i += dev[i].row_low; // offset is 0 if no tensor split
+                }
+
+                // copy src0, src1 to device if necessary
+                if (src1_is_contiguous) {
+                    if (i != ctx.device) {
+                        if (convert_src1_to_q8_1) {
+                            char * src1_ddq_i_source = dev[ctx.device].src1_ddq + src1_ddq_i_offset;
+                          SYCL_CHECK(CHECK_TRY_ERROR(stream->memcpy(
+                                src1_ddq_i, src1_ddq_i_source,
+                                src1_ncols * src1_padded_col_size * q8_1_ts /
+                                    q8_1_bs).wait()));
+                        } else {
+
+                            float * src1_ddf_i_source = (float *) src1_extra->data_device[ctx.device];
+                            src1_ddf_i_source += (i0*ne11 + src1_col_0) * ne10;
+
+                            SYCL_CHECK(CHECK_TRY_ERROR(dev2dev_memcpy(*stream, *main_stream,
+                                src1_ddf_i, src1_ddf_i_source,
+                                src1_ncols * ne10 * sizeof(float))));
+                        }
+                    }
+                } else if (src1_on_device && !src1_is_contiguous) {
+                    SYCL_CHECK(ggml_sycl_cpy_tensor_2d(
+                                   src1_ddf_i, src1, i03, i02, src1_col_0, src1_col_0+src1_ncols, stream));
+                } else {
+                    GGML_ASSERT(false);
+                }
+
+                if (convert_src1_to_q8_1 && !src1_is_contiguous) {
+                    quantize_row_q8_1_sycl(src1_ddf_i, src1_ddq_i, ne10, src1_ncols, src1_padded_col_size, stream);
+                    /*
+                    DPCT1010:92: SYCL uses exceptions to report errors and does
+                    not use the error codes. The call was replaced with 0. You
+                    need to rewrite this code.
+                    */
+                    SYCL_CHECK(0);
+                }
+
+                if (src1_col_0 == 0 && !src0_is_contiguous && i02 % i02_divisor == 0) {
+                    SYCL_CHECK(ggml_sycl_cpy_tensor_2d(src0_dd_i, src0, i03, i02/i02_divisor, dev[i].row_low, dev[i].row_high, stream));
+                }
+                if (src1->type == GGML_TYPE_F16) {
+                    src1_padded_col_size = (i0 * ne11 + src1_col_0) * ne10;
+                }
+                // do the computation
+                SYCL_CHECK(CHECK_TRY_ERROR(op(ctx, src0, src1, dst, src0_dd_i, src1_ddf_i, src1_ddq_i, dst_dd_i,
+                    dev[i].row_low, dev[i].row_high, src1_ncols, src1_padded_col_size, stream)));
+                /*
+                DPCT1010:93: SYCL uses exceptions to report errors and does not
+                use the error codes. The call was replaced with 0. You need to
+                rewrite this code.
+                */
+                SYCL_CHECK(0);
+
+                // copy dst to host or other device if necessary
+                if (!dst_on_device) {
+                    void * dst_off_device = dst->data;
+                    if (split) {
+                        // src0 = weight matrix is saved as a transposed matrix for better memory layout.
+                        // dst is NOT transposed.
+                        // The outputs of matrix matrix multiplications can therefore NOT simply be concatenated for >1 GPU.
+                        // Instead they need to be copied to the correct slice in ne0 = dst row index.
+                        // If dst is a vector with ne0 == 1 then you don't have to do this but it still produces correct results.
+                        float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3);
+                        GGML_ASSERT(dst->nb[1] == ne0*sizeof(float));
+                        dhf_dst_i += src1_col_0*ne0 + dev[i].row_low;
+
+                        SYCL_CHECK(CHECK_TRY_ERROR(dpct::async_dpct_memcpy(
+                            dhf_dst_i, ne0 * sizeof(float), dst_dd_i,
+                            row_diff * sizeof(float), row_diff * sizeof(float),
+                            src1_ncols, dpct::device_to_device, *stream)));
+                    } else {
+                        float * dhf_dst_i = (float *) ((char *) dst_off_device + i02*nb2 + i03*nb3);
+                        GGML_ASSERT(dst->nb[1] == ne0*sizeof(float));
+                        dhf_dst_i += src1_col_0*ne0;
+                        SYCL_CHECK(CHECK_TRY_ERROR(
+                            stream->memcpy(dhf_dst_i, dst_dd_i,
+                                           src1_ncols * ne0 * sizeof(float)).wait()));
+                    }
+                }
+
+                // add event for the main device to wait on until other device is done
+                if (split && (i != ctx.device || is != 0)) {
+                    /*
+                    DPCT1024:94: The original code returned the error code that
+                    was further consumed by the program logic. This original
+                    code was replaced with 0. You may need to rewrite the
+                    program logic consuming the error code.
+                    */
+                    SYCL_CHECK(CHECK_TRY_ERROR(
+                        *src0_extra->events[i][is] =
+                            stream->ext_oneapi_submit_barrier()));
+                }
+            }
+        }
+    }
+
+    // main device waits for all other devices to be finished
+    if (split && ggml_sycl_info().device_count > 1) {
+        int64_t is_max = (ne11 + MUL_MAT_SRC1_COL_STRIDE - 1) / MUL_MAT_SRC1_COL_STRIDE;
+        is_max = is_max <= GGML_SYCL_MAX_STREAMS ? is_max : GGML_SYCL_MAX_STREAMS;
+
+        ggml_sycl_set_device(ctx.device);
+        for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+            if (dev[i].row_low == dev[i].row_high) {
+                continue;
+            }
+            for (int64_t is = 0; is < is_max; ++is) {
+                SYCL_CHECK(CHECK_TRY_ERROR(
+                    ctx.stream()->ext_oneapi_submit_barrier(
+                        {*src0_extra->events[i][is]})));
+            }
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+
+static void ggml_sycl_repeat(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_repeat);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_get_rows(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_get_rows);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_add(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_add);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_acc(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_acc);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_mul(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_mul);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_div(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_div);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_gelu(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_gelu);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_silu(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_silu);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_gelu_quick(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_gelu_quick);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_tanh(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_tanh);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_relu(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_relu);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_hardsigmoid(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_hardsigmoid);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_hardswish(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_hardswish);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_leaky_relu(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_leaky_relu);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_sqr(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_sqr);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_norm(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_norm);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_group_norm(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_group_norm);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_concat(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_concat);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_upscale(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_upscale);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_pad(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_pad);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+
+static void ggml_sycl_rms_norm(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_SYCL_DEBUG("call %s\n", __func__);
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_rms_norm);
+    GGML_SYCL_DEBUG("call %s done\n", __func__);
+}
+
+static void ggml_sycl_mul_mat_vec_p021(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                       const ggml_tensor *src1,
+                                       ggml_tensor *dst) try {
+    GGML_ASSERT(ggml_is_permuted(src0) && ggml_is_permuted(src1));
+    GGML_ASSERT(src0->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
+    GGML_ASSERT(src0->nb[0] <= src0->nb[1] && src0->nb[2] <= src0->nb[3]); // 0213 permutation
+    GGML_ASSERT(src1->nb[0] <= src1->nb[1] && src1->nb[2] <= src1->nb[3]); // 0213 permutation
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+    const int64_t ne02 = src0->ne[2];
+
+    const int64_t ne12 = src1->ne[2];
+
+    SYCL_CHECK(ggml_sycl_set_device(ctx.device));
+    queue_ptr main_stream = ctx.stream();
+
+    void  * src0_ddq = src0->data;
+    float * src1_ddf = (float *) src1->data;
+    float * dst_ddf  = (float *) dst->data;
+
+    ggml_mul_mat_p021_f16_f32_sycl(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, ne02, ne12, main_stream);
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_sycl_mul_mat_vec_nc(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                     const ggml_tensor *src1,
+                                     ggml_tensor *dst) try {
+    GGML_ASSERT(!ggml_is_transposed(src0));
+    GGML_ASSERT(!ggml_is_transposed(src1));
+    GGML_ASSERT(!ggml_is_permuted(src0));
+    GGML_ASSERT(src0->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+    const int64_t ne02 = src0->ne[2];
+
+    const int64_t nb01 = src0->nb[1];
+    const int64_t nb02 = src0->nb[2];
+
+    const int64_t ne12 = src1->ne[2];
+
+    SYCL_CHECK(ggml_sycl_set_device(ctx.device));
+    queue_ptr main_stream = ctx.stream();
+
+    void  * src0_ddq = src0->data;
+    float * src1_ddf = (float *) src1->data;
+    float * dst_ddf  = (float *) dst->data;
+
+    const int64_t row_stride_x = nb01 / sizeof(sycl::half);
+    const int64_t channel_stride_x = nb02 / sizeof(sycl::half);
+
+    ggml_mul_mat_vec_nc_f16_f32_sycl(src0_ddq, src1_ddf, dst_ddf, ne00, ne01, row_stride_x, ne02, ne12, channel_stride_x, main_stream);
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void k_compute_batched_ptrs(const sycl::half *src0_as_f16,
+                                   const sycl::half *src1_as_f16, char *dst,
+                                   const void **ptrs_src, void **ptrs_dst,
+                                   int64_t ne12, int64_t ne13, int64_t ne23,
+                                   size_t nb02, size_t nb03, size_t nb12,
+                                   size_t nb13, size_t nbd2, size_t nbd3,
+                                   int64_t r2, int64_t r3,
+                                   const sycl::nd_item<3> &item_ct1) {
+    int64_t i13 = item_ct1.get_group(2) * item_ct1.get_local_range(2) +
+                  item_ct1.get_local_id(2);
+    int64_t i12 = item_ct1.get_group(1) * item_ct1.get_local_range(1) +
+                  item_ct1.get_local_id(1);
+
+    if (i13 >= ne13 || i12 >= ne12) {
+        return;
+    }
+
+    int64_t i03 = i13 / r3;
+    int64_t i02 = i12 / r2;
+
+    ptrs_src[0*ne23 + i12 + i13*ne12] = (const char *) src0_as_f16 + i02*nb02 + i03*nb03;
+    ptrs_src[1*ne23 + i12 + i13*ne12] = (const char *) src1_as_f16 + i12*nb12 + i13*nb13;
+    ptrs_dst[0*ne23 + i12 + i13*ne12] = (      char *)         dst + i12*nbd2 + i13*nbd3;
+}
+
+static void ggml_sycl_mul_mat_batched_sycl(ggml_backend_sycl_context & ctx,
+                                             const ggml_tensor *src0,
+                                             const ggml_tensor *src1,
+                                             ggml_tensor *dst) try {
+    GGML_ASSERT(!ggml_is_transposed(src0));
+    GGML_ASSERT(!ggml_is_transposed(src1));
+    GGML_ASSERT(src0->backend != GGML_BACKEND_TYPE_GPU_SPLIT);
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int64_t ne_dst = ggml_nelements(dst);
+
+    SYCL_CHECK(ggml_sycl_set_device(ctx.device));
+    queue_ptr main_stream = ctx.stream();;
+
+    bool no_mixed_dtypes = main_stream->get_backend() == sycl::backend::ext_oneapi_cuda ||
+                           main_stream->get_backend() == sycl::backend::ext_oneapi_hip;
+
+
+    void * src0_ddq = src0->data;
+    sycl::half *src0_as_f16 = (sycl::half *)src0_ddq;
+    float * src1_ddf = (float *) src1->data;
+    float * dst_ddf = (float *) dst->data;
+
+    // convert src1 to fp16
+    ggml_sycl_pool_alloc<sycl::half> src1_f16_alloc(ctx.pool());
+    if (src1->type != GGML_TYPE_F16) {
+        const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src1->type);
+        const int64_t ne_src1 = ggml_nelements(src1);
+        src1_f16_alloc.alloc(ne_src1);
+        GGML_ASSERT(to_fp16_sycl != nullptr);
+        to_fp16_sycl(src1_ddf, src1_f16_alloc.get(), ne_src1, main_stream);
+    }
+    sycl::half *src1_f16 = src1->type == GGML_TYPE_F16 ? (sycl::half *)src1_ddf
+                                                       : src1_f16_alloc.get();
+
+    ggml_sycl_pool_alloc<sycl::half> dst_f16(ctx.pool());
+    char * dst_t;
+
+    dpct::library_data_t cu_compute_type = dpct::library_data_t::real_float;
+    dpct::library_data_t cu_data_type = dpct::library_data_t::real_float;
+    if (no_mixed_dtypes) {
+        cu_compute_type = dpct::library_data_t::real_half;
+        cu_data_type = dpct::library_data_t::real_half;
+    }
+
+    // dst strides
+    size_t nbd2 = dst->nb[2];
+    size_t nbd3 = dst->nb[3];
+
+    const float alpha_f32 = 1.0f;
+    const float beta_f32 = 0.0f;
+
+    const sycl::half alpha_f16 = 1.0f;
+    const sycl::half beta_f16 = 0.0f;
+
+    const void * alpha = &alpha_f32;
+    const void * beta  = &beta_f32;
+    if (no_mixed_dtypes) {
+        alpha = &alpha_f16;
+        beta  = &beta_f16;
+    }
+
+    // TODO: Renable (dst->op_params[0] =! GGML_PREC_DEFAULT) pathway
+    // when oneMKL open source supports half, half, float, float: datatypes
+
+    dst_t = (char *) dst_ddf;
+    if (no_mixed_dtypes) {
+        dst_t = (char *) dst_f16.alloc(ne_dst);
+
+        nbd2 /= sizeof(float) / sizeof(sycl::half);
+        nbd3 /= sizeof(float) / sizeof(sycl::half);
+    }
+
+    GGML_ASSERT(ne12 % ne02 == 0);
+    GGML_ASSERT(ne13 % ne03 == 0);
+
+    // broadcast factors
+    const int64_t r2 = ne12/ne02;
+    const int64_t r3 = ne13/ne03;
+
+    if (r2 == 1 && r3 == 1 && ggml_is_contiguous_2(src0) && ggml_is_contiguous_2(src1)) {
+        // there is no broadcast and src0, src1 are contiguous across dims 2, 3
+        SYCL_CHECK(CHECK_TRY_ERROR(dpct::gemm_batch(
+            *main_stream, oneapi::mkl::transpose::trans,
+            oneapi::mkl::transpose::nontrans, ne01, ne11, ne10, alpha,
+            (const char *)src0_as_f16, dpct::library_data_t::real_half,
+            nb01 / nb00, nb02 / nb00,
+            (const char *)src1_f16, dpct::library_data_t::real_half,
+            nb11 / nb10, nb12 / nb10, beta,
+            (char *)dst_t, cu_data_type, ne01, nb2 / nb0,
+            ne12 * ne13, cu_compute_type)));
+    } else {
+        const int ne23 = ne12*ne13;
+
+        ggml_sycl_pool_alloc<const void *> ptrs_src(ctx.pool(), 2*ne23);
+        ggml_sycl_pool_alloc<      void *> ptrs_dst(ctx.pool(), 1*ne23);
+
+        sycl::range<3> block_dims(1, ne12, ne13);
+        /*
+        DPCT1049:47: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(main_stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            main_stream->submit([&](sycl::handler &cgh) {
+                const void **ptrs_src_get = ptrs_src.get();
+                void **ptrs_dst_get = ptrs_dst.get();
+                size_t nb12_scaled = src1->type == GGML_TYPE_F16 ? nb12 : nb12 / 2;
+                size_t nb13_scaled = src1->type == GGML_TYPE_F16 ? nb13 : nb13 / 2;
+                cgh.parallel_for(sycl::nd_range<3>(block_dims, block_dims),
+                                 [=](sycl::nd_item<3> item_ct1) {
+                                     k_compute_batched_ptrs(
+                                         src0_as_f16, src1_f16,
+                                         dst_t, ptrs_src_get,
+                                         ptrs_dst_get, ne12, ne13, ne23,
+                                         nb02, nb03, nb12_scaled, nb13_scaled,
+                                         nbd2, nbd3, r2, r3, item_ct1);
+                                 });
+            });
+        }
+        SYCL_CHECK(CHECK_TRY_ERROR(dpct::gemm_batch(
+            *main_stream, oneapi::mkl::transpose::trans,
+            oneapi::mkl::transpose::nontrans, ne01, ne11, ne10, alpha,
+            (const void **)(ptrs_src.get() + 0 * ne23),
+            dpct::library_data_t::real_half, nb01 / nb00,
+            (const void **)(ptrs_src.get() + 1 * ne23),
+            dpct::library_data_t::real_half, nb11 / nb10, beta,
+            (void **)(ptrs_dst.get() + 0 * ne23), cu_data_type, ne01, ne23,
+            cu_compute_type)));
+    }
+
+    if (no_mixed_dtypes) {
+        const to_fp32_sycl_t to_fp32_sycl = ggml_get_to_fp32_sycl(GGML_TYPE_F16);
+        to_fp32_sycl(dst_f16.get(), dst_ddf, ne_dst, main_stream);
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+inline bool ggml_sycl_supports_mmq(enum ggml_type type) {
+    // TODO: accuracy issues in MMQ
+    return false;
+}
+
+bool ggml_sycl_supports_dmmv(enum ggml_type type) {
+    switch (type) {
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+        case GGML_TYPE_F16:
+            return true;
+        default:
+            return false;
+    }
+}
+
+static void ggml_sycl_mul_mat(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    const bool split = ggml_backend_buffer_is_sycl_split(src0->buffer);
+
+    int64_t min_compute_capability = INT_MAX;
+
+    if (split) {
+        ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *) src0->buffer->buft->context;
+        auto & tensor_split = buft_ctx->tensor_split;
+        for (int id = 0; id < ggml_sycl_info().device_count; ++id) {
+            // skip devices that are not going to do any work:
+            if (tensor_split[id] >= (id + 1 < ggml_sycl_info().device_count ? tensor_split[id + 1] : 1.0f)) {
+                continue;
+            }
+
+            if (min_compute_capability > ggml_sycl_info().devices[id].cc) {
+                min_compute_capability = ggml_sycl_info().devices[id].cc;
+            }
+        }
+    } else {
+        min_compute_capability    = ggml_sycl_info().devices[ctx.device].cc;
+    }
+
+    // check data types and tensor shapes for custom matrix multiplication kernels:
+    bool use_dequantize_mul_mat_vec = ggml_sycl_supports_dmmv(src0->type)
+        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32
+        && src0->ne[0] % GGML_SYCL_DMMV_X == 0 && src1->ne[1] == 1;
+
+    bool use_mul_mat_vec_q =  ggml_is_quantized(src0->type)
+        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32
+        && src1->ne[1] <= MMVQ_MAX_BATCH_SIZE;
+
+    bool use_mul_mat_q =  ggml_sycl_supports_mmq(src0->type)
+        && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32;
+
+    // mmvq and mmq need the __dp4a instruction which is available for gen12+
+    // Workaround in https://github.com/ggerganov/llama.cpp/commit/95f84d5ce8b449a9b16009434aca800df504a02e
+    use_mul_mat_q = use_mul_mat_q && (src0->type != GGML_TYPE_IQ2_XXS);
+#ifdef SYCL_USE_XMX
+    use_mul_mat_q = use_mul_mat_q && (src1->ne[1] <= MMQ_MAX_BATCH_SIZE);
+#endif // SYCL_USE_XMX
+
+    if (!split && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) {
+        // KQ single-batch
+        ggml_sycl_mul_mat_vec_p021(ctx, src0, src1, dst);
+    } else if (!split && src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && src1->ne[1] == 1) {
+        // KQV single-batch
+        ggml_sycl_mul_mat_vec_nc(ctx, src0, src1, dst);
+    } else if (!split && src0->type == GGML_TYPE_F16 && !ggml_is_transposed(src0) && !ggml_is_transposed(src1) && src1->ne[2]*src1->ne[3] > 1) {
+        // KQ + KQV multi-batch
+        ggml_sycl_mul_mat_batched_sycl(ctx, src0, src1, dst);
+    } else if (use_dequantize_mul_mat_vec) {
+        ggml_sycl_op_mul_mat(ctx, src0, src1, dst, ggml_sycl_op_dequantize_mul_mat_vec, false);
+    } else if (use_mul_mat_vec_q) {
+        ggml_sycl_op_mul_mat(ctx, src0, src1, dst, ggml_sycl_op_mul_mat_vec_q, true);
+    } else if (use_mul_mat_q) {
+        ggml_sycl_op_mul_mat(ctx, src0, src1, dst, ggml_sycl_op_mul_mat_q, true);
+    } else {
+        ggml_sycl_op_mul_mat(ctx, src0, src1, dst, ggml_sycl_op_mul_mat_sycl, false);
+    }
+}
+
+
+struct mmid_row_mapping {
+    int32_t i1;
+    int32_t i2;
+};
+
+__dpct_inline__ static void k_copy_src1_to_contiguous(
+    const char *__restrict__ src1_original, char *__restrict__ src1_contiguous,
+    int *__restrict__ cur_src1_row, mmid_row_mapping *__restrict__ row_mapping,
+    const char *__restrict ids, int64_t i02, size_t ids_nb1, size_t ids_nb0,
+    int64_t ne11, int64_t ne10, size_t nb11, size_t nb12,
+    const sycl::nd_item<3> &item_ct1, int &src1_row) {
+    int32_t iid1 = item_ct1.get_group(2);
+    int32_t id = item_ct1.get_group(1);
+
+    const int32_t row_id_i = *(const int32_t *) (ids + iid1*ids_nb1 + id*ids_nb0);
+
+    if (row_id_i != i02) {
+        return;
+    }
+
+    const int64_t i11 = id % ne11;
+    const int64_t i12 = iid1;
+
+    if (item_ct1.get_local_id(2) == 0) {
+        src1_row =
+            dpct::atomic_fetch_add<sycl::access::address_space::generic_space>(
+                cur_src1_row, 1);
+        row_mapping[src1_row] = {id, iid1};
+    }
+    /*
+    DPCT1065:194: Consider replacing sycl::nd_item::barrier() with
+    sycl::nd_item::barrier(sycl::access::fence_space::local_space) for better
+    performance if there is no access to global memory.
+    */
+    item_ct1.barrier();
+
+    const float * src1_row_original = (const float *)(src1_original + i11*nb11 + i12*nb12);
+    float * src1_row_contiguous = (float *)(src1_contiguous + src1_row*nb11);
+
+#pragma unroll
+    for (int i = item_ct1.get_local_id(2); i < ne10;
+         i += item_ct1.get_local_range(2)) {
+        src1_row_contiguous[i] = src1_row_original[i];
+    }
+}
+
+__dpct_inline__ static void k_copy_dst_from_contiguous(
+    char *__restrict__ dst_original, const char *__restrict__ dst_contiguous,
+    const mmid_row_mapping *__restrict__ row_mapping, int64_t ne0, size_t nb1,
+    size_t nb2, const sycl::nd_item<3> &item_ct1) {
+    int32_t i = item_ct1.get_group(2);
+
+    const int32_t i1 = row_mapping[i].i1;
+    const int32_t i2 = row_mapping[i].i2;
+
+    const float * dst_row_contiguous = (const float *)(dst_contiguous + i*nb1);
+    float * dst_row_original = (float *)(dst_original + i1*nb1 + i2*nb2);
+
+#pragma unroll
+    for (int j = item_ct1.get_local_id(2); j < ne0;
+         j += item_ct1.get_local_range(2)) {
+        dst_row_original[j] = dst_row_contiguous[j];
+    }
+}
+
+static void ggml_sycl_mul_mat_id(ggml_backend_sycl_context & ctx, const ggml_tensor *src0,
+                                 const ggml_tensor *src1,
+                                 ggml_tensor *dst) try {
+    GGML_ASSERT(!ggml_backend_buffer_is_sycl_split(src0->buffer) && "mul_mat_id does not support split buffers");
+
+    const ggml_tensor *ids = dst->src[2];
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const queue_ptr stream = ctx.stream();
+
+    const int64_t n_as = ne02;
+    const int64_t n_ids = ids->ne[0];
+
+    std::vector<char> ids_host(ggml_nbytes(ids));
+    const char * ids_dev = (const char *) ids->data;
+
+    SYCL_CHECK(CHECK_TRY_ERROR(
+        stream->memcpy(ids_host.data(), ids_dev, ggml_nbytes(ids))));
+    SYCL_CHECK(CHECK_TRY_ERROR(stream->wait()));
+
+    const ggml_tensor_extra_gpu *src0_extra =
+        (const ggml_tensor_extra_gpu *)src0->extra;
+    const ggml_tensor_extra_gpu *src1_extra =
+        (const ggml_tensor_extra_gpu *)src1->extra;
+    const ggml_tensor_extra_gpu *dst_extra =
+        (const ggml_tensor_extra_gpu *)dst->extra;
+
+    ggml_tensor_extra_gpu src0_row_extra;
+    ggml_tensor_extra_gpu src1_row_extra;
+    ggml_tensor_extra_gpu dst_row_extra;
+
+    ggml_tensor src0_row = *src0;
+    ggml_tensor src1_row = *src1;
+    ggml_tensor dst_row = *dst;
+
+    src1_row.backend = GGML_BACKEND_TYPE_GPU;
+    dst_row.backend  = GGML_BACKEND_TYPE_GPU;
+
+    src0_row.extra = &src0_row_extra;
+    src1_row.extra = &src1_row_extra;
+    dst_row.extra = &dst_row_extra;
+
+    char *src0_original = src1->backend == GGML_BACKEND_TYPE_CPU
+                              ? (char *)src0->data
+                              : (char *)src0_extra->data_device[ctx.device];
+    char *src1_original = src1->backend == GGML_BACKEND_TYPE_CPU
+                              ? (char *)src1->data
+                              : (char *)src1_extra->data_device[ctx.device];
+    char *dst_original = dst->backend == GGML_BACKEND_TYPE_CPU
+                             ? (char *)dst->data
+                             : (char *)dst_extra->data_device[ctx.device];
+
+    src0_row.ne[2] = 1;
+    src0_row.ne[3] = 1;
+    src0_row.nb[3] = nb02;
+
+    src1_row.ne[1] = 1;
+    src1_row.ne[2] = 1;
+    src1_row.ne[3] = 1;
+    src1_row.nb[2] = nb11;
+    src1_row.nb[3] = nb11;
+
+    dst_row.ne[1] = 1;
+    dst_row.ne[2] = 1;
+    dst_row.ne[3] = 1;
+    dst_row.nb[2] = nb1;
+    dst_row.nb[3] = nb1;
+    if (ne12 == 1) {
+        for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) {
+            for (int64_t id = 0; id < n_ids; id++) {
+                const int32_t i02 = *(const int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]);
+                GGML_ASSERT(i02 >= 0 && i02 < n_as);
+
+                const int64_t i11 = id % ne11;
+                const int64_t i12 = iid1;
+
+                const int64_t i1 = id;
+                const int64_t i2 = i12;
+
+            src0_row_extra.data_device[ctx.device] =
+                src0_original + i02*nb02;
+            src1_row_extra.data_device[ctx.device] =
+                src1_original + + i11*nb11 + i12*nb12;
+            dst_row_extra.data_device[ctx.device] =
+                dst_original + i1*nb1   + i2*nb2;
+
+            ggml_sycl_mul_mat(ctx, &src0_row, &src1_row, &dst_row);
+            }
+        }
+    } else {
+        ggml_sycl_pool_alloc<char> src1_contiguous(ctx.pool(), sizeof(float)*ggml_nelements(src1));
+        ggml_sycl_pool_alloc<char>  dst_contiguous(ctx.pool(), sizeof(float)*ggml_nelements(dst));
+
+        src1_row_extra.data_device[ctx.device] = src1_contiguous.get();
+        dst_row_extra.data_device[ctx.device]  =  dst_contiguous.get();
+
+        for (int64_t i02 = 0; i02 < n_as; i02++) {
+            int64_t num_src1_rows = 0;
+            for (int64_t iid1 = 0; iid1 < ids->ne[1]; iid1++) {
+                for (int64_t id = 0; id < n_ids; id++) {
+                    const int32_t row_id_i = *(const int32_t *) (ids_host.data() + iid1*ids->nb[1] + id*ids->nb[0]);
+
+                    GGML_ASSERT(row_id_i >= 0 && row_id_i < n_as);
+
+                    if (row_id_i != i02) {
+                        continue;
+                    }
+
+                    num_src1_rows++;
+                }
+            }
+
+            if (num_src1_rows == 0) {
+                continue;
+            }
+
+
+            ggml_sycl_pool_alloc<int> dev_cur_src1_row(ctx.pool(), 1);
+            ggml_sycl_pool_alloc<mmid_row_mapping> dev_row_mapping(ctx.pool(), num_src1_rows);
+            SYCL_CHECK(CHECK_TRY_ERROR(
+                stream->memset(dev_cur_src1_row.get(), 0, sizeof(int))));
+
+            {
+                sycl::range<3> block_dims(1, 1, std::min((unsigned int)ne10, 768u));
+                sycl::range<3> grid_dims(1, n_ids, ids->ne[1]);
+                stream->submit([&](sycl::handler &cgh) {
+                    sycl::local_accessor<int, 0> src1_row_acc(cgh);
+
+                    char *__restrict src1_contiguous_get =
+                        src1_contiguous.get();
+                    int *__restrict dev_cur_src1_row_get =
+                        dev_cur_src1_row.get();
+                    mmid_row_mapping *__restrict dev_row_mapping_get =
+                        dev_row_mapping.get();
+                    size_t ids_nb_ct6 = ids->nb[1];
+                    size_t ids_nb_ct7 = ids->nb[0];
+
+                    cgh.parallel_for(
+                        sycl::nd_range<3>(grid_dims * block_dims, block_dims),
+                        [=](sycl::nd_item<3> item_ct1) {
+                            k_copy_src1_to_contiguous(
+                                src1_original, src1_contiguous_get,
+                                dev_cur_src1_row_get,
+                                dev_row_mapping_get, ids_dev, i02,
+                                ids_nb_ct6, ids_nb_ct7, ne11, ne10, nb11, nb12,
+                                item_ct1, src1_row_acc);
+                        });
+                });
+            }
+
+            src0_row_extra.data_device[ctx.device] = src0_original + i02*nb02;
+
+            GGML_ASSERT(nb11 == sizeof(float)*ne10);
+            GGML_ASSERT(nb1 == sizeof(float)*ne0);
+            src1_row.ne[1] = num_src1_rows;
+
+            src1_row.nb[1] = nb11;
+            src1_row.nb[2] = num_src1_rows*nb11;
+            src1_row.nb[3] = num_src1_rows*nb11;
+
+            dst_row.ne[1] = num_src1_rows;
+            dst_row.nb[1] = nb1;
+            dst_row.nb[2] = num_src1_rows*nb1;
+            dst_row.nb[3] = num_src1_rows*nb1;
+
+            ggml_sycl_mul_mat(ctx, &src0_row, &src1_row, &dst_row);
+
+            {
+                sycl::range<3> block_dims(1, 1, std::min((unsigned int)ne0, 768u));
+                sycl::range<3> grid_dims(1, 1, num_src1_rows);
+                stream->submit([&](sycl::handler &cgh) {
+                    const char *__restrict dst_contiguous_get =
+                        dst_contiguous.get();
+                    const mmid_row_mapping *__restrict dev_row_mapping_get =
+                        dev_row_mapping.get();
+
+                    cgh.parallel_for(
+                        sycl::nd_range<3>(grid_dims * block_dims, block_dims),
+                        [=](sycl::nd_item<3> item_ct1) {
+                            k_copy_dst_from_contiguous(dst_original,
+                                                       dst_contiguous_get,
+                                                       dev_row_mapping_get,
+                                                       ne0, nb1, nb2, item_ct1);
+                        });
+                });
+            }
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_sycl_scale(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_scale);
+}
+
+static void ggml_sycl_clamp(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_clamp);
+}
+
+static void ggml_sycl_cpy(ggml_backend_sycl_context & ctx, const ggml_tensor *src0, const ggml_tensor *src1,
+                          ggml_tensor *dst) try {
+    const int64_t ne = ggml_nelements(src0);
+    GGML_ASSERT(ne == ggml_nelements(src1));
+
+    GGML_ASSERT(ggml_nbytes(src0) <= INT_MAX);
+    GGML_ASSERT(ggml_nbytes(src1) <= INT_MAX);
+
+    GGML_TENSOR_BINARY_OP_LOCALS01;
+
+    SYCL_CHECK(ggml_sycl_set_device(ctx.device));
+    queue_ptr main_stream = ctx.stream();
+
+    char * src0_ddc = (char *) src0->data;
+    char * src1_ddc = (char *) src1->data;
+
+    if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32) {
+        ggml_cpy_f32_f32_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F16) {
+        ggml_cpy_f32_f16_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q8_0) {
+        ggml_cpy_f32_q8_0_sycl(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_0) {
+        ggml_cpy_f32_q4_0_sycl(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_Q4_1) {
+        ggml_cpy_f32_q4_1_sycl(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F32) {
+        ggml_cpy_f16_f32_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16) {
+        ggml_cpy_f16_f16_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_I16 && src1->type == GGML_TYPE_I16) {
+        ggml_cpy_i16_i16_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else if (src0->type == GGML_TYPE_I32 && src1->type == GGML_TYPE_I32) {
+        ggml_cpy_i32_i32_sycl (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream);
+    } else {
+        fprintf(stderr, "%s: unsupported type combination (%s to %s)\n", __func__,
+                ggml_type_name(src0->type), ggml_type_name(src1->type));
+        GGML_ASSERT(false);
+    }
+
+    (void) dst;
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_sycl_dup(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    // TODO: why do we pass dst as src1 here?
+    ggml_sycl_cpy(ctx, src0, dst, nullptr);
+    (void) src1;
+}
+
+static void ggml_sycl_diag_mask_inf(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_diag_mask_inf);
+}
+
+static void ggml_sycl_soft_max(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_soft_max);
+}
+
+static void ggml_sycl_rope(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_ASSERT(ggml_is_contiguous(src0)); // TODO: this restriction is temporary until non-cont support is implemented
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_rope);
+}
+
+static void ggml_sycl_pool2d(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_pool2d);
+}
+
+static void ggml_sycl_im2col(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_im2col);
+}
+
+static void ggml_sycl_sum_rows(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_ASSERT(ggml_is_contiguous(src0));
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_sum_rows);
+}
+
+static void ggml_sycl_argsort(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    GGML_ASSERT(ggml_is_contiguous(src0));
+    ggml_sycl_op_flatten(ctx, src0, src1, dst, ggml_sycl_op_argsort);
+}
+
+static void ggml_sycl_nop(ggml_backend_sycl_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    (void) src0;
+    (void) src1;
+    (void) dst;
+}
+
+static size_t ggml_nbytes_split(const struct ggml_tensor * tensor, int nrows_split) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return nrows_split*ggml_row_size(tensor->type, tensor->ne[0]);
+}
+
+void ggml_sycl_set_main_device(const int main_device) try {
+    if (dpct::get_current_device_id() == main_device) return;
+    check_allow_gpu_index(main_device);
+    dpct::select_device(main_device);
+
+    if (g_ggml_sycl_debug) {
+        dpct::device_info prop;
+        SYCL_CHECK(CHECK_TRY_ERROR(dpct::get_device_info(
+            prop, dpct::dev_mgr::instance().get_device(main_device))));
+        fprintf(stderr, "Using device %d (%s) as main device\n",
+                main_device, prop.get_name());
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+bool ggml_sycl_compute_forward(ggml_backend_sycl_context & ctx, struct ggml_tensor * tensor) {
+    if (!g_sycl_loaded) return false;
+
+    ggml_sycl_func_t func;
+
+    switch (tensor->op) {
+        case GGML_OP_REPEAT:
+            func = ggml_sycl_repeat;
+            break;
+        case GGML_OP_GET_ROWS:
+            func = ggml_sycl_get_rows;
+            break;
+        case GGML_OP_DUP:
+            func = ggml_sycl_dup;
+            break;
+        case GGML_OP_ADD:
+            func = ggml_sycl_add;
+            break;
+        case GGML_OP_ACC:
+            func = ggml_sycl_acc;
+            break;
+        case GGML_OP_MUL:
+            func = ggml_sycl_mul;
+            break;
+        case GGML_OP_DIV:
+            func = ggml_sycl_div;
+            break;
+        case GGML_OP_UNARY:
+            switch (ggml_get_unary_op(tensor)) {
+                case GGML_UNARY_OP_GELU:
+                    func = ggml_sycl_gelu;
+                    break;
+                case GGML_UNARY_OP_SILU:
+                    func = ggml_sycl_silu;
+                    break;
+                case GGML_UNARY_OP_GELU_QUICK:
+                    func = ggml_sycl_gelu_quick;
+                    break;
+                case GGML_UNARY_OP_TANH:
+                    func = ggml_sycl_tanh;
+                    break;
+                case GGML_UNARY_OP_RELU:
+                    func = ggml_sycl_relu;
+                    break;
+                case GGML_UNARY_OP_HARDSIGMOID:
+                    func = ggml_sycl_hardsigmoid;
+                    break;
+                case GGML_UNARY_OP_HARDSWISH:
+                    func = ggml_sycl_hardswish;
+                    break;
+                default:
+                    return false;
+            }
+            break;
+        case GGML_OP_NORM:
+            func = ggml_sycl_norm;
+            break;
+        case GGML_OP_GROUP_NORM:
+            func = ggml_sycl_group_norm;
+            break;
+        case GGML_OP_CONCAT:
+            func = ggml_sycl_concat;
+            break;
+        case GGML_OP_UPSCALE:
+            func = ggml_sycl_upscale;
+            break;
+        case GGML_OP_PAD:
+            func = ggml_sycl_pad;
+            break;
+        case GGML_OP_LEAKY_RELU:
+            func = ggml_sycl_leaky_relu;
+            break;
+        case GGML_OP_RMS_NORM:
+            func = ggml_sycl_rms_norm;
+            break;
+        case GGML_OP_MUL_MAT:
+            if (tensor->src[0]->ne[3] != tensor->src[1]->ne[3]) {
+                return false;
+            }
+            func = ggml_sycl_mul_mat;
+            break;
+        case GGML_OP_MUL_MAT_ID:
+            if (tensor->src[0]->ne[3] != tensor->src[1]->ne[3]) {
+                return false;
+            }
+            func = ggml_sycl_mul_mat_id;
+            break;
+        case GGML_OP_SCALE:
+            func = ggml_sycl_scale;
+            break;
+        case GGML_OP_SQR:
+            func = ggml_sycl_sqr;
+            break;
+        case GGML_OP_CLAMP:
+            func = ggml_sycl_clamp;
+            break;
+        case GGML_OP_CPY:
+            func = ggml_sycl_cpy;
+            break;
+        case GGML_OP_CONT:
+            func = ggml_sycl_dup;
+            break;
+        case GGML_OP_NONE:
+        case GGML_OP_RESHAPE:
+        case GGML_OP_VIEW:
+        case GGML_OP_PERMUTE:
+        case GGML_OP_TRANSPOSE:
+            func = ggml_sycl_nop;
+            break;
+        case GGML_OP_DIAG_MASK_INF:
+            func = ggml_sycl_diag_mask_inf;
+            break;
+        case GGML_OP_SOFT_MAX:
+            func = ggml_sycl_soft_max;
+            break;
+        case GGML_OP_ROPE:
+            func = ggml_sycl_rope;
+            break;
+        case GGML_OP_IM2COL:
+            func = ggml_sycl_im2col;
+            break;
+        case GGML_OP_POOL_2D:
+            func = ggml_sycl_pool2d;
+            break;
+        case GGML_OP_SUM_ROWS:
+            func = ggml_sycl_sum_rows;
+            break;
+        case GGML_OP_ARGSORT:
+            func = ggml_sycl_argsort;
+            break;
+        default:
+            return false;
+    }
+
+    if (tensor->src[0] != nullptr && ggml_backend_buffer_is_sycl_split(tensor->src[0]->buffer)) {
+        ggml_sycl_set_peer_access(tensor->src[1]->ne[1], ctx.device);
+    }
+
+    func(ctx, tensor->src[0], tensor->src[1], tensor);
+    return true;
+}
+
+GGML_API GGML_CALL void   ggml_sycl_get_gpu_list(int *id_list, int max_len) try {
+    GGML_SYCL_DEBUG("[SYCL] call ggml_sycl_get_gpu_list\n");
+    for(int i=0;i<max_len;i++) id_list[i] = -1;
+
+    for (int i=0;i< ggml_sycl_info().device_count;i++){
+        if (i>=max_len) break;
+        id_list[i] = i;
+    }
+    return;
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+int ggml_sycl_get_device_count() try {
+    int device_count;
+    if (CHECK_TRY_ERROR(device_count =
+                             dpct::dev_mgr::instance().device_count()) != 0) {
+        return 0;
+    }
+    return device_count;
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+GGML_API GGML_CALL void ggml_sycl_get_device_description(int device, char *description,
+                                      size_t description_size) try {
+    GGML_SYCL_DEBUG("[SYCL] call ggml_sycl_get_device_description\n");
+    dpct::device_info prop;
+    SYCL_CHECK(CHECK_TRY_ERROR(dpct::get_device_info(
+        prop, dpct::dev_mgr::instance().get_device(device))));
+    snprintf(description, description_size, "%s", prop.get_name());
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+GGML_CALL void ggml_backend_sycl_get_device_memory(int device, size_t *free,
+                                                   size_t *total) try {
+    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_get_device_memory\n");
+    ggml_sycl_set_device(device);
+
+    /*
+    DPCT1009:218: SYCL uses exceptions to report errors and does not use the
+    error codes. The original code was commented out and a warning string was
+    inserted. You need to rewrite this code.
+    */
+    /*
+    DPCT1106:217: 'cudaMemGetInfo' was migrated with the Intel extensions for
+    device information which may not be supported by all compilers or runtimes.
+    You may need to adjust the code.
+    */
+    SYCL_CHECK(CHECK_TRY_ERROR(
+        dpct::dev_mgr::instance().get_device(device).get_memory_info(*free, *total)));
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+// backend interface
+
+#define UNUSED GGML_UNUSED
+
+// sycl buffer
+
+struct ggml_backend_sycl_buffer_context {
+    int device;
+    void * dev_ptr = nullptr;
+    queue_ptr stream;
+    std::string name;
+
+     ggml_backend_sycl_buffer_context(int device, void * dev_ptr, queue_ptr stream) :
+        device(device), dev_ptr(dev_ptr), stream(stream) {
+            check_allow_gpu_index(device);
+            name = (GGML_SYCL_NAME + std::to_string(device));
+        }
+
+
+    ~ggml_backend_sycl_buffer_context() {
+        if (dev_ptr != nullptr) {
+            ggml_sycl_set_device(device);
+            SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(dev_ptr, *stream)));
+        }
+    }
+};
+
+GGML_CALL static const char * ggml_backend_sycl_buffer_get_name(ggml_backend_buffer_t buffer) {
+    ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *)buffer->context;
+    return ctx->name.c_str();
+}
+
+GGML_CALL static bool ggml_backend_buffer_is_sycl(ggml_backend_buffer_t buffer) {
+    return buffer->iface.get_name == ggml_backend_sycl_buffer_get_name;
+}
+
+static void
+ggml_backend_sycl_buffer_free_buffer(ggml_backend_buffer_t buffer) try {
+    ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
+    ggml_sycl_set_device(ctx->device);
+
+    delete ctx;
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void * ggml_backend_sycl_buffer_get_base(ggml_backend_buffer_t buffer) {
+    ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
+    return ctx->dev_ptr;
+}
+
+GGML_CALL static void
+ggml_backend_sycl_buffer_init_tensor(ggml_backend_buffer_t buffer,
+                                     ggml_tensor *tensor) try {
+    ggml_backend_sycl_buffer_context * ctx = (ggml_backend_sycl_buffer_context *)buffer->context;
+
+    if (tensor->view_src != NULL && tensor->view_offs == 0) {
+        assert(tensor->view_src->buffer->buft == buffer->buft);
+        tensor->backend = tensor->view_src->backend;
+        tensor->extra = tensor->view_src->extra;
+        return;
+    }
+
+
+    if (ggml_is_quantized(tensor->type)) {
+        // initialize padding to 0 to avoid possible NaN values
+        size_t original_size = ggml_nbytes(tensor);
+        size_t padded_size = ggml_backend_buft_get_alloc_size(buffer->buft, tensor);
+
+        if (padded_size > original_size && tensor->view_src == nullptr) {
+            SYCL_CHECK(CHECK_TRY_ERROR(ctx->stream->memset(
+                (char *)tensor->data + original_size, 0,
+                padded_size - original_size).wait()));
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_backend_sycl_buffer_set_tensor(ggml_backend_buffer_t buffer,
+                                                ggml_tensor *tensor,
+                                                const void *data, size_t offset,
+                                                size_t size) try {
+
+    ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
+
+    ggml_sycl_set_device(ctx->device);
+    auto stream = &(dpct::dev_mgr::instance().get_device(ctx->device).default_queue());
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(dpct::dev_mgr::instance().get_device(ctx->device).queues_wait_and_throw()));
+    char* host_buf = (char*)malloc(size);
+    memcpy(host_buf, data, size);
+    SYCL_CHECK(
+        CHECK_TRY_ERROR((*stream).memcpy((char *)tensor->data + offset, host_buf, size)
+                             .wait()));
+    free(host_buf);
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_backend_sycl_buffer_get_tensor(ggml_backend_buffer_t buffer,
+                                                const ggml_tensor *tensor,
+                                                void *data, size_t offset,
+                                                size_t size) try {
+
+    ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
+
+    ggml_sycl_set_device(ctx->device);
+    auto stream = dpct::dev_mgr::instance().get_device(ctx->device).default_queue();
+
+    SYCL_CHECK(CHECK_TRY_ERROR(
+        stream.memcpy(data, (const char *)tensor->data + offset, size)
+            .wait()));
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+GGML_CALL static bool
+ggml_backend_sycl_buffer_cpy_tensor(ggml_backend_buffer_t buffer,
+                                    const ggml_tensor *src,
+                                    ggml_tensor *dst) try {
+    if (ggml_backend_buffer_is_sycl(src->buffer)) {
+        ggml_backend_sycl_buffer_context * src_ctx = (ggml_backend_sycl_buffer_context *)src->buffer->context;
+        ggml_backend_sycl_buffer_context * dst_ctx = (ggml_backend_sycl_buffer_context *)dst->buffer->context;
+
+        ggml_sycl_set_device(src_ctx->device);
+        /*
+        DPCT1009:198: SYCL uses exceptions to report errors and does not use the
+        error codes. The original code was commented out and a warning string
+        was inserted. You need to rewrite this code.
+        */
+        SYCL_CHECK(CHECK_TRY_ERROR(
+            dpct::dev_mgr::instance().get_device(src_ctx->device).queues_wait_and_throw()));
+        ggml_sycl_set_device(dst_ctx->device);
+        /*
+        DPCT1009:199: SYCL uses exceptions to report errors and does not use the
+        error codes. The original code was commented out and a warning string
+        was inserted. You need to rewrite this code.
+        */
+        SYCL_CHECK(CHECK_TRY_ERROR(
+            dpct::dev_mgr::instance().get_device(dst_ctx->device).queues_wait_and_throw()));
+        /*
+        DPCT1009:200: SYCL uses exceptions to report errors and does not use the
+        error codes. The original code was commented out and a warning string
+        was inserted. You need to rewrite this code.
+        */
+
+        queue_ptr stream_dst = dst_ctx->stream;
+        queue_ptr stream_src = src_ctx->stream;
+        size_t size = ggml_nbytes(src);
+
+        //todo. it's dirty solutino to walkaroud known issue:device2device cross GPUs.
+        dev2dev_memcpy(*stream_dst, *stream_src, dst->data, src->data, size);
+
+//todo, it's known issue:error in device2device cross GPUs. reused when the issue is fixed. DON"T remove
+#if 0
+        SYCL_CHECK(CHECK_TRY_ERROR((*stream).memcpy(
+            (char *)dst->data, (const char *)src->data, size).wait()));
+
+        /*
+        DPCT1009:201: SYCL uses exceptions to report errors and does not use the
+        error codes. The original code was commented out and a warning string
+        was inserted. You need to rewrite this code.
+        */
+        SYCL_CHECK(CHECK_TRY_ERROR(
+            dpct::dev_mgr::instance().get_device(dst_ctx->device).queues_wait_and_throw()));
+#endif
+        return true;
+    }
+    return false;
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+
+static void ggml_backend_sycl_buffer_clear(ggml_backend_buffer_t buffer,
+                                           uint8_t value) try {
+     ggml_backend_sycl_buffer_context * ctx = ( ggml_backend_sycl_buffer_context *)buffer->context;
+
+    ggml_sycl_set_device(ctx->device);
+    queue_ptr stream = ctx->stream;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(dpct::get_current_device().queues_wait_and_throw()));
+
+    SYCL_CHECK(CHECK_TRY_ERROR((*stream)
+                                    .memset(ctx->dev_ptr, value, buffer->size)
+                                    .wait()));
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static struct ggml_backend_buffer_i ggml_backend_sycl_buffer_interface = {
+    /* .get_name        = */ ggml_backend_sycl_buffer_get_name,
+    /* .free_buffer     = */ ggml_backend_sycl_buffer_free_buffer,
+    /* .get_base        = */ ggml_backend_sycl_buffer_get_base,
+    /* .init_tensor     = */ ggml_backend_sycl_buffer_init_tensor,
+    /* .set_tensor      = */ ggml_backend_sycl_buffer_set_tensor,
+    /* .get_tensor      = */ ggml_backend_sycl_buffer_get_tensor,
+    /* .cpy_tensor      = */ ggml_backend_sycl_buffer_cpy_tensor,
+    /* .clear           = */ ggml_backend_sycl_buffer_clear,
+    /* .reset           = */ NULL,
+};
+
+// sycl buffer type
+struct ggml_backend_sycl_buffer_type_context {
+    int device;
+    std::string name;
+
+    // each buffer type has its own stream
+    queue_ptr stream = nullptr;
+};
+
+GGML_CALL static const char * ggml_backend_sycl_buffer_type_name(ggml_backend_buffer_type_t buft) {
+    ggml_backend_sycl_buffer_type_context * ctx = (ggml_backend_sycl_buffer_type_context *)buft->context;
+
+    return ctx->name.c_str();
+}
+GGML_CALL static ggml_backend_buffer_t
+ggml_backend_sycl_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft,
+                                           size_t size) try {
+    ggml_backend_sycl_buffer_type_context * buft_ctx = (ggml_backend_sycl_buffer_type_context *)buft->context;
+    ggml_sycl_set_device(buft_ctx->device);
+    const queue_ptr stream = buft_ctx->stream;
+    size = std::max(size, (size_t)1); // syclMalloc returns null for size 0
+
+    void * dev_ptr;
+    SYCL_CHECK(CHECK_TRY_ERROR(dev_ptr = (void *)sycl::malloc_device(
+                                    size, *stream)));
+    ggml_backend_sycl_buffer_context * ctx = new  ggml_backend_sycl_buffer_context(buft_ctx->device, dev_ptr, buft_ctx->stream);
+    return ggml_backend_buffer_init(buft, ggml_backend_sycl_buffer_interface, ctx, size);
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+GGML_CALL static size_t ggml_backend_sycl_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
+    return 128;
+    UNUSED(buft);
+}
+
+static size_t ggml_backend_sycl_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) {
+    return dpct::get_current_device().get_max_mem_alloc_size();
+
+    UNUSED(buft);
+}
+
+GGML_CALL static size_t ggml_backend_sycl_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
+    size_t size = ggml_nbytes(tensor);
+    int64_t ne0 = tensor->ne[0];
+
+    if (ggml_is_quantized(tensor->type)) {
+        if (ne0 % MATRIX_ROW_PADDING != 0) {
+            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
+        }
+    }
+
+    return size;
+
+    UNUSED(buft);
+}
+
+static ggml_backend_buffer_type_i ggml_backend_sycl_buffer_type_interface = {
+    /* .get_name         = */ ggml_backend_sycl_buffer_type_name,
+    /* .alloc_buffer     = */ ggml_backend_sycl_buffer_type_alloc_buffer,
+    /* .get_alignment    = */ ggml_backend_sycl_buffer_type_get_alignment,
+    /* .get_max_size     = */ ggml_backend_sycl_buffer_type_get_max_size,
+    /* .get_alloc_size   = */ ggml_backend_sycl_buffer_type_get_alloc_size,
+    /* .is_host          = */ nullptr,
+};
+
+ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(int device) {
+    static std::mutex mutex;
+    std::lock_guard<std::mutex> lock(mutex);
+
+    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_buffer_type\n");
+
+    if (device>=ggml_sycl_info().device_count or device<0) {
+        printf("ggml_backend_sycl_buffer_type error: device_index:%d is out of range [0, %d], miss to call ggml_backend_sycl_set_single_device()\n",
+            device, ggml_sycl_info().device_count-1);
+        GGML_ASSERT(device<ggml_sycl_info().device_count);
+    }
+    static struct ggml_backend_buffer_type ggml_backend_sycl_buffer_types[GGML_SYCL_MAX_DEVICES];
+
+    static bool ggml_backend_sycl_buffer_type_initialized = false;
+
+    if (!ggml_backend_sycl_buffer_type_initialized) {
+        for (int i = 0; i < ggml_sycl_info().device_count; i++) {
+            auto & device_i = dpct::dev_mgr::instance().get_device(i);
+            queue_ptr stream = &(device_i.default_queue());
+            ggml_backend_sycl_buffer_types[i] = {
+                /* .iface    = */ ggml_backend_sycl_buffer_type_interface,
+                /* .context  = */ new ggml_backend_sycl_buffer_type_context{i, GGML_SYCL_NAME + std::to_string(i), stream},
+            };
+        }
+        ggml_backend_sycl_buffer_type_initialized = true;
+    }
+    return &ggml_backend_sycl_buffer_types[device];
+}
+
+ggml_backend_buffer_type_t ggml_backend_sycl_buffer_type(ggml_backend_sycl_context * ctx) {
+    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_buffer_type\n");
+
+    int device = ctx->device;
+    if (device>=ggml_sycl_info().device_count or device<0) {
+        printf("ggml_backend_sycl_buffer_type error: device_index:%d is out of range [0, %d], miss to call ggml_backend_sycl_set_single_device()\n",
+            device, ggml_sycl_info().device_count-1);
+        GGML_ASSERT(device<ggml_sycl_info().device_count);
+    }
+    static struct ggml_backend_buffer_type ggml_backend_sycl_buffer_types[GGML_SYCL_MAX_DEVICES];
+
+    static bool ggml_backend_sycl_buffer_type_initialized = false;
+
+    if (!ggml_backend_sycl_buffer_type_initialized) {
+        for (int i = 0; i < ggml_sycl_info().device_count; i++) {
+            ggml_backend_sycl_buffer_types[i] = {
+                /* .iface    = */ ggml_backend_sycl_buffer_type_interface,
+                /* .context  = */ new ggml_backend_sycl_buffer_type_context{i, GGML_SYCL_NAME + std::to_string(i), ctx->stream(i, 0)},
+            };
+        }
+        ggml_backend_sycl_buffer_type_initialized = true;
+    }
+    return &ggml_backend_sycl_buffer_types[device];
+}
+
+// sycl split buffer type
+static void get_row_split(int64_t * row_low, int64_t * row_high, const ggml_tensor * tensor, const std::array<float, GGML_SYCL_MAX_DEVICES> & tensor_split, int id) {
+    const int64_t nrows = ggml_nrows(tensor);
+    const int64_t rounding = get_row_rounding(tensor->type, tensor_split);
+
+    *row_low = id == 0 ? 0 : nrows*tensor_split[id];
+    *row_low -= *row_low % rounding;
+    if (id == ggml_sycl_info().device_count - 1) {
+        *row_high = nrows;
+    } else {
+        *row_high = nrows*tensor_split[id + 1];
+        *row_high -= *row_high % rounding;
+    }
+}
+
+struct ggml_backend_sycl_split_buffer_context {
+    ~ggml_backend_sycl_split_buffer_context() try {
+        for (ggml_tensor_extra_gpu * extra : tensor_extras) {
+            for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+                for (int64_t is = 0; is < GGML_SYCL_MAX_STREAMS; ++is) {
+                    if (extra->events[i][is] != nullptr) {
+                        /*
+                        DPCT1009:206: SYCL uses exceptions to report errors and
+                        does not use the error codes. The original code was
+                        commented out and a warning string was inserted. You
+                        need to rewrite this code.
+                        */
+                        SYCL_CHECK(CHECK_TRY_ERROR(
+                            dpct::destroy_event(extra->events[i][is])));
+                    }
+                }
+                if (extra->data_device[i] != nullptr) {
+                    /*
+                    DPCT1009:207: SYCL uses exceptions to report errors and does
+                    not use the error codes. The original code was commented out
+                    and a warning string was inserted. You need to rewrite this
+                    code.
+                    */
+                    ggml_sycl_set_device(i);
+                    SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(
+                        extra->data_device[i], *(streams[i]))));
+                }
+            }
+            delete extra;
+        }
+    }
+    catch (sycl::exception const &exc) {
+      std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+                << ", line:" << __LINE__ << std::endl;
+      std::exit(1);
+    }
+
+    std::vector<ggml_tensor_extra_gpu *> tensor_extras;
+    std::vector<queue_ptr> streams;
+};
+
+GGML_CALL static const char * ggml_backend_sycl_split_buffer_get_name(ggml_backend_buffer_t buffer) {
+    return GGML_SYCL_NAME "_Split";
+
+    UNUSED(buffer);
+}
+
+static bool ggml_backend_buffer_is_sycl_split(ggml_backend_buffer_t buffer) {
+   return buffer->iface.get_name == ggml_backend_sycl_split_buffer_get_name;
+}
+
+GGML_CALL static void ggml_backend_sycl_split_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context;
+    delete ctx;
+}
+
+GGML_CALL static void * ggml_backend_sycl_split_buffer_get_base(ggml_backend_buffer_t buffer) {
+    // the pointers are stored in the tensor extras, this is just a dummy address and never dereferenced
+    return (void *)0x1000;
+
+    UNUSED(buffer);
+}
+
+GGML_CALL static void
+ggml_backend_sycl_split_buffer_init_tensor(ggml_backend_buffer_t buffer,
+                                           ggml_tensor *tensor) try {
+    GGML_ASSERT(tensor->view_src == nullptr); // views of split tensors are not supported
+
+    ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context;
+    ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *)buffer->buft->context;
+
+    const int64_t ne0 = tensor->ne[0];
+
+    ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu{};
+
+    ctx->tensor_extras.push_back(extra);
+        ctx->streams.push_back(&(dpct::get_current_device().default_queue()));
+
+    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+        int64_t row_low, row_high;
+        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, i);
+
+        int64_t nrows_split = row_high - row_low;
+        if (nrows_split == 0) {
+            continue;
+        }
+
+        size_t size = ggml_nbytes_split(tensor, nrows_split);
+        const size_t original_size = size;
+
+        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
+        if (ne0 % MATRIX_ROW_PADDING != 0) {
+            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
+        }
+
+        // FIXME: do not crash if cudaMalloc fails
+        // currently, init_tensor cannot fail, it needs to be fixed in ggml-backend first
+        ggml_sycl_set_device(i);
+        const queue_ptr stream = ctx->streams[i];
+        char * buf;
+        /*
+        DPCT1009:208: SYCL uses exceptions to report errors and does not use the
+        error codes. The original code was commented out and a warning string
+        was inserted. You need to rewrite this code.
+        */
+        SYCL_CHECK(CHECK_TRY_ERROR(buf = (char *)sycl::malloc_device(
+                                        size, *stream)));
+
+        // set padding to 0 to avoid possible NaN values
+        if (size > original_size) {
+            /*
+            DPCT1009:209: SYCL uses exceptions to report errors and does not use
+            the error codes. The original code was commented out and a warning
+            string was inserted. You need to rewrite this code.
+            */
+            SYCL_CHECK(CHECK_TRY_ERROR(
+                (*stream)
+                    .memset(buf + original_size, 0, size - original_size)
+                    .wait()));
+        }
+
+        extra->data_device[i] = buf;
+
+        for (int64_t is = 0; is < GGML_SYCL_MAX_STREAMS; ++is) {
+            /*
+            DPCT1009:210: SYCL uses exceptions to report errors and does not use
+            the error codes. The original code was commented out and a warning
+            string was inserted. You need to rewrite this code.
+            */
+            SYCL_CHECK(
+                CHECK_TRY_ERROR(extra->events[i][is] = new sycl::event()));
+        }
+    }
+    tensor->backend = GGML_BACKEND_TYPE_GPU_SPLIT;
+    tensor->extra = extra;
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+GGML_CALL static void
+ggml_backend_sycl_split_buffer_set_tensor(ggml_backend_buffer_t buffer,
+                                          ggml_tensor *tensor, const void *data,
+                                          size_t offset, size_t size) try {
+    // split tensors must always be set in their entirety at once
+    GGML_ASSERT(offset == 0);
+    GGML_ASSERT(size == ggml_nbytes(tensor));
+
+    ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context;
+    ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *)buffer->buft->context;
+
+    const int64_t ne0 = tensor->ne[0];
+    const size_t nb1 = tensor->nb[1];
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra;
+
+    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+        int64_t row_low, row_high;
+        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, i);
+
+        int64_t nrows_split = row_high - row_low;
+        if (nrows_split == 0) {
+            continue;
+        }
+
+        const size_t offset_split = row_low*nb1;
+        size_t size = ggml_nbytes_split(tensor, nrows_split);
+        const size_t original_size = size;
+
+        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
+        if (ne0 % MATRIX_ROW_PADDING != 0) {
+            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
+        }
+
+        const char * buf_host = (const char *)data + offset_split;
+        /*
+        DPCT1009:211: SYCL uses exceptions to report errors and does not use the
+        error codes. The original code was commented out and a warning string
+        was inserted. You need to rewrite this code.
+        */
+        ggml_sycl_set_device(i);
+        const queue_ptr stream = ctx->streams[i];
+        SYCL_CHECK(CHECK_TRY_ERROR(
+            (*stream)
+                .memcpy(extra->data_device[i], buf_host, original_size)
+                .wait()));
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+GGML_CALL static void
+ggml_backend_sycl_split_buffer_get_tensor(ggml_backend_buffer_t buffer,
+                                          const ggml_tensor *tensor, void *data,
+                                          size_t offset, size_t size) try {
+    // split tensors must always be set in their entirety at once
+    GGML_ASSERT(offset == 0);
+    GGML_ASSERT(size == ggml_nbytes(tensor));
+
+    ggml_backend_sycl_split_buffer_context * ctx = (ggml_backend_sycl_split_buffer_context *)buffer->context;
+    ggml_backend_sycl_split_buffer_type_context * buft_ctx = (ggml_backend_sycl_split_buffer_type_context *)buffer->buft->context;
+
+    const int64_t ne0 = tensor->ne[0];
+    const size_t nb1 = tensor->nb[1];
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *)tensor->extra;
+
+    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+        int64_t row_low, row_high;
+        get_row_split(&row_low, &row_high, tensor, buft_ctx->tensor_split, i);
+
+        int64_t nrows_split = row_high - row_low;
+        if (nrows_split == 0) {
+            continue;
+        }
+
+        const size_t offset_split = row_low*nb1;
+        size_t size = ggml_nbytes_split(tensor, nrows_split);
+        const size_t original_size = size;
+
+        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
+        if (ne0 % MATRIX_ROW_PADDING != 0) {
+            size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
+        }
+
+        char * buf_host = (char *)data + offset_split;
+        /*
+        DPCT1009:212: SYCL uses exceptions to report errors and does not use the
+        error codes. The original code was commented out and a warning string
+        was inserted. You need to rewrite this code.
+        */
+        ggml_sycl_set_device(i);
+        const queue_ptr stream = ctx->streams[i];
+        SYCL_CHECK(CHECK_TRY_ERROR(
+            (*stream)
+                .memcpy(buf_host, extra->data_device[i], original_size)
+                .wait()));
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+GGML_CALL static void ggml_backend_sycl_split_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
+    UNUSED(buffer);
+    UNUSED(value);
+}
+
+static struct ggml_backend_buffer_i ggml_backend_sycl_split_buffer_interface = {
+    /* .get_name        = */ ggml_backend_sycl_split_buffer_get_name,
+    /* .free_buffer     = */ ggml_backend_sycl_split_buffer_free_buffer,
+    /* .get_base        = */ ggml_backend_sycl_split_buffer_get_base,
+    /* .init_tensor     = */ ggml_backend_sycl_split_buffer_init_tensor,
+    /* .set_tensor      = */ ggml_backend_sycl_split_buffer_set_tensor,
+    /* .get_tensor      = */ ggml_backend_sycl_split_buffer_get_tensor,
+    /* .cpy_tensor      = */ NULL,
+    /* .clear           = */ ggml_backend_sycl_split_buffer_clear,
+    /* .reset           = */ NULL,
+};
+
+GGML_CALL static const char * ggml_backend_sycl_split_buffer_type_name(ggml_backend_buffer_type_t buft) {
+    return GGML_SYCL_NAME "_Split";
+
+    UNUSED(buft);
+}
+
+GGML_CALL static ggml_backend_buffer_t ggml_backend_sycl_split_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    // since we don't know the exact split after rounding, we cannot allocate the device buffers at this point
+    // instead, we allocate them for each tensor separately in init_tensor
+    // however, the size still represents the maximum cumulative size of all the device buffers after the tensors are allocated,
+    // as returned by get_alloc_size. this limit is enforced during tensor allocation by ggml-alloc, so it must be correct.
+    ggml_backend_sycl_split_buffer_context * ctx = new ggml_backend_sycl_split_buffer_context();
+
+    return ggml_backend_buffer_init(buft, ggml_backend_sycl_split_buffer_interface, ctx, size);
+}
+
+GGML_CALL static size_t ggml_backend_sycl_split_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
+    return 128;
+    UNUSED(buft);
+}
+
+GGML_CALL static size_t ggml_backend_sycl_split_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
+    ggml_backend_sycl_split_buffer_type_context * ctx = (ggml_backend_sycl_split_buffer_type_context *)buft->context;
+
+    size_t total_size = 0;
+
+    const int64_t ne0 = tensor->ne[0];
+
+    for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+        int64_t row_low, row_high;
+        get_row_split(&row_low, &row_high, tensor, ctx->tensor_split, i);
+
+        int64_t nrows_split = row_high - row_low;
+        if (nrows_split == 0) {
+            continue;
+        }
+
+        total_size += ggml_nbytes_split(tensor, nrows_split);
+
+        // pad last row to a multiple of 512 elements to avoid out-of-bounds memory accesses
+        if (ne0 % MATRIX_ROW_PADDING != 0) {
+            total_size += ggml_row_size(tensor->type, MATRIX_ROW_PADDING - ne0 % MATRIX_ROW_PADDING);
+        }
+    }
+
+    return total_size;
+}
+
+GGML_CALL static bool ggml_backend_sycl_split_buffer_type_is_host(ggml_backend_buffer_type_t buft) {
+    return false;
+
+    UNUSED(buft);
+}
+
+static ggml_backend_buffer_type_i ggml_backend_sycl_split_buffer_type_interface = {
+    /* .get_name         = */ ggml_backend_sycl_split_buffer_type_name,
+    /* .alloc_buffer     = */ ggml_backend_sycl_split_buffer_type_alloc_buffer,
+    /* .get_alignment    = */ ggml_backend_sycl_split_buffer_type_get_alignment,
+    /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
+    /* .get_alloc_size   = */ ggml_backend_sycl_split_buffer_type_get_alloc_size,
+    /* .is_host          = */ ggml_backend_sycl_split_buffer_type_is_host,
+};
+
+GGML_CALL ggml_backend_buffer_type_t ggml_backend_sycl_split_buffer_type(const float * tensor_split) {
+    static std::mutex mutex;
+    std::lock_guard<std::mutex> lock(mutex);
+
+    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_split_buffer_type\n");
+    ggml_check_sycl();
+    // FIXME: this is not thread safe
+    static std::map<std::array<float, GGML_SYCL_MAX_DEVICES>, struct ggml_backend_buffer_type> buft_map;
+
+    std::array<float, GGML_SYCL_MAX_DEVICES> tensor_split_arr = {};
+
+    bool all_zero = tensor_split == nullptr || std::all_of(tensor_split, tensor_split + GGML_SYCL_MAX_DEVICES, [](float x) { return x == 0.0f; });
+    if (all_zero) {
+        tensor_split_arr = ggml_sycl_info().default_tensor_split;
+    } else {
+        float split_sum = 0.0f;
+        for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+            tensor_split_arr[i] = split_sum;
+            split_sum += tensor_split[i];
+        }
+        for (int i = 0; i < ggml_sycl_info().device_count; ++i) {
+            tensor_split_arr[i] /= split_sum;
+        }
+    }
+
+    auto it = buft_map.find(tensor_split_arr);
+    if (it != buft_map.end()) {
+        return &it->second;
+    }
+
+    struct ggml_backend_buffer_type buft {
+        /* .iface   = */ ggml_backend_sycl_split_buffer_type_interface,
+        /* .context = */ new ggml_backend_sycl_split_buffer_type_context{tensor_split_arr},
+    };
+
+    auto result = buft_map.emplace(tensor_split_arr, buft);
+    return &result.first->second;
+}
+
+// host buffer type
+
+GGML_CALL static const char * ggml_backend_sycl_host_buffer_type_name(ggml_backend_buffer_type_t buft) {
+    return GGML_SYCL_NAME "_Host";
+
+    UNUSED(buft);
+}
+
+GGML_CALL static const char * ggml_backend_sycl_host_buffer_name(ggml_backend_buffer_t buffer) {
+    return GGML_SYCL_NAME "_Host";
+
+    UNUSED(buffer);
+}
+
+static void ggml_backend_sycl_host_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    ggml_sycl_host_free(buffer->context);
+}
+
+static ggml_backend_buffer_t ggml_backend_sycl_host_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    void * ptr = ggml_sycl_host_malloc(size);
+
+    if (ptr == nullptr) {
+        // fallback to cpu buffer
+        return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size);
+    }
+
+    // FIXME: this is a hack to avoid having to implement a new buffer type
+    ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size);
+    buffer->buft = buft;
+    buffer->iface.get_name = ggml_backend_sycl_host_buffer_name;
+    buffer->iface.free_buffer = ggml_backend_sycl_host_buffer_free_buffer;
+
+    return buffer;
+}
+
+ggml_backend_buffer_type_t ggml_backend_sycl_host_buffer_type() {
+    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_host_buffer_type\n");
+    static struct ggml_backend_buffer_type ggml_backend_sycl_buffer_type_host = {
+        /* .iface    = */ {
+            /* .get_name         = */ ggml_backend_sycl_host_buffer_type_name,
+            /* .alloc_buffer     = */ ggml_backend_sycl_host_buffer_type_alloc_buffer,
+            /* .get_alignment    = */ ggml_backend_cpu_buffer_type()->iface.get_alignment,
+            /* .get_max_size     = */ NULL, // TODO: return device.maxBufferLength
+            /* .get_alloc_size   = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size,
+            /* .is_host          = */ ggml_backend_cpu_buffer_type()->iface.is_host,
+        },
+        /* .context  = */ nullptr,
+    };
+
+    return &ggml_backend_sycl_buffer_type_host;
+}
+
+// backend
+
+GGML_CALL static const char * ggml_backend_sycl_name(ggml_backend_t backend) {
+
+    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
+
+    return sycl_ctx->name.c_str();
+}
+
+GGML_CALL static void ggml_backend_sycl_free(ggml_backend_t backend) {
+    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
+
+    delete sycl_ctx;
+    delete backend;
+}
+
+
+GGML_CALL static ggml_backend_buffer_type_t ggml_backend_sycl_get_default_buffer_type(ggml_backend_t backend) {
+    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
+    return ggml_backend_sycl_buffer_type(sycl_ctx->device);
+}
+
+GGML_CALL static void ggml_backend_sycl_set_tensor_async(ggml_backend_t backend,
+                                               ggml_tensor *tensor,
+                                               const void *data, size_t offset,
+                                               size_t size) try {
+    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
+    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
+
+    GGML_ASSERT(buf->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) && "unsupported buffer type");
+    const queue_ptr stream = sycl_ctx->stream(sycl_ctx->device, 0);
+    SYCL_CHECK(CHECK_TRY_ERROR((stream)->memcpy(
+        (char *)tensor->data + offset, data, size).wait()));
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+GGML_CALL static void ggml_backend_sycl_get_tensor_async(ggml_backend_t backend,
+                                               const ggml_tensor *tensor,
+                                               void *data, size_t offset,
+                                               size_t size) try {
+    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
+    ggml_backend_buffer_t buf = tensor->view_src ? tensor->view_src->buffer : tensor->buffer;
+
+    GGML_ASSERT(buf->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) && "unsupported buffer type");
+    const queue_ptr stream = sycl_ctx->stream(sycl_ctx->device, 0);
+    SYCL_CHECK(CHECK_TRY_ERROR((stream)->memcpy(
+        data, (const char *)tensor->data + offset, size).wait()));
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+GGML_CALL static bool ggml_backend_sycl_cpy_tensor_async(ggml_backend_t backend,
+                                                         const ggml_tensor *src,
+                                                         ggml_tensor *dst) try {
+    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
+    if (dst->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device) && ggml_backend_buffer_is_sycl(src->buffer)) {
+        /*
+        DPCT1009:215: SYCL uses exceptions to report errors and does not use the
+        error codes. The original code was commented out and a warning string
+        was inserted. You need to rewrite this code.
+        */
+        const queue_ptr stream = sycl_ctx->stream(sycl_ctx->device, 0);
+        SYCL_CHECK(CHECK_TRY_ERROR((stream)->memcpy(
+            dst->data, src->data, ggml_nbytes(dst)).wait()));
+        return true;
+    }
+
+    return false;
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_backend_sycl_synchronize(ggml_backend_t backend) try {
+    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
+    const queue_ptr stream = sycl_ctx->stream(sycl_ctx->device, 0);
+    SYCL_CHECK(CHECK_TRY_ERROR((stream)->wait()));
+
+    UNUSED(backend);
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+GGML_CALL static ggml_status ggml_backend_sycl_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
+    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
+    ggml_sycl_set_main_device(sycl_ctx->device);
+
+
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        ggml_tensor * node = cgraph->nodes[i];
+        if (ggml_is_empty(node) || node->op == GGML_OP_RESHAPE || node->op == GGML_OP_TRANSPOSE || node->op == GGML_OP_VIEW || node->op == GGML_OP_PERMUTE || node->op == GGML_OP_NONE) {
+            continue;
+        }
+#ifndef NDEBUG
+        assert(node->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device));
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            if (node->src[j] != nullptr) {
+                assert(node->src[j]->buffer->buft == ggml_backend_sycl_buffer_type(sycl_ctx->device));
+            }
+        }
+#endif
+        bool ok = ggml_sycl_compute_forward(*sycl_ctx, node);
+        if (!ok) {
+            fprintf(stderr, "%s: error: op not supported %s (%s)\n", __func__, node->name, ggml_op_name(node->op));
+        }
+        GGML_ASSERT(ok);
+    }
+
+    return GGML_STATUS_SUCCESS;
+}
+
+GGML_CALL static bool ggml_backend_sycl_supports_op(ggml_backend_t backend, const ggml_tensor * op) {
+    switch (op->op) {
+        case GGML_OP_UNARY:
+            switch (ggml_get_unary_op(op)) {
+                case GGML_UNARY_OP_GELU:
+                case GGML_UNARY_OP_SILU:
+                case GGML_UNARY_OP_RELU:
+                case GGML_UNARY_OP_HARDSIGMOID:
+                case GGML_UNARY_OP_HARDSWISH:
+                case GGML_UNARY_OP_GELU_QUICK:
+                case GGML_UNARY_OP_TANH:
+                    return ggml_is_contiguous(op->src[0]);
+                default:
+                    return false;
+            }
+            break;
+        case GGML_OP_MUL_MAT:
+        case GGML_OP_MUL_MAT_ID:
+            {
+                struct ggml_tensor * a;
+                struct ggml_tensor * b;
+                if (op->op == GGML_OP_MUL_MAT) {
+                    a = op->src[0];
+                    b = op->src[1];
+                } else {
+                    a = op->src[2];
+                    b = op->src[1];
+                }
+                if (a->ne[3] != b->ne[3]) {
+                    return false;
+                }
+                ggml_type a_type = a->type;
+                if (a_type == GGML_TYPE_IQ4_NL  || a_type == GGML_TYPE_IQ4_XS ||
+                    a_type == GGML_TYPE_IQ3_XXS || a_type == GGML_TYPE_IQ3_S  ||
+                    a_type == GGML_TYPE_IQ2_XXS || a_type == GGML_TYPE_IQ2_XS || a_type == GGML_TYPE_IQ2_S ||
+                    a_type == GGML_TYPE_IQ1_S || a_type == GGML_TYPE_IQ1_M
+                    ) {
+                    if (b->ne[1] == 1 && ggml_nrows(b) > 1) {
+                        return false;
+                    }
+                }
+                return true;
+            } break;
+        case GGML_OP_GET_ROWS:
+            {
+                switch (op->src[0]->type) {
+                    case GGML_TYPE_F16:
+                    case GGML_TYPE_F32:
+                    case GGML_TYPE_Q4_0:
+                    case GGML_TYPE_Q4_1:
+                    case GGML_TYPE_Q5_0:
+                    case GGML_TYPE_Q5_1:
+                    case GGML_TYPE_Q8_0:
+                        return true;
+                    default:
+                        return false;
+                }
+            } break;
+        case GGML_OP_CPY:
+            {
+                ggml_type src0_type = op->src[0]->type;
+                ggml_type src1_type = op->src[1]->type;
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q8_0) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_0) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_Q4_1) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) {
+                    return true;
+                }
+                return false;
+            } break;
+        case GGML_OP_CONCAT:
+            {
+                ggml_type src0_type = op->src[0]->type;
+                return src0_type != GGML_TYPE_I32 && src0_type != GGML_TYPE_I16;
+            } break;
+        case GGML_OP_DUP:
+        case GGML_OP_NONE:
+        case GGML_OP_RESHAPE:
+        case GGML_OP_REPEAT:
+        case GGML_OP_VIEW:
+        case GGML_OP_PERMUTE:
+        case GGML_OP_TRANSPOSE:
+        case GGML_OP_NORM:
+        case GGML_OP_ADD:
+        case GGML_OP_MUL:
+        case GGML_OP_DIV:
+        case GGML_OP_RMS_NORM:
+        case GGML_OP_SCALE:
+        case GGML_OP_SQR:
+        case GGML_OP_CLAMP:
+        case GGML_OP_CONT:
+        case GGML_OP_DIAG_MASK_INF:
+        case GGML_OP_SOFT_MAX:
+        case GGML_OP_ROPE:
+        case GGML_OP_IM2COL:
+        case GGML_OP_POOL_2D:
+        case GGML_OP_SUM_ROWS:
+        case GGML_OP_ARGSORT:
+        case GGML_OP_ACC:
+        case GGML_OP_GROUP_NORM:
+        case GGML_OP_UPSCALE:
+        case GGML_OP_PAD:
+        case GGML_OP_LEAKY_RELU:
+            return true;
+        default:
+            return false;
+    }
+
+    UNUSED(backend);
+}
+
+GGML_CALL static bool ggml_backend_sycl_offload_op(ggml_backend_t backend, const ggml_tensor * op) {
+    const int min_batch_size = 32;
+    return op->ne[1] >= min_batch_size && op->op != GGML_OP_GET_ROWS && op->op != GGML_OP_MUL_MAT_ID;
+    GGML_UNUSED(backend);
+}
+
+GGML_CALL static bool ggml_backend_sycl_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
+    if (buft->iface.get_name != ggml_backend_sycl_buffer_type_name) {
+        return false;
+    }
+    ggml_backend_sycl_buffer_type_context * buft_ctx = (ggml_backend_sycl_buffer_type_context *)buft->context;
+    ggml_backend_sycl_context * sycl_ctx = (ggml_backend_sycl_context *)backend->context;
+    return buft_ctx->device == sycl_ctx->device;
+}
+
+static ggml_backend_i ggml_backend_sycl_interface = {
+    /* .get_name                = */ ggml_backend_sycl_name,
+    /* .free                    = */ ggml_backend_sycl_free,
+    /* .get_default_buffer_type = */ ggml_backend_sycl_get_default_buffer_type,
+    /* .set_tensor_async        = */ ggml_backend_sycl_set_tensor_async,
+    /* .get_tensor_async        = */ ggml_backend_sycl_get_tensor_async,
+    /* .cpy_tensor_async        = */ NULL, //ggml_backend_sycl_cpy_tensor_async, // TODO: update for the new interface
+    /* .synchronize             = */ ggml_backend_sycl_synchronize,
+    /* .graph_plan_create       = */ NULL,
+    /* .graph_plan_free         = */ NULL,
+    /* .graph_plan_update       = */ NULL,
+    /* .graph_plan_compute      = */ NULL,
+    /* .graph_compute           = */ ggml_backend_sycl_graph_compute,
+    /* .supports_op             = */ ggml_backend_sycl_supports_op,
+    /* .supports_buft           = */ ggml_backend_sycl_supports_buft,
+    /* .offload_op              = */ ggml_backend_sycl_offload_op,
+    /* .event_new               = */ NULL,
+    /* .event_free              = */ NULL,
+    /* .event_record            = */ NULL,
+    /* .event_wait              = */ NULL,
+    /* .event_synchronize       = */ NULL,
+};
+
+static ggml_guid_t ggml_backend_sycl_guid() {
+    static ggml_guid guid = { 0x58, 0x05, 0x13, 0x8f, 0xcd, 0x3a, 0x61, 0x9d, 0xe7, 0xcd, 0x98, 0xa9, 0x03, 0xfd, 0x7c, 0x53 };
+    return &guid;
+}
+
+GGML_CALL ggml_backend_t ggml_backend_sycl_init(int device) {
+    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_init\n");
+    ggml_check_sycl();
+
+    check_allow_gpu_index(device);
+
+    ggml_backend_sycl_context * ctx = new ggml_backend_sycl_context(device);
+    if (ctx == nullptr) {
+        fprintf(stderr, "%s: error: failed to allocate context\n", __func__);
+        return nullptr;
+    };
+
+    ggml_backend_t sycl_backend = new ggml_backend {
+        /* .guid      = */ ggml_backend_sycl_guid(),
+        /* .interface = */ ggml_backend_sycl_interface,
+        /* .context   = */ ctx
+    };
+
+    return sycl_backend;
+}
+
+bool ggml_backend_is_sycl(ggml_backend_t backend) {
+    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_sycl_guid());
+}
+
+GGML_CALL int ggml_backend_sycl_get_device_count() {
+    GGML_SYCL_DEBUG("[SYCL] call ggml_backend_sycl_get_device_count\n");
+    return ggml_sycl_info().device_count;
+}
+
+GGML_CALL static ggml_backend_t ggml_backend_reg_sycl_init(const char * params, void * user_data) {
+    ggml_backend_t sycl_backend = ggml_backend_sycl_init((int) (intptr_t) user_data);
+    return sycl_backend;
+
+    UNUSED(params);
+}
+
+extern "C" int ggml_backend_sycl_reg_devices();
+
+int ggml_backend_sycl_reg_devices() {
+    assert(ggml_sycl_info().device_count>0);
+    for (int i = 0; i < ggml_sycl_info().device_count; i++) {
+        char name[128];
+        snprintf(name, sizeof(name), "%s%d", GGML_SYCL_NAME, i);
+        ggml_backend_register(name, ggml_backend_reg_sycl_init, ggml_backend_sycl_buffer_type(i), (void *) (intptr_t) i);
+    }
+    return ggml_sycl_info().device_count;
+}
diff --git a/ggml/src/ggml-sycl/backend.hpp b/ggml/src/ggml-sycl/backend.hpp
new file mode 100644 (file)
index 0000000..2d37e27
--- /dev/null
@@ -0,0 +1,23 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#ifndef GGML_SYCL_BACKEND_HPP
+#define GGML_SYCL_BACKEND_HPP
+
+#include "common.hpp"
+#include "convert.hpp"
+#include "dequantize.hpp"
+#include "dmmv.hpp"
+#include "mmq.hpp"
+#include "mmvq.hpp"
+
+#endif // GGML_SYCL_BACKEND_HPP
diff --git a/ggml/src/ggml-sycl/common.cpp b/ggml/src/ggml-sycl/common.cpp
new file mode 100644 (file)
index 0000000..e878f4f
--- /dev/null
@@ -0,0 +1,53 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#include "common.hpp"
+
+int get_current_device_id() {
+  return dpct::dev_mgr::instance().current_device_id();
+}
+
+void* ggml_sycl_host_malloc(size_t size) try {
+  if (getenv("GGML_SYCL_NO_PINNED") != nullptr) {
+    return nullptr;
+  }
+
+  void* ptr = nullptr;
+  // allow to use dpct::get_in_order_queue() for host malloc
+  dpct::err0 err = CHECK_TRY_ERROR(
+      ptr = (void*)sycl::malloc_host(size, dpct::get_in_order_queue()));
+
+  if (err != 0) {
+    // clear the error
+    fprintf(
+        stderr,
+        "WARNING: failed to allocate %.2f MB of pinned memory: %s\n",
+        size / 1024.0 / 1024.0,
+        "syclGetErrorString is not supported");
+    return nullptr;
+  }
+
+  return ptr;
+} catch (sycl::exception const& exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+void ggml_sycl_host_free(void* ptr) try {
+  // allow to use dpct::get_in_order_queue() for host malloc
+  SYCL_CHECK(CHECK_TRY_ERROR(sycl::free(ptr, dpct::get_in_order_queue())));
+} catch (sycl::exception const& exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
diff --git a/ggml/src/ggml-sycl/common.hpp b/ggml/src/ggml-sycl/common.hpp
new file mode 100644 (file)
index 0000000..414c37e
--- /dev/null
@@ -0,0 +1,298 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#ifndef GGML_SYCL_COMMON_HPP
+#define GGML_SYCL_COMMON_HPP
+
+#include <fstream>
+#include <iostream>
+
+#include "dpct/helper.hpp"
+#include "presets.hpp"
+
+#define GGML_COMMON_DECL_SYCL
+#define GGML_COMMON_IMPL_SYCL
+#include "ggml-common.h"
+
+void* ggml_sycl_host_malloc(size_t size);
+void ggml_sycl_host_free(void* ptr);
+
+static int g_ggml_sycl_debug = 0;
+#define GGML_SYCL_DEBUG(...)        \
+  do {                              \
+    if (g_ggml_sycl_debug)          \
+      fprintf(stderr, __VA_ARGS__); \
+  } while (0)
+
+#define CHECK_TRY_ERROR(expr)                                            \
+  [&]() {                                                                \
+    try {                                                                \
+      expr;                                                              \
+      return dpct::success;                                              \
+    } catch (std::exception const& e) {                                  \
+      std::cerr << e.what() << "\nException caught at file:" << __FILE__ \
+                << ", line:" << __LINE__ << ", func:" << __func__        \
+                << std::endl;                                            \
+      return dpct::default_error;                                        \
+    }                                                                    \
+  }()
+
+// #define DEBUG_SYCL_MALLOC
+
+static int g_work_group_size = 0;
+// typedef sycl::half ggml_fp16_t;
+
+#define __SYCL_ARCH__ DPCT_COMPATIBILITY_TEMP
+#define VER_4VEC 610 // todo for hardward optimize.
+#define VER_GEN9 700 // todo for hardward optimize.
+#define VER_GEN12 1000000 // todo for hardward optimize.
+#define VER_GEN13 (VER_GEN12 + 1030) // todo for hardward optimize.
+
+#define GGML_SYCL_MAX_NODES 8192 // TODO: adapt to hardwares
+
+// define for XMX in Intel GPU
+// TODO: currently, it's not used for XMX really.
+#if !defined(GGML_SYCL_FORCE_MMQ)
+    #define SYCL_USE_XMX
+#endif
+
+// max batch size to use MMQ kernels when tensor cores are available
+#define MMQ_MAX_BATCH_SIZE 32
+
+#if defined(_MSC_VER)
+#pragma warning(disable : 4244 4267) // possible loss of data
+#endif
+
+// dmmv = dequantize_mul_mat_vec
+#ifndef GGML_SYCL_DMMV_X
+#define GGML_SYCL_DMMV_X 32
+#endif
+#ifndef GGML_SYCL_MMV_Y
+#define GGML_SYCL_MMV_Y 1
+#endif
+
+typedef sycl::queue *queue_ptr;
+
+enum ggml_sycl_backend_gpu_mode {
+  SYCL_UNSET_GPU_MODE = -1,
+  SYCL_SINGLE_GPU_MODE = 0,
+  SYCL_MUL_GPU_MODE
+};
+
+static_assert(sizeof(sycl::half) == sizeof(ggml_fp16_t), "wrong fp16 size");
+
+static void crash() {
+  int* ptr = NULL;
+  *ptr = 0;
+}
+
+[[noreturn]] static void ggml_sycl_error(
+    const char* stmt,
+    const char* func,
+    const char* file,
+    const int line,
+    const char* msg) {
+  fprintf(stderr, "SYCL error: %s: %s\n", stmt, msg);
+  fprintf(stderr, "  in function %s at %s:%d\n", func, file, line);
+  GGML_ASSERT(!"SYCL error");
+}
+
+#define SYCL_CHECK(err)                     \
+  do {                                      \
+    auto err_ = (err);                      \
+    if (err_ != 0)                          \
+      ggml_sycl_error(                      \
+          #err,                             \
+          __func__,                         \
+          __FILE__,                         \
+          __LINE__,                         \
+          "Meet error in this line code!"); \
+  } while (0)
+
+#if DPCT_COMPAT_RT_VERSION >= 11100
+#define GGML_SYCL_ASSUME(x) __builtin_assume(x)
+#else
+#define GGML_SYCL_ASSUME(x)
+#endif // DPCT_COMPAT_RT_VERSION >= 11100
+
+#ifdef GGML_SYCL_F16
+typedef sycl::half dfloat; // dequantize float
+typedef sycl::half2 dfloat2;
+#else
+typedef float dfloat; // dequantize float
+typedef sycl::float2 dfloat2;
+#endif // GGML_SYCL_F16
+
+#define MMVQ_MAX_BATCH_SIZE  8
+
+static const int8_t kvalues_iq4nl[16]={-127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113};
+
+static int g_all_sycl_device_count = -1;
+static bool g_ggml_backend_sycl_buffer_type_initialized = false;
+
+static ggml_sycl_backend_gpu_mode g_ggml_sycl_backend_gpu_mode =
+    SYCL_UNSET_GPU_MODE;
+
+static void* g_scratch_buffer = nullptr;
+static size_t g_scratch_size = 0; // disabled by default
+static size_t g_scratch_offset = 0;
+
+[[noreturn]] static inline void bad_arch(const sycl::stream& stream_ct1) {
+  stream_ct1 << "ERROR: ggml-sycl was compiled without support for the "
+                "current GPU architecture.\n";
+  // __trap();
+  std::exit(1);
+
+  (void)bad_arch; // suppress unused function warning
+}
+
+int get_current_device_id();
+
+inline dpct::err0 ggml_sycl_set_device(const int device) try {
+
+  int current_device_id;
+  SYCL_CHECK(CHECK_TRY_ERROR(current_device_id = get_current_device_id()));
+
+  // GGML_SYCL_DEBUG("ggml_sycl_set_device device_id=%d,
+  // current_device_id=%d\n", device, current_device);
+  if (device == current_device_id) {
+    return 0;
+  }
+
+  return CHECK_TRY_ERROR(dpct::select_device(device));
+} catch (sycl::exception const& exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  crash();
+  std::exit(1);
+}
+
+//////////////////////
+
+struct ggml_sycl_device_info {
+    int device_count;
+
+    struct sycl_device_info {
+        int     cc;                 // compute capability
+        // int     nsm;                // number of streaming multiprocessors
+        // size_t  smpb;               // max. shared memory per block
+        bool    vmm;                // virtual memory support
+        size_t  total_vram;
+    };
+
+    sycl_device_info devices[GGML_SYCL_MAX_DEVICES] = {};
+
+    std::array<float, GGML_SYCL_MAX_DEVICES> default_tensor_split = {};
+};
+
+const ggml_sycl_device_info & ggml_sycl_info();
+
+struct ggml_sycl_pool {
+    virtual ~ggml_sycl_pool() = default;
+
+    virtual void * alloc(size_t size, size_t * actual_size) = 0;
+    virtual void free(void * ptr, size_t size) = 0;
+};
+
+template<typename T>
+struct ggml_sycl_pool_alloc {
+    ggml_sycl_pool * pool = nullptr;
+    T * ptr = nullptr;
+    size_t actual_size = 0;
+
+    explicit ggml_sycl_pool_alloc(ggml_sycl_pool & pool) : pool(&pool) {
+    }
+
+    ggml_sycl_pool_alloc(ggml_sycl_pool & pool, size_t size) : pool(&pool) {
+        alloc(size);
+    }
+
+    ~ggml_sycl_pool_alloc() {
+        if (ptr != nullptr) {
+            pool->free(ptr, actual_size);
+        }
+    }
+
+    // size is in number of elements
+    T * alloc(size_t size) {
+        GGML_ASSERT(pool != nullptr);
+        GGML_ASSERT(ptr == nullptr);
+        ptr = (T *) pool->alloc(size * sizeof(T), &this->actual_size);
+        return ptr;
+    }
+
+    T * alloc(ggml_sycl_pool & pool, size_t size) {
+        this->pool = &pool;
+        return alloc(size);
+    }
+
+    T * get() {
+        return ptr;
+    }
+
+    ggml_sycl_pool_alloc() = default;
+    ggml_sycl_pool_alloc(const ggml_sycl_pool_alloc &) = delete;
+    ggml_sycl_pool_alloc(ggml_sycl_pool_alloc &&) = delete;
+    ggml_sycl_pool_alloc& operator=(const ggml_sycl_pool_alloc &) = delete;
+    ggml_sycl_pool_alloc& operator=(ggml_sycl_pool_alloc &&) = delete;
+};
+
+// backend interface
+
+struct ggml_tensor_extra_gpu {
+  void* data_device[GGML_SYCL_MAX_DEVICES]; // 1 pointer for each device for split
+                                       // tensors
+  dpct::event_ptr events[GGML_SYCL_MAX_DEVICES]
+                        [GGML_SYCL_MAX_STREAMS]; // events for synchronizing multiple GPUs
+};
+
+struct ggml_backend_sycl_context {
+    int device;
+    std::string name;
+
+    queue_ptr qptrs[GGML_SYCL_MAX_DEVICES][GGML_SYCL_MAX_STREAMS] = { { nullptr } };
+
+    explicit ggml_backend_sycl_context(int device) :
+        device(device),
+        name(GGML_SYCL_NAME + std::to_string(device)) {
+    }
+
+    queue_ptr stream(int device, int stream) {
+        if (qptrs[device][stream] == nullptr) {
+            qptrs[device][stream] = &(dpct::get_current_device().default_queue());
+        }
+        return qptrs[device][stream];
+    }
+
+    queue_ptr stream() {
+        return stream(device, 0);
+    }
+
+    // pool
+    std::unique_ptr<ggml_sycl_pool> pools[GGML_SYCL_MAX_DEVICES];
+
+    static std::unique_ptr<ggml_sycl_pool> new_pool_for_device(queue_ptr qptr, int device);
+
+    ggml_sycl_pool & pool(int device) {
+        if (pools[device] == nullptr) {
+            pools[device] = new_pool_for_device(stream(device,0), device);
+        }
+        return *pools[device];
+    }
+
+    ggml_sycl_pool & pool() {
+        return pool(device);
+    }
+};
+
+
+#endif // GGML_SYCL_COMMON_HPP
diff --git a/ggml/src/ggml-sycl/convert.cpp b/ggml/src/ggml-sycl/convert.cpp
new file mode 100644 (file)
index 0000000..ce9de2b
--- /dev/null
@@ -0,0 +1,544 @@
+#include "convert.hpp"
+#include "dequantize.hpp"
+#include "presets.hpp"
+
+template <int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
+static void dequantize_block(const void * __restrict__ vx, dst_t * __restrict__ y, const int k,
+                             const sycl::nd_item<3> &item_ct1) {
+    const int i = 2 * (item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                       item_ct1.get_local_id(2));
+
+    if (i >= k) {
+        return;
+    }
+
+    const int ib = i/qk; // block index
+    const int iqs = (i%qk)/qr; // quant index
+    const int iybs = i - i%qk; // y block start index
+    const int y_offset = qr == 1 ? 1 : qk/2;
+
+    // dequantize
+    dfloat2 v;
+    dequantize_kernel(vx, ib, iqs, v);
+
+    y[iybs + iqs + 0] = v.x();
+    y[iybs + iqs + y_offset] = v.y();
+}
+
+template <int qk, int qr, dequantize_kernel_t dequantize_kernel, typename dst_t>
+static void dequantize_block_sycl(const void *__restrict__ vx,
+                                  dst_t *__restrict__ y, const int k,
+                                  dpct::queue_ptr stream) {
+    const int num_blocks = (k + 2*SYCL_DEQUANTIZE_BLOCK_SIZE - 1) / (2*SYCL_DEQUANTIZE_BLOCK_SIZE);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+        stream->parallel_for(
+            sycl::nd_range<3>(
+                sycl::range<3>(1, 1, num_blocks) *
+                    sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE),
+                sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE)),
+            [=](sycl::nd_item<3> item_ct1) {
+                dequantize_block<qk, qr, dequantize_kernel>(vx, y, k, item_ct1);
+            });
+    }
+}
+
+template <typename dst_t>
+static void dequantize_row_q2_K_sycl(const void *vx, dst_t *y, const int k,
+                                     dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+#if QK_K == 256
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 64),
+                                               sycl::range<3>(1, 1, 64)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q2_K(vx, y, item_ct1);
+                             });
+    }
+#else
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q2_K(vx, y, item_ct1);
+                             });
+    }
+
+#endif
+}
+
+template <typename dst_t>
+static void dequantize_row_q3_K_sycl(const void *vx, dst_t *y, const int k,
+                                     dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+#if QK_K == 256
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 64),
+                                               sycl::range<3>(1, 1, 64)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q3_K(vx, y, item_ct1);
+                             });
+    }
+#else
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q3_K(vx, y, item_ct1);
+                             });
+    }
+#endif
+}
+
+template <typename dst_t>
+static void dequantize_row_q4_0_sycl(const void *vx, dst_t *y, const int k,
+                                     dpct::queue_ptr stream) {
+    const int nb32 = k / 32;
+    const int nb = (k + 255) / 256;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q4_0(vx, y, nb32, item_ct1);
+                             });
+    }
+}
+
+template <typename dst_t>
+static void dequantize_row_q4_1_sycl(const void *vx, dst_t *y, const int k,
+                                     dpct::queue_ptr stream) {
+    const int nb32 = k / 32;
+    const int nb = (k + 255) / 256;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q4_1(vx, y, nb32, item_ct1);
+                             });
+    }
+}
+
+
+template <typename dst_t>
+static void dequantize_row_q4_K_sycl(const void *vx, dst_t *y, const int k,
+                                     dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q4_K(vx, y, item_ct1);
+                             });
+    }
+}
+
+template <typename dst_t>
+static void dequantize_row_q5_K_sycl(const void *vx, dst_t *y, const int k,
+                                     dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+#if QK_K == 256
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 64),
+                                               sycl::range<3>(1, 1, 64)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q5_K(vx, y, item_ct1);
+                             });
+    }
+#else
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q5_K(vx, y, item_ct1);
+                             });
+    }
+
+#endif
+}
+
+template <typename dst_t>
+static void dequantize_row_q6_K_sycl(const void *vx, dst_t *y, const int k,
+                                     dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+#if QK_K == 256
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 64),
+                                               sycl::range<3>(1, 1, 64)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q6_K(vx, y, item_ct1);
+                             });
+    }
+#else
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_q6_K(vx, y, item_ct1);
+                             });
+    }
+
+#endif
+}
+
+template <typename dst_t>
+static void dequantize_row_iq1_s_sycl(const void *vx, dst_t *y, const int k,
+                                        dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_iq1_s(
+                                     vx, y, item_ct1, iq1s_grid_gpu
+                                     );
+                             });
+        });
+    }
+}
+
+template <typename dst_t>
+static void dequantize_row_iq1_m_sycl(const void *vx, dst_t *y, const int k,
+                                        dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_iq1_m(
+                                     vx, y, item_ct1, iq1s_grid_gpu
+                                     );
+                             });
+        });
+    }
+}
+
+template <typename dst_t>
+static void dequantize_row_iq2_xxs_sycl(const void *vx, dst_t *y, const int k,
+                                        dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_iq2_xxs(
+                                     vx, y, item_ct1, iq2xxs_grid,
+                                     ksigns_iq2xs, kmask_iq2xs);
+                             });
+        });
+    }
+}
+
+template <typename dst_t>
+static void dequantize_row_iq2_xs_sycl(const void *vx, dst_t *y, const int k,
+                                       dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_iq2_xs(
+                                     vx, y, item_ct1, iq2xs_grid,
+                                     ksigns_iq2xs, kmask_iq2xs);
+                             });
+        });
+    }
+}
+
+template <typename dst_t>
+static void dequantize_row_iq2_s_sycl(const void *vx, dst_t *y, const int k,
+                                      dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_iq2_s(vx, y, item_ct1);
+                             });
+        });
+    }
+}
+
+
+template <typename dst_t>
+static void dequantize_row_iq3_xxs_sycl(const void *vx, dst_t *y, const int k,
+                                        dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_iq3_xxs(
+                                     vx, y, item_ct1, iq3xxs_grid,
+                                     ksigns_iq2xs, kmask_iq2xs);
+                             });
+        });
+    }
+}
+
+template <typename dst_t>
+static void dequantize_row_iq3_s_sycl(const void *vx, dst_t *y, const int k,
+                                        dpct::queue_ptr stream) {
+    const int nb = k / QK_K;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                                   sycl::range<3>(1, 1, 32),
+                                               sycl::range<3>(1, 1, 32)),
+                             [=](sycl::nd_item<3> item_ct1) {
+                                 dequantize_block_iq3_s(
+                                     vx, y, item_ct1, kmask_iq2xs, iq3s_grid);
+                             });
+        });
+    }
+}
+
+template <typename dst_t>
+static void dequantize_row_iq4_xs_sycl(const void *vx, dst_t *y, const int k,
+                                       dpct::queue_ptr stream) {
+    const int nb = (k + QK_K - 1) / QK_K;
+#if QK_K == 64
+    dequantize_row_iq4_nl_sycl(vx, y, k, stream);
+#else
+      {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                  cgh.parallel_for(
+                      sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                            sycl::range<3>(1, 1, 32),
+                                        sycl::range<3>(1, 1, 32)),
+                      [=](sycl::nd_item<3> item_ct1) {
+                            dequantize_block_iq4_xs(vx, y, item_ct1);
+                      });
+            });
+      }
+#endif
+}
+
+template <typename dst_t>
+static void dequantize_row_iq4_nl_sycl(const void *vx, dst_t *y, const int k,
+                                       dpct::queue_ptr stream) {
+    const int nb = (k + QK_K - 1) / QK_K;
+      {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                  cgh.parallel_for(
+                      sycl::nd_range<3>(sycl::range<3>(1, 1, nb) *
+                                            sycl::range<3>(1, 1, 32),
+                                        sycl::range<3>(1, 1, 32)),
+                      [=](sycl::nd_item<3> item_ct1) {
+                            dequantize_block_iq4_nl(vx, y, item_ct1);
+                      });
+            });
+      }
+}
+
+template <typename src_t, typename dst_t>
+static void convert_unary(const void * __restrict__ vx, dst_t * __restrict__ y, const int k,
+                          const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_local_range(2) * item_ct1.get_group(2) +
+                  item_ct1.get_local_id(2);
+
+    if (i >= k) {
+        return;
+    }
+
+    const src_t * x = (src_t *) vx;
+
+    y[i] = x[i];
+}
+
+template <typename src_t, typename dst_t>
+static void convert_unary_sycl(const void *__restrict__ vx,
+                               dst_t *__restrict__ y, const int k,
+                               dpct::queue_ptr stream) {
+    const int num_blocks = (k + SYCL_DEQUANTIZE_BLOCK_SIZE - 1) / SYCL_DEQUANTIZE_BLOCK_SIZE;
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(
+                sycl::range<3>(1, 1, num_blocks) *
+                    sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE),
+                sycl::range<3>(1, 1, SYCL_DEQUANTIZE_BLOCK_SIZE)),
+            [=](sycl::nd_item<3> item_ct1) {
+                convert_unary<src_t>(vx, y, k, item_ct1);
+            });
+    }
+}
+
+to_fp16_sycl_t ggml_get_to_fp16_sycl(ggml_type type) {
+    switch (type) {
+        case GGML_TYPE_Q4_0:
+            return dequantize_block_sycl<QK4_0, QR4_0, dequantize_q4_0>;
+        case GGML_TYPE_Q4_1:
+            return dequantize_block_sycl<QK4_1, QR4_1, dequantize_q4_1>;
+        case GGML_TYPE_Q5_0:
+            return dequantize_block_sycl<QK5_0, QR5_0, dequantize_q5_0>;
+        case GGML_TYPE_Q5_1:
+            return dequantize_block_sycl<QK5_1, QR5_1, dequantize_q5_1>;
+        case GGML_TYPE_Q8_0:
+            return dequantize_block_sycl<QK8_0, QR8_0, dequantize_q8_0>;
+        case GGML_TYPE_Q2_K:
+            return dequantize_row_q2_K_sycl;
+        case GGML_TYPE_Q3_K:
+            return dequantize_row_q3_K_sycl;
+        case GGML_TYPE_Q4_K:
+            return dequantize_row_q4_K_sycl;
+        case GGML_TYPE_Q5_K:
+            return dequantize_row_q5_K_sycl;
+        case GGML_TYPE_Q6_K:
+            return dequantize_row_q6_K_sycl;
+        case GGML_TYPE_IQ1_S:
+            return dequantize_row_iq1_s_sycl;
+        case GGML_TYPE_IQ1_M:
+            return dequantize_row_iq1_m_sycl;
+        case GGML_TYPE_IQ2_XXS:
+            return dequantize_row_iq2_xxs_sycl;
+        case GGML_TYPE_IQ2_XS:
+            return dequantize_row_iq2_xs_sycl;
+        case GGML_TYPE_IQ2_S:
+            return dequantize_row_iq2_s_sycl;
+        case GGML_TYPE_IQ3_XXS:
+            return dequantize_row_iq3_xxs_sycl;
+        case GGML_TYPE_IQ3_S:
+            return dequantize_row_iq3_s_sycl;
+        case GGML_TYPE_IQ4_XS:
+            return dequantize_row_iq4_xs_sycl;
+        case GGML_TYPE_IQ4_NL:
+            return dequantize_row_iq4_nl_sycl;
+        case GGML_TYPE_F32:
+            return convert_unary_sycl<float>;
+        default:
+            return nullptr;
+    }
+}
+
+to_fp32_sycl_t ggml_get_to_fp32_sycl(ggml_type type) {
+    switch (type) {
+        case GGML_TYPE_Q4_0:
+            return dequantize_row_q4_0_sycl;
+        case GGML_TYPE_Q4_1:
+            return dequantize_row_q4_1_sycl;
+        case GGML_TYPE_Q5_0:
+            return dequantize_block_sycl<QK5_0, QR5_0, dequantize_q5_0>;
+        case GGML_TYPE_Q5_1:
+            return dequantize_block_sycl<QK5_1, QR5_1, dequantize_q5_1>;
+        case GGML_TYPE_Q8_0:
+            return dequantize_block_sycl<QK8_0, QR8_0, dequantize_q8_0>;
+        case GGML_TYPE_Q2_K:
+            return dequantize_row_q2_K_sycl;
+        case GGML_TYPE_Q3_K:
+            return dequantize_row_q3_K_sycl;
+        case GGML_TYPE_Q4_K:
+            return dequantize_row_q4_K_sycl;
+        case GGML_TYPE_Q5_K:
+            return dequantize_row_q5_K_sycl;
+        case GGML_TYPE_Q6_K:
+            return dequantize_row_q6_K_sycl;
+        case GGML_TYPE_IQ1_S:
+            return dequantize_row_iq1_s_sycl;
+        case GGML_TYPE_IQ1_M:
+            return dequantize_row_iq1_m_sycl;
+        case GGML_TYPE_IQ2_XXS:
+            return dequantize_row_iq2_xxs_sycl;
+        case GGML_TYPE_IQ2_XS:
+            return dequantize_row_iq2_xs_sycl;
+        case GGML_TYPE_IQ2_S:
+            return dequantize_row_iq2_s_sycl;
+        case GGML_TYPE_IQ3_XXS:
+            return dequantize_row_iq3_xxs_sycl;
+        case GGML_TYPE_IQ3_S:
+            return dequantize_row_iq3_s_sycl;
+        case GGML_TYPE_IQ4_XS:
+            return dequantize_row_iq4_xs_sycl;
+        case GGML_TYPE_IQ4_NL:
+            return dequantize_row_iq4_nl_sycl;
+        case GGML_TYPE_F16:
+            return convert_unary_sycl<sycl::half>;
+        default:
+            return nullptr;
+    }
+}
diff --git a/ggml/src/ggml-sycl/convert.hpp b/ggml/src/ggml-sycl/convert.hpp
new file mode 100644 (file)
index 0000000..b1f10d6
--- /dev/null
@@ -0,0 +1,27 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#ifndef GGML_SYCL_CONVERT_HPP
+#define GGML_SYCL_CONVERT_HPP
+
+#include "common.hpp"
+
+template <typename T>
+using to_t_sycl_t = void (*)(const void *__restrict__ x, T *__restrict__ y,
+                             int k, dpct::queue_ptr stream);
+typedef to_t_sycl_t<float> to_fp32_sycl_t;
+typedef to_t_sycl_t<sycl::half> to_fp16_sycl_t;
+
+to_fp16_sycl_t ggml_get_to_fp16_sycl(ggml_type type);
+to_fp32_sycl_t ggml_get_to_fp32_sycl(ggml_type type);
+
+#endif // GGML_SYCL_CONVERT_HPP
diff --git a/ggml/src/ggml-sycl/dequantize.hpp b/ggml/src/ggml-sycl/dequantize.hpp
new file mode 100644 (file)
index 0000000..b6080d8
--- /dev/null
@@ -0,0 +1,690 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#ifndef GGML_SYCL_DEQUANTIZE_HPP
+#define GGML_SYCL_DEQUANTIZE_HPP
+
+#include "common.hpp"
+
+typedef void (*dequantize_kernel_t)(const void * vx, const int ib, const int iqs, dfloat2 & v);
+
+static __dpct_inline__ void dequantize_q4_0(const void *vx, const int ib,
+                                            const int iqs, dfloat2 &v) {
+    const block_q4_0 * x = (const block_q4_0 *) vx;
+
+    const dfloat d = x[ib].d;
+
+    const int vui = x[ib].qs[iqs];
+
+    v.x() = vui & 0xF;
+    v.y() = vui >> 4;
+
+#ifdef GGML_SYCL_F16
+    // v = v - {8.0f, 8.0f};
+    // v = v * {d, d};
+    v.s0() = (v.s0() - 8.0f) * d;
+    v.s1() = (v.s1() - 8.0f) * d;
+
+#else
+    v.x() = (v.x() - 8.0f) * d;
+    v.y() = (v.y() - 8.0f) * d;
+#endif // GGML_SYCL_F16
+}
+
+static __dpct_inline__ void dequantize_q4_1(const void *vx, const int ib,
+                                            const int iqs, dfloat2 &v) {
+    const block_q4_1 * x = (const block_q4_1 *) vx;
+
+    const dfloat d = x[ib].dm[0];
+    const dfloat m = x[ib].dm[1];
+
+    const int vui = x[ib].qs[iqs];
+
+    v.x() = vui & 0xF;
+    v.y() = vui >> 4;
+
+#ifdef GGML_SYCL_F16
+    // v = v * {d, d};
+    // v = v + {m, m};
+    v.s0() = (v.s0() * d) + m;
+    v.s1() = (v.s1() * d) + m;
+
+#else
+    v.x() = (v.x() * d) + m;
+    v.y() = (v.y() * d) + m;
+#endif // GGML_SYCL_F16
+}
+
+static __dpct_inline__ void dequantize_q5_0(const void *vx, const int ib,
+                                            const int iqs, dfloat2 &v) {
+    const block_q5_0 * x = (const block_q5_0 *) vx;
+
+    const dfloat d = x[ib].d;
+
+    uint32_t qh;
+    memcpy(&qh, x[ib].qh, sizeof(qh));
+
+    const int xh_0 = ((qh >> (iqs +  0)) << 4) & 0x10;
+    const int xh_1 = ((qh >> (iqs + 12))     ) & 0x10;
+
+    v.x() = ((x[ib].qs[iqs] & 0xf) | xh_0);
+    v.y() = ((x[ib].qs[iqs] >> 4) | xh_1);
+
+#ifdef GGML_SYCL_F16
+    // v = v - {16.0f, 16.0f};
+    // v = v * {d, d};
+    v.s0() = (v.s0() - 16.0f) * d;
+    v.s1() = (v.s1() - 16.0f) * d;
+
+#else
+    v.x() = (v.x() - 16.0f) * d;
+    v.y() = (v.y() - 16.0f) * d;
+#endif // GGML_SYCL_F16
+}
+
+static __dpct_inline__ void dequantize_q5_1(const void *vx, const int ib,
+                                            const int iqs, dfloat2 &v) {
+    const block_q5_1 * x = (const block_q5_1 *) vx;
+
+    const dfloat d = x[ib].dm[0];
+    const dfloat m = x[ib].dm[1];
+
+    uint32_t qh;
+    memcpy(&qh, x[ib].qh, sizeof(qh));
+
+    const int xh_0 = ((qh >> (iqs +  0)) << 4) & 0x10;
+    const int xh_1 = ((qh >> (iqs + 12))     ) & 0x10;
+
+    v.x() = ((x[ib].qs[iqs] & 0xf) | xh_0);
+    v.y() = ((x[ib].qs[iqs] >> 4) | xh_1);
+
+#ifdef GGML_SYCL_F16
+    // v = v * {d, d};
+    // v = v + {m, m};
+    v.s0() = (v.s0() * d) + m;
+    v.s1() = (v.s1() * d) + m;
+#else
+    v.x() = (v.x() * d) + m;
+    v.y() = (v.y() * d) + m;
+#endif // GGML_SYCL_F16
+}
+
+static __dpct_inline__ void dequantize_q8_0(const void *vx, const int ib,
+                                            const int iqs, dfloat2 &v) {
+    const block_q8_0 * x = (const block_q8_0 *) vx;
+
+    const dfloat d = x[ib].d;
+
+    v.x() = x[ib].qs[iqs + 0];
+    v.y() = x[ib].qs[iqs + 1];
+
+#ifdef GGML_SYCL_F16
+    // v = v * {d, d};
+    v.s0() *= d;
+    v.s1() *= d;
+#else
+    v.x() *= d;
+    v.y() *= d;
+#endif // GGML_SYCL_F16
+}
+
+template<typename dst_t>
+static void dequantize_block_q4_0(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32,
+                                  const sycl::nd_item<3> &item_ct1) {
+
+    const int i = item_ct1.get_group(2);
+
+    // assume 32 threads
+    const int tid = item_ct1.get_local_id(2);
+    const int il  = tid/8;
+    const int ir  = tid%8;
+    const int ib = 8*i + ir;
+    if (ib >= nb32) {
+        return;
+    }
+
+    dst_t * y = yy + 256*i + 32*ir + 4*il;
+
+    const block_q4_0 * x = (const block_q4_0 *)vx + ib;
+    const float d = sycl::vec<sycl::half, 1>(x->d)
+                        .convert<float, sycl::rounding_mode::automatic>()[0];
+    const float dm = -8*d;
+
+    const uint8_t * q = x->qs + 4*il;
+
+    for (int l = 0; l < 4; ++l) {
+        y[l+ 0] = d * (q[l] & 0xF) + dm;
+        y[l+16] = d * (q[l] >>  4) + dm;
+    }
+}
+
+template<typename dst_t>
+static void dequantize_block_q4_1(const void * __restrict__ vx, dst_t * __restrict__ yy, int nb32,
+                                  const sycl::nd_item<3> &item_ct1) {
+
+    const int i = item_ct1.get_group(2);
+
+    // assume 32 threads
+    const int tid = item_ct1.get_local_id(2);
+    const int il  = tid/8;
+    const int ir  = tid%8;
+    const int ib = 8*i + ir;
+    if (ib >= nb32) {
+        return;
+    }
+
+    dst_t * y = yy + 256*i + 32*ir + 4*il;
+
+    const block_q4_1 * x = (const block_q4_1 *)vx + ib;
+    const sycl::float2 d =
+        x->dm.convert<float, sycl::rounding_mode::automatic>();
+
+    const uint8_t * q = x->qs + 4*il;
+
+    for (int l = 0; l < 4; ++l) {
+        y[l + 0] = d.x() * (q[l] & 0xF) + d.y();
+        y[l + 16] = d.x() * (q[l] >> 4) + d.y();
+    }
+}
+
+
+//================================== k-quants
+
+template<typename dst_t>
+static void dequantize_block_q2_K(const void * __restrict__ vx, dst_t * __restrict__ yy,
+                                  const sycl::nd_item<3> &item_ct1) {
+
+    const int i = item_ct1.get_group(2);
+    const block_q2_K * x = (const block_q2_K *) vx;
+
+    const int tid = item_ct1.get_local_id(2);
+#if QK_K == 256
+    const int n   = tid/32;
+    const int l   = tid - 32*n;
+    const int is  = 8*n + l/16;
+
+    const uint8_t q = x[i].qs[32*n + l];
+    dst_t * y = yy + i*QK_K + 128*n;
+
+    float dall = x[i].dm[0];
+    float dmin = x[i].dm[1];
+    y[l+ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4);
+    y[l+32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 2) & 3) - dmin * (x[i].scales[is+2] >> 4);
+    y[l+64] = dall * (x[i].scales[is+4] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+4] >> 4);
+    y[l+96] = dall * (x[i].scales[is+6] & 0xF) * ((q >> 6) & 3) - dmin * (x[i].scales[is+6] >> 4);
+#else
+    const int is = tid/16;  // 0 or 1
+    const int il = tid%16;  // 0...15
+    const uint8_t q = x[i].qs[il] >> (2*is);
+    dst_t * y = yy + i*QK_K + 16*is + il;
+
+    float dall = x[i].dm[0];
+    float dmin = x[i].dm[1];
+    y[ 0] = dall * (x[i].scales[is+0] & 0xF) * ((q >> 0) & 3) - dmin * (x[i].scales[is+0] >> 4);
+    y[32] = dall * (x[i].scales[is+2] & 0xF) * ((q >> 4) & 3) - dmin * (x[i].scales[is+2] >> 4);
+#endif
+
+}
+
+template<typename dst_t>
+static void dequantize_block_q3_K(const void * __restrict__ vx, dst_t * __restrict__ yy,
+                                  const sycl::nd_item<3> &item_ct1) {
+
+    const int i = item_ct1.get_group(2);
+    const block_q3_K * x = (const block_q3_K *) vx;
+
+#if QK_K == 256
+    const int r = item_ct1.get_local_id(2) / 4;
+    const int tid = r/2;
+    const int is0 = r%2;
+    const int l0 = 16 * is0 + 4 * (item_ct1.get_local_id(2) % 4);
+    const int n = tid / 4;
+    const int j = tid - 4*n;
+
+    uint8_t m = 1 << (4*n + j);
+    int is = 8*n + 2*j + is0;
+    int shift = 2*j;
+
+    int8_t us = is <  4 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+8] >> 0) & 3) << 4) :
+                is <  8 ? (x[i].scales[is-0] & 0xF) | (((x[i].scales[is+4] >> 2) & 3) << 4) :
+                is < 12 ? (x[i].scales[is-8] >>  4) | (((x[i].scales[is+0] >> 4) & 3) << 4) :
+                          (x[i].scales[is-8] >>  4) | (((x[i].scales[is-4] >> 6) & 3) << 4);
+    float d_all = x[i].d;
+    float dl = d_all * (us - 32);
+
+    dst_t * y = yy + i*QK_K + 128*n + 32*j;
+    const uint8_t * q = x[i].qs + 32*n;
+    const uint8_t * hm = x[i].hmask;
+
+    for (int l = l0; l < l0+4; ++l) y[l] = dl * ((int8_t)((q[l] >> shift) & 3) - ((hm[l] & m) ? 0 : 4));
+#else
+    const int tid = item_ct1.get_local_id(2);
+    const int is  = tid/16;  // 0 or 1
+    const int il  = tid%16;  // 0...15
+    const int im  = il/8;    // 0...1
+    const int in  = il%8;    // 0...7
+
+    dst_t * y = yy + i*QK_K + 16*is + il;
+
+    const uint8_t q = x[i].qs[il] >> (2*is);
+    const uint8_t h = x[i].hmask[in] >> (2*is + im);
+    const float   d = (float)x[i].d;
+
+    if (is == 0) {
+        y[ 0] = d * ((x[i].scales[0] & 0xF) - 8) * ((int8_t)((q >> 0) & 3) - ((h >> 0) & 1 ? 0 : 4));
+        y[32] = d * ((x[i].scales[1] & 0xF) - 8) * ((int8_t)((q >> 4) & 3) - ((h >> 4) & 1 ? 0 : 4));
+    } else {
+        y[ 0] = d * ((x[i].scales[0] >>  4) - 8) * ((int8_t)((q >> 0) & 3) - ((h >> 0) & 1 ? 0 : 4));
+        y[32] = d * ((x[i].scales[1] >>  4) - 8) * ((int8_t)((q >> 4) & 3) - ((h >> 4) & 1 ? 0 : 4));
+    }
+#endif
+
+}
+
+#if QK_K == 256
+static inline void get_scale_min_k4(int j, const uint8_t * q, uint8_t & d, uint8_t & m) {
+    if (j < 4) {
+        d = q[j] & 63; m = q[j + 4] & 63;
+    } else {
+        d = (q[j+4] & 0xF) | ((q[j-4] >> 6) << 4);
+        m = (q[j+4] >>  4) | ((q[j-0] >> 6) << 4);
+    }
+}
+#endif
+
+template<typename dst_t>
+static void dequantize_block_q4_K(const void * __restrict__ vx, dst_t * __restrict__ yy,
+                                  const sycl::nd_item<3> &item_ct1) {
+    const block_q4_K * x = (const block_q4_K *) vx;
+
+    const int i = item_ct1.get_group(2);
+
+#if QK_K == 256
+    // assume 32 threads
+    const int tid = item_ct1.get_local_id(2);
+    const int il  = tid/8;
+    const int ir  = tid%8;
+    const int is  = 2*il;
+    const int n   = 4;
+
+    dst_t * y = yy + i*QK_K + 64*il + n*ir;
+
+    const float dall = x[i].dm[0];
+    const float dmin = x[i].dm[1];
+
+    const uint8_t * q = x[i].qs + 32*il + n*ir;
+
+    uint8_t sc, m;
+    get_scale_min_k4(is + 0, x[i].scales, sc, m);
+    const float d1 = dall * sc; const float m1 = dmin * m;
+    get_scale_min_k4(is + 1, x[i].scales, sc, m);
+    const float d2 = dall * sc; const float m2 = dmin * m;
+    for (int l = 0; l < n; ++l) {
+        y[l + 0] = d1 * (q[l] & 0xF) - m1;
+        y[l +32] = d2 * (q[l] >>  4) - m2;
+    }
+#else
+    const int tid = item_ct1.get_local_id(2);
+    const uint8_t * q = x[i].qs;
+    dst_t * y = yy + i*QK_K;
+    const float d = (float)x[i].dm[0];
+    const float m = (float)x[i].dm[1];
+    y[tid+ 0] = d * (x[i].scales[0] & 0xF) * (q[tid] & 0xF) - m * (x[i].scales[0] >> 4);
+    y[tid+32] = d * (x[i].scales[1] & 0xF) * (q[tid] >>  4) - m * (x[i].scales[1] >> 4);
+#endif
+}
+
+template<typename dst_t>
+static void dequantize_block_q5_K(const void * __restrict__ vx, dst_t * __restrict__ yy,
+                                  const sycl::nd_item<3> &item_ct1) {
+    const block_q5_K * x = (const block_q5_K *) vx;
+
+    const int i = item_ct1.get_group(2);
+
+#if QK_K == 256
+    // assume 64 threads - this is very slightly better than the one below
+    const int tid = item_ct1.get_local_id(2);
+    const int il  = tid/16;   // il is in 0...3
+    const int ir  = tid%16;   // ir is in 0...15
+    const int is  = 2*il;     // is is in 0...6
+
+    dst_t * y = yy + i*QK_K + 64*il + 2*ir;
+
+    const float dall = x[i].dm[0];
+    const float dmin = x[i].dm[1];
+
+    const uint8_t * ql = x[i].qs + 32*il + 2*ir;
+    const uint8_t * qh = x[i].qh + 2*ir;
+
+    uint8_t sc, m;
+    get_scale_min_k4(is + 0, x[i].scales, sc, m);
+    const float d1 = dall * sc; const float m1 = dmin * m;
+    get_scale_min_k4(is + 1, x[i].scales, sc, m);
+    const float d2 = dall * sc; const float m2 = dmin * m;
+
+    uint8_t   hm  = 1 << (2*il);
+    y[ 0] = d1 * ((ql[ 0] & 0xF) + (qh[ 0] & hm ? 16 : 0)) - m1;
+    y[ 1] = d1 * ((ql[ 1] & 0xF) + (qh[ 1] & hm ? 16 : 0)) - m1;
+    hm <<= 1;
+    y[32] = d2 * ((ql[ 0] >>  4) + (qh[ 0] & hm ? 16 : 0)) - m2;
+    y[33] = d2 * ((ql[ 1] >>  4) + (qh[ 1] & hm ? 16 : 0)) - m2;
+#else
+    const int tid = item_ct1.get_local_id(2);
+    const uint8_t q = x[i].qs[tid];
+    const int im = tid/8;  // 0...3
+    const int in = tid%8;  // 0...7
+    const int is = tid/16; // 0 or 1
+    const uint8_t h = x[i].qh[in] >> im;
+    const float d = x[i].d;
+    dst_t * y = yy + i*QK_K + tid;
+    y[ 0] = d * x[i].scales[is+0] * ((q & 0xF) - ((h >> 0) & 1 ? 0 : 16));
+    y[32] = d * x[i].scales[is+2] * ((q >>  4) - ((h >> 4) & 1 ? 0 : 16));
+#endif
+}
+
+template<typename dst_t>
+static void dequantize_block_q6_K(const void * __restrict__ vx, dst_t * __restrict__ yy,
+                                  const sycl::nd_item<3> &item_ct1) {
+    const block_q6_K * x = (const block_q6_K *) vx;
+
+    const int i = item_ct1.get_group(2);
+#if QK_K == 256
+
+    // assume 64 threads - this is very slightly better than the one below
+    const int tid = item_ct1.get_local_id(2);
+    const int ip  = tid/32;   // ip is 0 or 1
+    const int il  = tid - 32*ip; // 0...32
+    const int is  = 8*ip + il/16;
+
+    dst_t * y = yy + i*QK_K + 128*ip + il;
+
+    const float d = x[i].d;
+
+    const uint8_t * ql = x[i].ql + 64*ip + il;
+    const uint8_t   qh = x[i].qh[32*ip + il];
+    const int8_t  * sc = x[i].scales + is;
+
+    y[ 0] = d * sc[0] * ((int8_t)((ql[ 0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32);
+    y[32] = d * sc[2] * ((int8_t)((ql[32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32);
+    y[64] = d * sc[4] * ((int8_t)((ql[ 0]  >> 4) | (((qh >> 4) & 3) << 4)) - 32);
+    y[96] = d * sc[6] * ((int8_t)((ql[32]  >> 4) | (((qh >> 6) & 3) << 4)) - 32);
+#else
+
+    // assume 32 threads
+    const int tid = item_ct1.get_local_id(2);
+    const int ip  = tid/16;         // 0 or 1
+    const int il  = tid - 16*ip;    // 0...15
+
+    dst_t * y = yy + i*QK_K + 16*ip + il;
+
+    const float d = x[i].d;
+
+    const uint8_t   ql = x[i].ql[16*ip + il];
+    const uint8_t   qh = x[i].qh[il] >> (2*ip);
+    const int8_t  * sc = x[i].scales;
+
+    y[ 0] = d * sc[ip+0] * ((int8_t)((ql & 0xF) | (((qh >> 0) & 3) << 4)) - 32);
+    y[32] = d * sc[ip+2] * ((int8_t)((ql  >> 4) | (((qh >> 4) & 3) << 4)) - 32);
+#endif
+}
+
+template<typename dst_t>
+static void dequantize_block_iq2_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy,
+                                     const sycl::nd_item<3> &item_ct1,
+                                     const uint64_t *iq2xxs_grid_ptr,
+                                     const uint8_t *ksigns_iq2xs_ptr,
+                                     const uint8_t *kmask_iq2xs_ptr) {
+
+    const int i = item_ct1.get_group(2);
+    const block_iq2_xxs * x = (const block_iq2_xxs  *) vx;
+
+    const int tid = item_ct1.get_local_id(2);
+#if QK_K == 256
+    const int il = tid/8; // 0...3
+    const int ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint16_t * q2 = x[i].qs + 4*ib;
+    const uint8_t  * aux8 = (const uint8_t *)q2;
+    const uint8_t  * grid = (const uint8_t *)(iq2xxs_grid_ptr + aux8[il]);
+    const uint32_t aux32 = q2[2] | (q2[3] << 16);
+    const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.25f;
+    const uint8_t signs = ksigns_iq2xs_ptr[(aux32 >> 7*il) & 127];
+    for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs_ptr[j] ? -1.f : 1.f);
+#else
+    assert(false);
+#endif
+
+}
+
+template<typename dst_t>
+static void dequantize_block_iq2_xs(const void * __restrict__ vx, dst_t * __restrict__ yy,
+                                    const sycl::nd_item<3> &item_ct1,
+                                    const uint64_t *iq2xs_grid,
+                                    const uint8_t *ksigns_iq2xs,
+                                    const uint8_t *kmask_iq2xs) {
+
+    const int i = item_ct1.get_group(2);
+    const block_iq2_xs * x = (const block_iq2_xs *) vx;
+
+    const int tid = item_ct1.get_local_id(2);
+#if QK_K == 256
+    const int il = tid/8; // 0...3
+    const int ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint16_t * q2 = x[i].qs + 4*ib;
+    const uint8_t  * grid = (const uint8_t *)(iq2xs_grid + (q2[il] & 511));
+    const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f;
+    const uint8_t signs = ksigns_iq2xs[q2[il] >> 9];
+    for (int j = 0; j < 8; ++j) y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
+#else
+    assert(false);
+#endif
+
+}
+
+template <typename dst_t>
+__dpct_inline__ static void
+dequantize_block_iq2_s(const void *__restrict__ vx, dst_t *__restrict__ yy,
+                       const sycl::nd_item<3> &item_ct1) {
+
+    const int i = item_ct1.get_group(2);
+    const block_iq2_s * x = (const block_iq2_s *) vx;
+
+    const int tid = item_ct1.get_local_id(2);
+#if QK_K == 256
+    const int il = tid/8; // 0...3
+    const int ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint8_t * grid = (const uint8_t *)(iq2s_grid + (x[i].qs[4*ib+il] | ((x[i].qh[ib] << (8-2*il)) & 0x300)));
+    const float d = (float)x[i].d * (0.5f + ((x[i].scales[ib] >> 4*(il/2)) & 0xf)) * 0.25f;
+    const uint8_t signs = x[i].qs[QK_K/8+4*ib+il];
+#pragma unroll
+    for (int j = 0; j < 8; ++j)
+        y[j] = d * grid[j] * (signs & kmask_iq2xs[j] ? -1.f : 1.f);
+#else
+    assert(false);
+
+#endif
+
+}
+
+template<typename dst_t>
+static void dequantize_block_iq3_xxs(const void * __restrict__ vx, dst_t * __restrict__ yy,
+                                     const sycl::nd_item<3> &item_ct1,
+                                     const uint32_t *iq3xxs_grid,
+                                     const uint8_t *ksigns_iq2xs,
+                                     const uint8_t *kmask_iq2xs) {
+
+    const int i = item_ct1.get_group(2);
+    const block_iq3_xxs * x = (const block_iq3_xxs  *) vx;
+
+    const int tid = item_ct1.get_local_id(2);
+#if QK_K == 256
+    const int il = tid/8; // 0...3
+    const int ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint8_t  * q3 = x[i].qs + 8*ib;
+    const uint16_t * gas = (const uint16_t *)(x[i].qs + QK_K/4) + 2*ib;
+    const uint8_t  * grid1 = (const uint8_t *)(iq3xxs_grid + q3[2*il+0]);
+    const uint8_t  * grid2 = (const uint8_t *)(iq3xxs_grid + q3[2*il+1]);
+    const uint32_t aux32 = gas[0] | (gas[1] << 16);
+    const float d = (float)x[i].d * (0.5f + (aux32 >> 28)) * 0.5f;
+    const uint8_t signs = ksigns_iq2xs[(aux32 >> 7*il) & 127];
+    for (int j = 0; j < 4; ++j) {
+        y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
+        y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
+    }
+#else
+    assert(false);
+#endif
+
+}
+
+template <typename dst_t>
+__dpct_inline__ static void
+dequantize_block_iq3_s(const void *__restrict__ vx, dst_t *__restrict__ yy,
+                       const sycl::nd_item<3> &item_ct1,
+                       const uint8_t *kmask_iq2xs, const uint32_t *iq3s_grid) {
+
+    const int i = item_ct1.get_group(2);
+    const block_iq3_s * x = (const block_iq3_s *) vx;
+
+    const int tid = item_ct1.get_local_id(2);
+#if QK_K == 256
+    const int il = tid/8; // 0...3
+    const int ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint8_t * qs = x[i].qs + 8*ib;
+    const uint8_t * grid1 = (const uint8_t *)(iq3s_grid + (qs[2*il+0] | ((x[i].qh[ib] << (8-2*il)) & 256)));
+    const uint8_t * grid2 = (const uint8_t *)(iq3s_grid + (qs[2*il+1] | ((x[i].qh[ib] << (7-2*il)) & 256)));
+    const float d = (float)x[i].d * (1 + 2*((x[i].scales[ib/2] >> 4*(ib%2)) & 0xf));
+    const uint8_t signs = x[i].signs[4*ib + il];
+#pragma unroll
+    for (int j = 0; j < 4; ++j) {
+        y[j+0] = d * grid1[j] * (signs & kmask_iq2xs[j+0] ? -1.f : 1.f);
+        y[j+4] = d * grid2[j] * (signs & kmask_iq2xs[j+4] ? -1.f : 1.f);
+    }
+#else
+    assert(false);
+#endif
+
+}
+
+template <typename dst_t>
+__dpct_inline__ static void
+dequantize_block_iq1_s(const void *__restrict__ vx, dst_t *__restrict__ yy,
+                       const sycl::nd_item<3> &item_ct1,
+                       const uint32_t *iq1s_grid_gpu) {
+
+    const int i = item_ct1.get_group(2);
+    const block_iq1_s * x = (const block_iq1_s  *) vx;
+
+    const int tid = item_ct1.get_local_id(2);
+#if QK_K == 256
+    const int il = tid/8; // 0...3
+    const int ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const float delta = x[i].qh[ib] & 0x8000 ? -1 - IQ1S_DELTA : -1 + IQ1S_DELTA;
+    const float d = (float)x[i].d * (2*((x[i].qh[ib] >> 12) & 7) + 1);
+    uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32;
+    grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[ib] >> 3*il) & 7) << 8)];
+    grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f;
+    grid32[0] &= 0x0f0f0f0f;
+#pragma unroll
+    for (int j = 0; j < 8; ++j) {
+        y[j] = d * (q[j] + delta);
+    }
+#else
+    assert(false);
+#endif
+
+}
+
+template <typename dst_t>
+__dpct_inline__ static void
+dequantize_block_iq1_m(const void *__restrict__ vx, dst_t *__restrict__ yy,
+                       const sycl::nd_item<3> &item_ct1,
+                       const uint32_t *iq1s_grid_gpu) {
+
+    const int i = item_ct1.get_group(2);
+    const block_iq1_m * x = (const block_iq1_m  *) vx;
+
+    const int tid = item_ct1.get_local_id(2);
+#if QK_K == 256
+    const int il = tid/8; // 0...3
+    const int ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 8*il;
+    const uint16_t * sc = (const uint16_t *)x[i].scales;
+    iq1m_scale_t scale;
+    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+    const int ib16 = 2*ib + il/2; // sc[ib16/4] >> 3*(ib16%4) -> sc[ib/2] >> 3*((2*ib+il/2)%4);
+    const float d = (float)scale.f16 * (2*((sc[ib16/4] >> 3*(ib16%4)) & 0x7) + 1);
+    const float delta = x[i].qh[2*ib+il/2] & (0x08 << 4*(il%2)) ? -1 - IQ1M_DELTA : -1 + IQ1M_DELTA;
+    uint32_t grid32[2]; const int8_t * q = (const int8_t *)grid32;
+    grid32[0] = iq1s_grid_gpu[x[i].qs[4*ib+il] | (((x[i].qh[2*ib+il/2] >> 4*(il%2)) & 7) << 8)];
+    grid32[1] = (grid32[0] >> 4) & 0x0f0f0f0f;
+    grid32[0] &= 0x0f0f0f0f;
+#pragma unroll
+    for (int j = 0; j < 8; ++j) {
+        y[j] = d * (q[j] + delta);
+    }
+#else
+    assert(false);
+#endif
+
+}
+
+template <typename dst_t>
+__dpct_inline__ static void
+dequantize_block_iq4_nl(const void *__restrict__ vx, dst_t *__restrict__ yy,
+                        const sycl::nd_item<3> &item_ct1) {
+
+    const int i = item_ct1.get_group(2);
+    const block_iq4_nl * x = (const block_iq4_nl *) vx + i*(QK_K/QK4_NL);
+
+    const int tid = item_ct1.get_local_id(2);
+    const int il = tid/8; // 0...3
+    const int ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 4*il;
+    const uint8_t  * q4 = x[ib].qs + 4*il;
+    const float d = (float)x[ib].d;
+#pragma unroll
+    for (int j = 0; j < 4; ++j) {
+        y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf];
+        y[j+16] = d * kvalues_iq4nl[q4[j] >>  4];
+    }
+
+}
+
+
+template <typename dst_t>
+__dpct_inline__ static void
+dequantize_block_iq4_xs(const void *__restrict__ vx, dst_t *__restrict__ yy,
+                        const sycl::nd_item<3> &item_ct1) {
+    const int i = item_ct1.get_group(2);
+    const block_iq4_xs * x = (const block_iq4_xs *)vx;
+
+    const int tid = item_ct1.get_local_id(2);
+    const int il = tid/8; // 0...3
+    const int ib = tid%8; // 0...7
+    dst_t * y = yy + i*QK_K + 32*ib + 4*il;
+    const uint8_t  * q4 = x[i].qs + 16*ib + 4*il;
+    const float d = (float)x[i].d * ((((x[i].scales_l[ib/2] >> 4*(ib%2)) & 0xf) | (((x[i].scales_h >> 2*ib) & 3) << 4)) - 32);
+#pragma unroll
+    for (int j = 0; j < 4; ++j) {
+        y[j+ 0] = d * kvalues_iq4nl[q4[j] & 0xf];
+        y[j+16] = d * kvalues_iq4nl[q4[j] >>  4];
+    }
+}
+
+
+#endif // GGML_SYCL_DEQUANTIZE_HPP
diff --git a/ggml/src/ggml-sycl/dmmv.cpp b/ggml/src/ggml-sycl/dmmv.cpp
new file mode 100644 (file)
index 0000000..3a87d3e
--- /dev/null
@@ -0,0 +1,1022 @@
+#include "convert.hpp"
+#include "dmmv.hpp"
+#include "dequantize.hpp"
+#include "presets.hpp"
+
+static void convert_f16(const void * vx, const int ib, const int iqs, dfloat2 & v){
+    const sycl::half *x = (const sycl::half *)vx;
+
+    // automatic half -> float type cast if dfloat == float
+    v.x() = x[ib + iqs + 0];
+    v.y() = x[ib + iqs + 1];
+}
+
+static void convert_f32(const void * vx, const int ib, const int iqs, dfloat2 & v){
+    const float * x = (const float *) vx;
+
+    // automatic half -> float type cast if dfloat == float
+    v.x() = x[ib + iqs + 0];
+    v.y() = x[ib + iqs + 1];
+}
+
+template <int qk, int qr, dequantize_kernel_t dequantize_kernel>
+static void dequantize_mul_mat_vec(const void * __restrict__ vx, const dfloat * __restrict__ y, float * __restrict__ dst, const int ncols, const int nrows,
+                                   const sycl::nd_item<3> &item_ct1) {
+    // qk = quantized weights per x block
+    // qr = number of quantized weights per data value in x block
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int tid = item_ct1.get_local_id(2);
+
+    const int iter_stride = 2*GGML_SYCL_DMMV_X;
+    const int vals_per_iter = iter_stride / WARP_SIZE; // num quantized vals per thread and i iter
+    const int y_offset = qr == 1 ? 1 : qk/2;
+
+// partial sum for each thread
+#ifdef GGML_SYCL_F16
+    sycl::half2 tmp = {0.0f, 0.0f}; // two sums for f16 to take advantage of half2 intrinsics
+#else
+    float tmp = 0.0f;
+#endif // GGML_SYCL_F16
+
+    for (int i = 0; i < ncols; i += iter_stride) {
+        const int col = i + vals_per_iter*tid;
+        const int ib = (row*ncols + col)/qk; // x block index
+        const int iqs = (col%qk)/qr; // x quant index
+        const int iybs = col - col%qk; // y block start index
+
+// processing >2 values per i iter is faster for fast GPUs
+#pragma unroll
+        for (int j = 0; j < vals_per_iter; j += 2) {
+            // process 2 vals per j iter
+
+            // dequantize
+            // for qr = 2 the iqs needs to increase by 1 per j iter because 2 weights per data val
+            dfloat2 v;
+            dequantize_kernel(vx, ib, iqs + j/qr, v);
+
+            // matrix multiplication
+            // for qr = 2 the y index needs to increase by 1 per j iter because of y_offset = qk/2
+#ifdef GGML_SYCL_F16
+            dfloat2 t1{y[iybs + iqs + j / qr + 0],
+                        y[iybs + iqs + j / qr + y_offset]};
+
+            tmp += v * t1;
+#else
+            tmp += v.x() * y[iybs + iqs + j / qr + 0];
+            tmp += v.y() * y[iybs + iqs + j / qr + y_offset];
+#endif // GGML_SYCL_F16
+        }
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (tid == 0) {
+#ifdef GGML_SYCL_F16
+        dst[row] = tmp.x() + tmp.y();
+#else
+        dst[row] = tmp;
+#endif // GGML_SYCL_F16
+    }
+}
+
+static void convert_mul_mat_vec_f16_sycl(const void *vx, const dfloat *y,
+                                         float *dst, const int ncols,
+                                         const int nrows,
+                                         dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+                dequantize_mul_mat_vec<1, 1, convert_f16>(vx, y, dst, ncols,
+                                                          nrows, item_ct1);
+            });
+    }
+}
+
+/*
+DPCT1110:4: The total declared local variable size in device function
+dequantize_mul_mat_vec_q2_k exceeds 128 bytes and may cause high register
+pressure. Consult with your hardware vendor to find the total register size
+available and adjust the code, or use smaller sub-group size to avoid high
+register pressure.
+*/
+static void dequantize_mul_mat_vec_q2_k(const void *__restrict__ vx,
+                                        const float *__restrict__ yy,
+                                        float *__restrict__ dst,
+                                        const int ncols, int nrows,
+                                        const sycl::nd_item<3> &item_ct1) {
+
+    static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION");
+
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+    if (row > nrows) return;
+
+    const int num_blocks_per_row = ncols / QK_K;
+    const int ib0 = row*num_blocks_per_row;
+
+    const block_q2_K * x = (const block_q2_K *)vx + ib0;
+
+    float tmp = 0; // partial sum for thread in warp
+
+#if QK_K == 256
+    const int tid =
+        item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...15
+    const int ix =
+        item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
+
+    const int step = 16/K_QUANTS_PER_ITERATION;
+
+    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
+    const int in = tid - step*im;                        // 0...15 or 0...7
+
+    const int l0 = K_QUANTS_PER_ITERATION*in;            // 0...15 or 0...14 in steps of 2
+    const int q_offset = 32*im + l0;
+    const int s_offset = 8*im;
+    const int y_offset = 128*im + l0;
+
+    uint32_t aux[4];
+    const uint8_t * d = (const uint8_t *)aux;
+    const uint8_t * m = (const uint8_t *)(aux + 2);
+
+    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+
+        const float   * y = yy + i * QK_K + y_offset;
+        const uint8_t * q = x[i].qs + q_offset;
+
+        const float dall = x[i].dm[0];
+        const float dmin = x[i].dm[1];
+
+        const uint32_t * a = (const uint32_t *)(x[i].scales + s_offset);
+        aux[0] = a[0] & 0x0f0f0f0f;
+        aux[1] = a[1] & 0x0f0f0f0f;
+        aux[2] = (a[0] >> 4) & 0x0f0f0f0f;
+        aux[3] = (a[1] >> 4) & 0x0f0f0f0f;
+
+        float sum1 = 0, sum2 = 0;
+        for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) {
+            sum1 += y[l+ 0] * d[0] * ((q[l+ 0] >> 0) & 3)
+                  + y[l+32] * d[2] * ((q[l+ 0] >> 2) & 3)
+                  + y[l+64] * d[4] * ((q[l+ 0] >> 4) & 3)
+                  + y[l+96] * d[6] * ((q[l+ 0] >> 6) & 3)
+                  + y[l+16] * d[1] * ((q[l+16] >> 0) & 3)
+                  + y[l+48] * d[3] * ((q[l+16] >> 2) & 3)
+                  + y[l+80] * d[5] * ((q[l+16] >> 4) & 3)
+                  +y[l+112] * d[7] * ((q[l+16] >> 6) & 3);
+            sum2 += y[l+ 0] * m[0] + y[l+32] * m[2] + y[l+64] * m[4] + y[ l+96] * m[6]
+                  + y[l+16] * m[1] + y[l+48] * m[3] + y[l+80] * m[5] + y[l+112] * m[7];
+
+        }
+        tmp += dall * sum1 - dmin * sum2;
+
+    }
+#else
+    const int tid = item_ct1.get_local_id(2) /
+                    (2 * K_QUANTS_PER_ITERATION); // 0...15 or 0...7
+    const int ix = item_ct1.get_local_id(2) %
+                   (2 * K_QUANTS_PER_ITERATION); // 0....1 or 0...3
+    const int offset = tid * K_QUANTS_PER_ITERATION;
+
+    uint32_t uaux[2];
+    const uint8_t * d = (const uint8_t *)uaux;
+
+
+    for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) {
+
+        const float   * y = yy + i * QK_K + offset;
+        const uint8_t * q = x[i].qs + offset;
+        const uint32_t * s = (const uint32_t *)x[i].scales;
+
+        uaux[0] = s[0] & 0x0f0f0f0f;
+        uaux[1] = (s[0] >> 4) & 0x0f0f0f0f;
+
+        const sycl::float2 dall =
+            x[i].dm.convert<float, sycl::rounding_mode::automatic>();
+
+        float sum1 = 0, sum2 = 0;
+        for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) {
+            const uint8_t ql = q[l];
+            sum1 += y[l+ 0] * d[0] * ((ql >> 0) & 3)
+                  + y[l+16] * d[1] * ((ql >> 2) & 3)
+                  + y[l+32] * d[2] * ((ql >> 4) & 3)
+                  + y[l+48] * d[3] * ((ql >> 6) & 3);
+            sum2 += y[l+0] * d[4] + y[l+16] * d[5] + y[l+32] * d[6] + y[l+48] * d[7];
+        }
+        tmp += dall.x() * sum1 - dall.y() * sum2;
+    }
+
+#endif
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+/*
+DPCT1110:5: The total declared local variable size in device function
+dequantize_mul_mat_vec_q3_k exceeds 128 bytes and may cause high register
+pressure. Consult with your hardware vendor to find the total register size
+available and adjust the code, or use smaller sub-group size to avoid high
+register pressure.
+*/
+static void dequantize_mul_mat_vec_q3_k(const void *__restrict__ vx,
+                                        const float *__restrict__ yy,
+                                        float *__restrict__ dst,
+                                        const int ncols, int nrows,
+                                        const sycl::nd_item<3> &item_ct1) {
+
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+    if (row > nrows) return;
+
+    const int num_blocks_per_row = ncols / QK_K;
+    const int ib0 = row*num_blocks_per_row;
+
+    const block_q3_K * x = (const block_q3_K *)vx + ib0;
+
+    float tmp = 0; // partial sum for thread in warp
+
+#if QK_K == 256
+
+    const uint16_t kmask1 = 0x0303;
+    const uint16_t kmask2 = 0x0f0f;
+
+    const int tid =
+        item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...16
+    const int ix =
+        item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
+
+    const int n  = K_QUANTS_PER_ITERATION;               // iterations in the inner loop
+    const int step = 16/K_QUANTS_PER_ITERATION;
+    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
+    const int in = tid - step*im;                        // 0....15 or 0...7
+
+    const uint8_t m = 1 << (4*im);
+
+    const int l0 = n*in;                                 // 0...15 or 0...14 in steps of 2
+    const int q_offset =  32*im + l0;
+    const int y_offset = 128*im + l0;
+
+    uint16_t utmp[4];
+    const int8_t * s = (const int8_t *)utmp;
+
+    const uint16_t s_shift = 4*im;
+
+    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+
+        const float   * y  = yy + i * QK_K + y_offset;
+        const uint8_t * q = x[i].qs + q_offset;
+        const uint8_t * h = x[i].hmask + l0;
+
+        const uint16_t * a = (const uint16_t *)x[i].scales;
+        utmp[0] = ((a[0] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 0)) & kmask1) << 4);
+        utmp[1] = ((a[1] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 0)) & kmask1) << 4);
+        utmp[2] = ((a[2] >> s_shift) & kmask2) | (((a[4] >> (s_shift + 2)) & kmask1) << 4);
+        utmp[3] = ((a[3] >> s_shift) & kmask2) | (((a[5] >> (s_shift + 2)) & kmask1) << 4);
+
+        const float d = x[i].d;
+
+        float sum = 0;
+        for (int l = 0; l < n; ++l) {
+            sum += y[l+ 0] * (s[0] - 32) * (((q[l] >> 0) & 3) - (h[l] & (m << 0) ? 0 : 4))
+                 + y[l+32] * (s[2] - 32) * (((q[l] >> 2) & 3) - (h[l] & (m << 1) ? 0 : 4))
+                 + y[l+64] * (s[4] - 32) * (((q[l] >> 4) & 3) - (h[l] & (m << 2) ? 0 : 4))
+                 + y[l+96] * (s[6] - 32) * (((q[l] >> 6) & 3) - (h[l] & (m << 3) ? 0 : 4));
+            sum += y[l+16] * (s[1] - 32) * (((q[l+16] >> 0) & 3) - (h[l+16] & (m << 0) ? 0 : 4))
+                 + y[l+48] * (s[3] - 32) * (((q[l+16] >> 2) & 3) - (h[l+16] & (m << 1) ? 0 : 4))
+                 + y[l+80] * (s[5] - 32) * (((q[l+16] >> 4) & 3) - (h[l+16] & (m << 2) ? 0 : 4))
+                + y[l+112] * (s[7] - 32) * (((q[l+16] >> 6) & 3) - (h[l+16] & (m << 3) ? 0 : 4));
+        }
+        tmp += d * sum;
+
+    }
+#else
+
+    const int tid = item_ct1.get_local_id(2)/(2*K_QUANTS_PER_ITERATION);  // 0...15 or 0...7
+    const int ix  = item_ct1.get_local_id(2)%(2*K_QUANTS_PER_ITERATION);  // 0....1 or 0...3
+    const int offset = tid * K_QUANTS_PER_ITERATION;         // 0...15 or 0...14
+    const int in = offset/8;                                 // 0 or 1
+    const int im = offset%8;                                 // 0...7
+
+    for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) {
+
+        const float   * y = yy + i * QK_K + offset;
+        const uint8_t * q = x[i].qs + offset;
+        const uint8_t * s = x[i].scales;
+
+        const float dall = (float)x[i].d;
+
+        float sum = 0;
+        for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) {
+            const uint8_t hl = x[i].hmask[im+l] >> in;
+            const uint8_t ql = q[l];
+            sum += y[l+ 0] * dall * ((s[0] & 0xF) - 8) * ((int8_t)((ql >> 0) & 3) - ((hl >> 0) & 1 ? 0 : 4))
+                 + y[l+16] * dall * ((s[0] >>  4) - 8) * ((int8_t)((ql >> 2) & 3) - ((hl >> 2) & 1 ? 0 : 4))
+                 + y[l+32] * dall * ((s[1] & 0xF) - 8) * ((int8_t)((ql >> 4) & 3) - ((hl >> 4) & 1 ? 0 : 4))
+                 + y[l+48] * dall * ((s[1] >>  4) - 8) * ((int8_t)((ql >> 6) & 3) - ((hl >> 6) & 1 ? 0 : 4));
+        }
+        tmp += sum;
+    }
+#endif
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+/*
+DPCT1110:6: The total declared local variable size in device function
+dequantize_mul_mat_vec_q4_k exceeds 128 bytes and may cause high register
+pressure. Consult with your hardware vendor to find the total register size
+available and adjust the code, or use smaller sub-group size to avoid high
+register pressure.
+*/
+static void dequantize_mul_mat_vec_q4_k(const void *__restrict__ vx,
+                                        const float *__restrict__ yy,
+                                        float *__restrict__ dst,
+                                        const int ncols, int nrows,
+                                        const sycl::nd_item<3> &item_ct1) {
+
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+    if (row > nrows) return;
+    const int num_blocks_per_row = ncols / QK_K;
+    const int ib0 = row*num_blocks_per_row;
+
+    const block_q4_K * x = (const block_q4_K *)vx + ib0;
+
+#if QK_K == 256
+    const uint16_t kmask1 = 0x3f3f;
+    const uint16_t kmask2 = 0x0f0f;
+    const uint16_t kmask3 = 0xc0c0;
+
+    const int tid =
+        item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...16
+    const int ix =
+        item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0,1
+
+    const int step = 8/K_QUANTS_PER_ITERATION;           // 8 or 4
+
+    const int il  = tid/step;                            // 0...3
+    const int ir  = tid - step*il;                       // 0...7 or 0...3
+    const int n   = 2 * K_QUANTS_PER_ITERATION;          // 2 or 4
+
+    const int im = il/2;  // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
+    const int in = il%2;
+
+    const int l0 = n*(2*ir + in);
+    const int q_offset = 32*im + l0;
+    const int y_offset = 64*im + l0;
+
+    uint16_t aux[4];
+    const uint8_t * sc = (const uint8_t *)aux;
+
+#if K_QUANTS_PER_ITERATION == 2
+    uint32_t q32[4];
+    const uint8_t * q4 = (const uint8_t *)q32;
+#else
+    uint16_t q16[4];
+    const uint8_t * q4 = (const uint8_t *)q16;
+#endif
+
+    float tmp = 0; // partial sum for thread in warp
+
+    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+
+        const float   * y1 = yy + i*QK_K + y_offset;
+        const float   * y2 = y1 + 128;
+
+        const float dall = x[i].dm[0];
+        const float dmin = x[i].dm[1];
+
+        const uint16_t * a = (const uint16_t *)x[i].scales;
+        aux[0] = a[im+0] & kmask1;
+        aux[1] = a[im+2] & kmask1;
+        aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
+        aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
+
+#if K_QUANTS_PER_ITERATION == 2
+        const uint32_t * q1 = (const uint32_t *)(x[i].qs + q_offset);
+        const uint32_t * q2 = q1 + 16;
+
+        q32[0] = q1[0] & 0x0f0f0f0f;
+        q32[1] = q1[0] & 0xf0f0f0f0;
+        q32[2] = q2[0] & 0x0f0f0f0f;
+        q32[3] = q2[0] & 0xf0f0f0f0;
+
+        sycl::float4 s = {0.f, 0.f, 0.f, 0.f};
+        float smin = 0;
+        for (int l = 0; l < 4; ++l) {
+            s.x() += y1[l] * q4[l + 0]; s.y() += y1[l + 32] * q4[l + 4];
+            s.z() += y2[l] * q4[l + 8]; s.w() += y2[l + 32] * q4[l + 12];
+            smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
+        }
+        tmp += dall * (s.x() * sc[0] + s.y() * sc[1] * 1.f / 16.f +
+                       s.z() * sc[4] + s.w() * sc[5] * 1.f / 16.f) -
+               dmin * smin;
+#else
+        const uint16_t * q1 = (const uint16_t *)(x[i].qs + q_offset);
+        const uint16_t * q2 = q1 + 32;
+
+        q16[0] = q1[0] & 0x0f0f;
+        q16[1] = q1[0] & 0xf0f0;
+        q16[2] = q2[0] & 0x0f0f;
+        q16[3] = q2[0] & 0xf0f0;
+
+        float4 s = {0.f, 0.f, 0.f, 0.f};
+        float smin = 0;
+        for (int l = 0; l < 2; ++l) {
+            s.x += y1[l] * q4[l+0]; s.y += y1[l+32] * q4[l+2];
+            s.z += y2[l] * q4[l+4]; s.w += y2[l+32] * q4[l+6];
+            smin += y1[l] * sc[2] + y1[l+32] * sc[3] + y2[l] * sc[6] + y2[l+32] * sc[7];
+        }
+        tmp += dall * (s.x * sc[0] + s.y * sc[1] * 1.f/16.f + s.z * sc[4] + s.w * sc[5] * 1.f/16.f) - dmin * smin;
+#endif
+
+    }
+#else
+    const int tid = item_ct1.get_local_id(2)/(2*K_QUANTS_PER_ITERATION);  // 0...15
+    const int ix  = item_ct1.get_local_id(2)%(2*K_QUANTS_PER_ITERATION);
+
+    const int step = tid * K_QUANTS_PER_ITERATION;
+
+    uint16_t aux16[2];
+    const uint8_t * s = (const uint8_t *)aux16;
+
+    float tmp = 0;
+
+    for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) {
+        const uint8_t * q = x[i].qs + step;
+        const float   * y = yy + i*QK_K + step;
+        const uint16_t * a = (const uint16_t *)x[i].scales;
+        aux16[0] = a[0] & 0x0f0f;
+        aux16[1] = (a[0] >> 4) & 0x0f0f;
+        const float d = (float)x[i].dm[0];
+        const float m = (float)x[i].dm[1];
+        float sum = 0.f;
+        for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) {
+            sum += y[j+ 0] * (d * s[0] * (q[j+ 0] & 0xF) - m * s[2])
+                 + y[j+16] * (d * s[0] * (q[j+16] & 0xF) - m * s[2])
+                 + y[j+32] * (d * s[1] * (q[j+ 0] >>  4) - m * s[3])
+                 + y[j+48] * (d * s[1] * (q[j+16] >>  4) - m * s[3]);
+        }
+        tmp += sum;
+    }
+
+#endif
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (tid == 0) {
+        dst[row] = tmp;
+    }
+}
+
+/*
+DPCT1110:7: The total declared local variable size in device function
+dequantize_mul_mat_vec_q5_k exceeds 128 bytes and may cause high register
+pressure. Consult with your hardware vendor to find the total register size
+available and adjust the code, or use smaller sub-group size to avoid high
+register pressure.
+*/
+static void dequantize_mul_mat_vec_q5_k(const void *__restrict__ vx,
+                                        const float *__restrict__ yy,
+                                        float *__restrict__ dst,
+                                        const int ncols,
+                                        const sycl::nd_item<3> &item_ct1) {
+
+    const int row = item_ct1.get_group(2);
+    const int num_blocks_per_row = ncols / QK_K;
+    const int ib0 = row*num_blocks_per_row;
+
+    const block_q5_K * x = (const block_q5_K *)vx + ib0;
+
+    float tmp = 0; // partial sum for thread in warp
+
+#if QK_K == 256
+    const uint16_t kmask1 = 0x3f3f;
+    const uint16_t kmask2 = 0x0f0f;
+    const uint16_t kmask3 = 0xc0c0;
+
+    const int tid = item_ct1.get_local_id(2) / 2; // 0...15
+    const int ix = item_ct1.get_local_id(2) % 2;
+
+    const int il  = tid/4;     // 0...3
+    const int ir  = tid - 4*il;// 0...3
+    const int n   = 2;
+
+    const int im = il/2;  // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
+    const int in = il%2;
+
+    const int l0 = n*(2*ir + in);
+    const int q_offset = 32*im + l0;
+    const int y_offset = 64*im + l0;
+
+    const uint8_t hm1  = 1 << (2*im);
+    const uint8_t hm2  = hm1 << 4;
+
+    uint16_t aux[4];
+    const uint8_t * sc = (const uint8_t *)aux;
+
+    uint16_t q16[8];
+    const uint8_t * q4 = (const uint8_t *)q16;
+
+    for (int i = ix; i < num_blocks_per_row; i += 2) {
+
+        const uint8_t * ql1 = x[i].qs + q_offset;
+        const uint8_t * qh  = x[i].qh + l0;
+        const float   * y1  = yy + i*QK_K + y_offset;
+        const float   * y2  = y1 + 128;
+
+        const float dall = x[i].dm[0];
+        const float dmin = x[i].dm[1];
+
+        const uint16_t * a = (const uint16_t *)x[i].scales;
+        aux[0] = a[im+0] & kmask1;
+        aux[1] = a[im+2] & kmask1;
+        aux[2] = ((a[im+4] >> 0) & kmask2) | ((a[im+0] & kmask3) >> 2);
+        aux[3] = ((a[im+4] >> 4) & kmask2) | ((a[im+2] & kmask3) >> 2);
+
+        sycl::float4 sum = {0.f, 0.f, 0.f, 0.f};
+        float smin = 0;
+        const uint16_t * q1 = (const uint16_t *)ql1;
+        const uint16_t * q2 = q1 + 32;
+        q16[0] = q1[0] & 0x0f0f;
+        q16[1] = q1[8] & 0x0f0f;
+        q16[2] = (q1[0] >> 4) & 0x0f0f;
+        q16[3] = (q1[8] >> 4) & 0x0f0f;
+        q16[4] = q2[0] & 0x0f0f;
+        q16[5] = q2[8] & 0x0f0f;
+        q16[6] = (q2[0] >> 4) & 0x0f0f;
+        q16[7] = (q2[8] >> 4) & 0x0f0f;
+        for (int l = 0; l < n; ++l) {
+            sum.x() +=
+                y1[l + 0] * (q4[l + 0] + (qh[l + 0] & (hm1 << 0) ? 16 : 0)) +
+                y1[l + 16] * (q4[l + 2] + (qh[l + 16] & (hm1 << 0) ? 16 : 0));
+            sum.y() +=
+                y1[l + 32] * (q4[l + 4] + (qh[l + 0] & (hm1 << 1) ? 16 : 0)) +
+                y1[l + 48] * (q4[l + 6] + (qh[l + 16] & (hm1 << 1) ? 16 : 0));
+            sum.z() +=
+                y2[l + 0] * (q4[l + 8] + (qh[l + 0] & (hm2 << 0) ? 16 : 0)) +
+                y2[l + 16] * (q4[l + 10] + (qh[l + 16] & (hm2 << 0) ? 16 : 0));
+            sum.w() +=
+                y2[l + 32] * (q4[l + 12] + (qh[l + 0] & (hm2 << 1) ? 16 : 0)) +
+                y2[l + 48] * (q4[l + 14] + (qh[l + 16] & (hm2 << 1) ? 16 : 0));
+            smin += (y1[l] + y1[l+16]) * sc[2] + (y1[l+32] + y1[l+48]) * sc[3]
+                  + (y2[l] + y2[l+16]) * sc[6] + (y2[l+32] + y2[l+48]) * sc[7];
+        }
+        tmp += dall * (sum.x() * sc[0] + sum.y() * sc[1] + sum.z() * sc[4] +
+                       sum.w() * sc[5]) -
+               dmin * smin;
+    }
+
+#else
+    const int tid = item_ct1.get_local_id(2)/(2*K_QUANTS_PER_ITERATION);  // 0...15
+    const int ix  = item_ct1.get_local_id(2)%(2*K_QUANTS_PER_ITERATION);
+    const int step = tid * K_QUANTS_PER_ITERATION;
+    const int im = step/8;
+    const int in = step%8;
+
+    for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) {
+        const uint8_t * q = x[i].qs + step;
+        const int8_t  * s = x[i].scales;
+        const float   * y = yy + i*QK_K + step;
+        const float     d = x[i].d;
+        float sum = 0.f;
+        for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) {
+            const uint8_t h = x[i].qh[in+j] >> im;
+            sum += y[j+ 0] * d * s[0] * ((q[j+ 0] & 0xF) - ((h >> 0) & 1 ? 0 : 16))
+                 + y[j+16] * d * s[1] * ((q[j+16] & 0xF) - ((h >> 2) & 1 ? 0 : 16))
+                 + y[j+32] * d * s[2] * ((q[j+ 0] >>  4) - ((h >> 4) & 1 ? 0 : 16))
+                 + y[j+48] * d * s[3] * ((q[j+16] >>  4) - ((h >> 6) & 1 ? 0 : 16));
+        }
+        tmp += sum;
+    }
+#endif
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+static void dequantize_mul_mat_vec_q6_k(const void * __restrict__ vx, const float * __restrict__ yy, float * __restrict__ dst, const int ncols, int nrows,
+                                        const sycl::nd_item<3> &item_ct1) {
+
+    static_assert(16%K_QUANTS_PER_ITERATION == 0, "16 must be divisible by K_QUANTS_PER_ITERATION");
+
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+    if (row > nrows) return;
+
+    const int num_blocks_per_row = ncols / QK_K;
+    const int ib0 = row*num_blocks_per_row;
+
+    const block_q6_K * x = (const block_q6_K *)vx + ib0;
+
+#if QK_K == 256
+
+    const int tid =
+        item_ct1.get_local_id(2) / K_QUANTS_PER_ITERATION; // 0...31 or 0...16
+    const int ix =
+        item_ct1.get_local_id(2) % K_QUANTS_PER_ITERATION; // 0 or 0, 1
+
+    const int step = 16/K_QUANTS_PER_ITERATION;          // 16 or 8
+
+    const int im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
+    const int in = tid - step*im;                        // 0...15 or 0...7
+
+#if K_QUANTS_PER_ITERATION == 1
+    const int l0 = K_QUANTS_PER_ITERATION*in;            // 0...15
+    const int is = 0;
+#else
+    const int l0 = 4 * in;                               // 0, 4, 8, ..., 28
+    const int is = in / 4;
+#endif
+    const int ql_offset = 64*im + l0;
+    const int qh_offset = 32*im + l0;
+    const int s_offset  =  8*im + is;
+    const int y_offset = 128*im + l0;
+
+    float tmp = 0; // partial sum for thread in warp
+
+    for (int i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+
+        const float   * y  = yy + i * QK_K + y_offset;
+        const uint8_t * ql = x[i].ql + ql_offset;
+        const uint8_t * qh = x[i].qh + qh_offset;
+        const int8_t  * s  = x[i].scales + s_offset;
+
+        const float d = x[i].d;
+
+#if K_QUANTS_PER_ITERATION == 1
+        float sum = y[ 0] * s[0] * d * ((int8_t)((ql[ 0] & 0xF) | ((qh[ 0] & 0x03) << 4)) - 32)
+                  + y[16] * s[1] * d * ((int8_t)((ql[16] & 0xF) | ((qh[16] & 0x03) << 4)) - 32)
+                  + y[32] * s[2] * d * ((int8_t)((ql[32] & 0xF) | ((qh[ 0] & 0x0c) << 2)) - 32)
+                  + y[48] * s[3] * d * ((int8_t)((ql[48] & 0xF) | ((qh[16] & 0x0c) << 2)) - 32)
+                  + y[64] * s[4] * d * ((int8_t)((ql[ 0]  >> 4) | ((qh[ 0] & 0x30) >> 0)) - 32)
+                  + y[80] * s[5] * d * ((int8_t)((ql[16]  >> 4) | ((qh[16] & 0x30) >> 0)) - 32)
+                  + y[96] * s[6] * d * ((int8_t)((ql[32]  >> 4) | ((qh[ 0] & 0xc0) >> 2)) - 32)
+                  +y[112] * s[7] * d * ((int8_t)((ql[48]  >> 4) | ((qh[16] & 0xc0) >> 2)) - 32);
+        tmp += sum;
+#else
+        float sum = 0;
+        for (int l = 0; l < 4; ++l) {
+            sum += y[l+ 0] * s[0] * d * ((int8_t)((ql[l+ 0] & 0xF) | (((qh[l] >> 0) & 3) << 4)) - 32)
+                 + y[l+32] * s[2] * d * ((int8_t)((ql[l+32] & 0xF) | (((qh[l] >> 2) & 3) << 4)) - 32)
+                 + y[l+64] * s[4] * d * ((int8_t)((ql[l+ 0]  >> 4) | (((qh[l] >> 4) & 3) << 4)) - 32)
+                 + y[l+96] * s[6] * d * ((int8_t)((ql[l+32]  >> 4) | (((qh[l] >> 6) & 3) << 4)) - 32);
+        }
+        tmp += sum;
+#endif
+
+    }
+
+#else
+
+    const int tid = item_ct1.get_local_id(2)/(2*K_QUANTS_PER_ITERATION);  // 0...7
+    const int ix  = item_ct1.get_local_id(2)%(2*K_QUANTS_PER_ITERATION);  // 0...3
+
+    const int step = tid * K_QUANTS_PER_ITERATION;
+
+    float tmp = 0; // partial sum for thread in warp
+
+    for (int i = ix; i < num_blocks_per_row; i += 2*K_QUANTS_PER_ITERATION) {
+
+        const float   * y  = yy + i * QK_K + step;
+        const uint8_t * ql = x[i].ql + step;
+        const uint8_t * qh = x[i].qh + step;
+        const int8_t  * s  = x[i].scales;
+
+        const float d = x[i+0].d;
+
+        float sum = 0;
+        for (int j = 0; j < K_QUANTS_PER_ITERATION; ++j) {
+            sum += y[j+ 0] * s[0] * d * ((int8_t)((ql[j+ 0] & 0xF) | ((qh[j] & 0x03) << 4)) - 32)
+                 + y[j+16] * s[1] * d * ((int8_t)((ql[j+16] & 0xF) | ((qh[j] & 0x0c) << 2)) - 32)
+                 + y[j+32] * s[2] * d * ((int8_t)((ql[j+ 0] >>  4) | ((qh[j] & 0x30) >> 0)) - 32)
+                 + y[j+48] * s[3] * d * ((int8_t)((ql[j+16] >>  4) | ((qh[j] & 0xc0) >> 2)) - 32);
+        }
+        tmp += sum;
+
+    }
+
+#endif
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (tid == 0) {
+        dst[row] = tmp;
+    }
+}
+
+
+static void dequantize_mul_mat_vec_q4_0_sycl(const void *vx, const dfloat *y,
+                                             float *dst, const int ncols,
+                                             const int nrows,
+                                             dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    // the number of rows may exceed maximum grid size in the y or z dimensions, use the x dimension instead
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+                dequantize_mul_mat_vec<QK4_0, QR4_0, dequantize_q4_0>(
+                    vx, y, dst, ncols, nrows, item_ct1);
+            });
+    }
+}
+
+static void dequantize_mul_mat_vec_q4_1_sycl(const void *vx, const dfloat *y,
+                                             float *dst, const int ncols,
+                                             const int nrows,
+                                             dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+                dequantize_mul_mat_vec<QK4_1, QR4_1, dequantize_q4_1>(
+                    vx, y, dst, ncols, nrows, item_ct1);
+            });
+    }
+}
+
+static void dequantize_mul_mat_vec_q5_0_sycl(const void *vx, const dfloat *y,
+                                             float *dst, const int ncols,
+                                             const int nrows,
+                                             dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+                dequantize_mul_mat_vec<QK5_0, QR5_0, dequantize_q5_0>(
+                    vx, y, dst, ncols, nrows, item_ct1);
+            });
+    }
+}
+
+static void dequantize_mul_mat_vec_q5_1_sycl(const void *vx, const dfloat *y,
+                                             float *dst, const int ncols,
+                                             const int nrows,
+                                             dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+                dequantize_mul_mat_vec<QK5_1, QR5_1, dequantize_q5_1>(
+                    vx, y, dst, ncols, nrows, item_ct1);
+            });
+    }
+}
+
+static void dequantize_mul_mat_vec_q8_0_sycl(const void *vx, const dfloat *y,
+                                             float *dst, const int ncols,
+                                             const int nrows,
+                                             dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % GGML_SYCL_DMMV_X == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+        dpct::has_capability_or_fail(stream->get_device(),
+                                     {sycl::aspect::fp16});
+
+        stream->parallel_for(
+            sycl::nd_range<3>(block_nums * block_dims, block_dims),
+            [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+                dequantize_mul_mat_vec<QK8_0, QR8_0, dequantize_q8_0>(
+                    vx, y, dst, ncols, nrows, item_ct1);
+            });
+    }
+}
+
+static void dequantize_mul_mat_vec_q2_K_sycl(const void *vx, const float *y,
+                                             float *dst, const int ncols,
+                                             const int nrows,
+                                             dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int ny = 2; // very slightly faster than 1 even when K_QUANTS_PER_ITERATION = 2
+    const int block_num_y = (nrows + ny - 1) / ny;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, ny, 32);
+    stream->parallel_for(
+        sycl::nd_range<3>(block_nums * block_dims, block_dims),
+        [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+            dequantize_mul_mat_vec_q2_k(vx, y, dst, ncols, nrows, item_ct1);
+        });
+}
+
+static void dequantize_mul_mat_vec_q3_K_sycl(const void *vx, const float *y,
+                                             float *dst, const int ncols,
+                                             const int nrows,
+                                             dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int ny = 2 / K_QUANTS_PER_ITERATION;
+    const int block_num_y = (nrows + ny - 1) / ny;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, ny, 32);
+    stream->parallel_for(
+        sycl::nd_range<3>(block_nums * block_dims, block_dims),
+        [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+            dequantize_mul_mat_vec_q3_k(vx, y, dst, ncols, nrows, item_ct1);
+        });
+}
+
+static void dequantize_mul_mat_vec_q4_K_sycl(const void *vx, const float *y,
+                                             float *dst, const int ncols,
+                                             const int nrows,
+                                             dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int ny = 2 / K_QUANTS_PER_ITERATION;
+    const int block_num_y = (nrows + ny - 1) / ny;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, ny, 32);
+    stream->parallel_for(
+        sycl::nd_range<3>(block_nums * block_dims, block_dims),
+        [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+            dequantize_mul_mat_vec_q4_k(vx, y, dst, ncols, nrows, item_ct1);
+        });
+}
+
+static void dequantize_mul_mat_vec_q5_K_sycl(const void *vx, const float *y,
+                                             float *dst, const int ncols,
+                                             const int nrows,
+                                             dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const sycl::range<3> block_dims(1, 1, 32);
+    stream->parallel_for(
+        sycl::nd_range<3>(sycl::range<3>(1, 1, nrows) * block_dims, block_dims),
+        [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+            dequantize_mul_mat_vec_q5_k(vx, y, dst, ncols, item_ct1);
+        });
+}
+
+static void dequantize_mul_mat_vec_q6_K_sycl(const void *vx, const float *y,
+                                             float *dst, const int ncols,
+                                             const int nrows,
+                                             dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int ny = 2 / K_QUANTS_PER_ITERATION;
+    const int block_num_y = (nrows + ny - 1) / ny;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, ny, 32);
+    stream->parallel_for(
+        sycl::nd_range<3>(block_nums * block_dims, block_dims),
+        [=](sycl::nd_item<3> item_ct1) [[intel::reqd_sub_group_size(32)]] {
+            dequantize_mul_mat_vec_q6_k(vx, y, dst, ncols, nrows, item_ct1);
+        });
+}
+
+void ggml_sycl_op_dequantize_mul_mat_vec(
+    ggml_backend_sycl_context & ctx,
+    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
+    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
+    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
+    const int64_t src1_ncols, const int64_t src1_padded_row_size,
+    const dpct::queue_ptr &stream) {
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t row_diff = row_high - row_low;
+
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    // on some GPUs it is faster to convert src1 to half and to use half precision intrinsics
+#ifdef GGML_SYCL_F16
+    ggml_sycl_pool_alloc<sycl::half> src1_dfloat_a(ctx.pool());
+    sycl::half *src1_dfloat = nullptr; // dfloat == half
+
+    bool src1_convert_f16 =
+        src0->type == GGML_TYPE_Q4_0 || src0->type == GGML_TYPE_Q4_1 ||
+        src0->type == GGML_TYPE_Q5_0 || src0->type == GGML_TYPE_Q5_1 ||
+        src0->type == GGML_TYPE_Q8_0 || src0->type == GGML_TYPE_F16;
+
+    if (src1_convert_f16) {
+        src1_dfloat = src1_dfloat_a.alloc(ne00);
+        const to_fp16_sycl_t to_fp16_sycl = ggml_get_to_fp16_sycl(src1->type);
+        GGML_ASSERT(to_fp16_sycl != nullptr);
+        to_fp16_sycl(src1_ddf_i, src1_dfloat, ne00, stream);
+    }
+#else
+    const dfloat * src1_dfloat = (const dfloat *) src1_ddf_i; // dfloat == float, no conversion
+#endif // GGML_SYCL_F16
+
+    switch (src0->type) {
+        case GGML_TYPE_Q4_0:
+            dequantize_mul_mat_vec_q4_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q4_1:
+            dequantize_mul_mat_vec_q4_1_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q5_0:
+            dequantize_mul_mat_vec_q5_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q5_1:
+            dequantize_mul_mat_vec_q5_1_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q8_0:
+            dequantize_mul_mat_vec_q8_0_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q2_K:
+            dequantize_mul_mat_vec_q2_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q3_K:
+            dequantize_mul_mat_vec_q3_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q4_K:
+            dequantize_mul_mat_vec_q4_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q5_K:
+            dequantize_mul_mat_vec_q5_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q6_K:
+            dequantize_mul_mat_vec_q6_K_sycl(src0_dd_i, src1_ddf_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_F16:
+            convert_mul_mat_vec_f16_sycl(src0_dd_i, src1_dfloat, dst_dd_i, ne00, row_diff, stream);
+            break;
+        default:
+            printf("ggml_sycl_op_dequantize_mul_mat_vec unsupported GGML_TYPE %d\n", src0->type);
+            GGML_ASSERT(false);
+            break;
+    }
+
+    (void) src1;
+    (void) dst;
+    (void) src1_ddq_i;
+    (void) src1_ncols;
+    (void) src1_padded_row_size;
+}
diff --git a/ggml/src/ggml-sycl/dmmv.hpp b/ggml/src/ggml-sycl/dmmv.hpp
new file mode 100644 (file)
index 0000000..bd83735
--- /dev/null
@@ -0,0 +1,27 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#ifndef GGML_SYCL_DMMV_HPP
+#define GGML_SYCL_DMMV_HPP
+
+#include "common.hpp"
+
+
+void ggml_sycl_op_dequantize_mul_mat_vec(
+    ggml_backend_sycl_context & ctx,
+    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
+    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
+    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
+    const int64_t src1_ncols, const int64_t src1_padded_row_size,
+    const dpct::queue_ptr &stream);
+
+#endif // GGML_SYCL_DMMV_HPP
diff --git a/ggml/src/ggml-sycl/dpct/helper.hpp b/ggml/src/ggml-sycl/dpct/helper.hpp
new file mode 100644 (file)
index 0000000..1ff2972
--- /dev/null
@@ -0,0 +1,2936 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#ifndef GGML_SYCL_DPCT_HELPER_HPP
+#define GGML_SYCL_DPCT_HELPER_HPP
+
+#include <sycl/sycl.hpp>
+#include <sycl/half_type.hpp>
+#include <oneapi/mkl.hpp>
+#include <map>
+
+#include "ggml.h"
+
+#if defined(__linux__)
+#include <sys/mman.h>
+#elif defined(_WIN64)
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
+#include <windows.h>
+#else
+#error "Only support Windows and Linux."
+#endif
+
+#if defined(__linux__)
+#include <unistd.h>
+#include <sys/syscall.h>
+#endif
+#if defined(_WIN64)
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
+#include <windows.h>
+#endif
+
+#define DPCT_COMPATIBILITY_TEMP (900)
+
+#if defined(_MSC_VER)
+#define __dpct_align__(n) __declspec(align(n))
+#define __dpct_inline__ __forceinline
+#else
+#define __dpct_align__(n) __attribute__((aligned(n)))
+#define __dpct_inline__ __inline__ __attribute__((always_inline))
+#endif
+
+#if defined(_MSC_VER)
+#define __dpct_noinline__ __declspec(noinline)
+#else
+#define __dpct_noinline__ __attribute__((noinline))
+#endif
+
+inline std::string get_device_type_name(const sycl::device &Device) {
+    auto DeviceType = Device.get_info<sycl::info::device::device_type>();
+    switch (DeviceType) {
+    case sycl::info::device_type::cpu:
+        return "cpu";
+    case sycl::info::device_type::gpu:
+        return "gpu";
+    case sycl::info::device_type::host:
+        return "host";
+    case sycl::info::device_type::accelerator:
+        return "acc";
+    default:
+        return "unknown";
+    }
+}
+
+inline std::string get_device_backend_and_type(const sycl::device &device) {
+    std::stringstream device_type;
+    sycl::backend backend = device.get_backend();
+    device_type <<  backend << ":" << get_device_type_name(device);
+    return device_type.str();
+}
+
+namespace dpct
+{
+    typedef sycl::queue *queue_ptr;
+    typedef sycl::event *event_ptr;
+    typedef char *device_ptr;
+    typedef uint8_t byte_t;
+    typedef sycl::buffer<byte_t> buffer_t;
+
+    /// SYCL default exception handler
+    inline auto exception_handler = [](sycl::exception_list exceptions)
+    {
+        for (std::exception_ptr const &e : exceptions)
+        {
+            try
+            {
+                std::rethrow_exception(e);
+            }
+            catch (sycl::exception const &e)
+            {
+                std::cerr << "Caught asynchronous SYCL exception:" << std::endl
+                          << e.what() << std::endl
+                          << "Exception caught at file:" << __FILE__
+                          << ", line:" << __LINE__ << std::endl;
+            }
+        }
+    };
+
+    enum error_code
+    {
+        success = 0,
+        default_error = 999
+    };
+
+    enum memcpy_direction
+    {
+        host_to_host,
+        host_to_device,
+        device_to_host,
+        device_to_device,
+        automatic
+    };
+
+    enum memory_region
+    {
+        global = 0, // device global memory
+        constant,   // device constant memory
+        local,      // device local memory
+        shared,     // memory which can be accessed by host and device
+    };
+
+    enum class library_data_t : unsigned char
+    {
+        real_float = 0,
+        complex_float,
+        real_double,
+        complex_double,
+        real_half,
+        complex_half,
+        real_bfloat16,
+        complex_bfloat16,
+        real_int4,
+        complex_int4,
+        real_uint4,
+        complex_uint4,
+        real_int8,
+        complex_int8,
+        real_uint8,
+        complex_uint8,
+        real_int16,
+        complex_int16,
+        real_uint16,
+        complex_uint16,
+        real_int32,
+        complex_int32,
+        real_uint32,
+        complex_uint32,
+        real_int64,
+        complex_int64,
+        real_uint64,
+        complex_uint64,
+        real_int8_4,
+        real_int8_32,
+        real_uint8_4,
+        library_data_t_size
+    };
+
+    template <typename T>
+    struct DataType
+    {
+        using T2 = T;
+    };
+    template <typename T>
+    struct DataType<sycl::vec<T, 2>>
+    {
+        using T2 = std::complex<T>;
+    };
+
+    static void destroy_event(event_ptr event)
+    {
+        delete event;
+    }
+
+    static inline unsigned int get_tid()
+    {
+#if defined(__linux__)
+        return syscall(SYS_gettid);
+#elif defined(_WIN64)
+        return GetCurrentThreadId();
+#else
+#error "Only support Windows and Linux."
+#endif
+    }
+
+    namespace detail
+    {
+        static void get_version(const sycl::device &dev, int &major, int &minor)
+        {
+            // Version string has the following format:
+            // a. OpenCL<space><major.minor><space><vendor-specific-information>
+            // b. <major.minor>
+            // c. <AmdGcnArchName> e.g gfx1030
+            std::string ver;
+            ver = dev.get_info<sycl::info::device::version>();
+            std::string::size_type i = 0;
+            while (i < ver.size()) {
+              if (isdigit(ver[i]))
+                break;
+              i++;
+            }
+            major = std::stoi(&(ver[i]));
+            while (i < ver.size()) {
+              if (ver[i] == '.')
+                break;
+              i++;
+            }
+            if (i < ver.size()) {
+              // a. and b.
+              i++;
+              minor = std::stoi(&(ver[i]));
+            } else {
+              // c.
+              minor = 0;
+            }
+        }
+
+        template <typename tag, typename T>
+        class generic_error_type
+        {
+        public:
+            generic_error_type() = default;
+            generic_error_type(T value) : value{value} {}
+            operator T() const { return value; }
+
+        private:
+            T value;
+        };
+
+    } // namespace detail
+
+    /// Pitched 2D/3D memory data.
+    class pitched_data
+    {
+    public:
+        pitched_data() : pitched_data(nullptr, 0, 0, 0) {}
+        pitched_data(void *data, size_t pitch, size_t x, size_t y)
+            : _data(data), _pitch(pitch), _x(x), _y(y) {}
+
+        void *get_data_ptr() { return _data; }
+        void set_data_ptr(void *data) { _data = data; }
+
+        size_t get_pitch() { return _pitch; }
+        void set_pitch(size_t pitch) { _pitch = pitch; }
+
+        size_t get_x() { return _x; }
+        void set_x(size_t x) { _x = x; };
+
+        size_t get_y() { return _y; }
+        void set_y(size_t y) { _y = y; }
+
+    private:
+        void *_data;
+        size_t _pitch, _x, _y;
+    };
+
+    class device_info
+    {
+    public:
+        // get interface
+        const char *get_name() const { return _name; }
+        char *get_name() { return _name; }
+        template <typename WorkItemSizesTy = sycl::range<3>,
+                  std::enable_if_t<std::is_same_v<WorkItemSizesTy, sycl::range<3>> ||
+                                       std::is_same_v<WorkItemSizesTy, int *>,
+                                   int> = 0>
+        auto get_max_work_item_sizes() const
+        {
+            if constexpr (std::is_same_v<WorkItemSizesTy, sycl::range<3>>)
+                return sycl::range<3>(_max_work_item_sizes_i[0],
+                                      _max_work_item_sizes_i[1],
+                                      _max_work_item_sizes_i[2]);
+            else
+            {
+                return _max_work_item_sizes_i;
+            }
+        }
+        template <typename WorkItemSizesTy = sycl::range<3>,
+                  std::enable_if_t<std::is_same_v<WorkItemSizesTy, sycl::range<3>> ||
+                                       std::is_same_v<WorkItemSizesTy, int *>,
+                                   int> = 0>
+        auto get_max_work_item_sizes()
+        {
+            if constexpr (std::is_same_v<WorkItemSizesTy, sycl::range<3>>)
+                return sycl::range<3>(_max_work_item_sizes_i[0],
+                                      _max_work_item_sizes_i[1],
+                                      _max_work_item_sizes_i[2]);
+            else
+            {
+                return _max_work_item_sizes_i;
+            }
+        }
+        bool get_host_unified_memory() const { return _host_unified_memory; }
+        int get_major_version() const { return _major; }
+        int get_minor_version() const { return _minor; }
+        int get_integrated() const { return _integrated; }
+        int get_max_clock_frequency() const { return _frequency; }
+        int get_max_compute_units() const { return _max_compute_units; }
+        int get_max_work_group_size() const { return _max_work_group_size; }
+        int get_max_sub_group_size() const { return _max_sub_group_size; }
+        int get_max_work_items_per_compute_unit() const
+        {
+            return _max_work_items_per_compute_unit;
+        }
+        int get_max_register_size_per_work_group() const
+        {
+            return _max_register_size_per_work_group;
+        }
+        template <typename NDRangeSizeTy = size_t *,
+                  std::enable_if_t<std::is_same_v<NDRangeSizeTy, size_t *> ||
+                                       std::is_same_v<NDRangeSizeTy, int *>,
+                                   int> = 0>
+        auto get_max_nd_range_size() const
+        {
+            if constexpr (std::is_same_v<NDRangeSizeTy, size_t *>)
+                return _max_nd_range_size;
+            else
+                return _max_nd_range_size_i;
+        }
+        template <typename NDRangeSizeTy = size_t *,
+                  std::enable_if_t<std::is_same_v<NDRangeSizeTy, size_t *> ||
+                                       std::is_same_v<NDRangeSizeTy, int *>,
+                                   int> = 0>
+        auto get_max_nd_range_size()
+        {
+            if constexpr (std::is_same_v<NDRangeSizeTy, size_t *>)
+                return _max_nd_range_size;
+            else
+                return _max_nd_range_size_i;
+        }
+        size_t get_global_mem_size() const { return _global_mem_size; }
+        size_t get_local_mem_size() const { return _local_mem_size; }
+        size_t get_max_mem_alloc_size() const { return _max_mem_alloc_size; }
+        /// Returns the maximum clock rate of device's global memory in kHz. If
+        /// compiler does not support this API then returns default value 3200000 kHz.
+        unsigned int get_memory_clock_rate() const { return _memory_clock_rate; }
+        /// Returns the maximum bus width between device and memory in bits. If
+        /// compiler does not support this API then returns default value 64 bits.
+        unsigned int get_memory_bus_width() const { return _memory_bus_width; }
+        uint32_t get_device_id() const { return _device_id; }
+        std::array<unsigned char, 16> get_uuid() const { return _uuid; }
+        /// Returns global memory cache size in bytes.
+        unsigned int get_global_mem_cache_size() const
+        {
+            return _global_mem_cache_size;
+        }
+
+        // set interface
+        void set_name(const char *name)
+        {
+            size_t length = strlen(name);
+            if (length < 256)
+            {
+                std::memcpy(_name, name, length + 1);
+            }
+            else
+            {
+                std::memcpy(_name, name, 255);
+                _name[255] = '\0';
+            }
+        }
+        void set_max_work_item_sizes(const sycl::range<3> max_work_item_sizes)
+        {
+            for (int i = 0; i < 3; ++i)
+                _max_work_item_sizes_i[i] = max_work_item_sizes[i];
+        }
+        [[deprecated]] void
+        set_max_work_item_sizes(const sycl::id<3> max_work_item_sizes)
+        {
+            for (int i = 0; i < 3; ++i)
+            {
+                _max_work_item_sizes_i[i] = max_work_item_sizes[i];
+            }
+        }
+        void set_host_unified_memory(bool host_unified_memory)
+        {
+            _host_unified_memory = host_unified_memory;
+        }
+        void set_major_version(int major) { _major = major; }
+        void set_minor_version(int minor) { _minor = minor; }
+        void set_integrated(int integrated) { _integrated = integrated; }
+        void set_max_clock_frequency(int frequency) { _frequency = frequency; }
+        void set_max_compute_units(int max_compute_units)
+        {
+            _max_compute_units = max_compute_units;
+        }
+        void set_global_mem_size(size_t global_mem_size)
+        {
+            _global_mem_size = global_mem_size;
+        }
+        void set_local_mem_size(size_t local_mem_size)
+        {
+            _local_mem_size = local_mem_size;
+        }
+        void set_max_mem_alloc_size(size_t max_mem_alloc_size)
+        {
+            _max_mem_alloc_size = max_mem_alloc_size;
+        }
+        void set_max_work_group_size(int max_work_group_size)
+        {
+            _max_work_group_size = max_work_group_size;
+        }
+        void set_max_sub_group_size(int max_sub_group_size)
+        {
+            _max_sub_group_size = max_sub_group_size;
+        }
+        void
+        set_max_work_items_per_compute_unit(int max_work_items_per_compute_unit)
+        {
+            _max_work_items_per_compute_unit = max_work_items_per_compute_unit;
+        }
+        void set_max_nd_range_size(int max_nd_range_size[])
+        {
+            for (int i = 0; i < 3; i++)
+            {
+                _max_nd_range_size[i] = max_nd_range_size[i];
+                _max_nd_range_size_i[i] = max_nd_range_size[i];
+            }
+        }
+        void set_memory_clock_rate(unsigned int memory_clock_rate)
+        {
+            _memory_clock_rate = memory_clock_rate;
+        }
+        void set_memory_bus_width(unsigned int memory_bus_width)
+        {
+            _memory_bus_width = memory_bus_width;
+        }
+        void
+        set_max_register_size_per_work_group(int max_register_size_per_work_group)
+        {
+            _max_register_size_per_work_group = max_register_size_per_work_group;
+        }
+        void set_device_id(uint32_t device_id)
+        {
+            _device_id = device_id;
+        }
+        void set_uuid(std::array<unsigned char, 16> uuid)
+        {
+            _uuid = std::move(uuid);
+        }
+        void set_global_mem_cache_size(unsigned int global_mem_cache_size)
+        {
+            _global_mem_cache_size = global_mem_cache_size;
+        }
+
+    private:
+        char _name[256];
+        int _max_work_item_sizes_i[3];
+        bool _host_unified_memory = false;
+        int _major;
+        int _minor;
+        int _integrated = 0;
+        int _frequency;
+        // Set estimated value 3200000 kHz as default value.
+        unsigned int _memory_clock_rate = 3200000;
+        // Set estimated value 64 bits as default value.
+        unsigned int _memory_bus_width = 64;
+        unsigned int _global_mem_cache_size;
+        int _max_compute_units;
+        int _max_work_group_size;
+        int _max_sub_group_size;
+        int _max_work_items_per_compute_unit;
+        int _max_register_size_per_work_group;
+        size_t _global_mem_size;
+        size_t _local_mem_size;
+        size_t _max_mem_alloc_size;
+        size_t _max_nd_range_size[3];
+        int _max_nd_range_size_i[3];
+        uint32_t _device_id;
+        std::array<unsigned char, 16> _uuid;
+    };
+
+    static int get_major_version(const sycl::device &dev)
+    {
+        int major, minor;
+        detail::get_version(dev, major, minor);
+        return major;
+    }
+
+    static int get_minor_version(const sycl::device &dev)
+    {
+        int major, minor;
+        detail::get_version(dev, major, minor);
+        return minor;
+    }
+
+    static void get_device_info(device_info &out, const sycl::device &dev)
+    {
+        device_info prop;
+        prop.set_name(dev.get_info<sycl::info::device::name>().c_str());
+
+        int major, minor;
+        detail::get_version(dev, major, minor);
+        prop.set_major_version(major);
+        prop.set_minor_version(minor);
+
+        prop.set_max_work_item_sizes(
+#if (__SYCL_COMPILER_VERSION && __SYCL_COMPILER_VERSION < 20220902)
+            // oneAPI DPC++ compiler older than 2022/09/02, where max_work_item_sizes
+            // is an enum class element
+            dev.get_info<sycl::info::device::max_work_item_sizes>());
+#else
+            // SYCL 2020-conformant code, max_work_item_sizes is a struct templated by
+            // an int
+            dev.get_info<sycl::info::device::max_work_item_sizes<3>>());
+#endif
+        prop.set_host_unified_memory(dev.has(sycl::aspect::usm_host_allocations));
+
+        prop.set_max_clock_frequency(
+            dev.get_info<sycl::info::device::max_clock_frequency>() * 1000);
+
+        prop.set_max_compute_units(
+            dev.get_info<sycl::info::device::max_compute_units>());
+        prop.set_max_work_group_size(
+            dev.get_info<sycl::info::device::max_work_group_size>());
+        prop.set_global_mem_size(dev.get_info<sycl::info::device::global_mem_size>());
+        prop.set_local_mem_size(dev.get_info<sycl::info::device::local_mem_size>());
+        prop.set_max_mem_alloc_size(dev.get_info<sycl::info::device::max_mem_alloc_size>());
+
+#if (defined(SYCL_EXT_INTEL_DEVICE_INFO) && SYCL_EXT_INTEL_DEVICE_INFO >= 6)
+        if (dev.has(sycl::aspect::ext_intel_memory_clock_rate))
+        {
+            unsigned int tmp =
+                dev.get_info<sycl::ext::intel::info::device::memory_clock_rate>();
+            if (tmp != 0)
+                prop.set_memory_clock_rate(1000 * tmp);
+        }
+        if (dev.has(sycl::aspect::ext_intel_memory_bus_width))
+        {
+            prop.set_memory_bus_width(
+                dev.get_info<sycl::ext::intel::info::device::memory_bus_width>());
+        }
+        if (dev.has(sycl::aspect::ext_intel_device_id))
+        {
+            prop.set_device_id(
+                dev.get_info<sycl::ext::intel::info::device::device_id>());
+        }
+        if (dev.has(sycl::aspect::ext_intel_device_info_uuid))
+        {
+            prop.set_uuid(dev.get_info<sycl::ext::intel::info::device::uuid>());
+        }
+#elif defined(_MSC_VER) && !defined(__clang__)
+#pragma message("get_device_info: querying memory_clock_rate and \
+        memory_bus_width are not supported by the compiler used. \
+        Use 3200000 kHz as memory_clock_rate default value. \
+        Use 64 bits as memory_bus_width default value.")
+#else
+#warning "get_device_info: querying memory_clock_rate and \
+        memory_bus_width are not supported by the compiler used. \
+        Use 3200000 kHz as memory_clock_rate default value. \
+        Use 64 bits as memory_bus_width default value."
+#endif
+
+        size_t max_sub_group_size = 1;
+        std::vector<size_t> sub_group_sizes =
+            dev.get_info<sycl::info::device::sub_group_sizes>();
+
+        for (const auto &sub_group_size : sub_group_sizes)
+        {
+            if (max_sub_group_size < sub_group_size)
+                max_sub_group_size = sub_group_size;
+        }
+
+        prop.set_max_sub_group_size(max_sub_group_size);
+
+        prop.set_max_work_items_per_compute_unit(
+            dev.get_info<sycl::info::device::max_work_group_size>());
+        int max_nd_range_size[] = {0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF};
+        prop.set_max_nd_range_size(max_nd_range_size);
+
+        // Estimates max register size per work group, feel free to update the value
+        // according to device properties.
+        prop.set_max_register_size_per_work_group(65536);
+
+        prop.set_global_mem_cache_size(
+            dev.get_info<sycl::info::device::global_mem_cache_size>());
+        out = prop;
+    }
+
+   /// dpct device extension
+    class device_ext : public sycl::device {
+      typedef std::mutex mutex_type;
+
+     public:
+      device_ext() : sycl::device() {}
+      ~device_ext() {
+        std::lock_guard<mutex_type> lock(m_mutex);
+        clear_queues();
+      }
+      device_ext(const sycl::device &base) : sycl::device(base) {
+        std::lock_guard<mutex_type> lock(m_mutex);
+        init_queues();
+      }
+
+      int is_native_atomic_supported() { return 0; }
+      int get_major_version() const { return dpct::get_major_version(*this); }
+
+      int get_minor_version() const { return dpct::get_minor_version(*this); }
+
+      int get_max_compute_units() const {
+        return get_device_info().get_max_compute_units();
+      }
+
+      /// Return the maximum clock frequency of this device in KHz.
+      int get_max_clock_frequency() const {
+        return get_device_info().get_max_clock_frequency();
+      }
+
+      int get_integrated() const { return get_device_info().get_integrated(); }
+
+      int get_max_sub_group_size() const {
+        return get_device_info().get_max_sub_group_size();
+      }
+
+      int get_max_register_size_per_work_group() const {
+        return get_device_info().get_max_register_size_per_work_group();
+      }
+
+      int get_max_work_group_size() const {
+        return get_device_info().get_max_work_group_size();
+      }
+
+      int get_mem_base_addr_align() const {
+        return get_info<sycl::info::device::mem_base_addr_align>();
+      }
+
+      size_t get_global_mem_size() const {
+        return get_device_info().get_global_mem_size();
+      }
+
+      size_t get_max_mem_alloc_size() const {
+        return get_device_info().get_max_mem_alloc_size();
+      }
+
+      /// Get the number of bytes of free and total memory on the SYCL device.
+      /// \param [out] free_memory The number of bytes of free memory on the
+      /// SYCL device. \param [out] total_memory The number of bytes of total
+      /// memory on the SYCL device.
+      void get_memory_info(size_t &free_memory, size_t &total_memory) {
+        total_memory = get_device_info().get_global_mem_size();
+        const char *warning_info =
+            "get_memory_info: [warning] ext_intel_free_memory is not "
+            "supported (export/set ZES_ENABLE_SYSMAN=1 to support), "
+            "use total memory as free memory";
+#if (defined(__SYCL_COMPILER_VERSION) && __SYCL_COMPILER_VERSION >= 20221105)
+        if (!has(sycl::aspect::ext_intel_free_memory)) {
+          std::cerr << warning_info << std::endl;
+          free_memory = total_memory;
+        } else {
+          free_memory = get_info<sycl::ext::intel::info::device::free_memory>();
+        }
+#else
+        std::cerr << warning_info << std::endl;
+        free_memory = total_memory;
+#if defined(_MSC_VER) && !defined(__clang__)
+#pragma message("Querying the number of bytes of free memory is not supported")
+#else
+#warning "Querying the number of bytes of free memory is not supported"
+#endif
+#endif
+      }
+
+      void get_device_info(device_info &out) const {
+        dpct::get_device_info(out, *this);
+      }
+
+      device_info get_device_info() const {
+        device_info prop;
+        dpct::get_device_info(prop, *this);
+        return prop;
+      }
+
+      void reset() {
+        std::lock_guard<mutex_type> lock(m_mutex);
+        clear_queues();
+        init_queues();
+      }
+
+      sycl::queue &in_order_queue() { return _q_in_order; }
+
+      sycl::queue &out_of_order_queue() { return _q_out_of_order; }
+
+      sycl::queue &default_queue() { return in_order_queue(); }
+
+      void queues_wait_and_throw() {
+        std::unique_lock<mutex_type> lock(m_mutex);
+        lock.unlock();
+        for (auto &q : _queues) {
+          q.wait_and_throw();
+        }
+        // Guard the destruct of current_queues to make sure the ref count is
+        // safe.
+        lock.lock();
+      }
+
+      sycl::queue create_queue(bool enable_exception_handler = false) {
+        return create_in_order_queue(enable_exception_handler);
+      }
+
+      sycl::queue create_queue(sycl::device device,
+                               bool enable_exception_handler = false) {
+        return create_in_order_queue(device, enable_exception_handler);
+      }
+
+      sycl::queue create_in_order_queue(bool enable_exception_handler = false) {
+        std::lock_guard<mutex_type> lock(m_mutex);
+        return create_queue_impl(enable_exception_handler,
+                                 sycl::property::queue::in_order());
+      }
+
+      sycl::queue create_in_order_queue(sycl::device device,
+                                        bool enable_exception_handler = false) {
+        std::lock_guard<mutex_type> lock(m_mutex);
+        return create_queue_impl(device, enable_exception_handler,
+                                 sycl::property::queue::in_order());
+      }
+
+      sycl::queue create_out_of_order_queue(
+          bool enable_exception_handler = false) {
+        std::lock_guard<mutex_type> lock(m_mutex);
+        return create_queue_impl(enable_exception_handler);
+      }
+
+      void destroy_queue(sycl::queue queue) {
+        std::lock_guard<mutex_type> lock(m_mutex);
+        _queues.clear();
+      }
+      void set_saved_queue(sycl::queue q) {
+        std::lock_guard<mutex_type> lock(m_mutex);
+        _saved_queue = q;
+      }
+      sycl::queue get_saved_queue() const {
+        std::lock_guard<mutex_type> lock(m_mutex);
+        return _saved_queue;
+      }
+
+     private:
+      void clear_queues() { _queues.clear(); }
+
+      void init_queues() {
+        _q_in_order =
+            create_queue_impl(true, sycl::property::queue::in_order());
+        _q_out_of_order = create_queue_impl(true);
+        _saved_queue = default_queue();
+      }
+
+      /// Caller should acquire resource \p m_mutex before calling this
+      /// function.
+      template <class... Properties>
+      sycl::queue create_queue_impl(bool enable_exception_handler,
+                                    Properties... properties) {
+        sycl::async_handler eh = {};
+        if (enable_exception_handler) {
+          eh = exception_handler;
+        }
+        auto q = sycl::queue(*this, eh,
+                             sycl::property_list(
+#ifdef DPCT_PROFILING_ENABLED
+                                 sycl::property::queue::enable_profiling(),
+#endif
+                                 properties...));
+        _queues.push_back(q);
+
+        return _queues.back();
+      }
+
+      template <class... Properties>
+      sycl::queue create_queue_impl(sycl::device device,
+                                    bool enable_exception_handler,
+                                    Properties... properties) {
+        sycl::async_handler eh = {};
+        if (enable_exception_handler) {
+          eh = exception_handler;
+        }
+        _queues.push_back(
+            sycl::queue(device, eh,
+                        sycl::property_list(
+#ifdef DPCT_PROFILING_ENABLED
+                            sycl::property::queue::enable_profiling(),
+#endif
+                            properties...)));
+
+        return _queues.back();
+      }
+
+      void get_version(int &major, int &minor) const {
+        detail::get_version(*this, major, minor);
+      }
+      sycl::queue _q_in_order, _q_out_of_order;
+      sycl::queue _saved_queue;
+      std::vector<sycl::queue> _queues;
+      mutable mutex_type m_mutex;
+    };
+
+
+    /// device manager
+    class dev_mgr
+    {
+    public:
+        device_ext &current_device()
+        {
+            unsigned int dev_id = current_device_id();
+            check_id(dev_id);
+            return *_devs[dev_id];
+        }
+        device_ext &cpu_device() const
+        {
+            std::lock_guard<std::recursive_mutex> lock(m_mutex);
+            if (_cpu_device == -1)
+            {
+                throw std::runtime_error("no valid cpu device");
+            }
+            else
+            {
+                return *_devs[_cpu_device];
+            }
+        }
+        device_ext &get_device(unsigned int id) const
+        {
+            std::lock_guard<std::recursive_mutex> lock(m_mutex);
+            check_id(id);
+            return *_devs[id];
+        }
+        unsigned int current_device_id() const
+        {
+            std::lock_guard<std::recursive_mutex> lock(m_mutex);
+            auto it = _thread2dev_map.find(get_tid());
+            if (it != _thread2dev_map.end())
+                return it->second;
+            return DEFAULT_DEVICE_ID;
+        }
+
+        /// Select device with a device ID.
+        /// \param [in] id The id of the device which can
+        /// be obtained through get_device_id(const sycl::device).
+        void select_device(unsigned int id)
+        {
+            std::lock_guard<std::recursive_mutex> lock(m_mutex);
+            check_id(id);
+            _thread2dev_map[get_tid()] = id;
+        }
+        unsigned int device_count() { return _devs.size(); }
+
+        unsigned int get_device_id(const sycl::device &dev)
+        {
+            unsigned int id = 0;
+            for (auto dev_item : _devs)
+            {
+                if (*dev_item == dev)
+                {
+                    break;
+                }
+                id++;
+            }
+            return id;
+        }
+
+        template <class DeviceSelector>
+        std::enable_if_t<
+            std::is_invocable_r_v<int, DeviceSelector, const sycl::device &>>
+        select_device(const DeviceSelector &selector = sycl::gpu_selector_v)
+        {
+            sycl::device selected_device = sycl::device(selector);
+            unsigned int selected_device_id = get_device_id(selected_device);
+            select_device(selected_device_id);
+        }
+
+        /// Returns the instance of device manager singleton.
+        static dev_mgr &instance()
+        {
+            static dev_mgr d_m;
+            return d_m;
+        }
+        dev_mgr(const dev_mgr &) = delete;
+        dev_mgr &operator=(const dev_mgr &) = delete;
+        dev_mgr(dev_mgr &&) = delete;
+        dev_mgr &operator=(dev_mgr &&) = delete;
+
+    private:
+        mutable std::recursive_mutex m_mutex;
+        static bool compare_dev(sycl::device &device1, sycl::device &device2)
+        {
+            sycl::backend backend1 = device1.get_backend();
+            sycl::backend backend2 = device2.get_backend();
+            // levelzero backends always come first
+            if(backend1 == sycl::backend::ext_oneapi_level_zero && backend2 != sycl::backend::ext_oneapi_level_zero) return true;
+            if(backend1 != sycl::backend::ext_oneapi_level_zero && backend2 == sycl::backend::ext_oneapi_level_zero) return false;
+            dpct::device_info prop1;
+            dpct::get_device_info(prop1, device1);
+            dpct::device_info prop2;
+            dpct::get_device_info(prop2, device2);
+            return prop1.get_max_compute_units() > prop2.get_max_compute_units();
+        }
+        static int convert_backend_index(std::string & backend) {
+            if (backend == "ext_oneapi_level_zero:gpu") return 0;
+            if (backend == "opencl:gpu") return 1;
+            if (backend == "ext_oneapi_cuda:gpu") return 2;
+            if (backend == "ext_oneapi_hip:gpu") return 3;
+            if (backend == "opencl:cpu") return 4;
+            if (backend == "opencl:acc") return 5;
+            printf("convert_backend_index: can't handle backend=%s\n", backend.c_str());
+            GGML_ASSERT(false);
+        }
+        static bool compare_backend(std::string &backend1, std::string &backend2) {
+            return convert_backend_index(backend1) < convert_backend_index(backend2);
+        }
+        dev_mgr()
+        {
+            sycl::device default_device =
+                sycl::device(sycl::default_selector_v);
+            _devs.push_back(std::make_shared<device_ext>(default_device));
+
+            std::vector<sycl::device> sycl_all_devs;
+            // Collect other devices except for the default device.
+            if (default_device.is_cpu())
+                _cpu_device = 0;
+
+            auto Platforms = sycl::platform::get_platforms();
+            // Keep track of the number of devices per backend
+            std::map<sycl::backend, size_t> DeviceNums;
+            std::map<std::string, std::vector<sycl::device>> backend_devices;
+
+            while (!Platforms.empty()) {
+                auto Platform = Platforms.back();
+                Platforms.pop_back();
+                auto devices = Platform.get_devices();
+                std::string backend_type = get_device_backend_and_type(devices[0]);
+                for (const auto &device : devices) {
+                    backend_devices[backend_type].push_back(device);
+                }
+            }
+
+            std::vector<std::string> keys;
+            for(auto it = backend_devices.begin(); it != backend_devices.end(); ++it) {
+                keys.push_back(it->first);
+            }
+            std::sort(keys.begin(), keys.end(), compare_backend);
+
+            for (auto &key : keys) {
+                std::vector<sycl::device> devs = backend_devices[key];
+                std::sort(devs.begin(), devs.end(), compare_dev);
+                for (const auto &dev : devs) {
+                    sycl_all_devs.push_back(dev);
+                }
+            }
+
+            for (auto &dev : sycl_all_devs)
+            {
+                if (dev == default_device)
+                {
+                    continue;
+                }
+                _devs.push_back(std::make_shared<device_ext>(dev));
+                if (_cpu_device == -1 && dev.is_cpu())
+                {
+                    _cpu_device = _devs.size() - 1;
+                }
+            }
+        }
+        void check_id(unsigned int id) const
+        {
+            if (id >= _devs.size())
+            {
+                throw std::runtime_error("invalid device id");
+            }
+        }
+        std::vector<std::shared_ptr<device_ext>> _devs;
+        /// DEFAULT_DEVICE_ID is used, if current_device_id() can not find current
+        /// thread id in _thread2dev_map, which means default device should be used
+        /// for the current thread.
+        const unsigned int DEFAULT_DEVICE_ID = 0;
+        /// thread-id to device-id map.
+        std::map<unsigned int, unsigned int> _thread2dev_map;
+        int _cpu_device = -1;
+    };
+
+    static inline sycl::queue &get_default_queue()
+    {
+        return dev_mgr::instance().current_device().default_queue();
+    }
+
+    namespace detail
+    {
+        enum class pointer_access_attribute
+        {
+            host_only = 0,
+            device_only,
+            host_device,
+            end
+        };
+
+        static pointer_access_attribute get_pointer_attribute(sycl::queue &q,
+                                                              const void *ptr)
+        {
+            switch (sycl::get_pointer_type(ptr, q.get_context()))
+            {
+            case sycl::usm::alloc::unknown:
+                return pointer_access_attribute::host_only;
+            case sycl::usm::alloc::device:
+                return pointer_access_attribute::device_only;
+            case sycl::usm::alloc::shared:
+            case sycl::usm::alloc::host:
+                return pointer_access_attribute::host_device;
+            }
+        }
+
+        template <typename ArgT>
+        inline constexpr std::uint64_t get_type_combination_id(ArgT Val)
+        {
+            static_assert((unsigned char)library_data_t::library_data_t_size <=
+                              std::numeric_limits<unsigned char>::max() &&
+                          "library_data_t size exceeds limit.");
+            static_assert(std::is_same_v<ArgT, library_data_t>, "Unsupported ArgT");
+            return (std::uint64_t)Val;
+        }
+
+        template <typename FirstT, typename... RestT>
+        inline constexpr std::uint64_t get_type_combination_id(FirstT FirstVal,
+                                                               RestT... RestVal)
+        {
+            static_assert((std::uint8_t)library_data_t::library_data_t_size <=
+                              std::numeric_limits<unsigned char>::max() &&
+                          "library_data_t size exceeds limit.");
+            static_assert(sizeof...(RestT) <= 8 && "Too many parameters");
+            static_assert(std::is_same_v<FirstT, library_data_t>, "Unsupported FirstT");
+            return get_type_combination_id(RestVal...) << 8 | ((std::uint64_t)FirstVal);
+        }
+
+        class mem_mgr
+        {
+            mem_mgr()
+            {
+                // Reserved address space, no real memory allocation happens here.
+#if defined(__linux__)
+                mapped_address_space =
+                    (byte_t *)mmap(nullptr, mapped_region_size, PROT_NONE,
+                                   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+#elif defined(_WIN64)
+                mapped_address_space = (byte_t *)VirtualAlloc(
+                    NULL,               // NULL specified as the base address parameter
+                    mapped_region_size, // Size of allocation
+                    MEM_RESERVE,        // Allocate reserved pages
+                    PAGE_NOACCESS);     // Protection = no access
+#else
+#error "Only support Windows and Linux."
+#endif
+                next_free = mapped_address_space;
+            };
+
+        public:
+            using buffer_id_t = int;
+
+            struct allocation
+            {
+                buffer_t buffer;
+                byte_t *alloc_ptr;
+                size_t size;
+            };
+
+            ~mem_mgr()
+            {
+#if defined(__linux__)
+                munmap(mapped_address_space, mapped_region_size);
+#elif defined(_WIN64)
+                VirtualFree(mapped_address_space, 0, MEM_RELEASE);
+#else
+#error "Only support Windows and Linux."
+#endif
+            };
+
+            mem_mgr(const mem_mgr &) = delete;
+            mem_mgr &operator=(const mem_mgr &) = delete;
+            mem_mgr(mem_mgr &&) = delete;
+            mem_mgr &operator=(mem_mgr &&) = delete;
+
+            /// Allocate
+            void *mem_alloc(size_t size)
+            {
+                if (!size)
+                    return nullptr;
+                std::lock_guard<std::mutex> lock(m_mutex);
+                if (next_free + size > mapped_address_space + mapped_region_size)
+                {
+                    throw std::runtime_error("dpct_malloc: out of memory for virtual memory pool");
+                }
+                // Allocation
+                sycl::range<1> r(size);
+                buffer_t buf(r);
+                allocation A{buf, next_free, size};
+                // Map allocation to device pointer
+                void *result = next_free;
+                m_map.emplace(next_free + size, A);
+                // Update pointer to the next free space.
+                next_free += (size + extra_padding + alignment - 1) & ~(alignment - 1);
+
+                return result;
+            }
+
+            /// Deallocate
+            void mem_free(const void *ptr)
+            {
+                if (!ptr)
+                    return;
+                std::lock_guard<std::mutex> lock(m_mutex);
+                auto it = get_map_iterator(ptr);
+                m_map.erase(it);
+            }
+
+            /// map: device pointer -> allocation(buffer, alloc_ptr, size)
+            allocation translate_ptr(const void *ptr)
+            {
+                std::lock_guard<std::mutex> lock(m_mutex);
+                auto it = get_map_iterator(ptr);
+                return it->second;
+            }
+
+            /// Check if the pointer represents device pointer or not.
+            bool is_device_ptr(const void *ptr) const
+            {
+                std::lock_guard<std::mutex> lock(m_mutex);
+                return (mapped_address_space <= ptr) &&
+                       (ptr < mapped_address_space + mapped_region_size);
+            }
+
+            /// Returns the instance of memory manager singleton.
+            static mem_mgr &instance()
+            {
+                static mem_mgr m;
+                return m;
+            }
+
+        private:
+            std::map<byte_t *, allocation> m_map;
+            mutable std::mutex m_mutex;
+            byte_t *mapped_address_space;
+            byte_t *next_free;
+            const size_t mapped_region_size = 128ull * 1024 * 1024 * 1024;
+            const size_t alignment = 256;
+            /// This padding may be defined to some positive value to debug
+            /// out of bound accesses.
+            const size_t extra_padding = 0;
+
+            std::map<byte_t *, allocation>::iterator get_map_iterator(const void *ptr)
+            {
+                auto it = m_map.upper_bound((byte_t *)ptr);
+                if (it == m_map.end())
+                {
+                    // Not a virtual pointer.
+                    throw std::runtime_error("can not get buffer from non-virtual pointer");
+                }
+                const allocation &alloc = it->second;
+                if (ptr < alloc.alloc_ptr)
+                {
+                    // Out of bound.
+                    // This may happen if there's a gap between allocations due to alignment
+                    // or extra padding and pointer points to this gap.
+                    throw std::runtime_error("invalid virtual pointer");
+                }
+                return it;
+            }
+        };
+
+        template <class T, memory_region Memory, size_t Dimension>
+        class accessor;
+        template <memory_region Memory, class T = byte_t>
+        class memory_traits
+        {
+        public:
+            static constexpr sycl::access::target target =
+                sycl::access::target::device;
+            static constexpr sycl::access_mode mode =
+                (Memory == constant) ? sycl::access_mode::read
+                                     : sycl::access_mode::read_write;
+            static constexpr size_t type_size = sizeof(T);
+            using element_t =
+                typename std::conditional<Memory == constant, const T, T>::type;
+            using value_t = typename std::remove_cv<T>::type;
+            template <size_t Dimension = 1>
+            using accessor_t = typename std::conditional<
+                Memory == local, sycl::local_accessor<value_t, Dimension>,
+                sycl::accessor<T, Dimension, mode, target>>::type;
+            using pointer_t = T *;
+        };
+
+        static inline void *dpct_malloc(size_t size, sycl::queue &q)
+        {
+            return sycl::malloc_device(size, q.get_device(), q.get_context());
+        }
+
+#define PITCH_DEFAULT_ALIGN(x) (((x) + 31) & ~(0x1F))
+        static inline void *dpct_malloc(size_t &pitch, size_t x, size_t y, size_t z,
+                                        sycl::queue &q)
+        {
+            pitch = PITCH_DEFAULT_ALIGN(x);
+            return dpct_malloc(pitch * y * z, q);
+        }
+
+        /**
+         * @brief Sets \p value to the first \p size elements starting from \p dev_ptr in \p q.
+         * @tparam valueT The type of the element to be set.
+         * @param [in] q The queue in which the operation is done.
+         * @param [in] dev_ptr Pointer to the virtual device memory address.
+         * @param [in] value The value to be set.
+         * @param [in] size Number of elements to be set to the value.
+         * @return An event representing the memset operation.
+         */
+        template <typename valueT>
+        static inline sycl::event dpct_memset(sycl::queue &q, void *dev_ptr,
+                                              valueT value, size_t size)
+        {
+            return q.fill(dev_ptr, value, size);
+        }
+
+        /**
+         * @brief Sets \p value to the 3D memory region pointed by \p data in \p q.
+         * @tparam valueT The type of the element to be set.
+         * @param [in] q The queue in which the operation is done.
+         * @param [in] data Pointer to the pitched device memory region.
+         * @param [in] value The value to be set.
+         * @param [in] size 3D memory region by number of elements.
+         * @return An event list representing the memset operations.
+         */
+        template <typename valueT>
+        static inline std::vector<sycl::event>
+        dpct_memset(sycl::queue &q, pitched_data data, valueT value,
+                    sycl::range<3> size)
+        {
+            std::vector<sycl::event> event_list;
+            size_t slice = data.get_pitch() * data.get_y();
+            unsigned char *data_surface = (unsigned char *)data.get_data_ptr();
+            for (size_t z = 0; z < size.get(2); ++z)
+            {
+                unsigned char *data_ptr = data_surface;
+                for (size_t y = 0; y < size.get(1); ++y)
+                {
+                    event_list.push_back(dpct_memset(q, data_ptr, value, size.get(0)));
+                    data_ptr += data.get_pitch();
+                }
+                data_surface += slice;
+            }
+            return event_list;
+        }
+
+        /**
+         * @brief Sets \p val to the pitched 2D memory region pointed by \p ptr in \p q.
+         * @tparam valueT The type of the element to be set.
+         * @param [in] q The queue in which the operation is done.
+         * @param [in] ptr Pointer to the virtual device memory.
+         * @param [in] pitch The pitch size by number of elements, including padding.
+         * @param [in] val The value to be set.
+         * @param [in] x The width of memory region by number of elements.
+         * @param [in] y The height of memory region by number of elements.
+         * @return An event list representing the memset operations.
+         */
+        template <typename valueT>
+        static inline std::vector<sycl::event>
+        dpct_memset(sycl::queue &q, void *ptr, size_t pitch, valueT val, size_t x,
+                    size_t y)
+        {
+            return dpct_memset(q, pitched_data(ptr, pitch, x, 1), val,
+                               sycl::range<3>(x, y, 1));
+        }
+
+        static memcpy_direction deduce_memcpy_direction(sycl::queue &q, void *to_ptr,
+                                                        const void *from_ptr,
+                                                        memcpy_direction dir)
+        {
+            switch (dir)
+            {
+            case memcpy_direction::host_to_host:
+            case memcpy_direction::host_to_device:
+            case memcpy_direction::device_to_host:
+            case memcpy_direction::device_to_device:
+                return dir;
+            case memcpy_direction::automatic:
+            {
+                // table[to_attribute][from_attribute]
+                static const memcpy_direction
+                    direction_table[static_cast<unsigned>(pointer_access_attribute::end)]
+                                   [static_cast<unsigned>(pointer_access_attribute::end)] =
+                                       {{memcpy_direction::host_to_host,
+                                         memcpy_direction::device_to_host,
+                                         memcpy_direction::host_to_host},
+                                        {memcpy_direction::host_to_device,
+                                         memcpy_direction::device_to_device,
+                                         memcpy_direction::device_to_device},
+                                        {memcpy_direction::host_to_host,
+                                         memcpy_direction::device_to_device,
+                                         memcpy_direction::device_to_device}};
+                return direction_table[static_cast<unsigned>(get_pointer_attribute(
+                    q, to_ptr))][static_cast<unsigned>(get_pointer_attribute(q, from_ptr))];
+            }
+            default:
+                throw std::runtime_error("dpct_memcpy: invalid direction value");
+            }
+        }
+
+        static sycl::event
+        dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr, size_t size,
+                    memcpy_direction direction,
+                    const std::vector<sycl::event> &dep_events = {})
+        {
+            if (!size)
+                return sycl::event{};
+            return q.memcpy(to_ptr, from_ptr, size, dep_events);
+            GGML_UNUSED(direction);
+        }
+
+        // Get actual copy range and make sure it will not exceed range.
+        static inline size_t get_copy_range(sycl::range<3> size, size_t slice,
+                                            size_t pitch)
+        {
+            return slice * (size.get(2) - 1) + pitch * (size.get(1) - 1) + size.get(0);
+        }
+
+        static inline size_t get_offset(sycl::id<3> id, size_t slice,
+                                        size_t pitch)
+        {
+            return slice * id.get(2) + pitch * id.get(1) + id.get(0);
+        }
+
+        /// copy 3D matrix specified by \p size from 3D matrix specified by \p from_ptr
+        /// and \p from_range to another specified by \p to_ptr and \p to_range.
+        static inline std::vector<sycl::event>
+        dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr,
+                    sycl::range<3> to_range, sycl::range<3> from_range,
+                    sycl::id<3> to_id, sycl::id<3> from_id,
+                    sycl::range<3> size, memcpy_direction direction,
+                    const std::vector<sycl::event> &dep_events = {})
+        {
+            // RAII for host pointer
+            class host_buffer
+            {
+                void *_buf;
+                size_t _size;
+                sycl::queue &_q;
+                const std::vector<sycl::event> &_deps; // free operation depends
+
+            public:
+                host_buffer(size_t size, sycl::queue &q,
+                            const std::vector<sycl::event> &deps)
+                    : _buf(std::malloc(size)), _size(size), _q(q), _deps(deps) {}
+                void *get_ptr() const { return _buf; }
+                size_t get_size() const { return _size; }
+                ~host_buffer()
+                {
+                    if (_buf)
+                    {
+                        _q.submit([&](sycl::handler &cgh)
+                                  {
+        cgh.depends_on(_deps);
+        cgh.host_task([buf = _buf] { std::free(buf); }); });
+                    }
+                }
+            };
+            std::vector<sycl::event> event_list;
+
+            size_t to_slice = to_range.get(1) * to_range.get(0),
+                   from_slice = from_range.get(1) * from_range.get(0);
+            unsigned char *to_surface =
+                (unsigned char *)to_ptr + get_offset(to_id, to_slice, to_range.get(0));
+            const unsigned char *from_surface =
+                (const unsigned char *)from_ptr +
+                get_offset(from_id, from_slice, from_range.get(0));
+
+            if (to_slice == from_slice && to_slice == size.get(1) * size.get(0))
+            {
+                return {dpct_memcpy(q, to_surface, from_surface, to_slice * size.get(2),
+                                    direction, dep_events)};
+            }
+            direction = deduce_memcpy_direction(q, to_ptr, from_ptr, direction);
+            size_t size_slice = size.get(1) * size.get(0);
+            switch (direction)
+            {
+            case host_to_host:
+                for (size_t z = 0; z < size.get(2); ++z)
+                {
+                    unsigned char *to_ptr = to_surface;
+                    const unsigned char *from_ptr = from_surface;
+                    if (to_range.get(0) == from_range.get(0) &&
+                        to_range.get(0) == size.get(0))
+                    {
+                        event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size_slice,
+                                                         direction, dep_events));
+                    }
+                    else
+                    {
+                        for (size_t y = 0; y < size.get(1); ++y)
+                        {
+                            event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size.get(0),
+                                                             direction, dep_events));
+                            to_ptr += to_range.get(0);
+                            from_ptr += from_range.get(0);
+                        }
+                    }
+                    to_surface += to_slice;
+                    from_surface += from_slice;
+                }
+                break;
+            case host_to_device:
+            {
+                host_buffer buf(get_copy_range(size, to_slice, to_range.get(0)), q,
+                                event_list);
+                std::vector<sycl::event> host_events;
+                if (to_slice == size_slice)
+                {
+                    // Copy host data to a temp host buffer with the shape of target.
+                    host_events =
+                        dpct_memcpy(q, buf.get_ptr(), from_surface, to_range, from_range,
+                                    sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size,
+                                    host_to_host, dep_events);
+                }
+                else
+                {
+                    // Copy host data to a temp host buffer with the shape of target.
+                    host_events = dpct_memcpy(
+                        q, buf.get_ptr(), from_surface, to_range, from_range,
+                        sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size, host_to_host,
+                        // If has padding data, not sure whether it is useless. So fill temp
+                        // buffer with it.
+                        std::vector<sycl::event>{
+                            dpct_memcpy(q, buf.get_ptr(), to_surface, buf.get_size(),
+                                        device_to_host, dep_events)});
+                }
+                // Copy from temp host buffer to device with only one submit.
+                event_list.push_back(dpct_memcpy(q, to_surface, buf.get_ptr(),
+                                                 buf.get_size(), host_to_device,
+                                                 host_events));
+                break;
+            }
+            case device_to_host:
+            {
+                host_buffer buf(get_copy_range(size, from_slice, from_range.get(0)), q,
+                                event_list);
+                // Copy from host temp buffer to host target with reshaping.
+                event_list = dpct_memcpy(
+                    q, to_surface, buf.get_ptr(), to_range, from_range, sycl::id<3>(0, 0, 0),
+                    sycl::id<3>(0, 0, 0), size, host_to_host,
+                    // Copy from device to temp host buffer with only one submit.
+                    std::vector<sycl::event>{dpct_memcpy(q, buf.get_ptr(), from_surface,
+                                                         buf.get_size(),
+                                                         device_to_host, dep_events)});
+                break;
+            }
+            case device_to_device:
+                event_list.push_back(q.submit([&](sycl::handler &cgh){
+                cgh.depends_on(dep_events);
+                cgh.parallel_for<class dpct_memcpy_3d_detail>(
+                    size,
+                    [=](sycl::id<3> id) {
+                        to_surface[get_offset(id, to_slice, to_range.get(0))] =
+                            from_surface[get_offset(id, from_slice, from_range.get(0))];
+                    }); }));
+                break;
+            default:
+                throw std::runtime_error("dpct_memcpy: invalid direction value");
+            }
+            return event_list;
+        }
+
+        /// memcpy 2D/3D matrix specified by pitched_data.
+        static inline std::vector<sycl::event>
+        dpct_memcpy(sycl::queue &q, pitched_data to, sycl::id<3> to_id,
+                    pitched_data from, sycl::id<3> from_id, sycl::range<3> size,
+                    memcpy_direction direction = automatic)
+        {
+            return dpct_memcpy(q, to.get_data_ptr(), from.get_data_ptr(),
+                               sycl::range<3>(to.get_pitch(), to.get_y(), 1),
+                               sycl::range<3>(from.get_pitch(), from.get_y(), 1), to_id, from_id,
+                               size, direction);
+        }
+
+        /// memcpy 2D matrix with pitch.
+        static inline std::vector<sycl::event>
+        dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr,
+                    size_t to_pitch, size_t from_pitch, size_t x, size_t y,
+                    memcpy_direction direction = automatic)
+        {
+            return dpct_memcpy(q, to_ptr, from_ptr, sycl::range<3>(to_pitch, y, 1),
+                               sycl::range<3>(from_pitch, y, 1),
+                               sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0),
+                               sycl::range<3>(x, y, 1), direction);
+        }
+
+        namespace deprecated
+        {
+
+            template <typename T, sycl::usm::alloc AllocKind>
+            class usm_allocator
+            {
+            private:
+                using Alloc = sycl::usm_allocator<T, AllocKind>;
+                Alloc _impl;
+
+            public:
+                using value_type = typename std::allocator_traits<Alloc>::value_type;
+                using pointer = typename std::allocator_traits<Alloc>::pointer;
+                using const_pointer = typename std::allocator_traits<Alloc>::const_pointer;
+                using void_pointer = typename std::allocator_traits<Alloc>::void_pointer;
+                using const_void_pointer =
+                    typename std::allocator_traits<Alloc>::const_void_pointer;
+                using reference = typename std::allocator_traits<Alloc>::value_type &;
+                using const_reference =
+                    const typename std::allocator_traits<Alloc>::value_type &;
+                using difference_type =
+                    typename std::allocator_traits<Alloc>::difference_type;
+                using size_type = typename std::allocator_traits<Alloc>::size_type;
+                using propagate_on_container_copy_assignment = typename std::allocator_traits<
+                    Alloc>::propagate_on_container_copy_assignment;
+                using propagate_on_container_move_assignment = typename std::allocator_traits<
+                    Alloc>::propagate_on_container_move_assignment;
+                using propagate_on_container_swap =
+                    typename std::allocator_traits<Alloc>::propagate_on_container_swap;
+                using is_always_equal =
+                    typename std::allocator_traits<Alloc>::is_always_equal;
+
+                template <typename U>
+                struct rebind
+                {
+                    typedef usm_allocator<U, AllocKind> other;
+                };
+
+                usm_allocator() : _impl(dpct::get_default_queue()) {}
+                ~usm_allocator() {}
+                usm_allocator(const usm_allocator &other) : _impl(other._impl) {}
+                usm_allocator(usm_allocator &&other) : _impl(std::move(other._impl)) {}
+                pointer address(reference r) { return &r; }
+                const_pointer address(const_reference r) { return &r; }
+                pointer allocate(size_type cnt, const_void_pointer hint = nullptr)
+                {
+                    return std::allocator_traits<Alloc>::allocate(_impl, cnt, hint);
+                }
+                void deallocate(pointer p, size_type cnt)
+                {
+                    std::allocator_traits<Alloc>::deallocate(_impl, p, cnt);
+                }
+                size_type max_size() const
+                {
+                    return std::allocator_traits<Alloc>::max_size(_impl);
+                }
+                bool operator==(const usm_allocator &other) const { return _impl == other._impl; }
+                bool operator!=(const usm_allocator &other) const { return _impl != other._impl; }
+            };
+
+        } // namespace deprecated
+
+        inline void dpct_free(void *ptr,
+                              const sycl::queue &q)
+        {
+            if (ptr)
+            {
+                sycl::free(ptr, q.get_context());
+            }
+        }
+
+        template <typename T>
+        inline auto get_memory(const void *x)
+        {
+            T *new_x = reinterpret_cast<T *>(const_cast<void *>(x));
+            return new_x;
+        }
+
+        template <typename T>
+        inline typename DataType<T>::T2 get_value(const T *s, sycl::queue &q)
+        {
+            using Ty = typename DataType<T>::T2;
+            Ty s_h;
+            if (get_pointer_attribute(q, s) == pointer_access_attribute::device_only)
+                detail::dpct_memcpy(q, (void *)&s_h, (const void *)s, sizeof(T), device_to_host)
+                    .wait();
+            else
+                s_h = *reinterpret_cast<const Ty *>(s);
+            return s_h;
+        }
+
+    } // namespace detail
+
+    template <typename T>
+    inline auto get_value(const T *s, sycl::queue &q)
+    {
+        return detail::get_value(s, q);
+    }
+
+    namespace detail
+    {
+        template <class Ta, class Tb, class Tc, class Ts>
+        inline void gemm_impl(sycl::queue &q, oneapi::mkl::transpose a_trans,
+                              oneapi::mkl::transpose b_trans, int m, int n, int k,
+                              const void *alpha, const void *a, int lda, const void *b,
+                              int ldb, const void *beta, void *c, int ldc)
+        {
+            Ts alpha_value = dpct::get_value(reinterpret_cast<const Ts *>(alpha), q);
+            Ts beta_value = dpct::get_value(reinterpret_cast<const Ts *>(beta), q);
+            auto data_a = get_memory<const Ta>(a);
+            auto data_b = get_memory<const Tb>(b);
+            auto data_c = get_memory<Tc>(c);
+            oneapi::mkl::blas::column_major::gemm(
+                q, a_trans, b_trans, m, n, k, alpha_value, data_a, lda,
+                data_b, ldb, beta_value, data_c, ldc);
+        }
+
+        template <typename VecT, class BinaryOperation, class = void>
+        class vectorized_binary
+        {
+        public:
+            inline VecT operator()(VecT a, VecT b, const BinaryOperation binary_op)
+            {
+                VecT v4;
+                for (size_t i = 0; i < v4.size(); ++i)
+                {
+                    v4[i] = binary_op(a[i], b[i]);
+                }
+                return v4;
+            }
+        };
+
+        template <typename VecT, class BinaryOperation>
+        class vectorized_binary<
+            VecT, BinaryOperation,
+            std::void_t<std::invoke_result_t<BinaryOperation, VecT, VecT>>>
+        {
+        public:
+            inline VecT operator()(VecT a, VecT b, const BinaryOperation binary_op)
+            {
+                return binary_op(a, b).template as<VecT>();
+            }
+        };
+
+        template <class Ta, class Tb, class Tc, class Ts>
+        inline void gemm_batch_impl(sycl::queue &q, oneapi::mkl::transpose a_trans,
+                                    oneapi::mkl::transpose b_trans, int m, int n, int k,
+                                    const void *alpha, const void **a, int lda,
+                                    const void **b, int ldb, const void *beta, void **c,
+                                    int ldc, int batch_size)
+        {
+            struct matrix_info_t
+            {
+                oneapi::mkl::transpose transpose_info[2];
+                Ts value_info[2];
+                std::int64_t size_info[3];
+                std::int64_t ld_info[3];
+                std::int64_t groupsize_info;
+            };
+
+            Ts alpha_value = dpct::get_value(reinterpret_cast<const Ts *>(alpha), q);
+            Ts beta_value = dpct::get_value(reinterpret_cast<const Ts *>(beta), q);
+
+            matrix_info_t *matrix_info =
+                (matrix_info_t *)std::malloc(sizeof(matrix_info_t));
+            matrix_info->transpose_info[0] = a_trans;
+            matrix_info->transpose_info[1] = b_trans;
+            matrix_info->value_info[0] = alpha_value;
+            matrix_info->value_info[1] = beta_value;
+            matrix_info->size_info[0] = m;
+            matrix_info->size_info[1] = n;
+            matrix_info->size_info[2] = k;
+            matrix_info->ld_info[0] = lda;
+            matrix_info->ld_info[1] = ldb;
+            matrix_info->ld_info[2] = ldc;
+            matrix_info->groupsize_info = batch_size;
+
+            sycl::event e = oneapi::mkl::blas::column_major::gemm_batch(
+                q, matrix_info->transpose_info, matrix_info->transpose_info + 1,
+                matrix_info->size_info, matrix_info->size_info + 1,
+                matrix_info->size_info + 2, matrix_info->value_info,
+                reinterpret_cast<const Ta **>(a), matrix_info->ld_info,
+                reinterpret_cast<const Tb **>(b), matrix_info->ld_info + 1,
+                matrix_info->value_info + 1, reinterpret_cast<Tc **>(c),
+                matrix_info->ld_info + 2, 1, &(matrix_info->groupsize_info));
+
+            q.submit([&](sycl::handler &cgh)
+                     {
+    cgh.depends_on(e);
+    cgh.host_task([=] { std::free(matrix_info); }); });
+        }
+
+        template <class Ta, class Tb, class Tc, class Ts>
+        inline void
+        gemm_batch_impl(sycl::queue &q, oneapi::mkl::transpose a_trans,
+                        oneapi::mkl::transpose b_trans, int m, int n,
+                        int k, const void *alpha, const void *a, int lda,
+                        long long int stride_a, const void *b, int ldb,
+                        long long int stride_b, const void *beta, void *c,
+                        int ldc, long long int stride_c, int batch_size)
+        {
+            Ts alpha_value = dpct::get_value(reinterpret_cast<const Ts *>(alpha), q);
+            Ts beta_value = dpct::get_value(reinterpret_cast<const Ts *>(beta), q);
+            auto data_a = get_memory<const Ta>(a);
+            auto data_b = get_memory<const Tb>(b);
+            auto data_c = get_memory<Tc>(c);
+            oneapi::mkl::blas::column_major::gemm_batch(
+                q, a_trans, b_trans, m, n, k, alpha_value, data_a, lda,
+                stride_a, data_b, ldb, stride_b, beta_value,
+                data_c, ldc, stride_c, batch_size);
+        }
+
+    } // namespace detail
+
+    template <typename VecT, class BinaryOperation>
+    inline unsigned vectorized_binary(unsigned a, unsigned b,
+                                      const BinaryOperation binary_op)
+    {
+        sycl::vec<unsigned, 1> v0{a}, v1{b};
+        auto v2 = v0.as<VecT>();
+        auto v3 = v1.as<VecT>();
+        auto v4 =
+            detail::vectorized_binary<VecT, BinaryOperation>()(v2, v3, binary_op);
+        v0 = v4.template as<sycl::vec<unsigned, 1>>();
+        return v0;
+    }
+
+    static void async_dpct_memcpy(void *to_ptr, const void *from_ptr, size_t size,
+                                  memcpy_direction direction = automatic,
+                                  sycl::queue &q = dpct::get_default_queue())
+    {
+        detail::dpct_memcpy(q, to_ptr, from_ptr, size, direction);
+    }
+
+    static inline unsigned int select_device(unsigned int id)
+    {
+        dev_mgr::instance().select_device(id);
+        return id;
+    }
+
+    template <typename T>
+    T permute_sub_group_by_xor(sycl::sub_group g, T x, unsigned int mask,
+                               unsigned int logical_sub_group_size = 32)
+    {
+        unsigned int id = g.get_local_linear_id();
+        unsigned int start_index =
+            id / logical_sub_group_size * logical_sub_group_size;
+        unsigned int target_offset = (id % logical_sub_group_size) ^ mask;
+        return sycl::select_from_group(g, x,
+                                       target_offset < logical_sub_group_size
+                                           ? start_index + target_offset
+                                           : id);
+    }
+
+    template <typename T>
+    sycl::vec<T, 4> extract_and_sign_or_zero_extend4(T val)
+    {
+        return sycl::vec<T, 1>(val)
+            .template as<sycl::vec<
+                std::conditional_t<std::is_signed_v<T>, int8_t, uint8_t>, 4>>()
+            .template convert<T>();
+    }
+
+    template <typename T1, typename T2>
+    using dot_product_acc_t =
+        std::conditional_t<std::is_unsigned_v<T1> && std::is_unsigned_v<T2>,
+                           uint32_t, int32_t>;
+
+    template <typename T1, typename T2, typename T3>
+    inline auto dp4a(T1 a, T2 b, T3 c)
+    {
+        dot_product_acc_t<T1, T2> res = c;
+        auto va = extract_and_sign_or_zero_extend4(a);
+        auto vb = extract_and_sign_or_zero_extend4(b);
+        res += va[0] * vb[0];
+        res += va[1] * vb[1];
+        res += va[2] * vb[2];
+        res += va[3] * vb[3];
+        return res;
+    }
+
+    struct sub_sat
+    {
+        template <typename T>
+        auto operator()(const T x, const T y) const
+        {
+            return sycl::sub_sat(x, y);
+        }
+    };
+
+    template <typename S, typename T>
+    inline T vectorized_min(T a, T b)
+    {
+        sycl::vec<T, 1> v0{a}, v1{b};
+        auto v2 = v0.template as<S>();
+        auto v3 = v1.template as<S>();
+        auto v4 = sycl::min(v2, v3);
+        v0 = v4.template as<sycl::vec<T, 1>>();
+        return v0;
+    }
+
+    inline float pow(const float a, const int b) { return sycl::pown(a, b); }
+    inline double pow(const double a, const int b) { return sycl::pown(a, b); }
+    inline float pow(const float a, const float b) { return sycl::pow(a, b); }
+    inline double pow(const double a, const double b) { return sycl::pow(a, b); }
+    template <typename T, typename U>
+    inline typename std::enable_if_t<std::is_floating_point_v<T>, T>
+    pow(const T a, const U b)
+    {
+        return sycl::pow(a, static_cast<T>(b));
+    }
+    template <typename T, typename U>
+    inline typename std::enable_if_t<!std::is_floating_point_v<T>, double>
+    pow(const T a, const U b)
+    {
+        return sycl::pow(static_cast<double>(a), static_cast<double>(b));
+    }
+
+    inline double min(const double a, const float b)
+    {
+        return sycl::fmin(a, static_cast<double>(b));
+    }
+    inline double min(const float a, const double b)
+    {
+        return sycl::fmin(static_cast<double>(a), b);
+    }
+    inline float min(const float a, const float b) { return sycl::fmin(a, b); }
+    inline double min(const double a, const double b) { return sycl::fmin(a, b); }
+    inline std::uint32_t min(const std::uint32_t a, const std::int32_t b)
+    {
+        return sycl::min(a, static_cast<std::uint32_t>(b));
+    }
+    inline std::uint32_t min(const std::int32_t a, const std::uint32_t b)
+    {
+        return sycl::min(static_cast<std::uint32_t>(a), b);
+    }
+    inline std::int32_t min(const std::int32_t a, const std::int32_t b)
+    {
+        return sycl::min(a, b);
+    }
+    inline std::uint32_t min(const std::uint32_t a, const std::uint32_t b)
+    {
+        return sycl::min(a, b);
+    }
+    inline std::uint64_t min(const std::uint64_t a, const std::int64_t b)
+    {
+        return sycl::min(a, static_cast<std::uint64_t>(b));
+    }
+    inline std::uint64_t min(const std::int64_t a, const std::uint64_t b)
+    {
+        return sycl::min(static_cast<std::uint64_t>(a), b);
+    }
+    inline std::int64_t min(const std::int64_t a, const std::int64_t b)
+    {
+        return sycl::min(a, b);
+    }
+    inline std::uint64_t min(const std::uint64_t a, const std::uint64_t b)
+    {
+        return sycl::min(a, b);
+    }
+    inline std::uint64_t min(const std::uint64_t a, const std::int32_t b)
+    {
+        return sycl::min(a, static_cast<std::uint64_t>(b));
+    }
+    inline std::uint64_t min(const std::int32_t a, const std::uint64_t b)
+    {
+        return sycl::min(static_cast<std::uint64_t>(a), b);
+    }
+    inline std::uint64_t min(const std::uint64_t a, const std::uint32_t b)
+    {
+        return sycl::min(a, static_cast<std::uint64_t>(b));
+    }
+    inline std::uint64_t min(const std::uint32_t a, const std::uint64_t b)
+    {
+        return sycl::min(static_cast<std::uint64_t>(a), b);
+    }
+    // max function overloads.
+    // For floating-point types, `float` or `double` arguments are acceptable.
+    // For integer types, `std::uint32_t`, `std::int32_t`, `std::uint64_t` or
+    // `std::int64_t` type arguments are acceptable.
+    inline double max(const double a, const float b)
+    {
+        return sycl::fmax(a, static_cast<double>(b));
+    }
+    inline double max(const float a, const double b)
+    {
+        return sycl::fmax(static_cast<double>(a), b);
+    }
+    inline float max(const float a, const float b) { return sycl::fmax(a, b); }
+    inline double max(const double a, const double b) { return sycl::fmax(a, b); }
+    inline std::uint32_t max(const std::uint32_t a, const std::int32_t b)
+    {
+        return sycl::max(a, static_cast<std::uint32_t>(b));
+    }
+    inline std::uint32_t max(const std::int32_t a, const std::uint32_t b)
+    {
+        return sycl::max(static_cast<std::uint32_t>(a), b);
+    }
+    inline std::int32_t max(const std::int32_t a, const std::int32_t b)
+    {
+        return sycl::max(a, b);
+    }
+    inline std::uint32_t max(const std::uint32_t a, const std::uint32_t b)
+    {
+        return sycl::max(a, b);
+    }
+    inline std::uint64_t max(const std::uint64_t a, const std::int64_t b)
+    {
+        return sycl::max(a, static_cast<std::uint64_t>(b));
+    }
+    inline std::uint64_t max(const std::int64_t a, const std::uint64_t b)
+    {
+        return sycl::max(static_cast<std::uint64_t>(a), b);
+    }
+    inline std::int64_t max(const std::int64_t a, const std::int64_t b)
+    {
+        return sycl::max(a, b);
+    }
+    inline std::uint64_t max(const std::uint64_t a, const std::uint64_t b)
+    {
+        return sycl::max(a, b);
+    }
+    inline std::uint64_t max(const std::uint64_t a, const std::int32_t b)
+    {
+        return sycl::max(a, static_cast<std::uint64_t>(b));
+    }
+    inline std::uint64_t max(const std::int32_t a, const std::uint64_t b)
+    {
+        return sycl::max(static_cast<std::uint64_t>(a), b);
+    }
+    inline std::uint64_t max(const std::uint64_t a, const std::uint32_t b)
+    {
+        return sycl::max(a, static_cast<std::uint64_t>(b));
+    }
+    inline std::uint64_t max(const std::uint32_t a, const std::uint64_t b)
+    {
+        return sycl::max(static_cast<std::uint64_t>(a), b);
+    }
+
+    inline void
+    has_capability_or_fail(const sycl::device &dev,
+                           const std::initializer_list<sycl::aspect> &props)
+    {
+        for (const auto &it : props)
+        {
+            if (dev.has(it))
+                continue;
+            switch (it)
+            {
+            case sycl::aspect::fp64:
+                throw std::runtime_error("'double' is not supported in '" +
+                                         dev.get_info<sycl::info::device::name>() +
+                                         "' device");
+                break;
+            case sycl::aspect::fp16:
+                throw std::runtime_error("'half' is not supported in '" +
+                                         dev.get_info<sycl::info::device::name>() +
+                                         "' device");
+                break;
+            default:
+#define __SYCL_ASPECT(ASPECT, ID) \
+    case sycl::aspect::ASPECT:    \
+        return #ASPECT;
+#define __SYCL_ASPECT_DEPRECATED(ASPECT, ID, MESSAGE) __SYCL_ASPECT(ASPECT, ID)
+#define __SYCL_ASPECT_DEPRECATED_ALIAS(ASPECT, ID, MESSAGE)
+                auto getAspectNameStr = [](sycl::aspect AspectNum) -> std::string
+                {
+                    switch (AspectNum)
+                    {
+#include <sycl/info/aspects.def>
+#include <sycl/info/aspects_deprecated.def>
+                    default:
+                        return "unknown aspect";
+                    }
+                };
+#undef __SYCL_ASPECT_DEPRECATED_ALIAS
+#undef __SYCL_ASPECT_DEPRECATED
+#undef __SYCL_ASPECT
+                throw std::runtime_error(
+                    "'" + getAspectNameStr(it) + "' is not supported in '" +
+                    dev.get_info<sycl::info::device::name>() + "' device");
+            }
+            break;
+        }
+    }
+
+    static inline unsigned int get_current_device_id()
+    {
+        return dev_mgr::instance().current_device_id();
+    }
+
+    static inline device_ext &get_current_device()
+    {
+        return dev_mgr::instance().current_device();
+    }
+
+    static inline sycl::queue &get_in_order_queue()
+    {
+        return dev_mgr::instance().current_device().in_order_queue();
+    }
+
+    static sycl::event
+    dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr, size_t size,
+                memcpy_direction direction,
+                const std::vector<sycl::event> &dep_events = {})
+    {
+        if (!size)
+            return sycl::event{};
+        return q.memcpy(to_ptr, from_ptr, size, dep_events);
+        GGML_UNUSED(direction);
+    }
+
+    // Get actual copy range and make sure it will not exceed range.
+    static inline size_t get_copy_range(sycl::range<3> size, size_t slice,
+                                        size_t pitch)
+    {
+        return slice * (size.get(2) - 1) + pitch * (size.get(1) - 1) + size.get(0);
+    }
+
+    static inline size_t get_offset(sycl::id<3> id, size_t slice,
+                                    size_t pitch)
+    {
+        return slice * id.get(2) + pitch * id.get(1) + id.get(0);
+    }
+
+    /// copy 3D matrix specified by \p size from 3D matrix specified by \p from_ptr
+    /// and \p from_range to another specified by \p to_ptr and \p to_range.
+    static inline std::vector<sycl::event>
+    dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr,
+                sycl::range<3> to_range, sycl::range<3> from_range,
+                sycl::id<3> to_id, sycl::id<3> from_id,
+                sycl::range<3> size, memcpy_direction direction,
+                const std::vector<sycl::event> &dep_events = {})
+    {
+        // RAII for host pointer
+        class host_buffer
+        {
+            void *_buf;
+            size_t _size;
+            sycl::queue &_q;
+            const std::vector<sycl::event> &_deps; // free operation depends
+
+        public:
+            host_buffer(size_t size, sycl::queue &q,
+                        const std::vector<sycl::event> &deps)
+                : _buf(std::malloc(size)), _size(size), _q(q), _deps(deps) {}
+            void *get_ptr() const { return _buf; }
+            size_t get_size() const { return _size; }
+            ~host_buffer()
+            {
+                if (_buf)
+                {
+                    _q.submit([&](sycl::handler &cgh)
+                              {
+            cgh.depends_on(_deps);
+            cgh.host_task([buf = _buf] { std::free(buf); }); });
+                }
+            }
+        };
+        std::vector<sycl::event> event_list;
+
+        size_t to_slice = to_range.get(1) * to_range.get(0),
+               from_slice = from_range.get(1) * from_range.get(0);
+        unsigned char *to_surface =
+            (unsigned char *)to_ptr + get_offset(to_id, to_slice, to_range.get(0));
+        const unsigned char *from_surface =
+            (const unsigned char *)from_ptr +
+            get_offset(from_id, from_slice, from_range.get(0));
+
+        if (to_slice == from_slice && to_slice == size.get(1) * size.get(0))
+        {
+            return {dpct_memcpy(q, to_surface, from_surface, to_slice * size.get(2),
+                                direction, dep_events)};
+        }
+        direction = detail::deduce_memcpy_direction(q, to_ptr, from_ptr, direction);
+        size_t size_slice = size.get(1) * size.get(0);
+        switch (direction)
+        {
+        case host_to_host:
+            for (size_t z = 0; z < size.get(2); ++z)
+            {
+                unsigned char *to_ptr = to_surface;
+                const unsigned char *from_ptr = from_surface;
+                if (to_range.get(0) == from_range.get(0) &&
+                    to_range.get(0) == size.get(0))
+                {
+                    event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size_slice,
+                                                     direction, dep_events));
+                }
+                else
+                {
+                    for (size_t y = 0; y < size.get(1); ++y)
+                    {
+                        event_list.push_back(dpct_memcpy(q, to_ptr, from_ptr, size.get(0),
+                                                         direction, dep_events));
+                        to_ptr += to_range.get(0);
+                        from_ptr += from_range.get(0);
+                    }
+                }
+                to_surface += to_slice;
+                from_surface += from_slice;
+            }
+            break;
+        case host_to_device:
+        {
+            host_buffer buf(get_copy_range(size, to_slice, to_range.get(0)), q,
+                            event_list);
+            std::vector<sycl::event> host_events;
+            if (to_slice == size_slice)
+            {
+                // Copy host data to a temp host buffer with the shape of target.
+                host_events =
+                    dpct_memcpy(q, buf.get_ptr(), from_surface, to_range, from_range,
+                                sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size,
+                                host_to_host, dep_events);
+            }
+            else
+            {
+                // Copy host data to a temp host buffer with the shape of target.
+                host_events = dpct_memcpy(
+                    q, buf.get_ptr(), from_surface, to_range, from_range,
+                    sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0), size, host_to_host,
+                    // If has padding data, not sure whether it is useless. So fill temp
+                    // buffer with it.
+                    std::vector<sycl::event>{
+                        dpct_memcpy(q, buf.get_ptr(), to_surface, buf.get_size(),
+                                    device_to_host, dep_events)});
+            }
+            // Copy from temp host buffer to device with only one submit.
+            event_list.push_back(dpct_memcpy(q, to_surface, buf.get_ptr(),
+                                             buf.get_size(), host_to_device,
+                                             host_events));
+            break;
+        }
+        case device_to_host:
+        {
+            host_buffer buf(get_copy_range(size, from_slice, from_range.get(0)), q,
+                            event_list);
+            // Copy from host temp buffer to host target with reshaping.
+            event_list = dpct_memcpy(
+                q, to_surface, buf.get_ptr(), to_range, from_range, sycl::id<3>(0, 0, 0),
+                sycl::id<3>(0, 0, 0), size, host_to_host,
+                // Copy from device to temp host buffer with only one submit.
+                std::vector<sycl::event>{dpct_memcpy(q, buf.get_ptr(), from_surface,
+                                                     buf.get_size(),
+                                                     device_to_host, dep_events)});
+            break;
+        }
+        case device_to_device:
+            event_list.push_back(q.submit([&](sycl::handler &cgh)
+                                          {
+        cgh.depends_on(dep_events);
+        cgh.parallel_for<class dpct_memcpy_3d_detail>(
+            size,
+            [=](sycl::id<3> id) {
+                to_surface[get_offset(id, to_slice, to_range.get(0))] =
+                    from_surface[get_offset(id, from_slice, from_range.get(0))];
+            }); }));
+        break;
+        default:
+            throw std::runtime_error("dpct_memcpy: invalid direction value");
+        }
+        return event_list;
+    }
+
+    /// memcpy 2D/3D matrix specified by pitched_data.
+    static inline std::vector<sycl::event>
+    dpct_memcpy(sycl::queue &q, pitched_data to, sycl::id<3> to_id,
+                pitched_data from, sycl::id<3> from_id, sycl::range<3> size,
+                memcpy_direction direction = automatic)
+    {
+        return dpct_memcpy(q, to.get_data_ptr(), from.get_data_ptr(),
+                           sycl::range<3>(to.get_pitch(), to.get_y(), 1),
+                           sycl::range<3>(from.get_pitch(), from.get_y(), 1), to_id, from_id,
+                           size, direction);
+    }
+
+    /// memcpy 2D matrix with pitch.
+    static inline std::vector<sycl::event>
+    dpct_memcpy(sycl::queue &q, void *to_ptr, const void *from_ptr,
+                size_t to_pitch, size_t from_pitch, size_t x, size_t y,
+                memcpy_direction direction = automatic)
+    {
+        return dpct_memcpy(q, to_ptr, from_ptr, sycl::range<3>(to_pitch, y, 1),
+                           sycl::range<3>(from_pitch, y, 1),
+                           sycl::id<3>(0, 0, 0), sycl::id<3>(0, 0, 0),
+                           sycl::range<3>(x, y, 1), direction);
+    }
+
+    inline void gemm(sycl::queue &q, oneapi::mkl::transpose a_trans,
+                     oneapi::mkl::transpose b_trans, int m, int n, int k,
+                     const void *alpha, const void *a, library_data_t a_type,
+                     int lda, const void *b, library_data_t b_type, int ldb,
+                     const void *beta, void *c, library_data_t c_type, int ldc,
+                     library_data_t scaling_type)
+    {
+        if (scaling_type == library_data_t::real_float &&
+            c_type == library_data_t::complex_float)
+        {
+            scaling_type = library_data_t::complex_float;
+        }
+        else if (scaling_type == library_data_t::real_double &&
+                 c_type == library_data_t::complex_double)
+        {
+            scaling_type = library_data_t::complex_double;
+        }
+
+        std::uint64_t key =
+            detail::get_type_combination_id(a_type, b_type, c_type, scaling_type);
+        switch (key)
+        {
+        case detail::get_type_combination_id(
+            library_data_t::real_float, library_data_t::real_float,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_impl<float, float, float, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_double, library_data_t::real_double,
+            library_data_t::real_double, library_data_t::real_double):
+        {
+            detail::gemm_impl<double, double, double, double>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::complex_float, library_data_t::complex_float,
+            library_data_t::complex_float, library_data_t::complex_float):
+        {
+            detail::gemm_impl<std::complex<float>, std::complex<float>,
+                              std::complex<float>, std::complex<float>>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::complex_double, library_data_t::complex_double,
+            library_data_t::complex_double, library_data_t::complex_double):
+        {
+            detail::gemm_impl<std::complex<double>, std::complex<double>,
+                              std::complex<double>, std::complex<double>>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_half, library_data_t::real_half,
+            library_data_t::real_half, library_data_t::real_half):
+        {
+            detail::gemm_impl<sycl::half, sycl::half, sycl::half,
+                              sycl::half>(q, a_trans, b_trans, m, n, k, alpha, a,
+                                          lda, b, ldb, beta, c, ldc);
+            break;
+        }
+#ifdef __INTEL_MKL__
+        case detail::get_type_combination_id(
+            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16, float,
+                              float>(q, a_trans, b_trans, m, n, k, alpha, a, lda, b,
+                                     ldb, beta, c, ldc);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_half, library_data_t::real_half,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_impl<sycl::half, sycl::half, float, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_half, library_data_t::real_half,
+            library_data_t::real_half, library_data_t::real_float):
+        {
+            float alpha_value =
+                dpct::get_value(reinterpret_cast<const float *>(alpha), q);
+            float beta_value =
+                dpct::get_value(reinterpret_cast<const float *>(beta), q);
+            sycl::half alpha_half(alpha_value);
+            sycl::half beta_half(beta_value);
+            detail::gemm_impl<sycl::half, sycl::half, sycl::half,
+                              sycl::half>(q, a_trans, b_trans, m, n, k, &alpha_half,
+                                          a, lda, b, ldb, &beta_half, c, ldc);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_int8, library_data_t::real_int8,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_impl<std::int8_t, std::int8_t, float, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
+            library_data_t::real_bfloat16, library_data_t::real_float):
+        {
+            detail::gemm_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16,
+                              oneapi::mkl::bfloat16, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_int8, library_data_t::real_int8,
+            library_data_t::real_int32, library_data_t::real_int32):
+        {
+            float alpha_float =
+                dpct::get_value(reinterpret_cast<const std::int32_t *>(alpha), q);
+            float beta_float =
+                dpct::get_value(reinterpret_cast<const std::int32_t *>(beta), q);
+            detail::gemm_impl<std::int8_t, std::int8_t, std::int32_t, float>(
+                q, a_trans, b_trans, m, n, k, &alpha_float, a, lda, b, ldb, &beta_float, c, ldc);
+            break;
+        }
+#endif // __INTEL_MKL__
+        default:
+            throw std::runtime_error("the combination of data type is unsupported");
+        }
+    } // gemm()
+
+    /// Computes a batch of matrix-matrix product with general matrices.
+    /// \param [in] q The queue where the routine should be executed.
+    /// \param [in] a_trans Specifies the operation applied to A.
+    /// \param [in] b_trans Specifies the operation applied to B.
+    /// \param [in] m Specifies the number of rows of the matrix op(A) and of the matrix C.
+    /// \param [in] n Specifies the number of columns of the matrix op(B) and of the matrix C.
+    /// \param [in] k Specifies the number of columns of the matrix op(A) and the number of rows of the matrix op(B).
+    /// \param [in] alpha Scaling factor for the matrix-matrix product.
+    /// \param [in] a Input matrix A.
+    /// \param [in] a_type Data type of the matrix A.
+    /// \param [in] lda Leading dimension of A.
+    /// \param [in] b Input matrix B.
+    /// \param [in] b_type Data type of the matrix B.
+    /// \param [in] ldb Leading dimension of B.
+    /// \param [in] beta Scaling factor for matrix C.
+    /// \param [in, out] c Input/Output matrix C.
+    /// \param [in] c_type Data type of the matrix C.
+    /// \param [in] ldc Leading dimension of C.
+    /// \param [in] batch_size Specifies the number of matrix multiply operations to perform.
+    /// \param [in] scaling_type Data type of the scaling factors.
+    inline void gemm_batch(sycl::queue &q, oneapi::mkl::transpose a_trans,
+                           oneapi::mkl::transpose b_trans, int m, int n, int k,
+                           const void *alpha, const void *a[],
+                           library_data_t a_type, int lda, const void *b[],
+                           library_data_t b_type, int ldb, const void *beta,
+                           void *c[], library_data_t c_type, int ldc,
+                           int batch_size, library_data_t scaling_type)
+    {
+        if (scaling_type == library_data_t::real_float &&
+            c_type == library_data_t::complex_float)
+        {
+            scaling_type = library_data_t::complex_float;
+        }
+        else if (scaling_type == library_data_t::real_double &&
+                 c_type == library_data_t::complex_double)
+        {
+            scaling_type = library_data_t::complex_double;
+        }
+
+        std::uint64_t key =
+            detail::get_type_combination_id(a_type, b_type, c_type, scaling_type);
+        switch (key)
+        {
+        case detail::get_type_combination_id(
+            library_data_t::real_float, library_data_t::real_float,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_batch_impl<float, float, float, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
+                batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_double, library_data_t::real_double,
+            library_data_t::real_double, library_data_t::real_double):
+        {
+            detail::gemm_batch_impl<double, double, double, double>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
+                batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::complex_float, library_data_t::complex_float,
+            library_data_t::complex_float, library_data_t::complex_float):
+        {
+            detail::gemm_batch_impl<std::complex<float>, std::complex<float>,
+                                    std::complex<float>, std::complex<float>>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
+                batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::complex_double, library_data_t::complex_double,
+            library_data_t::complex_double, library_data_t::complex_double):
+        {
+            detail::gemm_batch_impl<std::complex<double>, std::complex<double>,
+                                    std::complex<double>, std::complex<double>>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
+                batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_half, library_data_t::real_half,
+            library_data_t::real_half, library_data_t::real_half):
+        {
+            detail::gemm_batch_impl<sycl::half, sycl::half, sycl::half,
+                                    sycl::half>(q, a_trans, b_trans, m, n, k, alpha,
+                                                a, lda, b, ldb, beta, c, ldc,
+                                                batch_size);
+            break;
+        }
+#ifdef __INTEL_MKL__
+        case detail::get_type_combination_id(
+            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
+            library_data_t::real_bfloat16, library_data_t::real_float):
+        {
+            detail::gemm_batch_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16,
+                                    oneapi::mkl::bfloat16, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
+                batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_batch_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16, float,
+                                    float>(q, a_trans, b_trans, m, n, k, alpha, a, lda,
+                                           b, ldb, beta, c, ldc, batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_int8, library_data_t::real_int8,
+            library_data_t::real_int32, library_data_t::real_int32):
+        {
+            float alpha_float =
+                dpct::get_value(reinterpret_cast<const std::int32_t *>(alpha), q);
+            float beta_float =
+                dpct::get_value(reinterpret_cast<const std::int32_t *>(beta), q);
+            detail::gemm_batch_impl<std::int8_t, std::int8_t, std::int32_t,
+                                    float>(q, a_trans, b_trans, m, n, k, &alpha_float,
+                                           a, lda, b, ldb, &beta_float, c, ldc,
+                                           batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_int8, library_data_t::real_int8,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_batch_impl<std::int8_t, std::int8_t, float, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
+                batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_half, library_data_t::real_half,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_batch_impl<sycl::half, sycl::half, float, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc,
+                batch_size);
+            break;
+        }
+#endif
+        case detail::get_type_combination_id(
+            library_data_t::real_half, library_data_t::real_half,
+            library_data_t::real_half, library_data_t::real_float):
+        {
+            float alpha_value =
+                dpct::get_value(reinterpret_cast<const float *>(alpha), q);
+            float beta_value =
+                dpct::get_value(reinterpret_cast<const float *>(beta), q);
+            sycl::half alpha_half(alpha_value);
+            sycl::half beta_half(beta_value);
+            detail::gemm_batch_impl<sycl::half, sycl::half, sycl::half, sycl::half>(
+                q, a_trans, b_trans, m, n, k, &alpha_half, a, lda, b, ldb, &beta_half, c, ldc,
+                batch_size);
+            break;
+        }
+        default:
+            throw std::runtime_error("the combination of data type is unsupported");
+        }
+    }
+
+    /// Computes a batch of matrix-matrix product with general matrices.
+    /// \param [in] q The queue where the routine should be executed.
+    /// \param [in] a_trans Specifies the operation applied to A.
+    /// \param [in] b_trans Specifies the operation applied to B.
+    /// \param [in] m Specifies the number of rows of the matrix op(A) and of the matrix C.
+    /// \param [in] n Specifies the number of columns of the matrix op(B) and of the matrix C.
+    /// \param [in] k Specifies the number of columns of the matrix op(A) and the number of rows of the matrix op(B).
+    /// \param [in] alpha Scaling factor for the matrix-matrix product.
+    /// \param [in] a Input matrix A.
+    /// \param [in] a_type Data type of the matrix A.
+    /// \param [in] lda Leading dimension of A.
+    /// \param [in] stride_a Stride between the different A matrices.
+    /// \param [in] b Input matrix B.
+    /// \param [in] b_type Data type of the matrix B.
+    /// \param [in] ldb Leading dimension of B.
+    /// \param [in] stride_b Stride between the different B matrices.
+    /// \param [in] beta Scaling factor for matrix C.
+    /// \param [in, out] c Input/Output matrix C.
+    /// \param [in] c_type Data type of the matrix C.
+    /// \param [in] ldc Leading dimension of C.
+    /// \param [in] stride_c Stride between the different C matrices.
+    /// \param [in] batch_size Specifies the number of matrix multiply operations to perform.
+    /// \param [in] scaling_type Data type of the scaling factors.
+    inline void gemm_batch(sycl::queue &q, oneapi::mkl::transpose a_trans,
+                           oneapi::mkl::transpose b_trans, int m, int n, int k,
+                           const void *alpha, const void *a, library_data_t a_type,
+                           int lda, long long int stride_a, const void *b,
+                           library_data_t b_type, int ldb, long long int stride_b,
+                           const void *beta, void *c, library_data_t c_type,
+                           int ldc, long long int stride_c, int batch_size,
+                           library_data_t scaling_type)
+    {
+        if (scaling_type == library_data_t::real_float &&
+            c_type == library_data_t::complex_float)
+        {
+            scaling_type = library_data_t::complex_float;
+        }
+        else if (scaling_type == library_data_t::real_double &&
+                 c_type == library_data_t::complex_double)
+        {
+            scaling_type = library_data_t::complex_double;
+        }
+
+        std::uint64_t key =
+            detail::get_type_combination_id(a_type, b_type, c_type, scaling_type);
+        switch (key)
+        {
+        case detail::get_type_combination_id(
+            library_data_t::real_float, library_data_t::real_float,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_batch_impl<float, float, float, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
+                beta, c, ldc, stride_c, batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_double, library_data_t::real_double,
+            library_data_t::real_double, library_data_t::real_double):
+        {
+            detail::gemm_batch_impl<double, double, double, double>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
+                beta, c, ldc, stride_c, batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::complex_float, library_data_t::complex_float,
+            library_data_t::complex_float, library_data_t::complex_float):
+        {
+            detail::gemm_batch_impl<std::complex<float>, std::complex<float>,
+                                    std::complex<float>, std::complex<float>>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
+                beta, c, ldc, stride_c, batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::complex_double, library_data_t::complex_double,
+            library_data_t::complex_double, library_data_t::complex_double):
+        {
+            detail::gemm_batch_impl<std::complex<double>, std::complex<double>,
+                                    std::complex<double>, std::complex<double>>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
+                beta, c, ldc, stride_c, batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_half, library_data_t::real_half,
+            library_data_t::real_half, library_data_t::real_half):
+        {
+            detail::gemm_batch_impl<sycl::half, sycl::half, sycl::half,
+                                    sycl::half>(q, a_trans, b_trans, m, n, k, alpha,
+                                                a, lda, stride_a, b, ldb, stride_b,
+                                                beta, c, ldc, stride_c, batch_size);
+            break;
+        }
+#ifdef __INTEL_MKL__
+        case detail::get_type_combination_id(
+            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
+            library_data_t::real_bfloat16, library_data_t::real_float):
+        {
+            detail::gemm_batch_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16,
+                                    oneapi::mkl::bfloat16, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
+                beta, c, ldc, stride_c, batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_bfloat16, library_data_t::real_bfloat16,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_batch_impl<oneapi::mkl::bfloat16, oneapi::mkl::bfloat16, float,
+                                    float>(q, a_trans, b_trans, m, n, k, alpha, a, lda,
+                                           stride_a, b, ldb, stride_b, beta, c, ldc,
+                                           stride_c, batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_int8, library_data_t::real_int8,
+            library_data_t::real_int32, library_data_t::real_int32):
+        {
+            detail::gemm_batch_impl<std::int8_t, std::int8_t, std::int32_t,
+                                    std::int32_t>(q, a_trans, b_trans, m, n, k, alpha,
+                                                  a, lda, stride_a, b, ldb, stride_b,
+                                                  beta, c, ldc, stride_c, batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_int8, library_data_t::real_int8,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_batch_impl<std::int8_t, std::int8_t, float, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
+                beta, c, ldc, stride_c, batch_size);
+            break;
+        }
+        case detail::get_type_combination_id(
+            library_data_t::real_half, library_data_t::real_half,
+            library_data_t::real_float, library_data_t::real_float):
+        {
+            detail::gemm_batch_impl<sycl::half, sycl::half, float, float>(
+                q, a_trans, b_trans, m, n, k, alpha, a, lda, stride_a, b, ldb, stride_b,
+                beta, c, ldc, stride_c, batch_size);
+            break;
+        }
+#endif
+        case detail::get_type_combination_id(
+            library_data_t::real_half, library_data_t::real_half,
+            library_data_t::real_half, library_data_t::real_float):
+        {
+            float alpha_value =
+                dpct::get_value(reinterpret_cast<const float *>(alpha), q);
+            float beta_value =
+                dpct::get_value(reinterpret_cast<const float *>(beta), q);
+            sycl::half alpha_half(alpha_value);
+            sycl::half beta_half(beta_value);
+            detail::gemm_batch_impl<sycl::half, sycl::half, sycl::half, sycl::half>(
+                q, a_trans, b_trans, m, n, k, &alpha_half, a, lda, stride_a, b, ldb, stride_b,
+                &beta_half, c, ldc, stride_c, batch_size);
+            break;
+        }
+        default:
+            throw std::runtime_error("the combination of data type is unsupported");
+        }
+    }
+
+    static inline void
+    async_dpct_memcpy(void *to_ptr, size_t to_pitch, const void *from_ptr,
+                      size_t from_pitch, size_t x, size_t y,
+                      memcpy_direction direction = automatic,
+                      sycl::queue &q = get_default_queue())
+    {
+        detail::dpct_memcpy(q, to_ptr, from_ptr, to_pitch, from_pitch, x, y,
+                            direction);
+    }
+
+    using err0 = detail::generic_error_type<struct err0_tag, int>;
+    using err1 = detail::generic_error_type<struct err1_tag, int>;
+
+    static inline void dpct_free(void *ptr, sycl::queue &q = get_default_queue()) {
+        detail::dpct_free(ptr, q);
+    }
+
+    /// dpct accessor used as device function parameter.
+    template <class T, memory_region Memory, size_t Dimension> class accessor;
+    template <class T, memory_region Memory> class accessor<T, Memory, 3> {
+    public:
+        using memory_t = detail::memory_traits<Memory, T>;
+        using element_t = typename memory_t::element_t;
+        using pointer_t = typename memory_t::pointer_t;
+        using accessor_t = typename memory_t::template accessor_t<3>;
+        accessor(pointer_t data, const sycl::range<3> &in_range)
+            : _data(data), _range(in_range) {}
+        template <memory_region M = Memory>
+        accessor(typename std::enable_if<M != local, const accessor_t>::type &acc)
+            : accessor(acc, acc.get_range()) {}
+        accessor(const accessor_t &acc, const sycl::range<3> &in_range)
+            : accessor(acc.get_pointer(), in_range) {}
+        accessor<T, Memory, 2> operator[](size_t index) const {
+            sycl::range<2> sub(_range.get(1), _range.get(2));
+            return accessor<T, Memory, 2>(_data + index * sub.size(), sub);
+        }
+
+        pointer_t get_ptr() const { return _data; }
+
+    private:
+        pointer_t _data;
+        sycl::range<3> _range;
+    };
+    template <class T, memory_region Memory> class accessor<T, Memory, 2> {
+    public:
+        using memory_t = detail::memory_traits<Memory, T>;
+        using element_t = typename memory_t::element_t;
+        using pointer_t = typename memory_t::pointer_t;
+        using accessor_t = typename memory_t::template accessor_t<2>;
+        accessor(pointer_t data, const sycl::range<2> &in_range)
+            : _data(data), _range(in_range) {}
+        template <memory_region M = Memory>
+        accessor(typename std::enable_if<M != local, const accessor_t>::type &acc)
+            : accessor(acc, acc.get_range()) {}
+        accessor(const accessor_t &acc, const sycl::range<2> &in_range)
+            : accessor(acc.get_pointer(), in_range) {}
+
+        pointer_t operator[](size_t index) const {
+            return _data + _range.get(1) * index;
+        }
+
+        pointer_t get_ptr() const { return _data; }
+
+    private:
+        pointer_t _data;
+        sycl::range<2> _range;
+    };
+
+    namespace detail {
+        /// Device variable with address space of shared, global or constant.
+        template <class T, memory_region Memory, size_t Dimension> class device_memory {
+        public:
+            using accessor_t =
+                typename detail::memory_traits<Memory,
+                                            T>::template accessor_t<Dimension>;
+            using value_t = typename detail::memory_traits<Memory, T>::value_t;
+            using dpct_accessor_t = dpct::accessor<T, Memory, Dimension>;
+
+            device_memory() : device_memory(sycl::range<Dimension>(1)) {}
+
+            /// Constructor of 1-D array with initializer list
+            device_memory(const sycl::range<Dimension> &in_range,
+                        std::initializer_list<value_t> &&init_list)
+                : device_memory(in_range) {
+                assert(init_list.size() <= in_range.size());
+                _host_ptr = (value_t *)std::malloc(_size);
+                std::memset(_host_ptr, 0, _size);
+                std::memcpy(_host_ptr, init_list.begin(), init_list.size() * sizeof(T));
+            }
+
+            /// Constructor of 2-D array with initializer list
+            template <size_t D = Dimension>
+            device_memory(
+                const typename std::enable_if<D == 2, sycl::range<2>>::type &in_range,
+                std::initializer_list<std::initializer_list<value_t>> &&init_list)
+                : device_memory(in_range) {
+                assert(init_list.size() <= in_range[0]);
+                _host_ptr = (value_t *)std::malloc(_size);
+                std::memset(_host_ptr, 0, _size);
+                auto tmp_data = _host_ptr;
+                for (auto sub_list : init_list) {
+                    assert(sub_list.size() <= in_range[1]);
+                    std::memcpy(tmp_data, sub_list.begin(),
+                                sub_list.size() * sizeof(T));
+                    tmp_data += in_range[1];
+                }
+            }
+
+            /// Constructor with range
+            device_memory(const sycl::range<Dimension> &range_in)
+                : _size(range_in.size() * sizeof(T)), _range(range_in),
+                _reference(false), _host_ptr(nullptr), _device_ptr(nullptr) {
+                static_assert(
+                    (Memory == global) || (Memory == constant) || (Memory == shared),
+                    "device memory region should be global, constant or shared");
+                // Make sure that singleton class mem_mgr and dev_mgr will destruct
+                // later than this.
+                detail::mem_mgr::instance();
+                dev_mgr::instance();
+            }
+
+            /// Constructor with range
+            template <class... Args>
+            device_memory(Args... Arguments)
+                : device_memory(sycl::range<Dimension>(Arguments...)) {}
+
+            ~device_memory() {
+                if (_device_ptr && !_reference)
+                    dpct::dpct_free(_device_ptr);
+                if (_host_ptr)
+                    std::free(_host_ptr);
+            }
+
+            /// Allocate memory with default queue, and init memory if has initial
+            /// value.
+            void init() { init(dpct::get_default_queue()); }
+            /// Allocate memory with specified queue, and init memory if has initial
+            /// value.
+            void init(sycl::queue &q) {
+                if (_device_ptr)
+                    return;
+                if (!_size)
+                    return;
+                allocate_device(q);
+                if (_host_ptr)
+                    detail::dpct_memcpy(q, _device_ptr, _host_ptr, _size,
+                                        host_to_device);
+            }
+
+            /// The variable is assigned to a device pointer.
+            void assign(value_t *src, size_t size) {
+                this->~device_memory();
+                new (this) device_memory(src, size);
+            }
+
+            /// Get memory pointer of the memory object, which is virtual pointer when
+            /// usm is not used, and device pointer when usm is used.
+            value_t *get_ptr() { return get_ptr(get_default_queue()); }
+            /// Get memory pointer of the memory object, which is virtual pointer when
+            /// usm is not used, and device pointer when usm is used.
+            value_t *get_ptr(sycl::queue &q) {
+                init(q);
+                return _device_ptr;
+            }
+
+            /// Get the device memory object size in bytes.
+            size_t get_size() { return _size; }
+
+            template <size_t D = Dimension>
+            typename std::enable_if<D == 1, T>::type &operator[](size_t index) {
+                init();
+                return _device_ptr[index];
+            }
+
+            /// Get dpct::accessor with dimension info for the device memory object
+            /// when usm is used and dimension is greater than 1.
+            template <size_t D = Dimension>
+            typename std::enable_if<D != 1, dpct_accessor_t>::type
+            get_access([[maybe_unused]] sycl::handler &cgh) {
+                return dpct_accessor_t((T *)_device_ptr, _range);
+            }
+
+        private:
+            device_memory(value_t *memory_ptr, size_t size)
+                : _size(size), _range(size / sizeof(T)), _reference(true),
+                _device_ptr(memory_ptr) {}
+
+            void allocate_device(sycl::queue &q) {
+        #ifndef DPCT_USM_LEVEL_NONE
+                if (Memory == shared) {
+                    _device_ptr = (value_t *)sycl::malloc_shared(_size, q.get_device(),
+                                                                q.get_context());
+                    return;
+                }
+        #ifdef SYCL_EXT_ONEAPI_USM_DEVICE_READ_ONLY
+                if (Memory == constant) {
+                    _device_ptr = (value_t *)sycl::malloc_device(
+                        _size, q.get_device(), q.get_context(),
+                        sycl::ext::oneapi::property::usm::device_read_only());
+                    return;
+                }
+        #endif
+        #endif
+                _device_ptr = (value_t *)detail::dpct_malloc(_size, q);
+            }
+
+            size_t _size;
+            sycl::range<Dimension> _range;
+            bool _reference;
+            value_t *_host_ptr;
+            value_t *_device_ptr;
+        };
+        template <class T, memory_region Memory>
+        class device_memory<T, Memory, 0> : public device_memory<T, Memory, 1> {
+        public:
+            using base = device_memory<T, Memory, 1>;
+            using value_t = typename base::value_t;
+            using accessor_t =
+                typename detail::memory_traits<Memory, T>::template accessor_t<0>;
+
+            /// Constructor with initial value.
+            device_memory(const value_t &val) : base(sycl::range<1>(1), {val}) {}
+
+            /// Default constructor
+            device_memory() : base(1) {}
+        };
+        } // namespace detail
+
+    template <class T, size_t Dimension>
+    using global_memory = detail::device_memory<T, global, Dimension>;
+    template <class T, size_t Dimension>
+    using constant_memory = detail::device_memory<T, constant, Dimension>;
+    template <class T, size_t Dimension>
+    using shared_memory = detail::device_memory<T, shared, Dimension>;
+
+
+    template <typename T,
+            sycl::access::address_space addressSpace =
+                sycl::access::address_space::global_space,
+            sycl::memory_order memoryOrder = sycl::memory_order::relaxed,
+            sycl::memory_scope memoryScope = sycl::memory_scope::device>
+    inline T atomic_fetch_add(T *addr, T operand) {
+    auto atm =
+        sycl::atomic_ref<T, memoryOrder, memoryScope, addressSpace>(addr[0]);
+    return atm.fetch_add(operand);
+    }
+
+    template <sycl::access::address_space addressSpace =
+                sycl::access::address_space::global_space,
+            sycl::memory_order memoryOrder = sycl::memory_order::relaxed,
+            sycl::memory_scope memoryScope = sycl::memory_scope::device,
+            typename T1, typename T2>
+    inline T1 atomic_fetch_add(T1 *addr, T2 operand) {
+    auto atm =
+        sycl::atomic_ref<T1, memoryOrder, memoryScope, addressSpace>(addr[0]);
+    return atm.fetch_add(operand);
+    }
+
+    template <typename T, sycl::access::address_space addressSpace =
+                            sycl::access::address_space::global_space>
+    inline T atomic_fetch_add(T *addr, T operand,
+                            sycl::memory_order memoryOrder) {
+    switch (memoryOrder) {
+        case sycl::memory_order::relaxed:
+            return atomic_fetch_add<T, addressSpace, sycl::memory_order::relaxed,
+                                    sycl::memory_scope::device>(addr, operand);
+        case sycl::memory_order::acq_rel:
+            return atomic_fetch_add<T, addressSpace, sycl::memory_order::acq_rel,
+                                    sycl::memory_scope::device>(addr, operand);
+        case sycl::memory_order::seq_cst:
+            return atomic_fetch_add<T, addressSpace, sycl::memory_order::seq_cst,
+                                    sycl::memory_scope::device>(addr, operand);
+        default:
+            assert(false && "Invalid memory_order for atomics. Valid memory_order for "
+                            "atomics are: sycl::memory_order::relaxed, "
+                            "sycl::memory_order::acq_rel, sycl::memory_order::seq_cst!");
+        }
+    }
+
+    template <sycl::access::address_space addressSpace =
+                sycl::access::address_space::global_space,
+            typename T1, typename T2>
+    inline T1 atomic_fetch_add(T1 *addr, T2 operand,
+                            sycl::memory_order memoryOrder) {
+    atomic_fetch_add<T1, addressSpace>(addr, operand, memoryOrder);
+    }
+
+} // COPY from DPCT head files
+
+#endif // GGML_SYCL_DPCT_HELPER_HPP
diff --git a/ggml/src/ggml-sycl/mmq.cpp b/ggml/src/ggml-sycl/mmq.cpp
new file mode 100644 (file)
index 0000000..b514f00
--- /dev/null
@@ -0,0 +1,3031 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#include "mmq.hpp"
+#include "vecdotq.hpp"
+
+typedef void (*allocate_tiles_sycl_t)(
+    int** x_ql,
+    sycl::half2** x_dm,
+    int** x_qh,
+    int** x_sc);
+typedef void (*load_tiles_sycl_t)(
+    const void* __restrict__ vx,
+    int* __restrict__ x_ql,
+    sycl::half2* __restrict__ x_dm,
+    int* __restrict__ x_qh,
+    int* __restrict__ x_sc,
+    const int& i_offset,
+    const int& i_max,
+    const int& k,
+    const int& blocks_per_row);
+typedef float (*vec_dot_q_mul_mat_sycl_t)(
+    const int* __restrict__ x_ql,
+    const sycl::half2* __restrict__ x_dm,
+    const int* __restrict__ x_qh,
+    const int* __restrict__ x_sc,
+    const int* __restrict__ y_qs,
+    const sycl::half2* __restrict__ y_ms,
+    const int& i,
+    const int& j,
+    const int& k);
+
+
+template <int mmq_y>
+static __dpct_inline__ void
+allocate_tiles_q4_0(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
+                    int *tile_x_qs_q4_0, float *tile_x_d_q4_0) {
+    (void)x_qh; (void)x_sc;
+
+    *x_ql = tile_x_qs_q4_0;
+    *x_dm = (sycl::half2 *)tile_x_d_q4_0;
+}
+
+template <int mmq_y, int nwarps, bool need_check>
+static __dpct_inline__ void
+load_tiles_q4_0(const void *__restrict__ vx, int *__restrict__ x_ql,
+                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
+                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
+                const int &k, const int &blocks_per_row) {
+    (void)x_qh; (void)x_sc;
+    GGML_SYCL_ASSUME(i_offset >= 0);
+    GGML_SYCL_ASSUME(i_offset <  nwarps);
+    GGML_SYCL_ASSUME(k >= 0);
+    GGML_SYCL_ASSUME(k <  WARP_SIZE);
+
+    const int kbx  = k / QI4_0;
+    const int kqsx = k % QI4_0;
+
+    const block_q4_0 * bx0 = (const block_q4_0 *) vx;
+
+    float * x_dmf = (float *) x_dm;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + i_offset;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q4_0 * bxi = bx0 + i*blocks_per_row + kbx;
+
+        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8(bxi->qs, kqsx);
+        // x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbx] = bxi->d;
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI4_0;
+    const int kbxd = k % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_0) {
+        int i = i0 + i_offset * QI4_0 + k / blocks_per_tile_x_row;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q4_0 * bxi = bx0 + i*blocks_per_row + kbxd;
+
+        x_dmf[i * (WARP_SIZE/QI4_0) + i / QI4_0 + kbxd] = bxi->d;
+    }
+}
+
+static __dpct_inline__ float vec_dot_q4_0_q8_1_mul_mat(
+    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
+    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
+    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
+    const int &i, const int &j, const int &k) {
+    (void)x_qh; (void)x_sc;
+
+    const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2));
+    const float * x_dmf = (const float *) x_dm;
+
+    int u[2*VDR_Q4_0_Q8_1_MMQ];
+
+#pragma unroll
+    for (int l = 0; l < VDR_Q4_0_Q8_1_MMQ; ++l) {
+        u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l)         % WARP_SIZE];
+        u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI4_0) % WARP_SIZE];
+    }
+
+    return vec_dot_q4_0_q8_1_impl<VDR_Q4_0_Q8_1_MMQ>
+        (&x_ql[i * (WARP_SIZE + 1) + k], u, x_dmf[i * (WARP_SIZE/QI4_0) + i/QI4_0 + k/QI4_0],
+         y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]);
+}
+
+template <int mmq_y>
+static __dpct_inline__ void
+allocate_tiles_q4_1(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
+                    int *tile_x_qs_q4_1, sycl::half2 *tile_x_dm_q4_1) {
+    (void)x_qh; (void)x_sc;
+
+    *x_ql = tile_x_qs_q4_1;
+    *x_dm = tile_x_dm_q4_1;
+}
+
+
+template <int mmq_y, int nwarps, bool need_check>
+static __dpct_inline__ void
+load_tiles_q4_1(const void *__restrict__ vx, int *__restrict__ x_ql,
+                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
+                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
+                const int &k, const int &blocks_per_row) {
+    (void)x_qh; (void)x_sc;
+
+    GGML_SYCL_ASSUME(i_offset >= 0);
+    GGML_SYCL_ASSUME(i_offset <  nwarps);
+    GGML_SYCL_ASSUME(k >= 0);
+    GGML_SYCL_ASSUME(k <  WARP_SIZE);
+
+    const int kbx  = k / QI4_1;
+    const int kqsx = k % QI4_1;
+
+    const block_q4_1 * bx0 = (const block_q4_1 *) vx;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + i_offset;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q4_1 * bxi = bx0 + i*blocks_per_row + kbx;
+
+        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx);
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI4_1;
+    const int kbxd = k % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_1) {
+        int i = i0 + i_offset * QI4_1 + k / blocks_per_tile_x_row;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q4_1 * bxi = bx0 + i*blocks_per_row + kbxd;
+
+        x_dm[i * (WARP_SIZE/QI4_1) + i / QI4_1 + kbxd] = bxi->dm;
+    }
+}
+
+static __dpct_inline__ float vec_dot_q4_1_q8_1_mul_mat(
+    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
+    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
+    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
+    const int &i, const int &j, const int &k) {
+    (void)x_qh; (void)x_sc;
+
+    const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2));
+
+    int u[2*VDR_Q4_1_Q8_1_MMQ];
+
+#pragma unroll
+    for (int l = 0; l < VDR_Q4_1_Q8_1_MMQ; ++l) {
+        u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l)         % WARP_SIZE];
+        u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI4_1) % WARP_SIZE];
+    }
+
+    return vec_dot_q4_1_q8_1_impl<VDR_Q4_1_Q8_1_MMQ>
+        (&x_ql[i * (WARP_SIZE + 1) + k], u, x_dm[i * (WARP_SIZE/QI4_1) + i/QI4_1 + k/QI4_1],
+         y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]);
+}
+
+template <int mmq_y>
+static __dpct_inline__ void
+allocate_tiles_q5_0(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
+                    int *tile_x_ql_q5_0, float *tile_x_d_q5_0) {
+    (void)x_qh; (void)x_sc;
+
+    *x_ql = tile_x_ql_q5_0;
+    *x_dm = (sycl::half2 *)tile_x_d_q5_0;
+}
+
+template <int mmq_y, int nwarps, bool need_check>
+static __dpct_inline__ void
+load_tiles_q5_0(const void *__restrict__ vx, int *__restrict__ x_ql,
+                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
+                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
+                const int &k, const int &blocks_per_row) {
+    (void)x_qh; (void)x_sc;
+
+    GGML_SYCL_ASSUME(i_offset >= 0);
+    GGML_SYCL_ASSUME(i_offset <  nwarps);
+    GGML_SYCL_ASSUME(k >= 0);
+    GGML_SYCL_ASSUME(k <  WARP_SIZE);
+
+    const int kbx  = k / QI5_0;
+    const int kqsx = k % QI5_0;
+
+    const block_q5_0 * bx0 = (const block_q5_0 *) vx;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + i_offset;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q5_0 * bxi = bx0 + i*blocks_per_row + kbx;
+
+        const int ql = get_int_from_uint8(bxi->qs, kqsx);
+        const int qh = get_int_from_uint8(bxi->qh, 0) >> (4 * (k % QI5_0));
+
+        int qs0 = (ql >>  0)   & 0x0F0F0F0F;
+        qs0    |= (qh <<  4)   & 0x00000010;  // 0 ->  4
+        qs0    |= (qh << 11)   & 0x00001000;  // 1 -> 12
+        qs0    |= (qh << 18)   & 0x00100000;  // 2 -> 20
+        qs0    |= (qh << 25)   & 0x10000000;  // 3 -> 28
+        qs0 = dpct::vectorized_binary<sycl::char4>(
+            qs0, 0x10101010, dpct::sub_sat()); // subtract 16
+
+        x_ql[i * (2*WARP_SIZE + 1) + 2*k+0] = qs0;
+
+        int qs1 = (ql >>  4)   & 0x0F0F0F0F;
+        qs1    |= (qh >> 12)   & 0x00000010;  // 16 ->  4
+        qs1    |= (qh >>  5)   & 0x00001000;  // 17 -> 12
+        qs1    |= (qh <<  2)   & 0x00100000;  // 18 -> 20
+        qs1    |= (qh <<  9)   & 0x10000000;  // 19 -> 28
+        qs1 = dpct::vectorized_binary<sycl::char4>(
+            qs1, 0x10101010, dpct::sub_sat()); // subtract 16
+
+        x_ql[i * (2*WARP_SIZE + 1) + 2*k+1] = qs1;
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI5_0;
+    const int kbxd = k % blocks_per_tile_x_row;
+    float * x_dmf = (float *) x_dm;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_0) {
+        int i = i0 + i_offset * QI5_0 + k / blocks_per_tile_x_row;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q5_0 * bxi = bx0 + i*blocks_per_row + kbxd;
+
+        x_dmf[i * (WARP_SIZE/QI5_0) + i / QI5_0 + kbxd] = bxi->d;
+    }
+}
+
+static __dpct_inline__ float vec_dot_q5_0_q8_1_mul_mat(
+    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
+    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
+    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
+    const int &i, const int &j, const int &k) {
+    (void)x_qh; (void)x_sc;
+
+    const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2));
+    const int index_bx = i * (WARP_SIZE/QI5_0) + i/QI5_0 + k/QI5_0;
+    const float * x_dmf = (const float *) x_dm;
+    const float * y_df  = (const float *) y_ds;
+
+    int u[2*VDR_Q5_0_Q8_1_MMQ];
+
+#pragma unroll
+    for (int l = 0; l < VDR_Q5_0_Q8_1_MMQ; ++l) {
+        u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l)         % WARP_SIZE];
+        u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI5_0) % WARP_SIZE];
+    }
+
+    return vec_dot_q8_0_q8_1_impl<QR5_0*VDR_Q5_0_Q8_1_MMQ>
+        (&x_ql[i * (2*WARP_SIZE + 1) + 2 * k], u, x_dmf[index_bx], y_df[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]);
+}
+
+template <int mmq_y>
+static __dpct_inline__ void
+allocate_tiles_q5_1(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
+                    int *tile_x_ql_q5_1, sycl::half2 *tile_x_dm_q5_1) {
+    (void)x_qh; (void)x_sc;
+
+    *x_ql = tile_x_ql_q5_1;
+    *x_dm = tile_x_dm_q5_1;
+}
+
+template <int mmq_y, int nwarps, bool need_check>
+static __dpct_inline__ void
+load_tiles_q5_1(const void *__restrict__ vx, int *__restrict__ x_ql,
+                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
+                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
+                const int &k, const int &blocks_per_row) {
+    (void)x_qh; (void)x_sc;
+
+    GGML_SYCL_ASSUME(i_offset >= 0);
+    GGML_SYCL_ASSUME(i_offset < nwarps);
+    GGML_SYCL_ASSUME(k >= 0);
+    GGML_SYCL_ASSUME(k <  WARP_SIZE);
+
+    const int kbx  = k / QI5_1;
+    const int kqsx = k % QI5_1;
+
+    const block_q5_1 * bx0 = (const block_q5_1 *) vx;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + i_offset;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q5_1 * bxi = bx0 + i*blocks_per_row + kbx;
+
+        const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx);
+        const int qh = get_int_from_uint8_aligned(bxi->qh, 0) >> (4 * (k % QI5_1));
+
+        int qs0 = (ql >>  0) & 0x0F0F0F0F;
+        qs0    |= (qh <<  4) & 0x00000010; // 0 ->  4
+        qs0    |= (qh << 11) & 0x00001000; // 1 -> 12
+        qs0    |= (qh << 18) & 0x00100000; // 2 -> 20
+        qs0    |= (qh << 25) & 0x10000000; // 3 -> 28
+
+        x_ql[i * (2*WARP_SIZE + 1) + 2*k+0] = qs0;
+
+        int qs1 = (ql >>  4) & 0x0F0F0F0F;
+        qs1    |= (qh >> 12) & 0x00000010; // 16 ->  4
+        qs1    |= (qh >>  5) & 0x00001000; // 17 -> 12
+        qs1    |= (qh <<  2) & 0x00100000; // 18 -> 20
+        qs1    |= (qh <<  9) & 0x10000000; // 19 -> 28
+
+        x_ql[i * (2*WARP_SIZE + 1) + 2*k+1] = qs1;
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI5_1;
+    const int kbxd = k % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_1) {
+        int i = i0 + i_offset * QI5_1 + k / blocks_per_tile_x_row;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q5_1 * bxi = bx0 + i*blocks_per_row + kbxd;
+
+        x_dm[i * (WARP_SIZE/QI5_1) + i / QI5_1 + kbxd] = bxi->dm;
+    }
+}
+
+static __dpct_inline__ float vec_dot_q5_1_q8_1_mul_mat(
+    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
+    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
+    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
+    const int &i, const int &j, const int &k) {
+    (void)x_qh; (void)x_sc;
+
+    const int kyqs = k % (QI8_1/2) + QI8_1 * (k / (QI8_1/2));
+    const int index_bx = i * (WARP_SIZE/QI5_1) + + i/QI5_1 + k/QI5_1;
+
+    int u[2*VDR_Q5_1_Q8_1_MMQ];
+
+#pragma unroll
+    for (int l = 0; l < VDR_Q5_1_Q8_1_MMQ; ++l) {
+        u[2*l+0] = y_qs[j * WARP_SIZE + (kyqs + l)         % WARP_SIZE];
+        u[2*l+1] = y_qs[j * WARP_SIZE + (kyqs + l + QI5_1) % WARP_SIZE];
+    }
+
+    return vec_dot_q8_1_q8_1_impl<QR5_1*VDR_Q5_1_Q8_1_MMQ>
+        (&x_ql[i * (2*WARP_SIZE + 1) + 2 * k], u, x_dm[index_bx], y_ds[j * (WARP_SIZE/QI8_1) + (2*k/QI8_1) % (WARP_SIZE/QI8_1)]);
+}
+
+template <int mmq_y>
+static __dpct_inline__ void
+allocate_tiles_q8_0(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
+                    int *tile_x_qs_q8_0, float *tile_x_d_q8_0) {
+    (void)x_qh; (void)x_sc;
+
+    *x_ql = tile_x_qs_q8_0;
+    *x_dm = (sycl::half2 *)tile_x_d_q8_0;
+}
+
+template <int mmq_y, int nwarps, bool need_check>
+static __dpct_inline__ void
+load_tiles_q8_0(const void *__restrict__ vx, int *__restrict__ x_ql,
+                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
+                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
+                const int &k, const int &blocks_per_row) {
+    (void)x_qh; (void)x_sc;
+
+    GGML_SYCL_ASSUME(i_offset >= 0);
+    GGML_SYCL_ASSUME(i_offset <  nwarps);
+    GGML_SYCL_ASSUME(k >= 0);
+    GGML_SYCL_ASSUME(k <  WARP_SIZE);
+
+    const int kbx  = k / QI8_0;
+    const int kqsx = k % QI8_0;
+    float * x_dmf = (float *) x_dm;
+
+    const block_q8_0 * bx0 = (const block_q8_0 *) vx;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + i_offset;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q8_0 * bxi = bx0 + i*blocks_per_row + kbx;
+
+        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_int8(bxi->qs, kqsx);
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI8_0;
+    const int kbxd = k % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI8_0) {
+        int i = i0 + i_offset * QI8_0 + k / blocks_per_tile_x_row;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q8_0 * bxi = bx0 + i*blocks_per_row + kbxd;
+
+        x_dmf[i * (WARP_SIZE/QI8_0) + i / QI8_0 + kbxd] = bxi->d;
+    }
+}
+
+static __dpct_inline__ float vec_dot_q8_0_q8_1_mul_mat(
+    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
+    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
+    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
+    const int &i, const int &j, const int &k) {
+    (void)x_qh; (void)x_sc;
+
+    const float * x_dmf = (const float *) x_dm;
+    const float * y_df  = (const float *) y_ds;
+
+    return vec_dot_q8_0_q8_1_impl<VDR_Q8_0_Q8_1_MMQ>
+        (&x_ql[i * (WARP_SIZE + 1) + k], &y_qs[j * WARP_SIZE + k], x_dmf[i * (WARP_SIZE/QI8_0) + i/QI8_0 + k/QI8_0],
+         y_df[j * (WARP_SIZE/QI8_1) + k/QI8_1]);
+}
+
+template <int mmq_y>
+static __dpct_inline__ void
+allocate_tiles_q2_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
+                    int *tile_x_ql_q2_K, sycl::half2 *tile_x_dm_q2_K,
+                    int *tile_x_sc_q2_K) {
+    (void)x_qh;
+
+    *x_ql = tile_x_ql_q2_K;
+    *x_dm = tile_x_dm_q2_K;
+    *x_sc = tile_x_sc_q2_K;
+}
+
+template <int mmq_y, int nwarps, bool need_check>
+static __dpct_inline__ void
+load_tiles_q2_K(const void *__restrict__ vx, int *__restrict__ x_ql,
+                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
+                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
+                const int &k, const int &blocks_per_row) {
+    (void)x_qh;
+
+    GGML_SYCL_ASSUME(i_offset >= 0);
+    GGML_SYCL_ASSUME(i_offset <  nwarps);
+    GGML_SYCL_ASSUME(k >= 0);
+    GGML_SYCL_ASSUME(k <  WARP_SIZE);
+
+    const int kbx  = k / QI2_K;
+    const int kqsx = k % QI2_K;
+
+    const block_q2_K * bx0 = (const block_q2_K *) vx;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + i_offset;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q2_K * bxi = bx0 + i*blocks_per_row + kbx;
+
+        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx);
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI2_K;
+    const int kbxd = k % blocks_per_tile_x_row;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI2_K) {
+        int i = (i0 + i_offset * QI2_K + k / blocks_per_tile_x_row) % mmq_y;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q2_K * bxi = bx0 + i*blocks_per_row + kbxd;
+
+        x_dm[i * (WARP_SIZE/QI2_K) + i / QI2_K + kbxd] = bxi->dm;
+    }
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) {
+        int i = i0 + i_offset * 4 + k / (WARP_SIZE/4);
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q2_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/4)) / (QI2_K/4);
+
+        x_sc[i * (WARP_SIZE/4) + i / 4 + k % (WARP_SIZE/4)] = get_int_from_uint8_aligned(bxi->scales, k % (QI2_K/4));
+    }
+}
+
+#define VDR_Q2_K_Q8_1_MMQ  2
+// contiguous u/y values
+static __dpct_inline__ float
+vec_dot_q2_K_q8_1_impl_mmq(const int *__restrict__ v, const int *__restrict__ u,
+                           const uint8_t *__restrict__ scales,
+                           const sycl::half2 &dm2, const float &d8) {
+
+    int sumi_d = 0;
+    int sumi_m = 0;
+
+#pragma unroll
+    for (int i0 = 0; i0 < QI8_1; i0 += QI8_1/2) {
+        int sumi_d_sc = 0;
+
+        const int sc = scales[i0 / (QI8_1/2)];
+
+        // fill int with 4x m
+        int m = sc >> 4;
+        m |= m <<  8;
+        m |= m << 16;
+
+#pragma unroll
+        for (int i = i0; i < i0 + QI8_1/2; ++i) {
+            sumi_d_sc = dpct::dp4a(v[i], u[i], sumi_d_sc); // SIMD dot product
+            sumi_m = dpct::dp4a(m, u[i],
+                                sumi_m); // multiply sum of q8_1 values with m
+        }
+
+        sumi_d += sumi_d_sc * (sc & 0xF);
+    }
+
+    const sycl::float2 dm2f =
+        dm2.convert<float, sycl::rounding_mode::automatic>();
+
+    return d8 * (dm2f.x() * sumi_d - dm2f.y() * sumi_m);
+}
+
+static __dpct_inline__ float vec_dot_q2_K_q8_1_mul_mat(
+    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
+    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
+    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
+    const int &i, const int &j, const int &k) {
+    (void)x_qh;
+
+    const int kbx = k / QI2_K;
+    const int ky  = (k % QI2_K) * QR2_K;
+    const float * y_df = (const float *) y_ds;
+
+    int v[QR2_K*VDR_Q2_K_Q8_1_MMQ];
+
+    const int kqsx = i * (WARP_SIZE + 1) + kbx*QI2_K + (QI2_K/2) * (ky/(2*QI2_K)) + ky % (QI2_K/2);
+    const int shift = 2 * ((ky % (2*QI2_K)) / (QI2_K/2));
+
+#pragma unroll
+    for (int l = 0; l < QR2_K*VDR_Q2_K_Q8_1_MMQ; ++l) {
+        v[l] = (x_ql[kqsx + l] >> shift) & 0x03030303;
+    }
+
+    const uint8_t * scales = ((const uint8_t *) &x_sc[i * (WARP_SIZE/4) + i/4 + kbx*4]) + ky/4;
+
+    const int index_y = j * WARP_SIZE + (QR2_K*k) % WARP_SIZE;
+    return vec_dot_q2_K_q8_1_impl_mmq(v, &y_qs[index_y], scales, x_dm[i * (WARP_SIZE/QI2_K) + i/QI2_K + kbx], y_df[index_y/QI8_1]);
+}
+
+template <int mmq_y>
+static __dpct_inline__ void
+allocate_tiles_q3_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
+                    int *tile_x_ql_q3_K, sycl::half2 *tile_x_dm_q3_K,
+                    int *tile_x_qh_q3_K, int *tile_x_sc_q3_K) {
+
+    *x_ql = tile_x_ql_q3_K;
+    *x_dm = tile_x_dm_q3_K;
+    *x_qh = tile_x_qh_q3_K;
+    *x_sc = tile_x_sc_q3_K;
+}
+
+template <int mmq_y, int nwarps, bool need_check>
+static __dpct_inline__ void
+load_tiles_q3_K(const void *__restrict__ vx, int *__restrict__ x_ql,
+                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
+                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
+                const int &k, const int &blocks_per_row) {
+
+    GGML_SYCL_ASSUME(i_offset >= 0);
+    GGML_SYCL_ASSUME(i_offset <  nwarps);
+    GGML_SYCL_ASSUME(k >= 0);
+    GGML_SYCL_ASSUME(k <  WARP_SIZE);
+
+    const int kbx  = k / QI3_K;
+    const int kqsx = k % QI3_K;
+
+    const block_q3_K * bx0 = (const block_q3_K *) vx;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + i_offset;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q3_K * bxi = bx0 + i*blocks_per_row + kbx;
+
+        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8(bxi->qs, kqsx);
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI3_K;
+    const int kbxd = k % blocks_per_tile_x_row;
+    float * x_dmf = (float *) x_dm;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI3_K) {
+        int i = (i0 + i_offset * QI3_K + k / blocks_per_tile_x_row) % mmq_y;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q3_K * bxi = bx0 + i*blocks_per_row + kbxd;
+
+        x_dmf[i * (WARP_SIZE/QI3_K) + i / QI3_K + kbxd] = bxi->d;
+    }
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 2) {
+        int i = i0 + i_offset * 2 + k / (WARP_SIZE/2);
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q3_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/2)) / (QI3_K/2);
+
+        // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted
+        x_qh[i * (WARP_SIZE/2) + i / 2 + k % (WARP_SIZE/2)] = ~get_int_from_uint8(bxi->hmask, k % (QI3_K/2));
+    }
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 4) {
+        int i = i0 + i_offset * 4 + k / (WARP_SIZE/4);
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q3_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/4)) / (QI3_K/4);
+
+        const int ksc = k % (QI3_K/4);
+
+        const int ksc_low = ksc % (QI3_K/8);
+        const int shift_low = 4 * (ksc / (QI3_K/8));
+        const int sc_low = (get_int_from_uint8(bxi->scales, ksc_low) >> shift_low) & 0x0F0F0F0F;
+
+        const int ksc_high = QI3_K/8;
+        const int shift_high = 2 * ksc;
+        const int sc_high = ((get_int_from_uint8(bxi->scales, ksc_high) >> shift_high) << 4) & 0x30303030;
+
+        const int sc = dpct::vectorized_binary<sycl::char4>(
+            sc_low | sc_high, 0x20202020, dpct::sub_sat());
+
+        x_sc[i * (WARP_SIZE/4) + i / 4 + k % (WARP_SIZE/4)] = sc;
+    }
+}
+
+#define VDR_Q3_K_Q8_1_MMQ  2
+// contiguous u/y values
+static __dpct_inline__ float
+vec_dot_q3_K_q8_1_impl_mmq(const int *__restrict__ v, const int *__restrict__ u,
+                           const int8_t *__restrict__ scales, const float &d3,
+                           const float &d8) {
+
+    int sumi = 0;
+
+#pragma unroll
+    for (int i0 = 0; i0 < QR3_K*VDR_Q3_K_Q8_1_MMQ; i0 += QI8_1/2) {
+        int sumi_sc = 0;
+
+        for (int i = i0; i < i0 + QI8_1/2; ++i) {
+            sumi_sc = dpct::dp4a(v[i], u[i], sumi_sc); // SIMD dot product
+        }
+
+        sumi += sumi_sc * scales[i0 / (QI8_1/2)];
+    }
+
+    return d3*d8 * sumi;
+}
+
+static __dpct_inline__ float vec_dot_q3_K_q8_1_mul_mat(
+    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
+    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
+    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
+    const int &i, const int &j, const int &k) {
+
+    const int kbx  = k / QI3_K;
+    const int ky  = (k % QI3_K) * QR3_K;
+    const float * x_dmf = (const float *) x_dm;
+    const float * y_df  = (const float *) y_ds;
+
+    const int8_t * scales = ((const int8_t *) (x_sc + i * (WARP_SIZE/4) + i/4 + kbx*4)) + ky/4;
+
+    int v[QR3_K*VDR_Q3_K_Q8_1_MMQ];
+
+#pragma unroll
+    for (int l = 0; l < QR3_K*VDR_Q3_K_Q8_1_MMQ; ++l) {
+        const int kqsx = i * (WARP_SIZE + 1) + kbx*QI3_K + (QI3_K/2) * (ky/(2*QI3_K)) + ky % (QI3_K/2);
+        const int shift = 2 * ((ky % 32) / 8);
+        const int vll = (x_ql[kqsx + l] >> shift) & 0x03030303;
+
+        const int vh = x_qh[i * (WARP_SIZE/2) + i/2 + kbx * (QI3_K/2) + (ky+l)%8] >> ((ky+l) / 8);
+        const int vlh = (vh << 2) & 0x04040404;
+
+        v[l] = dpct::vectorized_binary<sycl::char4>(vll, vlh, dpct::sub_sat());
+    }
+
+    const int index_y = j * WARP_SIZE + (k*QR3_K) % WARP_SIZE;
+    return vec_dot_q3_K_q8_1_impl_mmq(v, &y_qs[index_y], scales, x_dmf[i * (WARP_SIZE/QI3_K) + i/QI3_K + kbx], y_df[index_y/QI8_1]);
+}
+
+template <int mmq_y>
+static __dpct_inline__ void
+allocate_tiles_q4_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
+                    int *tile_x_ql_q4_K, sycl::half2 *tile_x_dm_q4_K,
+                    int *tile_x_sc_q4_K) {
+    (void)x_qh;
+
+    *x_ql = tile_x_ql_q4_K;
+    *x_dm = tile_x_dm_q4_K;
+    *x_sc = tile_x_sc_q4_K;
+}
+
+template <int mmq_y, int nwarps, bool need_check>
+static __dpct_inline__ void
+load_tiles_q4_K(const void *__restrict__ vx, int *__restrict__ x_ql,
+                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
+                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
+                const int &k, const int &blocks_per_row) {
+    (void)x_qh;
+
+    GGML_SYCL_ASSUME(i_offset >= 0);
+    GGML_SYCL_ASSUME(i_offset <  nwarps);
+    GGML_SYCL_ASSUME(k >= 0);
+    GGML_SYCL_ASSUME(k <  WARP_SIZE);
+
+    const int kbx  = k / QI4_K; // == 0 if QK_K == 256
+    const int kqsx = k % QI4_K; // == k if QK_K == 256
+
+    const block_q4_K * bx0 = (const block_q4_K *) vx;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + i_offset;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q4_K * bxi = bx0 + i*blocks_per_row + kbx;
+
+        x_ql[i * (WARP_SIZE + 1) + k] = get_int_from_uint8_aligned(bxi->qs, kqsx);
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI4_K; // == 1 if QK_K == 256
+    const int kbxd = k % blocks_per_tile_x_row;          // == 0 if QK_K == 256
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI4_K) {
+        int i = (i0 + i_offset * QI4_K + k / blocks_per_tile_x_row) % mmq_y;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q4_K * bxi = bx0 + i*blocks_per_row + kbxd;
+
+#if QK_K == 256
+        x_dm[i * (WARP_SIZE/QI4_K) + i / QI4_K + kbxd] = bxi->dm;
+#else
+        x_dm[i * (WARP_SIZE/QI4_K) + i / QI4_K + kbxd] = {bxi->dm[0], bxi->dm[1]};
+#endif
+    }
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
+        int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q4_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / (QI4_K/8);
+
+        const int * scales = (const int *) bxi->scales;
+
+        const int ksc = k % (WARP_SIZE/8);
+
+        // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8
+        int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits
+        scales8    |= (scales[ksc/2]              >> (2 * (ksc % 2)))       & 0x30303030; // upper 2 bits
+
+        x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8;
+    }
+}
+
+
+#define VDR_Q4_K_Q8_1_MMQ  8
+
+// contiguous u/y values
+static __dpct_inline__ float vec_dot_q4_K_q8_1_impl_mmq(
+    const int *__restrict__ v, const int *__restrict__ u,
+    const uint8_t *__restrict__ sc, const uint8_t *__restrict__ m,
+    const sycl::half2 &dm4, const sycl::half2 *__restrict__ ds8) {
+
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR4_K*VDR_Q4_K_Q8_1_MMQ/QI8_1; ++i) {
+        int sumi_d = 0;
+
+#pragma unroll
+        for (int j = 0; j < QI8_1; ++j) {
+            sumi_d = dpct::dp4a((v[j] >> (4 * i)) & 0x0F0F0F0F,
+                                u[i * QI8_1 + j], sumi_d); // SIMD dot product
+        }
+
+        const sycl::float2 ds8f =
+            ds8[i].convert<float, sycl::rounding_mode::automatic>();
+
+        sumf_d += ds8f.x() * (sc[i] * sumi_d);
+        sumf_m += ds8f.y() * m[i]; // sum of q8_1 block * q4_K min val
+    }
+
+    const sycl::float2 dm4f =
+        dm4.convert<float, sycl::rounding_mode::automatic>();
+
+    return dm4f.x() * sumf_d - dm4f.y() * sumf_m;
+}
+
+
+static __dpct_inline__ float vec_dot_q4_K_q8_1_mul_mat(
+    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
+    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
+    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
+    const int &i, const int &j, const int &k) {
+    (void)x_qh;
+
+    const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/16]) + 2*((k % 16) / 8);
+
+    const int index_y = j * WARP_SIZE + (QR4_K*k) % WARP_SIZE;
+    return vec_dot_q4_K_q8_1_impl_mmq(&x_ql[i * (WARP_SIZE + 1) + k], &y_qs[index_y], sc, sc+8,
+                                      x_dm[i * (WARP_SIZE/QI4_K) + i/QI4_K], &y_ds[index_y/QI8_1]);
+}
+
+template <int mmq_y>
+static __dpct_inline__ void
+allocate_tiles_q5_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
+                    int *tile_x_ql_q5_K, sycl::half2 *tile_x_dm_q5_K,
+                    int *tile_x_sc_q5_K) {
+    (void)x_qh;
+
+    *x_ql = tile_x_ql_q5_K;
+    *x_dm = tile_x_dm_q5_K;
+    *x_sc = tile_x_sc_q5_K;
+}
+
+template <int mmq_y, int nwarps, bool need_check>
+static __dpct_inline__ void
+load_tiles_q5_K(const void *__restrict__ vx, int *__restrict__ x_ql,
+                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
+                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
+                const int &k, const int &blocks_per_row) {
+    (void)x_qh;
+
+    GGML_SYCL_ASSUME(i_offset >= 0);
+    GGML_SYCL_ASSUME(i_offset <  nwarps);
+    GGML_SYCL_ASSUME(k >= 0);
+    GGML_SYCL_ASSUME(k <  WARP_SIZE);
+
+    const int kbx  = k / QI5_K; // == 0 if QK_K == 256
+    const int kqsx = k % QI5_K; // == k if QK_K == 256
+
+    const block_q5_K * bx0 = (const block_q5_K *) vx;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + i_offset;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q5_K * bxi = bx0 + i*blocks_per_row + kbx;
+        const int ky = QR5_K*kqsx;
+
+        const int ql = get_int_from_uint8_aligned(bxi->qs, kqsx);
+        const int ql0 = (ql >> 0) & 0x0F0F0F0F;
+        const int ql1 = (ql >> 4) & 0x0F0F0F0F;
+
+        const int qh = get_int_from_uint8_aligned(bxi->qh, kqsx % (QI5_K/4));
+        const int qh0 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 0)) << 4) & 0x10101010;
+        const int qh1 = ((qh >> (2 * (kqsx / (QI5_K/4)) + 1)) << 4) & 0x10101010;
+
+        const int kq0 = ky - ky % (QI5_K/2) + k % (QI5_K/4) + 0;
+        const int kq1 = ky - ky % (QI5_K/2) + k % (QI5_K/4) + (QI5_K/4);
+
+        x_ql[i * (2*WARP_SIZE + 1) + kq0] = ql0 | qh0;
+        x_ql[i * (2*WARP_SIZE + 1) + kq1] = ql1 | qh1;
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI5_K; // == 1 if QK_K == 256
+    const int kbxd = k % blocks_per_tile_x_row;          // == 0 if QK_K == 256
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI5_K) {
+        int i = (i0 + i_offset * QI5_K + k / blocks_per_tile_x_row) % mmq_y;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q5_K * bxi = bx0 + i*blocks_per_row + kbxd;
+
+#if QK_K == 256
+        x_dm[i * (WARP_SIZE/QI5_K) + i / QI5_K + kbxd] = bxi->dm;
+#endif
+    }
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
+        int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q5_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / (QI5_K/8);
+
+        const int * scales = (const int *) bxi->scales;
+
+        const int ksc = k % (WARP_SIZE/8);
+
+        // scale arrangement after the following two lines: sc0,...,sc3, sc4,...,sc7, m0,...,m3, m4,...,m8
+        int scales8 = (scales[(ksc%2) + (ksc!=0)] >> (4 * (ksc & (ksc/2)))) & 0x0F0F0F0F; // lower 4 bits
+        scales8    |= (scales[ksc/2]              >> (2 * (ksc % 2)))       & 0x30303030; // upper 2 bits
+
+        x_sc[i * (WARP_SIZE/8) + i / 8 + ksc] = scales8;
+    }
+}
+
+#define VDR_Q5_K_Q8_1_MMQ  8
+
+// contiguous u/y values
+static __dpct_inline__ float vec_dot_q5_K_q8_1_impl_mmq(
+    const int *__restrict__ v, const int *__restrict__ u,
+    const uint8_t *__restrict__ sc, const uint8_t *__restrict__ m,
+    const sycl::half2 &dm4, const sycl::half2 *__restrict__ ds8) {
+
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR5_K*VDR_Q5_K_Q8_1_MMQ/QI8_1; ++i) {
+        int sumi_d = 0;
+
+#pragma unroll
+        for (int j = 0; j < QI8_1; ++j) {
+            sumi_d = dpct::dp4a(v[i * QI8_1 + j], u[i * QI8_1 + j],
+                                sumi_d); // SIMD dot product
+        }
+
+        const sycl::float2 ds8f =
+            ds8[i].convert<float, sycl::rounding_mode::automatic>();
+
+        sumf_d += ds8f.x() * (sc[i] * sumi_d);
+        sumf_m += ds8f.y() * m[i]; // sum of q8_1 block * q4_K min val
+    }
+
+    const sycl::float2 dm4f =
+        dm4.convert<float, sycl::rounding_mode::automatic>();
+
+    return dm4f.x() * sumf_d - dm4f.y() * sumf_m;
+}
+
+static __dpct_inline__ float vec_dot_q5_K_q8_1_mul_mat(
+    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
+    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
+    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
+    const int &i, const int &j, const int &k) {
+    (void)x_qh;
+
+    const uint8_t * sc = ((const uint8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/16]) + 2 * ((k % 16) / 8);
+
+    const int index_x = i * (QR5_K*WARP_SIZE + 1) +  QR5_K*k;
+    const int index_y = j * WARP_SIZE             + (QR5_K*k) % WARP_SIZE;
+    return vec_dot_q5_K_q8_1_impl_mmq(&x_ql[index_x], &y_qs[index_y], sc, sc+8,
+                                      x_dm[i * (WARP_SIZE/QI5_K) + i/QI5_K], &y_ds[index_y/QI8_1]);
+}
+
+template <int mmq_y>
+static __dpct_inline__ void
+allocate_tiles_q6_K(int **x_ql, sycl::half2 **x_dm, int **x_qh, int **x_sc,
+                    int *tile_x_ql, sycl::half2 *tile_x_dm, int *tile_x_sc) {
+    (void)x_qh;
+
+    *x_ql = tile_x_ql;
+    *x_dm = tile_x_dm;
+    *x_sc = tile_x_sc;
+}
+
+template <int mmq_y, int nwarps, bool need_check>
+static __dpct_inline__ void
+load_tiles_q6_K(const void *__restrict__ vx, int *__restrict__ x_ql,
+                sycl::half2 *__restrict__ x_dm, int *__restrict__ x_qh,
+                int *__restrict__ x_sc, const int &i_offset, const int &i_max,
+                const int &k, const int &blocks_per_row) {
+    (void)x_qh;
+
+    GGML_SYCL_ASSUME(i_offset >= 0);
+    GGML_SYCL_ASSUME(i_offset <  nwarps);
+    GGML_SYCL_ASSUME(k >= 0);
+    GGML_SYCL_ASSUME(k <  WARP_SIZE);
+
+    const int kbx  = k / QI6_K; // == 0 if QK_K == 256
+    const int kqsx = k % QI6_K; // == k if QK_K == 256
+
+    const block_q6_K * bx0 = (const block_q6_K *) vx;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps) {
+        int i = i0 + i_offset;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q6_K * bxi = bx0 + i*blocks_per_row + kbx;
+        const int ky = QR6_K*kqsx;
+
+        const int ql = get_int_from_uint8(bxi->ql, kqsx);
+        const int ql0 = (ql >> 0) & 0x0F0F0F0F;
+        const int ql1 = (ql >> 4) & 0x0F0F0F0F;
+
+        const int qh = get_int_from_uint8(bxi->qh, (QI6_K/4) * (kqsx / (QI6_K/2)) + kqsx % (QI6_K/4));
+        const int qh0 = ((qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4)))) << 4) & 0x30303030;
+        const int qh1 =  (qh >> (2 * ((kqsx % (QI6_K/2)) / (QI6_K/4))))       & 0x30303030;
+
+        const int kq0 = ky - ky % QI6_K + k % (QI6_K/2) + 0;
+        const int kq1 = ky - ky % QI6_K + k % (QI6_K/2) + (QI6_K/2);
+
+        x_ql[i * (2 * WARP_SIZE + 1) + kq0] =
+            dpct::vectorized_binary<sycl::char4>(ql0 | qh0, 0x20202020,
+                                                 dpct::sub_sat());
+        x_ql[i * (2 * WARP_SIZE + 1) + kq1] =
+            dpct::vectorized_binary<sycl::char4>(ql1 | qh1, 0x20202020,
+                                                 dpct::sub_sat());
+    }
+
+    const int blocks_per_tile_x_row = WARP_SIZE / QI6_K; // == 1 if QK_K == 256
+    const int kbxd = k % blocks_per_tile_x_row;          // == 0 if QK_K == 256
+    float * x_dmf = (float *) x_dm;
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * QI6_K) {
+        int i = (i0 + i_offset * QI6_K + k / blocks_per_tile_x_row) % mmq_y;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q6_K * bxi = bx0 + i*blocks_per_row + kbxd;
+
+        x_dmf[i * (WARP_SIZE/QI6_K) + i / QI6_K + kbxd] = bxi->d;
+    }
+
+#pragma unroll
+    for (int i0 = 0; i0 < mmq_y; i0 += nwarps * 8) {
+        int i = (i0 + i_offset * 8 + k / (WARP_SIZE/8)) % mmq_y;
+
+        if (need_check) {
+            i = sycl::min(i, i_max);
+        }
+
+        const block_q6_K * bxi = bx0 + i*blocks_per_row + (k % (WARP_SIZE/8)) / 4;
+
+        x_sc[i * (WARP_SIZE/8) + i / 8 + k % (WARP_SIZE/8)] = get_int_from_int8(bxi->scales, k % (QI6_K/8));
+    }
+}
+
+#define VDR_Q6_K_Q8_1_MMQ  8
+
+// contiguous u/y values
+static __dpct_inline__ float
+vec_dot_q6_K_q8_1_impl_mmq(const int *__restrict__ v, const int *__restrict__ u,
+                           const int8_t *__restrict__ sc, const float &d6,
+                           const float *__restrict__ d8) {
+
+    float sumf_d = 0.0f;
+
+#pragma unroll
+    for (int i0 = 0; i0 < VDR_Q6_K_Q8_1_MMQ; i0 += 4) {
+        sycl::int2 sumi_d = {0, 0}; // 2 q6_K scales per q8_1 scale
+
+#pragma unroll
+        for (int i = i0; i < i0 + 2; ++i) {
+            sumi_d.x() = dpct::dp4a(v[2 * i + 0], u[2 * i + 0],
+                                    sumi_d.x()); // SIMD dot product
+            sumi_d.x() = dpct::dp4a(v[2 * i + 1], u[2 * i + 1],
+                                    sumi_d.x()); // SIMD dot product
+
+            sumi_d.y() = dpct::dp4a(v[2 * i + 4], u[2 * i + 4],
+                                    sumi_d.y()); // SIMD dot product
+            sumi_d.y() = dpct::dp4a(v[2 * i + 5], u[2 * i + 5],
+                                    sumi_d.y()); // SIMD dot product
+        }
+
+        sumf_d += d8[i0 / 4] *
+                  (sc[i0 / 2 + 0] * sumi_d.x() + sc[i0 / 2 + 1] * sumi_d.y());
+    }
+
+    return d6 * sumf_d;
+}
+
+static __dpct_inline__ float vec_dot_q6_K_q8_1_mul_mat(
+    const int *__restrict__ x_ql, const sycl::half2 *__restrict__ x_dm,
+    const int *__restrict__ x_qh, const int *__restrict__ x_sc,
+    const int *__restrict__ y_qs, const sycl::half2 *__restrict__ y_ds,
+    const int &i, const int &j, const int &k) {
+    (void)x_qh;
+
+    const float * x_dmf = (const float *) x_dm;
+    const float * y_df  = (const float *) y_ds;
+
+    const int8_t * sc = ((const int8_t *) &x_sc[i * (WARP_SIZE/8) + i/8 + k/8]);
+
+    const int index_x = i * (QR6_K*WARP_SIZE + 1) +  QR6_K*k;
+    const int index_y = j * WARP_SIZE             + (QR6_K*k) % WARP_SIZE;
+    return vec_dot_q6_K_q8_1_impl_mmq(&x_ql[index_x], &y_qs[index_y], sc, x_dmf[i * (WARP_SIZE/QI6_K) + i/QI6_K], &y_df[index_y/QI8_1]);
+}
+
+template <int qk, int qr, int qi, bool need_sum, typename block_q_t, int mmq_x,
+          int mmq_y, int nwarps, load_tiles_sycl_t load_tiles, int vdr,
+          vec_dot_q_mul_mat_sycl_t vec_dot>
+/*
+DPCT1110:8: The total declared local variable size in device function mul_mat_q
+exceeds 128 bytes and may cause high register pressure. Consult with your
+hardware vendor to find the total register size available and adjust the code,
+or use smaller sub-group size to avoid high register pressure.
+*/
+static __dpct_inline__ void
+mul_mat_q(const void *__restrict__ vx, const void *__restrict__ vy,
+          float *__restrict__ dst, const int ncols_x, const int nrows_x,
+          const int ncols_y, const int nrows_y, const int nrows_dst,
+          int *tile_x_ql, sycl::half2 *tile_x_dm, int *tile_x_qh,
+          int *tile_x_sc, const sycl::nd_item<3> &item_ct1, int *tile_y_qs,
+          sycl::half2 *tile_y_ds) {
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    const int blocks_per_row_x = ncols_x / qk;
+    const int blocks_per_col_y = nrows_y / QK8_1;
+    const int blocks_per_warp = WARP_SIZE / qi;
+
+    const int & ncols_dst = ncols_y;
+
+    const int row_dst_0 = item_ct1.get_group(2) * mmq_y;
+    const int & row_x_0 = row_dst_0;
+
+    const int col_dst_0 = item_ct1.get_group(1) * mmq_x;
+    const int & col_y_0 = col_dst_0;
+
+    float sum[mmq_y/WARP_SIZE][mmq_x/nwarps] = {{0.0f}};
+
+    for (int ib0 = 0; ib0 < blocks_per_row_x; ib0 += blocks_per_warp) {
+
+        load_tiles(x + row_x_0 * blocks_per_row_x + ib0, tile_x_ql, tile_x_dm,
+                   tile_x_qh, tile_x_sc, item_ct1.get_local_id(1),
+                   nrows_x - row_x_0 - 1, item_ct1.get_local_id(2),
+                   blocks_per_row_x);
+
+#pragma unroll
+        for (int ir = 0; ir < qr; ++ir) {
+            const int kqs = ir * WARP_SIZE + item_ct1.get_local_id(2);
+            const int kbxd = kqs / QI8_1;
+
+#pragma unroll
+            for (int i = 0; i < mmq_x; i += nwarps) {
+                const int col_y_eff = dpct::min(
+                    (unsigned int)(col_y_0 + item_ct1.get_local_id(1) + i),
+                    ncols_y - 1); // to prevent out-of-bounds memory accesses
+
+                const block_q8_1 * by0 = &y[col_y_eff*blocks_per_col_y + ib0 * (qk/QK8_1) + kbxd];
+
+                const int index_y = (item_ct1.get_local_id(1) + i) * WARP_SIZE +
+                                    kqs % WARP_SIZE;
+                tile_y_qs[index_y] = get_int_from_int8_aligned(
+                    by0->qs, item_ct1.get_local_id(2) % QI8_1);
+            }
+
+#pragma unroll
+            for (int ids0 = 0; ids0 < mmq_x; ids0 += nwarps * QI8_1) {
+                const int ids =
+                    (ids0 + item_ct1.get_local_id(1) * QI8_1 +
+                     item_ct1.get_local_id(2) / (WARP_SIZE / QI8_1)) %
+                    mmq_x;
+                const int kby = item_ct1.get_local_id(2) % (WARP_SIZE / QI8_1);
+                const int col_y_eff = sycl::min(col_y_0 + ids, ncols_y - 1);
+
+                // if the sum is not needed it's faster to transform the scale to f32 ahead of time
+                const sycl::half2 *dsi_src =
+                    &y[col_y_eff * blocks_per_col_y + ib0 * (qk / QK8_1) +
+                       ir * (WARP_SIZE / QI8_1) + kby]
+                         .ds;
+                sycl::half2 *dsi_dst =
+                    &tile_y_ds[ids * (WARP_SIZE / QI8_1) + kby];
+                if (need_sum) {
+                    *dsi_dst = *dsi_src;
+                } else {
+                    float * dfi_dst = (float *) dsi_dst;
+                    *dfi_dst = (*dsi_src)[0];
+                }
+            }
+
+            /*
+            DPCT1118:9: SYCL group functions and algorithms must be encountered
+            in converged control flow. You may need to adjust the code.
+            */
+            /*
+            DPCT1065:56: Consider replacing sycl::nd_item::barrier() with
+            sycl::nd_item::barrier(sycl::access::fence_space::local_space) for
+            better performance if there is no access to global memory.
+            */
+            item_ct1.barrier();
+
+// #pragma unroll // unrolling this loop causes too much register pressure
+            for (int k = ir*WARP_SIZE/qr; k < (ir+1)*WARP_SIZE/qr; k += vdr) {
+#pragma unroll
+                for (int j = 0; j < mmq_x; j += nwarps) {
+#pragma unroll
+                    for (int i = 0; i < mmq_y; i += WARP_SIZE) {
+                        sum[i / WARP_SIZE][j / nwarps] += vec_dot(
+                            tile_x_ql, tile_x_dm, tile_x_qh, tile_x_sc,
+                            tile_y_qs, tile_y_ds, item_ct1.get_local_id(2) + i,
+                            item_ct1.get_local_id(1) + j, k);
+                    }
+                }
+            }
+
+            /*
+            DPCT1118:10: SYCL group functions and algorithms must be encountered
+            in converged control flow. You may need to adjust the code.
+            */
+            /*
+            DPCT1065:57: Consider replacing sycl::nd_item::barrier() with
+            sycl::nd_item::barrier(sycl::access::fence_space::local_space) for
+            better performance if there is no access to global memory.
+            */
+            item_ct1.barrier();
+        }
+    }
+
+#pragma unroll
+    for (int j = 0; j < mmq_x; j += nwarps) {
+        const int col_dst = col_dst_0 + j + item_ct1.get_local_id(1);
+
+        if (col_dst >= ncols_dst) {
+            return;
+        }
+
+#pragma unroll
+        for (int i = 0; i < mmq_y; i += WARP_SIZE) {
+            const int row_dst = row_dst_0 + item_ct1.get_local_id(2) + i;
+
+            if (row_dst >= nrows_dst) {
+                continue;
+            }
+
+            dst[col_dst*nrows_dst + row_dst] = sum[i/WARP_SIZE][j/nwarps];
+        }
+    }
+}
+
+#define  MMQ_X_Q4_0_RDNA2  64
+#define  MMQ_Y_Q4_0_RDNA2  128
+#define NWARPS_Q4_0_RDNA2  8
+#define  MMQ_X_Q4_0_RDNA1  64
+#define  MMQ_Y_Q4_0_RDNA1  64
+#define NWARPS_Q4_0_RDNA1  8
+#if defined(SYCL_USE_XMX)
+#define  MMQ_X_Q4_0_AMPERE 4
+#define  MMQ_Y_Q4_0_AMPERE 32
+#define NWARPS_Q4_0_AMPERE 4
+#else
+#define  MMQ_X_Q4_0_AMPERE 64
+#define  MMQ_Y_Q4_0_AMPERE 128
+#define NWARPS_Q4_0_AMPERE 4
+#endif
+#define  MMQ_X_Q4_0_PASCAL 64
+#define  MMQ_Y_Q4_0_PASCAL 64
+#define NWARPS_Q4_0_PASCAL 8
+
+template <bool need_check> static void
+    mul_mat_q4_0(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
+    const sycl::nd_item<3> &item_ct1, int *tile_x_qs_q4_0, float *tile_x_d_q4_0,
+    int *tile_y_qs, sycl::half2 *tile_y_ds) {
+    int   * tile_x_ql = nullptr;
+    sycl::half2 *tile_x_dm = nullptr;
+    int   * tile_x_qh = nullptr;
+    int   * tile_x_sc = nullptr;
+
+//sycl_todo: change according to hardware
+
+    const int mmq_x  =  MMQ_X_Q4_0_AMPERE;
+    const int mmq_y  =  MMQ_Y_Q4_0_AMPERE;
+    const int nwarps = NWARPS_Q4_0_AMPERE;
+    allocate_tiles_q4_0<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
+                               tile_x_qs_q4_0, tile_x_d_q4_0);
+    mul_mat_q<QK4_0, QR4_0, QI4_0, true, block_q4_0, mmq_x, mmq_y, nwarps,
+              load_tiles_q4_0<mmq_y, nwarps, need_check>, VDR_Q4_0_Q8_1_MMQ,
+              vec_dot_q4_0_q8_1_mul_mat>(
+        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
+        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
+}
+
+#define  MMQ_X_Q4_1_RDNA2  64
+#define  MMQ_Y_Q4_1_RDNA2  128
+#define NWARPS_Q4_1_RDNA2  8
+#define  MMQ_X_Q4_1_RDNA1  64
+#define  MMQ_Y_Q4_1_RDNA1  64
+#define NWARPS_Q4_1_RDNA1  8
+#if defined(SYCL_USE_XMX)
+#define  MMQ_X_Q4_1_AMPERE 4
+#define  MMQ_Y_Q4_1_AMPERE 32
+#define NWARPS_Q4_1_AMPERE 4
+#else
+#define  MMQ_X_Q4_1_AMPERE 64
+#define  MMQ_Y_Q4_1_AMPERE 128
+#define NWARPS_Q4_1_AMPERE 4
+#endif
+#define  MMQ_X_Q4_1_PASCAL 64
+#define  MMQ_Y_Q4_1_PASCAL 64
+#define NWARPS_Q4_1_PASCAL 8
+
+template <bool need_check> static void
+    mul_mat_q4_1(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
+    const sycl::nd_item<3> &item_ct1, int *tile_x_qs_q4_1,
+    sycl::half2 *tile_x_dm_q4_1, int *tile_y_qs, sycl::half2 *tile_y_ds) {
+    int   * tile_x_ql = nullptr;
+    sycl::half2 *tile_x_dm = nullptr;
+    int   * tile_x_qh = nullptr;
+    int   * tile_x_sc = nullptr;
+
+//sycl_todo: change according to hardware
+    const int mmq_x  =  MMQ_X_Q4_1_AMPERE;
+    const int mmq_y  =  MMQ_Y_Q4_1_AMPERE;
+    const int nwarps = NWARPS_Q4_1_AMPERE;
+    allocate_tiles_q4_1<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
+                               tile_x_qs_q4_1, tile_x_dm_q4_1);
+    mul_mat_q<QK4_1, QR4_1, QI4_1, true, block_q4_1, mmq_x, mmq_y, nwarps,
+              load_tiles_q4_1<mmq_y, nwarps, need_check>, VDR_Q4_1_Q8_1_MMQ,
+              vec_dot_q4_1_q8_1_mul_mat>(
+        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
+        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
+}
+
+#define  MMQ_X_Q5_0_RDNA2  64
+#define  MMQ_Y_Q5_0_RDNA2  128
+#define NWARPS_Q5_0_RDNA2  8
+#define  MMQ_X_Q5_0_RDNA1  64
+#define  MMQ_Y_Q5_0_RDNA1  64
+#define NWARPS_Q5_0_RDNA1  8
+#if defined(SYCL_USE_XMX)
+#define  MMQ_X_Q5_0_AMPERE 4
+#define  MMQ_Y_Q5_0_AMPERE 32
+#define NWARPS_Q5_0_AMPERE 4
+#else
+#define  MMQ_X_Q5_0_AMPERE 128
+#define  MMQ_Y_Q5_0_AMPERE 64
+#define NWARPS_Q5_0_AMPERE 4
+#endif
+#define  MMQ_X_Q5_0_PASCAL 64
+#define  MMQ_Y_Q5_0_PASCAL 64
+#define NWARPS_Q5_0_PASCAL 8
+
+template <bool need_check> static void
+    mul_mat_q5_0(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
+    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q5_0, float *tile_x_d_q5_0,
+    int *tile_y_qs, sycl::half2 *tile_y_ds) {
+    int   * tile_x_ql = nullptr;
+    sycl::half2 *tile_x_dm = nullptr;
+    int   * tile_x_qh = nullptr;
+    int   * tile_x_sc = nullptr;
+
+//sycl_todo: change according to hardware
+    const int mmq_x  =  MMQ_X_Q5_0_AMPERE;
+    const int mmq_y  =  MMQ_Y_Q5_0_AMPERE;
+    const int nwarps = NWARPS_Q5_0_AMPERE;
+    allocate_tiles_q5_0<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
+                               tile_x_ql_q5_0, tile_x_d_q5_0);
+    mul_mat_q<QK5_0, QR5_0, QI5_0, false, block_q5_0, mmq_x, mmq_y, nwarps,
+              load_tiles_q5_0<mmq_y, nwarps, need_check>, VDR_Q5_0_Q8_1_MMQ,
+              vec_dot_q5_0_q8_1_mul_mat>(
+        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
+        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
+}
+
+#define  MMQ_X_Q5_1_RDNA2  64
+#define  MMQ_Y_Q5_1_RDNA2  128
+#define NWARPS_Q5_1_RDNA2  8
+#define  MMQ_X_Q5_1_RDNA1  64
+#define  MMQ_Y_Q5_1_RDNA1  64
+#define NWARPS_Q5_1_RDNA1  8
+#if defined(SYCL_USE_XMX)
+#define  MMQ_X_Q5_1_AMPERE 4
+#define  MMQ_Y_Q5_1_AMPERE 32
+#define NWARPS_Q5_1_AMPERE 4
+#else
+#define  MMQ_X_Q5_1_AMPERE 128
+#define  MMQ_Y_Q5_1_AMPERE 64
+#define NWARPS_Q5_1_AMPERE 4
+#endif
+#define  MMQ_X_Q5_1_PASCAL 64
+#define  MMQ_Y_Q5_1_PASCAL 64
+#define NWARPS_Q5_1_PASCAL 8
+
+template <bool need_check> static void
+mul_mat_q5_1(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
+    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q5_1,
+    sycl::half2 *tile_x_dm_q5_1, int *tile_y_qs, sycl::half2 *tile_y_ds) {
+    int   * tile_x_ql = nullptr;
+    sycl::half2 *tile_x_dm = nullptr;
+    int   * tile_x_qh = nullptr;
+    int   * tile_x_sc = nullptr;
+
+//sycl_todo: change according to hardware
+    const int mmq_x  =  MMQ_X_Q5_1_AMPERE;
+    const int mmq_y  =  MMQ_Y_Q5_1_AMPERE;
+    const int nwarps = NWARPS_Q5_1_AMPERE;
+    allocate_tiles_q5_1<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
+                               tile_x_ql_q5_1, tile_x_dm_q5_1);
+    mul_mat_q<QK5_1, QR5_1, QI5_1, true, block_q5_1, mmq_x, mmq_y, nwarps,
+              load_tiles_q5_1<mmq_y, nwarps, need_check>, VDR_Q5_1_Q8_1_MMQ,
+              vec_dot_q5_1_q8_1_mul_mat>(
+        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
+        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
+}
+
+#define  MMQ_X_Q8_0_RDNA2  64
+#define  MMQ_Y_Q8_0_RDNA2  128
+#define NWARPS_Q8_0_RDNA2  8
+#define  MMQ_X_Q8_0_RDNA1  64
+#define  MMQ_Y_Q8_0_RDNA1  64
+#define NWARPS_Q8_0_RDNA1  8
+#if defined(SYCL_USE_XMX)
+#define  MMQ_X_Q8_0_AMPERE 4
+#define  MMQ_Y_Q8_0_AMPERE 32
+#define NWARPS_Q8_0_AMPERE 4
+#else
+#define  MMQ_X_Q8_0_AMPERE 128
+#define  MMQ_Y_Q8_0_AMPERE 64
+#define NWARPS_Q8_0_AMPERE 4
+#endif
+#define  MMQ_X_Q8_0_PASCAL 64
+#define  MMQ_Y_Q8_0_PASCAL 64
+#define NWARPS_Q8_0_PASCAL 8
+
+template <bool need_check> static void
+    mul_mat_q8_0(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
+    const sycl::nd_item<3> &item_ct1, int *tile_x_qs_q8_0, float *tile_x_d_q8_0,
+    int *tile_y_qs, sycl::half2 *tile_y_ds) {
+    int   * tile_x_ql = nullptr;
+    sycl::half2 *tile_x_dm = nullptr;
+    int   * tile_x_qh = nullptr;
+    int   * tile_x_sc = nullptr;
+
+//sycl_todo: change according to hardware
+    const int mmq_x  =  MMQ_X_Q8_0_AMPERE;
+    const int mmq_y  =  MMQ_Y_Q8_0_AMPERE;
+    const int nwarps = NWARPS_Q8_0_AMPERE;
+    allocate_tiles_q8_0<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
+                               tile_x_qs_q8_0, tile_x_d_q8_0);
+    mul_mat_q<QK8_0, QR8_0, QI8_0, false, block_q8_0, mmq_x, mmq_y, nwarps,
+              load_tiles_q8_0<mmq_y, nwarps, need_check>, VDR_Q8_0_Q8_1_MMQ,
+              vec_dot_q8_0_q8_1_mul_mat>(
+        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
+        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
+}
+
+#define  MMQ_X_Q2_K_RDNA2  64
+#define  MMQ_Y_Q2_K_RDNA2  128
+#define NWARPS_Q2_K_RDNA2  8
+#define  MMQ_X_Q2_K_RDNA1  128
+#define  MMQ_Y_Q2_K_RDNA1  32
+#define NWARPS_Q2_K_RDNA1  8
+#if defined(SYCL_USE_XMX)
+#define  MMQ_X_Q2_K_AMPERE 4
+#define  MMQ_Y_Q2_K_AMPERE 32
+#define NWARPS_Q2_K_AMPERE 4
+#else
+#define  MMQ_X_Q2_K_AMPERE 64
+#define  MMQ_Y_Q2_K_AMPERE 128
+#define NWARPS_Q2_K_AMPERE 4
+#endif
+#define  MMQ_X_Q2_K_PASCAL 64
+#define  MMQ_Y_Q2_K_PASCAL 64
+#define NWARPS_Q2_K_PASCAL 8
+
+template <bool need_check> static void
+mul_mat_q2_K(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
+    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q2_K,
+    sycl::half2 *tile_x_dm_q2_K, int *tile_x_sc_q2_K, int *tile_y_qs,
+    sycl::half2 *tile_y_ds) {
+    int   * tile_x_ql = nullptr;
+    sycl::half2 *tile_x_dm = nullptr;
+    int   * tile_x_qh = nullptr;
+    int   * tile_x_sc = nullptr;
+
+//sycl_todo: change according to hardware
+    const int mmq_x  =  MMQ_X_Q2_K_AMPERE;
+    const int mmq_y  =  MMQ_Y_Q2_K_AMPERE;
+    const int nwarps = NWARPS_Q2_K_AMPERE;
+    allocate_tiles_q2_K<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
+                               tile_x_ql_q2_K, tile_x_dm_q2_K, tile_x_sc_q2_K);
+    mul_mat_q<QK_K, QR2_K, QI2_K, false, block_q2_K, mmq_x, mmq_y, nwarps,
+              load_tiles_q2_K<mmq_y, nwarps, need_check>, VDR_Q2_K_Q8_1_MMQ,
+              vec_dot_q2_K_q8_1_mul_mat>(
+        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
+        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
+}
+
+#define  MMQ_X_Q3_K_RDNA2  128
+#define  MMQ_Y_Q3_K_RDNA2  64
+#define NWARPS_Q3_K_RDNA2  8
+#define  MMQ_X_Q3_K_RDNA1  32
+#define  MMQ_Y_Q3_K_RDNA1  128
+#define NWARPS_Q3_K_RDNA1  8
+#if defined(SYCL_USE_XMX)
+#define  MMQ_X_Q3_K_AMPERE 4
+#define  MMQ_Y_Q3_K_AMPERE 32
+#define NWARPS_Q3_K_AMPERE 4
+#else
+#define  MMQ_X_Q3_K_AMPERE 128
+#define  MMQ_Y_Q3_K_AMPERE 128
+#define NWARPS_Q3_K_AMPERE 4
+#endif
+#define  MMQ_X_Q3_K_PASCAL 64
+#define  MMQ_Y_Q3_K_PASCAL 64
+#define NWARPS_Q3_K_PASCAL 8
+
+template <bool need_check> static void
+mul_mat_q3_K(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
+    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q3_K,
+    sycl::half2 *tile_x_dm_q3_K, int *tile_x_qh_q3_K, int *tile_x_sc_q3_K,
+    int *tile_y_qs, sycl::half2 *tile_y_ds) {
+    int   * tile_x_ql = nullptr;
+    sycl::half2 *tile_x_dm = nullptr;
+    int   * tile_x_qh = nullptr;
+    int   * tile_x_sc = nullptr;
+
+//sycl_todo: change according to hardware
+    const int mmq_x  =  MMQ_X_Q3_K_AMPERE;
+    const int mmq_y  =  MMQ_Y_Q3_K_AMPERE;
+    const int nwarps = NWARPS_Q3_K_AMPERE;
+    allocate_tiles_q3_K<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
+                               tile_x_ql_q3_K, tile_x_dm_q3_K, tile_x_qh_q3_K,
+                               tile_x_sc_q3_K);
+    mul_mat_q<QK_K, QR3_K, QI3_K, false, block_q3_K, mmq_x, mmq_y, nwarps,
+              load_tiles_q3_K<mmq_y, nwarps, need_check>, VDR_Q3_K_Q8_1_MMQ,
+              vec_dot_q3_K_q8_1_mul_mat>(
+        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
+        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
+}
+
+#define  MMQ_X_Q4_K_RDNA2  64
+#define  MMQ_Y_Q4_K_RDNA2  128
+#define NWARPS_Q4_K_RDNA2  8
+#define  MMQ_X_Q4_K_RDNA1  32
+#define  MMQ_Y_Q4_K_RDNA1  64
+#define NWARPS_Q4_K_RDNA1  8
+#if defined(SYCL_USE_XMX)
+#define  MMQ_X_Q4_K_AMPERE 4
+#define  MMQ_Y_Q4_K_AMPERE 32
+#define NWARPS_Q4_K_AMPERE 4
+#else
+#define  MMQ_X_Q4_K_AMPERE 64
+#define  MMQ_Y_Q4_K_AMPERE 128
+#define NWARPS_Q4_K_AMPERE 4
+#endif
+#define  MMQ_X_Q4_K_PASCAL 64
+#define  MMQ_Y_Q4_K_PASCAL 64
+#define NWARPS_Q4_K_PASCAL 8
+
+template <bool need_check> static void
+    mul_mat_q4_K(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
+    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q4_K,
+    sycl::half2 *tile_x_dm_q4_K, int *tile_x_sc_q4_K, int *tile_y_qs,
+    sycl::half2 *tile_y_ds) {
+    int   * tile_x_ql = nullptr;
+    sycl::half2 *tile_x_dm = nullptr;
+    int   * tile_x_qh = nullptr;
+    int   * tile_x_sc = nullptr;
+
+//sycl_todo: change according to hardware
+    const int mmq_x  =  MMQ_X_Q4_K_AMPERE;
+    const int mmq_y  =  MMQ_Y_Q4_K_AMPERE;
+    const int nwarps = NWARPS_Q4_K_AMPERE;
+    allocate_tiles_q4_K<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
+                               tile_x_ql_q4_K, tile_x_dm_q4_K, tile_x_sc_q4_K);
+    mul_mat_q<QK_K, QR4_K, QI4_K, true, block_q4_K, mmq_x, mmq_y, nwarps,
+              load_tiles_q4_K<mmq_y, nwarps, need_check>, VDR_Q4_K_Q8_1_MMQ,
+              vec_dot_q4_K_q8_1_mul_mat>(
+        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
+        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
+}
+
+#define  MMQ_X_Q5_K_RDNA2  64
+#define  MMQ_Y_Q5_K_RDNA2  128
+#define NWARPS_Q5_K_RDNA2  8
+#define  MMQ_X_Q5_K_RDNA1  32
+#define  MMQ_Y_Q5_K_RDNA1  64
+#define NWARPS_Q5_K_RDNA1  8
+#if defined(SYCL_USE_XMX)
+#define  MMQ_X_Q5_K_AMPERE 4
+#define  MMQ_Y_Q5_K_AMPERE 32
+#define NWARPS_Q5_K_AMPERE 4
+#else
+#define  MMQ_X_Q5_K_AMPERE 64
+#define  MMQ_Y_Q5_K_AMPERE 128
+#define NWARPS_Q5_K_AMPERE 4
+#endif
+#define  MMQ_X_Q5_K_PASCAL 64
+#define  MMQ_Y_Q5_K_PASCAL 64
+#define NWARPS_Q5_K_PASCAL 8
+
+template <bool need_check> static void
+mul_mat_q5_K(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
+    const sycl::nd_item<3> &item_ct1, int *tile_x_ql_q5_K,
+    sycl::half2 *tile_x_dm_q5_K, int *tile_x_sc_q5_K, int *tile_y_qs,
+    sycl::half2 *tile_y_ds) {
+    int   * tile_x_ql = nullptr;
+    sycl::half2 *tile_x_dm = nullptr;
+    int   * tile_x_qh = nullptr;
+    int   * tile_x_sc = nullptr;
+
+//sycl_todo: change according to hardware
+    const int mmq_x  =  MMQ_X_Q5_K_AMPERE;
+    const int mmq_y  =  MMQ_Y_Q5_K_AMPERE;
+    const int nwarps = NWARPS_Q5_K_AMPERE;
+    allocate_tiles_q5_K<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
+                               tile_x_ql_q5_K, tile_x_dm_q5_K, tile_x_sc_q5_K);
+    mul_mat_q<QK_K, QR5_K, QI5_K, true, block_q5_K, mmq_x, mmq_y, nwarps,
+              load_tiles_q5_K<mmq_y, nwarps, need_check>, VDR_Q5_K_Q8_1_MMQ,
+              vec_dot_q5_K_q8_1_mul_mat>(
+        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
+        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
+}
+
+#define  MMQ_X_Q6_K_RDNA2  64
+#define  MMQ_Y_Q6_K_RDNA2  128
+#define NWARPS_Q6_K_RDNA2  8
+#define  MMQ_X_Q6_K_RDNA1  32
+#define  MMQ_Y_Q6_K_RDNA1  64
+#define NWARPS_Q6_K_RDNA1  8
+#if defined(SYCL_USE_XMX)
+#define  MMQ_X_Q6_K_AMPERE 4
+#define  MMQ_Y_Q6_K_AMPERE 32
+#define NWARPS_Q6_K_AMPERE 4
+#else
+#define  MMQ_X_Q6_K_AMPERE 64
+#define  MMQ_Y_Q6_K_AMPERE 64
+#define NWARPS_Q6_K_AMPERE 4
+#endif
+#define  MMQ_X_Q6_K_PASCAL 64
+#define  MMQ_Y_Q6_K_PASCAL 64
+#define NWARPS_Q6_K_PASCAL 8
+
+template <bool need_check> static void
+    mul_mat_q6_K(
+    const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst,
+    const int ncols_x, const int nrows_x, const int ncols_y, const int nrows_y, const int nrows_dst,
+    const sycl::nd_item<3> &item_ct1, int *tile_x_ql, sycl::half2 *tile_x_dm,
+    int *tile_x_sc, int *tile_y_qs, sycl::half2 *tile_y_ds) {
+    // int   * tile_x_ql = nullptr;
+    // sycl::half2 *tile_x_dm = nullptr;
+    int   * tile_x_qh = nullptr;
+    // int   * tile_x_sc = nullptr;
+
+//sycl_todo: change according to hardware
+    const int mmq_x  =  MMQ_X_Q6_K_AMPERE;
+    const int mmq_y  =  MMQ_Y_Q6_K_AMPERE;
+    const int nwarps = NWARPS_Q6_K_AMPERE;
+    allocate_tiles_q6_K<mmq_y>(&tile_x_ql, &tile_x_dm, &tile_x_qh, &tile_x_sc,
+                               tile_x_ql, tile_x_dm, tile_x_sc);
+    mul_mat_q<QK_K, QR6_K, QI6_K, false, block_q6_K, mmq_x, mmq_y, nwarps,
+              load_tiles_q6_K<mmq_y, nwarps, need_check>, VDR_Q6_K_Q8_1_MMQ,
+              vec_dot_q6_K_q8_1_mul_mat>(
+        vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y, nrows_dst, tile_x_ql,
+        tile_x_dm, tile_x_qh, tile_x_sc, item_ct1, tile_y_qs, tile_y_ds);
+}
+
+static void ggml_mul_mat_q4_0_q8_1_sycl(const void *vx, const void *vy,
+                                        float *dst, const int ncols_x,
+                                        const int nrows_x, const int ncols_y,
+                                        const int nrows_y, const int nrows_dst,
+                                        dpct::queue_ptr stream) try {
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+    const int compute_capability = ggml_sycl_info().devices[id].cc;
+
+    int mmq_x, mmq_y, nwarps;
+    if (compute_capability >= VER_GEN13) {
+        mmq_x  =  MMQ_X_Q4_0_RDNA2;
+        mmq_y  =  MMQ_Y_Q4_0_RDNA2;
+        nwarps = NWARPS_Q4_0_RDNA2;
+    } else if (compute_capability >= VER_GEN12) {
+        mmq_x  =  MMQ_X_Q4_0_RDNA1;
+        mmq_y  =  MMQ_Y_Q4_0_RDNA1;
+        nwarps = NWARPS_Q4_0_RDNA1;
+    } else if (compute_capability >= VER_GEN9) {
+        mmq_x  =  MMQ_X_Q4_0_AMPERE;
+        mmq_y  =  MMQ_Y_Q4_0_AMPERE;
+        nwarps = NWARPS_Q4_0_AMPERE;
+    } else if (compute_capability >= VER_4VEC) {
+        mmq_x  =  MMQ_X_Q4_0_PASCAL;
+        mmq_y  =  MMQ_Y_Q4_0_PASCAL;
+        nwarps = NWARPS_Q4_0_PASCAL;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
+    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
+    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
+    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
+
+    if (nrows_x % mmq_y == 0) {
+        const bool need_check = false;
+        /*
+        DPCT1049:20: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_qs_q4_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<float, 1> tile_x_d_q4_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_0) + mmq_y / QI4_0),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q4_0<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_qs_q4_0_acc_ct1.get_pointer(),
+                            tile_x_d_q4_0_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    } else {
+        const bool need_check = true;
+        /*
+        DPCT1049:21: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_qs_q4_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<float, 1> tile_x_d_q4_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_0) + mmq_y / QI4_0),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q4_0<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_qs_q4_0_acc_ct1.get_pointer(),
+                            tile_x_d_q4_0_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_mul_mat_q4_1_q8_1_sycl(const void *vx, const void *vy,
+                                        float *dst, const int ncols_x,
+                                        const int nrows_x, const int ncols_y,
+                                        const int nrows_y, const int nrows_dst,
+                                        dpct::queue_ptr stream) try {
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+    const int compute_capability = ggml_sycl_info().devices[id].cc;
+
+    int mmq_x, mmq_y, nwarps;
+    if (compute_capability >= VER_GEN13) {
+        mmq_x  =  MMQ_X_Q4_1_RDNA2;
+        mmq_y  =  MMQ_Y_Q4_1_RDNA2;
+        nwarps = NWARPS_Q4_1_RDNA2;
+    } else if (compute_capability >= VER_GEN12) {
+        mmq_x  =  MMQ_X_Q4_1_RDNA1;
+        mmq_y  =  MMQ_Y_Q4_1_RDNA1;
+        nwarps = NWARPS_Q4_1_RDNA1;
+    } else if (compute_capability >= VER_GEN9) {
+        mmq_x  =  MMQ_X_Q4_1_AMPERE;
+        mmq_y  =  MMQ_Y_Q4_1_AMPERE;
+        nwarps = NWARPS_Q4_1_AMPERE;
+    } else if (compute_capability >= VER_4VEC) {
+        mmq_x  =  MMQ_X_Q4_1_PASCAL;
+        mmq_y  =  MMQ_Y_Q4_1_PASCAL;
+        nwarps = NWARPS_Q4_1_PASCAL;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
+    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
+    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
+    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
+
+    if (nrows_x % mmq_y == 0) {
+        const bool need_check = false;
+        /*
+        DPCT1049:22: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_qs_q4_1_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + +mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q4_1_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_1) + mmq_y / QI4_1),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q4_1<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_qs_q4_1_acc_ct1.get_pointer(),
+                            tile_x_dm_q4_1_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    } else {
+        const bool need_check = true;
+        /*
+        DPCT1049:23: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_qs_q4_1_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + +mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q4_1_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_1) + mmq_y / QI4_1),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q4_1<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_qs_q4_1_acc_ct1.get_pointer(),
+                            tile_x_dm_q4_1_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_mul_mat_q5_0_q8_1_sycl(const void *vx, const void *vy,
+                                        float *dst, const int ncols_x,
+                                        const int nrows_x, const int ncols_y,
+                                        const int nrows_y, const int nrows_dst,
+                                        dpct::queue_ptr stream) try {
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+    const int compute_capability = ggml_sycl_info().devices[id].cc;
+
+    int mmq_x, mmq_y, nwarps;
+    if (compute_capability >= VER_GEN13) {
+        mmq_x  =  MMQ_X_Q5_0_RDNA2;
+        mmq_y  =  MMQ_Y_Q5_0_RDNA2;
+        nwarps = NWARPS_Q5_0_RDNA2;
+    } else if (compute_capability >= VER_GEN12) {
+        mmq_x  =  MMQ_X_Q5_0_RDNA1;
+        mmq_y  =  MMQ_Y_Q5_0_RDNA1;
+        nwarps = NWARPS_Q5_0_RDNA1;
+    } else if (compute_capability >= VER_GEN9) {
+        mmq_x  =  MMQ_X_Q5_0_AMPERE;
+        mmq_y  =  MMQ_Y_Q5_0_AMPERE;
+        nwarps = NWARPS_Q5_0_AMPERE;
+    } else if (compute_capability >= VER_4VEC) {
+        mmq_x  =  MMQ_X_Q5_0_PASCAL;
+        mmq_y  =  MMQ_Y_Q5_0_PASCAL;
+        nwarps = NWARPS_Q5_0_PASCAL;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
+    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
+    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
+    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
+
+    if (nrows_x % mmq_y == 0) {
+        const bool need_check = false;
+        /*
+        DPCT1049:24: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q5_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<float, 1> tile_x_d_q5_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_0) + mmq_y / QI5_0),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q5_0<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q5_0_acc_ct1.get_pointer(),
+                            tile_x_d_q5_0_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    } else {
+        const bool need_check = true;
+        /*
+        DPCT1049:25: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q5_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<float, 1> tile_x_d_q5_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_0) + mmq_y / QI5_0),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q5_0<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q5_0_acc_ct1.get_pointer(),
+                            tile_x_d_q5_0_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_mul_mat_q5_1_q8_1_sycl(const void *vx, const void *vy,
+                                        float *dst, const int ncols_x,
+                                        const int nrows_x, const int ncols_y,
+                                        const int nrows_y, const int nrows_dst,
+                                        dpct::queue_ptr stream) try {
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+    const int compute_capability = ggml_sycl_info().devices[id].cc;
+
+    int mmq_x, mmq_y, nwarps;
+    if (compute_capability >= VER_GEN13) {
+        mmq_x  =  MMQ_X_Q5_1_RDNA2;
+        mmq_y  =  MMQ_Y_Q5_1_RDNA2;
+        nwarps = NWARPS_Q5_1_RDNA2;
+    } else if (compute_capability >= VER_GEN12) {
+        mmq_x  =  MMQ_X_Q5_1_RDNA1;
+        mmq_y  =  MMQ_Y_Q5_1_RDNA1;
+        nwarps = NWARPS_Q5_1_RDNA1;
+    } else if (compute_capability >= VER_GEN9) {
+        mmq_x  =  MMQ_X_Q5_1_AMPERE;
+        mmq_y  =  MMQ_Y_Q5_1_AMPERE;
+        nwarps = NWARPS_Q5_1_AMPERE;
+    } else if (compute_capability >= VER_4VEC) {
+        mmq_x  =  MMQ_X_Q5_1_PASCAL;
+        mmq_y  =  MMQ_Y_Q5_1_PASCAL;
+        nwarps = NWARPS_Q5_1_PASCAL;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
+    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
+    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
+    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
+
+    if (nrows_x % mmq_y == 0) {
+        const bool need_check = false;
+        /*
+        DPCT1049:26: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q5_1_acc_ct1(
+                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q5_1_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_1) + mmq_y / QI5_1),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q5_1<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q5_1_acc_ct1.get_pointer(),
+                            tile_x_dm_q5_1_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    } else {
+        const bool need_check = true;
+        /*
+        DPCT1049:27: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q5_1_acc_ct1(
+                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q5_1_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_1) + mmq_y / QI5_1),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q5_1<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q5_1_acc_ct1.get_pointer(),
+                            tile_x_dm_q5_1_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_mul_mat_q8_0_q8_1_sycl(const void *vx, const void *vy,
+                                        float *dst, const int ncols_x,
+                                        const int nrows_x, const int ncols_y,
+                                        const int nrows_y, const int nrows_dst,
+                                        dpct::queue_ptr stream) try {
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+    const int compute_capability = ggml_sycl_info().devices[id].cc;
+
+    int mmq_x, mmq_y, nwarps;
+    if (compute_capability >= VER_GEN13) {
+        mmq_x  =  MMQ_X_Q8_0_RDNA2;
+        mmq_y  =  MMQ_Y_Q8_0_RDNA2;
+        nwarps = NWARPS_Q8_0_RDNA2;
+    } else if (compute_capability >= VER_GEN12) {
+        mmq_x  =  MMQ_X_Q8_0_RDNA1;
+        mmq_y  =  MMQ_Y_Q8_0_RDNA1;
+        nwarps = NWARPS_Q8_0_RDNA1;
+    } else if (compute_capability >= VER_GEN9) {
+        mmq_x  =  MMQ_X_Q8_0_AMPERE;
+        mmq_y  =  MMQ_Y_Q8_0_AMPERE;
+        nwarps = NWARPS_Q8_0_AMPERE;
+    } else if (compute_capability >= VER_4VEC) {
+        mmq_x  =  MMQ_X_Q8_0_PASCAL;
+        mmq_y  =  MMQ_Y_Q8_0_PASCAL;
+        nwarps = NWARPS_Q8_0_PASCAL;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
+    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
+    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
+    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
+
+    if (nrows_x % mmq_y == 0) {
+        const bool need_check = false;
+        /*
+        DPCT1049:28: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_qs_q8_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<float, 1> tile_x_d_q8_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI8_0) + mmq_y / QI8_0),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q8_0<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_qs_q8_0_acc_ct1.get_pointer(),
+                            tile_x_d_q8_0_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    } else {
+        const bool need_check = true;
+        /*
+        DPCT1049:29: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_qs_q8_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<float, 1> tile_x_d_q8_0_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI8_0) + mmq_y / QI8_0),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q8_0<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_qs_q8_0_acc_ct1.get_pointer(),
+                            tile_x_d_q8_0_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_mul_mat_q2_K_q8_1_sycl(const void *vx, const void *vy,
+                                        float *dst, const int ncols_x,
+                                        const int nrows_x, const int ncols_y,
+                                        const int nrows_y, const int nrows_dst,
+                                        dpct::queue_ptr stream) try {
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+    const int compute_capability = ggml_sycl_info().devices[id].cc;
+
+    int mmq_x, mmq_y, nwarps;
+    if (compute_capability >= VER_GEN13) {
+        mmq_x  =  MMQ_X_Q2_K_RDNA2;
+        mmq_y  =  MMQ_Y_Q2_K_RDNA2;
+        nwarps = NWARPS_Q2_K_RDNA2;
+    } else if (compute_capability >= VER_GEN12) {
+        mmq_x  =  MMQ_X_Q2_K_RDNA1;
+        mmq_y  =  MMQ_Y_Q2_K_RDNA1;
+        nwarps = NWARPS_Q2_K_RDNA1;
+    } else if (compute_capability >= VER_GEN9) {
+        mmq_x  =  MMQ_X_Q2_K_AMPERE;
+        mmq_y  =  MMQ_Y_Q2_K_AMPERE;
+        nwarps = NWARPS_Q2_K_AMPERE;
+    } else if (compute_capability >= VER_4VEC) {
+        mmq_x  =  MMQ_X_Q2_K_PASCAL;
+        mmq_y  =  MMQ_Y_Q2_K_PASCAL;
+        nwarps = NWARPS_Q2_K_PASCAL;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
+    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
+    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
+    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
+
+    if (nrows_x % mmq_y == 0) {
+        const bool need_check = false;
+        /*
+        DPCT1049:30: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q2_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q2_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI2_K) + mmq_y / QI2_K),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_x_sc_q2_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q2_K<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q2_K_acc_ct1.get_pointer(),
+                            tile_x_dm_q2_K_acc_ct1.get_pointer(),
+                            tile_x_sc_q2_K_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    } else {
+        const bool need_check = true;
+        /*
+        DPCT1049:31: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q2_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q2_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI2_K) + mmq_y / QI2_K),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_x_sc_q2_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q2_K<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q2_K_acc_ct1.get_pointer(),
+                            tile_x_dm_q2_K_acc_ct1.get_pointer(),
+                            tile_x_sc_q2_K_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_mul_mat_q3_K_q8_1_sycl(const void *vx, const void *vy,
+                                        float *dst, const int ncols_x,
+                                        const int nrows_x, const int ncols_y,
+                                        const int nrows_y, const int nrows_dst,
+                                        dpct::queue_ptr stream) try {
+
+#if QK_K == 256
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+    const int compute_capability = ggml_sycl_info().devices[id].cc;
+
+    int mmq_x, mmq_y, nwarps;
+    if (compute_capability >= VER_GEN13) {
+        mmq_x  =  MMQ_X_Q3_K_RDNA2;
+        mmq_y  =  MMQ_Y_Q3_K_RDNA2;
+        nwarps = NWARPS_Q3_K_RDNA2;
+    } else if (compute_capability >= VER_GEN12) {
+        mmq_x  =  MMQ_X_Q3_K_RDNA1;
+        mmq_y  =  MMQ_Y_Q3_K_RDNA1;
+        nwarps = NWARPS_Q3_K_RDNA1;
+    } else if (compute_capability >= VER_GEN9) {
+        mmq_x  =  MMQ_X_Q3_K_AMPERE;
+        mmq_y  =  MMQ_Y_Q3_K_AMPERE;
+        nwarps = NWARPS_Q3_K_AMPERE;
+    } else if (compute_capability >= VER_4VEC) {
+        mmq_x  =  MMQ_X_Q3_K_PASCAL;
+        mmq_y  =  MMQ_Y_Q3_K_PASCAL;
+        nwarps = NWARPS_Q3_K_PASCAL;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
+    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
+    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
+    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
+
+    if (nrows_x % mmq_y == 0) {
+        const bool need_check = false;
+        /*
+        DPCT1049:32: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q3_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q3_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI3_K) + mmq_y / QI3_K),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_x_qh_q3_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 2) + mmq_y / 2), cgh);
+                sycl::local_accessor<int, 1> tile_x_sc_q3_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q3_K<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q3_K_acc_ct1.get_pointer(),
+                            tile_x_dm_q3_K_acc_ct1.get_pointer(),
+                            tile_x_qh_q3_K_acc_ct1.get_pointer(),
+                            tile_x_sc_q3_K_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    } else {
+        const bool need_check = true;
+        /*
+        DPCT1049:33: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q3_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q3_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI3_K) + mmq_y / QI3_K),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_x_qh_q3_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 2) + mmq_y / 2), cgh);
+                sycl::local_accessor<int, 1> tile_x_sc_q3_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 4) + mmq_y / 4), cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q3_K<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q3_K_acc_ct1.get_pointer(),
+                            tile_x_dm_q3_K_acc_ct1.get_pointer(),
+                            tile_x_qh_q3_K_acc_ct1.get_pointer(),
+                            tile_x_sc_q3_K_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    }
+#endif
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_mul_mat_q4_K_q8_1_sycl(const void *vx, const void *vy,
+                                        float *dst, const int ncols_x,
+                                        const int nrows_x, const int ncols_y,
+                                        const int nrows_y, const int nrows_dst,
+                                        dpct::queue_ptr stream) try {
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+    const int compute_capability = ggml_sycl_info().devices[id].cc;
+
+    int mmq_x, mmq_y, nwarps;
+    if (compute_capability >= VER_GEN13) {
+        mmq_x  =  MMQ_X_Q4_K_RDNA2;
+        mmq_y  =  MMQ_Y_Q4_K_RDNA2;
+        nwarps = NWARPS_Q4_K_RDNA2;
+    } else if (compute_capability >= VER_GEN12) {
+        mmq_x  =  MMQ_X_Q4_K_RDNA1;
+        mmq_y  =  MMQ_Y_Q4_K_RDNA1;
+        nwarps = NWARPS_Q4_K_RDNA1;
+    } else if (compute_capability >= VER_GEN9) {
+        mmq_x  =  MMQ_X_Q4_K_AMPERE;
+        mmq_y  =  MMQ_Y_Q4_K_AMPERE;
+        nwarps = NWARPS_Q4_K_AMPERE;
+    } else if (compute_capability >= VER_4VEC) {
+        mmq_x  =  MMQ_X_Q4_K_PASCAL;
+        mmq_y  =  MMQ_Y_Q4_K_PASCAL;
+        nwarps = NWARPS_Q4_K_PASCAL;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
+    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
+    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
+    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
+
+    if (nrows_x % mmq_y == 0) {
+        const bool need_check = false;
+        /*
+        DPCT1049:34: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q4_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q4_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_K) + mmq_y / QI4_K),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_x_sc_q4_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q4_K<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q4_K_acc_ct1.get_pointer(),
+                            tile_x_dm_q4_K_acc_ct1.get_pointer(),
+                            tile_x_sc_q4_K_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    } else {
+        const bool need_check = true;
+        /*
+        DPCT1049:35: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q4_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q4_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI4_K) + mmq_y / QI4_K),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_x_sc_q4_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q4_K<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q4_K_acc_ct1.get_pointer(),
+                            tile_x_dm_q4_K_acc_ct1.get_pointer(),
+                            tile_x_sc_q4_K_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_mul_mat_q5_K_q8_1_sycl(const void *vx, const void *vy,
+                                        float *dst, const int ncols_x,
+                                        const int nrows_x, const int ncols_y,
+                                        const int nrows_y, const int nrows_dst,
+                                        dpct::queue_ptr stream) try {
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+    const int compute_capability = ggml_sycl_info().devices[id].cc;
+
+    int mmq_x, mmq_y, nwarps;
+    if (compute_capability >= VER_GEN13) {
+        mmq_x  =  MMQ_X_Q5_K_RDNA2;
+        mmq_y  =  MMQ_Y_Q5_K_RDNA2;
+        nwarps = NWARPS_Q5_K_RDNA2;
+    } else if (compute_capability >= VER_GEN12) {
+        mmq_x  =  MMQ_X_Q5_K_RDNA1;
+        mmq_y  =  MMQ_Y_Q5_K_RDNA1;
+        nwarps = NWARPS_Q5_K_RDNA1;
+    } else if (compute_capability >= VER_GEN9) {
+        mmq_x  =  MMQ_X_Q5_K_AMPERE;
+        mmq_y  =  MMQ_Y_Q5_K_AMPERE;
+        nwarps = NWARPS_Q5_K_AMPERE;
+    } else if (compute_capability >= VER_4VEC) {
+        mmq_x  =  MMQ_X_Q5_K_PASCAL;
+        mmq_y  =  MMQ_Y_Q5_K_PASCAL;
+        nwarps = NWARPS_Q5_K_PASCAL;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
+    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
+    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
+    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
+
+    if (nrows_x % mmq_y == 0) {
+        const bool need_check = false;
+        /*
+        DPCT1049:36: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q5_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q5_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_K) + mmq_y / QI5_K),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_x_sc_q5_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q5_K<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q5_K_acc_ct1.get_pointer(),
+                            tile_x_dm_q5_K_acc_ct1.get_pointer(),
+                            tile_x_sc_q5_K_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    } else {
+        const bool need_check = true;
+        /*
+        DPCT1049:37: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_q5_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_q5_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI5_K) + mmq_y / QI5_K),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_x_sc_q5_K_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q5_K<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_q5_K_acc_ct1.get_pointer(),
+                            tile_x_dm_q5_K_acc_ct1.get_pointer(),
+                            tile_x_sc_q5_K_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+static void ggml_mul_mat_q6_K_q8_1_sycl(const void *vx, const void *vy,
+                                        float *dst, const int ncols_x,
+                                        const int nrows_x, const int ncols_y,
+                                        const int nrows_y, const int nrows_dst,
+                                        dpct::queue_ptr stream) try {
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+    const int compute_capability = ggml_sycl_info().devices[id].cc;
+
+    int mmq_x, mmq_y, nwarps;
+    if (compute_capability >= VER_GEN13) {
+        mmq_x  =  MMQ_X_Q6_K_RDNA2;
+        mmq_y  =  MMQ_Y_Q6_K_RDNA2;
+        nwarps = NWARPS_Q6_K_RDNA2;
+    } else if (compute_capability >= VER_GEN12) {
+        mmq_x  =  MMQ_X_Q6_K_RDNA1;
+        mmq_y  =  MMQ_Y_Q6_K_RDNA1;
+        nwarps = NWARPS_Q6_K_RDNA1;
+    } else if (compute_capability >= VER_GEN9) {
+        mmq_x  =  MMQ_X_Q6_K_AMPERE;
+        mmq_y  =  MMQ_Y_Q6_K_AMPERE;
+        nwarps = NWARPS_Q6_K_AMPERE;
+    } else if (compute_capability >= VER_4VEC) {
+        mmq_x  =  MMQ_X_Q6_K_PASCAL;
+        mmq_y  =  MMQ_Y_Q6_K_PASCAL;
+        nwarps = NWARPS_Q6_K_PASCAL;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    const int block_num_x = (nrows_x + mmq_y - 1) / mmq_y;
+    const int block_num_y = (ncols_y + mmq_x - 1) / mmq_x;
+    const sycl::range<3> block_nums(1, block_num_y, block_num_x);
+    const sycl::range<3> block_dims(1, nwarps, WARP_SIZE);
+
+    if (nrows_x % mmq_y == 0) {
+        const bool need_check = false;
+        /*
+        DPCT1049:38: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_acc_ct1(
+                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI6_K) + mmq_y / QI6_K),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_x_sc_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q6_K<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_acc_ct1.get_pointer(),
+                            tile_x_dm_acc_ct1.get_pointer(),
+                            tile_x_sc_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    } else {
+        const bool need_check = true;
+        /*
+        DPCT1049:39: The work-group size passed to the SYCL kernel may exceed
+        the limit. To get the device limit, query
+        info::device::max_work_group_size. Adjust the work-group size if needed.
+        */
+        {
+            dpct::has_capability_or_fail(stream->get_device(),
+                                         {sycl::aspect::fp16});
+
+            stream->submit([&](sycl::handler &cgh) {
+                sycl::local_accessor<int, 1> tile_x_ql_acc_ct1(
+                    sycl::range<1>(mmq_y * (2 * WARP_SIZE) + mmq_y), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_x_dm_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / QI6_K) + mmq_y / QI6_K),
+                    cgh);
+                sycl::local_accessor<int, 1> tile_x_sc_acc_ct1(
+                    sycl::range<1>(mmq_y * (WARP_SIZE / 8) + mmq_y / 8), cgh);
+                sycl::local_accessor<int, 1> tile_y_qs_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE), cgh);
+                sycl::local_accessor<sycl::half2, 1> tile_y_ds_acc_ct1(
+                    sycl::range<1>(mmq_x * WARP_SIZE / QI8_1), cgh);
+
+                cgh.parallel_for(
+                    sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                    [=](sycl::nd_item<3> item_ct1) {
+                        mul_mat_q6_K<need_check>(
+                            vx, vy, dst, ncols_x, nrows_x, ncols_y, nrows_y,
+                            nrows_dst, item_ct1,
+                            tile_x_ql_acc_ct1.get_pointer(),
+                            tile_x_dm_acc_ct1.get_pointer(),
+                            tile_x_sc_acc_ct1.get_pointer(),
+                            tile_y_qs_acc_ct1.get_pointer(),
+                            tile_y_ds_acc_ct1.get_pointer());
+                    });
+            });
+        }
+    }
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
+
+void ggml_sycl_op_mul_mat_q(
+    ggml_backend_sycl_context & ctx,
+    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
+    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
+    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
+    const int64_t src1_ncols, const int64_t src1_padded_row_size,
+    const dpct::queue_ptr &stream) try {
+
+    const int64_t ne00 = src0->ne[0];
+
+    const int64_t ne10 = src1->ne[0];
+    GGML_ASSERT(ne10 % QK8_1 == 0);
+
+    const int64_t ne0 = dst->ne[0];
+
+    const int64_t row_diff = row_high - row_low;
+
+    int device_id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(device_id = get_current_device_id()));
+
+    // the main device has a larger memory buffer to hold the results from all GPUs
+    // nrows_dst == nrows of the matrix that the dequantize_mul_mat kernel writes into
+    const int64_t nrows_dst = device_id == ctx.device ? ne0 : row_diff;
+
+    switch (src0->type) {
+        case GGML_TYPE_Q4_0:
+            ggml_mul_mat_q4_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q4_1:
+            ggml_mul_mat_q4_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q5_0:
+            ggml_mul_mat_q5_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q5_1:
+            ggml_mul_mat_q5_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q8_0:
+            ggml_mul_mat_q8_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q2_K:
+            ggml_mul_mat_q2_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q3_K:
+            ggml_mul_mat_q3_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q4_K:
+            ggml_mul_mat_q4_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q5_K:
+            ggml_mul_mat_q5_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
+            break;
+        case GGML_TYPE_Q6_K:
+            ggml_mul_mat_q6_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, src1_ncols, src1_padded_row_size, nrows_dst, stream);
+            break;
+        default:
+            GGML_ASSERT(false);
+            break;
+    }
+
+    (void) src1;
+    (void) dst;
+    (void) src1_ddf_i;
+}
+catch (sycl::exception const &exc) {
+  std::cerr << exc.what() << "Exception caught at file:" << __FILE__
+            << ", line:" << __LINE__ << std::endl;
+  std::exit(1);
+}
diff --git a/ggml/src/ggml-sycl/mmq.hpp b/ggml/src/ggml-sycl/mmq.hpp
new file mode 100644 (file)
index 0000000..3f5297a
--- /dev/null
@@ -0,0 +1,33 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#ifndef GGML_SYCL_MMQ_HPP
+#define GGML_SYCL_MMQ_HPP
+
+#include "common.hpp"
+
+void ggml_sycl_op_mul_mat_q(
+    ggml_backend_sycl_context & ctx,
+    const ggml_tensor* src0,
+    const ggml_tensor* src1,
+    ggml_tensor* dst,
+    const char* src0_dd_i,
+    const float* src1_ddf_i,
+    const char* src1_ddq_i,
+    float* dst_dd_i,
+    const int64_t row_low,
+    const int64_t row_high,
+    const int64_t src1_ncols,
+    const int64_t src1_padded_row_size,
+    const dpct::queue_ptr& stream);
+
+#endif // GGML_SYCL_MMQ_HPP
diff --git a/ggml/src/ggml-sycl/mmvq.cpp b/ggml/src/ggml-sycl/mmvq.cpp
new file mode 100644 (file)
index 0000000..2322764
--- /dev/null
@@ -0,0 +1,1024 @@
+#include "mmvq.hpp"
+#include "vecdotq.hpp"
+
+
+template <int qk, int qi, typename block_q_t, int vdr, vec_dot_q_sycl_t vec_dot_q_sycl>
+static void mul_mat_vec_q(const void * __restrict__ vx, const void * __restrict__ vy, float * __restrict__ dst, const int ncols, const int nrows,
+                          const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int blocks_per_row = ncols / qk;
+    const int blocks_per_warp = vdr * WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp = 0.0f;
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
+         i += blocks_per_warp) {
+        const int ibx = row*blocks_per_row + i; // x block index
+
+        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
+
+        const int iqs =
+            vdr *
+            (item_ct1.get_local_id(2) %
+             (qi / vdr)); // x block quant index when casting the quants to int
+
+        tmp += vec_dot_q_sycl(&x[ibx], &y[iby], iqs);
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+template <int qk, int qi, typename block_q_t, int vdr>
+static void mul_mat_vec_q_iq2_xxs_q8_1(const void *__restrict__ vx,
+                                       const void *__restrict__ vy,
+                                       float *__restrict__ dst, const int ncols,
+                                       const int nrows,
+                                       const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int blocks_per_row = ncols / qk;
+    const int blocks_per_warp = vdr * WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp = 0.0f;
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
+         i += blocks_per_warp) {
+        const int ibx = row*blocks_per_row + i; // x block index
+
+        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
+
+        const int iqs =
+            vdr *
+            (item_ct1.get_local_id(2) %
+             (qi / vdr)); // x block quant index when casting the quants to int
+
+        tmp += vec_dot_iq2_xxs_q8_1(&x[ibx], &y[iby], iqs, iq2xxs_grid, ksigns_iq2xs, kmask_iq2xs);
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+template <int qk, int qi, typename block_q_t, int vdr>
+static void mul_mat_vec_q_iq2_xs_q8_1(const void *__restrict__ vx,
+                                      const void *__restrict__ vy,
+                                      float *__restrict__ dst, const int ncols,
+                                      const int nrows,
+                                      const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int blocks_per_row = ncols / qk;
+    const int blocks_per_warp = vdr * WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp = 0.0f;
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
+         i += blocks_per_warp) {
+        const int ibx = row*blocks_per_row + i; // x block index
+
+        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
+
+        const int iqs =
+            vdr *
+            (item_ct1.get_local_id(2) %
+             (qi / vdr)); // x block quant index when casting the quants to int
+
+        tmp += vec_dot_iq2_xs_q8_1(&x[ibx], &y[iby], iqs, iq2xs_grid, ksigns64);
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+template <int qk, int qi, typename block_q_t, int vdr>
+static void mul_mat_vec_q_iq2_s_q8_1(const void *__restrict__ vx,
+                                     const void *__restrict__ vy,
+                                     float *__restrict__ dst, const int ncols,
+                                     const int nrows,
+                                     const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int blocks_per_row = ncols / qk;
+    const int blocks_per_warp = vdr * WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp = 0.0f;
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
+         i += blocks_per_warp) {
+        const int ibx = row*blocks_per_row + i; // x block index
+
+        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
+
+        const int iqs =
+            vdr *
+            (item_ct1.get_local_id(2) %
+             (qi / vdr)); // x block quant index when casting the quants to int
+
+        tmp += vec_dot_iq2_s_q8_1(&x[ibx], &y[iby], iqs);
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+template <int qk, int qi, typename block_q_t, int vdr>
+static void mul_mat_vec_q_iq3_xxs_q8_1(const void *__restrict__ vx,
+                                       const void *__restrict__ vy,
+                                       float *__restrict__ dst, const int ncols,
+                                       const int nrows,
+                                       const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int blocks_per_row = ncols / qk;
+    const int blocks_per_warp = vdr * WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp = 0.0f;
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
+         i += blocks_per_warp) {
+        const int ibx = row*blocks_per_row + i; // x block index
+
+        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
+
+        const int iqs =
+            vdr *
+            (item_ct1.get_local_id(2) %
+             (qi / vdr)); // x block quant index when casting the quants to int
+
+        tmp += vec_dot_iq3_xxs_q8_1(&x[ibx], &y[iby], iqs, iq3xxs_grid, ksigns64);
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+template <int qk, int qi, typename block_q_t, int vdr>
+static void mul_mat_vec_q_iq3_s_q8_1(const void *__restrict__ vx,
+                                     const void *__restrict__ vy,
+                                     float *__restrict__ dst, const int ncols,
+                                     const int nrows,
+                                     const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int blocks_per_row = ncols / qk;
+    const int blocks_per_warp = vdr * WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp = 0.0f;
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
+         i += blocks_per_warp) {
+        const int ibx = row*blocks_per_row + i; // x block index
+
+        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
+
+        const int iqs =
+            vdr *
+            (item_ct1.get_local_id(2) %
+             (qi / vdr)); // x block quant index when casting the quants to int
+
+        tmp += vec_dot_iq3_s_q8_1(&x[ibx], &y[iby], iqs, iq3s_grid);
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+template <int qk, int qi, typename block_q_t, int vdr>
+static void mul_mat_vec_q_iq1_s_q8_1(const void *__restrict__ vx,
+                                     const void *__restrict__ vy,
+                                     float *__restrict__ dst, const int ncols,
+                                     const int nrows,
+                                     const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int blocks_per_row = ncols / qk;
+    const int blocks_per_warp = vdr * WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp = 0.0f;
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
+         i += blocks_per_warp) {
+        const int ibx = row*blocks_per_row + i; // x block index
+
+        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
+
+        const int iqs =
+            vdr *
+            (item_ct1.get_local_id(2) %
+             (qi / vdr)); // x block quant index when casting the quants to int
+
+        tmp += vec_dot_iq1_s_q8_1(&x[ibx], &y[iby], iqs, iq1s_grid_gpu);
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+template <int qk, int qi, typename block_q_t, int vdr>
+static void mul_mat_vec_q_iq1_m_q8_1(const void *__restrict__ vx,
+                                     const void *__restrict__ vy,
+                                     float *__restrict__ dst, const int ncols,
+                                     const int nrows,
+                                     const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int blocks_per_row = ncols / qk;
+    const int blocks_per_warp = vdr * WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp = 0.0f;
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
+         i += blocks_per_warp) {
+        const int ibx = row*blocks_per_row + i; // x block index
+
+        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
+
+        const int iqs =
+            vdr *
+            (item_ct1.get_local_id(2) %
+             (qi / vdr)); // x block quant index when casting the quants to int
+
+        tmp += vec_dot_iq1_m_q8_1(&x[ibx], &y[iby], iqs);
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+template <int qk, int qi, typename block_q_t, int vdr>
+static void mul_mat_vec_q_iq4_nl_q8_1(const void *__restrict__ vx,
+                                      const void *__restrict__ vy,
+                                      float *__restrict__ dst, const int ncols,
+                                      const int nrows,
+                                      const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int blocks_per_row = ncols / qk;
+    const int blocks_per_warp = vdr * WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp = 0.0f;
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
+         i += blocks_per_warp) {
+        const int ibx = row*blocks_per_row + i; // x block index
+
+        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
+
+        const int iqs =
+            vdr *
+            (item_ct1.get_local_id(2) %
+             (qi / vdr)); // x block quant index when casting the quants to int
+
+        tmp += vec_dot_iq4_nl_q8_1(&x[ibx], &y[iby], iqs);
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+
+template <int qk, int qi, typename block_q_t, int vdr>
+static void mul_mat_vec_q_iq4_xs_q8_1(const void *__restrict__ vx,
+                                      const void *__restrict__ vy,
+                                      float *__restrict__ dst, const int ncols,
+                                      const int nrows,
+                                      const sycl::nd_item<3> &item_ct1) {
+    const int row = item_ct1.get_group(2) * item_ct1.get_local_range(1) +
+                    item_ct1.get_local_id(1);
+
+    if (row >= nrows) {
+        return;
+    }
+
+    const int blocks_per_row = ncols / qk;
+    const int blocks_per_warp = vdr * WARP_SIZE / qi;
+
+// partial sum for each thread
+    float tmp = 0.0f;
+
+    const block_q_t  * x = (const block_q_t  *) vx;
+    const block_q8_1 * y = (const block_q8_1 *) vy;
+
+    for (int i = item_ct1.get_local_id(2) / (qi / vdr); i < blocks_per_row;
+         i += blocks_per_warp) {
+        const int ibx = row*blocks_per_row + i; // x block index
+
+        const int iby = i * (qk/QK8_1); // y block index that aligns with ibx
+
+        const int iqs =
+            vdr *
+            (item_ct1.get_local_id(2) %
+             (qi / vdr)); // x block quant index when casting the quants to int
+
+        tmp += vec_dot_iq4_xs_q8_1(&x[ibx], &y[iby], iqs);
+    }
+
+    // sum up partial sums and write back result
+#pragma unroll
+    for (int mask = 16; mask > 0; mask >>= 1) {
+        tmp +=
+            dpct::permute_sub_group_by_xor(item_ct1.get_sub_group(), tmp, mask);
+    }
+
+    if (item_ct1.get_local_id(2) == 0) {
+        dst[row] = tmp;
+    }
+}
+
+static void mul_mat_vec_q4_0_q8_1_sycl(const void *vx, const void *vy,
+                                       float *dst, const int ncols,
+                                       const int nrows,
+                                       dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK4_0 == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q<QK4_0, QI4_0, block_q4_0,
+                                      VDR_Q4_0_Q8_1_MMVQ, vec_dot_q4_0_q8_1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_q4_1_q8_1_sycl(const void *vx, const void *vy,
+                                       float *dst, const int ncols,
+                                       const int nrows,
+                                       dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK4_1 == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q<QK4_0, QI4_1, block_q4_1,
+                                      VDR_Q4_1_Q8_1_MMVQ, vec_dot_q4_1_q8_1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_q5_0_q8_1_sycl(const void *vx, const void *vy,
+                                       float *dst, const int ncols,
+                                       const int nrows,
+                                       dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK5_0 == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q<QK5_0, QI5_0, block_q5_0,
+                                      VDR_Q5_0_Q8_1_MMVQ, vec_dot_q5_0_q8_1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_q5_1_q8_1_sycl(const void *vx, const void *vy,
+                                       float *dst, const int ncols,
+                                       const int nrows,
+                                       dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK5_1 == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q<QK5_1, QI5_1, block_q5_1,
+                                      VDR_Q5_1_Q8_1_MMVQ, vec_dot_q5_1_q8_1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_q8_0_q8_1_sycl(const void *vx, const void *vy,
+                                       float *dst, const int ncols,
+                                       const int nrows,
+                                       dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK8_0 == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q<QK8_0, QI8_0, block_q8_0,
+                                      VDR_Q8_0_Q8_1_MMVQ, vec_dot_q8_0_q8_1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_q2_K_q8_1_sycl(const void *vx, const void *vy,
+                                       float *dst, const int ncols,
+                                       const int nrows,
+                                       dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q<QK_K, QI2_K, block_q2_K,
+                                      VDR_Q2_K_Q8_1_MMVQ, vec_dot_q2_K_q8_1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_q3_K_q8_1_sycl(const void *vx, const void *vy,
+                                       float *dst, const int ncols,
+                                       const int nrows,
+                                       dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q<QK_K, QI3_K, block_q3_K,
+                                      VDR_Q3_K_Q8_1_MMVQ, vec_dot_q3_K_q8_1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_q4_K_q8_1_sycl(const void *vx, const void *vy,
+                                       float *dst, const int ncols,
+                                       const int nrows,
+                                       dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q<QK_K, QI4_K, block_q4_K,
+                                      VDR_Q4_K_Q8_1_MMVQ, vec_dot_q4_K_q8_1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_q5_K_q8_1_sycl(const void *vx, const void *vy,
+                                       float *dst, const int ncols,
+                                       const int nrows,
+                                       dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q<QK_K, QI5_K, block_q5_K,
+                                      VDR_Q5_K_Q8_1_MMVQ, vec_dot_q5_K_q8_1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_q6_K_q8_1_sycl(const void *vx, const void *vy,
+                                       float *dst, const int ncols,
+                                       const int nrows,
+                                       dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q<QK_K, QI6_K, block_q6_K,
+                                      VDR_Q6_K_Q8_1_MMVQ, vec_dot_q6_K_q8_1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+
+static void mul_mat_vec_iq2_xxs_q8_1_sycl(const void *vx, const void *vy,
+                                          float *dst, const int ncols,
+                                          const int nrows,
+                                          dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q_iq2_xxs_q8_1<QK_K, QI2_XXS, block_iq2_xxs, 1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_iq2_xs_q8_1_sycl(const void *vx, const void *vy,
+                                         float *dst, const int ncols,
+                                         const int nrows,
+                                         dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+            auto iq2xs_grid_ptr_ct1 = &iq2xs_grid[0];
+            auto ksigns64_ptr_ct1 = &ksigns64[0];
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q_iq2_xs_q8_1<QK_K, QI2_XS, block_iq2_xs, 1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_iq2_s_q8_1_sycl(const void *vx, const void *vy,
+                                         float *dst, const int ncols,
+                                         const int nrows,
+                                         dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+            auto iq2xs_grid_ptr_ct1 = &iq2xs_grid[0];
+            auto ksigns64_ptr_ct1 = &ksigns64[0];
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q_iq2_s_q8_1<QK_K, QI2_S, block_iq2_s, 1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_iq3_xxs_q8_1_sycl(const void *vx, const void *vy,
+                                          float *dst, const int ncols,
+                                          const int nrows,
+                                          dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+            auto iq3xxs_grid_ptr_ct1 = &iq3xxs_grid[0];
+            auto ksigns64_ptr_ct1 = &ksigns64[0];
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q_iq3_xxs_q8_1<QK_K, QI3_XXS, block_iq3_xxs, 1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_iq3_s_q8_1_sycl(const void *vx, const void *vy,
+                                          float *dst, const int ncols,
+                                          const int nrows,
+                                          dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+            auto iq3s_grid_ptr_ct1 = &iq3s_grid[0];
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q_iq3_s_q8_1<QK_K, QI3_XS, block_iq3_s, 1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_iq1_s_q8_1_sycl(const void *vx, const void *vy,
+                                          float *dst, const int ncols,
+                                          const int nrows,
+                                          dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+            auto iq1s_grid_ptr_ct1 = &iq1s_grid_gpu[0];
+            auto ksigns64_ptr_ct1 = &ksigns64[0];
+
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q_iq1_s_q8_1<QK_K, QI1_S, block_iq1_s, 1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_iq1_m_q8_1_sycl(const void *vx, const void *vy,
+                                          float *dst, const int ncols,
+                                          const int nrows,
+                                          dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q_iq1_m_q8_1<QK_K, QI1_S, block_iq1_m, 1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_iq4_nl_q8_1_sycl(const void *vx, const void *vy,
+                                          float *dst, const int ncols,
+                                          const int nrows,
+                                          dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK4_NL == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q_iq4_nl_q8_1<QK4_NL, QI4_NL, block_iq4_nl, 1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+static void mul_mat_vec_iq4_xs_q8_1_sycl(const void *vx, const void *vy,
+                                          float *dst, const int ncols,
+                                          const int nrows,
+                                          dpct::queue_ptr stream) {
+    GGML_ASSERT(ncols % QK_K == 0);
+    const int block_num_y = (nrows + GGML_SYCL_MMV_Y - 1) / GGML_SYCL_MMV_Y;
+    const sycl::range<3> block_nums(1, 1, block_num_y);
+    const sycl::range<3> block_dims(1, GGML_SYCL_MMV_Y, WARP_SIZE);
+    {
+
+        stream->submit([&](sycl::handler &cgh) {
+            cgh.parallel_for(
+                sycl::nd_range<3>(block_nums * block_dims, block_dims),
+                [=](sycl::nd_item<3> item_ct1)
+                    [[intel::reqd_sub_group_size(32)]] {
+                        mul_mat_vec_q_iq4_xs_q8_1<QK_K, QI4_XS, block_iq4_xs, 1>(
+                            vx, vy, dst, ncols, nrows, item_ct1);
+                    });
+        });
+    }
+}
+
+void ggml_sycl_op_mul_mat_vec_q(
+    ggml_backend_sycl_context & ctx,
+    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
+    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
+    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
+    const int64_t src1_ncols, const int64_t src1_padded_row_size,
+    const dpct::queue_ptr &stream) {
+
+    const int64_t ne10 = src1->ne[0];
+    GGML_ASSERT(ne10 % QK8_1 == 0);
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t row_diff = row_high - row_low;
+
+    int id;
+    SYCL_CHECK(
+        CHECK_TRY_ERROR(id = get_current_device_id()));
+
+    // the main device has a larger memory buffer to hold the results from all GPUs
+    // nrows_dst == nrows of the matrix that the kernel writes into
+    const int64_t nrows_dst = id == ctx.device ? ne00 : row_diff;
+
+    switch (src0->type) {
+        case GGML_TYPE_Q4_0:
+            mul_mat_vec_q4_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q4_1:
+            mul_mat_vec_q4_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q5_0:
+            mul_mat_vec_q5_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q5_1:
+            mul_mat_vec_q5_1_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q8_0:
+            mul_mat_vec_q8_0_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q2_K:
+            mul_mat_vec_q2_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q3_K:
+            mul_mat_vec_q3_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q4_K:
+            mul_mat_vec_q4_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q5_K:
+            mul_mat_vec_q5_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_Q6_K:
+            mul_mat_vec_q6_K_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_IQ1_S:
+            mul_mat_vec_iq1_s_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_IQ1_M:
+            mul_mat_vec_iq1_m_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_IQ2_XXS:
+            mul_mat_vec_iq2_xxs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_IQ2_XS:
+            mul_mat_vec_iq2_xs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_IQ2_S:
+            mul_mat_vec_iq2_s_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_IQ3_XXS:
+            mul_mat_vec_iq3_xxs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_IQ3_S:
+            mul_mat_vec_iq3_s_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_IQ4_NL:
+            mul_mat_vec_iq4_nl_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        case GGML_TYPE_IQ4_XS:
+            mul_mat_vec_iq4_xs_q8_1_sycl(src0_dd_i, src1_ddq_i, dst_dd_i, ne00, row_diff, stream);
+            break;
+        default:
+            GGML_ASSERT(false);
+            break;
+    }
+
+    (void) src1;
+    (void) dst;
+    (void) src1_ddf_i;
+    (void) src1_ncols;
+    (void) src1_padded_row_size;
+}
diff --git a/ggml/src/ggml-sycl/mmvq.hpp b/ggml/src/ggml-sycl/mmvq.hpp
new file mode 100644 (file)
index 0000000..049b43d
--- /dev/null
@@ -0,0 +1,27 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#ifndef GGML_SYCL_MMVQ_HPP
+#define GGML_SYCL_MMVQ_HPP
+
+#include "common.hpp"
+
+
+void ggml_sycl_op_mul_mat_vec_q(
+    ggml_backend_sycl_context & ctx,
+    const ggml_tensor *src0, const ggml_tensor *src1, ggml_tensor *dst,
+    const char *src0_dd_i, const float *src1_ddf_i, const char *src1_ddq_i,
+    float *dst_dd_i, const int64_t row_low, const int64_t row_high,
+    const int64_t src1_ncols, const int64_t src1_padded_row_size,
+    const dpct::queue_ptr &stream);
+
+#endif // GGML_SYCL_MMVQ_HPP
diff --git a/ggml/src/ggml-sycl/presets.hpp b/ggml/src/ggml-sycl/presets.hpp
new file mode 100644 (file)
index 0000000..5e6b618
--- /dev/null
@@ -0,0 +1,67 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#ifndef GGML_SYCL_PRESETS_HPP
+#define GGML_SYCL_PRESETS_HPP
+
+#define GGML_SYCL_MAX_STREAMS       8
+#define GGML_SYCL_MAX_BUFFERS       256
+#define GGML_SYCL_MAX_DEVICES       48
+#define GGML_SYCL_NAME "SYCL"
+
+#define WARP_SIZE 32
+#define MATRIX_ROW_PADDING 512 // last row of quant. matrices is a multiple of this to avoid out-of-bounds memory accesses
+
+#define SYCL_GELU_BLOCK_SIZE 256
+#define SYCL_SILU_BLOCK_SIZE 256
+#define SYCL_TANH_BLOCK_SIZE 256
+#define SYCL_RELU_BLOCK_SIZE 256
+#define SYCL_HARDSIGMOID_BLOCK_SIZE 256
+#define SYCL_HARDSWISH_BLOCK_SIZE 256
+#define SYCL_SQR_BLOCK_SIZE 256
+#define SYCL_CPY_BLOCK_SIZE 32
+#define SYCL_SCALE_BLOCK_SIZE 256
+#define SYCL_CLAMP_BLOCK_SIZE 256
+#define SYCL_ROPE_BLOCK_SIZE 256
+#define SYCL_ALIBI_BLOCK_SIZE 32
+#define SYCL_DIAG_MASK_INF_BLOCK_SIZE 32
+#define SYCL_QUANTIZE_BLOCK_SIZE 256
+#define SYCL_DEQUANTIZE_BLOCK_SIZE 256
+#define SYCL_GET_ROWS_BLOCK_SIZE 256
+#define SYCL_UPSCALE_BLOCK_SIZE 256
+#define SYCL_CONCAT_BLOCK_SIZE 256
+#define SYCL_PAD_BLOCK_SIZE 256
+#define SYCL_ACC_BLOCK_SIZE 256
+#define SYCL_IM2COL_BLOCK_SIZE 256
+#define SYCL_POOL2D_BLOCK_SIZE 256
+
+// dmmv = dequantize_mul_mat_vec
+#ifndef GGML_SYCL_DMMV_X
+#define GGML_SYCL_DMMV_X 32
+#endif
+#ifndef GGML_SYCL_MMV_Y
+#define GGML_SYCL_MMV_Y 1
+#endif
+
+#ifndef K_QUANTS_PER_ITERATION
+#define K_QUANTS_PER_ITERATION 2
+#else
+static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2");
+#endif
+
+#ifndef GGML_SYCL_PEER_MAX_BATCH_SIZE
+#define GGML_SYCL_PEER_MAX_BATCH_SIZE 128
+#endif // GGML_SYCL_PEER_MAX_BATCH_SIZE
+
+#define MUL_MAT_SRC1_COL_STRIDE 128
+
+#endif // GGML_SYCL_PRESETS_HPP
diff --git a/ggml/src/ggml-sycl/vecdotq.hpp b/ggml/src/ggml-sycl/vecdotq.hpp
new file mode 100644 (file)
index 0000000..5e2e825
--- /dev/null
@@ -0,0 +1,1161 @@
+//
+// MIT license
+// Copyright (C) 2024 Intel Corporation
+// SPDX-License-Identifier: MIT
+//
+
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+
+#ifndef GGML_SYCL_VECDOTQ_HPP
+#define GGML_SYCL_VECDOTQ_HPP
+
+#include "dpct/helper.hpp"
+
+typedef float (*vec_dot_q_sycl_t)(const void * __restrict__ vbq, const block_q8_1 * __restrict__ bq8_1, const int & iqs);
+
+static __dpct_inline__ int get_int_from_int8(const int8_t* x8, const int& i32) {
+  const uint16_t* x16 =
+      (const uint16_t*)(x8 + sizeof(int) * i32); // assume at least 2 byte
+                                                 // alignment
+
+  int x32 = 0;
+  x32 |= x16[0] << 0;
+  x32 |= x16[1] << 16;
+
+  return x32;
+}
+
+static __dpct_inline__ int get_int_from_uint8(
+    const uint8_t* x8,
+    const int& i32) {
+  const uint16_t* x16 =
+      (const uint16_t*)(x8 + sizeof(int) * i32); // assume at least 2 byte
+                                                 // alignment
+
+  int x32 = 0;
+  x32 |= x16[0] << 0;
+  x32 |= x16[1] << 16;
+
+  return x32;
+}
+
+static __dpct_inline__ int get_int_from_int8_aligned(
+    const int8_t* x8,
+    const int& i32) {
+  return *(
+      (const int*)(x8 + sizeof(int) * i32)); // assume at least 4 byte alignment
+}
+
+static __dpct_inline__ int get_int_from_uint8_aligned(
+    const uint8_t* x8,
+    const int& i32) {
+  return *(
+      (const int*)(x8 + sizeof(int) * i32)); // assume at least 4 byte alignment
+}
+
+static __dpct_inline__ void get_int_from_table_16(const uint32_t &q4,
+                                                  const uint8_t *values,
+                                                  int &val1, int &val2) {
+
+    uint32_t aux32; const uint8_t * q8 = (const uint8_t *)&aux32;
+    aux32 = q4 & 0x0f0f0f0f;
+    uint16_t v1 = values[q8[0]] | (values[q8[1]] << 8);
+    uint16_t v2 = values[q8[2]] | (values[q8[3]] << 8);
+    val1 = v1 | (v2 << 16);
+    aux32 = (q4 >> 4) & 0x0f0f0f0f;
+    v1 = values[q8[0]] | (values[q8[1]] << 8);
+    v2 = values[q8[2]] | (values[q8[3]] << 8);
+    val2 = v1 | (v2 << 16);
+}
+
+#define VDR_Q2_K_Q8_1_MMVQ 1
+
+// contiguous v/x values
+static __dpct_inline__ float vec_dot_q2_K_q8_1_impl_mmvq(
+    const int &v, const int *__restrict__ u, const uint8_t *__restrict__ scales,
+    const sycl::half2 &dm2, const float *__restrict__ d8) {
+
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR2_K; ++i) {
+        const int sc = scales[2*i];
+
+        const int vi = (v >> (2*i)) & 0x03030303;
+
+        sumf_d +=
+            d8[i] * (dpct::dp4a(vi, u[i], 0) * (sc & 0xF)); // SIMD dot product
+
+        // fill int with 4x m
+        int m = sc >> 4;
+        m |= m <<  8;
+        m |= m << 16;
+        sumf_m += d8[i] *
+                  dpct::dp4a(
+                      m, u[i],
+                      0); // multiply constant q2_K part with sum of q8_1 values
+    }
+
+    const sycl::float2 dm2f =
+        dm2.convert<float, sycl::rounding_mode::automatic>();
+
+    return dm2f.x() * sumf_d - dm2f.y() * sumf_m;
+}
+
+
+#define VDR_Q3_K_Q8_1_MMVQ 1
+
+// contiguous v/x values
+static __dpct_inline__ float vec_dot_q3_K_q8_1_impl_mmvq(
+    const int &vl, const int &vh, const int *__restrict__ u,
+    const uint8_t *__restrict__ scales, const int &scale_offset,
+    const float &d3, const float *__restrict__ d8) {
+
+    float sumf = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR3_K; ++i) {
+        const int isc = scale_offset + 2*i;
+
+        const int isc_low = isc % (QK_K/32);
+        const int sc_shift_low = 4 * (isc / (QK_K/32));
+        const int sc_low  = (scales[isc_low] >> sc_shift_low) & 0xF;
+
+        const int isc_high = isc % (QK_K/64);
+        const int sc_shift_high = 2 * (isc / (QK_K/64));
+        const int sc_high = ((scales[(QK_K/32) + isc_high] >> sc_shift_high) & 3) << 4;
+
+        const int sc = (sc_low | sc_high) - 32;
+
+        const int vil = (vl >> (2*i)) & 0x03030303;
+
+        const int vih = ((vh >> i) << 2) & 0x04040404;
+
+        const int vi =
+            dpct::vectorized_binary<sycl::char4>(vil, vih, dpct::sub_sat());
+
+        sumf += d8[i] * (dpct::dp4a(vi, u[i], 0) * sc); // SIMD dot product
+    }
+
+    return d3 * sumf;
+}
+
+#define VDR_Q4_K_Q8_1_MMVQ 2
+
+// contiguous v/x values
+static __dpct_inline__ float vec_dot_q4_K_q8_1_impl_vmmq(
+    const int *__restrict__ v, const int *__restrict__ u,
+    const uint8_t *__restrict__ sc, const uint8_t *__restrict__ m,
+    const sycl::half2 &dm4, const float *__restrict__ d8) {
+
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR4_K; ++i) {
+        const int v0i = (v[0] >> (4*i)) & 0x0F0F0F0F;
+        const int v1i = (v[1] >> (4*i)) & 0x0F0F0F0F;
+
+        const int dot1 =
+            dpct::dp4a(v1i, u[2 * i + 1],
+                       dpct::dp4a(v0i, u[2 * i + 0], 0)); // SIMD dot product
+        const int dot2 =
+            dpct::dp4a(0x01010101, u[2 * i + 1],
+                       dpct::dp4a(0x01010101, u[2 * i + 0], 0)); // sum of u
+
+        sumf_d += d8[i] * (dot1 * sc[i]);
+        sumf_m += d8[i] * (dot2 * m[i]);  // multiply constant part of q4_K with sum of q8_1 values
+    }
+
+    const sycl::float2 dm4f =
+        dm4.convert<float, sycl::rounding_mode::automatic>();
+
+    return dm4f.x() * sumf_d - dm4f.y() * sumf_m;
+}
+
+
+#define VDR_Q5_K_Q8_1_MMVQ 2
+
+// contiguous v/x values
+static __dpct_inline__ float vec_dot_q5_K_q8_1_impl_vmmq(
+    const int *__restrict__ vl, const int *__restrict__ vh,
+    const int *__restrict__ u, const uint8_t *__restrict__ sc,
+    const uint8_t *__restrict__ m, const sycl::half2 &dm5,
+    const float *__restrict__ d8) {
+
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR5_K; ++i) {
+        const int vl0i = (vl[0] >> (4*i)) & 0x0F0F0F0F;
+        const int vl1i = (vl[1] >> (4*i)) & 0x0F0F0F0F;
+
+        const int vh0i = ((vh[0] >> i) << 4) & 0x10101010;
+        const int vh1i = ((vh[1] >> i) << 4) & 0x10101010;
+
+        const int v0i = vl0i | vh0i;
+        const int v1i = vl1i | vh1i;
+
+        const int dot1 =
+            dpct::dp4a(v0i, u[2 * i + 0],
+                       dpct::dp4a(v1i, u[2 * i + 1], 0)); // SIMD dot product
+        const int dot2 =
+            dpct::dp4a(0x01010101, u[2 * i + 0],
+                       dpct::dp4a(0x01010101, u[2 * i + 1], 0)); // sum of u
+
+        sumf_d += d8[i] * (dot1 * sc[i]);
+        sumf_m += d8[i] * (dot2 * m[i]);
+
+    }
+
+    const sycl::float2 dm5f =
+        dm5.convert<float, sycl::rounding_mode::automatic>();
+
+    return dm5f.x() * sumf_d - dm5f.y() * sumf_m;
+}
+
+
+#define VDR_Q6_K_Q8_1_MMVQ 1
+
+// contiguous v/x values
+static __dpct_inline__ float
+vec_dot_q6_K_q8_1_impl_mmvq(const int &vl, const int &vh,
+                            const int *__restrict__ u,
+                            const int8_t *__restrict__ scales, const float &d,
+                            const float *__restrict__ d8) {
+
+    float sumf = 0.0f;
+
+#pragma unroll
+    for (int i = 0; i < QR6_K; ++i) {
+        const int sc = scales[4*i];
+
+        const int vil = (vl >> (4*i)) & 0x0F0F0F0F;
+
+        const int vih = ((vh >> (4*i)) << 4) & 0x30303030;
+
+        const int vi = dpct::vectorized_binary<sycl::char4>(
+            (vil | vih), 0x20202020, dpct::sub_sat()); // vi = (vil | vih) - 32
+
+        sumf += d8[i] * (dpct::dp4a(vi, u[i], 0) * sc); // SIMD dot product
+    }
+
+    return d*sumf;
+}
+
+// VDR = vec dot ratio, how many contiguous integers each thread processes when the vec dot kernel is called
+// MMVQ = mul_mat_vec_q, MMQ = mul_mat_q
+
+#define VDR_Q4_0_Q8_1_MMVQ 2
+#define VDR_Q4_0_Q8_1_MMQ  4
+
+template <int vdr>
+static __dpct_inline__ float vec_dot_q4_0_q8_1_impl(const int *v, const int *u,
+                                                    const float &d4,
+                                                    const sycl::half2 &ds8) {
+    int sumi = 0;
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        const int vi0 = (v[i] >> 0) & 0x0F0F0F0F;
+        const int vi1 = (v[i] >> 4) & 0x0F0F0F0F;
+
+        // SIMD dot product of quantized values
+        sumi = dpct::dp4a(vi0, u[2 * i + 0], sumi);
+        sumi = dpct::dp4a(vi1, u[2 * i + 1], sumi);
+    }
+
+    const sycl::float2 ds8f =
+        ds8.convert<float, sycl::rounding_mode::automatic>();
+
+    // second part effectively subtracts 8 from each quant value
+    return d4 * (sumi * ds8f.x() - (8 * vdr / QI4_0) * ds8f.y());
+}
+
+#define VDR_Q4_1_Q8_1_MMVQ 2
+#define VDR_Q4_1_Q8_1_MMQ  4
+
+template <int vdr>
+static __dpct_inline__ float vec_dot_q4_1_q8_1_impl(const int *v, const int *u,
+                                                    const sycl::half2 &dm4,
+                                                    const sycl::half2 &ds8) {
+
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        const int vi0 = (v[i] >> 0) & 0x0F0F0F0F;
+        const int vi1 = (v[i] >> 4) & 0x0F0F0F0F;
+
+        // SIMD dot product of quantized values
+        sumi = dpct::dp4a(vi0, u[2 * i + 0], sumi);
+        sumi = dpct::dp4a(vi1, u[2 * i + 1], sumi);
+    }
+
+#ifdef GGML_SYCL_F16
+    const sycl::float2 tmp =
+        (dm4 * ds8).convert<float, sycl::rounding_mode::automatic>();
+    const float d4d8 = tmp.x();
+    const float m4s8 = tmp.y();
+#else
+    const sycl::float2 dm4f =
+        dm4.convert<float, sycl::rounding_mode::automatic>();
+    const sycl::float2 ds8f =
+        ds8.convert<float, sycl::rounding_mode::automatic>();
+    const float d4d8 = dm4f.x() * ds8f.x();
+    const float m4s8 = dm4f.y() * ds8f.y();
+#endif // GGML_SYCL_F16
+
+    // scale second part of sum by QI8_1/(vdr * QR4_1) to compensate for multiple threads adding it
+    return sumi * d4d8 + m4s8 / (QI8_1 / (vdr * QR4_1));
+}
+
+#define VDR_Q5_0_Q8_1_MMVQ 2
+#define VDR_Q5_0_Q8_1_MMQ  4
+
+template <int vdr>
+static __dpct_inline__ float
+vec_dot_q5_0_q8_1_impl(const int *vl, const int *vh, const int *u,
+                       const float &d5, const sycl::half2 &ds8) {
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        int vi0 = (vl[i] >>  0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits
+        vi0    |= (vh[i] <<  4) & 0x00000010; // 0 ->  4
+        vi0    |= (vh[i] << 11) & 0x00001000; // 1 -> 12
+        vi0    |= (vh[i] << 18) & 0x00100000; // 2 -> 20
+        vi0    |= (vh[i] << 25) & 0x10000000; // 3 -> 28
+        sumi = dpct::dp4a(vi0, u[2 * i + 0],
+                          sumi); // SIMD dot product of quantized values
+
+        int vi1 = (vl[i] >>  4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits
+        vi1    |= (vh[i] >> 12) & 0x00000010; // 16 ->  4
+        vi1    |= (vh[i] >>  5) & 0x00001000; // 17 -> 12
+        vi1    |= (vh[i] <<  2) & 0x00100000; // 18 -> 20
+        vi1    |= (vh[i] <<  9) & 0x10000000; // 19 -> 28
+        sumi = dpct::dp4a(vi1, u[2 * i + 1],
+                          sumi); // SIMD dot product of quantized values
+    }
+
+    const sycl::float2 ds8f =
+        ds8.convert<float, sycl::rounding_mode::automatic>();
+
+    // second part effectively subtracts 16 from each quant value
+    return d5 * (sumi * ds8f.x() - (16 * vdr / QI5_0) * ds8f.y());
+}
+
+#define VDR_Q5_1_Q8_1_MMVQ 2
+#define VDR_Q5_1_Q8_1_MMQ  4
+
+template <int vdr>
+static __dpct_inline__ float
+vec_dot_q5_1_q8_1_impl(const int *vl, const int *vh, const int *u,
+                       const sycl::half2 &dm5, const sycl::half2 &ds8) {
+
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        int vi0 = (vl[i] >>  0) & 0x0F0F0F0F; // lower 4 qs bits, still need qh as 5th bits
+        vi0    |= (vh[i] <<  4) & 0x00000010; // 0 ->  4
+        vi0    |= (vh[i] << 11) & 0x00001000; // 1 -> 12
+        vi0    |= (vh[i] << 18) & 0x00100000; // 2 -> 20
+        vi0    |= (vh[i] << 25) & 0x10000000; // 3 -> 28
+        sumi = dpct::dp4a(vi0, u[2 * i + 0],
+                          sumi); // SIMD dot product of quantized values
+
+        int vi1 = (vl[i] >>  4) & 0x0F0F0F0F; // upper 4 qs bits, still need qh as 5th bits
+        vi1    |= (vh[i] >> 12) & 0x00000010; // 16 ->  4
+        vi1    |= (vh[i] >>  5) & 0x00001000; // 17 -> 12
+        vi1    |= (vh[i] <<  2) & 0x00100000; // 18 -> 20
+        vi1    |= (vh[i] <<  9) & 0x10000000; // 19 -> 28
+        sumi = dpct::dp4a(vi1, u[2 * i + 1],
+                          sumi); // SIMD dot product of quantized values
+    }
+
+#ifdef GGML_SYCL_F16
+     const sycl::float2 tmp =
+        (dm5 * ds8).convert<float, sycl::rounding_mode::automatic>();
+    const float d5d8 = tmp.x();
+    const float m5s8 = tmp.y();
+
+
+#else
+    const sycl::float2 dm5f =
+        dm5.convert<float, sycl::rounding_mode::automatic>();
+    const sycl::float2 ds8f =
+        ds8.convert<float, sycl::rounding_mode::automatic>();
+    const float d5d8 = dm5f.x() * ds8f.x();
+    const float m5s8 = dm5f.y() * ds8f.y();
+#endif // GGML_SYCL_F16
+
+    // scale second part of sum by QI5_1 / vdr to compensate for multiple threads adding it
+    return sumi*d5d8 + m5s8 / (QI5_1 / vdr);
+}
+
+#define VDR_Q8_0_Q8_1_MMVQ 2
+#define VDR_Q8_0_Q8_1_MMQ 8
+
+template <int vdr>
+static __dpct_inline__ float vec_dot_q8_0_q8_1_impl(const int *v, const int *u,
+                                                    const float &d8_0,
+                                                    const float &d8_1) {
+
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        // SIMD dot product of quantized values
+        sumi = dpct::dp4a(v[i], u[i], sumi);
+    }
+
+    return d8_0*d8_1 * sumi;
+}
+
+template <int vdr>
+static __dpct_inline__ float vec_dot_q8_1_q8_1_impl(const int *v, const int *u,
+                                                    const sycl::half2 &dm8,
+                                                    const sycl::half2 &ds8) {
+
+    int sumi = 0;
+
+#pragma unroll
+    for (int i = 0; i < vdr; ++i) {
+        // SIMD dot product of quantized values
+        sumi = dpct::dp4a(v[i], u[i], sumi);
+    }
+
+#ifdef GGML_SYCL_F16
+    const sycl::float2 tmp =
+        (dm8 * ds8).convert<float, sycl::rounding_mode::automatic>();
+    const float d8d8 = tmp.x();
+    const float m8s8 = tmp.y();
+#else
+    const sycl::float2 dm8f =
+        dm8.convert<float, sycl::rounding_mode::automatic>();
+    const sycl::float2 ds8f =
+        ds8.convert<float, sycl::rounding_mode::automatic>();
+    const float d8d8 = dm8f.x() * ds8f.x();
+    const float m8s8 = dm8f.y() * ds8f.y();
+#endif // GGML_SYCL_F16
+
+    // scale second part of sum by QI8_1/ vdr to compensate for multiple threads adding it
+    return sumi*d8d8 + m8s8 / (QI8_1 / vdr);
+}
+
+static __dpct_inline__ float
+vec_dot_q4_0_q8_1(const void *__restrict__ vbq,
+                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+    const block_q4_0 * bq4_0 = (const block_q4_0 *) vbq;
+
+    int v[VDR_Q4_0_Q8_1_MMVQ];
+    int u[2*VDR_Q4_0_Q8_1_MMVQ];
+
+#pragma unroll
+    for (int i = 0; i < VDR_Q4_0_Q8_1_MMVQ; ++i) {
+        v[i]     = get_int_from_uint8(bq4_0->qs, iqs + i);
+        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
+        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_0);
+    }
+
+    return vec_dot_q4_0_q8_1_impl<VDR_Q4_0_Q8_1_MMVQ>(v, u, bq4_0->d, bq8_1->ds);
+}
+
+static __dpct_inline__ float
+vec_dot_q4_1_q8_1(const void *__restrict__ vbq,
+                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+    const block_q4_1 * bq4_1 = (const block_q4_1 *) vbq;
+
+    int v[VDR_Q4_1_Q8_1_MMVQ];
+    int u[2*VDR_Q4_1_Q8_1_MMVQ];
+
+#pragma unroll
+    for (int i = 0; i < VDR_Q4_1_Q8_1_MMVQ; ++i) {
+        v[i]    = get_int_from_uint8_aligned(bq4_1->qs, iqs + i);
+        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
+        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI4_1);
+    }
+
+    return vec_dot_q4_1_q8_1_impl<VDR_Q4_1_Q8_1_MMVQ>(v, u, bq4_1->dm, bq8_1->ds);
+}
+
+static __dpct_inline__ float
+vec_dot_q5_0_q8_1(const void *__restrict__ vbq,
+                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+    const block_q5_0 * bq5_0 = (const block_q5_0 *) vbq;
+
+    int vl[VDR_Q5_0_Q8_1_MMVQ];
+    int vh[VDR_Q5_0_Q8_1_MMVQ];
+    int  u[2*VDR_Q5_0_Q8_1_MMVQ];
+
+#pragma unroll
+    for (int i = 0; i < VDR_Q5_0_Q8_1_MMVQ; ++i) {
+        vl[i]    = get_int_from_uint8(bq5_0->qs, iqs + i);
+        vh[i]    = get_int_from_uint8(bq5_0->qh, 0) >> (4 * (iqs + i));
+        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
+        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_0);
+    }
+
+    return vec_dot_q5_0_q8_1_impl<VDR_Q5_0_Q8_1_MMVQ>(vl, vh, u, bq5_0->d, bq8_1->ds);
+}
+
+static __dpct_inline__ float
+vec_dot_q5_1_q8_1(const void *__restrict__ vbq,
+                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+    const block_q5_1 * bq5_1 = (const block_q5_1 *) vbq;
+
+    int vl[VDR_Q5_1_Q8_1_MMVQ];
+    int vh[VDR_Q5_1_Q8_1_MMVQ];
+    int  u[2*VDR_Q5_1_Q8_1_MMVQ];
+
+#pragma unroll
+    for (int i = 0; i < VDR_Q5_1_Q8_1_MMVQ; ++i) {
+        vl[i]   = get_int_from_uint8_aligned(bq5_1->qs, iqs + i);
+        vh[i]   = get_int_from_uint8_aligned(bq5_1->qh, 0) >> (4 * (iqs + i));
+        u[2*i+0] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
+        u[2*i+1] = get_int_from_int8_aligned(bq8_1->qs, iqs + i + QI5_1);
+    }
+
+    return vec_dot_q5_1_q8_1_impl<VDR_Q5_1_Q8_1_MMVQ>(vl, vh, u, bq5_1->dm, bq8_1->ds);
+}
+
+static __dpct_inline__ float
+vec_dot_q8_0_q8_1(const void *__restrict__ vbq,
+                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+    const block_q8_0 * bq8_0 = (const block_q8_0 *) vbq;
+
+    int v[VDR_Q8_0_Q8_1_MMVQ];
+    int u[VDR_Q8_0_Q8_1_MMVQ];
+
+#pragma unroll
+    for (int i = 0; i < VDR_Q8_0_Q8_1_MMVQ; ++i) {
+        v[i] = get_int_from_int8(bq8_0->qs, iqs + i);
+        u[i] = get_int_from_int8_aligned(bq8_1->qs, iqs + i);
+    }
+
+    return vec_dot_q8_0_q8_1_impl<VDR_Q8_0_Q8_1_MMVQ>(v, u, bq8_0->d,
+                                                      bq8_1->ds[0]);
+}
+
+static __dpct_inline__ float
+vec_dot_q2_K_q8_1(const void *__restrict__ vbq,
+                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+    const block_q2_K * bq2_K = (const block_q2_K *) vbq;
+
+    const int bq8_offset = QR2_K * (iqs / QI8_1);
+    const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2);
+
+    const uint8_t * scales = bq2_K->scales + scale_offset;
+
+    const int v = get_int_from_uint8_aligned(bq2_K->qs, iqs);
+    int    u[QR2_K];
+    float d8[QR2_K];
+
+#pragma unroll
+    for (int i = 0; i < QR2_K; ++ i) {
+        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1);
+        d8[i] = bq8_1[bq8_offset + i].ds[0];
+    }
+
+    return vec_dot_q2_K_q8_1_impl_mmvq(v, u, scales, bq2_K->dm, d8);
+}
+
+static __dpct_inline__ float
+vec_dot_q3_K_q8_1(const void *__restrict__ vbq,
+                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+    const block_q3_K * bq3_K = (const block_q3_K *) vbq;
+
+    const int bq8_offset = QR3_K * (iqs / (QI3_K/2));
+    const int scale_offset = iqs - iqs % QI8_1 + (iqs % QI8_1) / (QI8_1/2);
+
+    const float d = bq3_K->d;
+
+    const int vl = get_int_from_uint8(bq3_K->qs, iqs);
+
+    // invert the mask with ~ so that a 0/1 results in 4/0 being subtracted
+    const int vh = ~get_int_from_uint8(bq3_K->hmask, iqs % (QI3_K/2)) >> bq8_offset;
+
+    int    u[QR3_K];
+    float d8[QR3_K];
+
+#pragma unroll
+    for (int i = 0; i < QR3_K; ++i) {
+        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + i].qs, iqs % QI8_1);
+        d8[i] = bq8_1[bq8_offset + i].ds[0];
+    }
+
+    return vec_dot_q3_K_q8_1_impl_mmvq(vl, vh, u, bq3_K->scales, scale_offset, d, d8);
+}
+
+static __dpct_inline__ float
+vec_dot_q4_K_q8_1(const void *__restrict__ vbq,
+                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+#ifndef GGML_QKK_64
+    const block_q4_K * bq4_K = (const block_q4_K *) vbq;
+
+    int    v[2];
+    int    u[2*QR4_K];
+    float d8[QR4_K];
+
+    // iqs is in 0,2..30. bq8_offset = iqs/4 -> bq8_offset = 0, 2, 4, 6
+    const int bq8_offset = QR4_K * ((iqs/2) / (QI8_1/2));
+
+    // iqs = 0....3 -> bq8_offset = 0, want q4_offset = 0, 4, 8, 12
+    // iqs = 4....7 -> bq8_offset = 2, want q4_offset = 32, 36, 40, 44
+    // iqs = 8...11 -> bq8_offset = 4, want q4_offset = 64, 68, 72, 76
+    // iqs = 12..15 -> bq8_offset = 6, want q4_offset = 96, 100, 104, 108
+
+    const int * q4 = (const int *)(bq4_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4));
+    v[0] = q4[0];
+    v[1] = q4[4];
+
+    const uint16_t * scales = (const uint16_t *)bq4_K->scales;
+    uint16_t aux[2];
+    const int j = bq8_offset/2;
+    if (j < 2) {
+        aux[0] = scales[j+0] & 0x3f3f;
+        aux[1] = scales[j+2] & 0x3f3f;
+    } else {
+        aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2);
+        aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2);
+    }
+    const uint8_t * sc = (const uint8_t *)aux;
+    const uint8_t * m  = sc + 2;
+
+    for (int i = 0; i < QR4_K; ++i) {
+        const block_q8_1 * bq8i = bq8_1 + bq8_offset + i;
+        d8[i] = bq8i->ds[0];
+
+        const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4);
+        u[2*i+0] = q8[0];
+        u[2*i+1] = q8[4];
+    }
+
+    return vec_dot_q4_K_q8_1_impl_vmmq(v, u, sc, m, bq4_K->dm, d8);
+
+#else
+
+#if __SYCL_ARCH__ >= VER_4VEC // lowest compute capability for integer intrinsics
+    const block_q4_K * bq4_K = (const block_q4_K *) vbq;
+
+    float sumf_d = 0.0f;
+    float sumf_m = 0.0f;
+
+    uint16_t aux16[2];
+    const uint8_t * s = (const uint8_t *)aux16;
+
+    const uint16_t * a = (const uint16_t *)bq4_K->scales;
+    aux16[0] = a[0] & 0x0f0f;
+    aux16[1] = (a[0] >> 4) & 0x0f0f;
+
+    const float dall = bq4_K->dm[0];
+    const float dmin = bq4_K->dm[1];
+
+    const float d8_1 = bq8_1[0].ds[0];
+    const float d8_2 = bq8_1[1].ds[1];
+
+    const int ui1 = *((const int *)bq8_1[0].qs + (iqs/2));
+    const int ui2 = *((const int *)bq8_1[0].qs + (iqs/2) + 4);
+    const int ui3 = *((const int *)bq8_1[1].qs + (iqs/2));
+    const int ui4 = *((const int *)bq8_1[1].qs + (iqs/2) + 4);
+
+    const int * q4 = (const int *)bq4_K->qs + (iqs/2);
+    const int v1 = q4[0];
+    const int v2 = q4[4];
+
+    const int dot1 = dpct::dp4a(ui2, v2 & 0x0f0f0f0f, dpct::dp4a(ui1, v1 & 0x0f0f0f0f, 0));
+    const int dot2 = dpct::dp4a(ui4, (v2 >> 4) & 0x0f0f0f0f, dpct::dp4a(ui3, (v1 >> 4) & 0x0f0f0f0f, 0));
+    const int dot3 = dpct::dp4a(0x01010101, ui2, dpct::dp4a(0x01010101, ui1, 0));
+    const int dot4 = dpct::dp4a(0x01010101, ui4, dpct::dp4a(0x01010101, ui3, 0));
+
+    sumf_d += d8_1 * (dot1 * s[0]) + d8_2 * (dot2 * s[1]);
+    sumf_m += d8_1 * (dot3 * s[2]) + d8_2 * (dot4 * s[3]);
+
+    return dall * sumf_d - dmin * sumf_m;
+
+#else
+    bad_arch();
+#endif // __SYCL_ARCH__ >= VER_4VEC
+
+#endif
+}
+
+static __dpct_inline__ float
+vec_dot_q5_K_q8_1(const void *__restrict__ vbq,
+                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+#ifndef GGML_QKK_64
+    const block_q5_K * bq5_K = (const block_q5_K *) vbq;
+
+    int   vl[2];
+    int   vh[2];
+    int    u[2*QR5_K];
+    float d8[QR5_K];
+
+    const int bq8_offset = QR5_K * ((iqs/2) / (QI8_1/2));
+    const int * ql = (const int *)(bq5_K->qs + 16 * bq8_offset + 4 * ((iqs/2)%4));
+    const int * qh = (const int *)(bq5_K->qh + 4 * ((iqs/2)%4));
+
+    vl[0] = ql[0];
+    vl[1] = ql[4];
+
+    vh[0] = qh[0] >> bq8_offset;
+    vh[1] = qh[4] >> bq8_offset;
+
+    const uint16_t * scales = (const uint16_t *)bq5_K->scales;
+    uint16_t aux[2];
+    const int j = bq8_offset/2;
+    if (j < 2) {
+        aux[0] = scales[j+0] & 0x3f3f;
+        aux[1] = scales[j+2] & 0x3f3f;
+    } else {
+        aux[0] = ((scales[j+2] >> 0) & 0x0f0f) | ((scales[j-2] & 0xc0c0) >> 2);
+        aux[1] = ((scales[j+2] >> 4) & 0x0f0f) | ((scales[j-0] & 0xc0c0) >> 2);
+    }
+    const uint8_t * sc = (const uint8_t *)aux;
+    const uint8_t * m  = sc + 2;
+
+#pragma unroll
+    for (int i = 0; i < QR5_K; ++i) {
+        const block_q8_1 * bq8i = bq8_1 + bq8_offset + i;
+        d8[i] = bq8i->ds[0];
+
+        const int * q8 = (const int *)bq8i->qs + ((iqs/2)%4);
+        u[2*i+0] = q8[0];
+        u[2*i+1] = q8[4];
+    }
+
+    return vec_dot_q5_K_q8_1_impl_vmmq(vl, vh, u, sc, m, bq5_K->dm, d8);
+
+#else
+
+#if __SYCL_ARCH__ >= VER_4VEC // lowest compute capability for integer intrinsics
+    const block_q5_K * bq5_K = (const block_q5_K *) vbq;
+
+    const int8_t * s = bq5_K->scales;
+
+    const float d = bq5_K->d;
+
+    const float d8_1 = bq8_1[0].ds[0];
+    const float d8_2 = bq8_1[1].ds[1];
+
+    const int ui1 = *((const int *)bq8_1[0].qs + (iqs/2));
+    const int ui2 = *((const int *)bq8_1[0].qs + (iqs/2) + 4);
+    const int ui3 = *((const int *)bq8_1[1].qs + (iqs/2));
+    const int ui4 = *((const int *)bq8_1[1].qs + (iqs/2) + 4);
+
+    const int * ql = (const int *)bq5_K->qs + (iqs/2);
+    const int vl1 = ql[0];
+    const int vl2 = ql[4];
+
+    const int step = 4 * (iqs/2); // 0, 4, 8, 12
+    const int im = step/8; // = 0 for iqs = 0, 2, = 1 for iqs = 4, 6
+    const int in = step%8; // 0, 4, 0, 4
+    const int vh = (*((const int *)(bq5_K->qh + in))) >> im;
+
+    const int v1 = (((vh << 4) & 0x10101010) ^ 0x10101010) | ((vl1 >> 0) & 0x0f0f0f0f);
+    const int v2 = (((vh << 2) & 0x10101010) ^ 0x10101010) | ((vl2 >> 0) & 0x0f0f0f0f);
+    const int v3 = (((vh >> 0) & 0x10101010) ^ 0x10101010) | ((vl1 >> 4) & 0x0f0f0f0f);
+    const int v4 = (((vh >> 2) & 0x10101010) ^ 0x10101010) | ((vl2 >> 4) & 0x0f0f0f0f);
+
+    const float sumf_d = d8_1 * (dpct::dp4a(ui1, v1, 0) * s[0] + dpct::dp4a(ui2, v2, 0) * s[1])
+                       + d8_2 * (dpct::dp4a(ui3, v3, 0) * s[2] + dpct::dp4a(ui4, v4, 0) * s[3]);
+
+    return d * sumf_d;
+
+#else
+    bad_arch();
+#endif // __SYCL_ARCH__ >= VER_4VEC
+
+#endif
+}
+
+static __dpct_inline__ float
+vec_dot_q6_K_q8_1(const void *__restrict__ vbq,
+                  const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+    const block_q6_K * bq6_K = (const block_q6_K *) vbq;
+
+    const int bq8_offset = 2 * QR6_K * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/4);
+    const int scale_offset = (QI6_K/4) * (iqs / (QI6_K/2)) + (iqs % (QI6_K/2)) / (QI6_K/8);
+    const int vh_shift = 2 * ((iqs % (QI6_K/2)) / (QI6_K/4));
+
+    const int vl = get_int_from_uint8(bq6_K->ql, iqs);
+    const int vh = get_int_from_uint8(bq6_K->qh, (QI6_K/4) * (iqs / (QI6_K/2)) + iqs % (QI6_K/4)) >> vh_shift;
+
+    const int8_t * scales = bq6_K->scales + scale_offset;
+
+    int    u[QR6_K];
+    float d8[QR6_K];
+
+#pragma unroll
+    for (int i = 0; i < QR6_K; ++i) {
+        u[i]  = get_int_from_int8_aligned(bq8_1[bq8_offset + 2*i].qs, iqs % QI8_1);
+        d8[i] = bq8_1[bq8_offset + 2 * i].ds[0];
+    }
+
+    return vec_dot_q6_K_q8_1_impl_mmvq(vl, vh, u, scales, bq6_K->d, d8);
+}
+
+
+static __dpct_inline__ float
+vec_dot_iq2_xxs_q8_1(const void *__restrict__ vbq,
+                     const block_q8_1 *__restrict__ bq8_1, const int &iqs,
+                     const uint64_t *iq2xxs_grid, const uint8_t *ksigns_iq2xs,
+                     const uint8_t *kmask_iq2xs) {
+#if QK_K == 256
+    const block_iq2_xxs * bq2 = (const block_iq2_xxs *) vbq;
+
+#if QR2_XXS == 8
+    const int ib32 = iqs;
+    const uint16_t * q2 = bq2->qs + 4*ib32;
+    const uint8_t  * aux8 = (const uint8_t *)q2;
+    const int8_t   * q8 = bq8_1[ib32].qs;
+    uint32_t aux32 = q2[2] | (q2[3] << 16);
+    int sumi = 0;
+    for (int l = 0; l < 4; ++l) {
+        const uint8_t * grid = (const uint8_t *)(iq2xxs_grid + aux8[l]);
+        const uint8_t  signs = ksigns_iq2xs[aux32 & 127];
+        for (int j = 0; j < 8; ++j) {
+            sumi += q8[j] * grid[j] * (signs & kmask_iq2xs[j] ? -1 : 1);
+        }
+        q8 += 8;
+        aux32 >>= 7;
+    }
+    const float d = (float)bq2->d * (0.5f + aux32) * bq8_1[ib32].ds[0] * 0.25f;
+    return d * sumi;
+#else
+    // iqs is 0...15
+    const int ib32 = iqs/2;
+    const int il = iqs%2;
+    const uint16_t * q2 = bq2->qs + 4*ib32;
+    const uint8_t  * aux8 = (const uint8_t *)q2;
+    const uint8_t  * grid1 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+0]);
+    const uint8_t  * grid2 = (const uint8_t *)(iq2xxs_grid + aux8[2*il+1]);
+    const uint32_t aux32 = q2[2] | (q2[3] << 16);
+    const float d = (float)bq2->d * (0.5f + (aux32 >> 28)) * bq8_1[ib32].ds[0] * 0.25f;
+    const uint8_t signs1 = ksigns_iq2xs[(aux32 >> 14*il) & 127];
+    const uint8_t signs2 = ksigns_iq2xs[(aux32 >> (14*il + 7)) & 127];
+    const int8_t * q8 = bq8_1[ib32].qs + 16*il;
+    int sumi1 = 0, sumi2 = 0;
+    for (int j = 0; j < 8; ++j) {
+        sumi1 += q8[j+0] * grid1[j] * (signs1 & kmask_iq2xs[j] ? -1 : 1);
+        sumi2 += q8[j+8] * grid2[j] * (signs2 & kmask_iq2xs[j] ? -1 : 1);
+    }
+    return d * (sumi1 + sumi2);
+#endif
+#else
+    assert(false);
+    return 0.f;
+#endif
+}
+
+static __dpct_inline__ float
+vec_dot_iq2_xs_q8_1(const void *__restrict__ vbq,
+                    const block_q8_1 *__restrict__ bq8_1, const int &iqs,
+                    const uint64_t *iq2xs_grid, const uint64_t *ksigns64) {
+#if DPCT_COMPATIBILITY_TEMP >=                                                 \
+    MIN_CC_DP4A // lowest compute capability for integer intrinsics
+#if QK_K == 256
+    const block_iq2_xs * bq2 = (const block_iq2_xs *) vbq;
+
+    const int ib32 = iqs;
+    const uint16_t * q2 = bq2->qs + 4*ib32;
+    const int8_t   * q8 = bq8_1[ib32].qs;
+    const uint8_t ls1 = bq2->scales[ib32] & 0xf;
+    const uint8_t ls2 = bq2->scales[ib32] >>  4;
+    int sumi1 = 0;
+    for (int l = 0; l < 2; ++l) {
+        const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511));
+        const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9));
+        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
+            grid[0] ^ signs[0], signs[0], std::minus<>());
+        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
+            grid[1] ^ signs[1], signs[1], std::minus<>());
+        sumi1 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi1);
+        sumi1 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi1);
+        q8 += 8;
+    }
+    int sumi2 = 0;
+    for (int l = 2; l < 4; ++l) {
+        const uint32_t * grid = (const uint32_t *)(iq2xs_grid + (q2[l] & 511));
+        const uint32_t * signs = (const uint32_t *)(ksigns64 + (q2[l] >> 9));
+        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
+            grid[0] ^ signs[0], signs[0], std::minus<>());
+        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
+            grid[1] ^ signs[1], signs[1], std::minus<>());
+        sumi2 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi2);
+        sumi2 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi2);
+        q8 += 8;
+    }
+    const float d = (float)bq2->d * bq8_1[ib32].ds[0] * 0.25f;
+    return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2);
+#else
+    assert(false);
+    return 0.f;
+#endif
+#else
+    assert(false);
+    return 0.f;
+#endif
+}
+
+static __dpct_inline__ float
+vec_dot_iq2_s_q8_1(const void *__restrict__ vbq,
+                   const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+#if QK_K == 256
+    const block_iq2_s * bq2 = (const block_iq2_s *) vbq;
+
+    const int ib32 = iqs;
+    const int8_t  * q8 = bq8_1[ib32].qs;
+    const uint8_t * signs = bq2->qs + QK_K/8 + 4*ib32;
+    const uint8_t ls1 = bq2->scales[ib32] & 0xf;
+    const uint8_t ls2 = bq2->scales[ib32] >>  4;
+    int sumi1 = 0;
+    for (int l = 0; l < 2; ++l) {
+        const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300)));
+        const uint32_t signs0 = dpct::vectorized_binary<sycl::uchar4>(
+            ((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201,
+            std::equal_to<>());
+        const uint32_t signs1 = dpct::vectorized_binary<sycl::uchar4>(
+            ((signs[l] >> 4) * 0x01010101) & 0x08040201, 0x08040201,
+            std::equal_to<>());
+        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
+            grid[0] ^ signs0, signs0, std::minus<>());
+        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
+            grid[1] ^ signs1, signs1, std::minus<>());
+        sumi1 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi1);
+        sumi1 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi1);
+        q8 += 8;
+    }
+    int sumi2 = 0;
+    for (int l = 2; l < 4; ++l) {
+        const uint32_t * grid = (const uint32_t *)(iq2s_grid + (bq2->qs[4*ib32+l] | ((bq2->qh[ib32] << (8-2*l)) & 0x300)));
+        const uint32_t signs0 = dpct::vectorized_binary<sycl::uchar4>(
+            ((signs[l] & 0xf) * 0x01010101) & 0x08040201, 0x08040201,
+            std::equal_to<>());
+        const uint32_t signs1 = dpct::vectorized_binary<sycl::uchar4>(
+            ((signs[l] >> 4) * 0x01010101) & 0x08040201, 0x08040201,
+            std::equal_to<>());
+        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
+            grid[0] ^ signs0, signs0, std::minus<>());
+        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
+            grid[1] ^ signs1, signs1, std::minus<>());
+        sumi2 = dpct::dp4a(grid_l, *((const int *)q8 + 0), sumi2);
+        sumi2 = dpct::dp4a(grid_h, *((const int *)q8 + 1), sumi2);
+        q8 += 8;
+    }
+    const float d = (float)bq2->d * bq8_1[ib32].ds[0] * 0.25f;
+    return d * ((0.5f + ls1) * sumi1 + (0.5f + ls2) * sumi2);
+#else
+    assert(false);
+#endif
+}
+
+static __dpct_inline__ float
+vec_dot_iq3_xxs_q8_1(const void *__restrict__ vbq,
+                     const block_q8_1 *__restrict__ bq8_1, const int &iqs,
+                     const uint32_t *iq3xxs_grid, const uint64_t *ksigns64) {
+#if DPCT_COMPATIBILITY_TEMP >=                                                 \
+    MIN_CC_DP4A // lowest compute capability for integer intrinsics
+#if QK_K == 256
+    const block_iq3_xxs * bq2 = (const block_iq3_xxs *) vbq;
+
+    const int ib32 = iqs;
+    const uint8_t  * q3 = bq2->qs + 8*ib32;
+    const uint16_t * gas = (const uint16_t *)(bq2->qs + QK_K/4) + 2*ib32;
+    const int8_t   * q8 = bq8_1[ib32].qs;
+    uint32_t aux32 = gas[0] | (gas[1] << 16);
+    int sumi = 0;
+    for (int l = 0; l < 4; ++l) {
+        const uint32_t * grid1 = iq3xxs_grid + q3[2*l+0];
+        const uint32_t * grid2 = iq3xxs_grid + q3[2*l+1];
+        const uint32_t * signs = (const uint32_t *)(ksigns64 + (aux32 & 127));
+        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
+            grid1[0] ^ signs[0], signs[0], std::minus<>());
+        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
+            grid2[0] ^ signs[1], signs[1], std::minus<>());
+        sumi = dpct::dp4a(grid_l, *((int *)q8 + 0), sumi);
+        sumi = dpct::dp4a(grid_h, *((int *)q8 + 1), sumi);
+        q8 += 8;
+        aux32 >>= 7;
+    }
+    const float d = (float)bq2->d * (0.5f + aux32) * bq8_1[ib32].ds[0] * 0.5f;
+    return d * sumi;
+#else
+    assert(false);
+    return 0.f;
+#endif
+#else
+    assert(false);
+    return 0.f;
+#endif
+}
+
+static __dpct_inline__ float
+vec_dot_iq3_s_q8_1(const void *__restrict__ vbq,
+                   const block_q8_1 *__restrict__ bq8_1, const int &iqs,
+                   const uint32_t *iq3s_grid) {
+#if QK_K == 256
+    const block_iq3_s * bq2 = (const block_iq3_s *) vbq;
+
+    const int ib32 = iqs;
+    const uint8_t  * qs = bq2->qs + 8*ib32;
+    const int8_t   * q8 = bq8_1[ib32].qs;
+    int sumi = 0;
+    for (int l = 0; l < 4; ++l) {
+        const uint32_t * grid1 = iq3s_grid + (qs[2*l+0] | ((bq2->qh[ib32] << (8 - 2*l)) & 256));
+        const uint32_t * grid2 = iq3s_grid + (qs[2*l+1] | ((bq2->qh[ib32] << (7 - 2*l)) & 256));
+        uint32_t signs0 = dpct::vectorized_binary<sycl::uchar4>(
+            ((bq2->signs[4 * ib32 + l] & 0xf) * 0x01010101) & 0x08040201,
+            0x08040201, std::equal_to<>());
+        uint32_t signs1 = dpct::vectorized_binary<sycl::uchar4>(
+            ((bq2->signs[4 * ib32 + l] >> 4) * 0x01010101) & 0x08040201,
+            0x08040201, std::equal_to<>());
+        const int grid_l = dpct::vectorized_binary<sycl::uchar4>(
+            grid1[0] ^ signs0, signs0, std::minus<>());
+        const int grid_h = dpct::vectorized_binary<sycl::uchar4>(
+            grid2[0] ^ signs1, signs1, std::minus<>());
+        sumi = dpct::dp4a(grid_l, *((int *)q8 + 0), sumi);
+        sumi = dpct::dp4a(grid_h, *((int *)q8 + 1), sumi);
+        q8 += 8;
+    }
+    const float d =
+        (float)bq2->d *
+        (1 + 2 * ((bq2->scales[ib32 / 2] >> 4 * (ib32 % 2)) & 0xf)) *
+        bq8_1[ib32].ds[0];
+    return d * sumi;
+#else
+    assert(false);
+#endif
+}
+
+static __dpct_inline__ float
+vec_dot_iq1_s_q8_1(const void *__restrict__ vbq,
+                   const block_q8_1 *__restrict__ bq8_1, const int &iqs,
+                   const uint32_t *iq1s_grid_gpu) {
+#if QK_K == 256
+    const block_iq1_s * bq1 = (const block_iq1_s *) vbq;
+
+    const int ib32 = iqs;
+    int sumi = 0;
+    const int * q8 = (const int *)bq8_1[ib32].qs;
+    for (int l = 0; l < 4; ++l) {
+        const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[ib32] >> 3*l) & 7) << 8)));
+        int grid0 = grid[0] & 0x0f0f0f0f;
+        int grid1 = (grid[0] >> 4) & 0x0f0f0f0f;
+        sumi = dpct::dp4a(q8[2 * l + 1], grid1,
+                          dpct::dp4a(q8[2 * l + 0], grid0, sumi));
+    }
+
+    const float delta = bq1->qh[ib32] & 0x8000 ? -1-IQ1S_DELTA : -1+IQ1S_DELTA;
+    const float d1q = (float)bq1->d * (2*((bq1->qh[ib32] >> 12) & 7) + 1);
+    const float d = d1q * bq8_1[ib32].ds[0];
+    const float m = d1q * bq8_1[ib32].ds[1];
+    return d * sumi + m * delta;
+#else
+    assert(false);
+#endif
+}
+
+static __dpct_inline__ float
+vec_dot_iq1_m_q8_1(const void *__restrict__ vbq,
+                   const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+#if QK_K == 256
+    const block_iq1_m * bq1 = (const block_iq1_m *) vbq;
+
+    const int ib32 = iqs;
+    int   sumi[2] = {0, 0};
+    float sumf[2] = {0.f, 0.f};
+
+    const int * q8 = (const int *)bq8_1[ib32].qs;
+    for (int l = 0; l < 4; ++l) {
+        const int * grid = (const int *)(iq1s_grid_gpu + (bq1->qs[4*ib32+l] | (((bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 7) << 8)));
+        int grid0 = grid[0] & 0x0f0f0f0f;
+        int grid1 = (grid[0] >> 4) & 0x0f0f0f0f;
+        sumi[l / 2] = dpct::dp4a(q8[2 * l + 1], grid1,
+                                 dpct::dp4a(q8[2 * l + 0], grid0, sumi[l / 2]));
+        const float delta = (bq1->qh[2*ib32+l/2] >> 4*(l%2)) & 0x08 ? -1-IQ1M_DELTA : -1+IQ1M_DELTA;
+        const int sumy = dpct::dp4a(q8[2 * l + 1], 0x01010101,
+                                    dpct::dp4a(q8[2 * l + 0], 0x01010101, 0));
+        sumf[l/2] += delta*sumy;
+    }
+
+    iq1m_scale_t scale;
+    const uint16_t * sc = (const uint16_t *)bq1->scales;
+    scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000);
+    const float d = (float)scale.f16 * bq8_1[ib32].ds[0];
+    return d * ((sumi[0] + sumf[0]) * (2*((sc[ib32/2] >> 6*(ib32%2)) & 0x7) + 1) + (sumi[1] + sumf[1]) * (2*((sc[ib32/2] >> (6*(ib32%2)+3)) & 0x7) + 1));
+#else
+    assert(false);
+#endif
+}
+
+
+static __dpct_inline__ float
+vec_dot_iq4_nl_q8_1(const void *__restrict__ vbq,
+                    const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+    const block_iq4_nl * bq = (const block_iq4_nl *) vbq;
+
+    const uint16_t * q4 = (const uint16_t *)bq->qs + 2*iqs;
+    const int32_t  * q8 = (const int32_t  *)bq8_1->qs + iqs;
+
+    const uint8_t * values = (const uint8_t *)kvalues_iq4nl;
+
+    int v1, v2;
+    int sumi1 = 0, sumi2 = 0;
+    for (int l = 0; l < VDR_Q4_0_Q8_1_MMVQ; ++l) {
+        const uint32_t aux = q4[2*l] | (q4[2*l+1] << 16);
+        get_int_from_table_16(aux, values, v1, v2);
+        sumi1 = dpct::dp4a(v1, q8[l + 0], sumi1);
+        sumi2 = dpct::dp4a(v2, q8[l + 4], sumi2);
+    }
+
+    const float d = (float)bq->d * bq8_1->ds[0];
+    return d * (sumi1 + sumi2);
+}
+
+
+static __dpct_inline__ float
+vec_dot_iq4_xs_q8_1(const void *__restrict__ vbq,
+                    const block_q8_1 *__restrict__ bq8_1, const int &iqs) {
+
+#if QK_K == 256
+    const block_iq4_xs * bq4 = (const block_iq4_xs *) vbq;
+    const uint8_t * values = (const uint8_t *)kvalues_iq4nl;
+
+    // iqs is 0...7
+    const int ib32 = iqs;
+    const int32_t  * q8 = (const int *)bq8_1[ib32].qs;
+    const uint32_t * q4 = (const uint32_t *)bq4->qs + 4*ib32;
+    const int8_t ls = ((bq4->scales_l[ib32/2] >> 4*(ib32%2)) & 0xf) | (((bq4->scales_h >> 2*ib32) & 3) << 4);
+    const float d = (float)bq4->d * (ls - 32) * bq8_1[ib32].ds[0];
+    int v1, v2;
+    int sumi1 = 0, sumi2 = 0;
+    for (int j = 0; j < 4; ++j) {
+        get_int_from_table_16(q4[j], values, v1, v2);
+        sumi1 = dpct::dp4a(v1, q8[j + 0], sumi1);
+        sumi2 = dpct::dp4a(v2, q8[j + 4], sumi2);
+    }
+    return d * (sumi1 + sumi2);
+#else
+    assert(false);
+#endif
+}
+
+#endif // GGML_SYCL_VECDOTQ_HPP
diff --git a/ggml/src/ggml-vulkan-shaders.hpp b/ggml/src/ggml-vulkan-shaders.hpp
new file mode 100644 (file)
index 0000000..01ff66f
--- /dev/null
@@ -0,0 +1,144957 @@
+#include <cstdint>
+
+unsigned char add_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x67,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x15,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x48,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x49,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x53,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x54,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x54,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x54,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1e,0x00,0x1e,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x2d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x37,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x19,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x48,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x53,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x55,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x55,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x2d,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xae,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x03,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x07,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xca,0x01,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x17,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,0x51,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x59,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x61,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x66,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t add_f32_len = 4276;
+
+unsigned char argsort_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x30,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x8a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x10,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1c,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x04,0x00,0x00,0x1c,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x22,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x22,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x25,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x22,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x30,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x34,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x37,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x21,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x24,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x25,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x25,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x3a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x34,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x44,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x45,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xb2,0x00,0x05,0x00,0x37,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x36,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x45,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x54,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x54,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x53,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x57,0x00,0x00,0x00,0xac,0x00,0x05,0x00,0x37,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x24,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x56,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x55,0x00,0x00,0x00,0xc6,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xac,0x00,0x05,0x00,0x37,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0xaa,0x00,0x05,0x00,0x37,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6a,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x37,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0xa8,0x00,0x04,0x00,0x37,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x74,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x37,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x34,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x37,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x87,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x93,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xba,0x00,0x05,0x00,
+0x37,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x93,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xb8,0x00,0x05,0x00,0x37,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x87,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x37,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x37,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x87,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x37,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xb5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x25,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x29,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbc,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x37,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0xa8,0x00,0x04,0x00,0x37,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x37,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x34,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x37,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd2,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x93,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xb8,0x00,0x05,0x00,0x37,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xba,0x00,0x05,0x00,0x37,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x37,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xe6,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x37,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x37,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfb,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x32,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbe,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x57,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x45,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x54,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x56,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x45,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x48,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x37,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x2f,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x44,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x3e,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1b,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1d,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t argsort_f32_len = 4096;
+
+unsigned char clamp_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd7,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd6,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd7,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xef,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x11,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xef,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xb8,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf2,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xef,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xba,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x11,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x11,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xf1,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xde,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x07,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x01,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t clamp_f32_len = 3512;
+
+unsigned char cpy_f16_f16_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x98,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xd6,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xd6,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xe2,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xef,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0xc5,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf1,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xd2,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe9,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe9,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t cpy_f16_f16_len = 3252;
+
+unsigned char cpy_f32_f16_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x9a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xd6,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xd6,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xe2,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf1,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf2,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe9,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xed,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf2,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t cpy_f32_f16_len = 3284;
+
+unsigned char cpy_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x97,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd5,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd7,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xe1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xee,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd5,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xe0,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xe2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xef,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xef,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xe8,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t cpy_f32_f32_len = 3232;
+
+unsigned char dequant_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x13,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x2a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x33,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x07,0x00,0x13,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x1b,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x28,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x29,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x32,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x33,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x39,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x0c,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x45,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3d,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x57,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x39,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x64,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x39,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3d,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x39,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3d,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x39,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3d,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x39,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x00,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3d,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x45,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t dequant_f32_len = 3200;
+
+unsigned char dequant_q2_k_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x55,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x57,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x5a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x5c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x5c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x5c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x5e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x5e,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x77,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x14,0x00,0x02,0x00,0x11,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x1e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x52,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x55,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x57,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x58,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x5b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x5d,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x64,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x67,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x76,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x2a,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x29,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x01,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x09,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x09,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x52,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x58,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x6c,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x67,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x64,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x67,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x67,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x7f,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x98,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x67,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6c,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x9b,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x64,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x67,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x67,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x7f,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x67,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6c,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x64,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x67,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x67,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x7f,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x67,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6c,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xdb,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x64,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x67,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x52,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x67,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x7f,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x67,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6c,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x01,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x01,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t dequant_q2_k_len = 4032;
+
+unsigned char dequant_q3_k_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x3f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x73,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x73,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x73,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x75,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x14,0x00,0x02,0x00,0x11,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x1e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x55,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x72,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x73,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xdb,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x03,0x01,0x00,0x00,0x72,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x14,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x29,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x09,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x0d,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x2d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x55,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x6b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x67,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x90,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x95,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x92,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x94,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xae,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xab,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x7c,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x7c,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xae,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x21,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0xc1,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x95,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x21,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0xae,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x21,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x95,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x55,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0xdb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfa,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfa,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x44,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x44,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0xf6,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x5d,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x55,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x7c,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x77,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x57,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x21,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xdb,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0xea,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x72,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xdf,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfa,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfc,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x11,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x0a,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x33,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x33,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2d,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t dequant_q3_k_len = 4804;
+
+unsigned char dequant_q4_0_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x48,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x64,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x66,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x94,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,
+0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x32,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x42,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x45,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x48,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x4a,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xc1,
+0x1d,0x00,0x03,0x00,0x63,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x64,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x0c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x32,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x95,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x71,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x76,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x95,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x95,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t dequant_q4_0_len = 5184;
+
+unsigned char dequant_q4_1_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x85,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x48,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x66,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x68,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x68,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x29,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x32,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x00,0x04,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x42,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x45,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x48,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x49,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x4a,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x65,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x66,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x67,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x97,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x0c,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x98,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x32,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x97,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x50,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x73,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x91,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x73,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x73,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x73,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xee,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xf9,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x73,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x73,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x37,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x73,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x73,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x6a,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x46,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x75,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x97,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t dequant_q4_1_len = 5248;
+
+unsigned char dequant_q4_k_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xae,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x48,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x48,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x14,0x00,0x02,0x00,0x11,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x1e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x3e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x47,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x48,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x49,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4a,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4b,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x14,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x2a,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x29,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x23,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x09,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x09,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x0d,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2d,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x41,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x4e,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x72,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xb9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6b,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0xce,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x43,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x72,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x62,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x98,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x7f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x69,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x72,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x98,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x72,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x78,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x98,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x83,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x69,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x72,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x96,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x98,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4e,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa1,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x11,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x34,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t dequant_q4_k_len = 5916;
+
+unsigned char dequant_q5_0_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x48,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xab,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1e,0x00,0x07,0x00,0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x32,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x42,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x45,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x48,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x49,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x7c,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7e,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x00,0x00,0x80,0x41,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xac,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x32,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x53,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x5a,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x5a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x49,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa6,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x64,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x64,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x64,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x64,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x64,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x64,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x64,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x64,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x78,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x64,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x8f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x53,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t dequant_q5_0_len = 6644;
+
+unsigned char dequant_q5_1_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x48,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x49,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x29,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x32,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x00,0x04,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x42,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x45,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x48,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x49,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x77,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x11,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x12,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x0c,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x32,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x50,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x5d,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8e,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x42,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x42,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x73,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x0a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x42,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x81,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x47,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x42,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x47,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x73,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x81,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x73,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x42,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x73,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x81,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x47,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x47,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x42,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t dequant_q5_1_len = 6412;
+
+unsigned char dequant_q5_k_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x9e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4a,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x14,0x00,0x02,0x00,0x11,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x1e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x3e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x47,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x4a,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4c,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x2a,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x29,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x88,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x09,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x09,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x0d,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x2d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x50,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x50,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x41,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x71,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x7d,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x43,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x3e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x3e,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xbd,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x76,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x76,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x76,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x76,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x43,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0xc7,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x26,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x93,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x62,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x21,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x3e,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x63,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x93,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x62,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x76,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x21,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x63,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x9c,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x21,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x3e,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x50,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x63,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x9c,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x21,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x3e,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x41,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x11,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x0a,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t dequant_q5_k_len = 5980;
+
+unsigned char dequant_q6_k_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x56,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x57,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x59,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x5d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x5d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x5f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x5f,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x72,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x14,0x00,0x02,0x00,0x11,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,0x1e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x53,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x56,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x57,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x58,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x5a,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x5b,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x5c,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x5d,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x5e,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x68,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x73,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x14,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x2a,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x29,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x09,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x04,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x09,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x0d,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2d,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x53,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x68,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x7c,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x65,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x53,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x58,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x68,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x68,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x5a,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x6d,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x7c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x65,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x68,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x68,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6d,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xba,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x7c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x68,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x68,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6d,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xdb,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x7c,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x58,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x53,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x21,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x68,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x68,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x6d,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xfe,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x26,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0c,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x09,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x03,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t dequant_q6_k_len = 4272;
+
+unsigned char dequant_q8_0_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x4c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x47,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x5f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x00,0x07,0x00,
+0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x32,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x42,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x45,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x47,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,
+0x48,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x49,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x5e,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x5f,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x60,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x60,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x6b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x32,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x71,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x6b,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x4f,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa6,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x6b,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x4f,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x6b,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x4f,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xf1,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x6b,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x52,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x4f,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x52,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x19,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x6b,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x52,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x52,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x4f,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6b,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x42,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x52,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x4f,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t dequant_q8_0_len = 4780;
+
+unsigned char diag_mask_inf_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x53,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x37,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x38,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3a,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x43,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x1d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x36,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x38,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x39,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x42,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x43,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x36,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x00,0x00,0x80,0xff,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x4c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x4d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x20,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0xac,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x33,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x3f,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x35,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3e,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x36,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3e,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x49,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x35,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4c,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4c,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t diag_mask_inf_f32_len = 1504;
+
+unsigned char div_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x67,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x15,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x48,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x49,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x53,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x54,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x54,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x54,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1e,0x00,0x1e,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x2d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x37,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x19,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x48,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x53,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x55,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x55,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x2d,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xae,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x03,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x07,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xca,0x01,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x17,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,0x51,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x59,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x61,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x66,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x88,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t div_f32_len = 4276;
+
+unsigned char gelu_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x22,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x36,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x48,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x1a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x21,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x26,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x11,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x2a,0x42,0x4c,0x3f,
+0x2b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x13,0x27,0x37,0x3d,0x1d,0x00,0x03,0x00,
+0x35,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x36,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x37,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x2b,0x00,0x04,0x00,
+0x11,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x26,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x11,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x11,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x0c,0x00,0x06,0x00,0x11,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x88,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x83,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x26,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x49,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t gelu_f32_len = 1484;
+
+unsigned char get_rows_f16_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x32,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x72,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1e,0x00,0x1e,0x00,0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x32,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x33,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x48,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x70,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x73,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x85,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x2f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x85,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7f,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7f,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x85,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_f16_len = 2996;
+
+unsigned char get_rows_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x32,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x71,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x73,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1e,0x00,0x1e,0x00,0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x32,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x33,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x48,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x70,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x77,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x0c,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x84,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x87,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_f16_f32_len = 3028;
+
+unsigned char get_rows_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x32,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x72,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x74,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1e,0x00,0x1e,0x00,0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x32,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x33,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x48,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x70,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x73,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x0c,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x84,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x87,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_f32_len = 3028;
+
+unsigned char get_rows_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x33,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x71,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x78,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x19,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2c,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x32,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x48,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x70,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x71,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x72,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x77,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x0c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x85,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x7e,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x84,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x84,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t get_rows_f32_f32_len = 2976;
+
+unsigned char get_rows_q4_0_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x66,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x67,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x67,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x69,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x69,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xba,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd2,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
+0x17,0x00,0x04,0x00,0x3f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x40,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x4f,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x53,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x60,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x66,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x67,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x68,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x68,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xba,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xbb,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x3f,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x42,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x43,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x60,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x2a,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x83,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x20,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x20,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_q4_0_len = 3704;
+
+unsigned char get_rows_q4_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x66,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x67,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x67,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x69,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x69,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xba,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd1,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x41,
+0x17,0x00,0x04,0x00,0x3f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x40,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x43,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x4f,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x53,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x60,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x66,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x67,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x68,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x68,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xba,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xbb,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x3f,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x42,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x43,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x60,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x63,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x53,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x53,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2a,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x83,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc6,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_q4_0_f32_len = 3688;
+
+unsigned char get_rows_q4_1_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x57,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x6f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x6f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x6f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x48,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x57,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x58,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x58,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5b,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x68,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x6e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x6f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc2,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x47,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xdb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x4a,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x4b,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x4b,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x4b,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x68,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x6b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x69,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x20,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x32,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0xf1,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x20,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x20,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_q4_1_len = 3788;
+
+unsigned char get_rows_q4_1_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x57,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x6f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x6f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x6f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x48,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x57,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x58,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x58,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5b,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x68,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x6e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x6f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc2,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x47,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x4a,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x4b,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x4b,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x4b,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x68,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x6b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x69,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xda,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x20,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x32,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xcd,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xd7,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_q4_1_f32_len = 3772;
+
+unsigned char get_rows_q5_0_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x4d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x1b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x94,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x95,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x95,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xe9,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xe9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x1b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x51,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x00,0x00,0x80,0x41,0x17,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,
+0x7d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x8e,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x94,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x96,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xe8,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xea,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x70,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x68,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x58,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x02,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x73,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x73,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x73,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x91,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x90,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x01,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x91,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xa9,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x23,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2c,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x30,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2c,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0xda,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0xda,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x51,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x23,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x23,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x01,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x01,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_q5_0_len = 4232;
+
+unsigned char get_rows_q5_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x4c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x1b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x94,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x95,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x95,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x95,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xe9,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xe9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xff,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x1a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x1b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x51,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x00,0x00,0x80,0x41,0x17,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x73,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,
+0x7d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x8e,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x94,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x96,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xe8,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xea,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,0x70,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x00,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x58,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x73,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x73,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x73,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x90,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xa9,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x81,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x23,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x2c,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x30,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x2c,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x51,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xf3,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf4,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xf3,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x00,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_q5_0_f32_len = 4216;
+
+unsigned char get_rows_q5_1_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x43,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x18,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x91,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xe5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe5,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe7,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe7,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x6b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x90,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x91,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x92,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xe4,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe6,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xe6,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x6b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x53,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfe,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x6e,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x20,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x20,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x31,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x4c,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x20,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xf0,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x20,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfd,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t get_rows_q5_1_len = 4128;
+
+unsigned char get_rows_q5_1_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x18,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x91,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xe5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe5,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe7,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe7,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfb,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x16,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x6b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x90,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x91,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x92,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xe4,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe6,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xe6,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xef,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x6b,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xfc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x53,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x6e,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x6e,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x20,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x20,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x31,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x4c,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xef,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xf0,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xef,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_q5_1_f32_len = 4112;
+
+unsigned char get_rows_q8_0_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xf3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x40,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x65,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x65,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x67,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb7,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xb8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xba,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xba,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x29,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x3f,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x4d,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x51,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x5e,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x64,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x65,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x66,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x66,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb7,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,0x3e,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x41,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd1,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x42,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x5e,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5f,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x79,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x20,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x29,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x29,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x20,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x20,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_q8_0_len = 3644;
+
+unsigned char get_rows_q8_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xf2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x40,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4d,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x65,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x65,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x67,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb7,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xb8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xba,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xba,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x29,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x3f,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1e,0x00,0x1e,0x00,0x4d,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x51,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x5e,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x64,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x65,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x66,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x66,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb7,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x3e,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x41,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x42,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x42,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x5e,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x61,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5f,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x61,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x79,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x20,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x29,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x29,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc2,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xcc,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t get_rows_q8_0_f32_len = 3628;
+
+unsigned char matmul_f16_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x38,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x04,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7f,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x81,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x81,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xf6,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x03,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x4e,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xbb,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x7e,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7f,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x9c,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x15,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x74,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x24,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,0x58,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x11,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf6,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x67,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,0x6a,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,0x71,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x75,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x78,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x77,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7b,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x83,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x85,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x85,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xc1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa4,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa5,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x85,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x80,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb1,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xc1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xd3,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x19,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x17,0x02,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xcd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa4,0x01,0x00,0x00,0x07,0x02,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf6,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xa4,0x01,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xbd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc3,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x12,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x96,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x44,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x60,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x64,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x68,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x74,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x72,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x9c,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x9d,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f16_len = 10316;
+
+unsigned char matmul_f16_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x08,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x68,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x03,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x66,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x67,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x67,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x67,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x67,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x67,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x69,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x69,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x68,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xae,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xaf,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xaf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xaf,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb1,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb1,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x61,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x62,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x66,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x68,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x68,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xec,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xae,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xaf,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xb0,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb0,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x3f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x43,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x45,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x49,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0xef,0x02,0x00,0x00,
+0x52,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x79,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x9a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xef,0x02,0x00,0x00,0xa1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa7,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xab,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xaf,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x07,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbb,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x07,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x07,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd4,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd5,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x07,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0xde,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x05,0x02,0x00,0x00,0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x04,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe9,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x04,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x04,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0x63,0x01,0x00,0x00,0x00,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd4,0x01,0x00,0x00,
+0x03,0x02,0x00,0x00,0xed,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x03,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x4d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x11,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x13,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x17,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1f,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0xff,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x27,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0xff,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd4,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd4,0x01,0x00,0x00,0x3e,0x02,0x00,0x00,
+0xed,0x01,0x00,0x00,0x2b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x42,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0xff,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x74,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x78,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7c,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x90,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x94,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x98,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9c,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x97,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xad,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xab,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f16_aligned_len = 11200;
+
+unsigned char matmul_f16_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x38,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x02,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4e,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7f,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x81,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfb,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xfc,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xff,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x48,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x49,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x4d,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x90,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x91,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbe,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x7e,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7f,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x80,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x9c,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x91,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xde,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xff,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x06,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xff,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x26,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xff,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x06,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x6d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x71,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x74,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,0x7b,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7a,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7e,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x80,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x82,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x86,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x83,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x80,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xaf,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x1d,0x02,0x00,0x00,0xde,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdd,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe9,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0xee,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x17,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x92,0x01,0x00,0x00,0x08,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0xbf,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x12,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x44,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x48,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4c,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x64,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x68,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6c,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x74,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x72,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x9c,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9d,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f16_aligned_fp32_len = 10288;
+
+unsigned char matmul_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x04,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x81,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x81,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x81,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x83,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x83,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xf6,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x03,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x4e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x80,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x81,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x82,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x90,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x15,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x74,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x24,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,0x58,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x5c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x69,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x6c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x73,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x21,0x02,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x81,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x85,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x87,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf6,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x82,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xaf,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf6,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xde,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdd,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe9,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,0xee,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xce,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x19,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,
+0x09,0x02,0x00,0x00,0x91,0x01,0x00,0x00,0x08,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa6,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x40,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x42,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x46,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4e,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x66,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6a,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6e,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x76,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x74,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x7f,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x5c,0x01,0x00,0x00,0x9e,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x43,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_f16_f32_len = 10332;
+
+unsigned char matmul_f16_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x12,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x73,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x03,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x68,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x69,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x69,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x69,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x69,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x69,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x73,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xba,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xba,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xba,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x61,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x62,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x66,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x6d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb9,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xba,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x33,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x49,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,0x52,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x6d,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x6d,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x78,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x6d,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6d,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6d,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x6d,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6d,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x45,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,0xac,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xb3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb2,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb6,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xff,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x11,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xff,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xff,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x11,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xff,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x12,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x0e,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x00,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0x63,0x01,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xdf,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x58,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,0x42,0x02,0x00,0x00,
+0xca,0x01,0x00,0x00,0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,
+0x49,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,0x36,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x4d,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x97,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x87,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa3,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa7,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xaf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc2,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb6,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x6d,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd7,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f16_f32_aligned_len = 11360;
+
+unsigned char matmul_f16_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x02,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x51,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7d,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfb,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xfc,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xff,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x48,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x49,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x4d,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x53,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x7c,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7d,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x06,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xff,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x06,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0a,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x21,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0xb4,0x02,0x00,0x00,0x26,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x53,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x53,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x53,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x53,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x6b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x72,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x79,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7c,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x84,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb1,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x1b,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdf,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x19,0x02,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x17,0x02,0x00,0x00,0xec,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xca,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x15,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf7,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x90,0x01,0x00,0x00,0x06,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xbd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x46,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4a,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x62,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x72,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x53,0x01,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f16_f32_aligned_fp32_len = 10240;
+
+unsigned char matmul_f16_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x51,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7d,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf8,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x02,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x4e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xbb,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x7c,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7d,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x16,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x74,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x24,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,0x58,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x5c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x68,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,0x6b,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,0x72,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x79,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x78,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7c,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x80,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x84,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb1,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xd3,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x17,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xca,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x15,0x02,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x90,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3e,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x42,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4a,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x62,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x72,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x70,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x7b,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x79,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x5c,0x01,0x00,0x00,0x9a,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_f16_f32_fp32_len = 10260;
+
+unsigned char matmul_f16_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x51,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x51,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7d,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf8,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x02,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x4e,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x7c,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7d,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x9a,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x16,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x74,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x24,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0xbd,0x02,0x00,0x00,0x58,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x11,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x6b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x72,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x79,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7c,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x84,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb1,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x1b,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdf,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x19,0x02,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x17,0x02,0x00,0x00,0xec,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x15,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf7,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x90,0x01,0x00,0x00,0x06,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xbd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x96,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x46,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4a,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x62,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x72,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9b,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f16_fp32_len = 10276;
+
+unsigned char matmul_f32_f16_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x04,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x50,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x50,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x52,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x52,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x81,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x81,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x81,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x83,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x83,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xf6,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x03,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x15,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x45,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x46,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x46,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x4f,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x51,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x80,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x81,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x82,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x90,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf6,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x17,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x74,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,0x25,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x59,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x5d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x69,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x6c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x73,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x21,0x02,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x81,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x85,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x87,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf6,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x82,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xaf,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf6,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xde,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdd,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe9,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,0xee,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xce,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x19,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,
+0x09,0x02,0x00,0x00,0x91,0x01,0x00,0x00,0x08,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa6,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x40,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x42,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x46,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4e,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x66,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6a,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6e,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x76,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x74,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x7f,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x11,0x01,0x00,0x00,0x9e,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x43,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_f32_f16_len = 10332;
+
+unsigned char matmul_f32_f16_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x12,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x73,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x03,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x70,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x71,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x71,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x71,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x71,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x73,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x73,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x73,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xba,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xba,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xba,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x69,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x6a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x6e,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x72,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x72,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x75,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb9,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xba,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x2a,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0x47,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x51,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x5a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x75,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x75,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x75,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x75,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x75,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x75,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x75,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x75,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,0xac,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xb3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb2,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb6,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xff,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x11,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xff,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xff,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x11,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xff,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x12,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x0e,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x00,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xdf,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x58,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,0x42,0x02,0x00,0x00,
+0xca,0x01,0x00,0x00,0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,
+0x49,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,0x36,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x4d,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x97,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x87,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa3,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa7,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xaf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc2,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb6,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x07,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd7,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f32_f16_aligned_len = 11360;
+
+unsigned char matmul_f32_f16_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x01,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1e,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4b,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7d,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfb,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xfc,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0xff,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x08,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x43,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x44,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x44,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x48,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4c,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x7c,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7d,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x09,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x05,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x05,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x05,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x21,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x25,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x25,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x34,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x4f,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x48,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x4f,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x48,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x4f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x48,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x08,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x4f,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x48,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x6b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x25,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x27,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x72,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x79,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7c,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x84,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb1,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x1b,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdf,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x19,0x02,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x17,0x02,0x00,0x00,0xec,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xca,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x15,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf7,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x90,0x01,0x00,0x00,0x06,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xbd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x46,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4a,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x62,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x72,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x05,0x01,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f32_f16_aligned_fp32_len = 10240;
+
+unsigned char matmul_f32_f16_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x03,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4e,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7d,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf8,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x02,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x4c,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xbb,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x7c,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7d,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x14,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x74,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x22,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x26,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x27,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x37,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x36,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xa4,0x02,0x00,0x00,0x79,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x37,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x3f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x57,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x5b,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x4c,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x68,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,0x6b,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x26,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,0x72,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x79,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x78,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7c,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x80,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x84,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x86,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb1,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xbe,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xd3,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x17,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xca,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x15,0x02,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x90,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3e,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x42,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4a,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x62,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x72,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x70,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x7b,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x79,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x10,0x01,0x00,0x00,0x9a,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_f32_f16_fp32_len = 10260;
+
+unsigned char matmul_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x3a,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x50,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x50,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x52,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x52,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3a,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x81,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x81,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x81,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x83,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xf6,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfa,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x46,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x46,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x51,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x51,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x80,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x81,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x82,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x90,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf6,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x17,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x74,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,0x25,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x59,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x69,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x6c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x29,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,0x70,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x73,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x21,0x02,0x00,0x00,
+0x7a,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x81,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x87,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x87,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x82,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xaf,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbb,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,0xde,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x1d,0x02,0x00,0x00,0xe6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe9,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xce,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa6,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0x91,0x01,0x00,0x00,
+0x08,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa6,0x01,0x00,0x00,0x10,0x02,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf6,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x96,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x42,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x46,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4a,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4e,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x62,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x66,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6e,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x69,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x76,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x74,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x43,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f32_f32_len = 10324;
+
+unsigned char matmul_f32_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x17,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x78,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x03,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x43,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x6f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x6f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x71,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbe,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xbf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xbf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xbf,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc1,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xf9,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xfd,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x69,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x6e,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x70,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfb,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xfc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xbe,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xbf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc0,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xce,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x47,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x51,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7d,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x07,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x07,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa7,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x5f,0x02,0x00,0x00,0xb8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x00,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbb,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x04,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x16,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x04,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x16,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x04,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x16,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe5,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x04,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0x17,0x02,0x00,0x00,
+0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x05,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0x15,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x13,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0x05,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0x05,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x11,0x02,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x10,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xe4,0x01,0x00,0x00,0x13,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x13,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x05,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1f,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x27,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2b,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2f,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x33,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x37,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xe4,0x01,0x00,0x00,0x47,0x02,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x46,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xe4,0x01,0x00,0x00,
+0x4e,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x52,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x97,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x84,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8c,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa4,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa8,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xac,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc2,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xbd,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x07,0x01,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xdc,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f32_f32_aligned_len = 11432;
+
+unsigned char matmul_f32_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xce,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x01,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x48,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x49,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2f,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x75,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x76,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x76,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x76,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xfb,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xff,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x44,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x48,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x88,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xb4,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x75,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x77,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xde,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x05,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x09,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x05,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x05,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x05,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xad,0x02,0x00,0x00,
+0x21,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x25,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0xae,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x26,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,0x34,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x05,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x05,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x05,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x05,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0xae,0x02,0x00,0x00,0x64,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x25,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0xb1,0x02,0x00,0x00,0x68,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x6b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x16,0x02,0x00,0x00,
+0x72,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0xb7,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x81,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x85,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xca,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xae,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb2,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xca,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x14,0x02,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x12,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe0,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x10,0x02,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xc3,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x89,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x09,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x97,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x35,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x36,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x43,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x57,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5b,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x63,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x6b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x69,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc2,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x74,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x72,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x05,0x01,0x00,0x00,
+0x93,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x93,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x58,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x57,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x35,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f32_f32_aligned_fp32_len = 10124;
+
+unsigned char matmul_f32_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x33,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x4d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x79,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7a,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7a,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf8,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x02,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x42,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x43,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x4c,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xb8,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x79,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xed,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x14,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x74,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x22,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x26,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0xb2,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x27,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xb2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x37,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x36,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xa1,0x02,0x00,0x00,0x79,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x37,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x3f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x56,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x10,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5c,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x65,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x29,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x68,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x26,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x6f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x73,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x76,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x79,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x81,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x83,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x83,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x85,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x84,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x83,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xaa,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xae,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb2,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb6,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xce,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xc0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x18,0x02,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x16,0x02,0x00,0x00,0xe1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0x14,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0xef,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x03,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0xba,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc3,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x0d,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x73,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x96,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x43,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x47,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x5b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x63,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x67,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x6f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x78,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x10,0x01,0x00,0x00,
+0x97,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x97,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_f32_f32_fp32_len = 10208;
+
+unsigned char matmul_id_f16_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x30,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x84,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x57,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x57,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x59,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x59,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x82,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x82,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x82,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x84,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x84,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x4c,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x56,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x58,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x58,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x81,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x82,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x83,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xaf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf5,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x50,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x6b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1b,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x20,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x55,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x29,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x32,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xba,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x62,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x1b,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x75,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7d,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0xce,0x02,0x00,0x00,0x80,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x32,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x83,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x86,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x34,0x02,0x00,0x00,0x8d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x90,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x92,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x94,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x98,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x93,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xba,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x92,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xb9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe8,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0xea,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x32,0x02,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x00,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x07,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xb9,0x01,0x00,0x00,0x1c,0x02,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xb9,0x01,0x00,0x00,
+0x23,0x02,0x00,0x00,0xd2,0x01,0x00,0x00,0x10,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x24,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x27,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x01,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x46,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4a,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4e,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x52,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x73,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x90,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x80,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa6,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_f16_len = 10788;
+
+unsigned char matmul_id_f16_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x5e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0xc1,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x45,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x46,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x8a,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8c,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbe,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xbf,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xbf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xbf,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc1,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x84,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x85,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x85,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x89,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xdf,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0d,0x02,0x00,0x00,0x03,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xbe,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xbf,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc0,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe2,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xe0,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xec,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x64,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0x72,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x15,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x21,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x49,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x0b,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x53,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0x68,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9c,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xae,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xbd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x0e,0x03,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x12,0x03,0x00,0x00,0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x71,0x02,0x00,0x00,
+0xca,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x14,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x18,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd5,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdd,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0x18,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x18,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x14,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xf6,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf7,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x18,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x19,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x03,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x27,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x07,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0b,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x19,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x19,0x03,0x00,0x00,
+0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x14,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x23,0x02,0x00,0x00,0x86,0x01,0x00,0x00,0x22,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x24,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xf6,0x01,0x00,0x00,
+0x25,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x27,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x19,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x6f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x1a,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x31,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x33,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x35,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x39,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x3d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x41,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x43,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x22,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x45,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x1a,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x20,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x22,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x22,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xf6,0x01,0x00,0x00,0x59,0x02,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x58,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xf6,0x01,0x00,0x00,0x60,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x61,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x64,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x22,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x43,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x33,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc9,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x87,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8b,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb0,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xae,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb8,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe2,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe3,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x03,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_f16_aligned_len = 11888;
+
+unsigned char matmul_id_f16_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x2e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x91,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x70,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x71,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x71,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x71,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x73,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x73,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x8f,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x91,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x09,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x6b,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x70,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x72,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x72,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xb2,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x8e,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x90,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xbc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xff,0x02,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x70,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x10,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x15,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x10,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x10,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x10,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0xda,0x02,0x00,0x00,0x30,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x34,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0xe2,0x02,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x10,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x10,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x10,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x10,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x90,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0xde,0x02,0x00,0x00,0x93,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x41,0x02,0x00,0x00,0x9d,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa8,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc9,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd5,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdd,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf7,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xff,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x03,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0f,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x13,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x17,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1b,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0xb4,0x01,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0xe1,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x34,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x05,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x53,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x57,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x52,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x5b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x80,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x89,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8d,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb3,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x54,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x51,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_f16_aligned_fp32_len = 10976;
+
+unsigned char matmul_id_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x31,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x86,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x57,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x57,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x59,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x59,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x84,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x84,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x84,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x86,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x4c,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x56,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x58,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x58,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x72,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa4,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd2,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x83,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x84,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x85,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf5,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x50,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x6b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1b,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x20,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x55,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x29,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xce,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x32,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x62,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x72,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7f,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x35,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x82,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x32,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x34,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x92,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x94,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x96,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9a,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbc,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xee,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x97,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc8,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x34,0x02,0x00,0x00,0xf3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf6,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x32,0x02,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xe2,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x06,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,
+0x1e,0x02,0x00,0x00,0xa6,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xbb,0x01,0x00,0x00,0x25,0x02,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x29,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x50,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x54,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x68,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x75,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x72,0x01,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xa7,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_f16_f32_len = 10804;
+
+unsigned char matmul_id_f16_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x68,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x45,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x46,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x8c,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xca,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xca,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xca,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcc,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xcc,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x84,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x85,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x85,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xea,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x01,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x18,0x02,0x00,0x00,0x03,0x01,0x00,0x00,0x17,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x19,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xc9,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xca,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x39,0x03,0x00,0x00,0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x64,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x37,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x39,0x03,0x00,0x00,
+0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x15,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x14,0x03,0x00,0x00,
+0x49,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x15,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x53,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x15,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x68,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x60,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x90,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x90,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x90,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x15,0x03,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x18,0x03,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x1c,0x03,0x00,0x00,0xce,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x7c,0x02,0x00,0x00,0xd5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd4,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd8,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0x06,0x02,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x22,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x04,0x02,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x34,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0x22,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0x34,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x22,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x34,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x1e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xec,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x02,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x34,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x22,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x34,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x23,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x23,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x23,0x03,0x00,0x00,0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,0x86,0x01,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x01,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x30,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x23,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x38,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3c,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x37,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x44,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x48,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4c,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x54,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x01,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0x63,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x65,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x01,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x6f,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x92,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x96,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xae,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xbb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb9,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc8,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x90,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x05,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_f16_f32_aligned_len = 12048;
+
+unsigned char matmul_id_f16_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x2b,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x72,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x72,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x72,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x74,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x74,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8c,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x8d,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8f,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x09,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x6b,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x70,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x73,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x73,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x76,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xb1,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xdd,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xde,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8c,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x8d,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xb1,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xde,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x64,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x15,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x10,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x10,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x10,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x30,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x34,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x76,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x76,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x76,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x76,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x91,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x3f,0x02,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xae,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xce,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x3d,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfd,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x01,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x09,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x13,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x15,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x19,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0xb2,0x01,0x00,0x00,0x28,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0xdf,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x32,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x55,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x75,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x7e,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x87,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8b,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x76,0x01,0x00,0x00,0xb0,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_f16_f32_aligned_fp32_len = 10928;
+
+unsigned char matmul_id_f16_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x2d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x82,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x57,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x59,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x80,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x4c,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x56,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x58,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x58,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x72,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa3,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x7f,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x80,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x81,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xac,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x03,0x00,0x00,0xf5,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xac,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf5,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x50,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x6b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x55,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1b,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x20,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x55,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x29,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xca,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x32,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xb7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x62,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x72,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7e,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,0x81,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x32,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x87,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x32,0x02,0x00,0x00,0x8e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x91,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x95,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x99,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xba,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xea,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x96,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x96,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x93,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe8,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0xe7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x30,0x02,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xda,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xde,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x00,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x07,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x25,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x44,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x48,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x50,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xda,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x68,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x71,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x72,0x01,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xa3,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_f16_f32_fp32_len = 10732;
+
+unsigned char matmul_id_f16_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x2e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x82,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x57,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x59,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x80,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x4c,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x56,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x58,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x58,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x7f,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x80,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x81,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa3,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xad,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0xf6,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xac,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf5,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x50,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x6b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x55,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1b,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x20,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x55,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x29,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x32,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,0x62,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x1b,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7e,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x35,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x32,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x34,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x84,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x87,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x32,0x02,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x91,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x93,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x95,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x99,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x96,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xda,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xda,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xda,0x02,0x00,0x00,0xda,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xda,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x30,0x02,0x00,0x00,0xf1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x00,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x08,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0c,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xa5,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0xd2,0x01,0x00,0x00,0x10,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x25,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x44,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x48,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x43,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4c,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x50,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x68,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x71,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6f,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x90,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_f16_fp32_len = 10748;
+
+unsigned char matmul_id_f32_f16_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x31,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x86,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x58,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x58,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x58,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x5a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x84,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x84,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x84,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x86,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x4d,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x57,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x59,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x73,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa4,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd2,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x83,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x84,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x85,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf5,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x50,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x6b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1b,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x20,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x55,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0xce,0x02,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x33,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x45,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x63,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x73,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x45,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7f,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x45,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x45,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x36,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x82,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x33,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x92,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x94,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x96,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9a,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbc,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xee,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x97,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc8,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x34,0x02,0x00,0x00,0xf3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf6,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x32,0x02,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xe2,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x06,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,
+0x1e,0x02,0x00,0x00,0xa6,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xbb,0x01,0x00,0x00,0x25,0x02,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x29,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x50,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x54,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x68,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x75,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x1b,0x01,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xa7,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_f32_f16_len = 10804;
+
+unsigned char matmul_id_f32_f16_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x68,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x94,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x94,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x94,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x94,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x94,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x96,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x96,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xca,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xca,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xca,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcc,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xcc,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x15,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x91,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x95,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x95,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xea,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x01,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x18,0x02,0x00,0x00,0x03,0x01,0x00,0x00,0x17,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x19,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xc9,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xca,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x39,0x03,0x00,0x00,0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x64,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x37,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x39,0x03,0x00,0x00,
+0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x4c,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x14,0x03,0x00,0x00,0x51,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x15,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x56,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x15,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x70,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x98,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x98,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa1,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x98,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x98,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x98,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x98,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x98,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x98,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x15,0x03,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x57,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x18,0x03,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x1c,0x03,0x00,0x00,0xce,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x7c,0x02,0x00,0x00,0xd5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd4,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd8,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0x06,0x02,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x22,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x04,0x02,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x34,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0x22,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0x34,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x22,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x34,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x1e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xec,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x02,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x34,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x22,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x34,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x23,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x23,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x23,0x03,0x00,0x00,0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x01,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x30,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x23,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x38,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3c,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x37,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x44,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x48,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4c,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x54,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x01,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0x63,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x65,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x01,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x6f,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x92,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x96,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xae,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xbb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb9,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc8,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x05,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_f32_f16_aligned_len = 12048;
+
+unsigned char matmul_id_f32_f16_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x2b,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x6e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x6e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x6e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x70,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x70,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8c,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x8d,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8f,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x66,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x67,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x67,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x6b,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x6f,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x72,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xb1,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xdd,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xde,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8c,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x8d,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xb1,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xde,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x64,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0f,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x13,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0f,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0f,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0f,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x2b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x30,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x72,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x72,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6b,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x72,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x12,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x72,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x31,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x91,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x3f,0x02,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xae,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xce,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x3d,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfd,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x01,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x09,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x13,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x15,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x19,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0xb2,0x01,0x00,0x00,0x28,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0xdf,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x32,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x55,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x75,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x7e,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x87,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8b,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x0f,0x01,0x00,0x00,0xb0,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_f32_f16_aligned_fp32_len = 10928;
+
+unsigned char matmul_id_f32_f16_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x2d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x82,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x55,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x56,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x56,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x56,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x58,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x58,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x80,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x4a,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x54,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x57,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x71,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa3,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x7f,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x80,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x81,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xac,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x03,0x00,0x00,0xf5,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xac,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf5,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x50,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x6b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x55,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0x16,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1e,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x27,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xff,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xca,0x02,0x00,0x00,
+0x2c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x30,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x30,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x31,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x42,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x40,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x61,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x71,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x54,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7e,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x33,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,0x81,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x30,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x87,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x32,0x02,0x00,0x00,0x8e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x91,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x95,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x99,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xba,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xea,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x96,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x96,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x93,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe8,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0xe7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x30,0x02,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xda,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xde,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x00,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x07,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x25,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x44,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x48,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x50,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xda,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x68,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x71,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x1a,0x01,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xa3,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_f32_f16_fp32_len = 10732;
+
+unsigned char matmul_id_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x31,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x86,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x57,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x58,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x58,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x58,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x5a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x83,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x84,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x84,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x84,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x86,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x86,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4e,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x57,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x59,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa4,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd2,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x83,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x84,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x85,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf5,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x50,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x6b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x17,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1b,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x20,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x55,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0xce,0x02,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x33,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x45,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x63,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1b,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x76,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7f,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x36,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x36,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x82,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x33,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0x85,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x36,0x02,0x00,0x00,
+0x8f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x92,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x96,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9a,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xee,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa2,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xee,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xee,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xbc,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xee,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x97,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x97,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x34,0x02,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xde,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x32,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfe,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x30,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x06,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xbb,0x01,0x00,0x00,0x1e,0x02,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,0x25,0x02,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x29,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x02,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8e,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x54,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x68,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x75,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x73,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x90,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x1b,0x01,0x00,0x00,0xa7,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x51,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_f32_f32_len = 10796;
+
+unsigned char matmul_id_f32_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x6d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x91,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x92,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x92,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x92,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x92,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x92,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x94,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x94,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xce,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xcf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xcf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xcf,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd1,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd1,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x03,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x91,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x93,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x06,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,0x03,0x01,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xce,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd0,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd0,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf0,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xfb,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x3e,0x03,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x06,0x03,0x00,0x00,
+0x64,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x72,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x80,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x19,0x03,0x00,0x00,
+0x51,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5b,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x56,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x21,0x03,0x00,0x00,0x70,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x60,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa0,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xae,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb5,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xca,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x57,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x1d,0x03,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x21,0x03,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x23,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x81,0x02,0x00,0x00,0xda,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x23,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdd,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x27,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0x39,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x27,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x39,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x27,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x39,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x23,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x04,0x02,0x00,0x00,0x08,0x01,0x00,0x00,
+0x03,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x07,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x39,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0x39,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x13,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x36,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x36,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x36,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x23,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x33,0x02,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x32,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x06,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x35,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x36,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x17,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x28,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x3d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x41,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x43,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4d,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x51,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x53,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x59,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x54,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x06,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x68,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x6a,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x06,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x71,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x74,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x55,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x43,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x23,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x93,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x97,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb7,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xc0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbe,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcd,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x11,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf2,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x12,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_f32_f32_aligned_len = 12120;
+
+unsigned char matmul_id_f32_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x24,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x88,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x6c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x6c,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6e,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x85,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x86,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x86,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x86,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x88,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x88,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x66,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x67,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x67,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x6b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x6d,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa9,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd6,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x85,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x86,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x87,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x87,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xb2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x23,0x03,0x00,0x00,0xf5,0x02,0x00,0x00,0x70,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x0f,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x13,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0f,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0f,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x0f,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x2b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x30,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x4a,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x60,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0f,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0f,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0f,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0f,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x87,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x38,0x02,0x00,0x00,
+0x94,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0xda,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xde,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9b,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9f,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa7,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xda,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xde,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xce,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd4,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xda,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x34,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x02,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x32,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x12,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0xab,0x01,0x00,0x00,
+0x21,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x16,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x2b,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4a,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4e,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x52,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x56,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x51,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6e,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x69,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x77,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x84,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x0f,0x01,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa9,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_f32_f32_aligned_fp32_len = 10812;
+
+unsigned char matmul_id_f32_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x2a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x55,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x55,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x57,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7d,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7d,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x54,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x56,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa0,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x7c,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7d,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xce,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaa,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0xf2,0x02,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xac,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf5,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x50,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x6b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x55,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x16,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1e,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x27,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xff,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x2c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x30,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x30,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x31,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x42,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x40,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x60,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1a,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x73,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7b,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x33,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x33,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x7e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x30,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,0x81,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x84,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x8b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x90,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x90,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x98,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9a,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9e,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x98,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x93,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcb,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x2d,0x02,0x00,0x00,0xee,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x2b,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x29,0x02,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x01,0x02,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x27,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x09,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x18,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x22,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x41,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x45,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4d,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xd7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x65,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x6e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x90,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x77,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7b,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1a,0x01,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa0,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_f32_f32_fp32_len = 10680;
+
+unsigned char matmul_id_q2_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x75,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x25,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x25,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x25,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x26,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x27,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x27,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x70,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x9d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x9d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x9d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xca,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xca,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xca,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xcc,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xcc,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x1d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x23,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x25,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x62,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x68,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x92,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x93,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x9c,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x9d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x9e,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb7,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xea,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x01,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x18,0x02,0x00,0x00,
+0x23,0x01,0x00,0x00,0x17,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xc9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xca,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x74,0x03,0x00,0x00,0x51,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf6,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x40,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x05,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x76,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x40,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x70,0x03,0x00,0x00,
+0x40,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x20,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2c,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x20,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x20,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x41,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x3d,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x74,0x03,0x00,0x00,0x70,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x3d,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x3d,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x69,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x18,0x03,0x00,0x00,0x74,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x19,0x03,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7a,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7e,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x19,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x05,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x20,0x03,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xb7,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x19,0x03,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x1c,0x03,0x00,0x00,0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x20,0x03,0x00,0x00,
+0xce,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x7c,0x02,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x22,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x26,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x06,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x26,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe0,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x04,0x02,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x38,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x26,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x38,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x26,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x38,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x22,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x38,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x26,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x34,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x35,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x16,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x11,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x35,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x22,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x35,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x22,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x94,0x01,0x00,0x00,0x2d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x01,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x35,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x27,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x36,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x28,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x28,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x38,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3c,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x37,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x44,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x30,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x50,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x54,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x28,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x30,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x30,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x01,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x63,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x65,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x01,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x6f,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x30,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x28,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x22,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x08,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x96,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9a,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0x22,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xae,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb2,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x05,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xbb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc4,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xb7,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xed,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x97,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q2_k_f32_len = 11692;
+
+unsigned char matmul_id_q2_k_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x9e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x25,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x25,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x25,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x26,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x27,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x27,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x70,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb6,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xb6,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf7,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xf8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xf8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xf8,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xfa,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfa,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x1d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x23,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x25,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x62,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x68,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xae,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xaf,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xaf,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb7,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xba,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x18,0x02,0x00,0x00,0x23,0x01,0x00,0x00,
+0x17,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x19,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2f,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x46,0x02,0x00,0x00,0x23,0x01,0x00,0x00,
+0x45,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x47,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xf7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xf8,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf9,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf9,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x9d,0x03,0x00,0x00,
+0x51,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x19,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x24,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x25,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0x6b,0x03,0x00,0x00,0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x03,0x00,0x00,0x33,0x03,0x00,0x00,0x64,0x00,0x00,0x00,
+0x99,0x03,0x00,0x00,0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x69,0x03,0x00,0x00,0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x69,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x69,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x99,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x35,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x46,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x46,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x46,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x2c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x20,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x2c,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x20,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x2c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x20,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x41,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x9d,0x03,0x00,0x00,0x70,0x00,0x04,0x00,
+0x3d,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x3d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x69,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x68,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x46,0x03,0x00,0x00,0x74,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x47,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7e,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x47,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x93,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xba,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x68,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbe,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xba,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xba,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xba,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x68,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xd3,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xba,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xba,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xba,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x68,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xeb,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xba,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x47,0x03,0x00,0x00,0xf6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x78,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x4a,0x03,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x4e,0x03,0x00,0x00,0xfc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x50,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x50,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x06,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x54,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x66,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x66,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x12,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x16,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x54,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x66,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x54,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x66,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x50,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x63,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2f,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x30,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x66,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x54,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x55,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x38,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3c,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x63,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x63,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x40,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x44,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x55,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x63,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x55,0x03,0x00,0x00,
+0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x63,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x50,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xb0,0x01,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2f,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5e,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x63,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x55,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x56,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6e,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x72,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7a,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x56,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x5c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x5e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2f,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x93,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2f,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9d,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x56,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x50,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x02,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x35,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xba,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x36,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x21,0x03,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x37,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc4,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x37,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x36,0x03,0x00,0x00,
+0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x39,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdc,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe0,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x39,0x03,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x33,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xe9,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x1d,0x03,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x3f,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf2,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf6,0x02,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf1,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0xff,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0xfd,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0xee,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x03,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x13,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x06,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x04,0x03,0x00,0x00,0x07,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x01,0x03,0x00,0x00,
+0x08,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x09,0x03,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x36,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0x39,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x11,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x37,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x03,0x00,0x00,0x13,0x03,0x00,0x00,0x15,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0x16,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x19,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xba,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1b,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x39,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xda,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x03,0x00,0x00,0x37,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x36,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xba,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x24,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x03,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q2_k_f32_aligned_len = 12488;
+
+unsigned char matmul_id_q2_k_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x75,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x26,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x26,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x26,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x28,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x28,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x70,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb3,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb4,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xb4,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xce,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xcf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xcf,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xcf,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd1,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd1,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x16,0x00,0x03,0x00,
+0x24,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x26,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x42,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x62,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x63,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x68,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xad,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xae,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xae,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xb2,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1f,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xce,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xcf,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xd0,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd0,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x74,0x03,0x00,0x00,0x52,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x20,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xfb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x42,0x03,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x70,0x03,0x00,0x00,
+0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x40,0x03,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x40,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x42,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x70,0x03,0x00,0x00,0x42,0x03,0x00,0x00,0x70,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x21,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2d,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2d,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x25,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x74,0x03,0x00,0x00,0x70,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x3e,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x3e,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x3e,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x68,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x69,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x68,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x1d,0x03,0x00,0x00,0x73,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x1e,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x25,0x03,0x00,0x00,
+0x92,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x1e,0x03,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x21,0x03,0x00,0x00,0xd3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x25,0x03,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x81,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x27,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xe5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe8,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xea,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x3d,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x2b,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x3d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x2b,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x3d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0x07,0x02,0x00,0x00,
+0x64,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x09,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x11,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x15,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x18,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x29,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x68,0x01,0x00,0x00,0x35,0x02,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x34,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x37,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x43,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x33,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x53,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x55,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x35,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x35,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x57,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x5b,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x33,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x35,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x35,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x74,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x35,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x33,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x29,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x10,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb7,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xc0,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbe,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x16,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcd,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc8,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x16,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x10,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0x16,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xb8,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf2,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x16,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x10,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q2_k_f32_aligned_fp32_len = 11756;
+
+unsigned char matmul_id_q2_k_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x6e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x25,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x25,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x25,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x27,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6f,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9a,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x9b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x9b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x9b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9d,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9d,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc2,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xc3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc3,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xc3,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x20,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x16,0x00,0x03,0x00,0x23,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x25,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x27,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x41,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x61,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x62,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x67,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x90,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x91,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x91,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x9a,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x9c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x13,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x14,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc3,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc4,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x6d,0x03,0x00,0x00,
+0x51,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xef,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x39,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0xfe,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x69,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x37,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x39,0x03,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x2c,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x2c,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x2c,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x41,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x6d,0x03,0x00,0x00,
+0x70,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x67,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x67,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x11,0x03,0x00,0x00,0x72,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x12,0x03,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x78,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7c,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x12,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x86,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x87,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x19,0x03,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x67,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x67,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc1,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x15,0x03,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x19,0x03,0x00,0x00,0xca,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xce,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x75,0x02,0x00,0x00,0xd1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd4,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x1f,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x31,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x67,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xfd,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x31,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x09,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x20,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x20,0x03,0x00,0x00,0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x1b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x67,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0x92,0x01,0x00,0x00,
+0x28,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x2b,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x20,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x21,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x33,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x37,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x43,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x47,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4f,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x21,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x29,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x29,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x5e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x68,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x29,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x27,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x21,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x01,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x87,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8b,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x93,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xab,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xb5,0x01,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xe6,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q2_k_f32_fp32_len = 11572;
+
+unsigned char matmul_id_q3_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x14,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x40,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x40,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x40,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x42,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf1,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1c,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1d,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x49,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x4a,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x4a,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4c,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4c,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x16,0x00,0x03,0x00,
+0x3f,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x40,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x43,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x48,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa7,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x12,0x02,0x00,0x00,0x3f,0x01,0x00,0x00,0x11,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x02,0x00,0x00,0x04,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x1c,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x1d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1e,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x51,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x6a,0x02,0x00,0x00,0x3f,0x01,0x00,0x00,0x69,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6b,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x81,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x98,0x02,0x00,0x00,0x3f,0x01,0x00,0x00,0x97,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x99,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x49,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4a,0x03,0x00,0x00,
+0x49,0x03,0x00,0x00,0x20,0x00,0x04,0x00,0x4b,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4b,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x50,0x03,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x57,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x6b,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x76,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0x77,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x81,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x77,0x03,0x00,0x00,
+0xc2,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x77,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x03,0x00,0x00,0x81,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xfe,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0xc0,0x03,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xc0,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x03,0x00,0x00,0xc2,0x03,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x80,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x81,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x82,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x82,0x03,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x82,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x82,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x98,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x83,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x83,0x03,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x94,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x94,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x94,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x98,0x03,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x39,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x60,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5f,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x74,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x79,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x76,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x14,0x00,0x00,0x00,
+0xba,0x03,0x00,0x00,0x8c,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x60,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x14,0x00,0x00,0x00,0xbb,0x03,0x00,0x00,
+0x73,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0xba,0x03,0x00,0x00,
+0x79,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x14,0x00,0x00,0x00,0xbc,0x03,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0xbb,0x03,0x00,0x00,0x60,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xbc,0x03,0x00,0x00,0x41,0x00,0x07,0x00,0xa7,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x14,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd0,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xd1,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x14,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x94,0x03,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x95,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x95,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x95,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x81,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x0a,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x08,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x5f,0x00,0x00,0x00,0x95,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x9c,0x03,0x00,0x00,0x28,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x37,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x3a,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x95,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,0x45,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x45,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x95,0x03,0x00,0x00,0x48,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfa,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x98,0x03,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x9c,0x03,0x00,0x00,0x4e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x52,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x9e,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x54,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x58,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa2,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0xa2,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x60,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0xb4,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x68,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xa2,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xb4,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0xa2,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0xb4,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x9e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd0,0x01,0x00,0x00,0x7f,0x02,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x80,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x82,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0xb4,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0xa2,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x88,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa3,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0xa3,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8a,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0xb1,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x92,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x96,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xa3,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xb1,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xa3,0x03,0x00,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xb1,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0x9e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd0,0x01,0x00,0x00,0xae,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x81,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xb0,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb1,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xa3,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa4,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xa4,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb8,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xa8,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc0,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0xaa,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcc,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xce,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xac,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xac,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd4,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xa4,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xaa,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xa8,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xac,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0xac,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x81,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x81,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0xec,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xef,0x02,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xac,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xce,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xaa,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xa8,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0xa4,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x9e,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x83,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0c,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x84,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x75,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x84,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0e,0x03,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x12,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0d,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x14,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x85,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x73,0x03,0x00,0x00,
+0x17,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x85,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x16,0x03,0x00,0x00,0x17,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x03,0x00,0x00,
+0x15,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x85,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x04,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x03,0x00,0x00,0x1f,0x03,0x00,0x00,0x21,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,
+0x84,0x03,0x00,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x26,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x27,0x03,0x00,0x00,0x29,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x87,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x71,0x03,0x00,0x00,
+0x2f,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x87,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2e,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x03,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,0x87,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x36,0x03,0x00,0x00,0x81,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x3b,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x39,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x90,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x6f,0x03,0x00,0x00,0x43,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x8d,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x44,0x03,0x00,0x00,
+0x43,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x48,0x03,0x00,0x00,0x43,0x03,0x00,0x00,0x44,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x03,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x40,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x51,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x50,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x52,0x03,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x55,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,
+0x55,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x13,0x00,0x00,0x00,0x57,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,
+0x58,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x56,0x03,0x00,0x00,0x59,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x53,0x03,0x00,0x00,0x5a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x22,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x03,0x00,0x00,0x5d,0x03,0x00,0x00,0x8d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x03,0x00,0x00,
+0x84,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x61,0x03,0x00,0x00,
+0x87,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x03,0x00,0x00,0x63,0x03,0x00,0x00,0x64,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x85,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,0x65,0x03,0x00,0x00,
+0x67,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x68,0x03,0x00,0x00,0x8d,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x37,0x02,0x00,0x00,0x6d,0x03,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x15,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x6d,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x03,0x00,0x00,0x87,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x03,0x00,0x00,0x85,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x03,0x00,0x00,
+0x84,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0e,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_q3_k_f32_len = 13596;
+
+unsigned char matmul_id_q3_k_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x28,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x30,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x40,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x40,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x40,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x42,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf1,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x36,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x36,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x36,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x36,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x36,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x77,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x78,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x78,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x78,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7a,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7a,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x16,0x00,0x03,0x00,
+0x3f,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x40,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x43,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x48,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa7,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x2d,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2f,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2f,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x33,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,
+0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x35,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x37,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3a,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x98,0x02,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x97,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x99,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xaf,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc6,0x02,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc7,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x77,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x78,0x03,0x00,0x00,0x77,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0x79,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x78,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x79,0x03,0x00,0x00,
+0x7a,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x03,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x92,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc7,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa4,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xa5,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa5,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xaf,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa5,0x03,0x00,0x00,0xed,0x03,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xae,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa5,0x03,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xae,0x03,0x00,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xed,0x03,0x00,0x00,
+0xaf,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x27,0x04,0x00,0x00,
+0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xeb,0x03,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xae,0x03,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xeb,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0xeb,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xae,0x03,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0xed,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0xed,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x27,0x04,0x00,0x00,0xed,0x03,0x00,0x00,0x70,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xeb,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xae,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa4,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb0,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xb0,0x03,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xb0,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xca,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb1,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xb1,0x03,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xea,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xc2,0x03,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xc6,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x5d,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x60,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x76,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xb0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x14,0x00,0x00,0x00,0xe5,0x03,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x60,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x14,0x00,0x00,0x00,
+0xe6,0x03,0x00,0x00,0x73,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xe5,0x03,0x00,0x00,0x79,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x14,0x00,0x00,0x00,0xe7,0x03,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xe6,0x03,0x00,0x00,
+0x60,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xe7,0x03,0x00,0x00,0x41,0x00,0x07,0x00,
+0xa7,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd1,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xea,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xc2,0x03,0x00,0x00,0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0xf9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xc3,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfe,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0xc3,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0xca,0x03,0x00,0x00,0x13,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0xc3,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3a,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,0x45,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x45,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3a,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd0,0x01,0x00,0x00,0x4c,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x4c,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x53,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,
+0x54,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x1e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3a,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5b,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0x3a,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x62,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd0,0x01,0x00,0x00,0x63,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x63,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x6b,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3a,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,0x73,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0xc3,0x03,0x00,0x00,
+0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xc6,0x03,0x00,0x00,0x79,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0xca,0x03,0x00,0x00,
+0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x80,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x2a,0x03,0x00,0x00,0x83,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0xcc,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x86,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0xd0,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8a,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8e,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0xe2,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x96,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xd0,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xe2,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xd0,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xe2,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xcc,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,0xad,0x02,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xac,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xaf,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb0,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xe2,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xd0,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xd1,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb8,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbc,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdf,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xdf,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0xd1,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xdf,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xd1,0x03,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xdf,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xcc,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xaf,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xde,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xdf,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xd1,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0xe7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0xd2,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe6,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xea,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd6,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x26,0x03,0x00,0x00,
+0xef,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xd6,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xee,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf2,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xd8,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf6,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfa,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xda,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x22,0x03,0x00,0x00,0xfd,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0xda,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfe,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x02,0x03,0x00,0x00,0xfd,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0xd2,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0xd8,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x06,0x03,0x00,0x00,0x07,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0xd6,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xda,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xda,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xaf,0x02,0x00,0x00,
+0x12,0x03,0x00,0x00,0x9a,0x02,0x00,0x00,0x11,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x13,0x03,0x00,0x00,
+0x12,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x14,0x03,0x00,0x00,0x13,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xaf,0x02,0x00,0x00,0x19,0x03,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x06,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x19,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1d,0x03,0x00,0x00,0x1f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0xda,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfc,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfe,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0xd8,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x03,0x00,0x00,0xd6,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0xd2,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xcc,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0xb1,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0xb5,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x3a,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xa3,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x40,0x03,0x00,0x00,
+0xb2,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3c,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x40,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x3c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x45,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0xb3,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x44,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x48,0x03,0x00,0x00,0x43,0x03,0x00,0x00,0x44,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,0xb3,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x03,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x03,0x00,0x00,0xb2,0x03,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,
+0x38,0x03,0x00,0x00,0x54,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x03,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0x57,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x43,0x03,0x00,0x00,
+0x9f,0x03,0x00,0x00,0x5d,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0xb5,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5c,0x03,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x60,0x03,0x00,0x00,0x5b,0x03,0x00,0x00,0x5c,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x58,0x03,0x00,0x00,
+0xb5,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x64,0x03,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x69,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x67,0x03,0x00,0x00,0x68,0x03,0x00,0x00,
+0x69,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x69,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x91,0x00,0x00,0x00,0x64,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x6d,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x70,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x69,0x03,0x00,0x00,0x9d,0x03,0x00,0x00,0x71,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x76,0x03,0x00,0x00,
+0xbb,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x72,0x03,0x00,0x00,0x71,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x76,0x03,0x00,0x00,0x71,0x03,0x00,0x00,
+0x72,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x03,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x03,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x7f,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x03,0x00,0x00,
+0x7d,0x03,0x00,0x00,0x80,0x03,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x83,0x03,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x03,0x00,0x00,0x83,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x85,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x03,0x00,0x00,0x86,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x84,0x03,0x00,0x00,
+0x87,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x03,0x00,0x00,0x81,0x03,0x00,0x00,0x88,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x03,0x00,0x00,
+0x89,0x03,0x00,0x00,0x50,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,0x8b,0x03,0x00,0x00,
+0xbb,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x03,0x00,0x00,0xb2,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x03,0x00,0x00,
+0x8f,0x03,0x00,0x00,0xb5,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x03,0x00,0x00,0x91,0x03,0x00,0x00,
+0x92,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x03,0x00,0x00,0xb3,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x03,0x00,0x00,
+0x93,0x03,0x00,0x00,0x95,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x03,0x00,0x00,0x96,0x03,0x00,0x00,
+0xbb,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x99,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,0x98,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,
+0x99,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x3a,0x02,0x00,0x00,
+0x9b,0x03,0x00,0x00,0x7a,0x03,0x00,0x00,0x15,0x00,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x9b,0x03,0x00,0x00,
+0x9a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x03,0x00,0x00,0xbb,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x70,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x5d,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,0xb5,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5a,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5c,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x45,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,
+0xb3,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x03,0x00,0x00,0xb2,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xa4,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa4,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q3_k_f32_aligned_len = 14392;
+
+unsigned char matmul_id_q3_k_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x51,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x40,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x40,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x40,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x41,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x42,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x42,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x32,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x33,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x33,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x33,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x4f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4f,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x51,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x51,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x3f,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x40,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x48,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa7,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb4,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x2c,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2d,0x02,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x2d,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x31,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x32,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x33,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x34,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x34,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x37,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x72,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x73,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x4e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x4f,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x50,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x50,0x03,0x00,0x00,0x51,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x55,0x03,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x7b,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0x7c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x7c,0x03,0x00,0x00,0xc4,0x03,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x85,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x85,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x03,0x00,0x00,0x86,0x03,0x00,0x00,
+0x64,0x00,0x00,0x00,0xfe,0x03,0x00,0x00,0x72,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x85,0x03,0x00,0x00,0x80,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0xc2,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x85,0x03,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xc4,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xc4,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x03,0x00,0x00,
+0xc4,0x03,0x00,0x00,0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x85,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x87,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x87,0x03,0x00,0x00,0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x87,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x87,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x88,0x03,0x00,0x00,0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x99,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xea,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x99,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x99,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x9d,0x03,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x39,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x60,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5f,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x74,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x79,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x76,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x14,0x00,0x00,0x00,
+0xbc,0x03,0x00,0x00,0x8c,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x60,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x14,0x00,0x00,0x00,0xbd,0x03,0x00,0x00,
+0x73,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0xbc,0x03,0x00,0x00,
+0x79,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x14,0x00,0x00,0x00,0xbe,0x03,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0xbd,0x03,0x00,0x00,0x60,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xbe,0x03,0x00,0x00,0x41,0x00,0x07,0x00,0xa7,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x14,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcf,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcf,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xea,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x99,0x03,0x00,0x00,0xf2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x9a,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf8,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfc,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x9a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0xa1,0x03,0x00,0x00,0x11,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x41,0x00,0x07,0x00,0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcf,0x01,0x00,0x00,0x3a,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x3a,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x37,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcf,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x40,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x37,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x45,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcf,0x01,0x00,0x00,0x46,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x46,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x41,0x00,0x07,0x00,0x37,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcf,0x01,0x00,0x00,0x4d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x4d,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x9a,0x03,0x00,0x00,0x50,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x9d,0x03,0x00,0x00,
+0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0xa1,0x03,0x00,0x00,0x56,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x01,0x03,0x00,0x00,0x5d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0xa3,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x60,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa7,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0xa7,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x68,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6c,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x70,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0xa7,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0xa7,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0xa3,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcf,0x01,0x00,0x00,0x87,0x02,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x86,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x89,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xb9,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0xa7,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa8,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0xa8,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x95,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x90,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xb6,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xa8,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xb6,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa8,0x03,0x00,0x00,0xa9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xb6,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xa3,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcf,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xb7,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xb6,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x97,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x92,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xa8,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa9,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0xff,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xa9,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xbf,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xad,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xad,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc7,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcf,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd3,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xce,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb1,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xb1,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xa9,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xaf,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xad,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xb1,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xb1,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf4,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xb1,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xaf,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xad,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0xa9,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0xa3,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x88,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0xb5,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x89,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x89,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x13,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x17,0x03,0x00,0x00,0x12,0x03,0x00,0x00,
+0x13,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x19,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x19,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x78,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,0x8a,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1b,0x03,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1f,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x8a,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x03,0x00,0x00,0x09,0x03,0x00,0x00,0x23,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x24,0x03,0x00,0x00,
+0x26,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x89,0x03,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x31,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x31,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x76,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x8c,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x33,0x03,0x00,0x00,
+0x34,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x37,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0x33,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x32,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x8c,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,0x86,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3e,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x40,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x33,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x40,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x44,0x03,0x00,0x00,0x91,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x44,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x92,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x74,0x03,0x00,0x00,0x48,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x92,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x49,0x03,0x00,0x00,0x48,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4d,0x03,0x00,0x00,0x48,0x03,0x00,0x00,
+0x49,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x03,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x53,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0x53,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x56,0x03,0x00,0x00,
+0x13,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x57,0x03,0x00,0x00,0x56,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x03,0x00,0x00,
+0x54,0x03,0x00,0x00,0x57,0x03,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0x45,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x5a,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x5c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x5d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x58,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00,
+0x60,0x03,0x00,0x00,0x27,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x62,0x03,0x00,0x00,
+0x92,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x03,0x00,0x00,0x89,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0x66,0x03,0x00,0x00,0x8c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0x68,0x03,0x00,0x00,
+0x69,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x8a,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x6d,0x03,0x00,0x00,
+0x92,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x70,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x71,0x03,0x00,0x00,
+0x70,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x37,0x02,0x00,0x00,
+0x72,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0x15,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x72,0x03,0x00,0x00,
+0x71,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x03,0x00,0x00,0x92,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x47,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x34,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x03,0x00,0x00,0x8c,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x31,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x03,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x19,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1b,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x14,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x03,0x00,0x00,0x89,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x11,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x13,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x7b,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q3_k_f32_aligned_fp32_len = 13660;
+
+unsigned char matmul_id_q3_k_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xf8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x45,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x40,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x40,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x40,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x41,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x42,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x42,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x1b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x1b,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1d,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x43,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x43,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x43,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x45,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x45,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x3f,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x40,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x48,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa7,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb4,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x10,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x02,0x00,0x00,
+0x04,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x11,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x1a,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1c,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x1c,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x35,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x51,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x66,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x67,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x93,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x94,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x42,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x43,0x03,0x00,0x00,0x42,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0x44,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x44,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x50,0x03,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x94,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x6f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0xbb,0x03,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x79,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x70,0x03,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x79,0x03,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbb,0x03,0x00,0x00,
+0x7a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf7,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,
+0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x79,0x03,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x79,0x03,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0xbb,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xbb,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x03,0x00,0x00,0xbb,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x7b,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x7b,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x7b,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x95,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x91,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0xac,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x91,0x03,0x00,0x00,0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x60,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x76,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x14,0x00,0x00,0x00,0xb3,0x03,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x60,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x14,0x00,0x00,0x00,0xb4,0x03,0x00,0x00,0x73,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0xb3,0x03,0x00,0x00,0x79,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x14,0x00,0x00,0x00,
+0xb5,0x03,0x00,0x00,0x5a,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0xb4,0x03,0x00,0x00,0x60,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xb5,0x03,0x00,0x00,
+0x41,0x00,0x07,0x00,0xa7,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x48,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x48,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcf,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xed,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x8d,0x03,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x8e,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x7a,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x08,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x06,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x5f,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x95,0x03,0x00,0x00,0x26,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x35,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcf,0x01,0x00,0x00,0x38,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x38,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcf,0x01,0x00,0x00,0x41,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x41,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x44,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0x91,0x03,0x00,0x00,0x47,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x95,0x03,0x00,0x00,0x4a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x97,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x97,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x54,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x9b,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xad,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0xad,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x64,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x9b,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0xad,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x9b,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0xad,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x97,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcf,0x01,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xb5,0x01,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7d,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xad,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x59,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0x9b,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x9c,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x89,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0xaa,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8d,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x91,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x9c,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xaa,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9c,0x03,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xaa,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x97,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcf,0x01,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xab,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xaa,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x9c,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x85,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x9d,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb7,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xa1,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbf,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa3,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xa3,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc7,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xa5,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcb,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x9d,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xa3,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xa5,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xa5,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xe8,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0xa5,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0xa3,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x9d,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x51,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x97,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x7c,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x05,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x7d,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x07,0x03,0x00,0x00,
+0x08,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0b,0x03,0x00,0x00,0x06,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x10,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0x7e,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0f,0x03,0x00,0x00,0x10,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x13,0x03,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x03,0x00,0x00,0x7e,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x18,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x7d,0x03,0x00,0x00,0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x03,0x03,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x03,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x20,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x25,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x80,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x80,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x27,0x03,0x00,0x00,0x28,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x03,0x00,0x00,
+0x26,0x03,0x00,0x00,0x27,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x26,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0x80,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x7a,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x34,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x32,0x03,0x00,0x00,0x33,0x03,0x00,0x00,0x34,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x27,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x90,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x38,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3b,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x86,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x41,0x03,0x00,0x00,0x86,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3d,0x03,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x41,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x03,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x39,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x48,0x03,0x00,0x00,0x47,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x49,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,0x48,0x03,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x51,0x03,0x00,0x00,0x13,0x00,0x00,0x00,0x50,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x52,0x03,0x00,0x00,
+0x51,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0x52,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x53,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x54,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x56,0x03,0x00,0x00,0x86,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x7d,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x80,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x5c,0x03,0x00,0x00,0x5d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0x7e,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x60,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x03,0x00,0x00,0x61,0x03,0x00,0x00,0x86,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x64,0x03,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x65,0x03,0x00,0x00,0x64,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x35,0x02,0x00,0x00,0x66,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0x15,0x00,0x00,0x00,0x58,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x66,0x03,0x00,0x00,0x65,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0x86,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x80,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x25,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x27,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x7d,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x05,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_q3_k_f32_fp32_len = 13476;
+
+unsigned char matmul_id_q4_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x42,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x40,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x6c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x6c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x6c,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6e,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x98,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x99,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x99,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x99,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9b,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9b,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x0a,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x1e,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x41,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x62,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x6b,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x6d,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x86,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xb9,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xba,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xe7,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x98,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x99,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x41,0x03,0x00,0x00,0x29,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xc5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xac,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x13,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x41,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0x43,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x59,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0x77,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x86,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x59,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x94,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x59,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x59,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x97,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x47,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x9d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xef,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa7,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xab,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xaf,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0x05,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb7,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x05,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x05,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xef,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd1,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x05,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x03,0x02,0x00,0x00,0xda,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd9,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdd,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0xe0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x02,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x02,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0x02,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xef,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xff,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x05,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x49,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x13,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd0,0x01,0x00,0x00,0x33,0x02,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x32,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd0,0x01,0x00,0x00,0x3a,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x27,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3e,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x18,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x17,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa3,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x61,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x69,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x90,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x93,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x86,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbc,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q4_0_f32_len = 11036;
+
+unsigned char matmul_id_q4_0_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x6d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x10,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x40,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x41,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x85,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x86,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x86,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc9,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xcb,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x1e,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x41,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x7e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x7f,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x83,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x18,0x00,0x04,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x85,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x87,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x87,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xe9,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xea,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x00,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x17,0x02,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x16,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x18,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xca,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xca,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xea,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x18,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x64,0x00,0x00,0x00,
+0x68,0x03,0x00,0x00,0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x14,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x1b,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x39,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x15,0x03,0x00,0x00,
+0x44,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x48,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x63,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x60,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x8a,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x8a,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8a,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8a,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x8a,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8a,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x48,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x19,0x03,0x00,0x00,
+0xca,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x1d,0x03,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xd4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd7,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x05,0x02,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x23,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x03,0x02,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x35,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0x23,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x35,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x23,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x35,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x1f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x00,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x01,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x35,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x23,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x07,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x33,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0d,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x32,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x15,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x24,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x32,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x24,0x03,0x00,0x00,0x21,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x32,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0x2d,0x02,0x00,0x00,0x80,0x01,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x00,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x2f,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x11,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x24,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x35,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x36,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x29,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x43,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x47,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4b,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x53,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x00,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x62,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x00,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x6e,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x29,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x35,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x37,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x05,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8d,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x91,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x99,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0x21,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb1,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xba,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb8,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xee,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc3,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc7,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x08,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x06,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x8a,0x01,0x00,0x00,0xec,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xec,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x93,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_q4_0_f32_aligned_len = 11844;
+
+unsigned char matmul_id_q4_0_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x43,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0xa1,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x82,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x83,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x83,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x83,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x85,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9e,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x9f,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x9f,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x00,0x00,0x00,0x41,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x32,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x7c,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x81,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x83,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x84,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc2,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xef,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf0,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x9e,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,
+0x42,0x03,0x00,0x00,0x2a,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xcb,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x64,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x72,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x10,0x03,0x00,0x00,0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x1b,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x42,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x38,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x42,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x46,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0xec,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4c,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0xec,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x61,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x87,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x87,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x87,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x87,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xec,0x02,0x00,0x00,
+0xa0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xef,0x02,0x00,0x00,0xa3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x51,0x02,0x00,0x00,0xad,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb8,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xba,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xba,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x0b,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc0,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x0b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x0b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xba,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xe2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x09,0x02,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0x08,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x08,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x08,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,0x05,0x02,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x04,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x13,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x01,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1f,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x25,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x03,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x27,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2b,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x01,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0xff,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x03,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0xc4,0x01,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0xf1,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x44,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x03,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x20,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0xff,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x63,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x67,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6b,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6f,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x87,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x90,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x97,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x98,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x87,0x01,0x00,0x00,0xc2,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q4_0_f32_aligned_fp32_len = 11096;
+
+unsigned char matmul_id_q4_0_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x3b,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x94,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x69,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x6a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x6a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x91,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x92,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x92,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x94,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x94,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x0a,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x1e,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x00,0x00,0x00,0x41,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x5f,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x60,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x69,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xb5,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xe2,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x91,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x92,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x93,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x93,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x29,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xbe,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x76,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,
+0x06,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x13,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x37,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x36,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0xde,0x02,0x00,0x00,0x41,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x47,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x55,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x56,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x75,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x90,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x57,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x93,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x96,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x99,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x44,0x02,0x00,0x00,0xa0,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9f,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xec,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa7,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xab,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xec,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xec,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xec,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd4,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd8,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0xec,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xfa,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x42,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x02,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x06,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x18,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1e,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xb7,0x01,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0xe4,0x01,0x00,0x00,0x22,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x37,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x13,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0xee,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9f,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x54,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x54,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5a,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x55,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x62,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7a,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x83,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x81,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x90,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x90,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x84,0x01,0x00,0x00,0xb5,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x54,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q4_0_f32_fp32_len = 10916;
+
+unsigned char matmul_id_q4_1_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x43,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x45,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x70,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x71,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x71,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x71,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x73,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x73,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x9e,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x9e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x9e,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa0,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x0a,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x36,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x66,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x67,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x67,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x70,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x72,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x72,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xec,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xed,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x9d,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xed,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xca,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x42,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x42,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0xac,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x13,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x13,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3d,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x48,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x52,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x5e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x5c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x8b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x4c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xee,0x02,0x00,0x00,0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x50,0x02,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa8,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xac,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb4,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x0a,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbc,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x0a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x0a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3c,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd5,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x08,0x02,0x00,0x00,0xdf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe2,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x06,0x02,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0x07,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xea,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x07,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf9,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x07,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3c,0x01,0x00,0x00,0x02,0x02,0x00,0x00,
+0x68,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x03,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd5,0x01,0x00,0x00,0x04,0x02,0x00,0x00,
+0xee,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x04,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x10,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x18,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x13,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1c,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x20,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x22,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x24,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x28,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd5,0x01,0x00,0x00,
+0x38,0x02,0x00,0x00,0xc0,0x01,0x00,0x00,0x37,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x39,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd5,0x01,0x00,0x00,0x3f,0x02,0x00,0x00,0xee,0x01,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x40,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x43,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x22,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x66,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x68,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6e,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x80,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x82,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x86,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x98,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9c,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x8b,0x01,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xc1,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x98,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x80,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q4_1_f32_len = 11104;
+
+unsigned char matmul_id_q4_1_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x6e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x10,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x45,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x46,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x8b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x8b,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xcd,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xce,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xce,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xce,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd0,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd0,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x0b,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x1e,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x36,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x83,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x84,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x88,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xee,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x05,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1c,0x02,0x00,0x00,0x0b,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xcd,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xce,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xcf,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xcf,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xef,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xfa,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x07,0x03,0x00,0x00,0x64,0x00,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfa,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x14,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x14,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x20,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x24,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x24,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x24,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0x24,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3e,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3d,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0x49,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x1b,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x53,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x22,0x03,0x00,0x00,
+0x68,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8f,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3d,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8f,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x8f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8f,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3d,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa9,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8f,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x8f,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8f,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3d,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc1,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8f,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc9,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0x1b,0x03,0x00,0x00,0xcc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x1e,0x03,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x22,0x03,0x00,0x00,0xd2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x80,0x02,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x24,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x28,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x08,0x02,0x00,0x00,0xe7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x28,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x28,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x24,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0x03,0x02,0x00,0x00,0x38,0x01,0x00,0x00,0x02,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x04,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x05,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0xf0,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x38,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x29,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x12,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x37,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x16,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1a,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x29,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x37,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x29,0x03,0x00,0x00,
+0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x37,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x24,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0x32,0x02,0x00,0x00,0x85,0x01,0x00,0x00,0x31,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x33,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x05,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x37,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x2a,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3c,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x40,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x44,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x48,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x30,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x50,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x32,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x58,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x53,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x2a,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x30,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x32,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x05,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x67,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x69,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x05,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x73,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x32,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x54,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x30,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd8,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x96,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9e,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x0d,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb6,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xbf,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcc,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc7,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x8f,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf1,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x13,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x93,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xfa,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q4_1_f32_aligned_len = 11912;
+
+unsigned char matmul_id_q4_1_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x44,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0xa6,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x10,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x43,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x88,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xa4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xa4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xa4,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x81,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x82,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x86,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x89,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xa3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xa4,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa5,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xd0,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x15,0x03,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x64,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x72,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,
+0x15,0x03,0x00,0x00,0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x14,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x20,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x24,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x24,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x24,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x24,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x47,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x51,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0x66,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x8c,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x8c,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x8c,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0xab,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x56,0x02,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb1,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb5,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x10,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xde,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x10,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xba,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x10,0x02,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0xff,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xea,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0xed,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x0d,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xff,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0xff,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,0x83,0x01,0x00,0x00,
+0x09,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0c,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xff,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x54,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x18,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x13,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1c,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x20,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x22,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x24,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x28,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2c,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x30,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x08,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x3f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x34,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x49,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x06,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x68,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x74,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x88,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8c,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x95,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x95,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x91,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x8c,0x01,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xc7,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x69,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x68,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd0,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q4_1_f32_aligned_fp32_len = 11164;
+
+unsigned char matmul_id_q4_1_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x3c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x99,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x6f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x71,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x96,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x97,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x97,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x97,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x99,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x99,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x0a,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x1e,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x64,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x6e,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x70,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xba,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x96,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x97,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x98,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x98,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xc3,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x76,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x13,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x13,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x46,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4c,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x5c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x5a,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x89,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x95,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,0x98,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x49,0x02,0x00,0x00,0xa5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa8,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x03,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb8,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x03,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x03,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3b,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xd1,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x03,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x03,0x02,0x00,0x00,
+0xda,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdd,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x00,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x00,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x00,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3b,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xff,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x47,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0f,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x13,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x17,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1b,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x23,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x32,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x27,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3c,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x05,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x5b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x63,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x67,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x88,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x86,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x91,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x95,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x89,0x01,0x00,0x00,
+0xba,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xba,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q4_1_f32_fp32_len = 10984;
+
+unsigned char matmul_id_q4_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb5,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x07,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x25,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x27,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x27,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x27,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x29,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xab,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xac,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xd8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd8,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xda,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xda,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x04,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x05,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x05,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x07,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x1e,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x21,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x26,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x27,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x29,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x81,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x82,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x95,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xce,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd7,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x25,0x02,0x00,0x00,0x21,0x01,0x00,0x00,
+0x24,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x26,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x53,0x02,0x00,0x00,0x21,0x01,0x00,0x00,
+0x52,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x54,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x04,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x05,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x06,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x06,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x54,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x31,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x7c,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xb0,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,0x76,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x7a,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x7c,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb0,0x03,0x00,0x00,
+0x7c,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x31,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x55,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x51,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xe9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x51,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x55,0x03,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x35,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x41,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0xaf,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x41,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x35,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x23,0x01,0x00,0x00,0x78,0x03,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x23,0x01,0x00,0x00,0x77,0x03,0x00,0x00,
+0x43,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x77,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x78,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3a,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xb4,0x03,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0xb4,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x95,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x96,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xb4,0x03,0x00,0x00,
+0x73,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x95,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x51,0x03,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x52,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x52,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x52,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x3e,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x52,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x59,0x03,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x95,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xf6,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x95,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x00,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x52,0x03,0x00,0x00,0x03,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x55,0x03,0x00,0x00,0x06,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x59,0x03,0x00,0x00,0x09,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x13,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x5f,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x71,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x71,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1f,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x23,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x71,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x71,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x95,0x01,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x83,0x01,0x00,0x00,0x39,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x71,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x18,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x5f,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x17,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x43,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x60,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4d,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x51,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x60,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x60,0x03,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x95,0x01,0x00,0x00,
+0x69,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,0x68,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x6b,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x60,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x45,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x61,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x65,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x65,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x87,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x69,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x61,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x67,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x65,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x69,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x69,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3c,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0xa7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xaa,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x69,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x83,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x65,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x61,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x40,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x41,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x30,0x03,0x00,0x00,
+0xca,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x41,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcd,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x42,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd1,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd5,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x42,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x41,0x03,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0xea,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xed,0x02,0x00,0x00,
+0x44,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x44,0x03,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x3e,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xf6,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf4,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x90,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xfd,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xff,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x03,0x03,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0xfb,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x09,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x13,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x10,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x13,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x11,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x15,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x41,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x44,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x1f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x42,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x03,0x00,0x00,0x20,0x03,0x00,0x00,0x22,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0x23,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x26,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xf2,0x01,0x00,0x00,0x28,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0x15,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x28,0x03,0x00,0x00,0x27,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xea,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x44,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x42,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x41,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x31,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x03,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q4_k_f32_len = 12524;
+
+unsigned char matmul_id_q4_k_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xdf,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x36,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x26,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x28,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x28,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x28,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x2a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xac,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xad,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xf2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xf2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xf2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xf2,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf4,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x33,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x34,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x34,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x34,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x36,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x22,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x26,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x28,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x82,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x83,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x96,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xea,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xf1,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf3,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x54,0x02,0x00,0x00,0x22,0x01,0x00,0x00,
+0x53,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x55,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6b,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x22,0x01,0x00,0x00,
+0x81,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x33,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x34,0x03,0x00,0x00,0x33,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x35,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x35,0x03,0x00,0x00,0x36,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x41,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x55,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x60,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0x61,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x61,0x03,0x00,0x00,0xa8,0x03,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x03,0x00,0x00,0x6d,0x03,0x00,0x00,
+0x64,0x00,0x00,0x00,0xda,0x03,0x00,0x00,0x72,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x80,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0xa6,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xa8,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xa8,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xda,0x03,0x00,0x00,
+0xa8,0x03,0x00,0x00,0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x60,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x6e,0x03,0x00,0x00,0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x88,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x84,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x6f,0x03,0x00,0x00,0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xea,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x80,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x84,0x03,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x2e,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x42,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x42,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x36,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3b,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3b,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x24,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x24,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x42,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x24,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3b,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x24,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0xb0,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x24,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x24,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x36,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x36,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x24,0x01,0x00,0x00,
+0xa4,0x03,0x00,0x00,0x4f,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x24,0x01,0x00,0x00,0xa3,0x03,0x00,0x00,0x44,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xa3,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0xa4,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3b,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x24,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xde,0x03,0x00,0x00,0x7f,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0xde,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x96,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x97,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3b,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x24,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xde,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x96,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xea,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x80,0x03,0x00,0x00,0xb0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x81,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0xb5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x81,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xba,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x81,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x88,0x03,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0x81,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x96,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xfa,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xf6,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x96,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xf6,0x01,0x00,0x00,
+0x05,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x96,0x01,0x00,0x00,0x08,0x02,0x00,0x00,0xec,0x01,0x00,0x00,
+0x03,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x08,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xe7,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xf6,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x96,0x01,0x00,0x00,
+0x10,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xf6,0x01,0x00,0x00,0x14,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x96,0x01,0x00,0x00,0x17,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x19,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xf6,0x01,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x96,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,0xec,0x01,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x1f,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0xe7,0x01,0x00,0x00,0x21,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xf6,0x01,0x00,0x00,0x24,0x02,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x26,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x96,0x01,0x00,0x00,
+0x27,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x22,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0xf6,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x96,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0x2a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x81,0x03,0x00,0x00,
+0x32,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x84,0x03,0x00,0x00,0x35,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x88,0x03,0x00,0x00,
+0x38,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x46,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4a,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa0,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0xa0,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x52,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0xa0,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0xa0,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x96,0x01,0x00,0x00,0x69,0x02,0x00,0x00,
+0x84,0x01,0x00,0x00,0x68,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x6a,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x6b,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x6c,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0xa0,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x74,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9d,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x9d,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x9d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x9d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x96,0x01,0x00,0x00,0x98,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0x97,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x6b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x9d,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x8f,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x90,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x90,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x94,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0x94,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xae,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x96,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x96,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb6,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb8,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x98,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x98,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xba,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbe,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x90,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x96,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x94,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x98,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x98,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x6b,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x6b,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd9,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x98,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x96,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x94,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaa,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x90,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x6f,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,0xed,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x70,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf8,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfc,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x71,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x71,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x00,0x03,0x00,0x00,
+0x01,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x04,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x71,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0xee,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x70,0x03,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x16,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x16,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x73,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x19,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x73,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x18,0x03,0x00,0x00,
+0x19,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1c,0x03,0x00,0x00,0x17,0x03,0x00,0x00,0x18,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0x73,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x23,0x03,0x00,0x00,0x20,0x03,0x00,0x00,0x6d,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x25,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x23,0x03,0x00,0x00,0x24,0x03,0x00,0x00,
+0x25,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x18,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x25,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x91,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x29,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x59,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x79,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2e,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x32,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x2e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2d,0x03,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x38,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x13,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x39,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x42,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x40,0x03,0x00,0x00,
+0x43,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,0x44,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x47,0x03,0x00,0x00,
+0x79,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x70,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x73,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x03,0x00,0x00,0x71,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x03,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0x52,0x03,0x00,0x00,
+0x79,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x55,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x56,0x03,0x00,0x00,
+0x55,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xf6,0x01,0x00,0x00,
+0x57,0x03,0x00,0x00,0x36,0x03,0x00,0x00,0x15,0x00,0x00,0x00,
+0x49,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x57,0x03,0x00,0x00,
+0x56,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x03,0x00,0x00,0x79,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x19,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x19,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,0x73,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x16,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x18,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x01,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,
+0x71,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x03,0x00,0x00,0x70,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x60,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q4_k_f32_aligned_len = 13336;
+
+unsigned char matmul_id_q4_k_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb5,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x28,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x28,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x28,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x2a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xed,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xee,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xee,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xee,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf0,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x09,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x0a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0a,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0c,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0c,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x22,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x26,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x1e,0x00,0x05,0x00,0x28,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x41,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x81,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x82,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x94,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xed,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0xee,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xef,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x51,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x2d,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x5a,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5b,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x09,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0a,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0b,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x0b,0x03,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x24,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x5b,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x36,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x37,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x42,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x37,0x03,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x42,0x03,0x00,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x43,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0xb0,0x03,0x00,0x00,
+0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x42,0x03,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x42,0x03,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x7e,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x03,0x00,0x00,0x7e,0x03,0x00,0x00,0x70,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x7c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x43,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x36,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x44,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x44,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xea,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x56,0x03,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x5a,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x2e,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x35,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x41,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x24,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0xb0,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x24,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x41,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x24,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x24,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x24,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x24,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x35,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x24,0x01,0x00,0x00,0x7a,0x03,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x24,0x01,0x00,0x00,0x79,0x03,0x00,0x00,
+0x43,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x79,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3a,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x24,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xb4,0x03,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0xb4,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x94,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x95,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3a,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x24,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xb4,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x94,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa8,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xea,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xea,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x56,0x03,0x00,0x00,
+0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x57,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x57,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x57,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x5e,0x03,0x00,0x00,0xcc,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x60,0x00,0x00,0x00,0x57,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0xf2,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0xf2,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x03,0x02,0x00,0x00,0x41,0x00,0x07,0x00,
+0xf2,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x03,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,
+0x08,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0x04,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x57,0x03,0x00,0x00,0x0b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x5a,0x03,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x11,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x60,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x64,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1f,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x25,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x76,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x76,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x27,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2b,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x64,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x76,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x64,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x76,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x60,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,
+0x42,0x02,0x00,0x00,0x83,0x01,0x00,0x00,0x41,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x76,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x20,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x64,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x65,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x65,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4c,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x50,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x52,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x73,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x73,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x54,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x58,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x65,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x73,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x65,0x03,0x00,0x00,
+0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x73,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x60,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,
+0x70,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x73,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x54,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x65,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x66,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x80,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x82,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x86,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x88,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x6c,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8a,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x92,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x96,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x66,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xaf,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x66,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x60,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x45,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x46,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x35,0x03,0x00,0x00,0xcf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x46,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xce,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd2,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x33,0x03,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0x47,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd6,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0x47,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x46,0x03,0x00,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0xef,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x49,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xee,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf2,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x49,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x43,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xfb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf9,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfa,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xff,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x02,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x02,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x04,0x03,0x00,0x00,
+0x03,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x08,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x03,0x03,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x00,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x12,0x03,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x15,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x13,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0x19,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x13,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,
+0x46,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x21,0x03,0x00,0x00,
+0x49,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0x24,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x47,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x25,0x03,0x00,0x00,
+0x27,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xf2,0x01,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x15,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2d,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x02,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x47,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x46,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x36,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x36,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_q4_k_f32_aligned_fp32_len = 12588;
+
+unsigned char matmul_id_q4_k_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xae,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x00,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x26,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x27,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x27,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x29,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd5,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xd6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xd6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xd6,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd8,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfd,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xfe,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xfe,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xfe,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x00,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x00,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x21,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x25,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x26,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x27,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x41,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x81,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x82,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x94,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcc,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd5,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd6,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd7,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x21,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x22,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x4e,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4f,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xfd,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xfe,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xff,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xff,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x22,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x2a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x75,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x75,0x03,0x00,0x00,0x37,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xa9,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x73,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x73,0x03,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x73,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x73,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x75,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x75,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x03,0x00,0x00,0x75,0x03,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x73,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x36,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2a,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x52,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x2d,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x35,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3a,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x41,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3a,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0xaf,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x23,0x01,0x00,0x00,
+0x71,0x03,0x00,0x00,0x4e,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x23,0x01,0x00,0x00,0x70,0x03,0x00,0x00,0x43,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x70,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x71,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xad,0x03,0x00,0x00,0x7e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0xad,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x95,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xad,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x4a,0x03,0x00,0x00,0xad,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb3,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x37,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xc3,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x52,0x03,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xf0,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xfc,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,
+0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x52,0x03,0x00,0x00,
+0x05,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xb0,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x54,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x11,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x58,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x13,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x17,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x6a,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1f,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x58,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x6a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x58,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x6a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x54,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,0x36,0x02,0x00,0x00,
+0x83,0x01,0x00,0x00,0x35,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x58,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x59,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x59,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x40,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x44,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x59,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x59,0x03,0x00,0x00,0x58,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x54,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x94,0x01,0x00,0x00,0x64,0x02,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x63,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x66,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x67,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x59,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x5a,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6e,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x72,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x5e,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7a,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x60,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x62,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x62,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x86,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8a,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x5a,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x60,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x62,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x62,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa3,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x62,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x60,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x54,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0b,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x39,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc2,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc6,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xca,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x58,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x3d,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe2,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe6,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0x3d,0x03,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0x37,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xef,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x02,0x00,0x00,
+0xee,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x90,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0x23,0x03,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x43,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf8,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfc,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf7,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0xf4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x02,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x13,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x05,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0x06,0x03,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x13,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x11,0x03,0x00,0x00,0x43,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x03,0x00,0x00,0x15,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x17,0x03,0x00,0x00,0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x19,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x43,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x03,0x00,0x00,0x1f,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xf0,0x01,0x00,0x00,0x21,0x03,0x00,0x00,0x00,0x03,0x00,0x00,
+0x15,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x21,0x03,0x00,0x00,0x20,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x43,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x03,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q4_k_f32_fp32_len = 12404;
+
+unsigned char matmul_id_q5_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x6c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x10,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x67,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x68,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x93,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x94,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x94,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x94,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x96,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x96,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc1,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc3,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc3,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x0a,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x8b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x00,0x00,0x80,0x41,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x58,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x59,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x89,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x93,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x94,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x95,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x95,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xae,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x10,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xc0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xc1,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc2,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xc2,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x3e,0x01,0x00,0x00,
+0x6b,0x03,0x00,0x00,0x51,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xed,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x37,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x76,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x35,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x37,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x37,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xed,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x1a,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x3e,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x3e,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x3e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5f,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x60,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x6b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x10,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x10,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x81,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7f,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x80,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x17,0x03,0x00,0x00,0x9f,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xae,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x10,0x03,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x13,0x03,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x17,0x03,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x73,0x02,0x00,0x00,0xcc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x19,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x1d,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x19,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5f,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xf9,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x2f,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x05,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x09,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0d,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x1e,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x19,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x19,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5f,0x01,0x00,0x00,0x25,0x02,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x24,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xf8,0x01,0x00,0x00,0x27,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x27,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x07,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x02,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2f,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x33,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x35,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x23,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x25,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x43,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x23,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x27,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xf8,0x01,0x00,0x00,0x5b,0x02,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x5a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xf8,0x01,0x00,0x00,
+0x62,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x63,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x66,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x25,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x23,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x35,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x30,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x19,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x83,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0xff,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x85,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x91,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xff,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa9,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xb2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb0,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x90,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbf,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xff,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xae,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe4,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x08,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0xff,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xed,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_q5_0_f32_len = 11532;
+
+unsigned char matmul_id_q5_0_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x97,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x13,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x13,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x68,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x69,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xad,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xae,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xae,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xae,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xae,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xae,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb0,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf0,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xf1,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf3,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf3,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x00,0x00,0x80,0x41,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x5a,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x60,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa7,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa7,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0xab,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,
+0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xae,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xaf,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xaf,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb2,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x11,0x02,0x00,0x00,0x0b,0x01,0x00,0x00,0x10,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x11,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x28,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x3f,0x02,0x00,0x00,0x0b,0x01,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x40,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xf0,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xf1,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xf2,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf2,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x3f,0x01,0x00,0x00,0x96,0x03,0x00,0x00,0x52,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x40,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x1d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x64,0x03,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x92,0x03,0x00,0x00,
+0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x62,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x62,0x03,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x62,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x92,0x03,0x00,0x00,0x64,0x03,0x00,0x00,0x70,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x62,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x1b,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x1b,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x3f,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x3f,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x96,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,0x3f,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x61,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x60,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x6c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x70,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x40,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x76,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x40,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x47,0x03,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0x40,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x60,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xb2,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x60,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xb2,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x60,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xb2,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x60,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xb2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x60,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xb2,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x60,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xdc,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xb2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x60,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xb2,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x60,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x40,0x03,0x00,0x00,
+0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x70,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x43,0x03,0x00,0x00,0xf2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0x47,0x03,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0xa3,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0x49,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xff,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x03,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x07,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x5f,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x5f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x5f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x49,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x60,0x01,0x00,0x00,0x26,0x02,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x25,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x28,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x29,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x31,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x35,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x30,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x37,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3d,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,0x49,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x49,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x60,0x01,0x00,0x00,0x55,0x02,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x54,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x28,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x57,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x37,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x32,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x4f,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x63,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x53,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6b,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x55,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x73,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x57,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x57,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x77,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7b,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x4f,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x55,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x53,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x57,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x57,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x28,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x13,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x28,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x93,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x96,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x57,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x55,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x53,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x49,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x2f,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb5,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x1a,0x03,0x00,0x00,0xbe,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x30,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc1,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x30,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,0x49,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0xd6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x32,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd9,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x32,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe0,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x91,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x16,0x03,0x00,0x00,0xea,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0x38,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xeb,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xef,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0xfa,0x02,0x00,0x00,0x01,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x02,0x03,0x00,0x00,0xc9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0x38,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x08,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x38,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x12,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xb2,0x01,0x00,0x00,
+0x14,0x03,0x00,0x00,0xf3,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x14,0x03,0x00,0x00,
+0x13,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x32,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x30,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1d,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q5_0_f32_aligned_len = 12340;
+
+unsigned char matmul_id_q5_0_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x6d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x13,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x13,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x66,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x67,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xaa,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xab,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xab,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xab,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xad,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xad,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xc7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc7,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xc7,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x1e,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x00,0x00,0x80,0x41,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x59,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5f,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa4,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xa9,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xac,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xac,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xaf,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xea,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x17,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x18,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc7,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x3f,0x01,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x52,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x18,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x64,0x00,0x00,0x00,
+0x68,0x03,0x00,0x00,0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x15,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x1b,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x1b,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x3f,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x3f,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x6c,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x3f,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x60,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x15,0x03,0x00,0x00,
+0x6a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x74,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x89,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x60,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0xaf,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0xaf,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0xaf,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0xaf,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0x16,0x03,0x00,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x19,0x03,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x1d,0x03,0x00,0x00,0xce,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x79,0x02,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x1f,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x05,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x23,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x35,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x03,0x02,0x00,0x00,0xe3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x35,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe8,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x23,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x35,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x23,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x35,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x35,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x23,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x33,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x24,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0d,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x32,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x11,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x15,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x24,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x32,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x24,0x03,0x00,0x00,
+0x21,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x32,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5f,0x01,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xa6,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x32,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x07,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x35,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x29,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x43,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x53,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x29,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0xec,0x01,0x00,0x00,
+0x62,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x6c,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x29,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x35,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x37,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x05,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8b,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8f,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0x21,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xab,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xaf,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaa,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb6,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc5,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x08,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x06,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xaf,0x01,0x00,0x00,0xea,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xea,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf3,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_q5_0_f32_aligned_fp32_len = 11592;
+
+unsigned char matmul_id_q5_0_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x65,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0xbc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x66,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x91,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x92,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x92,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x92,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x94,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x94,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xba,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xba,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xba,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x0a,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x14,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x00,0x00,0x80,0x41,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x58,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x59,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x59,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x5e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x87,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x88,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x91,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x93,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xac,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xdd,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xde,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xb9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xba,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbb,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x3e,0x01,0x00,0x00,0x64,0x03,0x00,0x00,
+0x51,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xde,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x30,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0xf5,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x30,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x30,0x03,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x14,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x1a,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x1a,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3a,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x3e,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x3e,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x64,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x3e,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5e,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5f,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5e,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x08,0x03,0x00,0x00,
+0x69,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x09,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x6f,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x73,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x09,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x7f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x10,0x03,0x00,0x00,0x9d,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xac,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5e,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xaf,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5e,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb8,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x70,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x09,0x03,0x00,0x00,0xbb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x0c,0x03,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x10,0x03,0x00,0x00,0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x16,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x28,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x28,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0x16,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x28,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x16,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x28,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0x12,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5e,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x28,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x17,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x00,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x02,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x24,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x25,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x04,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x08,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x17,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x25,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x17,0x03,0x00,0x00,
+0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x25,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x12,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5e,0x01,0x00,0x00,
+0x20,0x02,0x00,0x00,0x89,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x17,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x6a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x30,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x30,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x32,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x36,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x3a,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3e,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x20,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x46,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x20,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x55,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x5f,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x38,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x33,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x30,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x18,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x86,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8a,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x85,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9e,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xab,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x90,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x01,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb8,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x01,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0x01,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xac,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x01,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x87,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_q5_0_f32_fp32_len = 11412;
+
+unsigned char matmul_id_q5_1_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x64,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x64,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x90,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x90,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x92,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x92,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbd,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xbd,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbf,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbf,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x0a,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x54,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x55,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x55,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x86,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x86,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x8f,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x91,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x91,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xdd,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xde,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xbc,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbe,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbe,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xde,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xe9,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0x33,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x76,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x33,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x63,0x03,0x00,0x00,
+0x33,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x13,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x13,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5c,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5b,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x67,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x0c,0x03,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6d,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x71,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x0c,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7b,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x13,0x03,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xaa,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5b,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xae,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5b,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x0c,0x03,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x6b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x0f,0x03,0x00,0x00,0xbe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x13,0x03,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6f,0x02,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x15,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc7,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0x19,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xce,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x2b,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x19,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x2b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x19,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x2b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x15,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf5,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x19,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x27,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfd,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x01,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x25,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x09,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x15,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x15,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5b,0x01,0x00,0x00,0x21,0x02,0x00,0x00,
+0x87,0x01,0x00,0x00,0x20,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xf4,0x01,0x00,0x00,0x23,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x28,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x1b,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2b,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2f,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x33,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x37,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x21,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x23,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x23,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x43,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x47,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x1b,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x21,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x23,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x23,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xf4,0x01,0x00,0x00,
+0x57,0x02,0x00,0x00,0xdf,0x01,0x00,0x00,0x56,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x58,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xf4,0x01,0x00,0x00,0x5e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x23,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x21,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x15,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x85,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x89,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8d,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa5,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xae,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb7,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xaa,0x01,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xe0,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x82,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q5_1_f32_len = 11428;
+
+unsigned char matmul_id_q5_1_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x8f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xef,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x64,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa9,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xaa,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xaa,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xaa,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xac,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xac,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xec,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xed,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xed,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xed,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xef,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xef,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x0b,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x0e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x55,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x56,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xa3,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xa7,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xab,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xab,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xae,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0d,0x02,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0e,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x24,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x3a,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xec,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xee,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xee,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x3c,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x19,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1a,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x60,0x03,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x60,0x03,0x00,0x00,0x70,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x19,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x14,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x37,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x3b,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0x3b,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5d,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5c,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3b,0x03,0x00,0x00,0x68,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x3c,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x72,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x43,0x03,0x00,0x00,
+0x87,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xae,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5c,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb2,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xae,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xae,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xae,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5c,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc8,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xae,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xae,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xae,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5c,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xae,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0x3c,0x03,0x00,0x00,0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x3f,0x03,0x00,0x00,0xee,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x43,0x03,0x00,0x00,0xf1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x45,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfb,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x49,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x03,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x27,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x07,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0b,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x49,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x49,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x45,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,
+0x22,0x02,0x00,0x00,0x57,0x01,0x00,0x00,0x21,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x23,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x24,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x25,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x49,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x57,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x4a,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x31,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x33,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x58,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x35,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x39,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x58,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x45,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x58,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x45,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,
+0x51,0x02,0x00,0x00,0xa4,0x01,0x00,0x00,0x50,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x52,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x24,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x58,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x5b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x63,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x67,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x6b,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6f,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x53,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x51,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x53,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x53,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x24,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x24,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x92,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x53,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x45,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf7,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb1,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb5,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x16,0x03,0x00,0x00,0xba,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb9,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x45,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd1,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd5,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xde,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdc,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x34,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe7,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0xfe,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x00,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x06,0x03,0x00,0x00,0x07,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xae,0x01,0x00,0x00,0x10,0x03,0x00,0x00,0xef,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x10,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x34,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd1,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xba,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xba,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x19,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x03,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q5_1_f32_aligned_len = 12236;
+
+unsigned char matmul_id_q5_1_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x65,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x10,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xa7,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xa7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xa7,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa9,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa9,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc2,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xc3,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xc3,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x0b,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x1e,0x00,0x06,0x00,0x0e,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x55,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x56,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x56,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x5b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa1,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xab,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x13,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xc2,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xc3,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc4,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xef,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x36,0x03,0x00,0x00,0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0xfe,0x02,0x00,0x00,0x64,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x36,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x36,0x03,0x00,0x00,
+0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x14,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x14,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x1f,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x3b,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5b,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5c,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5b,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x11,0x03,0x00,0x00,0x66,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x12,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x70,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x12,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x19,0x03,0x00,0x00,0x85,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0xab,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xae,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0xab,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb4,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0xab,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xba,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0xab,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc1,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x15,0x03,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x19,0x03,0x00,0x00,0xca,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xce,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x75,0x02,0x00,0x00,0xd1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd4,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x1f,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x31,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xfd,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x31,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x09,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x20,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x20,0x03,0x00,0x00,0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x1b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5b,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x28,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x2b,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x20,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x21,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x33,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x37,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x43,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x47,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4f,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x21,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x29,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x29,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x5e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x68,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x29,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x27,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x21,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x01,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x87,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8b,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x93,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xab,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x91,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xab,0x01,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xe6,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q5_1_f32_aligned_fp32_len = 11488;
+
+unsigned char matmul_id_q5_1_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x5d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0d,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x62,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x8e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x8e,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x90,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x90,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb5,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb6,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xb6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb6,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x0a,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x36,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x54,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x55,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x55,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x83,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x84,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8d,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x8e,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xda,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x06,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x07,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb5,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb6,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xb7,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb7,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xda,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x03,0x00,0x00,0xf1,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x5c,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x13,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x13,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x1e,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5b,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x04,0x03,0x00,0x00,0x65,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x69,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x69,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x05,0x03,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6f,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x05,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x0c,0x03,0x00,0x00,0x99,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xa8,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5a,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5a,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb4,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x05,0x03,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x69,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6b,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0x08,0x03,0x00,0x00,
+0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x0c,0x03,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x68,0x02,0x00,0x00,0xc4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc7,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x24,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x12,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x24,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x12,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x24,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x0e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5a,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xf0,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x24,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x12,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x22,0x02,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x13,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x20,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x21,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x00,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x13,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x21,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x13,0x03,0x00,0x00,0x10,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x21,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5a,0x01,0x00,0x00,0x1c,0x02,0x00,0x00,0x85,0x01,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x1e,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x21,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x13,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x66,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2a,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2e,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x36,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3a,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x1c,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x42,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x18,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x51,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5b,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x37,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x34,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x18,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x14,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x80,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x82,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x86,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x98,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9e,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb4,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xa8,0x01,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q5_1_f32_fp32_len = 11308;
+
+unsigned char matmul_id_q5_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xda,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x34,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x34,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x34,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x36,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xfd,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xfd,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xfd,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xff,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xff,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x29,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x2a,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x2a,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2c,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2c,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x2e,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x1e,0x00,0x06,0x00,0x34,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x46,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xad,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf3,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xfc,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x24,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x4a,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x49,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x61,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x78,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x77,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x79,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x29,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x2a,0x03,0x00,0x00,0x29,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2b,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2b,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4b,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x56,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0x57,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x57,0x03,0x00,0x00,0xa1,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x57,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,0x63,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xd5,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,0x76,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x9f,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd5,0x03,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x62,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x56,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x64,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x65,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x65,0x03,0x00,0x00,0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x76,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xe9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x76,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x76,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x3a,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x42,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x40,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x22,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0xaf,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x22,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x22,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x22,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x22,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x22,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x22,0x01,0x00,0x00,0x9d,0x03,0x00,0x00,0x59,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x22,0x01,0x00,0x00,0x9c,0x03,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x9c,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x9d,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x46,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x22,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x46,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x22,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x14,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd9,0x03,0x00,0x00,0x89,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xd9,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xae,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x22,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x22,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xd9,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xad,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x76,0x03,0x00,0x00,0xd4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x77,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0xdb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0x77,0x03,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xda,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xde,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x77,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x63,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xea,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x1c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x77,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0xef,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,0x08,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xef,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xad,0x01,0x00,0x00,
+0x1b,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x5f,0x00,0x00,0x00,0x77,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xad,0x01,0x00,0x00,
+0x25,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,0x23,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xea,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x77,0x03,0x00,0x00,
+0x28,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x7a,0x03,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x32,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x80,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x34,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x38,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x33,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x84,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x84,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3c,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x40,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x96,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x96,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x48,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x43,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x84,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x96,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x84,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x96,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xad,0x01,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x5e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x62,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x96,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x84,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x68,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x85,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x85,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6e,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x93,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x93,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x76,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x85,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x93,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x85,0x03,0x00,0x00,0x82,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x93,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x80,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xad,0x01,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x8d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x61,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x93,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x85,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x96,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x86,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x86,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x98,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9c,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa4,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x8c,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xac,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb0,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb4,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x86,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x61,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x61,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcf,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x8c,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x86,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x35,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x80,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x32,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x65,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0xef,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x66,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xee,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf2,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xed,0x02,0x00,0x00,
+0x53,0x03,0x00,0x00,0xf7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x67,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf6,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfa,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0x67,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0xff,0x02,0x00,0x00,
+0x01,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x66,0x03,0x00,0x00,0x82,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0xea,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x07,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0c,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x69,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x51,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x69,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0e,0x03,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x12,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x69,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0x63,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x1b,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x19,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1a,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x90,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x1f,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x22,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x22,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0x23,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x6f,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x24,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x28,0x03,0x00,0x00,0x23,0x03,0x00,0x00,
+0x24,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x03,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x20,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x13,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x31,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x20,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x35,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x36,0x03,0x00,0x00,
+0x39,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x33,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x6f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0x66,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,
+0x41,0x03,0x00,0x00,0x69,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0x43,0x03,0x00,0x00,
+0x44,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x67,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0x47,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x48,0x03,0x00,0x00,
+0x6f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xd5,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x17,0x02,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x4d,0x03,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x6f,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x22,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,0x69,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0c,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,
+0x67,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x03,0x00,0x00,0x66,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xec,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x56,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q5_k_f32_len = 13048;
+
+unsigned char matmul_id_q5_k_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x11,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x35,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x35,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x35,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x37,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x37,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x39,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd2,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x17,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x17,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x17,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x17,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x17,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x58,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x59,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x59,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x59,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5b,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x5b,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x2f,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x35,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x47,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xae,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x10,0x02,0x00,0x00,
+0x04,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x15,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x18,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x18,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x78,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x90,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xa8,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x58,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x59,0x03,0x00,0x00,0x58,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5a,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x59,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x5a,0x03,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5f,0x03,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x85,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0x86,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x92,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x86,0x03,0x00,0x00,0xcd,0x03,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x91,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x91,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x03,0x00,0x00,0x92,0x03,0x00,0x00,
+0x64,0x00,0x00,0x00,0xff,0x03,0x00,0x00,0x72,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x91,0x03,0x00,0x00,0x80,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0xcb,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x91,0x03,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xcd,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xcd,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x03,0x00,0x00,
+0xcd,0x03,0x00,0x00,0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x91,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x92,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x85,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x93,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x93,0x03,0x00,0x00,0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x93,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x93,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xad,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x94,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x94,0x03,0x00,0x00,0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xea,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xa5,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0xa5,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xa9,0x03,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x3b,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x43,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x41,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x47,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x47,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x47,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x47,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x47,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0xb0,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x43,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x23,0x01,0x00,0x00,
+0xc9,0x03,0x00,0x00,0x5a,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x23,0x01,0x00,0x00,0xc8,0x03,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0xc8,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0xc9,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x47,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x47,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x03,0x04,0x00,0x00,0x8a,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x03,0x04,0x00,0x00,0x73,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xaf,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x47,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x47,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x14,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x03,0x04,0x00,0x00,0x73,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xd0,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xea,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xea,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xa5,0x03,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0xda,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xa6,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xa6,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xad,0x03,0x00,0x00,0xf4,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x60,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x2f,0x01,0x00,0x00,0x1e,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xae,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x1b,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x26,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x1b,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xae,0x01,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0x1b,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x2f,0x01,0x00,0x00,0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xae,0x01,0x00,0x00,0x35,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x35,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x40,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x1b,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x01,0x00,0x00,0x3c,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x3c,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0x1b,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x43,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xae,0x01,0x00,0x00,
+0x44,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0x1b,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x2f,0x01,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xae,0x01,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0x1b,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x01,0x00,0x00,0x54,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x54,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0xa6,0x03,0x00,0x00,0x57,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xa9,0x03,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0xad,0x03,0x00,0x00,0x5d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x64,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0xaf,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x63,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x67,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb3,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0xb3,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x6b,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6f,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0xc5,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xb3,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xc5,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0xb3,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0xc5,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xaf,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x01,0x00,0x00,0x8e,0x02,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x91,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0xc5,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x73,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0xb3,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x97,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb4,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xb4,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x98,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xc2,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa1,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xb4,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xc2,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xb4,0x03,0x00,0x00,0xb1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xc2,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xaf,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x01,0x00,0x00,0xbd,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x90,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xbf,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xc2,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xb4,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb5,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xb5,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc7,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcf,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd3,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0xd8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xbb,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd7,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbd,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x03,0x03,0x00,0x00,
+0xde,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xbd,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xb5,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xbb,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0xb9,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0xbd,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0xbd,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x90,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x2f,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x90,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xff,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xfe,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0xbd,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0xbb,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0xb5,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0xaf,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x94,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0xa4,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1b,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x95,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x95,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1d,0x03,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x21,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1c,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x23,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x96,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x82,0x03,0x00,0x00,
+0x26,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x96,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x25,0x03,0x00,0x00,0x26,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x29,0x03,0x00,0x00,
+0x24,0x03,0x00,0x00,0x25,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x96,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x13,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,0x30,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x95,0x03,0x00,0x00,0xb1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x19,0x03,0x00,0x00,
+0x35,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x36,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x98,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x80,0x03,0x00,0x00,
+0x3e,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0x98,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x3d,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x41,0x03,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0x98,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x48,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0x92,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x4a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x48,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x91,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x51,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x51,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x7e,0x03,0x00,0x00,0x52,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x57,0x03,0x00,0x00,0x9e,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x53,0x03,0x00,0x00,
+0x52,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x57,0x03,0x00,0x00,0x52,0x03,0x00,0x00,0x53,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x52,0x03,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x5d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x5f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x03,0x00,0x00,0x60,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x61,0x03,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x65,0x03,0x00,0x00,
+0x64,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x13,0x00,0x00,0x00,0x66,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0x67,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x03,0x00,0x00,0x65,0x03,0x00,0x00,0x68,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x62,0x03,0x00,0x00,0x69,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x31,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,0x9e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x03,0x00,0x00,
+0x95,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x03,0x00,0x00,0x70,0x03,0x00,0x00,
+0x98,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x03,0x00,0x00,0x72,0x03,0x00,0x00,0x73,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x03,0x00,0x00,
+0x96,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x03,0x00,0x00,0x74,0x03,0x00,0x00,
+0x76,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x03,0x00,0x00,0x77,0x03,0x00,0x00,0x9e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x7b,0x03,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1b,0x02,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x15,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7c,0x03,0x00,0x00,0x7b,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x9e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x51,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x53,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x98,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x26,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x03,0x00,0x00,0x96,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x23,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x25,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x03,0x00,0x00,
+0x95,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x85,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x85,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_q5_k_f32_aligned_len = 13860;
+
+unsigned char matmul_id_q5_k_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xda,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x35,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x37,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x37,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x39,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x13,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x13,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x13,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x15,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x2f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x2f,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x2f,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x35,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x46,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xac,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x02,0x00,0x00,
+0x04,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x12,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x1e,0x00,0x03,0x00,0x13,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x14,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x51,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x52,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x53,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x80,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x2e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x2f,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0x30,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x30,0x03,0x00,0x00,
+0x31,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x53,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x5b,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0xa3,0x03,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xa3,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0xd5,0x03,0x00,0x00,
+0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0xa3,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0xa3,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x03,0x00,0x00,0xa3,0x03,0x00,0x00,0x70,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x69,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x69,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x83,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xea,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x7b,0x03,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x7b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x7f,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x42,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x40,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0xb0,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x23,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x23,0x01,0x00,0x00,0x9f,0x03,0x00,0x00,0x59,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x23,0x01,0x00,0x00,0x9e,0x03,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x9e,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x9f,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x46,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x23,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x46,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x14,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd9,0x03,0x00,0x00,0x89,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xd9,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xad,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x46,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x46,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x23,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x14,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xd0,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xd9,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xea,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xea,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x7b,0x03,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x7c,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x7c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x83,0x03,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x60,0x00,0x00,0x00,
+0x7c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x41,0x00,0x07,0x00,0x17,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1a,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x17,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,0x20,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x17,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,0x26,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x41,0x00,0x07,0x00,0x17,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x30,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x7f,0x03,0x00,0x00,0x33,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x83,0x03,0x00,0x00,
+0x36,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x85,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xe1,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x85,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3c,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x40,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x89,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x89,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x44,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x48,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x9b,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x50,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x89,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x9b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x89,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x9b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x85,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,0x67,0x02,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x66,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x69,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x9b,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x89,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x75,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x98,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x98,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x98,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,0x89,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x98,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x85,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,0x95,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x97,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x98,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x8b,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa3,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xab,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x91,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x91,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xaf,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x93,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x93,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb7,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbb,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x8b,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x91,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x93,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x93,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd4,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x93,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x91,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x8b,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x85,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x6b,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf3,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf7,0x02,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x58,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfb,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xff,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xfa,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x03,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x04,0x03,0x00,0x00,0x06,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0xef,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x0e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x56,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x6e,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x13,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x17,0x03,0x00,0x00,0x12,0x03,0x00,0x00,
+0x13,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x6e,0x03,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x20,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1e,0x03,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x20,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x13,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x20,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x91,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x24,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x27,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x74,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x54,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x74,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x29,0x03,0x00,0x00,0x28,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0x29,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x03,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0x25,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x33,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x13,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,
+0x36,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0x37,0x03,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x25,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x13,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x38,0x03,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,
+0x42,0x03,0x00,0x00,0x74,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x03,0x00,0x00,0x46,0x03,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x48,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x74,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x50,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x51,0x03,0x00,0x00,0x50,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x17,0x02,0x00,0x00,0x52,0x03,0x00,0x00,0x31,0x03,0x00,0x00,
+0x15,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x52,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0x74,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x14,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x11,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x13,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x03,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q5_k_f32_aligned_fp32_len = 13112;
+
+unsigned char matmul_id_q5_k_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xd3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x25,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x32,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x34,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x34,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x34,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x36,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xfb,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xfb,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xfb,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xfd,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfd,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x23,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x23,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x25,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x25,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x34,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x46,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xac,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf1,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xfa,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xfb,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x15,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x46,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x45,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x47,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x73,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x74,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x22,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x23,0x03,0x00,0x00,
+0x22,0x03,0x00,0x00,0x20,0x00,0x04,0x00,0x24,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x24,0x03,0x00,0x00,0x25,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x47,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x74,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x4f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0x50,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x50,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x50,0x03,0x00,0x00,
+0x9a,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x50,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x03,0x00,0x00,0x5c,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xce,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x98,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x98,0x03,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x98,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x98,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xce,0x03,0x00,0x00,0x9a,0x03,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x98,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5c,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x77,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x73,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x73,0x03,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x3a,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x2f,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x42,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x46,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x46,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x46,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x22,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x22,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x22,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x22,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0xaf,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x22,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x22,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x22,0x01,0x00,0x00,
+0x96,0x03,0x00,0x00,0x59,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x22,0x01,0x00,0x00,0x95,0x03,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x95,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x96,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x22,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x22,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd2,0x03,0x00,0x00,0x89,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xd2,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xad,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x22,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x46,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x22,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x14,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xd2,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x6f,0x03,0x00,0x00,0xd2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x70,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0xd9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x70,0x03,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdc,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x70,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x5c,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xe8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe6,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0x19,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x70,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xed,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x77,0x03,0x00,0x00,0x06,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0xed,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,0x18,0x02,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xac,0x01,0x00,0x00,0x21,0x02,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x20,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x21,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x70,0x03,0x00,0x00,0x24,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd8,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x73,0x03,0x00,0x00,
+0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x77,0x03,0x00,0x00,0x2a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x79,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x79,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x30,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x34,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7d,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x7d,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x38,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3c,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x37,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x8f,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x40,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x44,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x7d,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x8f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x7d,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x8f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x79,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xac,0x01,0x00,0x00,0x5b,0x02,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x5d,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x7d,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x69,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x8c,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x71,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x7e,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x8c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x7e,0x03,0x00,0x00,0x7d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x8c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x79,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xac,0x01,0x00,0x00,0x89,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x88,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x7f,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x83,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x83,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x85,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x85,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa3,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa7,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x87,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x87,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xab,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xaf,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x7f,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x85,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x83,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x87,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x87,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc8,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x87,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x85,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x83,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x7f,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x79,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x30,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x5f,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe7,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xeb,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xed,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x4c,0x03,0x00,0x00,0xf0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x60,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xef,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf3,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x60,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0x5f,0x03,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x02,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x05,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x62,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x4a,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x62,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x07,0x03,0x00,0x00,
+0x08,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0b,0x03,0x00,0x00,0x06,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x03,0x03,0x00,0x00,
+0x62,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0x5c,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x14,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x12,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0x14,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x13,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x90,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x1b,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1b,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x14,0x03,0x00,0x00,0x48,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x21,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1d,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x21,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x1d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x03,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x19,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x27,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x13,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x19,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x32,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,0x33,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,
+0x34,0x03,0x00,0x00,0xfb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x36,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x62,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x60,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x03,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x41,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x44,0x03,0x00,0x00,0xd5,0x00,0x00,0x00,0x43,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x44,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x15,0x02,0x00,0x00,
+0x46,0x03,0x00,0x00,0x25,0x03,0x00,0x00,0x15,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x46,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x03,0x00,0x00,0x68,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1d,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x62,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x05,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x07,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x60,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xed,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q5_k_f32_fp32_len = 12928;
+
+unsigned char matmul_id_q6_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x91,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x39,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x39,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x39,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x3b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3d,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x94,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x95,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc0,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xc1,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xc1,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc3,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xed,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xee,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xee,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xee,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf0,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf0,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x15,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x39,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x4c,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x53,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xb6,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc0,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc2,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0e,0x02,0x00,0x00,0x38,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x25,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x3c,0x02,0x00,0x00,0x38,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3d,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xed,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xee,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xef,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xef,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x3d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x1a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x60,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x24,0x03,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x25,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x90,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x24,0x03,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x24,0x03,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x90,0x03,0x00,0x00,0x60,0x03,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1a,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x26,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x26,0x03,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x26,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x45,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x53,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x33,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x53,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x33,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x72,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x53,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x33,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x53,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x38,0x03,0x00,0x00,
+0x98,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x39,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x39,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x25,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xae,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xac,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x40,0x03,0x00,0x00,0xcc,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xdb,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x39,0x03,0x00,0x00,0xec,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9e,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x3c,0x03,0x00,0x00,
+0xef,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x40,0x03,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x42,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xf9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x42,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf8,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfc,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x46,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x46,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x00,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x04,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x58,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x28,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x58,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x46,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x58,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x46,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x58,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x42,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x71,0x01,0x00,0x00,0x23,0x02,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x22,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x24,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x26,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x58,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x01,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x46,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x47,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x55,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3a,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x47,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0x55,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x47,0x03,0x00,0x00,0x46,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x55,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x42,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x71,0x01,0x00,0x00,0x52,0x02,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x51,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x25,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x54,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x55,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x36,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x47,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x48,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x48,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x60,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x68,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6c,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x70,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x50,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x50,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x78,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x73,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x48,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x4c,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x50,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x50,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x25,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x89,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x25,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x93,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x50,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x48,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x42,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x28,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0xb3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x28,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb6,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x17,0x03,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xba,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbe,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0x46,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x15,0x03,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd2,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd6,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xdf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdd,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x90,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x13,0x03,0x00,0x00,0xe7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0xff,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x31,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x05,0x03,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x07,0x03,0x00,0x00,0x08,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x29,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,0x31,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xdb,0x01,0x00,0x00,0x11,0x03,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x11,0x03,0x00,0x00,0x10,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x31,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x29,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1a,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_q6_k_f32_len = 12216;
+
+unsigned char matmul_id_q6_k_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xba,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x39,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x39,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x39,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x3b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3d,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x94,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x95,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xda,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xda,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xda,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xda,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xda,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xdc,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1b,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x1c,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1c,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1e,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1e,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x15,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x39,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x4c,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x53,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xd2,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,
+0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xdb,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xde,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x3c,0x02,0x00,0x00,
+0x38,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3d,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x53,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,
+0x38,0x01,0x00,0x00,0x69,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6b,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x1b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x1c,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x1d,0x03,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x3d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x6b,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x48,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x8b,0x03,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x49,0x03,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x52,0x03,0x00,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8b,0x03,0x00,0x00,
+0x53,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,
+0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x89,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x89,0x03,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x52,0x03,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x89,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x89,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x52,0x03,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x8b,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8b,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x8b,0x03,0x00,0x00,0x70,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x89,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x52,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x53,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x48,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x54,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x66,0x03,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x6a,0x03,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x45,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x53,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x33,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x53,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x33,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x36,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x71,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x72,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x53,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x33,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x53,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x33,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x66,0x03,0x00,0x00,0x98,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x9d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x67,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa2,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x67,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x6e,0x03,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xde,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xde,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xde,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x71,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xf0,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xde,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf8,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xde,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xff,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xde,0x01,0x00,0x00,
+0x04,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x06,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x71,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x02,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x07,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,0x09,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xde,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,
+0x0f,0x02,0x00,0x00,0xd4,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x11,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0xde,0x01,0x00,0x00,0x14,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,0x17,0x02,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x67,0x03,0x00,0x00,
+0x1a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x20,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0xce,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x70,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x74,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x74,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x32,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x34,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x86,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3a,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x74,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x74,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x70,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,0x51,0x02,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x50,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x52,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x53,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x54,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x86,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x74,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x75,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x75,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x60,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x83,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0x83,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x68,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x75,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x83,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x75,0x03,0x00,0x00,0x74,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x83,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x70,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x71,0x01,0x00,0x00,0x80,0x02,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x7f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x81,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x53,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x82,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x83,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x75,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x76,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x76,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8a,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8e,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x7a,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x96,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x7c,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9e,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x76,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x7e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x53,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x53,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc1,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x7c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x98,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x93,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x7a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x76,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x70,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x55,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x56,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x57,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x45,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x57,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x57,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x56,0x03,0x00,0x00,0x74,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x59,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x43,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x59,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x00,0x03,0x00,0x00,
+0x01,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x04,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x59,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0x53,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x0d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0b,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x0d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x91,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x11,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x14,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x41,0x03,0x00,0x00,0x15,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x5f,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x16,0x03,0x00,0x00,0x15,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1a,0x03,0x00,0x00,0x15,0x03,0x00,0x00,
+0x16,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x03,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x12,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x20,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x13,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x23,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0x21,0x03,0x00,0x00,0x24,0x03,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x12,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x28,0x03,0x00,0x00,0x27,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x28,0x03,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x25,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x2d,0x03,0x00,0x00,0xf4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x5f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0x56,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x33,0x03,0x00,0x00,0x59,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x35,0x03,0x00,0x00,
+0x36,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0x57,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x37,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x5f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xde,0x01,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0x15,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x3f,0x03,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x14,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x16,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x01,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x01,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x59,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfe,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x00,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x57,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x56,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q6_k_f32_aligned_len = 13012;
+
+unsigned char matmul_id_q6_k_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x91,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x92,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd6,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xd7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xd7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xd7,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd9,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf2,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xf3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xf3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xf3,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf5,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf5,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x15,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x16,0x00,0x03,0x00,
+0x39,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x40,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x46,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4e,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x54,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x70,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd0,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xd5,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd6,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xdb,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x16,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x43,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x44,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xf2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xf3,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf4,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf4,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x44,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x1f,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0x20,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x20,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x20,0x03,0x00,0x00,0x62,0x03,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x64,0x00,0x00,0x00,0x90,0x03,0x00,0x00,0x72,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x80,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x62,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x62,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x90,0x03,0x00,0x00,
+0x62,0x03,0x00,0x00,0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x2c,0x03,0x00,0x00,0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x41,0x03,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x46,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x54,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x34,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x54,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x34,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x71,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x54,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x34,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x54,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x34,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x70,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x3e,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9c,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa0,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x45,0x03,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x70,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xde,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0xdb,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x70,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe4,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0xdb,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x70,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xea,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0xdb,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x70,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xf1,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x3e,0x03,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x41,0x03,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x45,0x03,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x47,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x00,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x31,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x08,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x07,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x47,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x70,0x01,0x00,0x00,0x2b,0x02,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x2d,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x5d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x33,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x4c,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x35,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x39,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0x5a,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x41,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x4c,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x47,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x70,0x01,0x00,0x00,0x59,0x02,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x58,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x5b,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5a,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x33,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x63,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x67,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x51,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6b,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6f,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x53,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x53,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x73,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x55,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x53,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x55,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x55,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x55,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x53,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x47,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb7,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x1c,0x03,0x00,0x00,0xc0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbf,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x1a,0x03,0x00,0x00,0xd8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0x30,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd7,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x30,0x03,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x91,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xeb,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x18,0x03,0x00,0x00,0xec,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x36,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf1,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x13,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0xff,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,0x03,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x04,0x03,0x00,0x00,0xcb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x06,0x03,0x00,0x00,
+0x36,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x10,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x11,0x03,0x00,0x00,
+0x36,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x14,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x14,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xdb,0x01,0x00,0x00,
+0x16,0x03,0x00,0x00,0xf5,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x16,0x03,0x00,0x00,
+0x15,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x36,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xeb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x30,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1f,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q6_k_f32_aligned_fp32_len = 12280;
+
+unsigned char matmul_id_q6_k_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x8a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x39,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x39,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x39,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x3b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x92,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xbf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xbf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xbf,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc1,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc1,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe6,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xe7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xe7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xe7,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe9,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe9,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x15,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x16,0x00,0x03,0x00,0x38,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x39,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x3b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x45,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x4c,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x53,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x70,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xbe,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xc0,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0a,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x37,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x38,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xe6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xe7,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe8,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xe8,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x38,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x13,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x59,0x03,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x89,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x57,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x57,0x03,0x00,0x00,
+0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x57,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x57,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x59,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x89,0x03,0x00,0x00,0x59,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x57,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x13,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0xac,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x35,0x03,0x00,0x00,0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x3f,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x45,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x36,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x53,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x53,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x71,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x53,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x33,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x53,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x33,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x70,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x31,0x03,0x00,0x00,
+0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x32,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x32,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x1e,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xac,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x39,0x03,0x00,0x00,0xca,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xd9,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x70,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xdc,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x70,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe5,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x32,0x03,0x00,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0x35,0x03,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x39,0x03,0x00,0x00,0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x99,0x02,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x3b,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf8,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x25,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x00,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x02,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x51,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x23,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x51,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x04,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x08,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x51,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x51,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x70,0x01,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x4e,0x01,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x51,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x3f,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x53,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x40,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x29,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2d,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x31,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x35,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x30,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x40,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x40,0x03,0x00,0x00,
+0x41,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x70,0x01,0x00,0x00,
+0x4d,0x02,0x00,0x00,0xb6,0x01,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x40,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x41,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x41,0x03,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x57,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5b,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x45,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x45,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x63,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x47,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6b,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x49,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6f,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x73,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x41,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x47,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x45,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x49,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x49,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xcf,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x8c,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x49,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x47,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x45,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x58,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x41,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x57,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa3,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x21,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0xac,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x21,0x03,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xab,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xaf,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x10,0x03,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x22,0x03,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb7,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x22,0x03,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x21,0x03,0x00,0x00,0x41,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x24,0x03,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd6,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x90,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x0c,0x03,0x00,0x00,0xe0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe1,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8b,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x21,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x24,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x01,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x22,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x02,0x03,0x00,0x00,
+0x04,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x05,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x08,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd9,0x01,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x15,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0a,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x24,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x22,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x21,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x13,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x13,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_id_q6_k_f32_fp32_len = 12096;
+
+unsigned char matmul_id_q8_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x3f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x10,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x14,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x40,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x6c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x6c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x6c,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6e,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x99,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x9a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x9a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x9a,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9c,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9c,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x6b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x78,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x0c,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x1e,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x61,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x62,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x6b,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x6d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x6d,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xba,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xe8,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x99,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x9a,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x9b,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xe9,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xc6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0xd3,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xac,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x16,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x1f,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0x43,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4d,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x59,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xee,0x02,0x00,0x00,
+0x77,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x87,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x59,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x59,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x59,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x98,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x47,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xea,0x02,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0xee,0x02,0x00,0x00,0x9e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x4c,0x02,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x06,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb8,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x06,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x06,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd1,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x06,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x04,0x02,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xde,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x02,0x02,0x00,0x00,0xe1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x03,0x03,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe2,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe6,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x03,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x03,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xd1,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0xea,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x00,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x03,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x4a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x08,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x10,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x14,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x18,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1c,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x17,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x24,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd1,0x01,0x00,0x00,0x34,0x02,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x33,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,
+0x35,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd1,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,
+0xea,0x01,0x00,0x00,0x28,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3f,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x20,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x18,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x62,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x66,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6a,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x90,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x98,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x93,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x87,0x01,0x00,0x00,0xbd,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x92,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q8_0_f32_len = 11060;
+
+unsigned char matmul_id_q8_0_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x6a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x13,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x13,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x15,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x40,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x41,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x87,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x87,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x89,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xca,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xca,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xca,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xcc,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xcc,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x14,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x20,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x32,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x7f,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x80,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x80,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x84,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x18,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x88,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xea,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x01,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x18,0x02,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x17,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x19,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xca,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcb,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf6,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x20,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x3b,0x03,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x6b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x03,0x03,0x00,0x00,
+0x64,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x72,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x77,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x80,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x50,0x00,0x05,0x00,
+0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x70,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0xce,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0xad,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x16,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x16,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x17,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x20,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x20,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x1b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xd0,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x39,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x3f,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x16,0x03,0x00,0x00,0x44,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x17,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x17,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x63,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x8b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x8b,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbd,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0x17,0x03,0x00,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x48,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x1e,0x03,0x00,0x00,0xce,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x7c,0x02,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x20,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x24,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x04,0x02,0x00,0x00,0xe3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x36,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe8,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x24,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x36,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x24,0x03,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x36,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x20,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x00,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x01,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x36,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x34,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x33,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x12,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x16,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x25,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x33,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x25,0x03,0x00,0x00,
+0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x33,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x20,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x38,0x01,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x81,0x01,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x01,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x33,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x26,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x38,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3c,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x40,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x44,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x54,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x26,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x01,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0xec,0x01,0x00,0x00,
+0x63,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x65,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x01,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x6c,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x6f,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x26,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x20,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x92,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x96,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xae,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x03,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xbb,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xba,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc3,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x8b,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x97,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x97,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q8_0_f32_aligned_len = 11888;
+
+unsigned char matmul_id_q8_0_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0xa2,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x13,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x13,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x15,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x15,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x83,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x84,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x84,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x84,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9f,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xa0,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xa0,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x6c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x00,0x08,0x00,0x00,0x1c,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x1e,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x1b,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x7e,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7e,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x83,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x85,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x85,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc3,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x9f,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xa0,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xcc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x11,0x03,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x6b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x64,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x72,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x70,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xad,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x17,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x20,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x20,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x37,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0xec,0x02,0x00,0x00,0x42,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x46,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x48,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4c,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0x61,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0xed,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x91,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x97,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x46,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x52,0x02,0x00,0x00,0xae,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xad,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb1,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc1,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x0c,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0x09,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xee,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x09,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xfa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x09,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x05,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd9,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x08,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xea,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x50,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x14,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x16,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x20,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x18,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1c,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x20,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x24,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x26,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2c,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x27,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xd0,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x45,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x26,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x20,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x18,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xb5,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x68,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6c,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x70,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x82,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6c,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x84,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x88,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xae,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x91,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x91,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6c,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9e,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x51,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x13,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x88,0x01,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x15,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xc3,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q8_0_f32_aligned_fp32_len = 11140;
+
+unsigned char matmul_id_q8_0_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x38,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x16,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x10,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x95,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x10,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x14,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x69,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x6a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x6a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x92,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x93,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x93,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x93,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x95,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x95,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0f,0x00,0x11,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x6b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x11,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x36,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x5f,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x60,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x60,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x69,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x85,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xb6,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x92,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x93,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x94,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x94,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xbf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0x65,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x64,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x37,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x20,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x76,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x50,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x07,0x03,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xac,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x16,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x15,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x1f,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x37,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x36,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,0x41,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x47,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x55,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x56,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x5f,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x75,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x13,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x85,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x91,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x57,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x97,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x45,0x02,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa0,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xac,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xff,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xff,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xff,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xff,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xee,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd9,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xee,0x02,0x00,0x00,0xed,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x4a,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0xee,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x43,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x03,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x07,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x42,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x17,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x20,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1f,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0xb8,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0xe5,0x01,0x00,0x00,0x23,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xcf,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x13,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x57,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5b,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x56,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x42,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x63,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x46,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xed,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x4a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x20,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xae,0x00,0x05,0x00,
+0x6b,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x84,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x83,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x90,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x20,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0x6b,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8d,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x91,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x13,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x51,0x00,0x05,0x00,0x8b,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x13,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x85,0x01,0x00,0x00,0xb6,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb6,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_id_q8_0_f32_fp32_len = 10940;
+
+unsigned char matmul_q2_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x4e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x80,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x17,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x1d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x66,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x94,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x94,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x94,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x96,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x96,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc7,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x13,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x19,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x56,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x93,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x95,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x95,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa1,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd5,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xec,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x03,0x02,0x00,0x00,0x19,0x01,0x00,0x00,0x02,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x04,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xc6,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xc7,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x47,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd6,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x22,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x22,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x22,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x70,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x33,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x33,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x33,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5e,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x02,0x03,0x00,0x00,0x69,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x03,0x03,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6f,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x73,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x03,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7c,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x84,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x0a,0x03,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x86,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x70,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x03,0x03,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x06,0x03,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x67,0x02,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x10,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcb,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x22,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xce,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x10,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x22,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x10,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x22,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xed,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x22,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x10,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x11,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x01,0x02,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0x19,0x02,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x18,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x1a,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xec,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x1f,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x21,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x65,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x23,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x27,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x16,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2b,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2f,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x33,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3f,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x18,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x16,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xec,0x01,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xd7,0x01,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x50,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xec,0x01,0x00,0x00,0x56,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x57,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x34,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x33,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x16,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x0c,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x88,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8c,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x94,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xac,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb0,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb4,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xbc,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xba,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xc5,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xa1,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe4,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q2_k_f32_len = 11220;
+
+unsigned char matmul_q2_k_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x67,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x17,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x1d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x66,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x92,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x93,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x93,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x93,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x93,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x93,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x95,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x95,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe7,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xe8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xe8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xe8,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xea,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xea,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x13,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x19,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x56,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x90,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x91,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x94,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x94,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x24,0x02,0x00,0x00,
+0x19,0x01,0x00,0x00,0x23,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x25,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xe7,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xe8,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe9,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xe9,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0x66,0x03,0x00,0x00,0x47,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x25,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x37,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x66,0x03,0x00,0x00,0x70,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x33,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5e,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5d,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x23,0x03,0x00,0x00,0x69,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x24,0x03,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x73,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x7c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5d,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x97,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5d,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x97,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5d,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc8,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x97,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x24,0x03,0x00,0x00,0xd3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x27,0x03,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x2b,0x03,0x00,0x00,0xda,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x88,0x02,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x2d,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x31,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x43,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x31,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x43,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x43,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x58,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x43,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x32,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x40,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x32,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x40,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x32,0x03,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x40,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x8d,0x01,0x00,0x00,0x39,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x40,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x33,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x44,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x48,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x37,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x50,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x39,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x54,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x58,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x53,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x60,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x33,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x39,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x37,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x3b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x71,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7b,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x3b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x55,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x39,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x54,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x37,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x33,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x13,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0x14,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xad,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xb2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x15,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb1,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb5,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x15,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x17,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0xca,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x17,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcd,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x19,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd1,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd5,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x19,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xdd,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x17,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xe6,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x17,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x19,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x14,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0x15,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xff,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x19,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0xca,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x03,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x97,0x01,0x00,0x00,0x05,0x03,0x00,0x00,
+0xea,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x05,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x19,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x17,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x15,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q2_k_f32_aligned_len = 11800;
+
+unsigned char matmul_q2_k_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x3e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x78,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1c,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x1e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x64,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x90,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x91,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x91,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x91,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x93,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbe,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xbf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbf,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xbf,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x14,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x16,0x00,0x03,0x00,
+0x1a,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x1c,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x58,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x58,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8a,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x8f,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x92,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x92,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x95,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xfd,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xbe,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xbf,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc0,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x48,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0xde,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x23,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x23,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x23,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x38,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x70,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x34,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x34,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x34,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x5e,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5d,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0x68,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x72,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x02,0x03,0x00,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x95,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x95,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x95,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x95,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x6c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x02,0x03,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x5f,0x02,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x04,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x08,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xce,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x08,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x08,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x04,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe7,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x08,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x19,0x02,0x00,0x00,0xf0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0x09,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xef,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf3,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x17,0x02,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x17,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfb,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x07,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5d,0x01,0x00,0x00,0x13,0x02,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x03,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x17,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x21,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x29,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x10,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x31,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x33,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x35,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x39,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x10,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x12,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x12,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0xd2,0x01,0x00,0x00,0x48,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x12,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x35,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x26,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x23,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xba,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x84,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x88,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8c,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa4,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xac,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xb4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xee,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xbd,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xee,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x95,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xdc,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xee,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q2_k_f32_aligned_fp32_len = 11068;
+
+unsigned char matmul_q2_k_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x47,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x79,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x17,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x64,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x91,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x92,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x92,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x92,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x94,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x94,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbf,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc0,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xc0,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc2,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc2,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x13,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x16,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x16,0x00,0x03,0x00,0x19,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x1b,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x56,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x57,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x87,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x91,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x93,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x9f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xff,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xbf,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc0,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0x46,0x03,0x00,0x00,0x47,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd2,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xff,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x22,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x13,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x13,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x13,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x46,0x03,0x00,0x00,
+0x70,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x33,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x33,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x33,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5d,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x67,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x6d,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x71,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7a,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x84,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x82,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x03,0x03,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x9f,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x84,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5c,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xab,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x84,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x84,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0xae,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xff,0x02,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x03,0x03,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x60,0x02,0x00,0x00,0xbc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0x05,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbf,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x09,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcb,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0xca,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x09,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x09,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x05,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5c,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe8,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x09,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x1a,0x02,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x0a,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x18,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x18,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf8,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5c,0x01,0x00,0x00,0x14,0x02,0x00,0x00,0x89,0x01,0x00,0x00,
+0x13,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x16,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x18,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x11,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x32,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x34,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3a,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x13,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x13,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x49,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x53,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x13,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x26,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x81,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x85,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x87,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8d,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xad,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xb5,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xbe,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x9f,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaa,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x82,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q2_k_f32_fp32_len = 11100;
+
+unsigned char matmul_q3_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xa7,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x49,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x36,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x38,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x13,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x14,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x14,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x16,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x00,0x03,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x46,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x47,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x47,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x47,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x49,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x16,0x00,0x03,0x00,
+0x35,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x36,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x39,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x9c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa8,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa9,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xa9,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc5,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,0x09,0x02,0x00,0x00,
+0x35,0x01,0x00,0x00,0x08,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x13,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x14,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x21,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x51,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x35,0x01,0x00,0x00,
+0x54,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x56,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x35,0x01,0x00,0x00,
+0x82,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x84,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x46,0x03,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x47,0x03,0x00,0x00,
+0x46,0x03,0x00,0x00,0x20,0x00,0x04,0x00,0x48,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x48,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x84,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x82,0x03,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x82,0x03,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x2f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x50,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x55,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x52,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x54,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x6e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6d,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x15,0x00,0x00,0x00,
+0xa4,0x03,0x00,0x00,0x81,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x15,0x00,0x00,0x00,0xa5,0x03,0x00,0x00,
+0x68,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0xa4,0x03,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x15,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0xa5,0x03,0x00,0x00,0x55,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0xa6,0x03,0x00,0x00,0x41,0x00,0x07,0x00,0x9c,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x97,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x15,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xc6,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x97,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x15,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe4,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x7e,0x03,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x7f,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x7f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xfe,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,0x79,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x03,0x02,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x06,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x04,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x7e,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x86,0x03,0x00,0x00,0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x21,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x24,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0x25,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x7f,0x03,0x00,0x00,0x32,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x82,0x03,0x00,0x00,
+0x36,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0x39,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x88,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x88,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x43,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8c,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x9e,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x53,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x8c,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x9e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x8c,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x9e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x88,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc5,0x01,0x00,0x00,0x6a,0x02,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x69,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x6c,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x6d,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x9e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x8d,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x79,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0x9b,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x8d,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x9b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x8d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x9b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x88,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc5,0x01,0x00,0x00,0x99,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x6c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x9b,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x8d,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x92,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x92,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xab,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xaf,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x94,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x94,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb7,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x96,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x96,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbf,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xba,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x94,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x92,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x96,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x96,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x6c,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x6c,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc3,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xda,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x96,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x94,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x92,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x88,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0x96,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x01,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x09,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x6f,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x08,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0c,0x03,0x00,0x00,
+0x07,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x07,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x0e,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0e,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,0x11,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x70,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x10,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x14,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x10,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0x70,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0xef,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x19,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x6f,0x03,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x03,0x00,0x00,0xf5,0x02,0x00,0x00,0x20,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x21,0x03,0x00,0x00,
+0x23,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x26,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x72,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x68,0x03,0x00,0x00,0x29,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x72,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x28,0x03,0x00,0x00,0x29,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2c,0x03,0x00,0x00,0x27,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x74,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x66,0x03,0x00,0x00,0x31,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x74,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x30,0x03,0x00,0x00,
+0x31,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x34,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,0x30,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x74,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x37,0x03,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x3c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3a,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x3c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x24,0x03,0x00,0x00,0x72,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x41,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x42,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x45,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x43,0x03,0x00,0x00,0x44,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x24,0x03,0x00,0x00,0x72,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,0x14,0x00,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x50,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x51,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x52,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x54,0x03,0x00,0x00,
+0x74,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x6f,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x58,0x03,0x00,0x00,0x72,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x70,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x5c,0x03,0x00,0x00,0x5e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x74,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x62,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x61,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x63,0x03,0x00,0x00,
+0x62,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x21,0x02,0x00,0x00,
+0x64,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x35,0x00,0x00,0x00,
+0x56,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x64,0x03,0x00,0x00,
+0x63,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x45,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x31,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x03,0x00,0x00,
+0x74,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x30,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x29,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x03,0x00,0x00,0x72,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x26,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0x70,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0e,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x09,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x6f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q3_k_f32_len = 13124;
+
+unsigned char matmul_q3_k_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xc5,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x21,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x36,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x38,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x12,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x13,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x13,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x13,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x13,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x13,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x15,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x15,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x21,0x03,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x67,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x68,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x68,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x68,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6a,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6a,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x16,0x00,0x03,0x00,
+0x35,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x36,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x39,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x9c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa8,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa9,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xa9,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc5,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,
+0x35,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0c,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x10,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,
+0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x13,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x14,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x76,0x02,0x00,0x00,0x35,0x01,0x00,0x00,0x75,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa4,0x02,0x00,0x00,0x35,0x01,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x67,0x03,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x68,0x03,0x00,0x00,0x67,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0x69,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x68,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x69,0x03,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x8e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x03,0x00,0x00,
+0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x8f,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x9f,0x03,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xa3,0x03,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x2f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2e,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x98,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x55,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x52,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x54,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x87,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x98,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x6e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6b,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x98,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x82,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x92,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x98,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x15,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,0x81,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x55,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x15,0x00,0x00,0x00,
+0xc3,0x03,0x00,0x00,0x68,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0xc2,0x03,0x00,0x00,0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x15,0x00,0x00,0x00,0xc4,0x03,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xc3,0x03,0x00,0x00,
+0x55,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0xc4,0x03,0x00,0x00,0x41,0x00,0x07,0x00,
+0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x98,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x15,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc6,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x98,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x15,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x9f,0x03,0x00,0x00,0xe9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0xa0,0x03,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf3,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xa0,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xa7,0x03,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x04,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x17,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0x22,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x17,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc5,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x29,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0x17,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,
+0x31,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x31,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x14,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x17,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0x38,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0x17,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc5,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x40,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0x17,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x47,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,
+0x48,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0x17,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0x50,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0xa0,0x03,0x00,0x00,
+0x53,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0xa3,0x03,0x00,0x00,0x57,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xa7,0x03,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x08,0x03,0x00,0x00,0x61,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0xa9,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x60,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x64,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xad,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0xad,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x68,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbf,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0xbf,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x74,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xad,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xbf,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0xad,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0xbf,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0xa9,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0x8b,0x02,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x8a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0xbf,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0xad,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xae,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0xae,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x96,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9a,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbc,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xbc,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xae,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xbc,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xae,0x03,0x00,0x00,0xae,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xbc,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xa9,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc5,0x01,0x00,0x00,0xba,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8d,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbc,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xbc,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x97,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xae,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x06,0x03,0x00,0x00,0xc5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc8,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb3,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xb3,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd0,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xb5,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd4,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd8,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xda,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0xdb,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xb7,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdc,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe0,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xb5,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0xb3,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xb7,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xb7,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x8d,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x8d,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xfb,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xb7,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xda,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0xb5,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0xb3,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0xa9,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x8f,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x97,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x14,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x0f,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x48,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x21,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x23,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x20,0x03,0x00,0x00,
+0x23,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x24,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x27,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x27,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x90,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x90,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x29,0x03,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2d,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x29,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x28,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x91,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x8b,0x03,0x00,0x00,
+0x32,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x35,0x03,0x00,0x00,0x91,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x31,0x03,0x00,0x00,0x32,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x35,0x03,0x00,0x00,
+0x30,0x03,0x00,0x00,0x31,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x30,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0x91,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x10,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x03,0x00,0x00,
+0x90,0x03,0x00,0x00,0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x16,0x03,0x00,0x00,
+0x41,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x03,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x42,0x03,0x00,0x00,0x44,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x47,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x93,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x89,0x03,0x00,0x00,
+0x4a,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x93,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x49,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4d,0x03,0x00,0x00,
+0x48,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x95,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x48,0x03,0x00,0x00,0x87,0x03,0x00,0x00,0x52,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x55,0x03,0x00,0x00,
+0x95,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x51,0x03,0x00,0x00,0x52,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x55,0x03,0x00,0x00,0x50,0x03,0x00,0x00,
+0x51,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x03,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x95,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,0x58,0x03,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x5d,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5b,0x03,0x00,0x00,
+0x5c,0x03,0x00,0x00,0x5d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x45,0x03,0x00,0x00,0x93,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x61,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x61,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x63,0x03,0x00,0x00,
+0x60,0x03,0x00,0x00,0x62,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x5d,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x64,0x03,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x50,0x03,0x00,0x00,0x63,0x03,0x00,0x00,
+0x5c,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x66,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x64,0x03,0x00,0x00,
+0x65,0x03,0x00,0x00,0x66,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x45,0x03,0x00,0x00,0x93,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x70,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x71,0x03,0x00,0x00,0x70,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x03,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x71,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x03,0x00,0x00,0x25,0x03,0x00,0x00,
+0x72,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x03,0x00,0x00,0x73,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x03,0x00,0x00,
+0x75,0x03,0x00,0x00,0x95,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0x90,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x03,0x00,0x00,0x79,0x03,0x00,0x00,0x93,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x03,0x00,0x00,
+0x7b,0x03,0x00,0x00,0x7c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,0x91,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x7d,0x03,0x00,0x00,0x7f,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x03,0x00,0x00,
+0x80,0x03,0x00,0x00,0x95,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x83,0x03,0x00,0x00,0xca,0x00,0x00,0x00,
+0x82,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x03,0x00,0x00,0x83,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x17,0x02,0x00,0x00,0x85,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x35,0x00,0x00,0x00,0x77,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x85,0x03,0x00,0x00,0x84,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x52,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x52,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x03,0x00,0x00,0x95,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x51,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x03,0x00,0x00,0x93,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x32,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x03,0x00,0x00,
+0x91,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x90,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x27,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q3_k_f32_aligned_len = 13704;
+
+unsigned char matmul_q3_k_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x9c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x41,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x36,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x38,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe4,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x10,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x12,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf8,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x3f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x3f,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x41,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x41,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x35,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x36,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x39,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa9,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xa9,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x09,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x04,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0e,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x50,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x51,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x3e,0x03,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x3f,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x40,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x40,0x03,0x00,0x00,0x41,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x46,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x51,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x65,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x65,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x65,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x65,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x66,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x76,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x76,0x03,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x76,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x98,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x50,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x55,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x52,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x54,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x87,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x98,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x6e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6d,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x98,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x92,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x98,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x15,0x00,0x00,0x00,
+0x99,0x03,0x00,0x00,0x81,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x15,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,
+0x68,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x99,0x03,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x15,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x9a,0x03,0x00,0x00,0x55,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x9b,0x03,0x00,0x00,0x41,0x00,0x07,0x00,0x9c,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x98,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x15,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x98,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x15,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x76,0x03,0x00,0x00,0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x77,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x77,0x03,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x77,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x7e,0x03,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x02,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x41,0x00,0x07,0x00,0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc4,0x01,0x00,0x00,0x17,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x17,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x14,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc4,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x1d,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x14,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc4,0x01,0x00,0x00,0x23,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x23,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x41,0x00,0x07,0x00,0x14,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x25,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc4,0x01,0x00,0x00,0x2a,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x2a,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x77,0x03,0x00,0x00,0x2d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x31,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,0x34,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x80,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3a,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3e,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x84,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x84,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x46,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x96,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x96,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4e,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x84,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x96,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x84,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x96,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x80,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc4,0x01,0x00,0x00,0x65,0x02,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x64,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x67,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x96,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x43,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x84,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x85,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x85,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x73,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x93,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x93,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0x85,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x93,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x85,0x03,0x00,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x93,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x80,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc4,0x01,0x00,0x00,0x93,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x95,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x93,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x85,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x86,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa1,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa9,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xad,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb1,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd2,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x8e,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x8c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0x86,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x80,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x66,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x97,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x67,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x00,0x03,0x00,0x00,
+0x01,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x04,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x62,0x03,0x00,0x00,
+0x09,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x68,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x08,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0c,0x03,0x00,0x00,
+0x07,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x07,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x68,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0x67,0x03,0x00,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0xed,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x19,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x60,0x03,0x00,0x00,
+0x21,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x24,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x20,0x03,0x00,0x00,0x21,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x24,0x03,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x20,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x26,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x5e,0x03,0x00,0x00,0x29,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x28,0x03,0x00,0x00,0x29,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2c,0x03,0x00,0x00,0x27,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x14,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x34,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x03,0x00,0x00,
+0x33,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x33,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x38,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x37,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x34,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x32,0x03,0x00,0x00,0x27,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x33,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x3d,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3b,0x03,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x47,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0x46,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x47,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0x48,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x49,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x03,0x00,0x00,0x67,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0x50,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x52,0x03,0x00,0x00,0x53,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x68,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x03,0x00,0x00,0x54,0x03,0x00,0x00,0x56,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,
+0x57,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0xca,0x00,0x00,0x00,
+0x59,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x5a,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x14,0x02,0x00,0x00,0x5c,0x03,0x00,0x00,0x41,0x03,0x00,0x00,
+0x35,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x5c,0x03,0x00,0x00,0x5b,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x29,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x26,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1e,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x20,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x09,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x01,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x01,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0x67,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q3_k_f32_aligned_fp32_len = 12972;
+
+unsigned char matmul_q3_k_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xa0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x09,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x42,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x36,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x36,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x38,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe4,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x12,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x14,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x14,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf9,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x40,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x35,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x36,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x39,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa9,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xa9,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x07,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x08,0x02,0x00,0x00,0x04,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x08,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x11,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x51,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x51,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x52,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x7e,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x3f,0x03,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x40,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0x41,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x41,0x03,0x00,0x00,
+0x42,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x52,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x66,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x66,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x66,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x03,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x77,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0x77,0x03,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x77,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x7b,0x03,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x2f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x52,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x54,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x69,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x6e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6b,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6d,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x82,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x15,0x00,0x00,0x00,0x9d,0x03,0x00,0x00,
+0x81,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x15,0x00,0x00,0x00,0x9e,0x03,0x00,0x00,0x68,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x9d,0x03,0x00,0x00,0x6e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x15,0x00,0x00,0x00,
+0x9f,0x03,0x00,0x00,0x4f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x9e,0x03,0x00,0x00,0x55,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9f,0x03,0x00,0x00,
+0x41,0x00,0x07,0x00,0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3e,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x15,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc5,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3e,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x15,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc4,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe2,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x77,0x03,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x78,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x78,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x78,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xfc,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x67,0x03,0x00,0x00,0x79,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x04,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x02,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x7e,0x00,0x00,0x00,0x78,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x7f,0x03,0x00,0x00,0x1b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1f,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc4,0x01,0x00,0x00,0x22,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x22,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x78,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc4,0x01,0x00,0x00,0x2b,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x2b,0x02,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x78,0x03,0x00,0x00,0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x7b,0x03,0x00,0x00,0x32,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x7f,0x03,0x00,0x00,0x35,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x81,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x81,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x85,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x85,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x43,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x47,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x97,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x97,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4f,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x85,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x97,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x85,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x97,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x81,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00,
+0x66,0x02,0x00,0x00,0xaa,0x01,0x00,0x00,0x65,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x68,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x97,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x85,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x43,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x86,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x74,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x94,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x94,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x78,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7c,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x86,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x94,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x86,0x03,0x00,0x00,
+0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x94,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x81,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xc4,0x01,0x00,0x00,
+0x94,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x94,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x86,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x87,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x87,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9e,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x8b,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa6,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xaa,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x8d,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xae,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x8f,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb6,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xba,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x87,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x8b,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc3,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd3,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x8f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x8d,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x8b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0x87,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x81,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x96,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xed,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x65,0x03,0x00,0x00,
+0x02,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x68,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x01,0x03,0x00,0x00,0x02,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x05,0x03,0x00,0x00,
+0x00,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x07,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x63,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x69,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x09,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0d,0x03,0x00,0x00,0x08,0x03,0x00,0x00,
+0x09,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0x69,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x12,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x68,0x03,0x00,0x00,
+0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0xee,0x02,0x00,0x00,0x19,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x1c,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1f,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x61,0x03,0x00,0x00,0x22,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0x6b,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x21,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x25,0x03,0x00,0x00,0x20,0x03,0x00,0x00,
+0x21,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x20,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x27,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x27,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x5f,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x6d,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x29,0x03,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2d,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x29,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x28,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x15,0x03,0x00,0x00,
+0x6d,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x35,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x33,0x03,0x00,0x00,0x34,0x03,0x00,0x00,
+0x35,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x38,0x03,0x00,0x00,
+0x3a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x35,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x33,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,0x34,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x3e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3c,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x3e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x03,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x14,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x49,0x03,0x00,0x00,0x48,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x46,0x03,0x00,0x00,
+0x49,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xfd,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x15,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x03,0x00,0x00,0x68,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,
+0x51,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0x53,0x03,0x00,0x00,
+0x54,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x03,0x00,0x00,0x69,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x03,0x00,0x00,
+0x55,0x03,0x00,0x00,0x57,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0x58,0x03,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x1f,0x02,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x42,0x03,0x00,0x00,0x35,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x5d,0x03,0x00,0x00,
+0x5c,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x6d,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x27,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x29,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x22,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x22,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x21,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x69,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x02,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x03,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q3_k_f32_fp32_len = 13004;
+
+unsigned char matmul_q4_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x1b,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x63,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x63,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x65,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4f,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x95,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x96,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x96,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x96,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x98,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x98,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x41,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x25,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x26,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x58,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x59,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x62,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x64,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x70,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa4,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd2,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x95,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x96,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x97,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x1e,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xa5,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2c,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x33,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xcf,0x02,0x00,0x00,0x38,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x42,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x4d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x53,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x54,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2c,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2c,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,0x85,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x88,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x36,0x02,0x00,0x00,
+0x8f,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x92,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x96,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9a,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xef,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa2,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xef,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xef,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xbc,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xef,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x97,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x97,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xde,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xec,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xec,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xec,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xec,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xde,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x34,0x02,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x32,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfe,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x30,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x06,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xbb,0x01,0x00,0x00,0x1e,0x02,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xbb,0x01,0x00,0x00,0x25,0x02,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x29,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x02,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8e,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x96,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x57,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5b,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x63,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x77,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7b,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x83,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x89,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x94,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x92,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x70,0x01,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x80,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x60,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q4_0_f32_len = 10564;
+
+unsigned char matmul_q4_0_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x36,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x72,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x63,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x63,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x63,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x65,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x72,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xb9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xb9,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x15,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x41,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x5b,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x5c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x5c,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x60,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x18,0x00,0x04,0x00,0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x62,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x64,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xde,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xb8,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xb9,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xba,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xba,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x35,0x03,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x35,0x03,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x39,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x43,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x67,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x67,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x67,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x67,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x67,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x67,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x67,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x67,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa1,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3f,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,0xab,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x59,0x02,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb1,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb5,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x12,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x00,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x00,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xde,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xdf,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xba,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0x00,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x11,0x02,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x01,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x0f,0x02,0x00,0x00,0xee,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x0f,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x01,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x01,0x03,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xde,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0d,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x01,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x57,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x19,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x06,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x21,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x23,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x25,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x29,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x31,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x08,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xde,0x01,0x00,0x00,0x41,0x02,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x40,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xde,0x01,0x00,0x00,
+0x48,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0x35,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x49,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x4c,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x26,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x08,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x23,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x06,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x97,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x80,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x86,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9e,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa6,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xae,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc2,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb5,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x67,0x01,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xd6,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x80,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q4_0_f32_aligned_len = 11156;
+
+unsigned char matmul_q4_0_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x0c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x48,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5f,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x60,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x62,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x48,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8e,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x8f,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x8f,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x91,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x15,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x41,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x26,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x5a,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x5e,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x61,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x64,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xcd,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xce,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x8e,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x15,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x15,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,0x15,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2c,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0x37,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x41,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x4a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x64,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x64,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x64,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x64,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x84,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,0x8b,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x90,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x92,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x98,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x99,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbf,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x01,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x27,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x09,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0xa2,0x01,0x00,0x00,0x18,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x22,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x54,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x56,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x58,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x5c,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x74,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x84,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8b,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x64,0x01,0x00,0x00,0xac,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x59,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x51,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q4_0_f32_aligned_fp32_len = 10408;
+
+unsigned char matmul_q4_0_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x14,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x48,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x61,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x61,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x48,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8e,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x8f,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x8f,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x91,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x1e,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x14,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x41,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x26,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x26,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x56,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x57,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x60,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x62,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x6e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xcd,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xce,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x8e,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x13,0x03,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x14,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x14,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x13,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,0x14,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2b,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0xc8,0x02,0x00,0x00,0x36,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x40,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x4b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x53,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x52,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x6e,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x53,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7a,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x53,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x53,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x84,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,0x8b,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x90,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x92,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x98,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x99,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xd6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbf,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x29,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x01,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x27,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x09,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0xa2,0x01,0x00,0x00,0x18,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x22,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x88,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x96,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x54,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x56,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x58,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x5c,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x70,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x74,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x84,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8b,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x6e,0x01,0x00,0x00,0xac,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x59,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x51,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q4_0_f32_fp32_len = 10444;
+
+unsigned char matmul_q4_1_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xf5,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x54,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x05,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x67,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x9b,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x9b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x9b,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9d,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x5e,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x5e,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x67,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x69,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x69,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x75,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa9,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xaa,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc0,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xd7,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x9a,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x9c,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x9c,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xaa,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x09,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x3d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x43,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x47,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x52,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x51,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x52,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x52,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x5a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x58,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x59,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0x71,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x44,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x44,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x86,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x41,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x3b,0x02,0x00,0x00,0x94,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0xde,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x97,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x99,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9b,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9f,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa7,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0xe2,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xe2,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc0,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc1,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x99,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc7,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcd,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd5,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xe3,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xe3,0x02,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x39,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfb,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x37,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x03,0x02,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x05,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x35,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x13,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xc0,0x01,0x00,0x00,
+0x23,0x02,0x00,0x00,0xab,0x01,0x00,0x00,0x22,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x24,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc0,0x01,0x00,0x00,0x2a,0x02,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x17,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x2e,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x07,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xff,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x60,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x68,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x88,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x90,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x99,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x98,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x75,0x01,0x00,0x00,0xb8,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x85,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x65,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x62,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q4_1_f32_len = 10632;
+
+unsigned char matmul_q4_1_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x18,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x77,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x06,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x08,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x67,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x68,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x68,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6a,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x77,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xbe,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xbe,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xbe,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc0,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x04,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x60,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x61,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x69,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x69,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x6c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xfb,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xbd,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xbe,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xbf,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xbf,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfb,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x16,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x33,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x32,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0x3e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x48,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0xff,0x02,0x00,0x00,0x51,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x32,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x6c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x32,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x6c,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x32,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x6c,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xa9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x44,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0xad,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xff,0x02,0x00,0x00,0xb0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x5e,0x02,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x01,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xba,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x05,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x17,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x17,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xca,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x05,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0x17,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x05,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x17,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x01,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xe3,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe4,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x17,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x05,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x16,0x02,0x00,0x00,0xed,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x06,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf2,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x14,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x14,0x02,0x00,0x00,0xf3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x14,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf8,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x06,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0x14,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x14,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x01,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x32,0x01,0x00,0x00,
+0x10,0x02,0x00,0x00,0x62,0x01,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x11,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xe3,0x01,0x00,0x00,
+0x12,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,0x00,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x14,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xea,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0x5c,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x20,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x22,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x26,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x30,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x30,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x32,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xe3,0x01,0x00,0x00,0x46,0x02,0x00,0x00,0xce,0x01,0x00,0x00,
+0x45,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xe3,0x01,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x3a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x51,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x0f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x30,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x23,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x20,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb6,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x85,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x87,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8b,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa3,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xab,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xb3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb1,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xbc,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xba,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x6c,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x80,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q4_1_f32_aligned_len = 11224;
+
+unsigned char matmul_q4_1_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xee,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x39,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x64,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x65,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x65,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x67,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x67,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x93,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x94,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x94,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x94,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x96,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x96,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x04,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x16,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x5e,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x5f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x5f,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x63,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x66,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x69,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa5,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd2,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x93,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x95,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0a,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x16,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x3c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x40,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x46,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x69,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x69,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x69,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x78,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x69,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0xce,0x02,0x00,0x00,0x82,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x86,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x89,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x34,0x02,0x00,0x00,0x90,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x93,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x95,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x97,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9b,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbc,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x97,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xea,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xea,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x32,0x02,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x02,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x06,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x27,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x97,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x53,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x55,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x59,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x61,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x79,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x89,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x87,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x92,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x90,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x69,0x01,0x00,0x00,0xb1,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x56,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x55,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q4_1_f32_aligned_fp32_len = 10476;
+
+unsigned char matmul_q4_1_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xee,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x03,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x66,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x66,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x66,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x68,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x68,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x93,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x94,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x94,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x94,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x96,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x96,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x03,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x5b,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x5c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x65,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x67,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x67,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x73,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa5,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xd2,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x93,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x95,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x09,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x31,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x3b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x45,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0xce,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4e,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x58,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x56,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x57,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x73,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x58,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7f,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x58,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x42,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0xce,0x02,0x00,0x00,0x82,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x86,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0x89,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x34,0x02,0x00,0x00,0x90,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x93,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x95,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x97,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9b,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x96,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbc,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xed,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x97,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xea,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xea,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x32,0x02,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x02,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x06,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0e,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x27,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x53,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x55,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x59,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5d,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x61,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x73,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x75,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x79,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x81,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x89,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x87,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x92,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x90,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x73,0x01,0x00,0x00,0xb1,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x73,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x56,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x55,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q4_1_f32_fp32_len = 10512;
+
+unsigned char matmul_q4_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x8d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xbb,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xcf,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xcf,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x01,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x02,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x02,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x04,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x04,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x17,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x1c,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x20,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x20,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x23,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x76,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x77,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc4,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xce,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xdc,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x10,0x02,0x00,0x00,
+0x17,0x01,0x00,0x00,0x0f,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x11,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x27,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x3e,0x02,0x00,0x00,
+0x17,0x01,0x00,0x00,0x3d,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3f,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x01,0x03,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x03,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x03,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x11,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x3f,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x23,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x14,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x2b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x45,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x19,0x01,0x00,0x00,0x62,0x03,0x00,0x00,0x44,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x19,0x01,0x00,0x00,0x61,0x03,0x00,0x00,
+0x39,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x61,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x62,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x30,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x8c,0x03,0x00,0x00,0x73,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x8c,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0x17,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8b,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x8c,0x03,0x00,0x00,
+0x73,0x00,0x04,0x00,0x17,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x8a,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x3b,0x03,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0x3c,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xaa,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xae,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb9,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xc1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x43,0x03,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x17,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x8a,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x8a,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xea,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x3c,0x03,0x00,0x00,0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x3f,0x03,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x43,0x03,0x00,0x00,0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x45,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x49,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x06,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0e,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x49,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x49,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0x45,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x8a,0x01,0x00,0x00,
+0x25,0x02,0x00,0x00,0x78,0x01,0x00,0x00,0x24,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00,0x26,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x28,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x5b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x49,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x02,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x4a,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x30,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x34,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x36,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x58,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x38,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3c,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x58,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x58,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x45,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x8a,0x01,0x00,0x00,
+0x54,0x02,0x00,0x00,0xc6,0x01,0x00,0x00,0x53,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00,0x55,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x58,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x36,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x31,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x30,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x62,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x66,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6a,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x6e,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x72,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x74,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x74,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x53,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7a,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x51,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x53,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x53,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x27,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x17,0x01,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x27,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x17,0x01,0x00,0x00,0x92,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x95,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x53,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x4f,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x64,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x45,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfa,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x96,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc7,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0xcc,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xcf,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x48,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x23,0x03,0x00,0x00,0xe4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe3,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe7,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x21,0x03,0x00,0x00,
+0xec,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xeb,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xef,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xea,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xf7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf5,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfe,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0x31,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x2c,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x03,0x00,0x00,0x15,0x03,0x00,0x00,0x16,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x17,0x03,0x00,0x00,
+0x19,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0x31,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xdc,0x01,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x04,0x03,0x00,0x00,0x35,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1f,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x00,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x31,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xeb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x2f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q4_k_f32_len = 12052;
+
+unsigned char matmul_q4_k_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xa7,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0x26,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x20,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x20,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xcf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xcf,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xcf,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xdd,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x23,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x24,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x24,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x24,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x26,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x26,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x18,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x1c,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1d,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x38,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x77,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x78,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x78,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x32,0x02,0x00,0x00,
+0x18,0x01,0x00,0x00,0x31,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x33,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x60,0x02,0x00,0x00,
+0x18,0x01,0x00,0x00,0x5f,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x61,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x23,0x03,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x24,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x25,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x25,0x03,0x00,0x00,0x26,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x33,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x4c,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x65,0x03,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x61,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x61,0x03,0x00,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x24,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x31,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x38,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x31,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x31,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x92,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x31,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x92,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x1a,0x01,0x00,0x00,
+0x81,0x03,0x00,0x00,0x45,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x1a,0x01,0x00,0x00,0x80,0x03,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x80,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x81,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x31,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xa6,0x03,0x00,0x00,0x74,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xa6,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x8b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8c,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x31,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0xa6,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x5d,0x03,0x00,0x00,0xa5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x11,0x02,0x00,0x00,0xaa,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x5e,0x03,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xab,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xaf,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x65,0x03,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd3,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd3,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd3,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x8b,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe5,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd3,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd3,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xd3,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x8b,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xfc,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd3,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x03,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,
+0x04,0x02,0x00,0x00,0xc9,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x04,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd3,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x0f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xab,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x61,0x03,0x00,0x00,0x13,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x65,0x03,0x00,0x00,
+0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xc4,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x67,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1c,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x20,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x22,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x24,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x28,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7d,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x7d,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2c,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x30,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x6b,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x7d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x6b,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x7d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x67,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0x47,0x02,0x00,0x00,
+0x79,0x01,0x00,0x00,0x46,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x4a,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x7d,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x6b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x6c,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x52,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x56,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x7a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x59,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x6c,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x7a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x6c,0x03,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x7a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x67,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8b,0x01,0x00,0x00,0x76,0x02,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x75,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x49,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x7a,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x53,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x6c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x6d,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x84,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x71,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x71,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8c,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x73,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x73,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x90,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x94,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x96,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x75,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x75,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x98,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9c,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x6d,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x73,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x71,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x75,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x75,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x49,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0xad,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x49,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb7,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x75,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x96,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x73,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x71,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x6d,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x67,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x97,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x49,0x03,0x00,0x00,0xe6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe5,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe9,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x47,0x03,0x00,0x00,
+0xee,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x4f,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xed,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf1,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x4f,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x6a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x45,0x03,0x00,0x00,
+0x06,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x05,0x03,0x00,0x00,0x06,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x09,0x03,0x00,0x00,
+0x04,0x03,0x00,0x00,0x05,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x04,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x0b,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x43,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0x53,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0d,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x11,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x0d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x53,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x19,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x17,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0x19,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x18,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x51,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x19,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x17,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x22,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x20,0x03,0x00,0x00,
+0x21,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x21,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x51,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,
+0x31,0x03,0x00,0x00,0x53,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x35,0x03,0x00,0x00,0x51,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,
+0x37,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x53,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0xca,0x00,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd3,0x01,0x00,0x00,0x41,0x03,0x00,0x00,0x26,0x03,0x00,0x00,
+0x35,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x41,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x22,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x53,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0d,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0x51,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x03,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,
+0x4f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe5,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q4_k_f32_aligned_len = 12648;
+
+unsigned char matmul_q4_k_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x7d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x20,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9f,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xca,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xcb,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xcb,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xcd,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf9,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xfa,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xfa,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xfa,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xfc,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfc,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x15,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x18,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x1e,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x76,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x77,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x89,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xca,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0xcb,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x0b,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x38,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x39,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xf9,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xfa,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xfb,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xfb,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0c,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x39,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x22,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x24,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x15,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x45,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x92,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x92,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x1a,0x01,0x00,0x00,0x57,0x03,0x00,0x00,0x44,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x1a,0x01,0x00,0x00,0x56,0x03,0x00,0x00,
+0x39,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x56,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x57,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x30,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x1a,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0x73,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x7c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x89,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8a,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x30,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x1a,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x7c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x89,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x33,0x03,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x34,0x03,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xac,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x3b,0x03,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0xcf,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0xcf,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0xcf,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x34,0x03,0x00,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0x37,0x03,0x00,0x00,0xec,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x3b,0x03,0x00,0x00,0xef,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x9a,0x02,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x3d,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x41,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x41,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x01,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x53,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x24,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x53,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x05,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x09,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x41,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x53,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x41,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x13,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x53,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,
+0x20,0x02,0x00,0x00,0x78,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x53,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x41,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x54,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x42,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x30,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x30,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x50,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x50,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x32,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x36,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x42,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x50,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x42,0x03,0x00,0x00,
+0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x50,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,
+0x4e,0x02,0x00,0x00,0xc6,0x01,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x50,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x30,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x42,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x43,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x47,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x64,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x49,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x68,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x6c,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x74,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x43,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x49,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x47,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x8d,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x49,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x47,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x60,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x59,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x43,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x3d,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x23,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x97,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbf,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xba,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x1d,0x03,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc7,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x24,0x03,0x00,0x00,
+0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x1b,0x03,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x27,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdb,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdf,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xda,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0x19,0x03,0x00,0x00,0xe4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x29,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe3,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe7,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x29,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xef,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xed,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc2,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf6,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x14,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x00,0x03,0x00,0x00,
+0x03,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0xb7,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x05,0x03,0x00,0x00,0xcf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0x29,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x24,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x27,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x25,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x12,0x03,0x00,0x00,
+0x29,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0xca,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x15,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xcf,0x01,0x00,0x00,
+0x17,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x17,0x03,0x00,0x00,
+0x16,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xf8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x29,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x27,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x25,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x24,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q4_k_f32_aligned_fp32_len = 11900;
+
+unsigned char matmul_q4_k_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x86,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x1f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9f,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xcd,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xcd,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xcf,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb4,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfa,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xfb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xfb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xfb,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xfd,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfd,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x17,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1c,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x1d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x20,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x20,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x76,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x77,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x89,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc3,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xcc,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xce,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xce,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xda,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x39,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x3a,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xfa,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xfb,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xfc,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfc,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0d,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x3a,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x23,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x23,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x24,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x23,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x30,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x30,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x30,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x19,0x01,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x44,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x19,0x01,0x00,0x00,0x5a,0x03,0x00,0x00,0x39,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x5b,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x85,0x03,0x00,0x00,0x73,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc3,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x85,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x8a,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc3,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x85,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x34,0x03,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x35,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa8,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xac,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x35,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x24,0x03,0x00,0x00,0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xbf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0x3c,0x03,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe6,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x35,0x03,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x38,0x03,0x00,0x00,0xed,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0x3c,0x03,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x9b,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x42,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x27,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x42,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x02,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x25,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x54,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x06,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x42,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x54,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x42,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x54,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,0x21,0x02,0x00,0x00,
+0x78,0x01,0x00,0x00,0x20,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x54,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x42,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x55,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,0x43,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2b,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2f,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x33,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x37,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x43,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x43,0x03,0x00,0x00,0x43,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x89,0x01,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x4e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x51,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x43,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x57,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x44,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x44,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x59,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x5d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x48,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x48,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x61,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x65,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x4a,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x69,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6d,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x75,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x44,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x48,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x4c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x8e,0x02,0x00,0x00,0x90,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x4c,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x69,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x48,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x61,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x44,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x3e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x24,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x96,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xba,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xba,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x26,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x1e,0x03,0x00,0x00,0xc5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x26,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc8,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x26,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x25,0x03,0x00,0x00,0x43,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xda,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x28,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x1c,0x03,0x00,0x00,0xdd,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x28,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdc,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe0,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0x1a,0x03,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe4,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe8,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xf0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xee,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xf9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf7,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x14,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x03,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x06,0x03,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x25,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x26,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x10,0x03,0x00,0x00,
+0x12,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0x13,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x16,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xda,0x01,0x00,0x00,0x18,0x03,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x18,0x03,0x00,0x00,0x17,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x28,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xda,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x26,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x25,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xba,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q4_k_f32_fp32_len = 11932;
+
+unsigned char matmul_q5_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x46,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x78,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x07,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x5e,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x8c,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbe,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xbf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xbf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xbf,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc1,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x05,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x00,0x00,0x80,0x41,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x4e,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x55,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x81,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x82,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8b,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x8c,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x99,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xce,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xfb,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xbe,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xbf,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xc0,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc0,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,0x34,0x01,0x00,0x00,
+0x45,0x03,0x00,0x00,0x47,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x11,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x30,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x34,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x34,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,0x34,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x56,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x61,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x65,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x67,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6b,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x76,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x74,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0xea,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7c,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x02,0x03,0x00,0x00,0x95,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x68,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x68,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x65,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0x02,0x03,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x5f,0x02,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x04,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb7,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x08,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbf,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcb,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x08,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x08,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x04,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe5,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x1a,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x08,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x17,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x09,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xed,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf1,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x15,0x02,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x17,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf9,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x09,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x05,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x17,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,0x11,0x02,0x00,0x00,
+0x83,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xe4,0x01,0x00,0x00,0x13,0x02,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x13,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x17,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1f,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x27,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x22,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x10,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2b,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2f,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x31,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x33,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x37,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x10,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x12,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x12,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xe4,0x01,0x00,0x00,
+0x47,0x02,0x00,0x00,0xcf,0x01,0x00,0x00,0x46,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x48,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xe4,0x01,0x00,0x00,0x4e,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x31,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x33,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x10,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x23,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x84,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8c,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa4,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa8,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xac,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xb4,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xbd,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x99,0x01,0x00,0x00,0xdc,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xdc,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x88,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x80,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q5_0_f32_len = 11076;
+
+unsigned char matmul_q5_0_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x61,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x08,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x5f,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x8c,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8e,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9b,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe1,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xe2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xe2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xe2,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe4,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe4,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x06,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x00,0x00,0x80,0x41,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x84,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x85,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x89,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x18,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x8c,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf1,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x07,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,
+0x01,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xe1,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xe2,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe3,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xe3,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x35,0x01,0x00,0x00,0x60,0x03,0x00,0x00,0x48,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x1f,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0c,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x12,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x12,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x35,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x35,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x60,0x03,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x35,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x57,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x56,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5d,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x1d,0x03,0x00,0x00,0x62,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x66,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x1e,0x03,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6c,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x67,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x25,0x03,0x00,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x56,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x94,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x90,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x56,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xaa,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x90,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x56,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc2,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x90,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xca,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x1e,0x03,0x00,0x00,0xcd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x66,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x68,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x21,0x03,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x25,0x03,0x00,0x00,0xd4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x82,0x02,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x27,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xde,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xea,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xee,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x27,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00,
+0x05,0x02,0x00,0x00,0x51,0x01,0x00,0x00,0x04,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x06,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x07,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x08,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x3d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x3a,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x16,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x18,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1c,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x28,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x27,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x56,0x01,0x00,0x00,
+0x34,0x02,0x00,0x00,0x86,0x01,0x00,0x00,0x33,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x35,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x07,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x3a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3e,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x44,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x46,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4a,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x33,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4e,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x52,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x54,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x35,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5a,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x33,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x35,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x35,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x07,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x69,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x07,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x75,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x35,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x54,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x33,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x44,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x46,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x2d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x05,0x03,0x00,0x00,0xac,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xab,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xaf,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0x28,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x03,0x03,0x00,0x00,0xc4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x11,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc3,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc7,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x01,0x03,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0x13,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd7,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd5,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xe0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xde,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0x13,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x0e,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,0x13,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x90,0x01,0x00,0x00,0xff,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xff,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x11,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q5_0_f32_aligned_len = 11668;
+
+unsigned char matmul_q5_0_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x37,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x71,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x08,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x5c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x88,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x89,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x89,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x89,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb7,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb8,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xb8,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xba,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xba,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x06,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x07,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x08,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x00,0x00,0x80,0x41,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x55,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x83,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x88,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xca,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xf6,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xb7,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x35,0x01,0x00,0x00,0x36,0x03,0x00,0x00,
+0x48,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xca,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x12,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x12,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x31,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x35,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x35,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x36,0x03,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x35,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x56,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x55,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x60,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x64,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x64,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x73,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x8d,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x55,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x8d,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x55,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x96,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x8d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x55,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9c,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x8d,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x55,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x64,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0xad,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x58,0x02,0x00,0x00,0xb4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb7,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x01,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbf,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x13,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x01,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x01,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x55,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x13,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x01,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x12,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0x02,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x10,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x02,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x55,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0x84,0x01,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x56,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x4b,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x03,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x97,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x77,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x79,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x85,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x80,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x97,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x98,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa1,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xad,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xab,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb6,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb4,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x8d,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd5,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q5_0_f32_aligned_fp32_len = 10920;
+
+unsigned char matmul_q5_0_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x3f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x71,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x07,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x5b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x5c,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x8a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8c,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x71,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb7,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb8,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xb8,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xba,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xba,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0x05,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x08,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x34,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x00,0x00,0x80,0x41,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x4e,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4f,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x54,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x7f,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x80,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x80,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x89,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x97,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xca,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xf6,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xb7,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x34,0x01,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x47,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xca,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x11,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x34,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x34,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x34,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x54,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x54,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x5f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x63,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x69,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x74,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x72,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x73,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x74,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x7c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7a,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0x93,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x97,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x54,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x54,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa3,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xf4,0x02,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x65,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xfb,0x02,0x00,0x00,0xad,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x58,0x02,0x00,0x00,0xb4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb7,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x01,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xbf,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x13,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x01,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0x01,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x13,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x54,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x13,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0x01,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x12,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0x02,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x10,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x02,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x54,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0x81,0x01,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x56,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x4b,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x03,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x77,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x79,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7d,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x81,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x85,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x80,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x97,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x99,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x98,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa1,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xad,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xab,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb6,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb4,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x97,0x01,0x00,0x00,0xd5,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd5,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x82,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q5_0_f32_fp32_len = 10956;
+
+unsigned char matmul_q5_1_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x16,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x73,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x05,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x58,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x59,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x87,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x89,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x73,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xba,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xba,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xba,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x2f,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x7c,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x86,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x94,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xb9,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xba,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbb,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x09,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x2f,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x51,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x5c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x60,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x62,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x66,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x71,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6f,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x79,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x77,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0x90,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x94,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x99,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x60,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x5a,0x02,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xff,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0x03,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xba,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xbe,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x15,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc1,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x03,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x15,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x03,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x15,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xff,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe0,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x15,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x03,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xba,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0x12,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x04,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x10,0x02,0x00,0x00,
+0xef,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x04,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x00,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x12,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0xff,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x58,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x05,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x16,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1a,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x22,0x02,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2a,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x32,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x05,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,
+0x42,0x02,0x00,0x00,0xca,0x01,0x00,0x00,0x41,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x43,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xdf,0x01,0x00,0x00,0x49,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x4d,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x05,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xff,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x87,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x82,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9b,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9f,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xaf,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xad,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb8,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb6,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x94,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q5_1_f32_len = 10956;
+
+unsigned char matmul_q5_1_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x39,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x96,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x59,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x87,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x87,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x89,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x96,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xdc,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xdd,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xdd,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xdd,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xdf,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xdf,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x01,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x04,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x51,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x7f,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x80,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x80,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x84,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x85,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x02,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x19,0x02,0x00,0x00,0x01,0x01,0x00,0x00,0x18,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xdc,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xde,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xde,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x20,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0xde,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x2c,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x52,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x58,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x18,0x03,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x61,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x61,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x19,0x03,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x67,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x62,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x20,0x03,0x00,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x8b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x8b,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x51,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbd,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x8b,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0x19,0x03,0x00,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x61,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x63,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0x1c,0x03,0x00,0x00,0xcc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x20,0x03,0x00,0x00,0xcf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x22,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0xde,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x26,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x05,0x02,0x00,0x00,0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x38,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe5,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe9,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x26,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x38,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x26,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x38,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x22,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0x4c,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x02,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0xed,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x03,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x38,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x26,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x35,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x27,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x11,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x35,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x35,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x13,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x17,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x35,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x27,0x03,0x00,0x00,
+0x23,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x35,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x22,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x01,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x81,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x02,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x31,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x35,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x27,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x37,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x37,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x39,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3d,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x41,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x45,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4d,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x30,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x30,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x30,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x02,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xed,0x01,0x00,0x00,
+0x64,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x66,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x02,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x70,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x30,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x28,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x37,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x22,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x08,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9e,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa2,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0xa7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa6,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xaa,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0x23,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbc,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbe,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc6,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xca,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd0,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xdb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd9,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xda,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x8b,0x01,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xfa,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x0c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q5_1_f32_aligned_len = 11548;
+
+unsigned char matmul_q5_1_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x0f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x04,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x04,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x06,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x08,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x57,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x58,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x83,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x84,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x84,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x84,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6c,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xb3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb3,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb5,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb5,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x01,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x04,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x05,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x06,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x4a,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x50,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x7d,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7e,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x82,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x85,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x88,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb2,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb3,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xb4,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x0a,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x15,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x51,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xee,0x02,0x00,0x00,0x5b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0xef,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x65,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x60,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x91,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x97,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x88,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xef,0x02,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x53,0x02,0x00,0x00,0xaf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xae,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb2,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xba,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xdb,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x0e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0xea,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x09,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0x51,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x15,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x21,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x25,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x06,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x3c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x31,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x46,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x97,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x74,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x98,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x93,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9c,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb1,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xaf,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x88,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x92,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q5_1_f32_aligned_fp32_len = 10800;
+
+unsigned char matmul_q5_1_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x0f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x03,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x03,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x05,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x57,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x84,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x85,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x85,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x85,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6c,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb2,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb3,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xb3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb3,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb5,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb5,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x00,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x03,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x06,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x49,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4f,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x7a,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7b,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x84,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x86,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x86,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x92,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb2,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb3,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xb4,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x09,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x09,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x00,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x14,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x2f,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x4f,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x50,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x4f,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0xee,0x02,0x00,0x00,0x5a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0xef,0x02,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x64,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0xef,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6d,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x6e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x77,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x75,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x4f,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x4f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9e,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x77,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x61,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xef,0x02,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xf6,0x02,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x53,0x02,0x00,0x00,0xaf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xae,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb2,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xba,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xf8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x4f,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xdb,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x0e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,0xea,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x4f,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x06,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x09,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0x51,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x11,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x15,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x21,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x25,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x21,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x06,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2d,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x28,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x04,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x06,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x3c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x31,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x46,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x22,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x04,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x74,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x78,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x73,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x92,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x98,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x93,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9c,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa0,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa8,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xb1,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xaf,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x92,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x74,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q5_1_f32_fp32_len = 10836;
+
+unsigned char matmul_q5_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb2,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xe0,0x02,0x00,0x00,0x29,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf3,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xf4,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xf4,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe0,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x26,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x27,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x27,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x27,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x29,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x24,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x2a,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x81,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x82,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xe9,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xea,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xea,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xf3,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x01,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x35,0x02,0x00,0x00,
+0x24,0x01,0x00,0x00,0x34,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x36,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x63,0x02,0x00,0x00,
+0x24,0x01,0x00,0x00,0x62,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x64,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x26,0x03,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x27,0x03,0x00,0x00,0x26,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x28,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x28,0x03,0x00,0x00,0x29,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x36,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x50,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x50,0x03,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0xcb,0x01,0x00,0x00,0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x64,0x03,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x30,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x21,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x38,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x37,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1e,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x18,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1e,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x18,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x18,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x38,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x18,0x01,0x00,0x00,0x87,0x03,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x18,0x01,0x00,0x00,0x86,0x03,0x00,0x00,
+0x44,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x86,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x87,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3c,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3c,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x18,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x15,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb1,0x03,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xb1,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa2,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x15,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xb1,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa2,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x60,0x03,0x00,0x00,0xc9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x61,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0xd0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0x61,0x03,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd3,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xce,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x61,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xde,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdc,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0x50,0x03,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xde,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xe6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x61,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x68,0x03,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x01,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x04,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xa2,0x01,0x00,0x00,
+0x05,0x02,0x00,0x00,0xeb,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x7e,0x00,0x00,0x00,0x61,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xa2,0x01,0x00,0x00,
+0x0f,0x02,0x00,0x00,0xeb,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x61,0x03,0x00,0x00,
+0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x64,0x03,0x00,0x00,0x16,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x68,0x03,0x00,0x00,
+0x19,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xc7,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1f,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x25,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x27,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2b,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x26,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x80,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x80,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x33,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x80,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x80,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa2,0x01,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x83,0x01,0x00,0x00,0x49,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x4c,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x4d,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x80,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x6e,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x25,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x53,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x6f,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x55,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x59,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x54,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7d,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x7d,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x61,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x6f,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x7d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x6f,0x03,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x7d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa2,0x01,0x00,0x00,0x79,0x02,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x78,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x24,0x01,0x00,0x00,0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x4c,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x7d,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x6f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x53,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x70,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x70,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x83,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x87,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x74,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x74,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8b,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8f,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x91,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x76,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x76,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x97,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x99,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x78,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x78,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9b,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9f,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x70,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x76,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0x74,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x78,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x78,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x4c,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x4c,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xba,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x78,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x76,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x74,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x89,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x70,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x20,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x20,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x6a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x50,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x51,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x4c,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x51,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x52,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x52,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf0,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf4,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xef,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x52,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x51,0x03,0x00,0x00,0x6d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x01,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0x48,0x03,0x00,0x00,
+0x09,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x54,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x08,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0c,0x03,0x00,0x00,
+0x07,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x07,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x0e,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0e,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x46,0x03,0x00,0x00,0x11,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x56,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x10,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x14,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x10,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x56,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x17,0x03,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x1c,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x54,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0x20,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x21,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0x22,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x25,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x23,0x03,0x00,0x00,
+0x24,0x03,0x00,0x00,0x25,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x54,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,
+0x34,0x03,0x00,0x00,0x56,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x51,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0x54,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x52,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x03,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x56,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x42,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x01,0x02,0x00,0x00,0x44,0x03,0x00,0x00,0x29,0x03,0x00,0x00,
+0x35,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x44,0x03,0x00,0x00,0x43,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x25,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x11,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x11,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x03,0x00,0x00,0x56,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x54,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x52,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q5_k_f32_len = 12576;
+
+unsigned char matmul_q5_k_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xcc,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x02,0x03,0x00,0x00,0x4b,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc7,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf3,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xf4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xf4,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xf4,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x02,0x03,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x48,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x49,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x49,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x49,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4b,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4b,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x22,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x25,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x2b,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x82,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x83,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa3,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xed,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf8,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x57,0x02,0x00,0x00,
+0x25,0x01,0x00,0x00,0x56,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x58,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6e,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x85,0x02,0x00,0x00,
+0x25,0x01,0x00,0x00,0x84,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x86,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x48,0x03,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x49,0x03,0x00,0x00,0x48,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4a,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x49,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4a,0x03,0x00,0x00,0x4b,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x50,0x03,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x58,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x86,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x71,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x71,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x71,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x71,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8a,0x03,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x86,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x72,0x03,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x72,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x82,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x82,0x03,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x82,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x86,0x03,0x00,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x31,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x26,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3d,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3d,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3d,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3d,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x92,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3d,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x92,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x19,0x01,0x00,0x00,
+0xa6,0x03,0x00,0x00,0x50,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x19,0x01,0x00,0x00,0xa5,0x03,0x00,0x00,0x45,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xa5,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0xa6,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3d,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3d,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x15,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcb,0x03,0x00,0x00,0x7f,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xcb,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa3,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa4,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3d,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3d,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x15,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xcb,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa3,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc5,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x82,0x03,0x00,0x00,
+0xca,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x83,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x83,0x03,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd4,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0x83,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x8a,0x03,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x25,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa3,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xfc,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xf8,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00,
+0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa3,0x01,0x00,0x00,0x03,0x02,0x00,0x00,0xee,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x03,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xf8,0x01,0x00,0x00,0x07,0x02,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0x09,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xa3,0x01,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0x05,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x0c,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0xf8,0x01,0x00,0x00,0x0f,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x25,0x01,0x00,0x00,0x11,0x02,0x00,0x00,0x10,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa3,0x01,0x00,0x00,0x12,0x02,0x00,0x00,
+0xee,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xf8,0x01,0x00,0x00,
+0x16,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00,
+0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa3,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0xee,0x01,0x00,0x00,
+0x14,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x19,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xf8,0x01,0x00,0x00,0x1e,0x02,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0x20,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xa3,0x01,0x00,0x00,
+0x21,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x23,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0xf8,0x01,0x00,0x00,0x26,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x25,0x01,0x00,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa3,0x01,0x00,0x00,0x29,0x02,0x00,0x00,
+0xee,0x01,0x00,0x00,0x24,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xf8,0x01,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x25,0x01,0x00,0x00,
+0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa3,0x01,0x00,0x00,0x31,0x02,0x00,0x00,0xee,0x01,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x31,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x83,0x03,0x00,0x00,0x34,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd0,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x86,0x03,0x00,0x00,
+0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x8a,0x03,0x00,0x00,0x3b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x41,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x45,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x90,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x90,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4d,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0xa2,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x90,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0xa2,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x90,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0xa2,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa3,0x01,0x00,0x00,0x6c,0x02,0x00,0x00,0x84,0x01,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x25,0x01,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x6e,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x6f,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0xa2,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x51,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x90,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x75,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x75,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x91,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x91,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7b,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x9f,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7f,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x83,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x91,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x9f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x91,0x03,0x00,0x00,0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x9f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa3,0x01,0x00,0x00,0x9b,0x02,0x00,0x00,0xee,0x01,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x25,0x01,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x6e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x9d,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x9f,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x91,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x92,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x92,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa9,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x96,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x96,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb1,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x98,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x98,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb5,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb9,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x9a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc1,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x92,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x98,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x96,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x9a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x9a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x6e,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x25,0x01,0x00,0x00,0xd2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x6e,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xdc,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x9a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x98,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x96,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x92,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x72,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x97,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x48,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x03,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x73,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x73,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0a,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0e,0x03,0x00,0x00,
+0x09,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x10,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x74,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x74,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x12,0x03,0x00,0x00,0x13,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x16,0x03,0x00,0x00,0x11,0x03,0x00,0x00,
+0x12,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x11,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x74,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x73,0x03,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x03,0x00,0x00,0xf7,0x02,0x00,0x00,0x22,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x23,0x03,0x00,0x00,
+0x25,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x28,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x76,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x76,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2a,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2e,0x03,0x00,0x00,0x29,0x03,0x00,0x00,
+0x2a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x29,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x30,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x30,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x78,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0x33,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x78,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x32,0x03,0x00,0x00,
+0x33,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x36,0x03,0x00,0x00,0x31,0x03,0x00,0x00,0x32,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x31,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x78,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x3e,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3c,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x3e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x03,0x00,0x00,
+0x26,0x03,0x00,0x00,0x76,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x14,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x42,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x41,0x03,0x00,0x00,
+0x43,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc2,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x31,0x03,0x00,0x00,0x44,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x47,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x45,0x03,0x00,0x00,0x46,0x03,0x00,0x00,
+0x47,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x26,0x03,0x00,0x00,0x76,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x51,0x03,0x00,0x00,0x14,0x00,0x00,0x00,
+0x50,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x53,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x52,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x03,0x00,0x00,0x06,0x03,0x00,0x00,0x53,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,
+0x54,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x03,0x00,0x00,0x56,0x03,0x00,0x00,
+0x78,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x73,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x76,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x74,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x03,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x60,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x61,0x03,0x00,0x00,
+0x78,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0xca,0x00,0x00,0x00,0x63,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x65,0x03,0x00,0x00,
+0x64,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xf8,0x01,0x00,0x00,
+0x66,0x03,0x00,0x00,0x4b,0x03,0x00,0x00,0x35,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x66,0x03,0x00,0x00,
+0x65,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x33,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x33,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0x78,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x30,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x76,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x28,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x13,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x13,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x74,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x10,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x12,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0b,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x73,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x03,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q5_k_f32_aligned_len = 13172;
+
+unsigned char matmul_q5_k_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xa2,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x21,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2b,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x2d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc4,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xf0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xf0,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf2,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd8,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1e,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x1f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1f,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x1f,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x21,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x21,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x25,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x2b,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x81,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x82,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x82,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xe9,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xea,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xea,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xee,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0xf0,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf1,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x51,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x30,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x5d,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x1e,0x03,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x1f,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0x20,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x20,0x03,0x00,0x00,
+0x21,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x31,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x47,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x48,0x03,0x00,0x00,
+0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x58,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x58,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x5c,0x03,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x22,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x38,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x37,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x92,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1f,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x92,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x19,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x38,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x19,0x01,0x00,0x00,0x7c,0x03,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x19,0x01,0x00,0x00,0x7b,0x03,0x00,0x00,
+0x44,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x7b,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3c,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3c,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x15,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xa1,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3c,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3c,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x19,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x15,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc4,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x58,0x03,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0x59,0x03,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd1,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x60,0x03,0x00,0x00,0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0xf4,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf7,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0xf4,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0xf4,0x01,0x00,0x00,
+0x01,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0x03,0x02,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x03,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x05,0x02,0x00,0x00,0x41,0x00,0x07,0x00,0xf4,0x01,0x00,0x00,
+0x08,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x05,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x06,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x59,0x03,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x5c,0x03,0x00,0x00,0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x60,0x03,0x00,0x00,
+0x14,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xbf,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x62,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x20,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x66,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x66,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x22,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x26,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x22,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x28,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x78,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x78,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x66,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x78,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x66,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x78,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x62,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0x45,0x02,0x00,0x00,
+0x83,0x01,0x00,0x00,0x44,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x78,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x28,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x66,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x20,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x67,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4f,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x53,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x75,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x75,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x57,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5b,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x56,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x75,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0x67,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x75,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x62,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0x73,0x02,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x72,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x75,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x67,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x68,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x68,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x81,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x83,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x6c,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x85,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x89,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x6e,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x93,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x70,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x70,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x95,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x99,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x68,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x70,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x70,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb2,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x70,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x93,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x6e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x86,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x86,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0x6c,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x83,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x68,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x62,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x18,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1a,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x48,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x49,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe0,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe4,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x42,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe8,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xec,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x49,0x03,0x00,0x00,0x67,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0x40,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x00,0x03,0x00,0x00,
+0x01,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x04,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x00,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xff,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x06,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x09,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x08,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0c,0x03,0x00,0x00,
+0x07,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x07,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0xf4,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x14,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x12,0x03,0x00,0x00,0x13,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x13,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x17,0x03,0x00,0x00,0x19,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x14,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x13,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x1d,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1b,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x14,0x00,0x00,0x00,0x26,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x27,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x25,0x03,0x00,0x00,0x28,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,
+0x49,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x30,0x03,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x32,0x03,0x00,0x00,0x33,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,
+0x4a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x34,0x03,0x00,0x00,
+0x36,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0x37,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0xca,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xf4,0x01,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x21,0x03,0x00,0x00,0x35,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3c,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1d,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x01,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x03,0x00,0x00,
+0x4c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfe,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x49,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q5_k_f32_aligned_fp32_len = 12424;
+
+unsigned char matmul_q5_k_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xab,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x22,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2a,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x2c,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc4,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf1,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xf2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xf2,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf4,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf4,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd9,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x20,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x20,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x20,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x22,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x22,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x24,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x2a,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x81,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x82,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x82,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xe7,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xe8,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xf1,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xff,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x31,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x32,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x42,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1f,0x03,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x20,0x03,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x20,0x00,0x04,0x00,0x21,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x21,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x48,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x48,0x03,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x48,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x49,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x49,0x03,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x59,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x30,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x25,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x38,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3c,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3c,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3c,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x18,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x18,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1e,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x18,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x18,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x18,0x01,0x00,0x00,
+0x80,0x03,0x00,0x00,0x4f,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x18,0x01,0x00,0x00,0x7f,0x03,0x00,0x00,0x44,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x7f,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x80,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x18,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x15,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xaa,0x03,0x00,0x00,0x7e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc3,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0xaa,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x18,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x3c,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x18,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x15,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xaa,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x59,0x03,0x00,0x00,0xc7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0xce,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x5a,0x03,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xdc,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0x49,0x03,0x00,0x00,
+0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xe4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x03,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x61,0x03,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0x02,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0b,0x02,0x00,0x00,0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xce,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xce,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x5a,0x03,0x00,0x00,0x0e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x5d,0x03,0x00,0x00,
+0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x61,0x03,0x00,0x00,0x15,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x63,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x63,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1f,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x21,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x67,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x27,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x22,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x79,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2b,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2f,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x67,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x79,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x67,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x79,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x63,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa1,0x01,0x00,0x00,0x46,0x02,0x00,0x00,0x83,0x01,0x00,0x00,
+0x45,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x48,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x79,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x29,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x67,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x23,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x68,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x54,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x76,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x76,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x58,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x68,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x76,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0x68,0x03,0x00,0x00,0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x76,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x63,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa1,0x01,0x00,0x00,0x74,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x73,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x76,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x76,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x58,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x51,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x68,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x69,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x69,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7e,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x82,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x86,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8a,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x6f,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8e,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x92,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x71,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x71,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9a,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x69,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x6f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x6d,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x71,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,0x71,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb3,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0x71,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x96,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x6f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x87,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x6d,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x86,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0x69,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x63,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x11,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x49,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x96,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x45,0x03,0x00,0x00,0xe2,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe1,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe5,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x43,0x03,0x00,0x00,
+0xea,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe9,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xed,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x4a,0x03,0x00,0x00,0x68,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x41,0x03,0x00,0x00,
+0x02,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x4d,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x01,0x03,0x00,0x00,0x02,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x05,0x03,0x00,0x00,
+0x00,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x07,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x09,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0d,0x03,0x00,0x00,0x08,0x03,0x00,0x00,
+0x09,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x08,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x4f,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x10,0x03,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x15,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x13,0x03,0x00,0x00,
+0x14,0x03,0x00,0x00,0x15,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0xfd,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x19,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x15,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x13,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x14,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x1e,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1c,0x03,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x03,0x00,0x00,0xfd,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x28,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x26,0x03,0x00,0x00,0x29,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0x31,0x03,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x33,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x4b,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x35,0x03,0x00,0x00,0x37,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x38,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xff,0x01,0x00,0x00,0x3d,0x03,0x00,0x00,0x22,0x03,0x00,0x00,
+0x35,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3d,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x1e,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x07,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x02,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x02,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x03,0x00,0x00,0x4d,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xff,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x01,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xea,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xea,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q5_k_f32_fp32_len = 12456;
+
+unsigned char matmul_q6_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x43,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xa4,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x31,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb7,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xb8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb8,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xb8,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xba,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xba,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa4,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xea,0x02,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xeb,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xeb,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xeb,0x02,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xed,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xed,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x15,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x2f,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x32,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x42,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x43,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x49,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x66,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xad,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xae,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xae,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xb7,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb8,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb9,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf9,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x10,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x27,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x26,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x28,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xea,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xeb,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0xec,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xec,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x28,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x35,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x67,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x22,0x03,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x23,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x23,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa0,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x12,0x03,0x00,0x00,0x79,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xaa,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa8,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x2a,0x03,0x00,0x00,0xc1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc5,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc9,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xca,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x23,0x03,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x93,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x26,0x03,0x00,0x00,
+0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x2a,0x03,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xe4,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe7,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x30,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x15,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0x30,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xef,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xea,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0x13,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x42,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x30,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x42,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x30,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x42,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x66,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0x44,0x01,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x10,0x02,0x00,0x00,0x11,0x02,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x11,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x42,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf3,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x30,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x43,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x19,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1d,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x18,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x3f,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x25,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x20,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0x31,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x66,0x01,0x00,0x00,0x3d,0x02,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x10,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x3f,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x3f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x21,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x45,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x47,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4b,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x46,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x36,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x4f,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x53,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x55,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x38,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x57,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x5b,0x02,0x00,0x00,0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x5f,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x63,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x38,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x36,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x10,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x72,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x10,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc3,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x7e,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x38,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x55,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x36,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x45,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x47,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x2c,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x12,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x96,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0xad,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb0,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x14,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb8,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x14,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0x13,0x03,0x00,0x00,
+0x31,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x16,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd0,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x0a,0x03,0x00,0x00,0xd5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x18,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd4,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd8,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xde,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x16,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe7,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x16,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x18,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x13,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x16,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xff,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x00,0x03,0x00,0x00,0x02,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x03,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x06,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xc5,0x01,0x00,0x00,
+0x08,0x03,0x00,0x00,0xed,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x08,0x03,0x00,0x00,
+0x07,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0x13,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q6_k_f32_len = 11744;
+
+unsigned char matmul_q6_k_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x64,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xc5,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x30,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x31,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x89,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb6,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xb7,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb7,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xb7,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x03,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x0c,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x0c,0x03,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0e,0x03,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0e,0x03,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x15,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x16,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0x2f,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x32,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x32,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x35,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x42,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x43,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x49,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x66,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0xaf,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb0,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb0,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x18,0x00,0x04,0x00,
+0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xb8,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbb,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1a,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,0x19,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1b,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x31,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x48,0x02,0x00,0x00,0x2e,0x01,0x00,0x00,0x47,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x0b,0x03,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x0c,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x0d,0x03,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,
+0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xde,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x35,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x29,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x49,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x29,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x98,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x66,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x67,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x49,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x29,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x98,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x43,0x03,0x00,0x00,0x8d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x44,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x44,0x03,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x93,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x97,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x44,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x4b,0x03,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xbb,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xbb,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xbb,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x66,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xbb,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xbb,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xbb,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x66,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe4,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xbb,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xbb,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x44,0x03,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x47,0x03,0x00,0x00,0xfb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x02,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x02,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0xac,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x08,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x51,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x36,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x51,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x0c,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x10,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x63,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x63,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x14,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x18,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x13,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x63,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x51,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x63,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x44,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x31,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x32,0x02,0x00,0x00,0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x63,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0d,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x51,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x52,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3a,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3e,0x02,0x00,0x00,0x39,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x60,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x46,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x41,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x52,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x60,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x52,0x03,0x00,0x00,0x52,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x60,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x66,0x01,0x00,0x00,0x5e,0x02,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x5d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x5f,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x31,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x60,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x52,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x38,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x66,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x53,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x53,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x68,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x6c,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x67,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x57,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x57,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x74,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x59,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7c,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x80,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x84,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x53,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0x59,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x57,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x31,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x95,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x31,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9f,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x5b,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x59,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x57,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x69,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x69,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x53,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x66,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x68,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x4d,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x02,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x33,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x97,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0xce,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x34,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcd,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd1,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x35,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd9,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x35,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x34,0x03,0x00,0x00,0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xeb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xeb,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x2d,0x03,0x00,0x00,
+0xee,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x37,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xed,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf1,0x02,0x00,0x00,
+0xec,0x02,0x00,0x00,0xed,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x39,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf5,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf9,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x39,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x01,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xff,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x00,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,0x37,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x05,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x04,0x03,0x00,0x00,0x06,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x01,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0xff,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0x00,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x0a,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x08,0x03,0x00,0x00,
+0x09,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x09,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,0x37,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x14,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x12,0x03,0x00,0x00,0x15,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x16,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0x17,0x03,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x19,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x34,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,0x37,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x03,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x20,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x35,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x03,0x00,0x00,0x21,0x03,0x00,0x00,0x23,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x03,0x00,0x00,
+0x24,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0xca,0x00,0x00,0x00,
+0x26,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x28,0x03,0x00,0x00,0x27,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xbb,0x01,0x00,0x00,0x29,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x35,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x29,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x39,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xee,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x37,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xed,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x35,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xce,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xce,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q6_k_f32_aligned_len = 12324;
+
+unsigned char matmul_q6_k_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x3b,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x9c,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x30,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x30,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x30,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x32,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x32,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb3,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb4,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xb4,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb4,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb6,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9c,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe2,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xe3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xe3,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xe3,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe5,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe5,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x15,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x16,0x00,0x03,0x00,
+0x2f,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x30,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x44,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xad,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xae,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xae,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xb2,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb8,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xf4,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x21,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x22,0x02,0x00,0x00,0x07,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xe2,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xe3,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe4,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xe4,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x22,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x4a,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x98,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x2d,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x66,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x4a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x2a,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x4a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x2a,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x98,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x8b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x91,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x95,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x22,0x03,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x65,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x65,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc1,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x65,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc7,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0xb8,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x65,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xce,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0x1e,0x03,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x22,0x03,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x24,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0x83,0x02,0x00,0x00,0xdf,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x24,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xde,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe2,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x0f,0x02,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0x28,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xea,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,0xed,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x28,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x28,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x01,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x65,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0x45,0x01,0x00,0x00,
+0x08,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x0b,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,0x28,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x11,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x17,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x13,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x12,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x37,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1f,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x1b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x29,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x37,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x29,0x03,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x37,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x24,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x65,0x01,0x00,0x00,0x37,0x02,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x39,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x37,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x19,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1b,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x29,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x11,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x45,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x45,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x41,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x40,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4d,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x48,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x30,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x51,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x55,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x59,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5d,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x58,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x30,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x66,0x02,0x00,0x00,
+0x32,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0x32,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x6c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x76,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x32,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x30,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x2e,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x47,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x42,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x24,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x97,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0xa5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xa4,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa8,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0x06,0x03,0x00,0x00,
+0xad,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xac,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb0,0x02,0x00,0x00,
+0xab,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x2b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0x04,0x03,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc4,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc8,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xca,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xca,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x10,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd0,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xd8,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd6,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd8,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0xde,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xe1,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdf,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x10,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xb8,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x00,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x10,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xca,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x0c,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q6_k_f32_aligned_fp32_len = 11592;
+
+unsigned char matmul_q6_k_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x3c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2f,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2f,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x31,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x31,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x33,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x87,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x88,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb5,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xb6,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9d,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe3,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xe4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xe4,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xe4,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe6,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe6,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x15,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x16,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x2f,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x32,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x32,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x43,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x49,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xab,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xac,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xac,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xb5,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb7,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb7,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc3,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x22,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xe3,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xe4,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe5,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0xe5,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x23,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x23,0x03,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x1f,0x03,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x41,0x00,0x07,0x00,0x35,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x3b,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x66,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x49,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x29,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x49,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x29,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x97,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x2c,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x8b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x1c,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x91,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x95,0x01,0x00,0x00,
+0x90,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x1c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9d,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xa0,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9e,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x0b,0x03,0x00,0x00,0x79,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xa8,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x23,0x03,0x00,0x00,0xbf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc3,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x65,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc6,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x65,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xcf,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x92,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x1c,0x03,0x00,0x00,0xd2,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x1f,0x03,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x23,0x03,0x00,0x00,0xd9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x84,0x02,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x25,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x29,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x10,0x02,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x29,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe7,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf3,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x29,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x29,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x44,0x01,0x00,0x00,0x09,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x3b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x29,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x3e,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x2a,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x14,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x18,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x13,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1a,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x38,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x38,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1c,0x02,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x20,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x38,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x38,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x65,0x01,0x00,0x00,
+0x38,0x02,0x00,0x00,0xad,0x01,0x00,0x00,0x37,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3a,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x38,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x15,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x15,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x2a,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x12,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x2b,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x42,0x02,0x00,0x00,0x43,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x46,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4a,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x4e,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x50,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x31,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x52,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x56,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x51,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x33,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5e,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x2b,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x31,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x33,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x66,0x02,0x00,0x00,0x33,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xc3,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x77,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x33,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x53,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x31,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x2f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x48,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x4a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x43,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x43,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x2b,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x40,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x25,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x96,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x48,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa5,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa9,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa4,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xab,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0xae,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb1,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0x05,0x03,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x0f,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc5,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc9,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x03,0x03,0x00,0x00,0xce,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x11,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcd,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd1,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x37,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xd9,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd7,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xd8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd9,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd9,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe2,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe0,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x0c,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x0d,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0xff,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xc3,0x01,0x00,0x00,
+0x01,0x03,0x00,0x00,0xe6,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x01,0x03,0x00,0x00,
+0x00,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xce,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x11,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcb,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa6,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x0c,0x03,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x02,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q6_k_f32_fp32_len = 11624;
+
+unsigned char matmul_q8_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x50,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x06,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x08,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x36,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x64,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x64,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x64,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x66,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x66,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x96,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x97,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x97,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x97,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x99,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x99,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x02,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x1e,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x17,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x15,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x26,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x51,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x59,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5a,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x63,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x71,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa5,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbc,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xd4,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x08,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x96,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x97,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x98,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x98,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xa6,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd4,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x38,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x15,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x10,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x10,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc3,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xd0,0x02,0x00,0x00,0x39,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3f,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x4e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4c,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x56,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x54,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x55,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x71,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x75,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x56,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x40,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x82,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0xd4,0x02,0x00,0x00,0x86,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x89,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x37,0x02,0x00,0x00,
+0x90,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0xda,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x93,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xde,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x97,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9b,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9f,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa3,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0xde,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xda,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xbc,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xbd,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x98,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x98,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xde,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x95,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x97,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xcd,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd1,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0xed,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,
+0xda,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xbc,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xeb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0xed,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0xdf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf1,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x35,0x02,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf3,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x33,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfb,0x01,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xff,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfa,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x01,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x31,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x03,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x07,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x02,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x09,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x09,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0f,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x13,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xbc,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xbc,0x01,0x00,0x00,0x26,0x02,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x13,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2a,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x09,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x0b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x01,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf9,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x90,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x90,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x02,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x96,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x56,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x5c,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5e,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x64,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x78,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7c,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x80,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x84,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8c,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8a,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x95,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x93,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x71,0x01,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x95,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x95,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x80,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x76,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x61,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x59,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q8_0_f32_len = 10588;
+
+unsigned char matmul_q8_0_f32_aligned_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x14,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x09,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x73,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x54,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x07,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x09,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x09,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x37,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x64,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x64,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x64,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x64,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x64,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x66,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x66,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x73,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xba,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xba,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xba,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x03,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x06,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x08,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x09,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x5c,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x5d,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x18,0x00,0x04,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x68,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xdf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf7,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xb9,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xba,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbb,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbb,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x05,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdf,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xef,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x0d,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x16,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0x16,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x11,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x11,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0xc4,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2f,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2e,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0xf3,0x02,0x00,0x00,0x3a,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x44,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2e,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x68,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2e,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x68,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2e,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9a,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x68,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xa5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xf7,0x02,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xac,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x5a,0x02,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xfd,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb2,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb6,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x01,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xba,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xbe,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xb9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x13,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc2,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc6,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x01,0x03,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x13,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0x01,0x03,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0x13,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xca,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x13,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x01,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xba,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x02,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe8,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x10,0x02,0x00,0x00,0xef,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0x10,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf0,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf4,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x02,0x03,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x10,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x02,0x03,0x00,0x00,
+0x00,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0xfe,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x10,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x07,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x01,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x5e,0x01,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,
+0x0e,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x10,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf0,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe9,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x14,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x14,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x58,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x03,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x16,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1a,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x1e,0x02,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x22,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1d,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x27,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x26,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2a,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x25,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x32,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2d,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x03,0x03,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x07,0x03,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x0b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0xdf,0x01,0x00,0x00,0x42,0x02,0x00,0x00,0xca,0x01,0x00,0x00,
+0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xdf,0x01,0x00,0x00,0x49,0x02,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x36,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0xca,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x4d,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x27,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x27,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x09,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x24,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x26,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x07,0x03,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x17,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x17,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x03,0x03,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x14,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x16,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb3,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x67,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x6b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x7b,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7f,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x81,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x83,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x87,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x82,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x68,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x99,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9b,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9f,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa7,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xaf,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xad,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xae,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaf,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb6,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x68,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb8,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9c,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x99,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x9b,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x81,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x83,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q8_0_f32_aligned_len = 11200;
+
+unsigned char matmul_q8_0_f32_aligned_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xea,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x49,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x07,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x08,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x09,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x09,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x09,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x34,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x60,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x61,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x61,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8f,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x90,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x90,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x90,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x92,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xc2,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xc4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x03,0x01,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x1e,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x17,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x5a,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x5b,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x5b,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x5f,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x62,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x62,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x65,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x8f,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x91,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xa2,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xb0,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x9f,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x85,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xde,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xef,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x0d,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x16,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x16,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x04,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x11,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x11,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2e,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0xc4,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2d,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x38,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0xca,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x42,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0xab,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x65,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x68,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x65,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x65,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x74,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x65,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0xca,0x02,0x00,0x00,0x7e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,0x85,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x89,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x30,0x02,0x00,0x00,0x8c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8b,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8f,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x93,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x97,0x01,0x00,0x00,
+0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x9f,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x9b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb8,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x94,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc0,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc7,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xd8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2d,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xe6,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xef,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf2,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xdd,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x2a,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfe,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x02,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0x28,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x06,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0a,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0c,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x19,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcd,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0xca,0x00,0x00,0x00,0x15,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xc4,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x23,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xef,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x97,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x5a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x48,0x00,0x00,0x00,0x43,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x51,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x55,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x57,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x59,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x5d,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x58,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xd8,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x69,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x71,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x78,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc2,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x85,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x83,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x85,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0xc2,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0x8e,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8c,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x9d,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcd,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xca,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x65,0x01,0x00,0x00,0xad,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x59,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x51,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t matmul_q8_0_f32_aligned_fp32_len = 10452;
+
+unsigned char matmul_q8_0_f32_fp32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xea,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x49,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x63,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x08,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x08,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x34,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x61,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x62,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x64,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x64,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8f,0x02,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x90,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x90,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x90,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x92,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x92,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x10,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcc,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x02,0x01,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x03,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x07,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x1e,0x00,0x03,0x00,0x08,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x17,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x15,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x27,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x57,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x58,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x58,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x61,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x63,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x63,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x6f,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x51,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa1,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0xa2,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xce,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x8f,0x02,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x20,0x00,0x04,0x00,0x91,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x90,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,0x91,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x05,0x00,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xa2,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x07,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xb1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xaf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x84,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0x8e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0x38,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xeb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x02,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x03,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x15,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x03,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x10,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x10,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2c,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0xc9,0x02,0x00,0x00,0x37,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0xca,0x02,0x00,0x00,0xa6,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3d,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x41,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0xca,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x4c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x4b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x79,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0xc1,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x54,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x52,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x53,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x6f,0x01,0x00,0x00,0x70,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x54,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x73,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x78,0x01,0x00,0x00,
+0x79,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x7b,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x54,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x54,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0xca,0x02,0x00,0x00,
+0x7e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x82,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x85,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x89,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x30,0x02,0x00,0x00,0x8c,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8b,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x8f,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x91,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x93,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x97,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x92,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x99,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x99,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0xba,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9f,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xd7,0x02,0x00,0x00,0x62,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xe9,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x91,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xc0,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc4,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcc,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x5a,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd8,0x02,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2c,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc8,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc1,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xbe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc0,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xef,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xee,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf2,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xed,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf4,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0x2c,0x02,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xdd,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf6,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfa,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x2a,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfe,0x01,0x00,0x00,0xff,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x02,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xfd,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x28,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x06,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0a,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0xa3,0x01,0x00,0x00,0x19,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0xd0,0x01,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x23,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x23,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x04,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x06,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xff,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfc,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xef,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xec,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xee,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x89,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x0c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd5,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x56,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x96,0x00,0x00,0x00,
+0x37,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x5a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x14,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x48,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x49,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0x4c,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xbe,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x51,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x55,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x57,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x59,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x5d,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x58,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x38,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x69,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x3f,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x71,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x75,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x70,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x77,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x79,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7d,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x78,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x65,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x80,0x02,0x00,0x00,0x37,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x85,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x83,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x85,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x85,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0xc1,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8e,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8c,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x14,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x63,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x6f,0x01,0x00,0x00,0xad,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8e,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8e,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x77,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x79,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x72,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x72,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x6f,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0x71,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x59,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x52,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x52,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x4f,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x51,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t matmul_q8_0_f32_fp32_len = 10468;
+
+unsigned char mul_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x67,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0a,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x15,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x15,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2f,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x48,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x49,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x49,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4b,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x53,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x54,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x54,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x54,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x61,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1e,0x00,0x1e,0x00,0x15,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x0d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x15,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x2d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x31,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x37,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x3e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x19,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x48,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4a,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x50,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x53,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x55,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x55,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x2d,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x30,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xae,0x00,0x05,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x38,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xad,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x17,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xca,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x17,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0x02,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xff,0x01,0x00,0x00,
+0x03,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x07,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x09,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0xca,0x01,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x17,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0xdd,0x01,0x00,0x00,0x51,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x59,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x17,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0x61,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x17,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x66,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x50,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x62,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_f32_len = 4276;
+
+unsigned char mul_mat_vec_f16_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x48,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x38,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x38,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x38,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x38,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x69,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbd,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xbd,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xfc,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xfd,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xfd,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xff,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x16,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x17,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x33,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,
+0x38,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x39,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x85,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x95,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xbc,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xbd,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xfc,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x30,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x27,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x33,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x33,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x33,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x32,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x95,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x94,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x27,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x20,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x27,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x20,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0xad,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x20,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x20,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xc7,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x70,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0xde,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xac,0x00,0x05,0x00,0x95,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x6a,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x95,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xea,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x89,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xea,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xea,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe1,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x95,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xfb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x74,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x89,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x06,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_f16_f16_f32_len = 3716;
+
+unsigned char mul_mat_vec_f16_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x38,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x38,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x38,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x38,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x69,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbd,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xbd,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xfb,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xfc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xfc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x16,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x17,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x33,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,
+0x38,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x39,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x39,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x85,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x95,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xbc,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xbd,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xfb,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xfc,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x30,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x27,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x33,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x33,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x33,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x32,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3c,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x3a,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8c,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x3c,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x95,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x94,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8d,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x83,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x27,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x20,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x27,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x20,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0xad,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc5,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc5,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0xd2,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x08,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8a,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8e,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x70,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xac,0x00,0x05,0x00,0x95,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x6a,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x95,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x89,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x95,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xfa,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf8,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x74,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x89,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfa,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfa,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_f16_f32_f32_len = 3684;
+
+unsigned char mul_mat_vec_f32_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x35,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x35,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x35,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x35,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x66,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xba,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xfb,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xfc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xfc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x16,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x17,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,
+0x35,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x36,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x36,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x39,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x81,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x82,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x92,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xb9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xbb,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xfb,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xfc,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x2d,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x25,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x30,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x30,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x30,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x30,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x30,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x39,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x39,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x67,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x25,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0xae,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x25,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc3,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc3,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0xd2,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x08,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x87,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xac,0x00,0x05,0x00,0x92,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x67,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x92,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xde,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x92,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xfa,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf8,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x83,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfa,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfa,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_f32_f16_f32_len = 3684;
+
+unsigned char mul_mat_vec_f32_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x17,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x35,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x35,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x35,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x35,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x66,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xba,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xba,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xba,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf7,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xf8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xf8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xfa,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x16,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x2d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x0d,0x00,0x35,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x36,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x39,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x81,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x82,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x92,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xb9,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xf7,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xf8,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x2d,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x25,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x30,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x30,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x30,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x30,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x30,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x39,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x37,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x39,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x37,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x37,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x89,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x67,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x25,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0xae,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x25,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0xce,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x89,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xda,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xd9,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xac,0x00,0x05,0x00,
+0x92,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x67,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xdc,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe0,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdb,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x92,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xe5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe5,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x6d,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xf0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xda,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x92,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xf6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf4,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x86,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x00,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_f32_f32_f32_len = 3616;
+
+unsigned char mul_mat_vec_id_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x22,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x18,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x38,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x41,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x41,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x41,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x41,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x41,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x41,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x41,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x41,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x41,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x41,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x58,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x5c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x72,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xab,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xac,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xac,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xac,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xae,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xae,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xea,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xeb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xeb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xed,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf5,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x16,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x17,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x33,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x37,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x38,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x39,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x1e,0x00,0x0b,0x00,
+0x41,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x42,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x31,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x73,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x74,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x74,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x84,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xab,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xac,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xea,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xec,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x30,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x33,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x33,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x33,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3c,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x45,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x45,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x43,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x45,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x43,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x45,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x43,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x7b,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x45,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x84,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x83,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x85,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x72,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x27,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0xa0,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x20,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x27,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x20,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x9c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xb4,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xb4,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x5f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x7b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x7d,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x5f,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xac,0x00,0x05,0x00,0x84,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x84,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x78,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd8,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd8,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x5f,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd0,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x84,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x78,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xb4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_id_f16_f32_len = 3608;
+
+unsigned char mul_mat_vec_id_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x1c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2f,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x34,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x35,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x35,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x37,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x3e,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x3e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x3e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x55,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x59,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x62,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa8,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xa9,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xa9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xa9,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xab,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xab,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe6,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe7,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf1,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x16,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x2d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x30,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x34,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x36,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x39,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1e,0x00,0x0b,0x00,0x3e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x3f,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x42,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x75,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x81,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xa9,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xe6,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x2d,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x30,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x30,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x30,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x30,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x30,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x39,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x42,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x42,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x40,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x75,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x76,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x42,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x82,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x9d,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x25,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x99,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x1f,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x1f,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0xbd,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x08,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x76,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x5c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x78,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x5c,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xc9,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xac,0x00,0x05,0x00,0x81,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x56,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcb,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xca,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x81,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd2,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x75,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x76,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x5c,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcc,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcc,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xc9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcb,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x81,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xe5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x75,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1f,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe5,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_id_f32_f32_len = 3540;
+
+unsigned char mul_mat_vec_id_q2_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x1b,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa1,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xa6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xa6,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa8,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa8,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xef,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xf0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xf0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xf0,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf2,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf2,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf9,0x02,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x1e,0x00,0x0b,0x00,0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x80,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x82,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x82,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x95,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x9f,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa1,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xa2,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xa6,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xac,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xc2,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcd,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0x70,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x08,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xef,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xf0,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf1,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xf1,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x0f,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0x72,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x1e,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x00,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x27,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x25,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x02,0x03,0x00,0x00,
+0x05,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x25,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x08,0x03,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0xfe,0x02,0x00,0x00,0x09,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x27,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0x25,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0xfe,0x02,0x00,0x00,
+0x10,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x64,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x95,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x54,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x96,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x53,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x41,0x00,0x08,0x00,0xac,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xac,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x80,0x00,0x00,0x00,
+0x17,0x03,0x00,0x00,0x89,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x80,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x17,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xb1,0x00,0x05,0x00,0x95,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x30,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd5,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x80,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd5,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xcd,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd5,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x80,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd5,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x80,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x80,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xcd,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd5,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xda,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x80,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x30,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x80,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xcd,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd5,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x80,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x9e,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x30,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xcd,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xd5,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x80,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x80,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xcd,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd5,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xda,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x80,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x80,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xcd,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd5,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc3,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x80,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x9e,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x35,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0xcd,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xd5,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x80,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x80,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0xda,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x80,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x16,0x03,0x00,0x00,0x02,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x0d,0x02,0x00,0x00,0xce,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x2e,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x80,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x23,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x80,0x00,0x00,0x00,
+0x31,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x30,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x23,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x9e,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x43,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x4b,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,
+0x59,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x59,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x80,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0x6a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,0x72,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xda,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x80,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x92,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x9a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x9e,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x80,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0xba,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x80,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xe3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,0xda,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xb8,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x80,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xad,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x81,0x00,0x05,0x00,0x80,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x17,0x03,0x00,0x00,0xbb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0x15,0x03,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbb,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbd,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x80,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x17,0x03,0x00,0x00,0x7f,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0xc9,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x80,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x8b,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x80,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x8b,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0x91,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x91,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x12,0x03,0x00,0x00,
+0x41,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x90,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd3,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd3,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0x84,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xac,0x00,0x05,0x00,
+0x95,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x13,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd5,0x02,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd9,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd4,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x95,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,0x60,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xde,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xdc,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xdd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x60,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8a,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x83,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8a,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x83,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x81,0x00,0x05,0x00,0x80,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe5,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xde,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xde,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xd6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd6,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x13,0x03,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd5,0x02,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x95,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0x60,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xee,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xec,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x11,0x03,0x00,0x00,0x45,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8a,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x83,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x80,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xcd,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf8,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xee,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xee,0x02,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_id_q2_k_f32_len = 8412;
+
+unsigned char mul_mat_vec_id_q3_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x63,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xab,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xaf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xaf,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xb1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xb1,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc6,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3b,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x3c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x3c,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3e,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x45,0x03,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x1e,0x00,0x0b,0x00,0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x88,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x92,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xa0,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xa9,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xab,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xae,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0xaf,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xb7,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc5,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x60,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x45,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x50,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x70,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x08,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x3b,0x03,0x00,0x00,
+0x88,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x3c,0x03,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x20,0x00,0x04,0x00,0x3d,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x3d,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x0f,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x11,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x1e,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,
+0x50,0x03,0x00,0x00,0x25,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x50,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,0x51,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x25,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x55,0x03,0x00,0x00,0x54,0x03,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x56,0x03,0x00,0x00,
+0x4a,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x27,0x00,0x00,0x00,0x57,0x03,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0x57,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x56,0x03,0x00,0x00,
+0x58,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x25,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x52,0x03,0x00,0x00,
+0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x93,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x99,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0x64,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xa0,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x54,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa1,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x9a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x41,0x00,0x07,0x00,0xb7,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xae,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbe,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x88,0x00,0x00,0x00,
+0x62,0x03,0x00,0x00,0x91,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x0d,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x17,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb1,0x00,0x05,0x00,0xa0,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x03,0x00,0x00,0x30,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xbf,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x59,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x61,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x88,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xa0,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0xce,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd0,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xee,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x88,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x30,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xa0,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x88,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x88,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0xce,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd0,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x74,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0xe2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x74,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x26,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x76,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0xee,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x88,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x6e,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0xa0,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x88,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xce,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd0,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,0x26,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x76,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xee,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x88,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x6e,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0x78,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0xa0,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x88,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0xce,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd0,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf3,0x01,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x01,0x02,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x02,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x05,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x05,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0xee,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x88,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0xee,0x01,0x00,0x00,0x0a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x04,0x01,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x08,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0xab,0x00,0x05,0x00,
+0xa0,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x29,0x02,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x88,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0xce,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd0,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0xee,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x88,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x14,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x30,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x21,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xab,0x00,0x05,0x00,
+0xa0,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x88,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,
+0xce,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd0,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,0x86,0x02,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x86,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x87,0x02,0x00,0x00,0x74,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x71,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x76,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xee,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x88,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x81,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x6e,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x94,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xa0,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x17,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x88,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xce,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd0,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xd6,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xb3,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x74,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x6e,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x71,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,0x82,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xee,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x88,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xe7,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x6e,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xab,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6e,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x21,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x6e,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x00,0x03,0x00,0x00,0xdc,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x03,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x05,0x03,0x00,0x00,
+0x04,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xa0,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x05,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x06,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x07,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x08,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x88,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0xc1,0x02,0x00,0x00,0x81,0x00,0x05,0x00,
+0x88,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x62,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x61,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x93,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x88,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x62,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x93,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x41,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x99,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9b,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x03,0x00,0x00,0x8c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0xac,0x00,0x05,0x00,
+0xa0,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x21,0x03,0x00,0x00,
+0x22,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x25,0x03,0x00,0x00,0x20,0x03,0x00,0x00,0x21,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x20,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xa0,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x60,0x00,0x00,0x00,
+0x5f,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x2a,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x28,0x03,0x00,0x00,
+0x29,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x92,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x92,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x31,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0x88,0x00,0x00,0x00,0x33,0x03,0x00,0x00,
+0x32,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x31,0x03,0x00,0x00,0x33,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2a,0x03,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x1d,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x22,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x22,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x03,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xa0,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x60,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x3a,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x38,0x03,0x00,0x00,
+0x39,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0x5d,0x03,0x00,0x00,0x45,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x92,0x00,0x00,0x00,0x42,0x03,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x42,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd0,0x00,0x00,0x00,0x44,0x03,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,0x41,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x44,0x03,0x00,0x00,0x43,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x3a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3a,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_id_q3_k_f32_len = 10020;
+
+unsigned char mul_mat_vec_id_q4_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x44,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x1e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x47,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x57,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x57,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x57,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x71,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xc1,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xff,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x09,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x17,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x4d,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4e,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1e,0x00,0x0b,0x00,0x57,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x58,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x89,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x99,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc0,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xfe,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x45,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x48,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x49,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x49,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x47,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x52,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5a,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x59,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x90,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x90,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x99,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x98,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x92,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x9a,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x91,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x87,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x26,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x30,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x2e,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x39,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8e,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x74,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x90,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x92,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x74,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xac,0x00,0x05,0x00,
+0x99,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x6e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe8,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe3,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x99,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xed,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xec,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x8e,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xed,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xed,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x74,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe4,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x99,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfb,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x78,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x8a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0xc9,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x07,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_id_q4_0_f32_len = 4000;
+
+unsigned char mul_mat_vec_id_q4_1_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x51,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x55,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x56,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x58,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x58,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x5f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x5f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x5f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x5f,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x5f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x5f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x5f,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x5f,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x5f,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x5f,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x81,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xca,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xca,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x05,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x06,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x06,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x08,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x55,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x56,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x57,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x57,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x5a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1e,0x00,0x0b,0x00,0x5f,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x60,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x60,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x62,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x94,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xa0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xc7,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x05,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x07,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x4d,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x5a,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x58,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x62,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x62,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x61,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x62,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x62,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x94,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x95,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x97,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x97,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x75,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x62,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xa0,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa1,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0xbd,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x26,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x41,0x00,0x07,0x00,0x26,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x38,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x36,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd0,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x08,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x95,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x97,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x99,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xec,0x00,0x00,0x00,0xac,0x00,0x05,0x00,0xa0,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x75,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xef,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xea,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xa0,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf2,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x94,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x95,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xec,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xec,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xeb,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xa0,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x83,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x04,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x94,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd0,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x04,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x04,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_id_q4_1_f32_len = 4068;
+
+unsigned char mul_mat_vec_id_q4_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xce,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x25,0x02,0x00,0x00,
+0xa9,0x03,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xac,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xae,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xae,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xae,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xb0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb2,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x22,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x23,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x23,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x25,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x25,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa6,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xa7,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xa7,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xa7,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa9,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa9,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb0,0x03,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x1e,0x00,0x0b,0x00,0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x86,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x9b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xac,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0xae,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xb0,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xb1,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb1,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb6,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,
+0x42,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x43,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x22,0x02,0x00,0x00,0x86,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x23,0x02,0x00,0x00,0x22,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x24,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x24,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x29,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x23,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x08,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xa6,0x03,0x00,0x00,0x86,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xa7,0x03,0x00,0x00,0xa6,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa8,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xa7,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0xa8,0x03,0x00,0x00,
+0xa9,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x0f,0x00,0x00,0x00,0xb0,0x03,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0xb4,0x03,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb5,0x03,0x00,0x00,
+0xb4,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x1e,0x00,0x00,0x00,
+0xb7,0x03,0x00,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb5,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xb8,0x03,0x00,0x00,0xb7,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,0xb8,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0xbb,0x03,0x00,0x00,
+0x25,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbc,0x03,0x00,0x00,0xbb,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x03,0x00,0x00,
+0xb9,0x03,0x00,0x00,0xbc,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x27,0x00,0x00,0x00,0xbf,0x03,0x00,0x00,0x25,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x03,0x00,0x00,0xbf,0x03,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x03,0x00,0x00,0xb5,0x03,0x00,0x00,
+0xc0,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,
+0xc2,0x03,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc3,0x03,0x00,0x00,
+0xc2,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x03,0x00,0x00,0xc1,0x03,0x00,0x00,0xc3,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0xc6,0x03,0x00,0x00,
+0x25,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x03,0x00,0x00,0xc6,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x03,0x00,0x00,
+0xb5,0x03,0x00,0x00,0xc7,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x27,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0xbd,0x03,0x00,0x00,0x53,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x91,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x94,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xc9,0x03,0x00,0x00,
+0x64,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x87,0x03,0x00,0x00,
+0x95,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x9b,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0xc9,0x03,0x00,0x00,0x54,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x9c,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x95,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xc9,0x03,0x00,0x00,0x53,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0xc9,0x03,0x00,0x00,
+0x41,0x00,0x08,0x00,0xb6,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa8,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xb6,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xc9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xc9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xc9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xc9,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0xca,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0xc3,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0x30,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xc9,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xda,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x30,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x30,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x30,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xc9,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xc9,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xc9,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xc9,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x9e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xa1,0x01,0x00,0x00,
+0xa0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xc9,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xcc,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xc9,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0xdb,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xdc,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xc9,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xc9,0x00,0x00,0x00,
+0xf6,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0xcc,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xda,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0xe8,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x26,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0xc4,0x03,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x2d,0x02,0x00,0x00,0x7a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,
+0x33,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x70,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x87,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x34,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x2d,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x41,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x94,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0x38,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0xa2,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x70,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0xbc,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0xc4,0x03,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xd2,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,
+0x85,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x70,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x41,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x92,0x02,0x00,0x00,0xee,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x92,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x9a,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x05,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0x70,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xba,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,0x70,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x25,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xbc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x70,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xee,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x52,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xfd,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x52,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x70,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,0x33,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x85,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0xad,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0xea,0x02,0x00,0x00,0x0a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0xce,0x02,0x00,0x00,0x14,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x67,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x1e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x28,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0xea,0x02,0x00,0x00,0x32,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x47,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x46,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x42,0x03,0x00,0x00,
+0xce,0x02,0x00,0x00,0x3c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,0x72,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x50,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x46,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x99,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x56,0x03,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x50,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x64,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0xea,0x02,0x00,0x00,0x5a,0x03,0x00,0x00,0x70,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x70,0x03,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x86,0x00,0x00,0x00,
+0x71,0x03,0x00,0x00,0x77,0x02,0x00,0x00,0x70,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x72,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x71,0x03,0x00,0x00,0x70,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x75,0x03,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x77,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x75,0x03,0x00,0x00,0x72,0x03,0x00,0x00,0x70,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,0x36,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x86,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x7a,0x03,0x00,0x00,0x77,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0x7f,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xcd,0x03,0x00,0x00,0x80,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x86,0x00,0x00,0x00,0x81,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,
+0xcd,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x83,0x03,0x00,0x00,0x91,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x84,0x03,0x00,0x00,0x83,0x03,0x00,0x00,
+0x81,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x91,0x00,0x00,0x00,
+0x84,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x03,0x00,0x00,0xc9,0x03,0x00,0x00,0x41,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x94,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x96,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x41,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x03,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xca,0x03,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,
+0x8d,0x03,0x00,0x00,0xac,0x00,0x05,0x00,0x9b,0x00,0x00,0x00,
+0x90,0x03,0x00,0x00,0xca,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x8c,0x03,0x00,0x00,0x8d,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x90,0x03,0x00,0x00,
+0x8b,0x03,0x00,0x00,0x8c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8b,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,0x9b,0x00,0x00,0x00,
+0x93,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0xca,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x95,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x93,0x03,0x00,0x00,0x94,0x03,0x00,0x00,
+0x95,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x94,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x03,0x00,0x00,
+0x60,0x00,0x00,0x00,0xca,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x90,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,0x89,0x00,0x00,0x00,
+0x99,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x9b,0x03,0x00,0x00,0x9a,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x90,0x00,0x00,0x00,0x9c,0x03,0x00,0x00,0x89,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x9d,0x03,0x00,0x00,0x9c,0x03,0x00,0x00,0x81,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x9e,0x03,0x00,0x00,0x9d,0x03,0x00,0x00,
+0x9b,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x9c,0x03,0x00,0x00,
+0x9e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x95,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x95,0x03,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x88,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8d,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x03,0x00,0x00,0xca,0x03,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8c,0x03,0x00,0x00,0xaa,0x00,0x05,0x00,0x9b,0x00,0x00,0x00,
+0xa3,0x03,0x00,0x00,0x60,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xa5,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa3,0x03,0x00,0x00,0xa4,0x03,0x00,0x00,
+0xa5,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0xa4,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x03,0x00,0x00,
+0xc8,0x03,0x00,0x00,0x45,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x90,0x00,0x00,0x00,0xad,0x03,0x00,0x00,0x89,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xae,0x03,0x00,0x00,0xad,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0x29,0x02,0x00,0x00,0xaf,0x03,0x00,0x00,0xa9,0x03,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xac,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xaf,0x03,0x00,0x00,0xae,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa5,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0xa5,0x03,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_id_q4_k_f32_len = 9944;
+
+unsigned char mul_mat_vec_id_q5_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x98,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1f,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x7e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x80,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x80,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x87,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x87,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x87,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x87,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x87,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x87,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x87,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xed,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xee,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xee,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf0,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xf0,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x2c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2e,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2e,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x22,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x29,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x57,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x00,0x00,0x80,0x41,
+0x17,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x7d,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x7e,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x1e,0x00,0x0b,0x00,0x87,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xb5,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xb6,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xb6,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xba,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xc6,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xed,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xef,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xef,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x2b,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x2d,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x76,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x67,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8a,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x89,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x8a,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x8a,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x89,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8a,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x89,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xba,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbd,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8a,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xc6,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0xe3,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x41,0x00,0x07,0x00,0x29,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x23,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x32,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x23,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x31,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x36,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x32,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x23,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x31,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x45,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0xda,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x57,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x23,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x55,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x5c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x45,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xf6,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xf6,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x08,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0xbb,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xbb,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbf,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0f,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0xbf,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0xac,0x00,0x05,0x00,0xc6,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x15,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x10,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc6,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x1a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x19,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xba,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xbb,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x1a,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x12,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x12,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x31,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x11,0x01,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2a,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x29,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xba,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xf6,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x25,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_id_q5_0_f32_len = 4512;
+
+unsigned char mul_mat_vec_id_q5_1_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x73,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7b,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x82,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x82,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x82,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x82,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x82,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x82,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x82,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x82,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x82,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa2,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xe9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xe9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xeb,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xeb,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x26,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x27,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x29,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x29,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x31,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x1c,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x37,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x74,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x79,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1e,0x00,0x0b,0x00,
+0x82,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x83,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb1,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb1,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb5,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xc1,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xe8,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xea,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xea,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xf1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x26,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x27,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x28,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x71,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x62,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x74,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x74,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x74,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x73,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x7d,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x85,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x85,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x85,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x84,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x85,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xb5,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xb6,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb8,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x85,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x37,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x36,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x52,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x57,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x77,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0xda,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xf1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x08,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xb6,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb8,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xba,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x9c,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0a,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0a,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0xba,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0xac,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0b,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x15,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x13,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x14,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xb5,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb6,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x15,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x9c,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x0a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0c,0x01,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x25,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xb5,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xf1,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x25,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x25,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_id_q5_1_f32_len = 4392;
+
+unsigned char mul_mat_vec_id_q5_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb9,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x94,0x04,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xba,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xbd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xbd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xbd,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbf,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x2c,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x2d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2d,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x2d,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2f,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2f,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x91,0x04,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x92,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x92,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x92,0x04,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x94,0x04,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x94,0x04,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9b,0x04,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x1e,0x00,0x0b,0x00,0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x93,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x95,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x95,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xa8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xb5,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xba,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0xbb,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xbc,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xbd,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xc0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x51,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x2c,0x02,0x00,0x00,
+0x93,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x2d,0x02,0x00,0x00,
+0x2c,0x02,0x00,0x00,0x20,0x00,0x04,0x00,0x2e,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2d,0x02,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2e,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x33,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x73,0x04,0x00,0x00,0x08,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x91,0x04,0x00,0x00,0x93,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x92,0x04,0x00,0x00,0x91,0x04,0x00,0x00,
+0x20,0x00,0x04,0x00,0x93,0x04,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x92,0x04,0x00,0x00,0x3b,0x00,0x04,0x00,0x93,0x04,0x00,0x00,
+0x94,0x04,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x0f,0x00,0x00,0x00,0x9b,0x04,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x9f,0x04,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x04,0x00,0x00,
+0x9f,0x04,0x00,0x00,0x41,0x00,0x06,0x00,0x1e,0x00,0x00,0x00,
+0xa2,0x04,0x00,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa0,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xa3,0x04,0x00,0x00,0xa2,0x04,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x04,0x00,0x00,0xa3,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0xa6,0x04,0x00,0x00,
+0x25,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x04,0x00,0x00,0xa6,0x04,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa8,0x04,0x00,0x00,
+0xa4,0x04,0x00,0x00,0xa7,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x27,0x00,0x00,0x00,0xaa,0x04,0x00,0x00,0x25,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xab,0x04,0x00,0x00,0xaa,0x04,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x04,0x00,0x00,0xa0,0x04,0x00,0x00,
+0xab,0x04,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,
+0xad,0x04,0x00,0x00,0x25,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xae,0x04,0x00,0x00,
+0xad,0x04,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x04,0x00,0x00,0xac,0x04,0x00,0x00,0xae,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0xb1,0x04,0x00,0x00,
+0x25,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x04,0x00,0x00,0xb1,0x04,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x04,0x00,0x00,
+0xa0,0x04,0x00,0x00,0xb2,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x27,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0xa8,0x04,0x00,0x00,0x53,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x57,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x9e,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x04,0x00,0x00,0x64,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x72,0x04,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0xb4,0x04,0x00,0x00,0x54,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa9,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xb4,0x04,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0xb4,0x04,0x00,0x00,0x41,0x00,0x08,0x00,
+0xc3,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xb5,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xc3,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd4,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0xd3,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd4,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x30,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x30,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x30,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x74,0x01,0x00,0x00,0x30,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd4,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xc5,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,
+0x26,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x26,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xda,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd4,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,
+0x01,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x14,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x86,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0xe4,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x86,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x86,0x00,0x00,0x00,
+0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x86,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0xaf,0x04,0x00,0x00,0xae,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x33,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x34,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x84,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd4,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x17,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x91,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x79,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x93,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x97,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,0x67,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x9e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd4,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x17,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x93,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x68,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0xac,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x79,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd4,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x90,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x17,0x00,0x00,0x00,0x92,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x92,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x93,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0xb4,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0xc4,0x00,0x05,0x00,0x86,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x8f,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xad,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xae,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x33,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x93,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0xd3,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xc6,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x86,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0xab,0x00,0x05,0x00,
+0xa8,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x44,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x33,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0xef,0x02,0x00,0x00,0xee,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0xff,0x02,0x00,0x00,0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0xf2,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0x02,0x03,0x00,0x00,0xe8,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0xaf,0x04,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,
+0x09,0x03,0x00,0x00,0x2f,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x08,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x09,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0x3d,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0x92,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x16,0x03,0x00,0x00,0x15,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x16,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0x17,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x17,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x18,0x03,0x00,0x00,
+0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x0d,0x03,0x00,0x00,
+0x19,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x08,0x03,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,
+0x21,0x03,0x00,0x00,0x2f,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x20,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x22,0x03,0x00,0x00,0x21,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0xea,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0x24,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x57,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x92,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x30,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x17,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x31,0x03,0x00,0x00,
+0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x25,0x03,0x00,0x00,
+0x32,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x33,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x93,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x22,0x03,0x00,0x00,
+0x34,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,0x35,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x08,0x03,0x00,0x00,0x97,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x33,0x02,0x00,0x00,0x3b,0x03,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x46,0x03,0x00,0x00,0x71,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x48,0x03,0x00,0x00,
+0x46,0x03,0x00,0x00,0x92,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x49,0x03,0x00,0x00,0x48,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x49,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,0x50,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x36,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0x08,0x03,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,
+0x55,0x03,0x00,0x00,0x2f,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x54,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x56,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x58,0x03,0x00,0x00,0x06,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x59,0x03,0x00,0x00,
+0x58,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x8b,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x86,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x60,0x03,0x00,0x00,
+0x92,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x03,0x00,0x00,0x62,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x63,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,0x65,0x03,0x00,0x00,
+0x64,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x17,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x65,0x03,0x00,0x00,
+0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x59,0x03,0x00,0x00,
+0x66,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x68,0x03,0x00,0x00,0x67,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x93,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x68,0x03,0x00,0x00,
+0x50,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,0x70,0x03,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x71,0x03,0x00,0x00,
+0x70,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x73,0x03,0x00,0x00,0x0f,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x74,0x03,0x00,0x00,0x73,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x3d,0x02,0x00,0x00,0xc4,0x00,0x05,0x00,0x86,0x00,0x00,0x00,
+0x7c,0x03,0x00,0x00,0x92,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x7d,0x03,0x00,0x00,
+0x7a,0x03,0x00,0x00,0x7c,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,0x7d,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,
+0x7e,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x7f,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0x81,0x03,0x00,0x00,
+0x80,0x03,0x00,0x00,0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x82,0x03,0x00,0x00,
+0x74,0x03,0x00,0x00,0x81,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x83,0x03,0x00,0x00,0x82,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x03,0x00,0x00,
+0x08,0x03,0x00,0x00,0xb4,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x33,0x02,0x00,0x00,0x89,0x03,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x8a,0x03,0x00,0x00,0x89,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x03,0x00,0x00,
+0x18,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x8c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x94,0x03,0x00,0x00,0x57,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0x97,0x03,0x00,0x00,
+0x94,0x03,0x00,0x00,0x7c,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x98,0x03,0x00,0x00,0x97,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x99,0x03,0x00,0x00,
+0x98,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,
+0x9a,0x03,0x00,0x00,0x99,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,
+0x9a,0x03,0x00,0x00,0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x9c,0x03,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x9b,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x9d,0x03,0x00,0x00,0x9c,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x9e,0x03,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x9d,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x93,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x71,0x03,0x00,0x00,0x83,0x03,0x00,0x00,
+0x9e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,0xa4,0x03,0x00,0x00,
+0x2f,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,0xa3,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0xa5,0x03,0x00,0x00,
+0xa4,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x03,0x00,0x00,0x21,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xa8,0x03,0x00,0x00,0xa7,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xaf,0x03,0x00,0x00,
+0x71,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x86,0x00,0x00,0x00,
+0xb2,0x03,0x00,0x00,0xaf,0x03,0x00,0x00,0x7c,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb3,0x03,0x00,0x00,
+0xb2,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xb4,0x03,0x00,0x00,0xb3,0x03,0x00,0x00,0xab,0x00,0x05,0x00,
+0xa8,0x00,0x00,0x00,0xb5,0x03,0x00,0x00,0xb4,0x03,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,
+0xb6,0x03,0x00,0x00,0xb5,0x03,0x00,0x00,0x44,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xb7,0x03,0x00,0x00,0xa8,0x03,0x00,0x00,0xb6,0x03,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0xb8,0x03,0x00,0x00,
+0xb7,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,
+0xba,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xa5,0x03,0x00,0x00,0xb8,0x03,0x00,0x00,0x9f,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x03,0x00,0x00,
+0x08,0x03,0x00,0x00,0xec,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x33,0x02,0x00,0x00,0xbf,0x03,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xbe,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0xbf,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xc3,0x03,0x00,0x00,0xc2,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xca,0x03,0x00,0x00,0x8b,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x86,0x00,0x00,0x00,0xcd,0x03,0x00,0x00,
+0xca,0x03,0x00,0x00,0x7c,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xce,0x03,0x00,0x00,0xcd,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xcf,0x03,0x00,0x00,
+0xce,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,
+0xd0,0x03,0x00,0x00,0xcf,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x17,0x00,0x00,0x00,0xd1,0x03,0x00,0x00,
+0xd0,0x03,0x00,0x00,0x44,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xd2,0x03,0x00,0x00,
+0xc3,0x03,0x00,0x00,0xd1,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0xd3,0x03,0x00,0x00,0xd2,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,0xd5,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,
+0xd3,0x03,0x00,0x00,0xba,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0xdb,0x03,0x00,0x00,0x34,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0xe1,0x03,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,
+0xe2,0x03,0x00,0x00,0xdb,0x03,0x00,0x00,0xe1,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0xe8,0x03,0x00,0x00,
+0x67,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,
+0xe9,0x03,0x00,0x00,0xe2,0x03,0x00,0x00,0xe8,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0xef,0x03,0x00,0x00,
+0x81,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,
+0xf0,0x03,0x00,0x00,0xe9,0x03,0x00,0x00,0xef,0x03,0x00,0x00,
+0x70,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0xf2,0x03,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0xf9,0x03,0x00,0x00,0x9c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0xff,0x03,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+0xf9,0x03,0x00,0x00,0xff,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x06,0x04,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x07,0x04,0x00,0x00,
+0x00,0x04,0x00,0x00,0x06,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x0d,0x04,0x00,0x00,0xee,0x02,0x00,0x00,
+0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x0e,0x04,0x00,0x00,
+0x07,0x04,0x00,0x00,0x0d,0x04,0x00,0x00,0x70,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x07,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x11,0x04,0x00,0x00,
+0x0e,0x04,0x00,0x00,0x10,0x04,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x93,0x00,0x00,0x00,0x12,0x04,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0xf2,0x03,0x00,0x00,
+0x11,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x17,0x04,0x00,0x00,0x09,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x1d,0x04,0x00,0x00,0x21,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x1e,0x04,0x00,0x00,
+0x17,0x04,0x00,0x00,0x1d,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x24,0x04,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x25,0x04,0x00,0x00,
+0x1e,0x04,0x00,0x00,0x24,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x2b,0x04,0x00,0x00,0x55,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x2c,0x04,0x00,0x00,
+0x25,0x04,0x00,0x00,0x2b,0x04,0x00,0x00,0x70,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x2e,0x04,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,0x30,0x04,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x2c,0x04,0x00,0x00,
+0x2e,0x04,0x00,0x00,0x12,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x36,0x04,0x00,0x00,0x70,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x3c,0x04,0x00,0x00,
+0x89,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,
+0x3d,0x04,0x00,0x00,0x36,0x04,0x00,0x00,0x3c,0x04,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x43,0x04,0x00,0x00,
+0xa4,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,
+0x44,0x04,0x00,0x00,0x3d,0x04,0x00,0x00,0x43,0x04,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x4a,0x04,0x00,0x00,
+0xbf,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,
+0x4b,0x04,0x00,0x00,0x44,0x04,0x00,0x00,0x4a,0x04,0x00,0x00,
+0x70,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x4d,0x04,0x00,0x00,
+0x78,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,
+0x4f,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x4b,0x04,0x00,0x00,0x4d,0x04,0x00,0x00,0x30,0x04,0x00,0x00,
+0x70,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x57,0x04,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x5b,0x04,0x00,0x00,0xea,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x93,0x00,0x00,0x00,0x5c,0x04,0x00,0x00,0x04,0x03,0x00,0x00,
+0x5b,0x04,0x00,0x00,0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,
+0x5d,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x57,0x04,0x00,0x00,0x5c,0x04,0x00,0x00,
+0x70,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x60,0x04,0x00,0x00,
+0x24,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,
+0x62,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x60,0x04,0x00,0x00,0x5d,0x04,0x00,0x00,
+0x70,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x65,0x04,0x00,0x00,
+0x40,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,
+0x67,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xd5,0x03,0x00,0x00,0x65,0x04,0x00,0x00,0x62,0x04,0x00,0x00,
+0x85,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x6b,0x04,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x4f,0x04,0x00,0x00,0x7f,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0xb8,0x04,0x00,0x00,0x6b,0x04,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x93,0x00,0x00,0x00,0x6c,0x04,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x67,0x04,0x00,0x00,0xb8,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x6e,0x04,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x6f,0x04,0x00,0x00,
+0x6e,0x04,0x00,0x00,0x6c,0x04,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9e,0x00,0x00,0x00,0x6f,0x04,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x04,0x00,0x00,0xb4,0x04,0x00,0x00,
+0x41,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x73,0x04,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x75,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x75,0x04,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x04,0x00,0x00,0x97,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x8c,0x04,0x00,0x00,0x78,0x04,0x00,0x00,0xac,0x00,0x05,0x00,
+0xa8,0x00,0x00,0x00,0x7b,0x04,0x00,0x00,0xb5,0x04,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x77,0x04,0x00,0x00,
+0x78,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x7b,0x04,0x00,0x00,0x76,0x04,0x00,0x00,0x77,0x04,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x76,0x04,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xa8,0x00,0x00,0x00,0x7e,0x04,0x00,0x00,0x60,0x00,0x00,0x00,
+0xb5,0x04,0x00,0x00,0xf7,0x00,0x03,0x00,0x80,0x04,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7e,0x04,0x00,0x00,
+0x7f,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7f,0x04,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x04,0x00,0x00,0x60,0x00,0x00,0x00,0xb5,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x85,0x04,0x00,0x00,
+0x96,0x00,0x00,0x00,0x84,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x86,0x04,0x00,0x00,0x85,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x87,0x04,0x00,0x00,
+0x96,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x88,0x04,0x00,0x00,0x87,0x04,0x00,0x00,
+0x81,0x00,0x05,0x00,0x93,0x00,0x00,0x00,0x89,0x04,0x00,0x00,
+0x88,0x04,0x00,0x00,0x86,0x04,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x87,0x04,0x00,0x00,0x89,0x04,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x80,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,0x80,0x04,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x73,0x04,0x00,0x00,0xf9,0x00,0x02,0x00,0x78,0x04,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x78,0x04,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x04,0x00,0x00,0xb5,0x04,0x00,0x00,
+0x89,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x75,0x04,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x04,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xa8,0x00,0x00,0x00,0x8e,0x04,0x00,0x00,0x60,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x90,0x04,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x8e,0x04,0x00,0x00,
+0x8f,0x04,0x00,0x00,0x90,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x8f,0x04,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x04,0x00,0x00,0xb3,0x04,0x00,0x00,0x45,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x98,0x04,0x00,0x00,
+0x96,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x93,0x00,0x00,0x00,0x99,0x04,0x00,0x00,0x98,0x04,0x00,0x00,
+0x41,0x00,0x06,0x00,0x33,0x02,0x00,0x00,0x9a,0x04,0x00,0x00,
+0x94,0x04,0x00,0x00,0x1c,0x00,0x00,0x00,0x97,0x04,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9a,0x04,0x00,0x00,0x99,0x04,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x90,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x90,0x04,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_id_q5_k_f32_len = 12816;
+
+unsigned char mul_mat_vec_id_q6_k_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xf8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x19,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5d,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xab,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xac,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xae,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xb0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb1,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xb2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xb2,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc7,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd7,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xd8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xd8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xd8,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xda,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xda,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe1,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x19,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x1e,0x00,0x0b,0x00,0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x8c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x96,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xa1,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xac,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0xaf,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1e,0x00,0x06,0x00,0xb0,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xb2,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xc6,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd7,0x01,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd8,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x0f,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xee,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xef,0x03,0x00,0x00,
+0x41,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x03,0x00,0x00,0x22,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf2,0x03,0x00,0x00,
+0x42,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x03,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x03,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf5,0x03,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x03,0x00,0x00,0x43,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x03,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x42,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,0x11,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x1e,0x00,0x00,0x00,0xe8,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xe6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,
+0xe9,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0x25,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xea,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x25,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x27,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0x25,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0xf2,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x25,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xe6,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0x53,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x96,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x97,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xa1,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x54,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x9c,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa2,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0xb8,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x35,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd9,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x85,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd9,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe8,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0xed,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x30,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x26,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x8c,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x85,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xd9,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x64,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x6c,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x8c,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x78,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xd9,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x82,0x01,0x00,0x00,
+0x81,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x90,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x8c,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x09,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0xda,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe8,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0x19,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x1b,0x02,0x00,0x00,0xed,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x80,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe8,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x22,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0x23,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,0xee,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x32,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x13,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x7a,0x00,0x00,0x00,0xee,0x03,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe8,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x40,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0xed,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x47,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x30,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x49,0x02,0x00,0x00,0x48,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x4e,0x02,0x00,0x00,0x82,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x39,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x8c,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x2b,0x02,0x00,0x00,0x52,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xef,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd1,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x49,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x74,0x02,0x00,0x00,0x69,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x8c,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf0,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x81,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x82,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x8c,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa9,0x01,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd1,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe8,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xba,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xbe,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xc0,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0xed,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x80,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe8,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0xc6,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc7,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,
+0xc8,0x02,0x00,0x00,0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x82,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf1,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0xda,0x02,0x00,0x00,0x13,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x7a,0x00,0x00,0x00,
+0xf1,0x03,0x00,0x00,0x41,0x00,0x08,0x00,0xe8,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xed,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x30,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x8c,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xcc,0x00,0x00,0x00,0xf2,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x01,0x03,0x00,0x00,0x49,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x02,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x03,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0xbc,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x13,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x15,0x03,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x17,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0x26,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x17,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x18,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x19,0x03,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x8c,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf3,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd1,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x23,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x81,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x24,0x03,0x00,0x00,
+0x29,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x2a,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x31,0x03,0x00,0x00,0x26,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,
+0x32,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x33,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x39,0x03,0x00,0x00,0x9d,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x3b,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x34,0x03,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x41,0x03,0x00,0x00,0x40,0x03,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x42,0x03,0x00,0x00,
+0x41,0x03,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x42,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x8c,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x43,0x03,0x00,0x00,0x1e,0x03,0x00,0x00,0x81,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x46,0x03,0x00,0x00,0xa2,0x02,0x00,0x00,
+0x45,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf4,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,0x53,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x53,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x58,0x03,0x00,0x00,0xda,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x58,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x54,0x03,0x00,0x00,0x59,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,0x5a,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x7a,0x00,0x00,0x00,0xf4,0x03,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe8,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0x60,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x03,0x00,0x00,
+0x61,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x63,0x03,0x00,0x00,0x62,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x63,0x03,0x00,0x00,
+0xed,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0xf4,0x03,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe8,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x68,0x03,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x69,0x03,0x00,0x00,0x1c,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x6b,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,0x35,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x64,0x03,0x00,0x00,
+0x6e,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x70,0x03,0x00,0x00,0x6f,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x71,0x03,0x00,0x00,0x70,0x03,0x00,0x00,
+0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x72,0x03,0x00,0x00,
+0x71,0x03,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x73,0x03,0x00,0x00,0x72,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x03,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xf5,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd1,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x78,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,0x79,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x13,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x7f,0x03,0x00,0x00,0x7e,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x7f,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x81,0x03,0x00,0x00,0x80,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x03,0x00,0x00,
+0x7a,0x00,0x00,0x00,0xf5,0x03,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe8,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x85,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0x87,0x03,0x00,0x00,0x86,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x87,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x89,0x03,0x00,0x00,
+0x88,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x89,0x03,0x00,0x00,0xed,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0x8f,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,
+0x90,0x03,0x00,0x00,0x8f,0x03,0x00,0x00,0x30,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x91,0x03,0x00,0x00,
+0x90,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x92,0x03,0x00,0x00,0x91,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x93,0x03,0x00,0x00,0x92,0x03,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x94,0x03,0x00,0x00,0x93,0x03,0x00,0x00,0x26,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x95,0x03,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x94,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0x96,0x03,0x00,0x00,0x95,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x97,0x03,0x00,0x00,
+0x96,0x03,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x03,0x00,0x00,0x97,0x03,0x00,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x99,0x03,0x00,0x00,
+0x98,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0x9a,0x03,0x00,0x00,0x81,0x03,0x00,0x00,0x99,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x8c,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x73,0x03,0x00,0x00,0x9a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xf6,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,
+0xa0,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x9f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xa1,0x03,0x00,0x00,0xa0,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0xa5,0x03,0x00,0x00,0x49,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,
+0xa5,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xa7,0x03,0x00,0x00,0xa1,0x03,0x00,0x00,0xa6,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xa8,0x03,0x00,0x00,
+0xa7,0x03,0x00,0x00,0xbb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xae,0x03,0x00,0x00,0x60,0x03,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xae,0x03,0x00,0x00,0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x03,0x00,0x00,0xaf,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xb1,0x03,0x00,0x00,
+0xb0,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xb6,0x03,0x00,0x00,0x68,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0xb7,0x03,0x00,0x00,0xb6,0x03,0x00,0x00,
+0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x03,0x00,0x00,0xb7,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,0xb8,0x03,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xba,0x03,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xbb,0x03,0x00,0x00,0xba,0x03,0x00,0x00,
+0x26,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xbc,0x03,0x00,0x00,0xb1,0x03,0x00,0x00,0xbb,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0xbd,0x03,0x00,0x00,
+0xbc,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xbe,0x03,0x00,0x00,0xbd,0x03,0x00,0x00,0x82,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xbf,0x03,0x00,0x00,0xbe,0x03,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0xc0,0x03,0x00,0x00,0xbf,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x8c,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xa8,0x03,0x00,0x00,0xc0,0x03,0x00,0x00,
+0x9b,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0xf7,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,0xc7,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xc6,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xc8,0x03,0x00,0x00,
+0xc7,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0xcc,0x03,0x00,0x00,0x81,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xcd,0x03,0x00,0x00,0xcc,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xce,0x03,0x00,0x00,
+0xc8,0x03,0x00,0x00,0xcd,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0xcf,0x03,0x00,0x00,0xce,0x03,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xd5,0x03,0x00,0x00,0x86,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0xd6,0x03,0x00,0x00,0xd5,0x03,0x00,0x00,
+0x26,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x03,0x00,0x00,0xd6,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0xd8,0x03,0x00,0x00,0xd7,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xdd,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,
+0xde,0x03,0x00,0x00,0xdd,0x03,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdf,0x03,0x00,0x00,
+0xde,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0xe0,0x03,0x00,0x00,0xdf,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xe1,0x03,0x00,0x00,0xe0,0x03,0x00,0x00,
+0x35,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xe2,0x03,0x00,0x00,0xe1,0x03,0x00,0x00,0x26,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xe3,0x03,0x00,0x00,
+0xd8,0x03,0x00,0x00,0xe2,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0xe4,0x03,0x00,0x00,0xe3,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0xe5,0x03,0x00,0x00,
+0xe4,0x03,0x00,0x00,0x82,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0xe6,0x03,0x00,0x00,0xe5,0x03,0x00,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xe7,0x03,0x00,0x00,
+0xe6,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x8c,0x00,0x00,0x00,
+0xe9,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xcf,0x03,0x00,0x00,0xe7,0x03,0x00,0x00,0xc2,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xea,0x03,0x00,0x00,
+0x46,0x03,0x00,0x00,0xe9,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xea,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x97,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,
+0x41,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9c,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0xac,0x00,0x05,0x00,
+0xa1,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbd,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc1,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xa1,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xc6,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc4,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x96,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x96,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbb,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbd,0x01,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xa1,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xd6,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd4,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0x45,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x96,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd1,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0x1c,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_id_q6_k_f32_len = 11760;
+
+unsigned char mul_mat_vec_id_q8_0_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0f,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x1e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x4c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x55,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x55,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x55,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x55,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x55,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x55,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x55,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x55,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x55,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6c,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x70,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xbf,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfc,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xfd,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xff,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xff,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x06,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x4b,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x4c,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x50,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1e,0x00,0x0b,0x00,0x55,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x56,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x56,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x59,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x87,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x88,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x98,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xbe,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xbf,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xfc,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x44,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x38,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x47,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x47,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x46,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x50,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x59,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x59,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x57,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x59,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x57,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x59,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x57,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x8d,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x59,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x97,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x26,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x2f,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0xab,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2f,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x8d,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x73,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xac,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x6d,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xe2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe6,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xe1,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xeb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xea,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x8c,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x8d,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xeb,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xeb,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x73,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe3,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe2,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x98,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xfb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfa,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x8c,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x89,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc7,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_id_q8_0_f32_len = 3956;
+
+unsigned char mul_mat_vec_nc_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1b,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x6d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x6f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x78,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa8,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xa9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xa9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xa9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xab,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xab,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x1e,0x00,0x09,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x34,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x36,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x37,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3b,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x46,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x6b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x6c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x77,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x78,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x20,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x20,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x3c,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x46,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x51,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x50,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x40,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x51,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x20,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x20,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x6b,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7c,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x34,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x34,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x34,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3c,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x41,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x41,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x40,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x1e,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0xad,0x00,0x05,0x00,0x46,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8b,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x46,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x96,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x94,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x95,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x34,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x34,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x34,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3c,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x96,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x96,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8d,0x00,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8c,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0x46,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x3b,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7c,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_nc_f16_f32_len = 2824;
+
+unsigned char mul_mat_vec_p021_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xbc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x1b,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x63,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x64,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x64,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x66,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x76,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x77,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x77,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x79,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xae,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xae,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xae,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb5,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1e,0x00,0x08,0x00,
+0x1b,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x32,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x34,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x35,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x32,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x39,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x44,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x62,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x64,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x65,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x68,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x76,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x77,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x78,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xad,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xae,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x20,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x20,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x20,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x20,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x39,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x3a,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3c,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x44,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x3e,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x44,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x4f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x3e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4f,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x68,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x62,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7b,0x00,0x00,0x00,
+0x7c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x32,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x3a,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x1e,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0xad,0x00,0x05,0x00,0x44,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x95,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x90,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x44,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x9b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9a,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x39,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x32,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3a,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x9b,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x92,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x92,0x00,0x00,0x00,
+0xc3,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x91,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0x44,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xac,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xaa,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xab,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x39,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x32,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7b,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xac,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_p021_f16_f32_len = 2768;
+
+unsigned char mul_mat_vec_q2_k_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x50,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xb5,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb6,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xb7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xb7,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xd5,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd7,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x10,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x11,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x11,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x11,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x13,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x13,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x03,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x91,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9b,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xb3,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0xb5,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x70,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x08,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0x10,0x03,0x00,0x00,
+0x91,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x11,0x03,0x00,0x00,
+0x10,0x03,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x03,0x00,0x00,0x13,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x19,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x91,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x0f,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x83,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x23,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x26,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0x26,0x03,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x24,0x03,0x00,0x00,0x27,0x03,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x24,0x03,0x00,0x00,
+0x27,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x32,0x03,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x33,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x36,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x30,0x03,0x00,0x00,
+0x37,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0x34,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x03,0x00,0x00,0x24,0x03,0x00,0x00,
+0x41,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x44,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x03,0x00,0x00,
+0x44,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x46,0x03,0x00,0x00,0x24,0x03,0x00,0x00,0x45,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x64,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x9b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x9c,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x75,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa1,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x47,0x03,0x00,0x00,
+0x41,0x00,0x08,0x00,0xbe,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xbe,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x91,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x91,0x00,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0xce,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x1b,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xce,0x00,0x00,0x00,
+0xb1,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x4a,0x03,0x00,0x00,0xbd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x42,0x03,0x00,0x00,0xac,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xbe,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xbe,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe7,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe7,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaf,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x91,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xbe,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0xbd,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xbe,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaf,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x75,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,0x78,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x76,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xbe,0x00,0x00,0x00,
+0x80,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe7,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x9e,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x91,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x78,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xbe,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,
+0xc2,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xc5,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xb8,0x01,0x00,0x00,0xc7,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xbe,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xda,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0xe0,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0xeb,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaf,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xc9,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xf9,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0xbe,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe7,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x06,0x02,0x00,0x00,0x05,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,
+0x0a,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0x09,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x20,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x45,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x91,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x19,0x02,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x91,0x00,0x00,0x00,
+0x1d,0x02,0x00,0x00,0x4b,0x03,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0x26,0x02,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x26,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x2e,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x2f,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x09,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x11,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x48,0x02,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x3e,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0x4c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x27,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x30,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x38,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x5d,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x58,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x61,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x77,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x78,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x80,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x85,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x89,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x91,0x02,0x00,0x00,0x90,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x91,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x86,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xdb,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xd8,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x81,0x00,0x05,0x00,0x91,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x4c,0x03,0x00,0x00,0xdc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x4a,0x03,0x00,0x00,
+0xf3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0xea,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x7f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0xea,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x91,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x9c,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0x9c,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xa2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x47,0x03,0x00,0x00,
+0x51,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x02,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x48,0x03,0x00,0x00,0x95,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xf7,0x02,0x00,0x00,0xac,0x00,0x05,0x00,
+0xa6,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0x48,0x03,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf6,0x02,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfa,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xa6,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0x71,0x00,0x00,0x00,
+0x48,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0xff,0x02,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfd,0x02,0x00,0x00,
+0xfe,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0x48,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x9b,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x94,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x05,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x9b,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x94,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x06,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0x91,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x07,0x03,0x00,0x00,0x05,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x06,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x02,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf7,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x48,0x03,0x00,0x00,
+0xf3,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf6,0x02,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xa6,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x0f,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0d,0x03,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x16,0x03,0x00,0x00,0x46,0x03,0x00,0x00,0x55,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x9b,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x94,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x17,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x19,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x13,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1a,0x03,0x00,0x00,0x18,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0f,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_q2_k_f16_f32_len = 8760;
+
+unsigned char mul_mat_vec_q2_k_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xb5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xb5,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb6,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xb7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xb7,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xd5,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd7,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x01,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x02,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x04,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x04,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x03,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x91,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x92,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x93,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9b,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xa6,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xb3,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0xb5,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd5,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xdf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0x60,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0x70,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x08,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x01,0x03,0x00,0x00,0x91,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x03,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x03,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x0f,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x83,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x16,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x03,0x00,0x00,0x16,0x03,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0x14,0x03,0x00,0x00,0x17,0x03,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0x17,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x20,0x03,0x00,0x00,0x18,0x03,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x22,0x03,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x23,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x26,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x20,0x03,0x00,0x00,
+0x27,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x24,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0x31,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x34,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x35,0x03,0x00,0x00,
+0x34,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0x35,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x64,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x9b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x9c,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x9f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0x75,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa1,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x37,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x37,0x03,0x00,0x00,
+0x41,0x00,0x08,0x00,0xbe,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb3,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xbe,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x91,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x91,0x00,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0xce,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x1b,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0xce,0x00,0x00,0x00,
+0xb1,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x3a,0x03,0x00,0x00,0xbd,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0xac,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xdf,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xdf,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xdf,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0xbd,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xdf,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe7,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x60,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x62,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x73,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x91,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xdf,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaf,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0xdf,0x00,0x00,0x00,
+0xa5,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,
+0xab,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+0xbf,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xc1,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xb3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,0x9c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xdf,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xcc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x7d,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe7,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xd5,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xd7,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xda,0x01,0x00,0x00,
+0xd9,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,
+0xdb,0x01,0x00,0x00,0xce,0x01,0x00,0x00,0xda,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0xe5,0x01,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0xe5,0x01,0x00,0x00,0x45,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x91,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xdb,0x01,0x00,0x00,0xea,0x01,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xdd,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xdf,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x7d,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe7,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x02,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x1f,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaf,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0xfe,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,0x14,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0xec,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x14,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0xe0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x09,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x10,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x41,0x02,0x00,0x00,
+0x40,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,
+0x42,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,0x43,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x36,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x58,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x91,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x58,0x02,0x00,0x00,
+0x43,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x56,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,0x5e,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x6c,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0x85,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaf,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0xa5,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0xad,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x98,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x91,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xcd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xaf,0x02,0x00,0x00,0xd5,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xaf,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,
+0xb1,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0xec,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xf5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xfd,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xaf,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xec,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x91,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0xca,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x81,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0x3c,0x03,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xd1,0x02,0x00,0x00,0x3a,0x03,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x91,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x7f,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,
+0xdb,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x91,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x91,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9c,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x37,0x03,0x00,0x00,0x51,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x9f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x95,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xac,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x38,0x03,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xe7,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xeb,0x02,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe6,0x02,0x00,0x00,0xb0,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,
+0xee,0x02,0x00,0x00,0x71,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xee,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,0xef,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x71,0x00,0x00,0x00,0x38,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x9b,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0x94,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x9b,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0x94,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x81,0x00,0x05,0x00,
+0x91,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x3e,0x00,0x03,0x00,0xf7,0x02,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xf9,0x00,0x02,0x00,0xf0,0x02,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf0,0x02,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe8,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe8,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x38,0x03,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xe5,0x02,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe7,0x02,0x00,0x00,0xaa,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x71,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfe,0x02,0x00,0x00,0xff,0x02,0x00,0x00,
+0x00,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x36,0x03,0x00,0x00,0x55,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x9b,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x94,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x91,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xdf,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0x07,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x0a,0x03,0x00,0x00,0x09,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x00,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x00,0x03,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q2_k_f32_f32_len = 8504;
+
+unsigned char mul_mat_vec_q3_k_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x8c,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x53,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xba,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc2,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x50,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x51,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x51,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x51,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x53,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x53,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x5b,0x03,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9b,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x9b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xba,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xbf,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0xc0,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xc2,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd8,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x93,0x02,0x00,0x00,0x50,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0x70,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x08,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x50,0x03,0x00,0x00,0x99,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x51,0x03,0x00,0x00,0x50,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0x52,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x52,0x03,0x00,0x00,0x53,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x59,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x0f,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x63,0x03,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,
+0x63,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x66,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,
+0x66,0x03,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x03,0x00,0x00,0x64,0x03,0x00,0x00,0x67,0x03,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x64,0x03,0x00,0x00,0x67,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x03,0x00,0x00,0x6e,0x03,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x03,0x00,0x00,0x68,0x03,0x00,0x00,
+0x6f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x72,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x73,0x03,0x00,0x00,
+0x72,0x03,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x74,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,0x73,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x76,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x77,0x03,0x00,0x00,0x76,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x03,0x00,0x00,
+0x70,0x03,0x00,0x00,0x77,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,0x78,0x03,0x00,0x00,
+0x74,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x7c,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7d,0x03,0x00,0x00,
+0x7c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x03,0x00,0x00,0x7a,0x03,0x00,0x00,0x7d,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x80,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x81,0x03,0x00,0x00,0x80,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x03,0x00,0x00,
+0x64,0x03,0x00,0x00,0x81,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x84,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x85,0x03,0x00,0x00,0x84,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0x64,0x03,0x00,0x00,
+0x85,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x7e,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa3,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa4,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x87,0x03,0x00,0x00,
+0x75,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0xad,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x87,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xac,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x87,0x03,0x00,0x00,0x64,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x87,0x03,0x00,0x00,0x41,0x00,0x07,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbf,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x99,0x00,0x00,0x00,0x8b,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x1b,0x00,0x00,0x00,0x8a,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb1,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x8a,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x82,0x03,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x8a,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc9,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x99,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x92,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x8c,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x89,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc9,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x89,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x99,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc9,0x00,0x00,0x00,0x72,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0xf0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,
+0x85,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x89,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x99,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x74,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x89,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x99,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc9,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0xc1,0x01,0x00,0x00,0xc0,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,
+0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xc5,0x01,0x00,0x00,0xf0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcb,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,
+0xcf,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xd1,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xd1,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0xd2,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xd4,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,
+0xd5,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0xee,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x89,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,
+0xf4,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xe5,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x99,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xd8,0x01,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc9,0x00,0x00,0x00,
+0x01,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,
+0x02,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x03,0x02,0x00,0x00,0x02,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x12,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x17,0x02,0x00,0x00,
+0x16,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0x1a,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,0x1b,0x02,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x1e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x27,0x02,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x29,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x02,0x00,0x00,0x29,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2b,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x2c,0x02,0x00,0x00,
+0x2b,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x02,0x00,0x00,0x17,0x01,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x34,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x36,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x39,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0xab,0x00,0x05,0x00,
+0xb1,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x2c,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x99,0x00,0x00,0x00,
+0x41,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc9,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbf,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x51,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x51,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0x53,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x02,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x62,0x02,0x00,0x00,0x61,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x63,0x02,0x00,0x00,0x62,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x68,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x73,0x02,0x00,0x00,
+0x28,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x81,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x81,0x02,0x00,0x00,
+0x61,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0x86,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x88,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x99,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x41,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc9,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xa0,0x02,0x00,0x00,0xf0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x11,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x85,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xad,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,
+0xaf,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0xb2,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x35,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0xa8,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,0xab,0x00,0x05,0x00,
+0xb1,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xd3,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,
+0xd3,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x99,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc9,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbf,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xe6,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0xe8,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,0xea,0x02,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x85,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x99,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x07,0x03,0x00,0x00,0x28,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,0x09,0x03,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,
+0x0a,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x35,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0x18,0x03,0x00,0x00,
+0x15,0x03,0x00,0x00,0xf0,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x18,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,
+0x19,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x1a,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x99,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x1e,0x03,0x00,0x00,0xd6,0x02,0x00,0x00,0x81,0x00,0x05,0x00,
+0x99,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x8b,0x03,0x00,0x00,
+0x20,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x24,0x03,0x00,0x00,0x8a,0x03,0x00,0x00,0x82,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0xa4,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x99,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x8b,0x03,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xa4,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xad,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x87,0x03,0x00,0x00,
+0x51,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xaa,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xac,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x34,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x88,0x03,0x00,0x00,0x9d,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x4b,0x03,0x00,0x00,0x37,0x03,0x00,0x00,0xac,0x00,0x05,0x00,
+0xb1,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x88,0x03,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x36,0x03,0x00,0x00,
+0x37,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3a,0x03,0x00,0x00,0x35,0x03,0x00,0x00,0x36,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x35,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xb1,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0x88,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,0x3f,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x3d,0x03,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0x88,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa3,0x00,0x00,0x00,0x44,0x03,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0x44,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa3,0x00,0x00,0x00,0x46,0x03,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x46,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0x99,0x00,0x00,0x00,0x48,0x03,0x00,0x00,
+0x47,0x03,0x00,0x00,0x45,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x46,0x03,0x00,0x00,0x48,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x3f,0x03,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x37,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x37,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,0x88,0x03,0x00,0x00,
+0x82,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x34,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x03,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xb1,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x4f,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x4d,0x03,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4e,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x03,0x00,0x00,0x86,0x03,0x00,0x00,0x55,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa3,0x00,0x00,0x00,0x57,0x03,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x58,0x03,0x00,0x00,0x57,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0x59,0x03,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x53,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x56,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x5a,0x03,0x00,0x00,0x58,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4f,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_q3_k_f16_f32_len = 10176;
+
+unsigned char mul_mat_vec_q3_k_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x84,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xc4,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xba,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc0,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc1,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc2,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x49,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x4a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4a,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4a,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4c,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4c,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x53,0x03,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x99,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9b,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x9b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xba,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0xbf,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0xc0,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xc1,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xc2,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd8,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x60,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x50,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x70,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0x08,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x49,0x03,0x00,0x00,0x99,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x4a,0x03,0x00,0x00,0x49,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4b,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x4a,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0x4b,0x03,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x0f,0x00,0x00,0x00,0x53,0x03,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x5c,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,
+0x5c,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x66,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x66,0x03,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x03,0x00,0x00,0x60,0x03,0x00,0x00,
+0x67,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x6a,0x03,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x64,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x70,0x03,0x00,0x00,
+0x68,0x03,0x00,0x00,0x6f,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x72,0x03,0x00,0x00,0x70,0x03,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x74,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x75,0x03,0x00,0x00,
+0x74,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x76,0x03,0x00,0x00,0x72,0x03,0x00,0x00,0x75,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x78,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0x78,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x5c,0x03,0x00,0x00,0x79,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x7c,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x03,0x00,0x00,0x7c,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x03,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x7d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x76,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8e,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa3,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa4,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xaa,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,
+0x75,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0xad,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xac,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0xac,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xab,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,0x64,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x7f,0x03,0x00,0x00,0x41,0x00,0x07,0x00,0xc9,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbf,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x99,0x00,0x00,0x00,0x83,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x1b,0x00,0x00,0x00,0x82,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xb1,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x82,0x03,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x82,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0xe5,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x92,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x8c,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x89,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0xb1,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x30,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x89,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0xab,0x00,0x05,0x00,
+0xb1,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,
+0x68,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x99,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x76,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0xf0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x85,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x84,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x89,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x99,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x72,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x89,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xa9,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0xab,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x99,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xb8,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xbd,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0xc0,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc1,0x01,0x00,0x00,
+0xc0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xc2,0x01,0x00,0x00,0xc1,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xc3,0x01,0x00,0x00,0xc2,0x01,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0xc8,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xc8,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcc,0x01,0x00,0x00,0xcb,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0xcc,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xcf,0x01,0x00,0x00,0xce,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xc3,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0xd1,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xd2,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xd3,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xd4,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x99,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0xd4,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0x89,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xed,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x99,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xd5,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xe1,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0xff,0x01,0x00,0x00,
+0xfe,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x04,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x04,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,
+0x06,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,
+0x0d,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x11,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x11,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x13,0x02,0x00,0x00,0x12,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x18,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,
+0x1b,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x1a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x9d,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0x24,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x25,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x26,0x02,0x00,0x00,0x25,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x27,0x02,0x00,0x00,
+0x26,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x02,0x00,0x00,0x27,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0x17,0x01,0x00,0x00,0x9d,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x30,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x35,0x02,0x00,0x00,0x32,0x02,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x39,0x02,0x00,0x00,0x38,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x28,0x02,0x00,0x00,
+0x39,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x99,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x1b,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x57,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x01,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x63,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x24,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x60,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x80,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x81,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0x82,0x02,0x00,0x00,
+0x81,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x83,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x99,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x64,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0x90,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xe9,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x95,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x96,0x02,0x00,0x00,0x85,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0x98,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x99,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x83,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xa7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0xa8,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xab,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x99,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0x91,0x02,0x00,0x00,
+0xac,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0x24,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xb8,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xb8,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xba,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xbb,0x02,0x00,0x00,
+0xba,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0x31,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xa6,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xca,0x02,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0xca,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0xce,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x99,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xad,0x02,0x00,0x00,
+0xce,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe9,0x00,0x00,0x00,0xde,0x02,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x7f,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x85,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe2,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xf0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x83,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xef,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0xe4,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x87,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xf1,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x01,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x99,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x24,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0x00,0x03,0x00,0x00,0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0x02,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x03,0x03,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,
+0x31,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x7f,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x0e,0x03,0x00,0x00,0xed,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x11,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0xab,0x00,0x05,0x00,
+0xb1,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,
+0x15,0x03,0x00,0x00,0x14,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x16,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x15,0x03,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x16,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x99,0x00,0x00,0x00,
+0x19,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x17,0x03,0x00,0x00,0xd0,0x02,0x00,0x00,
+0x81,0x00,0x05,0x00,0x99,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x83,0x03,0x00,0x00,0x19,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,0x82,0x03,0x00,0x00,
+0x82,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x99,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x83,0x03,0x00,0x00,0x26,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa4,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xad,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xad,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x7f,0x03,0x00,0x00,0x51,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xaa,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x2b,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x2d,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2d,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x9d,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x30,0x03,0x00,0x00,
+0xac,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0x33,0x03,0x00,0x00,
+0x80,0x03,0x00,0x00,0x4b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x2f,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x33,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x2f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0x36,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x38,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x36,0x03,0x00,0x00,0x37,0x03,0x00,0x00,0x38,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x37,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xa3,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x9c,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xa3,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x9c,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x40,0x03,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0x99,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x3f,0x03,0x00,0x00,0x41,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x38,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x03,0x00,0x00,0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x30,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x30,0x03,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x03,0x00,0x00,
+0x80,0x03,0x00,0x00,0x82,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2d,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x2f,0x03,0x00,0x00,
+0xaa,0x00,0x05,0x00,0xb1,0x00,0x00,0x00,0x46,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x48,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x46,0x03,0x00,0x00,0x47,0x03,0x00,0x00,0x48,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x47,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x55,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xa3,0x00,0x00,0x00,
+0x50,0x03,0x00,0x00,0x9c,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x50,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0x52,0x03,0x00,0x00,
+0x51,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q3_k_f32_f32_len = 10048;
+
+unsigned char mul_mat_vec_q4_0_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x6a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd1,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd2,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd2,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x11,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x13,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x13,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1c,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x17,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x4e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x52,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x9a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x9a,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xaa,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd1,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd2,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf3,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x10,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x11,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x45,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x48,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x49,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x49,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x47,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x52,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x52,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9f,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xab,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x26,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x39,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x26,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x26,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9f,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x85,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa3,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x85,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0xf3,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0xf7,0x00,0x00,0x00,0xac,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xf6,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfa,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xaa,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0xff,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9f,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xff,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x85,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf7,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf6,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0d,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x89,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x17,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x19,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x1a,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x0f,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0f,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q4_0_f16_f32_len = 4108;
+
+unsigned char mul_mat_vec_q4_0_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x68,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x47,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x82,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd1,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd2,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd2,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd4,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x10,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x12,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x12,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x17,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x49,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x4e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x52,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x69,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x46,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x46,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x9a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x99,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x9a,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xaa,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd1,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd2,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd3,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0f,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x11,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x45,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x48,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x49,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x49,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x49,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x49,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x47,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x52,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x52,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x50,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x50,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9f,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x7f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x52,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xab,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x98,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0xb9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x41,0x00,0x07,0x00,0x26,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x30,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x35,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x39,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x59,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xda,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xda,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9f,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x85,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa3,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf3,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0xf2,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0xac,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x7f,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf5,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf9,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfc,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x9e,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x9f,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9f,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfe,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x85,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf6,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0xaa,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x89,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x9e,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xda,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0e,0x01,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q4_0_f32_f32_len = 4076;
+
+unsigned char mul_mat_vec_q4_1_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x78,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x56,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x56,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x56,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x56,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x56,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xda,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xdc,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xdc,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x18,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x19,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x19,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x56,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x57,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x57,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x18,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x19,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x4d,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x58,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5a,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x58,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x58,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x58,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x58,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x58,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5a,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x58,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x76,0x01,0x00,0x00,0x87,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5a,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x38,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x36,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x3d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x72,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x26,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x26,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa7,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x76,0x01,0x00,0x00,
+0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa9,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xab,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfc,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0xac,0x00,0x05,0x00,
+0xb2,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x87,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xb2,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x95,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x07,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x05,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x06,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x95,0x00,0x00,0x00,0x77,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x07,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x07,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xff,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xff,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x77,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfe,0x00,0x00,0x00,
+0xaa,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x95,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x17,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x21,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x22,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q4_1_f16_f32_len = 4192;
+
+unsigned char mul_mat_vec_q4_1_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x76,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x56,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x56,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x56,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x56,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x56,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x56,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xda,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0xda,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xdc,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xdc,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x17,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x18,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x18,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x21,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x22,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x38,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x56,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x57,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x57,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x5a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa1,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xda,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x17,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x4d,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x51,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x58,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5a,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x58,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x58,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x58,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x58,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x5a,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x58,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5a,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x58,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x87,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x5a,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x58,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaa,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x74,0x01,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x56,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x38,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x36,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x3d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x41,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x68,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x71,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xe2,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa9,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0xf8,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xac,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x75,0x01,0x00,0x00,0x87,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x95,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x95,0x00,0x00,0x00,
+0x75,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xa6,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0xa7,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xa7,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x06,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x06,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfe,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfe,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x75,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfd,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x95,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x16,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x91,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa6,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe2,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x16,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x16,0x01,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q4_1_f32_f32_len = 4160;
+
+unsigned char mul_mat_vec_q4_k_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x13,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0xda,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbd,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbf,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xbf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc1,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x34,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x35,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x35,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x37,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd7,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xd8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xd8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xd8,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xda,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xda,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe2,0x03,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x97,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa1,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xac,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xb9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xbd,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0xbf,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x42,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x34,0x02,0x00,0x00,0xb9,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x35,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x36,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x21,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x88,0x02,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x08,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xd7,0x03,0x00,0x00,0x97,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xd8,0x03,0x00,0x00,0xd7,0x03,0x00,0x00,0x20,0x00,0x04,0x00,
+0xd9,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0xd8,0x03,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xd9,0x03,0x00,0x00,0xda,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe0,0x03,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x0f,0x00,0x00,0x00,0xe2,0x03,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0xea,0x03,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xeb,0x03,0x00,0x00,
+0xea,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0xed,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xee,0x03,0x00,0x00,
+0xed,0x03,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xef,0x03,0x00,0x00,0xeb,0x03,0x00,0x00,0xee,0x03,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf3,0x03,0x00,0x00,
+0xeb,0x03,0x00,0x00,0xee,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0xf5,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf6,0x03,0x00,0x00,0xf5,0x03,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x03,0x00,0x00,0xef,0x03,0x00,0x00,
+0xf6,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0xf9,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfa,0x03,0x00,0x00,
+0xf9,0x03,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x03,0x00,0x00,0xf3,0x03,0x00,0x00,0xfa,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0xfd,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xfe,0x03,0x00,0x00,0xfd,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xff,0x03,0x00,0x00,
+0xf7,0x03,0x00,0x00,0xfe,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0xff,0x03,0x00,0x00,
+0xfb,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x03,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x04,0x00,0x00,
+0x03,0x04,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x04,0x00,0x00,0x01,0x04,0x00,0x00,0x04,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x07,0x04,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0x07,0x04,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x09,0x04,0x00,0x00,
+0xeb,0x03,0x00,0x00,0x08,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x0b,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x04,0x00,0x00,0x0b,0x04,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x04,0x00,0x00,0xeb,0x03,0x00,0x00,
+0x0c,0x04,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x05,0x04,0x00,0x00,0x64,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa1,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa5,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x0e,0x04,0x00,0x00,0x75,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xb8,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xac,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x0e,0x04,0x00,0x00,0x65,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x0e,0x04,0x00,0x00,0x64,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x0e,0x04,0x00,0x00,0x41,0x00,0x08,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xc7,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xda,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0xd9,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xda,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xda,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xda,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0xde,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x09,0x04,0x00,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc7,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,
+0x45,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x99,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x3f,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x52,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x54,0x02,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x52,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0xac,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc7,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0xb4,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x68,0x02,0x00,0x00,0x70,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc7,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x71,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x77,0x02,0x00,0x00,0x74,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x78,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0x77,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc7,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x7f,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x80,0x02,0x00,0x00,
+0x7f,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0xce,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x82,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0x70,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0xd7,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0x90,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8e,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x09,0x04,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x94,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x96,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x99,0x02,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x70,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x97,0x02,0x00,0x00,0x99,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x51,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x70,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xae,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0xae,0x02,0x00,0x00,0xa5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0xac,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,
+0xb5,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0xb6,0x02,0x00,0x00,0xb5,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xb0,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc7,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xc5,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xcd,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x20,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xd0,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0xcf,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xc5,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xc7,0x00,0x00,0x00,
+0xd6,0x02,0x00,0x00,0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0xd7,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xda,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x88,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xc7,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x32,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0x3b,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xf8,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x95,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x01,0x03,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x64,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x0c,0x03,0x00,0x00,0xc1,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x0d,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x80,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x0d,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0x06,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x45,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x17,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x11,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x22,0x03,0x00,0x00,0x72,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x23,0x03,0x00,0x00,0x22,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0x27,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x1c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x2e,0x03,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x27,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x39,0x03,0x00,0x00,0x38,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x32,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x43,0x03,0x00,0x00,0x50,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x43,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0x48,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x44,0x03,0x00,0x00,
+0xf0,0x02,0x00,0x00,0x3d,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x53,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0xfa,0x02,0x00,0x00,0x48,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x59,0x03,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x5a,0x03,0x00,0x00,0x59,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,0x04,0x03,0x00,0x00,
+0x53,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0xd6,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x65,0x03,0x00,0x00,0x64,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0x69,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x65,0x03,0x00,0x00,
+0x0f,0x03,0x00,0x00,0x5e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x70,0x03,0x00,0x00,
+0x6f,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x74,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x70,0x03,0x00,0x00,0xf0,0x02,0x00,0x00,0x69,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x7b,0x03,0x00,0x00,0x7a,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x7b,0x03,0x00,0x00,0xfa,0x02,0x00,0x00,
+0x74,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x85,0x03,0x00,0x00,0xb5,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0x85,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0x8a,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x86,0x03,0x00,0x00,
+0x04,0x03,0x00,0x00,0x7f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0x90,0x03,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x91,0x03,0x00,0x00,
+0x90,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x95,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x91,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,0x8a,0x03,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x9d,0x03,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xa1,0x03,0x00,0x00,0xf1,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xa2,0x03,0x00,0x00,0x90,0x02,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xa3,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x9d,0x03,0x00,0x00,0xa2,0x03,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xa8,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xa6,0x03,0x00,0x00,0xa3,0x03,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xab,0x03,0x00,0x00,
+0x48,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xad,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xe7,0x02,0x00,0x00,0xab,0x03,0x00,0x00,0xa8,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xb1,0x03,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x95,0x03,0x00,0x00,0x7f,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x12,0x04,0x00,0x00,0xb1,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0xb2,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xad,0x03,0x00,0x00,0x12,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xb4,0x03,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xb5,0x03,0x00,0x00,
+0xb4,0x03,0x00,0x00,0xb2,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa2,0x00,0x00,0x00,0xb5,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x03,0x00,0x00,0x0e,0x04,0x00,0x00,
+0x51,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xbb,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xbb,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x04,0x00,0x00,0x9b,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xd2,0x03,0x00,0x00,0xbe,0x03,0x00,0x00,0xac,0x00,0x05,0x00,
+0xac,0x00,0x00,0x00,0xc1,0x03,0x00,0x00,0x0f,0x04,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xbd,0x03,0x00,0x00,
+0xbe,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc1,0x03,0x00,0x00,0xbc,0x03,0x00,0x00,0xbd,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbc,0x03,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xac,0x00,0x00,0x00,0xc4,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0x0f,0x04,0x00,0x00,0xf7,0x00,0x03,0x00,0xc6,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc4,0x03,0x00,0x00,
+0xc5,0x03,0x00,0x00,0xc6,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x03,0x00,0x00,0x71,0x00,0x00,0x00,0x0f,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xca,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xcc,0x03,0x00,0x00,0xcb,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x00,0x00,0x00,0xcd,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xce,0x03,0x00,0x00,0xcd,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xcf,0x03,0x00,0x00,
+0xce,0x03,0x00,0x00,0xcc,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x03,0x00,0x00,0xcf,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc6,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0xc6,0x03,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0xb9,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xbe,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbe,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x03,0x00,0x00,0x0f,0x04,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xbb,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xbd,0x03,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xac,0x00,0x00,0x00,0xd4,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xd6,0x03,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd4,0x03,0x00,0x00,
+0xd5,0x03,0x00,0x00,0xd6,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd5,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x03,0x00,0x00,0x0d,0x04,0x00,0x00,0x55,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa1,0x00,0x00,0x00,0xde,0x03,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xdf,0x03,0x00,0x00,0xde,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe0,0x03,0x00,0x00,0xe1,0x03,0x00,0x00,
+0xda,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xdd,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xe1,0x03,0x00,0x00,0xdf,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd6,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd6,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_q4_k_f16_f32_len = 10548;
+
+unsigned char mul_mat_vec_q4_k_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xf3,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x37,0x02,0x00,0x00,0xbb,0x03,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbd,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xbf,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xbf,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xbf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc1,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x34,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x35,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x35,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x35,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x37,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x37,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb8,0x03,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xb9,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xb9,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xb9,0x03,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbb,0x03,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbb,0x03,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc2,0x03,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x97,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xa1,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xac,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xb9,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xbd,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x1e,0x00,0x05,0x00,0xbf,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xc0,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x42,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x06,0x02,0x00,0x00,0x43,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x34,0x02,0x00,0x00,0x97,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x35,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x36,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x35,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x36,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3b,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x77,0x02,0x00,0x00,
+0x22,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x23,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,0x08,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xb8,0x03,0x00,0x00,0x97,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xb9,0x03,0x00,0x00,0xb8,0x03,0x00,0x00,
+0x20,0x00,0x04,0x00,0xba,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x3b,0x00,0x04,0x00,0xba,0x03,0x00,0x00,
+0xbb,0x03,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x0f,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0xca,0x03,0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,
+0xca,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0xcd,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xce,0x03,0x00,0x00,
+0xcd,0x03,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x03,0x00,0x00,0xcb,0x03,0x00,0x00,0xce,0x03,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x03,0x00,0x00,
+0xcb,0x03,0x00,0x00,0xce,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0xd5,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x03,0x00,0x00,0xd5,0x03,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x03,0x00,0x00,0xcf,0x03,0x00,0x00,
+0xd6,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0xd9,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xda,0x03,0x00,0x00,
+0xd9,0x03,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x03,0x00,0x00,0xd3,0x03,0x00,0x00,0xda,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0xdd,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xde,0x03,0x00,0x00,0xdd,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x03,0x00,0x00,
+0xd7,0x03,0x00,0x00,0xde,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x03,0x00,0x00,0xdf,0x03,0x00,0x00,
+0xdb,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0xe3,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe4,0x03,0x00,0x00,
+0xe3,0x03,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe5,0x03,0x00,0x00,0xe1,0x03,0x00,0x00,0xe4,0x03,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0xe7,0x03,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x03,0x00,0x00,0xe7,0x03,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe9,0x03,0x00,0x00,
+0xcb,0x03,0x00,0x00,0xe8,0x03,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0xeb,0x03,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xec,0x03,0x00,0x00,0xeb,0x03,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x03,0x00,0x00,0xcb,0x03,0x00,0x00,
+0xec,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x62,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0xe5,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x89,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa1,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa2,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xa5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa5,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xee,0x03,0x00,0x00,0x75,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x99,0x03,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xac,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xee,0x03,0x00,0x00,0x65,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xee,0x03,0x00,0x00,0x64,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0xee,0x03,0x00,0x00,0x41,0x00,0x08,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xc7,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xb9,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xda,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0xd9,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xda,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0xd9,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x54,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0xf9,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x61,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,
+0x79,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x26,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xda,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa2,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,
+0xae,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xad,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xaf,0x01,0x00,0x00,
+0xae,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb3,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xc4,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xc5,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xcd,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xce,0x01,0x00,0x00,0xcd,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xd7,0x01,0x00,0x00,0xd6,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdd,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,0xde,0x01,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xde,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,0xe3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xda,0x00,0x00,0x00,0xec,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0xeb,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0xee,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xf0,0x01,0x00,0x00,0xef,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,
+0xf0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,
+0xfa,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xe1,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0xff,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xda,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x07,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x09,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x09,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x1b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0x0d,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x0d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0xde,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0xec,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x20,0x02,0x00,0x00,0x1f,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x28,0x02,0x00,0x00,
+0xfa,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x29,0x02,0x00,0x00,0x28,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x31,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0xe9,0x03,0x00,0x00,0xb2,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3b,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x44,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x46,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x99,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x49,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x49,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x50,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0xac,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x5c,0x02,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x67,0x02,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3b,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0xc5,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x71,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x65,0x02,0x00,0x00,0x67,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0x79,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x79,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0xce,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,0x73,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x3a,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x83,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x87,0x02,0x00,0x00,
+0xd7,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x89,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,
+0xe9,0x03,0x00,0x00,0xb6,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x91,0x02,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3b,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0x97,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x9a,0x02,0x00,0x00,0xf2,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x9c,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xa6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0xac,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xb0,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xae,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xb7,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x17,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3b,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,
+0x37,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x20,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb9,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0x29,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xca,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x82,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0xd3,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xd6,0x02,0x00,0x00,
+0x32,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xd8,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xd6,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0x3c,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xff,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xe7,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0xe7,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xe0,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x64,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xf0,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xb6,0x02,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x80,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x04,0x03,0x00,0x00,0x45,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xfe,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x0e,0x03,0x00,0x00,0x6e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x12,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x0e,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x08,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x97,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x12,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x22,0x03,0x00,0x00,0xbf,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x4f,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x26,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x79,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x36,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x30,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x40,0x03,0x00,0x00,0xa1,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x44,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x40,0x03,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x4a,0x03,0x00,0x00,0xc9,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x44,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x54,0x03,0x00,0x00,0x59,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x58,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x54,0x03,0x00,0x00,0xe0,0x02,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x84,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x5e,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x58,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x68,0x03,0x00,0x00,0xab,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x68,0x03,0x00,0x00,0xf2,0x02,0x00,0x00,
+0x62,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x72,0x03,0x00,0x00,0xd3,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x76,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x72,0x03,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x7e,0x03,0x00,0x00,0xe3,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x82,0x03,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x83,0x03,0x00,0x00,
+0x89,0x02,0x00,0x00,0x82,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x84,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x5e,0x02,0x00,0x00,0x7e,0x03,0x00,0x00,
+0x83,0x03,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x87,0x03,0x00,0x00,0x2c,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x89,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0x87,0x03,0x00,0x00,
+0x84,0x03,0x00,0x00,0x70,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x8c,0x03,0x00,0x00,0x48,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x97,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0x8c,0x03,0x00,0x00,
+0x89,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x92,0x03,0x00,0x00,0xd1,0x00,0x00,0x00,0x76,0x03,0x00,0x00,
+0x7f,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xf2,0x03,0x00,0x00,
+0x92,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x97,0x00,0x00,0x00,
+0x93,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,0xf2,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x95,0x03,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x96,0x03,0x00,0x00,0x95,0x03,0x00,0x00,0x93,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa2,0x00,0x00,0x00,0x96,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x99,0x03,0x00,0x00,
+0xee,0x03,0x00,0x00,0x51,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x9a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0x9c,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9c,0x03,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xef,0x03,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xb3,0x03,0x00,0x00,0x9f,0x03,0x00,0x00,
+0xac,0x00,0x05,0x00,0xac,0x00,0x00,0x00,0xa2,0x03,0x00,0x00,
+0xef,0x03,0x00,0x00,0x4b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x9e,0x03,0x00,0x00,0x9f,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xa2,0x03,0x00,0x00,0x9d,0x03,0x00,0x00,
+0x9e,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x9d,0x03,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xac,0x00,0x00,0x00,0xa5,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0xef,0x03,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xa7,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xa5,0x03,0x00,0x00,0xa6,0x03,0x00,0x00,0xa7,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xa6,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xab,0x03,0x00,0x00,0x71,0x00,0x00,0x00,
+0xef,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xa1,0x00,0x00,0x00,
+0xac,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0xab,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xad,0x03,0x00,0x00,
+0xac,0x03,0x00,0x00,0x41,0x00,0x05,0x00,0xa1,0x00,0x00,0x00,
+0xae,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xae,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xb0,0x03,0x00,0x00,0xaf,0x03,0x00,0x00,0xad,0x03,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xae,0x03,0x00,0x00,0xb0,0x03,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa7,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa7,0x03,0x00,0x00,0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9f,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x9f,0x03,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb3,0x03,0x00,0x00,
+0xef,0x03,0x00,0x00,0xd7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x9c,0x03,0x00,0x00,0xf8,0x00,0x02,0x00,0x9e,0x03,0x00,0x00,
+0xaa,0x00,0x05,0x00,0xac,0x00,0x00,0x00,0xb5,0x03,0x00,0x00,
+0x71,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xb7,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xb5,0x03,0x00,0x00,0xb6,0x03,0x00,0x00,0xb7,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb6,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x03,0x00,0x00,0xed,0x03,0x00,0x00,
+0x55,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xa1,0x00,0x00,0x00,
+0xbf,0x03,0x00,0x00,0x9a,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,
+0xbf,0x03,0x00,0x00,0x41,0x00,0x06,0x00,0x3b,0x02,0x00,0x00,
+0xc1,0x03,0x00,0x00,0xbb,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xbe,0x03,0x00,0x00,0x3e,0x00,0x03,0x00,0xc1,0x03,0x00,0x00,
+0xc0,0x03,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x03,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x03,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q4_k_f32_f32_len = 10036;
+
+unsigned char mul_mat_vec_q5_0_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xbf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x23,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x23,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xae,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb1,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x00,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x3f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x3f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x41,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x49,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x4a,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x22,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x29,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x57,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x00,0x00,0x80,0x41,
+0x17,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x7e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xd8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xff,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x3e,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x3f,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x40,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x40,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x47,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x76,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x67,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x01,0x00,0x00,
+0x52,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x82,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x82,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x82,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x62,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x82,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0x67,0x01,0x00,0x00,
+0x63,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x82,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x82,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x82,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x74,0x01,0x00,0x00,0x73,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x75,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x74,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0x5e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x82,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd1,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x29,0x00,0x00,0x00,0x7f,0x01,0x00,0x00,0x23,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x32,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x23,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x31,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x87,0x01,0x00,0x00,0x36,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x32,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x23,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xec,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x45,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0xec,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x57,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x23,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,0xa5,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xac,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x45,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xb2,0x01,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0xec,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x29,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x25,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x07,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x29,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x25,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x1a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x22,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x22,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0xd1,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0xac,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x5e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x24,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x28,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x23,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xd8,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xbc,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x2d,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x2b,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0xbb,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2d,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x25,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x31,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x22,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x24,0x01,0x00,0x00,
+0xaa,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x3d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x75,0x01,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x47,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x25,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x48,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x3d,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q5_0_f16_f32_len = 4636;
+
+unsigned char mul_mat_vec_q5_0_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xbd,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x23,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x23,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x78,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x7e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x7e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x7e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xae,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb1,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb9,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xff,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x00,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x02,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x02,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x3e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x3e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x3e,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x40,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x40,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x47,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x48,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x1e,0x00,0x05,0x00,0x1f,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x22,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x29,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x45,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x57,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x00,0x00,0x80,0x41,
+0x17,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x79,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x7e,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7f,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x7f,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x82,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x93,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcc,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xd8,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xff,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x00,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x01,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x01,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x08,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x86,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x3d,0x01,0x00,0x00,0x08,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x3f,0x01,0x00,0x00,
+0x40,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x33,0x00,0x06,0x00,0x76,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x67,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x2c,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x50,0x01,0x00,0x00,0x78,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x01,0x00,0x00,
+0x50,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x82,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x54,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x82,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x55,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x82,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x82,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x64,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x65,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x82,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x67,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x82,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x80,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x82,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x80,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x71,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x5e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x82,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xd1,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdc,0x00,0x00,0x00,0xb9,0x01,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x29,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,0x23,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x32,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x23,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x31,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x86,0x01,0x00,0x00,
+0x85,0x01,0x00,0x00,0x36,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0x32,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,0x23,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x31,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0xec,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x90,0x01,0x00,0x00,0x45,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0xec,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x97,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x97,0x01,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0x57,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x23,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x55,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x93,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x45,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0xaa,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0xbc,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0xec,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x08,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x25,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x08,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x25,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0xac,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x5e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x23,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x27,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x2c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2a,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xba,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0xcd,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2c,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x24,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x24,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x31,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x21,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x23,0x01,0x00,0x00,0xaa,0x00,0x05,0x00,0xd8,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0xbb,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x3c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3b,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x73,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x25,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x08,0x01,0x00,0x00,0x46,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x25,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x3c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x3c,0x01,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q5_0_f32_f32_len = 4604;
+
+unsigned char mul_mat_vec_q5_1_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x1e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa9,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xac,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb5,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfb,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xfc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xfe,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3a,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3b,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x3b,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3d,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3d,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x45,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x46,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x1c,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x37,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x74,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xfb,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xfc,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x86,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x3a,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x3b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x43,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x71,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x62,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x73,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x53,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x62,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x62,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x63,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x68,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x70,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x71,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,
+0x70,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc9,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0xcc,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xd3,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x83,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x84,0x01,0x00,0x00,0x83,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x37,0x00,0x00,0x00,0x88,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,0x36,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x89,0x01,0x00,0x00,
+0x88,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x89,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x52,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9d,0x01,0x00,0x00,
+0x9c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x57,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x9f,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa6,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xab,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xab,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xac,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x84,0x01,0x00,0x00,
+0x84,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,
+0xed,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x26,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x26,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc9,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xaf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x1b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x1e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1e,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0xac,0x00,0x05,0x00,0xd4,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x20,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x24,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x1f,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xd4,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x29,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x27,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x29,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x28,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xc8,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc9,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x29,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x29,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x21,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x21,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x20,0x01,0x00,0x00,0xaa,0x00,0x05,0x00,0xd4,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x39,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x71,0x01,0x00,0x00,0xb3,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc8,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x43,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x44,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x39,0x01,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q5_1_f16_f32_len = 4532;
+
+unsigned char mul_mat_vec_q5_1_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x1e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x79,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x79,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x79,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa9,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xac,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb5,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfb,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xfc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xfe,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xfe,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x39,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x3a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x3a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x3c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3c,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x43,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x44,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,
+0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x1c,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x37,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x52,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x57,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x71,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x74,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,
+0x79,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x79,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x7a,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x72,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xd4,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xfb,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xfc,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfd,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xfd,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x04,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,0x86,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x39,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x3b,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x71,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,
+0x62,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x74,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x73,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x50,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x88,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x51,0x01,0x00,0x00,
+0x58,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x59,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x61,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x67,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x66,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x7d,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x7b,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x6d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0xc8,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xc9,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcb,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x01,0x00,0x00,0x59,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0xcc,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x7d,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xd4,0x00,0x00,0x00,
+0xd5,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xd3,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+0x80,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,0x41,0x00,0x07,0x00,
+0x37,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x79,0x01,0x00,0x00,0x36,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,
+0x86,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0x52,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x79,0x01,0x00,0x00,
+0x50,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x9a,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x57,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x01,0x00,0x00,0x9b,0x01,0x00,0x00,0x40,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x93,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa8,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,0xa7,0x01,0x00,0x00,
+0x70,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xa8,0x01,0x00,0x00,0x50,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xaa,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,0xac,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0xae,0x01,0x00,0x00,0x82,0x01,0x00,0x00,
+0x82,0x01,0x00,0x00,0x81,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xac,0x01,0x00,0x00,0xae,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,
+0xed,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x04,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x05,0x01,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x04,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x08,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xc9,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x1d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x1d,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0xcd,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0xac,0x00,0x05,0x00,0xd4,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0x59,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x1f,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x23,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1e,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xd4,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x28,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x26,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x27,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc8,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xc9,0x00,0x00,0x00,0x31,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x28,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x28,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x20,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x20,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,
+0x2e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1f,0x01,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xd4,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x38,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x36,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x37,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc8,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x04,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x38,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_q5_1_f32_f32_len = 4500;
+
+unsigned char mul_mat_vec_q5_k_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xff,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0xc6,0x04,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xca,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcb,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x40,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc3,0x04,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc4,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc4,0x04,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc6,0x04,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc6,0x04,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xce,0x04,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xa4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xae,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xb9,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc6,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xca,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xcb,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0xcc,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x50,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x11,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x3f,0x02,0x00,0x00,0xc6,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x40,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x41,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x57,0x02,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x31,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x04,0x00,0x00,0x08,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xc3,0x04,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xc4,0x04,0x00,0x00,0xc3,0x04,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc5,0x04,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc4,0x04,0x00,0x00,0x3b,0x00,0x04,0x00,0xc5,0x04,0x00,0x00,
+0xc6,0x04,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xcc,0x04,0x00,0x00,0x0c,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x0f,0x00,0x00,0x00,0xce,0x04,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0xd6,0x04,0x00,0x00,0x11,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x04,0x00,0x00,0xd6,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0xd9,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xda,0x04,0x00,0x00,0xd9,0x04,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdb,0x04,0x00,0x00,0xd7,0x04,0x00,0x00,
+0xda,0x04,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x04,0x00,0x00,0xd7,0x04,0x00,0x00,0xda,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0xe1,0x04,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe2,0x04,0x00,0x00,0xe1,0x04,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x04,0x00,0x00,
+0xdb,0x04,0x00,0x00,0xe2,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0xe5,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x04,0x00,0x00,0xe5,0x04,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x04,0x00,0x00,0xdf,0x04,0x00,0x00,
+0xe6,0x04,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0xe9,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xea,0x04,0x00,0x00,
+0xe9,0x04,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xeb,0x04,0x00,0x00,0xe3,0x04,0x00,0x00,0xea,0x04,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xed,0x04,0x00,0x00,
+0xeb,0x04,0x00,0x00,0xe7,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0xef,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf0,0x04,0x00,0x00,0xef,0x04,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x04,0x00,0x00,0xed,0x04,0x00,0x00,
+0xf0,0x04,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0xf3,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf4,0x04,0x00,0x00,
+0xf3,0x04,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf5,0x04,0x00,0x00,0xd7,0x04,0x00,0x00,0xf4,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0xf7,0x04,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf8,0x04,0x00,0x00,0xf7,0x04,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x04,0x00,0x00,
+0xd7,0x04,0x00,0x00,0xf8,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0xf1,0x04,0x00,0x00,0x64,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x04,0x00,0x00,0x75,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0xa4,0x04,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xfa,0x04,0x00,0x00,0x65,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xfa,0x04,0x00,0x00,0x64,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0xfa,0x04,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0xea,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0xe4,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0xea,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x90,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x04,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0xf5,0x04,0x00,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd4,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x47,0x02,0x00,0x00,0x46,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x48,0x02,0x00,0x00,
+0x47,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0x50,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x8a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x53,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0x54,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0x56,0x02,0x00,0x00,0x55,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0x58,0x02,0x00,0x00,
+0x56,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x59,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x58,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd4,0x00,0x00,0x00,0x60,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x61,0x02,0x00,0x00,0x60,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0xa4,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x6c,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x72,0x02,0x00,0x00,0x71,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x65,0x02,0x00,0x00,
+0x72,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x74,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x62,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0x76,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x48,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd4,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7f,0x02,0x00,0x00,0xb1,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x7f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0x86,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x85,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x87,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x87,0x02,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,0x80,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x91,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x7d,0x02,0x00,0x00,0x8f,0x02,0x00,0x00,
+0x76,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,0x96,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x98,0x02,0x00,0x00,0x97,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0xbf,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x02,0x00,0x00,0x8a,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0xa0,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0xa8,0x02,0x00,0x00,
+0xa7,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x9b,0x02,0x00,0x00,0xa8,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x98,0x02,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x91,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xb1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb6,0x02,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xb7,0x02,0x00,0x00,0xb6,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xbf,0x02,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc1,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,0xb7,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0xcb,0x02,0x00,0x00,0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xcc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0xce,0x02,0x00,0x00,0xcd,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xce,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd1,0x02,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xd1,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0x6b,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xdd,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0xdf,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0xe0,0x02,0x00,0x00,
+0xdf,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xe1,0x02,0x00,0x00,
+0xd2,0x02,0x00,0x00,0xe0,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xe1,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xcf,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,0xc6,0x02,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xd9,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xef,0x02,0x00,0x00,
+0xee,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0x86,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfa,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0xfc,0x02,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,0xfc,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xfe,0x02,0x00,0x00,0xef,0x02,0x00,0x00,
+0xfd,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0xfe,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xec,0x02,0x00,0x00,0xff,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x45,0x02,0x00,0x00,0x05,0x03,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x06,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x08,0x03,0x00,0x00,
+0x07,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x09,0x03,0x00,0x00,0x08,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0xa1,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x16,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x17,0x03,0x00,0x00,0x16,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x18,0x03,0x00,0x00,0x17,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x19,0x03,0x00,0x00,
+0x18,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0x19,0x03,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x1e,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,
+0x01,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x22,0x03,0x00,0x00,0xf5,0x04,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x22,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x24,0x03,0x00,0x00,
+0x23,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x25,0x03,0x00,0x00,0x24,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x27,0x03,0x00,0x00,0xef,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x28,0x03,0x00,0x00,
+0x27,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x50,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x30,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x31,0x03,0x00,0x00,0x30,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x32,0x03,0x00,0x00,0x31,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x33,0x03,0x00,0x00,
+0x32,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x33,0x03,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x35,0x03,0x00,0x00,0x28,0x03,0x00,0x00,
+0x34,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x36,0x03,0x00,0x00,0x35,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,0x22,0x03,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x3d,0x03,0x00,0x00,0x3c,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x3e,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x40,0x03,0x00,0x00,
+0xfd,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x41,0x03,0x00,0x00,0x40,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x6b,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x48,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x4b,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x41,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x50,0x03,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x50,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x52,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x25,0x03,0x00,0x00,0x36,0x03,0x00,0x00,
+0x51,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x56,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,0x57,0x03,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x56,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x58,0x03,0x00,0x00,
+0x57,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x59,0x03,0x00,0x00,0x58,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x63,0x03,0x00,0x00,0x86,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x65,0x03,0x00,0x00,0x63,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x66,0x03,0x00,0x00,0x65,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x66,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x68,0x03,0x00,0x00,
+0x67,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x68,0x03,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x69,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x6b,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x52,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,0x72,0x03,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x71,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x73,0x03,0x00,0x00,
+0x72,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x74,0x03,0x00,0x00,0x73,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x76,0x03,0x00,0x00,0x19,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x77,0x03,0x00,0x00,
+0x76,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x7e,0x03,0x00,0x00,0xa1,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x7e,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x81,0x03,0x00,0x00,0x80,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x82,0x03,0x00,0x00,0x81,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x83,0x03,0x00,0x00,
+0x82,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x84,0x03,0x00,0x00,0x83,0x03,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x85,0x03,0x00,0x00,0x77,0x03,0x00,0x00,
+0x84,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x86,0x03,0x00,0x00,0x85,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x74,0x03,0x00,0x00,0x86,0x03,0x00,0x00,
+0x6d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x8f,0x03,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x90,0x03,0x00,0x00,0x8f,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x92,0x03,0x00,0x00,0x22,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x93,0x03,0x00,0x00,
+0x92,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x99,0x03,0x00,0x00,0x50,0x02,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x9c,0x03,0x00,0x00,0x99,0x03,0x00,0x00,0x9b,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9d,0x03,0x00,0x00,
+0x9c,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x9e,0x03,0x00,0x00,0x9d,0x03,0x00,0x00,0xab,0x00,0x05,0x00,
+0xb9,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,0x9e,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,
+0xa0,0x03,0x00,0x00,0x9f,0x03,0x00,0x00,0x57,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x93,0x03,0x00,0x00,0xa0,0x03,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xa2,0x03,0x00,0x00,
+0xa1,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x03,0x00,0x00,0x22,0x03,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd4,0x00,0x00,0x00,0xa8,0x03,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa7,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0xa9,0x03,0x00,0x00,
+0xa8,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xaa,0x03,0x00,0x00,0xa9,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xac,0x03,0x00,0x00,0x2b,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xad,0x03,0x00,0x00,
+0xac,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xb4,0x03,0x00,0x00,0x6b,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xb7,0x03,0x00,0x00,0xb4,0x03,0x00,0x00,
+0x9b,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x03,0x00,0x00,0xb7,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,0xb8,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0xba,0x03,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0xbb,0x03,0x00,0x00,0xba,0x03,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xbc,0x03,0x00,0x00,0xad,0x03,0x00,0x00,
+0xbb,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xbd,0x03,0x00,0x00,0xbc,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0xbe,0x03,0x00,0x00,0xaa,0x03,0x00,0x00,
+0xbd,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0xbf,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x90,0x03,0x00,0x00,0xa2,0x03,0x00,0x00,0xbe,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x03,0x00,0x00,
+0x22,0x03,0x00,0x00,0xe8,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd4,0x00,0x00,0x00,0xc4,0x03,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc3,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0xc5,0x03,0x00,0x00,0xc4,0x03,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xc6,0x03,0x00,0x00,
+0xc5,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc8,0x03,0x00,0x00,0x34,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xc9,0x03,0x00,0x00,0xc8,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xd0,0x03,0x00,0x00,
+0x86,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xd3,0x03,0x00,0x00,0xd0,0x03,0x00,0x00,0x9b,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd4,0x03,0x00,0x00,
+0xd3,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xd5,0x03,0x00,0x00,0xd4,0x03,0x00,0x00,0xab,0x00,0x05,0x00,
+0xb9,0x00,0x00,0x00,0xd6,0x03,0x00,0x00,0xd5,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,
+0xd7,0x03,0x00,0x00,0xd6,0x03,0x00,0x00,0x57,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xd8,0x03,0x00,0x00,0xc9,0x03,0x00,0x00,0xd7,0x03,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xd9,0x03,0x00,0x00,
+0xd8,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0xdb,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xc6,0x03,0x00,0x00,0xd9,0x03,0x00,0x00,0xbf,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdf,0x03,0x00,0x00,
+0x22,0x03,0x00,0x00,0x05,0x03,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd4,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xdf,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0xe1,0x03,0x00,0x00,0xe0,0x03,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xe2,0x03,0x00,0x00,
+0xe1,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x03,0x00,0x00,0x3d,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xe5,0x03,0x00,0x00,0xe4,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xec,0x03,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xef,0x03,0x00,0x00,0xec,0x03,0x00,0x00,0x9b,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,
+0xef,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xf1,0x03,0x00,0x00,0xf0,0x03,0x00,0x00,0xab,0x00,0x05,0x00,
+0xb9,0x00,0x00,0x00,0xf2,0x03,0x00,0x00,0xf1,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,
+0xf3,0x03,0x00,0x00,0xf2,0x03,0x00,0x00,0x57,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xf4,0x03,0x00,0x00,0xe5,0x03,0x00,0x00,0xf3,0x03,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xf5,0x03,0x00,0x00,
+0xf4,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0xf7,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xe2,0x03,0x00,0x00,0xf5,0x03,0x00,0x00,0xdb,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0xfd,0x03,0x00,0x00,
+0x46,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xfe,0x03,0x00,0x00,0xfd,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x60,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x05,0x04,0x00,0x00,
+0x04,0x04,0x00,0x00,0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x06,0x04,0x00,0x00,0xfe,0x03,0x00,0x00,0x05,0x04,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x0c,0x04,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x0d,0x04,0x00,0x00,0x0c,0x04,0x00,0x00,0x81,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0x0e,0x04,0x00,0x00,0x06,0x04,0x00,0x00,
+0x0d,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x14,0x04,0x00,0x00,0x96,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x15,0x04,0x00,0x00,0x14,0x04,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x16,0x04,0x00,0x00,
+0x0e,0x04,0x00,0x00,0x15,0x04,0x00,0x00,0x70,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x18,0x04,0x00,0x00,0x09,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x1f,0x04,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x20,0x04,0x00,0x00,0x1f,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x26,0x04,0x00,0x00,0xcd,0x02,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x27,0x04,0x00,0x00,
+0x26,0x04,0x00,0x00,0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x28,0x04,0x00,0x00,0x20,0x04,0x00,0x00,0x27,0x04,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x2e,0x04,0x00,0x00,
+0xea,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x2f,0x04,0x00,0x00,0x2e,0x04,0x00,0x00,0x81,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0x30,0x04,0x00,0x00,0x28,0x04,0x00,0x00,
+0x2f,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x36,0x04,0x00,0x00,0x07,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x37,0x04,0x00,0x00,0x36,0x04,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x38,0x04,0x00,0x00,
+0x30,0x04,0x00,0x00,0x37,0x04,0x00,0x00,0x70,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x3a,0x04,0x00,0x00,0x18,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x3b,0x04,0x00,0x00,
+0x38,0x04,0x00,0x00,0x3a,0x04,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x3c,0x04,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x16,0x04,0x00,0x00,0x18,0x04,0x00,0x00,
+0x3b,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x41,0x04,0x00,0x00,0x23,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x42,0x04,0x00,0x00,0x41,0x04,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x48,0x04,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x49,0x04,0x00,0x00,0x48,0x04,0x00,0x00,0x81,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0x4a,0x04,0x00,0x00,0x42,0x04,0x00,0x00,
+0x49,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x50,0x04,0x00,0x00,0x57,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x51,0x04,0x00,0x00,0x50,0x04,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x52,0x04,0x00,0x00,
+0x4a,0x04,0x00,0x00,0x51,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x58,0x04,0x00,0x00,0x72,0x03,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x59,0x04,0x00,0x00,
+0x58,0x04,0x00,0x00,0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x5a,0x04,0x00,0x00,0x52,0x04,0x00,0x00,0x59,0x04,0x00,0x00,
+0x70,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x5c,0x04,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0x5e,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x5a,0x04,0x00,0x00,0x5c,0x04,0x00,0x00,0x3c,0x04,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x64,0x04,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x65,0x04,0x00,0x00,0x64,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0x6b,0x04,0x00,0x00,0xa8,0x03,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x6c,0x04,0x00,0x00,
+0x6b,0x04,0x00,0x00,0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x6d,0x04,0x00,0x00,0x65,0x04,0x00,0x00,0x6c,0x04,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x73,0x04,0x00,0x00,
+0xc4,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x74,0x04,0x00,0x00,0x73,0x04,0x00,0x00,0x81,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0x75,0x04,0x00,0x00,0x6d,0x04,0x00,0x00,
+0x74,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x7b,0x04,0x00,0x00,0xe0,0x03,0x00,0x00,0x73,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x7c,0x04,0x00,0x00,0x7b,0x04,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x7d,0x04,0x00,0x00,
+0x75,0x04,0x00,0x00,0x7c,0x04,0x00,0x00,0x70,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x7f,0x04,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,0x81,0x04,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x7d,0x04,0x00,0x00,
+0x7f,0x04,0x00,0x00,0x5e,0x04,0x00,0x00,0x70,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x89,0x04,0x00,0x00,0xed,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x8d,0x04,0x00,0x00,
+0xfb,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x8e,0x04,0x00,0x00,0x1e,0x03,0x00,0x00,0x8d,0x04,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,0x8f,0x04,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xac,0x02,0x00,0x00,
+0x89,0x04,0x00,0x00,0x8e,0x04,0x00,0x00,0x70,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x92,0x04,0x00,0x00,0x36,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,0x94,0x04,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x88,0x03,0x00,0x00,
+0x92,0x04,0x00,0x00,0x8f,0x04,0x00,0x00,0x70,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x97,0x04,0x00,0x00,0x52,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,0x99,0x04,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xf7,0x03,0x00,0x00,
+0x97,0x04,0x00,0x00,0x94,0x04,0x00,0x00,0x85,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0x9d,0x04,0x00,0x00,0xde,0x00,0x00,0x00,
+0x81,0x04,0x00,0x00,0x7f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xfe,0x04,0x00,0x00,0x9d,0x04,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x9e,0x04,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x99,0x04,0x00,0x00,
+0xfe,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xa0,0x04,0x00,0x00,0xaf,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0xa1,0x04,0x00,0x00,0xa0,0x04,0x00,0x00,
+0x9e,0x04,0x00,0x00,0x3e,0x00,0x03,0x00,0xaf,0x00,0x00,0x00,
+0xa1,0x04,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa4,0x04,0x00,0x00,0xfa,0x04,0x00,0x00,0x51,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb4,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0xa5,0x04,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa7,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,0xa7,0x04,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xfb,0x04,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xbe,0x04,0x00,0x00,
+0xaa,0x04,0x00,0x00,0xac,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0xad,0x04,0x00,0x00,0xfb,0x04,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa9,0x04,0x00,0x00,0xaa,0x04,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xad,0x04,0x00,0x00,
+0xa8,0x04,0x00,0x00,0xa9,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa8,0x04,0x00,0x00,0xb0,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0xb0,0x04,0x00,0x00,0x71,0x00,0x00,0x00,0xfb,0x04,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb2,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb0,0x04,0x00,0x00,0xb1,0x04,0x00,0x00,
+0xb2,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,0xb1,0x04,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb6,0x04,0x00,0x00,
+0x71,0x00,0x00,0x00,0xfb,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x00,0x00,0x00,0xb7,0x04,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xb6,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xb8,0x04,0x00,0x00,0xb7,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x00,0x00,0x00,0xb9,0x04,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xba,0x04,0x00,0x00,0xb9,0x04,0x00,0x00,0x81,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0xbb,0x04,0x00,0x00,0xba,0x04,0x00,0x00,
+0xb8,0x04,0x00,0x00,0x3e,0x00,0x03,0x00,0xb9,0x04,0x00,0x00,
+0xbb,0x04,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x04,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x04,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xa5,0x04,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xaa,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaa,0x04,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x04,0x00,0x00,0xfb,0x04,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa7,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa9,0x04,0x00,0x00,0xaa,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0xc0,0x04,0x00,0x00,0x71,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xc2,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xc0,0x04,0x00,0x00,0xc1,0x04,0x00,0x00,
+0xc2,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,0xc1,0x04,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc9,0x04,0x00,0x00,
+0xf9,0x04,0x00,0x00,0x55,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x00,0x00,0x00,0xca,0x04,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xcb,0x04,0x00,0x00,0xca,0x04,0x00,0x00,0x41,0x00,0x06,0x00,
+0xcc,0x04,0x00,0x00,0xcd,0x04,0x00,0x00,0xc6,0x04,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc9,0x04,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xcd,0x04,0x00,0x00,0xcb,0x04,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc2,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,0xc2,0x04,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q5_k_f16_f32_len = 13436;
+
+unsigned char mul_mat_vec_q5_k_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xdf,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0xa7,0x04,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xca,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcb,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xcc,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xcc,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xce,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x3f,0x02,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x40,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x42,0x02,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x42,0x02,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xa4,0x04,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xa5,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xa5,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xa5,0x04,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xa7,0x04,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xa7,0x04,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xae,0x04,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x92,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xa4,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa5,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa6,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xae,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xb9,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc6,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xca,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0xcb,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0xcc,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xcd,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xce,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x03,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x41,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+0x50,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x11,0x02,0x00,0x00,0x51,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x3f,0x02,0x00,0x00,0xa4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x40,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0x20,0x00,0x04,0x00,
+0x41,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x41,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x46,0x02,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x10,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0x21,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0x30,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xff,0x02,0x00,0x00,0x31,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x86,0x04,0x00,0x00,
+0x08,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,0xa4,0x04,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xa5,0x04,0x00,0x00,
+0xa4,0x04,0x00,0x00,0x20,0x00,0x04,0x00,0xa6,0x04,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xa5,0x04,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xa6,0x04,0x00,0x00,0xa7,0x04,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x0f,0x00,0x00,0x00,0xae,0x04,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0xb6,0x04,0x00,0x00,0x11,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x04,0x00,0x00,0xb6,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0xb9,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xba,0x04,0x00,0x00,0xb9,0x04,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x04,0x00,0x00,0xb7,0x04,0x00,0x00,
+0xba,0x04,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x04,0x00,0x00,0xb7,0x04,0x00,0x00,0xba,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0xc1,0x04,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x04,0x00,0x00,0xc1,0x04,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc3,0x04,0x00,0x00,
+0xbb,0x04,0x00,0x00,0xc2,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0xc5,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc6,0x04,0x00,0x00,0xc5,0x04,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc7,0x04,0x00,0x00,0xbf,0x04,0x00,0x00,
+0xc6,0x04,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0xc9,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xca,0x04,0x00,0x00,
+0xc9,0x04,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x04,0x00,0x00,0xc3,0x04,0x00,0x00,0xca,0x04,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xcd,0x04,0x00,0x00,
+0xcb,0x04,0x00,0x00,0xc7,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0xcf,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x04,0x00,0x00,0xcf,0x04,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd1,0x04,0x00,0x00,0xcd,0x04,0x00,0x00,
+0xd0,0x04,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0xd3,0x04,0x00,0x00,0x1a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd4,0x04,0x00,0x00,
+0xd3,0x04,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x04,0x00,0x00,0xb7,0x04,0x00,0x00,0xd4,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0xd7,0x04,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x04,0x00,0x00,0xd7,0x04,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd9,0x04,0x00,0x00,
+0xb7,0x04,0x00,0x00,0xd8,0x04,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0xd1,0x04,0x00,0x00,0x64,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x94,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xae,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xaf,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xda,0x04,0x00,0x00,0x75,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x85,0x04,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0xda,0x04,0x00,0x00,0x65,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xba,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb3,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xda,0x04,0x00,0x00,0x64,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0xda,0x04,0x00,0x00,0x41,0x00,0x08,0x00,
+0xd4,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x73,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xd4,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc6,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0xea,0x00,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0xe4,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0xea,0x00,0x00,0x00,0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x30,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x31,0x01,0x00,0x00,
+0x32,0x01,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x43,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0xf5,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x50,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x4f,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x67,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x68,0x01,0x00,0x00,
+0x67,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x69,0x01,0x00,0x00,0x68,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x6a,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x6b,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x85,0x01,0x00,0x00,0x84,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x85,0x01,0x00,0x00,
+0x30,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x87,0x01,0x00,0x00,0x86,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x88,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x87,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x88,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x89,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x91,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x94,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x95,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x97,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0x9e,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x9f,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa0,0x01,0x00,0x00,
+0x9f,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xa1,0x01,0x00,0x00,0xa0,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xa2,0x01,0x00,0x00,0xa1,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0xa3,0x01,0x00,0x00,0xa2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,0xa3,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0xab,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xaa,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xac,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xad,0x01,0x00,0x00,0xac,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xae,0x01,0x00,0x00,
+0xad,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0xae,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0x90,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xba,0x01,0x00,0x00,
+0xb9,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xba,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xbd,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,0xbd,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xbf,0x01,0x00,0x00,
+0xbe,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xcf,0x01,0x00,0x00,0x9e,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xab,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x01,0x00,0x00,0x90,0x00,0x00,0x00,0x92,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0xe8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xeb,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xec,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0xee,0x01,0x00,0x00,0xed,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0xee,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf6,0x01,0x00,0x00,
+0x90,0x00,0x00,0x00,0xf5,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0xf6,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xf8,0x01,0x00,0x00,0xf7,0x01,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf9,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xfa,0x01,0x00,0x00,
+0xf9,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xfb,0x01,0x00,0x00,0xfa,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xfb,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0xfd,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x90,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,
+0x05,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,0x04,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x08,0x02,0x00,0x00,0x07,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x09,0x02,0x00,0x00,
+0x08,0x02,0x00,0x00,0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x9e,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x09,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,
+0x0a,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x90,0x00,0x00,0x00,0x11,0x02,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x12,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x15,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x16,0x02,0x00,0x00,0x15,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x17,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x25,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x17,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x21,0x02,0x00,0x00,
+0xe9,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x22,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x2a,0x02,0x00,0x00,
+0xf7,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x2a,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x33,0x02,0x00,0x00,
+0x05,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0x33,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,
+0x13,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0xd5,0x04,0x00,0x00,0xbf,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x46,0x02,0x00,0x00,0x47,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x45,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,
+0x97,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x50,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x53,0x02,0x00,0x00,0x51,0x02,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x54,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x56,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x58,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x59,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x58,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x59,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5f,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,
+0x60,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x5f,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x61,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x64,0x02,0x00,0x00,
+0x63,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x69,0x02,0x00,0x00,0x8a,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xe5,0x00,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x69,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,0x6d,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x6f,0x02,0x00,0x00,
+0x6e,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0x71,0x02,0x00,0x00,
+0x70,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x64,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x61,0x02,0x00,0x00,0x73,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x75,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x5a,0x02,0x00,0x00,
+0x74,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x79,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x79,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xb1,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0x84,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x83,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x87,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x88,0x02,0x00,0x00,0x87,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x89,0x02,0x00,0x00,0x88,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x89,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x8a,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x8f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x7b,0x02,0x00,0x00,0x8d,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,0x94,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x93,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x95,0x02,0x00,0x00,
+0x94,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x97,0x02,0x00,0x00,0xbf,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xe5,0x00,0x00,0x00,0x9e,0x02,0x00,0x00,0xd0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x9e,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0xa1,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa2,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,0xa2,0x02,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xa3,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,0xa4,0x02,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xa7,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0xa9,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x95,0x02,0x00,0x00,0xa7,0x02,0x00,0x00,
+0x8f,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xae,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,0xaf,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xae,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,
+0xaf,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xc7,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xb9,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0xc4,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xa0,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xb9,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xbf,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,
+0xb3,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0xc1,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0xc7,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x46,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,
+0xd0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xcc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xd4,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xd7,0x02,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xd8,0x02,0x00,0x00,0xd7,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,
+0xd8,0x02,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xd9,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0xdb,0x02,0x00,0x00,
+0xda,0x02,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xcd,0x02,0x00,0x00,0xdb,0x02,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,0xdc,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0xde,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xb0,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xde,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xe6,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x02,0x00,0x00,0xd9,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xe9,0x02,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,0xbb,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xf5,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0xab,0x00,0x05,0x00,
+0xb9,0x00,0x00,0x00,0xf6,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,
+0xf7,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xe9,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xf8,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xe6,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+0x45,0x02,0x00,0x00,0xff,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x46,0x02,0x00,0x00,0x01,0x03,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0xe2,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0x9e,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x0c,0x03,0x00,0x00,0xbb,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x0f,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x11,0x03,0x00,0x00,
+0x10,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0x13,0x03,0x00,0x00,
+0x12,0x03,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x05,0x03,0x00,0x00,0x13,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x15,0x03,0x00,0x00,0xfb,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0xd5,0x04,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x1b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,0xef,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x26,0x03,0x00,0x00,0x50,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x26,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,0x29,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x2a,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,0x2b,0x03,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x2d,0x03,0x00,0x00,0x20,0x03,0x00,0x00,
+0x2c,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x2e,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,
+0x34,0x03,0x00,0x00,0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x35,0x03,0x00,0x00,0x34,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0xfd,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x37,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x6a,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x41,0x03,0x00,0x00,0x3f,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x03,0x00,0x00,0x41,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x42,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x44,0x03,0x00,0x00,
+0x43,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0x44,0x03,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x46,0x03,0x00,0x00,0x38,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x46,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0x48,0x03,0x00,0x00,0x35,0x03,0x00,0x00,
+0x47,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0x49,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x1d,0x03,0x00,0x00,0x2e,0x03,0x00,0x00,0x48,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0xa8,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x46,0x02,0x00,0x00,0x4e,0x03,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x51,0x03,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0x51,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x84,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x59,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0x5b,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x5d,0x03,0x00,0x00,
+0x5c,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x5d,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,
+0x5e,0x03,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x60,0x03,0x00,0x00,
+0x52,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0x60,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,0x63,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x4f,0x03,0x00,0x00,
+0x61,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,
+0x68,0x03,0x00,0x00,0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x67,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x69,0x03,0x00,0x00,0x68,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,0x19,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x6b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x73,0x03,0x00,0x00,0x9e,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x97,0x00,0x00,0x00,0x75,0x03,0x00,0x00,0x73,0x03,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x76,0x03,0x00,0x00,0x75,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x77,0x03,0x00,0x00,0x76,0x03,0x00,0x00,
+0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,0x78,0x03,0x00,0x00,
+0x77,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,
+0x1b,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0x78,0x03,0x00,0x00,
+0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x7a,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,
+0x79,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x7b,0x03,0x00,0x00,0x7a,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x7d,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x69,0x03,0x00,0x00,0x7b,0x03,0x00,0x00,
+0x63,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x82,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,0x83,0x03,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x82,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x84,0x03,0x00,0x00,
+0x83,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x86,0x03,0x00,0x00,0x22,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x87,0x03,0x00,0x00,0x86,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,
+0x50,0x02,0x00,0x00,0xc4,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0x8f,0x03,0x00,0x00,0xa3,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0x90,0x03,0x00,0x00,
+0x8d,0x03,0x00,0x00,0x8f,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x91,0x03,0x00,0x00,0x90,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x92,0x03,0x00,0x00,
+0x91,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0x93,0x03,0x00,0x00,0x92,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0x94,0x03,0x00,0x00,
+0x93,0x03,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x95,0x03,0x00,0x00,
+0x87,0x03,0x00,0x00,0x94,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x96,0x03,0x00,0x00,0x95,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0xc7,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x46,0x02,0x00,0x00,0x9c,0x03,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x9d,0x03,0x00,0x00,0x9c,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x9f,0x03,0x00,0x00,
+0x2b,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xa0,0x03,0x00,0x00,0x9f,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xa7,0x03,0x00,0x00,0x6a,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xaa,0x03,0x00,0x00,
+0xa7,0x03,0x00,0x00,0x8f,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xab,0x03,0x00,0x00,0xaa,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xac,0x03,0x00,0x00,
+0xab,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0xad,0x03,0x00,0x00,0xac,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0xae,0x03,0x00,0x00,
+0xad,0x03,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xa0,0x03,0x00,0x00,0xae,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xb0,0x03,0x00,0x00,0xaf,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0xb1,0x03,0x00,0x00,
+0x9d,0x03,0x00,0x00,0xb0,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0xb2,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x84,0x03,0x00,0x00,0x96,0x03,0x00,0x00,
+0xb1,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,0xb7,0x03,0x00,0x00,
+0x42,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0xb6,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xb8,0x03,0x00,0x00,
+0xb7,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xba,0x03,0x00,0x00,0x34,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xbb,0x03,0x00,0x00,0xba,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0xc2,0x03,0x00,0x00,
+0x84,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,
+0xc5,0x03,0x00,0x00,0xc2,0x03,0x00,0x00,0x8f,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xc6,0x03,0x00,0x00,
+0xc5,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xc7,0x03,0x00,0x00,0xc6,0x03,0x00,0x00,0xab,0x00,0x05,0x00,
+0xb9,0x00,0x00,0x00,0xc8,0x03,0x00,0x00,0xc7,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,
+0xc9,0x03,0x00,0x00,0xc8,0x03,0x00,0x00,0x57,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xca,0x03,0x00,0x00,0xbb,0x03,0x00,0x00,0xc9,0x03,0x00,0x00,
+0x6f,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,
+0xca,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0xcd,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xb8,0x03,0x00,0x00,0xcb,0x03,0x00,0x00,0xb2,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd1,0x03,0x00,0x00,
+0x1b,0x03,0x00,0x00,0xff,0x02,0x00,0x00,0x41,0x00,0x06,0x00,
+0x46,0x02,0x00,0x00,0xd2,0x03,0x00,0x00,0x42,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd1,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xd3,0x03,0x00,0x00,0xd2,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xd5,0x03,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xd6,0x03,0x00,0x00,0xd5,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0xdd,0x03,0x00,0x00,0x9e,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x97,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,
+0xdd,0x03,0x00,0x00,0x8f,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe1,0x03,0x00,0x00,0xe0,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xe2,0x03,0x00,0x00,
+0xe1,0x03,0x00,0x00,0xab,0x00,0x05,0x00,0xb9,0x00,0x00,0x00,
+0xe3,0x03,0x00,0x00,0xe2,0x03,0x00,0x00,0x61,0x00,0x00,0x00,
+0xa9,0x00,0x06,0x00,0x1b,0x00,0x00,0x00,0xe4,0x03,0x00,0x00,
+0xe3,0x03,0x00,0x00,0x57,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xe5,0x03,0x00,0x00,
+0xd6,0x03,0x00,0x00,0xe4,0x03,0x00,0x00,0x6f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xe6,0x03,0x00,0x00,0xe5,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,0xe8,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xd3,0x03,0x00,0x00,
+0xe6,0x03,0x00,0x00,0xcd,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xee,0x03,0x00,0x00,0x47,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xf4,0x03,0x00,0x00,
+0x60,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0xf5,0x03,0x00,0x00,0xee,0x03,0x00,0x00,0xf4,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0xfb,0x03,0x00,0x00,
+0x7a,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0xfc,0x03,0x00,0x00,0xf5,0x03,0x00,0x00,0xfb,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x02,0x04,0x00,0x00,
+0x94,0x02,0x00,0x00,0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x03,0x04,0x00,0x00,0xfc,0x03,0x00,0x00,0x02,0x04,0x00,0x00,
+0x70,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x05,0x04,0x00,0x00,
+0x09,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x0c,0x04,0x00,0x00,0xaf,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x12,0x04,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x13,0x04,0x00,0x00,
+0x0c,0x04,0x00,0x00,0x12,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x19,0x04,0x00,0x00,0xe5,0x02,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x1a,0x04,0x00,0x00,
+0x13,0x04,0x00,0x00,0x19,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x01,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x21,0x04,0x00,0x00,
+0x1a,0x04,0x00,0x00,0x20,0x04,0x00,0x00,0x70,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x23,0x04,0x00,0x00,0x18,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x24,0x04,0x00,0x00,
+0x21,0x04,0x00,0x00,0x23,0x04,0x00,0x00,0x0c,0x00,0x08,0x00,
+0xa4,0x00,0x00,0x00,0x25,0x04,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x05,0x04,0x00,0x00,
+0x24,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x2a,0x04,0x00,0x00,0x1c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x30,0x04,0x00,0x00,0x34,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x31,0x04,0x00,0x00,
+0x2a,0x04,0x00,0x00,0x30,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x37,0x04,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x38,0x04,0x00,0x00,
+0x31,0x04,0x00,0x00,0x37,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x3e,0x04,0x00,0x00,0x68,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x3f,0x04,0x00,0x00,
+0x38,0x04,0x00,0x00,0x3e,0x04,0x00,0x00,0x70,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x41,0x04,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,0x43,0x04,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3f,0x04,0x00,0x00,
+0x41,0x04,0x00,0x00,0x25,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x49,0x04,0x00,0x00,0x83,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x4f,0x04,0x00,0x00,
+0x9c,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x50,0x04,0x00,0x00,0x49,0x04,0x00,0x00,0x4f,0x04,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x56,0x04,0x00,0x00,
+0xb7,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x57,0x04,0x00,0x00,0x50,0x04,0x00,0x00,0x56,0x04,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x5d,0x04,0x00,0x00,
+0xd2,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,
+0x5e,0x04,0x00,0x00,0x57,0x04,0x00,0x00,0x5d,0x04,0x00,0x00,
+0x70,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x60,0x04,0x00,0x00,
+0x8a,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0x62,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x5e,0x04,0x00,0x00,0x60,0x04,0x00,0x00,0x43,0x04,0x00,0x00,
+0x70,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x6a,0x04,0x00,0x00,
+0xed,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0x6e,0x04,0x00,0x00,0xfb,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0xa4,0x00,0x00,0x00,0x6f,0x04,0x00,0x00,0x17,0x03,0x00,0x00,
+0x6e,0x04,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0x70,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x6a,0x04,0x00,0x00,0x6f,0x04,0x00,0x00,
+0x70,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x73,0x04,0x00,0x00,
+0x36,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0x75,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x7d,0x03,0x00,0x00,0x73,0x04,0x00,0x00,0x70,0x04,0x00,0x00,
+0x70,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x78,0x04,0x00,0x00,
+0x52,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,
+0x7a,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xe8,0x03,0x00,0x00,0x78,0x04,0x00,0x00,0x75,0x04,0x00,0x00,
+0x85,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x7e,0x04,0x00,0x00,
+0xde,0x00,0x00,0x00,0x62,0x04,0x00,0x00,0x7f,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xde,0x04,0x00,0x00,0x7e,0x04,0x00,0x00,
+0x0c,0x00,0x08,0x00,0xa4,0x00,0x00,0x00,0x7f,0x04,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x7a,0x04,0x00,0x00,0xde,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x81,0x04,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x82,0x04,0x00,0x00,
+0x81,0x04,0x00,0x00,0x7f,0x04,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xaf,0x00,0x00,0x00,0x82,0x04,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x85,0x04,0x00,0x00,0xda,0x04,0x00,0x00,
+0x51,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb4,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x86,0x04,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x88,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x88,0x04,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0xdb,0x04,0x00,0x00,0xa8,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x9f,0x04,0x00,0x00,0x8b,0x04,0x00,0x00,0xac,0x00,0x05,0x00,
+0xb9,0x00,0x00,0x00,0x8e,0x04,0x00,0x00,0xdb,0x04,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x8a,0x04,0x00,0x00,
+0x8b,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x8e,0x04,0x00,0x00,0x89,0x04,0x00,0x00,0x8a,0x04,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x04,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xb9,0x00,0x00,0x00,0x91,0x04,0x00,0x00,0x71,0x00,0x00,0x00,
+0xdb,0x04,0x00,0x00,0xf7,0x00,0x03,0x00,0x93,0x04,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x91,0x04,0x00,0x00,
+0x92,0x04,0x00,0x00,0x93,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x92,0x04,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x97,0x04,0x00,0x00,0x71,0x00,0x00,0x00,0xdb,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0xae,0x00,0x00,0x00,0x98,0x04,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x97,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x99,0x04,0x00,0x00,0x98,0x04,0x00,0x00,
+0x41,0x00,0x05,0x00,0xae,0x00,0x00,0x00,0x9a,0x04,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0x9b,0x04,0x00,0x00,0x9a,0x04,0x00,0x00,
+0x81,0x00,0x05,0x00,0xa4,0x00,0x00,0x00,0x9c,0x04,0x00,0x00,
+0x9b,0x04,0x00,0x00,0x99,0x04,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9a,0x04,0x00,0x00,0x9c,0x04,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x93,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,0x93,0x04,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x86,0x04,0x00,0x00,0xf9,0x00,0x02,0x00,0x8b,0x04,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8b,0x04,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9f,0x04,0x00,0x00,0xdb,0x04,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x88,0x04,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x04,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xb9,0x00,0x00,0x00,0xa1,0x04,0x00,0x00,0x71,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xa3,0x04,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xa1,0x04,0x00,0x00,
+0xa2,0x04,0x00,0x00,0xa3,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x04,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xaa,0x04,0x00,0x00,0xd9,0x04,0x00,0x00,0x55,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xae,0x00,0x00,0x00,0xab,0x04,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xa4,0x00,0x00,0x00,0xac,0x04,0x00,0x00,0xab,0x04,0x00,0x00,
+0x41,0x00,0x06,0x00,0x46,0x02,0x00,0x00,0xad,0x04,0x00,0x00,
+0xa7,0x04,0x00,0x00,0x61,0x00,0x00,0x00,0xaa,0x04,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xad,0x04,0x00,0x00,0xac,0x04,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa3,0x04,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa3,0x04,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_q5_k_f32_f32_len = 12924;
+
+unsigned char mul_mat_vec_q6_k_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x2d,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xec,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xed,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xed,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xed,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xef,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xef,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf7,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x9d,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x9f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x9f,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xbd,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc0,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0xc1,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xca,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd8,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xec,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xfb,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x14,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,0x60,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xec,0x01,0x00,0x00,0x9d,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xed,0x01,0x00,0x00,0xec,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0xee,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xed,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xee,0x01,0x00,0x00,0xef,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xf5,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x0f,0x00,0x00,0x00,0xf7,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x23,0x04,0x00,0x00,0x21,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x04,0x00,0x00,
+0x41,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x25,0x04,0x00,0x00,0x61,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x26,0x04,0x00,0x00,0x22,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x27,0x04,0x00,0x00,
+0x42,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x28,0x04,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x29,0x04,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x2a,0x04,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x04,0x00,0x00,0x43,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x04,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x11,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0xff,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x02,0x02,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x03,0x02,0x00,0x00,0x02,0x02,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x04,0x02,0x00,0x00,0x00,0x02,0x00,0x00,
+0x03,0x02,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x08,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x03,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,
+0x04,0x02,0x00,0x00,0x0b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x0e,0x02,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x0e,0x02,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x02,0x00,0x00,0x08,0x02,0x00,0x00,
+0x0f,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x12,0x02,0x00,0x00,0x1a,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x02,0x00,0x00,
+0x12,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x14,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x13,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,
+0x14,0x02,0x00,0x00,0x10,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x02,0x00,0x00,0x18,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x16,0x02,0x00,0x00,
+0x19,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x1a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x1c,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x1d,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x21,0x02,0x00,0x00,0x20,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x21,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0x64,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x23,0x02,0x00,0x00,
+0x75,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,
+0xac,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x23,0x02,0x00,0x00,0x64,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x23,0x02,0x00,0x00,0x41,0x00,0x07,0x00,0xca,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0xfb,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x91,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x11,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0xde,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,
+0x1f,0x01,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x96,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xec,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x26,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x27,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x8b,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x36,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0xde,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xca,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xec,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x58,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x63,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6f,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x70,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x7a,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x7c,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,0x7d,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x70,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x83,0x01,0x00,0x00,0x82,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x9d,0x00,0x00,0x00,0x85,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x83,0x01,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8d,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0x8f,0x01,0x00,0x00,
+0x8e,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x90,0x01,0x00,0x00,0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x96,0x00,0x00,0x00,
+0x95,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xec,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x98,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x99,0x01,0x00,0x00,0x98,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x9a,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x99,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x9c,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0xa7,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa8,0x01,0x00,0x00,
+0xa7,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xa9,0x01,0x00,0x00,0xa8,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xb5,0x01,0x00,0x00,
+0xb4,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xb6,0x01,0x00,0x00,0xb5,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xb7,0x01,0x00,0x00,
+0xb6,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xa9,0x01,0x00,0x00,
+0xb7,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xba,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,
+0xba,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xbc,0x01,0x00,0x00,0xbb,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0xbe,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x9c,0x01,0x00,0x00,
+0xbc,0x01,0x00,0x00,0x85,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x02,0x00,0x00,0xde,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,
+0x34,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x32,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0x34,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x3a,0x02,0x00,0x00,
+0xed,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x3a,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x36,0x02,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x3d,0x02,0x00,0x00,0x3c,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x02,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xfb,0x00,0x00,0x00,0x42,0x02,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x43,0x02,0x00,0x00,0x42,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x44,0x02,0x00,0x00,0x43,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0x44,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x46,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0x00,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x08,0x00,
+0xfb,0x00,0x00,0x00,0x4a,0x02,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x49,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x61,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x51,0x02,0x00,0x00,0x46,0x02,0x00,0x00,0x50,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x52,0x02,0x00,0x00,
+0x51,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x53,0x02,0x00,0x00,0x52,0x02,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x54,0x02,0x00,0x00,0x53,0x02,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x55,0x02,0x00,0x00,0x54,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5a,0x02,0x00,0x00,0xde,0x00,0x00,0x00,
+0x23,0x04,0x00,0x00,0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,
+0x5b,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x5a,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x61,0x02,0x00,0x00,
+0x27,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x61,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,
+0x62,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x68,0x02,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x23,0x04,0x00,0x00,0x41,0x00,0x08,0x00,
+0xfb,0x00,0x00,0x00,0x69,0x02,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x68,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x6a,0x02,0x00,0x00,0x69,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x02,0x00,0x00,0x6a,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x6b,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0x00,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x76,0x02,0x00,0x00,0x75,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x76,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x79,0x02,0x00,0x00,0x78,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x7a,0x02,0x00,0x00,
+0x79,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x7a,0x02,0x00,0x00,0x14,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x7b,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x7c,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0x7e,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x55,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0xde,0x00,0x00,0x00,
+0x24,0x04,0x00,0x00,0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,
+0x83,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x82,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x83,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x84,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x89,0x02,0x00,0x00,
+0x5e,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x89,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x85,0x02,0x00,0x00,
+0x8a,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x8c,0x02,0x00,0x00,0x8b,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x92,0x02,0x00,0x00,
+0x42,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x92,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x02,0x00,0x00,
+0x93,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x9a,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x9c,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x9e,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xa0,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0x9f,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xa1,0x02,0x00,0x00,0xa0,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xa2,0x02,0x00,0x00,0xa1,0x02,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0xa2,0x02,0x00,0x00,0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0xa6,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xde,0x00,0x00,0x00,
+0x25,0x04,0x00,0x00,0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,
+0xab,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xaa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,0x73,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xad,0x02,0x00,0x00,0xac,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0xb1,0x02,0x00,0x00,
+0x97,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0xb1,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xad,0x02,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x69,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,0x4a,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0xc3,0x02,0x00,0x00,
+0xc2,0x02,0x00,0x00,0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,0xc3,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xc5,0x02,0x00,0x00,
+0xc4,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0xc5,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xc8,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xc7,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xc9,0x02,0x00,0x00,0xc8,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xca,0x02,0x00,0x00,0xc9,0x02,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xcb,0x02,0x00,0x00,
+0xca,0x02,0x00,0x00,0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xcc,0x02,0x00,0x00,0xcb,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0xce,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xb4,0x02,0x00,0x00,
+0xcc,0x02,0x00,0x00,0xa6,0x02,0x00,0x00,0x81,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xcf,0x02,0x00,0x00,0xbe,0x01,0x00,0x00,
+0xce,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xda,0x02,0x00,0x00,0xde,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0xdd,0x02,0x00,0x00,
+0xdc,0x02,0x00,0x00,0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xde,0x02,0x00,0x00,0xdd,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,0xed,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xe2,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xde,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,
+0xea,0x02,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xeb,0x02,0x00,0x00,
+0xea,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xec,0x02,0x00,0x00,0xeb,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xee,0x02,0x00,0x00,
+0xed,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xf1,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xf3,0x02,0x00,0x00,
+0xf2,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0xf4,0x02,0x00,0x00,0xf3,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf5,0x02,0x00,0x00,
+0xf4,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xf6,0x02,0x00,0x00,0xf5,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xf7,0x02,0x00,0x00,0xf6,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xf8,0x02,0x00,0x00,0xf7,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0xee,0x02,0x00,0x00,0xf8,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xfc,0x02,0x00,0x00,0xfb,0x02,0x00,0x00,0x14,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xfd,0x02,0x00,0x00,
+0xfc,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x02,0x03,0x00,0x00,0xde,0x00,0x00,0x00,0x26,0x04,0x00,0x00,
+0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,0x03,0x03,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x02,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
+0x03,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x05,0x03,0x00,0x00,0x04,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x09,0x03,0x00,0x00,0x27,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x09,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x0b,0x03,0x00,0x00,0x05,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+0x0b,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x10,0x03,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x26,0x04,0x00,0x00,0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,
+0x11,0x03,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x10,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x12,0x03,0x00,0x00,
+0x11,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x13,0x03,0x00,0x00,0x12,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x14,0x03,0x00,0x00,0x13,0x03,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x15,0x03,0x00,0x00,
+0x14,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x1a,0x03,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x1a,0x03,0x00,0x00,0xe9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x03,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1d,0x03,0x00,0x00,
+0x1c,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x1d,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x1f,0x03,0x00,0x00,
+0x1e,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x15,0x03,0x00,0x00,
+0x1f,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x21,0x03,0x00,0x00,0x20,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x21,0x03,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x23,0x03,0x00,0x00,
+0x22,0x03,0x00,0x00,0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x24,0x03,0x00,0x00,0x23,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x25,0x03,0x00,0x00,
+0x0c,0x03,0x00,0x00,0x24,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x9d,0x00,0x00,0x00,0x26,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,0xfd,0x02,0x00,0x00,
+0x25,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x03,0x00,0x00,0xde,0x00,0x00,0x00,0x27,0x04,0x00,0x00,
+0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,0x2b,0x03,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x2a,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0x2c,0x03,0x00,0x00,
+0x2b,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x2d,0x03,0x00,0x00,0x2c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x31,0x03,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x32,0x03,0x00,0x00,
+0x31,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x33,0x03,0x00,0x00,0x2d,0x03,0x00,0x00,0x32,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x34,0x03,0x00,0x00,
+0x33,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,0xea,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x3a,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,0x3b,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x42,0x03,0x00,0x00,0xf2,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x43,0x03,0x00,0x00,0x42,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x03,0x00,0x00,0x43,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x45,0x03,0x00,0x00,0x44,0x03,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x46,0x03,0x00,0x00,
+0x45,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0x46,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x48,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,0x47,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x49,0x03,0x00,0x00,
+0x48,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x4a,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x4b,0x03,0x00,0x00,0x4a,0x03,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x4c,0x03,0x00,0x00,0x4b,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x9d,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x34,0x03,0x00,0x00,0x4c,0x03,0x00,0x00,
+0x26,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x52,0x03,0x00,0x00,0xde,0x00,0x00,0x00,0x28,0x04,0x00,0x00,
+0x41,0x00,0x06,0x00,0xca,0x00,0x00,0x00,0x53,0x03,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x52,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xc0,0x00,0x00,0x00,0x54,0x03,0x00,0x00,
+0x53,0x03,0x00,0x00,0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x55,0x03,0x00,0x00,0x54,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x59,0x03,0x00,0x00,0x97,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x59,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x5b,0x03,0x00,0x00,0x55,0x03,0x00,0x00,0x5a,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,
+0x5b,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x62,0x03,0x00,0x00,0x11,0x03,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x63,0x03,0x00,0x00,
+0x62,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x64,0x03,0x00,0x00,0x63,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x65,0x03,0x00,0x00,
+0x64,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x6a,0x03,0x00,0x00,0xf2,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x6b,0x03,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x6c,0x03,0x00,0x00,0x6b,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x6d,0x03,0x00,0x00,0x6c,0x03,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x6d,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x6f,0x03,0x00,0x00,0x6e,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x70,0x03,0x00,0x00,0x65,0x03,0x00,0x00,0x6f,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x71,0x03,0x00,0x00,
+0x70,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x72,0x03,0x00,0x00,0x71,0x03,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x73,0x03,0x00,0x00,0x72,0x03,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x74,0x03,0x00,0x00,0x73,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x9d,0x00,0x00,0x00,0x76,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x5c,0x03,0x00,0x00,0x74,0x03,0x00,0x00,
+0x4e,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x77,0x03,0x00,0x00,0xcf,0x02,0x00,0x00,0x76,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x82,0x03,0x00,0x00,
+0xde,0x00,0x00,0x00,0x29,0x04,0x00,0x00,0x41,0x00,0x06,0x00,
+0xca,0x00,0x00,0x00,0x84,0x03,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x82,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0x85,0x03,0x00,0x00,0x84,0x03,0x00,0x00,
+0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x86,0x03,0x00,0x00,
+0x85,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x8a,0x03,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x8b,0x03,0x00,0x00,0x8a,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x8c,0x03,0x00,0x00,
+0x86,0x03,0x00,0x00,0x8b,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,0x8c,0x03,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x90,0x03,0x00,0x00,0x8b,0x00,0x00,0x00,0x29,0x04,0x00,0x00,
+0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,0x92,0x03,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x90,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x93,0x03,0x00,0x00,0x92,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x94,0x03,0x00,0x00,
+0x93,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x95,0x03,0x00,0x00,0x94,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x96,0x03,0x00,0x00,0x95,0x03,0x00,0x00,
+0x00,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x99,0x03,0x00,0x00,0x91,0x00,0x00,0x00,0x29,0x04,0x00,0x00,
+0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,0x9a,0x03,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x99,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x9b,0x03,0x00,0x00,0x9a,0x03,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x9c,0x03,0x00,0x00,
+0x9b,0x03,0x00,0x00,0x61,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x03,0x00,0x00,0x9c,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x9e,0x03,0x00,0x00,
+0x9d,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x9f,0x03,0x00,0x00,0x9e,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xa0,0x03,0x00,0x00,
+0x9f,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,0x96,0x03,0x00,0x00,
+0xa0,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xa2,0x03,0x00,0x00,0xa1,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xa3,0x03,0x00,0x00,0xa2,0x03,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xa4,0x03,0x00,0x00,
+0xa3,0x03,0x00,0x00,0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xa5,0x03,0x00,0x00,0xa4,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaa,0x03,0x00,0x00,
+0xde,0x00,0x00,0x00,0x2a,0x04,0x00,0x00,0x41,0x00,0x06,0x00,
+0xca,0x00,0x00,0x00,0xab,0x03,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xaa,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xac,0x03,0x00,0x00,0xab,0x03,0x00,0x00,
+0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xad,0x03,0x00,0x00,
+0xac,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xb1,0x03,0x00,0x00,0x27,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xb2,0x03,0x00,0x00,0xb1,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xb3,0x03,0x00,0x00,
+0xad,0x03,0x00,0x00,0xb2,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xb4,0x03,0x00,0x00,0xb3,0x03,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x03,0x00,0x00,0x8b,0x00,0x00,0x00,0x2a,0x04,0x00,0x00,
+0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xb8,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xba,0x03,0x00,0x00,0xb9,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbb,0x03,0x00,0x00,
+0xba,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xbc,0x03,0x00,0x00,0xbb,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xbd,0x03,0x00,0x00,0xbc,0x03,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xc2,0x03,0x00,0x00,0x9a,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xc3,0x03,0x00,0x00,0xc2,0x03,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x03,0x00,0x00,0xc3,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xc5,0x03,0x00,0x00,0xc4,0x03,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xc6,0x03,0x00,0x00,
+0xc5,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xc7,0x03,0x00,0x00,0xc6,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xc8,0x03,0x00,0x00,0xbd,0x03,0x00,0x00,0xc7,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0xc9,0x03,0x00,0x00,
+0xc8,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xca,0x03,0x00,0x00,0xc9,0x03,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,0xca,0x03,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xcc,0x03,0x00,0x00,0xcb,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xcd,0x03,0x00,0x00,0xb4,0x03,0x00,0x00,
+0xcc,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,
+0xce,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x8d,0x03,0x00,0x00,0xa5,0x03,0x00,0x00,0xcd,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xd2,0x03,0x00,0x00,
+0xde,0x00,0x00,0x00,0x2b,0x04,0x00,0x00,0x41,0x00,0x06,0x00,
+0xca,0x00,0x00,0x00,0xd3,0x03,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xd2,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xd4,0x03,0x00,0x00,0xd3,0x03,0x00,0x00,
+0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xd5,0x03,0x00,0x00,
+0xd4,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xd9,0x03,0x00,0x00,0x5e,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xda,0x03,0x00,0x00,0xd9,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xdb,0x03,0x00,0x00,
+0xd5,0x03,0x00,0x00,0xda,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xdc,0x03,0x00,0x00,0xdb,0x03,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xe2,0x03,0x00,0x00,0x92,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xe3,0x03,0x00,0x00,0xe2,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x03,0x00,0x00,0xe3,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xe5,0x03,0x00,0x00,0xe4,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xea,0x03,0x00,0x00,
+0x9a,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0xeb,0x03,0x00,0x00,0xea,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xec,0x03,0x00,0x00,
+0xeb,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xed,0x03,0x00,0x00,0xec,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xee,0x03,0x00,0x00,0xed,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xef,0x03,0x00,0x00,0xee,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,
+0xe5,0x03,0x00,0x00,0xef,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0xf1,0x03,0x00,0x00,0xf0,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xf2,0x03,0x00,0x00,
+0xf1,0x03,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xf3,0x03,0x00,0x00,0xf2,0x03,0x00,0x00,0x14,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xf4,0x03,0x00,0x00,
+0xf3,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,
+0xf6,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xdc,0x03,0x00,0x00,0xf4,0x03,0x00,0x00,0xce,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xfa,0x03,0x00,0x00,
+0xde,0x00,0x00,0x00,0x2c,0x04,0x00,0x00,0x41,0x00,0x06,0x00,
+0xca,0x00,0x00,0x00,0xfb,0x03,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xfa,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,0xfb,0x03,0x00,0x00,
+0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xfd,0x03,0x00,0x00,
+0xfc,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x01,0x04,0x00,0x00,0x97,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x02,0x04,0x00,0x00,0x01,0x04,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x03,0x04,0x00,0x00,
+0xfd,0x03,0x00,0x00,0x02,0x04,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x03,0x04,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x0a,0x04,0x00,0x00,0xb9,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x0b,0x04,0x00,0x00,0x0a,0x04,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x04,0x00,0x00,0x0b,0x04,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x0d,0x04,0x00,0x00,0x0c,0x04,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x12,0x04,0x00,0x00,
+0x9a,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x13,0x04,0x00,0x00,0x12,0x04,0x00,0x00,0x45,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x04,0x00,0x00,
+0x13,0x04,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x15,0x04,0x00,0x00,0x14,0x04,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x16,0x04,0x00,0x00,0x15,0x04,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x17,0x04,0x00,0x00,0x16,0x04,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x18,0x04,0x00,0x00,
+0x0d,0x04,0x00,0x00,0x17,0x04,0x00,0x00,0x72,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x19,0x04,0x00,0x00,0x18,0x04,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1a,0x04,0x00,0x00,
+0x19,0x04,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x04,0x00,0x00,0x1a,0x04,0x00,0x00,0x14,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x1c,0x04,0x00,0x00,
+0x1b,0x04,0x00,0x00,0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,
+0x1e,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x04,0x04,0x00,0x00,0x1c,0x04,0x00,0x00,0xf6,0x03,0x00,0x00,
+0x81,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x1f,0x04,0x00,0x00,
+0x77,0x03,0x00,0x00,0x1e,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xc9,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0xc9,0x01,0x00,0x00,0x1f,0x04,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0xca,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xcd,0x01,0x00,0x00,0x23,0x02,0x00,0x00,
+0x51,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xad,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xce,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd0,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0xa1,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xe7,0x01,0x00,0x00,0xd3,0x01,0x00,0x00,0xac,0x00,0x05,0x00,
+0xb2,0x00,0x00,0x00,0xd6,0x01,0x00,0x00,0x24,0x02,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd2,0x01,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd6,0x01,0x00,0x00,0xd1,0x01,0x00,0x00,0xd2,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd1,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0xb2,0x00,0x00,0x00,0xd9,0x01,0x00,0x00,0x71,0x00,0x00,0x00,
+0x24,0x02,0x00,0x00,0xf7,0x00,0x03,0x00,0xdb,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd9,0x01,0x00,0x00,
+0xda,0x01,0x00,0x00,0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xda,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x01,0x00,0x00,0x71,0x00,0x00,0x00,0x24,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa7,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa7,0x00,0x00,0x00,0xe2,0x01,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xe3,0x01,0x00,0x00,0xe2,0x01,0x00,0x00,
+0x81,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xe3,0x01,0x00,0x00,0xe1,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xe2,0x01,0x00,0x00,0xe4,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xdb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xdb,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0xce,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd3,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x01,0x00,0x00,0x24,0x02,0x00,0x00,
+0x05,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd2,0x01,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xb2,0x00,0x00,0x00,0xe9,0x01,0x00,0x00,0x71,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xeb,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xe9,0x01,0x00,0x00,
+0xea,0x01,0x00,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xea,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x01,0x00,0x00,0x22,0x02,0x00,0x00,0x55,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa7,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xf4,0x01,0x00,0x00,0xf3,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00,
+0xef,0x01,0x00,0x00,0x61,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf6,0x01,0x00,0x00,0xf4,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xeb,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xeb,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_q6_k_f16_f32_len = 12108;
+
+unsigned char mul_mat_vec_q6_k_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x1d,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x27,0x00,0x00,0x00,
+0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,0x11,0x00,0x02,0x00,
+0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,0xec,0x01,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x18,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x18,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x4a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xbc,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xbd,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc1,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc1,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc2,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc5,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xd9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xd9,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xdb,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe9,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xea,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xea,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xea,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xec,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xec,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xf3,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x0f,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x18,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x4a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0x10,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x9d,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0x9e,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x9f,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x9f,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa7,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0xb2,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbc,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xbd,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,0xbf,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0xc0,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0xc1,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xc9,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xca,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xd8,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xd9,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xda,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xda,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xec,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xfb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x60,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x92,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x08,0x01,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xe9,0x01,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xea,0x01,0x00,0x00,0xe9,0x01,0x00,0x00,
+0x20,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xea,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,0xeb,0x01,0x00,0x00,
+0xec,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x0f,0x00,0x00,0x00,0xf3,0x01,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x13,0x04,0x00,0x00,0x21,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x04,0x00,0x00,
+0x41,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x15,0x04,0x00,0x00,0x61,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x16,0x04,0x00,0x00,0x22,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x17,0x04,0x00,0x00,
+0x42,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x04,0x00,0x00,0x62,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x19,0x04,0x00,0x00,0x03,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x04,0x00,0x00,
+0x23,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1b,0x04,0x00,0x00,0x43,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1c,0x04,0x00,0x00,0x63,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x13,0x00,0x00,0x00,0xfb,0x01,0x00,0x00,0x11,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x01,0x00,0x00,0xfb,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xff,0x01,0x00,0x00,0xfe,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,
+0xff,0x01,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x04,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,0xff,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x06,0x02,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x06,0x02,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x00,
+0x00,0x02,0x00,0x00,0x07,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x0a,0x02,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x2e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x0a,0x02,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x02,0x00,0x00,0x04,0x02,0x00,0x00,
+0x0b,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x1a,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x0e,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x02,0x00,0x00,0x08,0x02,0x00,0x00,0x0f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x12,0x02,0x00,0x00,
+0x10,0x02,0x00,0x00,0x0c,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x14,0x02,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x15,0x02,0x00,0x00,0x14,0x02,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x12,0x02,0x00,0x00,
+0x15,0x02,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x18,0x02,0x00,0x00,0x1a,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x02,0x00,0x00,
+0x18,0x02,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x02,0x00,0x00,0xfc,0x01,0x00,0x00,0x19,0x02,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x02,0x00,0x00,0x1c,0x02,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+0xfc,0x01,0x00,0x00,0x1d,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x16,0x02,0x00,0x00,0x64,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x55,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x13,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x79,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x91,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x79,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,0x71,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa7,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa8,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xab,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xab,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,
+0x75,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xca,0x01,0x00,0x00,
+0xac,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x65,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xac,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x1f,0x02,0x00,0x00,0x64,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x1f,0x02,0x00,0x00,0x41,0x00,0x07,0x00,0xca,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xc0,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0x1a,0x02,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xec,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x91,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,0x61,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0e,0x01,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x01,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0x51,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xec,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x28,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x29,0x01,0x00,0x00,0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x34,0x01,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x41,0x01,0x00,0x00,0xe9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x44,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x38,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x9d,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xec,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x56,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x6b,0x01,0x00,0x00,0xfc,0x00,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x6b,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x6d,0x01,0x00,0x00,0x6c,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x6d,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x77,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x78,0x01,0x00,0x00,0x77,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x79,0x01,0x00,0x00,0x78,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x7a,0x01,0x00,0x00,0x79,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x7a,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x7c,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,0x7c,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7d,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x7f,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x7f,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x9d,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x61,0x01,0x00,0x00,0x81,0x01,0x00,0x00,
+0x4d,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x8b,0x01,0x00,0x00,0xde,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x8d,0x01,0x00,0x00,
+0x8c,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x93,0x01,0x00,0x00,0x96,0x00,0x00,0x00,0x92,0x01,0x00,0x00,
+0x41,0x00,0x08,0x00,0xec,0x00,0x00,0x00,0x94,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x93,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x95,0x01,0x00,0x00,0x94,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x96,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x97,0x01,0x00,0x00,0x8d,0x01,0x00,0x00,0x96,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x97,0x01,0x00,0x00,0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xa3,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0xa4,0x01,0x00,0x00,
+0xa3,0x01,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xa5,0x01,0x00,0x00,0xa4,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xa6,0x01,0x00,0x00,
+0xa5,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xaf,0x01,0x00,0x00,0x0a,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0xaf,0x01,0x00,0x00,
+0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb1,0x01,0x00,0x00,0xb0,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb2,0x01,0x00,0x00,0xb1,0x01,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xb3,0x01,0x00,0x00,
+0xb2,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xb4,0x01,0x00,0x00,0xb3,0x01,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xb5,0x01,0x00,0x00,0xa6,0x01,0x00,0x00,0xb4,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0xb6,0x01,0x00,0x00,
+0xb5,0x01,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xb7,0x01,0x00,0x00,0xb6,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xb8,0x01,0x00,0x00,0xb7,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xb9,0x01,0x00,0x00,0xb8,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x9d,0x00,0x00,0x00,0xbb,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x99,0x01,0x00,0x00,0xb9,0x01,0x00,0x00,
+0x83,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x02,0x00,0x00,0xde,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0x30,0x02,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x2e,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x31,0x02,0x00,0x00,
+0x30,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x35,0x02,0x00,0x00,0xed,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x36,0x02,0x00,0x00,0x35,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x37,0x02,0x00,0x00,
+0x31,0x02,0x00,0x00,0x36,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x38,0x02,0x00,0x00,0x37,0x02,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x02,0x00,0x00,0x8b,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3b,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x3e,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3f,0x02,0x00,0x00,
+0x3e,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x40,0x02,0x00,0x00,0x3f,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x41,0x02,0x00,0x00,0x40,0x02,0x00,0x00,
+0x00,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x44,0x02,0x00,0x00,0x91,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,0x45,0x02,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x44,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x45,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x47,0x02,0x00,0x00,
+0x46,0x02,0x00,0x00,0x61,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x02,0x00,0x00,0x47,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x49,0x02,0x00,0x00,
+0x48,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x49,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x4b,0x02,0x00,0x00,
+0x4a,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x4c,0x02,0x00,0x00,0x41,0x02,0x00,0x00,
+0x4b,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x4d,0x02,0x00,0x00,0x4c,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x4e,0x02,0x00,0x00,0x4d,0x02,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x4e,0x02,0x00,0x00,0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x4f,0x02,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x02,0x00,0x00,
+0xde,0x00,0x00,0x00,0x13,0x04,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe3,0x00,0x00,0x00,0x56,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x55,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x57,0x02,0x00,0x00,0x56,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x5b,0x02,0x00,0x00,
+0x26,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x5d,0x02,0x00,0x00,0x57,0x02,0x00,0x00,
+0x5c,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x5e,0x02,0x00,0x00,0x5d,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x62,0x02,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x13,0x04,0x00,0x00,0x41,0x00,0x08,0x00,
+0xfb,0x00,0x00,0x00,0x63,0x02,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x62,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x64,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x65,0x02,0x00,0x00,0x64,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x66,0x02,0x00,0x00,
+0x65,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x67,0x02,0x00,0x00,0x66,0x02,0x00,0x00,0x00,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x6c,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x6c,0x02,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x6e,0x02,0x00,0x00,
+0x6d,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x6f,0x02,0x00,0x00,0x6e,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x6f,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x71,0x02,0x00,0x00,0x70,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x72,0x02,0x00,0x00,
+0x67,0x02,0x00,0x00,0x71,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x73,0x02,0x00,0x00,0x72,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x74,0x02,0x00,0x00,
+0x73,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x75,0x02,0x00,0x00,0x74,0x02,0x00,0x00,0x14,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x76,0x02,0x00,0x00,
+0x75,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x77,0x02,0x00,0x00,0x5e,0x02,0x00,0x00,0x76,0x02,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0x78,0x02,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x38,0x02,0x00,0x00,
+0x50,0x02,0x00,0x00,0x77,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x7c,0x02,0x00,0x00,0xde,0x00,0x00,0x00,
+0x14,0x04,0x00,0x00,0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,
+0x7d,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x7c,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x7e,0x02,0x00,0x00,0x7d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x82,0x02,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x83,0x02,0x00,0x00,
+0x82,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x84,0x02,0x00,0x00,0x7e,0x02,0x00,0x00,0x83,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x85,0x02,0x00,0x00,
+0x84,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x8b,0x02,0x00,0x00,0x3d,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x8b,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8d,0x02,0x00,0x00,0x8c,0x02,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x8e,0x02,0x00,0x00,
+0x8d,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x93,0x02,0x00,0x00,0x45,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x94,0x02,0x00,0x00,0x93,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x95,0x02,0x00,0x00,0x94,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x96,0x02,0x00,0x00,0x95,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x97,0x02,0x00,0x00,
+0x96,0x02,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x98,0x02,0x00,0x00,0x97,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x99,0x02,0x00,0x00,0x8e,0x02,0x00,0x00,0x98,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x9a,0x02,0x00,0x00,
+0x99,0x02,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x9b,0x02,0x00,0x00,0x9a,0x02,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x9c,0x02,0x00,0x00,0x9b,0x02,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x9d,0x02,0x00,0x00,0x9c,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x9d,0x00,0x00,0x00,0x9f,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x85,0x02,0x00,0x00,0x9d,0x02,0x00,0x00,
+0x78,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xa3,0x02,0x00,0x00,0xde,0x00,0x00,0x00,0x15,0x04,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0xa4,0x02,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xa3,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xa5,0x02,0x00,0x00,
+0xa4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xa9,0x02,0x00,0x00,0x94,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xaa,0x02,0x00,0x00,0xa9,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xab,0x02,0x00,0x00,
+0xa5,0x02,0x00,0x00,0xaa,0x02,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xac,0x02,0x00,0x00,0xab,0x02,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xb2,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xb3,0x02,0x00,0x00,0xb2,0x02,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb4,0x02,0x00,0x00,0xb3,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xb5,0x02,0x00,0x00,0xb4,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xba,0x02,0x00,0x00,
+0x45,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0xbb,0x02,0x00,0x00,0xba,0x02,0x00,0x00,0x45,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xbc,0x02,0x00,0x00,
+0xbb,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xbd,0x02,0x00,0x00,0xbc,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xbe,0x02,0x00,0x00,0xbd,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xbf,0x02,0x00,0x00,0xbe,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,
+0xb5,0x02,0x00,0x00,0xbf,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0xc1,0x02,0x00,0x00,0xc0,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xc2,0x02,0x00,0x00,
+0xc1,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xc3,0x02,0x00,0x00,0xc2,0x02,0x00,0x00,0x14,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xc4,0x02,0x00,0x00,
+0xc3,0x02,0x00,0x00,0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,
+0xc6,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xac,0x02,0x00,0x00,0xc4,0x02,0x00,0x00,0x9f,0x02,0x00,0x00,
+0x81,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xc7,0x02,0x00,0x00,
+0xbb,0x01,0x00,0x00,0xc6,0x02,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x02,0x00,0x00,0xde,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,
+0xd4,0x02,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xd2,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xd5,0x02,0x00,0x00,0xd4,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0xd9,0x02,0x00,0x00,0xed,0x00,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xda,0x02,0x00,0x00,
+0xd9,0x02,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xd5,0x02,0x00,0x00,0xda,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xdc,0x02,0x00,0x00,
+0xdb,0x02,0x00,0x00,0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xdf,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xe2,0x02,0x00,0x00,
+0xe1,0x02,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x02,0x00,0x00,0xe2,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xe4,0x02,0x00,0x00,0xe3,0x02,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xe5,0x02,0x00,0x00,
+0xe4,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x02,0x00,0x00,0x91,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xe8,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xea,0x02,0x00,0x00,
+0xe9,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0xeb,0x02,0x00,0x00,0xea,0x02,0x00,0x00,0x61,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xec,0x02,0x00,0x00,
+0xeb,0x02,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xed,0x02,0x00,0x00,0xec,0x02,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xee,0x02,0x00,0x00,0xed,0x02,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xef,0x02,0x00,0x00,0xee,0x02,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xf0,0x02,0x00,0x00,
+0xe5,0x02,0x00,0x00,0xef,0x02,0x00,0x00,0x72,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0xf1,0x02,0x00,0x00,0xf0,0x02,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xf2,0x02,0x00,0x00,
+0xf1,0x02,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xf3,0x02,0x00,0x00,0xf2,0x02,0x00,0x00,0x14,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xf4,0x02,0x00,0x00,
+0xf3,0x02,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf9,0x02,0x00,0x00,0xde,0x00,0x00,0x00,0x16,0x04,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0xfa,0x02,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xf9,0x02,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xfb,0x02,0x00,0x00,
+0xfa,0x02,0x00,0x00,0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xff,0x02,0x00,0x00,0x26,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xff,0x02,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x01,0x03,0x00,0x00,
+0xfb,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x01,0x03,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x06,0x03,0x00,0x00,0x8b,0x00,0x00,0x00,0x16,0x04,0x00,0x00,
+0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,0x07,0x03,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x06,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x08,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x09,0x03,0x00,0x00,
+0x08,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x0a,0x03,0x00,0x00,0x09,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x0b,0x03,0x00,0x00,0x0a,0x03,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x10,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x11,0x03,0x00,0x00,0x10,0x03,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x12,0x03,0x00,0x00,0x11,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x13,0x03,0x00,0x00,0x12,0x03,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x14,0x03,0x00,0x00,
+0x13,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x15,0x03,0x00,0x00,0x14,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x16,0x03,0x00,0x00,0x0b,0x03,0x00,0x00,0x15,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x17,0x03,0x00,0x00,
+0x16,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x18,0x03,0x00,0x00,0x17,0x03,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x19,0x03,0x00,0x00,0x18,0x03,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x19,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x1b,0x03,0x00,0x00,0x02,0x03,0x00,0x00,
+0x1a,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,
+0x1c,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xdc,0x02,0x00,0x00,0xf4,0x02,0x00,0x00,0x1b,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x20,0x03,0x00,0x00,
+0xde,0x00,0x00,0x00,0x17,0x04,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe3,0x00,0x00,0x00,0x21,0x03,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x20,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x22,0x03,0x00,0x00,0x21,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x26,0x03,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x27,0x03,0x00,0x00,0x26,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x28,0x03,0x00,0x00,0x22,0x03,0x00,0x00,
+0x27,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x29,0x03,0x00,0x00,0x28,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0x2f,0x03,0x00,0x00,
+0xe1,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0x30,0x03,0x00,0x00,0x2f,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x31,0x03,0x00,0x00,
+0x30,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x32,0x03,0x00,0x00,0x31,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x37,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x38,0x03,0x00,0x00,
+0x37,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x39,0x03,0x00,0x00,0x38,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x3a,0x03,0x00,0x00,
+0x39,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x3a,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x3c,0x03,0x00,0x00,
+0x3b,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x3d,0x03,0x00,0x00,0x32,0x03,0x00,0x00,
+0x3c,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x3e,0x03,0x00,0x00,0x3d,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x3f,0x03,0x00,0x00,0x3e,0x03,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x40,0x03,0x00,0x00,
+0x3f,0x03,0x00,0x00,0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x41,0x03,0x00,0x00,0x40,0x03,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0x43,0x03,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x29,0x03,0x00,0x00,
+0x41,0x03,0x00,0x00,0x1c,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x03,0x00,0x00,0xde,0x00,0x00,0x00,
+0x18,0x04,0x00,0x00,0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,
+0x48,0x03,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x47,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x49,0x03,0x00,0x00,0x48,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0x4d,0x03,0x00,0x00,0x94,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x4d,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x4f,0x03,0x00,0x00,0x49,0x03,0x00,0x00,0x4e,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x50,0x03,0x00,0x00,
+0x4f,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x56,0x03,0x00,0x00,0x07,0x03,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x57,0x03,0x00,0x00,
+0x56,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x58,0x03,0x00,0x00,0x57,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x59,0x03,0x00,0x00,
+0x58,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x5e,0x03,0x00,0x00,0xe9,0x02,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x5f,0x03,0x00,0x00,0x5e,0x03,0x00,0x00,
+0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x60,0x03,0x00,0x00,0x5f,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x61,0x03,0x00,0x00,0x60,0x03,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x62,0x03,0x00,0x00,
+0x61,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x63,0x03,0x00,0x00,0x62,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x64,0x03,0x00,0x00,0x59,0x03,0x00,0x00,0x63,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x65,0x03,0x00,0x00,
+0x64,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x66,0x03,0x00,0x00,0x65,0x03,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x67,0x03,0x00,0x00,0x66,0x03,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x68,0x03,0x00,0x00,0x67,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x9d,0x00,0x00,0x00,0x6a,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x50,0x03,0x00,0x00,0x68,0x03,0x00,0x00,
+0x43,0x03,0x00,0x00,0x81,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x6b,0x03,0x00,0x00,0xc7,0x02,0x00,0x00,0x6a,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x76,0x03,0x00,0x00,
+0xde,0x00,0x00,0x00,0x19,0x04,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe3,0x00,0x00,0x00,0x78,0x03,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x76,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x79,0x03,0x00,0x00,0x78,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x7d,0x03,0x00,0x00,
+0xed,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x7e,0x03,0x00,0x00,0x7d,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x7f,0x03,0x00,0x00,0x79,0x03,0x00,0x00,
+0x7e,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x80,0x03,0x00,0x00,0x7f,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x83,0x03,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x19,0x04,0x00,0x00,0x41,0x00,0x08,0x00,
+0xfb,0x00,0x00,0x00,0x85,0x03,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x83,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x86,0x03,0x00,0x00,0x85,0x03,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x87,0x03,0x00,0x00,0x86,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x88,0x03,0x00,0x00,
+0x87,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x89,0x03,0x00,0x00,0x88,0x03,0x00,0x00,0x00,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x03,0x00,0x00,
+0x91,0x00,0x00,0x00,0x19,0x04,0x00,0x00,0x41,0x00,0x08,0x00,
+0xfb,0x00,0x00,0x00,0x8d,0x03,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x8c,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0x8e,0x03,0x00,0x00,0x8d,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0x8f,0x03,0x00,0x00,0x8e,0x03,0x00,0x00,
+0x61,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x90,0x03,0x00,0x00,0x8f,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x91,0x03,0x00,0x00,0x90,0x03,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x92,0x03,0x00,0x00,
+0x91,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x93,0x03,0x00,0x00,0x92,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x94,0x03,0x00,0x00,0x89,0x03,0x00,0x00,0x93,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0x95,0x03,0x00,0x00,
+0x94,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x96,0x03,0x00,0x00,0x95,0x03,0x00,0x00,0x82,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x97,0x03,0x00,0x00,0x96,0x03,0x00,0x00,
+0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x98,0x03,0x00,0x00,0x97,0x03,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x9d,0x03,0x00,0x00,0xde,0x00,0x00,0x00,
+0x1a,0x04,0x00,0x00,0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,
+0x9e,0x03,0x00,0x00,0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x9d,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x9f,0x03,0x00,0x00,0x9e,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0xa3,0x03,0x00,0x00,0x26,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xa4,0x03,0x00,0x00,
+0xa3,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0xa5,0x03,0x00,0x00,0x9f,0x03,0x00,0x00,0xa4,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xa6,0x03,0x00,0x00,
+0xa5,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xaa,0x03,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x1a,0x04,0x00,0x00,0x41,0x00,0x08,0x00,0xfb,0x00,0x00,0x00,
+0xab,0x03,0x00,0x00,0xc5,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xaa,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xac,0x03,0x00,0x00,
+0xab,0x03,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xad,0x03,0x00,0x00,0xac,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xae,0x03,0x00,0x00,0xad,0x03,0x00,0x00,
+0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xae,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0xb4,0x03,0x00,0x00,0x8d,0x03,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0xb5,0x03,0x00,0x00,
+0xb4,0x03,0x00,0x00,0xe9,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb6,0x03,0x00,0x00,0xb5,0x03,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xb7,0x03,0x00,0x00,
+0xb6,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xb8,0x03,0x00,0x00,0xb7,0x03,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xb9,0x03,0x00,0x00,
+0xb8,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xba,0x03,0x00,0x00,0xaf,0x03,0x00,0x00,
+0xb9,0x03,0x00,0x00,0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xbb,0x03,0x00,0x00,0xba,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xbc,0x03,0x00,0x00,0xbb,0x03,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xbd,0x03,0x00,0x00,
+0xbc,0x03,0x00,0x00,0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xbe,0x03,0x00,0x00,0xbd,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xbf,0x03,0x00,0x00,
+0xa6,0x03,0x00,0x00,0xbe,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x9d,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x98,0x03,0x00,0x00,
+0xbf,0x03,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc4,0x03,0x00,0x00,0xde,0x00,0x00,0x00,0x1b,0x04,0x00,0x00,
+0x41,0x00,0x06,0x00,0xe3,0x00,0x00,0x00,0xc5,0x03,0x00,0x00,
+0xdb,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0xc4,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xc6,0x03,0x00,0x00,
+0xc5,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0xca,0x03,0x00,0x00,0x5c,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,0xca,0x03,0x00,0x00,
+0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0xcc,0x03,0x00,0x00,
+0xc6,0x03,0x00,0x00,0xcb,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xcd,0x03,0x00,0x00,0xcc,0x03,0x00,0x00,
+0xcd,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,
+0xd3,0x03,0x00,0x00,0x85,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,
+0xbb,0x00,0x00,0x00,0xd4,0x03,0x00,0x00,0xd3,0x03,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd5,0x03,0x00,0x00,0xd4,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0xd6,0x03,0x00,0x00,0xd5,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xdb,0x03,0x00,0x00,
+0x8d,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0xdc,0x03,0x00,0x00,0xdb,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xdd,0x03,0x00,0x00,
+0xdc,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xde,0x03,0x00,0x00,0xdd,0x03,0x00,0x00,0xc7,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0xdf,0x03,0x00,0x00,0xde,0x03,0x00,0x00,
+0xc9,0x00,0x00,0x00,0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xe0,0x03,0x00,0x00,0xdf,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,
+0xc5,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0xe1,0x03,0x00,0x00,
+0xd6,0x03,0x00,0x00,0xe0,0x03,0x00,0x00,0x72,0x00,0x04,0x00,
+0xbe,0x00,0x00,0x00,0xe2,0x03,0x00,0x00,0xe1,0x03,0x00,0x00,
+0x72,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0xe3,0x03,0x00,0x00,
+0xe2,0x03,0x00,0x00,0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0xe4,0x03,0x00,0x00,0xe3,0x03,0x00,0x00,0x14,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,0xe5,0x03,0x00,0x00,
+0xe4,0x03,0x00,0x00,0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,
+0xe7,0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xcd,0x03,0x00,0x00,0xe5,0x03,0x00,0x00,0xc0,0x03,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xeb,0x03,0x00,0x00,
+0xde,0x00,0x00,0x00,0x1c,0x04,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe3,0x00,0x00,0x00,0xec,0x03,0x00,0x00,0xdb,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xeb,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0xed,0x03,0x00,0x00,0xec,0x03,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,0xf1,0x03,0x00,0x00,
+0x94,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xf2,0x03,0x00,0x00,0xf1,0x03,0x00,0x00,0x85,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xf3,0x03,0x00,0x00,0xed,0x03,0x00,0x00,
+0xf2,0x03,0x00,0x00,0x85,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0xf4,0x03,0x00,0x00,0xf3,0x03,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0xbb,0x00,0x00,0x00,0xfa,0x03,0x00,0x00,
+0xab,0x03,0x00,0x00,0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,
+0xfb,0x03,0x00,0x00,0xfa,0x03,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x71,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,
+0xfb,0x03,0x00,0x00,0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0xfd,0x03,0x00,0x00,0xfc,0x03,0x00,0x00,0x3d,0x00,0x04,0x00,
+0xbb,0x00,0x00,0x00,0x02,0x04,0x00,0x00,0x8d,0x03,0x00,0x00,
+0xc2,0x00,0x05,0x00,0xbb,0x00,0x00,0x00,0x03,0x04,0x00,0x00,
+0x02,0x04,0x00,0x00,0x45,0x00,0x00,0x00,0x71,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x04,0x00,0x00,0x03,0x04,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x05,0x04,0x00,0x00,
+0x04,0x04,0x00,0x00,0xc7,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x04,0x00,0x00,0x05,0x04,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xc4,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x07,0x04,0x00,0x00,
+0x06,0x04,0x00,0x00,0x3b,0x00,0x00,0x00,0xc5,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x08,0x04,0x00,0x00,0xfd,0x03,0x00,0x00,
+0x07,0x04,0x00,0x00,0x72,0x00,0x04,0x00,0xbe,0x00,0x00,0x00,
+0x09,0x04,0x00,0x00,0x08,0x04,0x00,0x00,0x72,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x0a,0x04,0x00,0x00,0x09,0x04,0x00,0x00,
+0x82,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x0b,0x04,0x00,0x00,
+0x0a,0x04,0x00,0x00,0x14,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x9d,0x00,0x00,0x00,0x0c,0x04,0x00,0x00,0x0b,0x04,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x9d,0x00,0x00,0x00,0x0e,0x04,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xf4,0x03,0x00,0x00,
+0x0c,0x04,0x00,0x00,0xe7,0x03,0x00,0x00,0x81,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x0f,0x04,0x00,0x00,0x6b,0x03,0x00,0x00,
+0x0e,0x04,0x00,0x00,0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xc6,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,0xc6,0x01,0x00,0x00,
+0x0f,0x04,0x00,0x00,0x3e,0x00,0x03,0x00,0xa8,0x00,0x00,0x00,
+0xc7,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xca,0x01,0x00,0x00,0x1f,0x02,0x00,0x00,0x51,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xab,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x51,0x00,0x00,0x00,
+0x51,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0xe4,0x01,0x00,0x00,
+0xd0,0x01,0x00,0x00,0xac,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,
+0xd3,0x01,0x00,0x00,0x20,0x02,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcf,0x01,0x00,0x00,0xd0,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd3,0x01,0x00,0x00,
+0xce,0x01,0x00,0x00,0xcf,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xce,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,
+0xd6,0x01,0x00,0x00,0x71,0x00,0x00,0x00,0x20,0x02,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xd8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xd6,0x01,0x00,0x00,0xd7,0x01,0x00,0x00,
+0xd8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xd7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xdc,0x01,0x00,0x00,
+0x71,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa7,0x00,0x00,0x00,0xdd,0x01,0x00,0x00,0xa0,0x00,0x00,0x00,
+0xdc,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xde,0x01,0x00,0x00,0xdd,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa7,0x00,0x00,0x00,0xdf,0x01,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xe0,0x01,0x00,0x00,0xdf,0x01,0x00,0x00,0x81,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0xe1,0x01,0x00,0x00,0xe0,0x01,0x00,0x00,
+0xde,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0xdf,0x01,0x00,0x00,
+0xe1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd8,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x51,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd0,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd0,0x01,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe4,0x01,0x00,0x00,0x20,0x02,0x00,0x00,0x05,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcd,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcf,0x01,0x00,0x00,0xaa,0x00,0x05,0x00,0xb2,0x00,0x00,0x00,
+0xe6,0x01,0x00,0x00,0x71,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xe6,0x01,0x00,0x00,0xe7,0x01,0x00,0x00,
+0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe7,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xef,0x01,0x00,0x00,
+0x1e,0x02,0x00,0x00,0x55,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa7,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0xf1,0x01,0x00,0x00,0xf0,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe3,0x00,0x00,0x00,0xf2,0x01,0x00,0x00,0xec,0x01,0x00,0x00,
+0x61,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf2,0x01,0x00,0x00,0xf1,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xe8,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0xe8,0x01,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q6_k_f32_f32_len = 11852;
+
+unsigned char mul_mat_vec_q8_0_f16_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x67,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x81,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd2,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd2,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x11,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x19,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1a,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x4c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xa9,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd1,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x20,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x44,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0x38,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0x22,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,
+0x25,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x23,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x26,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x23,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xa9,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x65,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2f,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x54,0x01,0x00,0x00,0x53,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5b,0x01,0x00,0x00,0xbc,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x2f,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x5f,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x60,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x62,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x26,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0x62,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x26,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x08,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9e,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xee,0x00,0x00,0x00,
+0x65,0x01,0x00,0x00,0x84,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xa0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xa2,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x09,0x01,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xac,0x00,0x05,0x00,0xa9,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xf4,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xf8,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf3,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0xa9,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xfb,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x02,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x9e,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,0x9e,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x84,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf5,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0xa9,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x8c,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x0d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0c,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x88,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x17,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x18,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x0d,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x0d,0x01,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t mul_mat_vec_q8_0_f16_f32_len = 4064;
+
+unsigned char mul_mat_vec_q8_0_f32_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x65,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x11,0x00,0x02,0x00,0x60,0x11,0x00,0x00,0x0b,0x00,0x06,0x00,
+0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,
+0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x0e,0x00,
+0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,
+0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x46,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4c,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x4c,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x4c,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x4c,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x7d,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x81,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x97,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xcf,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xd0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd2,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd2,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x0e,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x17,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x18,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x19,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x1b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x1f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x17,0x00,0x04,0x00,0x44,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x0d,0x00,0x4c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x4d,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x4d,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x4f,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x0a,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x45,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x45,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x45,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x98,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x99,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x9d,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xa9,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xcf,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd0,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd1,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,
+0x44,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x38,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x47,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x46,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x20,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x00,0x00,0x00,
+0x23,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x21,0x01,0x00,0x00,0x24,0x01,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x5b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,0x33,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x35,0x01,0x00,0x00,
+0x31,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x50,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x50,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x21,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9e,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa0,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x63,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x50,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x97,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xa9,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0xa8,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xa2,0x00,0x00,0x00,0xa1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xaa,0x00,0x00,0x00,
+0xa1,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x41,0x00,0x07,0x00,
+0x26,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x4b,0x01,0x00,0x00,0x41,0x00,0x08,0x00,
+0x2f,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x20,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x19,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x72,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x52,0x01,0x00,0x00,
+0x6f,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x53,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0xbc,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x41,0x00,0x08,0x00,0x2f,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x20,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x19,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x72,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x5b,0x01,0x00,0x00,0x6f,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,0x50,0x00,0x05,0x00,
+0x09,0x00,0x00,0x00,0x5e,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x5d,0x01,0x00,0x00,0x8e,0x00,0x05,0x00,0x09,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x5e,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xd9,0x00,0x00,0x00,0x51,0x00,0x05,0x00,0x08,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xd8,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xdd,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x08,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x08,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0xe7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x9e,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xed,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x84,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xa0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xa2,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x84,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf1,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0xf0,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x08,0x01,0x00,0x00,
+0xf4,0x00,0x00,0x00,0xac,0x00,0x05,0x00,0xa9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x7e,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xf7,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf2,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0xa9,0x00,0x00,0x00,
+0xfa,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x64,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x64,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x9d,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x08,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x08,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x02,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x9e,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xfc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x84,0x00,0x00,0x00,
+0xee,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,0xc2,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x64,0x01,0x00,0x00,
+0x2d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf3,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,
+0xa9,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x8c,0x00,0x00,0x00,
+0x7e,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x0c,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x0a,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0b,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x88,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x9d,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x08,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0xd8,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x16,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x0c,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x0c,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t mul_mat_vec_q8_0_f32_f32_len = 4032;
+
+unsigned char norm_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0xb8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x27,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x27,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x27,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x27,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x34,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x36,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x36,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x97,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x9a,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x9a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1d,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x27,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2f,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x33,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x34,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x35,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x35,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3d,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x42,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x87,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x97,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x98,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x99,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x99,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1d,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x23,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x30,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x42,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x43,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x43,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x42,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x14,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3f,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x4c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x51,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x21,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x23,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x52,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x57,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x2a,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x56,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0xad,0x00,0x05,0x00,
+0x2f,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x59,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x5d,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x58,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x2f,0x00,0x00,0x00,0x61,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x61,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x62,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1d,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x69,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x15,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x1e,0x00,0x00,0x00,
+0x6d,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x63,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x63,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x52,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x53,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x5a,0x00,0x00,0x00,0xc3,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x57,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x59,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x42,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x88,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x42,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x88,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x7f,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x14,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x87,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x83,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x0c,0x00,0x06,0x00,0x14,0x00,0x00,0x00,
+0x8b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8e,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x2f,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x96,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8f,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x9e,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x83,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3d,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x90,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t norm_f32_len = 2624;
+
+unsigned char relu_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x1f,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x22,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x24,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x25,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x27,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x27,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x1a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x1f,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x20,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x21,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x24,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x25,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x26,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x29,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x31,0x00,0x00,0x00,0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x0c,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x33,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x32,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x29,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x11,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x29,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x2e,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x32,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x32,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t relu_f32_len = 1212;
+
+unsigned char rms_norm_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x9e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x25,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x25,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x25,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x25,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x31,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x32,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x34,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x34,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x82,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x83,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x85,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x85,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x9a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,
+0x25,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x26,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x28,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x31,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x32,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x33,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x3b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x49,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x28,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x82,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x84,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x84,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x20,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3b,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x14,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x43,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x21,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x48,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x4d,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x28,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x50,0x00,0x00,0x00,0xad,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x4f,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x53,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4e,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x2d,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x56,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x59,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x57,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x58,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5e,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x5e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x63,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,0x63,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x59,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x59,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x48,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x50,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x50,0x00,0x00,0x00,
+0xc3,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x4d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x4f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x88,0x00,0x05,0x00,0x14,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,0x6d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x0c,0x00,0x06,0x00,
+0x14,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x79,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x79,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x81,0x00,0x00,0x00,
+0x7a,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7a,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x3b,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x8b,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x79,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x7b,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t rms_norm_f32_len = 2344;
+
+unsigned char rope_neox_f16_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x67,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x88,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x8e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xae,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xaf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xaf,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb1,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb1,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xc9,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xcb,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xcb,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x07,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x6f,0x12,0x83,0x3a,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x1e,0x00,0x0c,0x00,0x29,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x3b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0xcd,0xcc,0xcc,0x3d,0x17,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x66,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x69,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x72,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x86,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8d,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x8e,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xae,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xaf,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xb3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xc9,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xca,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xca,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xce,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x65,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x68,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x00,0x00,0x00,0x3f,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x08,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x6e,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x09,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x69,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x07,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x69,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x77,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x7e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x93,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x93,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x08,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x07,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xa3,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x72,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0xac,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xb3,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2e,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xab,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xc7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc4,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xce,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc7,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0xd0,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0x88,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,
+0x13,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x16,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0xd5,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,0x19,0x01,0x00,0x00,
+0xb7,0x00,0x05,0x00,0x3b,0x00,0x00,0x00,0x1b,0x01,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x34,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x1b,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1c,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x2e,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x2e,0x00,0x00,0x00,0x1f,0x01,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x1f,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0xa5,0x00,0x00,0x00,0x83,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x20,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x06,0x00,0x00,0x00,0x27,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0xd5,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0x2b,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x27,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x88,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2e,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x16,0x01,0x00,0x00,0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x2e,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x31,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x34,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x34,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0xc7,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x1c,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x1c,0x01,0x00,0x00,0x0c,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x4b,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x4b,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x07,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,0xea,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4f,0x01,0x00,0x00,0xf4,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x06,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x4f,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xf6,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x93,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xa6,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf7,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x02,0x01,0x00,0x00,0xec,0x00,0x00,0x00,
+0x38,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x73,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0x04,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,
+0x05,0x01,0x00,0x00,0x8a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x05,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x08,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x08,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t rope_neox_f16_len = 3952;
+
+unsigned char rope_neox_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x4a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x8d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xad,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xae,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xae,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xae,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb0,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc8,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xca,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xca,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x01,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x07,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x6f,0x12,0x83,0x3a,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x1e,0x00,0x0c,0x00,0x29,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x3b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0xcd,0xcc,0xcc,0x3d,0x17,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x66,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x07,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x69,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x86,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x8c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x92,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xad,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xae,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb2,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc7,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc8,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x65,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x68,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x68,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x00,0x00,0x00,0x3f,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x02,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x6e,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x03,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x69,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x07,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x69,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x77,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x02,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x7e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x92,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x92,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x02,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x07,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x72,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xb2,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xab,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x2e,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0x70,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0xba,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0xc0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xab,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xc6,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xc3,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x92,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0xce,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0x88,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd3,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,0xd3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x14,0x01,0x00,0x00,0x13,0x01,0x00,0x00,
+0xb7,0x00,0x05,0x00,0x3b,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x2e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x16,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x2e,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x2e,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0xa4,0x00,0x00,0x00,0x83,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x3c,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x06,0x00,0x00,0x00,0x21,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x14,0x01,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0xd3,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0x21,0x01,0x00,0x00,0x24,0x01,0x00,0x00,0x88,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x2b,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x2e,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x2e,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0xc6,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0xc6,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x16,0x01,0x00,0x00,0x0c,0x00,0x06,0x00,
+0x06,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x85,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x32,0x01,0x00,0x00,0x30,0x01,0x00,0x00,
+0x46,0x01,0x00,0x00,0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x34,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x92,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x7b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,0xf0,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf2,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x32,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x92,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x02,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x02,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t rope_neox_f32_len = 3852;
+
+unsigned char rope_norm_f16_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x49,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0xb0,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x10,0x00,0x06,0x00,
+0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x67,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x87,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x88,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8a,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8a,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x8e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x90,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xad,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xae,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xae,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xae,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xb0,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc7,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xca,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xca,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x16,0x00,0x03,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x6f,0x12,0x83,0x3a,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x1e,0x00,0x0c,0x00,0x29,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x3b,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0xcd,0xcc,0xcc,0x3d,0x17,0x00,0x04,0x00,0x65,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x66,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x65,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x69,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x72,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x86,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x88,0x00,0x00,0x00,0x87,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x88,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8d,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x8e,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x93,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x86,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xad,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xae,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xb2,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xc7,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x65,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x68,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x46,0x01,0x00,0x00,0x00,0x00,0x00,0x3f,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x01,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x6e,0x00,0x00,0x00,
+0x02,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x02,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x69,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x07,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x69,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x77,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x01,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x7e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x93,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x96,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x93,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x98,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x8a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9d,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x01,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0xa8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x07,0x00,0x00,0x00,0xab,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xb2,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xab,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xba,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0x46,0x01,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0xbc,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x07,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,
+0xab,0x00,0x05,0x00,0x3b,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc3,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc5,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x07,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xcd,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcf,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc6,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc6,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0xcf,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0x88,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd4,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0e,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x10,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0xd4,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x12,0x01,0x00,0x00,
+0xb7,0x00,0x05,0x00,0x3b,0x00,0x00,0x00,0x14,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x2d,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x15,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x2e,0x00,0x00,0x00,0x16,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x2e,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0x39,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,
+0x39,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x17,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0x17,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3c,0x01,0x00,0x00,
+0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x42,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x41,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x47,0x01,0x00,0x00,0x41,0x01,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
+0x20,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x13,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x23,0x01,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x20,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x27,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x27,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x2d,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x2d,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,
+0xc6,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0x15,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x10,0x01,0x00,0x00,0xc6,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x15,0x01,0x00,0x00,0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x2f,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x44,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x33,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x35,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x45,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x93,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x90,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x86,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x48,0x01,0x00,0x00,0xf0,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x31,0x01,0x00,0x00,
+0x48,0x01,0x00,0x00,0x73,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x93,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf3,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0x31,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xe2,0x00,0x00,0x00,0x35,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,
+0x73,0x00,0x04,0x00,0x86,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x93,0x00,0x00,0x00,
+0xfe,0x00,0x00,0x00,0x8a,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xfe,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x01,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x01,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t rope_norm_f16_len = 3952;
+
+unsigned char rope_norm_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x43,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x29,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x29,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x29,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x67,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1c,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x86,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x87,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x89,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x89,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x8d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xac,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xad,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xad,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xaf,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xaf,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0xc7,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc9,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xfa,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x07,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,
+0x6f,0x12,0x83,0x3a,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1c,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x1e,0x00,0x0c,0x00,0x29,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2a,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2e,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x3b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x52,0x00,0x00,0x00,0xcd,0xcc,0xcc,0x3d,0x17,0x00,0x04,0x00,
+0x65,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x65,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x66,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x07,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x69,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x72,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x86,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x87,0x00,0x00,0x00,0x86,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x88,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x87,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x88,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x8c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x92,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0xac,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0xad,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xae,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xae,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xb1,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0xc6,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0xc7,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xc8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0xc8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x65,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x68,0x00,0x00,0x00,
+0xf9,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x3f,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xfb,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0x6e,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfc,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x69,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x67,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x07,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x6a,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x6b,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x69,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x6e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x73,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x77,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x75,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x76,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x77,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x3b,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x7e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x7c,0x00,0x00,0x00,
+0x7d,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7d,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x93,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x92,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x85,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x95,0x00,0x00,0x00,0x94,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x85,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x97,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x9a,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x92,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x9c,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x7e,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x72,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0xa8,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x07,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0xa9,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0xb1,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0xaf,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,
+0xb3,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x6f,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xb3,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xb5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0xb9,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0xb7,0x00,0x00,0x00,
+0xbb,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbd,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,0xbc,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x72,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x07,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xab,0x00,0x05,0x00,0x3b,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xc5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xc2,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xc4,0x00,0x00,0x00,0x86,0x00,0x05,0x00,
+0x07,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x17,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x92,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0x41,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcd,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xc5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xce,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xc5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xc5,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0xcd,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0x1f,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0x88,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,0x2d,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0xd2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2e,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0d,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0xb7,0x00,0x05,0x00,0x3b,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x0d,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x27,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x0e,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x27,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x0f,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x2e,0x00,0x00,0x00,0x10,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x11,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x2e,0x00,0x00,0x00,0x12,0x01,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x13,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x07,0x00,0x00,0x00,
+0x33,0x01,0x00,0x00,0x6c,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x70,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x34,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x35,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x11,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x13,0x01,0x00,0x00,0x11,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x36,0x01,0x00,0x00,
+0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x35,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x38,0x01,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x17,0x01,0x00,0x00,
+0x3c,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x83,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x1f,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
+0x1a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x41,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0xd2,0x00,0x00,0x00,0x17,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x88,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x21,0x01,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0x24,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x22,0x01,0x00,0x00,0x1f,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x24,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x27,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x27,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0xc5,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x0f,0x01,0x00,0x00,0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x0c,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x00,0x00,0x00,0xde,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xde,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x07,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0xa4,0x00,0x00,0x00,0x68,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0x7f,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0xec,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x92,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0xa4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xf6,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,
+0x2b,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,0xf6,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x92,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf8,0x00,0x00,0x00,0xf7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xfb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xfb,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t rope_norm_f32_len = 3852;
+
+unsigned char scale_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x9c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xe3,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd4,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd5,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xd5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd5,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd7,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe0,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xe1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd4,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd5,0x00,0x00,0x00,
+0xd4,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xd8,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xe0,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xe1,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xe2,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xe8,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xec,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0xc5,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0xf2,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xf4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,0xf5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,
+0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xd2,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0xd8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xda,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,0x04,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x09,0x01,0x00,0x00,
+0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x12,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x12,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1d,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x25,0x01,0x00,0x00,0x22,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x18,0x01,0x00,0x00,0x25,0x01,0x00,0x00,0x86,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x3d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x3f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,0x3e,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x40,0x01,0x00,0x00,
+0x3b,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x42,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x40,0x01,0x00,0x00,0x44,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x47,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x47,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x49,0x01,0x00,0x00,
+0x37,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x45,0x01,0x00,0x00,
+0x49,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xdf,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe8,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x11,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xec,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x11,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xea,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0xe8,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xf0,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t scale_f32_len = 3320;
+
+unsigned char silu_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x3b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x12,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x21,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x22,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x29,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x2a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2c,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x38,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x13,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x1a,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x21,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x22,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x26,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x29,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x2a,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x2b,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x37,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,
+0x0c,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x3a,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x1d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x1c,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1d,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x26,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x7f,0x00,0x04,0x00,
+0x11,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x0c,0x00,0x06,0x00,0x11,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x11,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x2f,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x88,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x26,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x35,0x00,0x00,0x00,
+0x34,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x39,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x39,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,
+0x38,0x00,0x01,0x00,
+};
+const uint64_t silu_f32_len = 1264;
+
+unsigned char soft_max_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x6f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x11,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x74,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x75,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x75,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x8c,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x8d,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x8d,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x09,0x01,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x0a,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x0a,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x0c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0c,0x01,0x00,0x00,0x21,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x52,0x01,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,
+0x02,0x00,0x00,0x00,0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x16,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1e,0x00,0x09,0x00,
+0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x17,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x24,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0x28,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x33,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x74,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x75,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x76,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x7e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x8c,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x8d,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x8d,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x8e,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x9d,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa0,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x9d,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa1,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa1,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa5,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x09,0x01,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0b,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0b,0x01,0x00,0x00,0x0c,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x52,0x01,0x00,0x00,0x9d,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x00,0x00,0x80,0xff,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0xba,0x00,0x05,0x00,
+0x28,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x29,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x36,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x24,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,
+0x53,0x01,0x00,0x00,0x3c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x36,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x49,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x54,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x16,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x53,0x01,0x00,0x00,0x58,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x6e,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x55,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x28,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x67,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x28,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x60,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0xac,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x95,0x00,0x00,0x00,0x93,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x7e,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x8f,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x95,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x97,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x85,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x97,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x99,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x16,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x98,0x00,0x00,0x00,
+0x89,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x0c,0x00,0x08,0x00,0x16,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+0x83,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x16,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x28,0x00,0x00,0x00,0x56,0x01,0x00,0x00,0x9b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x61,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9f,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x9d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x5e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x60,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xa5,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa6,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xab,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xab,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x1a,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xae,0x00,0x00,0x00,
+0xad,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0xad,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb1,0x00,0x00,0x00,0xac,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xac,0x00,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x28,0x00,0x00,0x00,
+0xb5,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xb7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xb5,0x00,0x00,0x00,0xb6,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xb6,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xbf,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xb4,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa5,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0xc1,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x16,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xbb,0x00,0x00,0x00,
+0xc1,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa6,0x00,0x00,0x00,
+0xc2,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb7,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb7,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xae,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xae,0x00,0x00,0x00,0xc3,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xab,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xad,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xa5,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa6,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xcb,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x11,0x01,0x00,0x00,
+0xce,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,0x28,0x00,0x00,0x00,
+0xd3,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xcd,0x00,0x00,0x00,0xce,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xd3,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcc,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0xdb,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xdd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xdb,0x00,0x00,0x00,0xdc,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xdc,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xcd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdd,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0xe3,0x00,0x00,0x00,
+0xd7,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x7e,0x00,0x00,0x00,
+0xe8,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0xe5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0xe9,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x24,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0xeb,0x00,0x00,0x00,0xea,0x00,0x00,0x00,0xac,0x00,0x05,0x00,
+0x28,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf2,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xef,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf1,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,
+0xf7,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7e,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x8f,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xf9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0xfb,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,
+0x85,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x58,0x01,0x00,0x00,0xfb,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xfd,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf2,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf2,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0xfc,0x00,0x00,0x00,0xf1,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,
+0x16,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x32,0x00,0x00,0x00,0xe9,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x83,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0xff,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,
+0x0c,0x00,0x06,0x00,0x16,0x00,0x00,0x00,0x02,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x06,0x01,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x07,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa6,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x7e,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x0f,0x01,0x00,0x00,0x02,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xce,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xce,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x11,0x01,0x00,0x00,0x5d,0x01,0x00,0x00,0x9d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xcb,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xcd,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x13,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x13,0x01,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x1a,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x16,0x01,0x00,0x00,0xad,0x00,0x05,0x00,0x28,0x00,0x00,0x00,
+0x19,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0x15,0x01,0x00,0x00,0x16,0x01,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x19,0x01,0x00,0x00,
+0x14,0x01,0x00,0x00,0x15,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x14,0x01,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0x65,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x28,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x1c,0x01,0x00,0x00,0xf7,0x00,0x03,0x00,0x1f,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x1f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x24,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x1c,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0xa5,0x00,0x00,0x00,0x25,0x01,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x24,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0xa6,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x29,0x01,0x00,0x00,0x28,0x01,0x00,0x00,0x26,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa6,0x00,0x00,0x00,0x29,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x1f,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1f,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xa7,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x16,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x16,0x01,0x00,0x00,
+0xc3,0x00,0x05,0x00,0x1a,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
+0x65,0x01,0x00,0x00,0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x13,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x15,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x2f,0x01,0x00,0x00,
+0xc6,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x31,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x31,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x51,0x01,0x00,0x00,0x34,0x01,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x66,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x39,0x01,0x00,0x00,0x32,0x01,0x00,0x00,
+0x33,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x32,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x66,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x28,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x43,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x41,0x01,0x00,0x00,
+0x42,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x42,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,0x33,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x43,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,0x13,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4a,0x01,0x00,0x00,0x48,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,
+0x41,0x00,0x06,0x00,0x7e,0x00,0x00,0x00,0x4c,0x01,0x00,0x00,
+0x0c,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x4d,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x88,0x00,0x05,0x00,0x16,0x00,0x00,0x00,
+0x4e,0x01,0x00,0x00,0x4d,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x4c,0x01,0x00,0x00,0x4e,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x34,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x34,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x51,0x01,0x00,0x00,0x66,0x01,0x00,0x00,0x9d,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x31,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x33,0x01,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t soft_max_f32_len = 4836;
+
+unsigned char soft_max_f32_f16_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x73,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x11,0x00,0x02,0x00,0x51,0x11,0x00,0x00,
+0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,0x47,0x4c,0x53,0x4c,
+0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x00,0x00,0x00,0x00,
+0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x0f,0x00,0x0c,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0x10,0x01,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x17,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x74,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x75,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x77,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x77,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x8d,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x48,0x00,0x04,0x00,
+0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x8e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x8e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x90,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x90,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0d,0x01,0x00,0x00,
+0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x0e,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x0e,0x01,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x10,0x01,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x10,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x56,0x01,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x16,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x09,0x00,0x17,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x18,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x1c,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x80,0x3f,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x24,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,0x28,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1a,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x74,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x75,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x76,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x76,0x00,0x00,0x00,
+0x77,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x7e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,0x81,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x8c,0x00,0x00,0x00,
+0x10,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x8d,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x8e,0x00,0x00,0x00,
+0x8d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x8f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x8e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x8f,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x97,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x8c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xa0,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x1c,0x00,0x04,0x00,
+0xa3,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0xa3,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xa4,0x00,0x00,0x00,
+0xa5,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0xa8,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x16,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x0d,0x01,0x00,0x00,0x16,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x0e,0x01,0x00,0x00,0x0d,0x01,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0f,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x01,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0f,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x56,0x01,0x00,0x00,0xa0,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x72,0x01,0x00,0x00,0x00,0x00,0x80,0xff,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,
+0x89,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x26,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0xba,0x00,0x05,0x00,
+0x28,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x26,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x2b,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x29,0x00,0x00,0x00,
+0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2a,0x00,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1c,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x34,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x36,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x38,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x24,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x3a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x39,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x3d,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x39,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x39,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,
+0x57,0x01,0x00,0x00,0x3c,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x40,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x36,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x48,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x4b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x49,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4d,0x00,0x00,0x00,0x82,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x35,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0x52,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x49,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x49,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x4c,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x70,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x58,0x00,0x00,0x00,0x58,0x01,0x00,0x00,0x0c,0x00,0x07,0x00,
+0x16,0x00,0x00,0x00,0x59,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x58,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x2b,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x2b,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
+0x59,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x5e,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x5e,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x72,0x01,0x00,0x00,0x2b,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x59,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0xa2,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1c,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0x19,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x65,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x28,0x00,0x00,0x00,0x67,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x60,0x00,0x00,0x00,
+0x61,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x67,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x5f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x28,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x6f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x71,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x70,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x60,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x71,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,
+0x7b,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7e,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x7d,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,
+0xac,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x8a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x87,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x9c,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x89,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x96,0x00,0x00,0x00,0x94,0x00,0x00,0x00,0x6b,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x97,0x00,0x00,0x00,0x98,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0x99,0x00,0x00,0x00,
+0x98,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x9a,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x9b,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,
+0x9a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x9c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x8a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x8a,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x9b,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x9c,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x16,0x00,0x00,0x00,
+0x9e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0x80,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x5d,0x01,0x00,0x00,
+0x0c,0x00,0x07,0x00,0x16,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x9e,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x61,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x61,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xa2,0x00,0x00,0x00,0x59,0x01,0x00,0x00,
+0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x5e,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x60,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa8,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0xa9,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0xe0,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xae,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xae,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x1a,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0xad,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+0xb1,0x00,0x00,0x00,0xad,0x00,0x05,0x00,0x28,0x00,0x00,0x00,
+0xb4,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x64,0x00,0x00,0x00,
+0xf6,0x00,0x04,0x00,0xb0,0x00,0x00,0x00,0xb1,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb4,0x00,0x00,0x00,
+0xaf,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xaf,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x28,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xba,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0xb8,0x00,0x00,0x00,
+0xb9,0x00,0x00,0x00,0xba,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xb9,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xa9,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0xb7,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0xa8,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,0xc2,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,
+0xc3,0x00,0x00,0x00,0x0c,0x00,0x07,0x00,0x16,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa9,0x00,0x00,0x00,0xc5,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xba,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xba,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb1,0x00,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xae,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xb0,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa8,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0xca,0x00,0x00,0x00,0xc9,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x4e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,0xaa,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xa9,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xce,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xce,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x61,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0xb0,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0xd1,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x28,0x00,0x00,0x00,0xd6,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0xd0,0x00,0x00,0x00,
+0xd1,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd6,0x00,0x00,0x00,0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xcf,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x61,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x28,0x00,0x00,0x00,
+0xde,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0xe0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xdf,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xe0,0x00,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,
+0xe6,0x00,0x00,0x00,0xda,0x00,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7e,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0x77,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x24,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0xed,0x00,0x00,0x00,
+0xac,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xf5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xf2,0x00,0x00,0x00,0xf4,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0xfc,0x00,0x00,0x00,0xfa,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x97,0x00,0x00,0x00,0xfd,0x00,0x00,0x00,
+0x90,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x8c,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+0xfd,0x00,0x00,0x00,0x73,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0xff,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x85,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x5c,0x01,0x00,0x00,
+0xff,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x01,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x16,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x00,0x01,0x00,0x00,0xf4,0x00,0x00,0x00,0x27,0x00,0x00,0x00,
+0x01,0x01,0x00,0x00,0x0c,0x00,0x08,0x00,0x16,0x00,0x00,0x00,
+0x03,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x32,0x00,0x00,0x00,
+0xec,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x65,0x01,0x00,0x00,
+0x83,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x03,0x01,0x00,0x00,0xca,0x00,0x00,0x00,0x0c,0x00,0x06,0x00,
+0x16,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,
+0x0a,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa9,0x00,0x00,0x00,0x0b,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7e,0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x64,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x13,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xd1,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x15,0x01,0x00,0x00,
+0x61,0x01,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xce,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd0,0x00,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x17,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x1a,0x00,0x00,0x00,0x69,0x01,0x00,0x00,0xad,0x00,0x00,0x00,
+0xd0,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,
+0xad,0x00,0x05,0x00,0x28,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0x64,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x19,0x01,0x00,0x00,0x1a,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x1d,0x01,0x00,0x00,0x18,0x01,0x00,0x00,
+0x19,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x18,0x01,0x00,0x00,
+0x7c,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0x69,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,0x28,0x00,0x00,0x00,
+0x21,0x01,0x00,0x00,0x0f,0x00,0x00,0x00,0x20,0x01,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x23,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x21,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x23,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x22,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x28,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0xa8,0x00,0x00,0x00,0x29,0x01,0x00,0x00,0xa5,0x00,0x00,0x00,
+0x28,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,0x16,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x29,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,0xa9,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x2c,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0xa9,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x23,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x01,0x00,0x00,
+0xe0,0x00,0x04,0x00,0x4e,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0xaa,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1a,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1a,0x01,0x00,0x00,0xc3,0x00,0x05,0x00,
+0x1a,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x69,0x01,0x00,0x00,
+0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x17,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x19,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x33,0x01,0x00,0x00,0xc9,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x35,0x01,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x6a,0x01,0x00,0x00,0x0c,0x00,0x00,0x00,0x19,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x38,0x01,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x28,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x66,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x37,0x01,0x00,0x00,
+0x38,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x3d,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x36,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x41,0x01,0x00,0x00,0x6a,0x01,0x00,0x00,
+0x0f,0x00,0x00,0x00,0xae,0x00,0x05,0x00,0x28,0x00,0x00,0x00,
+0x45,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x66,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x47,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x45,0x01,0x00,0x00,0x46,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x46,0x01,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x37,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x47,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x13,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,
+0x4c,0x01,0x00,0x00,0x41,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0x7e,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x10,0x01,0x00,0x00,
+0x64,0x00,0x00,0x00,0x4e,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x51,0x01,0x00,0x00,0x50,0x01,0x00,0x00,
+0x88,0x00,0x05,0x00,0x16,0x00,0x00,0x00,0x52,0x01,0x00,0x00,
+0x51,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x50,0x01,0x00,0x00,0x52,0x01,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x38,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x38,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,
+0x6a,0x01,0x00,0x00,0xa0,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x35,0x01,0x00,0x00,0xf8,0x00,0x02,0x00,0x37,0x01,0x00,0x00,
+0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+};
+const uint64_t soft_max_f32_f16_len = 4904;
+
+unsigned char split_k_reduce_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x11,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x2d,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x2e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x2e,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x30,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x30,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x3e,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0x3f,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0x3f,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x41,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x41,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x47,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x00,0x04,0x00,0x11,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x19,0x00,0x00,0x00,0x16,0x00,0x03,0x00,
+0x1e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x1e,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x2d,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x2e,0x00,0x00,0x00,
+0x2d,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x2f,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x2f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x37,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0x3e,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0x3f,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x40,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x40,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x00,0x01,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2c,0x00,0x06,0x00,
+0x09,0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x45,0x00,0x00,0x00,
+0x46,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x36,0x00,0x05,0x00,
+0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfb,0x00,0x03,0x00,0x0c,0x00,0x00,0x00,0x49,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x49,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0xae,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,0x1a,0x00,0x00,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x1b,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x48,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1c,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x23,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x23,0x00,0x00,0x00,
+0xf5,0x00,0x07,0x00,0x1e,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x06,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x3d,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x16,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0x2a,0x00,0x00,0x00,0xb0,0x00,0x05,0x00,
+0x19,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x2b,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x25,0x00,0x00,0x00,
+0x24,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x2c,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x25,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x24,0x00,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x4e,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x36,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x37,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+0x30,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x1e,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x81,0x00,0x05,0x00,0x1e,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,0x39,0x00,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,
+0x4e,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0x23,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x25,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x37,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x41,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x44,0x00,0x00,0x00,0x4f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x48,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x48,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t split_k_reduce_len = 1416;
+
+unsigned char sqr_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x9c,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x09,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x03,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x2c,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x38,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x44,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,
+0x12,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x48,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x12,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xc7,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xd6,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xd7,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xd7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xd7,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xd9,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xd9,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xe1,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x04,0x00,0xe2,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0xe2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0xe4,0x00,0x00,0x00,
+0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0xe4,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0xf3,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x11,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x1e,0x00,0x16,0x00,0x12,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x13,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x15,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x55,0x00,0x00,0x00,
+0x08,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0x6f,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0x76,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xad,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0xb2,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,
+0x0e,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xbe,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17,0x00,0x04,0x00,
+0xc5,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0xc5,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0xc6,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xc9,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x02,0x00,
+0xcf,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xd6,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xd7,0x00,0x00,0x00,
+0xd6,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xd8,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xd7,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xd8,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0xde,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,0xe1,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,0xe2,0x00,0x00,0x00,
+0xe1,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0xe3,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0xe2,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0xe3,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x15,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,
+0x11,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2c,0x00,0x06,0x00,0xc5,0x00,0x00,0x00,0xf3,0x00,0x00,0x00,
+0xf1,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,0xf2,0x00,0x00,0x00,
+0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x05,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,0xf4,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xfb,0x00,0x03,0x00,0xc8,0x00,0x00,0x00,
+0xf5,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xf5,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0xc9,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0xc7,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xcb,0x00,0x00,0x00,0xca,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xcd,0x00,0x00,0x00,
+0xae,0x00,0x05,0x00,0xcf,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,
+0xcb,0x00,0x00,0x00,0xce,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0xd2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0xd0,0x00,0x00,0x00,0xd1,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0xd1,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0xd2,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x03,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x03,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x05,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x05,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x07,0x01,0x00,0x00,
+0x04,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x08,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x09,0x01,0x00,0x00,0x08,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x07,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x0b,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x04,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x12,0x01,0x00,0x00,0x0f,0x01,0x00,0x00,
+0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x15,0x01,0x00,0x00,0x12,0x01,0x00,0x00,0x09,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x18,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x15,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x1d,0x01,0x00,0x00,0x06,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x1d,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x22,0x01,0x00,0x00,
+0x1e,0x01,0x00,0x00,0x06,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x25,0x01,0x00,0x00,0x22,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x18,0x01,0x00,0x00,0x25,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x2a,0x01,0x00,0x00,0x09,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x36,0x01,0x00,0x00,0x2d,0x01,0x00,0x00,
+0x09,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x37,0x01,0x00,0x00,0x2a,0x01,0x00,0x00,0x36,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x39,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x3a,0x01,0x00,0x00,0x39,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,
+0x0b,0x01,0x00,0x00,0x3a,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x5a,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x3d,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x3f,0x01,0x00,0x00,0x1e,0x01,0x00,0x00,
+0x3e,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x40,0x01,0x00,0x00,0x3b,0x01,0x00,0x00,0x3f,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x42,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x43,0x01,0x00,0x00,0x42,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x44,0x01,0x00,0x00,
+0x2d,0x01,0x00,0x00,0x43,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x45,0x01,0x00,0x00,0x40,0x01,0x00,0x00,
+0x44,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x47,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0x66,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x48,0x01,0x00,0x00,
+0x47,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x49,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x48,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,
+0x45,0x01,0x00,0x00,0x49,0x01,0x00,0x00,0x41,0x00,0x06,0x00,
+0xde,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,0xd9,0x00,0x00,0x00,
+0xcc,0x00,0x00,0x00,0x4a,0x01,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x11,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xdf,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0xe5,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x54,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x54,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x56,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x57,0x01,0x00,0x00,0x56,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x58,0x01,0x00,0x00,
+0x55,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x59,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0x76,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x59,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,0x58,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x5c,0x01,0x00,0x00,0xcb,0x00,0x00,0x00,0x5b,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x60,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x55,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x63,0x01,0x00,0x00,0x60,0x01,0x00,0x00,
+0x57,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x66,0x01,0x00,0x00,0x63,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,
+0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x69,0x01,0x00,0x00,
+0xcb,0x00,0x00,0x00,0x66,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x6e,0x01,0x00,0x00,0x57,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x6e,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x73,0x01,0x00,0x00,
+0x6f,0x01,0x00,0x00,0x57,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x76,0x01,0x00,0x00,0x73,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x69,0x01,0x00,0x00,0x76,0x01,0x00,0x00,
+0x86,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x7b,0x01,0x00,0x00,0x5a,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x87,0x01,0x00,0x00,0x7e,0x01,0x00,0x00,
+0x5a,0x01,0x00,0x00,0x82,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x88,0x01,0x00,0x00,0x7b,0x01,0x00,0x00,0x87,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xad,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x8b,0x01,0x00,0x00,0x8a,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x8c,0x01,0x00,0x00,
+0x5c,0x01,0x00,0x00,0x8b,0x01,0x00,0x00,0x41,0x00,0x05,0x00,
+0x17,0x00,0x00,0x00,0x8e,0x01,0x00,0x00,0x14,0x00,0x00,0x00,
+0xb2,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x8e,0x01,0x00,0x00,0x84,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x6f,0x01,0x00,0x00,
+0x8f,0x01,0x00,0x00,0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x91,0x01,0x00,0x00,0x8c,0x01,0x00,0x00,0x90,0x01,0x00,0x00,
+0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,0x93,0x01,0x00,0x00,
+0x14,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x94,0x01,0x00,0x00,0x93,0x01,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x95,0x01,0x00,0x00,
+0x7e,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x96,0x01,0x00,0x00,0x91,0x01,0x00,0x00,
+0x95,0x01,0x00,0x00,0x41,0x00,0x05,0x00,0x17,0x00,0x00,0x00,
+0x98,0x01,0x00,0x00,0x14,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x99,0x01,0x00,0x00,
+0x98,0x01,0x00,0x00,0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,
+0x9a,0x01,0x00,0x00,0x88,0x01,0x00,0x00,0x99,0x01,0x00,0x00,
+0x80,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x9b,0x01,0x00,0x00,
+0x96,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,
+0x9b,0x01,0x00,0x00,0x85,0x00,0x05,0x00,0x11,0x00,0x00,0x00,
+0xef,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0xde,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+0xe4,0x00,0x00,0x00,0xcc,0x00,0x00,0x00,0xec,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0xf0,0x00,0x00,0x00,0xef,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0xf4,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0xf4,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t sqr_f32_len = 3252;
+
+unsigned char sum_rows_f32_data[] = {
+0x03,0x02,0x23,0x07,0x00,0x05,0x01,0x00,0x0b,0x00,0x0d,0x00,
+0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x00,0x02,0x00,
+0x01,0x00,0x00,0x00,0x0b,0x00,0x06,0x00,0x01,0x00,0x00,0x00,
+0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,
+0x00,0x00,0x00,0x00,0x0e,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x0f,0x00,0x0b,0x00,0x05,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,
+0x10,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x0b,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x11,0x00,0x00,0x00,
+0x0b,0x00,0x00,0x00,0x1b,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x15,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x05,0x00,
+0x25,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x23,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x25,0x00,0x00,0x00,
+0x02,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+0x48,0x00,0x05,0x00,0x25,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0x23,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x47,0x00,0x03,0x00,
+0x25,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x30,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x31,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x31,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x33,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x69,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x48,0x00,0x04,0x00,0x6a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x48,0x00,0x05,0x00,0x6a,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x03,0x00,0x6a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x47,0x00,0x04,0x00,0x6c,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x47,0x00,0x04,0x00,
+0x71,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x47,0x00,0x04,0x00,0x73,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x19,0x00,0x00,0x00,0x13,0x00,0x02,0x00,0x02,0x00,0x00,0x00,
+0x21,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x17,0x00,0x04,0x00,0x09,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x0d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x0a,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x16,0x00,0x03,0x00,0x14,0x00,0x00,0x00,
+0x20,0x00,0x00,0x00,0x32,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0x04,0x00,
+0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x17,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x16,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x17,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x1b,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x1e,0x00,0x06,0x00,0x25,0x00,0x00,0x00,
+0x06,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x14,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x26,0x00,0x00,0x00,
+0x09,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,
+0x26,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x09,0x00,0x00,0x00,
+0x15,0x00,0x04,0x00,0x28,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x28,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x2a,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+0x14,0x00,0x02,0x00,0x2d,0x00,0x00,0x00,0x1d,0x00,0x03,0x00,
+0x30,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x1e,0x00,0x03,0x00,
+0x31,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+0x32,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x31,0x00,0x00,0x00,
+0x3b,0x00,0x04,0x00,0x32,0x00,0x00,0x00,0x33,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x3a,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0x08,0x01,0x00,0x00,0x34,0x00,0x06,0x00,0x28,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x15,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,0x28,0x00,0x00,0x00,
+0x48,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x34,0x00,0x06,0x00,
+0x28,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x87,0x00,0x00,0x00,
+0x47,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x2b,0x00,0x04,0x00,
+0x28,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x1d,0x00,0x03,0x00,0x69,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+0x1e,0x00,0x03,0x00,0x6a,0x00,0x00,0x00,0x69,0x00,0x00,0x00,
+0x20,0x00,0x04,0x00,0x6b,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0x6a,0x00,0x00,0x00,0x3b,0x00,0x04,0x00,0x6b,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x32,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+0x2b,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x01,0x00,0x00,0x00,0x33,0x00,0x06,0x00,0x09,0x00,0x00,0x00,
+0x73,0x00,0x00,0x00,0x71,0x00,0x00,0x00,0x72,0x00,0x00,0x00,
+0x72,0x00,0x00,0x00,0x36,0x00,0x05,0x00,0x02,0x00,0x00,0x00,
+0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x05,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x0d,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x11,0x00,0x00,0x00,
+0x0c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x06,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x41,0x00,0x05,0x00,
+0x1b,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,
+0x1a,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x1f,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,
+0x06,0x00,0x00,0x00,0x74,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x05,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x2a,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0x27,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x2b,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,
+0x21,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x2e,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+0x21,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x20,0x00,0x00,0x00,
+0x84,0x00,0x05,0x00,0x06,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x0f,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x39,0x00,0x00,0x00,0x37,0x00,0x00,0x00,
+0x74,0x00,0x00,0x00,0x41,0x00,0x06,0x00,0x3a,0x00,0x00,0x00,
+0x3b,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x29,0x00,0x00,0x00,
+0x39,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x3c,0x00,0x00,0x00,0x3b,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+0x81,0x00,0x05,0x00,0x14,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,
+0x3e,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,
+0x1c,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x74,0x00,0x00,0x00,
+0x15,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x1f,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x21,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4a,0x00,0x00,0x00,0xf5,0x00,0x07,0x00,0x28,0x00,0x00,0x00,
+0x75,0x00,0x00,0x00,0x49,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x4d,0x00,0x00,0x00,0xad,0x00,0x05,0x00,
+0x2d,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0x29,0x00,0x00,0x00,0xf6,0x00,0x04,0x00,0x4c,0x00,0x00,0x00,
+0x4d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x50,0x00,0x00,0x00,0x4b,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x4b,0x00,0x00,0x00,0x7c,0x00,0x04,0x00,
+0x06,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x75,0x00,0x00,0x00,
+0xb0,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,0x54,0x00,0x00,0x00,
+0x13,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0xf7,0x00,0x03,0x00,
+0x56,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfa,0x00,0x04,0x00,
+0x54,0x00,0x00,0x00,0x55,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x55,0x00,0x00,0x00,0x80,0x00,0x05,0x00,
+0x06,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+0x53,0x00,0x00,0x00,0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,
+0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,0x5d,0x00,0x00,0x00,
+0x5c,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,0x14,0x00,0x00,0x00,
+0x5f,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x81,0x00,0x05,0x00,
+0x14,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,
+0x5d,0x00,0x00,0x00,0x3e,0x00,0x03,0x00,0x1c,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0xf9,0x00,0x02,0x00,0x56,0x00,0x00,0x00,
+0xf8,0x00,0x02,0x00,0x56,0x00,0x00,0x00,0xe0,0x00,0x04,0x00,
+0x43,0x00,0x00,0x00,0x43,0x00,0x00,0x00,0x44,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4d,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4d,0x00,0x00,0x00,0xc3,0x00,0x05,0x00,0x28,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x75,0x00,0x00,0x00,0x62,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x4a,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x4c,0x00,0x00,0x00,0xaa,0x00,0x05,0x00,0x2d,0x00,0x00,0x00,
+0x66,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+0xf7,0x00,0x03,0x00,0x68,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xfa,0x00,0x04,0x00,0x66,0x00,0x00,0x00,0x67,0x00,0x00,0x00,
+0x68,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,0x67,0x00,0x00,0x00,
+0x41,0x00,0x05,0x00,0x1b,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x18,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x3d,0x00,0x04,0x00,
+0x14,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,
+0x41,0x00,0x06,0x00,0x3a,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+0x6c,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,
+0x3e,0x00,0x03,0x00,0x70,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,
+0xf9,0x00,0x02,0x00,0x68,0x00,0x00,0x00,0xf8,0x00,0x02,0x00,
+0x68,0x00,0x00,0x00,0xfd,0x00,0x01,0x00,0x38,0x00,0x01,0x00,
+
+};
+const uint64_t sum_rows_f32_len = 2112;
+
diff --git a/ggml/src/ggml-vulkan.cpp b/ggml/src/ggml-vulkan.cpp
new file mode 100644 (file)
index 0000000..101781e
--- /dev/null
@@ -0,0 +1,7064 @@
+#include "ggml-vulkan.h"
+#include <vulkan/vulkan_core.h>
+#ifdef GGML_VULKAN_RUN_TESTS
+#include <chrono>
+#endif
+
+#include <vulkan/vulkan.hpp>
+
+#include <algorithm>
+#include <cmath>
+#include <iomanip>
+#include <iostream>
+#include <tuple>
+#include <vector>
+#include <sstream>
+#include <utility>
+#include <memory>
+#include <limits>
+#include <map>
+#include <memory>
+#include <mutex>
+
+#include "ggml.h"
+#include "ggml-backend-impl.h"
+
+#include "ggml-vulkan-shaders.hpp"
+
+#define VK_API_VERSION VK_API_VERSION_1_2
+
+#define CEIL_DIV(M, N) (((M) + (N)-1) / (N))
+
+#define VK_VENDOR_ID_AMD 0x1002
+#define VK_VENDOR_ID_APPLE 0x106b
+#define VK_VENDOR_ID_INTEL 0x8086
+#define VK_VENDOR_ID_NVIDIA 0x10de
+
+#define VK_DEVICE_DESCRIPTOR_POOL_MODE_UNKNOWN 0
+#define VK_DEVICE_DESCRIPTOR_POOL_MODE_MULTI 1
+#define VK_DEVICE_DESCRIPTOR_POOL_MODE_SINGLE 2
+
+#define VK_NUM_TYPES 16
+
+#define GGML_VK_MAX_NODES 8192
+
+#define MAX_VK_BUFFERS 256
+
+#ifndef K_QUANTS_PER_ITERATION
+#define K_QUANTS_PER_ITERATION 1
+#else
+static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2");
+#endif
+
+#define VK_CHECK(err, msg)                                          \
+    do {                                                            \
+        vk::Result err_ = (err);                                    \
+        if (err_ != vk::Result::eSuccess) {                         \
+            fprintf(stderr, "ggml_vulkan: %s error %s at %s:%d\n",  \
+                #err, to_string(err_).c_str(), __FILE__, __LINE__); \
+            exit(1);                                                \
+        }                                                           \
+    } while (0)
+
+#ifdef GGML_VULKAN_DEBUG
+#define VK_LOG_DEBUG(msg) std::cerr << msg << std::endl
+#else
+#define VK_LOG_DEBUG(msg) ((void) 0)
+#endif // GGML_VULKAN_DEBUG
+
+struct ggml_backend_vk_context;
+
+struct vk_queue {
+    uint32_t queue_family_index;
+    vk::Queue queue;
+    vk::CommandPool pool;
+    uint32_t cmd_buffer_idx;
+    std::vector<vk::CommandBuffer> cmd_buffers;
+
+    vk::PipelineStageFlags stage_flags;
+};
+
+struct vk_pipeline_struct {
+    std::string name;
+    vk::ShaderModule shader_module;
+    vk::DescriptorSetLayout dsl;
+    std::vector<vk::DescriptorPool> descriptor_pools;
+    std::vector<vk::DescriptorSet> descriptor_sets;
+    uint32_t descriptor_set_idx;
+    vk::PipelineLayout layout;
+    vk::Pipeline pipeline;
+    uint32_t push_constant_size;
+    uint32_t parameter_count;
+    std::array<uint32_t, 3> wg_denoms;
+    uint32_t align;
+};
+
+typedef std::shared_ptr<vk_pipeline_struct> vk_pipeline;
+typedef std::weak_ptr<vk_pipeline_struct> vk_pipeline_ref;
+
+static void ggml_vk_destroy_pipeline(vk::Device& device, vk_pipeline& pipeline);
+
+struct vk_matmul_pipeline_struct {
+    vk_pipeline l, m, s;
+    vk_pipeline a_l, a_m, a_s;
+};
+
+typedef std::shared_ptr<vk_matmul_pipeline_struct> vk_matmul_pipeline;
+
+struct vk_device_struct;
+typedef std::shared_ptr<vk_device_struct> vk_device;
+typedef std::weak_ptr<vk_device_struct> vk_device_ref;
+
+struct vk_buffer_struct;
+typedef std::shared_ptr<vk_buffer_struct> vk_buffer;
+typedef std::weak_ptr<vk_buffer_struct> vk_buffer_ref;
+
+struct ggml_backend_vk_buffer_type_context {
+    std::string name;
+    vk_device device;
+};
+
+GGML_CALL static const char * ggml_backend_vk_buffer_type_name(ggml_backend_buffer_type_t buft);
+GGML_CALL static ggml_backend_buffer_t ggml_backend_vk_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size);
+GGML_CALL static size_t ggml_backend_vk_buffer_type_get_alignment(ggml_backend_buffer_type_t buft);
+GGML_CALL static size_t ggml_backend_vk_buffer_type_get_max_size(ggml_backend_buffer_type_t buft);
+GGML_CALL static size_t ggml_backend_vk_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor);
+static ggml_backend_buffer_type_i ggml_backend_vk_buffer_type_interface = {
+    /* .get_name         = */ ggml_backend_vk_buffer_type_name,
+    /* .alloc_buffer     = */ ggml_backend_vk_buffer_type_alloc_buffer,
+    /* .get_alignment    = */ ggml_backend_vk_buffer_type_get_alignment,
+    /* .get_max_size     = */ ggml_backend_vk_buffer_type_get_max_size,
+    /* .get_alloc_size   = */ ggml_backend_vk_buffer_type_get_alloc_size,
+    /* .is_host          = */ NULL,
+};
+
+#ifdef GGML_VULKAN_MEMORY_DEBUG
+class vk_memory_logger;
+#endif
+static void ggml_vk_destroy_buffer(vk_buffer& buf);
+
+struct vk_device_struct {
+    std::mutex mutex;
+
+    vk::PhysicalDevice physical_device;
+    vk::PhysicalDeviceProperties properties;
+    std::string name;
+    uint64_t max_memory_allocation_size;
+    bool fp16;
+    vk::Device device;
+    uint32_t vendor_id;
+    vk_queue compute_queue;
+    vk_queue transfer_queue;
+    bool single_queue;
+    uint32_t descriptor_set_mode;
+    uint32_t subgroup_size;
+    bool uma;
+
+    size_t idx;
+
+    vk_matmul_pipeline pipeline_matmul_f32;
+    vk_matmul_pipeline pipeline_matmul_f32_f16;
+    vk_matmul_pipeline pipeline_matmul_f16;
+    vk_matmul_pipeline pipeline_matmul_f16_f32;
+    vk_pipeline pipeline_matmul_split_k_reduce;
+
+    vk_matmul_pipeline pipeline_dequant_mul_mat_mat[VK_NUM_TYPES];
+
+    vk_matmul_pipeline pipeline_matmul_id_f32;
+    vk_matmul_pipeline pipeline_matmul_id_f16;
+    vk_matmul_pipeline pipeline_matmul_id_f16_f32;
+
+    vk_matmul_pipeline pipeline_dequant_mul_mat_mat_id[VK_NUM_TYPES];
+
+    vk_pipeline pipeline_dequant[VK_NUM_TYPES];
+    vk_pipeline pipeline_dequant_mul_mat_vec_f32_f32[VK_NUM_TYPES];
+    vk_pipeline pipeline_dequant_mul_mat_vec_f16_f32[VK_NUM_TYPES];
+    vk_pipeline pipeline_dequant_mul_mat_vec_id_f32[VK_NUM_TYPES];
+
+    vk_pipeline pipeline_mul_mat_vec_p021_f16_f32;
+    vk_pipeline pipeline_mul_mat_vec_nc_f16_f32;
+    vk_pipeline pipeline_get_rows[VK_NUM_TYPES];
+    vk_pipeline pipeline_get_rows_f32[VK_NUM_TYPES];
+    vk_pipeline pipeline_mul_f32;
+    vk_pipeline pipeline_div_f32;
+    vk_pipeline pipeline_add_f32;
+    vk_pipeline pipeline_scale_f32;
+    vk_pipeline pipeline_sqr_f32;
+    vk_pipeline pipeline_clamp_f32;
+    vk_pipeline pipeline_cpy_f32_f32, pipeline_cpy_f32_f16, pipeline_cpy_f16_f16;
+    vk_pipeline pipeline_norm_f32;
+    vk_pipeline pipeline_rms_norm_f32;
+    vk_pipeline pipeline_gelu_f32;
+    vk_pipeline pipeline_silu_f32;
+    vk_pipeline pipeline_relu_f32;
+    vk_pipeline pipeline_diag_mask_inf_f32;
+    vk_pipeline pipeline_soft_max_f32, pipeline_soft_max_f32_f16;
+    vk_pipeline pipeline_rope_norm_f32, pipeline_rope_norm_f16;
+    vk_pipeline pipeline_rope_neox_f32, pipeline_rope_neox_f16;
+    vk_pipeline pipeline_argsort_f32;
+    vk_pipeline pipeline_sum_rows_f32;
+
+    std::vector<vk_pipeline_ref> pipelines;
+
+    std::vector<std::tuple<void*, size_t, vk_buffer>> pinned_memory;
+
+    vk::Fence fence;
+    vk_buffer sync_staging;
+
+    ggml_backend_buffer_type buffer_type;
+
+#ifdef GGML_VULKAN_MEMORY_DEBUG
+    std::unique_ptr<vk_memory_logger> memory_logger;
+#endif
+
+    ~vk_device_struct() {
+        VK_LOG_DEBUG("destroy device " << name);
+
+        device.destroyFence(fence);
+
+        ggml_vk_destroy_buffer(sync_staging);
+
+        device.destroyCommandPool(compute_queue.pool);
+        if (!single_queue) {
+            device.destroyCommandPool(transfer_queue.pool);
+        }
+
+        for (auto& pipeline : pipelines) {
+            if (pipeline.expired()) {
+                continue;
+            }
+
+            vk_pipeline pl = pipeline.lock();
+            ggml_vk_destroy_pipeline(device, pl);
+        }
+        pipelines.clear();
+
+        device.destroy();
+    }
+};
+
+struct vk_buffer_struct {
+    vk::Buffer buffer;
+    vk::DeviceMemory device_memory;
+    vk::MemoryPropertyFlags memory_property_flags;
+    void * ptr;
+    size_t size = 0;
+
+    vk_device device;
+
+    ~vk_buffer_struct() {
+        if (size == 0) {
+            return;
+        }
+        VK_LOG_DEBUG("~vk_buffer_struct(" << buffer << ", " << size << ")");
+
+        device->device.freeMemory(device_memory);
+        device->device.destroyBuffer(buffer);
+    }
+};
+
+struct vk_subbuffer {
+    vk_buffer buffer;
+    uint64_t offset;
+    uint64_t size;
+};
+
+struct vk_semaphore {
+    vk::Semaphore s;
+    uint64_t value;
+};
+
+struct vk_submission {
+    vk::CommandBuffer buffer;
+    std::vector<vk_semaphore> wait_semaphores;
+    std::vector<vk_semaphore> signal_semaphores;
+};
+
+typedef std::vector<vk_submission> vk_sequence;
+
+struct vk_mat_mat_push_constants {
+    uint32_t M; uint32_t N; uint32_t K;
+    uint32_t stride_a; uint32_t stride_b; uint32_t stride_d;
+    uint32_t batch_stride_a; uint32_t batch_stride_b; uint32_t batch_stride_d;
+    uint32_t k_split;
+    uint32_t ne02; uint32_t ne12; uint32_t broadcast2; uint32_t broadcast3;
+};
+struct vk_mat_vec_push_constants {
+    uint32_t ncols; uint32_t stride_a; uint32_t stride_b; uint32_t stride_d;
+    uint32_t batch_stride_a; uint32_t batch_stride_b; uint32_t batch_stride_d;
+    uint32_t ne02; uint32_t ne12; uint32_t broadcast2; uint32_t broadcast3;
+};
+
+struct vk_mat_mat_id_push_constants {
+    uint32_t M; uint32_t N; uint32_t K;
+    uint32_t stride_a; uint32_t stride_b; uint32_t stride_d;
+    uint32_t batch_stride_a; uint32_t batch_stride_b; uint32_t batch_stride_d;
+    uint32_t nei0; uint32_t nei1; uint32_t nbi1; uint32_t ne11;
+};
+struct vk_mat_vec_id_push_constants {
+    uint32_t ncols; uint32_t stride_a; uint32_t stride_b; uint32_t stride_d;
+    uint32_t batch_stride_a; uint32_t batch_stride_b; uint32_t batch_stride_d;
+    uint32_t nei0; uint32_t ne11;
+};
+
+struct vk_op_push_constants {
+    uint32_t KX;
+    uint32_t KY;
+    float param1;
+    float param2;
+};
+
+struct vk_op_unary_push_constants {
+    uint32_t ne;
+    uint32_t ne00; uint32_t ne01; uint32_t ne02; uint32_t ne03; uint32_t nb00; uint32_t nb01; uint32_t nb02; uint32_t nb03;
+    uint32_t ne10; uint32_t ne11; uint32_t ne12; uint32_t ne13; uint32_t nb10; uint32_t nb11; uint32_t nb12; uint32_t nb13;
+    uint32_t d_offset;
+    float param1; float param2;
+};
+
+struct vk_op_binary_push_constants {
+    uint32_t ne;
+    uint32_t ne00; uint32_t ne01; uint32_t ne02; uint32_t ne03; uint32_t nb00; uint32_t nb01; uint32_t nb02; uint32_t nb03;
+    uint32_t ne10; uint32_t ne11; uint32_t ne12; uint32_t ne13; uint32_t nb10; uint32_t nb11; uint32_t nb12; uint32_t nb13;
+    uint32_t ne20; uint32_t ne21; uint32_t ne22; uint32_t ne23; uint32_t nb20; uint32_t nb21; uint32_t nb22; uint32_t nb23;
+    uint32_t d_offset;
+    float param1; float param2;
+};
+
+struct vk_op_diag_mask_push_constants {
+    uint32_t ncols;
+    uint32_t rows_per_channel;
+    int32_t n_past;
+};
+
+struct vk_op_rope_push_constants {
+    uint32_t ncols;
+    uint32_t n_dims;
+    float freq_scale;
+    uint32_t p_delta_rows;
+    float freq_base;
+    float ext_factor;
+    float attn_factor;
+    float corr_dims[2];
+    float theta_scale;
+    uint32_t has_ff;
+};
+
+struct vk_op_soft_max_push_constants {
+    uint32_t KX;
+    uint32_t KY;
+    float scale;
+    float max_bias;
+    float m0;
+    float m1;
+    uint32_t n_head_log2;
+};
+
+struct vk_op_argsort_push_constants {
+    uint32_t ncols;
+    uint32_t ncols_pad;
+    int32_t order;
+};
+
+// Allow pre-recording command buffers
+struct vk_staging_memcpy {
+    vk_staging_memcpy(void * _dst, const void * _src, size_t _n) : dst(_dst), src(_src), n(_n) {}
+
+    void * dst;
+    const void * src;
+    size_t n;
+};
+
+struct vk_context {
+    size_t idx;
+
+    vk_submission * s;
+    std::vector<vk_sequence> seqs;
+
+    ggml_tensor * exit_tensor;
+
+    std::vector<vk_staging_memcpy> in_memcpys;
+    std::vector<vk_staging_memcpy> out_memcpys;
+
+    vk_queue * q;
+};
+
+struct ggml_tensor_extra_gpu {
+    size_t ctx_idx;
+
+    vk_buffer_ref buffer_gpu;
+    uint64_t offset;
+
+    void reset() {
+        ctx_idx = 0;
+        buffer_gpu.reset();
+        offset = 0;
+    }
+};
+
+struct ggml_vk_garbage_collector {
+    std::vector<vk_semaphore> tl_semaphores;
+    std::vector<vk_semaphore> semaphores;
+    std::vector<vk::Event> events;
+    std::vector<vk_buffer> temp_buffers;
+    std::vector<vk_context> contexts;
+};
+
+#if defined(GGML_VULKAN_MEMORY_DEBUG) || defined(GGML_VULKAN_DEBUG)
+#define VK_LOG_MEMORY(msg) std::cerr << "ggml_vulkan memory: " << msg << std::endl
+
+static std::string format_size(size_t size) {
+    const size_t kib = 1024;
+    const size_t mib = kib * 1024;
+    const size_t gib = mib * 1024;
+
+    std::ostringstream oss;
+    oss << std::fixed << std::setprecision(2);
+
+    if (size >= gib) {
+        oss << static_cast<double>(size) / gib << " GiB";
+    } else if (size >= mib) {
+        oss << static_cast<double>(size) / mib << " MiB";
+    } else if (size >= kib) {
+        oss << static_cast<double>(size) / kib << " KiB";
+    } else {
+        oss << size << " B";
+    }
+
+    return oss.str();
+}
+
+static std::mutex log_mutex;
+
+class vk_memory_logger {
+public:
+    vk_memory_logger(): total_device(0), total_host(0) {}
+    void log_allocation(vk_buffer_ref buf_ref, size_t size);
+    void log_deallocation(vk_buffer_ref buf_ref);
+
+private:
+    std::map<vk::Buffer, size_t> allocations; // Track allocations
+    size_t total_device;
+    size_t total_host;
+};
+#else
+#define VK_LOG_MEMORY(msg) ((void) 0)
+#endif // GGML_VULKAN_MEMORY_DEBUG
+
+struct ggml_backend_vk_context {
+    std::string name;
+
+    vk_device device;
+
+    size_t semaphore_idx, event_idx;
+    ggml_vk_garbage_collector gc;
+    size_t prealloc_size_x, prealloc_size_y, prealloc_size_split_k;
+    vk_buffer prealloc_x, prealloc_y, prealloc_split_k;
+    vk::Fence fence;
+    vk_buffer staging;
+    size_t staging_size;
+    size_t staging_offset;
+
+    vk_buffer buffer_pool[MAX_VK_BUFFERS];
+
+    vk_context * compute_ctx;
+    vk_context * transfer_ctx;
+};
+
+#ifdef GGML_VULKAN_MEMORY_DEBUG
+void vk_memory_logger::log_allocation(vk_buffer_ref buf_ref, size_t size) {
+    std::lock_guard<std::mutex> guard(log_mutex);
+    vk_buffer buf = buf_ref.lock();
+    const bool device = bool(buf->memory_property_flags & vk::MemoryPropertyFlagBits::eDeviceLocal);
+    const std::string type = device ? "device" : "host";
+    allocations[buf->buffer] = size;
+    total_device += device ? size : 0;
+    total_host += device ? 0 : size;
+    VK_LOG_MEMORY(buf->device->name << ": +" << format_size(size) << " " << type << " at " << buf->buffer << ". Total device: " << format_size(total_device) << ", total host: " << format_size(total_host));
+}
+
+void vk_memory_logger::log_deallocation(vk_buffer_ref buf_ref) {
+    if (buf_ref.expired() || buf_ref.lock()->size == 0) {
+        return;
+    }
+
+    std::lock_guard<std::mutex> guard(log_mutex);
+    vk_buffer buf = buf_ref.lock();
+    const bool device = bool(buf->memory_property_flags & vk::MemoryPropertyFlagBits::eDeviceLocal);
+    std::string type = device ? "device" : "host";
+    auto it = allocations.find(buf->buffer);
+    total_device -= device ? it->second : 0;
+    total_host -= device ? 0 : it->second;
+    if (it != allocations.end()) {
+        VK_LOG_MEMORY(buf->device->name << ": -" << format_size(it->second) << " " << type << " at " << buf->buffer << ". Total device: " << format_size(total_device) << ", total host: " << format_size(total_host));
+        allocations.erase(it);
+    } else {
+        VK_LOG_MEMORY("ERROR " << buf->device->name << ": Attempted to deallocate unknown " << type << " memory at " << buf->buffer);
+    }
+}
+#endif // GGML_VULKAN_MEMORY_DEBUG
+
+struct vk_instance_t {
+    vk::Instance instance;
+
+    std::vector<size_t> device_indices;
+    vk_device devices[GGML_VK_MAX_DEVICES];
+};
+
+static bool vk_instance_initialized = false;
+static vk_instance_t vk_instance;
+
+#ifdef GGML_VULKAN_CHECK_RESULTS
+static size_t vk_skip_checks;
+static size_t vk_output_tensor;
+
+static void ggml_vk_print_tensor(ggml_backend * ctx, const ggml_tensor * tensor, const char * name);
+static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_tensor * tensor);
+static void ggml_vk_check_results_1(ggml_backend_vk_context * ctx, ggml_tensor * tensor);
+#endif
+
+typedef void (*ggml_vk_func_t)(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst);
+
+GGML_CALL static void ggml_backend_vk_free(ggml_backend_t backend);
+
+static void ggml_vk_create_pipeline(vk_device& device, vk_pipeline& pipeline, const std::string& name, size_t spv_size, const void* spv_data, const std::string& entrypoint, uint32_t parameter_count, uint32_t push_constant_size, std::array<uint32_t, 3> wg_denoms, std::vector<uint32_t>&& specialization_constants, uint32_t align) {
+    VK_LOG_DEBUG("ggml_vk_create_pipeline(" << device->name << ", " << name << ", " << entrypoint << ", " << parameter_count << ", " << push_constant_size << ", (" << wg_denoms[0] << "," << wg_denoms[1] << "," << wg_denoms[2] << "), specialization_constants, " << align << ")");
+    GGML_ASSERT(parameter_count > 0);
+    GGML_ASSERT(wg_denoms[0] > 0 && wg_denoms[1] > 0 && wg_denoms[2] > 0); // NOLINT
+
+    std::lock_guard<std::mutex> guard(device->mutex);
+
+    pipeline = std::make_shared<vk_pipeline_struct>();
+    pipeline->name = name;
+    pipeline->parameter_count = parameter_count;
+    pipeline->push_constant_size = push_constant_size;
+    pipeline->wg_denoms = wg_denoms;
+    pipeline->align = align;
+
+    vk::ShaderModuleCreateInfo shader_module_create_info({}, spv_size, reinterpret_cast<const uint32_t *>(spv_data));
+    pipeline->shader_module = device->device.createShaderModule(shader_module_create_info);
+
+    std::vector<vk::DescriptorSetLayoutBinding> dsl_binding;
+    std::vector<vk::DescriptorBindingFlags> dsl_binding_flags;
+    for (uint32_t i = 0; i < parameter_count; i++) {
+        dsl_binding.push_back({i, vk::DescriptorType::eStorageBuffer, 1, vk::ShaderStageFlagBits::eCompute});
+        dsl_binding_flags.push_back({});
+    }
+
+    vk::DescriptorSetLayoutBindingFlagsCreateInfo dslbfci = { dsl_binding_flags };
+
+    vk::PushConstantRange pcr(
+        vk::ShaderStageFlagBits::eCompute,
+        0,
+        pipeline->push_constant_size
+    );
+
+    vk::DescriptorSetLayoutCreateInfo descriptor_set_layout_create_info(
+        {},
+        dsl_binding);
+    descriptor_set_layout_create_info.setPNext(&dslbfci);
+    pipeline->dsl = device->device.createDescriptorSetLayout(descriptor_set_layout_create_info);
+
+    // Check if device supports multiple descriptors per pool
+    if (device->descriptor_set_mode == VK_DEVICE_DESCRIPTOR_POOL_MODE_UNKNOWN) {
+        const uint32_t alloc_count = 2;
+
+        // Try allocating multiple sets from one pool
+        // This fails on AMD for some reason, so add a fall back to allocating one pool per set
+        vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count);
+        vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, alloc_count, descriptor_pool_size);
+        vk::DescriptorPool pool = device->device.createDescriptorPool(descriptor_pool_create_info);
+
+        std::vector<vk::DescriptorSetLayout> layouts(alloc_count);
+        for (uint32_t i = 0; i < alloc_count; i++) {
+            layouts[i] = pipeline->dsl;
+        }
+        try {
+            vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(pool, alloc_count, layouts.data());
+            std::vector<vk::DescriptorSet> sets = device->device.allocateDescriptorSets(descriptor_set_alloc_info);
+        } catch(vk::OutOfPoolMemoryError const&) {
+            device->descriptor_set_mode = VK_DEVICE_DESCRIPTOR_POOL_MODE_SINGLE;
+        }
+
+        device->device.destroyDescriptorPool(pool);
+    }
+
+    if (device->descriptor_set_mode == VK_DEVICE_DESCRIPTOR_POOL_MODE_MULTI) {
+        vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count);
+        vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, 128, descriptor_pool_size);
+        pipeline->descriptor_pools.push_back(device->device.createDescriptorPool(descriptor_pool_create_info));
+    }
+
+    pipeline->descriptor_set_idx = 0;
+
+    vk::PipelineLayoutCreateInfo pipeline_layout_create_info(vk::PipelineLayoutCreateFlags(), pipeline->dsl, pcr);
+    pipeline->layout = device->device.createPipelineLayout(pipeline_layout_create_info);
+
+    std::vector<vk::SpecializationMapEntry> specialization_entries(specialization_constants.size());
+
+    for (size_t i = 0; i < specialization_constants.size(); i++) {
+        specialization_entries[i].constantID = i;
+        specialization_entries[i].offset = i * sizeof(uint32_t);
+        specialization_entries[i].size = sizeof(uint32_t);
+    }
+
+    vk::SpecializationInfo specialization_info(
+        specialization_entries.size(),
+        specialization_entries.data(),
+        specialization_constants.size() * sizeof(uint32_t),
+        specialization_constants.data()
+    );
+
+    vk::PipelineShaderStageCreateInfo pipeline_shader_create_info(
+            vk::PipelineShaderStageCreateFlags(),
+            vk::ShaderStageFlagBits::eCompute,
+            pipeline->shader_module,
+            entrypoint.c_str(),
+            &specialization_info);
+    vk::ComputePipelineCreateInfo compute_pipeline_create_info(
+        vk::PipelineCreateFlags(),
+        pipeline_shader_create_info,
+        pipeline->layout);
+    pipeline->pipeline = device->device.createComputePipeline(VK_NULL_HANDLE, compute_pipeline_create_info).value;
+
+    device->pipelines.push_back(pipeline);
+}
+
+static void ggml_vk_destroy_pipeline(vk::Device& device, vk_pipeline& pipeline) {
+    VK_LOG_DEBUG("ggml_pipeline_destroy_pipeline(" << pipeline->name << ")");
+    for (auto& pool : pipeline->descriptor_pools) {
+        device.destroyDescriptorPool(pool);
+    }
+    pipeline->descriptor_pools.clear();
+    pipeline->descriptor_sets.clear();
+    pipeline->descriptor_set_idx = 0;
+
+    device.destroyDescriptorSetLayout(pipeline->dsl);
+
+    device.destroyPipelineLayout(pipeline->layout);
+
+    device.destroyShaderModule(pipeline->shader_module);
+
+    device.destroyPipeline(pipeline->pipeline);
+}
+
+static void ggml_pipeline_allocate_descriptor_sets(vk_device& device, vk_pipeline& pipeline, uint32_t n) {
+    VK_LOG_DEBUG("ggml_pipeline_allocate_descriptor_sets(" << pipeline->name << ", " << n << ")");
+    if (pipeline->descriptor_sets.size() >= pipeline->descriptor_set_idx + n) {
+        // Enough descriptors are available
+        return;
+    }
+
+    std::lock_guard<std::mutex> guard(device->mutex);
+
+    if (device->descriptor_set_mode == VK_DEVICE_DESCRIPTOR_POOL_MODE_MULTI) {
+        const uint32_t alloc_count = pipeline->descriptor_set_idx + n - pipeline->descriptor_sets.size();
+
+        std::vector<vk::DescriptorSetLayout> layouts(alloc_count);
+        for (uint32_t i = 0; i < alloc_count; i++) {
+            layouts[i] = pipeline->dsl;
+        }
+        vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(pipeline->descriptor_pools[0], alloc_count, layouts.data());
+        std::vector<vk::DescriptorSet> sets = device->device.allocateDescriptorSets(descriptor_set_alloc_info);
+        pipeline->descriptor_sets.insert(pipeline->descriptor_sets.end(), sets.begin(), sets.end());
+    } else {
+        for (uint32_t i = pipeline->descriptor_sets.size(); i < pipeline->descriptor_set_idx + n; i++) {
+            vk::DescriptorPoolSize descriptor_pool_size(vk::DescriptorType::eStorageBuffer, pipeline->parameter_count);
+            vk::DescriptorPoolCreateInfo descriptor_pool_create_info({}, 1, descriptor_pool_size);
+            pipeline->descriptor_pools.push_back(device->device.createDescriptorPool(descriptor_pool_create_info));
+
+            vk::DescriptorSetAllocateInfo descriptor_set_alloc_info(pipeline->descriptor_pools[i], 1, &pipeline->dsl);
+            std::vector<vk::DescriptorSet> sets = device->device.allocateDescriptorSets(descriptor_set_alloc_info);
+            pipeline->descriptor_sets.push_back(sets[0]);
+        }
+    }
+}
+
+static void ggml_pipeline_cleanup(vk_pipeline& pipeline) {
+    VK_LOG_DEBUG("ggml_pipeline_cleanup(" << pipeline->name << ")");
+    pipeline->descriptor_set_idx = 0;
+}
+
+static vk::CommandBuffer ggml_vk_create_cmd_buffer(vk_device& device, vk_queue& q) {
+    VK_LOG_DEBUG("ggml_vk_create_cmd_buffer()");
+    std::lock_guard<std::mutex> guard(device->mutex);
+
+    if (q.cmd_buffers.size() > q.cmd_buffer_idx) {
+        // Reuse command buffer
+        return q.cmd_buffers[q.cmd_buffer_idx++];
+    }
+
+    vk::CommandBufferAllocateInfo command_buffer_alloc_info(
+        q.pool,
+        vk::CommandBufferLevel::ePrimary,
+        1);
+    const std::vector<vk::CommandBuffer> cmd_buffers = device->device.allocateCommandBuffers(command_buffer_alloc_info);
+    auto buf = cmd_buffers.front();
+
+    q.cmd_buffers.push_back(buf);
+    q.cmd_buffer_idx++;
+
+    return buf;
+}
+
+static vk_submission ggml_vk_create_submission(vk_device& device, vk_queue& q, std::vector<vk_semaphore> wait_semaphores, std::vector<vk_semaphore> signal_semaphores) {
+    VK_LOG_DEBUG("ggml_vk_create_submission()");
+    vk_submission s;
+    s.buffer = ggml_vk_create_cmd_buffer(device, q);
+    s.wait_semaphores = std::move(wait_semaphores);
+    s.signal_semaphores = std::move(signal_semaphores);
+    return s;
+}
+
+static void ggml_vk_submit(vk_context * ctx, vk::Fence fence) {
+    VK_LOG_DEBUG("ggml_vk_submit(" << ctx->seqs.size() << ", " << fence << ")");
+    if (ctx->seqs.empty()) {
+        return;
+    }
+
+    std::vector<std::vector<uint64_t>> tl_wait_vals;
+    std::vector<std::vector<uint64_t>> tl_signal_vals;
+    std::vector<std::vector<vk::Semaphore>> tl_wait_semaphores;
+    std::vector<std::vector<vk::Semaphore>> tl_signal_semaphores;
+    std::vector<vk::TimelineSemaphoreSubmitInfo> tl_submit_infos;
+    std::vector<vk::SubmitInfo> submit_infos;
+    int idx = -1;
+    std::vector<std::vector<vk::PipelineStageFlags>> stage_flags;
+
+    size_t reserve = 0;
+
+    for (const auto& sequence : ctx->seqs) {
+        reserve += sequence.size();
+    }
+
+    // Pre-reserve vectors to prevent reallocation, which invalidates pointers
+    tl_wait_semaphores.reserve(reserve);
+    tl_wait_vals.reserve(reserve);
+    tl_signal_semaphores.reserve(reserve);
+    tl_signal_vals.reserve(reserve);
+    tl_submit_infos.reserve(reserve);
+    submit_infos.reserve(reserve);
+    stage_flags.reserve(reserve);
+
+    for (const auto& sequence : ctx->seqs) {
+        for (const auto& submission : sequence) {
+            stage_flags.push_back({});
+            idx++;
+            tl_wait_vals.push_back({});
+            tl_wait_semaphores.push_back({});
+            tl_signal_vals.push_back({});
+            tl_signal_semaphores.push_back({});
+            for (size_t i = 0; i < submission.wait_semaphores.size(); i++) {
+                stage_flags[idx].push_back(ctx->q->stage_flags);
+                tl_wait_vals[idx].push_back(submission.wait_semaphores[i].value);
+                tl_wait_semaphores[idx].push_back(submission.wait_semaphores[i].s);
+            }
+            for (size_t i = 0; i < submission.signal_semaphores.size(); i++) {
+                tl_signal_vals[idx].push_back(submission.signal_semaphores[i].value);
+                tl_signal_semaphores[idx].push_back(submission.signal_semaphores[i].s);
+            }
+            tl_submit_infos.push_back({
+                (uint32_t) submission.wait_semaphores.size(),
+                tl_wait_vals[idx].data(),
+                (uint32_t) submission.signal_semaphores.size(),
+                tl_signal_vals[idx].data(),
+            });
+            tl_submit_infos[idx].sType = vk::StructureType::eTimelineSemaphoreSubmitInfo;
+            tl_submit_infos[idx].pNext = nullptr;
+            vk::SubmitInfo si{
+                (uint32_t) submission.wait_semaphores.size(),
+                tl_wait_semaphores[idx].data(),
+                stage_flags[idx].data(),
+                1,
+                &submission.buffer,
+                (uint32_t) submission.signal_semaphores.size(),
+                tl_signal_semaphores[idx].data(),
+            };
+            si.setPNext(&tl_submit_infos[idx]);
+            submit_infos.push_back(si);
+        }
+    }
+
+    ctx->q->queue.submit(submit_infos, fence);
+
+    ctx->seqs.clear();
+}
+
+static uint32_t ggml_vk_find_queue_family_index(std::vector<vk::QueueFamilyProperties>& queue_family_props, const vk::QueueFlags& required, const vk::QueueFlags& avoid, int32_t compute_index, uint32_t min_num_queues) {
+    VK_LOG_DEBUG("ggml_vk_find_queue_family_index()");
+    const uint32_t qfsize = queue_family_props.size();
+
+    // Try with avoid preferences first
+    for (uint32_t i = 0; i < qfsize; i++) {
+        if (queue_family_props[i].queueCount >= min_num_queues && (compute_index < 0 || i != (uint32_t) compute_index) && queue_family_props[i].queueFlags & required && !(queue_family_props[i].queueFlags & avoid)) {
+            return i;
+        }
+    }
+
+    // Fall back to only required
+    for (size_t i = 0; i < qfsize; i++) {
+        if (queue_family_props[i].queueCount >= min_num_queues && (compute_index < 0 || i != (uint32_t) compute_index) && queue_family_props[i].queueFlags & required) {
+            return i;
+        }
+    }
+
+    // Fall back to reusing compute queue
+    for (size_t i = 0; i < qfsize; i++) {
+        if (queue_family_props[i].queueCount >= min_num_queues && queue_family_props[i].queueFlags & required) {
+            return i;
+        }
+    }
+
+    // Fall back to ignoring min_num_queries
+    for (size_t i = 0; i < qfsize; i++) {
+        if (queue_family_props[i].queueFlags & required) {
+            return i;
+        }
+    }
+
+    // All commands that are allowed on a queue that supports transfer operations are also allowed on a queue that supports either graphics or compute operations.
+    // Thus, if the capabilities of a queue family include VK_QUEUE_GRAPHICS_BIT or VK_QUEUE_COMPUTE_BIT, then reporting the VK_QUEUE_TRANSFER_BIT capability separately for that queue family is optional.
+    if (compute_index >= 0) {
+        return compute_index;
+    }
+
+    std::cerr << "ggml_vulkan: No suitable queue family index found." << std::endl;
+
+    for(auto &q_family : queue_family_props) {
+        std::cerr << "Queue number: "  + std::to_string(q_family.queueCount) << " flags: " + to_string(q_family.queueFlags) << std::endl;
+    }
+    abort();
+}
+
+static void ggml_vk_create_queue(vk_device& device, vk_queue& q, uint32_t queue_family_index, uint32_t queue_index, vk::PipelineStageFlags&& stage_flags) {
+    VK_LOG_DEBUG("ggml_vk_create_queue()");
+    std::lock_guard<std::mutex> guard(device->mutex);
+
+    q.queue_family_index = queue_family_index;
+
+    vk::CommandPoolCreateInfo command_pool_create_info_compute(vk::CommandPoolCreateFlags(VK_COMMAND_POOL_CREATE_TRANSIENT_BIT), queue_family_index);
+    q.pool = device->device.createCommandPool(command_pool_create_info_compute);
+
+    q.cmd_buffer_idx = 0;
+
+    q.queue = device->device.getQueue(queue_family_index, queue_index);
+
+    q.stage_flags = stage_flags;
+}
+
+static vk_context * ggml_vk_create_context(ggml_backend_vk_context * ctx, vk_queue& q) {
+    VK_LOG_DEBUG("ggml_vk_create_context()");
+    ctx->gc.contexts.emplace_back();
+    vk_context * result = &ctx->gc.contexts[ctx->gc.contexts.size() - 1];
+    memset((void *) result, 0, sizeof(vk_context));
+    result->idx = ctx->gc.contexts.size() - 1;
+    result->q = &q;
+    return result;
+}
+
+static vk_context * ggml_vk_create_temporary_context(vk_queue& q) {
+    VK_LOG_DEBUG("ggml_vk_create_temporary_context()");
+    vk_context * result = new vk_context;
+    memset((void *) result, 0, sizeof(vk_context));
+    result->idx = 0;
+    result->q = &q;
+    return result;
+}
+
+static vk_semaphore * ggml_vk_create_binary_semaphore(ggml_backend_vk_context * ctx) {
+    VK_LOG_DEBUG("ggml_vk_create_timeline_semaphore()");
+    vk::SemaphoreTypeCreateInfo tci{ vk::SemaphoreType::eBinary, 0 };
+    vk::SemaphoreCreateInfo ci{};
+    ci.setPNext(&tci);
+    vk::Semaphore semaphore = ctx->device->device.createSemaphore(ci);
+    ctx->gc.semaphores.push_back({ semaphore, 0 });
+    return &ctx->gc.semaphores[ctx->gc.semaphores.size() - 1];
+}
+
+static vk_semaphore * ggml_vk_create_timeline_semaphore(ggml_backend_vk_context * ctx) {
+    VK_LOG_DEBUG("ggml_vk_create_timeline_semaphore()");
+    if (ctx->semaphore_idx >= ctx->gc.tl_semaphores.size()) {
+        vk::SemaphoreTypeCreateInfo tci{ vk::SemaphoreType::eTimeline, 0 };
+        vk::SemaphoreCreateInfo ci{};
+        ci.setPNext(&tci);
+        vk::Semaphore semaphore = ctx->device->device.createSemaphore(ci);
+        ctx->gc.tl_semaphores.push_back({ semaphore, 0 });
+    }
+    return &ctx->gc.tl_semaphores[ctx->semaphore_idx++];
+}
+
+static vk::Event ggml_vk_create_event(ggml_backend_vk_context * ctx) {
+    if (ctx->event_idx >= ctx->gc.events.size()) {
+        ctx->gc.events.push_back(ctx->device->device.createEvent({}));
+    }
+    return ctx->gc.events[ctx->event_idx++];
+}
+
+static void ggml_vk_queue_cleanup(vk_device& device, vk_queue& q) {
+    VK_LOG_DEBUG("ggml_vk_queue_cleanup()");
+    std::lock_guard<std::mutex> guard(device->mutex);
+
+    // Requires command buffers to be done
+    device->device.resetCommandPool(q.pool);
+    q.cmd_buffer_idx = 0;
+}
+
+static uint32_t find_properties(const vk::PhysicalDeviceMemoryProperties* mem_props, vk::MemoryRequirements* mem_req, vk::MemoryPropertyFlags flags) {
+    for (uint32_t i = 0; i < mem_props->memoryTypeCount; ++i) {
+        vk::MemoryType memory_type = mem_props->memoryTypes[i];
+        if ((mem_req->memoryTypeBits & ((uint64_t)1 << i)) &&
+            (flags & memory_type.propertyFlags) == flags &&
+            mem_props->memoryHeaps[memory_type.heapIndex].size >= mem_req->size) {
+            return static_cast<int32_t>(i);
+        }
+    }
+    return UINT32_MAX;
+}
+
+static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, vk::MemoryPropertyFlags req_flags, vk::MemoryPropertyFlags fallback_flags = vk::MemoryPropertyFlags(0)) {
+    VK_LOG_DEBUG("ggml_vk_create_buffer(" << device->name << ", " << size << ", " << to_string(req_flags) << ", " << to_string(fallback_flags) << ")");
+    std::lock_guard<std::mutex> guard(device->mutex);
+
+    vk_buffer buf = std::make_shared<vk_buffer_struct>();
+
+    if (size == 0) {
+        buf->size = 0;
+        return buf;
+    }
+
+    buf->size = size;
+    vk::BufferCreateInfo buffer_create_info{
+        vk::BufferCreateFlags(),
+        size,
+        vk::BufferUsageFlagBits::eStorageBuffer | vk::BufferUsageFlagBits::eTransferSrc | vk::BufferUsageFlagBits::eTransferDst,
+        vk::SharingMode::eExclusive,
+        0,
+        nullptr,
+    };
+
+    buf->buffer = device->device.createBuffer(buffer_create_info);
+
+    vk::MemoryRequirements mem_req = device->device.getBufferMemoryRequirements(buf->buffer);
+
+    vk::PhysicalDeviceMemoryProperties mem_props = device->physical_device.getMemoryProperties();
+
+    uint32_t memory_type_index = UINT32_MAX;
+
+    memory_type_index = find_properties(&mem_props, &mem_req, req_flags);
+    buf->memory_property_flags = req_flags;
+
+    if (memory_type_index == UINT32_MAX && fallback_flags) {
+        memory_type_index = find_properties(&mem_props, &mem_req, fallback_flags);
+        buf->memory_property_flags = fallback_flags;
+    }
+
+    if (memory_type_index == UINT32_MAX) {
+        device->device.destroyBuffer(buf->buffer);
+        buf->size = 0;
+        throw vk::OutOfDeviceMemoryError("No suitable memory type found");
+    }
+
+    try {
+        buf->device_memory = device->device.allocateMemory({ mem_req.size, memory_type_index });
+    } catch (const vk::SystemError& e) {
+        // Out of Host/Device memory, clean up buffer
+        device->device.destroyBuffer(buf->buffer);
+        buf->size = 0;
+        throw e;
+    }
+    buf->ptr = nullptr;
+
+    if (buf->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) {
+        buf->ptr = device->device.mapMemory(buf->device_memory, 0, VK_WHOLE_SIZE);
+    }
+
+    device->device.bindBufferMemory(buf->buffer, buf->device_memory, 0);
+
+    buf->device = device;
+
+#ifdef GGML_VULKAN_MEMORY_DEBUG
+    device->memory_logger->log_allocation(buf, size);
+#endif
+
+    return buf;
+}
+
+static vk_buffer ggml_vk_create_buffer_check(vk_device& device, size_t size, vk::MemoryPropertyFlags req_flags, vk::MemoryPropertyFlags fallback_flags = vk::MemoryPropertyFlags(0)) {
+    try {
+        return ggml_vk_create_buffer(device, size, req_flags, fallback_flags);
+    } catch (const vk::SystemError& e) {
+        std::cerr << "ggml_vulkan: Memory allocation of size " << size << " failed." << std::endl;
+        std::cerr << "ggml_vulkan: " << e.what() << std::endl;
+        throw e;
+    }
+}
+
+static vk_buffer ggml_vk_create_buffer_device(vk_device& device, size_t size) {
+    vk_buffer buf;
+    try {
+        if (device->uma) {
+            // Fall back to host memory type
+            buf = ggml_vk_create_buffer(device, size, vk::MemoryPropertyFlagBits::eDeviceLocal, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
+        } else {
+            buf = ggml_vk_create_buffer(device, size, vk::MemoryPropertyFlagBits::eDeviceLocal);
+        }
+    } catch (const vk::SystemError& e) {
+        std::cerr << "ggml_vulkan: Device memory allocation of size " << size << " failed." << std::endl;
+        std::cerr << "ggml_vulkan: " << e.what() << std::endl;
+        throw e;
+    }
+
+    return buf;
+}
+
+static void ggml_vk_destroy_buffer(vk_buffer& buf) {
+    if (buf == nullptr) {
+        return;
+    }
+
+#ifdef GGML_VULKAN_MEMORY_DEBUG
+    if (buf->device != nullptr) {
+        buf->device->memory_logger->log_deallocation(buf);
+    }
+#endif
+
+    buf.reset();
+}
+
+static vk_subbuffer ggml_vk_subbuffer(vk_buffer& buf) {
+    return { buf, 0, VK_WHOLE_SIZE };
+}
+
+static void ggml_vk_sync_buffers(vk_context * ctx) {
+    VK_LOG_DEBUG("ggml_vk_sync_buffers()");
+    const std::vector<vk::MemoryBarrier> mem_barriers{ { { vk::AccessFlagBits::eMemoryRead | vk::AccessFlagBits::eMemoryWrite }, { vk::AccessFlagBits::eMemoryRead | vk::AccessFlagBits::eMemoryWrite } } };
+
+    ctx->s->buffer.pipelineBarrier(
+        ctx->q->stage_flags,
+        ctx->q->stage_flags,
+        {},
+        mem_barriers,
+        {},
+        {}
+    );
+}
+
+static void ggml_vk_wait_events(vk_context * ctx, std::vector<vk::Event>&& events) {
+    VK_LOG_DEBUG("ggml_vk_wait_events()");
+    if (events.empty()) {
+        return;
+    }
+
+    ctx->s->buffer.waitEvents(
+        events,
+        ctx->q->stage_flags,
+        ctx->q->stage_flags,
+        {},
+        {},
+        {}
+    );
+}
+
+static bool ggml_vk_build_shader(ggml_type type) {
+    switch(type) {
+    case GGML_TYPE_F16:
+    case GGML_TYPE_Q4_0:
+    case GGML_TYPE_Q4_1:
+    case GGML_TYPE_Q5_0:
+    case GGML_TYPE_Q5_1:
+    case GGML_TYPE_Q8_0:
+    case GGML_TYPE_Q2_K:
+    case GGML_TYPE_Q3_K:
+    case GGML_TYPE_Q4_K:
+    case GGML_TYPE_Q5_K:
+    case GGML_TYPE_Q6_K:
+        return true;
+    default:
+        return false;
+    }
+}
+
+static void ggml_vk_load_shaders(vk_device& device) {
+    VK_LOG_DEBUG("ggml_vk_load_shaders(" << device->name << ")");
+
+    // mulmat
+    std::initializer_list<uint32_t> warptile_l = { 128, 128, 128, 16, device->subgroup_size * 2, 64, 2, 4, 4, device->subgroup_size };
+    std::initializer_list<uint32_t> warptile_m = { 128,  64,  64, 16, device->subgroup_size, 32, 2, 4, 2, device->subgroup_size };
+    std::initializer_list<uint32_t> warptile_s = { device->subgroup_size,  32,  32, 16, 32, 32, 2, 2, 2, device->subgroup_size };
+
+    std::initializer_list<uint32_t> warptile_mmq_l = { 128, 128, 128, 32, device->subgroup_size * 2, 64, 2, 4, 4, device->subgroup_size };
+    std::initializer_list<uint32_t> warptile_mmq_m = { 128,  64,  64, 32, device->subgroup_size, 32, 2, 4, 2, device->subgroup_size };
+    std::initializer_list<uint32_t> warptile_mmq_s = { device->subgroup_size,  32,  32, 32, 32, 32, 2, 2, 2, device->subgroup_size };
+
+    std::array<uint32_t, 3> l_wg_denoms = {128, 128, 1 };
+    std::array<uint32_t, 3> m_wg_denoms = { 64,  64, 1 };
+    std::array<uint32_t, 3> s_wg_denoms = { 32,  32, 1 };
+
+    uint32_t l_align = 128;
+    uint32_t m_align =  64;
+    uint32_t s_align =  32;
+
+    device->pipeline_matmul_f32 = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_matmul_f32_f16 = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_matmul_f16_f32 = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_matmul_f16 = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K] = std::make_shared<vk_matmul_pipeline_struct>();
+
+    device->pipeline_matmul_id_f32 = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_matmul_id_f16_f32 = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_matmul_id_f16 = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K] = std::make_shared<vk_matmul_pipeline_struct>();
+    device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K] = std::make_shared<vk_matmul_pipeline_struct>();
+
+    if (device->fp16) {
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->l, "matmul_f32_l", matmul_f32_f32_len, matmul_f32_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->m, "matmul_f32_m", matmul_f32_f32_len, matmul_f32_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->s, "matmul_f32_s", matmul_f32_f32_len, matmul_f32_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->a_l, "matmul_f32_aligned_l", matmul_f32_f32_aligned_len, matmul_f32_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->a_m, "matmul_f32_aligned_m", matmul_f32_f32_aligned_len, matmul_f32_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->a_s, "matmul_f32_aligned_s", matmul_f32_f32_aligned_len, matmul_f32_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->l, "matmul_f32_f16_l", matmul_f32_f16_len, matmul_f32_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->m, "matmul_f32_f16_m", matmul_f32_f16_len, matmul_f32_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->s, "matmul_f32_f16_s", matmul_f32_f16_len, matmul_f32_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->a_l, "matmul_f32_f16_aligned_l", matmul_f32_f16_aligned_len, matmul_f32_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->a_m, "matmul_f32_f16_aligned_m", matmul_f32_f16_aligned_len, matmul_f32_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->a_s, "matmul_f32_f16_aligned_s", matmul_f32_f16_aligned_len, matmul_f32_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->l, "matmul_f16_l", matmul_f16_len, matmul_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->m, "matmul_f16_m", matmul_f16_len, matmul_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->s, "matmul_f16_s", matmul_f16_len, matmul_f16_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->a_l, "matmul_f16_aligned_l", matmul_f16_aligned_len, matmul_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->a_m, "matmul_f16_aligned_m", matmul_f16_aligned_len, matmul_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->a_s, "matmul_f16_aligned_s", matmul_f16_aligned_len, matmul_f16_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->l, "matmul_f16_f32_l", matmul_f16_f32_len, matmul_f16_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->m, "matmul_f16_f32_m", matmul_f16_f32_len, matmul_f16_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->s, "matmul_f16_f32_s", matmul_f16_f32_len, matmul_f16_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->a_l, "matmul_f16_f32_aligned_l", matmul_f16_f32_aligned_len, matmul_f16_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->a_m, "matmul_f16_f32_aligned_m", matmul_f16_f32_aligned_len, matmul_f16_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->a_s, "matmul_f16_f32_aligned_s", matmul_f16_f32_aligned_len, matmul_f16_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->l, "matmul_q4_0_f32_l", matmul_q4_0_f32_len, matmul_q4_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->m, "matmul_q4_0_f32_m", matmul_q4_0_f32_len, matmul_q4_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->s, "matmul_q4_0_f32_s", matmul_q4_0_f32_len, matmul_q4_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_l, "matmul_q4_0_f32_aligned_l", matmul_q4_0_f32_aligned_len, matmul_q4_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_m, "matmul_q4_0_f32_aligned_m", matmul_q4_0_f32_aligned_len, matmul_q4_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_s, "matmul_q4_0_f32_aligned_s", matmul_q4_0_f32_aligned_len, matmul_q4_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->l, "matmul_q4_1_f32_l", matmul_q4_1_f32_len, matmul_q4_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->m, "matmul_q4_1_f32_m", matmul_q4_1_f32_len, matmul_q4_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->s, "matmul_q4_1_f32_s", matmul_q4_1_f32_len, matmul_q4_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_l, "matmul_q4_1_f32_aligned_l", matmul_q4_1_f32_aligned_len, matmul_q4_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_m, "matmul_q4_1_f32_aligned_m", matmul_q4_1_f32_aligned_len, matmul_q4_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_s, "matmul_q4_1_f32_aligned_s", matmul_q4_1_f32_aligned_len, matmul_q4_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->l, "matmul_q5_0_f32_l", matmul_q5_0_f32_len, matmul_q5_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->m, "matmul_q5_0_f32_m", matmul_q5_0_f32_len, matmul_q5_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->s, "matmul_q5_0_f32_s", matmul_q5_0_f32_len, matmul_q5_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_l, "matmul_q5_0_f32_aligned_l", matmul_q5_0_f32_aligned_len, matmul_q5_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_m, "matmul_q5_0_f32_aligned_m", matmul_q5_0_f32_aligned_len, matmul_q5_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_s, "matmul_q5_0_f32_aligned_s", matmul_q5_0_f32_aligned_len, matmul_q5_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->l, "matmul_q5_1_f32_l", matmul_q5_1_f32_len, matmul_q5_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->m, "matmul_q5_1_f32_m", matmul_q5_1_f32_len, matmul_q5_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->s, "matmul_q5_1_f32_s", matmul_q5_1_f32_len, matmul_q5_1_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_l, "matmul_q5_1_f32_aligned_l", matmul_q5_1_f32_aligned_len, matmul_q5_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_m, "matmul_q5_1_f32_aligned_m", matmul_q5_1_f32_aligned_len, matmul_q5_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_s, "matmul_q5_1_f32_aligned_s", matmul_q5_1_f32_aligned_len, matmul_q5_1_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->l, "matmul_q8_0_f32_l", matmul_q8_0_f32_len, matmul_q8_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->m, "matmul_q8_0_f32_m", matmul_q8_0_f32_len, matmul_q8_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->s, "matmul_q8_0_f32_s", matmul_q8_0_f32_len, matmul_q8_0_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_l, "matmul_q8_0_f32_aligned_l", matmul_q8_0_f32_aligned_len, matmul_q8_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_m, "matmul_q8_0_f32_aligned_m", matmul_q8_0_f32_aligned_len, matmul_q8_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_s, "matmul_q8_0_f32_aligned_s", matmul_q8_0_f32_aligned_len, matmul_q8_0_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->l, "matmul_q2_k_f32_l", matmul_q2_k_f32_len, matmul_q2_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->m, "matmul_q2_k_f32_m", matmul_q2_k_f32_len, matmul_q2_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->s, "matmul_q2_k_f32_s", matmul_q2_k_f32_len, matmul_q2_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_l, "matmul_q2_k_f32_aligned_l", matmul_q2_k_f32_aligned_len, matmul_q2_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_m, "matmul_q2_k_f32_aligned_m", matmul_q2_k_f32_aligned_len, matmul_q2_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_s, "matmul_q2_k_f32_aligned_s", matmul_q2_k_f32_aligned_len, matmul_q2_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->l, "matmul_q3_k_f32_l", matmul_q3_k_f32_len, matmul_q3_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->m, "matmul_q3_k_f32_m", matmul_q3_k_f32_len, matmul_q3_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->s, "matmul_q3_k_f32_s", matmul_q3_k_f32_len, matmul_q3_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_l, "matmul_q3_k_f32_aligned_l", matmul_q3_k_f32_aligned_len, matmul_q3_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_m, "matmul_q3_k_f32_aligned_m", matmul_q3_k_f32_aligned_len, matmul_q3_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_s, "matmul_q3_k_f32_aligned_s", matmul_q3_k_f32_aligned_len, matmul_q3_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->l, "matmul_q4_k_f32_l", matmul_q4_k_f32_len, matmul_q4_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->m, "matmul_q4_k_f32_m", matmul_q4_k_f32_len, matmul_q4_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->s, "matmul_q4_k_f32_s", matmul_q4_k_f32_len, matmul_q4_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_l, "matmul_q4_k_f32_aligned_l", matmul_q4_k_f32_aligned_len, matmul_q4_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_m, "matmul_q4_k_f32_aligned_m", matmul_q4_k_f32_aligned_len, matmul_q4_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_s, "matmul_q4_k_f32_aligned_s", matmul_q4_k_f32_aligned_len, matmul_q4_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->l, "matmul_q5_k_f32_l", matmul_q5_k_f32_len, matmul_q5_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->m, "matmul_q5_k_f32_m", matmul_q5_k_f32_len, matmul_q5_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->s, "matmul_q5_k_f32_s", matmul_q5_k_f32_len, matmul_q5_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_l, "matmul_q5_k_f32_aligned_l", matmul_q5_k_f32_aligned_len, matmul_q5_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_m, "matmul_q5_k_f32_aligned_m", matmul_q5_k_f32_aligned_len, matmul_q5_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_s, "matmul_q5_k_f32_aligned_s", matmul_q5_k_f32_aligned_len, matmul_q5_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->l, "matmul_q6_k_f32_l", matmul_q6_k_f32_len, matmul_q6_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->m, "matmul_q6_k_f32_m", matmul_q6_k_f32_len, matmul_q6_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->s, "matmul_q6_k_f32_s", matmul_q6_k_f32_len, matmul_q6_k_f32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_l, "matmul_q6_k_f32_aligned_l", matmul_q6_k_f32_aligned_len, matmul_q6_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_m, "matmul_q6_k_f32_aligned_m", matmul_q6_k_f32_aligned_len, matmul_q6_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_s, "matmul_q6_k_f32_aligned_s", matmul_q6_k_f32_aligned_len, matmul_q6_k_f32_aligned_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->l, "matmul_id_f32_l", matmul_id_f32_f32_len, matmul_id_f32_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->m, "matmul_id_f32_m", matmul_id_f32_f32_len, matmul_id_f32_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->s, "matmul_id_f32_s", matmul_id_f32_f32_len, matmul_id_f32_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->a_l, "matmul_id_f32_aligned_l", matmul_id_f32_f32_aligned_len, matmul_id_f32_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->a_m, "matmul_id_f32_aligned_m", matmul_id_f32_f32_aligned_len, matmul_id_f32_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->a_s, "matmul_id_f32_aligned_s", matmul_id_f32_f32_aligned_len, matmul_id_f32_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->l, "matmul_id_f16_l", matmul_id_f16_len, matmul_id_f16_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->m, "matmul_id_f16_m", matmul_id_f16_len, matmul_id_f16_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->s, "matmul_id_f16_s", matmul_id_f16_len, matmul_id_f16_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->a_l, "matmul_id_f16_aligned_l", matmul_id_f16_aligned_len, matmul_id_f16_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->a_m, "matmul_id_f16_aligned_m", matmul_id_f16_aligned_len, matmul_id_f16_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->a_s, "matmul_id_f16_aligned_s", matmul_id_f16_aligned_len, matmul_id_f16_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->l, "matmul_id_f16_f32_l", matmul_id_f16_f32_len, matmul_id_f16_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->m, "matmul_id_f16_f32_m", matmul_id_f16_f32_len, matmul_id_f16_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->s, "matmul_id_f16_f32_s", matmul_id_f16_f32_len, matmul_id_f16_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->a_l, "matmul_id_f16_f32_aligned_l", matmul_id_f16_f32_aligned_len, matmul_id_f16_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->a_m, "matmul_id_f16_f32_aligned_m", matmul_id_f16_f32_aligned_len, matmul_id_f16_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->a_s, "matmul_id_f16_f32_aligned_s", matmul_id_f16_f32_aligned_len, matmul_id_f16_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->l, "matmul_id_q4_0_f32_l", matmul_id_q4_0_f32_len, matmul_id_q4_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->m, "matmul_id_q4_0_f32_m", matmul_id_q4_0_f32_len, matmul_id_q4_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->s, "matmul_id_q4_0_f32_s", matmul_id_q4_0_f32_len, matmul_id_q4_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_l, "matmul_id_q4_0_f32_aligned_l", matmul_id_q4_0_f32_aligned_len, matmul_id_q4_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_m, "matmul_id_q4_0_f32_aligned_m", matmul_id_q4_0_f32_aligned_len, matmul_id_q4_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_s, "matmul_id_q4_0_f32_aligned_s", matmul_id_q4_0_f32_aligned_len, matmul_id_q4_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->l, "matmul_id_q4_1_f32_l", matmul_id_q4_1_f32_len, matmul_id_q4_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->m, "matmul_id_q4_1_f32_m", matmul_id_q4_1_f32_len, matmul_id_q4_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->s, "matmul_id_q4_1_f32_s", matmul_id_q4_1_f32_len, matmul_id_q4_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_l, "matmul_id_q4_1_f32_aligned_l", matmul_id_q4_1_f32_aligned_len, matmul_id_q4_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_m, "matmul_id_q4_1_f32_aligned_m", matmul_id_q4_1_f32_aligned_len, matmul_id_q4_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_s, "matmul_id_q4_1_f32_aligned_s", matmul_id_q4_1_f32_aligned_len, matmul_id_q4_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->l, "matmul_id_q5_0_f32_l", matmul_id_q5_0_f32_len, matmul_id_q5_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->m, "matmul_id_q5_0_f32_m", matmul_id_q5_0_f32_len, matmul_id_q5_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->s, "matmul_id_q5_0_f32_s", matmul_id_q5_0_f32_len, matmul_id_q5_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_l, "matmul_id_q5_0_f32_aligned_l", matmul_id_q5_0_f32_aligned_len, matmul_id_q5_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_m, "matmul_id_q5_0_f32_aligned_m", matmul_id_q5_0_f32_aligned_len, matmul_id_q5_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_s, "matmul_id_q5_0_f32_aligned_s", matmul_id_q5_0_f32_aligned_len, matmul_id_q5_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->l, "matmul_id_q5_1_f32_l", matmul_id_q5_1_f32_len, matmul_id_q5_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->m, "matmul_id_q5_1_f32_m", matmul_id_q5_1_f32_len, matmul_id_q5_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->s, "matmul_id_q5_1_f32_s", matmul_id_q5_1_f32_len, matmul_id_q5_1_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_l, "matmul_id_q5_1_f32_aligned_l", matmul_id_q5_1_f32_aligned_len, matmul_id_q5_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_m, "matmul_id_q5_1_f32_aligned_m", matmul_id_q5_1_f32_aligned_len, matmul_id_q5_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_s, "matmul_id_q5_1_f32_aligned_s", matmul_id_q5_1_f32_aligned_len, matmul_id_q5_1_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->l, "matmul_id_q8_0_f32_l", matmul_id_q8_0_f32_len, matmul_id_q8_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->m, "matmul_id_q8_0_f32_m", matmul_id_q8_0_f32_len, matmul_id_q8_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->s, "matmul_id_q8_0_f32_s", matmul_id_q8_0_f32_len, matmul_id_q8_0_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_l, "matmul_id_q8_0_f32_aligned_l", matmul_id_q8_0_f32_aligned_len, matmul_id_q8_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_m, "matmul_id_q8_0_f32_aligned_m", matmul_id_q8_0_f32_aligned_len, matmul_id_q8_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_s, "matmul_id_q8_0_f32_aligned_s", matmul_id_q8_0_f32_aligned_len, matmul_id_q8_0_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->l, "matmul_id_q2_k_f32_l", matmul_id_q2_k_f32_len, matmul_id_q2_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->m, "matmul_id_q2_k_f32_m", matmul_id_q2_k_f32_len, matmul_id_q2_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->s, "matmul_id_q2_k_f32_s", matmul_id_q2_k_f32_len, matmul_id_q2_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_l, "matmul_id_q2_k_f32_aligned_l", matmul_id_q2_k_f32_aligned_len, matmul_id_q2_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_m, "matmul_id_q2_k_f32_aligned_m", matmul_id_q2_k_f32_aligned_len, matmul_id_q2_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_s, "matmul_id_q2_k_f32_aligned_s", matmul_id_q2_k_f32_aligned_len, matmul_id_q2_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->l, "matmul_id_q3_k_f32_l", matmul_id_q3_k_f32_len, matmul_id_q3_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->m, "matmul_id_q3_k_f32_m", matmul_id_q3_k_f32_len, matmul_id_q3_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->s, "matmul_id_q3_k_f32_s", matmul_id_q3_k_f32_len, matmul_id_q3_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_l, "matmul_id_q3_k_f32_aligned_l", matmul_id_q3_k_f32_aligned_len, matmul_id_q3_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_m, "matmul_id_q3_k_f32_aligned_m", matmul_id_q3_k_f32_aligned_len, matmul_id_q3_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_s, "matmul_id_q3_k_f32_aligned_s", matmul_id_q3_k_f32_aligned_len, matmul_id_q3_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->l, "matmul_id_q4_k_f32_l", matmul_id_q4_k_f32_len, matmul_id_q4_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->m, "matmul_id_q4_k_f32_m", matmul_id_q4_k_f32_len, matmul_id_q4_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->s, "matmul_id_q4_k_f32_s", matmul_id_q4_k_f32_len, matmul_id_q4_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_l, "matmul_id_q4_k_f32_aligned_l", matmul_id_q4_k_f32_aligned_len, matmul_id_q4_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_m, "matmul_id_q4_k_f32_aligned_m", matmul_id_q4_k_f32_aligned_len, matmul_id_q4_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_s, "matmul_id_q4_k_f32_aligned_s", matmul_id_q4_k_f32_aligned_len, matmul_id_q4_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->l, "matmul_id_q5_k_f32_l", matmul_id_q5_k_f32_len, matmul_id_q5_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->m, "matmul_id_q5_k_f32_m", matmul_id_q5_k_f32_len, matmul_id_q5_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->s, "matmul_id_q5_k_f32_s", matmul_id_q5_k_f32_len, matmul_id_q5_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_l, "matmul_id_q5_k_f32_aligned_l", matmul_id_q5_k_f32_aligned_len, matmul_id_q5_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_m, "matmul_id_q5_k_f32_aligned_m", matmul_id_q5_k_f32_aligned_len, matmul_id_q5_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_s, "matmul_id_q5_k_f32_aligned_s", matmul_id_q5_k_f32_aligned_len, matmul_id_q5_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->l, "matmul_id_q6_k_f32_l", matmul_id_q6_k_f32_len, matmul_id_q6_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->m, "matmul_id_q6_k_f32_m", matmul_id_q6_k_f32_len, matmul_id_q6_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->s, "matmul_id_q6_k_f32_s", matmul_id_q6_k_f32_len, matmul_id_q6_k_f32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_l, "matmul_id_q6_k_f32_aligned_l", matmul_id_q6_k_f32_aligned_len, matmul_id_q6_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_m, "matmul_id_q6_k_f32_aligned_m", matmul_id_q6_k_f32_aligned_len, matmul_id_q6_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_s, "matmul_id_q6_k_f32_aligned_s", matmul_id_q6_k_f32_aligned_len, matmul_id_q6_k_f32_aligned_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+    } else {
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->l, "matmul_f32_l", matmul_f32_f32_fp32_len, matmul_f32_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->m, "matmul_f32_m", matmul_f32_f32_fp32_len, matmul_f32_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->s, "matmul_f32_s", matmul_f32_f32_fp32_len, matmul_f32_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->a_l, "matmul_f32_aligned_l", matmul_f32_f32_aligned_fp32_len, matmul_f32_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->a_m, "matmul_f32_aligned_m", matmul_f32_f32_aligned_fp32_len, matmul_f32_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32->a_s, "matmul_f32_aligned_s", matmul_f32_f32_aligned_fp32_len, matmul_f32_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->l, "matmul_f32_f16_l", matmul_f32_f16_fp32_len, matmul_f32_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->m, "matmul_f32_f16_m", matmul_f32_f16_fp32_len, matmul_f32_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->s, "matmul_f32_f16_s", matmul_f32_f16_fp32_len, matmul_f32_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->a_l, "matmul_f32_f16_aligned_l", matmul_f32_f16_aligned_fp32_len, matmul_f32_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->a_m, "matmul_f32_f16_aligned_m", matmul_f32_f16_aligned_fp32_len, matmul_f32_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f32_f16->a_s, "matmul_f32_f16_aligned_s", matmul_f32_f16_aligned_fp32_len, matmul_f32_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->l, "matmul_f16_l", matmul_f16_fp32_len, matmul_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->m, "matmul_f16_m", matmul_f16_fp32_len, matmul_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->s, "matmul_f16_s", matmul_f16_fp32_len, matmul_f16_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->a_l, "matmul_f16_aligned_l", matmul_f16_aligned_fp32_len, matmul_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->a_m, "matmul_f16_aligned_m", matmul_f16_aligned_fp32_len, matmul_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16->a_s, "matmul_f16_aligned_s", matmul_f16_aligned_fp32_len, matmul_f16_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->l, "matmul_f16_f32_l", matmul_f16_f32_fp32_len, matmul_f16_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->m, "matmul_f16_f32_m", matmul_f16_f32_fp32_len, matmul_f16_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->s, "matmul_f16_f32_s", matmul_f16_f32_fp32_len, matmul_f16_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->a_l, "matmul_f16_f32_aligned_l", matmul_f16_f32_aligned_fp32_len, matmul_f16_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->a_m, "matmul_f16_f32_aligned_m", matmul_f16_f32_aligned_fp32_len, matmul_f16_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_f16_f32->a_s, "matmul_f16_f32_aligned_s", matmul_f16_f32_aligned_fp32_len, matmul_f16_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->l, "matmul_q4_0_f32_l", matmul_q4_0_f32_fp32_len, matmul_q4_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->m, "matmul_q4_0_f32_m", matmul_q4_0_f32_fp32_len, matmul_q4_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->s, "matmul_q4_0_f32_s", matmul_q4_0_f32_fp32_len, matmul_q4_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_l, "matmul_q4_0_f32_aligned_l", matmul_q4_0_f32_aligned_fp32_len, matmul_q4_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_m, "matmul_q4_0_f32_aligned_m", matmul_q4_0_f32_aligned_fp32_len, matmul_q4_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_0]->a_s, "matmul_q4_0_f32_aligned_s", matmul_q4_0_f32_aligned_fp32_len, matmul_q4_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->l, "matmul_q4_1_f32_l", matmul_q4_1_f32_fp32_len, matmul_q4_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->m, "matmul_q4_1_f32_m", matmul_q4_1_f32_fp32_len, matmul_q4_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->s, "matmul_q4_1_f32_s", matmul_q4_1_f32_fp32_len, matmul_q4_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_l, "matmul_q4_1_f32_aligned_l", matmul_q4_1_f32_aligned_fp32_len, matmul_q4_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_m, "matmul_q4_1_f32_aligned_m", matmul_q4_1_f32_aligned_fp32_len, matmul_q4_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_1]->a_s, "matmul_q4_1_f32_aligned_s", matmul_q4_1_f32_aligned_fp32_len, matmul_q4_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->l, "matmul_q5_0_f32_l", matmul_q5_0_f32_fp32_len, matmul_q5_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->m, "matmul_q5_0_f32_m", matmul_q5_0_f32_fp32_len, matmul_q5_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->s, "matmul_q5_0_f32_s", matmul_q5_0_f32_fp32_len, matmul_q5_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_l, "matmul_q5_0_f32_aligned_l", matmul_q5_0_f32_aligned_fp32_len, matmul_q5_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_m, "matmul_q5_0_f32_aligned_m", matmul_q5_0_f32_aligned_fp32_len, matmul_q5_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_0]->a_s, "matmul_q5_0_f32_aligned_s", matmul_q5_0_f32_aligned_fp32_len, matmul_q5_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->l, "matmul_q5_1_f32_l", matmul_q5_1_f32_fp32_len, matmul_q5_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->m, "matmul_q5_1_f32_m", matmul_q5_1_f32_fp32_len, matmul_q5_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->s, "matmul_q5_1_f32_s", matmul_q5_1_f32_fp32_len, matmul_q5_1_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_l, "matmul_q5_1_f32_aligned_l", matmul_q5_1_f32_aligned_fp32_len, matmul_q5_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_m, "matmul_q5_1_f32_aligned_m", matmul_q5_1_f32_aligned_fp32_len, matmul_q5_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_1]->a_s, "matmul_q5_1_f32_aligned_s", matmul_q5_1_f32_aligned_fp32_len, matmul_q5_1_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->l, "matmul_q8_0_f32_l", matmul_q8_0_f32_fp32_len, matmul_q8_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->m, "matmul_q8_0_f32_m", matmul_q8_0_f32_fp32_len, matmul_q8_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->s, "matmul_q8_0_f32_s", matmul_q8_0_f32_fp32_len, matmul_q8_0_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_l, "matmul_q8_0_f32_aligned_l", matmul_q8_0_f32_aligned_fp32_len, matmul_q8_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_m, "matmul_q8_0_f32_aligned_m", matmul_q8_0_f32_aligned_fp32_len, matmul_q8_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q8_0]->a_s, "matmul_q8_0_f32_aligned_s", matmul_q8_0_f32_aligned_fp32_len, matmul_q8_0_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->l, "matmul_q2_k_f32_l", matmul_q2_k_f32_fp32_len, matmul_q2_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->m, "matmul_q2_k_f32_m", matmul_q2_k_f32_fp32_len, matmul_q2_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->s, "matmul_q2_k_f32_s", matmul_q2_k_f32_fp32_len, matmul_q2_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_l, "matmul_q2_k_f32_aligned_l", matmul_q2_k_f32_aligned_fp32_len, matmul_q2_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_m, "matmul_q2_k_f32_aligned_m", matmul_q2_k_f32_aligned_fp32_len, matmul_q2_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q2_K]->a_s, "matmul_q2_k_f32_aligned_s", matmul_q2_k_f32_aligned_fp32_len, matmul_q2_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->l, "matmul_q3_k_f32_l", matmul_q3_k_f32_fp32_len, matmul_q3_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->m, "matmul_q3_k_f32_m", matmul_q3_k_f32_fp32_len, matmul_q3_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->s, "matmul_q3_k_f32_s", matmul_q3_k_f32_fp32_len, matmul_q3_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_l, "matmul_q3_k_f32_aligned_l", matmul_q3_k_f32_aligned_fp32_len, matmul_q3_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_m, "matmul_q3_k_f32_aligned_m", matmul_q3_k_f32_aligned_fp32_len, matmul_q3_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q3_K]->a_s, "matmul_q3_k_f32_aligned_s", matmul_q3_k_f32_aligned_fp32_len, matmul_q3_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->l, "matmul_q4_k_f32_l", matmul_q4_k_f32_fp32_len, matmul_q4_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->m, "matmul_q4_k_f32_m", matmul_q4_k_f32_fp32_len, matmul_q4_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->s, "matmul_q4_k_f32_s", matmul_q4_k_f32_fp32_len, matmul_q4_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_l, "matmul_q4_k_f32_aligned_l", matmul_q4_k_f32_aligned_fp32_len, matmul_q4_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_m, "matmul_q4_k_f32_aligned_m", matmul_q4_k_f32_aligned_fp32_len, matmul_q4_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q4_K]->a_s, "matmul_q4_k_f32_aligned_s", matmul_q4_k_f32_aligned_fp32_len, matmul_q4_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->l, "matmul_q5_k_f32_l", matmul_q5_k_f32_fp32_len, matmul_q5_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->m, "matmul_q5_k_f32_m", matmul_q5_k_f32_fp32_len, matmul_q5_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->s, "matmul_q5_k_f32_s", matmul_q5_k_f32_fp32_len, matmul_q5_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_l, "matmul_q5_k_f32_aligned_l", matmul_q5_k_f32_aligned_fp32_len, matmul_q5_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_m, "matmul_q5_k_f32_aligned_m", matmul_q5_k_f32_aligned_fp32_len, matmul_q5_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q5_K]->a_s, "matmul_q5_k_f32_aligned_s", matmul_q5_k_f32_aligned_fp32_len, matmul_q5_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->l, "matmul_q6_k_f32_l", matmul_q6_k_f32_fp32_len, matmul_q6_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->m, "matmul_q6_k_f32_m", matmul_q6_k_f32_fp32_len, matmul_q6_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->s, "matmul_q6_k_f32_s", matmul_q6_k_f32_fp32_len, matmul_q6_k_f32_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_l, "matmul_q6_k_f32_aligned_l", matmul_q6_k_f32_aligned_fp32_len, matmul_q6_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_m, "matmul_q6_k_f32_aligned_m", matmul_q6_k_f32_aligned_fp32_len, matmul_q6_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat[GGML_TYPE_Q6_K]->a_s, "matmul_q6_k_f32_aligned_s", matmul_q6_k_f32_aligned_fp32_len, matmul_q6_k_f32_aligned_fp32_data, "main", 3, sizeof(vk_mat_mat_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->l, "matmul_id_f32_l", matmul_id_f32_f32_fp32_len, matmul_id_f32_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->m, "matmul_id_f32_m", matmul_id_f32_f32_fp32_len, matmul_id_f32_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->s, "matmul_id_f32_s", matmul_id_f32_f32_fp32_len, matmul_id_f32_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->a_l, "matmul_id_f32_aligned_l", matmul_id_f32_f32_aligned_fp32_len, matmul_id_f32_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->a_m, "matmul_id_f32_aligned_m", matmul_id_f32_f32_aligned_fp32_len, matmul_id_f32_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f32->a_s, "matmul_id_f32_aligned_s", matmul_id_f32_f32_aligned_fp32_len, matmul_id_f32_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->l, "matmul_id_f16_l", matmul_id_f16_fp32_len, matmul_id_f16_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->m, "matmul_id_f16_m", matmul_id_f16_fp32_len, matmul_id_f16_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->s, "matmul_id_f16_s", matmul_id_f16_fp32_len, matmul_id_f16_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->a_l, "matmul_id_f16_aligned_l", matmul_id_f16_aligned_fp32_len, matmul_id_f16_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->a_m, "matmul_id_f16_aligned_m", matmul_id_f16_aligned_fp32_len, matmul_id_f16_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16->a_s, "matmul_id_f16_aligned_s", matmul_id_f16_aligned_fp32_len, matmul_id_f16_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->l, "matmul_id_f16_f32_l", matmul_id_f16_f32_fp32_len, matmul_id_f16_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->m, "matmul_id_f16_f32_m", matmul_id_f16_f32_fp32_len, matmul_id_f16_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->s, "matmul_id_f16_f32_s", matmul_id_f16_f32_fp32_len, matmul_id_f16_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, 1);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->a_l, "matmul_id_f16_f32_aligned_l", matmul_id_f16_f32_aligned_fp32_len, matmul_id_f16_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->a_m, "matmul_id_f16_f32_aligned_m", matmul_id_f16_f32_aligned_fp32_len, matmul_id_f16_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_matmul_id_f16_f32->a_s, "matmul_id_f16_f32_aligned_s", matmul_id_f16_f32_aligned_fp32_len, matmul_id_f16_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->l, "matmul_id_q4_0_f32_l", matmul_id_q4_0_f32_fp32_len, matmul_id_q4_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->m, "matmul_id_q4_0_f32_m", matmul_id_q4_0_f32_fp32_len, matmul_id_q4_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->s, "matmul_id_q4_0_f32_s", matmul_id_q4_0_f32_fp32_len, matmul_id_q4_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_l, "matmul_id_q4_0_f32_aligned_l", matmul_id_q4_0_f32_aligned_fp32_len, matmul_id_q4_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_m, "matmul_id_q4_0_f32_aligned_m", matmul_id_q4_0_f32_aligned_fp32_len, matmul_id_q4_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_0]->a_s, "matmul_id_q4_0_f32_aligned_s", matmul_id_q4_0_f32_aligned_fp32_len, matmul_id_q4_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->l, "matmul_id_q4_1_f32_l", matmul_id_q4_1_f32_fp32_len, matmul_id_q4_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->m, "matmul_id_q4_1_f32_m", matmul_id_q4_1_f32_fp32_len, matmul_id_q4_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->s, "matmul_id_q4_1_f32_s", matmul_id_q4_1_f32_fp32_len, matmul_id_q4_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_l, "matmul_id_q4_1_f32_aligned_l", matmul_id_q4_1_f32_aligned_fp32_len, matmul_id_q4_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_m, "matmul_id_q4_1_f32_aligned_m", matmul_id_q4_1_f32_aligned_fp32_len, matmul_id_q4_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_1]->a_s, "matmul_id_q4_1_f32_aligned_s", matmul_id_q4_1_f32_aligned_fp32_len, matmul_id_q4_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->l, "matmul_id_q5_0_f32_l", matmul_id_q5_0_f32_fp32_len, matmul_id_q5_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->m, "matmul_id_q5_0_f32_m", matmul_id_q5_0_f32_fp32_len, matmul_id_q5_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->s, "matmul_id_q5_0_f32_s", matmul_id_q5_0_f32_fp32_len, matmul_id_q5_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_l, "matmul_id_q5_0_f32_aligned_l", matmul_id_q5_0_f32_aligned_fp32_len, matmul_id_q5_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_m, "matmul_id_q5_0_f32_aligned_m", matmul_id_q5_0_f32_aligned_fp32_len, matmul_id_q5_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_0]->a_s, "matmul_id_q5_0_f32_aligned_s", matmul_id_q5_0_f32_aligned_fp32_len, matmul_id_q5_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->l, "matmul_id_q5_1_f32_l", matmul_id_q5_1_f32_fp32_len, matmul_id_q5_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->m, "matmul_id_q5_1_f32_m", matmul_id_q5_1_f32_fp32_len, matmul_id_q5_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->s, "matmul_id_q5_1_f32_s", matmul_id_q5_1_f32_fp32_len, matmul_id_q5_1_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_l, "matmul_id_q5_1_f32_aligned_l", matmul_id_q5_1_f32_aligned_fp32_len, matmul_id_q5_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_m, "matmul_id_q5_1_f32_aligned_m", matmul_id_q5_1_f32_aligned_fp32_len, matmul_id_q5_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_1]->a_s, "matmul_id_q5_1_f32_aligned_s", matmul_id_q5_1_f32_aligned_fp32_len, matmul_id_q5_1_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->l, "matmul_id_q8_0_f32_l", matmul_id_q8_0_f32_fp32_len, matmul_id_q8_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->m, "matmul_id_q8_0_f32_m", matmul_id_q8_0_f32_fp32_len, matmul_id_q8_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->s, "matmul_id_q8_0_f32_s", matmul_id_q8_0_f32_fp32_len, matmul_id_q8_0_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_l, "matmul_id_q8_0_f32_aligned_l", matmul_id_q8_0_f32_aligned_fp32_len, matmul_id_q8_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_m, "matmul_id_q8_0_f32_aligned_m", matmul_id_q8_0_f32_aligned_fp32_len, matmul_id_q8_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q8_0]->a_s, "matmul_id_q8_0_f32_aligned_s", matmul_id_q8_0_f32_aligned_fp32_len, matmul_id_q8_0_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->l, "matmul_id_q2_k_f32_l", matmul_id_q2_k_f32_fp32_len, matmul_id_q2_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->m, "matmul_id_q2_k_f32_m", matmul_id_q2_k_f32_fp32_len, matmul_id_q2_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->s, "matmul_id_q2_k_f32_s", matmul_id_q2_k_f32_fp32_len, matmul_id_q2_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_l, "matmul_id_q2_k_f32_aligned_l", matmul_id_q2_k_f32_aligned_fp32_len, matmul_id_q2_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_m, "matmul_id_q2_k_f32_aligned_m", matmul_id_q2_k_f32_aligned_fp32_len, matmul_id_q2_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q2_K]->a_s, "matmul_id_q2_k_f32_aligned_s", matmul_id_q2_k_f32_aligned_fp32_len, matmul_id_q2_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->l, "matmul_id_q3_k_f32_l", matmul_id_q3_k_f32_fp32_len, matmul_id_q3_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->m, "matmul_id_q3_k_f32_m", matmul_id_q3_k_f32_fp32_len, matmul_id_q3_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->s, "matmul_id_q3_k_f32_s", matmul_id_q3_k_f32_fp32_len, matmul_id_q3_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_l, "matmul_id_q3_k_f32_aligned_l", matmul_id_q3_k_f32_aligned_fp32_len, matmul_id_q3_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_m, "matmul_id_q3_k_f32_aligned_m", matmul_id_q3_k_f32_aligned_fp32_len, matmul_id_q3_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q3_K]->a_s, "matmul_id_q3_k_f32_aligned_s", matmul_id_q3_k_f32_aligned_fp32_len, matmul_id_q3_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->l, "matmul_id_q4_k_f32_l", matmul_id_q4_k_f32_fp32_len, matmul_id_q4_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->m, "matmul_id_q4_k_f32_m", matmul_id_q4_k_f32_fp32_len, matmul_id_q4_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->s, "matmul_id_q4_k_f32_s", matmul_id_q4_k_f32_fp32_len, matmul_id_q4_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_l, "matmul_id_q4_k_f32_aligned_l", matmul_id_q4_k_f32_aligned_fp32_len, matmul_id_q4_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_m, "matmul_id_q4_k_f32_aligned_m", matmul_id_q4_k_f32_aligned_fp32_len, matmul_id_q4_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q4_K]->a_s, "matmul_id_q4_k_f32_aligned_s", matmul_id_q4_k_f32_aligned_fp32_len, matmul_id_q4_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->l, "matmul_id_q5_k_f32_l", matmul_id_q5_k_f32_fp32_len, matmul_id_q5_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->m, "matmul_id_q5_k_f32_m", matmul_id_q5_k_f32_fp32_len, matmul_id_q5_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->s, "matmul_id_q5_k_f32_s", matmul_id_q5_k_f32_fp32_len, matmul_id_q5_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_l, "matmul_id_q5_k_f32_aligned_l", matmul_id_q5_k_f32_aligned_fp32_len, matmul_id_q5_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_m, "matmul_id_q5_k_f32_aligned_m", matmul_id_q5_k_f32_aligned_fp32_len, matmul_id_q5_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q5_K]->a_s, "matmul_id_q5_k_f32_aligned_s", matmul_id_q5_k_f32_aligned_fp32_len, matmul_id_q5_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->l, "matmul_id_q6_k_f32_l", matmul_id_q6_k_f32_fp32_len, matmul_id_q6_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->m, "matmul_id_q6_k_f32_m", matmul_id_q6_k_f32_fp32_len, matmul_id_q6_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->s, "matmul_id_q6_k_f32_s", matmul_id_q6_k_f32_fp32_len, matmul_id_q6_k_f32_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_l, "matmul_id_q6_k_f32_aligned_l", matmul_id_q6_k_f32_aligned_fp32_len, matmul_id_q6_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), l_wg_denoms, warptile_mmq_l, l_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_m, "matmul_id_q6_k_f32_aligned_m", matmul_id_q6_k_f32_aligned_fp32_len, matmul_id_q6_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), m_wg_denoms, warptile_mmq_m, m_align);
+        ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_mat_id[GGML_TYPE_Q6_K]->a_s, "matmul_id_q6_k_f32_aligned_s", matmul_id_q6_k_f32_aligned_fp32_len, matmul_id_q6_k_f32_aligned_fp32_data, "main", 4, sizeof(vk_mat_mat_id_push_constants), s_wg_denoms, warptile_mmq_s, s_align);
+    }
+
+    // mul mat vec
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_F32 ], "mul_mat_vec_f32_f32_f32",  mul_mat_vec_f32_f32_f32_len,  mul_mat_vec_f32_f32_f32_data,  "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_F16 ], "mul_mat_vec_f16_f32_f32",  mul_mat_vec_f16_f32_f32_len,  mul_mat_vec_f16_f32_f32_data,  "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q4_0], "mul_mat_vec_q4_0_f32_f32", mul_mat_vec_q4_0_f32_f32_len, mul_mat_vec_q4_0_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q4_1], "mul_mat_vec_q4_1_f32_f32", mul_mat_vec_q4_1_f32_f32_len, mul_mat_vec_q4_1_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q5_0], "mul_mat_vec_q5_0_f32_f32", mul_mat_vec_q5_0_f32_f32_len, mul_mat_vec_q5_0_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q5_1], "mul_mat_vec_q5_1_f32_f32", mul_mat_vec_q5_1_f32_f32_len, mul_mat_vec_q5_1_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q8_0], "mul_mat_vec_q8_0_f32_f32", mul_mat_vec_q8_0_f32_f32_len, mul_mat_vec_q8_0_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q2_K], "mul_mat_vec_q2_k_f32_f32", mul_mat_vec_q2_k_f32_f32_len, mul_mat_vec_q2_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q3_K], "mul_mat_vec_q3_k_f32_f32", mul_mat_vec_q3_k_f32_f32_len, mul_mat_vec_q3_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q4_K], "mul_mat_vec_q4_k_f32_f32", mul_mat_vec_q4_k_f32_f32_len, mul_mat_vec_q4_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q5_K], "mul_mat_vec_q5_k_f32_f32", mul_mat_vec_q5_k_f32_f32_len, mul_mat_vec_q5_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f32_f32[GGML_TYPE_Q6_K], "mul_mat_vec_q6_k_f32_f32", mul_mat_vec_q6_k_f32_f32_len, mul_mat_vec_q6_k_f32_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_F32 ], "mul_mat_vec_f32_f16_f32",  mul_mat_vec_f32_f16_f32_len,  mul_mat_vec_f32_f16_f32_data,  "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_F16 ], "mul_mat_vec_f16_f16_f32",  mul_mat_vec_f16_f16_f32_len,  mul_mat_vec_f16_f16_f32_data,  "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q4_0], "mul_mat_vec_q4_0_f16_f32", mul_mat_vec_q4_0_f16_f32_len, mul_mat_vec_q4_0_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q4_1], "mul_mat_vec_q4_1_f16_f32", mul_mat_vec_q4_1_f16_f32_len, mul_mat_vec_q4_1_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q5_0], "mul_mat_vec_q5_0_f16_f32", mul_mat_vec_q5_0_f16_f32_len, mul_mat_vec_q5_0_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q5_1], "mul_mat_vec_q5_1_f16_f32", mul_mat_vec_q5_1_f16_f32_len, mul_mat_vec_q5_1_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q8_0], "mul_mat_vec_q8_0_f16_f32", mul_mat_vec_q8_0_f16_f32_len, mul_mat_vec_q8_0_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q2_K], "mul_mat_vec_q2_k_f16_f32", mul_mat_vec_q2_k_f16_f32_len, mul_mat_vec_q2_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q3_K], "mul_mat_vec_q3_k_f16_f32", mul_mat_vec_q3_k_f16_f32_len, mul_mat_vec_q3_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q4_K], "mul_mat_vec_q4_k_f16_f32", mul_mat_vec_q4_k_f16_f32_len, mul_mat_vec_q4_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q5_K], "mul_mat_vec_q5_k_f16_f32", mul_mat_vec_q5_k_f16_f32_len, mul_mat_vec_q5_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_f16_f32[GGML_TYPE_Q6_K], "mul_mat_vec_q6_k_f16_f32", mul_mat_vec_q6_k_f16_f32_len, mul_mat_vec_q6_k_f16_f32_data, "main", 3, sizeof(vk_mat_vec_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_F32 ], "mul_mat_vec_id_f32_f32",  mul_mat_vec_id_f32_f32_len,  mul_mat_vec_id_f32_f32_data,  "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_F16 ], "mul_mat_vec_id_f16_f32",  mul_mat_vec_id_f16_f32_len,  mul_mat_vec_id_f16_f32_data,  "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q4_0], "mul_mat_vec_id_q4_0_f32", mul_mat_vec_id_q4_0_f32_len, mul_mat_vec_id_q4_0_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q4_1], "mul_mat_vec_id_q4_1_f32", mul_mat_vec_id_q4_1_f32_len, mul_mat_vec_id_q4_1_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q5_0], "mul_mat_vec_id_q5_0_f32", mul_mat_vec_id_q5_0_f32_len, mul_mat_vec_id_q5_0_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q5_1], "mul_mat_vec_id_q5_1_f32", mul_mat_vec_id_q5_1_f32_len, mul_mat_vec_id_q5_1_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q8_0], "mul_mat_vec_id_q8_0_f32", mul_mat_vec_id_q8_0_f32_len, mul_mat_vec_id_q8_0_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q2_K], "mul_mat_vec_id_q2_k_f32", mul_mat_vec_id_q2_k_f32_len, mul_mat_vec_id_q2_k_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q3_K], "mul_mat_vec_id_q3_k_f32", mul_mat_vec_id_q3_k_f32_len, mul_mat_vec_id_q3_k_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q4_K], "mul_mat_vec_id_q4_k_f32", mul_mat_vec_id_q4_k_f32_len, mul_mat_vec_id_q4_k_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q5_K], "mul_mat_vec_id_q5_k_f32", mul_mat_vec_id_q5_k_f32_len, mul_mat_vec_id_q5_k_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant_mul_mat_vec_id_f32[GGML_TYPE_Q6_K], "mul_mat_vec_id_q6_k_f32", mul_mat_vec_id_q6_k_f32_len, mul_mat_vec_id_q6_k_f32_data, "main", 4, sizeof(vk_mat_vec_id_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+
+    // dequant shaders
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_F32 ], "f32_to_f16",   dequant_f32_len,  dequant_f32_data,  "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_Q4_0], "dequant_q4_0", dequant_q4_0_len, dequant_q4_0_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_Q4_1], "dequant_q4_1", dequant_q4_1_len, dequant_q4_1_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_Q5_0], "dequant_q5_0", dequant_q5_0_len, dequant_q5_0_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_Q5_1], "dequant_q5_1", dequant_q5_1_len, dequant_q5_1_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_Q8_0], "dequant_q8_0", dequant_q8_0_len, dequant_q8_0_data, "main", 2, 5 * sizeof(uint32_t), {256 * 16, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_Q2_K], "dequant_q2_k", dequant_q2_k_len, dequant_q2_k_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_Q3_K], "dequant_q3_k", dequant_q3_k_len, dequant_q3_k_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_Q4_K], "dequant_q4_k", dequant_q4_k_len, dequant_q4_k_data, "main", 2, 5 * sizeof(uint32_t), {256 * 32, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_Q5_K], "dequant_q5_k", dequant_q5_k_len, dequant_q5_k_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_dequant[GGML_TYPE_Q6_K], "dequant_q6_k", dequant_q6_k_len, dequant_q6_k_data, "main", 2, 5 * sizeof(uint32_t), {256 * 64, 1, 1}, {}, 1);
+
+    // get_rows
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows[GGML_TYPE_F32 ], "get_rows_f32",  get_rows_f32_len,  get_rows_f32_data,  "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows[GGML_TYPE_F16 ], "get_rows_f16",  get_rows_f16_len,  get_rows_f16_data,  "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows[GGML_TYPE_Q4_0], "get_rows_q4_0", get_rows_q4_0_len, get_rows_q4_0_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows[GGML_TYPE_Q4_1], "get_rows_q4_1", get_rows_q4_1_len, get_rows_q4_1_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows[GGML_TYPE_Q5_0], "get_rows_q5_0", get_rows_q5_0_len, get_rows_q5_0_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows[GGML_TYPE_Q5_1], "get_rows_q5_1", get_rows_q5_1_len, get_rows_q5_1_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows[GGML_TYPE_Q8_0], "get_rows_q8_0", get_rows_q8_0_len, get_rows_q8_0_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows_f32[GGML_TYPE_F32 ], "get_rows_f32_f32",  get_rows_f32_f32_len,  get_rows_f32_f32_data,  "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows_f32[GGML_TYPE_F16 ], "get_rows_f16_f32",  get_rows_f16_f32_len,  get_rows_f16_f32_data,  "main", 3, sizeof(vk_op_binary_push_constants), { 512, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows_f32[GGML_TYPE_Q4_0], "get_rows_q4_0_f32", get_rows_q4_0_f32_len, get_rows_q4_0_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows_f32[GGML_TYPE_Q4_1], "get_rows_q4_1_f32", get_rows_q4_1_f32_len, get_rows_q4_1_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows_f32[GGML_TYPE_Q5_0], "get_rows_q5_0_f32", get_rows_q5_0_f32_len, get_rows_q5_0_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows_f32[GGML_TYPE_Q5_1], "get_rows_q5_1_f32", get_rows_q5_1_f32_len, get_rows_q5_1_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_get_rows_f32[GGML_TYPE_Q8_0], "get_rows_q8_0_f32", get_rows_q8_0_f32_len, get_rows_q8_0_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {1024, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_matmul_split_k_reduce, "split_k_reduce", split_k_reduce_len, split_k_reduce_data, "main", 2, 2 * sizeof(uint32_t), {256, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_mul_mat_vec_p021_f16_f32, "mul_mat_vec_p021_f16_f32", mul_mat_vec_p021_f16_f32_len, mul_mat_vec_p021_f16_f32_data, "main", 3, 6 * sizeof(uint32_t), {1, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_mul_mat_vec_nc_f16_f32, "mul_mat_vec_nc_f16_f32", mul_mat_vec_nc_f16_f32_len, mul_mat_vec_nc_f16_f32_data, "main", 3, 7 * sizeof(uint32_t), {1, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_norm_f32, "norm_f32", norm_f32_len, norm_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_rms_norm_f32, "rms_norm_f32", rms_norm_f32_len, rms_norm_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_cpy_f32_f32, "cpy_f32_f32", cpy_f32_f32_len, cpy_f32_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_cpy_f32_f16, "cpy_f32_f16", cpy_f32_f16_len, cpy_f32_f16_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_cpy_f16_f16, "cpy_f16_f16", cpy_f16_f16_len, cpy_f16_f16_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_add_f32, "add_f32", add_f32_len, add_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {512, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_mul_f32, "mul_f32", mul_f32_len, mul_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {512, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_div_f32, "div_f32", div_f32_len, div_f32_data, "main", 3, sizeof(vk_op_binary_push_constants), {512, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_scale_f32, "scale_f32", scale_f32_len, scale_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_sqr_f32, "sqr_f32", sqr_f32_len, sqr_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_clamp_f32, "clamp_f32", clamp_f32_len, clamp_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_gelu_f32, "gelu_f32", gelu_f32_len, gelu_f32_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_silu_f32, "silu_f32", silu_f32_len, silu_f32_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_relu_f32, "relu_f32", relu_f32_len, relu_f32_data, "main", 2, sizeof(vk_op_push_constants), {512, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_diag_mask_inf_f32, "diag_mask_inf_f32", diag_mask_inf_f32_len, diag_mask_inf_f32_data, "main", 2, sizeof(vk_op_diag_mask_push_constants), {512, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_soft_max_f32, "soft_max_f32", soft_max_f32_len, soft_max_f32_data, "main", 3, sizeof(vk_op_soft_max_push_constants), {1, 1, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_soft_max_f32_f16, "soft_max_f32_f16", soft_max_f32_f16_len, soft_max_f32_f16_data, "main", 3, sizeof(vk_op_soft_max_push_constants), {1, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_rope_norm_f32, "rope_norm_f32", rope_norm_f32_len, rope_norm_f32_data, "main", 4, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_rope_norm_f16, "rope_norm_f16", rope_norm_f16_len, rope_norm_f16_data, "main", 4, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_rope_neox_f32, "rope_neox_f32", rope_neox_f32_len, rope_neox_f32_data, "main", 4, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1);
+    ggml_vk_create_pipeline(device, device->pipeline_rope_neox_f16, "rope_neox_f16", rope_neox_f16_len, rope_neox_f16_data, "main", 4, sizeof(vk_op_rope_push_constants), {1, 512, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_argsort_f32, "argsort_f32", argsort_f32_len, argsort_f32_data, "main", 2, sizeof(vk_op_argsort_push_constants), {1024, 1, 1}, {}, 1);
+
+    ggml_vk_create_pipeline(device, device->pipeline_sum_rows_f32, "sum_rows_f32", sum_rows_f32_len, sum_rows_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, { device->subgroup_size }, 1);
+}
+
+static vk_device ggml_vk_get_device(size_t idx) {
+    VK_LOG_DEBUG("ggml_vk_get_device(" << idx << ")");
+
+    if (vk_instance.devices[idx] == nullptr) {
+        VK_LOG_DEBUG("Initializing new vk_device");
+        vk_device device = std::make_shared<vk_device_struct>();
+        vk_instance.devices[idx] = device;
+
+#ifdef GGML_VULKAN_MEMORY_DEBUG
+        device->memory_logger = std::unique_ptr<vk_memory_logger>(new vk_memory_logger());
+#endif
+
+        size_t dev_num = vk_instance.device_indices[idx];
+
+        std::vector<vk::PhysicalDevice> physical_devices = vk_instance.instance.enumeratePhysicalDevices();
+
+        if (dev_num >= physical_devices.size()) {
+            std::cerr << "ggml_vulkan: Device with index " << dev_num << " does not exist." << std::endl;
+            throw std::runtime_error("Device not found");
+        }
+
+        device->physical_device = physical_devices[dev_num];
+        const std::vector<vk::ExtensionProperties> ext_props = device->physical_device.enumerateDeviceExtensionProperties();
+
+        bool maintenance4_support = false;
+
+        // Check if maintenance4 is supported
+        for (const auto& properties : ext_props) {
+            if (strcmp("VK_KHR_maintenance4", properties.extensionName) == 0) {
+                maintenance4_support = true;
+            }
+        }
+
+        vk::PhysicalDeviceProperties2 props2;
+        vk::PhysicalDeviceMaintenance3Properties props3;
+        vk::PhysicalDeviceMaintenance4Properties props4;
+        vk::PhysicalDeviceSubgroupProperties subgroup_props;
+        props2.pNext = &props3;
+        props3.pNext = &subgroup_props;
+        if (maintenance4_support) {
+            subgroup_props.pNext = &props4;
+        }
+        device->physical_device.getProperties2(&props2);
+        device->properties = props2.properties;
+
+        const char* GGML_VK_FORCE_MAX_ALLOCATION_SIZE = getenv("GGML_VK_FORCE_MAX_ALLOCATION_SIZE");
+
+        if (GGML_VK_FORCE_MAX_ALLOCATION_SIZE != nullptr) {
+            device->max_memory_allocation_size = std::stoi(GGML_VK_FORCE_MAX_ALLOCATION_SIZE);
+        } else if (maintenance4_support) {
+            device->max_memory_allocation_size = std::min(props3.maxMemoryAllocationSize, props4.maxBufferSize);
+        } else {
+            device->max_memory_allocation_size = props3.maxMemoryAllocationSize;
+        }
+
+        device->vendor_id = device->properties.vendorID;
+        device->subgroup_size = subgroup_props.subgroupSize;
+        device->uma = device->properties.deviceType == vk::PhysicalDeviceType::eIntegratedGpu;
+
+        bool fp16_storage = false;
+        bool fp16_compute = false;
+
+        for (const auto& properties : ext_props) {
+            if (strcmp("VK_KHR_16bit_storage", properties.extensionName) == 0) {
+                fp16_storage = true;
+            } else if (strcmp("VK_KHR_shader_float16_int8", properties.extensionName) == 0) {
+                fp16_compute = true;
+            }
+        }
+
+        const char* GGML_VK_DISABLE_F16 = getenv("GGML_VK_DISABLE_F16");
+        const bool force_disable_f16 = GGML_VK_DISABLE_F16 != nullptr;
+
+        device->fp16 = !force_disable_f16 && fp16_storage && fp16_compute;
+
+        std::vector<vk::QueueFamilyProperties> queue_family_props = device->physical_device.getQueueFamilyProperties();
+
+        // Try to find a non-graphics compute queue and transfer-focused queues
+        const uint32_t compute_queue_family_index = ggml_vk_find_queue_family_index(queue_family_props, vk::QueueFlagBits::eCompute, vk::QueueFlagBits::eGraphics, -1, 1);
+        const uint32_t transfer_queue_family_index = ggml_vk_find_queue_family_index(queue_family_props, vk::QueueFlagBits::eTransfer, vk::QueueFlagBits::eCompute | vk::QueueFlagBits::eGraphics, compute_queue_family_index, 1);
+
+        const float priorities[] = { 1.0f, 1.0f };
+        device->single_queue = compute_queue_family_index == transfer_queue_family_index && queue_family_props[compute_queue_family_index].queueCount == 1;
+
+        std::vector<vk::DeviceQueueCreateInfo> device_queue_create_infos;
+        if (compute_queue_family_index != transfer_queue_family_index) {
+            device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), compute_queue_family_index, 1, priorities});
+            device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), transfer_queue_family_index, 1, priorities + 1});
+        } else if(!device->single_queue) {
+            device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), compute_queue_family_index, 2, priorities});
+        } else {
+            device_queue_create_infos.push_back({vk::DeviceQueueCreateFlags(), compute_queue_family_index, 1, priorities});
+        }
+        vk::DeviceCreateInfo device_create_info;
+        std::vector<const char *> device_extensions;
+        vk::PhysicalDeviceFeatures device_features = device->physical_device.getFeatures();
+
+        VkPhysicalDeviceFeatures2 device_features2;
+        device_features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+        device_features2.pNext = nullptr;
+        device_features2.features = (VkPhysicalDeviceFeatures)device_features;
+
+        VkPhysicalDeviceVulkan11Features vk11_features;
+        vk11_features.pNext = nullptr;
+        vk11_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
+        device_features2.pNext = &vk11_features;
+
+        VkPhysicalDeviceVulkan12Features vk12_features;
+        vk12_features.pNext = nullptr;
+        vk12_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
+        vk11_features.pNext = &vk12_features;
+
+        vkGetPhysicalDeviceFeatures2(device->physical_device, &device_features2);
+
+        device->fp16 = device->fp16 && vk12_features.shaderFloat16;
+
+        if (!vk11_features.storageBuffer16BitAccess) {
+            std::cerr << "ggml_vulkan: device " << GGML_VK_NAME << idx << " does not support 16-bit storage." << std::endl;
+            throw std::runtime_error("Unsupported device");
+        }
+
+        device_extensions.push_back("VK_KHR_16bit_storage");
+
+#ifdef GGML_VULKAN_VALIDATE
+        device_extensions.push_back("VK_KHR_shader_non_semantic_info");
+#endif
+
+        if (device->fp16) {
+            device_extensions.push_back("VK_KHR_shader_float16_int8");
+        }
+        device->name = device->properties.deviceName.data();
+
+        device_create_info = {
+            vk::DeviceCreateFlags(),
+            device_queue_create_infos,
+            {},
+            device_extensions
+        };
+        device_create_info.setPNext(&device_features2);
+        device->device = device->physical_device.createDevice(device_create_info);
+
+        device->descriptor_set_mode = VK_DEVICE_DESCRIPTOR_POOL_MODE_UNKNOWN;
+
+        // Queues
+        ggml_vk_create_queue(device, device->compute_queue, compute_queue_family_index, 0, { vk::PipelineStageFlagBits::eComputeShader | vk::PipelineStageFlagBits::eTransfer });
+
+        // Shaders
+        ggml_vk_load_shaders(device);
+
+        if (!device->single_queue) {
+            const uint32_t transfer_queue_index = compute_queue_family_index == transfer_queue_family_index ? 1 : 0;
+            ggml_vk_create_queue(device, device->transfer_queue, transfer_queue_family_index, transfer_queue_index, { vk::PipelineStageFlagBits::eTransfer });
+        } else {
+            // TODO: Use pointer or reference to avoid copy
+            device->transfer_queue = device->compute_queue;
+        }
+
+        device->buffer_type = {
+            /* .iface    = */ ggml_backend_vk_buffer_type_interface,
+            /* .context  = */ new ggml_backend_vk_buffer_type_context{ device->name, device },
+        };
+
+        device->fence = device->device.createFence({});
+
+        device->idx = idx;
+
+        return device;
+    }
+
+    return vk_instance.devices[idx];
+}
+
+
+static void ggml_vk_print_gpu_info(size_t idx) {
+    GGML_ASSERT(idx < vk_instance.device_indices.size());
+    size_t dev_num = vk_instance.device_indices[idx];
+    VK_LOG_DEBUG("ggml_vk_print_gpu_info(" << dev_num << ")");
+    GGML_ASSERT(vk_instance_initialized);
+
+    std::vector<vk::PhysicalDevice> devices = vk_instance.instance.enumeratePhysicalDevices();
+
+    if (dev_num >= devices.size()) {
+        std::cerr << "ggml_vulkan: Device with index " << dev_num << " does not exist." << std::endl;
+        throw std::runtime_error("Device not found");
+    }
+
+    vk::PhysicalDevice physical_device = devices[dev_num];
+    std::vector<vk::ExtensionProperties> ext_props = physical_device.enumerateDeviceExtensionProperties();
+
+    vk::PhysicalDeviceProperties2 props2;
+    vk::PhysicalDeviceMaintenance3Properties props3;
+    vk::PhysicalDeviceSubgroupProperties subgroup_props;
+    vk::PhysicalDeviceDriverProperties driver_props;
+    props2.pNext = &props3;
+    props3.pNext = &subgroup_props;
+    subgroup_props.pNext = &driver_props;
+    physical_device.getProperties2(&props2);
+
+    const size_t subgroup_size = subgroup_props.subgroupSize;
+    const bool uma = props2.properties.deviceType == vk::PhysicalDeviceType::eIntegratedGpu;
+
+    bool fp16_storage = false;
+    bool fp16_compute = false;
+
+    for (auto properties : ext_props) {
+        if (strcmp("VK_KHR_16bit_storage", properties.extensionName) == 0) {
+            fp16_storage = true;
+        } else if (strcmp("VK_KHR_shader_float16_int8", properties.extensionName) == 0) {
+            fp16_compute = true;
+        }
+    }
+
+    const char* GGML_VK_DISABLE_F16 = getenv("GGML_VK_DISABLE_F16");
+    bool force_disable_f16 = GGML_VK_DISABLE_F16 != nullptr;
+
+    bool fp16 = !force_disable_f16 && fp16_storage && fp16_compute;
+
+    vk::PhysicalDeviceFeatures device_features = physical_device.getFeatures();
+
+    VkPhysicalDeviceFeatures2 device_features2;
+    device_features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
+    device_features2.pNext = nullptr;
+    device_features2.features = (VkPhysicalDeviceFeatures)device_features;
+
+    VkPhysicalDeviceVulkan11Features vk11_features;
+    vk11_features.pNext = nullptr;
+    vk11_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
+    device_features2.pNext = &vk11_features;
+
+    VkPhysicalDeviceVulkan12Features vk12_features;
+    vk12_features.pNext = nullptr;
+    vk12_features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
+    vk11_features.pNext = &vk12_features;
+
+    vkGetPhysicalDeviceFeatures2(physical_device, &device_features2);
+
+    fp16 = fp16 && vk12_features.shaderFloat16;
+
+    std::string device_name = props2.properties.deviceName.data();
+    std::cerr << GGML_VK_NAME << idx << ": " << device_name << " (" << driver_props.driverName << ") | uma: " << uma << " | fp16: " << fp16 << " | warp size: " << subgroup_size << std::endl;
+
+    if (props2.properties.deviceType == vk::PhysicalDeviceType::eCpu) {
+        std::cerr << "ggml_vulkan: Warning: Device type is CPU. This is probably not the device you want." << std::endl;
+    }
+}
+
+static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
+static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions);
+
+void ggml_vk_instance_init() {
+    if (vk_instance_initialized) {
+        return;
+    }
+    VK_LOG_DEBUG("ggml_vk_instance_init()");
+
+    vk_instance_initialized = true;
+
+    vk::ApplicationInfo app_info{ "ggml-vulkan", 1, nullptr, 0, VK_API_VERSION };
+
+    const std::vector<vk::ExtensionProperties> instance_extensions = vk::enumerateInstanceExtensionProperties();
+    const bool validation_ext = ggml_vk_instance_validation_ext_available(instance_extensions);
+#ifdef __APPLE__
+    const bool portability_enumeration_ext = ggml_vk_instance_portability_enumeration_ext_available(instance_extensions);
+#endif
+
+    std::vector<const char*> layers;
+
+    if (validation_ext) {
+        layers.push_back("VK_LAYER_KHRONOS_validation");
+    }
+    std::vector<const char*> extensions;
+    if (validation_ext) {
+        extensions.push_back("VK_EXT_validation_features");
+    }
+#ifdef __APPLE__
+    if (portability_enumeration_ext) {
+        extensions.push_back("VK_KHR_portability_enumeration");
+    }
+#endif
+    vk::InstanceCreateInfo instance_create_info(vk::InstanceCreateFlags{}, &app_info, layers, extensions);
+#ifdef __APPLE__
+    if (portability_enumeration_ext) {
+        instance_create_info.flags |= vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR;
+    }
+#endif
+
+    std::vector<vk::ValidationFeatureEnableEXT> features_enable;
+    vk::ValidationFeaturesEXT validation_features;
+
+    if (validation_ext) {
+        features_enable = { vk::ValidationFeatureEnableEXT::eBestPractices };
+        validation_features = {
+            features_enable,
+            {},
+        };
+        validation_features.setPNext(nullptr);
+        instance_create_info.setPNext(&validation_features);
+
+        std::cerr << "ggml_vulkan: Validation layers enabled" << std::endl;
+    }
+    vk_instance.instance = vk::createInstance(instance_create_info);
+
+    size_t num_available_devices = vk_instance.instance.enumeratePhysicalDevices().size();
+
+    // Emulate behavior of CUDA_VISIBLE_DEVICES for Vulkan
+    char * devices_env = getenv("GGML_VK_VISIBLE_DEVICES");
+    if (devices_env != nullptr) {
+        std::string devices(devices_env);
+        std::replace(devices.begin(), devices.end(), ',', ' ');
+
+        std::stringstream ss(devices);
+        size_t tmp;
+        while (ss >> tmp) {
+            if(tmp >= num_available_devices) {
+                std::cerr << "ggml_vulkan: Invalid device index " << tmp << " in GGML_VK_VISIBLE_DEVICES." << std::endl;
+                throw std::runtime_error("Invalid Vulkan device index");
+            }
+            vk_instance.device_indices.push_back(tmp);
+        }
+    } else {
+        std::vector<vk::PhysicalDevice> devices = vk_instance.instance.enumeratePhysicalDevices();
+
+        // Make sure at least one device exists
+        if (devices.empty()) {
+            std::cerr << "ggml_vulkan: Error: No devices found." << std::endl;
+            GGML_ASSERT(false);
+        }
+
+        // Default to using all dedicated GPUs
+        for (size_t i = 0; i < devices.size(); i++) {
+            vk::PhysicalDeviceProperties2 new_props;
+            vk::PhysicalDeviceDriverProperties new_driver;
+            vk::PhysicalDeviceIDProperties new_id;
+            new_props.pNext = &new_driver;
+            new_driver.pNext = &new_id;
+            devices[i].getProperties2(&new_props);
+
+            if (new_props.properties.deviceType == vk::PhysicalDeviceType::eDiscreteGpu) {
+                // Check if there are two physical devices corresponding to the same GPU
+                auto old_device = std::find_if(
+                    vk_instance.device_indices.begin(),
+                    vk_instance.device_indices.end(),
+                    [&devices, &new_id](const size_t k){
+                        vk::PhysicalDeviceProperties2 old_props;
+                        vk::PhysicalDeviceIDProperties old_id;
+                        old_props.pNext = &old_id;
+                        devices[k].getProperties2(&old_props);
+                        return std::equal(std::begin(old_id.deviceUUID), std::end(old_id.deviceUUID), std::begin(new_id.deviceUUID));
+                    }
+                );
+                if (old_device == vk_instance.device_indices.end()) {
+                    vk_instance.device_indices.push_back(i);
+                } else {
+                    // There can be two physical devices corresponding to the same GPU if there are 2 different drivers
+                    // This can cause error when splitting layers aross the devices, need to keep only 1
+                    VK_LOG_DEBUG("Device " << i << " and device " << *old_device << " have the same deviceUUID");
+
+                    vk::PhysicalDeviceProperties2 old_props;
+                    vk::PhysicalDeviceDriverProperties old_driver;
+                    old_props.pNext = &old_driver;
+                    devices[*old_device].getProperties2(&old_props);
+
+                    std::map<vk::DriverId, int> driver_priorities {};
+                    int old_priority = std::numeric_limits<int>::max();
+                    int new_priority = std::numeric_limits<int>::max();
+
+                    // Check https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDriverId.html for the list of driver id
+                    // Smaller number -> higher priority
+                    switch (old_props.properties.vendorID) {
+                        case VK_VENDOR_ID_AMD:
+                            driver_priorities[vk::DriverId::eMesaRadv] = 1;
+                            driver_priorities[vk::DriverId::eAmdOpenSource] = 2;
+                            driver_priorities[vk::DriverId::eAmdProprietary] = 3;
+                            break;
+                        case VK_VENDOR_ID_INTEL:
+                            driver_priorities[vk::DriverId::eIntelOpenSourceMESA] = 1;
+                            driver_priorities[vk::DriverId::eIntelProprietaryWindows] = 2;
+                            break;
+                        case VK_VENDOR_ID_NVIDIA:
+                            driver_priorities[vk::DriverId::eNvidiaProprietary] = 1;
+#if defined(VK_API_VERSION_1_3) && VK_HEADER_VERSION >= 235
+                            driver_priorities[vk::DriverId::eMesaNvk] = 2;
+#endif
+                            break;
+                    }
+
+                    if (driver_priorities.count(old_driver.driverID)) {
+                        old_priority = driver_priorities[old_driver.driverID];
+                    }
+                    if (driver_priorities.count(new_driver.driverID)) {
+                        new_priority = driver_priorities[new_driver.driverID];
+                    }
+
+                    if (new_priority < old_priority) {
+                        auto r = std::remove(vk_instance.device_indices.begin(), vk_instance.device_indices.end(), *old_device);
+                        vk_instance.device_indices.erase(r, vk_instance.device_indices.end());
+                        vk_instance.device_indices.push_back(i);
+
+                        VK_LOG_DEBUG("Prioritize device " << i << " driver " << new_driver.driverName << " over device " << *old_device << " driver " << old_driver.driverName);
+                    }
+                    else {
+                        VK_LOG_DEBUG("Prioritize device " << *old_device << " driver " << old_driver.driverName << " over device " << i << " driver " << new_driver.driverName << std::endl);
+                    }
+                }
+            }
+        }
+
+        // If no dedicated GPUs found, fall back to GPU 0
+        if (vk_instance.device_indices.empty()) {
+            vk_instance.device_indices.push_back(0);
+        }
+    }
+
+    std::cerr << "ggml_vulkan: Found " << vk_instance.device_indices.size() << " Vulkan devices:" << std::endl;
+
+    for (size_t i = 0; i < vk_instance.device_indices.size(); i++) {
+        ggml_vk_print_gpu_info(i);
+    }
+}
+
+static void ggml_vk_init(ggml_backend_vk_context * ctx, size_t idx) {
+    GGML_ASSERT(idx < vk_instance.device_indices.size());
+    VK_LOG_DEBUG("ggml_vk_init(" << ctx->name << ", " << idx << ")");
+    ggml_vk_instance_init();
+
+    ctx->name = GGML_VK_NAME + std::to_string(idx);
+
+    ctx->device = ggml_vk_get_device(idx);
+
+    ctx->semaphore_idx = 0;
+    ctx->event_idx = 0;
+
+    ctx->prealloc_size_x = 0;
+    ctx->prealloc_size_y = 0;
+    ctx->prealloc_size_split_k = 0;
+
+    ctx->fence = ctx->device->device.createFence({});
+
+    ctx->staging_size = 0;
+    ctx->staging_offset = 0;
+
+    ctx->compute_ctx = nullptr;
+    ctx->transfer_ctx = nullptr;
+
+#ifdef GGML_VULKAN_CHECK_RESULTS
+    const char* skip_checks = getenv("GGML_VULKAN_SKIP_CHECKS");
+    vk_skip_checks = (skip_checks == NULL ? 0 : atoi(skip_checks));
+    const char* output_tensor = getenv("GGML_VULKAN_OUTPUT_TENSOR");
+    vk_output_tensor = (output_tensor == NULL ? 0 : atoi(output_tensor));
+#endif
+}
+
+static vk_pipeline ggml_vk_get_to_fp16(ggml_backend_vk_context * ctx, ggml_type type) {
+    VK_LOG_DEBUG("ggml_vk_get_to_fp16()");
+    switch (type) {
+        case GGML_TYPE_F32:
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+            break;
+        default:
+            return nullptr;
+    }
+
+    return ctx->device->pipeline_dequant[type];
+}
+
+static vk_matmul_pipeline ggml_vk_get_mul_mat_mat_pipeline(ggml_backend_vk_context * ctx, ggml_type src0_type, ggml_type src1_type) {
+    VK_LOG_DEBUG("ggml_vk_get_mul_mat_mat_pipeline()");
+    if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) {
+        return ctx->device->pipeline_matmul_f32;
+    }
+    if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) {
+        return ctx->device->pipeline_matmul_f32_f16;
+    }
+    if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) {
+        return ctx->device->pipeline_matmul_f16_f32;
+    }
+    if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) {
+        return ctx->device->pipeline_matmul_f16;
+    }
+
+    GGML_ASSERT(src1_type == GGML_TYPE_F32);
+
+    switch (src0_type) {
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+            break;
+        default:
+            return nullptr;
+    }
+
+    return ctx->device->pipeline_dequant_mul_mat_mat[src0_type];
+}
+
+static vk_pipeline ggml_vk_get_dequantize_mul_mat_vec(ggml_backend_vk_context * ctx, ggml_type a_type, ggml_type b_type) {
+    VK_LOG_DEBUG("ggml_vk_get_dequantize_mul_mat_vec()");
+    GGML_ASSERT(b_type == GGML_TYPE_F32 || b_type == GGML_TYPE_F16);
+
+    switch (a_type) {
+        case GGML_TYPE_F32:
+        case GGML_TYPE_F16:
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+            break;
+        default:
+            return nullptr;
+    }
+
+    return b_type == GGML_TYPE_F32 ? ctx->device->pipeline_dequant_mul_mat_vec_f32_f32[a_type] : ctx->device->pipeline_dequant_mul_mat_vec_f16_f32[a_type];
+}
+
+static vk_matmul_pipeline ggml_vk_get_mul_mat_mat_id_pipeline(ggml_backend_vk_context * ctx, ggml_type src0_type, ggml_type src1_type) {
+    VK_LOG_DEBUG("ggml_vk_get_mul_mat_mat_id_pipeline()");
+    if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) {
+        return ctx->device->pipeline_matmul_id_f32;
+    }
+    if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F32) {
+        return ctx->device->pipeline_matmul_id_f16_f32;
+    }
+    if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) {
+        return ctx->device->pipeline_matmul_id_f16;
+    }
+
+    GGML_ASSERT(src1_type == GGML_TYPE_F32);
+
+    switch (src0_type) {
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+            break;
+        default:
+            return nullptr;
+    }
+
+    return ctx->device->pipeline_dequant_mul_mat_mat_id[src0_type];
+}
+
+static vk_pipeline ggml_vk_get_dequantize_mul_mat_vec_id(ggml_backend_vk_context * ctx, ggml_type a_type, ggml_type b_type) {
+    VK_LOG_DEBUG("ggml_vk_get_dequantize_mul_mat_vec()");
+    GGML_ASSERT(b_type == GGML_TYPE_F32);
+
+    switch (a_type) {
+        case GGML_TYPE_F32:
+        case GGML_TYPE_F16:
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+            break;
+        default:
+            return nullptr;
+    }
+
+    return ctx->device->pipeline_dequant_mul_mat_vec_id_f32[a_type];
+}
+
+static vk_buffer ggml_vk_pool_malloc(ggml_backend_vk_context * ctx, size_t size) {
+    VK_LOG_DEBUG("ggml_vk_pool_malloc(" << size << ")");
+    VK_LOG_MEMORY("ggml_vk_pool_malloc");
+
+    int best_i = -1;
+    size_t best_size = std::numeric_limits<size_t>::max(); //smallest unused buffer that fits our needs
+    int worst_i = -1;
+    size_t worst_size = 0; //largest unused buffer seen so far
+    for (int i = 0; i < MAX_VK_BUFFERS; ++i) {
+        vk_buffer &b = ctx->buffer_pool[i];
+        if (b != nullptr && b->size >= size && b->size < best_size) {
+            best_i = i;
+            best_size = b->size;
+        }
+        if (b != nullptr && b->size > worst_size) {
+            worst_i = i;
+            worst_size = b->size;
+        }
+    }
+    if(best_i != -1) {
+        //found the smallest buffer that fits our needs
+        vk_buffer b = ctx->buffer_pool[best_i];
+        ctx->buffer_pool[best_i].reset();
+        return b;
+    }
+    if(worst_i != -1) {
+        //no buffer that fits our needs, resize largest one to save memory
+        vk_buffer& b = ctx->buffer_pool[worst_i];
+        ggml_vk_destroy_buffer(b);
+    }
+
+    return ggml_vk_create_buffer_device(ctx->device, size);
+}
+
+static void ggml_vk_pool_free(ggml_backend_vk_context * ctx, vk_buffer& buffer) {
+    VK_LOG_DEBUG("ggml_vk_pool_free(" << buffer->size << ")");
+    for (int i = 0; i < MAX_VK_BUFFERS; ++i) {
+        vk_buffer& b = ctx->buffer_pool[i];
+        if (b == nullptr) {
+            b = buffer;
+            return;
+        }
+    }
+    std::cerr << "ggml_vulkan: WARNING: vk buffer pool full, increase MAX_VK_BUFFERS" << std::endl;
+    ggml_vk_destroy_buffer(buffer);
+}
+
+// Returns an available temporary buffer that may only be used temporarily, it will be reused
+static vk_buffer ggml_vk_create_buffer_temp(ggml_backend_vk_context * ctx, size_t size) {
+    // Try to find existing temp buffer with enough capacity
+    for (auto& buffer : ctx->gc.temp_buffers) {
+        if (buffer->size >= size) {
+            return buffer;
+        }
+    }
+
+    VK_LOG_MEMORY("ggml_vk_create_buffer_temp(" << size << ")");
+
+    // Otherwise create new buffer
+    vk_buffer buf = ggml_vk_pool_malloc(ctx, size);
+    ctx->gc.temp_buffers.push_back(buf);
+
+    return buf;
+}
+
+static void * ggml_vk_host_malloc(vk_device& device, size_t size) {
+    VK_LOG_MEMORY("ggml_vk_host_malloc(" << size << ")");
+    vk_buffer buf = ggml_vk_create_buffer(device, size,
+        vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached,
+        vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
+
+    if(!(buf->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible)) {
+        fprintf(stderr, "WARNING: failed to allocate %.2f MB of pinned memory\n",
+            size/1024.0/1024.0);
+        device->device.freeMemory(buf->device_memory);
+        device->device.destroyBuffer(buf->buffer);
+        return nullptr;
+    }
+
+    device->pinned_memory.push_back(std::make_tuple(buf->ptr, size, buf));
+
+    return buf->ptr;
+}
+
+static void ggml_vk_host_free(vk_device& device, void* ptr) {
+    if (ptr == nullptr) {
+        return;
+    }
+    VK_LOG_MEMORY("ggml_vk_host_free(" << ptr << ")");
+    vk_buffer buf;
+    size_t index;
+    for (size_t i = 0; i < device->pinned_memory.size(); i++) {
+        const uint8_t* addr = (const uint8_t*) std::get<0>(device->pinned_memory[i]);
+        const uint8_t* endr = addr + std::get<1>(device->pinned_memory[i]);
+        if (ptr >= addr && ptr < endr) {
+            buf = std::get<2>(device->pinned_memory[i]);
+            index = i;
+            break;
+        }
+    }
+    if (buf == nullptr) {
+        fprintf(stderr, "WARNING: failed to free pinned memory: memory not in map\n");
+        return;
+    }
+
+    ggml_vk_destroy_buffer(buf);
+
+    device->pinned_memory.erase(device->pinned_memory.begin() + index);
+}
+
+static void ggml_vk_host_get(vk_device& device, const void * ptr, vk_buffer& buf, size_t& buf_offset) {
+    buf = nullptr;
+    buf_offset = 0;
+    for (size_t i = 0; i < device->pinned_memory.size(); i++) {
+        const uint8_t* addr = (const uint8_t*) std::get<0>(device->pinned_memory[i]);
+        const uint8_t* endr = addr + std::get<1>(device->pinned_memory[i]);
+        if (ptr >= addr && ptr < endr) {
+            buf = std::get<2>(device->pinned_memory[i]);
+            buf_offset = ((const uint8_t *)ptr) - addr;
+            break;
+        }
+    }
+}
+
+static vk_submission ggml_vk_begin_submission(vk_device& device, vk_queue& q, bool one_time = true) {
+    vk_submission s;
+    s.buffer = ggml_vk_create_cmd_buffer(device, q);
+    if (one_time) {
+        s.buffer.begin({ vk::CommandBufferUsageFlagBits::eOneTimeSubmit });
+    } else {
+        s.buffer.begin({ vk::CommandBufferUsageFlags{} });
+    }
+
+    return s;
+}
+
+static void ggml_vk_dispatch_pipeline(ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline& pipeline, std::vector<vk_subbuffer>&& buffers, size_t push_constant_size, const void* push_constants, std::array<uint32_t, 3> elements) {
+    const uint32_t wg0 = CEIL_DIV(elements[0], pipeline->wg_denoms[0]);
+    const uint32_t wg1 = CEIL_DIV(elements[1], pipeline->wg_denoms[1]);
+    const uint32_t wg2 = CEIL_DIV(elements[2], pipeline->wg_denoms[2]);
+    VK_LOG_DEBUG("ggml_vk_dispatch_pipeline(" << pipeline->name << ", {";
+    for (auto& buffer : buffers) {
+        std::cerr << "(" << buffer.buffer << ", " << buffer.offset << ", " << buffer.size << "), ";
+    }
+    std::cerr << "}, (" << wg0 << "," << wg1 << "," << wg2 << "))");
+    std::vector<vk::DescriptorBufferInfo> descriptor_buffer_infos;
+    std::vector<vk::WriteDescriptorSet> write_descriptor_sets;
+    GGML_ASSERT(pipeline->descriptor_set_idx < pipeline->descriptor_sets.size());
+    GGML_ASSERT(buffers.size() == pipeline->parameter_count);
+    vk::DescriptorSet& descriptor_set = pipeline->descriptor_sets[pipeline->descriptor_set_idx++];
+    for (uint32_t i = 0; i < pipeline->parameter_count; i++) {
+        descriptor_buffer_infos.push_back({buffers[i].buffer->buffer, buffers[i].offset, buffers[i].size});
+    }
+    for (uint32_t i = 0; i < pipeline->parameter_count; i++) {
+        write_descriptor_sets.push_back({descriptor_set, i, 0, 1, vk::DescriptorType::eStorageBuffer, nullptr, &descriptor_buffer_infos[i]});
+    }
+
+    ctx->device->device.updateDescriptorSets(write_descriptor_sets, {});
+
+    subctx->s->buffer.pushConstants(pipeline->layout, vk::ShaderStageFlagBits::eCompute, 0, push_constant_size, push_constants);
+    subctx->s->buffer.bindPipeline(vk::PipelineBindPoint::eCompute, pipeline->pipeline);
+    subctx->s->buffer.bindDescriptorSets(vk::PipelineBindPoint::eCompute,
+                                pipeline->layout,
+                                0,
+                                { descriptor_set },
+                                {});
+    subctx->s->buffer.dispatch(wg0, wg1, wg2);
+}
+
+static void ggml_vk_end_submission(vk_submission& s, std::vector<vk_semaphore> wait_semaphores, std::vector<vk_semaphore> signal_semaphores) {
+    s.buffer.end();
+
+    s.wait_semaphores = std::move(wait_semaphores);
+    s.signal_semaphores = std::move(signal_semaphores);
+}
+
+static void ggml_vk_ctx_end(vk_context * ctx) {
+    VK_LOG_DEBUG("ggml_vk_ctx_end(" << ctx << ", " << ctx->seqs.size() << ")");
+    if (ctx->s == nullptr) {
+        return;
+    }
+
+    ctx->s->buffer.end();
+    ctx->s = nullptr;
+}
+
+static void ggml_vk_ctx_begin(vk_device& device, vk_context * subctx) {
+    VK_LOG_DEBUG("ggml_vk_ctx_begin(" << device->name << ")");
+    if (subctx->s != nullptr) {
+        ggml_vk_ctx_end(subctx);
+    }
+
+    subctx->seqs.push_back({ ggml_vk_begin_submission(device, *subctx->q) });
+    subctx->s = subctx->seqs[subctx->seqs.size() - 1].data();
+}
+
+static size_t ggml_vk_align_size(size_t width, size_t align) {
+    VK_LOG_DEBUG("ggml_vk_align_size(" << width << ", " << align << ")");
+    return CEIL_DIV(width, align) * align;
+}
+
+static void deferred_memcpy(void * dst, const void * src, size_t size, std::vector<vk_staging_memcpy>* memcpys = nullptr) {
+    if (memcpys == nullptr) {
+        memcpy(dst, src, size);
+    } else {
+        memcpys->emplace_back(dst, src, size);
+    }
+}
+
+static void ggml_vk_ensure_sync_staging_buffer(vk_device& device, size_t size) {
+    if (device->sync_staging == nullptr || device->sync_staging->size < size) {
+        VK_LOG_MEMORY("ggml_vk_ensure_sync_staging_buffer(" << size << ")");
+        ggml_vk_destroy_buffer(device->sync_staging);
+        device->sync_staging = ggml_vk_create_buffer_check(device, size,
+            vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached,
+            vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
+    }
+}
+
+static void ggml_vk_buffer_write_nc_async(ggml_backend_vk_context * ctx, vk_context * subctx, vk_buffer& dst, size_t offset, const ggml_tensor * tensor, bool sync_staging = false) {
+    VK_LOG_DEBUG("ggml_vk_buffer_write_nc_async(" << tensor << ")");
+    GGML_ASSERT(!ggml_is_contiguous(tensor));
+    // Buffer is already mapped
+    if(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) {
+        std::cerr << "ggml_vulkan: buffer_write_nc_async dst buffer is host_visible. Use synchronous write." << std::endl;
+        GGML_ASSERT(false);
+    }
+    // Check if src is pinned memory
+    vk_buffer buf;
+    size_t buf_offset;
+    ggml_vk_host_get(ctx->device, tensor->data, buf, buf_offset);
+
+    const uint64_t ne0 = tensor->ne[0];
+    const uint64_t ne1 = tensor->ne[1];
+    const uint64_t ne2 = tensor->ne[2];
+    const uint64_t ne3 = tensor->ne[3];
+    const uint64_t nb0 = tensor->nb[0];
+    const uint64_t nb1 = tensor->nb[1];
+    const uint64_t nb2 = tensor->nb[2];
+    const uint64_t nb3 = tensor->nb[3];
+    const ggml_type type = tensor->type;
+    const uint64_t ts = ggml_type_size(type);
+    const uint64_t bs = ggml_blck_size(type);
+
+    const uint64_t dstnb0 = ts;
+    const uint64_t dstnb1 = dstnb0*(ne0/bs);
+    const uint64_t dstnb2 = dstnb1*ne1;
+    const uint64_t dstnb3 = dstnb2*ne2;
+
+    const uint64_t ne = ggml_nelements(tensor);
+
+    if (buf != nullptr) {
+        // Memory is pinned, use as staging buffer
+        std::vector<vk::BufferCopy> slices;
+
+        for (uint64_t i3 = 0; i3 < ne3; i3++) {
+            for (uint64_t i2 = 0; i2 < ne2; i2++) {
+                // Find longest contiguous slice
+                if (ne1*nb1 == dstnb2) {
+                    slices.push_back({ buf_offset + i3*nb3 + i2*nb2, offset + i3*dstnb3 + i2*dstnb2, dstnb2 });
+                } else {
+                    for (uint64_t i1 = 0; i1 < ne1; i1++) {
+                        if (ne0*nb0/bs == dstnb1) {
+                            slices.push_back({ buf_offset + i3*nb3 + i2*nb2 + i1*nb1, offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1, dstnb1 });
+                        } else {
+                            const uint64_t s_off = buf_offset + i3*nb3 + i2*nb2 + i1*nb1;
+                            const uint64_t d_off = offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1;
+                            for (uint64_t i0 = 0; i0 < ne0; i0++) {
+                                slices.push_back({ s_off + i1*nb0, d_off + i0*dstnb0, dstnb0 });
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        ggml_vk_sync_buffers(subctx);
+        subctx->s->buffer.copyBuffer(buf->buffer, dst->buffer, slices);
+        return;
+    }
+
+    // Staging buffer required
+    vk_buffer staging = ctx->staging;
+    size_t staging_offset = ctx->staging_offset;
+    const size_t copy_size = ts*ne/bs;
+    if (ctx->staging->size < ctx->staging_offset + copy_size) {
+        if (sync_staging) {
+            // Create temporary larger buffer
+            ggml_vk_ensure_sync_staging_buffer(ctx->device, copy_size);
+
+            staging = ctx->device->sync_staging;
+            staging_offset = 0;
+        } else {
+            GGML_ASSERT(false);
+        }
+    }
+
+    VkBufferCopy buf_copy{ staging_offset, offset, copy_size };
+
+    ggml_vk_sync_buffers(subctx);
+    vkCmdCopyBuffer(subctx->s->buffer, staging->buffer, dst->buffer, 1, &buf_copy);
+
+    for (uint64_t i3 = 0; i3 < ne3; i3++) {
+        for (uint64_t i2 = 0; i2 < ne2; i2++) {
+            // Find longest contiguous slice
+            if (ne1*nb1 == dstnb2) {
+                deferred_memcpy((uint8_t *)staging->ptr + staging_offset + i3*dstnb3 + i2*dstnb2, (const uint8_t *) tensor->data + buf_offset + i3*nb3 + i2*nb2, dstnb2, &subctx->in_memcpys);
+            } else {
+                for (uint64_t i1 = 0; i1 < ne1; i1++) {
+                    if (ne0*nb0/bs == dstnb1) {
+                        deferred_memcpy((uint8_t *)staging->ptr + staging_offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1, (const uint8_t *) tensor->data + buf_offset + i3*nb3 + i2*nb2 + i1*nb1, dstnb1, &subctx->in_memcpys);
+                    } else {
+                        const uint64_t s_off = buf_offset + i3*nb3 + i2*nb2 + i1*nb1;
+                        const uint64_t d_off = staging_offset + i3*dstnb3 + i2*dstnb2 + i1*dstnb1;
+                        for (uint64_t i0 = 0; i0 < ne0; i0++) {
+                            deferred_memcpy((uint8_t *)staging->ptr + d_off + i0*dstnb0, (const uint8_t *) tensor->data + s_off + i0*nb0, dstnb0, &subctx->in_memcpys);
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void ggml_vk_buffer_write_2d_async(vk_context * subctx, vk_buffer& dst, size_t offset, const void * src, size_t spitch, size_t width, size_t height, vk_buffer staging_buffer, size_t staging_offset, bool sync_staging = false) {
+    VK_LOG_DEBUG("ggml_vk_buffer_write_2d_async(" << width << ", " << height << ")");
+    // Buffer is already mapped
+    if(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) {
+        std::cerr << "ggml_vulkan: buffer_write_async dst buffer is host_visible. Use synchronous write." << std::endl;
+        GGML_ASSERT(false);
+    }
+    // Check if src is pinned memory
+    vk_buffer buf = nullptr;
+    size_t buf_offset;
+    ggml_vk_host_get(dst->device, src, buf, buf_offset);
+
+    if (buf != nullptr) {
+        // Memory is pinned, use as staging buffer
+        std::vector<vk::BufferCopy> slices(1);
+        if (width == spitch) {
+            // Only do single write if stride is equal
+            slices[0].srcOffset = buf_offset;
+            slices[0].dstOffset = offset;
+            slices[0].size = width * height;
+        } else {
+            slices.resize(height);
+            for (size_t i = 0; i < height; i++) {
+                slices[i].srcOffset = buf_offset + i * spitch;
+                slices[i].dstOffset = offset + i * width;
+                slices[i].size = width;
+            }
+        }
+
+        ggml_vk_sync_buffers(subctx);
+        subctx->s->buffer.copyBuffer(buf->buffer, dst->buffer, slices);
+        return;
+    }
+    VK_LOG_DEBUG("STAGING");
+
+    // Staging buffer required
+    const size_t copy_size = width*height;
+    if (staging_buffer == nullptr || staging_buffer->size < staging_offset + copy_size) {
+        if (sync_staging) {
+            ggml_vk_ensure_sync_staging_buffer(dst->device, copy_size);
+
+            staging_buffer = dst->device->sync_staging;
+            staging_offset = 0;
+        } else {
+            GGML_ASSERT(false);
+        }
+    }
+
+    VkBufferCopy buf_copy = {
+        staging_offset,
+        offset,
+        copy_size};
+
+    ggml_vk_sync_buffers(subctx);
+    vkCmdCopyBuffer(subctx->s->buffer, staging_buffer->buffer, dst->buffer, 1, &buf_copy);
+
+    if (width == spitch) {
+        deferred_memcpy((uint8_t *)staging_buffer->ptr + staging_offset, src, width * height, &subctx->in_memcpys);
+    } else {
+        for (size_t i = 0; i < height; i++) {
+            deferred_memcpy((uint8_t *)staging_buffer->ptr + staging_offset + i * width, (const uint8_t *) src + i * spitch, width, &subctx->in_memcpys);
+        }
+    }
+}
+
+static void ggml_vk_buffer_write_async(vk_context * subctx, vk_buffer& dst, size_t offset, const void * src, size_t size, vk_buffer staging_buffer, size_t staging_offset, bool sync_staging = false) {
+    VK_LOG_DEBUG("ggml_vk_buffer_write_async(" << size << ")");
+    return ggml_vk_buffer_write_2d_async(subctx, dst, offset, src, size, size, 1, staging_buffer, staging_offset, sync_staging);
+}
+
+static void ggml_vk_buffer_write_2d(vk_buffer& dst, size_t offset, const void * src, size_t spitch, size_t width, size_t height) {
+    VK_LOG_DEBUG("ggml_vk_buffer_write_2d(" << width << ", " << height << ")");
+    // Buffer is already mapped
+    if(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) {
+        GGML_ASSERT(dst->memory_property_flags & vk::MemoryPropertyFlagBits::eHostCoherent);
+
+        for (size_t i = 0; i < height; i++) {
+            memcpy((uint8_t *)dst->ptr + offset + i * width, (const uint8_t *) src + i * spitch, width);
+        }
+    } else {
+        vk_context * subctx = ggml_vk_create_temporary_context(dst->device->transfer_queue);
+        ggml_vk_ctx_begin(dst->device, subctx);
+        ggml_vk_buffer_write_2d_async(subctx, dst, offset, src, spitch, width, height, nullptr, 0, true);
+        ggml_vk_ctx_end(subctx);
+
+        for (auto& cpy : subctx->in_memcpys) {
+            memcpy(cpy.dst, cpy.src, cpy.n);
+        }
+
+        ggml_vk_submit(subctx, dst->device->fence);
+        VK_CHECK(dst->device->device.waitForFences({ dst->device->fence }, true, UINT64_MAX), "vk_buffer_write_2d waitForFences");
+        dst->device->device.resetFences({ dst->device->fence });
+
+        delete subctx;
+    }
+}
+
+static void ggml_vk_buffer_write(vk_buffer& dst, size_t offset, const void * src, size_t size) {
+    VK_LOG_DEBUG("ggml_vk_buffer_write(" << size << ")");
+    ggml_vk_buffer_write_2d(dst, offset, src, 0, size, 1);
+}
+
+static void ggml_vk_buffer_read_2d_async(vk_context * subctx, vk_buffer& src, size_t offset, void * dst, size_t spitch, size_t dpitch, size_t width, size_t height, vk_buffer staging_buffer, size_t staging_offset, bool sync_staging = false) {
+    VK_LOG_DEBUG("ggml_vk_buffer_read_2d_async(offset=" << offset << ", width=" << width << ", height=" << height << ")");
+    GGML_ASSERT(width > 0);
+    GGML_ASSERT(height > 0);
+    GGML_ASSERT(src != nullptr);
+
+    // Check if dst is pinned memory
+    vk_buffer buf = nullptr;
+    size_t buf_offset;
+    ggml_vk_host_get(src->device, dst, buf, buf_offset);
+
+    std::vector<vk::BufferCopy> slices(1);
+    if (width == spitch && width == dpitch) {
+        // Only do single write if stride is equal
+        slices[0].srcOffset = offset;
+        slices[0].dstOffset = buf_offset;
+        slices[0].size = width * height;
+    } else {
+        slices.resize(height);
+        for (size_t i = 0; i < height; i++) {
+            slices[i].srcOffset = offset + i * spitch;
+            slices[i].dstOffset = buf_offset + i * dpitch;
+            slices[i].size = width;
+        }
+    }
+
+    if (buf != nullptr) {
+        // Memory is pinned, use as staging buffer
+        ggml_vk_sync_buffers(subctx);
+        subctx->s->buffer.copyBuffer(src->buffer, buf->buffer, slices);
+
+        return;
+    }
+    VK_LOG_DEBUG("STAGING");
+
+    // Fall back to staging buffer
+    const size_t copy_size = dpitch * height;
+    if (staging_buffer == nullptr || staging_buffer->size < staging_offset + copy_size) {
+        if (sync_staging) {
+            // Create temporary larger buffer
+            ggml_vk_ensure_sync_staging_buffer(src->device, copy_size);
+
+            staging_buffer = src->device->sync_staging;
+        } else {
+            GGML_ASSERT(false);
+        }
+    }
+
+    ggml_vk_sync_buffers(subctx);
+    subctx->s->buffer.copyBuffer(src->buffer, staging_buffer->buffer, slices);
+
+    deferred_memcpy(dst, staging_buffer->ptr, copy_size, &subctx->out_memcpys);
+}
+
+static void ggml_vk_buffer_read_async(vk_context * subctx, vk_buffer& src, size_t offset, void * dst, size_t size, vk_buffer staging_buffer, size_t staging_offset, bool sync_staging = false) {
+    return ggml_vk_buffer_read_2d_async(subctx, src, offset, dst, size, size, size, 1, staging_buffer, staging_offset, sync_staging);
+}
+
+static void ggml_vk_buffer_read(vk_buffer& src, size_t offset, void * dst, size_t size) {
+    VK_LOG_DEBUG("ggml_vk_buffer_read(" << offset << ", " << size << ")");
+    if(src->memory_property_flags & vk::MemoryPropertyFlagBits::eHostVisible) {
+        GGML_ASSERT(src->memory_property_flags & vk::MemoryPropertyFlagBits::eHostCoherent);
+
+        memcpy(dst, (uint8_t *) src->ptr + offset, size);
+    } else {
+        vk_context * subctx = ggml_vk_create_temporary_context(src->device->transfer_queue);
+        ggml_vk_ctx_begin(src->device, subctx);
+        ggml_vk_buffer_read_async(subctx, src, offset, dst, size, nullptr, 0, true);
+        ggml_vk_ctx_end(subctx);
+
+        ggml_vk_submit(subctx, src->device->fence);
+        VK_CHECK(src->device->device.waitForFences({ src->device->fence }, true, UINT64_MAX), "vk_buffer_read waitForFences");
+        src->device->device.resetFences({ src->device->fence });
+
+        for (auto& cpy : subctx->out_memcpys) {
+            memcpy(cpy.dst, cpy.src, cpy.n);
+        }
+
+        delete subctx;
+    }
+}
+
+static void ggml_vk_buffer_copy_async(vk_context * ctx, vk_buffer& dst, size_t dst_offset, vk_buffer& src, size_t src_offset, size_t size) {
+    VK_LOG_DEBUG("ggml_vk_buffer_copy_async(" << size << ")");
+    // Make sure both buffers are on same device
+    GGML_ASSERT(src->device == dst->device);
+
+    VkBufferCopy bc{ src_offset, dst_offset, size };
+
+    vkCmdCopyBuffer(ctx->s->buffer, src->buffer, dst->buffer, 1, &bc);
+}
+
+static void ggml_vk_buffer_copy(vk_buffer& dst, size_t dst_offset, vk_buffer& src, size_t src_offset, size_t size) {
+    if (src->device == dst->device) {
+        VK_LOG_DEBUG("ggml_vk_buffer_copy(SINGLE_DEVICE, " << size << ")");
+        // Copy within the device
+        vk_context * subctx = ggml_vk_create_temporary_context(src->device->transfer_queue);
+        ggml_vk_ctx_begin(src->device, subctx);
+        ggml_vk_buffer_copy_async(subctx, dst, dst_offset, src, src_offset, size);
+        ggml_vk_ctx_end(subctx);
+        ggml_vk_submit(subctx, src->device->fence);
+        VK_CHECK(src->device->device.waitForFences({ src->device->fence }, true, UINT64_MAX), "vk_buffer_copy waitForFences");
+        src->device->device.resetFences({ src->device->fence });
+
+        delete subctx;
+    } else {
+        VK_LOG_DEBUG("ggml_vk_buffer_copy(MULTI_DEVICE, " << size << ")");
+        // Copy device to device
+        ggml_vk_ensure_sync_staging_buffer(src->device, size);
+        ggml_vk_ensure_sync_staging_buffer(dst->device, size);
+
+        // Copy to src staging buffer
+        ggml_vk_buffer_copy(src->device->sync_staging, 0, src, src_offset, size);
+        // memcpy to dst staging buffer
+        memcpy(dst->device->sync_staging->ptr, src->device->sync_staging->ptr, size);
+        // Copy to dst buffer
+        ggml_vk_buffer_copy(dst, dst_offset, dst->device->sync_staging, 0, size);
+    }
+}
+
+static void ggml_vk_buffer_memset(vk_buffer& dst, size_t offset, uint32_t c, size_t size) {
+    VK_LOG_DEBUG("ggml_vk_buffer_memset(" << offset << ", " << c << ", " << size << ")");
+
+    vk_context * subctx = ggml_vk_create_temporary_context(dst->device->transfer_queue);
+    ggml_vk_ctx_begin(dst->device, subctx);
+    subctx->s->buffer.fillBuffer(dst->buffer, offset, size, c);
+    ggml_vk_ctx_end(subctx);
+
+    ggml_vk_submit(subctx, dst->device->fence);
+    VK_CHECK(dst->device->device.waitForFences({ dst->device->fence }, true, UINT64_MAX), "vk_memset waitForFences");
+    dst->device->device.resetFences({ dst->device->fence });
+
+    delete subctx;
+}
+
+static uint32_t ggml_vk_guess_split_k(int m, int n, int k) {
+    VK_LOG_DEBUG("ggml_vk_guess_split_k(" << m << ", " << n << ", " << k << ")");
+    // if (k > 128 && (m < 128 || n < 128) && m > 2 && n > 2) {
+    //     return 4;
+    // }
+
+    return 1;
+
+    GGML_UNUSED(m); GGML_UNUSED(n); GGML_UNUSED(k);
+}
+
+static vk_pipeline ggml_vk_guess_matmul_pipeline_amd(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, int m, int n, bool aligned) {
+    if (m <= 32 || n <= 32) {
+        return aligned ? mmp->a_s : mmp->s;
+    }
+    return aligned ? mmp->a_m : mmp->m;
+
+    GGML_UNUSED(ctx);
+}
+
+static vk_pipeline ggml_vk_guess_matmul_pipeline_apple(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, bool aligned) {
+    return aligned ? mmp->a_m : mmp->m;
+
+    GGML_UNUSED(ctx);
+}
+
+static vk_pipeline ggml_vk_guess_matmul_pipeline_intel(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, bool aligned) {
+    return aligned ? mmp->a_s : mmp->s;
+
+    GGML_UNUSED(ctx);
+}
+
+static vk_pipeline ggml_vk_guess_matmul_pipeline(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, int m, int n, bool aligned) {
+    VK_LOG_DEBUG("ggml_vk_guess_matmul_pipeline(" << m << ", " << n << ", " << aligned << ")");
+    switch (ctx->device->vendor_id) {
+    case VK_VENDOR_ID_AMD:
+        return ggml_vk_guess_matmul_pipeline_amd(ctx, mmp, m, n, aligned);
+    case VK_VENDOR_ID_APPLE:
+        return ggml_vk_guess_matmul_pipeline_apple(ctx, mmp, aligned);
+    case VK_VENDOR_ID_INTEL:
+        return ggml_vk_guess_matmul_pipeline_intel(ctx, mmp, aligned);
+    default:
+        break;
+    }
+
+    if (m <= 32 || n <= 32) {
+        return aligned ? mmp->a_s : mmp->s;
+    }
+    if (m <= 64 || n <= 64) {
+        return aligned ? mmp->a_m : mmp->m;
+    }
+    return aligned ? mmp->a_l : mmp->l;
+}
+
+static uint32_t ggml_vk_guess_matmul_pipeline_align(ggml_backend_vk_context * ctx, vk_matmul_pipeline& mmp, int m, int n) {
+    VK_LOG_DEBUG("ggml_vk_guess_matmul_pipeline_align(" << m << ", " << n << ")");
+    return ggml_vk_guess_matmul_pipeline(ctx, mmp, m, n, true)->align;
+}
+
+static void ggml_vk_matmul(
+        ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline& pipeline,
+        vk_subbuffer&& a, vk_subbuffer&& b, vk_subbuffer&& d, vk_subbuffer&& split_k_buffer,
+        uint32_t m, uint32_t n, uint32_t k, uint32_t stride_a, uint32_t stride_b, uint32_t stride_d,
+        uint32_t batch_stride_a, uint32_t batch_stride_b, uint32_t batch_stride_d,
+        uint32_t split_k, uint32_t batch, uint32_t ne02, uint32_t ne12, uint32_t broadcast2, uint32_t broadcast3) {
+        VK_LOG_DEBUG("ggml_vk_matmul(a: (" << a.buffer->buffer << ", " << a.offset << ", " << a.size << "), b: (" << b.buffer->buffer << ", " << b.offset << ", " << b.size << "), d: (" << d.buffer->buffer << ", " << d.offset << ", " << d.size << "), split_k: (" << (split_k_buffer.buffer != nullptr ? split_k_buffer.buffer->buffer : VK_NULL_HANDLE) << ", " << split_k_buffer.offset << ", " << split_k_buffer.size << "), m: " << m << ", n: " << n << ", k: " << k << ", stride_a: " << stride_a << ", stride_b: " << stride_b << ", stride_d: " << stride_d << ", batch_stride_a: " << batch_stride_a << ", batch_stride_b: " << batch_stride_b << ", batch_stride_d: " << batch_stride_d << ", split_k: " << split_k << ", batch: " << batch << ", ne02: " << ne02 << ", ne12: " << ne12 << ", broadcast2: " << broadcast2 << ", broadcast3: " << broadcast3 << ")");
+    ggml_vk_sync_buffers(subctx);
+    if (split_k == 1) {
+        const vk_mat_mat_push_constants pc = { m, n, k, stride_a, stride_b, stride_d, batch_stride_a, batch_stride_b, batch_stride_d, k, ne02, ne12, broadcast2, broadcast3 };
+        ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, d }, sizeof(vk_mat_mat_push_constants), &pc, { m, n, batch });
+        return;
+    }
+
+    GGML_ASSERT(batch_stride_d == m * n);
+
+    const vk_mat_mat_push_constants pc1 = { m, n, k, stride_a, stride_b, stride_d, batch_stride_a, batch_stride_b, batch_stride_d, CEIL_DIV(k, split_k), ne02, ne12, broadcast2, broadcast3 };
+    // Make sure enough workgroups get assigned for split k to work
+    ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, split_k_buffer }, sizeof(vk_mat_mat_push_constants), &pc1, { (CEIL_DIV(m, pipeline->wg_denoms[0]) * pipeline->wg_denoms[0]) * split_k, n, batch });
+    ggml_vk_sync_buffers(subctx);
+    const std::array<uint32_t, 2> pc2 = { (uint32_t)(m * n * batch), split_k };
+    ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_matmul_split_k_reduce, { split_k_buffer, d }, pc2.size() * sizeof(uint32_t), pc2.data(), { m * n * batch, 1, 1 });
+}
+
+static void ggml_vk_matmul_id(
+        ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline& pipeline,
+        vk_subbuffer&& a, vk_subbuffer&& b, vk_subbuffer&& d, vk_subbuffer&& ids,
+        uint32_t m, uint32_t n, uint32_t k, uint32_t stride_a, uint32_t stride_b, uint32_t stride_d,
+        uint32_t batch_stride_a, uint32_t batch_stride_b, uint32_t batch_stride_d,
+        uint32_t n_as, uint32_t nei0, uint32_t nei1, uint32_t nbi1, uint32_t ne11) {
+    VK_LOG_DEBUG("ggml_vk_matmul_id(a: (" << a.buffer->buffer << ", " << a.offset << ", " << a.size << "), b: (" << b.buffer->buffer << ", " << b.offset << ", " << b.size << "), d: (" << d.buffer->buffer << ", " << d.offset << ", " << d.size << "), ids: (" << ids.buffer->buffer << ", " << ids.offset << ", " << ids.size << "), " <<
+        "m: " << m << ", n: " << n << ", k: " << k << ", stride_a: " << stride_a << ", stride_b: " << stride_b << ", stride_d: " << stride_d << ", " <<
+        "batch_stride_a: " << batch_stride_a << ", batch_stride_b: " << batch_stride_b << ", batch_stride_d: " << batch_stride_d << ", " <<
+        "n_as: " << n_as << ", nei0: " << nei0 << ", nei1: " << nei1 << ", nbi1: " << nbi1 << ", ne11: " << ne11 << ")");
+    ggml_vk_sync_buffers(subctx);
+    const vk_mat_mat_id_push_constants pc = { m, n, k, stride_a, stride_b, stride_d, batch_stride_a, batch_stride_b, batch_stride_d,
+                                              nei0, nei1, nbi1, ne11 };
+    ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { a, b, d, ids }, sizeof(vk_mat_mat_id_push_constants), &pc, { m, nei1, n_as });
+}
+
+static bool ggml_vk_dim01_contiguous(const ggml_tensor * tensor) {
+    return
+        tensor->nb[0] == ggml_type_size(tensor->type) &&
+        tensor->nb[1] == (tensor->nb[0]*tensor->ne[0])/ggml_blck_size(tensor->type) &&
+        tensor->nb[3] == tensor->nb[2]*tensor->ne[2];
+}
+
+static vk_pipeline ggml_vk_get_cpy_pipeline(ggml_backend_vk_context * ctx, ggml_type from, ggml_type to) {
+    if (from == GGML_TYPE_F32 && to == GGML_TYPE_F32) {
+        return ctx->device->pipeline_cpy_f32_f32;
+    }
+    if (from == GGML_TYPE_F32 && to == GGML_TYPE_F16) {
+        return ctx->device->pipeline_cpy_f32_f16;
+    }
+    if (from == GGML_TYPE_F16 && to == GGML_TYPE_F16) {
+        return ctx->device->pipeline_cpy_f16_f16;
+    }
+
+    std::cerr << "Missing CPY op for types: " << ggml_type_name(from) << " " << ggml_type_name(to) << std::endl;
+    GGML_ASSERT(false);
+}
+
+static void ggml_vk_cpy_to_contiguous(ggml_backend_vk_context * ctx, vk_context * subctx, vk_pipeline pipeline, const ggml_tensor * tensor, vk_subbuffer&& in, vk_subbuffer&& out) {
+    VK_LOG_DEBUG("ggml_vk_cpy_to_contiguous((" << tensor << ", type=" << tensor->type << ", ne0=" << tensor->ne[0] << ", ne1=" << tensor->ne[1] << ", ne2=" << tensor->ne[2] << ", ne3=" << tensor->ne[3] << ", nb0=" << tensor->nb[0] << ", nb1=" << tensor->nb[1] << ", nb2=" << tensor->nb[2] << ", nb3=" << tensor->nb[3] << "), ";
+    std::cerr << "buffer in size=" << in.buffer->size << ", buffer out size=" << out.buffer->size << ")");
+    const int tensor_type_size = ggml_type_size(tensor->type);
+
+    const uint32_t ne = ggml_nelements(tensor);
+
+    const vk_op_unary_push_constants pc = {
+        (uint32_t)ne,
+        (uint32_t)tensor->ne[0], (uint32_t)tensor->ne[1], (uint32_t)tensor->ne[2], (uint32_t)tensor->ne[3], (uint32_t)tensor->nb[0] / tensor_type_size, (uint32_t)tensor->nb[1] / tensor_type_size, (uint32_t)tensor->nb[2] / tensor_type_size, (uint32_t)tensor->nb[3] / tensor_type_size,
+        (uint32_t)tensor->ne[0], (uint32_t)tensor->ne[1], (uint32_t)tensor->ne[2], (uint32_t)tensor->ne[3],                       1                   , (uint32_t)tensor->ne[0]                   , (uint32_t)(tensor->ne[0] * tensor->ne[1]) , (uint32_t)(tensor->ne[0] * tensor->ne[1] * tensor->ne[2]),
+        0,
+        0.0f, 0.0f,
+    };
+    ggml_vk_sync_buffers(subctx);
+    ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { in, out }, sizeof(vk_op_unary_push_constants), &pc, { ne, 1, 1 });
+}
+
+static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    VK_LOG_DEBUG("ggml_vk_mul_mat_q_f16((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
+    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
+    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
+    GGML_ASSERT(ggml_vk_dim01_contiguous(src0) || src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16);  // NOLINT
+    GGML_ASSERT(ggml_vk_dim01_contiguous(src1) || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16);  // NOLINT
+
+    const uint64_t ne00 = src0->ne[0];
+    const uint64_t ne01 = src0->ne[1];
+    const uint64_t ne02 = src0->ne[2];
+    const uint64_t ne03 = src0->ne[3];
+
+    const uint64_t ne10 = src1->ne[0];
+    const uint64_t ne11 = src1->ne[1];
+    const uint64_t ne12 = src1->ne[2];
+    const uint64_t ne13 = src1->ne[3];
+
+    const uint64_t ne20 = dst->ne[0];
+    const uint64_t ne21 = dst->ne[1];
+
+    const uint64_t r2 = ne12 / ne02;
+    const uint64_t r3 = ne13 / ne03;
+
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
+    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
+    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
+
+    vk_buffer d_Qx;
+    size_t qx_buf_offset = 0;
+    vk_buffer d_Qy;
+    size_t qy_buf_offset = 0;
+
+    bool src0_uma = false;
+    bool src1_uma = false;
+
+    if (ctx->device->uma) {
+        ggml_vk_host_get(ctx->device, src0->data, d_Qx, qx_buf_offset);
+        ggml_vk_host_get(ctx->device, src1->data, d_Qy, qy_buf_offset);
+        src0_uma = d_Qx != nullptr;
+        src1_uma = d_Qy != nullptr;
+    }
+
+    const bool x_non_contig = !ggml_vk_dim01_contiguous(src0);
+    const bool y_non_contig = !ggml_vk_dim01_contiguous(src1);
+
+    const bool y_f32_kernel = src1->type == GGML_TYPE_F32 && !y_non_contig;
+
+    vk_matmul_pipeline mmp = ggml_vk_get_mul_mat_mat_pipeline(ctx, src0->type, y_non_contig ? GGML_TYPE_F16 : src1->type);
+
+    const bool qx_needs_dequant = mmp == nullptr || x_non_contig;
+    const bool qy_needs_dequant = (src1->type != GGML_TYPE_F16 && !y_f32_kernel) || y_non_contig;
+
+    if (mmp == nullptr) {
+        // Fall back to dequant + f16 mulmat
+        mmp = ggml_vk_get_mul_mat_mat_pipeline(ctx, GGML_TYPE_F16, y_f32_kernel ? GGML_TYPE_F32 : GGML_TYPE_F16);
+    }
+
+    // Not implemented
+    GGML_ASSERT(y_non_contig || !qy_needs_dequant);  // NOLINT
+
+    const int x_ne = ne01 * ne00;
+    const int y_ne = ne11 * ne10;
+    const int d_ne = ne11 * ne01;
+
+    const uint32_t kpad = ggml_vk_align_size(ne10, ggml_vk_guess_matmul_pipeline_align(ctx, mmp, ne01, ne11));
+    const bool aligned = ne10 == kpad && ne01 > 8 && ne11 > 8;
+
+    const uint32_t split_k = ggml_vk_guess_split_k(ne01, ne11, ne10);
+
+    vk_pipeline pipeline = ggml_vk_guess_matmul_pipeline(ctx, mmp, ne01, ne11, aligned);
+
+    const uint64_t qx_sz = ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type);
+    const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type);
+    const uint64_t x_sz = !qx_needs_dequant ? qx_sz : sizeof(ggml_fp16_t) * x_ne;
+    const uint64_t y_sz = y_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne;
+    const uint64_t d_sz = sizeof(float) * d_ne;
+
+    vk_buffer d_D = extra->buffer_gpu.lock();
+    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
+    GGML_ASSERT(d_D != nullptr);
+    GGML_ASSERT(d_D->size >= d_buf_offset + d_sz * ne02 * ne03);
+    vk_buffer d_X;
+    uint64_t x_buf_offset = 0;
+    vk_buffer d_Y;
+    uint64_t y_buf_offset = 0;
+    if (!src0_uma) {
+        d_Qx = extra_src0->buffer_gpu.lock();
+        qx_buf_offset = extra_src0->offset + src0->view_offs;
+        GGML_ASSERT(d_Qx != nullptr);
+    }
+    if (!src1_uma) {
+        d_Qy = extra_src1->buffer_gpu.lock();
+        qy_buf_offset = extra_src1->offset + src1->view_offs;
+        GGML_ASSERT(d_Qy != nullptr);
+    }
+    if (qx_needs_dequant) {
+        d_X = ctx->prealloc_x;
+        GGML_ASSERT(d_X->size >= x_sz * ne02 * ne03);
+    } else {
+        d_X = d_Qx;
+        x_buf_offset = qx_buf_offset;
+        GGML_ASSERT(qx_sz == x_sz);
+    }
+    if (qy_needs_dequant) {
+        d_Y = ctx->prealloc_y;
+        GGML_ASSERT(d_Y->size >= y_sz * ne02 * ne03);
+    } else {
+        d_Y = d_Qy;
+        y_buf_offset = qy_buf_offset;
+        GGML_ASSERT(qy_sz == y_sz);
+    }
+
+    vk_pipeline to_fp16_vk_0 = nullptr;
+    vk_pipeline to_fp16_vk_1 = nullptr;
+
+    if (x_non_contig) {
+        to_fp16_vk_0 = ggml_vk_get_cpy_pipeline(ctx, src0->type, GGML_TYPE_F16);
+    } else {
+        to_fp16_vk_0 = ggml_vk_get_to_fp16(ctx, src0->type);
+    }
+    if (y_non_contig) {
+        to_fp16_vk_1 = ggml_vk_get_cpy_pipeline(ctx, src1->type, GGML_TYPE_F16);
+    } else {
+        to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type);
+    }
+    GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr);  // NOLINT
+    GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr);  // NOLINT
+
+    // Allocate descriptor sets
+    ggml_pipeline_allocate_descriptor_sets(ctx->device, pipeline, 1);
+    if (qx_needs_dequant) {
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, to_fp16_vk_0, 1);
+    }
+    if (qy_needs_dequant) {
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, to_fp16_vk_1, 1);
+    }
+    if (split_k > 1) {
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, ctx->device->pipeline_matmul_split_k_reduce, 1);
+    }
+
+    if (x_non_contig) {
+        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE });
+    } else if (qx_needs_dequant) {
+        const std::vector<uint32_t> pc = { (uint32_t)ne01, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)(ggml_nelements(src0)) };
+        ggml_vk_sync_buffers(subctx);
+        ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, { { d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, { d_X, 0, x_sz * ne02 * ne03 } }, pc.size() * sizeof(uint32_t), pc.data(), { (uint32_t)(x_ne * ne02 * ne03), 1, 1});
+    }
+    if (y_non_contig) {
+        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE });
+    }
+
+    uint32_t stride_batch_x = ne00*ne01;
+    uint32_t stride_batch_y = ne10*ne11;
+
+    if (!ggml_vk_dim01_contiguous(src0) && !qx_needs_dequant) {
+        stride_batch_x = src0->nb[0] / ggml_type_size(src0->type);
+    }
+
+    if (!ggml_vk_dim01_contiguous(src1) && !qy_needs_dequant) {
+        stride_batch_y = src1->nb[0] / ggml_type_size(src1->type);
+    }
+
+    // compute
+    ggml_vk_matmul(
+        ctx, subctx, pipeline,
+        { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz * ne12 * ne13 },
+        { d_D, d_buf_offset, d_sz * ne12 * ne13 }, { ctx->prealloc_split_k, 0, d_sz * ne12 * ne13 * split_k },
+        ne01, ne11, ne10,
+        ne10, ne10, ne01, stride_batch_x, stride_batch_y, ne20*ne21,
+        split_k, ne12*ne13, ne02, ne12, r2, r3
+    );  // NOLINT
+}
+
+static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    VK_LOG_DEBUG("ggml_vk_mul_mat_vec_q_f16((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
+    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
+    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
+    GGML_ASSERT(ggml_vk_dim01_contiguous(src0) || src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16);  // NOLINT
+    GGML_ASSERT(ggml_vk_dim01_contiguous(src1) || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16);  // NOLINT
+
+    const uint64_t ne00 = src0->ne[0];
+    const uint64_t ne01 = src0->ne[1];
+    const uint64_t ne02 = src0->ne[2];
+    const uint64_t ne03 = src0->ne[3];
+
+    const uint64_t ne10 = src1->ne[0];
+    const uint64_t ne11 = src1->ne[1];
+    const uint64_t ne12 = src1->ne[2];
+    const uint64_t ne13 = src1->ne[3];
+
+    GGML_ASSERT(ne11 == 1);
+
+    const uint64_t ne20 = dst->ne[0];
+    const uint64_t ne21 = dst->ne[1];
+    const uint64_t ne22 = dst->ne[2];
+    const uint64_t ne23 = dst->ne[3];
+
+    const uint64_t r2 = ne12 / ne02;
+    const uint64_t r3 = ne13 / ne03;
+
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
+    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
+    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
+
+    vk_buffer d_Qx;
+    size_t qx_buf_offset = 0;
+    vk_buffer d_Qy;
+    size_t qy_buf_offset = 0;
+
+    bool src0_uma = false;
+    bool src1_uma = false;
+
+    if (ctx->device->uma) {
+        ggml_vk_host_get(ctx->device, src0->data, d_Qx, qx_buf_offset);
+        ggml_vk_host_get(ctx->device, src1->data, d_Qy, qy_buf_offset);
+        src0_uma = d_Qx != nullptr;
+        src1_uma = d_Qy != nullptr;
+    }
+
+    const bool x_non_contig = !ggml_vk_dim01_contiguous(src0);
+    const bool y_non_contig = !ggml_vk_dim01_contiguous(src1);
+
+    const bool f16_f32_kernel = src1->type == GGML_TYPE_F32;
+
+    const bool qx_needs_dequant = x_non_contig;
+    const bool qy_needs_dequant = (src1->type != GGML_TYPE_F16 && !f16_f32_kernel) || y_non_contig;
+
+    // Not implemented
+    GGML_ASSERT(y_non_contig || !qy_needs_dequant);  // NOLINT
+
+    const uint64_t x_ne = ne01 * ne00;
+    const uint64_t y_ne = ne11 * ne10;
+    const uint64_t d_ne = ne11 * ne01;
+
+    const uint64_t qx_sz = ggml_vk_align_size(ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type), ctx->device->properties.limits.minStorageBufferOffsetAlignment);
+    const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type);
+    const uint64_t x_sz = x_non_contig ? ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) : qx_sz;
+    const uint64_t y_sz = f16_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne;
+    const uint64_t d_sz = sizeof(float) * d_ne;
+
+    vk_buffer d_D = extra->buffer_gpu.lock();
+    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
+    GGML_ASSERT(d_D != nullptr);
+    vk_buffer d_X;
+    uint64_t x_buf_offset = 0;
+    vk_buffer d_Y;
+    uint64_t y_buf_offset = 0;
+    if(!src0_uma) {
+        d_Qx = extra_src0->buffer_gpu.lock();
+        qx_buf_offset = extra_src0->offset + src0->view_offs;
+        GGML_ASSERT(d_Qx != nullptr);
+    }
+    if(!src1_uma) {
+        d_Qy = extra_src1->buffer_gpu.lock();
+        qy_buf_offset = extra_src1->offset + src1->view_offs;
+        GGML_ASSERT(d_Qy != nullptr);
+    }
+    if (qx_needs_dequant) {
+        d_X = ctx->prealloc_x;
+    } else {
+        d_X = d_Qx;
+        x_buf_offset = qx_buf_offset;
+        GGML_ASSERT(qx_sz == x_sz);
+    }
+    if (qy_needs_dequant) {
+        d_Y = ctx->prealloc_y;
+    } else {
+        d_Y = d_Qy;
+        y_buf_offset = qy_buf_offset;
+        GGML_ASSERT(qy_sz == y_sz);
+    }
+
+    vk_pipeline to_fp16_vk_0 = nullptr;
+    vk_pipeline to_fp16_vk_1 = nullptr;
+    if (x_non_contig) {
+        to_fp16_vk_0 = ggml_vk_get_cpy_pipeline(ctx, src0->type, src0->type);
+    }
+    if (y_non_contig) {
+        to_fp16_vk_1 = ggml_vk_get_cpy_pipeline(ctx, src1->type, src1->type);
+    } else {
+        to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type);
+    }
+    vk_pipeline dmmv = ggml_vk_get_dequantize_mul_mat_vec(ctx, src0->type, src1->type);
+    GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr);  // NOLINT
+    GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr);  // NOLINT
+    GGML_ASSERT(dmmv != nullptr);
+
+    // Allocate descriptor sets
+    if (qx_needs_dequant) {
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, to_fp16_vk_0, 1);
+    }
+    if (qy_needs_dequant) {
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, to_fp16_vk_1, y_non_contig ? 1 : ne12 * ne13);
+    }
+    ggml_pipeline_allocate_descriptor_sets(ctx->device, dmmv, ne12 * ne13);
+
+    if (x_non_contig) {
+        GGML_ASSERT(x_sz == ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment));
+        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE });
+    }
+    if (y_non_contig) {
+        GGML_ASSERT(y_sz == ggml_type_size(src1->type) * y_ne);
+        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE });
+    }
+
+    uint32_t stride_batch_x = ne00*ne01;
+    uint32_t stride_batch_y = ne10*ne11;
+
+    if (!ggml_vk_dim01_contiguous(src0) && !qx_needs_dequant) {
+        stride_batch_x = src0->nb[0] / ggml_type_size(src0->type);
+    }
+
+    if (!ggml_vk_dim01_contiguous(src1) && !qy_needs_dequant) {
+        stride_batch_y = src1->nb[0] / ggml_type_size(src1->type);
+    }
+
+    const uint32_t max_groups_x = ctx->device->properties.limits.maxComputeWorkGroupCount[0];
+
+    uint32_t groups_x = ne01;
+    uint32_t groups_z = 1;
+
+    if (ne01 > max_groups_x) {
+        groups_z = 64;
+        groups_x /= groups_z;
+    }
+
+    // compute
+    const vk_mat_vec_push_constants pc = {
+        (uint32_t)ne00, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne01,
+        stride_batch_x, stride_batch_y, (uint32_t)(ne20*ne21),
+        (uint32_t)ne02, (uint32_t)ne12, (uint32_t)r2, (uint32_t)r3,
+    };
+    ggml_vk_sync_buffers(subctx);
+    ggml_vk_dispatch_pipeline(ctx, subctx, dmmv,
+                              { { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz * ne12 * ne13 }, { d_D, d_buf_offset, d_sz * ne22 * ne23} },
+                              sizeof(vk_mat_vec_push_constants), &pc, { groups_x, (uint32_t)(ne12 * ne13), groups_z });
+}
+
+static void ggml_vk_mul_mat_vec_p021_f16_f32(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    VK_LOG_DEBUG("ggml_vk_mul_mat_p021_f16_f32(" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
+    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
+    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
+    GGML_ASSERT(ggml_is_permuted(src0) && ggml_is_permuted(src1));
+    GGML_ASSERT(src0->nb[0] <= src0->nb[1] && src0->nb[2] <= src0->nb[3]);  // NOLINT
+    GGML_ASSERT(src1->nb[0] <= src1->nb[1] && src1->nb[2] <= src1->nb[3]);  // NOLINT
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    const uint64_t ne00 = src0->ne[0];
+    const uint64_t ne01 = src0->ne[1];
+    const uint64_t ne02 = src0->ne[2];
+    // const uint64_t ne03 = src0->ne[3];
+
+    const uint64_t ne10 = src1->ne[0];
+    const uint64_t ne11 = src1->ne[1];
+    const uint64_t ne12 = src1->ne[2];
+    // const uint64_t ne13 = src1->ne[3];
+
+    GGML_ASSERT(ne11 == 1);
+
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
+    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
+    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
+
+    vk_buffer d_Qy;
+    size_t qy_buf_offset = 0;
+
+    bool src1_uma = false;
+
+    if (ctx->device->uma) {
+        ggml_vk_host_get(ctx->device, src1->data, d_Qy, qy_buf_offset);
+        src1_uma = d_Qy != nullptr;
+    }
+
+    const uint64_t x_ne = ne00 * ne01 * ne02;
+    const uint64_t y_ne = ne10 * ne11 * ne12;
+    const uint64_t d_ne = ne01 * ne11 * ne12;
+
+    const uint64_t qx_sz = ggml_vk_align_size(ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type), ctx->device->properties.limits.minStorageBufferOffsetAlignment);
+    const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type);
+    const uint64_t d_sz = sizeof(float) * d_ne;
+
+    vk_buffer d_D = extra->buffer_gpu.lock();
+    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
+    GGML_ASSERT(d_D != nullptr);
+    vk_buffer d_Qx = extra_src0->buffer_gpu.lock();
+    const uint64_t qx_buf_offset = extra_src0->offset + src0->view_offs;
+    GGML_ASSERT(d_Qx != nullptr);
+    if (!src1_uma) {
+        d_Qy = extra_src1->buffer_gpu.lock();
+        qy_buf_offset = extra_src1->offset + src1->view_offs;
+        GGML_ASSERT(d_Qx != nullptr);
+    }
+
+    // Allocate descriptor sets
+    ggml_pipeline_allocate_descriptor_sets(ctx->device, ctx->device->pipeline_mul_mat_vec_p021_f16_f32, 1);
+
+    const uint64_t qy_buffer_offset = (qy_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment;
+    const uint64_t qy_shader_offset = qy_buf_offset - qy_buffer_offset;
+
+    const uint64_t d_buffer_offset = (d_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment;
+    const uint64_t d_shader_offset = d_buf_offset - d_buffer_offset;
+
+    // compute
+    const std::array<uint32_t, 6> pc = { (uint32_t)ne00, (uint32_t)ne01, (uint32_t)ne02, (uint32_t)ne12, (uint32_t)(qy_shader_offset / ggml_type_size(src1->type)), (uint32_t)(d_shader_offset / ggml_type_size(dst->type)) };
+    ggml_vk_sync_buffers(subctx);
+    ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_mul_mat_vec_p021_f16_f32, { { d_Qx, qx_buf_offset, qx_sz }, { d_Qy, qy_buffer_offset, qy_sz + qy_shader_offset }, { d_D, d_buffer_offset, d_sz + d_shader_offset } }, 6 * sizeof(uint32_t), &pc, { 1, (uint32_t)ne01, (uint32_t)ne12 });
+}
+
+static void ggml_vk_mul_mat_vec_nc_f16_f32(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    VK_LOG_DEBUG("ggml_vk_mul_mat_nc_f16_f32((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
+    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
+    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
+    GGML_ASSERT(!ggml_is_transposed(src0));
+    GGML_ASSERT(!ggml_is_transposed(src1));
+    GGML_ASSERT(!ggml_is_permuted(src0));
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    const uint64_t ne00 = src0->ne[0];
+    const uint64_t ne01 = src0->ne[1];
+    const uint64_t ne02 = src0->ne[2];
+    // const uint64_t ne03 = src0->ne[3];
+
+    const uint64_t nb01 = src0->nb[1];
+    const uint64_t nb02 = src0->nb[2];
+
+    // const uint64_t ne10 = src1->ne[0];
+    const uint64_t ne11 = src1->ne[1];
+    const uint64_t ne12 = src1->ne[2];
+    // const uint64_t ne13 = src1->ne[3];
+
+    GGML_ASSERT(ne11 == 1);
+
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
+    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
+    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
+
+    vk_buffer d_Qy = nullptr;
+    size_t qy_buf_offset = 0;
+
+    bool src1_uma = false;
+
+    if (ctx->device->uma) {
+        ggml_vk_host_get(ctx->device, src1->data, d_Qy, qy_buf_offset);
+        src1_uma = d_Qy != nullptr;
+    }
+
+    const uint64_t d_ne = ne01 * ne11 * ne12;
+
+    const uint32_t row_stride_x = nb01 / sizeof(ggml_fp16_t);
+    const uint32_t channel_stride_x = nb02 / sizeof(ggml_fp16_t);
+
+    const uint64_t qx_sz = ggml_nbytes(src0);
+    const uint64_t qy_sz = ggml_nbytes(src1);
+    const uint64_t d_sz = sizeof(float) * d_ne;
+
+    vk_buffer d_D = extra->buffer_gpu.lock();
+    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
+    GGML_ASSERT(d_D != nullptr);
+    vk_buffer d_Qx = extra_src0->buffer_gpu.lock();
+    const uint64_t qx_buf_offset = extra_src0->offset + src0->view_offs;
+    GGML_ASSERT(d_Qx != nullptr);
+    if (!src1_uma) {
+        d_Qy = extra_src1->buffer_gpu.lock();
+        qy_buf_offset = extra_src1->offset + src1->view_offs;
+        GGML_ASSERT(d_Qx != nullptr);
+    }
+
+    // Allocate descriptor sets
+    ggml_pipeline_allocate_descriptor_sets(ctx->device, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, 1);
+
+    const uint64_t qy_buffer_offset = (qy_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment;
+    const uint64_t qy_shader_offset = qy_buf_offset - qy_buffer_offset;
+
+    const uint64_t d_buffer_offset = (d_buf_offset / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment;
+    const uint64_t d_shader_offset = d_buf_offset - d_buffer_offset;
+
+    // compute
+    const std::array<uint32_t, 7> pc = { (uint32_t)ne00, (uint32_t)ne01, row_stride_x, channel_stride_x, (uint32_t)(ne12 / ne02), (uint32_t)(qy_shader_offset / ggml_type_size(src1->type)), (uint32_t)(d_shader_offset / ggml_type_size(dst->type)) };
+    ggml_vk_sync_buffers(subctx);
+    ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_mul_mat_vec_nc_f16_f32, { { d_Qx, qx_buf_offset, qx_sz }, { d_Qy, qy_buffer_offset, qy_sz + qy_shader_offset }, { d_D, d_buffer_offset, d_sz + d_shader_offset } }, 7 * sizeof(uint32_t), &pc, { 1, (uint32_t)ne01, (uint32_t)ne12 });
+}
+
+static void ggml_vk_mul_mat(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    VK_LOG_DEBUG("ggml_vk_mul_mat(" << src0 << ", " << src1 << ", " << dst << ")");
+    if (src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && dst->ne[1] == 1) {
+        ggml_vk_mul_mat_vec_p021_f16_f32(ctx, subctx, src0, src1, dst);
+    } else if (src0->type == GGML_TYPE_F16 && !ggml_is_contiguous(src0) && !ggml_is_transposed(src1) && dst->ne[1] == 1) {
+        ggml_vk_mul_mat_vec_nc_f16_f32(ctx, subctx, src0, src1, dst);
+    } else if (dst->ne[1] == 1 && (src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type))) {
+        ggml_vk_mul_mat_vec_q_f16(ctx, subctx, src0, src1, dst);
+    } else {
+        ggml_vk_mul_mat_q_f16(ctx, subctx, src0, src1, dst);
+    }
+}
+
+static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * ids, ggml_tensor * dst) {
+    VK_LOG_DEBUG("ggml_vk_mul_mat_id_q_f16((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
+    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
+    std::cerr << "), (" << ids << ", name=" << ids->name << ", type=" << ids->type << ", ne0=" << ids->ne[0] << ", ne1=" << ids->ne[1] << ", ne2=" << ids->ne[2] << ", ne3=" << ids->ne[3] << ", nb0=" << ids->nb[0] << ", nb1=" << ids->nb[1] << ", nb2=" << ids->nb[2] << ", nb3=" << ids->nb[3];
+    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
+    GGML_ASSERT(ggml_vk_dim01_contiguous(src1) || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16);  // NOLINT
+    GGML_ASSERT(ids->type == GGML_TYPE_I32);
+
+    const uint64_t ne00 = src0->ne[0];
+    const uint64_t ne01 = src0->ne[1];
+    const uint64_t ne02 = src0->ne[2];
+    const uint64_t ne03 = src0->ne[3];
+
+    const uint64_t ne10 = src1->ne[0];
+    const uint64_t ne11 = src1->ne[1];
+    const uint64_t ne12 = src1->ne[2];
+    const uint64_t ne13 = src1->ne[3];
+
+    const uint64_t nei0 = ids->ne[0];
+    const uint64_t nei1 = ids->ne[1];
+    GGML_ASSERT(nei0 * nei1 <= 2048);
+
+    const uint32_t nbi1 = ids->nb[1];
+    const uint32_t nbi2 = ids->nb[2];
+
+    const uint64_t ne20 = dst->ne[0];
+    const uint64_t ne21 = dst->ne[1];
+    const uint64_t ne22 = dst->ne[2];
+    const uint64_t ne23 = dst->ne[3];
+
+    const uint64_t n_as = ne02;
+
+    GGML_ASSERT(n_as <= 8);
+
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
+    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
+    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
+    ggml_tensor_extra_gpu * extra_ids = (ggml_tensor_extra_gpu *) ids->extra;
+
+    vk_buffer d_Qx;
+    size_t qx_buf_offset = 0;
+    vk_buffer d_Qy;
+    size_t qy_buf_offset = 0;
+    vk_buffer d_ids;
+    size_t ids_buf_offset = 0;
+
+    bool src0_uma = false;
+    bool src1_uma = false;
+    bool ids_uma = false;
+
+    if (ctx->device->uma) {
+        ggml_vk_host_get(ctx->device, src0->data, d_Qx, qx_buf_offset);
+        ggml_vk_host_get(ctx->device, src1->data, d_Qy, qy_buf_offset);
+        ggml_vk_host_get(ctx->device, ids->data, d_ids, ids_buf_offset);
+        src0_uma = d_Qx != nullptr;
+        src1_uma = d_Qy != nullptr;
+        ids_uma = d_ids != nullptr;
+    }
+
+    const bool x_non_contig = !ggml_vk_dim01_contiguous(src0);
+    const bool y_non_contig = !ggml_vk_dim01_contiguous(src1);
+
+    const bool y_f32_kernel = src1->type == GGML_TYPE_F32 && !y_non_contig;
+
+    vk_matmul_pipeline mmp = ggml_vk_get_mul_mat_mat_id_pipeline(ctx, src0->type, y_non_contig ? GGML_TYPE_F16 : src1->type);
+
+    const bool qx_needs_dequant = mmp == nullptr || x_non_contig;
+    const bool qy_needs_dequant = (src1->type != GGML_TYPE_F16 && !y_f32_kernel) || y_non_contig;
+
+    if (mmp == nullptr) {
+        GGML_ASSERT(false);
+    }
+
+    // Not implemented
+    GGML_ASSERT(y_non_contig || !qy_needs_dequant);  // NOLINT
+
+    const uint64_t x_ne = ne01 * ne00;
+    const uint64_t y_ne = ne11 * ne10;
+    const uint64_t d_ne = ne21 * ne20;
+
+    const uint32_t kpad = ggml_vk_align_size(ne10, ggml_vk_guess_matmul_pipeline_align(ctx, mmp, ne01, nei1));
+    const bool aligned = ne10 == kpad && ne01 > 8 && nei1 > 8;
+
+    vk_pipeline pipeline = ggml_vk_guess_matmul_pipeline(ctx, mmp, ne01, nei1, aligned);
+
+    const uint64_t qx_sz = ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type);
+    const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type);
+    const uint64_t x_sz = !qx_needs_dequant ? qx_sz : sizeof(ggml_fp16_t) * x_ne;
+    const uint64_t y_sz = y_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne;
+    const uint64_t ids_sz = nbi2;
+    const uint64_t d_sz = sizeof(float) * d_ne;
+
+    vk_buffer d_D = extra->buffer_gpu.lock();
+    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
+    GGML_ASSERT(d_D != nullptr);
+    vk_buffer d_X;
+    uint64_t x_buf_offset = 0;
+    vk_buffer d_Y;
+    uint64_t y_buf_offset = 0;
+    if (!src0_uma) {
+        d_Qx = extra_src0->buffer_gpu.lock();
+        qx_buf_offset = extra_src0->offset + src0->view_offs;
+        GGML_ASSERT(d_Qx != nullptr);
+    }
+    if (!src1_uma) {
+        d_Qy = extra_src1->buffer_gpu.lock();
+        qy_buf_offset = extra_src1->offset + src1->view_offs;
+        GGML_ASSERT(d_Qy != nullptr);
+    }
+    if (!ids_uma) {
+        d_ids = extra_ids->buffer_gpu.lock();
+        ids_buf_offset = extra_ids->offset + ids->view_offs;
+        GGML_ASSERT(d_ids != nullptr);
+    }
+    if (qx_needs_dequant) {
+        d_X = ctx->prealloc_x;
+        GGML_ASSERT(d_X->size >= x_sz * ne02 * ne03);
+    } else {
+        d_X = d_Qx;
+        x_buf_offset = qx_buf_offset;
+        GGML_ASSERT(qx_sz == x_sz);
+    }
+    if (qy_needs_dequant) {
+        d_Y = ctx->prealloc_y;
+        GGML_ASSERT(d_Y->size >= y_sz * ne02 * ne03);
+    } else {
+        d_Y = d_Qy;
+        y_buf_offset = qy_buf_offset;
+        GGML_ASSERT(qy_sz == y_sz);
+    }
+
+    vk_pipeline to_fp16_vk_0 = nullptr;
+    vk_pipeline to_fp16_vk_1 = nullptr;
+
+    if (x_non_contig) {
+        to_fp16_vk_0 = ggml_vk_get_cpy_pipeline(ctx, src0->type, GGML_TYPE_F16);
+    } else {
+        to_fp16_vk_0 = ggml_vk_get_to_fp16(ctx, src0->type);
+    }
+    if (y_non_contig) {
+        to_fp16_vk_1 = ggml_vk_get_cpy_pipeline(ctx, src1->type, GGML_TYPE_F16);
+    } else {
+        to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type);
+    }
+    GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr);  // NOLINT
+    GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr);  // NOLINT
+
+    // Allocate descriptor sets
+    ggml_pipeline_allocate_descriptor_sets(ctx->device, pipeline, 1);
+    if (qx_needs_dequant) {
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, to_fp16_vk_0, 1);
+    }
+    if (qy_needs_dequant) {
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, to_fp16_vk_1, 1);
+    }
+
+    if (x_non_contig) {
+        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE });
+    } else if (qx_needs_dequant) {
+        const std::vector<uint32_t> pc = { (uint32_t)ne01, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)(ggml_nelements(src0)) };
+        ggml_vk_sync_buffers(subctx);
+        ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, { { d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, { d_X, 0, x_sz * ne02 * ne03 } }, pc.size() * sizeof(uint32_t), pc.data(), { (uint32_t)(x_ne * ne02 * ne03), 1, 1});
+    }
+    if (y_non_contig) {
+        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE });
+    }
+
+    uint32_t stride_batch_x = ne00*ne01;
+    uint32_t stride_batch_y = ne10*ne11;
+
+    if (!ggml_vk_dim01_contiguous(src0) && !qx_needs_dequant) {
+        stride_batch_x = src0->nb[0] / ggml_type_size(src0->type);
+    }
+
+    if (!ggml_vk_dim01_contiguous(src1) && !qy_needs_dequant) {
+        stride_batch_y = src1->nb[0] / ggml_type_size(src1->type);
+    }
+
+    // compute
+    ggml_vk_matmul_id(
+        ctx, subctx, pipeline,
+        { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz * ne12 * ne13 },
+        { d_D, d_buf_offset, d_sz * ne22 * ne23 }, { d_ids, ids_buf_offset, ids_sz },
+        ne01, ne21, ne10, ne10, ne10, ne01,
+        stride_batch_x, stride_batch_y, ne20*ne21,
+        n_as, nei0, nei1, nbi1 / ggml_type_size(ids->type), ne11
+    );  // NOLINT
+}
+
+static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * ids, ggml_tensor * dst) {
+    VK_LOG_DEBUG("ggml_vk_mul_mat_vec_id_q_f16((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
+    std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
+    std::cerr << "), (" << ids << ", name=" << ids->name << ", type=" << ids->type << ", ne0=" << ids->ne[0] << ", ne1=" << ids->ne[1] << ", ne2=" << ids->ne[2] << ", ne3=" << ids->ne[3] << ", nb0=" << ids->nb[0] << ", nb1=" << ids->nb[1] << ", nb2=" << ids->nb[2] << ", nb3=" << ids->nb[3];
+    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "),)");
+    GGML_ASSERT(ggml_vk_dim01_contiguous(src0) || src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16);  // NOLINT
+    GGML_ASSERT(ggml_vk_dim01_contiguous(src1) || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16);  // NOLINT
+    GGML_ASSERT(ids->type == GGML_TYPE_I32);
+
+    const uint64_t ne00 = src0->ne[0];
+    const uint64_t ne01 = src0->ne[1];
+    const uint64_t ne02 = src0->ne[2];
+    const uint64_t ne03 = src0->ne[3];
+
+    const uint64_t ne10 = src1->ne[0];
+    const uint64_t ne11 = src1->ne[1];
+    const uint64_t ne12 = src1->ne[2];
+    const uint64_t ne13 = src1->ne[3];
+
+    const uint64_t nei0 = ids->ne[0];
+    const uint64_t nei1 = ids->ne[1];
+
+    const uint64_t nbi2 = ids->nb[2];
+
+    GGML_ASSERT(nei1 == 1);
+
+    const uint64_t ne20 = dst->ne[0];
+    const uint64_t ne21 = dst->ne[1];
+    const uint64_t ne22 = dst->ne[2];
+    const uint64_t ne23 = dst->ne[3];
+
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
+    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
+    ggml_tensor_extra_gpu * extra_src1 = (ggml_tensor_extra_gpu *) src1->extra;
+    ggml_tensor_extra_gpu * extra_ids = (ggml_tensor_extra_gpu *) ids->extra;
+
+    vk_buffer d_Qx;
+    size_t qx_buf_offset = 0;
+    vk_buffer d_Qy;
+    size_t qy_buf_offset = 0;
+    vk_buffer d_ids;
+    size_t ids_buf_offset = 0;
+
+    bool src0_uma = false;
+    bool src1_uma = false;
+    bool ids_uma = false;
+
+    if (ctx->device->uma) {
+        ggml_vk_host_get(ctx->device, src0->data, d_Qx, qx_buf_offset);
+        ggml_vk_host_get(ctx->device, src1->data, d_Qy, qy_buf_offset);
+        ggml_vk_host_get(ctx->device, ids->data, d_ids, ids_buf_offset);
+        src0_uma = d_Qx != nullptr;
+        src1_uma = d_Qy != nullptr;
+        ids_uma = d_ids != nullptr;
+    }
+
+    const bool x_non_contig = !ggml_vk_dim01_contiguous(src0);
+    const bool y_non_contig = !ggml_vk_dim01_contiguous(src1);
+
+    const bool f16_f32_kernel = src1->type == GGML_TYPE_F32;
+
+    const bool qx_needs_dequant = x_non_contig;
+    const bool qy_needs_dequant = (src1->type != GGML_TYPE_F16 && !f16_f32_kernel) || y_non_contig;
+
+    // Not implemented
+    GGML_ASSERT(y_non_contig || !qy_needs_dequant);  // NOLINT
+
+    const uint64_t x_ne = ne01 * ne00;
+    const uint64_t y_ne = ne11 * ne10;
+    const uint64_t d_ne = ne21 * ne20;
+
+    const uint64_t qx_sz = ggml_vk_align_size(ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type), ctx->device->properties.limits.minStorageBufferOffsetAlignment);
+    const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type);
+    const uint64_t x_sz = x_non_contig ? ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) : qx_sz;
+    const uint64_t y_sz = f16_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne;
+    const uint64_t ids_sz = nbi2;
+    const uint64_t d_sz = sizeof(float) * d_ne;
+
+    vk_buffer d_D = extra->buffer_gpu.lock();
+    const uint64_t d_buf_offset = extra->offset + dst->view_offs;
+    GGML_ASSERT(d_D != nullptr);
+    vk_buffer d_X;
+    uint64_t x_buf_offset = 0;
+    vk_buffer d_Y;
+    uint64_t y_buf_offset = 0;
+    if(!src0_uma) {
+        d_Qx = extra_src0->buffer_gpu.lock();
+        qx_buf_offset = extra_src0->offset + src0->view_offs;
+        GGML_ASSERT(d_Qx != nullptr);
+    }
+    if(!src1_uma) {
+        d_Qy = extra_src1->buffer_gpu.lock();
+        qy_buf_offset = extra_src1->offset + src1->view_offs;
+        GGML_ASSERT(d_Qy != nullptr);
+    }
+    if(!ids_uma) {
+        d_ids = extra_ids->buffer_gpu.lock();
+        ids_buf_offset = extra_ids->offset + ids->view_offs;
+        GGML_ASSERT(d_ids != nullptr);
+    }
+    if (qx_needs_dequant) {
+        d_X = ctx->prealloc_x;
+    } else {
+        d_X = d_Qx;
+        x_buf_offset = qx_buf_offset;
+        GGML_ASSERT(qx_sz == x_sz);
+    }
+    if (qy_needs_dequant) {
+        d_Y = ctx->prealloc_y;
+    } else {
+        d_Y = d_Qy;
+        y_buf_offset = qy_buf_offset;
+        GGML_ASSERT(qy_sz == y_sz);
+    }
+
+    vk_pipeline to_fp16_vk_0 = nullptr;
+    vk_pipeline to_fp16_vk_1 = nullptr;
+    if (x_non_contig) {
+        to_fp16_vk_0 = ggml_vk_get_cpy_pipeline(ctx, src0->type, src0->type);
+    }
+    if (y_non_contig) {
+        to_fp16_vk_1 = ggml_vk_get_cpy_pipeline(ctx, src1->type, src1->type);
+    } else {
+        to_fp16_vk_1 = ggml_vk_get_to_fp16(ctx, src1->type);
+    }
+    vk_pipeline dmmv = ggml_vk_get_dequantize_mul_mat_vec_id(ctx, src0->type, src1->type);
+    GGML_ASSERT(!qx_needs_dequant || to_fp16_vk_0 != nullptr);  // NOLINT
+    GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr);  // NOLINT
+    GGML_ASSERT(dmmv != nullptr);
+
+    // Allocate descriptor sets
+    if (qx_needs_dequant) {
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, to_fp16_vk_0, 1);
+    }
+    if (qy_needs_dequant) {
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, to_fp16_vk_1, y_non_contig ? 1 : ne12 * ne13);
+    }
+    ggml_pipeline_allocate_descriptor_sets(ctx->device, dmmv, ne12 * ne13);
+
+    if (x_non_contig) {
+        GGML_ASSERT(x_sz == ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment));
+        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, { d_Qx, qx_buf_offset, VK_WHOLE_SIZE }, { d_X, 0, VK_WHOLE_SIZE });
+    }
+    if (y_non_contig) {
+        GGML_ASSERT(y_sz == ggml_type_size(src1->type) * y_ne);
+        ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_1, src1, { d_Qy, qy_buf_offset, VK_WHOLE_SIZE }, { d_Y, 0, VK_WHOLE_SIZE });
+    }
+
+    uint32_t stride_batch_y = ne10*ne11;
+
+    if (!ggml_vk_dim01_contiguous(src1) && !qy_needs_dequant) {
+        stride_batch_y = src1->nb[0] / ggml_type_size(src1->type);
+    }
+
+    const uint32_t max_groups_x = ctx->device->properties.limits.maxComputeWorkGroupCount[0];
+
+    uint32_t groups_x = ne01;
+    uint32_t groups_z = 1;
+
+    if (ne01 > max_groups_x) {
+        groups_z = 64;
+        groups_x /= groups_z;
+    }
+
+    // compute
+    const vk_mat_vec_id_push_constants pc = {
+        (uint32_t)ne00, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne01,
+        (uint32_t)x_ne, stride_batch_y, (uint32_t)(ne20*ne21),
+        (uint32_t)nei0, (uint32_t)ne11,
+    };
+    ggml_vk_sync_buffers(subctx);
+    ggml_vk_dispatch_pipeline(ctx, subctx, dmmv,
+        { { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz * ne12 * ne13 }, { d_D, d_buf_offset, d_sz * ne22 * ne23}, { d_ids, ids_buf_offset, ids_sz } },
+        sizeof(vk_mat_vec_id_push_constants), &pc, { groups_x, (uint32_t)nei0, groups_z });
+}
+
+static void ggml_vk_mul_mat_id(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst) {
+    VK_LOG_DEBUG("ggml_vk_mul_mat_id(" << src0 << ", " << src1 << ", " << src2 << ", " << dst << ")");
+    if (src2->ne[1] == 1 && (src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16 || ggml_is_quantized(src0->type))) {
+        ggml_vk_mul_mat_vec_id_q_f16(ctx, subctx, src0, src1, src2, dst);
+    } else {
+        ggml_vk_mul_mat_id_q_f16(ctx, subctx, src0, src1, src2, dst);
+    }
+}
+
+static void ggml_vk_op_repeat(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    // guaranteed to be an integer due to the check in ggml_can_repeat
+    const uint64_t ne0 = dst->ne[0];
+    const uint64_t ne1 = dst->ne[1];
+    const uint64_t ne2 = dst->ne[2];
+    const uint64_t ne3 = dst->ne[3];
+
+    const uint64_t ne00 = src0->ne[0];
+    const uint64_t ne01 = src0->ne[1];
+    const uint64_t ne02 = src0->ne[2];
+    const uint64_t ne03 = src0->ne[3];
+
+    const uint64_t nb0 = dst->nb[0];
+    const uint64_t nb1 = dst->nb[1];
+    const uint64_t nb2 = dst->nb[2];
+    const uint64_t nb3 = dst->nb[3];
+
+    const uint64_t nb00 = src0->nb[0];
+    const uint64_t nb01 = src0->nb[1];
+    const uint64_t nb02 = src0->nb[2];
+    const uint64_t nb03 = src0->nb[3];
+
+    const uint64_t nr0 = ne0/ne00;
+    const uint64_t nr1 = ne1/ne01;
+    const uint64_t nr2 = ne2/ne02;
+    const uint64_t nr3 = ne3/ne03;
+
+    // TODO: support for transposed / permuted tensors
+    GGML_ASSERT(nb0  == sizeof(float));
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
+    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
+
+    const vk_buffer src_buf = extra_src0->buffer_gpu.lock();
+    const uint64_t src_offset = extra_src0->offset + src0->view_offs;
+    vk_buffer dst_buf = extra->buffer_gpu.lock();
+    const uint64_t dst_offset = extra->offset + dst->view_offs;
+
+    std::vector<vk::BufferCopy> copies;
+
+    for                         (uint64_t i3 = 0; i3 < nr3;  i3++) {
+        for                     (uint64_t k3 = 0; k3 < ne03; k3++) {
+            for                 (uint64_t i2 = 0; i2 < nr2;  i2++) {
+                for             (uint64_t k2 = 0; k2 < ne02; k2++) {
+                    for         (uint64_t i1 = 0; i1 < nr1;  i1++) {
+                        for     (uint64_t k1 = 0; k1 < ne01; k1++) {
+                            for (uint64_t i0 = 0; i0 < nr0;  i0++) {
+                                copies.push_back({
+                                    src_offset + (i3*ne03 + k3)*nb3  + (i2*ne02 + k2)*nb2  + (i1*ne01 + k1)*nb1  + (i0*ne00)*nb0,
+                                    dst_offset + (          k3)*nb03 + (          k2)*nb02 + (          k1)*nb01,
+                                    ne00*nb0,
+                                });
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    ggml_vk_sync_buffers(subctx);
+    subctx->s->buffer.copyBuffer(src_buf->buffer, dst_buf->buffer, copies);
+
+    GGML_UNUSED(ctx);
+    GGML_UNUSED(src1);
+}
+
+
+static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst, ggml_op op) {
+    switch (op) {
+    case GGML_OP_ADD:
+        if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_add_f32;
+        }
+        return nullptr;
+    case GGML_OP_GET_ROWS:
+        GGML_ASSERT(src1->type == GGML_TYPE_I32);
+        if (dst->type == GGML_TYPE_F16) {
+            return ctx->device->pipeline_get_rows[src0->type];
+        }
+        if (dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_get_rows_f32[src0->type];
+        }
+        return nullptr;
+    case GGML_OP_MUL:
+        if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_mul_f32;
+        }
+        return nullptr;
+    case GGML_OP_DIV:
+        if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_div_f32;
+        }
+        return nullptr;
+    case GGML_OP_SCALE:
+        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_scale_f32;
+        }
+        return nullptr;
+    case GGML_OP_SQR:
+        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_sqr_f32;
+        }
+        return nullptr;
+    case GGML_OP_CLAMP:
+        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_clamp_f32;
+        }
+        return nullptr;
+    case GGML_OP_CPY:
+    case GGML_OP_CONT:
+    case GGML_OP_DUP:
+        return ggml_vk_get_cpy_pipeline(ctx, src0->type, dst->type);
+    case GGML_OP_NORM:
+        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_norm_f32;
+        }
+        return nullptr;
+    case GGML_OP_RMS_NORM:
+        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_rms_norm_f32;
+        }
+        return nullptr;
+    case GGML_OP_UNARY:
+        switch (ggml_get_unary_op(dst)) {
+            case GGML_UNARY_OP_SILU:
+                if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+                    return ctx->device->pipeline_silu_f32;
+                }
+                break;
+            case GGML_UNARY_OP_GELU:
+                if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+                    return ctx->device->pipeline_gelu_f32;
+                }
+                break;
+            case GGML_UNARY_OP_RELU:
+                if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+                    return ctx->device->pipeline_relu_f32;
+                }
+                break;
+            default:
+                break;
+        }
+        return nullptr;
+    case GGML_OP_DIAG_MASK_INF:
+        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_diag_mask_inf_f32;
+        }
+        return nullptr;
+    case GGML_OP_SOFT_MAX:
+        GGML_ASSERT(!src1 || src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16);
+
+        if (src0->type == GGML_TYPE_F32 && (src1 == nullptr || src1->type == GGML_TYPE_F32) && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_soft_max_f32;
+        }
+        if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_soft_max_f32_f16;
+        }
+        return nullptr;
+    case GGML_OP_ROPE:
+        {
+            const int mode = ((const int32_t *) dst->op_params)[2];
+            const bool is_neox = mode & 2;
+
+            if (is_neox) {
+                if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+                    return ctx->device->pipeline_rope_neox_f32;
+                }
+                if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) {
+                    return ctx->device->pipeline_rope_neox_f16;
+                }
+            } else {
+                if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+                    return ctx->device->pipeline_rope_norm_f32;
+                }
+                if (src0->type == GGML_TYPE_F16 && dst->type == GGML_TYPE_F16) {
+                    return ctx->device->pipeline_rope_norm_f16;
+                }
+            }
+            return nullptr;
+        }
+    case GGML_OP_ARGSORT:
+        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_I32) {
+            return ctx->device->pipeline_argsort_f32;
+        }
+        return nullptr;
+    case GGML_OP_SUM_ROWS:
+        if (src0->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32) {
+            return ctx->device->pipeline_sum_rows_f32;
+        }
+        return nullptr;
+    default:
+        return nullptr;
+    }
+
+    GGML_UNUSED(src2);
+}
+
+static ggml_vk_func_t ggml_vk_op_get_func(ggml_op op) {
+    switch(op) {
+    case GGML_OP_REPEAT:
+        return ggml_vk_op_repeat;
+    default:
+        return nullptr;
+    }
+}
+
+static bool ggml_vk_op_supports_incontiguous(ggml_op op) {
+    switch (op) {
+    case GGML_OP_CPY:
+    case GGML_OP_GET_ROWS:
+    case GGML_OP_ADD:
+    case GGML_OP_MUL:
+    case GGML_OP_DIV:
+    case GGML_OP_SCALE:
+    case GGML_OP_SQR:
+    case GGML_OP_CLAMP:
+        return true;
+    default:
+        return false;
+    }
+}
+
+template<typename PC>
+static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst, ggml_op op, const PC&& pc) {
+    VK_LOG_DEBUG("ggml_vk_op_f32((" << src0 << ", name=" << src0->name << ", type=" << src0->type << ", ne0=" << src0->ne[0] << ", ne1=" << src0->ne[1] << ", ne2=" << src0->ne[2] << ", ne3=" << src0->ne[3] << ", nb0=" << src0->nb[0] << ", nb1=" << src0->nb[1] << ", nb2=" << src0->nb[2] << ", nb3=" << src0->nb[3];
+    if (src1 != nullptr) {
+        std::cerr << "), (" << src1 << ", name=" << src1->name << ", type=" << src1->type << ", ne0=" << src1->ne[0] << ", ne1=" << src1->ne[1] << ", ne2=" << src1->ne[2] << ", ne3=" << src1->ne[3] << ", nb0=" << src1->nb[0] << ", nb1=" << src1->nb[1] << ", nb2=" << src1->nb[2] << ", nb3=" << src1->nb[3];
+    }
+    if (src2 != nullptr) {
+        std::cerr << "), (" << src2 << ", name=" << src2->name << ", type=" << src2->type << ", ne0=" << src2->ne[0] << ", ne1=" << src2->ne[1] << ", ne2=" << src2->ne[2] << ", ne3=" << src2->ne[3] << ", nb0=" << src2->nb[0] << ", nb1=" << src2->nb[1] << ", nb2=" << src2->nb[2] << ", nb3=" << src2->nb[3];
+    }
+    std::cerr << "), (" << dst << ", name=" << dst->name << ", type=" << dst->type << ", ne0=" << dst->ne[0] << ", ne1=" << dst->ne[1] << ", ne2=" << dst->ne[2] << ", ne3=" << dst->ne[3] << ", nb0=" << dst->nb[0] << ", nb1=" << dst->nb[1] << ", nb2=" << dst->nb[2] << ", nb3=" << dst->nb[3] << "), " << ggml_op_name(op) << ")");
+    GGML_ASSERT(op == GGML_OP_GET_ROWS || (!ggml_is_quantized(src0->type) && (src1 == nullptr || !ggml_is_quantized(src1->type))));  // NOLINT
+    GGML_ASSERT(ggml_vk_op_supports_incontiguous(op) || ggml_vk_dim01_contiguous(src0));  // NOLINT
+    GGML_ASSERT(dst->extra != nullptr);
+    const uint64_t ne00 = src0->ne[0];
+    const uint64_t ne01 = src0->ne[1];
+    const uint64_t ne02 = src0->ne[2];
+    const uint64_t ne03 = src0->ne[3];
+    const uint64_t ne0 = ne00 * ne01;
+
+    const bool use_src1 = src1 != nullptr;
+    const uint64_t ne10 = use_src1 ? src1->ne[0] : 0;
+    const uint64_t ne11 = use_src1 ? src1->ne[1] : 0;
+    const uint64_t ne12 = use_src1 ? src1->ne[2] : 0;
+    const uint64_t ne13 = use_src1 ? src1->ne[3] : 0;
+    const uint64_t ne1 = ne10 * ne11;
+    // const uint64_t nb10 = use_src1 ? src1->nb[0] : 0;
+
+    const bool use_src2 = src2 != nullptr;
+    const uint64_t ne20 = use_src2 ? src2->ne[0] : 0;
+    const uint64_t ne21 = use_src2 ? src2->ne[1] : 0;
+    const uint64_t ne22 = use_src2 ? src2->ne[2] : 0;
+    const uint64_t ne23 = use_src2 ? src2->ne[3] : 0;
+    const uint64_t ne2 = ne20 * ne21;
+
+    const uint64_t ned0 = dst->ne[0];
+    const uint64_t ned1 = dst->ne[1];
+    const uint64_t ned2 = dst->ne[2];
+    const uint64_t ned3 = dst->ne[3];
+    const uint64_t ned = ned0 * ned1;
+
+    vk_pipeline pipeline = ggml_vk_op_get_pipeline(ctx, src0, src1, src2, dst, op);
+    ggml_vk_func_t op_func;
+
+    if (pipeline == nullptr) {
+        op_func = ggml_vk_op_get_func(op);
+        if (op_func == nullptr) {
+            std::cerr << "ggml_vulkan: Error: Missing op: " << ggml_op_name(op) << " for " << ggml_type_name(src0->type);
+            if (src1 != nullptr) {
+                std::cerr << " and " << ggml_type_name(src1->type);
+            }
+            std::cerr << " to " << ggml_type_name(dst->type) << std::endl;
+            GGML_ASSERT(false);
+        }
+
+        op_func(ctx, subctx, src0, src1, dst);
+        return;
+    }
+
+    const bool op_supports_incontiguous = ggml_vk_op_supports_incontiguous(op);
+
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
+    ggml_tensor_extra_gpu * extra_src0 = (ggml_tensor_extra_gpu *) src0->extra;
+    ggml_tensor_extra_gpu * extra_src1 = use_src1 ? (ggml_tensor_extra_gpu *) src1->extra : nullptr;
+    ggml_tensor_extra_gpu * extra_src2 = use_src2 ? (ggml_tensor_extra_gpu *) src2->extra : nullptr;
+
+    vk_buffer d_X = nullptr;
+    size_t x_buf_offset = 0;
+    vk_buffer d_Y = nullptr;
+    size_t y_buf_offset = 0;
+    vk_buffer d_Z = nullptr;
+    size_t z_buf_offset = 0;
+
+    bool src0_uma = false;
+    bool src1_uma = false;
+    bool src2_uma = false;
+
+    if (ctx->device->uma) {
+        ggml_vk_host_get(ctx->device, src0->data, d_X, x_buf_offset);
+        src0_uma = d_X != nullptr;
+        if (use_src1) {
+            ggml_vk_host_get(ctx->device, src1->data, d_Y, y_buf_offset);
+            src1_uma = d_Y != nullptr;
+        }
+        if (use_src2) {
+            ggml_vk_host_get(ctx->device, src2->data, d_Z, z_buf_offset);
+            src2_uma = d_Z != nullptr;
+        }
+    }
+
+    uint64_t x_sz = ggml_type_size(src0->type)/ggml_blck_size(src0->type) * ne0;
+    uint64_t y_sz = use_src1 ? ggml_type_size(src1->type) * ne1 : 0;
+    uint64_t z_sz = use_src2 ? ggml_type_size(src2->type) * ne2 : 0;
+    uint64_t d_sz = ggml_type_size(dst->type) * ned;
+
+    vk_buffer d_D = extra->buffer_gpu.lock();
+
+    // Workaround for tiny tensor inputs on ROPE
+    if (use_src1 && y_sz > d_D->size) {
+        y_sz = VK_WHOLE_SIZE;
+    }
+
+    GGML_ASSERT(d_D != nullptr);
+    uint64_t d_buf_offset = ((extra->offset + dst->view_offs) / ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ctx->device->properties.limits.minStorageBufferOffsetAlignment;
+    GGML_ASSERT(d_buf_offset == extra->offset || op == GGML_OP_CPY);  // NOLINT
+    if(!src0_uma) {
+        d_X = extra_src0->buffer_gpu.lock();
+        x_buf_offset = extra_src0->offset + src0->view_offs;
+        GGML_ASSERT(d_X != nullptr);
+    }
+    if (use_src1 && !src1_uma) {
+        d_Y = extra_src1->buffer_gpu.lock();
+        y_buf_offset = extra_src1->offset + src1->view_offs;
+        GGML_ASSERT(d_Y != nullptr);
+    }
+    if (use_src2 && !src2_uma) {
+        d_Z = extra_src2->buffer_gpu.lock();
+        z_buf_offset = extra_src2->offset + src2->view_offs;
+        GGML_ASSERT(d_Z != nullptr);
+    }
+
+    if (op_supports_incontiguous) {
+        x_sz = ggml_nbytes(src0);
+        y_sz = use_src1 ? ggml_nbytes(src1) : 0;
+        z_sz = use_src2 ? ggml_nbytes(src2) : 0;
+        d_sz = ggml_nbytes(dst);
+
+        if (x_buf_offset + x_sz >= d_X->size) {
+            x_sz = VK_WHOLE_SIZE;
+        }
+        if (use_src1 && y_buf_offset + y_sz >= d_Y->size) {
+            y_sz = VK_WHOLE_SIZE;
+        }
+        if (use_src2 && z_buf_offset + z_sz >= d_Z->size) {
+            z_sz = VK_WHOLE_SIZE;
+        }
+        if (d_buf_offset + d_sz >= d_D->size) {
+            d_sz = VK_WHOLE_SIZE;
+        }
+    }
+
+    std::array<uint32_t, 3> elements;
+
+    // Single call if dimension 2 is contiguous
+    if (op_supports_incontiguous || (ggml_is_contiguous(src0) && (src1 == nullptr || ggml_is_contiguous(src1)))) {
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, pipeline, 1);
+
+        switch (dst->op) {
+        case GGML_OP_NORM:
+        case GGML_OP_RMS_NORM:
+        case GGML_OP_SOFT_MAX:
+        case GGML_OP_SUM_ROWS:
+            elements = { (uint32_t)ggml_nrows(src0), 1, 1 };
+            break;
+        case GGML_OP_DIAG_MASK_INF:
+        case GGML_OP_ROPE:
+            elements = { (uint32_t)ggml_nrows(src0), (uint32_t)ne00, 1 };
+            break;
+        case GGML_OP_GET_ROWS:
+            elements = { (uint32_t)ne00, (uint32_t)ne10, (uint32_t)(ne11 * ne12) };
+            break;
+        case GGML_OP_ARGSORT:
+            elements = { (uint32_t)ne00, (uint32_t)ggml_nrows(src0), 1 };
+            break;
+        default:
+            elements = { (uint32_t)ggml_nelements(src0), 1, 1 };
+            break;
+        }
+
+        if (!op_supports_incontiguous) {
+            if (x_sz != VK_WHOLE_SIZE) {
+                x_sz *= ne02 * ne03;
+            }
+            if (use_src1 && y_sz != VK_WHOLE_SIZE) {
+                y_sz *= ne12 * ne13;
+            }
+            if (use_src2 && z_sz != VK_WHOLE_SIZE) {
+                z_sz *= ne22 * ne23;
+            }
+            if (d_sz != VK_WHOLE_SIZE) {
+                d_sz *= ned2 * ned3;
+            }
+        }
+
+        if (op == GGML_OP_SOFT_MAX) {
+            // Empty src1 is possible in soft_max, but the shader needs a buffer
+            vk_subbuffer subbuf_y;
+            if (use_src1) {
+                subbuf_y = { d_Y, y_buf_offset, y_sz };
+            } else {
+                subbuf_y = { d_X, 0, d_X->size };
+            }
+
+            ggml_vk_sync_buffers(subctx);
+            ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, subbuf_y, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements);
+        } else if (op == GGML_OP_ROPE) {
+            // Empty src2 is possible in rope, but the shader needs a buffer
+            vk_subbuffer subbuf_z;
+            if (use_src2) {
+                subbuf_z = { d_Z, z_buf_offset, z_sz };
+            } else {
+                subbuf_z = { d_X, 0, d_X->size };
+            }
+
+            ggml_vk_sync_buffers(subctx);
+            ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, { d_Y, y_buf_offset, y_sz }, subbuf_z, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements);
+        } else if (use_src2) {
+            ggml_vk_sync_buffers(subctx);
+            ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, { d_Y, y_buf_offset, y_sz }, { d_Z, z_buf_offset, z_sz }, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements);
+        } else if (use_src1) {
+            ggml_vk_sync_buffers(subctx);
+            ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, { d_Y, y_buf_offset, y_sz }, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements);
+        } else {
+            ggml_vk_sync_buffers(subctx);
+            ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset, x_sz }, { d_D, d_buf_offset, d_sz } }, sizeof(PC), &pc, elements);
+        }
+    } else {
+        GGML_ASSERT(op != GGML_OP_SOFT_MAX);
+        GGML_ASSERT(op != GGML_OP_ARGSORT);
+        GGML_ASSERT(!use_src2);
+
+        ggml_pipeline_allocate_descriptor_sets(ctx->device, pipeline, ne02 * ne03);
+
+        switch (dst->op) {
+        case GGML_OP_NORM:
+        case GGML_OP_RMS_NORM:
+            elements = { (uint32_t)ne01, 1, 1 };
+            break;
+        case GGML_OP_DIAG_MASK_INF:
+        case GGML_OP_ROPE:
+            elements = { (uint32_t)ne01, (uint32_t)ne00, 1 };
+            break;
+        case GGML_OP_GET_ROWS:
+            elements = {  (uint32_t)ne00, (uint32_t)ne10, (uint32_t)(ne11 * ne12) };
+            break;
+        default:
+            elements = { (uint32_t)ne0, 1, 1 };
+            break;
+        }
+
+        for (uint64_t i03 = 0; i03 < ne03; i03++) {
+            for (uint64_t i02 = 0; i02 < ne02; i02++) {
+                const uint32_t it_idx0 = (i03 * ne02 + i02);
+                const uint32_t it_idx1 = use_src1 ? ((i03 % ne13) * ne12 + (i02 % ne12)) : 0;
+                const uint32_t x_offset = x_sz * it_idx0;
+                const uint32_t y_offset = y_sz * it_idx1;
+                const uint32_t d_offset = d_sz * it_idx0;
+
+                if (use_src1) {
+                    ggml_vk_sync_buffers(subctx);
+                    ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset + x_offset, x_sz }, { d_Y, y_buf_offset + y_offset, y_sz }, { d_D, d_buf_offset + d_offset, d_sz } }, sizeof(PC), &pc, elements);
+                } else {
+                    ggml_vk_sync_buffers(subctx);
+                    ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { { d_X, x_buf_offset + x_offset, x_sz }, { d_D, d_buf_offset + d_offset, d_sz } }, sizeof(PC), &pc, elements);
+                }
+            }
+        }
+    }
+}
+
+static void ggml_vk_repeat(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    ggml_vk_op_f32<vk_op_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_REPEAT, { (uint32_t)ggml_nelements(src0), (uint32_t)ggml_nelements(src1), 0.0f, 0.0f });
+}
+
+static void ggml_vk_get_rows(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    const uint32_t src0_type_size = ggml_type_size(src0->type);
+    const uint32_t src1_type_size = ggml_type_size(src1->type);
+    const uint32_t dst_type_size = ggml_type_size(dst->type);
+
+    ggml_vk_op_f32<vk_op_binary_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_GET_ROWS, {
+        (uint32_t)ggml_nelements(src0),
+        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
+        (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size,
+        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
+        0,
+        0.0f, 0.0f,
+    });
+}
+
+static void ggml_vk_add(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    const uint32_t src0_type_size = ggml_type_size(src0->type);
+    const uint32_t src1_type_size = ggml_type_size(src1->type);
+    const uint32_t dst_type_size = ggml_type_size(dst->type);
+
+    ggml_vk_op_f32<vk_op_binary_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_ADD, {
+        (uint32_t)ggml_nelements(src0),
+        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
+        (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size,
+        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
+        0,
+        0.0f, 0.0f,
+    });
+}
+
+static void ggml_vk_mul(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    const uint32_t src0_type_size = ggml_type_size(src0->type);
+    const uint32_t src1_type_size = ggml_type_size(src1->type);
+    const uint32_t dst_type_size = ggml_type_size(dst->type);
+
+    ggml_vk_op_f32<vk_op_binary_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_MUL, {
+        (uint32_t)ggml_nelements(src0),
+        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
+        (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size,
+        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
+        0,
+        0.0f, 0.0f,
+    });
+}
+
+static void ggml_vk_div(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    const uint32_t src0_type_size = ggml_type_size(src0->type);
+    const uint32_t src1_type_size = ggml_type_size(src1->type);
+    const uint32_t dst_type_size = ggml_type_size(dst->type);
+
+    ggml_vk_op_f32<vk_op_binary_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_DIV, {
+        (uint32_t)ggml_nelements(src0),
+        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
+        (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size,
+        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
+        0,
+        0.0f, 0.0f,
+    });
+}
+
+static void ggml_vk_scale(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
+    float * op_params = (float *)dst->op_params;
+    const uint32_t src0_type_size = ggml_type_size(src0->type);
+    const uint32_t dst_type_size = ggml_type_size(dst->type);
+
+    ggml_vk_op_f32<vk_op_unary_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SCALE, {
+        (uint32_t)ggml_nelements(src0),
+        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
+        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
+        0,
+        op_params[0], 0.0f
+    });
+}
+
+static void ggml_vk_sqr(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
+    const uint32_t src0_type_size = ggml_type_size(src0->type);
+    const uint32_t dst_type_size = ggml_type_size(dst->type);
+
+    ggml_vk_op_f32<vk_op_unary_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SQR, {
+        (uint32_t)ggml_nelements(src0),
+        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
+        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
+        0,
+        0.0f, 0.0f,
+    });
+}
+
+static void ggml_vk_clamp(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
+    float * op_params = (float *)dst->op_params;
+    const uint32_t src0_type_size = ggml_type_size(src0->type);
+    const uint32_t dst_type_size = ggml_type_size(dst->type);
+
+    ggml_vk_op_f32<vk_op_unary_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_CLAMP, {
+        (uint32_t)ggml_nelements(src0),
+        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
+        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
+        0,
+        op_params[0], op_params[1],
+    });
+}
+
+static void ggml_vk_cpy(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) dst->extra;
+    const uint32_t src0_type_size = ggml_type_size(src0->type);
+    const uint32_t dst_type_size = ggml_type_size(dst->type);
+    const uint32_t d_offset = ((extra->offset + dst->view_offs) % ctx->device->properties.limits.minStorageBufferOffsetAlignment) / dst_type_size;
+
+    ggml_vk_op_f32<vk_op_unary_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_CPY, {
+        (uint32_t)ggml_nelements(src0),
+        (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2], (uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size,
+        (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2], (uint32_t) dst->ne[3], (uint32_t) dst->nb[0] /  dst_type_size, (uint32_t) dst->nb[1] /  dst_type_size, (uint32_t) dst->nb[2] /  dst_type_size, (uint32_t) dst->nb[3] /  dst_type_size,
+        d_offset,
+        0.0f, 0.0f,
+    });
+}
+
+static void ggml_vk_norm(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
+    float * op_params = (float *)dst->op_params;
+
+    ggml_vk_op_f32<vk_op_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_NORM, { (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], op_params[0], 0.0f });
+}
+
+static void ggml_vk_rms_norm(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
+    float * op_params = (float *)dst->op_params;
+    ggml_vk_op_f32<vk_op_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_RMS_NORM, { (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], op_params[0], 0.0f });
+}
+
+static void ggml_vk_unary(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
+    ggml_vk_op_f32<vk_op_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_UNARY, { (uint32_t)ggml_nelements(src0), 0, 0.0f, 0.0f });
+}
+
+static void ggml_vk_diag_mask_inf(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
+    int32_t * op_params = (int32_t *)dst->op_params;
+    ggml_vk_op_f32<vk_op_diag_mask_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_DIAG_MASK_INF, { (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], op_params[0] });
+}
+
+static void ggml_vk_soft_max(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) {
+    float * op_params = (float *)dst->op_params;
+
+    float scale = op_params[0];
+    float max_bias = op_params[1];
+
+    const uint32_t ncols =   (uint32_t)src0->ne[0];
+    const uint32_t nrows_x = (uint32_t)ggml_nrows(src0);
+    const uint32_t nrows_y = (uint32_t)src0->ne[1];
+
+    const uint32_t n_head_kv   = nrows_x/nrows_y;
+    const uint32_t n_head_log2 = 1u << (uint32_t) floorf(log2f((float) n_head_kv));
+
+    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
+    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
+
+    ggml_vk_op_f32<vk_op_soft_max_push_constants>(ctx, subctx, src0, src1, nullptr, dst, GGML_OP_SOFT_MAX, {
+        ncols,
+        src1 != nullptr ? nrows_y : (uint32_t)0,
+        scale, max_bias,
+        m0, m1,
+        n_head_log2,
+    });
+}
+
+static void ggml_vk_rope(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * src2, ggml_tensor * dst) {
+    const int n_dims        = ((int32_t *) dst->op_params)[1];
+    // const int mode          = ((int32_t *) dst->op_params)[2];
+    // const int n_ctx         = ((int32_t *) dst->op_params)[3];
+    const int n_ctx_orig    = ((int32_t *) dst->op_params)[4];
+    const float freq_base   = ((float *)   dst->op_params)[5];
+    const float freq_scale  = ((float *)   dst->op_params)[6];
+    const float ext_factor  = ((float *)   dst->op_params)[7];
+    const float attn_factor = ((float *)   dst->op_params)[8];
+    const float beta_fast   = ((float *)   dst->op_params)[9];
+    const float beta_slow   = ((float *)   dst->op_params)[10];
+
+    float corr_dims[2];
+    ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);
+
+    const float theta_scale = powf(freq_base, -2.0f/n_dims);
+
+    ggml_vk_op_f32<vk_op_rope_push_constants>(ctx, subctx, src0, src1, src2, dst, GGML_OP_ROPE, {
+        (uint32_t)src0->ne[0], (uint32_t)n_dims, freq_scale, (uint32_t)src0->ne[1],
+        freq_base, ext_factor, attn_factor, {corr_dims[0], corr_dims[1]}, theta_scale,
+        src2 != nullptr,
+    });
+}
+
+static void ggml_vk_argsort(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
+    int32_t * op_params = (int32_t *)dst->op_params;
+
+    uint32_t ncols = src0->ne[0];
+
+    uint32_t ncols_pad = 1;
+    while (ncols_pad < ncols) {
+        ncols_pad *= 2;
+    }
+
+    GGML_ASSERT(ncols_pad <= 1024);
+
+    ggml_vk_op_f32<vk_op_argsort_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_ARGSORT, {
+        ncols,
+        ncols_pad,
+        op_params[0],
+    });
+}
+
+static void ggml_vk_sum_rows(ggml_backend_vk_context * ctx, vk_context * subctx, const ggml_tensor * src0, ggml_tensor * dst) {
+    ggml_vk_op_f32<vk_op_push_constants>(ctx, subctx, src0, nullptr, nullptr, dst, GGML_OP_SUM_ROWS, { (uint32_t)src0->ne[0], 0, 0.0f, 0.0f });
+}
+
+#ifdef GGML_VULKAN_RUN_TESTS
+static void ggml_vk_print_matrix_area(const void * data, ggml_type type, int ne0, int ne1, int i0, int i1, int i2) {
+    if (type != GGML_TYPE_F32 && type != GGML_TYPE_F16) {
+        return;
+    }
+    i0 = std::max(i0, 5);
+    i1 = std::max(i1, 5);
+    i2 = std::max(i2, 0);
+    fprintf(stderr, "         ");
+    for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
+        fprintf(stderr, "%7d ", idx1);
+    }
+    fprintf(stderr, "\n");
+    for (int idx0 = i0 - 5; idx0 < i0 + 5; idx0++) {
+        fprintf(stderr, "%7d: ", idx0);
+        for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
+            if (idx0 >= 0 && idx0 < ne0 && idx1 >= 0 && idx1 < ne1) {
+                float val;
+                if (type == GGML_TYPE_F32) {
+                    val = *((const float *) data + i2*ne1*ne0 + idx1*ne0 + idx0);
+                } else if (type == GGML_TYPE_F16) {
+                    val = ggml_fp16_to_fp32(*((const ggml_fp16_t *) data + i2*ne1*ne0 + idx1*ne0 + idx0));
+                } else {
+                    GGML_ASSERT(false);
+                }
+                fprintf(stderr, "% 7.2f ", val);
+            } else {
+                fprintf(stderr, "        ");
+            }
+        }
+        fprintf(stderr, "\n");
+    }
+}
+
+template <typename X_TYPE, typename Y_TYPE>
+static void ggml_vk_test_matmul(ggml_backend_vk_context * ctx, size_t m, size_t n, size_t k, size_t batch, size_t num_it, int split_k, int shader_size) {
+    VK_LOG_DEBUG("ggml_vk_test_matmul(" << m << ", " << n << ", " << k << ", " << batch << ", " << num_it << ", " << split_k << ", " << shader_size << ")");
+    const size_t x_ne = m * k * batch;
+    const size_t y_ne = k * n * batch;
+    const size_t d_ne = m * n * batch;
+
+    vk_pipeline p;
+    std::string shname;
+    if (shader_size == 0) {
+        if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f32->a_s;
+            shname = "F32_ALIGNED_S";
+        } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f32_f16->a_s;
+            shname = "F32_F16_ALIGNED_S";
+        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f16_f32->a_s;
+            shname = "F16_F32_ALIGNED_S";
+        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f16->a_s;
+            shname = "F16_ALIGNED_S";
+        } else {
+            GGML_ASSERT(false);
+        }
+    } else if (shader_size == 1) {
+        if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f32->a_m;
+            shname = "F32_ALIGNED_M";
+        } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f32_f16->a_m;
+            shname = "F32_F16_ALIGNED_M";
+        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f16_f32->a_m;
+            shname = "F16_F32_ALIGNED_M";
+        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f16->a_m;
+            shname = "F16_ALIGNED_M";
+        } else {
+            GGML_ASSERT(false);
+        }
+    } else if (shader_size == 2) {
+        if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f32->a_l;
+            shname = "F32_ALIGNED_L";
+        } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f32_f16->a_l;
+            shname = "F32_F16_ALIGNED_L";
+        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f16_f32->a_l;
+            shname = "F16_F32_ALIGNED_L";
+        } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+            p = ctx->device->pipeline_matmul_f16->a_l;
+            shname = "F16_ALIGNED_L";
+        } else {
+            GGML_ASSERT(false);
+        }
+    } else {
+        GGML_ASSERT(0);
+    }
+
+    const size_t kpad = ggml_vk_align_size(k, p->align);
+
+    if (k != kpad) {
+        if (shader_size == 0) {
+            if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f32->s;
+                shname = "F32_S";
+            } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f32_f16->s;
+                shname = "F32_F16_S";
+            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f16_f32->s;
+                shname = "F16_F32_S";
+            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f16->s;
+                shname = "F16_S";
+            }
+        } else if (shader_size == 1) {
+            if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f32->m;
+                shname = "F32_M";
+            } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f32_f16->m;
+                shname = "F32_F16_M";
+            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f16_f32->m;
+                shname = "F16_F32_M";
+            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f16->m;
+                shname = "F16_M";
+            }
+        } else if (shader_size == 2) {
+            if (std::is_same<float, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f32->l;
+                shname = "F32_L";
+            } else if (std::is_same<float, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f32_f16->l;
+                shname = "F32_F16_L";
+            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<float, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f16_f32->l;
+                shname = "F16_F32_L";
+            } else if (std::is_same<ggml_fp16_t, X_TYPE>() && std::is_same<ggml_fp16_t, Y_TYPE>()) {
+                p = ctx->device->pipeline_matmul_f16->l;
+                shname = "F16_L";
+            }
+        }
+    }
+
+    ggml_pipeline_allocate_descriptor_sets(ctx, p, num_it);
+    if (split_k > 1) {
+        ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, num_it);
+
+        if (ctx->prealloc_split_k == nullptr || ctx->prealloc_split_k->size < sizeof(float) * d_ne * split_k) {
+            // Resize buffer
+            if (ctx->prealloc_split_k != nullptr) {
+                ggml_vk_destroy_buffer(ctx->prealloc_split_k);
+            }
+            ctx->prealloc_split_k = ggml_vk_create_buffer_check(ctx, sizeof(float) * d_ne * split_k, vk::MemoryPropertyFlagBits::eDeviceLocal);
+        }
+    }
+
+    vk_buffer d_X = ggml_vk_create_buffer_check(ctx, sizeof(X_TYPE) * x_ne, vk::MemoryPropertyFlagBits::eDeviceLocal);
+    vk_buffer d_Y = ggml_vk_create_buffer_check(ctx, sizeof(Y_TYPE) * y_ne, vk::MemoryPropertyFlagBits::eDeviceLocal);
+    vk_buffer d_D = ggml_vk_create_buffer_check(ctx, sizeof(float) * d_ne, vk::MemoryPropertyFlagBits::eDeviceLocal);
+
+    X_TYPE* x = (X_TYPE *) malloc(sizeof(X_TYPE) * x_ne);
+    Y_TYPE* y = (Y_TYPE *) malloc(sizeof(Y_TYPE) * y_ne);
+    float* d = (float *) malloc(sizeof(float) * d_ne);
+
+    for (size_t i = 0; i < x_ne; i++) {
+        if (std::is_same<float, X_TYPE>()) {
+            x[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f;
+        } else if (std::is_same<ggml_fp16_t, X_TYPE>()) {
+            x[i] = ggml_fp32_to_fp16((rand() / (float)RAND_MAX) * 2.0f - 1.0f);
+        } else {
+            GGML_ASSERT(false);
+        }
+    }
+    for (size_t i = 0; i < y_ne; i++) {
+        if (std::is_same<float, Y_TYPE>()) {
+            // y[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f;
+            y[i] = (i % k == i / k) ? 1.0f : 0.0f;
+        } else if (std::is_same<ggml_fp16_t, Y_TYPE>()) {
+            // y[i] = ggml_fp32_to_fp16((rand() / (float)RAND_MAX) * 2.0f - 1.0f);
+            y[i] = ggml_fp32_to_fp16((i % k == i / k) ? 1.0f : 0.0f);
+        } else {
+            GGML_ASSERT(false);
+        }
+    }
+
+    ggml_vk_buffer_write(ctx, d_X, 0, x, sizeof(X_TYPE) * k * m * batch);
+    ggml_vk_buffer_write(ctx, d_Y, 0, y, sizeof(Y_TYPE) * k * n * batch);
+
+    vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
+    for (size_t i = 0; i < num_it; i++) {
+        ggml_vk_ctx_begin(ctx, subctx);
+        ggml_vk_matmul(
+            ctx, subctx, p, ggml_vk_subbuffer(d_X), ggml_vk_subbuffer(d_Y), ggml_vk_subbuffer(d_D), ggml_vk_subbuffer(ctx->prealloc_split_k),
+            m, n, k,
+            k, k, m, k*m, k*n, m*n,
+            split_k, batch, batch, batch, 1, 1
+        );
+        ggml_vk_ctx_end(subctx);
+    }
+
+    auto begin = std::chrono::high_resolution_clock::now();
+    ggml_vk_submit(subctx, ctx->fence);
+    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_matmul waitForFences");
+    ctx->device->device.resetFences({ ctx->fence });
+
+    auto end = std::chrono::high_resolution_clock::now();
+    double time = std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() / 1000.0;
+
+    // copy dst to host
+    ggml_vk_buffer_read(ctx, d_D, 0, d, sizeof(float) * d_ne);
+
+    float * d_chk = (float *) malloc(sizeof(float) * d_ne);
+
+    ggml_init_params iparams = {
+        /*.mem_size   =*/ 1024*1024*1024,
+        /*.mem_buffer =*/ NULL,
+        /*.no_alloc   =*/ true,
+    };
+
+    ggml_context * ggml_ctx = ggml_init(iparams);
+
+    ggml_type src0_type;
+    ggml_type src1_type;
+
+    if (std::is_same<float, X_TYPE>()) {
+        src0_type = GGML_TYPE_F32;
+    } else if (std::is_same<ggml_fp16_t, X_TYPE>()) {
+        src0_type = GGML_TYPE_F16;
+    } else {
+        GGML_ASSERT(false);
+    }
+    if (std::is_same<float, Y_TYPE>()) {
+        src1_type = GGML_TYPE_F32;
+    } else if (std::is_same<ggml_fp16_t, Y_TYPE>()) {
+        src1_type = GGML_TYPE_F16;
+    } else {
+        GGML_ASSERT(false);
+    }
+
+    ggml_tensor * src0_ggml = ggml_new_tensor_3d(ggml_ctx, src0_type, k, m, batch);
+    ggml_tensor * src1_ggml = ggml_new_tensor_3d(ggml_ctx, src1_type, k, n, batch);
+    ggml_tensor * tensor_ggml = ggml_mul_mat(ggml_ctx, src0_ggml, src1_ggml);
+
+    src0_ggml->data = x;
+    src1_ggml->data = y;
+    tensor_ggml->data = d_chk;
+
+    ggml_cgraph * cgraph = ggml_new_graph(ggml_ctx);
+    ggml_build_forward_expand(cgraph, tensor_ggml);
+
+    ggml_graph_compute_with_ctx(ggml_ctx, cgraph, 1);
+
+    ggml_free(ggml_ctx);
+
+    double avg_err = 0.0;
+    int first_err_n = -1;
+    int first_err_m = -1;
+    int first_err_b = -1;
+
+    for (size_t i = 0; i < m*n*batch; i++) {
+        double err = std::fabs(d[i] - d_chk[i]);
+        avg_err += err;
+
+        if (err > 0.05f && first_err_n == -1) {
+            first_err_b = i / (m * n);
+            first_err_n = (i % (m * n)) / m;
+            first_err_m = (i % (m * n)) % m;
+        }
+    }
+
+    avg_err /= m * n;
+
+    std::cerr << "TEST " << shname << " m=" << m << " n=" << n << " k=" << k << " batch=" << batch << " split_k=" << split_k << " matmul " << time / num_it << "ms avg_err=" << avg_err << std::endl;
+
+    if (avg_err > 0.1) {
+        std::cerr << "m = " << first_err_m << " n = " << first_err_n << " b = " << first_err_b << std::endl;
+        std::cerr << "Actual result: " << std::endl << std::endl;
+        ggml_vk_print_matrix_area(d, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+        std::cerr << std::endl;
+        ggml_vk_print_matrix_area(d, GGML_TYPE_F32, m, n, first_err_m, first_err_n + 15, first_err_b);
+        std::cerr << "Expected result: " << std::endl << std::endl;
+        ggml_vk_print_matrix_area(d_chk, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+
+        if (split_k > 1) {
+            float * split_k_buf = (float *) malloc(sizeof(float) * d_ne * split_k);
+            ggml_vk_buffer_read(ctx, ctx->prealloc_split_k, 0, split_k_buf, sizeof(float) * d_ne * split_k);
+
+            std::cerr << "d_buf0: " << std::endl << std::endl;
+            ggml_vk_print_matrix_area(split_k_buf, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+
+            std::cerr << "d_buf1: " << std::endl << std::endl;
+            ggml_vk_print_matrix_area(split_k_buf + d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+
+            std::cerr << "d_buf2: " << std::endl << std::endl;
+            ggml_vk_print_matrix_area(split_k_buf + 2 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+
+            std::cerr << "d_buf3: " << std::endl << std::endl;
+            ggml_vk_print_matrix_area(split_k_buf + 3 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+
+            free(split_k_buf);
+        }
+    }
+
+    free(d_chk);
+
+    ggml_vk_queue_cleanup(ctx, ctx->device->transfer_queue);
+    ggml_vk_queue_cleanup(ctx, ctx->device->compute_queue);
+
+    ggml_vk_destroy_buffer(d_X);
+    ggml_vk_destroy_buffer(d_Y);
+    ggml_vk_destroy_buffer(d_D);
+
+    ggml_pipeline_cleanup(p);
+    ggml_pipeline_cleanup(ctx->device->pipeline_matmul_split_k_reduce);
+
+    free(x);
+    free(y);
+    free(d);
+}
+
+static void ggml_vk_print_tensor_area(const ggml_tensor * tensor, int i0, int i1, int i2, int i3) {
+    if (tensor->type != GGML_TYPE_F32 && tensor->type != GGML_TYPE_F16) {
+        return;
+    }
+    i0 = std::max(i0, 5);
+    i1 = std::max(i1, 5);
+    i2 = std::max(i2, 0);
+    i3 = std::max(i3, 0);
+    fprintf(stderr, "         ");
+    for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
+        fprintf(stderr, "%7d ", idx1);
+    }
+    fprintf(stderr, "\n");
+    for (int idx0 = i0 - 5; idx0 < i0 + 5; idx0++) {
+        fprintf(stderr, "%7d: ", idx0);
+        for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
+            if (idx0 >= 0 && idx0 < tensor->ne[0] && idx1 >= 0 && idx1 < tensor->ne[1] && i2 >= 0 && i2 < tensor->ne[2] && i3 >= 0 && i3 < tensor->ne[3]) {
+                float val;
+                if (tensor->type == GGML_TYPE_F32) {
+                    val = *(float *) ((char *) tensor->data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]);
+                } else if (tensor->type == GGML_TYPE_F16) {
+                    val = ggml_fp16_to_fp32(*(ggml_fp16_t *) ((char *) tensor->data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]));
+                } else {
+                    GGML_ASSERT(false);
+                }
+                fprintf(stderr, "% 7.2f ", val);
+            } else {
+                fprintf(stderr, "        ");
+            }
+        }
+        fprintf(stderr, "\n");
+    }
+}
+
+static void ggml_vk_test_transfer(ggml_backend_vk_context * ctx, size_t ne, bool pinned) {
+    VK_LOG_DEBUG("ggml_vk_test_transfer(" << ne << ")");
+    // Check transfers are correct
+    vk_buffer buffer = ggml_vk_create_buffer_check(ctx, sizeof(float) * ne, vk::MemoryPropertyFlagBits::eDeviceLocal);
+
+    float * x;
+    float * y;
+    if (pinned) {
+        x = (float *) ggml_vk_host_malloc(ctx, sizeof(float) * ne);
+        y = (float *) ggml_vk_host_malloc(ctx, sizeof(float) * ne);
+    } else {
+        x = (float *) malloc(sizeof(float) * ne);
+        y = (float *) malloc(sizeof(float) * ne);
+    }
+
+    for (size_t i = 0; i < ne; i++) {
+        x[i] = rand() / (float)RAND_MAX;
+    }
+
+    vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
+    ggml_vk_ctx_begin(ctx, subctx);
+
+    auto begin = std::chrono::high_resolution_clock::now();
+
+    ggml_vk_buffer_write_async(ctx, subctx, buffer, 0, x, sizeof(float) * ne);
+
+    for (auto& cpy : subctx->in_memcpys) {
+        memcpy(cpy.dst, cpy.src, cpy.n);
+    }
+    subctx->in_memcpys.clear();
+
+    ggml_vk_ctx_end(subctx);
+    ggml_vk_submit(subctx, ctx->fence);
+    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_transfer waitForFences");
+    ctx->device->device.resetFences({ ctx->fence });
+
+    auto end = std::chrono::high_resolution_clock::now();
+
+    double ms_to_gpu = std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() / 1000.0;
+
+    ggml_vk_ctx_begin(ctx, subctx);
+
+    begin = std::chrono::high_resolution_clock::now();
+
+    ggml_vk_buffer_read_async(ctx, subctx, buffer, 0, y, sizeof(float) * ne);
+
+    ggml_vk_ctx_end(subctx);
+    ggml_vk_submit(subctx, ctx->fence);
+    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_transfer waitForFences");
+    ctx->device->device.resetFences({ ctx->fence });
+
+    for (auto& cpy : subctx->out_memcpys) {
+        memcpy(cpy.dst, cpy.src, cpy.n);
+    }
+    subctx->out_memcpys.clear();
+
+    end = std::chrono::high_resolution_clock::now();
+
+    double ms_from_gpu = std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() / 1000.0;
+
+    double avg_err = 0.0;
+    for (size_t i = 0; i < ne; i++) {
+        avg_err += std::fabs(x[i] - y[i]);
+    }
+
+    double kb = ne * sizeof(float) / 1024.0;
+
+    std::cerr << "TEST TRANSFER " << kb << " KB to_gpu " << ms_to_gpu << "ms (" << kb / ms_to_gpu * 1000.0 / 1024.0 << " MB/s) from_gpu " << ms_from_gpu << "ms (" << kb / ms_from_gpu * 1000.0 / 1024.0 << " MB/s) avg_err=" << avg_err / ne << std::endl;
+
+    ggml_vk_destroy_buffer(buffer);
+
+    if (pinned) {
+        ggml_vk_host_free(ctx, x);
+        ggml_vk_host_free(ctx, y);
+    } else {
+        free(x);
+        free(y);
+    }
+}
+
+static void ggml_vk_quantize_data(const float * from, void * to, size_t ne, ggml_type quant) {
+    ggml_quantize_chunk(quant, from, to, 0, 1, ne, nullptr);
+}
+
+static void ggml_vk_test_dequant(ggml_backend_vk_context * ctx, size_t ne, ggml_type quant) {
+    VK_LOG_DEBUG("ggml_vk_test_dequant(" << ne << ")");
+    const size_t x_sz = sizeof(float) * ne;
+    const size_t x_sz_f16 = sizeof(ggml_fp16_t) * ne;
+    const size_t qx_sz = ne * ggml_type_size(quant)/ggml_blck_size(quant);
+    float * x = (float *) malloc(x_sz);
+    void * qx = malloc(qx_sz);
+    vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx, qx_sz, vk::MemoryPropertyFlagBits::eDeviceLocal);
+    vk_buffer x_buf = ggml_vk_create_buffer_check(ctx, x_sz_f16, vk::MemoryPropertyFlagBits::eDeviceLocal);
+    ggml_fp16_t * x_chk = (ggml_fp16_t *) malloc(x_sz_f16);
+
+    for (size_t i = 0; i < ne; i++) {
+        x[i] = rand() / (float)RAND_MAX;
+    }
+
+    vk_pipeline p = ctx->device->pipeline_dequant[quant];
+
+    ggml_vk_quantize_data(x, qx, ne, quant);
+
+    ggml_pipeline_allocate_descriptor_sets(ctx, p, 1);
+
+    ggml_vk_buffer_write(ctx, qx_buf, 0, qx, qx_sz);
+
+    vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
+    ggml_vk_ctx_begin(ctx, subctx);
+    const std::vector<uint32_t> pc = { 1, (uint32_t)ne, (uint32_t)ne, (uint32_t)ne, (uint32_t)ne };
+    ggml_vk_dispatch_pipeline(ctx, subctx, p, { { qx_buf, 0, qx_sz }, { x_buf, 0, x_sz_f16 } }, pc.size() * sizeof(int), pc.data(), { (uint32_t)ne, 1, 1});
+    ggml_vk_ctx_end(subctx);
+
+    auto begin = std::chrono::high_resolution_clock::now();
+
+    ggml_vk_submit(subctx, ctx->fence);
+    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_dequant waitForFences");
+    ctx->device->device.resetFences({ ctx->fence });
+
+    auto end = std::chrono::high_resolution_clock::now();
+
+    double ms_dequant = std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() / 1000.0;
+    ggml_vk_buffer_read(ctx, x_buf, 0, x_chk, x_sz_f16);
+
+    int first_err = -1;
+
+    double avg_err = 0.0;
+    for (size_t i = 0; i < ne; i++) {
+        double error = std::fabs(x[i] - ggml_fp16_to_fp32(x_chk[i]));
+        avg_err += error;
+
+        if (first_err < 0 && error > 0.05) {
+            first_err = i;
+        }
+    }
+
+    avg_err /= ne;
+
+    std::cerr << "TEST DEQUANT " << ggml_type_name(quant) << " time=" << ms_dequant << "ms avg_err=" << avg_err << std::endl;
+
+    if (avg_err > 0.1) {
+        std::cerr << "first_error = " << first_err << std::endl;
+        std::cerr << "Actual result: " << std::endl << std::endl;
+        for (int i = std::max(0, first_err - 5); i < std::min((int)ne, first_err + 5); i++) {
+            std::cerr << ggml_fp16_to_fp32(x_chk[i]) << ", ";
+        }
+        std::cerr << std::endl << "Expected result: " << std::endl << std::endl;
+        for (int i = std::max(0, first_err - 5); i < std::min((int)ne, first_err + 5); i++) {
+            std::cerr << x[i] << ", ";
+        }
+        std::cerr << std::endl;
+    }
+
+    ggml_vk_destroy_buffer(x_buf);
+    ggml_vk_destroy_buffer(qx_buf);
+
+    free(x);
+    free(qx);
+    free(x_chk);
+}
+
+static void ggml_vk_test_dequant_matmul(ggml_backend_vk_context * ctx, size_t m, size_t n, size_t k, size_t batch, size_t num_it, size_t split_k, size_t shader_size, ggml_type quant) {
+    VK_LOG_DEBUG("ggml_vk_test_dequant_matmul(" << m << ", " << n << ", " << k << ", " << batch << ", " << num_it << ", " << split_k << ", " << ggml_type_name(quant) << ")");
+    const size_t x_ne = m * k * batch;
+    const size_t y_ne = k * n * batch;
+    const size_t d_ne = m * n * batch;
+
+    vk_pipeline p;
+    std::string shname;
+    if (shader_size == 0) {
+        p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->a_s;
+        shname = std::string(ggml_type_name(quant)) + "_ALIGNED_S";
+    } else if (shader_size == 1) {
+        p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->a_m;
+        shname = std::string(ggml_type_name(quant)) + "_ALIGNED_M";
+    } else if (shader_size == 2) {
+        p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->a_l;
+        shname = std::string(ggml_type_name(quant)) + "_ALIGNED_L";
+    } else {
+        GGML_ASSERT(0);
+    }
+
+    const size_t kpad = ggml_vk_align_size(k, p->align);
+
+    if (k != kpad) {
+        if (shader_size == 0) {
+            p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->s;
+            shname = std::string(ggml_type_name(quant)) + "_S";
+        } else if (shader_size == 1) {
+            p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->m;
+            shname = std::string(ggml_type_name(quant)) + "_M";
+        } else if (shader_size == 2) {
+            p = ctx->device->pipeline_dequant_mul_mat_mat[quant]->l;
+            shname = std::string(ggml_type_name(quant)) + "_L";
+        } else {
+            GGML_ASSERT(0);
+        }
+    }
+
+    const size_t x_sz = sizeof(float) * x_ne;
+    const size_t y_sz = sizeof(float) * y_ne;
+    const size_t qx_sz = x_ne * ggml_type_size(quant)/ggml_blck_size(quant);
+    const size_t d_sz = sizeof(float) * d_ne;
+    float * x = (float *) malloc(x_sz);
+    float * y = (float *) malloc(y_sz);
+    void * qx = malloc(qx_sz);
+    vk_buffer qx_buf = ggml_vk_create_buffer_check(ctx, qx_sz, vk::MemoryPropertyFlagBits::eDeviceLocal);
+    vk_buffer y_buf = ggml_vk_create_buffer_check(ctx, y_sz, vk::MemoryPropertyFlagBits::eDeviceLocal);
+    vk_buffer d_buf = ggml_vk_create_buffer_check(ctx, d_sz, vk::MemoryPropertyFlagBits::eDeviceLocal);
+    float * d = (float *) malloc(d_sz);
+    float * d_chk = (float *) malloc(d_sz);
+
+    for (size_t i = 0; i < x_ne; i++) {
+        x[i] = (rand() / (float)RAND_MAX) * 2.0f - 1.0f;
+    }
+
+    ggml_vk_quantize_data(x, qx, x_ne, quant);
+
+    for (size_t i = 0; i < y_ne; i++) {
+        // y[i] = rand() / (float)RAND_MAX;
+        y[i] = (i % k == i / k) ? 1.0f : 0.0f;
+    }
+
+    ggml_pipeline_allocate_descriptor_sets(ctx, p, num_it);
+    if (split_k > 1) {
+        ggml_pipeline_allocate_descriptor_sets(ctx, ctx->device->pipeline_matmul_split_k_reduce, num_it);
+
+        if (ctx->prealloc_split_k == nullptr || ctx->prealloc_split_k->size < sizeof(float) * d_ne * split_k) {
+            // Resize buffer
+            if (ctx->prealloc_split_k != nullptr) {
+                ggml_vk_destroy_buffer(ctx->prealloc_split_k);
+            }
+            ctx->prealloc_split_k = ggml_vk_create_buffer_check(ctx, sizeof(float) * d_ne * split_k, vk::MemoryPropertyFlagBits::eDeviceLocal);
+        }
+    }
+
+    ggml_vk_buffer_write(ctx, qx_buf, 0, qx, qx_sz);
+    ggml_vk_buffer_write(ctx, y_buf, 0, y, y_sz);
+
+    vk_context * subctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
+    for (size_t i = 0; i < num_it; i++) {
+        ggml_vk_ctx_begin(ctx, subctx);
+        ggml_vk_matmul(
+            ctx, subctx, p, ggml_vk_subbuffer(qx_buf), ggml_vk_subbuffer(y_buf), ggml_vk_subbuffer(d_buf), ggml_vk_subbuffer(ctx->prealloc_split_k),
+            m, n, k,
+            k, k, m, k*m, k*n, m*n,
+            split_k, batch, batch, batch, 1, 1
+        );
+        ggml_vk_ctx_end(subctx);
+    }
+
+    auto begin = std::chrono::high_resolution_clock::now();
+
+    ggml_vk_submit(subctx, ctx->fence);
+    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_test_dequant waitForFences");
+    ctx->device->device.resetFences({ ctx->fence });
+
+    auto end = std::chrono::high_resolution_clock::now();
+
+    double time_ms = std::chrono::duration_cast<std::chrono::microseconds>(end-begin).count() / 1000.0;
+    ggml_vk_buffer_read(ctx, d_buf, 0, d, d_sz);
+
+    ggml_init_params iparams = {
+        /*.mem_size   =*/ 1024*1024*1024,
+        /*.mem_buffer =*/ NULL,
+        /*.no_alloc   =*/ true,
+    };
+
+    ggml_context * ggml_ctx = ggml_init(iparams);
+
+    ggml_tensor * src0_ggml = ggml_new_tensor_3d(ggml_ctx, quant, k, m, batch);
+    ggml_tensor * src1_ggml = ggml_new_tensor_3d(ggml_ctx, GGML_TYPE_F32, k, n, batch);
+    ggml_tensor * tensor_ggml = ggml_mul_mat(ggml_ctx, src0_ggml, src1_ggml);
+
+    src0_ggml->data = qx;
+    src1_ggml->data = y;
+    tensor_ggml->data = d_chk;
+
+    ggml_cgraph * cgraph = ggml_new_graph(ggml_ctx);
+    ggml_build_forward_expand(cgraph, tensor_ggml);
+
+    ggml_graph_compute_with_ctx(ggml_ctx, cgraph, 1);
+
+    ggml_free(ggml_ctx);
+
+    double avg_err = 0.0;
+    int first_err_n = -1;
+    int first_err_m = -1;
+    int first_err_b = -1;
+
+    for (size_t i = 0; i < m*n*batch; i++) {
+        double err = std::fabs(d[i] - d_chk[i]);
+        avg_err += err;
+
+        if ((err > 0.05f || std::isnan(err)) && first_err_n == -1) {
+            first_err_b = i / (m * n);
+            first_err_n = (i % (m * n)) / m;
+            first_err_m = (i % (m * n)) % m;
+        }
+    }
+
+    avg_err /= m * n;
+
+    std::cerr << "TEST MMQ " << shname << " m=" << m << " n=" << n << " k=" << k << " batch=" << batch << " split_k=" << split_k << " matmul " << time_ms / num_it << "ms avg_err=" << avg_err << std::endl;
+
+    if (avg_err > 0.01 || std::isnan(avg_err)) {
+        std::cerr << "m = " << first_err_m << " n = " << first_err_n << " b = " << first_err_b << std::endl;
+        std::cerr << "Actual result: " << std::endl << std::endl;
+        ggml_vk_print_matrix_area(d, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+        std::cerr << std::endl;
+        std::cerr << "Expected result: " << std::endl << std::endl;
+        ggml_vk_print_matrix_area(d_chk, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+
+        if (split_k > 1) {
+            float * split_k_buf = (float *) malloc(sizeof(float) * d_ne * split_k);
+            ggml_vk_buffer_read(ctx, ctx->prealloc_split_k, 0, split_k_buf, sizeof(float) * d_ne * split_k);
+
+            std::cerr << "d_buf0: " << std::endl << std::endl;
+            ggml_vk_print_matrix_area(split_k_buf, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+
+            std::cerr << "d_buf1: " << std::endl << std::endl;
+            ggml_vk_print_matrix_area(split_k_buf + d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+
+            std::cerr << "d_buf2: " << std::endl << std::endl;
+            ggml_vk_print_matrix_area(split_k_buf + 2 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+
+            std::cerr << "d_buf3: " << std::endl << std::endl;
+            ggml_vk_print_matrix_area(split_k_buf + 3 * d_ne, GGML_TYPE_F32, m, n, first_err_m, first_err_n, first_err_b);
+
+            free(split_k_buf);
+        }
+    }
+
+    ggml_vk_destroy_buffer(qx_buf);
+    ggml_vk_destroy_buffer(y_buf);
+    ggml_vk_destroy_buffer(d_buf);
+
+    free(x);
+    free(qx);
+    free(y);
+    free(d);
+    free(d_chk);
+}
+#endif
+
+static ggml_tensor_extra_gpu * ggml_vk_tensor_create_extra(ggml_tensor * tensor) {
+    VK_LOG_DEBUG("ggml_vk_create_extra(" << tensor << " (" << tensor->name << ", " << ggml_op_name(tensor->op) << "))");
+    ggml_tensor_extra_gpu * extra = new ggml_tensor_extra_gpu;
+    extra->reset();
+    tensor->extra = extra;
+    return extra;
+}
+
+static void ggml_vk_preallocate_buffers_graph(ggml_backend_vk_context * ctx, ggml_tensor * node){
+    VK_LOG_DEBUG("ggml_vk_preallocate_buffers_graph(" << node << ")");
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) node->extra;
+
+    if (extra == nullptr) {
+        return;
+    }
+
+    ggml_tensor * src0 = node->src[0];
+    ggml_tensor * src1 = node->src[1];
+
+    const bool use_src0 = src0 != nullptr;
+    const int64_t ne00 = use_src0 ? src0->ne[0] : 0;
+    const int64_t ne01 = use_src0 ? src0->ne[1] : 0;
+    const int64_t ne02 = use_src0 ? src0->ne[2] : 0;
+    const int64_t ne03 = use_src0 ? src0->ne[3] : 0;
+    const bool use_src1 = src1 != nullptr && node->op != GGML_OP_CPY && node->op != GGML_OP_CONT && node->op != GGML_OP_DUP;
+    const int64_t ne10 = use_src1 ? src1->ne[0] : 0;
+    const int64_t ne11 = use_src1 ? src1->ne[1] : 0;
+    const int64_t ne12 = use_src1 ? src1->ne[2] : 0;
+    const int64_t ne13 = use_src1 ? src1->ne[3] : 0;
+    const int64_t ne20 = node->ne[0];
+    const int64_t ne21 = node->ne[1];
+    const int64_t ne22 = node->ne[2];
+    const int64_t ne23 = node->ne[3];
+
+    const ggml_type src0_type = (use_src0 && src0->type == GGML_TYPE_F32) ? src0->type : GGML_TYPE_F16;
+    const ggml_type src1_type = (use_src1 && src1->type == GGML_TYPE_F32) ? src1->type : GGML_TYPE_F16;
+
+    const bool x_non_contig = use_src0 && !ggml_vk_dim01_contiguous(src0);
+    const bool y_non_contig = use_src1 && !ggml_vk_dim01_contiguous(src1);
+
+    const bool y_f32_kernel = use_src1 && src1->type == GGML_TYPE_F32 && !y_non_contig;
+
+    bool mmp = (use_src0 && use_src1 && src1_type == GGML_TYPE_F32) ? ggml_vk_get_mul_mat_mat_pipeline(ctx, src0_type, y_non_contig ? GGML_TYPE_F16 : src1->type) != nullptr : false;
+
+    const bool qx_needs_dequant = use_src0 && (!mmp || x_non_contig);
+    const bool qy_needs_dequant = use_src1 && ((src1->type != GGML_TYPE_F16 && !y_f32_kernel) || y_non_contig);
+
+    int split_k;
+    if (node->op == GGML_OP_MUL_MAT || node->op == GGML_OP_MUL_MAT_ID) {
+        split_k = ggml_vk_guess_split_k(ne01, ne11, ne10);
+    } else {
+        split_k = 1;
+    }
+    const uint32_t x_ne = ne00 * ne01;
+    const uint32_t y_ne = ne10 * ne11;
+    const uint32_t d_ne = ne20 * ne21;
+
+    const uint64_t x_sz = (use_src0 && qx_needs_dequant) ? ggml_vk_align_size(sizeof(src0_type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ne02 * ne03 : 0;
+    const uint64_t y_sz = (use_src1 && qy_needs_dequant) ? ggml_vk_align_size(sizeof(src1_type) * y_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ne12 * ne13 : 0;
+    uint64_t d_sz = ggml_vk_align_size(ggml_type_size(node->type) * d_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) * ne22 * ne23;
+    const uint64_t split_k_size = split_k > 1 ? d_sz * 4 : 0;
+
+    if (extra->buffer_gpu.expired()) {
+        // Workaround for CPU backend BLAS matmul calls
+        extra->buffer_gpu = ggml_vk_create_buffer_temp(ctx, d_sz);
+    }
+
+    switch (node->op) {
+    case GGML_OP_REPEAT:
+    case GGML_OP_GET_ROWS:
+    case GGML_OP_RESHAPE:
+    case GGML_OP_VIEW:
+    case GGML_OP_PERMUTE:
+    case GGML_OP_TRANSPOSE:
+    case GGML_OP_ADD:
+    case GGML_OP_SCALE:
+    case GGML_OP_SQR:
+    case GGML_OP_CLAMP:
+    case GGML_OP_CPY:
+    case GGML_OP_CONT:
+    case GGML_OP_DUP:
+    case GGML_OP_MUL:
+    case GGML_OP_DIV:
+    case GGML_OP_NORM:
+    case GGML_OP_RMS_NORM:
+    case GGML_OP_DIAG_MASK_INF:
+    case GGML_OP_SOFT_MAX:
+    case GGML_OP_ROPE:
+    case GGML_OP_ARGSORT:
+    case GGML_OP_SUM_ROWS:
+        break;
+    case GGML_OP_UNARY:
+        switch (ggml_get_unary_op(node)) {
+        case GGML_UNARY_OP_SILU:
+        case GGML_UNARY_OP_GELU:
+        case GGML_UNARY_OP_RELU:
+            break;
+        default:
+            return;
+        }
+        break;
+    case GGML_OP_MUL_MAT:
+    case GGML_OP_MUL_MAT_ID:
+        if (ctx->prealloc_size_x < x_sz) {
+            ctx->prealloc_size_x = x_sz;
+        }
+        if (ctx->prealloc_size_y < y_sz) {
+            ctx->prealloc_size_y = y_sz;
+        }
+        if (ctx->prealloc_size_split_k < split_k_size) {
+            ctx->prealloc_size_split_k = split_k_size;
+        }
+        if (ctx->staging_size < x_sz + y_sz) {
+            ctx->staging_size = x_sz + y_sz;
+        }
+        break;
+    default:
+        return;
+    }
+}
+
+static void ggml_vk_preallocate_buffers(ggml_backend_vk_context * ctx) {
+#if defined(GGML_VULKAN_RUN_TESTS)
+    ctx->staging = ggml_vk_create_buffer_check(ctx, 100ul * 1024ul * 1024ul,
+        vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached,
+        vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
+    ggml_vk_test_transfer(ctx, 8192 * 1000, false);
+    ggml_vk_test_transfer(ctx, 8192 * 1000, true);
+
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_F32);
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q4_0);
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q4_1);
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q5_0);
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q5_1);
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q8_0);
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q2_K);
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q3_K);
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q4_K);
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q5_K);
+    ggml_vk_test_dequant(ctx, 7680, GGML_TYPE_Q6_K);
+
+    ggml_vk_test_matmul<ggml_fp16_t, ggml_fp16_t>(ctx, 512, 512, 100, 32, 100, 1, 2);
+
+    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 1, 0);
+    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 1, 1);
+    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 1, 2);
+    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 4, 0);
+    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 4, 1);
+    ggml_vk_test_matmul<float, float>(ctx, 128, 512, 512, 2, 100, 4, 2);
+
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q4_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q4_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q4_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q4_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q4_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q4_0);
+
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q4_1);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q4_1);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q4_1);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q4_1);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q4_1);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q4_1);
+
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q5_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q5_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q5_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q5_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q5_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q5_0);
+
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q5_1);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q5_1);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q5_1);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q5_1);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q5_1);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q5_1);
+
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q8_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q8_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q8_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q8_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q8_0);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q8_0);
+
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q2_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q2_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q2_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q2_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q2_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q2_K);
+
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q3_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q3_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q3_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q3_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q3_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q3_K);
+
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q4_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q4_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q4_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q4_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q4_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q4_K);
+
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q5_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q5_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q5_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q5_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q5_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q5_K);
+
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 0, GGML_TYPE_Q6_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 1, GGML_TYPE_Q6_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 1, 2, GGML_TYPE_Q6_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 0, GGML_TYPE_Q6_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 1, GGML_TYPE_Q6_K);
+    ggml_vk_test_dequant_matmul(ctx, 128, 512, 512, 2, 100, 4, 2, GGML_TYPE_Q6_K);
+
+    std::cerr << std::endl;
+
+    const std::vector<size_t> vals {
+        8, 8, 8,
+        100, 46, 576,
+        623, 111, 128,
+        100, 46, 558,
+        512, 1, 256,
+        128, 110, 622,
+        511, 511, 127,
+        511, 511, 7,
+        511, 511, 17,
+        49, 49, 128,
+        128, 49, 49,
+        4096, 49, 4096,
+        11008, 49, 4096,
+        4096, 49, 11008,
+        32000, 49, 4096,
+        512, 512, 128,
+        128, 512, 512,
+        4096, 512, 4096,
+        11008, 512, 4096,
+        4096, 512, 11008,
+        32000, 512, 4096,
+    };
+    const size_t num_it = 1;
+    for (size_t i = 0; i < vals.size(); i += 3) {
+        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 1, 0);
+        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 1, 1);
+        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 1, 2);
+        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 4, 0);
+        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 4, 1);
+        ggml_vk_test_matmul<ggml_fp16_t, float>(ctx, vals[i], vals[i + 1], vals[i + 2], 2, num_it, 4, 2);
+        std::cerr << std::endl;
+    }
+
+    GGML_ASSERT(false);
+#endif
+
+    if (ctx->prealloc_x == nullptr || (ctx->prealloc_size_x > 0 && ctx->prealloc_x->size < ctx->prealloc_size_x)) {
+        VK_LOG_MEMORY("ggml_vk_preallocate_buffers(x_size: " << ctx->prealloc_size_x << ")");
+        // Resize buffer
+        if (ctx->prealloc_x != nullptr) {
+            ggml_vk_destroy_buffer(ctx->prealloc_x);
+        }
+        ctx->prealloc_x = ggml_vk_create_buffer_device(ctx->device, ctx->prealloc_size_x);
+    }
+    if (ctx->prealloc_y == nullptr || (ctx->prealloc_size_y > 0 && ctx->prealloc_y->size < ctx->prealloc_size_y)) {
+        VK_LOG_MEMORY("ggml_vk_preallocate_buffers(y_size: " << ctx->prealloc_size_y << ")");
+        // Resize buffer
+        if (ctx->prealloc_y != nullptr) {
+            ggml_vk_destroy_buffer(ctx->prealloc_y);
+        }
+        ctx->prealloc_y = ggml_vk_create_buffer_device(ctx->device, ctx->prealloc_size_y);
+    }
+    if (ctx->prealloc_split_k == nullptr || (ctx->prealloc_size_split_k > 0 && ctx->prealloc_split_k->size < ctx->prealloc_size_split_k)) {
+        VK_LOG_MEMORY("ggml_vk_preallocate_buffers(split_k_size: " << ctx->prealloc_size_split_k << ")");
+        // Resize buffer
+        if (ctx->prealloc_split_k != nullptr) {
+            ggml_vk_destroy_buffer(ctx->prealloc_split_k);
+        }
+        ctx->prealloc_split_k = ggml_vk_create_buffer_device(ctx->device, ctx->prealloc_size_split_k);
+    }
+    if (ctx->staging == nullptr || (ctx->staging_size > 0 && ctx->staging->size < ctx->staging_size)) {
+        VK_LOG_MEMORY("ggml_vk_preallocate_buffers(staging_size: " << ctx->staging_size << ")");
+        // Resize buffer
+        if (ctx->staging != nullptr) {
+            ggml_vk_destroy_buffer(ctx->staging);
+        }
+        ctx->staging = ggml_vk_create_buffer_check(ctx->device, ctx->staging_size,
+            vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostCached,
+            vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent);
+    }
+}
+
+static void ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_tensor * node, bool last_node){
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) node->extra;
+
+    if (ggml_is_empty(node) || extra == nullptr) {
+        return;
+    }
+
+    VK_LOG_DEBUG("ggml_vk_build_graph(" << node << ", " << ggml_op_name(node->op) << ")");
+    ctx->semaphore_idx = 0;
+    ctx->staging_offset = 0;
+
+    const ggml_tensor * src0 = node->src[0];
+    const ggml_tensor * src1 = node->src[1];
+    const ggml_tensor * src2 = node->src[2];
+
+    switch (node->op) {
+    // Return on empty ops to avoid generating a compute_ctx and setting exit_tensor
+    case GGML_OP_RESHAPE:
+    case GGML_OP_VIEW:
+    case GGML_OP_PERMUTE:
+    case GGML_OP_TRANSPOSE:
+    case GGML_OP_NONE:
+        return;
+    case GGML_OP_UNARY:
+        switch (ggml_get_unary_op(node)) {
+        case GGML_UNARY_OP_SILU:
+        case GGML_UNARY_OP_GELU:
+        case GGML_UNARY_OP_RELU:
+            break;
+        default:
+            return;
+        }
+        break;
+    case GGML_OP_REPEAT:
+    case GGML_OP_GET_ROWS:
+    case GGML_OP_ADD:
+    case GGML_OP_MUL:
+    case GGML_OP_DIV:
+    case GGML_OP_SCALE:
+    case GGML_OP_SQR:
+    case GGML_OP_CLAMP:
+    case GGML_OP_CPY:
+    case GGML_OP_CONT:
+    case GGML_OP_DUP:
+    case GGML_OP_NORM:
+    case GGML_OP_RMS_NORM:
+    case GGML_OP_DIAG_MASK_INF:
+    case GGML_OP_SOFT_MAX:
+    case GGML_OP_ROPE:
+    case GGML_OP_MUL_MAT:
+    case GGML_OP_MUL_MAT_ID:
+    case GGML_OP_ARGSORT:
+    case GGML_OP_SUM_ROWS:
+        break;
+    default:
+        std::cerr << "ggml_vulkan: Error: Missing op: " << ggml_op_name(node->op) << std::endl;
+        GGML_ASSERT(false);
+        return;
+    }
+
+    if (ctx->compute_ctx == nullptr) {
+        ctx->compute_ctx = ggml_vk_create_context(ctx, ctx->device->compute_queue);
+        ggml_vk_ctx_begin(ctx->device, ctx->compute_ctx);
+    }
+
+    switch (node->op) {
+    case GGML_OP_REPEAT:
+        ggml_vk_repeat(ctx, ctx->compute_ctx, src0, src1, node);
+
+        break;
+    case GGML_OP_GET_ROWS:
+        ggml_vk_get_rows(ctx, ctx->compute_ctx, src0, src1, node);
+
+        break;
+    case GGML_OP_ADD:
+        ggml_vk_add(ctx, ctx->compute_ctx, src0, src1, node);
+
+        break;
+    case GGML_OP_MUL:
+        ggml_vk_mul(ctx, ctx->compute_ctx, src0, src1, node);
+
+        break;
+    case GGML_OP_DIV:
+        ggml_vk_div(ctx, ctx->compute_ctx, src0, src1, node);
+
+        break;
+    case GGML_OP_SCALE:
+        ggml_vk_scale(ctx, ctx->compute_ctx, src0, node);
+
+        break;
+    case GGML_OP_SQR:
+        ggml_vk_sqr(ctx, ctx->compute_ctx, src0, node);
+
+        break;
+    case GGML_OP_CLAMP:
+        ggml_vk_clamp(ctx, ctx->compute_ctx, src0, node);
+
+        break;
+    case GGML_OP_CPY:
+    case GGML_OP_CONT:
+    case GGML_OP_DUP:
+        ggml_vk_cpy(ctx, ctx->compute_ctx, src0, node);
+
+        break;
+    case GGML_OP_NORM:
+        ggml_vk_norm(ctx, ctx->compute_ctx, src0, node);
+
+        break;
+    case GGML_OP_RMS_NORM:
+        ggml_vk_rms_norm(ctx, ctx->compute_ctx, src0, node);
+
+        break;
+    case GGML_OP_UNARY:
+        switch (ggml_get_unary_op(node)) {
+        case GGML_UNARY_OP_SILU:
+        case GGML_UNARY_OP_GELU:
+        case GGML_UNARY_OP_RELU:
+            ggml_vk_unary(ctx, ctx->compute_ctx, src0, node);
+            break;
+        default:
+            return;
+        }
+        break;
+    case GGML_OP_DIAG_MASK_INF:
+        ggml_vk_diag_mask_inf(ctx, ctx->compute_ctx, src0, node);
+
+        break;
+    case GGML_OP_SOFT_MAX:
+        ggml_vk_soft_max(ctx, ctx->compute_ctx, src0, src1, node);
+
+        break;
+    case GGML_OP_ROPE:
+        ggml_vk_rope(ctx, ctx->compute_ctx, src0, src1, src2, node);
+
+        break;
+    case GGML_OP_ARGSORT:
+        ggml_vk_argsort(ctx, ctx->compute_ctx, src0, node);
+
+        break;
+    case GGML_OP_SUM_ROWS:
+        ggml_vk_sum_rows(ctx, ctx->compute_ctx, src0, node);
+
+        break;
+    case GGML_OP_MUL_MAT:
+        ggml_vk_mul_mat(ctx, ctx->compute_ctx, src0, src1, node);
+
+        break;
+    case GGML_OP_MUL_MAT_ID:
+        ggml_vk_mul_mat_id(ctx, ctx->compute_ctx, src0, src1, src2, node);
+
+        break;
+    default:
+        return;
+    }
+
+    extra->ctx_idx = ctx->compute_ctx->idx;
+
+#ifdef GGML_VULKAN_CHECK_RESULTS
+    // Force context reset on each node so that each tensor ends up in its own context
+    // and can be run and compared to its CPU equivalent separately
+    last_node = true;
+#endif
+
+    if (last_node) {
+        ggml_vk_ctx_end(ctx->compute_ctx);
+        ctx->compute_ctx->exit_tensor = node;
+        ctx->compute_ctx = nullptr;
+    }
+}
+
+static bool ggml_vk_compute_forward(ggml_backend_vk_context * ctx, ggml_tensor * tensor){
+    ggml_tensor_extra_gpu * extra = nullptr;
+
+    switch (tensor->op) {
+    case GGML_OP_ADD:
+    case GGML_OP_GET_ROWS:
+    case GGML_OP_MUL:
+    case GGML_OP_DIV:
+    case GGML_OP_SCALE:
+    case GGML_OP_SQR:
+    case GGML_OP_CLAMP:
+    case GGML_OP_CPY:
+    case GGML_OP_CONT:
+    case GGML_OP_DUP:
+    case GGML_OP_NORM:
+    case GGML_OP_RMS_NORM:
+    case GGML_OP_DIAG_MASK_INF:
+    case GGML_OP_SOFT_MAX:
+    case GGML_OP_ROPE:
+    case GGML_OP_RESHAPE:
+    case GGML_OP_VIEW:
+    case GGML_OP_PERMUTE:
+    case GGML_OP_TRANSPOSE:
+    case GGML_OP_NONE:
+    case GGML_OP_ARGSORT:
+    case GGML_OP_SUM_ROWS:
+        extra = (ggml_tensor_extra_gpu *) tensor->extra;
+
+        break;
+    case GGML_OP_UNARY:
+        switch (ggml_get_unary_op(tensor)) {
+        case GGML_UNARY_OP_SILU:
+        case GGML_UNARY_OP_GELU:
+        case GGML_UNARY_OP_RELU:
+            extra = (ggml_tensor_extra_gpu *) tensor->extra;
+            break;
+        default:
+            return false;
+        }
+        break;
+    case GGML_OP_MUL_MAT:
+    case GGML_OP_MUL_MAT_ID:
+        extra = (ggml_tensor_extra_gpu *) tensor->extra;
+
+        break;
+    default:
+        return false;
+    }
+
+    if (extra == nullptr) {
+        return false;
+    }
+
+    VK_LOG_DEBUG("ggml_vk_compute_forward(" << tensor << ", name=" << tensor->name << ", op=" << ggml_op_name(tensor->op) << ", type=" << tensor->type << ", ne0=" << tensor->ne[0] << ", ne1=" << tensor->ne[1] << ", ne2=" << tensor->ne[2] << ", ne3=" << tensor->ne[3] << ", nb0=" << tensor->nb[0] << ", nb1=" << tensor->nb[1] << ", nb2=" << tensor->nb[2] << ", nb3=" << tensor->nb[3] << ", view_src=" << tensor->view_src << ", view_offs=" << tensor->view_offs << ")");
+
+#ifdef GGML_VULKAN_CHECK_RESULTS
+    ggml_vk_check_results_0(ctx, tensor);
+#endif
+
+    vk_context& subctx = ctx->gc.contexts[extra->ctx_idx];
+
+    // Only run if ctx hasn't been submitted yet
+    if (!subctx.seqs.empty()) {
+        // Do staging buffer copies
+        for (auto& cpy : subctx.in_memcpys) {
+            memcpy(cpy.dst, cpy.src, cpy.n);
+        }
+
+        ggml_vk_submit(&subctx, ctx->fence);
+    }
+
+    if (tensor == subctx.exit_tensor) {
+        VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_vk_compute_forward waitForFences");
+        ctx->device->device.resetFences({ ctx->fence });
+
+        // Do staging buffer copies
+        for (auto& cpy : subctx.out_memcpys) {
+            memcpy(cpy.dst, cpy.src, cpy.n);
+        }
+        subctx.in_memcpys.clear();
+        subctx.out_memcpys.clear();
+    }
+
+    return true;
+}
+
+// Clean up after graph processing is done
+static void ggml_vk_graph_cleanup(ggml_backend_vk_context * ctx) {
+    VK_LOG_DEBUG("ggml_vk_graph_cleanup()");
+    for (auto& buffer : ctx->gc.temp_buffers) {
+        ggml_vk_pool_free(ctx, buffer);
+    }
+    ctx->gc.temp_buffers.clear();
+
+    for (auto& pipeline : ctx->device->pipelines) {
+        if (pipeline.expired()) {
+            continue;
+        }
+
+        vk_pipeline pl = pipeline.lock();
+        ggml_pipeline_cleanup(pl);
+    }
+
+    ggml_vk_queue_cleanup(ctx->device, ctx->device->compute_queue);
+    ggml_vk_queue_cleanup(ctx->device, ctx->device->transfer_queue);
+
+    for (size_t i = 0; i < ctx->gc.semaphores.size(); i++) {
+        ctx->device->device.destroySemaphore({ ctx->gc.semaphores[i].s });
+    }
+    ctx->gc.semaphores.clear();
+
+    for (size_t i = 0; i < ctx->gc.tl_semaphores.size(); i++) {
+        ctx->device->device.destroySemaphore({ ctx->gc.tl_semaphores[i].s });
+    }
+    ctx->gc.tl_semaphores.clear();
+    ctx->semaphore_idx = 0;
+
+    ctx->event_idx = 0;
+
+    for (auto& event : ctx->gc.events) {
+        ctx->device->device.resetEvent(event);
+    }
+
+    ctx->staging_offset = 0;
+
+    ctx->compute_ctx = nullptr;
+    ctx->transfer_ctx = nullptr;
+    ctx->gc.contexts.clear();
+}
+
+// Clean up on backend free
+static void ggml_vk_cleanup(ggml_backend_vk_context * ctx) {
+    VK_LOG_DEBUG("ggml_vk_cleanup(" << ctx->name << ")");
+    ggml_vk_graph_cleanup(ctx);
+
+    ggml_vk_destroy_buffer(ctx->prealloc_x);
+    ggml_vk_destroy_buffer(ctx->prealloc_y);
+    ggml_vk_destroy_buffer(ctx->prealloc_split_k);
+    ggml_vk_destroy_buffer(ctx->staging);
+
+    for (auto& buffer : ctx->buffer_pool) {
+        ggml_vk_destroy_buffer(buffer);
+    }
+
+    ctx->prealloc_size_x = 0;
+    ctx->prealloc_size_y = 0;
+    ctx->prealloc_size_split_k = 0;
+    ctx->staging_size = 0;
+
+    for (auto& event : ctx->gc.events) {
+        ctx->device->device.destroyEvent(event);
+    }
+    ctx->gc.events.clear();
+
+    ctx->device->device.destroyFence(ctx->fence);
+}
+
+GGML_CALL static int ggml_vk_get_device_count() {
+    ggml_vk_instance_init();
+
+    return vk_instance.device_indices.size();
+}
+
+GGML_CALL static void ggml_vk_get_device_description(int device, char * description, size_t description_size) {
+    ggml_vk_instance_init();
+
+    std::vector<vk::PhysicalDevice> devices = vk_instance.instance.enumeratePhysicalDevices();
+
+    vk::PhysicalDeviceProperties props;
+    devices[device].getProperties(&props);
+
+    snprintf(description, description_size, "%s", props.deviceName.data());
+}
+
+// backend interface
+
+#define UNUSED GGML_UNUSED
+
+// device backend
+
+static void * const vk_ptr_base = (void *)(uintptr_t) 0x1000;  // NOLINT
+
+struct ggml_backend_vk_buffer_context {
+    vk_device_ref device;
+    vk_buffer dev_buffer;
+    ggml_tensor_extra_gpu * temp_tensor_extras = nullptr;
+    size_t temp_tensor_extra_index = 0;
+    std::string name;
+
+    ggml_backend_vk_buffer_context(vk_device_ref device, vk_buffer&& dev_buffer, std::string& name) :
+        device(device),
+        dev_buffer(dev_buffer),
+        name(name) {
+    }
+
+    ~ggml_backend_vk_buffer_context() {
+        ggml_vk_destroy_buffer(dev_buffer);
+        if (temp_tensor_extras != nullptr) {
+            delete[] temp_tensor_extras;
+        }
+    }
+
+    ggml_tensor_extra_gpu * ggml_vk_alloc_temp_tensor_extra() {
+        if (temp_tensor_extras == nullptr) {
+            temp_tensor_extras = new ggml_tensor_extra_gpu[GGML_VK_MAX_NODES];
+        }
+
+        size_t alloc_index = temp_tensor_extra_index;
+        temp_tensor_extra_index = (temp_tensor_extra_index + 1) % GGML_VK_MAX_NODES;
+        ggml_tensor_extra_gpu * extra = &temp_tensor_extras[alloc_index];
+        extra->reset();
+
+        return extra;
+    }
+};
+
+GGML_CALL static const char * ggml_backend_vk_buffer_get_name(ggml_backend_buffer_t buffer) {
+    ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context;
+    return ctx->name.c_str();
+}
+
+GGML_CALL static bool ggml_backend_buffer_is_vk(ggml_backend_buffer_t buffer) {
+    return buffer->iface.get_name == ggml_backend_vk_buffer_get_name;
+}
+
+GGML_CALL static void ggml_backend_vk_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    VK_LOG_MEMORY("ggml_backend_vk_buffer_free_buffer()");
+    ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context;
+    ggml_vk_destroy_buffer(ctx->dev_buffer);
+    delete ctx;
+}
+
+GGML_CALL static void * ggml_backend_vk_buffer_get_base(ggml_backend_buffer_t buffer) {
+    return vk_ptr_base;
+
+    UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_vk_buffer_init_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor) {
+    VK_LOG_DEBUG("ggml_backend_vk_buffer_init_tensor(" << buffer << " (" << buffer->context << "), " << tensor << ")");
+    ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context;
+
+    if (tensor->view_src != nullptr) {
+        GGML_ASSERT(tensor->view_src->buffer->buft == buffer->buft);
+        GGML_ASSERT(tensor->view_src->extra != nullptr);
+        tensor->extra = tensor->view_src->extra;
+    } else {
+        ggml_tensor_extra_gpu * extra = ctx->ggml_vk_alloc_temp_tensor_extra();
+        extra->buffer_gpu = ctx->dev_buffer;
+        extra->offset = (uint8_t *) tensor->data - (uint8_t *) vk_ptr_base;
+        tensor->extra = extra;
+    }
+}
+
+GGML_CALL static void ggml_backend_vk_buffer_set_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    VK_LOG_DEBUG("ggml_backend_vk_buffer_set_tensor(" << buffer << ", " << tensor << ", " << data << ", " << offset << ", " << size << ")");
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
+
+    vk_buffer buf = extra->buffer_gpu.lock();
+
+    ggml_vk_buffer_write(buf, extra->offset + tensor->view_offs + offset, data, size);
+
+    GGML_UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_vk_buffer_get_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    VK_LOG_DEBUG("ggml_backend_vk_buffer_get_tensor(" << buffer << ", " << tensor << ", " << data << ", " << offset << ", " << size << ")");
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
+
+    vk_buffer buf = extra->buffer_gpu.lock();
+
+    ggml_vk_buffer_read(buf, extra->offset + tensor->view_offs + offset, data, size);
+
+    GGML_UNUSED(buffer);
+}
+
+GGML_CALL static bool ggml_backend_vk_buffer_cpy_tensor(ggml_backend_buffer_t buffer, const ggml_tensor * src, ggml_tensor * dst) {
+    if (ggml_backend_buffer_is_vk(src->buffer)) {
+        ggml_tensor_extra_gpu * src_extra = (ggml_tensor_extra_gpu *) src->extra;
+        ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra;
+
+        vk_buffer src_buf = src_extra->buffer_gpu.lock();
+        vk_buffer dst_buf = dst_extra->buffer_gpu.lock();
+
+        ggml_vk_buffer_copy(dst_buf, dst_extra->offset + dst->view_offs, src_buf, src_extra->offset + src->view_offs, ggml_nbytes(src));
+
+        return true;
+    }
+    return false;
+
+    UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_vk_buffer_clear(ggml_backend_buffer_t buffer, uint8_t value) {
+    ggml_backend_vk_buffer_context * ctx = (ggml_backend_vk_buffer_context *)buffer->context;
+
+    ggml_vk_buffer_memset(ctx->dev_buffer, 0, value, buffer->size);
+}
+
+static ggml_backend_buffer_i ggml_backend_vk_buffer_interface = {
+    /* .get_name        = */ ggml_backend_vk_buffer_get_name,
+    /* .free_buffer     = */ ggml_backend_vk_buffer_free_buffer,
+    /* .get_base        = */ ggml_backend_vk_buffer_get_base,
+    /* .init_tensor     = */ ggml_backend_vk_buffer_init_tensor,
+    /* .set_tensor      = */ ggml_backend_vk_buffer_set_tensor,
+    /* .get_tensor      = */ ggml_backend_vk_buffer_get_tensor,
+    /* .cpy_tensor      = */ ggml_backend_vk_buffer_cpy_tensor,
+    /* .clear           = */ ggml_backend_vk_buffer_clear,
+    /* .reset           = */ NULL,
+};
+
+// vk buffer type
+GGML_CALL static const char * ggml_backend_vk_buffer_type_name(ggml_backend_buffer_type_t buft) {
+    ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *)buft->context;
+
+    return ctx->name.c_str();
+}
+
+GGML_CALL static ggml_backend_buffer_t ggml_backend_vk_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    VK_LOG_MEMORY("ggml_backend_vk_buffer_type_alloc_buffer(" << size << ")");
+    ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *) buft->context;
+
+    vk_buffer dev_buffer = nullptr;
+    try {
+        dev_buffer = ggml_vk_create_buffer_device(ctx->device, size);
+    } catch (const vk::SystemError& e) {
+        return nullptr;
+    }
+
+    ggml_backend_vk_buffer_context * bufctx = new ggml_backend_vk_buffer_context(ctx->device, std::move(dev_buffer), ctx->name);
+
+    return ggml_backend_buffer_init(buft, ggml_backend_vk_buffer_interface, bufctx, size);
+}
+
+GGML_CALL static size_t ggml_backend_vk_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
+    ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *) buft->context;
+    return ctx->device->properties.limits.minStorageBufferOffsetAlignment;
+}
+
+GGML_CALL static size_t ggml_backend_vk_buffer_type_get_max_size(ggml_backend_buffer_type_t buft) {
+    ggml_backend_vk_buffer_type_context * ctx = (ggml_backend_vk_buffer_type_context *) buft->context;
+    return ctx->device->max_memory_allocation_size;
+}
+
+GGML_CALL static size_t ggml_backend_vk_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const ggml_tensor * tensor) {
+    return ggml_nbytes(tensor);
+
+    UNUSED(buft);
+}
+
+GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_buffer_type(size_t dev_num) {
+    ggml_vk_instance_init();
+
+    VK_LOG_DEBUG("ggml_backend_vk_buffer_type(" << dev_num << ")");
+
+    vk_device dev = ggml_vk_get_device(dev_num);
+
+    return &dev->buffer_type;
+}
+
+// host buffer type
+
+GGML_CALL static const char * ggml_backend_vk_host_buffer_type_name(ggml_backend_buffer_type_t buft) {
+    return GGML_VK_NAME "_Host";
+
+    UNUSED(buft);
+}
+
+GGML_CALL static const char * ggml_backend_vk_host_buffer_name(ggml_backend_buffer_t buffer) {
+    return GGML_VK_NAME "_Host";
+
+    UNUSED(buffer);
+}
+
+GGML_CALL static void ggml_backend_vk_host_buffer_free_buffer(ggml_backend_buffer_t buffer) {
+    VK_LOG_MEMORY("ggml_backend_vk_host_buffer_free_buffer()");
+    ggml_vk_host_free(vk_instance.devices[0], buffer->context);
+}
+
+GGML_CALL static ggml_backend_buffer_t ggml_backend_vk_host_buffer_type_alloc_buffer(ggml_backend_buffer_type_t buft, size_t size) {
+    VK_LOG_MEMORY("ggml_backend_vk_host_buffer_type_alloc_buffer(" << size << ")");
+
+    size += 32;  // Behave like the CPU buffer type
+    void * ptr = nullptr;
+    try {
+        ptr = ggml_vk_host_malloc(vk_instance.devices[0], size);
+    } catch (vk::SystemError& e) {
+        std::cerr << "ggml_vulkan: Failed to allocate pinned memory." << std::endl;
+        std::cerr << "ggml_vulkan: " << e.what() << std::endl;
+        // fallback to cpu buffer
+        return ggml_backend_buft_alloc_buffer(ggml_backend_cpu_buffer_type(), size);
+    }
+
+    ggml_backend_buffer_t buffer = ggml_backend_cpu_buffer_from_ptr(ptr, size);
+    buffer->buft = buft;
+    buffer->iface.get_name = ggml_backend_vk_host_buffer_name;
+    buffer->iface.free_buffer = ggml_backend_vk_host_buffer_free_buffer;
+
+    return buffer;
+
+    UNUSED(buft);
+}
+
+GGML_CALL static size_t ggml_backend_vk_host_buffer_type_get_alignment(ggml_backend_buffer_type_t buft) {
+    return vk_instance.devices[0]->properties.limits.minMemoryMapAlignment;
+
+    UNUSED(buft);
+}
+
+// Should be changed to return device-specific host buffer type
+// but that probably requires changes in llama.cpp
+GGML_CALL ggml_backend_buffer_type_t ggml_backend_vk_host_buffer_type() {
+    static struct ggml_backend_buffer_type ggml_backend_vk_buffer_type_host = {
+        /* .iface    = */ {
+            /* .get_name         = */ ggml_backend_vk_host_buffer_type_name,
+            /* .alloc_buffer     = */ ggml_backend_vk_host_buffer_type_alloc_buffer,
+            /* .get_alignment    = */ ggml_backend_vk_host_buffer_type_get_alignment,
+            /* .get_max_size     = */ NULL, // defaults to SIZE_MAX
+            /* .get_alloc_size   = */ ggml_backend_cpu_buffer_type()->iface.get_alloc_size,
+            /* .is_host          = */ ggml_backend_cpu_buffer_type()->iface.is_host,
+        },
+        /* .context  = */ nullptr,
+    };
+
+    // Make sure device 0 is initialized
+    ggml_vk_instance_init();
+    ggml_vk_get_device(0);
+
+    return &ggml_backend_vk_buffer_type_host;
+}
+
+
+// backend
+
+GGML_CALL static const char * ggml_backend_vk_name(ggml_backend_t backend) {
+    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
+
+    return ctx->name.c_str();
+}
+
+GGML_CALL static void ggml_backend_vk_free(ggml_backend_t backend) {
+    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
+    VK_LOG_DEBUG("ggml_backend_vk_free(" << ctx->name << ")");
+
+    ggml_vk_cleanup(ctx);
+
+    delete ctx;
+    delete backend;
+}
+
+GGML_CALL static ggml_backend_buffer_type_t ggml_backend_vk_get_default_buffer_type(ggml_backend_t backend) {
+    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
+
+    return &ctx->device->buffer_type;
+}
+
+GGML_CALL static void ggml_backend_vk_set_tensor_async(ggml_backend_t backend, ggml_tensor * tensor, const void * data, size_t offset, size_t size) {
+    VK_LOG_DEBUG("ggml_backend_vk_set_tensor_async(" << size << ")");
+    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
+    GGML_ASSERT((tensor->buffer->buft == ggml_backend_vk_get_default_buffer_type(backend) || tensor->buffer->buft == ggml_backend_vk_host_buffer_type()) && "unsupported buffer type");
+
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
+
+    if (ctx->transfer_ctx == nullptr) {
+        // Initialize new transfer context
+        ctx->transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue);
+        ggml_vk_ctx_begin(ctx->device, ctx->transfer_ctx);
+    }
+
+    vk_buffer buf = extra->buffer_gpu.lock();
+
+    ggml_vk_buffer_write_async(ctx->transfer_ctx, buf, extra->offset + tensor->view_offs + offset, data, size, ctx->staging, ctx->staging_offset);
+}
+
+GGML_CALL static void ggml_backend_vk_get_tensor_async(ggml_backend_t backend, const ggml_tensor * tensor, void * data, size_t offset, size_t size) {
+    VK_LOG_DEBUG("ggml_backend_vk_get_tensor_async(" << size << ")");
+    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
+    GGML_ASSERT((tensor->buffer->buft == ggml_backend_vk_get_default_buffer_type(backend) || tensor->buffer->buft == ggml_backend_vk_host_buffer_type()) && "unsupported buffer type");
+
+    ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
+
+    if (ctx->transfer_ctx == nullptr) {
+        // Initialize new transfer context
+        ctx->transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue);
+        ggml_vk_ctx_begin(ctx->device, ctx->transfer_ctx);
+    }
+
+    vk_buffer buf = extra->buffer_gpu.lock();
+
+    ggml_vk_buffer_read_async(ctx->transfer_ctx, buf, extra->offset + tensor->view_offs + offset, data, size, ctx->staging, ctx->staging_offset);
+}
+
+GGML_CALL static bool ggml_backend_vk_cpy_tensor_async(ggml_backend_t backend, const ggml_tensor * src, ggml_tensor * dst) {
+    VK_LOG_DEBUG("ggml_backend_vk_cpy_tensor_async()");
+    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
+    if ((dst->buffer->buft == ggml_backend_vk_get_default_buffer_type(backend) || dst->buffer->buft == ggml_backend_vk_host_buffer_type()) && ggml_backend_buffer_is_vk(src->buffer)) {
+        ggml_tensor_extra_gpu * src_extra = (ggml_tensor_extra_gpu *) src->extra;
+        ggml_tensor_extra_gpu * dst_extra = (ggml_tensor_extra_gpu *) dst->extra;
+
+        if (ctx->transfer_ctx == nullptr) {
+            // Initialize new transfer context
+            ctx->transfer_ctx = ggml_vk_create_context(ctx, ctx->device->transfer_queue);
+            ggml_vk_ctx_begin(ctx->device, ctx->transfer_ctx);
+        }
+
+        vk_buffer src_buf = src_extra->buffer_gpu.lock();
+        vk_buffer dst_buf = dst_extra->buffer_gpu.lock();
+
+        ggml_vk_buffer_copy_async(ctx->transfer_ctx, dst_buf, dst_extra->offset + dst->view_offs, src_buf, src_extra->offset + src->view_offs, ggml_nbytes(src));
+        return true;
+    }
+
+    return false;
+}
+
+GGML_CALL static void ggml_backend_vk_synchronize(ggml_backend_t backend) {
+    VK_LOG_DEBUG("ggml_backend_vk_synchronize()");
+    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
+    if(ctx->transfer_ctx == nullptr) {
+        return;
+    }
+
+    ggml_vk_ctx_end(ctx->transfer_ctx);
+
+    for (auto& cpy : ctx->transfer_ctx->in_memcpys) {
+        memcpy(cpy.dst, cpy.src, cpy.n);
+    }
+
+    ggml_vk_submit(ctx->transfer_ctx, ctx->fence);
+    VK_CHECK(ctx->device->device.waitForFences({ ctx->fence }, true, UINT64_MAX), "ggml_backend_vk_synchronize waitForFences");
+    ctx->device->device.resetFences({ ctx->fence });
+
+    for (auto& cpy : ctx->transfer_ctx->out_memcpys) {
+        memcpy(cpy.dst, cpy.src, cpy.n);
+    }
+
+    ctx->transfer_ctx = nullptr;
+}
+
+static bool ggml_vk_is_empty(ggml_tensor * node) {
+    return ggml_is_empty(node) || node->op == GGML_OP_NONE || node->op == GGML_OP_RESHAPE || node->op == GGML_OP_TRANSPOSE || node->op == GGML_OP_VIEW || node->op == GGML_OP_PERMUTE;
+}
+
+GGML_CALL static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
+    VK_LOG_DEBUG("ggml_backend_vk_graph_compute(" << cgraph->n_nodes << " nodes)");
+    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
+
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        ggml_vk_preallocate_buffers_graph(ctx, cgraph->nodes[i]);
+    }
+    ggml_vk_preallocate_buffers(ctx);
+
+    int last_node = cgraph->n_nodes - 1;
+
+    // If the last op in the cgraph isn't backend GPU, the command buffer doesn't get closed properly
+    while (last_node > 0 && ggml_vk_is_empty(cgraph->nodes[last_node])) {
+        last_node -= 1;
+    }
+
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        ggml_vk_build_graph(ctx,cgraph->nodes[i], i == last_node);
+    }
+
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        ggml_tensor * node = cgraph->nodes[i];
+
+        if (ggml_vk_is_empty(node)) {
+            continue;
+        }
+
+        bool ok = ggml_vk_compute_forward(ctx, node);
+        if (!ok) {
+            fprintf(stderr, "%s: error: op not supported %s (%s)\n", __func__, node->name, ggml_op_name(node->op));
+        }
+#ifdef GGML_VULKAN_CHECK_RESULTS
+        else {
+            ggml_vk_check_results_1(ctx, node);
+        }
+#endif
+        GGML_ASSERT(ok);
+    }
+
+    ggml_vk_graph_cleanup(ctx);
+
+    return GGML_STATUS_SUCCESS;
+
+    UNUSED(backend);
+}
+
+GGML_CALL static bool ggml_backend_vk_supports_op(ggml_backend_t backend, const ggml_tensor * op) {
+    // ggml_backend_vk_context * ctx = (ggml_backend_vk_context *) backend->context;
+
+    switch (op->op) {
+        case GGML_OP_UNARY:
+            switch (ggml_get_unary_op(op)) {
+                case GGML_UNARY_OP_GELU:
+                case GGML_UNARY_OP_SILU:
+                case GGML_UNARY_OP_RELU:
+                    return ggml_is_contiguous(op->src[0]);
+                default:
+                    return false;
+            }
+            break;
+        case GGML_OP_MUL_MAT:
+        case GGML_OP_MUL_MAT_ID:
+            {
+                switch (op->src[0]->type) {
+                    case GGML_TYPE_F32:
+                    case GGML_TYPE_F16:
+                    case GGML_TYPE_Q4_0:
+                    case GGML_TYPE_Q4_1:
+                    case GGML_TYPE_Q5_0:
+                    case GGML_TYPE_Q5_1:
+                    case GGML_TYPE_Q8_0:
+                    case GGML_TYPE_Q2_K:
+                    case GGML_TYPE_Q3_K:
+                    case GGML_TYPE_Q4_K:
+                    case GGML_TYPE_Q5_K:
+                    case GGML_TYPE_Q6_K:
+                        break;
+                    default:
+                        return false;
+                }
+                struct ggml_tensor * a;
+                struct ggml_tensor * b;
+                if (op->op == GGML_OP_MUL_MAT) {
+                    a = op->src[0];
+                    b = op->src[1];
+                } else {
+                    a = op->src[2];
+                    b = op->src[1];
+                }
+                if (a->ne[3] != b->ne[3]) {
+                    return false;
+                }
+                return true;
+            } break;
+        case GGML_OP_GET_ROWS:
+            {
+                switch (op->src[0]->type) {
+                    case GGML_TYPE_F32:
+                    case GGML_TYPE_F16:
+                    case GGML_TYPE_Q4_0:
+                    case GGML_TYPE_Q4_1:
+                    case GGML_TYPE_Q5_0:
+                    case GGML_TYPE_Q5_1:
+                    case GGML_TYPE_Q8_0:
+                        return true;
+                    default:
+                        return false;
+                }
+            } break;
+        case GGML_OP_CPY:
+        case GGML_OP_DUP:
+            {
+                ggml_type src0_type = op->src[0]->type;
+                ggml_type src1_type = op->src[1] != nullptr ? op->src[1]->type : src0_type;
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F32) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F32 && src1_type == GGML_TYPE_F16) {
+                    return true;
+                }
+                if (src0_type == GGML_TYPE_F16 && src1_type == GGML_TYPE_F16) {
+                    return true;
+                }
+                return false;
+            } break;
+        // case GGML_OP_REPEAT:
+        //     {
+        //         ggml_type src0_type = op->src[0]->type;
+        //         return src0_type != GGML_TYPE_I32 && src0_type != GGML_TYPE_I16;
+        //     } break;
+        case GGML_OP_ROPE:
+            return ggml_is_contiguous(op->src[0]);
+        case GGML_OP_NONE:
+        case GGML_OP_RESHAPE:
+        case GGML_OP_VIEW:
+        case GGML_OP_PERMUTE:
+        case GGML_OP_TRANSPOSE:
+        case GGML_OP_NORM:
+        case GGML_OP_ADD:
+        case GGML_OP_MUL:
+        case GGML_OP_DIV:
+        case GGML_OP_RMS_NORM:
+        case GGML_OP_SCALE:
+        case GGML_OP_SQR:
+        case GGML_OP_CLAMP:
+        case GGML_OP_CONT:
+        case GGML_OP_DIAG_MASK_INF:
+        case GGML_OP_SOFT_MAX:
+        case GGML_OP_ARGSORT:
+        case GGML_OP_SUM_ROWS:
+            return true;
+        default:
+            return false;
+    }
+
+    UNUSED(backend);
+}
+
+GGML_CALL static bool ggml_backend_vk_offload_op(ggml_backend_t backend, const ggml_tensor * op) {
+    const int min_batch_size = 32;
+
+    return (op->ne[1] >= min_batch_size && op->op != GGML_OP_GET_ROWS) ||
+           (op->ne[2] >= min_batch_size && op->op == GGML_OP_MUL_MAT_ID);
+
+    UNUSED(backend);
+}
+
+GGML_CALL static bool ggml_backend_vk_supports_buft(ggml_backend_t backend, ggml_backend_buffer_type_t buft) {
+    if (buft->iface.get_name != ggml_backend_vk_buffer_type_name) {
+        return false;
+    }
+
+    ggml_backend_vk_buffer_type_context * buft_ctx = (ggml_backend_vk_buffer_type_context *)buft->context;
+    ggml_backend_vk_context * ctx = (ggml_backend_vk_context *)backend->context;
+
+    return buft_ctx->device == ctx->device;
+}
+
+// TODO: enable async and synchronize
+static ggml_backend_i ggml_backend_vk_interface = {
+    /* .get_name                = */ ggml_backend_vk_name,
+    /* .free                    = */ ggml_backend_vk_free,
+    /* .get_default_buffer_type = */ ggml_backend_vk_get_default_buffer_type,
+    /* .set_tensor_async        = */ NULL,  // ggml_backend_vk_set_tensor_async,
+    /* .get_tensor_async        = */ NULL,  // ggml_backend_vk_get_tensor_async,
+    /* .cpy_tensor_async        = */ NULL,  // ggml_backend_vk_cpy_tensor_async,
+    /* .synchronize             = */ NULL,  // ggml_backend_vk_synchronize,
+    /* .graph_plan_create       = */ NULL,
+    /* .graph_plan_free         = */ NULL,
+    /* .graph_plan_update       = */ NULL,
+    /* .graph_plan_compute      = */ NULL,
+    /* .graph_compute           = */ ggml_backend_vk_graph_compute,
+    /* .supports_op             = */ ggml_backend_vk_supports_op,
+    /* .supports_buft           = */ ggml_backend_vk_supports_buft,
+    /* .offload_op              = */ ggml_backend_vk_offload_op,
+    /* .event_new               = */ NULL,
+    /* .event_free              = */ NULL,
+    /* .event_record            = */ NULL,
+    /* .event_wait              = */ NULL,
+    /* .event_synchronize       = */ NULL,
+};
+
+static ggml_guid_t ggml_backend_vk_guid() {
+    static ggml_guid guid = { 0xb8, 0xf7, 0x4f, 0x86, 0x40, 0x3c, 0xe1, 0x02, 0x91, 0xc8, 0xdd, 0xe9, 0x02, 0x3f, 0xc0, 0x2b };
+    return &guid;
+}
+
+GGML_CALL ggml_backend_t ggml_backend_vk_init(size_t dev_num) {
+    VK_LOG_DEBUG("ggml_backend_vk_init(" << dev_num << ")");
+
+    ggml_backend_vk_context * ctx = new ggml_backend_vk_context;
+    ggml_vk_init(ctx, dev_num);
+
+    ggml_backend_t vk_backend = new ggml_backend {
+        /* .guid      = */ ggml_backend_vk_guid(),
+        /* .interface = */ ggml_backend_vk_interface,
+        /* .context   = */ ctx,
+    };
+
+    return vk_backend;
+}
+
+GGML_CALL bool ggml_backend_is_vk(ggml_backend_t backend) {
+    return backend != NULL && ggml_guid_matches(backend->guid, ggml_backend_vk_guid());
+}
+
+GGML_CALL int ggml_backend_vk_get_device_count() {
+    return ggml_vk_get_device_count();
+}
+
+GGML_CALL void ggml_backend_vk_get_device_description(int device, char * description, size_t description_size) {
+    ggml_vk_get_device_description(device, description, description_size);
+}
+
+GGML_CALL void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total) {
+    GGML_ASSERT(device < (int) vk_instance.device_indices.size());
+
+    vk::PhysicalDevice vkdev = vk_instance.instance.enumeratePhysicalDevices()[vk_instance.device_indices[device]];
+
+    vk::PhysicalDeviceMemoryProperties memprops = vkdev.getMemoryProperties();
+
+    for (const vk::MemoryHeap& heap : memprops.memoryHeaps) {
+        if (heap.flags & vk::MemoryHeapFlagBits::eDeviceLocal) {
+            *total = heap.size;
+            *free = heap.size;
+            break;
+        }
+    }
+}
+
+// backend registry
+GGML_CALL static ggml_backend_t ggml_backend_reg_vk_init(const char * params, void * user_data) {
+    ggml_backend_t vk_backend = ggml_backend_vk_init((int) (intptr_t) user_data);
+    return vk_backend;
+
+    UNUSED(params);
+}
+
+extern "C" GGML_CALL int ggml_backend_vk_reg_devices();
+
+GGML_CALL int ggml_backend_vk_reg_devices() {
+    ggml_vk_instance_init();
+
+    for (size_t i = 0; i < vk_instance.device_indices.size(); i++) {
+        char name[128];
+        snprintf(name, sizeof(name), "%s%ld", GGML_VK_NAME, i);
+        ggml_backend_register(name, ggml_backend_reg_vk_init, ggml_backend_vk_buffer_type(i), (void *) (intptr_t) i);  // NOLINT
+    }
+    return vk_instance.device_indices.size();
+}
+
+// Extension availability
+static bool ggml_vk_instance_validation_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions) {
+#ifdef GGML_VULKAN_VALIDATE
+    bool portability_enumeration_ext = false;
+    // Check for portability enumeration extension for MoltenVK support
+    for (const auto& properties : instance_extensions) {
+        if (strcmp("VK_KHR_portability_enumeration", properties.extensionName) == 0) {
+            return true;
+        }
+    }
+    if (!portability_enumeration_ext) {
+        std::cerr << "ggml_vulkan: WARNING: Instance extension VK_KHR_portability_enumeration not found." << std::endl;
+    }
+#endif
+    return false;
+
+    UNUSED(instance_extensions);
+}
+static bool ggml_vk_instance_portability_enumeration_ext_available(const std::vector<vk::ExtensionProperties>& instance_extensions) {
+#ifdef __APPLE__
+    bool portability_enumeration_ext = false;
+    // Check for portability enumeration extension for MoltenVK support
+    for (const auto& properties : instance_extensions) {
+        if (strcmp("VK_KHR_portability_enumeration", properties.extensionName) == 0) {
+            return true;
+        }
+    }
+    if (!portability_enumeration_ext) {
+        std::cerr << "ggml_vulkan: WARNING: Instance extension VK_KHR_portability_enumeration not found." << std::endl;
+    }
+#endif
+    return false;
+
+    UNUSED(instance_extensions);
+}
+
+// checks
+
+#ifdef GGML_VULKAN_CHECK_RESULTS
+static void ggml_vk_print_graph_origin(const ggml_tensor * tensor, std::vector<const ggml_tensor *>& done, int level = 0) {
+    if (std::find(done.begin(), done.end(), tensor) != done.end() || level > 10) {
+        return;
+    }
+    for (int j = 0; j < level; j++) {
+        std::cerr << " ";
+    }
+    std::cerr << ggml_op_name(tensor->op) << " gpu=" << (tensor->extra != nullptr) << std::endl;
+
+    done.push_back(tensor);
+
+    for (int i = 0; i < GGML_MAX_SRC; i++) {
+        if (tensor->src[i] != nullptr) {
+            ggml_vk_print_graph_origin(tensor->src[i], done, level + 1);
+        }
+    }
+}
+
+static void ggml_vk_print_tensor_area(const ggml_tensor * tensor, const void * data, int i0, int i1, int i2, int i3) {
+    if (tensor->type != GGML_TYPE_F32 && tensor->type != GGML_TYPE_F16 && tensor->type != GGML_TYPE_I32) {
+        return;
+    }
+    i0 = std::max(i0, 5);
+    i1 = std::max(i1, 5);
+    i2 = std::max(i2, 0);
+    i3 = std::max(i3, 0);
+    fprintf(stderr, "         ");
+    for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
+        fprintf(stderr, "%7d ", idx1);
+    }
+    fprintf(stderr, "\n");
+    for (int idx0 = i0 - 5; idx0 < i0 + 5; idx0++) {
+        fprintf(stderr, "%7d: ", idx0);
+        for (int idx1 = i1 - 5; idx1 < i1 + 5; idx1++) {
+            if (idx0 >= 0 && idx0 < tensor->ne[0] && idx1 >= 0 && idx1 < tensor->ne[1] && i2 >= 0 && i2 < tensor->ne[2] && i3 >= 0 && i3 < tensor->ne[3]) {
+                float val;
+                if (tensor->type == GGML_TYPE_F32) {
+                    val = *(const float *) ((const char *) data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]);
+                } else if (tensor->type == GGML_TYPE_F16) {
+                    val = ggml_fp16_to_fp32(*(const ggml_fp16_t *) ((const char *) data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]));
+                } else if (tensor->type == GGML_TYPE_I32) {
+                    val = *(const int32_t *) ((const char *) data + i3*tensor->nb[3] + i2*tensor->nb[2] + idx1*tensor->nb[1] + idx0*tensor->nb[0]);
+                } else {
+                    GGML_ASSERT(false);
+                }
+                fprintf(stderr, "% 7.2f ", val);
+            } else {
+                fprintf(stderr, "        ");
+            }
+        }
+        fprintf(stderr, "\n");
+    }
+}
+
+static void ggml_vk_print_tensor(ggml_backend_vk_context * ctx, const ggml_tensor * tensor, const char * name) {
+    void * tensor_data = tensor->data;
+
+    if (ggml_backend_buffer_is_vk(tensor->buffer)) {
+        const size_t tensor_size = ggml_nbytes(tensor);
+        tensor_data = malloc(tensor_size);
+
+        ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
+
+        vk_buffer buffer_gpu = extra->buffer_gpu.lock();
+        ggml_vk_buffer_read(ctx, buffer_gpu, extra->offset + tensor->view_offs, tensor_data, tensor_size);
+    }
+
+    std::cerr << "TENSOR CHECK " << name << " (" << tensor->name << "): " << ggml_op_name(tensor->op) << std::endl;
+    std::cerr << "tensor=" << tensor << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << std::endl;
+    if (tensor->src[0] != nullptr) {
+        std::cerr << "tensor->src[0]=" << tensor->src[0] << " name=" << tensor->src[0]->name << " op=" << ggml_op_name(tensor->src[0]->op) << " type=" << ggml_type_name(tensor->src[0]->type) << " ne0=" << tensor->src[0]->ne[0] << " nb0=" << tensor->src[0]->nb[0] << " ne1=" << tensor->src[0]->ne[1] << " nb1=" << tensor->src[0]->nb[1] << " ne2=" << tensor->src[0]->ne[2] << " nb2=" << tensor->src[0]->nb[2] << " ne3=" << tensor->src[0]->ne[3] << " nb3=" << tensor->src[0]->nb[3] << std::endl;
+    }
+    if (tensor->src[1] != nullptr) {
+        std::cerr << "tensor->src[1]=" << tensor->src[1] << " name=" << tensor->src[1]->name << " op=" << ggml_op_name(tensor->src[1]->op) << " type=" << ggml_type_name(tensor->src[1]->type) << " ne0=" << tensor->src[1]->ne[0] << " nb0=" << tensor->src[1]->nb[0] << " ne1=" << tensor->src[1]->ne[1] << " nb1=" << tensor->src[1]->nb[1] << " ne2=" << tensor->src[1]->ne[2] << " nb2=" << tensor->src[1]->nb[2] << " ne3=" << tensor->src[1]->ne[3] << " nb3=" << tensor->src[1]->nb[3] << std::endl;
+    }
+    std::cerr << std::endl << "Result:" << std::endl;
+    ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 0, 0);
+    std::cerr << std::endl;
+    std::cerr << std::endl << "Result:" << std::endl;
+    ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 1, 0);
+    std::cerr << std::endl;
+    std::vector<const ggml_tensor *> done;
+    ggml_vk_print_graph_origin(tensor, done);
+
+    if (ggml_backend_buffer_is_vk(tensor->buffer)) {
+        free(tensor_data);
+    }
+}
+
+void * comp_result;
+size_t comp_size;
+size_t comp_nb[GGML_MAX_DIMS];
+size_t check_counter = 0;
+static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_tensor * tensor) {
+        if (tensor->op == GGML_OP_TRANSPOSE) {
+        return;
+    }
+
+    check_counter++;
+    if (!(vk_output_tensor > 0 && vk_output_tensor == check_counter) && check_counter <= vk_skip_checks) {
+        return;
+    }
+
+    VK_LOG_DEBUG("ggml_vk_check_results_0(" << tensor->name << ")");
+
+    ggml_tensor * src0 = tensor->src[0];
+    ggml_tensor * src1 = tensor->src[1];
+    ggml_tensor * src2 = tensor->src[2];
+
+    struct ggml_init_params iparams = {
+        /*.mem_size   =*/ 1024*1024*1024,
+        /*.mem_buffer =*/ NULL,
+        /*.no_alloc   =*/ false,
+    };
+
+    struct ggml_context * ggml_ctx = ggml_init(iparams);
+
+    struct ggml_tensor * src0_clone = nullptr;
+    struct ggml_tensor * src1_clone = nullptr;
+    struct ggml_tensor * src2_clone = nullptr;
+    struct ggml_tensor * tensor_clone = nullptr;
+
+    size_t src0_size;
+    size_t src1_size;
+    size_t src2_size;
+
+    void * src0_buffer = nullptr;
+    void * src1_buffer = nullptr;
+    void * src2_buffer = nullptr;
+
+    if (src0 != nullptr) {
+        src0_clone = ggml_dup_tensor(ggml_ctx, src0);
+
+        src0_size = ggml_nbytes(src0);
+
+        src0_buffer = malloc(src0_size);
+        src0_clone->data = src0_buffer;
+        if (ggml_backend_buffer_is_host(src0->buffer)) {
+            memcpy(src0_clone->data, src0->data, src0_size);
+            memcpy(src0_clone->nb, src0->nb, sizeof(size_t) * GGML_MAX_DIMS);
+        } else if (ggml_backend_buffer_is_vk(src0->buffer)) {
+            ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src0->extra;
+            vk_buffer buffer_gpu = extra->buffer_gpu.lock();
+            uint64_t offset = extra->offset + src0->view_offs;
+            if (!ggml_is_contiguous(src0) && ggml_vk_dim01_contiguous(src0)) {
+                for (int i3 = 0; i3 < src0->ne[3]; i3++) {
+                    for (int i2 = 0; i2 < src0->ne[2]; i2++) {
+                        const int idx = i3*src0->ne[2] + i2;
+                        ggml_vk_buffer_read(ctx, buffer_gpu, offset + idx * src0->nb[2], ((char *)src0_clone->data + idx * src0_clone->nb[2]), src0->ne[1] * src0->nb[1]);
+                    }
+                }
+
+                src0_clone->nb[0] = src0->nb[0];
+                src0_clone->nb[1] = src0->nb[1];
+                for (int i = 2; i < GGML_MAX_DIMS; i++) {
+                    src0_clone->nb[i] = src0_clone->nb[i - 1]*src0_clone->ne[i - 1];
+                }
+            } else {
+                if (offset + src0_size >= buffer_gpu->size) {
+                    src0_size = buffer_gpu->size - offset;
+                }
+                ggml_vk_buffer_read(ctx, buffer_gpu, offset, src0_clone->data, src0_size);
+                memcpy(src0_clone->nb, src0->nb, sizeof(size_t) * GGML_MAX_DIMS);
+            }
+        } else {
+            GGML_ASSERT(false);
+        }
+
+        if (vk_output_tensor > 0 && vk_output_tensor == check_counter) {
+            ggml_vk_print_tensor(ctx, src0, "src0");
+        }
+    }
+    if (src1 != nullptr) {
+        src1_clone = ggml_dup_tensor(ggml_ctx, src1);
+
+        src1_size = ggml_nbytes(src1);
+
+        src1_buffer = malloc(src1_size);
+        src1_clone->data = src1_buffer;
+        if (ggml_backend_buffer_is_host(src1->buffer)) {
+            memcpy(src1_clone->data, src1->data, src1_size);
+            memcpy(src1_clone->nb, src1->nb, sizeof(size_t) * GGML_MAX_DIMS);
+        } else if (ggml_backend_buffer_is_vk(src1->buffer)) {
+            ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src1->extra;
+            vk_buffer buffer_gpu = extra->buffer_gpu.lock();
+            uint64_t offset = extra->offset + src1->view_offs;
+            if (!ggml_is_contiguous(src1) && ggml_vk_dim01_contiguous(src1)) {
+                for (int i3 = 0; i3 < src1->ne[3]; i3++) {
+                    for (int i2 = 0; i2 < src1->ne[2]; i2++) {
+                        const int idx = i3*src1->ne[2] + i2;
+                        ggml_vk_buffer_read(ctx, buffer_gpu, offset + idx * src1->nb[2], ((char *)src1_clone->data + idx * src1_clone->nb[2]), src1->ne[1] * src1->nb[1]);
+                    }
+                }
+
+                src1_clone->nb[0] = src1->nb[0];
+                src1_clone->nb[1] = src1->nb[1];
+                for (int i = 2; i < GGML_MAX_DIMS; i++) {
+                    src1_clone->nb[i] = src1_clone->nb[i - 1]*src1_clone->ne[i - 1];
+                }
+            } else {
+                if (offset + src1_size >= buffer_gpu->size) {
+                    src1_size = buffer_gpu->size - offset;
+                }
+                ggml_vk_buffer_read(ctx, buffer_gpu, offset, src1_clone->data, src1_size);
+                memcpy(src1_clone->nb, src1->nb, sizeof(size_t) * GGML_MAX_DIMS);
+            }
+        } else {
+            GGML_ASSERT(false);
+        }
+
+        if (vk_output_tensor > 0 && vk_output_tensor == check_counter) {
+            ggml_vk_print_tensor(ctx, src1, "src1");
+            std::cerr << "TENSOR CHECK: " << ggml_op_name(src1_clone->op) << " (check " << check_counter << ")" << std::endl;
+            std::cerr << "src1_clone=" << tensor << " src1_clone->type: " << ggml_type_name(src1_clone->type) << " ne0=" << src1_clone->ne[0] << " nb0=" << src1_clone->nb[0] << " ne1=" << src1_clone->ne[1] << " nb1=" << src1_clone->nb[1] << " ne2=" << src1_clone->ne[2] << " nb2=" << src1_clone->nb[2] << " ne3=" << src1_clone->ne[3] << " nb3=" << src1_clone->nb[3] << std::endl;
+            if (src1->src[0] != nullptr) {
+                std::cerr << "src1->src[0]=" << src1->src[0] << " op=" << ggml_op_name(src1->src[0]->op) << " type=" << ggml_type_name(src1->src[0]->type) << " ne0=" << src1->src[0]->ne[0] << " nb0=" << src1->src[0]->nb[0] << " ne1=" << src1->src[0]->ne[1] << " nb1=" << src1->src[0]->nb[1] << " ne2=" << src1->src[0]->ne[2] << " nb2=" << src1->src[0]->nb[2] << " ne3=" << src1->src[0]->ne[3] << " nb3=" << src1->src[0]->nb[3] << std::endl;
+            }
+            if (src1->src[1] != nullptr) {
+                std::cerr << "src1->src[1]=" << src1->src[1] << " op=" << ggml_op_name(src1->src[1]->op) << " type=" << ggml_type_name(src1->src[1]->type) << " ne0=" << src1->src[1]->ne[0] << " nb0=" << src1->src[1]->nb[0] << " ne1=" << src1->src[1]->ne[1] << " nb1=" << src1->src[1]->nb[1] << " ne2=" << src1->src[1]->ne[2] << " nb2=" << src1->src[1]->nb[2] << " ne3=" << src1->src[1]->ne[3] << " nb3=" << src1->src[1]->nb[3] << std::endl;
+            }
+            std::cerr << std::endl << "Result:" << std::endl;
+            ggml_vk_print_tensor_area(src1_clone, src1_clone->data, 5, 5, 0, 0);
+            std::cerr << std::endl;
+            std::cerr << std::endl << "Result:" << std::endl;
+            ggml_vk_print_tensor_area(src1_clone, src1_clone->data, 5, 5, 1, 0);
+            std::cerr << std::endl;
+            std::vector<const ggml_tensor *> done;
+            ggml_vk_print_graph_origin(src1_clone, done);
+        }
+    }
+    if (src2 != nullptr) {
+        src2_clone = ggml_dup_tensor(ggml_ctx, src2);
+
+        src2_size = ggml_nbytes(src2);
+
+        src2_buffer = malloc(src2_size);
+        src2_clone->data = src2_buffer;
+        if (ggml_backend_buffer_is_host(src2->buffer)) {
+            memcpy(src2_clone->data, src2->data, src2_size);
+            memcpy(src2_clone->nb, src2->nb, sizeof(size_t) * GGML_MAX_DIMS);
+        } else if (ggml_backend_buffer_is_vk(src2->buffer)) {
+            ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) src2->extra;
+            vk_buffer buffer_gpu = extra->buffer_gpu.lock();
+            uint64_t offset = extra->offset + src2->view_offs;
+            if (!ggml_is_contiguous(src2) && ggml_vk_dim01_contiguous(src2)) {
+                for (int i3 = 0; i3 < src2->ne[3]; i3++) {
+                    for (int i2 = 0; i2 < src2->ne[2]; i2++) {
+                        const int idx = i3*src2->ne[2] + i2;
+                        ggml_vk_buffer_read(ctx, buffer_gpu, offset + idx * src2->nb[2], ((char *)src2_clone->data + idx * src2_clone->nb[2]), src2->ne[1] * src2->nb[1]);
+                    }
+                }
+
+                src2_clone->nb[0] = src2->nb[0];
+                src2_clone->nb[1] = src2->nb[1];
+                for (int i = 2; i < GGML_MAX_DIMS; i++) {
+                    src2_clone->nb[i] = src2_clone->nb[i - 1]*src2_clone->ne[i - 1];
+                }
+            } else {
+                if (offset + src2_size >= buffer_gpu->size) {
+                    src2_size = buffer_gpu->size - offset;
+                }
+                ggml_vk_buffer_read(ctx, buffer_gpu, offset, src2_clone->data, src2_size);
+                memcpy(src2_clone->nb, src2->nb, sizeof(size_t) * GGML_MAX_DIMS);
+            }
+        } else {
+            GGML_ASSERT(false);
+        }
+
+        if (vk_output_tensor > 0 && vk_output_tensor == check_counter) {
+            ggml_vk_print_tensor(ctx, src2, "src2");
+            std::cerr << "TENSOR CHECK: " << ggml_op_name(src2_clone->op) << " (check " << check_counter << ")" << std::endl;
+            std::cerr << "src2_clone=" << tensor << " src2_clone->type: " << ggml_type_name(src2_clone->type) << " ne0=" << src2_clone->ne[0] << " nb0=" << src2_clone->nb[0] << " ne1=" << src2_clone->ne[1] << " nb1=" << src2_clone->nb[1] << " ne2=" << src2_clone->ne[2] << " nb2=" << src2_clone->nb[2] << " ne3=" << src2_clone->ne[3] << " nb3=" << src2_clone->nb[3] << std::endl;
+            if (src2->src[0] != nullptr) {
+                std::cerr << "src2->src[0]=" << src2->src[0] << " op=" << ggml_op_name(src2->src[0]->op) << " type=" << ggml_type_name(src2->src[0]->type) << " ne0=" << src2->src[0]->ne[0] << " nb0=" << src2->src[0]->nb[0] << " ne1=" << src2->src[0]->ne[1] << " nb1=" << src2->src[0]->nb[1] << " ne2=" << src2->src[0]->ne[2] << " nb2=" << src2->src[0]->nb[2] << " ne3=" << src2->src[0]->ne[3] << " nb3=" << src2->src[0]->nb[3] << std::endl;
+            }
+            if (src2->src[1] != nullptr) {
+                std::cerr << "src2->src[1]=" << src2->src[1] << " op=" << ggml_op_name(src2->src[1]->op) << " type=" << ggml_type_name(src2->src[1]->type) << " ne0=" << src2->src[1]->ne[0] << " nb0=" << src2->src[1]->nb[0] << " ne1=" << src2->src[1]->ne[1] << " nb1=" << src2->src[1]->nb[1] << " ne2=" << src2->src[1]->ne[2] << " nb2=" << src2->src[1]->nb[2] << " ne3=" << src2->src[1]->ne[3] << " nb3=" << src2->src[1]->nb[3] << std::endl;
+            }
+            std::cerr << std::endl << "Result:" << std::endl;
+            ggml_vk_print_tensor_area(src2_clone, src2_clone->data, 5, 5, 0, 0);
+            std::cerr << std::endl;
+            std::cerr << std::endl << "Result:" << std::endl;
+            ggml_vk_print_tensor_area(src2_clone, src2_clone->data, 5, 5, 1, 0);
+            std::cerr << std::endl;
+            std::vector<const ggml_tensor *> done;
+            ggml_vk_print_graph_origin(src2_clone, done);
+        }
+    }
+
+    if (tensor->op == GGML_OP_MUL_MAT) {
+        tensor_clone = ggml_mul_mat(ggml_ctx, src0_clone, src1_clone);
+    } else if (tensor->op == GGML_OP_MUL_MAT_ID) {
+        tensor_clone = ggml_mul_mat_id(ggml_ctx, src0_clone, src1_clone, src2_clone);
+    } else if (tensor->op == GGML_OP_MUL) {
+        tensor_clone = ggml_mul(ggml_ctx, src0_clone, src1_clone);
+    } else if (tensor->op == GGML_OP_DIV) {
+        tensor_clone = ggml_div(ggml_ctx, src0_clone, src1_clone);
+    } else if (tensor->op == GGML_OP_SCALE) {
+        tensor_clone = ggml_scale(ggml_ctx, src0_clone, ((float *)tensor->op_params)[0]);
+    } else if (tensor->op == GGML_OP_SQR) {
+        tensor_clone = ggml_sqr(ggml_ctx, src0_clone);
+    } else if (tensor->op == GGML_OP_CLAMP) {
+        tensor_clone = ggml_clamp(ggml_ctx, src0_clone, ((float *)tensor->op_params)[0], ((float *)tensor->op_params)[1]);
+    } else if (tensor->op == GGML_OP_ADD) {
+        tensor_clone = ggml_add(ggml_ctx, src0_clone, src1_clone);
+    } else if (tensor->op == GGML_OP_NORM) {
+        tensor_clone = ggml_norm(ggml_ctx, src0_clone, *(float *)tensor->op_params);
+    } else if (tensor->op == GGML_OP_RMS_NORM) {
+        tensor_clone = ggml_rms_norm(ggml_ctx, src0_clone, *(float *)tensor->op_params);
+    } else if (tensor->op == GGML_OP_SOFT_MAX) {
+        if (src1 != nullptr) {
+            tensor_clone = ggml_soft_max_ext(ggml_ctx, src0_clone, src1_clone, ((float *)tensor->op_params)[0], ((float *)tensor->op_params)[1]);
+        } else {
+            tensor_clone = ggml_soft_max(ggml_ctx, src0_clone);
+        }
+    } else if (tensor->op == GGML_OP_DIAG_MASK_INF) {
+        tensor_clone = ggml_diag_mask_inf(ggml_ctx, src0_clone, *(int *)tensor->op_params);
+    } else if (tensor->op == GGML_OP_ROPE) {
+        const int n_dims      = ((int32_t *) tensor->op_params)[1];
+        const int mode        = ((int32_t *) tensor->op_params)[2];
+        //const int n_ctx_ggml       = ((int32_t *) tensor->op_params)[3];
+        const int n_ctx_orig_ggml  = ((int32_t *) tensor->op_params)[4];
+        float freq_base       = ((float *)   tensor->op_params)[5];
+        float freq_scale      = ((float *)   tensor->op_params)[6];
+        float ext_factor      = ((float *)   tensor->op_params)[7];
+        float attn_factor     = ((float *)   tensor->op_params)[8];
+        float beta_fast       = ((float *)   tensor->op_params)[9];
+        float beta_slow       = ((float *)   tensor->op_params)[10];
+        tensor_clone = ggml_rope_ext(ggml_ctx, src0_clone, src1_clone, src2_clone, n_dims, mode, n_ctx_orig_ggml, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow);
+    } else if (tensor->op == GGML_OP_UNARY) {
+        switch (ggml_get_unary_op(tensor)) {
+        case GGML_UNARY_OP_SILU:
+            tensor_clone = ggml_silu(ggml_ctx, src0_clone);
+            break;
+        case GGML_UNARY_OP_GELU:
+            tensor_clone = ggml_gelu(ggml_ctx, src0_clone);
+            break;
+        case GGML_UNARY_OP_RELU:
+            tensor_clone = ggml_relu(ggml_ctx, src0_clone);
+            break;
+        default:
+            std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl;
+            GGML_ASSERT(false);
+        }
+    } else if (tensor->op == GGML_OP_CPY || tensor->op == GGML_OP_DUP) {
+        if (src1 == nullptr) {
+            tensor_clone = ggml_dup(ggml_ctx, src0_clone);
+            tensor_clone->type = tensor->type;
+        } else {
+            tensor_clone = ggml_cpy(ggml_ctx, src0_clone, src1_clone);
+        }
+    } else if (tensor->op == GGML_OP_CONT) {
+        tensor_clone = ggml_cont_4d(ggml_ctx, src0_clone, tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]);
+    } else if (tensor->op == GGML_OP_RESHAPE) {
+        tensor_clone = ggml_reshape_4d(ggml_ctx, src0_clone, tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]);
+    } else if (tensor->op == GGML_OP_VIEW) {
+        tensor_clone = ggml_view_4d(ggml_ctx, src0_clone, tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3], tensor->nb[1], tensor->nb[2], tensor->nb[3], ((int32_t *) tensor->op_params)[0]);
+    } else if (tensor->op == GGML_OP_PERMUTE) {
+        int32_t * params = (int32_t *)tensor->op_params;
+        tensor_clone = ggml_permute(ggml_ctx, src0_clone, params[0], params[1], params[2], params[3]);
+    } else if (tensor->op == GGML_OP_TRANSPOSE) {
+        tensor_clone = ggml_transpose(ggml_ctx, src0_clone);
+    } else if (tensor->op == GGML_OP_GET_ROWS) {
+        tensor_clone = ggml_get_rows(ggml_ctx, src0_clone, src1_clone);
+    } else if (tensor->op == GGML_OP_ARGSORT) {
+        tensor_clone = ggml_argsort(ggml_ctx, src0_clone, (ggml_sort_order) *(int *)tensor->op_params);
+    } else if (tensor->op == GGML_OP_SUM_ROWS) {
+        tensor_clone = ggml_sum_rows(ggml_ctx, src0_clone);
+    } else {
+        std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl;
+        GGML_ASSERT(false);
+    }
+
+    ggml_cgraph * cgraph = ggml_new_graph(ggml_ctx);
+    ggml_build_forward_expand(cgraph, tensor_clone);
+
+    ggml_graph_compute_with_ctx(ggml_ctx, cgraph, 8);
+
+    if (vk_output_tensor > 0 && vk_output_tensor == check_counter) {
+        ggml_vk_print_tensor(ctx, tensor_clone, "tensor_clone");
+    }
+
+    comp_size = ggml_nbytes(tensor_clone);
+
+    comp_result = malloc(comp_size);
+    memcpy(comp_result, tensor_clone->data, comp_size);
+    memcpy(comp_nb, tensor_clone->nb, sizeof(size_t) * GGML_MAX_DIMS);
+
+    if (src0 != nullptr) {
+        free(src0_buffer);
+    }
+    if (src1 != nullptr) {
+        free(src1_buffer);
+    }
+
+    ggml_free(ggml_ctx);
+}
+
+static void ggml_vk_check_results_1(ggml_backend_vk_context * ctx, ggml_tensor * tensor) {
+    if (tensor->op == GGML_OP_TRANSPOSE) {
+        return;
+    }
+    if (!(vk_output_tensor > 0 && vk_output_tensor == check_counter) && check_counter <= vk_skip_checks) {
+        return;
+    }
+
+    VK_LOG_DEBUG("ggml_vk_check_results_1(" << tensor->name << ")");
+
+    ggml_tensor * src0 = tensor->src[0];
+    ggml_tensor * src1 = tensor->src[1];
+    ggml_tensor * src2 = tensor->src[2];
+
+    void * tensor_data = tensor->data;
+
+    if (ggml_backend_buffer_is_vk(tensor->buffer)) {
+        size_t tensor_size = ggml_nbytes(tensor);
+        tensor_data = malloc(tensor_size);
+
+        ggml_tensor_extra_gpu * extra = (ggml_tensor_extra_gpu *) tensor->extra;
+
+        vk_buffer buffer_gpu = extra->buffer_gpu.lock();
+        if (extra->offset + tensor->view_offs + tensor_size >= buffer_gpu->size) {
+            tensor_size = buffer_gpu->size - (extra->offset + tensor->view_offs);
+        }
+
+        ggml_vk_buffer_read(ctx, buffer_gpu, extra->offset + tensor->view_offs, tensor_data, tensor_size);
+    }
+
+    float first_error_result = -1.0f;
+    float first_error_correct = -1.0f;
+    std::array<int, 4> first_error = { -1, -1, -1, -1 };
+    double avg_err = 0.0;
+    size_t counter = 0;
+
+    for (int i3 = 0; i3 < tensor->ne[3]; i3++) {
+        for (int i2 = 0; i2 < tensor->ne[2]; i2++) {
+            for (int i1 = 0; i1 < tensor->ne[1]; i1++) {
+                for (int i0 = 0; i0 < tensor->ne[0]; i0++) {
+                    const bool buffer_size_fit = i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0] < comp_size;
+                    float correct = 0.0f;
+                    float result = 0.0f;
+
+                    if (buffer_size_fit) {
+                        if (tensor->type == GGML_TYPE_F32) {
+                            correct = *(float *) ((char *) comp_result + i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0]);
+                            result  = *(float *) ((char *) tensor_data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0]);
+                        } else if (tensor->type == GGML_TYPE_F16) {
+                            correct = ggml_fp16_to_fp32(*(ggml_fp16_t *) ((char *) comp_result + i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0]));
+                            result  = ggml_fp16_to_fp32(*(ggml_fp16_t *) ((char *) tensor_data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0]));
+                        } else if (tensor->type == GGML_TYPE_I32) {
+                            correct = *(int32_t *) ((char *) comp_result + i3*comp_nb[3] + i2*comp_nb[2] + i1*comp_nb[1] + i0*comp_nb[0]);
+                            result  = *(int32_t *) ((char *) tensor_data + i3*tensor->nb[3] + i2*tensor->nb[2] + i1*tensor->nb[1] + i0*tensor->nb[0]);
+                        } else {
+                            std::cerr << "Results check not implemented for type " << ggml_type_name(tensor->type) << std::endl;
+                        }
+                    } else {
+                        std::cerr << "Missing debug code for type " << ggml_type_name(tensor->type) << std::endl;
+                        GGML_ASSERT(false);
+                    }
+
+                    if ((std::isnan(correct) != std::isnan(result)) || (std::isinf(correct) != std::isinf(result)) || !buffer_size_fit) {
+                        std::cerr << "ERROR: Invalid value in " << ggml_op_name(tensor->op) << " i3=" << i3 << " i2=" << i2 << " i1=" << i1 << " i0=" << i0 << " result=" << result << " correct=" << correct << " avg_err=" << (avg_err / counter) << std::endl;
+                        std::cerr << "tensor=" << tensor << " tensor->name=" << tensor->name << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << " offset=" << tensor->view_offs << std::endl;
+                        if (src0 != nullptr) {
+                            std::cerr << "src0=" << src0 << " src0->name=" << src0->name << " op=" << ggml_op_name(src0->op) << " type=" << ggml_type_name(src0->type) << " ne0=" << src0->ne[0] << " nb0=" << src0->nb[0] << " ne1=" << src0->ne[1] << " nb1=" << src0->nb[1] << " ne2=" << src0->ne[2] << " nb2=" << src0->nb[2] << " ne3=" << src0->ne[3] << " nb3=" << src0->nb[3] << " offset=" << src0->view_offs << std::endl;
+                        }
+                        if (src1 != nullptr) {
+                            std::cerr << "src1=" << src1 << " src1->name=" << src1->name << " op=" << ggml_op_name(src1->op) << " type=" << ggml_type_name(src1->type) << " ne0=" << src1->ne[0] << " nb0=" << src1->nb[0] << " ne1=" << src1->ne[1] << " nb1=" << src1->nb[1] << " ne2=" << src1->ne[2] << " nb2=" << src1->nb[2] << " ne3=" << src1->ne[3] << " nb3=" << src1->nb[3] << " offset=" << src1->view_offs << std::endl;
+                        }
+                        if (src2 != nullptr) {
+                            std::cerr << "src2=" << src2 << " src2->name=" << src2->name << " op=" << ggml_op_name(src2->op) << " type=" << ggml_type_name(src2->type) << " ne0=" << src2->ne[0] << " nb0=" << src2->nb[0] << " ne1=" << src2->ne[1] << " nb1=" << src2->nb[1] << " ne2=" << src2->ne[2] << " nb2=" << src2->nb[2] << " ne3=" << src2->ne[3] << " nb3=" << src2->nb[3] << " offset=" << src2->view_offs << std::endl;
+                        }
+                        std::cerr << "First error: result=" << first_error_result << " correct=" << first_error_correct  << " i3=" << first_error[3] << " i2=" << first_error[2] << " i1=" << first_error[1] << " i0=" << first_error[0] << std::endl;
+                        std::cerr << std::endl << "Result:" << std::endl;
+                        ggml_vk_print_tensor_area(tensor, tensor_data, i0, i1, i2, i3);
+                        std::cerr << std::endl << "Correct:" << std::endl;
+                        ggml_vk_print_tensor_area(tensor, comp_result, i0, i1, i2, i3);
+                        std::cerr << std::endl;
+                        std::vector<const ggml_tensor *> done;
+                        ggml_vk_print_graph_origin(tensor, done);
+                        GGML_ASSERT(false);
+                    }
+                    if (first_error[0] == -1 && std::fabs(correct - result) > 0.1f) {
+                        first_error[0] = i0;
+                        first_error[1] = i1;
+                        first_error[2] = i2;
+                        first_error[3] = i3;
+                        first_error_result = result;
+                        first_error_correct = correct;
+                    }
+
+                    // Special case, value is infinite, avoid NaN result in avg_err
+                    // NaN also appears in results, if both are nan error is 0
+                    if (!std::isinf(correct) && !std::isinf(result) && !std::isnan(correct) && !std::isnan(result)) {
+                        avg_err += std::fabs(correct - result);
+                    }
+                    counter++;
+                }
+            }
+        }
+    }
+
+    avg_err /= counter;
+
+    if (vk_output_tensor > 0 && vk_output_tensor == check_counter) {
+        std::cerr << "TENSOR CHECK: avg_err=" << avg_err << " in " << ggml_op_name(tensor->op) << " (check " << check_counter << ")" << std::endl;
+        std::cerr << "tensor=" << tensor << " tensor->name=" << tensor->name << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << " offset=" << tensor->view_offs << std::endl;
+        if (src0 != nullptr) {
+            std::cerr << "src0=" << src0 << " op=" << ggml_op_name(src0->op) << " type=" << ggml_type_name(src0->type) << " ne0=" << src0->ne[0] << " nb0=" << src0->nb[0] << " ne1=" << src0->ne[1] << " nb1=" << src0->nb[1] << " ne2=" << src0->ne[2] << " nb2=" << src0->nb[2] << " ne3=" << src0->ne[3] << " nb3=" << src0->nb[3] << " offset=" << src0->view_offs << std::endl;
+        }
+        if (src1 != nullptr) {
+            std::cerr << "src1=" << src1 << " op=" << ggml_op_name(src1->op) << " type=" << ggml_type_name(src1->type) << " ne0=" << src1->ne[0] << " nb0=" << src1->nb[0] << " ne1=" << src1->ne[1] << " nb1=" << src1->nb[1] << " ne2=" << src1->ne[2] << " nb2=" << src1->nb[2] << " ne3=" << src1->ne[3] << " nb3=" << src1->nb[3] << " offset=" << src1->view_offs << std::endl;
+        }
+        if (src2 != nullptr) {
+            std::cerr << "src2=" << src2 << " op=" << ggml_op_name(src2->op) << " type=" << ggml_type_name(src2->type) << " ne0=" << src2->ne[0] << " nb0=" << src2->nb[0] << " ne1=" << src2->ne[1] << " nb1=" << src2->nb[1] << " ne2=" << src2->ne[2] << " nb2=" << src2->nb[2] << " ne3=" << src2->ne[3] << " nb3=" << src2->nb[3] << " offset=" << src2->view_offs << std::endl;
+        }
+        std::cerr << "First error: result=" << first_error_result << " correct=" << first_error_correct  << " i3=" << first_error[3] << " i2=" << first_error[2] << " i1=" << first_error[1] << " i0=" << first_error[0] << std::endl;
+        std::cerr << std::endl << "Result:" << std::endl;
+        ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 0, 0);
+        std::cerr << std::endl << "Correct:" << std::endl;
+        ggml_vk_print_tensor_area(tensor, comp_result, 5, 5, 0, 0);
+        std::cerr << std::endl;
+        std::cerr << std::endl << "Result:" << std::endl;
+        ggml_vk_print_tensor_area(tensor, tensor_data, 5, 5, 1, 0);
+        std::cerr << std::endl << "Correct:" << std::endl;
+        ggml_vk_print_tensor_area(tensor, comp_result, 5, 5, 1, 0);
+        std::cerr << std::endl;
+        std::vector<const ggml_tensor *> done;
+        ggml_vk_print_graph_origin(tensor, done);
+    }
+
+    if (avg_err > 0.05 || std::isnan(avg_err)) {
+        std::cerr << "ERROR: avg_err=" << avg_err << " in " << ggml_op_name(tensor->op) << " (check " << check_counter << ")" << std::endl;
+        std::cerr << "tensor=" << tensor << " tensor->name=" << tensor->name << " tensor->type: " << ggml_type_name(tensor->type) << " ne0=" << tensor->ne[0] << " nb0=" << tensor->nb[0] << " ne1=" << tensor->ne[1] << " nb1=" << tensor->nb[1] << " ne2=" << tensor->ne[2] << " nb2=" << tensor->nb[2] << " ne3=" << tensor->ne[3] << " nb3=" << tensor->nb[3] << " offset=" << tensor->view_offs << std::endl;
+        if (src0 != nullptr) {
+            std::cerr << "src0=" << src0 << " op=" << ggml_op_name(src0->op) << " type=" << ggml_type_name(src0->type) << " ne0=" << src0->ne[0] << " nb0=" << src0->nb[0] << " ne1=" << src0->ne[1] << " nb1=" << src0->nb[1] << " ne2=" << src0->ne[2] << " nb2=" << src0->nb[2] << " ne3=" << src0->ne[3] << " nb3=" << src0->nb[3] << " offset=" << src0->view_offs << std::endl;
+        }
+        if (src1 != nullptr) {
+            std::cerr << "src1=" << src1 << " op=" << ggml_op_name(src1->op) << " type=" << ggml_type_name(src1->type) << " ne0=" << src1->ne[0] << " nb0=" << src1->nb[0] << " ne1=" << src1->ne[1] << " nb1=" << src1->nb[1] << " ne2=" << src1->ne[2] << " nb2=" << src1->nb[2] << " ne3=" << src1->ne[3] << " nb3=" << src1->nb[3] << " offset=" << src1->view_offs << std::endl;
+        }
+        if (src2 != nullptr) {
+            std::cerr << "src2=" << src2 << " op=" << ggml_op_name(src2->op) << " type=" << ggml_type_name(src2->type) << " ne0=" << src2->ne[0] << " nb0=" << src2->nb[0] << " ne1=" << src2->ne[1] << " nb1=" << src2->nb[1] << " ne2=" << src2->ne[2] << " nb2=" << src2->nb[2] << " ne3=" << src2->ne[3] << " nb3=" << src2->nb[3] << " offset=" << src2->view_offs << std::endl;
+        }
+        std::cerr << "First error: result=" << first_error_result << " correct=" << first_error_correct  << " i3=" << first_error[3] << " i2=" << first_error[2] << " i1=" << first_error[1] << " i0=" << first_error[0] << std::endl;
+        std::cerr << std::endl << "Result:" << std::endl;
+        ggml_vk_print_tensor_area(tensor, tensor_data, first_error[0], first_error[1], first_error[2], first_error[3]);
+        std::cerr << std::endl << "Correct:" << std::endl;
+        ggml_vk_print_tensor_area(tensor, comp_result, first_error[0], first_error[1], first_error[2], first_error[3]);
+        std::cerr << std::endl;
+        std::vector<const ggml_tensor *> done;
+        ggml_vk_print_graph_origin(tensor, done);
+        GGML_ASSERT(false);
+    } else {
+        std::cerr << check_counter << " " << tensor->name << " op=" << ggml_op_name(tensor->op) << " avg_err=" << avg_err << std::endl;
+    }
+
+    free(comp_result);
+    comp_result = nullptr;
+    comp_size = 0;
+
+    if (ggml_backend_buffer_is_vk(tensor->buffer)) {
+        free(tensor_data);
+    }
+}
+#endif
diff --git a/ggml/src/ggml.c b/ggml/src/ggml.c
new file mode 100644 (file)
index 0000000..f5502af
--- /dev/null
@@ -0,0 +1,21894 @@
+#define _CRT_SECURE_NO_DEPRECATE // Disables ridiculous "unsafe" warnings on Windows
+#define _USE_MATH_DEFINES // For M_PI on MSVC
+
+#include "ggml-impl.h"
+#include "ggml-quants.h"
+#include "ggml.h"
+
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#include <malloc.h> // using malloc.h with MSC/MINGW
+#elif !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__)
+#include <alloca.h>
+#endif
+
+#include <assert.h>
+#include <errno.h>
+#include <time.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <float.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <signal.h>
+#if defined(__gnu_linux__)
+#include <syscall.h>
+#endif
+
+#ifdef GGML_USE_OPENMP
+#include <omp.h>
+#endif
+
+#ifdef GGML_USE_METAL
+#include <unistd.h>
+#endif
+
+#ifdef __ARM_FEATURE_MATMUL_INT8
+#undef GGML_USE_LLAMAFILE
+#endif
+
+#ifdef GGML_USE_LLAMAFILE
+#include "sgemm.h"
+#endif
+
+#if defined(_MSC_VER)
+// disable "possible loss of data" to avoid hundreds of casts
+// we should just be careful :)
+#pragma warning(disable: 4244 4267)
+
+// disable POSIX deprecation warnings
+// these functions are never going away, anyway
+#pragma warning(disable: 4996)
+#endif
+
+#if defined(_WIN32)
+
+#define WIN32_LEAN_AND_MEAN
+#ifndef NOMINMAX
+    #define NOMINMAX
+#endif
+#include <windows.h>
+
+typedef volatile LONG atomic_int;
+typedef atomic_int atomic_bool;
+typedef atomic_int atomic_flag;
+
+#define ATOMIC_FLAG_INIT 0
+
+static void atomic_store(atomic_int * ptr, LONG val) {
+    InterlockedExchange(ptr, val);
+}
+static LONG atomic_load(atomic_int * ptr) {
+    return InterlockedCompareExchange(ptr, 0, 0);
+}
+static LONG atomic_fetch_add(atomic_int * ptr, LONG inc) {
+    return InterlockedExchangeAdd(ptr, inc);
+}
+static LONG atomic_fetch_sub(atomic_int * ptr, LONG dec) {
+    return atomic_fetch_add(ptr, -(dec));
+}
+static atomic_bool atomic_flag_test_and_set(atomic_flag * ptr) {
+    return InterlockedExchange(ptr, 1);
+}
+static void atomic_flag_clear(atomic_flag * ptr) {
+    InterlockedExchange(ptr, 0);
+}
+
+typedef HANDLE pthread_t;
+
+typedef DWORD thread_ret_t;
+static int pthread_create(pthread_t * out, void * unused, thread_ret_t(*func)(void *), void * arg) {
+    (void) unused;
+    HANDLE handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) func, arg, 0, NULL);
+    if (handle == NULL)
+    {
+        return EAGAIN;
+    }
+
+    *out = handle;
+    return 0;
+}
+
+static int pthread_join(pthread_t thread, void * unused) {
+    (void) unused;
+    int ret = (int) WaitForSingleObject(thread, INFINITE);
+    CloseHandle(thread);
+    return ret;
+}
+
+static int sched_yield (void) {
+    Sleep (0);
+    return 0;
+}
+#else
+#include <pthread.h>
+#include <stdatomic.h>
+
+typedef void * thread_ret_t;
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#endif
+
+typedef pthread_t ggml_thread_t;
+
+#ifdef GGML_USE_CPU_HBM
+#include <hbwmalloc.h>
+#endif
+
+#if defined(__APPLE__)
+#include <TargetConditionals.h>
+#endif
+
+#if (defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)) && \
+    (!defined(TARGET_OS_TV) && !defined(TARGET_OS_WATCH))
+
+#include <sys/wait.h>
+
+void ggml_print_backtrace(void) {
+    /*
+    #include <execinfo.h>
+    #include <dlfcn.h>
+
+    void * trace[100];
+
+    int nptrs = backtrace(trace, sizeof(trace)/sizeof(trace[0]));
+
+    backtrace_symbols_fd(trace, nptrs, STDERR_FILENO);
+    */
+
+    // backtrack_symbols does not show line numbers, use gdb instead
+    char attach[32];
+    snprintf(attach, sizeof(attach), "attach %d", getpid());
+    int pid = fork();
+    if (pid == 0) {
+        execlp("gdb", "gdb", "--batch",
+            "-ex", "set style enabled on",
+            "-ex", attach,
+            "-ex", "bt -frame-info source-and-location",
+            "-ex", "detach",
+            "-ex", "quit",
+            (char *) NULL);
+    } else {
+        waitpid(pid, NULL, 0);
+    }
+}
+#else
+void ggml_print_backtrace(void) {
+    // platform not supported
+}
+#endif
+
+#define GGML_DEBUG 0
+#define GGML_GELU_FP16
+#define GGML_GELU_QUICK_FP16
+
+#define GGML_SOFT_MAX_UNROLL 4
+#define GGML_VEC_DOT_UNROLL  2
+#define GGML_VEC_MAD_UNROLL  32
+
+//
+// logging
+//
+
+#if (GGML_DEBUG >= 1)
+#define GGML_PRINT_DEBUG(...) printf(__VA_ARGS__)
+#else
+#define GGML_PRINT_DEBUG(...)
+#endif
+
+#if (GGML_DEBUG >= 5)
+#define GGML_PRINT_DEBUG_5(...) printf(__VA_ARGS__)
+#else
+#define GGML_PRINT_DEBUG_5(...)
+#endif
+
+#if (GGML_DEBUG >= 10)
+#define GGML_PRINT_DEBUG_10(...) printf(__VA_ARGS__)
+#else
+#define GGML_PRINT_DEBUG_10(...)
+#endif
+
+#define GGML_PRINT(...) printf(__VA_ARGS__)
+
+//
+// end of logging block
+//
+
+#ifdef GGML_USE_ACCELERATE
+// uncomment to use vDSP for soft max computation
+// note: not sure if it is actually faster
+//#define GGML_SOFT_MAX_ACCELERATE
+#endif
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define GGML_ALIGNED_MALLOC(size) _aligned_malloc(size, GGML_MEM_ALIGN)
+#define GGML_ALIGNED_FREE(ptr)    _aligned_free(ptr)
+#else
+inline static void * ggml_aligned_malloc(size_t size) {
+    if (size == 0) {
+        GGML_PRINT("WARNING: Behavior may be unexpected when allocating 0 bytes for ggml_aligned_malloc!\n");
+        return NULL;
+    }
+    void * aligned_memory = NULL;
+#ifdef GGML_USE_CPU_HBM
+    int result = hbw_posix_memalign(&aligned_memory, 16, size);
+#elif GGML_USE_METAL
+    int result = posix_memalign(&aligned_memory, sysconf(_SC_PAGESIZE), size);
+#else
+    int result = posix_memalign(&aligned_memory, GGML_MEM_ALIGN, size);
+#endif
+    if (result != 0) {
+        // Handle allocation failure
+        const char *error_desc = "unknown allocation error";
+        switch (result) {
+            case EINVAL:
+                error_desc = "invalid alignment value";
+                break;
+            case ENOMEM:
+                error_desc = "insufficient memory";
+                break;
+        }
+        GGML_PRINT("%s: %s (attempted to allocate %6.2f MB)\n", __func__, error_desc, size/(1024.0*1024.0));
+        GGML_ASSERT(false);
+        return NULL;
+    }
+    return aligned_memory;
+}
+#define GGML_ALIGNED_MALLOC(size) ggml_aligned_malloc(size)
+#ifdef GGML_USE_CPU_HBM
+#define GGML_ALIGNED_FREE(ptr)    if(NULL != ptr) hbw_free(ptr)
+#else
+#define GGML_ALIGNED_FREE(ptr)    free(ptr)
+#endif
+#endif
+
+inline static void * ggml_malloc(size_t size) {
+    if (size == 0) {
+        GGML_PRINT("WARNING: Behavior may be unexpected when allocating 0 bytes for ggml_malloc!\n");
+        return NULL;
+    }
+    void * result = malloc(size);
+    if (result == NULL) {
+        GGML_PRINT("%s: failed to allocate %6.2f MB\n", __func__, size/(1024.0*1024.0));
+        GGML_ASSERT(false);
+    }
+    return result;
+}
+
+// calloc
+inline static void * ggml_calloc(size_t num, size_t size) {
+    if (num == 0 || size == 0) {
+        GGML_PRINT("WARNING: Behavior may be unexpected when allocating 0 bytes for ggml_calloc!\n");
+        return NULL;
+    }
+    void * result = calloc(num, size);
+    if (result == NULL) {
+        GGML_PRINT("%s: failed to allocate %6.2f MB\n", __func__, size/(1024.0*1024.0));
+        GGML_ASSERT(false);
+    }
+    return result;
+}
+
+#define GGML_MALLOC(size)      ggml_malloc(size)
+#define GGML_CALLOC(num, size) ggml_calloc(num, size)
+
+#define GGML_FREE(ptr) free(ptr)
+
+#define UNUSED GGML_UNUSED
+#define SWAP(x, y, T) do { T SWAP = x; (x) = y; (y) = SWAP; } while (0)
+
+#if defined(GGML_USE_ACCELERATE)
+#include <Accelerate/Accelerate.h>
+#endif
+
+// floating point type used to accumulate sums
+typedef double ggml_float;
+
+#undef MIN
+#undef MAX
+
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+//
+// global data
+//
+
+// precomputed gelu table for f16 (128 KB)
+static ggml_fp16_t ggml_table_gelu_f16[1 << 16];
+
+// precomputed quick gelu table for f16 (128 KB)
+static ggml_fp16_t ggml_table_gelu_quick_f16[1 << 16];
+
+// precomputed f32 table for f16 (256 KB) (ggml-impl.h)
+float ggml_table_f32_f16[1 << 16];
+
+GGML_CALL const char * ggml_status_to_string(enum ggml_status status) {
+    switch (status) {
+        case GGML_STATUS_ALLOC_FAILED: return "GGML status: error (failed to allocate memory)";
+        case GGML_STATUS_FAILED:       return "GGML status: error (operation failed)";
+        case GGML_STATUS_SUCCESS:      return "GGML status: success";
+        case GGML_STATUS_ABORTED:      return "GGML status: warning (operation aborted)";
+    }
+
+    return "GGML status: unknown";
+}
+
+float ggml_fp16_to_fp32(ggml_fp16_t x) {
+#define ggml_fp16_to_fp32 do_not_use__ggml_fp16_to_fp32__in_ggml
+    return GGML_FP16_TO_FP32(x);
+}
+
+ggml_fp16_t ggml_fp32_to_fp16(float x) {
+#define ggml_fp32_to_fp16 do_not_use__ggml_fp32_to_fp16__in_ggml
+    return GGML_FP32_TO_FP16(x);
+}
+
+float ggml_bf16_to_fp32(ggml_bf16_t x) {
+#define ggml_bf16_to_fp32 do_not_use__ggml_bf16_to_fp32__in_ggml
+    return GGML_BF16_TO_FP32(x);  // it just left shifts
+}
+
+ggml_bf16_t ggml_fp32_to_bf16(float x) {
+#define ggml_fp32_to_bf16 do_not_use__ggml_fp32_to_bf16__in_ggml
+    return GGML_FP32_TO_BF16(x);
+}
+
+void ggml_fp16_to_fp32_row(const ggml_fp16_t * x, float * y, int64_t n) {
+    for (int64_t i = 0; i < n; i++) {
+        y[i] = GGML_FP16_TO_FP32(x[i]);
+    }
+}
+
+void ggml_fp32_to_fp16_row(const float * x, ggml_fp16_t * y, int64_t n) {
+    int64_t i = 0;
+#if defined(__F16C__)
+    for (; i + 7 < n; i += 8) {
+        __m256 x_vec = _mm256_loadu_ps(x + i);
+        __m128i y_vec = _mm256_cvtps_ph(x_vec, _MM_FROUND_TO_NEAREST_INT);
+        _mm_storeu_si128((__m128i *)(y + i), y_vec);
+    }
+    for(; i + 3 < n; i += 4) {
+        __m128 x_vec = _mm_loadu_ps(x + i);
+        __m128i y_vec = _mm_cvtps_ph(x_vec, _MM_FROUND_TO_NEAREST_INT);
+        _mm_storel_epi64((__m128i *)(y + i), y_vec);
+    }
+#endif
+    for (; i < n; i++) {
+        y[i] = GGML_FP32_TO_FP16(x[i]);
+    }
+}
+
+void ggml_bf16_to_fp32_row(const ggml_bf16_t * x, float * y, int64_t n) {
+    int64_t i = 0;
+#if defined(__AVX512F__)
+    for (; i + 16 <= n; i += 16) {
+        _mm512_storeu_ps(y + i,
+                         _mm512_castsi512_ps(
+                             _mm512_slli_epi32(
+                                 _mm512_cvtepu16_epi32(
+                                     _mm256_loadu_si256(
+                                         (const __m256i *)(x + i))),
+                                 16)));
+    }
+#elif defined(__AVX2__)
+    for (; i + 8 <= n; i += 8) {
+        _mm256_storeu_ps(y + i,
+                         _mm256_castsi256_ps(
+                             _mm256_slli_epi32(
+                                 _mm256_cvtepu16_epi32(
+                                     _mm_loadu_si128(
+                                         (const __m128i *)(x + i))),
+                                 16)));
+    }
+#endif
+    for (; i < n; i++) {
+        y[i] = GGML_BF16_TO_FP32(x[i]);
+    }
+}
+
+void ggml_fp32_to_bf16_row(const float * x, ggml_bf16_t * y, int64_t n) {
+  int i = 0;
+#if defined(__AVX512BF16__)
+  for (; i + 32 <= n; i += 32) {
+        _mm512_storeu_si512(
+            (__m512i *)(y + i),
+            m512i(_mm512_cvtne2ps_pbh(_mm512_loadu_ps(x + i + 16),
+                                _mm512_loadu_ps(x + i))));
+  }
+#endif
+    for (; i < n; i++) {
+        y[i] = GGML_FP32_TO_BF16(x[i]);
+    }
+}
+
+bool ggml_guid_matches(ggml_guid_t guid_a, ggml_guid_t guid_b) {
+    return memcmp(guid_a, guid_b, sizeof(ggml_guid)) == 0;
+}
+
+//
+// timing
+//
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+static int64_t timer_freq, timer_start;
+void ggml_time_init(void) {
+    LARGE_INTEGER t;
+    QueryPerformanceFrequency(&t);
+    timer_freq = t.QuadPart;
+
+    // The multiplication by 1000 or 1000000 below can cause an overflow if timer_freq
+    // and the uptime is high enough.
+    // We subtract the program start time to reduce the likelihood of that happening.
+    QueryPerformanceCounter(&t);
+    timer_start = t.QuadPart;
+}
+int64_t ggml_time_ms(void) {
+    LARGE_INTEGER t;
+    QueryPerformanceCounter(&t);
+    return ((t.QuadPart-timer_start) * 1000) / timer_freq;
+}
+int64_t ggml_time_us(void) {
+    LARGE_INTEGER t;
+    QueryPerformanceCounter(&t);
+    return ((t.QuadPart-timer_start) * 1000000) / timer_freq;
+}
+#else
+void ggml_time_init(void) {}
+int64_t ggml_time_ms(void) {
+    struct timespec ts;
+    clock_gettime(CLOCK_MONOTONIC, &ts);
+    return (int64_t)ts.tv_sec*1000 + (int64_t)ts.tv_nsec/1000000;
+}
+
+int64_t ggml_time_us(void) {
+    struct timespec ts;
+    clock_gettime(CLOCK_MONOTONIC, &ts);
+    return (int64_t)ts.tv_sec*1000000 + (int64_t)ts.tv_nsec/1000;
+}
+#endif
+
+int64_t ggml_cycles(void) {
+    return clock();
+}
+
+int64_t ggml_cycles_per_ms(void) {
+    return CLOCKS_PER_SEC/1000;
+}
+
+//
+// cross-platform UTF-8 file paths
+//
+
+#ifdef _WIN32
+static wchar_t * ggml_mbstowcs(const char * mbs) {
+    int wlen = MultiByteToWideChar(CP_UTF8, 0, mbs, -1, NULL, 0);
+    if (!wlen) {
+        errno = EINVAL;
+        return NULL;
+    }
+
+    wchar_t * wbuf = GGML_MALLOC(wlen * sizeof(wchar_t));
+    wlen = MultiByteToWideChar(CP_UTF8, 0, mbs, -1, wbuf, wlen);
+    if (!wlen) {
+        GGML_FREE(wbuf);
+        errno = EINVAL;
+        return NULL;
+    }
+
+    return wbuf;
+}
+#endif
+
+FILE * ggml_fopen(const char * fname, const char * mode) {
+#ifdef _WIN32
+    FILE * file = NULL;
+
+    // convert fname (UTF-8)
+    wchar_t * wfname = ggml_mbstowcs(fname);
+    if (wfname) {
+        // convert mode (ANSI)
+        wchar_t * wmode = GGML_MALLOC((strlen(mode) + 1) * sizeof(wchar_t));
+        wchar_t * wmode_p = wmode;
+        do {
+            *wmode_p++ = (wchar_t)*mode;
+        } while (*mode++);
+
+        // open file
+        file = _wfopen(wfname, wmode);
+
+        GGML_FREE(wfname);
+        GGML_FREE(wmode);
+    }
+
+    return file;
+#else
+    return fopen(fname, mode);
+#endif
+}
+
+//
+// cache line
+//
+
+#if defined(__cpp_lib_hardware_interference_size)
+#define CACHE_LINE_SIZE hardware_destructive_interference_size
+#else
+#if defined(__POWER9_VECTOR__)
+#define CACHE_LINE_SIZE 128
+#else
+#define CACHE_LINE_SIZE 64
+#endif
+#endif
+
+static const size_t CACHE_LINE_SIZE_F32 = CACHE_LINE_SIZE/sizeof(float);
+
+static void ggml_vec_dot_f32(int n, float * restrict s, size_t bs, const float * restrict x, size_t bx, const float * restrict y, size_t by, int nrc);
+static void ggml_vec_dot_f16(int n, float * restrict s, size_t bs, ggml_fp16_t * restrict x, size_t bx, ggml_fp16_t * restrict y, size_t by, int nrc);
+static void ggml_vec_dot_bf16(int n, float * restrict s, size_t bs, ggml_bf16_t * restrict x, size_t bx, ggml_bf16_t * restrict y, size_t by, int nrc);
+
+static const ggml_type_traits_t type_traits[GGML_TYPE_COUNT] = {
+    [GGML_TYPE_I8] = {
+        .type_name                = "i8",
+        .blck_size                = 1,
+        .type_size                = sizeof(int8_t),
+        .is_quantized             = false,
+    },
+    [GGML_TYPE_I16] = {
+        .type_name                = "i16",
+        .blck_size                = 1,
+        .type_size                = sizeof(int16_t),
+        .is_quantized             = false,
+    },
+    [GGML_TYPE_I32] = {
+        .type_name                = "i32",
+        .blck_size                = 1,
+        .type_size                = sizeof(int32_t),
+        .is_quantized             = false,
+    },
+    [GGML_TYPE_I64] = {
+        .type_name                = "i64",
+        .blck_size                = 1,
+        .type_size                = sizeof(int64_t),
+        .is_quantized             = false,
+    },
+    [GGML_TYPE_F64] = {
+        .type_name                = "f64",
+        .blck_size                = 1,
+        .type_size                = sizeof(double),
+        .is_quantized             = false,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_F32] = {
+        .type_name                = "f32",
+        .blck_size                = 1,
+        .type_size                = sizeof(float),
+        .is_quantized             = false,
+        .vec_dot                  = (ggml_vec_dot_t) ggml_vec_dot_f32,
+        .vec_dot_type             = GGML_TYPE_F32,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_F16] = {
+        .type_name                = "f16",
+        .blck_size                = 1,
+        .type_size                = sizeof(ggml_fp16_t),
+        .is_quantized             = false,
+        .to_float                 = (ggml_to_float_t) ggml_fp16_to_fp32_row,
+        .from_float               = (ggml_from_float_t) ggml_fp32_to_fp16_row,
+        .from_float_reference     = (ggml_from_float_t) ggml_fp32_to_fp16_row,
+        .vec_dot                  = (ggml_vec_dot_t) ggml_vec_dot_f16,
+        .vec_dot_type             = GGML_TYPE_F16,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_Q4_0] = {
+        .type_name                = "q4_0",
+        .blck_size                = QK4_0,
+        .type_size                = sizeof(block_q4_0),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_q4_0,
+        .from_float               = quantize_row_q4_0,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q4_0_reference,
+        .vec_dot                  = ggml_vec_dot_q4_0_q8_0,
+        .vec_dot_type             = GGML_TYPE_Q8_0,
+#if defined (__ARM_FEATURE_MATMUL_INT8)
+        .nrows                    = 2,
+#else
+        .nrows                    = 1,
+#endif
+    },
+    [GGML_TYPE_Q4_1] = {
+        .type_name                = "q4_1",
+        .blck_size                = QK4_1,
+        .type_size                = sizeof(block_q4_1),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_q4_1,
+        .from_float               = quantize_row_q4_1,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q4_1_reference,
+        .vec_dot                  = ggml_vec_dot_q4_1_q8_1,
+        .vec_dot_type             = GGML_TYPE_Q8_1,
+#if defined (__ARM_FEATURE_MATMUL_INT8)
+        .nrows                    = 2,
+#else
+        .nrows                    = 1,
+#endif
+    },
+    [4] = { // GGML_TYPE_Q4_2
+        .type_name                = "DEPRECATED",
+        .blck_size                = 0,
+        .type_size                = 0,
+        .is_quantized             = false,
+        .to_float                 = NULL,
+        .from_float               = NULL,
+        .from_float_reference     = NULL,
+        .vec_dot                  = NULL,
+        .vec_dot_type             = GGML_TYPE_COUNT,
+        .nrows                    = 1,
+    },
+    [5] = { // GGML_TYPE_Q4_3
+        .type_name                = "DEPRECATED",
+        .blck_size                = 0,
+        .type_size                = 0,
+        .is_quantized             = false,
+        .to_float                 = NULL,
+        .from_float               = NULL,
+        .from_float_reference     = NULL,
+        .vec_dot                  = NULL,
+        .vec_dot_type             = GGML_TYPE_COUNT,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_Q5_0] = {
+        .type_name                = "q5_0",
+        .blck_size                = QK5_0,
+        .type_size                = sizeof(block_q5_0),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_q5_0,
+        .from_float               = quantize_row_q5_0,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q5_0_reference,
+        .vec_dot                  = ggml_vec_dot_q5_0_q8_0,
+        .vec_dot_type             = GGML_TYPE_Q8_0,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_Q5_1] = {
+        .type_name                = "q5_1",
+        .blck_size                = QK5_1,
+        .type_size                = sizeof(block_q5_1),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_q5_1,
+        .from_float               = quantize_row_q5_1,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q5_1_reference,
+        .vec_dot                  = ggml_vec_dot_q5_1_q8_1,
+        .vec_dot_type             = GGML_TYPE_Q8_1,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_Q8_0] = {
+        .type_name                = "q8_0",
+        .blck_size                = QK8_0,
+        .type_size                = sizeof(block_q8_0),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_q8_0,
+        .from_float               = quantize_row_q8_0,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q8_0_reference,
+        .vec_dot                  = ggml_vec_dot_q8_0_q8_0,
+        .vec_dot_type             = GGML_TYPE_Q8_0,
+#if defined (__ARM_FEATURE_MATMUL_INT8)
+        .nrows                    = 2,
+#else
+        .nrows                    = 1,
+#endif
+    },
+    [GGML_TYPE_Q8_1] = {
+        .type_name                = "q8_1",
+        .blck_size                = QK8_1,
+        .type_size                = sizeof(block_q8_1),
+        .is_quantized             = true,
+        .from_float               = quantize_row_q8_1,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q8_1_reference,
+        .vec_dot_type             = GGML_TYPE_Q8_1,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_Q2_K] = {
+        .type_name                = "q2_K",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_q2_K),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_q2_K,
+        .from_float               = quantize_row_q2_K,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q2_K_reference,
+        .vec_dot                  = ggml_vec_dot_q2_K_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_Q3_K] = {
+        .type_name                = "q3_K",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_q3_K),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_q3_K,
+        .from_float               = quantize_row_q3_K,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q3_K_reference,
+        .vec_dot                  = ggml_vec_dot_q3_K_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_Q4_K] = {
+        .type_name                = "q4_K",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_q4_K),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_q4_K,
+        .from_float               = quantize_row_q4_K,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q4_K_reference,
+        .vec_dot                  = ggml_vec_dot_q4_K_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_Q5_K] = {
+        .type_name                = "q5_K",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_q5_K),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_q5_K,
+        .from_float               = quantize_row_q5_K,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q5_K_reference,
+        .vec_dot                  = ggml_vec_dot_q5_K_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_Q6_K] = {
+        .type_name                = "q6_K",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_q6_K),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_q6_K,
+        .from_float               = quantize_row_q6_K,
+        .from_float_reference     = (ggml_from_float_t) quantize_row_q6_K_reference,
+        .vec_dot                  = ggml_vec_dot_q6_K_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_IQ2_XXS] = {
+        .type_name                = "iq2_xxs",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_iq2_xxs),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_iq2_xxs,
+        .from_float               = NULL,
+        .from_float_reference     = NULL,
+        .vec_dot                  = ggml_vec_dot_iq2_xxs_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_IQ2_XS] = {
+        .type_name                = "iq2_xs",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_iq2_xs),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_iq2_xs,
+        .from_float               = NULL,
+        .from_float_reference     = NULL,
+        .vec_dot                  = ggml_vec_dot_iq2_xs_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_IQ3_XXS] = {
+        .type_name                = "iq3_xxs",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_iq3_xxs),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_iq3_xxs,
+        .from_float               = quantize_row_iq3_xxs,
+        .from_float_reference     = (ggml_from_float_t)quantize_row_iq3_xxs_reference,
+        .vec_dot                  = ggml_vec_dot_iq3_xxs_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_IQ3_S] = {
+        .type_name                = "iq3_s",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_iq3_s),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_iq3_s,
+        .from_float               = quantize_row_iq3_s,
+        .from_float_reference     = (ggml_from_float_t)quantize_row_iq3_s_reference,
+        .vec_dot                  = ggml_vec_dot_iq3_s_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_IQ2_S] = {
+        .type_name                = "iq2_s",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_iq2_s),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_iq2_s,
+        .from_float               = quantize_row_iq2_s,
+        .from_float_reference     = (ggml_from_float_t)quantize_row_iq2_s_reference,
+        .vec_dot                  = ggml_vec_dot_iq2_s_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_IQ1_S] = {
+        .type_name                = "iq1_s",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_iq1_s),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_iq1_s,
+        .from_float               = NULL,
+        .from_float_reference     = NULL,
+        .vec_dot                  = ggml_vec_dot_iq1_s_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_IQ1_M] = {
+        .type_name                = "iq1_m",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_iq1_m),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_iq1_m,
+        .from_float               = NULL,
+        .from_float_reference     = NULL,
+        .vec_dot                  = ggml_vec_dot_iq1_m_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_IQ4_NL] = {
+        .type_name                = "iq4_nl",
+        .blck_size                = QK4_NL,
+        .type_size                = sizeof(block_iq4_nl),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_iq4_nl,
+        .from_float               = quantize_row_iq4_nl,
+        .from_float_reference     = (ggml_from_float_t)quantize_row_iq4_nl_reference,
+        .vec_dot                  = ggml_vec_dot_iq4_nl_q8_0,
+        .vec_dot_type             = GGML_TYPE_Q8_0,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_IQ4_XS] = {
+        .type_name                = "iq4_xs",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_iq4_xs),
+        .is_quantized             = true,
+        .to_float                 = (ggml_to_float_t) dequantize_row_iq4_xs,
+        .from_float               = quantize_row_iq4_xs,
+        .from_float_reference     = (ggml_from_float_t)quantize_row_iq4_xs_reference,
+        .vec_dot                  = ggml_vec_dot_iq4_xs_q8_K,
+        .vec_dot_type             = GGML_TYPE_Q8_K,
+        .nrows                    = 1,
+    },
+    [GGML_TYPE_Q8_K] = {
+        .type_name                = "q8_K",
+        .blck_size                = QK_K,
+        .type_size                = sizeof(block_q8_K),
+        .is_quantized             = true,
+        .from_float               = quantize_row_q8_K,
+    },
+    [GGML_TYPE_BF16] = {
+        .type_name                = "bf16",
+        .blck_size                = 1,
+        .type_size                = sizeof(ggml_bf16_t),
+        .is_quantized             = false,
+        .to_float                 = (ggml_to_float_t) ggml_bf16_to_fp32_row,
+        .from_float               = (ggml_from_float_t) ggml_fp32_to_bf16_row,
+        .from_float_reference     = (ggml_from_float_t) ggml_fp32_to_bf16_row,
+        .vec_dot                  = (ggml_vec_dot_t) ggml_vec_dot_bf16,
+        .vec_dot_type             = GGML_TYPE_BF16,
+        .nrows                    = 1,
+    }
+};
+
+// For internal test use
+ggml_type_traits_t ggml_internal_get_type_traits(enum ggml_type type) {
+    GGML_ASSERT(type < GGML_TYPE_COUNT);
+    return type_traits[type];
+}
+
+//
+// simd mappings
+//
+
+// we define a common set of C macros which map to specific intrinsics based on the current architecture
+// we then implement the fundamental computation operations below using only these macros
+// adding support for new architectures requires to define the corresponding SIMD macros
+//
+// GGML_F32_STEP / GGML_F16_STEP
+//   number of elements to process in a single step
+//
+// GGML_F32_EPR / GGML_F16_EPR
+//   number of elements to fit in a single register
+//
+
+#if defined(__ARM_NEON) && defined(__ARM_FEATURE_FMA)
+
+#define GGML_SIMD
+
+// F32 NEON
+
+#define GGML_F32_STEP 16
+#define GGML_F32_EPR  4
+
+#define GGML_F32x4              float32x4_t
+#define GGML_F32x4_ZERO         vdupq_n_f32(0.0f)
+#define GGML_F32x4_SET1(x)      vdupq_n_f32(x)
+#define GGML_F32x4_LOAD         vld1q_f32
+#define GGML_F32x4_STORE        vst1q_f32
+#define GGML_F32x4_FMA(a, b, c) vfmaq_f32(a, b, c)
+#define GGML_F32x4_ADD          vaddq_f32
+#define GGML_F32x4_MUL          vmulq_f32
+#define GGML_F32x4_REDUCE_ONE(x) vaddvq_f32(x)
+#define GGML_F32x4_REDUCE(res, x)              \
+{                                              \
+    int offset = GGML_F32_ARR >> 1;            \
+    for (int i = 0; i < offset; ++i) {         \
+        x[i] = vaddq_f32(x[i], x[offset+i]);   \
+    }                                          \
+    offset >>= 1;                              \
+    for (int i = 0; i < offset; ++i) {         \
+        x[i] = vaddq_f32(x[i], x[offset+i]);   \
+    }                                          \
+    offset >>= 1;                              \
+    for (int i = 0; i < offset; ++i) {         \
+        x[i] = vaddq_f32(x[i], x[offset+i]);   \
+    }                                          \
+    res = GGML_F32x4_REDUCE_ONE(x[0]);         \
+}
+
+#define GGML_F32_VEC        GGML_F32x4
+#define GGML_F32_VEC_ZERO   GGML_F32x4_ZERO
+#define GGML_F32_VEC_SET1   GGML_F32x4_SET1
+#define GGML_F32_VEC_LOAD   GGML_F32x4_LOAD
+#define GGML_F32_VEC_STORE  GGML_F32x4_STORE
+#define GGML_F32_VEC_FMA    GGML_F32x4_FMA
+#define GGML_F32_VEC_ADD    GGML_F32x4_ADD
+#define GGML_F32_VEC_MUL    GGML_F32x4_MUL
+#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE
+
+// F16 NEON
+
+#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
+    #define GGML_F16_STEP 32
+    #define GGML_F16_EPR  8
+
+    #define GGML_F16x8              float16x8_t
+    #define GGML_F16x8_ZERO         vdupq_n_f16(0.0f)
+    #define GGML_F16x8_SET1(x)      vdupq_n_f16(x)
+    #define GGML_F16x8_LOAD(x)      vld1q_f16((const ggml_fp16_internal_t *)(x))
+    #define GGML_F16x8_STORE        vst1q_f16
+    #define GGML_F16x8_FMA(a, b, c) vfmaq_f16(a, b, c)
+    #define GGML_F16x8_ADD          vaddq_f16
+    #define GGML_F16x8_MUL          vmulq_f16
+    #define GGML_F16x8_REDUCE(res, x)                             \
+    do {                                                          \
+        int offset = GGML_F16_ARR >> 1;                           \
+        for (int i = 0; i < offset; ++i) {                        \
+            x[i] = vaddq_f16(x[i], x[offset+i]);                  \
+        }                                                         \
+        offset >>= 1;                                             \
+        for (int i = 0; i < offset; ++i) {                        \
+            x[i] = vaddq_f16(x[i], x[offset+i]);                  \
+        }                                                         \
+        offset >>= 1;                                             \
+        for (int i = 0; i < offset; ++i) {                        \
+            x[i] = vaddq_f16(x[i], x[offset+i]);                  \
+        }                                                         \
+        const float32x4_t t0 = vcvt_f32_f16(vget_low_f16 (x[0])); \
+        const float32x4_t t1 = vcvt_f32_f16(vget_high_f16(x[0])); \
+        res = (ggml_float) vaddvq_f32(vaddq_f32(t0, t1));         \
+    } while (0)
+
+    #define GGML_F16_VEC                GGML_F16x8
+    #define GGML_F16_VEC_ZERO           GGML_F16x8_ZERO
+    #define GGML_F16_VEC_SET1           GGML_F16x8_SET1
+    #define GGML_F16_VEC_LOAD(p, i)     GGML_F16x8_LOAD(p)
+    #define GGML_F16_VEC_STORE(p, r, i) GGML_F16x8_STORE((ggml_fp16_internal_t *)(p), r[i])
+    #define GGML_F16_VEC_FMA            GGML_F16x8_FMA
+    #define GGML_F16_VEC_ADD            GGML_F16x8_ADD
+    #define GGML_F16_VEC_MUL            GGML_F16x8_MUL
+    #define GGML_F16_VEC_REDUCE         GGML_F16x8_REDUCE
+#else
+    // if FP16 vector arithmetic is not supported, we use FP32 instead
+    // and take advantage of the vcvt_ functions to convert to/from FP16
+
+    #define GGML_F16_STEP 16
+    #define GGML_F16_EPR  4
+
+    #define GGML_F32Cx4              float32x4_t
+    #define GGML_F32Cx4_ZERO         vdupq_n_f32(0.0f)
+    #define GGML_F32Cx4_SET1(x)      vdupq_n_f32(x)
+    #define GGML_F32Cx4_LOAD(x)      vcvt_f32_f16(vld1_f16((const ggml_fp16_internal_t *)(x)))
+    #define GGML_F32Cx4_STORE(x, y)  vst1_f16(x, vcvt_f16_f32(y))
+    #define GGML_F32Cx4_FMA(a, b, c) vfmaq_f32(a, b, c)
+    #define GGML_F32Cx4_ADD          vaddq_f32
+    #define GGML_F32Cx4_MUL          vmulq_f32
+    #define GGML_F32Cx4_REDUCE       GGML_F32x4_REDUCE
+
+    #define GGML_F16_VEC                GGML_F32Cx4
+    #define GGML_F16_VEC_ZERO           GGML_F32Cx4_ZERO
+    #define GGML_F16_VEC_SET1           GGML_F32Cx4_SET1
+    #define GGML_F16_VEC_LOAD(p, i)     GGML_F32Cx4_LOAD(p)
+    #define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx4_STORE((ggml_fp16_internal_t *)(p), r[i])
+    #define GGML_F16_VEC_FMA            GGML_F32Cx4_FMA
+    #define GGML_F16_VEC_ADD            GGML_F32Cx4_ADD
+    #define GGML_F16_VEC_MUL            GGML_F32Cx4_MUL
+    #define GGML_F16_VEC_REDUCE         GGML_F32Cx4_REDUCE
+#endif
+
+#elif defined(__AVX512F__)
+
+#define GGML_SIMD
+
+// F32 AVX512
+
+#define GGML_F32_STEP 64
+#define GGML_F32_EPR  16
+
+#define GGML_F32x16         __m512
+#define GGML_F32x16_ZERO    _mm512_setzero_ps()
+#define GGML_F32x16_SET1(x) _mm512_set1_ps(x)
+#define GGML_F32x16_LOAD    _mm512_loadu_ps
+#define GGML_F32x16_STORE   _mm512_storeu_ps
+// _mm512_fmadd_ps is defined in AVX512F so no guard is required
+#define GGML_F32x16_FMA(a, b, c) _mm512_fmadd_ps(b, c, a)
+#define GGML_F32x16_ADD     _mm512_add_ps
+#define GGML_F32x16_MUL     _mm512_mul_ps
+#define GGML_F32x16_REDUCE(res, x)                                    \
+do {                                                                  \
+    int offset = GGML_F32_ARR >> 1;                                   \
+    for (int i = 0; i < offset; ++i) {                                \
+        x[i] = _mm512_add_ps(x[i], x[offset+i]);                      \
+    }                                                                 \
+    offset >>= 1;                                                     \
+    for (int i = 0; i < offset; ++i) {                                \
+        x[i] = _mm512_add_ps(x[i], x[offset+i]);                      \
+    }                                                                 \
+    offset >>= 1;                                                     \
+    for (int i = 0; i < offset; ++i) {                                \
+        x[i] = _mm512_add_ps(x[i], x[offset+i]);                      \
+    }                                                                 \
+    res = _mm512_reduce_add_ps(x[0]);                                 \
+} while (0)
+
+// TODO: is this optimal ?
+
+#define GGML_F32_VEC        GGML_F32x16
+#define GGML_F32_VEC_ZERO   GGML_F32x16_ZERO
+#define GGML_F32_VEC_SET1   GGML_F32x16_SET1
+#define GGML_F32_VEC_LOAD   GGML_F32x16_LOAD
+#define GGML_F32_VEC_STORE  GGML_F32x16_STORE
+#define GGML_F32_VEC_FMA    GGML_F32x16_FMA
+#define GGML_F32_VEC_ADD    GGML_F32x16_ADD
+#define GGML_F32_VEC_MUL    GGML_F32x16_MUL
+#define GGML_F32_VEC_REDUCE GGML_F32x16_REDUCE
+
+// F16 AVX512
+
+// F16 AVX
+
+#define GGML_F16_STEP 64
+#define GGML_F16_EPR  16
+
+// AVX512 has FP16 extension (AVX512_FP16) but I don't have it on my machine so I use FP32 instead
+
+#define GGML_F32Cx16             __m512
+#define GGML_F32Cx16_ZERO        _mm512_setzero_ps()
+#define GGML_F32Cx16_SET1(x)     _mm512_set1_ps(x)
+
+// unlike  _mm256_cvt intrinsics that require F16C, _mm512_cvt is defined in AVX512F
+// so F16C guard isn't required
+#define GGML_F32Cx16_LOAD(x)     _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)(x)))
+#define GGML_F32Cx16_STORE(x, y) _mm256_storeu_si256((__m256i *)(x), _mm512_cvtps_ph(y, 0))
+
+#define GGML_F32Cx16_FMA(a, b, c) _mm512_fmadd_ps(b, c, a)
+#define GGML_F32Cx16_ADD         _mm512_add_ps
+#define GGML_F32Cx16_MUL         _mm512_mul_ps
+#define GGML_F32Cx16_REDUCE(res, x)                               \
+do {                                                              \
+    int offset = GGML_F32_ARR >> 1;                               \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = _mm512_add_ps(x[i], x[offset+i]);                  \
+    }                                                             \
+    offset >>= 1;                                                 \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = _mm512_add_ps(x[i], x[offset+i]);                  \
+    }                                                             \
+    offset >>= 1;                                                 \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = _mm512_add_ps(x[i], x[offset+i]);                  \
+    }                                                             \
+    res = _mm512_reduce_add_ps(x[0]);                             \
+} while (0)
+
+#define GGML_F16_VEC                GGML_F32Cx16
+#define GGML_F16_VEC_ZERO           GGML_F32Cx16_ZERO
+#define GGML_F16_VEC_SET1           GGML_F32Cx16_SET1
+#define GGML_F16_VEC_LOAD(p, i)     GGML_F32Cx16_LOAD(p)
+#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx16_STORE(p, r[i])
+#define GGML_F16_VEC_FMA            GGML_F32Cx16_FMA
+#define GGML_F16_VEC_ADD            GGML_F32Cx16_ADD
+#define GGML_F16_VEC_MUL            GGML_F32Cx16_MUL
+#define GGML_F16_VEC_REDUCE         GGML_F32Cx16_REDUCE
+
+#elif defined(__AVX__)
+
+#define GGML_SIMD
+
+// F32 AVX
+
+#define GGML_F32_STEP 32
+#define GGML_F32_EPR  8
+
+#define GGML_F32x8         __m256
+#define GGML_F32x8_ZERO    _mm256_setzero_ps()
+#define GGML_F32x8_SET1(x) _mm256_set1_ps(x)
+#define GGML_F32x8_LOAD    _mm256_loadu_ps
+#define GGML_F32x8_STORE   _mm256_storeu_ps
+#if defined(__FMA__)
+    #define GGML_F32x8_FMA(a, b, c) _mm256_fmadd_ps(b, c, a)
+#else
+    #define GGML_F32x8_FMA(a, b, c) _mm256_add_ps(_mm256_mul_ps(b, c), a)
+#endif
+#define GGML_F32x8_ADD     _mm256_add_ps
+#define GGML_F32x8_MUL     _mm256_mul_ps
+#define GGML_F32x8_REDUCE(res, x)                                 \
+do {                                                              \
+    int offset = GGML_F32_ARR >> 1;                               \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = _mm256_add_ps(x[i], x[offset+i]);                  \
+    }                                                             \
+    offset >>= 1;                                                 \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = _mm256_add_ps(x[i], x[offset+i]);                  \
+    }                                                             \
+    offset >>= 1;                                                 \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = _mm256_add_ps(x[i], x[offset+i]);                  \
+    }                                                             \
+    const __m128 t0 = _mm_add_ps(_mm256_castps256_ps128(x[0]),    \
+                                 _mm256_extractf128_ps(x[0], 1)); \
+    const __m128 t1 = _mm_hadd_ps(t0, t0);                        \
+    res = (ggml_float) _mm_cvtss_f32(_mm_hadd_ps(t1, t1));        \
+} while (0)
+// TODO: is this optimal ?
+
+#define GGML_F32_VEC        GGML_F32x8
+#define GGML_F32_VEC_ZERO   GGML_F32x8_ZERO
+#define GGML_F32_VEC_SET1   GGML_F32x8_SET1
+#define GGML_F32_VEC_LOAD   GGML_F32x8_LOAD
+#define GGML_F32_VEC_STORE  GGML_F32x8_STORE
+#define GGML_F32_VEC_FMA    GGML_F32x8_FMA
+#define GGML_F32_VEC_ADD    GGML_F32x8_ADD
+#define GGML_F32_VEC_MUL    GGML_F32x8_MUL
+#define GGML_F32_VEC_REDUCE GGML_F32x8_REDUCE
+
+// F16 AVX
+
+#define GGML_F16_STEP 32
+#define GGML_F16_EPR  8
+
+// F16 arithmetic is not supported by AVX, so we use F32 instead
+
+#define GGML_F32Cx8             __m256
+#define GGML_F32Cx8_ZERO        _mm256_setzero_ps()
+#define GGML_F32Cx8_SET1(x)     _mm256_set1_ps(x)
+
+#if defined(__F16C__)
+// the  _mm256_cvt intrinsics require F16C
+#define GGML_F32Cx8_LOAD(x)     _mm256_cvtph_ps(_mm_loadu_si128((const __m128i *)(x)))
+#define GGML_F32Cx8_STORE(x, y) _mm_storeu_si128((__m128i *)(x), _mm256_cvtps_ph(y, 0))
+#else
+static inline __m256 __avx_f32cx8_load(ggml_fp16_t *x) {
+    float tmp[8];
+
+    for (int i = 0; i < 8; i++) {
+        tmp[i] = GGML_FP16_TO_FP32(x[i]);
+    }
+
+    return _mm256_loadu_ps(tmp);
+}
+static inline void __avx_f32cx8_store(ggml_fp16_t *x, __m256 y) {
+    float arr[8];
+
+    _mm256_storeu_ps(arr, y);
+
+    for (int i = 0; i < 8; i++)
+        x[i] = GGML_FP32_TO_FP16(arr[i]);
+}
+#define GGML_F32Cx8_LOAD(x)     __avx_f32cx8_load(x)
+#define GGML_F32Cx8_STORE(x, y) __avx_f32cx8_store(x, y)
+#endif
+
+#define GGML_F32Cx8_FMA         GGML_F32x8_FMA
+#define GGML_F32Cx8_ADD         _mm256_add_ps
+#define GGML_F32Cx8_MUL         _mm256_mul_ps
+#define GGML_F32Cx8_REDUCE      GGML_F32x8_REDUCE
+
+#define GGML_F16_VEC                GGML_F32Cx8
+#define GGML_F16_VEC_ZERO           GGML_F32Cx8_ZERO
+#define GGML_F16_VEC_SET1           GGML_F32Cx8_SET1
+#define GGML_F16_VEC_LOAD(p, i)     GGML_F32Cx8_LOAD(p)
+#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx8_STORE(p, r[i])
+#define GGML_F16_VEC_FMA            GGML_F32Cx8_FMA
+#define GGML_F16_VEC_ADD            GGML_F32Cx8_ADD
+#define GGML_F16_VEC_MUL            GGML_F32Cx8_MUL
+#define GGML_F16_VEC_REDUCE         GGML_F32Cx8_REDUCE
+
+#elif defined(__POWER9_VECTOR__)
+
+#define GGML_SIMD
+
+// F32 POWER9
+
+#define GGML_F32_STEP 32
+#define GGML_F32_EPR  4
+
+#define GGML_F32x4              vector float
+#define GGML_F32x4_ZERO         0.0f
+#define GGML_F32x4_SET1         vec_splats
+#define GGML_F32x4_LOAD(p)      vec_xl(0, p)
+#define GGML_F32x4_STORE(p, r)  vec_xst(r, 0, p)
+#define GGML_F32x4_FMA(a, b, c) vec_madd(b, c, a)
+#define GGML_F32x4_ADD          vec_add
+#define GGML_F32x4_MUL          vec_mul
+#define GGML_F32x4_REDUCE(res, x)              \
+{                                              \
+    int offset = GGML_F32_ARR >> 1;            \
+    for (int i = 0; i < offset; ++i) {         \
+        x[i] = vec_add(x[i], x[offset+i]);     \
+    }                                          \
+    offset >>= 1;                              \
+    for (int i = 0; i < offset; ++i) {         \
+        x[i] = vec_add(x[i], x[offset+i]);     \
+    }                                          \
+    offset >>= 1;                              \
+    for (int i = 0; i < offset; ++i) {         \
+        x[i] = vec_add(x[i], x[offset+i]);     \
+    }                                          \
+    res = vec_extract(x[0], 0) +               \
+          vec_extract(x[0], 1) +               \
+          vec_extract(x[0], 2) +               \
+          vec_extract(x[0], 3);                \
+}
+
+#define GGML_F32_VEC        GGML_F32x4
+#define GGML_F32_VEC_ZERO   GGML_F32x4_ZERO
+#define GGML_F32_VEC_SET1   GGML_F32x4_SET1
+#define GGML_F32_VEC_LOAD   GGML_F32x4_LOAD
+#define GGML_F32_VEC_STORE  GGML_F32x4_STORE
+#define GGML_F32_VEC_FMA    GGML_F32x4_FMA
+#define GGML_F32_VEC_ADD    GGML_F32x4_ADD
+#define GGML_F32_VEC_MUL    GGML_F32x4_MUL
+#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE
+
+// F16 POWER9
+#define GGML_F16_STEP       GGML_F32_STEP
+#define GGML_F16_EPR        GGML_F32_EPR
+#define GGML_F16_VEC        GGML_F32x4
+#define GGML_F16_VEC_ZERO   GGML_F32x4_ZERO
+#define GGML_F16_VEC_SET1   GGML_F32x4_SET1
+#define GGML_F16_VEC_FMA    GGML_F32x4_FMA
+#define GGML_F16_VEC_ADD    GGML_F32x4_ADD
+#define GGML_F16_VEC_MUL    GGML_F32x4_MUL
+#define GGML_F16_VEC_REDUCE GGML_F32x4_REDUCE
+// Use vec_xl, not vec_ld, in case the load address is not aligned.
+#define GGML_F16_VEC_LOAD(p, i) (i & 0x1) ?                   \
+  vec_extract_fp32_from_shorth(vec_xl(0, p - GGML_F16_EPR)) : \
+  vec_extract_fp32_from_shortl(vec_xl(0, p))
+#define GGML_ENDIAN_BYTE(i) ((unsigned char *)&(uint16_t){1})[i]
+#define GGML_F16_VEC_STORE(p, r, i)                             \
+  if (i & 0x1)                                                  \
+    vec_xst(vec_pack_to_short_fp32(r[i - GGML_ENDIAN_BYTE(1)],  \
+                                   r[i - GGML_ENDIAN_BYTE(0)]), \
+            0, p - GGML_F16_EPR)
+
+#elif defined(__wasm_simd128__)
+
+#define GGML_SIMD
+
+// F32 WASM
+
+#define GGML_F32_STEP 16
+#define GGML_F32_EPR  4
+
+#define GGML_F32x4              v128_t
+#define GGML_F32x4_ZERO         wasm_f32x4_splat(0.0f)
+#define GGML_F32x4_SET1(x)      wasm_f32x4_splat(x)
+#define GGML_F32x4_LOAD         wasm_v128_load
+#define GGML_F32x4_STORE        wasm_v128_store
+#define GGML_F32x4_FMA(a, b, c) wasm_f32x4_add(wasm_f32x4_mul(b, c), a)
+#define GGML_F32x4_ADD          wasm_f32x4_add
+#define GGML_F32x4_MUL          wasm_f32x4_mul
+#define GGML_F32x4_REDUCE(res, x)                  \
+{                                                  \
+    int offset = GGML_F32_ARR >> 1;                \
+    for (int i = 0; i < offset; ++i) {             \
+        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
+    }                                              \
+    offset >>= 1;                                  \
+    for (int i = 0; i < offset; ++i) {             \
+        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
+    }                                              \
+    offset >>= 1;                                  \
+    for (int i = 0; i < offset; ++i) {             \
+        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
+    }                                              \
+    res = wasm_f32x4_extract_lane(x[0], 0) +       \
+          wasm_f32x4_extract_lane(x[0], 1) +       \
+          wasm_f32x4_extract_lane(x[0], 2) +       \
+          wasm_f32x4_extract_lane(x[0], 3);        \
+}
+
+#define GGML_F32_VEC        GGML_F32x4
+#define GGML_F32_VEC_ZERO   GGML_F32x4_ZERO
+#define GGML_F32_VEC_SET1   GGML_F32x4_SET1
+#define GGML_F32_VEC_LOAD   GGML_F32x4_LOAD
+#define GGML_F32_VEC_STORE  GGML_F32x4_STORE
+#define GGML_F32_VEC_FMA    GGML_F32x4_FMA
+#define GGML_F32_VEC_ADD    GGML_F32x4_ADD
+#define GGML_F32_VEC_MUL    GGML_F32x4_MUL
+#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE
+
+// F16 WASM
+
+#define GGML_F16_STEP 16
+#define GGML_F16_EPR  4
+
+inline static v128_t __wasm_f16x4_load(const ggml_fp16_t * p) {
+    float tmp[4];
+
+    tmp[0] = GGML_FP16_TO_FP32(p[0]);
+    tmp[1] = GGML_FP16_TO_FP32(p[1]);
+    tmp[2] = GGML_FP16_TO_FP32(p[2]);
+    tmp[3] = GGML_FP16_TO_FP32(p[3]);
+
+    return wasm_v128_load(tmp);
+}
+
+inline static void __wasm_f16x4_store(ggml_fp16_t * p, v128_t x) {
+    float tmp[4];
+
+    wasm_v128_store(tmp, x);
+
+    p[0] = GGML_FP32_TO_FP16(tmp[0]);
+    p[1] = GGML_FP32_TO_FP16(tmp[1]);
+    p[2] = GGML_FP32_TO_FP16(tmp[2]);
+    p[3] = GGML_FP32_TO_FP16(tmp[3]);
+}
+
+#define GGML_F16x4             v128_t
+#define GGML_F16x4_ZERO        wasm_f32x4_splat(0.0f)
+#define GGML_F16x4_SET1(x)     wasm_f32x4_splat(x)
+#define GGML_F16x4_LOAD(x)     __wasm_f16x4_load(x)
+#define GGML_F16x4_STORE(x, y) __wasm_f16x4_store(x, y)
+#define GGML_F16x4_FMA         GGML_F32x4_FMA
+#define GGML_F16x4_ADD         wasm_f32x4_add
+#define GGML_F16x4_MUL         wasm_f32x4_mul
+#define GGML_F16x4_REDUCE(res, x)                  \
+{                                                  \
+    int offset = GGML_F16_ARR >> 1;                \
+    for (int i = 0; i < offset; ++i) {             \
+        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
+    }                                              \
+    offset >>= 1;                                  \
+    for (int i = 0; i < offset; ++i) {             \
+        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
+    }                                              \
+    offset >>= 1;                                  \
+    for (int i = 0; i < offset; ++i) {             \
+        x[i] = wasm_f32x4_add(x[i], x[offset+i]);  \
+    }                                              \
+    res = wasm_f32x4_extract_lane(x[0], 0) +       \
+          wasm_f32x4_extract_lane(x[0], 1) +       \
+          wasm_f32x4_extract_lane(x[0], 2) +       \
+          wasm_f32x4_extract_lane(x[0], 3);        \
+}
+
+#define GGML_F16_VEC                GGML_F16x4
+#define GGML_F16_VEC_ZERO           GGML_F16x4_ZERO
+#define GGML_F16_VEC_SET1           GGML_F16x4_SET1
+#define GGML_F16_VEC_LOAD(p, i)     GGML_F16x4_LOAD(p)
+#define GGML_F16_VEC_STORE(p, r, i) GGML_F16x4_STORE(p, r[i])
+#define GGML_F16_VEC_FMA            GGML_F16x4_FMA
+#define GGML_F16_VEC_ADD            GGML_F16x4_ADD
+#define GGML_F16_VEC_MUL            GGML_F16x4_MUL
+#define GGML_F16_VEC_REDUCE         GGML_F16x4_REDUCE
+
+#elif defined(__SSE3__)
+
+#define GGML_SIMD
+
+// F32 SSE
+
+#define GGML_F32_STEP 32
+#define GGML_F32_EPR  4
+
+#define GGML_F32x4         __m128
+#define GGML_F32x4_ZERO    _mm_setzero_ps()
+#define GGML_F32x4_SET1(x) _mm_set1_ps(x)
+#define GGML_F32x4_LOAD    _mm_loadu_ps
+#define GGML_F32x4_STORE   _mm_storeu_ps
+#if defined(__FMA__)
+    // TODO: Does this work?
+    #define GGML_F32x4_FMA(a, b, c) _mm_fmadd_ps(b, c, a)
+#else
+    #define GGML_F32x4_FMA(a, b, c) _mm_add_ps(_mm_mul_ps(b, c), a)
+#endif
+#define GGML_F32x4_ADD     _mm_add_ps
+#define GGML_F32x4_MUL     _mm_mul_ps
+#define GGML_F32x4_REDUCE(res, x)                                 \
+{                                                                 \
+    int offset = GGML_F32_ARR >> 1;                               \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = _mm_add_ps(x[i], x[offset+i]);                     \
+    }                                                             \
+    offset >>= 1;                                                 \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = _mm_add_ps(x[i], x[offset+i]);                     \
+    }                                                             \
+    offset >>= 1;                                                 \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = _mm_add_ps(x[i], x[offset+i]);                     \
+    }                                                             \
+    const __m128 t0 = _mm_hadd_ps(x[0], x[0]);                    \
+    res = (ggml_float) _mm_cvtss_f32(_mm_hadd_ps(t0, t0));        \
+}
+// TODO: is this optimal ?
+
+#define GGML_F32_VEC        GGML_F32x4
+#define GGML_F32_VEC_ZERO   GGML_F32x4_ZERO
+#define GGML_F32_VEC_SET1   GGML_F32x4_SET1
+#define GGML_F32_VEC_LOAD   GGML_F32x4_LOAD
+#define GGML_F32_VEC_STORE  GGML_F32x4_STORE
+#define GGML_F32_VEC_FMA    GGML_F32x4_FMA
+#define GGML_F32_VEC_ADD    GGML_F32x4_ADD
+#define GGML_F32_VEC_MUL    GGML_F32x4_MUL
+#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE
+
+// F16 SSE
+
+#define GGML_F16_STEP 32
+#define GGML_F16_EPR  4
+
+static inline __m128 __sse_f16x4_load(ggml_fp16_t *x) {
+    float tmp[4];
+
+    tmp[0] = GGML_FP16_TO_FP32(x[0]);
+    tmp[1] = GGML_FP16_TO_FP32(x[1]);
+    tmp[2] = GGML_FP16_TO_FP32(x[2]);
+    tmp[3] = GGML_FP16_TO_FP32(x[3]);
+
+    return _mm_loadu_ps(tmp);
+}
+
+static inline void __sse_f16x4_store(ggml_fp16_t *x, __m128 y) {
+    float arr[4];
+
+    _mm_storeu_ps(arr, y);
+
+    x[0] = GGML_FP32_TO_FP16(arr[0]);
+    x[1] = GGML_FP32_TO_FP16(arr[1]);
+    x[2] = GGML_FP32_TO_FP16(arr[2]);
+    x[3] = GGML_FP32_TO_FP16(arr[3]);
+}
+
+#define GGML_F32Cx4             __m128
+#define GGML_F32Cx4_ZERO        _mm_setzero_ps()
+#define GGML_F32Cx4_SET1(x)     _mm_set1_ps(x)
+#define GGML_F32Cx4_LOAD(x)     __sse_f16x4_load(x)
+#define GGML_F32Cx4_STORE(x, y) __sse_f16x4_store(x, y)
+#define GGML_F32Cx4_FMA         GGML_F32x4_FMA
+#define GGML_F32Cx4_ADD         _mm_add_ps
+#define GGML_F32Cx4_MUL         _mm_mul_ps
+#define GGML_F32Cx4_REDUCE      GGML_F32x4_REDUCE
+
+#define GGML_F16_VEC                 GGML_F32Cx4
+#define GGML_F16_VEC_ZERO            GGML_F32Cx4_ZERO
+#define GGML_F16_VEC_SET1            GGML_F32Cx4_SET1
+#define GGML_F16_VEC_LOAD(p, i)      GGML_F32Cx4_LOAD(p)
+#define GGML_F16_VEC_STORE(p, r, i)  GGML_F32Cx4_STORE(p, r[i])
+#define GGML_F16_VEC_FMA             GGML_F32Cx4_FMA
+#define GGML_F16_VEC_ADD             GGML_F32Cx4_ADD
+#define GGML_F16_VEC_MUL             GGML_F32Cx4_MUL
+#define GGML_F16_VEC_REDUCE          GGML_F32Cx4_REDUCE
+
+#elif defined(__loongarch_asx)
+
+#define GGML_SIMD
+
+// F32 LASX
+#define GGML_F32_STEP 32
+#define GGML_F32_EPR  8
+
+#define GGML_F32x8         __m256
+#define GGML_F32x8_ZERO    (__m256)__lasx_xvldi(0)
+#define GGML_F32x8_SET1(x) (__m256)__lasx_xvreplfr2vr_s((x))
+#define GGML_F32x8_LOAD(x) (__m256)__lasx_xvld((x), 0)
+#define GGML_F32x8_STORE(x,y)   __lasx_xvst((y), (x), 0)
+#define GGML_F32x8_FMA(a, b, c) __lasx_xvfmadd_s(b, c, a)
+#define GGML_F32x8_ADD     __lasx_xvfadd_s
+#define GGML_F32x8_MUL     __lasx_xvfmul_s
+#define GGML_F32x8_REDUCE(res, x)                                 \
+do {                                                              \
+    int offset = GGML_F32_ARR >> 1;                               \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = __lasx_xvfadd_s(x[i], x[offset+i]);                  \
+    }                                                             \
+    offset >>= 1;                                                 \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = __lasx_xvfadd_s(x[i], x[offset+i]);                  \
+    }                                                             \
+    offset >>= 1;                                                 \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = __lasx_xvfadd_s(x[i], x[offset+i]);                  \
+    }                                                             \
+    float *tmp_p = (float *)&x[0]; \
+    res = tmp_p[0] + tmp_p[1] + tmp_p[2] + tmp_p[3] + tmp_p[4] + tmp_p[5] + tmp_p[6] + tmp_p[7];  \
+} while (0)
+// TODO: is this optimal ?
+
+#define GGML_F32_VEC        GGML_F32x8
+#define GGML_F32_VEC_ZERO   GGML_F32x8_ZERO
+#define GGML_F32_VEC_SET1   GGML_F32x8_SET1
+#define GGML_F32_VEC_LOAD   GGML_F32x8_LOAD
+#define GGML_F32_VEC_STORE  GGML_F32x8_STORE
+#define GGML_F32_VEC_FMA    GGML_F32x8_FMA
+#define GGML_F32_VEC_ADD    GGML_F32x8_ADD
+#define GGML_F32_VEC_MUL    GGML_F32x8_MUL
+#define GGML_F32_VEC_REDUCE GGML_F32x8_REDUCE
+
+// F16 LASX
+
+#define GGML_F16_STEP 32
+#define GGML_F16_EPR  8
+
+// F16 arithmetic is not supported by AVX, so we use F32 instead
+
+#define GGML_F32Cx8          __m256
+#define GGML_F32Cx8_ZERO    (__m256)__lasx_xvldi(0)
+#define GGML_F32Cx8_SET1(x) (__m256)__lasx_xvreplgr2vr_w((x))
+
+static inline __m256 __lasx_f32cx8_load(const ggml_fp16_t * x) {
+    float tmp[8];
+
+    for (int i = 0; i < 8; i++) {
+        tmp[i] = GGML_FP16_TO_FP32(x[i]);
+    }
+
+    return (__m256)__lasx_xvld(tmp, 0);
+}
+static inline void __lasx_f32cx8_store(ggml_fp16_t * x, __m256 y) {
+    float arr[8];
+
+    __lasx_xvst(y, arr, 0);
+
+    for (int i = 0; i < 8; i++) {
+        x[i] = GGML_FP32_TO_FP16(arr[i]);
+    }
+}
+#define GGML_F32Cx8_LOAD(x)     __lasx_f32cx8_load(x)
+#define GGML_F32Cx8_STORE(x, y) __lasx_f32cx8_store(x, y)
+
+#define GGML_F32Cx8_FMA         GGML_F32x8_FMA
+#define GGML_F32Cx8_ADD         __lasx_xvfadd_s
+#define GGML_F32Cx8_MUL         __lasx_xvfmul_s
+#define GGML_F32Cx8_REDUCE      GGML_F32x8_REDUCE
+
+#define GGML_F16_VEC                GGML_F32Cx8
+#define GGML_F16_VEC_ZERO           GGML_F32Cx8_ZERO
+#define GGML_F16_VEC_SET1           GGML_F32Cx8_SET1
+#define GGML_F16_VEC_LOAD(p, i)     GGML_F32Cx8_LOAD(p)
+#define GGML_F16_VEC_STORE(p, r, i) GGML_F32Cx8_STORE(p, r[i])
+#define GGML_F16_VEC_FMA            GGML_F32Cx8_FMA
+#define GGML_F16_VEC_ADD            GGML_F32Cx8_ADD
+#define GGML_F16_VEC_MUL            GGML_F32Cx8_MUL
+#define GGML_F16_VEC_REDUCE         GGML_F32Cx8_REDUCE
+
+#elif defined(__loongarch_sx)
+
+#define GGML_SIMD
+
+// F32 LSX
+
+#define GGML_F32_STEP 32
+#define GGML_F32_EPR  4
+
+#define GGML_F32x4         __m128
+#define GGML_F32x4_ZERO    __lsx_vldi(0)
+#define GGML_F32x4_SET1(x) __lsx_vinsgr2vr_w(__lsx_vldi(0),(x), 0)
+#define GGML_F32x4_LOAD(x) __lsx_vld((x), 0)
+#define GGML_F32x4_STORE((x),(y))   __lsx_vst((y), (x), 0)
+#define GGML_F32x4_FMA(a, b, c) __lsx_vfmadd_s(b, c, a)
+#define GGML_F32x4_ADD     __lsx_vfadd_s
+#define GGML_F32x4_MUL     __lsx_vfmul_s
+#define GGML_F32x4_REDUCE(res, x)                                 \
+{                                                                 \
+    int offset = GGML_F32_ARR >> 1;                               \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = __lsx_vfadd_s(x[i], x[offset+i]);                     \
+    }                                                             \
+    offset >>= 1;                                                 \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = __lsx_vfadd_s(x[i], x[offset+i]);                     \
+    }                                                             \
+    offset >>= 1;                                                 \
+    for (int i = 0; i < offset; ++i) {                            \
+        x[i] = __lsx_vfadd_s(x[i], x[offset+i]);                     \
+    }                                                             \
+    __m128i tmp = __lsx_vsrli_d((__m128i)x[0], 32); \
+    tmp = (__m128i)__lsx_vfadd_s((__m128)tmp, x[0]); \
+    tmp = __lsx_vpickev_w(__lsx_vldi(0), tmp); \
+    const __m128 t0 = __lsx_vshuf4i_w(tmp, 0x88); \
+    tmp = __lsx_vsrli_d((__m128i)t0, 32); \
+    tmp = (__m128i)__lsx_vfadd_s((__m128)tmp, t0); \
+    tmp = __lsx_vpickev_w(__lsx_vldi(0), tmp); \
+    res = (ggml_float) __lsx_vpickve2gr_w(__lsx_vshuf4i_w(tmp, 0x88), 0);        \
+}
+
+#define GGML_F32_VEC        GGML_F32x4
+#define GGML_F32_VEC_ZERO   GGML_F32x4_ZERO
+#define GGML_F32_VEC_SET1   GGML_F32x4_SET1
+#define GGML_F32_VEC_LOAD   GGML_F32x4_LOAD
+#define GGML_F32_VEC_STORE  GGML_F32x4_STORE
+#define GGML_F32_VEC_FMA    GGML_F32x4_FMA
+#define GGML_F32_VEC_ADD    GGML_F32x4_ADD
+#define GGML_F32_VEC_MUL    GGML_F32x4_MUL
+#define GGML_F32_VEC_REDUCE GGML_F32x4_REDUCE
+
+// F16 LSX
+
+#define GGML_F16_STEP 32
+#define GGML_F16_EPR  4
+
+static inline __m128 __lsx_f16x4_load(const ggml_fp16_t * x) {
+    float tmp[4];
+
+    tmp[0] = GGML_FP16_TO_FP32(x[0]);
+    tmp[1] = GGML_FP16_TO_FP32(x[1]);
+    tmp[2] = GGML_FP16_TO_FP32(x[2]);
+    tmp[3] = GGML_FP16_TO_FP32(x[3]);
+
+    return __lsx_vld(tmp, 0);
+}
+
+static inline void __lsx_f16x4_store(ggml_fp16_t * x, __m128 y) {
+    float arr[4];
+
+    __lsx_vst(y, arr, 0);
+
+    x[0] = GGML_FP32_TO_FP16(arr[0]);
+    x[1] = GGML_FP32_TO_FP16(arr[1]);
+    x[2] = GGML_FP32_TO_FP16(arr[2]);
+    x[3] = GGML_FP32_TO_FP16(arr[3]);
+}
+
+#define GGML_F32Cx4             __m128
+#define GGML_F32Cx4_ZERO        __lsx_vldi(0)
+#define GGML_F32Cx4_SET1(x)     __lsx_vinsgr2vr_w(__lsx_vldi(0),(x), 0)
+#define GGML_F32Cx4_LOAD(x)     __lsx_f16x4_load(x)
+#define GGML_F32Cx4_STORE(x, y) __lsx_f16x4_store(x, y)
+#define GGML_F32Cx4_FMA         GGML_F32x4_FMA
+#define GGML_F32Cx4_ADD         __lsx_vfadd_s
+#define GGML_F32Cx4_MUL         __lsx_vfmul_s
+#define GGML_F32Cx4_REDUCE      GGML_F32x4_REDUCE
+
+#define GGML_F16_VEC                 GGML_F32Cx4
+#define GGML_F16_VEC_ZERO            GGML_F32Cx4_ZERO
+#define GGML_F16_VEC_SET1            GGML_F32Cx4_SET1
+#define GGML_F16_VEC_LOAD(p, i)      GGML_F32Cx4_LOAD(p)
+#define GGML_F16_VEC_STORE(p, r, i)  GGML_F32Cx4_STORE(p, r[i])
+#define GGML_F16_VEC_FMA             GGML_F32Cx4_FMA
+#define GGML_F16_VEC_ADD             GGML_F32Cx4_ADD
+#define GGML_F16_VEC_MUL             GGML_F32Cx4_MUL
+#define GGML_F16_VEC_REDUCE          GGML_F32Cx4_REDUCE
+
+#endif
+
+// GGML_F32_ARR / GGML_F16_ARR
+//   number of registers to use per step
+#ifdef GGML_SIMD
+#define GGML_F32_ARR (GGML_F32_STEP/GGML_F32_EPR)
+#define GGML_F16_ARR (GGML_F16_STEP/GGML_F16_EPR)
+#endif
+
+//
+// ggml context
+//
+
+struct ggml_context {
+    size_t mem_size;
+    void* mem_buffer;
+    bool   mem_buffer_owned;
+    bool   no_alloc;
+    bool   no_alloc_save; // this is used to save the no_alloc state when using scratch buffers
+
+    int    n_objects;
+
+    struct ggml_object * objects_begin;
+    struct ggml_object * objects_end;
+
+    struct ggml_scratch scratch;
+    struct ggml_scratch scratch_save;
+};
+
+struct ggml_context_container {
+    bool used;
+
+    struct ggml_context context;
+};
+
+struct ggml_compute_state_shared {
+    const struct ggml_cgraph * cgraph;
+    const struct ggml_cplan * cplan;
+
+    int n_threads;
+
+    // synchronization primitives
+    atomic_int n_barrier;
+    atomic_int n_barrier_passed;
+
+    ggml_abort_callback abort_callback; // abort ggml_graph_compute when true
+    void * abort_callback_data;
+
+    atomic_int current_chunk; // currently processing chunk during mul_mat, shared between all the threads
+
+    enum ggml_status ec;
+};
+
+struct ggml_compute_state {
+    ggml_thread_t thrd;
+    int ith;
+    struct ggml_compute_state_shared * shared;
+};
+
+struct ggml_compute_params {
+    // ith = thread index, nth = number of threads
+    int ith, nth;
+
+    // work buffer for all threads
+    size_t wsize;
+    void * wdata;
+
+    struct ggml_compute_state_shared * shared;
+};
+
+//
+// fundamental operations
+//
+
+inline static void ggml_vec_set_i8(const int n, int8_t * x, const int8_t v) { for (int i = 0; i < n; ++i) x[i] = v; }
+
+inline static void ggml_vec_set_i16(const int n, int16_t * x, const int16_t v) { for (int i = 0; i < n; ++i) x[i] = v; }
+
+inline static void ggml_vec_set_i32(const int n, int32_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; }
+
+inline static void ggml_vec_set_f16(const int n, ggml_fp16_t * x, const int32_t v) { for (int i = 0; i < n; ++i) x[i] = v; }
+
+inline static void ggml_vec_set_bf16(const int n, ggml_bf16_t * x, const ggml_bf16_t v) { for (int i = 0; i < n; ++i) x[i] = v; }
+
+inline static void ggml_vec_add_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i]  = x[i] + y[i]; }
+inline static void ggml_vec_add1_f32(const int n, float * z, const float * x, const float   v) { for (int i = 0; i < n; ++i) z[i]  = x[i] + v;    }
+inline static void ggml_vec_acc_f32 (const int n, float * y, const float * x)                  { for (int i = 0; i < n; ++i) y[i] += x[i];        }
+inline static void ggml_vec_acc1_f32(const int n, float * y, const float   v)                  { for (int i = 0; i < n; ++i) y[i] += v;           }
+inline static void ggml_vec_sub_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i]  = x[i] - y[i]; }
+inline static void ggml_vec_set_f32 (const int n, float * x, const float   v)                  { for (int i = 0; i < n; ++i) x[i]  = v;           }
+inline static void ggml_vec_cpy_f32 (const int n, float * y, const float * x)                  { for (int i = 0; i < n; ++i) y[i]  = x[i];        }
+inline static void ggml_vec_neg_f32 (const int n, float * y, const float * x)                  { for (int i = 0; i < n; ++i) y[i]  = -x[i];       }
+inline static void ggml_vec_mul_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i]  = x[i]*y[i];   }
+inline static void ggml_vec_div_f32 (const int n, float * z, const float * x, const float * y) { for (int i = 0; i < n; ++i) z[i]  = x[i]/y[i];   }
+
+static void ggml_vec_dot_f32(int n, float * restrict s, size_t bs, const float * restrict x, size_t bx, const float * restrict y, size_t by, int nrc) {
+   assert(nrc == 1);
+   UNUSED(nrc);
+   UNUSED(bx);
+   UNUSED(by);
+   UNUSED(bs);
+
+#if defined(GGML_SIMD)
+    float sumf = 0.0f;
+    const int np = (n & ~(GGML_F32_STEP - 1));
+
+    GGML_F32_VEC sum[GGML_F32_ARR] = { GGML_F32_VEC_ZERO };
+
+    GGML_F32_VEC ax[GGML_F32_ARR];
+    GGML_F32_VEC ay[GGML_F32_ARR];
+
+    for (int i = 0; i < np; i += GGML_F32_STEP) {
+        for (int j = 0; j < GGML_F32_ARR; j++) {
+            ax[j] = GGML_F32_VEC_LOAD(x + i + j*GGML_F32_EPR);
+            ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR);
+
+            sum[j] = GGML_F32_VEC_FMA(sum[j], ax[j], ay[j]);
+        }
+    }
+
+    // reduce sum0..sum3 to sum0
+    GGML_F32_VEC_REDUCE(sumf, sum);
+
+    // leftovers
+    for (int i = np; i < n; ++i) {
+        sumf += x[i]*y[i];
+    }
+#else
+    // scalar
+    ggml_float sumf = 0.0;
+    for (int i = 0; i < n; ++i) {
+        sumf += (ggml_float)(x[i]*y[i]);
+    }
+#endif
+
+    *s = sumf;
+}
+
+static void ggml_vec_dot_bf16(int n, float * restrict s, size_t bs, ggml_bf16_t * restrict x, size_t bx, ggml_bf16_t * restrict y, size_t by, int nrc) {
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+    int i = 0;
+    ggml_float sumf = 0;
+
+#if defined(__AVX512BF16__)
+    __m512 c1 = _mm512_setzero_ps();
+    __m512 c2 = _mm512_setzero_ps();
+    for (; i + 64 <= n; i += 64) {
+        c1 = _mm512_dpbf16_ps(c1, m512bh(_mm512_loadu_si512((x + i))),
+                             m512bh(_mm512_loadu_si512((y + i))));
+        c2 = _mm512_dpbf16_ps(c2, m512bh(_mm512_loadu_si512((x + i + 32))),
+                             m512bh(_mm512_loadu_si512((y + i + 32))));
+    }
+    sumf += (ggml_float)_mm512_reduce_add_ps(c1);
+    sumf += (ggml_float)_mm512_reduce_add_ps(c2);
+
+#elif defined(__AVX512F__)
+#define LOAD(p) _mm512_castsi512_ps(_mm512_slli_epi32(_mm512_cvtepu16_epi32(_mm256_loadu_si256((const __m256i *)(p))), 16))
+    __m512 c1 = _mm512_setzero_ps();
+    __m512 c2 = _mm512_setzero_ps();
+    for (; i + 32 <= n; i += 32) {
+        c1 = _mm512_add_ps(_mm512_mul_ps(LOAD(x + i), LOAD(y + i)), c1);
+        c2 = _mm512_add_ps(_mm512_mul_ps(LOAD(x + i + 16), LOAD(y + i + 16)), c2);
+    }
+    sumf += (ggml_float)_mm512_reduce_add_ps(c1);
+    sumf += (ggml_float)_mm512_reduce_add_ps(c2);
+
+#undef LOAD
+#elif defined(__AVX2__)
+#define LOAD(p) _mm256_castsi256_ps(_mm256_slli_epi32(_mm256_cvtepu16_epi32(_mm_loadu_si128((const __m128i *)(p))), 16))
+    __m256 c1 = _mm256_setzero_ps();
+    __m256 c2 = _mm256_setzero_ps();
+    __m256 c3 = _mm256_setzero_ps();
+    __m256 c4 = _mm256_setzero_ps();
+    for (; i + 32 <= n; i += 32) {
+        c1 = _mm256_add_ps(_mm256_mul_ps(LOAD(x + i), LOAD(y + i)), c1);
+        c2 = _mm256_add_ps(_mm256_mul_ps(LOAD(x + i + 8), LOAD(y + i + 8)), c2);
+        c3 = _mm256_add_ps(_mm256_mul_ps(LOAD(x + i + 16), LOAD(y + i + 16)), c3);
+        c4 = _mm256_add_ps(_mm256_mul_ps(LOAD(x + i + 24), LOAD(y + i + 24)), c4);
+    }
+    __m128 g;
+    c1 = _mm256_add_ps(_mm256_add_ps(c1, c3),
+                       _mm256_add_ps(c2, c4));
+    g = _mm_add_ps(_mm256_extractf128_ps(c1, 1),
+                   _mm256_castps256_ps128(c1));
+    g = _mm_add_ps(g, _mm_movehl_ps(g, g));
+    g = _mm_add_ss(g, _mm_movehdup_ps(g));
+    sumf += (ggml_float)_mm_cvtss_f32(g);
+
+#undef LOAD
+#endif
+
+    for (; i < n; ++i) {
+        sumf += (ggml_float)(GGML_BF16_TO_FP32(x[i]) *
+                             GGML_BF16_TO_FP32(y[i]));
+    }
+    *s = sumf;
+}
+
+static void ggml_vec_dot_f16(int n, float * restrict s, size_t bs, ggml_fp16_t * restrict x, size_t bx, ggml_fp16_t * restrict y, size_t by, int nrc) {
+    assert(nrc == 1);
+    UNUSED(nrc);
+    UNUSED(bx);
+    UNUSED(by);
+    UNUSED(bs);
+
+    ggml_float sumf = 0.0;
+
+#if defined(GGML_SIMD)
+    const int np = (n & ~(GGML_F16_STEP - 1));
+
+    GGML_F16_VEC sum[GGML_F16_ARR] = { GGML_F16_VEC_ZERO };
+
+    GGML_F16_VEC ax[GGML_F16_ARR];
+    GGML_F16_VEC ay[GGML_F16_ARR];
+
+    for (int i = 0; i < np; i += GGML_F16_STEP) {
+        for (int j = 0; j < GGML_F16_ARR; j++) {
+            ax[j] = GGML_F16_VEC_LOAD(x + i + j*GGML_F16_EPR, j);
+            ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j);
+
+            sum[j] = GGML_F16_VEC_FMA(sum[j], ax[j], ay[j]);
+        }
+    }
+
+    // reduce sum0..sum3 to sum0
+    GGML_F16_VEC_REDUCE(sumf, sum);
+
+    // leftovers
+    for (int i = np; i < n; ++i) {
+        sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i]));
+    }
+#else
+    for (int i = 0; i < n; ++i) {
+        sumf += (ggml_float)(GGML_FP16_TO_FP32(x[i])*GGML_FP16_TO_FP32(y[i]));
+    }
+#endif
+
+    *s = sumf;
+}
+
+// compute GGML_VEC_DOT_UNROLL dot products at once
+// xs - x row stride in bytes
+inline static void ggml_vec_dot_f16_unroll(const int n, const int xs, float * restrict s, void * restrict xv, ggml_fp16_t * restrict y) {
+    ggml_float sumf[GGML_VEC_DOT_UNROLL] = { 0.0 };
+
+    ggml_fp16_t * restrict x[GGML_VEC_DOT_UNROLL];
+
+    for (int i = 0; i < GGML_VEC_DOT_UNROLL; ++i) {
+        x[i] = (ggml_fp16_t *) ((char *) xv + i*xs);
+    }
+
+#if defined(GGML_SIMD)
+    const int np = (n & ~(GGML_F16_STEP - 1));
+
+    GGML_F16_VEC sum[GGML_VEC_DOT_UNROLL][GGML_F16_ARR] = { { GGML_F16_VEC_ZERO } };
+
+    GGML_F16_VEC ax[GGML_F16_ARR];
+    GGML_F16_VEC ay[GGML_F16_ARR];
+
+    for (int i = 0; i < np; i += GGML_F16_STEP) {
+        for (int j = 0; j < GGML_F16_ARR; j++) {
+            ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j);
+
+            for (int k = 0; k < GGML_VEC_DOT_UNROLL; ++k) {
+                ax[j] = GGML_F16_VEC_LOAD(x[k] + i + j*GGML_F16_EPR, j);
+
+                sum[k][j] = GGML_F16_VEC_FMA(sum[k][j], ax[j], ay[j]);
+            }
+        }
+    }
+
+    // reduce sum0..sum3 to sum0
+    for (int k = 0; k < GGML_VEC_DOT_UNROLL; ++k) {
+        GGML_F16_VEC_REDUCE(sumf[k], sum[k]);
+    }
+
+    // leftovers
+    for (int i = np; i < n; ++i) {
+        for (int j = 0; j < GGML_VEC_DOT_UNROLL; ++j) {
+            sumf[j] += (ggml_float)(GGML_FP16_TO_FP32(x[j][i])*GGML_FP16_TO_FP32(y[i]));
+        }
+    }
+#else
+    for (int i = 0; i < n; ++i) {
+        for (int j = 0; j < GGML_VEC_DOT_UNROLL; ++j) {
+            sumf[j] += (ggml_float)(GGML_FP16_TO_FP32(x[j][i])*GGML_FP16_TO_FP32(y[i]));
+        }
+    }
+#endif
+
+    for (int i = 0; i < GGML_VEC_DOT_UNROLL; ++i) {
+        s[i] = sumf[i];
+    }
+}
+
+inline static void ggml_vec_mad_f32(const int n, float * restrict y, const float * restrict x, const float v) {
+#if defined(GGML_SIMD)
+    const int np = (n & ~(GGML_F32_STEP - 1));
+
+    GGML_F32_VEC vx = GGML_F32_VEC_SET1(v);
+
+    GGML_F32_VEC ax[GGML_F32_ARR];
+    GGML_F32_VEC ay[GGML_F32_ARR];
+
+    for (int i = 0; i < np; i += GGML_F32_STEP) {
+        for (int j = 0; j < GGML_F32_ARR; j++) {
+            ax[j] = GGML_F32_VEC_LOAD(x + i + j*GGML_F32_EPR);
+            ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR);
+            ay[j] = GGML_F32_VEC_FMA(ay[j], ax[j], vx);
+
+            GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]);
+        }
+    }
+
+    // leftovers
+    for (int i = np; i < n; ++i) {
+        y[i] += x[i]*v;
+    }
+#else
+    // scalar
+    for (int i = 0; i < n; ++i) {
+        y[i] += x[i]*v;
+    }
+#endif
+}
+
+inline static void ggml_vec_mad_f16(const int n, ggml_fp16_t * restrict y, const ggml_fp16_t * restrict x, const float v) {
+#if defined(GGML_SIMD)
+    const int np = (n & ~(GGML_F16_STEP - 1));
+
+    GGML_F16_VEC vx = GGML_F16_VEC_SET1(v);
+
+    GGML_F16_VEC ax[GGML_F16_ARR];
+    GGML_F16_VEC ay[GGML_F16_ARR];
+
+    for (int i = 0; i < np; i += GGML_F16_STEP) {
+        for (int j = 0; j < GGML_F16_ARR; j++) {
+            ax[j] = GGML_F16_VEC_LOAD(x + i + j*GGML_F16_EPR, j);
+            ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j);
+            ay[j] = GGML_F16_VEC_FMA(ay[j], ax[j], vx);
+
+            GGML_F16_VEC_STORE(y + i + j*GGML_F16_EPR, ay, j);
+        }
+    }
+
+    // leftovers
+    for (int i = np; i < n; ++i) {
+        y[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(y[i]) + GGML_FP16_TO_FP32(x[i])*v);
+    }
+#else
+    // scalar
+    for (int i = 0; i < n; ++i) {
+        y[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(y[i]) + GGML_FP16_TO_FP32(x[i])*v);
+    }
+#endif
+}
+
+// xs and vs are byte strides of x and v
+inline static void ggml_vec_mad_f32_unroll(const int n, const int xs, const int vs, float * restrict y, const float * restrict xv, const float * restrict vv) {
+
+    const float * restrict x[GGML_VEC_MAD_UNROLL];
+    const float * restrict v[GGML_VEC_MAD_UNROLL];
+
+    for (int i = 0; i < GGML_VEC_MAD_UNROLL; ++i) {
+        x[i] = (const float *) ((const char *) xv + i*xs);
+        v[i] = (const float *) ((const char *) vv + i*vs);
+    }
+
+#if defined(GGML_SIMD)
+    const int np = (n & ~(GGML_F32_STEP - 1));
+
+    GGML_F32_VEC vx[GGML_VEC_MAD_UNROLL];
+
+    for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) {
+        vx[k] = GGML_F32_VEC_SET1(v[k][0]);
+    }
+
+    GGML_F32_VEC ax[GGML_VEC_MAD_UNROLL][GGML_F32_ARR];
+    GGML_F32_VEC ay[GGML_F32_ARR];
+
+    for (int i = 0; i < np; i += GGML_F32_STEP) {
+        for (int j = 0; j < GGML_F32_ARR; j++) {
+            ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR);
+
+            for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) {
+                ax[k][j] = GGML_F32_VEC_LOAD(x[k] + i + j*GGML_F32_EPR);
+                ay[j] = GGML_F32_VEC_FMA(ay[j], ax[k][j], vx[k]);
+            }
+
+            GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]);
+        }
+    }
+
+    // leftovers
+    for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) {
+        for (int i = np; i < n; ++i) {
+            y[i] += x[k][i]*v[k][0];
+        }
+    }
+#else
+    // scalar
+    for (int k = 0; k < GGML_VEC_MAD_UNROLL; ++k) {
+        for (int i = 0; i < n; ++i) {
+            y[i] += x[k][i]*v[k][0];
+        }
+    }
+#endif
+}
+
+//inline static void ggml_vec_scale_f32(const int n, float * y, const float   v) { for (int i = 0; i < n; ++i) y[i] *= v;          }
+inline static void ggml_vec_scale_f32(const int n, float * y, const float   v) {
+#if defined(GGML_USE_ACCELERATE)
+    vDSP_vsmul(y, 1, &v, y, 1, n);
+#elif defined(GGML_SIMD)
+    const int np = (n & ~(GGML_F32_STEP - 1));
+
+    GGML_F32_VEC vx = GGML_F32_VEC_SET1(v);
+
+    GGML_F32_VEC ay[GGML_F32_ARR];
+
+    for (int i = 0; i < np; i += GGML_F32_STEP) {
+        for (int j = 0; j < GGML_F32_ARR; j++) {
+            ay[j] = GGML_F32_VEC_LOAD(y + i + j*GGML_F32_EPR);
+            ay[j] = GGML_F32_VEC_MUL(ay[j], vx);
+
+            GGML_F32_VEC_STORE(y + i + j*GGML_F32_EPR, ay[j]);
+        }
+    }
+
+    // leftovers
+    for (int i = np; i < n; ++i) {
+        y[i] *= v;
+    }
+#else
+    // scalar
+    for (int i = 0; i < n; ++i) {
+        y[i] *= v;
+    }
+#endif
+}
+
+inline static void ggml_vec_scale_f16(const int n, ggml_fp16_t * y, const float v) {
+#if defined(GGML_SIMD)
+    const int np = (n & ~(GGML_F16_STEP - 1));
+
+    GGML_F16_VEC vx = GGML_F16_VEC_SET1(v);
+
+    GGML_F16_VEC ay[GGML_F16_ARR];
+
+    for (int i = 0; i < np; i += GGML_F16_STEP) {
+        for (int j = 0; j < GGML_F16_ARR; j++) {
+            ay[j] = GGML_F16_VEC_LOAD(y + i + j*GGML_F16_EPR, j);
+            ay[j] = GGML_F16_VEC_MUL(ay[j], vx);
+
+            GGML_F16_VEC_STORE(y + i + j*GGML_F16_EPR, ay, j);
+        }
+    }
+
+    // leftovers
+    for (int i = np; i < n; ++i) {
+        y[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(y[i])*v);
+    }
+#else
+    // scalar
+    for (int i = 0; i < n; ++i) {
+        y[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(y[i])*v);
+    }
+#endif
+}
+
+inline static void ggml_vec_norm_f32 (const int n, float * s, const float * x) { ggml_vec_dot_f32(n, s, 0, x, 0, x, 0, 1); *s = sqrtf(*s);   }
+inline static void ggml_vec_sqr_f32  (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i]*x[i];   }
+inline static void ggml_vec_sqrt_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = sqrtf(x[i]); }
+inline static void ggml_vec_log_f32  (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = logf(x[i]);   }
+inline static void ggml_vec_abs_f32  (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = fabsf(x[i]); }
+inline static void ggml_vec_sgn_f32  (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? 1.f : ((x[i] < 0.f) ? -1.f : 0.f); }
+inline static void ggml_vec_step_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? 1.f : 0.f; }
+inline static void ggml_vec_tanh_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = tanhf(x[i]);  }
+inline static void ggml_vec_elu_f32  (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? x[i] : expf(x[i])-1; }
+inline static void ggml_vec_relu_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = (x[i] > 0.f) ? x[i] : 0.f; }
+inline static void ggml_vec_leaky_relu_f32 (const int n, float * y, const float * x, const float ns) { for (int i = 0; i < n; ++i) y[i] = ((x[i] > 0.f) ? x[i] : 0.f) + ns * ((x[i] < 0.0f) ? x[i] : 0.f); }
+inline static void ggml_vec_sigmoid_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = 1.f / (1.f + expf(-x[i])); }
+// TODO: optimize performance
+inline static void ggml_vec_hardswish_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = x[i] * fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f)); }
+inline static void ggml_vec_hardsigmoid_f32 (const int n, float * y, const float * x) { for (int i = 0; i < n; ++i) y[i] = fminf(1.0f, fmaxf(0.0f, (x[i] + 3.0f) / 6.0f)); }
+
+static const float GELU_COEF_A     = 0.044715f;
+static const float GELU_QUICK_COEF = -1.702f;
+static const float SQRT_2_OVER_PI  = 0.79788456080286535587989211986876f;
+
+inline static float ggml_gelu_f32(float x) {
+    return 0.5f*x*(1.0f + tanhf(SQRT_2_OVER_PI*x*(1.0f + GELU_COEF_A*x*x)));
+}
+
+inline static void ggml_vec_gelu_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) {
+    const uint16_t * i16 = (const uint16_t *) x;
+    for (int i = 0; i < n; ++i) {
+        y[i] = ggml_table_gelu_f16[i16[i]];
+    }
+}
+
+#ifdef GGML_GELU_FP16
+inline static void ggml_vec_gelu_f32(const int n, float * y, const float * x) {
+    uint16_t t;
+    for (int i = 0; i < n; ++i) {
+        if (x[i] <= -10.0f) {
+            y[i] = 0.0f;
+        } else if (x[i] >= 10.0f) {
+            y[i] = x[i];
+        } else {
+            ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]);
+            memcpy(&t, &fp16, sizeof(uint16_t));
+            y[i] = GGML_FP16_TO_FP32(ggml_table_gelu_f16[t]);
+        }
+    }
+}
+#else
+inline static void ggml_vec_gelu_f32(const int n, float * y, const float * x) {
+    for (int i = 0; i < n; ++i) {
+        y[i] = ggml_gelu_f32(x[i]);
+    }
+}
+#endif
+
+inline static float ggml_gelu_quick_f32(float x) {
+    return x*(1.0f/(1.0f+expf(GELU_QUICK_COEF*x)));
+}
+
+//inline static void ggml_vec_gelu_quick_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) {
+//    const uint16_t * i16 = (const uint16_t *) x;
+//    for (int i = 0; i < n; ++i) {
+//        y[i] = ggml_table_gelu_quick_f16[i16[i]];
+//    }
+//}
+
+#ifdef GGML_GELU_QUICK_FP16
+inline static void ggml_vec_gelu_quick_f32(const int n, float * y, const float * x) {
+    uint16_t t;
+    for (int i = 0; i < n; ++i) {
+        ggml_fp16_t fp16 = GGML_FP32_TO_FP16(x[i]);
+        memcpy(&t, &fp16, sizeof(uint16_t));
+        y[i] = GGML_FP16_TO_FP32(ggml_table_gelu_quick_f16[t]);
+    }
+}
+#else
+inline static void ggml_vec_gelu_quick_f32(const int n, float * y, const float * x) {
+    for (int i = 0; i < n; ++i) {
+        y[i] = ggml_gelu_quick_f32(x[i]);
+    }
+}
+#endif
+
+// Sigmoid Linear Unit (SiLU) function
+inline static float ggml_silu_f32(float x) {
+    return x/(1.0f + expf(-x));
+}
+
+#if __FINITE_MATH_ONLY__
+#error "some routines in ggml.c require non-finite math arithmetics -- pass -fno-finite-math-only to the compiler to fix"
+#error "ref: https://github.com/ggerganov/llama.cpp/pull/7154#issuecomment-2143844461"
+#endif
+
+#if defined(__ARM_NEON) && defined(__aarch64__)
+
+// adapted from arm limited optimized routine
+// the maximum error is 1.45358 plus 0.5 ulps
+// numbers above 88.38 will flush to infinity
+// numbers beneath -103.97 will flush to zero
+inline static float32x4_t ggml_v_expf(float32x4_t x) {
+    const float32x4_t r = vdupq_n_f32(0x1.8p23f);
+    const float32x4_t z = vfmaq_f32(r, x, vdupq_n_f32(0x1.715476p+0f));
+    const float32x4_t n = vsubq_f32(z, r);
+    const float32x4_t b = vfmsq_f32(vfmsq_f32(x, n, vdupq_n_f32(0x1.62e4p-1f)), n,
+                                    vdupq_n_f32(0x1.7f7d1cp-20f));
+    const uint32x4_t e = vshlq_n_u32(vreinterpretq_u32_f32(z), 23);
+    const float32x4_t k = vreinterpretq_f32_u32(vaddq_u32(e, vreinterpretq_u32_f32(vdupq_n_f32(1))));
+    const uint32x4_t c = vcagtq_f32(n, vdupq_n_f32(126));
+    const float32x4_t u = vmulq_f32(b, b);
+    const float32x4_t j = vfmaq_f32(
+        vmulq_f32(vdupq_n_f32(0x1.ffffecp-1f), b),
+        vfmaq_f32(vfmaq_f32(vdupq_n_f32(0x1.fffdb6p-2f), vdupq_n_f32(0x1.555e66p-3f), b),
+                  vfmaq_f32(vdupq_n_f32(0x1.573e2ep-5f), vdupq_n_f32(0x1.0e4020p-7f), b), u), u);
+    if (!vpaddd_u64(vreinterpretq_u64_u32(c)))
+        return vfmaq_f32(k, j, k);
+    const uint32x4_t d = vandq_u32(vclezq_f32(n), vdupq_n_u32(0x82000000));
+    const float32x4_t s1 = vreinterpretq_f32_u32(vaddq_u32(d, vdupq_n_u32(0x7f000000)));
+    const float32x4_t s2 = vreinterpretq_f32_u32(vsubq_u32(e, d));
+    return vbslq_f32(vcagtq_f32(n, vdupq_n_f32(192)), vmulq_f32(s1, s1),
+                     vbslq_f32(c, vmulq_f32(vfmaq_f32(s2, s2, j), s1), vfmaq_f32(k, k, j)));
+}
+
+// computes silu x/(1+exp(-x)) in single precision vector
+inline static float32x4_t ggml_v_silu(float32x4_t x) {
+    const float32x4_t one = vdupq_n_f32(1.0f);
+    const float32x4_t zero = vdupq_n_f32(0.0f);
+    const float32x4_t neg_x = vsubq_f32(zero, x);
+    const float32x4_t exp_neg_x = ggml_v_expf(neg_x);
+    const float32x4_t one_plus_exp_neg_x = vaddq_f32(one, exp_neg_x);
+    return vdivq_f32(x, one_plus_exp_neg_x);
+}
+
+#elif defined(__AVX512F__) && defined(__AVX512DQ__)
+
+// adapted from arm limited optimized routine
+// the maximum error is 1.45358 plus 0.5 ulps
+// numbers above 88.38 will flush to infinity
+// numbers beneath -103.97 will flush to zero
+inline static __m512 ggml_v_expf(__m512 x) {
+  const __m512 r = _mm512_set1_ps(0x1.8p23f);
+  const __m512 z = _mm512_fmadd_ps(x, _mm512_set1_ps(0x1.715476p+0f), r);
+  const __m512 n = _mm512_sub_ps(z, r);
+  const __m512 b =
+      _mm512_fnmadd_ps(n, _mm512_set1_ps(0x1.7f7d1cp-20f),
+                       _mm512_fnmadd_ps(n, _mm512_set1_ps(0x1.62e4p-1f), x));
+  const __mmask16 d =
+      _mm512_cmp_ps_mask(_mm512_abs_ps(n), _mm512_set1_ps(192), _CMP_GT_OQ);
+  const __m512 u = _mm512_mul_ps(b, b);
+  const __m512 j = _mm512_fmadd_ps(
+      _mm512_fmadd_ps(_mm512_fmadd_ps(_mm512_set1_ps(0x1.0e4020p-7f), b,
+                                      _mm512_set1_ps(0x1.573e2ep-5f)),
+                      u,
+                      _mm512_fmadd_ps(_mm512_set1_ps(0x1.555e66p-3f), b,
+                                      _mm512_set1_ps(0x1.fffdb6p-2f))),
+      u,
+      _mm512_fmadd_ps(_mm512_set1_ps(0x1.ffffecp-1f), b, _mm512_set1_ps(1.0F)));
+  const __m512 res = _mm512_scalef_ps(j, n);
+  if (_mm512_kortestz(d, d))
+    return res;
+  const __m512 zero = _mm512_setzero_ps();
+  const __m512 alt = _mm512_mask_blend_ps(
+      _mm512_cmp_ps_mask(n, zero, _CMP_LE_OQ), _mm512_set1_ps(INFINITY), zero);
+  return _mm512_mask_blend_ps(d, res, alt);
+}
+
+// computes silu x/(1+exp(-x)) in single precision vector
+inline static __m512 ggml_v_silu(__m512 x) {
+    const __m512 one = _mm512_set1_ps(1);
+    const __m512 zero = _mm512_setzero_ps();
+    const __m512 neg_x = _mm512_sub_ps(zero, x);
+    const __m512 exp_neg_x = ggml_v_expf(neg_x);
+    const __m512 one_plus_exp_neg_x = _mm512_add_ps(one, exp_neg_x);
+    return _mm512_div_ps(x, one_plus_exp_neg_x);
+}
+
+#elif defined(__AVX2__) && defined(__FMA__)
+
+// adapted from arm limited optimized routine
+// the maximum error is 1.45358 plus 0.5 ulps
+// numbers above 88.38 will flush to infinity
+// numbers beneath -103.97 will flush to zero
+inline static __m256 ggml_v_expf(__m256 x) {
+  const __m256 r = _mm256_set1_ps(0x1.8p23f);
+  const __m256 z = _mm256_fmadd_ps(x, _mm256_set1_ps(0x1.715476p+0f), r);
+  const __m256 n = _mm256_sub_ps(z, r);
+  const __m256 b = _mm256_fnmadd_ps(n, _mm256_set1_ps(0x1.7f7d1cp-20f),
+                                    _mm256_fnmadd_ps(n, _mm256_set1_ps(0x1.62e4p-1f), x));
+  const __m256i e = _mm256_slli_epi32(_mm256_castps_si256(z), 23);
+  const __m256 k = _mm256_castsi256_ps(
+      _mm256_add_epi32(e, _mm256_castps_si256(_mm256_set1_ps(1))));
+  const __m256i c = _mm256_castps_si256(
+      _mm256_cmp_ps(_mm256_andnot_ps(_mm256_set1_ps(-0.f), n),
+                    _mm256_set1_ps(126), _CMP_GT_OQ));
+  const __m256 u = _mm256_mul_ps(b, b);
+  const __m256 j = _mm256_fmadd_ps(_mm256_fmadd_ps(_mm256_fmadd_ps(_mm256_set1_ps(0x1.0e4020p-7f), b,
+                                                                   _mm256_set1_ps(0x1.573e2ep-5f)), u,
+                                                   _mm256_fmadd_ps(_mm256_set1_ps(0x1.555e66p-3f), b,
+                                                                   _mm256_set1_ps(0x1.fffdb6p-2f))),
+                                   u, _mm256_mul_ps(_mm256_set1_ps(0x1.ffffecp-1f), b));
+  if (!_mm256_movemask_ps(_mm256_castsi256_ps(c)))
+    return _mm256_fmadd_ps(j, k, k);
+  const __m256i g = _mm256_and_si256(
+      _mm256_castps_si256(_mm256_cmp_ps(n, _mm256_setzero_ps(), _CMP_LE_OQ)),
+      _mm256_set1_epi32(0x82000000u));
+  const __m256 s1 =
+      _mm256_castsi256_ps(_mm256_add_epi32(g, _mm256_set1_epi32(0x7f000000u)));
+  const __m256 s2 = _mm256_castsi256_ps(_mm256_sub_epi32(e, g));
+  const __m256i d = _mm256_castps_si256(
+      _mm256_cmp_ps(_mm256_andnot_ps(_mm256_set1_ps(-0.f), n),
+                    _mm256_set1_ps(192), _CMP_GT_OQ));
+  return _mm256_or_ps(
+      _mm256_and_ps(_mm256_castsi256_ps(d), _mm256_mul_ps(s1, s1)),
+      _mm256_andnot_ps(
+          _mm256_castsi256_ps(d),
+          _mm256_or_ps(
+              _mm256_and_ps(_mm256_castsi256_ps(c),
+                            _mm256_mul_ps(_mm256_fmadd_ps(s2, j, s2), s1)),
+              _mm256_andnot_ps(_mm256_castsi256_ps(c), _mm256_fmadd_ps(k, j, k)))));
+}
+
+// computes silu x/(1+exp(-x)) in single precision vector
+inline static __m256 ggml_v_silu(__m256 x) {
+    const __m256 one = _mm256_set1_ps(1);
+    const __m256 zero = _mm256_setzero_ps();
+    const __m256 neg_x = _mm256_sub_ps(zero, x);
+    const __m256 exp_neg_x = ggml_v_expf(neg_x);
+    const __m256 one_plus_exp_neg_x = _mm256_add_ps(one, exp_neg_x);
+    return _mm256_div_ps(x, one_plus_exp_neg_x);
+}
+
+#elif defined(__SSE2__) // __AVX2__ / __ARM_NEON
+
+#if defined(__FMA__)
+#define MADD128(x, y, z) _mm_fmadd_ps(x, y, z)
+#define NMADD128(x, y, z) _mm_fnmadd_ps(x, y, z)
+#else
+#define MADD128(x, y, z) _mm_add_ps(_mm_mul_ps(x, y), z)
+#define NMADD128(x, y, z) _mm_sub_ps(z, _mm_mul_ps(x, y))
+#endif
+
+// adapted from arm limited optimized routine
+// the maximum error is 1.45358 plus 0.5 ulps
+// numbers above 88.38 will flush to infinity
+// numbers beneath -103.97 will flush to zero
+inline static __m128 ggml_v_expf(__m128 x) {
+    const __m128 r = _mm_set1_ps(0x1.8p23f);
+    const __m128 z = MADD128(x, _mm_set1_ps(0x1.715476p+0f), r);
+    const __m128 n = _mm_sub_ps(z, r);
+    const __m128 b =
+        NMADD128(n, _mm_set1_ps(0x1.7f7d1cp-20f), NMADD128(n, _mm_set1_ps(0x1.62e4p-1f), x));
+    const __m128i e = _mm_slli_epi32(_mm_castps_si128(z), 23);
+    const __m128 k = _mm_castsi128_ps(_mm_add_epi32(e, _mm_castps_si128(_mm_set1_ps(1))));
+    const __m128i c =
+        _mm_castps_si128(_mm_cmpgt_ps(_mm_andnot_ps(_mm_set1_ps(-0.f), n), _mm_set1_ps(126)));
+    const __m128 u = _mm_mul_ps(b, b);
+    const __m128 j =
+        MADD128(MADD128(MADD128(_mm_set1_ps(0x1.0e4020p-7f), b, _mm_set1_ps(0x1.573e2ep-5f)), u,
+                        MADD128(_mm_set1_ps(0x1.555e66p-3f), b, _mm_set1_ps(0x1.fffdb6p-2f))),
+                u, _mm_mul_ps(_mm_set1_ps(0x1.ffffecp-1f), b));
+    if (!_mm_movemask_epi8(c))
+        return MADD128(j, k, k);
+    const __m128i g = _mm_and_si128(_mm_castps_si128(_mm_cmple_ps(n, _mm_setzero_ps())),
+                                    _mm_set1_epi32(0x82000000u));
+    const __m128 s1 = _mm_castsi128_ps(_mm_add_epi32(g, _mm_set1_epi32(0x7f000000u)));
+    const __m128 s2 = _mm_castsi128_ps(_mm_sub_epi32(e, g));
+    const __m128i d =
+        _mm_castps_si128(_mm_cmpgt_ps(_mm_andnot_ps(_mm_set1_ps(-0.f), n), _mm_set1_ps(192)));
+    return _mm_or_ps(
+        _mm_and_ps(_mm_castsi128_ps(d), _mm_mul_ps(s1, s1)),
+        _mm_andnot_ps(_mm_castsi128_ps(d),
+                      _mm_or_ps(_mm_and_ps(_mm_castsi128_ps(c), _mm_mul_ps(MADD128(s2, j, s2), s1)),
+                                _mm_andnot_ps(_mm_castsi128_ps(c), MADD128(k, j, k)))));
+}
+
+// computes silu x/(1+exp(-x)) in single precision vector
+inline static __m128 ggml_v_silu(__m128 x) {
+    const __m128 one = _mm_set1_ps(1);
+    const __m128 zero = _mm_setzero_ps();
+    const __m128 neg_x = _mm_sub_ps(zero, x);
+    const __m128 exp_neg_x = ggml_v_expf(neg_x);
+    const __m128 one_plus_exp_neg_x = _mm_add_ps(one, exp_neg_x);
+    return _mm_div_ps(x, one_plus_exp_neg_x);
+}
+
+#endif // __ARM_NEON / __AVX2__ / __SSE2__
+
+static void ggml_vec_silu_f32(const int n, float * y, const float * x) {
+    int i = 0;
+#if defined(__AVX512F__) && defined(__AVX512DQ__)
+    for (; i + 15 < n; i += 16) {
+        _mm512_storeu_ps(y + i, ggml_v_silu(_mm512_loadu_ps(x + i)));
+    }
+#elif defined(__AVX2__) && defined(__FMA__)
+    for (; i + 7 < n; i += 8) {
+        _mm256_storeu_ps(y + i, ggml_v_silu(_mm256_loadu_ps(x + i)));
+    }
+#elif defined(__SSE2__)
+    for (; i + 3 < n; i += 4) {
+        _mm_storeu_ps(y + i, ggml_v_silu(_mm_loadu_ps(x + i)));
+    }
+#elif defined(__ARM_NEON) && defined(__aarch64__)
+    for (; i + 3 < n; i += 4) {
+        vst1q_f32(y + i, ggml_v_silu(vld1q_f32(x + i)));
+    }
+#endif
+    for (; i < n; ++i) {
+        y[i] = ggml_silu_f32(x[i]);
+    }
+}
+
+static ggml_float ggml_vec_soft_max_f32(const int n, float * y, const float * x, float max) {
+    int i = 0;
+    ggml_float sum = 0;
+#if defined(__AVX512F__) && defined(__AVX512DQ__)
+    for (; i + 15 < n; i += 16) {
+        __m512 val = ggml_v_expf(_mm512_sub_ps(_mm512_loadu_ps(x + i),
+                                               _mm512_set1_ps(max)));
+        _mm512_storeu_ps(y + i, val);
+        sum += (ggml_float)_mm512_reduce_add_ps(val);
+    }
+#elif defined(__AVX2__) && defined(__FMA__)
+    for (; i + 7 < n; i += 8) {
+        __m256 val = ggml_v_expf(_mm256_sub_ps(_mm256_loadu_ps(x + i),
+                                               _mm256_set1_ps(max)));
+        _mm256_storeu_ps(y + i, val);
+        __m128 val2 = _mm_add_ps(_mm256_extractf128_ps(val, 1),
+                                 _mm256_castps256_ps128(val));
+        val2 = _mm_add_ps(val2, _mm_movehl_ps(val2, val2));
+        val2 = _mm_add_ss(val2, _mm_movehdup_ps(val2));
+        sum += (ggml_float)_mm_cvtss_f32(val2);
+    }
+#elif defined(__SSE2__)
+    for (; i + 3 < n; i += 4) {
+        __m128 val = ggml_v_expf(_mm_sub_ps(_mm_loadu_ps(x + i),
+                                            _mm_set1_ps(max)));
+        _mm_storeu_ps(y + i, val);
+#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
+        val = _mm_add_ps(val, _mm_movehl_ps(val, val));
+        val = _mm_add_ss(val, _mm_movehdup_ps(val));
+#else
+        __m128 tmp = _mm_shuffle_ps(val, val, _MM_SHUFFLE(2, 3, 0, 1));
+        val = _mm_add_ps(val, tmp);
+        tmp = _mm_movehl_ps(tmp, val);
+        val = _mm_add_ss(val, tmp);
+#endif
+        sum += (ggml_float)_mm_cvtss_f32(val);
+    }
+#elif defined(__ARM_NEON) && defined(__aarch64__)
+    for (; i + 3 < n; i += 4) {
+        float32x4_t val = ggml_v_expf(vsubq_f32(vld1q_f32(x + i),
+                                                vdupq_n_f32(max)));
+        vst1q_f32(y + i, val);
+        sum += (ggml_float)vaddvq_f32(val);
+    }
+#endif
+    for (; i < n; ++i) {
+        float val = expf(x[i] - max);
+        sum += (ggml_float)val;
+        y[i] = val;
+    }
+    return sum;
+}
+
+inline static float ggml_silu_backward_f32(float x, float dy) {
+    const float s = 1.0f/(1.0f + expf(-x));
+    return dy*s*(1.0f + x*(1.0f - s));
+}
+
+inline static void ggml_vec_silu_backward_f32(const int n, float * dx, const float * x, const float * dy) {
+    for (int i = 0; i < n; ++i) {
+        dx[i] = ggml_silu_backward_f32(x[i], dy[i]);
+    }
+}
+
+inline static void ggml_vec_sum_f32(const int n, float * s, const float * x) {
+#ifndef GGML_USE_ACCELERATE
+    ggml_float sum = 0.0;
+    for (int i = 0; i < n; ++i) {
+        sum += (ggml_float)x[i];
+    }
+    *s = sum;
+#else
+    vDSP_sve(x, 1, s, n);
+#endif
+}
+
+inline static void ggml_vec_sum_f32_ggf(const int n, ggml_float * s, const float * x) {
+    ggml_float sum = 0.0;
+    for (int i = 0; i < n; ++i) {
+        sum += (ggml_float)x[i];
+    }
+    *s = sum;
+}
+
+inline static void ggml_vec_sum_f16_ggf(const int n, float * s, const ggml_fp16_t * x) {
+    float sum = 0.0f;
+    for (int i = 0; i < n; ++i) {
+        sum += GGML_FP16_TO_FP32(x[i]);
+    }
+    *s = sum;
+}
+
+inline static void ggml_vec_sum_bf16_ggf(const int n, float * s, const ggml_bf16_t * x) {
+    float sum = 0.0f;
+    for (int i = 0; i < n; ++i) {
+        sum += GGML_BF16_TO_FP32(x[i]);
+    }
+    *s = sum;
+}
+
+inline static void ggml_vec_max_f32(const int n, float * s, const float * x) {
+#ifndef GGML_USE_ACCELERATE
+    float max = -INFINITY;
+    for (int i = 0; i < n; ++i) {
+        max = MAX(max, x[i]);
+    }
+    *s = max;
+#else
+    vDSP_maxv(x, 1, s, n);
+#endif
+}
+
+inline static void ggml_vec_norm_inv_f32(const int n, float * s, const float * x) {
+    ggml_vec_norm_f32(n, s, x);
+    *s = 1.f/(*s);
+}
+
+inline static void ggml_vec_argmax_f32(const int n, int * s, const float * x) {
+    float max = -INFINITY;
+    int idx = 0;
+    for (int i = 0; i < n; ++i) {
+        max = MAX(max, x[i]);
+        if (max == x[i]) { idx = i; }
+    }
+    *s = idx;
+}
+
+//
+// data types
+//
+
+static const char * GGML_OP_NAME[GGML_OP_COUNT] = {
+    "NONE",
+
+    "DUP",
+    "ADD",
+    "ADD1",
+    "ACC",
+    "SUB",
+    "MUL",
+    "DIV",
+    "SQR",
+    "SQRT",
+    "LOG",
+    "SUM",
+    "SUM_ROWS",
+    "MEAN",
+    "ARGMAX",
+    "REPEAT",
+    "REPEAT_BACK",
+    "CONCAT",
+    "SILU_BACK",
+    "NORM",
+    "RMS_NORM",
+    "RMS_NORM_BACK",
+    "GROUP_NORM",
+
+    "MUL_MAT",
+    "MUL_MAT_ID",
+    "OUT_PROD",
+
+    "SCALE",
+    "SET",
+    "CPY",
+    "CONT",
+    "RESHAPE",
+    "VIEW",
+    "PERMUTE",
+    "TRANSPOSE",
+    "GET_ROWS",
+    "GET_ROWS_BACK",
+    "DIAG",
+    "DIAG_MASK_INF",
+    "DIAG_MASK_ZERO",
+    "SOFT_MAX",
+    "SOFT_MAX_BACK",
+    "ROPE",
+    "ROPE_BACK",
+    "CLAMP",
+    "CONV_TRANSPOSE_1D",
+    "IM2COL",
+    "CONV_TRANSPOSE_2D",
+    "POOL_1D",
+    "POOL_2D",
+    "UPSCALE",
+    "PAD",
+    "ARANGE",
+    "TIMESTEP_EMBEDDING",
+    "ARGSORT",
+    "LEAKY_RELU",
+
+    "FLASH_ATTN_EXT",
+    "FLASH_ATTN_BACK",
+    "SSM_CONV",
+    "SSM_SCAN",
+    "WIN_PART",
+    "WIN_UNPART",
+    "GET_REL_POS",
+    "ADD_REL_POS",
+
+    "UNARY",
+
+    "MAP_UNARY",
+    "MAP_BINARY",
+
+    "MAP_CUSTOM1_F32",
+    "MAP_CUSTOM2_F32",
+    "MAP_CUSTOM3_F32",
+
+    "MAP_CUSTOM1",
+    "MAP_CUSTOM2",
+    "MAP_CUSTOM3",
+
+    "CROSS_ENTROPY_LOSS",
+    "CROSS_ENTROPY_LOSS_BACK",
+};
+
+static_assert(GGML_OP_COUNT == 74, "GGML_OP_COUNT != 74");
+
+static const char * GGML_OP_SYMBOL[GGML_OP_COUNT] = {
+    "none",
+
+    "x",
+    "x+y",
+    "x+y",
+    "view(x,nb,offset)+=y->x",
+    "x-y",
+    "x*y",
+    "x/y",
+    "x^2",
+    "√x",
+    "log(x)",
+    "Σx",
+    "Σx_k",
+    "Σx/n",
+    "argmax(x)",
+    "repeat(x)",
+    "repeat_back(x)",
+    "concat(x, y)",
+    "silu_back(x)",
+    "norm(x)",
+    "rms_norm(x)",
+    "rms_norm_back(x)",
+    "group_norm(x)",
+
+    "X*Y",
+    "X[i]*Y",
+    "X*Y",
+
+    "x*v",
+    "y-\\>view(x)",
+    "x-\\>y",
+    "cont(x)",
+    "reshape(x)",
+    "view(x)",
+    "permute(x)",
+    "transpose(x)",
+    "get_rows(x)",
+    "get_rows_back(x)",
+    "diag(x)",
+    "diag_mask_inf(x)",
+    "diag_mask_zero(x)",
+    "soft_max(x)",
+    "soft_max_back(x)",
+    "rope(x)",
+    "rope_back(x)",
+    "clamp(x)",
+    "conv_transpose_1d(x)",
+    "im2col(x)",
+    "conv_transpose_2d(x)",
+    "pool_1d(x)",
+    "pool_2d(x)",
+    "upscale(x)",
+    "pad(x)",
+    "arange(start, stop, step)",
+    "timestep_embedding(timesteps, dim, max_period)",
+    "argsort(x)",
+    "leaky_relu(x)",
+
+    "flash_attn_ext(x)",
+    "flash_attn_back(x)",
+    "ssm_conv(x)",
+    "ssm_scan(x)",
+    "win_part(x)",
+    "win_unpart(x)",
+    "get_rel_pos(x)",
+    "add_rel_pos(x)",
+
+    "unary(x)",
+
+    "f(x)",
+    "f(x,y)",
+
+    "custom_f32(x)",
+    "custom_f32(x,y)",
+    "custom_f32(x,y,z)",
+
+    "custom(x)",
+    "custom(x,y)",
+    "custom(x,y,z)",
+
+    "cross_entropy_loss(x,y)",
+    "cross_entropy_loss_back(x,y)",
+};
+
+static_assert(GGML_OP_COUNT == 74, "GGML_OP_COUNT != 74");
+
+static_assert(GGML_OP_POOL_COUNT == 2, "GGML_OP_POOL_COUNT != 2");
+
+
+static const char * GGML_UNARY_OP_NAME[GGML_UNARY_OP_COUNT] = {
+    "ABS",
+    "SGN",
+    "NEG",
+    "STEP",
+    "TANH",
+    "ELU",
+    "RELU",
+    "SIGMOID",
+    "GELU",
+    "GELU_QUICK",
+    "SILU",
+    "HARDSWISH",
+    "HARDSIGMOID",
+};
+
+static_assert(GGML_UNARY_OP_COUNT == 13, "GGML_UNARY_OP_COUNT != 13");
+
+
+static_assert(sizeof(struct ggml_object)%GGML_MEM_ALIGN == 0, "ggml_object size must be a multiple of GGML_MEM_ALIGN");
+static_assert(sizeof(struct ggml_tensor)%GGML_MEM_ALIGN == 0, "ggml_tensor size must be a multiple of GGML_MEM_ALIGN");
+
+//
+// NUMA support
+//
+
+#define GGML_NUMA_MAX_NODES 8
+#define GGML_NUMA_MAX_CPUS 512
+
+struct ggml_numa_node {
+    uint32_t cpus[GGML_NUMA_MAX_CPUS]; // hardware threads on this node
+    uint32_t n_cpus;
+};
+
+struct ggml_numa_nodes {
+    enum ggml_numa_strategy numa_strategy;
+    struct ggml_numa_node nodes[GGML_NUMA_MAX_NODES];
+    uint32_t n_nodes;
+    uint32_t total_cpus; // hardware threads on system
+    uint32_t current_node; // node on which main process is execting
+#if defined(__gnu_linux__)
+    cpu_set_t cpuset; // cpuset from numactl
+#else
+    uint32_t cpuset; // no NUMA support outside of Linux at this time. Use a portable datatype
+#endif
+};
+
+//
+// ggml state
+//
+
+struct ggml_state {
+    struct ggml_context_container contexts[GGML_MAX_CONTEXTS];
+    struct ggml_numa_nodes numa;
+};
+
+// global state
+static struct ggml_state g_state;
+static atomic_flag g_state_critical = ATOMIC_FLAG_INIT;
+
+// critical section via spin lock
+inline static void ggml_critical_section_start(void) {
+    while (atomic_flag_test_and_set(&g_state_critical)) {
+        // spin
+        sched_yield();
+    }
+}
+
+#ifdef GGML_USE_OPENMP
+static void ggml_barrier(struct ggml_compute_state_shared * shared) {
+    if (shared->n_threads == 1) {
+        return;
+    }
+
+    #pragma omp barrier
+}
+#else
+static void ggml_barrier(struct ggml_compute_state_shared * shared) {
+    if (shared->n_threads == 1) {
+        return;
+    }
+
+    atomic_int * n_barrier = &shared->n_barrier;
+    atomic_int * n_barrier_passed = &shared->n_barrier_passed;
+
+    int n_threads = shared->n_threads;
+    int passed_old = atomic_load(n_barrier_passed);
+
+    if (atomic_fetch_add(n_barrier, 1) == n_threads - 1) {
+        // last thread
+        atomic_store(n_barrier, 0);
+        atomic_fetch_add(n_barrier_passed, 1);
+    } else {
+        // wait for other threads
+        const int n_spin_before_sleep = 100000;
+        while (true) {
+            for (int i = 0; i < n_spin_before_sleep; i++) {
+                if (atomic_load(n_barrier_passed) != passed_old) {
+                    return;
+                }
+            #if defined(__SSE3__)
+                _mm_pause();
+            #endif
+            }
+            sched_yield();
+        }
+    }
+}
+#endif
+
+// TODO: make this somehow automatically executed
+//       some sort of "sentry" mechanism
+inline static void ggml_critical_section_end(void) {
+    atomic_flag_clear(&g_state_critical);
+}
+
+#if defined(__gnu_linux__)
+static cpu_set_t ggml_get_numa_affinity(void) {
+    cpu_set_t cpuset;
+    pthread_t thread;
+    thread = pthread_self();
+    CPU_ZERO(&cpuset);
+    pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
+    return cpuset;
+}
+#else
+static uint32_t ggml_get_numa_affinity(void) {
+    return 0; // no NUMA support
+}
+#endif
+
+void ggml_numa_init(enum ggml_numa_strategy numa_flag) {
+    if (g_state.numa.n_nodes > 0) {
+        fprintf(stderr, "ggml_numa_init: NUMA already initialized\n");
+
+        return;
+    }
+
+#if defined(__gnu_linux__)
+    struct stat st;
+    char path[256];
+    int rv;
+
+    // set numa scheme
+    g_state.numa.numa_strategy = numa_flag;
+
+    GGML_PRINT_DEBUG("numa strategy %u\n",g_state.numa.numa_strategy);
+
+    g_state.numa.cpuset = ggml_get_numa_affinity();
+
+    // enumerate nodes
+    while (g_state.numa.n_nodes < GGML_NUMA_MAX_NODES) {
+        rv = snprintf(path, sizeof(path), "/sys/devices/system/node/node%u", g_state.numa.n_nodes);
+        GGML_ASSERT(rv > 0 && (unsigned)rv < sizeof(path));
+        if (stat(path, &st) != 0) { break; }
+        ++g_state.numa.n_nodes;
+    }
+
+    // enumerate CPUs
+    while (g_state.numa.total_cpus < GGML_NUMA_MAX_CPUS) {
+        rv = snprintf(path, sizeof(path), "/sys/devices/system/cpu/cpu%u", g_state.numa.total_cpus);
+        GGML_ASSERT(rv > 0 && (unsigned)rv < sizeof(path));
+        if (stat(path, &st) != 0) { break; }
+        ++g_state.numa.total_cpus;
+    }
+
+    GGML_PRINT_DEBUG("found %u numa nodes, %u CPUs\n", g_state.numa.n_nodes, g_state.numa.total_cpus);
+
+    // figure out which node we're on
+    uint current_cpu;
+    int getcpu_ret = 0;
+#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 28) || defined(__COSMOPOLITAN__)
+    getcpu_ret = getcpu(&current_cpu, &g_state.numa.current_node);
+#else
+    // old glibc doesn't have a wrapper for this call. Fall back on direct syscall
+#   if !defined(SYS_getcpu) && defined(SYS_get_cpu)
+#       define SYS_getcpu SYS_get_cpu // some older glibc versions use this name
+#   endif
+    getcpu_ret = syscall(SYS_getcpu, &current_cpu, &g_state.numa.current_node);
+#endif
+
+    if (g_state.numa.n_nodes < 1 || g_state.numa.total_cpus < 1 || getcpu_ret != 0) {
+        g_state.numa.n_nodes = 0;
+        return;
+    }
+
+    GGML_PRINT_DEBUG("found our process on numa node %u, CPU %u\n", g_state.numa.current_node, current_cpu);
+
+    for (uint32_t n = 0; n < g_state.numa.n_nodes; ++n) {
+        struct ggml_numa_node * node = &g_state.numa.nodes[n];
+        GGML_PRINT_DEBUG("CPUs on node %u:", n);
+        node->n_cpus = 0;
+        for (uint32_t c = 0; c < g_state.numa.total_cpus; ++c) {
+            rv = snprintf(path, sizeof(path), "/sys/devices/system/node/node%u/cpu%u", n, c);
+            GGML_ASSERT(rv > 0 && (unsigned)rv < sizeof(path));
+            if (stat(path, &st) == 0) {
+                node->cpus[node->n_cpus++] = c;
+                GGML_PRINT_DEBUG(" %u", c);
+            }
+        }
+        GGML_PRINT_DEBUG("\n");
+    }
+
+    if (ggml_is_numa()) {
+        FILE *fptr = fopen("/proc/sys/kernel/numa_balancing", "r");
+        if (fptr != NULL) {
+            char buf[42];
+            if (fgets(buf, sizeof(buf), fptr) && strncmp(buf, "0\n", sizeof(buf)) != 0) {
+                GGML_PRINT("WARNING: /proc/sys/kernel/numa_balancing is enabled, this has been observed to impair performance\n");
+            }
+            fclose(fptr);
+        }
+    }
+#else
+    UNUSED(numa_flag);
+    // TODO
+#endif
+}
+
+bool ggml_is_numa(void) {
+    return g_state.numa.n_nodes > 1;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+void ggml_print_object(const struct ggml_object * obj) {
+    GGML_PRINT(" - ggml_object: type = %d, offset = %zu, size = %zu, next = %p\n",
+            obj->type, obj->offs, obj->size, (const void *) obj->next);
+}
+
+void ggml_print_objects(const struct ggml_context * ctx) {
+    struct ggml_object * obj = ctx->objects_begin;
+
+    GGML_PRINT("%s: objects in context %p:\n", __func__, (const void *) ctx);
+
+    while (obj != NULL) {
+        ggml_print_object(obj);
+        obj = obj->next;
+    }
+
+    GGML_PRINT("%s: --- end ---\n", __func__);
+}
+
+GGML_CALL int64_t ggml_nelements(const struct ggml_tensor * tensor) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return tensor->ne[0]*tensor->ne[1]*tensor->ne[2]*tensor->ne[3];
+}
+
+GGML_CALL int64_t ggml_nrows(const struct ggml_tensor * tensor) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return tensor->ne[1]*tensor->ne[2]*tensor->ne[3];
+}
+
+GGML_CALL size_t ggml_nbytes(const struct ggml_tensor * tensor) {
+    size_t nbytes;
+    size_t blck_size = ggml_blck_size(tensor->type);
+    if (blck_size == 1) {
+        nbytes = ggml_type_size(tensor->type);
+        for (int i = 0; i < GGML_MAX_DIMS; ++i) {
+            nbytes += (tensor->ne[i] - 1)*tensor->nb[i];
+        }
+    }
+    else {
+        nbytes = tensor->ne[0]*tensor->nb[0]/blck_size;
+        for (int i = 1; i < GGML_MAX_DIMS; ++i) {
+            nbytes += (tensor->ne[i] - 1)*tensor->nb[i];
+        }
+    }
+
+    return nbytes;
+}
+
+size_t ggml_nbytes_pad(const struct ggml_tensor * tensor) {
+    return GGML_PAD(ggml_nbytes(tensor), GGML_MEM_ALIGN);
+}
+
+GGML_CALL int ggml_blck_size(enum ggml_type type) {
+    return type_traits[type].blck_size;
+}
+
+GGML_CALL size_t ggml_type_size(enum ggml_type type) {
+    return type_traits[type].type_size;
+}
+
+GGML_CALL size_t ggml_row_size(enum ggml_type type, int64_t ne) {
+    assert(ne % ggml_blck_size(type) == 0);
+    return ggml_type_size(type)*ne/ggml_blck_size(type);
+}
+
+double ggml_type_sizef(enum ggml_type type) {
+    return ((double)(type_traits[type].type_size))/type_traits[type].blck_size;
+}
+
+GGML_CALL const char * ggml_type_name(enum ggml_type type) {
+    return type_traits[type].type_name;
+}
+
+GGML_CALL bool ggml_is_quantized(enum ggml_type type) {
+    return type_traits[type].is_quantized;
+}
+
+GGML_CALL const char * ggml_op_name(enum ggml_op op) {
+    return GGML_OP_NAME[op];
+}
+
+const char * ggml_op_symbol(enum ggml_op op) {
+    return GGML_OP_SYMBOL[op];
+}
+
+const char * ggml_unary_op_name(enum ggml_unary_op op) {
+    return GGML_UNARY_OP_NAME[op];
+}
+
+GGML_CALL const char * ggml_op_desc(const struct ggml_tensor * t) {
+    if (t->op == GGML_OP_UNARY) {
+        enum ggml_unary_op uop = ggml_get_unary_op(t);
+        return ggml_unary_op_name(uop);
+    }
+    return ggml_op_name(t->op);
+}
+
+GGML_CALL size_t ggml_element_size(const struct ggml_tensor * tensor) {
+    return ggml_type_size(tensor->type);
+}
+
+bool ggml_is_scalar(const struct ggml_tensor * tensor) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return tensor->ne[0] == 1 && tensor->ne[1] == 1 && tensor->ne[2] == 1 && tensor->ne[3] == 1;
+}
+
+bool ggml_is_vector(const struct ggml_tensor * tensor) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return tensor->ne[1] == 1 && tensor->ne[2] == 1 && tensor->ne[3] == 1;
+}
+
+bool ggml_is_matrix(const struct ggml_tensor * tensor) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return tensor->ne[2] == 1 && tensor->ne[3] == 1;
+}
+
+bool ggml_is_3d(const struct ggml_tensor * tensor) {
+    return tensor->ne[3] == 1;
+}
+
+int ggml_n_dims(const struct ggml_tensor * tensor) {
+    for (int i = GGML_MAX_DIMS - 1; i >= 1; --i) {
+        if (tensor->ne[i] > 1) {
+            return i + 1;
+        }
+    }
+    return 1;
+}
+
+static inline bool ggml_can_mul_mat(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return (t0->ne[0]           == t1->ne[0])  &&
+           (t1->ne[2]%t0->ne[2] == 0)          && // verify t0 is broadcastable
+           (t1->ne[3]%t0->ne[3] == 0);
+}
+
+static inline bool ggml_can_out_prod(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return (t0->ne[1] == t1->ne[1])   &&
+           (t1->ne[2]%t0->ne[2] == 0) && // verify t0 is broadcastable
+           (t1->ne[3]%t0->ne[3] == 0);
+}
+
+enum ggml_type ggml_ftype_to_ggml_type(enum ggml_ftype ftype) {
+    enum ggml_type wtype = GGML_TYPE_COUNT;
+
+    switch (ftype) {
+        case GGML_FTYPE_ALL_F32:              wtype = GGML_TYPE_F32;   break;
+        case GGML_FTYPE_MOSTLY_F16:           wtype = GGML_TYPE_F16;   break;
+        case GGML_FTYPE_MOSTLY_BF16:          wtype = GGML_TYPE_BF16;  break;
+        case GGML_FTYPE_MOSTLY_Q4_0:          wtype = GGML_TYPE_Q4_0;  break;
+        case GGML_FTYPE_MOSTLY_Q4_1:          wtype = GGML_TYPE_Q4_1;  break;
+        case GGML_FTYPE_MOSTLY_Q5_0:          wtype = GGML_TYPE_Q5_0;  break;
+        case GGML_FTYPE_MOSTLY_Q5_1:          wtype = GGML_TYPE_Q5_1;  break;
+        case GGML_FTYPE_MOSTLY_Q8_0:          wtype = GGML_TYPE_Q8_0;  break;
+        case GGML_FTYPE_MOSTLY_Q2_K:          wtype = GGML_TYPE_Q2_K;  break;
+        case GGML_FTYPE_MOSTLY_Q3_K:          wtype = GGML_TYPE_Q3_K;  break;
+        case GGML_FTYPE_MOSTLY_Q4_K:          wtype = GGML_TYPE_Q4_K;  break;
+        case GGML_FTYPE_MOSTLY_Q5_K:          wtype = GGML_TYPE_Q5_K;  break;
+        case GGML_FTYPE_MOSTLY_Q6_K:          wtype = GGML_TYPE_Q6_K;  break;
+        case GGML_FTYPE_MOSTLY_IQ2_XXS:       wtype = GGML_TYPE_IQ2_XXS;  break;
+        case GGML_FTYPE_MOSTLY_IQ2_XS:        wtype = GGML_TYPE_IQ2_XS;   break;
+        case GGML_FTYPE_MOSTLY_IQ3_XXS:       wtype = GGML_TYPE_IQ3_XXS;  break;
+        case GGML_FTYPE_MOSTLY_IQ1_S:         wtype = GGML_TYPE_IQ1_S;    break;
+        case GGML_FTYPE_MOSTLY_IQ1_M:         wtype = GGML_TYPE_IQ1_M;    break;
+        case GGML_FTYPE_MOSTLY_IQ4_NL:        wtype = GGML_TYPE_IQ4_NL;   break;
+        case GGML_FTYPE_MOSTLY_IQ4_XS:        wtype = GGML_TYPE_IQ4_XS;   break;
+        case GGML_FTYPE_MOSTLY_IQ3_S:         wtype = GGML_TYPE_IQ3_S;    break;
+        case GGML_FTYPE_MOSTLY_IQ2_S:         wtype = GGML_TYPE_IQ2_S;    break;
+        case GGML_FTYPE_UNKNOWN:              wtype = GGML_TYPE_COUNT; break;
+        case GGML_FTYPE_MOSTLY_Q4_1_SOME_F16: wtype = GGML_TYPE_COUNT; break;
+    }
+
+    GGML_ASSERT(wtype != GGML_TYPE_COUNT);
+
+    return wtype;
+}
+
+size_t ggml_tensor_overhead(void) {
+    return GGML_OBJECT_SIZE + GGML_TENSOR_SIZE;
+}
+
+GGML_CALL bool ggml_is_transposed(const struct ggml_tensor * tensor) {
+    return tensor->nb[0] > tensor->nb[1];
+}
+
+static bool ggml_is_contiguous_n(const struct ggml_tensor * tensor, int n) {
+    size_t next_nb = ggml_type_size(tensor->type);
+    if (tensor->ne[0] != ggml_blck_size(tensor->type) && tensor->nb[0] != next_nb) {
+        return false;
+    }
+    next_nb *= tensor->ne[0]/ggml_blck_size(tensor->type);
+    for (int i = 1; i < GGML_MAX_DIMS; i++) {
+        if (tensor->ne[i] != 1) {
+            if (i > n) {
+                if (tensor->nb[i] != next_nb) {
+                    return false;
+                }
+                next_nb *= tensor->ne[i];
+            } else {
+                // this dimension does not need to be contiguous
+                next_nb = tensor->ne[i]*tensor->nb[i];
+            }
+        }
+    }
+    return true;
+}
+
+GGML_CALL bool ggml_is_contiguous(const struct ggml_tensor * tensor) {
+    return ggml_is_contiguous_0(tensor);
+}
+
+GGML_CALL bool ggml_is_contiguous_0(const struct ggml_tensor * tensor) {
+    return ggml_is_contiguous_n(tensor, 0);
+}
+
+GGML_CALL bool ggml_is_contiguous_1(const struct ggml_tensor * tensor) {
+    return ggml_is_contiguous_n(tensor, 1);
+}
+
+GGML_CALL bool ggml_is_contiguous_2(const struct ggml_tensor * tensor) {
+    return ggml_is_contiguous_n(tensor, 2);
+}
+
+GGML_CALL bool ggml_is_permuted(const struct ggml_tensor * tensor) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return tensor->nb[0] > tensor->nb[1] || tensor->nb[1] > tensor->nb[2] || tensor->nb[2] > tensor->nb[3];
+}
+
+static inline bool ggml_is_padded_1d(const struct ggml_tensor * tensor) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return
+        tensor->nb[0] == ggml_type_size(tensor->type) &&
+        tensor->nb[2] == tensor->nb[1]*tensor->ne[1] &&
+        tensor->nb[3] == tensor->nb[2]*tensor->ne[2];
+}
+
+GGML_CALL bool ggml_is_empty(const struct ggml_tensor * tensor) {
+    for (int i = 0; i < GGML_MAX_DIMS; ++i) {
+        if (tensor->ne[i] == 0) {
+            // empty if any dimension has no elements
+            return true;
+        }
+    }
+    return false;
+}
+
+bool ggml_are_same_shape(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return
+        (t0->ne[0] == t1->ne[0]) &&
+        (t0->ne[1] == t1->ne[1]) &&
+        (t0->ne[2] == t1->ne[2]) &&
+        (t0->ne[3] == t1->ne[3]);
+}
+
+bool ggml_are_same_stride(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return
+        (t0->nb[0] == t1->nb[0]) &&
+        (t0->nb[1] == t1->nb[1]) &&
+        (t0->nb[2] == t1->nb[2]) &&
+        (t0->nb[3] == t1->nb[3]);
+}
+
+// check if t1 can be represented as a repeatition of t0
+static inline bool ggml_can_repeat(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return ggml_is_empty(t0) ? ggml_is_empty(t1) :
+        (t1->ne[0]%t0->ne[0] == 0) &&
+        (t1->ne[1]%t0->ne[1] == 0) &&
+        (t1->ne[2]%t0->ne[2] == 0) &&
+        (t1->ne[3]%t0->ne[3] == 0);
+}
+
+static inline bool ggml_can_repeat_rows(const struct ggml_tensor * t0, const struct ggml_tensor * t1) {
+    static_assert(GGML_MAX_DIMS == 4, "GGML_MAX_DIMS is not 4 - update this function");
+
+    return (t0->ne[0] == t1->ne[0]) && ggml_can_repeat(t0, t1);
+}
+
+static inline int ggml_up32(int n) {
+    return (n + 31) & ~31;
+}
+
+//static inline int ggml_up64(int n) {
+//    return (n + 63) & ~63;
+//}
+
+static inline int ggml_up(int n, int m) {
+    // assert m is a power of 2
+    GGML_ASSERT((m & (m - 1)) == 0);
+    return (n + m - 1) & ~(m - 1);
+}
+
+// assert that pointer is aligned to GGML_MEM_ALIGN
+#define ggml_assert_aligned(ptr) \
+    GGML_ASSERT(((uintptr_t) (ptr))%GGML_MEM_ALIGN == 0)
+
+////////////////////////////////////////////////////////////////////////////////
+
+struct ggml_context * ggml_init(struct ggml_init_params params) {
+    // make this function thread safe
+    ggml_critical_section_start();
+
+    static bool is_first_call = true;
+
+    if (is_first_call) {
+        // initialize time system (required on Windows)
+        ggml_time_init();
+
+        // initialize GELU, Quick GELU, SILU and EXP F32 tables
+        {
+            const uint64_t t_start = ggml_time_us(); UNUSED(t_start);
+
+            for (int i = 0; i < (1 << 16); ++i) {
+                union {
+                    uint16_t u16;
+                    ggml_fp16_t fp16;
+                } u = {i};
+                float f = ggml_table_f32_f16[i] = GGML_COMPUTE_FP16_TO_FP32(u.fp16);
+                ggml_table_gelu_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_f32(f));
+                ggml_table_gelu_quick_f16[i] = GGML_FP32_TO_FP16(ggml_gelu_quick_f32(f));
+            }
+
+            const uint64_t t_end = ggml_time_us(); UNUSED(t_end);
+
+            GGML_PRINT_DEBUG("%s: GELU, Quick GELU, SILU and EXP tables initialized in %f ms\n", __func__, (t_end - t_start)/1000.0f);
+        }
+
+        // initialize g_state
+        {
+            const uint64_t t_start = ggml_time_us(); UNUSED(t_start);
+
+            g_state = (struct ggml_state) {
+                /*.contexts =*/ { { 0 } },
+                /*.numa =*/ {
+                    .n_nodes = 0,
+                    .total_cpus = 0,
+                },
+            };
+
+            for (int i = 0; i < GGML_MAX_CONTEXTS; ++i) {
+                g_state.contexts[i].used = false;
+            }
+
+            const uint64_t t_end = ggml_time_us(); UNUSED(t_end);
+
+            GGML_PRINT_DEBUG("%s: g_state initialized in %f ms\n", __func__, (t_end - t_start)/1000.0f);
+        }
+
+        is_first_call = false;
+    }
+
+    // find non-used context in g_state
+    struct ggml_context * ctx = NULL;
+
+    for (int i = 0; i < GGML_MAX_CONTEXTS; i++) {
+        if (!g_state.contexts[i].used) {
+            g_state.contexts[i].used = true;
+            ctx = &g_state.contexts[i].context;
+
+            GGML_PRINT_DEBUG("%s: found unused context %d\n", __func__, i);
+            break;
+        }
+    }
+
+    if (ctx == NULL) {
+        GGML_PRINT_DEBUG("%s: no unused context found\n", __func__);
+
+        ggml_critical_section_end();
+
+        return NULL;
+    }
+
+    // allow to call ggml_init with 0 size
+    if (params.mem_size == 0) {
+        params.mem_size = GGML_MEM_ALIGN;
+    }
+
+    const size_t mem_size = params.mem_buffer ? params.mem_size : GGML_PAD(params.mem_size, GGML_MEM_ALIGN);
+
+    *ctx = (struct ggml_context) {
+        /*.mem_size           =*/ mem_size,
+        /*.mem_buffer         =*/ params.mem_buffer ? params.mem_buffer : GGML_ALIGNED_MALLOC(mem_size),
+        /*.mem_buffer_owned   =*/ params.mem_buffer ? false : true,
+        /*.no_alloc           =*/ params.no_alloc,
+        /*.no_alloc_save      =*/ params.no_alloc,
+        /*.n_objects          =*/ 0,
+        /*.objects_begin      =*/ NULL,
+        /*.objects_end        =*/ NULL,
+        /*.scratch            =*/ { 0, 0, NULL, },
+        /*.scratch_save       =*/ { 0, 0, NULL, },
+    };
+
+    GGML_ASSERT(ctx->mem_buffer != NULL);
+
+    ggml_assert_aligned(ctx->mem_buffer);
+
+    GGML_PRINT_DEBUG("%s: context initialized\n", __func__);
+
+    ggml_critical_section_end();
+
+    return ctx;
+}
+
+void ggml_free(struct ggml_context * ctx) {
+    if (ctx == NULL) {
+        return;
+    }
+
+    // make this function thread safe
+    ggml_critical_section_start();
+
+    bool found = false;
+
+    for (int i = 0; i < GGML_MAX_CONTEXTS; i++) {
+        if (&g_state.contexts[i].context == ctx) {
+            g_state.contexts[i].used = false;
+
+            GGML_PRINT_DEBUG("%s: context %d has been freed. memory used = %zu\n",
+                    __func__, i, ggml_used_mem(ctx));
+
+            if (ctx->mem_buffer_owned) {
+                GGML_ALIGNED_FREE(ctx->mem_buffer);
+            }
+
+            found = true;
+            break;
+        }
+    }
+
+    if (!found) {
+        GGML_PRINT_DEBUG("%s: context not found\n", __func__);
+    }
+
+    ggml_critical_section_end();
+}
+
+size_t ggml_used_mem(const struct ggml_context * ctx) {
+    return ctx->objects_end == NULL ? 0 : ctx->objects_end->offs + ctx->objects_end->size;
+}
+
+size_t ggml_set_scratch(struct ggml_context * ctx, struct ggml_scratch scratch) {
+    const size_t result = ctx->scratch.data ? ctx->scratch.offs : 0;
+
+    ctx->scratch = scratch;
+
+    return result;
+}
+
+bool ggml_get_no_alloc(struct ggml_context * ctx) {
+    return ctx->no_alloc;
+}
+
+void ggml_set_no_alloc(struct ggml_context * ctx, bool no_alloc) {
+    ctx->no_alloc = no_alloc;
+}
+
+void * ggml_get_mem_buffer(const struct ggml_context * ctx) {
+    return ctx->mem_buffer;
+}
+
+size_t ggml_get_mem_size(const struct ggml_context * ctx) {
+    return ctx->mem_size;
+}
+
+size_t ggml_get_max_tensor_size(const struct ggml_context * ctx) {
+    size_t max_size = 0;
+
+    for (struct ggml_tensor * tensor = ggml_get_first_tensor(ctx); tensor != NULL; tensor = ggml_get_next_tensor(ctx, tensor)) {
+        size_t bytes = ggml_nbytes(tensor);
+        max_size = MAX(max_size, bytes);
+    }
+
+    return max_size;
+}
+
+// IMPORTANT:
+// when creating "opt" tensors, always save and load the scratch buffer
+// this is an error prone process, but it is necessary to support inplace
+// operators when using scratch buffers
+// TODO: implement a better way
+static void ggml_scratch_save(struct ggml_context * ctx) {
+    // this is needed to allow opt tensors to store their data
+    // TODO: again, need to find a better way
+    ctx->no_alloc_save = ctx->no_alloc;
+    ctx->no_alloc      = false;
+
+    ctx->scratch_save = ctx->scratch;
+    ctx->scratch.data = NULL;
+}
+
+static void ggml_scratch_load(struct ggml_context * ctx) {
+    ctx->no_alloc = ctx->no_alloc_save;
+
+    ctx->scratch = ctx->scratch_save;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+static struct ggml_object * ggml_new_object(struct ggml_context * ctx, enum ggml_object_type type, size_t size) {
+    // always insert objects at the end of the context's memory pool
+    struct ggml_object * obj_cur = ctx->objects_end;
+
+    const size_t cur_offs = obj_cur == NULL ? 0 : obj_cur->offs;
+    const size_t cur_size = obj_cur == NULL ? 0 : obj_cur->size;
+    const size_t cur_end  = cur_offs + cur_size;
+
+    // align to GGML_MEM_ALIGN
+    size_t size_needed = GGML_PAD(size, GGML_MEM_ALIGN);
+
+    char * const mem_buffer = ctx->mem_buffer;
+    struct ggml_object * const obj_new = (struct ggml_object *)(mem_buffer + cur_end);
+
+    if (cur_end + size_needed + GGML_OBJECT_SIZE > ctx->mem_size) {
+        GGML_PRINT("%s: not enough space in the context's memory pool (needed %zu, available %zu)\n",
+                __func__, cur_end + size_needed, ctx->mem_size);
+        assert(false);
+        return NULL;
+    }
+
+    *obj_new = (struct ggml_object) {
+        .offs = cur_end + GGML_OBJECT_SIZE,
+        .size = size_needed,
+        .next = NULL,
+        .type = type,
+    };
+
+    ggml_assert_aligned(mem_buffer + obj_new->offs);
+
+    if (obj_cur != NULL) {
+        obj_cur->next = obj_new;
+    } else {
+        // this is the first object in this context
+        ctx->objects_begin = obj_new;
+    }
+
+    ctx->objects_end = obj_new;
+
+    //printf("%s: inserted new object at %zu, size = %zu\n", __func__, cur_end, obj_new->size);
+
+    return obj_new;
+}
+
+static struct ggml_tensor * ggml_new_tensor_impl(
+        struct ggml_context * ctx,
+        enum   ggml_type      type,
+        int                   n_dims,
+        const int64_t       * ne,
+        struct ggml_tensor  * view_src,
+        size_t                view_offs) {
+
+    assert(n_dims >= 1 && n_dims <= GGML_MAX_DIMS);
+
+    // find the base tensor and absolute offset
+    if (view_src != NULL && view_src->view_src != NULL) {
+        view_offs += view_src->view_offs;
+        view_src   = view_src->view_src;
+    }
+
+    size_t data_size = ggml_row_size(type, ne[0]);
+    for (int i = 1; i < n_dims; i++) {
+        data_size *= ne[i];
+    }
+
+    GGML_ASSERT(view_src == NULL || data_size == 0 || data_size + view_offs <= ggml_nbytes(view_src));
+
+    void * data = view_src != NULL ? view_src->data : NULL;
+    if (data != NULL) {
+        data = (char *) data + view_offs;
+    }
+
+    size_t obj_alloc_size = 0;
+
+    if (view_src == NULL && !ctx->no_alloc) {
+        if (ctx->scratch.data != NULL) {
+            // allocate tensor data in the scratch buffer
+            if (ctx->scratch.offs + data_size > ctx->scratch.size) {
+                GGML_PRINT("%s: not enough space in the scratch memory pool (needed %zu, available %zu)\n",
+                        __func__, ctx->scratch.offs + data_size, ctx->scratch.size);
+                assert(false);
+                return NULL;
+            }
+
+            data = (char * const) ctx->scratch.data + ctx->scratch.offs;
+
+            ctx->scratch.offs += data_size;
+        } else {
+            // allocate tensor data in the context's memory pool
+            obj_alloc_size = data_size;
+        }
+    }
+
+    struct ggml_object * const obj_new = ggml_new_object(ctx, GGML_OBJECT_TYPE_TENSOR, GGML_TENSOR_SIZE + obj_alloc_size);
+
+    // TODO: for recoverable errors, we would need to free the data allocated from the scratch buffer here
+
+    struct ggml_tensor * const result = (struct ggml_tensor *)((char *)ctx->mem_buffer + obj_new->offs);
+
+#ifdef __clang__
+    // temporary until ggml_tensor::backend is removed
+    #pragma clang diagnostic push
+    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
+    *result = (struct ggml_tensor) {
+        /*.type         =*/ type,
+        /*.backend      =*/ GGML_BACKEND_TYPE_CPU,
+        /*.buffer       =*/ NULL,
+        /*.ne           =*/ { 1, 1, 1, 1 },
+        /*.nb           =*/ { 0, 0, 0, 0 },
+        /*.op           =*/ GGML_OP_NONE,
+        /*.op_params    =*/ { 0 },
+        /*.flags        =*/ 0,
+        /*.grad         =*/ NULL,
+        /*.src          =*/ { NULL },
+        /*.view_src     =*/ view_src,
+        /*.view_offs    =*/ view_offs,
+        /*.data         =*/ obj_alloc_size > 0 ? (void *)(result + 1) : data,
+        /*.name         =*/ { 0 },
+        /*.extra        =*/ NULL,
+        ///*.padding      =*/ { 0 },
+    };
+
+#ifdef __clang__
+    #pragma clang diagnostic pop
+#endif
+
+    // TODO: this should not be needed as long as we don't rely on aligned SIMD loads
+    //ggml_assert_aligned(result->data);
+
+    for (int i = 0; i < n_dims; i++) {
+        result->ne[i] = ne[i];
+    }
+
+    result->nb[0] = ggml_type_size(type);
+    result->nb[1] = result->nb[0]*(result->ne[0]/ggml_blck_size(type));
+    for (int i = 2; i < GGML_MAX_DIMS; i++) {
+        result->nb[i] = result->nb[i - 1]*result->ne[i - 1];
+    }
+
+    ctx->n_objects++;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_new_tensor(
+        struct ggml_context * ctx,
+        enum   ggml_type      type,
+        int                   n_dims,
+        const int64_t       * ne) {
+    return ggml_new_tensor_impl(ctx, type, n_dims, ne, NULL, 0);
+}
+
+struct ggml_tensor * ggml_new_tensor_1d(
+        struct ggml_context * ctx,
+        enum   ggml_type      type,
+        int64_t ne0) {
+    return ggml_new_tensor(ctx, type, 1, &ne0);
+}
+
+struct ggml_tensor * ggml_new_tensor_2d(
+        struct ggml_context * ctx,
+        enum   ggml_type      type,
+        int64_t ne0,
+        int64_t ne1) {
+    const int64_t ne[2] = { ne0, ne1 };
+    return ggml_new_tensor(ctx, type, 2, ne);
+}
+
+struct ggml_tensor * ggml_new_tensor_3d(
+        struct ggml_context * ctx,
+        enum   ggml_type      type,
+        int64_t ne0,
+        int64_t ne1,
+        int64_t ne2) {
+    const int64_t ne[3] = { ne0, ne1, ne2 };
+    return ggml_new_tensor(ctx, type, 3, ne);
+}
+
+struct ggml_tensor * ggml_new_tensor_4d(
+        struct ggml_context * ctx,
+        enum   ggml_type type,
+        int64_t ne0,
+        int64_t ne1,
+        int64_t ne2,
+        int64_t ne3) {
+    const int64_t ne[4] = { ne0, ne1, ne2, ne3 };
+    return ggml_new_tensor(ctx, type, 4, ne);
+}
+
+struct ggml_tensor * ggml_new_i32(struct ggml_context * ctx, int32_t value) {
+    ggml_scratch_save(ctx);
+
+    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, 1);
+
+    ggml_scratch_load(ctx);
+
+    ggml_set_i32(result, value);
+
+    return result;
+}
+
+struct ggml_tensor * ggml_new_f32(struct ggml_context * ctx, float value) {
+    ggml_scratch_save(ctx);
+
+    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 1);
+
+    ggml_scratch_load(ctx);
+
+    ggml_set_f32(result, value);
+
+    return result;
+}
+
+struct ggml_tensor * ggml_dup_tensor(struct ggml_context * ctx, const struct ggml_tensor * src) {
+    return ggml_new_tensor(ctx, src->type, GGML_MAX_DIMS, src->ne);
+}
+
+static void ggml_set_op_params(struct ggml_tensor * tensor, const void * params, size_t params_size) {
+    GGML_ASSERT(tensor != NULL); // silence -Warray-bounds warnings
+    assert(params_size <= GGML_MAX_OP_PARAMS);
+    memcpy(tensor->op_params, params, params_size);
+}
+
+static int32_t ggml_get_op_params_i32(const struct ggml_tensor * tensor, uint32_t i) {
+    assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t));
+    return ((const int32_t *)(tensor->op_params))[i];
+}
+
+static float ggml_get_op_params_f32(const struct ggml_tensor * tensor, uint32_t i) {
+    assert(i < GGML_MAX_OP_PARAMS / sizeof(float));
+    return ((const float *)(tensor->op_params))[i];
+}
+
+static void ggml_set_op_params_i32(struct ggml_tensor * tensor, uint32_t i, int32_t value) {
+    assert(i < GGML_MAX_OP_PARAMS / sizeof(int32_t));
+    ((int32_t *)(tensor->op_params))[i] = value;
+}
+
+static void ggml_set_op_params_f32(struct ggml_tensor * tensor, uint32_t i, float value) {
+    assert(i < GGML_MAX_OP_PARAMS / sizeof(float));
+    ((float *)(tensor->op_params))[i] = value;
+}
+
+struct ggml_tensor * ggml_set_zero(struct ggml_tensor * tensor) {
+    memset(tensor->data, 0, ggml_nbytes(tensor));
+    return tensor;
+}
+
+struct ggml_tensor * ggml_set_i32 (struct ggml_tensor * tensor, int32_t value) {
+    const int n     = ggml_nrows(tensor);
+    const int nc    = tensor->ne[0];
+    const size_t n1 = tensor->nb[1];
+
+    char * const data = tensor->data;
+
+    switch (tensor->type) {
+        case GGML_TYPE_I8:
+            {
+                assert(tensor->nb[0] == sizeof(int8_t));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_i8(nc, (int8_t *)(data + i*n1), value);
+                }
+            } break;
+        case GGML_TYPE_I16:
+            {
+                assert(tensor->nb[0] == sizeof(int16_t));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_i16(nc, (int16_t *)(data + i*n1), value);
+                }
+            } break;
+        case GGML_TYPE_I32:
+            {
+                assert(tensor->nb[0] == sizeof(int32_t));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_i32(nc, (int32_t *)(data + i*n1), value);
+                }
+            } break;
+        case GGML_TYPE_F16:
+            {
+                assert(tensor->nb[0] == sizeof(ggml_fp16_t));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), GGML_FP32_TO_FP16(value));
+                }
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                assert(tensor->nb[0] == sizeof(ggml_fp16_t));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_bf16(nc, (ggml_bf16_t *)(data + i*n1), GGML_FP32_TO_BF16(value));
+                }
+            } break;
+        case GGML_TYPE_F32:
+            {
+                assert(tensor->nb[0] == sizeof(float));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_f32(nc, (float *)(data + i*n1), value);
+                }
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+
+    return tensor;
+}
+
+struct ggml_tensor * ggml_set_f32(struct ggml_tensor * tensor, float value) {
+    const int n     = ggml_nrows(tensor);
+    const int nc    = tensor->ne[0];
+    const size_t n1 = tensor->nb[1];
+
+    char * const data = tensor->data;
+
+    switch (tensor->type) {
+        case GGML_TYPE_I8:
+            {
+                assert(tensor->nb[0] == sizeof(int8_t));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_i8(nc, (int8_t *)(data + i*n1), value);
+                }
+            } break;
+        case GGML_TYPE_I16:
+            {
+                assert(tensor->nb[0] == sizeof(int16_t));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_i16(nc, (int16_t *)(data + i*n1), value);
+                }
+            } break;
+        case GGML_TYPE_I32:
+            {
+                assert(tensor->nb[0] == sizeof(int32_t));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_i32(nc, (int32_t *)(data + i*n1), value);
+                }
+            } break;
+        case GGML_TYPE_F16:
+            {
+                assert(tensor->nb[0] == sizeof(ggml_fp16_t));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_f16(nc, (ggml_fp16_t *)(data + i*n1), GGML_FP32_TO_FP16(value));
+                }
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                assert(tensor->nb[0] == sizeof(ggml_bf16_t));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_bf16(nc, (ggml_bf16_t *)(data + i*n1), GGML_FP32_TO_BF16(value));
+                }
+            } break;
+        case GGML_TYPE_F32:
+            {
+                assert(tensor->nb[0] == sizeof(float));
+                for (int i = 0; i < n; i++) {
+                    ggml_vec_set_f32(nc, (float *)(data + i*n1), value);
+                }
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+
+    return tensor;
+}
+
+void ggml_unravel_index(const struct ggml_tensor * tensor, int64_t i, int64_t * i0, int64_t * i1, int64_t * i2, int64_t * i3) {
+    const int64_t ne2 = tensor->ne[2];
+    const int64_t ne1 = tensor->ne[1];
+    const int64_t ne0 = tensor->ne[0];
+
+    const int64_t i3_ = (i/(ne2*ne1*ne0));
+    const int64_t i2_ = (i - i3_*ne2*ne1*ne0)/(ne1*ne0);
+    const int64_t i1_ = (i - i3_*ne2*ne1*ne0 - i2_*ne1*ne0)/ne0;
+    const int64_t i0_ = (i - i3_*ne2*ne1*ne0 - i2_*ne1*ne0 - i1_*ne0);
+
+    if (i0) {
+        * i0 = i0_;
+    }
+    if (i1) {
+        * i1 = i1_;
+    }
+    if (i2) {
+        * i2 = i2_;
+    }
+    if (i3) {
+        * i3 = i3_;
+    }
+}
+
+int32_t ggml_get_i32_1d(const struct ggml_tensor * tensor, int i) {
+    if (!ggml_is_contiguous(tensor)) {
+        int64_t id[4] = { 0, 0, 0, 0 };
+        ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]);
+        return ggml_get_i32_nd(tensor, id[0], id[1], id[2], id[3]);
+    }
+    switch (tensor->type) {
+        case GGML_TYPE_I8:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(int8_t));
+                return ((int8_t *)(tensor->data))[i];
+            }
+        case GGML_TYPE_I16:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(int16_t));
+                return ((int16_t *)(tensor->data))[i];
+            }
+        case GGML_TYPE_I32:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(int32_t));
+                return ((int32_t *)(tensor->data))[i];
+            }
+        case GGML_TYPE_F16:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t));
+                return GGML_FP16_TO_FP32(((ggml_fp16_t *)(tensor->data))[i]);
+            }
+        case GGML_TYPE_BF16:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(ggml_bf16_t));
+                return GGML_BF16_TO_FP32(((ggml_bf16_t *)(tensor->data))[i]);
+            }
+        case GGML_TYPE_F32:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(float));
+                return ((float *)(tensor->data))[i];
+            }
+        default:
+            {
+                GGML_ASSERT(false);
+            }
+    }
+
+    return 0.0f;
+}
+
+void ggml_set_i32_1d(const struct ggml_tensor * tensor, int i, int32_t value) {
+    if (!ggml_is_contiguous(tensor)) {
+        int64_t id[4] = { 0, 0, 0, 0 };
+        ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]);
+        ggml_set_i32_nd(tensor, id[0], id[1], id[2], id[3], value);
+        return;
+    }
+    switch (tensor->type) {
+        case GGML_TYPE_I8:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(int8_t));
+                ((int8_t *)(tensor->data))[i] = value;
+            } break;
+        case GGML_TYPE_I16:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(int16_t));
+                ((int16_t *)(tensor->data))[i] = value;
+            } break;
+        case GGML_TYPE_I32:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(int32_t));
+                ((int32_t *)(tensor->data))[i] = value;
+            } break;
+        case GGML_TYPE_F16:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(ggml_fp16_t));
+                ((ggml_fp16_t *)(tensor->data))[i] = GGML_FP32_TO_FP16(value);
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(ggml_bf16_t));
+                ((ggml_bf16_t *)(tensor->data))[i] = GGML_FP32_TO_BF16(value);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                GGML_ASSERT(tensor->nb[0] == sizeof(float));
+                ((float *)(tensor->data))[i] = value;
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+int32_t ggml_get_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3) {
+    void * data   = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3];
+    switch (tensor->type) {
+        case GGML_TYPE_I8:
+            return ((int8_t *) data)[0];
+        case GGML_TYPE_I16:
+            return ((int16_t *) data)[0];
+        case GGML_TYPE_I32:
+            return ((int32_t *) data)[0];
+        case GGML_TYPE_F16:
+            return GGML_FP16_TO_FP32(((ggml_fp16_t *) data)[0]);
+        case GGML_TYPE_BF16:
+            return GGML_BF16_TO_FP32(((ggml_bf16_t *) data)[0]);
+        case GGML_TYPE_F32:
+            return ((float *) data)[0];
+        default:
+            GGML_ASSERT(false);
+    }
+
+    return 0.0f;
+}
+
+void ggml_set_i32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, int32_t value) {
+    void * data   = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3];
+    switch (tensor->type) {
+        case GGML_TYPE_I8:
+            {
+                ((int8_t *)(data))[0] = value;
+            } break;
+        case GGML_TYPE_I16:
+            {
+                ((int16_t *)(data))[0] = value;
+            } break;
+        case GGML_TYPE_I32:
+            {
+                ((int32_t *)(data))[0] = value;
+            } break;
+        case GGML_TYPE_F16:
+            {
+                ((ggml_fp16_t *)(data))[0] = GGML_FP32_TO_FP16(value);
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                ((ggml_bf16_t *)(data))[0] = GGML_FP32_TO_BF16(value);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                ((float *)(data))[0] = value;
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+float ggml_get_f32_1d(const struct ggml_tensor * tensor, int i) {
+    if (!ggml_is_contiguous(tensor)) {
+        int64_t id[4] = { 0, 0, 0, 0 };
+        ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]);
+        return ggml_get_f32_nd(tensor, id[0], id[1], id[2], id[3]);
+    }
+    switch (tensor->type) {
+        case GGML_TYPE_I8:
+            {
+                return ((int8_t *)(tensor->data))[i];
+            }
+        case GGML_TYPE_I16:
+            {
+                return ((int16_t *)(tensor->data))[i];
+            }
+        case GGML_TYPE_I32:
+            {
+                return ((int32_t *)(tensor->data))[i];
+            }
+        case GGML_TYPE_F16:
+            {
+                return GGML_FP16_TO_FP32(((ggml_fp16_t *)(tensor->data))[i]);
+            }
+        case GGML_TYPE_BF16:
+            {
+                return GGML_BF16_TO_FP32(((ggml_bf16_t *)(tensor->data))[i]);
+            }
+        case GGML_TYPE_F32:
+            {
+                return ((float *)(tensor->data))[i];
+            }
+        default:
+            {
+                GGML_ASSERT(false);
+            }
+    }
+
+    return 0.0f;
+}
+
+void ggml_set_f32_1d(const struct ggml_tensor * tensor, int i, float value) {
+    if (!ggml_is_contiguous(tensor)) {
+        int64_t id[4] = { 0, 0, 0, 0 };
+        ggml_unravel_index(tensor, i, &id[0], &id[1], &id[2], &id[3]);
+        ggml_set_f32_nd(tensor, id[0], id[1], id[2], id[3], value);
+        return;
+    }
+    switch (tensor->type) {
+        case GGML_TYPE_I8:
+            {
+                ((int8_t *)(tensor->data))[i] = value;
+            } break;
+        case GGML_TYPE_I16:
+            {
+                ((int16_t *)(tensor->data))[i] = value;
+            } break;
+        case GGML_TYPE_I32:
+            {
+                ((int32_t *)(tensor->data))[i] = value;
+            } break;
+        case GGML_TYPE_F16:
+            {
+                ((ggml_fp16_t *)(tensor->data))[i] = GGML_FP32_TO_FP16(value);
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                ((ggml_bf16_t *)(tensor->data))[i] = GGML_FP32_TO_BF16(value);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                ((float *)(tensor->data))[i] = value;
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+float ggml_get_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3) {
+    void * data   = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3];
+    switch (tensor->type) {
+        case GGML_TYPE_I8:
+            return ((int8_t *) data)[0];
+        case GGML_TYPE_I16:
+            return ((int16_t *) data)[0];
+        case GGML_TYPE_I32:
+            return ((int32_t *) data)[0];
+        case GGML_TYPE_F16:
+            return GGML_FP16_TO_FP32(((ggml_fp16_t *) data)[0]);
+        case GGML_TYPE_BF16:
+            return GGML_BF16_TO_FP32(((ggml_bf16_t *) data)[0]);
+        case GGML_TYPE_F32:
+            return ((float *) data)[0];
+        default:
+            GGML_ASSERT(false);
+    }
+
+    return 0.0f;
+}
+
+void ggml_set_f32_nd(const struct ggml_tensor * tensor, int i0, int i1, int i2, int i3, float value) {
+    void * data   = (char *) tensor->data + i0*tensor->nb[0] + i1*tensor->nb[1] + i2*tensor->nb[2] + i3*tensor->nb[3];
+    switch (tensor->type) {
+        case GGML_TYPE_I8:
+            {
+                ((int8_t *)(data))[0] = value;
+            } break;
+        case GGML_TYPE_I16:
+            {
+                ((int16_t *)(data))[0] = value;
+            } break;
+        case GGML_TYPE_I32:
+            {
+                ((int32_t *)(data))[0] = value;
+            } break;
+        case GGML_TYPE_F16:
+            {
+                ((ggml_fp16_t *)(data))[0] = GGML_FP32_TO_FP16(value);
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                ((ggml_bf16_t *)(data))[0] = GGML_FP32_TO_BF16(value);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                ((float *)(data))[0] = value;
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+void * ggml_get_data(const struct ggml_tensor * tensor) {
+    return tensor->data;
+}
+
+float * ggml_get_data_f32(const struct ggml_tensor * tensor) {
+    assert(tensor->type == GGML_TYPE_F32);
+    return (float *)(tensor->data);
+}
+
+GGML_CALL enum ggml_unary_op ggml_get_unary_op(const struct ggml_tensor * tensor) {
+    GGML_ASSERT(tensor->op == GGML_OP_UNARY);
+    return (enum ggml_unary_op) ggml_get_op_params_i32(tensor, 0);
+}
+
+const char * ggml_get_name(const struct ggml_tensor * tensor) {
+    return tensor->name;
+}
+
+struct ggml_tensor * ggml_set_name(struct ggml_tensor * tensor, const char * name) {
+    strncpy(tensor->name, name, sizeof(tensor->name) - 1);
+    tensor->name[sizeof(tensor->name) - 1] = '\0';
+    return tensor;
+}
+
+struct ggml_tensor * ggml_format_name(struct ggml_tensor * tensor, const char * fmt, ...) {
+    va_list args;
+    va_start(args, fmt);
+    vsnprintf(tensor->name, sizeof(tensor->name), fmt, args);
+    va_end(args);
+    return tensor;
+}
+
+struct ggml_tensor * ggml_view_tensor(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * src) {
+    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, src->type, GGML_MAX_DIMS, src->ne, src, 0);
+    ggml_format_name(result, "%s (view)", src->name);
+
+    for (int i = 0; i < GGML_MAX_DIMS; i++) {
+        result->nb[i] = src->nb[i];
+    }
+
+    return result;
+}
+
+struct ggml_tensor * ggml_get_first_tensor(const struct ggml_context * ctx) {
+    struct ggml_object * obj = ctx->objects_begin;
+
+    char * const mem_buffer = ctx->mem_buffer;
+
+    while (obj != NULL) {
+        if (obj->type == GGML_OBJECT_TYPE_TENSOR) {
+            return (struct ggml_tensor *)(mem_buffer + obj->offs);
+        }
+
+        obj = obj->next;
+    }
+
+    return NULL;
+}
+
+struct ggml_tensor * ggml_get_next_tensor(const struct ggml_context * ctx, struct ggml_tensor * tensor) {
+    struct ggml_object * obj = (struct ggml_object *) ((char *)tensor - GGML_OBJECT_SIZE);
+    obj = obj->next;
+
+    char * const mem_buffer = ctx->mem_buffer;
+
+    while (obj != NULL) {
+        if (obj->type == GGML_OBJECT_TYPE_TENSOR) {
+            return (struct ggml_tensor *)(mem_buffer + obj->offs);
+        }
+
+        obj = obj->next;
+    }
+
+    return NULL;
+}
+
+struct ggml_tensor * ggml_get_tensor(struct ggml_context * ctx, const char * name) {
+    struct ggml_object * obj = ctx->objects_begin;
+
+    char * const mem_buffer = ctx->mem_buffer;
+
+    while (obj != NULL) {
+        if (obj->type == GGML_OBJECT_TYPE_TENSOR) {
+            struct ggml_tensor * cur = (struct ggml_tensor *)(mem_buffer + obj->offs);
+            if (strcmp(cur->name, name) == 0) {
+                return cur;
+            }
+        }
+
+        obj = obj->next;
+    }
+
+    return NULL;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+// ggml_dup
+
+static struct ggml_tensor * ggml_dup_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        bool inplace) {
+    bool is_node = false;
+
+    if (!inplace && (a->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_DUP;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_dup(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a) {
+    return ggml_dup_impl(ctx, a, false);
+}
+
+struct ggml_tensor * ggml_dup_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a) {
+    return ggml_dup_impl(ctx, a, true);
+}
+
+// ggml_add
+
+static struct ggml_tensor * ggml_add_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b,
+        bool inplace) {
+    GGML_ASSERT(ggml_can_repeat(b, a));
+
+    bool is_node = false;
+
+    if (!inplace && (a->grad || b->grad)) {
+        // TODO: support backward pass for broadcasting
+        GGML_ASSERT(ggml_are_same_shape(a, b));
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_ADD;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_add(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b) {
+    return ggml_add_impl(ctx, a, b, false);
+}
+
+struct ggml_tensor * ggml_add_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b) {
+    return ggml_add_impl(ctx, a, b, true);
+}
+
+// ggml_add_cast
+
+static struct ggml_tensor * ggml_add_cast_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b,
+        enum   ggml_type     type) {
+    // TODO: support less-strict constraint
+    //       GGML_ASSERT(ggml_can_repeat(b, a));
+    GGML_ASSERT(ggml_can_repeat_rows(b, a));
+
+    // currently only supported for quantized input and f16
+    GGML_ASSERT(ggml_is_quantized(a->type) ||
+                a->type == GGML_TYPE_F16 ||
+                a->type == GGML_TYPE_BF16);
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        // TODO: support backward pass for broadcasting
+        GGML_ASSERT(ggml_are_same_shape(a, b));
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor(ctx, type, GGML_MAX_DIMS, a->ne);
+
+    result->op   = GGML_OP_ADD;
+    result->grad = is_node ? ggml_new_tensor(ctx, GGML_TYPE_F32, GGML_MAX_DIMS, a->ne) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_add_cast(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b,
+        enum   ggml_type     type) {
+    return ggml_add_cast_impl(ctx, a, b, type);
+}
+
+// ggml_add1
+
+static struct ggml_tensor * ggml_add1_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b,
+        bool inplace) {
+    GGML_ASSERT(ggml_is_scalar(b));
+    GGML_ASSERT(ggml_is_padded_1d(a));
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_ADD1;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_add1(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b) {
+    return ggml_add1_impl(ctx, a, b, false);
+}
+
+struct ggml_tensor * ggml_add1_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b) {
+    return ggml_add1_impl(ctx, a, b, true);
+}
+
+// ggml_acc
+
+static struct ggml_tensor * ggml_acc_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b,
+        size_t               nb1,
+        size_t               nb2,
+        size_t               nb3,
+        size_t               offset,
+        bool inplace) {
+    GGML_ASSERT(ggml_nelements(b) <= ggml_nelements(a));
+    GGML_ASSERT(ggml_is_contiguous(a));
+    GGML_ASSERT(a->type == GGML_TYPE_F32);
+    GGML_ASSERT(b->type == GGML_TYPE_F32);
+
+    bool is_node = false;
+
+    if (!inplace && (a->grad || b->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    int32_t params[] = { nb1, nb2, nb3, offset, inplace ? 1 : 0 };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_ACC;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_acc(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b,
+        size_t               nb1,
+        size_t               nb2,
+        size_t               nb3,
+        size_t               offset) {
+    return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, false);
+}
+
+struct ggml_tensor * ggml_acc_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b,
+        size_t               nb1,
+        size_t               nb2,
+        size_t               nb3,
+        size_t               offset) {
+    return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, true);
+}
+
+// ggml_sub
+
+static struct ggml_tensor * ggml_sub_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b,
+        bool inplace) {
+    GGML_ASSERT(ggml_are_same_shape(a, b));
+
+    bool is_node = false;
+
+    if (!inplace && (a->grad || b->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_SUB;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_sub(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b) {
+    return ggml_sub_impl(ctx, a, b, false);
+}
+
+struct ggml_tensor * ggml_sub_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b) {
+    return ggml_sub_impl(ctx, a, b, true);
+}
+
+// ggml_mul
+
+static struct ggml_tensor * ggml_mul_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b,
+        bool inplace) {
+    GGML_ASSERT(ggml_can_repeat(b, a));
+
+    bool is_node = false;
+
+    if (!inplace && (a->grad || b->grad)) {
+        // TODO: support backward pass for broadcasting
+        GGML_ASSERT(ggml_are_same_shape(a, b));
+        is_node = true;
+    }
+
+    if (inplace) {
+        GGML_ASSERT(!is_node);
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_MUL;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_mul(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    return ggml_mul_impl(ctx, a, b, false);
+}
+
+struct ggml_tensor * ggml_mul_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    return ggml_mul_impl(ctx, a, b, true);
+}
+
+// ggml_div
+
+static struct ggml_tensor * ggml_div_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b,
+        bool inplace) {
+    GGML_ASSERT(ggml_can_repeat(b, a));
+
+    bool is_node = false;
+
+    if (!inplace && (a->grad || b->grad)) {
+        is_node = true;
+    }
+
+    if (inplace) {
+        GGML_ASSERT(!is_node);
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_DIV;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_div(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    return ggml_div_impl(ctx, a, b, false);
+}
+
+struct ggml_tensor * ggml_div_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    return ggml_div_impl(ctx, a, b, true);
+}
+
+// ggml_sqr
+
+static struct ggml_tensor * ggml_sqr_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        bool inplace) {
+    bool is_node = false;
+
+    if (!inplace && (a->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_SQR;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_sqr(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_sqr_impl(ctx, a, false);
+}
+
+struct ggml_tensor * ggml_sqr_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_sqr_impl(ctx, a, true);
+}
+
+// ggml_sqrt
+
+static struct ggml_tensor * ggml_sqrt_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        bool inplace) {
+    bool is_node = false;
+
+    if (!inplace && (a->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_SQRT;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_sqrt(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_sqrt_impl(ctx, a, false);
+}
+
+struct ggml_tensor * ggml_sqrt_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_sqrt_impl(ctx, a, true);
+}
+
+// ggml_log
+
+static struct ggml_tensor * ggml_log_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        bool inplace) {
+    bool is_node = false;
+
+    if (!inplace && (a->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_LOG;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_log(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_log_impl(ctx, a, false);
+}
+
+struct ggml_tensor * ggml_log_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_log_impl(ctx, a, true);
+}
+
+// ggml_sum
+
+struct ggml_tensor * ggml_sum(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a) {
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, a->type, 1);
+
+    result->op   = GGML_OP_SUM;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_sum_rows
+
+struct ggml_tensor * ggml_sum_rows(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a) {
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    int64_t ne[GGML_MAX_DIMS] = { 1 };
+    for (int i = 1; i < GGML_MAX_DIMS; ++i) {
+        ne[i] = a->ne[i];
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, ne);
+
+    result->op   = GGML_OP_SUM_ROWS;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_mean
+
+struct ggml_tensor * ggml_mean(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a) {
+    bool is_node = false;
+
+    if (a->grad) {
+        GGML_ASSERT(false); // TODO: implement
+        is_node = true;
+    }
+
+    int64_t ne[4] = { 1, a->ne[1], a->ne[2], a->ne[3] };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
+
+    result->op   = GGML_OP_MEAN;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_argmax
+
+struct ggml_tensor * ggml_argmax(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a) {
+    GGML_ASSERT(ggml_is_matrix(a));
+    bool is_node = false;
+
+    if (a->grad) {
+        GGML_ASSERT(false);
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, a->ne[1]);
+
+    result->op   = GGML_OP_ARGMAX;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_repeat
+
+struct ggml_tensor * ggml_repeat(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b) {
+    GGML_ASSERT(ggml_can_repeat(a, b));
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, b->ne);
+
+    result->op   = GGML_OP_REPEAT;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_repeat_back
+
+struct ggml_tensor * ggml_repeat_back(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b) {
+    GGML_ASSERT(ggml_can_repeat(b, a));
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    if (ggml_are_same_shape(a, b) && !is_node) {
+        return a;
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, b->ne);
+
+    result->op   = GGML_OP_REPEAT_BACK;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_concat
+
+struct ggml_tensor * ggml_concat(
+    struct ggml_context * ctx,
+    struct ggml_tensor * a,
+    struct ggml_tensor * b,
+    int dim) {
+    GGML_ASSERT(dim >= 0 && dim < GGML_MAX_DIMS);
+
+    int64_t ne[GGML_MAX_DIMS];
+    for (int d = 0; d < GGML_MAX_DIMS; ++d) {
+        if (d == dim) {
+            ne[d] = a->ne[d] + b->ne[d];
+            continue;
+        }
+        GGML_ASSERT(a->ne[d] == b->ne[d]);
+        ne[d] = a->ne[d];
+    }
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, GGML_MAX_DIMS, ne);
+
+    ggml_set_op_params_i32(result, 0, dim);
+
+    result->op = GGML_OP_CONCAT;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// ggml_abs
+
+struct ggml_tensor * ggml_abs(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_ABS);
+}
+
+struct ggml_tensor * ggml_abs_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_ABS);
+}
+
+// ggml_sgn
+
+struct ggml_tensor * ggml_sgn(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_SGN);
+}
+
+struct ggml_tensor * ggml_sgn_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_SGN);
+}
+
+// ggml_neg
+
+struct ggml_tensor * ggml_neg(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_NEG);
+}
+
+struct ggml_tensor * ggml_neg_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_NEG);
+}
+
+// ggml_step
+
+struct ggml_tensor * ggml_step(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_STEP);
+}
+
+struct ggml_tensor * ggml_step_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_STEP);
+}
+
+// ggml_tanh
+
+struct ggml_tensor * ggml_tanh(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_TANH);
+}
+
+struct ggml_tensor * ggml_tanh_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_TANH);
+}
+
+// ggml_elu
+
+struct ggml_tensor * ggml_elu(
+    struct ggml_context * ctx,
+    struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_ELU);
+}
+
+struct ggml_tensor * ggml_elu_inplace(
+    struct ggml_context * ctx,
+    struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_ELU);
+}
+
+// ggml_relu
+
+struct ggml_tensor * ggml_relu(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_RELU);
+}
+
+struct ggml_tensor * ggml_relu_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_RELU);
+}
+
+// ggml_leaky_relu
+
+struct ggml_tensor * ggml_leaky_relu(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a, float negative_slope, bool inplace) {
+    bool is_node = false;
+
+    if (!inplace && (a->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params(result, &negative_slope, sizeof(negative_slope));
+
+    result->op   = GGML_OP_LEAKY_RELU;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_sigmoid
+
+struct ggml_tensor * ggml_sigmoid(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_SIGMOID);
+}
+
+struct ggml_tensor * ggml_sigmoid_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_SIGMOID);
+}
+
+// ggml_gelu
+
+struct ggml_tensor * ggml_gelu(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_GELU);
+}
+
+struct ggml_tensor * ggml_gelu_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_GELU);
+}
+
+// ggml_gelu_quick
+
+struct ggml_tensor * ggml_gelu_quick(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_GELU_QUICK);
+}
+
+struct ggml_tensor * ggml_gelu_quick_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_GELU_QUICK);
+}
+
+// ggml_silu
+
+struct ggml_tensor * ggml_silu(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_SILU);
+}
+
+struct ggml_tensor * ggml_silu_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary_inplace(ctx, a, GGML_UNARY_OP_SILU);
+}
+
+// ggml_silu_back
+
+struct ggml_tensor * ggml_silu_back(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        // TODO: implement backward
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_SILU_BACK;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// ggml hardswish
+struct ggml_tensor * ggml_hardswish(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_HARDSWISH);
+}
+
+// ggml hardsigmoid
+struct ggml_tensor * ggml_hardsigmoid(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_unary(ctx, a, GGML_UNARY_OP_HARDSIGMOID);
+}
+
+// ggml_norm
+
+static struct ggml_tensor * ggml_norm_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        float eps,
+        bool inplace) {
+    bool is_node = false;
+
+    if (!inplace && (a->grad)) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params(result, &eps, sizeof(eps));
+
+    result->op   = GGML_OP_NORM;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_norm(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        float eps) {
+    return ggml_norm_impl(ctx, a, eps, false);
+}
+
+struct ggml_tensor * ggml_norm_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        float eps) {
+    return ggml_norm_impl(ctx, a, eps, true);
+}
+
+// ggml_rms_norm
+
+static struct ggml_tensor * ggml_rms_norm_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        float eps,
+        bool inplace) {
+    bool is_node = false;
+
+    if (!inplace && (a->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params(result, &eps, sizeof(eps));
+
+    result->op   = GGML_OP_RMS_NORM;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_rms_norm(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        float  eps) {
+    return ggml_rms_norm_impl(ctx, a, eps, false);
+}
+
+struct ggml_tensor * ggml_rms_norm_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        float eps) {
+    return ggml_rms_norm_impl(ctx, a, eps, true);
+}
+
+// ggml_rms_norm_back
+
+struct ggml_tensor * ggml_rms_norm_back(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        float  eps) {
+    bool is_node = false;
+
+    if (a->grad) {
+        // TODO: implement backward
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params(result, &eps, sizeof(eps));
+
+    result->op   = GGML_OP_RMS_NORM_BACK;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// ggml_group_norm
+
+static struct ggml_tensor * ggml_group_norm_impl(
+    struct ggml_context * ctx,
+    struct ggml_tensor * a,
+    int n_groups,
+    bool inplace) {
+
+    bool is_node = false;
+    if (!inplace && (a->grad)) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op_params[0] = n_groups;
+
+    result->op = GGML_OP_GROUP_NORM;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_group_norm(
+    struct ggml_context * ctx,
+    struct ggml_tensor * a,
+    int n_groups) {
+    return ggml_group_norm_impl(ctx, a, n_groups, false);
+}
+
+struct ggml_tensor * ggml_group_norm_inplace(
+    struct ggml_context * ctx,
+    struct ggml_tensor * a,
+    int n_groups) {
+    return ggml_group_norm_impl(ctx, a, n_groups, true);
+}
+
+// ggml_mul_mat
+
+struct ggml_tensor * ggml_mul_mat(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    GGML_ASSERT(ggml_can_mul_mat(a, b));
+    GGML_ASSERT(!ggml_is_transposed(a));
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        is_node = true;
+    }
+
+    const int64_t ne[4] = { a->ne[1], b->ne[1], b->ne[2], b->ne[3] };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
+
+    result->op   = GGML_OP_MUL_MAT;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+void ggml_mul_mat_set_prec(
+        struct ggml_tensor * a,
+        enum ggml_prec       prec) {
+    GGML_ASSERT(a->op == GGML_OP_MUL_MAT);
+
+    const int32_t prec_i32 = (int32_t) prec;
+
+    ggml_set_op_params_i32(a, 0, prec_i32);
+}
+
+// ggml_mul_mat_id
+
+/*
+    c = ggml_mul_mat_id(ctx, as, b, ids);
+
+    as  -> [cols, rows, n_expert]
+    ids -> [n_experts_used, n_tokens] (i32)
+    b   -> [cols, n_expert_used, n_tokens]
+    c   -> [cols, n_expert_used, n_tokens]
+
+    in b, n_experts_used can be broadcasted to match the n_expert_used of ids
+
+    c ~= as[:,:,i] @ b[:,i%r,t], i = ids[e,t] for all e,t in ids
+*/
+struct ggml_tensor * ggml_mul_mat_id(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * as,
+        struct ggml_tensor  * b,
+        struct ggml_tensor  * ids) {
+    GGML_ASSERT(!ggml_is_transposed(as));
+    GGML_ASSERT(ids->type == GGML_TYPE_I32);
+
+    GGML_ASSERT(as->ne[3] == 1); // as is 3d (one matrix per expert)
+    GGML_ASSERT(b->ne[3] == 1); // b is 3d
+    GGML_ASSERT(ids->ne[2] == 1 && ids->ne[3] == 1); // ids is 2d
+    GGML_ASSERT(ids->ne[1] == b->ne[2]); // must have an expert list per b row
+    GGML_ASSERT(as->ne[0] == b->ne[0]); // can_mul_mat
+    GGML_ASSERT(ids->ne[0] % b->ne[1] == 0); // can broadcast
+
+    bool is_node = false;
+
+    if (as->grad || b->grad) {
+        is_node = true;
+    }
+
+    const int64_t ne[4] = { as->ne[1], ids->ne[0], b->ne[2], 1 };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
+
+    result->op   = GGML_OP_MUL_MAT_ID;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = as;
+    result->src[1] = b;
+    result->src[2] = ids;
+
+    return result;
+}
+
+// ggml_out_prod
+
+struct ggml_tensor * ggml_out_prod(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    GGML_ASSERT(ggml_can_out_prod(a, b));
+    GGML_ASSERT(!ggml_is_transposed(a));
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        is_node = true;
+    }
+
+    // a is broadcastable to b for ne[2] and ne[3] -> use b->ne[2] and b->ne[3]
+    const int64_t ne[4] = { a->ne[0], b->ne[0], b->ne[2], b->ne[3] };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
+
+    result->op   = GGML_OP_OUT_PROD;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// ggml_scale
+
+static struct ggml_tensor * ggml_scale_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        float                 s,
+        bool inplace) {
+    GGML_ASSERT(ggml_is_padded_1d(a));
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params(result, &s, sizeof(s));
+
+    result->op   = GGML_OP_SCALE;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_scale(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        float                s) {
+    return ggml_scale_impl(ctx, a, s, false);
+}
+
+struct ggml_tensor * ggml_scale_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        float                s) {
+    return ggml_scale_impl(ctx, a, s, true);
+}
+
+// ggml_set
+
+static struct ggml_tensor * ggml_set_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        size_t                nb1,
+        size_t                nb2,
+        size_t                nb3,
+        size_t                offset,
+        bool inplace) {
+    GGML_ASSERT(ggml_nelements(a) >= ggml_nelements(b));
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        is_node = true;
+    }
+
+    // make a view of the destination
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    int32_t params[] = { nb1, nb2, nb3, offset, inplace ? 1 : 0 };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_SET;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_set(
+        struct ggml_context * ctx,
+        struct ggml_tensor *  a,
+        struct ggml_tensor *  b,
+        size_t                nb1,
+        size_t                nb2,
+        size_t                nb3,
+        size_t                offset) {
+    return ggml_set_impl(ctx, a, b, nb1, nb2, nb3, offset, false);
+}
+
+struct ggml_tensor * ggml_set_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor *  a,
+        struct ggml_tensor *  b,
+        size_t                nb1,
+        size_t                nb2,
+        size_t                nb3,
+        size_t                offset) {
+    return ggml_set_impl(ctx, a, b, nb1, nb2, nb3, offset, true);
+}
+
+struct ggml_tensor * ggml_set_1d(
+        struct ggml_context * ctx,
+        struct ggml_tensor *  a,
+        struct ggml_tensor *  b,
+        size_t                offset) {
+    return ggml_set_impl(ctx, a, b, a->nb[1], a->nb[2], a->nb[3], offset, false);
+}
+
+struct ggml_tensor * ggml_set_1d_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor *  a,
+        struct ggml_tensor *  b,
+        size_t                offset) {
+    return ggml_set_impl(ctx, a, b, a->nb[1], a->nb[2], a->nb[3], offset, true);
+}
+
+struct ggml_tensor * ggml_set_2d(
+        struct ggml_context * ctx,
+        struct ggml_tensor *  a,
+        struct ggml_tensor *  b,
+        size_t                nb1,
+        size_t                offset) {
+    return ggml_set_impl(ctx, a, b, nb1, a->nb[2], a->nb[3], offset, false);
+}
+
+struct ggml_tensor * ggml_set_2d_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor *  a,
+        struct ggml_tensor *  b,
+        size_t                nb1,
+        size_t                offset) {
+    return ggml_set_impl(ctx, a, b, nb1, a->nb[2], a->nb[3], offset, true);
+}
+
+// ggml_cpy
+
+static struct ggml_tensor * ggml_cpy_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    GGML_ASSERT(ggml_nelements(a) == ggml_nelements(b));
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        // inplace is false and either one have a grad
+        is_node = true;
+    }
+
+    // make a view of the destination
+    struct ggml_tensor * result = ggml_view_tensor(ctx, b);
+    if (strlen(b->name) > 0) {
+        ggml_format_name(result, "%s (copy of %s)", b->name, a->name);
+    } else {
+        ggml_format_name(result, "%s (copy)", a->name);
+    }
+
+    result->op   = GGML_OP_CPY;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_cpy(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b) {
+    return ggml_cpy_impl(ctx, a, b);
+}
+
+struct ggml_tensor * ggml_cast(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        enum   ggml_type      type) {
+    bool is_node = false;
+
+    struct ggml_tensor * result = ggml_new_tensor(ctx, type, GGML_MAX_DIMS, a->ne);
+    ggml_format_name(result, "%s (copy)", a->name);
+
+    result->op   = GGML_OP_CPY;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = result;
+
+    return result;
+}
+
+// ggml_cont
+
+static struct ggml_tensor * ggml_cont_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_dup_tensor(ctx, a);
+    ggml_format_name(result, "%s (cont)", a->name);
+
+    result->op   = GGML_OP_CONT;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_cont(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a) {
+    return ggml_cont_impl(ctx, a);
+}
+
+// make contiguous, with new shape
+GGML_API struct ggml_tensor * ggml_cont_1d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0) {
+    return ggml_cont_4d(ctx, a, ne0, 1, 1, 1);
+}
+
+GGML_API struct ggml_tensor * ggml_cont_2d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0,
+        int64_t               ne1) {
+    return ggml_cont_4d(ctx, a, ne0, ne1, 1, 1);
+}
+
+GGML_API struct ggml_tensor * ggml_cont_3d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0,
+        int64_t               ne1,
+        int64_t               ne2) {
+    return ggml_cont_4d(ctx, a, ne0, ne1, ne2, 1);
+}
+
+struct ggml_tensor * ggml_cont_4d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0,
+        int64_t               ne1,
+        int64_t               ne2,
+        int64_t               ne3) {
+    GGML_ASSERT(ggml_nelements(a) == (ne0*ne1*ne2*ne3));
+
+    bool is_node = false;
+
+    struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type, ne0, ne1, ne2, ne3);
+    ggml_format_name(result, "%s (cont)", a->name);
+
+    result->op   = GGML_OP_CONT;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_reshape
+
+struct ggml_tensor * ggml_reshape(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        struct ggml_tensor * b) {
+    GGML_ASSERT(ggml_is_contiguous(a));
+    // as only the shape of b is relevant, and not its memory layout, b is allowed to be non contiguous.
+    GGML_ASSERT(ggml_nelements(a) == ggml_nelements(b));
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    if (b->grad) {
+        // gradient propagation is not supported
+        //GGML_ASSERT(false);
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, GGML_MAX_DIMS, b->ne, a, 0);
+    ggml_format_name(result, "%s (reshaped)", a->name);
+
+    result->op   = GGML_OP_RESHAPE;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_reshape_1d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0) {
+    GGML_ASSERT(ggml_is_contiguous(a));
+    GGML_ASSERT(ggml_nelements(a) == ne0);
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    const int64_t ne[1] = { ne0 };
+    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 1, ne, a, 0);
+    ggml_format_name(result, "%s (reshaped)", a->name);
+
+    result->op   = GGML_OP_RESHAPE;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_reshape_2d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0,
+        int64_t               ne1) {
+    GGML_ASSERT(ggml_is_contiguous(a));
+    GGML_ASSERT(ggml_nelements(a) == ne0*ne1);
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    const int64_t ne[2] = { ne0, ne1 };
+    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 2, ne, a, 0);
+    ggml_format_name(result, "%s (reshaped)", a->name);
+
+    result->op   = GGML_OP_RESHAPE;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_reshape_3d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0,
+        int64_t               ne1,
+        int64_t               ne2) {
+    GGML_ASSERT(ggml_is_contiguous(a));
+    GGML_ASSERT(ggml_nelements(a) == ne0*ne1*ne2);
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    const int64_t ne[3] = { ne0, ne1, ne2 };
+    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 3, ne, a, 0);
+    ggml_format_name(result, "%s (reshaped)", a->name);
+
+    result->op   = GGML_OP_RESHAPE;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_reshape_4d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0,
+        int64_t               ne1,
+        int64_t               ne2,
+        int64_t               ne3) {
+    GGML_ASSERT(ggml_is_contiguous(a));
+    GGML_ASSERT(ggml_nelements(a) == ne0*ne1*ne2*ne3);
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    const int64_t ne[4] = { ne0, ne1, ne2, ne3 };
+    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, 4, ne, a, 0);
+    ggml_format_name(result, "%s (reshaped)", a->name);
+
+    result->op   = GGML_OP_RESHAPE;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+static struct ggml_tensor * ggml_view_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   n_dims,
+        const int64_t       * ne,
+        size_t                offset) {
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor_impl(ctx, a->type, n_dims, ne, a, offset);
+    ggml_format_name(result, "%s (view)", a->name);
+
+    ggml_set_op_params(result, &offset, sizeof(offset));
+
+    result->op   = GGML_OP_VIEW;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_view_1d
+
+struct ggml_tensor * ggml_view_1d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0,
+        size_t                offset) {
+
+    struct ggml_tensor * result = ggml_view_impl(ctx, a, 1, &ne0, offset);
+
+    return result;
+}
+
+// ggml_view_2d
+
+struct ggml_tensor * ggml_view_2d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0,
+        int64_t               ne1,
+        size_t                nb1,
+        size_t                offset) {
+
+    const int64_t ne[2] = { ne0, ne1 };
+
+    struct ggml_tensor * result = ggml_view_impl(ctx, a, 2, ne, offset);
+
+    result->nb[1] = nb1;
+    result->nb[2] = result->nb[1]*ne1;
+    result->nb[3] = result->nb[2];
+
+    return result;
+}
+
+// ggml_view_3d
+
+struct ggml_tensor * ggml_view_3d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0,
+        int64_t               ne1,
+        int64_t               ne2,
+        size_t                nb1,
+        size_t                nb2,
+        size_t                offset) {
+
+    const int64_t ne[3] = { ne0, ne1, ne2 };
+
+    struct ggml_tensor * result = ggml_view_impl(ctx, a, 3, ne, offset);
+
+    result->nb[1] = nb1;
+    result->nb[2] = nb2;
+    result->nb[3] = result->nb[2]*ne2;
+
+    return result;
+}
+
+// ggml_view_4d
+
+struct ggml_tensor * ggml_view_4d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int64_t               ne0,
+        int64_t               ne1,
+        int64_t               ne2,
+        int64_t               ne3,
+        size_t                nb1,
+        size_t                nb2,
+        size_t                nb3,
+        size_t                offset) {
+
+    const int64_t ne[4] = { ne0, ne1, ne2, ne3 };
+
+    struct ggml_tensor * result = ggml_view_impl(ctx, a, 4, ne, offset);
+
+    result->nb[1] = nb1;
+    result->nb[2] = nb2;
+    result->nb[3] = nb3;
+
+    return result;
+}
+
+// ggml_permute
+
+struct ggml_tensor * ggml_permute(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   axis0,
+        int                   axis1,
+        int                   axis2,
+        int                   axis3) {
+    GGML_ASSERT(axis0 >= 0 && axis0 < GGML_MAX_DIMS);
+    GGML_ASSERT(axis1 >= 0 && axis1 < GGML_MAX_DIMS);
+    GGML_ASSERT(axis2 >= 0 && axis2 < GGML_MAX_DIMS);
+    GGML_ASSERT(axis3 >= 0 && axis3 < GGML_MAX_DIMS);
+
+    GGML_ASSERT(axis0 != axis1);
+    GGML_ASSERT(axis0 != axis2);
+    GGML_ASSERT(axis0 != axis3);
+    GGML_ASSERT(axis1 != axis2);
+    GGML_ASSERT(axis1 != axis3);
+    GGML_ASSERT(axis2 != axis3);
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_view_tensor(ctx, a);
+    ggml_format_name(result, "%s (permuted)", a->name);
+
+    int ne[GGML_MAX_DIMS];
+    int nb[GGML_MAX_DIMS];
+
+    ne[axis0] = a->ne[0];
+    ne[axis1] = a->ne[1];
+    ne[axis2] = a->ne[2];
+    ne[axis3] = a->ne[3];
+
+    nb[axis0] = a->nb[0];
+    nb[axis1] = a->nb[1];
+    nb[axis2] = a->nb[2];
+    nb[axis3] = a->nb[3];
+
+    result->ne[0] = ne[0];
+    result->ne[1] = ne[1];
+    result->ne[2] = ne[2];
+    result->ne[3] = ne[3];
+
+    result->nb[0] = nb[0];
+    result->nb[1] = nb[1];
+    result->nb[2] = nb[2];
+    result->nb[3] = nb[3];
+
+    result->op   = GGML_OP_PERMUTE;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    int32_t params[] = { axis0, axis1, axis2, axis3 };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    return result;
+}
+
+// ggml_transpose
+
+struct ggml_tensor * ggml_transpose(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_view_tensor(ctx, a);
+    ggml_format_name(result, "%s (transposed)", a->name);
+
+    result->ne[0] = a->ne[1];
+    result->ne[1] = a->ne[0];
+
+    result->nb[0] = a->nb[1];
+    result->nb[1] = a->nb[0];
+
+    result->op   = GGML_OP_TRANSPOSE;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_get_rows
+
+struct ggml_tensor * ggml_get_rows(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    GGML_ASSERT(a->ne[2] == b->ne[1]);
+    GGML_ASSERT(b->ne[3] == 1);
+    GGML_ASSERT(b->type == GGML_TYPE_I32);
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        is_node = true;
+    }
+
+    // TODO: implement non F32 return
+    enum ggml_type type = GGML_TYPE_F32;
+    if (a->type == GGML_TYPE_I32) {
+        type = a->type;
+    }
+    struct ggml_tensor * result = ggml_new_tensor_4d(ctx, type, a->ne[0], b->ne[0], b->ne[1], b->ne[2]);
+
+    result->op   = GGML_OP_GET_ROWS;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// ggml_get_rows_back
+
+struct ggml_tensor * ggml_get_rows_back(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        struct ggml_tensor  * c) {
+    GGML_ASSERT(ggml_is_matrix(a) && ggml_is_vector(b) && b->type == GGML_TYPE_I32);
+    GGML_ASSERT(ggml_is_matrix(c) && (a->ne[0] == c->ne[0]));
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        is_node = true;
+    }
+
+    // TODO: implement non F32 return
+    //struct ggml_tensor * result = ggml_new_tensor_2d(ctx, a->type, a->ne[0], b->ne[0]);
+    struct ggml_tensor * result = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, c->ne[0], c->ne[1]);
+
+    result->op   = GGML_OP_GET_ROWS_BACK;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// ggml_diag
+
+struct ggml_tensor * ggml_diag(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    GGML_ASSERT(a->ne[1] == 1);
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    const int64_t ne[4] = { a->ne[0], a->ne[0], a->ne[2], a->ne[3] };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, a->type, 4, ne);
+
+    result->op   = GGML_OP_DIAG;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_diag_mask_inf
+
+static struct ggml_tensor * ggml_diag_mask_inf_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   n_past,
+        bool                  inplace) {
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    int32_t params[] = { n_past };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_DIAG_MASK_INF;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_diag_mask_inf(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   n_past) {
+    return ggml_diag_mask_inf_impl(ctx, a, n_past, false);
+}
+
+struct ggml_tensor * ggml_diag_mask_inf_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   n_past) {
+    return ggml_diag_mask_inf_impl(ctx, a, n_past, true);
+}
+
+// ggml_diag_mask_zero
+
+static struct ggml_tensor * ggml_diag_mask_zero_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   n_past,
+        bool                  inplace) {
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    int32_t params[] = { n_past };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_DIAG_MASK_ZERO;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_diag_mask_zero(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   n_past) {
+    return ggml_diag_mask_zero_impl(ctx, a, n_past, false);
+}
+
+struct ggml_tensor * ggml_diag_mask_zero_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   n_past) {
+    return ggml_diag_mask_zero_impl(ctx, a, n_past, true);
+}
+
+// ggml_soft_max
+
+static struct ggml_tensor * ggml_soft_max_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * mask,
+        float                 scale,
+        float                 max_bias,
+        bool                  inplace) {
+    GGML_ASSERT(ggml_is_contiguous(a));
+
+    if (mask) {
+        GGML_ASSERT(mask->type == GGML_TYPE_F16 || mask->type == GGML_TYPE_F32);
+        GGML_ASSERT(ggml_is_contiguous(mask));
+        GGML_ASSERT(ggml_is_matrix(mask));
+        GGML_ASSERT(mask->ne[0] == a->ne[0]);
+        GGML_ASSERT(mask->ne[1] >= a->ne[1]);
+    }
+
+    if (max_bias > 0.0f) {
+        GGML_ASSERT(mask);
+    }
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    float params[] = { scale, max_bias };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_SOFT_MAX;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = mask;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_soft_max(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_soft_max_impl(ctx, a, NULL, 1.0f, 0.0f, false);
+}
+
+struct ggml_tensor * ggml_soft_max_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a) {
+    return ggml_soft_max_impl(ctx, a, NULL, 1.0f, 0.0f, true);
+}
+
+struct ggml_tensor * ggml_soft_max_ext(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * mask,
+        float                 scale,
+        float                 max_bias) {
+    return ggml_soft_max_impl(ctx, a, mask, scale, max_bias, false);
+}
+
+// ggml_soft_max_back
+
+static struct ggml_tensor * ggml_soft_max_back_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        bool                  inplace) {
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        is_node = true; // TODO : implement backward pass
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_SOFT_MAX_BACK;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_soft_max_back(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    return ggml_soft_max_back_impl(ctx, a, b, false);
+}
+
+struct ggml_tensor * ggml_soft_max_back_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    return ggml_soft_max_back_impl(ctx, a, b, true);
+}
+
+// ggml_rope
+
+static struct ggml_tensor * ggml_rope_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        struct ggml_tensor  * c,
+        int                   n_dims,
+        int                   mode,
+        int                   n_ctx_orig,
+        float                 freq_base,
+        float                 freq_scale,
+        float                 ext_factor,
+        float                 attn_factor,
+        float                 beta_fast,
+        float                 beta_slow,
+        bool                  inplace) {
+    GGML_ASSERT((mode & 1) == 0 && "mode & 1 == 1 is no longer supported");
+
+    GGML_ASSERT(ggml_is_vector(b));
+    GGML_ASSERT(b->type == GGML_TYPE_I32);
+    GGML_ASSERT(a->ne[2] == b->ne[0]);
+
+    if (c) {
+        GGML_ASSERT(c->type == GGML_TYPE_F32);
+        GGML_ASSERT(c->ne[0] >= n_dims / 2);
+    }
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    int32_t params[11] = { /*n_past*/ 0, n_dims, mode, /*n_ctx*/ 0, n_ctx_orig };
+    memcpy(params +  5, &freq_base,    sizeof(float));
+    memcpy(params +  6, &freq_scale,   sizeof(float));
+    memcpy(params +  7, &ext_factor,   sizeof(float));
+    memcpy(params +  8, &attn_factor,  sizeof(float));
+    memcpy(params +  9, &beta_fast,    sizeof(float));
+    memcpy(params + 10, &beta_slow,    sizeof(float));
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_ROPE;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+    result->src[2] = c;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_rope(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        int                   n_dims,
+        int                   mode) {
+    return ggml_rope_impl(
+        ctx, a, b, NULL, n_dims, mode, 0, 10000.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, false
+    );
+}
+
+struct ggml_tensor * ggml_rope_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        int                   n_dims,
+        int                   mode) {
+    return ggml_rope_impl(
+        ctx, a, b, NULL, n_dims, mode, 0, 10000.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, true
+    );
+}
+
+struct ggml_tensor * ggml_rope_ext(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        struct ggml_tensor  * c,
+        int                   n_dims,
+        int                   mode,
+        int                   n_ctx_orig,
+        float                 freq_base,
+        float                 freq_scale,
+        float                 ext_factor,
+        float                 attn_factor,
+        float                 beta_fast,
+        float                 beta_slow) {
+    return ggml_rope_impl(
+        ctx, a, b, c, n_dims, mode, n_ctx_orig, freq_base, freq_scale,
+        ext_factor, attn_factor, beta_fast, beta_slow, false
+    );
+}
+
+struct ggml_tensor * ggml_rope_ext_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        struct ggml_tensor  * c,
+        int                   n_dims,
+        int                   mode,
+        int                   n_ctx_orig,
+        float                 freq_base,
+        float                 freq_scale,
+        float                 ext_factor,
+        float                 attn_factor,
+        float                 beta_fast,
+        float                 beta_slow) {
+    return ggml_rope_impl(
+        ctx, a, b, c, n_dims, mode, n_ctx_orig, freq_base, freq_scale,
+        ext_factor, attn_factor, beta_fast, beta_slow, true
+    );
+}
+
+struct ggml_tensor * ggml_rope_custom(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        int                   n_dims,
+        int                   mode,
+        int                   n_ctx_orig,
+        float                 freq_base,
+        float                 freq_scale,
+        float                 ext_factor,
+        float                 attn_factor,
+        float                 beta_fast,
+        float                 beta_slow) {
+    return ggml_rope_impl(
+        ctx, a, b, NULL, n_dims, mode, n_ctx_orig, freq_base, freq_scale,
+        ext_factor, attn_factor, beta_fast, beta_slow, false
+    );
+}
+
+struct ggml_tensor * ggml_rope_custom_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        int                   n_dims,
+        int                   mode,
+        int                   n_ctx_orig,
+        float                 freq_base,
+        float                 freq_scale,
+        float                 ext_factor,
+        float                 attn_factor,
+        float                 beta_fast,
+        float                 beta_slow) {
+    return ggml_rope_impl(
+        ctx, a, b, NULL, n_dims, mode, n_ctx_orig, freq_base, freq_scale,
+        ext_factor, attn_factor, beta_fast, beta_slow, true
+    );
+}
+
+// ggml_rope_back
+
+struct ggml_tensor * ggml_rope_back(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        struct ggml_tensor  * c,
+        int                   n_dims,
+        int                   mode,
+        int                   n_ctx_orig,
+        float                 freq_base,
+        float                 freq_scale,
+        float                 ext_factor,
+        float                 attn_factor,
+        float                 beta_fast,
+        float                 beta_slow) {
+    GGML_ASSERT(ggml_is_vector(b));
+    GGML_ASSERT(b->type == GGML_TYPE_I32);
+    GGML_ASSERT(a->ne[2] == b->ne[0]);
+    GGML_ASSERT(c == NULL && "freq factors not implemented yet");
+
+    GGML_ASSERT((mode & 4) == 0 && "ggml_rope_back() for ChatGLM not implemented yet");
+
+    bool is_node = false;
+
+    if (a->grad) {
+        is_node = false; // TODO: implement backward
+    }
+
+    struct ggml_tensor * result = ggml_dup_tensor(ctx, a);
+
+    int32_t params[11] = { /*n_past*/ 0, n_dims, mode, /*n_ctx*/ 0, n_ctx_orig };
+    memcpy(params +  5, &freq_base,    sizeof(float));
+    memcpy(params +  6, &freq_scale,   sizeof(float));
+    memcpy(params +  7, &ext_factor,   sizeof(float));
+    memcpy(params +  8, &attn_factor,  sizeof(float));
+    memcpy(params +  9, &beta_fast,    sizeof(float));
+    memcpy(params + 10, &beta_slow,    sizeof(float));
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_ROPE_BACK;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// ggml_clamp
+
+struct ggml_tensor * ggml_clamp(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        float                 min,
+        float                 max) {
+    bool is_node = false;
+
+    if (a->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    // TODO: when implement backward, fix this:
+    struct ggml_tensor * result = ggml_view_tensor(ctx, a);
+
+    float params[] = { min, max };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_CLAMP;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_conv_1d
+
+static int64_t ggml_calc_conv_output_size(int64_t ins, int64_t ks, int s, int p, int d) {
+    return (ins + 2 * p - d * (ks - 1) - 1) / s + 1;
+}
+
+GGML_API struct ggml_tensor * ggml_conv_1d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        int                   s0,
+        int                   p0,
+        int                   d0) {
+    struct ggml_tensor * im2col = ggml_im2col(ctx, a, b, s0, 0, p0, 0, d0, 0, false, GGML_TYPE_F16); // [N, OL, IC * K]
+
+    struct ggml_tensor * result =
+        ggml_mul_mat(ctx,
+                ggml_reshape_2d(ctx, im2col, im2col->ne[0], (im2col->ne[2] * im2col->ne[1])), // [N, OL, IC * K] => [N*OL, IC * K]
+                ggml_reshape_2d(ctx, a, (a->ne[0] * a->ne[1]), a->ne[2]));                    // [OC,IC, K] => [OC, IC * K]
+
+    result = ggml_reshape_3d(ctx, result, im2col->ne[1], a->ne[2], im2col->ne[2]); // [N, OC, OL]
+
+    return result;
+}
+
+// ggml_conv_1d_ph
+
+struct ggml_tensor* ggml_conv_1d_ph(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        int                   s,
+        int                   d) {
+    return ggml_conv_1d(ctx, a, b, s, a->ne[0] / 2, d);
+}
+
+// ggml_conv_transpose_1d
+
+static int64_t ggml_calc_conv_transpose_1d_output_size(int64_t ins, int64_t ks, int s, int p, int d) {
+    return (ins - 1) * s - 2 * p + d * (ks - 1) + 1;
+}
+
+GGML_API struct ggml_tensor * ggml_conv_transpose_1d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        int                   s0,
+        int                   p0,
+        int                   d0) {
+    GGML_ASSERT(ggml_is_matrix(b));
+    GGML_ASSERT(a->ne[2] == b->ne[1]);
+    GGML_ASSERT(a->ne[3] == 1);
+
+    GGML_ASSERT(p0 == 0);
+    GGML_ASSERT(d0 == 1);
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    const int64_t ne[4] = {
+        ggml_calc_conv_transpose_1d_output_size(b->ne[0], a->ne[0], s0, 0 /*p0*/, 1 /*d0*/),
+        a->ne[1], b->ne[2], 1,
+    };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
+
+    int32_t params[] = { s0, p0, d0 };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op = GGML_OP_CONV_TRANSPOSE_1D;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// ggml_conv_depthwise
+struct ggml_tensor * ggml_conv_depthwise_2d(
+    struct ggml_context * ctx,
+    struct ggml_tensor * a,
+    struct ggml_tensor * b,
+    int                  s0,
+    int                  s1,
+    int                  p0,
+    int                  p1,
+    int                  d0,
+    int                  d1) {
+
+    struct ggml_tensor * new_a = ggml_reshape_4d(ctx, a, a->ne[0], a->ne[1], 1, a->ne[2] * a->ne[3]);
+    struct ggml_tensor * im2col = ggml_im2col(ctx, new_a,
+                                        ggml_reshape_4d(ctx, b, b->ne[0], b->ne[1], 1, b->ne[2] * b->ne[3]),
+                                        s0, s1, p0, p1, d0, d1, true, GGML_TYPE_F16); // [N * IC, OH, OW, KH * KW]
+    struct ggml_tensor * new_b = ggml_reshape_4d(ctx, im2col, im2col->ne[0], im2col->ne[2] * im2col->ne[1], b->ne[2], b->ne[3]); // [N * IC, OH, OW, KH * KW] => [N, IC, OH * OW, KH * KW]
+
+    new_a = ggml_reshape_4d(ctx, new_a, (new_a->ne[0] * new_a->ne[1]), new_a->ne[2],  new_a->ne[3], 1);                       // [OC,1, KH, KW] => [1, OC, 1, KH * KW]
+    struct ggml_tensor * result = ggml_mul_mat(ctx, new_a, new_b);
+    result = ggml_reshape_4d(ctx, result, im2col->ne[1], im2col->ne[2], b->ne[2], b->ne[3]); // [N, OC, OH, OW]
+
+    return result;
+}
+// ggml_conv_2d
+
+// im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW]
+// a: [OC,IC, KH, KW]
+// b: [N, IC, IH, IW]
+// result: [N, OH, OW, IC*KH*KW]
+struct ggml_tensor * ggml_im2col(
+    struct ggml_context * ctx,
+    struct ggml_tensor  * a,
+    struct ggml_tensor  * b,
+    int                  s0,
+    int                  s1,
+    int                  p0,
+    int                  p1,
+    int                  d0,
+    int                  d1,
+    bool                 is_2D,
+    enum ggml_type       dst_type) {
+
+    if(is_2D) {
+        GGML_ASSERT(a->ne[2] == b->ne[2]);
+    } else {
+        GGML_ASSERT(a->ne[1] == b->ne[1]);
+    }
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    const int64_t OH = is_2D ? ggml_calc_conv_output_size(b->ne[1], a->ne[1], s1, p1, d1) : 0;
+    const int64_t OW =         ggml_calc_conv_output_size(b->ne[0], a->ne[0], s0, p0, d0);
+
+    const int64_t ne[4] = {
+        is_2D ? (a->ne[2] * a->ne[1] * a->ne[0]) : a->ne[1] * a->ne[0],
+        OW,
+        is_2D ? OH : b->ne[2],
+        is_2D ?      b->ne[3] : 1,
+    };
+
+    struct ggml_tensor * result = ggml_new_tensor(ctx, dst_type, 4, ne);
+    int32_t params[] = { s0, s1, p0, p1, d0, d1, (is_2D ? 1 : 0) };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op = GGML_OP_IM2COL;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// a: [OC,IC, KH, KW]
+// b: [N, IC, IH, IW]
+// result: [N, OC, OH, OW]
+struct ggml_tensor * ggml_conv_2d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        int                  s0,
+        int                  s1,
+        int                  p0,
+        int                  p1,
+        int                  d0,
+        int                  d1) {
+    struct ggml_tensor * im2col = ggml_im2col(ctx, a, b, s0, s1, p0, p1, d0, d1, true, GGML_TYPE_F16); // [N, OH, OW, IC * KH * KW]
+
+    struct ggml_tensor * result =
+        ggml_mul_mat(ctx,
+                ggml_reshape_2d(ctx, im2col, im2col->ne[0],  im2col->ne[3] * im2col->ne[2] * im2col->ne[1]), // [N, OH, OW, IC * KH * KW] => [N*OH*OW, IC * KH * KW]
+                ggml_reshape_2d(ctx, a, (a->ne[0] * a->ne[1] * a->ne[2]),  a->ne[3]));                       // [OC,IC, KH, KW] => [OC, IC * KH * KW]
+
+    result = ggml_reshape_4d(ctx, result, im2col->ne[1], im2col->ne[2], im2col->ne[3], a->ne[3]); // [OC, N, OH, OW]
+    result = ggml_cont(ctx, ggml_permute(ctx, result, 0, 1, 3, 2)); // [N, OC, OH, OW]
+
+
+    return result;
+}
+
+// ggml_conv_2d_sk_p0
+struct ggml_tensor * ggml_conv_2d_sk_p0(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    return ggml_conv_2d(ctx, a, b, a->ne[0], a->ne[1], 0, 0, 1, 1);
+}
+
+// ggml_conv_2d_s1_ph
+
+struct ggml_tensor * ggml_conv_2d_s1_ph(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b) {
+    return ggml_conv_2d(ctx, a, b, 1, 1, a->ne[0] / 2, a->ne[1] / 2, 1, 1);
+}
+
+// ggml_conv_transpose_2d_p0
+
+static int64_t ggml_calc_conv_transpose_output_size(int64_t ins, int64_t ks, int s, int p) {
+    return (ins - 1) * s - 2 * p + ks;
+}
+
+struct ggml_tensor * ggml_conv_transpose_2d_p0(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * b,
+        int                   stride) {
+    GGML_ASSERT(a->ne[3] == b->ne[2]);
+
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    const int64_t ne[4] = {
+        ggml_calc_conv_transpose_output_size(b->ne[0], a->ne[0], stride, 0 /*p0*/),
+        ggml_calc_conv_transpose_output_size(b->ne[1], a->ne[1], stride, 0 /*p1*/),
+        a->ne[2], b->ne[3],
+    };
+
+    struct ggml_tensor* result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
+
+    ggml_set_op_params_i32(result, 0, stride);
+
+    result->op = GGML_OP_CONV_TRANSPOSE_2D;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// ggml_pool_*
+
+static int64_t ggml_calc_pool_output_size(int64_t ins, int ks, int s, float p) {
+    return (ins + 2 * p - ks) / s + 1;
+}
+
+// ggml_pool_1d
+
+struct ggml_tensor * ggml_pool_1d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        enum ggml_op_pool     op,
+        int                   k0,
+        int                   s0,
+        int                   p0) {
+
+    bool is_node = false;
+
+    if (a->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    const int64_t ne[4] = {
+        ggml_calc_pool_output_size(a->ne[0], k0, s0, p0),
+        a->ne[1],
+        a->ne[2],
+        a->ne[3],
+    };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
+
+    int32_t params[] = { op, k0, s0, p0 };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op = GGML_OP_POOL_1D;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_pool_2d
+
+struct ggml_tensor * ggml_pool_2d(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        enum ggml_op_pool     op,
+        int                   k0,
+        int                   k1,
+        int                   s0,
+        int                   s1,
+        float                 p0,
+        float                 p1) {
+
+    bool is_node = false;
+
+    if (a->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    struct ggml_tensor * result;
+    const int64_t ne[3] = {
+        ggml_calc_pool_output_size(a->ne[0], k0, s0, p0),
+        ggml_calc_pool_output_size(a->ne[1], k1, s1, p1),
+        a->ne[2],
+    };
+    result = ggml_new_tensor(ctx, GGML_TYPE_F32, 3, ne);
+
+    int32_t params[] = { op, k0, k1, s0, s1, p0, p1 };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op = GGML_OP_POOL_2D;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    return result;
+}
+
+// ggml_upscale
+
+static struct ggml_tensor * ggml_upscale_impl(
+    struct ggml_context * ctx,
+    struct ggml_tensor * a,
+    int ne0,
+    int ne1,
+    int ne2,
+    int ne3) {
+    bool is_node = false;
+
+    if (a->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    GGML_ASSERT(a->ne[0] <= ne0);
+    GGML_ASSERT(a->ne[1] <= ne1);
+    GGML_ASSERT(a->ne[2] <= ne2);
+    GGML_ASSERT(a->ne[3] <= ne3);
+
+    struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type,
+            ne0,
+            ne1,
+            ne2,
+            ne3
+            );
+
+    result->op = GGML_OP_UPSCALE;
+
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_upscale(
+    struct ggml_context * ctx,
+    struct ggml_tensor * a,
+    int scale_factor) {
+    return ggml_upscale_impl(ctx, a, a->ne[0] * scale_factor, a->ne[1] * scale_factor, a->ne[2], a->ne[3]);
+}
+
+struct ggml_tensor * ggml_upscale_ext(
+    struct ggml_context * ctx,
+    struct ggml_tensor * a,
+    int ne0,
+    int ne1,
+    int ne2,
+    int ne3) {
+    return ggml_upscale_impl(ctx, a, ne0, ne1, ne2, ne3);
+}
+
+// ggml_pad
+
+struct ggml_tensor * ggml_pad(
+    struct ggml_context * ctx,
+    struct ggml_tensor  * a,
+    int p0, int p1, int p2, int p3) {
+    bool is_node = false;
+
+    if (a->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor_4d(ctx, a->type,
+            a->ne[0] + p0,
+            a->ne[1] + p1,
+            a->ne[2] + p2,
+            a->ne[3] + p3);
+
+    result->op = GGML_OP_PAD;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_arange
+
+struct ggml_tensor * ggml_arange(
+    struct ggml_context * ctx,
+    float start,
+    float stop,
+    float step) {
+
+    GGML_ASSERT(stop > start);
+
+    const int64_t steps = (int64_t) ceilf((stop - start) / step);
+
+    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, steps);
+
+    result->op = GGML_OP_ARANGE;
+    ggml_set_op_params_f32(result, 0, start);
+    ggml_set_op_params_f32(result, 1, stop);
+    ggml_set_op_params_f32(result, 2, step);
+
+    return result;
+}
+
+// ggml_timestep_embedding
+
+struct ggml_tensor * ggml_timestep_embedding(
+            struct ggml_context * ctx,
+            struct ggml_tensor  * timesteps,
+            int                   dim,
+            int                   max_period) {
+    bool is_node = false;
+
+    if (timesteps->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    int actual_dim = dim;
+    if (dim % 2 != 0) {
+        actual_dim = dim + 1;
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, actual_dim, timesteps->ne[0]);
+
+    result->op = GGML_OP_TIMESTEP_EMBEDDING;
+    ggml_set_op_params_i32(result, 0, dim);
+    ggml_set_op_params_i32(result, 1, max_period);
+
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = timesteps;
+
+    return result;
+}
+
+// ggml_argsort
+
+struct ggml_tensor * ggml_argsort(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        enum ggml_sort_order  order) {
+    bool is_node = false;
+
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_I32, GGML_MAX_DIMS, a->ne);
+
+    ggml_set_op_params_i32(result, 0, (int32_t) order);
+
+    result->op   = GGML_OP_ARGSORT;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_top_k
+
+struct ggml_tensor * ggml_top_k(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   k) {
+    GGML_ASSERT(a->ne[0] >= k);
+
+    struct ggml_tensor * result = ggml_argsort(ctx, a, GGML_SORT_ORDER_DESC);
+
+    result = ggml_view_4d(ctx, result,
+                k, result->ne[1], result->ne[2], result->ne[3],
+                   result->nb[1], result->nb[2], result->nb[3],
+                0);
+
+    return result;
+}
+
+// ggml_flash_attn_ext
+
+struct ggml_tensor * ggml_flash_attn_ext(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * q,
+        struct ggml_tensor  * k,
+        struct ggml_tensor  * v,
+        struct ggml_tensor  * mask,
+        float                 scale,
+        float                 max_bias) {
+    GGML_ASSERT(ggml_can_mul_mat(k, q));
+    // TODO: check if vT can be multiplied by (k*qT)
+
+    if (mask) {
+        GGML_ASSERT(ggml_is_contiguous(mask));
+        GGML_ASSERT(mask->ne[2] == 1);
+        GGML_ASSERT(mask->ne[3] == 1);
+        GGML_ASSERT(mask->ne[1] >= GGML_PAD(q->ne[1], GGML_KQ_MASK_PAD) &&
+                "the Flash-Attention kernel requires the mask to be padded to GGML_KQ_MASK_PAD and at least n_queries big");
+        //GGML_ASSERT(ggml_can_repeat_rows(mask, qk));
+    }
+
+    if (max_bias > 0.0f) {
+        GGML_ASSERT(mask);
+    }
+
+    bool is_node = false;
+
+    if (q->grad || k->grad || v->grad) {
+        is_node = true;
+    }
+
+    // permute(0, 2, 1, 3)
+    int64_t ne[4] = { q->ne[0], q->ne[2], q->ne[1], q->ne[3] };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
+
+    float params[] = { scale, max_bias };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_FLASH_ATTN_EXT;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = q;
+    result->src[1] = k;
+    result->src[2] = v;
+    result->src[3] = mask;
+
+    return result;
+}
+
+void ggml_flash_attn_ext_set_prec(
+        struct ggml_tensor * a,
+        enum ggml_prec       prec) {
+    GGML_ASSERT(a->op == GGML_OP_FLASH_ATTN_EXT);
+
+    const int32_t prec_i32 = (int32_t) prec;
+
+    ggml_set_op_params_i32(a, 2, prec_i32); // scale is on first pos, max_bias on second
+}
+
+// ggml_flash_attn_back
+
+struct ggml_tensor * ggml_flash_attn_back(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * q,
+        struct ggml_tensor  * k,
+        struct ggml_tensor  * v,
+        struct ggml_tensor  * d,
+        bool                  masked) {
+    GGML_ASSERT(false && "TODO: adapt to ggml_flash_attn_ext() changes");
+
+    GGML_ASSERT(ggml_can_mul_mat(k, q));
+    // TODO: check if vT can be multiplied by (k*qT)
+
+    // d shape [D,N,ne2,ne3]
+    // q shape [D,N,ne2,ne3]
+    // k shape [D,M,kvne2,ne3]
+    // v shape [M,D,kvne2,ne3]
+
+    const int64_t     D = q->ne[0];
+    const int64_t     N = q->ne[1];
+    const int64_t     M = k->ne[1];
+    const int64_t   ne2 = q->ne[2];
+    const int64_t   ne3 = q->ne[3];
+    const int64_t kvne2 = k->ne[2];
+
+    GGML_ASSERT(k->ne[0] == D);
+    GGML_ASSERT(v->ne[0] == M);
+    GGML_ASSERT(v->ne[1] == D);
+    GGML_ASSERT(d->ne[0] == D);
+    GGML_ASSERT(d->ne[1] == N);
+    GGML_ASSERT(k->ne[2] == kvne2);
+    GGML_ASSERT(k->ne[3] == ne3);
+    GGML_ASSERT(v->ne[2] == kvne2);
+    GGML_ASSERT(v->ne[3] == ne3);
+    GGML_ASSERT(d->ne[2] == ne2);
+    GGML_ASSERT(d->ne[3] == ne3);
+
+    GGML_ASSERT(ne2 % kvne2 == 0);
+
+    bool is_node = false;
+
+    if (q->grad || k->grad || v->grad) {
+        // when using this operation (in backwards pass) these grads are set.
+        // we don't want to create (big) grad of our result, so is_node is false.
+        is_node = false;
+    }
+
+    // store gradients of q, k and v as continuous tensors concatenated in result.
+    // note: v and gradv are actually transposed, i.e. v->ne[0] != D.
+    const int64_t elem_q = ggml_nelements(q);
+    const int64_t elem_k = ggml_nelements(k);
+    const int64_t elem_v = ggml_nelements(v);
+
+    enum ggml_type result_type = GGML_TYPE_F32;
+    GGML_ASSERT(ggml_blck_size(result_type) == 1);
+    const size_t tsize = ggml_type_size(result_type);
+
+    const size_t offs_q = 0;
+    const size_t offs_k = offs_q + GGML_PAD(elem_q * tsize, GGML_MEM_ALIGN);
+    const size_t offs_v = offs_k + GGML_PAD(elem_k * tsize, GGML_MEM_ALIGN);
+    const size_t end    = offs_v + GGML_PAD(elem_v * tsize, GGML_MEM_ALIGN);
+
+    const size_t nelements = (end + tsize - 1)/tsize;
+
+    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, nelements);
+
+    int32_t masked_i = masked ? 1 : 0;
+    ggml_set_op_params(result, &masked_i, sizeof(masked_i));
+
+    result->op   = GGML_OP_FLASH_ATTN_BACK;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = q;
+    result->src[1] = k;
+    result->src[2] = v;
+    result->src[3] = d;
+
+    return result;
+}
+
+// ggml_ssm_conv
+
+struct ggml_tensor * ggml_ssm_conv(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * s,
+        struct ggml_tensor  * x,
+        struct ggml_tensor  * c,
+        struct ggml_tensor  * sq) {
+    GGML_ASSERT(ggml_is_3d(s));
+    GGML_ASSERT(ggml_is_matrix(x));
+    GGML_ASSERT(ggml_is_matrix(c));
+    GGML_ASSERT(ggml_is_matrix(sq));
+    GGML_ASSERT(sq->type == GGML_TYPE_I32);
+
+    const int64_t d_conv   = c->ne[0];
+    const int64_t d_inner  = c->ne[1];
+    const int64_t n_tokens = x->ne[1];
+    const int64_t n_kv     = s->ne[2];
+
+    GGML_ASSERT( s->ne[0] == d_conv - 1);
+    GGML_ASSERT( s->ne[1] == d_inner);
+    GGML_ASSERT( x->ne[0] == d_inner);
+    GGML_ASSERT(sq->ne[0] == n_kv);
+    GGML_ASSERT(sq->ne[1] == n_tokens);
+
+    bool is_node = false;
+
+    if (s->grad || x->grad || c->grad || sq->grad) {
+        GGML_ASSERT(false); // TODO: implement
+        is_node = true;
+    }
+
+    // 2-in-1 concatenated x and conv_states, {d_inner, n_tokens} with {d_conv, d_inner, n_kv}
+    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, (d_inner*n_tokens) + (d_conv*d_inner*n_kv));
+
+    result->op   = GGML_OP_SSM_CONV;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = s;
+    result->src[1] = x;
+    result->src[2] = c;
+    result->src[3] = sq;
+
+    return result;
+}
+
+// ggml_ssm_scan
+
+struct ggml_tensor * ggml_ssm_scan(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * s,
+        struct ggml_tensor  * x,
+        struct ggml_tensor  * dt,
+        struct ggml_tensor  * A,
+        struct ggml_tensor  * B,
+        struct ggml_tensor  * C,
+        struct ggml_tensor  * sq) {
+    GGML_ASSERT(ggml_is_contiguous(s));
+    GGML_ASSERT(ggml_is_contiguous(x));
+    GGML_ASSERT(ggml_is_contiguous(dt));
+    GGML_ASSERT(ggml_is_contiguous(A));
+    GGML_ASSERT(sq->type == GGML_TYPE_I32);
+    GGML_ASSERT(B->nb[0] == ggml_type_size(B->type));
+    GGML_ASSERT(C->nb[0] == ggml_type_size(C->type));
+    GGML_ASSERT(ggml_are_same_shape(x, dt));
+
+    {
+        const int64_t d_state  = s->ne[0];
+        const int64_t d_inner  = s->ne[1];
+        const int64_t n_tokens = x->ne[1];
+
+        GGML_ASSERT(x->ne[0] == d_inner);
+        GGML_ASSERT(A->ne[0] == d_state);
+        GGML_ASSERT(A->ne[1] == d_inner);
+        GGML_ASSERT(B->ne[0] == d_state);
+        GGML_ASSERT(B->ne[1] == n_tokens);
+        GGML_ASSERT(C->ne[0] == d_state);
+        GGML_ASSERT(C->ne[1] == n_tokens);
+    }
+
+    bool is_node = false;
+
+    if (s->grad || x->grad || dt->grad || A->grad || B->grad || C->grad || sq->grad) {
+        GGML_ASSERT(false); // TODO: implement
+        is_node = true;
+    }
+
+    // 2-in-1 concatenated y and ssm_states, {d_inner, n_tokens} with {d_state, d_inner, n_kv}
+    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, ggml_nelements(x) + ggml_nelements(s));
+
+    result->op   = GGML_OP_SSM_SCAN;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = s;
+    result->src[1] = x;
+    result->src[2] = dt;
+    result->src[3] = A;
+    result->src[4] = B;
+    result->src[5] = C;
+    result->src[6] = sq;
+
+    return result;
+}
+
+// ggml_win_part
+
+struct ggml_tensor * ggml_win_part(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   w) {
+    GGML_ASSERT(a->ne[3] == 1);
+    GGML_ASSERT(a->type  == GGML_TYPE_F32);
+
+    bool is_node = false;
+
+    if (a->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    // padding
+    const int px = (w - a->ne[1]%w)%w;
+    const int py = (w - a->ne[2]%w)%w;
+
+    const int npx = (px + a->ne[1])/w;
+    const int npy = (py + a->ne[2])/w;
+    const int np  = npx*npy;
+
+    const int64_t ne[4] = { a->ne[0], w, w, np, };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne);
+
+    int32_t params[] = { npx, npy, w };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_WIN_PART;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_win_unpart
+
+struct ggml_tensor * ggml_win_unpart(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   w0,
+        int                   h0,
+        int                   w) {
+    GGML_ASSERT(a->type == GGML_TYPE_F32);
+
+    bool is_node = false;
+
+    if (a->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    const int64_t ne[4] = { a->ne[0], w0, h0, 1, };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F32, 3, ne);
+
+    int32_t params[] = { w };
+    ggml_set_op_params(result, params, sizeof(params));
+
+    result->op   = GGML_OP_WIN_UNPART;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_get_rel_pos
+
+struct ggml_tensor * ggml_get_rel_pos(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        int                   qh,
+        int                   kh) {
+    GGML_ASSERT(qh == kh);
+    GGML_ASSERT(2*MAX(qh, kh) - 1 == a->ne[1]);
+
+    bool is_node = false;
+
+    if (a->grad) {
+        GGML_ASSERT(false); // TODO: implement backward
+        is_node = true;
+    }
+
+    const int64_t ne[4] = { a->ne[0], kh, qh, 1, };
+    struct ggml_tensor * result = ggml_new_tensor(ctx, GGML_TYPE_F16, 3, ne);
+
+    result->op   = GGML_OP_GET_REL_POS;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+// ggml_add_rel_pos
+
+static struct ggml_tensor * ggml_add_rel_pos_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * pw,
+        struct ggml_tensor  * ph,
+        bool                  inplace) {
+    GGML_ASSERT(ggml_are_same_shape(pw, ph));
+    GGML_ASSERT(ggml_is_contiguous(a));
+    GGML_ASSERT(ggml_is_contiguous(pw));
+    GGML_ASSERT(ggml_is_contiguous(ph));
+    GGML_ASSERT(ph->type == GGML_TYPE_F32);
+    GGML_ASSERT(pw->type == GGML_TYPE_F32);
+    GGML_ASSERT(pw->ne[3] == a->ne[2]);
+    GGML_ASSERT(pw->ne[0]*pw->ne[0] == a->ne[0]);
+    GGML_ASSERT(pw->ne[1]*pw->ne[2] == a->ne[1]);
+
+    bool is_node = false;
+
+    if (!inplace && (a->grad || pw->grad || ph->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+    ggml_set_op_params_i32(result, 0, inplace ? 1 : 0);
+
+    result->op   = GGML_OP_ADD_REL_POS;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = pw;
+    result->src[2] = ph;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_add_rel_pos(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * pw,
+        struct ggml_tensor  * ph) {
+    return ggml_add_rel_pos_impl(ctx, a, pw, ph, false);
+}
+
+struct ggml_tensor * ggml_add_rel_pos_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        struct ggml_tensor  * pw,
+        struct ggml_tensor  * ph) {
+    return ggml_add_rel_pos_impl(ctx, a, pw, ph, true);
+}
+
+// ggml_unary
+
+static struct ggml_tensor * ggml_unary_impl(
+        struct ggml_context * ctx,
+        struct ggml_tensor * a,
+        enum ggml_unary_op op,
+        bool inplace) {
+    GGML_ASSERT(ggml_is_contiguous_1(a));
+
+    bool is_node = false;
+
+    if (!inplace && (a->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params_i32(result, 0, (int32_t) op);
+
+    result->op   = GGML_OP_UNARY;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_unary(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        enum ggml_unary_op op) {
+    return ggml_unary_impl(ctx, a, op, false);
+}
+
+struct ggml_tensor * ggml_unary_inplace(
+        struct ggml_context * ctx,
+        struct ggml_tensor  * a,
+        enum ggml_unary_op op) {
+    return ggml_unary_impl(ctx, a, op, true);
+}
+
+// ggml_map_unary
+
+static struct ggml_tensor * ggml_map_unary_impl_f32(
+        struct ggml_context        * ctx,
+        struct ggml_tensor         * a,
+        const  ggml_unary_op_f32_t fun,
+        bool   inplace) {
+    bool is_node = false;
+
+    if (!inplace && a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params(result, (const void *) &fun, sizeof(fun));
+
+    result->op = GGML_OP_MAP_UNARY;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_map_unary_f32(
+        struct ggml_context        * ctx,
+        struct ggml_tensor         * a,
+        const  ggml_unary_op_f32_t fun) {
+    return ggml_map_unary_impl_f32(ctx, a, fun, false);
+}
+
+struct ggml_tensor * ggml_map_unary_inplace_f32(
+        struct ggml_context        * ctx,
+        struct ggml_tensor         * a,
+        const  ggml_unary_op_f32_t fun) {
+    return ggml_map_unary_impl_f32(ctx, a, fun, true);
+}
+
+// ggml_map_binary
+
+static struct ggml_tensor * ggml_map_binary_impl_f32(
+        struct ggml_context         * ctx,
+        struct ggml_tensor          * a,
+        struct ggml_tensor          * b,
+        const  ggml_binary_op_f32_t fun,
+        bool   inplace) {
+    GGML_ASSERT(ggml_are_same_shape(a, b));
+
+    bool is_node = false;
+
+    if (!inplace && (a->grad || b->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params(result, (const void *) &fun, sizeof(fun));
+
+    result->op = GGML_OP_MAP_BINARY;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_map_binary_f32(
+        struct ggml_context         * ctx,
+        struct ggml_tensor          * a,
+        struct ggml_tensor          * b,
+        const  ggml_binary_op_f32_t fun) {
+    return ggml_map_binary_impl_f32(ctx, a, b, fun, false);
+}
+
+struct ggml_tensor * ggml_map_binary_inplace_f32(
+        struct ggml_context         * ctx,
+        struct ggml_tensor          * a,
+        struct ggml_tensor          * b,
+        const  ggml_binary_op_f32_t fun) {
+    return ggml_map_binary_impl_f32(ctx, a, b, fun, true);
+}
+
+// ggml_map_custom1_f32
+
+static struct ggml_tensor * ggml_map_custom1_impl_f32(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        const  ggml_custom1_op_f32_t   fun,
+        bool   inplace) {
+    bool is_node = false;
+
+    if (!inplace && a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params(result, (const void *) &fun, sizeof(fun));
+
+    result->op = GGML_OP_MAP_CUSTOM1_F32;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_map_custom1_f32(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        const  ggml_custom1_op_f32_t   fun) {
+    return ggml_map_custom1_impl_f32(ctx, a, fun, false);
+}
+
+struct ggml_tensor * ggml_map_custom1_inplace_f32(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        const  ggml_custom1_op_f32_t   fun) {
+    return ggml_map_custom1_impl_f32(ctx, a, fun, true);
+}
+
+// ggml_map_custom2_f32
+
+static struct ggml_tensor * ggml_map_custom2_impl_f32(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        const  ggml_custom2_op_f32_t   fun,
+        bool   inplace) {
+    bool is_node = false;
+
+    if (!inplace && (a->grad || b->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params(result, (const void *) &fun, sizeof(fun));
+
+    result->op = GGML_OP_MAP_CUSTOM2_F32;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_map_custom2_f32(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        const  ggml_custom2_op_f32_t   fun) {
+    return ggml_map_custom2_impl_f32(ctx, a, b, fun, false);
+}
+
+struct ggml_tensor * ggml_map_custom2_inplace_f32(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        const  ggml_custom2_op_f32_t   fun) {
+    return ggml_map_custom2_impl_f32(ctx, a, b, fun, true);
+}
+
+// ggml_map_custom3_f32
+
+static struct ggml_tensor * ggml_map_custom3_impl_f32(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        struct ggml_tensor           * c,
+        const  ggml_custom3_op_f32_t   fun,
+        bool   inplace) {
+    bool is_node = false;
+
+    if (!inplace && (a->grad || b->grad || c->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    ggml_set_op_params(result, (const void *) &fun, sizeof(fun));
+
+    result->op = GGML_OP_MAP_CUSTOM3_F32;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+    result->src[2] = c;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_map_custom3_f32(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        struct ggml_tensor           * c,
+        const  ggml_custom3_op_f32_t   fun) {
+    return ggml_map_custom3_impl_f32(ctx, a, b, c, fun, false);
+}
+
+struct ggml_tensor * ggml_map_custom3_inplace_f32(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        struct ggml_tensor           * c,
+        const  ggml_custom3_op_f32_t   fun) {
+    return ggml_map_custom3_impl_f32(ctx, a, b, c, fun, true);
+}
+
+// ggml_map_custom1
+struct ggml_map_custom1_op_params {
+    ggml_custom1_op_t fun;
+    int n_tasks;
+    void * userdata;
+};
+
+static struct ggml_tensor * ggml_map_custom1_impl(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        const  ggml_custom1_op_t       fun,
+        int                            n_tasks,
+        void                         * userdata,
+        bool                           inplace) {
+    GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0);
+
+    bool is_node = false;
+
+    if (!inplace && a->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    struct ggml_map_custom1_op_params params = {
+        /*.fun      =*/ fun,
+        /*.n_tasks  =*/ n_tasks,
+        /*.userdata =*/ userdata
+    };
+    ggml_set_op_params(result, (const void *) &params, sizeof(params));
+
+    result->op = GGML_OP_MAP_CUSTOM1;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_map_custom1(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        const  ggml_custom1_op_t       fun,
+        int                            n_tasks,
+        void                         * userdata) {
+    return ggml_map_custom1_impl(ctx, a, fun, n_tasks, userdata, false);
+}
+
+struct ggml_tensor * ggml_map_custom1_inplace(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        const  ggml_custom1_op_t       fun,
+        int                            n_tasks,
+        void                         * userdata) {
+    return ggml_map_custom1_impl(ctx, a, fun, n_tasks, userdata, true);
+}
+
+// ggml_map_custom2
+
+struct ggml_map_custom2_op_params {
+    ggml_custom2_op_t fun;
+    int n_tasks;
+    void * userdata;
+};
+
+static struct ggml_tensor * ggml_map_custom2_impl(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        const  ggml_custom2_op_t       fun,
+        int                            n_tasks,
+        void                         * userdata,
+        bool                           inplace) {
+    GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0);
+
+    bool is_node = false;
+
+    if (!inplace && (a->grad || b->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    struct ggml_map_custom2_op_params params = {
+        /*.fun      =*/ fun,
+        /*.n_tasks  =*/ n_tasks,
+        /*.userdata =*/ userdata
+    };
+    ggml_set_op_params(result, (const void *) &params, sizeof(params));
+
+    result->op = GGML_OP_MAP_CUSTOM2;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_map_custom2(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        const  ggml_custom2_op_t       fun,
+        int                            n_tasks,
+        void                         * userdata) {
+    return ggml_map_custom2_impl(ctx, a, b, fun, n_tasks, userdata, false);
+}
+
+struct ggml_tensor * ggml_map_custom2_inplace(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        const  ggml_custom2_op_t       fun,
+        int                            n_tasks,
+        void                         * userdata) {
+    return ggml_map_custom2_impl(ctx, a, b, fun, n_tasks, userdata, true);
+}
+
+// ggml_map_custom3
+
+struct ggml_map_custom3_op_params {
+    ggml_custom3_op_t fun;
+    int n_tasks;
+    void * userdata;
+};
+
+static struct ggml_tensor * ggml_map_custom3_impl(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        struct ggml_tensor           * c,
+        const  ggml_custom3_op_t       fun,
+        int                            n_tasks,
+        void                         * userdata,
+        bool                           inplace) {
+    GGML_ASSERT(n_tasks == GGML_N_TASKS_MAX || n_tasks > 0);
+
+    bool is_node = false;
+
+    if (!inplace && (a->grad || b->grad || c->grad)) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = inplace ? ggml_view_tensor(ctx, a) : ggml_dup_tensor(ctx, a);
+
+    struct ggml_map_custom3_op_params params = {
+        /*.fun      =*/ fun,
+        /*.n_tasks  =*/ n_tasks,
+        /*.userdata =*/ userdata
+    };
+    ggml_set_op_params(result, (const void *) &params, sizeof(params));
+
+    result->op = GGML_OP_MAP_CUSTOM3;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+    result->src[2] = c;
+
+    return result;
+}
+
+struct ggml_tensor * ggml_map_custom3(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        struct ggml_tensor           * c,
+        const  ggml_custom3_op_t       fun,
+        int                            n_tasks,
+        void                         * userdata) {
+    return ggml_map_custom3_impl(ctx, a, b, c, fun, n_tasks, userdata, false);
+}
+
+struct ggml_tensor * ggml_map_custom3_inplace(
+        struct ggml_context          * ctx,
+        struct ggml_tensor           * a,
+        struct ggml_tensor           * b,
+        struct ggml_tensor           * c,
+        const  ggml_custom3_op_t       fun,
+        int                            n_tasks,
+        void                         * userdata) {
+    return ggml_map_custom3_impl(ctx, a, b, c, fun, n_tasks, userdata, true);
+}
+
+// ggml_cross_entropy_loss
+
+struct ggml_tensor * ggml_cross_entropy_loss(
+        struct ggml_context         * ctx,
+        struct ggml_tensor          * a,
+        struct ggml_tensor          * b) {
+    GGML_ASSERT(ggml_are_same_shape(a, b));
+    bool is_node = false;
+
+    if (a->grad || b->grad) {
+        is_node = true;
+    }
+
+    struct ggml_tensor * result = ggml_new_tensor_1d(ctx, a->type, 1);
+
+    result->op   = GGML_OP_CROSS_ENTROPY_LOSS;
+    result->grad = is_node ? ggml_dup_tensor(ctx, result) : NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+
+    return result;
+}
+
+// ggml_cross_entropy_loss_back
+
+struct ggml_tensor * ggml_cross_entropy_loss_back(
+        struct ggml_context         * ctx,
+        struct ggml_tensor          * a,
+        struct ggml_tensor          * b,
+        struct ggml_tensor          * c) {
+    GGML_ASSERT(ggml_are_same_shape(a, b));
+    GGML_ASSERT(ggml_is_scalar(c));
+
+    struct ggml_tensor * result = ggml_dup_tensor(ctx, a);
+
+    result->op   = GGML_OP_CROSS_ENTROPY_LOSS_BACK;
+    result->grad = NULL;
+    result->src[0] = a;
+    result->src[1] = b;
+    result->src[2] = c;
+
+    return result;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+void ggml_set_param(
+        struct ggml_context * ctx,
+        struct ggml_tensor * tensor) {
+    tensor->flags |= GGML_TENSOR_FLAG_PARAM;
+
+    GGML_ASSERT(tensor->grad == NULL);
+    tensor->grad = ggml_dup_tensor(ctx, tensor);
+    ggml_format_name(tensor->grad, "%s (grad)", tensor->name);
+}
+
+// ggml_compute_forward_dup
+
+static void ggml_compute_forward_dup_same_cont(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
+    GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0));
+    GGML_ASSERT(src0->type == dst->type);
+
+    const size_t nb00 = src0->nb[0];
+    const size_t nb0 = dst->nb[0];
+
+    const int ith = params->ith; // thread index
+    const int nth = params->nth; // number of threads
+
+    // parallelize by elements
+    const int ne = ggml_nelements(dst);
+    const int dr = (ne + nth - 1) / nth;
+    const int ie0 = dr * ith;
+    const int ie1 = MIN(ie0 + dr, ne);
+
+    if (ie0 < ie1) {
+        memcpy(
+            ((char *)  dst->data + ie0*nb0),
+            ((char *) src0->data + ie0*nb00),
+            (ie1 - ie0) * ggml_type_size(src0->type));
+    }
+}
+
+static void ggml_compute_forward_dup_f16(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    const int ith = params->ith; // thread index
+    const int nth = params->nth; // number of threads
+
+    if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) {
+        ggml_compute_forward_dup_same_cont(params, dst);
+        return;
+    }
+
+    // parallelize by rows
+    const int nr = ne01;
+    // number of rows per thread
+    const int dr = (nr + nth - 1) / nth;
+    // row range for this thread
+    const int ir0 = dr * ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    if (src0->type == dst->type &&
+        ne00 == ne0 &&
+        nb00 == ggml_type_size(src0->type) && nb0 == ggml_type_size(dst->type)) {
+        // copy by rows
+        const size_t rs = ne00*nb00;
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    memcpy(
+                        ((char *)  dst->data + i01*nb1  + i02*nb2  + i03*nb3),
+                        ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03),
+                        rs);
+                }
+            }
+        }
+        return;
+    }
+
+    // TODO: add more special-case implementations for tensor shapes/strides that can benefit from memcpy
+
+    if (ggml_is_contiguous(dst)) {
+        if (nb00 == sizeof(ggml_fp16_t)) {
+            if (dst->type == GGML_TYPE_F16) {
+                size_t id = 0;
+                const size_t rs = ne00 * nb00;
+                char * dst_ptr = (char *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += rs * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03;
+                            memcpy(dst_ptr + id, src0_ptr, rs);
+                            id += rs;
+                        }
+                        id += rs * (ne01 - ir1);
+                    }
+                }
+            } else if (dst->type == GGML_TYPE_F32) {
+                size_t id = 0;
+                float * dst_ptr = (float *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                dst_ptr[id] = GGML_FP16_TO_FP32(src0_ptr[i00]);
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else if (type_traits[dst->type].from_float) {
+                ggml_from_float_t const quantize_row_q = type_traits[dst->type].from_float;
+                float * src0_f32 = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith;
+
+                size_t id = 0;
+                size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type));
+                char * dst_ptr = (char *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += rs * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
+
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                src0_f32[i00] = GGML_FP16_TO_FP32(src0_ptr[i00]);
+                            }
+
+                            quantize_row_q(src0_f32, dst_ptr + id, ne00);
+                            id += rs;
+                        }
+                        id += rs * (ne01 - ir1);
+                    }
+                }
+            } else {
+                GGML_ASSERT(false); // TODO: implement
+            }
+        } else {
+            //printf("%s: this is not optimal - fix me\n", __func__);
+
+            if (dst->type == GGML_TYPE_F32) {
+                size_t id = 0;
+                float * dst_ptr = (float *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+
+                                dst_ptr[id] = GGML_FP16_TO_FP32(*src0_ptr);
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else if (dst->type == GGML_TYPE_F16) {
+                size_t id = 0;
+                ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                const ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+
+                                dst_ptr[id] = *src0_ptr;
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else {
+                GGML_ASSERT(false); // TODO: implement
+            }
+        }
+        return;
+    }
+
+    // dst counters
+    int64_t i10 = 0;
+    int64_t i11 = 0;
+    int64_t i12 = 0;
+    int64_t i13 = 0;
+
+    if (dst->type == GGML_TYPE_F16) {
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                i10 += ne00 * ir0;
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
+
+                        memcpy(dst_ptr, src0_ptr, sizeof(ggml_fp16_t));
+
+                        if (++i10 == ne00) {
+                            i10 = 0;
+                            if (++i11 == ne01) {
+                                i11 = 0;
+                                if (++i12 == ne02) {
+                                    i12 = 0;
+                                    if (++i13 == ne03) {
+                                        i13 = 0;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                i10 += ne00 * (ne01 - ir1);
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    } else if (dst->type == GGML_TYPE_F32) {
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                i10 += ne00 * ir0;
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
+
+                        *(float *) dst_ptr = GGML_FP16_TO_FP32(*(const ggml_fp16_t *) src0_ptr);
+
+                        if (++i10 == ne0) {
+                            i10 = 0;
+                            if (++i11 == ne1) {
+                                i11 = 0;
+                                if (++i12 == ne2) {
+                                    i12 = 0;
+                                    if (++i13 == ne3) {
+                                        i13 = 0;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                i10 += ne00 * (ne01 - ir1);
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    } else {
+        GGML_ASSERT(false); // TODO: implement
+    }
+}
+
+static void ggml_compute_forward_dup_bf16(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    const int ith = params->ith; // thread index
+    const int nth = params->nth; // number of threads
+
+    if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) {
+        ggml_compute_forward_dup_same_cont(params, dst);
+        return;
+    }
+
+    // parallelize by rows
+    const int nr = ne01;
+    // number of rows per thread
+    const int dr = (nr + nth - 1) / nth;
+    // row range for this thread
+    const int ir0 = dr * ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    if (src0->type == dst->type &&
+        ne00 == ne0 &&
+        nb00 == ggml_type_size(src0->type) && nb0 == ggml_type_size(dst->type)) {
+        // copy by rows
+        const size_t rs = ne00*nb00;
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    memcpy(
+                        ((char *)  dst->data + i01*nb1  + i02*nb2  + i03*nb3),
+                        ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03),
+                        rs);
+                }
+            }
+        }
+        return;
+    }
+
+    // TODO: add more special-case implementations for tensor shapes/strides that can benefit from memcpy
+
+    if (ggml_is_contiguous(dst)) {
+        if (nb00 == sizeof(ggml_bf16_t)) {
+            if (dst->type == GGML_TYPE_BF16) {
+                size_t id = 0;
+                const size_t rs = ne00 * nb00;
+                char * dst_ptr = (char *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += rs * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03;
+                            memcpy(dst_ptr + id, src0_ptr, rs);
+                            id += rs;
+                        }
+                        id += rs * (ne01 - ir1);
+                    }
+                }
+            } else if (dst->type == GGML_TYPE_F16) {
+                size_t id = 0;
+                ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                dst_ptr[id] = GGML_FP32_TO_FP16(GGML_BF16_TO_FP32(src0_ptr[i00]));
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else if (dst->type == GGML_TYPE_F32) {
+                size_t id = 0;
+                float * dst_ptr = (float *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                dst_ptr[id] = GGML_BF16_TO_FP32(src0_ptr[i00]);
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else if (type_traits[dst->type].from_float) {
+                ggml_from_float_t const quantize_row_q = type_traits[dst->type].from_float;
+                float * src0_f32 = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith;
+
+                size_t id = 0;
+                size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type));
+                char * dst_ptr = (char *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += rs * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
+
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                src0_f32[i00] = GGML_BF16_TO_FP32(src0_ptr[i00]);
+                            }
+
+                            quantize_row_q(src0_f32, dst_ptr + id, ne00);
+                            id += rs;
+                        }
+                        id += rs * (ne01 - ir1);
+                    }
+                }
+            } else {
+                GGML_ASSERT(false); // TODO: implement
+            }
+        } else {
+            //printf("%s: this is not optimal - fix me\n", __func__);
+
+            if (dst->type == GGML_TYPE_F32) {
+                size_t id = 0;
+                float * dst_ptr = (float *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+
+                                dst_ptr[id] = GGML_BF16_TO_FP32(*src0_ptr);
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else if (dst->type == GGML_TYPE_BF16) {
+                size_t id = 0;
+                ggml_bf16_t * dst_ptr = (ggml_bf16_t *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+
+                                dst_ptr[id] = *src0_ptr;
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else if (dst->type == GGML_TYPE_F16) {
+                size_t id = 0;
+                ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                const ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+
+                                dst_ptr[id] = GGML_FP32_TO_FP16(GGML_BF16_TO_FP32(*src0_ptr));
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else {
+                GGML_ASSERT(false); // TODO: implement
+            }
+        }
+        return;
+    }
+
+    // dst counters
+    int64_t i10 = 0;
+    int64_t i11 = 0;
+    int64_t i12 = 0;
+    int64_t i13 = 0;
+
+    if (dst->type == GGML_TYPE_BF16) {
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                i10 += ne00 * ir0;
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
+
+                        memcpy(dst_ptr, src0_ptr, sizeof(ggml_bf16_t));
+
+                        if (++i10 == ne00) {
+                            i10 = 0;
+                            if (++i11 == ne01) {
+                                i11 = 0;
+                                if (++i12 == ne02) {
+                                    i12 = 0;
+                                    if (++i13 == ne03) {
+                                        i13 = 0;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                i10 += ne00 * (ne01 - ir1);
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    } else if (dst->type == GGML_TYPE_F16) {
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                i10 += ne00 * ir0;
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
+
+                        *(ggml_fp16_t *) dst_ptr = GGML_FP32_TO_FP16(GGML_BF16_TO_FP32(*(const ggml_bf16_t *) src0_ptr));
+
+                        if (++i10 == ne0) {
+                            i10 = 0;
+                            if (++i11 == ne1) {
+                                i11 = 0;
+                                if (++i12 == ne2) {
+                                    i12 = 0;
+                                    if (++i13 == ne3) {
+                                        i13 = 0;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                i10 += ne00 * (ne01 - ir1);
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    } else if (dst->type == GGML_TYPE_F32) {
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                i10 += ne00 * ir0;
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
+
+                        *(float *) dst_ptr = GGML_BF16_TO_FP32(*(const ggml_bf16_t *) src0_ptr);
+
+                        if (++i10 == ne0) {
+                            i10 = 0;
+                            if (++i11 == ne1) {
+                                i11 = 0;
+                                if (++i12 == ne2) {
+                                    i12 = 0;
+                                    if (++i13 == ne3) {
+                                        i13 = 0;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                i10 += ne00 * (ne01 - ir1);
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    } else {
+        GGML_ASSERT(false); // TODO: implement
+    }
+}
+
+static void ggml_compute_forward_dup_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    const int ith = params->ith; // thread index
+    const int nth = params->nth; // number of threads
+
+    if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst) && src0->type == dst->type) {
+        ggml_compute_forward_dup_same_cont(params, dst);
+        return;
+    }
+
+    // parallelize by rows
+    const int nr = ne01;
+    // number of rows per thread
+    const int dr = (nr + nth - 1) / nth;
+    // row range for this thread
+    const int ir0 = dr * ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    if (src0->type == dst->type &&
+        ne00 == ne0 &&
+        nb00 == ggml_type_size(src0->type) && nb0 == ggml_type_size(dst->type)) {
+        // copy by rows
+        const size_t rs = ne00*nb00;
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    memcpy(
+                        ((char *)  dst->data + i01*nb1  + i02*nb2  + i03*nb3),
+                        ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03),
+                        rs);
+                }
+            }
+        }
+        return;
+    }
+
+    if (ggml_is_contiguous(dst)) {
+        // TODO: simplify
+        if (nb00 == sizeof(float)) {
+            if (dst->type == GGML_TYPE_F32) {
+                size_t id = 0;
+                const size_t rs = ne00 * nb00;
+                char * dst_ptr = (char *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += rs * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03;
+                            memcpy(dst_ptr + id, src0_ptr, rs);
+                            id += rs;
+                        }
+                        id += rs * (ne01 - ir1);
+                    }
+                }
+            } else if (type_traits[dst->type].from_float) {
+                ggml_from_float_t const quantize_row_q = type_traits[dst->type].from_float;
+
+                size_t id = 0;
+                size_t rs = nb0 * (ne00 / ggml_blck_size(dst->type));
+                char * dst_ptr = (char *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += rs * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            const float * src0_ptr = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
+                            quantize_row_q(src0_ptr, dst_ptr + id, ne00);
+                            id += rs;
+                        }
+                        id += rs * (ne01 - ir1);
+                    }
+                }
+            } else {
+                GGML_ASSERT(false); // TODO: implement
+            }
+        } else {
+            //printf("%s: this is not optimal - fix me\n", __func__);
+
+            if (dst->type == GGML_TYPE_F32) {
+                size_t id = 0;
+                float * dst_ptr = (float *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+
+                                dst_ptr[id] = *src0_ptr;
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else if (dst->type == GGML_TYPE_F16) {
+                size_t id = 0;
+                ggml_fp16_t * dst_ptr = (ggml_fp16_t *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+
+                                dst_ptr[id] = GGML_FP32_TO_FP16(*src0_ptr);
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else if (dst->type == GGML_TYPE_BF16) {
+                size_t id = 0;
+                ggml_bf16_t * dst_ptr = (ggml_bf16_t *) dst->data;
+
+                for (int i03 = 0; i03 < ne03; i03++) {
+                    for (int i02 = 0; i02 < ne02; i02++) {
+                        id += ne00 * ir0;
+                        for (int i01 = ir0; i01 < ir1; i01++) {
+                            for (int i00 = 0; i00 < ne00; i00++) {
+                                const float * src0_ptr = (float *) ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+
+                                dst_ptr[id] = GGML_FP32_TO_BF16(*src0_ptr);
+                                id++;
+                            }
+                        }
+                        id += ne00 * (ne01 - ir1);
+                    }
+                }
+            } else {
+                GGML_ASSERT(false); // TODO: implement
+            }
+        }
+
+        return;
+    }
+
+    // dst counters
+
+    int64_t i10 = 0;
+    int64_t i11 = 0;
+    int64_t i12 = 0;
+    int64_t i13 = 0;
+
+    if (dst->type == GGML_TYPE_F32) {
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                i10 += ne00 * ir0;
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
+
+                        memcpy(dst_ptr, src0_ptr, sizeof(float));
+
+                        if (++i10 == ne0) {
+                            i10 = 0;
+                            if (++i11 == ne1) {
+                                i11 = 0;
+                                if (++i12 == ne2) {
+                                    i12 = 0;
+                                    if (++i13 == ne3) {
+                                        i13 = 0;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                i10 += ne00 * (ne01 - ir1);
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    } else if (dst->type == GGML_TYPE_F16) {
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                i10 += ne00 * ir0;
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
+
+                        *(ggml_fp16_t *) dst_ptr = GGML_FP32_TO_FP16(*(const float *) src0_ptr);
+
+                        if (++i10 == ne0) {
+                            i10 = 0;
+                            if (++i11 == ne1) {
+                                i11 = 0;
+                                if (++i12 == ne2) {
+                                    i12 = 0;
+                                    if (++i13 == ne3) {
+                                        i13 = 0;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                i10 += ne00 * (ne01 - ir1);
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    } else if (dst->type == GGML_TYPE_BF16) {
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                i10 += ne00 * ir0;
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+                              char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
+
+                        *(ggml_bf16_t *) dst_ptr = GGML_FP32_TO_BF16(*(const float *) src0_ptr);
+
+                        if (++i10 == ne0) {
+                            i10 = 0;
+                            if (++i11 == ne1) {
+                                i11 = 0;
+                                if (++i12 == ne2) {
+                                    i12 = 0;
+                                    if (++i13 == ne3) {
+                                        i13 = 0;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                i10 += ne00 * (ne01 - ir1);
+                while (i10 >= ne0) {
+                    i10 -= ne0;
+                    if (++i11 == ne1) {
+                        i11 = 0;
+                        if (++i12 == ne2) {
+                            i12 = 0;
+                            if (++i13 == ne3) {
+                                i13 = 0;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    } else {
+        GGML_ASSERT(false); // TODO: implement
+    }
+}
+
+// A simplified version of ggml_compute_forward_dup that doesn't do float upcasting, and just plain old memcpy.
+static void ggml_compute_forward_dup_bytes(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
+    GGML_ASSERT(src0->type == dst->type);
+
+    if (ggml_is_contiguous(src0) && ggml_is_contiguous(dst)) {
+        ggml_compute_forward_dup_same_cont(params, dst);
+        return;
+    }
+
+    GGML_TENSOR_UNARY_OP_LOCALS;
+
+    const size_t type_size = ggml_type_size(src0->type);
+    const int ith = params->ith; // thread index
+    const int nth = params->nth; // number of threads
+
+
+    // parallelize by rows
+    const int nr = ne01;
+    // number of rows per thread
+    const int dr = (nr + nth - 1) / nth;
+    // row range for this thread
+    const int ir0 = dr * ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    if (src0->type == dst->type &&
+        ne00 == ne0 &&
+        nb00 == type_size && nb0 == type_size) {
+        // copy by rows
+        const size_t rs = ne00 * type_size;
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                    memcpy(
+                        ((char *)  dst->data + i01*nb1  + i02*nb2  + i03*nb3),
+                        ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03),
+                        rs);
+                }
+            }
+        }
+        return;
+    }
+
+    if (ggml_is_contiguous(dst)) {
+        size_t id = 0;
+        char * dst_ptr = (char *) dst->data;
+        const size_t rs = ne00 * type_size;
+
+        if (nb00 == type_size) {
+            // src0 is contigous on first dimension, copy by rows
+            for (int64_t i03 = 0; i03 < ne03; i03++) {
+                for (int64_t i02 = 0; i02 < ne02; i02++) {
+                    id += rs * ir0;
+                    for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                        const char * src0_ptr = (char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03;
+                        memcpy(dst_ptr + id, src0_ptr, rs);
+                        id += rs;
+                    }
+                    id += rs * (ne01 - ir1);
+                }
+            }
+        } else {
+            //printf("%s: this is not optimal - fix me\n", __func__);
+
+            for (int64_t i03 = 0; i03 < ne03; i03++) {
+                for (int64_t i02 = 0; i02 < ne02; i02++) {
+                    id += rs * ir0;
+                    for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                        for (int64_t i00 = 0; i00 < ne00; i00++) {
+                            const char * src0_ptr = (char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03;
+                            memcpy(dst_ptr + id, src0_ptr, type_size);
+
+                            id += type_size;
+                        }
+                    }
+                    id += rs * (ne01 - ir1);
+                }
+            }
+        }
+
+        return;
+    }
+
+    // dst counters
+
+    int64_t i10 = 0;
+    int64_t i11 = 0;
+    int64_t i12 = 0;
+    int64_t i13 = 0;
+
+    for (int64_t i03 = 0; i03 < ne03; i03++) {
+        for (int64_t i02 = 0; i02 < ne02; i02++) {
+            i10 += ne00 * ir0;
+            while (i10 >= ne0) {
+                i10 -= ne0;
+                if (++i11 == ne1) {
+                    i11 = 0;
+                    if (++i12 == ne2) {
+                        i12 = 0;
+                        if (++i13 == ne3) {
+                            i13 = 0;
+                        }
+                    }
+                }
+            }
+            for (int64_t i01 = ir0; i01 < ir1; i01++) {
+                for (int64_t i00 = 0; i00 < ne00; i00++) {
+                    const char * src0_ptr = ((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+                          char * dst_ptr  = ((char *)  dst->data + i10*nb0  + i11*nb1  + i12*nb2  + i13*nb3);
+
+                    memcpy(dst_ptr, src0_ptr, type_size);
+
+                    if (++i10 == ne0) {
+                        i10 = 0;
+                        if (++i11 == ne1) {
+                            i11 = 0;
+                            if (++i12 == ne2) {
+                                i12 = 0;
+                                if (++i13 == ne3) {
+                                    i13 = 0;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            i10 += ne00 * (ne01 - ir1);
+            while (i10 >= ne0) {
+                i10 -= ne0;
+                if (++i11 == ne1) {
+                    i11 = 0;
+                    if (++i12 == ne2) {
+                        i12 = 0;
+                        if (++i13 == ne3) {
+                            i13 = 0;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_dup(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (src0->type == dst->type) {
+        ggml_compute_forward_dup_bytes(params, dst);
+        return;
+    }
+
+    switch (src0->type) {
+        case GGML_TYPE_F16:
+            {
+                ggml_compute_forward_dup_f16(params, dst);
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                ggml_compute_forward_dup_bf16(params, dst);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_dup_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_add
+
+static void ggml_compute_forward_add_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_can_repeat(src1, src0) && ggml_are_same_shape(src0, dst));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    GGML_ASSERT( nb0 == sizeof(float));
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    if (nb10 == sizeof(float)) {
+        for (int ir = ir0; ir < ir1; ++ir) {
+            // src1 is broadcastable across src0 and dst in i1, i2, i3
+            const int64_t i03 = ir/(ne02*ne01);
+            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
+            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
+
+            const int64_t i13 = i03 % ne13;
+            const int64_t i12 = i02 % ne12;
+            const int64_t i11 = i01 % ne11;
+            const int64_t nr0 = ne00 / ne10;
+
+            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
+            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
+            float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11);
+
+            for (int64_t r = 0; r < nr0; ++r) {
+#ifdef GGML_USE_ACCELERATE
+                vDSP_vadd(src0_ptr + r*ne10, 1, src1_ptr, 1, dst_ptr + r*ne10, 1, ne10);
+#else
+                ggml_vec_add_f32(ne10, dst_ptr + r*ne10, src0_ptr + r*ne10, src1_ptr);
+#endif
+            }
+        }
+    } else {
+        // src1 is not contiguous
+        for (int ir = ir0; ir < ir1; ++ir) {
+            // src1 is broadcastable across src0 and dst in i1, i2, i3
+            const int64_t i03 = ir/(ne02*ne01);
+            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
+            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
+
+            const int64_t i13 = i03 % ne13;
+            const int64_t i12 = i02 % ne12;
+            const int64_t i11 = i01 % ne11;
+
+            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
+            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
+
+            for (int64_t i0 = 0; i0 < ne0; ++i0) {
+                const int64_t i10 = i0 % ne10;
+                float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10);
+
+                dst_ptr[i0] = src0_ptr[i0] + *src1_ptr;
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_add_f16_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    if (dst->type == GGML_TYPE_F32) {
+        GGML_ASSERT( nb0 == sizeof(float));
+    }
+    else {
+        GGML_ASSERT(dst->type  == GGML_TYPE_F16);
+        GGML_ASSERT( nb0 == sizeof(ggml_fp16_t));
+    }
+
+    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    if (nb10 == sizeof(float)) {
+        if (dst->type == GGML_TYPE_F16) {
+            for (int ir = ir0; ir < ir1; ++ir) {
+                // src0, src1 and dst are same shape => same indices
+                const int i3 = ir/(ne2*ne1);
+                const int i2 = (ir - i3*ne2*ne1)/ne1;
+                const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+                ggml_fp16_t * dst_ptr  = (ggml_fp16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
+                ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+                float *       src1_ptr = (float *)       ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
+
+                for (int i = 0; i < ne0; i++) {
+                    dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + src1_ptr[i]);
+                }
+            }
+        } else {
+            for (int ir = ir0; ir < ir1; ++ir) {
+                // src0, src1 and dst are same shape => same indices
+                const int i3 = ir/(ne2*ne1);
+                const int i2 = (ir - i3*ne2*ne1)/ne1;
+                const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+                float *       dst_ptr  = (float *)       ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
+                ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+                float *       src1_ptr = (float *)       ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
+
+                for (int i = 0; i < ne0; i++) {
+                    dst_ptr[i] = GGML_FP16_TO_FP32(src0_ptr[i]) + src1_ptr[i];
+                }
+            }
+        }
+    }
+    else {
+        // src1 is not contiguous
+        GGML_ASSERT(false);
+    }
+}
+
+static void ggml_compute_forward_add_bf16_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    GGML_ASSERT(src0->type == GGML_TYPE_BF16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    if (dst->type == GGML_TYPE_F32) {
+        GGML_ASSERT( nb0 == sizeof(float));
+    }
+    else {
+        GGML_ASSERT(dst->type  == GGML_TYPE_BF16);
+        GGML_ASSERT( nb0 == sizeof(ggml_bf16_t));
+    }
+
+    GGML_ASSERT(nb00 == sizeof(ggml_bf16_t));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    if (nb10 == sizeof(float)) {
+        if (dst->type == GGML_TYPE_BF16) {
+            for (int ir = ir0; ir < ir1; ++ir) {
+                // src0, src1 and dst are same shape => same indices
+                const int i3 = ir/(ne2*ne1);
+                const int i2 = (ir - i3*ne2*ne1)/ne1;
+                const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+                ggml_bf16_t * dst_ptr  = (ggml_bf16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
+                ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+                float *       src1_ptr = (float *)       ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
+
+                for (int i = 0; i < ne0; i++) {
+                    dst_ptr[i] = GGML_FP32_TO_BF16(GGML_BF16_TO_FP32(src0_ptr[i]) + src1_ptr[i]);
+                }
+            }
+        } else {
+            for (int ir = ir0; ir < ir1; ++ir) {
+                // src0, src1 and dst are same shape => same indices
+                const int i3 = ir/(ne2*ne1);
+                const int i2 = (ir - i3*ne2*ne1)/ne1;
+                const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+                float *       dst_ptr  = (float *)       ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
+                ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+                float *       src1_ptr = (float *)       ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
+
+                for (int i = 0; i < ne0; i++) {
+                    dst_ptr[i] = GGML_BF16_TO_FP32(src0_ptr[i]) + src1_ptr[i];
+                }
+            }
+        }
+    }
+    else {
+        // src1 is not contiguous
+        GGML_ASSERT(false);
+    }
+}
+
+static void ggml_compute_forward_add_f16_f16(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F16);
+    GGML_ASSERT(dst->type  == GGML_TYPE_F16);
+
+    GGML_ASSERT( nb0 == sizeof(ggml_fp16_t));
+    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    if (nb10 == sizeof(ggml_fp16_t)) {
+        for (int ir = ir0; ir < ir1; ++ir) {
+            // src0, src1 and dst are same shape => same indices
+            const int i3 = ir/(ne2*ne1);
+            const int i2 = (ir - i3*ne2*ne1)/ne1;
+            const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+            ggml_fp16_t * dst_ptr  = (ggml_fp16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
+            ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+            ggml_fp16_t * src1_ptr = (ggml_fp16_t *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
+
+            for (int i = 0; i < ne0; i++) {
+                dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + GGML_FP16_TO_FP32(src1_ptr[i]));
+            }
+        }
+    }
+    else {
+        // src1 is not contiguous
+        GGML_ASSERT(false);
+    }
+}
+
+static void ggml_compute_forward_add_bf16_bf16(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    GGML_ASSERT(src0->type == GGML_TYPE_BF16);
+    GGML_ASSERT(src1->type == GGML_TYPE_BF16);
+    GGML_ASSERT(dst->type  == GGML_TYPE_BF16);
+
+    GGML_ASSERT( nb0 == sizeof(ggml_bf16_t));
+    GGML_ASSERT(nb00 == sizeof(ggml_bf16_t));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    if (nb10 == sizeof(ggml_bf16_t)) {
+        for (int ir = ir0; ir < ir1; ++ir) {
+            // src0, src1 and dst are same shape => same indices
+            const int i3 = ir/(ne2*ne1);
+            const int i2 = (ir - i3*ne2*ne1)/ne1;
+            const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+            ggml_bf16_t * dst_ptr  = (ggml_bf16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1);
+            ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+            ggml_bf16_t * src1_ptr = (ggml_bf16_t *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11);
+
+            for (int i = 0; i < ne0; i++) {
+                dst_ptr[i] = GGML_FP32_TO_BF16(GGML_BF16_TO_FP32(src0_ptr[i]) + GGML_BF16_TO_FP32(src1_ptr[i]));
+            }
+        }
+    }
+    else {
+        // src1 is not contiguous
+        GGML_ASSERT(false);
+    }
+}
+
+static void ggml_compute_forward_add_q_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const enum ggml_type type = src0->type;
+    const enum ggml_type dtype = dst->type;
+    ggml_to_float_t const dequantize_row_q = type_traits[type].to_float;
+    ggml_from_float_t const quantize_row_q = type_traits[dtype].from_float;
+
+    // we don't support permuted src0 or src1
+    GGML_ASSERT(nb00 == ggml_type_size(type));
+    GGML_ASSERT(nb10 == sizeof(float));
+
+    // dst cannot be transposed or permuted
+    GGML_ASSERT(nb0 <= nb1);
+    GGML_ASSERT(nb1 <= nb2);
+    GGML_ASSERT(nb2 <= nb3);
+
+    GGML_ASSERT(ggml_is_quantized(src0->type));
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    float * wdata = (float *) params->wdata + (ne00 + CACHE_LINE_SIZE_F32) * ith;
+
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // src0 indices
+        const int i03 = ir/(ne02*ne01);
+        const int i02 = (ir - i03*ne02*ne01)/ne01;
+        const int i01 = (ir - i03*ne02*ne01 - i02*ne01);
+
+        // src1 and dst are same shape as src0 => same indices
+        const int i13 = i03;
+        const int i12 = i02;
+        const int i11 = i01;
+
+        const int i3 = i03;
+        const int i2 = i02;
+        const int i1 = i01;
+
+        void  * src0_row = (void *) ((char *) src0->data + (i01*nb01 + i02*nb02 + i03*nb03));
+        float * src1_row = (float *)((char *) src1->data + (i11*nb11 + i12*nb12 + i13*nb13));
+        void  * dst_row  = (void *) ((char *)  dst->data + ( i1*nb1  +  i2*nb2  +  i3*nb3));
+
+        assert(ne00 % 32 == 0);
+
+        // unquantize row from src0 to temp buffer
+        dequantize_row_q(src0_row, wdata, ne00);
+        // add src1
+        ggml_vec_acc_f32(ne00, wdata, src1_row);
+        // quantize row to dst
+        if (quantize_row_q != NULL) {
+            quantize_row_q(wdata, dst_row, ne00);
+        } else {
+            memcpy(dst_row, wdata, ne0*nb0);
+        }
+    }
+}
+
+static void ggml_compute_forward_add(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                if (src1->type == GGML_TYPE_F32) {
+                    ggml_compute_forward_add_f32(params, dst);
+                }
+                else {
+                    GGML_ASSERT(false);
+                }
+            } break;
+        case GGML_TYPE_F16:
+            {
+                if (src1->type == GGML_TYPE_F16) {
+                    ggml_compute_forward_add_f16_f16(params, dst);
+                }
+                else if (src1->type == GGML_TYPE_F32) {
+                    ggml_compute_forward_add_f16_f32(params, dst);
+                }
+                else {
+                    GGML_ASSERT(false);
+                }
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                if (src1->type == GGML_TYPE_BF16) {
+                    ggml_compute_forward_add_bf16_bf16(params, dst);
+                }
+                else if (src1->type == GGML_TYPE_F32) {
+                    ggml_compute_forward_add_bf16_f32(params, dst);
+                }
+                else {
+                    GGML_ASSERT(false);
+                }
+            } break;
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+        case GGML_TYPE_IQ2_XXS:
+        case GGML_TYPE_IQ2_XS:
+        case GGML_TYPE_IQ3_XXS:
+        case GGML_TYPE_IQ1_S:
+        case GGML_TYPE_IQ1_M:
+        case GGML_TYPE_IQ4_NL:
+        case GGML_TYPE_IQ4_XS:
+        case GGML_TYPE_IQ3_S:
+        case GGML_TYPE_IQ2_S:
+            {
+                ggml_compute_forward_add_q_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_add1
+
+static void ggml_compute_forward_add1_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+    GGML_ASSERT(ggml_is_scalar(src1));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    GGML_ASSERT( nb0 == sizeof(float));
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // src0 and dst are same shape => same indices
+        const int i3 = ir/(ne2*ne1);
+        const int i2 = (ir - i3*ne2*ne1)/ne1;
+        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+#ifdef GGML_USE_ACCELERATE
+        UNUSED(ggml_vec_add1_f32);
+
+        vDSP_vadd(
+                (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1,
+                (float *) ((char *) src1->data), 0,
+                (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 ), 1,
+                ne0);
+#else
+        ggml_vec_add1_f32(ne0,
+                (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 ),
+                (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01),
+               *(float *) src1->data);
+#endif
+    }
+}
+
+static void ggml_compute_forward_add1_f16_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+    GGML_ASSERT(ggml_is_scalar(src1));
+
+    // scalar to add
+    const float v = *(float *) src1->data;
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT(dst->type  == GGML_TYPE_F16);
+
+    GGML_ASSERT( nb0 == sizeof(ggml_fp16_t));
+    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // src0 and dst are same shape => same indices
+        const int i3 = ir/(ne2*ne1);
+        const int i2 = (ir - i3*ne2*ne1)/ne1;
+        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+        ggml_fp16_t * dst_ptr  = (ggml_fp16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 );
+        ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+        for (int i = 0; i < ne0; i++) {
+            dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + v);
+        }
+    }
+}
+
+static void ggml_compute_forward_add1_f16_f16(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+    GGML_ASSERT(ggml_is_scalar(src1));
+
+    // scalar to add
+    const float v = GGML_FP16_TO_FP32(*(ggml_fp16_t *) src1->data);
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F16);
+    GGML_ASSERT(dst->type  == GGML_TYPE_F16);
+
+    GGML_ASSERT( nb0 == sizeof(ggml_fp16_t));
+    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // src0 and dst are same shape => same indices
+        const int i3 = ir/(ne2*ne1);
+        const int i2 = (ir - i3*ne2*ne1)/ne1;
+        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+        ggml_fp16_t * dst_ptr  = (ggml_fp16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 );
+        ggml_fp16_t * src0_ptr = (ggml_fp16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+        for (int i = 0; i < ne0; i++) {
+            dst_ptr[i] = GGML_FP32_TO_FP16(GGML_FP16_TO_FP32(src0_ptr[i]) + v);
+        }
+    }
+}
+
+static void ggml_compute_forward_add1_q_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+    GGML_ASSERT(ggml_is_scalar(src1));
+
+    // scalar to add
+    const float v = *(float *) src1->data;
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    const enum ggml_type type = src0->type;
+    ggml_to_float_t const dequantize_row_q = type_traits[type].to_float;
+    ggml_from_float_t const quantize_row_q = type_traits[type].from_float;
+
+    // we don't support permuted src0
+    GGML_ASSERT(nb00 == ggml_type_size(type));
+
+    // dst cannot be transposed or permuted
+    GGML_ASSERT(nb0 <= nb1);
+    GGML_ASSERT(nb1 <= nb2);
+    GGML_ASSERT(nb2 <= nb3);
+
+    GGML_ASSERT(ggml_is_quantized(src0->type));
+    GGML_ASSERT(dst->type == src0->type);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    float * wdata = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32) * ith;
+
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // src0 and dst are same shape => same indices
+        const int i3 = ir/(ne2*ne1);
+        const int i2 = (ir - i3*ne2*ne1)/ne1;
+        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+        void  * src0_row = (void *) ((char *) src0->data + (i1*nb01 + i2*nb02 + i3*nb03));
+        void  * dst_row  = (void *) ((char *)  dst->data + (i1*nb1  + i2*nb2  + i3*nb0 ));
+
+        assert(ne0 % 32 == 0);
+
+        // unquantize row from src0 to temp buffer
+        dequantize_row_q(src0_row, wdata, ne0);
+        // add src1
+        ggml_vec_acc1_f32(ne0, wdata, v);
+        // quantize row to dst
+        quantize_row_q(wdata, dst_row, ne0);
+    }
+}
+
+static void ggml_compute_forward_add1_bf16_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+    GGML_ASSERT(ggml_is_scalar(src1));
+
+    // scalar to add
+    const float v = *(float *) src1->data;
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    GGML_ASSERT(src0->type == GGML_TYPE_BF16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT(dst->type  == GGML_TYPE_BF16);
+
+    GGML_ASSERT( nb0 == sizeof(ggml_bf16_t));
+    GGML_ASSERT(nb00 == sizeof(ggml_bf16_t));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // src0 and dst are same shape => same indices
+        const int i3 = ir/(ne2*ne1);
+        const int i2 = (ir - i3*ne2*ne1)/ne1;
+        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+        ggml_bf16_t * dst_ptr  = (ggml_bf16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 );
+        ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+        for (int i = 0; i < ne0; i++) {
+            dst_ptr[i] = GGML_FP32_TO_BF16(GGML_BF16_TO_FP32(src0_ptr[i]) + v);
+        }
+    }
+}
+
+static void ggml_compute_forward_add1_bf16_bf16(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+    GGML_ASSERT(ggml_is_scalar(src1));
+
+    // scalar to add
+    const float v = GGML_BF16_TO_FP32(*(ggml_bf16_t *) src1->data);
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    GGML_ASSERT(src0->type == GGML_TYPE_BF16);
+    GGML_ASSERT(src1->type == GGML_TYPE_BF16);
+    GGML_ASSERT(dst->type  == GGML_TYPE_BF16);
+
+    GGML_ASSERT( nb0 == sizeof(ggml_bf16_t));
+    GGML_ASSERT(nb00 == sizeof(ggml_bf16_t));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // src0 and dst are same shape => same indices
+        const int i3 = ir/(ne2*ne1);
+        const int i2 = (ir - i3*ne2*ne1)/ne1;
+        const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+        ggml_bf16_t * dst_ptr  = (ggml_bf16_t *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 );
+        ggml_bf16_t * src0_ptr = (ggml_bf16_t *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+        for (int i = 0; i < ne0; i++) {
+            dst_ptr[i] = GGML_FP32_TO_BF16(GGML_BF16_TO_FP32(src0_ptr[i]) + v);
+        }
+    }
+}
+
+static void ggml_compute_forward_add1(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_add1_f32(params, dst);
+            } break;
+        case GGML_TYPE_F16:
+            {
+                if (src1->type == GGML_TYPE_F16) {
+                    ggml_compute_forward_add1_f16_f16(params, dst);
+                }
+                else if (src1->type == GGML_TYPE_F32) {
+                    ggml_compute_forward_add1_f16_f32(params, dst);
+                }
+                else {
+                    GGML_ASSERT(false);
+                }
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                if (src1->type == GGML_TYPE_BF16) {
+                    ggml_compute_forward_add1_bf16_bf16(params, dst);
+                }
+                else if (src1->type == GGML_TYPE_F32) {
+                    ggml_compute_forward_add1_bf16_f32(params, dst);
+                }
+                else {
+                    GGML_ASSERT(false);
+                }
+            } break;
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q8_1:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+        case GGML_TYPE_IQ2_XXS:
+        case GGML_TYPE_IQ2_XS:
+        case GGML_TYPE_IQ3_XXS:
+        case GGML_TYPE_IQ1_S:
+        case GGML_TYPE_IQ1_M:
+        case GGML_TYPE_IQ4_NL:
+        case GGML_TYPE_IQ4_XS:
+        case GGML_TYPE_IQ3_S:
+        case GGML_TYPE_IQ2_S:
+            {
+                ggml_compute_forward_add1_q_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_acc
+
+static void ggml_compute_forward_acc_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+    GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0));
+
+    // view src0 and dst with these strides and data offset inbytes during acc
+    // nb0 is implicitly element_size because src0 and dst are contiguous
+    size_t nb1     = ((int32_t *) dst->op_params)[0];
+    size_t nb2     = ((int32_t *) dst->op_params)[1];
+    size_t nb3     = ((int32_t *) dst->op_params)[2];
+    size_t offset  = ((int32_t *) dst->op_params)[3];
+    bool   inplace = (bool) ((int32_t *) dst->op_params)[4];
+
+    if (!inplace) {
+        if (params->ith == 0) {
+            // memcpy needs to be synchronized across threads to avoid race conditions.
+            // => do it in INIT phase
+            memcpy(
+                ((char *)  dst->data),
+                ((char *) src0->data),
+                ggml_nbytes(dst));
+        }
+        ggml_barrier(params->shared);
+    }
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr = ggml_nrows(src1);
+    const int nc = src1->ne[0];
+
+    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne)
+    GGML_TENSOR_LOCALS(size_t,  nb1, src1, nb)
+
+    // src0 and dst as viewed during acc
+    const size_t nb0 = ggml_element_size(src0);
+
+    const size_t nb00 = nb0;
+    const size_t nb01 = nb1;
+    const size_t nb02 = nb2;
+    const size_t nb03 = nb3;
+
+    GGML_ASSERT(offset + (ne10 == 0 ? 0 : ne10-1)*nb0  + (ne11 == 0 ? 0 : ne11-1)*nb1  + (ne12 == 0 ? 0 : ne12-1)*nb2  + (ne13 == 0 ? 0 : ne13-1)*nb3  < ggml_nbytes(dst));
+    GGML_ASSERT(offset + (ne10 == 0 ? 0 : ne10-1)*nb00 + (ne11 == 0 ? 0 : ne11-1)*nb01 + (ne12 == 0 ? 0 : ne12-1)*nb02 + (ne13 == 0 ? 0 : ne13-1)*nb03 < ggml_nbytes(src0));
+
+    GGML_ASSERT(nb10 == sizeof(float));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // src0 and dst are viewed with shape of src1 and offset
+        // => same indices
+        const int i3 = ir/(ne12*ne11);
+        const int i2 = (ir - i3*ne12*ne11)/ne11;
+        const int i1 = (ir - i3*ne12*ne11 - i2*ne11);
+
+#ifdef GGML_USE_ACCELERATE
+        vDSP_vadd(
+                (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + offset), 1,
+                (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1,
+                (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1  + offset), 1, nc);
+#else
+        ggml_vec_add_f32(nc,
+                (float *) ((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + offset),
+                (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + offset),
+                (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11));
+#endif
+    }
+}
+
+static void ggml_compute_forward_acc(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_acc_f32(params, dst);
+            } break;
+        case GGML_TYPE_F16:
+        case GGML_TYPE_BF16:
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q8_1:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+        case GGML_TYPE_IQ2_XXS:
+        case GGML_TYPE_IQ2_XS:
+        case GGML_TYPE_IQ3_XXS:
+        case GGML_TYPE_IQ1_S:
+        case GGML_TYPE_IQ1_M:
+        case GGML_TYPE_IQ4_NL:
+        case GGML_TYPE_IQ4_XS:
+        case GGML_TYPE_IQ3_S:
+        case GGML_TYPE_IQ2_S:
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_sub
+
+static void ggml_compute_forward_sub_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
+
+    const int nr  = ggml_nrows(src0);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    GGML_ASSERT( nb0 == sizeof(float));
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    if (nb10 == sizeof(float)) {
+        for (int ir = 0; ir < nr; ++ir) {
+            // src0, src1 and dst are same shape => same indices
+            const int i3 = ir/(ne2*ne1);
+            const int i2 = (ir - i3*ne2*ne1)/ne1;
+            const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+#ifdef GGML_USE_ACCELERATE
+            vDSP_vsub(
+                    (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11), 1,
+                    (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01), 1,
+                    (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 ), 1,
+                    ne0);
+#else
+            ggml_vec_sub_f32(ne0,
+                    (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 ),
+                    (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01),
+                    (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11));
+#endif
+                // }
+            // }
+        }
+    } else {
+        // src1 is not contiguous
+        for (int ir = 0; ir < nr; ++ir) {
+            // src0, src1 and dst are same shape => same indices
+            const int i3 = ir/(ne2*ne1);
+            const int i2 = (ir - i3*ne2*ne1)/ne1;
+            const int i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+            float * dst_ptr  = (float *) ((char *) dst->data  + i3*nb3  + i2*nb2  + i1*nb1 );
+            float * src0_ptr = (float *) ((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01);
+            for (int i0 = 0; i0 < ne0; i0++) {
+                float * src1_ptr = (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11 + i0*nb10);
+
+                dst_ptr[i0] = src0_ptr[i0] - *src1_ptr;
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_sub(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_sub_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_mul
+
+static void ggml_compute_forward_mul_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_can_repeat(src1, src0) && ggml_are_same_shape(src0, dst));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int64_t nr = ggml_nrows(src0);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    GGML_ASSERT( nb0 == sizeof(float));
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    if (nb10 == sizeof(float)) {
+        for (int64_t ir = ith; ir < nr; ir += nth) {
+            // src0 and dst are same shape => same indices
+            const int64_t i03 = ir/(ne02*ne01);
+            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
+            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
+
+            const int64_t i13 = i03 % ne13;
+            const int64_t i12 = i02 % ne12;
+            const int64_t i11 = i01 % ne11;
+            const int64_t nr0 = ne00 / ne10;
+
+            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
+            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
+            float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11);
+
+            for (int64_t r = 0 ; r < nr0; ++r) {
+#ifdef GGML_USE_ACCELERATE
+                UNUSED(ggml_vec_mul_f32);
+
+                vDSP_vmul(src0_ptr + r*ne10, 1, src1_ptr, 1, dst_ptr + r*ne10, 1, ne10);
+#else
+                ggml_vec_mul_f32(ne10, dst_ptr + r*ne10, src0_ptr + r*ne10, src1_ptr);
+#endif
+            }
+        }
+    } else {
+        // src1 is not contiguous
+        for (int64_t ir = ith; ir < nr; ir += nth) {
+            // src0 and dst are same shape => same indices
+            // src1 is broadcastable across src0 and dst in i1, i2, i3
+            const int64_t i03 = ir/(ne02*ne01);
+            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
+            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
+
+            const int64_t i13 = i03 % ne13;
+            const int64_t i12 = i02 % ne12;
+            const int64_t i11 = i01 % ne11;
+
+            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
+            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
+
+            for (int64_t i0 = 0; i0 < ne00; ++i0) {
+                const int64_t i10 = i0 % ne10;
+                float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10);
+
+                dst_ptr[i0] = src0_ptr[i0] * (*src1_ptr);
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_mul(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(src1->type == GGML_TYPE_F32 && "only f32 src1 supported for now");
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_mul_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_div
+
+static void ggml_compute_forward_div_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_can_repeat(src1, src0) && ggml_are_same_shape(src0, dst));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int64_t nr = ggml_nrows(src0);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    GGML_ASSERT( nb0 == sizeof(float));
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    if (nb10 == sizeof(float)) {
+        for (int64_t ir = ith; ir < nr; ir += nth) {
+            // src0 and dst are same shape => same indices
+            const int64_t i03 = ir/(ne02*ne01);
+            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
+            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
+
+            const int64_t i13 = i03 % ne13;
+            const int64_t i12 = i02 % ne12;
+            const int64_t i11 = i01 % ne11;
+            const int64_t nr0 = ne00 / ne10;
+
+            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
+            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
+            float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11);
+
+            for (int64_t r = 0; r < nr0; ++r) {
+#ifdef GGML_USE_ACCELERATE
+                UNUSED(ggml_vec_div_f32);
+
+                vDSP_vdiv(src1_ptr, 1, src0_ptr + r*ne10, 1, dst_ptr + r*ne10, 1, ne10);
+#else
+                ggml_vec_div_f32(ne10, dst_ptr + r*ne10, src0_ptr + r*ne10, src1_ptr);
+#endif
+            }
+        }
+    } else {
+        // src1 is not contiguous
+        for (int64_t ir = ith; ir < nr; ir += nth) {
+            // src0 and dst are same shape => same indices
+            // src1 is broadcastable across src0 and dst in i1, i2, i3
+            const int64_t i03 = ir/(ne02*ne01);
+            const int64_t i02 = (ir - i03*ne02*ne01)/ne01;
+            const int64_t i01 = (ir - i03*ne02*ne01 - i02*ne01);
+
+            const int64_t i13 = i03 % ne13;
+            const int64_t i12 = i02 % ne12;
+            const int64_t i11 = i01 % ne11;
+
+            float * dst_ptr  = (float *) ((char *) dst->data  + i03*nb3  + i02*nb2  + i01*nb1 );
+            float * src0_ptr = (float *) ((char *) src0->data + i03*nb03 + i02*nb02 + i01*nb01);
+
+            for (int64_t i0 = 0; i0 < ne00; ++i0) {
+                const int64_t i10 = i0 % ne10;
+                float * src1_ptr = (float *) ((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11 + i10*nb10);
+
+                dst_ptr[i0] = src0_ptr[i0] / (*src1_ptr);
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_div(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_div_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_sqr
+
+static void ggml_compute_forward_sqr_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n     = ggml_nrows(src0);
+    const int nc    = src0->ne[0];
+
+    assert( dst->nb[0] == sizeof(float));
+    assert(src0->nb[0] == sizeof(float));
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_sqr_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_sqr(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_sqr_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_sqrt
+
+static void ggml_compute_forward_sqrt_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    assert( dst->nb[0] == sizeof(float));
+    assert(src0->nb[0] == sizeof(float));
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_sqrt_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_sqrt(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_sqrt_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_log
+
+static void ggml_compute_forward_log_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    GGML_ASSERT( dst->nb[0] == sizeof(float));
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_log_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_log(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_log_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_sum
+
+static void ggml_compute_forward_sum_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_scalar(dst));
+
+
+    assert(ggml_is_scalar(dst));
+    assert(src0->nb[0] == sizeof(float));
+
+    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne)
+    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb)
+
+    ggml_float sum     = 0;
+    ggml_float row_sum = 0;
+
+    for (int64_t i03 = 0; i03 < ne03; i03++) {
+        for (int64_t i02 = 0; i02 < ne02; i02++) {
+            for (int64_t i01 = 0; i01 < ne01; i01++) {
+                ggml_vec_sum_f32_ggf(ne00,
+                        &row_sum,
+                        (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03));
+                sum += row_sum;
+            }
+        }
+    }
+    ((float *) dst->data)[0] = sum;
+}
+
+static void ggml_compute_forward_sum_f16(
+    const struct ggml_compute_params * params,
+          struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_scalar(dst));
+
+    assert(src0->nb[0] == sizeof(ggml_fp16_t));
+
+    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne)
+    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb)
+
+    float sum = 0;
+    float row_sum = 0;
+
+    for (int64_t i03 = 0; i03 < ne03; i03++) {
+        for (int64_t i02 = 0; i02 < ne02; i02++) {
+            for (int64_t i01 = 0; i01 < ne01; i01++) {
+                ggml_vec_sum_f16_ggf(ne00,
+                    &row_sum,
+                    (ggml_fp16_t *) ((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03));
+                sum += row_sum;
+            }
+        }
+    }
+    ((ggml_fp16_t *) dst->data)[0] = GGML_FP32_TO_FP16(sum);
+}
+
+static void ggml_compute_forward_sum_bf16(
+    const struct ggml_compute_params * params,
+          struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_scalar(dst));
+
+    assert(src0->nb[0] == sizeof(ggml_bf16_t));
+
+    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne)
+    GGML_TENSOR_LOCALS(size_t,  nb0, src0, nb)
+
+    float sum = 0;
+    float row_sum = 0;
+
+    for (int64_t i03 = 0; i03 < ne03; i03++) {
+        for (int64_t i02 = 0; i02 < ne02; i02++) {
+            for (int64_t i01 = 0; i01 < ne01; i01++) {
+                ggml_vec_sum_bf16_ggf(ne00,
+                    &row_sum,
+                    (ggml_bf16_t *) ((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03));
+                sum += row_sum;
+            }
+        }
+    }
+    ((ggml_bf16_t *) dst->data)[0] = GGML_FP32_TO_BF16(sum);
+}
+
+static void ggml_compute_forward_sum(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_sum_f32(params, dst);
+            } break;
+        case GGML_TYPE_F16:
+            {
+                ggml_compute_forward_sum_f16(params, dst);
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                ggml_compute_forward_sum_bf16(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_sum_rows
+
+static void ggml_compute_forward_sum_rows_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+    GGML_ASSERT(dst->nb[0] == sizeof(float));
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    GGML_ASSERT(ne0 == 1);
+    GGML_ASSERT(ne1 == ne01);
+    GGML_ASSERT(ne2 == ne02);
+    GGML_ASSERT(ne3 == ne03);
+
+    for (int64_t i3 = 0; i3 < ne03; i3++) {
+        for (int64_t i2 = 0; i2 < ne02; i2++) {
+            for (int64_t i1 = 0; i1 < ne01; i1++) {
+                float * src_row = (float *) ((char *) src0->data + i1*nb01 + i2*nb02 + i3*nb03);
+                float * dst_row = (float *) ((char *) dst->data  + i1*nb1  + i2*nb2  + i3*nb3);
+                float row_sum = 0;
+                ggml_vec_sum_f32(ne00, &row_sum, src_row);
+                dst_row[0] = row_sum;
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_sum_rows(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_sum_rows_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_mean
+
+static void ggml_compute_forward_mean_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(src0->nb[0] == sizeof(float));
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    assert(ne0 == 1);
+    assert(ne1 == ne01);
+    assert(ne2 == ne02);
+    assert(ne3 == ne03);
+
+    UNUSED(ne0);
+    UNUSED(ne1);
+    UNUSED(ne2);
+    UNUSED(ne3);
+
+    for (int64_t i03 = 0; i03 < ne03; i03++) {
+        for (int64_t i02 = 0; i02 < ne02; i02++) {
+            for (int64_t i01 = 0; i01 < ne01; i01++) {
+                ggml_vec_sum_f32(ne00,
+                        (float *) ((char *)  dst->data + i01*nb1  + i02*nb2  + i03*nb3),
+                        (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03));
+
+                *(float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3) /= (float) ne00;
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_mean(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_mean_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_argmax
+
+static void ggml_compute_forward_argmax_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(src0->nb[0] == sizeof(float));
+    assert(dst->nb[0] == sizeof(float));
+
+    const int64_t ne00 = src0->ne[0];
+    const int64_t ne01 = src0->ne[1];
+
+    const size_t nb01 = src0->nb[1];
+    const size_t nb0 = dst->nb[0];
+
+    for (int64_t i1 = 0; i1 < ne01; i1++) {
+        float * src = (float *) ((char *) src0->data + i1*nb01);
+        int32_t * dst_ = (int32_t *) ((char *)  dst->data + i1*nb0);
+        int v = 0;
+        ggml_vec_argmax_f32(ne00, &v, src);
+        dst_[0] = v;
+    }
+}
+
+static void ggml_compute_forward_argmax(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_argmax_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_repeat
+
+static void ggml_compute_forward_repeat_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    GGML_ASSERT(ggml_can_repeat(src0, dst));
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    // guaranteed to be an integer due to the check in ggml_can_repeat
+    const int nr0 = (int)(ne0/ne00);
+    const int nr1 = (int)(ne1/ne01);
+    const int nr2 = (int)(ne2/ne02);
+    const int nr3 = (int)(ne3/ne03);
+
+    // TODO: support for transposed / permuted tensors
+    GGML_ASSERT(nb0  == sizeof(float));
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    // TODO: maybe this is not optimal?
+    for                         (int i3 = 0; i3 < nr3;  i3++) {
+        for                     (int k3 = 0; k3 < ne03; k3++) {
+            for                 (int i2 = 0; i2 < nr2;  i2++) {
+                for             (int k2 = 0; k2 < ne02; k2++) {
+                    for         (int i1 = 0; i1 < nr1;  i1++) {
+                        for     (int k1 = 0; k1 < ne01; k1++) {
+                            for (int i0 = 0; i0 < nr0;  i0++) {
+                                ggml_vec_cpy_f32(ne00,
+                                        (float *) ((char *)  dst->data + (i3*ne03 + k3)*nb3  + (i2*ne02 + k2)*nb2  + (i1*ne01 + k1)*nb1  + (i0*ne00)*nb0),
+                                        (float *) ((char *) src0->data + (          k3)*nb03 + (          k2)*nb02 + (          k1)*nb01));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_repeat_f16(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    GGML_ASSERT(ggml_can_repeat(src0, dst));
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    // guaranteed to be an integer due to the check in ggml_can_repeat
+    const int nr0 = (int)(ne0/ne00);
+    const int nr1 = (int)(ne1/ne01);
+    const int nr2 = (int)(ne2/ne02);
+    const int nr3 = (int)(ne3/ne03);
+
+    // TODO: support for transposed / permuted tensors
+    GGML_ASSERT(nb0  == sizeof(ggml_fp16_t));
+    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
+
+    // TODO: maybe this is not optimal?
+    for                         (int i3 = 0; i3 < nr3;  i3++) {
+        for                     (int k3 = 0; k3 < ne03; k3++) {
+            for                 (int i2 = 0; i2 < nr2;  i2++) {
+                for             (int k2 = 0; k2 < ne02; k2++) {
+                    for         (int i1 = 0; i1 < nr1;  i1++) {
+                        for     (int k1 = 0; k1 < ne01; k1++) {
+                            for (int i0 = 0; i0 < nr0;  i0++) {
+                                ggml_fp16_t * y = (ggml_fp16_t *) ((char *)  dst->data + (i3*ne03 + k3)*nb3  + (i2*ne02 + k2)*nb2  + (i1*ne01 + k1)*nb1  + (i0*ne00)*nb0);
+                                ggml_fp16_t * x = (ggml_fp16_t *) ((char *) src0->data + (          k3)*nb03 + (          k2)*nb02 + (          k1)*nb01);
+                                // ggml_vec_cpy_f16(ne00, y, x)
+                                for (int i = 0; i < ne00; ++i) {
+                                    y[i]  = x[i];
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_repeat(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F16:
+        case GGML_TYPE_BF16:
+        case GGML_TYPE_I16:
+            {
+                ggml_compute_forward_repeat_f16(params, dst);
+            } break;
+        case GGML_TYPE_F32:
+        case GGML_TYPE_I32:
+            {
+                ggml_compute_forward_repeat_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_repeat_back
+
+static void ggml_compute_forward_repeat_back_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    GGML_ASSERT(ggml_can_repeat(dst, src0));
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    // guaranteed to be an integer due to the check in ggml_can_repeat
+    const int nr0 = (int)(ne00/ne0);
+    const int nr1 = (int)(ne01/ne1);
+    const int nr2 = (int)(ne02/ne2);
+    const int nr3 = (int)(ne03/ne3);
+
+    // TODO: support for transposed / permuted tensors
+    GGML_ASSERT(nb0  == sizeof(float));
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    if (ggml_is_contiguous(dst)) {
+        ggml_vec_set_f32(ne0*ne1*ne2*ne3, dst->data, 0);
+    } else {
+        for         (int k3 = 0; k3 < ne3; k3++) {
+            for     (int k2 = 0; k2 < ne2; k2++) {
+                for (int k1 = 0; k1 < ne1; k1++) {
+                    ggml_vec_set_f32(ne0,
+                        (float *) ((char *) dst->data + k1*nb1 + k2*nb2 + k3*nb3),
+                        0);
+                }
+            }
+        }
+    }
+
+    // TODO: maybe this is not optimal?
+    for                         (int i3 = 0; i3 < nr3; i3++) {
+        for                     (int k3 = 0; k3 < ne3; k3++) {
+            for                 (int i2 = 0; i2 < nr2; i2++) {
+                for             (int k2 = 0; k2 < ne2; k2++) {
+                    for         (int i1 = 0; i1 < nr1; i1++) {
+                        for     (int k1 = 0; k1 < ne1; k1++) {
+                            for (int i0 = 0; i0 < nr0; i0++) {
+                                ggml_vec_acc_f32(ne0,
+                                        (float *) ((char *)  dst->data + (         k3)*nb3  + (         k2)*nb2  + (         k1)*nb1),
+                                        (float *) ((char *) src0->data + (i3*ne3 + k3)*nb03 + (i2*ne2 + k2)*nb02 + (i1*ne1 + k1)*nb01 + (i0*ne0)*nb00));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_repeat_back(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_repeat_back_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_concat
+
+static void ggml_compute_forward_concat_f32(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    // TODO: support for transposed / permuted tensors
+    GGML_ASSERT(nb0  == sizeof(float));
+    GGML_ASSERT(nb00 == sizeof(float));
+    GGML_ASSERT(nb10 == sizeof(float));
+
+    const int32_t dim = ggml_get_op_params_i32(dst, 0);
+
+    GGML_ASSERT(dim >= 0 && dim < 4);
+
+    int64_t o[4] = {0, 0, 0, 0};
+    o[dim] = src0->ne[dim];
+
+    const float * x;
+
+    // TODO: smarter multi-theading
+    for (int i3 = 0; i3 < ne3; i3++) {
+        for (int i2 = ith; i2 < ne2; i2 += nth) {
+            for (int i1 = 0; i1 < ne1; i1++) {
+                for (int i0 = 0; i0 < ne0; i0++) {
+                    if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) {
+                        x = (const float *) ((const char *)src0->data + (i0       )*nb00 + (i1       )*nb01 + (i2       )*nb02 + (i3       )*nb03);
+                    } else {
+                        x = (const float *) ((const char *)src1->data + (i0 - o[0])*nb10 + (i1 - o[1])*nb11 + (i2 - o[2])*nb12 + (i3 - o[3])*nb13);
+                    }
+
+                    float * y = (float *)((char *)dst->data + i0*nb0 + i1*nb1 + i2*nb2 + i3*nb3);
+
+                    *y = *x;
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_concat(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+        case GGML_TYPE_I32:
+            {
+                ggml_compute_forward_concat_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_abs
+
+static void ggml_compute_forward_abs_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_abs_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_abs(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_abs_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_sgn
+
+static void ggml_compute_forward_sgn_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_sgn_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_sgn(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_sgn_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_neg
+
+static void ggml_compute_forward_neg_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_neg_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_neg(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_neg_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_step
+
+static void ggml_compute_forward_step_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_step_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_step(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_step_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_tanh
+
+static void ggml_compute_forward_tanh_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_tanh_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_tanh(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_tanh_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_elu
+
+static void ggml_compute_forward_elu_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_elu_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_elu(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_elu_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_relu
+
+static void ggml_compute_forward_relu_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_relu_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_relu(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_relu_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_sigmoid
+
+static void ggml_compute_forward_sigmoid_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_sigmoid_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_sigmoid(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_sigmoid_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_gelu
+
+static void ggml_compute_forward_gelu_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nc = src0->ne[0];
+    const int nr = ggml_nrows(src0);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int i1 = ir0; i1 < ir1; i1++) {
+        ggml_vec_gelu_f32(nc,
+                (float *) ((char *) dst->data  + i1*( dst->nb[1])),
+                (float *) ((char *) src0->data + i1*(src0->nb[1])));
+
+#ifndef NDEBUG
+        for (int k = 0; k < nc; k++) {
+            const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k];
+            UNUSED(x);
+            assert(!isnan(x));
+            assert(!isinf(x));
+        }
+#endif
+    }
+}
+
+static void ggml_compute_forward_gelu(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_gelu_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_gelu_quick
+
+static void ggml_compute_forward_gelu_quick_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nc = src0->ne[0];
+    const int nr = ggml_nrows(src0);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int i1 = ir0; i1 < ir1; i1++) {
+        ggml_vec_gelu_quick_f32(nc,
+                (float *) ((char *) dst->data  + i1*( dst->nb[1])),
+                (float *) ((char *) src0->data + i1*(src0->nb[1])));
+
+#ifndef NDEBUG
+        for (int k = 0; k < nc; k++) {
+            const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k];
+            UNUSED(x);
+            assert(!isnan(x));
+            assert(!isinf(x));
+        }
+#endif
+    }
+}
+
+static void ggml_compute_forward_gelu_quick(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_gelu_quick_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_silu
+
+static void ggml_compute_forward_silu_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nc = src0->ne[0];
+    const int nr = ggml_nrows(src0);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int i1 = ir0; i1 < ir1; i1++) {
+        ggml_vec_silu_f32(nc,
+                (float *) ((char *) dst->data  + i1*( dst->nb[1])),
+                (float *) ((char *) src0->data + i1*(src0->nb[1])));
+
+#ifndef NDEBUG
+        for (int k = 0; k < nc; k++) {
+            const float x = ((float *) ((char *) dst->data + i1*(dst->nb[1])))[k];
+            UNUSED(x);
+            assert(!isnan(x));
+            assert(!isinf(x));
+        }
+#endif
+    }
+}
+
+static void ggml_compute_forward_silu(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_silu_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+// ggml_compute_forward_leaky_relu
+
+static void ggml_compute_forward_leaky_relu_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    float negative_slope;
+    memcpy(&negative_slope, dst->op_params, sizeof(float));
+
+    assert(dst->nb[0]  == sizeof(float));
+    assert(src0->nb[0] == sizeof(float));
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_leaky_relu_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])), negative_slope);
+    }
+}
+
+static void ggml_compute_forward_leaky_relu(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_leaky_relu_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_silu_back
+
+static void ggml_compute_forward_silu_back_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * grad = dst->src[1];
+
+    assert(ggml_is_contiguous_1(grad));
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+    assert(ggml_are_same_shape(src0, grad));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nc = src0->ne[0];
+    const int nr = ggml_nrows(src0);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int i1 = ir0; i1 < ir1; i1++) {
+        ggml_vec_silu_backward_f32(nc,
+                (float *) ((char *) dst->data  + i1*( dst->nb[1])),
+                (float *) ((char *) src0->data + i1*(src0->nb[1])),
+                (float *) ((char *) grad->data + i1*(grad->nb[1])));
+
+#ifndef NDEBUG
+        for (int k = 0; k < nc; k++) {
+            const float x = ((float *) ((char *) dst->data + i1*( dst->nb[1])))[k];
+            UNUSED(x);
+            assert(!isnan(x));
+            assert(!isinf(x));
+        }
+#endif
+    }
+}
+
+static void ggml_compute_forward_silu_back(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_silu_back_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+
+static void ggml_compute_forward_hardswish_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_hardswish_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+static void ggml_compute_forward_hardswish(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_hardswish_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+static void ggml_compute_forward_hardsigmoid_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        ggml_vec_hardsigmoid_f32(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_hardsigmoid(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_hardsigmoid_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+
+// ggml_compute_forward_norm
+
+static void ggml_compute_forward_norm_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    float eps;
+    memcpy(&eps, dst->op_params, sizeof(float));
+
+    GGML_ASSERT(eps > 0.0f);
+
+    // TODO: optimize
+    for (int64_t i03 = 0; i03 < ne03; i03++) {
+        for (int64_t i02 = 0; i02 < ne02; i02++) {
+            for (int64_t i01 = ith; i01 < ne01; i01 += nth) {
+                const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
+
+                ggml_float sum = 0.0;
+                for (int64_t i00 = 0; i00 < ne00; i00++) {
+                    sum += (ggml_float)x[i00];
+                }
+
+                float mean = sum/ne00;
+
+                float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
+
+                ggml_float sum2 = 0.0;
+                for (int64_t i00 = 0; i00 < ne00; i00++) {
+                    float v = x[i00] - mean;
+                    y[i00] = v;
+                    sum2 += (ggml_float)(v*v);
+                }
+
+                float variance = sum2/ne00;
+                const float scale = 1.0f/sqrtf(variance + eps);
+
+                ggml_vec_scale_f32(ne00, y, scale);
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_norm(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_norm_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_group_rms_norm
+
+static void ggml_compute_forward_rms_norm_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    float eps;
+    memcpy(&eps, dst->op_params, sizeof(float));
+
+    GGML_ASSERT(eps > 0.0f);
+
+    // TODO: optimize
+    for (int64_t i03 = 0; i03 < ne03; i03++) {
+        for (int64_t i02 = 0; i02 < ne02; i02++) {
+            for (int64_t i01 = ith; i01 < ne01; i01 += nth) {
+                const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
+
+                ggml_float sum = 0.0;
+                for (int64_t i00 = 0; i00 < ne00; i00++) {
+                    sum += (ggml_float)(x[i00] * x[i00]);
+                }
+
+                const float mean = sum/ne00;
+
+                float * y = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
+
+                memcpy(y, x, ne00 * sizeof(float));
+                // for (int i00 = 0; i00 < ne00; i00++) {
+                //     y[i00] = x[i00];
+                // }
+
+                const float scale = 1.0f/sqrtf(mean + eps);
+
+                ggml_vec_scale_f32(ne00, y, scale);
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_rms_norm(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_rms_norm_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+static void ggml_compute_forward_rms_norm_back_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst) && ggml_are_same_shape(src0, src1));
+
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    float eps;
+    memcpy(&eps, dst->op_params, sizeof(float));
+
+    // TODO: optimize
+    for (int64_t i03 = 0; i03 < ne03; i03++) {
+        for (int64_t i02 = 0; i02 < ne02; i02++) {
+            for (int64_t i01 = ith; i01 < ne01; i01 += nth) {
+                // src1 is same shape as src0 => same indices
+                const int64_t i11 = i01;
+                const int64_t i12 = i02;
+                const int64_t i13 = i03;
+
+                const float * x = (float *) ((char *) src0->data + i01*nb01 + i02*nb02 + i03*nb03);
+                const float * dz = (float *) ((char *) src1->data + i11*nb11 + i12*nb12 + i13*nb13);
+
+                ggml_float sum_xx  = 0.0;
+                ggml_float sum_xdz = 0.0;
+
+                for (int64_t i00 = 0; i00 < ne00; i00++) {
+                    sum_xx  += (ggml_float)(x[i00] * x[i00]);
+                    sum_xdz += (ggml_float)(x[i00] * dz[i00]);
+                }
+
+                //const float mean     = (float)(sum_xx)/ne00;
+                const float mean_eps = (float)(sum_xx)/ne00 + eps;
+                const float sum_eps  = (float)(sum_xx) + eps*ne00;
+                //const float mean_xdz = (float)(sum_xdz)/ne00;
+                // we could cache rms from forward pass to improve performance.
+                // to do this implement ggml_rms and compose ggml_rms_norm using ggml_rms.
+                //const float rms      = sqrtf(mean_eps);
+                const float rrms     = 1.0f / sqrtf(mean_eps);
+                //const float scale    = -rrms/(ne00 * mean_eps); // -1/(n*rms**3)
+
+                {
+                    // z = rms_norm(x)
+                    //
+                    // rms_norm(src0) =
+                    //     scale(
+                    //         src0,
+                    //         div(
+                    //             1,
+                    //             sqrt(
+                    //                 add(
+                    //                     scale(
+                    //                         sum(
+                    //                             sqr(
+                    //                                 src0)),
+                    //                         (1.0/N)),
+                    //                     eps))));
+
+                    // postorder:
+                    // ## op    args         grad
+                    // 00 param src0         grad[#00]
+                    // 01 const 1
+                    // 02 sqr   (#00)        grad[#02]
+                    // 03 sum   (#02)        grad[#03]
+                    // 04 const 1/N
+                    // 05 scale (#03, #04)   grad[#05]
+                    // 06 const eps
+                    // 07 add   (#05, #06)   grad[#07]
+                    // 08 sqrt  (#07)        grad[#08]
+                    // 09 div   (#01,#08)    grad[#09]
+                    // 10 scale (#00,#09)    grad[#10]
+                    //
+                    // backward pass, given grad[#10]
+                    // #10: scale
+                    // grad[#00] += scale(grad[#10],#09)
+                    // grad[#09] += sum(mul(grad[#10],#00))
+                    // #09: div
+                    // grad[#08] += neg(mul(grad[#09], div(#09,#08)))
+                    // #08: sqrt
+                    // grad[#07] += mul(grad[#08], div(0.5, #08))
+                    // #07: add
+                    // grad[#05] += grad[#07]
+                    // #05: scale
+                    // grad[#03] += scale(grad[#05],#04)
+                    // #03: sum
+                    // grad[#02] += repeat(grad[#03], #02)
+                    // #02:
+                    // grad[#00] += scale(mul(#00, grad[#02]), 2.0)
+                    //
+                    // substitute and simplify:
+                    // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, grad[#02]), 2.0)
+                    // grad[#02] = repeat(grad[#03], #02)
+                    // grad[#02] = repeat(scale(grad[#05],#04), #02)
+                    // grad[#02] = repeat(scale(grad[#07],#04), #02)
+                    // grad[#02] = repeat(scale(mul(grad[#08], div(0.5, #08)),#04), #02)
+                    // grad[#02] = repeat(scale(mul(neg(mul(grad[#09], div(#09,#08))), div(0.5, #08)),#04), #02)
+                    // grad[#02] = repeat(scale(mul(neg(mul(sum(mul(grad[#10],#00)), div(#09,#08))), div(0.5, #08)),#04), #02)
+                    // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(#09,#08) * div(0.5, #08) * (1/N)), #02)
+                    // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(div(#01,#08),#08) * div(0.5, #08) * (1/N)), #02)
+                    // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(1,#08*#08) * div(0.5, #08) * (1/N)), #02)
+                    // grad[#02] = repeat(-(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N)), #02)
+                    // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, grad[#02]), 2.0)
+                    // grad[#00] = scale(grad(#10), #09) + scale(mul(#00, repeat(-(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N)), #02)), 2.0)
+                    // grad[#00] = scale(grad(#10), #09) + scale(scale(#00, -(sum(mul(grad[#10],#00)) * div(1,#07) * div(0.5, #08) * (1/N))), 2.0)
+                    // grad[#00] = scale(grad(#10), #09) + scale(#00, -(sum(mul(grad[#10],#00)) * div(1,#07) * div(1,#08) * (1/N)))
+                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,#07*#08) * (-1/N))
+                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,#07*#08) * (-1/N))
+                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(1,mean_eps*rms) * (-1/N))
+                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*mean_eps))
+                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*(sum_xx/N+eps)))
+                    // grad[#00] = scale(grad(#10), #09) + scale(#00, sum(mul(grad[#10],#00)) * div(-1,rms*N*sum_xx+rms*N*eps))
+                    // grad[#00] = scale(dz, rrms) + scale(x, sum(mul(dz,x)) * div(-1,rms*N*mean_eps))
+                    // grad[#00] = scale(dz, rrms) + scale(x, sum_xdz * div(-1,rms*N*mean_eps))
+                    // a = b*c + d*e
+                    // a = b*c*f/f + d*e*f/f
+                    // a = (b*c*f + d*e*f)*(1/f)
+                    // a = (b*c*(1/c) + d*e*(1/c))*(1/(1/c))
+                    // a = (b + d*e/c)*c
+                    // b = dz, c = rrms, d = x, e = sum_xdz * div(-1,rms*N*mean_eps)
+                    // a = (dz + x*sum_xdz * div(-1,rms*N*mean_eps)/rrms)*rrms
+                    // a = (dz + x*sum_xdz * div(-1,rms*N*mean_eps)*rms)*rrms
+                    // a = (dz + x*sum_xdz * div(-rms,rms*N*mean_eps))*rrms
+                    // a = (dz + x*sum_xdz * div(-1,N*mean_eps))*rrms
+                    // a = (dz + x*div(-sum_xdz,N*mean_eps))*rrms
+                    // a = (dz + x*div(-mean_xdz,mean_eps))*rrms
+                    // grad[#00] = scale(dz + scale(x, div(-mean_xdz,mean_eps)),rrms)
+                    // grad[#00] = scale(dz + scale(x, -mean_xdz/mean_eps),rrms)
+                    // dx = scale(dz + scale(x, -mean_xdz/mean_eps),rrms)
+                }
+                // dx = scale(dz + scale(x, -mean_xdz/mean_eps),rrms)
+                // post-order:
+                // dx := x
+                // dx := scale(dx,-mean_xdz/mean_eps)
+                // dx := add(dx, dz)
+                // dx := scale(dx, rrms)
+                float * dx = (float *) ((char *) dst->data + i01*nb1 + i02*nb2 + i03*nb3);
+
+                ggml_vec_cpy_f32  (ne00, dx, x);
+                // ggml_vec_scale_f32(ne00, dx, -mean_xdz/mean_eps);
+                ggml_vec_scale_f32(ne00, dx, (float)(-sum_xdz)/sum_eps);
+                ggml_vec_acc_f32  (ne00, dx, dz);
+                ggml_vec_scale_f32(ne00, dx, rrms);
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_rms_norm_back(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_rms_norm_back_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_group_norm
+
+static void ggml_compute_forward_group_norm_f32(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    const float eps = 1e-6f; // TODO: make this a parameter
+
+    // TODO: optimize
+
+    int n_channels = src0->ne[2];
+    int n_groups = dst->op_params[0];
+    int n_channels_per_group = (n_channels + n_groups - 1) / n_groups;
+    for (int i = ith; i < n_groups; i += nth) {
+        int start = i * n_channels_per_group;
+        int end = start + n_channels_per_group;
+        if (end > n_channels) {
+            end = n_channels;
+        }
+        int step = end - start;
+
+        for (int64_t i03 = 0; i03 < ne03; i03++) {
+            ggml_float sum = 0.0;
+            for (int64_t i02 = start; i02 < end; i02++) {
+                for (int64_t i01 = 0; i01 < ne01; i01++) {
+                    const float * x = (float *)((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03);
+
+                    ggml_float sumr = 0.0;
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        sumr += (ggml_float)x[i00];
+                    }
+                    sum += sumr;
+                }
+            }
+            const float mean = sum / (ne00 * ne01 * step);
+
+            ggml_float sum2 = 0.0;
+            for (int64_t i02 = start; i02 < end; i02++) {
+                for (int64_t i01 = 0; i01 < ne01; i01++) {
+                    const float * x = (float *)((char *) src0->data + i01 * nb01 + i02 * nb02 + i03 * nb03);
+
+                    float * y = (float *)((char *) dst->data + i01 * nb1 + i02 * nb2 + i03 * nb3);
+
+                    ggml_float sumr = 0.0;
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        float v = x[i00] - mean;
+                        y[i00] = v;
+                        sumr += (ggml_float)(v * v);
+                    }
+                    sum2 += sumr;
+                }
+            }
+            const float variance = sum2 / (ne00 * ne01 * step);
+            const float scale = 1.0f / sqrtf(variance + eps);
+
+            for (int64_t i02 = start; i02 < end; i02++) {
+                for (int64_t i01 = 0; i01 < ne01; i01++) {
+                    float * y = (float *)((char *) dst->data + i01 * nb1 + i02 * nb2 + i03 * nb3);
+                    ggml_vec_scale_f32(ne00, y, scale);
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_group_norm(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_group_norm_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_mul_mat
+
+static void ggml_compute_forward_mul_mat_one_chunk(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst,
+    const int64_t num_rows_per_vec_dot,
+    const int64_t ir0_start,
+    const int64_t ir0_end,
+    const int64_t ir1_start,
+    const int64_t ir1_end) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const enum ggml_type type = src0->type;
+
+    const bool src1_cont = ggml_is_contiguous(src1);
+
+    ggml_vec_dot_t const vec_dot      = type_traits[type].vec_dot;
+    enum ggml_type const vec_dot_type = type_traits[type].vec_dot_type;
+
+    // broadcast factors
+    const int64_t r2 = ne12 / ne02;
+    const int64_t r3 = ne13 / ne03;
+
+    //printf("ir0_start = %6lld, ir0_end = %6lld, ir1_start = %6lld, ir1_end = %6lld\n", ir0_start, ir0_end, ir1_start, ir1_end);
+
+    // threads with no work simply yield (not sure if it helps)
+    if (ir0_start >= ir0_end || ir1_start >= ir1_end) {
+        return;
+    }
+
+    const void * wdata = (src1->type == vec_dot_type) ? src1->data : params->wdata;
+    const size_t row_size = ggml_row_size(vec_dot_type, ne10);
+
+    assert(ne12 % ne02 == 0);
+    assert(ne13 % ne03 == 0);
+
+    // block-tiling attempt
+    const int64_t blck_0 = 16;
+    const int64_t blck_1 = 16;
+
+    const size_t src1_col_stride = src1_cont || src1->type != vec_dot_type ? row_size : nb11;
+
+    // attempt to reduce false-sharing (does not seem to make a difference)
+    // 16 * 2, accounting for mmla kernels
+    float tmp[32];
+
+    for (int64_t iir1 = ir1_start; iir1 < ir1_end; iir1 += blck_1) {
+        for (int64_t iir0 = ir0_start; iir0 < ir0_end; iir0 += blck_0) {
+            for (int64_t ir1 = iir1; ir1 < iir1 + blck_1 && ir1 < ir1_end; ir1 += num_rows_per_vec_dot) {
+                const int64_t i13 = (ir1 / (ne12 * ne1));
+                const int64_t i12 = (ir1 - i13 * ne12 * ne1) / ne1;
+                const int64_t i11 = (ir1 - i13 * ne12 * ne1 - i12 * ne1);
+
+                // broadcast src0 into src1
+                const int64_t i03 = i13 / r3;
+                const int64_t i02 = i12 / r2;
+
+                const int64_t i1 = i11;
+                const int64_t i2 = i12;
+                const int64_t i3 = i13;
+
+                const char * src0_row = (const char*)src0->data + (0 + i02 * nb02 + i03 * nb03);
+
+                // desc: when src1 is not a contiguous memory block we have to calculate the offset using the strides
+                //       if it is, then we have either copied the data to params->wdata and made it contiguous or we are using
+                //       the original src1 data pointer, so we should index using the indices directly
+                // TODO: this is a bit of a hack, we should probably have a better way to handle this
+                const char * src1_col = (const char*)wdata +
+                    (src1_cont || src1->type != vec_dot_type
+                        ? (i11 + i12 * ne11 + i13 * ne12 * ne11) * row_size
+                        : (i11 * nb11 + i12 * nb12 + i13 * nb13));
+                float * dst_col = (float*)((char*)dst->data + (i1 * nb1 + i2 * nb2 + i3 * nb3));
+
+                //for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir0_end; ++ir0) {
+                //    vec_dot(ne00, &dst_col[ir0], src0_row + ir0*nb01, src1_col);
+                //}
+
+                for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir0_end; ir0 += num_rows_per_vec_dot) {
+                    vec_dot(ne00, &tmp[ir0 - iir0], (num_rows_per_vec_dot > 1 ? 16 : 0), src0_row + ir0 * nb01, (num_rows_per_vec_dot > 1 ? nb01 : 0), src1_col, (num_rows_per_vec_dot > 1 ? src1_col_stride : 0), num_rows_per_vec_dot);
+                }
+
+                for (int cn = 0; cn < num_rows_per_vec_dot; ++cn) {
+                    memcpy(&dst_col[iir0 + cn * nb1 / nb0], tmp + (cn * 16), (MIN(iir0 + blck_0, ir0_end) - iir0) * sizeof(float));
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_mul_mat(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const enum ggml_type type = src0->type;
+
+    enum ggml_type    const vec_dot_type          = type_traits[type].vec_dot_type;
+    ggml_from_float_t const from_float_to_vec_dot = type_traits[vec_dot_type].from_float;
+    int64_t           const vec_dot_num_rows      = type_traits[type].nrows;
+
+    GGML_ASSERT(ne0 == ne01);
+    GGML_ASSERT(ne1 == ne11);
+    GGML_ASSERT(ne2 == ne12);
+    GGML_ASSERT(ne3 == ne13);
+
+    // we don't support permuted src0 or src1
+    GGML_ASSERT(nb00 == ggml_type_size(type));
+    GGML_ASSERT(nb10 == ggml_type_size(src1->type));
+
+    // dst cannot be transposed or permuted
+    GGML_ASSERT(nb0 == sizeof(float));
+    GGML_ASSERT(nb0 <= nb1);
+    GGML_ASSERT(nb1 <= nb2);
+    GGML_ASSERT(nb2 <= nb3);
+
+    // nb01 >= nb00 - src0 is not transposed
+    //   compute by src0 rows
+
+#if GGML_USE_LLAMAFILE
+    // broadcast factors
+    const int64_t r2 = ne12 / ne02;
+    const int64_t r3 = ne13 / ne03;
+
+    const bool src1_cont = ggml_is_contiguous(src1);
+
+    if (src1_cont) {
+        for (int64_t i13 = 0; i13 < ne13; i13++)
+            for (int64_t i12 = 0; i12 < ne12; i12++)
+                if (!llamafile_sgemm(ne01, ne11, ne00/ggml_blck_size(src0->type),
+                                     (const char *)src0->data + i12/r2*nb02 + i13/r3*nb03,
+                                     nb01/ggml_type_size(src0->type),
+                                     (const char *)src1->data + i12*nb12 + i13*nb13,
+                                     nb11/ggml_type_size(src1->type),
+                                     (char *)dst->data + i12*nb2 + i13*nb3,
+                                     nb1/ggml_type_size(dst->type),
+                                     ith, nth,
+                                     src0->type,
+                                     src1->type,
+                                     dst->type))
+                    goto UseGgmlGemm1;
+        return;
+    }
+UseGgmlGemm1:;
+#endif
+
+    if (src1->type != vec_dot_type) {
+        char * wdata = params->wdata;
+
+        const size_t nbw1 = ggml_row_size(vec_dot_type, ne10);
+        const size_t nbw2 = nbw1*ne11;
+        const size_t nbw3 = nbw2*ne12;
+
+        assert(params->wsize >= ne13*nbw3);
+        GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+        for (int64_t i13 = 0; i13 < ne13; ++i13) {
+            for (int64_t i12 = 0; i12 < ne12; ++i12) {
+                for (int64_t i11 = ith; i11 < ne11; i11 += nth) {
+                    from_float_to_vec_dot((float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11),
+                                          (void *)               (wdata + i13*nbw3 + i12*nbw2 + i11*nbw1),
+                                           ne10);
+                }
+            }
+        }
+    }
+
+    if (ith == 0) {
+        // Every thread starts at ith, so the first unprocessed chunk is nth.  This save a bit of coordination right at the start.
+        atomic_store(&params->shared->current_chunk, nth);
+    }
+
+    ggml_barrier(params->shared);
+
+#if GGML_USE_LLAMAFILE
+    if (src1->type != vec_dot_type) {
+        const void* wdata = (src1->type == vec_dot_type) ? src1->data : params->wdata;
+        const size_t row_size = ggml_row_size(vec_dot_type, ne10);
+
+        for (int64_t i13 = 0; i13 < ne13; i13++)
+            for (int64_t i12 = 0; i12 < ne12; i12++)
+                if (!llamafile_sgemm(ne01, ne11, ne00/ggml_blck_size(src0->type),
+                                     (const char *)src0->data + i12/r2*nb02 + i13/r3*nb03,
+                                     nb01/ggml_type_size(src0->type),
+                                     (const char *)wdata + (i12*ne11 + i13*ne12*ne11)*row_size,
+                                     row_size/ggml_type_size(vec_dot_type),
+                                     (char *)dst->data + i12*nb2 + i13*nb3,
+                                     nb1/ggml_type_size(dst->type),
+                                     ith, nth,
+                                     src0->type,
+                                     vec_dot_type,
+                                     dst->type))
+                    goto UseGgmlGemm2;
+        return;
+    }
+UseGgmlGemm2:;
+#endif
+
+    // This is the size of the first dimension of the result, so we can iterate that way. (see the ASSERT above, these are the same numbers)
+    const int64_t nr0 = ne0;
+
+    // This is the size of the rest of the dimensions of the result
+    const int64_t nr1 = ne1 * ne2 * ne3;
+
+    // dot kernels can handle 1 row and col at a time, but mmla kernels can process 2 rows and cols
+    int64_t num_rows_per_vec_dot = vec_dot_num_rows;
+    // TODO: currently the mmla kernels support only even numbered rows/cols.
+    // this check can be removed once they are extended to support odd numbered rows/cols too
+    if ((nr0 % 2 != 0) || (ne11 % 2 != 0)) {
+        num_rows_per_vec_dot = 1;
+    }
+
+    // Now select a reasonable chunk size.
+    int chunk_size = 16;
+
+    // We need to step up the size if it's small
+    if (nr0 == 1 || nr1 == 1) {
+        chunk_size = 64;
+    }
+
+    // distribute the work across the inner or outer loop based on which one is larger
+    // The number of chunks in the 0/1 dim.
+    // CEIL(nr0/chunk_size)
+    int64_t nchunk0 = (nr0 + chunk_size - 1) / chunk_size;
+    int64_t nchunk1 = (nr1 + chunk_size - 1) / chunk_size;
+
+    // If the chunking is poor for the number of threads on this setup, scrap the whole plan.  Re-chunk it by thread.
+    //   Also, chunking by thread was measured to have perform better on NUMA systems.  See https://github.com/ggerganov/llama.cpp/pull/6915
+    //   In theory, chunking should be just as useful on NUMA and non NUMA systems, but testing disagreed with that.
+    if (nchunk0 * nchunk1 < nth * 4 || ggml_is_numa()) {
+        // distribute the thread work across the inner or outer loop based on which one is larger
+        nchunk0 = nr0 > nr1 ? nth : 1; // parallelize by src0 rows
+        nchunk1 = nr0 > nr1 ? 1 : nth; // parallelize by src1 rows
+    }
+
+    // The number of elements in each chunk
+    const int64_t dr0 = (nr0 + nchunk0 - 1) / nchunk0;
+    const int64_t dr1 = (nr1 + nchunk1 - 1) / nchunk1;
+
+    // The first chunk comes from our thread_id, the rest will get auto-assigned.
+    int current_chunk = ith;
+
+    while (current_chunk < nchunk0 * nchunk1) {
+        const int64_t ith0 = current_chunk % nchunk0;
+        const int64_t ith1 = current_chunk / nchunk0;
+
+        const int64_t ir0_start = dr0 * ith0;
+        const int64_t ir0_end = MIN(ir0_start + dr0, nr0);
+
+        const int64_t ir1_start = dr1 * ith1;
+        const int64_t ir1_end = MIN(ir1_start + dr1, nr1);
+
+        ggml_compute_forward_mul_mat_one_chunk(params, dst, num_rows_per_vec_dot, ir0_start, ir0_end, ir1_start, ir1_end);
+
+        if (nth >= nchunk0 * nchunk1) {
+            break;
+        }
+
+        current_chunk = atomic_fetch_add(&params->shared->current_chunk, 1);
+    }
+}
+
+// ggml_compute_forward_mul_mat_id
+
+static void ggml_compute_forward_mul_mat_id(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+    const struct ggml_tensor * ids = dst->src[2];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const enum ggml_type type = src0->type;
+
+    const bool src1_cont = ggml_is_contiguous(src1);
+
+    ggml_vec_dot_t    const vec_dot               = type_traits[type].vec_dot;
+    enum ggml_type    const vec_dot_type          = type_traits[type].vec_dot_type;
+    ggml_from_float_t const from_float_to_vec_dot = type_traits[vec_dot_type].from_float;
+
+    // we don't support permuted src0 or src1
+    GGML_ASSERT(nb00 == ggml_type_size(type));
+    GGML_ASSERT(nb10 == ggml_type_size(src1->type));
+
+    // dst cannot be transposed or permuted
+    GGML_ASSERT(nb0 == sizeof(float));
+    GGML_ASSERT(nb0 <= nb1);
+    GGML_ASSERT(nb1 <= nb2);
+    GGML_ASSERT(nb2 <= nb3);
+
+    // row groups
+    const int n_ids = ids->ne[0]; // n_expert_used
+    const int n_as  = ne02;       // n_expert
+
+    char * wdata_src1_end = (src1->type == vec_dot_type) ?
+            (char *) params->wdata :
+            (char *) params->wdata + GGML_PAD(ggml_row_size(vec_dot_type, ggml_nelements(src1)), sizeof(int64_t));
+
+    struct mmid_row_mapping {
+        int32_t i1;
+        int32_t i2;
+    };
+
+    int64_t * matrix_row_counts = (int64_t *) (wdata_src1_end); // [n_as]
+    struct mmid_row_mapping * matrix_rows = (struct mmid_row_mapping *)(matrix_row_counts + n_as); // [n_as][ne11]
+
+    if (src1->type != vec_dot_type) {
+        char * wdata = params->wdata;
+
+        const size_t nbw1 = ggml_row_size(vec_dot_type, ne10);
+        const size_t nbw2 = nbw1*ne11;
+        const size_t nbw3 = nbw2*ne12;
+
+        assert(params->wsize >= ne13*nbw3);
+        GGML_ASSERT(src1->type == GGML_TYPE_F32);
+
+        for (int64_t i13 = 0; i13 < ne13; ++i13) {
+            for (int64_t i12 = 0; i12 < ne12; ++i12) {
+                for (int64_t i11 = ith; i11 < ne11; i11 += nth) {
+                    from_float_to_vec_dot((float *)((char *) src1->data + i13*nb13 + i12*nb12 + i11*nb11),
+                                          (void *)               (wdata + i13*nbw3 + i12*nbw2 + i11*nbw1),
+                                           ne10);
+                }
+            }
+        }
+    }
+
+#define MMID_MATRIX_ROW(row_id, i1) matrix_rows[(row_id)*ne12 + (i1)]
+
+    if (ith == 0) {
+        // initialize matrix_row_counts
+        memset(matrix_row_counts, 0, n_as*sizeof(int64_t));
+
+        // group rows by src0 matrix
+        for (int64_t iid1 = 0; iid1 < ids->ne[1]; ++iid1) {
+            for (int id = 0; id < n_ids; ++id) {
+                const int32_t i02 = *(const int32_t *) ((const char *) ids->data + iid1*ids->nb[1] + id*ids->nb[0]);
+
+                assert(i02 >= 0 && i02 < n_as);
+
+                MMID_MATRIX_ROW(i02, matrix_row_counts[i02]) = (struct mmid_row_mapping) {id, iid1};
+                matrix_row_counts[i02] += 1;
+            }
+        }
+    }
+
+    ggml_barrier(params->shared);
+
+    // compute each matrix multiplication in sequence
+    for (int cur_a = 0; cur_a < n_as; ++cur_a) {
+        const int64_t cne1 = matrix_row_counts[cur_a];
+
+        if (cne1 == 0) {
+            continue;
+        }
+
+        const char * src0_cur = (const char *) src0->data + cur_a*nb02;
+
+        const void * wdata    = (src1->type == vec_dot_type) ? src1->data : params->wdata;
+        const size_t row_size = ggml_row_size(vec_dot_type, ne10);
+
+        const int64_t nr0 = ne01; // src0 rows
+        const int64_t nr1 = cne1; // src1 rows
+
+        // distribute the thread work across the inner or outer loop based on which one is larger
+
+        const int64_t nth0 = nr0 > nr1 ? nth : 1; // parallelize by src0 rows
+        const int64_t nth1 = nr0 > nr1 ? 1 : nth; // parallelize by src1 rows
+
+        const int64_t ith0 = ith % nth0;
+        const int64_t ith1 = ith / nth0;
+
+        const int64_t dr0 = (nr0 + nth0 - 1)/nth0;
+        const int64_t dr1 = (nr1 + nth1 - 1)/nth1;
+
+        const int64_t ir010 = dr0*ith0;
+        const int64_t ir011 = MIN(ir010 + dr0, nr0);
+
+        const int64_t ir110 = dr1*ith1;
+        const int64_t ir111 = MIN(ir110 + dr1, nr1);
+
+        // threads with no work simply yield (not sure if it helps)
+        //if (ir010 >= ir011 || ir110 >= ir111) {
+        //    sched_yield();
+        //    continue;
+        //}
+
+        // block-tiling attempt
+        const int64_t blck_0 = 16;
+        const int64_t blck_1 = 16;
+
+        // attempt to reduce false-sharing (does not seem to make a difference)
+        float tmp[16];
+
+        for (int64_t iir1 = ir110; iir1 < ir111; iir1 += blck_1) {
+            for (int64_t iir0 = ir010; iir0 < ir011; iir0 += blck_0) {
+                for (int64_t ir1 = iir1; ir1 < iir1 + blck_1 && ir1 < ir111; ++ir1) {
+                    const int64_t _i12 = ir1; // logical row index for this expert
+
+                    struct mmid_row_mapping row_mapping = MMID_MATRIX_ROW(cur_a, _i12);
+                    const int id       = row_mapping.i1; // selected expert index
+
+                    const int64_t  i11 = id % ne11;
+                    const int64_t  i12 = row_mapping.i2; // row index in src1
+
+                    const int64_t  i1 = id;  // selected expert index
+                    const int64_t  i2 = i12; // row
+
+                    // desc: when src1 is not a contiguous memory block we have to calculate the offset using the strides
+                    //       if it is, then we have either copied the data to params->wdata and made it contiguous or we are using
+                    //       the original src1 data pointer, so we should index using the indices directly
+                    // TODO: this is a bit of a hack, we should probably have a better way to handle this
+                    const char * src1_col = (const char *) wdata +
+                        (src1_cont || src1->type != vec_dot_type
+                        ? (i11      + i12*ne11)*row_size
+                        : (i11*nb11 + i12*nb12));
+
+                    float * dst_col = (float *) ((char *) dst->data + (i1*nb1 + i2*nb2));
+
+                    //for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir011; ++ir0) {
+                    //    vec_dot(ne00, &dst_col[ir0], src0_row + ir0*nb01, src1_col);
+                    //}
+
+                    for (int64_t ir0 = iir0; ir0 < iir0 + blck_0 && ir0 < ir011; ++ir0) {
+                        vec_dot(ne00, &tmp[ir0 - iir0], 0, src0_cur + ir0*nb01, 0, src1_col, 0, 1);
+                    }
+
+                    memcpy(&dst_col[iir0], tmp, (MIN(iir0 + blck_0, ir011) - iir0)*sizeof(float));
+                }
+            }
+        }
+    }
+
+#undef MMID_MATRIX_ROW
+}
+
+// ggml_compute_forward_out_prod
+
+static void ggml_compute_forward_out_prod_f32(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    GGML_ASSERT(ne0  == ne00);
+    GGML_ASSERT(ne1  == ne10);
+    GGML_ASSERT(ne2  == ne02);
+    GGML_ASSERT(ne02 == ne12);
+    GGML_ASSERT(ne3  == ne13);
+    GGML_ASSERT(ne03 == ne13);
+
+    // we don't support permuted src0 or src1
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    // dst cannot be transposed or permuted
+    GGML_ASSERT(nb0 == sizeof(float));
+    // GGML_ASSERT(nb0 <= nb1);
+    // GGML_ASSERT(nb1 <= nb2);
+    // GGML_ASSERT(nb2 <= nb3);
+
+    // nb01 >= nb00 - src0 is not transposed
+    //   compute by src0 rows
+
+    if (ith == 0) {
+        ggml_vec_set_f32(ne0*ne1*ne2*ne3, dst->data, 0);
+    }
+    ggml_barrier(params->shared);
+
+    // dst[:,:,:,:] = 0
+    // for i2,i3:
+    //   for i1:
+    //     for i01:
+    //       for i0:
+    //         dst[i0,i1,i2,i3] += src0[i0,i01,i2,i3] * src1[i1,i01,i2,i3]
+
+    // parallelize by last three dimensions
+
+    // total rows in dst
+    const int64_t nr = ne1*ne2*ne3;
+
+    // rows per thread
+    const int64_t dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int64_t ir0 = dr*ith;
+    const int64_t ir1 = MIN(ir0 + dr, nr);
+
+    // block-tiling attempt
+    const int64_t blck_0 = MAX(GGML_VEC_MAD_UNROLL, 32);
+    const int64_t blck_1 = 16;
+
+    for (int64_t bir = ir0; bir < ir1; bir += blck_1) {
+        const int64_t bir1 = MIN(bir + blck_1, ir1);
+        for (int64_t bi01 = 0; bi01 < ne01; bi01 += blck_0) {
+            const int64_t bne01 = MIN(bi01 + blck_0, ne01);
+            for (int64_t ir = bir; ir < bir1; ++ir) {
+                // dst indices
+                const int64_t i3 = ir/(ne2*ne1);
+                const int64_t i2 = (ir - i3*ne2*ne1)/ne1;
+                const int64_t i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+                const int64_t i02 = i2;
+                const int64_t i03 = i3;
+
+                //const int64_t i10 = i1;
+                const int64_t i12 = i2;
+                const int64_t i13 = i3;
+
+#if GGML_VEC_MAD_UNROLL > 2
+                const int64_t bne01_unroll = bne01 - (bne01 % GGML_VEC_MAD_UNROLL);
+                for (int64_t i01 = bi01; i01 < bne01_unroll; i01 += GGML_VEC_MAD_UNROLL) {
+                    const int64_t i11 = i01;
+
+                    float * s0 = (float *) ((char *) src0->data + (          i01*nb01 + i02*nb02 + i03*nb03));
+                    float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13));
+                    float * d  = (float *) ((char *)  dst->data + (          i1*nb1 + i2*nb2 + i3*nb3));
+
+                    ggml_vec_mad_f32_unroll(ne0, nb01, nb11, d, s0, s1);
+                }
+                for (int64_t i01 = bne01_unroll; i01 < bne01; ++i01) {
+                    const int64_t i11 = i01;
+
+                    float * s0 = (float *) ((char *) src0->data + (          i01*nb01 + i02*nb02 + i03*nb03));
+                    float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13));
+                    float * d  = (float *) ((char *)  dst->data + (          i1*nb1 + i2*nb2 + i3*nb3));
+
+                    ggml_vec_mad_f32(ne0, d, s0, *s1);
+                }
+#else
+                for (int64_t i01 = bi01; i01 < bne01; ++i01) {
+                    const int64_t i11 = i01;
+
+                    float * s0 = (float *) ((char *) src0->data + (          i01*nb01 + i02*nb02 + i03*nb03));
+                    float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13));
+                    float * d  = (float *) ((char *)  dst->data + (          i1*nb1 + i2*nb2 + i3*nb3));
+
+                    ggml_vec_mad_f32(ne0, d, s0, *s1);
+                }
+#endif
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_out_prod_q_f32(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_TENSOR_BINARY_OP_LOCALS;
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const enum ggml_type type = src0->type;
+    ggml_to_float_t const dequantize_row_q = type_traits[type].to_float;
+
+    GGML_ASSERT(ne02 == ne12);
+    GGML_ASSERT(ne03 == ne13);
+    GGML_ASSERT(ne2  == ne12);
+    GGML_ASSERT(ne3  == ne13);
+
+    // we don't support permuted src0 dim0
+    GGML_ASSERT(nb00 == ggml_type_size(type));
+
+    // dst dim0 cannot be transposed or permuted
+    GGML_ASSERT(nb0 == sizeof(float));
+    // GGML_ASSERT(nb0 <= nb1);
+    // GGML_ASSERT(nb1 <= nb2);
+    // GGML_ASSERT(nb2 <= nb3);
+
+    GGML_ASSERT(ne0 == ne00);
+    GGML_ASSERT(ne1 == ne10);
+    GGML_ASSERT(ne2 == ne02);
+    GGML_ASSERT(ne3 == ne03);
+
+    // nb01 >= nb00 - src0 is not transposed
+    //   compute by src0 rows
+
+    if (ith == 0) {
+        ggml_vec_set_f32(ne0*ne1*ne2*ne3, dst->data, 0);
+    }
+    ggml_barrier(params->shared);
+
+    // parallelize by last three dimensions
+
+    // total rows in dst
+    const int64_t nr = ne1*ne2*ne3;
+
+    // rows per thread
+    const int64_t dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int64_t ir0 = dr*ith;
+    const int64_t ir1 = MIN(ir0 + dr, nr);
+
+    // dst[:,:,:,:] = 0
+    // for i2,i3:
+    //   for i1:
+    //     for i01:
+    //       for i0:
+    //         dst[i0,i1,i2,i3] += src0[i0,i01,i2,i3] * src1[i1,i01,i2,i3]
+
+    float * wdata = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32) * ith;
+
+    for (int64_t ir = ir0; ir < ir1; ++ir) {
+        // dst indices
+        const int64_t i3 = ir/(ne2*ne1);
+        const int64_t i2 = (ir - i3*ne2*ne1)/ne1;
+        const int64_t i1 = (ir - i3*ne2*ne1 - i2*ne1);
+
+        const int64_t i02 = i2;
+        const int64_t i03 = i3;
+
+        //const int64_t i10 = i1;
+        const int64_t i12 = i2;
+        const int64_t i13 = i3;
+
+        for (int64_t i01 = 0; i01 < ne01; ++i01) {
+            const int64_t i11 = i01;
+
+            float * s0 = (float *) ((char *) src0->data + (          i01*nb01 + i02*nb02 + i03*nb03));
+            float * s1 = (float *) ((char *) src1->data + (i1*nb10 + i11*nb11 + i12*nb12 + i13*nb13));
+            float * d  = (float *) ((char *)  dst->data + (          i1*nb1 + i2*nb2 + i3*nb3));
+
+            dequantize_row_q(s0, wdata, ne0);
+            ggml_vec_mad_f32(ne0, d, wdata, *s1);
+        }
+    }
+}
+
+static void ggml_compute_forward_out_prod(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+        case GGML_TYPE_IQ2_XXS:
+        case GGML_TYPE_IQ2_XS:
+        case GGML_TYPE_IQ3_XXS:
+        case GGML_TYPE_IQ1_S:
+        case GGML_TYPE_IQ1_M:
+        case GGML_TYPE_IQ4_NL:
+        case GGML_TYPE_IQ4_XS:
+        case GGML_TYPE_IQ3_S:
+        case GGML_TYPE_IQ2_S:
+            {
+                ggml_compute_forward_out_prod_q_f32(params, dst);
+            } break;
+        case GGML_TYPE_F16:
+            {
+                GGML_ASSERT(false); // todo
+                // ggml_compute_forward_out_prod_f16_f32(params, dst);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_out_prod_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_scale
+
+static void ggml_compute_forward_scale_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+    GGML_ASSERT(ggml_is_contiguous(dst));
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+
+    // scale factor
+    float v;
+    memcpy(&v, dst->op_params, sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nc = src0->ne[0];
+    const int nr = ggml_nrows(src0);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    const size_t nb01 = src0->nb[1];
+
+    const size_t nb1 = dst->nb[1];
+
+    for (int i1 = ir0; i1 < ir1; i1++) {
+        if (dst->data != src0->data) {
+            // src0 is same shape as dst => same indices
+            memcpy((char *)dst->data + i1*nb1, (char *)src0->data + i1*nb01, nc * sizeof(float));
+        }
+        ggml_vec_scale_f32(nc, (float *) ((char *) dst->data + i1*nb1), v);
+    }
+}
+
+static void ggml_compute_forward_scale(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_scale_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_set
+
+static void ggml_compute_forward_set_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+    GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0));
+
+    // view src0 and dst with these strides and data offset inbytes during set
+    // nb0 is implicitly element_size because src0 and dst are contiguous
+    size_t nb1     = ((int32_t *) dst->op_params)[0];
+    size_t nb2     = ((int32_t *) dst->op_params)[1];
+    size_t nb3     = ((int32_t *) dst->op_params)[2];
+    size_t offset  = ((int32_t *) dst->op_params)[3];
+    bool   inplace = (bool) ((int32_t *) dst->op_params)[4];
+
+    if (!inplace) {
+        if (params->ith == 0) {
+            // memcpy needs to be synchronized across threads to avoid race conditions.
+            // => do it in INIT phase
+            memcpy(
+                ((char *)  dst->data),
+                ((char *) src0->data),
+                ggml_nbytes(dst));
+        }
+        ggml_barrier(params->shared);
+    }
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr = ggml_nrows(src1);
+    const int nc = src1->ne[0];
+
+    GGML_TENSOR_LOCALS(int64_t, ne1, src1, ne)
+    GGML_TENSOR_LOCALS(size_t,  nb1, src1, nb)
+
+    // src0 and dst as viewed during set
+    const size_t nb0 = ggml_element_size(src0);
+
+    const int im0 = (ne10 == 0 ? 0 : ne10-1);
+    const int im1 = (ne11 == 0 ? 0 : ne11-1);
+    const int im2 = (ne12 == 0 ? 0 : ne12-1);
+    const int im3 = (ne13 == 0 ? 0 : ne13-1);
+
+    GGML_ASSERT(offset + im0*nb0  + im1*nb1  + im2*nb2  + im3*nb3  <= ggml_nbytes(dst));
+
+    GGML_ASSERT(nb10 == sizeof(float));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // src0 and dst are viewed with shape of src1 and offset
+        // => same indices
+        const int i3 = ir/(ne12*ne11);
+        const int i2 = (ir - i3*ne12*ne11)/ne11;
+        const int i1 = (ir - i3*ne12*ne11 - i2*ne11);
+
+        ggml_vec_cpy_f32(nc,
+                (float *) ((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + offset),
+                (float *) ((char *) src1->data + i3*nb13 + i2*nb12 + i1*nb11));
+    }
+}
+
+static void ggml_compute_forward_set(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_set_f32(params, dst);
+            } break;
+        case GGML_TYPE_F16:
+        case GGML_TYPE_BF16:
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q8_1:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+        case GGML_TYPE_IQ2_XXS:
+        case GGML_TYPE_IQ2_XS:
+        case GGML_TYPE_IQ3_XXS:
+        case GGML_TYPE_IQ1_S:
+        case GGML_TYPE_IQ1_M:
+        case GGML_TYPE_IQ4_NL:
+        case GGML_TYPE_IQ4_XS:
+        case GGML_TYPE_IQ3_S:
+        case GGML_TYPE_IQ2_S:
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_cpy
+
+static void ggml_compute_forward_cpy(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+    ggml_compute_forward_dup(params, dst);
+}
+
+// ggml_compute_forward_cont
+
+static void ggml_compute_forward_cont(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+    ggml_compute_forward_dup(params, dst);
+}
+
+// ggml_compute_forward_reshape
+
+static void ggml_compute_forward_reshape(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+    // NOP
+    UNUSED(params);
+    UNUSED(dst);
+}
+
+// ggml_compute_forward_view
+
+static void ggml_compute_forward_view(
+        const struct ggml_compute_params * params,
+        const struct ggml_tensor * dst) {
+    // NOP
+    UNUSED(params);
+    UNUSED(dst);
+}
+
+// ggml_compute_forward_permute
+
+static void ggml_compute_forward_permute(
+        const struct ggml_compute_params * params,
+        const struct ggml_tensor * dst) {
+    // NOP
+    UNUSED(params);
+    UNUSED(dst);
+}
+
+// ggml_compute_forward_transpose
+
+static void ggml_compute_forward_transpose(
+        const struct ggml_compute_params * params,
+        const struct ggml_tensor * dst) {
+    // NOP
+    UNUSED(params);
+    UNUSED(dst);
+}
+
+// ggml_compute_forward_get_rows
+
+static void ggml_compute_forward_get_rows_q(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int64_t nc = ne00;
+    const int64_t nr = ggml_nelements(src1);
+
+    const enum ggml_type type = src0->type;
+    ggml_to_float_t const dequantize_row_q = type_traits[type].to_float;
+
+    assert(ne0  == nc);
+    assert(ne02 == ne11);
+    assert(nb00 == ggml_type_size(type));
+    assert(ggml_nrows(dst) == nr);
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int64_t i = ir0; i < ir1; ++i) {
+        const int64_t i12 = i/(ne11*ne10);
+        const int64_t i11 = (i - i12*ne11*ne10)/ne10;
+        const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10);
+        const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12);
+
+        assert(i01 >= 0 && i01 < ne01);
+
+        dequantize_row_q(
+                (const void *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03),
+                     (float *) ((char *)  dst->data + i10*nb1  + i11*nb2  + i12*nb3), nc);
+    }
+}
+
+static void ggml_compute_forward_get_rows_f16(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int64_t nc = ne00;
+    const int64_t nr = ggml_nelements(src1);
+
+    assert(ne0  == nc);
+    assert(ne02 == ne11);
+    assert(nb00 == sizeof(ggml_fp16_t));
+    assert(ggml_nrows(dst) == nr);
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int64_t i = ir0; i < ir1; ++i) {
+        const int64_t i12 = i/(ne11*ne10);
+        const int64_t i11 = (i - i12*ne11*ne10)/ne10;
+        const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10);
+        const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12);
+
+        assert(i01 >= 0 && i01 < ne01);
+
+        ggml_fp16_to_fp32_row(
+                (const void *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03),
+                     (float *) ((char *)  dst->data + i10*nb1  + i11*nb2  + i12*nb3), nc);
+    }
+}
+
+static void ggml_compute_forward_get_rows_bf16(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int64_t nc = ne00;
+    const int64_t nr = ggml_nelements(src1);
+
+    assert(ne0  == nc);
+    assert(ne02 == ne11);
+    assert(nb00 == sizeof(ggml_bf16_t));
+    assert(ggml_nrows(dst) == nr);
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int64_t i = ir0; i < ir1; ++i) {
+        const int64_t i12 = i/(ne11*ne10);
+        const int64_t i11 = (i - i12*ne11*ne10)/ne10;
+        const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10);
+        const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12);
+
+        assert(i01 >= 0 && i01 < ne01);
+
+        ggml_bf16_to_fp32_row(
+                (const void *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03),
+                     (float *) ((char *)  dst->data + i10*nb1  + i11*nb2  + i12*nb3), nc);
+    }
+}
+
+static void ggml_compute_forward_get_rows_f32(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int64_t nc = ne00;
+    const int64_t nr = ggml_nelements(src1);
+
+    assert(ne0  == nc);
+    assert(ne02 == ne11);
+    assert(nb00 == sizeof(float));
+    assert(ggml_nrows(dst) == nr);
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int64_t i = ir0; i < ir1; ++i) {
+        const int64_t i12 = i/(ne11*ne10);
+        const int64_t i11 = (i - i12*ne11*ne10)/ne10;
+        const int64_t i10 = (i - i12*ne11*ne10 - i11*ne10);
+        const int64_t i01 = *(int32_t *) ((char *) src1->data + i10*nb10 + i11*nb11 + i12*nb12);
+
+        assert(i01 >= 0 && i01 < ne01);
+
+        ggml_vec_cpy_f32(nc,
+                (float *) ((char *)  dst->data + i10*nb1  + i11*nb2  + i12*nb3),
+                (float *) ((char *) src0->data + i01*nb01 + i11*nb02 + i12*nb03));
+    }
+}
+
+static void ggml_compute_forward_get_rows(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q8_1:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+        case GGML_TYPE_IQ2_XXS:
+        case GGML_TYPE_IQ2_XS:
+        case GGML_TYPE_IQ3_XXS:
+        case GGML_TYPE_IQ1_S:
+        case GGML_TYPE_IQ1_M:
+        case GGML_TYPE_IQ4_NL:
+        case GGML_TYPE_IQ4_XS:
+        case GGML_TYPE_IQ3_S:
+        case GGML_TYPE_IQ2_S:
+            {
+                ggml_compute_forward_get_rows_q(params, dst);
+            } break;
+        case GGML_TYPE_F16:
+            {
+                ggml_compute_forward_get_rows_f16(params, dst);
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                ggml_compute_forward_get_rows_bf16(params, dst);
+            } break;
+        case GGML_TYPE_F32:
+        case GGML_TYPE_I32:
+            {
+                ggml_compute_forward_get_rows_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+
+    //static bool first = true;
+    //printf("ne0 = %d, ne1 = %d, ne2 = %d\n", dst->ne[0], dst->ne[1], dst->ne[2]);
+    //if (first) {
+    //    first = false;
+    //} else {
+    //    for (int k = 0; k < dst->ne[1]; ++k) {
+    //        for (int j = 0; j < dst->ne[0]/16; ++j) {
+    //            for (int i = 0; i < 16; ++i) {
+    //                printf("%8.4f ", ((float *) dst->data)[k*dst->ne[0] + j*16 + i]);
+    //            }
+    //            printf("\n");
+    //        }
+    //        printf("\n");
+    //    }
+    //    printf("\n");
+    //    exit(0);
+    //}
+}
+
+// ggml_compute_forward_get_rows_back
+
+static void ggml_compute_forward_get_rows_back_f32_f16(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    GGML_ASSERT(ggml_is_contiguous(dst));
+
+    // ggml_compute_forward_dup_same_cont(params, opt0, dst);
+
+    memset(dst->data, 0, ggml_nbytes(dst));
+
+    const int nc = src0->ne[0];
+    const int nr = ggml_nelements(src1);
+
+    GGML_ASSERT( dst->ne[0] == nc);
+    GGML_ASSERT(src0->nb[0] == sizeof(ggml_fp16_t));
+
+    for (int i = 0; i < nr; ++i) {
+        const int r = ((int32_t *) src1->data)[i];
+
+        for (int j = 0; j < nc; ++j) {
+            ggml_fp16_t v = ((ggml_fp16_t *) ((char *) src0->data + i*src0->nb[1]))[j];
+            ((float *) ((char *) dst->data + r*dst->nb[1]))[j] += GGML_FP16_TO_FP32(v);
+        }
+    }
+}
+
+static void ggml_compute_forward_get_rows_back_f32(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    GGML_ASSERT(ggml_is_contiguous(dst));
+
+    // ggml_compute_forward_dup_same_cont(params, opt0, dst);
+
+    memset(dst->data, 0, ggml_nbytes(dst));
+
+    const int nc = src0->ne[0];
+    const int nr = ggml_nelements(src1);
+
+    GGML_ASSERT( dst->ne[0] == nc);
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+
+    for (int i = 0; i < nr; ++i) {
+        const int r = ((int32_t *) src1->data)[i];
+
+        ggml_vec_add_f32(nc,
+                (float *) ((char *)  dst->data + r*dst->nb[1]),
+                (float *) ((char *)  dst->data + r*dst->nb[1]),
+                (float *) ((char *) src0->data + i*src0->nb[1]));
+    }
+}
+
+static void ggml_compute_forward_get_rows_back(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F16:
+            {
+                ggml_compute_forward_get_rows_back_f32_f16(params, dst);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_get_rows_back_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+
+    //static bool first = true;
+    //printf("ne0 = %d, ne1 = %d, ne2 = %d\n", dst->ne[0], dst->ne[1], dst->ne[2]);
+    //if (first) {
+    //    first = false;
+    //} else {
+    //    for (int k = 0; k < dst->ne[1]; ++k) {
+    //        for (int j = 0; j < dst->ne[0]/16; ++j) {
+    //            for (int i = 0; i < 16; ++i) {
+    //                printf("%8.4f ", ((float *) dst->data)[k*dst->ne[0] + j*16 + i]);
+    //            }
+    //            printf("\n");
+    //        }
+    //        printf("\n");
+    //    }
+    //    printf("\n");
+    //    exit(0);
+    //}
+}
+
+// ggml_compute_forward_diag
+
+static void ggml_compute_forward_diag_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    // TODO: handle transposed/permuted matrices
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    GGML_ASSERT(ne00 == ne0);
+    GGML_ASSERT(ne00 == ne1);
+    GGML_ASSERT(ne01 == 1);
+    GGML_ASSERT(ne02 == ne2);
+    GGML_ASSERT(ne03 == ne3);
+
+    GGML_ASSERT(nb00 == sizeof(float));
+    GGML_ASSERT(nb0  == sizeof(float));
+
+    for (int i3 = 0; i3 < ne3; i3++) {
+        for (int i2 = 0; i2 < ne2; i2++) {
+            for (int i1 = 0; i1 < ne1; i1++) {
+                float * d = (float *)((char *)  dst->data + i3*nb3  + i2*nb2 + i1*nb1);
+                float * s = (float *)((char *) src0->data + i3*nb03 + i2*nb02);
+                for (int i0 = 0; i0 < i1; i0++) {
+                    d[i0] = 0;
+                }
+                d[i1] = s[i1];
+                for (int i0 = i1+1; i0 < ne0; i0++) {
+                    d[i0] = 0;
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_diag(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_diag_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_diag_mask_inf
+
+static void ggml_compute_forward_diag_mask_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst,
+        const float value) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int  n_past  = ((int32_t *) dst->op_params)[0];
+    const bool inplace = src0->data == dst->data;
+
+    GGML_ASSERT(n_past >= 0);
+
+    if (!inplace) {
+        if (ith == 0) {
+            // memcpy needs to be synchronized across threads to avoid race conditions.
+            // => do it in INIT phase
+            GGML_ASSERT(ggml_nelements(dst) == ggml_nelements(src0));
+            GGML_ASSERT(ggml_is_contiguous(dst) && ggml_is_contiguous(src0));
+            memcpy(
+                ((char *)  dst->data),
+                ((char *) src0->data),
+                ggml_nbytes(dst));
+        }
+        ggml_barrier(params->shared);
+    }
+
+    // TODO: handle transposed/permuted matrices
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+    const int nr = src0->ne[1];
+    const int nz = n/nr;
+
+    GGML_ASSERT( dst->nb[0] == sizeof(float));
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+
+    for (int k = 0; k < nz; k++) {
+        for (int j = ith; j < nr; j += nth) {
+            for (int i = n_past; i < nc; i++) {
+                if (i > n_past + j) {
+                    *(float *)((char *) dst->data + k*dst->nb[2] + j*dst->nb[1] + i*dst->nb[0]) = value;
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_diag_mask_inf(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_diag_mask_f32(params, dst, -INFINITY);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+static void ggml_compute_forward_diag_mask_zero(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_diag_mask_f32(params, dst, 0);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_soft_max
+
+static void ggml_compute_forward_soft_max_f32(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    assert(ggml_is_contiguous(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    float scale    = 1.0f;
+    float max_bias = 0.0f;
+
+    memcpy(&scale,    (float *) dst->op_params + 0, sizeof(float));
+    memcpy(&max_bias, (float *) dst->op_params + 1, sizeof(float));
+
+    // TODO: handle transposed/permuted matrices
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    //const int64_t ne11 = src1 ? src1->ne[1] : 1;
+
+    // TODO: is this supposed to be ceil instead of floor?
+    //       https://huggingface.co/mosaicml/mpt-7b/blob/main/attention.py#L370
+    const uint32_t n_head      = ne02;
+    const uint32_t n_head_log2 = 1u << (uint32_t) floor(log2(n_head));
+
+    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
+    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
+
+    const int nc = src0->ne[0];
+    const int nr = ggml_nrows(src0);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    float * wp = (float *) params->wdata + (nc + CACHE_LINE_SIZE_F32) * ith;
+
+    const bool use_f16 = (src1 && src1->type == GGML_TYPE_F16);
+
+    for (int i1 = ir0; i1 < ir1; i1++) {
+        // ALiBi
+        const uint32_t h = (i1/ne01)%ne02; // head
+        const float slope = (max_bias > 0.0f) ? h < n_head_log2 ? powf(m0, h + 1) : powf(m1, 2*(h - n_head_log2) + 1) : 1.0f;
+
+        float * sp = (float *)((char *) src0->data + i1*src0->nb[1]);
+        float * dp = (float *)((char *)  dst->data +  i1*dst->nb[1]);
+
+        // broadcast the mask across rows
+        ggml_fp16_t * mp_f16 = src1 ? (ggml_fp16_t *)((char *) src1->data) + (i1%ne01)*ne00 : NULL;
+        float       * mp_f32 = src1 ? (float       *)((char *) src1->data) + (i1%ne01)*ne00 : NULL;
+
+        ggml_vec_cpy_f32  (nc, wp, sp);
+        ggml_vec_scale_f32(nc, wp, scale);
+        if (mp_f32) {
+            if (use_f16) {
+                for (int i = 0; i < nc; ++i) {
+                    wp[i] += slope*GGML_FP16_TO_FP32(mp_f16[i]);
+                }
+            } else {
+                for (int i = 0; i < nc; ++i) {
+                    wp[i] += slope*mp_f32[i];
+                }
+            }
+        }
+
+#ifndef NDEBUG
+        for (int i = 0; i < nc; ++i) {
+            //printf("p[%d] = %f\n", i, p[i]);
+            assert(!isnan(wp[i]));
+        }
+#endif
+
+        float max = -INFINITY;
+        ggml_vec_max_f32(nc, &max, wp);
+
+        ggml_float sum = ggml_vec_soft_max_f32(nc, dp, wp, max);
+        assert(sum > 0.0);
+
+        sum = 1.0/sum;
+        ggml_vec_scale_f32(nc, dp, sum);
+
+#ifndef NDEBUG
+        for (int i = 0; i < nc; ++i) {
+            assert(!isnan(dp[i]));
+            assert(!isinf(dp[i]));
+        }
+#endif
+    }
+}
+
+static void ggml_compute_forward_soft_max(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_soft_max_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_soft_max_back
+
+static void ggml_compute_forward_soft_max_back_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+    GGML_ASSERT(ggml_is_contiguous(src1));
+    GGML_ASSERT(ggml_is_contiguous(dst));
+    GGML_ASSERT(ggml_are_same_shape(src0, dst));
+    GGML_ASSERT(ggml_are_same_shape(src1, dst));
+
+    // TODO: handle transposed/permuted matrices
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nc = src0->ne[0];
+    const int nr = ggml_nrows(src0);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int i1 = ir0; i1 < ir1; i1++) {
+        float *dy = (float *)((char *) src0->data + i1*src0->nb[1]);
+        float *y  = (float *)((char *) src1->data + i1*src1->nb[1]);
+        float *dx = (float *)((char *) dst->data  + i1*dst->nb[1]);
+
+#ifndef NDEBUG
+        for (int i = 0; i < nc; ++i) {
+            //printf("p[%d] = %f\n", i, p[i]);
+            assert(!isnan(dy[i]));
+            assert(!isnan(y[i]));
+        }
+#endif
+        // Jii = yi - yi*yi
+        // Jij = -yi*yj
+        // J = diag(y)-y.T*y
+        // dx = J * dy
+        // dxk = sum_i(Jki * dyi)
+        // dxk = sum_i(-yk*yi * dyi) - (-yk*yk)*dyk + (yk - yk*yk)*dyk
+        // dxk = sum_i(-yk*yi * dyi) + yk*yk*dyk + yk*dyk - yk*yk*dyk
+        // dxk = sum_i(-yk*yi * dyi) + yk*dyk
+        // dxk = -yk * sum_i(yi * dyi) + yk*dyk
+        // dxk = -yk * dot(y, dy) + yk*dyk
+        // dxk = yk * (- dot(y, dy) + dyk)
+        // dxk = yk * (dyk - dot(y, dy))
+        //
+        // post-order:
+        // dot_y_dy := dot(y, dy)
+        // dx := dy
+        // dx := dx - dot_y_dy
+        // dx := dx * y
+
+        // linear runtime, no additional memory
+        float dot_y_dy = 0;
+        ggml_vec_dot_f32 (nc, &dot_y_dy, 0, y, 0, dy, 0, 1);
+        ggml_vec_cpy_f32 (nc, dx, dy);
+        ggml_vec_acc1_f32(nc, dx, -dot_y_dy);
+        ggml_vec_mul_f32 (nc, dx, dx, y);
+
+#ifndef NDEBUG
+        for (int i = 0; i < nc; ++i) {
+            assert(!isnan(dx[i]));
+            assert(!isinf(dx[i]));
+        }
+#endif
+    }
+}
+
+static void ggml_compute_forward_soft_max_back(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_soft_max_back_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_clamp
+
+static void ggml_compute_forward_clamp_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    float min;
+    float max;
+    memcpy(&min, (float *) dst->op_params + 0, sizeof(float));
+    memcpy(&max, (float *) dst->op_params + 1, sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    const size_t nb00 = src0->nb[0];
+    const size_t nb01 = src0->nb[1];
+
+    const size_t nb0 = dst->nb[0];
+    const size_t nb1 = dst->nb[1];
+
+    GGML_ASSERT( nb0 == sizeof(float));
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    for (int j = ith; j < n; j += nth) {
+        float * dst_ptr  = (float *) ((char *)  dst->data + j*nb1);
+        float * src0_ptr = (float *) ((char *) src0->data + j*nb01);
+
+        for (int i = 0; i < nc; i++) {
+            dst_ptr[i] = MAX(MIN(src0_ptr[i], max), min);
+        }
+    }
+}
+
+static void ggml_compute_forward_clamp(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_clamp_f32(params, dst);
+            } break;
+        case GGML_TYPE_F16:
+        case GGML_TYPE_BF16:
+        case GGML_TYPE_Q4_0:
+        case GGML_TYPE_Q4_1:
+        case GGML_TYPE_Q5_0:
+        case GGML_TYPE_Q5_1:
+        case GGML_TYPE_Q8_0:
+        case GGML_TYPE_Q8_1:
+        case GGML_TYPE_Q2_K:
+        case GGML_TYPE_Q3_K:
+        case GGML_TYPE_Q4_K:
+        case GGML_TYPE_Q5_K:
+        case GGML_TYPE_Q6_K:
+        case GGML_TYPE_IQ2_XXS:
+        case GGML_TYPE_IQ2_XS:
+        case GGML_TYPE_IQ3_XXS:
+        case GGML_TYPE_IQ1_S:
+        case GGML_TYPE_IQ1_M:
+        case GGML_TYPE_IQ4_NL:
+        case GGML_TYPE_IQ4_XS:
+        case GGML_TYPE_IQ3_S:
+        case GGML_TYPE_IQ2_S:
+        case GGML_TYPE_Q8_K:
+        case GGML_TYPE_I8:
+        case GGML_TYPE_I16:
+        case GGML_TYPE_I32:
+        case GGML_TYPE_I64:
+        case GGML_TYPE_F64:
+        case GGML_TYPE_COUNT:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_rope
+
+static float rope_yarn_ramp(const float low, const float high, const int i0) {
+    const float y = (i0 / 2 - low) / MAX(0.001f, high - low);
+    return 1 - MIN(1, MAX(0, y));
+}
+
+// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn
+// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng.
+static void rope_yarn(
+    float theta_extrap, float freq_scale, float corr_dims[2], int64_t i0, float ext_factor, float mscale,
+    float * cos_theta, float * sin_theta) {
+    // Get n-d rotational scaling corrected for extrapolation
+    float theta_interp = freq_scale * theta_extrap;
+    float theta = theta_interp;
+    if (ext_factor != 0.0f) {
+        float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor;
+        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;
+
+        // Get n-d magnitude scaling corrected for interpolation
+        mscale *= 1.0f + 0.1f * logf(1.0f / freq_scale);
+    }
+    *cos_theta = cosf(theta) * mscale;
+    *sin_theta = sinf(theta) * mscale;
+}
+
+// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get
+// `corr_dim(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))`
+static float ggml_rope_yarn_corr_dim(int n_dims, int n_ctx_orig, float n_rot, float base) {
+    return n_dims * logf(n_ctx_orig / (n_rot * 2 * (float)M_PI)) / (2 * logf(base));
+}
+
+static void ggml_rope_cache_init(
+     float theta_base, float freq_scale, const float * freq_factors, float corr_dims[2], int64_t ne0, float ext_factor, float mscale,
+     float * cache, float sin_sign, float theta_scale) {
+    // ref: https://github.com/jquesnelle/yarn/blob/master/scaled_rope/LlamaYaRNScaledRotaryEmbedding.py
+    float theta = theta_base;
+    for (int64_t i0 = 0; i0 < ne0; i0 += 2) {
+        const float ff = freq_factors ? freq_factors[i0/2] : 1.0f;
+        rope_yarn(
+            theta/ff, freq_scale, corr_dims, i0, ext_factor, mscale, &cache[i0 + 0], &cache[i0 + 1]
+        );
+        cache[i0 + 1] *= sin_sign;
+
+        theta *= theta_scale;
+    }
+}
+
+GGML_CALL void ggml_rope_yarn_corr_dims(
+    int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, float dims[2]
+) {
+    // start and end correction dims
+    float start = floorf(ggml_rope_yarn_corr_dim(n_dims, n_ctx_orig, beta_fast, freq_base));
+    float end   =  ceilf(ggml_rope_yarn_corr_dim(n_dims, n_ctx_orig, beta_slow, freq_base));
+    dims[0] = MAX(0, start);
+    dims[1] = MIN(n_dims - 1, end);
+}
+
+static void ggml_compute_forward_rope_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst,
+        const bool forward) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+    const struct ggml_tensor * src2 = dst->src[2];
+
+    float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
+
+    //const int n_past     = ((int32_t *) dst->op_params)[0];
+    const int n_dims     = ((int32_t *) dst->op_params)[1];
+    const int mode       = ((int32_t *) dst->op_params)[2];
+    //const int n_ctx      = ((int32_t *) dst->op_params)[3];
+    const int n_ctx_orig = ((int32_t *) dst->op_params)[4];
+
+    memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
+    memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
+    memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
+    memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
+    memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
+    memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3);
+    //printf("n_past = %d, ne2 = %d\n", n_past, ne2);
+
+    GGML_ASSERT(nb00 == sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr = ggml_nrows(dst);
+
+    GGML_ASSERT(n_dims <= ne0);
+    GGML_ASSERT(n_dims % 2 == 0);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    // row index used to determine which thread to use
+    int ir = 0;
+
+    const float theta_scale = powf(freq_base, -2.0f/n_dims);
+
+    float corr_dims[2];
+    ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);
+
+    const bool is_neox = mode & 2;
+
+    const float * freq_factors = NULL;
+    if (src2 != NULL) {
+        GGML_ASSERT(src2->type == GGML_TYPE_F32);
+        GGML_ASSERT(src2->ne[0] >= n_dims / 2);
+        freq_factors = (const float *) src2->data;
+    }
+
+    // backward process uses inverse rotation by cos and sin.
+    // cos and sin build a rotation matrix, where the inverse is the transpose.
+    // this essentially just switches the sign of sin.
+    const float sin_sign = forward ? 1.0f : -1.0f;
+
+    const int32_t * pos = (const int32_t *) src1->data;
+
+    for (int64_t i3 = 0; i3 < ne3; i3++) {
+        for (int64_t i2 = 0; i2 < ne2; i2++) {
+            const int64_t p = pos[i2];
+
+            float * cache = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32)*ith;
+            ggml_rope_cache_init(p, freq_scale, freq_factors, corr_dims, ne0, ext_factor, attn_factor, cache, sin_sign, theta_scale);
+
+            for (int64_t i1 = 0; i1 < ne1; i1++) {
+                if (ir++ < ir0) continue;
+                if (ir   > ir1) break;
+
+                if (!is_neox) {
+                    for (int64_t i0 = 0; i0 < n_dims; i0 += 2) {
+                        const float cos_theta = cache[i0 + 0];
+                        const float sin_theta = cache[i0 + 1];
+
+                        const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
+                              float * dst_data  = (float *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
+
+                        const float x0 = src[0];
+                        const float x1 = src[1];
+
+                        dst_data[0] = x0*cos_theta - x1*sin_theta;
+                        dst_data[1] = x0*sin_theta + x1*cos_theta;
+                    }
+                } else {
+                    for (int64_t i0 = 0; i0 < n_dims; i0 += 2) {
+                        const int64_t ic = i0/2;
+
+                        const float cos_theta = cache[i0 + 0];
+                        const float sin_theta = cache[i0 + 1];
+
+                        const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00);
+                        float * dst_data  = (float *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + ic*nb0);
+
+                        const float x0 = src[0];
+                        const float x1 = src[n_dims/2];
+
+                        dst_data[0]        = x0*cos_theta - x1*sin_theta;
+                        dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta;
+                    }
+                }
+
+                for (int64_t i0 = n_dims; i0 < ne0; i0 += 2) {
+                    const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
+                    float * dst_data  = (float *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
+
+                    dst_data[0] = src[0];
+                    dst_data[1] = src[1];
+                }
+            }
+        }
+    }
+}
+
+// TODO: deduplicate f16/f32 code
+static void ggml_compute_forward_rope_f16(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst,
+        const bool forward) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+    const struct ggml_tensor * src2 = dst->src[2];
+
+    float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
+
+    //const int n_past     = ((int32_t *) dst->op_params)[0];
+    const int n_dims     = ((int32_t *) dst->op_params)[1];
+    const int mode       = ((int32_t *) dst->op_params)[2];
+    //const int n_ctx      = ((int32_t *) dst->op_params)[3];
+    const int n_ctx_orig = ((int32_t *) dst->op_params)[4];
+    memcpy(&freq_base,   (int32_t *) dst->op_params +  5, sizeof(float));
+    memcpy(&freq_scale,  (int32_t *) dst->op_params +  6, sizeof(float));
+    memcpy(&ext_factor,  (int32_t *) dst->op_params +  7, sizeof(float));
+    memcpy(&attn_factor, (int32_t *) dst->op_params +  8, sizeof(float));
+    memcpy(&beta_fast,   (int32_t *) dst->op_params +  9, sizeof(float));
+    memcpy(&beta_slow,   (int32_t *) dst->op_params + 10, sizeof(float));
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3);
+    //printf("n_past = %d, ne2 = %d\n", n_past, ne2);
+
+    GGML_ASSERT(nb0 == sizeof(ggml_fp16_t));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nr = ggml_nrows(dst);
+
+    GGML_ASSERT(n_dims <= ne0);
+    GGML_ASSERT(n_dims % 2 == 0);
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    // row index used to determine which thread to use
+    int ir = 0;
+
+    const float theta_scale = powf(freq_base, -2.0f/n_dims);
+
+    float corr_dims[2];
+    ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims);
+
+    const bool is_neox = mode & 2;
+
+    const float * freq_factors = NULL;
+    if (src2 != NULL) {
+        GGML_ASSERT(src2->type == GGML_TYPE_F32);
+        GGML_ASSERT(src2->ne[0] >= n_dims / 2);
+        freq_factors = (const float *) src2->data;
+    }
+
+    // backward process uses inverse rotation by cos and sin.
+    // cos and sin build a rotation matrix, where the inverse is the transpose.
+    // this essentially just switches the sign of sin.
+    const float sin_sign = forward ? 1.0f : -1.0f;
+
+    const int32_t * pos = (const int32_t *) src1->data;
+
+    for (int64_t i3 = 0; i3 < ne3; i3++) {
+        for (int64_t i2 = 0; i2 < ne2; i2++) {
+            const int64_t p = pos[i2];
+
+            float * cache = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32)*ith;
+            ggml_rope_cache_init(p, freq_scale, freq_factors, corr_dims, ne0, ext_factor, attn_factor, cache, sin_sign, theta_scale);
+
+            for (int64_t i1 = 0; i1 < ne1; i1++) {
+                if (ir++ < ir0) continue;
+                if (ir   > ir1) break;
+
+                if (!is_neox) {
+                    for (int64_t i0 = 0; i0 < n_dims; i0 += 2) {
+                        const float cos_theta = cache[i0 + 0];
+                        const float sin_theta = cache[i0 + 1];
+
+                        const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
+                              ggml_fp16_t * dst_data  = (ggml_fp16_t *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
+
+                        const float x0 = GGML_FP16_TO_FP32(src[0]);
+                        const float x1 = GGML_FP16_TO_FP32(src[1]);
+
+                        dst_data[0] = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta);
+                        dst_data[1] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta);
+                    }
+                } else {
+                    for (int64_t i0 = 0; i0 < n_dims; i0 += 2) {
+                        const int64_t ic = i0/2;
+
+                        const float cos_theta = cache[i0 + 0];
+                        const float sin_theta = cache[i0 + 1];
+
+                        const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00);
+                        ggml_fp16_t * dst_data  = (ggml_fp16_t *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + ic*nb0);
+
+                        const float x0 = GGML_FP16_TO_FP32(src[0]);
+                        const float x1 = GGML_FP16_TO_FP32(src[n_dims/2]);
+
+                        dst_data[0]        = GGML_FP32_TO_FP16(x0*cos_theta - x1*sin_theta);
+                        dst_data[n_dims/2] = GGML_FP32_TO_FP16(x0*sin_theta + x1*cos_theta);
+                    }
+                }
+
+                for (int64_t i0 = n_dims; i0 < ne0; i0 += 2) {
+                    const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
+                    ggml_fp16_t * dst_data  = (ggml_fp16_t *)((char *)  dst->data + i3*nb3  + i2*nb2  + i1*nb1  + i0*nb0);
+
+                    dst_data[0] = src[0];
+                    dst_data[1] = src[1];
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_rope(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F16:
+            {
+                ggml_compute_forward_rope_f16(params, dst, true);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_rope_f32(params, dst, true);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_rope_back
+
+static void ggml_compute_forward_rope_back(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F16:
+            {
+                ggml_compute_forward_rope_f16(params, dst, false);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_rope_f32(params, dst, false);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_conv_transpose_1d
+
+static void ggml_compute_forward_conv_transpose_1d_f16_f32(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nk = ne00*ne01*ne02;
+
+    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
+    GGML_ASSERT(nb10 == sizeof(float));
+
+    if (ith == 0) {
+        memset(params->wdata, 0, params->wsize);
+
+        // permute kernel data (src0) from (K x Cout x Cin) to (Cin x K x Cout)
+        {
+            ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0;
+
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                for (int64_t i01 = 0; i01 < ne01; i01++) {
+                    const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i02*nb02 + i01*nb01);
+                    ggml_fp16_t * dst_data = wdata + i01*ne00*ne02;
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        dst_data[i00*ne02 + i02] = src[i00];
+                    }
+                }
+            }
+        }
+
+        // permute source data (src1) from (L x Cin) to (Cin x L)
+        {
+            ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + nk;
+            ggml_fp16_t * dst_data = wdata;
+
+            for (int64_t i11 = 0; i11 < ne11; i11++) {
+                const float * const src = (float *)((char *) src1->data + i11*nb11);
+                for (int64_t i10 = 0; i10 < ne10; i10++) {
+                    dst_data[i10*ne11 + i11] = GGML_FP32_TO_FP16(src[i10]);
+                }
+            }
+        }
+
+        // need to zero dst since we are accumulating into it
+        memset(dst->data, 0, ggml_nbytes(dst));
+    }
+    ggml_barrier(params->shared);
+
+    const int32_t s0 = ((const int32_t*)(dst->op_params))[0];
+
+    // total rows in dst
+    const int nr = ne1;
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    ggml_fp16_t * const wdata     = (ggml_fp16_t *) params->wdata + 0;
+    ggml_fp16_t * const wdata_src = wdata + nk;
+
+    for (int i1 = ir0; i1 < ir1; i1++) {
+        float * dst_data = (float *)((char *) dst->data + i1*nb1);
+        ggml_fp16_t * wdata_kernel = wdata + i1*ne02*ne00;
+        for (int i10 = 0; i10 < ne10; i10++) {
+            const int i1n = i10*ne11;
+            for (int i00 = 0; i00 < ne00; i00++) {
+                float v = 0;
+                ggml_vec_dot_f16(ne02, &v, 0,
+                        (ggml_fp16_t *)    wdata_src + i1n, 0,
+                        (ggml_fp16_t *) wdata_kernel + i00*ne02, 0, 1);
+                dst_data[i10*s0 + i00] += v;
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_conv_transpose_1d_f32(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nk = ne00*ne01*ne02;
+
+    GGML_ASSERT(nb00 == sizeof(float));
+    GGML_ASSERT(nb10 == sizeof(float));
+
+    if (ith == 0) {
+        memset(params->wdata, 0, params->wsize);
+
+        // prepare kernel data (src0) from (K x Cout x Cin) to (Cin x K x Cout)
+        {
+            float * const wdata = (float *) params->wdata + 0;
+
+            for (int64_t i02 = 0; i02 < ne02; i02++) {
+                for (int64_t i01 = 0; i01 < ne01; i01++) {
+                    const float * const src = (float *)((char *) src0->data + i02*nb02 + i01*nb01);
+                    float * dst_data = wdata + i01*ne00*ne02;
+                    for (int64_t i00 = 0; i00 < ne00; i00++) {
+                        dst_data[i00*ne02 + i02] = src[i00];
+                    }
+                }
+            }
+        }
+
+        // prepare source data (src1)
+        {
+            float * const wdata = (float *) params->wdata + nk;
+            float * dst_data = wdata;
+
+            for (int64_t i11 = 0; i11 < ne11; i11++) {
+                const float * const src = (float *)((char *) src1->data + i11*nb11);
+                for (int64_t i10 = 0; i10 < ne10; i10++) {
+                    dst_data[i10*ne11 + i11] = src[i10];
+                }
+            }
+        }
+
+        // need to zero dst since we are accumulating into it
+        memset(dst->data, 0, ggml_nbytes(dst));
+    }
+    ggml_barrier(params->shared);
+
+    const int32_t s0 = ((const int32_t*)(dst->op_params))[0];
+
+    // total rows in dst
+    const int nr = ne1;
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    float * const wdata     = (float *) params->wdata + 0;
+    float * const wdata_src = wdata + nk;
+
+    for (int i1 = ir0; i1 < ir1; i1++) {
+        float * dst_data = (float *)((char *) dst->data + i1*nb1);
+        float * wdata_kernel = wdata + i1*ne02*ne00;
+        for (int i10 = 0; i10 < ne10; i10++) {
+            const int i1n = i10*ne11;
+            for (int i00 = 0; i00 < ne00; i00++) {
+                float v = 0;
+                ggml_vec_dot_f32(ne02, &v, 0,
+                        wdata_src + i1n, 0,
+                        wdata_kernel + i00*ne02, 0, 1);
+                dst_data[i10*s0 + i00] += v;
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_conv_transpose_1d(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F16:
+            {
+                ggml_compute_forward_conv_transpose_1d_f16_f32(params, dst);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_conv_transpose_1d_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// src0: kernel [OC, IC, KH, KW]
+// src1: image [N, IC, IH, IW]
+// dst:  result [N, OH, OW, IC*KH*KW]
+static void ggml_compute_forward_im2col_f32(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    GGML_TENSOR_BINARY_OP_LOCALS;
+
+    const int32_t s0 = ((const int32_t *)(dst->op_params))[0];
+    const int32_t s1 = ((const int32_t *)(dst->op_params))[1];
+    const int32_t p0 = ((const int32_t *)(dst->op_params))[2];
+    const int32_t p1 = ((const int32_t *)(dst->op_params))[3];
+    const int32_t d0 = ((const int32_t *)(dst->op_params))[4];
+    const int32_t d1 = ((const int32_t *)(dst->op_params))[5];
+    const bool is_2D = ((const int32_t *)(dst->op_params))[6] == 1;
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int64_t N  = is_2D ? ne13 : ne12;
+    const int64_t IC = is_2D ? ne12 : ne11;
+    const int64_t IH = is_2D ? ne11 : 1;
+    const int64_t IW = ne10;
+
+    const int64_t KH = is_2D ? ne01 : 1;
+    const int64_t KW = ne00;
+
+    const int64_t OH = is_2D ? ne2 : 1;
+    const int64_t OW = ne1;
+
+    int ofs0 = is_2D ? nb13 : nb12;
+    int ofs1 = is_2D ? nb12 : nb11;
+
+    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
+    GGML_ASSERT(nb10 == sizeof(float));
+
+    // im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW]
+    {
+        float * const wdata = (float *) dst->data;
+
+        for (int64_t in = 0; in < N; in++) {
+            for (int64_t ioh = 0; ioh < OH; ioh++) { // 1
+                for (int64_t iow = 0; iow < OW; iow++) {
+                    for (int64_t iic = ith; iic < IC; iic += nth) {
+
+                        // micro kernel
+                        float * dst_data = wdata + (in*OH*OW + ioh*OW + iow)*(IC*KH*KW); // [IC, KH, KW]
+                        const float * const src_data = (float *)((char *) src1->data + in*ofs0 + iic*ofs1); // [IH, IW]
+
+                        for (int64_t ikh = 0; ikh < KH; ikh++) {  // 1
+                            for (int64_t ikw = 0; ikw < KW; ikw++) {
+                                const int64_t iiw = iow*s0 + ikw*d0 - p0;
+                                const int64_t iih = ioh*s1 + ikh*d1 - p1;
+
+                                if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
+                                    dst_data[iic*(KH*KW) + ikh*KW + ikw] = 0;
+                                } else {
+                                    dst_data[iic*(KH*KW) + ikh*KW + ikw] = (src_data[iih*IW + iiw]);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+
+// src0: kernel [OC, IC, KH, KW]
+// src1: image [N, IC, IH, IW]
+// dst:  result [N, OH, OW, IC*KH*KW]
+static void ggml_compute_forward_im2col_f16(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F16);
+
+    GGML_TENSOR_BINARY_OP_LOCALS;
+
+    const int32_t s0 = ((const int32_t *)(dst->op_params))[0];
+    const int32_t s1 = ((const int32_t *)(dst->op_params))[1];
+    const int32_t p0 = ((const int32_t *)(dst->op_params))[2];
+    const int32_t p1 = ((const int32_t *)(dst->op_params))[3];
+    const int32_t d0 = ((const int32_t *)(dst->op_params))[4];
+    const int32_t d1 = ((const int32_t *)(dst->op_params))[5];
+    const bool is_2D = ((const int32_t *)(dst->op_params))[6] == 1;
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int64_t N  = is_2D ? ne13 : ne12;
+    const int64_t IC = is_2D ? ne12 : ne11;
+    const int64_t IH = is_2D ? ne11 : 1;
+    const int64_t IW = ne10;
+
+    const int64_t KH = is_2D ? ne01 : 1;
+    const int64_t KW = ne00;
+
+    const int64_t OH = is_2D ? ne2 : 1;
+    const int64_t OW = ne1;
+
+    int ofs0 = is_2D ? nb13 : nb12;
+    int ofs1 = is_2D ? nb12 : nb11;
+
+    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
+    GGML_ASSERT(nb10 == sizeof(float));
+
+    // im2col: [N, IC, IH, IW] => [N, OH, OW, IC*KH*KW]
+    {
+        ggml_fp16_t * const wdata = (ggml_fp16_t *) dst->data;
+
+        for (int64_t in = 0; in < N; in++) {
+            for (int64_t ioh = 0; ioh < OH; ioh++) { // 1
+                for (int64_t iow = 0; iow < OW; iow++) {
+                    for (int64_t iic = ith; iic < IC; iic += nth) {
+
+                        // micro kernel
+                        ggml_fp16_t * dst_data = wdata + (in*OH*OW + ioh*OW + iow)*(IC*KH*KW); // [IC, KH, KW]
+                        const float * const src_data = (float *)((char *) src1->data + in*ofs0 + iic*ofs1); // [IH, IW]
+
+                        for (int64_t ikh = 0; ikh < KH; ikh++) {  // 1
+                            for (int64_t ikw = 0; ikw < KW; ikw++) {
+                                const int64_t iiw = iow*s0 + ikw*d0 - p0;
+                                const int64_t iih = ioh*s1 + ikh*d1 - p1;
+
+                                if (iih < 0 || iih >= IH || iiw < 0 || iiw >= IW) {
+                                    dst_data[iic*(KH*KW) + ikh*KW + ikw] = 0;
+                                } else {
+                                    dst_data[iic*(KH*KW) + ikh*KW + ikw] = GGML_FP32_TO_FP16(src_data[iih*IW + iiw]);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_im2col(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+    switch (dst->type) {
+        case GGML_TYPE_F16:
+            {
+                ggml_compute_forward_im2col_f16(params, dst);
+            } break;
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_im2col_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+
+// ggml_compute_forward_conv_transpose_2d
+
+static void ggml_compute_forward_conv_transpose_2d(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F16);
+    GGML_ASSERT(src1->type == GGML_TYPE_F32);
+    GGML_ASSERT( dst->type == GGML_TYPE_F32);
+
+    GGML_TENSOR_BINARY_OP_LOCALS
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nk = ne00*ne01*ne02*ne03;
+
+    GGML_ASSERT(nb00 == sizeof(ggml_fp16_t));
+    GGML_ASSERT(nb10 == sizeof(float));
+
+    if (ith == 0) {
+        memset(params->wdata, 0, params->wsize);
+
+        // permute kernel data (src0) from (Kw x Kh x Cout x Cin) to (Cin x Kw x Kh x Cout)
+        {
+            ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0;
+
+            for (int64_t i03 = 0; i03 < ne03; i03++) {
+                for (int64_t i02 = 0; i02 < ne02; i02++) {
+                    const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i03*nb03 + i02*nb02);
+                    ggml_fp16_t * dst_data = wdata + i02*ne01*ne00*ne03;
+                    for (int64_t i01 = 0; i01 < ne01; i01++) {
+                        for (int64_t i00 = 0; i00 < ne00; i00++) {
+                            dst_data[i01*ne00*ne03 + i00*ne03 + i03] = src[i01 * ne00 + i00];
+                        }
+                    }
+                }
+            }
+        }
+
+        // permute source data (src1) from (Sw x Sh x Cin) to (Cin x Sw x Sh)
+        {
+            ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + nk;
+            for (int i12 = 0; i12 < ne12; i12++) {
+                for (int i11 = 0; i11 < ne11; i11++) {
+                    const float * const src = (float *)((char *) src1->data + i12*nb12 + i11*nb11);
+                    ggml_fp16_t * dst_data = wdata + i11*ne10*ne12;
+                    for (int i10 = 0; i10 < ne10; i10++) {
+                        dst_data[i10*ne12 + i12] = GGML_FP32_TO_FP16(src[i10]);
+                    }
+                }
+            }
+        }
+
+        memset(dst->data, 0, ggml_nbytes(dst));
+    }
+    ggml_barrier(params->shared);
+
+    const int32_t stride = ggml_get_op_params_i32(dst, 0);
+
+    // total patches in dst
+    const int np = ne2;
+
+    // patches per thread
+    const int dp = (np + nth - 1)/nth;
+
+    // patch range for this thread
+    const int ip0 = dp*ith;
+    const int ip1 = MIN(ip0 + dp, np);
+
+    ggml_fp16_t * const wdata = (ggml_fp16_t *) params->wdata + 0;
+    ggml_fp16_t * const wdata_src = wdata + nk;
+
+    for (int i2 = ip0; i2 < ip1; i2++) { // Cout
+        float * dst_data = (float *)((char *) dst->data + i2*nb2);
+        ggml_fp16_t * wdata_kernel = wdata + i2*ne01*ne00*ne03;
+        for (int i11 = 0; i11 < ne11; i11++) {
+            for (int i10 = 0; i10 < ne10; i10++) {
+                const int i1n = i11*ne10*ne12 + i10*ne12;
+                for (int i01 = 0; i01 < ne01; i01++) {
+                    for (int i00 = 0; i00 < ne00; i00++) {
+                        float v = 0;
+                        ggml_vec_dot_f16(ne03, &v, 0,
+                                wdata_src + i1n, 0,
+                                wdata_kernel + i01*ne00*ne03 + i00*ne03, 0, 1);
+                        dst_data[(i11*stride + i01)*ne0 + i10*stride + i00] += v;
+                    }
+                }
+            }
+        }
+    }
+}
+
+// ggml_compute_forward_pool_1d_sk_p0
+
+static void ggml_compute_forward_pool_1d_sk_p0(
+        const struct ggml_compute_params * params,
+        const enum ggml_op_pool op,
+        const int k,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src = dst->src[0];
+
+    assert(src->type == GGML_TYPE_F32);
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    const char * cdata = (const char *)src->data;
+    const char * const data_end = cdata + ggml_nbytes(src);
+    float * drow = (float *)dst->data;
+
+    const int64_t rs = dst->ne[0];
+
+    while (cdata < data_end) {
+        const float * const srow = (const float *)cdata;
+
+        int j = 0;
+
+        for (int64_t i = 0; i < rs; ++i) {
+            switch (op) {
+                case GGML_OP_POOL_AVG:   drow[i] = 0;        break;
+                case GGML_OP_POOL_MAX:   drow[i] = -FLT_MAX; break;
+                case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break;
+            }
+            for (int ki = 0; ki < k; ++ki) {
+                switch (op) {
+                    case GGML_OP_POOL_AVG:                          drow[i] += srow[j]; break;
+                    case GGML_OP_POOL_MAX:   if (srow[j] > drow[i]) drow[i]  = srow[j]; break;
+                    case GGML_OP_POOL_COUNT:                        GGML_ASSERT(false); break;
+                }
+                ++j;
+            }
+            switch (op) {
+                case GGML_OP_POOL_AVG:         drow[i] /= k; break;
+                case GGML_OP_POOL_MAX:                       break;
+                case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break;
+            }
+        }
+
+        cdata += src->nb[1];
+        drow  += rs;
+    }
+}
+
+// ggml_compute_forward_pool_1d
+
+static void ggml_compute_forward_pool_1d(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const int32_t * opts = (const int32_t *)dst->op_params;
+    enum ggml_op_pool op = opts[0];
+    const int k0 = opts[1];
+    const int s0 = opts[2];
+    const int p0 = opts[3];
+    GGML_ASSERT(p0 == 0); // padding not supported
+    GGML_ASSERT(k0 == s0); // only s = k supported
+
+    ggml_compute_forward_pool_1d_sk_p0(params, op, k0, dst);
+}
+
+// ggml_compute_forward_pool_2d
+
+static void ggml_compute_forward_pool_2d(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src = dst->src[0];
+
+    GGML_ASSERT(src->type == GGML_TYPE_F32);
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    const int32_t * opts = (const int32_t *)dst->op_params;
+    enum ggml_op_pool op = opts[0];
+    const int k0 = opts[1];
+    const int k1 = opts[2];
+    const int s0 = opts[3];
+    const int s1 = opts[4];
+    const int p0 = opts[5];
+    const int p1 = opts[6];
+    const char * cdata = (const char*)src->data;
+    const char * const data_end = cdata + ggml_nbytes(src);
+
+    const int64_t px = dst->ne[0];
+    const int64_t py = dst->ne[1];
+    const int64_t pa = px * py;
+
+    float * dplane = (float *)dst->data;
+
+    const int ka = k0 * k1;
+    const int offset0 = -p0;
+    const int offset1 = -p1;
+
+    while (cdata < data_end) {
+        for (int oy = 0; oy < py; ++oy) {
+            float * const drow = dplane + oy * px;
+            for (int ox = 0; ox < px; ++ox) {
+                float * const out =  drow + ox;
+                switch (op) {
+                    case GGML_OP_POOL_AVG:     *out = 0;        break;
+                    case GGML_OP_POOL_MAX:     *out = -FLT_MAX; break;
+                    case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break;
+                }
+
+                const int ix = offset0 + ox * s0;
+                const int iy = offset1 + oy * s1;
+
+                for (int ky = 0; ky < k1; ++ky) {
+                    if (iy + ky < 0 || iy + ky >= src->ne[1]) continue;
+                    const float * const srow = (const float *)(cdata + src->nb[1] * (iy + ky));
+                    for (int kx = 0; kx < k0; ++kx) {
+                        int j = ix + kx;
+                        if (j < 0 || j >= src->ne[0]) continue;
+                        switch (op) {
+                            case GGML_OP_POOL_AVG:                     *out += srow[j]; break;
+                            case GGML_OP_POOL_MAX: if (srow[j] > *out) *out  = srow[j]; break;
+                            case GGML_OP_POOL_COUNT:                GGML_ASSERT(false); break;
+                        }
+                    }
+                }
+                switch (op) {
+                    case GGML_OP_POOL_AVG:           *out /= ka; break;
+                    case GGML_OP_POOL_MAX:                       break;
+                    case GGML_OP_POOL_COUNT: GGML_ASSERT(false); break;
+                }
+            }
+        }
+
+        cdata  += src->nb[2];
+        dplane += pa;
+    }
+}
+
+// ggml_compute_forward_upscale
+
+static void ggml_compute_forward_upscale_f32(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(src0->type == GGML_TYPE_F32);
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    const float sf0 = (float)ne0/src0->ne[0];
+    const float sf1 = (float)ne1/src0->ne[1];
+    const float sf2 = (float)ne2/src0->ne[2];
+    const float sf3 = (float)ne3/src0->ne[3];
+
+    // TODO: optimize
+
+    for (int64_t i3 = 0; i3 < ne3; i3++) {
+        const int64_t i03 = i3 / sf3;
+        for (int64_t i2 = ith; i2 < ne2; i2 += nth) {
+            const int64_t i02 = i2 / sf2;
+            for (int64_t i1 = 0; i1 < ne1; i1++) {
+                const int64_t i01 = i1 / sf1;
+                for (int64_t i0 = 0; i0 < ne0; i0++) {
+                    const int64_t i00 = i0 / sf0;
+
+                    const float * x = (float *)((char *) src0->data + i00*nb00 + i01*nb01 + i02*nb02 + i03*nb03);
+                          float * y = (float *)((char *)  dst->data +  i0*nb0  +  i1*nb1  +  i2*nb2  +  i3*nb3);
+
+                    *y = *x;
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_upscale(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_upscale_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+
+// ggml_compute_forward_pad
+
+static void ggml_compute_forward_pad_f32(
+    const struct ggml_compute_params * params,
+          struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+    GGML_ASSERT( dst->nb[0] == sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    float * dst_ptr = (float *) dst->data;
+
+    // TODO: optimize
+
+    for (int64_t i2 = 0; i2 < ne2; ++i2) {
+        for (int64_t i1 = ith; i1 < ne1; i1 += nth) {
+            for (int64_t i0 = 0; i0 < ne0; ++i0) {
+                for (int64_t i3 = 0; i3 < ne3; ++i3) {
+                    const int64_t dst_idx = i3*(ne0*ne1*ne2) + i2*(ne0*ne1) + i1*ne0 + i0;
+
+                    const float * src_ptr = (const float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00);
+
+                    if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) {
+                        dst_ptr[dst_idx] = *src_ptr;
+                    } else {
+                        dst_ptr[dst_idx] = 0;
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_pad(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_pad_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+
+// ggml_compute_forward_arange
+
+static void ggml_compute_forward_arange_f32(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    GGML_ASSERT(dst->nb[0] == sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const float start = ggml_get_op_params_f32(dst, 0);
+    const float stop  = ggml_get_op_params_f32(dst, 1);
+    const float step  = ggml_get_op_params_f32(dst, 2);
+
+    const int64_t steps = (int64_t) ceilf((stop - start) / step);
+
+    GGML_ASSERT(ggml_nelements(dst) == steps);
+
+    for (int64_t i = ith; i < steps; i+= nth) {
+        float value = start + step * i;
+        ((float *)dst->data)[i] = value;
+    }
+}
+
+static void ggml_compute_forward_arange(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+    switch (dst->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_arange_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+static void ggml_compute_forward_timestep_embedding_f32(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    const int dim = ggml_get_op_params_i32(dst, 0);
+    const int max_period = ggml_get_op_params_i32(dst, 1);
+
+    int half = dim / 2;
+
+    for (int64_t i = 0; i < ne00; i++) {
+        float * embed_data = (float *)((char *)  dst->data +  i*nb1);
+        for (int64_t j = ith; j < half; j += nth) {
+            float timestep = ((float *)src0->data)[i];
+            float freq = (float)expf(-logf(max_period) * j / half);
+            float arg = timestep * freq;
+            embed_data[j] = cosf(arg);
+            embed_data[j + half] = sinf(arg);
+        }
+        if (dim % 2 != 0 && ith == 0) {
+            embed_data[dim] = 0.f;
+        }
+    }
+}
+
+static void ggml_compute_forward_timestep_embedding(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_timestep_embedding_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_argsort
+
+static void ggml_compute_forward_argsort_f32(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    GGML_ASSERT(nb0 == sizeof(float));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int64_t nr = ggml_nrows(src0);
+
+    enum ggml_sort_order order = (enum ggml_sort_order) ggml_get_op_params_i32(dst, 0);
+
+    for (int64_t i = ith; i < nr; i += nth) {
+        int32_t * dst_data = (int32_t *)((char *) dst->data + i*nb1);
+        const float * src_data = (float *)((char *) src0->data + i*nb01);
+
+        for (int64_t j = 0; j < ne0; j++) {
+            dst_data[j] = j;
+        }
+
+        // C doesn't have a functional sort, so we do a bubble sort instead
+        for (int64_t j = 0; j < ne0; j++) {
+            for (int64_t k = j + 1; k < ne0; k++) {
+                if ((order == GGML_SORT_ORDER_ASC  && src_data[dst_data[j]] > src_data[dst_data[k]]) ||
+                    (order == GGML_SORT_ORDER_DESC && src_data[dst_data[j]] < src_data[dst_data[k]])) {
+                    int32_t tmp = dst_data[j];
+                    dst_data[j] = dst_data[k];
+                    dst_data[k] = tmp;
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_argsort(
+    const struct ggml_compute_params * params,
+    struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_argsort_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_flash_attn_ext
+
+static void ggml_compute_forward_flash_attn_ext_f16(
+        const struct ggml_compute_params * params,
+        const struct ggml_tensor * q,
+        const struct ggml_tensor * k,
+        const struct ggml_tensor * v,
+        const struct ggml_tensor * mask,
+        struct ggml_tensor * dst) {
+
+    GGML_TENSOR_LOCALS(int64_t, neq, q,   ne)
+    GGML_TENSOR_LOCALS(size_t,  nbq, q,   nb)
+    GGML_TENSOR_LOCALS(int64_t, nek, k,   ne)
+    GGML_TENSOR_LOCALS(size_t,  nbk, k,   nb)
+    GGML_TENSOR_LOCALS(int64_t, nev, v,   ne)
+    GGML_TENSOR_LOCALS(size_t,  nbv, v,   nb)
+    GGML_TENSOR_LOCALS(int64_t, ne,  dst, ne)
+    GGML_TENSOR_LOCALS(size_t,  nb,  dst, nb)
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int64_t D = neq0;
+    const int64_t N = neq1;
+
+    GGML_ASSERT(ne0 == D);
+    GGML_ASSERT(ne2 == N);
+
+    // input tensor rows must be contiguous
+    GGML_ASSERT(nbq0 == ggml_type_size(q->type));
+    GGML_ASSERT(nbk0 == ggml_type_size(k->type));
+    GGML_ASSERT(nbv0 == ggml_type_size(v->type));
+
+    GGML_ASSERT(neq0 == D);
+    GGML_ASSERT(nek0 == D);
+    GGML_ASSERT(nev0 == D);
+
+    GGML_ASSERT(neq1 == N);
+    GGML_ASSERT(nev0 == D);
+
+    // dst cannot be transposed or permuted
+    GGML_ASSERT(nb0 == sizeof(float));
+    GGML_ASSERT(nb0 <= nb1);
+    GGML_ASSERT(nb1 <= nb2);
+    GGML_ASSERT(nb2 <= nb3);
+
+    // broadcast factors
+    const int64_t rk2 = neq2/nek2;
+    const int64_t rk3 = neq3/nek3;
+
+    const int64_t rv2 = neq2/nev2;
+    const int64_t rv3 = neq3/nev3;
+
+    // parallelize by q rows using ggml_vec_dot_f32
+
+    // total rows in q
+    const int nr = neq1*neq2*neq3;
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    float scale    = 1.0f;
+    float max_bias = 0.0f;
+
+    memcpy(&scale,    (float *) dst->op_params + 0, sizeof(float));
+    memcpy(&max_bias, (float *) dst->op_params + 1, sizeof(float));
+
+    const uint32_t n_head      = neq2;
+    const uint32_t n_head_log2 = 1u << (uint32_t) floor(log2(n_head));
+
+    const float m0 = powf(2.0f, -(max_bias       ) / n_head_log2);
+    const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2);
+
+    enum ggml_type    const k_vec_dot_type = type_traits[k->type].vec_dot_type;
+    ggml_from_float_t const q_to_vec_dot   = type_traits[k_vec_dot_type].from_float;
+    ggml_vec_dot_t    const kq_vec_dot     = type_traits[k->type].vec_dot;
+    ggml_to_float_t   const v_to_float     = type_traits[v->type].to_float;
+
+    // loop over n_batch and n_head
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // q indices
+        const int iq3 = ir/(neq2*neq1);
+        const int iq2 = (ir - iq3*neq2*neq1)/neq1;
+        const int iq1 = (ir - iq3*neq2*neq1 - iq2*neq1);
+
+        const uint32_t h = iq2; // head index
+        const float slope = (max_bias > 0.0f) ? h < n_head_log2 ? powf(m0, h + 1) : powf(m1, 2*(h - n_head_log2) + 1) : 1.0f;
+
+        float S = 0.0f;      // sum
+        float M = -INFINITY; // maximum KQ value
+
+        float       * VKQ32 = (float       *) params->wdata + ith*(3*D + CACHE_LINE_SIZE_F32); // FP32 VKQ accumulator
+        float       * V32   =                 (VKQ32 + 1*D); // (temporary) FP32 V buffer
+        ggml_fp16_t * VKQ16 = (ggml_fp16_t *) (VKQ32 + 1*D); // (temporary) FP16 VKQ accumulator
+        ggml_fp16_t * Q_q   = (ggml_fp16_t *) (VKQ32 + 2*D); // (temporary) buffer for Q converted to quantized/FP16
+
+        if (v->type == GGML_TYPE_F16) {
+            memset(VKQ16, 0, D*sizeof(ggml_fp16_t));
+        } else {
+            memset(VKQ32, 0, D*sizeof(float));
+        }
+
+        const ggml_fp16_t * mp = mask ? (ggml_fp16_t *)((char *) mask->data + iq1*mask->nb[1]) : NULL;
+
+        // k indices
+        const int ik3 = iq3 / rk3;
+        const int ik2 = iq2 / rk2;
+
+        // v indices
+        const int iv3 = iq3 / rv3;
+        const int iv2 = iq2 / rv2;
+
+        const float * pq = (const float *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3));
+        q_to_vec_dot(pq, Q_q, D);
+
+        // online softmax / attention
+        // loop over n_kv and n_head_kv
+        // ref: https://arxiv.org/pdf/2112.05682.pdf
+        for (int64_t ic = 0; ic < nek1; ++ic) {
+            const float mv = mp ? slope*GGML_FP16_TO_FP32(mp[ic]) : 0.0f;
+            if (mv == -INFINITY) {
+                continue;
+            }
+
+            float s; // KQ value
+
+            const char * k_data = (const char *) k->data + ( ic*nbk1 + ik2*nbk2 + ik3*nbk3);
+            kq_vec_dot(D, &s, 0, k_data, 0, Q_q, 0, 1);
+
+            s = s*scale + mv; // scale KQ value and apply mask
+
+            const float Mold = M;
+
+            float ms = 1.0f; // upon new higher max val, scale VKQ and KQ sum with this value
+            float vs = 1.0f; // post-softmax KQ value, expf(s - M)
+
+            const char * v_data = ((const char *) v->data + (ic*nbv1 + iv2*nbv2 + iv3*nbv3));
+
+            if (v->type== GGML_TYPE_F16) {
+                if (s > M) {
+                    // s is new maximum, ms < 1.0f, vs == expf(s - s) == 1.0f
+                    M = s;
+                    ms = expf(Mold - M);
+
+                    // V = V*expf(Mold - M)
+                    ggml_vec_scale_f16(D, VKQ16, ms);
+                } else {
+                    // no new maximum, ms == 1.0f, vs != 1.0f
+                    vs = expf(s - M);
+                }
+
+                // V += v*expf(s - M)
+                ggml_vec_mad_f16(D, VKQ16, (const ggml_fp16_t *) v_data, vs);
+            } else {
+                if (s > M) {
+                    // s is new maximum, ms < 1.0f, vs == expf(s - s) == 1.0f
+                    M = s;
+                    ms = expf(Mold - M);
+
+                    // V = V*expf(Mold - M)
+                    ggml_vec_scale_f32(D, VKQ32, ms);
+                } else {
+                    // no new maximum, ms == 1.0f, vs != 1.0f
+                    vs = expf(s - M);
+                }
+
+                v_to_float(v_data, V32, D);
+
+                // V += v*expf(s - M)
+                ggml_vec_mad_f32(D, VKQ32, V32, vs);
+            }
+
+            S = S*ms + vs; // scale and increment sum with partial sum
+        }
+
+        if (v->type == GGML_TYPE_F16) {
+            for (int64_t d = 0; d < D; ++d) {
+                VKQ32[d] = GGML_FP16_TO_FP32(VKQ16[d]);
+            }
+        }
+
+        // V /= S
+        const float S_inv = 1.0f/S;
+        ggml_vec_scale_f32(D, VKQ32, S_inv);
+
+        // dst indices
+        const int i1 = iq1;
+        const int i2 = iq2;
+        const int i3 = iq3;
+
+        // original
+        //memcpy((char *) dst->data + (i1*nb1 + i2*nb2 + i3*nb3), V, nev0*sizeof(float));
+
+        // permute(0, 2, 1, 3)
+        memcpy((char *) dst->data + (i3*ne2*ne1 + i2 + i1*ne1)*nb1, VKQ32, nb1);
+    }
+}
+
+static void ggml_compute_forward_flash_attn_ext(
+        const struct ggml_compute_params * params,
+        const struct ggml_tensor * q,
+        const struct ggml_tensor * k,
+        const struct ggml_tensor * v,
+        const struct ggml_tensor * mask,
+        struct ggml_tensor * dst) {
+    switch (dst->op_params[2]) {
+        case GGML_PREC_DEFAULT:
+        case GGML_PREC_F32:
+            {
+                // uses F32 accumulators
+                ggml_compute_forward_flash_attn_ext_f16(params, q, k, v, mask, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_flash_attn_back
+
+static void ggml_compute_forward_flash_attn_back_f32(
+        const struct ggml_compute_params * params,
+        const bool masked,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * q = dst->src[0];
+    const struct ggml_tensor * k = dst->src[1];
+    const struct ggml_tensor * v = dst->src[2];
+    const struct ggml_tensor * d = dst->src[3];
+
+    GGML_TENSOR_LOCALS(int64_t, neq, q,   ne)
+    GGML_TENSOR_LOCALS(size_t,  nbq, q,   nb)
+    GGML_TENSOR_LOCALS(int64_t, nek, k,   ne)
+    GGML_TENSOR_LOCALS(size_t,  nbk, k,   nb)
+    GGML_TENSOR_LOCALS(int64_t, nev, v,   ne)
+    GGML_TENSOR_LOCALS(size_t,  nbv, v,   nb)
+    GGML_TENSOR_LOCALS(int64_t, ned, d,   ne)
+    GGML_TENSOR_LOCALS(size_t,  nbd, d,   nb)
+    GGML_TENSOR_LOCALS(int64_t, ne,  dst, ne)
+    GGML_TENSOR_LOCALS(size_t,  nb,  dst, nb)
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int64_t D = neq0;
+    const int64_t N = neq1;
+    const int64_t P = nek1 - N;
+    const int64_t M = P + N;
+
+    const int Mup  = ggml_up(M, GGML_SOFT_MAX_UNROLL);
+    const int mxDM = MAX(D, Mup);
+
+    // GGML_ASSERT(ne0 == D);
+    // GGML_ASSERT(ne1 == N);
+    GGML_ASSERT(P >= 0);
+
+    GGML_ASSERT(nbq0 == sizeof(float));
+    GGML_ASSERT(nbk0 == sizeof(float));
+    GGML_ASSERT(nbv0 == sizeof(float));
+
+    GGML_ASSERT(neq0 == D);
+    GGML_ASSERT(nek0 == D);
+    GGML_ASSERT(nev1 == D);
+    GGML_ASSERT(ned0 == D);
+
+    GGML_ASSERT(neq1 == N);
+    GGML_ASSERT(nek1 == N + P);
+    GGML_ASSERT(nev1 == D);
+    GGML_ASSERT(ned1 == N);
+
+    // dst cannot be transposed or permuted
+    GGML_ASSERT(nb0 == sizeof(float));
+    GGML_ASSERT(nb0 <= nb1);
+    GGML_ASSERT(nb1 <= nb2);
+    GGML_ASSERT(nb2 <= nb3);
+
+    if (ith == 0) {
+        memset(dst->data, 0, nb0*ne0*ne1*ne2*ne3);
+    }
+    ggml_barrier(params->shared);
+
+    const int64_t elem_q = ggml_nelements(q);
+    const int64_t elem_k = ggml_nelements(k);
+
+    enum ggml_type result_type = dst->type;
+    GGML_ASSERT(ggml_blck_size(result_type) == 1);
+    const size_t tsize = ggml_type_size(result_type);
+
+    const size_t offs_q = 0;
+    const size_t offs_k = offs_q + GGML_PAD(elem_q * tsize, GGML_MEM_ALIGN);
+    const size_t offs_v = offs_k + GGML_PAD(elem_k * tsize, GGML_MEM_ALIGN);
+
+    void * grad_q = (char *) dst->data;
+    void * grad_k = (char *) dst->data + offs_k;
+    void * grad_v = (char *) dst->data + offs_v;
+
+    const size_t nbgq1 = nb0*neq0;
+    const size_t nbgq2 = nb0*neq0*neq1;
+    const size_t nbgq3 = nb0*neq0*neq1*neq2;
+
+    const size_t nbgk1 = nb0*nek0;
+    const size_t nbgk2 = nb0*nek0*nek1;
+    const size_t nbgk3 = nb0*nek0*nek1*neq2;
+
+    const size_t nbgv1 = nb0*nev0;
+    const size_t nbgv2 = nb0*nev0*nev1;
+    const size_t nbgv3 = nb0*nev0*nev1*neq2;
+
+    // parallelize by k rows using ggml_vec_dot_f32
+
+    // total rows in k
+    const int nr = nek2*nek3;
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    const float scale = 1.0f/sqrtf(D);
+
+    //printf("P=%d N=%d D=%d ir0=%d ir1=%d scale = %f\n", P, N, D, ir0, ir1, scale);
+
+    // how often k2 (and v2) is repeated in q2
+    int nrep = neq2/nek2;
+
+    for (int ir = ir0; ir < ir1; ++ir) {
+        // q indices
+        const int ik3 = ir/(nek2);
+        const int ik2 = ir - ik3*nek2;
+
+        const int iq3 = ik3;
+        const int id3 = ik3;
+        const int iv3 = ik3;
+        const int iv2 = ik2;
+
+        for (int irep = 0; irep < nrep; ++irep) {
+            const int iq2 = ik2 + irep*nek2;
+            const int id2 = iq2;
+
+            // (ik2 + irep*nek2) % nek2 == ik2
+            for (int iq1 = 0; iq1 < neq1; ++iq1) {
+                const int id1 = iq1;
+
+                // not sure about CACHE_LINE_SIZE_F32..
+                // - maybe it must not be multiplied by 2 and excluded from .. in SM 1*(..) offset?
+                float * S  = (float *) params->wdata + ith*2*(mxDM + CACHE_LINE_SIZE_F32) + 0*(mxDM+CACHE_LINE_SIZE_F32);
+                float * SM = (float *) params->wdata + ith*2*(mxDM + CACHE_LINE_SIZE_F32) + 1*(mxDM+CACHE_LINE_SIZE_F32);
+
+                for (int i = M; i < Mup; ++i) {
+                    S[i] = -INFINITY;
+                }
+
+                const int64_t masked_begin = masked ? (P + iq1 + 1) : M;
+                for (int64_t ic = 0; ic < masked_begin; ++ic) {
+                    // k indices
+                    const int ik1 = ic;
+
+                    // S indices
+                    const int i1 = ik1;
+
+                    ggml_vec_dot_f32(neq0,
+                            S + i1, 0,
+                            (float *) ((char *) k->data + (ik1*nbk1 + ik2*nbk2 + ik3*nbk3)), 0,
+                            (float *) ((char *) q->data + (iq1*nbq1 + iq2*nbq2 + iq3*nbq3)), 0, 1);
+                }
+
+                // scale
+                ggml_vec_scale_f32(masked_begin, S, scale);
+
+                for (int64_t i = masked_begin; i < M; i++) {
+                    S[i] = -INFINITY;
+                }
+
+                // softmax
+                // exclude known -INF S[..] values from max and loop
+                // dont forget to set their SM values to zero
+                {
+                    float max = -INFINITY;
+                    ggml_vec_max_f32(masked_begin, &max, S);
+
+                    ggml_float sum = 0.0;
+                    {
+#ifdef GGML_SOFT_MAX_ACCELERATE
+                        max = -max;
+                        vDSP_vsadd(SM, 1, &max, SM, 1, Mup);
+                        vvexpf(SM, SM, &Mup);
+                        ggml_vec_sum_f32(Mup, &sum, SM);
+#else
+                        sum = ggml_vec_soft_max_f32(Mup, SM, S, max);
+#endif
+                    }
+
+                    assert(sum > 0.0);
+
+                    sum = 1.0/sum;
+                    ggml_vec_scale_f32(masked_begin, SM, sum);
+
+                }
+
+                // step-by-step explanation
+                {
+                    // forward-process                    shape      grads from backward process
+                    // parallel_for ik2,ik3:
+                    //  for irep:
+                    //   iq2 = ik2 + irep*nek2
+                    //   k[:D,:M,:,:]                     [D,M,:,:]  grad[k][:D,:M,ik2,ik3]  += grad[kcur]
+                    //   q[:D,:N,:,:]                     [D,N,:,:]  grad[q][:D,iq1,iq2,iq3] += grad[qcur]
+                    //   v[:M,:D,:,:]                     [M,D,:,:]  grad[v][:M,:D,iv2,iv3]  += grad[vcur]
+                    //   for iq1:
+                    //    kcur   = k[:D,:M,ik2,ik3]       [D,M,1,1]  grad[kcur] = grad[S1].T @ qcur
+                    //    qcur   = q[:D,iq1,iq2,iq3]      [D,1,1,1]  grad[qcur] = grad[S1]   @ kcur
+                    //    vcur   = v[:M,:D,iv2,iv3]       [M,D,1,1]  grad[vcur] = grad[S5].T @ S4
+                    //    S0     = -Inf                   [D,1,1,1]
+                    //   ~S1[i]  = dot(kcur[:D,i], qcur)
+                    //    S1     = qcur @ kcur.T          [M,1,1,1]  grad[S1]   = grad[S2] * scale
+                    //    S2     = S1 * scale             [M,1,1,1]  grad[S2]   = diag_mask_zero(grad[S3], P)
+                    //    S3     = diag_mask_inf(S2, P)   [M,1,1,1]  grad[S3]   = S4 * (grad[S4] - dot(S4, grad[S4]))
+                    //    S4     = softmax(S3)            [M,1,1,1]  grad[S4]   = grad[S5] @ vcur
+                    //   ~S5[i]  = dot(vcur[:,i], S4)
+                    //    S5     = S4 @ vcur.T            [D,1,1,1]  grad[S5]   = d[:D,id1,id2,id3]
+                    //   ~dst[i,iq1,iq2,iq3]  = S5[i]              ^
+                    //    dst[:D,iq1,iq2,iq3] = S5                 | grad[dst[:D,iq1,iq2,iq3]] = d[:D,id1,id2,id3]
+                    // dst                               backward-/ grad[dst]                 = d
+                    //
+                    // output gradients with their dependencies:
+                    //
+                    // grad[kcur] = grad[S1].T @ qcur
+                    // grad[S1]   = diag_mask_zero(grad[S3], P) * scale
+                    // grad[S3]   = S4 * (grad[S4] - dot(S4, grad[S4]))
+                    // grad[S4]   = grad[S5] @ vcur
+                    // grad[S4]   = d[:D,id1,id2,id3] @ vcur
+                    // grad[qcur] = grad[S1]   @ kcur
+                    // grad[vcur] = grad[S5].T @ S4
+                    // grad[vcur] = d[:D,id1,id2,id3].T @ S4
+                    //
+                    // in post-order:
+                    //
+                    // S1         = qcur @ kcur.T
+                    // S2         = S1 * scale
+                    // S3         = diag_mask_inf(S2, P)
+                    // S4         = softmax(S3)
+                    // grad[S4]   = d[:D,id1,id2,id3] @ vcur
+                    // grad[S3]   = S4 * (grad[S4] - dot(S4, grad[S4]))
+                    // grad[S1]   = diag_mask_zero(grad[S3], P) * scale
+                    // grad[qcur] = grad[S1]   @ kcur
+                    // grad[kcur] = grad[S1].T @ qcur
+                    // grad[vcur] = d[:D,id1,id2,id3].T @ S4
+                    //
+                    // using less variables (SM=S4):
+                    //
+                    // S             = diag_mask_inf(qcur @ kcur.T * scale, P)
+                    // SM            = softmax(S)
+                    // S             = d[:D,iq1,iq2,iq3] @ vcur
+                    // dot_SM_gradSM = dot(SM, S)
+                    // S             = SM * (S - dot(SM, S))
+                    // S             = diag_mask_zero(S, P) * scale
+                    //
+                    // grad[q][:D,iq1,iq2,iq3] += S   @ kcur
+                    // grad[k][:D,:M,ik2,ik3]  += S.T @ qcur
+                    // grad[v][:M,:D,iv2,iv3]  += d[:D,id1,id2,id3].T @ SM
+                }
+
+                // S = gradSM = d[:D,id1,id2,id3] @ vcur[:,:,iv2,iv3]
+                // S = d[:D,id1,id2,id3] @ vcur[:,:,iv2,iv3]
+                // for ic:
+                //   S[:M] += vcur[:M,ic,iv2,iv3] * d[ic,id1,id2,id3]
+                // exclude known future zero S[..] values from operation
+                ggml_vec_set_f32(masked_begin, S, 0);
+                for (int64_t ic = 0; ic < D; ++ic) {
+                    ggml_vec_mad_f32(masked_begin,
+                            S,
+                             (float *) ((char *) v->data + (          ic*nbv1  + iv2*nbv2 + iv3*nbv3)),
+                            *(float *) ((char *) d->data + (ic*nbd0 + id1*nbd1 + id2*nbd2 + id3*nbd3)));
+                }
+
+                // S = SM * (S - dot(SM, S))
+                float dot_SM_gradSM = 0;
+                ggml_vec_dot_f32 (masked_begin, &dot_SM_gradSM, 0, SM, 0, S, 0, 1);
+                ggml_vec_acc1_f32(M, S, -dot_SM_gradSM);
+                ggml_vec_mul_f32 (masked_begin, S, S, SM);
+
+                // S = diag_mask_zero(S, P) * scale
+                // already done by above ggml_vec_set_f32
+
+                // exclude known zero S[..] values from operation
+                ggml_vec_scale_f32(masked_begin, S, scale);
+
+                // S    shape [M,1]
+                // SM   shape [M,1]
+                // kcur shape [D,M]
+                // qcur shape [D,1]
+                // vcur shape [M,D]
+
+                // grad[q][:D,iq1,iq2,iq3] += S @ kcur
+                // grad[q][:D,iq1,iq2,iq3] += shape[M,1] @ shape[D,M]
+                // for ic:
+                //  grad[q][:D,iq1,iq2,iq3] += S[ic] * kcur[:D,ic,ik2,ik3]
+                // exclude known zero S[..] values from loop
+                for (int64_t ic = 0; ic < masked_begin; ++ic) {
+                    ggml_vec_mad_f32(D,
+                            (float *) ((char *) grad_q  + (iq1*nbgq1 + iq2*nbgq2  + iq3*nbgq3)),
+                            (float *) ((char *) k->data + (ic*nbk1   + ik2*nbk2   + ik3*nbk3)),
+                            S[ic]);
+                }
+
+                // grad[k][:D,:M,iq2,iq3] += S.T @ qcur
+                // for ic:
+                //  grad[k][:D,ic,iq2,iq3] += S.T[0,ic] * qcur[:D,0]
+                //  grad[k][:D,ic,iq2,iq3] += S[ic]     * qcur[:D,0]
+                // exclude known zero S[..] values from loop
+                for (int64_t ic = 0; ic < masked_begin; ++ic) {
+                    ggml_vec_mad_f32(D,
+                            (float *) ((char *) grad_k  + (ic*nbgk1  + ik2*nbgk2  + ik3*nbgk3)),
+                            (float *) ((char *) q->data + (iq1*nbq1  + iq2*nbq2   + iq3*nbq3)),
+                            S[ic]);
+                }
+
+                // grad[v][:M,:D,iv2,iv3] += d[:D,id1,id2,id3].T       @ SM
+                // for ic:
+                //  grad[v][:M,ic,iv2,iv3] += d[:D,id1,id2,id3].T[0,ic] * SM[:M]
+                //  grad[v][:M,ic,iv2,iv3] += d[ic,id1,id2,id3]         * SM[:M]
+                // exclude known zero SM[..] values from mad
+                for (int64_t ic = 0; ic < D; ++ic) {
+                    ggml_vec_mad_f32(masked_begin,
+                            (float *) ((char *) grad_v   + (          ic*nbgv1 + iv2*nbgv2 + iv3*nbgv3)),
+                            SM,
+                            *(float *) ((char *) d->data + (ic*nbd0 + id1*nbd1 + id2*nbd2  + id3*nbd3)));
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_flash_attn_back(
+        const struct ggml_compute_params * params,
+        const bool masked,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * q = dst->src[0];
+
+    switch (q->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_flash_attn_back_f32(params, masked, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_ssm_conv
+
+static void ggml_compute_forward_ssm_conv_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+    const struct ggml_tensor * src0 = dst->src[0]; // conv_state
+    const struct ggml_tensor * src1 = dst->src[1]; // x
+    const struct ggml_tensor * src2 = dst->src[2]; // conv1d.weight
+    const struct ggml_tensor * src3 = dst->src[3]; // state_seq
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int nc   = src2->ne[0]; // d_conv
+    const int nr   = src0->ne[1]; // d_inner
+    const int n_t  = src1->ne[1]; // n_tokens
+    const int n_kv = src0->ne[2]; // max number of sequences in the batch
+
+    GGML_ASSERT((nr*n_t) + (nc*nr*n_kv) == ggml_nelements(dst));
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+    GGML_ASSERT(src1->nb[0] == sizeof(float));
+    GGML_ASSERT(src2->nb[0] == sizeof(float));
+    GGML_ASSERT(src3->nb[0] == sizeof(int32_t));
+    GGML_ASSERT(src0->nb[1] == src0->ne[0]*sizeof(float));
+    // for use with the destination state offset between sequences
+    GGML_ASSERT(src2->nb[2] == src2->ne[1]*src2->ne[0]*sizeof(float));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+    const int ir  = ir1 - ir0;
+
+    if (n_kv > 1) {
+        // multiple sequences means it's hard to know when it's the first time a state is read,
+        // so copy them all over to the destination, just to be sure.
+        for (int i3 = 0; i3 < n_kv; ++i3) {
+            float * s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + i3*(src0->nb[2]));
+            float * s  = (float *) ((char *)  dst->data + ir0*(src2->nb[1]) + i3*(src2->nb[2]) + nr*n_t*sizeof(float));
+            // can't use memcpy because of d_conv vs d_conv - 1
+            for (int i1 = 0; i1 < ir; ++i1) {
+                for (int i0 = 0; i0 < nc - 1; ++i0) {
+                    // copy s0 to last (d_conv - 1) columns of s
+                    s[1 + i0 + i1*nc] = s0[i0 + i1*(nc - 1)];
+                }
+            }
+        }
+    }
+
+    for (int i2 = 0; i2 < n_t; ++i2) {
+        int32_t * sq = (int32_t *) ((char *) src3->data +  i2*(src3->nb[1])); // {n_kv, n_tokens}
+        float *   x  = (float *)   ((char *)  dst->data + ir0*sizeof(float) + i2*(nr*sizeof(float))); // {d_inner, n_tokens}
+        float *   s  = (float *)   ((char *)  dst->data + ir0*(src2->nb[1]) + sq[0]*(src2->nb[2]) + nr*n_t*sizeof(float)); // {d_conv, d_inner, n_kv}
+        float *   s0; // {d_conv - 1, d_inner, n_kv}
+        float *   x0 = (float *)   ((char *) src1->data + ir0*(src1->nb[0]) + i2*(src1->nb[1])); // {d_inner, n_tokens}
+        float *   c  = (float *)   ((char *) src2->data + ir0*(src2->nb[1])); // {d_conv, d_inner}
+        int ne0s0;
+
+        GGML_ASSERT(0 <= sq[0] && sq[0] < n_kv);
+
+        // avoid needing to copy the state for the first token
+        if (i2 == 0) {
+            s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + sq[0]*(src0->nb[2])); // {d_conv - 1, d_inner, n_kv}
+            ne0s0 = src0->ne[0];
+        } else {
+            // the source is the last (d_conv - 1) columns of the destination
+            s0 = s + 1;
+            ne0s0 = nc;
+        }
+
+        // d_inner
+        for (int i1 = 0; i1 < ir; ++i1) {
+            // shift state left
+            for (int i0 = 0; i0 < nc - 1; ++i0) {
+                s[i0 + i1*nc] = s0[i0 + i1*ne0s0];
+            }
+            // insert x on the last column
+            s[(nc - 1) + i1*nc] = x0[i1];
+        }
+
+        // handle copies when there are multiple output states
+        for (int i3 = 1; i3 < n_kv; ++i3) {
+            int32_t seq = sq[i3];
+            if (0 <= seq && seq < n_kv) {
+                float * s1 = s + (seq - sq[0])*nc*nr;
+                memcpy(s1, s, nc*ir*sizeof(float));
+            } else {
+                // stop at negative or too big seq_ids
+                break;
+            }
+        }
+
+        // it seems a little faster when this is separate from the state shift
+        for (int i1 = 0; i1 < ir; ++i1) {
+            // rowwise dot product
+            float sumf = 0.0f;
+            for (int i0 = 0; i0 < nc; ++i0) {
+                int i = i0 + i1*nc;
+                sumf += s[i] * c[i];
+            }
+            x[i1] = sumf;
+        }
+    }
+}
+
+static void ggml_compute_forward_ssm_conv(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+    switch (dst->src[0]->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_ssm_conv_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_ssm_scan
+
+static void ggml_compute_forward_ssm_scan_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+    const struct ggml_tensor * src0 = dst->src[0]; // s
+    const struct ggml_tensor * src1 = dst->src[1]; // x
+    const struct ggml_tensor * src2 = dst->src[2]; // dt
+    const struct ggml_tensor * src3 = dst->src[3]; // A
+    const struct ggml_tensor * src4 = dst->src[4]; // B
+    const struct ggml_tensor * src5 = dst->src[5]; // C
+    const struct ggml_tensor * src6 = dst->src[6]; // sq
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    const int64_t nc   = src0->ne[0]; // d_state
+    const int64_t nr   = src0->ne[1]; // d_inner
+    const int64_t n_t  = src1->ne[1]; // number of tokens in the batch
+    const int64_t n_kv = src0->ne[2]; // max number of sequences in the batch
+
+    GGML_ASSERT(ggml_nelements(src1) + ggml_nelements(src0) == ggml_nelements(dst));
+    GGML_ASSERT(src0->nb[0] == sizeof(float));
+    GGML_ASSERT(src1->nb[0] == sizeof(float));
+    GGML_ASSERT(src2->nb[0] == sizeof(float));
+    GGML_ASSERT(src3->nb[0] == sizeof(float));
+    GGML_ASSERT(src4->nb[0] == sizeof(float));
+    GGML_ASSERT(src5->nb[0] == sizeof(float));
+    // required for the dot product between s and C, and when copying the states
+    GGML_ASSERT(src0->nb[1] == src0->ne[0]*sizeof(float));
+    // required for per-sequence offsets for states
+    GGML_ASSERT(src0->nb[2] == src0->ne[0]*src0->ne[1]*sizeof(float));
+    // required to get correct offset for state destination (i.e. src1->nb[2])
+    GGML_ASSERT(src1->nb[2] == src1->ne[0]*src1->ne[1]*sizeof(float));
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+    const int ir  = ir1 - ir0;
+
+    if (n_kv > 1) {
+        // it's hard to know if the source states have already been copied
+        // when there are multiple, so copy them already.
+        for (int i3 = 0; i3 < n_kv; ++i3) {
+            float * s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + i3*(src0->nb[2]));
+            float * s  = (float *) ((char *)  dst->data + ir0*(src0->nb[1]) + i3*(src0->nb[2]) + src1->nb[2]);
+            memcpy(s, s0, nc*ir*sizeof(float));
+        }
+    }
+
+    for (int i2 = 0; i2 < n_t; ++i2) {
+        int32_t * sq = (int32_t *) ((char *) src6->data +  i2*(src6->nb[1])); // {n_kv, n_tokens}
+        float *   y  = (float *)   ((char *)  dst->data + ir0*(src1->nb[0]) +    i2*(src1->nb[1])); // {d_inner, n_tokens}
+        float *   s  = (float *)   ((char *)  dst->data + ir0*(src0->nb[1]) + sq[0]*(src0->nb[2]) + src1->nb[2]); // {d_state, d_inner, n_kv}
+        float *   s0;
+        float *   x  = (float *)   ((char *) src1->data + ir0*(src1->nb[0]) + i2*(src1->nb[1])); // {d_inner, n_tokens}
+        float *   dt = (float *)   ((char *) src2->data + ir0*(src2->nb[0]) + i2*(src2->nb[1])); // {d_inner, n_tokens}
+        float *   A  = (float *)   ((char *) src3->data + ir0*(src3->nb[1])); // {d_state, d_inner}
+        float *   B  = (float *)   ((char *) src4->data +  i2*(src4->nb[1])); // {d_state, n_tokens}
+        float *   C  = (float *)   ((char *) src5->data +  i2*(src5->nb[1])); // {d_state, n_tokens}
+
+        GGML_ASSERT(0 <= sq[0] && sq[0] < n_kv);
+
+        // avoid needing to copy the state for the first token
+        if (i2 == 0) {
+            s0 = (float *) ((char *) src0->data + ir0*(src0->nb[1]) + sq[0]*(src0->nb[2])); // {d_state, d_inner, n_kv}
+        } else {
+            // otherwise the source is the same as the destination
+            s0 = s;
+        }
+
+        // d_inner
+        for (int i1 = 0; i1 < ir; ++i1) {
+            // ref: https://github.com/state-spaces/mamba/blob/34076d664838588a3c97727b263478ab9f621a07/mamba_ssm/ops/triton/selective_state_update.py#L78
+            float dt_soft_plus = dt[i1] <= 20.0f ? log1pf(expf(dt[i1])) : dt[i1];
+            float x_dt = x[i1] * dt_soft_plus;
+            float sumf = 0.0f;
+            // d_state
+            for (int i0 = 0; i0 < nc; ++i0) {
+                int i = i0 + i1*nc;
+                // state = prev_state * dA + dB * x
+                float state = (s0[i] * expf(dt_soft_plus * A[i])) + (B[i0] * x_dt);
+                // y = rowwise_dotprod(state, C)
+                sumf += state * C[i0];
+                s[i] = state;
+            }
+            y[i1] = sumf;
+        }
+
+        // handle copies when there are multiple output states
+        for (int i3 = 1; i3 < n_kv; ++i3) {
+            int32_t seq = sq[i3];
+            if (0 <= seq && seq < n_kv) {
+                float * s1 = s + (seq - sq[0])*nc*nr;
+                memcpy(s1, s, nc*ir*sizeof(float));
+            } else {
+                // stop at negative or too big seq_ids
+                break;
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_ssm_scan(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+    switch (dst->src[0]->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_ssm_scan_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_win_part
+
+static void ggml_compute_forward_win_part_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+    UNUSED(params);
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne)
+    GGML_TENSOR_LOCALS(int64_t, ne,  dst,  ne)
+
+    const int32_t nep0 = ((const int32_t *)(dst->op_params))[0];
+    const int32_t nep1 = ((const int32_t *)(dst->op_params))[1];
+    const int32_t w    = ((const int32_t *)(dst->op_params))[2];
+
+    assert(ne00 == ne0);
+    assert(ne3  == nep0*nep1);
+
+    // TODO: optimize / multi-thread
+    for (int py = 0; py < nep1; ++py) {
+        for (int px = 0; px < nep0; ++px) {
+            const int64_t i3 = py*nep0 + px;
+            for (int64_t i2 = 0; i2 < ne2; ++i2) {
+                for (int64_t i1 = 0; i1 < ne1; ++i1) {
+                    for (int64_t i0 = 0; i0 < ne0; ++i0) {
+                        const int64_t i02 = py*w + i2;
+                        const int64_t i01 = px*w + i1;
+                        const int64_t i00 = i0;
+
+                        const int64_t i = i3*ne2*ne1*ne0 + i2*ne1*ne0    + i1*ne0   + i0;
+                        const int64_t j =                  i02*ne01*ne00 + i01*ne00 + i00;
+
+                        if (py*w + i2 >= ne02 || px*w + i1 >= ne01) {
+                            ((float *) dst->data)[i] = 0.0f;
+                        } else {
+                            ((float *) dst->data)[i] = ((float *) src0->data)[j];
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_win_part(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_win_part_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_win_unpart
+
+static void ggml_compute_forward_win_unpart_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+    UNUSED(params);
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    GGML_TENSOR_LOCALS(int64_t, ne0, src0, ne)
+    GGML_TENSOR_LOCALS(int64_t, ne,  dst,  ne)
+
+    const int32_t w = ((const int32_t *)(dst->op_params))[0];
+
+    // padding
+    const int px = (w - ne1%w)%w;
+    //const int py = (w - ne2%w)%w;
+
+    const int npx = (px + ne1)/w;
+    //const int npy = (py + ne2)/w;
+
+    assert(ne0 == ne00);
+
+    // TODO: optimize / multi-thread
+    for (int64_t i2 = 0; i2 < ne2; ++i2) {
+        for (int64_t i1 = 0; i1 < ne1; ++i1) {
+            for (int64_t i0 = 0; i0 < ne0; ++i0) {
+                const int ip2 = i2/w;
+                const int ip1 = i1/w;
+
+                const int64_t i02 = i2%w;
+                const int64_t i01 = i1%w;
+                const int64_t i00 = i0;
+
+                const int64_t i = (ip2*npx + ip1)*ne02*ne01*ne00 + i02*ne01*ne00 + i01*ne00 + i00;
+                const int64_t j =                                  i2*ne1*ne0    + i1*ne0   + i0;
+
+                ((float *) dst->data)[j] = ((float *) src0->data)[i];
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_win_unpart(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_win_unpart_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+//gmml_compute_forward_unary
+
+static void ggml_compute_forward_unary(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const enum ggml_unary_op op = ggml_get_unary_op(dst);
+
+    switch (op) {
+        case GGML_UNARY_OP_ABS:
+            {
+                ggml_compute_forward_abs(params, dst);
+            } break;
+        case GGML_UNARY_OP_SGN:
+            {
+                ggml_compute_forward_sgn(params, dst);
+            } break;
+        case GGML_UNARY_OP_NEG:
+            {
+                ggml_compute_forward_neg(params, dst);
+            } break;
+        case GGML_UNARY_OP_STEP:
+            {
+                ggml_compute_forward_step(params, dst);
+            } break;
+        case GGML_UNARY_OP_TANH:
+            {
+                ggml_compute_forward_tanh(params, dst);
+            } break;
+        case GGML_UNARY_OP_ELU:
+            {
+                ggml_compute_forward_elu(params, dst);
+            } break;
+        case GGML_UNARY_OP_RELU:
+            {
+                ggml_compute_forward_relu(params, dst);
+            } break;
+        case GGML_UNARY_OP_SIGMOID:
+            {
+                ggml_compute_forward_sigmoid(params, dst);
+            } break;
+        case GGML_UNARY_OP_GELU:
+            {
+                ggml_compute_forward_gelu(params, dst);
+            } break;
+        case GGML_UNARY_OP_GELU_QUICK:
+            {
+                ggml_compute_forward_gelu_quick(params, dst);
+            } break;
+        case GGML_UNARY_OP_SILU:
+            {
+                ggml_compute_forward_silu(params, dst);
+            } break;
+        case GGML_UNARY_OP_HARDSWISH:
+            {
+                ggml_compute_forward_hardswish(params, dst);
+            } break;
+        case GGML_UNARY_OP_HARDSIGMOID:
+            {
+                ggml_compute_forward_hardsigmoid(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_get_rel_pos
+
+static void ggml_compute_forward_get_rel_pos_f16(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+    UNUSED(params);
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    // ref: https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/modeling/image_encoder.py#L292-L322
+
+    GGML_TENSOR_UNARY_OP_LOCALS
+
+    const int64_t w = ne1;
+
+    ggml_fp16_t * src0_data = (ggml_fp16_t *) src0->data;
+    ggml_fp16_t * dst_data  = (ggml_fp16_t *) dst->data;
+
+    for (int64_t i2 = 0; i2 < ne2; ++i2) {
+        for (int64_t i1 = 0; i1 < ne1; ++i1) {
+            const int64_t pos = (w - i1 - 1) + i2;
+            for (int64_t i0 = 0; i0 < ne0; ++i0) {
+                dst_data[i2*ne1*ne0 + i1*ne0 + i0] = src0_data[pos*ne00 + i0];
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_get_rel_pos(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F16:
+        case GGML_TYPE_BF16:
+            {
+                ggml_compute_forward_get_rel_pos_f16(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_add_rel_pos
+
+static void ggml_compute_forward_add_rel_pos_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+    const struct ggml_tensor * src2 = dst->src[2];
+
+    const bool inplace = (bool) ((int32_t *) dst->op_params)[0];
+    if (!inplace) {
+        if (params->ith == 0) {
+            memcpy((char *) dst->data, (char *) src0->data, ggml_nbytes(dst));
+        }
+        ggml_barrier(params->shared);
+    }
+    // ref: https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/modeling/image_encoder.py#L357-L359
+
+    float * src1_data = (float *) src1->data;
+    float * src2_data = (float *) src2->data;
+    float * dst_data  = (float *) dst->data;
+
+    const int64_t ne10 = src1->ne[0];
+    const int64_t ne11 = src1->ne[1];
+    const int64_t ne12 = src1->ne[2];
+    const int64_t ne13 = src1->ne[3];
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    // total patches in dst
+    const int np = ne13;
+
+    // patches per thread
+    const int dp = (np + nth - 1)/nth;
+
+    // patch range for this thread
+    const int ip0 = dp*ith;
+    const int ip1 = MIN(ip0 + dp, np);
+
+    for (int64_t i13 = ip0; i13 < ip1; ++i13) {
+        for (int64_t i12 = 0; i12 < ne12; ++i12) {
+            for (int64_t i11 = 0; i11 < ne11; ++i11) {
+                const int64_t jp1 = i13*ne12*ne11*ne10 + i12*ne11*ne10 + i11*ne10;
+                for (int64_t i10 = 0; i10 < ne10; ++i10) {
+                    const int64_t jp0  = jp1 + i10;
+                    const float src1_e = src1_data[jp0];
+                    const float src2_e = src2_data[jp0];
+
+                    const int64_t jdh = jp0 * ne10;
+                    const int64_t jdw = jdh - (ne10 - 1) * i10;
+
+                    for (int64_t j = 0; j < ne10; ++j) {
+                        dst_data[jdh + j     ] += src2_e;
+                        dst_data[jdw + j*ne10] += src1_e;
+                    }
+                }
+            }
+        }
+    }
+}
+
+static void ggml_compute_forward_add_rel_pos(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_add_rel_pos_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_map_unary
+
+static void ggml_compute_forward_map_unary_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst,
+        const ggml_unary_op_f32_t fun) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        fun(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_map_unary(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst,
+        const ggml_unary_op_f32_t fun) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_map_unary_f32(params, dst, fun);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_map_binary
+
+static void ggml_compute_forward_map_binary_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst,
+        const ggml_binary_op_f32_t fun) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    assert(ggml_is_contiguous_1(src0));
+    assert(ggml_is_contiguous_1(src1));
+    assert(ggml_is_contiguous_1(dst));
+    assert(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
+
+    const int n  = ggml_nrows(src0);
+    const int nc = src0->ne[0];
+
+    for (int i = 0; i < n; i++) {
+        fun(nc,
+                (float *) ((char *) dst->data  + i*( dst->nb[1])),
+                (float *) ((char *) src0->data + i*(src0->nb[1])),
+                (float *) ((char *) src1->data + i*(src1->nb[1])));
+    }
+}
+
+static void ggml_compute_forward_map_binary(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst,
+        const ggml_binary_op_f32_t fun) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_map_binary_f32(params, dst, fun);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_map_custom1
+
+static void ggml_compute_forward_map_custom1_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst,
+        const ggml_custom1_op_f32_t fun) {
+
+    const struct ggml_tensor * a = dst->src[0];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    fun(dst, a);
+}
+
+// ggml_compute_forward_map_custom2
+
+static void ggml_compute_forward_map_custom2_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst,
+        const ggml_custom2_op_f32_t fun) {
+
+    const struct ggml_tensor * a = dst->src[0];
+    const struct ggml_tensor * b = dst->src[1];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    fun(dst, a, b);
+}
+
+// ggml_compute_forward_map_custom3
+
+static void ggml_compute_forward_map_custom3_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst,
+        const ggml_custom3_op_f32_t fun) {
+
+    const struct ggml_tensor * a = dst->src[0];
+    const struct ggml_tensor * b = dst->src[1];
+    const struct ggml_tensor * c = dst->src[1];
+
+    if (params->ith != 0) {
+        return;
+    }
+
+    fun(dst, a, b, c);
+}
+
+// ggml_compute_forward_map_custom1
+
+static void ggml_compute_forward_map_custom1(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * a = dst->src[0];
+
+    struct ggml_map_custom1_op_params p;
+    memcpy(&p, dst->op_params, sizeof(p));
+
+    p.fun(dst, a, params->ith, params->nth, p.userdata);
+}
+
+// ggml_compute_forward_map_custom2
+
+static void ggml_compute_forward_map_custom2(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * a = dst->src[0];
+    const struct ggml_tensor * b = dst->src[1];
+
+    struct ggml_map_custom2_op_params p;
+    memcpy(&p, dst->op_params, sizeof(p));
+
+    p.fun(dst, a, b, params->ith, params->nth, p.userdata);
+}
+
+// ggml_compute_forward_map_custom3
+
+static void ggml_compute_forward_map_custom3(
+        const struct ggml_compute_params * params,
+              struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * a = dst->src[0];
+    const struct ggml_tensor * b = dst->src[1];
+    const struct ggml_tensor * c = dst->src[2];
+
+    struct ggml_map_custom3_op_params p;
+    memcpy(&p, dst->op_params, sizeof(p));
+
+    p.fun(dst, a, b, c, params->ith, params->nth, p.userdata);
+}
+
+// ggml_compute_forward_cross_entropy_loss
+
+static void ggml_compute_forward_cross_entropy_loss_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+
+    GGML_ASSERT(ggml_is_contiguous(src0));
+    GGML_ASSERT(ggml_is_contiguous(src1));
+    GGML_ASSERT(ggml_is_scalar(dst));
+    GGML_ASSERT(ggml_are_same_shape(src0, src1));
+
+    const int ith = params->ith;
+    const int nth = params->nth;
+
+    float * sums = (float *) params->wdata;
+
+    // TODO: handle transposed/permuted matrices
+    const int nc = src0->ne[0];
+    const int nr = ggml_nrows(src0);
+
+    GGML_ASSERT(params->wsize >= sizeof(float) * (nth + nth * nc));
+
+    if (ith == 0) {
+        memset(sums, 0, sizeof(float) * (nth + nth * nc));
+    }
+    ggml_barrier(params->shared);
+
+    const double eps = 1e-9;
+
+    // rows per thread
+    const int dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int ir0 = dr*ith;
+    const int ir1 = MIN(ir0 + dr, nr);
+
+    for (int i1 = ir0; i1 < ir1; i1++) {
+        float * s0 = (float *)((char *) src0->data + i1*src0->nb[1]);
+        float * s1 = (float *)((char *) src1->data + i1*src1->nb[1]);
+        float * st = ((float *) params->wdata) + nth + ith*nc;
+
+#ifndef NDEBUG
+        for (int i = 0; i < nc; ++i) {
+            //printf("p[%d] = %f\n", i, p[i]);
+            assert(!isnan(s0[i]));
+            assert(!isnan(s1[i]));
+        }
+#endif
+
+        // soft_max
+        float max = -INFINITY;
+        ggml_vec_max_f32(nc, &max, s0);
+        ggml_float sum = ggml_vec_soft_max_f32(nc, st, s0, max);
+        assert(sum > 0.0);
+        sum = (1.0 - eps) / sum;
+
+        // avoid log(0) by rescaling from [0..1] to [eps..1]
+        ggml_vec_scale_f32(nc, st, sum);
+        ggml_vec_add1_f32(nc, st, st, eps);
+        ggml_vec_log_f32(nc, st, st);
+        ggml_vec_mul_f32(nc, st, st, s1);
+
+        float st_sum = 0;
+        ggml_vec_sum_f32(nc, &st_sum, st);
+        sums[ith] += st_sum;
+
+#ifndef NDEBUG
+        for (int i = 0; i < nc; ++i) {
+            assert(!isnan(st[i]));
+            assert(!isinf(st[i]));
+        }
+#endif
+    }
+    ggml_barrier(params->shared);
+
+    if (ith == 0) {
+        float * dp = (float *) dst->data;
+        ggml_vec_sum_f32(nth, dp, sums);
+        dp[0] *= -1.0f / (float) nr;
+    }
+}
+
+static void ggml_compute_forward_cross_entropy_loss(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_cross_entropy_loss_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+// ggml_compute_forward_cross_entropy_loss_back
+
+static void ggml_compute_forward_cross_entropy_loss_back_f32(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+    const struct ggml_tensor * src1 = dst->src[1];
+    const struct ggml_tensor * opt0 = dst->src[2];
+
+    GGML_ASSERT(ggml_is_contiguous(dst));
+    GGML_ASSERT(ggml_is_contiguous(src0));
+    GGML_ASSERT(ggml_is_contiguous(src1));
+    GGML_ASSERT(ggml_is_contiguous(opt0));
+    GGML_ASSERT(ggml_are_same_shape(src0, src1) && ggml_are_same_shape(src0, dst));
+
+    const int64_t ith = params->ith;
+    const int64_t nth = params->nth;
+
+    const double eps = 1e-9;
+
+    // TODO: handle transposed/permuted matrices
+    const int64_t nc = src0->ne[0];
+    const int64_t nr = ggml_nrows(src0);
+
+    // rows per thread
+    const int64_t dr = (nr + nth - 1)/nth;
+
+    // row range for this thread
+    const int64_t ir0 = dr*ith;
+    const int64_t ir1 = MIN(ir0 + dr, nr);
+
+    float * d   = (float *) opt0->data;
+
+    for (int64_t i1 = ir0; i1 < ir1; i1++) {
+        float * ds0 = (float *)((char *) dst->data  + i1*dst->nb[1]);
+        float * s0  = (float *)((char *) src0->data + i1*src0->nb[1]);
+        float * s1  = (float *)((char *) src1->data + i1*src1->nb[1]);
+
+#ifndef NDEBUG
+        for (int i = 0; i < nc; ++i) {
+            //printf("p[%d] = %f\n", i, p[i]);
+            assert(!isnan(s0[i]));
+            assert(!isnan(s1[i]));
+        }
+#endif
+
+        // soft_max
+        float max = -INFINITY;
+        ggml_vec_max_f32(nc, &max, s0);
+        ggml_float sum = ggml_vec_soft_max_f32(nc, ds0, s0, max);
+        assert(sum > 0.0);
+        sum = (1.0 - eps) / sum;
+
+        // grad(src0) = (softmax(src0) - src1) * grad(cross_entropy_loss(src0, src1)) / nr
+        ggml_vec_scale_f32(nc, ds0, sum);
+        ggml_vec_add1_f32(nc, ds0, ds0, eps);
+        ggml_vec_sub_f32(nc, ds0, ds0, s1);
+        ggml_vec_scale_f32(nc, ds0, d[0] / (float) nr);
+
+#ifndef NDEBUG
+        for (int i = 0; i < nc; ++i) {
+            assert(!isnan(ds0[i]));
+            assert(!isinf(ds0[i]));
+        }
+#endif
+    }
+}
+
+static void ggml_compute_forward_cross_entropy_loss_back(
+        const struct ggml_compute_params * params,
+        struct ggml_tensor * dst) {
+
+    const struct ggml_tensor * src0 = dst->src[0];
+
+    switch (src0->type) {
+        case GGML_TYPE_F32:
+            {
+                ggml_compute_forward_cross_entropy_loss_back_f32(params, dst);
+            } break;
+        default:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+/////////////////////////////////
+
+static void ggml_compute_forward(struct ggml_compute_params * params, struct ggml_tensor * tensor) {
+    GGML_ASSERT(params);
+
+    if (tensor->op == GGML_OP_NONE || ggml_is_empty(tensor)) {
+        return;
+    }
+
+    switch (tensor->op) {
+        case GGML_OP_DUP:
+            {
+                ggml_compute_forward_dup(params, tensor);
+            } break;
+        case GGML_OP_ADD:
+            {
+                ggml_compute_forward_add(params, tensor);
+            } break;
+        case GGML_OP_ADD1:
+            {
+                ggml_compute_forward_add1(params, tensor);
+            } break;
+        case GGML_OP_ACC:
+            {
+                ggml_compute_forward_acc(params, tensor);
+            } break;
+        case GGML_OP_SUB:
+            {
+                ggml_compute_forward_sub(params, tensor);
+            } break;
+        case GGML_OP_MUL:
+            {
+                ggml_compute_forward_mul(params, tensor);
+            } break;
+        case GGML_OP_DIV:
+            {
+                ggml_compute_forward_div(params, tensor);
+            } break;
+        case GGML_OP_SQR:
+            {
+                ggml_compute_forward_sqr(params, tensor);
+            } break;
+        case GGML_OP_SQRT:
+            {
+                ggml_compute_forward_sqrt(params, tensor);
+            } break;
+        case GGML_OP_LOG:
+            {
+                ggml_compute_forward_log(params, tensor);
+            } break;
+        case GGML_OP_SUM:
+            {
+                ggml_compute_forward_sum(params, tensor);
+            } break;
+        case GGML_OP_SUM_ROWS:
+            {
+                ggml_compute_forward_sum_rows(params, tensor);
+            } break;
+        case GGML_OP_MEAN:
+            {
+                ggml_compute_forward_mean(params, tensor);
+            } break;
+        case GGML_OP_ARGMAX:
+            {
+                ggml_compute_forward_argmax(params, tensor);
+            } break;
+        case GGML_OP_REPEAT:
+            {
+                ggml_compute_forward_repeat(params, tensor);
+            } break;
+        case GGML_OP_REPEAT_BACK:
+            {
+                ggml_compute_forward_repeat_back(params, tensor);
+            } break;
+        case GGML_OP_CONCAT:
+            {
+                ggml_compute_forward_concat(params, tensor);
+            } break;
+        case GGML_OP_SILU_BACK:
+            {
+                ggml_compute_forward_silu_back(params, tensor);
+            } break;
+        case GGML_OP_NORM:
+            {
+                ggml_compute_forward_norm(params, tensor);
+            } break;
+        case GGML_OP_RMS_NORM:
+            {
+                ggml_compute_forward_rms_norm(params, tensor);
+            } break;
+        case GGML_OP_RMS_NORM_BACK:
+            {
+                ggml_compute_forward_rms_norm_back(params, tensor);
+            } break;
+        case GGML_OP_GROUP_NORM:
+            {
+                ggml_compute_forward_group_norm(params, tensor);
+            } break;
+        case GGML_OP_MUL_MAT:
+            {
+                ggml_compute_forward_mul_mat(params, tensor);
+            } break;
+        case GGML_OP_MUL_MAT_ID:
+            {
+                ggml_compute_forward_mul_mat_id(params, tensor);
+            } break;
+        case GGML_OP_OUT_PROD:
+            {
+                ggml_compute_forward_out_prod(params, tensor);
+            } break;
+        case GGML_OP_SCALE:
+            {
+                ggml_compute_forward_scale(params, tensor);
+            } break;
+        case GGML_OP_SET:
+            {
+                ggml_compute_forward_set(params, tensor);
+            } break;
+        case GGML_OP_CPY:
+            {
+                ggml_compute_forward_cpy(params, tensor);
+            } break;
+        case GGML_OP_CONT:
+            {
+                ggml_compute_forward_cont(params, tensor);
+            } break;
+        case GGML_OP_RESHAPE:
+            {
+                ggml_compute_forward_reshape(params, tensor);
+            } break;
+        case GGML_OP_VIEW:
+            {
+                ggml_compute_forward_view(params, tensor);
+            } break;
+        case GGML_OP_PERMUTE:
+            {
+                ggml_compute_forward_permute(params, tensor);
+            } break;
+        case GGML_OP_TRANSPOSE:
+            {
+                ggml_compute_forward_transpose(params, tensor);
+            } break;
+        case GGML_OP_GET_ROWS:
+            {
+                ggml_compute_forward_get_rows(params, tensor);
+            } break;
+        case GGML_OP_GET_ROWS_BACK:
+            {
+                ggml_compute_forward_get_rows_back(params, tensor);
+            } break;
+        case GGML_OP_DIAG:
+            {
+                ggml_compute_forward_diag(params, tensor);
+            } break;
+        case GGML_OP_DIAG_MASK_INF:
+            {
+                ggml_compute_forward_diag_mask_inf(params, tensor);
+            } break;
+        case GGML_OP_DIAG_MASK_ZERO:
+            {
+                ggml_compute_forward_diag_mask_zero(params, tensor);
+            } break;
+        case GGML_OP_SOFT_MAX:
+            {
+                ggml_compute_forward_soft_max(params, tensor);
+            } break;
+        case GGML_OP_SOFT_MAX_BACK:
+            {
+                ggml_compute_forward_soft_max_back(params, tensor);
+            } break;
+        case GGML_OP_ROPE:
+            {
+                ggml_compute_forward_rope(params, tensor);
+            } break;
+        case GGML_OP_ROPE_BACK:
+            {
+                ggml_compute_forward_rope_back(params, tensor);
+            } break;
+        case GGML_OP_CLAMP:
+            {
+                ggml_compute_forward_clamp(params, tensor);
+            } break;
+        case GGML_OP_CONV_TRANSPOSE_1D:
+            {
+                ggml_compute_forward_conv_transpose_1d(params, tensor);
+            } break;
+        case GGML_OP_IM2COL:
+            {
+                ggml_compute_forward_im2col(params, tensor);
+            } break;
+        case GGML_OP_CONV_TRANSPOSE_2D:
+            {
+                ggml_compute_forward_conv_transpose_2d(params, tensor);
+            } break;
+        case GGML_OP_POOL_1D:
+            {
+                ggml_compute_forward_pool_1d(params, tensor);
+            } break;
+        case GGML_OP_POOL_2D:
+            {
+                ggml_compute_forward_pool_2d(params, tensor);
+            } break;
+        case GGML_OP_UPSCALE:
+            {
+                ggml_compute_forward_upscale(params, tensor);
+            } break;
+        case GGML_OP_PAD:
+            {
+                ggml_compute_forward_pad(params, tensor);
+            } break;
+        case GGML_OP_ARANGE:
+            {
+                ggml_compute_forward_arange(params, tensor);
+            } break;
+        case GGML_OP_TIMESTEP_EMBEDDING:
+            {
+                ggml_compute_forward_timestep_embedding(params, tensor);
+            } break;
+        case GGML_OP_ARGSORT:
+            {
+                ggml_compute_forward_argsort(params, tensor);
+            } break;
+        case GGML_OP_LEAKY_RELU:
+            {
+                ggml_compute_forward_leaky_relu(params, tensor);
+            } break;
+        case GGML_OP_FLASH_ATTN_EXT:
+            {
+                ggml_compute_forward_flash_attn_ext(params, tensor->src[0], tensor->src[1], tensor->src[2], tensor->src[3], tensor);
+            } break;
+        case GGML_OP_FLASH_ATTN_BACK:
+            {
+                int32_t t = ggml_get_op_params_i32(tensor, 0);
+                GGML_ASSERT(t == 0 || t == 1);
+                bool masked = t != 0;
+                ggml_compute_forward_flash_attn_back(params, masked, tensor);
+            } break;
+        case GGML_OP_SSM_CONV:
+            {
+                ggml_compute_forward_ssm_conv(params, tensor);
+            } break;
+        case GGML_OP_SSM_SCAN:
+            {
+                ggml_compute_forward_ssm_scan(params, tensor);
+            } break;
+        case GGML_OP_WIN_PART:
+            {
+                ggml_compute_forward_win_part(params, tensor);
+            } break;
+        case GGML_OP_WIN_UNPART:
+            {
+                ggml_compute_forward_win_unpart(params, tensor);
+            } break;
+        case GGML_OP_UNARY:
+            {
+                ggml_compute_forward_unary(params, tensor);
+            } break;
+        case GGML_OP_GET_REL_POS:
+            {
+                ggml_compute_forward_get_rel_pos(params, tensor);
+            } break;
+        case GGML_OP_ADD_REL_POS:
+            {
+                ggml_compute_forward_add_rel_pos(params, tensor);
+            } break;
+        case GGML_OP_MAP_UNARY:
+            {
+                ggml_unary_op_f32_t fun;
+                memcpy(&fun, tensor->op_params, sizeof(fun));
+                ggml_compute_forward_map_unary(params, tensor, fun);
+            }
+            break;
+        case GGML_OP_MAP_BINARY:
+            {
+                ggml_binary_op_f32_t fun;
+                memcpy(&fun, tensor->op_params, sizeof(fun));
+                ggml_compute_forward_map_binary(params, tensor, fun);
+            }
+            break;
+        case GGML_OP_MAP_CUSTOM1_F32:
+            {
+                ggml_custom1_op_f32_t fun;
+                memcpy(&fun, tensor->op_params, sizeof(fun));
+                ggml_compute_forward_map_custom1_f32(params, tensor, fun);
+            }
+            break;
+        case GGML_OP_MAP_CUSTOM2_F32:
+            {
+                ggml_custom2_op_f32_t fun;
+                memcpy(&fun, tensor->op_params, sizeof(fun));
+                ggml_compute_forward_map_custom2_f32(params, tensor, fun);
+            }
+            break;
+        case GGML_OP_MAP_CUSTOM3_F32:
+            {
+                ggml_custom3_op_f32_t fun;
+                memcpy(&fun, tensor->op_params, sizeof(fun));
+                ggml_compute_forward_map_custom3_f32(params, tensor, fun);
+            }
+            break;
+        case GGML_OP_MAP_CUSTOM1:
+            {
+                ggml_compute_forward_map_custom1(params, tensor);
+            }
+            break;
+        case GGML_OP_MAP_CUSTOM2:
+            {
+                ggml_compute_forward_map_custom2(params, tensor);
+            }
+            break;
+        case GGML_OP_MAP_CUSTOM3:
+            {
+                ggml_compute_forward_map_custom3(params, tensor);
+            }
+            break;
+        case GGML_OP_CROSS_ENTROPY_LOSS:
+            {
+                ggml_compute_forward_cross_entropy_loss(params, tensor);
+            }
+            break;
+        case GGML_OP_CROSS_ENTROPY_LOSS_BACK:
+            {
+                ggml_compute_forward_cross_entropy_loss_back(params, tensor);
+            }
+            break;
+        case GGML_OP_NONE:
+            {
+                // nop
+            } break;
+        case GGML_OP_COUNT:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+static size_t ggml_hash_size(size_t min_sz) {
+    // next primes after powers of two
+    static const size_t primes[] = {
+        2, 3, 5, 11, 17, 37, 67, 131, 257, 521, 1031,
+        2053, 4099, 8209, 16411, 32771, 65537, 131101,
+        262147, 524309, 1048583, 2097169, 4194319, 8388617,
+        16777259, 33554467, 67108879, 134217757, 268435459,
+        536870923, 1073741827, 2147483659
+    };
+    static const size_t n_primes = sizeof(primes)/sizeof(primes[0]);
+
+    // find the smallest prime that is larger or equal to min_sz
+    size_t l = 0;
+    size_t r = n_primes;
+    while (l < r) {
+        size_t m = (l + r)/2;
+        if (primes[m] < min_sz) {
+            l = m + 1;
+        } else {
+            r = m;
+        }
+    }
+    size_t sz = l < n_primes ? primes[l] : min_sz | 1;
+    return sz;
+}
+
+static size_t ggml_hash(const void * p) {
+    return (size_t)p;
+}
+
+size_t ggml_hash_find(const struct ggml_hash_set hash_set, struct ggml_tensor * key) {
+    size_t h = ggml_hash(key) % hash_set.size;
+
+    // linear probing
+    size_t i = h;
+    while (hash_set.keys[i] != NULL && hash_set.keys[i] != key) {
+        i = (i + 1) % hash_set.size;
+        if (i == h) {
+            // visited all hash table entries -> not found
+            return GGML_HASHTABLE_FULL;
+        }
+    }
+    return i;
+}
+
+bool ggml_hash_contains(struct ggml_hash_set hash_set, struct ggml_tensor * key) {
+    size_t i = ggml_hash_find(hash_set, key);
+    return i != GGML_HASHTABLE_FULL && hash_set.keys[i] == key;
+}
+
+size_t ggml_hash_insert(struct ggml_hash_set hash_set, struct ggml_tensor * key) {
+    size_t i = ggml_hash_find(hash_set, key);
+
+    GGML_ASSERT(i != GGML_HASHTABLE_FULL);
+
+    if (hash_set.keys[i] == key) {
+        return GGML_HASHTABLE_ALREADY_EXISTS;
+    }
+
+    // insert
+    GGML_ASSERT(hash_set.keys[i] == NULL);
+    hash_set.keys[i] = key;
+    return i;
+}
+
+size_t ggml_hash_find_or_insert(struct ggml_hash_set hash_set, struct ggml_tensor * key) {
+    size_t i = ggml_hash_find(hash_set, key);
+
+    GGML_ASSERT(i != GGML_HASHTABLE_FULL);
+
+    hash_set.keys[i] = key;
+    return i;
+}
+
+struct ggml_hash_set ggml_hash_set_new(size_t size) {
+    size = ggml_hash_size(size);
+    struct ggml_hash_set result;
+    result.size = size;
+    result.keys = GGML_MALLOC(sizeof(struct ggml_tensor *) * size);
+    memset(result.keys, 0, sizeof(struct ggml_tensor *) * size);
+    return result;
+}
+
+static void ggml_hash_set_free(struct ggml_hash_set hash_set) {
+    GGML_FREE(hash_set.keys);
+}
+
+struct hash_map {
+    struct ggml_hash_set set;
+    struct ggml_tensor ** vals;
+};
+
+static struct hash_map * ggml_new_hash_map(size_t size) {
+    struct hash_map * result = GGML_MALLOC(sizeof(struct hash_map));
+    result->set = ggml_hash_set_new(size);
+    result->vals = GGML_MALLOC(sizeof(struct ggml_tensor *) * result->set.size);
+    memset(result->vals, 0, sizeof(struct ggml_tensor *) * result->set.size);
+    return result;
+}
+
+static void ggml_hash_map_free(struct hash_map * map) {
+    ggml_hash_set_free(map->set);
+    GGML_FREE(map->vals);
+    GGML_FREE(map);
+}
+
+// gradient checkpointing
+
+static struct ggml_tensor * ggml_recompute_graph_node(
+        struct ggml_context * ctx,
+        struct ggml_cgraph  * graph,
+        struct hash_map     * replacements,
+        struct ggml_tensor  * node) {
+
+    if (node == NULL) {
+        return NULL;
+    }
+
+    if (node->flags & GGML_TENSOR_FLAG_PARAM) {
+        return node;
+    }
+
+    if (!ggml_hash_contains(graph->visited_hash_table, node)) {
+        return node;
+    }
+
+    int count_children = 0;
+    for (int k = 0; k < GGML_MAX_SRC; ++k) {
+        if (node->src[k]) {
+            ++count_children;
+        }
+    }
+
+    if (count_children == 0) {
+        return node;
+    }
+
+    size_t i = ggml_hash_find(replacements->set, node);
+    GGML_ASSERT(i != GGML_HASHTABLE_FULL); // assert that not full
+    if (replacements->set.keys[i] == node) {
+        return replacements->vals[i];
+    }
+
+    struct ggml_tensor * clone = ggml_new_tensor(ctx, node->type, GGML_MAX_DIMS, node->ne);
+
+    // insert clone into replacements
+    GGML_ASSERT(replacements->set.keys[i] == NULL); // assert that we don't overwrite
+    replacements->set.keys[i] = node;
+    replacements->vals[i] = clone;
+
+    clone->op       = node->op;
+    clone->grad     = node->grad;
+    clone->flags    = node->flags;
+    clone->extra    = node->extra;
+    for (int k = 0; k < GGML_MAX_DIMS; ++k) {
+        clone->nb[k] = node->nb[k];
+    }
+    for (int k = 0; k < GGML_MAX_SRC; ++k) {
+        clone->src[k] = ggml_recompute_graph_node(ctx, graph, replacements, node->src[k]);
+    }
+    if (node->view_src != NULL) {
+        clone->data = (node->view_src->data == NULL)
+                        ? NULL // view_src not yet allocated
+                        : (char *) node->view_src->data // view_src already allocated
+                                 + node->view_offs;
+        clone->view_src  = node->view_src;
+        clone->view_offs = node->view_offs;
+    }
+
+    GGML_ASSERT(sizeof(node->op_params) == sizeof(int32_t) * (GGML_MAX_OP_PARAMS / sizeof(int32_t)));
+    GGML_ASSERT(sizeof(node->name)      == GGML_MAX_NAME);
+    memcpy(clone->op_params, node->op_params, sizeof(node->op_params));
+    ggml_format_name(clone, "%s (clone)", ggml_get_name(node));
+
+    return clone;
+}
+
+void ggml_build_backward_gradient_checkpointing(
+        struct ggml_context   * ctx,
+        struct ggml_cgraph    * gf,
+        struct ggml_cgraph    * gb,
+        struct ggml_cgraph    * gb_tmp,
+        struct ggml_tensor  * * checkpoints,
+        int                     n_checkpoints) {
+    ggml_graph_cpy(gf, gb_tmp);
+    ggml_build_backward_expand(ctx, gf, gb_tmp, true);
+
+    if (n_checkpoints <= 0) {
+        ggml_graph_cpy(gb_tmp, gb);
+        return;
+    }
+
+    struct hash_map * replacements = ggml_new_hash_map(gf->n_nodes + gf->n_leafs + n_checkpoints);
+
+    // insert checkpoints in replacements
+    for (int i = 0; i < n_checkpoints; ++i) {
+        size_t k = ggml_hash_find(replacements->set, checkpoints[i]);
+        GGML_ASSERT(k != GGML_HASHTABLE_FULL); // assert that not full
+        GGML_ASSERT(replacements->set.keys[k] == NULL); // assert that we don't overwrite
+        replacements->set.keys[k] = checkpoints[i];
+        replacements->vals[k]     = checkpoints[i];
+    }
+
+    ggml_graph_cpy(gf, gb);
+    // rewrite gb_tmp->nodes[gf->n_nodes:gb_tmp->n_nodes],
+    // replacing references to gb_tmp->nodes[0:gf->n_nodes] ( == gf->nodes[0:gf->n_nodes]),
+    // by recomputing them from checkpoints
+    for (int i = gf->n_nodes; i<gb_tmp->n_nodes; ++i) {
+        struct ggml_tensor * node = gb_tmp->nodes[i];
+        for (int k = 0; k < GGML_MAX_SRC; ++k) {
+            // insert new tensors recomputing src, reusing already made replacements,
+            // remember replacements: remember new tensors with mapping from corresponding gf nodes
+            // recurse for input tensors,
+            // unless (i.e. terminating when) input tensors are replacements (like checkpoints)
+            node->src[k] = ggml_recompute_graph_node(ctx, gf, replacements, node->src[k]);
+        }
+        // insert rewritten backward node with replacements made into resulting backward graph gb
+        ggml_build_forward_expand(gb, node);
+    }
+
+    ggml_hash_map_free(replacements);
+}
+
+// functions to change gradients considering the case that input a might be initial gradient with zero value
+
+static struct ggml_tensor * ggml_add_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_hash_set zero_table) {
+    if (ggml_hash_contains(zero_table, a)) {
+        return b;
+    } else {
+        return ggml_add_impl(ctx, a, b, false);
+    }
+}
+
+static struct ggml_tensor * ggml_acc_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, size_t nb1, size_t nb2, size_t nb3, size_t offset, struct ggml_hash_set zero_table) {
+    if (ggml_hash_contains(zero_table, a)) {
+        struct ggml_tensor * a_zero = ggml_scale(ctx, a, 0.0f);
+        return ggml_acc_impl(ctx, a_zero, b, nb1, nb2, nb3, offset, false);
+    } else {
+        return ggml_acc_impl(ctx, a, b, nb1, nb2, nb3, offset, false);
+    }
+}
+
+static struct ggml_tensor * ggml_add1_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_hash_set zero_table) {
+    if (ggml_hash_contains(zero_table, a)) {
+        return ggml_repeat(ctx, b, a);
+    } else {
+        return ggml_add1_impl(ctx, a, b, false);
+    }
+}
+
+static struct ggml_tensor * ggml_sub_or_set(struct ggml_context * ctx, struct ggml_tensor * a, struct ggml_tensor * b, struct ggml_hash_set zero_table) {
+    if (ggml_hash_contains(zero_table, a)) {
+        return ggml_neg(ctx, b);
+    } else {
+        return ggml_sub_impl(ctx, a, b, false);
+    }
+}
+
+static void ggml_compute_backward(struct ggml_context * ctx, struct ggml_tensor * tensor, struct ggml_hash_set zero_table) {
+    struct ggml_tensor * src0 = tensor->src[0];
+    struct ggml_tensor * src1 = tensor->src[1];
+    struct ggml_tensor * src2 = tensor->src[2];
+
+    switch (tensor->op) {
+        case GGML_OP_DUP:
+            {
+                if (src0->grad) {
+                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
+                }
+            } break;
+        case GGML_OP_ADD:
+            {
+                if (src0->grad) {
+                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
+                }
+                if (src1->grad) {
+                    src1->grad = ggml_add_or_set(ctx, src1->grad, tensor->grad, zero_table);
+                }
+            } break;
+        case GGML_OP_ADD1:
+            {
+                if (src0->grad) {
+                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
+                }
+                if (src1->grad) {
+                    src1->grad = ggml_add_or_set(ctx,
+                        src1->grad,
+                        ggml_mean(ctx, tensor->grad), // TODO: should probably be sum instead of mean
+                        zero_table);
+                }
+            } break;
+        case GGML_OP_ACC:
+            {
+                if (src0->grad) {
+                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
+                }
+                if (src1->grad) {
+                    const size_t nb1     = ((int32_t *) tensor->op_params)[0];
+                    const size_t nb2     = ((int32_t *) tensor->op_params)[1];
+                    const size_t nb3     = ((int32_t *) tensor->op_params)[2];
+                    const size_t offset  = ((int32_t *) tensor->op_params)[3];
+
+                    struct ggml_tensor * tensor_grad_view = ggml_view_4d(ctx,
+                        tensor->grad,
+                        src1->grad->ne[0],
+                        src1->grad->ne[1],
+                        src1->grad->ne[2],
+                        src1->grad->ne[3],
+                        nb1, nb2, nb3, offset);
+
+                    src1->grad =
+                        ggml_add_or_set(ctx,
+                            src1->grad,
+                            ggml_reshape(ctx,
+                                ggml_cont(ctx, tensor_grad_view),
+                                src1->grad),
+                            zero_table);
+                }
+            } break;
+        case GGML_OP_SUB:
+            {
+                if (src0->grad) {
+                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
+                }
+                if (src1->grad) {
+                    src1->grad = ggml_sub_or_set(ctx, src1->grad, tensor->grad, zero_table);
+                }
+            } break;
+        case GGML_OP_MUL:
+            {
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add_or_set(ctx,
+                                src0->grad,
+                                ggml_mul(ctx, src1, tensor->grad),
+                                zero_table);
+                }
+                if (src1->grad) {
+                    src1->grad =
+                        ggml_add_or_set(ctx,
+                                src1->grad,
+                                ggml_mul(ctx, src0, tensor->grad),
+                                zero_table);
+                }
+            } break;
+        case GGML_OP_DIV:
+            {
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add_or_set(ctx,
+                                src0->grad,
+                                ggml_div(ctx, tensor->grad, src1),
+                                zero_table);
+                }
+                if (src1->grad) {
+                    src1->grad =
+                        ggml_sub_or_set(ctx,
+                                src1->grad,
+                                ggml_mul(ctx,
+                                    tensor->grad,
+                                    ggml_div(ctx, tensor, src1)),
+                                zero_table);
+                }
+            } break;
+        case GGML_OP_SQR:
+            {
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add_or_set(ctx,
+                                src0->grad,
+                                ggml_scale(ctx,
+                                    ggml_mul(ctx, src0, tensor->grad),
+                                    2.0f),
+                                zero_table);
+                }
+            } break;
+        case GGML_OP_SQRT:
+            {
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add_or_set(ctx,
+                                src0->grad,
+                                ggml_scale(ctx,
+                                    ggml_div(ctx,
+                                        tensor->grad,
+                                        tensor),
+                                    0.5f),
+                                zero_table);
+                }
+            } break;
+        case GGML_OP_LOG:
+            {
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add_or_set(ctx,
+                                src0->grad,
+                                ggml_div(ctx,
+                                    tensor->grad,
+                                    src0),
+                                zero_table);
+                }
+            } break;
+        case GGML_OP_SUM:
+            {
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add1_or_set(ctx,
+                                src0->grad,
+                                tensor->grad,
+                                zero_table);
+                }
+            } break;
+        case GGML_OP_SUM_ROWS:
+            {
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add_or_set(ctx,
+                                src0->grad,
+                                ggml_repeat(ctx,
+                                    tensor->grad,
+                                    src0->grad),
+                                zero_table);
+                }
+            } break;
+        case GGML_OP_MEAN:
+        case GGML_OP_ARGMAX:
+            {
+                GGML_ASSERT(false); // TODO: implement
+            } break;
+        case GGML_OP_REPEAT:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    src0->grad = ggml_add_or_set(ctx,
+                            src0->grad,
+                            ggml_repeat_back(ctx, tensor->grad, src0->grad),
+                            zero_table);
+                }
+            } break;
+        case GGML_OP_REPEAT_BACK:
+            {
+                if (src0->grad) {
+                    // TODO: test this
+                    src0->grad = ggml_add_or_set(ctx,
+                            src0->grad,
+                            ggml_repeat(ctx, tensor->grad, src0->grad),
+                            zero_table);
+                }
+            } break;
+        case GGML_OP_CONCAT:
+            {
+                GGML_ASSERT(false); // TODO: implement
+            } break;
+        case GGML_OP_SILU_BACK:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_NORM:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_RMS_NORM:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    float eps;
+                    memcpy(&eps, tensor->op_params, sizeof(float));
+
+                    src0->grad = ggml_add_or_set(ctx,
+                            src0->grad,
+                            ggml_rms_norm_back(ctx, src0, tensor->grad, eps),
+                            zero_table);
+                }
+            } break;
+        case GGML_OP_RMS_NORM_BACK:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_GROUP_NORM:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_MUL_MAT:
+            {
+                // https://cs231n.github.io/optimization-2/#staged
+                // # forward pass
+                // s0 = np.random.randn(5, 10)
+                // s1 = np.random.randn(10, 3)
+                // t = s0.dot(s1)
+
+                // # now suppose we had the gradient on t from above in the circuit
+                // dt = np.random.randn(*t.shape) # same shape as t
+                // ds0 = dt.dot(s1.T) #.T gives the transpose of the matrix
+                // ds1 = t.T.dot(dt)
+
+                // tensor.shape [m,p,qq,rr]
+                // src0.shape   [n,m,q1,r1]
+                // src1.shape   [n,p,qq,rr]
+
+                // necessary for llama
+                if (src0->grad) {
+                    struct ggml_tensor * s1_tg =
+                        ggml_out_prod(ctx, // [n,m,qq,rr]
+                            src1,          // [n,p,qq,rr]
+                            tensor->grad); // [m,p,qq,rr]
+                    const int64_t qq = s1_tg->ne[2];
+                    const int64_t rr = s1_tg->ne[3];
+                    const int64_t q1 = src0->ne[2];
+                    const int64_t r1 = src0->ne[3];
+                    const bool ne2_broadcasted = qq > q1;
+                    const bool ne3_broadcasted = rr > r1;
+                    if (ne2_broadcasted || ne3_broadcasted) {
+                        // sum broadcast repetitions of s1_tg into shape of src0
+                        s1_tg = ggml_repeat_back(ctx, s1_tg, src0);
+                    }
+                    src0->grad =
+                        ggml_add_or_set(ctx,
+                                src0->grad, // [n,m,q1,r1]
+                                s1_tg,      // [n,m,q1,r1]
+                                zero_table);
+                }
+                if (src1->grad) {
+                    src1->grad =
+                        ggml_add_or_set(ctx,
+                                src1->grad,                            // [n,p,qq,rr]
+                                // ggml_mul_mat(ctx,                   // [n,p,qq,rr]
+                                //     ggml_cont(ctx,                  // [m,n,q1,r1]
+                                //         ggml_transpose(ctx, src0)), // [m,n,q1,r1]
+                                //     tensor->grad),                  // [m,p,qq,rr]
+
+                                // // when src0 is bigger than tensor->grad (this is mostly the case in llama),
+                                // // avoid transpose of src0, rather transpose smaller tensor->grad
+                                // // and then use ggml_out_prod
+                                ggml_out_prod(ctx,                  // [n,p,qq,rr]
+                                    src0,                           // [n,m,q1,r1]
+                                    ggml_transpose(ctx,             // [p,m,qq,rr]
+                                        tensor->grad)),             // [m,p,qq,rr]
+                                zero_table);
+                }
+            } break;
+        case GGML_OP_MUL_MAT_ID:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_OUT_PROD:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_SCALE:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    float s;
+                    memcpy(&s, tensor->op_params, sizeof(float));
+
+                    src0->grad =
+                        ggml_add_or_set(ctx,
+                            src0->grad,
+                            ggml_scale_impl(ctx, tensor->grad, s, false),
+                            zero_table);
+                }
+            } break;
+        case GGML_OP_SET:
+            {
+                const size_t nb1     = ((int32_t *) tensor->op_params)[0];
+                const size_t nb2     = ((int32_t *) tensor->op_params)[1];
+                const size_t nb3     = ((int32_t *) tensor->op_params)[2];
+                const size_t offset  = ((int32_t *) tensor->op_params)[3];
+
+                struct ggml_tensor * tensor_grad_view = NULL;
+
+                if (src0->grad || src1->grad) {
+                    GGML_ASSERT(src0->type == tensor->type);
+                    GGML_ASSERT(tensor->grad->type == tensor->type);
+                    GGML_ASSERT(tensor->grad->type == src1->grad->type);
+
+                    tensor_grad_view = ggml_view_4d(ctx,
+                        tensor->grad,
+                        src1->grad->ne[0],
+                        src1->grad->ne[1],
+                        src1->grad->ne[2],
+                        src1->grad->ne[3],
+                        nb1, nb2, nb3, offset);
+                }
+
+                if (src0->grad) {
+                    src0->grad = ggml_add_or_set(ctx,
+                        src0->grad,
+                        ggml_acc_impl(ctx,
+                            tensor->grad,
+                            ggml_neg(ctx, tensor_grad_view),
+                            nb1, nb2, nb3, offset, false),
+                        zero_table);
+                }
+
+                if (src1->grad) {
+                    src1->grad =
+                        ggml_add_or_set(ctx,
+                            src1->grad,
+                            ggml_reshape(ctx,
+                                ggml_cont(ctx, tensor_grad_view),
+                                src1->grad),
+                            zero_table);
+                }
+            } break;
+        case GGML_OP_CPY:
+            {
+                // necessary for llama
+                // cpy overwrites value of src1 by src0 and returns view(src1)
+                // the overwriting is mathematically equivalent to:
+                // tensor = src0 * 1 + src1 * 0
+                if (src0->grad) {
+                    // dsrc0 = dtensor * 1
+                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
+                }
+                if (src1->grad) {
+                    // dsrc1 = dtensor * 0 -> noop
+                }
+            } break;
+        case GGML_OP_CONT:
+            {
+                // same as cpy
+                if (src0->grad) {
+                    GGML_ASSERT(ggml_is_contiguous(src0->grad));
+                    GGML_ASSERT(ggml_is_contiguous(tensor->grad));
+                    src0->grad = ggml_add_or_set(ctx, src0->grad, tensor->grad, zero_table);
+                }
+            } break;
+        case GGML_OP_RESHAPE:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add_or_set(ctx, src0->grad,
+                            ggml_reshape(ctx,
+                                ggml_is_contiguous(tensor->grad)
+                                    ? tensor->grad
+                                    : ggml_cont(ctx, tensor->grad),
+                                src0->grad),
+                        zero_table);
+                }
+            } break;
+        case GGML_OP_VIEW:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    size_t offset;
+
+                    memcpy(&offset, tensor->op_params, sizeof(offset));
+
+                    size_t nb1     = tensor->nb[1];
+                    size_t nb2     = tensor->nb[2];
+                    size_t nb3     = tensor->nb[3];
+
+                    if (src0->type != src0->grad->type) {
+                        // gradient is typically F32, but src0 could be other type
+                        size_t ng = ggml_element_size(src0->grad);
+                        size_t n0 = ggml_element_size(src0);
+                        GGML_ASSERT(offset % n0 == 0);
+                        GGML_ASSERT(nb1 % n0 == 0);
+                        GGML_ASSERT(nb2 % n0 == 0);
+                        GGML_ASSERT(nb3 % n0 == 0);
+                        offset = (offset / n0) * ng;
+                        nb1 = (nb1 / n0) * ng;
+                        nb2 = (nb2 / n0) * ng;
+                        nb3 = (nb3 / n0) * ng;
+                    }
+
+                    src0->grad = ggml_acc_or_set(ctx, src0->grad, tensor->grad, nb1, nb2, nb3, offset, zero_table);
+                }
+            } break;
+        case GGML_OP_PERMUTE:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    int32_t * axes = (int32_t *) tensor->op_params;
+                    int axis0 = axes[0] & 0x3;
+                    int axis1 = axes[1] & 0x3;
+                    int axis2 = axes[2] & 0x3;
+                    int axis3 = axes[3] & 0x3;
+                    int axes_backward[4] = {0,0,0,0};
+                    axes_backward[axis0] = 0;
+                    axes_backward[axis1] = 1;
+                    axes_backward[axis2] = 2;
+                    axes_backward[axis3] = 3;
+                    src0->grad =
+                        ggml_add_or_set(ctx, src0->grad,
+                            ggml_permute(ctx,
+                                tensor->grad,
+                                axes_backward[0],
+                                axes_backward[1],
+                                axes_backward[2],
+                                axes_backward[3]),
+                            zero_table);
+                }
+            } break;
+        case GGML_OP_TRANSPOSE:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add_or_set(ctx, src0->grad,
+                            ggml_transpose(ctx, tensor->grad),
+                        zero_table);
+                }
+            } break;
+        case GGML_OP_GET_ROWS:
+            {
+                // necessary for llama (only for tokenizer)
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add_or_set(ctx, src0->grad,
+                            // last ggml_get_rows_back argument src0->grad is only
+                            // necessary to setup correct output shape
+                            ggml_get_rows_back(ctx, tensor->grad, src1, src0->grad),
+                        zero_table);
+                }
+                if (src1->grad) {
+                    // noop
+                }
+            } break;
+        case GGML_OP_GET_ROWS_BACK:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_DIAG:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_DIAG_MASK_INF:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    const int n_past = ((int32_t *) tensor->op_params)[0];
+                    src0->grad =
+                        ggml_add_or_set(ctx, src0->grad,
+                            /* ggml_diag_mask_inf_impl() shouldn't be here */
+                            /* ref:  https://github.com/ggerganov/llama.cpp/pull/4203#discussion_r1412377992 */
+                            ggml_diag_mask_zero_impl(ctx, tensor->grad, n_past, false),
+                        zero_table);
+                }
+            } break;
+        case GGML_OP_DIAG_MASK_ZERO:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    const int n_past = ((int32_t *) tensor->op_params)[0];
+                    src0->grad =
+                        ggml_add_or_set(ctx, src0->grad,
+                            ggml_diag_mask_zero_impl(ctx, tensor->grad, n_past, false),
+                        zero_table);
+                }
+            } break;
+        case GGML_OP_SOFT_MAX:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    src0->grad =
+                        ggml_add_or_set(ctx, src0->grad,
+                            ggml_soft_max_back(ctx, tensor->grad, tensor),
+                        zero_table);
+                }
+
+            } break;
+        case GGML_OP_SOFT_MAX_BACK:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_ROPE:
+            {
+                // necessary for llama
+                if (src0->grad) {
+                    //const int n_past = ((int32_t *) tensor->op_params)[0];
+                    const int n_dims     = ((int32_t *) tensor->op_params)[1];
+                    const int mode       = ((int32_t *) tensor->op_params)[2];
+                    //const int n_ctx      = ((int32_t *) tensor->op_params)[3];
+                    const int n_ctx_orig = ((int32_t *) tensor->op_params)[4];
+                    float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
+
+                    memcpy(&freq_base,   (int32_t *) tensor->op_params +  5, sizeof(float));
+                    memcpy(&freq_scale,  (int32_t *) tensor->op_params +  6, sizeof(float));
+                    memcpy(&ext_factor,  (int32_t *) tensor->op_params +  7, sizeof(float));
+                    memcpy(&attn_factor, (int32_t *) tensor->op_params +  8, sizeof(float));
+                    memcpy(&beta_fast,   (int32_t *) tensor->op_params +  9, sizeof(float));
+                    memcpy(&beta_slow,   (int32_t *) tensor->op_params + 10, sizeof(float));
+
+                    src0->grad = ggml_add_or_set(ctx,
+                            src0->grad,
+                            ggml_rope_back(ctx,
+                                tensor->grad,
+                                src1,
+                                src2,
+                                n_dims,
+                                mode,
+                                n_ctx_orig,
+                                freq_base,
+                                freq_scale,
+                                ext_factor,
+                                attn_factor,
+                                beta_fast,
+                                beta_slow),
+                            zero_table);
+                }
+            } break;
+        case GGML_OP_ROPE_BACK:
+            {
+                if (src0->grad) {
+                    //const int n_past = ((int32_t *) tensor->op_params)[0];
+                    const int n_dims     = ((int32_t *) tensor->op_params)[1];
+                    const int mode       = ((int32_t *) tensor->op_params)[2];
+                    //const int n_ctx      = ((int32_t *) tensor->op_params)[3];
+                    const int n_ctx_orig = ((int32_t *) tensor->op_params)[4];
+                    float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow;
+
+                    memcpy(&freq_base,   (int32_t *) tensor->op_params +  5, sizeof(float));
+                    memcpy(&freq_scale,  (int32_t *) tensor->op_params +  6, sizeof(float));
+                    memcpy(&ext_factor,  (int32_t *) tensor->op_params +  7, sizeof(float));
+                    memcpy(&attn_factor, (int32_t *) tensor->op_params +  8, sizeof(float));
+                    memcpy(&beta_fast,   (int32_t *) tensor->op_params +  9, sizeof(float));
+                    memcpy(&beta_slow,   (int32_t *) tensor->op_params + 10, sizeof(float));
+
+                    src0->grad = ggml_add_or_set(ctx,
+                            src0->grad,
+                            ggml_rope_impl(ctx,
+                                tensor->grad,
+                                src1,
+                                src2,
+                                n_dims,
+                                mode,
+                                n_ctx_orig,
+                                freq_base,
+                                freq_scale,
+                                ext_factor,
+                                attn_factor,
+                                beta_fast,
+                                beta_slow,
+                                false),
+                            zero_table);
+                }
+            } break;
+        case GGML_OP_CLAMP:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_CONV_TRANSPOSE_1D:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_IM2COL:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_CONV_TRANSPOSE_2D:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_POOL_1D:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_POOL_2D:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_UPSCALE:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_PAD:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_ARANGE:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_TIMESTEP_EMBEDDING:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_ARGSORT:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_LEAKY_RELU:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_FLASH_ATTN_EXT:
+            {
+                struct ggml_tensor * flash_grad = NULL;
+                if (src0->grad || src1->grad || tensor->src[2]->grad) {
+                    int32_t t = ggml_get_op_params_i32(tensor, 0);
+                    GGML_ASSERT(t == 0 || t == 1);
+                    bool masked = t != 0;
+                    flash_grad =
+                        ggml_flash_attn_back(ctx,
+                            src0,
+                            src1,
+                            tensor->src[2],
+                            tensor->grad,
+                            masked);
+                }
+
+                const int64_t elem_q = ggml_nelements(src0);
+                const int64_t elem_k = ggml_nelements(src1);
+                const int64_t elem_v = ggml_nelements(src2);
+
+                enum ggml_type result_type = flash_grad->type;
+                GGML_ASSERT(ggml_blck_size(result_type) == 1);
+                const size_t tsize = ggml_type_size(result_type);
+
+                const size_t offs_q = 0;
+                const size_t offs_k = offs_q + GGML_PAD(elem_q * tsize, GGML_MEM_ALIGN);
+                const size_t offs_v = offs_k + GGML_PAD(elem_k * tsize, GGML_MEM_ALIGN);
+
+                if (src0->grad) {
+                    struct ggml_tensor * view_q = ggml_view_1d(ctx, flash_grad, elem_q, offs_q);
+                    struct ggml_tensor * grad_q = ggml_reshape(ctx, view_q, src0);
+                    src0->grad = ggml_add_or_set(ctx,
+                            src0->grad,
+                            grad_q,
+                            zero_table);
+                }
+                if (src1->grad) {
+                    struct ggml_tensor * view_k = ggml_view_1d(ctx, flash_grad, elem_k, offs_k);
+                    struct ggml_tensor * grad_k = ggml_reshape(ctx, view_k, src1);
+                    src1->grad = ggml_add_or_set(ctx,
+                            src1->grad,
+                            grad_k,
+                            zero_table);
+                }
+                if (src2->grad) {
+                    struct ggml_tensor * view_v = ggml_view_1d(ctx, flash_grad, elem_v, offs_v);
+                    struct ggml_tensor * grad_v = ggml_reshape(ctx, view_v, src2);
+                    src2->grad = ggml_add_or_set(ctx,
+                            src2->grad,
+                            grad_v,
+                            zero_table);
+                }
+            } break;
+        case GGML_OP_FLASH_ATTN_BACK:
+            {
+                GGML_ASSERT(false); // not supported
+            } break;
+        case GGML_OP_SSM_CONV:
+        case GGML_OP_SSM_SCAN:
+            {
+                GGML_ASSERT(false); // TODO: not implemented
+            } break;
+        case GGML_OP_WIN_PART:
+        case GGML_OP_WIN_UNPART:
+        case GGML_OP_UNARY:
+            {
+                switch (ggml_get_unary_op(tensor)) {
+                    case GGML_UNARY_OP_ABS:
+                        {
+                            if (src0->grad) {
+                                src0->grad =
+                                    ggml_add_or_set(ctx,
+                                            src0->grad,
+                                            ggml_mul(ctx,
+                                                ggml_sgn(ctx, src0),
+                                                tensor->grad),
+                                            zero_table);
+                            }
+                        } break;
+                    case GGML_UNARY_OP_SGN:
+                        {
+                            if (src0->grad) {
+                                // noop
+                            }
+                        } break;
+                    case GGML_UNARY_OP_NEG:
+                        {
+                            if (src0->grad) {
+                                src0->grad = ggml_sub_or_set(ctx, src0->grad, tensor->grad, zero_table);
+                            }
+                        } break;
+                    case GGML_UNARY_OP_STEP:
+                        {
+                            if (src0->grad) {
+                                // noop
+                            }
+                        } break;
+                    case GGML_UNARY_OP_TANH:
+                        {
+                            GGML_ASSERT(false); // TODO: not implemented
+                        } break;
+                    case GGML_UNARY_OP_ELU:
+                        {
+                            GGML_ASSERT(false); // TODO: not implemented
+                        } break;
+                    case GGML_UNARY_OP_RELU:
+                        {
+                            if (src0->grad) {
+                                src0->grad = ggml_add_or_set(ctx,
+                                        src0->grad,
+                                        ggml_mul(ctx,
+                                            ggml_step(ctx, src0),
+                                            tensor->grad),
+                                        zero_table);
+                            }
+                        } break;
+                    case GGML_UNARY_OP_SIGMOID:
+                        {
+                            GGML_ASSERT(false); // TODO: not implemented
+                        } break;
+                    case GGML_UNARY_OP_GELU:
+                        {
+                            GGML_ASSERT(false); // TODO: not implemented
+                        } break;
+                    case GGML_UNARY_OP_GELU_QUICK:
+                        {
+                            GGML_ASSERT(false); // TODO: not implemented
+                        } break;
+                    case GGML_UNARY_OP_SILU:
+                        {
+                            // necessary for llama
+                            if (src0->grad) {
+                                src0->grad = ggml_add_or_set(ctx,
+                                        src0->grad,
+                                        ggml_silu_back(ctx, src0, tensor->grad),
+                                        zero_table);
+                            }
+                        } break;
+                    default:
+                        GGML_ASSERT(false);
+                }
+            } break;
+        case GGML_OP_GET_REL_POS:
+        case GGML_OP_ADD_REL_POS:
+        case GGML_OP_MAP_UNARY:
+        case GGML_OP_MAP_BINARY:
+        case GGML_OP_MAP_CUSTOM1_F32:
+        case GGML_OP_MAP_CUSTOM2_F32:
+        case GGML_OP_MAP_CUSTOM3_F32:
+        case GGML_OP_MAP_CUSTOM1:
+        case GGML_OP_MAP_CUSTOM2:
+        case GGML_OP_MAP_CUSTOM3:
+            {
+                GGML_ASSERT(false); // not supported
+            } break;
+        case GGML_OP_CROSS_ENTROPY_LOSS:
+            {
+                if (src0->grad) {
+                    src0->grad = ggml_add_or_set(ctx,
+                                src0->grad,
+                                ggml_cross_entropy_loss_back(ctx,
+                                    src0,
+                                    src1,
+                                    tensor->grad),
+                                zero_table);
+                }
+            } break;
+        case GGML_OP_CROSS_ENTROPY_LOSS_BACK:
+            {
+                GGML_ASSERT(false); // not supported
+            } break;
+        case GGML_OP_NONE:
+            {
+                // nop
+            } break;
+        case GGML_OP_COUNT:
+            {
+                GGML_ASSERT(false);
+            } break;
+    }
+
+    for (int i = 0; i < GGML_MAX_SRC; ++i) {
+        if (tensor->src[i] && tensor->src[i]->grad) {
+            GGML_ASSERT(ggml_are_same_shape(tensor->src[i], tensor->src[i]->grad));
+        }
+    }
+}
+
+static void ggml_visit_parents(struct ggml_cgraph * cgraph, struct ggml_tensor * node) {
+    if (node->grad == NULL) {
+        // this usually happens when we generate intermediate nodes from constants in the backward pass
+        // it can also happen during forward pass, if the user performs computations with constants
+        if (node->op != GGML_OP_NONE) {
+            //GGML_PRINT_DEBUG("%s: warning: node %p has no grad, but op %d\n", __func__, (void *) node, node->op);
+        }
+    }
+
+    // check if already visited
+    if (ggml_hash_insert(cgraph->visited_hash_table, node) == GGML_HASHTABLE_ALREADY_EXISTS) {
+        return;
+    }
+
+    for (int i = 0; i < GGML_MAX_SRC; ++i) {
+        const int k =
+            (cgraph->order == GGML_CGRAPH_EVAL_ORDER_LEFT_TO_RIGHT) ? i :
+            (cgraph->order == GGML_CGRAPH_EVAL_ORDER_RIGHT_TO_LEFT) ? (GGML_MAX_SRC-1-i) :
+            /* unknown order, just fall back to using i*/ i;
+        if (node->src[k]) {
+            ggml_visit_parents(cgraph, node->src[k]);
+        }
+    }
+
+    if (node->op == GGML_OP_NONE && node->grad == NULL) {
+        // reached a leaf node, not part of the gradient graph (e.g. a constant)
+        GGML_ASSERT(cgraph->n_leafs < cgraph->size);
+
+        if (strlen(node->name) == 0) {
+            ggml_format_name(node, "leaf_%d", cgraph->n_leafs);
+        }
+
+        cgraph->leafs[cgraph->n_leafs] = node;
+        cgraph->n_leafs++;
+    } else {
+        GGML_ASSERT(cgraph->n_nodes < cgraph->size);
+
+        if (strlen(node->name) == 0) {
+            ggml_format_name(node, "node_%d", cgraph->n_nodes);
+        }
+
+        cgraph->nodes[cgraph->n_nodes] = node;
+        if (cgraph->grads) {
+            cgraph->grads[cgraph->n_nodes] = node->grad;
+        }
+        cgraph->n_nodes++;
+    }
+}
+
+static void ggml_build_forward_impl(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor, bool expand) {
+    if (!expand) {
+        // TODO: this branch isn't accessible anymore, maybe move this to ggml_build_forward_expand
+        ggml_graph_clear(cgraph);
+    }
+
+    const int n0 = cgraph->n_nodes;
+    UNUSED(n0);
+
+    ggml_visit_parents(cgraph, tensor);
+
+    const int n_new = cgraph->n_nodes - n0;
+    GGML_PRINT_DEBUG("%s: visited %d new nodes\n", __func__, n_new);
+
+    if (n_new > 0) {
+        // the last added node should always be starting point
+        GGML_ASSERT(cgraph->nodes[cgraph->n_nodes - 1] == tensor);
+    }
+}
+
+void ggml_build_forward_expand(struct ggml_cgraph * cgraph, struct ggml_tensor * tensor) {
+    ggml_build_forward_impl(cgraph, tensor, true);
+}
+
+void ggml_build_backward_expand(struct ggml_context * ctx, struct ggml_cgraph * gf, struct ggml_cgraph * gb, bool keep) {
+    GGML_ASSERT(gf->n_nodes > 0);
+
+    // if we are keeping the gradient graph, we have to detach the gradient nodes from the original graph
+    if (keep) {
+        for (int i = 0; i < gf->n_nodes; i++) {
+            struct ggml_tensor * node = gf->nodes[i];
+
+            if (node->grad) {
+                node->grad = ggml_dup_tensor(ctx, node);
+                gf->grads[i] = node->grad;
+            }
+        }
+    }
+
+    // remember original gradients which start with zero values
+    struct ggml_hash_set zero_table = ggml_hash_set_new(gf->size);
+    for (int i = 0; i < gf->n_nodes; i++) {
+        if (gf->grads[i]) {
+            ggml_hash_insert(zero_table, gf->grads[i]);
+        }
+    }
+
+    for (int i = gf->n_nodes - 1; i >= 0; i--) {
+        struct ggml_tensor * node = gf->nodes[i];
+
+        // inplace operations to add gradients are not created by ggml_compute_backward
+        // use allocator to automatically make inplace operations
+        if (node->grad) {
+            ggml_compute_backward(ctx, node, zero_table);
+        }
+    }
+
+    for (int i = 0; i < gf->n_nodes; i++) {
+        struct ggml_tensor * node = gf->nodes[i];
+
+        if (node->flags & GGML_TENSOR_FLAG_PARAM) {
+            GGML_PRINT_DEBUG("%s: found root node %p\n", __func__, (void *) node);
+            ggml_build_forward_expand(gb, node->grad);
+        }
+    }
+
+    ggml_hash_set_free(zero_table);
+}
+
+static size_t ggml_graph_nbytes(size_t size, bool grads) {
+    size_t nbytes = sizeof(struct ggml_cgraph);
+    nbytes += size * sizeof(struct ggml_tensor *) * 2; // leafs + nodes
+    if (grads) {
+        nbytes += size * sizeof(struct ggml_tensor *); // grads
+    }
+    nbytes += ggml_hash_size(size * 2) * sizeof(struct ggml_tensor *); // hash set
+    return nbytes;
+}
+
+size_t ggml_graph_overhead_custom(size_t size, bool grads) {
+    return GGML_OBJECT_SIZE + GGML_PAD(ggml_graph_nbytes(size, grads), GGML_MEM_ALIGN);
+}
+
+size_t ggml_graph_overhead(void) {
+    return ggml_graph_overhead_custom(GGML_DEFAULT_GRAPH_SIZE, false);
+}
+
+struct ggml_cgraph * ggml_new_graph_custom(struct ggml_context * ctx, size_t size, bool grads) {
+    const size_t obj_size = ggml_graph_nbytes(size, grads);
+    struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_GRAPH, obj_size);
+    struct ggml_cgraph * cgraph = (struct ggml_cgraph *) ((char *) ctx->mem_buffer + obj->offs);
+
+    struct ggml_tensor ** data_start = (struct ggml_tensor **) (cgraph + 1);
+
+    size_t hash_size = ggml_hash_size(size * 2);
+    struct ggml_tensor ** nodes_ptr = data_start;
+    struct ggml_tensor ** leafs_ptr = nodes_ptr + size;
+    struct ggml_tensor ** hash_keys_ptr = leafs_ptr + size;
+    struct ggml_tensor ** grads_ptr = grads ? hash_keys_ptr + hash_size : NULL;
+
+    // check that we allocated the correct amount of memory
+    assert(obj_size == (size_t) (
+        (grads ? (char *)(grads_ptr + size) : (char *)(hash_keys_ptr + hash_size)) - (char *)cgraph));
+
+    memset(hash_keys_ptr, 0, hash_size * sizeof(struct ggml_tensor *));
+
+    *cgraph = (struct ggml_cgraph) {
+        /*.size         =*/ size,
+        /*.n_nodes      =*/ 0,
+        /*.n_leafs      =*/ 0,
+        /*.nodes        =*/ nodes_ptr,
+        /*.grads        =*/ grads_ptr,
+        /*.leafs        =*/ leafs_ptr,
+        /*.hash_table   =*/ { hash_size, hash_keys_ptr },
+        /*.order        =*/ GGML_CGRAPH_EVAL_ORDER_LEFT_TO_RIGHT,
+    };
+
+    return cgraph;
+}
+
+struct ggml_cgraph * ggml_new_graph(struct ggml_context * ctx) {
+    return ggml_new_graph_custom(ctx, GGML_DEFAULT_GRAPH_SIZE, false);
+}
+
+struct ggml_cgraph ggml_graph_view(struct ggml_cgraph * cgraph0, int i0, int i1) {
+    struct ggml_cgraph cgraph = {
+        /*.size         =*/ 0,
+        /*.n_nodes      =*/ i1 - i0,
+        /*.n_leafs      =*/ 0,
+        /*.nodes        =*/ cgraph0->nodes + i0,
+        /*.grads        =*/ cgraph0->grads ? cgraph0->grads + i0 : NULL,
+        /*.leafs        =*/ NULL,
+        /*.hash_table   =*/ { 0, NULL },
+        /*.order        =*/ cgraph0->order,
+    };
+
+    return cgraph;
+}
+
+void ggml_graph_cpy(struct ggml_cgraph * src, struct ggml_cgraph * dst) {
+    GGML_ASSERT(dst->size >= src->n_leafs);
+    GGML_ASSERT(dst->size >= src->n_nodes);
+    GGML_ASSERT(dst->visited_hash_table.size >= src->visited_hash_table.size);
+
+    dst->n_leafs = src->n_leafs;
+    dst->n_nodes = src->n_nodes;
+    dst->order   = src->order;
+
+    for (int i = 0; i < src->n_leafs; ++i) {
+        dst->leafs[i] = src->leafs[i];
+    }
+
+    for (int i = 0; i < src->n_nodes; ++i) {
+        dst->nodes[i] = src->nodes[i];
+    }
+
+    if (src->grads) {
+        GGML_ASSERT(dst->grads != NULL);
+        for (int i = 0; i < src->n_nodes; ++i) {
+            dst->grads[i] = src->grads[i];
+        }
+    }
+
+    for (size_t i = 0; i < src->visited_hash_table.size; ++i) {
+        if (src->visited_hash_table.keys[i]) {
+            ggml_hash_insert(dst->visited_hash_table, src->visited_hash_table.keys[i]);
+        }
+    }
+}
+
+struct ggml_cgraph * ggml_graph_dup(struct ggml_context * ctx, struct ggml_cgraph * cgraph) {
+    struct ggml_cgraph * result = ggml_new_graph_custom(ctx, cgraph->size, cgraph->grads != NULL);
+    ggml_graph_cpy(cgraph, result);
+    return result;
+}
+
+void ggml_graph_reset(struct ggml_cgraph * cgraph) {
+    GGML_ASSERT(cgraph->grads != NULL);
+
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        struct ggml_tensor * grad = cgraph->grads[i];
+
+        if (grad) {
+            ggml_set_zero(grad);
+        }
+    }
+}
+
+void ggml_graph_clear(struct ggml_cgraph * cgraph) {
+    cgraph->n_leafs = 0;
+    cgraph->n_nodes = 0;
+    memset(cgraph->visited_hash_table.keys, 0, cgraph->visited_hash_table.size * sizeof(struct ggml_tensor *));
+}
+
+//
+// thread data
+//
+// synchronization is done via busy loops
+// I tried using spin locks, but not sure how to use them correctly - the things I tried were slower than busy loops
+//
+
+#ifdef __APPLE__
+
+//#include <os/lock.h>
+//
+//typedef os_unfair_lock ggml_lock_t;
+//
+//#define ggml_lock_init(x)    UNUSED(x)
+//#define ggml_lock_destroy(x) UNUSED(x)
+//#define ggml_lock_lock       os_unfair_lock_lock
+//#define ggml_lock_unlock     os_unfair_lock_unlock
+//
+//#define GGML_LOCK_INITIALIZER OS_UNFAIR_LOCK_INIT
+
+typedef int ggml_lock_t;
+
+#define ggml_lock_init(x)    UNUSED(x)
+#define ggml_lock_destroy(x) UNUSED(x)
+#define ggml_lock_lock(x)    UNUSED(x)
+#define ggml_lock_unlock(x)  UNUSED(x)
+
+#define GGML_LOCK_INITIALIZER 0
+
+#define ggml_thread_create pthread_create
+#define ggml_thread_join   pthread_join
+
+#else
+
+//typedef pthread_spinlock_t ggml_lock_t;
+
+//#define ggml_lock_init(x) pthread_spin_init(x, PTHREAD_PROCESS_PRIVATE)
+//#define ggml_lock_destroy pthread_spin_destroy
+//#define ggml_lock_lock    pthread_spin_lock
+//#define ggml_lock_unlock  pthread_spin_unlock
+
+typedef int ggml_lock_t;
+
+#define ggml_lock_init(x)    UNUSED(x)
+#define ggml_lock_destroy(x) UNUSED(x)
+#if defined(__x86_64__) || (defined(_MSC_VER) && defined(_M_AMD64))
+#define ggml_lock_lock(x)    _mm_pause()
+#else
+#define ggml_lock_lock(x)    UNUSED(x)
+#endif
+#define ggml_lock_unlock(x)  UNUSED(x)
+
+#define GGML_LOCK_INITIALIZER 0
+
+#define ggml_thread_create pthread_create
+#define ggml_thread_join   pthread_join
+
+#endif
+
+// Android's libc implementation "bionic" does not support setting affinity
+#if defined(__gnu_linux__)
+static void set_numa_thread_affinity(int thread_n) {
+    if (!ggml_is_numa()) {
+        return;
+    }
+
+    int node_num;
+    int rv;
+    size_t setsize = CPU_ALLOC_SIZE(g_state.numa.total_cpus);
+
+    switch(g_state.numa.numa_strategy) {
+        case GGML_NUMA_STRATEGY_DISTRIBUTE:
+            // run thread on node_num thread_n / (threads per node)
+            node_num = thread_n % g_state.numa.n_nodes;
+            break;
+        case GGML_NUMA_STRATEGY_ISOLATE:
+            // run thread on current_node
+            node_num = g_state.numa.current_node;
+            break;
+        case GGML_NUMA_STRATEGY_NUMACTL:
+            // use the cpuset that numactl gave us
+            rv = pthread_setaffinity_np(pthread_self(), setsize, &g_state.numa.cpuset);
+            if (rv) {
+                fprintf(stderr, "warning: pthread_setaffinity_np() failed: %s\n",strerror(rv));
+            }
+            return;
+        default:
+            return;
+    }
+
+    struct ggml_numa_node * node = &g_state.numa.nodes[node_num];
+
+    cpu_set_t * cpus = CPU_ALLOC(g_state.numa.total_cpus);
+    CPU_ZERO_S(setsize, cpus);
+    for (size_t i = 0; i < node->n_cpus; ++i) {
+        CPU_SET_S(node->cpus[i], setsize, cpus);
+    }
+
+    rv = pthread_setaffinity_np(pthread_self(), setsize, cpus);
+    if (rv) {
+            fprintf(stderr, "warning: pthread_setaffinity_np() failed: %s\n", strerror(rv));
+    }
+
+    CPU_FREE(cpus);
+}
+
+static void clear_numa_thread_affinity(void) {
+    if (!ggml_is_numa()) {
+        return;
+    }
+
+    size_t setsize = CPU_ALLOC_SIZE(g_state.numa.total_cpus);
+
+    cpu_set_t * cpus = CPU_ALLOC(g_state.numa.total_cpus);
+    CPU_ZERO_S(setsize, cpus);
+    for (unsigned i = 0; i < g_state.numa.total_cpus; ++i) {
+        CPU_SET_S(i, setsize, cpus);
+    }
+
+    int rv = pthread_setaffinity_np(pthread_self(), setsize, cpus);
+    if (rv) {
+        fprintf(stderr, "warning: pthread_setaffinity_np() failed: %s\n", strerror(rv));
+    }
+
+    CPU_FREE(cpus);
+}
+#else
+// TODO: Windows etc.
+// (the linux implementation may also work on BSD, someone should test)
+static void set_numa_thread_affinity(int thread_n) { UNUSED(thread_n);  }
+static void clear_numa_thread_affinity(void) {}
+#endif
+
+static int ggml_get_n_tasks(struct ggml_tensor * node, int n_threads) {
+    int n_tasks = 0;
+
+    if (ggml_is_empty(node)) {
+        // no need to multi-thread a no-op
+        n_tasks = 1;
+        return n_tasks;
+    }
+
+    switch (node->op) {
+        case GGML_OP_CPY:
+        case GGML_OP_DUP:
+        case GGML_OP_CONT:
+        case GGML_OP_ADD:
+        case GGML_OP_ADD1:
+        case GGML_OP_ACC:
+            {
+                n_tasks = n_threads;
+            } break;
+        case GGML_OP_SUB:
+        case GGML_OP_SQR:
+        case GGML_OP_SQRT:
+        case GGML_OP_LOG:
+        case GGML_OP_SUM:
+        case GGML_OP_SUM_ROWS:
+        case GGML_OP_MEAN:
+        case GGML_OP_ARGMAX:
+        case GGML_OP_REPEAT:
+        case GGML_OP_REPEAT_BACK:
+        case GGML_OP_LEAKY_RELU:
+            {
+                n_tasks = 1;
+            } break;
+        case GGML_OP_UNARY:
+            switch (ggml_get_unary_op(node)) {
+                case GGML_UNARY_OP_ABS:
+                case GGML_UNARY_OP_SGN:
+                case GGML_UNARY_OP_NEG:
+                case GGML_UNARY_OP_STEP:
+                case GGML_UNARY_OP_TANH:
+                case GGML_UNARY_OP_ELU:
+                case GGML_UNARY_OP_RELU:
+                case GGML_UNARY_OP_SIGMOID:
+                case GGML_UNARY_OP_HARDSWISH:
+                case GGML_UNARY_OP_HARDSIGMOID:
+                    {
+                        n_tasks = 1;
+                    } break;
+
+                case GGML_UNARY_OP_GELU:
+                case GGML_UNARY_OP_GELU_QUICK:
+                case GGML_UNARY_OP_SILU:
+                    {
+                        n_tasks = n_threads;
+                    } break;
+                default:
+                    GGML_ASSERT(false);
+            }
+            break;
+        case GGML_OP_SILU_BACK:
+        case GGML_OP_MUL:
+        case GGML_OP_DIV:
+        case GGML_OP_NORM:
+        case GGML_OP_RMS_NORM:
+        case GGML_OP_RMS_NORM_BACK:
+        case GGML_OP_GROUP_NORM:
+        case GGML_OP_CONCAT:
+        case GGML_OP_MUL_MAT:
+        case GGML_OP_MUL_MAT_ID:
+        case GGML_OP_OUT_PROD:
+            {
+                n_tasks = n_threads;
+            } break;
+        case GGML_OP_GET_ROWS:
+            {
+                // FIXME: get_rows can use additional threads, but the cost of launching additional threads
+                // decreases performance with GPU offloading
+                //n_tasks = n_threads;
+                n_tasks = 1;
+            } break;
+        case GGML_OP_SCALE:
+        case GGML_OP_SET:
+        case GGML_OP_RESHAPE:
+        case GGML_OP_VIEW:
+        case GGML_OP_PERMUTE:
+        case GGML_OP_TRANSPOSE:
+        case GGML_OP_GET_ROWS_BACK:
+        case GGML_OP_DIAG:
+            {
+                n_tasks = 1;
+            } break;
+        case GGML_OP_DIAG_MASK_ZERO:
+        case GGML_OP_DIAG_MASK_INF:
+        case GGML_OP_SOFT_MAX_BACK:
+        case GGML_OP_ROPE:
+        case GGML_OP_ROPE_BACK:
+        case GGML_OP_ADD_REL_POS:
+            {
+                n_tasks = n_threads;
+            } break;
+        case GGML_OP_CLAMP:
+            {
+                n_tasks = 1; //TODO
+            } break;
+        case GGML_OP_SOFT_MAX:
+            {
+                n_tasks = MIN(n_threads, ggml_nrows(node->src[0]));
+            } break;
+        case GGML_OP_IM2COL:
+        case GGML_OP_CONV_TRANSPOSE_1D:
+        case GGML_OP_CONV_TRANSPOSE_2D:
+            {
+                n_tasks = n_threads;
+            } break;
+        case GGML_OP_POOL_1D:
+        case GGML_OP_POOL_2D:
+            {
+                n_tasks = 1;
+            } break;
+        case GGML_OP_UPSCALE:
+        case GGML_OP_PAD:
+        case GGML_OP_ARANGE:
+        case GGML_OP_TIMESTEP_EMBEDDING:
+        case GGML_OP_ARGSORT:
+        case GGML_OP_FLASH_ATTN_EXT:
+        case GGML_OP_FLASH_ATTN_BACK:
+        case GGML_OP_SSM_CONV:
+        case GGML_OP_SSM_SCAN:
+            {
+                n_tasks = n_threads;
+            } break;
+        case GGML_OP_WIN_PART:
+        case GGML_OP_WIN_UNPART:
+        case GGML_OP_GET_REL_POS:
+        case GGML_OP_MAP_UNARY:
+        case GGML_OP_MAP_BINARY:
+        case GGML_OP_MAP_CUSTOM1_F32:
+        case GGML_OP_MAP_CUSTOM2_F32:
+        case GGML_OP_MAP_CUSTOM3_F32:
+            {
+                n_tasks = 1;
+            } break;
+        case GGML_OP_MAP_CUSTOM1:
+            {
+                struct ggml_map_custom1_op_params p;
+                memcpy(&p, node->op_params, sizeof(p));
+                if (p.n_tasks == GGML_N_TASKS_MAX) {
+                    n_tasks = n_threads;
+                } else {
+                    n_tasks = MIN(p.n_tasks, n_threads);
+                }
+            } break;
+        case GGML_OP_MAP_CUSTOM2:
+            {
+                struct ggml_map_custom2_op_params p;
+                memcpy(&p, node->op_params, sizeof(p));
+                if (p.n_tasks == GGML_N_TASKS_MAX) {
+                    n_tasks = n_threads;
+                } else {
+                    n_tasks = MIN(p.n_tasks, n_threads);
+                }
+            } break;
+        case GGML_OP_MAP_CUSTOM3:
+            {
+                struct ggml_map_custom3_op_params p;
+                memcpy(&p, node->op_params, sizeof(p));
+                if (p.n_tasks == GGML_N_TASKS_MAX) {
+                    n_tasks = n_threads;
+                } else {
+                    n_tasks = MIN(p.n_tasks, n_threads);
+                }
+            } break;
+        case GGML_OP_CROSS_ENTROPY_LOSS:
+        case GGML_OP_CROSS_ENTROPY_LOSS_BACK:
+            {
+                n_tasks = n_threads;
+            } break;
+        case GGML_OP_NONE:
+            {
+                n_tasks = 1;
+            } break;
+        case GGML_OP_COUNT:
+            {
+                GGML_ASSERT(false);
+            } break;
+        default:
+            {
+                fprintf(stderr, "%s: op not implemented: ", __func__);
+                if (node->op < GGML_OP_COUNT) {
+                    fprintf(stderr, "%s\n", ggml_op_name(node->op));
+                } else {
+                    fprintf(stderr, "%d\n", node->op);
+                }
+                GGML_ASSERT(false);
+            } break;
+    }
+
+    assert(n_tasks > 0);
+
+    return n_tasks;
+}
+
+struct ggml_cplan ggml_graph_plan(const struct ggml_cgraph * cgraph, int n_threads) {
+    if (n_threads <= 0) {
+        n_threads = GGML_DEFAULT_N_THREADS;
+    }
+
+    size_t work_size = 0;
+
+    struct ggml_cplan cplan;
+    memset(&cplan, 0, sizeof(struct ggml_cplan));
+
+    int max_tasks = 1;
+
+    // thread scheduling for the different operations + work buffer size estimation
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        struct ggml_tensor * node = cgraph->nodes[i];
+
+        const int n_tasks = ggml_get_n_tasks(node, n_threads);
+
+        max_tasks = MAX(max_tasks, n_tasks);
+
+        size_t cur = 0;
+
+        switch (node->op) {
+            case GGML_OP_CPY:
+            case GGML_OP_DUP:
+                {
+                    if (ggml_is_quantized(node->type) ||
+                        // F16 -> BF16 and BF16 -> F16 copies go through intermediate F32
+                        (node->src[0]->type == GGML_TYPE_F16  && node->src[1] && node->src[1]->type == GGML_TYPE_BF16) ||
+                        (node->src[0]->type == GGML_TYPE_BF16 && node->src[1] && node->src[1]->type == GGML_TYPE_F16)) {
+                        cur = ggml_type_size(GGML_TYPE_F32) * node->ne[0] * n_tasks;
+                    }
+                } break;
+            case GGML_OP_ADD:
+            case GGML_OP_ADD1:
+                {
+                    if (ggml_is_quantized(node->src[0]->type)) {
+                        cur = ggml_type_size(GGML_TYPE_F32) * node->src[0]->ne[0] * n_tasks;
+                    }
+                } break;
+            case GGML_OP_ACC:
+                {
+                    if (ggml_is_quantized(node->src[0]->type)) {
+                        cur = ggml_type_size(GGML_TYPE_F32) * node->src[1]->ne[0] * n_tasks;
+                    }
+                } break;
+            case GGML_OP_MUL_MAT:
+                {
+                    const enum ggml_type vec_dot_type = type_traits[node->src[0]->type].vec_dot_type;
+
+                    if (node->src[1]->type != vec_dot_type) {
+                        cur = ggml_row_size(vec_dot_type, ggml_nelements(node->src[1]));
+                    }
+                } break;
+            case GGML_OP_MUL_MAT_ID:
+                {
+                    cur = 0;
+                    const struct ggml_tensor * src0 = node->src[0];
+                    const struct ggml_tensor * src1 = node->src[1];
+                    const enum ggml_type vec_dot_type = type_traits[src0->type].vec_dot_type;
+                    if (src1->type != vec_dot_type) {
+                        cur += ggml_row_size(vec_dot_type, ggml_nelements(src1));
+                    }
+                    const int n_as = src0->ne[2];
+                    cur += GGML_PAD(cur, sizeof(int64_t));       // align
+                    cur += n_as * sizeof(int64_t);               // matrix_row_counts
+                    cur += n_as * src1->ne[2] * sizeof(int64_t); // matrix_rows
+                } break;
+            case GGML_OP_OUT_PROD:
+                {
+                    if (ggml_is_quantized(node->src[0]->type)) {
+                        cur = ggml_type_size(GGML_TYPE_F32) * node->src[0]->ne[0] * n_tasks;
+                    }
+                } break;
+            case GGML_OP_SOFT_MAX:
+            case GGML_OP_ROPE:
+                {
+                    cur = ggml_type_size(GGML_TYPE_F32) * node->ne[0] * n_tasks;
+                } break;
+            case GGML_OP_CONV_TRANSPOSE_1D:
+                {
+                    GGML_ASSERT(node->src[0]->ne[3] == 1);
+                    GGML_ASSERT(node->src[1]->ne[2] == 1);
+                    GGML_ASSERT(node->src[1]->ne[3] == 1);
+
+                    const int64_t ne00 = node->src[0]->ne[0];  // K
+                    const int64_t ne01 = node->src[0]->ne[1];  // Cout
+                    const int64_t ne02 = node->src[0]->ne[2];  // Cin
+
+                    const int64_t ne10 = node->src[1]->ne[0];  // L
+                    const int64_t ne11 = node->src[1]->ne[1];  // Cin
+
+                    if ((node->src[0]->type == GGML_TYPE_F16 ||
+                         node->src[0]->type == GGML_TYPE_BF16) &&
+                        node->src[1]->type == GGML_TYPE_F32) {
+                        cur += sizeof(ggml_fp16_t)*ne00*ne01*ne02;
+                        cur += sizeof(ggml_fp16_t)*ne10*ne11;
+                    } else if (node->src[0]->type == GGML_TYPE_F32 &&
+                               node->src[1]->type == GGML_TYPE_F32) {
+                        cur += sizeof(float)*ne00*ne01*ne02;
+                        cur += sizeof(float)*ne10*ne11;
+                    } else {
+                        GGML_ASSERT(false);
+                    }
+                } break;
+            case GGML_OP_CONV_TRANSPOSE_2D:
+                {
+                    const int64_t ne00 = node->src[0]->ne[0]; // W
+                    const int64_t ne01 = node->src[0]->ne[1]; // H
+                    const int64_t ne02 = node->src[0]->ne[2]; // Channels Out
+                    const int64_t ne03 = node->src[0]->ne[3]; // Channels In
+
+                    const int64_t ne10 = node->src[1]->ne[0]; // W
+                    const int64_t ne11 = node->src[1]->ne[1]; // H
+                    const int64_t ne12 = node->src[1]->ne[2]; // Channels In
+
+                    cur += sizeof(ggml_fp16_t)*ne00*ne01*ne02*ne03;
+                    cur += sizeof(ggml_fp16_t)*ne10*ne11*ne12;
+                } break;
+            case GGML_OP_FLASH_ATTN_EXT:
+                {
+                    const int64_t ne00 = node->src[0]->ne[0]; // D
+
+                    cur = 3*sizeof(float)*ne00*n_tasks; // 3x head size/thread
+                } break;
+            case GGML_OP_FLASH_ATTN_BACK:
+                {
+                    const int64_t    D = node->src[0]->ne[0];
+                    const int64_t ne11 = ggml_up(node->src[1]->ne[1], GGML_SOFT_MAX_UNROLL);
+                    const int64_t mxDn = MAX(D, ne11) * 2; // *2 because of S and SM in ggml_compute_forward_flash_attn_back
+                    if (node->src[1]->type == GGML_TYPE_F32) {
+                        cur  = sizeof(float)*mxDn*n_tasks; // TODO: this can become (n_tasks-1)
+                        cur += sizeof(float)*mxDn*n_tasks; // this is overestimated by x2
+                    } else if (node->src[1]->type == GGML_TYPE_F16) {
+                        cur  = sizeof(float)*mxDn*n_tasks; // TODO: this can become (n_tasks-1)
+                        cur += sizeof(float)*mxDn*n_tasks; // this is overestimated by x2
+                    } else if (node->src[1]->type == GGML_TYPE_BF16) {
+                        cur  = sizeof(float)*mxDn*n_tasks; // TODO: this can become (n_tasks-1)
+                        cur += sizeof(float)*mxDn*n_tasks; // this is overestimated by x2
+                    }
+                } break;
+
+            case GGML_OP_CROSS_ENTROPY_LOSS:
+                {
+                    cur = ggml_type_size(node->type)*(n_tasks + node->src[0]->ne[0]*n_tasks);
+                } break;
+            case GGML_OP_COUNT:
+                {
+                    GGML_ASSERT(false);
+                } break;
+            default:
+                break;
+        }
+
+        work_size = MAX(work_size, cur);
+    }
+
+    if (work_size > 0) {
+        work_size += CACHE_LINE_SIZE*(n_threads - 1);
+    }
+
+    cplan.n_threads = MIN(max_tasks, n_threads);
+    cplan.work_size = work_size;
+    cplan.work_data = NULL;
+
+    return cplan;
+}
+
+static thread_ret_t ggml_graph_compute_thread(void * data) {
+    struct ggml_compute_state * state = (struct ggml_compute_state *) data;
+
+    const struct ggml_cgraph * cgraph = state->shared->cgraph;
+    const struct ggml_cplan  * cplan  = state->shared->cplan;
+
+    set_numa_thread_affinity(state->ith);
+
+    struct ggml_compute_params params = {
+        /*.ith   =*/ state->ith,
+        /*.nth   =*/ state->shared->n_threads,
+        /*.wsize =*/ cplan->work_size,
+        /*.wdata =*/ cplan->work_data,
+        /*.shared=*/ state->shared,
+    };
+
+    for (int node_n = 0; node_n < cgraph->n_nodes; node_n++) {
+        struct ggml_tensor * node = cgraph->nodes[node_n];
+
+        ggml_compute_forward(&params, node);
+
+        if (state->ith == 0 && cplan->abort_callback && cplan->abort_callback(cplan->abort_callback_data)) {
+            state->shared->ec = GGML_STATUS_ABORTED;
+        }
+
+        ggml_barrier(state->shared);
+
+        if (state->shared->ec != GGML_STATUS_SUCCESS) {
+            break;
+        }
+    }
+
+    return 0;
+}
+
+enum ggml_status ggml_graph_compute(struct ggml_cgraph * cgraph, struct ggml_cplan * cplan) {
+    GGML_ASSERT(cplan);
+    GGML_ASSERT(cplan->n_threads > 0);
+    GGML_ASSERT(cplan->work_size == 0 || cplan->work_data != NULL);
+
+    int n_threads = cplan->n_threads;
+
+    struct ggml_compute_state_shared state_shared = {
+        /*.cgraph                  =*/ cgraph,
+        /*.cgraph_plan             =*/ cplan,
+        /*.n_threads               =*/ n_threads,
+        /*.n_barrier               =*/ 0,
+        /*.n_barrier_passed        =*/ 0,
+        /*.abort_callback          =*/ NULL,
+        /*.abort_callback_data     =*/ NULL,
+        /*.current_chunk           =*/ 0,
+        /*.ec                      =*/ GGML_STATUS_SUCCESS,
+    };
+
+#ifdef GGML_USE_OPENMP
+    if (n_threads > 1) {
+        #pragma omp parallel num_threads(n_threads)
+        {
+            #pragma omp single
+            {
+                // update the number of threads from the actual number of threads that we got from OpenMP
+                n_threads = omp_get_num_threads();
+                state_shared.n_threads = n_threads;
+            }
+
+            struct ggml_compute_state worker = {
+                .thrd   = 0,
+                .ith    = omp_get_thread_num(),
+                .shared = &state_shared,
+            };
+            ggml_graph_compute_thread(&worker);
+        }
+    } else {
+        struct ggml_compute_state worker = {
+            .thrd   = 0,
+            .ith    = 0,
+            .shared = &state_shared,
+        };
+        ggml_graph_compute_thread(&worker);
+    }
+#else
+    struct ggml_compute_state * workers = alloca(sizeof(struct ggml_compute_state)*n_threads);
+
+    for (int j = 0; j < n_threads; ++j) {
+        workers[j] = (struct ggml_compute_state) {
+            .thrd   = 0,
+            .ith    = j,
+            .shared = &state_shared,
+        };
+    }
+
+    // create thread pool
+    for (int j = 1; j < n_threads; ++j) {
+        const int rc = ggml_thread_create(&workers[j].thrd, NULL, ggml_graph_compute_thread, &workers[j]);
+        GGML_ASSERT(rc == 0);
+        UNUSED(rc);
+    }
+
+    // this is a work thread too
+    ggml_graph_compute_thread(&workers[0]);
+
+    // join or kill thread pool
+    if (n_threads > 1) {
+        for (int j = 1; j < n_threads; j++) {
+            const int rc = ggml_thread_join(workers[j].thrd, NULL);
+            GGML_ASSERT(rc == 0);
+            UNUSED(rc);
+        }
+    }
+#endif
+
+    // don't leave affinity set on the main thread
+    clear_numa_thread_affinity();
+
+    return state_shared.ec;
+}
+
+enum ggml_status ggml_graph_compute_with_ctx(struct ggml_context * ctx, struct ggml_cgraph * cgraph, int n_threads) {
+    struct ggml_cplan cplan = ggml_graph_plan(cgraph, n_threads);
+
+    struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_WORK_BUFFER, cplan.work_size);
+
+    cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs;
+
+    return ggml_graph_compute(cgraph, &cplan);
+}
+
+struct ggml_tensor * ggml_graph_get_tensor(struct ggml_cgraph * cgraph, const char * name) {
+    for (int i = 0; i < cgraph->n_leafs; i++) {
+        struct ggml_tensor * leaf = cgraph->leafs[i];
+
+        if (strcmp(leaf->name, name) == 0) {
+            return leaf;
+        }
+    }
+
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        struct ggml_tensor * node = cgraph->nodes[i];
+
+        if (strcmp(node->name, name) == 0) {
+            return node;
+        }
+    }
+
+    return NULL;
+}
+
+static void ggml_graph_export_leaf(const struct ggml_tensor * tensor, FILE * fout) {
+    const int64_t * ne = tensor->ne;
+    const size_t  * nb = tensor->nb;
+
+    fprintf(fout, "%-6s %-12s %8d %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %16zu %16zu %16zu %16zu %16p %32s\n",
+            ggml_type_name(tensor->type),
+            ggml_op_name  (tensor->op),
+            ggml_n_dims(tensor),
+            ne[0], ne[1], ne[2], ne[3],
+            nb[0], nb[1], nb[2], nb[3],
+            tensor->data,
+            tensor->name);
+}
+
+static void ggml_graph_export_node(const struct ggml_tensor * tensor, const char * arg, FILE * fout) {
+    const int64_t * ne = tensor->ne;
+    const size_t  * nb = tensor->nb;
+
+    fprintf(fout, "%-6s %-6s %-12s %8d %" PRId64 " %" PRId64 " %" PRId64 " %" PRId64 " %16zu %16zu %16zu %16zu %16p %32s\n",
+            arg,
+            ggml_type_name(tensor->type),
+            ggml_op_name  (tensor->op),
+            ggml_n_dims(tensor),
+            ne[0], ne[1], ne[2], ne[3],
+            nb[0], nb[1], nb[2], nb[3],
+            tensor->data,
+            tensor->name);
+}
+
+void ggml_graph_export(const struct ggml_cgraph * cgraph, const char * fname) {
+    uint64_t size_eval = 0;
+
+    // compute size of intermediate results
+    // TODO: does not take into account scratch buffers !!!!
+    for (int i = 0; i < cgraph->n_nodes; ++i) {
+        size_eval += ggml_nbytes_pad(cgraph->nodes[i]);
+    }
+
+    // print
+    {
+        FILE * fout = stdout;
+
+        fprintf(fout, "\n");
+        fprintf(fout, "%-16s %8x\n", "magic",        GGML_FILE_MAGIC);
+        fprintf(fout, "%-16s %8d\n", "version",      GGML_FILE_VERSION);
+        fprintf(fout, "%-16s %8d\n", "leafs",        cgraph->n_leafs);
+        fprintf(fout, "%-16s %8d\n", "nodes",        cgraph->n_nodes);
+        fprintf(fout, "%-16s %" PRIu64 "\n", "eval", size_eval);
+
+        // header
+        fprintf(fout, "\n");
+        fprintf(fout, "%-6s %-12s %8s %8s %8s %8s %8s %16s %16s %16s %16s %16s %16s\n",
+                "TYPE", "OP", "NDIMS", "NE0", "NE1", "NE2", "NE3", "NB0", "NB1", "NB2", "NB3", "DATA", "NAME");
+
+        for (int i = 0; i < cgraph->n_leafs; ++i) {
+            ggml_graph_export_leaf(cgraph->leafs[i], fout);
+
+            GGML_ASSERT(cgraph->leafs[i]->op   == GGML_OP_NONE);
+            GGML_ASSERT(cgraph->leafs[i]->src[0] == NULL);
+            GGML_ASSERT(cgraph->leafs[i]->src[1] == NULL);
+        }
+
+        // header
+        fprintf(fout, "\n");
+        fprintf(fout, "%-6s %-6s %-12s %8s %8s %8s %8s %8s %16s %16s %16s %16s %8s %16s %16s\n",
+                "ARG", "TYPE", "OP", "NDIMS", "NE0", "NE1", "NE2", "NE3", "NB0", "NB1", "NB2", "NB3", "NTASKS", "DATA", "NAME");
+
+        for (int i = 0; i < cgraph->n_nodes; ++i) {
+            ggml_graph_export_node(cgraph->nodes[i], "DST", fout);
+
+            for (int j = 0; j < GGML_MAX_SRC; ++j) {
+                if (cgraph->nodes[i]->src[j]) {
+                    ggml_graph_export_node(cgraph->nodes[i]->src[j], "SRC", fout);
+                }
+            }
+
+            fprintf(fout, "\n");
+        }
+
+        fprintf(fout, "\n");
+    }
+
+    // write binary data
+    {
+        FILE * fout = ggml_fopen(fname, "wb");
+
+        if (!fout) {
+            fprintf(stderr, "%s: failed to open %s\n", __func__, fname);
+            return;
+        }
+
+        // header
+        {
+            const uint32_t magic   = GGML_FILE_MAGIC;
+            const uint32_t version = GGML_FILE_VERSION;
+            const uint32_t n_leafs = cgraph->n_leafs;
+            const uint32_t n_nodes = cgraph->n_nodes;
+
+            fwrite(&magic,     sizeof(uint32_t), 1, fout);
+            fwrite(&version,   sizeof(uint32_t), 1, fout);
+            fwrite(&n_leafs,   sizeof(uint32_t), 1, fout);
+            fwrite(&n_nodes,   sizeof(uint32_t), 1, fout);
+            fwrite(&size_eval, sizeof(uint64_t), 1, fout);
+        }
+
+        // leafs
+        {
+            for (int i = 0; i < cgraph->n_leafs; ++i) {
+                const struct ggml_tensor * tensor = cgraph->leafs[i];
+
+                const uint32_t type   = tensor->type;
+                const uint32_t op     = tensor->op;
+
+                fwrite(&type,   sizeof(uint32_t), 1, fout);
+                fwrite(&op,     sizeof(uint32_t), 1, fout);
+
+                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
+                    const uint64_t ne = tensor->ne[j];
+                    const uint64_t nb = tensor->nb[j];
+
+                    fwrite(&ne, sizeof(uint64_t), 1, fout);
+                    fwrite(&nb, sizeof(uint64_t), 1, fout);
+                }
+
+                fwrite(tensor->name,      sizeof(char), GGML_MAX_NAME,      fout);
+                fwrite(tensor->op_params, sizeof(char), GGML_MAX_OP_PARAMS, fout);
+
+                // dump the data
+                // TODO: pad this to 32 byte boundary
+                {
+                    const size_t size = ggml_nbytes(tensor);
+
+                    fwrite(tensor->data, sizeof(char), size, fout);
+                }
+            }
+        }
+
+        // nodes
+        {
+            for (int i = 0; i < cgraph->n_nodes; ++i) {
+                const struct ggml_tensor * tensor = cgraph->nodes[i];
+
+                const uint32_t type   = tensor->type;
+                const uint32_t op     = tensor->op;
+
+                fwrite(&type,   sizeof(uint32_t), 1, fout);
+                fwrite(&op,     sizeof(uint32_t), 1, fout);
+
+                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
+                    const uint64_t ne = tensor->ne[j];
+                    const uint64_t nb = tensor->nb[j];
+
+                    fwrite(&ne, sizeof(uint64_t), 1, fout);
+                    fwrite(&nb, sizeof(uint64_t), 1, fout);
+                }
+
+                fwrite(tensor->name,      sizeof(char), GGML_MAX_NAME,      fout);
+                fwrite(tensor->op_params, sizeof(char), GGML_MAX_OP_PARAMS, fout);
+
+                // output the op arguments
+                {
+                    struct ggml_tensor * args[GGML_MAX_SRC] = { NULL };
+
+                    for (int j = 0; j < GGML_MAX_SRC; ++j) {
+                        args[j] = tensor->src[j];
+                    }
+
+                    for (int j = 0; j < GGML_MAX_SRC; ++j) {
+                        if (args[j]) {
+                            int32_t idx = -1;
+
+                            // check if leaf
+                            {
+                                for (int k = 0; k < cgraph->n_leafs; ++k) {
+                                    if (args[j] == cgraph->leafs[k]) {
+                                        idx = k;
+                                        break;
+                                    }
+                                }
+                            }
+
+                            // check if node
+                            if (idx == -1) {
+                                for (int k = 0; k < cgraph->n_nodes; ++k) {
+                                    if (args[j] == cgraph->nodes[k]) {
+                                        idx = cgraph->n_leafs + k;
+                                        break;
+                                    }
+                                }
+                            }
+
+                            if (idx == -1) {
+                                fprintf(stderr, "%s: failed to find tensor, arg = %d, node = %d\n", __func__, j, i);
+                                fclose(fout);
+                                return;
+                            }
+
+                            fwrite(&idx, sizeof(int32_t), 1, fout);
+                        } else {
+                            const int32_t nul = -1;
+
+                            fwrite(&nul, sizeof(int32_t), 1, fout);
+                        }
+                    }
+                }
+            }
+        }
+
+        fclose(fout);
+    }
+}
+
+struct ggml_cgraph * ggml_graph_import(const char * fname, struct ggml_context ** ctx_data, struct ggml_context ** ctx_eval) {
+    assert(*ctx_data == NULL);
+    assert(*ctx_eval == NULL);
+
+    struct ggml_cgraph * result = NULL;
+
+    struct ggml_tensor * data = NULL;
+
+    // read file into data
+    {
+        FILE * fin = ggml_fopen(fname, "rb");
+        if (!fin) {
+            fprintf(stderr, "%s: failed to open %s\n", __func__, fname);
+            return result;
+        }
+
+        size_t fsize = 0;
+
+        fseek(fin, 0, SEEK_END);
+        fsize = ftell(fin);
+        fseek(fin, 0, SEEK_SET);
+
+        // create the data context
+        {
+            const size_t overhead = 1*ggml_tensor_overhead();
+
+            struct ggml_init_params params = {
+                .mem_size   = fsize + overhead,
+                .mem_buffer = NULL,
+                .no_alloc   = false,
+            };
+
+            *ctx_data = ggml_init(params);
+
+            if (!*ctx_data) {
+                fprintf(stderr, "%s: failed to create ggml context\n", __func__);
+                fclose(fin);
+                return result;
+            }
+        }
+
+        data = ggml_new_tensor_1d(*ctx_data, GGML_TYPE_I8, fsize);
+
+        {
+            const size_t ret = fread(data->data, sizeof(char), fsize, fin);
+            if (ret != fsize) {
+                fprintf(stderr, "%s: failed to read %s\n", __func__, fname);
+                fclose(fin);
+                return result;
+            }
+        }
+
+        fclose(fin);
+    }
+
+    // populate result
+    {
+        char * ptr = (char *) data->data;
+
+        const uint32_t magic = *(const uint32_t *) ptr; ptr += sizeof(magic);
+
+        if (magic != GGML_FILE_MAGIC) {
+            fprintf(stderr, "%s: invalid magic number, got %08x\n", __func__, magic);
+            return result;
+        }
+
+        const uint32_t version = *(const uint32_t *) ptr; ptr += sizeof(version);
+
+        if (version != GGML_FILE_VERSION) {
+            fprintf(stderr, "%s: invalid version number\n", __func__);
+            return result;
+        }
+
+        const uint32_t n_leafs   = *(const uint32_t *) ptr; ptr += sizeof(n_leafs);
+        const uint32_t n_nodes   = *(const uint32_t *) ptr; ptr += sizeof(n_nodes);
+        const uint64_t size_eval = *(const uint64_t *) ptr; ptr += sizeof(size_eval);
+        const int     graph_size = MAX(n_leafs, n_nodes);
+
+        // create the data context
+        {
+            const size_t overhead = (n_leafs + n_nodes)*ggml_tensor_overhead() + ggml_graph_overhead_custom(graph_size, false);
+
+            struct ggml_init_params params = {
+                .mem_size   = size_eval + overhead,
+                .mem_buffer = NULL,
+                .no_alloc   = true,
+            };
+
+            *ctx_eval = ggml_init(params);
+
+            if (!*ctx_eval) {
+                fprintf(stderr, "%s: failed to create ggml context\n", __func__);
+                return result;
+            }
+        }
+
+        result = ggml_new_graph_custom(*ctx_eval, graph_size, false);
+
+        result->n_leafs = n_leafs;
+        result->n_nodes = n_nodes;
+
+
+        // leafs
+        {
+            uint32_t type;
+            uint32_t op;
+
+            for (uint32_t i = 0; i < n_leafs; ++i) {
+                type   = *(const uint32_t *) ptr; ptr += sizeof(type);
+                op     = *(const uint32_t *) ptr; ptr += sizeof(op);
+
+                int64_t ne[GGML_MAX_DIMS];
+                size_t  nb[GGML_MAX_DIMS];
+
+                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
+                    uint64_t ne_cur;
+                    uint64_t nb_cur;
+
+                    ne_cur = *(const uint64_t *) ptr; ptr += sizeof(ne_cur);
+                    nb_cur = *(const uint64_t *) ptr; ptr += sizeof(nb_cur);
+
+                    ne[j] = ne_cur;
+                    nb[j] = nb_cur;
+                }
+
+                struct ggml_tensor * tensor = ggml_new_tensor(*ctx_eval, (enum ggml_type) type, GGML_MAX_DIMS, ne);
+
+                tensor->op = (enum ggml_op) op;
+
+                memcpy(tensor->name,      ptr, GGML_MAX_NAME);      ptr += GGML_MAX_NAME;
+                memcpy(tensor->op_params, ptr, GGML_MAX_OP_PARAMS); ptr += GGML_MAX_OP_PARAMS;
+
+                tensor->data = (void *) ptr;
+
+                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
+                    tensor->nb[j] = nb[j];
+                }
+
+                result->leafs[i] = tensor;
+
+                ptr += ggml_nbytes(tensor);
+
+                fprintf(stderr, "%s: loaded leaf %u: '%16s', %9zu bytes\n", __func__, i, tensor->name, ggml_nbytes(tensor));
+            }
+        }
+
+        ggml_set_no_alloc(*ctx_eval, false);
+
+        // nodes
+        {
+            uint32_t type;
+            uint32_t op;
+
+            for (uint32_t i = 0; i < n_nodes; ++i) {
+                type   = *(const uint32_t *) ptr; ptr += sizeof(type);
+                op     = *(const uint32_t *) ptr; ptr += sizeof(op);
+
+                enum ggml_op eop = (enum ggml_op) op;
+
+                int64_t ne[GGML_MAX_DIMS];
+                size_t  nb[GGML_MAX_DIMS];
+
+                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
+                    uint64_t ne_cur;
+                    uint64_t nb_cur;
+
+                    ne_cur = *(const uint64_t *) ptr; ptr += sizeof(ne_cur);
+                    nb_cur = *(const uint64_t *) ptr; ptr += sizeof(nb_cur);
+
+                    ne[j] = ne_cur;
+                    nb[j] = nb_cur;
+                }
+
+                const char * ptr_name      = ptr; ptr += GGML_MAX_NAME;
+                const char * ptr_op_params = ptr; ptr += GGML_MAX_OP_PARAMS;
+
+                const int32_t * ptr_arg_idx = (const int32_t *) ptr; ptr += GGML_MAX_SRC*sizeof(int32_t);
+
+                struct ggml_tensor * args[GGML_MAX_SRC] = { NULL };
+
+                // parse args
+                for (int j = 0; j < GGML_MAX_SRC; ++j) {
+                    const int32_t arg_idx = ptr_arg_idx[j];
+
+                    if (arg_idx == -1) {
+                        continue;
+                    }
+
+                    if (arg_idx < result->n_leafs) {
+                        args[j] = result->leafs[arg_idx];
+                    } else {
+                        args[j] = result->nodes[arg_idx - result->n_leafs];
+                    }
+                }
+
+                // create the tensor
+                // "view" operations are handled differently
+                // TODO: handle inplace ops - currently a copy is always made
+
+                struct ggml_tensor * tensor = NULL;
+
+                switch (eop) {
+                    // TODO: implement other view ops
+                    case GGML_OP_RESHAPE:
+                        {
+                            tensor = ggml_reshape_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3]);
+                        } break;
+                    case GGML_OP_VIEW:
+                        {
+                            tensor = ggml_view_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3], 0, 0, 0, 0);
+
+                            size_t offs;
+                            memcpy(&offs, ptr_op_params, sizeof(offs));
+
+                            tensor->data = ((char *) tensor->data) + offs;
+                        } break;
+                    case GGML_OP_TRANSPOSE:
+                        {
+                            tensor = ggml_transpose(*ctx_eval, args[0]);
+                        } break;
+                    case GGML_OP_PERMUTE:
+                        {
+                            tensor = ggml_view_4d(*ctx_eval, args[0], ne[0], ne[1], ne[2], ne[3], 0, 0, 0, 0);
+                        } break;
+                    default:
+                        {
+                            tensor = ggml_new_tensor(*ctx_eval, (enum ggml_type) type, GGML_MAX_DIMS, ne);
+
+                            tensor->op = eop;
+                        } break;
+                }
+
+                memcpy(tensor->name,      ptr_name,      GGML_MAX_NAME);
+                memcpy(tensor->op_params, ptr_op_params, GGML_MAX_OP_PARAMS);
+
+                for (int j = 0; j < GGML_MAX_DIMS; ++j) {
+                    tensor->nb[j] = nb[j];
+                }
+
+                for (int j = 0; j < GGML_MAX_SRC; ++j) {
+                    tensor->src[j] = args[j];
+                }
+
+                result->nodes[i] = tensor;
+
+                fprintf(stderr, "%s: loaded node %u: '%16s', %9zu bytes\n", __func__, i, tensor->name, ggml_nbytes(tensor));
+            }
+        }
+    }
+
+    return result;
+}
+
+void ggml_graph_print(const struct ggml_cgraph * cgraph) {
+    GGML_PRINT("=== GRAPH ===\n");
+
+    GGML_PRINT("n_nodes = %d\n", cgraph->n_nodes);
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        struct ggml_tensor * node = cgraph->nodes[i];
+
+        GGML_PRINT(" - %3d: [ %5" PRId64 ", %5" PRId64 ", %5" PRId64 "] %16s %s\n",
+                i,
+                node->ne[0], node->ne[1], node->ne[2],
+                ggml_op_name(node->op), (node->flags & GGML_TENSOR_FLAG_PARAM) ? "x" : node->grad ? "g" : " ");
+    }
+
+    GGML_PRINT("n_leafs = %d\n", cgraph->n_leafs);
+    for (int i = 0; i < cgraph->n_leafs; i++) {
+        struct ggml_tensor * node = cgraph->leafs[i];
+
+        GGML_PRINT(" - %3d: [ %5" PRId64 ", %5" PRId64 "] %8s %16s\n",
+                i,
+                node->ne[0], node->ne[1],
+                ggml_op_name(node->op),
+                ggml_get_name(node));
+    }
+
+    GGML_PRINT("========================================\n");
+}
+
+// check if node is part of the graph
+static bool ggml_graph_find(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node) {
+    if (cgraph == NULL) {
+        return true;
+    }
+
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        if (cgraph->nodes[i] == node) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+static struct ggml_tensor * ggml_graph_get_parent(const struct ggml_cgraph * cgraph, const struct ggml_tensor * node) {
+    for (int i = 0; i < cgraph->n_nodes; i++) {
+        struct ggml_tensor * parent = cgraph->nodes[i];
+
+        if (parent->grad == node) {
+            return parent;
+        }
+    }
+
+    return NULL;
+}
+
+static void ggml_graph_dump_dot_node_edge(FILE * fp, const struct ggml_cgraph * gb, struct ggml_tensor * node, struct ggml_tensor * parent, const char * label)  {
+    struct ggml_tensor * gparent = ggml_graph_get_parent(gb, node);
+    struct ggml_tensor * gparent0 = ggml_graph_get_parent(gb, parent);
+    fprintf(fp, "  \"%p\":%s -> \"%p\":%s [ arrowhead = %s; style = %s; label = \"%s\"; ]\n",
+            gparent0 ? (void *) gparent0 : (void *) parent,
+            gparent0 ? "g" : "x",
+            gparent ? (void *) gparent : (void *) node,
+            gparent ? "g" : "x",
+            gparent ? "empty" : "vee",
+            gparent ? "dashed" : "solid",
+            label);
+}
+
+static void ggml_graph_dump_dot_leaf_edge(FILE * fp, struct ggml_tensor * node, struct ggml_tensor * parent, const char * label)  {
+    fprintf(fp, "  \"%p\":%s -> \"%p\":%s [ label = \"%s\"; ]\n",
+            (void *) parent, "x",
+            (void *) node, "x",
+            label);
+}
+
+void ggml_graph_dump_dot(const struct ggml_cgraph * gb, const struct ggml_cgraph * gf, const char * filename) {
+    char color[16];
+
+    FILE * fp = ggml_fopen(filename, "w");
+    GGML_ASSERT(fp);
+
+    fprintf(fp, "digraph G {\n");
+    fprintf(fp, "  newrank = true;\n");
+    fprintf(fp, "  rankdir = LR;\n");
+
+    for (int i = 0; i < gb->n_nodes; i++) {
+        struct ggml_tensor * node = gb->nodes[i];
+
+        if (ggml_graph_get_parent(gb, node) != NULL) {
+            continue;
+        }
+
+        if (node->flags & GGML_TENSOR_FLAG_PARAM) {
+            snprintf(color, sizeof(color), "yellow");
+        } else if (node->grad) {
+            if (ggml_graph_find(gf, node)) {
+                snprintf(color, sizeof(color), "green");
+            } else {
+                snprintf(color, sizeof(color), "lightblue");
+            }
+        } else {
+            snprintf(color, sizeof(color), "white");
+        }
+
+        fprintf(fp, "  \"%p\" [ "
+                    "style = filled; fillcolor = %s; shape = record; "
+                    "label=\"",
+                (void *) node, color);
+
+        if (strlen(node->name) > 0) {
+            fprintf(fp, "%s (%s)|", node->name, ggml_type_name(node->type));
+        } else {
+            fprintf(fp, "(%s)|", ggml_type_name(node->type));
+        }
+
+        if (ggml_is_matrix(node)) {
+            fprintf(fp, "%d [%" PRId64 ", %" PRId64 "] | <x>%s", i, node->ne[0], node->ne[1], ggml_op_symbol(node->op));
+        } else {
+            fprintf(fp, "%d [%" PRId64 ", %" PRId64 ", %" PRId64 "] | <x>%s", i, node->ne[0], node->ne[1], node->ne[2], ggml_op_symbol(node->op));
+        }
+
+        if (node->grad) {
+            fprintf(fp, " | <g>%s\"; ]\n", ggml_op_symbol(node->grad->op));
+        } else {
+            fprintf(fp, "\"; ]\n");
+        }
+    }
+
+    for (int i = 0; i < gb->n_leafs; i++) {
+        struct ggml_tensor * node = gb->leafs[i];
+
+        snprintf(color, sizeof(color), "pink");
+
+        fprintf(fp, "  \"%p\" [ "
+                    "style = filled; fillcolor = %s; shape = record; "
+                    "label=\"<x>",
+                (void *) node, color);
+
+        if (strlen(node->name) > 0) {
+            fprintf(fp, "%s (%s)|", node->name, ggml_type_name(node->type));
+        } else {
+            fprintf(fp, "(%s)|", ggml_type_name(node->type));
+        }
+
+        fprintf(fp, "CONST %d [%" PRId64 ", %" PRId64 "]", i, node->ne[0], node->ne[1]);
+        if (ggml_nelements(node) < 5) {
+            fprintf(fp, " | (");
+            for (int j = 0; j < ggml_nelements(node); j++) {
+                if (node->type == GGML_TYPE_I8 || node->type == GGML_TYPE_I16 || node->type == GGML_TYPE_I32) {
+                    fprintf(fp, "%d", ggml_get_i32_1d(node, j));
+                }
+                else if (node->type == GGML_TYPE_F32 ||
+                         node->type == GGML_TYPE_F16 ||
+                         node->type == GGML_TYPE_BF16) {
+                    fprintf(fp, "%.1e", (double)ggml_get_f32_1d(node, j));
+                }
+                else {
+                    fprintf(fp, "#");
+                }
+                if (j < ggml_nelements(node) - 1) {
+                    fprintf(fp, ", ");
+                }
+            }
+            fprintf(fp, ")");
+        }
+        fprintf(fp, "\"; ]\n");
+    }
+
+    for (int i = 0; i < gb->n_nodes; i++) {
+        struct ggml_tensor * node = gb->nodes[i];
+
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            if (node->src[j]) {
+                char label[16];
+                snprintf(label, sizeof(label), "src %d", j);
+                ggml_graph_dump_dot_node_edge(fp, gb, node, node->src[j], label);
+            }
+        }
+    }
+
+    for (int i = 0; i < gb->n_leafs; i++) {
+        struct ggml_tensor * node = gb->leafs[i];
+
+        for (int j = 0; j < GGML_MAX_SRC; j++) {
+            if (node->src[j]) {
+                char label[16];
+                snprintf(label, sizeof(label), "src %d", j);
+                ggml_graph_dump_dot_leaf_edge(fp, node, node->src[j], label);
+            }
+        }
+    }
+
+    fprintf(fp, "}\n");
+
+    fclose(fp);
+
+    GGML_PRINT("%s: dot -Tpng %s -o %s.png && open %s.png\n", __func__, filename, filename, filename);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+static void ggml_opt_set_params(int np, struct ggml_tensor * const ps[], const float * x) {
+    int i = 0;
+    for (int p = 0; p < np; ++p) {
+        const int64_t ne = ggml_nelements(ps[p]) ;
+        // TODO: add function to set tensor from array
+        for (int64_t j = 0; j < ne; ++j) {
+            ggml_set_f32_1d(ps[p], j, x[i++]);
+        }
+    }
+}
+
+static void ggml_opt_get_params(int np, struct ggml_tensor * const ps[], float * x) {
+    int i = 0;
+    for (int p = 0; p < np; ++p) {
+        const int64_t ne = ggml_nelements(ps[p]) ;
+        // TODO: add function to get all elements at once
+        for (int64_t j = 0; j < ne; ++j) {
+            x[i++] = ggml_get_f32_1d(ps[p], j);
+        }
+    }
+}
+
+static void ggml_opt_get_grad(int np, struct ggml_tensor * const ps[], float * g) {
+    int64_t i = 0;
+    for (int p = 0; p < np; ++p) {
+        const int64_t ne = ggml_nelements(ps[p]) ;
+        // TODO: add function to get all elements at once
+        for (int64_t j = 0; j < ne; ++j) {
+            g[i++] = ggml_get_f32_1d(ps[p]->grad, j);
+        }
+    }
+}
+
+static void ggml_opt_acc_grad(int np, struct ggml_tensor * const ps[], float * g, float scale) {
+    int64_t i = 0;
+    for (int p = 0; p < np; ++p) {
+        const int64_t ne = ggml_nelements(ps[p]) ;
+        // TODO: add function to get all elements at once
+        for (int64_t j = 0; j < ne; ++j) {
+            g[i++] += ggml_get_f32_1d(ps[p]->grad, j) * scale;
+        }
+    }
+}
+
+//
+// Using AdamW - ref: https://arxiv.org/pdf/1711.05101v3.pdf
+//
+// (Original Adam - ref: https://arxiv.org/pdf/1412.6980.pdf)
+//
+
+static enum ggml_opt_result ggml_opt_adam(
+        struct ggml_context * ctx,
+        struct ggml_opt_context * opt,
+        struct ggml_opt_params params,
+        struct ggml_tensor * f,
+        struct ggml_cgraph * gf,
+        struct ggml_cgraph * gb,
+        ggml_opt_callback callback,
+        void * callback_data) {
+    GGML_ASSERT(ggml_is_scalar(f));
+
+    // these will store the parameters we want to optimize
+    struct ggml_tensor * ps[GGML_MAX_PARAMS];
+
+    int np = 0;
+    int64_t nx = 0;
+    for (int i = 0; i < gf->n_nodes; ++i) {
+        if (gf->nodes[i]->flags & GGML_TENSOR_FLAG_PARAM) {
+            GGML_PRINT_DEBUG("found param %d: grad->op = %d\n", np, gf->nodes[i]->grad->op);
+
+            GGML_ASSERT(np < GGML_MAX_PARAMS);
+
+            ps[np++] = gf->nodes[i];
+            nx += ggml_nelements(gf->nodes[i]);
+        }
+    }
+
+    if ((opt->params.type != params.type) || (opt->nx != nx) || (opt->params.past != params.past)) {
+        int iter = opt->iter;
+        ggml_opt_init(opt->ctx, opt, params, nx);
+        opt->iter = iter;
+    }
+
+    // constants
+    float sched = params.adam.sched;
+    const float alpha = params.adam.alpha;
+    const float decay = params.adam.decay * alpha;
+    const float beta1 = params.adam.beta1;
+    const float beta2 = params.adam.beta2;
+    const float eps   = params.adam.eps;
+    const float gclip = params.adam.gclip;
+    const int decay_min_ndim = params.adam.decay_min_ndim;
+    const int n_accum = MAX(1, params.n_gradient_accumulation);
+    const float accum_norm = 1.0f / (float) n_accum;
+
+    float * g  = opt->adam.g->data;  // gradients
+    float * m  = opt->adam.m->data;  // first moment
+    float * v  = opt->adam.v->data;  // second moment
+
+    float * pf = params.past > 0 ? opt->adam.pf->data : NULL; // past function values
+
+    struct ggml_cplan cplan = ggml_graph_plan(gb, params.n_threads);
+    struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_WORK_BUFFER, cplan.work_size);
+    cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs;
+
+    bool cancel = false;
+
+    // compute the function value
+    float fx = 0;
+    ggml_set_zero(opt->adam.g);
+    for (int accum_step = 0; accum_step < n_accum; ++accum_step) {
+        if (callback) {
+            callback(callback_data, accum_step, &sched, &cancel);
+            if (cancel) {
+                return GGML_OPT_RESULT_CANCEL;
+            }
+        }
+        // ggml_graph_reset  (gf);
+        ggml_set_f32      (f->grad, 1.0f);
+        ggml_graph_compute(gb, &cplan);
+        ggml_opt_acc_grad(np, ps, g, accum_norm);
+        fx += ggml_get_f32_1d(f, 0);
+    }
+    fx *= accum_norm;
+
+    opt->adam.fx_prev = fx;
+    opt->adam.fx_best = opt->adam.fx_prev;
+    if (pf) {
+        pf[opt->iter % params.past] = opt->adam.fx_prev;
+    }
+
+    opt->loss_before = opt->adam.fx_prev;
+    opt->loss_after  = opt->adam.fx_prev;
+
+    // initialize
+    if (opt->just_initialized) {
+        opt->adam.n_no_improvement = 0;
+        opt->just_initialized = false;
+    }
+
+    float * fx_best = &opt->adam.fx_best;
+    float * fx_prev = &opt->adam.fx_prev;
+    int * n_no_improvement = &opt->adam.n_no_improvement;
+
+    int iter0 = opt->iter;
+
+    // run the optimizer
+    for (int t = 0; t < params.adam.n_iter; ++t) {
+        opt->iter = iter0 + t + 1;
+        GGML_PRINT_DEBUG  ("=== iter %d ===\n", t);
+
+        GGML_PRINT_DEBUG  ("f      = %10.6f\n", ggml_get_f32_1d(f, 0));
+        GGML_PRINT_DEBUG_5("df/dx0 = %10.6f\n", ggml_get_f32_1d(ps[0]->grad, 0));
+        GGML_PRINT_DEBUG_5("df/dx1 = %10.6f\n", ggml_get_f32_1d(ps[1]->grad, 0));
+
+        for (int i = 0; i < np; ++i) {
+            GGML_PRINT_DEBUG("param %d: %10.6f, g = %10.6f\n", i,
+                    ggml_get_f32_1d(ps[i], 0), ggml_get_f32_1d(ps[i]->grad, 0));
+        }
+
+        const int64_t t_start_wall = ggml_time_us();
+        const int64_t t_start_cpu = ggml_cycles();
+        UNUSED(t_start_wall);
+        UNUSED(t_start_cpu);
+
+        {
+            float gnorm = 1.0f;
+            if (gclip > 0.0f) {
+                // gradient clipping
+                ggml_float sum = 0.0;
+                for (int64_t i = 0; i < nx; ++i) {
+                    sum += (ggml_float)(g[i]*g[i]);
+                }
+                ggml_float norm = sqrt(sum);
+                if (norm > (ggml_float) gclip) {
+                    gnorm = (float) ((ggml_float) gclip / norm);
+                }
+            }
+            const float beta1h = alpha*sched/(1.0f - powf(beta1, opt->iter));
+            const float beta2h =        1.0f/(1.0f - powf(beta2, opt->iter));
+            int64_t i = 0;
+            for (int p = 0; p < np; ++p) {
+                const int64_t ne = ggml_nelements(ps[p]);
+                const float p_decay = ((ggml_n_dims(ps[p]) >= decay_min_ndim) ? decay : 0.0f) * sched;
+                for (int64_t j = 0; j < ne; ++j) {
+                    float x  = ggml_get_f32_1d(ps[p], j);
+                    float g_ = g[i]*gnorm;
+                    m[i] = m[i]*beta1 +    g_*(1.0f - beta1);
+                    v[i] = v[i]*beta2 + g_*g_*(1.0f - beta2);
+                    float mh = m[i]*beta1h;
+                    float vh = v[i]*beta2h;
+                    vh = sqrtf(vh) + eps;
+                    x  = x*(1.0f - p_decay) - mh/vh;
+                    ggml_set_f32_1d(ps[p], j, x);
+                    ++i;
+                }
+            }
+        }
+
+        fx = 0;
+        ggml_set_zero(opt->adam.g);
+        for (int accum_step = 0; accum_step < n_accum; ++accum_step) {
+            if (callback) {
+                callback(callback_data, accum_step, &sched, &cancel);
+                if (cancel) {
+                    return GGML_OPT_RESULT_CANCEL;;
+                }
+            }
+            // ggml_graph_reset  (gf);
+            ggml_set_f32      (f->grad, 1.0f);
+            ggml_graph_compute(gb, &cplan);
+            ggml_opt_acc_grad(np, ps, g, accum_norm);
+            fx += ggml_get_f32_1d(f, 0);
+        }
+        fx *= accum_norm;
+
+        opt->loss_after = fx;
+
+        // check convergence
+        if (fabsf(fx - fx_prev[0])/fx < params.adam.eps_f) {
+            GGML_PRINT_DEBUG("converged\n");
+
+            return GGML_OPT_RESULT_OK;
+        }
+
+        // delta-based convergence test
+        if (pf != NULL) {
+            // need at least params.past iterations to start checking for convergence
+            if (params.past <= iter0 + t) {
+                const float rate = (pf[(iter0 + t)%params.past] - fx)/fx;
+
+                if (fabsf(rate) < params.delta) {
+                    return GGML_OPT_RESULT_OK;
+                }
+            }
+
+            pf[(iter0 + t)%params.past] = fx;
+        }
+
+        // check for improvement
+        if (params.max_no_improvement > 0) {
+            if (fx_best[0] > fx) {
+                fx_best[0] = fx;
+                n_no_improvement[0] = 0;
+            } else {
+                ++n_no_improvement[0];
+
+                if (n_no_improvement[0] >= params.max_no_improvement) {
+                    return GGML_OPT_RESULT_OK;
+                }
+            }
+        }
+
+        fx_prev[0] = fx;
+
+        {
+            const int64_t t_end_cpu = ggml_cycles();
+            GGML_PRINT_DEBUG("time iter:      %5.3f s\n", ((float)(t_end_cpu - t_start_cpu))/CLOCKS_PER_SEC);
+            UNUSED(t_end_cpu);
+
+            const int64_t t_end_wall = ggml_time_us();
+            GGML_PRINT_DEBUG("wall time iter: %5.3f s\n", (t_end_wall - t_start_wall)/1e6);
+            UNUSED(t_end_wall);
+        }
+    }
+
+    return GGML_OPT_RESULT_DID_NOT_CONVERGE;
+}
+
+//
+// L-BFGS
+//
+// the L-BFGS implementation below is based on the following implementation:
+//
+//   https://github.com/chokkan/liblbfgs
+//
+
+struct ggml_lbfgs_iteration_data {
+    float alpha;
+    float ys;
+    float * s;
+    float * y;
+};
+
+static enum ggml_opt_result linesearch_backtracking(
+        const struct ggml_opt_params * params,
+        int nx,
+        float * x,
+        float * fx,
+        float * g,
+        float * d,
+        float * step,
+        const float * xp,
+        struct ggml_tensor * f,
+        struct ggml_cgraph * gb,
+        struct ggml_cplan  * cplan,
+        const int np,
+        struct ggml_tensor * ps[],
+        bool * cancel,
+        ggml_opt_callback callback,
+        void * callback_data) {
+    int count = 0;
+
+    float width  = 0.0f;
+    float dg     = 0.0f;
+    float finit  = 0.0f;
+    float dginit = 0.0f;
+    float dgtest = 0.0f;
+
+    const float dec = 0.5f;
+    const float inc = 2.1f;
+
+    const int n_accum = MAX(1, params->n_gradient_accumulation);
+    const float accum_norm = 1.0f / (float) n_accum;
+
+    if (*step <= 0.f) {
+        return GGML_LINESEARCH_INVALID_PARAMETERS;
+    }
+
+    // compute the initial gradient in the search direction
+    ggml_vec_dot_f32(nx, &dginit, 0, g, 0, d, 0, 1);
+
+    // make sure that d points to a descent direction
+    if (0 < dginit) {
+        return GGML_LINESEARCH_FAIL;
+    }
+
+    // initialize local variables
+    finit = *fx;
+    dgtest = params->lbfgs.ftol*dginit;
+
+    while (true) {
+        ggml_vec_cpy_f32(nx, x, xp);
+        ggml_vec_mad_f32(nx, x, d, *step);
+
+        // evaluate the function and gradient values
+        {
+            ggml_opt_set_params(np, ps, x);
+
+            *fx = 0;
+            memset(g, 0, sizeof(float)*nx);
+            for (int accum_step = 0; accum_step < n_accum; ++accum_step) {
+                if (callback) {
+                    // LBFG-S does not support learning rate -> ignore learning schedule
+                    float sched = 0;
+                    callback(callback_data, accum_step, &sched, cancel);
+                    if (*cancel) {
+                        return GGML_OPT_RESULT_CANCEL;
+                    }
+                }
+                // ggml_graph_reset  (gf);
+                ggml_set_f32      (f->grad, 1.0f);
+                ggml_graph_compute(gb, cplan);
+                ggml_opt_acc_grad(np, ps, g, accum_norm);
+                *fx += ggml_get_f32_1d(f, 0);
+            }
+            *fx *= accum_norm;
+
+        }
+
+        ++count;
+
+        if (*fx > finit + (*step)*dgtest) {
+            width = dec;
+        } else {
+            // Armijo condition is satisfied
+            if (params->lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_ARMIJO) {
+                return count;
+            }
+
+            ggml_vec_dot_f32(nx, &dg, 0, g, 0, d, 0, 1);
+
+            // check the Wolfe condition
+            if (dg < params->lbfgs.wolfe * dginit) {
+                width = inc;
+            } else {
+                if(params->lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_WOLFE) {
+                    // regular Wolfe conditions
+                    return count;
+                }
+
+                if(dg > -params->lbfgs.wolfe*dginit) {
+                    width = dec;
+                } else {
+                    // strong Wolfe condition (GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE)
+                    return count;
+                }
+            }
+        }
+
+        if (*step < params->lbfgs.min_step) {
+            return GGML_LINESEARCH_MINIMUM_STEP;
+        }
+        if (*step > params->lbfgs.max_step) {
+            return GGML_LINESEARCH_MAXIMUM_STEP;
+        }
+        if (params->lbfgs.max_linesearch <= count) {
+            return GGML_LINESEARCH_MAXIMUM_ITERATIONS;
+        }
+
+        (*step) *= width;
+    }
+
+    GGML_ASSERT(false && "line search failed");
+
+    return GGML_LINESEARCH_FAIL;
+}
+
+static enum ggml_opt_result ggml_opt_lbfgs(
+        struct ggml_context * ctx,
+        struct ggml_opt_context * opt,
+        struct ggml_opt_params params,
+        struct ggml_tensor * f,
+        struct ggml_cgraph * gf,
+        struct ggml_cgraph * gb,
+        ggml_opt_callback callback,
+        void * callback_data) {
+    if (params.lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_WOLFE ||
+        params.lbfgs.linesearch == GGML_LINESEARCH_BACKTRACKING_STRONG_WOLFE) {
+        if (params.lbfgs.wolfe <= params.lbfgs.ftol || 1.f <= params.lbfgs.wolfe) {
+            return GGML_OPT_RESULT_INVALID_WOLFE;
+        }
+    }
+
+    const int m = params.lbfgs.m;
+
+    // these will store the parameters we want to optimize
+    struct ggml_tensor * ps[GGML_MAX_PARAMS];
+
+    int np = 0;
+    int nx = 0;
+    for (int i = 0; i < gf->n_nodes; ++i) {
+        if (gf->nodes[i]->flags & GGML_TENSOR_FLAG_PARAM) {
+            GGML_PRINT_DEBUG("found param %d: grad->op = %d\n", np, gf->nodes[i]->grad->op);
+
+            GGML_ASSERT(np < GGML_MAX_PARAMS);
+
+            ps[np++] = gf->nodes[i];
+            nx += ggml_nelements(gf->nodes[i]);
+        }
+    }
+
+    if ((opt->params.type != params.type) || (opt->nx != nx) || (opt->params.past != params.past) || (opt->params.lbfgs.m != params.lbfgs.m)) {
+        int iter = opt->iter;
+        ggml_opt_init(ctx, opt, params, nx);
+        opt->iter = iter;
+    }
+
+    struct ggml_cplan cplan = ggml_graph_plan(gb, params.n_threads);
+    struct ggml_object * obj = ggml_new_object(ctx, GGML_OBJECT_TYPE_WORK_BUFFER, cplan.work_size);
+    cplan.work_data = (uint8_t *)ctx->mem_buffer + obj->offs;
+
+    float * x  = opt->lbfgs.x->data;  // current parameters
+    float * xp = opt->lbfgs.xp->data; // previous parameters
+    float * g  = opt->lbfgs.g->data;  // current gradient
+    float * gp = opt->lbfgs.gp->data; // previous gradient
+    float * d  = opt->lbfgs.d->data;  // search direction
+
+    float * pf = params.past > 0 ? opt->lbfgs.pf->data : NULL; // past function values
+
+    const int n_accum = MAX(1, params.n_gradient_accumulation);
+    const float accum_norm = 1.0f / (float) n_accum;
+
+    float fx    = 0.0f; // cost function value
+    float xnorm = 0.0f; // ||x||
+    float gnorm = 0.0f; // ||g||
+
+    // initialize x from the graph nodes
+    ggml_opt_get_params(np, ps, x);
+
+    // the L-BFGS memory
+    float * lm_alpha = opt->lbfgs.lmal->data;
+    float * lm_ys    = opt->lbfgs.lmys->data;
+    float * lm_s     = opt->lbfgs.lms->data;
+    float * lm_y     = opt->lbfgs.lmy->data;
+
+    bool cancel = false;
+
+    // evaluate the function value and its gradient
+    {
+        ggml_opt_set_params(np, ps, x);
+
+        fx = 0;
+        memset(g, 0, sizeof(float)*nx);
+        for (int accum_step = 0; accum_step < n_accum; ++accum_step) {
+            if (callback) {
+                // LBFG-S does not support learning rate -> ignore learning schedule
+                float sched = 0;
+                callback(callback_data, accum_step, &sched, &cancel);
+                if (cancel) {
+                    return GGML_OPT_RESULT_CANCEL;
+                }
+            }
+            // ggml_graph_reset  (gf);
+            ggml_set_f32      (f->grad, 1.0f);
+            ggml_graph_compute(gb, &cplan);
+            ggml_opt_acc_grad(np, ps, g, accum_norm);
+            fx += ggml_get_f32_1d(f, 0);
+        }
+        fx *= accum_norm;
+
+        opt->loss_before = fx;
+        opt->loss_after  = fx;
+    }
+
+    // search direction = -gradient
+    ggml_vec_neg_f32(nx, d, g);
+
+    // ||x||, ||g||
+    ggml_vec_norm_f32(nx, &xnorm, x);
+    ggml_vec_norm_f32(nx, &gnorm, g);
+
+    if (xnorm < 1.0f) {
+        xnorm = 1.0f;
+    }
+
+    // already optimized
+    if (gnorm/xnorm <= params.lbfgs.eps) {
+        return GGML_OPT_RESULT_OK;
+    }
+
+    if (opt->just_initialized) {
+        if (pf) {
+            pf[0] = fx;
+        }
+        opt->lbfgs.fx_best = fx;
+
+        // initial step
+        ggml_vec_norm_inv_f32(nx, &opt->lbfgs.step, d);
+        opt->lbfgs.j                = 0;
+        opt->lbfgs.k                = 1;
+        opt->lbfgs.end              = 0;
+        opt->lbfgs.n_no_improvement = 0;
+        opt->just_initialized       = false;
+    }
+
+    float * fx_best        = &opt->lbfgs.fx_best;
+    float * step           = &opt->lbfgs.step;
+    int * j                = &opt->lbfgs.j;
+    int * k                = &opt->lbfgs.k;
+    int * end              = &opt->lbfgs.end;
+    int * n_no_improvement = &opt->lbfgs.n_no_improvement;
+
+    int ls     = 0;
+    int bound  = 0;
+
+    float ys   = 0.0f;
+    float yy   = 0.0f;
+    float beta = 0.0f;
+
+    int it = 0;
+
+    while (true) {
+        // store the current position and gradient vectors
+        ggml_vec_cpy_f32(nx, xp, x);
+        ggml_vec_cpy_f32(nx, gp, g);
+
+        // TODO: instead of passing &cancel here, use the return code of the linesearch
+        //       to determine if the optimization should be cancelled
+        //       this is a simple change, but not doing this atm, since I don't have a nice
+        //       way to test and don't want to break something with so many changes lined up
+        ls = linesearch_backtracking(&params, nx, x, &fx, g, d, step, xp, f, gb, &cplan, np, ps, &cancel, callback, callback_data);
+        if (cancel) {
+            return GGML_OPT_RESULT_CANCEL;
+        }
+
+        if (ls < 0) {
+            // linesearch failed - go back to the previous point and return
+            ggml_vec_cpy_f32(nx, x, xp);
+            ggml_vec_cpy_f32(nx, g, gp);
+
+            return ls;
+        }
+
+        opt->loss_after = fx;
+
+        ggml_vec_norm_f32(nx, &xnorm, x);
+        ggml_vec_norm_f32(nx, &gnorm, g);
+
+        GGML_PRINT_DEBUG("f = %10.6f\n", ggml_get_f32_1d(f, 0));
+
+        if (xnorm < 1.0f) {
+            xnorm = 1.0f;
+        }
+        if (gnorm/xnorm <= params.lbfgs.eps) {
+            // converged
+            return GGML_OPT_RESULT_OK;
+        }
+
+        // delta-based convergence test
+        if (pf != NULL) {
+            // need at least params.past iterations to start checking for convergence
+            if (params.past <= k[0]) {
+                const float rate = (pf[k[0]%params.past] - fx)/fx;
+
+                if (fabsf(rate) < params.delta) {
+                    return GGML_OPT_RESULT_OK;
+                }
+            }
+
+            pf[k[0]%params.past] = fx;
+        }
+
+        // check for improvement
+        if (params.max_no_improvement > 0) {
+            if (fx < fx_best[0]) {
+                fx_best[0] = fx;
+                n_no_improvement[0] = 0;
+            } else {
+                n_no_improvement[0]++;
+
+                if (n_no_improvement[0] >= params.max_no_improvement) {
+                    return GGML_OPT_RESULT_OK;
+                }
+            }
+        }
+
+        if (params.lbfgs.n_iter != 0 && params.lbfgs.n_iter < it + 1) {
+            // reached the maximum number of iterations
+            return GGML_OPT_RESULT_DID_NOT_CONVERGE;
+        }
+
+        // update vectors s and y:
+        //   s_{k+1} = x_{k+1} - x_{k} = \step * d_{k}.
+        //   y_{k+1} = g_{k+1} - g_{k}.
+        //
+        ggml_vec_sub_f32(nx, &lm_s[end[0]*nx], x, xp);
+        ggml_vec_sub_f32(nx, &lm_y[end[0]*nx], g, gp);
+
+        // compute scalars ys and yy:
+        //     ys = y^t \cdot s    -> 1 / \rho.
+        //     yy = y^t \cdot y.
+        //
+        ggml_vec_dot_f32(nx, &ys, 0, &lm_y[end[0]*nx], 0, &lm_s[end[0]*nx], 0, 1);
+        ggml_vec_dot_f32(nx, &yy, 0, &lm_y[end[0]*nx], 0, &lm_y[end[0]*nx], 0, 1);
+
+        lm_ys[end[0]] = ys;
+
+        // find new search direction
+        //   ref: https://en.wikipedia.org/wiki/Limited-memory_BFGS
+
+        bound = (m <= k[0]) ? m : k[0];
+        k[0]++;
+        it++;
+        end[0] = (end[0] + 1)%m;
+
+        // initialize search direction with -g
+        ggml_vec_neg_f32(nx, d, g);
+
+        j[0] = end[0];
+        for (int i = 0; i < bound; ++i) {
+            j[0] = (j[0] + m - 1) % m;
+            // \alpha_{j} = \rho_{j} s^{t}_{j} \cdot q_{k+1}
+            ggml_vec_dot_f32(nx, &lm_alpha[j[0]], 0, &lm_s[j[0]*nx], 0, d, 0, 1);
+            lm_alpha[j[0]] /= lm_ys[j[0]];
+            // q_{i} = q_{i+1} - \alpha_{i} y_{i}
+            ggml_vec_mad_f32(nx, d, &lm_y[j[0]*nx], -lm_alpha[j[0]]);
+        }
+
+        ggml_vec_scale_f32(nx, d, ys/yy);
+
+        for (int i = 0; i < bound; ++i) {
+            // \beta_{j} = \rho_{j} y^t_{j} \cdot \gamma_{i}
+            ggml_vec_dot_f32(nx, &beta, 0, &lm_y[j[0]*nx], 0, d, 0, 1);
+            beta /= lm_ys[j[0]];
+            // \gamma_{i+1} = \gamma_{i} + (\alpha_{j} - \beta_{j}) s_{j}
+            ggml_vec_mad_f32(nx, d, &lm_s[j[0]*nx], lm_alpha[j[0]] - beta);
+            j[0] = (j[0] + 1)%m;
+        }
+
+        step[0] = 1.0;
+    }
+
+    GGML_ASSERT(false && "lbfgs failed");
+
+    return GGML_OPT_RESULT_DID_NOT_CONVERGE;
+}
+
+struct ggml_opt_params ggml_opt_default_params(enum ggml_opt_type type) {
+    struct ggml_opt_params result;
+
+    switch (type) {
+        case GGML_OPT_TYPE_ADAM:
+            {
+                result = (struct ggml_opt_params) {
+                    .type       = GGML_OPT_TYPE_ADAM,
+                    .graph_size = GGML_DEFAULT_GRAPH_SIZE,
+                    .n_threads  = 1, // FIXME: GGML_DEFAULT_N_THREADS ?
+                    .past       = 0,
+                    .delta      = 1e-5f,
+
+                    .max_no_improvement = 100,
+
+                    .print_forward_graph  = true,
+                    .print_backward_graph = true,
+
+                    .n_gradient_accumulation = 1,
+
+                    .adam = {
+                        .n_iter = 10000,
+                        .sched  = 1.000f,
+                        .decay  = 0.0f,
+                        .decay_min_ndim = 2,
+                        .alpha  = 0.001f,
+                        .beta1  = 0.9f,
+                        .beta2  = 0.999f,
+                        .eps    = 1e-8f,
+                        .eps_f  = 1e-5f,
+                        .eps_g  = 1e-3f,
+                        .gclip  = 0.0f,
+                    },
+                };
+            } break;
+        case GGML_OPT_TYPE_LBFGS:
+            {
+                result = (struct ggml_opt_params) {
+                    .type       = GGML_OPT_TYPE_LBFGS,
+                    .graph_size = GGML_DEFAULT_GRAPH_SIZE,
+                    .n_threads  = 1,
+                    .past       = 0,
+                    .delta      = 1e-5f,
+
+                    .max_no_improvement = 0,
+
+                    .print_forward_graph  = true,
+                    .print_backward_graph = true,
+
+                    .n_gradient_accumulation = 1,
+
+                    .lbfgs = {
+                        .m              = 6,
+                        .n_iter         = 100,
+                        .max_linesearch = 20,
+
+                        .eps      = 1e-5f,
+                        .ftol     = 1e-4f,
+                        .wolfe    = 0.9f,
+                        .min_step = 1e-20f,
+                        .max_step = 1e+20f,
+
+                        .linesearch = GGML_LINESEARCH_DEFAULT,
+                    },
+                };
+            } break;
+    }
+
+    return result;
+}
+
+GGML_API void ggml_opt_init(
+        struct ggml_context * ctx,
+        struct ggml_opt_context * opt,
+        struct ggml_opt_params params,
+        int64_t nx) {
+    opt->ctx = ctx;
+    opt->params = params;
+    opt->iter = 0;
+    opt->nx = nx;
+    opt->just_initialized = true;
+    if (opt->ctx == NULL) {
+        struct ggml_init_params ctx_opt_params;
+        if (opt->params.type == GGML_OPT_TYPE_ADAM) {
+            ctx_opt_params.mem_size = GGML_MEM_ALIGN*3 + ggml_tensor_overhead()*3 + ggml_type_size(GGML_TYPE_F32)*nx*3;
+            if (opt->params.past > 0) {
+                ctx_opt_params.mem_size += GGML_MEM_ALIGN + ggml_tensor_overhead() + ggml_type_size(GGML_TYPE_F32)*opt->params.past;
+            }
+        } else if (opt->params.type == GGML_OPT_TYPE_LBFGS) {
+            ctx_opt_params.mem_size = GGML_MEM_ALIGN*9 + ggml_tensor_overhead()*9 + ggml_type_size(GGML_TYPE_F32)*(nx*5 + opt->params.lbfgs.m*2 + nx*opt->params.lbfgs.m*2);
+            if (opt->params.past > 0) {
+                ctx_opt_params.mem_size += GGML_MEM_ALIGN + ggml_tensor_overhead() + ggml_type_size(GGML_TYPE_F32)*opt->params.past;
+            }
+        }
+        ctx_opt_params.mem_buffer = NULL;
+        ctx_opt_params.no_alloc   = false;
+
+        opt->ctx = ggml_init(ctx_opt_params);
+    }
+    switch (opt->params.type) {
+        case GGML_OPT_TYPE_ADAM:
+            {
+                opt->adam.g  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
+                opt->adam.m  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
+                opt->adam.v  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
+                opt->adam.pf = params.past > 0
+                    ? ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.past)
+                    : NULL;
+                ggml_set_zero(opt->adam.m);
+                ggml_set_zero(opt->adam.v);
+                if (opt->adam.pf) {
+                    ggml_set_zero(opt->adam.pf);
+                }
+            } break;
+        case GGML_OPT_TYPE_LBFGS:
+            {
+                opt->lbfgs.x  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
+                opt->lbfgs.xp = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
+                opt->lbfgs.g  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
+                opt->lbfgs.gp = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
+                opt->lbfgs.d  = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, nx);
+                opt->lbfgs.pf = params.past > 0
+                    ? ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.past)
+                    : NULL;
+                opt->lbfgs.lmal = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.lbfgs.m);
+                opt->lbfgs.lmys = ggml_new_tensor_1d(opt->ctx, GGML_TYPE_F32, params.lbfgs.m);
+                opt->lbfgs.lms  = ggml_new_tensor_2d(opt->ctx, GGML_TYPE_F32, nx, params.lbfgs.m);
+                opt->lbfgs.lmy  = ggml_new_tensor_2d(opt->ctx, GGML_TYPE_F32, nx, params.lbfgs.m);
+                ggml_set_zero(opt->lbfgs.x);
+                ggml_set_zero(opt->lbfgs.xp);
+                ggml_set_zero(opt->lbfgs.g);
+                ggml_set_zero(opt->lbfgs.gp);
+                ggml_set_zero(opt->lbfgs.d);
+                if (opt->lbfgs.pf) {
+                    ggml_set_zero(opt->lbfgs.pf);
+                }
+                ggml_set_zero(opt->lbfgs.lmal);
+                ggml_set_zero(opt->lbfgs.lmys);
+                ggml_set_zero(opt->lbfgs.lms);
+                ggml_set_zero(opt->lbfgs.lmy);
+            } break;
+    }
+}
+
+enum ggml_opt_result ggml_opt(
+        struct ggml_context * ctx,
+        struct ggml_opt_params params,
+        struct ggml_tensor * f) {
+    bool free_ctx = false;
+    if (ctx == NULL) {
+        struct ggml_init_params params_ctx = {
+            .mem_size   = 16*1024*1024,
+            .mem_buffer = NULL,
+            .no_alloc   = false,
+        };
+
+        ctx = ggml_init(params_ctx);
+        if (ctx == NULL) {
+            return GGML_OPT_RESULT_NO_CONTEXT;
+        }
+
+        free_ctx = true;
+    }
+
+    enum ggml_opt_result result = GGML_OPT_RESULT_OK;
+
+    struct ggml_opt_context * opt = (struct ggml_opt_context *) alloca(sizeof(struct ggml_opt_context));
+
+    ggml_opt_init(ctx, opt, params, 0);
+    result = ggml_opt_resume(ctx, opt, f);
+
+    if (free_ctx) {
+        ggml_free(ctx);
+    }
+
+    return result;
+}
+
+enum ggml_opt_result ggml_opt_resume(
+        struct ggml_context * ctx,
+        struct ggml_opt_context * opt,
+        struct ggml_tensor * f) {
+
+    // build forward + backward compute graphs
+    struct ggml_cgraph * gf = ggml_new_graph_custom(ctx, opt->params.graph_size, true);
+    ggml_build_forward_expand(gf, f);
+
+    struct ggml_cgraph * gb = ggml_graph_dup(ctx, gf);
+    ggml_build_backward_expand(ctx, gf, gb, true);
+
+    return ggml_opt_resume_g(ctx, opt, f, gf, gb, NULL, NULL);
+}
+
+enum ggml_opt_result ggml_opt_resume_g(
+        struct ggml_context * ctx,
+        struct ggml_opt_context * opt,
+        struct ggml_tensor * f,
+        struct ggml_cgraph * gf,
+        struct ggml_cgraph * gb,
+        ggml_opt_callback callback,
+        void * callback_data) {
+
+    // build forward + backward compute graphs
+    enum ggml_opt_result result = GGML_OPT_RESULT_OK;
+
+    switch (opt->params.type) {
+        case GGML_OPT_TYPE_ADAM:
+            {
+                result = ggml_opt_adam(ctx, opt, opt->params, f, gf, gb, callback, callback_data);
+            } break;
+        case GGML_OPT_TYPE_LBFGS:
+            {
+                result = ggml_opt_lbfgs(ctx, opt, opt->params, f, gf, gb, callback, callback_data);
+            } break;
+    }
+
+    if (opt->params.print_forward_graph) {
+        ggml_graph_print   (gf);
+        ggml_graph_dump_dot(gf, NULL, "opt-forward.dot");
+    }
+
+    if (opt->params.print_backward_graph) {
+        ggml_graph_print   (gb);
+        ggml_graph_dump_dot(gb, gf, "opt-backward.dot");
+    }
+
+    return result;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+void ggml_set_input(struct ggml_tensor * tensor) {
+    tensor->flags |= GGML_TENSOR_FLAG_INPUT;
+}
+
+void ggml_set_output(struct ggml_tensor * tensor) {
+    tensor->flags |= GGML_TENSOR_FLAG_OUTPUT;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+void ggml_quantize_init(enum ggml_type type) {
+    ggml_critical_section_start();
+
+    switch (type) {
+        case GGML_TYPE_IQ2_XXS:
+        case GGML_TYPE_IQ2_XS:
+        case GGML_TYPE_IQ2_S:
+        case GGML_TYPE_IQ1_S:
+        case GGML_TYPE_IQ1_M:   iq2xs_init_impl(type); break;
+        case GGML_TYPE_IQ3_XXS: iq3xs_init_impl(256); break;
+        case GGML_TYPE_IQ3_S:   iq3xs_init_impl(512); break;
+        default: // nothing
+            break;
+    }
+
+    ggml_critical_section_end();
+}
+
+void ggml_quantize_free(void) {
+    ggml_critical_section_start();
+
+    iq2xs_free_impl(GGML_TYPE_IQ2_XXS);
+    iq2xs_free_impl(GGML_TYPE_IQ2_XS);
+    iq2xs_free_impl(GGML_TYPE_IQ1_S);
+    iq3xs_free_impl(256);
+
+    ggml_critical_section_end();
+}
+
+bool ggml_quantize_requires_imatrix(enum ggml_type type) {
+    return
+        type == GGML_TYPE_IQ2_XXS ||
+        type == GGML_TYPE_IQ2_XS  ||
+        type == GGML_TYPE_IQ1_S;//   ||
+        //type == GGML_TYPE_IQ1_M;
+}
+
+size_t ggml_quantize_chunk(
+        enum ggml_type   type,
+           const float * src,
+                  void * dst,
+               int64_t   start,
+               int64_t   nrows,
+               int64_t   n_per_row,
+           const float * imatrix) {
+    const int64_t n = (int64_t) nrows * n_per_row;
+
+    if (ggml_quantize_requires_imatrix(type)) {
+        GGML_ASSERT(imatrix != NULL);
+    }
+
+    GGML_ASSERT(start % type_traits[type].blck_size == 0);
+    GGML_ASSERT(start % n_per_row == 0);
+
+    ggml_quantize_init(type); // this is noop if already initialized
+
+    const size_t start_row = start / n_per_row;
+    const size_t row_size  = ggml_row_size(type, n_per_row);
+
+    size_t result = 0;
+
+    switch (type) {
+        case GGML_TYPE_Q4_0:    result = quantize_q4_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_Q4_1:    result = quantize_q4_1(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_Q5_0:    result = quantize_q5_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_Q5_1:    result = quantize_q5_1(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_Q8_0:    result = quantize_q8_0(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_Q2_K:    result = quantize_q2_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_Q3_K:    result = quantize_q3_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_Q4_K:    result = quantize_q4_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_Q5_K:    result = quantize_q5_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_Q6_K:    result = quantize_q6_K(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_IQ2_XXS: result = quantize_iq2_xxs(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_IQ2_XS:  result = quantize_iq2_xs (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_IQ3_XXS: result = quantize_iq3_xxs(src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_IQ3_S:   result = quantize_iq3_s  (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_IQ2_S:   result = quantize_iq2_s  (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_IQ1_S:   result = quantize_iq1_s  (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_IQ1_M:   result = quantize_iq1_m  (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_IQ4_NL:  result = quantize_iq4_nl (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_IQ4_XS:  result = quantize_iq4_xs (src + start, (char *) dst + start_row * row_size, nrows, n_per_row, imatrix); break;
+        case GGML_TYPE_F16:
+            {
+                size_t elemsize = sizeof(ggml_fp16_t);
+                ggml_fp32_to_fp16_row(src + start, (ggml_fp16_t *)dst + start, n);
+                result = n * elemsize;
+            } break;
+        case GGML_TYPE_BF16:
+            {
+                size_t elemsize = sizeof(ggml_bf16_t);
+                ggml_fp32_to_bf16_row(src + start, (ggml_bf16_t *)dst + start, n);
+                result = n * elemsize;
+            } break;
+        case GGML_TYPE_F32:
+            {
+                size_t elemsize = sizeof(float);
+                result = n * elemsize;
+                memcpy((uint8_t *)dst + start * elemsize, src + start, result);
+            } break;
+        default:
+            assert(false);
+    }
+
+    GGML_ASSERT(result == nrows * row_size);
+
+    return result;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+struct gguf_str {
+    uint64_t n;  // GGUFv2
+    char * data;
+};
+
+static const size_t GGUF_TYPE_SIZE[GGUF_TYPE_COUNT] = {
+    [GGUF_TYPE_UINT8]   = sizeof(uint8_t),
+    [GGUF_TYPE_INT8]    = sizeof(int8_t),
+    [GGUF_TYPE_UINT16]  = sizeof(uint16_t),
+    [GGUF_TYPE_INT16]   = sizeof(int16_t),
+    [GGUF_TYPE_UINT32]  = sizeof(uint32_t),
+    [GGUF_TYPE_INT32]   = sizeof(int32_t),
+    [GGUF_TYPE_FLOAT32] = sizeof(float),
+    [GGUF_TYPE_BOOL]    = sizeof(bool),
+    [GGUF_TYPE_STRING]  = sizeof(struct gguf_str),
+    [GGUF_TYPE_UINT64]  = sizeof(uint64_t),
+    [GGUF_TYPE_INT64]   = sizeof(int64_t),
+    [GGUF_TYPE_FLOAT64] = sizeof(double),
+    [GGUF_TYPE_ARRAY]   = 0, // undefined
+};
+static_assert(GGUF_TYPE_COUNT == 13, "GGUF_TYPE_COUNT != 13");
+
+static const char * GGUF_TYPE_NAME[GGUF_TYPE_COUNT] = {
+    [GGUF_TYPE_UINT8]   = "u8",
+    [GGUF_TYPE_INT8]    = "i8",
+    [GGUF_TYPE_UINT16]  = "u16",
+    [GGUF_TYPE_INT16]   = "i16",
+    [GGUF_TYPE_UINT32]  = "u32",
+    [GGUF_TYPE_INT32]   = "i32",
+    [GGUF_TYPE_FLOAT32] = "f32",
+    [GGUF_TYPE_BOOL]    = "bool",
+    [GGUF_TYPE_STRING]  = "str",
+    [GGUF_TYPE_ARRAY]   = "arr",
+    [GGUF_TYPE_UINT64]  = "u64",
+    [GGUF_TYPE_INT64]   = "i64",
+    [GGUF_TYPE_FLOAT64] = "f64",
+};
+static_assert(GGUF_TYPE_COUNT == 13, "GGUF_TYPE_COUNT != 13");
+
+union gguf_value {
+    uint8_t  uint8;
+    int8_t   int8;
+    uint16_t uint16;
+    int16_t  int16;
+    uint32_t uint32;
+    int32_t  int32;
+    float    float32;
+    uint64_t uint64;
+    int64_t  int64;
+    double   float64;
+    bool     bool_;
+
+    struct gguf_str str;
+
+    struct {
+        enum gguf_type type;
+
+        uint64_t n;  // GGUFv2
+        void * data;
+    } arr;
+};
+
+struct gguf_kv {
+    struct gguf_str key;
+
+    enum  gguf_type  type;
+    union gguf_value value;
+};
+
+struct gguf_header {
+    char magic[4];
+
+    uint32_t version;
+    uint64_t n_tensors; // GGUFv2
+    uint64_t n_kv;      // GGUFv2
+};
+
+struct gguf_tensor_info {
+    struct gguf_str name;
+
+    uint32_t n_dims;
+    uint64_t ne[GGML_MAX_DIMS];
+
+    enum ggml_type type;
+
+    uint64_t offset; // offset from start of `data`, must be a multiple of `ALIGNMENT`
+
+    // for writing API
+    const void * data;
+    size_t size;
+};
+
+struct gguf_context {
+    struct gguf_header header;
+
+    struct gguf_kv          * kv;
+    struct gguf_tensor_info * infos;
+
+    size_t alignment;
+    size_t offset;    // offset of `data` from beginning of file
+    size_t size;      // size of `data` in bytes
+
+    //uint8_t * padding;
+    void * data;
+};
+
+static size_t gguf_type_size(enum gguf_type type) {
+    GGML_ASSERT(0 <= type && type < GGUF_TYPE_COUNT);
+    return GGUF_TYPE_SIZE[type];
+}
+
+static void gguf_tensor_info_sanitize(struct gguf_tensor_info * info) {
+    GGML_ASSERT(info->n_dims <= GGML_MAX_DIMS);
+    GGML_ASSERT(0 <= info->type && info->type < GGML_TYPE_COUNT);
+
+    for (uint32_t i = 0; i < info->n_dims; ++i) {
+        GGML_ASSERT(info->ne[i] > 0);
+    }
+
+    // prevent overflow for total number of elements
+    GGML_ASSERT(INT64_MAX/info->ne[1] > info->ne[0]);
+    GGML_ASSERT(INT64_MAX/info->ne[2] > info->ne[0]*info->ne[1]);
+    GGML_ASSERT(INT64_MAX/info->ne[3] > info->ne[0]*info->ne[1]*info->ne[2]);
+}
+
+static bool gguf_fread_el(FILE * file, void * dst, size_t size, size_t * offset) {
+    const size_t n = fread(dst, 1, size, file);
+    *offset += n;
+    return n == size;
+}
+
+static bool gguf_fread_str(FILE * file, struct gguf_str * p, size_t * offset) {
+    p->n    = 0;
+    p->data = NULL;
+
+    bool ok = true;
+
+    ok = ok && gguf_fread_el(file, &p->n, sizeof(p->n), offset);
+
+    // early exit if string length is invalid, prevents from integer overflow
+    if (p->n == SIZE_MAX) {
+        fprintf(stderr, "%s: invalid string length (%" PRIu64 ")\n", __func__, p->n);
+        return false;
+    }
+
+    p->data = GGML_CALLOC(p->n + 1, 1);
+
+    ok = ok && gguf_fread_el(file,  p->data, p->n, offset);
+
+    return ok;
+}
+
+static void gguf_free_kv(struct gguf_kv * kv) {
+    if (kv->key.data) {
+        GGML_FREE(kv->key.data);
+    }
+
+    if (kv->type == GGUF_TYPE_STRING) {
+        if (kv->value.str.data) {
+            GGML_FREE(kv->value.str.data);
+        }
+    }
+
+    if (kv->type == GGUF_TYPE_ARRAY) {
+        if (kv->value.arr.data) {
+            if (kv->value.arr.type == GGUF_TYPE_STRING) {
+                for (uint64_t j = 0; j < kv->value.arr.n; ++j) {
+                    struct gguf_str * str = &((struct gguf_str *) kv->value.arr.data)[j];
+                    if (str->data) {
+                        GGML_FREE(str->data);
+                    }
+                }
+            }
+            GGML_FREE(kv->value.arr.data);
+        }
+    }
+}
+
+struct gguf_context * gguf_init_empty(void) {
+    struct gguf_context * ctx = GGML_CALLOC(1, sizeof(struct gguf_context));
+
+    memcpy(ctx->header.magic, GGUF_MAGIC, sizeof(ctx->header.magic));
+    ctx->header.version   = GGUF_VERSION;
+    ctx->header.n_tensors = 0;
+    ctx->header.n_kv      = 0;
+
+    ctx->kv    = NULL;
+    ctx->infos = NULL;
+
+    ctx->alignment = GGUF_DEFAULT_ALIGNMENT;
+    ctx->offset    = 0;
+    ctx->size      = 0;
+
+    ctx->data = NULL;
+
+    return ctx;
+}
+
+struct gguf_context * gguf_init_from_file(const char * fname, struct gguf_init_params params) {
+    FILE * file = ggml_fopen(fname, "rb");
+    if (!file) {
+        return NULL;
+    }
+
+    // offset from start of file
+    size_t offset = 0;
+
+    char magic[4];
+
+    // check the magic before making allocations
+    {
+        gguf_fread_el(file, &magic, sizeof(magic), &offset);
+
+        for (uint32_t i = 0; i < sizeof(magic); i++) {
+            if (magic[i] != GGUF_MAGIC[i]) {
+                fprintf(stderr, "%s: invalid magic characters '%c%c%c%c'\n", __func__, magic[0], magic[1], magic[2], magic[3]);
+                fclose(file);
+                return NULL;
+            }
+        }
+    }
+
+    bool ok = true;
+
+    struct gguf_context * ctx = GGML_CALLOC(1, sizeof(struct gguf_context));
+
+    // read the header
+    {
+        strncpy(ctx->header.magic, magic, 4);
+
+        ctx->kv    = NULL;
+        ctx->infos = NULL;
+        ctx->data  = NULL;
+
+        ok = ok && gguf_fread_el(file, &ctx->header.version,   sizeof(ctx->header.version),   &offset);
+        ok = ok && gguf_fread_el(file, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors), &offset);
+        ok = ok && gguf_fread_el(file, &ctx->header.n_kv,      sizeof(ctx->header.n_kv),      &offset);
+
+        if (ctx->header.version == 1) {
+            fprintf(stderr, "%s: GGUFv1 is no longer supported. please use a more up-to-date version\n", __func__);
+            fclose(file);
+            gguf_free(ctx);
+            return NULL;
+        }
+
+        // sanity-checks to prevent from integer/buffer overflows
+
+        ok = ok && (ctx->header.n_tensors < (SIZE_MAX/2)/sizeof(struct gguf_tensor_info));
+        ok = ok && (ctx->header.n_tensors < (SIZE_MAX/2)/ggml_tensor_overhead());
+        ok = ok && (ctx->header.n_kv      < (SIZE_MAX/2)/sizeof(struct gguf_kv));
+
+        if (!ok) {
+            fprintf(stderr, "%s: failed to read header\n", __func__);
+            fclose(file);
+            gguf_free(ctx);
+            return NULL;
+        }
+    }
+
+    // read the kv pairs
+    {
+        const uint64_t n_kv = ctx->header.n_kv;
+
+        // header.n_kv will hold the actual value of pairs that were successfully read in the loop below
+        ctx->header.n_kv = 0;
+        ctx->kv = GGML_CALLOC(n_kv, sizeof(struct gguf_kv));
+
+        for (uint64_t i = 0; i < n_kv; ++i) {
+            struct gguf_kv * kv = &ctx->kv[i];
+
+            //fprintf(stderr, "%s: reading kv %d\n", __func__, i);
+
+            ok = ok && gguf_fread_str(file, &kv->key,                    &offset);
+            ok = ok && gguf_fread_el (file, &kv->type, sizeof(kv->type), &offset);
+
+            //fprintf(stderr, "%s: reading kv with key %s\n", __func__, kv->key.data);
+
+            switch (kv->type) {
+                case GGUF_TYPE_UINT8:   ok = ok && gguf_fread_el (file, &kv->value.uint8,   sizeof(kv->value.uint8),   &offset); break;
+                case GGUF_TYPE_INT8:    ok = ok && gguf_fread_el (file, &kv->value.int8,    sizeof(kv->value.int8),    &offset); break;
+                case GGUF_TYPE_UINT16:  ok = ok && gguf_fread_el (file, &kv->value.uint16,  sizeof(kv->value.uint16),  &offset); break;
+                case GGUF_TYPE_INT16:   ok = ok && gguf_fread_el (file, &kv->value.int16,   sizeof(kv->value.int16),   &offset); break;
+                case GGUF_TYPE_UINT32:  ok = ok && gguf_fread_el (file, &kv->value.uint32,  sizeof(kv->value.uint32),  &offset); break;
+                case GGUF_TYPE_INT32:   ok = ok && gguf_fread_el (file, &kv->value.int32,   sizeof(kv->value.int32),   &offset); break;
+                case GGUF_TYPE_FLOAT32: ok = ok && gguf_fread_el (file, &kv->value.float32, sizeof(kv->value.float32), &offset); break;
+                case GGUF_TYPE_UINT64:  ok = ok && gguf_fread_el (file, &kv->value.uint64,  sizeof(kv->value.uint64),  &offset); break;
+                case GGUF_TYPE_INT64:   ok = ok && gguf_fread_el (file, &kv->value.int64,   sizeof(kv->value.int64),   &offset); break;
+                case GGUF_TYPE_FLOAT64: ok = ok && gguf_fread_el (file, &kv->value.float64, sizeof(kv->value.float64), &offset); break;
+                case GGUF_TYPE_BOOL:    ok = ok && gguf_fread_el (file, &kv->value.bool_,   sizeof(kv->value.bool_),   &offset); break;
+                case GGUF_TYPE_STRING:  ok = ok && gguf_fread_str(file, &kv->value.str,                                &offset); break;
+                case GGUF_TYPE_ARRAY:
+                    {
+                        ok = ok && gguf_fread_el(file, &kv->value.arr.type, sizeof(kv->value.arr.type), &offset);
+                        ok = ok && gguf_fread_el(file, &kv->value.arr.n,    sizeof(kv->value.arr.n),    &offset);
+
+                        switch (kv->value.arr.type) {
+                            case GGUF_TYPE_UINT8:
+                            case GGUF_TYPE_INT8:
+                            case GGUF_TYPE_UINT16:
+                            case GGUF_TYPE_INT16:
+                            case GGUF_TYPE_UINT32:
+                            case GGUF_TYPE_INT32:
+                            case GGUF_TYPE_FLOAT32:
+                            case GGUF_TYPE_UINT64:
+                            case GGUF_TYPE_INT64:
+                            case GGUF_TYPE_FLOAT64:
+                            case GGUF_TYPE_BOOL:
+                                {
+                                    // prevent from integer overflow in the malloc below
+                                    if (kv->value.arr.n >= SIZE_MAX/gguf_type_size(kv->value.arr.type)) {
+                                        fprintf(stderr, "%s: array size is too large (%" PRIu64 ")\n", __func__, kv->value.arr.n);
+                                        fclose(file);
+                                        gguf_free(ctx);
+                                        return NULL;
+                                    }
+
+                                    kv->value.arr.data = GGML_CALLOC(kv->value.arr.n, gguf_type_size(kv->value.arr.type));
+
+                                    ok = ok && gguf_fread_el(file, kv->value.arr.data, kv->value.arr.n * gguf_type_size(kv->value.arr.type), &offset);
+                                } break;
+                            case GGUF_TYPE_STRING:
+                                {
+                                    // prevent from integer overflow in the malloc below
+                                    if (kv->value.arr.n >= SIZE_MAX/sizeof(struct gguf_str)) {
+                                        fprintf(stderr, "%s: array size is too large (%" PRIu64 ")\n", __func__, kv->value.arr.n);
+                                        fclose(file);
+                                        gguf_free(ctx);
+                                        return NULL;
+                                    }
+
+                                    kv->value.arr.data = GGML_CALLOC(kv->value.arr.n, sizeof(struct gguf_str));
+
+                                    for (uint64_t j = 0; j < kv->value.arr.n; ++j) {
+                                        ok = ok && gguf_fread_str(file, &((struct gguf_str *) kv->value.arr.data)[j], &offset);
+                                    }
+                                } break;
+                            case GGUF_TYPE_ARRAY:
+                            default: GGML_ASSERT(false && "invalid type"); break;
+                        }
+                    } break;
+                default: GGML_ASSERT(false && "invalid type");
+            }
+
+            if (!ok) {
+                break;
+            }
+
+            ctx->header.n_kv++;
+        }
+
+        if (!ok) {
+            fprintf(stderr, "%s: failed to read key-value pairs\n", __func__);
+            fclose(file);
+            gguf_free(ctx);
+            return NULL;
+        }
+    }
+
+    // read the tensor infos
+    if (ctx->header.n_tensors > 0) {
+        ctx->infos = GGML_CALLOC(ctx->header.n_tensors, sizeof(struct gguf_tensor_info));
+
+        for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) {
+            struct gguf_tensor_info * info = &ctx->infos[i];
+
+            for (int j = 0; j < GGML_MAX_DIMS; ++j) {
+                info->ne[j] = 1;
+            }
+
+            ok = ok && gguf_fread_str(file, &info->name,                          &offset);
+            ok = ok && gguf_fread_el (file, &info->n_dims, sizeof(info->n_dims),  &offset);
+
+            ok = ok && (info->n_dims <= GGML_MAX_DIMS);
+
+            for (uint32_t j = 0; j < info->n_dims; ++j) {
+                ok = ok && gguf_fread_el(file, &info->ne[j], sizeof(info->ne[j]), &offset);
+            }
+
+            ok = ok && gguf_fread_el (file, &info->type,   sizeof(info->type),    &offset);
+            ok = ok && gguf_fread_el (file, &info->offset, sizeof(info->offset),  &offset);
+
+            // TODO: return an error instead of crashing with GGML_ASSERT
+            gguf_tensor_info_sanitize(info);
+
+            // make sure there is no duplicated tensor names
+            for (uint64_t j = 0; j < i; ++j) {
+                if (strcmp(info->name.data, ctx->infos[j].name.data) == 0) {
+                    fprintf(stderr, "%s: duplicated tensor name %s\n", __func__, info->name.data);
+                    ok = false;
+                }
+            }
+
+            if (!ok) {
+                fprintf(stderr, "%s: failed to read tensor info\n", __func__);
+                fclose(file);
+                gguf_free(ctx);
+                return NULL;
+            }
+        }
+    }
+
+    ctx->alignment = GGUF_DEFAULT_ALIGNMENT;
+
+    int alignment_idx = gguf_find_key(ctx, "general.alignment");
+    if (alignment_idx != -1) {
+        ctx->alignment = gguf_get_val_u32(ctx, alignment_idx);
+    }
+
+    // we require the data section to be aligned, so take into account any padding
+    {
+        const size_t offset_pad = offset % ctx->alignment;
+
+        if (offset_pad != 0) {
+            offset += ctx->alignment - offset_pad;
+            fseek(file, offset, SEEK_SET);
+        }
+    }
+
+    // store the current file offset - this is where the data section starts
+    ctx->offset = offset;
+
+    // compute the total size of the data section, taking into account the alignment
+    {
+        ctx->size = 0;
+        for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) {
+            struct gguf_tensor_info * info = &ctx->infos[i];
+
+            const int64_t ne =
+                (int64_t) info->ne[0] *
+                (int64_t) info->ne[1] *
+                (int64_t) info->ne[2] *
+                (int64_t) info->ne[3];
+
+            if (ne % ggml_blck_size(info->type) != 0) {
+                fprintf(stderr, "%s: tensor '%s' of type %d (%s) number of elements (%" PRId64 ") is not a multiple of block size (%d)\n",
+                        __func__, info->name.data, (int)info->type, ggml_type_name(info->type), ne, ggml_blck_size(info->type));
+                fclose(file);
+                gguf_free(ctx);
+                return NULL;
+            }
+
+            const size_t size_cur = ggml_row_size(info->type, ne);
+
+            ctx->size += GGML_PAD(size_cur, ctx->alignment);
+        }
+    }
+
+    // load the tensor data only if requested
+    if (params.ctx != NULL) {
+        // if the provided gguf_context is no_alloc, then we create "empty" tensors and do not read the binary blob
+        // otherwise, we load the binary blob into the created ggml_context as well, and point the "data" members of
+        // the ggml_tensor structs to the appropriate locations in the binary blob
+
+        // compute the exact size needed for the new ggml_context
+        const size_t mem_size =
+            params.no_alloc ?
+            (ctx->header.n_tensors    )*ggml_tensor_overhead() :
+            (ctx->header.n_tensors + 1)*ggml_tensor_overhead() + ctx->size;
+
+        struct ggml_init_params pdata = {
+            .mem_size   = mem_size,
+            .mem_buffer = NULL,
+            .no_alloc   = params.no_alloc,
+        };
+
+        *params.ctx = ggml_init(pdata);
+
+        struct ggml_context * ctx_data = *params.ctx;
+
+        struct ggml_tensor * data = NULL;
+
+        if (!params.no_alloc) {
+            data = ggml_new_tensor_1d(ctx_data, GGML_TYPE_I8, ctx->size);
+
+            ok = ok && data != NULL;
+
+            // read the binary blob with the tensor data
+            ok = ok && gguf_fread_el(file, data->data, ctx->size, &offset);
+
+            if (!ok) {
+                fprintf(stderr, "%s: failed to read tensor data\n", __func__);
+                fclose(file);
+                ggml_free(ctx_data);
+                gguf_free(ctx);
+                return NULL;
+            }
+
+            ctx->data = data->data;
+        }
+
+        ggml_set_no_alloc(ctx_data, true);
+
+        // create the tensors
+        for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) {
+            const int64_t ne[GGML_MAX_DIMS] = {
+                ctx->infos[i].ne[0],
+                ctx->infos[i].ne[1],
+                ctx->infos[i].ne[2],
+                ctx->infos[i].ne[3],
+            };
+
+            struct ggml_tensor * cur = ggml_new_tensor(ctx_data, ctx->infos[i].type, ctx->infos[i].n_dims, ne);
+
+            ok = ok && cur != NULL;
+
+            if (!ok) {
+                break;
+            }
+
+            ggml_set_name(cur, ctx->infos[i].name.data);
+
+            // point the data member to the appropriate location in the binary blob using the tensor infos
+            if (!params.no_alloc) {
+              //cur->data = (char *) data->data + ctx->infos[i].offset - ctx->offset; // offset from start of file
+                cur->data = (char *) data->data + ctx->infos[i].offset;               // offset from data
+            }
+        }
+
+        if (!ok) {
+            fprintf(stderr, "%s: failed to read the tensor data\n", __func__);
+            fclose(file);
+            ggml_free(ctx_data);
+            gguf_free(ctx);
+            return NULL;
+        }
+
+        ggml_set_no_alloc(ctx_data, params.no_alloc);
+    }
+
+    fclose(file);
+
+    return ctx;
+}
+
+void gguf_free(struct gguf_context * ctx) {
+    if (ctx == NULL) {
+        return;
+    }
+
+    if (ctx->kv) {
+        // free string memory - not great..
+        for (uint64_t i = 0; i < ctx->header.n_kv; ++i) {
+            gguf_free_kv(&ctx->kv[i]);
+        }
+
+        GGML_FREE(ctx->kv);
+    }
+
+    if (ctx->infos) {
+        for (uint64_t i = 0; i < ctx->header.n_tensors; ++i) {
+            struct gguf_tensor_info * info = &ctx->infos[i];
+
+            if (info->name.data) {
+                GGML_FREE(info->name.data);
+            }
+        }
+
+        GGML_FREE(ctx->infos);
+    }
+
+    GGML_FREE(ctx);
+}
+
+const char * gguf_type_name(enum gguf_type type) {
+    return GGUF_TYPE_NAME[type];
+}
+
+int gguf_get_version(const struct gguf_context * ctx) {
+    return ctx->header.version;
+}
+
+size_t gguf_get_alignment(const struct gguf_context * ctx) {
+    return ctx->alignment;
+}
+
+size_t gguf_get_data_offset(const struct gguf_context * ctx) {
+    return ctx->offset;
+}
+
+void * gguf_get_data(const struct gguf_context * ctx) {
+    return ctx->data;
+}
+
+int gguf_get_n_kv(const struct gguf_context * ctx) {
+    return ctx->header.n_kv;
+}
+
+int gguf_find_key(const struct gguf_context * ctx, const char * key) {
+    // return -1 if key not found
+    int keyfound = -1;
+
+    const int n_kv = gguf_get_n_kv(ctx);
+
+    for (int i = 0; i < n_kv; ++i) {
+        if (strcmp(key, gguf_get_key(ctx, i)) == 0) {
+            keyfound = i;
+            break;
+        }
+    }
+
+    return keyfound;
+}
+
+const char * gguf_get_key(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    return ctx->kv[key_id].key.data;
+}
+
+enum gguf_type gguf_get_kv_type(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    return ctx->kv[key_id].type;
+}
+
+enum gguf_type gguf_get_arr_type(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY);
+    return ctx->kv[key_id].value.arr.type;
+}
+
+const void * gguf_get_arr_data(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY);
+    return ctx->kv[key_id].value.arr.data;
+}
+
+const char * gguf_get_arr_str(const struct gguf_context * ctx, int key_id, int i) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY);
+    struct gguf_kv * kv = &ctx->kv[key_id];
+    struct gguf_str * str = &((struct gguf_str *) kv->value.arr.data)[i];
+    return str->data;
+}
+
+int gguf_get_arr_n(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_ARRAY);
+    return ctx->kv[key_id].value.arr.n;
+}
+
+uint8_t gguf_get_val_u8(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT8);
+    return ctx->kv[key_id].value.uint8;
+}
+
+int8_t gguf_get_val_i8(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT8);
+    return ctx->kv[key_id].value.int8;
+}
+
+uint16_t gguf_get_val_u16(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT16);
+    return ctx->kv[key_id].value.uint16;
+}
+
+int16_t gguf_get_val_i16(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT16);
+    return ctx->kv[key_id].value.int16;
+}
+
+uint32_t gguf_get_val_u32(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT32);
+    return ctx->kv[key_id].value.uint32;
+}
+
+int32_t gguf_get_val_i32(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT32);
+    return ctx->kv[key_id].value.int32;
+}
+
+float gguf_get_val_f32(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_FLOAT32);
+    return ctx->kv[key_id].value.float32;
+}
+
+uint64_t gguf_get_val_u64(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_UINT64);
+    return ctx->kv[key_id].value.uint64;
+}
+
+int64_t gguf_get_val_i64(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_INT64);
+    return ctx->kv[key_id].value.int64;
+}
+
+double gguf_get_val_f64(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_FLOAT64);
+    return ctx->kv[key_id].value.float64;
+}
+
+bool gguf_get_val_bool(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_BOOL);
+    return ctx->kv[key_id].value.bool_;
+}
+
+const char * gguf_get_val_str(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type == GGUF_TYPE_STRING);
+    return ctx->kv[key_id].value.str.data;
+}
+
+const void * gguf_get_val_data(const struct gguf_context * ctx, int key_id) {
+    GGML_ASSERT(key_id >= 0 && key_id < gguf_get_n_kv(ctx));
+    GGML_ASSERT(ctx->kv[key_id].type != GGUF_TYPE_ARRAY);
+    GGML_ASSERT(ctx->kv[key_id].type != GGUF_TYPE_STRING);
+    return &ctx->kv[key_id].value;
+}
+
+int gguf_get_n_tensors(const struct gguf_context * ctx) {
+    return ctx->header.n_tensors;
+}
+
+int gguf_find_tensor(const struct gguf_context * ctx, const char * name) {
+    // return -1 if tensor not found
+    int tensorfound = -1;
+
+    const int n_tensors = gguf_get_n_tensors(ctx);
+
+    for (int i = 0; i < n_tensors; ++i) {
+        if (strcmp(name, gguf_get_tensor_name(ctx, i)) == 0) {
+            tensorfound = i;
+            break;
+        }
+    }
+
+    return tensorfound;
+}
+
+size_t gguf_get_tensor_offset(const struct gguf_context * ctx, int i) {
+    return ctx->infos[i].offset;
+}
+
+char * gguf_get_tensor_name(const struct gguf_context * ctx, int i) {
+    return ctx->infos[i].name.data;
+}
+
+enum ggml_type gguf_get_tensor_type(const struct gguf_context * ctx, int i) {
+    return ctx->infos[i].type;
+}
+
+// returns the index
+static int gguf_get_or_add_key(struct gguf_context * ctx, const char * key) {
+    const int idx = gguf_find_key(ctx, key);
+    if (idx >= 0) {
+        return idx;
+    }
+
+    const int n_kv = gguf_get_n_kv(ctx);
+
+    ctx->kv = realloc(ctx->kv, (n_kv + 1) * sizeof(struct gguf_kv));
+    ctx->kv[n_kv].key.n    = strlen(key);
+    ctx->kv[n_kv].key.data = strdup(key);
+    ctx->header.n_kv++;
+
+    return n_kv;
+}
+
+void gguf_remove_key(struct gguf_context * ctx, const char * key) {
+    const int idx = gguf_find_key(ctx, key);
+    if (idx >= 0) {
+        const int n_kv = gguf_get_n_kv(ctx);
+        gguf_free_kv(&ctx->kv[idx]);
+        for (int i = idx; i < n_kv-1; ++i) {
+            ctx->kv[i] = ctx->kv[i+1];
+        }
+        ctx->kv = realloc(ctx->kv, (n_kv - 1) * sizeof(struct gguf_kv));
+        ctx->header.n_kv--;
+    }
+}
+
+void gguf_set_val_u8(struct gguf_context * ctx, const char * key, uint8_t val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type        = GGUF_TYPE_UINT8;
+    ctx->kv[idx].value.uint8 = val;
+}
+
+void gguf_set_val_i8(struct gguf_context * ctx, const char * key, int8_t val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type       = GGUF_TYPE_INT8;
+    ctx->kv[idx].value.int8 = val;
+}
+
+void gguf_set_val_u16(struct gguf_context * ctx, const char * key, uint16_t val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type         = GGUF_TYPE_UINT16;
+    ctx->kv[idx].value.uint16 = val;
+}
+
+void gguf_set_val_i16(struct gguf_context * ctx, const char * key, int16_t val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type        = GGUF_TYPE_INT16;
+    ctx->kv[idx].value.int16 = val;
+}
+
+void gguf_set_val_u32(struct gguf_context * ctx, const char * key, uint32_t val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type         = GGUF_TYPE_UINT32;
+    ctx->kv[idx].value.uint32 = val;
+}
+
+void gguf_set_val_i32(struct gguf_context * ctx, const char * key, int32_t val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type        = GGUF_TYPE_INT32;
+    ctx->kv[idx].value.int32 = val;
+}
+
+void gguf_set_val_f32(struct gguf_context * ctx, const char * key, float val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type          = GGUF_TYPE_FLOAT32;
+    ctx->kv[idx].value.float32 = val;
+}
+
+void gguf_set_val_u64(struct gguf_context * ctx, const char * key, uint64_t val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type         = GGUF_TYPE_UINT64;
+    ctx->kv[idx].value.uint64 = val;
+}
+
+void gguf_set_val_i64(struct gguf_context * ctx, const char * key, int64_t val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type        = GGUF_TYPE_INT64;
+    ctx->kv[idx].value.int64 = val;
+}
+
+void gguf_set_val_f64(struct gguf_context * ctx, const char * key, double val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type          = GGUF_TYPE_FLOAT64;
+    ctx->kv[idx].value.float64 = val;
+}
+
+void gguf_set_val_bool(struct gguf_context * ctx, const char * key, bool val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type        = GGUF_TYPE_BOOL;
+    ctx->kv[idx].value.bool_ = val;
+}
+
+void gguf_set_val_str(struct gguf_context * ctx, const char * key, const char * val) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type           = GGUF_TYPE_STRING;
+    ctx->kv[idx].value.str.n    = strlen(val);
+    ctx->kv[idx].value.str.data = strdup(val);
+}
+
+void gguf_set_arr_data(struct gguf_context * ctx, const char * key, enum gguf_type type, const void * data, int n) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type           = GGUF_TYPE_ARRAY;
+    ctx->kv[idx].value.arr.type = type;
+    ctx->kv[idx].value.arr.n    = n;
+    ctx->kv[idx].value.arr.data = GGML_CALLOC(n, gguf_type_size(type));
+    memcpy(ctx->kv[idx].value.arr.data, data, n*gguf_type_size(type));
+}
+
+void gguf_set_arr_str(struct gguf_context * ctx, const char * key, const char ** data, int n) {
+    const int idx = gguf_get_or_add_key(ctx, key);
+
+    ctx->kv[idx].type           = GGUF_TYPE_ARRAY;
+    ctx->kv[idx].value.arr.type = GGUF_TYPE_STRING;
+    ctx->kv[idx].value.arr.n    = n;
+    ctx->kv[idx].value.arr.data = GGML_CALLOC(n, sizeof(struct gguf_str));
+    for (int i = 0; i < n; i++) {
+        struct gguf_str * str = &((struct gguf_str *)ctx->kv[idx].value.arr.data)[i];
+        str->n    = strlen(data[i]);
+        str->data = strdup(data[i]);
+    }
+}
+
+// set or add KV pairs from another context
+void gguf_set_kv(struct gguf_context * ctx, struct gguf_context * src) {
+    for (uint32_t i = 0; i < src->header.n_kv; i++) {
+        switch (src->kv[i].type) {
+            case GGUF_TYPE_UINT8:   gguf_set_val_u8  (ctx, src->kv[i].key.data, src->kv[i].value.uint8);    break;
+            case GGUF_TYPE_INT8:    gguf_set_val_i8  (ctx, src->kv[i].key.data, src->kv[i].value.int8);     break;
+            case GGUF_TYPE_UINT16:  gguf_set_val_u16 (ctx, src->kv[i].key.data, src->kv[i].value.uint16);   break;
+            case GGUF_TYPE_INT16:   gguf_set_val_i16 (ctx, src->kv[i].key.data, src->kv[i].value.int16);    break;
+            case GGUF_TYPE_UINT32:  gguf_set_val_u32 (ctx, src->kv[i].key.data, src->kv[i].value.uint32);   break;
+            case GGUF_TYPE_INT32:   gguf_set_val_i32 (ctx, src->kv[i].key.data, src->kv[i].value.int32);    break;
+            case GGUF_TYPE_FLOAT32: gguf_set_val_f32 (ctx, src->kv[i].key.data, src->kv[i].value.float32);  break;
+            case GGUF_TYPE_UINT64:  gguf_set_val_u64 (ctx, src->kv[i].key.data, src->kv[i].value.uint64);   break;
+            case GGUF_TYPE_INT64:   gguf_set_val_i64 (ctx, src->kv[i].key.data, src->kv[i].value.int64);    break;
+            case GGUF_TYPE_FLOAT64: gguf_set_val_f64 (ctx, src->kv[i].key.data, src->kv[i].value.float64);  break;
+            case GGUF_TYPE_BOOL:    gguf_set_val_bool(ctx, src->kv[i].key.data, src->kv[i].value.bool_);    break;
+            case GGUF_TYPE_STRING:  gguf_set_val_str (ctx, src->kv[i].key.data, src->kv[i].value.str.data); break;
+            case GGUF_TYPE_ARRAY:
+                {
+                    if (src->kv[i].value.arr.type == GGUF_TYPE_STRING) {
+                        const char ** data = GGML_CALLOC(src->kv[i].value.arr.n, sizeof(char *));
+                        for (uint32_t j = 0; j < src->kv[i].value.arr.n; j++) {
+                            data[j] = ((struct gguf_str *)src->kv[i].value.arr.data)[j].data;
+                        }
+                        gguf_set_arr_str(ctx, src->kv[i].key.data, data, src->kv[i].value.arr.n);
+                        GGML_FREE((void *)data);
+                    } else if (src->kv[i].value.arr.type == GGUF_TYPE_ARRAY) {
+                        GGML_ASSERT(false && "nested arrays not supported");
+                    } else {
+                        gguf_set_arr_data(ctx, src->kv[i].key.data, src->kv[i].value.arr.type, src->kv[i].value.arr.data, src->kv[i].value.arr.n);
+                    }
+                } break;
+            default: GGML_ASSERT(false && "invalid type"); break;
+        }
+    }
+}
+
+void gguf_add_tensor(
+             struct gguf_context * ctx,
+        const struct ggml_tensor * tensor) {
+    if (gguf_find_tensor(ctx, tensor->name) != -1) {
+        GGML_ASSERT(false && "duplicated tensor name");
+    }
+
+    const int idx = ctx->header.n_tensors;
+    ctx->infos = realloc(ctx->infos, (idx + 1)*sizeof(struct gguf_tensor_info));
+
+    ctx->infos[idx].name.n    = strlen(tensor->name);
+    ctx->infos[idx].name.data = strdup(tensor->name);
+
+    for (int i = 0; i < GGML_MAX_DIMS; ++i) {
+        ctx->infos[idx].ne[i] = 1;
+    }
+
+    ctx->infos[idx].n_dims = ggml_n_dims(tensor);
+    for (uint32_t i = 0; i < ctx->infos[idx].n_dims; i++) {
+        ctx->infos[idx].ne[i] = tensor->ne[i];
+    }
+
+    ctx->infos[idx].type   = tensor->type;
+    ctx->infos[idx].offset = 0;
+    ctx->infos[idx].data   = tensor->data;
+    ctx->infos[idx].size   = ggml_nbytes(tensor);
+
+    if (ctx->header.n_tensors > 0) {
+        ctx->infos[idx].offset = ctx->infos[idx - 1].offset + GGML_PAD(ctx->infos[idx - 1].size, ctx->alignment);
+    }
+
+    ctx->header.n_tensors++;
+}
+
+void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type) {
+    const int idx = gguf_find_tensor(ctx, name);
+    if (idx < 0) {
+        GGML_ASSERT(false && "tensor not found");
+    }
+
+    ctx->infos[idx].type = type;
+}
+
+void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data, size_t size) {
+    const int idx = gguf_find_tensor(ctx, name);
+    if (idx < 0) {
+        GGML_ASSERT(false && "tensor not found");
+    }
+
+    ctx->infos[idx].data = data;
+    ctx->infos[idx].size = size;
+
+    // update offsets
+    for (uint32_t i = idx + 1; i < ctx->header.n_tensors; ++i) {
+        ctx->infos[i].offset = ctx->infos[i - 1].offset + GGML_PAD(ctx->infos[i - 1].size, ctx->alignment);
+    }
+}
+
+//static void gguf_fwrite_str(FILE * file, const struct gguf_str * val) {
+//    fwrite(&val->n,   sizeof(val->n),    1, file);
+//    fwrite(val->data, sizeof(char), val->n, file);
+//}
+//
+//static void gguf_fwrite_el(FILE * file, const void * val, size_t size) {
+//    fwrite(val, sizeof(char), size, file);
+//}
+
+struct gguf_buf {
+    void * data;
+    size_t size;
+    size_t offset;
+};
+
+static struct gguf_buf gguf_buf_init(size_t size) {
+    struct gguf_buf buf = {
+        /*buf.data   =*/ size == 0 ? NULL : GGML_CALLOC(1, size),
+        /*buf.size   =*/ size,
+        /*buf.offset =*/ 0,
+    };
+
+    return buf;
+}
+
+static void gguf_buf_free(struct gguf_buf buf) {
+    if (buf.data) {
+        GGML_FREE(buf.data);
+    }
+}
+
+static void gguf_buf_grow(struct gguf_buf * buf, size_t size) {
+    if (buf->offset + size > buf->size) {
+        buf->size = 1.5*(buf->offset + size);
+        if (buf->data) {
+            buf->data = realloc(buf->data, buf->size);
+        }
+    }
+}
+
+static void gguf_bwrite_str(struct gguf_buf * buf, const struct gguf_str * val) {
+    gguf_buf_grow(buf, sizeof(val->n) + val->n);
+
+    if (buf->data) {
+        memcpy((char *) buf->data + buf->offset, &val->n, sizeof(val->n));
+    }
+    buf->offset += sizeof(val->n);
+
+    if (buf->data) {
+        memcpy((char *) buf->data + buf->offset, val->data, val->n);
+    }
+    buf->offset += val->n;
+}
+
+static void gguf_bwrite_el(struct gguf_buf * buf, const void * val, size_t el_size) {
+    gguf_buf_grow(buf, el_size);
+
+    if (buf->data) {
+        memcpy((char *) buf->data + buf->offset, val, el_size);
+    }
+    buf->offset += el_size;
+}
+
+static void gguf_write_to_buf(const struct gguf_context * ctx, struct gguf_buf * buf, bool only_meta) {
+    // write header
+    gguf_bwrite_el(buf, &ctx->header.magic,     sizeof(ctx->header.magic));
+    gguf_bwrite_el(buf, &ctx->header.version,   sizeof(ctx->header.version));
+    gguf_bwrite_el(buf, &ctx->header.n_tensors, sizeof(ctx->header.n_tensors));
+    gguf_bwrite_el(buf, &ctx->header.n_kv,      sizeof(ctx->header.n_kv));
+
+    // write key-value pairs
+    for (uint32_t i = 0; i < ctx->header.n_kv; ++i) {
+        struct gguf_kv * kv = &ctx->kv[i];
+
+        gguf_bwrite_str(buf, &kv->key);
+        gguf_bwrite_el (buf, &kv->type, sizeof(kv->type));
+
+        switch (kv->type) {
+            case GGUF_TYPE_UINT8:   gguf_bwrite_el( buf, &kv->value.uint8,   sizeof(kv->value.uint8)  ); break;
+            case GGUF_TYPE_INT8:    gguf_bwrite_el (buf, &kv->value.int8,    sizeof(kv->value.int8)   ); break;
+            case GGUF_TYPE_UINT16:  gguf_bwrite_el (buf, &kv->value.uint16,  sizeof(kv->value.uint16) ); break;
+            case GGUF_TYPE_INT16:   gguf_bwrite_el (buf, &kv->value.int16,   sizeof(kv->value.int16)  ); break;
+            case GGUF_TYPE_UINT32:  gguf_bwrite_el (buf, &kv->value.uint32,  sizeof(kv->value.uint32) ); break;
+            case GGUF_TYPE_INT32:   gguf_bwrite_el (buf, &kv->value.int32,   sizeof(kv->value.int32)  ); break;
+            case GGUF_TYPE_FLOAT32: gguf_bwrite_el (buf, &kv->value.float32, sizeof(kv->value.float32)); break;
+            case GGUF_TYPE_UINT64:  gguf_bwrite_el (buf, &kv->value.uint64,  sizeof(kv->value.uint64) ); break;
+            case GGUF_TYPE_INT64:   gguf_bwrite_el (buf, &kv->value.int64,   sizeof(kv->value.int64)  ); break;
+            case GGUF_TYPE_FLOAT64: gguf_bwrite_el (buf, &kv->value.float64, sizeof(kv->value.float64)); break;
+            case GGUF_TYPE_BOOL:    gguf_bwrite_el (buf, &kv->value.bool_,   sizeof(kv->value.bool_)  ); break;
+            case GGUF_TYPE_STRING:  gguf_bwrite_str(buf, &kv->value.str                               ); break;
+            case GGUF_TYPE_ARRAY:
+                {
+                    gguf_bwrite_el(buf, &kv->value.arr.type, sizeof(kv->value.arr.type));
+                    gguf_bwrite_el(buf, &kv->value.arr.n,    sizeof(kv->value.arr.n)   );
+
+                    switch (kv->value.arr.type) {
+                        case GGUF_TYPE_UINT8:
+                        case GGUF_TYPE_INT8:
+                        case GGUF_TYPE_UINT16:
+                        case GGUF_TYPE_INT16:
+                        case GGUF_TYPE_UINT32:
+                        case GGUF_TYPE_INT32:
+                        case GGUF_TYPE_FLOAT32:
+                        case GGUF_TYPE_UINT64:
+                        case GGUF_TYPE_INT64:
+                        case GGUF_TYPE_FLOAT64:
+                        case GGUF_TYPE_BOOL:
+                            {
+                                gguf_bwrite_el(buf, kv->value.arr.data, kv->value.arr.n * gguf_type_size(kv->value.arr.type));
+                            } break;
+                        case GGUF_TYPE_STRING:
+                            {
+                                for (uint32_t j = 0; j < kv->value.arr.n; ++j) {
+                                    gguf_bwrite_str(buf, &((struct gguf_str *) kv->value.arr.data)[j]);
+                                }
+                            } break;
+                        case GGUF_TYPE_ARRAY:
+                        default: GGML_ASSERT(false && "invalid type"); break;
+                    }
+                } break;
+            default: GGML_ASSERT(false && "invalid type");
+        }
+    }
+
+    // write tensor infos
+    for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) {
+        struct gguf_tensor_info * info = &ctx->infos[i];
+
+        gguf_bwrite_str(buf, &info->name);
+        gguf_bwrite_el (buf, &info->n_dims, sizeof(info->n_dims));
+        for (uint32_t j = 0; j < info->n_dims; ++j) {
+            gguf_bwrite_el(buf, &info->ne[j], sizeof(info->ne[j]));
+        }
+        gguf_bwrite_el(buf, &info->type,   sizeof(info->type));
+        gguf_bwrite_el(buf, &info->offset, sizeof(info->offset));
+    }
+
+    // we require the data section to be aligned, so take into account any padding
+    {
+        const size_t offset     = buf->offset;
+        const size_t offset_pad = GGML_PAD(offset, ctx->alignment);
+
+        if (offset_pad != offset) {
+            uint8_t pad = 0;
+            for (size_t i = 0; i < offset_pad - offset; ++i) {
+                gguf_bwrite_el(buf, &pad, sizeof(pad));
+            }
+        }
+    }
+
+    if (only_meta) {
+        return;
+    }
+
+    size_t offset = 0;
+
+    // write tensor data
+    for (uint32_t i = 0; i < ctx->header.n_tensors; ++i) {
+        struct gguf_tensor_info * info = &ctx->infos[i];
+
+        const size_t size     = info->size;
+        const size_t size_pad = GGML_PAD(size, ctx->alignment);
+
+        gguf_bwrite_el(buf, info->data, size);
+
+        if (size_pad != size) {
+            uint8_t pad = 0;
+            for (size_t j = 0; j < size_pad - size; ++j) {
+                gguf_bwrite_el(buf, &pad, sizeof(pad));
+            }
+        }
+
+        GGML_ASSERT(offset == info->offset);
+
+        offset += size_pad;
+    }
+}
+
+void gguf_write_to_file(const struct gguf_context * ctx, const char * fname, bool only_meta) {
+    FILE * file = ggml_fopen(fname, "wb");
+    if (!file) {
+        GGML_ASSERT(false && "failed to open file for writing");
+    }
+
+    struct gguf_buf buf = gguf_buf_init(16*1024);
+
+    gguf_write_to_buf(ctx, &buf, only_meta);
+
+    fwrite(buf.data, 1, buf.offset, file);
+
+    gguf_buf_free(buf);
+
+    fclose(file);
+}
+
+size_t gguf_get_meta_size(const struct gguf_context * ctx) {
+    // no allocs - only compute size
+    struct gguf_buf buf = gguf_buf_init(0);
+
+    gguf_write_to_buf(ctx, &buf, true);
+
+    return buf.offset;
+}
+
+void gguf_get_meta_data(const struct gguf_context * ctx, void * data) {
+    struct gguf_buf buf = gguf_buf_init(16*1024);
+
+    gguf_write_to_buf(ctx, &buf, true);
+
+    memcpy(data, buf.data, buf.offset);
+
+    gguf_buf_free(buf);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+int ggml_cpu_has_avx(void) {
+#if defined(__AVX__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_avx_vnni(void) {
+#if defined(__AVXVNNI__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_avx2(void) {
+#if defined(__AVX2__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_avx512(void) {
+#if defined(__AVX512F__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_avx512_vbmi(void) {
+#if defined(__AVX512VBMI__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_avx512_vnni(void) {
+#if defined(__AVX512VNNI__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_avx512_bf16(void) {
+#if defined(__AVX512BF16__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_fma(void) {
+#if defined(__FMA__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_neon(void) {
+#if defined(__ARM_NEON)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_sve(void) {
+#if defined(__ARM_FEATURE_SVE)
+    // TODO: Currently, SVE 256 bit is only supported.
+    GGML_ASSERT(svcntb() == QK8_0);
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_arm_fma(void) {
+#if defined(__ARM_FEATURE_FMA)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_metal(void) {
+#if defined(GGML_USE_METAL)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_f16c(void) {
+#if defined(__F16C__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_fp16_va(void) {
+#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_wasm_simd(void) {
+#if defined(__wasm_simd128__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_blas(void) {
+#if defined(GGML_USE_BLAS) || defined(GGML_USE_CUDA) || defined(GGML_USE_VULKAN) || defined(GGML_USE_SYCL)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_cuda(void) {
+#if defined(GGML_USE_CUDA)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_vulkan(void) {
+#if defined(GGML_USE_VULKAN)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_kompute(void) {
+#if defined(GGML_USE_KOMPUTE)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_sycl(void) {
+#if defined(GGML_USE_SYCL)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_rpc(void) {
+#if defined(GGML_USE_RPC)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_gpublas(void) {
+    return ggml_cpu_has_cuda() || ggml_cpu_has_vulkan() || ggml_cpu_has_kompute() || ggml_cpu_has_sycl();
+}
+
+int ggml_cpu_has_sse3(void) {
+#if defined(__SSE3__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_ssse3(void) {
+#if defined(__SSSE3__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_vsx(void) {
+#if defined(__POWER9_VECTOR__)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+int ggml_cpu_has_matmul_int8(void) {
+#if defined(__ARM_FEATURE_MATMUL_INT8)
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+////////////////////////////////////////////////////////////////////////////////
diff --git a/ggml/src/kompute-shaders/common.comp b/ggml/src/kompute-shaders/common.comp
new file mode 100644 (file)
index 0000000..62d62b0
--- /dev/null
@@ -0,0 +1,102 @@
+#extension GL_EXT_shader_16bit_storage: require
+#extension GL_EXT_shader_8bit_storage: require
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: require
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: require
+#extension GL_EXT_control_flow_attributes: enable
+#extension GL_KHR_shader_subgroup_arithmetic : require
+#extension GL_EXT_debug_printf : enable
+
+#define QK4_0 32
+#define QK4_1 32
+
+#define GELU_COEF_A 0.044715
+#define SQRT_2_OVER_PI 0.79788456080286535587989211986876
+#define TWOPI_F 6.283185307179586f
+
+#define QK_K 256
+
+#define u8BufToU16(buf, idx) (((uint16_t(buf[idx + 1]) << 8)) | buf[idx])
+#define u8BufToFloat16(buf, idx) uint16BitsToHalf u8BufToU16(buf, idx)
+#define u8BufToU32(buf, idx) (((uint32_t u8BufToU16(buf, idx + 2) << 8 | buf[idx + 1]) << 8) | buf[idx])
+#define u8BufToFloat(buf, idx) uintBitsToFloat u8BufToU32(buf, idx)
+
+#define sizeof_block_q4_0 0x12
+struct block_q4_0 {
+    float16_t d;
+    uint8_t qs[QK4_0 / 2];
+};
+mat4 dequantize_q4_0(const block_q4_0 xb, uint il) {
+    const float d1 = il != 0 ? (xb.d / 16.f) : xb.d;
+    const float d2 = d1 / 256.f;
+    const float md = -8.f * xb.d;
+    const uint16_t mask0 = il != 0 ? uint16_t(0x00F0) : uint16_t(0x000F);
+    const uint16_t mask1 = mask0 << 8;
+
+    mat4 reg;
+    for (int i=0;i<8;i++) {
+        uint16_t b = (uint16_t(xb.qs[2 * i + 1]) << 8) | uint16_t(xb.qs[2 * i]);
+        reg[i/2][2*(i%2)+0] = d1 * (b & mask0) + md;
+        reg[i/2][2*(i%2)+1] = d2 * (b & mask1) + md;
+    }
+    return reg;
+}
+
+#define sizeof_block_q4_1 0x14
+struct block_q4_1 {
+    float16_t d;
+    float16_t m;
+    uint8_t qs[QK4_1 / 2];
+};
+mat4 dequantize_q4_1(const block_q4_1 xb, uint il) {
+    const float d1 = il != 0 ? (xb.d / 16.f) : xb.d;
+    const float d2 = d1 / 256.f;
+    const float  m = xb.m;
+    const uint16_t mask0 = il != 0 ? uint16_t(0x00F0) : uint16_t(0x000F);
+    const uint16_t mask1 = mask0 << 8;
+
+    mat4 reg;
+    for (int i=0;i<8;i++) {
+        uint16_t b = (uint16_t(xb.qs[2 * i + 1]) << 8) | uint16_t(xb.qs[2 * i]);
+        reg[i/2][2*(i%2)+0] = ((b & mask0) * d1) + m;
+        reg[i/2][2*(i%2)+1] = ((b & mask1) * d2) + m;
+    }
+    return reg;
+}
+
+#define sizeof_block_q6_k 210
+struct block_q6_k {
+    uint8_t ql[QK_K/2];      // quants, lower 4 bits
+    uint8_t qh[QK_K/4];      // quants, upper 2 bits
+    int8_t  scales[QK_K/16]; // scales, quantized with 8 bits
+    float16_t d;             // super-block scale
+};
+mat4 dequantize_q6_k(const block_q6_k xb, uint il) {
+    const float16_t d_all = xb.d;
+
+    const uint qlIndex = 64*(il/8) + 32*((il/2)&1) + 16*(il&1);
+    const uint qhIndex = 32*(il/8) + 16*(il&1);
+    float16_t sc = xb.scales[(il%2) + 2 * ((il/2))];
+    il = (il/2) & 3;
+
+    const uint16_t  kmask1 = il>1 ? uint16_t(il>2 ? 192 : 48) : uint16_t(il>0 ? 12 : 3);
+    const uint16_t  kmask2 = il>1 ? uint8_t(0xF0)             : uint8_t(0x0F);
+    const float16_t coef   = il>1 ? float16_t(1.f/16.f)       : float16_t(1.f);
+    const float16_t ml = float16_t(d_all * sc * 32.f);
+    const float16_t dl = float16_t(d_all * sc * coef);
+    mat4 reg;
+    for (int i = 0; i < 16; ++i) {
+        const float16_t q = (il&1) != 0 ? ((xb.ql[qlIndex + i] & kmask2) | ((xb.qh[qhIndex + i] & kmask1) << 2))
+                                        : ((xb.ql[qlIndex + i] & kmask2) | ((xb.qh[qhIndex + i] & kmask1) << 4));
+        reg[i/4][i%4] = dl * q - ml;
+    }
+    return reg;
+}
+
+
+#define QK8_0 32
+// struct block_q8_0 {
+//     float16_t d;         // delta
+//     int8_t    qs[QK8_0]; // quants
+// };
+#define sizeof_block_q8_0 34
diff --git a/ggml/src/kompute-shaders/op_add.comp b/ggml/src/kompute-shaders/op_add.comp
new file mode 100644 (file)
index 0000000..b7b76a7
--- /dev/null
@@ -0,0 +1,58 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1024) in;
+
+layout(binding = 0) buffer restrict readonly tensorInA { float inA[]; };
+layout(binding = 1) buffer restrict readonly tensorInB { float inB[]; };
+layout(binding = 2) buffer restrict writeonly tensorOut { float out_[]; };
+
+layout(push_constant) uniform PushConstants {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int ne00;
+    int nb00;
+    int nb01;
+    int nb02;
+    int nb03;
+    int ne10;
+    int ne11;
+    int ne12;
+    int ne13;
+    int nb10;
+    int nb11;
+    int nb12;
+    int nb13;
+    int ne0;
+    int nb0;
+    int nb1;
+    int nb2;
+    int nb3;
+  //int offs; // TODO: needed for GGML_OP_ACC, see metal code
+} pcs;
+
+// general-purpose kernel for addition of two tensors
+// pros: works for non-contiguous tensors, supports broadcast across dims 1, 2 and 3
+// cons: not very efficient
+void main() {
+    const uint i03 = gl_WorkGroupID.z;
+    const uint i02 = gl_WorkGroupID.y;
+    const uint i01 = gl_WorkGroupID.x;
+
+    const uint i13 = i03 % pcs.ne13;
+    const uint i12 = i02 % pcs.ne12;
+    const uint i11 = i01 % pcs.ne11;
+
+    int offs = 0; // TMP (see above)
+
+    uint src0_off = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01 + offs) / 4);
+    uint src1_off = uint((i13*pcs.nb13 + i12*pcs.nb12 + i11*pcs.nb11       ) / 4);
+    uint dst_off  = uint((i03*pcs.nb3  + i02*pcs.nb2  + i01*pcs.nb1  + offs) / 4);
+
+    for (uint i0 = gl_LocalInvocationID.x; i0 < pcs.ne0; i0 += gl_WorkGroupSize.x) {
+        const uint i10 = i0 % pcs.ne10;
+        out_[pcs.outOff + dst_off + i0] = inA[pcs.inAOff + src0_off + i0] + inB[pcs.inBOff + src1_off + i10];
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_addrow.comp b/ggml/src/kompute-shaders/op_addrow.comp
new file mode 100644 (file)
index 0000000..2376a6b
--- /dev/null
@@ -0,0 +1,25 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1) in;
+
+layout(binding = 0) buffer restrict readonly tensorInA { float inA[]; };
+layout(binding = 1) buffer restrict readonly tensorInB { float inB[]; };
+layout(binding = 2) buffer restrict writeonly tensorOut { float out_[]; };
+
+layout(push_constant) uniform PushConstants {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    uint row;
+} pcs;
+
+void main() {
+    const uint baseIndex = gl_WorkGroupID.x * 4;
+
+    for (uint x = 0; x < 4; x++) {
+        const uint i = baseIndex + x;
+        out_[i + pcs.outOff] = inA[i + pcs.inAOff] + inB[(i % pcs.row) + pcs.inBOff];
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_cpy_f16_f16.comp b/ggml/src/kompute-shaders/op_cpy_f16_f16.comp
new file mode 100644 (file)
index 0000000..d57247d
--- /dev/null
@@ -0,0 +1,52 @@
+#version 450
+
+#include "common.comp"
+
+#define IN_TYPE float16_t
+#define IN_TYPE_SIZE 2
+#define OUT_TYPE float16_t
+#define OUT_TYPE_SIZE 2
+
+layout(local_size_x = 1024) in;
+
+layout (binding = 0) readonly buffer tensorIn { IN_TYPE in_[]; };
+layout (binding = 1) writeonly buffer tensorOut { OUT_TYPE out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inOff;
+    uint outOff;
+    int ne00;
+    int ne01;
+    int ne02;
+    uint nb00;
+    uint nb01;
+    uint nb02;
+    uint nb03;
+    int ne0;
+    int ne1;
+    int ne2;
+    uint nb0;
+    uint nb1;
+    uint nb2;
+    uint nb3;
+} pcs;
+
+void main() {
+    const uint i03 = gl_WorkGroupID.z;
+    const uint i02 = gl_WorkGroupID.y;
+    const uint i01 = gl_WorkGroupID.x;
+
+    const int n = int(i03)*pcs.ne02*pcs.ne01*pcs.ne00 + int(i02)*pcs.ne01*pcs.ne00 + int(i01)*pcs.ne00;
+
+    const int i3 = n / (pcs.ne2*pcs.ne1*pcs.ne0);
+    const int i2 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0) / (pcs.ne1*pcs.ne0);
+    const int i1 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0) / pcs.ne0;
+    const int i0 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0 - i1*pcs.ne0);
+
+    const uint dst_data = (i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / OUT_TYPE_SIZE + pcs.outOff; // Based from out_
+
+    for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) {
+        const uint src = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01 + i00*pcs.nb00) / IN_TYPE_SIZE) + pcs.inOff; // Based from in_
+        out_[dst_data+i00] = OUT_TYPE(in_[src]);
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_cpy_f16_f32.comp b/ggml/src/kompute-shaders/op_cpy_f16_f32.comp
new file mode 100644 (file)
index 0000000..b568bcd
--- /dev/null
@@ -0,0 +1,52 @@
+#version 450
+
+#include "common.comp"
+
+#define IN_TYPE float16_t
+#define IN_TYPE_SIZE 2
+#define OUT_TYPE float
+#define OUT_TYPE_SIZE 4
+
+layout(local_size_x = 1024) in;
+
+layout (binding = 0) readonly buffer tensorIn { IN_TYPE in_[]; };
+layout (binding = 1) writeonly buffer tensorOut { OUT_TYPE out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inOff;
+    uint outOff;
+    int ne00;
+    int ne01;
+    int ne02;
+    uint nb00;
+    uint nb01;
+    uint nb02;
+    uint nb03;
+    int ne0;
+    int ne1;
+    int ne2;
+    uint nb0;
+    uint nb1;
+    uint nb2;
+    uint nb3;
+} pcs;
+
+void main() {
+    const uint i03 = gl_WorkGroupID.z;
+    const uint i02 = gl_WorkGroupID.y;
+    const uint i01 = gl_WorkGroupID.x;
+
+    const int n = int(i03)*pcs.ne02*pcs.ne01*pcs.ne00 + int(i02)*pcs.ne01*pcs.ne00 + int(i01)*pcs.ne00;
+
+    const int i3 = n / (pcs.ne2*pcs.ne1*pcs.ne0);
+    const int i2 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0) / (pcs.ne1*pcs.ne0);
+    const int i1 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0) / pcs.ne0;
+    const int i0 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0 - i1*pcs.ne0);
+
+    const uint dst_data = (i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / OUT_TYPE_SIZE + pcs.outOff; // Based from out_
+
+    for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) {
+        const uint src = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01 + i00*pcs.nb00) / IN_TYPE_SIZE) + pcs.inOff; // Based from in_
+        out_[dst_data+i00] = OUT_TYPE(in_[src]);
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_cpy_f32_f16.comp b/ggml/src/kompute-shaders/op_cpy_f32_f16.comp
new file mode 100644 (file)
index 0000000..99b2283
--- /dev/null
@@ -0,0 +1,52 @@
+#version 450
+
+#include "common.comp"
+
+#define IN_TYPE float
+#define IN_TYPE_SIZE 4
+#define OUT_TYPE float16_t
+#define OUT_TYPE_SIZE 2
+
+layout(local_size_x = 1024) in;
+
+layout (binding = 0) readonly buffer tensorIn { IN_TYPE in_[]; };
+layout (binding = 1) writeonly buffer tensorOut { OUT_TYPE out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inOff;
+    uint outOff;
+    int ne00;
+    int ne01;
+    int ne02;
+    uint nb00;
+    uint nb01;
+    uint nb02;
+    uint nb03;
+    int ne0;
+    int ne1;
+    int ne2;
+    uint nb0;
+    uint nb1;
+    uint nb2;
+    uint nb3;
+} pcs;
+
+void main() {
+    const uint i03 = gl_WorkGroupID.z;
+    const uint i02 = gl_WorkGroupID.y;
+    const uint i01 = gl_WorkGroupID.x;
+
+    const int n = int(i03)*pcs.ne02*pcs.ne01*pcs.ne00 + int(i02)*pcs.ne01*pcs.ne00 + int(i01)*pcs.ne00;
+
+    const int i3 = n / (pcs.ne2*pcs.ne1*pcs.ne0);
+    const int i2 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0) / (pcs.ne1*pcs.ne0);
+    const int i1 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0) / pcs.ne0;
+    const int i0 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0 - i1*pcs.ne0);
+
+    const uint dst_data = (i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / OUT_TYPE_SIZE + pcs.outOff; // Based from out_
+
+    for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) {
+        const uint src = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01 + i00*pcs.nb00) / IN_TYPE_SIZE) + pcs.inOff; // Based from in_
+        out_[dst_data+i00] = OUT_TYPE(in_[src]);
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_cpy_f32_f32.comp b/ggml/src/kompute-shaders/op_cpy_f32_f32.comp
new file mode 100644 (file)
index 0000000..2fc9984
--- /dev/null
@@ -0,0 +1,52 @@
+#version 450
+
+#include "common.comp"
+
+#define IN_TYPE float
+#define IN_TYPE_SIZE 4
+#define OUT_TYPE float
+#define OUT_TYPE_SIZE 4
+
+layout(local_size_x = 1024) in;
+
+layout (binding = 0) readonly buffer tensorIn { IN_TYPE in_[]; };
+layout (binding = 1) writeonly buffer tensorOut { OUT_TYPE out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inOff;
+    uint outOff;
+    int ne00;
+    int ne01;
+    int ne02;
+    uint nb00;
+    uint nb01;
+    uint nb02;
+    uint nb03;
+    int ne0;
+    int ne1;
+    int ne2;
+    uint nb0;
+    uint nb1;
+    uint nb2;
+    uint nb3;
+} pcs;
+
+void main() {
+    const uint i03 = gl_WorkGroupID.z;
+    const uint i02 = gl_WorkGroupID.y;
+    const uint i01 = gl_WorkGroupID.x;
+
+    const int n = int(i03)*pcs.ne02*pcs.ne01*pcs.ne00 + int(i02)*pcs.ne01*pcs.ne00 + int(i01)*pcs.ne00;
+
+    const int i3 = n / (pcs.ne2*pcs.ne1*pcs.ne0);
+    const int i2 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0) / (pcs.ne1*pcs.ne0);
+    const int i1 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0) / pcs.ne0;
+    const int i0 = (n - i3*pcs.ne2*pcs.ne1*pcs.ne0 - i2*pcs.ne1*pcs.ne0 - i1*pcs.ne0);
+
+    const uint dst_data = (i3*pcs.nb3 + i2*pcs.nb2 + i1*pcs.nb1 + i0*pcs.nb0) / OUT_TYPE_SIZE + pcs.outOff; // Based from out_
+
+    for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) {
+        const uint src = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01 + i00*pcs.nb00) / IN_TYPE_SIZE) + pcs.inOff; // Based from in_
+        out_[dst_data+i00] = OUT_TYPE(in_[src]);
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_diagmask.comp b/ggml/src/kompute-shaders/op_diagmask.comp
new file mode 100644 (file)
index 0000000..291c3fc
--- /dev/null
@@ -0,0 +1,30 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1) in;
+
+layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; };
+layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; };
+
+layout(push_constant) uniform PushConstants {
+    uint inOff;
+    uint outOff;
+    uint n_past;
+    int ne00;
+    int ne01;
+} pcs;
+
+void main() {
+    const uint i02 = gl_WorkGroupID.z;
+    const uint i01 = gl_WorkGroupID.y;
+    const uint i00 = gl_WorkGroupID.x;
+
+    const uint index = i02*pcs.ne01*pcs.ne00 + i01*pcs.ne00 + i00;
+
+    if (i00 > pcs.n_past + i01) {
+        out_[index + pcs.outOff] = uintBitsToFloat(0xFF800000);
+    } else {
+        out_[index + pcs.outOff] = in_[index + pcs.inOff];
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_gelu.comp b/ggml/src/kompute-shaders/op_gelu.comp
new file mode 100644 (file)
index 0000000..9d8c537
--- /dev/null
@@ -0,0 +1,22 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1) in;
+
+layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; };
+layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; };
+layout(push_constant) uniform PushConstants {
+    uint inOff;
+    uint outOff;
+} pcs;
+
+void main() {
+    const uint baseIndex = gl_WorkGroupID.x * 8;
+
+    for (uint x = 0; x < 8; x++) {
+        const uint i = baseIndex + x;
+        const float y = in_[i + pcs.inOff];
+        out_[i + pcs.outOff] = 0.5*y*(1.0 + tanh(clamp(SQRT_2_OVER_PI*y*(1.0 + GELU_COEF_A*y*y), -15.0, 15.0)));
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_getrows.comp b/ggml/src/kompute-shaders/op_getrows.comp
new file mode 100644 (file)
index 0000000..1a5581b
--- /dev/null
@@ -0,0 +1,17 @@
+void main() {
+    const uint i = gl_WorkGroupID.x;
+    const int r = inB[i + pcs.inBOff];
+
+    int z = 0;
+    for (uint ind = gl_LocalInvocationID.x; ind < pcs.ne00/16; ind += gl_WorkGroupSize.x) {
+        const uint inIndex = (r * pcs.nb01 + pcs.inAOff) + ind/NL * SIZE_OF_BLOCK;
+        const mat4 result = dequantize_block(inIndex, ind%NL);
+        for (uint j = 0; j < 4; ++j) {
+            for (uint k = 0; k < 4; ++k) {
+                const uint outIndex = i * pcs.nb1/BYTES_FOR_TYPE + pcs.outOff + z;
+                out_[outIndex] = result[j][k];
+                ++z;
+            }
+        }
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_getrows_f16.comp b/ggml/src/kompute-shaders/op_getrows_f16.comp
new file mode 100644 (file)
index 0000000..48c9361
--- /dev/null
@@ -0,0 +1,31 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1) in;
+
+layout (binding = 0) readonly buffer tensorInA { float16_t inA[]; };
+layout (binding = 1) readonly buffer tensorInB { int inB[]; };
+layout (binding = 2) writeonly buffer tensorOut { float out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int ne00;
+    int nb01;
+    int nb1;
+} pcs;
+
+void dequantize_row_f16(uint x /*Based from inA unaligned*/, uint y /*Based from out_*/, int k) {
+    for (int j = 0; j < k; j++) {
+        out_[y + j] = inA[x + j];
+    }
+}
+
+void main() {
+    const uint i = gl_WorkGroupID.x;
+    const int r = inB[i + pcs.inBOff];
+
+    dequantize_row_f16(r*pcs.nb01/2/*bytes for float16*/ + pcs.inAOff, i*pcs.nb1/4 + pcs.outOff, pcs.ne00);
+}
diff --git a/ggml/src/kompute-shaders/op_getrows_f32.comp b/ggml/src/kompute-shaders/op_getrows_f32.comp
new file mode 100644 (file)
index 0000000..9d7acda
--- /dev/null
@@ -0,0 +1,31 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1) in;
+
+layout (binding = 0) readonly buffer tensorInA { float inA[]; };
+layout (binding = 1) readonly buffer tensorInB { int inB[]; };
+layout (binding = 2) writeonly buffer tensorOut { float out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int ne00;
+    int nb01;
+    int nb1;
+} pcs;
+
+void dequantize_row_f32(uint x /*Based from inA unaligned*/, uint y /*Based from out_*/, int k) {
+    for (int j = 0; j < k; j++) {
+        out_[y + j] = inA[x + j];
+    }
+}
+
+void main() {
+    const uint i = gl_WorkGroupID.x;
+    const int r = inB[i + pcs.inBOff];
+
+    dequantize_row_f32(r*pcs.nb01/4 + pcs.inAOff, i*pcs.nb1/4 + pcs.outOff, pcs.ne00);
+}
diff --git a/ggml/src/kompute-shaders/op_getrows_q4_0.comp b/ggml/src/kompute-shaders/op_getrows_q4_0.comp
new file mode 100644 (file)
index 0000000..32b2e89
--- /dev/null
@@ -0,0 +1,38 @@
+#version 450
+
+#include "common.comp"
+
+#define NL 2
+#define BYTES_FOR_TYPE 4 /*bytes for float*/
+#define SIZE_OF_BLOCK sizeof_block_q4_0
+
+layout(local_size_x = 1) in;
+
+layout (binding = 0) readonly buffer tensorInA { uint8_t inA[]; };
+layout (binding = 1) readonly buffer tensorInB { int inB[]; };
+layout (binding = 2) writeonly buffer tensorOut { float out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int ne00;
+    int nb01;
+    int nb1;
+} pcs;
+
+block_q4_0 get_unaligned_block_q4_0(uint index) {
+    block_q4_0 fres;
+    fres.d = u8BufToFloat16(inA, index);
+    [[unroll]] for (uint it = 0; it != QK4_0 / 2; it++) {
+        fres.qs[it] = inA[index+2+it];
+    }
+    return fres;
+}
+
+mat4 dequantize_block(uint index, uint il) {
+    const block_q4_0 block = get_unaligned_block_q4_0(index);
+    return dequantize_q4_0(block, il);
+}
+
+#include "op_getrows.comp"
diff --git a/ggml/src/kompute-shaders/op_getrows_q4_1.comp b/ggml/src/kompute-shaders/op_getrows_q4_1.comp
new file mode 100644 (file)
index 0000000..87f2fbe
--- /dev/null
@@ -0,0 +1,39 @@
+#version 450
+
+#include "common.comp"
+
+#define NL 2
+#define BYTES_FOR_TYPE 4 /*bytes for float*/
+#define SIZE_OF_BLOCK sizeof_block_q4_1
+
+layout(local_size_x = 1) in;
+
+layout (binding = 0) readonly buffer tensorInA { uint8_t inA[]; };
+layout (binding = 1) readonly buffer tensorInB { int inB[]; };
+layout (binding = 2) writeonly buffer tensorOut { float out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int ne00;
+    int nb01;
+    int nb1;
+} pcs;
+
+block_q4_1 get_unaligned_block_q4_1(uint index) {
+    block_q4_1 fres;
+    fres.d = u8BufToFloat16(inA, index);
+    fres.m = u8BufToFloat16(inA, index+2);
+    [[unroll]] for (uint it = 0; it != QK4_1 / 2; it++) {
+        fres.qs[it] = inA[index+4+it];
+    }
+    return fres;
+}
+
+mat4 dequantize_block(uint index, uint il) {
+    const block_q4_1 block = get_unaligned_block_q4_1(index);
+    return dequantize_q4_1(block, il);
+}
+
+#include "op_getrows.comp"
diff --git a/ggml/src/kompute-shaders/op_getrows_q6_k.comp b/ggml/src/kompute-shaders/op_getrows_q6_k.comp
new file mode 100644 (file)
index 0000000..9ce3545
--- /dev/null
@@ -0,0 +1,44 @@
+#version 450
+
+#include "common.comp"
+
+#define NL 16
+#define BYTES_FOR_TYPE 4 /*bytes for float*/
+#define SIZE_OF_BLOCK sizeof_block_q6_k
+
+layout(local_size_x = 1) in;
+
+layout (binding = 0) readonly buffer tensorInA { uint8_t inA[]; };
+layout (binding = 1) readonly buffer tensorInB { int inB[]; };
+layout (binding = 2) writeonly buffer tensorOut { float out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int ne00;
+    int nb01;
+    int nb1;
+} pcs;
+
+block_q6_k get_unaligned_block_q6_k(uint index) {
+    block_q6_k fres;
+    [[unroll]] for (uint it = 0; it != QK_K / 2; it++) {
+        fres.ql[it] = inA[index + it];
+    }
+    [[unroll]] for (uint it = 0; it != QK_K / 4; it++) {
+        fres.qh[it] = inA[index + QK_K/2 + it];
+    }
+    [[unroll]] for (uint it = 0; it != QK_K / 16; it++) {
+        fres.scales[it] = int8_t(inA[index + QK_K/2 + QK_K/4 + it]);
+    }
+    fres.d = u8BufToFloat16(inA, index + QK_K/2 + QK_K/4 + QK_K/16);
+    return fres;
+}
+
+mat4 dequantize_block(uint index, uint il) {
+    const block_q6_k block = get_unaligned_block_q6_k(index);
+    return dequantize_q6_k(block, il);
+}
+
+#include "op_getrows.comp"
diff --git a/ggml/src/kompute-shaders/op_mul.comp b/ggml/src/kompute-shaders/op_mul.comp
new file mode 100644 (file)
index 0000000..c92647c
--- /dev/null
@@ -0,0 +1,52 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1024) in;
+
+layout(binding = 0) buffer restrict readonly tensorInA { float inA[]; };
+layout(binding = 1) buffer restrict readonly tensorInB { float inB[]; };
+layout(binding = 2) buffer restrict writeonly tensorOut { float out_[]; };
+
+layout(push_constant) uniform PushConstants {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int ne00;
+    int nb00;
+    int nb01;
+    int nb02;
+    int nb03;
+    int ne10;
+    int ne11;
+    int ne12;
+    int ne13;
+    int nb10;
+    int nb11;
+    int nb12;
+    int nb13;
+    int ne0;
+    int nb0;
+    int nb1;
+    int nb2;
+    int nb3;
+} pcs;
+
+void main() {
+    const uint i03 = gl_WorkGroupID.z;
+    const uint i02 = gl_WorkGroupID.y;
+    const uint i01 = gl_WorkGroupID.x;
+
+    const uint i13 = i03 % pcs.ne13;
+    const uint i12 = i02 % pcs.ne12;
+    const uint i11 = i01 % pcs.ne11;
+
+    uint src0_off = uint((i03*pcs.nb03 + i02*pcs.nb02 + i01*pcs.nb01) / 4);
+    uint src1_off = uint((i13*pcs.nb13 + i12*pcs.nb12 + i11*pcs.nb11) / 4);
+    uint dst_off  = uint((i03*pcs.nb3  + i02*pcs.nb2  + i01*pcs.nb1)  / 4);
+
+    for (uint i0 = gl_LocalInvocationID.x; i0 < pcs.ne0; i0 += gl_WorkGroupSize.x) {
+        const uint i10 = i0 % pcs.ne10;
+        out_[pcs.outOff + dst_off + i0] = inA[pcs.inAOff + src0_off + i0] * inB[pcs.inBOff + src1_off + i10];
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_mul_mat_f16.comp b/ggml/src/kompute-shaders/op_mul_mat_f16.comp
new file mode 100644 (file)
index 0000000..8f0a903
--- /dev/null
@@ -0,0 +1,67 @@
+#version 450
+
+#include "common.comp"
+
+#extension GL_KHR_shader_subgroup_arithmetic : require
+
+layout(local_size_x_id = 0) in;
+
+layout (binding = 0) readonly buffer tensorInA { float16_t inA[]; };
+layout (binding = 1) readonly buffer tensorInB { float inB[]; };
+layout (binding = 2) writeonly buffer tensorOut { float out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int ne00;
+    int ne01;
+    int ne02;
+    uint nb00;
+    uint nb01;
+    uint nb02;
+    int ne10;
+    int ne11;
+    int ne12;
+    uint nb10;
+    uint nb11;
+    uint nb12;
+    int ne0;
+    int ne1;
+    uint r2;
+    uint r3;
+} pcs;
+
+#define N_F16_F32 4
+
+void main() {
+    const uint r0 = gl_WorkGroupID.x;
+    const uint rb = gl_WorkGroupID.y*N_F16_F32;
+    const uint im = gl_WorkGroupID.z;
+
+    const uint i12 = im%pcs.ne12;
+    const uint i13 = im/pcs.ne12;
+
+    const uint offset0 = r0*pcs.nb01 + (i12/pcs.r2)*pcs.nb02 + (i13/pcs.r3)*pcs.nb02*pcs.ne02;
+
+    const uint x = offset0 / 2 + pcs.inAOff; // Based from inA
+
+    for (uint row = 0; row < N_F16_F32; ++row) {
+        uint r1 = rb + row;
+        if (r1 >= pcs.ne11) {
+            break;
+        }
+
+        const uint y = (r1*pcs.nb11 + im*pcs.nb12) / 4 + pcs.inBOff; // Based from inB
+
+        float sumf = 0;
+        for (uint i = gl_SubgroupInvocationID.x; i < pcs.ne00; i += gl_SubgroupSize) {
+            sumf += float(inA[x+i]) * float(inB[y+i]);
+        }
+
+        const float all_sum = subgroupAdd(sumf);
+        if (subgroupElect()) {
+            out_[im*pcs.ne1*pcs.ne0 + r1*pcs.ne0 + r0 + pcs.outOff] = all_sum;
+        }
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_mul_mat_mat_f32.comp b/ggml/src/kompute-shaders/op_mul_mat_mat_f32.comp
new file mode 100644 (file)
index 0000000..d1ca4ad
--- /dev/null
@@ -0,0 +1,51 @@
+#version 450
+
+#include "common.comp"
+
+#extension GL_KHR_shader_subgroup_arithmetic : require
+#extension GL_EXT_debug_printf : enable
+
+// device subgroup size
+layout (local_size_x_id = 0) in;
+
+layout(binding = 0) readonly buffer tensorInA { float inA[]; };
+layout(binding = 1) readonly buffer tensorInB { float inB[]; };
+layout(binding = 2) writeonly buffer tensorOut { float out_[]; };
+
+layout(push_constant) uniform parameter {
+  uint inAOff;
+  uint inBOff;
+  uint outOff;
+  int ne00;
+  int ne01;
+  int ne02;
+  int ne11;
+  int ne12;
+  uint nb01;
+  uint nb02;
+  uint nb11;
+  uint nb12;
+  uint nb1;
+  uint nb2;
+}
+pcs;
+
+
+void main() {
+  uvec3 gid = gl_WorkGroupID;
+
+  uint bc_ab = pcs.ne12 > pcs.ne02 ? gid.z / (pcs.ne12 / pcs.ne02) : gid.z;
+  uint bc_ba = pcs.ne02 > pcs.ne12 ? gid.z / (pcs.ne02 / pcs.ne12) : gid.z;
+
+  const uint x = (gid.x*pcs.nb01 + bc_ab*pcs.nb02) / 4 + pcs.inAOff; // Based from inA
+  const uint y = (gid.y*pcs.nb11 + bc_ba*pcs.nb12) / 4 + pcs.inBOff; // based from inB
+  float sum = 0.0f;
+  for (uint i = gl_SubgroupInvocationID.x; i < pcs.ne00; i += gl_SubgroupSize) {
+      sum += float(inA[x+i]) * float(inB[y+i]);
+  }
+
+  const float all_sum = subgroupAdd(sum);
+  if (subgroupElect()) {
+    out_[gid.z*(pcs.nb2/4) + gid.y*(pcs.nb1/4) + gid.x + pcs.outOff] = all_sum;
+  }
+}
diff --git a/ggml/src/kompute-shaders/op_mul_mat_q4_0.comp b/ggml/src/kompute-shaders/op_mul_mat_q4_0.comp
new file mode 100644 (file)
index 0000000..b0cea8b
--- /dev/null
@@ -0,0 +1,33 @@
+#version 450
+
+#include "common.comp"
+
+#define BLOCKS_IN_QUANT QK4_0
+#define SIZE_OF_BLOCK sizeof_block_q4_0
+#define N_ROWS 4
+
+#include "op_mul_mv_q_n_pre.comp"
+
+// The q4_0 version of this function
+float block_q_n_dot_y(uint block_index, uint yb, uint il) {
+    vec2 acc = vec2(0.0, 0.0);
+    const uint index = (block_index) * SIZE_OF_BLOCK + pcs.inAOff;
+    float d = float(u8BufToFloat16(inA, index));
+    float sumy = 0.0f;
+    for (int i = 0; i < BLOCKS_IN_QUANT/4; i+=2) {
+        const uint16_t b = u8BufToU16(inA, index + 2 + il + i);
+
+        const float yl0 = inB[yb + i];
+        const float yl1 = inB[yb + i + 1];
+        const float yl8 = inB[yb + i + BLOCKS_IN_QUANT/2];
+        const float yl9 = inB[yb + i + BLOCKS_IN_QUANT/2 + 1];
+
+        sumy += yl0 + yl1 + yl8 + yl9;
+
+        acc[0] += yl0 * (b & 0x000F) + yl1 / 256.f * (b & 0x0F00);
+        acc[1] += yl8 / 16.f * (b & 0x00F0) + yl9 / 4096.f * (b & 0xF000);
+    }
+    return d * (sumy * -8.f + acc[0] + acc[1]);
+}
+
+#include "op_mul_mv_q_n.comp"
diff --git a/ggml/src/kompute-shaders/op_mul_mat_q4_1.comp b/ggml/src/kompute-shaders/op_mul_mat_q4_1.comp
new file mode 100644 (file)
index 0000000..8582c61
--- /dev/null
@@ -0,0 +1,35 @@
+#version 450
+
+#include "common.comp"
+
+#define BLOCKS_IN_QUANT QK4_1
+#define SIZE_OF_BLOCK sizeof_block_q4_1
+#define N_ROWS 4
+
+#include "op_mul_mv_q_n_pre.comp"
+
+// The q4_1 version of this function
+float block_q_n_dot_y(uint block_index, uint yb, uint il) {
+    vec2 acc = vec2(0.0, 0.0);
+    const uint index = (block_index) * SIZE_OF_BLOCK + pcs.inAOff;
+    float d = float(u8BufToFloat16(inA, index));
+    float m = float(u8BufToFloat16(inA, index+2));
+
+    float sumy = 0.0f;
+    for (int i = 0; i < BLOCKS_IN_QUANT/4; i+=2) {
+        const uint16_t b = u8BufToU16(inA, index + 4 + il + i);
+
+        const float yl0 = inB[yb + i];
+        const float yl1 = inB[yb + i + 1];
+        const float yl8 = inB[yb + i + BLOCKS_IN_QUANT/2];
+        const float yl9 = inB[yb + i + BLOCKS_IN_QUANT/2 + 1];
+
+        sumy += yl0 + yl1 + yl8 + yl9;
+
+        acc[0] += yl0 * (b & 0x000F) + yl1 / 256.f * (b & 0x0F00);
+        acc[1] += yl8 / 16.f * (b & 0x00F0) + yl9 / 4096.f * (b & 0xF000);
+    }
+    return d * (acc[0] + acc[1]) + sumy * m;
+}
+
+#include "op_mul_mv_q_n.comp"
diff --git a/ggml/src/kompute-shaders/op_mul_mat_q6_k.comp b/ggml/src/kompute-shaders/op_mul_mat_q6_k.comp
new file mode 100644 (file)
index 0000000..c9baebd
--- /dev/null
@@ -0,0 +1,94 @@
+#version 450
+
+#include "common.comp"
+
+#define SIZE_OF_BLOCK sizeof_block_q6_k
+
+layout(local_size_x_id = 0) in;
+layout(local_size_y_id = 1) in;
+layout(local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer tensorInA { uint8_t inA[]; };
+layout (binding = 1) readonly buffer tensorInB { float inB[]; };
+layout (binding = 2) writeonly buffer tensorOut { float out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int ne00;
+    int ne10;
+    int ne0;
+    int ne1;
+    int ne01;
+    int gqa;
+} pcs;
+
+void main() {
+    const uint8_t kmask1 = uint8_t(0x03);
+    const uint8_t kmask2 = uint8_t(0x0C);
+    const uint8_t kmask3 = uint8_t(0x30);
+    const uint8_t kmask4 = uint8_t(0xC0);
+
+    const uint nb = pcs.ne00/QK_K;
+
+    const uint r0 = gl_WorkGroupID.x;
+    const uint r1 = gl_WorkGroupID.y;
+    const uint r2 = gl_WorkGroupID.z;
+
+    const uint row = (r0 * gl_NumSubgroups + gl_SubgroupID);
+    const uint offset0 = r2/pcs.gqa*(nb*pcs.ne0);
+    const uint x = row * nb + offset0; // Based from inA without base offset
+    const uint yy = r1*pcs.ne10 + r2*pcs.ne00*pcs.ne1+pcs.inBOff; // Based from inB
+
+    float sumf = 0;
+
+    // bits of invocation ID for gl_SubgroupSize=32:
+    //  x   x   x   x   x
+    //  4   3   2   1   0
+    // (     tid     ) ix
+    //  ip (   il    )
+
+    const uint block_stride = gl_SubgroupSize / 16;         // number of blocks each subgroup processes
+    const uint tid  = gl_SubgroupInvocationID/block_stride; // first block_stride groups have tid=0
+    const uint ix   = gl_SubgroupInvocationID%block_stride; // first block is 0..block_stride-1
+    const uint ip   = tid/8;        // first or second half of block (0 or 1)
+    const uint il   = tid%8;        // each half has 8 parts, one per scale
+    const uint n    = 4;            // 4 scales at a time (and 4 sums)
+    const uint l0   = n*il;         // offset into half-block, 0..28
+    const uint is   = 8*ip + l0/16; // 0, 1, 8, 9
+
+    const uint y_offset = 128*ip + l0;
+    const uint q_offset_l = 64*ip + l0;
+    const uint q_offset_h = 32*ip + l0;
+
+    for (uint i = ix; i < nb; i += block_stride) {
+
+        const uint baseIndex = (x + i) * SIZE_OF_BLOCK + pcs.inAOff;
+
+        const uint qlIndex = q_offset_l;
+        const uint q2Index = qlIndex + QK_K/8;
+        const uint qhIndex = q_offset_h;
+        const uint y = yy + i * QK_K + y_offset;
+
+        float sums[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+        for (uint l = 0; l < n; ++l) {
+            const uint8_t currentQ1 = inA[baseIndex + qlIndex + l];
+            const uint8_t currentQ2 = inA[baseIndex + q2Index + l];
+            const uint8_t currentQh = inA[baseIndex + QK_K/2 + qhIndex + l];
+
+            sums[0] += inB[y+l+ 0] * (int8_t((currentQ1 & 0xF) | ((currentQh & kmask1) << 4)) - 32);
+            sums[1] += inB[y+l+32] * (int8_t((currentQ2 & 0xF) | ((currentQh & kmask2) << 2)) - 32);
+            sums[2] += inB[y+l+64] * (int8_t((currentQ1  >> 4) | ((currentQh & kmask3) << 0)) - 32);
+            sums[3] += inB[y+l+96] * (int8_t((currentQ2  >> 4) | ((currentQh & kmask4) >> 2)) - 32);
+        }
+
+        float d = u8BufToFloat16(inA, baseIndex + QK_K/2 + QK_K/4 + QK_K/16);
+        sumf += d * (sums[0] * int8_t(inA[baseIndex + QK_K/2 + QK_K/4 + is]) + sums[1] * int8_t(inA[baseIndex + QK_K/2 + QK_K/4 + 2 + is]) + sums[2] * int8_t(inA[baseIndex + QK_K/2 + QK_K/4 + 4 + is]) + sums[3] * int8_t(inA[baseIndex + QK_K/2 + QK_K/4 + 6 + is]));
+    }
+
+    const float tot = subgroupAdd(sumf);
+    if (subgroupElect()) {
+        out_[r1*pcs.ne0 + r2*pcs.ne0*pcs.ne1 + row + pcs.outOff] = tot;
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_mul_mat_q8_0.comp b/ggml/src/kompute-shaders/op_mul_mat_q8_0.comp
new file mode 100644 (file)
index 0000000..34d015e
--- /dev/null
@@ -0,0 +1,73 @@
+#version 450
+
+#include "common.comp"
+
+#include "op_mul_mv_q_n_pre.comp"
+
+#define SIZE_OF_D 2
+
+#define N_DST 4 // each SIMD group works on 4 rows
+#define N_SIMDGROUP 2 // number of SIMD groups in a thread group
+#define N_SIMDWIDTH 32 // assuming SIMD group size is 32
+
+#define NB_Q8_0 8
+
+void main() {
+    // NB: hack to make compatible with AMD GPUs that have a subgroup size of 64
+    if (gl_SubgroupInvocationID > 31)
+        return;
+
+    const int nr  = N_DST;
+    const int nsg = N_SIMDGROUP;
+    const int nw  = N_SIMDWIDTH;
+
+    const int nb = pcs.ne00/QK8_0;
+    const uint r0 = gl_WorkGroupID.x;
+    const uint r1 = gl_WorkGroupID.y;
+    const uint im = gl_WorkGroupID.z;
+
+    const uint first_row = (r0 * nsg + gl_SubgroupID) * nr;
+
+    const uint i12 = im%pcs.ne12;
+    const uint i13 = im/pcs.ne12;
+
+    const uint offset0 = first_row * nb + (i12/pcs.r2)*(nb*pcs.ne01) + (i13/pcs.r3)*(nb*pcs.ne01*pcs.ne02);
+
+    const uint x = offset0*sizeof_block_q8_0 + pcs.inAOff; // Based from inA
+    const uint y = r1*pcs.ne10 + im*pcs.ne00*pcs.ne1 + pcs.inBOff; // based from inB
+
+    float yl[NB_Q8_0];
+    float sumf[N_DST]={0.f, 0.f, 0.f, 0.f};
+
+    const uint ix = gl_SubgroupInvocationID.x/4;
+    const uint il = gl_SubgroupInvocationID.x%4;
+
+    uint yb = y + ix * QK8_0 + NB_Q8_0*il;
+
+    // each thread in a SIMD group deals with NB_Q8_0 quants at a time
+    for (uint ib = ix; ib < nb; ib += nw/4) {
+        for (int i = 0; i < NB_Q8_0; ++i) {
+            yl[i] = inB[yb + i];
+        }
+
+        for (int row = 0; row < nr; row++) {
+            const uint block_offset = (ib+row*nb) * sizeof_block_q8_0;
+            float sumq = 0.f;
+            for (int iq = 0; iq < NB_Q8_0; ++iq) {
+                const int8_t qs_iq = int8_t(inA[x + block_offset + SIZE_OF_D + NB_Q8_0*il + iq]);
+                sumq += qs_iq * yl[iq];
+            }
+            const float16_t d = u8BufToFloat16(inA, x + block_offset);
+            sumf[row] += sumq*d;
+        }
+
+        yb += NB_Q8_0 * nw;
+    }
+
+    for (int row = 0; row < nr; ++row) {
+        const float tot = subgroupAdd(sumf[row]);
+        if (subgroupElect() && first_row + row < pcs.ne01) {
+            out_[r1*pcs.ne0 + im*pcs.ne0*pcs.ne1 + first_row + row] = tot;
+        }
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_mul_mv_q_n.comp b/ggml/src/kompute-shaders/op_mul_mv_q_n.comp
new file mode 100644 (file)
index 0000000..440b5ab
--- /dev/null
@@ -0,0 +1,48 @@
+void main() {
+    // NB: hack to make compatible with AMD GPUs that have a subgroup size of 64
+    if (gl_SubgroupInvocationID > 31)
+        return;
+
+    const uint nb = uint(pcs.ne00/BLOCKS_IN_QUANT);
+
+    const uint r0 = gl_WorkGroupID.x;
+    const uint r1 = gl_WorkGroupID.y;
+    const uint im = gl_WorkGroupID.z;
+
+    const uint first_row = (r0 * gl_NumSubgroups + gl_SubgroupID) * N_ROWS;
+
+    const uint i12 = im%pcs.ne12;
+    const uint i13 = im/pcs.ne12;
+
+    const uint offset0 = first_row * nb + (i12/pcs.r2)*(nb*pcs.ne01) + (i13/pcs.r3)*(nb*pcs.ne01*pcs.ne02);
+
+    const uint x = offset0; // Based from inA without base offset
+    const uint y = r1*uint(pcs.ne10)+im*pcs.ne00*pcs.ne1+pcs.inBOff; // Based from inB
+
+    float sumf[N_ROWS] = {0.0f, 0.0f, 0.0f, 0.0f};
+
+    const uint ix = gl_SubgroupInvocationID/2;
+    const uint il = (BLOCKS_IN_QUANT/4)*(gl_SubgroupInvocationID%2);
+
+    uint yb = y + ix * BLOCKS_IN_QUANT + il;
+
+    //debugPrintfEXT("gl_NumSubgroups=%d, gl_SubgroupID=%d, gl_SubgroupInvocationID=%d, glSubgroupSize=%d, gl_WorkGroupSize.x=%d, gl_WorkGroupSize.y=%d, gl_WorkGroupSize.z=%d\n",
+    //    gl_NumSubgroups, gl_SubgroupID, gl_SubgroupInvocationID, gl_SubgroupSize,
+    //    gl_WorkGroupSize.x, gl_WorkGroupSize.y, gl_WorkGroupSize.z);
+
+    for (uint ib = ix; ib < nb; ib += 16) {
+        for (int row = 0; row < N_ROWS; row++) {
+            const uint block_index = x + ib + row * nb;
+            sumf[row] += block_q_n_dot_y(block_index, yb, il);
+        }
+
+        yb += BLOCKS_IN_QUANT * 16;
+    }
+
+    for (int row = 0; row < N_ROWS; ++row) {
+        const float tot = subgroupAdd(sumf[row]);
+        if (first_row + row < pcs.ne01 && subgroupElect()) {
+            out_[r1*pcs.ne0 + im*pcs.ne0*pcs.ne1 + first_row + row + pcs.outOff] = tot;
+        }
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_mul_mv_q_n_pre.comp b/ggml/src/kompute-shaders/op_mul_mv_q_n_pre.comp
new file mode 100644 (file)
index 0000000..7912b09
--- /dev/null
@@ -0,0 +1,22 @@
+layout(local_size_x_id = 0) in;
+layout(local_size_y = 1) in;
+layout(local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer tensorInA { uint8_t inA[]; };
+layout (binding = 1) readonly buffer tensorInB { float inB[]; };
+layout (binding = 2) writeonly buffer tensorOut { float out_[]; };
+
+layout (push_constant) uniform parameter {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int  ne00;
+    int  ne01;
+    int  ne02;
+    int  ne10;
+    int  ne12;
+    int  ne0;
+    int  ne1;
+    uint r2;
+    uint r3;
+} pcs;
diff --git a/ggml/src/kompute-shaders/op_norm.comp b/ggml/src/kompute-shaders/op_norm.comp
new file mode 100644 (file)
index 0000000..ad0c3c0
--- /dev/null
@@ -0,0 +1,84 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 256) in;
+
+layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; };
+layout(binding = 1) buffer restrict tensorOut { float out_[]; };
+
+layout(push_constant) uniform PushConstants {
+    uint inOff;
+    uint outOff;
+    uint ne00;
+    uint nb01;
+    float eps;
+} pcs;
+
+shared float sum[gl_WorkGroupSize.x];
+
+void main() {
+    const uint x = (gl_WorkGroupID.x*pcs.nb01/4) + pcs.inOff; // Based from in_
+    // MEAN
+    // parallel sum
+    sum[gl_LocalInvocationID.x] = 0.0;
+    for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) {
+        sum[gl_LocalInvocationID.x] += in_[x+i00];
+    }
+
+    // reduce
+    barrier();
+    memoryBarrierShared();
+    [[unroll]] for (uint i = gl_WorkGroupSize.x/2; i > 0; i /= 2) {
+        if (gl_LocalInvocationID.x < i) {
+            sum[gl_LocalInvocationID.x] += sum[gl_LocalInvocationID.x + i];
+        }
+        barrier();
+        memoryBarrierShared();
+    }
+
+    // broadcast
+    if (gl_LocalInvocationID.x == 0) {
+        sum[0] /= float(pcs.ne00);
+    }
+    barrier();
+    memoryBarrierShared();
+    const float mean = sum[0];
+
+    // recenter
+    const uint y = (gl_WorkGroupID.x*pcs.ne00) + pcs.outOff; // Based from out_
+    for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) {
+        out_[y+i00] = in_[x+i00] - mean;
+    }
+
+    // VARIANCE
+    // parallel sum
+    sum[gl_LocalInvocationID.x] = 0.0;
+    for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) {
+        sum[gl_LocalInvocationID.x] += out_[y+i00] * out_[y+i00];
+    }
+
+    // reduce
+    barrier();
+    memoryBarrierShared();
+    [[unroll]] for (uint i = gl_WorkGroupSize.x/2; i > 0; i /= 2) {
+        if (gl_LocalInvocationID.x < i) {
+            sum[gl_LocalInvocationID.x] += sum[gl_LocalInvocationID.x + i];
+        }
+        barrier();
+        memoryBarrierShared();
+    }
+
+    // broadcast
+    if (gl_LocalInvocationID.x == 0) {
+        sum[0] /= float(pcs.ne00);
+    }
+    barrier();
+    memoryBarrierShared();
+    const float variance = sum[0];
+
+    const float scale = 1.0f/sqrt(variance + pcs.eps);
+    for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) {
+        out_[y+i00] *= scale;
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_relu.comp b/ggml/src/kompute-shaders/op_relu.comp
new file mode 100644 (file)
index 0000000..52a601f
--- /dev/null
@@ -0,0 +1,21 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1) in;
+
+layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; };
+layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; };
+layout(push_constant) uniform PushConstants {
+    uint inOff;
+    uint outOff;
+} pcs;
+
+void main() {
+    const uint baseIndex = gl_WorkGroupID.x * 4;
+
+    for (uint x = 0; x < 4; x++) {
+        const uint i = baseIndex + x;
+        out_[i + pcs.outOff] = max(0.0, in_[i + pcs.inOff]);
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_rmsnorm.comp b/ggml/src/kompute-shaders/op_rmsnorm.comp
new file mode 100644 (file)
index 0000000..da658c1
--- /dev/null
@@ -0,0 +1,53 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 512) in;
+
+layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; };
+layout(binding = 1) buffer restrict tensorOut { float out_[]; };
+
+layout(push_constant) uniform PushConstants {
+    uint inOff;
+    uint outOff;
+    uint ne00;
+    uint nb01;
+    float eps;
+} pcs;
+
+shared float sum[gl_WorkGroupSize.x];
+
+void main() {
+    const uint x = (gl_WorkGroupID.x*pcs.nb01/4) + pcs.inOff; // Based from in_
+
+    // parallel sum
+    sum[gl_LocalInvocationID.x] = 0.0;
+    for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) {
+        sum[gl_LocalInvocationID.x] += in_[x+i00] * in_[x+i00];
+    }
+
+    // reduce
+    barrier();
+    memoryBarrierShared();
+    [[unroll]] for (uint i = gl_WorkGroupSize.x/2; i > 0; i /= 2) {
+        if (gl_LocalInvocationID.x < i) {
+            sum[gl_LocalInvocationID.x] += sum[gl_LocalInvocationID.x + i];
+        }
+        barrier();
+        memoryBarrierShared();
+    }
+
+    // broadcast
+    if (gl_LocalInvocationID.x == 0) {
+        sum[0] /= float(pcs.ne00);
+    }
+    barrier();
+    memoryBarrierShared();
+
+    const float scale = 1.0f/sqrt(sum[0] + pcs.eps);
+
+    const uint y = (gl_WorkGroupID.x*pcs.ne00) + pcs.outOff; // Based from out_
+    for (uint i00 = gl_LocalInvocationID.x; i00 < pcs.ne00; i00 += gl_WorkGroupSize.x) {
+        out_[y+i00] = in_[x+i00] * scale;
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_rope_f16.comp b/ggml/src/kompute-shaders/op_rope_f16.comp
new file mode 100644 (file)
index 0000000..1a4058b
--- /dev/null
@@ -0,0 +1,73 @@
+#version 450
+
+#include "rope_common.comp"
+
+layout(binding = 0) buffer restrict readonly  tensorInA { float16_t inA[]; };
+layout(binding = 1) buffer restrict readonly  tensorInB { int       inB[]; };
+layout(binding = 2) buffer restrict writeonly tensorOut { float16_t out_[]; };
+
+void main() {
+    const uint i3 = gl_WorkGroupID.z;
+    const uint i2 = gl_WorkGroupID.y;
+    const uint i1 = gl_WorkGroupID.x;
+
+    const bool is_neox = (pcs.mode & 2) != 0;
+
+    float corr_dims[2];
+    rope_yarn_corr_dims(pcs.n_dims, pcs.n_ctx_orig, pcs.freq_base, pcs.beta_fast, pcs.beta_slow, corr_dims);
+
+    const float theta_scale = pow(pcs.freq_base, -2.0/pcs.n_dims);
+
+    const int p = inB[pcs.inBOff + i2];
+
+    float theta = float(p);
+
+    if (!is_neox) {
+        for (uint i0 = 0; i0 < pcs.ne0; i0 += 2) {
+            float cos_theta, sin_theta;
+            rope_yarn(theta, pcs.freq_scale, corr_dims, i0, pcs.ext_factor, pcs.attn_factor, cos_theta, sin_theta);
+
+            theta *= theta_scale;
+
+            const uint src      = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 2) + pcs.inAOff; // Based from in
+            const uint dst_data = uint((i3*pcs.nb3  + i2*pcs.nb2  + i1*pcs.nb1  + i0*pcs.nb0)  / 2) + pcs.outOff; // Based from out_
+
+            const float x0 = float(inA[src]);
+            const float x1 = float(inA[src+1]);
+
+            out_[dst_data]   = float16_t(x0*cos_theta - x1*sin_theta);
+            out_[dst_data+1] = float16_t(x0*sin_theta + x1*cos_theta);
+        }
+    } else {
+        const float inv_ndims = -1.f/pcs.n_dims;
+        for (uint ic = 0; ic < pcs.n_dims; ic += 2) {
+            const uint cur_rot = ic;
+
+            float cos_theta, sin_theta;
+            rope_yarn(theta, pcs.freq_scale, corr_dims, cur_rot, pcs.ext_factor, pcs.attn_factor, cos_theta, sin_theta);
+
+            theta *= theta_scale;
+
+            const uint i0 = ic/2;
+
+            const uint src      = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 2) + pcs.inAOff; // Based from in
+            const uint dst_data = uint((i3*pcs.nb3  + i2*pcs.nb2  + i1*pcs.nb1  + i0*pcs.nb0)  / 2) + pcs.outOff; // Based from out_
+
+            const float x0 = float(inA[src]);
+            const float x1 = float(inA[src+pcs.n_dims/2]);
+
+            out_[dst_data]              = float16_t(x0*cos_theta - x1*sin_theta);
+            out_[dst_data+pcs.n_dims/2] = float16_t(x0*sin_theta + x1*cos_theta);
+        }
+
+        for (uint ic = pcs.n_dims; ic < pcs.ne0; ic += 2) {
+            const uint i0 = ic;
+
+            const uint src      = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 2) + pcs.inAOff; // Based from in
+            const uint dst_data = uint((i3*pcs.nb3  + i2*pcs.nb2  + i1*pcs.nb1  + i0*pcs.nb0)  / 2) + pcs.outOff; // Based from out_
+
+            out_[dst_data + 0] = inA[src + 0];
+            out_[dst_data + 1] = inA[src + 1];
+        }
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_rope_f32.comp b/ggml/src/kompute-shaders/op_rope_f32.comp
new file mode 100644 (file)
index 0000000..65e0382
--- /dev/null
@@ -0,0 +1,73 @@
+#version 450
+
+#include "rope_common.comp"
+
+layout(binding = 0) buffer restrict readonly  tensorInA { float inA[]; };
+layout(binding = 1) buffer restrict readonly  tensorInB { int   inB[]; };
+layout(binding = 2) buffer restrict writeonly tensorOut { float out_[]; };
+
+void main() {
+    const uint i3 = gl_WorkGroupID.z;
+    const uint i2 = gl_WorkGroupID.y;
+    const uint i1 = gl_WorkGroupID.x;
+
+    const bool is_neox = (pcs.mode & 2) != 0;
+
+    float corr_dims[2];
+    rope_yarn_corr_dims(pcs.n_dims, pcs.n_ctx_orig, pcs.freq_base, pcs.beta_fast, pcs.beta_slow, corr_dims);
+
+    const float theta_scale = pow(pcs.freq_base, -2.0/pcs.n_dims);
+
+    const int p = inB[pcs.inBOff + i2];
+
+    float theta = float(p);
+
+    if (!is_neox) {
+        for (uint i0 = 0; i0 < pcs.ne0; i0 += 2) {
+            float cos_theta, sin_theta;
+            rope_yarn(theta, pcs.freq_scale, corr_dims, i0, pcs.ext_factor, pcs.attn_factor, cos_theta, sin_theta);
+
+            theta *= theta_scale;
+
+            const uint src      = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 4) + pcs.inAOff; // Based from in
+            const uint dst_data = uint((i3*pcs.nb3  + i2*pcs.nb2  + i1*pcs.nb1  + i0*pcs.nb0)  / 4) + pcs.outOff; // Based from out_
+
+            const float x0 = inA[src];
+            const float x1 = inA[src+1];
+
+            out_[dst_data]   = x0*cos_theta - x1*sin_theta;
+            out_[dst_data+1] = x0*sin_theta + x1*cos_theta;
+        }
+    } else {
+        const float inv_ndims = -1.f/pcs.n_dims;
+        for (uint ic = 0; ic < pcs.n_dims; ic += 2) {
+            const uint cur_rot = ic;
+
+            float cos_theta, sin_theta;
+            rope_yarn(theta, pcs.freq_scale, corr_dims, cur_rot, pcs.ext_factor, pcs.attn_factor, cos_theta, sin_theta);
+
+            theta *= theta_scale;
+
+            const uint i0 = ic/2;
+
+            const uint src      = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 4) + pcs.inAOff; // Based from in
+            const uint dst_data = uint((i3*pcs.nb3  + i2*pcs.nb2  + i1*pcs.nb1  + i0*pcs.nb0)  / 4) + pcs.outOff; // Based from out_
+
+            const float x0 = inA[src];
+            const float x1 = inA[src+pcs.n_dims/2];
+
+            out_[dst_data] = x0*cos_theta - x1*sin_theta;
+            out_[dst_data+pcs.n_dims/2] = x0*sin_theta + x1*cos_theta;
+        }
+
+        for (uint ic = pcs.n_dims; ic < pcs.ne0; ic += 2) {
+            const uint i0 = ic;
+
+            const uint src = uint((i3*pcs.nb03 + i2*pcs.nb02 + i1*pcs.nb01 + i0*pcs.nb00) / 4) + pcs.inAOff; // Based from in
+            const uint dst_data = uint((i3*pcs.nb3  + i2*pcs.nb2  + i1*pcs.nb1  + i0*pcs.nb0) / 4) + pcs.outOff; // Based from out_
+
+            out_[dst_data + 0] = inA[src + 0];
+            out_[dst_data + 1] = inA[src + 1];
+        }
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_scale.comp b/ggml/src/kompute-shaders/op_scale.comp
new file mode 100644 (file)
index 0000000..bdae267
--- /dev/null
@@ -0,0 +1,19 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1) in;
+
+layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; };
+layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; };
+
+layout(push_constant) uniform PushConstants {
+    uint inOff;
+    uint outOff;
+    float scale;
+} pcs;
+
+void main() {
+    const uint i = gl_WorkGroupID.x;
+    out_[i + pcs.outOff] = in_[i + pcs.inOff] * pcs.scale;
+}
diff --git a/ggml/src/kompute-shaders/op_scale_8.comp b/ggml/src/kompute-shaders/op_scale_8.comp
new file mode 100644 (file)
index 0000000..ada6975
--- /dev/null
@@ -0,0 +1,23 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1) in;
+
+layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; };
+layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; };
+
+layout(push_constant) uniform PushConstants {
+    uint inOff;
+    uint outOff;
+    float scale;
+} pcs;
+
+void main() {
+    const uint baseIndex = gl_WorkGroupID.x * 8;
+
+    for (uint x = 0; x < 8; x++) {
+        const uint i = baseIndex + x;
+        out_[i + pcs.outOff] = in_[i + pcs.inOff] * pcs.scale;
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_silu.comp b/ggml/src/kompute-shaders/op_silu.comp
new file mode 100644 (file)
index 0000000..0fb8e4b
--- /dev/null
@@ -0,0 +1,22 @@
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x = 1) in;
+
+layout(binding = 0) buffer restrict readonly tensorIn { float in_[]; };
+layout(binding = 1) buffer restrict writeonly tensorOut { float out_[]; };
+layout(push_constant) uniform PushConstants {
+    uint inOff;
+    uint outOff;
+} pcs;
+
+void main() {
+    const uint baseIndex = gl_WorkGroupID.x * 4;
+
+    for (uint x = 0; x < 4; x++) {
+        const uint i = baseIndex + x;
+        const float y = in_[i + pcs.inOff];
+        out_[i + pcs.outOff] = y / (1.0 + exp(-y));
+    }
+}
diff --git a/ggml/src/kompute-shaders/op_softmax.comp b/ggml/src/kompute-shaders/op_softmax.comp
new file mode 100644 (file)
index 0000000..7bc9176
--- /dev/null
@@ -0,0 +1,56 @@
+// TODO: implement multi-simd softmax (llama.cpp commit e16b9fa4)
+
+#version 450
+
+#include "common.comp"
+
+layout(local_size_x_id = 0) in;
+
+layout(binding = 0) buffer restrict readonly tensorInA { float inA[]; };
+layout(binding = 1) buffer restrict readonly tensorInB { float inB[]; };
+layout(binding = 2) buffer restrict writeonly tensorOut { float out_[]; };
+
+layout(push_constant) uniform PushConstants {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int ne00;
+    int ne01;
+    int ne02;
+    float scale;
+    int mask;
+} pcs;
+
+void main() {
+    if (gl_SubgroupInvocationID > 31)
+        return;
+
+    const uint i03 = gl_WorkGroupID.z;
+    const uint i02 = gl_WorkGroupID.y;
+    const uint i01 = gl_WorkGroupID.x;
+
+    const uint extra_off = i03*pcs.ne02*pcs.ne01*pcs.ne00 + i02*pcs.ne01*pcs.ne00 + i01*pcs.ne00;
+    const uint psrc0 = extra_off + pcs.inAOff; // Based from inA
+    const uint pmask = i01*pcs.ne00 + pcs.inBOff; // Based from inB
+    const uint pdst = extra_off + pcs.outOff; // Based from out_
+
+    // parallel max
+    float localMax = uintBitsToFloat(0xFF800000);
+    for (uint i00 = gl_SubgroupInvocationID.x; i00 < pcs.ne00; i00 += 32) {
+        localMax = max(localMax, inA[psrc0 + i00]*pcs.scale + (pcs.mask!=0 ? inB[pmask + i00] : 0.0f));
+    }
+    float max_ = subgroupMax(localMax);
+
+    // parallel sum
+    float localSum = 0.0f;
+    for (uint i00 = gl_SubgroupInvocationID.x; i00 < pcs.ne00; i00 += 32) {
+        const float exp_psrc0 = exp(inA[psrc0 + i00]*pcs.scale + (pcs.mask!=0 ? inB[pmask + i00] : 0.0f) - max_);
+        localSum += exp_psrc0;
+        out_[pdst + i00] = exp_psrc0;
+    }
+
+    const float sum = subgroupAdd(localSum);
+    for (uint i00 = gl_SubgroupInvocationID.x; i00 < pcs.ne00; i00 += 32) {
+        out_[pdst + i00] /= sum;
+    }
+}
diff --git a/ggml/src/kompute-shaders/rope_common.comp b/ggml/src/kompute-shaders/rope_common.comp
new file mode 100644 (file)
index 0000000..7b9394c
--- /dev/null
@@ -0,0 +1,67 @@
+#include "common.comp"
+
+// TODO: use a local size of 32 or more (Metal uses 1024)
+layout(local_size_x = 1) in;
+
+layout (push_constant) uniform parameter {
+    uint inAOff;
+    uint inBOff;
+    uint outOff;
+    int n_dims;
+    int mode;
+    int n_ctx_orig;
+    float freq_base;
+    float freq_scale;
+    float ext_factor;
+    float attn_factor;
+    float beta_fast;
+    float beta_slow;
+    uint nb00;
+    uint nb01;
+    uint nb02;
+    uint nb03;
+    int ne0;
+    uint nb0;
+    uint nb1;
+    uint nb2;
+    uint nb3;
+} pcs;
+
+float rope_yarn_ramp(const float low, const float high, const float i0) {
+    const float y = (i0 / 2 - low) / max(0.001f, high - low);
+    return 1.0f - min(1.0f, max(0.0f, y));
+}
+
+// YaRN algorithm based on LlamaYaRNScaledRotaryEmbedding.py from https://github.com/jquesnelle/yarn
+// MIT licensed. Copyright (c) 2023 Jeffrey Quesnelle and Bowen Peng.
+void rope_yarn(
+    float theta_extrap, float freq_scale, float corr_dims[2], float i0, float ext_factor, float mscale,
+    out float cos_theta, out float sin_theta
+) {
+    // Get n-d rotational scaling corrected for extrapolation
+    float theta_interp = freq_scale * theta_extrap;
+    float theta = theta_interp;
+    if (ext_factor != 0.0f) {
+        float ramp_mix = rope_yarn_ramp(corr_dims[0], corr_dims[1], i0) * ext_factor;
+        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;
+
+        // Get n-d magnitude scaling corrected for interpolation
+        mscale *= 1.0f + 0.1f * log(1.0f / freq_scale);
+    }
+    cos_theta = cos(theta) * mscale;
+    sin_theta = sin(theta) * mscale;
+}
+
+// Apparently solving `n_rot = 2pi * x * base^((2 * max_pos_emb) / n_dims)` for x, we get
+// `corr_fac(n_rot) = n_dims * log(max_pos_emb / (n_rot * 2pi)) / (2 * log(base))`
+float rope_yarn_corr_factor(int n_dims, int n_ctx_orig, float n_rot, float base) {
+    return n_dims * log(n_ctx_orig / (n_rot * TWOPI_F)) / (2 * log(base));
+}
+
+void rope_yarn_corr_dims(
+    int n_dims, int n_ctx_orig, float freq_base, float beta_fast, float beta_slow, out float dims[2]
+) {
+    // start and end correction dims
+    dims[0] = max(0.0f,         floor(rope_yarn_corr_factor(n_dims, n_ctx_orig, beta_fast, freq_base)));
+    dims[1] = min(n_dims - 1.0f, ceil(rope_yarn_corr_factor(n_dims, n_ctx_orig, beta_slow, freq_base)));
+}
diff --git a/ggml/src/sgemm.cpp b/ggml/src/sgemm.cpp
new file mode 100644 (file)
index 0000000..6626ceb
--- /dev/null
@@ -0,0 +1,1027 @@
+// Copyright 2024 Mozilla Foundation
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+//
+//                   _   _          ___ _      _   ___
+//                  | |_(_)_ _ _  _| _ ) |    /_\ / __|
+//                  |  _| | ' \ || | _ \ |__ / _ \\__ \.
+//                   \__|_|_||_\_, |___/____/_/ \_\___/
+//                             |__/
+//
+//                    BASIC LINEAR ALGEBRA SUBPROGRAMS
+//
+//
+// This file implements multithreaded CPU matrix multiplication for the
+// common contiguous use case C = Aᵀ * B. These kernels are designed to
+// have excellent performance[1] for matrices that fit in the CPU cache
+// without imposing any overhead such as cache filling or malloc calls.
+//
+// This implementation does not guarantee any upper bound with rounding
+// errors, which grow along with k. Our goal's to maximally exploit the
+// hardware for performance, and then use whatever resources remain for
+// improving numerical accuracy.
+//
+// [1] J. Tunney, ‘LLaMA Now Goes Faster on CPUs’, Mar. 2024. [Online].
+//     Available: https://justine.lol/matmul/. [Accessed: 29-Mar-2024].
+
+#if defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpedantic"
+#pragma GCC diagnostic ignored "-Wignored-attributes"
+#endif
+
+#include "sgemm.h"
+#include "ggml-impl.h"
+#include "ggml-quants.h"
+
+#ifdef _MSC_VER
+#define NOINLINE __declspec(noinline)
+#else
+#define NOINLINE __attribute__((__noinline__))
+#endif
+
+#if defined(__ARM_NEON) || defined(__AVX512F__)
+#define VECTOR_REGISTERS 32
+#else
+#define VECTOR_REGISTERS 16
+#endif
+
+#define MM256_SET_M128I(a, b) _mm256_insertf128_si256(_mm256_castsi128_si256(b), (a), 1)
+
+namespace {
+
+inline float unhalf(ggml_fp16_t d) {
+    return GGML_FP16_TO_FP32(d);
+}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// VECTORIZED ARITHMETIC OPERATIONS
+
+#if defined(__SSE__) || defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
+inline __m128 add(__m128 x, __m128 y) { return _mm_add_ps(x, y); }
+inline __m128 sub(__m128 x, __m128 y) { return _mm_sub_ps(x, y); }
+inline __m128 mul(__m128 x, __m128 y) { return _mm_mul_ps(x, y); }
+#endif  // __SSE__
+
+#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
+inline __m256 add(__m256 x, __m256 y) { return _mm256_add_ps(x, y); }
+inline __m256 sub(__m256 x, __m256 y) { return _mm256_sub_ps(x, y); }
+inline __m256 mul(__m256 x, __m256 y) { return _mm256_mul_ps(x, y); }
+#endif // __AVX__
+
+#if defined(__AVX512F__)
+inline __m512 add(__m512 x, __m512 y) { return _mm512_add_ps(x, y); }
+inline __m512 sub(__m512 x, __m512 y) { return _mm512_sub_ps(x, y); }
+inline __m512 mul(__m512 x, __m512 y) { return _mm512_mul_ps(x, y); }
+#endif // __AVX512F__
+
+#if defined(__ARM_NEON)
+inline float32x4_t add(float32x4_t x, float32x4_t y) { return vaddq_f32(x, y); }
+inline float32x4_t sub(float32x4_t x, float32x4_t y) { return vsubq_f32(x, y); }
+inline float32x4_t mul(float32x4_t x, float32x4_t y) { return vmulq_f32(x, y); }
+#endif // __ARM_NEON
+
+#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
+inline float16x8_t add(float16x8_t x, float16x8_t y) { return vaddq_f16(x, y); }
+inline float16x8_t sub(float16x8_t x, float16x8_t y) { return vsubq_f16(x, y); }
+inline float16x8_t mul(float16x8_t x, float16x8_t y) { return vmulq_f16(x, y); }
+#endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// VECTORIZED FUSED MULTIPLY ADD
+
+/**
+ * Computes a * b + c.
+ */
+template <typename T, typename U>
+inline U madd(T a, T b, U c) {
+    return add(mul(a, b), c);
+}
+
+#if defined(__FMA__)
+#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
+template <>
+inline __m256 madd(__m256 a, __m256 b, __m256 c) {
+    return _mm256_fmadd_ps(a, b, c);
+}
+#endif
+#if defined(__AVX512F__)
+template <>
+inline __m512 madd(__m512 a, __m512 b, __m512 c) {
+    return _mm512_fmadd_ps(a, b, c);
+}
+#endif
+#endif
+
+#if defined(__ARM_FEATURE_FMA)
+template <>
+inline float32x4_t madd(float32x4_t a, float32x4_t b, float32x4_t c) {
+    return vfmaq_f32(c, b, a);
+}
+#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) && !defined(_MSC_VER)
+template <>
+inline float16x8_t madd(float16x8_t a, float16x8_t b, float16x8_t c) {
+    return vfmaq_f16(c, b, a);
+}
+#endif
+#endif
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// VECTORIZED HORIZONTAL SUM
+
+#if defined(__ARM_NEON)
+inline float hsum(float32x4_t x) {
+    return vaddvq_f32(x);
+}
+#endif // __ARM_NEON
+
+#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) && !defined(_MSC_VER)
+inline float hsum(float16x8_t x) {
+    return vaddvq_f32(vaddq_f32(vcvt_f32_f16(vget_low_f16(x)),
+                                vcvt_f32_f16(vget_high_f16(x))));
+}
+#endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
+
+#if defined(__SSE__) || defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
+inline float hsum(__m128 x) {
+#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
+    x = _mm_add_ps(x, _mm_movehl_ps(x, x));
+    x = _mm_add_ss(x, _mm_movehdup_ps(x));
+#else
+    __m128 t;
+    t = _mm_shuffle_ps(x, x, _MM_SHUFFLE(2, 3, 0, 1));
+    x = _mm_add_ps(x, t);
+    t = _mm_movehl_ps(t, x);
+    x = _mm_add_ss(x, t);
+#endif
+    return _mm_cvtss_f32(x);
+}
+#endif
+
+#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
+inline float hsum(__m256 x) {
+    return hsum(_mm_add_ps(_mm256_extractf128_ps(x, 1),
+                           _mm256_castps256_ps128(x)));
+}
+#endif // __AVX__
+
+#if defined(__AVX512F__)
+inline float hsum(__m512 x) {
+    return _mm512_reduce_add_ps(x);
+}
+#endif // __AVX512F__
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// VECTORIZED MEMORY LOADING
+
+template <typename T, typename U> T load(const U *);
+
+#if defined(__ARM_NEON)
+template <> inline float32x4_t load(const float *p) {
+    return vld1q_f32(p);
+}
+#if !defined(_MSC_VER)
+template <> inline float16x8_t load(const ggml_fp16_t *p) {
+    return vld1q_f16((const float16_t *)p);
+}
+template <> inline float32x4_t load(const ggml_fp16_t *p) {
+    return vcvt_f32_f16(vld1_f16((const float16_t *)p));
+}
+#endif // _MSC_VER
+#endif // __ARM_NEON
+
+#if defined(__SSE__) || defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
+template <> inline __m128 load(const float *p) {
+    return _mm_loadu_ps(p);
+}
+#endif  // __SSE__
+
+#if defined(__AVX__) || defined(__AVX2__) || defined(__AVX512F__)
+template <> inline __m256 load(const float *p) {
+    return _mm256_loadu_ps(p);
+}
+#endif // __AVX__
+
+#if defined(__F16C__)
+template <> inline __m256 load(const ggml_fp16_t *p) {
+    return _mm256_cvtph_ps(_mm_loadu_si128((const __m128i *)p));
+}
+#endif // __F16C__
+
+#if defined(__AVX512F__)
+template <> inline __m512 load(const float *p) {
+    return _mm512_loadu_ps(p);
+}
+template <> inline __m512 load(const ggml_fp16_t *p) {
+    return _mm512_cvtph_ps(_mm256_loadu_si256((const __m256i *)p));
+}
+#endif // __AVX512F__
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// FLOATING POINT MATRIX MULTIPLICATION
+
+template <int KN, typename D, typename V, typename TA, typename TB, typename TC>
+class tinyBLAS {
+  public:
+    tinyBLAS(int64_t k,
+             const TA *A, int64_t lda,
+             const TB *B, int64_t ldb,
+             TC *C, int64_t ldc,
+             int ith, int nth)
+        : A(A), B(B), C(C), k(k), lda(lda), ldb(ldb), ldc(ldc), ith(ith), nth(nth) {
+    }
+
+    void matmul(int64_t m, int64_t n) {
+        mnpack(0, m, 0, n);
+    }
+
+  private:
+    NOINLINE void mnpack(int64_t m0, int64_t m, int64_t n0, int64_t n) {
+        int64_t mc, nc, mp, np;
+        switch ((MIN(m - m0, 5) << 4) | MIN(n - n0, 5)) {
+#if VECTOR_REGISTERS == 32
+        case 0x55:
+            mc = 5;
+            nc = 5;
+            gemm<5, 5>(m0, m, n0, n);
+            break;
+        case 0x45:
+            mc = 4;
+            nc = 5;
+            gemm<4, 5>(m0, m, n0, n);
+            break;
+        case 0x54:
+            mc = 5;
+            nc = 4;
+            gemm<5, 4>(m0, m, n0, n);
+            break;
+        case 0x44:
+            mc = 4;
+            nc = 4;
+            gemm<4, 4>(m0, m, n0, n);
+            break;
+        case 0x53:
+            mc = 5;
+            nc = 3;
+            gemm<5, 3>(m0, m, n0, n);
+            break;
+        case 0x35:
+            mc = 3;
+            nc = 5;
+            gemm<3, 5>(m0, m, n0, n);
+            break;
+        case 0x43:
+            mc = 4;
+            nc = 3;
+            gemm<4, 3>(m0, m, n0, n);
+            break;
+#else
+        case 0x55:
+        case 0x54:
+        case 0x53:
+        case 0x45:
+        case 0x44:
+        case 0x43:
+            mc = 4;
+            nc = 3;
+            gemm<4, 3>(m0, m, n0, n);
+            break;
+        case 0x35:
+#endif
+        case 0x34:
+            mc = 3;
+            nc = 4;
+            gemm<3, 4>(m0, m, n0, n);
+            break;
+        case 0x52:
+            mc = 5;
+            nc = 2;
+            gemm<5, 2>(m0, m, n0, n);
+            break;
+        case 0x33:
+            mc = 3;
+            nc = 3;
+            gemm<3, 3>(m0, m, n0, n);
+            break;
+        case 0x25:
+            mc = 2;
+            nc = 5;
+            gemm<2, 5>(m0, m, n0, n);
+            break;
+        case 0x42:
+            mc = 4;
+            nc = 2;
+            gemm<4, 2>(m0, m, n0, n);
+            break;
+        case 0x24:
+            mc = 2;
+            nc = 4;
+            gemm<2, 4>(m0, m, n0, n);
+            break;
+        case 0x32:
+            mc = 3;
+            nc = 2;
+            gemm<3, 2>(m0, m, n0, n);
+            break;
+        case 0x23:
+            mc = 2;
+            nc = 3;
+            gemm<2, 3>(m0, m, n0, n);
+            break;
+        case 0x51:
+            mc = 5;
+            nc = 1;
+            gemm<5, 1>(m0, m, n0, n);
+            break;
+        case 0x41:
+            mc = 4;
+            nc = 1;
+            gemm<4, 1>(m0, m, n0, n);
+            break;
+        case 0x22:
+            mc = 2;
+            nc = 2;
+            gemm<2, 2>(m0, m, n0, n);
+            break;
+        case 0x15:
+            mc = 1;
+            nc = 5;
+            gemm<1, 5>(m0, m, n0, n);
+            break;
+        case 0x14:
+            mc = 1;
+            nc = 4;
+            gemm<1, 4>(m0, m, n0, n);
+            break;
+        case 0x31:
+            mc = 3;
+            nc = 1;
+            gemm<3, 1>(m0, m, n0, n);
+            break;
+        case 0x13:
+            mc = 1;
+            nc = 3;
+            gemm<1, 3>(m0, m, n0, n);
+            break;
+        case 0x21:
+            mc = 2;
+            nc = 1;
+            gemm<2, 1>(m0, m, n0, n);
+            break;
+        case 0x12:
+            mc = 1;
+            nc = 2;
+            gemm<1, 2>(m0, m, n0, n);
+            break;
+        case 0x11:
+            mc = 1;
+            nc = 1;
+            gemm<1, 1>(m0, m, n0, n);
+            break;
+        default:
+            return;
+        }
+        mp = m0 + (m - m0) / mc * mc;
+        np = n0 + (n - n0) / nc * nc;
+        mnpack(mp, m, n0, np);
+        mnpack(m0, m, np, n);
+    }
+
+    template <int RM, int RN>
+    NOINLINE void gemm(int64_t m0, int64_t m, int64_t n0, int64_t n) {
+        int64_t ytiles = (m - m0) / RM;
+        int64_t xtiles = (n - n0) / RN;
+        int64_t tiles = xtiles * ytiles;
+        int64_t duty = (tiles + nth - 1) / nth;
+        int64_t start = duty * ith;
+        int64_t end = start + duty;
+        if (end > tiles)
+            end = tiles;
+        for (int64_t job = start; job < end; ++job) {
+            int64_t ii = m0 + job / xtiles * RM;
+            int64_t jj = n0 + job % xtiles * RN;
+            D Cv[RN][RM] = {};
+            for (int64_t l = 0; l < k; l += KN)
+                for (int64_t j = 0; j < RN; ++j)
+                    for (int64_t i = 0; i < RM; ++i)
+                        Cv[j][i] = madd(load<V>(A + lda * (ii + i) + l),
+                                        load<V>(B + ldb * (jj + j) + l),
+                                        Cv[j][i]);
+            for (int64_t j = 0; j < RN; ++j)
+                for (int64_t i = 0; i < RM; ++i)
+                    C[ldc * (jj + j) + (ii + i)] = hsum(Cv[j][i]);
+        }
+    }
+
+    const TA *const A;
+    const TB *const B;
+    TC *const C;
+    const int64_t k;
+    const int64_t lda;
+    const int64_t ldb;
+    const int64_t ldc;
+    const int ith;
+    const int nth;
+};
+
+//////////////////////////////////////////////////////////////////////////////////////////
+// QUANT ZERO MATRIX MULTIPLICATION
+
+#if defined(__ARM_FEATURE_DOTPROD)
+template <typename TA>
+class tinyBLAS_Q0_ARM {
+  public:
+    tinyBLAS_Q0_ARM(int64_t k,
+                    const TA *A, int64_t lda,
+                    const block_q8_0 *B, int64_t ldb,
+                    float *C, int64_t ldc,
+                    int ith, int nth)
+        : A(A), B(B), C(C), k(k), lda(lda), ldb(ldb), ldc(ldc), ith(ith), nth(nth) {
+    }
+
+    void matmul(int64_t m, int64_t n) {
+        mnpack(0, m, 0, n);
+    }
+
+  private:
+    NOINLINE void mnpack(int64_t m0, int64_t m, int64_t n0, int64_t n) {
+        int64_t mc, nc, mp, np;
+        switch ((MIN(m - m0, 3) << 4) | MIN(n - n0, 3ll)) {
+        case 0x33:
+            mc = 3;
+            nc = 3;
+            gemm<3, 3>(m0, m, n0, n);
+            break;
+        case 0x32:
+            mc = 3;
+            nc = 2;
+            gemm<3, 2>(m0, m, n0, n);
+            break;
+        case 0x23:
+            mc = 2;
+            nc = 3;
+            gemm<2, 3>(m0, m, n0, n);
+            break;
+        case 0x22:
+            mc = 2;
+            nc = 2;
+            gemm<2, 2>(m0, m, n0, n);
+            break;
+        case 0x31:
+            mc = 3;
+            nc = 1;
+            gemm<3, 1>(m0, m, n0, n);
+            break;
+        case 0x13:
+            mc = 1;
+            nc = 3;
+            gemm<1, 3>(m0, m, n0, n);
+            break;
+        case 0x21:
+            mc = 2;
+            nc = 1;
+            gemm<2, 1>(m0, m, n0, n);
+            break;
+        case 0x12:
+            mc = 1;
+            nc = 2;
+            gemm<1, 2>(m0, m, n0, n);
+            break;
+        case 0x11:
+            mc = 1;
+            nc = 1;
+            gemm<1, 1>(m0, m, n0, n);
+            break;
+        default:
+            return;
+        }
+        mp = m0 + (m - m0) / mc * mc;
+        np = n0 + (n - n0) / nc * nc;
+        mnpack(mp, m, n0, np);
+        mnpack(m0, m, np, n);
+    }
+
+    template <int RM, int RN>
+    NOINLINE void gemm(int64_t m0, int64_t m, int64_t n0, int64_t n) {
+        int64_t ytiles = (m - m0) / RM;
+        int64_t xtiles = (n - n0) / RN;
+        int64_t tiles = xtiles * ytiles;
+        int64_t duty = (tiles + nth - 1) / nth;
+        int64_t start = duty * ith;
+        int64_t end = start + duty;
+        if (end > tiles)
+            end = tiles;
+        for (int64_t job = start; job < end; ++job) {
+            int64_t ii = m0 + job / xtiles * RM;
+            int64_t jj = n0 + job % xtiles * RN;
+            float32x4_t Cv[RN][RM] = {};
+            for (int64_t l = 0; l < k; ++l)
+                for (int64_t j = 0; j < RN; ++j)
+                    for (int64_t i = 0; i < RM; ++i)
+                        Cv[j][i] = vmlaq_n_f32(Cv[j][i],
+                                               vcvtq_f32_s32(vdotq_s32(
+                                                   vdotq_s32(vdupq_n_s32(0),
+                                                             load_lo(A + lda * (ii + i) + l),
+                                                             load_lo(B + ldb * (jj + j) + l)),
+                                                   load_hi(A + lda * (ii + i) + l),
+                                                   load_hi(B + ldb * (jj + j) + l))),
+                                               unhalf(A[lda * (ii + i) + l].d) *
+                                               unhalf(B[ldb * (jj + j) + l].d));
+            for (int64_t j = 0; j < RN; ++j)
+                for (int64_t i = 0; i < RM; ++i)
+                    C[ldc * (jj + j) + (ii + i)] = hsum(Cv[j][i]);
+        }
+    }
+
+    inline int8x16_t load_lo(const block_q8_0 *b) {
+        return vld1q_s8(b->qs);
+    }
+
+    inline int8x16_t load_hi(const block_q8_0 *b) {
+        return vld1q_s8(b->qs + 16);
+    }
+
+    inline int8x16_t load_lo(const block_q4_0 *b) {
+        return vsubq_s8(vreinterpretq_s8_u8(vandq_u8(vld1q_u8(b->qs),
+                                                     vdupq_n_u8(0x0f))),
+                        vdupq_n_s8(0x8));
+    }
+
+    inline int8x16_t load_hi(const block_q4_0 *b) {
+        return vsubq_s8(vreinterpretq_s8_u8(vshrq_n_u8(vld1q_u8(b->qs), 4)),
+                        vdupq_n_s8(0x8));
+    }
+
+    const TA *const A;
+    const block_q8_0 *const B;
+    float *const C;
+    const int64_t k;
+    const int64_t lda;
+    const int64_t ldb;
+    const int64_t ldc;
+    const int ith;
+    const int nth;
+};
+#endif // __ARM_FEATURE_DOTPROD
+
+#if defined(__AVX2__) || defined(__AVX512F__) || defined(__AVX__)
+template <typename TA, typename TB, typename TC>
+class tinyBLAS_Q0_AVX {
+  public:
+    tinyBLAS_Q0_AVX(int64_t k,
+                    const TA *A, int64_t lda,
+                    const TB *B, int64_t ldb,
+                    TC *C, int64_t ldc,
+                    int ith, int nth)
+        : A(A), B(B), C(C), k(k), lda(lda), ldb(ldb), ldc(ldc), ith(ith), nth(nth) {
+    }
+
+    void matmul(int64_t m, int64_t n) {
+        mnpack(0, m, 0, n);
+    }
+
+  private:
+    void mnpack(int64_t m0, int64_t m, int64_t n0, int64_t n) {
+        int64_t mc, nc, mp, np;
+        switch ((MIN(m - m0, 4) << 4) | MIN(n - n0, 4)) {
+#if VECTOR_REGISTERS == 32
+        case 0x44:
+            mc = 4;
+            nc = 4;
+            gemm<4, 4>(m0, m, n0, n);
+            break;
+        case 0x43:
+            mc = 4;
+            nc = 3;
+            gemm<4, 3>(m0, m, n0, n);
+            break;
+        case 0x34:
+            mc = 3;
+            nc = 4;
+            gemm<3, 4>(m0, m, n0, n);
+            break;
+        case 0x33:
+            mc = 3;
+            nc = 3;
+            gemm<3, 3>(m0, m, n0, n);
+            break;
+        case 0x42:
+            mc = 4;
+            nc = 2;
+            gemm<4, 2>(m0, m, n0, n);
+            break;
+        case 0x24:
+            mc = 2;
+            nc = 4;
+            gemm<2, 4>(m0, m, n0, n);
+            break;
+#else
+        case 0x44:
+        case 0x43:
+        case 0x42:
+            mc = 4;
+            nc = 2;
+            gemm<4, 2>(m0, m, n0, n);
+            break;
+        case 0x34:
+        case 0x24:
+            mc = 2;
+            nc = 4;
+            gemm<2, 4>(m0, m, n0, n);
+            break;
+        case 0x33:
+#endif
+        case 0x32:
+            mc = 3;
+            nc = 2;
+            gemm<3, 2>(m0, m, n0, n);
+            break;
+        case 0x23:
+            mc = 2;
+            nc = 3;
+            gemm<2, 3>(m0, m, n0, n);
+            break;
+        case 0x41:
+            mc = 4;
+            nc = 1;
+            gemm<4, 1>(m0, m, n0, n);
+            break;
+        case 0x22:
+            mc = 2;
+            nc = 2;
+            gemm<2, 2>(m0, m, n0, n);
+            break;
+        case 0x14:
+            mc = 1;
+            nc = 4;
+            gemm<1, 4>(m0, m, n0, n);
+            break;
+        case 0x31:
+            mc = 3;
+            nc = 1;
+            gemm<3, 1>(m0, m, n0, n);
+            break;
+        case 0x13:
+            mc = 1;
+            nc = 3;
+            gemm<1, 3>(m0, m, n0, n);
+            break;
+        case 0x21:
+            mc = 2;
+            nc = 1;
+            gemm<2, 1>(m0, m, n0, n);
+            break;
+        case 0x12:
+            mc = 1;
+            nc = 2;
+            gemm<1, 2>(m0, m, n0, n);
+            break;
+        case 0x11:
+            mc = 1;
+            nc = 1;
+            gemm<1, 1>(m0, m, n0, n);
+            break;
+        default:
+            return;
+        }
+        mp = m0 + (m - m0) / mc * mc;
+        np = n0 + (n - n0) / nc * nc;
+        mnpack(mp, m, n0, np);
+        mnpack(m0, m, np, n);
+    }
+
+    template <int RM, int RN>
+    NOINLINE void gemm(int64_t m0, int64_t m, int64_t n0, int64_t n) {
+        int64_t ytiles = (m - m0) / RM;
+        int64_t xtiles = (n - n0) / RN;
+        int64_t tiles = xtiles * ytiles;
+        int64_t duty = (tiles + nth - 1) / nth;
+        int64_t start = duty * ith;
+        int64_t end = start + duty;
+        if (end > tiles)
+            end = tiles;
+        for (int64_t job = start; job < end; ++job) {
+            int64_t ii = m0 + job / xtiles * RM;
+            int64_t jj = n0 + job % xtiles * RN;
+            __m256 Cv[RN][RM] = {};
+            for (int64_t l = 0; l < k; ++l)
+                for (int64_t j = 0; j < RN; ++j)
+                    for (int64_t i = 0; i < RM; ++i) {
+#if defined(__AVX2__)
+                        __m256 udTmp = updot(_mm256_sign_epi8(load(A + lda * (ii + i) + l),
+                                                              load(A + lda * (ii + i) + l)),
+                                             _mm256_sign_epi8(load(B + ldb * (jj + j) + l),
+                                                              load(A + lda * (ii + i) + l)));
+#else
+                        __m128i ali0 = load0(A + lda * (ii + i) + l);
+                        __m128i ali1 = load1(A + lda * (ii + i) + l);
+                        __m128i blj0 = load0(B + ldb * (jj + j) + l);
+                        __m128i blj1 = load1(B + ldb * (jj + j) + l);
+
+                        __m128i sepAA0 = _mm_sign_epi8(ali0, ali0);
+                        __m128i sepAA1 = _mm_sign_epi8(ali1, ali1);
+                        __m128i sepBA0 = _mm_sign_epi8(blj0, ali0);
+                        __m128i sepBA1 = _mm_sign_epi8(blj1, ali1);
+
+                        // updot
+                        const __m128i oneFill = _mm_set1_epi16(1);
+                        __m128i mad0 = _mm_maddubs_epi16(sepAA0, sepBA0);
+                        __m128i mad1 = _mm_maddubs_epi16(sepAA1, sepBA1);
+                        __m256 udTmp = _mm256_cvtepi32_ps(MM256_SET_M128I(_mm_madd_epi16(oneFill, mad1), _mm_madd_epi16(oneFill, mad0)));
+#endif
+                        Cv[j][i] = madd(_mm256_set1_ps(unhalf(A[lda * (ii + i) + l].d) *
+                                                       unhalf(B[ldb * (jj + j) + l].d)),
+                                                       udTmp,
+                                                       Cv[j][i]);
+                    }
+            for (int64_t j = 0; j < RN; ++j)
+                for (int64_t i = 0; i < RM; ++i)
+                    C[ldc * (jj + j) + (ii + i)] = hsum(Cv[j][i]);
+        }
+    }
+
+    inline __m256i load(const block_q8_0 *b) {
+        return _mm256_loadu_si256((const __m256i *)b->qs);
+    }
+
+    inline __m128i load0(const block_q8_0 *b) {
+        return _mm_loadu_si128((const __m128i *)b->qs);
+    }
+
+    inline __m128i load1(const block_q8_0 *b) {
+        return _mm_loadu_si128(((const __m128i *)b->qs) + 1);
+    }
+
+    inline __m256i load(const block_q4_0 *b) {
+        return _mm256_sub_epi8(denibble(b->qs), _mm256_set1_epi8(8));
+    }
+
+    inline __m128i load0(const block_q4_0 *b) {
+        const __m128i x = _mm_loadu_si128((const __m128i *)(b->qs));
+        return _mm_sub_epi8(_mm_and_si128(_mm_set1_epi8(15), x), _mm_set1_epi8(8));
+    }
+
+    inline __m128i load1(const block_q4_0 *b) {
+        const __m128i x = _mm_loadu_si128((const __m128i *)(b->qs));
+        return _mm_sub_epi8(_mm_and_si128(_mm_set1_epi8(15), _mm_srli_epi16(x, 4)), _mm_set1_epi8(8));
+    }
+
+    inline __m256 updot(__m256i u, __m256i s) {
+        __m256i res;
+#if defined(__AVXVNNI__) || (defined(__AVX512VNNI__) && defined(__AVX512VL__))
+        res = _mm256_dpbusd_epi32(_mm256_setzero_si256(), u, s);
+#else
+        res = _mm256_madd_epi16(_mm256_set1_epi16(1), _mm256_maddubs_epi16(u, s));
+#endif
+        return _mm256_cvtepi32_ps(res);
+    }
+
+    static inline __m256i denibble(const uint8_t *p) {
+        __m128i x = _mm_loadu_si128((const __m128i *)p);
+        return _mm256_and_si256(_mm256_set1_epi8(15),
+                                _mm256_insertf128_si256(_mm256_castsi128_si256(x),
+                                                        _mm_srli_epi16(x, 4), 1));
+    }
+
+    const TA *const A;
+    const TB *const B;
+    TC *const C;
+    const int64_t k;
+    const int64_t lda;
+    const int64_t ldb;
+    const int64_t ldc;
+    const int ith;
+    const int nth;
+};
+#endif // __AVX__
+
+} // namespace
+
+/**
+ * Performs optimized matrix multiplication on CPU.
+ *
+ * This subroutine may compute C = Aᵀ * B with column major ordering.
+ * Despite its name, this isn't a generalized implementation. Work is
+ * only performed when a handwritten kernel is written and available.
+ * Otherwise the caller should fall back to a general matmul routine.
+ *
+ * For example, for single-threaded single-precision GEMM you can say
+ *
+ *     llamafile_sgemm(m, n, k, A, lda, B, ldb, C, ldc,
+ *                     0, 1,
+ *                     GGML_TYPE_F32, GGML_TYPE_F32, GGML_TYPE_F32);
+ *
+ * @param m is rows in `A` and `C`
+ * @param n is cols in `B` and `C`
+ * @param k is cols in `A` and rows in `B`
+ * @param A is first input matrix (always transposed)
+ * @param lda is row stride of `A`
+ * @param B is second input matrix (never transposed)
+ * @param ldb is row stride of `B`
+ * @param C is input/output array of output matrices
+ * @param ldc is row stride of `C`
+ * @param ith is thread id (must be less than `nth`)
+ * @param nth is number of threads (must be greater than zero)
+ * @param Atype is GGML data type of `A`
+ * @param Btype is GGML data type of `B`
+ * @param Ctype is GGML data type of `C`
+ * @return true if this function was able to service the matmul request
+ */
+bool llamafile_sgemm(int64_t m, int64_t n, int64_t k, const void *A, int64_t lda, const void *B, int64_t ldb, void *C,
+                     int64_t ldc, int ith, int nth, int Atype, int Btype, int Ctype) {
+
+    assert(m >= 0);
+    assert(n >= 0);
+    assert(k >= 0);
+    assert(lda >= k);
+    assert(ldb >= k);
+    assert(ldc >= m);
+    assert(nth > 0);
+    assert(ith < nth);
+
+    if (Ctype != GGML_TYPE_F32)
+        return false;
+
+    switch (Atype) {
+
+    case GGML_TYPE_F32: {
+        if (Btype != GGML_TYPE_F32)
+            return false;
+#if defined(__AVX512F__)
+        if (k % 16)
+            return false;
+        tinyBLAS<16, __m512, __m512, float, float, float> tb{
+            k, (const float *)A, lda,
+            (const float *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#elif defined(__AVX__) || defined(__AVX2__)
+        if (k % 8)
+            return false;
+        tinyBLAS<8, __m256, __m256, float, float, float> tb{
+            k, (const float *)A, lda,
+            (const float *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#elif defined(__ARM_NEON)
+        if (n < 4)
+            return false;
+        if (k % 4)
+            return false;
+        tinyBLAS<4, float32x4_t, float32x4_t, float, float, float> tb{
+            k, (const float *)A, lda,
+            (const float *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#else
+        return false;
+#endif
+    }
+
+    case GGML_TYPE_F16: {
+#if defined(__AVX512F__)
+        if (k % 16)
+            return false;
+        if (Btype != GGML_TYPE_F32)
+            return false;
+        tinyBLAS<16, __m512, __m512, ggml_fp16_t, float, float> tb{
+            k, (const ggml_fp16_t *)A, lda,
+            (const float *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#elif (defined(__AVX__) || defined(__AVX2__)) && defined(__F16C__)
+        if (k % 8)
+            return false;
+        if (Btype != GGML_TYPE_F32)
+            return false;
+        tinyBLAS<8, __m256, __m256, ggml_fp16_t, float, float> tb{
+            k, (const ggml_fp16_t *)A, lda,
+            (const float *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#elif defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) && !defined(_MSC_VER)
+        if (n < 8)
+            return false;
+        if (k % 8)
+            return false;
+        if (Btype != GGML_TYPE_F16)
+            return false;
+        tinyBLAS<8, float16x8_t, float16x8_t, ggml_fp16_t, ggml_fp16_t, float> tb{
+            k, (const ggml_fp16_t *)A, lda,
+            (const ggml_fp16_t *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#elif defined(__ARM_NEON) && !defined(_MSC_VER)
+        if (k % 4)
+            return false;
+        if (Btype != GGML_TYPE_F32)
+            return false;
+        tinyBLAS<4, float32x4_t, float32x4_t, ggml_fp16_t, float, float> tb{
+            k, (const ggml_fp16_t *)A, lda,
+            (const float *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#else
+        return false;
+#endif
+    }
+
+    case GGML_TYPE_Q8_0: {
+        if (Btype != GGML_TYPE_Q8_0)
+           return false;
+#if defined(__AVX2__) || defined(__AVX512F__) || defined(__AVX__)
+        tinyBLAS_Q0_AVX<block_q8_0, block_q8_0, float> tb{
+            k, (const block_q8_0 *)A, lda,
+            (const block_q8_0 *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#elif defined(__ARM_FEATURE_DOTPROD)
+        tinyBLAS_Q0_ARM<block_q8_0> tb{
+            k, (const block_q8_0 *)A, lda,
+            (const block_q8_0 *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#else
+        return false;
+#endif
+    }
+
+    case GGML_TYPE_Q4_0: {
+        if (Btype != GGML_TYPE_Q8_0)
+            return false;
+#if defined(__AVX2__) || defined(__AVX512F__) || defined(__AVX__)
+        tinyBLAS_Q0_AVX<block_q4_0, block_q8_0, float> tb{
+            k, (const block_q4_0 *)A, lda,
+            (const block_q8_0 *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#elif defined(__ARM_FEATURE_DOTPROD)
+        tinyBLAS_Q0_ARM<block_q4_0> tb{
+            k, (const block_q4_0 *)A, lda,
+            (const block_q8_0 *)B, ldb,
+            (float *)C, ldc,
+            ith, nth};
+        tb.matmul(m, n);
+        return true;
+#else
+        return false;
+#endif
+    }
+
+    default:
+        return false;
+    }
+
+    (void)m;
+    (void)n;
+    (void)k;
+    (void)A;
+    (void)lda;
+    (void)B;
+    (void)ldb;
+    (void)C;
+    (void)ldc;
+    (void)ith;
+    (void)nth;
+    (void)Atype;
+    (void)Btype;
+    (void)Ctype;
+}
diff --git a/ggml/src/sgemm.h b/ggml/src/sgemm.h
new file mode 100644 (file)
index 0000000..caf6dd5
--- /dev/null
@@ -0,0 +1,14 @@
+#pragma once
+#include <stdint.h>
+#include <stdbool.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+bool llamafile_sgemm(int64_t, int64_t, int64_t, const void *, int64_t,
+                     const void *, int64_t, void *, int64_t, int, int,
+                     int, int, int);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/ggml/src/vulkan-shaders/add.comp b/ggml/src/vulkan-shaders/add.comp
new file mode 100644 (file)
index 0000000..8475b01
--- /dev/null
@@ -0,0 +1,12 @@
+#version 450
+
+#include "types.comp"
+#include "generic_binary_head.comp"
+
+void main() {
+    if (gl_GlobalInvocationID.x >= p.ne) {
+        return;
+    }
+
+    data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]) + FLOAT_TYPE(data_b[src1_idx(gl_GlobalInvocationID.x)]));
+}
diff --git a/ggml/src/vulkan-shaders/argsort.comp b/ggml/src/vulkan-shaders/argsort.comp
new file mode 100644 (file)
index 0000000..e55414b
--- /dev/null
@@ -0,0 +1,71 @@
+#version 450
+
+#include "types.comp"
+
+#define BLOCK_SIZE 1024
+#define ASC 0
+
+layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1)          buffer D {int data_d[];};
+
+layout (push_constant) uniform parameter {
+    uint ncols;
+    uint ncols_pad;
+    uint order;
+} p;
+
+shared int dst_row[BLOCK_SIZE];
+
+void swap(uint idx0, uint idx1) {
+    int tmp = dst_row[idx0];
+    dst_row[idx0] = dst_row[idx1];
+    dst_row[idx1] = tmp;
+}
+
+void main() {
+    // bitonic sort
+    const int col = int(gl_LocalInvocationID.x);
+    const uint row = gl_WorkGroupID.y;
+
+    if (col >= p.ncols_pad) {
+        return;
+    }
+
+    const uint row_offset = row * p.ncols;
+
+    // initialize indices
+    dst_row[col] = col;
+    barrier();
+
+    for (uint k = 2; k <= p.ncols_pad; k *= 2) {
+        for (uint j = k / 2; j > 0; j /= 2) {
+            const uint ixj = col ^ j;
+            if (ixj > col) {
+                if ((col & k) == 0) {
+                    if (dst_row[col] >= p.ncols ||
+                        (dst_row[ixj] < p.ncols && (p.order == ASC ?
+                            data_a[row_offset + dst_row[col]] > data_a[row_offset + dst_row[ixj]] :
+                            data_a[row_offset + dst_row[col]] < data_a[row_offset + dst_row[ixj]]))
+                    ) {
+                        swap(col, ixj);
+                    }
+                } else {
+                    if (dst_row[ixj] >= p.ncols ||
+                        (dst_row[col] < p.ncols && (p.order == ASC ?
+                            data_a[row_offset + dst_row[col]] < data_a[row_offset + dst_row[ixj]] :
+                            data_a[row_offset + dst_row[col]] > data_a[row_offset + dst_row[ixj]]))
+                    ) {
+                        swap(col, ixj);
+                    }
+                }
+            }
+            barrier();
+        }
+    }
+
+    if (col < p.ncols) {
+        data_d[row_offset + col] = dst_row[col];
+    }
+}
diff --git a/ggml/src/vulkan-shaders/clamp.comp b/ggml/src/vulkan-shaders/clamp.comp
new file mode 100644 (file)
index 0000000..ca272e2
--- /dev/null
@@ -0,0 +1,13 @@
+#version 450
+
+#include "types.comp"
+#include "generic_unary_head.comp"
+
+void main() {
+    if (gl_GlobalInvocationID.x >= p.ne) {
+        return;
+    }
+
+    const FLOAT_TYPE val = FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]);
+    data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(val < p.param1 ? p.param1 : (val > p.param2 ? p.param2 : val));
+}
diff --git a/ggml/src/vulkan-shaders/copy.comp b/ggml/src/vulkan-shaders/copy.comp
new file mode 100644 (file)
index 0000000..efb5587
--- /dev/null
@@ -0,0 +1,16 @@
+#version 450
+
+#include "types.comp"
+#include "generic_unary_head.comp"
+
+void main() {
+    if (gl_GlobalInvocationID.x >= p.ne) {
+        return;
+    }
+
+#ifndef OPTIMIZATION_ERROR_WORKAROUND
+    data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]);
+#else
+    data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = data_a[src0_idx(gl_GlobalInvocationID.x)];
+#endif
+}
diff --git a/ggml/src/vulkan-shaders/dequant_f32.comp b/ggml/src/vulkan-shaders/dequant_f32.comp
new file mode 100644 (file)
index 0000000..a4d3fca
--- /dev/null
@@ -0,0 +1,20 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {float data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    const uint i = gl_GlobalInvocationID.x * 16;
+
+    if (i >= p.nel) {
+        return;
+    }
+
+    [[unroll]] for (uint l = 0; l < 16; l++) {
+        data_b[i + l] = D_TYPE(data_a[i + l]);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/dequant_funcs.comp b/ggml/src/vulkan-shaders/dequant_funcs.comp
new file mode 100644 (file)
index 0000000..35d424d
--- /dev/null
@@ -0,0 +1,60 @@
+#if !defined(DATA_A_F32) && !defined(DATA_A_F16)
+#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
+#endif
+
+#if defined(DATA_A_F32)
+vec2 dequantize(uint ib, uint iqs, uint a_offset) {
+    return vec2(data_a[a_offset + ib], data_a[a_offset + ib + 1]);
+}
+#endif
+
+#if defined(DATA_A_F16)
+vec2 dequantize(uint ib, uint iqs, uint a_offset) {
+    return vec2(data_a[a_offset + ib], data_a[a_offset + ib + 1]);
+}
+#endif
+
+#if defined(DATA_A_Q4_0)
+vec2 dequantize(uint ib, uint iqs, uint a_offset) {
+    const float d = float(data_a[a_offset + ib].d);
+    const uint vui = uint(data_a[a_offset + ib].qs[iqs]);
+    return (vec2(vui & 0xF, vui >> 4) - 8.0f) * d;
+}
+#endif
+
+#if defined(DATA_A_Q4_1)
+vec2 dequantize(uint ib, uint iqs, uint a_offset) {
+    const float d = float(data_a[a_offset + ib].d);
+    const float m = float(data_a[a_offset + ib].m);
+    const uint vui = uint(data_a[a_offset + ib].qs[iqs]);
+    return vec2(vui & 0xF, vui >> 4) * d + m;
+}
+#endif
+
+#if defined(DATA_A_Q5_0)
+vec2 dequantize(uint ib, uint iqs, uint a_offset) {
+    const float d = float(data_a[a_offset + ib].d);
+    const uint uint_qh = uint(data_a[a_offset + ib].qh[1]) << 16 | data_a[a_offset + ib].qh[0];
+    const ivec2 qh = ivec2(((uint_qh >> iqs) << 4) & 0x10, (uint_qh >> (iqs + 12)) & 0x10);
+    const uint vui = uint(data_a[a_offset + ib].qs[iqs]);
+    return (vec2((vui & 0xF) | qh.x, (vui >> 4) | qh.y) - 16.0f) * d;
+}
+#endif
+
+#if defined(DATA_A_Q5_1)
+vec2 dequantize(uint ib, uint iqs, uint a_offset) {
+    const float d = float(data_a[a_offset + ib].d);
+    const float m = float(data_a[a_offset + ib].m);
+    const uint uint_qh = data_a[a_offset + ib].qh;
+    const ivec2 qh = ivec2(((uint_qh >> iqs) << 4) & 0x10, (uint_qh >> (iqs + 12)) & 0x10);
+    const uint vui = uint(data_a[a_offset + ib].qs[iqs]);
+    return vec2((vui & 0xF) | qh.x, (vui >> 4) | qh.y) * d + m;
+}
+#endif
+
+#if defined(DATA_A_Q8_0)
+vec2 dequantize(uint ib, uint iqs, uint a_offset) {
+    const float d = float(data_a[a_offset + ib].d);
+    return vec2(int(data_a[a_offset + ib].qs[iqs]), int(data_a[a_offset + ib].qs[iqs + 1])) * d;
+}
+#endif
diff --git a/ggml/src/vulkan-shaders/dequant_head.comp b/ggml/src/vulkan-shaders/dequant_head.comp
new file mode 100644 (file)
index 0000000..8d80643
--- /dev/null
@@ -0,0 +1,13 @@
+#extension GL_EXT_control_flow_attributes : require
+#extension GL_EXT_shader_16bit_storage : require
+
+layout (push_constant) uniform parameter
+{
+    uint M;
+    uint K;
+    uint stride_a;
+    uint stride_b;
+    uint nel;
+} p;
+
+#include "types.comp"
diff --git a/ggml/src/vulkan-shaders/dequant_q2_k.comp b/ggml/src/vulkan-shaders/dequant_q2_k.comp
new file mode 100644 (file)
index 0000000..157154a
--- /dev/null
@@ -0,0 +1,34 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    [[unroll]] for (uint wgy = 0; wgy < 256; wgy++) {
+        const uint i = gl_WorkGroupID.x * 256 + wgy;
+        if (i >= p.M * p.K / QUANT_K) {
+            return;
+        }
+
+        const uint tid = gl_LocalInvocationID.x;
+        const uint ip = tid / 32;
+        const uint il = tid - 32 * ip;
+        const uint is = 8 * ip + il / 16;
+
+        const uint y_idx = i * QUANT_K + 128 * ip + il;
+
+        const uint ql_idx = 32 * ip + il;
+        const uint8_t qs = data_a[i].qs[32 * ip + il];
+
+        FLOAT_TYPE dall = FLOAT_TYPE(data_a[i].d.x);
+        FLOAT_TYPE dmin = FLOAT_TYPE(data_a[i].d.y);
+        data_b[y_idx +  0] = D_TYPE(dall * FLOAT_TYPE((data_a[i].scales[is+0] & 0xF) * ((qs >> 0) & 3)) - dmin * FLOAT_TYPE(data_a[i].scales[is+0] >> 4));
+        data_b[y_idx + 32] = D_TYPE(dall * FLOAT_TYPE((data_a[i].scales[is+2] & 0xF) * ((qs >> 2) & 3)) - dmin * FLOAT_TYPE(data_a[i].scales[is+2] >> 4));
+        data_b[y_idx + 64] = D_TYPE(dall * FLOAT_TYPE((data_a[i].scales[is+4] & 0xF) * ((qs >> 4) & 3)) - dmin * FLOAT_TYPE(data_a[i].scales[is+4] >> 4));
+        data_b[y_idx + 96] = D_TYPE(dall * FLOAT_TYPE((data_a[i].scales[is+6] & 0xF) * ((qs >> 6) & 3)) - dmin * FLOAT_TYPE(data_a[i].scales[is+6] >> 4));
+    }
+}
diff --git a/ggml/src/vulkan-shaders/dequant_q3_k.comp b/ggml/src/vulkan-shaders/dequant_q3_k.comp
new file mode 100644 (file)
index 0000000..c17dd0d
--- /dev/null
@@ -0,0 +1,42 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    [[unroll]] for (uint wgy = 0; wgy < 256; wgy++) {
+        const uint i = uint(gl_WorkGroupID.x * 256 + wgy);
+        if (i >= p.M * p.K / QUANT_K) {
+            return;
+        }
+
+        const uint r = gl_LocalInvocationID.x / 4;
+        const uint tid = r / 2;
+        const uint is0 = r % 2;
+        const uint l0 = 16 * is0 + 4 * (gl_LocalInvocationID.x % 4);
+        const uint n = tid / 4;
+        const uint j = tid - 4*n;
+
+        const uint8_t m = uint8_t(1 << (4*n + j));
+        const uint is = 8*n + 2*j + is0;
+        const uint shift = 2*j;
+
+        const int8_t us = int8_t(is <  4 ? (data_a[i].scales[is-0] & 0xF) | (((data_a[i].scales[is+8] >> 0) & 3) << 4) :
+                                 is <  8 ? (data_a[i].scales[is-0] & 0xF) | (((data_a[i].scales[is+4] >> 2) & 3) << 4) :
+                                 is < 12 ? (data_a[i].scales[is-8] >>  4) | (((data_a[i].scales[is+0] >> 4) & 3) << 4) :
+                                           (data_a[i].scales[is-8] >>  4) | (((data_a[i].scales[is-4] >> 6) & 3) << 4));
+        const FLOAT_TYPE d_all = FLOAT_TYPE(data_a[i].d);
+        const FLOAT_TYPE dl    = d_all * FLOAT_TYPE(us - 32);
+
+        const uint y_idx = i * QUANT_K + 128 * n + 32 * j;
+        const uint qs_idx = 32*n;
+
+        for (uint l = l0; l < l0 + 4; ++l) {
+            data_b[y_idx + l] = D_TYPE(dl * FLOAT_TYPE(int8_t((data_a[i].qs[qs_idx + l] >> shift) & 3) - (((data_a[i].hmask[l] & m) != 0) ? 0 : 4)));
+        }
+    }
+}
diff --git a/ggml/src/vulkan-shaders/dequant_q4_0.comp b/ggml/src/vulkan-shaders/dequant_q4_0.comp
new file mode 100644 (file)
index 0000000..11e07e6
--- /dev/null
@@ -0,0 +1,32 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {block_q4_0 data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    const uint i = gl_WorkGroupID.x * 4 + gl_LocalInvocationID.x / 64;
+
+    const uint tid = gl_LocalInvocationID.x % 64;
+    const uint il  = tid/32;
+    const uint ir  = tid%32;
+    const uint ib = 32*i + ir;
+    if (ib >= p.nel / 32) {
+        return;
+    }
+
+    const uint b_idx = 1024*i + 32*ir + 8*il;
+
+    const float d = float(data_a[ib].d);
+    const float dm = -8.0f * d;
+
+    const uint q_idx = 8*il;
+
+    [[unroll]] for (uint l = 0; l < 8; ++l) {
+        data_b[b_idx + l +  0] = D_TYPE(d * (data_a[ib].qs[q_idx + l] & 0xF) + dm);
+        data_b[b_idx + l + 16] = D_TYPE(d * (data_a[ib].qs[q_idx + l] >>  4) + dm);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/dequant_q4_1.comp b/ggml/src/vulkan-shaders/dequant_q4_1.comp
new file mode 100644 (file)
index 0000000..2f27eee
--- /dev/null
@@ -0,0 +1,32 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {block_q4_1 data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    const uint i = gl_WorkGroupID.x * 4 + gl_LocalInvocationID.x / 64;
+
+    const uint tid = gl_LocalInvocationID.x % 64;
+    const uint il  = tid/32;
+    const uint ir  = tid%32;
+    const uint ib = 32*i + ir;
+    if (ib >= p.nel / 32) {
+        return;
+    }
+
+    const uint b_idx = 1024*i + 32*ir + 8*il;
+
+    const float d = float(data_a[ib].d);
+    const float m = float(data_a[ib].m);
+
+    const uint q_idx = 8*il;
+
+    [[unroll]] for (uint l = 0; l < 8; ++l) {
+        data_b[b_idx + l +  0] = D_TYPE(d * (data_a[ib].qs[q_idx + l] & 0xF) + m);
+        data_b[b_idx + l + 16] = D_TYPE(d * (data_a[ib].qs[q_idx + l] >>  4) + m);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/dequant_q4_k.comp b/ggml/src/vulkan-shaders/dequant_q4_k.comp
new file mode 100644 (file)
index 0000000..92acb75
--- /dev/null
@@ -0,0 +1,56 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    [[unroll]] for (uint wgy = 0; wgy < 256; wgy++) {
+        const uint i = gl_WorkGroupID.x * 256 + wgy;
+        if (i >= p.M * p.K / QUANT_K) {
+            return;
+        }
+
+        const uint tid = gl_LocalInvocationID.x;
+        const uint il = tid / 8;
+        const uint ir = tid % 8;
+        const uint is = 2 * il;
+        const uint n = 4;
+
+        const FLOAT_TYPE dall = FLOAT_TYPE(data_a[i].d.x);
+        const FLOAT_TYPE dmin = FLOAT_TYPE(data_a[i].d.y);
+
+        const uint y_idx = i * QUANT_K + 64 * il + n * ir;
+        const uint qs_idx = 32*il + n * ir;
+
+        uint8_t sc;
+        uint8_t m;
+        if (is < 4) {
+            sc = uint8_t(data_a[i].scales[is] & 63);
+            m  = uint8_t(data_a[i].scales[is + 4] & 63);
+        } else {
+            sc = uint8_t((data_a[i].scales[is + 4] & 0xF) | ((data_a[i].scales[is - 4] >> 6) << 4));
+            m  = uint8_t((data_a[i].scales[is + 4] >>  4) | ((data_a[i].scales[is    ] >> 6) << 4));
+        }
+        const FLOAT_TYPE d1 = dall * sc;
+        const FLOAT_TYPE m1 = dmin * m;
+
+        if (is < 4) {
+            sc = uint8_t(data_a[i].scales[is + 1] & 63);
+            m  = uint8_t(data_a[i].scales[is + 5] & 63);
+        } else {
+            sc = uint8_t((data_a[i].scales[is + 5] & 0xF) | ((data_a[i].scales[is - 3] >> 6) << 4));
+            m  = uint8_t((data_a[i].scales[is + 5] >>  4) | ((data_a[i].scales[is + 1] >> 6) << 4));
+        }
+        const FLOAT_TYPE d2 = dall * sc;
+        const FLOAT_TYPE m2 = dmin * m;
+
+        [[unroll]] for (uint l = 0; l < n; ++l) {
+            data_b[y_idx + l     ] = D_TYPE(d1 * FLOAT_TYPE(data_a[i].qs[qs_idx + l] & 0xF) - m1);
+            data_b[y_idx + l + 32] = D_TYPE(d2 * FLOAT_TYPE(data_a[i].qs[qs_idx + l] >>  4) - m2);
+        }
+    }
+}
diff --git a/ggml/src/vulkan-shaders/dequant_q5_0.comp b/ggml/src/vulkan-shaders/dequant_q5_0.comp
new file mode 100644 (file)
index 0000000..b20b805
--- /dev/null
@@ -0,0 +1,34 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {block_q5_0 data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    const uint i = gl_WorkGroupID.x * 4 + gl_LocalInvocationID.x / 64;
+
+    const uint tid = gl_LocalInvocationID.x % 64;
+    const uint il  = tid/32;
+    const uint ir  = tid%32;
+    const uint ib = 32*i + ir;
+    if (ib >= p.nel / 32) {
+        return;
+    }
+
+    const uint b_idx = 1024*i + 32*ir + 8*il;
+
+    const float d = float(data_a[ib].d);
+    const uint qh = uint(data_a[ib].qh[1]) << 16 | data_a[ib].qh[0];
+
+    const uint q_idx = 8*il;
+
+    [[unroll]] for (uint l = 0; l < 8; ++l) {
+        const uint iqs = q_idx + l;
+        const uint vui = uint(data_a[ib].qs[iqs]);
+        data_b[b_idx + l +  0] = D_TYPE(d * (((vui & 0xF) | (((qh >> iqs) << 4) & 0x10)) - 16.0f));
+        data_b[b_idx + l + 16] = D_TYPE(d * (((vui >>  4) | ((qh >> (iqs + 12)) & 0x10)) - 16.0f));
+    }
+}
diff --git a/ggml/src/vulkan-shaders/dequant_q5_1.comp b/ggml/src/vulkan-shaders/dequant_q5_1.comp
new file mode 100644 (file)
index 0000000..dc59fe3
--- /dev/null
@@ -0,0 +1,35 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {block_q5_1 data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    const uint i = gl_WorkGroupID.x * 4 + gl_LocalInvocationID.x / 64;
+
+    const uint tid = gl_LocalInvocationID.x % 64;
+    const uint il  = tid/32;
+    const uint ir  = tid%32;
+    const uint ib = 32*i + ir;
+    if (ib >= p.nel / 32) {
+        return;
+    }
+
+    const uint b_idx = 1024*i + 32*ir + 8*il;
+
+    const float d = float(data_a[ib].d);
+    const float m = float(data_a[ib].m);
+    const uint qh = data_a[ib].qh;
+
+    const uint q_idx = 8*il;
+
+    [[unroll]] for (uint l = 0; l < 8; ++l) {
+        const uint iqs = q_idx + l;
+        const uint vui = uint(data_a[ib].qs[iqs]);
+        data_b[b_idx + l +  0] = D_TYPE(d * (((vui & 0xF) | (((qh >> iqs) << 4) & 0x10))) + m);
+        data_b[b_idx + l + 16] = D_TYPE(d * (((vui >>  4) | ((qh >> (iqs + 12)) & 0x10))) + m);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/dequant_q5_k.comp b/ggml/src/vulkan-shaders/dequant_q5_k.comp
new file mode 100644 (file)
index 0000000..f314a76
--- /dev/null
@@ -0,0 +1,58 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    [[unroll]] for (uint wgy = 0; wgy < 256; wgy++) {
+        const uint i = gl_WorkGroupID.x * 256 + wgy;
+        if (i >= p.M * p.K / QUANT_K) {
+            return;
+        }
+
+        const uint tid = gl_LocalInvocationID.x;
+        const uint il = tid / 16;
+        const uint ir = tid % 16;
+        const uint is = 2 * il;
+
+        const FLOAT_TYPE dall = FLOAT_TYPE(data_a[i].d.x);
+        const FLOAT_TYPE dmin = FLOAT_TYPE(data_a[i].d.y);
+
+        const uint y_idx = i * QUANT_K + 64 * il + 2 * ir;
+        const uint qs_idx = 32*il + 2 * ir;
+        const uint qh_idx = 2 * ir;
+
+        uint8_t sc;
+        uint8_t m;
+        if (is < 4) {
+            sc = uint8_t(data_a[i].scales[is] & 63);
+            m  = uint8_t(data_a[i].scales[is + 4] & 63);
+        } else {
+            sc = uint8_t((data_a[i].scales[is + 4] & 0xF) | ((data_a[i].scales[is - 4] >> 6) << 4));
+            m  = uint8_t((data_a[i].scales[is + 4] >>  4) | ((data_a[i].scales[is    ] >> 6) << 4));
+        }
+        const FLOAT_TYPE d1 = dall * sc;
+        const FLOAT_TYPE m1 = dmin * m;
+
+        if (is < 4) {
+            sc = uint8_t(data_a[i].scales[is + 1] & 63);
+            m  = uint8_t(data_a[i].scales[is + 5] & 63);
+        } else {
+            sc = uint8_t((data_a[i].scales[is + 5] & 0xF) | ((data_a[i].scales[is - 3] >> 6) << 4));
+            m  = uint8_t((data_a[i].scales[is + 5] >>  4) | ((data_a[i].scales[is + 1] >> 6) << 4));
+        }
+        const FLOAT_TYPE d2 = dall * sc;
+        const FLOAT_TYPE m2 = dmin * m;
+
+        const uint8_t hm1 = uint8_t(1 << (2 * il    ));
+        const uint8_t hm2 = uint8_t(1 << (2 * il + 1));
+        data_b[y_idx     ] = D_TYPE(d1 * FLOAT_TYPE((data_a[i].qs[qs_idx    ] & 0xF) + (((data_a[i].qh[qh_idx    ] & hm1) != 0) ? 16 : 0)) - m1);
+        data_b[y_idx +  1] = D_TYPE(d1 * FLOAT_TYPE((data_a[i].qs[qs_idx + 1] & 0xF) + (((data_a[i].qh[qh_idx + 1] & hm1) != 0) ? 16 : 0)) - m1);
+        data_b[y_idx + 32] = D_TYPE(d2 * FLOAT_TYPE((data_a[i].qs[qs_idx    ]  >> 4) + (((data_a[i].qh[qh_idx    ] & hm2) != 0) ? 16 : 0)) - m2);
+        data_b[y_idx + 33] = D_TYPE(d2 * FLOAT_TYPE((data_a[i].qs[qs_idx + 1]  >> 4) + (((data_a[i].qh[qh_idx + 1] & hm2) != 0) ? 16 : 0)) - m2);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/dequant_q6_k.comp b/ggml/src/vulkan-shaders/dequant_q6_k.comp
new file mode 100644 (file)
index 0000000..0b91317
--- /dev/null
@@ -0,0 +1,33 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    [[unroll]] for (uint wgy = 0; wgy < 256; wgy++) {
+        const uint i = gl_WorkGroupID.x * 256 + wgy;
+        if (i >= p.M * p.K / QUANT_K) {
+            return;
+        }
+        const uint tid = gl_LocalInvocationID.x;
+        const uint ip = tid / 32;
+        const uint il = tid - 32 * ip;
+        const uint is = 8 * ip + il / 16;
+
+        const uint y_idx = i * QUANT_K + 128 * ip + il;
+
+        const uint ql_idx = 64 * ip + il;
+        const uint8_t qh = data_a[i].qh[32 * ip + il];
+
+        const FLOAT_TYPE d = FLOAT_TYPE(data_a[i].d);
+
+        data_b[y_idx +  0] = D_TYPE(d * FLOAT_TYPE(data_a[i].scales[is + 0] * (int8_t((data_a[i].ql[ql_idx +  0] & 0xF) | (((qh >> 0) & 3) << 4)) - 32)));
+        data_b[y_idx + 32] = D_TYPE(d * FLOAT_TYPE(data_a[i].scales[is + 2] * (int8_t((data_a[i].ql[ql_idx + 32] & 0xF) | (((qh >> 2) & 3) << 4)) - 32)));
+        data_b[y_idx + 64] = D_TYPE(d * FLOAT_TYPE(data_a[i].scales[is + 4] * (int8_t((data_a[i].ql[ql_idx +  0] >>  4) | (((qh >> 4) & 3) << 4)) - 32)));
+        data_b[y_idx + 96] = D_TYPE(d * FLOAT_TYPE(data_a[i].scales[is + 6] * (int8_t((data_a[i].ql[ql_idx + 32] >>  4) | (((qh >> 6) & 3) << 4)) - 32)));
+    }
+}
diff --git a/ggml/src/vulkan-shaders/dequant_q8_0.comp b/ggml/src/vulkan-shaders/dequant_q8_0.comp
new file mode 100644 (file)
index 0000000..bd1344a
--- /dev/null
@@ -0,0 +1,31 @@
+#version 450
+
+#include "dequant_head.comp"
+
+layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {block_q8_0 data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_b[];};
+
+void main() {
+    const uint i = gl_WorkGroupID.x * 4 + gl_LocalInvocationID.x / 64;
+
+    const uint tid = gl_LocalInvocationID.x % 64;
+    const uint il  = tid/32;
+    const uint ir  = tid%32;
+    const uint ib = 32*i + ir;
+    if (ib >= p.nel / 32) {
+        return;
+    }
+
+    const uint b_idx = 1024*i + 32*ir + 16*il;
+
+    const float d = float(data_a[ib].d);
+
+    const uint q_idx = 16*il;
+
+    [[unroll]] for (uint l = 0; l < 16; l += 2) {
+        data_b[b_idx + l    ] = D_TYPE(d * data_a[ib].qs[q_idx + l    ]);
+        data_b[b_idx + l + 1] = D_TYPE(d * data_a[ib].qs[q_idx + l + 1]);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/diag_mask_inf.comp b/ggml/src/vulkan-shaders/diag_mask_inf.comp
new file mode 100644 (file)
index 0000000..4e68742
--- /dev/null
@@ -0,0 +1,34 @@
+#version 450
+
+#extension GL_EXT_shader_16bit_storage : require
+#extension GL_EXT_control_flow_attributes : enable
+
+layout (push_constant) uniform parameter
+{
+    uint ncols;
+    uint rows_per_channel;
+    uint n_past;
+} p;
+
+#include "types.comp"
+
+layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer X {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_d[];};
+
+void main() {
+    const uint col = gl_GlobalInvocationID.y;
+    const uint row = gl_GlobalInvocationID.x;
+
+    if (col >= p.ncols) {
+        return;
+    }
+
+    const uint i = row*p.ncols + col;
+    if (col > p.n_past + row % p.rows_per_channel) {
+        data_d[i] = D_TYPE(uintBitsToFloat(0xFF800000));
+    } else {
+        data_d[i] = D_TYPE(data_a[i]);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/div.comp b/ggml/src/vulkan-shaders/div.comp
new file mode 100644 (file)
index 0000000..8ee4bfc
--- /dev/null
@@ -0,0 +1,12 @@
+#version 450
+
+#include "types.comp"
+#include "generic_binary_head.comp"
+
+void main() {
+    if (gl_GlobalInvocationID.x >= p.ne) {
+        return;
+    }
+
+    data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]) / FLOAT_TYPE(data_b[src1_idx(gl_GlobalInvocationID.x)]));
+}
diff --git a/ggml/src/vulkan-shaders/gelu.comp b/ggml/src/vulkan-shaders/gelu.comp
new file mode 100644 (file)
index 0000000..9fe807c
--- /dev/null
@@ -0,0 +1,25 @@
+#version 450
+
+#include "generic_head.comp"
+#include "types.comp"
+
+#extension GL_EXT_control_flow_attributes : enable
+
+layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer X {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_d[];};
+
+void main() {
+    const float GELU_COEF_A    = 0.044715f;
+    const float SQRT_2_OVER_PI = 0.79788456080286535587989211986876f;
+    const uint i = gl_GlobalInvocationID.x;
+
+    if (i >= p.KX) {
+        return;
+    }
+
+    const float xi = float(data_a[i]);
+    const float val = SQRT_2_OVER_PI*xi*(1.0f + GELU_COEF_A*xi*xi);
+    data_d[i] = D_TYPE(0.5f*xi*(2.0f - 2.0f / (exp(2 * val) + 1)));
+}
diff --git a/ggml/src/vulkan-shaders/generic_binary_head.comp b/ggml/src/vulkan-shaders/generic_binary_head.comp
new file mode 100644 (file)
index 0000000..ab45d25
--- /dev/null
@@ -0,0 +1,48 @@
+#extension GL_EXT_shader_16bit_storage : require
+
+layout (push_constant) uniform parameter
+{
+    uint ne;
+    uint ne00; uint ne01; uint ne02; uint ne03; uint nb00; uint nb01; uint nb02; uint nb03;
+    uint ne10; uint ne11; uint ne12; uint ne13; uint nb10; uint nb11; uint nb12; uint nb13;
+    uint ne20; uint ne21; uint ne22; uint ne23; uint nb20; uint nb21; uint nb22; uint nb23;
+    uint d_offset;
+    float param1; float param2;
+} p;
+
+layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) readonly buffer B {B_TYPE data_b[];};
+layout (binding = 2) writeonly buffer D {D_TYPE data_d[];};
+
+uint src0_idx(uint idx) {
+    const uint i03 = idx / (p.ne02*p.ne01*p.ne00);
+    const uint i03_offset = i03 * p.ne02*p.ne01*p.ne00;
+    const uint i02 = (idx - i03_offset) / (p.ne01*p.ne00);
+    const uint i02_offset = i02*p.ne01*p.ne00;
+    const uint i01 = (idx - i03_offset - i02_offset) / p.ne00;
+    const uint i00 = idx - i03_offset - i02_offset - i01*p.ne00;
+    return i03*p.nb03 + i02*p.nb02 + i01*p.nb01 + i00*p.nb00;
+}
+
+uint src1_idx(uint idx) {
+    const uint i03 = idx / (p.ne02*p.ne01*p.ne00);
+    const uint i03_offset = i03 * p.ne02*p.ne01*p.ne00;
+    const uint i02 = (idx - i03_offset) / (p.ne01*p.ne00);
+    const uint i02_offset = i02*p.ne01*p.ne00;
+    const uint i01 = (idx - i03_offset - i02_offset) / p.ne00;
+    const uint i00 = idx - i03_offset - i02_offset - i01*p.ne00;
+
+    return (i03 % p.ne13)*p.nb13 + (i02 % p.ne12)*p.nb12 + (i01 % p.ne11)*p.nb11 + (i00 % p.ne10)*p.nb10;
+}
+
+uint dst_idx(uint idx) {
+    const uint i23 = idx / (p.ne22*p.ne21*p.ne20);
+    const uint i23_offset = i23 * p.ne22*p.ne21*p.ne20;
+    const uint i22 = (idx - i23_offset) / (p.ne21*p.ne20);
+    const uint i22_offset = i22*p.ne21*p.ne20;
+    const uint i21 = (idx - i23_offset - i22_offset) / p.ne20;
+    const uint i20 = idx - i23_offset - i22_offset - i21*p.ne20;
+    return i23*p.nb23 + i22*p.nb22 + i21*p.nb21 + i20*p.nb20;
+}
diff --git a/ggml/src/vulkan-shaders/generic_head.comp b/ggml/src/vulkan-shaders/generic_head.comp
new file mode 100644 (file)
index 0000000..66e46ae
--- /dev/null
@@ -0,0 +1,9 @@
+#extension GL_EXT_shader_16bit_storage : require
+
+layout (push_constant) uniform parameter
+{
+    uint KX;
+    uint KY;
+    float param1;
+    float param2;
+} p;
diff --git a/ggml/src/vulkan-shaders/generic_unary_head.comp b/ggml/src/vulkan-shaders/generic_unary_head.comp
new file mode 100644 (file)
index 0000000..de08de7
--- /dev/null
@@ -0,0 +1,35 @@
+#extension GL_EXT_shader_16bit_storage : require
+
+layout (push_constant) uniform parameter
+{
+    uint ne;
+    uint ne00; uint ne01; uint ne02; uint ne03; uint nb00; uint nb01; uint nb02; uint nb03;
+    uint ne10; uint ne11; uint ne12; uint ne13; uint nb10; uint nb11; uint nb12; uint nb13;
+    uint d_offset;
+    float param1; float param2;
+} p;
+
+layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_d[];};
+
+uint src0_idx(uint idx) {
+    const uint i03 = idx / (p.ne02*p.ne01*p.ne00);
+    const uint i03_offset = i03 * p.ne02*p.ne01*p.ne00;
+    const uint i02 = (idx - i03_offset) / (p.ne01*p.ne00);
+    const uint i02_offset = i02*p.ne01*p.ne00;
+    const uint i01 = (idx - i03_offset - i02_offset) / p.ne00;
+    const uint i00 = idx - i03_offset - i02_offset - i01*p.ne00;
+    return i03*p.nb03 + i02*p.nb02 + i01*p.nb01 + i00*p.nb00;
+}
+
+uint dst_idx(uint idx) {
+    const uint i13 = idx / (p.ne12*p.ne11*p.ne10);
+    const uint i13_offset = i13 * p.ne12*p.ne11*p.ne10;
+    const uint i12 = (idx - i13_offset) / (p.ne11*p.ne10);
+    const uint i12_offset = i12*p.ne11*p.ne10;
+    const uint i11 = (idx - i13_offset - i12_offset) / p.ne10;
+    const uint i10 = idx - i13_offset - i12_offset - i11*p.ne10;
+    return i13*p.nb13 + i12*p.nb12 + i11*p.nb11 + i10*p.nb10;
+}
diff --git a/ggml/src/vulkan-shaders/get_rows.comp b/ggml/src/vulkan-shaders/get_rows.comp
new file mode 100644 (file)
index 0000000..e9ff22e
--- /dev/null
@@ -0,0 +1,26 @@
+#version 450
+
+#include "types.comp"
+#include "generic_binary_head.comp"
+
+void main() {
+    const uint i00 = gl_GlobalInvocationID.x;
+    const uint i10 = gl_GlobalInvocationID.y;
+    const uint i11 = (gl_GlobalInvocationID.z)/p.ne12;
+    const uint i12 = (gl_GlobalInvocationID.z)%p.ne12;
+
+    if (i00 >= p.ne00) {
+        return;
+    }
+
+    const uint i01 = data_b[i10*p.nb10 + i11*p.nb11 + i12*p.nb12];
+
+    const uint a_offset = i01*p.nb01 + i11*p.nb02 + i12*p.nb03;
+    const uint d_offset = i10*p.nb21 + i11*p.nb22 + i12*p.nb23;
+
+#ifndef OPTIMIZATION_ERROR_WORKAROUND
+    data_d[d_offset + i00] = D_TYPE(data_a[a_offset + i00]);
+#else
+    data_d[d_offset + i00] = data_a[a_offset + i00];
+#endif
+}
diff --git a/ggml/src/vulkan-shaders/get_rows_quant.comp b/ggml/src/vulkan-shaders/get_rows_quant.comp
new file mode 100644 (file)
index 0000000..53a9a96
--- /dev/null
@@ -0,0 +1,31 @@
+#version 450
+
+#include "types.comp"
+#include "generic_binary_head.comp"
+#include "dequant_funcs.comp"
+
+void main() {
+    const uint i00 = (gl_GlobalInvocationID.x)*2;
+    const uint i10 = gl_GlobalInvocationID.y;
+    const uint i11 = (gl_GlobalInvocationID.z)/p.ne12;
+    const uint i12 = (gl_GlobalInvocationID.z)%p.ne12;
+
+    if (i00 >= p.ne00) {
+        return;
+    }
+
+    const uint i01 = data_b[i10*p.nb10 + i11*p.nb11 + i12*p.nb12];
+
+    const uint a_offset = i01*p.nb01 + i11*p.nb02 + i12*p.nb03;
+    const uint d_offset = i10*p.nb21 + i11*p.nb22 + i12*p.nb23;
+
+    const uint ib = a_offset + i00/QUANT_K; // block index
+    const uint iqs = (i00%QUANT_K)/QUANT_R; // quant index
+    const uint iybs = i00 - i00%QUANT_K; // dst block start index
+    const uint y_offset = QUANT_R == 1 ? 1 : QUANT_K/2;
+
+    vec2 v = dequantize(ib, iqs, 0);
+
+    data_d[d_offset + iybs + iqs           ] = D_TYPE(v.x);
+    data_d[d_offset + iybs + iqs + y_offset] = D_TYPE(v.y);
+}
diff --git a/ggml/src/vulkan-shaders/mul.comp b/ggml/src/vulkan-shaders/mul.comp
new file mode 100644 (file)
index 0000000..bbb0aa1
--- /dev/null
@@ -0,0 +1,12 @@
+#version 450
+
+#include "types.comp"
+#include "generic_binary_head.comp"
+
+void main() {
+    if (gl_GlobalInvocationID.x >= p.ne) {
+        return;
+    }
+
+    data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]) * FLOAT_TYPE(data_b[src1_idx(gl_GlobalInvocationID.x)]));
+}
diff --git a/ggml/src/vulkan-shaders/mul_mat_split_k_reduce.comp b/ggml/src/vulkan-shaders/mul_mat_split_k_reduce.comp
new file mode 100644 (file)
index 0000000..825b910
--- /dev/null
@@ -0,0 +1,29 @@
+#version 450
+
+#extension GL_EXT_control_flow_attributes : enable
+
+layout(local_size_x = 256, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {float data_a[];};
+layout (binding = 1) writeonly buffer D {float data_d[];};
+
+layout (push_constant) uniform parameter {
+    uint ne;
+    uint k_num;
+} p;
+
+void main() {
+    const uint idx = gl_GlobalInvocationID.x;
+
+    if (idx >= p.ne) {
+        return;
+    }
+
+    float result = 0.0f;
+
+    [[unroll]] for (uint i = 0; i < p.k_num; i++) {
+        result += data_a[i * p.ne + idx];
+    }
+
+    data_d[idx] = result;
+}
diff --git a/ggml/src/vulkan-shaders/mul_mat_vec.comp b/ggml/src/vulkan-shaders/mul_mat_vec.comp
new file mode 100644 (file)
index 0000000..15d2a80
--- /dev/null
@@ -0,0 +1,50 @@
+#version 450
+
+#ifdef FLOAT16
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require
+#endif
+
+#include "mul_mat_vec_base.comp"
+
+layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in;
+
+layout (constant_id = 0) const uint BLOCK_SIZE = 32;
+
+shared FLOAT_TYPE tmp[BLOCK_SIZE];
+
+void main() {
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
+    const uint tid = gl_LocalInvocationID.x;
+
+    uint a_offset, b_offset, d_offset;
+    get_offsets(a_offset, b_offset, d_offset);
+
+    const uint y_offset = QUANT_R == 1 ? 1 : QUANT_K/2;
+
+    tmp[tid] = FLOAT_TYPE(0.0f);
+
+    [[unroll]] for (uint i = 0; i < p.ncols/BLOCK_SIZE; i += 2) {
+        const uint col = i*BLOCK_SIZE + 2*tid;
+        const uint ib = (row*p.ncols + col)/QUANT_K; // block index
+        const uint iqs = (col%QUANT_K)/QUANT_R; // quant index
+        const uint iybs = col - col%QUANT_K; // y block start index
+
+        vec2 v = dequantize(ib, iqs, a_offset / QUANT_K);
+
+        // matrix multiplication
+        tmp[tid] += FLOAT_TYPE(v.x) * FLOAT_TYPE(data_b[b_offset + iybs + iqs]) +
+                    FLOAT_TYPE(v.y) * FLOAT_TYPE(data_b[b_offset + iybs + iqs + y_offset]);
+    }
+
+    // sum up partial sums and write back result
+    barrier();
+    [[unroll]] for (uint s = BLOCK_SIZE/2; s > 0; s >>= 1) {
+        if (tid < s) {
+            tmp[tid] += tmp[tid + s];
+        }
+        barrier();
+    }
+    if (tid == 0) {
+        data_d[d_offset + row] = D_TYPE(tmp[0]);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/mul_mat_vec_base.comp b/ggml/src/vulkan-shaders/mul_mat_vec_base.comp
new file mode 100644 (file)
index 0000000..5920bc9
--- /dev/null
@@ -0,0 +1,81 @@
+#extension GL_EXT_control_flow_attributes : enable
+#extension GL_EXT_shader_16bit_storage : require
+#extension GL_EXT_shader_8bit_storage : require
+
+#define K_QUANTS_PER_ITERATION 2
+
+#ifdef MUL_MAT_ID
+#define EXPERT_COUNT 8
+#endif
+
+#include "types.comp"
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) readonly buffer B {B_TYPE data_b[];};
+layout (binding = 2) writeonly buffer D {D_TYPE data_d[];};
+#ifdef MUL_MAT_ID
+layout (binding = 3) readonly buffer IDS {int data_ids[];};
+#endif
+
+#include "dequant_funcs.comp"
+
+layout (push_constant) uniform parameter
+{
+    uint ncols;
+    uint stride_a;
+    uint stride_b;
+    uint stride_d;
+
+    uint batch_stride_a;
+    uint batch_stride_b;
+    uint batch_stride_d;
+
+#ifdef MUL_MAT_ID
+    uint nei0;
+    uint ne11;
+#else
+    uint ne02;
+    uint ne12;
+    uint broadcast2;
+    uint broadcast3;
+#endif
+} p;
+
+void get_offsets(out uint a_offset, out uint b_offset, out uint d_offset) {
+#ifdef MUL_MAT_ID
+    const uint expert_idx = gl_GlobalInvocationID.y;
+#else
+    const uint batch_idx = gl_GlobalInvocationID.y;
+#endif
+
+#ifndef MUL_MAT_ID
+    const uint i13 = batch_idx / p.ne12;
+    const uint i12 = batch_idx % p.ne12;
+
+    const uint i03 = i13 / p.broadcast3;
+    const uint i02 = i12 / p.broadcast2;
+
+    const uint batch_idx_a = i03 * p.ne02 + i02;
+#else
+    const uint expert_id = data_ids[expert_idx];
+#endif
+
+    a_offset =
+#ifdef MUL_MAT_ID
+            expert_id * p.batch_stride_a;
+#else
+            batch_idx_a * p.batch_stride_a;
+#endif
+    b_offset =
+#ifdef MUL_MAT_ID
+            (expert_idx % p.ne11) * p.stride_b;
+#else
+            batch_idx * p.batch_stride_b;
+#endif
+    d_offset =
+#ifdef MUL_MAT_ID
+            expert_idx * p.stride_d;
+#else
+            batch_idx * p.batch_stride_d;
+#endif
+}
diff --git a/ggml/src/vulkan-shaders/mul_mat_vec_nc.comp b/ggml/src/vulkan-shaders/mul_mat_vec_nc.comp
new file mode 100644 (file)
index 0000000..cb3f3c0
--- /dev/null
@@ -0,0 +1,71 @@
+#version 450
+
+#extension GL_EXT_control_flow_attributes : enable
+#extension GL_EXT_shader_16bit_storage : require
+
+#define BLOCK_SIZE 32
+#define FLOAT_TYPE float
+
+layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) readonly buffer B {B_TYPE data_b[];};
+layout (binding = 2) writeonly buffer D {D_TYPE dst[];};
+
+layout (push_constant) uniform parameter
+{
+    uint ncols_x;
+    uint nrows_x;
+    uint row_stride_x;
+    uint channel_stride_x;
+    uint channel_x_divisor;
+    uint b_offset;
+    uint d_offset;
+} p;
+
+shared FLOAT_TYPE tmp[BLOCK_SIZE];
+
+void main() {
+    const uint tid       = gl_LocalInvocationID.x;
+    const uint row_x     = gl_GlobalInvocationID.y;
+    const uint channel   = gl_GlobalInvocationID.z;
+    const uint channel_x = channel / p.channel_x_divisor;
+
+    const uint nrows_y   = p.ncols_x;
+    const uint nrows_dst = p.nrows_x;
+    const uint row_dst   = row_x;
+
+    const uint idst = channel*nrows_dst + row_dst;
+
+    tmp[tid] = 0.0f;
+
+    for (uint col_x0 = 0; col_x0 < p.ncols_x; col_x0 += BLOCK_SIZE) {
+        const uint col_x = col_x0 + tid;
+
+        if (col_x >= p.ncols_x) {
+            break;
+        }
+
+        const uint row_y = col_x;
+
+        const uint ix = channel_x*p.channel_stride_x + row_x*p.row_stride_x + col_x;
+        const uint iy = channel*nrows_y + row_y;
+
+        const FLOAT_TYPE xi = FLOAT_TYPE(data_a[ix]);
+
+        tmp[tid] += xi * FLOAT_TYPE(data_b[iy]);
+    }
+
+    // sum up partial sums and write back result
+    barrier();
+    [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) {
+        if (tid < s) {
+            tmp[tid] += tmp[tid + s];
+        }
+        barrier();
+    }
+
+    if (tid == 0) {
+        dst[idst] = tmp[0];
+    }
+}
diff --git a/ggml/src/vulkan-shaders/mul_mat_vec_p021.comp b/ggml/src/vulkan-shaders/mul_mat_vec_p021.comp
new file mode 100644 (file)
index 0000000..4b1871c
--- /dev/null
@@ -0,0 +1,73 @@
+#version 450
+
+#extension GL_EXT_control_flow_attributes : enable
+#extension GL_EXT_shader_16bit_storage : require
+
+#define BLOCK_SIZE 32
+#define FLOAT_TYPE float
+
+layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) readonly buffer B {B_TYPE data_b[];};
+layout (binding = 2) writeonly buffer D {D_TYPE dst[];};
+
+layout (push_constant) uniform parameter
+{
+    uint ncols_x;
+    uint nrows_x;
+    uint nchannels_x;
+    uint nchannels_y;
+    uint b_offset;
+    uint d_offset;
+} p;
+
+shared FLOAT_TYPE tmp[BLOCK_SIZE];
+
+void main() {
+    const uint tid = gl_LocalInvocationID.x;
+    const uint row_x = gl_GlobalInvocationID.y;
+    const uint channel = gl_GlobalInvocationID.z;
+    const uint channel_x = channel / (p.nchannels_y / p.nchannels_x);
+
+    const uint nrows_y = p.ncols_x;
+    const uint nrows_dst = p.nrows_x;
+    const uint row_dst = row_x;
+
+    tmp[tid] = FLOAT_TYPE(0.0f);
+
+    for (uint col_x0 = 0; col_x0 < p.ncols_x; col_x0 += BLOCK_SIZE) {
+        const uint col_x = col_x0 + tid;
+
+        if (col_x >= p.ncols_x) {
+            break;
+        }
+
+        // x is transposed and permuted
+        const uint ix = row_x*p.nchannels_x*p.ncols_x + channel_x*p.ncols_x + col_x;
+        const FLOAT_TYPE xi = FLOAT_TYPE(data_a[ix]);
+
+        const uint row_y = col_x;
+
+        // y is not transposed but permuted
+        const uint iy = channel*nrows_y + row_y;
+
+        tmp[tid] += xi * FLOAT_TYPE(data_b[iy]);
+    }
+
+    // dst is not transposed and not permuted
+    const uint idst = channel*nrows_dst + row_dst;
+
+    // sum up partial sums and write back result
+    barrier();
+    [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) {
+        if (tid < s) {
+            tmp[tid] += tmp[tid + s];
+        }
+        barrier();
+    }
+
+    if (tid == 0) {
+        dst[idst] = tmp[0];
+    }
+}
diff --git a/ggml/src/vulkan-shaders/mul_mat_vec_q2_k.comp b/ggml/src/vulkan-shaders/mul_mat_vec_q2_k.comp
new file mode 100644 (file)
index 0000000..4cd9779
--- /dev/null
@@ -0,0 +1,73 @@
+#version 450
+
+#include "mul_mat_vec_base.comp"
+
+layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
+
+shared FLOAT_TYPE tmp[32];
+
+void main() {
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
+
+    uint a_offset, b_offset, d_offset;
+    get_offsets(a_offset, b_offset, d_offset);
+
+    const uint num_blocks_per_row = p.ncols / QUANT_K;
+    const uint ib0 = a_offset / QUANT_K + row*num_blocks_per_row;
+
+    const uint tid = gl_LocalInvocationID.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...16
+    const uint ix  = gl_LocalInvocationID.x%K_QUANTS_PER_ITERATION;  // 0 or 0, 1
+
+    const uint step = 16/K_QUANTS_PER_ITERATION;            // 16 or 8
+
+    const uint v_im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
+    const uint v_in = tid - step*v_im;                      // 0...15 or 0...7
+
+    const uint l0 = K_QUANTS_PER_ITERATION*v_in;            // 0...15
+    const uint q_offset = 32*v_im + l0;
+    const uint s_offset = 8*v_im;
+    const uint y_offset = 128*v_im + l0;
+
+    tmp[16 * ix + tid] = FLOAT_TYPE(0.0); // partial sum for thread in warp
+
+    [[unroll]] for (uint i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+        const uint y_idx = i * QUANT_K + y_offset;
+
+        const FLOAT_TYPE dall = FLOAT_TYPE(data_a[ib0 + i].d.x);
+        const FLOAT_TYPE dmin = FLOAT_TYPE(data_a[ib0 + i].d.y);
+
+        FLOAT_TYPE sum1 = FLOAT_TYPE(0.0);
+        FLOAT_TYPE sum2 = FLOAT_TYPE(0.0);
+        for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) {
+            sum1 += FLOAT_TYPE(data_b[b_offset + y_idx + l +  0]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 0] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l + 0] >> 0) & 3)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 16]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 1] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l +16] >> 0) & 3)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 32]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 2] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l + 0] >> 2) & 3)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 48]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 3] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l +16] >> 2) & 3)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 64]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 4] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l + 0] >> 4) & 3)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 80]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 5] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l +16] >> 4) & 3)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 96]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 6] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l + 0] >> 6) & 3)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l +112]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 7] & 0xF) * FLOAT_TYPE((data_a[ib0 + i].qs[q_offset + l +16] >> 6) & 3);
+            sum2 += FLOAT_TYPE(data_b[b_offset + y_idx + l +  0]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 0] >> 4) & 0xF)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 16]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 1] >> 4) & 0xF)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 32]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 2] >> 4) & 0xF)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 48]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 3] >> 4) & 0xF)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 64]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 4] >> 4) & 0xF)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 80]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 5] >> 4) & 0xF)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l + 96]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 6] >> 4) & 0xF)
+                  + FLOAT_TYPE(data_b[b_offset + y_idx + l +112]) * FLOAT_TYPE((data_a[ib0 + i].scales[s_offset + 7] >> 4) & 0xF);
+        }
+        tmp[16 * ix + tid] += dall * sum1 - dmin * sum2;
+    }
+
+    // sum up partial sums and write back result
+    barrier();
+    [[unroll]] for (uint s = 16; s > 0; s >>= 1) {
+        if (tid < s) {
+            tmp[tid] += tmp[tid + s];
+        }
+        barrier();
+    }
+    if (tid == 0) {
+        data_d[d_offset + row] = D_TYPE(tmp[0]);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/mul_mat_vec_q3_k.comp b/ggml/src/vulkan-shaders/mul_mat_vec_q3_k.comp
new file mode 100644 (file)
index 0000000..a6e430e
--- /dev/null
@@ -0,0 +1,66 @@
+#version 450
+
+#include "mul_mat_vec_base.comp"
+
+layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
+
+shared FLOAT_TYPE tmp[32];
+
+void main() {
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
+
+    uint a_offset, b_offset, d_offset;
+    get_offsets(a_offset, b_offset, d_offset);
+
+    const uint num_blocks_per_row = p.ncols / QUANT_K;
+    const uint ib0 = a_offset / QUANT_K + row*num_blocks_per_row;
+
+    const uint tid = gl_LocalInvocationID.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...16
+    const uint ix  = gl_LocalInvocationID.x%K_QUANTS_PER_ITERATION;  // 0 or 0, 1
+
+    const uint step = 16/K_QUANTS_PER_ITERATION;            // 16 or 8
+
+    const uint v_im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
+    const uint v_in = tid - step*v_im;                      // 0...15 or 0...7
+
+    const uint8_t m = uint8_t(1 << (4 * v_im));
+
+    const uint l0 = K_QUANTS_PER_ITERATION*v_in;            // 0...15
+    const uint q_offset = 32*v_im + l0;
+    const uint y_offset = 128*v_im + l0;
+
+    tmp[16 * ix + tid] = FLOAT_TYPE(0.0); // partial sum for thread in warp
+
+    const uint s_shift = 4 * v_im;
+
+    [[unroll]] for (uint i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+        const uint y_idx = i * QUANT_K + y_offset;
+
+        const FLOAT_TYPE d = FLOAT_TYPE(data_a[ib0 + i].d);
+
+        FLOAT_TYPE sum = FLOAT_TYPE(0.0);
+        for (int l = 0; l < K_QUANTS_PER_ITERATION; ++l) {
+            sum += FLOAT_TYPE(data_b[b_offset + y_idx + l +  0]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[0] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[ 8] >> (s_shift + 0) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l   ]     ) & 3) - (((data_a[ib0 + i].hmask[l0 + l   ] & (m << 0)) != 0) ? 0 : 4))
+                 + FLOAT_TYPE(data_b[b_offset + y_idx + l + 32]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[2] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[10] >> (s_shift + 0) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l   ] >> 2) & 3) - (((data_a[ib0 + i].hmask[l0 + l   ] & (m << 1)) != 0) ? 0 : 4))
+                 + FLOAT_TYPE(data_b[b_offset + y_idx + l + 64]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[4] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[ 8] >> (s_shift + 2) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l   ] >> 4) & 3) - (((data_a[ib0 + i].hmask[l0 + l   ] & (m << 2)) != 0) ? 0 : 4))
+                 + FLOAT_TYPE(data_b[b_offset + y_idx + l + 96]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[6] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[10] >> (s_shift + 2) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l   ] >> 6) & 3) - (((data_a[ib0 + i].hmask[l0 + l   ] & (m << 3)) != 0) ? 0 : 4))
+                 + FLOAT_TYPE(data_b[b_offset + y_idx + l + 16]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[1] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[ 9] >> (s_shift + 0) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l+16]     ) & 3) - (((data_a[ib0 + i].hmask[l0 + l+16] & (m << 0)) != 0) ? 0 : 4))
+                 + FLOAT_TYPE(data_b[b_offset + y_idx + l + 48]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[3] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[11] >> (s_shift + 0) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l+16] >> 2) & 3) - (((data_a[ib0 + i].hmask[l0 + l+16] & (m << 1)) != 0) ? 0 : 4))
+                 + FLOAT_TYPE(data_b[b_offset + y_idx + l + 80]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[5] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[ 9] >> (s_shift + 2) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l+16] >> 4) & 3) - (((data_a[ib0 + i].hmask[l0 + l+16] & (m << 2)) != 0) ? 0 : 4))
+                 + FLOAT_TYPE(data_b[b_offset + y_idx + l +112]) * FLOAT_TYPE(int8_t(((data_a[ib0 + i].scales[7] >> s_shift) & 0xF) | ((data_a[ib0 + i].scales[11] >> (s_shift + 2) & 0x3) << 4)) - 32) * FLOAT_TYPE(((data_a[ib0 + i].qs[q_offset + l+16] >> 6) & 3) - (((data_a[ib0 + i].hmask[l0 + l+16] & (m << 3)) != 0) ? 0 : 4));
+        }
+        tmp[16 * ix + tid] += d * sum;
+    }
+
+    // sum up partial sums and write back result
+    barrier();
+    [[unroll]] for (uint s = 16; s > 0; s >>= 1) {
+        if (tid < s) {
+            tmp[tid] += tmp[tid + s];
+        }
+        barrier();
+    }
+    if (tid == 0) {
+        data_d[d_offset + row] = D_TYPE(tmp[0]);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/mul_mat_vec_q4_k.comp b/ggml/src/vulkan-shaders/mul_mat_vec_q4_k.comp
new file mode 100644 (file)
index 0000000..7556936
--- /dev/null
@@ -0,0 +1,115 @@
+#version 450
+
+#include "mul_mat_vec_base.comp"
+
+layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
+
+shared FLOAT_TYPE tmp[32];
+
+void main() {
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
+
+    uint a_offset, b_offset, d_offset;
+    get_offsets(a_offset, b_offset, d_offset);
+
+    const uint num_blocks_per_row = p.ncols / QUANT_K;
+    const uint ib0 = a_offset / QUANT_K + row*num_blocks_per_row;
+
+    const uint tid = gl_LocalInvocationID.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...16
+    const uint ix  = gl_LocalInvocationID.x%K_QUANTS_PER_ITERATION;  // 0 or 0, 1
+
+    const uint step = 8/K_QUANTS_PER_ITERATION;             // 8 or 4
+
+    const uint il = tid/step;                               // 0...3
+    const uint ir = tid - step*il;                          // 0...7 or 0...3
+    const uint n =  2 * K_QUANTS_PER_ITERATION;             // 2 or 4
+
+    const uint v_im = il / 2;  // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
+    const uint v_in = il % 2;
+
+    const uint l0 = n * (2 * ir + v_in);            // 0...15
+    const uint q_offset = 32*v_im + l0;
+    const uint y_offset = 64*v_im + l0;
+
+    tmp[16 * ix + tid] = FLOAT_TYPE(0.0); // partial sum for thread in warp
+
+    [[unroll]] for (uint i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+        const uint y1_idx = i * QUANT_K + y_offset;
+        const uint y2_idx = y1_idx + 128;
+
+        const FLOAT_TYPE dall = FLOAT_TYPE(data_a[ib0 + i].d.x);
+        const FLOAT_TYPE dmin = FLOAT_TYPE(data_a[ib0 + i].d.y);
+
+        const uint8_t sc0 = uint8_t(  data_a[ib0 + i].scales[v_im * 2    ]       & 0x3f);
+        const uint8_t sc1 = uint8_t(  data_a[ib0 + i].scales[v_im * 2 + 1]       & 0x3f);
+        const uint8_t sc2 = uint8_t(  data_a[ib0 + i].scales[v_im * 2 + 4]       & 0x3f);
+        const uint8_t sc3 = uint8_t(  data_a[ib0 + i].scales[v_im * 2 + 5]       & 0x3f);
+        const uint8_t sc4 = uint8_t(( data_a[ib0 + i].scales[v_im * 2 + 8]       & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2    ] & 0xc0) >> 2));
+        const uint8_t sc5 = uint8_t(( data_a[ib0 + i].scales[v_im * 2 + 9]       & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 1] & 0xc0) >> 2));
+        const uint8_t sc6 = uint8_t(((data_a[ib0 + i].scales[v_im * 2 + 8] >> 4) & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 4] & 0xc0) >> 2));
+        const uint8_t sc7 = uint8_t(((data_a[ib0 + i].scales[v_im * 2 + 9] >> 4) & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 5] & 0xc0) >> 2));
+
+#if K_QUANTS_PER_ITERATION == 2
+        const uint8_t q4_0  = uint8_t(data_a[ib0 + i].qs[q_offset     ] & 0xf);
+        const uint8_t q4_1  = uint8_t(data_a[ib0 + i].qs[q_offset +  1] & 0xf);
+        const uint8_t q4_2  = uint8_t(data_a[ib0 + i].qs[q_offset +  2] & 0xf);
+        const uint8_t q4_3  = uint8_t(data_a[ib0 + i].qs[q_offset +  3] & 0xf);
+        const uint8_t q4_4  = uint8_t(data_a[ib0 + i].qs[q_offset     ]  >> 4);
+        const uint8_t q4_5  = uint8_t(data_a[ib0 + i].qs[q_offset +  1]  >> 4);
+        const uint8_t q4_6  = uint8_t(data_a[ib0 + i].qs[q_offset +  2]  >> 4);
+        const uint8_t q4_7  = uint8_t(data_a[ib0 + i].qs[q_offset +  3]  >> 4);
+        const uint8_t q4_8  = uint8_t(data_a[ib0 + i].qs[q_offset + 64] & 0xf);
+        const uint8_t q4_9  = uint8_t(data_a[ib0 + i].qs[q_offset + 65] & 0xf);
+        const uint8_t q4_10 = uint8_t(data_a[ib0 + i].qs[q_offset + 66] & 0xf);
+        const uint8_t q4_11 = uint8_t(data_a[ib0 + i].qs[q_offset + 67] & 0xf);
+        const uint8_t q4_12 = uint8_t(data_a[ib0 + i].qs[q_offset + 64]  >> 4);
+        const uint8_t q4_13 = uint8_t(data_a[ib0 + i].qs[q_offset + 65]  >> 4);
+        const uint8_t q4_14 = uint8_t(data_a[ib0 + i].qs[q_offset + 66]  >> 4);
+        const uint8_t q4_15 = uint8_t(data_a[ib0 + i].qs[q_offset + 67]  >> 4);
+
+        const FLOAT_TYPE sx = FLOAT_TYPE(FLOAT_TYPE(data_b[b_offset + y1_idx]) * q4_0 + FLOAT_TYPE(data_b[b_offset + y1_idx + 1]) * q4_1 + FLOAT_TYPE(data_b[b_offset + y1_idx + 2]) * q4_2 + FLOAT_TYPE(data_b[b_offset + y1_idx + 3]) * q4_3);
+        const FLOAT_TYPE sy = FLOAT_TYPE(FLOAT_TYPE(data_b[b_offset + y1_idx + 32]) * q4_4 + FLOAT_TYPE(data_b[b_offset + y1_idx + 33]) * q4_5 + FLOAT_TYPE(data_b[b_offset + y1_idx + 34]) * q4_6 + FLOAT_TYPE(data_b[b_offset + y1_idx + 35]) * q4_7);
+        const FLOAT_TYPE sz = FLOAT_TYPE(FLOAT_TYPE(data_b[b_offset + y2_idx]) * q4_8 + FLOAT_TYPE(data_b[b_offset + y2_idx + 1]) * q4_9 + FLOAT_TYPE(data_b[b_offset + y2_idx + 2]) * q4_10 + FLOAT_TYPE(data_b[b_offset + y2_idx + 3]) * q4_11);
+        const FLOAT_TYPE sw = FLOAT_TYPE(FLOAT_TYPE(data_b[b_offset + y2_idx + 32]) * q4_12 + FLOAT_TYPE(data_b[b_offset + y2_idx + 33]) * q4_13 + FLOAT_TYPE(data_b[b_offset + y2_idx + 34]) * q4_14 + FLOAT_TYPE(data_b[b_offset + y2_idx + 35]) * q4_15);
+        const FLOAT_TYPE smin = FLOAT_TYPE(
+            FLOAT_TYPE(data_b[b_offset + y1_idx    ]) * sc2 + FLOAT_TYPE(data_b[b_offset + y1_idx + 32]) * sc3 + FLOAT_TYPE(data_b[b_offset + y2_idx    ]) * sc6 + FLOAT_TYPE(data_b[b_offset + y2_idx + 32]) * sc7
+          + FLOAT_TYPE(data_b[b_offset + y1_idx + 1]) * sc2 + FLOAT_TYPE(data_b[b_offset + y1_idx + 33]) * sc3 + FLOAT_TYPE(data_b[b_offset + y2_idx + 1]) * sc6 + FLOAT_TYPE(data_b[b_offset + y2_idx + 33]) * sc7
+          + FLOAT_TYPE(data_b[b_offset + y1_idx + 2]) * sc2 + FLOAT_TYPE(data_b[b_offset + y1_idx + 34]) * sc3 + FLOAT_TYPE(data_b[b_offset + y2_idx + 2]) * sc6 + FLOAT_TYPE(data_b[b_offset + y2_idx + 34]) * sc7
+          + FLOAT_TYPE(data_b[b_offset + y1_idx + 3]) * sc2 + FLOAT_TYPE(data_b[b_offset + y1_idx + 35]) * sc3 + FLOAT_TYPE(data_b[b_offset + y2_idx + 3]) * sc6 + FLOAT_TYPE(data_b[b_offset + y2_idx + 35]) * sc7
+        );
+        tmp[16 * ix + tid] += FLOAT_TYPE(dall * (sx * sc0 + sy * sc1 + sz * sc4 + sw * sc5) - dmin * smin);
+#else
+        const uint8_t q4_0 = uint8_t(data_a[ib0 + i].qs[q_offset     ] & 0xf);
+        const uint8_t q4_1 = uint8_t(data_a[ib0 + i].qs[q_offset +  1] & 0xf);
+        const uint8_t q4_2 = uint8_t(data_a[ib0 + i].qs[q_offset     ]  >> 4);
+        const uint8_t q4_3 = uint8_t(data_a[ib0 + i].qs[q_offset +  1]  >> 4);
+        const uint8_t q4_4 = uint8_t(data_a[ib0 + i].qs[q_offset + 64] & 0xf);
+        const uint8_t q4_5 = uint8_t(data_a[ib0 + i].qs[q_offset + 65] & 0xf);
+        const uint8_t q4_6 = uint8_t(data_a[ib0 + i].qs[q_offset + 64]  >> 4);
+        const uint8_t q4_7 = uint8_t(data_a[ib0 + i].qs[q_offset + 65]  >> 4);
+
+        const FLOAT_TYPE sx = FLOAT_TYPE(FLOAT_TYPE(data_b[b_offset + y1_idx     ]) * q4_0  + FLOAT_TYPE(data_b[b_offset + y1_idx +  1]) * q4_1);
+        const FLOAT_TYPE sy = FLOAT_TYPE(FLOAT_TYPE(data_b[b_offset + y1_idx + 32]) * q4_2  + FLOAT_TYPE(data_b[b_offset + y1_idx + 33]) * q4_3);
+        const FLOAT_TYPE sz = FLOAT_TYPE(FLOAT_TYPE(data_b[b_offset + y2_idx     ]) * q4_4  + FLOAT_TYPE(data_b[b_offset + y2_idx +  1]) * q4_5);
+        const FLOAT_TYPE sw = FLOAT_TYPE(FLOAT_TYPE(data_b[b_offset + y2_idx + 32]) * q4_6 + FLOAT_TYPE(data_b[b_offset + y2_idx + 33]) * q4_7);
+        const FLOAT_TYPE smin = FLOAT_TYPE(
+            FLOAT_TYPE(data_b[b_offset + y1_idx]) * sc2 + FLOAT_TYPE(data_b[b_offset + y1_idx + 32]) * sc3 + FLOAT_TYPE(data_b[b_offset + y2_idx]) * sc6 + FLOAT_TYPE(data_b[b_offset + y2_idx + 32]) * sc7
+          + FLOAT_TYPE(data_b[b_offset + y1_idx + 1]) * sc2 + FLOAT_TYPE(data_b[b_offset + y1_idx + 33]) * sc3 + FLOAT_TYPE(data_b[b_offset + y2_idx + 1]) * sc6 + FLOAT_TYPE(data_b[b_offset + y2_idx + 33]) * sc7
+        );
+
+        tmp[16 * ix + tid] += FLOAT_TYPE(dall * (sx * FLOAT_TYPE(data_a[ib0 + i].scales[v_im] & 0x3f) + sy * FLOAT_TYPE(data_a[ib0 + i].scales[v_im + 1] & 0x3f) + sz * FLOAT_TYPE((data_a[ib0 + i].scales[v_im + 4] & 0x0f) | ((data_a[ib0 + i].scales[v_im] & 0xc0) >> 2)) + sw * FLOAT_TYPE((data_a[ib0 + i].scales[v_im + 5] & 0x0f) | ((data_a[ib0 + i].scales[v_im + 1] & 0xc0) >> 2))) - dmin * smin);
+#endif
+    }
+
+    // sum up partial sums and write back result
+    barrier();
+    [[unroll]] for (uint s = 16; s > 0; s >>= 1) {
+        if (tid < s) {
+            tmp[tid] += tmp[tid + s];
+        }
+        barrier();
+    }
+    if (tid == 0) {
+        data_d[d_offset + row] = D_TYPE(tmp[0]);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/mul_mat_vec_q5_k.comp b/ggml/src/vulkan-shaders/mul_mat_vec_q5_k.comp
new file mode 100644 (file)
index 0000000..9be3645
--- /dev/null
@@ -0,0 +1,111 @@
+#version 450
+
+#include "mul_mat_vec_base.comp"
+
+layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
+
+shared FLOAT_TYPE tmp[32];
+
+void main() {
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
+
+    uint a_offset, b_offset, d_offset;
+    get_offsets(a_offset, b_offset, d_offset);
+
+    const uint num_blocks_per_row = p.ncols / QUANT_K;
+    const uint ib0 = a_offset / QUANT_K + row*num_blocks_per_row;
+
+    const uint tid = gl_LocalInvocationID.x/2;  // 0...31 or 0...16
+    const uint ix  = gl_LocalInvocationID.x%2;  // 0 or 0, 1
+
+    const uint il = tid/4;                           // 0...3
+    const uint ir = tid - 4*il;                      // 0...7 or 0...3
+
+    const uint v_im = il / 2;  // 0 or 1. 0 computes 0,32 + 128,160, 1 computes 64,96 + 192,224
+    const uint v_in = il % 2;
+
+    const uint l0 = 4*ir + 2*v_in;                   // 0...15
+    const uint q_offset = 32*v_im + l0;
+    const uint y_offset = 64*v_im + l0;
+
+    const uint8_t hm1 = uint8_t(1 << (2*v_im));
+    const uint8_t hm2 = uint8_t(hm1 << 4);
+
+    tmp[16 * ix + tid] = FLOAT_TYPE(0.0); // partial sum for thread in warp
+
+    [[unroll]] for (uint i = ix; i < num_blocks_per_row; i += 2) {
+        const uint y1_idx = i * QUANT_K + y_offset;
+        const uint y2_idx = y1_idx + 128;
+
+        const FLOAT_TYPE dall = FLOAT_TYPE(data_a[ib0 + i].d.x);
+        const FLOAT_TYPE dmin = FLOAT_TYPE(data_a[ib0 + i].d.y);
+
+        const uint8_t sc0 = uint8_t(  data_a[ib0 + i].scales[v_im * 2    ]       & 0x3f);
+        const uint8_t sc1 = uint8_t(  data_a[ib0 + i].scales[v_im * 2 + 1]       & 0x3f);
+        const uint8_t sc2 = uint8_t(  data_a[ib0 + i].scales[v_im * 2 + 4]       & 0x3f);
+        const uint8_t sc3 = uint8_t(  data_a[ib0 + i].scales[v_im * 2 + 5]       & 0x3f);
+        const uint8_t sc4 = uint8_t(( data_a[ib0 + i].scales[v_im * 2 + 8]       & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2    ] & 0xc0) >> 2));
+        const uint8_t sc5 = uint8_t(( data_a[ib0 + i].scales[v_im * 2 + 9]       & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 1] & 0xc0) >> 2));
+        const uint8_t sc6 = uint8_t(((data_a[ib0 + i].scales[v_im * 2 + 8] >> 4) & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 4] & 0xc0) >> 2));
+        const uint8_t sc7 = uint8_t(((data_a[ib0 + i].scales[v_im * 2 + 9] >> 4) & 0x0f) | ((data_a[ib0 + i].scales[v_im * 2 + 5] & 0xc0) >> 2));
+
+        const uint8_t q4_0  = uint8_t(data_a[ib0 + i].qs[q_offset     ] & 0xf);
+        const uint8_t q4_1  = uint8_t(data_a[ib0 + i].qs[q_offset +  1] & 0xf);
+        const uint8_t q4_2  = uint8_t(data_a[ib0 + i].qs[q_offset + 16] & 0xf);
+        const uint8_t q4_3  = uint8_t(data_a[ib0 + i].qs[q_offset + 17] & 0xf);
+        const uint8_t q4_4  = uint8_t(data_a[ib0 + i].qs[q_offset     ]  >> 4);
+        const uint8_t q4_5  = uint8_t(data_a[ib0 + i].qs[q_offset +  1]  >> 4);
+        const uint8_t q4_6  = uint8_t(data_a[ib0 + i].qs[q_offset + 16]  >> 4);
+        const uint8_t q4_7  = uint8_t(data_a[ib0 + i].qs[q_offset + 17]  >> 4);
+        const uint8_t q4_8  = uint8_t(data_a[ib0 + i].qs[q_offset + 64] & 0xf);
+        const uint8_t q4_9  = uint8_t(data_a[ib0 + i].qs[q_offset + 65] & 0xf);
+        const uint8_t q4_10 = uint8_t(data_a[ib0 + i].qs[q_offset + 80] & 0xf);
+        const uint8_t q4_11 = uint8_t(data_a[ib0 + i].qs[q_offset + 81] & 0xf);
+        const uint8_t q4_12 = uint8_t(data_a[ib0 + i].qs[q_offset + 64]  >> 4);
+        const uint8_t q4_13 = uint8_t(data_a[ib0 + i].qs[q_offset + 65]  >> 4);
+        const uint8_t q4_14 = uint8_t(data_a[ib0 + i].qs[q_offset + 80]  >> 4);
+        const uint8_t q4_15 = uint8_t(data_a[ib0 + i].qs[q_offset + 81]  >> 4);
+
+        const FLOAT_TYPE sx = FLOAT_TYPE(
+            FLOAT_TYPE(data_b[b_offset + y1_idx     ]) * (q4_0 + (((data_a[ib0 + i].qh[l0     ] & hm1) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y1_idx +  1]) * (q4_1 + (((data_a[ib0 + i].qh[l0 +  1] & hm1) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y1_idx + 16]) * (q4_2 + (((data_a[ib0 + i].qh[l0 + 16] & hm1) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y1_idx + 17]) * (q4_3 + (((data_a[ib0 + i].qh[l0 + 17] & hm1) != 0) ? 16 : 0))
+        );
+        const FLOAT_TYPE sy = FLOAT_TYPE(
+            FLOAT_TYPE(data_b[b_offset + y1_idx + 32]) * (q4_4 + (((data_a[ib0 + i].qh[l0     ] & (hm1 << 1)) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y1_idx + 33]) * (q4_5 + (((data_a[ib0 + i].qh[l0 +  1] & (hm1 << 1)) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y1_idx + 48]) * (q4_6 + (((data_a[ib0 + i].qh[l0 + 16] & (hm1 << 1)) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y1_idx + 49]) * (q4_7 + (((data_a[ib0 + i].qh[l0 + 17] & (hm1 << 1)) != 0) ? 16 : 0))
+        );
+        const FLOAT_TYPE sz = FLOAT_TYPE(
+            FLOAT_TYPE(data_b[b_offset + y2_idx     ]) * (q4_8  + (((data_a[ib0 + i].qh[l0     ] & hm2) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y2_idx +  1]) * (q4_9  + (((data_a[ib0 + i].qh[l0 +  1] & hm2) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y2_idx + 16]) * (q4_10 + (((data_a[ib0 + i].qh[l0 + 16] & hm2) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y2_idx + 17]) * (q4_11 + (((data_a[ib0 + i].qh[l0 + 17] & hm2) != 0) ? 16 : 0))
+        );
+        const FLOAT_TYPE sw = FLOAT_TYPE(
+            FLOAT_TYPE(data_b[b_offset + y2_idx + 32]) * (q4_12 + (((data_a[ib0 + i].qh[l0     ] & (hm2 << 1)) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y2_idx + 33]) * (q4_13 + (((data_a[ib0 + i].qh[l0 +  1] & (hm2 << 1)) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y2_idx + 48]) * (q4_14 + (((data_a[ib0 + i].qh[l0 + 16] & (hm2 << 1)) != 0) ? 16 : 0))
+          + FLOAT_TYPE(data_b[b_offset + y2_idx + 49]) * (q4_15 + (((data_a[ib0 + i].qh[l0 + 17] & (hm2 << 1)) != 0) ? 16 : 0))
+        );
+        const FLOAT_TYPE smin = FLOAT_TYPE(
+            (FLOAT_TYPE(data_b[b_offset + y1_idx]) + FLOAT_TYPE(data_b[b_offset + y1_idx + 1]) + FLOAT_TYPE(data_b[b_offset + y1_idx + 16]) + FLOAT_TYPE(data_b[b_offset + y1_idx + 17])) * sc2 + (FLOAT_TYPE(data_b[b_offset + y1_idx + 32]) + FLOAT_TYPE(data_b[b_offset + y1_idx + 33]) + FLOAT_TYPE(data_b[b_offset + y1_idx + 48]) + FLOAT_TYPE(data_b[b_offset + y1_idx + 49])) * sc3
+          + (FLOAT_TYPE(data_b[b_offset + y2_idx]) + FLOAT_TYPE(data_b[b_offset + y2_idx + 1]) + FLOAT_TYPE(data_b[b_offset + y2_idx + 16]) + FLOAT_TYPE(data_b[b_offset + y2_idx + 17])) * sc6 + (FLOAT_TYPE(data_b[b_offset + y2_idx + 32]) + FLOAT_TYPE(data_b[b_offset + y2_idx + 33]) + FLOAT_TYPE(data_b[b_offset + y2_idx + 48]) + FLOAT_TYPE(data_b[b_offset + y2_idx + 49])) * sc7
+        );
+        tmp[16 * ix + tid] += FLOAT_TYPE(dall * (sx * sc0 + sy * sc1 + sz * sc4 + sw * sc5) - dmin * smin);
+    }
+
+    // sum up partial sums and write back result
+    barrier();
+    [[unroll]] for (uint s = 16; s > 0; s >>= 1) {
+        if (tid < s) {
+            tmp[tid] += tmp[tid + s];
+        }
+        barrier();
+    }
+    if (tid == 0) {
+        data_d[d_offset + row] = D_TYPE(tmp[0]);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/mul_mat_vec_q6_k.comp b/ggml/src/vulkan-shaders/mul_mat_vec_q6_k.comp
new file mode 100644 (file)
index 0000000..d610cf0
--- /dev/null
@@ -0,0 +1,79 @@
+#version 450
+
+#include "mul_mat_vec_base.comp"
+
+layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
+
+shared FLOAT_TYPE tmp[32];
+
+void main() {
+    const uint row = gl_WorkGroupID.x + gl_NumWorkGroups.x * gl_WorkGroupID.z;
+
+    uint a_offset, b_offset, d_offset;
+    get_offsets(a_offset, b_offset, d_offset);
+
+    const uint num_blocks_per_row = p.ncols / QUANT_K;
+    const uint ib0 = a_offset / QUANT_K + row*num_blocks_per_row;
+
+    const uint tid = gl_LocalInvocationID.x/K_QUANTS_PER_ITERATION;  // 0...31 or 0...16
+    const uint ix  = gl_LocalInvocationID.x%K_QUANTS_PER_ITERATION;  // 0 or 0, 1
+
+    const uint step = 16/K_QUANTS_PER_ITERATION;            // 16 or 8
+
+    const uint v_im = tid/step;                             // 0 or 1. 0 computes 0..., 1 computes 128...
+    const uint v_in = tid - step*v_im;                      // 0...15 or 0...7
+
+#if K_QUANTS_PER_ITERATION == 1
+    const uint l0 = v_in;                                   // 0...15
+    const uint is = 0;
+#else
+    const uint l0 = 4 * v_in;                               // 0, 4, 8, ..., 28
+    const uint is = v_in / 4;
+#endif
+
+    const uint ql_offset = 64*v_im + l0;
+    const uint qh_offset = 32*v_im + l0;
+    const uint s_offset  =  8*v_im + is;
+    const uint y_offset = 128*v_im + l0;
+
+    tmp[16 * ix + tid] = FLOAT_TYPE(0.0); // partial sum for thread in warp
+
+    [[unroll]] for (uint i = ix; i < num_blocks_per_row; i += K_QUANTS_PER_ITERATION) {
+        const uint y_idx   = i * QUANT_K + y_offset;
+
+        const FLOAT_TYPE d = FLOAT_TYPE(data_a[ib0 + i].d);
+
+#if K_QUANTS_PER_ITERATION == 1
+        FLOAT_TYPE sum = FLOAT_TYPE(data_b[b_offset + y_idx +  0]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 0]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset +  0] & 0xF) | ((data_a[ib0 + i].qh[qh_offset +  0] & 0x03) << 4)) - 32)
+                       + FLOAT_TYPE(data_b[b_offset + y_idx + 16]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 1]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 16] & 0xF) | ((data_a[ib0 + i].qh[qh_offset + 16] & 0x03) << 4)) - 32)
+                       + FLOAT_TYPE(data_b[b_offset + y_idx + 32]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 2]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 32] & 0xF) | ((data_a[ib0 + i].qh[qh_offset +  0] & 0x0c) << 2)) - 32)
+                       + FLOAT_TYPE(data_b[b_offset + y_idx + 48]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 3]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 48] & 0xF) | ((data_a[ib0 + i].qh[qh_offset + 16] & 0x0c) << 2)) - 32)
+                       + FLOAT_TYPE(data_b[b_offset + y_idx + 64]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 4]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset +  0]  >> 4) | ((data_a[ib0 + i].qh[qh_offset +  0] & 0x30) >> 0)) - 32)
+                       + FLOAT_TYPE(data_b[b_offset + y_idx + 80]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 5]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 16]  >> 4) | ((data_a[ib0 + i].qh[qh_offset + 16] & 0x30) >> 0)) - 32)
+                       + FLOAT_TYPE(data_b[b_offset + y_idx + 96]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 6]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 32]  >> 4) | ((data_a[ib0 + i].qh[qh_offset +  0] & 0xc0) >> 2)) - 32)
+                       + FLOAT_TYPE(data_b[b_offset + y_idx +112]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 7]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + 48]  >> 4) | ((data_a[ib0 + i].qh[qh_offset + 16] & 0xc0) >> 2)) - 32);
+        tmp[16 * ix + tid] += sum;
+#else
+        FLOAT_TYPE sum = FLOAT_TYPE(0.0);
+        [[unroll]] for (int l = 0; l < 4; ++l) {
+            sum += FLOAT_TYPE(data_b[b_offset + y_idx + l+ 0]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 0]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + l+ 0] & 0xF) | (((data_a[ib0 + i].qh[qh_offset + l] >> 0) & 3) << 4)) - 32)
+                 + FLOAT_TYPE(data_b[b_offset + y_idx + l+32]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 2]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + l+32] & 0xF) | (((data_a[ib0 + i].qh[qh_offset + l] >> 2) & 3) << 4)) - 32)
+                 + FLOAT_TYPE(data_b[b_offset + y_idx + l+64]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 4]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + l+ 0]  >> 4) | (((data_a[ib0 + i].qh[qh_offset + l] >> 4) & 3) << 4)) - 32)
+                 + FLOAT_TYPE(data_b[b_offset + y_idx + l+96]) * FLOAT_TYPE(data_a[ib0 + i].scales[s_offset + 6]) * d * FLOAT_TYPE(int8_t((data_a[ib0 + i].ql[ql_offset + l+32]  >> 4) | (((data_a[ib0 + i].qh[qh_offset + l] >> 6) & 3) << 4)) - 32);
+        }
+        tmp[16 * ix + tid] += sum;
+#endif
+    }
+
+    // sum up partial sums and write back result
+    barrier();
+    [[unroll]] for (uint s = 16; s > 0; s >>= 1) {
+        if (tid < s) {
+            tmp[tid] += tmp[tid + s];
+       }
+        barrier();
+    }
+    if (tid == 0) {
+        data_d[d_offset + row] = D_TYPE(tmp[0]);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/mul_mm.comp b/ggml/src/vulkan-shaders/mul_mm.comp
new file mode 100644 (file)
index 0000000..7c2b45c
--- /dev/null
@@ -0,0 +1,494 @@
+#version 450
+
+#extension GL_EXT_control_flow_attributes : enable
+#extension GL_EXT_shader_16bit_storage : require
+
+#ifdef FLOAT16
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require
+#endif
+
+#ifdef MUL_MAT_ID
+#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
+#endif
+
+#include "types.comp"
+
+#ifndef LOAD_VEC_A
+#define LOAD_VEC_A 1
+#endif
+#ifndef LOAD_VEC_B
+#define LOAD_VEC_B 1
+#endif
+
+layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) readonly buffer B {B_TYPE data_b[];};
+layout (binding = 2) writeonly buffer D {D_TYPE data_d[];};
+
+#ifdef MUL_MAT_ID
+layout (binding = 3) readonly buffer IDS {int data_ids[];};
+#endif
+
+layout (push_constant) uniform parameter
+{
+    uint M;
+    uint N;
+    uint K;
+    uint stride_a;
+    uint stride_b;
+    uint stride_d;
+
+    uint batch_stride_a;
+    uint batch_stride_b;
+    uint batch_stride_d;
+
+#ifdef MUL_MAT_ID
+    uint nei0;
+    uint nei1;
+    uint nbi1;
+    uint ne11;
+#else
+    uint k_split;
+    uint ne02;
+    uint ne12;
+    uint broadcast2;
+    uint broadcast3;
+#endif
+} p;
+
+layout (constant_id = 1) const uint BM = 64;
+layout (constant_id = 2) const uint BN = 64;
+layout (constant_id = 3) const uint BK = 16;  // Assumed to be 32 if working with a quant
+layout (constant_id = 4) const uint WM = 32;
+layout (constant_id = 5) const uint WN = 32;
+layout (constant_id = 6) const uint WMITER = 2;
+layout (constant_id = 7) const uint TM = 4;
+layout (constant_id = 8) const uint TN = 2;
+layout (constant_id = 9) const uint WARP = 32;
+
+shared FLOAT_TYPE buf_a[BM * (BK+1)];
+shared FLOAT_TYPE buf_b[BN * (BK+1)];
+
+#ifdef MUL_MAT_ID
+shared u16vec2 row_ids[2048];
+#endif
+
+void main() {
+#ifdef MUL_MAT_ID
+    const uint expert_idx = gl_GlobalInvocationID.z;
+#else
+    const uint batch_idx = gl_GlobalInvocationID.z;
+
+    const uint i13 = batch_idx / p.ne12;
+    const uint i12 = batch_idx % p.ne12;
+
+    const uint i03 = i13 / p.broadcast3;
+    const uint i02 = i12 / p.broadcast2;
+
+    const uint batch_idx_a = i03 * p.ne02 + i02;
+#endif
+
+    const uint blocks_m = (p.M + BM - 1) / BM;
+    const uint ir = gl_WorkGroupID.x % blocks_m;
+    const uint ik = gl_WorkGroupID.x / blocks_m;
+    const uint ic = gl_WorkGroupID.y;
+
+    const uint warp_i = gl_LocalInvocationID.x / WARP;
+    const uint warp_r = warp_i % (BM / WM);
+    const uint warp_c = warp_i / (BM / WM);
+
+    const uint WNITER = (WM * WN) / (WARP * TM * TN * WMITER);
+    const uint WSUBM = WM / WMITER;
+    const uint WSUBN = WN / WNITER;
+
+    const uint tiw = gl_LocalInvocationID.x % WARP;
+    const uint tiwr = tiw % (WSUBM / TM);
+    const uint tiwc = tiw / (WSUBM / TM);
+
+    const uint loadr_a = gl_LocalInvocationID.x % (BK / LOAD_VEC_A);
+    const uint loadc_a = gl_LocalInvocationID.x / (BK / LOAD_VEC_A);
+    const uint loadr_b = gl_LocalInvocationID.x % (BK / LOAD_VEC_B);
+    const uint loadc_b = gl_LocalInvocationID.x / (BK / LOAD_VEC_B);
+
+    const uint loadstride_a = gl_WorkGroupSize.x * LOAD_VEC_A / BK;
+    const uint loadstride_b = gl_WorkGroupSize.x * LOAD_VEC_B / BK;
+
+#ifdef MUL_MAT_ID
+    uint _ne1 = 0;
+    for (uint ii1 = 0; ii1 < p.nei1; ii1++) {
+        for (uint ii0 = 0; ii0 < p.nei0; ii0++) {
+            if (data_ids[ii1*p.nbi1 + ii0] == expert_idx) {
+                row_ids[_ne1] = u16vec2(ii0, ii1);
+                _ne1++;
+            }
+        }
+    }
+
+    barrier();
+
+    // Workgroup has no work
+    if (ic * BN >= _ne1) return;
+#endif
+
+#ifdef MUL_MAT_ID
+    const uint start_k = 0;
+    const uint end_k = p.K;
+#else
+    const uint start_k = ik * p.k_split;
+    const uint end_k = min(p.K, (ik + 1) * p.k_split);
+#endif
+
+    uint pos_a = (
+#ifdef MUL_MAT_ID
+        expert_idx * p.batch_stride_a +
+#else
+        batch_idx_a * p.batch_stride_a +
+#endif
+        ir * BM * p.stride_a + start_k) / LOAD_VEC_A;
+#ifdef MUL_MAT_ID
+    uint pos_b = 0;
+#else
+    uint pos_b = (batch_idx * p.batch_stride_b + ic * BN * p.stride_b + start_k) / LOAD_VEC_B;
+#endif
+
+    float sums[WMITER * TM * WNITER * TN];
+    FLOAT_TYPE cache_a[WMITER * TM];
+    FLOAT_TYPE cache_b[WNITER * TN];
+
+    [[unroll]] for (uint i = 0; i < WMITER*TM*WNITER*TN; i++) {
+        sums[i] = 0.0f;
+    }
+
+    [[unroll]] for (uint block = start_k; block < end_k; block += BK) {
+        [[unroll]] for (uint l = 0; l < BM; l += loadstride_a) {
+
+#if defined(DATA_A_F32) || defined(DATA_A_F16)
+#if LOAD_VEC_A == 8
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A;
+            buf_a[buf_idx    ] = FLOAT_TYPE(data_a[idx][0].x);
+            buf_a[buf_idx + 1] = FLOAT_TYPE(data_a[idx][0].y);
+            buf_a[buf_idx + 2] = FLOAT_TYPE(data_a[idx][0].z);
+            buf_a[buf_idx + 3] = FLOAT_TYPE(data_a[idx][0].w);
+            buf_a[buf_idx + 4] = FLOAT_TYPE(data_a[idx][1].x);
+            buf_a[buf_idx + 5] = FLOAT_TYPE(data_a[idx][1].y);
+            buf_a[buf_idx + 6] = FLOAT_TYPE(data_a[idx][1].z);
+            buf_a[buf_idx + 7] = FLOAT_TYPE(data_a[idx][1].w);
+#elif LOAD_VEC_A == 4
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A;
+            buf_a[buf_idx    ] = FLOAT_TYPE(data_a[idx].x);
+            buf_a[buf_idx + 1] = FLOAT_TYPE(data_a[idx].y);
+            buf_a[buf_idx + 2] = FLOAT_TYPE(data_a[idx].z);
+            buf_a[buf_idx + 3] = FLOAT_TYPE(data_a[idx].w);
+#else
+            if (ir * BM + loadc_a + l < p.M && block + loadr_a < end_k) {
+                buf_a[(loadc_a + l) * (BK+1) + loadr_a] = FLOAT_TYPE(data_a[pos_a + (loadc_a + l) * p.stride_a + loadr_a]);
+            } else {
+                buf_a[(loadc_a + l) * (BK+1) + loadr_a] = FLOAT_TYPE(0.0f);
+            }
+#endif
+#elif defined(DATA_A_Q4_0)
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a;
+
+            const uint ib = idx / 16;
+            const uint iqs = idx & 0xF;
+
+            const float d = float(data_a[ib].d);
+            const uint vui = uint(data_a[ib].qs[iqs]);
+            const vec2 v = (vec2(vui & 0xF, vui >> 4) - 8.0f) * d;
+
+            buf_a[buf_idx     ] = FLOAT_TYPE(v.x);
+            buf_a[buf_idx + 16] = FLOAT_TYPE(v.y);
+#elif defined(DATA_A_Q4_1)
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a;
+
+            const uint ib = idx / 16;
+            const uint iqs = idx & 0xF;
+
+            const float d = float(data_a[ib].d);
+            const float m = float(data_a[ib].m);
+            const uint vui = uint(data_a[ib].qs[iqs]);
+            const vec2 v = vec2(vui & 0xF, vui >> 4) * d + m;
+
+            buf_a[buf_idx     ] = FLOAT_TYPE(v.x);
+            buf_a[buf_idx + 16] = FLOAT_TYPE(v.y);
+#elif defined(DATA_A_Q5_0)
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a;
+
+            const uint ib = idx / 16;
+            const uint iqs = idx & 0xF;
+
+            const float d = float(data_a[ib].d);
+            const uint uint_qh = uint(data_a[ib].qh[1]) << 16 | data_a[ib].qh[0];
+            const ivec2 qh = ivec2(((uint_qh >> iqs) << 4) & 0x10, (uint_qh >> (iqs + 12)) & 0x10);
+            const uint vui = uint(data_a[ib].qs[iqs]);
+            const vec2 v = (vec2((vui & 0xF) | qh.x, (vui >> 4) | qh.y) - 16.0f) * d;
+
+            buf_a[buf_idx     ] = FLOAT_TYPE(v.x);
+            buf_a[buf_idx + 16] = FLOAT_TYPE(v.y);
+#elif defined(DATA_A_Q5_1)
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a;
+
+            const uint ib = idx / 16;
+            const uint iqs = idx & 0xF;
+
+            const float d = float(data_a[ib].d);
+            const float m = float(data_a[ib].m);
+            const uint uint_qh = data_a[ib].qh;
+            const ivec2 qh = ivec2(((uint_qh >> iqs) << 4) & 0x10, (uint_qh >> (iqs + 12)) & 0x10);
+            const uint vui = uint(data_a[ib].qs[iqs]);
+            const vec2 v = vec2((vui & 0xF) | qh.x, (vui >> 4) | qh.y) * d + m;
+
+            buf_a[buf_idx     ] = FLOAT_TYPE(v.x);
+            buf_a[buf_idx + 16] = FLOAT_TYPE(v.y);
+#elif defined(DATA_A_Q8_0)
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A;
+
+            const uint ib = idx / 16;
+            const uint iqs = (idx & 0xF) * 2;
+
+            const float d = float(data_a[ib].d);
+            const vec2 v = vec2(int(data_a[ib].qs[iqs]), int(data_a[ib].qs[iqs + 1])) * d;
+
+            buf_a[buf_idx    ] = FLOAT_TYPE(v.x);
+            buf_a[buf_idx + 1] = FLOAT_TYPE(v.y);
+#elif defined(DATA_A_Q2_K)
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A;
+
+            const uint ib = idx / 128;                         // 2 values per idx
+            const uint iqs = idx % 128;                        // 0..127
+
+            const uint qsi = (iqs / 64) * 32 + (iqs % 16) * 2; // 0,2,4..30
+            const uint scalesi = iqs / 8;                      // 0..15
+            const uint qsshift = ((iqs % 64) / 16) * 2;        // 0,2,4,6
+
+            const uvec2 qs = uvec2(data_a[ib].qs[qsi], data_a[ib].qs[qsi + 1]);
+            const uint scales = data_a[ib].scales[scalesi];
+            const vec2 d = vec2(data_a[ib].d);
+
+            const vec2 v = d.x * float(scales & 0xF) * vec2((qs >> qsshift) & 3) - d.y * float(scales >> 4);
+
+            buf_a[buf_idx    ] = FLOAT_TYPE(v.x);
+            buf_a[buf_idx + 1] = FLOAT_TYPE(v.y);
+#elif defined(DATA_A_Q3_K)
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A;
+
+            const uint ib = idx / 128;                   // 2 values per idx
+            const uint iqs = idx % 128;                  // 0..127
+
+            const uint n = iqs / 64;                     // 0,1
+            const uint qsi = n * 32 + (iqs % 16) * 2;    // 0,2,4..62
+            const uint hmi =          (iqs % 16) * 2;    // 0,2,4..30
+            const uint j = (iqs % 64) / 4;               // 0..3
+            const uint is = iqs / 8;                     // 0..15
+            const uint halfsplit = ((iqs % 64) / 16);    // 0,1,2,3
+            const uint qsshift = halfsplit * 2;          // 0,2,4,6
+            const uint m = 1 << (4 * n + halfsplit);     // 1,2,4,8,16,32,64,128
+
+            const int8_t us = int8_t(is <  4 ? (data_a[ib].scales[is-0] & 0xF) | (((data_a[ib].scales[is+8] >> 0) & 3) << 4) :
+                                    is <  8 ? (data_a[ib].scales[is-0] & 0xF) | (((data_a[ib].scales[is+4] >> 2) & 3) << 4) :
+                                    is < 12 ? (data_a[ib].scales[is-8] >>  4) | (((data_a[ib].scales[is+0] >> 4) & 3) << 4) :
+                                            (data_a[ib].scales[is-8] >>  4) | (((data_a[ib].scales[is-4] >> 6) & 3) << 4));
+            const float dl = float(data_a[ib].d) * float(us - 32);
+
+            buf_a[buf_idx    ] = FLOAT_TYPE(dl * float(int8_t((data_a[ib].qs[qsi    ] >> qsshift) & 3) - (((data_a[ib].hmask[hmi    ] & m) != 0) ? 0 : 4)));
+            buf_a[buf_idx + 1] = FLOAT_TYPE(dl * float(int8_t((data_a[ib].qs[qsi + 1] >> qsshift) & 3) - (((data_a[ib].hmask[hmi + 1] & m) != 0) ? 0 : 4)));
+#elif defined(DATA_A_Q4_K)
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A;
+
+            const uint ib = idx / 128;                 // 2 values per idx
+            const uint iqs = idx % 128;                // 0..127
+
+            const uint n = iqs / 32;                   // 0,1,2,3
+            const uint b = (iqs % 32) / 16;            // 0,1
+            const uint is = 2 * n + b;                 // 0..7
+            const uint qsi = n * 32 + (iqs % 16) * 2;  // 0,2,4..126
+
+            const vec2 loadd = vec2(data_a[ib].d);
+
+            uint8_t sc;
+            uint8_t mbyte;
+            if (is < 4) {
+                sc    = uint8_t(data_a[ib].scales[is    ] & 63);
+                mbyte = uint8_t(data_a[ib].scales[is + 4] & 63);
+            } else {
+                sc    = uint8_t((data_a[ib].scales[is + 4] & 0xF) | ((data_a[ib].scales[is - 4] >> 6) << 4));
+                mbyte = uint8_t((data_a[ib].scales[is + 4] >>  4) | ((data_a[ib].scales[is    ] >> 6) << 4));
+            }
+            const float d = loadd.x * sc;
+            const float m = loadd.y * mbyte;
+
+            buf_a[buf_idx    ] = FLOAT_TYPE(d * float((data_a[ib].qs[qsi    ] >> (b * 4)) & 0xF) - m);
+            buf_a[buf_idx + 1] = FLOAT_TYPE(d * float((data_a[ib].qs[qsi + 1] >> (b * 4)) & 0xF) - m);
+#elif defined(DATA_A_Q5_K)
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A;
+
+            const uint ib = idx / 128;                 // 2 values per idx
+            const uint iqs = idx % 128;                // 0..127
+
+            const uint n = iqs / 32;                   // 0,1,2,3
+            const uint b = (iqs % 32) / 16;            // 0,1
+            const uint is = 2 * n + b;                 // 0..7
+            const uint qsi = n * 32 + (iqs % 16) * 2;  // 0,2,4..126
+            const uint qhi = (iqs % 16) * 2;           // 0,2,4..30
+
+            const uint8_t hm = uint8_t(1 << (iqs / 16));
+
+            const vec2 loadd = vec2(data_a[ib].d);
+
+            uint8_t sc;
+            uint8_t mbyte;
+            if (is < 4) {
+                sc    = uint8_t(data_a[ib].scales[is    ] & 63);
+                mbyte = uint8_t(data_a[ib].scales[is + 4] & 63);
+            } else {
+                sc    = uint8_t((data_a[ib].scales[is + 4] & 0xF) | ((data_a[ib].scales[is - 4] >> 6) << 4));
+                mbyte = uint8_t((data_a[ib].scales[is + 4] >>  4) | ((data_a[ib].scales[is    ] >> 6) << 4));
+            }
+            const float d = loadd.x * sc;
+            const float m = loadd.y * mbyte;
+
+            buf_a[buf_idx    ] = FLOAT_TYPE(d * (float((data_a[ib].qs[qsi    ] >> (b * 4)) & 0xF) + float((data_a[ib].qh[qhi    ] & hm) != 0 ? 16 : 0)) - m);
+            buf_a[buf_idx + 1] = FLOAT_TYPE(d * (float((data_a[ib].qs[qsi + 1] >> (b * 4)) & 0xF) + float((data_a[ib].qh[qhi + 1] & hm) != 0 ? 16 : 0)) - m);
+#elif defined(DATA_A_Q6_K)
+            const uint idx = pos_a + (loadc_a + l) * p.stride_a / LOAD_VEC_A + loadr_a;
+            const uint buf_idx = (loadc_a + l) * (BK+1) + loadr_a * LOAD_VEC_A;
+
+            const uint ib = idx / 128;                  // 2 values per idx
+            const uint iqs = idx % 128;                 // 0..127
+
+            const uint n = iqs / 64;                    // 0,1
+            const uint b = (iqs % 64) / 32;             // 0,1
+            const uint is_b = (iqs % 16) / 8;           // 0,1
+            const uint qhshift = ((iqs % 64) / 16) * 2; // 0,2,4,6
+            const uint is = 8 * n + qhshift + is_b;     // 0..15
+            const uint qsi = n * 64 + (iqs % 32) * 2;   // 0,2,4..126
+            const uint qhi = n * 32 + (iqs % 16) * 2;   // 0,2,4..62
+
+            const float dscale = float(data_a[ib].d) * float(data_a[ib].scales[is]);
+
+            buf_a[buf_idx    ] = FLOAT_TYPE(dscale * float(int8_t(((data_a[ib].ql[qsi    ] >> (b * 4)) & 0xF) | (((data_a[ib].qh[qhi    ] >> qhshift) & 3) << 4)) - 32));
+            buf_a[buf_idx + 1] = FLOAT_TYPE(dscale * float(int8_t(((data_a[ib].ql[qsi + 1] >> (b * 4)) & 0xF) | (((data_a[ib].qh[qhi + 1] >> qhshift) & 3) << 4)) - 32));
+#endif
+        }
+        [[unroll]] for (uint l = 0; l < BN; l += loadstride_b) {
+#if LOAD_VEC_B == 8
+#ifdef MUL_MAT_ID
+            const u16vec2 row_idx = row_ids[ic * BN + loadc_b + l];
+            const uint idx = pos_b + row_idx.y * p.batch_stride_b / LOAD_VEC_B + (row_idx.x % p.ne11) * p.stride_b / LOAD_VEC_B + loadr_b;
+#else
+            const uint idx = pos_b + (loadc_b + l) * p.stride_b / LOAD_VEC_B + loadr_b;
+#endif
+            const uint buf_idx = (loadc_b + l) * (BK+1) + loadr_b * LOAD_VEC_B;
+            buf_b[buf_idx + 0] = FLOAT_TYPE(data_b[idx][0].x);
+            buf_b[buf_idx + 1] = FLOAT_TYPE(data_b[idx][0].y);
+            buf_b[buf_idx + 2] = FLOAT_TYPE(data_b[idx][0].z);
+            buf_b[buf_idx + 3] = FLOAT_TYPE(data_b[idx][0].w);
+            buf_b[buf_idx + 4] = FLOAT_TYPE(data_b[idx][1].x);
+            buf_b[buf_idx + 5] = FLOAT_TYPE(data_b[idx][1].y);
+            buf_b[buf_idx + 6] = FLOAT_TYPE(data_b[idx][1].z);
+            buf_b[buf_idx + 7] = FLOAT_TYPE(data_b[idx][1].w);
+#elif LOAD_VEC_B == 4
+#ifdef MUL_MAT_ID
+            const u16vec2 row_idx = row_ids[ic * BN + loadc_b + l];
+            const uint idx = pos_b + row_idx.y * p.batch_stride_b / LOAD_VEC_B + (row_idx.x % p.ne11) * p.stride_b / LOAD_VEC_B + loadr_b;
+#else
+            const uint idx = pos_b + (loadc_b + l) * p.stride_b / LOAD_VEC_B + loadr_b;
+#endif
+            const uint buf_idx = (loadc_b + l) * (BK+1) + loadr_b * LOAD_VEC_B;
+            buf_b[buf_idx + 0] = FLOAT_TYPE(data_b[idx].x);
+            buf_b[buf_idx + 1] = FLOAT_TYPE(data_b[idx].y);
+            buf_b[buf_idx + 2] = FLOAT_TYPE(data_b[idx].z);
+            buf_b[buf_idx + 3] = FLOAT_TYPE(data_b[idx].w);
+#elif !MUL_MAT_ID
+            if (ic * BN + loadc_b + l < p.N && block + loadr_b < end_k) {
+                buf_b[(loadc_b + l) * (BK+1) + loadr_b] = FLOAT_TYPE(data_b[pos_b + (loadc_b + l) * p.stride_b + loadr_b]);
+            } else {
+                buf_b[(loadc_b + l) * (BK+1) + loadr_b] = FLOAT_TYPE(0.0f);
+            }
+#else
+            const uint row_i = ic * BN + loadc_b + l;
+            if (row_i < _ne1) {
+                const u16vec2 row_idx = row_ids[row_i];
+                buf_b[(loadc_b + l) * (BK+1) + loadr_b] = FLOAT_TYPE(data_b[pos_b + row_idx.y * p.batch_stride_b + (row_idx.x % p.ne11) * p.stride_b + loadr_b]);
+            } else {
+                buf_b[(loadc_b + l) * (BK+1) + loadr_b] = FLOAT_TYPE(0.0f);
+            }
+#endif
+        }
+
+        barrier();
+
+        pos_a += BK / LOAD_VEC_A;
+        pos_b += BK / LOAD_VEC_B;
+
+        for (uint i = 0; i < BK; i++) {
+            // Load from shared into cache
+            [[unroll]] for (uint wsir = 0; wsir < WMITER; wsir++) {
+                [[unroll]] for (uint j = 0; j < TM; j++) {
+                    cache_a[wsir * TM + j] = buf_a[(warp_r * WM + wsir * WSUBM + tiwr * TM + j) * (BK+1) + i];
+                }
+            }
+            [[unroll]] for (uint wsic = 0; wsic < WNITER; wsic++) {
+                [[unroll]] for (uint j = 0; j < TN; j++) {
+                    cache_b[wsic * TN + j] = buf_b[(warp_c * WN + wsic * WSUBN + tiwc * TN + j) * (BK+1) + i];
+                }
+            }
+
+            [[unroll]] for (uint wsic = 0; wsic < WNITER; wsic++) {
+                [[unroll]] for (uint wsir = 0; wsir < WMITER; wsir++) {
+                    [[unroll]] for (uint cc = 0; cc < TN; cc++) {
+                        [[unroll]] for (uint cr = 0; cr < TM; cr++) {
+                            sums[(wsic * TN + cc) * (WMITER * TM) + wsir * TM + cr] += float(cache_a[wsir * TM + cr]) * float(cache_b[wsic * TN + cc]);
+                        }
+                    }
+                }
+            }
+        }
+
+        barrier();
+    }
+
+    const uint dr = ir * BM + warp_r * WM;
+    const uint dc = ic * BN + warp_c * WN;
+
+#ifndef MUL_MAT_ID
+    const uint offsets = batch_idx * p.batch_stride_d + ik * p.batch_stride_d * gl_NumWorkGroups.z;
+#endif
+
+    [[unroll]] for (uint wsic = 0; wsic < WNITER; wsic++) {
+        [[unroll]] for (uint wsir = 0; wsir < WMITER; wsir++) {
+
+            const uint dr_warp = dr + wsir * WSUBM + tiwr * TM;
+            const uint dc_warp = dc + wsic * WSUBN + tiwc * TN;
+            [[unroll]] for (uint cc = 0; cc < TN; cc++) {
+#ifdef MUL_MAT_ID
+                const uint row_i = dc_warp + cc;
+                if (row_i >= _ne1) break;
+
+                const u16vec2 row_idx = row_ids[row_i];
+#endif
+                [[unroll]] for (uint cr = 0; cr < TM; cr++) {
+#ifdef MUL_MAT_ID
+                    data_d[row_idx.y * p.batch_stride_d + row_idx.x * p.stride_d + dr_warp + cr] = D_TYPE(sums[(wsic * TN + cc) * (WMITER * TM) + wsir * TM + cr]);
+#else
+                    if (dr_warp + cr < p.M && dc_warp + cc < p.N) {
+                        data_d[offsets + (dc_warp + cc) * p.stride_d + dr_warp + cr] = D_TYPE(sums[(wsic * TN + cc) * (WMITER * TM) + wsir * TM + cr]);
+                    }
+#endif
+                }
+            }
+        }
+    }
+}
diff --git a/ggml/src/vulkan-shaders/norm.comp b/ggml/src/vulkan-shaders/norm.comp
new file mode 100644 (file)
index 0000000..803dbdc
--- /dev/null
@@ -0,0 +1,44 @@
+#version 450
+
+#include "generic_head.comp"
+#include "types.comp"
+
+#extension GL_EXT_control_flow_attributes : enable
+#define BLOCK_SIZE 512
+
+layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer X {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_d[];};
+
+shared vec2 sum[BLOCK_SIZE];
+
+void main() {
+    const uint row = gl_WorkGroupID.x;
+    const uint tid = gl_LocalInvocationID.x;
+
+    sum[tid] = vec2(0.0f, 0.0f);
+
+    [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) {
+        const float xi = float(data_a[row*p.KX + col]);
+        sum[tid].x += xi;
+        sum[tid].y += xi * xi;
+    }
+
+    // sum up partial sums and write back result
+    barrier();
+    [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) {
+        if (tid < s) {
+            sum[tid] += sum[tid + s];
+        }
+        barrier();
+    }
+
+    const float mean = sum[0].x / p.KX;
+    const float var = sum[0].y / p.KX - mean * mean;
+    const float inv_std = inversesqrt(var + p.param1);
+
+    [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) {
+        data_d[row*p.KX + col] = D_TYPE((float(data_a[row*p.KX + col]) - mean) * inv_std);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/relu.comp b/ggml/src/vulkan-shaders/relu.comp
new file mode 100644 (file)
index 0000000..7e5baa5
--- /dev/null
@@ -0,0 +1,21 @@
+#version 450
+
+#include "generic_head.comp"
+#include "types.comp"
+
+#extension GL_EXT_control_flow_attributes : enable
+
+layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer X {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_d[];};
+
+void main() {
+    const uint i = gl_GlobalInvocationID.x;
+
+    if (i >= p.KX) {
+        return;
+    }
+
+    data_d[i] = max(float(data_a[i]), 0);
+}
diff --git a/ggml/src/vulkan-shaders/rms_norm.comp b/ggml/src/vulkan-shaders/rms_norm.comp
new file mode 100644 (file)
index 0000000..cfd08d3
--- /dev/null
@@ -0,0 +1,42 @@
+#version 450
+
+#include "generic_head.comp"
+#include "types.comp"
+
+#extension GL_EXT_control_flow_attributes : enable
+#define BLOCK_SIZE 512
+
+layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer X {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_d[];};
+
+shared FLOAT_TYPE sum[BLOCK_SIZE];
+
+void main() {
+    const uint row = gl_WorkGroupID.x;
+    const uint tid = gl_LocalInvocationID.x;
+
+    sum[tid] = FLOAT_TYPE(0.0f); // partial sum for thread in warp
+
+    [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) {
+        const FLOAT_TYPE xi = FLOAT_TYPE(data_a[row*p.KX + col]);
+        sum[tid] += xi * xi;
+    }
+
+    // sum up partial sums and write back result
+    barrier();
+    [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) {
+        if (tid < s) {
+            sum[tid] += sum[tid + s];
+        }
+        barrier();
+    }
+
+    const FLOAT_TYPE mean = sum[0] / FLOAT_TYPE(p.KX);
+    const FLOAT_TYPE scale = inversesqrt(mean + FLOAT_TYPE(p.param1));
+
+    [[unroll]] for (uint col = tid; col < p.KX; col += BLOCK_SIZE) {
+        data_d[row*p.KX + col] = D_TYPE(scale * FLOAT_TYPE(data_a[row*p.KX + col]));
+    }
+}
diff --git a/ggml/src/vulkan-shaders/rope_head.comp b/ggml/src/vulkan-shaders/rope_head.comp
new file mode 100644 (file)
index 0000000..ea89542
--- /dev/null
@@ -0,0 +1,44 @@
+#include "types.comp"
+
+#extension GL_EXT_shader_16bit_storage : require
+
+layout(local_size_x = 1, local_size_y = 256, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer X {A_TYPE data_a[];};
+layout (binding = 1) readonly buffer Y {int data_pos[];};
+layout (binding = 2) readonly buffer Z {float data_ff[];};
+layout (binding = 3) writeonly buffer D {D_TYPE data_d[];};
+
+layout (push_constant) uniform parameter {
+    uint ncols;
+    uint n_dims;
+    float freq_scale;
+    uint p_delta_rows;
+    float freq_base;
+    float ext_factor;
+    float attn_factor;
+    float corr_dims[2];
+    float theta_scale;
+    uint has_ff;
+} p;
+
+float rope_yarn_ramp(const float low, const float high, const uint i0) {
+    const float y = (i0 / 2 - low) / max(0.001f, high - low);
+    return 1.0f - min(1.0f, max(0.0f, y));
+}
+
+void rope_yarn(const float theta_extrap, const uint i0, out float cos_theta, out float sin_theta) {
+    float mscale = p.attn_factor;
+    // Get n-d rotational scaling corrected for extrapolation
+    float theta_interp = p.freq_scale * theta_extrap;
+    float theta = theta_interp;
+    if (p.ext_factor != 0.0f) {
+        float ramp_mix = rope_yarn_ramp(p.corr_dims[0], p.corr_dims[1], i0) * p.ext_factor;
+        theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix;
+
+        // Get n-d magnitude scaling corrected for interpolation
+        mscale *= 1.0f + 0.1f * log(1.0f / p.freq_scale);
+    }
+    cos_theta = cos(theta) * mscale;
+    sin_theta = sin(theta) * mscale;
+}
diff --git a/ggml/src/vulkan-shaders/rope_neox.comp b/ggml/src/vulkan-shaders/rope_neox.comp
new file mode 100644 (file)
index 0000000..83b46b6
--- /dev/null
@@ -0,0 +1,37 @@
+#version 450
+
+#include "rope_head.comp"
+
+void main() {
+    const uint col = gl_GlobalInvocationID.y * 2;
+    const uint row = gl_GlobalInvocationID.x;
+
+    if (col >= p.ncols) {
+        return;
+    }
+
+    if (col >= p.n_dims) {
+        const uint i = row*p.ncols + col;
+
+        data_d[i + 0] = data_a[i + 0];
+        data_d[i + 1] = data_a[i + 1];
+
+        return;
+    }
+
+    const uint i  = row*p.ncols + col/2;
+    const uint i2 = row/p.p_delta_rows;
+
+    const float theta_base = data_pos[i2] * pow(p.theta_scale, col/2.0f);
+
+    const float freq_factor = p.has_ff != 0 ? data_ff[col/2] : 1.0f;
+
+    float cos_theta, sin_theta;
+    rope_yarn(theta_base / freq_factor, col, cos_theta, sin_theta);
+
+    const float x0 = float(data_a[i + 0]);
+    const float x1 = float(data_a[i + p.n_dims/2]);
+
+    data_d[i + 0]        = D_TYPE(x0*cos_theta - x1*sin_theta);
+    data_d[i + p.n_dims/2] = D_TYPE(x0*sin_theta + x1*cos_theta);
+}
diff --git a/ggml/src/vulkan-shaders/rope_norm.comp b/ggml/src/vulkan-shaders/rope_norm.comp
new file mode 100644 (file)
index 0000000..e416ad9
--- /dev/null
@@ -0,0 +1,37 @@
+#version 450
+
+#include "rope_head.comp"
+
+void main() {
+    const uint col = gl_GlobalInvocationID.y * 2;
+    const uint row = gl_GlobalInvocationID.x;
+
+    if (col >= p.ncols) {
+        return;
+    }
+
+    if (col >= p.n_dims) {
+        const uint i = row*p.ncols + col;
+
+        data_d[i + 0] = data_a[i + 0];
+        data_d[i + 1] = data_a[i + 1];
+
+        return;
+    }
+
+    const uint i = row*p.ncols + col;
+    const uint i2 = row/p.p_delta_rows;
+
+    const float theta_base = data_pos[i2] * pow(p.theta_scale, col/2.0f);
+
+    const float freq_factor = p.has_ff != 0 ? data_ff[col/2] : 1.0f;
+
+    float cos_theta, sin_theta;
+    rope_yarn(theta_base / freq_factor, col, cos_theta, sin_theta);
+
+    const float x0 = float(data_a[i + 0]);
+    const float x1 = float(data_a[i + 1]);
+
+    data_d[i + 0] = D_TYPE(x0*cos_theta - x1*sin_theta);
+    data_d[i + 1] = D_TYPE(x0*sin_theta + x1*cos_theta);
+}
diff --git a/ggml/src/vulkan-shaders/scale.comp b/ggml/src/vulkan-shaders/scale.comp
new file mode 100644 (file)
index 0000000..510cb72
--- /dev/null
@@ -0,0 +1,12 @@
+#version 450
+
+#include "types.comp"
+#include "generic_unary_head.comp"
+
+void main() {
+    if (gl_GlobalInvocationID.x >= p.ne) {
+        return;
+    }
+
+    data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]) * FLOAT_TYPE(p.param1));
+}
diff --git a/ggml/src/vulkan-shaders/silu.comp b/ggml/src/vulkan-shaders/silu.comp
new file mode 100644 (file)
index 0000000..15920f0
--- /dev/null
@@ -0,0 +1,22 @@
+#version 450
+
+#include "generic_head.comp"
+#include "types.comp"
+
+#extension GL_EXT_control_flow_attributes : enable
+
+layout(local_size_x = 512, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer X {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_d[];};
+
+void main() {
+    const uint i = gl_GlobalInvocationID.x;
+
+    if (i >= p.KX) {
+        return;
+    }
+
+    const float xi = float(data_a[i]);
+    data_d[i] = D_TYPE(xi / (1.0f + exp(-xi)));
+}
diff --git a/ggml/src/vulkan-shaders/soft_max.comp b/ggml/src/vulkan-shaders/soft_max.comp
new file mode 100644 (file)
index 0000000..1b8419c
--- /dev/null
@@ -0,0 +1,106 @@
+#version 450
+
+#extension GL_EXT_shader_16bit_storage : require
+
+layout (push_constant) uniform parameter
+{
+    uint KX;
+    uint KY;
+    float scale;
+    float max_bias;
+    float m0;
+    float m1;
+    uint n_head_log2;
+} p;
+
+#include "types.comp"
+
+#extension GL_EXT_control_flow_attributes : enable
+#define BLOCK_SIZE 512
+
+layout(local_size_x = BLOCK_SIZE, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer X {A_TYPE data_a[];};
+layout (binding = 1) readonly buffer Y {B_TYPE data_b[];};
+layout (binding = 2) buffer D {D_TYPE data_d[];};
+
+shared FLOAT_TYPE vals[BLOCK_SIZE];
+
+void main() {
+    const uint tid = gl_LocalInvocationID.x;
+    const uint rowx = gl_WorkGroupID.x;
+    const uint rowy = rowx % p.KY;
+
+    float slope = 1.0f;
+
+    // ALiBi
+    if (p.max_bias > 0.0f) {
+        const uint h = rowx/p.KY; // head index
+
+        const float base = h < p.n_head_log2 ? p.m0 : p.m1;
+        const uint   exp  = h < p.n_head_log2 ? h + 1 : 2*(h - p.n_head_log2) + 1;
+
+        slope = pow(base, exp);
+    }
+
+    // Find max
+    FLOAT_TYPE max_val = uintBitsToFloat(0xFF800000);
+
+    [[unroll]] for (uint col0 = 0; col0 < p.KX; col0 += BLOCK_SIZE) {
+        const uint col = col0 + tid;
+
+        if (col >= p.KX) {
+            break;
+        }
+
+        max_val = max(max_val, FLOAT_TYPE(data_a[rowx * p.KX + col]) * p.scale + (p.KY > 0 ? slope * FLOAT_TYPE(data_b[rowy * p.KX + col]) : FLOAT_TYPE(0.0f)));
+    }
+    vals[tid] = max_val;
+
+    barrier();
+    [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) {
+        if (tid < s) {
+            vals[tid] = max(vals[tid], vals[tid + s]);
+        }
+        barrier();
+    }
+
+    max_val = vals[0];
+    barrier();
+
+    // Sum up values
+    vals[tid] = FLOAT_TYPE(0.0f);
+
+    [[unroll]] for (uint col0 = 0; col0 < p.KX; col0 += BLOCK_SIZE) {
+        const uint col = col0 + tid;
+
+        if (col >= p.KX) {
+            break;
+        }
+
+        const uint i = rowx * p.KX + col;
+        const FLOAT_TYPE val = exp(FLOAT_TYPE(data_a[i]) * p.scale + (p.KY > 0 ? slope * FLOAT_TYPE(data_b[rowy * p.KX + col]) : FLOAT_TYPE(0.0f)) - max_val);
+        vals[tid] += val;
+        data_d[i] = D_TYPE(val);
+    }
+
+    barrier();
+    [[unroll]] for (int s = BLOCK_SIZE / 2; s > 0; s >>= 1) {
+        if (tid < s) {
+            vals[tid] += vals[tid + s];
+        }
+        barrier();
+    }
+
+    const D_TYPE divisor = D_TYPE(vals[0]);
+
+    [[unroll]] for (uint col0 = 0; col0 < p.KX; col0 += BLOCK_SIZE) {
+        const uint col = col0 + tid;
+
+        if (col >= p.KX) {
+            break;
+        }
+
+        data_d[rowx*p.KX + col] /= divisor;
+    }
+}
diff --git a/ggml/src/vulkan-shaders/square.comp b/ggml/src/vulkan-shaders/square.comp
new file mode 100644 (file)
index 0000000..8dd1933
--- /dev/null
@@ -0,0 +1,13 @@
+#version 450
+
+#include "types.comp"
+#include "generic_unary_head.comp"
+
+void main() {
+    if (gl_GlobalInvocationID.x >= p.ne) {
+        return;
+    }
+
+    const FLOAT_TYPE val = FLOAT_TYPE(data_a[src0_idx(gl_GlobalInvocationID.x)]);
+    data_d[p.d_offset + dst_idx(gl_GlobalInvocationID.x)] = D_TYPE(val * val);
+}
diff --git a/ggml/src/vulkan-shaders/sum_rows.comp b/ggml/src/vulkan-shaders/sum_rows.comp
new file mode 100644 (file)
index 0000000..ce2f1e2
--- /dev/null
@@ -0,0 +1,37 @@
+#version 450
+
+#include "generic_head.comp"
+#include "types.comp"
+
+#extension GL_EXT_control_flow_attributes : enable
+layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
+layout (binding = 1) writeonly buffer D {D_TYPE data_d[];};
+
+layout (constant_id = 0) const uint BLOCK_SIZE = 32;
+
+shared FLOAT_TYPE tmp[BLOCK_SIZE];
+
+void main() {
+    const uint row = gl_WorkGroupID.x;
+    const uint col = gl_LocalInvocationID.x;
+
+    tmp[col] = FLOAT_TYPE(0.0f);
+
+    for (uint i = col; i < p.KX; i += BLOCK_SIZE) {
+        tmp[col] += FLOAT_TYPE(data_a[row*p.KX + i]);
+    }
+
+    barrier();
+    [[unroll]] for (int s = int(BLOCK_SIZE) / 2; s > 0; s >>= 1) {
+        if (col < s) {
+            tmp[col] += tmp[col + s];
+        }
+        barrier();
+    }
+
+    if (col == 0) {
+        data_d[row] = D_TYPE(tmp[0]);
+    }
+}
diff --git a/ggml/src/vulkan-shaders/types.comp b/ggml/src/vulkan-shaders/types.comp
new file mode 100644 (file)
index 0000000..815fcbe
--- /dev/null
@@ -0,0 +1,179 @@
+#if !defined(DATA_A_F32) && !defined(DATA_A_F16)
+#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
+#endif
+
+#if defined(DATA_A_F32)
+#define QUANT_K 1
+#define QUANT_R 1
+
+#ifndef LOAD_VEC_A
+#define A_TYPE float
+#elif LOAD_VEC_A == 4
+#define A_TYPE vec4
+#elif LOAD_VEC_A == 8
+#define A_TYPE mat2x4
+#endif
+#endif
+
+#if defined(DATA_A_F16)
+#define QUANT_K 1
+#define QUANT_R 1
+
+#ifndef LOAD_VEC_A
+#define A_TYPE float16_t
+#elif LOAD_VEC_A == 4
+#define A_TYPE f16vec4
+#elif LOAD_VEC_A == 8
+#define A_TYPE f16mat2x4
+#endif
+#endif
+
+#if defined(DATA_A_Q4_0)
+#extension GL_EXT_shader_16bit_storage : require
+#define QUANT_K 32
+#define QUANT_R 2
+
+struct block_q4_0
+{
+    float16_t d;
+    uint8_t qs[16];
+};
+
+#define A_TYPE block_q4_0
+#endif
+
+#if defined(DATA_A_Q4_1)
+#extension GL_EXT_shader_16bit_storage : require
+#define QUANT_K 32
+#define QUANT_R 2
+
+struct block_q4_1
+{
+    float16_t d;
+    float16_t m;
+    uint8_t qs[16];
+};
+
+#define A_TYPE block_q4_1
+#endif
+
+#if defined(DATA_A_Q5_0)
+#extension GL_EXT_shader_16bit_storage : require
+#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
+#define QUANT_K 32
+#define QUANT_R 2
+
+struct block_q5_0
+{
+    float16_t d;
+    uint16_t qh[2];
+    uint8_t qs[16];
+};
+
+#define A_TYPE block_q5_0
+#endif
+
+#if defined(DATA_A_Q5_1)
+#extension GL_EXT_shader_16bit_storage : require
+#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
+#define QUANT_K 32
+#define QUANT_R 2
+
+struct block_q5_1
+{
+    float16_t d;
+    float16_t m;
+    uint qh;
+    uint8_t qs[16];
+};
+
+#define A_TYPE block_q5_1
+#endif
+
+#if defined(DATA_A_Q8_0)
+#extension GL_EXT_shader_16bit_storage : require
+#define QUANT_K 32
+#define QUANT_R 1
+
+struct block_q8_0
+{
+    float16_t d;
+    int8_t qs[32];
+};
+
+#define A_TYPE block_q8_0
+#endif
+
+// K-quants
+#if defined(DATA_A_Q2_K)
+#extension GL_EXT_shader_16bit_storage : require
+#define QUANT_K 256
+
+struct block_q2_K
+{
+    uint8_t scales[QUANT_K/16];
+    uint8_t qs[QUANT_K/4];
+    f16vec2 d;
+};
+
+#define A_TYPE block_q2_K
+#endif
+
+#if defined(DATA_A_Q3_K)
+#extension GL_EXT_shader_16bit_storage : require
+#define QUANT_K 256
+
+struct block_q3_K
+{
+    uint8_t hmask[QUANT_K/8];
+    uint8_t qs[QUANT_K/4];
+    uint8_t scales[12];
+    float16_t d;
+};
+
+#define A_TYPE block_q3_K
+#endif
+
+#if defined(DATA_A_Q4_K)
+#extension GL_EXT_shader_16bit_storage : require
+#define QUANT_K 256
+
+struct block_q4_K
+{
+    f16vec2 d;
+    uint8_t scales[3*QUANT_K/64];
+    uint8_t qs[QUANT_K/2];
+};
+
+#define A_TYPE block_q4_K
+#endif
+
+#if defined(DATA_A_Q5_K)
+#extension GL_EXT_shader_16bit_storage : require
+#define QUANT_K 256
+
+struct block_q5_K
+{
+    f16vec2 d;
+    uint8_t scales[12];
+    uint8_t qh[QUANT_K/8];
+    uint8_t qs[QUANT_K/2];
+};
+
+#define A_TYPE block_q5_K
+#endif
+
+#if defined(DATA_A_Q6_K)
+#extension GL_EXT_shader_16bit_storage : require
+#define QUANT_K 256
+
+struct block_q6_K
+{
+    uint8_t ql[QUANT_K/2];
+    uint8_t qh[QUANT_K/4];
+    int8_t scales[QUANT_K/16];
+    float16_t d;
+};
+
+#define A_TYPE block_q6_K
+#endif
diff --git a/include/whisper.h b/include/whisper.h
new file mode 100644 (file)
index 0000000..92b43e8
--- /dev/null
@@ -0,0 +1,657 @@
+#ifndef WHISPER_H
+#define WHISPER_H
+
+#include "ggml.h"
+
+#include <stddef.h>
+#include <stdint.h>
+#include <stdbool.h>
+
+#ifdef __GNUC__
+#    define WHISPER_DEPRECATED(func, hint) func __attribute__((deprecated(hint)))
+#elif defined(_MSC_VER)
+#    define WHISPER_DEPRECATED(func, hint) __declspec(deprecated(hint)) func
+#else
+#    define WHISPER_DEPRECATED(func, hint) func
+#endif
+
+#ifdef WHISPER_SHARED
+#    ifdef _WIN32
+#        ifdef WHISPER_BUILD
+#            define WHISPER_API __declspec(dllexport)
+#        else
+#            define WHISPER_API __declspec(dllimport)
+#        endif
+#    else
+#        define WHISPER_API __attribute__ ((visibility ("default")))
+#    endif
+#else
+#    define WHISPER_API
+#endif
+
+#define WHISPER_SAMPLE_RATE 16000
+#define WHISPER_N_FFT       400
+#define WHISPER_N_FFT_HALF  (WHISPER_N_FFT / 2 + 1)
+#define WHISPER_HOP_LENGTH  160
+#define WHISPER_CHUNK_SIZE  30
+#define WHISPER_N_SAMPLES   (WHISPER_SAMPLE_RATE * WHISPER_CHUNK_SIZE)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    //
+    // C interface
+    //
+    // The following interface is thread-safe as long as the sample whisper_context is not used by multiple threads
+    // concurrently.
+    //
+    // Basic usage:
+    //
+    //     #include "whisper.h"
+    //
+    //     ...
+    //
+    //     whisper_context_params cparams = whisper_context_default_params();
+    //
+    //     struct whisper_context * ctx = whisper_init_from_file_with_params("/path/to/ggml-base.en.bin", cparams);
+    //
+    //     if (whisper_full(ctx, wparams, pcmf32.data(), pcmf32.size()) != 0) {
+    //         fprintf(stderr, "failed to process audio\n");
+    //         return 7;
+    //     }
+    //
+    //     const int n_segments = whisper_full_n_segments(ctx);
+    //     for (int i = 0; i < n_segments; ++i) {
+    //         const char * text = whisper_full_get_segment_text(ctx, i);
+    //         printf("%s", text);
+    //     }
+    //
+    //     whisper_free(ctx);
+    //
+    //     ...
+    //
+    // This is a demonstration of the most straightforward usage of the library.
+    // "pcmf32" contains the RAW audio data in 32-bit floating point format.
+    //
+    // The interface also allows for more fine-grained control over the computation, but it requires a deeper
+    // understanding of how the model works.
+    //
+
+    struct whisper_context;
+    struct whisper_state;
+    struct whisper_full_params;
+
+    typedef int32_t whisper_pos;
+    typedef int32_t whisper_token;
+    typedef int32_t whisper_seq_id;
+
+    enum whisper_alignment_heads_preset {
+        WHISPER_AHEADS_NONE,
+        WHISPER_AHEADS_N_TOP_MOST,  // All heads from the N-top-most text-layers
+        WHISPER_AHEADS_CUSTOM,
+        WHISPER_AHEADS_TINY_EN,
+        WHISPER_AHEADS_TINY,
+        WHISPER_AHEADS_BASE_EN,
+        WHISPER_AHEADS_BASE,
+        WHISPER_AHEADS_SMALL_EN,
+        WHISPER_AHEADS_SMALL,
+        WHISPER_AHEADS_MEDIUM_EN,
+        WHISPER_AHEADS_MEDIUM,
+        WHISPER_AHEADS_LARGE_V1,
+        WHISPER_AHEADS_LARGE_V2,
+        WHISPER_AHEADS_LARGE_V3,
+    };
+
+    typedef struct whisper_ahead {
+        int n_text_layer;
+        int n_head;
+    } whisper_ahead;
+
+    typedef struct whisper_aheads {
+        size_t n_heads;
+        const whisper_ahead * heads;
+    } whisper_aheads;
+
+    struct whisper_context_params {
+        bool  use_gpu;
+        bool  flash_attn;
+        int   gpu_device;  // CUDA device
+
+        // [EXPERIMENTAL] Token-level timestamps with DTW
+        bool dtw_token_timestamps;
+        enum whisper_alignment_heads_preset dtw_aheads_preset;
+
+        int dtw_n_top;
+        struct whisper_aheads dtw_aheads;
+
+        size_t dtw_mem_size; // TODO: remove
+    };
+
+    typedef struct whisper_token_data {
+        whisper_token id;  // token id
+        whisper_token tid; // forced timestamp token id
+
+        float p;           // probability of the token
+        float plog;        // log probability of the token
+        float pt;          // probability of the timestamp token
+        float ptsum;       // sum of probabilities of all timestamp tokens
+
+        // token-level timestamp data
+        // do not use if you haven't computed token-level timestamps
+        int64_t t0;        // start time of the token
+        int64_t t1;        //   end time of the token
+
+        // [EXPERIMENTAL] Token-level timestamps with DTW
+        // do not use if you haven't computed token-level timestamps with dtw
+        // Roughly corresponds to the moment in audio in which the token was output
+        int64_t t_dtw;
+
+        float vlen;        // voice length of the token
+    } whisper_token_data;
+
+    typedef struct whisper_model_loader {
+        void * context;
+
+        size_t (*read)(void * ctx, void * output, size_t read_size);
+        bool    (*eof)(void * ctx);
+        void  (*close)(void * ctx);
+    } whisper_model_loader;
+
+    // grammar element type
+    enum whisper_gretype {
+        // end of rule definition
+        WHISPER_GRETYPE_END            = 0,
+
+        // start of alternate definition for rule
+        WHISPER_GRETYPE_ALT            = 1,
+
+        // non-terminal element: reference to rule
+        WHISPER_GRETYPE_RULE_REF       = 2,
+
+        // terminal element: character (code point)
+        WHISPER_GRETYPE_CHAR           = 3,
+
+        // inverse char(s) ([^a], [^a-b] [^abc])
+        WHISPER_GRETYPE_CHAR_NOT       = 4,
+
+        // modifies a preceding WHISPER_GRETYPE_CHAR or LLAMA_GRETYPE_CHAR_ALT to
+        // be an inclusive range ([a-z])
+        WHISPER_GRETYPE_CHAR_RNG_UPPER = 5,
+
+        // modifies a preceding WHISPER_GRETYPE_CHAR or
+        // WHISPER_GRETYPE_CHAR_RNG_UPPER to add an alternate char to match ([ab], [a-zA])
+        WHISPER_GRETYPE_CHAR_ALT       = 6,
+    };
+
+    typedef struct whisper_grammar_element {
+        enum whisper_gretype type;
+        uint32_t             value; // Unicode code point or rule ID
+    } whisper_grammar_element;
+
+    // Various functions for loading a ggml whisper model.
+    // Allocate (almost) all memory needed for the model.
+    // Return NULL on failure
+    WHISPER_API struct whisper_context * whisper_init_from_file_with_params  (const char * path_model,              struct whisper_context_params params);
+    WHISPER_API struct whisper_context * whisper_init_from_buffer_with_params(void * buffer, size_t buffer_size,    struct whisper_context_params params);
+    WHISPER_API struct whisper_context * whisper_init_with_params            (struct whisper_model_loader * loader, struct whisper_context_params params);
+
+    // These are the same as the above, but the internal state of the context is not allocated automatically
+    // It is the responsibility of the caller to allocate the state using whisper_init_state() (#523)
+    WHISPER_API struct whisper_context * whisper_init_from_file_with_params_no_state  (const char * path_model,              struct whisper_context_params params);
+    WHISPER_API struct whisper_context * whisper_init_from_buffer_with_params_no_state(void * buffer, size_t buffer_size,    struct whisper_context_params params);
+    WHISPER_API struct whisper_context * whisper_init_with_params_no_state            (struct whisper_model_loader * loader, struct whisper_context_params params);
+
+    WHISPER_DEPRECATED(
+        WHISPER_API struct whisper_context * whisper_init_from_file(const char * path_model),
+        "use whisper_init_from_file_with_params instead"
+    );
+    WHISPER_DEPRECATED(
+        WHISPER_API struct whisper_context * whisper_init_from_buffer(void * buffer, size_t buffer_size),
+        "use whisper_init_from_buffer_with_params instead"
+    );
+    WHISPER_DEPRECATED(
+        WHISPER_API struct whisper_context * whisper_init(struct whisper_model_loader * loader),
+        "use whisper_init_with_params instead"
+    );
+    WHISPER_DEPRECATED(
+        WHISPER_API struct whisper_context * whisper_init_from_file_no_state(const char * path_model),
+        "use whisper_init_from_file_with_params_no_state instead"
+    );
+    WHISPER_DEPRECATED(
+        WHISPER_API struct whisper_context * whisper_init_from_buffer_no_state(void * buffer, size_t buffer_size),
+        "use whisper_init_from_buffer_with_params_no_state instead"
+    );
+    WHISPER_DEPRECATED(
+        WHISPER_API struct whisper_context * whisper_init_no_state(struct whisper_model_loader * loader),
+        "use whisper_init_with_params_no_state instead"
+    );
+
+    WHISPER_API struct whisper_state * whisper_init_state(struct whisper_context * ctx);
+
+    // Given a context, enable use of OpenVINO for encode inference.
+    // model_path: Optional path to OpenVINO encoder IR model. If set to nullptr,
+    //                      the path will be generated from the ggml model path that was passed
+    //                      in to whisper_init_from_file. For example, if 'path_model' was
+    //                      "/path/to/ggml-base.en.bin", then OpenVINO IR model path will be
+    //                      assumed to be "/path/to/ggml-base.en-encoder-openvino.xml".
+    // device: OpenVINO device to run inference on ("CPU", "GPU", etc.)
+    // cache_dir: Optional cache directory that can speed up init time, especially for
+    //                     GPU, by caching compiled 'blobs' there.
+    //                     Set to nullptr if not used.
+    // Returns 0 on success. If OpenVINO is not enabled in build, this simply returns 1.
+    WHISPER_API int whisper_ctx_init_openvino_encoder(
+        struct whisper_context * ctx,
+                    const char * model_path,
+                    const char * device,
+                    const char * cache_dir);
+
+    // Frees all allocated memory
+    WHISPER_API void whisper_free      (struct whisper_context * ctx);
+    WHISPER_API void whisper_free_state(struct whisper_state * state);
+    WHISPER_API void whisper_free_params(struct whisper_full_params * params);
+    WHISPER_API void whisper_free_context_params(struct whisper_context_params * params);
+
+    // Convert RAW PCM audio to log mel spectrogram.
+    // The resulting spectrogram is stored inside the default state of the provided whisper context.
+    // Returns 0 on success
+    WHISPER_API int whisper_pcm_to_mel(
+            struct whisper_context * ctx,
+                       const float * samples,
+                               int   n_samples,
+                               int   n_threads);
+
+    WHISPER_API int whisper_pcm_to_mel_with_state(
+            struct whisper_context * ctx,
+              struct whisper_state * state,
+                       const float * samples,
+                               int   n_samples,
+                               int   n_threads);
+
+    // This can be used to set a custom log mel spectrogram inside the default state of the provided whisper context.
+    // Use this instead of whisper_pcm_to_mel() if you want to provide your own log mel spectrogram.
+    // n_mel must be 80
+    // Returns 0 on success
+    WHISPER_API int whisper_set_mel(
+            struct whisper_context * ctx,
+                       const float * data,
+                               int   n_len,
+                               int   n_mel);
+
+    WHISPER_API int whisper_set_mel_with_state(
+            struct whisper_context * ctx,
+              struct whisper_state * state,
+                       const float * data,
+                               int   n_len,
+                               int   n_mel);
+
+    // Run the Whisper encoder on the log mel spectrogram stored inside the default state in the provided whisper context.
+    // Make sure to call whisper_pcm_to_mel() or whisper_set_mel() first.
+    // offset can be used to specify the offset of the first frame in the spectrogram.
+    // Returns 0 on success
+    WHISPER_API int whisper_encode(
+            struct whisper_context * ctx,
+                               int   offset,
+                               int   n_threads);
+
+    WHISPER_API int whisper_encode_with_state(
+            struct whisper_context * ctx,
+              struct whisper_state * state,
+                               int   offset,
+                               int   n_threads);
+
+    // Run the Whisper decoder to obtain the logits and probabilities for the next token.
+    // Make sure to call whisper_encode() first.
+    // tokens + n_tokens is the provided context for the decoder.
+    // n_past is the number of tokens to use from previous decoder calls.
+    // Returns 0 on success
+    // TODO: add support for multiple decoders
+    WHISPER_API int whisper_decode(
+            struct whisper_context * ctx,
+               const whisper_token * tokens,
+                               int   n_tokens,
+                               int   n_past,
+                               int   n_threads);
+
+    WHISPER_API int whisper_decode_with_state(
+            struct whisper_context * ctx,
+              struct whisper_state * state,
+               const whisper_token * tokens,
+                               int   n_tokens,
+                               int   n_past,
+                               int   n_threads);
+
+    // Convert the provided text into tokens.
+    // The tokens pointer must be large enough to hold the resulting tokens.
+    // Returns the number of tokens on success, no more than n_max_tokens
+    // Returns a negative number on failure - the number of tokens that would have been returned
+    // TODO: not sure if correct
+    WHISPER_API int whisper_tokenize(
+            struct whisper_context * ctx,
+                        const char * text,
+                     whisper_token * tokens,
+                               int   n_max_tokens);
+
+    // Return the number of tokens in the provided text
+    // Equivalent to: -whisper_tokenize(ctx, text, NULL, 0)
+    int whisper_token_count(struct whisper_context * ctx, const char * text);
+
+    // Largest language id (i.e. number of available languages - 1)
+    WHISPER_API int whisper_lang_max_id(void);
+
+    // Return the id of the specified language, returns -1 if not found
+    // Examples:
+    //   "de" -> 2
+    //   "german" -> 2
+    WHISPER_API int whisper_lang_id(const char * lang);
+
+    // Return the short string of the specified language id (e.g. 2 -> "de"), returns nullptr if not found
+    WHISPER_API const char * whisper_lang_str(int id);
+
+    // Return the short string of the specified language name (e.g. 2 -> "german"), returns nullptr if not found
+    WHISPER_API const char * whisper_lang_str_full(int id);
+
+    // Use mel data at offset_ms to try and auto-detect the spoken language
+    // Make sure to call whisper_pcm_to_mel() or whisper_set_mel() first
+    // Returns the top language id or negative on failure
+    // If not null, fills the lang_probs array with the probabilities of all languages
+    // The array must be whisper_lang_max_id() + 1 in size
+    // ref: https://github.com/openai/whisper/blob/main/whisper/decoding.py#L18-L69
+    WHISPER_API int whisper_lang_auto_detect(
+            struct whisper_context * ctx,
+                               int   offset_ms,
+                               int   n_threads,
+                             float * lang_probs);
+
+    WHISPER_API int whisper_lang_auto_detect_with_state(
+            struct whisper_context * ctx,
+              struct whisper_state * state,
+                               int   offset_ms,
+                               int   n_threads,
+                             float * lang_probs);
+
+    WHISPER_API int whisper_n_len           (struct whisper_context * ctx); // mel length
+    WHISPER_API int whisper_n_len_from_state(struct whisper_state * state); // mel length
+    WHISPER_API int whisper_n_vocab         (struct whisper_context * ctx);
+    WHISPER_API int whisper_n_text_ctx      (struct whisper_context * ctx);
+    WHISPER_API int whisper_n_audio_ctx     (struct whisper_context * ctx);
+    WHISPER_API int whisper_is_multilingual (struct whisper_context * ctx);
+
+    WHISPER_API int whisper_model_n_vocab      (struct whisper_context * ctx);
+    WHISPER_API int whisper_model_n_audio_ctx  (struct whisper_context * ctx);
+    WHISPER_API int whisper_model_n_audio_state(struct whisper_context * ctx);
+    WHISPER_API int whisper_model_n_audio_head (struct whisper_context * ctx);
+    WHISPER_API int whisper_model_n_audio_layer(struct whisper_context * ctx);
+    WHISPER_API int whisper_model_n_text_ctx   (struct whisper_context * ctx);
+    WHISPER_API int whisper_model_n_text_state (struct whisper_context * ctx);
+    WHISPER_API int whisper_model_n_text_head  (struct whisper_context * ctx);
+    WHISPER_API int whisper_model_n_text_layer (struct whisper_context * ctx);
+    WHISPER_API int whisper_model_n_mels       (struct whisper_context * ctx);
+    WHISPER_API int whisper_model_ftype        (struct whisper_context * ctx);
+    WHISPER_API int whisper_model_type         (struct whisper_context * ctx);
+
+    // Token logits obtained from the last call to whisper_decode()
+    // The logits for the last token are stored in the last row
+    // Rows: n_tokens
+    // Cols: n_vocab
+    WHISPER_API float * whisper_get_logits           (struct whisper_context * ctx);
+    WHISPER_API float * whisper_get_logits_from_state(struct whisper_state * state);
+
+    // Token Id -> String. Uses the vocabulary in the provided context
+    WHISPER_API const char * whisper_token_to_str(struct whisper_context * ctx, whisper_token token);
+    WHISPER_API const char * whisper_model_type_readable(struct whisper_context * ctx);
+
+
+    // Special tokens
+    WHISPER_API whisper_token whisper_token_eot (struct whisper_context * ctx);
+    WHISPER_API whisper_token whisper_token_sot (struct whisper_context * ctx);
+    WHISPER_API whisper_token whisper_token_solm(struct whisper_context * ctx);
+    WHISPER_API whisper_token whisper_token_prev(struct whisper_context * ctx);
+    WHISPER_API whisper_token whisper_token_nosp(struct whisper_context * ctx);
+    WHISPER_API whisper_token whisper_token_not (struct whisper_context * ctx);
+    WHISPER_API whisper_token whisper_token_beg (struct whisper_context * ctx);
+    WHISPER_API whisper_token whisper_token_lang(struct whisper_context * ctx, int lang_id);
+
+    // Task tokens
+    WHISPER_API whisper_token whisper_token_translate (struct whisper_context * ctx);
+    WHISPER_API whisper_token whisper_token_transcribe(struct whisper_context * ctx);
+
+    // Performance information from the default state.
+    WHISPER_API void whisper_print_timings(struct whisper_context * ctx);
+    WHISPER_API void whisper_reset_timings(struct whisper_context * ctx);
+
+    // Print system information
+    WHISPER_API const char * whisper_print_system_info(void);
+
+    ////////////////////////////////////////////////////////////////////////////
+
+    // Available sampling strategies
+    enum whisper_sampling_strategy {
+        WHISPER_SAMPLING_GREEDY,      // similar to OpenAI's GreedyDecoder
+        WHISPER_SAMPLING_BEAM_SEARCH, // similar to OpenAI's BeamSearchDecoder
+    };
+
+    // Text segment callback
+    // Called on every newly generated text segment
+    // Use the whisper_full_...() functions to obtain the text segments
+    typedef void (*whisper_new_segment_callback)(struct whisper_context * ctx, struct whisper_state * state, int n_new, void * user_data);
+
+    // Progress callback
+    typedef void (*whisper_progress_callback)(struct whisper_context * ctx, struct whisper_state * state, int progress, void * user_data);
+
+    // Encoder begin callback
+    // If not NULL, called before the encoder starts
+    // If it returns false, the computation is aborted
+    typedef bool (*whisper_encoder_begin_callback)(struct whisper_context * ctx, struct whisper_state * state, void * user_data);
+
+    // Logits filter callback
+    // Can be used to modify the logits before sampling
+    // If not NULL, called after applying temperature to logits
+    typedef void (*whisper_logits_filter_callback)(
+            struct whisper_context * ctx,
+              struct whisper_state * state,
+          const whisper_token_data * tokens,
+                               int   n_tokens,
+                             float * logits,
+                              void * user_data);
+
+    // Parameters for the whisper_full() function
+    // If you change the order or add new parameters, make sure to update the default values in whisper.cpp:
+    // whisper_full_default_params()
+    struct whisper_full_params {
+        enum whisper_sampling_strategy strategy;
+
+        int n_threads;
+        int n_max_text_ctx;     // max tokens to use from past text as prompt for the decoder
+        int offset_ms;          // start offset in ms
+        int duration_ms;        // audio duration to process in ms
+
+        bool translate;
+        bool no_context;        // do not use past transcription (if any) as initial prompt for the decoder
+        bool no_timestamps;     // do not generate timestamps
+        bool single_segment;    // force single segment output (useful for streaming)
+        bool print_special;     // print special tokens (e.g. <SOT>, <EOT>, <BEG>, etc.)
+        bool print_progress;    // print progress information
+        bool print_realtime;    // print results from within whisper.cpp (avoid it, use callback instead)
+        bool print_timestamps;  // print timestamps for each text segment when printing realtime
+
+        // [EXPERIMENTAL] token-level timestamps
+        bool  token_timestamps; // enable token-level timestamps
+        float thold_pt;         // timestamp token probability threshold (~0.01)
+        float thold_ptsum;      // timestamp token sum probability threshold (~0.01)
+        int   max_len;          // max segment length in characters
+        bool  split_on_word;    // split on word rather than on token (when used with max_len)
+        int   max_tokens;       // max tokens per segment (0 = no limit)
+
+        // [EXPERIMENTAL] speed-up techniques
+        // note: these can significantly reduce the quality of the output
+        bool debug_mode;        // enable debug_mode provides extra info (eg. Dump log_mel)
+        int  audio_ctx;         // overwrite the audio context size (0 = use default)
+
+        // [EXPERIMENTAL] [TDRZ] tinydiarize
+        bool tdrz_enable;       // enable tinydiarize speaker turn detection
+
+        // A regular expression that matches tokens to suppress
+        const char * suppress_regex;
+
+        // tokens to provide to the whisper decoder as initial prompt
+        // these are prepended to any existing text context from a previous call
+        // use whisper_tokenize() to convert text to tokens
+        // maximum of whisper_n_text_ctx()/2 tokens are used (typically 224)
+        const char * initial_prompt;
+        const whisper_token * prompt_tokens;
+        int prompt_n_tokens;
+
+        // for auto-detection, set to nullptr, "" or "auto"
+        const char * language;
+        bool detect_language;
+
+        // common decoding parameters:
+        bool suppress_blank;    // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/decoding.py#L89
+        bool suppress_non_speech_tokens; // ref: https://github.com/openai/whisper/blob/7858aa9c08d98f75575035ecd6481f462d66ca27/whisper/tokenizer.py#L224-L253
+
+        float temperature;      // initial decoding temperature, ref: https://ai.stackexchange.com/a/32478
+        float max_initial_ts;   // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/decoding.py#L97
+        float length_penalty;   // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L267
+
+        // fallback parameters
+        // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L274-L278
+        float temperature_inc;
+        float entropy_thold;    // similar to OpenAI's "compression_ratio_threshold"
+        float logprob_thold;
+        float no_speech_thold;  // TODO: not implemented
+
+        struct {
+            int best_of;    // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L264
+        } greedy;
+
+        struct {
+            int beam_size;  // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L265
+
+            float patience; // TODO: not implemented, ref: https://arxiv.org/pdf/2204.05424.pdf
+        } beam_search;
+
+        // called for every newly generated text segment
+        whisper_new_segment_callback new_segment_callback;
+        void * new_segment_callback_user_data;
+
+        // called on each progress update
+        whisper_progress_callback progress_callback;
+        void * progress_callback_user_data;
+
+        // called each time before the encoder starts
+        whisper_encoder_begin_callback encoder_begin_callback;
+        void * encoder_begin_callback_user_data;
+
+        // called each time before ggml computation starts
+        ggml_abort_callback abort_callback;
+        void * abort_callback_user_data;
+
+        // called by each decoder to filter obtained logits
+        whisper_logits_filter_callback logits_filter_callback;
+        void * logits_filter_callback_user_data;
+
+        const whisper_grammar_element ** grammar_rules;
+        size_t                           n_grammar_rules;
+        size_t                           i_start_rule;
+        float                            grammar_penalty;
+    };
+
+    // NOTE: this function allocates memory, and it is the responsibility of the caller to free the pointer - see whisper_free_context_params & whisper_free_params()
+    WHISPER_API struct whisper_context_params * whisper_context_default_params_by_ref(void);
+    WHISPER_API struct whisper_context_params   whisper_context_default_params       (void);
+    WHISPER_API struct whisper_full_params * whisper_full_default_params_by_ref(enum whisper_sampling_strategy strategy);
+    WHISPER_API struct whisper_full_params   whisper_full_default_params       (enum whisper_sampling_strategy strategy);
+
+    // Run the entire model: PCM -> log mel spectrogram -> encoder -> decoder -> text
+    // Not thread safe for same context
+    // Uses the specified decoding strategy to obtain the text.
+    WHISPER_API int whisper_full(
+                struct whisper_context * ctx,
+            struct whisper_full_params   params,
+                           const float * samples,
+                                   int   n_samples);
+
+    WHISPER_API int whisper_full_with_state(
+                struct whisper_context * ctx,
+                  struct whisper_state * state,
+            struct whisper_full_params   params,
+                           const float * samples,
+                                   int   n_samples);
+
+    // Split the input audio in chunks and process each chunk separately using whisper_full_with_state()
+    // Result is stored in the default state of the context
+    // Not thread safe if executed in parallel on the same context.
+    // It seems this approach can offer some speedup in some cases.
+    // However, the transcription accuracy can be worse at the beginning and end of each chunk.
+    WHISPER_API int whisper_full_parallel(
+                struct whisper_context * ctx,
+            struct whisper_full_params   params,
+                           const float * samples,
+                                   int   n_samples,
+                                   int   n_processors);
+
+    // Number of generated text segments
+    // A segment can be a few words, a sentence, or even a paragraph.
+    WHISPER_API int whisper_full_n_segments           (struct whisper_context * ctx);
+    WHISPER_API int whisper_full_n_segments_from_state(struct whisper_state * state);
+
+    // Language id associated with the context's default state
+    WHISPER_API int whisper_full_lang_id(struct whisper_context * ctx);
+
+    // Language id associated with the provided state
+    WHISPER_API int whisper_full_lang_id_from_state(struct whisper_state * state);
+
+    // Get the start and end time of the specified segment
+    WHISPER_API int64_t whisper_full_get_segment_t0           (struct whisper_context * ctx, int i_segment);
+    WHISPER_API int64_t whisper_full_get_segment_t0_from_state(struct whisper_state * state, int i_segment);
+
+    WHISPER_API int64_t whisper_full_get_segment_t1           (struct whisper_context * ctx, int i_segment);
+    WHISPER_API int64_t whisper_full_get_segment_t1_from_state(struct whisper_state * state, int i_segment);
+
+    // Get whether the next segment is predicted as a speaker turn
+    WHISPER_API bool whisper_full_get_segment_speaker_turn_next(struct whisper_context * ctx, int i_segment);
+    WHISPER_API bool whisper_full_get_segment_speaker_turn_next_from_state(struct whisper_state * state, int i_segment);
+
+    // Get the text of the specified segment
+    WHISPER_API const char * whisper_full_get_segment_text           (struct whisper_context * ctx, int i_segment);
+    WHISPER_API const char * whisper_full_get_segment_text_from_state(struct whisper_state * state, int i_segment);
+
+    // Get number of tokens in the specified segment
+    WHISPER_API int whisper_full_n_tokens           (struct whisper_context * ctx, int i_segment);
+    WHISPER_API int whisper_full_n_tokens_from_state(struct whisper_state * state, int i_segment);
+
+    // Get the token text of the specified token in the specified segment
+    WHISPER_API const char * whisper_full_get_token_text           (struct whisper_context * ctx, int i_segment, int i_token);
+    WHISPER_API const char * whisper_full_get_token_text_from_state(struct whisper_context * ctx, struct whisper_state * state, int i_segment, int i_token);
+
+    WHISPER_API whisper_token whisper_full_get_token_id           (struct whisper_context * ctx, int i_segment, int i_token);
+    WHISPER_API whisper_token whisper_full_get_token_id_from_state(struct whisper_state * state, int i_segment, int i_token);
+
+    // Get token data for the specified token in the specified segment
+    // This contains probabilities, timestamps, etc.
+    WHISPER_API whisper_token_data whisper_full_get_token_data           (struct whisper_context * ctx, int i_segment, int i_token);
+    WHISPER_API whisper_token_data whisper_full_get_token_data_from_state(struct whisper_state * state, int i_segment, int i_token);
+
+    // Get the probability of the specified token in the specified segment
+    WHISPER_API float whisper_full_get_token_p           (struct whisper_context * ctx, int i_segment, int i_token);
+    WHISPER_API float whisper_full_get_token_p_from_state(struct whisper_state * state, int i_segment, int i_token);
+
+    ////////////////////////////////////////////////////////////////////////////
+
+    // Temporary helpers needed for exposing ggml interface
+
+    WHISPER_API int          whisper_bench_memcpy          (int n_threads);
+    WHISPER_API const char * whisper_bench_memcpy_str      (int n_threads);
+    WHISPER_API int          whisper_bench_ggml_mul_mat    (int n_threads);
+    WHISPER_API const char * whisper_bench_ggml_mul_mat_str(int n_threads);
+
+    // Control logging output; default behavior is to print to stderr
+
+    WHISPER_API void whisper_log_set(ggml_log_callback log_callback, void * user_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
index b205eb1cde8296a9acc603e29072525e2077cc88..a02a131f25d66b3c563d0a2339d38145cb404b2e 100755 (executable)
@@ -1,8 +1,8 @@
 #!/bin/sh
 #
 # This generates:
-#   - coreml/whisper-encoder-impl.h and coreml/whisper-encoder-impl.m
-#   - coreml/whisper-decoder-impl.h and coreml/whisper-decoder-impl.m
+#   - src/coreml/whisper-encoder-impl.h and src/coreml/whisper-encoder-impl.m
+#   - src/coreml/whisper-decoder-impl.h and src/coreml/whisper-decoder-impl.m
 #
 
 wd=$(dirname "$0")
@@ -11,19 +11,19 @@ cd "$wd/../" || exit
 python3 models/convert-whisper-to-coreml.py --model tiny.en
 
 mv -v models/coreml-encoder-tiny.en.mlpackage models/whisper-encoder-impl.mlpackage
-xcrun coremlc generate models/whisper-encoder-impl.mlpackage coreml/
-mv coreml/whisper_encoder_impl.h coreml/whisper-encoder-impl.h
-mv coreml/whisper_encoder_impl.m coreml/whisper-encoder-impl.m
-sed -i '' 's/whisper_encoder_impl\.h/whisper-encoder-impl.h/g' coreml/whisper-encoder-impl.m
-sed -i '' 's/whisper_encoder_impl\.m/whisper-encoder-impl.m/g' coreml/whisper-encoder-impl.m
-sed -i '' 's/whisper_encoder_impl\.h/whisper-encoder-impl.h/g' coreml/whisper-encoder-impl.h
+xcrun coremlc generate models/whisper-encoder-impl.mlpackage src/coreml/
+mv src/coreml/whisper_encoder_impl.h src/coreml/whisper-encoder-impl.h
+mv src/coreml/whisper_encoder_impl.m src/coreml/whisper-encoder-impl.m
+sed -i '' 's/whisper_encoder_impl\.h/whisper-encoder-impl.h/g' src/coreml/whisper-encoder-impl.m
+sed -i '' 's/whisper_encoder_impl\.m/whisper-encoder-impl.m/g' src/coreml/whisper-encoder-impl.m
+sed -i '' 's/whisper_encoder_impl\.h/whisper-encoder-impl.h/g' src/coreml/whisper-encoder-impl.h
 
 mv -v models/coreml-decoder-tiny.en.mlpackage models/whisper-decoder-impl.mlpackage
-xcrun coremlc generate models/whisper-decoder-impl.mlpackage coreml/
-mv coreml/whisper_decoder_impl.h coreml/whisper-decoder-impl.h
-mv coreml/whisper_decoder_impl.m coreml/whisper-decoder-impl.m
-sed -i '' 's/whisper_decoder_impl\.h/whisper-decoder-impl.h/g' coreml/whisper-decoder-impl.m
-sed -i '' 's/whisper_decoder_impl\.m/whisper-decoder-impl.m/g' coreml/whisper-decoder-impl.m
-sed -i '' 's/whisper_decoder_impl\.h/whisper-decoder-impl.h/g' coreml/whisper-decoder-impl.h
+xcrun coremlc generate models/whisper-decoder-impl.mlpackage src/coreml/
+mv src/coreml/whisper_decoder_impl.h src/coreml/whisper-decoder-impl.h
+mv src/coreml/whisper_decoder_impl.m src/coreml/whisper-decoder-impl.m
+sed -i '' 's/whisper_decoder_impl\.h/whisper-decoder-impl.h/g' src/coreml/whisper-decoder-impl.m
+sed -i '' 's/whisper_decoder_impl\.m/whisper-decoder-impl.m/g' src/coreml/whisper-decoder-impl.m
+sed -i '' 's/whisper_decoder_impl\.h/whisper-decoder-impl.h/g' src/coreml/whisper-decoder-impl.h
 
 rm -rfv models/whisper-encoder-impl.mlpackage models/whisper-decoder-impl.mlpackage
diff --git a/openvino/whisper-openvino-encoder.cpp b/openvino/whisper-openvino-encoder.cpp
deleted file mode 100644 (file)
index 4d9ce12..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-#include "openvino/whisper-openvino-encoder.h"
-#include "ggml.h"
-#include <openvino/openvino.hpp>
-#include <iostream>
-
-struct whisper_openvino_context {
-    ov::InferRequest inferRequest;
-};
-
-struct whisper_openvino_context * whisper_openvino_init(const char* path_model,
-    const char* device,
-    const char* cache_dir)
-{
-    if (!path_model || !device) {
-        fprintf(stderr, "%s: path_model and/or device is null\n", __func__);
-        return nullptr;
-    }
-
-    fprintf(stderr, "%s: path_model = %s, device = %s, cache_dir = %s\n",
-        __func__, path_model, device, cache_dir ? cache_dir : "(not set)");
-
-       whisper_openvino_context *context = new whisper_openvino_context;
-    try {
-        ov::Core core;
-
-        if (cache_dir) {
-            // enables caching of device-specific 'blobs' during core.compile_model
-            // routine. This speeds up calls to compile_model for successive runs.
-            core.set_property(ov::cache_dir(cache_dir));
-        }
-
-        //Read the OpenVINO encoder IR (.xml/.bin) from disk, producing an ov::Model object.
-        std::shared_ptr<ov::Model> model = core.read_model(path_model);
-
-        // Produce a compiled-model object, given the device ("CPU", "GPU", etc.)
-        auto compiledModel = core.compile_model(model, device);
-
-        // From the compiled model object, create an infer request. This is the thing that we
-        //  we will use later on to trigger inference execution.
-        context->inferRequest = compiledModel.create_infer_request();
-    }
-    catch (const std::exception& error) {
-        std::cout << "in openvino encoder compile routine: exception: " << error.what() << std::endl;
-        delete context;
-        context = nullptr;
-    }
-
-    return context;
-}
-
-void whisper_openvino_free(struct whisper_openvino_context * ctx) {
-    if( ctx ) {
-        delete ctx;
-    }
-}
-
-int whisper_openvino_encode(
-    whisper_openvino_context* ctx,
-    ggml_tensor* mel,
-    ggml_tensor* out) {
-
-    if (!ctx || !mel || !out) {
-        fprintf(stderr, "%s: Error! ctx / mel / out is null\n", __func__);
-        return 0;
-    }
-
-    if (ggml_n_dims(mel) != 2) {
-        fprintf(stderr, "%s: Error! mel ggml_tensor expected to have n_dims=2, but it has n_dims=%d\n",
-            __func__, ggml_n_dims(mel));
-        return 0;
-    }
-
-    if (ggml_n_dims(out) != 2) {
-        fprintf(stderr, "%s: Error! out ggml_tensor expected to have n_dims=2, but it has n_dims=%d\n",
-            __func__, ggml_n_dims(out));
-        return 0;
-    }
-
-    try {
-
-        //wrap the passed-in mel ggml_tensor as an OpenVINO Tensor object, and set as input tensor to infer request
-        {
-            // note, we populate shape & stride dimensions in opposite order from how they are listed in ne / nb arrays
-            ov::Shape input_shape = { 1, (unsigned long long)mel->ne[1], (unsigned long long)mel->ne[0] };
-            ov::Strides input_strides = { mel->nb[2], mel->nb[1], mel->nb[0] };
-            ov::Tensor input_tensor(ov::element::f32, input_shape, mel->data, input_strides);
-            ctx->inferRequest.set_input_tensor(input_tensor);
-        }
-
-        //wrap the passed-in out ggml_tensor as an OpenVINO Tensor object, and set as output tensor to infer request
-        {
-            // note, we populate shape & stride dimensions in opposite order from how they are listed in ne / nb arrays
-            ov::Shape output_shape = { 1, (unsigned long long)out->ne[1], (unsigned long long)out->ne[0] };
-            ov::Strides output_strides = { out->nb[2], out->nb[1], out->nb[0] };
-            ov::Tensor out_tensor(ov::element::f32, output_shape, out->data, output_strides);
-            ctx->inferRequest.set_output_tensor(out_tensor);
-        }
-
-        //run inference
-        ctx->inferRequest.infer();
-    }
-    catch (const std::exception& error) {
-        std::cout << "in openvino encode inference execution routine: exception: " << error.what() << std::endl;
-        return 0;
-    }
-
-    return 1;
-}
diff --git a/openvino/whisper-openvino-encoder.h b/openvino/whisper-openvino-encoder.h
deleted file mode 100644 (file)
index 7c2f6df..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-// Wrapper of the OpenVINO Whisper Encoder model
-//
-
-#if __cplusplus
-extern "C" {
-#endif
-
-struct whisper_openvino_context;
-
-// initialize openvino encoder, given path to model xml, device ("CPU", "GPU", etc.), and
-// path to cache_dir. Returns null upon failure.
-struct whisper_openvino_context * whisper_openvino_init(const char * path_model,
-                                                        const char * device,
-                                                        const char * cache_dir);
-
-// clean up a ctx previously returned from whisper_openvino_init()
-void whisper_openvino_free(struct whisper_openvino_context * ctx);
-
-struct ggml_tensor;
-
-// Perform encode using OpenVINO.
-// Returns 1 on success
-// Returns 0 on failure
-int whisper_openvino_encode(
-    whisper_openvino_context* ctx,
-    ggml_tensor* mel,
-    ggml_tensor* out);
-
-#if __cplusplus
-}
-#endif
diff --git a/scripts/build-info.sh b/scripts/build-info.sh
new file mode 100755 (executable)
index 0000000..fa9e7ba
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+CC=$1
+
+build_number="0"
+build_commit="unknown"
+build_compiler="unknown"
+build_target="unknown"
+
+if out=$(git rev-list --count HEAD); then
+    # git is broken on WSL so we need to strip extra newlines
+    build_number=$(printf '%s' "$out" | tr -d '\n')
+fi
+
+if out=$(git rev-parse --short HEAD); then
+    build_commit=$(printf '%s' "$out" | tr -d '\n')
+fi
+
+if out=$($CC --version | head -1); then
+    build_compiler=$out
+fi
+
+if out=$($CC -dumpmachine); then
+    build_target=$out
+fi
+
+echo "int LLAMA_BUILD_NUMBER = ${build_number};"
+echo "char const *LLAMA_COMMIT = \"${build_commit}\";"
+echo "char const *LLAMA_COMPILER = \"${build_compiler}\";"
+echo "char const *LLAMA_BUILD_TARGET = \"${build_target}\";"
diff --git a/scripts/get-flags.mk b/scripts/get-flags.mk
new file mode 100644 (file)
index 0000000..a742766
--- /dev/null
@@ -0,0 +1,38 @@
+ifeq '' '$(findstring clang,$(shell $(GF_CC) --version))'
+       GF_CC_IS_GCC = 1
+       GF_CC_VER := $(shell { $(GF_CC) -dumpfullversion 2>/dev/null; echo; $(GF_CC) -dumpversion; } | awk -F. '/./ { printf("%02d%02d%02d", $$1, $$2, $$3); exit }')
+else
+       GF_CC_IS_CLANG = 1
+       ifeq '' '$(findstring Apple,$(shell $(GF_CC) --version))'
+               GF_CC_IS_LLVM_CLANG = 1
+       else
+               GF_CC_IS_APPLE_CLANG = 1
+       endif
+       GF_CC_VER := \
+               $(shell $(GF_CC) --version | sed -n 's/^.* version \([0-9.]*\).*$$/\1/p' \
+               | awk -F. '{ printf("%02d%02d%02d", $$1, $$2, $$3) }')
+endif
+
+ifeq ($(GF_CC_IS_CLANG), 1)
+       # clang options
+       GF_CFLAGS   = -Wunreachable-code-break -Wunreachable-code-return
+       GF_CXXFLAGS = -Wunreachable-code-break -Wunreachable-code-return -Wmissing-prototypes -Wextra-semi
+
+       ifneq '' '$(and $(GF_CC_IS_LLVM_CLANG),$(filter 1,$(shell expr $(GF_CC_VER) \>= 030800)))'
+               GF_CFLAGS += -Wdouble-promotion
+       endif
+       ifneq '' '$(and $(GF_CC_IS_APPLE_CLANG),$(filter 1,$(shell expr $(GF_CC_VER) \>= 070300)))'
+               GF_CFLAGS += -Wdouble-promotion
+       endif
+else
+       # gcc options
+       GF_CFLAGS   = -Wdouble-promotion
+       GF_CXXFLAGS = -Wno-array-bounds
+
+       ifeq ($(shell expr $(GF_CC_VER) \>= 070100), 1)
+               GF_CXXFLAGS += -Wno-format-truncation
+       endif
+       ifeq ($(shell expr $(GF_CC_VER) \>= 080100), 1)
+               GF_CXXFLAGS += -Wextra-semi
+       endif
+endif
index 397f6c8687dc0b181ecf2f4a216fad85da7dcb3d..7fbd80a7c6c4ff35ca7dd37394bcee5e4bca7679 100755 (executable)
@@ -53,7 +53,9 @@ while read c; do
     fi
 
     git format-patch -k $c~1..$c --stdout -- \
-        include/ggml/ggml*.h \
+        CMakeLists.txt \
+        src/CMakeLists.txt \
+        cmake/FindSIMD.cmake \
         src/ggml*.h \
         src/ggml*.c \
         src/ggml*.cpp \
@@ -61,6 +63,7 @@ while read c; do
         src/ggml*.metal \
         src/ggml*.cu \
         src/ggml-cuda/* \
+        include/ggml*.h \
         examples/common.h \
         examples/common.cpp \
         examples/common-ggml.h \
@@ -92,33 +95,36 @@ if [ -f $SRC_WHISPER/ggml-src.patch ]; then
 
     # replace filenames:
     #
-    # src/ggml.c                  -> ggml.c
-    # src/ggml-alloc.c            -> ggml-alloc.c
-    # src/ggml-backend-impl.h     -> ggml-backend-impl.h
-    # src/ggml-backend.c          -> ggml-backend.c
-    # src/ggml-blas.cpp           -> ggml-blas.cpp
-    # src/ggml-blas.h             -> ggml-blas.h
-    # src/ggml-common.h           -> ggml-common.h
-    # src/ggml-cuda/*             -> ggml-cuda/
-    # src/ggml-cuda.cu            -> ggml-cuda.cu
-    # src/ggml-cuda.h             -> ggml-cuda.h
-    # src/ggml-impl.h             -> ggml-impl.h
-    # src/ggml-kompute.cpp        -> ggml-kompute.cpp
-    # src/ggml-kompute.h          -> ggml-kompute.h
-    # src/ggml-metal.h            -> ggml-metal.h
-    # src/ggml-metal.m            -> ggml-metal.m
-    # src/ggml-quants.c           -> ggml-quants.c
-    # src/ggml-quants.h           -> ggml-quants.h
-    # src/ggml-rpc.cpp            -> ggml-rpc.cpp
-    # src/ggml-rpc.h              -> ggml-rpc.h
-    # src/ggml-sycl/*             -> ggml-sycl/
-    # src/ggml-sycl.cpp           -> ggml-sycl.cpp
-    # src/ggml-sycl.h             -> ggml-sycl.h
-    # src/ggml-vulkan.cpp         -> ggml-vulkan.cpp
-    # src/ggml-vulkan.h           -> ggml-vulkan.h
-    # include/ggml/ggml.h         -> ggml.h
-    # include/ggml/ggml-alloc.h   -> ggml-alloc.h
-    # include/ggml/ggml-backend.h -> ggml-backend.h
+    # CMakelists.txt          -> ggml/CMakeLists.txt
+    # src/CMakeLists.txt      -> ggml/src/CMakeLists.txt
+    # cmake/FindSIMD.cmake    -> ggml/cmake/FindSIMD.cmake
+    #
+    # src/ggml.c              -> ggml/src/ggml.c
+    # src/ggml-alloc.c        -> ggml/src/ggml-alloc.c
+    # src/ggml-backend-impl.h -> ggml/src/ggml-backend-impl.h
+    # src/ggml-backend.c      -> ggml/src/ggml-backend.c
+    # src/ggml-common.h       -> ggml/src/ggml-common.h
+    # src/ggml-cuda/*         -> ggml/src/ggml-cuda/
+    # src/ggml-cuda.cu        -> ggml/src/ggml-cuda.cu
+    # src/ggml-impl.h         -> ggml/src/ggml-impl.h
+    # src/ggml-kompute.cpp    -> ggml/src/ggml-kompute.cpp
+    # src/ggml-metal.m        -> ggml/src/ggml-metal.m
+    # src/ggml-quants.c       -> ggml/src/ggml-quants.c
+    # src/ggml-quants.h       -> ggml/src/ggml-quants.h
+    # src/ggml-rpc.cpp        -> ggml/src/ggml-rpc.cpp
+    # src/ggml-sycl.cpp       -> ggml/src/ggml-sycl.cpp
+    # src/ggml-vulkan.cpp     -> ggml/src/ggml-vulkan.cpp
+    #
+    # include/ggml.h         -> ggml/include/ggml.h
+    # include/ggml-alloc.h   -> ggml/include/ggml-alloc.h
+    # include/ggml-backend.h -> ggml/include/ggml-backend.h
+    # include/ggml-blas.h    -> ggml/include/ggml-blas.h
+    # include/ggml-cuda.h    -> ggml/include/ggml-cuda.h
+    # include/ggml-kompute.h -> ggml/include/ggml-kompute.h
+    # include/ggml-metal.h   -> ggml/include/ggml-metal.h
+    # include/ggml-rpc.h     -> ggml/include/ggml-rpc.h
+    # include/ggml-sycl.h    -> ggml/include/ggml-sycl.h
+    # include/ggml-vulkan.h  -> ggml/include/ggml-vulkan.h
     #
     # examples/common.h                   -> examples/common.h
     # examples/common.cpp                 -> examples/common.cpp
@@ -129,33 +135,34 @@ if [ -f $SRC_WHISPER/ggml-src.patch ]; then
     # ggml/scripts/gen-authors.sh -> scripts/gen-authors.sh
 
     cat ggml-src.patch | sed \
-        -e 's/src\/ggml\.c/ggml.c/g' \
-        -e 's/src\/ggml-alloc\.c/ggml-alloc.c/g' \
-        -e 's/src\/ggml-backend-impl\.h/ggml-backend-impl.h/g' \
-        -e 's/src\/ggml-backend\.c/ggml-backend.c/g' \
-        -e 's/src\/ggml-blas\.cpp/ggml-blas.cpp/g' \
-        -e 's/src\/ggml-blas\.h/ggml-blas.h/g' \
-        -e 's/src\/ggml-common\.h/ggml-common.h/g' \
+        -e 's/CMakeLists.txt/ggml\/CMakeLists.txt/g' \
+        -e 's/src\/CMakeLists.txt/ggml\/src\/CMakeLists.txt/g' \
+        -e 's/cmake\/FindSIMD.cmake/ggml\/cmake\/FindSIMD.cmake/g' \
+        -e 's/src\/ggml\.c/ggml/src/ggml.c/g' \
+        -e 's/src\/ggml-alloc\.c/ggml/src/ggml-alloc.c/g' \
+        -e 's/src\/ggml-backend-impl\.h/ggml/src/ggml-backend-impl.h/g' \
+        -e 's/src\/ggml-backend\.c/ggml/src/ggml-backend.c/g' \
+        -e 's/src\/ggml-common\.h/ggml/src/ggml-common.h/g' \
         -e 's/src\/ggml-cuda\//ggml-cuda\//g' \
-        -e 's/src\/ggml-cuda\.cu/ggml-cuda.cu/g' \
-        -e 's/src\/ggml-cuda\.h/ggml-cuda.h/g' \
-        -e 's/src\/ggml-impl\.h/ggml-impl.h/g' \
-        -e 's/src\/ggml-kompute\.cpp/ggml-kompute.cpp/g' \
-        -e 's/src\/ggml-kompute\.h/ggml-kompute.h/g' \
-        -e 's/src\/ggml-metal\.h/ggml-metal.h/g' \
-        -e 's/src\/ggml-metal\.m/ggml-metal.m/g' \
-        -e 's/src\/ggml-quants\.c/ggml-quants.c/g' \
-        -e 's/src\/ggml-quants\.h/ggml-quants.h/g' \
-        -e 's/src\/ggml-rpc\.cpp/ggml-rpc.cpp/g' \
-        -e 's/src\/ggml-rpc\.h/ggml-rpc.h/g' \
-        -e 's/src\/ggml-sycl\//ggml-sycl\//g' \
-        -e 's/src\/ggml-sycl\.cpp/ggml-sycl.cpp/g' \
-        -e 's/src\/ggml-sycl\.h/ggml-sycl.h/g' \
-        -e 's/src\/ggml-vulkan\.cpp/ggml-vulkan.cpp/g' \
-        -e 's/src\/ggml-vulkan\.h/ggml-vulkan.h/g' \
-        -e 's/include\/ggml\/ggml\.h/ggml.h/g' \
-        -e 's/include\/ggml\/ggml-alloc\.h/ggml-alloc.h/g' \
-        -e 's/include\/ggml\/ggml-backend\.h/ggml-backend.h/g' \
+        -e 's/src\/ggml-cuda\.cu/ggml/src/ggml-cuda.cu/g' \
+        -e 's/src\/ggml-impl\.h/ggml/src/ggml-impl.h/g' \
+        -e 's/src\/ggml-kompute\.cpp/ggml/src/ggml-kompute.cpp/g' \
+        -e 's/src\/ggml-metal\.m/ggml/src/ggml-metal.m/g' \
+        -e 's/src\/ggml-quants\.c/ggml/src/ggml-quants.c/g' \
+        -e 's/src\/ggml-quants\.h/ggml/src/ggml-quants.h/g' \
+        -e 's/src\/ggml-rpc\.cpp/ggml/src/ggml-rpc.cpp/g' \
+        -e 's/src\/ggml-sycl\.cpp/ggml/src/ggml-sycl.cpp/g' \
+        -e 's/src\/ggml-vulkan\.cpp/ggml/src/ggml-vulkan.cpp/g' \
+        -e 's/include\/ggml\.h/ggml/include/ggml.h/g' \
+        -e 's/include\/ggml-alloc\.h/ggml/include/ggml-alloc.h/g' \
+        -e 's/include\/ggml-backend\.h/ggml/include/ggml-backend.h/g' \
+        -e 's/include\/ggml-blas\.h/ggml/include/ggml-blas.h/g' \
+        -e 's/include\/ggml-cuda\.h/ggml/include/ggml-cuda.h/g' \
+        -e 's/include\/ggml-kompute\.h/ggml/include/ggml-kompute.h/g' \
+        -e 's/include\/ggml-metal\.h/ggml/include/ggml-metal.h/g' \
+        -e 's/include\/ggml-rpc\.h/ggml/include/ggml-rpc.h/g' \
+        -e 's/include\/ggml-sycl\.h/ggml/include/ggml-sycl.h/g' \
+        -e 's/include\/ggml-vulkan\.h/ggml/include/ggml-vulkan.h/g' \
         -e 's/examples\/common\.h/examples\/common.h/g' \
         -e 's/examples\/common\.cpp/examples\/common.cpp/g' \
         -e 's/examples\/common-ggml\.h/examples\/common-ggml.h/g' \
index 9c70a82db289f800987c2a23a372f2535de6e2d4..3b9b33f7bb572b281adf80f1bcc2c25a0350ba4d 100755 (executable)
@@ -1,39 +1,41 @@
 #!/bin/bash
 
-cp -rpv ../ggml/src/ggml.c              ./ggml.c
-cp -rpv ../ggml/src/ggml-impl.h         ./ggml-impl.h
-cp -rpv ../ggml/src/ggml-alloc.c        ./ggml-alloc.c
-cp -rpv ../ggml/src/ggml-backend-impl.h ./ggml-backend-impl.h
-cp -rpv ../ggml/src/ggml-backend.c      ./ggml-backend.c
-cp -rpv ../ggml/src/ggml-blas.cpp       ./ggml-blas.cpp
-cp -rpv ../ggml/src/ggml-blas.h         ./ggml-blas.h
-cp -rpv ../ggml/src/ggml-common.h       ./ggml-common.h
-cp -rpv ../ggml/src/ggml-cuda/*         ./ggml-cuda/
-cp -rpv ../ggml/src/ggml-cuda.cu        ./ggml-cuda.cu
-cp -rpv ../ggml/src/ggml-cuda.h         ./ggml-cuda.h
-cp -rpv ../ggml/src/ggml-kompute.cpp    ./ggml-kompute.cpp
-cp -rpv ../ggml/src/ggml-kompute.h      ./ggml-kompute.h
-cp -rpv ../ggml/src/ggml-metal.h        ./ggml-metal.h
-cp -rpv ../ggml/src/ggml-metal.m        ./ggml-metal.m
-cp -rpv ../ggml/src/ggml-metal.metal    ./ggml-metal.metal
-cp -rpv ../ggml/src/ggml-quants.c       ./ggml-quants.c
-cp -rpv ../ggml/src/ggml-quants.h       ./ggml-quants.h
-cp -rpv ../ggml/src/ggml-rpc.cpp        ./ggml-rpc.cpp
-cp -rpv ../ggml/src/ggml-rpc.h          ./ggml-rpc.h
-cp -rpv ../ggml/src/ggml-sycl/*         ./ggml-sycl/
-cp -rpv ../ggml/src/ggml-sycl.cpp       ./ggml-sycl.cpp
-cp -rpv ../ggml/src/ggml-sycl.h         ./ggml-sycl.h
-cp -rpv ../ggml/src/ggml-vulkan.cpp     ./ggml-vulkan.cpp
-cp -rpv ../ggml/src/ggml-vulkan.h       ./ggml-vulkan.h
+cp -rpv ../ggml/CMakeLists.txt       ./ggml/CMakeLists.txt
+cp -rpv ../ggml/src/CMakeLists.txt   ./ggml/src/CMakeLists.txt
+cp -rpv ../ggml/cmake/FindSIMD.cmake ./ggml/cmake/FindSIMD.cmake
 
-cp -rpv ../ggml/include/ggml/ggml.h         ./ggml.h
-cp -rpv ../ggml/include/ggml/ggml-alloc.h   ./ggml-alloc.h
-cp -rpv ../ggml/include/ggml/ggml-backend.h ./ggml-backend.h
+cp -rpv ../ggml/src/ggml.c              ./ggml/src/ggml.c
+cp -rpv ../ggml/src/ggml-alloc.c        ./ggml/src/ggml-alloc.c
+cp -rpv ../ggml/src/ggml-backend-impl.h ./ggml/src/ggml-backend-impl.h
+cp -rpv ../ggml/src/ggml-backend.c      ./ggml/src/ggml-backend.c
+cp -rpv ../ggml/src/ggml-common.h       ./ggml/src/ggml-common.h
+cp -rpv ../ggml/src/ggml-cuda/*         ./ggml/src/ggml-cuda/
+cp -rpv ../ggml/src/ggml-cuda.cu        ./ggml/src/ggml-cuda.cu
+cp -rpv ../ggml/src/ggml-impl.h         ./ggml/src/ggml-impl.h
+cp -rpv ../ggml/src/ggml-kompute.cpp    ./ggml/src/ggml-kompute.cpp
+cp -rpv ../ggml/src/ggml-metal.m        ./ggml/src/ggml-metal.m
+cp -rpv ../ggml/src/ggml-metal.metal    ./ggml/src/ggml-metal.metal
+cp -rpv ../ggml/src/ggml-quants.c       ./ggml/src/ggml-quants.c
+cp -rpv ../ggml/src/ggml-quants.h       ./ggml/src/ggml-quants.h
+cp -rpv ../ggml/src/ggml-rpc.cpp        ./ggml/src/ggml-rpc.cpp
+cp -rpv ../ggml/src/ggml-sycl.cpp       ./ggml/src/ggml-sycl.cpp
+cp -rpv ../ggml/src/ggml-vulkan.cpp     ./ggml/src/ggml-vulkan.cpp
 
-cp -rpv ../ggml/examples/common.h                   ./examples/common.h
-cp -rpv ../ggml/examples/common.cpp                 ./examples/common.cpp
-cp -rpv ../ggml/examples/common-ggml.h              ./examples/common-ggml.h
-cp -rpv ../ggml/examples/common-ggml.cpp            ./examples/common-ggml.cpp
+cp -rpv ../ggml/include/ggml.h         ./ggml/include/ggml.h
+cp -rpv ../ggml/include/ggml-alloc.h   ./ggml/include/ggml-alloc.h
+cp -rpv ../ggml/include/ggml-backend.h ./ggml/include/ggml-backend.h
+cp -rpv ../ggml/include/ggml-blas.h    ./ggml/include/ggml-blas.h
+cp -rpv ../ggml/include/ggml-cuda.h    ./ggml/include/ggml-cuda.h
+cp -rpv ../ggml/include/ggml-kompute.h ./ggml/include/ggml-kompute.h
+cp -rpv ../ggml/include/ggml-metal.h   ./ggml/include/ggml-metal.h
+cp -rpv ../ggml/include/ggml-rpc.h     ./ggml/include/ggml-rpc.h
+cp -rpv ../ggml/include/ggml-sycl.h    ./ggml/include/ggml-sycl.h
+cp -rpv ../ggml/include/ggml-vulkan.h  ./ggml/include/ggml-vulkan.h
 
-cp -rpv ../LICENSE                     ./LICENSE
+cp -rpv ../ggml/examples/common.h        ./examples/common.h
+cp -rpv ../ggml/examples/common.cpp      ./examples/common.cpp
+cp -rpv ../ggml/examples/common-ggml.h   ./examples/common-ggml.h
+cp -rpv ../ggml/examples/common-ggml.cpp ./examples/common-ggml.cpp
+
+cp -rpv ../ggml/LICENSE                ./LICENSE
 cp -rpv ../ggml/scripts/gen-authors.sh ./scripts/gen-authors.sh
index de71ffcca80cb21d9db03c070d94e7e2e51e7076..42eeebfde85de235eee4a8c4e9120a49366b31c0 100755 (executable)
@@ -1,8 +1,9 @@
 #!/bin/bash
 
-cp -rpv ../llama.cpp/llama.h          ./examples/talk-llama/llama.h
-cp -rpv ../llama.cpp/llama.cpp        ./examples/talk-llama/llama.cpp
-cp -rpv ../llama.cpp/unicode.h        ./examples/talk-llama/unicode.h
-cp -rpv ../llama.cpp/unicode.cpp      ./examples/talk-llama/unicode.cpp
-cp -rpv ../llama.cpp/unicode-data.h   ./examples/talk-llama/unicode-data.h
-cp -rpv ../llama.cpp/unicode-data.cpp ./examples/talk-llama/unicode-data.cpp
+cp -rpv ../llama.cpp/include/llama.h ./examples/talk-llama/llama.h
+
+cp -rpv ../llama.cpp/src/llama.cpp        ./examples/talk-llama/llama.cpp
+cp -rpv ../llama.cpp/src/unicode.h        ./examples/talk-llama/unicode.h
+cp -rpv ../llama.cpp/src/unicode.cpp      ./examples/talk-llama/unicode.cpp
+cp -rpv ../llama.cpp/src/unicode-data.h   ./examples/talk-llama/unicode-data.h
+cp -rpv ../llama.cpp/src/unicode-data.cpp ./examples/talk-llama/unicode-data.cpp
diff --git a/spm-headers/ggml-alloc.h b/spm-headers/ggml-alloc.h
new file mode 120000 (symlink)
index 0000000..0361ffc
--- /dev/null
@@ -0,0 +1 @@
+../ggml/include/ggml-alloc.h
\ No newline at end of file
diff --git a/spm-headers/ggml-backend.h b/spm-headers/ggml-backend.h
new file mode 120000 (symlink)
index 0000000..7295f0f
--- /dev/null
@@ -0,0 +1 @@
+../ggml/include/ggml-backend.h
\ No newline at end of file
diff --git a/spm-headers/ggml-metal.h b/spm-headers/ggml-metal.h
new file mode 120000 (symlink)
index 0000000..aefad5f
--- /dev/null
@@ -0,0 +1 @@
+../ggml/include/ggml-metal.h
\ No newline at end of file
index 39215298f981b9c57b87fda07ce46defcb543fb4..0bdfeacbdbead5a08f050ae2b11cee877786fa9d 120000 (symlink)
@@ -1 +1 @@
-../ggml.h
\ No newline at end of file
+../ggml/include/ggml.h
\ No newline at end of file
index f67137aa25aa2c4615b7e016c3256a380ba67426..0e0e6f2287b9dceeb9cd4cdf62f12727bcf430fa 120000 (symlink)
@@ -1 +1 @@
-../whisper.h
\ No newline at end of file
+../include/whisper.h
\ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644 (file)
index 0000000..4e4b9f8
--- /dev/null
@@ -0,0 +1,142 @@
+# TODO: should not use this
+if (WIN32)
+    add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
+
+    if (BUILD_SHARED_LIBS)
+        set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
+    endif()
+endif()
+
+if (WHISPER_COREML)
+    find_library(FOUNDATION_FRAMEWORK Foundation)
+    find_library(COREML_FRAMEWORK CoreML)
+
+    if (COREML_FRAMEWORK)
+        message(STATUS "CoreML framework found")
+
+        set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DWHISPER_USE_COREML)
+    else()
+        message(FATAL_ERROR "CoreML framework not found")
+    endif()
+
+    if (WHISPER_COREML_ALLOW_FALLBACK)
+        set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DWHISPER_COREML_ALLOW_FALLBACK)
+    endif()
+endif()
+
+if (WHISPER_OPENVINO)
+    find_package(OpenVINO REQUIRED COMPONENTS Runtime)
+endif()
+
+#
+# libraries
+#
+
+# whisper.coreml
+
+if (WHISPER_COREML)
+    set(TARGET whisper.coreml)
+
+    add_library(${TARGET}
+        coreml/whisper-encoder.h
+        coreml/whisper-encoder.mm
+        coreml/whisper-encoder-impl.h
+        coreml/whisper-encoder-impl.m
+        )
+
+    include(DefaultTargetOptions)
+
+    target_include_directories(${TARGET} PUBLIC
+        .
+        )
+
+    target_link_libraries(${TARGET} PRIVATE ${FOUNDATION_FRAMEWORK} ${COREML_FRAMEWORK})
+
+    set_target_properties(${TARGET} PROPERTIES
+        COMPILE_FLAGS "-fobjc-arc"
+        )
+    set_target_properties(${TARGET} PROPERTIES FOLDER "libs")
+endif()
+
+if (WHISPER_OPENVINO)
+    set(TARGET whisper.openvino)
+
+    add_library(${TARGET} OBJECT
+        openvino/whisper-openvino-encoder.h
+        openvino/whisper-openvino-encoder.cpp
+        )
+
+    target_include_directories(${TARGET} PUBLIC
+        .
+        )
+
+    set_property(TARGET ${TARGET} PROPERTY POSITION_INDEPENDENT_CODE ON)
+    set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DWHISPER_USE_OPENVINO)
+
+    target_link_libraries(${TARGET} PRIVATE openvino::runtime)
+    set_target_properties(${TARGET} PROPERTIES FOLDER "libs")
+endif()
+
+if (GGML_CUDA)
+    cmake_minimum_required(VERSION 3.18)  # for CMAKE_CUDA_ARCHITECTURES
+
+    find_package(CUDAToolkit)
+    if (CUDAToolkit_FOUND)
+        message(STATUS "CUDA found")
+
+        if (NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
+            # 52 == lowest CUDA 12 standard
+            # 60 == f16 CUDA intrinsics
+            # 61 == integer CUDA intrinsics
+            # 70 == compute capability at which unrolling a loop in mul_mat_q kernels is faster
+            set(CMAKE_CUDA_ARCHITECTURES "52;61;70") # lowest CUDA 12 standard + lowest for integer intrinsics
+        endif()
+        message(STATUS "Using CUDA architectures: ${CMAKE_CUDA_ARCHITECTURES}")
+
+        enable_language(CUDA)
+    else()
+        message(WARNING "CUDA not found")
+    endif()
+endif()
+
+# whisper
+
+add_library(whisper
+            ../include/whisper.h
+            whisper.cpp
+            whisper-mel.hpp
+            )
+
+if (GGML_CUDA)
+    target_sources(whisper PRIVATE whisper-mel-cuda.cu)
+
+    target_link_libraries(whisper PRIVATE CUDA::cufft)
+endif()
+
+# Set the version numbers
+set_target_properties(whisper PROPERTIES
+    VERSION ${PROJECT_VERSION}
+    SOVERSION ${SOVERSION}
+)
+
+target_include_directories(whisper PUBLIC . ../include)
+target_compile_features   (whisper PUBLIC cxx_std_11) # don't bump
+
+target_link_libraries(whisper PUBLIC ggml)
+
+if (WHISPER_COREML)
+    target_link_libraries(whisper PRIVATE whisper.coreml)
+endif()
+
+if (WHISPER_OPENVINO)
+    target_link_libraries(whisper PRIVATE whisper.openvino)
+endif()
+
+if (WHISPER_MKL)
+    target_link_libraries(whisper PRIVATE MKL::MKL)
+endif()
+
+if (BUILD_SHARED_LIBS)
+    set_target_properties(whisper PROPERTIES POSITION_INDEPENDENT_CODE ON)
+    target_compile_definitions(whisper PRIVATE WHISPER_SHARED WHISPER_BUILD)
+endif()
diff --git a/src/coreml/whisper-decoder-impl.h b/src/coreml/whisper-decoder-impl.h
new file mode 100644 (file)
index 0000000..c6f2e85
--- /dev/null
@@ -0,0 +1,146 @@
+//
+// whisper-decoder-impl.h
+//
+// This file was automatically generated and should not be edited.
+//
+
+#import <Foundation/Foundation.h>
+#import <CoreML/CoreML.h>
+#include <stdint.h>
+#include <os/log.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+/// Model Prediction Input Type
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
+@interface whisper_decoder_implInput : NSObject<MLFeatureProvider>
+
+/// token_data as 1 by 1 matrix of 32-bit integers
+@property (readwrite, nonatomic, strong) MLMultiArray * token_data;
+
+/// audio_data as 1 × 384 × 1 × 1500 4-dimensional array of floats
+@property (readwrite, nonatomic, strong) MLMultiArray * audio_data;
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithToken_data:(MLMultiArray *)token_data audio_data:(MLMultiArray *)audio_data NS_DESIGNATED_INITIALIZER;
+
+@end
+
+
+/// Model Prediction Output Type
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
+@interface whisper_decoder_implOutput : NSObject<MLFeatureProvider>
+
+/// var_1346 as multidimensional array of floats
+@property (readwrite, nonatomic, strong) MLMultiArray * var_1346;
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithVar_1346:(MLMultiArray *)var_1346 NS_DESIGNATED_INITIALIZER;
+
+@end
+
+
+/// Class for model loading and prediction
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
+@interface whisper_decoder_impl : NSObject
+@property (readonly, nonatomic, nullable) MLModel * model;
+
+/**
+    URL of the underlying .mlmodelc directory.
+*/
++ (nullable NSURL *)URLOfModelInThisBundle;
+
+/**
+    Initialize whisper_decoder_impl instance from an existing MLModel object.
+
+    Usually the application does not use this initializer unless it makes a subclass of whisper_decoder_impl.
+    Such application may want to use `-[MLModel initWithContentsOfURL:configuration:error:]` and `+URLOfModelInThisBundle` to create a MLModel object to pass-in.
+*/
+- (instancetype)initWithMLModel:(MLModel *)model NS_DESIGNATED_INITIALIZER;
+
+/**
+    Initialize whisper_decoder_impl instance with the model in this bundle.
+*/
+- (nullable instancetype)init;
+
+/**
+    Initialize whisper_decoder_impl instance with the model in this bundle.
+
+    @param configuration The model configuration object
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithConfiguration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Initialize whisper_decoder_impl instance from the model URL.
+
+    @param modelURL URL to the .mlmodelc directory for whisper_decoder_impl.
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Initialize whisper_decoder_impl instance from the model URL.
+
+    @param modelURL URL to the .mlmodelc directory for whisper_decoder_impl.
+    @param configuration The model configuration object
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Construct whisper_decoder_impl instance asynchronously with configuration.
+    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
+
+    @param configuration The model configuration
+    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_decoder_impl instance or NSError object.
+*/
++ (void)loadWithConfiguration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_decoder_impl * _Nullable model, NSError * _Nullable error))handler;
+
+/**
+    Construct whisper_decoder_impl instance asynchronously with URL of .mlmodelc directory and optional configuration.
+
+    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
+
+    @param modelURL The model URL.
+    @param configuration The model configuration
+    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_decoder_impl instance or NSError object.
+*/
++ (void)loadContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_decoder_impl * _Nullable model, NSError * _Nullable error))handler;
+
+/**
+    Make a prediction using the standard interface
+    @param input an instance of whisper_decoder_implInput to predict from
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+    @return the prediction as whisper_decoder_implOutput
+*/
+- (nullable whisper_decoder_implOutput *)predictionFromFeatures:(whisper_decoder_implInput *)input error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Make a prediction using the standard interface
+    @param input an instance of whisper_decoder_implInput to predict from
+    @param options prediction options
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+    @return the prediction as whisper_decoder_implOutput
+*/
+- (nullable whisper_decoder_implOutput *)predictionFromFeatures:(whisper_decoder_implInput *)input options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Make a prediction using the convenience interface
+    @param token_data as 1 by 1 matrix of 32-bit integers:
+    @param audio_data as 1 × 384 × 1 × 1500 4-dimensional array of floats:
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+    @return the prediction as whisper_decoder_implOutput
+*/
+- (nullable whisper_decoder_implOutput *)predictionFromToken_data:(MLMultiArray *)token_data audio_data:(MLMultiArray *)audio_data error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Batch prediction
+    @param inputArray array of whisper_decoder_implInput instances to obtain predictions from
+    @param options prediction options
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+    @return the predictions as NSArray<whisper_decoder_implOutput *>
+*/
+- (nullable NSArray<whisper_decoder_implOutput *> *)predictionsFromInputs:(NSArray<whisper_decoder_implInput*> *)inputArray options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/src/coreml/whisper-decoder-impl.m b/src/coreml/whisper-decoder-impl.m
new file mode 100644 (file)
index 0000000..34060e4
--- /dev/null
@@ -0,0 +1,201 @@
+//
+// whisper-decoder-impl.m
+//
+// This file was automatically generated and should not be edited.
+//
+
+#if !__has_feature(objc_arc)
+#error This file must be compiled with automatic reference counting enabled (-fobjc-arc)
+#endif
+
+#import "whisper-decoder-impl.h"
+
+@implementation whisper_decoder_implInput
+
+- (instancetype)initWithToken_data:(MLMultiArray *)token_data audio_data:(MLMultiArray *)audio_data {
+    self = [super init];
+    if (self) {
+        _token_data = token_data;
+        _audio_data = audio_data;
+    }
+    return self;
+}
+
+- (NSSet<NSString *> *)featureNames {
+    return [NSSet setWithArray:@[@"token_data", @"audio_data"]];
+}
+
+- (nullable MLFeatureValue *)featureValueForName:(NSString *)featureName {
+    if ([featureName isEqualToString:@"token_data"]) {
+        return [MLFeatureValue featureValueWithMultiArray:self.token_data];
+    }
+    if ([featureName isEqualToString:@"audio_data"]) {
+        return [MLFeatureValue featureValueWithMultiArray:self.audio_data];
+    }
+    return nil;
+}
+
+@end
+
+@implementation whisper_decoder_implOutput
+
+- (instancetype)initWithVar_1346:(MLMultiArray *)var_1346 {
+    self = [super init];
+    if (self) {
+        _var_1346 = var_1346;
+    }
+    return self;
+}
+
+- (NSSet<NSString *> *)featureNames {
+    return [NSSet setWithArray:@[@"var_1346"]];
+}
+
+- (nullable MLFeatureValue *)featureValueForName:(NSString *)featureName {
+    if ([featureName isEqualToString:@"var_1346"]) {
+        return [MLFeatureValue featureValueWithMultiArray:self.var_1346];
+    }
+    return nil;
+}
+
+@end
+
+@implementation whisper_decoder_impl
+
+
+/**
+    URL of the underlying .mlmodelc directory.
+*/
++ (nullable NSURL *)URLOfModelInThisBundle {
+    NSString *assetPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"whisper_decoder_impl" ofType:@"mlmodelc"];
+    if (nil == assetPath) { os_log_error(OS_LOG_DEFAULT, "Could not load whisper-decoder-impl.mlmodelc in the bundle resource"); return nil; }
+    return [NSURL fileURLWithPath:assetPath];
+}
+
+
+/**
+    Initialize whisper_decoder_impl instance from an existing MLModel object.
+
+    Usually the application does not use this initializer unless it makes a subclass of whisper_decoder_impl.
+    Such application may want to use `-[MLModel initWithContentsOfURL:configuration:error:]` and `+URLOfModelInThisBundle` to create a MLModel object to pass-in.
+*/
+- (instancetype)initWithMLModel:(MLModel *)model {
+    self = [super init];
+    if (!self) { return nil; }
+    _model = model;
+    if (_model == nil) { return nil; }
+    return self;
+}
+
+
+/**
+    Initialize whisper_decoder_impl instance with the model in this bundle.
+*/
+- (nullable instancetype)init {
+    return [self initWithContentsOfURL:(NSURL * _Nonnull)self.class.URLOfModelInThisBundle error:nil];
+}
+
+
+/**
+    Initialize whisper_decoder_impl instance with the model in this bundle.
+
+    @param configuration The model configuration object
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithConfiguration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    return [self initWithContentsOfURL:(NSURL * _Nonnull)self.class.URLOfModelInThisBundle configuration:configuration error:error];
+}
+
+
+/**
+    Initialize whisper_decoder_impl instance from the model URL.
+
+    @param modelURL URL to the .mlmodelc directory for whisper_decoder_impl.
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    MLModel *model = [MLModel modelWithContentsOfURL:modelURL error:error];
+    if (model == nil) { return nil; }
+    return [self initWithMLModel:model];
+}
+
+
+/**
+    Initialize whisper_decoder_impl instance from the model URL.
+
+    @param modelURL URL to the .mlmodelc directory for whisper_decoder_impl.
+    @param configuration The model configuration object
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    MLModel *model = [MLModel modelWithContentsOfURL:modelURL configuration:configuration error:error];
+    if (model == nil) { return nil; }
+    return [self initWithMLModel:model];
+}
+
+
+/**
+    Construct whisper_decoder_impl instance asynchronously with configuration.
+    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
+
+    @param configuration The model configuration
+    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_decoder_impl instance or NSError object.
+*/
++ (void)loadWithConfiguration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_decoder_impl * _Nullable model, NSError * _Nullable error))handler {
+    [self loadContentsOfURL:(NSURL * _Nonnull)[self URLOfModelInThisBundle]
+              configuration:configuration
+          completionHandler:handler];
+}
+
+
+/**
+    Construct whisper_decoder_impl instance asynchronously with URL of .mlmodelc directory and optional configuration.
+
+    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
+
+    @param modelURL The model URL.
+    @param configuration The model configuration
+    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_decoder_impl instance or NSError object.
+*/
++ (void)loadContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_decoder_impl * _Nullable model, NSError * _Nullable error))handler {
+    [MLModel loadContentsOfURL:modelURL
+                 configuration:configuration
+             completionHandler:^(MLModel *model, NSError *error) {
+        if (model != nil) {
+            whisper_decoder_impl *typedModel = [[whisper_decoder_impl alloc] initWithMLModel:model];
+            handler(typedModel, nil);
+        } else {
+            handler(nil, error);
+        }
+    }];
+}
+
+- (nullable whisper_decoder_implOutput *)predictionFromFeatures:(whisper_decoder_implInput *)input error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    return [self predictionFromFeatures:input options:[[MLPredictionOptions alloc] init] error:error];
+}
+
+- (nullable whisper_decoder_implOutput *)predictionFromFeatures:(whisper_decoder_implInput *)input options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    id<MLFeatureProvider> outFeatures = [self.model predictionFromFeatures:input options:options error:error];
+    if (!outFeatures) { return nil; }
+    return [[whisper_decoder_implOutput alloc] initWithVar_1346:(MLMultiArray *)[outFeatures featureValueForName:@"var_1346"].multiArrayValue];
+}
+
+- (nullable whisper_decoder_implOutput *)predictionFromToken_data:(MLMultiArray *)token_data audio_data:(MLMultiArray *)audio_data error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    whisper_decoder_implInput *input_ = [[whisper_decoder_implInput alloc] initWithToken_data:token_data audio_data:audio_data];
+    return [self predictionFromFeatures:input_ error:error];
+}
+
+- (nullable NSArray<whisper_decoder_implOutput *> *)predictionsFromInputs:(NSArray<whisper_decoder_implInput*> *)inputArray options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    id<MLBatchProvider> inBatch = [[MLArrayBatchProvider alloc] initWithFeatureProviderArray:inputArray];
+    id<MLBatchProvider> outBatch = [self.model predictionsFromBatch:inBatch options:options error:error];
+    if (!outBatch) { return nil; }
+    NSMutableArray<whisper_decoder_implOutput*> *results = [NSMutableArray arrayWithCapacity:(NSUInteger)outBatch.count];
+    for (NSInteger i = 0; i < outBatch.count; i++) {
+        id<MLFeatureProvider> resultProvider = [outBatch featuresAtIndex:i];
+        whisper_decoder_implOutput * result = [[whisper_decoder_implOutput alloc] initWithVar_1346:(MLMultiArray *)[resultProvider featureValueForName:@"var_1346"].multiArrayValue];
+        [results addObject:result];
+    }
+    return results;
+}
+
+@end
diff --git a/src/coreml/whisper-encoder-impl.h b/src/coreml/whisper-encoder-impl.h
new file mode 100644 (file)
index 0000000..7b83cd9
--- /dev/null
@@ -0,0 +1,142 @@
+//
+// whisper-encoder-impl.h
+//
+// This file was automatically generated and should not be edited.
+//
+
+#import <Foundation/Foundation.h>
+#import <CoreML/CoreML.h>
+#include <stdint.h>
+#include <os/log.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+/// Model Prediction Input Type
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
+@interface whisper_encoder_implInput : NSObject<MLFeatureProvider>
+
+/// logmel_data as 1 × 80 × 3000 3-dimensional array of floats
+@property (readwrite, nonatomic, strong) MLMultiArray * logmel_data;
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithLogmel_data:(MLMultiArray *)logmel_data NS_DESIGNATED_INITIALIZER;
+
+@end
+
+
+/// Model Prediction Output Type
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
+@interface whisper_encoder_implOutput : NSObject<MLFeatureProvider>
+
+/// output as multidimensional array of floats
+@property (readwrite, nonatomic, strong) MLMultiArray * output;
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithOutput:(MLMultiArray *)output NS_DESIGNATED_INITIALIZER;
+
+@end
+
+
+/// Class for model loading and prediction
+API_AVAILABLE(macos(12.0), ios(15.0), watchos(8.0), tvos(15.0)) __attribute__((visibility("hidden")))
+@interface whisper_encoder_impl : NSObject
+@property (readonly, nonatomic, nullable) MLModel * model;
+
+/**
+    URL of the underlying .mlmodelc directory.
+*/
++ (nullable NSURL *)URLOfModelInThisBundle;
+
+/**
+    Initialize whisper_encoder_impl instance from an existing MLModel object.
+
+    Usually the application does not use this initializer unless it makes a subclass of whisper_encoder_impl.
+    Such application may want to use `-[MLModel initWithContentsOfURL:configuration:error:]` and `+URLOfModelInThisBundle` to create a MLModel object to pass-in.
+*/
+- (instancetype)initWithMLModel:(MLModel *)model NS_DESIGNATED_INITIALIZER;
+
+/**
+    Initialize whisper_encoder_impl instance with the model in this bundle.
+*/
+- (nullable instancetype)init;
+
+/**
+    Initialize whisper_encoder_impl instance with the model in this bundle.
+
+    @param configuration The model configuration object
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithConfiguration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Initialize whisper_encoder_impl instance from the model URL.
+
+    @param modelURL URL to the .mlmodelc directory for whisper_encoder_impl.
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Initialize whisper_encoder_impl instance from the model URL.
+
+    @param modelURL URL to the .mlmodelc directory for whisper_encoder_impl.
+    @param configuration The model configuration object
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Construct whisper_encoder_impl instance asynchronously with configuration.
+    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
+
+    @param configuration The model configuration
+    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_encoder_impl instance or NSError object.
+*/
++ (void)loadWithConfiguration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_encoder_impl * _Nullable model, NSError * _Nullable error))handler;
+
+/**
+    Construct whisper_encoder_impl instance asynchronously with URL of .mlmodelc directory and optional configuration.
+
+    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
+
+    @param modelURL The model URL.
+    @param configuration The model configuration
+    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_encoder_impl instance or NSError object.
+*/
++ (void)loadContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_encoder_impl * _Nullable model, NSError * _Nullable error))handler;
+
+/**
+    Make a prediction using the standard interface
+    @param input an instance of whisper_encoder_implInput to predict from
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+    @return the prediction as whisper_encoder_implOutput
+*/
+- (nullable whisper_encoder_implOutput *)predictionFromFeatures:(whisper_encoder_implInput *)input error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Make a prediction using the standard interface
+    @param input an instance of whisper_encoder_implInput to predict from
+    @param options prediction options
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+    @return the prediction as whisper_encoder_implOutput
+*/
+- (nullable whisper_encoder_implOutput *)predictionFromFeatures:(whisper_encoder_implInput *)input options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Make a prediction using the convenience interface
+    @param logmel_data as 1 × n_mel × 3000 3-dimensional array of floats:
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+    @return the prediction as whisper_encoder_implOutput
+*/
+- (nullable whisper_encoder_implOutput *)predictionFromLogmel_data:(MLMultiArray *)logmel_data error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+
+/**
+    Batch prediction
+    @param inputArray array of whisper_encoder_implInput instances to obtain predictions from
+    @param options prediction options
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+    @return the predictions as NSArray<whisper_encoder_implOutput *>
+*/
+- (nullable NSArray<whisper_encoder_implOutput *> *)predictionsFromInputs:(NSArray<whisper_encoder_implInput*> *)inputArray options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/src/coreml/whisper-encoder-impl.m b/src/coreml/whisper-encoder-impl.m
new file mode 100644 (file)
index 0000000..ee8e506
--- /dev/null
@@ -0,0 +1,197 @@
+//
+// whisper-encoder-impl.m
+//
+// This file was automatically generated and should not be edited.
+//
+
+#if !__has_feature(objc_arc)
+#error This file must be compiled with automatic reference counting enabled (-fobjc-arc)
+#endif
+
+#import "whisper-encoder-impl.h"
+
+@implementation whisper_encoder_implInput
+
+- (instancetype)initWithLogmel_data:(MLMultiArray *)logmel_data {
+    self = [super init];
+    if (self) {
+        _logmel_data = logmel_data;
+    }
+    return self;
+}
+
+- (NSSet<NSString *> *)featureNames {
+    return [NSSet setWithArray:@[@"logmel_data"]];
+}
+
+- (nullable MLFeatureValue *)featureValueForName:(NSString *)featureName {
+    if ([featureName isEqualToString:@"logmel_data"]) {
+        return [MLFeatureValue featureValueWithMultiArray:self.logmel_data];
+    }
+    return nil;
+}
+
+@end
+
+@implementation whisper_encoder_implOutput
+
+- (instancetype)initWithOutput:(MLMultiArray *)output {
+    self = [super init];
+    if (self) {
+        _output = output;
+    }
+    return self;
+}
+
+- (NSSet<NSString *> *)featureNames {
+    return [NSSet setWithArray:@[@"output"]];
+}
+
+- (nullable MLFeatureValue *)featureValueForName:(NSString *)featureName {
+    if ([featureName isEqualToString:@"output"]) {
+        return [MLFeatureValue featureValueWithMultiArray:self.output];
+    }
+    return nil;
+}
+
+@end
+
+@implementation whisper_encoder_impl
+
+
+/**
+    URL of the underlying .mlmodelc directory.
+*/
++ (nullable NSURL *)URLOfModelInThisBundle {
+    NSString *assetPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"whisper_encoder_impl" ofType:@"mlmodelc"];
+    if (nil == assetPath) { os_log_error(OS_LOG_DEFAULT, "Could not load whisper-encoder-impl.mlmodelc in the bundle resource"); return nil; }
+    return [NSURL fileURLWithPath:assetPath];
+}
+
+
+/**
+    Initialize whisper_encoder_impl instance from an existing MLModel object.
+
+    Usually the application does not use this initializer unless it makes a subclass of whisper_encoder_impl.
+    Such application may want to use `-[MLModel initWithContentsOfURL:configuration:error:]` and `+URLOfModelInThisBundle` to create a MLModel object to pass-in.
+*/
+- (instancetype)initWithMLModel:(MLModel *)model {
+    self = [super init];
+    if (!self) { return nil; }
+    _model = model;
+    if (_model == nil) { return nil; }
+    return self;
+}
+
+
+/**
+    Initialize whisper_encoder_impl instance with the model in this bundle.
+*/
+- (nullable instancetype)init {
+    return [self initWithContentsOfURL:(NSURL * _Nonnull)self.class.URLOfModelInThisBundle error:nil];
+}
+
+
+/**
+    Initialize whisper_encoder_impl instance with the model in this bundle.
+
+    @param configuration The model configuration object
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithConfiguration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    return [self initWithContentsOfURL:(NSURL * _Nonnull)self.class.URLOfModelInThisBundle configuration:configuration error:error];
+}
+
+
+/**
+    Initialize whisper_encoder_impl instance from the model URL.
+
+    @param modelURL URL to the .mlmodelc directory for whisper_encoder_impl.
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    MLModel *model = [MLModel modelWithContentsOfURL:modelURL error:error];
+    if (model == nil) { return nil; }
+    return [self initWithMLModel:model];
+}
+
+
+/**
+    Initialize whisper_encoder_impl instance from the model URL.
+
+    @param modelURL URL to the .mlmodelc directory for whisper_encoder_impl.
+    @param configuration The model configuration object
+    @param error If an error occurs, upon return contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.
+*/
+- (nullable instancetype)initWithContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    MLModel *model = [MLModel modelWithContentsOfURL:modelURL configuration:configuration error:error];
+    if (model == nil) { return nil; }
+    return [self initWithMLModel:model];
+}
+
+
+/**
+    Construct whisper_encoder_impl instance asynchronously with configuration.
+    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
+
+    @param configuration The model configuration
+    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_encoder_impl instance or NSError object.
+*/
++ (void)loadWithConfiguration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_encoder_impl * _Nullable model, NSError * _Nullable error))handler {
+    [self loadContentsOfURL:(NSURL * _Nonnull)[self URLOfModelInThisBundle]
+              configuration:configuration
+          completionHandler:handler];
+}
+
+
+/**
+    Construct whisper_encoder_impl instance asynchronously with URL of .mlmodelc directory and optional configuration.
+
+    Model loading may take time when the model content is not immediately available (e.g. encrypted model). Use this factory method especially when the caller is on the main thread.
+
+    @param modelURL The model URL.
+    @param configuration The model configuration
+    @param handler When the model load completes successfully or unsuccessfully, the completion handler is invoked with a valid whisper_encoder_impl instance or NSError object.
+*/
++ (void)loadContentsOfURL:(NSURL *)modelURL configuration:(MLModelConfiguration *)configuration completionHandler:(void (^)(whisper_encoder_impl * _Nullable model, NSError * _Nullable error))handler {
+    [MLModel loadContentsOfURL:modelURL
+                 configuration:configuration
+             completionHandler:^(MLModel *model, NSError *error) {
+        if (model != nil) {
+            whisper_encoder_impl *typedModel = [[whisper_encoder_impl alloc] initWithMLModel:model];
+            handler(typedModel, nil);
+        } else {
+            handler(nil, error);
+        }
+    }];
+}
+
+- (nullable whisper_encoder_implOutput *)predictionFromFeatures:(whisper_encoder_implInput *)input error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    return [self predictionFromFeatures:input options:[[MLPredictionOptions alloc] init] error:error];
+}
+
+- (nullable whisper_encoder_implOutput *)predictionFromFeatures:(whisper_encoder_implInput *)input options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    id<MLFeatureProvider> outFeatures = [self.model predictionFromFeatures:input options:options error:error];
+    if (!outFeatures) { return nil; }
+    return [[whisper_encoder_implOutput alloc] initWithOutput:(MLMultiArray *)[outFeatures featureValueForName:@"output"].multiArrayValue];
+}
+
+- (nullable whisper_encoder_implOutput *)predictionFromLogmel_data:(MLMultiArray *)logmel_data error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    whisper_encoder_implInput *input_ = [[whisper_encoder_implInput alloc] initWithLogmel_data:logmel_data];
+    return [self predictionFromFeatures:input_ error:error];
+}
+
+- (nullable NSArray<whisper_encoder_implOutput *> *)predictionsFromInputs:(NSArray<whisper_encoder_implInput*> *)inputArray options:(MLPredictionOptions *)options error:(NSError * _Nullable __autoreleasing * _Nullable)error {
+    id<MLBatchProvider> inBatch = [[MLArrayBatchProvider alloc] initWithFeatureProviderArray:inputArray];
+    id<MLBatchProvider> outBatch = [self.model predictionsFromBatch:inBatch options:options error:error];
+    if (!outBatch) { return nil; }
+    NSMutableArray<whisper_encoder_implOutput*> *results = [NSMutableArray arrayWithCapacity:(NSUInteger)outBatch.count];
+    for (NSInteger i = 0; i < outBatch.count; i++) {
+        id<MLFeatureProvider> resultProvider = [outBatch featuresAtIndex:i];
+        whisper_encoder_implOutput * result = [[whisper_encoder_implOutput alloc] initWithOutput:(MLMultiArray *)[resultProvider featureValueForName:@"output"].multiArrayValue];
+        [results addObject:result];
+    }
+    return results;
+}
+
+@end
diff --git a/src/coreml/whisper-encoder.h b/src/coreml/whisper-encoder.h
new file mode 100644 (file)
index 0000000..508df7c
--- /dev/null
@@ -0,0 +1,26 @@
+// Wrapper of the Core ML Whisper Encoder model
+//
+// Code is derived from the work of Github user @wangchou
+// ref: https://github.com/wangchou/callCoreMLFromCpp
+
+#include <stdint.h>
+
+#if __cplusplus
+extern "C" {
+#endif
+
+struct whisper_coreml_context;
+
+struct whisper_coreml_context * whisper_coreml_init(const char * path_model);
+void whisper_coreml_free(struct whisper_coreml_context * ctx);
+
+void whisper_coreml_encode(
+        const whisper_coreml_context * ctx,
+                             int64_t   n_ctx,
+                             int64_t   n_mel,
+                               float * mel,
+                               float * out);
+
+#if __cplusplus
+}
+#endif
diff --git a/src/coreml/whisper-encoder.mm b/src/coreml/whisper-encoder.mm
new file mode 100644 (file)
index 0000000..81a5a6a
--- /dev/null
@@ -0,0 +1,73 @@
+#if !__has_feature(objc_arc)
+#error This file must be compiled with automatic reference counting enabled (-fobjc-arc)
+#endif
+
+#import "whisper-encoder.h"
+#import "whisper-encoder-impl.h"
+
+#import <CoreML/CoreML.h>
+
+#include <stdlib.h>
+
+#if __cplusplus
+extern "C" {
+#endif
+
+struct whisper_coreml_context {
+    const void * data;
+};
+
+struct whisper_coreml_context * whisper_coreml_init(const char * path_model) {
+    NSString * path_model_str = [[NSString alloc] initWithUTF8String:path_model];
+
+    NSURL * url_model = [NSURL fileURLWithPath: path_model_str];
+
+    // select which device to run the Core ML model on
+    MLModelConfiguration *config = [[MLModelConfiguration alloc] init];
+    // config.computeUnits = MLComputeUnitsCPUAndGPU;
+    //config.computeUnits = MLComputeUnitsCPUAndNeuralEngine;
+    config.computeUnits = MLComputeUnitsAll;
+
+    const void * data = CFBridgingRetain([[whisper_encoder_impl alloc] initWithContentsOfURL:url_model configuration:config error:nil]);
+
+    if (data == NULL) {
+        return NULL;
+    }
+
+    whisper_coreml_context * ctx = new whisper_coreml_context;
+
+    ctx->data = data;
+
+    return ctx;
+}
+
+void whisper_coreml_free(struct whisper_coreml_context * ctx) {
+    CFRelease(ctx->data);
+    delete ctx;
+}
+
+void whisper_coreml_encode(
+        const whisper_coreml_context * ctx,
+                             int64_t   n_ctx,
+                             int64_t   n_mel,
+                               float * mel,
+                               float * out) {
+    MLMultiArray * inMultiArray = [
+        [MLMultiArray alloc] initWithDataPointer: mel
+                                           shape: @[@1, @(n_mel), @(n_ctx)]
+                                        dataType: MLMultiArrayDataTypeFloat32
+                                         strides: @[@(n_ctx*n_mel), @(n_ctx), @1]
+                                     deallocator: nil
+                                           error: nil
+    ];
+
+    @autoreleasepool {
+        whisper_encoder_implOutput * outCoreML = [(__bridge id) ctx->data predictionFromLogmel_data:inMultiArray error:nil];
+
+        memcpy(out, outCoreML.output.dataPointer, outCoreML.output.count * sizeof(float));
+    }
+}
+
+#if __cplusplus
+}
+#endif
diff --git a/src/openvino/whisper-openvino-encoder.cpp b/src/openvino/whisper-openvino-encoder.cpp
new file mode 100644 (file)
index 0000000..4d9ce12
--- /dev/null
@@ -0,0 +1,108 @@
+#include "openvino/whisper-openvino-encoder.h"
+#include "ggml.h"
+#include <openvino/openvino.hpp>
+#include <iostream>
+
+struct whisper_openvino_context {
+    ov::InferRequest inferRequest;
+};
+
+struct whisper_openvino_context * whisper_openvino_init(const char* path_model,
+    const char* device,
+    const char* cache_dir)
+{
+    if (!path_model || !device) {
+        fprintf(stderr, "%s: path_model and/or device is null\n", __func__);
+        return nullptr;
+    }
+
+    fprintf(stderr, "%s: path_model = %s, device = %s, cache_dir = %s\n",
+        __func__, path_model, device, cache_dir ? cache_dir : "(not set)");
+
+       whisper_openvino_context *context = new whisper_openvino_context;
+    try {
+        ov::Core core;
+
+        if (cache_dir) {
+            // enables caching of device-specific 'blobs' during core.compile_model
+            // routine. This speeds up calls to compile_model for successive runs.
+            core.set_property(ov::cache_dir(cache_dir));
+        }
+
+        //Read the OpenVINO encoder IR (.xml/.bin) from disk, producing an ov::Model object.
+        std::shared_ptr<ov::Model> model = core.read_model(path_model);
+
+        // Produce a compiled-model object, given the device ("CPU", "GPU", etc.)
+        auto compiledModel = core.compile_model(model, device);
+
+        // From the compiled model object, create an infer request. This is the thing that we
+        //  we will use later on to trigger inference execution.
+        context->inferRequest = compiledModel.create_infer_request();
+    }
+    catch (const std::exception& error) {
+        std::cout << "in openvino encoder compile routine: exception: " << error.what() << std::endl;
+        delete context;
+        context = nullptr;
+    }
+
+    return context;
+}
+
+void whisper_openvino_free(struct whisper_openvino_context * ctx) {
+    if( ctx ) {
+        delete ctx;
+    }
+}
+
+int whisper_openvino_encode(
+    whisper_openvino_context* ctx,
+    ggml_tensor* mel,
+    ggml_tensor* out) {
+
+    if (!ctx || !mel || !out) {
+        fprintf(stderr, "%s: Error! ctx / mel / out is null\n", __func__);
+        return 0;
+    }
+
+    if (ggml_n_dims(mel) != 2) {
+        fprintf(stderr, "%s: Error! mel ggml_tensor expected to have n_dims=2, but it has n_dims=%d\n",
+            __func__, ggml_n_dims(mel));
+        return 0;
+    }
+
+    if (ggml_n_dims(out) != 2) {
+        fprintf(stderr, "%s: Error! out ggml_tensor expected to have n_dims=2, but it has n_dims=%d\n",
+            __func__, ggml_n_dims(out));
+        return 0;
+    }
+
+    try {
+
+        //wrap the passed-in mel ggml_tensor as an OpenVINO Tensor object, and set as input tensor to infer request
+        {
+            // note, we populate shape & stride dimensions in opposite order from how they are listed in ne / nb arrays
+            ov::Shape input_shape = { 1, (unsigned long long)mel->ne[1], (unsigned long long)mel->ne[0] };
+            ov::Strides input_strides = { mel->nb[2], mel->nb[1], mel->nb[0] };
+            ov::Tensor input_tensor(ov::element::f32, input_shape, mel->data, input_strides);
+            ctx->inferRequest.set_input_tensor(input_tensor);
+        }
+
+        //wrap the passed-in out ggml_tensor as an OpenVINO Tensor object, and set as output tensor to infer request
+        {
+            // note, we populate shape & stride dimensions in opposite order from how they are listed in ne / nb arrays
+            ov::Shape output_shape = { 1, (unsigned long long)out->ne[1], (unsigned long long)out->ne[0] };
+            ov::Strides output_strides = { out->nb[2], out->nb[1], out->nb[0] };
+            ov::Tensor out_tensor(ov::element::f32, output_shape, out->data, output_strides);
+            ctx->inferRequest.set_output_tensor(out_tensor);
+        }
+
+        //run inference
+        ctx->inferRequest.infer();
+    }
+    catch (const std::exception& error) {
+        std::cout << "in openvino encode inference execution routine: exception: " << error.what() << std::endl;
+        return 0;
+    }
+
+    return 1;
+}
diff --git a/src/openvino/whisper-openvino-encoder.h b/src/openvino/whisper-openvino-encoder.h
new file mode 100644 (file)
index 0000000..7c2f6df
--- /dev/null
@@ -0,0 +1,31 @@
+// Wrapper of the OpenVINO Whisper Encoder model
+//
+
+#if __cplusplus
+extern "C" {
+#endif
+
+struct whisper_openvino_context;
+
+// initialize openvino encoder, given path to model xml, device ("CPU", "GPU", etc.), and
+// path to cache_dir. Returns null upon failure.
+struct whisper_openvino_context * whisper_openvino_init(const char * path_model,
+                                                        const char * device,
+                                                        const char * cache_dir);
+
+// clean up a ctx previously returned from whisper_openvino_init()
+void whisper_openvino_free(struct whisper_openvino_context * ctx);
+
+struct ggml_tensor;
+
+// Perform encode using OpenVINO.
+// Returns 1 on success
+// Returns 0 on failure
+int whisper_openvino_encode(
+    whisper_openvino_context* ctx,
+    ggml_tensor* mel,
+    ggml_tensor* out);
+
+#if __cplusplus
+}
+#endif
diff --git a/src/whisper-mel-cuda.cu b/src/whisper-mel-cuda.cu
new file mode 100644 (file)
index 0000000..40d9f99
--- /dev/null
@@ -0,0 +1,364 @@
+#define CUB_IGNORE_DEPRECATED_CPP_DIALECT
+#include "whisper-mel-cuda.hpp"
+#include "whisper.h"
+
+#include <ggml-cuda/common.cuh>
+#include <ggml-backend-impl.h>
+
+#include <cuda.h>
+#include <cuda_runtime.h>
+#include <cufft.h>
+#include <cublas_v2.h>
+#include <cuComplex.h>
+#include <cub/device/device_reduce.cuh>
+#include <device_launch_parameters.h>
+
+#include <algorithm>
+
+#if defined(_MSC_VER)
+#pragma warning(disable: 4324) // added padding
+#endif
+
+namespace {
+
+static const char* cufftGetErrorString(cufftResult_t res) {
+    switch (res) {
+    case CUFFT_SUCCESS: return "The cuFFT operation was successful";
+    case CUFFT_INVALID_PLAN: return "cuFFT was passed an invalid plan handle";
+    case CUFFT_ALLOC_FAILED: return "cuFFT failed to allocate GPU or CPU memory";
+    case CUFFT_INVALID_TYPE: return "No longer used";
+    case CUFFT_INVALID_VALUE: return "User specified an invalid pointer or parameter";
+    case CUFFT_INTERNAL_ERROR: return "Driver or internal cuFFT library error";
+    case CUFFT_EXEC_FAILED: return "Failed to execute an FFT on the GPU";
+    case CUFFT_SETUP_FAILED: return "The cuFFT library failed to initialize";
+    case CUFFT_INVALID_SIZE: return "User specified an invalid transform size";
+    case CUFFT_UNALIGNED_DATA: return "No longer used";
+    case CUFFT_INCOMPLETE_PARAMETER_LIST: return "Missing parameters in call";
+    case CUFFT_INVALID_DEVICE: return "Execution of a plan was on different GPU than plan creation";
+    case CUFFT_PARSE_ERROR: return "Internal plan database error";
+    case CUFFT_NO_WORKSPACE: return "No workspace has been provided prior to plan execution";
+    case CUFFT_NOT_IMPLEMENTED: return "Function does not implement functionality for parameters given.";
+    case CUFFT_LICENSE_ERROR: return "Used in previous versions.";
+    case CUFFT_NOT_SUPPORTED: return "Operation is not supported for parameters given.";
+    default: return "Unknown error";
+    }
+}
+
+#define CUFFT_CHECK(err) CUDA_CHECK_GEN(err, CUFFT_SUCCESS, cufftGetErrorString)
+
+__global__ void k_fill_stft_input(
+    const float * padded_samples,
+    const int n_frames,
+    const float * hann_window,
+    float * stft_in
+) {
+    auto y = blockIdx.y * blockDim.y + threadIdx.y;
+    // if (y >= n_frames) return;
+    auto x = blockIdx.x * blockDim.x + threadIdx.x;
+    // if (x >= WHISPER_N_FFT) return;
+
+    auto line = padded_samples + y * WHISPER_HOP_LENGTH;
+    auto outLine = stft_in + y * WHISPER_N_FFT;
+
+    outLine[x] = line[x] * hann_window[x];
+}
+
+__global__ void k_calc_magnitudes(
+    const cuComplex * stft_out,
+    const int n_frames,
+    float * magnitudes
+) {
+    auto y = blockIdx.y * blockDim.y + threadIdx.y;
+    // if (y >= n_frames) return;
+    auto x = blockIdx.x * blockDim.x + threadIdx.x;
+    // if (x >= WHISPER_N_FFT_HALF) return;
+
+    auto idx = y * WHISPER_N_FFT_HALF + x;
+
+    auto r = stft_out[idx].x;
+    auto i = stft_out[idx].y;
+    magnitudes[idx] = r * r + i * i;
+}
+
+__global__ void k_calc_log_mel(
+    const float * mel_data,
+    const int n_mel,
+    const float * max_val,
+    float * log_mel
+) {
+    auto x = blockIdx.x * blockDim.x + threadIdx.x;
+    if (x >= n_mel) return;
+
+    float val = mel_data[x];
+
+    constexpr float e = 1e-10f;
+    if (val < e) val = e;
+
+    val = log10(val);
+
+    const float max = log10(*max_val) - 8.f;
+    if (val < max) val = max;
+
+    log_mel[x] = (val + 4) / 4;
+}
+
+static void fill_stft_input(
+    const float * padded_samples,
+    int n_frames,
+    const float * hann_window,
+    float * stft_in,
+    cudaStream_t stream
+) {
+    dim3 block(WHISPER_N_FFT, 1);
+    dim3 grid(1, n_frames);
+
+    k_fill_stft_input<<<grid, block, 0, stream>>>(padded_samples, n_frames, hann_window, stft_in);
+}
+
+static void calc_magnitudes(
+    const cuComplex * stft_out,
+    int n_frames,
+    float * magnitudes,
+    cudaStream_t stream
+) {
+    dim3 block(WHISPER_N_FFT_HALF, 1);
+    dim3 grid(1, n_frames);
+    k_calc_magnitudes<<<grid, block, 0, stream>>>(stft_out, n_frames, magnitudes);
+}
+
+constexpr auto LOG_MEL_PREFIX_SIZE = 256;
+
+static void calc_log_mel(
+    const float * mel_data,
+    int n_mel,
+    void * tempStorage,
+    int tempStorageSize,
+    float * log_mel,
+    cudaStream_t stream
+) {
+    float * max_val = reinterpret_cast<float *>(tempStorage);
+    void * maxTemp = reinterpret_cast<char*>(tempStorage) + LOG_MEL_PREFIX_SIZE;
+
+    size_t nbytes = size_t(tempStorageSize - LOG_MEL_PREFIX_SIZE);
+    cub::DeviceReduce::Max(maxTemp, nbytes, mel_data, max_val, n_mel, stream);
+
+    int block = 256;
+    int grid = (n_mel + block - 1) / block;
+
+    k_calc_log_mel<<<grid, block, 0, stream>>>(mel_data, n_mel, max_val, log_mel);
+}
+
+class mel_calc_cuda : public whisper_mel_calc {
+    const int m_n_mel;
+
+    ggml_backend_t m_backend = nullptr;
+    int m_device = -1;
+
+    cudaStream_t m_stream = nullptr;
+    cublasHandle_t m_cublas_handle = nullptr;
+
+    float * m_hann_window = nullptr;
+
+    float * m_filters = nullptr;
+
+    // max samples for which we have allocated memory for the temp working areas below (cufft, log_mel)
+    int m_n_max_samples = 0;
+
+    size_t m_cufft_workspace_size = 0;
+    void * m_cufft_workspace = nullptr;
+
+    size_t m_log_mel_temp_storage_size = 0;
+    void * m_log_mel_temp_storage = nullptr;
+public:
+    mel_calc_cuda(ggml_backend_t backend, const whisper_filters & filters)
+        : m_n_mel(filters.n_mel)
+        , m_backend(backend)
+    {
+        ggml_backend_cuda_context* cuda_ctx = (ggml_backend_cuda_context*)m_backend->context;
+        m_device = cuda_ctx->device;
+
+        if (ggml_cuda_info().devices[m_device].cc < 600) {
+            // we've only tesed on 6.0 and higher and we've had reports of crashes on 5.0:
+            // https://github.com/ggerganov/whisper.cpp/issues/2230
+            // to be safe forbid anything below 6.0
+            throw std::runtime_error("CUDA compute capability 6.0 or higher is required");
+        }
+
+        ggml_cuda_set_device(m_device);
+
+        if (filters.n_fft != WHISPER_N_FFT_HALF) {
+            throw std::invalid_argument("MelFilters n_frames must be WHISPER_N_FFT_HALF");
+        }
+        assert(filters.data.size() == filters.n_mel * WHISPER_N_FFT_HALF);
+
+        CUDA_CHECK(cudaStreamCreate(&m_stream));
+        CUBLAS_CHECK(cublasCreate(&m_cublas_handle));
+        CUBLAS_CHECK(cublasSetMathMode(m_cublas_handle, CUBLAS_TF32_TENSOR_OP_MATH));
+        CUBLAS_CHECK(cublasSetStream(m_cublas_handle, m_stream));
+
+        // create Hann window
+        {
+            auto hw = whisper_mel_calc::hann_window();
+            CUDA_CHECK(cudaMallocAsync(&m_hann_window, hw.len * sizeof(float), m_stream));
+            CUDA_CHECK(cudaMemcpyAsync(m_hann_window, hw.data, hw.len * sizeof(float), cudaMemcpyHostToDevice, m_stream));
+        }
+
+        // fill filters
+        {
+            auto& f = filters.data;
+            CUDA_CHECK(cudaMallocAsync(&m_filters, f.size() * sizeof(float), m_stream));
+            CUDA_CHECK(cudaMemcpyAsync(m_filters, f.data(), f.size() * sizeof(float), cudaMemcpyHostToDevice, m_stream));
+        }
+
+        // preallocate working areas enough for the most common cases (<= 30s)
+        ensure_working_areas(WHISPER_N_SAMPLES);
+    }
+
+    ~mel_calc_cuda() {
+        ggml_cuda_set_device(m_device);
+        CUDA_CHECK(cudaStreamSynchronize(m_stream));
+        CUDA_CHECK(cudaStreamDestroy(m_stream));
+        CUDA_CHECK(cudaFree(m_hann_window));
+        CUDA_CHECK(cudaFree(m_cufft_workspace));
+        CUDA_CHECK(cudaFree(m_filters));
+        CUDA_CHECK(cudaFree(m_log_mel_temp_storage));
+    }
+
+    void ensure_working_areas(int n_samples) {
+        if (n_samples <= m_n_max_samples) {
+            return;
+        }
+
+        const auto max_padded_samples = n_samples + WHISPER_N_SAMPLES + WHISPER_N_FFT;
+        const auto max_frames = 1 + (max_padded_samples - WHISPER_N_FFT) / WHISPER_HOP_LENGTH;
+
+        // cufft workspace
+        {
+            if (m_cufft_workspace) {
+                CUDA_CHECK(cudaFree(m_cufft_workspace));
+                m_cufft_workspace_size = 0;
+                m_cufft_workspace = nullptr;
+            }
+            CUFFT_CHECK(cufftEstimate1d(WHISPER_N_FFT, CUFFT_R2C, max_frames, &m_cufft_workspace_size));
+            CUDA_CHECK(cudaMallocAsync(&m_cufft_workspace, m_cufft_workspace_size, m_stream));
+        }
+
+        // device reduce working area
+        {
+            if (m_log_mel_temp_storage) {
+                CUDA_CHECK(cudaFree(m_log_mel_temp_storage));
+                m_log_mel_temp_storage_size = 0;
+                m_log_mel_temp_storage = nullptr;
+            }
+
+            const auto max_mels = 160;
+
+            size_t nbytes = 0;
+            float* temp = nullptr;
+            cub::DeviceReduce::Max(nullptr, nbytes, temp, temp, max_frames * max_mels);
+            m_log_mel_temp_storage_size = nbytes + LOG_MEL_PREFIX_SIZE;
+
+            CUDA_CHECK(cudaMallocAsync(&m_log_mel_temp_storage, m_log_mel_temp_storage_size, m_stream));
+        }
+
+        m_n_max_samples = n_samples;
+    }
+
+    virtual whisper_mel calculate(whisper_span<const float> samples, int /*n_threads*/) override {
+        ggml_cuda_set_device(m_device);
+        ensure_working_areas(samples.len);
+
+        const size_t mirror_pad = WHISPER_N_FFT / 2;
+        const size_t padded_size = samples.len + WHISPER_N_SAMPLES + WHISPER_N_FFT;
+
+        // pad
+        std::vector<float> padded_samples(padded_size);
+        std::reverse_copy(samples.data + 1, samples.data + 1 + mirror_pad, padded_samples.begin()); // reflect
+        std::copy(samples.data, samples.data + samples.len, padded_samples.begin() + mirror_pad); // copy
+
+        // fill the rest of the data
+        // it should canonically be mirrored at the end as well,
+        // but we just assume the last MEL_FRAME_SIZE/2 samples are zeros
+        std::fill(padded_samples.begin() + mirror_pad + samples.len, padded_samples.end(), 0.f);
+
+        const auto n_frames = 1 + (padded_samples.size() - WHISPER_N_FFT) / WHISPER_HOP_LENGTH;
+
+        float * cu_padded_samples = nullptr;
+        CUDA_CHECK(cudaMallocAsync(&cu_padded_samples, padded_samples.size() * sizeof(float), m_stream));
+        CUDA_CHECK(cudaMemcpyAsync(cu_padded_samples, padded_samples.data(), padded_samples.size() * sizeof(float), cudaMemcpyHostToDevice, m_stream));
+
+        float * stft_in = nullptr; // contiguous buffer for stft input
+        CUDA_CHECK(cudaMallocAsync(&stft_in, n_frames * WHISPER_N_FFT * sizeof(float), m_stream));
+
+        fill_stft_input(cu_padded_samples, int(n_frames), m_hann_window, stft_in, m_stream);
+
+        cufftComplex* stft_out;
+        CUDA_CHECK(cudaMallocAsync(&stft_out, n_frames * WHISPER_N_FFT_HALF * sizeof(cufftComplex), m_stream));
+
+        cufftHandle plan;
+        CUFFT_CHECK(cufftCreate(&plan));
+        CUFFT_CHECK(cufftSetAutoAllocation(plan, 0));
+        {
+            size_t waSize;
+            CUFFT_CHECK(cufftMakePlan1d(plan, WHISPER_N_FFT, CUFFT_R2C, int(n_frames), &waSize));
+            assert(waSize <= m_cufft_workspace_size);
+            CUFFT_CHECK(cufftSetWorkArea(plan, m_cufft_workspace));
+            CUFFT_CHECK(cufftSetStream(plan, m_stream));
+        }
+        CUFFT_CHECK(cufftExecR2C(plan, stft_in, stft_out));
+
+        const auto n_mag_frames = n_frames - 1; // drop last frame
+        float * magnitudes;
+        CUDA_CHECK(cudaMallocAsync(&magnitudes, n_mag_frames * WHISPER_N_FFT_HALF * sizeof(float), m_stream));
+        calc_magnitudes(stft_out, int(n_mag_frames), magnitudes, m_stream);
+
+        float * mel_data = nullptr;
+        CUDA_CHECK(cudaMallocAsync(&mel_data, m_n_mel * n_mag_frames * sizeof(float), m_stream));
+
+        const float fone = 1.0f, fzero = 0.0f;
+        CUBLAS_CHECK(cublasSgemm(m_cublas_handle, CUBLAS_OP_T, CUBLAS_OP_N,
+            int(n_mag_frames), m_n_mel, WHISPER_N_FFT_HALF,
+            &fone,
+            magnitudes, WHISPER_N_FFT_HALF,
+            m_filters, WHISPER_N_FFT_HALF,
+            &fzero,
+            mel_data, int(n_mag_frames)));
+
+        whisper_mel ret;
+        // Calculate semi-padded sample length to ensure compatibility
+        int n_len_org = 1 + int(samples.len + mirror_pad - WHISPER_N_FFT) / WHISPER_HOP_LENGTH;
+        whisper_mel_init(ret, m_backend, int(n_mag_frames), n_len_org, m_n_mel);
+        assert(ggml_nbytes(ret.tensor) == m_n_mel * n_mag_frames * sizeof(float));
+
+        float* log_mels = reinterpret_cast<float*>(ret.tensor->data);
+
+        calc_log_mel(
+            mel_data, int(m_n_mel * n_mag_frames),
+            m_log_mel_temp_storage , int(m_log_mel_temp_storage_size),
+            log_mels, m_stream);
+
+        CUDA_CHECK(cudaStreamSynchronize(m_stream));
+
+        // cleanup
+        CUFFT_CHECK(cufftDestroy(plan));
+        CUDA_CHECK(cudaFreeAsync(mel_data, m_stream));
+        CUDA_CHECK(cudaFreeAsync(magnitudes, m_stream));
+        CUDA_CHECK(cudaFreeAsync(stft_out, m_stream));
+        CUDA_CHECK(cudaFreeAsync(stft_in, m_stream));
+        CUDA_CHECK(cudaFreeAsync(cu_padded_samples, m_stream));
+
+        return ret;
+    }
+};
+
+}
+
+whisper_mel_calc * whisper_mel_calc_create_cuda(ggml_backend_t backend, const whisper_filters & filters) {
+    try {
+        return new mel_calc_cuda(backend, filters);
+    }
+    catch (...) {
+        // TODO: log error (but for this we would have to expose the log state to be accessible here)
+        return nullptr;
+    }
+}
diff --git a/src/whisper-mel-cuda.hpp b/src/whisper-mel-cuda.hpp
new file mode 100644 (file)
index 0000000..2acb650
--- /dev/null
@@ -0,0 +1,3 @@
+#include "whisper-mel.hpp"
+
+whisper_mel_calc * whisper_mel_calc_create_cuda(ggml_backend_t backend, const whisper_filters & filters);
diff --git a/src/whisper-mel.hpp b/src/whisper-mel.hpp
new file mode 100644 (file)
index 0000000..f4210b4
--- /dev/null
@@ -0,0 +1,34 @@
+#pragma once
+#include "ggml-backend.h"
+#include <vector>
+
+struct whisper_mel {
+    int n_len_org = 0;
+
+    ggml_context * ctx = nullptr;
+    ggml_tensor * tensor = nullptr;
+    ggml_backend_buffer_t buffer = nullptr;
+};
+
+void whisper_mel_init(whisper_mel & mel, ggml_backend_t backend, int n_len, int n_len_org, int n_mel);
+
+void whisper_mel_free(whisper_mel & mel);
+
+struct whisper_filters {
+    int32_t n_mel;
+    int32_t n_fft;
+
+    std::vector<float> data;
+};
+
+template <typename T>
+struct whisper_span {
+    T * data;
+    int len;
+};
+
+struct whisper_mel_calc {
+    virtual ~whisper_mel_calc();
+    virtual whisper_mel calculate(whisper_span<const float> samples, int n_threads) = 0;
+    static whisper_span<const float> hann_window();
+};
diff --git a/src/whisper.cpp b/src/whisper.cpp
new file mode 100644 (file)
index 0000000..c9d83b8
--- /dev/null
@@ -0,0 +1,7443 @@
+#include "whisper.h"
+
+#ifdef WHISPER_USE_COREML
+#include "coreml/whisper-encoder.h"
+#endif
+
+#ifdef GGML_USE_METAL
+#include "ggml-metal.h"
+#endif
+
+#ifdef GGML_USE_CUDA
+#include "ggml-cuda.h"
+#include "whisper-mel-cuda.hpp"
+#endif
+
+#ifdef GGML_USE_SYCL
+#include "ggml-sycl.h"
+#endif
+
+#ifdef GGML_USE_BLAS
+#include "ggml-blas.h"
+#endif
+
+#ifdef WHISPER_USE_OPENVINO
+#include "openvino/whisper-openvino-encoder.h"
+#endif
+
+#include "ggml.h"
+#include "ggml-alloc.h"
+#include "ggml-backend.h"
+
+#include "whisper-mel.hpp"
+
+#include <atomic>
+#include <algorithm>
+#include <cassert>
+#define _USE_MATH_DEFINES
+#include <cmath>
+#include <cstdio>
+#include <cstdarg>
+#include <cstring>
+#include <fstream>
+#include <map>
+#include <set>
+#include <string>
+#include <thread>
+#include <vector>
+#include <regex>
+#include <random>
+#include <functional>
+#include <codecvt>
+
+#if defined(_MSC_VER)
+#pragma warning(disable: 4244 4267) // possible loss of data
+#endif
+
+#if defined(GGML_BIG_ENDIAN)
+#include <bit>
+
+template<typename T>
+static T byteswap(T value) {
+    return std::byteswap(value);
+}
+
+template<>
+float byteswap(float value) {
+    return std::bit_cast<float>(byteswap(std::bit_cast<std::uint32_t>(value)));
+}
+
+template<typename T>
+static void byteswap_tensor_data(ggml_tensor * tensor) {
+    T * datum = reinterpret_cast<T *>(tensor->data);
+    for (int i = 0; i < ggml_nelements(tensor); i++) {
+        datum[i] = byteswap(datum[i]);
+    }
+}
+
+static void byteswap_tensor(ggml_tensor * tensor) {
+    switch (tensor->type) {
+        case GGML_TYPE_I16: {
+            byteswap_tensor_data<int16_t>(tensor);
+            break;
+        }
+        case GGML_TYPE_F16: {
+            byteswap_tensor_data<ggml_fp16_t>(tensor);
+            break;
+        }
+        case GGML_TYPE_I32: {
+            byteswap_tensor_data<int32_t>(tensor);
+            break;
+        }
+        case GGML_TYPE_F32: {
+            byteswap_tensor_data<float>(tensor);
+            break;
+        }
+        default: { // GML_TYPE_I8
+            break;
+        }
+    }
+}
+
+#define BYTESWAP_VALUE(d) d = byteswap(d)
+#define BYTESWAP_FILTERS(f)            \
+    do {                              \
+        for (auto & datum : f.data) { \
+            datum = byteswap(datum);  \
+        }                             \
+    } while (0)
+#define BYTESWAP_TENSOR(t)       \
+    do {                         \
+        byteswap_tensor(t); \
+    } while (0)
+#else
+#define BYTESWAP_VALUE(d) do {} while (0)
+#define BYTESWAP_FILTERS(f) do {} while (0)
+#define BYTESWAP_TENSOR(t) do {} while (0)
+#endif
+
+#ifdef __GNUC__
+#ifdef __MINGW32__
+#define WHISPER_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__)))
+#else
+#define WHISPER_ATTRIBUTE_FORMAT(...) __attribute__((format(printf, __VA_ARGS__)))
+#endif
+#else
+#define WHISPER_ATTRIBUTE_FORMAT(...)
+#endif
+
+//
+// logging
+//
+
+WHISPER_ATTRIBUTE_FORMAT(2, 3)
+static void whisper_log_internal        (ggml_log_level level, const char * format, ...);
+static void whisper_log_callback_default(ggml_log_level level, const char * text, void * user_data);
+
+#define WHISPER_LOG_ERROR(...) whisper_log_internal(GGML_LOG_LEVEL_ERROR, __VA_ARGS__)
+#define WHISPER_LOG_WARN(...)  whisper_log_internal(GGML_LOG_LEVEL_WARN , __VA_ARGS__)
+#define WHISPER_LOG_INFO(...)  whisper_log_internal(GGML_LOG_LEVEL_INFO , __VA_ARGS__)
+
+// define this to enable verbose trace logging - useful for debugging purposes
+//#define WHISPER_DEBUG
+
+#if defined(WHISPER_DEBUG)
+#define WHISPER_LOG_DEBUG(...) whisper_log_internal(GGML_LOG_LEVEL_DEBUG, __VA_ARGS__)
+#else
+#define WHISPER_LOG_DEBUG(...)
+#endif
+
+#define WHISPER_ASSERT(x) \
+    do { \
+        if (!(x)) { \
+            WHISPER_LOG_ERROR("WHISPER_ASSERT: %s:%d: %s\n", __FILE__, __LINE__, #x); \
+            abort(); \
+        } \
+    } while (0)
+
+//#define WHISPER_USE_FLASH_FF
+#define WHISPER_MAX_DECODERS 8
+#define WHISPER_MAX_NODES 4096
+
+//
+// ggml helpers
+//
+
+static bool ggml_graph_compute_helper(
+          struct ggml_cgraph * graph,
+        std::vector<uint8_t> & buf,
+                         int   n_threads,
+         ggml_abort_callback   abort_callback,
+                        void * abort_callback_data) {
+    struct ggml_cplan plan = ggml_graph_plan(graph, n_threads);
+
+    plan.abort_callback      = abort_callback;
+    plan.abort_callback_data = abort_callback_data;
+
+    if (plan.work_size > 0) {
+        buf.resize(plan.work_size);
+        plan.work_data = buf.data();
+    }
+
+    return ggml_graph_compute(graph, &plan);
+}
+
+static bool ggml_graph_compute_helper(
+      ggml_backend_sched_t   sched,
+        struct ggml_cgraph * graph,
+                       int   n_threads) {
+
+    for (int i = 0; i < ggml_backend_sched_get_n_backends(sched); ++i) {
+        ggml_backend_t backend = ggml_backend_sched_get_backend(sched, i);
+        if (ggml_backend_is_cpu(backend)) {
+            ggml_backend_cpu_set_n_threads(backend, n_threads);
+        }
+#ifdef GGML_USE_BLAS
+        if (ggml_backend_is_blas(backend)) {
+            ggml_backend_blas_set_n_threads(backend, n_threads);
+        }
+#endif
+#ifdef GGML_USE_METAL
+        if (ggml_backend_is_metal(backend)) {
+            ggml_backend_metal_set_n_cb(backend, n_threads);
+        }
+#endif
+    }
+
+    bool t = ggml_backend_sched_graph_compute(sched, graph) == GGML_STATUS_SUCCESS;
+    ggml_backend_sched_reset(sched);
+    return t;
+}
+
+// faster matrix multiplications for tensors that do not have dimension 0 divisible by "pad"
+// the idea is to represent the original matrix multiplication:
+//
+//   Z = X @ Y
+//
+// with the sum of two matrix multiplications:
+//
+//   Z = (X_0 @ Y_0) + (X_1 @ Y_1)
+//
+// here X_0 and Y_0 are views of X and Y that have dimension 0 divisible by "pad"
+// and X_1 and Y_1 are the remaining views. X_1 and Y_1 end up being small matrices that can be processed with more
+// general-purpose kernels
+//
+static struct ggml_tensor * ggml_mul_mat_pad(struct ggml_context * ctx, struct ggml_tensor * x, struct ggml_tensor * y, int pad = 32) {
+    // use padding only if dimension 0 is at least 8 times larger than the padding
+    // else we won't get much benefit from the optimization
+    const int n_pad_req = 8;
+
+    if (x->ne[0] % pad == 0 || x->ne[0] / pad < n_pad_req) {
+        return ggml_mul_mat(ctx, x, y);
+    }
+
+    struct ggml_tensor * x_0 = ggml_view_3d(ctx, x, (x->ne[0]/pad)*pad, x->ne[1], x->ne[2], x->nb[1], x->nb[2], 0);
+    struct ggml_tensor * x_1 = ggml_view_3d(ctx, x,  x->ne[0]%pad,      x->ne[1], x->ne[2], x->nb[1], x->nb[2], x_0->ne[0]*x_0->nb[0]);
+
+    struct ggml_tensor * y_0 = ggml_view_3d(ctx, y, (y->ne[0]/pad)*pad, y->ne[1], y->ne[2], y->nb[1], y->nb[2], 0);
+    struct ggml_tensor * y_1 = ggml_view_3d(ctx, y,  y->ne[0]%pad,      y->ne[1], y->ne[2], y->nb[1], y->nb[2], y_0->ne[0]*y_0->nb[0]);
+
+    return ggml_add(ctx,
+            ggml_mul_mat(ctx, x_0, y_0),
+            ggml_mul_mat(ctx, x_1, y_1));
+}
+
+// TODO: check if other platforms can benefit from this optimization
+// TODO: CUDA is currently broken - seems ggml_mul_mat does not handle views correctly
+#if defined(GGML_USE_METAL)
+#define ggml_mul_mat ggml_mul_mat_pad
+#endif
+
+// available whisper models
+enum e_model {
+    MODEL_UNKNOWN,
+    MODEL_TINY,
+    MODEL_BASE,
+    MODEL_SMALL,
+    MODEL_MEDIUM,
+    MODEL_LARGE,
+};
+
+static const std::map<e_model, std::string> g_model_name = {
+    { MODEL_UNKNOWN,  "unknown"  },
+    { MODEL_TINY,     "tiny"     },
+    { MODEL_BASE,     "base"     },
+    { MODEL_SMALL,    "small"    },
+    { MODEL_MEDIUM,   "medium"   },
+    { MODEL_LARGE,    "large"    },
+};
+
+static const std::map<std::string, std::pair<int, std::string>> g_lang = {
+    { "en",  { 0,  "english",         } },
+    { "zh",  { 1,  "chinese",         } },
+    { "de",  { 2,  "german",          } },
+    { "es",  { 3,  "spanish",         } },
+    { "ru",  { 4,  "russian",         } },
+    { "ko",  { 5,  "korean",          } },
+    { "fr",  { 6,  "french",          } },
+    { "ja",  { 7,  "japanese",        } },
+    { "pt",  { 8,  "portuguese",      } },
+    { "tr",  { 9,  "turkish",         } },
+    { "pl",  { 10, "polish",          } },
+    { "ca",  { 11,  "catalan",        } },
+    { "nl",  { 12,  "dutch",          } },
+    { "ar",  { 13,  "arabic",         } },
+    { "sv",  { 14,  "swedish",        } },
+    { "it",  { 15,  "italian",        } },
+    { "id",  { 16,  "indonesian",     } },
+    { "hi",  { 17,  "hindi",          } },
+    { "fi",  { 18,  "finnish",        } },
+    { "vi",  { 19,  "vietnamese",     } },
+    { "he",  { 20,  "hebrew",         } },
+    { "uk",  { 21,  "ukrainian",      } },
+    { "el",  { 22,  "greek",          } },
+    { "ms",  { 23,  "malay",          } },
+    { "cs",  { 24,  "czech",          } },
+    { "ro",  { 25,  "romanian",       } },
+    { "da",  { 26,  "danish",         } },
+    { "hu",  { 27,  "hungarian",      } },
+    { "ta",  { 28,  "tamil",          } },
+    { "no",  { 29,  "norwegian",      } },
+    { "th",  { 30,  "thai",           } },
+    { "ur",  { 31,  "urdu",           } },
+    { "hr",  { 32,  "croatian",       } },
+    { "bg",  { 33,  "bulgarian",      } },
+    { "lt",  { 34,  "lithuanian",     } },
+    { "la",  { 35,  "latin",          } },
+    { "mi",  { 36,  "maori",          } },
+    { "ml",  { 37,  "malayalam",      } },
+    { "cy",  { 38,  "welsh",          } },
+    { "sk",  { 39,  "slovak",         } },
+    { "te",  { 40,  "telugu",         } },
+    { "fa",  { 41,  "persian",        } },
+    { "lv",  { 42,  "latvian",        } },
+    { "bn",  { 43,  "bengali",        } },
+    { "sr",  { 44,  "serbian",        } },
+    { "az",  { 45,  "azerbaijani",    } },
+    { "sl",  { 46,  "slovenian",      } },
+    { "kn",  { 47,  "kannada",        } },
+    { "et",  { 48,  "estonian",       } },
+    { "mk",  { 49,  "macedonian",     } },
+    { "br",  { 50,  "breton",         } },
+    { "eu",  { 51,  "basque",         } },
+    { "is",  { 52,  "icelandic",      } },
+    { "hy",  { 53,  "armenian",       } },
+    { "ne",  { 54,  "nepali",         } },
+    { "mn",  { 55,  "mongolian",      } },
+    { "bs",  { 56,  "bosnian",        } },
+    { "kk",  { 57,  "kazakh",         } },
+    { "sq",  { 58,  "albanian",       } },
+    { "sw",  { 59,  "swahili",        } },
+    { "gl",  { 60,  "galician",       } },
+    { "mr",  { 61,  "marathi",        } },
+    { "pa",  { 62,  "punjabi",        } },
+    { "si",  { 63,  "sinhala",        } },
+    { "km",  { 64,  "khmer",          } },
+    { "sn",  { 65,  "shona",          } },
+    { "yo",  { 66,  "yoruba",         } },
+    { "so",  { 67,  "somali",         } },
+    { "af",  { 68,  "afrikaans",      } },
+    { "oc",  { 69,  "occitan",        } },
+    { "ka",  { 70,  "georgian",       } },
+    { "be",  { 71,  "belarusian",     } },
+    { "tg",  { 72,  "tajik",          } },
+    { "sd",  { 73,  "sindhi",         } },
+    { "gu",  { 74,  "gujarati",       } },
+    { "am",  { 75,  "amharic",        } },
+    { "yi",  { 76,  "yiddish",        } },
+    { "lo",  { 77,  "lao",            } },
+    { "uz",  { 78,  "uzbek",          } },
+    { "fo",  { 79,  "faroese",        } },
+    { "ht",  { 80,  "haitian creole", } },
+    { "ps",  { 81,  "pashto",         } },
+    { "tk",  { 82,  "turkmen",        } },
+    { "nn",  { 83,  "nynorsk",        } },
+    { "mt",  { 84,  "maltese",        } },
+    { "sa",  { 85,  "sanskrit",       } },
+    { "lb",  { 86,  "luxembourgish",  } },
+    { "my",  { 87,  "myanmar",        } },
+    { "bo",  { 88,  "tibetan",        } },
+    { "tl",  { 89,  "tagalog",        } },
+    { "mg",  { 90,  "malagasy",       } },
+    { "as",  { 91,  "assamese",       } },
+    { "tt",  { 92,  "tatar",          } },
+    { "haw", { 93,  "hawaiian",       } },
+    { "ln",  { 94,  "lingala",        } },
+    { "ha",  { 95,  "hausa",          } },
+    { "ba",  { 96,  "bashkir",        } },
+    { "jw",  { 97,  "javanese",       } },
+    { "su",  { 98,  "sundanese",      } },
+    { "yue", { 99,  "cantonese",      } },
+};
+
+// [EXPERIMENTAL] Token-level timestamps with DTW
+static const whisper_ahead g_aheads_tiny_en[]   = { {1, 0}, {2, 0}, {2, 5}, {3, 0}, {3, 1}, {3, 2}, {3, 3}, {3, 4} };
+static const whisper_ahead g_aheads_tiny[]      = { {2, 2}, {3, 0}, {3, 2}, {3, 3}, {3, 4}, {3, 5} };
+static const whisper_ahead g_aheads_base_en[]   = { {3, 3}, {4, 7}, {5, 1}, {5, 5}, {5, 7} };
+static const whisper_ahead g_aheads_base[]      = { {3, 1}, {4, 2}, {4, 3}, {4, 7}, {5, 1}, {5, 2}, {5, 4}, {5, 6} };
+static const whisper_ahead g_aheads_small_en[]  = { {6, 6}, {7, 0}, {7, 3}, {7, 8}, {8, 2}, {8, 5}, {8, 7}, {9, 0}, {9, 4}, {9, 8}, {9, 10}, {10, 0}, {10, 1}, {10, 2}, {10, 3}, {10, 6}, {10, 11}, {11, 2}, {11, 4} };
+static const whisper_ahead g_aheads_small[]     = { {5, 3}, {5, 9}, {8, 0}, {8, 4}, {8, 7}, {8, 8}, {9, 0}, {9, 7}, {9, 9}, {10, 5} };
+static const whisper_ahead g_aheads_medium_en[] = { {11, 4}, {14, 1}, {14, 12}, {14, 14}, {15, 4}, {16, 0}, {16, 4}, {16, 9}, {17, 12}, {17, 14}, {18, 7}, {18, 10}, {18, 15}, {20, 0}, {20, 3}, {20, 9}, {20, 14}, {21, 12} };
+static const whisper_ahead g_aheads_medium[]    = { {13, 15}, {15, 4}, {15, 15}, {16, 1}, {20, 0}, {23, 4} };
+static const whisper_ahead g_aheads_large_v1[]  = { {9, 19}, {11, 2}, {11, 4}, {11, 17}, {22, 7}, {22, 11}, {22, 17}, {23, 2}, {23, 15} };
+static const whisper_ahead g_aheads_large_v2[]  = { {10, 12}, {13, 17}, {16, 11}, {16, 12}, {16, 13}, {17, 15}, {17, 16}, {18, 4}, {18, 11}, {18, 19}, {19, 11}, {21, 2}, {21, 3}, {22, 3}, {22, 9}, {22, 12}, {23, 5}, {23, 7}, {23, 13}, {25, 5}, {26, 1}, {26, 12}, {27, 15} };
+static const whisper_ahead g_aheads_large_v3[]  = { {7, 0}, {10, 17}, {12, 18}, {13, 12}, {16, 1}, {17, 14}, {19, 11}, {21, 4}, {24, 1}, {25, 6} };
+
+static const std::map<whisper_alignment_heads_preset, whisper_aheads> g_aheads {
+    { WHISPER_AHEADS_TINY_EN,   {  8, g_aheads_tiny_en   } },
+    { WHISPER_AHEADS_TINY,      {  6, g_aheads_tiny      } },
+    { WHISPER_AHEADS_BASE_EN,   {  5, g_aheads_base_en   } },
+    { WHISPER_AHEADS_BASE,      {  8, g_aheads_base      } },
+    { WHISPER_AHEADS_SMALL_EN,  { 19, g_aheads_small_en  } },
+    { WHISPER_AHEADS_SMALL,     { 10, g_aheads_small     } },
+    { WHISPER_AHEADS_MEDIUM_EN, { 18, g_aheads_medium_en } },
+    { WHISPER_AHEADS_MEDIUM,    {  6, g_aheads_medium    } },
+    { WHISPER_AHEADS_LARGE_V1,  {  9, g_aheads_large_v1  } },
+    { WHISPER_AHEADS_LARGE_V2,  { 23, g_aheads_large_v2  } },
+    { WHISPER_AHEADS_LARGE_V3,  { 10, g_aheads_large_v3  } },
+};
+
+static std::vector<uint32_t> get_alignment_heads_by_layer(const whisper_context_params & cparams, int il, int32_t n_text_layer, int32_t n_head);
+
+struct whisper_vocab {
+    using id    = int32_t;
+    using token = std::string;
+
+    int n_vocab = 51864;
+
+    std::map<token, id> token_to_id;
+    std::map<id, token> id_to_token;
+
+    // reference: https://github.com/openai/whisper/blob/248b6cb124225dd263bb9bd32d060b6517e067f8/whisper/tokenizer.py#L334-L349
+    id token_eot        = 50256;
+    id token_sot        = 50257;
+    // task tokens (used only for multilingual models)
+    id token_translate  = 50357;
+    id token_transcribe = 50358;
+    // other special tokens
+    id token_solm       = 50359; // [TDRZ] used by tinydiarize models to indicate speaker turn
+    id token_prev       = 50360;
+    id token_nosp       = 50361;
+    id token_not        = 50362; // no timestamps
+    id token_beg        = 50363; // begin timestamps
+
+    bool is_multilingual() const {
+        return n_vocab >= 51865;
+    }
+
+    int num_languages() const {
+        return n_vocab - 51765 - (is_multilingual() ? 1 : 0);
+    }
+};
+
+struct whisper_segment {
+    int64_t t0;
+    int64_t t1;
+
+    std::string text;
+
+    std::vector<whisper_token_data> tokens;
+
+    bool speaker_turn_next;
+};
+
+struct whisper_batch {
+    int32_t n_tokens;
+
+    whisper_token  *  token;
+    whisper_pos    *  pos;
+    int32_t        *  n_seq_id; // always 1, here for consistency with llama.cpp
+    whisper_seq_id ** seq_id;   // null terminated
+    int8_t         *  logits;
+};
+
+static struct whisper_batch whisper_batch_init(int32_t n_tokens, int32_t n_seq_max) {
+    whisper_batch batch = { 0, nullptr, nullptr, nullptr, nullptr, nullptr, };
+
+    batch.token    = (whisper_token *  ) malloc(sizeof(whisper_token)    * (n_tokens));
+    batch.pos      = (whisper_pos *)     malloc(sizeof(whisper_pos)      * (n_tokens));
+    batch.n_seq_id = (int32_t *)         malloc(sizeof(int32_t)          * (n_tokens));
+    batch.seq_id   = (whisper_seq_id **) malloc(sizeof(whisper_seq_id *) * (n_tokens + 1));
+    for (int i = 0; i < n_tokens; ++i) {
+        batch.seq_id[i] = (whisper_seq_id *) malloc(sizeof(whisper_seq_id)   * n_seq_max);
+    }
+    batch.seq_id[n_tokens] = nullptr;
+    batch.logits   = (int8_t *)          malloc(sizeof(int8_t)           * n_tokens);
+
+    return batch;
+}
+
+static void whisper_batch_free(struct whisper_batch batch) {
+    if (batch.token)    free(batch.token);
+    if (batch.pos)      free(batch.pos);
+    if (batch.n_seq_id) free(batch.n_seq_id);
+    if (batch.seq_id) {
+        for (int i = 0; batch.seq_id[i]; ++i) {
+            free(batch.seq_id[i]);
+        }
+        free(batch.seq_id);
+    }
+    if (batch.logits)   free(batch.logits);
+}
+
+static void whisper_batch_prep_legacy(whisper_batch & batch, const whisper_token * tokens, int n_tokens, int n_past, int seq_id) {
+    batch.n_tokens = n_tokens;
+    for (int i = 0; i < n_tokens; ++i) {
+        if (tokens) {
+            batch.token[i] = tokens[i];
+        }
+        batch.pos     [i]    = n_past + i;
+        batch.n_seq_id[i]    = 1;
+        batch.seq_id  [i][0] = seq_id;
+        batch.logits  [i]    = 0;
+    }
+    batch.logits[n_tokens - 1] = 1;
+}
+
+// replace std::pair by using customized pair struct (reason: std::pair is very slow)
+template<typename A, typename B>
+struct whisper_pair {
+    A first;
+    B second;
+
+    // Define a constructor that takes two arguments.
+    whisper_pair(const A& a, const B& b) : first(a), second(b) {}
+    // Define a constructor that takes no argument.
+    whisper_pair() : first(A()), second(B()) {}
+};
+
+// ggml_backend_sched wrapper for whisper usage
+struct whisper_sched {
+    ggml_backend_sched_t sched = nullptr;
+
+    std::vector<uint8_t> meta;
+};
+
+static size_t whisper_sched_size(struct whisper_sched & allocr) {
+    size_t size = allocr.meta.size();
+    for (int i = 0; i < ggml_backend_sched_get_n_backends(allocr.sched); ++i) {
+        ggml_backend_t backend = ggml_backend_sched_get_backend(allocr.sched, i);
+        size += ggml_backend_sched_get_buffer_size(allocr.sched, backend);
+    }
+    return size;
+}
+
+// measure the memory usage of a graph and prepare the allocr's internal data buffer
+static bool whisper_sched_graph_init(struct whisper_sched & allocr, std::vector<ggml_backend_t> backends, std::function<struct ggml_cgraph *()> && get_graph) {
+    auto & sched = allocr.sched;
+    auto & meta  = allocr.meta;
+
+    sched = ggml_backend_sched_new(backends.data(), nullptr, backends.size(), WHISPER_MAX_NODES, false);
+
+    meta.resize(ggml_tensor_overhead()*WHISPER_MAX_NODES + ggml_graph_overhead());
+
+    // since there are dependencies between the different graphs,
+    // we need to allocate them instead of only reserving to get the correct compute buffer size
+    if (!ggml_backend_sched_alloc_graph(sched, get_graph())) {
+        // failed to allocate the compute buffer
+        WHISPER_LOG_ERROR("%s: failed to allocate the compute buffer\n", __func__);
+        return false;
+    }
+
+    ggml_backend_sched_reset(sched);
+
+    return true;
+}
+
+// medium
+// hparams: {
+// 'n_mels': 80,
+// 'n_vocab': 51864,
+// 'n_audio_ctx': 1500,
+// 'n_audio_state': 1024,
+// 'n_audio_head': 16,
+// 'n_audio_layer': 24,
+// 'n_text_ctx': 448,
+// 'n_text_state': 1024,
+// 'n_text_head': 16,
+// 'n_text_layer': 24
+// }
+//
+// default hparams (Whisper tiny)
+struct whisper_hparams {
+    int32_t n_vocab       = 51864;
+    int32_t n_audio_ctx   = 1500;
+    int32_t n_audio_state = 384;
+    int32_t n_audio_head  = 6;
+    int32_t n_audio_layer = 4;
+    int32_t n_text_ctx    = 448;
+    int32_t n_text_state  = 384;
+    int32_t n_text_head   = 6;
+    int32_t n_text_layer  = 4;
+    int32_t n_mels        = 80;
+    int32_t ftype         = 1;
+    float   eps           = 1e-5f;
+};
+
+// audio encoding layer
+struct whisper_layer_encoder {
+    // encoder.blocks.*.attn_ln
+    struct ggml_tensor * attn_ln_0_w;
+    struct ggml_tensor * attn_ln_0_b;
+
+    // encoder.blocks.*.attn.out
+    struct ggml_tensor * attn_ln_1_w;
+    struct ggml_tensor * attn_ln_1_b;
+
+    // encoder.blocks.*.attn.query
+    struct ggml_tensor * attn_q_w;
+    struct ggml_tensor * attn_q_b;
+
+    // encoder.blocks.*.attn.key
+    struct ggml_tensor * attn_k_w;
+
+    // encoder.blocks.*.attn.value
+    struct ggml_tensor * attn_v_w;
+    struct ggml_tensor * attn_v_b;
+
+    // encoder.blocks.*.mlp_ln
+    struct ggml_tensor * mlp_ln_w;
+    struct ggml_tensor * mlp_ln_b;
+
+    // encoder.blocks.*.mlp.0
+    struct ggml_tensor * mlp_0_w;
+    struct ggml_tensor * mlp_0_b;
+
+    // encoder.blocks.*.mlp.2
+    struct ggml_tensor * mlp_1_w;
+    struct ggml_tensor * mlp_1_b;
+};
+
+// token decoding layer
+struct whisper_layer_decoder {
+    // decoder.blocks.*.attn_ln
+    struct ggml_tensor * attn_ln_0_w;
+    struct ggml_tensor * attn_ln_0_b;
+
+    // decoder.blocks.*.attn.out
+    struct ggml_tensor * attn_ln_1_w;
+    struct ggml_tensor * attn_ln_1_b;
+
+    // decoder.blocks.*.attn.query
+    struct ggml_tensor * attn_q_w;
+    struct ggml_tensor * attn_q_b;
+
+    // decoder.blocks.*.attn.key
+    struct ggml_tensor * attn_k_w;
+
+    // decoder.blocks.*.attn.value
+    struct ggml_tensor * attn_v_w;
+    struct ggml_tensor * attn_v_b;
+
+    // decoder.blocks.*.cross_attn_ln
+    struct ggml_tensor * cross_attn_ln_0_w;
+    struct ggml_tensor * cross_attn_ln_0_b;
+
+    // decoder.blocks.*.cross_attn.out
+    struct ggml_tensor * cross_attn_ln_1_w;
+    struct ggml_tensor * cross_attn_ln_1_b;
+
+    // decoder.blocks.*.cross_attn.query
+    struct ggml_tensor * cross_attn_q_w;
+    struct ggml_tensor * cross_attn_q_b;
+
+    // decoder.blocks.*.cross_attn.key
+    struct ggml_tensor * cross_attn_k_w;
+
+    // decoder.blocks.*.cross_attn.value
+    struct ggml_tensor * cross_attn_v_w;
+    struct ggml_tensor * cross_attn_v_b;
+
+    // decoder.blocks.*.mlp_ln
+    struct ggml_tensor * mlp_ln_w;
+    struct ggml_tensor * mlp_ln_b;
+
+    // decoder.blocks.*.mlp.0
+    struct ggml_tensor * mlp_0_w;
+    struct ggml_tensor * mlp_0_b;
+
+    // decoder.blocks.*.mlp.2
+    struct ggml_tensor * mlp_1_w;
+    struct ggml_tensor * mlp_1_b;
+};
+
+struct whisper_kv_cell {
+    whisper_pos pos = -1;
+
+    std::set<whisper_seq_id> seq_id;
+
+    bool has_seq_id(const whisper_seq_id & id) const {
+        return seq_id.find(id) != seq_id.end();
+    }
+};
+
+struct whisper_kv_cache {
+    uint32_t head = 0;
+    uint32_t size = 0;
+
+    // computed before each graph build
+    uint32_t n = 0;
+
+    std::vector<whisper_kv_cell> cells;
+
+    struct ggml_tensor * k;
+    struct ggml_tensor * v;
+
+    struct ggml_context * ctx = nullptr;
+
+    ggml_backend_buffer_t buffer = nullptr;
+};
+
+struct whisper_model {
+    e_model type = MODEL_UNKNOWN;
+
+    whisper_hparams hparams;
+    whisper_filters filters;
+
+    // encoder.positional_embedding
+    struct ggml_tensor * e_pe;
+
+    // encoder.conv1
+    struct ggml_tensor * e_conv_1_w;
+    struct ggml_tensor * e_conv_1_b;
+
+    // encoder.conv2
+    struct ggml_tensor * e_conv_2_w;
+    struct ggml_tensor * e_conv_2_b;
+
+    // encoder.ln_post
+    struct ggml_tensor * e_ln_w;
+    struct ggml_tensor * e_ln_b;
+
+    // decoder.positional_embedding
+    struct ggml_tensor * d_pe;
+
+    // decoder.token_embedding
+    struct ggml_tensor * d_te;
+
+    // decoder.ln
+    struct ggml_tensor * d_ln_w;
+    struct ggml_tensor * d_ln_b;
+
+    std::vector<whisper_layer_encoder> layers_encoder;
+    std::vector<whisper_layer_decoder> layers_decoder;
+
+    // ggml context that contains all the meta information about the model tensors
+    struct ggml_context * ctx = nullptr;
+
+    // the model backend data is read-only and can be shared between processors
+    ggml_backend_buffer_t buffer = nullptr;
+
+    // tensors
+    int n_loaded;
+    std::map<std::string, struct ggml_tensor *> tensors;
+};
+
+struct whisper_partial_utf8 {
+    uint32_t value;    // bit value so far (unshifted)
+    int      n_remain; // num bytes remaining; -1 indicates invalid sequence
+};
+
+struct whisper_grammar {
+    /*const*/ std::vector<std::vector<whisper_grammar_element>> rules;
+    std::vector<std::vector<const whisper_grammar_element *>>   stacks;
+
+    // buffer for partially generated UTF-8 sequence from accepted tokens
+    whisper_partial_utf8 partial_utf8;
+};
+
+struct whisper_grammar_candidate {
+    whisper_token          id;
+    const uint32_t       * code_points;
+    whisper_partial_utf8   partial_utf8;
+};
+
+struct whisper_sequence {
+    std::vector<whisper_token_data> tokens;
+
+    // the accumulated transcription in the current iteration (used to truncate the tokens array)
+    int result_len;
+
+    double sum_logprobs_all; // the sum of the log probabilities of the tokens
+    double sum_logprobs;     // the sum of the log probabilities of the tokens (first result_len tokens)
+    double avg_logprobs;     // the average log probability of the tokens
+    double entropy;          // the entropy of the tokens
+    double score;            // likelihood rank score
+};
+
+// TAGS: WHISPER_DECODER_INIT
+struct whisper_decoder {
+    // the currently generated sequence of tokens
+    whisper_sequence sequence;
+
+    // grammar parse state of generated sequence of tokens
+    whisper_grammar  grammar;
+
+    int i_batch;    // the index of the token in the current batch
+    int seek_delta; // the window shift found so far based on the decoded timestamp tokens
+
+    bool failed;    // has the current segment failed to decode?
+    bool completed; // has the decoder completed the current segment?
+    bool has_ts;    // have we already sampled a non-beg timestamp token for the current segment?
+
+    // new token probs, logits and logprobs after the last whisper_decode (1-dimensional array: [n_vocab])
+    std::vector<float> probs;
+    std::vector<float> logits;
+    std::vector<float> logprobs;
+
+    // work container used to avoid memory allocations
+    std::vector<whisper_pair<double, whisper_vocab::id>> logits_id;
+
+    mutable std::mt19937 rng; // used for sampling at t > 0.0
+};
+
+// [EXPERIMENTAL] Token-level timestamps with DTW
+struct whisper_aheads_masks {
+    std::vector<struct ggml_tensor *> m;    // One mask per text layer.
+    struct ggml_context * ctx = nullptr;
+    ggml_backend_buffer_t buffer = nullptr;
+};
+
+struct whisper_state {
+    int64_t t_sample_us = 0;
+    int64_t t_encode_us = 0;
+    int64_t t_decode_us = 0;
+    int64_t t_batchd_us = 0;
+    int64_t t_prompt_us = 0;
+    int64_t t_mel_us = 0;
+
+    int32_t n_sample = 0; // number of tokens sampled
+    int32_t n_encode = 0; // number of encoder calls
+    int32_t n_decode = 0; // number of decoder calls with n_tokens == 1  (text-generation)
+    int32_t n_batchd = 0; // number of decoder calls with n_tokens <  16 (batch decoding)
+    int32_t n_prompt = 0; // number of decoder calls with n_tokens >  1  (prompt encoding)
+    int32_t n_fail_p = 0; // number of logprob threshold failures
+    int32_t n_fail_h = 0; // number of entropy threshold failures
+
+    // unified self-attention KV cache for all decoders
+    whisper_kv_cache kv_self;
+
+    // cross-attention KV cache for the decoders
+    // shared between all decoders
+    whisper_kv_cache kv_cross;
+
+    // padded buffer for flash-attention
+    whisper_kv_cache kv_pad;
+
+    whisper_mel mel;
+    whisper_mel_calc * mel_calc = nullptr;
+    whisper_mel_calc * mel_calc_fallback = nullptr;
+
+    whisper_batch batch;
+
+    whisper_decoder decoders[WHISPER_MAX_DECODERS];
+
+    std::vector<ggml_backend_t> backends;
+
+    // - stores meta info about the intermediate tensors into the `meta` buffers
+    whisper_sched sched_conv;
+    whisper_sched sched_encode;
+    whisper_sched sched_cross;
+    whisper_sched sched_decode;
+
+    // result of the encoder
+    struct ggml_tensor * embd_conv = nullptr;
+    struct ggml_tensor * embd_enc  = nullptr;
+
+    // helpers for GPU offloading
+    std::vector<float> inp_mask;
+
+    // decode output (2-dimensional array: [n_tokens][n_vocab])
+    std::vector<float> logits;
+
+    std::vector<whisper_segment> result_all;
+    std::vector<whisper_token>   prompt_past;
+
+    int lang_id = 0; // english by default
+
+    std::string path_model; // populated by whisper_init_from_file_with_params()
+
+#ifdef WHISPER_USE_COREML
+    whisper_coreml_context * ctx_coreml = nullptr;
+#endif
+
+#ifdef WHISPER_USE_OPENVINO
+    whisper_openvino_context * ctx_openvino = nullptr;
+#endif
+
+    // [EXPERIMENTAL] token-level timestamps data
+    int64_t t_beg  = 0;
+    int64_t t_last = 0;
+
+    whisper_token tid_last;
+
+    std::vector<float> energy; // PCM signal energy
+
+    // [EXPERIMENTAL] Token-level timestamps with DTW
+    whisper_aheads_masks aheads_masks;
+    ggml_tensor * aheads_cross_QKs = nullptr;
+    std::vector<float> aheads_cross_QKs_data;
+
+    // [EXPERIMENTAL] speed-up techniques
+    int32_t exp_n_audio_ctx = 0; // 0 - use default
+};
+
+struct whisper_context {
+    int64_t t_load_us  = 0;
+    int64_t t_start_us = 0;
+
+    ggml_type wtype = ggml_type::GGML_TYPE_F16; // weight type (FP32 / FP16 / QX)
+    ggml_type itype = ggml_type::GGML_TYPE_F16; // intermediate type (FP32 or FP16)
+
+    whisper_context_params params;
+
+    whisper_model model;
+    whisper_vocab vocab;
+
+    whisper_state * state = nullptr;
+
+    std::string path_model; // populated by whisper_init_from_file_with_params()
+};
+
+struct whisper_global {
+    // We save the log callback globally
+    ggml_log_callback log_callback = whisper_log_callback_default;
+    void * log_callback_user_data = nullptr;
+};
+
+static whisper_global g_state;
+
+template<typename T>
+static void read_safe(whisper_model_loader * loader, T & dest) {
+    loader->read(loader->context, &dest, sizeof(T));
+    BYTESWAP_VALUE(dest);
+}
+
+static bool whisper_kv_cache_init(
+             struct whisper_kv_cache & cache,
+                      ggml_backend_t   backend,
+                           ggml_type   wtype,
+                             int64_t   n_text_state,
+                             int64_t   n_text_layer,
+                                 int   n_ctx) {
+    const int64_t n_mem      = n_text_layer*n_ctx;
+    const int64_t n_elements = n_text_state*n_mem;
+
+    struct ggml_init_params params = {
+        /*.mem_size   =*/ 2*ggml_tensor_overhead(),
+        /*.mem_buffer =*/ nullptr,
+        /*.no_alloc   =*/ true,
+    };
+
+    cache.head = 0;
+    cache.size = n_ctx;
+
+    cache.cells.clear();
+    cache.cells.resize(n_ctx);
+
+    cache.ctx = ggml_init(params);
+
+    if (!cache.ctx) {
+        WHISPER_LOG_ERROR("%s: failed to allocate memory for the kv cache context\n", __func__);
+        return false;
+    }
+
+    cache.k = ggml_new_tensor_1d(cache.ctx, wtype, n_elements);
+    cache.v = ggml_new_tensor_1d(cache.ctx, wtype, n_elements);
+
+    cache.buffer = ggml_backend_alloc_ctx_tensors(cache.ctx, backend);
+    if (!cache.buffer) {
+        WHISPER_LOG_ERROR("%s: failed to allocate memory for the kv cache\n", __func__);
+        return false;
+    }
+
+    ggml_backend_buffer_clear(cache.buffer, 0);
+
+    return true;
+}
+
+static void whisper_kv_cache_free(struct whisper_kv_cache & cache) {
+    ggml_free(cache.ctx);
+    ggml_backend_buffer_free(cache.buffer);
+    cache.ctx = nullptr;
+}
+
+static bool whisper_kv_cache_find_slot(
+           struct whisper_kv_cache & cache,
+        const struct whisper_batch & batch) {
+    const uint32_t n_ctx    = cache.size;
+    const uint32_t n_tokens = batch.n_tokens;
+
+    if (n_tokens > n_ctx) {
+        WHISPER_LOG_ERROR("%s: n_tokens=%d > n_ctx=%d\n", __func__, n_tokens, n_ctx);
+        return false;
+    }
+
+    uint32_t n_tested = 0;
+
+    while (true) {
+        if (cache.head + n_tokens > n_ctx) {
+            n_tested += n_ctx - cache.head;
+            cache.head = 0;
+            continue;
+        }
+
+        bool found = true;
+        for (uint32_t i = 0; i < n_tokens; i++) {
+            if (cache.cells[cache.head + i].pos >= 0) {
+                found = false;
+                cache.head += i + 1;
+                n_tested   += i + 1;
+                break;
+            }
+        }
+
+        if (found) {
+            break;
+        }
+
+        if (n_tested >= n_ctx) {
+            //WHISPER_LOG_ERROR("%s: failed to find a slot for %d tokens\n", __func__, n_tokens);
+            return false;
+        }
+    }
+
+    for (uint32_t i = 0; i < n_tokens; i++) {
+        cache.cells[cache.head + i].pos = batch.pos[i];
+
+        for (int32_t j = 0; j < batch.n_seq_id[i]; j++) {
+            cache.cells[cache.head + i].seq_id.insert(batch.seq_id[i][j]);
+        }
+    }
+
+    return true;
+}
+
+// find how many cells are currently in use
+static int32_t whisper_kv_cache_cell_max(const struct whisper_kv_cache & cache) {
+    for (uint32_t i = cache.size - 1; i > 0; --i) {
+        if (cache.cells[i].pos >= 0 && !cache.cells[i].seq_id.empty()) {
+            return i + 1;
+        }
+    }
+
+    return 1;
+}
+
+static void whisper_kv_cache_clear(struct whisper_kv_cache & cache) {
+    for (int32_t i = 0; i < (int32_t) cache.size; ++i) {
+        cache.cells[i].pos = -1;
+        cache.cells[i].seq_id.clear();
+    }
+    cache.head = 0;
+}
+
+static void whisper_kv_cache_seq_rm(
+        struct whisper_kv_cache & cache,
+                 whisper_seq_id   seq_id,
+                    whisper_pos   p0,
+                    whisper_pos   p1) {
+    uint32_t new_head = cache.size;
+
+    if (p0 < 0) p0 = 0;
+    if (p1 < 0) p1 = std::numeric_limits<whisper_pos>::max();
+
+    for (uint32_t i = 0; i < cache.size; ++i) {
+        if (cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) {
+            if (seq_id < 0) {
+                cache.cells[i].seq_id.clear();
+            } else if (cache.cells[i].has_seq_id(seq_id)) {
+                cache.cells[i].seq_id.erase(seq_id);
+            } else {
+                continue;
+            }
+            if (cache.cells[i].seq_id.empty()) {
+                cache.cells[i].pos = -1;
+                if (new_head == cache.size) new_head = i;
+            }
+        }
+    }
+
+    // If we freed up a slot, set head to it so searching can start there.
+    if (new_head != cache.size) cache.head = new_head;
+}
+
+static void whisper_kv_cache_seq_cp(
+        struct whisper_kv_cache & cache,
+                 whisper_seq_id   seq_id_src,
+                 whisper_seq_id   seq_id_dst,
+                    whisper_pos   p0,
+                    whisper_pos   p1) {
+    if (p0 < 0) p0 = 0;
+    if (p1 < 0) p1 = std::numeric_limits<whisper_pos>::max();
+
+    cache.head = 0;
+
+    for (uint32_t i = 0; i < cache.size; ++i) {
+        if (cache.cells[i].has_seq_id(seq_id_src) && cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) {
+            cache.cells[i].seq_id.insert(seq_id_dst);
+        }
+    }
+}
+
+static uint32_t whisper_kv_cache_get_padding(const struct whisper_context & wctx) {
+    if (!wctx.params.flash_attn || !wctx.params.use_gpu) {
+        return 1u;
+    }
+
+#ifdef GGML_USE_METAL
+    if (wctx.params.use_gpu) {
+        return 32u;
+    }
+#endif
+
+#ifdef GGML_USE_CUDA
+    if (wctx.params.use_gpu) {
+        return 256u;
+    }
+#endif
+
+    return 1u;
+}
+
+// [EXPERIMENTAL] Token-level timestamps with DTW
+static bool aheads_masks_init(
+        const whisper_context_params & cparams,
+               const whisper_hparams & hparams,
+         struct whisper_aheads_masks & aheads_masks,
+                      ggml_backend_t   backend) {
+
+    const int32_t n_text_layer = hparams.n_text_layer;
+    const int32_t n_head = hparams.n_text_head;
+
+    // Sanity checks
+    if (cparams.dtw_aheads_preset == WHISPER_AHEADS_NONE) {
+        WHISPER_LOG_ERROR("%s: dtw_aheads_preset should be != DTW_AHEADS_NONE\n", __func__);
+        return false;
+    } else if (cparams.dtw_aheads_preset == WHISPER_AHEADS_N_TOP_MOST) {
+        if (cparams.dtw_n_top > n_text_layer || cparams.dtw_n_top <= 0) {
+            WHISPER_LOG_ERROR("%s: dtw_n_top must be between %d and %d for this model.", __func__, 1, n_text_layer);
+            return false;
+        }
+    } else {
+        const auto aheads = cparams.dtw_aheads_preset == WHISPER_AHEADS_CUSTOM ? cparams.dtw_aheads : g_aheads.at(cparams.dtw_aheads_preset);
+        if (cparams.dtw_aheads_preset == WHISPER_AHEADS_CUSTOM) {
+            if (aheads.n_heads == 0) {
+                WHISPER_LOG_ERROR("%s: dtw_aheads.n_heads should be > 0", __func__);
+                return false;
+            }
+            if (aheads.heads == NULL) {
+                WHISPER_LOG_ERROR("%s: dtw_aheads.heads unset", __func__);
+                return false;
+            }
+        }
+        for (size_t i = 0; i < aheads.n_heads; ++i) {
+            if (aheads.heads[i].n_text_layer >= n_text_layer) {
+                WHISPER_LOG_ERROR("%s: tried to set alignment head on text layer %d, but model only has %d text layers", __func__, aheads.heads[i].n_text_layer + 1, n_text_layer);
+                return false;
+            }
+            if (aheads.heads[i].n_text_layer < 0) {
+                WHISPER_LOG_ERROR("%s: tried to set alignment head on text layer < 0", __func__);
+                return false;
+            }
+            if (aheads.heads[i].n_head >= n_head) {
+                WHISPER_LOG_ERROR("%s: tried to set alignment head on head %d, but model only has %d heads", __func__, aheads.heads[i].n_head + 1, n_head);
+                return false;
+            }
+            if (aheads.heads[i].n_head < 0) {
+                WHISPER_LOG_ERROR("%s: tried to set alignment head on head < 0", __func__);
+                return false;
+            }
+        }
+    }
+
+    struct ggml_init_params params = {
+        /*.mem_size   =*/ (size_t) static_cast<size_t>(n_text_layer)*ggml_tensor_overhead(),
+        /*.mem_buffer =*/ nullptr,
+        /*.no_alloc   =*/ true,
+    };
+
+    aheads_masks.ctx = ggml_init(params);
+
+    if (!aheads_masks.ctx) {
+        WHISPER_LOG_ERROR("%s: failed to allocate memory for the aheads_masks context\n", __func__);
+        return false;
+    }
+
+    for (int64_t il = 0; il < n_text_layer; ++il) {
+        auto aheads = get_alignment_heads_by_layer(cparams, il, n_text_layer, n_head);
+        if (!aheads.empty()) {
+            aheads_masks.m.push_back(ggml_new_tensor_2d(aheads_masks.ctx, GGML_TYPE_F32, n_head, aheads.size()));
+        } else {
+            aheads_masks.m.push_back(nullptr);
+        }
+    }
+
+    aheads_masks.buffer = ggml_backend_alloc_ctx_tensors(aheads_masks.ctx, backend);
+    if (!aheads_masks.buffer) {
+        WHISPER_LOG_ERROR("%s: failed to allocate memory for aheads_masks\n", __func__);
+        return false;
+    }
+
+    // Set data on mask tensors
+    // Since this must be backend agnostic, we write our desired values on mask_data,
+    // and send it to backend with ggml_backend_tensor_set.
+    // Each mask in N_HEADS*N_ALIGNMENT_HEADS, one per text layer containing alignment
+    // heads. Each row of the mask "marks" one alignment head. E.g. if some text layer
+    // has a total of 10 heads and of those, heads 0,5,6 are alignment heads, the mask
+    // should read:
+    // 1 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 1 0 0 0
+    std::vector<float> mask_data;
+    for (int64_t il = 0; il < n_text_layer; ++il) {
+        if (aheads_masks.m[il] != nullptr) {
+            auto aheads = get_alignment_heads_by_layer(cparams, il, n_text_layer, n_head);
+
+            size_t data_size = aheads_masks.m[il]->ne[0] * aheads_masks.m[il]->ne[1];
+            size_t data_size_bytes = data_size * sizeof(float);
+            mask_data.resize(data_size);
+
+            std::fill(mask_data.begin(), mask_data.end(), 0);
+            for (size_t ih = 0; ih < aheads.size(); ++ih) {
+                size_t pos = (aheads[ih] + (ih * aheads_masks.m[il]->ne[0]));
+                mask_data[pos] = 1.0f;
+            }
+
+            ggml_backend_tensor_set(aheads_masks.m[il], mask_data.data(), 0, data_size_bytes);
+        }
+    }
+
+    if (aheads_masks.m.empty()) {
+        WHISPER_LOG_ERROR("%s: \n", __func__);
+        return false;
+    }
+
+    return true;
+}
+
+static void aheads_masks_free(struct whisper_aheads_masks & aheads_masks) {
+    ggml_free(aheads_masks.ctx);
+    ggml_backend_buffer_free(aheads_masks.buffer);
+    aheads_masks.ctx = nullptr;
+}
+
+static size_t aheads_masks_nbytes(struct whisper_aheads_masks & aheads_masks) {
+    size_t size = 0;
+    for (size_t i = 0; i < aheads_masks.m.size(); ++i) {
+        if (aheads_masks.m[i] != nullptr)
+            size += ggml_nbytes(aheads_masks.m[i]);
+    }
+    return size;
+}
+
+static ggml_backend_t whisper_backend_init_gpu(const whisper_context_params & params) {
+    ggml_backend_t result = NULL;
+
+#ifdef GGML_USE_CUDA
+    if (params.use_gpu) {
+        WHISPER_LOG_INFO("%s: using CUDA backend\n", __func__);
+        result = ggml_backend_cuda_init(params.gpu_device);
+        if (!result) {
+            WHISPER_LOG_ERROR("%s: ggml_backend_cuda_init() failed\n", __func__);
+        }
+    }
+#endif
+
+#ifdef GGML_USE_METAL
+    if (params.use_gpu) {
+        WHISPER_LOG_INFO("%s: using Metal backend\n", __func__);
+        ggml_backend_metal_log_set_callback(g_state.log_callback, g_state.log_callback_user_data);
+        result = ggml_backend_metal_init();
+        if (!result) {
+            WHISPER_LOG_ERROR("%s: ggml_backend_metal_init() failed\n", __func__);
+        } else if (!ggml_backend_metal_supports_family(result, 7)) {
+            WHISPER_LOG_ERROR("%s: Metal GPU does not support family 7 - falling back to CPU\n", __func__);
+            ggml_backend_free(result);
+            result = NULL;
+        }
+    }
+#endif
+
+#ifdef GGML_USE_SYCL
+    if (params.use_gpu) {
+        WHISPER_LOG_INFO("%s: using SYCL backend\n", __func__);
+        result = ggml_backend_sycl_init(params.gpu_device);
+        if (!result) {
+            WHISPER_LOG_ERROR("%s: ggml_backend_sycl_init() failed\n", __func__);
+        }
+    }
+#endif
+
+    return result;
+}
+
+static std::vector<ggml_backend_t> whisper_backend_init(const whisper_context_params & params) {
+    std::vector<ggml_backend_t> result;
+
+    ggml_backend_t backend_gpu = whisper_backend_init_gpu(params);
+
+    if (backend_gpu) {
+        result.push_back(backend_gpu);
+    }
+
+#ifdef GGML_USE_BLAS
+    {
+        WHISPER_LOG_INFO("%s: using BLAS backend\n", __func__);
+        ggml_backend_t backend_blas = ggml_backend_blas_init();
+        if (!backend_blas) {
+            WHISPER_LOG_ERROR("%s: ggml_backend_blas_init() failed\n", __func__);
+        } else {
+            result.push_back(backend_blas);
+        }
+    }
+#endif
+
+    GGML_UNUSED(params);
+
+    result.push_back(ggml_backend_cpu_init());
+
+    return result;
+}
+
+static ggml_backend_buffer_type_t whisper_default_buffer_type(const whisper_context_params & params) {
+    ggml_backend_buffer_type_t result = nullptr;
+
+    params.use_gpu || (result = ggml_backend_cpu_buffer_type());
+
+#ifdef GGML_USE_CUDA
+    result || (result = ggml_backend_cuda_buffer_type(params.gpu_device));
+#endif
+
+#ifdef GGML_USE_METAL
+    result || (result = ggml_backend_metal_buffer_type());
+#endif
+
+#ifdef GGML_USE_SYCL
+    result || (result = ggml_backend_sycl_buffer_type(params.gpu_device));
+#endif
+
+    result || (result = ggml_backend_cpu_buffer_type());
+
+    return result;
+}
+
+// load the model from a ggml file
+//
+// file format:
+//
+//   - hparams
+//   - pre-computed mel filters
+//   - vocab
+//   - weights
+//
+// see the convert-pt-to-ggml.py script for details
+//
+static bool whisper_model_load(struct whisper_model_loader * loader, whisper_context & wctx) {
+    WHISPER_LOG_INFO("%s: loading model\n", __func__);
+
+    const int64_t t_start_us = ggml_time_us();
+
+    wctx.t_start_us = t_start_us;
+
+    auto & model = wctx.model;
+    auto & vocab = wctx.vocab;
+
+    // verify magic
+    {
+        uint32_t magic;
+        read_safe(loader, magic);
+        if (magic != GGML_FILE_MAGIC) {
+            WHISPER_LOG_ERROR("%s: invalid model data (bad magic)\n", __func__);
+            return false;
+        }
+    }
+
+    //load hparams
+    {
+        auto & hparams = model.hparams;
+
+        read_safe(loader, hparams.n_vocab);
+        read_safe(loader, hparams.n_audio_ctx);
+        read_safe(loader, hparams.n_audio_state);
+        read_safe(loader, hparams.n_audio_head);
+        read_safe(loader, hparams.n_audio_layer);
+        read_safe(loader, hparams.n_text_ctx);
+        read_safe(loader, hparams.n_text_state);
+        read_safe(loader, hparams.n_text_head);
+        read_safe(loader, hparams.n_text_layer);
+        read_safe(loader, hparams.n_mels);
+        read_safe(loader, hparams.ftype);
+
+        assert(hparams.n_text_state == hparams.n_audio_state);
+
+        std::string mver = "";
+
+        if (hparams.n_audio_layer == 4) {
+            model.type = e_model::MODEL_TINY;
+        }
+
+        if (hparams.n_audio_layer == 6) {
+            model.type = e_model::MODEL_BASE;
+        }
+
+        if (hparams.n_audio_layer == 12) {
+            model.type = e_model::MODEL_SMALL;
+        }
+
+        if (hparams.n_audio_layer == 24) {
+            model.type = e_model::MODEL_MEDIUM;
+        }
+
+        if (hparams.n_audio_layer == 32) {
+            model.type = e_model::MODEL_LARGE;
+
+            if (hparams.n_vocab == 51866) {
+                mver = " v3";
+            }
+        }
+
+        const int32_t qntvr = hparams.ftype / GGML_QNT_VERSION_FACTOR;
+
+        hparams.ftype %= GGML_QNT_VERSION_FACTOR;
+
+        // for the big tensors, we have the option to store the data in 16-bit floats or quantized
+        // in order to save memory and also to speed up the computation
+        wctx.wtype = ggml_ftype_to_ggml_type((ggml_ftype) (model.hparams.ftype));
+        if (wctx.wtype == GGML_TYPE_COUNT) {
+            WHISPER_LOG_ERROR("%s: invalid model (bad ftype value %d)\n", __func__, model.hparams.ftype);
+            return false;
+        }
+
+        WHISPER_LOG_INFO("%s: n_vocab       = %d\n", __func__, hparams.n_vocab);
+        WHISPER_LOG_INFO("%s: n_audio_ctx   = %d\n", __func__, hparams.n_audio_ctx);
+        WHISPER_LOG_INFO("%s: n_audio_state = %d\n", __func__, hparams.n_audio_state);
+        WHISPER_LOG_INFO("%s: n_audio_head  = %d\n", __func__, hparams.n_audio_head);
+        WHISPER_LOG_INFO("%s: n_audio_layer = %d\n", __func__, hparams.n_audio_layer);
+        WHISPER_LOG_INFO("%s: n_text_ctx    = %d\n", __func__, hparams.n_text_ctx);
+        WHISPER_LOG_INFO("%s: n_text_state  = %d\n", __func__, hparams.n_text_state);
+        WHISPER_LOG_INFO("%s: n_text_head   = %d\n", __func__, hparams.n_text_head);
+        WHISPER_LOG_INFO("%s: n_text_layer  = %d\n", __func__, hparams.n_text_layer);
+        WHISPER_LOG_INFO("%s: n_mels        = %d\n", __func__, hparams.n_mels);
+        WHISPER_LOG_INFO("%s: ftype         = %d\n", __func__, model.hparams.ftype);
+        WHISPER_LOG_INFO("%s: qntvr         = %d\n", __func__, qntvr);
+        WHISPER_LOG_INFO("%s: type          = %d (%s%s)\n", __func__, model.type, g_model_name.at(model.type).c_str(), mver.c_str());
+    }
+
+    // load mel filters
+    {
+        auto & filters = wctx.model.filters;
+
+        read_safe(loader, filters.n_mel);
+        read_safe(loader, filters.n_fft);
+
+        filters.data.resize(filters.n_mel * filters.n_fft);
+        loader->read(loader->context, filters.data.data(), filters.data.size() * sizeof(float));
+        BYTESWAP_FILTERS(filters);
+    }
+
+    // load vocab
+    {
+        int32_t n_vocab = 0;
+        read_safe(loader, n_vocab);
+
+        //if (n_vocab != model.hparams.n_vocab) {
+        //    WHISPER_LOG_ERROR("%s: invalid model file '%s' (bad vocab size %d != %d)\n",
+        //            __func__, fname.c_str(), n_vocab, model.hparams.n_vocab);
+        //    return false;
+        //}
+
+        std::string word;
+        std::vector<char> tmp;
+
+        tmp.reserve(128);
+
+        for (int i = 0; i < n_vocab; i++) {
+            uint32_t len;
+            read_safe(loader, len);
+
+            if (len > 0) {
+                tmp.resize(len);
+                loader->read(loader->context, &tmp[0], tmp.size()); // read to buffer
+                word.assign(&tmp[0], tmp.size());
+            } else {
+                // seems like we have an empty-string token in multi-language models (i = 50256)
+                //WHISPER_LOG_WARN("%s: warning: empty-string token in vocab, i = %d\n", __func__, i);
+                word = "";
+            }
+
+            vocab.token_to_id[word] = i;
+            vocab.id_to_token[i] = word;
+
+            //printf("%s: vocab[%d] = '%s'\n", __func__, i, word.c_str());
+        }
+
+        vocab.n_vocab = model.hparams.n_vocab;
+        if (vocab.is_multilingual()) {
+            vocab.token_eot++;
+            vocab.token_sot++;
+
+            // account for variable number of language tokens
+            const int dt = vocab.num_languages() - 98;
+
+            vocab.token_translate  += dt;
+            vocab.token_transcribe += dt;
+            vocab.token_solm       += dt;
+            vocab.token_prev       += dt;
+            vocab.token_nosp       += dt;
+            vocab.token_not        += dt;
+            vocab.token_beg        += dt;
+        }
+
+        if (n_vocab < model.hparams.n_vocab) {
+            WHISPER_LOG_INFO("%s: adding %d extra tokens\n", __func__, model.hparams.n_vocab - n_vocab);
+            for (int i = n_vocab; i < model.hparams.n_vocab; i++) {
+                if (i > vocab.token_beg) {
+                    word = "[_TT_" + std::to_string(i - vocab.token_beg) + "]";
+                } else if (i == vocab.token_eot) {
+                    word = "[_EOT_]";
+                } else if (i == vocab.token_sot) {
+                    word = "[_SOT_]";
+                } else if (i == vocab.token_translate) {
+                    word = "[_TRANSLATE_]";
+                } else if (i == vocab.token_transcribe) {
+                    word = "[_TRANSCRIBE_]";
+                } else if (i == vocab.token_solm) {
+                    word = "[_SOLM_]";
+                } else if (i == vocab.token_prev) {
+                    word = "[_PREV_]";
+                } else if (i == vocab.token_nosp) {
+                    word = "[_NOSP_]";
+                } else if (i == vocab.token_not) {
+                    word = "[_NOT_]";
+                } else if (i == vocab.token_beg) {
+                    word = "[_BEG_]";
+                } else if (i > vocab.token_sot && i <= vocab.token_sot + vocab.num_languages()) {
+                    word = "[_LANG_" + std::string(whisper_lang_str(i - vocab.token_sot - 1)) + "]";
+                } else {
+                    word = "[_extra_token_" + std::to_string(i) + "]";
+                }
+                vocab.token_to_id[word] = i;
+                vocab.id_to_token[i] = word;
+            }
+        }
+
+        WHISPER_LOG_INFO("%s: n_langs       = %d\n", __func__, vocab.num_languages());
+    }
+
+    const ggml_type wtype = wctx.wtype;
+    const ggml_type vtype = wctx.wtype == GGML_TYPE_F32 ? GGML_TYPE_F32 : GGML_TYPE_F16; // conv type
+
+    // create the ggml context
+    {
+        const auto & hparams = model.hparams;
+
+        const int n_audio_layer = hparams.n_audio_layer;
+        const int n_text_layer  = hparams.n_text_layer;
+
+        const size_t n_tensors = 10 /* input */ + 15 + 15*n_audio_layer + 24*n_text_layer;
+
+        struct ggml_init_params params = {
+            /*.mem_size   =*/ n_tensors*ggml_tensor_overhead(),
+            /*.mem_buffer =*/ nullptr,
+            /*.no_alloc   =*/ true,
+        };
+
+        model.ctx = ggml_init(params);
+        if (!model.ctx) {
+            WHISPER_LOG_ERROR("%s: ggml_init() failed\n", __func__);
+            return false;
+        }
+    }
+
+    // prepare tensors for the weights
+    {
+        auto & ctx = model.ctx;
+
+        const auto & hparams = model.hparams;
+
+        const int n_vocab = hparams.n_vocab;
+
+        const int n_audio_ctx   = hparams.n_audio_ctx;
+        const int n_audio_state = hparams.n_audio_state;
+        const int n_audio_layer = hparams.n_audio_layer;
+
+        const int n_text_ctx   = hparams.n_text_ctx;
+        const int n_text_state = hparams.n_text_state;
+        const int n_text_layer = hparams.n_text_layer;
+
+        const int n_mels = hparams.n_mels;
+
+        model.layers_encoder.resize(n_audio_layer);
+        model.layers_decoder.resize(n_text_layer);
+
+        // encoder
+        {
+            model.e_pe = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_audio_state, n_audio_ctx);
+
+            model.e_conv_1_w     = ggml_new_tensor_3d(ctx, vtype,         3, n_mels,     n_audio_state);
+            model.e_conv_1_b     = ggml_new_tensor_2d(ctx, GGML_TYPE_F32,         1,     n_audio_state);
+
+            model.e_conv_2_w     = ggml_new_tensor_3d(ctx, vtype,         3, n_audio_state, n_audio_state);
+            model.e_conv_2_b     = ggml_new_tensor_2d(ctx, GGML_TYPE_F32,                1, n_audio_state);
+
+            model.e_ln_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state);
+            model.e_ln_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state);
+
+            // map by name
+            model.tensors["encoder.positional_embedding"] = model.e_pe;
+
+            model.tensors["encoder.conv1.weight"]         = model.e_conv_1_w;
+            model.tensors["encoder.conv1.bias"]           = model.e_conv_1_b;
+
+            model.tensors["encoder.conv2.weight"]         = model.e_conv_2_w;
+            model.tensors["encoder.conv2.bias"]           = model.e_conv_2_b;
+
+            model.tensors["encoder.ln_post.weight"]       = model.e_ln_w;
+            model.tensors["encoder.ln_post.bias"]         = model.e_ln_b;
+
+            for (int i = 0; i < n_audio_layer; ++i) {
+                auto & layer = model.layers_encoder[i];
+
+                layer.mlp_ln_w    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
+                layer.mlp_ln_b    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
+
+                layer.mlp_0_w     = ggml_new_tensor_2d(ctx, wtype,           n_audio_state, 4*n_audio_state);
+                layer.mlp_0_b     = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_audio_state);
+
+                layer.mlp_1_w     = ggml_new_tensor_2d(ctx, wtype,         4*n_audio_state, n_audio_state);
+                layer.mlp_1_b     = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
+
+                layer.attn_ln_0_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
+                layer.attn_ln_0_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
+
+                layer.attn_q_w    = ggml_new_tensor_2d(ctx, wtype,           n_audio_state, n_audio_state);
+                layer.attn_q_b    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
+
+                layer.attn_k_w    = ggml_new_tensor_2d(ctx, wtype,           n_audio_state, n_audio_state);
+
+                layer.attn_v_w    = ggml_new_tensor_2d(ctx, wtype,           n_audio_state, n_audio_state);
+                layer.attn_v_b    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
+
+                layer.attn_ln_1_w = ggml_new_tensor_2d(ctx, wtype,           n_audio_state, n_audio_state);
+                layer.attn_ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
+
+                // map by name
+                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp_ln.weight"]     = layer.mlp_ln_w;
+                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp_ln.bias"]       = layer.mlp_ln_b;
+
+                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.0.weight"]      = layer.mlp_0_w;
+                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.0.bias"]        = layer.mlp_0_b;
+
+                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.2.weight"]      = layer.mlp_1_w;
+                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.2.bias"]        = layer.mlp_1_b;
+
+                model.tensors["encoder.blocks." + std::to_string(i) + ".attn_ln.weight"]    = layer.attn_ln_0_w;
+                model.tensors["encoder.blocks." + std::to_string(i) + ".attn_ln.bias"]      = layer.attn_ln_0_b;
+
+                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.query.weight"] = layer.attn_q_w;
+                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.query.bias"]   = layer.attn_q_b;
+
+                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.key.weight"]   = layer.attn_k_w;
+
+                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.value.weight"] = layer.attn_v_w;
+                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.value.bias"]   = layer.attn_v_b;
+
+                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.out.weight"]   = layer.attn_ln_1_w;
+                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.out.bias"]     = layer.attn_ln_1_b;
+            }
+        }
+
+        // decoder
+        {
+            model.d_pe   = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_text_state, n_text_ctx);
+
+            model.d_te   = ggml_new_tensor_2d(ctx, wtype,         n_text_state, n_vocab);
+
+            model.d_ln_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state);
+            model.d_ln_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state);
+
+            // map by name
+            model.tensors["decoder.positional_embedding"]   = model.d_pe;
+
+            model.tensors["decoder.token_embedding.weight"] = model.d_te;
+
+            model.tensors["decoder.ln.weight"]              = model.d_ln_w;
+            model.tensors["decoder.ln.bias"]                = model.d_ln_b;
+
+            for (int i = 0; i < n_text_layer; ++i) {
+                auto & layer = model.layers_decoder[i];
+
+                layer.mlp_ln_w          = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+                layer.mlp_ln_b          = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+
+                layer.mlp_0_w           = ggml_new_tensor_2d(ctx, wtype,           n_text_state, 4*n_text_state);
+                layer.mlp_0_b           = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_text_state);
+
+                layer.mlp_1_w           = ggml_new_tensor_2d(ctx, wtype,         4*n_text_state, n_text_state);
+                layer.mlp_1_b           = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+
+                layer.attn_ln_0_w       = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+                layer.attn_ln_0_b       = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+
+                layer.attn_q_w          = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
+                layer.attn_q_b          = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+
+                layer.attn_k_w          = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
+
+                layer.attn_v_w          = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
+                layer.attn_v_b          = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+
+                layer.attn_ln_1_w       = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
+                layer.attn_ln_1_b       = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+
+                layer.cross_attn_ln_0_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+                layer.cross_attn_ln_0_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+
+                layer.cross_attn_q_w    = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
+                layer.cross_attn_q_b    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+
+                layer.cross_attn_k_w    = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
+
+                layer.cross_attn_v_w    = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
+                layer.cross_attn_v_b    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+
+                layer.cross_attn_ln_1_w = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
+                layer.cross_attn_ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
+
+                // map by name
+                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp_ln.weight"]           = layer.mlp_ln_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp_ln.bias"]             = layer.mlp_ln_b;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.0.weight"]            = layer.mlp_0_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.0.bias"]              = layer.mlp_0_b;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.2.weight"]            = layer.mlp_1_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.2.bias"]              = layer.mlp_1_b;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".attn_ln.weight"]          = layer.attn_ln_0_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".attn_ln.bias"]            = layer.attn_ln_0_b;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.query.weight"]       = layer.attn_q_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.query.bias"]         = layer.attn_q_b;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.key.weight"]         = layer.attn_k_w;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.value.weight"]       = layer.attn_v_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.value.bias"]         = layer.attn_v_b;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.out.weight"]         = layer.attn_ln_1_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.out.bias"]           = layer.attn_ln_1_b;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn_ln.weight"]    = layer.cross_attn_ln_0_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn_ln.bias"]      = layer.cross_attn_ln_0_b;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.query.weight"] = layer.cross_attn_q_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.query.bias"]   = layer.cross_attn_q_b;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.key.weight"]   = layer.cross_attn_k_w;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.value.weight"] = layer.cross_attn_v_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.value.bias"]   = layer.cross_attn_v_b;
+
+                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.out.weight"]   = layer.cross_attn_ln_1_w;
+                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.out.bias"]     = layer.cross_attn_ln_1_b;
+            }
+        }
+    }
+
+    // allocate tensors in the backend buffers
+    model.buffer = ggml_backend_alloc_ctx_tensors_from_buft(model.ctx, whisper_default_buffer_type(wctx.params));
+    if (!model.buffer) {
+        WHISPER_LOG_ERROR("%s: failed to allocate memory for the model\n", __func__);
+        return false;
+    }
+
+    size_t size_main = ggml_backend_buffer_get_size(model.buffer);
+    WHISPER_LOG_INFO("%s: %8s total size = %8.2f MB\n", __func__, ggml_backend_buffer_name(model.buffer), size_main / 1e6);
+
+    // load weights
+    {
+        size_t total_size = 0;
+
+        model.n_loaded = 0;
+
+        std::vector<char> read_buf;
+
+        while (true) {
+            int32_t n_dims;
+            int32_t length;
+            int32_t ttype;
+
+            read_safe(loader, n_dims);
+            read_safe(loader, length);
+            read_safe(loader, ttype);
+
+            if (loader->eof(loader->context)) {
+                break;
+            }
+
+            int32_t nelements = 1;
+            int32_t ne[4] = { 1, 1, 1, 1 };
+            for (int i = 0; i < n_dims; ++i) {
+                read_safe(loader, ne[i]);
+                nelements *= ne[i];
+            }
+
+            std::string name;
+            std::vector<char> tmp(length); // create a buffer
+            loader->read(loader->context, &tmp[0], tmp.size()); // read to buffer
+            name.assign(&tmp[0], tmp.size());
+
+            if (model.tensors.find(name) == model.tensors.end()) {
+                WHISPER_LOG_ERROR("%s: unknown tensor '%s' in model file\n", __func__, name.data());
+                return false;
+            }
+
+            auto tensor = model.tensors[name.data()];
+
+            if (ggml_nelements(tensor) != nelements) {
+                WHISPER_LOG_ERROR("%s: tensor '%s' has wrong size in model file\n", __func__, name.data());
+                WHISPER_LOG_ERROR("%s: shape: [%d, %d, %d], expected: [%d, %d, %d]\n",
+                        __func__, ne[0], ne[1], ne[2], (int) tensor->ne[0], (int) tensor->ne[1], (int) tensor->ne[2]);
+                return false;
+            }
+
+            if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1] || tensor->ne[2] != ne[2]) {
+                WHISPER_LOG_ERROR("%s: tensor '%s' has wrong shape in model file: got [%d, %d, %d], expected [%d, %d, %d]\n",
+                        __func__, name.data(), (int) tensor->ne[0], (int) tensor->ne[1], (int) tensor->ne[2], ne[0], ne[1], ne[2]);
+                return false;
+            }
+
+            const size_t bpe = ggml_type_size(ggml_type(ttype));
+
+            if ((nelements*bpe)/ggml_blck_size(tensor->type) != ggml_nbytes(tensor)) {
+                WHISPER_LOG_ERROR("%s: tensor '%s' has wrong size in model file: got %zu, expected %zu\n",
+                        __func__, name.data(), ggml_nbytes(tensor), nelements*bpe);
+                return false;
+            }
+
+            //ggml_backend_t backend = wctx.backend;
+
+            //printf("%s: [%5.5s] %s\n", __func__, ggml_backend_name(backend), name.c_str());
+
+            if (ggml_backend_buffer_is_host(model.buffer)) {
+                // for the CPU and Metal backend, we can read directly into the tensor
+                loader->read(loader->context, tensor->data, ggml_nbytes(tensor));
+                BYTESWAP_TENSOR(tensor);
+            } else {
+                // read into a temporary buffer first, then copy to device memory
+                read_buf.resize(ggml_nbytes(tensor));
+
+                loader->read(loader->context, read_buf.data(), read_buf.size());
+
+                ggml_backend_tensor_set(tensor, read_buf.data(), 0, ggml_nbytes(tensor));
+            }
+
+            //printf("%48s - [%5d, %5d, %5d], type = %6s, %6.2f MB\n", name.data(), ne[0], ne[1], ne[2], ggml_type_name((ggml_type) ttype), ggml_nbytes(tensor)/1e6);
+            total_size += ggml_nbytes(tensor);
+            model.n_loaded++;
+        }
+
+        WHISPER_LOG_INFO("%s: model size    = %7.2f MB\n", __func__, total_size/1e6);
+
+        if (model.n_loaded == 0) {
+            WHISPER_LOG_WARN("%s: WARN no tensors loaded from model file - assuming empty model for testing\n", __func__);
+        } else if (model.n_loaded != (int) model.tensors.size()) {
+            WHISPER_LOG_ERROR("%s: ERROR not all tensors loaded from model file - expected %zu, got %d\n", __func__, model.tensors.size(), model.n_loaded);
+            return false;
+        }
+    }
+
+    ggml_backend_buffer_set_usage(model.buffer, GGML_BACKEND_BUFFER_USAGE_WEIGHTS);
+
+    wctx.t_load_us = ggml_time_us() - t_start_us;
+
+    return true;
+}
+
+static bool whisper_encode_external(const whisper_state & wstate) {
+    GGML_UNUSED(wstate);
+
+#ifndef WHISPER_USE_COREML
+    const bool use_coreml = false;
+#else
+    const bool use_coreml = wstate.ctx_coreml != nullptr;
+#endif
+
+#ifndef WHISPER_USE_OPENVINO
+    const bool use_openvino = false;
+#else
+    const bool use_openvino = wstate.ctx_openvino != nullptr;
+#endif
+
+    return use_coreml || use_openvino;
+}
+
+static struct ggml_cgraph * whisper_build_graph_conv(
+        whisper_context & wctx,
+          whisper_state & wstate,
+              const int   mel_offset) {
+    const auto & model   = wctx.model;
+    const auto & hparams = model.hparams;
+
+    const int n_ctx   = wstate.exp_n_audio_ctx > 0 ? wstate.exp_n_audio_ctx : hparams.n_audio_ctx;
+    const int n_state = hparams.n_audio_state; GGML_UNUSED(n_state);
+
+    const int n_mels = hparams.n_mels;
+
+    struct ggml_init_params params = {
+        /*.mem_size   =*/ wstate.sched_conv.meta.size(),
+        /*.mem_buffer =*/ wstate.sched_conv.meta.data(),
+        /*.no_alloc   =*/ true,
+    };
+
+    struct ggml_context * ctx0 = ggml_init(params);
+
+    ggml_cgraph * gf = ggml_new_graph(ctx0);
+
+    GGML_ASSERT(wstate.mel.tensor);
+
+    ggml_tensor * mel_inp = wstate.mel.tensor;
+    ggml_set_input(mel_inp);
+
+    ggml_tensor * mel;
+    {
+        const int n_len = int(mel_inp->ne[0]);
+        const int out_s = 2 * n_ctx;
+        const int i0 = std::min(mel_offset, n_len);
+        const int i1 = std::min(mel_offset + out_s, n_len);
+        const int mel_s = i1 - i0;
+
+        assert(mel_inp->type == GGML_TYPE_F32);
+        assert(mel_inp->ne[1] == n_mels);
+
+        ggml_tensor * cur = ggml_view_2d(ctx0, mel_inp, out_s, n_mels, mel_inp->nb[1], ggml_row_size(mel_inp->type, i0));
+
+        if (mel_s < out_s) {
+            mel = ggml_pad(ctx0, cur, out_s - mel_s, 0, 0, 0);
+        } else {
+            mel = ggml_cont(ctx0, cur);
+        }
+    }
+
+    ggml_set_name(mel, "mel");
+
+    struct ggml_tensor * cur = nullptr;
+
+    if (!whisper_encode_external(wstate)) {
+        // convolution + gelu
+        {
+            cur = ggml_conv_1d_ph(ctx0, model.e_conv_1_w, mel, 1, 1);
+            cur = ggml_add(ctx0, cur, model.e_conv_1_b);
+
+            cur = ggml_gelu(ctx0, cur);
+
+            cur = ggml_conv_1d_ph(ctx0, model.e_conv_2_w, cur, 2, 1);
+            cur = ggml_add(ctx0, cur, model.e_conv_2_b);
+
+            cur = ggml_gelu(ctx0, cur);
+        }
+
+        ggml_set_name(cur, "embd_conv");
+        wstate.embd_conv = cur;
+    } else {
+        ggml_build_forward_expand(gf, mel);
+
+        cur = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, n_ctx);
+        ggml_set_input(cur); // the external encoder will write into this tensor
+
+        ggml_set_name(cur, "embd_enc");
+        wstate.embd_enc = cur;
+    }
+
+    ggml_set_output(cur);
+
+    ggml_build_forward_expand(gf, cur);
+
+    ggml_free(ctx0);
+
+    return gf;
+}
+
+static struct ggml_cgraph * whisper_build_graph_encoder(
+        whisper_context & wctx,
+          whisper_state & wstate) {
+    const auto & model   = wctx.model;
+    const auto & hparams = model.hparams;
+
+    const int n_ctx   = wstate.exp_n_audio_ctx > 0 ? wstate.exp_n_audio_ctx : hparams.n_audio_ctx;
+    const int n_state = hparams.n_audio_state;
+    const int n_head  = hparams.n_audio_head;
+    const int n_layer = hparams.n_audio_layer;
+
+    const int n_state_head = n_state/n_head;
+
+    auto & kv_pad = wstate.kv_pad;
+
+    WHISPER_ASSERT(!!kv_pad.ctx);
+
+    const int n_ctx_pad = GGML_PAD(n_ctx, 256);
+
+    struct ggml_init_params params = {
+        /*.mem_size   =*/ wstate.sched_encode.meta.size(),
+        /*.mem_buffer =*/ wstate.sched_encode.meta.data(),
+        /*.no_alloc   =*/ true,
+    };
+
+    struct ggml_context * ctx0 = ggml_init(params);
+
+    ggml_cgraph * gf = ggml_new_graph_custom(ctx0, WHISPER_MAX_NODES, false);
+
+    struct ggml_tensor * cur = ggml_view_tensor(ctx0, wstate.embd_conv);
+
+    const float KQscale = 1.0f/sqrtf(float(n_state_head));
+
+    // ===================================================================
+    // NOTE: experimenting with partial evaluation of the encoder (ignore)
+    //static int iter = -1;
+    //const int n_iter = 1500/n_ctx;
+
+    //iter = (iter + 1) % n_iter;
+
+    //if (iter == 0) {
+    //    memset(model.memory_cross_k->data, 0, ggml_nbytes(model.memory_cross_k));
+    //    memset(model.memory_cross_v->data, 0, ggml_nbytes(model.memory_cross_v));
+    //}
+
+    static int iter = 0;
+
+    const size_t e_pe_stride = model.e_pe->ne[0]*ggml_element_size(model.e_pe);
+    const size_t e_pe_offset = model.e_pe->ne[0]*ggml_element_size(model.e_pe)*n_ctx*iter;
+
+    struct ggml_tensor * e_pe = ggml_view_2d(ctx0, model.e_pe, model.e_pe->ne[0], n_ctx, e_pe_stride, e_pe_offset);
+    cur = ggml_add(ctx0, e_pe, ggml_cont(ctx0, ggml_transpose(ctx0, cur)));
+
+    // ===================================================================
+
+    // original:
+    //cur = ggml_add(ctx0, model.e_pe, ggml_transpose(ctx0, cur));
+
+    struct ggml_tensor * inpL = cur;
+
+    for (int il = 0; il < n_layer; ++il) {
+        const auto & layer = model.layers_encoder[il];
+
+        // norm
+        {
+            cur = ggml_norm(ctx0, inpL, hparams.eps);
+
+            // cur = ln_0_w*cur + ln_0_b
+            cur = ggml_add(ctx0,
+                    ggml_mul(ctx0, cur, layer.attn_ln_0_w),
+                    layer.attn_ln_0_b);
+        }
+
+        // self-attention
+        {
+            struct ggml_tensor * Qcur = ggml_mul_mat(ctx0,
+                    layer.attn_q_w,
+                    cur);
+
+            Qcur = ggml_add(ctx0, Qcur, layer.attn_q_b);
+
+            //Qcur = ggml_scale(ctx0, Qcur, pow(float(n_state_head), -0.25));
+
+            // note: no bias for Key
+            struct ggml_tensor * Kcur = ggml_mul_mat(ctx0,
+                    layer.attn_k_w,
+                    cur);
+
+            //Kcur = ggml_scale(ctx0, Kcur, pow(float(n_state_head), -0.25));
+
+            struct ggml_tensor * Vcur = ggml_mul_mat(ctx0,
+                    layer.attn_v_w,
+                    cur);
+
+            Vcur = ggml_add(ctx0, Vcur, layer.attn_v_b);
+
+            // ------
+
+            struct ggml_tensor * Q =
+                ggml_permute(ctx0,
+                        ggml_cpy(ctx0,
+                            Qcur,
+                            ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_state_head, n_head, n_ctx)),
+                        0, 2, 1, 3);
+
+            if (wctx.params.flash_attn) {
+                ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, ggml_view_1d(ctx0, kv_pad.k, n_ctx*n_state, 0)));
+                ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, ggml_view_1d(ctx0, kv_pad.v, n_ctx*n_state, 0)));
+
+                struct ggml_tensor * K =
+                    ggml_view_3d(ctx0, kv_pad.k,
+                            n_state_head, n_ctx_pad, n_head,
+                            ggml_element_size(kv_pad.k)*n_state,
+                            ggml_element_size(kv_pad.k)*n_state_head,
+                            0);
+
+                struct ggml_tensor * V =
+                    ggml_view_3d(ctx0, kv_pad.v,
+                            n_state_head, n_ctx_pad, n_head,
+                            ggml_element_size(kv_pad.v)*n_state,
+                            ggml_element_size(kv_pad.v)*n_state_head,
+                            0);
+
+                cur = ggml_flash_attn_ext(ctx0, Q, K, V, nullptr, KQscale, 0.0f);
+
+                cur = ggml_reshape_2d(ctx0, cur, n_state, n_ctx);
+            } else {
+                struct ggml_tensor * K =
+                    ggml_permute(ctx0,
+                            ggml_cpy(ctx0,
+                                Kcur,
+                                ggml_new_tensor_3d(ctx0, wctx.itype, n_state_head, n_head, n_ctx)),
+                            0, 2, 1, 3);
+
+                // K * Q
+                struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q);
+
+                struct ggml_tensor * KQ_soft_max = ggml_soft_max_ext(ctx0, KQ, nullptr, KQscale, 0.0f);
+
+                struct ggml_tensor * V =
+                    ggml_cpy(ctx0,
+                            ggml_permute(ctx0,
+                                ggml_reshape_3d(ctx0,
+                                    Vcur,
+                                    n_state_head, n_head, n_ctx),
+                                1, 2, 0, 3),
+                            ggml_new_tensor_3d(ctx0, wctx.itype, n_ctx, n_state_head, n_head)
+                            );
+
+                struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max);
+
+                struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3);
+
+                cur = ggml_cpy(ctx0,
+                        KQV_merged,
+                        ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, n_ctx));
+            }
+        }
+
+        // projection
+        {
+            cur = ggml_mul_mat(ctx0,
+                    layer.attn_ln_1_w,
+                    cur);
+
+            cur = ggml_add(ctx0, cur, layer.attn_ln_1_b);
+        }
+
+        // add the input
+        cur = ggml_add(ctx0, cur, inpL);
+
+        struct ggml_tensor * inpFF = cur;
+
+        // feed-forward network
+        {
+            // norm
+            {
+                cur = ggml_norm(ctx0, inpFF, hparams.eps);
+
+                // cur = mlp_ln_w*cur + mlp_ln_b
+                cur = ggml_add(ctx0,
+                        ggml_mul(ctx0, cur, layer.mlp_ln_w),
+                        layer.mlp_ln_b);
+            }
+
+#ifdef WHISPER_USE_FLASH_FF
+            cur = ggml_flash_ff(ctx0,
+                    ggml_cpy(ctx0, cur, ggml_new_tensor_2d(ctx0, wstate.itype, n_state, n_ctx)),
+                    layer.mlp_0_w, layer.mlp_0_b, layer.mlp_1_w, layer.mlp_1_b);
+#else
+            // fully connected
+            cur = ggml_mul_mat(ctx0,
+                    layer.mlp_0_w,
+                    cur);
+
+            cur = ggml_add(ctx0, cur, layer.mlp_0_b);
+
+            // GELU activation
+            cur = ggml_gelu(ctx0, cur);
+
+            // projection
+            cur = ggml_mul_mat(ctx0,
+                    layer.mlp_1_w,
+                    cur);
+
+            cur = ggml_add(ctx0, cur, layer.mlp_1_b);
+#endif
+        }
+
+        inpL = ggml_add(ctx0, cur, inpFF);
+    }
+
+    cur = inpL;
+
+    // norm
+    {
+        cur = ggml_norm(ctx0, cur, hparams.eps);
+
+        // cur = ln_f_g*cur + ln_f_b
+        cur = ggml_add(ctx0,
+                ggml_mul(ctx0, cur, model.e_ln_w),
+                model.e_ln_b);
+    }
+
+    ggml_build_forward_expand(gf, cur);
+
+    wstate.embd_enc = cur;
+
+    //ggml_graph_print(gf);
+
+    ////////////////////////////////////////////////////////////////////////////
+
+    //printf("%s: used_mem = %f MB, %f MB, %f MB %f MB %f MB\n", __func__,
+    //        ggml_used_mem(ctx0)/1e6,
+    //        wstate.get_buf_max_mem(0)/1e6,
+    //        wstate.get_buf_max_mem(1)/1e6,
+    //        wstate.get_buf_max_mem(2)/1e6,
+    //        wstate.get_buf_max_mem(3)/1e6);
+
+    ggml_free(ctx0);
+
+    return gf;
+}
+
+// pre-compute cross-attention memory
+static struct ggml_cgraph * whisper_build_graph_cross(
+        whisper_context & wctx,
+          whisper_state & wstate) {
+    const auto & model   = wctx.model;
+    const auto & hparams = model.hparams;
+
+    const int n_ctx   = wstate.exp_n_audio_ctx > 0 ? wstate.exp_n_audio_ctx : hparams.n_audio_ctx;
+    const int n_state = hparams.n_audio_state;
+    const int n_head  = hparams.n_audio_head;
+
+    const int n_state_head = n_state/n_head;
+
+    const int n_ctx_pad = GGML_PAD(n_ctx, 256);
+
+    struct ggml_init_params params = {
+        /*.mem_size   =*/ wstate.sched_cross.meta.size(),
+        /*.mem_buffer =*/ wstate.sched_cross.meta.data(),
+        /*.no_alloc   =*/ true,
+    };
+
+    struct ggml_context * ctx0 = ggml_init(params);
+
+    ggml_cgraph * gf = ggml_new_graph(ctx0);
+
+    struct ggml_tensor * cur = ggml_view_tensor(ctx0, wstate.embd_enc);
+
+    const float  Kscale = pow(float(n_state_head), -0.25);
+
+    for (int il = 0; il < model.hparams.n_text_layer; ++il) {
+        auto & layer = model.layers_decoder[il];
+
+        struct ggml_tensor * Kcross = ggml_mul_mat(ctx0,
+                layer.cross_attn_k_w,
+                cur);
+
+        Kcross = ggml_scale(ctx0, Kcross, Kscale);
+
+        struct ggml_tensor * Vcross = ggml_mul_mat(ctx0,
+                layer.cross_attn_v_w,
+                cur);
+
+        Vcross = ggml_add(ctx0,
+                    Vcross,
+                    layer.cross_attn_v_b);
+
+        struct ggml_tensor * k;
+        struct ggml_tensor * v;
+
+        if (wctx.params.flash_attn) {
+            k = ggml_view_1d(ctx0, wstate.kv_cross.k, n_state*n_ctx,
+                    (ggml_element_size(wstate.kv_cross.k)*n_state)*(il*n_ctx_pad));
+
+            v = ggml_view_1d(ctx0, wstate.kv_cross.v, n_state*n_ctx,
+                    (ggml_element_size(wstate.kv_cross.v)*n_state)*(il*n_ctx_pad));
+        } else {
+            Vcross = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, Vcross, n_state, n_ctx));
+
+            k = ggml_view_1d(ctx0, wstate.kv_cross.k, n_state*n_ctx,
+                    (ggml_element_size(wstate.kv_cross.k)*n_state)*(il*n_ctx));
+
+            v = ggml_view_2d(ctx0, wstate.kv_cross.v, n_ctx, n_state,
+                    (   n_ctx)*ggml_element_size(wstate.kv_cross.v),
+                    (il*n_ctx)*ggml_element_size(wstate.kv_cross.v)*n_state);
+        }
+
+        ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcross, k));
+        ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcross, v));
+    }
+
+    //ggml_graph_print(gf);
+
+    ggml_free(ctx0);
+
+    return gf;
+}
+
+// evaluate the encoder with the given state
+//
+// given audio recording (more specifically, its log mel spectrogram), runs forward pass of the encoder
+// part of the transformer model and returns the encoded features
+//
+//   - wctx:      the model
+//   - wstate:     the state of the encoder
+//   - n_threads:  number of threads to use
+//   - mel_offset: offset in the mel spectrogram (i.e. audio offset)
+//
+static bool whisper_encode_internal(
+        whisper_context & wctx,
+          whisper_state & wstate,
+              const int   mel_offset,
+              const int   n_threads,
+    ggml_abort_callback   abort_callback,
+                   void * abort_callback_data) {
+    const int64_t t_start_us = ggml_time_us();
+
+    // conv
+    {
+        auto & sched = wstate.sched_conv.sched;
+
+        ggml_cgraph * gf = whisper_build_graph_conv(wctx, wstate, mel_offset);
+
+        if (!ggml_backend_sched_alloc_graph(sched, gf)) {
+            // should never happen as we pre-allocate the memory
+            return false;
+        }
+
+        if (!ggml_graph_compute_helper(sched, gf, n_threads)) {
+            return false;
+        }
+
+        if (whisper_encode_external(wstate)) {
+            ggml_tensor * mel = ggml_graph_get_tensor(gf, "mel");
+            assert(mel->ne[1] == wctx.model.hparams.n_mels);
+            GGML_UNUSED(mel);
+#if defined(WHISPER_USE_COREML)
+            whisper_coreml_encode(wstate.ctx_coreml, mel->ne[0], mel->ne[1], (float *) mel->data, (float *) wstate.embd_enc->data);
+#elif defined(WHISPER_USE_OPENVINO)
+            whisper_openvino_encode(wstate.ctx_openvino, mel, wstate.embd_enc);
+#endif
+        }
+    }
+
+    // encoder
+    if (!whisper_encode_external(wstate)) {
+        auto & sched = wstate.sched_encode.sched;
+
+        ggml_cgraph * gf = whisper_build_graph_encoder(wctx, wstate);
+
+        if (!ggml_backend_sched_alloc_graph(sched, gf)) {
+            // should never happen as we pre-allocate the memory
+            return false;
+        }
+
+        if (!ggml_graph_compute_helper(sched, gf, n_threads)) {
+            return false;
+        }
+    }
+
+    // cross
+    {
+        auto & sched = wstate.sched_cross.sched;
+
+        ggml_cgraph * gf = whisper_build_graph_cross(wctx, wstate);
+
+        if (!ggml_backend_sched_alloc_graph(sched, gf)) {
+            // should never happen as we pre-allocate the memory
+            return false;
+        }
+
+        if (!ggml_graph_compute_helper(sched, gf, n_threads)) {
+            return false;
+        }
+    }
+
+    wstate.t_encode_us += ggml_time_us() - t_start_us;
+    wstate.n_encode++;
+
+    return !(abort_callback && abort_callback(abort_callback_data));
+}
+
+static struct ggml_cgraph * whisper_build_graph_decoder(
+         whisper_context & wctx,
+         whisper_state   & wstate,
+     const whisper_batch & batch,
+                    bool   save_alignment_heads_QKs,
+                    bool   worst_case) {
+    const auto & model   = wctx.model;
+    const auto & hparams = model.hparams;
+
+    auto & kv_self = wstate.kv_self;
+
+    WHISPER_ASSERT(!!kv_self.ctx);
+
+    const int n_ctx   = kv_self.size;
+    const int n_state = hparams.n_text_state;
+    const int n_head  = hparams.n_text_head;
+    const int n_layer = hparams.n_text_layer;
+
+    const int n_state_head = n_state/n_head;
+
+    const int n_tokens    = batch.n_tokens;
+    const int n_audio_ctx = wstate.exp_n_audio_ctx > 0 ? wstate.exp_n_audio_ctx : hparams.n_audio_ctx;
+
+    const int n_audio_ctx_pad = GGML_PAD(n_audio_ctx, 256);
+
+    const int32_t n_kv    = worst_case ? n_ctx            : kv_self.n;
+    const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head;
+
+    //WHISPER_LOG_DEBUG("%s: n_past = %d, n_tokens = %d, n_audio_ctx = %d, n_ctx = %d\n", __func__, n_past, n_tokens, n_audio_ctx, n_ctx);
+
+    struct ggml_init_params params = {
+        /*.mem_size   =*/ wstate.sched_decode.meta.size(),
+        /*.mem_buffer =*/ wstate.sched_decode.meta.data(),
+        /*.no_alloc   =*/ true,
+    };
+
+    struct ggml_context * ctx0 = ggml_init(params);
+
+    ggml_cgraph * gf = ggml_new_graph_custom(ctx0, WHISPER_MAX_NODES, false);
+
+    struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens);
+    ggml_set_name(embd, "embd");
+    ggml_set_input(embd);
+
+    struct ggml_tensor * position = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens);
+    ggml_set_name(position, "position");
+    ggml_set_input(position);
+
+    const float KQscale = pow(float(n_state_head), -0.25);
+
+    struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, GGML_PAD(n_tokens, GGML_KQ_MASK_PAD), 1);
+    ggml_set_name(KQ_mask, "KQ_mask");
+    ggml_set_input(KQ_mask);
+
+    struct ggml_tensor * KQ_mask_f16 = ggml_cast(ctx0, KQ_mask, GGML_TYPE_F16);
+
+    // token encoding + position encoding
+    struct ggml_tensor * cur =
+        ggml_add(ctx0,
+                ggml_get_rows(ctx0, model.d_te, embd),
+                ggml_get_rows(ctx0, model.d_pe, position));
+
+    struct ggml_tensor * inpL = cur;
+
+    // [EXPERIMENTAL] Token-level timestamps with DTW
+    struct ggml_tensor * aheads_cross_QKs = nullptr;
+
+    for (int il = 0; il < n_layer; ++il) {
+        const auto & layer = model.layers_decoder[il];
+
+        // norm
+        {
+            cur = ggml_norm(ctx0, inpL, hparams.eps);
+
+            // cur = ln_0_w*cur + ln_0_b
+            cur = ggml_add(ctx0,
+                    ggml_mul(ctx0,
+                        cur,
+                        layer.attn_ln_0_w),
+                    layer.attn_ln_0_b);
+        }
+
+        // self-attention
+        {
+            struct ggml_tensor * Qcur = ggml_mul_mat(ctx0,
+                    layer.attn_q_w,
+                    cur);
+
+            Qcur = ggml_add(ctx0,
+                        Qcur,
+                        layer.attn_q_b);
+
+            Qcur = ggml_scale(ctx0, Qcur, KQscale);
+
+            // note: no bias for Key
+            struct ggml_tensor * Kcur = ggml_mul_mat(ctx0,
+                    layer.attn_k_w,
+                    cur);
+
+            Kcur = ggml_scale(ctx0, Kcur, KQscale);
+
+            // store key and value to memory
+            {
+                struct ggml_tensor * Vcur = ggml_mul_mat(ctx0,
+                        layer.attn_v_w,
+                        cur);
+
+                Vcur = ggml_add(ctx0,
+                            Vcur,
+                            layer.attn_v_b);
+
+                struct ggml_tensor * k;
+                struct ggml_tensor * v;
+
+                if (wctx.params.flash_attn) {
+                    k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_state,
+                            (ggml_element_size(kv_self.k)*n_state)*(il*n_ctx + kv_head));
+
+                    v = ggml_view_1d(ctx0, kv_self.v, n_tokens*n_state,
+                            (ggml_element_size(kv_self.v)*n_state)*(il*n_ctx + kv_head));
+                } else {
+                    Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, Vcur, n_state, n_tokens));
+
+                    k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_state,
+                            (ggml_element_size(kv_self.k)*n_state)*(il*n_ctx + kv_head));
+
+                    v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_state,
+                            (   n_ctx)*ggml_element_size(kv_self.v),
+                            (il*n_ctx)*ggml_element_size(kv_self.v)*n_state + kv_head*ggml_element_size(kv_self.v));
+                }
+
+                ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k));
+                ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v));
+            }
+
+            // ------
+
+            struct ggml_tensor * Q =
+                ggml_permute(ctx0,
+                        ggml_reshape_3d(ctx0, Qcur, n_state_head, n_head, n_tokens),
+                        0, 2, 1, 3);
+
+            struct ggml_tensor * K =
+                ggml_view_3d(ctx0, kv_self.k,
+                        n_state_head, n_kv, n_head,
+                        ggml_element_size(kv_self.k)*n_state,
+                        ggml_element_size(kv_self.k)*n_state_head,
+                        ggml_element_size(kv_self.k)*n_state*n_ctx*il);
+
+            if (wctx.params.flash_attn) {
+                struct ggml_tensor * V =
+                    ggml_view_3d(ctx0, kv_self.v,
+                            n_state_head, n_kv, n_head,
+                            ggml_element_size(kv_self.v)*n_state,
+                            ggml_element_size(kv_self.v)*n_state_head,
+                            ggml_element_size(kv_self.v)*n_state*n_ctx*il);
+
+                cur = ggml_flash_attn_ext(ctx0, Q, K, V, KQ_mask_f16, 1.0f, 0.0f);
+
+                cur = ggml_reshape_2d(ctx0, cur, n_state, n_tokens);
+            } else {
+                // K * Q
+                struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q);
+
+                struct ggml_tensor * KQ_soft_max = ggml_soft_max_ext(ctx0, KQ, KQ_mask, 1.0f, 0.0f);
+
+                struct ggml_tensor * V =
+                    ggml_view_3d(ctx0, kv_self.v,
+                            n_kv, n_state_head, n_head,
+                            n_ctx*ggml_element_size(kv_self.v),
+                            n_ctx*ggml_element_size(kv_self.v)*n_state_head,
+                            n_ctx*ggml_element_size(kv_self.v)*n_state*il);
+
+                struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max);
+
+                struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3);
+
+                cur = ggml_cpy(ctx0,
+                        KQV_merged,
+                        ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, n_tokens));
+            }
+        }
+
+        // projection
+        {
+            cur = ggml_mul_mat(ctx0,
+                    layer.attn_ln_1_w,
+                    cur);
+
+            cur = ggml_add(ctx0,
+                    cur,
+                    layer.attn_ln_1_b);
+        }
+
+        // add the input
+        struct ggml_tensor * inpCA = ggml_add(ctx0, cur, inpL);
+
+        // norm
+        {
+            cur = ggml_norm(ctx0, inpCA, hparams.eps); // note: we use inpCA here
+
+            // cur = ln_0_w*cur + ln_0_b
+            cur = ggml_add(ctx0,
+                    ggml_mul(ctx0,
+                        cur,
+                        layer.cross_attn_ln_0_w),
+                    layer.cross_attn_ln_0_b);
+        }
+
+        // cross-attention
+        {
+            struct ggml_tensor * Qcur = ggml_mul_mat(ctx0,
+                    layer.cross_attn_q_w,
+                    cur);
+
+            Qcur = ggml_add(ctx0,
+                        Qcur,
+                        layer.cross_attn_q_b);
+
+            struct ggml_tensor * Q =
+                ggml_permute(ctx0,
+                        ggml_reshape_3d(ctx0, Qcur, n_state_head, n_head, n_tokens),
+                        0, 2, 1, 3);
+
+            if (wctx.params.flash_attn) {
+                struct ggml_tensor * Kcross =
+                    ggml_view_3d(ctx0, wstate.kv_cross.k,
+                            n_state_head, n_audio_ctx_pad, n_head,
+                            ggml_element_size(wstate.kv_cross.k)*n_state,
+                            ggml_element_size(wstate.kv_cross.k)*n_state_head,
+                            ggml_element_size(wstate.kv_cross.k)*n_state*n_audio_ctx_pad*il);
+
+                struct ggml_tensor * Vcross =
+                    ggml_view_3d(ctx0, wstate.kv_cross.v,
+                            n_state_head, n_audio_ctx_pad, n_head,
+                            ggml_element_size(wstate.kv_cross.v)*n_state,
+                            ggml_element_size(wstate.kv_cross.v)*n_state_head,
+                            ggml_element_size(wstate.kv_cross.v)*n_state*n_audio_ctx_pad*il);
+
+                cur = ggml_flash_attn_ext(ctx0, Q, Kcross, Vcross, nullptr, KQscale, 0.0f);
+
+                cur = ggml_reshape_2d(ctx0, cur, n_state, n_tokens);
+            } else {
+                struct ggml_tensor * Kcross =
+                    ggml_view_3d(ctx0, wstate.kv_cross.k,
+                            n_state_head, n_audio_ctx, n_head,
+                            ggml_element_size(wstate.kv_cross.k)*n_state,
+                            ggml_element_size(wstate.kv_cross.k)*n_state_head,
+                            ggml_element_size(wstate.kv_cross.k)*n_state*n_audio_ctx*il);
+
+                struct ggml_tensor * Vcross =
+                    ggml_view_3d(ctx0, wstate.kv_cross.v,
+                            n_audio_ctx, n_state_head, n_head,
+                            n_audio_ctx*ggml_element_size(wstate.kv_cross.v),
+                            n_audio_ctx*ggml_element_size(wstate.kv_cross.v)*n_state_head,
+                            n_audio_ctx*ggml_element_size(wstate.kv_cross.v)*n_state*il);
+
+                // ------
+
+                // K * Q
+                struct ggml_tensor * KQ = ggml_mul_mat(ctx0, Kcross, Q);
+
+                struct ggml_tensor * KQ_soft_max = ggml_soft_max_ext(ctx0, KQ, nullptr, KQscale, 0.0f);
+
+                // [EXPERIMENTAL] Token-level timestamps with DTW
+                if (wctx.params.dtw_token_timestamps) {
+                    if (wstate.aheads_masks.m[il] != nullptr) {
+                        struct ggml_tensor * aheads_KQs = ggml_reshape_2d(ctx0, KQ_soft_max, KQ_soft_max->ne[0] * KQ_soft_max->ne[1], KQ_soft_max->ne[2]);
+                        aheads_KQs = ggml_transpose(ctx0, aheads_KQs);
+                        aheads_KQs = ggml_cont(ctx0, aheads_KQs);
+                        aheads_KQs = ggml_mul_mat(ctx0, wstate.aheads_masks.m[il], aheads_KQs);
+                        aheads_KQs = ggml_transpose(ctx0, aheads_KQs);
+                        aheads_KQs = ggml_cont(ctx0, aheads_KQs);
+                        aheads_KQs = ggml_reshape_3d(ctx0, aheads_KQs, KQ_soft_max->ne[0], KQ_soft_max->ne[1], wstate.aheads_masks.m[il]->ne[1]);
+                        if (aheads_cross_QKs == NULL) {
+                            aheads_cross_QKs = aheads_KQs;
+                        } else {
+                            aheads_cross_QKs = ggml_concat(ctx0, aheads_cross_QKs, aheads_KQs, 2);
+                        }
+                    }
+                }
+
+                struct ggml_tensor * KQV = ggml_mul_mat(ctx0, Vcross, KQ_soft_max);
+
+                struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3);
+
+                cur = ggml_cpy(ctx0,
+                        KQV_merged,
+                        ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, n_tokens));
+            }
+        }
+
+        // projection
+        {
+            cur = ggml_mul_mat(ctx0,
+                    layer.cross_attn_ln_1_w,
+                    cur);
+
+            cur = ggml_add(ctx0,
+                    cur,
+                    layer.cross_attn_ln_1_b);
+        }
+
+        // add the input
+        cur = ggml_add(ctx0, cur, inpCA);
+
+        struct ggml_tensor * inpFF = cur;
+
+        // feed-forward network
+        {
+            // norm
+            {
+                cur = ggml_norm(ctx0, inpFF, hparams.eps);
+
+                // cur = mlp_ln_w*cur + mlp_ln_b
+                cur = ggml_add(ctx0,
+                        ggml_mul(ctx0,
+                            cur,
+                            layer.mlp_ln_w),
+                        layer.mlp_ln_b);
+            }
+
+            // fully connected
+            cur = ggml_mul_mat(ctx0,
+                    layer.mlp_0_w,
+                    cur);
+
+            cur = ggml_add(ctx0,
+                    cur,
+                    layer.mlp_0_b);
+
+            // GELU activation
+            cur = ggml_gelu(ctx0, cur);
+
+            // projection
+            cur = ggml_mul_mat(ctx0,
+                    layer.mlp_1_w,
+                    cur);
+
+            cur = ggml_add(ctx0,
+                    cur,
+                    layer.mlp_1_b);
+        }
+
+        inpL = ggml_add(ctx0, cur, inpFF);
+    }
+
+    cur = inpL;
+
+    // norm
+    {
+        cur = ggml_norm(ctx0, cur, hparams.eps);
+
+        cur = ggml_add(ctx0,
+                ggml_mul(ctx0,
+                    cur,
+                    model.d_ln_w),
+                model.d_ln_b);
+    }
+
+    // compute logits only for the last token
+    // comment this line to compute logits for all n_tokens
+    // might be useful in the future
+    //cur = ggml_view_2d(ctx0, cur, cur->ne[0], 1, cur->nb[1], (cur->ne[1] - 1)*cur->nb[1]);
+
+    struct ggml_tensor * logits = ggml_mul_mat(ctx0, model.d_te, cur);
+
+    // [EXPERIMENTAL] Token-level timestamps with DTW
+    if (wctx.params.dtw_token_timestamps && aheads_cross_QKs != nullptr) {
+        aheads_cross_QKs = ggml_transpose(ctx0, aheads_cross_QKs);
+        aheads_cross_QKs = ggml_cont(ctx0, aheads_cross_QKs);
+        if (save_alignment_heads_QKs) {
+            ggml_build_forward_expand(gf, aheads_cross_QKs);
+            wstate.aheads_cross_QKs = aheads_cross_QKs;
+        }
+    }
+
+    ggml_build_forward_expand(gf, logits);
+
+    ggml_free(ctx0);
+
+    return gf;
+}
+
+// evaluate the decoder
+//
+// given text prompt + audio features -> computes the logits for the next token
+//
+//   - model:      the model
+//   - n_threads:  number of threads to use
+//   - tokens:     text prompt
+//   - n_tokens:   number of tokens in the prompt
+//   - n_past:     number of past tokens to prefix the prompt with
+//
+static bool whisper_decode_internal(
+        whisper_context & wctx,
+          whisper_state & wstate,
+    const whisper_batch & batch,
+              const int   n_threads,
+                   bool   save_alignment_heads_QKs,
+    ggml_abort_callback   abort_callback,
+                   void * abort_callback_data) {
+    const int64_t t_start_us = ggml_time_us();
+
+    const auto & model   = wctx.model;
+    const auto & hparams = model.hparams;
+
+    const int n_vocab  = hparams.n_vocab;
+    const int n_tokens = batch.n_tokens;
+
+    auto & logits_out = wstate.logits;
+
+    struct ggml_tensor * logits;
+
+    // find KV slot for the batch
+    {
+        auto & kv_self = wstate.kv_self;
+
+        if (!whisper_kv_cache_find_slot(kv_self, batch)) {
+            return false;
+        }
+
+        const uint32_t pad = whisper_kv_cache_get_padding(wctx);
+        kv_self.n = std::min(kv_self.size, std::max(pad, GGML_PAD(whisper_kv_cache_cell_max(kv_self), pad)));
+
+        //kv_self.n = std::min((int32_t) hparams.n_text_ctx, std::max(32, whisper_kv_cache_cell_max(kv_self)));
+        //printf("n_tokens = %5d, kv_self.head = %5d, kv_self.n = %5d, seq_id = %5d\n", batch.n_tokens, kv_self.head, kv_self.n, batch.seq_id[0][0]);
+    }
+
+    // decoder
+    {
+        auto & sched = wstate.sched_decode.sched;
+
+        ggml_cgraph * gf = whisper_build_graph_decoder(wctx, wstate, batch, save_alignment_heads_QKs, false);
+
+        if (!ggml_backend_sched_alloc_graph(sched, gf)) {
+            // should never happen as we pre-allocate the memory
+            return false;
+        }
+
+        // set the inputs
+        {
+            struct ggml_tensor * embd = ggml_graph_get_tensor(gf, "embd");
+            ggml_backend_tensor_set(embd, batch.token, 0, n_tokens*ggml_element_size(embd));
+        }
+
+        {
+            struct ggml_tensor * position = ggml_graph_get_tensor(gf, "position");
+            for (int i = 0; i < n_tokens; ++i) {
+                const int32_t val = batch.pos[i];
+                ggml_backend_tensor_set(position, &val, i*sizeof(int32_t), sizeof(int32_t));
+            }
+        }
+
+        {
+            struct ggml_tensor * KQ_mask = ggml_graph_get_tensor(gf, "KQ_mask");
+
+            auto & kv_self = wstate.kv_self;
+
+            const int32_t n_kv = kv_self.n;
+
+            wstate.inp_mask.resize(ggml_nelements(KQ_mask));
+
+            float * data = wstate.inp_mask.data();
+            memset(data, 0, ggml_nbytes(KQ_mask));
+
+            for (int h = 0; h < 1; ++h) {
+                for (int j = 0; j < n_tokens; ++j) {
+                    const whisper_pos    pos    = batch.pos[j];
+                    const whisper_seq_id seq_id = batch.seq_id[j][0];
+
+                    for (int i = 0; i < n_kv; ++i) {
+                        if (!kv_self.cells[i].has_seq_id(seq_id) || kv_self.cells[i].pos > pos) {
+                            data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY;
+                        }
+                    }
+                }
+
+                for (int i = n_tokens; i < GGML_PAD(n_tokens, GGML_KQ_MASK_PAD); ++i) {
+                    for (int j = 0; j < n_kv; ++j) {
+                        data[h*(n_kv*n_tokens) + i*n_kv + j] = -INFINITY;
+                    }
+                }
+            }
+
+            ggml_backend_tensor_set(KQ_mask, wstate.inp_mask.data(), 0, ggml_nelements(KQ_mask)*sizeof(float));
+        }
+
+        logits = gf->nodes[gf->n_nodes - 1];
+
+        if (!ggml_graph_compute_helper(sched, gf, n_threads)) {
+            return false;
+        }
+    }
+
+    logits_out.resize(n_tokens*n_vocab);
+    for (int i = 0; i < n_tokens; i++) {
+        if (batch.logits[i] == 0) {
+            continue;
+        }
+        ggml_backend_tensor_get(logits, logits_out.data() + (n_vocab*i), sizeof(float)*(n_vocab*i), sizeof(float)*n_vocab);
+    }
+
+    if (batch.n_tokens > 1) {
+        //printf("%s: used_mem = %f MB, %f MB, %f MB %f MB %f MB\n", __func__,
+        //        ggml_used_mem(ctx0)/1e6,
+        //        wstate.get_buf_max_mem(0)/1e6,
+        //        wstate.get_buf_max_mem(1)/1e6,
+        //        wstate.get_buf_max_mem(2)/1e6,
+        //        wstate.get_buf_max_mem(3)/1e6);
+    }
+
+    if (batch.n_tokens == 1) {
+        wstate.t_decode_us += ggml_time_us() - t_start_us;
+        wstate.n_decode++;
+    } else if (batch.n_tokens < 16) {
+        wstate.t_batchd_us += ggml_time_us() - t_start_us;
+        wstate.n_batchd += n_tokens;
+    } else {
+        wstate.t_prompt_us += ggml_time_us() - t_start_us;
+        wstate.n_prompt += n_tokens;
+    }
+
+    return !(abort_callback && abort_callback(abort_callback_data));
+}
+
+//  500 -> 00:05.000
+// 6000 -> 01:00.000
+static std::string to_timestamp(int64_t t, bool comma = false) {
+    int64_t msec = t * 10;
+    int64_t hr = msec / (1000 * 60 * 60);
+    msec = msec - hr * (1000 * 60 * 60);
+    int64_t min = msec / (1000 * 60);
+    msec = msec - min * (1000 * 60);
+    int64_t sec = msec / 1000;
+    msec = msec - sec * 1000;
+
+    char buf[32];
+    snprintf(buf, sizeof(buf), "%02d:%02d:%02d%s%03d", (int) hr, (int) min, (int) sec, comma ? "," : ".", (int) msec);
+
+    return std::string(buf);
+}
+
+#define SIN_COS_N_COUNT WHISPER_N_FFT
+namespace {
+struct whisper_global_cache {
+    // In FFT, we frequently use sine and cosine operations with the same values.
+    // We can use precalculated values to speed up the process.
+    float sin_vals[SIN_COS_N_COUNT];
+    float cos_vals[SIN_COS_N_COUNT];
+
+    // Hann window (Use cosf to eliminate difference)
+    // ref: https://pytorch.org/docs/stable/generated/torch.hann_window.html
+    // ref: https://github.com/openai/whisper/blob/main/whisper/audio.py#L147
+    float hann_window[WHISPER_N_FFT];
+
+    whisper_global_cache() {
+        fill_sin_cos_table();
+        fill_hann_window(sizeof(hann_window)/sizeof(hann_window[0]), true, hann_window);
+    }
+
+    void fill_sin_cos_table() {
+        for (int i = 0; i < SIN_COS_N_COUNT; i++) {
+            double theta = (2 * M_PI * i) / SIN_COS_N_COUNT;
+            sin_vals[i] = sinf(theta);
+            cos_vals[i] = cosf(theta);
+        }
+    }
+
+    void fill_hann_window(int length, bool periodic, float * output) {
+        int offset = -1;
+        if (periodic) {
+            offset = 0;
+        }
+        for (int i = 0; i < length; i++) {
+            output[i] = 0.5 * (1.0 - cosf((2.0 * M_PI * i) / (length + offset)));
+        }
+    }
+} global_cache;
+}
+
+// Mel spectrogram
+
+void whisper_mel_init(whisper_mel & mel, ggml_backend_t backend, int n_len, int n_len_org, int n_mel) {
+    WHISPER_LOG_INFO("%s: n_len = %d, n_len_org = %d, n_mel = %d\n", __func__, n_len, n_len_org, n_mel);
+    mel.n_len_org = n_len_org;
+    assert(!mel.ctx);
+    mel.ctx = ggml_init({ggml_tensor_overhead(), nullptr, true});
+    mel.tensor = ggml_new_tensor_2d(mel.ctx, GGML_TYPE_F32, n_len, n_mel);
+    mel.buffer = ggml_backend_alloc_buffer(backend, ggml_nbytes(mel.tensor) + ggml_backend_get_alignment(backend));
+    auto alloc = ggml_tallocr_new(mel.buffer);
+    ggml_tallocr_alloc(&alloc, mel.tensor);
+}
+
+void whisper_mel_free(whisper_mel & mel) {
+    ggml_free(mel.ctx);
+    ggml_backend_buffer_free(mel.buffer);
+
+    mel.n_len_org = 0;
+    mel.ctx = nullptr;
+    mel.tensor = nullptr;
+    mel.buffer = nullptr;
+}
+
+whisper_mel_calc::~whisper_mel_calc() = default; // export vtable
+
+whisper_span<const float> whisper_mel_calc::hann_window() {
+    return {global_cache.hann_window, WHISPER_N_FFT};
+}
+
+// naive Discrete Fourier Transform
+// input is real-valued
+// output is complex-valued
+static void dft(const float* in, int N, float* out) {
+    const int sin_cos_step = SIN_COS_N_COUNT / N;
+
+    for (int k = 0; k < N; k++) {
+        float re = 0;
+        float im = 0;
+
+        for (int n = 0; n < N; n++) {
+            int idx = (k * n * sin_cos_step) % (SIN_COS_N_COUNT); // t = 2*M_PI*k*n/N
+            re += in[n]*global_cache.cos_vals[idx]; // cos(t)
+            im -= in[n]*global_cache.sin_vals[idx]; // sin(t)
+        }
+
+        out[k*2 + 0] = re;
+        out[k*2 + 1] = im;
+    }
+}
+
+// Cooley-Tukey FFT
+// poor man's implementation - use something better
+// input is real-valued
+// output is complex-valued
+static void fft(float* in, int N, float* out) {
+    if (N == 1) {
+        out[0] = in[0];
+        out[1] = 0;
+        return;
+    }
+
+    const int half_N = N / 2;
+    if (N - half_N*2 == 1) {
+        dft(in, N, out);
+        return;
+    }
+
+    float* even = in + N;
+    for (int i = 0; i < half_N; ++i) {
+        even[i]= in[2*i];
+    }
+    float* even_fft = out + 2 * N;
+    fft(even, half_N, even_fft);
+
+    float* odd = even;
+    for (int i = 0; i < half_N; ++i) {
+        odd[i] = in[2*i + 1];
+    }
+    float* odd_fft = even_fft + N;
+    fft(odd, half_N, odd_fft);
+
+    const int sin_cos_step = SIN_COS_N_COUNT / N;
+    for (int k = 0; k < half_N; k++) {
+        int idx = k * sin_cos_step; // t = 2*M_PI*k/N
+        float re = global_cache.cos_vals[idx]; // cos(t)
+        float im = -global_cache.sin_vals[idx]; // sin(t)
+
+        float re_odd = odd_fft[2*k + 0];
+        float im_odd = odd_fft[2*k + 1];
+
+        out[2*k + 0] = even_fft[2*k + 0] + re*re_odd - im*im_odd;
+        out[2*k + 1] = even_fft[2*k + 1] + re*im_odd + im*re_odd;
+
+        out[2*(k + half_N) + 0] = even_fft[2*k + 0] - re*re_odd + im*im_odd;
+        out[2*(k + half_N) + 1] = even_fft[2*k + 1] - re*im_odd - im*re_odd;
+    }
+}
+
+namespace {
+
+struct whisper_mel_data {
+    int n_len;
+    int n_len_org;
+    int n_mel;
+    float * data;
+};
+
+void log_mel_spectrogram_worker_thread(int ith, const float * hann, const std::vector<float> & samples,
+                                              int n_samples, int n_threads,
+                                              const whisper_filters & filters, whisper_mel_data & mel) {
+    const auto frame_size = WHISPER_N_FFT;
+    const auto frame_step = WHISPER_HOP_LENGTH;
+    std::vector<float> fft_in(frame_size * 2, 0.0);
+    std::vector<float> fft_out(frame_size * 2 * 2 * 2);
+    int n_fft = filters.n_fft;
+    int i = ith;
+
+    // make sure n_fft == 1 + (WHISPER_N_FFT / 2), bin_0 to bin_nyquist
+    assert(n_fft == 1 + (frame_size / 2));
+
+    // calculate FFT only when fft_in are not all zero
+    for (; i < std::min(n_samples / frame_step + 1, mel.n_len); i += n_threads) {
+        const int offset = i * frame_step;
+
+        // apply Hann window (~10% faster)
+        for (int j = 0; j < std::min(frame_size, n_samples - offset); j++) {
+            fft_in[j] = hann[j] * samples[offset + j];
+        }
+        // fill the rest with zeros
+        if (n_samples - offset < frame_size) {
+            std::fill(fft_in.begin() + (n_samples - offset), fft_in.end(), 0.0);
+        }
+
+        // FFT
+        fft(fft_in.data(), frame_size, fft_out.data());
+
+        // Calculate modulus^2 of complex numbers
+        // Use pow(fft_out[2 * j + 0], 2) + pow(fft_out[2 * j + 1], 2) causes inference quality problem? Interesting.
+        for (int j = 0; j < n_fft; j++) {
+            fft_out[j] = (fft_out[2 * j + 0] * fft_out[2 * j + 0] + fft_out[2 * j + 1] * fft_out[2 * j + 1]);
+        }
+
+        // mel spectrogram
+        for (int j = 0; j < mel.n_mel; j++) {
+            double sum = 0.0;
+
+            // unroll loop (suggested by GH user @lunixbochs)
+            int k = 0;
+            for (k = 0; k < n_fft - 3; k += 4) {
+                sum +=
+                        fft_out[k + 0] * filters.data[j * n_fft + k + 0] +
+                        fft_out[k + 1] * filters.data[j * n_fft + k + 1] +
+                        fft_out[k + 2] * filters.data[j * n_fft + k + 2] +
+                        fft_out[k + 3] * filters.data[j * n_fft + k + 3];
+            }
+
+            // handle n_fft remainder
+            for (; k < n_fft; k++) {
+                sum += fft_out[k] * filters.data[j * n_fft + k];
+            }
+
+            sum = log10(std::max(sum, 1e-10));
+
+            mel.data[j * mel.n_len + i] = sum;
+        }
+    }
+
+    // Otherwise fft_out are all zero
+    double sum = log10(1e-10);
+    for (; i < mel.n_len; i += n_threads) {
+        for (int j = 0; j < mel.n_mel; j++) {
+            mel.data[j * mel.n_len + i] = sum;
+        }
+    }
+}
+
+struct mel_calc_cpu : public whisper_mel_calc {
+    ggml_backend_t m_backend;
+    const whisper_filters & m_filters;
+    mel_calc_cpu(ggml_backend_t backend, const whisper_filters & filters) : m_backend(backend), m_filters(filters) {}
+
+    // ref: https://github.com/openai/whisper/blob/main/whisper/audio.py#L110-L157
+    whisper_mel calculate(whisper_span<const float> ssamples, int n_threads) override {
+        // Hann window
+        const float * hann = global_cache.hann_window;
+
+        // Calculate the length of padding
+        int64_t stage_1_pad = WHISPER_SAMPLE_RATE * 30;
+        int64_t stage_2_pad = WHISPER_N_FFT / 2;
+
+        const int n_samples = int(ssamples.len);
+        const float * samples = ssamples.data;
+
+        // Initialize a vector and copy data from C array to it.
+        std::vector<float> samples_padded;
+        samples_padded.resize(n_samples + stage_1_pad + stage_2_pad * 2);
+        std::copy(samples, samples + n_samples, samples_padded.begin() + stage_2_pad);
+
+        // pad 30 seconds of zeros at the end of audio (480,000 samples) + reflective pad 200 samples at the end of audio
+        std::fill(samples_padded.begin() + n_samples + stage_2_pad, samples_padded.begin() + n_samples + stage_1_pad + 2 * stage_2_pad, 0);
+
+        // reflective pad 200 samples at the beginning of audio
+        std::reverse_copy(samples + 1, samples + 1 + stage_2_pad, samples_padded.begin());
+
+        whisper_mel_data mel;
+        mel.n_mel     = m_filters.n_mel;
+        // https://github.com/pytorch/pytorch/blob/main/aten/src/ATen/native/SpectralOps.cpp#L936
+        // Calculate number of frames + remove the last frame
+        mel.n_len     = (samples_padded.size() - WHISPER_N_FFT) / WHISPER_HOP_LENGTH;
+        // Calculate semi-padded sample length to ensure compatibility
+        mel.n_len_org = 1 + (n_samples + stage_2_pad - WHISPER_N_FFT) / WHISPER_HOP_LENGTH;
+
+        std::vector<float> host_mel_data;
+
+        whisper_mel ret;
+        whisper_mel_init(ret, m_backend, mel.n_len, mel.n_len_org, mel.n_mel);
+        if (ggml_backend_buffer_is_host(ret.buffer)) {
+            mel.data = reinterpret_cast<float*>(ret.tensor->data);
+        } else {
+            host_mel_data.resize(mel.n_len * mel.n_mel);
+            mel.data = host_mel_data.data();
+        }
+
+        {
+            std::vector<std::thread> workers(n_threads - 1);
+            for (int iw = 0; iw < n_threads - 1; ++iw) {
+                workers[iw] = std::thread(
+                        log_mel_spectrogram_worker_thread, iw + 1, hann, samples_padded,
+                        n_samples + stage_2_pad, n_threads,
+                        std::cref(m_filters), std::ref(mel));
+            }
+
+            // main thread
+            log_mel_spectrogram_worker_thread(0, hann, samples_padded, n_samples + stage_2_pad, n_threads, m_filters, mel);
+
+            for (int iw = 0; iw < n_threads - 1; ++iw) {
+                workers[iw].join();
+            }
+        }
+
+        // clamping and normalization
+        double mmax = -1e20;
+        for (int i = 0; i < mel.n_mel*mel.n_len; i++) {
+            if (mel.data[i] > mmax) {
+                mmax = mel.data[i];
+            }
+        }
+
+        mmax -= 8.0;
+
+        for (int i = 0; i < mel.n_mel*mel.n_len; i++) {
+            if (mel.data[i] < mmax) {
+                mel.data[i] = mmax;
+            }
+
+            mel.data[i] = (mel.data[i] + 4.0)/4.0;
+        }
+
+        if (!host_mel_data.empty()) {
+            // the ret buffer is not host-accessible so we used this temporary buffer and now we need to upload it
+            ggml_backend_tensor_set(ret.tensor, host_mel_data.data(), 0, ggml_nbytes(ret.tensor));
+        }
+
+        return ret;
+    }
+};
+}
+
+static whisper_mel_calc * whisper_mel_calc_create(ggml_backend_t backend, const whisper_filters & filters) {
+#if defined(GGML_USE_CUDA) && !defined(GGML_USE_HIPBLAS)
+    if (ggml_backend_is_cuda(backend)) {
+        auto ret = whisper_mel_calc_create_cuda(backend, filters);
+        if (ret) {
+            // run a warmup to avoid the first kernel launch overhead (thus we get the best perf even on the first run)
+            const float warmup[256] = { 0 };
+            ret->calculate({ warmup, 256 }, 1);
+            return ret;
+        }
+    }
+#endif
+
+    // a specialized mel_calc could not be created
+    // fall back to CPU
+    return new mel_calc_cpu(backend, filters);
+}
+
+// split text into tokens
+//
+// ref: https://github.com/openai/gpt-2/blob/a74da5d99abaaba920de8131d64da2862a8f213b/src/encoder.py#L53
+//
+// Regex (Python):
+// r"""'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+"""
+//
+// Regex (C++):
+// R"('s|'t|'re|'ve|'m|'ll|'d| ?[[:alpha:]]+| ?[[:digit:]]+| ?[^\s[:alpha:][:digit:]]+|\s+(?!\S)|\s+)"
+//
+static std::vector<whisper_vocab::id> tokenize(const whisper_vocab & vocab, const std::string & text) {
+    std::vector<std::string> words;
+
+    // first split the text into words
+    {
+        std::string str = text;
+        std::string pat = R"('s|'t|'re|'ve|'m|'ll|'d| ?[[:alpha:]]+| ?[[:digit:]]+| ?[^\s[:alpha:][:digit:]]+|\s+(?!\S)|\s+)";
+
+        std::regex re(pat);
+        std::smatch m;
+
+        while (std::regex_search(str, m, re)) {
+            for (auto x : m) {
+                words.push_back(x);
+            }
+            str = m.suffix();
+        }
+    }
+
+    // find the longest tokens that form the words:
+    std::vector<whisper_vocab::id> tokens;
+    for (const auto & word : words) {
+        if (word.empty()) continue;
+
+        int i = 0;
+        int n = word.size();
+        while (i < n) {
+            int j = n;
+            bool found = false;
+            while (j > i) {
+                auto sub = word.substr(i, j-i);
+                auto it = vocab.token_to_id.find(sub);
+                if (it != vocab.token_to_id.end()) {
+                    tokens.push_back(it->second);
+                    i = j;
+                    found = true;
+                    break;
+                }
+                --j;
+            }
+            if (!found) {
+                WHISPER_LOG_ERROR("unknown token\n");
+                ++i;
+            }
+        }
+    }
+
+    return tokens;
+}
+
+//
+// interface implementation
+//
+
+#ifdef WHISPER_USE_COREML
+// replace .bin with -encoder.mlmodelc
+static std::string whisper_get_coreml_path_encoder(std::string path_bin) {
+    auto pos = path_bin.rfind('.');
+    if (pos != std::string::npos) {
+        path_bin = path_bin.substr(0, pos);
+    }
+
+    // match "-qx_x"
+    pos = path_bin.rfind('-');
+    if (pos != std::string::npos) {
+        auto sub = path_bin.substr(pos);
+        if (sub.size() == 5 && sub[1] == 'q' && sub[3] == '_') {
+            path_bin = path_bin.substr(0, pos);
+        }
+    }
+
+    path_bin += "-encoder.mlmodelc";
+
+    return path_bin;
+}
+#endif
+
+#ifdef WHISPER_USE_OPENVINO
+// replace .bin with-encoder-openvino.xml
+static std::string whisper_openvino_get_path_encoder(std::string path_bin) {
+    auto pos = path_bin.rfind('.');
+    if (pos != std::string::npos) {
+        path_bin = path_bin.substr(0, pos);
+    }
+
+    path_bin += "-encoder-openvino.xml";
+
+    return path_bin;
+}
+
+static std::string whisper_openvino_get_path_cache(std::string path_bin) {
+    auto pos = path_bin.rfind('.');
+    if (pos != std::string::npos) {
+        path_bin = path_bin.substr(0, pos);
+    }
+
+    path_bin += "-encoder-openvino-cache";
+
+    return path_bin;
+}
+#endif
+
+struct whisper_state * whisper_init_state(whisper_context * ctx) {
+    whisper_state * state = new whisper_state;
+
+    state->backends = whisper_backend_init(ctx->params);
+    if (state->backends.empty()) {
+        WHISPER_LOG_ERROR("%s: whisper_backend_init() failed\n", __func__);
+        whisper_free_state(state);
+        return nullptr;
+    }
+
+    state->mel_calc = whisper_mel_calc_create(state->backends[0], ctx->model.filters);
+
+    // init 60s of random mel data
+    {
+        const int n_len = 2*100*WHISPER_CHUNK_SIZE;
+        const int n_mel = ctx->model.filters.n_mel;
+
+        whisper_mel_free(state->mel);
+        whisper_mel_init(state->mel, state->backends[0], n_len, n_len, n_mel);
+    }
+
+    // at this point, we don't know yet how many decoders will be used, so we overallocate 3x ctx
+    // in theory, there can be a case where this is not enough, but in practice it should always be enough
+    const int factor = 3;
+
+    if (!whisper_kv_cache_init(state->kv_self, state->backends[0], ctx->itype,
+                ctx->model.hparams.n_text_state,
+                ctx->model.hparams.n_text_layer,
+                GGML_PAD(ctx->model.hparams.n_text_ctx, 256)*factor)) {
+        WHISPER_LOG_ERROR("%s: whisper_kv_cache_init() failed for self-attention cache\n", __func__);
+        whisper_free_state(state);
+        return nullptr;
+    }
+
+    {
+        const size_t memory_size = ggml_nbytes(state->kv_self.k) + ggml_nbytes(state->kv_self.v);
+        WHISPER_LOG_INFO("%s: kv self size  = %7.2f MB\n", __func__, memory_size / 1e6);
+    }
+
+    if (!whisper_kv_cache_init(state->kv_cross, state->backends[0], ctx->itype,
+                ctx->model.hparams.n_text_state,
+                ctx->model.hparams.n_text_layer,
+                GGML_PAD(ctx->model.hparams.n_audio_ctx, 256))) {
+        WHISPER_LOG_ERROR("%s: whisper_kv_cache_init() failed for cross-attention cache\n", __func__);
+        whisper_free_state(state);
+        return nullptr;
+    }
+
+    {
+        const size_t memory_size = ggml_nbytes(state->kv_cross.k) + ggml_nbytes(state->kv_cross.v);
+        WHISPER_LOG_INFO("%s: kv cross size = %7.2f MB\n", __func__, memory_size / 1e6);
+    }
+
+    if (!whisper_kv_cache_init(state->kv_pad, state->backends[0], ctx->itype,
+                ctx->model.hparams.n_audio_state,
+                1,
+                GGML_PAD(ctx->model.hparams.n_audio_ctx, 256))) {
+        WHISPER_LOG_ERROR("%s: whisper_kv_cache_init() failed for self-attention cache\n", __func__);
+        whisper_free_state(state);
+        return nullptr;
+    }
+
+    {
+        const size_t memory_size = ggml_nbytes(state->kv_pad.k) + ggml_nbytes(state->kv_pad.v);
+        WHISPER_LOG_INFO("%s: kv pad  size  = %7.2f MB\n", __func__, memory_size / 1e6);
+    }
+
+    // [EXPERIMENTAL] Token-level timestamps with DTW
+    if (ctx->params.dtw_token_timestamps) {
+        if (!aheads_masks_init(ctx->params, ctx->model.hparams, state->aheads_masks, state->backends[0])) {
+            WHISPER_LOG_ERROR("%s: aheads_masks_init() failed for alignment heads masks\n", __func__);
+            whisper_free_state(state);
+            return nullptr;
+        }
+        const size_t memory_size = aheads_masks_nbytes(state->aheads_masks);
+        WHISPER_LOG_INFO("%s: alignment heads masks size = %ld B\n", __func__, memory_size);
+    }
+
+#ifdef WHISPER_USE_COREML
+    const auto path_coreml = whisper_get_coreml_path_encoder(ctx->path_model);
+
+    WHISPER_LOG_INFO("%s: loading Core ML model from '%s'\n", __func__, path_coreml.c_str());
+    WHISPER_LOG_INFO("%s: first run on a device may take a while ...\n", __func__);
+
+    state->ctx_coreml = whisper_coreml_init(path_coreml.c_str());
+    if (!state->ctx_coreml) {
+        WHISPER_LOG_ERROR("%s: failed to load Core ML model from '%s'\n", __func__, path_coreml.c_str());
+#ifndef WHISPER_COREML_ALLOW_FALLBACK
+        whisper_free_state(state);
+        return nullptr;
+#endif
+    } else {
+        WHISPER_LOG_INFO("%s: Core ML model loaded\n", __func__);
+    }
+#endif
+
+    state->logits.reserve(ctx->vocab.n_vocab * ctx->model.hparams.n_text_ctx);
+
+    state->batch = whisper_batch_init(ctx->model.hparams.n_text_ctx, WHISPER_MAX_DECODERS);
+
+    // TAGS: WHISPER_DECODER_INIT
+    state->decoders[0].sequence.tokens.reserve(ctx->model.hparams.n_text_ctx);
+
+    state->decoders[0].probs.reserve    (ctx->vocab.n_vocab);
+    state->decoders[0].logits.reserve   (ctx->vocab.n_vocab);
+    state->decoders[0].logprobs.reserve (ctx->vocab.n_vocab);
+    state->decoders[0].logits_id.reserve(ctx->model.hparams.n_vocab);
+
+    state->decoders[0].rng = std::mt19937(0);
+
+    // conv allocator
+    {
+        bool ok = whisper_sched_graph_init(state->sched_conv, state->backends,
+                [&]() {
+                    return whisper_build_graph_conv(*ctx, *state, 0);
+                });
+
+        if (!ok) {
+            WHISPER_LOG_ERROR("%s: failed to init conv allocator\n", __func__);
+            whisper_free_state(state);
+            return nullptr;
+        }
+
+        WHISPER_LOG_INFO("%s: compute buffer (conv)   = %7.2f MB\n", __func__, whisper_sched_size(state->sched_conv) / 1e6);
+    }
+
+    // encoder allocator
+    if (!whisper_encode_external(*state)) {
+        bool ok = whisper_sched_graph_init(state->sched_encode, state->backends,
+                [&]() {
+                    return whisper_build_graph_encoder(*ctx, *state);
+                });
+
+        if (!ok) {
+            WHISPER_LOG_ERROR("%s: failed to init encoder allocator\n", __func__);
+            whisper_free_state(state);
+            return nullptr;
+        }
+
+        WHISPER_LOG_INFO("%s: compute buffer (encode) = %7.2f MB\n", __func__, whisper_sched_size(state->sched_encode) / 1e6);
+    }
+
+    // cross allocator
+    {
+        bool ok = whisper_sched_graph_init(state->sched_cross, state->backends,
+                [&]() {
+                    return whisper_build_graph_cross(*ctx, *state);
+                });
+
+        if (!ok) {
+            WHISPER_LOG_ERROR("%s: failed to init cross allocator\n", __func__);
+            whisper_free_state(state);
+            return nullptr;
+        }
+
+        WHISPER_LOG_INFO("%s: compute buffer (cross)  = %7.2f MB\n", __func__, whisper_sched_size(state->sched_cross) / 1e6);
+    }
+
+    // decoder allocator
+    {
+        bool ok = whisper_sched_graph_init(state->sched_decode, state->backends,
+                [&]() {
+                    const auto & hparams = ctx->model.hparams;
+
+                    // TODO: make sure this is the worst-case scenario
+                    const int n_tokens = hparams.n_text_ctx;
+                    const int n_past   = 0;
+
+                    whisper_batch_prep_legacy(state->batch, nullptr, n_tokens, n_past, 0);
+
+                    return whisper_build_graph_decoder(*ctx, *state, state->batch, ctx->params.dtw_token_timestamps, true);
+                });
+
+        if (!ok) {
+            WHISPER_LOG_ERROR("%s: failed to init decoder allocator\n", __func__);
+            whisper_free_state(state);
+            return nullptr;
+        }
+
+        WHISPER_LOG_INFO("%s: compute buffer (decode) = %7.2f MB\n", __func__, whisper_sched_size(state->sched_decode) / 1e6);
+    }
+
+    return state;
+}
+
+int whisper_ctx_init_openvino_encoder(
+        struct whisper_context * ctx,
+                    const char * model_path,
+                    const char * device,
+                    const char * cache_dir) {
+#ifndef WHISPER_USE_OPENVINO
+    (void)(ctx);
+    (void)(model_path);
+    (void)(device);
+    (void)(cache_dir);
+
+    return 1;
+#else
+    if (!model_path && ctx->path_model.empty()) {
+        WHISPER_LOG_ERROR("%s: model_path is nullptr, and ctx has no model_path set.\n", __func__);
+        return 1;
+    }
+
+    std::string path_encoder;
+    if (!model_path) {
+        //if model_path is not set, attempt to find it in the same directory as ggml-<model>.bin model
+        path_encoder = whisper_openvino_get_path_encoder(ctx->path_model);
+    } else {
+        path_encoder = model_path;
+    }
+
+    std::string path_cache;
+    if (!cache_dir) {
+        //if cache_dir is not set, set it as a dir residing next to ggml-<model>.bin
+        path_cache = whisper_openvino_get_path_cache(ctx->path_model);
+    } else {
+        path_cache = cache_dir;
+    }
+
+    WHISPER_LOG_INFO("%s: loading OpenVINO model from '%s'\n", __func__, path_encoder.c_str());
+    WHISPER_LOG_INFO("%s: first run on a device may take a while ...\n", __func__);
+
+    ctx->state->ctx_openvino = whisper_openvino_init(path_encoder.c_str(), device, path_cache.c_str());
+    if (!ctx->state->ctx_openvino) {
+        WHISPER_LOG_ERROR("%s: failed to init OpenVINO encoder from '%s'\n", __func__, path_encoder.c_str());
+        return 1;
+    } else {
+        WHISPER_LOG_INFO("%s: OpenVINO model loaded\n", __func__);
+    }
+
+    return 0;
+#endif
+}
+
+struct whisper_context_params whisper_context_default_params() {
+    struct whisper_context_params result = {
+        /*.use_gpu              =*/ true,
+        /*.flash_attn           =*/ false,
+        /*.gpu_device           =*/ 0,
+
+        /*.dtw_token_timestamps =*/ false,
+        /*.dtw_aheads_preset    =*/ WHISPER_AHEADS_NONE,
+        /*.dtw_n_top            =*/ -1,
+        /*.dtw_aheads           =*/ {
+            /*.n_heads          =*/ 0,
+            /*.heads            =*/ NULL,
+        },
+        /*.dtw_mem_size         =*/ 1024*1024*128,
+    };
+    return result;
+}
+
+struct whisper_context * whisper_init_from_file_with_params_no_state(const char * path_model, struct whisper_context_params params) {
+    WHISPER_LOG_INFO("%s: loading model from '%s'\n", __func__, path_model);
+#ifdef _MSC_VER
+    // Convert UTF-8 path to wide string (UTF-16) for Windows, resolving character encoding issues.
+    std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
+    std::wstring path_model_wide = converter.from_bytes(path_model);
+    auto fin = std::ifstream(path_model_wide, std::ios::binary);
+#else
+    auto fin = std::ifstream(path_model, std::ios::binary);
+#endif
+    if (!fin) {
+        WHISPER_LOG_ERROR("%s: failed to open '%s'\n", __func__, path_model);
+        return nullptr;
+    }
+
+    whisper_model_loader loader = {};
+
+    loader.context = &fin;
+
+    loader.read = [](void * ctx, void * output, size_t read_size) {
+        std::ifstream * fin = (std::ifstream*)ctx;
+        fin->read((char *)output, read_size);
+        return read_size;
+    };
+
+    loader.eof = [](void * ctx) {
+        std::ifstream * fin = (std::ifstream*)ctx;
+        return fin->eof();
+    };
+
+    loader.close = [](void * ctx) {
+        std::ifstream * fin = (std::ifstream*)ctx;
+        fin->close();
+    };
+
+    auto ctx = whisper_init_with_params_no_state(&loader, params);
+
+    if (ctx) {
+        ctx->path_model = path_model;
+    }
+
+    return ctx;
+}
+
+struct whisper_context * whisper_init_from_buffer_with_params_no_state(void * buffer, size_t buffer_size, struct whisper_context_params params) {
+    struct buf_context {
+        uint8_t* buffer;
+        size_t size;
+        size_t current_offset;
+    };
+
+    buf_context ctx = { reinterpret_cast<uint8_t*>(buffer), buffer_size, 0 };
+
+    WHISPER_LOG_INFO("%s: loading model from buffer\n", __func__);
+
+    whisper_model_loader loader = {};
+
+    loader.context = &ctx;
+
+    loader.read = [](void * ctx, void * output, size_t read_size) {
+        buf_context * buf = reinterpret_cast<buf_context *>(ctx);
+
+        size_t size_to_copy = buf->current_offset + read_size < buf->size ? read_size : buf->size - buf->current_offset;
+
+        memcpy(output, buf->buffer + buf->current_offset, size_to_copy);
+        buf->current_offset += size_to_copy;
+
+        return size_to_copy;
+    };
+
+    loader.eof = [](void * ctx) {
+        buf_context * buf = reinterpret_cast<buf_context *>(ctx);
+
+        return buf->current_offset >= buf->size;
+    };
+
+    loader.close = [](void * /*ctx*/) { };
+
+    return whisper_init_with_params_no_state(&loader, params);
+}
+
+struct whisper_context * whisper_init_with_params_no_state(struct whisper_model_loader * loader, struct whisper_context_params params) {
+    ggml_time_init();
+
+    if (params.flash_attn && params.dtw_token_timestamps) {
+        WHISPER_LOG_WARN("%s: dtw_token_timestamps is not supported with flash_attn - disabling\n", __func__);
+        params.dtw_token_timestamps = false;
+    }
+
+    WHISPER_LOG_INFO("%s: use gpu    = %d\n", __func__, params.use_gpu);
+    WHISPER_LOG_INFO("%s: flash attn = %d\n", __func__, params.flash_attn);
+    WHISPER_LOG_INFO("%s: gpu_device = %d\n", __func__, params.gpu_device);
+    WHISPER_LOG_INFO("%s: dtw        = %d\n", __func__, params.dtw_token_timestamps);
+
+    whisper_context * ctx = new whisper_context;
+    ctx->params = params;
+
+    if (!whisper_model_load(loader, *ctx)) {
+        loader->close(loader->context);
+        WHISPER_LOG_ERROR("%s: failed to load model\n", __func__);
+        delete ctx;
+        return nullptr;
+    }
+
+    loader->close(loader->context);
+
+    return ctx;
+}
+
+struct whisper_context * whisper_init_from_file_with_params(const char * path_model, struct whisper_context_params params) {
+    whisper_context * ctx = whisper_init_from_file_with_params_no_state(path_model, params);
+    if (!ctx) {
+        return nullptr;
+    }
+
+    ctx->state = whisper_init_state(ctx);
+    if (!ctx->state) {
+        whisper_free(ctx);
+        return nullptr;
+    }
+
+    return ctx;
+}
+
+struct whisper_context * whisper_init_from_buffer_with_params(void * buffer, size_t buffer_size, struct whisper_context_params params) {
+    whisper_context * ctx = whisper_init_from_buffer_with_params_no_state(buffer, buffer_size, params);
+    if (!ctx) {
+        return nullptr;
+    }
+
+    ctx->state = whisper_init_state(ctx);
+    if (!ctx->state) {
+        whisper_free(ctx);
+        return nullptr;
+    }
+
+    return ctx;
+}
+
+struct whisper_context * whisper_init_with_params(struct whisper_model_loader * loader, struct whisper_context_params params) {
+    whisper_context * ctx = whisper_init_with_params_no_state(loader, params);
+    if (!ctx) {
+        return nullptr;
+    }
+
+    ctx->state = whisper_init_state(ctx);
+    if (!ctx->state) {
+        whisper_free(ctx);
+        return nullptr;
+    }
+
+    return ctx;
+}
+
+struct whisper_context * whisper_init_from_file(const char * path_model) {
+    return whisper_init_from_file_with_params(path_model, whisper_context_default_params());
+}
+
+struct whisper_context * whisper_init_from_buffer(void * buffer, size_t buffer_size) {
+    return whisper_init_from_buffer_with_params(buffer, buffer_size, whisper_context_default_params());
+}
+
+struct whisper_context * whisper_init(struct whisper_model_loader * loader) {
+    return whisper_init_with_params(loader, whisper_context_default_params());
+}
+
+struct whisper_context * whisper_init_from_file_no_state(const char * path_model) {
+    return whisper_init_from_file_with_params_no_state(path_model, whisper_context_default_params());
+}
+
+struct whisper_context * whisper_init_from_buffer_no_state(void * buffer, size_t buffer_size) {
+    return whisper_init_from_buffer_with_params_no_state(buffer, buffer_size, whisper_context_default_params());
+}
+
+struct whisper_context * whisper_init_no_state(struct whisper_model_loader * loader) {
+    return whisper_init_with_params_no_state(loader, whisper_context_default_params());
+}
+
+void whisper_free_state(struct whisper_state * state) {
+    if (state) {
+        whisper_kv_cache_free(state->kv_self);
+        whisper_kv_cache_free(state->kv_cross);
+        whisper_kv_cache_free(state->kv_pad);
+
+        whisper_mel_free(state->mel);
+
+        delete state->mel_calc;
+        state->mel_calc = nullptr;
+        delete state->mel_calc_fallback;
+        state->mel_calc_fallback = nullptr;
+
+#ifdef WHISPER_USE_COREML
+        if (state->ctx_coreml != nullptr) {
+            whisper_coreml_free(state->ctx_coreml);
+            state->ctx_coreml = nullptr;
+        }
+#endif
+
+#ifdef WHISPER_USE_OPENVINO
+        if (state->ctx_openvino != nullptr) {
+            whisper_openvino_free(state->ctx_openvino);
+            state->ctx_openvino = nullptr;
+        }
+#endif
+
+        whisper_batch_free(state->batch);
+
+        ggml_backend_sched_free(state->sched_conv.sched);
+        ggml_backend_sched_free(state->sched_encode.sched);
+        ggml_backend_sched_free(state->sched_cross.sched);
+        ggml_backend_sched_free(state->sched_decode.sched);
+
+        for (auto & backend : state->backends) {
+            ggml_backend_free(backend);
+        }
+
+        // [EXPERIMENTAL] Token-level timestamps with DTW
+        aheads_masks_free(state->aheads_masks);
+
+        delete state;
+    }
+}
+
+void whisper_free(struct whisper_context * ctx) {
+    if (ctx) {
+        ggml_free(ctx->model.ctx);
+
+        ggml_backend_buffer_free(ctx->model.buffer);
+
+        whisper_free_state(ctx->state);
+
+        delete ctx;
+    }
+}
+
+void whisper_free_context_params(struct whisper_context_params * params) {
+    if (params) {
+        delete params;
+    }
+}
+
+void whisper_free_params(struct whisper_full_params * params) {
+    if (params) {
+        delete params;
+    }
+}
+
+int whisper_pcm_to_mel_with_state(struct whisper_context * ctx, struct whisper_state * state, const float * samples, int n_samples, int n_threads) {
+    const int64_t t_start_us = ggml_time_us();
+
+    whisper_mel_free(state->mel);
+    if (n_samples <= 5 * 60 * WHISPER_SAMPLE_RATE) {
+        // calculate mel spectrogram for lengths up to 5 minutes on the most optimal mel calculator
+        state->mel = state->mel_calc->calculate({samples, n_samples}, n_threads);
+    } else {
+        // calcuate mel spectrogram for longer audios on the CPU
+        // 1. gpu calculations may use hundreds of megabytes of memory for longer audios so we're being conservative
+        //    with our gpu demands
+        // 2. the time to transcribe audios this long will be dominated by the decoding time, so the mel calculation
+        //    taking longer is not a major concern
+        if (!state->mel_calc_fallback) {
+            state->mel_calc_fallback = new mel_calc_cpu(state->backends[0], ctx->model.filters);
+        }
+        state->mel = state->mel_calc_fallback->calculate({samples, n_samples}, n_threads);
+    }
+
+    state->t_mel_us += ggml_time_us() - t_start_us;
+
+    // Dump log_mel_spectrogram
+    //{
+    //    auto& mel = state->mel;
+    //    std::ofstream outFile("log_mel_spectrogram.json");
+    //    outFile << "[";
+    //    for (uint64_t i = 0; i < mel.data.size() - 1; i++) {
+    //        outFile << mel.data[i] << ", ";
+    //    }
+    //    outFile << mel.data[mel.data.size() - 1] << "]";
+    //    outFile.close();
+    //}
+    return 0;
+}
+
+int whisper_pcm_to_mel(struct whisper_context * ctx, const float * samples, int n_samples, int n_threads) {
+    return whisper_pcm_to_mel_with_state(ctx, ctx->state, samples, n_samples, n_threads);
+}
+
+int whisper_set_mel_with_state(
+        struct whisper_context * ctx,
+          struct whisper_state * state,
+                   const float * data,
+                           int   n_len,
+                           int   n_mel) {
+    if (n_mel != ctx->model.filters.n_mel) {
+        WHISPER_LOG_ERROR("%s: invalid number of mel bands: %d (expected %d)\n", __func__, n_mel, ctx->model.filters.n_mel);
+        return -1;
+    }
+
+    whisper_mel_free(state->mel);
+    whisper_mel_init(state->mel, state->backends[0], n_len, n_len, n_mel);
+
+    ggml_backend_tensor_set(state->mel.tensor, data, 0, ggml_nbytes(state->mel.tensor));
+
+    return 0;
+}
+
+int whisper_set_mel(
+        struct whisper_context * ctx,
+        const float * data,
+        int n_len,
+        int n_mel) {
+    return whisper_set_mel_with_state(ctx, ctx->state, data, n_len, n_mel);
+}
+
+int whisper_encode_with_state(struct whisper_context * ctx, struct whisper_state * state, int offset, int n_threads) {
+    if (!whisper_encode_internal(*ctx, *state, offset, n_threads, nullptr, nullptr)) {
+        WHISPER_LOG_ERROR("%s: failed to eval\n", __func__);
+        return -1;
+    }
+
+    return 0;
+}
+
+int whisper_encode(struct whisper_context * ctx, int offset, int n_threads) {
+    if (!whisper_encode_internal(*ctx, *ctx->state, offset, n_threads, nullptr, nullptr)) {
+        WHISPER_LOG_ERROR("%s: failed to eval\n", __func__);
+        return -1;
+    }
+
+    return 0;
+}
+
+int whisper_decode_with_state(struct whisper_context * ctx, struct whisper_state * state, const whisper_token * tokens, int n_tokens, int n_past, int n_threads) {
+    whisper_batch_prep_legacy(state->batch, tokens, n_tokens, n_past, 0);
+
+    whisper_kv_cache_seq_rm(state->kv_self, 0, n_past, -1);
+
+    if (!whisper_decode_internal(*ctx, *state, state->batch, n_threads, false, nullptr, nullptr)) {
+        WHISPER_LOG_ERROR("%s: failed to eval\n", __func__);
+        return 1;
+    }
+
+    return 0;
+}
+
+int whisper_decode(struct whisper_context * ctx, const whisper_token * tokens, int n_tokens, int n_past, int n_threads) {
+    if (ctx->state == nullptr) {
+        WHISPER_LOG_ERROR("%s: ERROR state was not loaded.\n", __func__);
+        return -1;
+    }
+
+    return whisper_decode_with_state(ctx, ctx->state, tokens, n_tokens, n_past, n_threads);
+}
+
+int whisper_tokenize(struct whisper_context * ctx, const char * text, whisper_token * tokens, int n_max_tokens) {
+    const auto res = tokenize(ctx->vocab, text);
+
+    if (n_max_tokens < (int) res.size()) {
+        WHISPER_LOG_ERROR("%s: too many resulting tokens: %d (max %d)\n", __func__, (int) res.size(), n_max_tokens);
+        return -(int) res.size();
+    }
+
+    for (int i = 0; i < (int) res.size(); i++) {
+        tokens[i] = res[i];
+    }
+
+    return res.size();
+}
+
+int whisper_token_count(struct whisper_context * ctx, const char * text) {
+    return -whisper_tokenize(ctx, text, NULL, 0);
+}
+
+int whisper_lang_max_id(void) {
+    auto max_id = 0;
+    for (const auto & kv : g_lang) {
+        max_id = std::max(max_id, kv.second.first);
+    }
+
+    return max_id;
+}
+
+int whisper_lang_id(const char * lang) {
+    if (!g_lang.count(lang)) {
+        for (const auto & kv : g_lang) {
+            if (kv.second.second == lang) {
+                return kv.second.first;
+            }
+        }
+
+        WHISPER_LOG_ERROR("%s: unknown language '%s'\n", __func__, lang);
+        return -1;
+    }
+    return g_lang.at(lang).first;
+}
+
+const char * whisper_lang_str(int id) {
+    for (const auto & kv : g_lang) {
+        if (kv.second.first == id) {
+            return kv.first.c_str();
+        }
+    }
+
+    WHISPER_LOG_ERROR("%s: unknown language id %d\n", __func__, id);
+    return nullptr;
+}
+
+const char * whisper_lang_str_full(int id) {
+   for (const auto & kv : g_lang) {
+        if (kv.second.first == id) {
+            return kv.second.second.c_str();
+        }
+    }
+
+    WHISPER_LOG_ERROR("%s: unknown language id %d\n", __func__, id);
+    return nullptr;
+}
+
+int whisper_lang_auto_detect_with_state(
+        struct whisper_context * ctx,
+          struct whisper_state * state,
+                           int   offset_ms,
+                           int   n_threads,
+                         float * lang_probs) {
+    const int seek = offset_ms/10;
+
+    if (seek < 0) {
+        WHISPER_LOG_ERROR("%s: offset %dms is before the start of the audio\n", __func__, offset_ms);
+        return -1;
+    }
+
+    if (seek >= state->mel.n_len_org) {
+        WHISPER_LOG_ERROR("%s: offset %dms is past the end of the audio (%dms)\n", __func__, offset_ms, state->mel.n_len_org*10);
+        return -2;
+    }
+
+    // run the encoder
+    if (whisper_encode_with_state(ctx, state, seek, n_threads) != 0) {
+        WHISPER_LOG_ERROR("%s: failed to encode\n", __func__);
+        return -6;
+    }
+
+    const std::vector<whisper_token> prompt = { whisper_token_sot(ctx) };
+
+    if (whisper_decode_with_state(ctx, state, prompt.data(), prompt.size(), 0, n_threads) != 0) {
+        WHISPER_LOG_ERROR("%s: failed to decode\n", __func__);
+        return -7;
+    }
+
+    auto & logits_id = state->decoders[0].logits_id;
+    logits_id.clear();
+
+    for (const auto & kv : g_lang) {
+        const auto token_lang = whisper_token_lang(ctx, kv.second.first);
+        logits_id.emplace_back(state->logits[token_lang], kv.second.first);
+    }
+
+    // sort descending
+    {
+        using pair_type = std::remove_reference<decltype(logits_id)>::type::value_type;
+        std::sort(logits_id.begin(), logits_id.end(), [](const pair_type & a, const pair_type & b) {
+            return a.first > b.first;
+        });
+    }
+
+    // softmax
+    {
+        const auto max = logits_id[0].first;
+
+        double sum = 0.0f;
+        for (auto & kv : logits_id) {
+            kv.first = exp(kv.first - max);
+            sum += kv.first;
+        }
+
+        for (auto & kv : logits_id) {
+            kv.first /= sum;
+        }
+    }
+
+    {
+        for (const auto & prob : logits_id) {
+            if (lang_probs) {
+                lang_probs[prob.second] = prob.first;
+            }
+
+            //printf("%s: lang %2d (%3s): %f\n", __func__, prob.second, whisper_lang_str(prob.second), prob.first);
+        }
+    }
+
+    return logits_id[0].second;
+}
+
+int whisper_lang_auto_detect(
+        struct whisper_context * ctx,
+                           int   offset_ms,
+                           int   n_threads,
+                         float * lang_probs) {
+    return whisper_lang_auto_detect_with_state(ctx, ctx->state, offset_ms, n_threads, lang_probs);
+}
+
+int whisper_model_n_vocab(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_vocab;
+}
+
+int whisper_model_n_audio_ctx(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_audio_ctx;
+}
+
+int whisper_model_n_audio_state(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_audio_state;
+}
+
+int whisper_model_n_audio_head(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_audio_head;
+}
+
+int whisper_model_n_audio_layer(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_audio_layer;
+}
+
+int whisper_model_n_text_ctx(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_text_ctx;
+}
+
+int whisper_model_n_text_state(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_text_state;
+}
+
+int whisper_model_n_text_head(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_text_head;
+}
+
+int whisper_model_n_text_layer(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_text_layer;
+}
+
+int whisper_model_n_mels(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_mels;
+}
+
+int whisper_model_ftype(struct whisper_context * ctx) {
+    return ctx->model.hparams.ftype;
+}
+
+int whisper_model_type(struct whisper_context * ctx) {
+    return ctx->model.type;
+}
+
+const char *whisper_model_type_readable(struct whisper_context * ctx) {
+    switch (ctx->model.type) {
+    case e_model::MODEL_TINY:
+        return "tiny";
+    case e_model::MODEL_BASE:
+        return "base";
+    case e_model::MODEL_SMALL:
+        return "small";
+    case e_model::MODEL_MEDIUM:
+        return "medium";
+    case e_model::MODEL_LARGE:
+        return "large";
+    default:
+        return "unknown";
+    }
+}
+
+int whisper_n_len_from_state(struct whisper_state * state) {
+    return state->mel.n_len_org;
+}
+
+int whisper_n_len(struct whisper_context * ctx) {
+    return ctx->state->mel.n_len_org;
+}
+
+int whisper_n_vocab(struct whisper_context * ctx) {
+    return ctx->vocab.n_vocab;
+}
+
+int whisper_n_text_ctx(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_text_ctx;
+}
+
+int whisper_n_audio_ctx(struct whisper_context * ctx) {
+    return ctx->model.hparams.n_audio_ctx;
+}
+
+int whisper_is_multilingual(struct whisper_context * ctx) {
+    return ctx->vocab.is_multilingual() ? 1 : 0;
+}
+
+float * whisper_get_logits(struct whisper_context * ctx) {
+    return ctx->state->logits.data();
+}
+
+float * whisper_get_logits_from_state(struct whisper_state * state) {
+    return state->logits.data();
+}
+
+const char * whisper_token_to_str(struct whisper_context * ctx, whisper_token token) {
+    return ctx->vocab.id_to_token.at(token).c_str();
+}
+
+whisper_token whisper_token_eot(struct whisper_context * ctx) {
+    return ctx->vocab.token_eot;
+}
+
+whisper_token whisper_token_sot(struct whisper_context * ctx) {
+    return ctx->vocab.token_sot;
+}
+
+whisper_token whisper_token_solm(struct whisper_context * ctx) {
+    return ctx->vocab.token_solm;
+}
+
+whisper_token whisper_token_prev(struct whisper_context * ctx) {
+    return ctx->vocab.token_prev;
+}
+
+whisper_token whisper_token_nosp(struct whisper_context * ctx) {
+    return ctx->vocab.token_nosp;
+}
+
+whisper_token whisper_token_not(struct whisper_context * ctx) {
+    return ctx->vocab.token_not;
+}
+
+whisper_token whisper_token_beg(struct whisper_context * ctx) {
+    return ctx->vocab.token_beg;
+}
+
+whisper_token whisper_token_lang(struct whisper_context * ctx, int lang_id) {
+    return whisper_token_sot(ctx) + 1 + lang_id;
+}
+
+whisper_token whisper_token_translate(struct whisper_context * ctx) {
+    return ctx->vocab.token_translate;
+}
+
+whisper_token whisper_token_transcribe(struct whisper_context * ctx) {
+    return ctx->vocab.token_transcribe;
+}
+
+void whisper_print_timings(struct whisper_context * ctx) {
+    const int64_t t_end_us = ggml_time_us();
+
+    WHISPER_LOG_INFO("\n");
+    WHISPER_LOG_INFO("%s:     load time = %8.2f ms\n", __func__, ctx->t_load_us / 1000.0f);
+    if (ctx->state != nullptr) {
+
+        const int32_t n_sample = std::max(1, ctx->state->n_sample);
+        const int32_t n_encode = std::max(1, ctx->state->n_encode);
+        const int32_t n_decode = std::max(1, ctx->state->n_decode);
+        const int32_t n_batchd = std::max(1, ctx->state->n_batchd);
+        const int32_t n_prompt = std::max(1, ctx->state->n_prompt);
+
+        WHISPER_LOG_INFO("%s:     fallbacks = %3d p / %3d h\n", __func__, ctx->state->n_fail_p, ctx->state->n_fail_h);
+        WHISPER_LOG_INFO("%s:      mel time = %8.2f ms\n", __func__, ctx->state->t_mel_us / 1000.0f);
+        WHISPER_LOG_INFO("%s:   sample time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_sample_us, n_sample, 1e-3f * ctx->state->t_sample_us / n_sample);
+        WHISPER_LOG_INFO("%s:   encode time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_encode_us, n_encode, 1e-3f * ctx->state->t_encode_us / n_encode);
+        WHISPER_LOG_INFO("%s:   decode time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_decode_us, n_decode, 1e-3f * ctx->state->t_decode_us / n_decode);
+        WHISPER_LOG_INFO("%s:   batchd time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_batchd_us, n_batchd, 1e-3f * ctx->state->t_batchd_us / n_batchd);
+        WHISPER_LOG_INFO("%s:   prompt time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_prompt_us, n_prompt, 1e-3f * ctx->state->t_prompt_us / n_prompt);
+    }
+    WHISPER_LOG_INFO("%s:    total time = %8.2f ms\n", __func__, (t_end_us - ctx->t_start_us)/1000.0f);
+}
+
+void whisper_reset_timings(struct whisper_context * ctx) {
+    ctx->t_start_us = ggml_time_us();
+    if (ctx->state != nullptr) {
+        ctx->state->t_mel_us = 0;
+        ctx->state->t_sample_us = 0;
+        ctx->state->t_encode_us = 0;
+        ctx->state->t_decode_us = 0;
+        ctx->state->t_batchd_us = 0;
+        ctx->state->t_prompt_us = 0;
+        ctx->state->n_sample = 0;
+        ctx->state->n_encode = 0;
+        ctx->state->n_decode = 0;
+        ctx->state->n_batchd = 0;
+        ctx->state->n_prompt = 0;
+    }
+}
+
+static int whisper_has_coreml(void) {
+#ifdef WHISPER_USE_COREML
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+static int whisper_has_openvino(void) {
+#ifdef WHISPER_USE_OPENVINO
+    return 1;
+#else
+    return 0;
+#endif
+}
+
+const char * whisper_print_system_info(void) {
+    static std::string s;
+
+    s  = "";
+    s += "AVX = "       + std::to_string(ggml_cpu_has_avx())       + " | ";
+    s += "AVX2 = "      + std::to_string(ggml_cpu_has_avx2())      + " | ";
+    s += "AVX512 = "    + std::to_string(ggml_cpu_has_avx512())    + " | ";
+    s += "FMA = "       + std::to_string(ggml_cpu_has_fma())       + " | ";
+    s += "NEON = "      + std::to_string(ggml_cpu_has_neon())      + " | ";
+    s += "ARM_FMA = "   + std::to_string(ggml_cpu_has_arm_fma())   + " | ";
+    s += "METAL = "     + std::to_string(ggml_cpu_has_metal())     + " | ";
+    s += "F16C = "      + std::to_string(ggml_cpu_has_f16c())      + " | ";
+    s += "FP16_VA = "   + std::to_string(ggml_cpu_has_fp16_va())   + " | ";
+    s += "WASM_SIMD = " + std::to_string(ggml_cpu_has_wasm_simd()) + " | ";
+    s += "BLAS = "      + std::to_string(ggml_cpu_has_blas())      + " | ";
+    s += "SSE3 = "      + std::to_string(ggml_cpu_has_sse3())      + " | ";
+    s += "SSSE3 = "     + std::to_string(ggml_cpu_has_ssse3())     + " | ";
+    s += "VSX = "       + std::to_string(ggml_cpu_has_vsx())       + " | ";
+    s += "CUDA = "      + std::to_string(ggml_cpu_has_cuda())      + " | ";
+    s += "COREML = "    + std::to_string(whisper_has_coreml())     + " | ";
+    s += "OPENVINO = "  + std::to_string(whisper_has_openvino())          ;
+
+    return s.c_str();
+}
+
+//////////////////////////////////
+// Grammar - ported from llama.cpp
+//////////////////////////////////
+
+// Decodes a UTF-8 string which may end in an incomplete sequence. Adds a terminating 0 for use as
+// pointer. If an invalid sequence is encountered, returns `whisper_partial_utf8.n_remain == -1`.
+static std::pair<std::vector<uint32_t>, whisper_partial_utf8> decode_utf8(
+        const char         * src,
+        whisper_partial_utf8   partial_start) {
+    static const int      lookup[] = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 3, 4 };
+    const char          * pos      = src;
+    std::vector<uint32_t> code_points;
+    uint32_t              value    = partial_start.value;
+    int                   n_remain = partial_start.n_remain;
+
+    // continue previous decode, if applicable
+    while (*pos != 0 && n_remain > 0) {
+        uint8_t next_byte = static_cast<uint8_t>(*pos);
+        if ((next_byte >> 6) != 2) {
+            // invalid sequence, abort
+            code_points.push_back(0);
+            return std::make_pair(std::move(code_points), whisper_partial_utf8{ 0, -1 });
+        }
+        value = (value << 6) + (next_byte & 0x3F);
+        ++pos;
+        --n_remain;
+    }
+
+    if (partial_start.n_remain > 0 && n_remain == 0) {
+        code_points.push_back(value);
+    }
+
+    // decode any subsequent utf-8 sequences, which may end in an incomplete one
+    while (*pos != 0) {
+        uint8_t  first_byte = static_cast<uint8_t>(*pos);
+        uint8_t  highbits   = first_byte >> 4;
+                 n_remain   = lookup[highbits] - 1;
+
+        if (n_remain < 0) {
+            // invalid sequence, abort
+            code_points.clear();
+            code_points.push_back(0);
+            return std::make_pair(std::move(code_points), whisper_partial_utf8{ 0, n_remain });
+        }
+
+        uint8_t  mask       = (1 << (7 - n_remain)) - 1;
+                 value      = first_byte & mask;
+        ++pos;
+        while (*pos != 0 && n_remain > 0) {
+            value = (value << 6) + (static_cast<uint8_t>(*pos) & 0x3F);
+            ++pos;
+            --n_remain;
+        }
+        if (n_remain == 0) {
+            code_points.push_back(value);
+        }
+    }
+    code_points.push_back(0);
+
+    return std::make_pair(std::move(code_points), whisper_partial_utf8{ value, n_remain });
+}
+
+// returns true iff pos points to the end of one of the definitions of a rule
+static bool whisper_grammar_is_end_of_sequence(const whisper_grammar_element * pos) {
+    switch (pos->type) {
+        case WHISPER_GRETYPE_END: return true;  // NOLINT
+        case WHISPER_GRETYPE_ALT: return true;  // NOLINT
+        default:                return false;
+    }
+}
+
+// returns true iff chr satisfies the char range at pos (regular or inverse range)
+// asserts that pos is pointing to a char range element
+static std::pair<bool, const whisper_grammar_element *> whisper_grammar_match_char(
+        const whisper_grammar_element * pos,
+        const uint32_t                chr) {
+
+    bool found            = false;
+    bool is_positive_char = pos->type == WHISPER_GRETYPE_CHAR;
+
+    WHISPER_ASSERT(is_positive_char || pos->type == WHISPER_GRETYPE_CHAR_NOT); // NOLINT
+
+    do {
+        if (pos[1].type == WHISPER_GRETYPE_CHAR_RNG_UPPER) {
+            // inclusive range, e.g. [a-z]
+            found = found || (pos->value <= chr && chr <= pos[1].value);
+            pos += 2;
+        } else {
+            // exact char match, e.g. [a] or "a"
+            found = found || pos->value == chr;
+            pos += 1;
+        }
+    } while (pos->type == WHISPER_GRETYPE_CHAR_ALT);
+
+    return std::make_pair(found == is_positive_char, pos);
+}
+
+// returns true iff some continuation of the given partial UTF-8 sequence could satisfy the char
+// range at pos (regular or inverse range)
+// asserts that pos is pointing to a char range element
+static bool whisper_grammar_match_partial_char(
+        const whisper_grammar_element * pos,
+        const whisper_partial_utf8      partial_utf8) {
+
+    bool is_positive_char = pos->type == WHISPER_GRETYPE_CHAR;
+    WHISPER_ASSERT(is_positive_char || pos->type == WHISPER_GRETYPE_CHAR_NOT);
+
+    uint32_t partial_value = partial_utf8.value;
+    int      n_remain      = partial_utf8.n_remain;
+
+    // invalid sequence or 7-bit char split across 2 bytes (overlong)
+    if (n_remain < 0 || (n_remain == 1 && partial_value < 2)) {
+        return false;
+    }
+
+    // range of possible code points this partial UTF-8 sequence could complete to
+    uint32_t low  = partial_value << (n_remain * 6);
+    uint32_t high = low | ((1 << (n_remain * 6)) - 1);
+
+    if (low == 0) {
+        if (n_remain == 2) {
+            low = 1 << 11;
+        } else if (n_remain == 3) {
+            low = 1 << 16;
+        }
+    }
+
+    do {
+        if (pos[1].type == WHISPER_GRETYPE_CHAR_RNG_UPPER) {
+            // inclusive range, e.g. [a-z]
+            if (pos->value <= high && low <= pos[1].value) {
+                return is_positive_char;
+            }
+            pos += 2;
+        } else {
+            // exact char match, e.g. [a] or "a"
+            if (low <= pos->value && pos->value <= high) {
+                return is_positive_char;
+            }
+            pos += 1;
+        }
+    } while (pos->type == WHISPER_GRETYPE_CHAR_ALT);
+
+    return !is_positive_char;
+}
+
+
+// transforms a grammar pushdown stack into N possible stacks, all ending
+// at a character range (terminal element)
+static void whisper_grammar_advance_stack(
+        const std::vector<std::vector<whisper_grammar_element>>   & rules,
+        const std::vector<const whisper_grammar_element *>        & stack,
+        std::vector<std::vector<const whisper_grammar_element *>> & new_stacks) {
+
+    if (stack.empty()) {
+        new_stacks.push_back(stack);
+        return;
+    }
+
+    const whisper_grammar_element * pos = stack.back();
+
+    switch (pos->type) {
+        case WHISPER_GRETYPE_RULE_REF: {
+            const size_t                  rule_id = static_cast<size_t>(pos->value);
+            const whisper_grammar_element * subpos  = rules[rule_id].data();
+            do {
+                // init new stack without the top (pos)
+                std::vector<const whisper_grammar_element *> new_stack(stack.begin(), stack.end() - 1);
+                if (!whisper_grammar_is_end_of_sequence(pos + 1)) {
+                    // if this rule ref is followed by another element, add that to stack
+                    new_stack.push_back(pos + 1);
+                }
+                if (!whisper_grammar_is_end_of_sequence(subpos)) {
+                    // if alternate is nonempty, add to stack
+                    new_stack.push_back(subpos);
+                }
+                whisper_grammar_advance_stack(rules, new_stack, new_stacks);
+                while (!whisper_grammar_is_end_of_sequence(subpos)) {
+                    // scan to end of alternate def
+                    subpos++;
+                }
+                if (subpos->type == WHISPER_GRETYPE_ALT) {
+                    // there's another alternate def of this rule to process
+                    subpos++;
+                } else {
+                    break;
+                }
+            } while (true);
+            break;
+        }
+        case WHISPER_GRETYPE_CHAR:
+        case WHISPER_GRETYPE_CHAR_NOT:
+            new_stacks.push_back(stack);
+            break;
+        default:
+            // end of alternate (WHISPER_GRETYPE_END, WHISPER_GRETYPE_ALT) or middle of char range
+            // (WHISPER_GRETYPE_CHAR_ALT, WHISPER_GRETYPE_CHAR_RNG_UPPER); stack should never be left on
+            // those
+            WHISPER_ASSERT(false);
+    }
+}
+
+// takes a set of possible pushdown stacks on a grammar, which are required to
+// be positioned at a character range (see `whisper_grammar_advance_stack`), and
+// produces the N possible stacks if the given char is accepted at those
+// positions
+static std::vector<std::vector<const whisper_grammar_element *>> whisper_grammar_accept(
+        const std::vector<std::vector<whisper_grammar_element>>         & rules,
+        const std::vector<std::vector<const whisper_grammar_element *>> & stacks,
+        const uint32_t                                                  chr) {
+
+    std::vector<std::vector<const whisper_grammar_element *>> new_stacks;
+
+    for (const auto & stack : stacks) {
+        if (stack.empty()) {
+            continue;
+        }
+
+        auto match = whisper_grammar_match_char(stack.back(), chr);
+        if (match.first) {
+            const whisper_grammar_element * pos = match.second;
+
+            // update top of stack to next element, if any
+            std::vector<const whisper_grammar_element *> new_stack(stack.begin(), stack.end() - 1);
+            if (!whisper_grammar_is_end_of_sequence(pos)) {
+                new_stack.push_back(pos);
+            }
+            whisper_grammar_advance_stack(rules, new_stack, new_stacks);
+        }
+    }
+
+    return new_stacks;
+}
+
+static std::vector<whisper_grammar_candidate> whisper_grammar_reject_candidates(
+        const std::vector<std::vector<whisper_grammar_element>>         & rules,
+        const std::vector<std::vector<const whisper_grammar_element *>> & stacks,
+        const std::vector<whisper_grammar_candidate>                    & candidates);
+
+static std::vector<whisper_grammar_candidate> whisper_grammar_reject_candidates_for_stack(
+        const std::vector<std::vector<whisper_grammar_element>> & rules,
+        const std::vector<const whisper_grammar_element *>      & stack,
+        const std::vector<whisper_grammar_candidate>            & candidates) {
+
+    std::vector<whisper_grammar_candidate> rejects;
+
+    if (stack.empty()) {
+        for (auto tok : candidates) {
+            if (*tok.code_points != 0 || tok.partial_utf8.n_remain != 0) {
+                rejects.push_back(tok);
+            }
+        }
+        return rejects;
+    }
+
+    const whisper_grammar_element * stack_pos = stack.back();
+
+    std::vector<whisper_grammar_candidate> next_candidates;
+    for (auto tok : candidates) {
+        if (*tok.code_points == 0) {
+            // reached end of full codepoints in token, reject iff it ended in a partial sequence
+            // that cannot satisfy this position in grammar
+            if (tok.partial_utf8.n_remain != 0 && !whisper_grammar_match_partial_char(stack_pos, tok.partial_utf8)) {
+                rejects.push_back(tok);
+            }
+        } else if (whisper_grammar_match_char(stack_pos, *tok.code_points).first) {
+            next_candidates.push_back({ tok.id, tok.code_points + 1, tok.partial_utf8 });
+        } else {
+            rejects.push_back(tok);
+        }
+    }
+
+    const auto * stack_pos_after = whisper_grammar_match_char(stack_pos, 0).second;
+
+    // update top of stack to next element, if any
+    std::vector<const whisper_grammar_element *> stack_after(stack.begin(), stack.end() - 1);
+    if (!whisper_grammar_is_end_of_sequence(stack_pos_after)) {
+        stack_after.push_back(stack_pos_after);
+    }
+    std::vector<std::vector<const whisper_grammar_element *>> next_stacks;
+    whisper_grammar_advance_stack(rules, stack_after, next_stacks);
+
+    auto next_rejects = whisper_grammar_reject_candidates(rules, next_stacks, next_candidates);
+    for (auto tok : next_rejects) {
+        rejects.push_back({ tok.id, tok.code_points - 1, tok.partial_utf8 });
+    }
+
+    return rejects;
+}
+
+static std::vector<whisper_grammar_candidate> whisper_grammar_reject_candidates(
+        const std::vector<std::vector<whisper_grammar_element>>         & rules,
+        const std::vector<std::vector<const whisper_grammar_element *>> & stacks,
+        const std::vector<whisper_grammar_candidate>                    & candidates) {
+    if (candidates.empty() || stacks.empty()) {
+        return std::vector<whisper_grammar_candidate>();
+    }
+
+    auto rejects = whisper_grammar_reject_candidates_for_stack(rules, stacks.front(), candidates);
+
+    for (size_t i = 1, size = stacks.size(); i < size; ++i) {
+        rejects = whisper_grammar_reject_candidates_for_stack(rules, stacks[i], rejects);
+    }
+    return rejects;
+}
+
+static struct whisper_grammar whisper_grammar_init(
+            const whisper_grammar_element ** rules,
+                                 size_t      n_rules,
+                                 size_t      i_start_rule) {
+    const whisper_grammar_element * pos;
+
+    // copy rule definitions into vectors
+    std::vector<std::vector<whisper_grammar_element>> vec_rules(n_rules);
+    for (size_t i = 0; i < n_rules; i++) {
+        for (pos = rules[i]; pos->type != WHISPER_GRETYPE_END; pos++) {
+            vec_rules[i].push_back(*pos);
+        }
+        vec_rules[i].push_back({WHISPER_GRETYPE_END, 0});
+    }
+
+    // loop over alternates of start rule to build initial stacks
+    std::vector<std::vector<const whisper_grammar_element *>> stacks;
+    pos = rules[i_start_rule];
+    do {
+        std::vector<const whisper_grammar_element *> stack;
+        if (!whisper_grammar_is_end_of_sequence(pos)) {
+            // if alternate is nonempty, add to stack
+            stack.push_back(pos);
+        }
+        whisper_grammar_advance_stack(vec_rules, stack, stacks);
+        while (!whisper_grammar_is_end_of_sequence(pos)) {
+            // scan to end of alternate def
+            pos++;
+        }
+        if (pos->type == WHISPER_GRETYPE_ALT) {
+            // there's another alternate def of this rule to process
+            pos++;
+        } else {
+            break;
+        }
+    } while (true);
+
+    return { std::move(vec_rules), std::move(stacks), {} };
+}
+
+static void whisper_suppress_invalid_grammar(
+             whisper_context  & ctx,
+    const whisper_full_params & params,
+           std::vector<float> & logits,
+    const     whisper_grammar & grammar) {
+
+    if (grammar.rules.empty() || grammar.stacks.empty()) {
+        return;
+    }
+
+    //bool allow_eot = false;
+    //for (const auto & stack : grammar.stacks) {
+    //    if (stack.empty()) {
+    //        allow_eot = true;
+    //        break;
+    //    }
+    //}
+
+    const whisper_token eot = whisper_token_eot(&ctx);
+
+    std::vector<std::pair<std::vector<uint32_t>, whisper_partial_utf8>> candidates_decoded;
+    std::vector<whisper_grammar_candidate>                              candidates_grammar;
+
+    for (whisper_token id = 0; id < eot; ++id) {
+        const std::string & text = ctx.vocab.id_to_token[id];
+        if (!text.empty()) {
+            candidates_decoded.push_back(decode_utf8(text.c_str(), grammar.partial_utf8));
+            candidates_grammar.push_back({ id, candidates_decoded.back().first.data(), candidates_decoded.back().second });
+        }
+    }
+
+    const auto rejects = whisper_grammar_reject_candidates(grammar.rules, grammar.stacks, candidates_grammar);
+
+    for (const auto & reject : rejects) {
+        logits[reject.id] -= params.grammar_penalty;
+    }
+
+    // when the grammar allows a continuation, we penalize the end-of-text token
+    //if (!allow_eot) {
+    //    logits[eot] -= params.grammar_penalty;
+    //}
+    //fprintf(stderr, "Allowed: (%zu tokens)\n", size - rejects.size());
+}
+
+static void whisper_grammar_accept_token(whisper_context & ctx, whisper_grammar & grammar, whisper_token token) {
+    if (grammar.rules.empty() || grammar.stacks.empty()) {
+        return;
+    }
+
+    //fprintf(stderr, "Accept: '%s'\n", ctx.vocab.id_to_token[token].c_str());
+
+    const std::string & text = ctx.vocab.id_to_token[token];
+
+    if (text.rfind("[_", 0) == 0) {
+        // fprintf(stderr, " (skipped)\n");
+        return;
+    }
+    // fprintf(stderr, "\n");
+
+    // Note terminating 0 in decoded string
+    const auto   decoded     = decode_utf8(text.c_str(), grammar.partial_utf8);
+    const auto & code_points = decoded.first;
+    for (auto it = code_points.begin(), end = code_points.end() - 1; it != end; ++it) {
+        grammar.stacks = whisper_grammar_accept(grammar.rules, grammar.stacks, *it);
+    }
+    grammar.partial_utf8 = decoded.second;
+}
+
+//////////////
+// END grammar
+//////////////
+
+////////////////////////////////////////////////////////////////////////////
+
+struct whisper_context_params * whisper_context_default_params_by_ref(void) {
+    struct whisper_context_params params = whisper_context_default_params();
+
+    struct whisper_context_params* result = new whisper_context_params();
+    *result = params;
+    return result;
+}
+
+struct whisper_full_params * whisper_full_default_params_by_ref(enum whisper_sampling_strategy strategy) {
+    struct whisper_full_params params = whisper_full_default_params(strategy);
+
+    struct whisper_full_params* result = new whisper_full_params();
+    *result = params;
+    return result;
+}
+
+struct whisper_full_params whisper_full_default_params(enum whisper_sampling_strategy strategy) {
+    struct whisper_full_params result = {
+        /*.strategy          =*/ strategy,
+
+        /*.n_threads         =*/ std::min(4, (int32_t) std::thread::hardware_concurrency()),
+        /*.n_max_text_ctx    =*/ 16384,
+        /*.offset_ms         =*/ 0,
+        /*.duration_ms       =*/ 0,
+
+        /*.translate         =*/ false,
+        /*.no_context        =*/ true,
+        /*.no_timestamps     =*/ false,
+        /*.single_segment    =*/ false,
+        /*.print_special     =*/ false,
+        /*.print_progress    =*/ true,
+        /*.print_realtime    =*/ false,
+        /*.print_timestamps  =*/ true,
+
+        /*.token_timestamps  =*/ false,
+        /*.thold_pt          =*/ 0.01f,
+        /*.thold_ptsum       =*/ 0.01f,
+        /*.max_len           =*/ 0,
+        /*.split_on_word     =*/ false,
+        /*.max_tokens        =*/ 0,
+
+        /*.debug_mode        =*/ false,
+        /*.audio_ctx         =*/ 0,
+
+        /*.tdrz_enable       =*/ false,
+
+        /* suppress_regex    =*/ nullptr,
+
+        /*.initial_prompt    =*/ nullptr,
+        /*.prompt_tokens     =*/ nullptr,
+        /*.prompt_n_tokens   =*/ 0,
+
+        /*.language          =*/ "en",
+        /*.detect_language   =*/ false,
+
+        /*.suppress_blank    =*/ true,
+        /*.suppress_non_speech_tokens =*/ false,
+
+        /*.temperature       =*/  0.0f,
+        /*.max_initial_ts    =*/  1.0f,
+        /*.length_penalty    =*/ -1.0f,
+
+        /*.temperature_inc   =*/  0.2f,
+        /*.entropy_thold     =*/  2.4f,
+        /*.logprob_thold     =*/ -1.0f,
+        /*.no_speech_thold   =*/  0.6f,
+
+        /*.greedy            =*/ {
+            /*.best_of   =*/ -1,
+        },
+
+        /*.beam_search      =*/ {
+            /*.beam_size =*/ -1,
+
+            /*.patience  =*/ -1.0f,
+        },
+
+        /*.new_segment_callback           =*/ nullptr,
+        /*.new_segment_callback_user_data =*/ nullptr,
+
+        /*.progress_callback           =*/ nullptr,
+        /*.progress_callback_user_data =*/ nullptr,
+
+        /*.encoder_begin_callback           =*/ nullptr,
+        /*.encoder_begin_callback_user_data =*/ nullptr,
+
+        /*.abort_callback                   =*/ nullptr,
+        /*.abort_callback_user_data         =*/ nullptr,
+
+        /*.logits_filter_callback           =*/ nullptr,
+        /*.logits_filter_callback_user_data =*/ nullptr,
+
+        /*.grammar_rules   =*/ nullptr,
+        /*.n_grammar_rules =*/ 0,
+        /*.i_start_rule    =*/ 0,
+        /*.grammar_penalty =*/ 100.0f,
+    };
+
+    switch (strategy) {
+        case WHISPER_SAMPLING_GREEDY:
+            {
+                result.greedy = {
+                    /*.best_of   =*/ 5,
+                };
+            } break;
+        case WHISPER_SAMPLING_BEAM_SEARCH:
+            {
+                result.beam_search = {
+                    /*.beam_size =*/ 5,
+
+                    /*.patience  =*/ -1.0f,
+                };
+            } break;
+    }
+
+    return result;
+}
+
+// forward declarations
+static std::vector<float> get_signal_energy(const float * signal, int n_samples, int n_samples_per_half_window);
+static void whisper_exp_compute_token_level_timestamps(
+        struct whisper_context & ctx,
+          struct whisper_state & state,
+                           int   i_segment,
+                         float   thold_pt,
+                         float   thold_ptsum);
+
+static inline bool should_split_on_word(const char * txt, bool split_on_word) {
+    if (!split_on_word) return true;
+
+    return txt[0] == ' ';
+}
+
+static void whisper_exp_compute_token_level_timestamps_dtw(
+            struct whisper_context * ctx,
+              struct whisper_state * state,
+        struct whisper_full_params   params,
+                               int   i_segment,
+                            size_t   n_segments,
+                               int   seek,
+                               int   n_frames,
+                               int   medfilt_width,
+                               int   n_threads);
+
+// wrap the last segment to max_len characters
+// returns the number of new segments
+static int whisper_wrap_segment(struct whisper_context & ctx, struct whisper_state & state, int max_len, bool split_on_word) {
+    auto segment = state.result_all.back();
+
+    int res = 1;
+    int acc = 0;
+
+    std::string text;
+
+    for (int i = 0; i < (int) segment.tokens.size(); i++) {
+        const auto & token = segment.tokens[i];
+        if (token.id >= whisper_token_eot(&ctx)) {
+            continue;
+        }
+
+        const auto txt = whisper_token_to_str(&ctx, token.id);
+        const int cur = strlen(txt);
+
+        if (acc + cur > max_len && i > 0 && should_split_on_word(txt, split_on_word)) {
+            state.result_all.back().text = std::move(text);
+            state.result_all.back().t1 = token.t0;
+            state.result_all.back().tokens.resize(i);
+            state.result_all.back().speaker_turn_next = false;
+
+            state.result_all.push_back({});
+            state.result_all.back().t0 = token.t0;
+            state.result_all.back().t1 = segment.t1;
+
+            // add tokens [i, end] to the new segment
+            state.result_all.back().tokens.insert(
+                state.result_all.back().tokens.end(),
+                    segment.tokens.begin() + i,
+                    segment.tokens.end());
+
+            state.result_all.back().speaker_turn_next = segment.speaker_turn_next;
+
+            acc = 0;
+            text = "";
+
+            segment = state.result_all.back();
+            i = -1;
+
+            res++;
+        } else {
+            acc += cur;
+            text += txt;
+        }
+    }
+
+    state.result_all.back().text = std::move(text);
+
+    return res;
+}
+
+static const std::vector<std::string> non_speech_tokens = {
+    "\"", "#", "(", ")", "*", "+", "/", ":", ";", "<", "=", ">", "@", "[", "\\", "]", "^",
+    "_", "`", "{", "|", "}", "~", "「", "」", "『", "』", "<<", ">>", "<<<", ">>>", "--",
+    "---", "-(", "-[", "('", "(\"", "((", "))", "(((", ")))", "[[", "]]", "{{", "}}", "♪♪",
+    "♪♪♪","♩", "♪", "♫", "♬", "♭", "♮", "♯"
+};
+
+// process the logits for the selected decoder
+// - applies logit filters
+// - computes logprobs and probs
+// TODO: optimize
+static void whisper_process_logits(
+              struct whisper_context & ctx,
+               struct whisper_state  & state,
+              struct whisper_decoder & decoder,
+    const struct whisper_full_params   params,
+                               float   temperature) {
+    const auto & vocab      = ctx.vocab;
+    const auto & tokens_cur = decoder.sequence.tokens;
+
+    const bool is_initial = tokens_cur.size() == 0;
+    const int  n_logits   = vocab.id_to_token.size();
+
+    WHISPER_ASSERT(n_logits == ctx.vocab.n_vocab);
+
+    // extract the logits for the last token
+    // we will be mutating, and therefore we don't want to use the ctx.logits buffer directly
+    auto & probs    = decoder.probs;
+    auto & logits   = decoder.logits;
+    auto & logprobs = decoder.logprobs;
+    {
+        logits.resize(n_logits);
+        memcpy(logits.data(), state.logits.data() + decoder.i_batch*n_logits, n_logits*sizeof(float));
+
+        if (temperature > 0.0f) {
+            for (int i = 0; i < n_logits; i++) {
+                logits[i] /= temperature;
+            }
+        }
+
+        // will be populated a bit later
+        probs.resize(n_logits);
+        logprobs.resize(n_logits);
+    }
+
+    // apply logit filters here
+    // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L480-L493
+    {
+        // suppress blank
+        // https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L388-L390
+        if (params.suppress_blank) {
+            if (is_initial) {
+                logits[vocab.token_eot]           = -INFINITY;
+                logits[vocab.token_to_id.at(" ")] = -INFINITY;
+            }
+        }
+
+        // suppress <|notimestamps|> token
+        // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L410-L412
+        logits[vocab.token_not] = -INFINITY;
+        if (params.no_timestamps) {
+            for (int i = vocab.token_beg; i < n_logits; ++i) {
+                logits[i] = -INFINITY;
+            }
+        }
+
+        // suppress sot and nosp tokens
+        logits[vocab.token_sot]  = -INFINITY;
+        logits[vocab.token_nosp] = -INFINITY; // TODO: ignore this token for now
+
+        // [TDRZ] when tinydiarize is disabled, suppress solm token
+        if (params.tdrz_enable == false) {
+            logits[vocab.token_solm] = -INFINITY;
+        }
+
+        // suppress task tokens
+        logits[vocab.token_translate]  = -INFINITY;
+        logits[vocab.token_transcribe] = -INFINITY;
+        logits[vocab.token_prev]       = -INFINITY;
+
+        // suppress lang tokens
+        for (size_t i = 0; i < g_lang.size(); ++i) {
+            logits[whisper_token_lang(&ctx, i)] = -INFINITY;
+        }
+
+        // suppress prev token
+        logits[vocab.token_prev] = -INFINITY;
+
+        if (params.logits_filter_callback) {
+            params.logits_filter_callback(&ctx, &state, tokens_cur.data(), tokens_cur.size(), logits.data(), params.logits_filter_callback_user_data);
+        }
+
+        // suppress any tokens matching a regular expression
+        // ref: https://github.com/openai/whisper/discussions/1041
+        if (params.suppress_regex != nullptr) {
+            std::regex re(params.suppress_regex);
+            for (std::pair<whisper_vocab::token, whisper_vocab::id> token_id : vocab.token_to_id) {
+                if (std::regex_match(token_id.first, re)) {
+                    logits[token_id.second] = -INFINITY;
+                }
+            }
+        }
+
+        // suppress non-speech tokens
+        // ref: https://github.com/openai/whisper/blob/7858aa9c08d98f75575035ecd6481f462d66ca27/whisper/tokenizer.py#L224-L253
+        if (params.suppress_non_speech_tokens) {
+            for (const std::string & token : non_speech_tokens) {
+                const std::string suppress_tokens[] = {token, " " + token};
+                for (const std::string & suppress_token : suppress_tokens) {
+                    if (vocab.token_to_id.find(suppress_token) != vocab.token_to_id.end()) {
+                        logits[vocab.token_to_id.at(suppress_token)] = -INFINITY;
+                    }
+                }
+            }
+
+            // allow hyphens "-" and single quotes "'" between words, but not at the beginning of a word
+            if (vocab.token_to_id.find(" -") != vocab.token_to_id.end()) {
+                logits[vocab.token_to_id.at(" -")] = -INFINITY;
+            }
+            if (vocab.token_to_id.find(" '") != vocab.token_to_id.end()) {
+                logits[vocab.token_to_id.at(" '")] = -INFINITY;
+            }
+        }
+
+        // timestamps have to appear in pairs, except directly before EOT; mask logits accordingly
+        // https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L414-L424
+        {
+            const bool last_was_timestamp        = tokens_cur.size() > 0 && tokens_cur.back().id >= vocab.token_beg;
+            const bool penultimate_was_timestamp = tokens_cur.size() < 2 || tokens_cur[tokens_cur.size() - 2].id >= vocab.token_beg;
+
+            //WHISPER_LOG_INFO("last_was_timestamp=%d penultimate_was_timestamp=%d\n", last_was_timestamp, penultimate_was_timestamp);
+
+            if (last_was_timestamp) {
+                if (penultimate_was_timestamp) {
+                    for (int i = vocab.token_beg; i < n_logits; ++i) {
+                        logits[i] = -INFINITY;
+                    }
+                } else {
+                    for (int i = 0; i < vocab.token_eot; ++i) {
+                        logits[i] = -INFINITY;
+                    }
+                }
+            }
+        }
+
+        // the initial timestamp cannot be larger than max_initial_ts
+        // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L426-L429
+        if (is_initial && params.max_initial_ts > 0.0f) {
+            const float precision = float(WHISPER_CHUNK_SIZE)/ctx.model.hparams.n_audio_ctx;
+            const int   tid0      = std::round(params.max_initial_ts/precision);
+
+            for (int i = vocab.token_beg + tid0 + 1; i < n_logits; ++i) {
+                logits[i] = -INFINITY;
+            }
+        }
+
+        // condition timestamp tokens to be increasing
+        // ref: https://github.com/openai/whisper/pull/831#issuecomment-1385910556
+        if (decoder.has_ts) {
+            const int tid0 = decoder.seek_delta/2;
+
+            for (int i = vocab.token_beg; i < vocab.token_beg + tid0; ++i) {
+                logits[i] = -INFINITY;
+            }
+        }
+
+        // populate the logprobs array (log_softmax)
+        {
+            const float logit_max = *std::max_element(logits.begin(), logits.end());
+            float logsumexp = 0.0f;
+            for (int i = 0; i < n_logits; ++i) {
+                if (logits[i] > -INFINITY) {
+                    logsumexp += expf(logits[i] - logit_max);
+                }
+            }
+            logsumexp = logf(logsumexp) + logit_max;
+
+            for (int i = 0; i < n_logits; ++i) {
+                if (logits[i] > -INFINITY) {
+                    logprobs[i] = logits[i] - logsumexp;
+                } else {
+                    logprobs[i] = -INFINITY;
+                }
+            }
+        }
+
+        // if sum of probability over timestamps is above any other token, sample timestamp
+        // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L431-L437
+        {
+            // logsumexp over timestamps
+            float timestamp_logprob = -INFINITY;
+            {
+                float logsumexp = 0.0f;
+                const float logprob_max = *std::max_element(logprobs.begin() + vocab.token_beg, logprobs.end());
+                for (int i = vocab.token_beg; i < n_logits; ++i) {
+                    if (logprobs[i] > -INFINITY) {
+                        logsumexp += expf(logprobs[i] - logprob_max);
+                    }
+                }
+                if (logsumexp > 0.0f) {
+                    timestamp_logprob = logf(logsumexp) + logprob_max;
+                }
+            }
+
+            const float max_text_token_logprob = *std::max_element(logprobs.begin(), logprobs.begin() + vocab.token_beg);
+
+            //WHISPER_LOG_INFO("timestamp_logprob=%f max_text_token_logprob=%f\n", timestamp_logprob, max_text_token_logprob);
+
+            if (timestamp_logprob > max_text_token_logprob) {
+                for (int i = 0; i < vocab.token_beg; ++i) {
+                    logits[i]   = -INFINITY;
+                    logprobs[i] = -INFINITY;
+                }
+            } else {
+                if (params.n_grammar_rules > 0) {
+                    whisper_suppress_invalid_grammar(ctx, params, logits, decoder.grammar);
+
+                    // populate the logprobs array (log_softmax)
+                    {
+                        const float logit_max = *std::max_element(logits.begin(), logits.end());
+                        float logsumexp = 0.0f;
+                        for (int i = 0; i < n_logits; ++i) {
+                            if (logits[i] > -INFINITY) {
+                                logsumexp += expf(logits[i] - logit_max);
+                            }
+                        }
+                        logsumexp = logf(logsumexp) + logit_max;
+
+                        for (int i = 0; i < n_logits; ++i) {
+                            if (logits[i] > -INFINITY) {
+                                logprobs[i] = logits[i] - logsumexp;
+                            } else {
+                                logprobs[i] = -INFINITY;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    // compute probs
+    {
+        for (int i = 0; i < n_logits; ++i) {
+            if (logits[i] == -INFINITY) {
+                probs[i] = 0.0f;
+            } else {
+                probs[i] = expf(logprobs[i]);
+            }
+        }
+    }
+
+#if 0
+    // print first 100 logits - token string : logit
+    //for (int i = 0; i < 10; i++) {
+    //    const auto token   = vocab.id_to_token.at(i);
+    //    const auto prob    = probs[i];
+    //    const auto logit   = logits[i];
+    //    const auto logprob = logprobs[i];
+    //    printf("%16s : prob=%9.5f logit=%9.5f logprob=%9.5f\n", token.c_str(), prob, logit, logprob);
+    //}
+
+    // print sorted
+    {
+        std::vector<std::pair<float, int>> pairs;
+
+        for (int i = 0; i < n_logits; ++i) {
+            pairs.push_back(std::make_pair(probs[i], i));
+        }
+
+        std::sort(pairs.begin(), pairs.end(), [](const std::pair<float, int>& a, const std::pair<float, int>& b) {
+            return a.first > b.first;
+        });
+
+        for (int i = 0; i < 10; i++) {
+            const auto token   = vocab.id_to_token.at(pairs[i].second);
+            const auto prob    = pairs[i].first;
+            const auto logit   = logits[pairs[i].second];
+            const auto logprob = logprobs[pairs[i].second];
+            printf("%16s : id=%6d prob=%9.5f logit=%9.5f logprob=%9.5f '%s'\n", token.c_str(), pairs[i].second, prob, logit, logprob, token.c_str());
+        }
+
+        printf("----------------\n");
+    }
+
+    // "And", "and", " And", " and"
+    //printf("logits[\"and\"]  = %f\n", logits[vocab.token_to_id.at("and")]);
+    //printf("logits[\"And\"]  = %f\n", logits[vocab.token_to_id.at("And")]);
+    //printf("logits[\" and\"] = %f\n", logits[vocab.token_to_id.at(" and")]);
+    //printf("logits[\" And\"] = %f\n", logits[vocab.token_to_id.at(" And")]);
+    //printf("logits[\" so\"]  = %f\n", logits[vocab.token_to_id.at(" so")]);
+
+    //printf("logprobs[\"and\"]  = %f\n", logprobs[vocab.token_to_id.at("and")]);
+    //printf("logprobs[\"And\"]  = %f\n", logprobs[vocab.token_to_id.at("And")]);
+    //printf("logprobs[\" and\"] = %f\n", logprobs[vocab.token_to_id.at(" and")]);
+    //printf("logprobs[\" And\"] = %f\n", logprobs[vocab.token_to_id.at(" And")]);
+    //printf("logprobs[\" so\"]  = %f\n", logprobs[vocab.token_to_id.at(" so")]);
+
+    //printf("probs[\"and\"]  = %f\n", probs[vocab.token_to_id.at("and")]);
+    //printf("probs[\"And\"]  = %f\n", probs[vocab.token_to_id.at("And")]);
+    //printf("probs[\" and\"] = %f\n", probs[vocab.token_to_id.at(" and")]);
+    //printf("probs[\" And\"] = %f\n", probs[vocab.token_to_id.at(" And")]);
+    //printf("probs[\" so\"]  = %f\n", probs[vocab.token_to_id.at(" so")]);
+#endif
+}
+
+static bool whisper_sequence_tokens_equal(const whisper_sequence & a, const whisper_sequence & b) {
+    if (a.tokens.size() != b.tokens.size()) {
+        return false;
+    }
+    // sequences are more likely to diverge at the end
+    for (int i = a.tokens.size() - 1; i >= 0; i--) {
+        if (a.tokens[i].id != b.tokens[i].id) {
+            return false;
+        }
+    }
+    return true;
+}
+
+static whisper_token_data whisper_sample_token(
+            whisper_context & ctx,
+      const whisper_decoder & decoder,
+                       bool   best) {
+    whisper_token_data result = {
+        0, 0, 0.0f, 0.0f, 0.0f, 0.0f, -1, -1, -1, 0.0f,
+    };
+
+    const auto & vocab = ctx.vocab;
+
+    const auto & probs    = decoder.probs;
+    const auto & logprobs = decoder.logprobs;
+
+    const int n_logits = vocab.n_vocab;
+
+    {
+        double sum_ts = 0.0;
+        double max_ts = 0.0;
+
+        for (int i = vocab.token_beg; i < n_logits; i++) {
+            if (probs[i] == -INFINITY) {
+                continue;
+            }
+
+            sum_ts += probs[i];
+            if (max_ts < probs[i]) {
+                max_ts = probs[i];
+                result.tid = i;
+            }
+        }
+
+        result.pt    = max_ts/(sum_ts + 1e-10);
+        result.ptsum = sum_ts;
+    }
+
+    if (best) {
+        for (int i = 0; i < n_logits; ++i) {
+            if (result.p < probs[i]) {
+                result.id   = i;
+                result.p    = probs[i];
+                result.plog = logprobs[i];
+            }
+        }
+    } else {
+        std::discrete_distribution<> dist(probs.begin(), probs.end());
+
+        result.id   = dist(decoder.rng);
+        result.p    = probs[result.id];
+        result.plog = logprobs[result.id];
+    }
+
+    if (result.id >= vocab.token_beg) {
+        result.tid = result.id;
+        result.pt  = result.p;
+    }
+
+    return result;
+}
+
+static std::vector<whisper_token_data> whisper_sample_token_topk(
+            whisper_context & ctx,
+            whisper_decoder & decoder,
+                        int   k) {
+    const auto & vocab = ctx.vocab;
+
+    const auto & probs    = decoder.probs;
+    const auto & logits   = decoder.logits;
+    const auto & logprobs = decoder.logprobs;
+
+    const int n_logits = vocab.n_vocab;
+
+    auto & logits_id = decoder.logits_id;
+
+    logits_id.resize(n_logits);
+    for (int i = 0; i < n_logits; ++i) {
+        logits_id[i].first = logits[i];
+        logits_id[i].second = i;
+    }
+
+    {
+        using pair_type = std::remove_reference<decltype(logits_id)>::type::value_type;
+        std::partial_sort(
+                logits_id.begin(),
+                logits_id.begin() + k, logits_id.end(),
+                [](const pair_type & a, const pair_type & b) {
+            return a.first > b.first;
+        });
+    }
+
+    std::vector<whisper_token_data> result;
+    result.reserve(k);
+
+    whisper_token tid = vocab.token_beg;
+
+    float pt    = 0.0;
+    float ptsum = 0.0;
+
+    {
+        double sum_ts = 0.0;
+        double max_ts = 0.0;
+
+        for (int i = vocab.token_beg; i < n_logits; i++) {
+            if (probs[i] == -INFINITY) {
+                continue;
+            }
+
+            sum_ts += probs[i];
+            if (max_ts < probs[i]) {
+                max_ts = probs[i];
+                tid = i;
+            }
+        }
+
+        pt    = max_ts/(sum_ts + 1e-10);
+        ptsum = sum_ts;
+    }
+
+    std::discrete_distribution<> dist(probs.begin(), probs.end());
+
+    for (int i = 0; i < k; ++i) {
+        const auto id = dist(decoder.rng);
+        //printf("XXX %d %d %f %f %f %f\n", id, tid, probs[id], logprobs[id], pt, ptsum);
+
+        result.push_back({ id, tid, probs[id], logprobs[id], pt, ptsum, -1, -1, -1, 0.0f, });
+
+        if (result[i].id >= vocab.token_beg) {
+            result[i].tid = result[i].id;
+            result[i].pt  = result[i].p;
+        }
+    }
+
+    return result;
+}
+
+// ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L178-L192
+static void whisper_sequence_score(
+        const struct whisper_full_params & params,
+                        whisper_sequence & sequence) {
+    if (sequence.result_len == 0) {
+        return;
+    }
+
+    double result = 0.0f;
+
+    for (int i = 0; i < sequence.result_len; ++i) {
+        result += sequence.tokens[i].plog;
+    }
+
+    sequence.sum_logprobs = result;
+    sequence.avg_logprobs = result/sequence.result_len;
+
+    double penalty = sequence.result_len;
+
+    if (params.length_penalty > 0.0f) {
+        penalty = pow((5.0 + penalty)/6.0, params.length_penalty);
+    }
+
+    sequence.score = result/penalty;
+
+    // compute the entropy of the sequence of the last 32 tokens
+    {
+        const int n = 32;
+
+        int cnt = 0;
+        double entropy = 0.0f;
+
+        std::map<whisper_token, int> token_counts;
+        for (int i = std::max(0, sequence.result_len - n); i < sequence.result_len; ++i) {
+            token_counts[sequence.tokens[i].id]++;
+            cnt++;
+        }
+
+        for (const auto & kv : token_counts) {
+            const auto p = kv.second/(double)cnt;
+            entropy -= p*log(p);
+
+            //WHISPER_LOG_DEBUG("entropy: %d %f %f, count %d\n", kv.first, p, log(p), kv.second);
+        }
+
+        sequence.entropy = entropy;
+    }
+}
+
+int whisper_full_with_state(
+        struct whisper_context * ctx,
+          struct whisper_state * state,
+    struct whisper_full_params   params,
+                   const float * samples,
+                           int   n_samples) {
+    // clear old results
+    auto & result_all = state->result_all;
+
+    result_all.clear();
+
+    if (n_samples > 0) {
+        // compute log mel spectrogram
+        if (whisper_pcm_to_mel_with_state(ctx, state, samples, n_samples, params.n_threads) != 0) {
+            WHISPER_LOG_ERROR("%s: failed to compute log mel spectrogram\n", __func__);
+            return -2;
+        }
+    }
+
+    // auto-detect language if not specified
+    if (params.language == nullptr || strlen(params.language) == 0 || strcmp(params.language, "auto") == 0 || params.detect_language) {
+        std::vector<float> probs(whisper_lang_max_id() + 1, 0.0f);
+
+        const auto lang_id = whisper_lang_auto_detect_with_state(ctx, state, 0, params.n_threads, probs.data());
+        if (lang_id < 0) {
+            WHISPER_LOG_ERROR("%s: failed to auto-detect language\n", __func__);
+            return -3;
+        }
+        state->lang_id = lang_id;
+        params.language = whisper_lang_str(lang_id);
+
+        WHISPER_LOG_INFO("%s: auto-detected language: %s (p = %f)\n", __func__, params.language, probs[whisper_lang_id(params.language)]);
+        if (params.detect_language) {
+            return 0;
+        }
+    }
+
+    if (params.token_timestamps) {
+        state->t_beg    = 0;
+        state->t_last   = 0;
+        state->tid_last = 0;
+        if (n_samples > 0) {
+            state->energy = get_signal_energy(samples, n_samples, 32);
+        }
+    }
+
+    const int seek_start = params.offset_ms/10;
+    const int seek_end = params.duration_ms == 0 ? whisper_n_len_from_state(state) : seek_start + params.duration_ms/10;
+
+    // if length of spectrogram is less than 1.0s (100 frames), then return
+    // basically don't process anything that is less than 1.0s
+    // see issue #39: https://github.com/ggerganov/whisper.cpp/issues/39
+    if (seek_end < seek_start + 100) {
+        WHISPER_LOG_WARN("%s: input is too short - %d ms < 1000 ms. consider padding the input audio with silence\n", __func__, (seek_end - seek_start)*10);
+        return 0;
+    }
+
+    // a set of temperatures to use
+    // [ t0, t0 + delta, t0 + 2*delta, ..., < 1.0f + 1e-6f ]
+    std::vector<float> temperatures;
+    if (params.temperature_inc > 0.0f) {
+        for (float t = params.temperature; t < 1.0f + 1e-6f; t += params.temperature_inc) {
+            temperatures.push_back(t);
+        }
+    } else {
+        temperatures.push_back(params.temperature);
+    }
+
+    // initialize the decoders
+    int n_decoders = 1;
+
+    switch (params.strategy) {
+        case WHISPER_SAMPLING_GREEDY:
+            {
+                n_decoders = params.greedy.best_of;
+            } break;
+        case WHISPER_SAMPLING_BEAM_SEARCH:
+            {
+                n_decoders = std::max(params.greedy.best_of, params.beam_search.beam_size);
+            } break;
+    };
+
+    n_decoders = std::max(1, n_decoders);
+
+    if (n_decoders > WHISPER_MAX_DECODERS) {
+        WHISPER_LOG_ERROR("%s: too many decoders requested (%d), max = %d\n", __func__, n_decoders, WHISPER_MAX_DECODERS);
+        return -4;
+    }
+
+    // TAGS: WHISPER_DECODER_INIT
+    for (int j = 1; j < n_decoders; j++) {
+        auto & decoder = state->decoders[j];
+
+        decoder.sequence.tokens.reserve(state->decoders[0].sequence.tokens.capacity());
+
+        decoder.probs.resize   (ctx->vocab.n_vocab);
+        decoder.logits.resize  (ctx->vocab.n_vocab);
+        decoder.logprobs.resize(ctx->vocab.n_vocab);
+        decoder.logits_id.reserve(ctx->model.hparams.n_vocab);
+
+        decoder.rng = std::mt19937(0);
+    }
+
+    // the accumulated text context so far
+    auto & prompt_past = state->prompt_past;
+    if (params.no_context) {
+        prompt_past.clear();
+    }
+
+    // prepare prompt
+    {
+        std::vector<whisper_token> prompt_tokens;
+
+        // initial prompt
+        if (!params.prompt_tokens && params.initial_prompt) {
+            prompt_tokens.resize(1024);
+            int n_needed = whisper_tokenize(ctx, params.initial_prompt, prompt_tokens.data(), prompt_tokens.size());
+            if (n_needed < 0) {
+                prompt_tokens.resize(-n_needed);
+                n_needed = whisper_tokenize(ctx, params.initial_prompt, prompt_tokens.data(), prompt_tokens.size());
+            }
+            prompt_tokens.resize(n_needed);
+            params.prompt_tokens   = prompt_tokens.data();
+            params.prompt_n_tokens = prompt_tokens.size();
+        }
+
+        // prepend the prompt tokens to the prompt_past
+        if (params.prompt_tokens && params.prompt_n_tokens > 0) {
+            // parse tokens from the pointer
+            for (int i = 0; i < params.prompt_n_tokens; i++) {
+                prompt_past.push_back(params.prompt_tokens[i]);
+            }
+            std::rotate(prompt_past.begin(), prompt_past.end() - params.prompt_n_tokens, prompt_past.end());
+        }
+    }
+
+    // overwrite audio_ctx, max allowed is hparams.n_audio_ctx
+    if (params.audio_ctx > whisper_n_audio_ctx(ctx)) {
+        WHISPER_LOG_ERROR("%s: audio_ctx is larger than the maximum allowed (%d > %d)\n", __func__, params.audio_ctx, whisper_n_audio_ctx(ctx));
+        return -5;
+    }
+    state->exp_n_audio_ctx = params.audio_ctx;
+
+    // these tokens determine the task that will be performed
+    std::vector<whisper_token> prompt_init = { whisper_token_sot(ctx), };
+
+    if (whisper_is_multilingual(ctx)) {
+        const int lang_id = whisper_lang_id(params.language);
+        state->lang_id = lang_id;
+        prompt_init.push_back(whisper_token_lang(ctx, lang_id));
+        if (params.translate) {
+            prompt_init.push_back(whisper_token_translate(ctx));
+        } else {
+            prompt_init.push_back(whisper_token_transcribe(ctx));
+        }
+    }
+
+    // first release distilled models require the "no_timestamps" token
+    {
+        const bool is_distil = ctx->model.hparams.n_text_layer == 2 && ctx->model.hparams.n_vocab != 51866;
+        if (is_distil && !params.no_timestamps) {
+            WHISPER_LOG_WARN("%s: using first release distilled models - forcing no_timestamps\n", __func__);
+            params.no_timestamps = true;
+        }
+    }
+
+    if (params.no_timestamps) {
+        prompt_init.push_back(whisper_token_not(ctx));
+    }
+
+    int seek = seek_start;
+
+    std::vector<whisper_token> prompt;
+    prompt.reserve(whisper_n_text_ctx(ctx));
+
+    struct beam_candidate {
+        int decoder_idx;
+        int seek_delta;
+
+        bool has_ts;
+
+        whisper_sequence sequence;
+        whisper_grammar grammar;
+    };
+
+    std::vector<std::vector<beam_candidate>> bc_per_dec(n_decoders);
+    std::vector<beam_candidate> beam_candidates;
+
+    // main loop
+    while (true) {
+        if (params.progress_callback) {
+            const int progress_cur = (100*(seek - seek_start))/(seek_end - seek_start);
+
+            params.progress_callback(
+                ctx, state, progress_cur, params.progress_callback_user_data);
+        }
+
+        // if only 1 second left, then stop
+        if (seek + 100 >= seek_end) {
+            break;
+        }
+
+        if (params.encoder_begin_callback) {
+            if (params.encoder_begin_callback(ctx, state, params.encoder_begin_callback_user_data) == false) {
+                WHISPER_LOG_ERROR("%s: encoder_begin_callback returned false - aborting\n", __func__);
+                break;
+            }
+        }
+
+        // encode audio features starting at offset seek
+        if (!whisper_encode_internal(*ctx, *state, seek, params.n_threads, params.abort_callback, params.abort_callback_user_data)) {
+            WHISPER_LOG_ERROR("%s: failed to encode\n", __func__);
+            return -6;
+        }
+
+        // if there is a very short audio segment left to process, we remove any past prompt since it tends
+        // to confuse the decoder and often make it repeat or hallucinate stuff
+        if (seek > seek_start && seek + 500 >= seek_end) {
+            prompt_past.clear();
+        }
+
+        int best_decoder_id = 0;
+
+        for (int it = 0; it < (int) temperatures.size(); ++it) {
+            const float t_cur = temperatures[it];
+
+            int n_decoders_cur = 1;
+
+            switch (params.strategy) {
+                case whisper_sampling_strategy::WHISPER_SAMPLING_GREEDY:
+                    {
+                        if (t_cur > 0.0f) {
+                            n_decoders_cur = params.greedy.best_of;
+                        }
+                    } break;
+                case whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH:
+                    {
+                        if (t_cur > 0.0f) {
+                            n_decoders_cur = params.greedy.best_of;
+                        } else {
+                            n_decoders_cur = params.beam_search.beam_size;
+                        }
+                    } break;
+            };
+
+            n_decoders_cur = std::max(1, n_decoders_cur);
+
+            WHISPER_LOG_DEBUG("\n%s: strategy = %d, decoding with %d decoders, temperature = %.2f\n", __func__, params.strategy, n_decoders_cur, t_cur);
+
+            // TAGS: WHISPER_DECODER_INIT
+            for (int j = 0; j < n_decoders_cur; ++j) {
+                auto & decoder = state->decoders[j];
+
+                decoder.sequence.tokens.clear();
+                decoder.sequence.result_len       = 0;
+                decoder.sequence.sum_logprobs_all = 0.0;
+                decoder.sequence.sum_logprobs     = -INFINITY;
+                decoder.sequence.avg_logprobs     = -INFINITY;
+                decoder.sequence.entropy          = 0.0;
+                decoder.sequence.score            = -INFINITY;
+
+                decoder.seek_delta = 100*WHISPER_CHUNK_SIZE;
+
+                decoder.failed    = false;
+                decoder.completed = false;
+                decoder.has_ts    = false;
+
+                if (params.grammar_rules != nullptr) {
+                    decoder.grammar = whisper_grammar_init(params.grammar_rules, params.n_grammar_rules, params.i_start_rule);
+                } else {
+                    decoder.grammar = {};
+                }
+            }
+
+            // init prompt and kv cache for the current iteration
+            // TODO: do not recompute the prompt if it is the same as previous time
+            {
+                prompt.clear();
+
+                // if we have already generated some text, use it as a prompt to condition the next generation
+                if (!prompt_past.empty() && t_cur < 0.5f && params.n_max_text_ctx > 0) {
+                    int n_take = std::min(std::min(params.n_max_text_ctx, whisper_n_text_ctx(ctx)/2), int(prompt_past.size()));
+
+                    prompt = { whisper_token_prev(ctx) };
+                    prompt.insert(prompt.begin() + 1, prompt_past.end() - n_take, prompt_past.end());
+                }
+
+                // init new transcription with sot, language (opt) and task tokens
+                prompt.insert(prompt.end(), prompt_init.begin(), prompt_init.end());
+
+                // print the prompt
+                WHISPER_LOG_DEBUG("\n\n");
+                for (int i = 0; i < (int) prompt.size(); i++) {
+                    WHISPER_LOG_DEBUG("%s: prompt[%d] = %s\n", __func__, i, ctx->vocab.id_to_token.at(prompt[i]).c_str());
+                }
+                WHISPER_LOG_DEBUG("\n\n");
+
+                whisper_kv_cache_clear(state->kv_self);
+
+                whisper_batch_prep_legacy(state->batch, prompt.data(), prompt.size(), 0, 0);
+
+                if (!whisper_decode_internal(*ctx, *state, state->batch, params.n_threads, false, params.abort_callback, params.abort_callback_user_data)) {
+                    WHISPER_LOG_ERROR("%s: failed to decode\n", __func__);
+                    return -7;
+                }
+
+                {
+                    const int64_t t_start_sample_us = ggml_time_us();
+
+                    state->decoders[0].i_batch = prompt.size() - 1;
+
+                    whisper_process_logits(*ctx, *state, state->decoders[0], params, t_cur);
+
+                    for (int j = 1; j < n_decoders_cur; ++j) {
+                        auto & decoder = state->decoders[j];
+
+                        whisper_kv_cache_seq_cp(state->kv_self, 0, j, -1, -1);
+
+                        memcpy(decoder.probs.data(),    state->decoders[0].probs.data(),    decoder.probs.size()*sizeof(decoder.probs[0]));
+                        memcpy(decoder.logits.data(),   state->decoders[0].logits.data(),   decoder.logits.size()*sizeof(decoder.logits[0]));
+                        memcpy(decoder.logprobs.data(), state->decoders[0].logprobs.data(), decoder.logprobs.size()*sizeof(decoder.logprobs[0]));
+                    }
+
+                    state->t_sample_us += ggml_time_us() - t_start_sample_us;
+                }
+            }
+
+            for (int i = 0, n_max = whisper_n_text_ctx(ctx)/2 - 4; i < n_max; ++i) {
+                const int64_t t_start_sample_us = ggml_time_us();
+
+                if (params.strategy == whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH) {
+                    for (auto & bc : bc_per_dec) {
+                        bc.clear();
+                    }
+                }
+
+                // sampling
+                // TODO: avoid memory allocations, optimize, avoid threads?
+                {
+                    std::atomic<int> j_cur(0);
+
+                    auto process = [&]() {
+                        while (true) {
+                            const int j = j_cur.fetch_add(1);
+
+                            if (j >= n_decoders_cur) {
+                                break;
+                            }
+
+                            auto & decoder = state->decoders[j];
+
+                            if (decoder.completed || decoder.failed) {
+                                continue;
+                            }
+
+                            switch (params.strategy) {
+                                case whisper_sampling_strategy::WHISPER_SAMPLING_GREEDY:
+                                    {
+                                        if (t_cur < 1e-6f) {
+                                            decoder.sequence.tokens.push_back(whisper_sample_token(*ctx, decoder, true));
+                                        } else {
+                                            decoder.sequence.tokens.push_back(whisper_sample_token(*ctx, decoder, false));
+                                        }
+
+                                        decoder.sequence.sum_logprobs_all += decoder.sequence.tokens.back().plog;
+                                    } break;
+                                case whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH:
+                                    {
+                                        const auto tokens_new = whisper_sample_token_topk(*ctx, decoder, params.beam_search.beam_size);
+
+                                        for (const auto & token : tokens_new) {
+                                            bc_per_dec[j].push_back({ j, decoder.seek_delta, decoder.has_ts, decoder.sequence, decoder.grammar, });
+                                            bc_per_dec[j].back().sequence.tokens.push_back(token);
+                                            bc_per_dec[j].back().sequence.sum_logprobs_all += token.plog;
+                                        }
+                                    } break;
+                            };
+                        }
+                    };
+
+                    const int n_threads = std::min(params.n_threads, n_decoders_cur);
+
+                    if (n_threads == 1) {
+                        process();
+                    } else {
+                        std::vector<std::thread> threads(n_threads - 1);
+
+                        for (int t = 0; t < n_threads - 1; ++t) {
+                            threads[t] = std::thread(process);
+                        }
+
+                        process();
+
+                        for (int t = 0; t < n_threads - 1; ++t) {
+                            threads[t].join();
+                        }
+                    }
+                }
+
+                beam_candidates.clear();
+                for (const auto & bc : bc_per_dec) {
+                    beam_candidates.insert(beam_candidates.end(), bc.begin(), bc.end());
+
+                    if (!bc.empty()) {
+                        state->n_sample += 1;
+                    }
+                }
+
+                // for beam-search, choose the top candidates and update the KV caches
+                if (params.strategy == whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH) {
+                    std::sort(
+                            beam_candidates.begin(),
+                            beam_candidates.end(),
+                            [](const beam_candidate & a, const beam_candidate & b) {
+                        if (a.sequence.sum_logprobs_all != b.sequence.sum_logprobs_all) {
+                            return a.sequence.sum_logprobs_all > b.sequence.sum_logprobs_all;
+                        }
+                        return a.decoder_idx < b.decoder_idx;
+                    });
+
+                    uint32_t cur_c = 0;
+
+                    for (int j = 0; j < n_decoders_cur; ++j) {
+                        auto & decoder = state->decoders[j];
+
+                        if (decoder.completed || decoder.failed) {
+                            continue;
+                        }
+
+                        if (cur_c >= beam_candidates.size()) {
+                            cur_c = 0;
+                        }
+
+                        auto & cur = beam_candidates[cur_c++];
+
+                        while (beam_candidates.size() > cur_c && whisper_sequence_tokens_equal(beam_candidates[cur_c].sequence, cur.sequence) && i > 0) {
+                            ++cur_c;
+                        }
+
+                        decoder.seek_delta = cur.seek_delta;
+                        decoder.has_ts     = cur.has_ts;
+                        decoder.sequence   = cur.sequence;
+                        decoder.grammar    = cur.grammar;
+
+                        whisper_kv_cache_seq_cp(state->kv_self, cur.decoder_idx, WHISPER_MAX_DECODERS + j, -1, -1);
+
+                        WHISPER_LOG_DEBUG("%s: beam search: decoder %d: from decoder %d: token = %10s, plog = %8.5f, sum_logprobs = %8.5f\n",
+                                __func__, j, cur.decoder_idx, ctx->vocab.id_to_token.at(decoder.sequence.tokens.back().id).c_str(), decoder.sequence.tokens.back().plog, decoder.sequence.sum_logprobs_all);
+                    }
+
+                    for (int j = 0; j < n_decoders_cur; ++j) {
+                        auto & decoder = state->decoders[j];
+
+                        if (decoder.completed || decoder.failed) {
+                            continue;
+                        }
+
+                        whisper_kv_cache_seq_rm(state->kv_self, j,                           -1, -1);
+                        whisper_kv_cache_seq_cp(state->kv_self, WHISPER_MAX_DECODERS + j, j, -1, -1);
+                        whisper_kv_cache_seq_rm(state->kv_self, WHISPER_MAX_DECODERS + j,    -1, -1);
+                    }
+                }
+
+                // update the decoder state
+                // - check if the sequence is completed
+                // - check if the sequence is failed
+                // - update sliding window based on timestamp tokens
+                for (int j = 0; j < n_decoders_cur; ++j) {
+                    auto & decoder = state->decoders[j];
+
+                    if (decoder.completed || decoder.failed) {
+                        continue;
+                    }
+
+                    auto & has_ts     = decoder.has_ts;
+                    auto & failed     = decoder.failed;
+                    auto & completed  = decoder.completed;
+                    auto & seek_delta = decoder.seek_delta;
+                    auto & result_len = decoder.sequence.result_len;
+
+                    {
+                        const auto & token = decoder.sequence.tokens.back();
+
+                        // timestamp token - update sliding window
+                        if (token.id > whisper_token_beg(ctx)) {
+                            const int seek_delta_new = 2*(token.id - whisper_token_beg(ctx));
+
+                            // do not allow to go back in time
+                            if (has_ts && seek_delta > seek_delta_new && result_len < i) {
+                                WHISPER_LOG_DEBUG("%s: decoder %d: failed due to seek_delta (%d > %d)\n", __func__, j, seek_delta, seek_delta_new);
+                                failed = true; // TODO: maybe this is not a failure ?
+                                continue;
+                            }
+
+                            seek_delta = seek_delta_new;
+                            result_len = i + 1;
+                            has_ts = true;
+                        }
+
+                        whisper_grammar_accept_token(*ctx, decoder.grammar, token.id);
+
+#ifdef WHISPER_DEBUG
+                        {
+                            const auto tt = token.pt > 0.10 ? ctx->vocab.id_to_token.at(token.tid) : "[?]";
+                            WHISPER_LOG_DEBUG("%s: id = %3d, decoder = %d, token = %6d, p = %6.3f, ts = %10s, %6.3f, result_len = %4d '%s'\n",
+                                    __func__, i, j, token.id, token.p, tt.c_str(), token.pt, result_len, ctx->vocab.id_to_token.at(token.id).c_str());
+                        }
+#endif
+
+                        // end of segment
+                        if (token.id == whisper_token_eot(ctx) ||               // end of text token
+                           (params.max_tokens > 0 && i >= params.max_tokens) || // max tokens per segment reached
+                           (has_ts && seek + seek_delta + 100 >= seek_end)      // end of audio reached
+                           ) {
+                            if (result_len == 0 && !params.no_timestamps) {
+                                if (seek + seek_delta + 100 >= seek_end) {
+                                    result_len = i + 1;
+                                } else {
+                                    WHISPER_LOG_DEBUG("%s: decoder %d failed (result_len = 0)\n", __func__, j);
+                                    failed = true;
+                                    continue;
+                                }
+                            }
+
+                            if (params.single_segment || params.no_timestamps) {
+                                result_len = i + 1;
+                                seek_delta = 100*WHISPER_CHUNK_SIZE;
+                            }
+
+                            WHISPER_LOG_DEBUG("%s: decoder %d completed\n", __func__, j);
+                            completed = true;
+                            continue;
+                        }
+
+                        // TESTS: if no tensors are loaded, it means we are running tests
+                        if (ctx->model.n_loaded == 0) {
+                            seek_delta = 100*WHISPER_CHUNK_SIZE;
+                            completed = true;
+                            continue;
+                        }
+                    }
+
+                    // sometimes, the decoding can get stuck in a repetition loop
+                    // this is an attempt to mitigate such cases - we flag the decoding as failed and use a fallback strategy
+                    if (i == n_max - 1 && (result_len == 0 || seek_delta < 100*WHISPER_CHUNK_SIZE/2)) {
+                        WHISPER_LOG_DEBUG("%s: decoder %d: failed due to repetition loop\n", __func__, j);
+                        failed = true;
+                        continue;
+                    }
+                }
+
+                // check if all decoders have finished (i.e. completed or failed)
+                {
+                    bool completed_all = true;
+
+                    for (int j = 0; j < n_decoders_cur; ++j) {
+                        auto & decoder = state->decoders[j];
+
+                        if (decoder.completed || decoder.failed) {
+                            continue;
+                        }
+
+                        completed_all = false;
+                    }
+
+                    if (completed_all) {
+                        break;
+                    }
+                }
+
+                state->t_sample_us += ggml_time_us() - t_start_sample_us;
+
+                // obtain logits for the next token
+                {
+                    auto & batch = state->batch;
+
+                    batch.n_tokens = 0;
+
+                    const int n_past = prompt.size() + i;
+
+                    for (int j = 0; j < n_decoders_cur; ++j) {
+                        auto & decoder = state->decoders[j];
+
+                        if (decoder.failed || decoder.completed) {
+                            continue;
+                        }
+
+                        //WHISPER_LOG_DEBUG("%s: decoder %d: token %d, seek_delta %d\n", __func__, j, decoder.sequence.tokens.back().id, decoder.seek_delta);
+
+                        decoder.i_batch = batch.n_tokens;
+
+                        batch.token   [batch.n_tokens]    = decoder.sequence.tokens.back().id;
+                        batch.pos     [batch.n_tokens]    = n_past;
+                        batch.n_seq_id[batch.n_tokens]    = 1;
+                        batch.seq_id  [batch.n_tokens][0] = j;
+                        batch.logits  [batch.n_tokens]    = 1;
+                        batch.n_tokens++;
+                    }
+
+                    assert(batch.n_tokens > 0);
+
+                    if (!whisper_decode_internal(*ctx, *state, state->batch, params.n_threads, false, params.abort_callback, params.abort_callback_user_data)) {
+                        WHISPER_LOG_ERROR("%s: failed to decode\n", __func__);
+                        return -8;
+                    }
+
+                    const int64_t t_start_sample_us = ggml_time_us();
+
+                    // TODO: avoid memory allocations, optimize, avoid threads?
+                    {
+                        std::atomic<int> j_cur(0);
+
+                        auto process = [&]() {
+                            while (true) {
+                                const int j = j_cur.fetch_add(1);
+
+                                if (j >= n_decoders_cur) {
+                                    break;
+                                }
+
+                                auto & decoder = state->decoders[j];
+
+                                if (decoder.failed || decoder.completed) {
+                                    continue;
+                                }
+
+                                whisper_process_logits(*ctx, *state, decoder, params, t_cur);
+                            }
+                        };
+
+                        const int n_threads = std::min(params.n_threads, n_decoders_cur);
+
+                        if (n_threads == 1) {
+                            process();
+                        } else {
+                            std::vector<std::thread> threads(n_threads - 1);
+
+                            for (int t = 0; t < n_threads - 1; ++t) {
+                                threads[t] = std::thread(process);
+                            }
+
+                            process();
+
+                            for (int t = 0; t < n_threads - 1; ++t) {
+                                threads[t].join();
+                            }
+                        }
+                    }
+
+                    state->t_sample_us += ggml_time_us() - t_start_sample_us;
+                }
+            }
+
+            // rank the resulting sequences and select the best one
+            {
+                double best_score = -INFINITY;
+
+                for (int j = 0; j < n_decoders_cur; ++j) {
+                    auto & decoder = state->decoders[j];
+
+                    if (decoder.failed) {
+                        continue;
+                    }
+
+                    decoder.sequence.tokens.resize(decoder.sequence.result_len);
+                    whisper_sequence_score(params, decoder.sequence);
+
+                    WHISPER_LOG_DEBUG("%s: decoder %2d: score = %8.5f, result_len = %3d, avg_logprobs = %8.5f, entropy = %8.5f\n",
+                            __func__, j, decoder.sequence.score, decoder.sequence.result_len, decoder.sequence.avg_logprobs, decoder.sequence.entropy);
+
+                    if (decoder.sequence.result_len > 32 && decoder.sequence.entropy < params.entropy_thold) {
+                        WHISPER_LOG_DEBUG("%s: decoder %2d: failed due to entropy %8.5f < %8.5f\n",
+                                __func__, j, decoder.sequence.entropy, params.entropy_thold);
+
+                        decoder.failed = true;
+                        state->n_fail_h++;
+
+                        continue;
+                    }
+
+                    if (best_score < decoder.sequence.score) {
+                        best_score = decoder.sequence.score;
+                        best_decoder_id = j;
+                    }
+                }
+
+                WHISPER_LOG_DEBUG("%s: best decoder = %d\n", __func__, best_decoder_id);
+            }
+
+            bool success = true;
+
+            // was the decoding successful for the current temperature?
+            // do fallback only if:
+            // - we are not at the last temperature
+            if (it != (int) temperatures.size() - 1) {
+                const auto & decoder = state->decoders[best_decoder_id];
+
+                if (decoder.failed || decoder.sequence.avg_logprobs < params.logprob_thold) {
+                    WHISPER_LOG_DEBUG("%s: failed due to avg_logprobs %8.5f < %8.5f\n", __func__, decoder.sequence.avg_logprobs, params.logprob_thold);
+                    success = false;
+                    state->n_fail_p++;
+                }
+            }
+
+            if (success) {
+                //for (auto & token : ctx->decoders[best_decoder_id].sequence.tokens) {
+                //    WHISPER_LOG_DEBUG("%s: token = %d, p = %6.3f, pt = %6.3f, ts = %s, str = %s\n", __func__, token.id, token.p, token.pt, ctx->vocab.id_to_token.at(token.tid).c_str(), ctx->vocab.id_to_token.at(token.id).c_str());
+                //}
+
+                break;
+            }
+
+            WHISPER_LOG_DEBUG("\n%s: failed to decode with temperature = %.2f\n", __func__, t_cur);
+        }
+
+        // output results through a user-provided callback
+        {
+            const auto & best_decoder = state->decoders[best_decoder_id];
+
+            const auto seek_delta = best_decoder.seek_delta;
+            const auto result_len = best_decoder.sequence.result_len;
+
+            const auto & tokens_cur = best_decoder.sequence.tokens;
+
+            // [EXPERIMENTAL] Token-level timestamps with DTW
+            const auto n_segments_before = state->result_all.size();
+
+            //WHISPER_LOG_DEBUG("prompt_init.size() = %d, prompt.size() = %d, result_len = %d, seek_delta = %d\n", prompt_init.size(), prompt.size(), result_len, seek_delta);
+
+            // update prompt_past
+            prompt_past.clear();
+            if (prompt.front() == whisper_token_prev(ctx)) {
+                prompt_past.insert(prompt_past.end(), prompt.begin() + 1, prompt.end() - prompt_init.size());
+            }
+
+            for (int i = 0; i < result_len; ++i) {
+                prompt_past.push_back(tokens_cur[i].id);
+            }
+
+            if (!tokens_cur.empty() && ctx->model.n_loaded > 0) {
+                int  i0 = 0;
+                auto t0 = seek + 2*(tokens_cur.front().tid - whisper_token_beg(ctx));
+
+                std::string text;
+                bool speaker_turn_next = false;
+
+                for (int i = 0; i < (int) tokens_cur.size(); i++) {
+                    //printf("%s: %18s %6.3f %18s %6.3f\n", __func__,
+                    //        ctx->vocab.id_to_token[tokens_cur[i].id].c_str(), tokens_cur[i].p,
+                    //        ctx->vocab.id_to_token[tokens_cur[i].tid].c_str(), tokens_cur[i].pt);
+
+                    if (params.print_special || tokens_cur[i].id < whisper_token_eot(ctx)) {
+                        text += whisper_token_to_str(ctx, tokens_cur[i].id);
+                    }
+
+                    // [TDRZ] record if speaker turn was predicted after current segment
+                    if (params.tdrz_enable && tokens_cur[i].id == whisper_token_solm(ctx)) {
+                        speaker_turn_next = true;
+                    }
+
+                    if (tokens_cur[i].id > whisper_token_beg(ctx) && !params.single_segment) {
+                        const auto t1 = seek + 2*(tokens_cur[i].tid - whisper_token_beg(ctx));
+
+                        if (!text.empty()) {
+                            const auto tt0 = t0;
+                            const auto tt1 = t1;
+
+                            if (params.print_realtime) {
+                                if (params.print_timestamps) {
+                                    printf("[%s --> %s]  %s\n", to_timestamp(tt0).c_str(), to_timestamp(tt1).c_str(), text.c_str());
+                                } else {
+                                    printf("%s", text.c_str());
+                                    fflush(stdout);
+                                }
+                            }
+
+                            //printf("tt0 = %d, tt1 = %d, text = %s, token = %s, token_id = %d, tid = %d\n", tt0, tt1, text.c_str(), ctx->vocab.id_to_token[tokens_cur[i].id].c_str(), tokens_cur[i].id, tokens_cur[i].tid);
+
+                            result_all.push_back({ tt0, tt1, text, {}, speaker_turn_next });
+                            for (int j = i0; j <= i; j++) {
+                                result_all.back().tokens.push_back(tokens_cur[j]);
+                            }
+
+                            int n_new = 1;
+
+                            if (params.token_timestamps) {
+                                whisper_exp_compute_token_level_timestamps(
+                                        *ctx, *state, result_all.size() - 1, params.thold_pt, params.thold_ptsum);
+
+                                if (params.max_len > 0) {
+                                    n_new = whisper_wrap_segment(*ctx, *state, params.max_len, params.split_on_word);
+                                }
+                            }
+                            if (params.new_segment_callback) {
+                                params.new_segment_callback(ctx, state, n_new, params.new_segment_callback_user_data);
+                            }
+                        }
+                        text = "";
+                        while (i < (int) tokens_cur.size() && tokens_cur[i].id > whisper_token_beg(ctx)) {
+                            i++;
+                        }
+                        i--;
+                        t0 = t1;
+                        i0 = i + 1;
+                        speaker_turn_next = false;
+                    }
+                }
+
+                if (!text.empty()) {
+                    const auto t1 = seek + seek_delta;
+
+                    const auto tt0 = t0;
+                    const auto tt1 = t1;
+
+                    if (params.print_realtime) {
+                        if (params.print_timestamps) {
+                            printf("[%s --> %s]  %s\n", to_timestamp(tt0).c_str(), to_timestamp(tt1).c_str(), text.c_str());
+                        } else {
+                            printf("%s", text.c_str());
+                            fflush(stdout);
+                        }
+                    }
+
+                    result_all.push_back({ tt0, tt1, text, {} , speaker_turn_next });
+                    for (int j = i0; j < (int) tokens_cur.size(); j++) {
+                        result_all.back().tokens.push_back(tokens_cur[j]);
+                    }
+
+                    int n_new = 1;
+
+                    if (params.token_timestamps) {
+                        whisper_exp_compute_token_level_timestamps(
+                                *ctx, *state, result_all.size() - 1, params.thold_pt, params.thold_ptsum);
+
+                        if (params.max_len > 0) {
+                            n_new = whisper_wrap_segment(*ctx, *state, params.max_len, params.split_on_word);
+                        }
+                    }
+                    if (params.new_segment_callback) {
+                        params.new_segment_callback(ctx, state, n_new, params.new_segment_callback_user_data);
+                    }
+                }
+            }
+
+            // FIXME: will timestamp offsets be correct?
+            // [EXPERIMENTAL] Token-level timestamps with DTW
+            {
+                const auto n_segments = state->result_all.size() - n_segments_before;
+                if (ctx->params.dtw_token_timestamps && n_segments) {
+                    const int n_frames = std::min(std::min(WHISPER_CHUNK_SIZE * 100, seek_delta), seek_end - seek);
+                    whisper_exp_compute_token_level_timestamps_dtw(
+                            ctx, state, params, result_all.size() - n_segments, n_segments, seek, n_frames, 7, params.n_threads);
+                }
+            }
+
+            // update audio window
+            seek += seek_delta;
+
+            WHISPER_LOG_DEBUG("seek = %d, seek_delta = %d\n", seek, seek_delta);
+        }
+    }
+
+    return 0;
+}
+
+int whisper_full(
+        struct whisper_context * ctx,
+    struct whisper_full_params   params,
+                   const float * samples,
+                           int   n_samples) {
+    return whisper_full_with_state(ctx, ctx->state, params, samples, n_samples);
+}
+
+int whisper_full_parallel(
+        struct whisper_context * ctx,
+        struct whisper_full_params params,
+        const float * samples,
+        int n_samples,
+        int n_processors) {
+    if (n_processors == 1) {
+        return whisper_full(ctx, params, samples, n_samples);
+    }
+    int ret = 0;
+
+    // prepare separate states for each thread
+    std::vector<whisper_state*> states;
+
+    const int offset_samples = (WHISPER_SAMPLE_RATE*params.offset_ms)/1000;
+    const int n_samples_per_processor = (n_samples - offset_samples)/n_processors;
+
+    // the calling thread will process the first chunk
+    // while the other threads will process the remaining chunks
+
+    std::vector<std::thread> workers(n_processors - 1);
+    for (int i = 0; i < n_processors - 1; ++i) {
+        // create a new state for each thread
+        states.push_back(whisper_init_state(ctx));
+
+        const int start_samples = offset_samples + (i + 1)*n_samples_per_processor;
+        const int n_samples_cur = (i == n_processors - 2) ? n_samples - start_samples : n_samples_per_processor;
+
+        auto params_cur = params;
+
+        params_cur.offset_ms = 0;
+        params_cur.print_progress = false;
+        params_cur.print_realtime = false;
+
+        params_cur.new_segment_callback = nullptr;
+        params_cur.new_segment_callback_user_data = nullptr;
+
+        params_cur.progress_callback = nullptr;
+        params_cur.progress_callback_user_data = nullptr;
+
+        workers[i] = std::thread(whisper_full_with_state, ctx, states[i], std::move(params_cur), samples + start_samples, n_samples_cur);
+    }
+
+    {
+        auto params_cur = params;
+
+        // We need to disable the print real-time for this one as well, otherwise it will show only for the first chunk.
+        params_cur.print_realtime = false;
+
+        // Run the first transformation using default state but only for the first chunk.
+        ret = whisper_full_with_state(ctx, ctx->state, std::move(params_cur), samples, offset_samples + n_samples_per_processor);
+    }
+
+    for (int i = 0; i < n_processors - 1; ++i) {
+        workers[i].join();
+    }
+
+    const int64_t offset_t = (int64_t) params.offset_ms/10.0;
+
+    // combine results into result_state->result_all from all other states
+    for (int i = 0; i < n_processors - 1; ++i) {
+        auto& results_i = states[i]->result_all;
+
+        for (auto& result : results_i) {
+            // correct the segment timestamp taking into account the offset
+            result.t0 += 100 * ((i + 1) * n_samples_per_processor) / WHISPER_SAMPLE_RATE + offset_t;
+            result.t1 += 100 * ((i + 1) * n_samples_per_processor) / WHISPER_SAMPLE_RATE + offset_t;
+
+            // make sure that segments are not overlapping
+            if (!ctx->state->result_all.empty()) {
+                result.t0 = std::max(result.t0, ctx->state->result_all.back().t1);
+            }
+
+            ctx->state->result_all.push_back(std::move(result));
+
+            // call the new_segment_callback for each segment
+            if (params.new_segment_callback) {
+                params.new_segment_callback(ctx, ctx->state, 1, params.new_segment_callback_user_data);
+            }
+        }
+
+        ctx->state->t_mel_us += states[i]->t_mel_us;
+
+        ctx->state->t_sample_us += states[i]->t_sample_us;
+        ctx->state->t_encode_us += states[i]->t_encode_us;
+        ctx->state->t_decode_us += states[i]->t_decode_us;
+        ctx->state->t_batchd_us += states[i]->t_batchd_us;
+        ctx->state->t_prompt_us += states[i]->t_prompt_us;
+
+        ctx->state->n_sample += states[i]->n_sample;
+        ctx->state->n_encode += states[i]->n_encode;
+        ctx->state->n_decode += states[i]->n_decode;
+        ctx->state->n_batchd += states[i]->n_batchd;
+        ctx->state->n_prompt += states[i]->n_prompt;
+
+        whisper_free_state(states[i]);
+    }
+
+    // average the timings
+    ctx->state->t_mel_us    /= n_processors;
+    ctx->state->t_sample_us /= n_processors;
+    ctx->state->t_encode_us /= n_processors;
+    ctx->state->t_decode_us /= n_processors;
+
+    // print information about the audio boundaries
+    WHISPER_LOG_WARN("\n");
+    WHISPER_LOG_WARN("%s: the audio has been split into %d chunks at the following times:\n", __func__, n_processors);
+    for (int i = 0; i < n_processors - 1; ++i) {
+        WHISPER_LOG_WARN("%s: split %d - %s\n", __func__, (i + 1), to_timestamp(100*((i + 1)*n_samples_per_processor)/WHISPER_SAMPLE_RATE + offset_t).c_str());
+    }
+    WHISPER_LOG_WARN("%s: the transcription quality may be degraded near these boundaries\n", __func__);
+
+    return ret;
+}
+
+int whisper_full_n_segments_from_state(struct whisper_state * state) {
+    return state->result_all.size();
+}
+
+int whisper_full_n_segments(struct whisper_context * ctx) {
+    return ctx->state->result_all.size();
+}
+
+int whisper_full_lang_id_from_state(struct whisper_state * state) {
+    return state->lang_id;
+}
+
+int whisper_full_lang_id(struct whisper_context * ctx) {
+    return ctx->state->lang_id;
+}
+
+int64_t whisper_full_get_segment_t0_from_state(struct whisper_state * state, int i_segment) {
+    return state->result_all[i_segment].t0;
+}
+
+int64_t whisper_full_get_segment_t0(struct whisper_context * ctx, int i_segment) {
+    return ctx->state->result_all[i_segment].t0;
+}
+
+int64_t whisper_full_get_segment_t1_from_state(struct whisper_state * state, int i_segment) {
+    return state->result_all[i_segment].t1;
+}
+
+int64_t whisper_full_get_segment_t1(struct whisper_context * ctx, int i_segment) {
+    return ctx->state->result_all[i_segment].t1;
+}
+
+bool whisper_full_get_segment_speaker_turn_next_from_state(struct whisper_state * state, int i_segment) {
+    return state->result_all[i_segment].speaker_turn_next;
+}
+
+bool whisper_full_get_segment_speaker_turn_next(struct whisper_context * ctx, int i_segment) {
+    return ctx->state->result_all[i_segment].speaker_turn_next;
+}
+
+const char * whisper_full_get_segment_text_from_state(struct whisper_state * state, int i_segment) {
+    return state->result_all[i_segment].text.c_str();
+}
+
+const char * whisper_full_get_segment_text(struct whisper_context * ctx, int i_segment) {
+    return ctx->state->result_all[i_segment].text.c_str();
+}
+
+int whisper_full_n_tokens_from_state(struct whisper_state * state, int i_segment) {
+    return state->result_all[i_segment].tokens.size();
+}
+
+int whisper_full_n_tokens(struct whisper_context * ctx, int i_segment) {
+    return ctx->state->result_all[i_segment].tokens.size();
+}
+
+const char * whisper_full_get_token_text_from_state(struct whisper_context * ctx, struct whisper_state * state, int i_segment, int i_token) {
+    return ctx->vocab.id_to_token[state->result_all[i_segment].tokens[i_token].id].c_str();
+}
+
+const char* whisper_full_get_token_text(struct whisper_context * ctx, int i_segment, int i_token) {
+    return ctx->vocab.id_to_token[ctx->state->result_all[i_segment].tokens[i_token].id].c_str();
+}
+
+whisper_token whisper_full_get_token_id_from_state(struct whisper_state * state, int i_segment, int i_token) {
+    return state->result_all[i_segment].tokens[i_token].id;
+}
+
+whisper_token whisper_full_get_token_id(struct whisper_context * ctx, int i_segment, int i_token) {
+    return ctx->state->result_all[i_segment].tokens[i_token].id;
+}
+
+struct whisper_token_data whisper_full_get_token_data_from_state(struct whisper_state * state, int i_segment, int i_token) {
+    return state->result_all[i_segment].tokens[i_token];
+}
+
+struct whisper_token_data whisper_full_get_token_data(struct whisper_context * ctx, int i_segment, int i_token) {
+    return ctx->state->result_all[i_segment].tokens[i_token];
+}
+
+float whisper_full_get_token_p_from_state(struct whisper_state * state, int i_segment, int i_token) {
+    return state->result_all[i_segment].tokens[i_token].p;
+}
+
+float whisper_full_get_token_p(struct whisper_context * ctx, int i_segment, int i_token) {
+    return ctx->state->result_all[i_segment].tokens[i_token].p;
+}
+
+// =================================================================================================
+
+//
+// Temporary interface needed for exposing ggml interface
+// Will be removed in the future when ggml becomes a separate library
+//
+
+WHISPER_API int whisper_bench_memcpy(int n_threads) {
+    fputs(whisper_bench_memcpy_str(n_threads), stderr);
+    return 0;
+}
+
+WHISPER_API const char * whisper_bench_memcpy_str(int n_threads) {
+    static std::string s;
+    s = "";
+    char strbuf[256];
+
+    ggml_time_init();
+
+    size_t n    = 20;
+    size_t arr  = n_threads > 0 ? 1024llu : n_threads; // trick to avoid compiler optimizations
+
+    // 1GB array
+    const size_t size = arr*1e6;
+
+    double sum  = 0.0;
+
+    // heat-up
+    {
+        char * src = (char *) malloc(size);
+        char * dst = (char *) malloc(size);
+
+        for (size_t i = 0; i < size; i++) src[i] = i;
+
+        memcpy(dst, src, size); // heat-up
+
+        double tsum = 0.0;
+
+        for (size_t i = 0; i < n; i++) {
+            const int64_t t0 = ggml_time_us();
+
+            memcpy(dst, src, size);
+
+            const int64_t t1 = ggml_time_us();
+
+            tsum += (t1 - t0)*1e-6;
+
+            src[rand() % size] = rand() % 256;
+        }
+
+        snprintf(strbuf, sizeof(strbuf), "memcpy: %7.2f GB/s (heat-up)\n", (double) (n*size)/(tsum*1e9));
+        s += strbuf;
+
+        // needed to prevent the compiler from optimizing the memcpy away
+        {
+            for (size_t i = 0; i < size; i++) sum += dst[i];
+        }
+
+        free(src);
+        free(dst);
+    }
+
+    // single-thread
+    {
+        char * src = (char *) malloc(size);
+        char * dst = (char *) malloc(size);
+
+        for (size_t i = 0; i < size; i++) src[i] = i;
+
+        memcpy(dst, src, size); // heat-up
+
+        double tsum = 0.0;
+
+        for (size_t i = 0; i < n; i++) {
+            const int64_t t0 = ggml_time_us();
+
+            memcpy(dst, src, size);
+
+            const int64_t t1 = ggml_time_us();
+
+            tsum += (t1 - t0)*1e-6;
+
+            src[rand() % size] = rand() % 256;
+        }
+
+        snprintf(strbuf, sizeof(strbuf), "memcpy: %7.2f GB/s ( 1 thread)\n", (double) (n*size)/(tsum*1e9));
+        s += strbuf;
+
+        // needed to prevent the compiler from optimizing the memcpy away
+        {
+            for (size_t i = 0; i < size; i++) sum += dst[i];
+        }
+
+        free(src);
+        free(dst);
+    }
+
+    // multi-thread
+
+    for (int32_t k = 1; k <= n_threads; k++) {
+        char * src = (char *) malloc(size);
+        char * dst = (char *) malloc(size);
+
+        for (size_t i = 0; i < size; i++) src[i] = i;
+
+        memcpy(dst, src, size); // heat-up
+
+        double tsum = 0.0;
+
+        auto helper = [&](int th) {
+            const int64_t i0 = (th + 0)*size/k;
+            const int64_t i1 = (th + 1)*size/k;
+
+            for (size_t i = 0; i < n; i++) {
+                memcpy(dst + i0, src + i0, i1 - i0);
+
+                src[i0 + rand() % (i1 - i0)] = rand() % 256;
+            };
+        };
+
+        const int64_t t0 = ggml_time_us();
+
+        std::vector<std::thread> threads(k - 1);
+        for (int32_t th = 0; th < k - 1; ++th) {
+            threads[th] = std::thread(helper, th);
+        }
+
+        helper(k - 1);
+
+        for (int32_t th = 0; th < k - 1; ++th) {
+            threads[th].join();
+        }
+
+        const int64_t t1 = ggml_time_us();
+
+        tsum += (t1 - t0)*1e-6;
+
+        snprintf(strbuf, sizeof(strbuf), "memcpy: %7.2f GB/s (%2d thread)\n", (double) (n*size)/(tsum*1e9), k);
+        s += strbuf;
+
+        // needed to prevent the compiler from optimizing the memcpy away
+        {
+            for (size_t i = 0; i < size; i++) sum += dst[i];
+        }
+
+        free(src);
+        free(dst);
+    }
+
+    snprintf(strbuf, sizeof(strbuf), "sum:    %f\n", sum);
+    s += strbuf;
+
+    return s.c_str();
+}
+
+WHISPER_API int whisper_bench_ggml_mul_mat(int n_threads) {
+    fputs(whisper_bench_ggml_mul_mat_str(n_threads), stderr);
+    return 0;
+}
+
+WHISPER_API const char * whisper_bench_ggml_mul_mat_str(int n_threads) {
+    static std::string s;
+    s = "";
+    char strbuf[256];
+
+    ggml_time_init();
+
+    const int n_max = 128;
+
+    const std::vector<size_t> sizes = {
+        64, 128, 256, 512, 1024, 2048, 4096,
+    };
+
+    const size_t N_max = sizes.back();
+
+    // a: N*N*sizeof(float)
+    // b: N*N*sizeof(float)
+    // c: N*N*sizeof(float)
+    // when F16 is used, there is an extra work buffer of size N*N*sizeof(float)
+    std::vector<uint8_t> buf(3llu*N_max*N_max*sizeof(float) + 3*ggml_tensor_overhead() + ggml_graph_overhead());
+    std::vector<uint8_t> work;
+
+    // put a bunch of random data in the buffer
+    for (size_t i = 0; i < buf.size(); i++) buf[i] = i;
+
+    for (int j = 0; j < (int) sizes.size(); j++) {
+        int n_q4_0 = 0;
+        int n_q4_1 = 0;
+        int n_q5_0 = 0;
+        int n_q5_1 = 0;
+        int n_q8_0 = 0;
+        int n_fp16 = 0;
+        int n_fp32 = 0;
+
+        // GFLOPS/s
+        double s_q4_0 = 0.0;
+        double s_q4_1 = 0.0;
+        double s_q5_0 = 0.0;
+        double s_q5_1 = 0.0;
+        double s_q8_0 = 0.0;
+        double s_fp16 = 0.0;
+        double s_fp32 = 0.0;
+
+        const size_t N = sizes[j];
+
+        for (int k = 0; k < 7; ++k) {
+            const ggml_type wtype =
+                k == 0 ? GGML_TYPE_Q4_0 :
+                k == 1 ? GGML_TYPE_Q4_1 :
+                k == 2 ? GGML_TYPE_Q5_0 :
+                k == 3 ? GGML_TYPE_Q5_1 :
+                k == 4 ? GGML_TYPE_Q8_0 :
+                k == 5 ? GGML_TYPE_F16  : GGML_TYPE_F32;
+
+            double & s = k == 0 ? s_q4_0 : k == 1 ? s_q4_1 : k == 2 ? s_q5_0 : k == 3 ? s_q5_1 : k == 4 ? s_q8_0 : k == 5 ? s_fp16 : /*k == 6*/ s_fp32;
+            int    & n = k == 0 ? n_q4_0 : k == 1 ? n_q4_1 : k == 2 ? n_q5_0 : k == 3 ? n_q5_1 : k == 4 ? n_q8_0 : k == 5 ? n_fp16 : /*k == 6*/ n_fp32;
+
+            struct ggml_init_params gparams = {
+                /*.mem_size   =*/ buf.size(),
+                /*.mem_buffer =*/ buf.data(),
+                /*.no_alloc   =*/ false,
+            };
+
+            struct ggml_context * ctx0 = ggml_init(gparams);
+
+            struct ggml_tensor * a = ggml_new_tensor_2d(ctx0, wtype,         N, N);
+            struct ggml_tensor * b = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, N, N);
+
+            struct ggml_tensor * c = ggml_mul_mat(ctx0, a, b);
+
+            struct ggml_cgraph * gf = ggml_new_graph(ctx0);
+
+            ggml_build_forward_expand(gf, c);
+
+            double tsum = 0.0;
+
+            // heat-up
+            ggml_graph_compute_helper(gf, work, n_threads, nullptr, nullptr);
+
+            for (int i = 0; i < n_max; ++i) {
+                const int64_t t0 = ggml_time_us();
+
+                ggml_graph_compute_helper(gf, work, n_threads, nullptr, nullptr);
+
+                const int64_t t1 = ggml_time_us();
+
+                tsum += (t1 - t0)*1e-6;
+                n++;
+
+                if (tsum > 1.0 && n >= 3) {
+                    break;
+                }
+            }
+
+            ggml_free(ctx0);
+
+            s = ((2.0*N*N*N*n)/tsum)*1e-9;
+        }
+
+        // Q4_0 | Q4_1
+        snprintf(strbuf, sizeof(strbuf), "%4zu x %4zu: Q4_0 %7.1f GFLOPS (%3d runs) | Q4_1 %7.1f GFLOPS (%3d runs)\n",
+                N, N, s_q4_0, n_q4_0, s_q4_1, n_q4_1);
+        s += strbuf;
+
+        // Q5_0 | Q5_1 | Q8_0
+        snprintf(strbuf, sizeof(strbuf), "%4zu x %4zu: Q5_0 %7.1f GFLOPS (%3d runs) | Q5_1 %7.1f GFLOPS (%3d runs) | Q8_0 %7.1f GFLOPS (%3d runs)\n",
+                N, N, s_q5_0, n_q5_0, s_q5_1, n_q5_1, s_q8_0, n_q8_0);
+        s += strbuf;
+
+        // F16 | F32
+        snprintf(strbuf, sizeof(strbuf), "%4zu x %4zu: F16  %7.1f GFLOPS (%3d runs) | F32  %7.1f GFLOPS (%3d runs)\n",
+                N, N, s_fp16, n_fp16, s_fp32, n_fp32);
+        s += strbuf;
+    }
+
+    return s.c_str();
+}
+
+// =================================================================================================
+
+// =================================================================================================
+
+//
+// Experimental stuff below
+//
+// Not sure if these should be part of the library at all, because the quality of the results is not
+// guaranteed. Might get removed at some point unless a robust algorithm implementation is found
+//
+
+// =================================================================================================
+
+//
+// token-level timestamps
+//
+
+static int timestamp_to_sample(int64_t t, int n_samples) {
+    return std::max(0, std::min((int) n_samples - 1, (int) ((t*WHISPER_SAMPLE_RATE)/100)));
+}
+
+static int64_t sample_to_timestamp(int i_sample) {
+    return (100ll*i_sample)/WHISPER_SAMPLE_RATE;
+}
+
+// a cost-function / heuristic that is high for text that takes longer to pronounce
+// obviously, can be improved
+static float voice_length(const std::string & text) {
+    float res = 0.0f;
+
+    for (char c : text) {
+        if (c == ' ') {
+            res += 0.01f;
+        } else if (c == ',') {
+            res += 2.00f;
+        } else if (c == '.') {
+            res += 3.00f;
+        } else if (c == '!') {
+            res += 3.00f;
+        } else if (c == '?') {
+            res += 3.00f;
+        } else if (c >= '0' && c <= '9') {
+            res += 3.00f;
+        } else {
+            res += 1.00f;
+        }
+    }
+
+    return res;
+}
+
+// average the fabs of the signal
+static std::vector<float> get_signal_energy(const float * signal, int n_samples, int n_samples_per_half_window) {
+    const int hw = n_samples_per_half_window;
+
+    std::vector<float> result(n_samples);
+
+    for (int i = 0; i < n_samples; i++) {
+        float sum = 0;
+        for (int j = -hw; j <= hw; j++) {
+            if (i + j >= 0 && i + j < n_samples) {
+                sum += fabs(signal[i + j]);
+            }
+        }
+        result[i] = sum/(2*hw + 1);
+    }
+
+    return result;
+}
+
+static void whisper_exp_compute_token_level_timestamps(
+        struct whisper_context & ctx,
+          struct whisper_state & state,
+                           int   i_segment,
+                         float   thold_pt,
+                         float   thold_ptsum) {
+    auto & segment = state.result_all[i_segment];
+    auto & tokens  = segment.tokens;
+
+    const int n_samples = state.energy.size();
+
+    if (n_samples == 0) {
+        WHISPER_LOG_ERROR("%s: no signal data available\n", __func__);
+        return;
+    }
+
+    const int64_t t0 = segment.t0;
+    const int64_t t1 = segment.t1;
+
+    const int n = tokens.size();
+
+    if (n == 0) {
+        return;
+    }
+
+    if (n == 1) {
+        tokens[0].t0 = t0;
+        tokens[0].t1 = t1;
+
+        return;
+    }
+
+    auto & t_beg    = state.t_beg;
+    auto & t_last   = state.t_last;
+    auto & tid_last = state.tid_last;
+
+    for (int j = 0; j < n; ++j) {
+        auto & token = tokens[j];
+
+        if (j == 0) {
+            if (token.id == whisper_token_beg(&ctx)) {
+                tokens[j    ].t0 = t0;
+                tokens[j    ].t1 = t0;
+                tokens[j + 1].t0 = t0;
+
+                t_beg    = t0;
+                t_last   = t0;
+                tid_last = whisper_token_beg(&ctx);
+            } else {
+                tokens[j    ].t0 = t_last;
+            }
+        }
+
+        const int64_t tt = t_beg + 2*(token.tid - whisper_token_beg(&ctx));
+
+        tokens[j].id    = token.id;
+        tokens[j].tid   = token.tid;
+        tokens[j].p     = token.p;
+        tokens[j].pt    = token.pt;
+        tokens[j].ptsum = token.ptsum;
+
+        tokens[j].vlen = voice_length(whisper_token_to_str(&ctx, token.id));
+
+        if (token.pt > thold_pt && token.ptsum > thold_ptsum && token.tid > tid_last && tt <= t1) {
+            if (j > 0) {
+                tokens[j - 1].t1 = tt;
+            }
+            tokens[j].t0 = tt;
+            tid_last = token.tid;
+        }
+    }
+
+    tokens[n - 2].t1 = t1;
+    tokens[n - 1].t0 = t1;
+    tokens[n - 1].t1 = t1;
+
+    t_last = t1;
+
+    // find intervals of tokens with unknown timestamps
+    // fill the timestamps by proportionally splitting the interval based on the token voice lengths
+    {
+        int p0 = 0;
+        int p1 = 0;
+
+        while (true) {
+            while (p1 < n && tokens[p1].t1 < 0) {
+                p1++;
+            }
+
+            if (p1 >= n) {
+                p1--;
+            }
+
+            //printf("p0=%d p1=%d t0=%lld t1=%lld\n", p0, p1, tokens[p0].t0, tokens[p1].t1);
+
+            if (p1 > p0) {
+                double psum = 0.0;
+                for (int j = p0; j <= p1; j++) {
+                    psum += tokens[j].vlen;
+                }
+
+                //printf("analyzing %d - %d, psum = %f\n", p0, p1, psum);
+
+                const double dt = tokens[p1].t1 - tokens[p0].t0;
+
+                // split the time proportionally to the voice length
+                for (int j = p0 + 1; j <= p1; j++) {
+                    const double ct = tokens[j - 1].t0 + dt*tokens[j - 1].vlen/psum;
+
+                    tokens[j - 1].t1 = ct;
+                    tokens[j    ].t0 = ct;
+                }
+            }
+
+            p1++;
+            p0 = p1;
+            if (p1 >= n) {
+                break;
+            }
+        }
+    }
+
+    // fix up (just in case)
+    for (int j = 0; j < n - 1; j++) {
+        if (tokens[j].t1 < 0) {
+            tokens[j + 1].t0 = tokens[j].t1;
+        }
+
+        if (j > 0) {
+            if (tokens[j - 1].t1 > tokens[j].t0) {
+                tokens[j].t0 = tokens[j - 1].t1;
+                tokens[j].t1 = std::max(tokens[j].t0, tokens[j].t1);
+            }
+        }
+    }
+
+    // VAD
+    // expand or contract tokens based on voice activity
+    {
+        const int hw = WHISPER_SAMPLE_RATE/8;
+
+        for (int j = 0; j < n; j++) {
+            if (tokens[j].id >= whisper_token_eot(&ctx)) {
+                continue;
+            }
+
+            int s0 = timestamp_to_sample(tokens[j].t0, n_samples);
+            int s1 = timestamp_to_sample(tokens[j].t1, n_samples);
+
+            const int ss0 = std::max(s0 - hw, 0);
+            const int ss1 = std::min(s1 + hw, n_samples);
+
+            const int ns = ss1 - ss0;
+
+            float sum = 0.0f;
+
+            for (int k = ss0; k < ss1; k++) {
+                sum += state.energy[k];
+            }
+
+            const float thold = 0.5*sum/ns;
+
+            {
+                int k = s0;
+                if (state.energy[k] > thold && j > 0) {
+                    while (k > 0 && state.energy[k] > thold) {
+                        k--;
+                    }
+                    tokens[j].t0 = sample_to_timestamp(k);
+                    if (tokens[j].t0 < tokens[j - 1].t1) {
+                        tokens[j].t0 = tokens[j - 1].t1;
+                    } else {
+                        s0 = k;
+                    }
+                } else {
+                    while (state.energy[k] < thold && k < s1) {
+                        k++;
+                    }
+                    s0 = k;
+                    tokens[j].t0 = sample_to_timestamp(k);
+                }
+            }
+
+            {
+                int k = s1;
+                if (state.energy[k] > thold) {
+                    while (k < n_samples - 1 && state.energy[k] > thold) {
+                        k++;
+                    }
+                    tokens[j].t1 = sample_to_timestamp(k);
+                    if (j < ns - 1 && tokens[j].t1 > tokens[j + 1].t0) {
+                        tokens[j].t1 = tokens[j + 1].t0;
+                    } else {
+                        s1 = k;
+                    }
+                } else {
+                    while (state.energy[k] < thold && k > s0) {
+                        k--;
+                    }
+                    s1 = k;
+                    tokens[j].t1 = sample_to_timestamp(k);
+                }
+            }
+        }
+    }
+
+    // fixed token expand (optional)
+    //{
+    //    const int t_expand = 0;
+
+    //    for (int j = 0; j < n; j++) {
+    //        if (j > 0) {
+    //            tokens[j].t0 = std::max(0, (int) (tokens[j].t0 - t_expand));
+    //        }
+    //        if (j < n - 1) {
+    //            tokens[j].t1 = tokens[j].t1 + t_expand;
+    //        }
+    //    }
+    //}
+
+    // debug info
+    //for (int j = 0; j < n; ++j) {
+    //    const auto & token = tokens[j];
+    //    const auto tt = token.pt > thold_pt && token.ptsum > 0.01 ? whisper_token_to_str(&ctx, token.tid) : "[?]";
+    //    printf("%s: %10s %6.3f %6.3f %6.3f %6.3f %5d %5d '%s'\n", __func__,
+    //            tt, token.p, token.pt, token.ptsum, token.vlen, (int) token.t0, (int) token.t1, whisper_token_to_str(&ctx, token.id));
+
+    //    if (tokens[j].id >= whisper_token_eot(&ctx)) {
+    //        continue;
+    //    }
+    //}
+}
+
+//
+// token level timestamps - dtw version
+//
+
+// n_text_layer -> total text layers on model
+// n_head -> total heads per text layer on model
+static std::vector<uint32_t> get_alignment_heads_by_layer(const whisper_context_params & cparams, int il, int n_text_layer, int n_head) {
+    std::vector<uint32_t> ret;
+    if (cparams.dtw_aheads_preset == WHISPER_AHEADS_NONE) {
+        return ret;
+    } else if (cparams.dtw_aheads_preset == WHISPER_AHEADS_N_TOP_MOST) {
+        if (il >= n_text_layer - cparams.dtw_n_top) {
+            for (int32_t i = 0; i < n_head; ++i) {
+                ret.push_back(i);
+            }
+        }
+    } else {
+        const auto aheads = cparams.dtw_aheads_preset == WHISPER_AHEADS_CUSTOM ? cparams.dtw_aheads : g_aheads.at(cparams.dtw_aheads_preset);
+        for (size_t i = 0; i < aheads.n_heads; ++i) {
+            if (aheads.heads[i].n_text_layer == il) {
+                ret.push_back(aheads.heads[i].n_head);
+            }
+        }
+    }
+    return ret;
+}
+
+// dtw + backtrace to return found path
+// based on
+// https://github.com/openai/whisper/blob/main/whisper/timing.py#L83
+static ggml_tensor * dtw_and_backtrace(ggml_context * ctx, ggml_tensor * x) {
+    WHISPER_ASSERT(ggml_n_dims(x) == 2);
+
+    int64_t N = x->ne[0];
+    int64_t M = x->ne[1];
+    struct ggml_tensor * cost = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, N + 1, M + 1);
+    struct ggml_tensor * trace = ggml_new_tensor_2d(ctx, GGML_TYPE_I32, N + 1, M + 1);
+
+    cost = ggml_set_f32(cost, INFINITY);
+    trace = ggml_set_f32(trace, -1);
+    ggml_set_f32_nd(cost, 0, 0, 0, 0, 0.0);
+
+    // dtw
+    // supposedly can be optmized by computing diagonals in parallel ?
+    // Not sure it is worth it since x will be GENERATED_TOKENS*1500 size at most.
+    for (int64_t j = 1; j < M + 1; ++j) {
+        for (int64_t i = 1; i < N + 1; ++i) {
+            float c0 = ggml_get_f32_nd(cost, i - 1, j - 1, 0, 0);
+            float c1 = ggml_get_f32_nd(cost, i - 1, j, 0, 0);
+            float c2 = ggml_get_f32_nd(cost, i, j - 1, 0, 0);
+
+            float c;
+            int32_t t;
+            if (c0 < c1 && c0 < c2) {
+                c = c0;
+                t = 0;
+            } else if (c1 < c0 && c1 < c2) {
+                c = c1;
+                t = 1;
+            } else {
+                c = c2;
+                t = 2;
+            }
+
+            c = ggml_get_f32_nd(x, i - 1, j - 1, 0, 0) + c;
+            ggml_set_f32_nd(cost, i, j, 0, 0, c);
+            ggml_set_i32_nd(trace, i, j, 0, 0, t);
+        }
+    }
+
+    // Backtrace
+    const int64_t BT_MAX_ROWS = N + M - 1;
+    struct ggml_tensor * bt = ggml_new_tensor_2d(ctx, GGML_TYPE_I32, BT_MAX_ROWS, 2);
+    // trace[0, :] = 2;
+    for (int64_t i = 0; i < M + 1; ++i)
+        ggml_set_i32_nd(trace, 0, i, 0, 0, 2);
+    //trace[:, 0] = 1;
+    for (int64_t i = 0; i < N + 1; ++i)
+        ggml_set_i32_nd(trace, i, 0, 0, 0, 1);
+    int bt_row_idx = BT_MAX_ROWS - 1;
+    int64_t i = N;
+    int64_t j = M;
+    while (i > 0 || j > 0) {
+        ggml_set_i32_nd(bt, bt_row_idx, 0, 0, 0, i - 1);
+        ggml_set_i32_nd(bt, bt_row_idx, 1, 0, 0, j - 1);
+        --bt_row_idx;
+
+        int32_t t = ggml_get_i32_nd(trace, i, j, 0, 0);
+        if (t == 0) {
+            --i;
+            --j;
+        } else if (t == 1) {
+            --i;
+        } else if (t == 2) {
+            --j;
+        } else {
+            WHISPER_ASSERT(0);
+        }
+    }
+
+    // FIXME: manual clip/transpose might not be the most efficient way? (e.g. use ggml funcs)
+    // Clip + transpose
+    // This might not be entirely necessary for our case, but leaving it for now so output matrix
+    // is identical to dtw on openAI timing.py
+    const int64_t result_n_cols = BT_MAX_ROWS-bt_row_idx-1;
+    ggml_tensor * r = ggml_new_tensor_2d(ctx, GGML_TYPE_I32, 2, result_n_cols);
+    for (int64_t i = 0; i < 2; ++i) {
+        for (int64_t j = 0; j < result_n_cols; ++j) {
+            int32_t v = ggml_get_i32_nd(bt, j+bt_row_idx+1, i, 0, 0);
+            ggml_set_i32_nd(r, i, j, 0, 0, v);
+        }
+    }
+
+    return r;
+}
+
+struct median_filter_user_data {
+    int filter_width;
+};
+
+static void median_filter(struct ggml_tensor * dst , const struct ggml_tensor * a, int ith, int nth, void * userdata) {
+    int filter_width = ((median_filter_user_data *) userdata)->filter_width;
+    WHISPER_ASSERT(nth == 1);
+    WHISPER_ASSERT(ith == 0);
+    WHISPER_ASSERT(filter_width < a->ne[2]);
+    WHISPER_ASSERT(filter_width % 2);
+    WHISPER_ASSERT(ggml_n_dims(a) == 3);
+    WHISPER_ASSERT(a->type == GGML_TYPE_F32);
+
+    std::vector<float> filter;
+    filter.reserve(filter_width);
+    for (int64_t i = 0; i < a->ne[0]; ++i) {
+        for (int64_t j = 0; j < a->ne[1]; ++j) {
+            for (int64_t k = 0; k < a->ne[2]; ++k) {
+                for (int64_t off = -filter_width/2; off <= filter_width/2; ++off) {
+                    // "reflect" padding
+                    int64_t idx = k + off;
+                    if (idx < 0) {
+                        idx = -idx;
+                    } else if (idx >= a->ne[2]) {
+                        idx = 2*(a->ne[2] - 1) - idx;
+                    }
+
+                    filter.push_back(ggml_get_f32_nd(a, i, j, idx, 0));
+                }
+                std::sort(filter.begin(), filter.end());
+                const float v = filter[filter.size()/2];
+                ggml_set_f32_nd(dst, i, j, k, 0, v);
+                filter.clear();
+            }
+        }
+    }
+}
+
+static void whisper_exp_compute_token_level_timestamps_dtw(
+            struct whisper_context * ctx,
+              struct whisper_state * state,
+        struct whisper_full_params   params,
+                               int   i_segment,
+                            size_t   n_segments,
+                               int   seek,
+                               int   n_frames,
+                               int   medfilt_width,
+                               int   n_threads)
+{
+    const int n_audio_ctx = state->exp_n_audio_ctx > 0 ? state->exp_n_audio_ctx : ctx->model.hparams.n_audio_ctx;
+    WHISPER_ASSERT(medfilt_width % 2);
+    WHISPER_ASSERT(n_frames <= n_audio_ctx * 2);
+    WHISPER_ASSERT(ctx->params.dtw_aheads_preset != WHISPER_AHEADS_NONE);
+
+    // FIXME: Allocating mem everytime we call this func
+    // Our ggml buffer should be pre-allocated somewhere during init and reused
+    // when we call this function
+    struct ggml_init_params gparams = {
+        /*.mem_size   =*/ ctx->params.dtw_mem_size,
+        /*.mem_buffer =*/ NULL,
+        /*.no_alloc   =*/ false,
+    };
+    struct ggml_context * gctx = ggml_init(gparams);
+
+    // Build token sequence that will be passed to decoder
+    // sot + [lang] + text result + eot
+    std::vector<whisper_token> tokens = { whisper_token_sot(ctx), };
+    if (whisper_is_multilingual(ctx)) {
+        const int lang_id = whisper_lang_id(params.language);
+        state->lang_id = lang_id;
+        tokens.push_back(whisper_token_lang(ctx, lang_id));
+    }
+    const size_t sot_sequence_length = tokens.size();
+    tokens.push_back(whisper_token_not(ctx));
+    for (size_t i = i_segment; i < i_segment + n_segments; ++i) {
+        auto & segment = state->result_all[i];
+        for (auto &t: segment.tokens) {
+            // Only text tokens
+            if (t.id < whisper_token_eot(ctx)) {
+                tokens.push_back(t.id);
+            }
+        }
+    }
+    tokens.push_back(whisper_token_eot(ctx));
+
+    // Get result tokens, pass then along to decoder to get cross attention QKs
+    // used in timestamping
+    // Decoder already returns only alignment head QKs, already concatenated in
+    // one tensor.
+    whisper_kv_cache_clear(state->kv_self);
+    whisper_batch_prep_legacy(state->batch, tokens.data(), tokens.size(), 0, 0);
+    whisper_kv_cache_seq_rm(state->kv_self, 0, 0, -1);
+    if (!whisper_decode_internal(*ctx, *state, state->batch, n_threads, true, nullptr, nullptr)) {
+        WHISPER_LOG_INFO("DECODER FAILED\n");
+        WHISPER_ASSERT(0);
+    }
+    WHISPER_ASSERT(state->aheads_cross_QKs != nullptr);
+
+    const auto n_audio_tokens = n_frames/2;
+    WHISPER_ASSERT(state->aheads_cross_QKs != NULL);
+    WHISPER_ASSERT(n_audio_tokens <= state->aheads_cross_QKs->ne[1]);
+    const auto n_tokens = state->aheads_cross_QKs->ne[0];
+    const auto n_heads = state->aheads_cross_QKs->ne[2];
+
+    // Copy data from decoder buffer to a local CPU tensor, discarding unused audio
+    // tokens (i.e. discarding rows at the end of tensor)
+    // IN: Tensor with N_TOKENS*audio_ctx*N_ALIGNMENT_HEADS dims
+    // OUT: Tensor with N_TOKENS*N_AUDIO_TOKENS*N_ALIGNMENT_HEADS dims
+    WHISPER_ASSERT(state->aheads_cross_QKs->type == GGML_TYPE_F32);
+    WHISPER_ASSERT(ggml_is_contiguous(state->aheads_cross_QKs));
+    ggml_tensor * w = ggml_new_tensor_3d(gctx, GGML_TYPE_F32, n_tokens, n_audio_tokens, n_heads);
+    auto & data = state->aheads_cross_QKs_data;
+    data.resize(n_tokens * n_audio_ctx * n_heads);
+    ggml_backend_tensor_get(state->aheads_cross_QKs, data.data(), 0, sizeof(float) * n_tokens * n_audio_ctx * n_heads);
+    for (int k = 0; k < n_heads; ++k) {
+        for (int j = 0; j < n_audio_tokens; ++j) {
+            memcpy(
+                (char *) w->data + j * w->nb[1] + k * w->nb[2],
+                data.data() + j * n_tokens + k * n_tokens * n_audio_ctx,
+                n_tokens * sizeof(float)
+            );
+        }
+    }
+
+    // Normalize - in original OpenAI code, this is done over dim=-2. In this case,
+    // we already permuted N_TOKENS dimension to columns on last loop, becase ggml_norm
+    // operates over columns. Afterwards, permute to a shape that facilitates mean
+    // operation (after median filter)
+    // IN: Tensor with N_TOKENS*N_AUDIO_TOKENS*N_ALIGNMENT_HEADS dims
+    // OUT: Tensor with N_ALIGNMENT_HEADS*N_TOKENS*N_AUDIO_TOKENS dims
+    w = ggml_norm(gctx, w, 1e-9f);
+    w = ggml_permute(gctx, ggml_permute(gctx, w, 2, 1, 0 ,3), 0, 2, 1, 3);
+
+    // Pass median filter - this is done over AUDIO_TOKENS dimension.
+    // IN: Tensor with N_ALIGNMENT_HEADS*N_TOKENS*N_AUDIO_TOKENS dims
+    // OUT: Same dims
+    median_filter_user_data mf_user_data = {medfilt_width};
+    w = ggml_map_custom1(gctx, w, median_filter, 1, &mf_user_data);
+
+    // Take mean over columns, scale by -1, reshape to 2D tensor, remove SOT sequence and EOT
+    // IN: Tensor with N_ALIGNMENT_HEADS*N_TOKENS*N_AUDIO_TOKENS dims
+    // OUT: Tensor with N_TOKENS*N_AUDIO_TOKENS dims
+    w = ggml_mean(gctx, w);
+    w = ggml_scale(gctx, w, -1.0);
+    w = ggml_reshape_2d(gctx, w, w->ne[1], w->ne[2]);
+
+    // Remove SOT sequence and EOT
+    // Out dimension is (N_TOKENS-sot_sequence_length-1)*N_AUDIO_TOKENS
+    w = ggml_view_2d(gctx, w, w->ne[0] - sot_sequence_length - 1, w->ne[1], w->nb[1], sot_sequence_length * w->nb[0]);
+
+    // Compute
+    struct ggml_cgraph * gf = ggml_new_graph(gctx);
+    ggml_build_forward_expand(gf, w);
+    ggml_graph_compute_with_ctx(gctx, gf, n_threads);
+
+    ggml_tensor * alignment = dtw_and_backtrace(gctx, w);
+
+    // Place timestamps on segments
+    int32_t last_v = 0;
+    auto seg_i = state->result_all.begin() + i_segment;
+    auto tok_i = seg_i->tokens.begin();
+    for (int i = 0; i < alignment->ne[1]; ++i) {
+        int32_t v = ggml_get_i32_nd(alignment, 0, i, 0, 0);
+        if (v != last_v) {
+            int32_t time_index = ggml_get_i32_nd(alignment, 1, i, 0, 0);
+            int64_t timestamp = (time_index * 2) + seek; // Each index on DTW result = 20mS audio
+            last_v = v;
+
+            // Skip non-text tokens
+            while (!(tok_i->id < whisper_token_eot(ctx))) {
+                ++tok_i;
+                if (tok_i == seg_i->tokens.end()) {
+                    ++seg_i;
+                    tok_i = seg_i->tokens.begin();
+                }
+            }
+
+            tok_i->t_dtw = timestamp;
+            ++tok_i;
+            if (tok_i == seg_i->tokens.end()) {
+                ++seg_i;
+                tok_i = seg_i->tokens.begin();
+            }
+        }
+    }
+
+    // Print DTW timestamps
+    /*for (size_t i = i_segment; i < i_segment + n_segments; ++i) {
+        auto & segment = state->result_all[i];
+        for (auto &t: segment.tokens) {
+            const char * tok = whisper_token_to_str(ctx, t.id);
+            fprintf(stderr, "|%s|(%.2f) ", tok, (float)t.t_dtw/100);
+        }
+        fprintf(stderr, "\n");
+    }*/
+
+    ggml_free(gctx);
+}
+
+void whisper_log_set(ggml_log_callback log_callback, void * user_data) {
+    g_state.log_callback = log_callback ? log_callback : whisper_log_callback_default;
+    g_state.log_callback_user_data = user_data;
+}
+
+GGML_ATTRIBUTE_FORMAT(2, 3)
+static void whisper_log_internal(ggml_log_level level, const char * format, ...) {
+    va_list args;
+    va_start(args, format);
+    char buffer[1024];
+    int len = vsnprintf(buffer, 1024, format, args);
+    if (len < 1024) {
+        g_state.log_callback(level, buffer, g_state.log_callback_user_data);
+    } else {
+        char* buffer2 = new char[len+1];
+        vsnprintf(buffer2, len+1, format, args);
+        buffer2[len] = 0;
+        g_state.log_callback(level, buffer2, g_state.log_callback_user_data);
+        delete[] buffer2;
+    }
+    va_end(args);
+}
+
+static void whisper_log_callback_default(ggml_log_level level, const char * text, void * user_data) {
+    (void) level;
+    (void) user_data;
+    fputs(text, stderr);
+    fflush(stderr);
+}
diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp
new file mode 100644 (file)
index 0000000..1ed74e5
--- /dev/null
@@ -0,0 +1,2475 @@
+#include <ggml.h>
+#include <ggml-alloc.h>
+#include <ggml-backend.h>
+#include <ggml-backend-impl.h>
+
+#include <algorithm>
+#include <array>
+#include <cfloat>
+#include <cstring>
+#include <functional>
+#include <memory>
+#include <random>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string>
+#include <thread>
+#include <vector>
+
+
+static void init_tensor_uniform(ggml_tensor * tensor, float min = -1.0f, float max = 1.0f) {
+    // static RNG initialization (revisit if n_threads stops being constant)
+    static const size_t n_threads = std::thread::hardware_concurrency();
+    static std::vector<std::default_random_engine> generators = []() {
+        std::random_device rd;
+        std::vector<std::default_random_engine> vec;
+        vec.reserve(n_threads);
+        //for (size_t i = 0; i < n_threads; i++) { vec.emplace_back(1234 + i); } // fixed seed
+        for (size_t i = 0; i < n_threads; i++) { vec.emplace_back(rd()); }
+        return vec;
+    }();
+
+    size_t size = ggml_nelements(tensor);
+    std::vector<float> data(size);
+
+    auto init_thread = [&](size_t ith, size_t start, size_t end) {
+        std::uniform_real_distribution<float> distribution(min, max);
+        for (size_t i = start; i < end; i++) {
+            data[i] = distribution(generators[ith]);
+        }
+    };
+
+    std::vector<std::thread> threads;
+    threads.reserve(n_threads);
+    for (size_t i = 0; i < n_threads; i++) {
+        size_t start =     i*size/n_threads;
+        size_t end   = (i+1)*size/n_threads;
+        threads.emplace_back(init_thread, i, start, end);
+    }
+    for (auto & t : threads) {
+        t.join();
+    }
+
+#if 0
+    const char * val_str = getenv("GGML_TEST_EPS");
+    float val = 1e-9f;
+    if (val_str != nullptr) {
+        val = std::stof(val_str);
+        printf("GGML_TEST_EPS=%e\n", val);
+    }
+
+    // test quantization with very small values that may result in nan scales due to division by zero
+    if (ggml_is_quantized(tensor->type)) {
+        for (int i = 0; i < 256; i++) {
+            data[i] = val;
+        }
+    }
+#endif
+
+    if (tensor->type == GGML_TYPE_F32 || tensor->type == GGML_TYPE_I32) {
+        ggml_backend_tensor_set(tensor, data.data(), 0, size * sizeof(float));
+    } else if (ggml_is_quantized(tensor->type) || tensor->type == GGML_TYPE_F16 || tensor->type == GGML_TYPE_BF16) {
+        GGML_ASSERT(size % ggml_blck_size(tensor->type) == 0);
+        std::vector<uint8_t> dataq(ggml_row_size(tensor->type, size));
+        std::vector<float> imatrix(tensor->ne[0], 1.0f); // dummy importance matrix
+        const float * im = imatrix.data();
+        if (!ggml_quantize_requires_imatrix(tensor->type)) {
+            // when the imatrix is optional, we want to test both quantization with and without imatrix
+            // use one of the random numbers to decide
+            if (data[0] > 0.5f*(min + max)) {
+                im = nullptr;
+            }
+        }
+        ggml_quantize_chunk(tensor->type, data.data(), dataq.data(), 0, size/tensor->ne[0], tensor->ne[0], im);
+        GGML_ASSERT(ggml_validate_row_data(tensor->type, dataq.data(), dataq.size()));
+        ggml_backend_tensor_set(tensor, dataq.data(), 0, dataq.size());
+    } else if (tensor->type == GGML_TYPE_I8 || tensor->type == GGML_TYPE_I16 || tensor->type == GGML_TYPE_I32) {
+        // This is going to create some weird integers though.
+        ggml_backend_tensor_set(tensor, data.data(), 0, ggml_nbytes(tensor));
+    } else {
+        GGML_ASSERT(false);
+    }
+}
+
+static std::vector<float> tensor_to_float(const ggml_tensor * t) {
+    std::vector<float> tv;
+    tv.reserve(ggml_nelements(t));
+
+    std::vector<uint8_t> buf(ggml_nbytes(t));
+    ggml_backend_tensor_get(t, buf.data(), 0, ggml_nbytes(t));
+
+    ggml_type_traits_t tt = ggml_internal_get_type_traits(t->type);
+    size_t bs = ggml_blck_size(t->type);
+    std::vector<float> vq(ggml_blck_size(t->type));
+    bool quantized = ggml_is_quantized(t->type);
+
+    // access elements by index to avoid gaps in views
+    for (int64_t i3 = 0; i3 < t->ne[3]; i3++) {
+        for (int64_t i2 = 0; i2 < t->ne[2]; i2++) {
+            for (int64_t i1 = 0; i1 < t->ne[1]; i1++) {
+                for (int64_t i0 = 0; i0 < t->ne[0]; i0 += bs) {
+                    size_t i = i3*t->nb[3] + i2*t->nb[2] + i1*t->nb[1] + i0/bs*t->nb[0];
+                    if (t->type == GGML_TYPE_F16) {
+                        tv.push_back(ggml_fp16_to_fp32(*(ggml_fp16_t*)&buf[i]));
+                    } else if (t->type == GGML_TYPE_BF16) {
+                        tv.push_back(ggml_bf16_to_fp32(*(ggml_bf16_t*)&buf[i]));
+                    } else if (t->type == GGML_TYPE_F32) {
+                        tv.push_back(*(float *) &buf[i]);
+                    } else if (t->type == GGML_TYPE_I32) {
+                        tv.push_back((float)*(int32_t *) &buf[i]);
+                    } else if (t->type == GGML_TYPE_I16) {
+                        tv.push_back((float)*(int16_t *) &buf[i]);
+                    } else if (t->type == GGML_TYPE_I8) {
+                        tv.push_back((float)*(int8_t *) &buf[i]);
+                    } else if (quantized) {
+                        tt.to_float(&buf[i], vq.data(), bs);
+                        tv.insert(tv.end(), vq.begin(), vq.end());
+                    } else {
+                        GGML_ASSERT(false);
+                    }
+                }
+            }
+        }
+    }
+
+    return tv;
+}
+
+/*
+static double cosine_similarity(const float * v1, const float * v2, size_t n) {
+    double dot = 0.0;
+    double mag1 = 0.0;
+    double mag2 = 0.0;
+
+    for (size_t i = 0; i < n; i++) {
+        if (std::isnan(v1[i]) || std::isnan(v2[i])) {
+            return -1.0f;
+        }
+        if (std::isinf(v1[i]) && std::isinf(v2[i])) {
+            continue;
+        }
+        dot  += v1[i]*v2[i];
+        mag1 += v1[i]*v1[i];
+        mag2 += v2[i]*v2[i];
+    }
+
+    return dot/sqrt(mag1*mag2);
+}
+
+static float distance(const float * v1, const float * v2, size_t n) {
+    double d = 0.0;
+
+    for (size_t i = 0; i < n; i++) {
+        if (std::isnan(v1[i]) || std::isnan(v2[i])) {
+            return INFINITY;
+        }
+        if (std::isinf(v1[i]) && std::isinf(v2[i])) {
+            continue;
+        }
+        d += (v1[i] - v2[i])*(v1[i] - v2[i]);
+    }
+
+    return sqrt(d);
+}
+
+static float vec_len(const float * v, size_t n) {
+    double d = 0.0;
+
+    for (size_t i = 0; i < n; i++) {
+        if (std::isnan(v[i])) {
+            return INFINITY;
+        }
+        if (std::isinf(v[i])) {
+            continue;
+        }
+        d += v[i]*v[i];
+    }
+
+    return sqrt(d);
+}
+*/
+
+// normalized mean squared error = mse(a, b) / mse(a, 0)
+static double nmse(const float * a, const float * b, size_t n) {
+    double mse_a_b = 0.0;
+    double mse_a_0 = 0.0;
+
+    for (size_t i = 0; i < n; i++) {
+        float a_i = a[i];
+        float b_i = b[i];
+
+        mse_a_b += (a_i - b_i) * (a_i - b_i);
+        mse_a_0 += a_i * a_i;
+    }
+
+    return mse_a_b / mse_a_0;
+}
+
+// utils for printing the variables of the test cases
+#define VAR_TO_STR(x) (#x "=" + var_to_str(x))
+
+template<typename T>
+static std::string var_to_str(const T & x) {
+    return std::to_string(x);
+}
+
+template<typename T, size_t N>
+static std::string var_to_str(const T (&x)[N]) {
+    std::string s = "[";
+    for (size_t i = 0; i < N; i++) {
+        if (i > 0) {
+            s += ",";
+        }
+        s += var_to_str(x[i]);
+    }
+    s += "]";
+    return s;
+}
+
+template<typename T, size_t N>
+static std::string var_to_str(const std::array<T, N> & x) {
+    std::string s = "[";
+    for (size_t i = 0; i < N; i++) {
+        if (i > 0) {
+            s += ",";
+        }
+        s += var_to_str(x[i]);
+    }
+    s += "]";
+    return s;
+}
+
+//static std::string var_to_str(ggml_unary_op unary_op) {
+//    return ggml_unary_op_name(unary_op);
+//}
+
+static std::string var_to_str(ggml_type type) {
+    return ggml_type_name(type);
+}
+
+static std::string var_to_str(ggml_op_pool pool) {
+    switch (pool) {
+        case GGML_OP_POOL_AVG:  return "avg";
+        case GGML_OP_POOL_MAX:  return "max";
+        default:                return std::to_string(pool);
+    }
+}
+
+#define VARS_TO_STR1(a) VAR_TO_STR(a)
+#define VARS_TO_STR2(a, b) VAR_TO_STR(a) + "," + VAR_TO_STR(b)
+#define VARS_TO_STR3(a, b, c) VAR_TO_STR(a) + "," + VARS_TO_STR2(b, c)
+#define VARS_TO_STR4(a, b, c, d) VAR_TO_STR(a) + "," + VARS_TO_STR3(b, c, d)
+#define VARS_TO_STR5(a, b, c, d, e) VAR_TO_STR(a) + "," + VARS_TO_STR4(b, c, d, e)
+#define VARS_TO_STR6(a, b, c, d, e, f) VAR_TO_STR(a) + "," + VARS_TO_STR5(b, c, d, e, f)
+#define VARS_TO_STR7(a, b, c, d, e, f, g) VAR_TO_STR(a) + "," + VARS_TO_STR6(b, c, d, e, f, g)
+#define VARS_TO_STR8(a, b, c, d, e, f, g, h) VAR_TO_STR(a) + "," + VARS_TO_STR7(b, c, d, e, f, g, h)
+#define VARS_TO_STR9(a, b, c, d, e, f, g, h, i) VAR_TO_STR(a) + "," + VARS_TO_STR8(b, c, d, e, f, g, h, i)
+#define VARS_TO_STR10(a, b, c, d, e, f, g, h, i, j) VAR_TO_STR(a) + "," + VARS_TO_STR9(b, c, d, e, f, g, h, i, j)
+#define VARS_TO_STR11(a, b, c, d, e, f, g, h, i, j, k) VAR_TO_STR(a) + "," + VARS_TO_STR10(b, c, d, e, f, g, h, i, j, k)
+#define VARS_TO_STR12(a, b, c, d, e, f, g, h, i, j, k, l) VAR_TO_STR(a) + "," + VARS_TO_STR11(b, c, d, e, f, g, h, i, j, k, l)
+
+#ifdef GGML_USE_SYCL
+static bool inline _isinf(float f) {
+    return (*(uint32_t *)&f & 0x7fffffff) == 0x7f800000;
+}
+#else
+static bool inline _isinf(float f) { return std::isinf(f); }
+#endif
+
+// accept FLT_MAX as infinity
+static bool isinf_or_max(float f) {
+    return _isinf(f) || f == FLT_MAX || f == -FLT_MAX;
+}
+
+static bool ggml_is_view_op(enum ggml_op op) {
+    return op == GGML_OP_VIEW || op == GGML_OP_RESHAPE || op == GGML_OP_PERMUTE || op == GGML_OP_TRANSPOSE;
+}
+
+enum test_mode {
+    MODE_TEST,
+    MODE_PERF,
+};
+
+struct test_case {
+    virtual ~test_case() {}
+
+    virtual std::string op_desc(ggml_tensor * t) {
+        return ggml_op_desc(t);
+    }
+
+    virtual std::string vars() {
+        return "";
+    }
+
+    virtual ggml_tensor * build_graph(ggml_context * ctx) = 0;
+
+    virtual double max_nmse_err() {
+        return 1e-7;
+    }
+
+    virtual void initialize_tensors(ggml_context * ctx) {
+        for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != nullptr; t = ggml_get_next_tensor(ctx, t)) {
+            init_tensor_uniform(t);
+        }
+    }
+
+    virtual size_t op_size(ggml_tensor * t) {
+        size_t size = ggml_nbytes(t);
+        // add source tensors
+        for (int i = 0; i < GGML_MAX_SRC; i++) {
+            if (t->src[i] != NULL) {
+                size += ggml_nbytes(t->src[i]);
+            }
+        }
+        return size;
+    }
+
+    ggml_cgraph * gf = nullptr;
+
+    static const int sentinel_size = 1024;
+
+    test_mode mode;
+
+    std::vector<ggml_tensor *> sentinels;
+
+    void add_sentinel(ggml_context * ctx) {
+        if (mode == MODE_PERF) {
+            return;
+        }
+        ggml_tensor * sentinel = ::ggml_new_tensor_1d(ctx, GGML_TYPE_F32, sentinel_size);
+        ggml_format_name(sentinel, "sent_%zu", sentinels.size());
+        sentinels.push_back(sentinel);
+    }
+
+    // hijack ggml_new_tensor to add sentinels after each tensor to check for overflows in the backend
+
+    ggml_tensor * ggml_new_tensor(ggml_context * ctx, ggml_type type, int n_dims, const int64_t * ne) {
+        ggml_tensor * t = ::ggml_new_tensor(ctx, type, n_dims, ne);
+        add_sentinel(ctx);
+        return t;
+    }
+
+    ggml_tensor * ggml_new_tensor_1d(ggml_context * ctx, ggml_type type, int64_t ne0) {
+        ggml_tensor * t = ::ggml_new_tensor_1d(ctx, type, ne0);
+        add_sentinel(ctx);
+        return t;
+    }
+
+    ggml_tensor * ggml_new_tensor_2d(ggml_context * ctx, ggml_type type, int64_t ne0, int64_t ne1) {
+        ggml_tensor * t = ::ggml_new_tensor_2d(ctx, type, ne0, ne1);
+        add_sentinel(ctx);
+        return t;
+    }
+
+    ggml_tensor * ggml_new_tensor_3d(ggml_context * ctx, ggml_type type, int64_t ne0, int64_t ne1, int64_t ne2) {
+        ggml_tensor * t = ::ggml_new_tensor_3d(ctx, type, ne0, ne1, ne2);
+        add_sentinel(ctx);
+        return t;
+    }
+
+    ggml_tensor * ggml_new_tensor_4d(ggml_context * ctx, ggml_type type, int64_t ne0, int64_t ne1, int64_t ne2, int64_t ne3) {
+        ggml_tensor * t = ::ggml_new_tensor_4d(ctx, type, ne0, ne1, ne2, ne3);
+        add_sentinel(ctx);
+        return t;
+    }
+
+    bool eval(ggml_backend_t backend1, ggml_backend_t backend2, const char * op_name) {
+        mode = MODE_TEST;
+
+        ggml_init_params params = {
+            /* .mem_size = */ ggml_tensor_overhead()*128 + ggml_graph_overhead(),
+            /* .mem_base = */ NULL,
+            /* .no_alloc = */ true,
+        };
+        ggml_context * ctx = ggml_init(params);
+
+        gf = ggml_new_graph(ctx);
+
+        // pre-graph sentinel
+        add_sentinel(ctx);
+
+        ggml_tensor * out = build_graph(ctx);
+
+        if (op_name != nullptr && op_desc(out) != op_name) {
+            //printf("  %s: skipping\n", op_desc(out).c_str());
+            ggml_free(ctx);
+            return true;
+        }
+
+        printf("  %s(%s): ", op_desc(out).c_str(), vars().c_str());
+        fflush(stdout);
+
+        // check if the backends support the ops
+        bool supported = true;
+        for (ggml_backend_t backend : {backend1, backend2}) {
+            for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) {
+                if (!ggml_backend_supports_op(backend, t)) {
+                    printf("not supported [%s] ", ggml_backend_name(backend));
+                    supported = false;
+                    break;
+                }
+            }
+        }
+        if (!supported) {
+            printf("\n");
+            ggml_free(ctx);
+            return true;
+        }
+
+        // post-graph sentinel
+        add_sentinel(ctx);
+
+        // allocate
+        ggml_backend_buffer_t buf = ggml_backend_alloc_ctx_tensors(ctx, backend1);
+        if (buf == NULL) {
+            printf("failed to allocate tensors [%s] ", ggml_backend_name(backend1));
+            ggml_free(ctx);
+            return false;
+        }
+
+        // build graph
+        ggml_build_forward_expand(gf, out);
+
+        // add sentinels as graph nodes so that they are checked in the callback
+        for (ggml_tensor * sentinel : sentinels) {
+            gf->nodes[gf->n_nodes++] = sentinel;
+        }
+
+        // randomize tensors
+        initialize_tensors(ctx);
+
+        // compare
+        struct callback_userdata {
+            bool   ok;
+            double max_err;
+            ggml_backend_t backend1;
+            ggml_backend_t backend2;
+        };
+
+        callback_userdata ud {
+            true,
+            max_nmse_err(),
+            backend1,
+            backend2
+        };
+
+        auto callback = [](int index, ggml_tensor * t1, ggml_tensor * t2, void * user_data) -> bool {
+            callback_userdata * ud = (callback_userdata *) user_data;
+            const char * bn1 = ggml_backend_name(ud->backend1);
+            const char * bn2 = ggml_backend_name(ud->backend2);
+
+            if (t1->op == GGML_OP_NONE) {
+                // sentinels must be unchanged
+                std::vector<uint8_t> t1_data(ggml_nbytes(t1));
+                std::vector<uint8_t> t2_data(ggml_nbytes(t2));
+                ggml_backend_tensor_get(t1, t1_data.data(), 0, ggml_nbytes(t1));
+                ggml_backend_tensor_get(t2, t2_data.data(), 0, ggml_nbytes(t2));
+
+                if (memcmp(t1_data.data(), t2_data.data(), ggml_nbytes(t1)) != 0) {
+                    printf("sentinel mismatch: %s ", t1->name);
+                    ud->ok = false;
+                    return true;
+                }
+            }
+
+            std::vector<float> f1 = tensor_to_float(t1);
+            std::vector<float> f2 = tensor_to_float(t2);
+
+            for (size_t i = 0; i < f1.size(); i++) {
+                // check for nans
+                if (std::isnan(f1[i]) || std::isnan(f2[i])) {
+                    printf("[%s] NaN at index %zu (%s=%f %s=%f) ", ggml_op_desc(t1), i, bn1, f1[i], bn2, f2[i]);
+                    ud->ok = false;
+                    return true;
+                }
+                // check for infs: both must be inf of the same sign, or both must be finite
+                if (isinf_or_max(f1[i]) || isinf_or_max(f2[i])) {
+                    if (isinf_or_max(f1[i]) && isinf_or_max(f2[i])) {
+                        if (std::signbit(f1[i]) != std::signbit(f2[i])) {
+                            printf("[%s] inf sign mismatch: %s=%f %s=%f ", ggml_op_desc(t1), bn1, f1[i], bn2, f2[i]);
+                            ud->ok = false;
+                            return true;
+                        }
+                    } else {
+                        printf("[%s] inf mismatch: %s=%f %s=%f ", ggml_op_desc(t1), bn1, f1[i], bn2, f2[i]);
+                        ud->ok = false;
+                        return true;
+                    }
+                }
+            }
+
+            double err = nmse(f1.data(), f2.data(), f1.size());
+            if (err > ud->max_err) {
+                printf("[%s] NMSE = %.9f > %.9f ", ggml_op_desc(t1), err, ud->max_err);
+                //for (int i = 0; i < (int) f1.size(); i++) {
+                //    printf("%5d %9.6f %9.6f, diff = %9.6f\n", i, f1[i], f2[i], f1[i] - f2[i]);
+                //}
+                //printf("\n");
+                //exit(1);
+                ud->ok = false;
+            }
+            return true;
+
+            GGML_UNUSED(index);
+        };
+
+        const bool cmp_ok = ggml_backend_compare_graph_backend(backend1, backend2, gf, callback, &ud);
+
+        if (!cmp_ok) {
+            printf("compare failed ");
+        }
+
+        ggml_backend_buffer_free(buf);
+
+        ggml_free(ctx);
+
+        if (ud.ok && cmp_ok) {
+            printf("\033[1;32mOK\033[0m\n");
+            return true;
+        }
+
+        printf("\033[1;31mFAIL\033[0m\n");
+        return false;
+    }
+
+    bool eval_perf(ggml_backend_t backend, const char * op_name) {
+        mode = MODE_PERF;
+
+        static const size_t graph_nodes = 8192;
+
+        ggml_init_params params = {
+            /* .mem_size = */ ggml_tensor_overhead()*128 + ggml_graph_overhead_custom(graph_nodes, false),
+            /* .mem_base = */ NULL,
+            /* .no_alloc = */ true,
+        };
+        ggml_context * ctx = ggml_init(params);
+
+        ggml_tensor * out = build_graph(ctx);
+
+        if (op_name != nullptr && op_desc(out) != op_name) {
+            //printf("  %s: skipping\n", op_desc(out).c_str());
+            ggml_free(ctx);
+            return true;
+        }
+
+        int len = printf("  %s(%s): ", op_desc(out).c_str(), vars().c_str());
+        fflush(stdout);
+
+        // check if backends support op
+        if (!ggml_backend_supports_op(backend, out)) {
+            printf("not supported\n");
+            ggml_free(ctx);
+            return true;
+        }
+
+        // align while also leaving some margin for variations in parameters
+        int align = 20;
+        int last = (len + align - 1) / align * align;
+        if (last - len < 5) {
+            last += align;
+        }
+        last = std::max(last, 60);
+        printf("%*s", last - len, "");
+
+        // allocate
+        ggml_backend_buffer_t buf = ggml_backend_alloc_ctx_tensors(ctx, backend);
+        if (buf == NULL) {
+            printf("failed to allocate tensors\n");
+            ggml_free(ctx);
+            return false;
+        }
+
+        // randomize tensors
+        initialize_tensors(ctx);
+
+        // build graph
+        ggml_cgraph * gf = ggml_new_graph_custom(ctx, graph_nodes, false);
+        ggml_build_forward_expand(gf, out);
+
+        // warmup run
+        ggml_backend_graph_compute(backend, gf);
+
+        // duplicate the op
+        size_t target_size = ggml_backend_is_cpu(backend) ? 1ULL << 33 : 1ULL << 35; // 8 GB CPU, 32 GB GPU
+        int n_runs = std::min((size_t)gf->size - gf->n_nodes, target_size / op_size(out)) + 1;
+        for (int i = 1; i < n_runs; i++) {
+            gf->nodes[gf->n_nodes++] = out;
+        }
+
+        // calculate memory
+        size_t mem = n_runs * op_size(out);
+        auto tensor_op_size = [](ggml_tensor * t) {
+            size_t size = ggml_nbytes(t);
+            // add source tensors
+            for (int i = 0; i < GGML_MAX_SRC; i++) {
+                if (t->src[i] != NULL) {
+                    size += ggml_nbytes(t->src[i]);
+                }
+            }
+            return size;
+        };
+        for (int i = 0; i < gf->n_nodes; i++) {
+            if (ggml_is_view_op(gf->nodes[i]->op) || gf->nodes[i] == out) {
+                continue;
+            }
+            mem += tensor_op_size(gf->nodes[i]);
+        }
+
+        // run
+        ggml_backend_synchronize(backend);
+
+        int64_t start_time = ggml_time_us();
+        ggml_backend_graph_compute(backend, gf);
+        ggml_backend_synchronize(backend);
+        int64_t end_time = ggml_time_us();
+        double time_us = end_time - start_time;
+
+        printf("    %5d runs - %8.2f us/run - %8zu kB/run - \033[1;34m%7.2f GB/s\033[0m\n",
+            n_runs,
+            time_us / n_runs,
+            op_size(out) / 1024,
+            mem / (time_us/1e6) / 1024.0 / 1024.0 / 1024.0);
+
+        ggml_backend_buffer_free(buf);
+
+        ggml_free(ctx);
+
+        return true;
+    }
+};
+
+// GGML_OP_UNARY
+struct test_unary : public test_case {
+    const ggml_unary_op op;
+    const ggml_type type;
+    const std::array<int64_t, 4> ne_a;
+    int v; // view (1 : non-contiguous a)
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne_a, v);
+    }
+
+    test_unary(ggml_unary_op op,
+            ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne_a = {128, 10, 10, 10},
+            int v = 0)
+        : op(op), type(type), ne_a(ne_a), v(v) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a;
+        if (v & 1) {
+            auto ne = ne_a; ne[0] *= 3;
+            a = ggml_new_tensor(ctx, type, 4, ne.data());
+            a = ggml_view_4d(ctx, a, ne_a[0], ne_a[1], ne_a[2], ne_a[3], a->nb[1], a->nb[2], a->nb[3], 0);
+        } else {
+            a = ggml_new_tensor(ctx, type, 4, ne_a.data());
+        }
+        ggml_tensor * out = ggml_unary(ctx, a, op);
+        return out;
+    }
+
+    void initialize_tensors(ggml_context * ctx) override {
+        for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) {
+            // test extended range of values to check for NaNs in GELU
+            init_tensor_uniform(t, -150.f, 150.f);
+        }
+    }
+};
+
+// GGML_OP_GET_ROWS
+struct test_get_rows : public test_case {
+    const ggml_type type;
+    const int n; // cols
+    const int m; // rows
+    const int r; // rows to get
+    const int b; // batch size
+    const bool v; // view (non-contiguous src1)
+
+    std::string vars() override {
+        return VARS_TO_STR6(type, n, m, r, b, v);
+    }
+
+    test_get_rows(ggml_type type = GGML_TYPE_F32, int n = 10, int m = 5, int r = 3, int b = 1, bool v = false)
+        : type(type), n(n), m(m), r(r), b(b), v(v) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * in = ggml_new_tensor_3d(ctx, type, n, m, b);
+        ggml_tensor * rows = ggml_new_tensor_2d(ctx, GGML_TYPE_I32, r, b);
+        if (v) {
+            rows = ggml_view_2d(ctx, rows, r/2, b, rows->nb[1], 0);
+        }
+        ggml_tensor * out = ggml_get_rows(ctx, in, rows);
+        return out;
+    }
+
+    void initialize_tensors(ggml_context * ctx) override {
+        for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) {
+            if (t->type == GGML_TYPE_I32) {
+                if (ggml_is_view_op(t->op)) { continue; }
+                // rows
+                std::vector<int> data(r*b);
+                for (int i = 0; i < r*b; i++) {
+                    data[i] = rand() % m;
+                }
+                ggml_backend_tensor_set(t, data.data(), 0, r * b * sizeof(int));
+            } else {
+                init_tensor_uniform(t);
+            }
+        }
+    }
+};
+
+// GGML_OP_REPEAT
+struct test_repeat : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    const std::array<int, 4> nr;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne, nr);
+    }
+
+    size_t op_size(ggml_tensor * t) override {
+        return ggml_nbytes(t) * 2;
+    }
+
+    test_repeat(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 10},
+            std::array<int, 4> nr = {2, 2, 2, 2})
+        : type(type), ne(ne), nr(nr) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * target = ggml_new_tensor_4d(ctx, type, ne[0]*nr[0], ne[1]*nr[1], ne[2]*nr[2], ne[3]*nr[3]);
+        ggml_tensor * src = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_repeat(ctx, src, target);
+        return out;
+    }
+};
+
+// GGML_OP_DUP
+struct test_dup : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    const std::array<int64_t, 4> permute;
+    bool _use_permute;
+
+    std::string vars() override {
+        std::string v = VARS_TO_STR2(type, ne);
+        if (_use_permute) v += "," + VAR_TO_STR(permute);
+        return v;
+    }
+
+    test_dup(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 1},
+            std::array<int64_t, 4> permute = {0, 0, 0, 0})
+        : type(type), ne(ne), permute(permute),
+            _use_permute(permute[0] + permute[1] + permute[2] + permute[3] > 0) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * src = ggml_new_tensor(ctx, type, 4, ne.data());
+        if (_use_permute) {
+            src = ggml_permute(ctx, src, permute[0], permute[1], permute[2], permute[3]);
+        }
+        ggml_tensor * out = ggml_dup(ctx, src);
+        return out;
+    }
+};
+
+// GGML_OP_CPY
+struct test_cpy : public test_case {
+    const ggml_type type_src;
+    const ggml_type type_dst;
+    const std::array<int64_t, 4> ne;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type_src, type_dst, ne);
+    }
+
+    double max_nmse_err() override {
+        return 1e-6;
+    }
+
+    size_t op_size(ggml_tensor * t) override {
+        return ggml_nbytes(t) + ggml_nbytes(t->src[0]);
+    }
+
+    test_cpy(ggml_type type_src = GGML_TYPE_F32, ggml_type type_dst = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 1})
+        : type_src(type_src), type_dst(type_dst), ne(ne) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * src = ggml_new_tensor(ctx, type_src, 4, ne.data());
+        ggml_tensor * dst = ggml_new_tensor(ctx, type_dst, 4, ne.data());
+        ggml_tensor * out = ggml_cpy(ctx, src, dst);
+        return out;
+    }
+};
+
+// GGML_OP_CONT
+struct test_cont : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+
+    std::string vars() override {
+        return VARS_TO_STR2(type, ne);
+    }
+
+    test_cont(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 1})
+        : type(type), ne(ne) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * src = ggml_new_tensor(ctx, type, 4, ne.data());
+        src = ggml_transpose(ctx, src);
+        ggml_tensor * out = ggml_cont(ctx, src);
+
+        return out;
+    }
+};
+
+// GGML_OP_ADD
+// GGML_OP_MUL
+// GGML_OP_DIV
+struct test_bin_bcast : public test_case {
+    using op_t = ggml_tensor * (*) (ggml_context *, ggml_tensor *, ggml_tensor *);
+    op_t op;
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    const std::array<int, 4> nr;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne, nr);
+    }
+
+    size_t op_size(ggml_tensor * t) override {
+        return ggml_nbytes(t) * 3;
+    }
+
+    test_bin_bcast(op_t op, ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 1, 1},
+            std::array<int, 4> nr = {1, 2, 1, 1})
+        : op(op), type(type), ne(ne), nr(nr) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor_4d(ctx, type, ne[0]*nr[0], ne[1]*nr[1], ne[2]*nr[2], ne[3]*nr[3]);
+        ggml_tensor * b = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = op(ctx, a, b);
+        return out;
+    }
+
+    void initialize_tensors(ggml_context * ctx) override {
+        for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) {
+            if (op == ggml_div) {
+                // avoid division by zero
+                init_tensor_uniform(t, 1.0f, 2.0f);
+            } else {
+                init_tensor_uniform(t);
+            }
+        }
+    }
+};
+
+// GGML_OP_SCALE
+struct test_scale : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    float scale;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne, scale);
+    }
+
+    test_scale(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 10},
+            float scale = 2.0f)
+        : type(type), ne(ne), scale(scale) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_scale(ctx, a, scale);
+        return out;
+    }
+};
+
+// GGML_OP_NORM
+struct test_norm : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    float eps;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne, eps);
+    }
+
+    test_norm(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {64, 10, 10, 10},
+            float eps = 1e-6f)
+        : type(type), ne(ne), eps(eps) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_norm(ctx, a, eps);
+        return out;
+    }
+};
+
+// GGML_OP_RMS_NORM
+struct test_rms_norm : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    float eps;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne, eps);
+    }
+
+    test_rms_norm(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {64, 10, 10, 10},
+            float eps = 1e-6f)
+        : type(type), ne(ne), eps(eps) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_rms_norm(ctx, a, eps);
+        return out;
+    }
+};
+
+// GGML_OP_MUL_MAT
+struct test_mul_mat : public test_case {
+    const ggml_type type_a;
+    const ggml_type type_b;
+    const int64_t m;
+    const int64_t n;
+    const int64_t k;
+    const std::array<int64_t, 2> bs; // dims 3 and 4
+    const std::array<int64_t, 2> nr; // repeat in dims 3 and 4
+
+    std::string vars() override {
+        return VARS_TO_STR7(type_a, type_b, m, n, k, bs, nr);
+    }
+
+    double max_nmse_err() override {
+        return 5e-4;
+    }
+
+    size_t op_size(ggml_tensor * t) override {
+        size_t a = ggml_nbytes(t->src[0]) * n * nr[0] * nr[1];
+        size_t b = ggml_nbytes(t->src[1]) * m;
+        size_t c  = ggml_nbytes(t);
+        return a + b + c;
+
+        GGML_UNUSED(t);
+    }
+
+    test_mul_mat(ggml_type type_a = GGML_TYPE_F32, ggml_type type_b = GGML_TYPE_F32,
+            int64_t m = 32, int64_t n = 32, int64_t k = 32,
+            std::array<int64_t, 2> bs = {10, 10},
+            std::array<int64_t, 2> nr = {2, 2})
+        : type_a(type_a), type_b(type_b), m(m), n(n), k(k), bs(bs), nr(nr) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        // C^T = A * B^T: (k, m) * (k, n) => (m, n)
+        ggml_tensor * a = ggml_new_tensor_4d(ctx, type_a, k, m, bs[0]      , bs[1]);
+        ggml_tensor * b = ggml_new_tensor_4d(ctx, type_b, k, n, bs[0]*nr[0], bs[1]*nr[1]);
+        ggml_tensor * out = ggml_mul_mat(ctx, a, b);
+        return out;
+    }
+};
+
+// GGML_OP_MUL_MAT_ID
+struct test_mul_mat_id : public test_case {
+    const ggml_type type_a;
+    const ggml_type type_b;
+    const int n_mats;
+    const int n_used;
+    const bool b; // brodcast b matrix
+    const int64_t m;
+    const int64_t n;
+    const int64_t k;
+
+    std::string vars() override {
+        return VARS_TO_STR8(type_a, type_b, n_mats, n_used, b, m, n, k);
+    }
+
+    double max_nmse_err() override {
+        return 5e-4;
+    }
+
+    size_t op_size(ggml_tensor * t) override {
+        size_t a = ggml_nbytes(t->src[2]) * n;
+        size_t b = ggml_nbytes(t->src[1]) * m;
+        size_t c  = ggml_nbytes(t);
+        return a + b + c;
+
+        GGML_UNUSED(t);
+    }
+
+    test_mul_mat_id(ggml_type type_a = GGML_TYPE_F32, ggml_type type_b = GGML_TYPE_F32,
+            int n_mats = 8, int n_used = 2, bool b = false,
+            int64_t m = 32, int64_t n = 32, int64_t k = 32)
+        : type_a(type_a), type_b(type_b), n_mats(n_mats), n_used(n_used), b(b),
+            m(m), n(n), k(k) {
+            GGML_ASSERT(n_used <= n_mats);
+        }
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        // C^T = A * B^T: (k, m) * (k, n) => (m, n)
+        ggml_tensor * as = ggml_new_tensor_3d(ctx, type_a, k, m, n_mats);
+        ggml_tensor * ids = ggml_new_tensor_2d(ctx, GGML_TYPE_I32, n_mats, n);
+        if (n_used != n_mats) {
+            ids = ggml_view_2d(ctx, ids, n_used, n, ids->nb[1], 0);
+        }
+        ggml_tensor * b = ggml_new_tensor_3d(ctx, type_b, k, this->b ? 1 : n_used, n);
+        ggml_tensor * out = ggml_mul_mat_id(ctx, as, b, ids);
+        return out;
+    }
+
+    void initialize_tensors(ggml_context * ctx) override {
+        std::random_device rd;
+        std::default_random_engine rng(rd());
+        for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) {
+            if (t->type == GGML_TYPE_I32) {
+                if (ggml_is_view_op(t->op)) { continue; }
+                // ids
+                for (int64_t r = 0; r < ggml_nrows(t); r++) {
+                    std::vector<int32_t> data(t->ne[0]);
+                    for (int i = 0; i < t->ne[0]; i++) {
+                        data[i] = i % n_mats;
+                    }
+                    std::shuffle(data.begin(), data.end(), rng);
+                    ggml_backend_tensor_set(t, data.data(), r * t->nb[1], t->ne[0] * sizeof(int32_t));
+                }
+            } else {
+                init_tensor_uniform(t);
+            }
+        }
+    }
+};
+
+// GGML_OP_SQR
+struct test_sqr : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+
+    std::string vars() override {
+        return VARS_TO_STR2(type, ne);
+    }
+
+    test_sqr(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 10})
+        : type(type), ne(ne) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_sqr(ctx, a);
+        return out;
+    }
+};
+
+// GGML_OP_SQRT
+struct test_sqrt : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+
+    std::string vars() override {
+        return VARS_TO_STR2(type, ne);
+    }
+
+    test_sqrt(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 10})
+        : type(type), ne(ne) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_sqrt(ctx, a);
+        return out;
+    }
+
+    void initialize_tensors(ggml_context * ctx) override {
+        // fill with positive values
+        for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) {
+            init_tensor_uniform(t, 0.0f, 100.0f);
+        }
+    }
+};
+
+// GGML_OP_CLAMP
+struct test_clamp : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    float min;
+    float max;
+
+    std::string vars() override {
+        return VARS_TO_STR4(type, ne, min, max);
+    }
+
+    test_clamp(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 10},
+            float min = -0.5f, float max = 0.5f)
+        : type(type), ne(ne), min(min), max(max) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_clamp(ctx, a, min, max);
+        return out;
+    }
+};
+
+// GGML_OP_DIAG_MASK_INF
+struct test_diag_mask_inf : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    const int n_past;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne, n_past);
+    }
+
+    test_diag_mask_inf(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 10},
+            int n_past = 5)
+        : type(type), ne(ne), n_past(n_past) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_diag_mask_inf(ctx, a, n_past);
+        return out;
+    }
+};
+
+// GGML_OP_SOFT_MAX
+struct test_soft_max : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    const bool mask;
+    const float scale;
+    const float max_bias;
+
+    std::string vars() override {
+        return VARS_TO_STR5(type, ne, mask, scale, max_bias);
+    }
+
+    // the 1024 test with bias occasionally fails:
+    // SOFT_MAX(type=f32,ne=[1024,16,1,1],mask=1,scale=1.000000,max_bias=8.000000): [SOFT_MAX] NMSE = 0.000000103 > 0.000000100 FAIL
+    virtual double max_nmse_err() override {
+        return 1e-6;
+    }
+
+    test_soft_max(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 10},
+            bool mask = false,
+            float scale = 1.0f,
+            float max_bias = 0.0f)
+        : type(type), ne(ne), mask(mask), scale(scale), max_bias(max_bias) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * mask = nullptr;
+        if (this->mask) {
+            mask = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, ne[0], ne[1]);
+        }
+        ggml_tensor * out = ggml_soft_max_ext(ctx, a, mask, scale, max_bias);
+        return out;
+    }
+};
+
+// GGML_OP_ROPE
+struct test_rope : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne_a;
+    int n_dims;
+    int mode;
+    int n_ctx; // used to generate positions
+    float fs; // freq_scale
+    float ef; // ext_factor
+    float af; // attn_factor
+    bool ff;
+    int v; // view (1 : non-contiguous a)
+
+    std::string vars() override {
+        return VARS_TO_STR10(type, ne_a, n_dims, mode, n_ctx, fs, ef, af, ff, v);
+    }
+
+    test_rope(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne_a = {10, 10, 10, 1},
+            int n_dims = 10, int mode = 0, int n_ctx = 512, float fs = 1.0f, float ef = 0.0f, float af = 0.0f, bool ff = false, int v = 0)
+        : type(type), ne_a(ne_a), n_dims(n_dims), mode(mode), n_ctx(n_ctx), fs(fs), ef(ef), af(af), ff(ff), v(v) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a;
+        if (v & 1) {
+            auto ne = ne_a; ne[0] *= 2; ne[1] *= 4; ne[2] *= 3;
+            a = ggml_new_tensor(ctx, type, 4, ne.data());
+            a = ggml_view_4d(ctx, a, ne_a[0], ne_a[1], ne_a[2], ne_a[3], a->nb[1], a->nb[2], a->nb[3], 0);
+        } else {
+            a = ggml_new_tensor(ctx, type, 4, ne_a.data());
+        }
+        ggml_tensor * pos = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, ne_a[2]);
+        ggml_tensor * freq = ff ? ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_dims/2) : nullptr;
+        ggml_tensor * out = ggml_rope_ext(ctx, a, pos, freq, n_dims, mode, 0, 10000.0f, fs, ef, af, 1.0f, 1.0f);
+        return out;
+    }
+
+    void initialize_tensors(ggml_context * ctx) override {
+        for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) {
+            if (t->type == GGML_TYPE_I32) {
+                // pos
+                std::vector<int> data(ne_a[2]);
+                for (int i = 0; i < ne_a[2]; i++) {
+                    data[i] = rand() % n_ctx;
+                }
+                ggml_backend_tensor_set(t, data.data(), 0, ne_a[2] * sizeof(int));
+            } else {
+                if (t->ne[0] == n_dims/2) {
+                    // frequency factors in the range [0.9f, 1.1f]
+                    init_tensor_uniform(t, 0.9f, 1.1f);
+                } else {
+                    init_tensor_uniform(t);
+                }
+            }
+        }
+    }
+};
+
+// GGML_OP_POOL2D
+struct test_pool2d : public test_case {
+    enum ggml_op_pool pool_type;
+    const ggml_type type_input;
+    const std::array<int64_t, 4> ne_input;
+    // kernel size
+    const int k0;
+    const int k1;
+    // stride
+    const int s0;
+    const int s1;
+    // padding
+    const int p0;
+    const int p1;
+
+    std::string vars() override {
+        return VARS_TO_STR9(pool_type, type_input, ne_input, k0, k1, s0, s1, p0, p1);
+    }
+
+    test_pool2d(ggml_op_pool pool_type = GGML_OP_POOL_AVG,
+            ggml_type type_input = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne_input = {10, 10, 3, 1}, // [input_width, input_height, input_channels, 1]
+            int k0 = 3, int k1 = 3,
+            int s0 = 1, int s1 = 1,
+            int p0 = 1, int p1 = 1)
+        : pool_type(pool_type), type_input(type_input), ne_input(ne_input), k0(k0), k1(k1), s0(s0), s1(s1), p0(p0), p1(p1) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * input = ggml_new_tensor(ctx, type_input, 4, ne_input.data());
+        ggml_tensor * out = ggml_pool_2d(ctx, input, pool_type, k0, k1, s0, s1, p0, p1);
+        return out;
+    }
+};
+
+// GGML_OP_IM2COL
+struct test_im2col : public test_case {
+    const ggml_type type_input;
+    const ggml_type type_kernel;
+    const ggml_type dst_type;
+    const std::array<int64_t, 4> ne_input;
+    const std::array<int64_t, 4> ne_kernel;
+    // stride
+    const int s0;
+    const int s1;
+    // padding
+    const int p0;
+    const int p1;
+    // dilatation
+    const int d0;
+    const int d1;
+    // mode
+    const bool is_2D;
+
+    std::string vars() override {
+        return VARS_TO_STR12(type_input, type_kernel, dst_type, ne_input, ne_kernel, s0, s1, p0, p1, d0, d1, is_2D);
+    }
+
+    test_im2col(ggml_type type_input = GGML_TYPE_F32, ggml_type type_kernel = GGML_TYPE_F16, ggml_type dst_type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne_input = {10, 10, 3, 1}, // [input_width, input_height, input_channels, 1]
+            std::array<int64_t, 4> ne_kernel = {3, 3, 3, 1}, // [kernel_width, kernel_height, input_channels, 1]
+            int s0 = 1, int s1 = 1,
+            int p0 = 1, int p1 = 1,
+            int d0 = 1, int d1 = 1,
+            bool is_2D = true)
+        : type_input(type_input), type_kernel(type_kernel), dst_type(dst_type), ne_input(ne_input), ne_kernel(ne_kernel), s0(s0), s1(s1), p0(p0), p1(p1), d0(d0), d1(d1), is_2D(is_2D) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * input = ggml_new_tensor(ctx, type_input, 4, ne_input.data());
+        ggml_tensor * kernel = ggml_new_tensor(ctx, type_kernel, 4, ne_kernel.data());
+        ggml_tensor * out = ggml_im2col(ctx, kernel, input, s0, s1, p0, p1, d0, d1, is_2D, dst_type);
+        return out;
+    }
+};
+
+// GGML_OP_CONCAT
+struct test_concat : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne_a;
+    const int64_t ne_b_d;
+    const int dim;
+    const int v; // view (1 << 0: non-cont a, 1 << 1: non-cont b)
+
+    std::string vars() override {
+        return VARS_TO_STR5(type, ne_a, ne_b_d, dim, v);
+    }
+
+    test_concat(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne_a = {10, 10, 10, 10},
+            int64_t ne_b_d = 10,
+            int dim = 2, int v = 0)
+        : type(type), ne_a(ne_a), ne_b_d(ne_b_d), dim(dim), v(v) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        auto ne_b = ne_a;
+        ne_b[dim] = ne_b_d;
+        ggml_tensor * a;
+        if (v & 1) {
+            auto ne = ne_a; ne[0] *= 2; ne[1] *= 4; ne[2] *= 3;
+            a = ggml_new_tensor(ctx, type, 4, ne.data());
+            a = ggml_view_4d(ctx, a, ne_a[0], ne_a[1], ne_a[2], ne_a[3], a->nb[1], a->nb[2], a->nb[3], 0);
+        } else {
+            a = ggml_new_tensor(ctx, type, 4, ne_a.data());
+        }
+        ggml_tensor * b;
+        if (v & 2) {
+            auto ne = ne_b; ne[0] *= 3; ne[1] *= 2; ne[2] *= 4;
+            b = ggml_new_tensor(ctx, type, 4, ne.data());
+            b = ggml_view_4d(ctx, b, ne_b[0], ne_b[1], ne_b[2], ne_b[3], b->nb[1], b->nb[2], b->nb[3], 0);
+        } else {
+            b = ggml_new_tensor(ctx, type, 4, ne_b.data());
+        }
+        ggml_tensor * out = ggml_concat(ctx, a, b, dim);
+        return out;
+    }
+};
+
+// GGML_OP_ARGSORT
+struct test_argsort : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    ggml_sort_order order;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne, order);
+    }
+
+    test_argsort(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {16, 10, 10, 10},
+            ggml_sort_order order = GGML_SORT_ORDER_ASC)
+        : type(type), ne(ne), order(order) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_argsort(ctx, a, order);
+        return out;
+    }
+
+    void initialize_tensors(ggml_context * ctx) override {
+        std::random_device rd;
+        std::default_random_engine rng(rd());
+        for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) {
+            if (t->type == GGML_TYPE_I32) {
+                // indices
+                std::vector<int> data(ggml_nelements(t));
+                for (int i = 0; i < ggml_nelements(t); i++) {
+                    data[i] = rand();
+                }
+                std::shuffle(data.begin(), data.end(), rng);
+                ggml_backend_tensor_set(t, data.data(), 0, ne[0]*ne[1]*ne[2]*ne[3] * sizeof(int));
+            } else if (t->type == GGML_TYPE_F32) {
+                // initialize with unique values to avoid ties
+                for (int64_t r = 0; r < ggml_nrows(t); r++) {
+                    std::vector<float> data(t->ne[0]);
+                    for (int i = 0; i < t->ne[0]; i++) {
+                        data[i] = i;
+                    }
+                    std::shuffle(data.begin(), data.end(), rng);
+                    ggml_backend_tensor_set(t, data.data(), r * t->nb[1], t->ne[0] * sizeof(float));
+                }
+            } else {
+                GGML_ASSERT(false);
+            }
+        }
+    }
+};
+
+// GGML_OP_SUM_ROWS
+struct test_sum_rows : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+
+    std::string vars() override {
+        return VARS_TO_STR2(type, ne);
+    }
+
+    test_sum_rows(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {10, 10, 10, 10})
+        : type(type), ne(ne) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_sum_rows(ctx, a);
+        return out;
+    }
+};
+
+// GGML_OP_UPSCALE
+struct test_upscale : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    const int32_t scale_factor;
+    const bool transpose;
+
+    std::string vars() override {
+        return VARS_TO_STR4(type, ne, scale_factor, transpose);
+    }
+
+    test_upscale(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {512, 512, 3, 1},
+            int32_t scale_factor = 2, bool transpose = false)
+        : type(type), ne(ne), scale_factor(scale_factor), transpose(transpose) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        if (transpose) a = ggml_transpose(ctx, a);
+        ggml_tensor * out = ggml_upscale(ctx, a, scale_factor);
+        return out;
+    }
+};
+
+// GGML_OP_UPSCALE (ext)
+struct test_upscale_ext : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    const std::array<int64_t, 4> ne_tgt;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne, ne_tgt);
+    }
+
+    test_upscale_ext(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne     = {2, 5,  7, 11},
+            std::array<int64_t, 4> ne_tgt = {5, 7, 11, 13})
+        : type(type), ne(ne), ne_tgt(ne_tgt) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_upscale_ext(ctx, a, ne_tgt[0], ne_tgt[1],ne_tgt[2], ne_tgt[3]);
+        return out;
+    }
+};
+
+// GGML_OP_GROUP_NORM
+struct test_group_norm : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne;
+    const int32_t num_groups;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne, num_groups);
+    }
+
+    test_group_norm(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne = {64, 64, 320, 1},
+            int32_t num_groups = 32)
+        : type(type), ne(ne), num_groups(num_groups) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne.data());
+        ggml_tensor * out = ggml_group_norm(ctx, a, num_groups);
+        return out;
+    }
+};
+
+// GGML_OP_ACC
+struct test_acc : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne_a;
+    const std::array<int64_t, 4> ne_b;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne_a, ne_b);
+    }
+
+    test_acc(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne_a = {1024, 577, 1, 1},
+            std::array<int64_t, 4> ne_b = {1024, 576, 1, 1})
+        : type(type), ne_a(ne_a), ne_b(ne_b) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne_a.data());
+        ggml_tensor * b = ggml_new_tensor(ctx, type, 4, ne_b.data());
+        ggml_tensor * out = ggml_acc(ctx, a, b, a->nb[1], a->nb[2], a->nb[3], b->nb[1]);
+        return out;
+    }
+};
+
+// GGML_OP_PAD
+struct test_pad : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne_a;
+    const int pad_0;
+    const int pad_1;
+
+    std::string vars() override {
+        return VARS_TO_STR4(type, ne_a, pad_0, pad_1);
+    }
+
+    test_pad(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne_a = {512, 512, 1, 1},
+            int pad_0 = 1, int pad_1 = 1)
+        : type(type), ne_a(ne_a), pad_0(pad_0), pad_1(pad_1)  {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne_a.data());
+        ggml_tensor * out = ggml_pad(ctx, a, pad_0, pad_1, 0, 0);
+        return out;
+    }
+};
+
+// GGML_OP_ARANGE
+struct test_arange : public test_case {
+    const ggml_type type;
+    const float start;
+    const float stop;
+    const float step;
+
+    std::string vars() override {
+        return VARS_TO_STR4(type, start, stop, step);
+    }
+
+    test_arange(ggml_type type = GGML_TYPE_F32,
+            float start = 0.f, float stop = 10.f, float step = 1.f)
+        : type(type), start(start), stop(stop), step(step)  {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * out = ggml_arange(ctx, start, stop, step);
+        return out;
+    }
+};
+
+// GGML_OP_TIMESTEP_EMBEDDING
+struct test_timestep_embedding : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne_a;
+    const int dim;
+    const int max_period;
+
+    std::string vars() override {
+        return VARS_TO_STR4(type, ne_a, dim, max_period);
+    }
+
+    test_timestep_embedding(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne_a = {2, 1, 1, 1},
+            int dim = 320, int max_period=10000)
+        : type(type), ne_a(ne_a), dim(dim), max_period(max_period)  {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne_a.data());
+        ggml_tensor * out = ggml_timestep_embedding(ctx, a, dim, max_period);
+        return out;
+    }
+};
+
+// GGML_OP_LEAKY_RELU
+struct test_leaky_relu : public test_case {
+    const ggml_type type;
+    const std::array<int64_t, 4> ne_a;
+    const float negative_slope;
+
+    std::string vars() override {
+        return VARS_TO_STR3(type, ne_a, negative_slope);
+    }
+
+    test_leaky_relu(ggml_type type = GGML_TYPE_F32,
+            std::array<int64_t, 4> ne_a = {10, 10, 10, 10},
+            float negative_slope = 0.1f)
+        : type(type), ne_a(ne_a), negative_slope(negative_slope)  {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        ggml_tensor * a = ggml_new_tensor(ctx, type, 4, ne_a.data());
+        ggml_tensor * out = ggml_leaky_relu(ctx, a, negative_slope, true);
+        return out;
+    }
+};
+
+// GGML_OP_FLASH_ATTN_EXT
+struct test_flash_attn_ext : public test_case {
+    const int64_t hs; // head size
+    const int64_t nh; // num heads
+    const int64_t kv; // kv size
+    const int64_t nb; // batch size
+
+    const bool mask; // use mask
+
+    const float max_bias; // ALiBi
+
+    const ggml_type type_KV;
+
+    std::string vars() override {
+        return VARS_TO_STR7(hs, nh, kv, nb, mask, max_bias, type_KV);
+    }
+
+    double max_nmse_err() override {
+        return 5e-4;
+    }
+
+    test_flash_attn_ext(int64_t hs = 128, int64_t nh = 32, int64_t kv = 96, int64_t nb = 8, bool mask = true, float max_bias = 0.0f, ggml_type type_KV = GGML_TYPE_F16)
+        : hs(hs), nh(nh), kv(kv), nb(nb), mask(mask), max_bias(max_bias), type_KV(type_KV) {}
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        const int64_t hs_padded = GGML_PAD(hs, ggml_blck_size(type_KV));
+
+        ggml_tensor * q = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, hs_padded, nb, nh, 1);
+        ggml_tensor * k = ggml_new_tensor_4d(ctx, type_KV,       hs_padded, kv, nh, 1);
+        ggml_tensor * v = ggml_new_tensor_4d(ctx, type_KV,       hs_padded, kv, nh, 1);
+        ggml_tensor * m = mask ? ggml_new_tensor_4d(ctx, GGML_TYPE_F16, kv, GGML_PAD(nb, GGML_KQ_MASK_PAD), 1, 1) : nullptr;
+        ggml_tensor * out = ggml_flash_attn_ext(ctx, q, k, v, m, 1.0f/sqrtf(hs), max_bias);
+        return out;
+    }
+};
+
+enum llm_norm_type {
+    LLM_NORM,
+    LLM_NORM_RMS,
+};
+
+struct llama_hparams {
+    uint32_t n_vocab;
+    uint32_t n_embd;
+    uint32_t n_head;
+    uint32_t n_head_kv;
+    static constexpr uint32_t n_layer = 1;
+    uint32_t n_rot;
+    uint32_t n_embd_head; // dimension of values (d_v)
+    uint32_t n_ff;
+
+    float f_norm_eps;
+    float f_norm_rms_eps;
+
+    // cparams
+    static constexpr uint32_t n_ctx = 512; // user-specified context size
+    static constexpr uint32_t n_ctx_orig = n_ctx;
+
+    // batch
+    int32_t n_tokens;
+
+    // llm_build_context
+    static constexpr int32_t n_kv    = 32; // size of KV cache to consider (n_kv <= n_ctx
+    static constexpr int32_t kv_head = 1;  // index of where we store new KV data in the cache
+
+    uint32_t n_embd_gqa() const { // dimension of key embeddings across all k-v heads
+        return n_embd_head * n_head_kv;
+    }
+};
+
+// LLM base class
+struct test_llm : public test_case {
+    llama_hparams hp;
+
+protected:
+    test_llm(llama_hparams hp)
+        : hp(std::move(hp)) {
+    }
+
+public:
+    struct ggml_tensor * llm_build_norm(
+            struct ggml_context * ctx,
+             struct ggml_tensor * cur,
+             struct ggml_tensor * mw,
+             struct ggml_tensor * mb,
+                  llm_norm_type   type) {
+        switch (type) {
+            case LLM_NORM:     cur = ggml_norm    (ctx, cur, hp.f_norm_eps); break;
+            case LLM_NORM_RMS: cur = ggml_rms_norm(ctx, cur, hp.f_norm_rms_eps); break;
+        }
+        cur = ggml_mul(ctx, cur, mw);
+        if (mb) {
+            cur = ggml_add(ctx, cur, mb);
+        }
+        return cur;
+    }
+
+    void llm_build_kv_store(
+            struct ggml_context * ctx,
+             struct ggml_tensor * k_l,
+             struct ggml_tensor * v_l,
+             struct ggml_tensor * k_cur,
+             struct ggml_tensor * v_cur) {
+        // compute the transposed [n_tokens, n_embd] V matrix
+        struct ggml_tensor * v_cur_t = ggml_transpose(ctx, ggml_reshape_2d(ctx, v_cur, hp.n_embd_gqa(), hp.n_tokens));
+
+        struct ggml_tensor * k_cache_view = ggml_view_1d(ctx, k_l, hp.n_tokens*hp.n_embd_gqa(),
+                (ggml_row_size(k_l->type, hp.n_embd_gqa()))*hp.kv_head);
+
+        struct ggml_tensor * v_cache_view = ggml_view_2d(ctx, v_l, hp.n_tokens, hp.n_embd_gqa(),
+                (  hp.n_ctx)*ggml_element_size(v_l),
+                (hp.kv_head)*ggml_element_size(v_l));
+
+        // important: storing RoPE-ed version of K in the KV cache!
+        ggml_cpy(ctx, k_cur,   k_cache_view);
+        ggml_cpy(ctx, v_cur_t, v_cache_view);
+    }
+
+    struct ggml_tensor * llm_build_kqv(
+            struct ggml_context * ctx,
+             struct ggml_tensor * k_l,
+             struct ggml_tensor * v_l,
+             struct ggml_tensor * q_cur,
+             struct ggml_tensor * kq_mask,
+                        float     kq_scale) {
+        struct ggml_tensor * q = ggml_permute(ctx, q_cur, 0, 2, 1, 3);
+
+        struct ggml_tensor * k =
+            ggml_view_3d(ctx, k_l,
+                    hp.n_embd_head, hp.n_kv, hp.n_head_kv,
+                    ggml_row_size(k_l->type, hp.n_embd_gqa()),
+                    ggml_row_size(k_l->type, hp.n_embd_head),
+                    0);
+
+        struct ggml_tensor * kq = ggml_mul_mat(ctx, k, q);
+
+        kq = ggml_soft_max_ext(ctx, kq, kq_mask, kq_scale, 0.0f);
+
+        // split cached v into n_head heads
+        struct ggml_tensor * v =
+            ggml_view_3d(ctx, v_l,
+                    hp.n_kv, hp.n_embd_head, hp.n_head_kv,
+                    ggml_element_size(v_l)*hp.n_ctx,
+                    ggml_element_size(v_l)*hp.n_ctx*hp.n_embd_head,
+                    0);
+
+        struct ggml_tensor * kqv = ggml_mul_mat(ctx, v, kq);
+
+        struct ggml_tensor * kqv_merged = ggml_permute(ctx, kqv, 0, 2, 1, 3);
+
+        struct ggml_tensor * cur = ggml_cont_2d(ctx, kqv_merged, hp.n_embd_head*hp.n_head, hp.n_tokens);
+
+        struct ggml_tensor * wo = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_embd, hp.n_embd);
+        cur = ggml_mul_mat(ctx, wo, cur);
+
+        return cur;
+    }
+
+    void initialize_tensors(ggml_context * ctx) override {
+        for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) {
+            if (t->type == GGML_TYPE_I32) {
+                // pos
+                std::vector<int> data(hp.n_tokens);
+                for (int i = 0; i < hp.n_tokens; i++) {
+                    data[i] = rand() % hp.n_ctx;
+                }
+                ggml_backend_tensor_set(t, data.data(), 0, hp.n_tokens * sizeof(int));
+            } else {
+                init_tensor_uniform(t);
+            }
+        }
+    }
+};
+
+// Llama
+struct test_llama : public test_llm {
+    static constexpr float freq_base = 10000.0f;
+    static constexpr float freq_scale = 1.0f;
+    static constexpr float ext_factor = 0.0f;
+    static constexpr float attn_factor = 1.0f;
+    static constexpr float beta_fast = 32.0f;
+    static constexpr float beta_slow = 1.0f;
+
+    std::string op_desc(ggml_tensor * t) override {
+        GGML_UNUSED(t);
+        return "LLAMA";
+    }
+
+    std::string vars() override {
+        auto n_tokens = hp.n_tokens;
+        return VARS_TO_STR1(n_tokens);
+    }
+
+    double max_nmse_err() override {
+        return 2e-3;
+    }
+
+    test_llama(int n_tokens = 1)
+        : test_llm({
+            /*n_vocab        =*/ 32000,
+            /*n_embd         =*/ 3200,
+            /*n_head         =*/ 32,
+            /*n_head_kv      =*/ 32,
+            /*n_rot          =*/ 100,
+            /*n_embd_head    =*/ 100,
+            /*n_ff           =*/ 8640,
+            /*f_norm_eps     =*/ 0.f,
+            /*f_norm_rms_eps =*/ 1e-5f,
+            /*n_tokens       =*/ n_tokens,
+        }) {
+    }
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        struct ggml_tensor * cur;
+        struct ggml_tensor * inpL;
+
+        inpL = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, hp.n_embd, hp.n_tokens);
+
+        // inp_pos - contains the positions
+        struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, hp.n_tokens);
+
+        // KQ_mask (mask for 1 head, it will be broadcasted to all heads)
+        struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx, GGML_TYPE_F16, hp.n_kv, hp.n_tokens, 1);
+
+        ggml_tensor * k_l = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, 1638400);
+        ggml_tensor * v_l = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, 1638400);
+
+        for (uint32_t il = 0; il < hp.n_layer; ++il) {
+            struct ggml_tensor * inpSA = inpL;
+
+            // norm
+            ggml_tensor * attn_norm = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, hp.n_embd);
+            cur = llm_build_norm(ctx, inpL, attn_norm, nullptr, LLM_NORM_RMS);
+
+            // self-attention
+            {
+                ggml_tensor * wq = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_embd, hp.n_embd);
+                ggml_tensor * wk = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_embd, hp.n_embd_gqa());
+                ggml_tensor * wv = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_embd, hp.n_embd_gqa());
+
+                // compute Q and K and RoPE them
+                struct ggml_tensor * Qcur = ggml_mul_mat(ctx, wq, cur);
+                struct ggml_tensor * Kcur = ggml_mul_mat(ctx, wk, cur);
+                struct ggml_tensor * Vcur = ggml_mul_mat(ctx, wv, cur);
+
+                Qcur = ggml_rope_ext(
+                    ctx, ggml_reshape_3d(ctx, Qcur, hp.n_embd_head, hp.n_head,    hp.n_tokens), inp_pos, nullptr,
+                    hp.n_rot, 0, hp.n_ctx_orig, freq_base, freq_scale,
+                    ext_factor, attn_factor, beta_fast, beta_slow
+                );
+
+                Kcur = ggml_rope_ext(
+                    ctx, ggml_reshape_3d(ctx, Kcur, hp.n_embd_head, hp.n_head_kv, hp.n_tokens), inp_pos, nullptr,
+                    hp.n_rot, 0, hp.n_ctx_orig, freq_base, freq_scale,
+                    ext_factor, attn_factor, beta_fast, beta_slow
+                );
+
+                llm_build_kv_store(ctx, k_l, v_l, Kcur, Vcur);
+
+                cur = llm_build_kqv(ctx, k_l, v_l, Qcur, KQ_mask, 1.0f/sqrtf(float(hp.n_embd_head)));
+            }
+
+            struct ggml_tensor * ffn_inp = ggml_add(ctx, cur, inpSA);
+
+            // feed-forward network
+            ggml_tensor * ffn_norm = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, hp.n_embd);
+            cur = llm_build_norm(ctx, ffn_inp, ffn_norm, nullptr, LLM_NORM_RMS);
+
+            ggml_tensor * ffn_gate = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_embd, hp.n_ff);
+            ggml_tensor * ffn_down = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_ff,   hp.n_embd);
+            ggml_tensor * ffn_up   = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_embd, hp.n_ff);
+            struct ggml_tensor * tmp = ggml_mul_mat(ctx, ffn_up, cur);
+            cur = ggml_mul_mat(ctx, ffn_gate, cur);
+            cur = ggml_silu(ctx, cur);
+            cur = ggml_mul(ctx, cur, tmp);
+            cur = ggml_mul_mat(ctx, ffn_down, cur);
+
+            cur = ggml_add(ctx, cur, ffn_inp);
+
+            // input for next layer
+            inpL = cur;
+        }
+
+        cur = inpL;
+
+        ggml_tensor * output_norm = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, hp.n_embd);
+        cur = llm_build_norm(ctx, cur, output_norm, nullptr, LLM_NORM_RMS);
+
+        // lm_head
+        ggml_tensor * output = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_embd, hp.n_vocab);
+        cur = ggml_mul_mat(ctx, output, cur);
+
+        return cur;
+    }
+};
+
+// Falcon
+struct test_falcon : public test_llm {
+    static constexpr float freq_base = 10000.0f;
+    static constexpr float freq_scale = 1.0f;
+    static constexpr float ext_factor = 0.0f;
+    static constexpr float attn_factor = 1.0f;
+    static constexpr float beta_fast = 32.0f;
+    static constexpr float beta_slow = 1.0f;
+
+    std::string op_desc(ggml_tensor * t) override {
+        GGML_UNUSED(t);
+        return "FALCON";
+    }
+
+    std::string vars() override {
+        auto n_tokens = hp.n_tokens;
+        return VARS_TO_STR1(n_tokens);
+    }
+
+    double max_nmse_err() override {
+        return 2e-3;
+    }
+
+    test_falcon(int n_tokens = 1)
+        : test_llm({
+            /*n_vocab        =*/ 32000,
+            /*n_embd         =*/ 3200,
+            /*n_head         =*/ 50,
+            /*n_head_kv      =*/ 1,
+            /*n_rot          =*/ 64,
+            /*n_embd_head    =*/ 64,
+            /*n_ff           =*/ 8640,
+            /*f_norm_eps     =*/ 1e-5f,
+            /*f_norm_rms_eps =*/ 0.f,
+            /*n_tokens       =*/ n_tokens,
+        }) {
+    }
+
+    ggml_tensor * build_graph(ggml_context * ctx) override {
+        struct ggml_tensor * cur;
+        struct ggml_tensor * inpL;
+
+        inpL = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, hp.n_embd, hp.n_tokens);
+
+        // inp_pos - contains the positions
+        struct ggml_tensor * inp_pos = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, hp.n_tokens);
+
+        // KQ_mask (mask for 1 head, it will be broadcasted to all heads)
+        struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx, GGML_TYPE_F16, hp.n_kv, hp.n_tokens, 1);
+
+        ggml_tensor * k_l = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, 1638400);
+        ggml_tensor * v_l = ggml_new_tensor_1d(ctx, GGML_TYPE_F16, 1638400);
+
+        for (uint32_t il = 0; il < hp.n_layer; ++il) {
+            // norm
+            ggml_tensor * attn_norm_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, hp.n_embd);
+            ggml_tensor * attn_norm_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, hp.n_embd);
+            ggml_tensor * attn_norm = llm_build_norm(ctx, inpL, attn_norm_w, attn_norm_b, LLM_NORM);
+
+            // self-attention
+            {
+                cur = attn_norm;
+
+                ggml_tensor * wqkv = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_embd, hp.n_embd + 2*hp.n_embd_gqa());
+
+                cur = ggml_mul_mat(ctx, wqkv, cur);
+
+                struct ggml_tensor * Qcur = ggml_cont(ctx, ggml_view_2d(ctx, cur, hp.n_embd,     hp.n_tokens, cur->nb[1], 0*sizeof(float)*(hp.n_embd)));
+                struct ggml_tensor * Kcur = ggml_cont(ctx, ggml_view_2d(ctx, cur, hp.n_embd_gqa(), hp.n_tokens, cur->nb[1], 1*sizeof(float)*(hp.n_embd)));
+                struct ggml_tensor * Vcur = ggml_cont(ctx, ggml_view_2d(ctx, cur, hp.n_embd_gqa(), hp.n_tokens, cur->nb[1], 1*sizeof(float)*(hp.n_embd + hp.n_embd_gqa())));
+
+                Qcur = ggml_reshape_3d(ctx, Qcur, hp.n_embd_head, hp.n_head,    hp.n_tokens);
+                Kcur = ggml_reshape_3d(ctx, Kcur, hp.n_embd_head, hp.n_head_kv, hp.n_tokens);
+
+                // using mode = 2 for neox mode
+                Qcur = ggml_rope_ext(
+                    ctx, Qcur, inp_pos, nullptr, hp.n_rot, 2, hp.n_ctx_orig,
+                    freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow
+                );
+
+                Kcur = ggml_rope_ext(
+                    ctx, Kcur, inp_pos, nullptr, hp.n_rot, 2, hp.n_ctx_orig,
+                    freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow
+                );
+
+                llm_build_kv_store(ctx, k_l, v_l, Kcur, Vcur);
+
+                cur = llm_build_kqv(ctx, k_l, v_l, Qcur, KQ_mask, 1.0f/sqrtf(float(hp.n_embd_head)));
+            }
+
+            struct ggml_tensor * ffn_inp = cur;
+
+            // feed forward
+            {
+                ggml_tensor * ffn_up   = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_embd, hp.n_ff);
+                ggml_tensor * ffn_down = ggml_new_tensor_2d(ctx, GGML_TYPE_Q4_0, hp.n_ff, hp.n_embd);
+                cur = attn_norm;
+                cur = ggml_mul_mat(ctx, ffn_up, cur);
+                cur = ggml_gelu(ctx, cur);
+                cur = ggml_mul_mat(ctx, ffn_down, cur);
+            }
+
+            cur = ggml_add(ctx, cur, ffn_inp);
+
+            cur = ggml_add(ctx, cur, inpL);
+
+            // input for next layer
+            inpL = cur;
+        }
+
+        cur = inpL;
+
+        ggml_tensor * output_norm   = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, hp.n_embd);
+        ggml_tensor * output_norm_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, hp.n_embd);
+        cur = llm_build_norm(ctx, cur, output_norm, output_norm_b, LLM_NORM);
+
+        // lm_head
+        ggml_tensor * output = ggml_new_tensor_2d(ctx, GGML_TYPE_Q8_0, hp.n_embd, hp.n_vocab);
+        cur = ggml_mul_mat(ctx, output, cur);
+
+        return cur;
+    }
+};
+
+static bool test_backend(ggml_backend_t backend, test_mode mode, const char * op_name) {
+    std::vector<std::unique_ptr<test_case>> test_cases;
+    std::default_random_engine rng(0);
+
+    const ggml_type all_types[] = {
+        GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_BF16,
+        GGML_TYPE_Q4_0, GGML_TYPE_Q4_1,
+        GGML_TYPE_Q5_0, GGML_TYPE_Q5_1,
+        GGML_TYPE_Q8_0,
+        GGML_TYPE_Q2_K, GGML_TYPE_Q3_K,
+        GGML_TYPE_Q4_K, GGML_TYPE_Q5_K,
+        GGML_TYPE_Q6_K,
+        GGML_TYPE_IQ2_XXS, GGML_TYPE_IQ2_XS, GGML_TYPE_IQ2_S,
+        GGML_TYPE_IQ3_XXS, GGML_TYPE_IQ1_S, GGML_TYPE_IQ1_M,
+        GGML_TYPE_IQ4_NL, GGML_TYPE_IQ3_S, GGML_TYPE_IQ4_XS,
+    };
+
+    const ggml_type base_types[] = {
+        GGML_TYPE_F32, GGML_TYPE_F16,
+        GGML_TYPE_Q4_0,
+        GGML_TYPE_Q4_K,
+        GGML_TYPE_IQ2_XXS
+    };
+
+    const ggml_type other_types[] = {
+        GGML_TYPE_Q4_1,
+        GGML_TYPE_Q5_0, GGML_TYPE_Q5_1,
+        GGML_TYPE_Q8_0,
+        GGML_TYPE_Q2_K, GGML_TYPE_Q3_K,
+        GGML_TYPE_Q5_K,
+        GGML_TYPE_Q6_K,
+        GGML_TYPE_IQ2_XS, GGML_TYPE_IQ2_S,
+        GGML_TYPE_IQ3_XXS, GGML_TYPE_IQ1_S, GGML_TYPE_IQ1_M,
+        GGML_TYPE_IQ4_NL, GGML_TYPE_IQ3_S, GGML_TYPE_IQ4_XS,
+    };
+
+    // unary ops
+    for (int v : {0, 1}) {
+        for (int op = 0; op < GGML_UNARY_OP_COUNT; op++) {
+            test_cases.emplace_back(new test_unary((ggml_unary_op) op, GGML_TYPE_F32, { 128, 10, 10, 10 }, v));
+            test_cases.emplace_back(new test_unary((ggml_unary_op) op, GGML_TYPE_F32, { 7, 13, 19, 23 }, v));
+        }
+    }
+
+    test_cases.emplace_back(new test_get_rows(GGML_TYPE_F32, 1, 8, 2, 1, false));
+    for (ggml_type type : all_types) {
+        for (int b : {1, 7}) {
+            for (bool v : {false, true}) {
+                test_cases.emplace_back(new test_get_rows(type, 256, 5, 4, b, v));
+            }
+        }
+    }
+    for (int b : {1, 7}) {
+        for (bool v : {false, true}) {
+            test_cases.emplace_back(new test_get_rows(GGML_TYPE_I32, 256, 5, 4, b, v));
+        }
+    }
+
+    for (ggml_type type_input : {GGML_TYPE_F32}) {
+        for (ggml_op_pool pool_type : {GGML_OP_POOL_AVG, GGML_OP_POOL_MAX}) {
+            for (int k0 : {1, 3}) {
+                for (int k1 : {1, 3}) {
+                    for (int s0 : {1, 2}) {
+                        for (int s1 : {1, 2}) {
+                            for (int p0 : {0, 1}) {
+                                for (int p1 : {0, 1}) {
+                                    test_cases.emplace_back(new test_pool2d(pool_type, type_input, {10, 10, 3, 1}, k0, k1, s0, s1, p0, p1));
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    test_cases.emplace_back(new test_im2col(GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_F32));
+    test_cases.emplace_back(new test_im2col(GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_F16));
+
+    test_cases.emplace_back(new test_repeat(GGML_TYPE_F32, {10, 10, 10, 10}, {1, 1, 1, 1}));
+    test_cases.emplace_back(new test_repeat(GGML_TYPE_F32, {10, 10, 10, 10}, {2, 1, 1, 1}));
+    test_cases.emplace_back(new test_repeat(GGML_TYPE_F32, {10, 10, 10, 10}, {1, 2, 1, 1}));
+    test_cases.emplace_back(new test_repeat(GGML_TYPE_F32, {10, 10, 10, 10}, {1, 1, 2, 1}));
+    test_cases.emplace_back(new test_repeat(GGML_TYPE_F32, {10, 10, 10, 10}, {1, 1, 1, 2}));
+    test_cases.emplace_back(new test_repeat(GGML_TYPE_I32, {10, 10, 10, 10}, {2, 1, 1, 1}));
+    test_cases.emplace_back(new test_repeat(GGML_TYPE_I16, {10, 10, 10, 10}, {1, 1, 1, 2}));
+
+    test_cases.emplace_back(new test_dup(GGML_TYPE_F32));
+    test_cases.emplace_back(new test_dup(GGML_TYPE_F16));
+    test_cases.emplace_back(new test_dup(GGML_TYPE_I32));
+    test_cases.emplace_back(new test_dup(GGML_TYPE_I16));
+    test_cases.emplace_back(new test_dup(GGML_TYPE_I16, {10, 8, 3, 1}, {0, 2, 1, 3}));
+    test_cases.emplace_back(new test_dup(GGML_TYPE_I16, {10, 8, 3, 1}, {1, 2, 0, 3}));
+
+    for (ggml_type type_src : {GGML_TYPE_F16, GGML_TYPE_F32}) {
+        for (ggml_type type_dst : all_types) {
+           test_cases.emplace_back(new test_cpy(type_src, type_dst, {256, 4, 4, 4}));
+        }
+    }
+
+    test_cases.emplace_back(new test_cont());
+
+    auto add_test_bin_bcast = [&](ggml_type type, std::array<int64_t, 4> ne, std::array<int, 4> nr) {
+        for (auto op : {ggml_add, ggml_mul, ggml_div}) {
+            test_cases.emplace_back(new test_bin_bcast(op, type, ne, nr));
+        }
+    };
+
+    add_test_bin_bcast(GGML_TYPE_F32, {1, 1, 8, 1}, {1, 1, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1, 1, 1, 1}, {32, 1, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1, 1, 320, 320}, {1, 1, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 10, 1, 1}, {1, 1, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 10, 10, 1}, {1, 1, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 10, 10, 10}, {1, 1, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 10, 10, 10}, {2, 1, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 10, 10, 10}, {1, 2, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 10, 10, 10}, {1, 1, 2, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 10, 10, 10}, {1, 1, 1, 2});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 10, 10, 10}, {1, 1, 2, 2});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 10, 10, 10}, {1, 2, 2, 2});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 10, 10, 10}, {2, 2, 2, 2});
+
+    // stable diffusion
+    add_test_bin_bcast(GGML_TYPE_F32, {1280, 1, 1, 1}, {1, 1, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1280, 1, 1, 1}, {1, 16, 16, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1280, 16, 16, 1}, {1, 1, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1280, 1, 1, 1}, {1, 256, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1, 1, 1280, 1}, {16, 16, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {16, 16, 1280, 1}, {1, 1, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1, 1, 1920, 1}, {16, 16, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1, 1, 2560, 1}, {16, 16, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1, 1, 1280, 1}, {32, 32, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1, 1, 1920, 1}, {32, 32, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {1, 1, 640, 1}, {32, 32, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {5120, 1, 1, 1}, {1, 256, 1, 1});
+    add_test_bin_bcast(GGML_TYPE_F32, {640, 1, 1, 1}, {1, 1, 1, 1});
+    //add_test_bin_bcast(GGML_TYPE_F32, {3, 3, 2560, 1280}, {1, 1, 1, 1});
+    //add_test_bin_bcast(GGML_TYPE_F32, {3, 3, 2560, 1280}, {2, 1, 1, 1});
+
+    test_cases.emplace_back(new test_scale());
+
+    for (float eps : {1e-6f, 1e-5f, 1e-3f, 1e-1f}) {
+        test_cases.emplace_back(new test_norm(GGML_TYPE_F32, {64, 10, 10, 10}, eps));
+        test_cases.emplace_back(new test_rms_norm(GGML_TYPE_F32, {64, 10, 10, 10}, eps));
+    }
+
+    for (ggml_type type_a : base_types) {
+        for (ggml_type type_b : {GGML_TYPE_F32, GGML_TYPE_F16}) {
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 1, 256, { 1,  1}, {1, 1}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 1, 256, {10,  1}, {1, 1}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 1, 256, {10,  1}, {2, 1}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 1, 256, {10, 10}, {1, 1}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 1, 256, {10, 10}, {2, 1}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 1, 256, {10, 10}, {1, 2}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 1, 256, {10, 10}, {2, 2}));
+
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 16, 256, { 1,  1}, {1, 1}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 16, 256, {10,  1}, {1, 1}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 16, 256, {10,  1}, {2, 1}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 16, 256, {10, 10}, {1, 1}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 16, 256, {10, 10}, {2, 1}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 16, 256, {10, 10}, {1, 2}));
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 16, 256, {10, 10}, {2, 2}));
+        }
+    }
+
+    for (ggml_type type_a : other_types) {
+        for (ggml_type type_b : {GGML_TYPE_F32}) {
+            test_cases.emplace_back(new test_mul_mat(type_a, type_b, 16, 1, 256, { 1,  1}, {1, 1}));
+        }
+    }
+
+    test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32,  64, 2,  128, { 8,  1}, {1, 1}));
+    test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32,  83, 2,  128, { 8,  1}, {4, 1}));
+    test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32,  64, 2,   64, { 8,  1}, {4, 1}));
+    test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32,  83, 2,   64, { 8,  1}, {4, 1}));
+    test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32,  64, 45, 128, { 8,  1}, {4, 1}));
+    test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32, 128, 45,  64, { 8,  1}, {4, 1}));
+
+    for (ggml_type type_a : base_types) {
+        for (ggml_type type_b : {GGML_TYPE_F32 /*, GGML_TYPE_F16 */}) {
+            for (int n_mats : {4, 8}) {
+                for (int n_used : {1, 2, 4}) {
+                    for (bool b : {false, true}) {
+                        for (int n : {1, 32}) {
+                            int m = 512;
+                            int k = 256;
+                            test_cases.emplace_back(new test_mul_mat_id(type_a, type_b, n_mats, n_used, b, m, n, k));
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    for (ggml_type type_a : other_types) {
+        for (ggml_type type_b : {GGML_TYPE_F32 /*, GGML_TYPE_F16 */}) {
+            for (int n_mats : {4}) {
+                for (int n_used : {2}) {
+                    for (bool b : {false}) {
+                        for (int n : {1}) {
+                            int m = 512;
+                            int k = 256;
+                            test_cases.emplace_back(new test_mul_mat_id(type_a, type_b, n_mats, n_used, b, m, n, k));
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    test_cases.emplace_back(new test_sqr());
+    test_cases.emplace_back(new test_sqrt());
+    test_cases.emplace_back(new test_clamp());
+
+    test_cases.emplace_back(new test_diag_mask_inf(GGML_TYPE_F32, {10, 10,  1,  1}, 5));
+    test_cases.emplace_back(new test_diag_mask_inf(GGML_TYPE_F32, {10, 10, 10,  1}, 5));
+    test_cases.emplace_back(new test_diag_mask_inf(GGML_TYPE_F32, {10, 10, 10, 10}, 5));
+
+#if 0
+    std::uniform_int_distribution<> dist_ne1(1, 50);
+    int exponent = 1;
+    while (exponent < (1 << 17)) {
+        std::uniform_int_distribution<> dist_ne0(exponent, 2*exponent);
+
+        for (int n = 0; n < 10; ++n) {
+            int64_t ne0 = dist_ne0(rng);
+            int64_t ne1 = dist_ne1(rng);
+            test_cases.emplace_back(new test_soft_max(GGML_TYPE_F32, {ne0, ne1, 1, 1}, n/2 == 0, 0.1f, ne0 < 1000 ? 4.0f : 0.0f));
+        }
+
+        exponent <<= 1;
+    }
+#endif
+    for (bool mask : {false, true}) {
+        for (float max_bias : {0.0f, 8.0f}) {
+            if (!mask && max_bias > 0.0f) continue;
+            for (float scale : {1.0f, 0.1f}) {
+                for (int64_t ne0 : {16, 1024}) {
+                    for (int64_t ne1 : {16, 1024}) {
+                        test_cases.emplace_back(new test_soft_max(GGML_TYPE_F32, {ne0,   ne1,   1, 1}, mask, scale, max_bias));
+                        test_cases.emplace_back(new test_soft_max(GGML_TYPE_F32, {ne0-1, ne1-1, 1, 1}, mask, scale, max_bias));
+                    }
+                }
+            }
+        }
+    }
+
+    test_cases.emplace_back(new test_soft_max(GGML_TYPE_F32, {16, 2, 32, 1}, false, 0.1f, 0.0f));
+    test_cases.emplace_back(new test_soft_max(GGML_TYPE_F32, {32, 2, 32, 1}, true,  0.1f, 0.0f));
+    test_cases.emplace_back(new test_soft_max(GGML_TYPE_F32, {32, 2, 32, 1}, true,  0.1f, 8.0f));
+
+    {
+        bool all = true;
+
+        for (float v : { 0, 1 }) {
+            for (float fs : { 1.0f, 1.4245f }) {
+                for (float ef : { 0.0f, 0.7465f }) {
+                    for (float af : { 1.0f, 1.4245f }) {
+                        for (ggml_type type : {GGML_TYPE_F32, GGML_TYPE_F16}) {
+                            for (bool ff : {false, true}) { // freq_factors
+                                test_cases.emplace_back(new test_rope(type, {128,  32, 10, 1}, 128, 0, 512, fs, ef, af, ff, v)); // llama 7B
+
+                                if (all) {
+                                    test_cases.emplace_back(new test_rope(type, {128,  40, 10, 1}, 128, 0, 512, fs, ef, af, ff, v)); // llama 13B
+                                    test_cases.emplace_back(new test_rope(type, {128,  52, 10, 1}, 128, 0, 512, fs, ef, af, ff, v)); // llama 30B
+                                    test_cases.emplace_back(new test_rope(type, {128,  64, 10, 1}, 128, 0, 512, fs, ef, af, ff, v)); // llama 65B
+                                }
+
+                                if (all) {
+                                    test_cases.emplace_back(new test_rope(type, { 64,   1, 10, 1},  64, 2, 512, fs, ef, af, ff, v)); // neox (falcon 7B)
+                                    test_cases.emplace_back(new test_rope(type, { 64,  71, 10, 1},  64, 2, 512, fs, ef, af, ff, v)); // neox (falcon 7B)
+                                    test_cases.emplace_back(new test_rope(type, { 64,   8, 10, 1},  64, 2, 512, fs, ef, af, ff, v)); // neox (falcon 40B)
+                                    test_cases.emplace_back(new test_rope(type, { 80,  32, 10, 1},  20, 2, 512, fs, ef, af, ff, v)); // neox (stablelm)
+                                    test_cases.emplace_back(new test_rope(type, { 80,  32, 10, 1},  32, 2, 512, fs, ef, af, ff, v)); // neox (phi-2)
+                                }
+
+                                test_cases.emplace_back(new test_rope(type, { 64, 128, 10, 1},  64, 2, 512, fs, ef, af, ff, v)); // neox (falcon 40B)
+                            }
+                        }
+
+                        all = false;
+                    }
+                }
+            }
+        }
+    }
+
+    for (int v : { 0, 1, 2, 3 }) {
+        for (int dim : { 0, 1, 2, 3, }) {
+            test_cases.emplace_back(new test_concat(GGML_TYPE_F32, {11, 12, 13, 14}, 7, dim, v));
+            test_cases.emplace_back(new test_concat(GGML_TYPE_I32, {11, 12, 13, 14}, 7, dim, v));
+        }
+    }
+
+    for (ggml_sort_order order : {GGML_SORT_ORDER_ASC, GGML_SORT_ORDER_DESC}) {
+        test_cases.emplace_back(new test_argsort(GGML_TYPE_F32, {8, 1, 1, 1}, order));
+        test_cases.emplace_back(new test_argsort(GGML_TYPE_F32, {16, 10, 10, 10}, order));
+        test_cases.emplace_back(new test_argsort(GGML_TYPE_F32, {60, 10, 10, 10}, order)); // qwen
+    }
+
+    test_cases.emplace_back(new test_sum_rows());
+    test_cases.emplace_back(new test_upscale());
+    test_cases.emplace_back(new test_upscale(GGML_TYPE_F32, { 512, 512, 3, 1 }, 2, true));
+    test_cases.emplace_back(new test_upscale_ext());
+    test_cases.emplace_back(new test_group_norm());
+    test_cases.emplace_back(new test_acc());
+    test_cases.emplace_back(new test_pad());
+    test_cases.emplace_back(new test_arange());
+    test_cases.emplace_back(new test_timestep_embedding());
+    test_cases.emplace_back(new test_leaky_relu());
+
+    for (int hs : { 64, 80, 128, 256, }) {
+        for (bool mask : { true, false } ) {
+            for (float max_bias : { 0.0f, 8.0f }) {
+                if (!mask && max_bias > 0.0f) continue;
+                for (int nh : { 32, }) {
+                    for (int kv : { 512, 1024, }) {
+                        for (int nb : { 1, 2, 4, 8, }) {
+                            for (ggml_type type_KV : {GGML_TYPE_F16, GGML_TYPE_Q8_0, GGML_TYPE_Q4_0}) {
+                                test_cases.emplace_back(new test_flash_attn_ext(hs, nh, kv, nb, mask, max_bias, type_KV));
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    // these tests are disabled to save execution time, but they can be handy for debugging
+#if 0
+    test_cases.emplace_back(new test_llama(1));
+    test_cases.emplace_back(new test_llama(2));
+    test_cases.emplace_back(new test_falcon(1));
+    test_cases.emplace_back(new test_falcon(2));
+#endif
+
+    // run tests
+    if (mode == MODE_TEST) {
+        ggml_backend_t backend_cpu = ggml_backend_cpu_init();
+
+        size_t n_ok = 0;
+        for (auto & test : test_cases) {
+            if (test->eval(backend, backend_cpu, op_name)) {
+                n_ok++;
+            }
+        }
+        printf("  %zu/%zu tests passed\n", n_ok, test_cases.size());
+
+        ggml_backend_free(backend_cpu);
+
+        return n_ok == test_cases.size();
+    }
+
+    if (mode == MODE_PERF) {
+        for (auto & test : test_cases) {
+            test->eval_perf(backend, op_name);
+        }
+        return true;
+    }
+
+    GGML_ASSERT(false);
+    return false;
+}
+
+static void usage(char ** argv) {
+    printf("Usage: %s [mode] [-o op] [-b backend]\n", argv[0]);
+    printf("  valid modes are: test (compare with CPU backend for correctness) or perf (performance evaluation)\n");
+    printf("  op names are as given by ggml_op_desc()\n");
+}
+
+int main(int argc, char ** argv) {
+    test_mode mode = MODE_TEST;
+    const char * op_name_filter = NULL;
+    const char * backend_filter = NULL;
+
+    for (int i = 1; i < argc; i++) {
+        if (strcmp(argv[i], "test") == 0) {
+            mode = MODE_TEST;
+        } else if (strcmp(argv[i], "perf") == 0) {
+            mode = MODE_PERF;
+        } else if (strcmp(argv[i], "-o") == 0) {
+            if (i + 1 < argc) {
+                op_name_filter = argv[++i];
+            } else {
+                usage(argv);
+                return 1;
+            }
+        } else if (strcmp(argv[i], "-b") == 0) {
+            if (i + 1 < argc) {
+                backend_filter = argv[++i];
+            } else {
+                usage(argv);
+                return 1;
+            }
+        } else {
+            usage(argv);
+            return 1;
+        }
+    }
+
+    // enumerate backends
+    printf("Testing %zu backends\n\n", ggml_backend_reg_get_count());
+
+    size_t n_ok = 0;
+
+    for (size_t i = 0; i < ggml_backend_reg_get_count(); i++) {
+        printf("Backend %zu/%zu (%s)\n", i + 1, ggml_backend_reg_get_count(), ggml_backend_reg_get_name(i));
+
+        if (backend_filter != NULL && strcmp(backend_filter, ggml_backend_reg_get_name(i)) != 0) {
+            printf("  Skipping\n");
+            n_ok++;
+            continue;
+        }
+
+        ggml_backend_t backend = ggml_backend_reg_init_backend(i, NULL);
+        GGML_ASSERT(backend != NULL);
+
+        if (backend_filter == NULL && ggml_backend_is_cpu(backend)) {
+            printf("  Skipping CPU backend\n");
+            ggml_backend_free(backend);
+            n_ok++;
+            continue;
+        }
+
+        printf("  Backend name: %s\n", ggml_backend_name(backend));
+
+        bool ok = test_backend(backend, mode, op_name_filter);
+
+        printf("  Backend %s: ", ggml_backend_name(backend));
+        if (ok) {
+            printf("\033[1;32mOK\033[0m\n");
+            n_ok++;
+        } else {
+            printf("\033[1;31mFAIL\033[0m\n");
+        }
+
+        printf("\n");
+
+        ggml_backend_free(backend);
+    }
+
+    printf("%zu/%zu backends passed\n", n_ok, ggml_backend_reg_get_count());
+
+    if (n_ok != ggml_backend_reg_get_count()) {
+        printf("\033[1;31mFAIL\033[0m\n");
+        return 1;
+    }
+
+    ggml_quantize_free();
+
+    printf("\033[1;32mOK\033[0m\n");
+    return 0;
+}
diff --git a/tests/test-c.c b/tests/test-c.c
new file mode 100644 (file)
index 0000000..e47d4c6
--- /dev/null
@@ -0,0 +1,3 @@
+#include "whisper.h"
+
+int main(void) {}
diff --git a/whisper-mel-cuda.cu b/whisper-mel-cuda.cu
deleted file mode 100644 (file)
index 8d67414..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-#define CUB_IGNORE_DEPRECATED_CPP_DIALECT
-#include "whisper-mel-cuda.hpp"
-#include "whisper.h"
-
-#include <ggml-cuda/common.cuh>
-#include <ggml-backend-impl.h>
-
-#include <cuda.h>
-#include <cuda_runtime.h>
-#include <cufft.h>
-#include <cublas_v2.h>
-#include <cuComplex.h>
-#include <cub/device/device_reduce.cuh>
-#include <device_launch_parameters.h>
-
-#include <algorithm>
-
-#if defined(_MSC_VER)
-#pragma warning(disable: 4324) // added padding
-#endif
-
-namespace {
-
-static const char* cufftGetErrorString(cufftResult_t res) {
-    switch (res) {
-    case CUFFT_SUCCESS: return "The cuFFT operation was successful";
-    case CUFFT_INVALID_PLAN: return "cuFFT was passed an invalid plan handle";
-    case CUFFT_ALLOC_FAILED: return "cuFFT failed to allocate GPU or CPU memory";
-    case CUFFT_INVALID_TYPE: return "No longer used";
-    case CUFFT_INVALID_VALUE: return "User specified an invalid pointer or parameter";
-    case CUFFT_INTERNAL_ERROR: return "Driver or internal cuFFT library error";
-    case CUFFT_EXEC_FAILED: return "Failed to execute an FFT on the GPU";
-    case CUFFT_SETUP_FAILED: return "The cuFFT library failed to initialize";
-    case CUFFT_INVALID_SIZE: return "User specified an invalid transform size";
-    case CUFFT_UNALIGNED_DATA: return "No longer used";
-    case CUFFT_INCOMPLETE_PARAMETER_LIST: return "Missing parameters in call";
-    case CUFFT_INVALID_DEVICE: return "Execution of a plan was on different GPU than plan creation";
-    case CUFFT_PARSE_ERROR: return "Internal plan database error";
-    case CUFFT_NO_WORKSPACE: return "No workspace has been provided prior to plan execution";
-    case CUFFT_NOT_IMPLEMENTED: return "Function does not implement functionality for parameters given.";
-    case CUFFT_LICENSE_ERROR: return "Used in previous versions.";
-    case CUFFT_NOT_SUPPORTED: return "Operation is not supported for parameters given.";
-    default: return "Unknown error";
-    }
-}
-
-#define CUFFT_CHECK(err) CUDA_CHECK_GEN(err, CUFFT_SUCCESS, cufftGetErrorString)
-
-__global__ void k_fill_stft_input(
-    const float * padded_samples,
-    const int n_frames,
-    const float * hann_window,
-    float * stft_in
-) {
-    auto y = blockIdx.y * blockDim.y + threadIdx.y;
-    // if (y >= n_frames) return;
-    auto x = blockIdx.x * blockDim.x + threadIdx.x;
-    // if (x >= WHISPER_N_FFT) return;
-
-    auto line = padded_samples + y * WHISPER_HOP_LENGTH;
-    auto outLine = stft_in + y * WHISPER_N_FFT;
-
-    outLine[x] = line[x] * hann_window[x];
-}
-
-__global__ void k_calc_magnitudes(
-    const cuComplex * stft_out,
-    const int n_frames,
-    float * magnitudes
-) {
-    auto y = blockIdx.y * blockDim.y + threadIdx.y;
-    // if (y >= n_frames) return;
-    auto x = blockIdx.x * blockDim.x + threadIdx.x;
-    // if (x >= WHISPER_N_FFT_HALF) return;
-
-    auto idx = y * WHISPER_N_FFT_HALF + x;
-
-    auto r = stft_out[idx].x;
-    auto i = stft_out[idx].y;
-    magnitudes[idx] = r * r + i * i;
-}
-
-__global__ void k_calc_log_mel(
-    const float * mel_data,
-    const int n_mel,
-    const float * max_val,
-    float * log_mel
-) {
-    auto x = blockIdx.x * blockDim.x + threadIdx.x;
-    if (x >= n_mel) return;
-
-    float val = mel_data[x];
-
-    constexpr float e = 1e-10f;
-    if (val < e) val = e;
-
-    val = log10(val);
-
-    const float max = log10(*max_val) - 8.f;
-    if (val < max) val = max;
-
-    log_mel[x] = (val + 4) / 4;
-}
-
-void fill_stft_input(
-    const float * padded_samples,
-    int n_frames,
-    const float * hann_window,
-    float * stft_in,
-    cudaStream_t stream
-) {
-    dim3 block(WHISPER_N_FFT, 1);
-    dim3 grid(1, n_frames);
-
-    k_fill_stft_input<<<grid, block, 0, stream>>>(padded_samples, n_frames, hann_window, stft_in);
-}
-
-void calc_magnitudes(
-    const cuComplex * stft_out,
-    int n_frames,
-    float * magnitudes,
-    cudaStream_t stream
-) {
-    dim3 block(WHISPER_N_FFT_HALF, 1);
-    dim3 grid(1, n_frames);
-    k_calc_magnitudes<<<grid, block, 0, stream>>>(stft_out, n_frames, magnitudes);
-}
-
-constexpr auto LOG_MEL_PREFIX_SIZE = 256;
-
-void calc_log_mel(
-    const float * mel_data,
-    int n_mel,
-    void * tempStorage,
-    int tempStorageSize,
-    float * log_mel,
-    cudaStream_t stream
-) {
-    float * max_val = reinterpret_cast<float *>(tempStorage);
-    void * maxTemp = reinterpret_cast<char*>(tempStorage) + LOG_MEL_PREFIX_SIZE;
-
-    size_t nbytes = size_t(tempStorageSize - LOG_MEL_PREFIX_SIZE);
-    cub::DeviceReduce::Max(maxTemp, nbytes, mel_data, max_val, n_mel, stream);
-
-    int block = 256;
-    int grid = (n_mel + block - 1) / block;
-
-    k_calc_log_mel<<<grid, block, 0, stream>>>(mel_data, n_mel, max_val, log_mel);
-}
-
-class mel_calc_cuda : public whisper_mel_calc {
-    const int m_n_mel;
-
-    ggml_backend_t m_backend = nullptr;
-    int m_device = -1;
-
-    cudaStream_t m_stream = nullptr;
-    cublasHandle_t m_cublas_handle = nullptr;
-
-    float * m_hann_window = nullptr;
-
-    float * m_filters = nullptr;
-
-    // max samples for which we have allocated memory for the temp working areas below (cufft, log_mel)
-    int m_n_max_samples = 0;
-
-    size_t m_cufft_workspace_size = 0;
-    void * m_cufft_workspace = nullptr;
-
-    size_t m_log_mel_temp_storage_size = 0;
-    void * m_log_mel_temp_storage = nullptr;
-public:
-    mel_calc_cuda(ggml_backend_t backend, const whisper_filters & filters)
-        : m_n_mel(filters.n_mel)
-        , m_backend(backend)
-    {
-        ggml_backend_cuda_context* cuda_ctx = (ggml_backend_cuda_context*)m_backend->context;
-        m_device = cuda_ctx->device;
-
-        if (ggml_cuda_info().devices[m_device].cc < 600) {
-            // we've only tesed on 6.0 and higher and we've had reports of crashes on 5.0:
-            // https://github.com/ggerganov/whisper.cpp/issues/2230
-            // to be safe forbid anything below 6.0
-            throw std::runtime_error("CUDA compute capability 6.0 or higher is required");
-        }
-
-        ggml_cuda_set_device(m_device);
-
-        if (filters.n_fft != WHISPER_N_FFT_HALF) {
-            throw std::invalid_argument("MelFilters n_frames must be WHISPER_N_FFT_HALF");
-        }
-        assert(filters.data.size() == filters.n_mel * WHISPER_N_FFT_HALF);
-
-        CUDA_CHECK(cudaStreamCreate(&m_stream));
-        CUBLAS_CHECK(cublasCreate(&m_cublas_handle));
-        CUBLAS_CHECK(cublasSetMathMode(m_cublas_handle, CUBLAS_TF32_TENSOR_OP_MATH));
-        CUBLAS_CHECK(cublasSetStream(m_cublas_handle, m_stream));
-
-        // create Hann window
-        {
-            auto hw = whisper_mel_calc::hann_window();
-            CUDA_CHECK(cudaMallocAsync(&m_hann_window, hw.len * sizeof(float), m_stream));
-            CUDA_CHECK(cudaMemcpyAsync(m_hann_window, hw.data, hw.len * sizeof(float), cudaMemcpyHostToDevice, m_stream));
-        }
-
-        // fill filters
-        {
-            auto& f = filters.data;
-            CUDA_CHECK(cudaMallocAsync(&m_filters, f.size() * sizeof(float), m_stream));
-            CUDA_CHECK(cudaMemcpyAsync(m_filters, f.data(), f.size() * sizeof(float), cudaMemcpyHostToDevice, m_stream));
-        }
-
-        // preallocate working areas enough for the most common cases (<= 30s)
-        ensure_working_areas(WHISPER_N_SAMPLES);
-    }
-
-    ~mel_calc_cuda() {
-        ggml_cuda_set_device(m_device);
-        CUDA_CHECK(cudaStreamSynchronize(m_stream));
-        CUDA_CHECK(cudaStreamDestroy(m_stream));
-        CUDA_CHECK(cudaFree(m_hann_window));
-        CUDA_CHECK(cudaFree(m_cufft_workspace));
-        CUDA_CHECK(cudaFree(m_filters));
-        CUDA_CHECK(cudaFree(m_log_mel_temp_storage));
-    }
-
-    void ensure_working_areas(int n_samples) {
-        if (n_samples <= m_n_max_samples) {
-            return;
-        }
-
-        const auto max_padded_samples = n_samples + WHISPER_N_SAMPLES + WHISPER_N_FFT;
-        const auto max_frames = 1 + (max_padded_samples - WHISPER_N_FFT) / WHISPER_HOP_LENGTH;
-
-        // cufft workspace
-        {
-            if (m_cufft_workspace) {
-                CUDA_CHECK(cudaFree(m_cufft_workspace));
-                m_cufft_workspace_size = 0;
-                m_cufft_workspace = nullptr;
-            }
-            CUFFT_CHECK(cufftEstimate1d(WHISPER_N_FFT, CUFFT_R2C, max_frames, &m_cufft_workspace_size));
-            CUDA_CHECK(cudaMallocAsync(&m_cufft_workspace, m_cufft_workspace_size, m_stream));
-        }
-
-        // device reduce working area
-        {
-            if (m_log_mel_temp_storage) {
-                CUDA_CHECK(cudaFree(m_log_mel_temp_storage));
-                m_log_mel_temp_storage_size = 0;
-                m_log_mel_temp_storage = nullptr;
-            }
-
-            const auto max_mels = 160;
-
-            size_t nbytes = 0;
-            float* temp = nullptr;
-            cub::DeviceReduce::Max(nullptr, nbytes, temp, temp, max_frames * max_mels);
-            m_log_mel_temp_storage_size = nbytes + LOG_MEL_PREFIX_SIZE;
-
-            CUDA_CHECK(cudaMallocAsync(&m_log_mel_temp_storage, m_log_mel_temp_storage_size, m_stream));
-        }
-
-        m_n_max_samples = n_samples;
-    }
-
-    virtual whisper_mel calculate(whisper_span<const float> samples, int /*n_threads*/) override {
-        ggml_cuda_set_device(m_device);
-        ensure_working_areas(samples.len);
-
-        const size_t mirror_pad = WHISPER_N_FFT / 2;
-        const size_t padded_size = samples.len + WHISPER_N_SAMPLES + WHISPER_N_FFT;
-
-        // pad
-        std::vector<float> padded_samples(padded_size);
-        std::reverse_copy(samples.data + 1, samples.data + 1 + mirror_pad, padded_samples.begin()); // reflect
-        std::copy(samples.data, samples.data + samples.len, padded_samples.begin() + mirror_pad); // copy
-
-        // fill the rest of the data
-        // it should canonically be mirrored at the end as well,
-        // but we just assume the last MEL_FRAME_SIZE/2 samples are zeros
-        std::fill(padded_samples.begin() + mirror_pad + samples.len, padded_samples.end(), 0.f);
-
-        const auto n_frames = 1 + (padded_samples.size() - WHISPER_N_FFT) / WHISPER_HOP_LENGTH;
-
-        float * cu_padded_samples = nullptr;
-        CUDA_CHECK(cudaMallocAsync(&cu_padded_samples, padded_samples.size() * sizeof(float), m_stream));
-        CUDA_CHECK(cudaMemcpyAsync(cu_padded_samples, padded_samples.data(), padded_samples.size() * sizeof(float), cudaMemcpyHostToDevice, m_stream));
-
-        float * stft_in = nullptr; // contiguous buffer for stft input
-        CUDA_CHECK(cudaMallocAsync(&stft_in, n_frames * WHISPER_N_FFT * sizeof(float), m_stream));
-
-        fill_stft_input(cu_padded_samples, int(n_frames), m_hann_window, stft_in, m_stream);
-
-        cufftComplex* stft_out;
-        CUDA_CHECK(cudaMallocAsync(&stft_out, n_frames * WHISPER_N_FFT_HALF * sizeof(cufftComplex), m_stream));
-
-        cufftHandle plan;
-        CUFFT_CHECK(cufftCreate(&plan));
-        CUFFT_CHECK(cufftSetAutoAllocation(plan, 0));
-        {
-            size_t waSize;
-            CUFFT_CHECK(cufftMakePlan1d(plan, WHISPER_N_FFT, CUFFT_R2C, int(n_frames), &waSize));
-            assert(waSize <= m_cufft_workspace_size);
-            CUFFT_CHECK(cufftSetWorkArea(plan, m_cufft_workspace));
-            CUFFT_CHECK(cufftSetStream(plan, m_stream));
-        }
-        CUFFT_CHECK(cufftExecR2C(plan, stft_in, stft_out));
-
-        const auto n_mag_frames = n_frames - 1; // drop last frame
-        float * magnitudes;
-        CUDA_CHECK(cudaMallocAsync(&magnitudes, n_mag_frames * WHISPER_N_FFT_HALF * sizeof(float), m_stream));
-        calc_magnitudes(stft_out, int(n_mag_frames), magnitudes, m_stream);
-
-        float * mel_data = nullptr;
-        CUDA_CHECK(cudaMallocAsync(&mel_data, m_n_mel * n_mag_frames * sizeof(float), m_stream));
-
-        const float fone = 1.0f, fzero = 0.0f;
-        CUBLAS_CHECK(cublasSgemm(m_cublas_handle, CUBLAS_OP_T, CUBLAS_OP_N,
-            int(n_mag_frames), m_n_mel, WHISPER_N_FFT_HALF,
-            &fone,
-            magnitudes, WHISPER_N_FFT_HALF,
-            m_filters, WHISPER_N_FFT_HALF,
-            &fzero,
-            mel_data, int(n_mag_frames)));
-
-        whisper_mel ret;
-        // Calculate semi-padded sample length to ensure compatibility
-        int n_len_org = 1 + int(samples.len + mirror_pad - WHISPER_N_FFT) / WHISPER_HOP_LENGTH;
-        whisper_mel_init(ret, m_backend, int(n_mag_frames), n_len_org, m_n_mel);
-        assert(ggml_nbytes(ret.tensor) == m_n_mel * n_mag_frames * sizeof(float));
-
-        float* log_mels = reinterpret_cast<float*>(ret.tensor->data);
-
-        calc_log_mel(
-            mel_data, int(m_n_mel * n_mag_frames),
-            m_log_mel_temp_storage , int(m_log_mel_temp_storage_size),
-            log_mels, m_stream);
-
-        CUDA_CHECK(cudaStreamSynchronize(m_stream));
-
-        // cleanup
-        CUFFT_CHECK(cufftDestroy(plan));
-        CUDA_CHECK(cudaFreeAsync(mel_data, m_stream));
-        CUDA_CHECK(cudaFreeAsync(magnitudes, m_stream));
-        CUDA_CHECK(cudaFreeAsync(stft_out, m_stream));
-        CUDA_CHECK(cudaFreeAsync(stft_in, m_stream));
-        CUDA_CHECK(cudaFreeAsync(cu_padded_samples, m_stream));
-
-        return ret;
-    }
-};
-
-}
-
-whisper_mel_calc * whisper_mel_calc_create_cuda(ggml_backend_t backend, const whisper_filters & filters) {
-    try {
-        return new mel_calc_cuda(backend, filters);
-    }
-    catch (...) {
-        // TODO: log error (but for this we would have to expose the log state to be accessible here)
-        return nullptr;
-    }
-}
diff --git a/whisper-mel-cuda.hpp b/whisper-mel-cuda.hpp
deleted file mode 100644 (file)
index 2acb650..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "whisper-mel.hpp"
-
-whisper_mel_calc * whisper_mel_calc_create_cuda(ggml_backend_t backend, const whisper_filters & filters);
diff --git a/whisper-mel.hpp b/whisper-mel.hpp
deleted file mode 100644 (file)
index f4210b4..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#pragma once
-#include "ggml-backend.h"
-#include <vector>
-
-struct whisper_mel {
-    int n_len_org = 0;
-
-    ggml_context * ctx = nullptr;
-    ggml_tensor * tensor = nullptr;
-    ggml_backend_buffer_t buffer = nullptr;
-};
-
-void whisper_mel_init(whisper_mel & mel, ggml_backend_t backend, int n_len, int n_len_org, int n_mel);
-
-void whisper_mel_free(whisper_mel & mel);
-
-struct whisper_filters {
-    int32_t n_mel;
-    int32_t n_fft;
-
-    std::vector<float> data;
-};
-
-template <typename T>
-struct whisper_span {
-    T * data;
-    int len;
-};
-
-struct whisper_mel_calc {
-    virtual ~whisper_mel_calc();
-    virtual whisper_mel calculate(whisper_span<const float> samples, int n_threads) = 0;
-    static whisper_span<const float> hann_window();
-};
diff --git a/whisper.cpp b/whisper.cpp
deleted file mode 100644 (file)
index d10083e..0000000
+++ /dev/null
@@ -1,7439 +0,0 @@
-#include "whisper.h"
-
-#ifdef WHISPER_USE_COREML
-#include "coreml/whisper-encoder.h"
-#endif
-
-#ifdef GGML_USE_METAL
-#include "ggml-metal.h"
-#endif
-
-#ifdef GGML_USE_CUDA
-#include "ggml-cuda.h"
-#include "whisper-mel-cuda.hpp"
-#endif
-
-#ifdef GGML_USE_SYCL
-#include "ggml-sycl.h"
-#endif
-
-#ifdef GGML_USE_BLAS
-#include "ggml-blas.h"
-#endif
-
-#ifdef WHISPER_USE_OPENVINO
-#include "openvino/whisper-openvino-encoder.h"
-#endif
-
-#include "ggml.h"
-#include "ggml-alloc.h"
-#include "ggml-backend.h"
-
-#include "whisper-mel.hpp"
-
-#include <atomic>
-#include <algorithm>
-#include <cassert>
-#define _USE_MATH_DEFINES
-#include <cmath>
-#include <cstdio>
-#include <cstdarg>
-#include <cstring>
-#include <fstream>
-#include <map>
-#include <set>
-#include <string>
-#include <thread>
-#include <vector>
-#include <regex>
-#include <random>
-#include <functional>
-#include <codecvt>
-
-#if defined(_MSC_VER)
-#pragma warning(disable: 4244 4267) // possible loss of data
-#endif
-
-#if defined(GGML_BIG_ENDIAN)
-#include <bit>
-
-template<typename T>
-static T byteswap(T value) {
-    return std::byteswap(value);
-}
-
-template<>
-float byteswap(float value) {
-    return std::bit_cast<float>(byteswap(std::bit_cast<std::uint32_t>(value)));
-}
-
-template<typename T>
-static void byteswap_tensor_data(ggml_tensor * tensor) {
-    T * datum = reinterpret_cast<T *>(tensor->data);
-    for (int i = 0; i < ggml_nelements(tensor); i++) {
-        datum[i] = byteswap(datum[i]);
-    }
-}
-
-static void byteswap_tensor(ggml_tensor * tensor) {
-    switch (tensor->type) {
-        case GGML_TYPE_I16: {
-            byteswap_tensor_data<int16_t>(tensor);
-            break;
-        }
-        case GGML_TYPE_F16: {
-            byteswap_tensor_data<ggml_fp16_t>(tensor);
-            break;
-        }
-        case GGML_TYPE_I32: {
-            byteswap_tensor_data<int32_t>(tensor);
-            break;
-        }
-        case GGML_TYPE_F32: {
-            byteswap_tensor_data<float>(tensor);
-            break;
-        }
-        default: { // GML_TYPE_I8
-            break;
-        }
-    }
-}
-
-#define BYTESWAP_VALUE(d) d = byteswap(d)
-#define BYTESWAP_FILTERS(f)            \
-    do {                              \
-        for (auto & datum : f.data) { \
-            datum = byteswap(datum);  \
-        }                             \
-    } while (0)
-#define BYTESWAP_TENSOR(t)       \
-    do {                         \
-        byteswap_tensor(t); \
-    } while (0)
-#else
-#define BYTESWAP_VALUE(d) do {} while (0)
-#define BYTESWAP_FILTERS(f) do {} while (0)
-#define BYTESWAP_TENSOR(t) do {} while (0)
-#endif
-
-#ifdef __GNUC__
-#ifdef __MINGW32__
-#define WHISPER_ATTRIBUTE_FORMAT(...) __attribute__((format(gnu_printf, __VA_ARGS__)))
-#else
-#define WHISPER_ATTRIBUTE_FORMAT(...) __attribute__((format(printf, __VA_ARGS__)))
-#endif
-#else
-#define WHISPER_ATTRIBUTE_FORMAT(...)
-#endif
-
-//
-// logging
-//
-
-WHISPER_ATTRIBUTE_FORMAT(2, 3)
-static void whisper_log_internal        (ggml_log_level level, const char * format, ...);
-static void whisper_log_callback_default(ggml_log_level level, const char * text, void * user_data);
-
-#define WHISPER_LOG_ERROR(...) whisper_log_internal(GGML_LOG_LEVEL_ERROR, __VA_ARGS__)
-#define WHISPER_LOG_WARN(...)  whisper_log_internal(GGML_LOG_LEVEL_WARN , __VA_ARGS__)
-#define WHISPER_LOG_INFO(...)  whisper_log_internal(GGML_LOG_LEVEL_INFO , __VA_ARGS__)
-
-// define this to enable verbose trace logging - useful for debugging purposes
-//#define WHISPER_DEBUG
-
-#if defined(WHISPER_DEBUG)
-#define WHISPER_LOG_DEBUG(...) whisper_log_internal(GGML_LOG_LEVEL_DEBUG, __VA_ARGS__)
-#else
-#define WHISPER_LOG_DEBUG(...)
-#endif
-
-#define WHISPER_ASSERT(x) \
-    do { \
-        if (!(x)) { \
-            WHISPER_LOG_ERROR("WHISPER_ASSERT: %s:%d: %s\n", __FILE__, __LINE__, #x); \
-            abort(); \
-        } \
-    } while (0)
-
-//#define WHISPER_USE_FLASH_FF
-#define WHISPER_MAX_DECODERS 8
-#define WHISPER_MAX_NODES 4096
-
-//
-// ggml helpers
-//
-
-static bool ggml_graph_compute_helper(
-          struct ggml_cgraph * graph,
-        std::vector<uint8_t> & buf,
-                         int   n_threads,
-         ggml_abort_callback   abort_callback,
-                        void * abort_callback_data) {
-    struct ggml_cplan plan = ggml_graph_plan(graph, n_threads);
-
-    plan.abort_callback      = abort_callback;
-    plan.abort_callback_data = abort_callback_data;
-
-    if (plan.work_size > 0) {
-        buf.resize(plan.work_size);
-        plan.work_data = buf.data();
-    }
-
-    return ggml_graph_compute(graph, &plan);
-}
-
-static bool ggml_graph_compute_helper(
-      ggml_backend_sched_t   sched,
-        struct ggml_cgraph * graph,
-                       int   n_threads) {
-
-    for (int i = 0; i < ggml_backend_sched_get_n_backends(sched); ++i) {
-        ggml_backend_t backend = ggml_backend_sched_get_backend(sched, i);
-        if (ggml_backend_is_cpu(backend)) {
-            ggml_backend_cpu_set_n_threads(backend, n_threads);
-        }
-#ifdef GGML_USE_BLAS
-        if (ggml_backend_is_blas(backend)) {
-            ggml_backend_blas_set_n_threads(backend, n_threads);
-        }
-#endif
-#ifdef GGML_USE_METAL
-        if (ggml_backend_is_metal(backend)) {
-            ggml_backend_metal_set_n_cb(backend, n_threads);
-        }
-#endif
-    }
-
-    bool t = ggml_backend_sched_graph_compute(sched, graph) == GGML_STATUS_SUCCESS;
-    ggml_backend_sched_reset(sched);
-    return t;
-}
-
-// faster matrix multiplications for tensors that do not have dimension 0 divisible by "pad"
-// the idea is to represent the original matrix multiplication:
-//
-//   Z = X @ Y
-//
-// with the sum of two matrix multiplications:
-//
-//   Z = (X_0 @ Y_0) + (X_1 @ Y_1)
-//
-// here X_0 and Y_0 are views of X and Y that have dimension 0 divisible by "pad"
-// and X_1 and Y_1 are the remaining views. X_1 and Y_1 end up being small matrices that can be processed with more
-// general-purpose kernels
-//
-static struct ggml_tensor * ggml_mul_mat_pad(struct ggml_context * ctx, struct ggml_tensor * x, struct ggml_tensor * y, int pad = 32) {
-    // use padding only if dimension 0 is at least 8 times larger than the padding
-    // else we won't get much benefit from the optimization
-    const int n_pad_req = 8;
-
-    if (x->ne[0] % pad == 0 || x->ne[0] / pad < n_pad_req) {
-        return ggml_mul_mat(ctx, x, y);
-    }
-
-    struct ggml_tensor * x_0 = ggml_view_3d(ctx, x, (x->ne[0]/pad)*pad, x->ne[1], x->ne[2], x->nb[1], x->nb[2], 0);
-    struct ggml_tensor * x_1 = ggml_view_3d(ctx, x,  x->ne[0]%pad,      x->ne[1], x->ne[2], x->nb[1], x->nb[2], x_0->ne[0]*x_0->nb[0]);
-
-    struct ggml_tensor * y_0 = ggml_view_3d(ctx, y, (y->ne[0]/pad)*pad, y->ne[1], y->ne[2], y->nb[1], y->nb[2], 0);
-    struct ggml_tensor * y_1 = ggml_view_3d(ctx, y,  y->ne[0]%pad,      y->ne[1], y->ne[2], y->nb[1], y->nb[2], y_0->ne[0]*y_0->nb[0]);
-
-    return ggml_add(ctx,
-            ggml_mul_mat(ctx, x_0, y_0),
-            ggml_mul_mat(ctx, x_1, y_1));
-}
-
-// TODO: check if other platforms can benefit from this optimization
-// TODO: CUDA is currently broken - seems ggml_mul_mat does not handle views correctly
-#if defined(GGML_USE_METAL)
-#define ggml_mul_mat ggml_mul_mat_pad
-#endif
-
-// available whisper models
-enum e_model {
-    MODEL_UNKNOWN,
-    MODEL_TINY,
-    MODEL_BASE,
-    MODEL_SMALL,
-    MODEL_MEDIUM,
-    MODEL_LARGE,
-};
-
-static const std::map<e_model, std::string> g_model_name = {
-    { MODEL_UNKNOWN,  "unknown"  },
-    { MODEL_TINY,     "tiny"     },
-    { MODEL_BASE,     "base"     },
-    { MODEL_SMALL,    "small"    },
-    { MODEL_MEDIUM,   "medium"   },
-    { MODEL_LARGE,    "large"    },
-};
-
-static const std::map<std::string, std::pair<int, std::string>> g_lang = {
-    { "en",  { 0,  "english",         } },
-    { "zh",  { 1,  "chinese",         } },
-    { "de",  { 2,  "german",          } },
-    { "es",  { 3,  "spanish",         } },
-    { "ru",  { 4,  "russian",         } },
-    { "ko",  { 5,  "korean",          } },
-    { "fr",  { 6,  "french",          } },
-    { "ja",  { 7,  "japanese",        } },
-    { "pt",  { 8,  "portuguese",      } },
-    { "tr",  { 9,  "turkish",         } },
-    { "pl",  { 10, "polish",          } },
-    { "ca",  { 11,  "catalan",        } },
-    { "nl",  { 12,  "dutch",          } },
-    { "ar",  { 13,  "arabic",         } },
-    { "sv",  { 14,  "swedish",        } },
-    { "it",  { 15,  "italian",        } },
-    { "id",  { 16,  "indonesian",     } },
-    { "hi",  { 17,  "hindi",          } },
-    { "fi",  { 18,  "finnish",        } },
-    { "vi",  { 19,  "vietnamese",     } },
-    { "he",  { 20,  "hebrew",         } },
-    { "uk",  { 21,  "ukrainian",      } },
-    { "el",  { 22,  "greek",          } },
-    { "ms",  { 23,  "malay",          } },
-    { "cs",  { 24,  "czech",          } },
-    { "ro",  { 25,  "romanian",       } },
-    { "da",  { 26,  "danish",         } },
-    { "hu",  { 27,  "hungarian",      } },
-    { "ta",  { 28,  "tamil",          } },
-    { "no",  { 29,  "norwegian",      } },
-    { "th",  { 30,  "thai",           } },
-    { "ur",  { 31,  "urdu",           } },
-    { "hr",  { 32,  "croatian",       } },
-    { "bg",  { 33,  "bulgarian",      } },
-    { "lt",  { 34,  "lithuanian",     } },
-    { "la",  { 35,  "latin",          } },
-    { "mi",  { 36,  "maori",          } },
-    { "ml",  { 37,  "malayalam",      } },
-    { "cy",  { 38,  "welsh",          } },
-    { "sk",  { 39,  "slovak",         } },
-    { "te",  { 40,  "telugu",         } },
-    { "fa",  { 41,  "persian",        } },
-    { "lv",  { 42,  "latvian",        } },
-    { "bn",  { 43,  "bengali",        } },
-    { "sr",  { 44,  "serbian",        } },
-    { "az",  { 45,  "azerbaijani",    } },
-    { "sl",  { 46,  "slovenian",      } },
-    { "kn",  { 47,  "kannada",        } },
-    { "et",  { 48,  "estonian",       } },
-    { "mk",  { 49,  "macedonian",     } },
-    { "br",  { 50,  "breton",         } },
-    { "eu",  { 51,  "basque",         } },
-    { "is",  { 52,  "icelandic",      } },
-    { "hy",  { 53,  "armenian",       } },
-    { "ne",  { 54,  "nepali",         } },
-    { "mn",  { 55,  "mongolian",      } },
-    { "bs",  { 56,  "bosnian",        } },
-    { "kk",  { 57,  "kazakh",         } },
-    { "sq",  { 58,  "albanian",       } },
-    { "sw",  { 59,  "swahili",        } },
-    { "gl",  { 60,  "galician",       } },
-    { "mr",  { 61,  "marathi",        } },
-    { "pa",  { 62,  "punjabi",        } },
-    { "si",  { 63,  "sinhala",        } },
-    { "km",  { 64,  "khmer",          } },
-    { "sn",  { 65,  "shona",          } },
-    { "yo",  { 66,  "yoruba",         } },
-    { "so",  { 67,  "somali",         } },
-    { "af",  { 68,  "afrikaans",      } },
-    { "oc",  { 69,  "occitan",        } },
-    { "ka",  { 70,  "georgian",       } },
-    { "be",  { 71,  "belarusian",     } },
-    { "tg",  { 72,  "tajik",          } },
-    { "sd",  { 73,  "sindhi",         } },
-    { "gu",  { 74,  "gujarati",       } },
-    { "am",  { 75,  "amharic",        } },
-    { "yi",  { 76,  "yiddish",        } },
-    { "lo",  { 77,  "lao",            } },
-    { "uz",  { 78,  "uzbek",          } },
-    { "fo",  { 79,  "faroese",        } },
-    { "ht",  { 80,  "haitian creole", } },
-    { "ps",  { 81,  "pashto",         } },
-    { "tk",  { 82,  "turkmen",        } },
-    { "nn",  { 83,  "nynorsk",        } },
-    { "mt",  { 84,  "maltese",        } },
-    { "sa",  { 85,  "sanskrit",       } },
-    { "lb",  { 86,  "luxembourgish",  } },
-    { "my",  { 87,  "myanmar",        } },
-    { "bo",  { 88,  "tibetan",        } },
-    { "tl",  { 89,  "tagalog",        } },
-    { "mg",  { 90,  "malagasy",       } },
-    { "as",  { 91,  "assamese",       } },
-    { "tt",  { 92,  "tatar",          } },
-    { "haw", { 93,  "hawaiian",       } },
-    { "ln",  { 94,  "lingala",        } },
-    { "ha",  { 95,  "hausa",          } },
-    { "ba",  { 96,  "bashkir",        } },
-    { "jw",  { 97,  "javanese",       } },
-    { "su",  { 98,  "sundanese",      } },
-    { "yue", { 99,  "cantonese",      } },
-};
-
-// [EXPERIMENTAL] Token-level timestamps with DTW
-static const whisper_ahead g_aheads_tiny_en[]   = { {1, 0}, {2, 0}, {2, 5}, {3, 0}, {3, 1}, {3, 2}, {3, 3}, {3, 4} };
-static const whisper_ahead g_aheads_tiny[]      = { {2, 2}, {3, 0}, {3, 2}, {3, 3}, {3, 4}, {3, 5} };
-static const whisper_ahead g_aheads_base_en[]   = { {3, 3}, {4, 7}, {5, 1}, {5, 5}, {5, 7} };
-static const whisper_ahead g_aheads_base[]      = { {3, 1}, {4, 2}, {4, 3}, {4, 7}, {5, 1}, {5, 2}, {5, 4}, {5, 6} };
-static const whisper_ahead g_aheads_small_en[]  = { {6, 6}, {7, 0}, {7, 3}, {7, 8}, {8, 2}, {8, 5}, {8, 7}, {9, 0}, {9, 4}, {9, 8}, {9, 10}, {10, 0}, {10, 1}, {10, 2}, {10, 3}, {10, 6}, {10, 11}, {11, 2}, {11, 4} };
-static const whisper_ahead g_aheads_small[]     = { {5, 3}, {5, 9}, {8, 0}, {8, 4}, {8, 7}, {8, 8}, {9, 0}, {9, 7}, {9, 9}, {10, 5} };
-static const whisper_ahead g_aheads_medium_en[] = { {11, 4}, {14, 1}, {14, 12}, {14, 14}, {15, 4}, {16, 0}, {16, 4}, {16, 9}, {17, 12}, {17, 14}, {18, 7}, {18, 10}, {18, 15}, {20, 0}, {20, 3}, {20, 9}, {20, 14}, {21, 12} };
-static const whisper_ahead g_aheads_medium[]    = { {13, 15}, {15, 4}, {15, 15}, {16, 1}, {20, 0}, {23, 4} };
-static const whisper_ahead g_aheads_large_v1[]  = { {9, 19}, {11, 2}, {11, 4}, {11, 17}, {22, 7}, {22, 11}, {22, 17}, {23, 2}, {23, 15} };
-static const whisper_ahead g_aheads_large_v2[]  = { {10, 12}, {13, 17}, {16, 11}, {16, 12}, {16, 13}, {17, 15}, {17, 16}, {18, 4}, {18, 11}, {18, 19}, {19, 11}, {21, 2}, {21, 3}, {22, 3}, {22, 9}, {22, 12}, {23, 5}, {23, 7}, {23, 13}, {25, 5}, {26, 1}, {26, 12}, {27, 15} };
-static const whisper_ahead g_aheads_large_v3[]  = { {7, 0}, {10, 17}, {12, 18}, {13, 12}, {16, 1}, {17, 14}, {19, 11}, {21, 4}, {24, 1}, {25, 6} };
-
-static const std::map<whisper_alignment_heads_preset, whisper_aheads> g_aheads {
-    { WHISPER_AHEADS_TINY_EN,   {  8, g_aheads_tiny_en   } },
-    { WHISPER_AHEADS_TINY,      {  6, g_aheads_tiny      } },
-    { WHISPER_AHEADS_BASE_EN,   {  5, g_aheads_base_en   } },
-    { WHISPER_AHEADS_BASE,      {  8, g_aheads_base      } },
-    { WHISPER_AHEADS_SMALL_EN,  { 19, g_aheads_small_en  } },
-    { WHISPER_AHEADS_SMALL,     { 10, g_aheads_small     } },
-    { WHISPER_AHEADS_MEDIUM_EN, { 18, g_aheads_medium_en } },
-    { WHISPER_AHEADS_MEDIUM,    {  6, g_aheads_medium    } },
-    { WHISPER_AHEADS_LARGE_V1,  {  9, g_aheads_large_v1  } },
-    { WHISPER_AHEADS_LARGE_V2,  { 23, g_aheads_large_v2  } },
-    { WHISPER_AHEADS_LARGE_V3,  { 10, g_aheads_large_v3  } },
-};
-
-static std::vector<uint32_t> get_alignment_heads_by_layer(const whisper_context_params & cparams, int il, int32_t n_text_layer, int32_t n_head);
-
-struct whisper_vocab {
-    using id    = int32_t;
-    using token = std::string;
-
-    int n_vocab = 51864;
-
-    std::map<token, id> token_to_id;
-    std::map<id, token> id_to_token;
-
-    // reference: https://github.com/openai/whisper/blob/248b6cb124225dd263bb9bd32d060b6517e067f8/whisper/tokenizer.py#L334-L349
-    id token_eot        = 50256;
-    id token_sot        = 50257;
-    // task tokens (used only for multilingual models)
-    id token_translate  = 50357;
-    id token_transcribe = 50358;
-    // other special tokens
-    id token_solm       = 50359; // [TDRZ] used by tinydiarize models to indicate speaker turn
-    id token_prev       = 50360;
-    id token_nosp       = 50361;
-    id token_not        = 50362; // no timestamps
-    id token_beg        = 50363; // begin timestamps
-
-    bool is_multilingual() const {
-        return n_vocab >= 51865;
-    }
-
-    int num_languages() const {
-        return n_vocab - 51765 - (is_multilingual() ? 1 : 0);
-    }
-};
-
-struct whisper_segment {
-    int64_t t0;
-    int64_t t1;
-
-    std::string text;
-
-    std::vector<whisper_token_data> tokens;
-
-    bool speaker_turn_next;
-};
-
-struct whisper_batch {
-    int32_t n_tokens;
-
-    whisper_token  *  token;
-    whisper_pos    *  pos;
-    int32_t        *  n_seq_id; // always 1, here for consistency with llama.cpp
-    whisper_seq_id ** seq_id;   // null terminated
-    int8_t         *  logits;
-};
-
-static struct whisper_batch whisper_batch_init(int32_t n_tokens, int32_t n_seq_max) {
-    whisper_batch batch = { 0, nullptr, nullptr, nullptr, nullptr, nullptr, };
-
-    batch.token    = (whisper_token *  ) malloc(sizeof(whisper_token)    * (n_tokens));
-    batch.pos      = (whisper_pos *)     malloc(sizeof(whisper_pos)      * (n_tokens));
-    batch.n_seq_id = (int32_t *)         malloc(sizeof(int32_t)          * (n_tokens));
-    batch.seq_id   = (whisper_seq_id **) malloc(sizeof(whisper_seq_id *) * (n_tokens + 1));
-    for (int i = 0; i < n_tokens; ++i) {
-        batch.seq_id[i] = (whisper_seq_id *) malloc(sizeof(whisper_seq_id)   * n_seq_max);
-    }
-    batch.seq_id[n_tokens] = nullptr;
-    batch.logits   = (int8_t *)          malloc(sizeof(int8_t)           * n_tokens);
-
-    return batch;
-}
-
-static void whisper_batch_free(struct whisper_batch batch) {
-    if (batch.token)    free(batch.token);
-    if (batch.pos)      free(batch.pos);
-    if (batch.n_seq_id) free(batch.n_seq_id);
-    if (batch.seq_id) {
-        for (int i = 0; batch.seq_id[i]; ++i) {
-            free(batch.seq_id[i]);
-        }
-        free(batch.seq_id);
-    }
-    if (batch.logits)   free(batch.logits);
-}
-
-static void whisper_batch_prep_legacy(whisper_batch & batch, const whisper_token * tokens, int n_tokens, int n_past, int seq_id) {
-    batch.n_tokens = n_tokens;
-    for (int i = 0; i < n_tokens; ++i) {
-        if (tokens) {
-            batch.token[i] = tokens[i];
-        }
-        batch.pos     [i]    = n_past + i;
-        batch.n_seq_id[i]    = 1;
-        batch.seq_id  [i][0] = seq_id;
-        batch.logits  [i]    = 0;
-    }
-    batch.logits[n_tokens - 1] = 1;
-}
-
-// replace std::pair by using customized pair struct (reason: std::pair is very slow)
-template<typename A, typename B>
-struct whisper_pair {
-    A first;
-    B second;
-
-    // Define a constructor that takes two arguments.
-    whisper_pair(const A& a, const B& b) : first(a), second(b) {}
-    // Define a constructor that takes no argument.
-    whisper_pair() : first(A()), second(B()) {}
-};
-
-// ggml_backend_sched wrapper for whisper usage
-struct whisper_sched {
-    ggml_backend_sched_t sched = nullptr;
-
-    std::vector<uint8_t> meta;
-};
-
-static size_t whisper_sched_size(struct whisper_sched & allocr) {
-    size_t size = allocr.meta.size();
-    for (int i = 0; i < ggml_backend_sched_get_n_backends(allocr.sched); ++i) {
-        ggml_backend_t backend = ggml_backend_sched_get_backend(allocr.sched, i);
-        size += ggml_backend_sched_get_buffer_size(allocr.sched, backend);
-    }
-    return size;
-}
-
-// measure the memory usage of a graph and prepare the allocr's internal data buffer
-static bool whisper_sched_graph_init(struct whisper_sched & allocr, std::vector<ggml_backend_t> backends, std::function<struct ggml_cgraph *()> && get_graph) {
-    auto & sched = allocr.sched;
-    auto & meta  = allocr.meta;
-
-    sched = ggml_backend_sched_new(backends.data(), nullptr, backends.size(), WHISPER_MAX_NODES, false);
-
-    meta.resize(ggml_tensor_overhead()*WHISPER_MAX_NODES + ggml_graph_overhead());
-
-    // since there are dependencies between the different graphs,
-    // we need to allocate them instead of only reserving to get the correct compute buffer size
-    if (!ggml_backend_sched_alloc_graph(sched, get_graph())) {
-        // failed to allocate the compute buffer
-        WHISPER_LOG_ERROR("%s: failed to allocate the compute buffer\n", __func__);
-        return false;
-    }
-
-    ggml_backend_sched_reset(sched);
-
-    return true;
-}
-
-// medium
-// hparams: {
-// 'n_mels': 80,
-// 'n_vocab': 51864,
-// 'n_audio_ctx': 1500,
-// 'n_audio_state': 1024,
-// 'n_audio_head': 16,
-// 'n_audio_layer': 24,
-// 'n_text_ctx': 448,
-// 'n_text_state': 1024,
-// 'n_text_head': 16,
-// 'n_text_layer': 24
-// }
-//
-// default hparams (Whisper tiny)
-struct whisper_hparams {
-    int32_t n_vocab       = 51864;
-    int32_t n_audio_ctx   = 1500;
-    int32_t n_audio_state = 384;
-    int32_t n_audio_head  = 6;
-    int32_t n_audio_layer = 4;
-    int32_t n_text_ctx    = 448;
-    int32_t n_text_state  = 384;
-    int32_t n_text_head   = 6;
-    int32_t n_text_layer  = 4;
-    int32_t n_mels        = 80;
-    int32_t ftype         = 1;
-    float   eps           = 1e-5f;
-};
-
-// audio encoding layer
-struct whisper_layer_encoder {
-    // encoder.blocks.*.attn_ln
-    struct ggml_tensor * attn_ln_0_w;
-    struct ggml_tensor * attn_ln_0_b;
-
-    // encoder.blocks.*.attn.out
-    struct ggml_tensor * attn_ln_1_w;
-    struct ggml_tensor * attn_ln_1_b;
-
-    // encoder.blocks.*.attn.query
-    struct ggml_tensor * attn_q_w;
-    struct ggml_tensor * attn_q_b;
-
-    // encoder.blocks.*.attn.key
-    struct ggml_tensor * attn_k_w;
-
-    // encoder.blocks.*.attn.value
-    struct ggml_tensor * attn_v_w;
-    struct ggml_tensor * attn_v_b;
-
-    // encoder.blocks.*.mlp_ln
-    struct ggml_tensor * mlp_ln_w;
-    struct ggml_tensor * mlp_ln_b;
-
-    // encoder.blocks.*.mlp.0
-    struct ggml_tensor * mlp_0_w;
-    struct ggml_tensor * mlp_0_b;
-
-    // encoder.blocks.*.mlp.2
-    struct ggml_tensor * mlp_1_w;
-    struct ggml_tensor * mlp_1_b;
-};
-
-// token decoding layer
-struct whisper_layer_decoder {
-    // decoder.blocks.*.attn_ln
-    struct ggml_tensor * attn_ln_0_w;
-    struct ggml_tensor * attn_ln_0_b;
-
-    // decoder.blocks.*.attn.out
-    struct ggml_tensor * attn_ln_1_w;
-    struct ggml_tensor * attn_ln_1_b;
-
-    // decoder.blocks.*.attn.query
-    struct ggml_tensor * attn_q_w;
-    struct ggml_tensor * attn_q_b;
-
-    // decoder.blocks.*.attn.key
-    struct ggml_tensor * attn_k_w;
-
-    // decoder.blocks.*.attn.value
-    struct ggml_tensor * attn_v_w;
-    struct ggml_tensor * attn_v_b;
-
-    // decoder.blocks.*.cross_attn_ln
-    struct ggml_tensor * cross_attn_ln_0_w;
-    struct ggml_tensor * cross_attn_ln_0_b;
-
-    // decoder.blocks.*.cross_attn.out
-    struct ggml_tensor * cross_attn_ln_1_w;
-    struct ggml_tensor * cross_attn_ln_1_b;
-
-    // decoder.blocks.*.cross_attn.query
-    struct ggml_tensor * cross_attn_q_w;
-    struct ggml_tensor * cross_attn_q_b;
-
-    // decoder.blocks.*.cross_attn.key
-    struct ggml_tensor * cross_attn_k_w;
-
-    // decoder.blocks.*.cross_attn.value
-    struct ggml_tensor * cross_attn_v_w;
-    struct ggml_tensor * cross_attn_v_b;
-
-    // decoder.blocks.*.mlp_ln
-    struct ggml_tensor * mlp_ln_w;
-    struct ggml_tensor * mlp_ln_b;
-
-    // decoder.blocks.*.mlp.0
-    struct ggml_tensor * mlp_0_w;
-    struct ggml_tensor * mlp_0_b;
-
-    // decoder.blocks.*.mlp.2
-    struct ggml_tensor * mlp_1_w;
-    struct ggml_tensor * mlp_1_b;
-};
-
-struct whisper_kv_cell {
-    whisper_pos pos = -1;
-
-    std::set<whisper_seq_id> seq_id;
-
-    bool has_seq_id(const whisper_seq_id & id) const {
-        return seq_id.find(id) != seq_id.end();
-    }
-};
-
-struct whisper_kv_cache {
-    uint32_t head = 0;
-    uint32_t size = 0;
-
-    // computed before each graph build
-    uint32_t n = 0;
-
-    std::vector<whisper_kv_cell> cells;
-
-    struct ggml_tensor * k;
-    struct ggml_tensor * v;
-
-    struct ggml_context * ctx = nullptr;
-
-    ggml_backend_buffer_t buffer = nullptr;
-};
-
-struct whisper_model {
-    e_model type = MODEL_UNKNOWN;
-
-    whisper_hparams hparams;
-    whisper_filters filters;
-
-    // encoder.positional_embedding
-    struct ggml_tensor * e_pe;
-
-    // encoder.conv1
-    struct ggml_tensor * e_conv_1_w;
-    struct ggml_tensor * e_conv_1_b;
-
-    // encoder.conv2
-    struct ggml_tensor * e_conv_2_w;
-    struct ggml_tensor * e_conv_2_b;
-
-    // encoder.ln_post
-    struct ggml_tensor * e_ln_w;
-    struct ggml_tensor * e_ln_b;
-
-    // decoder.positional_embedding
-    struct ggml_tensor * d_pe;
-
-    // decoder.token_embedding
-    struct ggml_tensor * d_te;
-
-    // decoder.ln
-    struct ggml_tensor * d_ln_w;
-    struct ggml_tensor * d_ln_b;
-
-    std::vector<whisper_layer_encoder> layers_encoder;
-    std::vector<whisper_layer_decoder> layers_decoder;
-
-    // ggml context that contains all the meta information about the model tensors
-    struct ggml_context * ctx = nullptr;
-
-    // the model backend data is read-only and can be shared between processors
-    ggml_backend_buffer_t buffer = nullptr;
-
-    // tensors
-    int n_loaded;
-    std::map<std::string, struct ggml_tensor *> tensors;
-};
-
-struct whisper_partial_utf8 {
-    uint32_t value;    // bit value so far (unshifted)
-    int      n_remain; // num bytes remaining; -1 indicates invalid sequence
-};
-
-struct whisper_grammar {
-    /*const*/ std::vector<std::vector<whisper_grammar_element>> rules;
-    std::vector<std::vector<const whisper_grammar_element *>>   stacks;
-
-    // buffer for partially generated UTF-8 sequence from accepted tokens
-    whisper_partial_utf8 partial_utf8;
-};
-
-struct whisper_grammar_candidate {
-    whisper_token          id;
-    const uint32_t       * code_points;
-    whisper_partial_utf8   partial_utf8;
-};
-
-struct whisper_sequence {
-    std::vector<whisper_token_data> tokens;
-
-    // the accumulated transcription in the current iteration (used to truncate the tokens array)
-    int result_len;
-
-    double sum_logprobs_all; // the sum of the log probabilities of the tokens
-    double sum_logprobs;     // the sum of the log probabilities of the tokens (first result_len tokens)
-    double avg_logprobs;     // the average log probability of the tokens
-    double entropy;          // the entropy of the tokens
-    double score;            // likelihood rank score
-};
-
-// TAGS: WHISPER_DECODER_INIT
-struct whisper_decoder {
-    // the currently generated sequence of tokens
-    whisper_sequence sequence;
-
-    // grammar parse state of generated sequence of tokens
-    whisper_grammar  grammar;
-
-    int i_batch;    // the index of the token in the current batch
-    int seek_delta; // the window shift found so far based on the decoded timestamp tokens
-
-    bool failed;    // has the current segment failed to decode?
-    bool completed; // has the decoder completed the current segment?
-    bool has_ts;    // have we already sampled a non-beg timestamp token for the current segment?
-
-    // new token probs, logits and logprobs after the last whisper_decode (1-dimensional array: [n_vocab])
-    std::vector<float> probs;
-    std::vector<float> logits;
-    std::vector<float> logprobs;
-
-    // work container used to avoid memory allocations
-    std::vector<whisper_pair<double, whisper_vocab::id>> logits_id;
-
-    mutable std::mt19937 rng; // used for sampling at t > 0.0
-};
-
-// [EXPERIMENTAL] Token-level timestamps with DTW
-struct whisper_aheads_masks {
-    std::vector<struct ggml_tensor *> m;    // One mask per text layer.
-    struct ggml_context * ctx = nullptr;
-    ggml_backend_buffer_t buffer = nullptr;
-};
-
-struct whisper_state {
-    int64_t t_sample_us = 0;
-    int64_t t_encode_us = 0;
-    int64_t t_decode_us = 0;
-    int64_t t_batchd_us = 0;
-    int64_t t_prompt_us = 0;
-    int64_t t_mel_us = 0;
-
-    int32_t n_sample = 0; // number of tokens sampled
-    int32_t n_encode = 0; // number of encoder calls
-    int32_t n_decode = 0; // number of decoder calls with n_tokens == 1  (text-generation)
-    int32_t n_batchd = 0; // number of decoder calls with n_tokens <  16 (batch decoding)
-    int32_t n_prompt = 0; // number of decoder calls with n_tokens >  1  (prompt encoding)
-    int32_t n_fail_p = 0; // number of logprob threshold failures
-    int32_t n_fail_h = 0; // number of entropy threshold failures
-
-    // unified self-attention KV cache for all decoders
-    whisper_kv_cache kv_self;
-
-    // cross-attention KV cache for the decoders
-    // shared between all decoders
-    whisper_kv_cache kv_cross;
-
-    // padded buffer for flash-attention
-    whisper_kv_cache kv_pad;
-
-    whisper_mel mel;
-    whisper_mel_calc * mel_calc = nullptr;
-    whisper_mel_calc * mel_calc_fallback = nullptr;
-
-    whisper_batch batch;
-
-    whisper_decoder decoders[WHISPER_MAX_DECODERS];
-
-    std::vector<ggml_backend_t> backends;
-
-    // - stores meta info about the intermediate tensors into the `meta` buffers
-    whisper_sched sched_conv;
-    whisper_sched sched_encode;
-    whisper_sched sched_cross;
-    whisper_sched sched_decode;
-
-    // result of the encoder
-    struct ggml_tensor * embd_conv = nullptr;
-    struct ggml_tensor * embd_enc  = nullptr;
-
-    // helpers for GPU offloading
-    std::vector<float> inp_mask;
-
-    // decode output (2-dimensional array: [n_tokens][n_vocab])
-    std::vector<float> logits;
-
-    std::vector<whisper_segment> result_all;
-    std::vector<whisper_token>   prompt_past;
-
-    int lang_id = 0; // english by default
-
-    std::string path_model; // populated by whisper_init_from_file_with_params()
-
-#ifdef WHISPER_USE_COREML
-    whisper_coreml_context * ctx_coreml = nullptr;
-#endif
-
-#ifdef WHISPER_USE_OPENVINO
-    whisper_openvino_context * ctx_openvino = nullptr;
-#endif
-
-    // [EXPERIMENTAL] token-level timestamps data
-    int64_t t_beg  = 0;
-    int64_t t_last = 0;
-
-    whisper_token tid_last;
-
-    std::vector<float> energy; // PCM signal energy
-
-    // [EXPERIMENTAL] Token-level timestamps with DTW
-    whisper_aheads_masks aheads_masks;
-    ggml_tensor * aheads_cross_QKs = nullptr;
-    std::vector<float> aheads_cross_QKs_data;
-
-    // [EXPERIMENTAL] speed-up techniques
-    int32_t exp_n_audio_ctx = 0; // 0 - use default
-};
-
-struct whisper_context {
-    int64_t t_load_us  = 0;
-    int64_t t_start_us = 0;
-
-    ggml_type wtype = ggml_type::GGML_TYPE_F16; // weight type (FP32 / FP16 / QX)
-    ggml_type itype = ggml_type::GGML_TYPE_F16; // intermediate type (FP32 or FP16)
-
-    whisper_context_params params;
-
-    whisper_model model;
-    whisper_vocab vocab;
-
-    whisper_state * state = nullptr;
-
-    std::string path_model; // populated by whisper_init_from_file_with_params()
-};
-
-struct whisper_global {
-    // We save the log callback globally
-    ggml_log_callback log_callback = whisper_log_callback_default;
-    void * log_callback_user_data = nullptr;
-};
-
-static whisper_global g_state;
-
-template<typename T>
-static void read_safe(whisper_model_loader * loader, T & dest) {
-    loader->read(loader->context, &dest, sizeof(T));
-    BYTESWAP_VALUE(dest);
-}
-
-static bool whisper_kv_cache_init(
-             struct whisper_kv_cache & cache,
-                      ggml_backend_t   backend,
-                           ggml_type   wtype,
-                             int64_t   n_text_state,
-                             int64_t   n_text_layer,
-                                 int   n_ctx) {
-    const int64_t n_mem      = n_text_layer*n_ctx;
-    const int64_t n_elements = n_text_state*n_mem;
-
-    struct ggml_init_params params = {
-        /*.mem_size   =*/ 2*ggml_tensor_overhead(),
-        /*.mem_buffer =*/ nullptr,
-        /*.no_alloc   =*/ true,
-    };
-
-    cache.head = 0;
-    cache.size = n_ctx;
-
-    cache.cells.clear();
-    cache.cells.resize(n_ctx);
-
-    cache.ctx = ggml_init(params);
-
-    if (!cache.ctx) {
-        WHISPER_LOG_ERROR("%s: failed to allocate memory for the kv cache context\n", __func__);
-        return false;
-    }
-
-    cache.k = ggml_new_tensor_1d(cache.ctx, wtype, n_elements);
-    cache.v = ggml_new_tensor_1d(cache.ctx, wtype, n_elements);
-
-    cache.buffer = ggml_backend_alloc_ctx_tensors(cache.ctx, backend);
-    if (!cache.buffer) {
-        WHISPER_LOG_ERROR("%s: failed to allocate memory for the kv cache\n", __func__);
-        return false;
-    }
-
-    ggml_backend_buffer_clear(cache.buffer, 0);
-
-    return true;
-}
-
-static void whisper_kv_cache_free(struct whisper_kv_cache & cache) {
-    ggml_free(cache.ctx);
-    ggml_backend_buffer_free(cache.buffer);
-    cache.ctx = nullptr;
-}
-
-static bool whisper_kv_cache_find_slot(
-           struct whisper_kv_cache & cache,
-        const struct whisper_batch & batch) {
-    const uint32_t n_ctx    = cache.size;
-    const uint32_t n_tokens = batch.n_tokens;
-
-    if (n_tokens > n_ctx) {
-        WHISPER_LOG_ERROR("%s: n_tokens=%d > n_ctx=%d\n", __func__, n_tokens, n_ctx);
-        return false;
-    }
-
-    uint32_t n_tested = 0;
-
-    while (true) {
-        if (cache.head + n_tokens > n_ctx) {
-            n_tested += n_ctx - cache.head;
-            cache.head = 0;
-            continue;
-        }
-
-        bool found = true;
-        for (uint32_t i = 0; i < n_tokens; i++) {
-            if (cache.cells[cache.head + i].pos >= 0) {
-                found = false;
-                cache.head += i + 1;
-                n_tested   += i + 1;
-                break;
-            }
-        }
-
-        if (found) {
-            break;
-        }
-
-        if (n_tested >= n_ctx) {
-            //WHISPER_LOG_ERROR("%s: failed to find a slot for %d tokens\n", __func__, n_tokens);
-            return false;
-        }
-    }
-
-    for (uint32_t i = 0; i < n_tokens; i++) {
-        cache.cells[cache.head + i].pos = batch.pos[i];
-
-        for (int32_t j = 0; j < batch.n_seq_id[i]; j++) {
-            cache.cells[cache.head + i].seq_id.insert(batch.seq_id[i][j]);
-        }
-    }
-
-    return true;
-}
-
-// find how many cells are currently in use
-static int32_t whisper_kv_cache_cell_max(const struct whisper_kv_cache & cache) {
-    for (uint32_t i = cache.size - 1; i > 0; --i) {
-        if (cache.cells[i].pos >= 0 && !cache.cells[i].seq_id.empty()) {
-            return i + 1;
-        }
-    }
-
-    return 1;
-}
-
-static void whisper_kv_cache_clear(struct whisper_kv_cache & cache) {
-    for (int32_t i = 0; i < (int32_t) cache.size; ++i) {
-        cache.cells[i].pos = -1;
-        cache.cells[i].seq_id.clear();
-    }
-    cache.head = 0;
-}
-
-static void whisper_kv_cache_seq_rm(
-        struct whisper_kv_cache & cache,
-                 whisper_seq_id   seq_id,
-                    whisper_pos   p0,
-                    whisper_pos   p1) {
-    uint32_t new_head = cache.size;
-
-    if (p0 < 0) p0 = 0;
-    if (p1 < 0) p1 = std::numeric_limits<whisper_pos>::max();
-
-    for (uint32_t i = 0; i < cache.size; ++i) {
-        if (cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) {
-            if (seq_id < 0) {
-                cache.cells[i].seq_id.clear();
-            } else if (cache.cells[i].has_seq_id(seq_id)) {
-                cache.cells[i].seq_id.erase(seq_id);
-            } else {
-                continue;
-            }
-            if (cache.cells[i].seq_id.empty()) {
-                cache.cells[i].pos = -1;
-                if (new_head == cache.size) new_head = i;
-            }
-        }
-    }
-
-    // If we freed up a slot, set head to it so searching can start there.
-    if (new_head != cache.size) cache.head = new_head;
-}
-
-static void whisper_kv_cache_seq_cp(
-        struct whisper_kv_cache & cache,
-                 whisper_seq_id   seq_id_src,
-                 whisper_seq_id   seq_id_dst,
-                    whisper_pos   p0,
-                    whisper_pos   p1) {
-    if (p0 < 0) p0 = 0;
-    if (p1 < 0) p1 = std::numeric_limits<whisper_pos>::max();
-
-    cache.head = 0;
-
-    for (uint32_t i = 0; i < cache.size; ++i) {
-        if (cache.cells[i].has_seq_id(seq_id_src) && cache.cells[i].pos >= p0 && cache.cells[i].pos < p1) {
-            cache.cells[i].seq_id.insert(seq_id_dst);
-        }
-    }
-}
-
-static uint32_t whisper_kv_cache_get_padding(const struct whisper_context & wctx) {
-    if (!wctx.params.flash_attn || !wctx.params.use_gpu) {
-        return 1u;
-    }
-
-#ifdef GGML_USE_METAL
-    return 32u;
-#endif
-
-#ifdef GGML_USE_CUDA
-    return 256u;
-#endif
-
-    return 1u;
-}
-
-// [EXPERIMENTAL] Token-level timestamps with DTW
-static bool aheads_masks_init(
-        const whisper_context_params & cparams,
-               const whisper_hparams & hparams,
-         struct whisper_aheads_masks & aheads_masks,
-                      ggml_backend_t   backend) {
-
-    const int32_t n_text_layer = hparams.n_text_layer;
-    const int32_t n_head = hparams.n_text_head;
-
-    // Sanity checks
-    if (cparams.dtw_aheads_preset == WHISPER_AHEADS_NONE) {
-        WHISPER_LOG_ERROR("%s: dtw_aheads_preset should be != DTW_AHEADS_NONE\n", __func__);
-        return false;
-    } else if (cparams.dtw_aheads_preset == WHISPER_AHEADS_N_TOP_MOST) {
-        if (cparams.dtw_n_top > n_text_layer || cparams.dtw_n_top <= 0) {
-            WHISPER_LOG_ERROR("%s: dtw_n_top must be between %d and %d for this model.", __func__, 1, n_text_layer);
-            return false;
-        }
-    } else {
-        const auto aheads = cparams.dtw_aheads_preset == WHISPER_AHEADS_CUSTOM ? cparams.dtw_aheads : g_aheads.at(cparams.dtw_aheads_preset);
-        if (cparams.dtw_aheads_preset == WHISPER_AHEADS_CUSTOM) {
-            if (aheads.n_heads == 0) {
-                WHISPER_LOG_ERROR("%s: dtw_aheads.n_heads should be > 0", __func__);
-                return false;
-            }
-            if (aheads.heads == NULL) {
-                WHISPER_LOG_ERROR("%s: dtw_aheads.heads unset", __func__);
-                return false;
-            }
-        }
-        for (size_t i = 0; i < aheads.n_heads; ++i) {
-            if (aheads.heads[i].n_text_layer >= n_text_layer) {
-                WHISPER_LOG_ERROR("%s: tried to set alignment head on text layer %d, but model only has %d text layers", __func__, aheads.heads[i].n_text_layer + 1, n_text_layer);
-                return false;
-            }
-            if (aheads.heads[i].n_text_layer < 0) {
-                WHISPER_LOG_ERROR("%s: tried to set alignment head on text layer < 0", __func__);
-                return false;
-            }
-            if (aheads.heads[i].n_head >= n_head) {
-                WHISPER_LOG_ERROR("%s: tried to set alignment head on head %d, but model only has %d heads", __func__, aheads.heads[i].n_head + 1, n_head);
-                return false;
-            }
-            if (aheads.heads[i].n_head < 0) {
-                WHISPER_LOG_ERROR("%s: tried to set alignment head on head < 0", __func__);
-                return false;
-            }
-        }
-    }
-
-    struct ggml_init_params params = {
-        /*.mem_size   =*/ (size_t) static_cast<size_t>(n_text_layer)*ggml_tensor_overhead(),
-        /*.mem_buffer =*/ nullptr,
-        /*.no_alloc   =*/ true,
-    };
-
-    aheads_masks.ctx = ggml_init(params);
-
-    if (!aheads_masks.ctx) {
-        WHISPER_LOG_ERROR("%s: failed to allocate memory for the aheads_masks context\n", __func__);
-        return false;
-    }
-
-    for (int64_t il = 0; il < n_text_layer; ++il) {
-        auto aheads = get_alignment_heads_by_layer(cparams, il, n_text_layer, n_head);
-        if (!aheads.empty()) {
-            aheads_masks.m.push_back(ggml_new_tensor_2d(aheads_masks.ctx, GGML_TYPE_F32, n_head, aheads.size()));
-        } else {
-            aheads_masks.m.push_back(nullptr);
-        }
-    }
-
-    aheads_masks.buffer = ggml_backend_alloc_ctx_tensors(aheads_masks.ctx, backend);
-    if (!aheads_masks.buffer) {
-        WHISPER_LOG_ERROR("%s: failed to allocate memory for aheads_masks\n", __func__);
-        return false;
-    }
-
-    // Set data on mask tensors
-    // Since this must be backend agnostic, we write our desired values on mask_data,
-    // and send it to backend with ggml_backend_tensor_set.
-    // Each mask in N_HEADS*N_ALIGNMENT_HEADS, one per text layer containing alignment
-    // heads. Each row of the mask "marks" one alignment head. E.g. if some text layer
-    // has a total of 10 heads and of those, heads 0,5,6 are alignment heads, the mask
-    // should read:
-    // 1 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 1 0 0 0
-    std::vector<float> mask_data;
-    for (int64_t il = 0; il < n_text_layer; ++il) {
-        if (aheads_masks.m[il] != nullptr) {
-            auto aheads = get_alignment_heads_by_layer(cparams, il, n_text_layer, n_head);
-
-            size_t data_size = aheads_masks.m[il]->ne[0] * aheads_masks.m[il]->ne[1];
-            size_t data_size_bytes = data_size * sizeof(float);
-            mask_data.resize(data_size);
-
-            std::fill(mask_data.begin(), mask_data.end(), 0);
-            for (size_t ih = 0; ih < aheads.size(); ++ih) {
-                size_t pos = (aheads[ih] + (ih * aheads_masks.m[il]->ne[0]));
-                mask_data[pos] = 1.0f;
-            }
-
-            ggml_backend_tensor_set(aheads_masks.m[il], mask_data.data(), 0, data_size_bytes);
-        }
-    }
-
-    if (aheads_masks.m.empty()) {
-        WHISPER_LOG_ERROR("%s: \n", __func__);
-        return false;
-    }
-
-    return true;
-}
-
-static void aheads_masks_free(struct whisper_aheads_masks & aheads_masks) {
-    ggml_free(aheads_masks.ctx);
-    ggml_backend_buffer_free(aheads_masks.buffer);
-    aheads_masks.ctx = nullptr;
-}
-
-static size_t aheads_masks_nbytes(struct whisper_aheads_masks & aheads_masks) {
-    size_t size = 0;
-    for (size_t i = 0; i < aheads_masks.m.size(); ++i) {
-        if (aheads_masks.m[i] != nullptr)
-            size += ggml_nbytes(aheads_masks.m[i]);
-    }
-    return size;
-}
-
-static ggml_backend_t whisper_backend_init_gpu(const whisper_context_params & params) {
-    ggml_backend_t result = NULL;
-
-#ifdef GGML_USE_CUDA
-    if (params.use_gpu) {
-        WHISPER_LOG_INFO("%s: using CUDA backend\n", __func__);
-        result = ggml_backend_cuda_init(params.gpu_device);
-        if (!result) {
-            WHISPER_LOG_ERROR("%s: ggml_backend_cuda_init() failed\n", __func__);
-        }
-    }
-#endif
-
-#ifdef GGML_USE_METAL
-    if (params.use_gpu) {
-        WHISPER_LOG_INFO("%s: using Metal backend\n", __func__);
-        ggml_backend_metal_log_set_callback(g_state.log_callback, g_state.log_callback_user_data);
-        result = ggml_backend_metal_init();
-        if (!result) {
-            WHISPER_LOG_ERROR("%s: ggml_backend_metal_init() failed\n", __func__);
-        } else if (!ggml_backend_metal_supports_family(result, 7)) {
-            WHISPER_LOG_ERROR("%s: Metal GPU does not support family 7 - falling back to CPU\n", __func__);
-            ggml_backend_free(result);
-            result = NULL;
-        }
-    }
-#endif
-
-#ifdef GGML_USE_SYCL
-    if (params.use_gpu) {
-        WHISPER_LOG_INFO("%s: using SYCL backend\n", __func__);
-        result = ggml_backend_sycl_init(params.gpu_device);
-        if (!result) {
-            WHISPER_LOG_ERROR("%s: ggml_backend_sycl_init() failed\n", __func__);
-        }
-    }
-#endif
-
-    return result;
-}
-
-static std::vector<ggml_backend_t> whisper_backend_init(const whisper_context_params & params) {
-    std::vector<ggml_backend_t> result;
-
-    ggml_backend_t backend_gpu = whisper_backend_init_gpu(params);
-
-    if (backend_gpu) {
-        result.push_back(backend_gpu);
-    }
-
-#ifdef GGML_USE_BLAS
-    {
-        WHISPER_LOG_INFO("%s: using BLAS backend\n", __func__);
-        ggml_backend_t backend_blas = ggml_backend_blas_init();
-        if (!backend_blas) {
-            WHISPER_LOG_ERROR("%s: ggml_backend_blas_init() failed\n", __func__);
-        } else {
-            result.push_back(backend_blas);
-        }
-    }
-#endif
-
-    GGML_UNUSED(params);
-
-    result.push_back(ggml_backend_cpu_init());
-
-    return result;
-}
-
-static ggml_backend_buffer_type_t whisper_default_buffer_type(const whisper_context_params & params) {
-    ggml_backend_buffer_type_t result = nullptr;
-
-    params.use_gpu || (result = ggml_backend_cpu_buffer_type());
-
-#ifdef GGML_USE_CUDA
-    result || (result = ggml_backend_cuda_buffer_type(params.gpu_device));
-#endif
-
-#ifdef GGML_USE_METAL
-    result || (result = ggml_backend_metal_buffer_type());
-#endif
-
-#ifdef GGML_USE_SYCL
-    result || (result = ggml_backend_sycl_buffer_type(params.gpu_device));
-#endif
-
-    result || (result = ggml_backend_cpu_buffer_type());
-
-    return result;
-}
-
-// load the model from a ggml file
-//
-// file format:
-//
-//   - hparams
-//   - pre-computed mel filters
-//   - vocab
-//   - weights
-//
-// see the convert-pt-to-ggml.py script for details
-//
-static bool whisper_model_load(struct whisper_model_loader * loader, whisper_context & wctx) {
-    WHISPER_LOG_INFO("%s: loading model\n", __func__);
-
-    const int64_t t_start_us = ggml_time_us();
-
-    wctx.t_start_us = t_start_us;
-
-    auto & model = wctx.model;
-    auto & vocab = wctx.vocab;
-
-    // verify magic
-    {
-        uint32_t magic;
-        read_safe(loader, magic);
-        if (magic != GGML_FILE_MAGIC) {
-            WHISPER_LOG_ERROR("%s: invalid model data (bad magic)\n", __func__);
-            return false;
-        }
-    }
-
-    //load hparams
-    {
-        auto & hparams = model.hparams;
-
-        read_safe(loader, hparams.n_vocab);
-        read_safe(loader, hparams.n_audio_ctx);
-        read_safe(loader, hparams.n_audio_state);
-        read_safe(loader, hparams.n_audio_head);
-        read_safe(loader, hparams.n_audio_layer);
-        read_safe(loader, hparams.n_text_ctx);
-        read_safe(loader, hparams.n_text_state);
-        read_safe(loader, hparams.n_text_head);
-        read_safe(loader, hparams.n_text_layer);
-        read_safe(loader, hparams.n_mels);
-        read_safe(loader, hparams.ftype);
-
-        assert(hparams.n_text_state == hparams.n_audio_state);
-
-        std::string mver = "";
-
-        if (hparams.n_audio_layer == 4) {
-            model.type = e_model::MODEL_TINY;
-        }
-
-        if (hparams.n_audio_layer == 6) {
-            model.type = e_model::MODEL_BASE;
-        }
-
-        if (hparams.n_audio_layer == 12) {
-            model.type = e_model::MODEL_SMALL;
-        }
-
-        if (hparams.n_audio_layer == 24) {
-            model.type = e_model::MODEL_MEDIUM;
-        }
-
-        if (hparams.n_audio_layer == 32) {
-            model.type = e_model::MODEL_LARGE;
-
-            if (hparams.n_vocab == 51866) {
-                mver = " v3";
-            }
-        }
-
-        const int32_t qntvr = hparams.ftype / GGML_QNT_VERSION_FACTOR;
-
-        hparams.ftype %= GGML_QNT_VERSION_FACTOR;
-
-        // for the big tensors, we have the option to store the data in 16-bit floats or quantized
-        // in order to save memory and also to speed up the computation
-        wctx.wtype = ggml_ftype_to_ggml_type((ggml_ftype) (model.hparams.ftype));
-        if (wctx.wtype == GGML_TYPE_COUNT) {
-            WHISPER_LOG_ERROR("%s: invalid model (bad ftype value %d)\n", __func__, model.hparams.ftype);
-            return false;
-        }
-
-        WHISPER_LOG_INFO("%s: n_vocab       = %d\n", __func__, hparams.n_vocab);
-        WHISPER_LOG_INFO("%s: n_audio_ctx   = %d\n", __func__, hparams.n_audio_ctx);
-        WHISPER_LOG_INFO("%s: n_audio_state = %d\n", __func__, hparams.n_audio_state);
-        WHISPER_LOG_INFO("%s: n_audio_head  = %d\n", __func__, hparams.n_audio_head);
-        WHISPER_LOG_INFO("%s: n_audio_layer = %d\n", __func__, hparams.n_audio_layer);
-        WHISPER_LOG_INFO("%s: n_text_ctx    = %d\n", __func__, hparams.n_text_ctx);
-        WHISPER_LOG_INFO("%s: n_text_state  = %d\n", __func__, hparams.n_text_state);
-        WHISPER_LOG_INFO("%s: n_text_head   = %d\n", __func__, hparams.n_text_head);
-        WHISPER_LOG_INFO("%s: n_text_layer  = %d\n", __func__, hparams.n_text_layer);
-        WHISPER_LOG_INFO("%s: n_mels        = %d\n", __func__, hparams.n_mels);
-        WHISPER_LOG_INFO("%s: ftype         = %d\n", __func__, model.hparams.ftype);
-        WHISPER_LOG_INFO("%s: qntvr         = %d\n", __func__, qntvr);
-        WHISPER_LOG_INFO("%s: type          = %d (%s%s)\n", __func__, model.type, g_model_name.at(model.type).c_str(), mver.c_str());
-    }
-
-    // load mel filters
-    {
-        auto & filters = wctx.model.filters;
-
-        read_safe(loader, filters.n_mel);
-        read_safe(loader, filters.n_fft);
-
-        filters.data.resize(filters.n_mel * filters.n_fft);
-        loader->read(loader->context, filters.data.data(), filters.data.size() * sizeof(float));
-        BYTESWAP_FILTERS(filters);
-    }
-
-    // load vocab
-    {
-        int32_t n_vocab = 0;
-        read_safe(loader, n_vocab);
-
-        //if (n_vocab != model.hparams.n_vocab) {
-        //    WHISPER_LOG_ERROR("%s: invalid model file '%s' (bad vocab size %d != %d)\n",
-        //            __func__, fname.c_str(), n_vocab, model.hparams.n_vocab);
-        //    return false;
-        //}
-
-        std::string word;
-        std::vector<char> tmp;
-
-        tmp.reserve(128);
-
-        for (int i = 0; i < n_vocab; i++) {
-            uint32_t len;
-            read_safe(loader, len);
-
-            if (len > 0) {
-                tmp.resize(len);
-                loader->read(loader->context, &tmp[0], tmp.size()); // read to buffer
-                word.assign(&tmp[0], tmp.size());
-            } else {
-                // seems like we have an empty-string token in multi-language models (i = 50256)
-                //WHISPER_LOG_WARN("%s: warning: empty-string token in vocab, i = %d\n", __func__, i);
-                word = "";
-            }
-
-            vocab.token_to_id[word] = i;
-            vocab.id_to_token[i] = word;
-
-            //printf("%s: vocab[%d] = '%s'\n", __func__, i, word.c_str());
-        }
-
-        vocab.n_vocab = model.hparams.n_vocab;
-        if (vocab.is_multilingual()) {
-            vocab.token_eot++;
-            vocab.token_sot++;
-
-            // account for variable number of language tokens
-            const int dt = vocab.num_languages() - 98;
-
-            vocab.token_translate  += dt;
-            vocab.token_transcribe += dt;
-            vocab.token_solm       += dt;
-            vocab.token_prev       += dt;
-            vocab.token_nosp       += dt;
-            vocab.token_not        += dt;
-            vocab.token_beg        += dt;
-        }
-
-        if (n_vocab < model.hparams.n_vocab) {
-            WHISPER_LOG_INFO("%s: adding %d extra tokens\n", __func__, model.hparams.n_vocab - n_vocab);
-            for (int i = n_vocab; i < model.hparams.n_vocab; i++) {
-                if (i > vocab.token_beg) {
-                    word = "[_TT_" + std::to_string(i - vocab.token_beg) + "]";
-                } else if (i == vocab.token_eot) {
-                    word = "[_EOT_]";
-                } else if (i == vocab.token_sot) {
-                    word = "[_SOT_]";
-                } else if (i == vocab.token_translate) {
-                    word = "[_TRANSLATE_]";
-                } else if (i == vocab.token_transcribe) {
-                    word = "[_TRANSCRIBE_]";
-                } else if (i == vocab.token_solm) {
-                    word = "[_SOLM_]";
-                } else if (i == vocab.token_prev) {
-                    word = "[_PREV_]";
-                } else if (i == vocab.token_nosp) {
-                    word = "[_NOSP_]";
-                } else if (i == vocab.token_not) {
-                    word = "[_NOT_]";
-                } else if (i == vocab.token_beg) {
-                    word = "[_BEG_]";
-                } else if (i > vocab.token_sot && i <= vocab.token_sot + vocab.num_languages()) {
-                    word = "[_LANG_" + std::string(whisper_lang_str(i - vocab.token_sot - 1)) + "]";
-                } else {
-                    word = "[_extra_token_" + std::to_string(i) + "]";
-                }
-                vocab.token_to_id[word] = i;
-                vocab.id_to_token[i] = word;
-            }
-        }
-
-        WHISPER_LOG_INFO("%s: n_langs       = %d\n", __func__, vocab.num_languages());
-    }
-
-    const ggml_type wtype = wctx.wtype;
-    const ggml_type vtype = wctx.wtype == GGML_TYPE_F32 ? GGML_TYPE_F32 : GGML_TYPE_F16; // conv type
-
-    // create the ggml context
-    {
-        const auto & hparams = model.hparams;
-
-        const int n_audio_layer = hparams.n_audio_layer;
-        const int n_text_layer  = hparams.n_text_layer;
-
-        const size_t n_tensors = 10 /* input */ + 15 + 15*n_audio_layer + 24*n_text_layer;
-
-        struct ggml_init_params params = {
-            /*.mem_size   =*/ n_tensors*ggml_tensor_overhead(),
-            /*.mem_buffer =*/ nullptr,
-            /*.no_alloc   =*/ true,
-        };
-
-        model.ctx = ggml_init(params);
-        if (!model.ctx) {
-            WHISPER_LOG_ERROR("%s: ggml_init() failed\n", __func__);
-            return false;
-        }
-    }
-
-    // prepare tensors for the weights
-    {
-        auto & ctx = model.ctx;
-
-        const auto & hparams = model.hparams;
-
-        const int n_vocab = hparams.n_vocab;
-
-        const int n_audio_ctx   = hparams.n_audio_ctx;
-        const int n_audio_state = hparams.n_audio_state;
-        const int n_audio_layer = hparams.n_audio_layer;
-
-        const int n_text_ctx   = hparams.n_text_ctx;
-        const int n_text_state = hparams.n_text_state;
-        const int n_text_layer = hparams.n_text_layer;
-
-        const int n_mels = hparams.n_mels;
-
-        model.layers_encoder.resize(n_audio_layer);
-        model.layers_decoder.resize(n_text_layer);
-
-        // encoder
-        {
-            model.e_pe = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_audio_state, n_audio_ctx);
-
-            model.e_conv_1_w     = ggml_new_tensor_3d(ctx, vtype,         3, n_mels,     n_audio_state);
-            model.e_conv_1_b     = ggml_new_tensor_2d(ctx, GGML_TYPE_F32,         1,     n_audio_state);
-
-            model.e_conv_2_w     = ggml_new_tensor_3d(ctx, vtype,         3, n_audio_state, n_audio_state);
-            model.e_conv_2_b     = ggml_new_tensor_2d(ctx, GGML_TYPE_F32,                1, n_audio_state);
-
-            model.e_ln_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state);
-            model.e_ln_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_audio_state);
-
-            // map by name
-            model.tensors["encoder.positional_embedding"] = model.e_pe;
-
-            model.tensors["encoder.conv1.weight"]         = model.e_conv_1_w;
-            model.tensors["encoder.conv1.bias"]           = model.e_conv_1_b;
-
-            model.tensors["encoder.conv2.weight"]         = model.e_conv_2_w;
-            model.tensors["encoder.conv2.bias"]           = model.e_conv_2_b;
-
-            model.tensors["encoder.ln_post.weight"]       = model.e_ln_w;
-            model.tensors["encoder.ln_post.bias"]         = model.e_ln_b;
-
-            for (int i = 0; i < n_audio_layer; ++i) {
-                auto & layer = model.layers_encoder[i];
-
-                layer.mlp_ln_w    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
-                layer.mlp_ln_b    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
-
-                layer.mlp_0_w     = ggml_new_tensor_2d(ctx, wtype,           n_audio_state, 4*n_audio_state);
-                layer.mlp_0_b     = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_audio_state);
-
-                layer.mlp_1_w     = ggml_new_tensor_2d(ctx, wtype,         4*n_audio_state, n_audio_state);
-                layer.mlp_1_b     = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
-
-                layer.attn_ln_0_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
-                layer.attn_ln_0_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
-
-                layer.attn_q_w    = ggml_new_tensor_2d(ctx, wtype,           n_audio_state, n_audio_state);
-                layer.attn_q_b    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
-
-                layer.attn_k_w    = ggml_new_tensor_2d(ctx, wtype,           n_audio_state, n_audio_state);
-
-                layer.attn_v_w    = ggml_new_tensor_2d(ctx, wtype,           n_audio_state, n_audio_state);
-                layer.attn_v_b    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
-
-                layer.attn_ln_1_w = ggml_new_tensor_2d(ctx, wtype,           n_audio_state, n_audio_state);
-                layer.attn_ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_audio_state);
-
-                // map by name
-                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp_ln.weight"]     = layer.mlp_ln_w;
-                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp_ln.bias"]       = layer.mlp_ln_b;
-
-                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.0.weight"]      = layer.mlp_0_w;
-                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.0.bias"]        = layer.mlp_0_b;
-
-                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.2.weight"]      = layer.mlp_1_w;
-                model.tensors["encoder.blocks." + std::to_string(i) + ".mlp.2.bias"]        = layer.mlp_1_b;
-
-                model.tensors["encoder.blocks." + std::to_string(i) + ".attn_ln.weight"]    = layer.attn_ln_0_w;
-                model.tensors["encoder.blocks." + std::to_string(i) + ".attn_ln.bias"]      = layer.attn_ln_0_b;
-
-                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.query.weight"] = layer.attn_q_w;
-                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.query.bias"]   = layer.attn_q_b;
-
-                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.key.weight"]   = layer.attn_k_w;
-
-                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.value.weight"] = layer.attn_v_w;
-                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.value.bias"]   = layer.attn_v_b;
-
-                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.out.weight"]   = layer.attn_ln_1_w;
-                model.tensors["encoder.blocks." + std::to_string(i) + ".attn.out.bias"]     = layer.attn_ln_1_b;
-            }
-        }
-
-        // decoder
-        {
-            model.d_pe   = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, n_text_state, n_text_ctx);
-
-            model.d_te   = ggml_new_tensor_2d(ctx, wtype,         n_text_state, n_vocab);
-
-            model.d_ln_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state);
-            model.d_ln_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, n_text_state);
-
-            // map by name
-            model.tensors["decoder.positional_embedding"]   = model.d_pe;
-
-            model.tensors["decoder.token_embedding.weight"] = model.d_te;
-
-            model.tensors["decoder.ln.weight"]              = model.d_ln_w;
-            model.tensors["decoder.ln.bias"]                = model.d_ln_b;
-
-            for (int i = 0; i < n_text_layer; ++i) {
-                auto & layer = model.layers_decoder[i];
-
-                layer.mlp_ln_w          = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-                layer.mlp_ln_b          = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-
-                layer.mlp_0_w           = ggml_new_tensor_2d(ctx, wtype,           n_text_state, 4*n_text_state);
-                layer.mlp_0_b           = ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 4*n_text_state);
-
-                layer.mlp_1_w           = ggml_new_tensor_2d(ctx, wtype,         4*n_text_state, n_text_state);
-                layer.mlp_1_b           = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-
-                layer.attn_ln_0_w       = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-                layer.attn_ln_0_b       = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-
-                layer.attn_q_w          = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
-                layer.attn_q_b          = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-
-                layer.attn_k_w          = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
-
-                layer.attn_v_w          = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
-                layer.attn_v_b          = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-
-                layer.attn_ln_1_w       = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
-                layer.attn_ln_1_b       = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-
-                layer.cross_attn_ln_0_w = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-                layer.cross_attn_ln_0_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-
-                layer.cross_attn_q_w    = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
-                layer.cross_attn_q_b    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-
-                layer.cross_attn_k_w    = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
-
-                layer.cross_attn_v_w    = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
-                layer.cross_attn_v_b    = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-
-                layer.cross_attn_ln_1_w = ggml_new_tensor_2d(ctx, wtype,           n_text_state, n_text_state);
-                layer.cross_attn_ln_1_b = ggml_new_tensor_1d(ctx, GGML_TYPE_F32,   n_text_state);
-
-                // map by name
-                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp_ln.weight"]           = layer.mlp_ln_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp_ln.bias"]             = layer.mlp_ln_b;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.0.weight"]            = layer.mlp_0_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.0.bias"]              = layer.mlp_0_b;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.2.weight"]            = layer.mlp_1_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".mlp.2.bias"]              = layer.mlp_1_b;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".attn_ln.weight"]          = layer.attn_ln_0_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".attn_ln.bias"]            = layer.attn_ln_0_b;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.query.weight"]       = layer.attn_q_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.query.bias"]         = layer.attn_q_b;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.key.weight"]         = layer.attn_k_w;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.value.weight"]       = layer.attn_v_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.value.bias"]         = layer.attn_v_b;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.out.weight"]         = layer.attn_ln_1_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".attn.out.bias"]           = layer.attn_ln_1_b;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn_ln.weight"]    = layer.cross_attn_ln_0_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn_ln.bias"]      = layer.cross_attn_ln_0_b;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.query.weight"] = layer.cross_attn_q_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.query.bias"]   = layer.cross_attn_q_b;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.key.weight"]   = layer.cross_attn_k_w;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.value.weight"] = layer.cross_attn_v_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.value.bias"]   = layer.cross_attn_v_b;
-
-                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.out.weight"]   = layer.cross_attn_ln_1_w;
-                model.tensors["decoder.blocks." + std::to_string(i) + ".cross_attn.out.bias"]     = layer.cross_attn_ln_1_b;
-            }
-        }
-    }
-
-    // allocate tensors in the backend buffers
-    model.buffer = ggml_backend_alloc_ctx_tensors_from_buft(model.ctx, whisper_default_buffer_type(wctx.params));
-    if (!model.buffer) {
-        WHISPER_LOG_ERROR("%s: failed to allocate memory for the model\n", __func__);
-        return false;
-    }
-
-    size_t size_main = ggml_backend_buffer_get_size(model.buffer);
-    WHISPER_LOG_INFO("%s: %8s total size = %8.2f MB\n", __func__, ggml_backend_buffer_name(model.buffer), size_main / 1e6);
-
-    // load weights
-    {
-        size_t total_size = 0;
-
-        model.n_loaded = 0;
-
-        std::vector<char> read_buf;
-
-        while (true) {
-            int32_t n_dims;
-            int32_t length;
-            int32_t ttype;
-
-            read_safe(loader, n_dims);
-            read_safe(loader, length);
-            read_safe(loader, ttype);
-
-            if (loader->eof(loader->context)) {
-                break;
-            }
-
-            int32_t nelements = 1;
-            int32_t ne[4] = { 1, 1, 1, 1 };
-            for (int i = 0; i < n_dims; ++i) {
-                read_safe(loader, ne[i]);
-                nelements *= ne[i];
-            }
-
-            std::string name;
-            std::vector<char> tmp(length); // create a buffer
-            loader->read(loader->context, &tmp[0], tmp.size()); // read to buffer
-            name.assign(&tmp[0], tmp.size());
-
-            if (model.tensors.find(name) == model.tensors.end()) {
-                WHISPER_LOG_ERROR("%s: unknown tensor '%s' in model file\n", __func__, name.data());
-                return false;
-            }
-
-            auto tensor = model.tensors[name.data()];
-
-            if (ggml_nelements(tensor) != nelements) {
-                WHISPER_LOG_ERROR("%s: tensor '%s' has wrong size in model file\n", __func__, name.data());
-                WHISPER_LOG_ERROR("%s: shape: [%d, %d, %d], expected: [%d, %d, %d]\n",
-                        __func__, ne[0], ne[1], ne[2], (int) tensor->ne[0], (int) tensor->ne[1], (int) tensor->ne[2]);
-                return false;
-            }
-
-            if (tensor->ne[0] != ne[0] || tensor->ne[1] != ne[1] || tensor->ne[2] != ne[2]) {
-                WHISPER_LOG_ERROR("%s: tensor '%s' has wrong shape in model file: got [%d, %d, %d], expected [%d, %d, %d]\n",
-                        __func__, name.data(), (int) tensor->ne[0], (int) tensor->ne[1], (int) tensor->ne[2], ne[0], ne[1], ne[2]);
-                return false;
-            }
-
-            const size_t bpe = ggml_type_size(ggml_type(ttype));
-
-            if ((nelements*bpe)/ggml_blck_size(tensor->type) != ggml_nbytes(tensor)) {
-                WHISPER_LOG_ERROR("%s: tensor '%s' has wrong size in model file: got %zu, expected %zu\n",
-                        __func__, name.data(), ggml_nbytes(tensor), nelements*bpe);
-                return false;
-            }
-
-            //ggml_backend_t backend = wctx.backend;
-
-            //printf("%s: [%5.5s] %s\n", __func__, ggml_backend_name(backend), name.c_str());
-
-            if (ggml_backend_buffer_is_host(model.buffer)) {
-                // for the CPU and Metal backend, we can read directly into the tensor
-                loader->read(loader->context, tensor->data, ggml_nbytes(tensor));
-                BYTESWAP_TENSOR(tensor);
-            } else {
-                // read into a temporary buffer first, then copy to device memory
-                read_buf.resize(ggml_nbytes(tensor));
-
-                loader->read(loader->context, read_buf.data(), read_buf.size());
-
-                ggml_backend_tensor_set(tensor, read_buf.data(), 0, ggml_nbytes(tensor));
-            }
-
-            //printf("%48s - [%5d, %5d, %5d], type = %6s, %6.2f MB\n", name.data(), ne[0], ne[1], ne[2], ggml_type_name((ggml_type) ttype), ggml_nbytes(tensor)/1e6);
-            total_size += ggml_nbytes(tensor);
-            model.n_loaded++;
-        }
-
-        WHISPER_LOG_INFO("%s: model size    = %7.2f MB\n", __func__, total_size/1e6);
-
-        if (model.n_loaded == 0) {
-            WHISPER_LOG_WARN("%s: WARN no tensors loaded from model file - assuming empty model for testing\n", __func__);
-        } else if (model.n_loaded != (int) model.tensors.size()) {
-            WHISPER_LOG_ERROR("%s: ERROR not all tensors loaded from model file - expected %zu, got %d\n", __func__, model.tensors.size(), model.n_loaded);
-            return false;
-        }
-    }
-
-    ggml_backend_buffer_set_usage(model.buffer, GGML_BACKEND_BUFFER_USAGE_WEIGHTS);
-
-    wctx.t_load_us = ggml_time_us() - t_start_us;
-
-    return true;
-}
-
-static bool whisper_encode_external(const whisper_state & wstate) {
-    GGML_UNUSED(wstate);
-
-#ifndef WHISPER_USE_COREML
-    const bool use_coreml = false;
-#else
-    const bool use_coreml = wstate.ctx_coreml != nullptr;
-#endif
-
-#ifndef WHISPER_USE_OPENVINO
-    const bool use_openvino = false;
-#else
-    const bool use_openvino = wstate.ctx_openvino != nullptr;
-#endif
-
-    return use_coreml || use_openvino;
-}
-
-static struct ggml_cgraph * whisper_build_graph_conv(
-        whisper_context & wctx,
-          whisper_state & wstate,
-              const int   mel_offset) {
-    const auto & model   = wctx.model;
-    const auto & hparams = model.hparams;
-
-    const int n_ctx   = wstate.exp_n_audio_ctx > 0 ? wstate.exp_n_audio_ctx : hparams.n_audio_ctx;
-    const int n_state = hparams.n_audio_state; GGML_UNUSED(n_state);
-
-    const int n_mels = hparams.n_mels;
-
-    struct ggml_init_params params = {
-        /*.mem_size   =*/ wstate.sched_conv.meta.size(),
-        /*.mem_buffer =*/ wstate.sched_conv.meta.data(),
-        /*.no_alloc   =*/ true,
-    };
-
-    struct ggml_context * ctx0 = ggml_init(params);
-
-    ggml_cgraph * gf = ggml_new_graph(ctx0);
-
-    GGML_ASSERT(wstate.mel.tensor);
-
-    ggml_tensor * mel_inp = wstate.mel.tensor;
-    ggml_set_input(mel_inp);
-
-    ggml_tensor * mel;
-    {
-        const int n_len = int(mel_inp->ne[0]);
-        const int out_s = 2 * n_ctx;
-        const int i0 = std::min(mel_offset, n_len);
-        const int i1 = std::min(mel_offset + out_s, n_len);
-        const int mel_s = i1 - i0;
-
-        assert(mel_inp->type == GGML_TYPE_F32);
-        assert(mel_inp->ne[1] == n_mels);
-
-        ggml_tensor * cur = ggml_view_2d(ctx0, mel_inp, out_s, n_mels, mel_inp->nb[1], ggml_row_size(mel_inp->type, i0));
-
-        if (mel_s < out_s) {
-            mel = ggml_pad(ctx0, cur, out_s - mel_s, 0, 0, 0);
-        } else {
-            mel = ggml_cont(ctx0, cur);
-        }
-    }
-
-    ggml_set_name(mel, "mel");
-
-    struct ggml_tensor * cur = nullptr;
-
-    if (!whisper_encode_external(wstate)) {
-        // convolution + gelu
-        {
-            cur = ggml_conv_1d_ph(ctx0, model.e_conv_1_w, mel, 1, 1);
-            cur = ggml_add(ctx0, cur, model.e_conv_1_b);
-
-            cur = ggml_gelu(ctx0, cur);
-
-            cur = ggml_conv_1d_ph(ctx0, model.e_conv_2_w, cur, 2, 1);
-            cur = ggml_add(ctx0, cur, model.e_conv_2_b);
-
-            cur = ggml_gelu(ctx0, cur);
-        }
-
-        ggml_set_name(cur, "embd_conv");
-        wstate.embd_conv = cur;
-    } else {
-        ggml_build_forward_expand(gf, mel);
-
-        cur = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, n_ctx);
-        ggml_set_input(cur); // the external encoder will write into this tensor
-
-        ggml_set_name(cur, "embd_enc");
-        wstate.embd_enc = cur;
-    }
-
-    ggml_set_output(cur);
-
-    ggml_build_forward_expand(gf, cur);
-
-    ggml_free(ctx0);
-
-    return gf;
-}
-
-static struct ggml_cgraph * whisper_build_graph_encoder(
-        whisper_context & wctx,
-          whisper_state & wstate) {
-    const auto & model   = wctx.model;
-    const auto & hparams = model.hparams;
-
-    const int n_ctx   = wstate.exp_n_audio_ctx > 0 ? wstate.exp_n_audio_ctx : hparams.n_audio_ctx;
-    const int n_state = hparams.n_audio_state;
-    const int n_head  = hparams.n_audio_head;
-    const int n_layer = hparams.n_audio_layer;
-
-    const int n_state_head = n_state/n_head;
-
-    auto & kv_pad = wstate.kv_pad;
-
-    WHISPER_ASSERT(!!kv_pad.ctx);
-
-    const int n_ctx_pad = GGML_PAD(n_ctx, 256);
-
-    struct ggml_init_params params = {
-        /*.mem_size   =*/ wstate.sched_encode.meta.size(),
-        /*.mem_buffer =*/ wstate.sched_encode.meta.data(),
-        /*.no_alloc   =*/ true,
-    };
-
-    struct ggml_context * ctx0 = ggml_init(params);
-
-    ggml_cgraph * gf = ggml_new_graph_custom(ctx0, WHISPER_MAX_NODES, false);
-
-    struct ggml_tensor * cur = ggml_view_tensor(ctx0, wstate.embd_conv);
-
-    const float KQscale = 1.0f/sqrtf(float(n_state_head));
-
-    // ===================================================================
-    // NOTE: experimenting with partial evaluation of the encoder (ignore)
-    //static int iter = -1;
-    //const int n_iter = 1500/n_ctx;
-
-    //iter = (iter + 1) % n_iter;
-
-    //if (iter == 0) {
-    //    memset(model.memory_cross_k->data, 0, ggml_nbytes(model.memory_cross_k));
-    //    memset(model.memory_cross_v->data, 0, ggml_nbytes(model.memory_cross_v));
-    //}
-
-    static int iter = 0;
-
-    const size_t e_pe_stride = model.e_pe->ne[0]*ggml_element_size(model.e_pe);
-    const size_t e_pe_offset = model.e_pe->ne[0]*ggml_element_size(model.e_pe)*n_ctx*iter;
-
-    struct ggml_tensor * e_pe = ggml_view_2d(ctx0, model.e_pe, model.e_pe->ne[0], n_ctx, e_pe_stride, e_pe_offset);
-    cur = ggml_add(ctx0, e_pe, ggml_cont(ctx0, ggml_transpose(ctx0, cur)));
-
-    // ===================================================================
-
-    // original:
-    //cur = ggml_add(ctx0, model.e_pe, ggml_transpose(ctx0, cur));
-
-    struct ggml_tensor * inpL = cur;
-
-    for (int il = 0; il < n_layer; ++il) {
-        const auto & layer = model.layers_encoder[il];
-
-        // norm
-        {
-            cur = ggml_norm(ctx0, inpL, hparams.eps);
-
-            // cur = ln_0_w*cur + ln_0_b
-            cur = ggml_add(ctx0,
-                    ggml_mul(ctx0, cur, layer.attn_ln_0_w),
-                    layer.attn_ln_0_b);
-        }
-
-        // self-attention
-        {
-            struct ggml_tensor * Qcur = ggml_mul_mat(ctx0,
-                    layer.attn_q_w,
-                    cur);
-
-            Qcur = ggml_add(ctx0, Qcur, layer.attn_q_b);
-
-            //Qcur = ggml_scale(ctx0, Qcur, pow(float(n_state_head), -0.25));
-
-            // note: no bias for Key
-            struct ggml_tensor * Kcur = ggml_mul_mat(ctx0,
-                    layer.attn_k_w,
-                    cur);
-
-            //Kcur = ggml_scale(ctx0, Kcur, pow(float(n_state_head), -0.25));
-
-            struct ggml_tensor * Vcur = ggml_mul_mat(ctx0,
-                    layer.attn_v_w,
-                    cur);
-
-            Vcur = ggml_add(ctx0, Vcur, layer.attn_v_b);
-
-            // ------
-
-            struct ggml_tensor * Q =
-                ggml_permute(ctx0,
-                        ggml_cpy(ctx0,
-                            Qcur,
-                            ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_state_head, n_head, n_ctx)),
-                        0, 2, 1, 3);
-
-            if (wctx.params.flash_attn) {
-                ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, ggml_view_1d(ctx0, kv_pad.k, n_ctx*n_state, 0)));
-                ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, ggml_view_1d(ctx0, kv_pad.v, n_ctx*n_state, 0)));
-
-                struct ggml_tensor * K =
-                    ggml_view_3d(ctx0, kv_pad.k,
-                            n_state_head, n_ctx_pad, n_head,
-                            ggml_element_size(kv_pad.k)*n_state,
-                            ggml_element_size(kv_pad.k)*n_state_head,
-                            0);
-
-                struct ggml_tensor * V =
-                    ggml_view_3d(ctx0, kv_pad.v,
-                            n_state_head, n_ctx_pad, n_head,
-                            ggml_element_size(kv_pad.v)*n_state,
-                            ggml_element_size(kv_pad.v)*n_state_head,
-                            0);
-
-                cur = ggml_flash_attn_ext(ctx0, Q, K, V, nullptr, KQscale, 0.0f);
-
-                cur = ggml_reshape_2d(ctx0, cur, n_state, n_ctx);
-            } else {
-                struct ggml_tensor * K =
-                    ggml_permute(ctx0,
-                            ggml_cpy(ctx0,
-                                Kcur,
-                                ggml_new_tensor_3d(ctx0, wctx.itype, n_state_head, n_head, n_ctx)),
-                            0, 2, 1, 3);
-
-                // K * Q
-                struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q);
-
-                struct ggml_tensor * KQ_soft_max = ggml_soft_max_ext(ctx0, KQ, nullptr, KQscale, 0.0f);
-
-                struct ggml_tensor * V =
-                    ggml_cpy(ctx0,
-                            ggml_permute(ctx0,
-                                ggml_reshape_3d(ctx0,
-                                    Vcur,
-                                    n_state_head, n_head, n_ctx),
-                                1, 2, 0, 3),
-                            ggml_new_tensor_3d(ctx0, wctx.itype, n_ctx, n_state_head, n_head)
-                            );
-
-                struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max);
-
-                struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3);
-
-                cur = ggml_cpy(ctx0,
-                        KQV_merged,
-                        ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, n_ctx));
-            }
-        }
-
-        // projection
-        {
-            cur = ggml_mul_mat(ctx0,
-                    layer.attn_ln_1_w,
-                    cur);
-
-            cur = ggml_add(ctx0, cur, layer.attn_ln_1_b);
-        }
-
-        // add the input
-        cur = ggml_add(ctx0, cur, inpL);
-
-        struct ggml_tensor * inpFF = cur;
-
-        // feed-forward network
-        {
-            // norm
-            {
-                cur = ggml_norm(ctx0, inpFF, hparams.eps);
-
-                // cur = mlp_ln_w*cur + mlp_ln_b
-                cur = ggml_add(ctx0,
-                        ggml_mul(ctx0, cur, layer.mlp_ln_w),
-                        layer.mlp_ln_b);
-            }
-
-#ifdef WHISPER_USE_FLASH_FF
-            cur = ggml_flash_ff(ctx0,
-                    ggml_cpy(ctx0, cur, ggml_new_tensor_2d(ctx0, wstate.itype, n_state, n_ctx)),
-                    layer.mlp_0_w, layer.mlp_0_b, layer.mlp_1_w, layer.mlp_1_b);
-#else
-            // fully connected
-            cur = ggml_mul_mat(ctx0,
-                    layer.mlp_0_w,
-                    cur);
-
-            cur = ggml_add(ctx0, cur, layer.mlp_0_b);
-
-            // GELU activation
-            cur = ggml_gelu(ctx0, cur);
-
-            // projection
-            cur = ggml_mul_mat(ctx0,
-                    layer.mlp_1_w,
-                    cur);
-
-            cur = ggml_add(ctx0, cur, layer.mlp_1_b);
-#endif
-        }
-
-        inpL = ggml_add(ctx0, cur, inpFF);
-    }
-
-    cur = inpL;
-
-    // norm
-    {
-        cur = ggml_norm(ctx0, cur, hparams.eps);
-
-        // cur = ln_f_g*cur + ln_f_b
-        cur = ggml_add(ctx0,
-                ggml_mul(ctx0, cur, model.e_ln_w),
-                model.e_ln_b);
-    }
-
-    ggml_build_forward_expand(gf, cur);
-
-    wstate.embd_enc = cur;
-
-    //ggml_graph_print(gf);
-
-    ////////////////////////////////////////////////////////////////////////////
-
-    //printf("%s: used_mem = %f MB, %f MB, %f MB %f MB %f MB\n", __func__,
-    //        ggml_used_mem(ctx0)/1e6,
-    //        wstate.get_buf_max_mem(0)/1e6,
-    //        wstate.get_buf_max_mem(1)/1e6,
-    //        wstate.get_buf_max_mem(2)/1e6,
-    //        wstate.get_buf_max_mem(3)/1e6);
-
-    ggml_free(ctx0);
-
-    return gf;
-}
-
-// pre-compute cross-attention memory
-static struct ggml_cgraph * whisper_build_graph_cross(
-        whisper_context & wctx,
-          whisper_state & wstate) {
-    const auto & model   = wctx.model;
-    const auto & hparams = model.hparams;
-
-    const int n_ctx   = wstate.exp_n_audio_ctx > 0 ? wstate.exp_n_audio_ctx : hparams.n_audio_ctx;
-    const int n_state = hparams.n_audio_state;
-    const int n_head  = hparams.n_audio_head;
-
-    const int n_state_head = n_state/n_head;
-
-    const int n_ctx_pad = GGML_PAD(n_ctx, 256);
-
-    struct ggml_init_params params = {
-        /*.mem_size   =*/ wstate.sched_cross.meta.size(),
-        /*.mem_buffer =*/ wstate.sched_cross.meta.data(),
-        /*.no_alloc   =*/ true,
-    };
-
-    struct ggml_context * ctx0 = ggml_init(params);
-
-    ggml_cgraph * gf = ggml_new_graph(ctx0);
-
-    struct ggml_tensor * cur = ggml_view_tensor(ctx0, wstate.embd_enc);
-
-    const float  Kscale = pow(float(n_state_head), -0.25);
-
-    for (int il = 0; il < model.hparams.n_text_layer; ++il) {
-        auto & layer = model.layers_decoder[il];
-
-        struct ggml_tensor * Kcross = ggml_mul_mat(ctx0,
-                layer.cross_attn_k_w,
-                cur);
-
-        Kcross = ggml_scale(ctx0, Kcross, Kscale);
-
-        struct ggml_tensor * Vcross = ggml_mul_mat(ctx0,
-                layer.cross_attn_v_w,
-                cur);
-
-        Vcross = ggml_add(ctx0,
-                    Vcross,
-                    layer.cross_attn_v_b);
-
-        struct ggml_tensor * k;
-        struct ggml_tensor * v;
-
-        if (wctx.params.flash_attn) {
-            k = ggml_view_1d(ctx0, wstate.kv_cross.k, n_state*n_ctx,
-                    (ggml_element_size(wstate.kv_cross.k)*n_state)*(il*n_ctx_pad));
-
-            v = ggml_view_1d(ctx0, wstate.kv_cross.v, n_state*n_ctx,
-                    (ggml_element_size(wstate.kv_cross.v)*n_state)*(il*n_ctx_pad));
-        } else {
-            Vcross = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, Vcross, n_state, n_ctx));
-
-            k = ggml_view_1d(ctx0, wstate.kv_cross.k, n_state*n_ctx,
-                    (ggml_element_size(wstate.kv_cross.k)*n_state)*(il*n_ctx));
-
-            v = ggml_view_2d(ctx0, wstate.kv_cross.v, n_ctx, n_state,
-                    (   n_ctx)*ggml_element_size(wstate.kv_cross.v),
-                    (il*n_ctx)*ggml_element_size(wstate.kv_cross.v)*n_state);
-        }
-
-        ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcross, k));
-        ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcross, v));
-    }
-
-    //ggml_graph_print(gf);
-
-    ggml_free(ctx0);
-
-    return gf;
-}
-
-// evaluate the encoder with the given state
-//
-// given audio recording (more specifically, its log mel spectrogram), runs forward pass of the encoder
-// part of the transformer model and returns the encoded features
-//
-//   - wctx:      the model
-//   - wstate:     the state of the encoder
-//   - n_threads:  number of threads to use
-//   - mel_offset: offset in the mel spectrogram (i.e. audio offset)
-//
-static bool whisper_encode_internal(
-        whisper_context & wctx,
-          whisper_state & wstate,
-              const int   mel_offset,
-              const int   n_threads,
-    ggml_abort_callback   abort_callback,
-                   void * abort_callback_data) {
-    const int64_t t_start_us = ggml_time_us();
-
-    // conv
-    {
-        auto & sched = wstate.sched_conv.sched;
-
-        ggml_cgraph * gf = whisper_build_graph_conv(wctx, wstate, mel_offset);
-
-        if (!ggml_backend_sched_alloc_graph(sched, gf)) {
-            // should never happen as we pre-allocate the memory
-            return false;
-        }
-
-        if (!ggml_graph_compute_helper(sched, gf, n_threads)) {
-            return false;
-        }
-
-        if (whisper_encode_external(wstate)) {
-            ggml_tensor * mel = ggml_graph_get_tensor(gf, "mel");
-            assert(mel->ne[1] == wctx.model.hparams.n_mels);
-            GGML_UNUSED(mel);
-#if defined(WHISPER_USE_COREML)
-            whisper_coreml_encode(wstate.ctx_coreml, mel->ne[0], mel->ne[1], (float *) mel->data, (float *) wstate.embd_enc->data);
-#elif defined(WHISPER_USE_OPENVINO)
-            whisper_openvino_encode(wstate.ctx_openvino, mel, wstate.embd_enc);
-#endif
-        }
-    }
-
-    // encoder
-    if (!whisper_encode_external(wstate)) {
-        auto & sched = wstate.sched_encode.sched;
-
-        ggml_cgraph * gf = whisper_build_graph_encoder(wctx, wstate);
-
-        if (!ggml_backend_sched_alloc_graph(sched, gf)) {
-            // should never happen as we pre-allocate the memory
-            return false;
-        }
-
-        if (!ggml_graph_compute_helper(sched, gf, n_threads)) {
-            return false;
-        }
-    }
-
-    // cross
-    {
-        auto & sched = wstate.sched_cross.sched;
-
-        ggml_cgraph * gf = whisper_build_graph_cross(wctx, wstate);
-
-        if (!ggml_backend_sched_alloc_graph(sched, gf)) {
-            // should never happen as we pre-allocate the memory
-            return false;
-        }
-
-        if (!ggml_graph_compute_helper(sched, gf, n_threads)) {
-            return false;
-        }
-    }
-
-    wstate.t_encode_us += ggml_time_us() - t_start_us;
-    wstate.n_encode++;
-
-    return !(abort_callback && abort_callback(abort_callback_data));
-}
-
-static struct ggml_cgraph * whisper_build_graph_decoder(
-         whisper_context & wctx,
-         whisper_state   & wstate,
-     const whisper_batch & batch,
-                    bool   save_alignment_heads_QKs,
-                    bool   worst_case) {
-    const auto & model   = wctx.model;
-    const auto & hparams = model.hparams;
-
-    auto & kv_self = wstate.kv_self;
-
-    WHISPER_ASSERT(!!kv_self.ctx);
-
-    const int n_ctx   = kv_self.size;
-    const int n_state = hparams.n_text_state;
-    const int n_head  = hparams.n_text_head;
-    const int n_layer = hparams.n_text_layer;
-
-    const int n_state_head = n_state/n_head;
-
-    const int n_tokens    = batch.n_tokens;
-    const int n_audio_ctx = wstate.exp_n_audio_ctx > 0 ? wstate.exp_n_audio_ctx : hparams.n_audio_ctx;
-
-    const int n_audio_ctx_pad = GGML_PAD(n_audio_ctx, 256);
-
-    const int32_t n_kv    = worst_case ? n_ctx            : kv_self.n;
-    const int32_t kv_head = worst_case ? n_ctx - n_tokens : kv_self.head;
-
-    //WHISPER_LOG_DEBUG("%s: n_past = %d, n_tokens = %d, n_audio_ctx = %d, n_ctx = %d\n", __func__, n_past, n_tokens, n_audio_ctx, n_ctx);
-
-    struct ggml_init_params params = {
-        /*.mem_size   =*/ wstate.sched_decode.meta.size(),
-        /*.mem_buffer =*/ wstate.sched_decode.meta.data(),
-        /*.no_alloc   =*/ true,
-    };
-
-    struct ggml_context * ctx0 = ggml_init(params);
-
-    ggml_cgraph * gf = ggml_new_graph_custom(ctx0, WHISPER_MAX_NODES, false);
-
-    struct ggml_tensor * embd = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens);
-    ggml_set_name(embd, "embd");
-    ggml_set_input(embd);
-
-    struct ggml_tensor * position = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_tokens);
-    ggml_set_name(position, "position");
-    ggml_set_input(position);
-
-    const float KQscale = pow(float(n_state_head), -0.25);
-
-    struct ggml_tensor * KQ_mask = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_kv, GGML_PAD(n_tokens, GGML_KQ_MASK_PAD), 1);
-    ggml_set_name(KQ_mask, "KQ_mask");
-    ggml_set_input(KQ_mask);
-
-    struct ggml_tensor * KQ_mask_f16 = ggml_cast(ctx0, KQ_mask, GGML_TYPE_F16);
-
-    // token encoding + position encoding
-    struct ggml_tensor * cur =
-        ggml_add(ctx0,
-                ggml_get_rows(ctx0, model.d_te, embd),
-                ggml_get_rows(ctx0, model.d_pe, position));
-
-    struct ggml_tensor * inpL = cur;
-
-    // [EXPERIMENTAL] Token-level timestamps with DTW
-    struct ggml_tensor * aheads_cross_QKs = nullptr;
-
-    for (int il = 0; il < n_layer; ++il) {
-        const auto & layer = model.layers_decoder[il];
-
-        // norm
-        {
-            cur = ggml_norm(ctx0, inpL, hparams.eps);
-
-            // cur = ln_0_w*cur + ln_0_b
-            cur = ggml_add(ctx0,
-                    ggml_mul(ctx0,
-                        cur,
-                        layer.attn_ln_0_w),
-                    layer.attn_ln_0_b);
-        }
-
-        // self-attention
-        {
-            struct ggml_tensor * Qcur = ggml_mul_mat(ctx0,
-                    layer.attn_q_w,
-                    cur);
-
-            Qcur = ggml_add(ctx0,
-                        Qcur,
-                        layer.attn_q_b);
-
-            Qcur = ggml_scale(ctx0, Qcur, KQscale);
-
-            // note: no bias for Key
-            struct ggml_tensor * Kcur = ggml_mul_mat(ctx0,
-                    layer.attn_k_w,
-                    cur);
-
-            Kcur = ggml_scale(ctx0, Kcur, KQscale);
-
-            // store key and value to memory
-            {
-                struct ggml_tensor * Vcur = ggml_mul_mat(ctx0,
-                        layer.attn_v_w,
-                        cur);
-
-                Vcur = ggml_add(ctx0,
-                            Vcur,
-                            layer.attn_v_b);
-
-                struct ggml_tensor * k;
-                struct ggml_tensor * v;
-
-                if (wctx.params.flash_attn) {
-                    k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_state,
-                            (ggml_element_size(kv_self.k)*n_state)*(il*n_ctx + kv_head));
-
-                    v = ggml_view_1d(ctx0, kv_self.v, n_tokens*n_state,
-                            (ggml_element_size(kv_self.v)*n_state)*(il*n_ctx + kv_head));
-                } else {
-                    Vcur = ggml_transpose(ctx0, ggml_reshape_2d(ctx0, Vcur, n_state, n_tokens));
-
-                    k = ggml_view_1d(ctx0, kv_self.k, n_tokens*n_state,
-                            (ggml_element_size(kv_self.k)*n_state)*(il*n_ctx + kv_head));
-
-                    v = ggml_view_2d(ctx0, kv_self.v, n_tokens, n_state,
-                            (   n_ctx)*ggml_element_size(kv_self.v),
-                            (il*n_ctx)*ggml_element_size(kv_self.v)*n_state + kv_head*ggml_element_size(kv_self.v));
-                }
-
-                ggml_build_forward_expand(gf, ggml_cpy(ctx0, Kcur, k));
-                ggml_build_forward_expand(gf, ggml_cpy(ctx0, Vcur, v));
-            }
-
-            // ------
-
-            struct ggml_tensor * Q =
-                ggml_permute(ctx0,
-                        ggml_reshape_3d(ctx0, Qcur, n_state_head, n_head, n_tokens),
-                        0, 2, 1, 3);
-
-            struct ggml_tensor * K =
-                ggml_view_3d(ctx0, kv_self.k,
-                        n_state_head, n_kv, n_head,
-                        ggml_element_size(kv_self.k)*n_state,
-                        ggml_element_size(kv_self.k)*n_state_head,
-                        ggml_element_size(kv_self.k)*n_state*n_ctx*il);
-
-            if (wctx.params.flash_attn) {
-                struct ggml_tensor * V =
-                    ggml_view_3d(ctx0, kv_self.v,
-                            n_state_head, n_kv, n_head,
-                            ggml_element_size(kv_self.v)*n_state,
-                            ggml_element_size(kv_self.v)*n_state_head,
-                            ggml_element_size(kv_self.v)*n_state*n_ctx*il);
-
-                cur = ggml_flash_attn_ext(ctx0, Q, K, V, KQ_mask_f16, 1.0f, 0.0f);
-
-                cur = ggml_reshape_2d(ctx0, cur, n_state, n_tokens);
-            } else {
-                // K * Q
-                struct ggml_tensor * KQ = ggml_mul_mat(ctx0, K, Q);
-
-                struct ggml_tensor * KQ_soft_max = ggml_soft_max_ext(ctx0, KQ, KQ_mask, 1.0f, 0.0f);
-
-                struct ggml_tensor * V =
-                    ggml_view_3d(ctx0, kv_self.v,
-                            n_kv, n_state_head, n_head,
-                            n_ctx*ggml_element_size(kv_self.v),
-                            n_ctx*ggml_element_size(kv_self.v)*n_state_head,
-                            n_ctx*ggml_element_size(kv_self.v)*n_state*il);
-
-                struct ggml_tensor * KQV = ggml_mul_mat(ctx0, V, KQ_soft_max);
-
-                struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3);
-
-                cur = ggml_cpy(ctx0,
-                        KQV_merged,
-                        ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, n_tokens));
-            }
-        }
-
-        // projection
-        {
-            cur = ggml_mul_mat(ctx0,
-                    layer.attn_ln_1_w,
-                    cur);
-
-            cur = ggml_add(ctx0,
-                    cur,
-                    layer.attn_ln_1_b);
-        }
-
-        // add the input
-        struct ggml_tensor * inpCA = ggml_add(ctx0, cur, inpL);
-
-        // norm
-        {
-            cur = ggml_norm(ctx0, inpCA, hparams.eps); // note: we use inpCA here
-
-            // cur = ln_0_w*cur + ln_0_b
-            cur = ggml_add(ctx0,
-                    ggml_mul(ctx0,
-                        cur,
-                        layer.cross_attn_ln_0_w),
-                    layer.cross_attn_ln_0_b);
-        }
-
-        // cross-attention
-        {
-            struct ggml_tensor * Qcur = ggml_mul_mat(ctx0,
-                    layer.cross_attn_q_w,
-                    cur);
-
-            Qcur = ggml_add(ctx0,
-                        Qcur,
-                        layer.cross_attn_q_b);
-
-            struct ggml_tensor * Q =
-                ggml_permute(ctx0,
-                        ggml_reshape_3d(ctx0, Qcur, n_state_head, n_head, n_tokens),
-                        0, 2, 1, 3);
-
-            if (wctx.params.flash_attn) {
-                struct ggml_tensor * Kcross =
-                    ggml_view_3d(ctx0, wstate.kv_cross.k,
-                            n_state_head, n_audio_ctx_pad, n_head,
-                            ggml_element_size(wstate.kv_cross.k)*n_state,
-                            ggml_element_size(wstate.kv_cross.k)*n_state_head,
-                            ggml_element_size(wstate.kv_cross.k)*n_state*n_audio_ctx_pad*il);
-
-                struct ggml_tensor * Vcross =
-                    ggml_view_3d(ctx0, wstate.kv_cross.v,
-                            n_state_head, n_audio_ctx_pad, n_head,
-                            ggml_element_size(wstate.kv_cross.v)*n_state,
-                            ggml_element_size(wstate.kv_cross.v)*n_state_head,
-                            ggml_element_size(wstate.kv_cross.v)*n_state*n_audio_ctx_pad*il);
-
-                cur = ggml_flash_attn_ext(ctx0, Q, Kcross, Vcross, nullptr, KQscale, 0.0f);
-
-                cur = ggml_reshape_2d(ctx0, cur, n_state, n_tokens);
-            } else {
-                struct ggml_tensor * Kcross =
-                    ggml_view_3d(ctx0, wstate.kv_cross.k,
-                            n_state_head, n_audio_ctx, n_head,
-                            ggml_element_size(wstate.kv_cross.k)*n_state,
-                            ggml_element_size(wstate.kv_cross.k)*n_state_head,
-                            ggml_element_size(wstate.kv_cross.k)*n_state*n_audio_ctx*il);
-
-                struct ggml_tensor * Vcross =
-                    ggml_view_3d(ctx0, wstate.kv_cross.v,
-                            n_audio_ctx, n_state_head, n_head,
-                            n_audio_ctx*ggml_element_size(wstate.kv_cross.v),
-                            n_audio_ctx*ggml_element_size(wstate.kv_cross.v)*n_state_head,
-                            n_audio_ctx*ggml_element_size(wstate.kv_cross.v)*n_state*il);
-
-                // ------
-
-                // K * Q
-                struct ggml_tensor * KQ = ggml_mul_mat(ctx0, Kcross, Q);
-
-                struct ggml_tensor * KQ_soft_max = ggml_soft_max_ext(ctx0, KQ, nullptr, KQscale, 0.0f);
-
-                // [EXPERIMENTAL] Token-level timestamps with DTW
-                if (wctx.params.dtw_token_timestamps) {
-                    if (wstate.aheads_masks.m[il] != nullptr) {
-                        struct ggml_tensor * aheads_KQs = ggml_reshape_2d(ctx0, KQ_soft_max, KQ_soft_max->ne[0] * KQ_soft_max->ne[1], KQ_soft_max->ne[2]);
-                        aheads_KQs = ggml_transpose(ctx0, aheads_KQs);
-                        aheads_KQs = ggml_cont(ctx0, aheads_KQs);
-                        aheads_KQs = ggml_mul_mat(ctx0, wstate.aheads_masks.m[il], aheads_KQs);
-                        aheads_KQs = ggml_transpose(ctx0, aheads_KQs);
-                        aheads_KQs = ggml_cont(ctx0, aheads_KQs);
-                        aheads_KQs = ggml_reshape_3d(ctx0, aheads_KQs, KQ_soft_max->ne[0], KQ_soft_max->ne[1], wstate.aheads_masks.m[il]->ne[1]);
-                        if (aheads_cross_QKs == NULL) {
-                            aheads_cross_QKs = aheads_KQs;
-                        } else {
-                            aheads_cross_QKs = ggml_concat(ctx0, aheads_cross_QKs, aheads_KQs, 2);
-                        }
-                    }
-                }
-
-                struct ggml_tensor * KQV = ggml_mul_mat(ctx0, Vcross, KQ_soft_max);
-
-                struct ggml_tensor * KQV_merged = ggml_permute(ctx0, KQV, 0, 2, 1, 3);
-
-                cur = ggml_cpy(ctx0,
-                        KQV_merged,
-                        ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_state, n_tokens));
-            }
-        }
-
-        // projection
-        {
-            cur = ggml_mul_mat(ctx0,
-                    layer.cross_attn_ln_1_w,
-                    cur);
-
-            cur = ggml_add(ctx0,
-                    cur,
-                    layer.cross_attn_ln_1_b);
-        }
-
-        // add the input
-        cur = ggml_add(ctx0, cur, inpCA);
-
-        struct ggml_tensor * inpFF = cur;
-
-        // feed-forward network
-        {
-            // norm
-            {
-                cur = ggml_norm(ctx0, inpFF, hparams.eps);
-
-                // cur = mlp_ln_w*cur + mlp_ln_b
-                cur = ggml_add(ctx0,
-                        ggml_mul(ctx0,
-                            cur,
-                            layer.mlp_ln_w),
-                        layer.mlp_ln_b);
-            }
-
-            // fully connected
-            cur = ggml_mul_mat(ctx0,
-                    layer.mlp_0_w,
-                    cur);
-
-            cur = ggml_add(ctx0,
-                    cur,
-                    layer.mlp_0_b);
-
-            // GELU activation
-            cur = ggml_gelu(ctx0, cur);
-
-            // projection
-            cur = ggml_mul_mat(ctx0,
-                    layer.mlp_1_w,
-                    cur);
-
-            cur = ggml_add(ctx0,
-                    cur,
-                    layer.mlp_1_b);
-        }
-
-        inpL = ggml_add(ctx0, cur, inpFF);
-    }
-
-    cur = inpL;
-
-    // norm
-    {
-        cur = ggml_norm(ctx0, cur, hparams.eps);
-
-        cur = ggml_add(ctx0,
-                ggml_mul(ctx0,
-                    cur,
-                    model.d_ln_w),
-                model.d_ln_b);
-    }
-
-    // compute logits only for the last token
-    // comment this line to compute logits for all n_tokens
-    // might be useful in the future
-    //cur = ggml_view_2d(ctx0, cur, cur->ne[0], 1, cur->nb[1], (cur->ne[1] - 1)*cur->nb[1]);
-
-    struct ggml_tensor * logits = ggml_mul_mat(ctx0, model.d_te, cur);
-
-    // [EXPERIMENTAL] Token-level timestamps with DTW
-    if (wctx.params.dtw_token_timestamps && aheads_cross_QKs != nullptr) {
-        aheads_cross_QKs = ggml_transpose(ctx0, aheads_cross_QKs);
-        aheads_cross_QKs = ggml_cont(ctx0, aheads_cross_QKs);
-        if (save_alignment_heads_QKs) {
-            ggml_build_forward_expand(gf, aheads_cross_QKs);
-            wstate.aheads_cross_QKs = aheads_cross_QKs;
-        }
-    }
-
-    ggml_build_forward_expand(gf, logits);
-
-    ggml_free(ctx0);
-
-    return gf;
-}
-
-// evaluate the decoder
-//
-// given text prompt + audio features -> computes the logits for the next token
-//
-//   - model:      the model
-//   - n_threads:  number of threads to use
-//   - tokens:     text prompt
-//   - n_tokens:   number of tokens in the prompt
-//   - n_past:     number of past tokens to prefix the prompt with
-//
-static bool whisper_decode_internal(
-        whisper_context & wctx,
-          whisper_state & wstate,
-    const whisper_batch & batch,
-              const int   n_threads,
-                   bool   save_alignment_heads_QKs,
-    ggml_abort_callback   abort_callback,
-                   void * abort_callback_data) {
-    const int64_t t_start_us = ggml_time_us();
-
-    const auto & model   = wctx.model;
-    const auto & hparams = model.hparams;
-
-    const int n_vocab  = hparams.n_vocab;
-    const int n_tokens = batch.n_tokens;
-
-    auto & logits_out = wstate.logits;
-
-    struct ggml_tensor * logits;
-
-    // find KV slot for the batch
-    {
-        auto & kv_self = wstate.kv_self;
-
-        if (!whisper_kv_cache_find_slot(kv_self, batch)) {
-            return false;
-        }
-
-        const uint32_t pad = whisper_kv_cache_get_padding(wctx);
-        kv_self.n = std::min(kv_self.size, std::max(pad, GGML_PAD(whisper_kv_cache_cell_max(kv_self), pad)));
-
-        //kv_self.n = std::min((int32_t) hparams.n_text_ctx, std::max(32, whisper_kv_cache_cell_max(kv_self)));
-        //printf("n_tokens = %5d, kv_self.head = %5d, kv_self.n = %5d, seq_id = %5d\n", batch.n_tokens, kv_self.head, kv_self.n, batch.seq_id[0][0]);
-    }
-
-    // decoder
-    {
-        auto & sched = wstate.sched_decode.sched;
-
-        ggml_cgraph * gf = whisper_build_graph_decoder(wctx, wstate, batch, save_alignment_heads_QKs, false);
-
-        if (!ggml_backend_sched_alloc_graph(sched, gf)) {
-            // should never happen as we pre-allocate the memory
-            return false;
-        }
-
-        // set the inputs
-        {
-            struct ggml_tensor * embd = ggml_graph_get_tensor(gf, "embd");
-            ggml_backend_tensor_set(embd, batch.token, 0, n_tokens*ggml_element_size(embd));
-        }
-
-        {
-            struct ggml_tensor * position = ggml_graph_get_tensor(gf, "position");
-            for (int i = 0; i < n_tokens; ++i) {
-                const int32_t val = batch.pos[i];
-                ggml_backend_tensor_set(position, &val, i*sizeof(int32_t), sizeof(int32_t));
-            }
-        }
-
-        {
-            struct ggml_tensor * KQ_mask = ggml_graph_get_tensor(gf, "KQ_mask");
-
-            auto & kv_self = wstate.kv_self;
-
-            const int32_t n_kv = kv_self.n;
-
-            wstate.inp_mask.resize(ggml_nelements(KQ_mask));
-
-            float * data = wstate.inp_mask.data();
-            memset(data, 0, ggml_nbytes(KQ_mask));
-
-            for (int h = 0; h < 1; ++h) {
-                for (int j = 0; j < n_tokens; ++j) {
-                    const whisper_pos    pos    = batch.pos[j];
-                    const whisper_seq_id seq_id = batch.seq_id[j][0];
-
-                    for (int i = 0; i < n_kv; ++i) {
-                        if (!kv_self.cells[i].has_seq_id(seq_id) || kv_self.cells[i].pos > pos) {
-                            data[h*(n_kv*n_tokens) + j*n_kv + i] = -INFINITY;
-                        }
-                    }
-                }
-
-                for (int i = n_tokens; i < GGML_PAD(n_tokens, GGML_KQ_MASK_PAD); ++i) {
-                    for (int j = 0; j < n_kv; ++j) {
-                        data[h*(n_kv*n_tokens) + i*n_kv + j] = -INFINITY;
-                    }
-                }
-            }
-
-            ggml_backend_tensor_set(KQ_mask, wstate.inp_mask.data(), 0, ggml_nelements(KQ_mask)*sizeof(float));
-        }
-
-        logits = gf->nodes[gf->n_nodes - 1];
-
-        if (!ggml_graph_compute_helper(sched, gf, n_threads)) {
-            return false;
-        }
-    }
-
-    logits_out.resize(n_tokens*n_vocab);
-    for (int i = 0; i < n_tokens; i++) {
-        if (batch.logits[i] == 0) {
-            continue;
-        }
-        ggml_backend_tensor_get(logits, logits_out.data() + (n_vocab*i), sizeof(float)*(n_vocab*i), sizeof(float)*n_vocab);
-    }
-
-    if (batch.n_tokens > 1) {
-        //printf("%s: used_mem = %f MB, %f MB, %f MB %f MB %f MB\n", __func__,
-        //        ggml_used_mem(ctx0)/1e6,
-        //        wstate.get_buf_max_mem(0)/1e6,
-        //        wstate.get_buf_max_mem(1)/1e6,
-        //        wstate.get_buf_max_mem(2)/1e6,
-        //        wstate.get_buf_max_mem(3)/1e6);
-    }
-
-    if (batch.n_tokens == 1) {
-        wstate.t_decode_us += ggml_time_us() - t_start_us;
-        wstate.n_decode++;
-    } else if (batch.n_tokens < 16) {
-        wstate.t_batchd_us += ggml_time_us() - t_start_us;
-        wstate.n_batchd += n_tokens;
-    } else {
-        wstate.t_prompt_us += ggml_time_us() - t_start_us;
-        wstate.n_prompt += n_tokens;
-    }
-
-    return !(abort_callback && abort_callback(abort_callback_data));
-}
-
-//  500 -> 00:05.000
-// 6000 -> 01:00.000
-static std::string to_timestamp(int64_t t, bool comma = false) {
-    int64_t msec = t * 10;
-    int64_t hr = msec / (1000 * 60 * 60);
-    msec = msec - hr * (1000 * 60 * 60);
-    int64_t min = msec / (1000 * 60);
-    msec = msec - min * (1000 * 60);
-    int64_t sec = msec / 1000;
-    msec = msec - sec * 1000;
-
-    char buf[32];
-    snprintf(buf, sizeof(buf), "%02d:%02d:%02d%s%03d", (int) hr, (int) min, (int) sec, comma ? "," : ".", (int) msec);
-
-    return std::string(buf);
-}
-
-#define SIN_COS_N_COUNT WHISPER_N_FFT
-namespace {
-struct whisper_global_cache {
-    // In FFT, we frequently use sine and cosine operations with the same values.
-    // We can use precalculated values to speed up the process.
-    float sin_vals[SIN_COS_N_COUNT];
-    float cos_vals[SIN_COS_N_COUNT];
-
-    // Hann window (Use cosf to eliminate difference)
-    // ref: https://pytorch.org/docs/stable/generated/torch.hann_window.html
-    // ref: https://github.com/openai/whisper/blob/main/whisper/audio.py#L147
-    float hann_window[WHISPER_N_FFT];
-
-    whisper_global_cache() {
-        fill_sin_cos_table();
-        fill_hann_window(sizeof(hann_window)/sizeof(hann_window[0]), true, hann_window);
-    }
-
-    void fill_sin_cos_table() {
-        for (int i = 0; i < SIN_COS_N_COUNT; i++) {
-            double theta = (2 * M_PI * i) / SIN_COS_N_COUNT;
-            sin_vals[i] = sinf(theta);
-            cos_vals[i] = cosf(theta);
-        }
-    }
-
-    void fill_hann_window(int length, bool periodic, float * output) {
-        int offset = -1;
-        if (periodic) {
-            offset = 0;
-        }
-        for (int i = 0; i < length; i++) {
-            output[i] = 0.5 * (1.0 - cosf((2.0 * M_PI * i) / (length + offset)));
-        }
-    }
-} global_cache;
-}
-
-// Mel spectrogram
-
-void whisper_mel_init(whisper_mel & mel, ggml_backend_t backend, int n_len, int n_len_org, int n_mel) {
-    WHISPER_LOG_INFO("%s: n_len = %d, n_len_org = %d, n_mel = %d\n", __func__, n_len, n_len_org, n_mel);
-    mel.n_len_org = n_len_org;
-    assert(!mel.ctx);
-    mel.ctx = ggml_init({ggml_tensor_overhead(), nullptr, true});
-    mel.tensor = ggml_new_tensor_2d(mel.ctx, GGML_TYPE_F32, n_len, n_mel);
-    mel.buffer = ggml_backend_alloc_buffer(backend, ggml_nbytes(mel.tensor) + ggml_backend_get_alignment(backend));
-    auto alloc = ggml_tallocr_new(mel.buffer);
-    ggml_tallocr_alloc(&alloc, mel.tensor);
-}
-
-void whisper_mel_free(whisper_mel & mel) {
-    ggml_free(mel.ctx);
-    ggml_backend_buffer_free(mel.buffer);
-
-    mel.n_len_org = 0;
-    mel.ctx = nullptr;
-    mel.tensor = nullptr;
-    mel.buffer = nullptr;
-}
-
-whisper_mel_calc::~whisper_mel_calc() = default; // export vtable
-
-whisper_span<const float> whisper_mel_calc::hann_window() {
-    return {global_cache.hann_window, WHISPER_N_FFT};
-}
-
-// naive Discrete Fourier Transform
-// input is real-valued
-// output is complex-valued
-static void dft(const float* in, int N, float* out) {
-    const int sin_cos_step = SIN_COS_N_COUNT / N;
-
-    for (int k = 0; k < N; k++) {
-        float re = 0;
-        float im = 0;
-
-        for (int n = 0; n < N; n++) {
-            int idx = (k * n * sin_cos_step) % (SIN_COS_N_COUNT); // t = 2*M_PI*k*n/N
-            re += in[n]*global_cache.cos_vals[idx]; // cos(t)
-            im -= in[n]*global_cache.sin_vals[idx]; // sin(t)
-        }
-
-        out[k*2 + 0] = re;
-        out[k*2 + 1] = im;
-    }
-}
-
-// Cooley-Tukey FFT
-// poor man's implementation - use something better
-// input is real-valued
-// output is complex-valued
-static void fft(float* in, int N, float* out) {
-    if (N == 1) {
-        out[0] = in[0];
-        out[1] = 0;
-        return;
-    }
-
-    const int half_N = N / 2;
-    if (N - half_N*2 == 1) {
-        dft(in, N, out);
-        return;
-    }
-
-    float* even = in + N;
-    for (int i = 0; i < half_N; ++i) {
-        even[i]= in[2*i];
-    }
-    float* even_fft = out + 2 * N;
-    fft(even, half_N, even_fft);
-
-    float* odd = even;
-    for (int i = 0; i < half_N; ++i) {
-        odd[i] = in[2*i + 1];
-    }
-    float* odd_fft = even_fft + N;
-    fft(odd, half_N, odd_fft);
-
-    const int sin_cos_step = SIN_COS_N_COUNT / N;
-    for (int k = 0; k < half_N; k++) {
-        int idx = k * sin_cos_step; // t = 2*M_PI*k/N
-        float re = global_cache.cos_vals[idx]; // cos(t)
-        float im = -global_cache.sin_vals[idx]; // sin(t)
-
-        float re_odd = odd_fft[2*k + 0];
-        float im_odd = odd_fft[2*k + 1];
-
-        out[2*k + 0] = even_fft[2*k + 0] + re*re_odd - im*im_odd;
-        out[2*k + 1] = even_fft[2*k + 1] + re*im_odd + im*re_odd;
-
-        out[2*(k + half_N) + 0] = even_fft[2*k + 0] - re*re_odd + im*im_odd;
-        out[2*(k + half_N) + 1] = even_fft[2*k + 1] - re*im_odd - im*re_odd;
-    }
-}
-
-namespace {
-
-struct whisper_mel_data {
-    int n_len;
-    int n_len_org;
-    int n_mel;
-    float * data;
-};
-
-void log_mel_spectrogram_worker_thread(int ith, const float * hann, const std::vector<float> & samples,
-                                              int n_samples, int n_threads,
-                                              const whisper_filters & filters, whisper_mel_data & mel) {
-    const auto frame_size = WHISPER_N_FFT;
-    const auto frame_step = WHISPER_HOP_LENGTH;
-    std::vector<float> fft_in(frame_size * 2, 0.0);
-    std::vector<float> fft_out(frame_size * 2 * 2 * 2);
-    int n_fft = filters.n_fft;
-    int i = ith;
-
-    // make sure n_fft == 1 + (WHISPER_N_FFT / 2), bin_0 to bin_nyquist
-    assert(n_fft == 1 + (frame_size / 2));
-
-    // calculate FFT only when fft_in are not all zero
-    for (; i < std::min(n_samples / frame_step + 1, mel.n_len); i += n_threads) {
-        const int offset = i * frame_step;
-
-        // apply Hann window (~10% faster)
-        for (int j = 0; j < std::min(frame_size, n_samples - offset); j++) {
-            fft_in[j] = hann[j] * samples[offset + j];
-        }
-        // fill the rest with zeros
-        if (n_samples - offset < frame_size) {
-            std::fill(fft_in.begin() + (n_samples - offset), fft_in.end(), 0.0);
-        }
-
-        // FFT
-        fft(fft_in.data(), frame_size, fft_out.data());
-
-        // Calculate modulus^2 of complex numbers
-        // Use pow(fft_out[2 * j + 0], 2) + pow(fft_out[2 * j + 1], 2) causes inference quality problem? Interesting.
-        for (int j = 0; j < n_fft; j++) {
-            fft_out[j] = (fft_out[2 * j + 0] * fft_out[2 * j + 0] + fft_out[2 * j + 1] * fft_out[2 * j + 1]);
-        }
-
-        // mel spectrogram
-        for (int j = 0; j < mel.n_mel; j++) {
-            double sum = 0.0;
-
-            // unroll loop (suggested by GH user @lunixbochs)
-            int k = 0;
-            for (k = 0; k < n_fft - 3; k += 4) {
-                sum +=
-                        fft_out[k + 0] * filters.data[j * n_fft + k + 0] +
-                        fft_out[k + 1] * filters.data[j * n_fft + k + 1] +
-                        fft_out[k + 2] * filters.data[j * n_fft + k + 2] +
-                        fft_out[k + 3] * filters.data[j * n_fft + k + 3];
-            }
-
-            // handle n_fft remainder
-            for (; k < n_fft; k++) {
-                sum += fft_out[k] * filters.data[j * n_fft + k];
-            }
-
-            sum = log10(std::max(sum, 1e-10));
-
-            mel.data[j * mel.n_len + i] = sum;
-        }
-    }
-
-    // Otherwise fft_out are all zero
-    double sum = log10(1e-10);
-    for (; i < mel.n_len; i += n_threads) {
-        for (int j = 0; j < mel.n_mel; j++) {
-            mel.data[j * mel.n_len + i] = sum;
-        }
-    }
-}
-
-struct mel_calc_cpu : public whisper_mel_calc {
-    ggml_backend_t m_backend;
-    const whisper_filters & m_filters;
-    mel_calc_cpu(ggml_backend_t backend, const whisper_filters & filters) : m_backend(backend), m_filters(filters) {}
-
-    // ref: https://github.com/openai/whisper/blob/main/whisper/audio.py#L110-L157
-    whisper_mel calculate(whisper_span<const float> ssamples, int n_threads) override {
-        // Hann window
-        const float * hann = global_cache.hann_window;
-
-        // Calculate the length of padding
-        int64_t stage_1_pad = WHISPER_SAMPLE_RATE * 30;
-        int64_t stage_2_pad = WHISPER_N_FFT / 2;
-
-        const int n_samples = int(ssamples.len);
-        const float * samples = ssamples.data;
-
-        // Initialize a vector and copy data from C array to it.
-        std::vector<float> samples_padded;
-        samples_padded.resize(n_samples + stage_1_pad + stage_2_pad * 2);
-        std::copy(samples, samples + n_samples, samples_padded.begin() + stage_2_pad);
-
-        // pad 30 seconds of zeros at the end of audio (480,000 samples) + reflective pad 200 samples at the end of audio
-        std::fill(samples_padded.begin() + n_samples + stage_2_pad, samples_padded.begin() + n_samples + stage_1_pad + 2 * stage_2_pad, 0);
-
-        // reflective pad 200 samples at the beginning of audio
-        std::reverse_copy(samples + 1, samples + 1 + stage_2_pad, samples_padded.begin());
-
-        whisper_mel_data mel;
-        mel.n_mel     = m_filters.n_mel;
-        // https://github.com/pytorch/pytorch/blob/main/aten/src/ATen/native/SpectralOps.cpp#L936
-        // Calculate number of frames + remove the last frame
-        mel.n_len     = (samples_padded.size() - WHISPER_N_FFT) / WHISPER_HOP_LENGTH;
-        // Calculate semi-padded sample length to ensure compatibility
-        mel.n_len_org = 1 + (n_samples + stage_2_pad - WHISPER_N_FFT) / WHISPER_HOP_LENGTH;
-
-        std::vector<float> host_mel_data;
-
-        whisper_mel ret;
-        whisper_mel_init(ret, m_backend, mel.n_len, mel.n_len_org, mel.n_mel);
-        if (ggml_backend_buffer_is_host(ret.buffer)) {
-            mel.data = reinterpret_cast<float*>(ret.tensor->data);
-        } else {
-            host_mel_data.resize(mel.n_len * mel.n_mel);
-            mel.data = host_mel_data.data();
-        }
-
-        {
-            std::vector<std::thread> workers(n_threads - 1);
-            for (int iw = 0; iw < n_threads - 1; ++iw) {
-                workers[iw] = std::thread(
-                        log_mel_spectrogram_worker_thread, iw + 1, hann, samples_padded,
-                        n_samples + stage_2_pad, n_threads,
-                        std::cref(m_filters), std::ref(mel));
-            }
-
-            // main thread
-            log_mel_spectrogram_worker_thread(0, hann, samples_padded, n_samples + stage_2_pad, n_threads, m_filters, mel);
-
-            for (int iw = 0; iw < n_threads - 1; ++iw) {
-                workers[iw].join();
-            }
-        }
-
-        // clamping and normalization
-        double mmax = -1e20;
-        for (int i = 0; i < mel.n_mel*mel.n_len; i++) {
-            if (mel.data[i] > mmax) {
-                mmax = mel.data[i];
-            }
-        }
-
-        mmax -= 8.0;
-
-        for (int i = 0; i < mel.n_mel*mel.n_len; i++) {
-            if (mel.data[i] < mmax) {
-                mel.data[i] = mmax;
-            }
-
-            mel.data[i] = (mel.data[i] + 4.0)/4.0;
-        }
-
-        if (!host_mel_data.empty()) {
-            // the ret buffer is not host-accessible so we used this temporary buffer and now we need to upload it
-            ggml_backend_tensor_set(ret.tensor, host_mel_data.data(), 0, ggml_nbytes(ret.tensor));
-        }
-
-        return ret;
-    }
-};
-}
-
-whisper_mel_calc * whisper_mel_calc_create(ggml_backend_t backend, const whisper_filters & filters) {
-#if defined(GGML_USE_CUDA) && !defined(GGML_USE_HIPBLAS)
-    if (ggml_backend_is_cuda(backend)) {
-        auto ret = whisper_mel_calc_create_cuda(backend, filters);
-        if (ret) {
-            // run a warmup to avoid the first kernel launch overhead (thus we get the best perf even on the first run)
-            const float warmup[256] = { 0 };
-            ret->calculate({ warmup, 256 }, 1);
-            return ret;
-        }
-    }
-#endif
-
-    // a specialized mel_calc could not be created
-    // fall back to CPU
-    return new mel_calc_cpu(backend, filters);
-}
-
-// split text into tokens
-//
-// ref: https://github.com/openai/gpt-2/blob/a74da5d99abaaba920de8131d64da2862a8f213b/src/encoder.py#L53
-//
-// Regex (Python):
-// r"""'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+"""
-//
-// Regex (C++):
-// R"('s|'t|'re|'ve|'m|'ll|'d| ?[[:alpha:]]+| ?[[:digit:]]+| ?[^\s[:alpha:][:digit:]]+|\s+(?!\S)|\s+)"
-//
-static std::vector<whisper_vocab::id> tokenize(const whisper_vocab & vocab, const std::string & text) {
-    std::vector<std::string> words;
-
-    // first split the text into words
-    {
-        std::string str = text;
-        std::string pat = R"('s|'t|'re|'ve|'m|'ll|'d| ?[[:alpha:]]+| ?[[:digit:]]+| ?[^\s[:alpha:][:digit:]]+|\s+(?!\S)|\s+)";
-
-        std::regex re(pat);
-        std::smatch m;
-
-        while (std::regex_search(str, m, re)) {
-            for (auto x : m) {
-                words.push_back(x);
-            }
-            str = m.suffix();
-        }
-    }
-
-    // find the longest tokens that form the words:
-    std::vector<whisper_vocab::id> tokens;
-    for (const auto & word : words) {
-        if (word.empty()) continue;
-
-        int i = 0;
-        int n = word.size();
-        while (i < n) {
-            int j = n;
-            bool found = false;
-            while (j > i) {
-                auto sub = word.substr(i, j-i);
-                auto it = vocab.token_to_id.find(sub);
-                if (it != vocab.token_to_id.end()) {
-                    tokens.push_back(it->second);
-                    i = j;
-                    found = true;
-                    break;
-                }
-                --j;
-            }
-            if (!found) {
-                WHISPER_LOG_ERROR("unknown token\n");
-                ++i;
-            }
-        }
-    }
-
-    return tokens;
-}
-
-//
-// interface implementation
-//
-
-#ifdef WHISPER_USE_COREML
-// replace .bin with -encoder.mlmodelc
-static std::string whisper_get_coreml_path_encoder(std::string path_bin) {
-    auto pos = path_bin.rfind('.');
-    if (pos != std::string::npos) {
-        path_bin = path_bin.substr(0, pos);
-    }
-
-    // match "-qx_x"
-    pos = path_bin.rfind('-');
-    if (pos != std::string::npos) {
-        auto sub = path_bin.substr(pos);
-        if (sub.size() == 5 && sub[1] == 'q' && sub[3] == '_') {
-            path_bin = path_bin.substr(0, pos);
-        }
-    }
-
-    path_bin += "-encoder.mlmodelc";
-
-    return path_bin;
-}
-#endif
-
-#ifdef WHISPER_USE_OPENVINO
-// replace .bin with-encoder-openvino.xml
-static std::string whisper_openvino_get_path_encoder(std::string path_bin) {
-    auto pos = path_bin.rfind('.');
-    if (pos != std::string::npos) {
-        path_bin = path_bin.substr(0, pos);
-    }
-
-    path_bin += "-encoder-openvino.xml";
-
-    return path_bin;
-}
-
-static std::string whisper_openvino_get_path_cache(std::string path_bin) {
-    auto pos = path_bin.rfind('.');
-    if (pos != std::string::npos) {
-        path_bin = path_bin.substr(0, pos);
-    }
-
-    path_bin += "-encoder-openvino-cache";
-
-    return path_bin;
-}
-#endif
-
-struct whisper_state * whisper_init_state(whisper_context * ctx) {
-    whisper_state * state = new whisper_state;
-
-    state->backends = whisper_backend_init(ctx->params);
-    if (state->backends.empty()) {
-        WHISPER_LOG_ERROR("%s: whisper_backend_init() failed\n", __func__);
-        whisper_free_state(state);
-        return nullptr;
-    }
-
-    state->mel_calc = whisper_mel_calc_create(state->backends[0], ctx->model.filters);
-
-    // init 60s of random mel data
-    {
-        const int n_len = 2*100*WHISPER_CHUNK_SIZE;
-        const int n_mel = ctx->model.filters.n_mel;
-
-        whisper_mel_free(state->mel);
-        whisper_mel_init(state->mel, state->backends[0], n_len, n_len, n_mel);
-    }
-
-    // at this point, we don't know yet how many decoders will be used, so we overallocate 3x ctx
-    // in theory, there can be a case where this is not enough, but in practice it should always be enough
-    const int factor = 3;
-
-    if (!whisper_kv_cache_init(state->kv_self, state->backends[0], ctx->itype,
-                ctx->model.hparams.n_text_state,
-                ctx->model.hparams.n_text_layer,
-                GGML_PAD(ctx->model.hparams.n_text_ctx, 256)*factor)) {
-        WHISPER_LOG_ERROR("%s: whisper_kv_cache_init() failed for self-attention cache\n", __func__);
-        whisper_free_state(state);
-        return nullptr;
-    }
-
-    {
-        const size_t memory_size = ggml_nbytes(state->kv_self.k) + ggml_nbytes(state->kv_self.v);
-        WHISPER_LOG_INFO("%s: kv self size  = %7.2f MB\n", __func__, memory_size / 1e6);
-    }
-
-    if (!whisper_kv_cache_init(state->kv_cross, state->backends[0], ctx->itype,
-                ctx->model.hparams.n_text_state,
-                ctx->model.hparams.n_text_layer,
-                GGML_PAD(ctx->model.hparams.n_audio_ctx, 256))) {
-        WHISPER_LOG_ERROR("%s: whisper_kv_cache_init() failed for cross-attention cache\n", __func__);
-        whisper_free_state(state);
-        return nullptr;
-    }
-
-    {
-        const size_t memory_size = ggml_nbytes(state->kv_cross.k) + ggml_nbytes(state->kv_cross.v);
-        WHISPER_LOG_INFO("%s: kv cross size = %7.2f MB\n", __func__, memory_size / 1e6);
-    }
-
-    if (!whisper_kv_cache_init(state->kv_pad, state->backends[0], ctx->itype,
-                ctx->model.hparams.n_audio_state,
-                1,
-                GGML_PAD(ctx->model.hparams.n_audio_ctx, 256))) {
-        WHISPER_LOG_ERROR("%s: whisper_kv_cache_init() failed for self-attention cache\n", __func__);
-        whisper_free_state(state);
-        return nullptr;
-    }
-
-    {
-        const size_t memory_size = ggml_nbytes(state->kv_pad.k) + ggml_nbytes(state->kv_pad.v);
-        WHISPER_LOG_INFO("%s: kv pad  size  = %7.2f MB\n", __func__, memory_size / 1e6);
-    }
-
-    // [EXPERIMENTAL] Token-level timestamps with DTW
-    if (ctx->params.dtw_token_timestamps) {
-        if (!aheads_masks_init(ctx->params, ctx->model.hparams, state->aheads_masks, state->backends[0])) {
-            WHISPER_LOG_ERROR("%s: aheads_masks_init() failed for alignment heads masks\n", __func__);
-            whisper_free_state(state);
-            return nullptr;
-        }
-        const size_t memory_size = aheads_masks_nbytes(state->aheads_masks);
-        WHISPER_LOG_INFO("%s: alignment heads masks size = %ld B\n", __func__, memory_size);
-    }
-
-#ifdef WHISPER_USE_COREML
-    const auto path_coreml = whisper_get_coreml_path_encoder(ctx->path_model);
-
-    WHISPER_LOG_INFO("%s: loading Core ML model from '%s'\n", __func__, path_coreml.c_str());
-    WHISPER_LOG_INFO("%s: first run on a device may take a while ...\n", __func__);
-
-    state->ctx_coreml = whisper_coreml_init(path_coreml.c_str());
-    if (!state->ctx_coreml) {
-        WHISPER_LOG_ERROR("%s: failed to load Core ML model from '%s'\n", __func__, path_coreml.c_str());
-#ifndef WHISPER_COREML_ALLOW_FALLBACK
-        whisper_free_state(state);
-        return nullptr;
-#endif
-    } else {
-        WHISPER_LOG_INFO("%s: Core ML model loaded\n", __func__);
-    }
-#endif
-
-    state->logits.reserve(ctx->vocab.n_vocab * ctx->model.hparams.n_text_ctx);
-
-    state->batch = whisper_batch_init(ctx->model.hparams.n_text_ctx, WHISPER_MAX_DECODERS);
-
-    // TAGS: WHISPER_DECODER_INIT
-    state->decoders[0].sequence.tokens.reserve(ctx->model.hparams.n_text_ctx);
-
-    state->decoders[0].probs.reserve    (ctx->vocab.n_vocab);
-    state->decoders[0].logits.reserve   (ctx->vocab.n_vocab);
-    state->decoders[0].logprobs.reserve (ctx->vocab.n_vocab);
-    state->decoders[0].logits_id.reserve(ctx->model.hparams.n_vocab);
-
-    state->decoders[0].rng = std::mt19937(0);
-
-    // conv allocator
-    {
-        bool ok = whisper_sched_graph_init(state->sched_conv, state->backends,
-                [&]() {
-                    return whisper_build_graph_conv(*ctx, *state, 0);
-                });
-
-        if (!ok) {
-            WHISPER_LOG_ERROR("%s: failed to init conv allocator\n", __func__);
-            whisper_free_state(state);
-            return nullptr;
-        }
-
-        WHISPER_LOG_INFO("%s: compute buffer (conv)   = %7.2f MB\n", __func__, whisper_sched_size(state->sched_conv) / 1e6);
-    }
-
-    // encoder allocator
-    if (!whisper_encode_external(*state)) {
-        bool ok = whisper_sched_graph_init(state->sched_encode, state->backends,
-                [&]() {
-                    return whisper_build_graph_encoder(*ctx, *state);
-                });
-
-        if (!ok) {
-            WHISPER_LOG_ERROR("%s: failed to init encoder allocator\n", __func__);
-            whisper_free_state(state);
-            return nullptr;
-        }
-
-        WHISPER_LOG_INFO("%s: compute buffer (encode) = %7.2f MB\n", __func__, whisper_sched_size(state->sched_encode) / 1e6);
-    }
-
-    // cross allocator
-    {
-        bool ok = whisper_sched_graph_init(state->sched_cross, state->backends,
-                [&]() {
-                    return whisper_build_graph_cross(*ctx, *state);
-                });
-
-        if (!ok) {
-            WHISPER_LOG_ERROR("%s: failed to init cross allocator\n", __func__);
-            whisper_free_state(state);
-            return nullptr;
-        }
-
-        WHISPER_LOG_INFO("%s: compute buffer (cross)  = %7.2f MB\n", __func__, whisper_sched_size(state->sched_cross) / 1e6);
-    }
-
-    // decoder allocator
-    {
-        bool ok = whisper_sched_graph_init(state->sched_decode, state->backends,
-                [&]() {
-                    const auto & hparams = ctx->model.hparams;
-
-                    // TODO: make sure this is the worst-case scenario
-                    const int n_tokens = hparams.n_text_ctx;
-                    const int n_past   = 0;
-
-                    whisper_batch_prep_legacy(state->batch, nullptr, n_tokens, n_past, 0);
-
-                    return whisper_build_graph_decoder(*ctx, *state, state->batch, ctx->params.dtw_token_timestamps, true);
-                });
-
-        if (!ok) {
-            WHISPER_LOG_ERROR("%s: failed to init decoder allocator\n", __func__);
-            whisper_free_state(state);
-            return nullptr;
-        }
-
-        WHISPER_LOG_INFO("%s: compute buffer (decode) = %7.2f MB\n", __func__, whisper_sched_size(state->sched_decode) / 1e6);
-    }
-
-    return state;
-}
-
-int whisper_ctx_init_openvino_encoder(
-        struct whisper_context * ctx,
-                    const char * model_path,
-                    const char * device,
-                    const char * cache_dir) {
-#ifndef WHISPER_USE_OPENVINO
-    (void)(ctx);
-    (void)(model_path);
-    (void)(device);
-    (void)(cache_dir);
-
-    return 1;
-#else
-    if (!model_path && ctx->path_model.empty()) {
-        WHISPER_LOG_ERROR("%s: model_path is nullptr, and ctx has no model_path set.\n", __func__);
-        return 1;
-    }
-
-    std::string path_encoder;
-    if (!model_path) {
-        //if model_path is not set, attempt to find it in the same directory as ggml-<model>.bin model
-        path_encoder = whisper_openvino_get_path_encoder(ctx->path_model);
-    } else {
-        path_encoder = model_path;
-    }
-
-    std::string path_cache;
-    if (!cache_dir) {
-        //if cache_dir is not set, set it as a dir residing next to ggml-<model>.bin
-        path_cache = whisper_openvino_get_path_cache(ctx->path_model);
-    } else {
-        path_cache = cache_dir;
-    }
-
-    WHISPER_LOG_INFO("%s: loading OpenVINO model from '%s'\n", __func__, path_encoder.c_str());
-    WHISPER_LOG_INFO("%s: first run on a device may take a while ...\n", __func__);
-
-    ctx->state->ctx_openvino = whisper_openvino_init(path_encoder.c_str(), device, path_cache.c_str());
-    if (!ctx->state->ctx_openvino) {
-        WHISPER_LOG_ERROR("%s: failed to init OpenVINO encoder from '%s'\n", __func__, path_encoder.c_str());
-        return 1;
-    } else {
-        WHISPER_LOG_INFO("%s: OpenVINO model loaded\n", __func__);
-    }
-
-    return 0;
-#endif
-}
-
-struct whisper_context_params whisper_context_default_params() {
-    struct whisper_context_params result = {
-        /*.use_gpu              =*/ true,
-        /*.flash_attn           =*/ false,
-        /*.gpu_device           =*/ 0,
-
-        /*.dtw_token_timestamps =*/ false,
-        /*.dtw_aheads_preset    =*/ WHISPER_AHEADS_NONE,
-        /*.dtw_n_top            =*/ -1,
-        /*.dtw_aheads           =*/ {
-            /*.n_heads          =*/ 0,
-            /*.heads            =*/ NULL,
-        },
-        /*.dtw_mem_size         =*/ 1024*1024*128,
-    };
-    return result;
-}
-
-struct whisper_context * whisper_init_from_file_with_params_no_state(const char * path_model, struct whisper_context_params params) {
-    WHISPER_LOG_INFO("%s: loading model from '%s'\n", __func__, path_model);
-#ifdef _MSC_VER
-    // Convert UTF-8 path to wide string (UTF-16) for Windows, resolving character encoding issues.
-    std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
-    std::wstring path_model_wide = converter.from_bytes(path_model);
-    auto fin = std::ifstream(path_model_wide, std::ios::binary);
-#else
-    auto fin = std::ifstream(path_model, std::ios::binary);
-#endif
-    if (!fin) {
-        WHISPER_LOG_ERROR("%s: failed to open '%s'\n", __func__, path_model);
-        return nullptr;
-    }
-
-    whisper_model_loader loader = {};
-
-    loader.context = &fin;
-
-    loader.read = [](void * ctx, void * output, size_t read_size) {
-        std::ifstream * fin = (std::ifstream*)ctx;
-        fin->read((char *)output, read_size);
-        return read_size;
-    };
-
-    loader.eof = [](void * ctx) {
-        std::ifstream * fin = (std::ifstream*)ctx;
-        return fin->eof();
-    };
-
-    loader.close = [](void * ctx) {
-        std::ifstream * fin = (std::ifstream*)ctx;
-        fin->close();
-    };
-
-    auto ctx = whisper_init_with_params_no_state(&loader, params);
-
-    if (ctx) {
-        ctx->path_model = path_model;
-    }
-
-    return ctx;
-}
-
-struct whisper_context * whisper_init_from_buffer_with_params_no_state(void * buffer, size_t buffer_size, struct whisper_context_params params) {
-    struct buf_context {
-        uint8_t* buffer;
-        size_t size;
-        size_t current_offset;
-    };
-
-    buf_context ctx = { reinterpret_cast<uint8_t*>(buffer), buffer_size, 0 };
-
-    WHISPER_LOG_INFO("%s: loading model from buffer\n", __func__);
-
-    whisper_model_loader loader = {};
-
-    loader.context = &ctx;
-
-    loader.read = [](void * ctx, void * output, size_t read_size) {
-        buf_context * buf = reinterpret_cast<buf_context *>(ctx);
-
-        size_t size_to_copy = buf->current_offset + read_size < buf->size ? read_size : buf->size - buf->current_offset;
-
-        memcpy(output, buf->buffer + buf->current_offset, size_to_copy);
-        buf->current_offset += size_to_copy;
-
-        return size_to_copy;
-    };
-
-    loader.eof = [](void * ctx) {
-        buf_context * buf = reinterpret_cast<buf_context *>(ctx);
-
-        return buf->current_offset >= buf->size;
-    };
-
-    loader.close = [](void * /*ctx*/) { };
-
-    return whisper_init_with_params_no_state(&loader, params);
-}
-
-struct whisper_context * whisper_init_with_params_no_state(struct whisper_model_loader * loader, struct whisper_context_params params) {
-    ggml_time_init();
-
-    if (params.flash_attn && params.dtw_token_timestamps) {
-        WHISPER_LOG_WARN("%s: dtw_token_timestamps is not supported with flash_attn - disabling\n", __func__);
-        params.dtw_token_timestamps = false;
-    }
-
-    WHISPER_LOG_INFO("%s: use gpu    = %d\n", __func__, params.use_gpu);
-    WHISPER_LOG_INFO("%s: flash attn = %d\n", __func__, params.flash_attn);
-    WHISPER_LOG_INFO("%s: gpu_device = %d\n", __func__, params.gpu_device);
-    WHISPER_LOG_INFO("%s: dtw        = %d\n", __func__, params.dtw_token_timestamps);
-
-    whisper_context * ctx = new whisper_context;
-    ctx->params = params;
-
-    if (!whisper_model_load(loader, *ctx)) {
-        loader->close(loader->context);
-        WHISPER_LOG_ERROR("%s: failed to load model\n", __func__);
-        delete ctx;
-        return nullptr;
-    }
-
-    loader->close(loader->context);
-
-    return ctx;
-}
-
-struct whisper_context * whisper_init_from_file_with_params(const char * path_model, struct whisper_context_params params) {
-    whisper_context * ctx = whisper_init_from_file_with_params_no_state(path_model, params);
-    if (!ctx) {
-        return nullptr;
-    }
-
-    ctx->state = whisper_init_state(ctx);
-    if (!ctx->state) {
-        whisper_free(ctx);
-        return nullptr;
-    }
-
-    return ctx;
-}
-
-struct whisper_context * whisper_init_from_buffer_with_params(void * buffer, size_t buffer_size, struct whisper_context_params params) {
-    whisper_context * ctx = whisper_init_from_buffer_with_params_no_state(buffer, buffer_size, params);
-    if (!ctx) {
-        return nullptr;
-    }
-
-    ctx->state = whisper_init_state(ctx);
-    if (!ctx->state) {
-        whisper_free(ctx);
-        return nullptr;
-    }
-
-    return ctx;
-}
-
-struct whisper_context * whisper_init_with_params(struct whisper_model_loader * loader, struct whisper_context_params params) {
-    whisper_context * ctx = whisper_init_with_params_no_state(loader, params);
-    if (!ctx) {
-        return nullptr;
-    }
-
-    ctx->state = whisper_init_state(ctx);
-    if (!ctx->state) {
-        whisper_free(ctx);
-        return nullptr;
-    }
-
-    return ctx;
-}
-
-struct whisper_context * whisper_init_from_file(const char * path_model) {
-    return whisper_init_from_file_with_params(path_model, whisper_context_default_params());
-}
-
-struct whisper_context * whisper_init_from_buffer(void * buffer, size_t buffer_size) {
-    return whisper_init_from_buffer_with_params(buffer, buffer_size, whisper_context_default_params());
-}
-
-struct whisper_context * whisper_init(struct whisper_model_loader * loader) {
-    return whisper_init_with_params(loader, whisper_context_default_params());
-}
-
-struct whisper_context * whisper_init_from_file_no_state(const char * path_model) {
-    return whisper_init_from_file_with_params_no_state(path_model, whisper_context_default_params());
-}
-
-struct whisper_context * whisper_init_from_buffer_no_state(void * buffer, size_t buffer_size) {
-    return whisper_init_from_buffer_with_params_no_state(buffer, buffer_size, whisper_context_default_params());
-}
-
-struct whisper_context * whisper_init_no_state(struct whisper_model_loader * loader) {
-    return whisper_init_with_params_no_state(loader, whisper_context_default_params());
-}
-
-void whisper_free_state(struct whisper_state * state) {
-    if (state) {
-        whisper_kv_cache_free(state->kv_self);
-        whisper_kv_cache_free(state->kv_cross);
-        whisper_kv_cache_free(state->kv_pad);
-
-        whisper_mel_free(state->mel);
-
-        delete state->mel_calc;
-        state->mel_calc = nullptr;
-        delete state->mel_calc_fallback;
-        state->mel_calc_fallback = nullptr;
-
-#ifdef WHISPER_USE_COREML
-        if (state->ctx_coreml != nullptr) {
-            whisper_coreml_free(state->ctx_coreml);
-            state->ctx_coreml = nullptr;
-        }
-#endif
-
-#ifdef WHISPER_USE_OPENVINO
-        if (state->ctx_openvino != nullptr) {
-            whisper_openvino_free(state->ctx_openvino);
-            state->ctx_openvino = nullptr;
-        }
-#endif
-
-        whisper_batch_free(state->batch);
-
-        ggml_backend_sched_free(state->sched_conv.sched);
-        ggml_backend_sched_free(state->sched_encode.sched);
-        ggml_backend_sched_free(state->sched_cross.sched);
-        ggml_backend_sched_free(state->sched_decode.sched);
-
-        for (auto & backend : state->backends) {
-            ggml_backend_free(backend);
-        }
-
-        // [EXPERIMENTAL] Token-level timestamps with DTW
-        aheads_masks_free(state->aheads_masks);
-
-        delete state;
-    }
-}
-
-void whisper_free(struct whisper_context * ctx) {
-    if (ctx) {
-        ggml_free(ctx->model.ctx);
-
-        ggml_backend_buffer_free(ctx->model.buffer);
-
-        whisper_free_state(ctx->state);
-
-        delete ctx;
-    }
-}
-
-void whisper_free_context_params(struct whisper_context_params * params) {
-    if (params) {
-        delete params;
-    }
-}
-
-void whisper_free_params(struct whisper_full_params * params) {
-    if (params) {
-        delete params;
-    }
-}
-
-int whisper_pcm_to_mel_with_state(struct whisper_context * ctx, struct whisper_state * state, const float * samples, int n_samples, int n_threads) {
-    const int64_t t_start_us = ggml_time_us();
-
-    whisper_mel_free(state->mel);
-    if (n_samples <= 5 * 60 * WHISPER_SAMPLE_RATE) {
-        // calculate mel spectrogram for lengths up to 5 minutes on the most optimal mel calculator
-        state->mel = state->mel_calc->calculate({samples, n_samples}, n_threads);
-    } else {
-        // calcuate mel spectrogram for longer audios on the CPU
-        // 1. gpu calculations may use hundreds of megabytes of memory for longer audios so we're being conservative
-        //    with our gpu demands
-        // 2. the time to transcribe audios this long will be dominated by the decoding time, so the mel calculation
-        //    taking longer is not a major concern
-        if (!state->mel_calc_fallback) {
-            state->mel_calc_fallback = new mel_calc_cpu(state->backends[0], ctx->model.filters);
-        }
-        state->mel = state->mel_calc_fallback->calculate({samples, n_samples}, n_threads);
-    }
-
-    state->t_mel_us += ggml_time_us() - t_start_us;
-
-    // Dump log_mel_spectrogram
-    //{
-    //    auto& mel = state->mel;
-    //    std::ofstream outFile("log_mel_spectrogram.json");
-    //    outFile << "[";
-    //    for (uint64_t i = 0; i < mel.data.size() - 1; i++) {
-    //        outFile << mel.data[i] << ", ";
-    //    }
-    //    outFile << mel.data[mel.data.size() - 1] << "]";
-    //    outFile.close();
-    //}
-    return 0;
-}
-
-int whisper_pcm_to_mel(struct whisper_context * ctx, const float * samples, int n_samples, int n_threads) {
-    return whisper_pcm_to_mel_with_state(ctx, ctx->state, samples, n_samples, n_threads);
-}
-
-int whisper_set_mel_with_state(
-        struct whisper_context * ctx,
-          struct whisper_state * state,
-                   const float * data,
-                           int   n_len,
-                           int   n_mel) {
-    if (n_mel != ctx->model.filters.n_mel) {
-        WHISPER_LOG_ERROR("%s: invalid number of mel bands: %d (expected %d)\n", __func__, n_mel, ctx->model.filters.n_mel);
-        return -1;
-    }
-
-    whisper_mel_free(state->mel);
-    whisper_mel_init(state->mel, state->backends[0], n_len, n_len, n_mel);
-
-    ggml_backend_tensor_set(state->mel.tensor, data, 0, ggml_nbytes(state->mel.tensor));
-
-    return 0;
-}
-
-int whisper_set_mel(
-        struct whisper_context * ctx,
-        const float * data,
-        int n_len,
-        int n_mel) {
-    return whisper_set_mel_with_state(ctx, ctx->state, data, n_len, n_mel);
-}
-
-int whisper_encode_with_state(struct whisper_context * ctx, struct whisper_state * state, int offset, int n_threads) {
-    if (!whisper_encode_internal(*ctx, *state, offset, n_threads, nullptr, nullptr)) {
-        WHISPER_LOG_ERROR("%s: failed to eval\n", __func__);
-        return -1;
-    }
-
-    return 0;
-}
-
-int whisper_encode(struct whisper_context * ctx, int offset, int n_threads) {
-    if (!whisper_encode_internal(*ctx, *ctx->state, offset, n_threads, nullptr, nullptr)) {
-        WHISPER_LOG_ERROR("%s: failed to eval\n", __func__);
-        return -1;
-    }
-
-    return 0;
-}
-
-int whisper_decode_with_state(struct whisper_context * ctx, struct whisper_state * state, const whisper_token * tokens, int n_tokens, int n_past, int n_threads) {
-    whisper_batch_prep_legacy(state->batch, tokens, n_tokens, n_past, 0);
-
-    whisper_kv_cache_seq_rm(state->kv_self, 0, n_past, -1);
-
-    if (!whisper_decode_internal(*ctx, *state, state->batch, n_threads, false, nullptr, nullptr)) {
-        WHISPER_LOG_ERROR("%s: failed to eval\n", __func__);
-        return 1;
-    }
-
-    return 0;
-}
-
-int whisper_decode(struct whisper_context * ctx, const whisper_token * tokens, int n_tokens, int n_past, int n_threads) {
-    if (ctx->state == nullptr) {
-        WHISPER_LOG_ERROR("%s: ERROR state was not loaded.\n", __func__);
-        return -1;
-    }
-
-    return whisper_decode_with_state(ctx, ctx->state, tokens, n_tokens, n_past, n_threads);
-}
-
-int whisper_tokenize(struct whisper_context * ctx, const char * text, whisper_token * tokens, int n_max_tokens) {
-    const auto res = tokenize(ctx->vocab, text);
-
-    if (n_max_tokens < (int) res.size()) {
-        WHISPER_LOG_ERROR("%s: too many resulting tokens: %d (max %d)\n", __func__, (int) res.size(), n_max_tokens);
-        return -(int) res.size();
-    }
-
-    for (int i = 0; i < (int) res.size(); i++) {
-        tokens[i] = res[i];
-    }
-
-    return res.size();
-}
-
-int whisper_token_count(struct whisper_context * ctx, const char * text) {
-    return -whisper_tokenize(ctx, text, NULL, 0);
-}
-
-int whisper_lang_max_id() {
-    auto max_id = 0;
-    for (const auto & kv : g_lang) {
-        max_id = std::max(max_id, kv.second.first);
-    }
-
-    return max_id;
-}
-
-int whisper_lang_id(const char * lang) {
-    if (!g_lang.count(lang)) {
-        for (const auto & kv : g_lang) {
-            if (kv.second.second == lang) {
-                return kv.second.first;
-            }
-        }
-
-        WHISPER_LOG_ERROR("%s: unknown language '%s'\n", __func__, lang);
-        return -1;
-    }
-    return g_lang.at(lang).first;
-}
-
-const char * whisper_lang_str(int id) {
-    for (const auto & kv : g_lang) {
-        if (kv.second.first == id) {
-            return kv.first.c_str();
-        }
-    }
-
-    WHISPER_LOG_ERROR("%s: unknown language id %d\n", __func__, id);
-    return nullptr;
-}
-
-const char * whisper_lang_str_full(int id) {
-   for (const auto & kv : g_lang) {
-        if (kv.second.first == id) {
-            return kv.second.second.c_str();
-        }
-    }
-
-    WHISPER_LOG_ERROR("%s: unknown language id %d\n", __func__, id);
-    return nullptr;
-}
-
-int whisper_lang_auto_detect_with_state(
-        struct whisper_context * ctx,
-          struct whisper_state * state,
-                           int   offset_ms,
-                           int   n_threads,
-                         float * lang_probs) {
-    const int seek = offset_ms/10;
-
-    if (seek < 0) {
-        WHISPER_LOG_ERROR("%s: offset %dms is before the start of the audio\n", __func__, offset_ms);
-        return -1;
-    }
-
-    if (seek >= state->mel.n_len_org) {
-        WHISPER_LOG_ERROR("%s: offset %dms is past the end of the audio (%dms)\n", __func__, offset_ms, state->mel.n_len_org*10);
-        return -2;
-    }
-
-    // run the encoder
-    if (whisper_encode_with_state(ctx, state, seek, n_threads) != 0) {
-        WHISPER_LOG_ERROR("%s: failed to encode\n", __func__);
-        return -6;
-    }
-
-    const std::vector<whisper_token> prompt = { whisper_token_sot(ctx) };
-
-    if (whisper_decode_with_state(ctx, state, prompt.data(), prompt.size(), 0, n_threads) != 0) {
-        WHISPER_LOG_ERROR("%s: failed to decode\n", __func__);
-        return -7;
-    }
-
-    auto & logits_id = state->decoders[0].logits_id;
-    logits_id.clear();
-
-    for (const auto & kv : g_lang) {
-        const auto token_lang = whisper_token_lang(ctx, kv.second.first);
-        logits_id.emplace_back(state->logits[token_lang], kv.second.first);
-    }
-
-    // sort descending
-    {
-        using pair_type = std::remove_reference<decltype(logits_id)>::type::value_type;
-        std::sort(logits_id.begin(), logits_id.end(), [](const pair_type & a, const pair_type & b) {
-            return a.first > b.first;
-        });
-    }
-
-    // softmax
-    {
-        const auto max = logits_id[0].first;
-
-        double sum = 0.0f;
-        for (auto & kv : logits_id) {
-            kv.first = exp(kv.first - max);
-            sum += kv.first;
-        }
-
-        for (auto & kv : logits_id) {
-            kv.first /= sum;
-        }
-    }
-
-    {
-        for (const auto & prob : logits_id) {
-            if (lang_probs) {
-                lang_probs[prob.second] = prob.first;
-            }
-
-            //printf("%s: lang %2d (%3s): %f\n", __func__, prob.second, whisper_lang_str(prob.second), prob.first);
-        }
-    }
-
-    return logits_id[0].second;
-}
-
-int whisper_lang_auto_detect(
-        struct whisper_context * ctx,
-                           int   offset_ms,
-                           int   n_threads,
-                         float * lang_probs) {
-    return whisper_lang_auto_detect_with_state(ctx, ctx->state, offset_ms, n_threads, lang_probs);
-}
-
-int whisper_model_n_vocab(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_vocab;
-}
-
-int whisper_model_n_audio_ctx(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_audio_ctx;
-}
-
-int whisper_model_n_audio_state(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_audio_state;
-}
-
-int whisper_model_n_audio_head(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_audio_head;
-}
-
-int whisper_model_n_audio_layer(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_audio_layer;
-}
-
-int whisper_model_n_text_ctx(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_text_ctx;
-}
-
-int whisper_model_n_text_state(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_text_state;
-}
-
-int whisper_model_n_text_head(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_text_head;
-}
-
-int whisper_model_n_text_layer(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_text_layer;
-}
-
-int whisper_model_n_mels(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_mels;
-}
-
-int whisper_model_ftype(struct whisper_context * ctx) {
-    return ctx->model.hparams.ftype;
-}
-
-int whisper_model_type(struct whisper_context * ctx) {
-    return ctx->model.type;
-}
-
-const char *whisper_model_type_readable(struct whisper_context * ctx) {
-    switch (ctx->model.type) {
-    case e_model::MODEL_TINY:
-        return "tiny";
-    case e_model::MODEL_BASE:
-        return "base";
-    case e_model::MODEL_SMALL:
-        return "small";
-    case e_model::MODEL_MEDIUM:
-        return "medium";
-    case e_model::MODEL_LARGE:
-        return "large";
-    default:
-        return "unknown";
-    }
-}
-
-int whisper_n_len_from_state(struct whisper_state * state) {
-    return state->mel.n_len_org;
-}
-
-int whisper_n_len(struct whisper_context * ctx) {
-    return ctx->state->mel.n_len_org;
-}
-
-int whisper_n_vocab(struct whisper_context * ctx) {
-    return ctx->vocab.n_vocab;
-}
-
-int whisper_n_text_ctx(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_text_ctx;
-}
-
-int whisper_n_audio_ctx(struct whisper_context * ctx) {
-    return ctx->model.hparams.n_audio_ctx;
-}
-
-int whisper_is_multilingual(struct whisper_context * ctx) {
-    return ctx->vocab.is_multilingual() ? 1 : 0;
-}
-
-float * whisper_get_logits(struct whisper_context * ctx) {
-    return ctx->state->logits.data();
-}
-
-float * whisper_get_logits_from_state(struct whisper_state * state) {
-    return state->logits.data();
-}
-
-const char * whisper_token_to_str(struct whisper_context * ctx, whisper_token token) {
-    return ctx->vocab.id_to_token.at(token).c_str();
-}
-
-whisper_token whisper_token_eot(struct whisper_context * ctx) {
-    return ctx->vocab.token_eot;
-}
-
-whisper_token whisper_token_sot(struct whisper_context * ctx) {
-    return ctx->vocab.token_sot;
-}
-
-whisper_token whisper_token_solm(struct whisper_context * ctx) {
-    return ctx->vocab.token_solm;
-}
-
-whisper_token whisper_token_prev(struct whisper_context * ctx) {
-    return ctx->vocab.token_prev;
-}
-
-whisper_token whisper_token_nosp(struct whisper_context * ctx) {
-    return ctx->vocab.token_nosp;
-}
-
-whisper_token whisper_token_not(struct whisper_context * ctx) {
-    return ctx->vocab.token_not;
-}
-
-whisper_token whisper_token_beg(struct whisper_context * ctx) {
-    return ctx->vocab.token_beg;
-}
-
-whisper_token whisper_token_lang(struct whisper_context * ctx, int lang_id) {
-    return whisper_token_sot(ctx) + 1 + lang_id;
-}
-
-whisper_token whisper_token_translate(struct whisper_context * ctx) {
-    return ctx->vocab.token_translate;
-}
-
-whisper_token whisper_token_transcribe(struct whisper_context * ctx) {
-    return ctx->vocab.token_transcribe;
-}
-
-void whisper_print_timings(struct whisper_context * ctx) {
-    const int64_t t_end_us = ggml_time_us();
-
-    WHISPER_LOG_INFO("\n");
-    WHISPER_LOG_INFO("%s:     load time = %8.2f ms\n", __func__, ctx->t_load_us / 1000.0f);
-    if (ctx->state != nullptr) {
-
-        const int32_t n_sample = std::max(1, ctx->state->n_sample);
-        const int32_t n_encode = std::max(1, ctx->state->n_encode);
-        const int32_t n_decode = std::max(1, ctx->state->n_decode);
-        const int32_t n_batchd = std::max(1, ctx->state->n_batchd);
-        const int32_t n_prompt = std::max(1, ctx->state->n_prompt);
-
-        WHISPER_LOG_INFO("%s:     fallbacks = %3d p / %3d h\n", __func__, ctx->state->n_fail_p, ctx->state->n_fail_h);
-        WHISPER_LOG_INFO("%s:      mel time = %8.2f ms\n", __func__, ctx->state->t_mel_us / 1000.0f);
-        WHISPER_LOG_INFO("%s:   sample time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_sample_us, n_sample, 1e-3f * ctx->state->t_sample_us / n_sample);
-        WHISPER_LOG_INFO("%s:   encode time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_encode_us, n_encode, 1e-3f * ctx->state->t_encode_us / n_encode);
-        WHISPER_LOG_INFO("%s:   decode time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_decode_us, n_decode, 1e-3f * ctx->state->t_decode_us / n_decode);
-        WHISPER_LOG_INFO("%s:   batchd time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_batchd_us, n_batchd, 1e-3f * ctx->state->t_batchd_us / n_batchd);
-        WHISPER_LOG_INFO("%s:   prompt time = %8.2f ms / %5d runs (%8.2f ms per run)\n", __func__, 1e-3f * ctx->state->t_prompt_us, n_prompt, 1e-3f * ctx->state->t_prompt_us / n_prompt);
-    }
-    WHISPER_LOG_INFO("%s:    total time = %8.2f ms\n", __func__, (t_end_us - ctx->t_start_us)/1000.0f);
-}
-
-void whisper_reset_timings(struct whisper_context * ctx) {
-    ctx->t_start_us = ggml_time_us();
-    if (ctx->state != nullptr) {
-        ctx->state->t_mel_us = 0;
-        ctx->state->t_sample_us = 0;
-        ctx->state->t_encode_us = 0;
-        ctx->state->t_decode_us = 0;
-        ctx->state->t_batchd_us = 0;
-        ctx->state->t_prompt_us = 0;
-        ctx->state->n_sample = 0;
-        ctx->state->n_encode = 0;
-        ctx->state->n_decode = 0;
-        ctx->state->n_batchd = 0;
-        ctx->state->n_prompt = 0;
-    }
-}
-
-static int whisper_has_coreml(void) {
-#ifdef WHISPER_USE_COREML
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-static int whisper_has_openvino(void) {
-#ifdef WHISPER_USE_OPENVINO
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-const char * whisper_print_system_info(void) {
-    static std::string s;
-
-    s  = "";
-    s += "AVX = "       + std::to_string(ggml_cpu_has_avx())       + " | ";
-    s += "AVX2 = "      + std::to_string(ggml_cpu_has_avx2())      + " | ";
-    s += "AVX512 = "    + std::to_string(ggml_cpu_has_avx512())    + " | ";
-    s += "FMA = "       + std::to_string(ggml_cpu_has_fma())       + " | ";
-    s += "NEON = "      + std::to_string(ggml_cpu_has_neon())      + " | ";
-    s += "ARM_FMA = "   + std::to_string(ggml_cpu_has_arm_fma())   + " | ";
-    s += "METAL = "     + std::to_string(ggml_cpu_has_metal())     + " | ";
-    s += "F16C = "      + std::to_string(ggml_cpu_has_f16c())      + " | ";
-    s += "FP16_VA = "   + std::to_string(ggml_cpu_has_fp16_va())   + " | ";
-    s += "WASM_SIMD = " + std::to_string(ggml_cpu_has_wasm_simd()) + " | ";
-    s += "BLAS = "      + std::to_string(ggml_cpu_has_blas())      + " | ";
-    s += "SSE3 = "      + std::to_string(ggml_cpu_has_sse3())      + " | ";
-    s += "SSSE3 = "     + std::to_string(ggml_cpu_has_ssse3())     + " | ";
-    s += "VSX = "       + std::to_string(ggml_cpu_has_vsx())       + " | ";
-    s += "CUDA = "      + std::to_string(ggml_cpu_has_cuda())      + " | ";
-    s += "COREML = "    + std::to_string(whisper_has_coreml())     + " | ";
-    s += "OPENVINO = "  + std::to_string(whisper_has_openvino())          ;
-
-    return s.c_str();
-}
-
-//////////////////////////////////
-// Grammar - ported from llama.cpp
-//////////////////////////////////
-
-// Decodes a UTF-8 string which may end in an incomplete sequence. Adds a terminating 0 for use as
-// pointer. If an invalid sequence is encountered, returns `whisper_partial_utf8.n_remain == -1`.
-std::pair<std::vector<uint32_t>, whisper_partial_utf8> decode_utf8(
-        const char         * src,
-        whisper_partial_utf8   partial_start) {
-    static const int      lookup[] = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 3, 4 };
-    const char          * pos      = src;
-    std::vector<uint32_t> code_points;
-    uint32_t              value    = partial_start.value;
-    int                   n_remain = partial_start.n_remain;
-
-    // continue previous decode, if applicable
-    while (*pos != 0 && n_remain > 0) {
-        uint8_t next_byte = static_cast<uint8_t>(*pos);
-        if ((next_byte >> 6) != 2) {
-            // invalid sequence, abort
-            code_points.push_back(0);
-            return std::make_pair(std::move(code_points), whisper_partial_utf8{ 0, -1 });
-        }
-        value = (value << 6) + (next_byte & 0x3F);
-        ++pos;
-        --n_remain;
-    }
-
-    if (partial_start.n_remain > 0 && n_remain == 0) {
-        code_points.push_back(value);
-    }
-
-    // decode any subsequent utf-8 sequences, which may end in an incomplete one
-    while (*pos != 0) {
-        uint8_t  first_byte = static_cast<uint8_t>(*pos);
-        uint8_t  highbits   = first_byte >> 4;
-                 n_remain   = lookup[highbits] - 1;
-
-        if (n_remain < 0) {
-            // invalid sequence, abort
-            code_points.clear();
-            code_points.push_back(0);
-            return std::make_pair(std::move(code_points), whisper_partial_utf8{ 0, n_remain });
-        }
-
-        uint8_t  mask       = (1 << (7 - n_remain)) - 1;
-                 value      = first_byte & mask;
-        ++pos;
-        while (*pos != 0 && n_remain > 0) {
-            value = (value << 6) + (static_cast<uint8_t>(*pos) & 0x3F);
-            ++pos;
-            --n_remain;
-        }
-        if (n_remain == 0) {
-            code_points.push_back(value);
-        }
-    }
-    code_points.push_back(0);
-
-    return std::make_pair(std::move(code_points), whisper_partial_utf8{ value, n_remain });
-}
-
-// returns true iff pos points to the end of one of the definitions of a rule
-static bool whisper_grammar_is_end_of_sequence(const whisper_grammar_element * pos) {
-    switch (pos->type) {
-        case WHISPER_GRETYPE_END: return true;  // NOLINT
-        case WHISPER_GRETYPE_ALT: return true;  // NOLINT
-        default:                return false;
-    }
-}
-
-// returns true iff chr satisfies the char range at pos (regular or inverse range)
-// asserts that pos is pointing to a char range element
-static std::pair<bool, const whisper_grammar_element *> whisper_grammar_match_char(
-        const whisper_grammar_element * pos,
-        const uint32_t                chr) {
-
-    bool found            = false;
-    bool is_positive_char = pos->type == WHISPER_GRETYPE_CHAR;
-
-    WHISPER_ASSERT(is_positive_char || pos->type == WHISPER_GRETYPE_CHAR_NOT); // NOLINT
-
-    do {
-        if (pos[1].type == WHISPER_GRETYPE_CHAR_RNG_UPPER) {
-            // inclusive range, e.g. [a-z]
-            found = found || (pos->value <= chr && chr <= pos[1].value);
-            pos += 2;
-        } else {
-            // exact char match, e.g. [a] or "a"
-            found = found || pos->value == chr;
-            pos += 1;
-        }
-    } while (pos->type == WHISPER_GRETYPE_CHAR_ALT);
-
-    return std::make_pair(found == is_positive_char, pos);
-}
-
-// returns true iff some continuation of the given partial UTF-8 sequence could satisfy the char
-// range at pos (regular or inverse range)
-// asserts that pos is pointing to a char range element
-static bool whisper_grammar_match_partial_char(
-        const whisper_grammar_element * pos,
-        const whisper_partial_utf8      partial_utf8) {
-
-    bool is_positive_char = pos->type == WHISPER_GRETYPE_CHAR;
-    WHISPER_ASSERT(is_positive_char || pos->type == WHISPER_GRETYPE_CHAR_NOT);
-
-    uint32_t partial_value = partial_utf8.value;
-    int      n_remain      = partial_utf8.n_remain;
-
-    // invalid sequence or 7-bit char split across 2 bytes (overlong)
-    if (n_remain < 0 || (n_remain == 1 && partial_value < 2)) {
-        return false;
-    }
-
-    // range of possible code points this partial UTF-8 sequence could complete to
-    uint32_t low  = partial_value << (n_remain * 6);
-    uint32_t high = low | ((1 << (n_remain * 6)) - 1);
-
-    if (low == 0) {
-        if (n_remain == 2) {
-            low = 1 << 11;
-        } else if (n_remain == 3) {
-            low = 1 << 16;
-        }
-    }
-
-    do {
-        if (pos[1].type == WHISPER_GRETYPE_CHAR_RNG_UPPER) {
-            // inclusive range, e.g. [a-z]
-            if (pos->value <= high && low <= pos[1].value) {
-                return is_positive_char;
-            }
-            pos += 2;
-        } else {
-            // exact char match, e.g. [a] or "a"
-            if (low <= pos->value && pos->value <= high) {
-                return is_positive_char;
-            }
-            pos += 1;
-        }
-    } while (pos->type == WHISPER_GRETYPE_CHAR_ALT);
-
-    return !is_positive_char;
-}
-
-
-// transforms a grammar pushdown stack into N possible stacks, all ending
-// at a character range (terminal element)
-static void whisper_grammar_advance_stack(
-        const std::vector<std::vector<whisper_grammar_element>>   & rules,
-        const std::vector<const whisper_grammar_element *>        & stack,
-        std::vector<std::vector<const whisper_grammar_element *>> & new_stacks) {
-
-    if (stack.empty()) {
-        new_stacks.push_back(stack);
-        return;
-    }
-
-    const whisper_grammar_element * pos = stack.back();
-
-    switch (pos->type) {
-        case WHISPER_GRETYPE_RULE_REF: {
-            const size_t                  rule_id = static_cast<size_t>(pos->value);
-            const whisper_grammar_element * subpos  = rules[rule_id].data();
-            do {
-                // init new stack without the top (pos)
-                std::vector<const whisper_grammar_element *> new_stack(stack.begin(), stack.end() - 1);
-                if (!whisper_grammar_is_end_of_sequence(pos + 1)) {
-                    // if this rule ref is followed by another element, add that to stack
-                    new_stack.push_back(pos + 1);
-                }
-                if (!whisper_grammar_is_end_of_sequence(subpos)) {
-                    // if alternate is nonempty, add to stack
-                    new_stack.push_back(subpos);
-                }
-                whisper_grammar_advance_stack(rules, new_stack, new_stacks);
-                while (!whisper_grammar_is_end_of_sequence(subpos)) {
-                    // scan to end of alternate def
-                    subpos++;
-                }
-                if (subpos->type == WHISPER_GRETYPE_ALT) {
-                    // there's another alternate def of this rule to process
-                    subpos++;
-                } else {
-                    break;
-                }
-            } while (true);
-            break;
-        }
-        case WHISPER_GRETYPE_CHAR:
-        case WHISPER_GRETYPE_CHAR_NOT:
-            new_stacks.push_back(stack);
-            break;
-        default:
-            // end of alternate (WHISPER_GRETYPE_END, WHISPER_GRETYPE_ALT) or middle of char range
-            // (WHISPER_GRETYPE_CHAR_ALT, WHISPER_GRETYPE_CHAR_RNG_UPPER); stack should never be left on
-            // those
-            WHISPER_ASSERT(false);
-    }
-}
-
-// takes a set of possible pushdown stacks on a grammar, which are required to
-// be positioned at a character range (see `whisper_grammar_advance_stack`), and
-// produces the N possible stacks if the given char is accepted at those
-// positions
-static std::vector<std::vector<const whisper_grammar_element *>> whisper_grammar_accept(
-        const std::vector<std::vector<whisper_grammar_element>>         & rules,
-        const std::vector<std::vector<const whisper_grammar_element *>> & stacks,
-        const uint32_t                                                  chr) {
-
-    std::vector<std::vector<const whisper_grammar_element *>> new_stacks;
-
-    for (const auto & stack : stacks) {
-        if (stack.empty()) {
-            continue;
-        }
-
-        auto match = whisper_grammar_match_char(stack.back(), chr);
-        if (match.first) {
-            const whisper_grammar_element * pos = match.second;
-
-            // update top of stack to next element, if any
-            std::vector<const whisper_grammar_element *> new_stack(stack.begin(), stack.end() - 1);
-            if (!whisper_grammar_is_end_of_sequence(pos)) {
-                new_stack.push_back(pos);
-            }
-            whisper_grammar_advance_stack(rules, new_stack, new_stacks);
-        }
-    }
-
-    return new_stacks;
-}
-
-static std::vector<whisper_grammar_candidate> whisper_grammar_reject_candidates(
-        const std::vector<std::vector<whisper_grammar_element>>         & rules,
-        const std::vector<std::vector<const whisper_grammar_element *>> & stacks,
-        const std::vector<whisper_grammar_candidate>                    & candidates);
-
-static std::vector<whisper_grammar_candidate> whisper_grammar_reject_candidates_for_stack(
-        const std::vector<std::vector<whisper_grammar_element>> & rules,
-        const std::vector<const whisper_grammar_element *>      & stack,
-        const std::vector<whisper_grammar_candidate>            & candidates) {
-
-    std::vector<whisper_grammar_candidate> rejects;
-
-    if (stack.empty()) {
-        for (auto tok : candidates) {
-            if (*tok.code_points != 0 || tok.partial_utf8.n_remain != 0) {
-                rejects.push_back(tok);
-            }
-        }
-        return rejects;
-    }
-
-    const whisper_grammar_element * stack_pos = stack.back();
-
-    std::vector<whisper_grammar_candidate> next_candidates;
-    for (auto tok : candidates) {
-        if (*tok.code_points == 0) {
-            // reached end of full codepoints in token, reject iff it ended in a partial sequence
-            // that cannot satisfy this position in grammar
-            if (tok.partial_utf8.n_remain != 0 && !whisper_grammar_match_partial_char(stack_pos, tok.partial_utf8)) {
-                rejects.push_back(tok);
-            }
-        } else if (whisper_grammar_match_char(stack_pos, *tok.code_points).first) {
-            next_candidates.push_back({ tok.id, tok.code_points + 1, tok.partial_utf8 });
-        } else {
-            rejects.push_back(tok);
-        }
-    }
-
-    const auto * stack_pos_after = whisper_grammar_match_char(stack_pos, 0).second;
-
-    // update top of stack to next element, if any
-    std::vector<const whisper_grammar_element *> stack_after(stack.begin(), stack.end() - 1);
-    if (!whisper_grammar_is_end_of_sequence(stack_pos_after)) {
-        stack_after.push_back(stack_pos_after);
-    }
-    std::vector<std::vector<const whisper_grammar_element *>> next_stacks;
-    whisper_grammar_advance_stack(rules, stack_after, next_stacks);
-
-    auto next_rejects = whisper_grammar_reject_candidates(rules, next_stacks, next_candidates);
-    for (auto tok : next_rejects) {
-        rejects.push_back({ tok.id, tok.code_points - 1, tok.partial_utf8 });
-    }
-
-    return rejects;
-}
-
-static std::vector<whisper_grammar_candidate> whisper_grammar_reject_candidates(
-        const std::vector<std::vector<whisper_grammar_element>>         & rules,
-        const std::vector<std::vector<const whisper_grammar_element *>> & stacks,
-        const std::vector<whisper_grammar_candidate>                    & candidates) {
-    if (candidates.empty() || stacks.empty()) {
-        return std::vector<whisper_grammar_candidate>();
-    }
-
-    auto rejects = whisper_grammar_reject_candidates_for_stack(rules, stacks.front(), candidates);
-
-    for (size_t i = 1, size = stacks.size(); i < size; ++i) {
-        rejects = whisper_grammar_reject_candidates_for_stack(rules, stacks[i], rejects);
-    }
-    return rejects;
-}
-
-static struct whisper_grammar whisper_grammar_init(
-            const whisper_grammar_element ** rules,
-                                 size_t      n_rules,
-                                 size_t      i_start_rule) {
-    const whisper_grammar_element * pos;
-
-    // copy rule definitions into vectors
-    std::vector<std::vector<whisper_grammar_element>> vec_rules(n_rules);
-    for (size_t i = 0; i < n_rules; i++) {
-        for (pos = rules[i]; pos->type != WHISPER_GRETYPE_END; pos++) {
-            vec_rules[i].push_back(*pos);
-        }
-        vec_rules[i].push_back({WHISPER_GRETYPE_END, 0});
-    }
-
-    // loop over alternates of start rule to build initial stacks
-    std::vector<std::vector<const whisper_grammar_element *>> stacks;
-    pos = rules[i_start_rule];
-    do {
-        std::vector<const whisper_grammar_element *> stack;
-        if (!whisper_grammar_is_end_of_sequence(pos)) {
-            // if alternate is nonempty, add to stack
-            stack.push_back(pos);
-        }
-        whisper_grammar_advance_stack(vec_rules, stack, stacks);
-        while (!whisper_grammar_is_end_of_sequence(pos)) {
-            // scan to end of alternate def
-            pos++;
-        }
-        if (pos->type == WHISPER_GRETYPE_ALT) {
-            // there's another alternate def of this rule to process
-            pos++;
-        } else {
-            break;
-        }
-    } while (true);
-
-    return { std::move(vec_rules), std::move(stacks), {} };
-}
-
-static void whisper_suppress_invalid_grammar(
-             whisper_context  & ctx,
-    const whisper_full_params & params,
-           std::vector<float> & logits,
-    const     whisper_grammar & grammar) {
-
-    if (grammar.rules.empty() || grammar.stacks.empty()) {
-        return;
-    }
-
-    //bool allow_eot = false;
-    //for (const auto & stack : grammar.stacks) {
-    //    if (stack.empty()) {
-    //        allow_eot = true;
-    //        break;
-    //    }
-    //}
-
-    const whisper_token eot = whisper_token_eot(&ctx);
-
-    std::vector<std::pair<std::vector<uint32_t>, whisper_partial_utf8>> candidates_decoded;
-    std::vector<whisper_grammar_candidate>                              candidates_grammar;
-
-    for (whisper_token id = 0; id < eot; ++id) {
-        const std::string & text = ctx.vocab.id_to_token[id];
-        if (!text.empty()) {
-            candidates_decoded.push_back(decode_utf8(text.c_str(), grammar.partial_utf8));
-            candidates_grammar.push_back({ id, candidates_decoded.back().first.data(), candidates_decoded.back().second });
-        }
-    }
-
-    const auto rejects = whisper_grammar_reject_candidates(grammar.rules, grammar.stacks, candidates_grammar);
-
-    for (const auto & reject : rejects) {
-        logits[reject.id] -= params.grammar_penalty;
-    }
-
-    // when the grammar allows a continuation, we penalize the end-of-text token
-    //if (!allow_eot) {
-    //    logits[eot] -= params.grammar_penalty;
-    //}
-    //fprintf(stderr, "Allowed: (%zu tokens)\n", size - rejects.size());
-}
-
-static void whisper_grammar_accept_token(whisper_context & ctx, whisper_grammar & grammar, whisper_token token) {
-    if (grammar.rules.empty() || grammar.stacks.empty()) {
-        return;
-    }
-
-    //fprintf(stderr, "Accept: '%s'\n", ctx.vocab.id_to_token[token].c_str());
-
-    const std::string & text = ctx.vocab.id_to_token[token];
-
-    if (text.rfind("[_", 0) == 0) {
-        // fprintf(stderr, " (skipped)\n");
-        return;
-    }
-    // fprintf(stderr, "\n");
-
-    // Note terminating 0 in decoded string
-    const auto   decoded     = decode_utf8(text.c_str(), grammar.partial_utf8);
-    const auto & code_points = decoded.first;
-    for (auto it = code_points.begin(), end = code_points.end() - 1; it != end; ++it) {
-        grammar.stacks = whisper_grammar_accept(grammar.rules, grammar.stacks, *it);
-    }
-    grammar.partial_utf8 = decoded.second;
-}
-
-//////////////
-// END grammar
-//////////////
-
-////////////////////////////////////////////////////////////////////////////
-
-struct whisper_context_params * whisper_context_default_params_by_ref() {
-    struct whisper_context_params params = whisper_context_default_params();
-
-    struct whisper_context_params* result = new whisper_context_params();
-    *result = params;
-    return result;
-}
-
-struct whisper_full_params * whisper_full_default_params_by_ref(enum whisper_sampling_strategy strategy) {
-    struct whisper_full_params params = whisper_full_default_params(strategy);
-
-    struct whisper_full_params* result = new whisper_full_params();
-    *result = params;
-    return result;
-}
-
-struct whisper_full_params whisper_full_default_params(enum whisper_sampling_strategy strategy) {
-    struct whisper_full_params result = {
-        /*.strategy          =*/ strategy,
-
-        /*.n_threads         =*/ std::min(4, (int32_t) std::thread::hardware_concurrency()),
-        /*.n_max_text_ctx    =*/ 16384,
-        /*.offset_ms         =*/ 0,
-        /*.duration_ms       =*/ 0,
-
-        /*.translate         =*/ false,
-        /*.no_context        =*/ true,
-        /*.no_timestamps     =*/ false,
-        /*.single_segment    =*/ false,
-        /*.print_special     =*/ false,
-        /*.print_progress    =*/ true,
-        /*.print_realtime    =*/ false,
-        /*.print_timestamps  =*/ true,
-
-        /*.token_timestamps  =*/ false,
-        /*.thold_pt          =*/ 0.01f,
-        /*.thold_ptsum       =*/ 0.01f,
-        /*.max_len           =*/ 0,
-        /*.split_on_word     =*/ false,
-        /*.max_tokens        =*/ 0,
-
-        /*.debug_mode        =*/ false,
-        /*.audio_ctx         =*/ 0,
-
-        /*.tdrz_enable       =*/ false,
-
-        /* suppress_regex    =*/ nullptr,
-
-        /*.initial_prompt    =*/ nullptr,
-        /*.prompt_tokens     =*/ nullptr,
-        /*.prompt_n_tokens   =*/ 0,
-
-        /*.language          =*/ "en",
-        /*.detect_language   =*/ false,
-
-        /*.suppress_blank    =*/ true,
-        /*.suppress_non_speech_tokens =*/ false,
-
-        /*.temperature       =*/  0.0f,
-        /*.max_initial_ts    =*/  1.0f,
-        /*.length_penalty    =*/ -1.0f,
-
-        /*.temperature_inc   =*/  0.2f,
-        /*.entropy_thold     =*/  2.4f,
-        /*.logprob_thold     =*/ -1.0f,
-        /*.no_speech_thold   =*/  0.6f,
-
-        /*.greedy            =*/ {
-            /*.best_of   =*/ -1,
-        },
-
-        /*.beam_search      =*/ {
-            /*.beam_size =*/ -1,
-
-            /*.patience  =*/ -1.0f,
-        },
-
-        /*.new_segment_callback           =*/ nullptr,
-        /*.new_segment_callback_user_data =*/ nullptr,
-
-        /*.progress_callback           =*/ nullptr,
-        /*.progress_callback_user_data =*/ nullptr,
-
-        /*.encoder_begin_callback           =*/ nullptr,
-        /*.encoder_begin_callback_user_data =*/ nullptr,
-
-        /*.abort_callback                   =*/ nullptr,
-        /*.abort_callback_user_data         =*/ nullptr,
-
-        /*.logits_filter_callback           =*/ nullptr,
-        /*.logits_filter_callback_user_data =*/ nullptr,
-
-        /*.grammar_rules   =*/ nullptr,
-        /*.n_grammar_rules =*/ 0,
-        /*.i_start_rule    =*/ 0,
-        /*.grammar_penalty =*/ 100.0f,
-    };
-
-    switch (strategy) {
-        case WHISPER_SAMPLING_GREEDY:
-            {
-                result.greedy = {
-                    /*.best_of   =*/ 5,
-                };
-            } break;
-        case WHISPER_SAMPLING_BEAM_SEARCH:
-            {
-                result.beam_search = {
-                    /*.beam_size =*/ 5,
-
-                    /*.patience  =*/ -1.0f,
-                };
-            } break;
-    }
-
-    return result;
-}
-
-// forward declarations
-static std::vector<float> get_signal_energy(const float * signal, int n_samples, int n_samples_per_half_window);
-static void whisper_exp_compute_token_level_timestamps(
-        struct whisper_context & ctx,
-          struct whisper_state & state,
-                           int   i_segment,
-                         float   thold_pt,
-                         float   thold_ptsum);
-
-static inline bool should_split_on_word(const char * txt, bool split_on_word) {
-    if (!split_on_word) return true;
-
-    return txt[0] == ' ';
-}
-
-static void whisper_exp_compute_token_level_timestamps_dtw(
-            struct whisper_context * ctx,
-              struct whisper_state * state,
-        struct whisper_full_params   params,
-                               int   i_segment,
-                            size_t   n_segments,
-                               int   seek,
-                               int   n_frames,
-                               int   medfilt_width,
-                               int   n_threads);
-
-// wrap the last segment to max_len characters
-// returns the number of new segments
-static int whisper_wrap_segment(struct whisper_context & ctx, struct whisper_state & state, int max_len, bool split_on_word) {
-    auto segment = state.result_all.back();
-
-    int res = 1;
-    int acc = 0;
-
-    std::string text;
-
-    for (int i = 0; i < (int) segment.tokens.size(); i++) {
-        const auto & token = segment.tokens[i];
-        if (token.id >= whisper_token_eot(&ctx)) {
-            continue;
-        }
-
-        const auto txt = whisper_token_to_str(&ctx, token.id);
-        const int cur = strlen(txt);
-
-        if (acc + cur > max_len && i > 0 && should_split_on_word(txt, split_on_word)) {
-            state.result_all.back().text = std::move(text);
-            state.result_all.back().t1 = token.t0;
-            state.result_all.back().tokens.resize(i);
-            state.result_all.back().speaker_turn_next = false;
-
-            state.result_all.push_back({});
-            state.result_all.back().t0 = token.t0;
-            state.result_all.back().t1 = segment.t1;
-
-            // add tokens [i, end] to the new segment
-            state.result_all.back().tokens.insert(
-                state.result_all.back().tokens.end(),
-                    segment.tokens.begin() + i,
-                    segment.tokens.end());
-
-            state.result_all.back().speaker_turn_next = segment.speaker_turn_next;
-
-            acc = 0;
-            text = "";
-
-            segment = state.result_all.back();
-            i = -1;
-
-            res++;
-        } else {
-            acc += cur;
-            text += txt;
-        }
-    }
-
-    state.result_all.back().text = std::move(text);
-
-    return res;
-}
-
-static const std::vector<std::string> non_speech_tokens = {
-    "\"", "#", "(", ")", "*", "+", "/", ":", ";", "<", "=", ">", "@", "[", "\\", "]", "^",
-    "_", "`", "{", "|", "}", "~", "「", "」", "『", "』", "<<", ">>", "<<<", ">>>", "--",
-    "---", "-(", "-[", "('", "(\"", "((", "))", "(((", ")))", "[[", "]]", "{{", "}}", "♪♪",
-    "♪♪♪","♩", "♪", "♫", "♬", "♭", "♮", "♯"
-};
-
-// process the logits for the selected decoder
-// - applies logit filters
-// - computes logprobs and probs
-// TODO: optimize
-static void whisper_process_logits(
-              struct whisper_context & ctx,
-               struct whisper_state  & state,
-              struct whisper_decoder & decoder,
-    const struct whisper_full_params   params,
-                               float   temperature) {
-    const auto & vocab      = ctx.vocab;
-    const auto & tokens_cur = decoder.sequence.tokens;
-
-    const bool is_initial = tokens_cur.size() == 0;
-    const int  n_logits   = vocab.id_to_token.size();
-
-    WHISPER_ASSERT(n_logits == ctx.vocab.n_vocab);
-
-    // extract the logits for the last token
-    // we will be mutating, and therefore we don't want to use the ctx.logits buffer directly
-    auto & probs    = decoder.probs;
-    auto & logits   = decoder.logits;
-    auto & logprobs = decoder.logprobs;
-    {
-        logits.resize(n_logits);
-        memcpy(logits.data(), state.logits.data() + decoder.i_batch*n_logits, n_logits*sizeof(float));
-
-        if (temperature > 0.0f) {
-            for (int i = 0; i < n_logits; i++) {
-                logits[i] /= temperature;
-            }
-        }
-
-        // will be populated a bit later
-        probs.resize(n_logits);
-        logprobs.resize(n_logits);
-    }
-
-    // apply logit filters here
-    // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L480-L493
-    {
-        // suppress blank
-        // https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L388-L390
-        if (params.suppress_blank) {
-            if (is_initial) {
-                logits[vocab.token_eot]           = -INFINITY;
-                logits[vocab.token_to_id.at(" ")] = -INFINITY;
-            }
-        }
-
-        // suppress <|notimestamps|> token
-        // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L410-L412
-        logits[vocab.token_not] = -INFINITY;
-        if (params.no_timestamps) {
-            for (int i = vocab.token_beg; i < n_logits; ++i) {
-                logits[i] = -INFINITY;
-            }
-        }
-
-        // suppress sot and nosp tokens
-        logits[vocab.token_sot]  = -INFINITY;
-        logits[vocab.token_nosp] = -INFINITY; // TODO: ignore this token for now
-
-        // [TDRZ] when tinydiarize is disabled, suppress solm token
-        if (params.tdrz_enable == false) {
-            logits[vocab.token_solm] = -INFINITY;
-        }
-
-        // suppress task tokens
-        logits[vocab.token_translate]  = -INFINITY;
-        logits[vocab.token_transcribe] = -INFINITY;
-        logits[vocab.token_prev]       = -INFINITY;
-
-        // suppress lang tokens
-        for (size_t i = 0; i < g_lang.size(); ++i) {
-            logits[whisper_token_lang(&ctx, i)] = -INFINITY;
-        }
-
-        // suppress prev token
-        logits[vocab.token_prev] = -INFINITY;
-
-        if (params.logits_filter_callback) {
-            params.logits_filter_callback(&ctx, &state, tokens_cur.data(), tokens_cur.size(), logits.data(), params.logits_filter_callback_user_data);
-        }
-
-        // suppress any tokens matching a regular expression
-        // ref: https://github.com/openai/whisper/discussions/1041
-        if (params.suppress_regex != nullptr) {
-            std::regex re(params.suppress_regex);
-            for (std::pair<whisper_vocab::token, whisper_vocab::id> token_id : vocab.token_to_id) {
-                if (std::regex_match(token_id.first, re)) {
-                    logits[token_id.second] = -INFINITY;
-                }
-            }
-        }
-
-        // suppress non-speech tokens
-        // ref: https://github.com/openai/whisper/blob/7858aa9c08d98f75575035ecd6481f462d66ca27/whisper/tokenizer.py#L224-L253
-        if (params.suppress_non_speech_tokens) {
-            for (const std::string & token : non_speech_tokens) {
-                const std::string suppress_tokens[] = {token, " " + token};
-                for (const std::string & suppress_token : suppress_tokens) {
-                    if (vocab.token_to_id.find(suppress_token) != vocab.token_to_id.end()) {
-                        logits[vocab.token_to_id.at(suppress_token)] = -INFINITY;
-                    }
-                }
-            }
-
-            // allow hyphens "-" and single quotes "'" between words, but not at the beginning of a word
-            if (vocab.token_to_id.find(" -") != vocab.token_to_id.end()) {
-                logits[vocab.token_to_id.at(" -")] = -INFINITY;
-            }
-            if (vocab.token_to_id.find(" '") != vocab.token_to_id.end()) {
-                logits[vocab.token_to_id.at(" '")] = -INFINITY;
-            }
-        }
-
-        // timestamps have to appear in pairs, except directly before EOT; mask logits accordingly
-        // https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L414-L424
-        {
-            const bool last_was_timestamp        = tokens_cur.size() > 0 && tokens_cur.back().id >= vocab.token_beg;
-            const bool penultimate_was_timestamp = tokens_cur.size() < 2 || tokens_cur[tokens_cur.size() - 2].id >= vocab.token_beg;
-
-            //WHISPER_LOG_INFO("last_was_timestamp=%d penultimate_was_timestamp=%d\n", last_was_timestamp, penultimate_was_timestamp);
-
-            if (last_was_timestamp) {
-                if (penultimate_was_timestamp) {
-                    for (int i = vocab.token_beg; i < n_logits; ++i) {
-                        logits[i] = -INFINITY;
-                    }
-                } else {
-                    for (int i = 0; i < vocab.token_eot; ++i) {
-                        logits[i] = -INFINITY;
-                    }
-                }
-            }
-        }
-
-        // the initial timestamp cannot be larger than max_initial_ts
-        // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L426-L429
-        if (is_initial && params.max_initial_ts > 0.0f) {
-            const float precision = float(WHISPER_CHUNK_SIZE)/ctx.model.hparams.n_audio_ctx;
-            const int   tid0      = std::round(params.max_initial_ts/precision);
-
-            for (int i = vocab.token_beg + tid0 + 1; i < n_logits; ++i) {
-                logits[i] = -INFINITY;
-            }
-        }
-
-        // condition timestamp tokens to be increasing
-        // ref: https://github.com/openai/whisper/pull/831#issuecomment-1385910556
-        if (decoder.has_ts) {
-            const int tid0 = decoder.seek_delta/2;
-
-            for (int i = vocab.token_beg; i < vocab.token_beg + tid0; ++i) {
-                logits[i] = -INFINITY;
-            }
-        }
-
-        // populate the logprobs array (log_softmax)
-        {
-            const float logit_max = *std::max_element(logits.begin(), logits.end());
-            float logsumexp = 0.0f;
-            for (int i = 0; i < n_logits; ++i) {
-                if (logits[i] > -INFINITY) {
-                    logsumexp += expf(logits[i] - logit_max);
-                }
-            }
-            logsumexp = logf(logsumexp) + logit_max;
-
-            for (int i = 0; i < n_logits; ++i) {
-                if (logits[i] > -INFINITY) {
-                    logprobs[i] = logits[i] - logsumexp;
-                } else {
-                    logprobs[i] = -INFINITY;
-                }
-            }
-        }
-
-        // if sum of probability over timestamps is above any other token, sample timestamp
-        // ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L431-L437
-        {
-            // logsumexp over timestamps
-            float timestamp_logprob = -INFINITY;
-            {
-                float logsumexp = 0.0f;
-                const float logprob_max = *std::max_element(logprobs.begin() + vocab.token_beg, logprobs.end());
-                for (int i = vocab.token_beg; i < n_logits; ++i) {
-                    if (logprobs[i] > -INFINITY) {
-                        logsumexp += expf(logprobs[i] - logprob_max);
-                    }
-                }
-                if (logsumexp > 0.0f) {
-                    timestamp_logprob = logf(logsumexp) + logprob_max;
-                }
-            }
-
-            const float max_text_token_logprob = *std::max_element(logprobs.begin(), logprobs.begin() + vocab.token_beg);
-
-            //WHISPER_LOG_INFO("timestamp_logprob=%f max_text_token_logprob=%f\n", timestamp_logprob, max_text_token_logprob);
-
-            if (timestamp_logprob > max_text_token_logprob) {
-                for (int i = 0; i < vocab.token_beg; ++i) {
-                    logits[i]   = -INFINITY;
-                    logprobs[i] = -INFINITY;
-                }
-            } else {
-                if (params.n_grammar_rules > 0) {
-                    whisper_suppress_invalid_grammar(ctx, params, logits, decoder.grammar);
-
-                    // populate the logprobs array (log_softmax)
-                    {
-                        const float logit_max = *std::max_element(logits.begin(), logits.end());
-                        float logsumexp = 0.0f;
-                        for (int i = 0; i < n_logits; ++i) {
-                            if (logits[i] > -INFINITY) {
-                                logsumexp += expf(logits[i] - logit_max);
-                            }
-                        }
-                        logsumexp = logf(logsumexp) + logit_max;
-
-                        for (int i = 0; i < n_logits; ++i) {
-                            if (logits[i] > -INFINITY) {
-                                logprobs[i] = logits[i] - logsumexp;
-                            } else {
-                                logprobs[i] = -INFINITY;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    // compute probs
-    {
-        for (int i = 0; i < n_logits; ++i) {
-            if (logits[i] == -INFINITY) {
-                probs[i] = 0.0f;
-            } else {
-                probs[i] = expf(logprobs[i]);
-            }
-        }
-    }
-
-#if 0
-    // print first 100 logits - token string : logit
-    //for (int i = 0; i < 10; i++) {
-    //    const auto token   = vocab.id_to_token.at(i);
-    //    const auto prob    = probs[i];
-    //    const auto logit   = logits[i];
-    //    const auto logprob = logprobs[i];
-    //    printf("%16s : prob=%9.5f logit=%9.5f logprob=%9.5f\n", token.c_str(), prob, logit, logprob);
-    //}
-
-    // print sorted
-    {
-        std::vector<std::pair<float, int>> pairs;
-
-        for (int i = 0; i < n_logits; ++i) {
-            pairs.push_back(std::make_pair(probs[i], i));
-        }
-
-        std::sort(pairs.begin(), pairs.end(), [](const std::pair<float, int>& a, const std::pair<float, int>& b) {
-            return a.first > b.first;
-        });
-
-        for (int i = 0; i < 10; i++) {
-            const auto token   = vocab.id_to_token.at(pairs[i].second);
-            const auto prob    = pairs[i].first;
-            const auto logit   = logits[pairs[i].second];
-            const auto logprob = logprobs[pairs[i].second];
-            printf("%16s : id=%6d prob=%9.5f logit=%9.5f logprob=%9.5f '%s'\n", token.c_str(), pairs[i].second, prob, logit, logprob, token.c_str());
-        }
-
-        printf("----------------\n");
-    }
-
-    // "And", "and", " And", " and"
-    //printf("logits[\"and\"]  = %f\n", logits[vocab.token_to_id.at("and")]);
-    //printf("logits[\"And\"]  = %f\n", logits[vocab.token_to_id.at("And")]);
-    //printf("logits[\" and\"] = %f\n", logits[vocab.token_to_id.at(" and")]);
-    //printf("logits[\" And\"] = %f\n", logits[vocab.token_to_id.at(" And")]);
-    //printf("logits[\" so\"]  = %f\n", logits[vocab.token_to_id.at(" so")]);
-
-    //printf("logprobs[\"and\"]  = %f\n", logprobs[vocab.token_to_id.at("and")]);
-    //printf("logprobs[\"And\"]  = %f\n", logprobs[vocab.token_to_id.at("And")]);
-    //printf("logprobs[\" and\"] = %f\n", logprobs[vocab.token_to_id.at(" and")]);
-    //printf("logprobs[\" And\"] = %f\n", logprobs[vocab.token_to_id.at(" And")]);
-    //printf("logprobs[\" so\"]  = %f\n", logprobs[vocab.token_to_id.at(" so")]);
-
-    //printf("probs[\"and\"]  = %f\n", probs[vocab.token_to_id.at("and")]);
-    //printf("probs[\"And\"]  = %f\n", probs[vocab.token_to_id.at("And")]);
-    //printf("probs[\" and\"] = %f\n", probs[vocab.token_to_id.at(" and")]);
-    //printf("probs[\" And\"] = %f\n", probs[vocab.token_to_id.at(" And")]);
-    //printf("probs[\" so\"]  = %f\n", probs[vocab.token_to_id.at(" so")]);
-#endif
-}
-
-static bool whisper_sequence_tokens_equal(const whisper_sequence & a, const whisper_sequence & b) {
-    if (a.tokens.size() != b.tokens.size()) {
-        return false;
-    }
-    // sequences are more likely to diverge at the end
-    for (int i = a.tokens.size() - 1; i >= 0; i--) {
-        if (a.tokens[i].id != b.tokens[i].id) {
-            return false;
-        }
-    }
-    return true;
-}
-
-static whisper_token_data whisper_sample_token(
-            whisper_context & ctx,
-      const whisper_decoder & decoder,
-                       bool   best) {
-    whisper_token_data result = {
-        0, 0, 0.0f, 0.0f, 0.0f, 0.0f, -1, -1, -1, 0.0f,
-    };
-
-    const auto & vocab = ctx.vocab;
-
-    const auto & probs    = decoder.probs;
-    const auto & logprobs = decoder.logprobs;
-
-    const int n_logits = vocab.n_vocab;
-
-    {
-        double sum_ts = 0.0;
-        double max_ts = 0.0;
-
-        for (int i = vocab.token_beg; i < n_logits; i++) {
-            if (probs[i] == -INFINITY) {
-                continue;
-            }
-
-            sum_ts += probs[i];
-            if (max_ts < probs[i]) {
-                max_ts = probs[i];
-                result.tid = i;
-            }
-        }
-
-        result.pt    = max_ts/(sum_ts + 1e-10);
-        result.ptsum = sum_ts;
-    }
-
-    if (best) {
-        for (int i = 0; i < n_logits; ++i) {
-            if (result.p < probs[i]) {
-                result.id   = i;
-                result.p    = probs[i];
-                result.plog = logprobs[i];
-            }
-        }
-    } else {
-        std::discrete_distribution<> dist(probs.begin(), probs.end());
-
-        result.id   = dist(decoder.rng);
-        result.p    = probs[result.id];
-        result.plog = logprobs[result.id];
-    }
-
-    if (result.id >= vocab.token_beg) {
-        result.tid = result.id;
-        result.pt  = result.p;
-    }
-
-    return result;
-}
-
-static std::vector<whisper_token_data> whisper_sample_token_topk(
-            whisper_context & ctx,
-            whisper_decoder & decoder,
-                        int   k) {
-    const auto & vocab = ctx.vocab;
-
-    const auto & probs    = decoder.probs;
-    const auto & logits   = decoder.logits;
-    const auto & logprobs = decoder.logprobs;
-
-    const int n_logits = vocab.n_vocab;
-
-    auto & logits_id = decoder.logits_id;
-
-    logits_id.resize(n_logits);
-    for (int i = 0; i < n_logits; ++i) {
-        logits_id[i].first = logits[i];
-        logits_id[i].second = i;
-    }
-
-    {
-        using pair_type = std::remove_reference<decltype(logits_id)>::type::value_type;
-        std::partial_sort(
-                logits_id.begin(),
-                logits_id.begin() + k, logits_id.end(),
-                [](const pair_type & a, const pair_type & b) {
-            return a.first > b.first;
-        });
-    }
-
-    std::vector<whisper_token_data> result;
-    result.reserve(k);
-
-    whisper_token tid = vocab.token_beg;
-
-    float pt    = 0.0;
-    float ptsum = 0.0;
-
-    {
-        double sum_ts = 0.0;
-        double max_ts = 0.0;
-
-        for (int i = vocab.token_beg; i < n_logits; i++) {
-            if (probs[i] == -INFINITY) {
-                continue;
-            }
-
-            sum_ts += probs[i];
-            if (max_ts < probs[i]) {
-                max_ts = probs[i];
-                tid = i;
-            }
-        }
-
-        pt    = max_ts/(sum_ts + 1e-10);
-        ptsum = sum_ts;
-    }
-
-    std::discrete_distribution<> dist(probs.begin(), probs.end());
-
-    for (int i = 0; i < k; ++i) {
-        const auto id = dist(decoder.rng);
-        //printf("XXX %d %d %f %f %f %f\n", id, tid, probs[id], logprobs[id], pt, ptsum);
-
-        result.push_back({ id, tid, probs[id], logprobs[id], pt, ptsum, -1, -1, -1, 0.0f, });
-
-        if (result[i].id >= vocab.token_beg) {
-            result[i].tid = result[i].id;
-            result[i].pt  = result[i].p;
-        }
-    }
-
-    return result;
-}
-
-// ref: https://github.com/openai/whisper/blob/0b1ba3d46ebf7fe6f953acfd8cad62a4f851b49f/whisper/decoding.py#L178-L192
-static void whisper_sequence_score(
-        const struct whisper_full_params & params,
-                        whisper_sequence & sequence) {
-    if (sequence.result_len == 0) {
-        return;
-    }
-
-    double result = 0.0f;
-
-    for (int i = 0; i < sequence.result_len; ++i) {
-        result += sequence.tokens[i].plog;
-    }
-
-    sequence.sum_logprobs = result;
-    sequence.avg_logprobs = result/sequence.result_len;
-
-    double penalty = sequence.result_len;
-
-    if (params.length_penalty > 0.0f) {
-        penalty = pow((5.0 + penalty)/6.0, params.length_penalty);
-    }
-
-    sequence.score = result/penalty;
-
-    // compute the entropy of the sequence of the last 32 tokens
-    {
-        const int n = 32;
-
-        int cnt = 0;
-        double entropy = 0.0f;
-
-        std::map<whisper_token, int> token_counts;
-        for (int i = std::max(0, sequence.result_len - n); i < sequence.result_len; ++i) {
-            token_counts[sequence.tokens[i].id]++;
-            cnt++;
-        }
-
-        for (const auto & kv : token_counts) {
-            const auto p = kv.second/(double)cnt;
-            entropy -= p*log(p);
-
-            //WHISPER_LOG_DEBUG("entropy: %d %f %f, count %d\n", kv.first, p, log(p), kv.second);
-        }
-
-        sequence.entropy = entropy;
-    }
-}
-
-int whisper_full_with_state(
-        struct whisper_context * ctx,
-          struct whisper_state * state,
-    struct whisper_full_params   params,
-                   const float * samples,
-                           int   n_samples) {
-    // clear old results
-    auto & result_all = state->result_all;
-
-    result_all.clear();
-
-    if (n_samples > 0) {
-        // compute log mel spectrogram
-        if (whisper_pcm_to_mel_with_state(ctx, state, samples, n_samples, params.n_threads) != 0) {
-            WHISPER_LOG_ERROR("%s: failed to compute log mel spectrogram\n", __func__);
-            return -2;
-        }
-    }
-
-    // auto-detect language if not specified
-    if (params.language == nullptr || strlen(params.language) == 0 || strcmp(params.language, "auto") == 0 || params.detect_language) {
-        std::vector<float> probs(whisper_lang_max_id() + 1, 0.0f);
-
-        const auto lang_id = whisper_lang_auto_detect_with_state(ctx, state, 0, params.n_threads, probs.data());
-        if (lang_id < 0) {
-            WHISPER_LOG_ERROR("%s: failed to auto-detect language\n", __func__);
-            return -3;
-        }
-        state->lang_id = lang_id;
-        params.language = whisper_lang_str(lang_id);
-
-        WHISPER_LOG_INFO("%s: auto-detected language: %s (p = %f)\n", __func__, params.language, probs[whisper_lang_id(params.language)]);
-        if (params.detect_language) {
-            return 0;
-        }
-    }
-
-    if (params.token_timestamps) {
-        state->t_beg    = 0;
-        state->t_last   = 0;
-        state->tid_last = 0;
-        if (n_samples > 0) {
-            state->energy = get_signal_energy(samples, n_samples, 32);
-        }
-    }
-
-    const int seek_start = params.offset_ms/10;
-    const int seek_end = params.duration_ms == 0 ? whisper_n_len_from_state(state) : seek_start + params.duration_ms/10;
-
-    // if length of spectrogram is less than 1.0s (100 frames), then return
-    // basically don't process anything that is less than 1.0s
-    // see issue #39: https://github.com/ggerganov/whisper.cpp/issues/39
-    if (seek_end < seek_start + 100) {
-        WHISPER_LOG_WARN("%s: input is too short - %d ms < 1000 ms. consider padding the input audio with silence\n", __func__, (seek_end - seek_start)*10);
-        return 0;
-    }
-
-    // a set of temperatures to use
-    // [ t0, t0 + delta, t0 + 2*delta, ..., < 1.0f + 1e-6f ]
-    std::vector<float> temperatures;
-    if (params.temperature_inc > 0.0f) {
-        for (float t = params.temperature; t < 1.0f + 1e-6f; t += params.temperature_inc) {
-            temperatures.push_back(t);
-        }
-    } else {
-        temperatures.push_back(params.temperature);
-    }
-
-    // initialize the decoders
-    int n_decoders = 1;
-
-    switch (params.strategy) {
-        case WHISPER_SAMPLING_GREEDY:
-            {
-                n_decoders = params.greedy.best_of;
-            } break;
-        case WHISPER_SAMPLING_BEAM_SEARCH:
-            {
-                n_decoders = std::max(params.greedy.best_of, params.beam_search.beam_size);
-            } break;
-    };
-
-    n_decoders = std::max(1, n_decoders);
-
-    if (n_decoders > WHISPER_MAX_DECODERS) {
-        WHISPER_LOG_ERROR("%s: too many decoders requested (%d), max = %d\n", __func__, n_decoders, WHISPER_MAX_DECODERS);
-        return -4;
-    }
-
-    // TAGS: WHISPER_DECODER_INIT
-    for (int j = 1; j < n_decoders; j++) {
-        auto & decoder = state->decoders[j];
-
-        decoder.sequence.tokens.reserve(state->decoders[0].sequence.tokens.capacity());
-
-        decoder.probs.resize   (ctx->vocab.n_vocab);
-        decoder.logits.resize  (ctx->vocab.n_vocab);
-        decoder.logprobs.resize(ctx->vocab.n_vocab);
-        decoder.logits_id.reserve(ctx->model.hparams.n_vocab);
-
-        decoder.rng = std::mt19937(0);
-    }
-
-    // the accumulated text context so far
-    auto & prompt_past = state->prompt_past;
-    if (params.no_context) {
-        prompt_past.clear();
-    }
-
-    // prepare prompt
-    {
-        std::vector<whisper_token> prompt_tokens;
-
-        // initial prompt
-        if (!params.prompt_tokens && params.initial_prompt) {
-            prompt_tokens.resize(1024);
-            int n_needed = whisper_tokenize(ctx, params.initial_prompt, prompt_tokens.data(), prompt_tokens.size());
-            if (n_needed < 0) {
-                prompt_tokens.resize(-n_needed);
-                n_needed = whisper_tokenize(ctx, params.initial_prompt, prompt_tokens.data(), prompt_tokens.size());
-            }
-            prompt_tokens.resize(n_needed);
-            params.prompt_tokens   = prompt_tokens.data();
-            params.prompt_n_tokens = prompt_tokens.size();
-        }
-
-        // prepend the prompt tokens to the prompt_past
-        if (params.prompt_tokens && params.prompt_n_tokens > 0) {
-            // parse tokens from the pointer
-            for (int i = 0; i < params.prompt_n_tokens; i++) {
-                prompt_past.push_back(params.prompt_tokens[i]);
-            }
-            std::rotate(prompt_past.begin(), prompt_past.end() - params.prompt_n_tokens, prompt_past.end());
-        }
-    }
-
-    // overwrite audio_ctx, max allowed is hparams.n_audio_ctx
-    if (params.audio_ctx > whisper_n_audio_ctx(ctx)) {
-        WHISPER_LOG_ERROR("%s: audio_ctx is larger than the maximum allowed (%d > %d)\n", __func__, params.audio_ctx, whisper_n_audio_ctx(ctx));
-        return -5;
-    }
-    state->exp_n_audio_ctx = params.audio_ctx;
-
-    // these tokens determine the task that will be performed
-    std::vector<whisper_token> prompt_init = { whisper_token_sot(ctx), };
-
-    if (whisper_is_multilingual(ctx)) {
-        const int lang_id = whisper_lang_id(params.language);
-        state->lang_id = lang_id;
-        prompt_init.push_back(whisper_token_lang(ctx, lang_id));
-        if (params.translate) {
-            prompt_init.push_back(whisper_token_translate(ctx));
-        } else {
-            prompt_init.push_back(whisper_token_transcribe(ctx));
-        }
-    }
-
-    // first release distilled models require the "no_timestamps" token
-    {
-        const bool is_distil = ctx->model.hparams.n_text_layer == 2 && ctx->model.hparams.n_vocab != 51866;
-        if (is_distil && !params.no_timestamps) {
-            WHISPER_LOG_WARN("%s: using first release distilled models - forcing no_timestamps\n", __func__);
-            params.no_timestamps = true;
-        }
-    }
-
-    if (params.no_timestamps) {
-        prompt_init.push_back(whisper_token_not(ctx));
-    }
-
-    int seek = seek_start;
-
-    std::vector<whisper_token> prompt;
-    prompt.reserve(whisper_n_text_ctx(ctx));
-
-    struct beam_candidate {
-        int decoder_idx;
-        int seek_delta;
-
-        bool has_ts;
-
-        whisper_sequence sequence;
-        whisper_grammar grammar;
-    };
-
-    std::vector<std::vector<beam_candidate>> bc_per_dec(n_decoders);
-    std::vector<beam_candidate> beam_candidates;
-
-    // main loop
-    while (true) {
-        if (params.progress_callback) {
-            const int progress_cur = (100*(seek - seek_start))/(seek_end - seek_start);
-
-            params.progress_callback(
-                ctx, state, progress_cur, params.progress_callback_user_data);
-        }
-
-        // if only 1 second left, then stop
-        if (seek + 100 >= seek_end) {
-            break;
-        }
-
-        if (params.encoder_begin_callback) {
-            if (params.encoder_begin_callback(ctx, state, params.encoder_begin_callback_user_data) == false) {
-                WHISPER_LOG_ERROR("%s: encoder_begin_callback returned false - aborting\n", __func__);
-                break;
-            }
-        }
-
-        // encode audio features starting at offset seek
-        if (!whisper_encode_internal(*ctx, *state, seek, params.n_threads, params.abort_callback, params.abort_callback_user_data)) {
-            WHISPER_LOG_ERROR("%s: failed to encode\n", __func__);
-            return -6;
-        }
-
-        // if there is a very short audio segment left to process, we remove any past prompt since it tends
-        // to confuse the decoder and often make it repeat or hallucinate stuff
-        if (seek > seek_start && seek + 500 >= seek_end) {
-            prompt_past.clear();
-        }
-
-        int best_decoder_id = 0;
-
-        for (int it = 0; it < (int) temperatures.size(); ++it) {
-            const float t_cur = temperatures[it];
-
-            int n_decoders_cur = 1;
-
-            switch (params.strategy) {
-                case whisper_sampling_strategy::WHISPER_SAMPLING_GREEDY:
-                    {
-                        if (t_cur > 0.0f) {
-                            n_decoders_cur = params.greedy.best_of;
-                        }
-                    } break;
-                case whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH:
-                    {
-                        if (t_cur > 0.0f) {
-                            n_decoders_cur = params.greedy.best_of;
-                        } else {
-                            n_decoders_cur = params.beam_search.beam_size;
-                        }
-                    } break;
-            };
-
-            n_decoders_cur = std::max(1, n_decoders_cur);
-
-            WHISPER_LOG_DEBUG("\n%s: strategy = %d, decoding with %d decoders, temperature = %.2f\n", __func__, params.strategy, n_decoders_cur, t_cur);
-
-            // TAGS: WHISPER_DECODER_INIT
-            for (int j = 0; j < n_decoders_cur; ++j) {
-                auto & decoder = state->decoders[j];
-
-                decoder.sequence.tokens.clear();
-                decoder.sequence.result_len       = 0;
-                decoder.sequence.sum_logprobs_all = 0.0;
-                decoder.sequence.sum_logprobs     = -INFINITY;
-                decoder.sequence.avg_logprobs     = -INFINITY;
-                decoder.sequence.entropy          = 0.0;
-                decoder.sequence.score            = -INFINITY;
-
-                decoder.seek_delta = 100*WHISPER_CHUNK_SIZE;
-
-                decoder.failed    = false;
-                decoder.completed = false;
-                decoder.has_ts    = false;
-
-                if (params.grammar_rules != nullptr) {
-                    decoder.grammar = whisper_grammar_init(params.grammar_rules, params.n_grammar_rules, params.i_start_rule);
-                } else {
-                    decoder.grammar = {};
-                }
-            }
-
-            // init prompt and kv cache for the current iteration
-            // TODO: do not recompute the prompt if it is the same as previous time
-            {
-                prompt.clear();
-
-                // if we have already generated some text, use it as a prompt to condition the next generation
-                if (!prompt_past.empty() && t_cur < 0.5f && params.n_max_text_ctx > 0) {
-                    int n_take = std::min(std::min(params.n_max_text_ctx, whisper_n_text_ctx(ctx)/2), int(prompt_past.size()));
-
-                    prompt = { whisper_token_prev(ctx) };
-                    prompt.insert(prompt.begin() + 1, prompt_past.end() - n_take, prompt_past.end());
-                }
-
-                // init new transcription with sot, language (opt) and task tokens
-                prompt.insert(prompt.end(), prompt_init.begin(), prompt_init.end());
-
-                // print the prompt
-                WHISPER_LOG_DEBUG("\n\n");
-                for (int i = 0; i < (int) prompt.size(); i++) {
-                    WHISPER_LOG_DEBUG("%s: prompt[%d] = %s\n", __func__, i, ctx->vocab.id_to_token.at(prompt[i]).c_str());
-                }
-                WHISPER_LOG_DEBUG("\n\n");
-
-                whisper_kv_cache_clear(state->kv_self);
-
-                whisper_batch_prep_legacy(state->batch, prompt.data(), prompt.size(), 0, 0);
-
-                if (!whisper_decode_internal(*ctx, *state, state->batch, params.n_threads, false, params.abort_callback, params.abort_callback_user_data)) {
-                    WHISPER_LOG_ERROR("%s: failed to decode\n", __func__);
-                    return -7;
-                }
-
-                {
-                    const int64_t t_start_sample_us = ggml_time_us();
-
-                    state->decoders[0].i_batch = prompt.size() - 1;
-
-                    whisper_process_logits(*ctx, *state, state->decoders[0], params, t_cur);
-
-                    for (int j = 1; j < n_decoders_cur; ++j) {
-                        auto & decoder = state->decoders[j];
-
-                        whisper_kv_cache_seq_cp(state->kv_self, 0, j, -1, -1);
-
-                        memcpy(decoder.probs.data(),    state->decoders[0].probs.data(),    decoder.probs.size()*sizeof(decoder.probs[0]));
-                        memcpy(decoder.logits.data(),   state->decoders[0].logits.data(),   decoder.logits.size()*sizeof(decoder.logits[0]));
-                        memcpy(decoder.logprobs.data(), state->decoders[0].logprobs.data(), decoder.logprobs.size()*sizeof(decoder.logprobs[0]));
-                    }
-
-                    state->t_sample_us += ggml_time_us() - t_start_sample_us;
-                }
-            }
-
-            for (int i = 0, n_max = whisper_n_text_ctx(ctx)/2 - 4; i < n_max; ++i) {
-                const int64_t t_start_sample_us = ggml_time_us();
-
-                if (params.strategy == whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH) {
-                    for (auto & bc : bc_per_dec) {
-                        bc.clear();
-                    }
-                }
-
-                // sampling
-                // TODO: avoid memory allocations, optimize, avoid threads?
-                {
-                    std::atomic<int> j_cur(0);
-
-                    auto process = [&]() {
-                        while (true) {
-                            const int j = j_cur.fetch_add(1);
-
-                            if (j >= n_decoders_cur) {
-                                break;
-                            }
-
-                            auto & decoder = state->decoders[j];
-
-                            if (decoder.completed || decoder.failed) {
-                                continue;
-                            }
-
-                            switch (params.strategy) {
-                                case whisper_sampling_strategy::WHISPER_SAMPLING_GREEDY:
-                                    {
-                                        if (t_cur < 1e-6f) {
-                                            decoder.sequence.tokens.push_back(whisper_sample_token(*ctx, decoder, true));
-                                        } else {
-                                            decoder.sequence.tokens.push_back(whisper_sample_token(*ctx, decoder, false));
-                                        }
-
-                                        decoder.sequence.sum_logprobs_all += decoder.sequence.tokens.back().plog;
-                                    } break;
-                                case whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH:
-                                    {
-                                        const auto tokens_new = whisper_sample_token_topk(*ctx, decoder, params.beam_search.beam_size);
-
-                                        for (const auto & token : tokens_new) {
-                                            bc_per_dec[j].push_back({ j, decoder.seek_delta, decoder.has_ts, decoder.sequence, decoder.grammar, });
-                                            bc_per_dec[j].back().sequence.tokens.push_back(token);
-                                            bc_per_dec[j].back().sequence.sum_logprobs_all += token.plog;
-                                        }
-                                    } break;
-                            };
-                        }
-                    };
-
-                    const int n_threads = std::min(params.n_threads, n_decoders_cur);
-
-                    if (n_threads == 1) {
-                        process();
-                    } else {
-                        std::vector<std::thread> threads(n_threads - 1);
-
-                        for (int t = 0; t < n_threads - 1; ++t) {
-                            threads[t] = std::thread(process);
-                        }
-
-                        process();
-
-                        for (int t = 0; t < n_threads - 1; ++t) {
-                            threads[t].join();
-                        }
-                    }
-                }
-
-                beam_candidates.clear();
-                for (const auto & bc : bc_per_dec) {
-                    beam_candidates.insert(beam_candidates.end(), bc.begin(), bc.end());
-
-                    if (!bc.empty()) {
-                        state->n_sample += 1;
-                    }
-                }
-
-                // for beam-search, choose the top candidates and update the KV caches
-                if (params.strategy == whisper_sampling_strategy::WHISPER_SAMPLING_BEAM_SEARCH) {
-                    std::sort(
-                            beam_candidates.begin(),
-                            beam_candidates.end(),
-                            [](const beam_candidate & a, const beam_candidate & b) {
-                        if (a.sequence.sum_logprobs_all != b.sequence.sum_logprobs_all) {
-                            return a.sequence.sum_logprobs_all > b.sequence.sum_logprobs_all;
-                        }
-                        return a.decoder_idx < b.decoder_idx;
-                    });
-
-                    uint32_t cur_c = 0;
-
-                    for (int j = 0; j < n_decoders_cur; ++j) {
-                        auto & decoder = state->decoders[j];
-
-                        if (decoder.completed || decoder.failed) {
-                            continue;
-                        }
-
-                        if (cur_c >= beam_candidates.size()) {
-                            cur_c = 0;
-                        }
-
-                        auto & cur = beam_candidates[cur_c++];
-
-                        while (beam_candidates.size() > cur_c && whisper_sequence_tokens_equal(beam_candidates[cur_c].sequence, cur.sequence) && i > 0) {
-                            ++cur_c;
-                        }
-
-                        decoder.seek_delta = cur.seek_delta;
-                        decoder.has_ts     = cur.has_ts;
-                        decoder.sequence   = cur.sequence;
-                        decoder.grammar    = cur.grammar;
-
-                        whisper_kv_cache_seq_cp(state->kv_self, cur.decoder_idx, WHISPER_MAX_DECODERS + j, -1, -1);
-
-                        WHISPER_LOG_DEBUG("%s: beam search: decoder %d: from decoder %d: token = %10s, plog = %8.5f, sum_logprobs = %8.5f\n",
-                                __func__, j, cur.decoder_idx, ctx->vocab.id_to_token.at(decoder.sequence.tokens.back().id).c_str(), decoder.sequence.tokens.back().plog, decoder.sequence.sum_logprobs_all);
-                    }
-
-                    for (int j = 0; j < n_decoders_cur; ++j) {
-                        auto & decoder = state->decoders[j];
-
-                        if (decoder.completed || decoder.failed) {
-                            continue;
-                        }
-
-                        whisper_kv_cache_seq_rm(state->kv_self, j,                           -1, -1);
-                        whisper_kv_cache_seq_cp(state->kv_self, WHISPER_MAX_DECODERS + j, j, -1, -1);
-                        whisper_kv_cache_seq_rm(state->kv_self, WHISPER_MAX_DECODERS + j,    -1, -1);
-                    }
-                }
-
-                // update the decoder state
-                // - check if the sequence is completed
-                // - check if the sequence is failed
-                // - update sliding window based on timestamp tokens
-                for (int j = 0; j < n_decoders_cur; ++j) {
-                    auto & decoder = state->decoders[j];
-
-                    if (decoder.completed || decoder.failed) {
-                        continue;
-                    }
-
-                    auto & has_ts     = decoder.has_ts;
-                    auto & failed     = decoder.failed;
-                    auto & completed  = decoder.completed;
-                    auto & seek_delta = decoder.seek_delta;
-                    auto & result_len = decoder.sequence.result_len;
-
-                    {
-                        const auto & token = decoder.sequence.tokens.back();
-
-                        // timestamp token - update sliding window
-                        if (token.id > whisper_token_beg(ctx)) {
-                            const int seek_delta_new = 2*(token.id - whisper_token_beg(ctx));
-
-                            // do not allow to go back in time
-                            if (has_ts && seek_delta > seek_delta_new && result_len < i) {
-                                WHISPER_LOG_DEBUG("%s: decoder %d: failed due to seek_delta (%d > %d)\n", __func__, j, seek_delta, seek_delta_new);
-                                failed = true; // TODO: maybe this is not a failure ?
-                                continue;
-                            }
-
-                            seek_delta = seek_delta_new;
-                            result_len = i + 1;
-                            has_ts = true;
-                        }
-
-                        whisper_grammar_accept_token(*ctx, decoder.grammar, token.id);
-
-#ifdef WHISPER_DEBUG
-                        {
-                            const auto tt = token.pt > 0.10 ? ctx->vocab.id_to_token.at(token.tid) : "[?]";
-                            WHISPER_LOG_DEBUG("%s: id = %3d, decoder = %d, token = %6d, p = %6.3f, ts = %10s, %6.3f, result_len = %4d '%s'\n",
-                                    __func__, i, j, token.id, token.p, tt.c_str(), token.pt, result_len, ctx->vocab.id_to_token.at(token.id).c_str());
-                        }
-#endif
-
-                        // end of segment
-                        if (token.id == whisper_token_eot(ctx) ||               // end of text token
-                           (params.max_tokens > 0 && i >= params.max_tokens) || // max tokens per segment reached
-                           (has_ts && seek + seek_delta + 100 >= seek_end)      // end of audio reached
-                           ) {
-                            if (result_len == 0 && !params.no_timestamps) {
-                                if (seek + seek_delta + 100 >= seek_end) {
-                                    result_len = i + 1;
-                                } else {
-                                    WHISPER_LOG_DEBUG("%s: decoder %d failed (result_len = 0)\n", __func__, j);
-                                    failed = true;
-                                    continue;
-                                }
-                            }
-
-                            if (params.single_segment || params.no_timestamps) {
-                                result_len = i + 1;
-                                seek_delta = 100*WHISPER_CHUNK_SIZE;
-                            }
-
-                            WHISPER_LOG_DEBUG("%s: decoder %d completed\n", __func__, j);
-                            completed = true;
-                            continue;
-                        }
-
-                        // TESTS: if no tensors are loaded, it means we are running tests
-                        if (ctx->model.n_loaded == 0) {
-                            seek_delta = 100*WHISPER_CHUNK_SIZE;
-                            completed = true;
-                            continue;
-                        }
-                    }
-
-                    // sometimes, the decoding can get stuck in a repetition loop
-                    // this is an attempt to mitigate such cases - we flag the decoding as failed and use a fallback strategy
-                    if (i == n_max - 1 && (result_len == 0 || seek_delta < 100*WHISPER_CHUNK_SIZE/2)) {
-                        WHISPER_LOG_DEBUG("%s: decoder %d: failed due to repetition loop\n", __func__, j);
-                        failed = true;
-                        continue;
-                    }
-                }
-
-                // check if all decoders have finished (i.e. completed or failed)
-                {
-                    bool completed_all = true;
-
-                    for (int j = 0; j < n_decoders_cur; ++j) {
-                        auto & decoder = state->decoders[j];
-
-                        if (decoder.completed || decoder.failed) {
-                            continue;
-                        }
-
-                        completed_all = false;
-                    }
-
-                    if (completed_all) {
-                        break;
-                    }
-                }
-
-                state->t_sample_us += ggml_time_us() - t_start_sample_us;
-
-                // obtain logits for the next token
-                {
-                    auto & batch = state->batch;
-
-                    batch.n_tokens = 0;
-
-                    const int n_past = prompt.size() + i;
-
-                    for (int j = 0; j < n_decoders_cur; ++j) {
-                        auto & decoder = state->decoders[j];
-
-                        if (decoder.failed || decoder.completed) {
-                            continue;
-                        }
-
-                        //WHISPER_LOG_DEBUG("%s: decoder %d: token %d, seek_delta %d\n", __func__, j, decoder.sequence.tokens.back().id, decoder.seek_delta);
-
-                        decoder.i_batch = batch.n_tokens;
-
-                        batch.token   [batch.n_tokens]    = decoder.sequence.tokens.back().id;
-                        batch.pos     [batch.n_tokens]    = n_past;
-                        batch.n_seq_id[batch.n_tokens]    = 1;
-                        batch.seq_id  [batch.n_tokens][0] = j;
-                        batch.logits  [batch.n_tokens]    = 1;
-                        batch.n_tokens++;
-                    }
-
-                    assert(batch.n_tokens > 0);
-
-                    if (!whisper_decode_internal(*ctx, *state, state->batch, params.n_threads, false, params.abort_callback, params.abort_callback_user_data)) {
-                        WHISPER_LOG_ERROR("%s: failed to decode\n", __func__);
-                        return -8;
-                    }
-
-                    const int64_t t_start_sample_us = ggml_time_us();
-
-                    // TODO: avoid memory allocations, optimize, avoid threads?
-                    {
-                        std::atomic<int> j_cur(0);
-
-                        auto process = [&]() {
-                            while (true) {
-                                const int j = j_cur.fetch_add(1);
-
-                                if (j >= n_decoders_cur) {
-                                    break;
-                                }
-
-                                auto & decoder = state->decoders[j];
-
-                                if (decoder.failed || decoder.completed) {
-                                    continue;
-                                }
-
-                                whisper_process_logits(*ctx, *state, decoder, params, t_cur);
-                            }
-                        };
-
-                        const int n_threads = std::min(params.n_threads, n_decoders_cur);
-
-                        if (n_threads == 1) {
-                            process();
-                        } else {
-                            std::vector<std::thread> threads(n_threads - 1);
-
-                            for (int t = 0; t < n_threads - 1; ++t) {
-                                threads[t] = std::thread(process);
-                            }
-
-                            process();
-
-                            for (int t = 0; t < n_threads - 1; ++t) {
-                                threads[t].join();
-                            }
-                        }
-                    }
-
-                    state->t_sample_us += ggml_time_us() - t_start_sample_us;
-                }
-            }
-
-            // rank the resulting sequences and select the best one
-            {
-                double best_score = -INFINITY;
-
-                for (int j = 0; j < n_decoders_cur; ++j) {
-                    auto & decoder = state->decoders[j];
-
-                    if (decoder.failed) {
-                        continue;
-                    }
-
-                    decoder.sequence.tokens.resize(decoder.sequence.result_len);
-                    whisper_sequence_score(params, decoder.sequence);
-
-                    WHISPER_LOG_DEBUG("%s: decoder %2d: score = %8.5f, result_len = %3d, avg_logprobs = %8.5f, entropy = %8.5f\n",
-                            __func__, j, decoder.sequence.score, decoder.sequence.result_len, decoder.sequence.avg_logprobs, decoder.sequence.entropy);
-
-                    if (decoder.sequence.result_len > 32 && decoder.sequence.entropy < params.entropy_thold) {
-                        WHISPER_LOG_DEBUG("%s: decoder %2d: failed due to entropy %8.5f < %8.5f\n",
-                                __func__, j, decoder.sequence.entropy, params.entropy_thold);
-
-                        decoder.failed = true;
-                        state->n_fail_h++;
-
-                        continue;
-                    }
-
-                    if (best_score < decoder.sequence.score) {
-                        best_score = decoder.sequence.score;
-                        best_decoder_id = j;
-                    }
-                }
-
-                WHISPER_LOG_DEBUG("%s: best decoder = %d\n", __func__, best_decoder_id);
-            }
-
-            bool success = true;
-
-            // was the decoding successful for the current temperature?
-            // do fallback only if:
-            // - we are not at the last temperature
-            if (it != (int) temperatures.size() - 1) {
-                const auto & decoder = state->decoders[best_decoder_id];
-
-                if (decoder.failed || decoder.sequence.avg_logprobs < params.logprob_thold) {
-                    WHISPER_LOG_DEBUG("%s: failed due to avg_logprobs %8.5f < %8.5f\n", __func__, decoder.sequence.avg_logprobs, params.logprob_thold);
-                    success = false;
-                    state->n_fail_p++;
-                }
-            }
-
-            if (success) {
-                //for (auto & token : ctx->decoders[best_decoder_id].sequence.tokens) {
-                //    WHISPER_LOG_DEBUG("%s: token = %d, p = %6.3f, pt = %6.3f, ts = %s, str = %s\n", __func__, token.id, token.p, token.pt, ctx->vocab.id_to_token.at(token.tid).c_str(), ctx->vocab.id_to_token.at(token.id).c_str());
-                //}
-
-                break;
-            }
-
-            WHISPER_LOG_DEBUG("\n%s: failed to decode with temperature = %.2f\n", __func__, t_cur);
-        }
-
-        // output results through a user-provided callback
-        {
-            const auto & best_decoder = state->decoders[best_decoder_id];
-
-            const auto seek_delta = best_decoder.seek_delta;
-            const auto result_len = best_decoder.sequence.result_len;
-
-            const auto & tokens_cur = best_decoder.sequence.tokens;
-
-            // [EXPERIMENTAL] Token-level timestamps with DTW
-            const auto n_segments_before = state->result_all.size();
-
-            //WHISPER_LOG_DEBUG("prompt_init.size() = %d, prompt.size() = %d, result_len = %d, seek_delta = %d\n", prompt_init.size(), prompt.size(), result_len, seek_delta);
-
-            // update prompt_past
-            prompt_past.clear();
-            if (prompt.front() == whisper_token_prev(ctx)) {
-                prompt_past.insert(prompt_past.end(), prompt.begin() + 1, prompt.end() - prompt_init.size());
-            }
-
-            for (int i = 0; i < result_len; ++i) {
-                prompt_past.push_back(tokens_cur[i].id);
-            }
-
-            if (!tokens_cur.empty() && ctx->model.n_loaded > 0) {
-                int  i0 = 0;
-                auto t0 = seek + 2*(tokens_cur.front().tid - whisper_token_beg(ctx));
-
-                std::string text;
-                bool speaker_turn_next = false;
-
-                for (int i = 0; i < (int) tokens_cur.size(); i++) {
-                    //printf("%s: %18s %6.3f %18s %6.3f\n", __func__,
-                    //        ctx->vocab.id_to_token[tokens_cur[i].id].c_str(), tokens_cur[i].p,
-                    //        ctx->vocab.id_to_token[tokens_cur[i].tid].c_str(), tokens_cur[i].pt);
-
-                    if (params.print_special || tokens_cur[i].id < whisper_token_eot(ctx)) {
-                        text += whisper_token_to_str(ctx, tokens_cur[i].id);
-                    }
-
-                    // [TDRZ] record if speaker turn was predicted after current segment
-                    if (params.tdrz_enable && tokens_cur[i].id == whisper_token_solm(ctx)) {
-                        speaker_turn_next = true;
-                    }
-
-                    if (tokens_cur[i].id > whisper_token_beg(ctx) && !params.single_segment) {
-                        const auto t1 = seek + 2*(tokens_cur[i].tid - whisper_token_beg(ctx));
-
-                        if (!text.empty()) {
-                            const auto tt0 = t0;
-                            const auto tt1 = t1;
-
-                            if (params.print_realtime) {
-                                if (params.print_timestamps) {
-                                    printf("[%s --> %s]  %s\n", to_timestamp(tt0).c_str(), to_timestamp(tt1).c_str(), text.c_str());
-                                } else {
-                                    printf("%s", text.c_str());
-                                    fflush(stdout);
-                                }
-                            }
-
-                            //printf("tt0 = %d, tt1 = %d, text = %s, token = %s, token_id = %d, tid = %d\n", tt0, tt1, text.c_str(), ctx->vocab.id_to_token[tokens_cur[i].id].c_str(), tokens_cur[i].id, tokens_cur[i].tid);
-
-                            result_all.push_back({ tt0, tt1, text, {}, speaker_turn_next });
-                            for (int j = i0; j <= i; j++) {
-                                result_all.back().tokens.push_back(tokens_cur[j]);
-                            }
-
-                            int n_new = 1;
-
-                            if (params.token_timestamps) {
-                                whisper_exp_compute_token_level_timestamps(
-                                        *ctx, *state, result_all.size() - 1, params.thold_pt, params.thold_ptsum);
-
-                                if (params.max_len > 0) {
-                                    n_new = whisper_wrap_segment(*ctx, *state, params.max_len, params.split_on_word);
-                                }
-                            }
-                            if (params.new_segment_callback) {
-                                params.new_segment_callback(ctx, state, n_new, params.new_segment_callback_user_data);
-                            }
-                        }
-                        text = "";
-                        while (i < (int) tokens_cur.size() && tokens_cur[i].id > whisper_token_beg(ctx)) {
-                            i++;
-                        }
-                        i--;
-                        t0 = t1;
-                        i0 = i + 1;
-                        speaker_turn_next = false;
-                    }
-                }
-
-                if (!text.empty()) {
-                    const auto t1 = seek + seek_delta;
-
-                    const auto tt0 = t0;
-                    const auto tt1 = t1;
-
-                    if (params.print_realtime) {
-                        if (params.print_timestamps) {
-                            printf("[%s --> %s]  %s\n", to_timestamp(tt0).c_str(), to_timestamp(tt1).c_str(), text.c_str());
-                        } else {
-                            printf("%s", text.c_str());
-                            fflush(stdout);
-                        }
-                    }
-
-                    result_all.push_back({ tt0, tt1, text, {} , speaker_turn_next });
-                    for (int j = i0; j < (int) tokens_cur.size(); j++) {
-                        result_all.back().tokens.push_back(tokens_cur[j]);
-                    }
-
-                    int n_new = 1;
-
-                    if (params.token_timestamps) {
-                        whisper_exp_compute_token_level_timestamps(
-                                *ctx, *state, result_all.size() - 1, params.thold_pt, params.thold_ptsum);
-
-                        if (params.max_len > 0) {
-                            n_new = whisper_wrap_segment(*ctx, *state, params.max_len, params.split_on_word);
-                        }
-                    }
-                    if (params.new_segment_callback) {
-                        params.new_segment_callback(ctx, state, n_new, params.new_segment_callback_user_data);
-                    }
-                }
-            }
-
-            // FIXME: will timestamp offsets be correct?
-            // [EXPERIMENTAL] Token-level timestamps with DTW
-            {
-                const auto n_segments = state->result_all.size() - n_segments_before;
-                if (ctx->params.dtw_token_timestamps && n_segments) {
-                    const int n_frames = std::min(std::min(WHISPER_CHUNK_SIZE * 100, seek_delta), seek_end - seek);
-                    whisper_exp_compute_token_level_timestamps_dtw(
-                            ctx, state, params, result_all.size() - n_segments, n_segments, seek, n_frames, 7, params.n_threads);
-                }
-            }
-
-            // update audio window
-            seek += seek_delta;
-
-            WHISPER_LOG_DEBUG("seek = %d, seek_delta = %d\n", seek, seek_delta);
-        }
-    }
-
-    return 0;
-}
-
-int whisper_full(
-        struct whisper_context * ctx,
-    struct whisper_full_params   params,
-                   const float * samples,
-                           int   n_samples) {
-    return whisper_full_with_state(ctx, ctx->state, params, samples, n_samples);
-}
-
-int whisper_full_parallel(
-        struct whisper_context * ctx,
-        struct whisper_full_params params,
-        const float * samples,
-        int n_samples,
-        int n_processors) {
-    if (n_processors == 1) {
-        return whisper_full(ctx, params, samples, n_samples);
-    }
-    int ret = 0;
-
-    // prepare separate states for each thread
-    std::vector<whisper_state*> states;
-
-    const int offset_samples = (WHISPER_SAMPLE_RATE*params.offset_ms)/1000;
-    const int n_samples_per_processor = (n_samples - offset_samples)/n_processors;
-
-    // the calling thread will process the first chunk
-    // while the other threads will process the remaining chunks
-
-    std::vector<std::thread> workers(n_processors - 1);
-    for (int i = 0; i < n_processors - 1; ++i) {
-        // create a new state for each thread
-        states.push_back(whisper_init_state(ctx));
-
-        const int start_samples = offset_samples + (i + 1)*n_samples_per_processor;
-        const int n_samples_cur = (i == n_processors - 2) ? n_samples - start_samples : n_samples_per_processor;
-
-        auto params_cur = params;
-
-        params_cur.offset_ms = 0;
-        params_cur.print_progress = false;
-        params_cur.print_realtime = false;
-
-        params_cur.new_segment_callback = nullptr;
-        params_cur.new_segment_callback_user_data = nullptr;
-
-        params_cur.progress_callback = nullptr;
-        params_cur.progress_callback_user_data = nullptr;
-
-        workers[i] = std::thread(whisper_full_with_state, ctx, states[i], std::move(params_cur), samples + start_samples, n_samples_cur);
-    }
-
-    {
-        auto params_cur = params;
-
-        // We need to disable the print real-time for this one as well, otherwise it will show only for the first chunk.
-        params_cur.print_realtime = false;
-
-        // Run the first transformation using default state but only for the first chunk.
-        ret = whisper_full_with_state(ctx, ctx->state, std::move(params_cur), samples, offset_samples + n_samples_per_processor);
-    }
-
-    for (int i = 0; i < n_processors - 1; ++i) {
-        workers[i].join();
-    }
-
-    const int64_t offset_t = (int64_t) params.offset_ms/10.0;
-
-    // combine results into result_state->result_all from all other states
-    for (int i = 0; i < n_processors - 1; ++i) {
-        auto& results_i = states[i]->result_all;
-
-        for (auto& result : results_i) {
-            // correct the segment timestamp taking into account the offset
-            result.t0 += 100 * ((i + 1) * n_samples_per_processor) / WHISPER_SAMPLE_RATE + offset_t;
-            result.t1 += 100 * ((i + 1) * n_samples_per_processor) / WHISPER_SAMPLE_RATE + offset_t;
-
-            // make sure that segments are not overlapping
-            if (!ctx->state->result_all.empty()) {
-                result.t0 = std::max(result.t0, ctx->state->result_all.back().t1);
-            }
-
-            ctx->state->result_all.push_back(std::move(result));
-
-            // call the new_segment_callback for each segment
-            if (params.new_segment_callback) {
-                params.new_segment_callback(ctx, ctx->state, 1, params.new_segment_callback_user_data);
-            }
-        }
-
-        ctx->state->t_mel_us += states[i]->t_mel_us;
-
-        ctx->state->t_sample_us += states[i]->t_sample_us;
-        ctx->state->t_encode_us += states[i]->t_encode_us;
-        ctx->state->t_decode_us += states[i]->t_decode_us;
-        ctx->state->t_batchd_us += states[i]->t_batchd_us;
-        ctx->state->t_prompt_us += states[i]->t_prompt_us;
-
-        ctx->state->n_sample += states[i]->n_sample;
-        ctx->state->n_encode += states[i]->n_encode;
-        ctx->state->n_decode += states[i]->n_decode;
-        ctx->state->n_batchd += states[i]->n_batchd;
-        ctx->state->n_prompt += states[i]->n_prompt;
-
-        whisper_free_state(states[i]);
-    }
-
-    // average the timings
-    ctx->state->t_mel_us    /= n_processors;
-    ctx->state->t_sample_us /= n_processors;
-    ctx->state->t_encode_us /= n_processors;
-    ctx->state->t_decode_us /= n_processors;
-
-    // print information about the audio boundaries
-    WHISPER_LOG_WARN("\n");
-    WHISPER_LOG_WARN("%s: the audio has been split into %d chunks at the following times:\n", __func__, n_processors);
-    for (int i = 0; i < n_processors - 1; ++i) {
-        WHISPER_LOG_WARN("%s: split %d - %s\n", __func__, (i + 1), to_timestamp(100*((i + 1)*n_samples_per_processor)/WHISPER_SAMPLE_RATE + offset_t).c_str());
-    }
-    WHISPER_LOG_WARN("%s: the transcription quality may be degraded near these boundaries\n", __func__);
-
-    return ret;
-}
-
-int whisper_full_n_segments_from_state(struct whisper_state * state) {
-    return state->result_all.size();
-}
-
-int whisper_full_n_segments(struct whisper_context * ctx) {
-    return ctx->state->result_all.size();
-}
-
-int whisper_full_lang_id_from_state(struct whisper_state * state) {
-    return state->lang_id;
-}
-
-int whisper_full_lang_id(struct whisper_context * ctx) {
-    return ctx->state->lang_id;
-}
-
-int64_t whisper_full_get_segment_t0_from_state(struct whisper_state * state, int i_segment) {
-    return state->result_all[i_segment].t0;
-}
-
-int64_t whisper_full_get_segment_t0(struct whisper_context * ctx, int i_segment) {
-    return ctx->state->result_all[i_segment].t0;
-}
-
-int64_t whisper_full_get_segment_t1_from_state(struct whisper_state * state, int i_segment) {
-    return state->result_all[i_segment].t1;
-}
-
-int64_t whisper_full_get_segment_t1(struct whisper_context * ctx, int i_segment) {
-    return ctx->state->result_all[i_segment].t1;
-}
-
-bool whisper_full_get_segment_speaker_turn_next_from_state(struct whisper_state * state, int i_segment) {
-    return state->result_all[i_segment].speaker_turn_next;
-}
-
-bool whisper_full_get_segment_speaker_turn_next(struct whisper_context * ctx, int i_segment) {
-    return ctx->state->result_all[i_segment].speaker_turn_next;
-}
-
-const char * whisper_full_get_segment_text_from_state(struct whisper_state * state, int i_segment) {
-    return state->result_all[i_segment].text.c_str();
-}
-
-const char * whisper_full_get_segment_text(struct whisper_context * ctx, int i_segment) {
-    return ctx->state->result_all[i_segment].text.c_str();
-}
-
-int whisper_full_n_tokens_from_state(struct whisper_state * state, int i_segment) {
-    return state->result_all[i_segment].tokens.size();
-}
-
-int whisper_full_n_tokens(struct whisper_context * ctx, int i_segment) {
-    return ctx->state->result_all[i_segment].tokens.size();
-}
-
-const char * whisper_full_get_token_text_from_state(struct whisper_context * ctx, struct whisper_state * state, int i_segment, int i_token) {
-    return ctx->vocab.id_to_token[state->result_all[i_segment].tokens[i_token].id].c_str();
-}
-
-const char* whisper_full_get_token_text(struct whisper_context * ctx, int i_segment, int i_token) {
-    return ctx->vocab.id_to_token[ctx->state->result_all[i_segment].tokens[i_token].id].c_str();
-}
-
-whisper_token whisper_full_get_token_id_from_state(struct whisper_state * state, int i_segment, int i_token) {
-    return state->result_all[i_segment].tokens[i_token].id;
-}
-
-whisper_token whisper_full_get_token_id(struct whisper_context * ctx, int i_segment, int i_token) {
-    return ctx->state->result_all[i_segment].tokens[i_token].id;
-}
-
-struct whisper_token_data whisper_full_get_token_data_from_state(struct whisper_state * state, int i_segment, int i_token) {
-    return state->result_all[i_segment].tokens[i_token];
-}
-
-struct whisper_token_data whisper_full_get_token_data(struct whisper_context * ctx, int i_segment, int i_token) {
-    return ctx->state->result_all[i_segment].tokens[i_token];
-}
-
-float whisper_full_get_token_p_from_state(struct whisper_state * state, int i_segment, int i_token) {
-    return state->result_all[i_segment].tokens[i_token].p;
-}
-
-float whisper_full_get_token_p(struct whisper_context * ctx, int i_segment, int i_token) {
-    return ctx->state->result_all[i_segment].tokens[i_token].p;
-}
-
-// =================================================================================================
-
-//
-// Temporary interface needed for exposing ggml interface
-// Will be removed in the future when ggml becomes a separate library
-//
-
-WHISPER_API int whisper_bench_memcpy(int n_threads) {
-    fputs(whisper_bench_memcpy_str(n_threads), stderr);
-    return 0;
-}
-
-WHISPER_API const char * whisper_bench_memcpy_str(int n_threads) {
-    static std::string s;
-    s = "";
-    char strbuf[256];
-
-    ggml_time_init();
-
-    size_t n    = 20;
-    size_t arr  = n_threads > 0 ? 1024llu : n_threads; // trick to avoid compiler optimizations
-
-    // 1GB array
-    const size_t size = arr*1e6;
-
-    double sum  = 0.0;
-
-    // heat-up
-    {
-        char * src = (char *) malloc(size);
-        char * dst = (char *) malloc(size);
-
-        for (size_t i = 0; i < size; i++) src[i] = i;
-
-        memcpy(dst, src, size); // heat-up
-
-        double tsum = 0.0;
-
-        for (size_t i = 0; i < n; i++) {
-            const int64_t t0 = ggml_time_us();
-
-            memcpy(dst, src, size);
-
-            const int64_t t1 = ggml_time_us();
-
-            tsum += (t1 - t0)*1e-6;
-
-            src[rand() % size] = rand() % 256;
-        }
-
-        snprintf(strbuf, sizeof(strbuf), "memcpy: %7.2f GB/s (heat-up)\n", (double) (n*size)/(tsum*1e9));
-        s += strbuf;
-
-        // needed to prevent the compiler from optimizing the memcpy away
-        {
-            for (size_t i = 0; i < size; i++) sum += dst[i];
-        }
-
-        free(src);
-        free(dst);
-    }
-
-    // single-thread
-    {
-        char * src = (char *) malloc(size);
-        char * dst = (char *) malloc(size);
-
-        for (size_t i = 0; i < size; i++) src[i] = i;
-
-        memcpy(dst, src, size); // heat-up
-
-        double tsum = 0.0;
-
-        for (size_t i = 0; i < n; i++) {
-            const int64_t t0 = ggml_time_us();
-
-            memcpy(dst, src, size);
-
-            const int64_t t1 = ggml_time_us();
-
-            tsum += (t1 - t0)*1e-6;
-
-            src[rand() % size] = rand() % 256;
-        }
-
-        snprintf(strbuf, sizeof(strbuf), "memcpy: %7.2f GB/s ( 1 thread)\n", (double) (n*size)/(tsum*1e9));
-        s += strbuf;
-
-        // needed to prevent the compiler from optimizing the memcpy away
-        {
-            for (size_t i = 0; i < size; i++) sum += dst[i];
-        }
-
-        free(src);
-        free(dst);
-    }
-
-    // multi-thread
-
-    for (int32_t k = 1; k <= n_threads; k++) {
-        char * src = (char *) malloc(size);
-        char * dst = (char *) malloc(size);
-
-        for (size_t i = 0; i < size; i++) src[i] = i;
-
-        memcpy(dst, src, size); // heat-up
-
-        double tsum = 0.0;
-
-        auto helper = [&](int th) {
-            const int64_t i0 = (th + 0)*size/k;
-            const int64_t i1 = (th + 1)*size/k;
-
-            for (size_t i = 0; i < n; i++) {
-                memcpy(dst + i0, src + i0, i1 - i0);
-
-                src[i0 + rand() % (i1 - i0)] = rand() % 256;
-            };
-        };
-
-        const int64_t t0 = ggml_time_us();
-
-        std::vector<std::thread> threads(k - 1);
-        for (int32_t th = 0; th < k - 1; ++th) {
-            threads[th] = std::thread(helper, th);
-        }
-
-        helper(k - 1);
-
-        for (int32_t th = 0; th < k - 1; ++th) {
-            threads[th].join();
-        }
-
-        const int64_t t1 = ggml_time_us();
-
-        tsum += (t1 - t0)*1e-6;
-
-        snprintf(strbuf, sizeof(strbuf), "memcpy: %7.2f GB/s (%2d thread)\n", (double) (n*size)/(tsum*1e9), k);
-        s += strbuf;
-
-        // needed to prevent the compiler from optimizing the memcpy away
-        {
-            for (size_t i = 0; i < size; i++) sum += dst[i];
-        }
-
-        free(src);
-        free(dst);
-    }
-
-    snprintf(strbuf, sizeof(strbuf), "sum:    %f\n", sum);
-    s += strbuf;
-
-    return s.c_str();
-}
-
-WHISPER_API int whisper_bench_ggml_mul_mat(int n_threads) {
-    fputs(whisper_bench_ggml_mul_mat_str(n_threads), stderr);
-    return 0;
-}
-
-WHISPER_API const char * whisper_bench_ggml_mul_mat_str(int n_threads) {
-    static std::string s;
-    s = "";
-    char strbuf[256];
-
-    ggml_time_init();
-
-    const int n_max = 128;
-
-    const std::vector<size_t> sizes = {
-        64, 128, 256, 512, 1024, 2048, 4096,
-    };
-
-    const size_t N_max = sizes.back();
-
-    // a: N*N*sizeof(float)
-    // b: N*N*sizeof(float)
-    // c: N*N*sizeof(float)
-    // when F16 is used, there is an extra work buffer of size N*N*sizeof(float)
-    std::vector<uint8_t> buf(3llu*N_max*N_max*sizeof(float) + 3*ggml_tensor_overhead() + ggml_graph_overhead());
-    std::vector<uint8_t> work;
-
-    // put a bunch of random data in the buffer
-    for (size_t i = 0; i < buf.size(); i++) buf[i] = i;
-
-    for (int j = 0; j < (int) sizes.size(); j++) {
-        int n_q4_0 = 0;
-        int n_q4_1 = 0;
-        int n_q5_0 = 0;
-        int n_q5_1 = 0;
-        int n_q8_0 = 0;
-        int n_fp16 = 0;
-        int n_fp32 = 0;
-
-        // GFLOPS/s
-        double s_q4_0 = 0.0;
-        double s_q4_1 = 0.0;
-        double s_q5_0 = 0.0;
-        double s_q5_1 = 0.0;
-        double s_q8_0 = 0.0;
-        double s_fp16 = 0.0;
-        double s_fp32 = 0.0;
-
-        const size_t N = sizes[j];
-
-        for (int k = 0; k < 7; ++k) {
-            const ggml_type wtype =
-                k == 0 ? GGML_TYPE_Q4_0 :
-                k == 1 ? GGML_TYPE_Q4_1 :
-                k == 2 ? GGML_TYPE_Q5_0 :
-                k == 3 ? GGML_TYPE_Q5_1 :
-                k == 4 ? GGML_TYPE_Q8_0 :
-                k == 5 ? GGML_TYPE_F16  : GGML_TYPE_F32;
-
-            double & s = k == 0 ? s_q4_0 : k == 1 ? s_q4_1 : k == 2 ? s_q5_0 : k == 3 ? s_q5_1 : k == 4 ? s_q8_0 : k == 5 ? s_fp16 : /*k == 6*/ s_fp32;
-            int    & n = k == 0 ? n_q4_0 : k == 1 ? n_q4_1 : k == 2 ? n_q5_0 : k == 3 ? n_q5_1 : k == 4 ? n_q8_0 : k == 5 ? n_fp16 : /*k == 6*/ n_fp32;
-
-            struct ggml_init_params gparams = {
-                /*.mem_size   =*/ buf.size(),
-                /*.mem_buffer =*/ buf.data(),
-                /*.no_alloc   =*/ false,
-            };
-
-            struct ggml_context * ctx0 = ggml_init(gparams);
-
-            struct ggml_tensor * a = ggml_new_tensor_2d(ctx0, wtype,         N, N);
-            struct ggml_tensor * b = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, N, N);
-
-            struct ggml_tensor * c = ggml_mul_mat(ctx0, a, b);
-
-            struct ggml_cgraph * gf = ggml_new_graph(ctx0);
-
-            ggml_build_forward_expand(gf, c);
-
-            double tsum = 0.0;
-
-            // heat-up
-            ggml_graph_compute_helper(gf, work, n_threads, nullptr, nullptr);
-
-            for (int i = 0; i < n_max; ++i) {
-                const int64_t t0 = ggml_time_us();
-
-                ggml_graph_compute_helper(gf, work, n_threads, nullptr, nullptr);
-
-                const int64_t t1 = ggml_time_us();
-
-                tsum += (t1 - t0)*1e-6;
-                n++;
-
-                if (tsum > 1.0 && n >= 3) {
-                    break;
-                }
-            }
-
-            ggml_free(ctx0);
-
-            s = ((2.0*N*N*N*n)/tsum)*1e-9;
-        }
-
-        // Q4_0 | Q4_1
-        snprintf(strbuf, sizeof(strbuf), "%4zu x %4zu: Q4_0 %7.1f GFLOPS (%3d runs) | Q4_1 %7.1f GFLOPS (%3d runs)\n",
-                N, N, s_q4_0, n_q4_0, s_q4_1, n_q4_1);
-        s += strbuf;
-
-        // Q5_0 | Q5_1 | Q8_0
-        snprintf(strbuf, sizeof(strbuf), "%4zu x %4zu: Q5_0 %7.1f GFLOPS (%3d runs) | Q5_1 %7.1f GFLOPS (%3d runs) | Q8_0 %7.1f GFLOPS (%3d runs)\n",
-                N, N, s_q5_0, n_q5_0, s_q5_1, n_q5_1, s_q8_0, n_q8_0);
-        s += strbuf;
-
-        // F16 | F32
-        snprintf(strbuf, sizeof(strbuf), "%4zu x %4zu: F16  %7.1f GFLOPS (%3d runs) | F32  %7.1f GFLOPS (%3d runs)\n",
-                N, N, s_fp16, n_fp16, s_fp32, n_fp32);
-        s += strbuf;
-    }
-
-    return s.c_str();
-}
-
-// =================================================================================================
-
-// =================================================================================================
-
-//
-// Experimental stuff below
-//
-// Not sure if these should be part of the library at all, because the quality of the results is not
-// guaranteed. Might get removed at some point unless a robust algorithm implementation is found
-//
-
-// =================================================================================================
-
-//
-// token-level timestamps
-//
-
-static int timestamp_to_sample(int64_t t, int n_samples) {
-    return std::max(0, std::min((int) n_samples - 1, (int) ((t*WHISPER_SAMPLE_RATE)/100)));
-}
-
-static int64_t sample_to_timestamp(int i_sample) {
-    return (100ll*i_sample)/WHISPER_SAMPLE_RATE;
-}
-
-// a cost-function / heuristic that is high for text that takes longer to pronounce
-// obviously, can be improved
-static float voice_length(const std::string & text) {
-    float res = 0.0f;
-
-    for (char c : text) {
-        if (c == ' ') {
-            res += 0.01f;
-        } else if (c == ',') {
-            res += 2.00f;
-        } else if (c == '.') {
-            res += 3.00f;
-        } else if (c == '!') {
-            res += 3.00f;
-        } else if (c == '?') {
-            res += 3.00f;
-        } else if (c >= '0' && c <= '9') {
-            res += 3.00f;
-        } else {
-            res += 1.00f;
-        }
-    }
-
-    return res;
-}
-
-// average the fabs of the signal
-static std::vector<float> get_signal_energy(const float * signal, int n_samples, int n_samples_per_half_window) {
-    const int hw = n_samples_per_half_window;
-
-    std::vector<float> result(n_samples);
-
-    for (int i = 0; i < n_samples; i++) {
-        float sum = 0;
-        for (int j = -hw; j <= hw; j++) {
-            if (i + j >= 0 && i + j < n_samples) {
-                sum += fabs(signal[i + j]);
-            }
-        }
-        result[i] = sum/(2*hw + 1);
-    }
-
-    return result;
-}
-
-static void whisper_exp_compute_token_level_timestamps(
-        struct whisper_context & ctx,
-          struct whisper_state & state,
-                           int   i_segment,
-                         float   thold_pt,
-                         float   thold_ptsum) {
-    auto & segment = state.result_all[i_segment];
-    auto & tokens  = segment.tokens;
-
-    const int n_samples = state.energy.size();
-
-    if (n_samples == 0) {
-        WHISPER_LOG_ERROR("%s: no signal data available\n", __func__);
-        return;
-    }
-
-    const int64_t t0 = segment.t0;
-    const int64_t t1 = segment.t1;
-
-    const int n = tokens.size();
-
-    if (n == 0) {
-        return;
-    }
-
-    if (n == 1) {
-        tokens[0].t0 = t0;
-        tokens[0].t1 = t1;
-
-        return;
-    }
-
-    auto & t_beg    = state.t_beg;
-    auto & t_last   = state.t_last;
-    auto & tid_last = state.tid_last;
-
-    for (int j = 0; j < n; ++j) {
-        auto & token = tokens[j];
-
-        if (j == 0) {
-            if (token.id == whisper_token_beg(&ctx)) {
-                tokens[j    ].t0 = t0;
-                tokens[j    ].t1 = t0;
-                tokens[j + 1].t0 = t0;
-
-                t_beg    = t0;
-                t_last   = t0;
-                tid_last = whisper_token_beg(&ctx);
-            } else {
-                tokens[j    ].t0 = t_last;
-            }
-        }
-
-        const int64_t tt = t_beg + 2*(token.tid - whisper_token_beg(&ctx));
-
-        tokens[j].id    = token.id;
-        tokens[j].tid   = token.tid;
-        tokens[j].p     = token.p;
-        tokens[j].pt    = token.pt;
-        tokens[j].ptsum = token.ptsum;
-
-        tokens[j].vlen = voice_length(whisper_token_to_str(&ctx, token.id));
-
-        if (token.pt > thold_pt && token.ptsum > thold_ptsum && token.tid > tid_last && tt <= t1) {
-            if (j > 0) {
-                tokens[j - 1].t1 = tt;
-            }
-            tokens[j].t0 = tt;
-            tid_last = token.tid;
-        }
-    }
-
-    tokens[n - 2].t1 = t1;
-    tokens[n - 1].t0 = t1;
-    tokens[n - 1].t1 = t1;
-
-    t_last = t1;
-
-    // find intervals of tokens with unknown timestamps
-    // fill the timestamps by proportionally splitting the interval based on the token voice lengths
-    {
-        int p0 = 0;
-        int p1 = 0;
-
-        while (true) {
-            while (p1 < n && tokens[p1].t1 < 0) {
-                p1++;
-            }
-
-            if (p1 >= n) {
-                p1--;
-            }
-
-            //printf("p0=%d p1=%d t0=%lld t1=%lld\n", p0, p1, tokens[p0].t0, tokens[p1].t1);
-
-            if (p1 > p0) {
-                double psum = 0.0;
-                for (int j = p0; j <= p1; j++) {
-                    psum += tokens[j].vlen;
-                }
-
-                //printf("analyzing %d - %d, psum = %f\n", p0, p1, psum);
-
-                const double dt = tokens[p1].t1 - tokens[p0].t0;
-
-                // split the time proportionally to the voice length
-                for (int j = p0 + 1; j <= p1; j++) {
-                    const double ct = tokens[j - 1].t0 + dt*tokens[j - 1].vlen/psum;
-
-                    tokens[j - 1].t1 = ct;
-                    tokens[j    ].t0 = ct;
-                }
-            }
-
-            p1++;
-            p0 = p1;
-            if (p1 >= n) {
-                break;
-            }
-        }
-    }
-
-    // fix up (just in case)
-    for (int j = 0; j < n - 1; j++) {
-        if (tokens[j].t1 < 0) {
-            tokens[j + 1].t0 = tokens[j].t1;
-        }
-
-        if (j > 0) {
-            if (tokens[j - 1].t1 > tokens[j].t0) {
-                tokens[j].t0 = tokens[j - 1].t1;
-                tokens[j].t1 = std::max(tokens[j].t0, tokens[j].t1);
-            }
-        }
-    }
-
-    // VAD
-    // expand or contract tokens based on voice activity
-    {
-        const int hw = WHISPER_SAMPLE_RATE/8;
-
-        for (int j = 0; j < n; j++) {
-            if (tokens[j].id >= whisper_token_eot(&ctx)) {
-                continue;
-            }
-
-            int s0 = timestamp_to_sample(tokens[j].t0, n_samples);
-            int s1 = timestamp_to_sample(tokens[j].t1, n_samples);
-
-            const int ss0 = std::max(s0 - hw, 0);
-            const int ss1 = std::min(s1 + hw, n_samples);
-
-            const int ns = ss1 - ss0;
-
-            float sum = 0.0f;
-
-            for (int k = ss0; k < ss1; k++) {
-                sum += state.energy[k];
-            }
-
-            const float thold = 0.5*sum/ns;
-
-            {
-                int k = s0;
-                if (state.energy[k] > thold && j > 0) {
-                    while (k > 0 && state.energy[k] > thold) {
-                        k--;
-                    }
-                    tokens[j].t0 = sample_to_timestamp(k);
-                    if (tokens[j].t0 < tokens[j - 1].t1) {
-                        tokens[j].t0 = tokens[j - 1].t1;
-                    } else {
-                        s0 = k;
-                    }
-                } else {
-                    while (state.energy[k] < thold && k < s1) {
-                        k++;
-                    }
-                    s0 = k;
-                    tokens[j].t0 = sample_to_timestamp(k);
-                }
-            }
-
-            {
-                int k = s1;
-                if (state.energy[k] > thold) {
-                    while (k < n_samples - 1 && state.energy[k] > thold) {
-                        k++;
-                    }
-                    tokens[j].t1 = sample_to_timestamp(k);
-                    if (j < ns - 1 && tokens[j].t1 > tokens[j + 1].t0) {
-                        tokens[j].t1 = tokens[j + 1].t0;
-                    } else {
-                        s1 = k;
-                    }
-                } else {
-                    while (state.energy[k] < thold && k > s0) {
-                        k--;
-                    }
-                    s1 = k;
-                    tokens[j].t1 = sample_to_timestamp(k);
-                }
-            }
-        }
-    }
-
-    // fixed token expand (optional)
-    //{
-    //    const int t_expand = 0;
-
-    //    for (int j = 0; j < n; j++) {
-    //        if (j > 0) {
-    //            tokens[j].t0 = std::max(0, (int) (tokens[j].t0 - t_expand));
-    //        }
-    //        if (j < n - 1) {
-    //            tokens[j].t1 = tokens[j].t1 + t_expand;
-    //        }
-    //    }
-    //}
-
-    // debug info
-    //for (int j = 0; j < n; ++j) {
-    //    const auto & token = tokens[j];
-    //    const auto tt = token.pt > thold_pt && token.ptsum > 0.01 ? whisper_token_to_str(&ctx, token.tid) : "[?]";
-    //    printf("%s: %10s %6.3f %6.3f %6.3f %6.3f %5d %5d '%s'\n", __func__,
-    //            tt, token.p, token.pt, token.ptsum, token.vlen, (int) token.t0, (int) token.t1, whisper_token_to_str(&ctx, token.id));
-
-    //    if (tokens[j].id >= whisper_token_eot(&ctx)) {
-    //        continue;
-    //    }
-    //}
-}
-
-//
-// token level timestamps - dtw version
-//
-
-// n_text_layer -> total text layers on model
-// n_head -> total heads per text layer on model
-static std::vector<uint32_t> get_alignment_heads_by_layer(const whisper_context_params & cparams, int il, int n_text_layer, int n_head) {
-    std::vector<uint32_t> ret;
-    if (cparams.dtw_aheads_preset == WHISPER_AHEADS_NONE) {
-        return ret;
-    } else if (cparams.dtw_aheads_preset == WHISPER_AHEADS_N_TOP_MOST) {
-        if (il >= n_text_layer - cparams.dtw_n_top) {
-            for (int32_t i = 0; i < n_head; ++i) {
-                ret.push_back(i);
-            }
-        }
-    } else {
-        const auto aheads = cparams.dtw_aheads_preset == WHISPER_AHEADS_CUSTOM ? cparams.dtw_aheads : g_aheads.at(cparams.dtw_aheads_preset);
-        for (size_t i = 0; i < aheads.n_heads; ++i) {
-            if (aheads.heads[i].n_text_layer == il) {
-                ret.push_back(aheads.heads[i].n_head);
-            }
-        }
-    }
-    return ret;
-}
-
-// dtw + backtrace to return found path
-// based on
-// https://github.com/openai/whisper/blob/main/whisper/timing.py#L83
-static ggml_tensor * dtw_and_backtrace(ggml_context * ctx, ggml_tensor * x) {
-    WHISPER_ASSERT(ggml_n_dims(x) == 2);
-
-    int64_t N = x->ne[0];
-    int64_t M = x->ne[1];
-    struct ggml_tensor * cost = ggml_new_tensor_2d(ctx, GGML_TYPE_F32, N + 1, M + 1);
-    struct ggml_tensor * trace = ggml_new_tensor_2d(ctx, GGML_TYPE_I32, N + 1, M + 1);
-
-    cost = ggml_set_f32(cost, INFINITY);
-    trace = ggml_set_f32(trace, -1);
-    ggml_set_f32_nd(cost, 0, 0, 0, 0, 0.0);
-
-    // dtw
-    // supposedly can be optmized by computing diagonals in parallel ?
-    // Not sure it is worth it since x will be GENERATED_TOKENS*1500 size at most.
-    for (int64_t j = 1; j < M + 1; ++j) {
-        for (int64_t i = 1; i < N + 1; ++i) {
-            float c0 = ggml_get_f32_nd(cost, i - 1, j - 1, 0, 0);
-            float c1 = ggml_get_f32_nd(cost, i - 1, j, 0, 0);
-            float c2 = ggml_get_f32_nd(cost, i, j - 1, 0, 0);
-
-            float c;
-            int32_t t;
-            if (c0 < c1 && c0 < c2) {
-                c = c0;
-                t = 0;
-            } else if (c1 < c0 && c1 < c2) {
-                c = c1;
-                t = 1;
-            } else {
-                c = c2;
-                t = 2;
-            }
-
-            c = ggml_get_f32_nd(x, i - 1, j - 1, 0, 0) + c;
-            ggml_set_f32_nd(cost, i, j, 0, 0, c);
-            ggml_set_i32_nd(trace, i, j, 0, 0, t);
-        }
-    }
-
-    // Backtrace
-    const int64_t BT_MAX_ROWS = N + M - 1;
-    struct ggml_tensor * bt = ggml_new_tensor_2d(ctx, GGML_TYPE_I32, BT_MAX_ROWS, 2);
-    // trace[0, :] = 2;
-    for (int64_t i = 0; i < M + 1; ++i)
-        ggml_set_i32_nd(trace, 0, i, 0, 0, 2);
-    //trace[:, 0] = 1;
-    for (int64_t i = 0; i < N + 1; ++i)
-        ggml_set_i32_nd(trace, i, 0, 0, 0, 1);
-    int bt_row_idx = BT_MAX_ROWS - 1;
-    int64_t i = N;
-    int64_t j = M;
-    while (i > 0 || j > 0) {
-        ggml_set_i32_nd(bt, bt_row_idx, 0, 0, 0, i - 1);
-        ggml_set_i32_nd(bt, bt_row_idx, 1, 0, 0, j - 1);
-        --bt_row_idx;
-
-        int32_t t = ggml_get_i32_nd(trace, i, j, 0, 0);
-        if (t == 0) {
-            --i;
-            --j;
-        } else if (t == 1) {
-            --i;
-        } else if (t == 2) {
-            --j;
-        } else {
-            WHISPER_ASSERT(0);
-        }
-    }
-
-    // FIXME: manual clip/transpose might not be the most efficient way? (e.g. use ggml funcs)
-    // Clip + transpose
-    // This might not be entirely necessary for our case, but leaving it for now so output matrix
-    // is identical to dtw on openAI timing.py
-    const int64_t result_n_cols = BT_MAX_ROWS-bt_row_idx-1;
-    ggml_tensor * r = ggml_new_tensor_2d(ctx, GGML_TYPE_I32, 2, result_n_cols);
-    for (int64_t i = 0; i < 2; ++i) {
-        for (int64_t j = 0; j < result_n_cols; ++j) {
-            int32_t v = ggml_get_i32_nd(bt, j+bt_row_idx+1, i, 0, 0);
-            ggml_set_i32_nd(r, i, j, 0, 0, v);
-        }
-    }
-
-    return r;
-}
-
-struct median_filter_user_data {
-    int filter_width;
-};
-
-static void median_filter(struct ggml_tensor * dst , const struct ggml_tensor * a, int ith, int nth, void * userdata) {
-    int filter_width = ((median_filter_user_data *) userdata)->filter_width;
-    WHISPER_ASSERT(nth == 1);
-    WHISPER_ASSERT(ith == 0);
-    WHISPER_ASSERT(filter_width < a->ne[2]);
-    WHISPER_ASSERT(filter_width % 2);
-    WHISPER_ASSERT(ggml_n_dims(a) == 3);
-    WHISPER_ASSERT(a->type == GGML_TYPE_F32);
-
-    std::vector<float> filter;
-    filter.reserve(filter_width);
-    for (int64_t i = 0; i < a->ne[0]; ++i) {
-        for (int64_t j = 0; j < a->ne[1]; ++j) {
-            for (int64_t k = 0; k < a->ne[2]; ++k) {
-                for (int64_t off = -filter_width/2; off <= filter_width/2; ++off) {
-                    // "reflect" padding
-                    int64_t idx = k + off;
-                    if (idx < 0) {
-                        idx = -idx;
-                    } else if (idx >= a->ne[2]) {
-                        idx = 2*(a->ne[2] - 1) - idx;
-                    }
-
-                    filter.push_back(ggml_get_f32_nd(a, i, j, idx, 0));
-                }
-                std::sort(filter.begin(), filter.end());
-                const float v = filter[filter.size()/2];
-                ggml_set_f32_nd(dst, i, j, k, 0, v);
-                filter.clear();
-            }
-        }
-    }
-}
-
-static void whisper_exp_compute_token_level_timestamps_dtw(
-            struct whisper_context * ctx,
-              struct whisper_state * state,
-        struct whisper_full_params   params,
-                               int   i_segment,
-                            size_t   n_segments,
-                               int   seek,
-                               int   n_frames,
-                               int   medfilt_width,
-                               int   n_threads)
-{
-    const int n_audio_ctx = state->exp_n_audio_ctx > 0 ? state->exp_n_audio_ctx : ctx->model.hparams.n_audio_ctx;
-    WHISPER_ASSERT(medfilt_width % 2);
-    WHISPER_ASSERT(n_frames <= n_audio_ctx * 2);
-    WHISPER_ASSERT(ctx->params.dtw_aheads_preset != WHISPER_AHEADS_NONE);
-
-    // FIXME: Allocating mem everytime we call this func
-    // Our ggml buffer should be pre-allocated somewhere during init and reused
-    // when we call this function
-    struct ggml_init_params gparams = {
-        /*.mem_size   =*/ ctx->params.dtw_mem_size,
-        /*.mem_buffer =*/ NULL,
-        /*.no_alloc   =*/ false,
-    };
-    struct ggml_context * gctx = ggml_init(gparams);
-
-    // Build token sequence that will be passed to decoder
-    // sot + [lang] + text result + eot
-    std::vector<whisper_token> tokens = { whisper_token_sot(ctx), };
-    if (whisper_is_multilingual(ctx)) {
-        const int lang_id = whisper_lang_id(params.language);
-        state->lang_id = lang_id;
-        tokens.push_back(whisper_token_lang(ctx, lang_id));
-    }
-    const size_t sot_sequence_length = tokens.size();
-    tokens.push_back(whisper_token_not(ctx));
-    for (size_t i = i_segment; i < i_segment + n_segments; ++i) {
-        auto & segment = state->result_all[i];
-        for (auto &t: segment.tokens) {
-            // Only text tokens
-            if (t.id < whisper_token_eot(ctx)) {
-                tokens.push_back(t.id);
-            }
-        }
-    }
-    tokens.push_back(whisper_token_eot(ctx));
-
-    // Get result tokens, pass then along to decoder to get cross attention QKs
-    // used in timestamping
-    // Decoder already returns only alignment head QKs, already concatenated in
-    // one tensor.
-    whisper_kv_cache_clear(state->kv_self);
-    whisper_batch_prep_legacy(state->batch, tokens.data(), tokens.size(), 0, 0);
-    whisper_kv_cache_seq_rm(state->kv_self, 0, 0, -1);
-    if (!whisper_decode_internal(*ctx, *state, state->batch, n_threads, true, nullptr, nullptr)) {
-        WHISPER_LOG_INFO("DECODER FAILED\n");
-        WHISPER_ASSERT(0);
-    }
-    WHISPER_ASSERT(state->aheads_cross_QKs != nullptr);
-
-    const auto n_audio_tokens = n_frames/2;
-    WHISPER_ASSERT(state->aheads_cross_QKs != NULL);
-    WHISPER_ASSERT(n_audio_tokens <= state->aheads_cross_QKs->ne[1]);
-    const auto n_tokens = state->aheads_cross_QKs->ne[0];
-    const auto n_heads = state->aheads_cross_QKs->ne[2];
-
-    // Copy data from decoder buffer to a local CPU tensor, discarding unused audio
-    // tokens (i.e. discarding rows at the end of tensor)
-    // IN: Tensor with N_TOKENS*audio_ctx*N_ALIGNMENT_HEADS dims
-    // OUT: Tensor with N_TOKENS*N_AUDIO_TOKENS*N_ALIGNMENT_HEADS dims
-    WHISPER_ASSERT(state->aheads_cross_QKs->type == GGML_TYPE_F32);
-    WHISPER_ASSERT(ggml_is_contiguous(state->aheads_cross_QKs));
-    ggml_tensor * w = ggml_new_tensor_3d(gctx, GGML_TYPE_F32, n_tokens, n_audio_tokens, n_heads);
-    auto & data = state->aheads_cross_QKs_data;
-    data.resize(n_tokens * n_audio_ctx * n_heads);
-    ggml_backend_tensor_get(state->aheads_cross_QKs, data.data(), 0, sizeof(float) * n_tokens * n_audio_ctx * n_heads);
-    for (int k = 0; k < n_heads; ++k) {
-        for (int j = 0; j < n_audio_tokens; ++j) {
-            memcpy(
-                (char *) w->data + j * w->nb[1] + k * w->nb[2],
-                data.data() + j * n_tokens + k * n_tokens * n_audio_ctx,
-                n_tokens * sizeof(float)
-            );
-        }
-    }
-
-    // Normalize - in original OpenAI code, this is done over dim=-2. In this case,
-    // we already permuted N_TOKENS dimension to columns on last loop, becase ggml_norm
-    // operates over columns. Afterwards, permute to a shape that facilitates mean
-    // operation (after median filter)
-    // IN: Tensor with N_TOKENS*N_AUDIO_TOKENS*N_ALIGNMENT_HEADS dims
-    // OUT: Tensor with N_ALIGNMENT_HEADS*N_TOKENS*N_AUDIO_TOKENS dims
-    w = ggml_norm(gctx, w, 1e-9f);
-    w = ggml_permute(gctx, ggml_permute(gctx, w, 2, 1, 0 ,3), 0, 2, 1, 3);
-
-    // Pass median filter - this is done over AUDIO_TOKENS dimension.
-    // IN: Tensor with N_ALIGNMENT_HEADS*N_TOKENS*N_AUDIO_TOKENS dims
-    // OUT: Same dims
-    median_filter_user_data mf_user_data = {medfilt_width};
-    w = ggml_map_custom1(gctx, w, median_filter, 1, &mf_user_data);
-
-    // Take mean over columns, scale by -1, reshape to 2D tensor, remove SOT sequence and EOT
-    // IN: Tensor with N_ALIGNMENT_HEADS*N_TOKENS*N_AUDIO_TOKENS dims
-    // OUT: Tensor with N_TOKENS*N_AUDIO_TOKENS dims
-    w = ggml_mean(gctx, w);
-    w = ggml_scale(gctx, w, -1.0);
-    w = ggml_reshape_2d(gctx, w, w->ne[1], w->ne[2]);
-
-    // Remove SOT sequence and EOT
-    // Out dimension is (N_TOKENS-sot_sequence_length-1)*N_AUDIO_TOKENS
-    w = ggml_view_2d(gctx, w, w->ne[0] - sot_sequence_length - 1, w->ne[1], w->nb[1], sot_sequence_length * w->nb[0]);
-
-    // Compute
-    struct ggml_cgraph * gf = ggml_new_graph(gctx);
-    ggml_build_forward_expand(gf, w);
-    ggml_graph_compute_with_ctx(gctx, gf, n_threads);
-
-    ggml_tensor * alignment = dtw_and_backtrace(gctx, w);
-
-    // Place timestamps on segments
-    int32_t last_v = 0;
-    auto seg_i = state->result_all.begin() + i_segment;
-    auto tok_i = seg_i->tokens.begin();
-    for (int i = 0; i < alignment->ne[1]; ++i) {
-        int32_t v = ggml_get_i32_nd(alignment, 0, i, 0, 0);
-        if (v != last_v) {
-            int32_t time_index = ggml_get_i32_nd(alignment, 1, i, 0, 0);
-            int64_t timestamp = (time_index * 2) + seek; // Each index on DTW result = 20mS audio
-            last_v = v;
-
-            // Skip non-text tokens
-            while (!(tok_i->id < whisper_token_eot(ctx))) {
-                ++tok_i;
-                if (tok_i == seg_i->tokens.end()) {
-                    ++seg_i;
-                    tok_i = seg_i->tokens.begin();
-                }
-            }
-
-            tok_i->t_dtw = timestamp;
-            ++tok_i;
-            if (tok_i == seg_i->tokens.end()) {
-                ++seg_i;
-                tok_i = seg_i->tokens.begin();
-            }
-        }
-    }
-
-    // Print DTW timestamps
-    /*for (size_t i = i_segment; i < i_segment + n_segments; ++i) {
-        auto & segment = state->result_all[i];
-        for (auto &t: segment.tokens) {
-            const char * tok = whisper_token_to_str(ctx, t.id);
-            fprintf(stderr, "|%s|(%.2f) ", tok, (float)t.t_dtw/100);
-        }
-        fprintf(stderr, "\n");
-    }*/
-
-    ggml_free(gctx);
-}
-
-void whisper_log_set(ggml_log_callback log_callback, void * user_data) {
-    g_state.log_callback = log_callback ? log_callback : whisper_log_callback_default;
-    g_state.log_callback_user_data = user_data;
-}
-
-GGML_ATTRIBUTE_FORMAT(2, 3)
-static void whisper_log_internal(ggml_log_level level, const char * format, ...) {
-    va_list args;
-    va_start(args, format);
-    char buffer[1024];
-    int len = vsnprintf(buffer, 1024, format, args);
-    if (len < 1024) {
-        g_state.log_callback(level, buffer, g_state.log_callback_user_data);
-    } else {
-        char* buffer2 = new char[len+1];
-        vsnprintf(buffer2, len+1, format, args);
-        buffer2[len] = 0;
-        g_state.log_callback(level, buffer2, g_state.log_callback_user_data);
-        delete[] buffer2;
-    }
-    va_end(args);
-}
-
-static void whisper_log_callback_default(ggml_log_level level, const char * text, void * user_data) {
-    (void) level;
-    (void) user_data;
-    fputs(text, stderr);
-    fflush(stderr);
-}
diff --git a/whisper.h b/whisper.h
deleted file mode 100644 (file)
index 65e88ed..0000000
--- a/whisper.h
+++ /dev/null
@@ -1,657 +0,0 @@
-#ifndef WHISPER_H
-#define WHISPER_H
-
-#include "ggml.h"
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdbool.h>
-
-#ifdef __GNUC__
-#    define WHISPER_DEPRECATED(func, hint) func __attribute__((deprecated(hint)))
-#elif defined(_MSC_VER)
-#    define WHISPER_DEPRECATED(func, hint) __declspec(deprecated(hint)) func
-#else
-#    define WHISPER_DEPRECATED(func, hint) func
-#endif
-
-#ifdef WHISPER_SHARED
-#    ifdef _WIN32
-#        ifdef WHISPER_BUILD
-#            define WHISPER_API __declspec(dllexport)
-#        else
-#            define WHISPER_API __declspec(dllimport)
-#        endif
-#    else
-#        define WHISPER_API __attribute__ ((visibility ("default")))
-#    endif
-#else
-#    define WHISPER_API
-#endif
-
-#define WHISPER_SAMPLE_RATE 16000
-#define WHISPER_N_FFT       400
-#define WHISPER_N_FFT_HALF  (WHISPER_N_FFT / 2 + 1)
-#define WHISPER_HOP_LENGTH  160
-#define WHISPER_CHUNK_SIZE  30
-#define WHISPER_N_SAMPLES   (WHISPER_SAMPLE_RATE * WHISPER_CHUNK_SIZE)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    //
-    // C interface
-    //
-    // The following interface is thread-safe as long as the sample whisper_context is not used by multiple threads
-    // concurrently.
-    //
-    // Basic usage:
-    //
-    //     #include "whisper.h"
-    //
-    //     ...
-    //
-    //     whisper_context_params cparams = whisper_context_default_params();
-    //
-    //     struct whisper_context * ctx = whisper_init_from_file_with_params("/path/to/ggml-base.en.bin", cparams);
-    //
-    //     if (whisper_full(ctx, wparams, pcmf32.data(), pcmf32.size()) != 0) {
-    //         fprintf(stderr, "failed to process audio\n");
-    //         return 7;
-    //     }
-    //
-    //     const int n_segments = whisper_full_n_segments(ctx);
-    //     for (int i = 0; i < n_segments; ++i) {
-    //         const char * text = whisper_full_get_segment_text(ctx, i);
-    //         printf("%s", text);
-    //     }
-    //
-    //     whisper_free(ctx);
-    //
-    //     ...
-    //
-    // This is a demonstration of the most straightforward usage of the library.
-    // "pcmf32" contains the RAW audio data in 32-bit floating point format.
-    //
-    // The interface also allows for more fine-grained control over the computation, but it requires a deeper
-    // understanding of how the model works.
-    //
-
-    struct whisper_context;
-    struct whisper_state;
-    struct whisper_full_params;
-
-    typedef int32_t whisper_pos;
-    typedef int32_t whisper_token;
-    typedef int32_t whisper_seq_id;
-
-    enum whisper_alignment_heads_preset {
-        WHISPER_AHEADS_NONE,
-        WHISPER_AHEADS_N_TOP_MOST,  // All heads from the N-top-most text-layers
-        WHISPER_AHEADS_CUSTOM,
-        WHISPER_AHEADS_TINY_EN,
-        WHISPER_AHEADS_TINY,
-        WHISPER_AHEADS_BASE_EN,
-        WHISPER_AHEADS_BASE,
-        WHISPER_AHEADS_SMALL_EN,
-        WHISPER_AHEADS_SMALL,
-        WHISPER_AHEADS_MEDIUM_EN,
-        WHISPER_AHEADS_MEDIUM,
-        WHISPER_AHEADS_LARGE_V1,
-        WHISPER_AHEADS_LARGE_V2,
-        WHISPER_AHEADS_LARGE_V3,
-    };
-
-    typedef struct whisper_ahead {
-        int n_text_layer;
-        int n_head;
-    } whisper_ahead;
-
-    typedef struct whisper_aheads {
-        size_t n_heads;
-        const whisper_ahead * heads;
-    } whisper_aheads;
-
-    struct whisper_context_params {
-        bool  use_gpu;
-        bool  flash_attn;
-        int   gpu_device;  // CUDA device
-
-        // [EXPERIMENTAL] Token-level timestamps with DTW
-        bool dtw_token_timestamps;
-        enum whisper_alignment_heads_preset dtw_aheads_preset;
-
-        int dtw_n_top;
-        struct whisper_aheads dtw_aheads;
-
-        size_t dtw_mem_size; // TODO: remove
-    };
-
-    typedef struct whisper_token_data {
-        whisper_token id;  // token id
-        whisper_token tid; // forced timestamp token id
-
-        float p;           // probability of the token
-        float plog;        // log probability of the token
-        float pt;          // probability of the timestamp token
-        float ptsum;       // sum of probabilities of all timestamp tokens
-
-        // token-level timestamp data
-        // do not use if you haven't computed token-level timestamps
-        int64_t t0;        // start time of the token
-        int64_t t1;        //   end time of the token
-
-        // [EXPERIMENTAL] Token-level timestamps with DTW
-        // do not use if you haven't computed token-level timestamps with dtw
-        // Roughly corresponds to the moment in audio in which the token was output
-        int64_t t_dtw;
-
-        float vlen;        // voice length of the token
-    } whisper_token_data;
-
-    typedef struct whisper_model_loader {
-        void * context;
-
-        size_t (*read)(void * ctx, void * output, size_t read_size);
-        bool    (*eof)(void * ctx);
-        void  (*close)(void * ctx);
-    } whisper_model_loader;
-
-    // grammar element type
-    enum whisper_gretype {
-        // end of rule definition
-        WHISPER_GRETYPE_END            = 0,
-
-        // start of alternate definition for rule
-        WHISPER_GRETYPE_ALT            = 1,
-
-        // non-terminal element: reference to rule
-        WHISPER_GRETYPE_RULE_REF       = 2,
-
-        // terminal element: character (code point)
-        WHISPER_GRETYPE_CHAR           = 3,
-
-        // inverse char(s) ([^a], [^a-b] [^abc])
-        WHISPER_GRETYPE_CHAR_NOT       = 4,
-
-        // modifies a preceding WHISPER_GRETYPE_CHAR or LLAMA_GRETYPE_CHAR_ALT to
-        // be an inclusive range ([a-z])
-        WHISPER_GRETYPE_CHAR_RNG_UPPER = 5,
-
-        // modifies a preceding WHISPER_GRETYPE_CHAR or
-        // WHISPER_GRETYPE_CHAR_RNG_UPPER to add an alternate char to match ([ab], [a-zA])
-        WHISPER_GRETYPE_CHAR_ALT       = 6,
-    };
-
-    typedef struct whisper_grammar_element {
-        enum whisper_gretype type;
-        uint32_t             value; // Unicode code point or rule ID
-    } whisper_grammar_element;
-
-    // Various functions for loading a ggml whisper model.
-    // Allocate (almost) all memory needed for the model.
-    // Return NULL on failure
-    WHISPER_API struct whisper_context * whisper_init_from_file_with_params  (const char * path_model,              struct whisper_context_params params);
-    WHISPER_API struct whisper_context * whisper_init_from_buffer_with_params(void * buffer, size_t buffer_size,    struct whisper_context_params params);
-    WHISPER_API struct whisper_context * whisper_init_with_params            (struct whisper_model_loader * loader, struct whisper_context_params params);
-
-    // These are the same as the above, but the internal state of the context is not allocated automatically
-    // It is the responsibility of the caller to allocate the state using whisper_init_state() (#523)
-    WHISPER_API struct whisper_context * whisper_init_from_file_with_params_no_state  (const char * path_model,              struct whisper_context_params params);
-    WHISPER_API struct whisper_context * whisper_init_from_buffer_with_params_no_state(void * buffer, size_t buffer_size,    struct whisper_context_params params);
-    WHISPER_API struct whisper_context * whisper_init_with_params_no_state            (struct whisper_model_loader * loader, struct whisper_context_params params);
-
-    WHISPER_DEPRECATED(
-        WHISPER_API struct whisper_context * whisper_init_from_file(const char * path_model),
-        "use whisper_init_from_file_with_params instead"
-    );
-    WHISPER_DEPRECATED(
-        WHISPER_API struct whisper_context * whisper_init_from_buffer(void * buffer, size_t buffer_size),
-        "use whisper_init_from_buffer_with_params instead"
-    );
-    WHISPER_DEPRECATED(
-        WHISPER_API struct whisper_context * whisper_init(struct whisper_model_loader * loader),
-        "use whisper_init_with_params instead"
-    );
-    WHISPER_DEPRECATED(
-        WHISPER_API struct whisper_context * whisper_init_from_file_no_state(const char * path_model),
-        "use whisper_init_from_file_with_params_no_state instead"
-    );
-    WHISPER_DEPRECATED(
-        WHISPER_API struct whisper_context * whisper_init_from_buffer_no_state(void * buffer, size_t buffer_size),
-        "use whisper_init_from_buffer_with_params_no_state instead"
-    );
-    WHISPER_DEPRECATED(
-        WHISPER_API struct whisper_context * whisper_init_no_state(struct whisper_model_loader * loader),
-        "use whisper_init_with_params_no_state instead"
-    );
-
-    WHISPER_API struct whisper_state * whisper_init_state(struct whisper_context * ctx);
-
-    // Given a context, enable use of OpenVINO for encode inference.
-    // model_path: Optional path to OpenVINO encoder IR model. If set to nullptr,
-    //                      the path will be generated from the ggml model path that was passed
-    //                      in to whisper_init_from_file. For example, if 'path_model' was
-    //                      "/path/to/ggml-base.en.bin", then OpenVINO IR model path will be
-    //                      assumed to be "/path/to/ggml-base.en-encoder-openvino.xml".
-    // device: OpenVINO device to run inference on ("CPU", "GPU", etc.)
-    // cache_dir: Optional cache directory that can speed up init time, especially for
-    //                     GPU, by caching compiled 'blobs' there.
-    //                     Set to nullptr if not used.
-    // Returns 0 on success. If OpenVINO is not enabled in build, this simply returns 1.
-    WHISPER_API int whisper_ctx_init_openvino_encoder(
-        struct whisper_context * ctx,
-                    const char * model_path,
-                    const char * device,
-                    const char * cache_dir);
-
-    // Frees all allocated memory
-    WHISPER_API void whisper_free      (struct whisper_context * ctx);
-    WHISPER_API void whisper_free_state(struct whisper_state * state);
-    WHISPER_API void whisper_free_params(struct whisper_full_params * params);
-    WHISPER_API void whisper_free_context_params(struct whisper_context_params * params);
-
-    // Convert RAW PCM audio to log mel spectrogram.
-    // The resulting spectrogram is stored inside the default state of the provided whisper context.
-    // Returns 0 on success
-    WHISPER_API int whisper_pcm_to_mel(
-            struct whisper_context * ctx,
-                       const float * samples,
-                               int   n_samples,
-                               int   n_threads);
-
-    WHISPER_API int whisper_pcm_to_mel_with_state(
-            struct whisper_context * ctx,
-              struct whisper_state * state,
-                       const float * samples,
-                               int   n_samples,
-                               int   n_threads);
-
-    // This can be used to set a custom log mel spectrogram inside the default state of the provided whisper context.
-    // Use this instead of whisper_pcm_to_mel() if you want to provide your own log mel spectrogram.
-    // n_mel must be 80
-    // Returns 0 on success
-    WHISPER_API int whisper_set_mel(
-            struct whisper_context * ctx,
-                       const float * data,
-                               int   n_len,
-                               int   n_mel);
-
-    WHISPER_API int whisper_set_mel_with_state(
-            struct whisper_context * ctx,
-              struct whisper_state * state,
-                       const float * data,
-                               int   n_len,
-                               int   n_mel);
-
-    // Run the Whisper encoder on the log mel spectrogram stored inside the default state in the provided whisper context.
-    // Make sure to call whisper_pcm_to_mel() or whisper_set_mel() first.
-    // offset can be used to specify the offset of the first frame in the spectrogram.
-    // Returns 0 on success
-    WHISPER_API int whisper_encode(
-            struct whisper_context * ctx,
-                               int   offset,
-                               int   n_threads);
-
-    WHISPER_API int whisper_encode_with_state(
-            struct whisper_context * ctx,
-              struct whisper_state * state,
-                               int   offset,
-                               int   n_threads);
-
-    // Run the Whisper decoder to obtain the logits and probabilities for the next token.
-    // Make sure to call whisper_encode() first.
-    // tokens + n_tokens is the provided context for the decoder.
-    // n_past is the number of tokens to use from previous decoder calls.
-    // Returns 0 on success
-    // TODO: add support for multiple decoders
-    WHISPER_API int whisper_decode(
-            struct whisper_context * ctx,
-               const whisper_token * tokens,
-                               int   n_tokens,
-                               int   n_past,
-                               int   n_threads);
-
-    WHISPER_API int whisper_decode_with_state(
-            struct whisper_context * ctx,
-              struct whisper_state * state,
-               const whisper_token * tokens,
-                               int   n_tokens,
-                               int   n_past,
-                               int   n_threads);
-
-    // Convert the provided text into tokens.
-    // The tokens pointer must be large enough to hold the resulting tokens.
-    // Returns the number of tokens on success, no more than n_max_tokens
-    // Returns a negative number on failure - the number of tokens that would have been returned
-    // TODO: not sure if correct
-    WHISPER_API int whisper_tokenize(
-            struct whisper_context * ctx,
-                        const char * text,
-                     whisper_token * tokens,
-                               int   n_max_tokens);
-
-    // Return the number of tokens in the provided text
-    // Equivalent to: -whisper_tokenize(ctx, text, NULL, 0)
-    int whisper_token_count(struct whisper_context * ctx, const char * text);
-
-    // Largest language id (i.e. number of available languages - 1)
-    WHISPER_API int whisper_lang_max_id();
-
-    // Return the id of the specified language, returns -1 if not found
-    // Examples:
-    //   "de" -> 2
-    //   "german" -> 2
-    WHISPER_API int whisper_lang_id(const char * lang);
-
-    // Return the short string of the specified language id (e.g. 2 -> "de"), returns nullptr if not found
-    WHISPER_API const char * whisper_lang_str(int id);
-
-    // Return the short string of the specified language name (e.g. 2 -> "german"), returns nullptr if not found
-    WHISPER_API const char * whisper_lang_str_full(int id);
-
-    // Use mel data at offset_ms to try and auto-detect the spoken language
-    // Make sure to call whisper_pcm_to_mel() or whisper_set_mel() first
-    // Returns the top language id or negative on failure
-    // If not null, fills the lang_probs array with the probabilities of all languages
-    // The array must be whisper_lang_max_id() + 1 in size
-    // ref: https://github.com/openai/whisper/blob/main/whisper/decoding.py#L18-L69
-    WHISPER_API int whisper_lang_auto_detect(
-            struct whisper_context * ctx,
-                               int   offset_ms,
-                               int   n_threads,
-                             float * lang_probs);
-
-    WHISPER_API int whisper_lang_auto_detect_with_state(
-            struct whisper_context * ctx,
-              struct whisper_state * state,
-                               int   offset_ms,
-                               int   n_threads,
-                             float * lang_probs);
-
-    WHISPER_API int whisper_n_len           (struct whisper_context * ctx); // mel length
-    WHISPER_API int whisper_n_len_from_state(struct whisper_state * state); // mel length
-    WHISPER_API int whisper_n_vocab         (struct whisper_context * ctx);
-    WHISPER_API int whisper_n_text_ctx      (struct whisper_context * ctx);
-    WHISPER_API int whisper_n_audio_ctx     (struct whisper_context * ctx);
-    WHISPER_API int whisper_is_multilingual (struct whisper_context * ctx);
-
-    WHISPER_API int whisper_model_n_vocab      (struct whisper_context * ctx);
-    WHISPER_API int whisper_model_n_audio_ctx  (struct whisper_context * ctx);
-    WHISPER_API int whisper_model_n_audio_state(struct whisper_context * ctx);
-    WHISPER_API int whisper_model_n_audio_head (struct whisper_context * ctx);
-    WHISPER_API int whisper_model_n_audio_layer(struct whisper_context * ctx);
-    WHISPER_API int whisper_model_n_text_ctx   (struct whisper_context * ctx);
-    WHISPER_API int whisper_model_n_text_state (struct whisper_context * ctx);
-    WHISPER_API int whisper_model_n_text_head  (struct whisper_context * ctx);
-    WHISPER_API int whisper_model_n_text_layer (struct whisper_context * ctx);
-    WHISPER_API int whisper_model_n_mels       (struct whisper_context * ctx);
-    WHISPER_API int whisper_model_ftype        (struct whisper_context * ctx);
-    WHISPER_API int whisper_model_type         (struct whisper_context * ctx);
-
-    // Token logits obtained from the last call to whisper_decode()
-    // The logits for the last token are stored in the last row
-    // Rows: n_tokens
-    // Cols: n_vocab
-    WHISPER_API float * whisper_get_logits           (struct whisper_context * ctx);
-    WHISPER_API float * whisper_get_logits_from_state(struct whisper_state * state);
-
-    // Token Id -> String. Uses the vocabulary in the provided context
-    WHISPER_API const char * whisper_token_to_str(struct whisper_context * ctx, whisper_token token);
-    WHISPER_API const char * whisper_model_type_readable(struct whisper_context * ctx);
-
-
-    // Special tokens
-    WHISPER_API whisper_token whisper_token_eot (struct whisper_context * ctx);
-    WHISPER_API whisper_token whisper_token_sot (struct whisper_context * ctx);
-    WHISPER_API whisper_token whisper_token_solm(struct whisper_context * ctx);
-    WHISPER_API whisper_token whisper_token_prev(struct whisper_context * ctx);
-    WHISPER_API whisper_token whisper_token_nosp(struct whisper_context * ctx);
-    WHISPER_API whisper_token whisper_token_not (struct whisper_context * ctx);
-    WHISPER_API whisper_token whisper_token_beg (struct whisper_context * ctx);
-    WHISPER_API whisper_token whisper_token_lang(struct whisper_context * ctx, int lang_id);
-
-    // Task tokens
-    WHISPER_API whisper_token whisper_token_translate (struct whisper_context * ctx);
-    WHISPER_API whisper_token whisper_token_transcribe(struct whisper_context * ctx);
-
-    // Performance information from the default state.
-    WHISPER_API void whisper_print_timings(struct whisper_context * ctx);
-    WHISPER_API void whisper_reset_timings(struct whisper_context * ctx);
-
-    // Print system information
-    WHISPER_API const char * whisper_print_system_info(void);
-
-    ////////////////////////////////////////////////////////////////////////////
-
-    // Available sampling strategies
-    enum whisper_sampling_strategy {
-        WHISPER_SAMPLING_GREEDY,      // similar to OpenAI's GreedyDecoder
-        WHISPER_SAMPLING_BEAM_SEARCH, // similar to OpenAI's BeamSearchDecoder
-    };
-
-    // Text segment callback
-    // Called on every newly generated text segment
-    // Use the whisper_full_...() functions to obtain the text segments
-    typedef void (*whisper_new_segment_callback)(struct whisper_context * ctx, struct whisper_state * state, int n_new, void * user_data);
-
-    // Progress callback
-    typedef void (*whisper_progress_callback)(struct whisper_context * ctx, struct whisper_state * state, int progress, void * user_data);
-
-    // Encoder begin callback
-    // If not NULL, called before the encoder starts
-    // If it returns false, the computation is aborted
-    typedef bool (*whisper_encoder_begin_callback)(struct whisper_context * ctx, struct whisper_state * state, void * user_data);
-
-    // Logits filter callback
-    // Can be used to modify the logits before sampling
-    // If not NULL, called after applying temperature to logits
-    typedef void (*whisper_logits_filter_callback)(
-            struct whisper_context * ctx,
-              struct whisper_state * state,
-          const whisper_token_data * tokens,
-                               int   n_tokens,
-                             float * logits,
-                              void * user_data);
-
-    // Parameters for the whisper_full() function
-    // If you change the order or add new parameters, make sure to update the default values in whisper.cpp:
-    // whisper_full_default_params()
-    struct whisper_full_params {
-        enum whisper_sampling_strategy strategy;
-
-        int n_threads;
-        int n_max_text_ctx;     // max tokens to use from past text as prompt for the decoder
-        int offset_ms;          // start offset in ms
-        int duration_ms;        // audio duration to process in ms
-
-        bool translate;
-        bool no_context;        // do not use past transcription (if any) as initial prompt for the decoder
-        bool no_timestamps;     // do not generate timestamps
-        bool single_segment;    // force single segment output (useful for streaming)
-        bool print_special;     // print special tokens (e.g. <SOT>, <EOT>, <BEG>, etc.)
-        bool print_progress;    // print progress information
-        bool print_realtime;    // print results from within whisper.cpp (avoid it, use callback instead)
-        bool print_timestamps;  // print timestamps for each text segment when printing realtime
-
-        // [EXPERIMENTAL] token-level timestamps
-        bool  token_timestamps; // enable token-level timestamps
-        float thold_pt;         // timestamp token probability threshold (~0.01)
-        float thold_ptsum;      // timestamp token sum probability threshold (~0.01)
-        int   max_len;          // max segment length in characters
-        bool  split_on_word;    // split on word rather than on token (when used with max_len)
-        int   max_tokens;       // max tokens per segment (0 = no limit)
-
-        // [EXPERIMENTAL] speed-up techniques
-        // note: these can significantly reduce the quality of the output
-        bool debug_mode;        // enable debug_mode provides extra info (eg. Dump log_mel)
-        int  audio_ctx;         // overwrite the audio context size (0 = use default)
-
-        // [EXPERIMENTAL] [TDRZ] tinydiarize
-        bool tdrz_enable;       // enable tinydiarize speaker turn detection
-
-        // A regular expression that matches tokens to suppress
-        const char * suppress_regex;
-
-        // tokens to provide to the whisper decoder as initial prompt
-        // these are prepended to any existing text context from a previous call
-        // use whisper_tokenize() to convert text to tokens
-        // maximum of whisper_n_text_ctx()/2 tokens are used (typically 224)
-        const char * initial_prompt;
-        const whisper_token * prompt_tokens;
-        int prompt_n_tokens;
-
-        // for auto-detection, set to nullptr, "" or "auto"
-        const char * language;
-        bool detect_language;
-
-        // common decoding parameters:
-        bool suppress_blank;    // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/decoding.py#L89
-        bool suppress_non_speech_tokens; // ref: https://github.com/openai/whisper/blob/7858aa9c08d98f75575035ecd6481f462d66ca27/whisper/tokenizer.py#L224-L253
-
-        float temperature;      // initial decoding temperature, ref: https://ai.stackexchange.com/a/32478
-        float max_initial_ts;   // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/decoding.py#L97
-        float length_penalty;   // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L267
-
-        // fallback parameters
-        // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L274-L278
-        float temperature_inc;
-        float entropy_thold;    // similar to OpenAI's "compression_ratio_threshold"
-        float logprob_thold;
-        float no_speech_thold;  // TODO: not implemented
-
-        struct {
-            int best_of;    // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L264
-        } greedy;
-
-        struct {
-            int beam_size;  // ref: https://github.com/openai/whisper/blob/f82bc59f5ea234d4b97fb2860842ed38519f7e65/whisper/transcribe.py#L265
-
-            float patience; // TODO: not implemented, ref: https://arxiv.org/pdf/2204.05424.pdf
-        } beam_search;
-
-        // called for every newly generated text segment
-        whisper_new_segment_callback new_segment_callback;
-        void * new_segment_callback_user_data;
-
-        // called on each progress update
-        whisper_progress_callback progress_callback;
-        void * progress_callback_user_data;
-
-        // called each time before the encoder starts
-        whisper_encoder_begin_callback encoder_begin_callback;
-        void * encoder_begin_callback_user_data;
-
-        // called each time before ggml computation starts
-        ggml_abort_callback abort_callback;
-        void * abort_callback_user_data;
-
-        // called by each decoder to filter obtained logits
-        whisper_logits_filter_callback logits_filter_callback;
-        void * logits_filter_callback_user_data;
-
-        const whisper_grammar_element ** grammar_rules;
-        size_t                           n_grammar_rules;
-        size_t                           i_start_rule;
-        float                            grammar_penalty;
-    };
-
-    // NOTE: this function allocates memory, and it is the responsibility of the caller to free the pointer - see whisper_free_context_params & whisper_free_params()
-    WHISPER_API struct whisper_context_params * whisper_context_default_params_by_ref();
-    WHISPER_API struct whisper_context_params whisper_context_default_params(void);
-    WHISPER_API struct whisper_full_params * whisper_full_default_params_by_ref(enum whisper_sampling_strategy strategy);
-    WHISPER_API struct whisper_full_params whisper_full_default_params(enum whisper_sampling_strategy strategy);
-
-    // Run the entire model: PCM -> log mel spectrogram -> encoder -> decoder -> text
-    // Not thread safe for same context
-    // Uses the specified decoding strategy to obtain the text.
-    WHISPER_API int whisper_full(
-                struct whisper_context * ctx,
-            struct whisper_full_params   params,
-                           const float * samples,
-                                   int   n_samples);
-
-    WHISPER_API int whisper_full_with_state(
-                struct whisper_context * ctx,
-                  struct whisper_state * state,
-            struct whisper_full_params   params,
-                           const float * samples,
-                                   int   n_samples);
-
-    // Split the input audio in chunks and process each chunk separately using whisper_full_with_state()
-    // Result is stored in the default state of the context
-    // Not thread safe if executed in parallel on the same context.
-    // It seems this approach can offer some speedup in some cases.
-    // However, the transcription accuracy can be worse at the beginning and end of each chunk.
-    WHISPER_API int whisper_full_parallel(
-                struct whisper_context * ctx,
-            struct whisper_full_params   params,
-                           const float * samples,
-                                   int   n_samples,
-                                   int   n_processors);
-
-    // Number of generated text segments
-    // A segment can be a few words, a sentence, or even a paragraph.
-    WHISPER_API int whisper_full_n_segments           (struct whisper_context * ctx);
-    WHISPER_API int whisper_full_n_segments_from_state(struct whisper_state * state);
-
-    // Language id associated with the context's default state
-    WHISPER_API int whisper_full_lang_id(struct whisper_context * ctx);
-
-    // Language id associated with the provided state
-    WHISPER_API int whisper_full_lang_id_from_state(struct whisper_state * state);
-
-    // Get the start and end time of the specified segment
-    WHISPER_API int64_t whisper_full_get_segment_t0           (struct whisper_context * ctx, int i_segment);
-    WHISPER_API int64_t whisper_full_get_segment_t0_from_state(struct whisper_state * state, int i_segment);
-
-    WHISPER_API int64_t whisper_full_get_segment_t1           (struct whisper_context * ctx, int i_segment);
-    WHISPER_API int64_t whisper_full_get_segment_t1_from_state(struct whisper_state * state, int i_segment);
-
-    // Get whether the next segment is predicted as a speaker turn
-    WHISPER_API bool whisper_full_get_segment_speaker_turn_next(struct whisper_context * ctx, int i_segment);
-    WHISPER_API bool whisper_full_get_segment_speaker_turn_next_from_state(struct whisper_state * state, int i_segment);
-
-    // Get the text of the specified segment
-    WHISPER_API const char * whisper_full_get_segment_text           (struct whisper_context * ctx, int i_segment);
-    WHISPER_API const char * whisper_full_get_segment_text_from_state(struct whisper_state * state, int i_segment);
-
-    // Get number of tokens in the specified segment
-    WHISPER_API int whisper_full_n_tokens           (struct whisper_context * ctx, int i_segment);
-    WHISPER_API int whisper_full_n_tokens_from_state(struct whisper_state * state, int i_segment);
-
-    // Get the token text of the specified token in the specified segment
-    WHISPER_API const char * whisper_full_get_token_text           (struct whisper_context * ctx, int i_segment, int i_token);
-    WHISPER_API const char * whisper_full_get_token_text_from_state(struct whisper_context * ctx, struct whisper_state * state, int i_segment, int i_token);
-
-    WHISPER_API whisper_token whisper_full_get_token_id           (struct whisper_context * ctx, int i_segment, int i_token);
-    WHISPER_API whisper_token whisper_full_get_token_id_from_state(struct whisper_state * state, int i_segment, int i_token);
-
-    // Get token data for the specified token in the specified segment
-    // This contains probabilities, timestamps, etc.
-    WHISPER_API whisper_token_data whisper_full_get_token_data           (struct whisper_context * ctx, int i_segment, int i_token);
-    WHISPER_API whisper_token_data whisper_full_get_token_data_from_state(struct whisper_state * state, int i_segment, int i_token);
-
-    // Get the probability of the specified token in the specified segment
-    WHISPER_API float whisper_full_get_token_p           (struct whisper_context * ctx, int i_segment, int i_token);
-    WHISPER_API float whisper_full_get_token_p_from_state(struct whisper_state * state, int i_segment, int i_token);
-
-    ////////////////////////////////////////////////////////////////////////////
-
-    // Temporary helpers needed for exposing ggml interface
-
-    WHISPER_API int          whisper_bench_memcpy          (int n_threads);
-    WHISPER_API const char * whisper_bench_memcpy_str      (int n_threads);
-    WHISPER_API int          whisper_bench_ggml_mul_mat    (int n_threads);
-    WHISPER_API const char * whisper_bench_ggml_mul_mat_str(int n_threads);
-
-    // Control logging output; default behavior is to print to stderr
-
-    WHISPER_API void whisper_log_set(ggml_log_callback log_callback, void * user_data);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif